commit 4ba6572c27c11a7cf02ccf0c210b4a5a89357411 Author: earnolmartin Date: Mon Apr 2 16:26:17 2018 -0600 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..4be535f --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# EHCP-Force-Edition +### Easy Hosting Control Panel + diff --git a/ehcp/.htaccess b/ehcp/.htaccess new file mode 100755 index 0000000..8d0debb --- /dev/null +++ b/ehcp/.htaccess @@ -0,0 +1,9 @@ +Allow from all + + + Deny from all + + + + Deny from all + diff --git a/ehcp/Changelog.txt b/ehcp/Changelog.txt new file mode 100755 index 0000000..3b118ee --- /dev/null +++ b/ehcp/Changelog.txt @@ -0,0 +1,22 @@ +This changelog file may be out of date.. check www.ehcp.net site for more info. + +0.29.15.3: +many things changed. +directory structure changed. security improved. +multi server added... etc.. this file out of date I think.. + +0.29.10.2: +Added initial ssl support, apache can switch to non-ssl only, or ssl+non-ssl mode from ehcp options menu, (29.8.2009) + + + +Changelog for version 0.29.10: + +Added following functions: (13.6.2009, dd.mm.yyyy) +Add subdomain with ftp +Add subdirectory with ftp (Under domainname) +Add extra Ftp Under my ftp space freely +Edit Aliases for this domain + +Added new templte z7, default now. + diff --git a/ehcp/LocalServer.cnf b/ehcp/LocalServer.cnf new file mode 100755 index 0000000..8f66ad3 --- /dev/null +++ b/ehcp/LocalServer.cnf @@ -0,0 +1,11 @@ +[ req ] +prompt = no +distinguished_name = server_distinguished_name + +[ server_distinguished_name ] +commonName = {webserverip} +stateOrProvinceName = Some State +countryName = US +emailAddress = noreply@ehcpforce.tk +organizationName = EHCP Force Edition +organizationalUnitName = Dedicated Web Server diff --git a/ehcp/adodb5/.idea/adodb.iml b/ehcp/adodb5/.idea/adodb.iml new file mode 100644 index 0000000..a78c20f --- /dev/null +++ b/ehcp/adodb5/.idea/adodb.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/copyright/profiles_settings.xml b/ehcp/adodb5/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/ehcp/adodb5/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/dictionaries/dregad.xml b/ehcp/adodb5/.idea/dictionaries/dregad.xml new file mode 100644 index 0000000..589d7f0 --- /dev/null +++ b/ehcp/adodb5/.idea/dictionaries/dregad.xml @@ -0,0 +1,9 @@ + + + + adodb + mssql + mssqlnative + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/inspectionProfiles/Project_Default.xml b/ehcp/adodb5/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..5cb71ef --- /dev/null +++ b/ehcp/adodb5/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/inspectionProfiles/profiles_settings.xml b/ehcp/adodb5/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..3b31283 --- /dev/null +++ b/ehcp/adodb5/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/modules.xml b/ehcp/adodb5/.idea/modules.xml new file mode 100644 index 0000000..902f1ce --- /dev/null +++ b/ehcp/adodb5/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/vcs.xml b/ehcp/adodb5/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/ehcp/adodb5/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.idea/workspace.xml b/ehcp/adodb5/.idea/workspace.xml new file mode 100644 index 0000000..8cd2cf5 --- /dev/null +++ b/ehcp/adodb5/.idea/workspace.xml @@ -0,0 +1,450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + SQL + + + + + SqlNoDataSourceInspection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + + + + + + + + + 1459369231815 + + + 1459370567207 + + + 1459411447176 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/.mailmap b/ehcp/adodb5/.mailmap new file mode 100644 index 0000000..1f2f7e7 --- /dev/null +++ b/ehcp/adodb5/.mailmap @@ -0,0 +1,4 @@ +Andreas Fernandez +Mike Benoit MikeB +Mike Benoit mike.benoit + diff --git a/ehcp/adodb5/LICENSE.md b/ehcp/adodb5/LICENSE.md new file mode 100644 index 0000000..b819158 --- /dev/null +++ b/ehcp/adodb5/LICENSE.md @@ -0,0 +1,496 @@ +ADOdb License +============= + +ADOdb is dual licensed under BSD and LGPL. + +In plain English, you do not need to distribute your application in source code form, +nor do you need to distribute ADOdb source code, provided you follow the rest of +terms of the BSD license. + +For more info about ADOdb, visit http://adodb.sourceforge.net/ + +BSD 3-Clause License +-------------------- + +(c) 2000-2013 John Lim (jlim@natsoft.com) +(c) 2014 Damien Regad, Mark Newnham and the ADOdb community +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +### DISCLAIMER + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +GNU LESSER GENERAL PUBLIC LICENSE +--------------------------------- + +_Version 2.1, February 1999_ +_Copyright © 1991, 1999 Free Software Foundation, Inc._ +_51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA_ + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +_This is the first released version of the Lesser GPL. It also counts +as the successor of the GNU Library Public License, version 2, hence +the version number 2.1._ + +### Preamble + +The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: **(1)** we copyright the +library, and **(2)** we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + +Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + +When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + +We call this license the “Lesser” General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + +For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + +Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +“work based on the library” and a “work that uses the library”. The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +### TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +**0.** This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called “this License”). +Each licensee is addressed as “you”. + +A “library” means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + +The “Library”, below, refers to any such software library or work +which has been distributed under these terms. A “work based on the +Library” means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term “modification”.) + +“Source code” for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + +**1.** You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + +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 Library or any portion +of it, thus forming a work based on the Library, 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)** The modified work must itself be a software library. +* **b)** You must cause the files modified to carry prominent notices +stating that you changed the files and the date of any change. +* **c)** You must cause the whole of the work to be licensed at no +charge to all third parties under the terms of this License. +* **d)** If a facility in the modified Library refers to a function or a +table of data to be supplied by an application program that uses +the facility, other than as an argument passed when the facility +is invoked, then you must make a good faith effort to ensure that, +in the event an application does not supply such function or +table, the facility still operates, and performs whatever part of +its purpose remains meaningful. +(For example, a function in a library to compute square roots has +a purpose that is entirely well-defined independent of the +application. Therefore, Subsection 2d requires that any +application-supplied function or table used by this function must +be optional: if the application does not supply it, the square +root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +**3.** You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + +Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + +**4.** You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + +If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + +**5.** A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a “work that uses the Library”. Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + +However, linking a “work that uses the Library” with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a “work that uses the +library”. The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + +When a “work that uses the Library” uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + +**6.** As an exception to the Sections above, you may also combine or +link a “work that uses the Library” with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + +* **a)** Accompany the work with the complete corresponding +machine-readable source code for the Library including whatever +changes were used in the work (which must be distributed under +Sections 1 and 2 above); and, if the work is an executable linked +with the Library, with the complete machine-readable “work that +uses the Library”, as object code and/or source code, so that the +user can modify the Library and then relink to produce a modified +executable containing the modified Library. (It is understood +that the user who changes the contents of definitions files in the +Library will not necessarily be able to recompile the application +to use the modified definitions.) +* **b)** Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that (1) uses at run time a +copy of the library already present on the user's computer system, +rather than copying library functions into the executable, and (2) +will operate properly with a modified version of the library, if +the user installs one, as long as the modified version is +interface-compatible with the version that the work was made with. +* **c)** Accompany the work with a written offer, valid for at +least three years, to give the same user the materials +specified in Subsection 6a, above, for a charge no more +than the cost of performing this distribution. +* **d)** If distribution of the work is made by offering access to copy +from a designated place, offer equivalent access to copy the above +specified materials from the same place. +* **e)** Verify that the user has already received a copy of these +materials or that you have already sent this user a copy. + +For an executable, the required form of the “work that uses the +Library” must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + +It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + +**7.** You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + +* **a)** Accompany the combined library with a copy of the same work +based on the Library, uncombined with any other library +facilities. This must be distributed under the terms of the +Sections above. +* **b)** Give prominent notice with the combined library of the fact +that part of it is a work based on the Library, and explaining +where to find the accompanying uncombined form of the same work. + +**8.** You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + +**9.** 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +**10.** Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + +**11.** 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + +**12.** If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + +**13.** The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + +**14.** If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + +**15.** BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY “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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +**16.** 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +_END OF TERMS AND CONDITIONS_ diff --git a/ehcp/adodb5/README.md b/ehcp/adodb5/README.md new file mode 100644 index 0000000..958cca5 --- /dev/null +++ b/ehcp/adodb5/README.md @@ -0,0 +1,109 @@ +ADOdb Library for PHP5 +====================== + +[![Join chat on Gitter](https://img.shields.io/gitter/room/form-data/form-data.svg)](https://gitter.im/adodb/adodb?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Download ADOdb](https://img.shields.io/sourceforge/dm/adodb.svg)](https://sourceforge.net/projects/adodb/files/latest/download) + +(c) 2000-2013 John Lim (jlim@natsoft.com) +(c) 2014 Damien Regad, Mark Newnham and the ADOdb community + +Released under both [BSD 3-Clause](https://github.com/ADOdb/ADOdb/blob/master/LICENSE.md#bsd-3-clause-license) +and [GNU Lesser GPL library 2.1](https://github.com/ADOdb/ADOdb/blob/master/LICENSE.md#gnu-lesser-general-public-license) +licenses. +This means you can use it in proprietary products; +see [License](https://github.com/ADOdb/ADOdb/blob/master/LICENSE.md) for details. + +Home page: http://adodb.org/ + +> **WARNING: known issue with Associative Fetch Mode in ADOdb v5.19 +-- PLEASE UPGRADE TO v5.20 !** +> When fetching data in Associative mode (i.e. when `$ADODB_FETCH_MODE` is +> set to *ADODB_FETCH_ASSOC*), recordsets do not return any data (empty strings) +> when using some database drivers. The problem has been reported on MSSQL, +> Interbase and Foxpro, but possibly affects other drivers as well; all drivers +> derived from the above are also impacted. +> For further details, please refer to [Issue #20](https://github.com/ADOdb/ADOdb/issues/20). + + +Introduction +============ + +PHP's database access functions are not standardized. This creates a +need for a database class library to hide the differences between the +different databases (encapsulate the differences) so we can easily +switch databases. + +The library currently supports MySQL, Interbase, Sybase, PostgreSQL, Oracle, +Microsoft SQL server, Foxpro ODBC, Access ODBC, Informix, DB2, +Sybase SQL Anywhere, generic ODBC and Microsoft's ADO. + +We hope more people will contribute drivers to support other databases. + + +Installation +============ + +Unpack all the files into a directory accessible by your web server. + +To test, try modifying some of the tutorial examples. +Make sure you customize the connection settings correctly. + +You can debug using: + +``` php +debug = true; +$db->Connect($server, $user, $password, $database); +$rs = $db->Execute('select * from some_small_table'); +print "
";
+print_r($rs->GetRows());
+print "
"; +``` + + +Documentation and Examples +========================== + +Refer to the [ADOdb website](http://adodb.org/) for library documentation and examples. The documentation can also be [downloaded for offline viewing](https://sourceforge.net/projects/adodb/files/Documentation/). + +- [Main documentation](http://adodb.org/dokuwiki/doku.php?id=v5:userguide:userguide_index): Query, update and insert records using a portable API. +- [Data dictionary](http://adodb.org/dokuwiki/doku.php?id=v5:dictionary:dictionary_index) describes how to create database tables and indexes in a portable manner. +- [Database performance monitoring](http://adodb.org/dokuwiki/doku.php?id=v5:performance:performance_index) allows you to perform health checks, tune and monitor your database. +- [Database-backed sessions](http://adodb.org/dokuwiki/doku.php?id=v5:session:session_index). + +There is also a [tutorial](http://adodb.org/dokuwiki/doku.php?id=v5:userguide:mysql_tutorial) that contrasts ADOdb code with PHP native MySQL code. + + +Files +===== + +- `adodb.inc.php` is the library's main file. You only need to include this file. +- `adodb-*.inc.php` are the database specific driver code. +- `adodb-session.php` is the PHP4 session handling code. +- `test.php` contains a list of test commands to exercise the class library. +- `testdatabases.inc.php` contains the list of databases to apply the tests on. +- `Benchmark.php` is a simple benchmark to test the throughput of a SELECT +statement for databases described in testdatabases.inc.php. The benchmark +tables are created in test.php. + + +Support +======= + +To discuss with the ADOdb development team and users, connect to our +[Gitter chatroom](https://gitter.im/adodb/adodb) using your Github credentials. + +Please report bugs, issues and feature requests on Github: + +https://github.com/ADOdb/ADOdb/issues + +You may also find legacy issues in + +- the old [ADOdb forums](http://phplens.com/lens/lensforum/topics.php?id=4) on phplens.com +- the [SourceForge tickets section](http://sourceforge.net/p/adodb/_list/tickets) + +However, please note that they are not actively monitored and should +only be used as reference. diff --git a/ehcp/adodb5/adodb-active-record.inc.php b/ehcp/adodb5/adodb-active-record.inc.php new file mode 100644 index 0000000..b088359 --- /dev/null +++ b/ehcp/adodb5/adodb-active-record.inc.php @@ -0,0 +1,1142 @@ +_dbat +$_ADODB_ACTIVE_DBS = array(); +$ACTIVE_RECORD_SAFETY = true; +$ADODB_ACTIVE_DEFVALS = false; +$ADODB_ACTIVE_CACHESECS = 0; + +class ADODB_Active_DB { + var $db; // ADOConnection + var $tables; // assoc array of ADODB_Active_Table objects, indexed by tablename +} + +class ADODB_Active_Table { + var $name; // table name + var $flds; // assoc array of adofieldobjs, indexed by fieldname + var $keys; // assoc array of primary keys, indexed by fieldname + var $_created; // only used when stored as a cached file + var $_belongsTo = array(); + var $_hasMany = array(); +} + +// $db = database connection +// $index = name of index - can be associative, for an example see +// http://phplens.com/lens/lensforum/msgs.php?id=17790 +// returns index into $_ADODB_ACTIVE_DBS +function ADODB_SetDatabaseAdapter(&$db, $index=false) +{ + global $_ADODB_ACTIVE_DBS; + + foreach($_ADODB_ACTIVE_DBS as $k => $d) { + if (PHP_VERSION >= 5) { + if ($d->db === $db) { + return $k; + } + } else { + if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database) { + return $k; + } + } + } + + $obj = new ADODB_Active_DB(); + $obj->db = $db; + $obj->tables = array(); + + if ($index == false) { + $index = sizeof($_ADODB_ACTIVE_DBS); + } + + $_ADODB_ACTIVE_DBS[$index] = $obj; + + return sizeof($_ADODB_ACTIVE_DBS)-1; +} + + +class ADODB_Active_Record { + static $_changeNames = true; // dynamically pluralize table names + static $_quoteNames = false; + + static $_foreignSuffix = '_id'; // + var $_dbat; // associative index pointing to ADODB_Active_DB eg. $ADODB_Active_DBS[_dbat] + var $_table; // tablename, if set in class definition then use it as table name + var $_tableat; // associative index pointing to ADODB_Active_Table, eg $ADODB_Active_DBS[_dbat]->tables[$this->_tableat] + var $_where; // where clause set in Load() + var $_saved = false; // indicates whether data is already inserted. + var $_lasterr = false; // last error message + var $_original = false; // the original values loaded or inserted, refreshed on update + + var $foreignName; // CFR: class name when in a relationship + + var $lockMode = ' for update '; // you might want to change to + + static function UseDefaultValues($bool=null) + { + global $ADODB_ACTIVE_DEFVALS; + if (isset($bool)) { + $ADODB_ACTIVE_DEFVALS = $bool; + } + return $ADODB_ACTIVE_DEFVALS; + } + + // should be static + static function SetDatabaseAdapter(&$db, $index=false) + { + return ADODB_SetDatabaseAdapter($db, $index); + } + + + public function __set($name, $value) + { + $name = str_replace(' ', '_', $name); + $this->$name = $value; + } + + // php5 constructor + function __construct($table = false, $pkeyarr=false, $db=false) + { + global $ADODB_ASSOC_CASE,$_ADODB_ACTIVE_DBS; + + if ($db == false && is_object($pkeyarr)) { + $db = $pkeyarr; + $pkeyarr = false; + } + + if (!$table) { + if (!empty($this->_table)) { + $table = $this->_table; + } + else $table = $this->_pluralize(get_class($this)); + } + $this->foreignName = strtolower(get_class($this)); // CFR: default foreign name + if ($db) { + $this->_dbat = ADODB_Active_Record::SetDatabaseAdapter($db); + } else if (!isset($this->_dbat)) { + if (sizeof($_ADODB_ACTIVE_DBS) == 0) { + $this->Error( + "No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)", + 'ADODB_Active_Record::__constructor' + ); + } + end($_ADODB_ACTIVE_DBS); + $this->_dbat = key($_ADODB_ACTIVE_DBS); + } + + $this->_table = $table; + $this->_tableat = $table; # reserved for setting the assoc value to a non-table name, eg. the sql string in future + + $this->UpdateActiveTable($pkeyarr); + } + + function __wakeup() + { + $class = get_class($this); + new $class; + } + + function _pluralize($table) + { + if (!ADODB_Active_Record::$_changeNames) { + return $table; + } + + $ut = strtoupper($table); + $len = strlen($table); + $lastc = $ut[$len-1]; + $lastc2 = substr($ut,$len-2); + switch ($lastc) { + case 'S': + return $table.'es'; + case 'Y': + return substr($table,0,$len-1).'ies'; + case 'X': + return $table.'es'; + case 'H': + if ($lastc2 == 'CH' || $lastc2 == 'SH') { + return $table.'es'; + } + default: + return $table.'s'; + } + } + + // CFR Lamest singular inflector ever - @todo Make it real! + // Note: There is an assumption here...and it is that the argument's length >= 4 + function _singularize($tables) + { + + if (!ADODB_Active_Record::$_changeNames) { + return $table; + } + + $ut = strtoupper($tables); + $len = strlen($tables); + if($ut[$len-1] != 'S') { + return $tables; // I know...forget oxen + } + if($ut[$len-2] != 'E') { + return substr($tables, 0, $len-1); + } + switch($ut[$len-3]) { + case 'S': + case 'X': + return substr($tables, 0, $len-2); + case 'I': + return substr($tables, 0, $len-3) . 'y'; + case 'H'; + if($ut[$len-4] == 'C' || $ut[$len-4] == 'S') { + return substr($tables, 0, $len-2); + } + default: + return substr($tables, 0, $len-1); // ? + } + } + + function hasMany($foreignRef, $foreignKey = false, $foreignClass = 'ADODB_Active_Record') + { + $ar = new $foreignClass($foreignRef); + $ar->foreignName = $foreignRef; + $ar->UpdateActiveTable(); + $ar->foreignKey = ($foreignKey) ? $foreignKey : $foreignRef.ADODB_Active_Record::$_foreignSuffix; + $table =& $this->TableInfo(); + $table->_hasMany[$foreignRef] = $ar; + # $this->$foreignRef = $this->_hasMany[$foreignRef]; // WATCHME Removed assignment by ref. to please __get() + } + + // use when you don't want ADOdb to auto-pluralize tablename + static function TableHasMany($table, $foreignRef, $foreignKey = false, $foreignClass = 'ADODB_Active_Record') + { + $ar = new ADODB_Active_Record($table); + $ar->hasMany($foreignRef, $foreignKey, $foreignClass); + } + + // use when you don't want ADOdb to auto-pluralize tablename + static function TableKeyHasMany($table, $tablePKey, $foreignRef, $foreignKey = false, $foreignClass = 'ADODB_Active_Record') + { + if (!is_array($tablePKey)) { + $tablePKey = array($tablePKey); + } + $ar = new ADODB_Active_Record($table,$tablePKey); + $ar->hasMany($foreignRef, $foreignKey, $foreignClass); + } + + + // use when you want ADOdb to auto-pluralize tablename for you. Note that the class must already be defined. + // e.g. class Person will generate relationship for table Persons + static function ClassHasMany($parentclass, $foreignRef, $foreignKey = false, $foreignClass = 'ADODB_Active_Record') + { + $ar = new $parentclass(); + $ar->hasMany($foreignRef, $foreignKey, $foreignClass); + } + + + function belongsTo($foreignRef,$foreignKey=false, $parentKey='', $parentClass = 'ADODB_Active_Record') + { + global $inflector; + + $ar = new $parentClass($this->_pluralize($foreignRef)); + $ar->foreignName = $foreignRef; + $ar->parentKey = $parentKey; + $ar->UpdateActiveTable(); + $ar->foreignKey = ($foreignKey) ? $foreignKey : $foreignRef.ADODB_Active_Record::$_foreignSuffix; + + $table =& $this->TableInfo(); + $table->_belongsTo[$foreignRef] = $ar; + # $this->$foreignRef = $this->_belongsTo[$foreignRef]; + } + + static function ClassBelongsTo($class, $foreignRef, $foreignKey=false, $parentKey='', $parentClass = 'ADODB_Active_Record') + { + $ar = new $class(); + $ar->belongsTo($foreignRef, $foreignKey, $parentKey, $parentClass); + } + + static function TableBelongsTo($table, $foreignRef, $foreignKey=false, $parentKey='', $parentClass = 'ADODB_Active_Record') + { + $ar = new ADOdb_Active_Record($table); + $ar->belongsTo($foreignRef, $foreignKey, $parentKey, $parentClass); + } + + static function TableKeyBelongsTo($table, $tablePKey, $foreignRef, $foreignKey=false, $parentKey='', $parentClass = 'ADODB_Active_Record') + { + if (!is_array($tablePKey)) { + $tablePKey = array($tablePKey); + } + $ar = new ADOdb_Active_Record($table, $tablePKey); + $ar->belongsTo($foreignRef, $foreignKey, $parentKey, $parentClass); + } + + + /** + * __get Access properties - used for lazy loading + * + * @param mixed $name + * @access protected + * @return mixed + */ + function __get($name) + { + return $this->LoadRelations($name, '', -1, -1); + } + + /** + * @param string $name + * @param string $whereOrderBy : eg. ' AND field1 = value ORDER BY field2' + * @param offset + * @param limit + * @return mixed + */ + function LoadRelations($name, $whereOrderBy='', $offset=-1,$limit=-1) + { + $extras = array(); + $table = $this->TableInfo(); + if ($limit >= 0) { + $extras['limit'] = $limit; + } + if ($offset >= 0) { + $extras['offset'] = $offset; + } + + if (strlen($whereOrderBy)) { + if (!preg_match('/^[ \n\r]*AND/i', $whereOrderBy)) { + if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i', $whereOrderBy)) { + $whereOrderBy = 'AND ' . $whereOrderBy; + } + } + } + + if(!empty($table->_belongsTo[$name])) { + $obj = $table->_belongsTo[$name]; + $columnName = $obj->foreignKey; + if(empty($this->$columnName)) { + $this->$name = null; + } + else { + if ($obj->parentKey) { + $key = $obj->parentKey; + } + else { + $key = reset($table->keys); + } + + $arrayOfOne = $obj->Find($key.'='.$this->$columnName.' '.$whereOrderBy,false,false,$extras); + if ($arrayOfOne) { + $this->$name = $arrayOfOne[0]; + return $arrayOfOne[0]; + } + } + } + if(!empty($table->_hasMany[$name])) { + $obj = $table->_hasMany[$name]; + $key = reset($table->keys); + $id = @$this->$key; + if (!is_numeric($id)) { + $db = $this->DB(); + $id = $db->qstr($id); + } + $objs = $obj->Find($obj->foreignKey.'='.$id. ' '.$whereOrderBy,false,false,$extras); + if (!$objs) { + $objs = array(); + } + $this->$name = $objs; + return $objs; + } + + return array(); + } + ////////////////////////////////// + + // update metadata + function UpdateActiveTable($pkeys=false,$forceUpdate=false) + { + global $ADODB_ASSOC_CASE,$_ADODB_ACTIVE_DBS , $ADODB_CACHE_DIR, $ADODB_ACTIVE_CACHESECS; + global $ADODB_ACTIVE_DEFVALS,$ADODB_FETCH_MODE; + + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + + $table = $this->_table; + $tables = $activedb->tables; + $tableat = $this->_tableat; + if (!$forceUpdate && !empty($tables[$tableat])) { + + $acttab = $tables[$tableat]; + foreach($acttab->flds as $name => $fld) { + if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) { + $this->$name = $fld->default_value; + } + else { + $this->$name = null; + } + } + return; + } + $db = $activedb->db; + $fname = $ADODB_CACHE_DIR . '/adodb_' . $db->databaseType . '_active_'. $table . '.cache'; + if (!$forceUpdate && $ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR && file_exists($fname)) { + $fp = fopen($fname,'r'); + @flock($fp, LOCK_SH); + $acttab = unserialize(fread($fp,100000)); + fclose($fp); + if ($acttab->_created + $ADODB_ACTIVE_CACHESECS - (abs(rand()) % 16) > time()) { + // abs(rand()) randomizes deletion, reducing contention to delete/refresh file + // ideally, you should cache at least 32 secs + + foreach($acttab->flds as $name => $fld) { + if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) { + $this->$name = $fld->default_value; + } + else { + $this->$name = null; + } + } + + $activedb->tables[$table] = $acttab; + + //if ($db->debug) ADOConnection::outp("Reading cached active record file: $fname"); + return; + } else if ($db->debug) { + ADOConnection::outp("Refreshing cached active record file: $fname"); + } + } + $activetab = new ADODB_Active_Table(); + $activetab->name = $table; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($db->fetchMode !== false) { + $savem = $db->SetFetchMode(false); + } + + $cols = $db->MetaColumns($table); + + if (isset($savem)) { + $db->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!$cols) { + $this->Error("Invalid table name: $table",'UpdateActiveTable'); + return false; + } + $fld = reset($cols); + if (!$pkeys) { + if (isset($fld->primary_key)) { + $pkeys = array(); + foreach($cols as $name => $fld) { + if (!empty($fld->primary_key)) { + $pkeys[] = $name; + } + } + } else + $pkeys = $this->GetPrimaryKeys($db, $table); + } + if (empty($pkeys)) { + $this->Error("No primary key found for table $table",'UpdateActiveTable'); + return false; + } + + $attr = array(); + $keys = array(); + + switch($ADODB_ASSOC_CASE) { + case 0: + foreach($cols as $name => $fldobj) { + $name = strtolower($name); + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + foreach($pkeys as $k => $name) { + $keys[strtolower($name)] = strtolower($name); + } + break; + + case 1: + foreach($cols as $name => $fldobj) { + $name = strtoupper($name); + + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + + foreach($pkeys as $k => $name) { + $keys[strtoupper($name)] = strtoupper($name); + } + break; + default: + foreach($cols as $name => $fldobj) { + $name = ($fldobj->name); + + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + foreach($pkeys as $k => $name) { + $keys[$name] = $cols[$name]->name; + } + break; + } + + $activetab->keys = $keys; + $activetab->flds = $attr; + + if ($ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR) { + $activetab->_created = time(); + $s = serialize($activetab); + if (!function_exists('adodb_write_file')) { + include(ADODB_DIR.'/adodb-csvlib.inc.php'); + } + adodb_write_file($fname,$s); + } + if (isset($activedb->tables[$table])) { + $oldtab = $activedb->tables[$table]; + + if ($oldtab) { + $activetab->_belongsTo = $oldtab->_belongsTo; + $activetab->_hasMany = $oldtab->_hasMany; + } + } + $activedb->tables[$table] = $activetab; + } + + function GetPrimaryKeys(&$db, $table) + { + return $db->MetaPrimaryKeys($table); + } + + // error handler for both PHP4+5. + function Error($err,$fn) + { + global $_ADODB_ACTIVE_DBS; + + $fn = get_class($this).'::'.$fn; + $this->_lasterr = $fn.': '.$err; + + if ($this->_dbat < 0) { + $db = false; + } + else { + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $db = $activedb->db; + } + + if (function_exists('adodb_throw')) { + if (!$db) { + adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false); + } + else { + adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db); + } + } else { + if (!$db || $db->debug) { + ADOConnection::outp($this->_lasterr); + } + } + + } + + // return last error message + function ErrorMsg() + { + if (!function_exists('adodb_throw')) { + if ($this->_dbat < 0) { + $db = false; + } + else { + $db = $this->DB(); + } + + // last error could be database error too + if ($db && $db->ErrorMsg()) { + return $db->ErrorMsg(); + } + } + return $this->_lasterr; + } + + function ErrorNo() + { + if ($this->_dbat < 0) { + return -9999; // no database connection... + } + $db = $this->DB(); + + return (int) $db->ErrorNo(); + } + + + // retrieve ADOConnection from _ADODB_Active_DBs + function DB() + { + global $_ADODB_ACTIVE_DBS; + + if ($this->_dbat < 0) { + $false = false; + $this->Error("No database connection set: use ADOdb_Active_Record::SetDatabaseAdaptor(\$db)", "DB"); + return $false; + } + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $db = $activedb->db; + return $db; + } + + // retrieve ADODB_Active_Table + function &TableInfo() + { + global $_ADODB_ACTIVE_DBS; + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $table = $activedb->tables[$this->_tableat]; + return $table; + } + + + // I have an ON INSERT trigger on a table that sets other columns in the table. + // So, I find that for myTable, I want to reload an active record after saving it. -- Malcolm Cook + function Reload() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + $where = $this->GenWhere($db, $table); + return($this->Load($where)); + } + + + // set a numeric array (using natural table field ordering) as object properties + function Set(&$row) + { + global $ACTIVE_RECORD_SAFETY; + + $db = $this->DB(); + + if (!$row) { + $this->_saved = false; + return false; + } + + $this->_saved = true; + + $table = $this->TableInfo(); + if ($ACTIVE_RECORD_SAFETY && sizeof($table->flds) != sizeof($row)) { + # + $bad_size = TRUE; + if (sizeof($row) == 2 * sizeof($table->flds)) { + // Only keep string keys + $keys = array_filter(array_keys($row), 'is_string'); + if (sizeof($keys) == sizeof($table->flds)) { + $bad_size = FALSE; + } + } + if ($bad_size) { + $this->Error("Table structure of $this->_table has changed","Load"); + return false; + } + # + } + else + $keys = array_keys($row); + + # + reset($keys); + $this->_original = array(); + foreach($table->flds as $name=>$fld) { + $value = $row[current($keys)]; + $this->$name = $value; + $this->_original[] = $value; + next($keys); + } + + # + return true; + } + + // get last inserted id for INSERT + function LastInsertID(&$db,$fieldname) + { + if ($db->hasInsertID) { + $val = $db->Insert_ID($this->_table,$fieldname); + } + else { + $val = false; + } + + if (is_null($val) || $val === false) { + // this might not work reliably in multi-user environment + return $db->GetOne("select max(".$fieldname.") from ".$this->_table); + } + return $val; + } + + // quote data in where clause + function doquote(&$db, $val,$t) + { + switch($t) { + case 'L': + if (strpos($db->databaseType,'postgres') !== false) { + return $db->qstr($val); + } + case 'D': + case 'T': + if (empty($val)) { + return 'null'; + } + case 'B': + case 'N': + case 'C': + case 'X': + if (is_null($val)) { + return 'null'; + } + + if (strlen($val)>0 && + (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'") + ) { + return $db->qstr($val); + break; + } + default: + return $val; + break; + } + } + + // generate where clause for an UPDATE/SELECT + function GenWhere(&$db, &$table) + { + $keys = $table->keys; + $parr = array(); + + foreach($keys as $k) { + $f = $table->flds[$k]; + if ($f) { + $parr[] = $k.' = '.$this->doquote($db,$this->$k,$db->MetaType($f->type)); + } + } + return implode(' and ', $parr); + } + + + function _QName($n,$db=false) + { + if (!ADODB_Active_Record::$_quoteNames) { + return $n; + } + if (!$db) { + $db = $this->DB(); + if (!$db) { + return false; + } + } + return $db->nameQuote.$n.$db->nameQuote; + } + + //------------------------------------------------------------ Public functions below + + function Load($where=null,$bindarr=false, $lock = false) + { + global $ADODB_FETCH_MODE; + + $db = $this->DB(); + if (!$db) { + return false; + } + $this->_where = $where; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($db->fetchMode !== false) { + $savem = $db->SetFetchMode(false); + } + + $qry = "select * from ".$this->_table; + + if($where) { + $qry .= ' WHERE '.$where; + } + if ($lock) { + $qry .= $this->lockMode; + } + + $row = $db->GetRow($qry,$bindarr); + + if (isset($savem)) { + $db->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + return $this->Set($row); + } + + function LoadLocked($where=null, $bindarr=false) + { + $this->Load($where,$bindarr,true); + } + + # useful for multiple record inserts + # see http://phplens.com/lens/lensforum/msgs.php?id=17795 + function Reset() + { + $this->_where=null; + $this->_saved = false; + $this->_lasterr = false; + $this->_original = false; + $vars=get_object_vars($this); + foreach($vars as $k=>$v){ + if(substr($k,0,1)!=='_'){ + $this->{$k}=null; + } + } + $this->foreignName=strtolower(get_class($this)); + return true; + } + + // false on error + function Save() + { + if ($this->_saved) { + $ok = $this->Update(); + } + else { + $ok = $this->Insert(); + } + + return $ok; + } + + + // false on error + function Insert() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $cnt = 0; + $table = $this->TableInfo(); + + $valarr = array(); + $names = array(); + $valstr = array(); + + foreach($table->flds as $name=>$fld) { + $val = $this->$name; + if(!is_array($val) || !is_null($val) || !array_key_exists($name, $table->keys)) { + $valarr[] = $val; + $names[] = $this->_QName($name,$db); + $valstr[] = $db->Param($cnt); + $cnt += 1; + } + } + + if (empty($names)){ + foreach($table->flds as $name=>$fld) { + $valarr[] = null; + $names[] = $name; + $valstr[] = $db->Param($cnt); + $cnt += 1; + } + } + $sql = 'INSERT INTO '.$this->_table."(".implode(',',$names).') VALUES ('.implode(',',$valstr).')'; + $ok = $db->Execute($sql,$valarr); + + if ($ok) { + $this->_saved = true; + $autoinc = false; + foreach($table->keys as $k) { + if (is_null($this->$k)) { + $autoinc = true; + break; + } + } + if ($autoinc && sizeof($table->keys) == 1) { + $k = reset($table->keys); + $this->$k = $this->LastInsertID($db,$k); + } + } + + $this->_original = $valarr; + return !empty($ok); + } + + function Delete() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $where = $this->GenWhere($db,$table); + $sql = 'DELETE FROM '.$this->_table.' WHERE '.$where; + $ok = $db->Execute($sql); + + return $ok ? true : false; + } + + // returns an array of active record objects + function Find($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array()) + { + $db = $this->DB(); + if (!$db || empty($this->_table)) { + return false; + } + $arr = $db->GetActiveRecordsClass(get_class($this),$this->_table, $whereOrderBy,$bindarr,$pkeysArr,$extra); + return $arr; + } + + // returns 0 on error, 1 on update, 2 on insert + function Replace() + { + global $ADODB_ASSOC_CASE; + + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $pkey = $table->keys; + + foreach($table->flds as $name=>$fld) { + $val = $this->$name; + /* + if (is_null($val)) { + if (isset($fld->not_null) && $fld->not_null) { + if (isset($fld->default_value) && strlen($fld->default_value)) { + continue; + } + else { + $this->Error("Cannot update null into $name","Replace"); + return false; + } + } + }*/ + if (is_null($val) && !empty($fld->auto_increment)) { + continue; + } + + if (is_array($val)) { + continue; + } + + $t = $db->MetaType($fld->type); + $arr[$name] = $this->doquote($db,$val,$t); + $valarr[] = $val; + } + + if (!is_array($pkey)) { + $pkey = array($pkey); + } + + if ($ADODB_ASSOC_CASE == 0) { + foreach($pkey as $k => $v) + $pkey[$k] = strtolower($v); + } + elseif ($ADODB_ASSOC_CASE == 1) { + foreach($pkey as $k => $v) { + $pkey[$k] = strtoupper($v); + } + } + + $ok = $db->Replace($this->_table,$arr,$pkey); + if ($ok) { + $this->_saved = true; // 1= update 2=insert + if ($ok == 2) { + $autoinc = false; + foreach($table->keys as $k) { + if (is_null($this->$k)) { + $autoinc = true; + break; + } + } + if ($autoinc && sizeof($table->keys) == 1) { + $k = reset($table->keys); + $this->$k = $this->LastInsertID($db,$k); + } + } + + $this->_original = $valarr; + } + return $ok; + } + + // returns 0 on error, 1 on update, -1 if no change in data (no update) + function Update() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $where = $this->GenWhere($db, $table); + + if (!$where) { + $this->error("Where missing for table $table", "Update"); + return false; + } + $valarr = array(); + $neworig = array(); + $pairs = array(); + $i = -1; + $cnt = 0; + foreach($table->flds as $name=>$fld) { + $i += 1; + $val = $this->$name; + $neworig[] = $val; + + if (isset($table->keys[$name]) || is_array($val)) { + continue; + } + + if (is_null($val)) { + if (isset($fld->not_null) && $fld->not_null) { + if (isset($fld->default_value) && strlen($fld->default_value)) { + continue; + } + else { + $this->Error("Cannot set field $name to NULL","Update"); + return false; + } + } + } + + if (isset($this->_original[$i]) && strcmp($val,$this->_original[$i]) == 0) { + continue; + } + + if (is_null($this->_original[$i]) && is_null($val)) { + continue; + } + + $valarr[] = $val; + $pairs[] = $this->_QName($name,$db).'='.$db->Param($cnt); + $cnt += 1; + } + + + if (!$cnt) { + return -1; + } + + $sql = 'UPDATE '.$this->_table." SET ".implode(",",$pairs)." WHERE ".$where; + $ok = $db->Execute($sql,$valarr); + if ($ok) { + $this->_original = $neworig; + return 1; + } + return 0; + } + + function GetAttributeNames() + { + $table = $this->TableInfo(); + if (!$table) { + return false; + } + return array_keys($table->flds); + } + +}; + +function adodb_GetActiveRecordsClass(&$db, $class, $table,$whereOrderBy,$bindarr, $primkeyArr, + $extra) +{ +global $_ADODB_ACTIVE_DBS; + + + $save = $db->SetFetchMode(ADODB_FETCH_NUM); + $qry = "select * from ".$table; + + if (!empty($whereOrderBy)) { + $qry .= ' WHERE '.$whereOrderBy; + } + if(isset($extra['limit'])) { + $rows = false; + if(isset($extra['offset'])) { + $rs = $db->SelectLimit($qry, $extra['limit'], $extra['offset'],$bindarr); + } else { + $rs = $db->SelectLimit($qry, $extra['limit'],-1,$bindarr); + } + if ($rs) { + while (!$rs->EOF) { + $rows[] = $rs->fields; + $rs->MoveNext(); + } + } + } else + $rows = $db->GetAll($qry,$bindarr); + + $db->SetFetchMode($save); + + $false = false; + + if ($rows === false) { + return $false; + } + + + if (!class_exists($class)) { + $db->outp_throw("Unknown class $class in GetActiveRecordsClass()",'GetActiveRecordsClass'); + return $false; + } + $arr = array(); + // arrRef will be the structure that knows about our objects. + // It is an associative array. + // We will, however, return arr, preserving regular 0.. order so that + // obj[0] can be used by app developpers. + $arrRef = array(); + $bTos = array(); // Will store belongTo's indices if any + foreach($rows as $row) { + + $obj = new $class($table,$primkeyArr,$db); + if ($obj->ErrorNo()){ + $db->_errorMsg = $obj->ErrorMsg(); + return $false; + } + $obj->Set($row); + $arr[] = $obj; + } // foreach($rows as $row) + + return $arr; +} diff --git a/ehcp/adodb5/adodb-active-recordx.inc.php b/ehcp/adodb5/adodb-active-recordx.inc.php new file mode 100644 index 0000000..f6f9760 --- /dev/null +++ b/ehcp/adodb5/adodb-active-recordx.inc.php @@ -0,0 +1,1497 @@ +_dbat +$_ADODB_ACTIVE_DBS = array(); +$ACTIVE_RECORD_SAFETY = true; // CFR: disabled while playing with relations +$ADODB_ACTIVE_DEFVALS = false; + +class ADODB_Active_DB { + var $db; // ADOConnection + var $tables; // assoc array of ADODB_Active_Table objects, indexed by tablename +} + +class ADODB_Active_Table { + var $name; // table name + var $flds; // assoc array of adofieldobjs, indexed by fieldname + var $keys; // assoc array of primary keys, indexed by fieldname + var $_created; // only used when stored as a cached file + var $_belongsTo = array(); + var $_hasMany = array(); + var $_colsCount; // total columns count, including relations + + function updateColsCount() + { + $this->_colsCount = sizeof($this->flds); + foreach($this->_belongsTo as $foreignTable) + $this->_colsCount += sizeof($foreignTable->TableInfo()->flds); + foreach($this->_hasMany as $foreignTable) + $this->_colsCount += sizeof($foreignTable->TableInfo()->flds); + } +} + +// returns index into $_ADODB_ACTIVE_DBS +function ADODB_SetDatabaseAdapter(&$db) +{ + global $_ADODB_ACTIVE_DBS; + + foreach($_ADODB_ACTIVE_DBS as $k => $d) { + if (PHP_VERSION >= 5) { + if ($d->db === $db) { + return $k; + } + } else { + if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database) { + return $k; + } + } + } + + $obj = new ADODB_Active_DB(); + $obj->db = $db; + $obj->tables = array(); + + $_ADODB_ACTIVE_DBS[] = $obj; + + return sizeof($_ADODB_ACTIVE_DBS)-1; +} + + +class ADODB_Active_Record { + static $_changeNames = true; // dynamically pluralize table names + static $_foreignSuffix = '_id'; // + var $_dbat; // associative index pointing to ADODB_Active_DB eg. $ADODB_Active_DBS[_dbat] + var $_table; // tablename, if set in class definition then use it as table name + var $_sTable; // singularized table name + var $_pTable; // pluralized table name + var $_tableat; // associative index pointing to ADODB_Active_Table, eg $ADODB_Active_DBS[_dbat]->tables[$this->_tableat] + var $_where; // where clause set in Load() + var $_saved = false; // indicates whether data is already inserted. + var $_lasterr = false; // last error message + var $_original = false; // the original values loaded or inserted, refreshed on update + + var $foreignName; // CFR: class name when in a relationship + + static function UseDefaultValues($bool=null) + { + global $ADODB_ACTIVE_DEFVALS; + if (isset($bool)) { + $ADODB_ACTIVE_DEFVALS = $bool; + } + return $ADODB_ACTIVE_DEFVALS; + } + + // should be static + static function SetDatabaseAdapter(&$db) + { + return ADODB_SetDatabaseAdapter($db); + } + + + public function __set($name, $value) + { + $name = str_replace(' ', '_', $name); + $this->$name = $value; + } + + // php5 constructor + // Note: if $table is defined, then we will use it as our table name + // Otherwise we will use our classname... + // In our database, table names are pluralized (because there can be + // more than one row!) + // Similarly, if $table is defined here, it has to be plural form. + // + // $options is an array that allows us to tweak the constructor's behaviour + // if $options['refresh'] is true, we re-scan our metadata information + // if $options['new'] is true, we forget all relations + function __construct($table = false, $pkeyarr=false, $db=false, $options=array()) + { + global $ADODB_ASSOC_CASE,$_ADODB_ACTIVE_DBS; + + if ($db == false && is_object($pkeyarr)) { + $db = $pkeyarr; + $pkeyarr = false; + } + + if($table) { + // table argument exists. It is expected to be + // already plural form. + $this->_pTable = $table; + $this->_sTable = $this->_singularize($this->_pTable); + } + else { + // We will use current classname as table name. + // We need to pluralize it for the real table name. + $this->_sTable = strtolower(get_class($this)); + $this->_pTable = $this->_pluralize($this->_sTable); + } + $this->_table = &$this->_pTable; + + $this->foreignName = $this->_sTable; // CFR: default foreign name (singular) + + if ($db) { + $this->_dbat = ADODB_Active_Record::SetDatabaseAdapter($db); + } else + $this->_dbat = sizeof($_ADODB_ACTIVE_DBS)-1; + + + if ($this->_dbat < 0) { + $this->Error( + "No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)", + 'ADODB_Active_Record::__constructor' + ); + } + + $this->_tableat = $this->_table; # reserved for setting the assoc value to a non-table name, eg. the sql string in future + + // CFR: Just added this option because UpdateActiveTable() can refresh its information + // but there was no way to ask it to do that. + $forceUpdate = (isset($options['refresh']) && true === $options['refresh']); + $this->UpdateActiveTable($pkeyarr, $forceUpdate); + if(isset($options['new']) && true === $options['new']) { + $table =& $this->TableInfo(); + unset($table->_hasMany); + unset($table->_belongsTo); + $table->_hasMany = array(); + $table->_belongsTo = array(); + } + } + + function __wakeup() + { + $class = get_class($this); + new $class; + } + + // CFR: Constants found in Rails + static $IrregularP = array( + 'PERSON' => 'people', + 'MAN' => 'men', + 'WOMAN' => 'women', + 'CHILD' => 'children', + 'COW' => 'kine', + ); + + static $IrregularS = array( + 'PEOPLE' => 'PERSON', + 'MEN' => 'man', + 'WOMEN' => 'woman', + 'CHILDREN' => 'child', + 'KINE' => 'cow', + ); + + static $WeIsI = array( + 'EQUIPMENT' => true, + 'INFORMATION' => true, + 'RICE' => true, + 'MONEY' => true, + 'SPECIES' => true, + 'SERIES' => true, + 'FISH' => true, + 'SHEEP' => true, + ); + + function _pluralize($table) + { + if (!ADODB_Active_Record::$_changeNames) { + return $table; + } + $ut = strtoupper($table); + if(isset(self::$WeIsI[$ut])) { + return $table; + } + if(isset(self::$IrregularP[$ut])) { + return self::$IrregularP[$ut]; + } + $len = strlen($table); + $lastc = $ut[$len-1]; + $lastc2 = substr($ut,$len-2); + switch ($lastc) { + case 'S': + return $table.'es'; + case 'Y': + return substr($table,0,$len-1).'ies'; + case 'X': + return $table.'es'; + case 'H': + if ($lastc2 == 'CH' || $lastc2 == 'SH') { + return $table.'es'; + } + default: + return $table.'s'; + } + } + + // CFR Lamest singular inflector ever - @todo Make it real! + // Note: There is an assumption here...and it is that the argument's length >= 4 + function _singularize($table) + { + + if (!ADODB_Active_Record::$_changeNames) { + return $table; + } + $ut = strtoupper($table); + if(isset(self::$WeIsI[$ut])) { + return $table; + } + if(isset(self::$IrregularS[$ut])) { + return self::$IrregularS[$ut]; + } + $len = strlen($table); + if($ut[$len-1] != 'S') { + return $table; // I know...forget oxen + } + if($ut[$len-2] != 'E') { + return substr($table, 0, $len-1); + } + switch($ut[$len-3]) { + case 'S': + case 'X': + return substr($table, 0, $len-2); + case 'I': + return substr($table, 0, $len-3) . 'y'; + case 'H'; + if($ut[$len-4] == 'C' || $ut[$len-4] == 'S') { + return substr($table, 0, $len-2); + } + default: + return substr($table, 0, $len-1); // ? + } + } + + /* + * ar->foreignName will contain the name of the tables associated with this table because + * these other tables' rows may also be referenced by this table using theirname_id or the provided + * foreign keys (this index name is stored in ar->foreignKey) + * + * this-table.id = other-table-#1.this-table_id + * = other-table-#2.this-table_id + */ + function hasMany($foreignRef,$foreignKey=false) + { + $ar = new ADODB_Active_Record($foreignRef); + $ar->foreignName = $foreignRef; + $ar->UpdateActiveTable(); + $ar->foreignKey = ($foreignKey) ? $foreignKey : strtolower(get_class($this)) . self::$_foreignSuffix; + + $table =& $this->TableInfo(); + if(!isset($table->_hasMany[$foreignRef])) { + $table->_hasMany[$foreignRef] = $ar; + $table->updateColsCount(); + } +# @todo Can I make this guy be lazy? + $this->$foreignRef = $table->_hasMany[$foreignRef]; // WATCHME Removed assignment by ref. to please __get() + } + + /** + * ar->foreignName will contain the name of the tables associated with this table because + * this table's rows may also be referenced by those tables using thistable_id or the provided + * foreign keys (this index name is stored in ar->foreignKey) + * + * this-table.other-table_id = other-table.id + */ + function belongsTo($foreignRef,$foreignKey=false) + { + global $inflector; + + $ar = new ADODB_Active_Record($this->_pluralize($foreignRef)); + $ar->foreignName = $foreignRef; + $ar->UpdateActiveTable(); + $ar->foreignKey = ($foreignKey) ? $foreignKey : $ar->foreignName . self::$_foreignSuffix; + + $table =& $this->TableInfo(); + if(!isset($table->_belongsTo[$foreignRef])) { + $table->_belongsTo[$foreignRef] = $ar; + $table->updateColsCount(); + } + $this->$foreignRef = $table->_belongsTo[$foreignRef]; + } + + /** + * __get Access properties - used for lazy loading + * + * @param mixed $name + * @access protected + * @return void + */ + function __get($name) + { + return $this->LoadRelations($name, '', -1. -1); + } + + function LoadRelations($name, $whereOrderBy, $offset=-1, $limit=-1) + { + $extras = array(); + if($offset >= 0) { + $extras['offset'] = $offset; + } + if($limit >= 0) { + $extras['limit'] = $limit; + } + $table =& $this->TableInfo(); + + if (strlen($whereOrderBy)) { + if (!preg_match('/^[ \n\r]*AND/i',$whereOrderBy)) { + if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i',$whereOrderBy)) { + $whereOrderBy = 'AND '.$whereOrderBy; + } + } + } + + if(!empty($table->_belongsTo[$name])) { + $obj = $table->_belongsTo[$name]; + $columnName = $obj->foreignKey; + if(empty($this->$columnName)) { + $this->$name = null; + } + else { + if(($k = reset($obj->TableInfo()->keys))) { + $belongsToId = $k; + } + else { + $belongsToId = 'id'; + } + + $arrayOfOne = + $obj->Find( + $belongsToId.'='.$this->$columnName.' '.$whereOrderBy, false, false, $extras); + $this->$name = $arrayOfOne[0]; + } + return $this->$name; + } + if(!empty($table->_hasMany[$name])) { + $obj = $table->_hasMany[$name]; + if(($k = reset($table->keys))) { + $hasManyId = $k; + } + else { + $hasManyId = 'id'; + } + + $this->$name = + $obj->Find( + $obj->foreignKey.'='.$this->$hasManyId.' '.$whereOrderBy, false, false, $extras); + return $this->$name; + } + } + ////////////////////////////////// + + // update metadata + function UpdateActiveTable($pkeys=false,$forceUpdate=false) + { + global $ADODB_ASSOC_CASE,$_ADODB_ACTIVE_DBS , $ADODB_CACHE_DIR, $ADODB_ACTIVE_CACHESECS; + global $ADODB_ACTIVE_DEFVALS, $ADODB_FETCH_MODE; + + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + + $table = $this->_table; + $tables = $activedb->tables; + $tableat = $this->_tableat; + if (!$forceUpdate && !empty($tables[$tableat])) { + + $tobj = $tables[$tableat]; + foreach($tobj->flds as $name => $fld) { + if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) { + $this->$name = $fld->default_value; + } + else { + $this->$name = null; + } + } + return; + } + + $db = $activedb->db; + $fname = $ADODB_CACHE_DIR . '/adodb_' . $db->databaseType . '_active_'. $table . '.cache'; + if (!$forceUpdate && $ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR && file_exists($fname)) { + $fp = fopen($fname,'r'); + @flock($fp, LOCK_SH); + $acttab = unserialize(fread($fp,100000)); + fclose($fp); + if ($acttab->_created + $ADODB_ACTIVE_CACHESECS - (abs(rand()) % 16) > time()) { + // abs(rand()) randomizes deletion, reducing contention to delete/refresh file + // ideally, you should cache at least 32 secs + $activedb->tables[$table] = $acttab; + + //if ($db->debug) ADOConnection::outp("Reading cached active record file: $fname"); + return; + } else if ($db->debug) { + ADOConnection::outp("Refreshing cached active record file: $fname"); + } + } + $activetab = new ADODB_Active_Table(); + $activetab->name = $table; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($db->fetchMode !== false) { + $savem = $db->SetFetchMode(false); + } + + $cols = $db->MetaColumns($table); + + if (isset($savem)) { + $db->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!$cols) { + $this->Error("Invalid table name: $table",'UpdateActiveTable'); + return false; + } + $fld = reset($cols); + if (!$pkeys) { + if (isset($fld->primary_key)) { + $pkeys = array(); + foreach($cols as $name => $fld) { + if (!empty($fld->primary_key)) { + $pkeys[] = $name; + } + } + } else { + $pkeys = $this->GetPrimaryKeys($db, $table); + } + } + if (empty($pkeys)) { + $this->Error("No primary key found for table $table",'UpdateActiveTable'); + return false; + } + + $attr = array(); + $keys = array(); + + switch($ADODB_ASSOC_CASE) { + case 0: + foreach($cols as $name => $fldobj) { + $name = strtolower($name); + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + foreach($pkeys as $k => $name) { + $keys[strtolower($name)] = strtolower($name); + } + break; + + case 1: + foreach($cols as $name => $fldobj) { + $name = strtoupper($name); + + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + + foreach($pkeys as $k => $name) { + $keys[strtoupper($name)] = strtoupper($name); + } + break; + default: + foreach($cols as $name => $fldobj) { + $name = ($fldobj->name); + + if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) { + $this->$name = $fldobj->default_value; + } + else { + $this->$name = null; + } + $attr[$name] = $fldobj; + } + foreach($pkeys as $k => $name) { + $keys[$name] = $cols[$name]->name; + } + break; + } + + $activetab->keys = $keys; + $activetab->flds = $attr; + $activetab->updateColsCount(); + + if ($ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR) { + $activetab->_created = time(); + $s = serialize($activetab); + if (!function_exists('adodb_write_file')) { + include(ADODB_DIR.'/adodb-csvlib.inc.php'); + } + adodb_write_file($fname,$s); + } + if (isset($activedb->tables[$table])) { + $oldtab = $activedb->tables[$table]; + + if ($oldtab) { + $activetab->_belongsTo = $oldtab->_belongsTo; + $activetab->_hasMany = $oldtab->_hasMany; + } + } + $activedb->tables[$table] = $activetab; + } + + function GetPrimaryKeys(&$db, $table) + { + return $db->MetaPrimaryKeys($table); + } + + // error handler for both PHP4+5. + function Error($err,$fn) + { + global $_ADODB_ACTIVE_DBS; + + $fn = get_class($this).'::'.$fn; + $this->_lasterr = $fn.': '.$err; + + if ($this->_dbat < 0) { + $db = false; + } + else { + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $db = $activedb->db; + } + + if (function_exists('adodb_throw')) { + if (!$db) { + adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false); + } + else { + adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db); + } + } else { + if (!$db || $db->debug) { + ADOConnection::outp($this->_lasterr); + } + } + + } + + // return last error message + function ErrorMsg() + { + if (!function_exists('adodb_throw')) { + if ($this->_dbat < 0) { + $db = false; + } + else { + $db = $this->DB(); + } + + // last error could be database error too + if ($db && $db->ErrorMsg()) { + return $db->ErrorMsg(); + } + } + return $this->_lasterr; + } + + function ErrorNo() + { + if ($this->_dbat < 0) { + return -9999; // no database connection... + } + $db = $this->DB(); + + return (int) $db->ErrorNo(); + } + + + // retrieve ADOConnection from _ADODB_Active_DBs + function DB() + { + global $_ADODB_ACTIVE_DBS; + + if ($this->_dbat < 0) { + $false = false; + $this->Error("No database connection set: use ADOdb_Active_Record::SetDatabaseAdaptor(\$db)", "DB"); + return $false; + } + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $db = $activedb->db; + return $db; + } + + // retrieve ADODB_Active_Table + function &TableInfo() + { + global $_ADODB_ACTIVE_DBS; + + $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat]; + $table = $activedb->tables[$this->_tableat]; + return $table; + } + + + // I have an ON INSERT trigger on a table that sets other columns in the table. + // So, I find that for myTable, I want to reload an active record after saving it. -- Malcolm Cook + function Reload() + { + $db =& $this->DB(); + if (!$db) { + return false; + } + $table =& $this->TableInfo(); + $where = $this->GenWhere($db, $table); + return($this->Load($where)); + } + + + // set a numeric array (using natural table field ordering) as object properties + function Set(&$row) + { + global $ACTIVE_RECORD_SAFETY; + + $db = $this->DB(); + + if (!$row) { + $this->_saved = false; + return false; + } + + $this->_saved = true; + + $table = $this->TableInfo(); + $sizeofFlds = sizeof($table->flds); + $sizeofRow = sizeof($row); + if ($ACTIVE_RECORD_SAFETY && $table->_colsCount != $sizeofRow && $sizeofFlds != $sizeofRow) { + # + $bad_size = TRUE; + if($sizeofRow == 2 * $table->_colsCount || $sizeofRow == 2 * $sizeofFlds) { + // Only keep string keys + $keys = array_filter(array_keys($row), 'is_string'); + if (sizeof($keys) == sizeof($table->flds)) { + $bad_size = FALSE; + } + } + if ($bad_size) { + $this->Error("Table structure of $this->_table has changed","Load"); + return false; + } + # + } + else { + $keys = array_keys($row); + } + + # + reset($keys); + $this->_original = array(); + foreach($table->flds as $name=>$fld) { + $value = $row[current($keys)]; + $this->$name = $value; + $this->_original[] = $value; + if(!next($keys)) { + break; + } + } + $table =& $this->TableInfo(); + foreach($table->_belongsTo as $foreignTable) { + $ft = $foreignTable->TableInfo(); + $propertyName = $ft->name; + foreach($ft->flds as $name=>$fld) { + $value = $row[current($keys)]; + $foreignTable->$name = $value; + $foreignTable->_original[] = $value; + if(!next($keys)) { + break; + } + } + } + foreach($table->_hasMany as $foreignTable) { + $ft = $foreignTable->TableInfo(); + foreach($ft->flds as $name=>$fld) { + $value = $row[current($keys)]; + $foreignTable->$name = $value; + $foreignTable->_original[] = $value; + if(!next($keys)) { + break; + } + } + } + # + + return true; + } + + // get last inserted id for INSERT + function LastInsertID(&$db,$fieldname) + { + if ($db->hasInsertID) { + $val = $db->Insert_ID($this->_table,$fieldname); + } + else { + $val = false; + } + + if (is_null($val) || $val === false) { + // this might not work reliably in multi-user environment + return $db->GetOne("select max(".$fieldname.") from ".$this->_table); + } + return $val; + } + + // quote data in where clause + function doquote(&$db, $val,$t) + { + switch($t) { + case 'D': + case 'T': + if (empty($val)) { + return 'null'; + } + case 'C': + case 'X': + if (is_null($val)) { + return 'null'; + } + if (strlen($val)>0 && + (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'") + ) { + return $db->qstr($val); + break; + } + default: + return $val; + break; + } + } + + // generate where clause for an UPDATE/SELECT + function GenWhere(&$db, &$table) + { + $keys = $table->keys; + $parr = array(); + + foreach($keys as $k) { + $f = $table->flds[$k]; + if ($f) { + $parr[] = $k.' = '.$this->doquote($db,$this->$k,$db->MetaType($f->type)); + } + } + return implode(' and ', $parr); + } + + + //------------------------------------------------------------ Public functions below + + function Load($where=null,$bindarr=false) + { + $db = $this->DB(); + if (!$db) { + return false; + } + $this->_where = $where; + + $save = $db->SetFetchMode(ADODB_FETCH_NUM); + $qry = "select * from ".$this->_table; + $table =& $this->TableInfo(); + + if(($k = reset($table->keys))) { + $hasManyId = $k; + } + else { + $hasManyId = 'id'; + } + + foreach($table->_belongsTo as $foreignTable) { + if(($k = reset($foreignTable->TableInfo()->keys))) { + $belongsToId = $k; + } + else { + $belongsToId = 'id'; + } + $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '. + $this->_table.'.'.$foreignTable->foreignKey.'='. + $foreignTable->_table.'.'.$belongsToId; + } + foreach($table->_hasMany as $foreignTable) + { + $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '. + $this->_table.'.'.$hasManyId.'='. + $foreignTable->_table.'.'.$foreignTable->foreignKey; + } + if($where) { + $qry .= ' WHERE '.$where; + } + + // Simple case: no relations. Load row and return. + if((count($table->_hasMany) + count($table->_belongsTo)) < 1) { + $row = $db->GetRow($qry,$bindarr); + if(!$row) { + return false; + } + $db->SetFetchMode($save); + return $this->Set($row); + } + + // More complex case when relations have to be collated + $rows = $db->GetAll($qry,$bindarr); + if(!$rows) { + return false; + } + $db->SetFetchMode($save); + if(count($rows) < 1) { + return false; + } + $class = get_class($this); + $isFirstRow = true; + + if(($k = reset($this->TableInfo()->keys))) { + $myId = $k; + } + else { + $myId = 'id'; + } + $index = 0; $found = false; + /** @todo Improve by storing once and for all in table metadata */ + /** @todo Also re-use info for hasManyId */ + foreach($this->TableInfo()->flds as $fld) { + if($fld->name == $myId) { + $found = true; + break; + } + $index++; + } + if(!$found) { + $this->outp_throw("Unable to locate key $myId for $class in Load()",'Load'); + } + + foreach($rows as $row) { + $rowId = intval($row[$index]); + if($rowId > 0) { + if($isFirstRow) { + $isFirstRow = false; + if(!$this->Set($row)) { + return false; + } + } + $obj = new $class($table,false,$db); + $obj->Set($row); + // TODO Copy/paste code below: bad! + if(count($table->_hasMany) > 0) { + foreach($table->_hasMany as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + if(!is_array($this->$foreignName)) { + $foreignObj = $this->$foreignName; + $this->$foreignName = array(clone($foreignObj)); + } + else { + $foreignObj = $obj->$foreignName; + array_push($this->$foreignName, clone($foreignObj)); + } + } + } + } + if(count($table->_belongsTo) > 0) { + foreach($table->_belongsTo as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + if(!is_array($this->$foreignName)) { + $foreignObj = $this->$foreignName; + $this->$foreignName = array(clone($foreignObj)); + } + else { + $foreignObj = $obj->$foreignName; + array_push($this->$foreignName, clone($foreignObj)); + } + } + } + } + } + } + return true; + } + + // false on error + function Save() + { + if ($this->_saved) { + $ok = $this->Update(); + } + else { + $ok = $this->Insert(); + } + + return $ok; + } + + // CFR: Sometimes we may wish to consider that an object is not to be replaced but inserted. + // Sample use case: an 'undo' command object (after a delete()) + function Dirty() + { + $this->_saved = false; + } + + // false on error + function Insert() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $cnt = 0; + $table = $this->TableInfo(); + + $valarr = array(); + $names = array(); + $valstr = array(); + + foreach($table->flds as $name=>$fld) { + $val = $this->$name; + if(!is_null($val) || !array_key_exists($name, $table->keys)) { + $valarr[] = $val; + $names[] = $name; + $valstr[] = $db->Param($cnt); + $cnt += 1; + } + } + + if (empty($names)){ + foreach($table->flds as $name=>$fld) { + $valarr[] = null; + $names[] = $name; + $valstr[] = $db->Param($cnt); + $cnt += 1; + } + } + $sql = 'INSERT INTO '.$this->_table."(".implode(',',$names).') VALUES ('.implode(',',$valstr).')'; + $ok = $db->Execute($sql,$valarr); + + if ($ok) { + $this->_saved = true; + $autoinc = false; + foreach($table->keys as $k) { + if (is_null($this->$k)) { + $autoinc = true; + break; + } + } + if ($autoinc && sizeof($table->keys) == 1) { + $k = reset($table->keys); + $this->$k = $this->LastInsertID($db,$k); + } + } + + $this->_original = $valarr; + return !empty($ok); + } + + function Delete() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $where = $this->GenWhere($db,$table); + $sql = 'DELETE FROM '.$this->_table.' WHERE '.$where; + $ok = $db->Execute($sql); + + return $ok ? true : false; + } + + // returns an array of active record objects + function Find($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array()) + { + $db = $this->DB(); + if (!$db || empty($this->_table)) { + return false; + } + $table =& $this->TableInfo(); + $arr = $db->GetActiveRecordsClass(get_class($this),$this, $whereOrderBy,$bindarr,$pkeysArr,$extra, + array('foreignName'=>$this->foreignName, 'belongsTo'=>$table->_belongsTo, 'hasMany'=>$table->_hasMany)); + return $arr; + } + + // CFR: In introduced this method to ensure that inner workings are not disturbed by + // subclasses...for instance when GetActiveRecordsClass invokes Find() + // Why am I not invoking parent::Find? + // Shockingly because I want to preserve PHP4 compatibility. + function packageFind($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array()) + { + $db = $this->DB(); + if (!$db || empty($this->_table)) { + return false; + } + $table =& $this->TableInfo(); + $arr = $db->GetActiveRecordsClass(get_class($this),$this, $whereOrderBy,$bindarr,$pkeysArr,$extra, + array('foreignName'=>$this->foreignName, 'belongsTo'=>$table->_belongsTo, 'hasMany'=>$table->_hasMany)); + return $arr; + } + + // returns 0 on error, 1 on update, 2 on insert + function Replace() + { + global $ADODB_ASSOC_CASE; + + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $pkey = $table->keys; + + foreach($table->flds as $name=>$fld) { + $val = $this->$name; + /* + if (is_null($val)) { + if (isset($fld->not_null) && $fld->not_null) { + if (isset($fld->default_value) && strlen($fld->default_value)) { + continue; + } + else { + $this->Error("Cannot update null into $name","Replace"); + return false; + } + } + }*/ + if (is_null($val) && !empty($fld->auto_increment)) { + continue; + } + $t = $db->MetaType($fld->type); + $arr[$name] = $this->doquote($db,$val,$t); + $valarr[] = $val; + } + + if (!is_array($pkey)) { + $pkey = array($pkey); + } + + + switch ($ADODB_ASSOC_CASE == 0) { + case ADODB_ASSOC_CASE_LOWER: + foreach($pkey as $k => $v) { + $pkey[$k] = strtolower($v); + } + break; + case ADODB_ASSOC_CASE_UPPER: + foreach($pkey as $k => $v) { + $pkey[$k] = strtoupper($v); + } + break; + } + + $ok = $db->Replace($this->_table,$arr,$pkey); + if ($ok) { + $this->_saved = true; // 1= update 2=insert + if ($ok == 2) { + $autoinc = false; + foreach($table->keys as $k) { + if (is_null($this->$k)) { + $autoinc = true; + break; + } + } + if ($autoinc && sizeof($table->keys) == 1) { + $k = reset($table->keys); + $this->$k = $this->LastInsertID($db,$k); + } + } + + $this->_original = $valarr; + } + return $ok; + } + + // returns 0 on error, 1 on update, -1 if no change in data (no update) + function Update() + { + $db = $this->DB(); + if (!$db) { + return false; + } + $table = $this->TableInfo(); + + $where = $this->GenWhere($db, $table); + + if (!$where) { + $this->error("Where missing for table $table", "Update"); + return false; + } + $valarr = array(); + $neworig = array(); + $pairs = array(); + $i = -1; + $cnt = 0; + foreach($table->flds as $name=>$fld) { + $i += 1; + $val = $this->$name; + $neworig[] = $val; + + if (isset($table->keys[$name])) { + continue; + } + + if (is_null($val)) { + if (isset($fld->not_null) && $fld->not_null) { + if (isset($fld->default_value) && strlen($fld->default_value)) { + continue; + } + else { + $this->Error("Cannot set field $name to NULL","Update"); + return false; + } + } + } + + if (isset($this->_original[$i]) && $val === $this->_original[$i]) { + continue; + } + $valarr[] = $val; + $pairs[] = $name.'='.$db->Param($cnt); + $cnt += 1; + } + + + if (!$cnt) { + return -1; + } + $sql = 'UPDATE '.$this->_table." SET ".implode(",",$pairs)." WHERE ".$where; + $ok = $db->Execute($sql,$valarr); + if ($ok) { + $this->_original = $neworig; + return 1; + } + return 0; + } + + function GetAttributeNames() + { + $table = $this->TableInfo(); + if (!$table) { + return false; + } + return array_keys($table->flds); + } + +}; + +function adodb_GetActiveRecordsClass(&$db, $class, $tableObj,$whereOrderBy,$bindarr, $primkeyArr, + $extra, $relations) +{ + global $_ADODB_ACTIVE_DBS; + + if (empty($extra['loading'])) { + $extra['loading'] = ADODB_LAZY_AR; + } + $save = $db->SetFetchMode(ADODB_FETCH_NUM); + $table = &$tableObj->_table; + $tableInfo =& $tableObj->TableInfo(); + if(($k = reset($tableInfo->keys))) { + $myId = $k; + } + else { + $myId = 'id'; + } + $index = 0; $found = false; + /** @todo Improve by storing once and for all in table metadata */ + /** @todo Also re-use info for hasManyId */ + foreach($tableInfo->flds as $fld) + { + if($fld->name == $myId) { + $found = true; + break; + } + $index++; + } + if(!$found) { + $db->outp_throw("Unable to locate key $myId for $class in GetActiveRecordsClass()",'GetActiveRecordsClass'); + } + + $qry = "select * from ".$table; + if(ADODB_JOIN_AR == $extra['loading']) { + if(!empty($relations['belongsTo'])) { + foreach($relations['belongsTo'] as $foreignTable) { + if(($k = reset($foreignTable->TableInfo()->keys))) { + $belongsToId = $k; + } + else { + $belongsToId = 'id'; + } + + $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '. + $table.'.'.$foreignTable->foreignKey.'='. + $foreignTable->_table.'.'.$belongsToId; + } + } + if(!empty($relations['hasMany'])) { + if(empty($relations['foreignName'])) { + $db->outp_throw("Missing foreignName is relation specification in GetActiveRecordsClass()",'GetActiveRecordsClass'); + } + if(($k = reset($tableInfo->keys))) { + $hasManyId = $k; + } + else { + $hasManyId = 'id'; + } + + foreach($relations['hasMany'] as $foreignTable) { + $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '. + $table.'.'.$hasManyId.'='. + $foreignTable->_table.'.'.$foreignTable->foreignKey; + } + } + } + if (!empty($whereOrderBy)) { + $qry .= ' WHERE '.$whereOrderBy; + } + if(isset($extra['limit'])) { + $rows = false; + if(isset($extra['offset'])) { + $rs = $db->SelectLimit($qry, $extra['limit'], $extra['offset']); + } else { + $rs = $db->SelectLimit($qry, $extra['limit']); + } + if ($rs) { + while (!$rs->EOF) { + $rows[] = $rs->fields; + $rs->MoveNext(); + } + } + } else + $rows = $db->GetAll($qry,$bindarr); + + $db->SetFetchMode($save); + + $false = false; + + if ($rows === false) { + return $false; + } + + + if (!isset($_ADODB_ACTIVE_DBS)) { + include(ADODB_DIR.'/adodb-active-record.inc.php'); + } + if (!class_exists($class)) { + $db->outp_throw("Unknown class $class in GetActiveRecordsClass()",'GetActiveRecordsClass'); + return $false; + } + $uniqArr = array(); // CFR Keep track of records for relations + $arr = array(); + // arrRef will be the structure that knows about our objects. + // It is an associative array. + // We will, however, return arr, preserving regular 0.. order so that + // obj[0] can be used by app developpers. + $arrRef = array(); + $bTos = array(); // Will store belongTo's indices if any + foreach($rows as $row) { + + $obj = new $class($table,$primkeyArr,$db); + if ($obj->ErrorNo()){ + $db->_errorMsg = $obj->ErrorMsg(); + return $false; + } + $obj->Set($row); + // CFR: FIXME: Insane assumption here: + // If the first column returned is an integer, then it's a 'id' field + // And to make things a bit worse, I use intval() rather than is_int() because, in fact, + // $row[0] is not an integer. + // + // So, what does this whole block do? + // When relationships are found, we perform JOINs. This is fast. But not accurate: + // instead of returning n objects with their n' associated cousins, + // we get n*n' objects. This code fixes this. + // Note: to-many relationships mess around with the 'limit' parameter + $rowId = intval($row[$index]); + + if(ADODB_WORK_AR == $extra['loading']) { + $arrRef[$rowId] = $obj; + $arr[] = &$arrRef[$rowId]; + if(!isset($indices)) { + $indices = $rowId; + } + else { + $indices .= ','.$rowId; + } + if(!empty($relations['belongsTo'])) { + foreach($relations['belongsTo'] as $foreignTable) { + $foreignTableRef = $foreignTable->foreignKey; + // First array: list of foreign ids we are looking for + if(empty($bTos[$foreignTableRef])) { + $bTos[$foreignTableRef] = array(); + } + // Second array: list of ids found + if(empty($obj->$foreignTableRef)) { + continue; + } + if(empty($bTos[$foreignTableRef][$obj->$foreignTableRef])) { + $bTos[$foreignTableRef][$obj->$foreignTableRef] = array(); + } + $bTos[$foreignTableRef][$obj->$foreignTableRef][] = $obj; + } + } + continue; + } + + if($rowId>0) { + if(ADODB_JOIN_AR == $extra['loading']) { + $isNewObj = !isset($uniqArr['_'.$row[0]]); + if($isNewObj) { + $uniqArr['_'.$row[0]] = $obj; + } + + // TODO Copy/paste code below: bad! + if(!empty($relations['hasMany'])) { + foreach($relations['hasMany'] as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + $masterObj = &$uniqArr['_'.$row[0]]; + // Assumption: this property exists in every object since they are instances of the same class + if(!is_array($masterObj->$foreignName)) { + // Pluck! + $foreignObj = $masterObj->$foreignName; + $masterObj->$foreignName = array(clone($foreignObj)); + } + else { + // Pluck pluck! + $foreignObj = $obj->$foreignName; + array_push($masterObj->$foreignName, clone($foreignObj)); + } + } + } + } + if(!empty($relations['belongsTo'])) { + foreach($relations['belongsTo'] as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + $masterObj = &$uniqArr['_'.$row[0]]; + // Assumption: this property exists in every object since they are instances of the same class + if(!is_array($masterObj->$foreignName)) { + // Pluck! + $foreignObj = $masterObj->$foreignName; + $masterObj->$foreignName = array(clone($foreignObj)); + } + else { + // Pluck pluck! + $foreignObj = $obj->$foreignName; + array_push($masterObj->$foreignName, clone($foreignObj)); + } + } + } + } + if(!$isNewObj) { + unset($obj); // We do not need this object itself anymore and do not want it re-added to the main array + } + } + else if(ADODB_LAZY_AR == $extra['loading']) { + // Lazy loading: we need to give AdoDb a hint that we have not really loaded + // anything, all the while keeping enough information on what we wish to load. + // Let's do this by keeping the relevant info in our relationship arrays + // but get rid of the actual properties. + // We will then use PHP's __get to load these properties on-demand. + if(!empty($relations['hasMany'])) { + foreach($relations['hasMany'] as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + unset($obj->$foreignName); + } + } + } + if(!empty($relations['belongsTo'])) { + foreach($relations['belongsTo'] as $foreignTable) { + $foreignName = $foreignTable->foreignName; + if(!empty($obj->$foreignName)) { + unset($obj->$foreignName); + } + } + } + } + } + + if(isset($obj)) { + $arr[] = $obj; + } + } + + if(ADODB_WORK_AR == $extra['loading']) { + // The best of both worlds? + // Here, the number of queries is constant: 1 + n*relationship. + // The second query will allow us to perform a good join + // while preserving LIMIT etc. + if(!empty($relations['hasMany'])) { + foreach($relations['hasMany'] as $foreignTable) { + $foreignName = $foreignTable->foreignName; + $className = ucfirst($foreignTable->_singularize($foreignName)); + $obj = new $className(); + $dbClassRef = $foreignTable->foreignKey; + $objs = $obj->packageFind($dbClassRef.' IN ('.$indices.')'); + foreach($objs as $obj) { + if(!is_array($arrRef[$obj->$dbClassRef]->$foreignName)) { + $arrRef[$obj->$dbClassRef]->$foreignName = array(); + } + array_push($arrRef[$obj->$dbClassRef]->$foreignName, $obj); + } + } + + } + if(!empty($relations['belongsTo'])) { + foreach($relations['belongsTo'] as $foreignTable) { + $foreignTableRef = $foreignTable->foreignKey; + if(empty($bTos[$foreignTableRef])) { + continue; + } + if(($k = reset($foreignTable->TableInfo()->keys))) { + $belongsToId = $k; + } + else { + $belongsToId = 'id'; + } + $origObjsArr = $bTos[$foreignTableRef]; + $bTosString = implode(',', array_keys($bTos[$foreignTableRef])); + $foreignName = $foreignTable->foreignName; + $className = ucfirst($foreignTable->_singularize($foreignName)); + $obj = new $className(); + $objs = $obj->packageFind($belongsToId.' IN ('.$bTosString.')'); + foreach($objs as $obj) + { + foreach($origObjsArr[$obj->$belongsToId] as $idx=>$origObj) + { + $origObj->$foreignName = $obj; + } + } + } + } + } + + return $arr; +} diff --git a/ehcp/adodb5/adodb-csvlib.inc.php b/ehcp/adodb5/adodb-csvlib.inc.php new file mode 100644 index 0000000..0e80e0c --- /dev/null +++ b/ehcp/adodb5/adodb-csvlib.inc.php @@ -0,0 +1,319 @@ +FieldCount() : 0; + + if ($sql) $sql = urlencode($sql); + // metadata setup + + if ($max <= 0 || $rs->dataProvider == 'empty') { // is insert/update/delete + if (is_object($conn)) { + $sql .= ','.$conn->Affected_Rows(); + $sql .= ','.$conn->Insert_ID(); + } else + $sql .= ',,'; + + $text = "====-1,0,$sql\n"; + return $text; + } + $tt = ($rs->timeCreated) ? $rs->timeCreated : time(); + + ## changed format from ====0 to ====1 + $line = "====1,$tt,$sql\n"; + + if ($rs->databaseType == 'array') { + $rows = $rs->_array; + } else { + $rows = array(); + while (!$rs->EOF) { + $rows[] = $rs->fields; + $rs->MoveNext(); + } + } + + for($i=0; $i < $max; $i++) { + $o = $rs->FetchField($i); + $flds[] = $o; + } + + $savefetch = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode; + $class = $rs->connection->arrayClass; + $rs2 = new $class(); + $rs2->timeCreated = $rs->timeCreated; # memcache fix + $rs2->sql = $rs->sql; + $rs2->oldProvider = $rs->dataProvider; + $rs2->InitArrayFields($rows,$flds); + $rs2->fetchMode = $savefetch; + return $line.serialize($rs2); + } + + +/** +* Open CSV file and convert it into Data. +* +* @param url file/ftp/http url +* @param err returns the error message +* @param timeout dispose if recordset has been alive for $timeout secs +* +* @return recordset, or false if error occured. If no +* error occurred in sql INSERT/UPDATE/DELETE, +* empty recordset is returned +*/ + function csv2rs($url,&$err,$timeout=0, $rsclass='ADORecordSet_array') + { + $false = false; + $err = false; + $fp = @fopen($url,'rb'); + if (!$fp) { + $err = $url.' file/URL not found'; + return $false; + } + @flock($fp, LOCK_SH); + $arr = array(); + $ttl = 0; + + if ($meta = fgetcsv($fp, 32000, ",")) { + // check if error message + if (strncmp($meta[0],'****',4) === 0) { + $err = trim(substr($meta[0],4,1024)); + fclose($fp); + return $false; + } + // check for meta data + // $meta[0] is -1 means return an empty recordset + // $meta[1] contains a time + + if (strncmp($meta[0], '====',4) === 0) { + + if ($meta[0] == "====-1") { + if (sizeof($meta) < 5) { + $err = "Corrupt first line for format -1"; + fclose($fp); + return $false; + } + fclose($fp); + + if ($timeout > 0) { + $err = " Illegal Timeout $timeout "; + return $false; + } + + $rs = new $rsclass($val=true); + $rs->fields = array(); + $rs->timeCreated = $meta[1]; + $rs->EOF = true; + $rs->_numOfFields = 0; + $rs->sql = urldecode($meta[2]); + $rs->affectedrows = (integer)$meta[3]; + $rs->insertid = $meta[4]; + return $rs; + } + # Under high volume loads, we want only 1 thread/process to _write_file + # so that we don't have 50 processes queueing to write the same data. + # We use probabilistic timeout, ahead of time. + # + # -4 sec before timeout, give processes 1/32 chance of timing out + # -2 sec before timeout, give processes 1/16 chance of timing out + # -1 sec after timeout give processes 1/4 chance of timing out + # +0 sec after timeout, give processes 100% chance of timing out + if (sizeof($meta) > 1) { + if($timeout >0){ + $tdiff = (integer)( $meta[1]+$timeout - time()); + if ($tdiff <= 2) { + switch($tdiff) { + case 4: + case 3: + if ((rand() & 31) == 0) { + fclose($fp); + $err = "Timeout 3"; + return $false; + } + break; + case 2: + if ((rand() & 15) == 0) { + fclose($fp); + $err = "Timeout 2"; + return $false; + } + break; + case 1: + if ((rand() & 3) == 0) { + fclose($fp); + $err = "Timeout 1"; + return $false; + } + break; + default: + fclose($fp); + $err = "Timeout 0"; + return $false; + } // switch + + } // if check flush cache + }// (timeout>0) + $ttl = $meta[1]; + } + //================================================ + // new cache format - use serialize extensively... + if ($meta[0] === '====1') { + // slurp in the data + $MAXSIZE = 128000; + + $text = fread($fp,$MAXSIZE); + if (strlen($text)) { + while ($txt = fread($fp,$MAXSIZE)) { + $text .= $txt; + } + } + fclose($fp); + $rs = unserialize($text); + if (is_object($rs)) $rs->timeCreated = $ttl; + else { + $err = "Unable to unserialize recordset"; + //echo htmlspecialchars($text),' !--END--!

'; + } + return $rs; + } + + $meta = false; + $meta = fgetcsv($fp, 32000, ","); + if (!$meta) { + fclose($fp); + $err = "Unexpected EOF 1"; + return $false; + } + } + + // Get Column definitions + $flds = array(); + foreach($meta as $o) { + $o2 = explode(':',$o); + if (sizeof($o2)!=3) { + $arr[] = $meta; + $flds = false; + break; + } + $fld = new ADOFieldObject(); + $fld->name = urldecode($o2[0]); + $fld->type = $o2[1]; + $fld->max_length = $o2[2]; + $flds[] = $fld; + } + } else { + fclose($fp); + $err = "Recordset had unexpected EOF 2"; + return $false; + } + + // slurp in the data + $MAXSIZE = 128000; + + $text = ''; + while ($txt = fread($fp,$MAXSIZE)) { + $text .= $txt; + } + + fclose($fp); + @$arr = unserialize($text); + //var_dump($arr); + if (!is_array($arr)) { + $err = "Recordset had unexpected EOF (in serialized recordset)"; + if (get_magic_quotes_runtime()) $err .= ". Magic Quotes Runtime should be disabled!"; + return $false; + } + $rs = new $rsclass(); + $rs->timeCreated = $ttl; + $rs->InitArrayFields($arr,$flds); + return $rs; + } + + + /** + * Save a file $filename and its $contents (normally for caching) with file locking + * Returns true if ok, false if fopen/fwrite error, 0 if rename error (eg. file is locked) + */ + function adodb_write_file($filename, $contents,$debug=false) + { + # http://www.php.net/bugs.php?id=9203 Bug that flock fails on Windows + # So to simulate locking, we assume that rename is an atomic operation. + # First we delete $filename, then we create a $tempfile write to it and + # rename to the desired $filename. If the rename works, then we successfully + # modified the file exclusively. + # What a stupid need - having to simulate locking. + # Risks: + # 1. $tempfile name is not unique -- very very low + # 2. unlink($filename) fails -- ok, rename will fail + # 3. adodb reads stale file because unlink fails -- ok, $rs timeout occurs + # 4. another process creates $filename between unlink() and rename() -- ok, rename() fails and cache updated + if (strncmp(PHP_OS,'WIN',3) === 0) { + // skip the decimal place + $mtime = substr(str_replace(' ','_',microtime()),2); + // getmypid() actually returns 0 on Win98 - never mind! + $tmpname = $filename.uniqid($mtime).getmypid(); + if (!($fd = @fopen($tmpname,'w'))) return false; + if (fwrite($fd,$contents)) $ok = true; + else $ok = false; + fclose($fd); + + if ($ok) { + @chmod($tmpname,0644); + // the tricky moment + @unlink($filename); + if (!@rename($tmpname,$filename)) { + @unlink($tmpname); + $ok = 0; + } + if (!$ok) { + if ($debug) ADOConnection::outp( " Rename $tmpname ".($ok? 'ok' : 'failed')); + } + } + return $ok; + } + if (!($fd = @fopen($filename, 'a'))) return false; + if (flock($fd, LOCK_EX) && ftruncate($fd, 0)) { + if (fwrite( $fd, $contents )) $ok = true; + else $ok = false; + fclose($fd); + @chmod($filename,0644); + }else { + fclose($fd); + if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename
\n"); + $ok = false; + } + + return $ok; + } diff --git a/ehcp/adodb5/adodb-datadict.inc.php b/ehcp/adodb5/adodb-datadict.inc.php new file mode 100644 index 0000000..4d75e55 --- /dev/null +++ b/ehcp/adodb5/adodb-datadict.inc.php @@ -0,0 +1,1033 @@ +$str

"; +$a= Lens_ParseArgs($str); +print "
";
+print_r($a);
+print "
"; +} + + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { + return preg_match('/^[a-z0-9]*$/i', $text); + } +} + +//Lens_ParseTest(); + +/** + Parse arguments, treat "text" (text) and 'text' as quotation marks. + To escape, use "" or '' or )) + + Will read in "abc def" sans quotes, as: abc def + Same with 'abc def'. + However if `abc def`, then will read in as `abc def` + + @param endstmtchar Character that indicates end of statement + @param tokenchars Include the following characters in tokens apart from A-Z and 0-9 + @returns 2 dimensional array containing parsed tokens. +*/ +function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') +{ + $pos = 0; + $intoken = false; + $stmtno = 0; + $endquote = false; + $tokens = array(); + $tokens[$stmtno] = array(); + $max = strlen($args); + $quoted = false; + $tokarr = array(); + + while ($pos < $max) { + $ch = substr($args,$pos,1); + switch($ch) { + case ' ': + case "\t": + case "\n": + case "\r": + if (!$quoted) { + if ($intoken) { + $intoken = false; + $tokens[$stmtno][] = implode('',$tokarr); + } + break; + } + + $tokarr[] = $ch; + break; + + case '`': + if ($intoken) $tokarr[] = $ch; + case '(': + case ')': + case '"': + case "'": + + if ($intoken) { + if (empty($endquote)) { + $tokens[$stmtno][] = implode('',$tokarr); + if ($ch == '(') $endquote = ')'; + else $endquote = $ch; + $quoted = true; + $intoken = true; + $tokarr = array(); + } else if ($endquote == $ch) { + $ch2 = substr($args,$pos+1,1); + if ($ch2 == $endquote) { + $pos += 1; + $tokarr[] = $ch2; + } else { + $quoted = false; + $intoken = false; + $tokens[$stmtno][] = implode('',$tokarr); + $endquote = ''; + } + } else + $tokarr[] = $ch; + + }else { + + if ($ch == '(') $endquote = ')'; + else $endquote = $ch; + $quoted = true; + $intoken = true; + $tokarr = array(); + if ($ch == '`') $tokarr[] = '`'; + } + break; + + default: + + if (!$intoken) { + if ($ch == $endstmtchar) { + $stmtno += 1; + $tokens[$stmtno] = array(); + break; + } + + $intoken = true; + $quoted = false; + $endquote = false; + $tokarr = array(); + + } + + if ($quoted) $tokarr[] = $ch; + else if (ctype_alnum($ch) || strpos($tokenchars,$ch) !== false) $tokarr[] = $ch; + else { + if ($ch == $endstmtchar) { + $tokens[$stmtno][] = implode('',$tokarr); + $stmtno += 1; + $tokens[$stmtno] = array(); + $intoken = false; + $tokarr = array(); + break; + } + $tokens[$stmtno][] = implode('',$tokarr); + $tokens[$stmtno][] = $ch; + $intoken = false; + } + } + $pos += 1; + } + if ($intoken) $tokens[$stmtno][] = implode('',$tokarr); + + return $tokens; +} + + +class ADODB_DataDict { + var $connection; + var $debug = false; + var $dropTable = 'DROP TABLE %s'; + var $renameTable = 'RENAME TABLE %s TO %s'; + var $dropIndex = 'DROP INDEX %s'; + var $addCol = ' ADD'; + var $alterCol = ' ALTER COLUMN'; + var $dropCol = ' DROP COLUMN'; + var $renameColumn = 'ALTER TABLE %s RENAME COLUMN %s TO %s'; // table, old-column, new-column, column-definitions (not used by default) + var $nameRegex = '\w'; + var $nameRegexBrackets = 'a-zA-Z0-9_\(\)'; + var $schema = false; + var $serverInfo = array(); + var $autoIncrement = false; + var $dataProvider; + var $invalidResizeTypes4 = array('CLOB','BLOB','TEXT','DATE','TIME'); // for changetablesql + var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob + /// in other words, we use a text area for editting. + + function GetCommentSQL($table,$col) + { + return false; + } + + function SetCommentSQL($table,$col,$cmt) + { + return false; + } + + function MetaTables() + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaTables(); + } + + function MetaColumns($tab, $upper=true, $schema=false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaColumns($this->TableName($tab), $upper, $schema); + } + + function MetaPrimaryKeys($tab,$owner=false,$intkey=false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaPrimaryKeys($this->TableName($tab), $owner, $intkey); + } + + function MetaIndexes($table, $primary = false, $owner = false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaIndexes($this->TableName($table), $primary, $owner); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + static $typeMap = array( + 'VARCHAR' => 'C', + 'VARCHAR2' => 'C', + 'CHAR' => 'C', + 'C' => 'C', + 'STRING' => 'C', + 'NCHAR' => 'C', + 'NVARCHAR' => 'C', + 'VARYING' => 'C', + 'BPCHAR' => 'C', + 'CHARACTER' => 'C', + 'INTERVAL' => 'C', # Postgres + 'MACADDR' => 'C', # postgres + 'VAR_STRING' => 'C', # mysql + ## + 'LONGCHAR' => 'X', + 'TEXT' => 'X', + 'NTEXT' => 'X', + 'M' => 'X', + 'X' => 'X', + 'CLOB' => 'X', + 'NCLOB' => 'X', + 'LVARCHAR' => 'X', + ## + 'BLOB' => 'B', + 'IMAGE' => 'B', + 'BINARY' => 'B', + 'VARBINARY' => 'B', + 'LONGBINARY' => 'B', + 'B' => 'B', + ## + 'YEAR' => 'D', // mysql + 'DATE' => 'D', + 'D' => 'D', + ## + 'UNIQUEIDENTIFIER' => 'C', # MS SQL Server + ## + 'TIME' => 'T', + 'TIMESTAMP' => 'T', + 'DATETIME' => 'T', + 'TIMESTAMPTZ' => 'T', + 'SMALLDATETIME' => 'T', + 'T' => 'T', + 'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql + ## + 'BOOL' => 'L', + 'BOOLEAN' => 'L', + 'BIT' => 'L', + 'L' => 'L', + ## + 'COUNTER' => 'R', + 'R' => 'R', + 'SERIAL' => 'R', // ifx + 'INT IDENTITY' => 'R', + ## + 'INT' => 'I', + 'INT2' => 'I', + 'INT4' => 'I', + 'INT8' => 'I', + 'INTEGER' => 'I', + 'INTEGER UNSIGNED' => 'I', + 'SHORT' => 'I', + 'TINYINT' => 'I', + 'SMALLINT' => 'I', + 'I' => 'I', + ## + 'LONG' => 'N', // interbase is numeric, oci8 is blob + 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers + 'DECIMAL' => 'N', + 'DEC' => 'N', + 'REAL' => 'N', + 'DOUBLE' => 'N', + 'DOUBLE PRECISION' => 'N', + 'SMALLFLOAT' => 'N', + 'FLOAT' => 'N', + 'NUMBER' => 'N', + 'NUM' => 'N', + 'NUMERIC' => 'N', + 'MONEY' => 'N', + + ## informix 9.2 + 'SQLINT' => 'I', + 'SQLSERIAL' => 'I', + 'SQLSMINT' => 'I', + 'SQLSMFLOAT' => 'N', + 'SQLFLOAT' => 'N', + 'SQLMONEY' => 'N', + 'SQLDECIMAL' => 'N', + 'SQLDATE' => 'D', + 'SQLVCHAR' => 'C', + 'SQLCHAR' => 'C', + 'SQLDTIME' => 'T', + 'SQLINTERVAL' => 'N', + 'SQLBYTES' => 'B', + 'SQLTEXT' => 'X', + ## informix 10 + "SQLINT8" => 'I8', + "SQLSERIAL8" => 'I8', + "SQLNCHAR" => 'C', + "SQLNVCHAR" => 'C', + "SQLLVARCHAR" => 'X', + "SQLBOOL" => 'L' + ); + + if (!$this->connection->IsConnected()) { + $t = strtoupper($t); + if (isset($typeMap[$t])) return $typeMap[$t]; + return 'N'; + } + return $this->connection->MetaType($t,$len,$fieldobj); + } + + function NameQuote($name = NULL,$allowBrackets=false) + { + if (!is_string($name)) { + return FALSE; + } + + $name = trim($name); + + if ( !is_object($this->connection) ) { + return $name; + } + + $quote = $this->connection->nameQuote; + + // if name is of the form `name`, quote it + if ( preg_match('/^`(.+)`$/', $name, $matches) ) { + return $quote . $matches[1] . $quote; + } + + // if name contains special characters, quote it + $regex = ($allowBrackets) ? $this->nameRegexBrackets : $this->nameRegex; + + if ( !preg_match('/^[' . $regex . ']+$/', $name) ) { + return $quote . $name . $quote; + } + + return $name; + } + + function TableName($name) + { + if ( $this->schema ) { + return $this->NameQuote($this->schema) .'.'. $this->NameQuote($name); + } + return $this->NameQuote($name); + } + + // Executes the sql array returned by GetTableSQL and GetIndexSQL + function ExecuteSQLArray($sql, $continueOnError = true) + { + $rez = 2; + $conn = $this->connection; + $saved = $conn->debug; + foreach($sql as $line) { + + if ($this->debug) $conn->debug = true; + $ok = $conn->Execute($line); + $conn->debug = $saved; + if (!$ok) { + if ($this->debug) ADOConnection::outp($conn->ErrorMsg()); + if (!$continueOnError) return 0; + $rez = 1; + } + } + return $rez; + } + + /** + Returns the actual type given a character code. + + C: varchar + X: CLOB (character large object) or largest varchar size if CLOB is not supported + C2: Multibyte varchar + X2: Multibyte CLOB + + B: BLOB (binary large object) + + D: Date + T: Date-time + L: Integer field suitable for storing booleans (0 or 1) + I: Integer + F: Floating point number + N: Numeric or decimal number + */ + + function ActualType($meta) + { + return $meta; + } + + function CreateDatabase($dbname,$options=false) + { + $options = $this->_Options($options); + $sql = array(); + + $s = 'CREATE DATABASE ' . $this->NameQuote($dbname); + if (isset($options[$this->upperName])) + $s .= ' '.$options[$this->upperName]; + + $sql[] = $s; + return $sql; + } + + /* + Generates the SQL to create index. Returns an array of sql strings. + */ + function CreateIndexSQL($idxname, $tabname, $flds, $idxoptions = false) + { + if (!is_array($flds)) { + $flds = explode(',',$flds); + } + + foreach($flds as $key => $fld) { + # some indexes can use partial fields, eg. index first 32 chars of "name" with NAME(32) + $flds[$key] = $this->NameQuote($fld,$allowBrackets=true); + } + + return $this->_IndexSQL($this->NameQuote($idxname), $this->TableName($tabname), $flds, $this->_Options($idxoptions)); + } + + function DropIndexSQL ($idxname, $tabname = NULL) + { + return array(sprintf($this->dropIndex, $this->NameQuote($idxname), $this->TableName($tabname))); + } + + function SetSchema($schema) + { + $this->schema = $schema; + } + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->addCol . ' '; + foreach($lines as $v) { + $sql[] = $alter . $v; + } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } + return $sql; + } + + /** + * Change the definition of one column + * + * As some DBM's can't do that on there own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds='' complete defintion of the new table, eg. for postgres, default '' + * @param array/string $tableoptions='' options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->alterCol . ' '; + foreach($lines as $v) { + $sql[] = $alter . $v; + } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + + } + return $sql; + } + + /** + * Rename one column + * + * Some DBM's can only do this together with changeing the type of the column (even if that stays the same, eg. mysql) + * @param string $tabname table-name + * @param string $oldcolumn column-name to be renamed + * @param string $newcolumn new column-name + * @param string $flds='' complete column-defintion-string like for AddColumnSQL, only used by mysql atm., default='' + * @return array with SQL strings + */ + function RenameColumnSQL($tabname,$oldcolumn,$newcolumn,$flds='') + { + $tabname = $this->TableName ($tabname); + if ($flds) { + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + list(,$first) = each($lines); + list(,$column_def) = preg_split("/[\t ]+/",$first,2); + } + return array(sprintf($this->renameColumn,$tabname,$this->NameQuote($oldcolumn),$this->NameQuote($newcolumn),$column_def)); + } + + /** + * Drop one column + * + * Some DBM's can't do that on there own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds='' complete defintion of the new table, eg. for postgres, default '' + * @param array/string $tableoptions='' options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + if (!is_array($flds)) $flds = explode(',',$flds); + $sql = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->dropCol . ' '; + foreach($flds as $v) { + $sql[] = $alter . $this->NameQuote($v); + } + return $sql; + } + + function DropTableSQL($tabname) + { + return array (sprintf($this->dropTable, $this->TableName($tabname))); + } + + function RenameTableSQL($tabname,$newname) + { + return array (sprintf($this->renameTable, $this->TableName($tabname),$this->TableName($newname))); + } + + /** + Generate the SQL to create table. Returns an array of sql strings. + */ + function CreateTableSQL($tabname, $flds, $tableoptions=array()) + { + list($lines,$pkey,$idxs) = $this->_GenFields($flds, true); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + + $taboptions = $this->_Options($tableoptions); + $tabname = $this->TableName ($tabname); + $sql = $this->_TableSQL($tabname,$lines,$pkey,$taboptions); + + // ggiunta - 2006/10/12 - KLUDGE: + // if we are on autoincrement, and table options includes REPLACE, the + // autoincrement sequence has already been dropped on table creation sql, so + // we avoid passing REPLACE to trigger creation code. This prevents + // creating sql that double-drops the sequence + if ($this->autoIncrement && isset($taboptions['REPLACE'])) + unset($taboptions['REPLACE']); + $tsql = $this->_Triggers($tabname,$taboptions); + foreach($tsql as $s) $sql[] = $s; + + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } + + return $sql; + } + + + + function _GenFields($flds,$widespacing=false) + { + if (is_string($flds)) { + $padding = ' '; + $txt = $flds.$padding; + $flds = array(); + $flds0 = Lens_ParseArgs($txt,','); + $hasparam = false; + foreach($flds0 as $f0) { + $f1 = array(); + foreach($f0 as $token) { + switch (strtoupper($token)) { + case 'INDEX': + $f1['INDEX'] = ''; + // fall through intentionally + case 'CONSTRAINT': + case 'DEFAULT': + $hasparam = $token; + break; + default: + if ($hasparam) $f1[$hasparam] = $token; + else $f1[] = $token; + $hasparam = false; + break; + } + } + // 'index' token without a name means single column index: name it after column + if (array_key_exists('INDEX', $f1) && $f1['INDEX'] == '') { + $f1['INDEX'] = isset($f0['NAME']) ? $f0['NAME'] : $f0[0]; + // check if column name used to create an index name was quoted + if (($f1['INDEX'][0] == '"' || $f1['INDEX'][0] == "'" || $f1['INDEX'][0] == "`") && + ($f1['INDEX'][0] == substr($f1['INDEX'], -1))) { + $f1['INDEX'] = $f1['INDEX'][0].'idx_'.substr($f1['INDEX'], 1, -1).$f1['INDEX'][0]; + } + else + $f1['INDEX'] = 'idx_'.$f1['INDEX']; + } + // reset it, so we don't get next field 1st token as INDEX... + $hasparam = false; + + $flds[] = $f1; + + } + } + $this->autoIncrement = false; + $lines = array(); + $pkey = array(); + $idxs = array(); + foreach($flds as $fld) { + $fld = _array_change_key_case($fld); + + $fname = false; + $fdefault = false; + $fautoinc = false; + $ftype = false; + $fsize = false; + $fprec = false; + $fprimary = false; + $fnoquote = false; + $fdefts = false; + $fdefdate = false; + $fconstraint = false; + $fnotnull = false; + $funsigned = false; + $findex = ''; + $funiqueindex = false; + + //----------------- + // Parse attributes + foreach($fld as $attr => $v) { + if ($attr == 2 && is_numeric($v)) $attr = 'SIZE'; + else if (is_numeric($attr) && $attr > 1 && !is_numeric($v)) $attr = strtoupper($v); + + switch($attr) { + case '0': + case 'NAME': $fname = $v; break; + case '1': + case 'TYPE': $ty = $v; $ftype = $this->ActualType(strtoupper($v)); break; + + case 'SIZE': + $dotat = strpos($v,'.'); if ($dotat === false) $dotat = strpos($v,','); + if ($dotat === false) $fsize = $v; + else { + $fsize = substr($v,0,$dotat); + $fprec = substr($v,$dotat+1); + } + break; + case 'UNSIGNED': $funsigned = true; break; + case 'AUTOINCREMENT': + case 'AUTO': $fautoinc = true; $fnotnull = true; break; + case 'KEY': + // a primary key col can be non unique in itself (if key spans many cols...) + case 'PRIMARY': $fprimary = $v; $fnotnull = true; /*$funiqueindex = true;*/ break; + case 'DEF': + case 'DEFAULT': $fdefault = $v; break; + case 'NOTNULL': $fnotnull = $v; break; + case 'NOQUOTE': $fnoquote = $v; break; + case 'DEFDATE': $fdefdate = $v; break; + case 'DEFTIMESTAMP': $fdefts = $v; break; + case 'CONSTRAINT': $fconstraint = $v; break; + // let INDEX keyword create a 'very standard' index on column + case 'INDEX': $findex = $v; break; + case 'UNIQUE': $funiqueindex = true; break; + } //switch + } // foreach $fld + + //-------------------- + // VALIDATE FIELD INFO + if (!strlen($fname)) { + if ($this->debug) ADOConnection::outp("Undefined NAME"); + return false; + } + + $fid = strtoupper(preg_replace('/^`(.+)`$/', '$1', $fname)); + $fname = $this->NameQuote($fname); + + if (!strlen($ftype)) { + if ($this->debug) ADOConnection::outp("Undefined TYPE for field '$fname'"); + return false; + } else { + $ftype = strtoupper($ftype); + } + + $ftype = $this->_GetSize($ftype, $ty, $fsize, $fprec); + + if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls + + if ($fprimary) $pkey[] = $fname; + + // some databases do not allow blobs to have defaults + if ($ty == 'X') $fdefault = false; + + // build list of indexes + if ($findex != '') { + if (array_key_exists($findex, $idxs)) { + $idxs[$findex]['cols'][] = ($fname); + if (in_array('UNIQUE', $idxs[$findex]['opts']) != $funiqueindex) { + if ($this->debug) ADOConnection::outp("Index $findex defined once UNIQUE and once not"); + } + if ($funiqueindex && !in_array('UNIQUE', $idxs[$findex]['opts'])) + $idxs[$findex]['opts'][] = 'UNIQUE'; + } + else + { + $idxs[$findex] = array(); + $idxs[$findex]['cols'] = array($fname); + if ($funiqueindex) + $idxs[$findex]['opts'] = array('UNIQUE'); + else + $idxs[$findex]['opts'] = array(); + } + } + + //-------------------- + // CONSTRUCT FIELD SQL + if ($fdefts) { + if (substr($this->connection->databaseType,0,5) == 'mysql') { + $ftype = 'TIMESTAMP'; + } else { + $fdefault = $this->connection->sysTimeStamp; + } + } else if ($fdefdate) { + if (substr($this->connection->databaseType,0,5) == 'mysql') { + $ftype = 'TIMESTAMP'; + } else { + $fdefault = $this->connection->sysDate; + } + } else if ($fdefault !== false && !$fnoquote) { + if ($ty == 'C' or $ty == 'X' or + ( substr($fdefault,0,1) != "'" && !is_numeric($fdefault))) { + + if (($ty == 'D' || $ty == 'T') && strtolower($fdefault) != 'null') { + // convert default date into database-aware code + if ($ty == 'T') + { + $fdefault = $this->connection->DBTimeStamp($fdefault); + } + else + { + $fdefault = $this->connection->DBDate($fdefault); + } + } + else + if (strlen($fdefault) != 1 && substr($fdefault,0,1) == ' ' && substr($fdefault,strlen($fdefault)-1) == ' ') + $fdefault = trim($fdefault); + else if (strtolower($fdefault) != 'null') + $fdefault = $this->connection->qstr($fdefault); + } + } + $suffix = $this->_CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned); + + // add index creation + if ($widespacing) $fname = str_pad($fname,24); + + // check for field names appearing twice + if (array_key_exists($fid, $lines)) { + ADOConnection::outp("Field '$fname' defined twice"); + } + + $lines[$fid] = $fname.' '.$ftype.$suffix; + + if ($fautoinc) $this->autoIncrement = true; + } // foreach $flds + + return array($lines,$pkey,$idxs); + } + + /** + GENERATE THE SIZE PART OF THE DATATYPE + $ftype is the actual type + $ty is the type defined originally in the DDL + */ + function _GetSize($ftype, $ty, $fsize, $fprec) + { + if (strlen($fsize) && $ty != 'X' && $ty != 'B' && strpos($ftype,'(') === false) { + $ftype .= "(".$fsize; + if (strlen($fprec)) $ftype .= ",".$fprec; + $ftype .= ')'; + } + return $ftype; + } + + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' '; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s .= '(' . $flds . ')'; + $sql[] = $s; + + return $sql; + } + + function _DropAutoIncrement($tabname) + { + return false; + } + + function _TableSQL($tabname,$lines,$pkey,$tableoptions) + { + $sql = array(); + + if (isset($tableoptions['REPLACE']) || isset ($tableoptions['DROP'])) { + $sql[] = sprintf($this->dropTable,$tabname); + if ($this->autoIncrement) { + $sInc = $this->_DropAutoIncrement($tabname); + if ($sInc) $sql[] = $sInc; + } + if ( isset ($tableoptions['DROP']) ) { + return $sql; + } + } + $s = "CREATE TABLE $tabname (\n"; + $s .= implode(",\n", $lines); + if (sizeof($pkey)>0) { + $s .= ",\n PRIMARY KEY ("; + $s .= implode(", ",$pkey).")"; + } + if (isset($tableoptions['CONSTRAINTS'])) + $s .= "\n".$tableoptions['CONSTRAINTS']; + + if (isset($tableoptions[$this->upperName.'_CONSTRAINTS'])) + $s .= "\n".$tableoptions[$this->upperName.'_CONSTRAINTS']; + + $s .= "\n)"; + if (isset($tableoptions[$this->upperName])) $s .= $tableoptions[$this->upperName]; + $sql[] = $s; + + return $sql; + } + + /** + GENERATE TRIGGERS IF NEEDED + used when table has auto-incrementing field that is emulated using triggers + */ + function _Triggers($tabname,$taboptions) + { + return array(); + } + + /** + Sanitize options, so that array elements with no keys are promoted to keys + */ + function _Options($opts) + { + if (!is_array($opts)) return array(); + $newopts = array(); + foreach($opts as $k => $v) { + if (is_numeric($k)) $newopts[strtoupper($v)] = $v; + else $newopts[strtoupper($k)] = $v; + } + return $newopts; + } + + + function _getSizePrec($size) + { + $fsize = false; + $fprec = false; + $dotat = strpos($size,'.'); + if ($dotat === false) $dotat = strpos($size,','); + if ($dotat === false) $fsize = $size; + else { + $fsize = substr($size,0,$dotat); + $fprec = substr($size,$dotat+1); + } + return array($fsize, $fprec); + } + + /** + "Florian Buzin [ easywe ]" + + This function changes/adds new fields to your table. You don't + have to know if the col is new or not. It will check on its own. + */ + function ChangeTableSQL($tablename, $flds, $tableoptions = false, $dropOldFlds=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($this->connection->fetchMode !== false) $savem = $this->connection->SetFetchMode(false); + + // check table exists + $save_handler = $this->connection->raiseErrorFn; + $this->connection->raiseErrorFn = ''; + $cols = $this->MetaColumns($tablename); + $this->connection->raiseErrorFn = $save_handler; + + if (isset($savem)) $this->connection->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ( empty($cols)) { + return $this->CreateTableSQL($tablename, $flds, $tableoptions); + } + + if (is_array($flds)) { + // Cycle through the update fields, comparing + // existing fields to fields to update. + // if the Metatype and size is exactly the + // same, ignore - by Mark Newham + $holdflds = array(); + foreach($flds as $k=>$v) { + if ( isset($cols[$k]) && is_object($cols[$k]) ) { + // If already not allowing nulls, then don't change + $obj = $cols[$k]; + if (isset($obj->not_null) && $obj->not_null) + $v = str_replace('NOT NULL','',$v); + if (isset($obj->auto_increment) && $obj->auto_increment && empty($v['AUTOINCREMENT'])) + $v = str_replace('AUTOINCREMENT','',$v); + + $c = $cols[$k]; + $ml = $c->max_length; + $mt = $this->MetaType($c->type,$ml); + + if (isset($c->scale)) $sc = $c->scale; + else $sc = 99; // always force change if scale not known. + + if ($sc == -1) $sc = false; + list($fsize, $fprec) = $this->_getSizePrec($v['SIZE']); + + if ($ml == -1) $ml = ''; + if ($mt == 'X') $ml = $v['SIZE']; + if (($mt != $v['TYPE']) || ($ml != $fsize || $sc != $fprec) || (isset($v['AUTOINCREMENT']) && $v['AUTOINCREMENT'] != $obj->auto_increment)) { + $holdflds[$k] = $v; + } + } else { + $holdflds[$k] = $v; + } + } + $flds = $holdflds; + } + + + // already exists, alter table instead + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $this->TableName($tablename); + $sql = array(); + + foreach ( $lines as $id => $v ) { + if ( isset($cols[$id]) && is_object($cols[$id]) ) { + + $flds = Lens_ParseArgs($v,','); + + // We are trying to change the size of the field, if not allowed, simply ignore the request. + // $flds[1] holds the type, $flds[2] holds the size -postnuke addition + if ($flds && in_array(strtoupper(substr($flds[0][1],0,4)),$this->invalidResizeTypes4) + && (isset($flds[0][2]) && is_numeric($flds[0][2]))) { + if ($this->debug) ADOConnection::outp(sprintf("

%s cannot be changed to %s currently

", $flds[0][0], $flds[0][1])); + #echo "

$this->alterCol cannot be changed to $flds currently

"; + continue; + } + $sql[] = $alter . $this->alterCol . ' ' . $v; + } else { + $sql[] = $alter . $this->addCol . ' ' . $v; + } + } + + if ($dropOldFlds) { + foreach ( $cols as $id => $v ) + if ( !isset($lines[$id]) ) + $sql[] = $alter . $this->dropCol . ' ' . $v->name; + } + return $sql; + } +} // class diff --git a/ehcp/adodb5/adodb-error.inc.php b/ehcp/adodb5/adodb-error.inc.php new file mode 100644 index 0000000..0d1009b --- /dev/null +++ b/ehcp/adodb5/adodb-error.inc.php @@ -0,0 +1,265 @@ + DB_ERROR_NOSUCHTABLE, + 'Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*|duplicate key.*violates unique constraint' => DB_ERROR_ALREADY_EXISTS, + 'database ".+" does not exist$' => DB_ERROR_NOSUCHDB, + '(divide|division) by zero$' => DB_ERROR_DIVZERO, + 'pg_atoi: error in .*: can\'t parse ' => DB_ERROR_INVALID_NUMBER, + 'ttribute [\"\'].*[\"\'] not found|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']' => DB_ERROR_NOSUCHFIELD, + '(parser: parse|syntax) error at or near \"' => DB_ERROR_SYNTAX, + 'referential integrity violation' => DB_ERROR_CONSTRAINT, + 'deadlock detected$' => DB_ERROR_DEADLOCK, + 'canceling statement due to statement timeout$' => DB_ERROR_STATEMENT_TIMEOUT, + 'could not serialize access due to' => DB_ERROR_SERIALIZATION_FAILURE + ); + reset($error_regexps); + while (list($regexp,$code) = each($error_regexps)) { + if (preg_match("/$regexp/mi", $errormsg)) { + return $code; + } + } + // Fall back to DB_ERROR if there was no mapping. + return DB_ERROR; +} + +function adodb_error_odbc() +{ +static $MAP = array( + '01004' => DB_ERROR_TRUNCATED, + '07001' => DB_ERROR_MISMATCH, + '21S01' => DB_ERROR_MISMATCH, + '21S02' => DB_ERROR_MISMATCH, + '22003' => DB_ERROR_INVALID_NUMBER, + '22008' => DB_ERROR_INVALID_DATE, + '22012' => DB_ERROR_DIVZERO, + '23000' => DB_ERROR_CONSTRAINT, + '24000' => DB_ERROR_INVALID, + '34000' => DB_ERROR_INVALID, + '37000' => DB_ERROR_SYNTAX, + '42000' => DB_ERROR_SYNTAX, + 'IM001' => DB_ERROR_UNSUPPORTED, + 'S0000' => DB_ERROR_NOSUCHTABLE, + 'S0001' => DB_ERROR_NOT_FOUND, + 'S0002' => DB_ERROR_NOSUCHTABLE, + 'S0011' => DB_ERROR_ALREADY_EXISTS, + 'S0012' => DB_ERROR_NOT_FOUND, + 'S0021' => DB_ERROR_ALREADY_EXISTS, + 'S0022' => DB_ERROR_NOT_FOUND, + 'S1000' => DB_ERROR_NOSUCHTABLE, + 'S1009' => DB_ERROR_INVALID, + 'S1090' => DB_ERROR_INVALID, + 'S1C00' => DB_ERROR_NOT_CAPABLE + ); + return $MAP; +} + +function adodb_error_ibase() +{ +static $MAP = array( + -104 => DB_ERROR_SYNTAX, + -150 => DB_ERROR_ACCESS_VIOLATION, + -151 => DB_ERROR_ACCESS_VIOLATION, + -155 => DB_ERROR_NOSUCHTABLE, + -157 => DB_ERROR_NOSUCHFIELD, + -158 => DB_ERROR_VALUE_COUNT_ON_ROW, + -170 => DB_ERROR_MISMATCH, + -171 => DB_ERROR_MISMATCH, + -172 => DB_ERROR_INVALID, + -204 => DB_ERROR_INVALID, + -205 => DB_ERROR_NOSUCHFIELD, + -206 => DB_ERROR_NOSUCHFIELD, + -208 => DB_ERROR_INVALID, + -219 => DB_ERROR_NOSUCHTABLE, + -297 => DB_ERROR_CONSTRAINT, + -530 => DB_ERROR_CONSTRAINT, + -803 => DB_ERROR_CONSTRAINT, + -551 => DB_ERROR_ACCESS_VIOLATION, + -552 => DB_ERROR_ACCESS_VIOLATION, + -922 => DB_ERROR_NOSUCHDB, + -923 => DB_ERROR_CONNECT_FAILED, + -924 => DB_ERROR_CONNECT_FAILED + ); + + return $MAP; +} + +function adodb_error_ifx() +{ +static $MAP = array( + '-201' => DB_ERROR_SYNTAX, + '-206' => DB_ERROR_NOSUCHTABLE, + '-217' => DB_ERROR_NOSUCHFIELD, + '-329' => DB_ERROR_NODBSELECTED, + '-1204' => DB_ERROR_INVALID_DATE, + '-1205' => DB_ERROR_INVALID_DATE, + '-1206' => DB_ERROR_INVALID_DATE, + '-1209' => DB_ERROR_INVALID_DATE, + '-1210' => DB_ERROR_INVALID_DATE, + '-1212' => DB_ERROR_INVALID_DATE + ); + + return $MAP; +} + +function adodb_error_oci8() +{ +static $MAP = array( + 1 => DB_ERROR_ALREADY_EXISTS, + 900 => DB_ERROR_SYNTAX, + 904 => DB_ERROR_NOSUCHFIELD, + 923 => DB_ERROR_SYNTAX, + 942 => DB_ERROR_NOSUCHTABLE, + 955 => DB_ERROR_ALREADY_EXISTS, + 1476 => DB_ERROR_DIVZERO, + 1722 => DB_ERROR_INVALID_NUMBER, + 2289 => DB_ERROR_NOSUCHTABLE, + 2291 => DB_ERROR_CONSTRAINT, + 2449 => DB_ERROR_CONSTRAINT + ); + + return $MAP; +} + +function adodb_error_mssql() +{ +static $MAP = array( + 208 => DB_ERROR_NOSUCHTABLE, + 2601 => DB_ERROR_ALREADY_EXISTS + ); + + return $MAP; +} + +function adodb_error_sqlite() +{ +static $MAP = array( + 1 => DB_ERROR_SYNTAX + ); + + return $MAP; +} + +function adodb_error_mysql() +{ +static $MAP = array( + 1004 => DB_ERROR_CANNOT_CREATE, + 1005 => DB_ERROR_CANNOT_CREATE, + 1006 => DB_ERROR_CANNOT_CREATE, + 1007 => DB_ERROR_ALREADY_EXISTS, + 1008 => DB_ERROR_CANNOT_DROP, + 1045 => DB_ERROR_ACCESS_VIOLATION, + 1046 => DB_ERROR_NODBSELECTED, + 1049 => DB_ERROR_NOSUCHDB, + 1050 => DB_ERROR_ALREADY_EXISTS, + 1051 => DB_ERROR_NOSUCHTABLE, + 1054 => DB_ERROR_NOSUCHFIELD, + 1062 => DB_ERROR_ALREADY_EXISTS, + 1064 => DB_ERROR_SYNTAX, + 1100 => DB_ERROR_NOT_LOCKED, + 1136 => DB_ERROR_VALUE_COUNT_ON_ROW, + 1146 => DB_ERROR_NOSUCHTABLE, + 1048 => DB_ERROR_CONSTRAINT, + 2002 => DB_ERROR_CONNECT_FAILED, + 2005 => DB_ERROR_CONNECT_FAILED + ); + + return $MAP; +} diff --git a/ehcp/adodb5/adodb-errorhandler.inc.php b/ehcp/adodb5/adodb-errorhandler.inc.php new file mode 100644 index 0000000..548c424 --- /dev/null +++ b/ehcp/adodb5/adodb-errorhandler.inc.php @@ -0,0 +1,80 @@ +$s

"; + trigger_error($s,ADODB_ERROR_HANDLER_TYPE); +} diff --git a/ehcp/adodb5/adodb-errorpear.inc.php b/ehcp/adodb5/adodb-errorpear.inc.php new file mode 100644 index 0000000..263c62f --- /dev/null +++ b/ehcp/adodb5/adodb-errorpear.inc.php @@ -0,0 +1,88 @@ +!$s

"; +} + +/** +* Returns last PEAR_Error object. This error might be for an error that +* occured several sql statements ago. +*/ +function ADODB_PEAR_Error() +{ +global $ADODB_Last_PEAR_Error; + + return $ADODB_Last_PEAR_Error; +} diff --git a/ehcp/adodb5/adodb-exceptions.inc.php b/ehcp/adodb5/adodb-exceptions.inc.php new file mode 100644 index 0000000..e2f03fc --- /dev/null +++ b/ehcp/adodb5/adodb-exceptions.inc.php @@ -0,0 +1,81 @@ +sql = is_array($p1) ? $p1[0] : $p1; + $this->params = $p2; + $s = "$dbms error: [$errno: $errmsg] in $fn(\"$this->sql\")\n"; + break; + + case 'PCONNECT': + case 'CONNECT': + $user = $thisConnection->user; + $s = "$dbms error: [$errno: $errmsg] in $fn($p1, '$user', '****', $p2)\n"; + break; + default: + $s = "$dbms error: [$errno: $errmsg] in $fn($p1, $p2)\n"; + break; + } + + $this->dbms = $dbms; + if ($thisConnection) { + $this->host = $thisConnection->host; + $this->database = $thisConnection->database; + } + $this->fn = $fn; + $this->msg = $errmsg; + + if (!is_numeric($errno)) $errno = -1; + parent::__construct($s,$errno); + } +} + +/** +* Default Error Handler. This will be called with the following params +* +* @param $dbms the RDBMS you are connecting to +* @param $fn the name of the calling function (in uppercase) +* @param $errno the native error number from the database +* @param $errmsg the native error msg from the database +* @param $p1 $fn specific parameter - see below +* @param $P2 $fn specific parameter - see below +*/ + +function adodb_throw($dbms, $fn, $errno, $errmsg, $p1, $p2, $thisConnection) +{ +global $ADODB_EXCEPTION; + + if (error_reporting() == 0) return; // obey @ protocol + if (is_string($ADODB_EXCEPTION)) $errfn = $ADODB_EXCEPTION; + else $errfn = 'ADODB_EXCEPTION'; + throw new $errfn($dbms, $fn, $errno, $errmsg, $p1, $p2, $thisConnection); +} diff --git a/ehcp/adodb5/adodb-iterator.inc.php b/ehcp/adodb5/adodb-iterator.inc.php new file mode 100644 index 0000000..a22c70d --- /dev/null +++ b/ehcp/adodb5/adodb-iterator.inc.php @@ -0,0 +1,26 @@ +Execute("select * from adoxyz"); + foreach($rs as $k => $v) { + echo $k; print_r($v); echo "
"; + } + + + Iterator code based on http://cvs.php.net/cvs.php/php-src/ext/spl/examples/cachingiterator.inc?login=2 + + + Moved to adodb.inc.php to improve performance. + */ diff --git a/ehcp/adodb5/adodb-lib.inc.php b/ehcp/adodb5/adodb-lib.inc.php new file mode 100644 index 0000000..625077d --- /dev/null +++ b/ehcp/adodb5/adodb-lib.inc.php @@ -0,0 +1,1251 @@ + sizeof($array)) $max = sizeof($array); + else $max = $probe; + + + for ($j=0;$j < $max; $j++) { + $row = $array[$j]; + if (!$row) break; + $i = -1; + foreach($row as $v) { + $i += 1; + + if (isset($types[$i]) && $types[$i]=='C') continue; + + //print " ($i ".$types[$i]. "$v) "; + $v = trim($v); + + if (!preg_match('/^[+-]{0,1}[0-9\.]+$/',$v)) { + $types[$i] = 'C'; // once C, always C + + continue; + } + if ($j == 0) { + // If empty string, we presume is character + // test for integer for 1st row only + // after that it is up to testing other rows to prove + // that it is not an integer + if (strlen($v) == 0) $types[$i] = 'C'; + if (strpos($v,'.') !== false) $types[$i] = 'N'; + else $types[$i] = 'I'; + continue; + } + + if (strpos($v,'.') !== false) $types[$i] = 'N'; + + } + } + +} + +function adodb_transpose(&$arr, &$newarr, &$hdr, &$fobjs) +{ + $oldX = sizeof(reset($arr)); + $oldY = sizeof($arr); + + if ($hdr) { + $startx = 1; + $hdr = array('Fields'); + for ($y = 0; $y < $oldY; $y++) { + $hdr[] = $arr[$y][0]; + } + } else + $startx = 0; + + for ($x = $startx; $x < $oldX; $x++) { + if ($fobjs) { + $o = $fobjs[$x]; + $newarr[] = array($o->name); + } else + $newarr[] = array(); + + for ($y = 0; $y < $oldY; $y++) { + $newarr[$x-$startx][] = $arr[$y][$x]; + } + } +} + +// Force key to upper. +// See also http://www.php.net/manual/en/function.array-change-key-case.php +function _array_change_key_case($an_array) +{ + if (is_array($an_array)) { + $new_array = array(); + foreach($an_array as $key=>$value) + $new_array[strtoupper($key)] = $value; + + return $new_array; + } + + return $an_array; +} + +function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc) +{ + if (count($fieldArray) == 0) return 0; + $first = true; + $uSet = ''; + + if (!is_array($keyCol)) { + $keyCol = array($keyCol); + } + foreach($fieldArray as $k => $v) { + if ($v === null) { + $v = 'NULL'; + $fieldArray[$k] = $v; + } else if ($autoQuote && /*!is_numeric($v) /*and strncmp($v,"'",1) !== 0 -- sql injection risk*/ strcasecmp($v,$zthis->null2null)!=0) { + $v = $zthis->qstr($v); + $fieldArray[$k] = $v; + } + if (in_array($k,$keyCol)) continue; // skip UPDATE if is key + + if ($first) { + $first = false; + $uSet = "$k=$v"; + } else + $uSet .= ",$k=$v"; + } + + $where = false; + foreach ($keyCol as $v) { + if (isset($fieldArray[$v])) { + if ($where) $where .= ' and '.$v.'='.$fieldArray[$v]; + else $where = $v.'='.$fieldArray[$v]; + } + } + + if ($uSet && $where) { + $update = "UPDATE $table SET $uSet WHERE $where"; + + $rs = $zthis->Execute($update); + + + if ($rs) { + if ($zthis->poorAffectedRows) { + /* + The Select count(*) wipes out any errors that the update would have returned. + http://phplens.com/lens/lensforum/msgs.php?id=5696 + */ + if ($zthis->ErrorNo()<>0) return 0; + + # affected_rows == 0 if update field values identical to old values + # for mysql - which is silly. + + $cnt = $zthis->GetOne("select count(*) from $table where $where"); + if ($cnt > 0) return 1; // record already exists + } else { + if (($zthis->Affected_Rows()>0)) return 1; + } + } else + return 0; + } + + // print "

Error=".$this->ErrorNo().'

'; + $first = true; + foreach($fieldArray as $k => $v) { + if ($has_autoinc && in_array($k,$keyCol)) continue; // skip autoinc col + + if ($first) { + $first = false; + $iCols = "$k"; + $iVals = "$v"; + } else { + $iCols .= ",$k"; + $iVals .= ",$v"; + } + } + $insert = "INSERT INTO $table ($iCols) VALUES ($iVals)"; + $rs = $zthis->Execute($insert); + return ($rs) ? 2 : 0; +} + +// Requires $ADODB_FETCH_MODE = ADODB_FETCH_NUM +function _adodb_getmenu(&$zthis, $name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) +{ + $hasvalue = false; + + if ($multiple or is_array($defstr)) { + if ($size==0) $size=5; + $attr = ' multiple size="'.$size.'"'; + if (!strpos($name,'[]')) $name .= '[]'; + } else if ($size) $attr = ' size="'.$size.'"'; + else $attr =''; + + $s = '\n"; +} + +// Requires $ADODB_FETCH_MODE = ADODB_FETCH_NUM +function _adodb_getmenu_gp(&$zthis, $name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) +{ + $hasvalue = false; + + if ($multiple or is_array($defstr)) { + if ($size==0) $size=5; + $attr = ' multiple size="'.$size.'"'; + if (!strpos($name,'[]')) $name .= '[]'; + } else if ($size) $attr = ' size="'.$size.'"'; + else $attr =''; + + $s = '\n"; +} + + +/* + Count the number of records this sql statement will return by using + query rewriting heuristics... + + Does not work with UNIONs, except with postgresql and oracle. + + Usage: + + $conn->Connect(...); + $cnt = _adodb_getcount($conn, $sql); + +*/ +function _adodb_getcount(&$zthis, $sql,$inputarr=false,$secs2cache=0) +{ + $qryRecs = 0; + + if (!empty($zthis->_nestedSQL) || preg_match("/^\s*SELECT\s+DISTINCT/is", $sql) || + preg_match('/\s+GROUP\s+BY\s+/is',$sql) || + preg_match('/\s+UNION\s+/is',$sql)) { + + $rewritesql = adodb_strip_order_by($sql); + + // ok, has SELECT DISTINCT or GROUP BY so see if we can use a table alias + // but this is only supported by oracle and postgresql... + if ($zthis->dataProvider == 'oci8') { + // Allow Oracle hints to be used for query optimization, Chris Wrye + if (preg_match('#/\\*+.*?\\*\\/#', $sql, $hint)) { + $rewritesql = "SELECT ".$hint[0]." COUNT(*) FROM (".$rewritesql.")"; + } else + $rewritesql = "SELECT COUNT(*) FROM (".$rewritesql.")"; + + } else if (strncmp($zthis->databaseType,'postgres',8) == 0 || strncmp($zthis->databaseType,'mysql',5) == 0) { + $rewritesql = "SELECT COUNT(*) FROM ($rewritesql) _ADODB_ALIAS_"; + } else { + $rewritesql = "SELECT COUNT(*) FROM ($rewritesql)"; + } + } else { + // now replace SELECT ... FROM with SELECT COUNT(*) FROM + if ( strpos($sql, '_ADODB_COUNT') !== FALSE ) { + $rewritesql = preg_replace('/^\s*?SELECT\s+_ADODB_COUNT(.*)_ADODB_COUNT\s/is','SELECT COUNT(*) ',$sql); + } else { + $rewritesql = preg_replace('/^\s*?SELECT\s.*?\s+(.*?)\s+FROM\s/is','SELECT COUNT(*) FROM ',$sql); + } + // fix by alexander zhukov, alex#unipack.ru, because count(*) and 'order by' fails + // with mssql, access and postgresql. Also a good speedup optimization - skips sorting! + // also see http://phplens.com/lens/lensforum/msgs.php?id=12752 + $rewritesql = adodb_strip_order_by($rewritesql); + } + + if (isset($rewritesql) && $rewritesql != $sql) { + if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0]; + + if ($secs2cache) { + // we only use half the time of secs2cache because the count can quickly + // become inaccurate if new records are added + $qryRecs = $zthis->CacheGetOne($secs2cache/2,$rewritesql,$inputarr); + + } else { + $qryRecs = $zthis->GetOne($rewritesql,$inputarr); + } + if ($qryRecs !== false) return $qryRecs; + } + //-------------------------------------------- + // query rewrite failed - so try slower way... + + + // strip off unneeded ORDER BY if no UNION + if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql; + else $rewritesql = $rewritesql = adodb_strip_order_by($sql); + + if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0]; + + if ($secs2cache) { + $rstest = $zthis->CacheExecute($secs2cache,$rewritesql,$inputarr); + if (!$rstest) $rstest = $zthis->CacheExecute($secs2cache,$sql,$inputarr); + } else { + $rstest = $zthis->Execute($rewritesql,$inputarr); + if (!$rstest) $rstest = $zthis->Execute($sql,$inputarr); + } + if ($rstest) { + $qryRecs = $rstest->RecordCount(); + if ($qryRecs == -1) { + global $ADODB_EXTENSION; + // some databases will return -1 on MoveLast() - change to MoveNext() + if ($ADODB_EXTENSION) { + while(!$rstest->EOF) { + adodb_movenext($rstest); + } + } else { + while(!$rstest->EOF) { + $rstest->MoveNext(); + } + } + $qryRecs = $rstest->_currentRow; + } + $rstest->Close(); + if ($qryRecs == -1) return 0; + } + return $qryRecs; +} + +/* + Code originally from "Cornel G" + + This code might not work with SQL that has UNION in it + + Also if you are using CachePageExecute(), there is a strong possibility that + data will get out of synch. use CachePageExecute() only with tables that + rarely change. +*/ +function _adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page, + $inputarr=false, $secs2cache=0) +{ + $atfirstpage = false; + $atlastpage = false; + $lastpageno=1; + + // If an invalid nrows is supplied, + // we assume a default value of 10 rows per page + if (!isset($nrows) || $nrows <= 0) $nrows = 10; + + $qryRecs = false; //count records for no offset + + $qryRecs = _adodb_getcount($zthis,$sql,$inputarr,$secs2cache); + $lastpageno = (int) ceil($qryRecs / $nrows); + $zthis->_maxRecordCount = $qryRecs; + + + + // ***** Here we check whether $page is the last page or + // whether we are trying to retrieve + // a page number greater than the last page number. + if ($page >= $lastpageno) { + $page = $lastpageno; + $atlastpage = true; + } + + // If page number <= 1, then we are at the first page + if (empty($page) || $page <= 1) { + $page = 1; + $atfirstpage = true; + } + + // We get the data we want + $offset = $nrows * ($page-1); + if ($secs2cache > 0) + $rsreturn = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); + else + $rsreturn = $zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); + + + // Before returning the RecordSet, we set the pagination properties we need + if ($rsreturn) { + $rsreturn->_maxRecordCount = $qryRecs; + $rsreturn->rowsPerPage = $nrows; + $rsreturn->AbsolutePage($page); + $rsreturn->AtFirstPage($atfirstpage); + $rsreturn->AtLastPage($atlastpage); + $rsreturn->LastPageNo($lastpageno); + } + return $rsreturn; +} + +// Iván Oliva version +function _adodb_pageexecute_no_last_page(&$zthis, $sql, $nrows, $page, $inputarr=false, $secs2cache=0) +{ + + $atfirstpage = false; + $atlastpage = false; + + if (!isset($page) || $page <= 1) { + // If page number <= 1, then we are at the first page + $page = 1; + $atfirstpage = true; + } + if ($nrows <= 0) { + // If an invalid nrows is supplied, we assume a default value of 10 rows per page + $nrows = 10; + } + + $pagecounteroffset = ($page * $nrows) - $nrows; + + // To find out if there are more pages of rows, simply increase the limit or + // nrows by 1 and see if that number of records was returned. If it was, + // then we know there is at least one more page left, otherwise we are on + // the last page. Therefore allow non-Count() paging with single queries + // rather than three queries as was done before. + $test_nrows = $nrows + 1; + if ($secs2cache > 0) { + $rsreturn = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); + } else { + $rsreturn = $zthis->SelectLimit($sql, $test_nrows, $pagecounteroffset, $inputarr, $secs2cache); + } + + // Now check to see if the number of rows returned was the higher value we asked for or not. + if ( $rsreturn->_numOfRows == $test_nrows ) { + // Still at least 1 more row, so we are not on last page yet... + // Remove the last row from the RS. + $rsreturn->_numOfRows = ( $rsreturn->_numOfRows - 1 ); + } elseif ( $rsreturn->_numOfRows == 0 && $page > 1 ) { + // Likely requested a page that doesn't exist, so need to find the last + // page and return it. Revert to original method and loop through pages + // until we find some data... + $pagecounter = $page + 1; + $pagecounteroffset = ($pagecounter * $nrows) - $nrows; + + $rstest = $rsreturn; + if ($rstest) { + while ($rstest && $rstest->EOF && $pagecounter > 0) { + $atlastpage = true; + $pagecounter--; + $pagecounteroffset = $nrows * ($pagecounter - 1); + $rstest->Close(); + if ($secs2cache>0) { + $rstest = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); + } + else { + $rstest = $zthis->SelectLimit($sql, $nrows, $pagecounteroffset, $inputarr, $secs2cache); + } + } + if ($rstest) $rstest->Close(); + } + if ($atlastpage) { + // If we are at the last page or beyond it, we are going to retrieve it + $page = $pagecounter; + if ($page == 1) { + // We have to do this again in case the last page is the same as + // the first page, that is, the recordset has only 1 page. + $atfirstpage = true; + } + } + // We get the data we want + $offset = $nrows * ($page-1); + if ($secs2cache > 0) { + $rsreturn = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); + } + else { + $rsreturn = $zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); + } + } elseif ( $rsreturn->_numOfRows < $test_nrows ) { + // Rows is less than what we asked for, so must be at the last page. + $atlastpage = true; + } + + // Before returning the RecordSet, we set the pagination properties we need + if ($rsreturn) { + $rsreturn->rowsPerPage = $nrows; + $rsreturn->AbsolutePage($page); + $rsreturn->AtFirstPage($atfirstpage); + $rsreturn->AtLastPage($atlastpage); + } + return $rsreturn; +} + +function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=2) +{ + global $ADODB_QUOTE_FIELDNAMES; + + if (!$rs) { + printf(ADODB_BAD_RS,'GetUpdateSQL'); + return false; + } + + $fieldUpdatedCount = 0; + $arrFields = _array_change_key_case($arrFields); + + $hasnumeric = isset($rs->fields[0]); + $setFields = ''; + + // Loop through all of the fields in the recordset + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { + // Get the field from the recordset + $field = $rs->FetchField($i); + + // If the recordset field is one + // of the fields passed in then process. + $upperfname = strtoupper($field->name); + if (adodb_key_exists($upperfname,$arrFields,$force)) { + + // If the existing field value in the recordset + // is different from the value passed in then + // go ahead and append the field name and new value to + // the update query. + + if ($hasnumeric) $val = $rs->fields[$i]; + else if (isset($rs->fields[$upperfname])) $val = $rs->fields[$upperfname]; + else if (isset($rs->fields[$field->name])) $val = $rs->fields[$field->name]; + else if (isset($rs->fields[strtolower($upperfname)])) $val = $rs->fields[strtolower($upperfname)]; + else $val = ''; + + + if ($forceUpdate || strcmp($val, $arrFields[$upperfname])) { + // Set the counter for the number of fields that will be updated. + $fieldUpdatedCount++; + + // Based on the datatype of the field + // Format the value properly for the database + $type = $rs->MetaType($field->type); + + + if ($type == 'null') { + $type = 'C'; + } + + if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) { + switch ($ADODB_QUOTE_FIELDNAMES) { + case 'LOWER': + $fnameq = $zthis->nameQuote.strtolower($field->name).$zthis->nameQuote;break; + case 'NATIVE': + $fnameq = $zthis->nameQuote.$field->name.$zthis->nameQuote;break; + case 'UPPER': + default: + $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;break; + } + } else + $fnameq = $upperfname; + + //********************************************************// + if (is_null($arrFields[$upperfname]) + || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) + || $arrFields[$upperfname] === $zthis->null2null + ) + { + switch ($force) { + + //case 0: + // //Ignore empty values. This is allready handled in "adodb_key_exists" function. + //break; + + case 1: + //Set null + $setFields .= $field->name . " = null, "; + break; + + case 2: + //Set empty + $arrFields[$upperfname] = ""; + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); + break; + default: + case 3: + //Set the value that was given in array, so you can give both null and empty values + if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === $zthis->null2null) { + $setFields .= $field->name . " = null, "; + } else { + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); + } + break; + } + //********************************************************// + } else { + //we do this so each driver can customize the sql for + //DB specific column types. + //Oracle needs BLOB types to be handled with a returning clause + //postgres has special needs as well + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq, + $arrFields, $magicq); + } + } + } + } + + // If there were any modified fields then build the rest of the update query. + if ($fieldUpdatedCount > 0 || $forceUpdate) { + // Get the table name from the existing query. + if (!empty($rs->tableName)) $tableName = $rs->tableName; + else { + preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName); + $tableName = $tableName[1]; + } + // Get the full where clause excluding the word "WHERE" from + // the existing query. + preg_match('/\sWHERE\s(.*)/is', $rs->sql, $whereClause); + + $discard = false; + // not a good hack, improvements? + if ($whereClause) { + #var_dump($whereClause); + if (preg_match('/\s(ORDER\s.*)/is', $whereClause[1], $discard)); + else if (preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard)); + else if (preg_match('/\s(FOR UPDATE.*)/is', $whereClause[1], $discard)); + else preg_match('/\s.*(\) WHERE .*)/is', $whereClause[1], $discard); # see http://sourceforge.net/tracker/index.php?func=detail&aid=1379638&group_id=42718&atid=433976 + } else + $whereClause = array(false,false); + + if ($discard) + $whereClause[1] = substr($whereClause[1], 0, strlen($whereClause[1]) - strlen($discard[1])); + + $sql = 'UPDATE '.$tableName.' SET '.substr($setFields, 0, -2); + if (strlen($whereClause[1]) > 0) + $sql .= ' WHERE '.$whereClause[1]; + + return $sql; + + } else { + return false; + } +} + +function adodb_key_exists($key, &$arr,$force=2) +{ + if ($force<=0) { + // the following is the old behaviour where null or empty fields are ignored + return (!empty($arr[$key])) || (isset($arr[$key]) && strlen($arr[$key])>0); + } + + if (isset($arr[$key])) return true; + ## null check below + if (ADODB_PHPVER >= 0x4010) return array_key_exists($key,$arr); + return false; +} + +/** + * There is a special case of this function for the oci8 driver. + * The proper way to handle an insert w/ a blob in oracle requires + * a returning clause with bind variables and a descriptor blob. + * + * + */ +function _adodb_getinsertsql(&$zthis,&$rs,$arrFields,$magicq=false,$force=2) +{ +static $cacheRS = false; +static $cacheSig = 0; +static $cacheCols; + global $ADODB_QUOTE_FIELDNAMES; + + $tableName = ''; + $values = ''; + $fields = ''; + $recordSet = null; + $arrFields = _array_change_key_case($arrFields); + $fieldInsertedCount = 0; + + if (is_string($rs)) { + //ok we have a table name + //try and get the column info ourself. + $tableName = $rs; + + //we need an object for the recordSet + //because we have to call MetaType. + //php can't do a $rsclass::MetaType() + $rsclass = $zthis->rsPrefix.$zthis->databaseType; + $recordSet = new $rsclass(-1,$zthis->fetchMode); + $recordSet->connection = $zthis; + + if (is_string($cacheRS) && $cacheRS == $rs) { + $columns = $cacheCols; + } else { + $columns = $zthis->MetaColumns( $tableName ); + $cacheRS = $tableName; + $cacheCols = $columns; + } + } else if (is_subclass_of($rs, 'adorecordset')) { + if (isset($rs->insertSig) && is_integer($cacheRS) && $cacheRS == $rs->insertSig) { + $columns = $cacheCols; + } else { + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) + $columns[] = $rs->FetchField($i); + $cacheRS = $cacheSig; + $cacheCols = $columns; + $rs->insertSig = $cacheSig++; + } + $recordSet = $rs; + + } else { + printf(ADODB_BAD_RS,'GetInsertSQL'); + return false; + } + + // Loop through all of the fields in the recordset + foreach( $columns as $field ) { + $upperfname = strtoupper($field->name); + if (adodb_key_exists($upperfname,$arrFields,$force)) { + $bad = false; + if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) { + switch ($ADODB_QUOTE_FIELDNAMES) { + case 'LOWER': + $fnameq = $zthis->nameQuote.strtolower($field->name).$zthis->nameQuote;break; + case 'NATIVE': + $fnameq = $zthis->nameQuote.$field->name.$zthis->nameQuote;break; + case 'UPPER': + default: + $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;break; + } + } else + $fnameq = $upperfname; + + $type = $recordSet->MetaType($field->type); + + /********************************************************/ + if (is_null($arrFields[$upperfname]) + || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) + || $arrFields[$upperfname] === $zthis->null2null + ) + { + switch ($force) { + + case 0: // we must always set null if missing + $bad = true; + break; + + case 1: + $values .= "null, "; + break; + + case 2: + //Set empty + $arrFields[$upperfname] = ""; + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq,$arrFields, $magicq); + break; + + default: + case 3: + //Set the value that was given in array, so you can give both null and empty values + if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === $zthis->null2null) { + $values .= "null, "; + } else { + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, $arrFields, $magicq); + } + break; + } // switch + + /*********************************************************/ + } else { + //we do this so each driver can customize the sql for + //DB specific column types. + //Oracle needs BLOB types to be handled with a returning clause + //postgres has special needs as well + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, + $arrFields, $magicq); + } + + if ($bad) continue; + // Set the counter for the number of fields that will be inserted. + $fieldInsertedCount++; + + + // Get the name of the fields to insert + $fields .= $fnameq . ", "; + } + } + + + // If there were any inserted fields then build the rest of the insert query. + if ($fieldInsertedCount <= 0) return false; + + // Get the table name from the existing query. + if (!$tableName) { + if (!empty($rs->tableName)) $tableName = $rs->tableName; + else if (preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName)) + $tableName = $tableName[1]; + else + return false; + } + + // Strip off the comma and space on the end of both the fields + // and their values. + $fields = substr($fields, 0, -2); + $values = substr($values, 0, -2); + + // Append the fields and their values to the insert query. + return 'INSERT INTO '.$tableName.' ( '.$fields.' ) VALUES ( '.$values.' )'; +} + + +/** + * This private method is used to help construct + * the update/sql which is generated by GetInsertSQL and GetUpdateSQL. + * It handles the string construction of 1 column -> sql string based on + * the column type. We want to do 'safe' handling of BLOBs + * + * @param string the type of sql we are trying to create + * 'I' or 'U'. + * @param string column data type from the db::MetaType() method + * @param string the column name + * @param array the column value + * + * @return string + * + */ +function _adodb_column_sql_oci8(&$zthis,$action, $type, $fname, $fnameq, $arrFields, $magicq) +{ + $sql = ''; + + // Based on the datatype of the field + // Format the value properly for the database + switch($type) { + case 'B': + //in order to handle Blobs correctly, we need + //to do some magic for Oracle + + //we need to create a new descriptor to handle + //this properly + if (!empty($zthis->hasReturningInto)) { + if ($action == 'I') { + $sql = 'empty_blob(), '; + } else { + $sql = $fnameq. '=empty_blob(), '; + } + //add the variable to the returning clause array + //so the user can build this later in + //case they want to add more to it + $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; + } else if (empty($arrFields[$fname])){ + if ($action == 'I') { + $sql = 'empty_blob(), '; + } else { + $sql = $fnameq. '=empty_blob(), '; + } + } else { + //this is to maintain compatibility + //with older adodb versions. + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + } + break; + + case "X": + //we need to do some more magic here for long variables + //to handle these correctly in oracle. + + //create a safe bind var name + //to avoid conflicts w/ dupes. + if (!empty($zthis->hasReturningInto)) { + if ($action == 'I') { + $sql = ':xx'.$fname.'xx, '; + } else { + $sql = $fnameq.'=:xx'.$fname.'xx, '; + } + //add the variable to the returning clause array + //so the user can build this later in + //case they want to add more to it + $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; + } else { + //this is to maintain compatibility + //with older adodb versions. + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + } + break; + + default: + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + break; + } + + return $sql; +} + +function _adodb_column_sql(&$zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq, $recurse=true) +{ + + if ($recurse) { + switch($zthis->dataProvider) { + case 'postgres': + if ($type == 'L') $type = 'C'; + break; + case 'oci8': + return _adodb_column_sql_oci8($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq); + + } + } + + switch($type) { + case "C": + case "X": + case 'B': + $val = $zthis->qstr($arrFields[$fname],$magicq); + break; + + case "D": + $val = $zthis->DBDate($arrFields[$fname]); + break; + + case "T": + $val = $zthis->DBTimeStamp($arrFields[$fname]); + break; + + case "N": + $val = $arrFields[$fname]; + if (!is_numeric($val)) $val = str_replace(',', '.', (float)$val); + break; + + case "I": + case "R": + $val = $arrFields[$fname]; + if (!is_numeric($val)) $val = (integer) $val; + break; + + default: + $val = str_replace(array("'"," ","("),"",$arrFields[$fname]); // basic sql injection defence + if (empty($val)) $val = '0'; + break; + } + + if ($action == 'I') return $val . ", "; + + + return $fnameq . "=" . $val . ", "; + +} + + + +function _adodb_debug_execute(&$zthis, $sql, $inputarr) +{ + $ss = ''; + if ($inputarr) { + foreach($inputarr as $kk=>$vv) { + if (is_string($vv) && strlen($vv)>64) $vv = substr($vv,0,64).'...'; + if (is_null($vv)) $ss .= "($kk=>null) "; + else $ss .= "($kk=>'$vv') "; + } + $ss = "[ $ss ]"; + } + $sqlTxt = is_array($sql) ? $sql[0] : $sql; + /*str_replace(', ','##1#__^LF',is_array($sql) ? $sql[0] : $sql); + $sqlTxt = str_replace(',',', ',$sqlTxt); + $sqlTxt = str_replace('##1#__^LF', ', ' ,$sqlTxt); + */ + // check if running from browser or command-line + $inBrowser = isset($_SERVER['HTTP_USER_AGENT']); + + $dbt = $zthis->databaseType; + if (isset($zthis->dsnType)) $dbt .= '-'.$zthis->dsnType; + if ($inBrowser) { + if ($ss) { + $ss = ''.htmlspecialchars($ss).''; + } + if ($zthis->debug === -1) + ADOConnection::outp( "
\n($dbt): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); + else if ($zthis->debug !== -99) + ADOConnection::outp( "


\n($dbt): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); + } else { + $ss = "\n ".$ss; + if ($zthis->debug !== -99) + ADOConnection::outp("-----
\n($dbt): ".$sqlTxt." $ss\n-----
\n",false); + } + + $qID = $zthis->_query($sql,$inputarr); + + /* + Alexios Fakios notes that ErrorMsg() must be called before ErrorNo() for mssql + because ErrorNo() calls Execute('SELECT @ERROR'), causing recursion + */ + if ($zthis->databaseType == 'mssql') { + // ErrorNo is a slow function call in mssql, and not reliable in PHP 4.0.6 + + if($emsg = $zthis->ErrorMsg()) { + if ($err = $zthis->ErrorNo()) { + if ($zthis->debug === -99) + ADOConnection::outp( "
\n($dbt): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); + + ADOConnection::outp($err.': '.$emsg); + } + } + } else if (!$qID) { + + if ($zthis->debug === -99) + if ($inBrowser) ADOConnection::outp( "
\n($dbt): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); + else ADOConnection::outp("-----
\n($dbt): ".$sqlTxt."$ss\n-----
\n",false); + + ADOConnection::outp($zthis->ErrorNo() .': '. $zthis->ErrorMsg()); + } + + if ($zthis->debug === 99) _adodb_backtrace(true,9999,2); + return $qID; +} + +# pretty print the debug_backtrace function +function _adodb_backtrace($printOrArr=true,$levels=9999,$skippy=0,$ishtml=null) +{ + if (!function_exists('debug_backtrace')) return ''; + + if ($ishtml === null) $html = (isset($_SERVER['HTTP_USER_AGENT'])); + else $html = $ishtml; + + $fmt = ($html) ? " %% line %4d, file: %s" : "%% line %4d, file: %s"; + + $MAXSTRLEN = 128; + + $s = ($html) ? '
' : '';
+
+	if (is_array($printOrArr)) $traceArr = $printOrArr;
+	else $traceArr = debug_backtrace();
+	array_shift($traceArr);
+	array_shift($traceArr);
+	$tabs = sizeof($traceArr)-2;
+
+	foreach ($traceArr as $arr) {
+		if ($skippy) {$skippy -= 1; continue;}
+		$levels -= 1;
+		if ($levels < 0) break;
+
+		$args = array();
+		for ($i=0; $i < $tabs; $i++) $s .=  ($html) ? '   ' : "\t";
+		$tabs -= 1;
+		if ($html) $s .= '';
+		if (isset($arr['class'])) $s .= $arr['class'].'.';
+		if (isset($arr['args']))
+		 foreach($arr['args'] as $v) {
+			if (is_null($v)) $args[] = 'null';
+			else if (is_array($v)) $args[] = 'Array['.sizeof($v).']';
+			else if (is_object($v)) $args[] = 'Object:'.get_class($v);
+			else if (is_bool($v)) $args[] = $v ? 'true' : 'false';
+			else {
+				$v = (string) @$v;
+				$str = htmlspecialchars(str_replace(array("\r","\n"),' ',substr($v,0,$MAXSTRLEN)));
+				if (strlen($v) > $MAXSTRLEN) $str .= '...';
+				$args[] = $str;
+			}
+		}
+		$s .= $arr['function'].'('.implode(', ',$args).')';
+
+
+		$s .= @sprintf($fmt, $arr['line'],$arr['file'],basename($arr['file']));
+
+		$s .= "\n";
+	}
+	if ($html) $s .= '
'; + if ($printOrArr) print $s; + + return $s; +} +/* +function _adodb_find_from($sql) +{ + + $sql = str_replace(array("\n","\r"), ' ', $sql); + $charCount = strlen($sql); + + $inString = false; + $quote = ''; + $parentheseCount = 0; + $prevChars = ''; + $nextChars = ''; + + + for($i = 0; $i < $charCount; $i++) { + + $char = substr($sql,$i,1); + $prevChars = substr($sql,0,$i); + $nextChars = substr($sql,$i+1); + + if((($char == "'" || $char == '"' || $char == '`') && substr($prevChars,-1,1) != '\\') && $inString === false) { + $quote = $char; + $inString = true; + } + + elseif((($char == "'" || $char == '"' || $char == '`') && substr($prevChars,-1,1) != '\\') && $inString === true && $quote == $char) { + $quote = ""; + $inString = false; + } + + elseif($char == "(" && $inString === false) + $parentheseCount++; + + elseif($char == ")" && $inString === false && $parentheseCount > 0) + $parentheseCount--; + + elseif($parentheseCount <= 0 && $inString === false && $char == " " && strtoupper(substr($prevChars,-5,5)) == " FROM") + return $i; + + } +} +*/ diff --git a/ehcp/adodb5/adodb-memcache.lib.inc.php b/ehcp/adodb5/adodb-memcache.lib.inc.php new file mode 100644 index 0000000..157ee38 --- /dev/null +++ b/ehcp/adodb5/adodb-memcache.lib.inc.php @@ -0,0 +1,190 @@ +memCache = true; /// should we use memCache instead of caching in files +$db->memCacheHost = array($ip1, $ip2, $ip3); +$db->memCachePort = 11211; /// this is default memCache port +$db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + +$db->Connect(...); +$db->CacheExecute($sql); + + Note the memcache class is shared by all connections, is created during the first call to Connect/PConnect. + + Class instance is stored in $ADODB_CACHE +*/ + + class ADODB_Cache_MemCache { + var $createdir = false; // create caching directory structure? + + //----------------------------- + // memcache specific variables + + var $hosts; // array of hosts + var $port = 11211; + var $compress = false; // memcache compression with zlib + + var $_connected = false; + var $_memcache = false; + + function __construct(&$obj) + { + $this->hosts = $obj->memCacheHost; + $this->port = $obj->memCachePort; + $this->compress = $obj->memCacheCompress; + } + + // implement as lazy connection. The connection only occurs on CacheExecute call + function connect(&$err) + { + if (!function_exists('memcache_pconnect')) { + $err = 'Memcache module PECL extension not found!'; + return false; + } + + $memcache = new MemCache; + + if (!is_array($this->hosts)) $this->hosts = array($this->hosts); + + $failcnt = 0; + foreach($this->hosts as $host) { + if (!@$memcache->addServer($host,$this->port,true)) { + $failcnt += 1; + } + } + if ($failcnt == sizeof($this->hosts)) { + $err = 'Can\'t connect to any memcache server'; + return false; + } + $this->_connected = true; + $this->_memcache = $memcache; + return true; + } + + // returns true or false. true if successful save + function writecache($filename, $contents, $debug, $secs2cache) + { + if (!$this->_connected) { + $err = ''; + if (!$this->connect($err) && $debug) ADOConnection::outp($err); + } + if (!$this->_memcache) return false; + + if (!$this->_memcache->set($filename, $contents, $this->compress ? MEMCACHE_COMPRESSED : 0, $secs2cache)) { + if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!
\n"); + return false; + } + + return true; + } + + // returns a recordset + function readcache($filename, &$err, $secs2cache, $rsClass) + { + $false = false; + if (!$this->_connected) $this->connect($err); + if (!$this->_memcache) return $false; + + $rs = $this->_memcache->get($filename); + if (!$rs) { + $err = 'Item with such key doesn\'t exists on the memcached server.'; + return $false; + } + + // hack, should actually use _csv2rs + $rs = explode("\n", $rs); + unset($rs[0]); + $rs = join("\n", $rs); + $rs = unserialize($rs); + if (! is_object($rs)) { + $err = 'Unable to unserialize $rs'; + return $false; + } + if ($rs->timeCreated == 0) return $rs; // apparently have been reports that timeCreated was set to 0 somewhere + + $tdiff = intval($rs->timeCreated+$secs2cache - time()); + if ($tdiff <= 2) { + switch($tdiff) { + case 2: + if ((rand() & 15) == 0) { + $err = "Timeout 2"; + return $false; + } + break; + case 1: + if ((rand() & 3) == 0) { + $err = "Timeout 1"; + return $false; + } + break; + default: + $err = "Timeout 0"; + return $false; + } + } + return $rs; + } + + function flushall($debug=false) + { + if (!$this->_connected) { + $err = ''; + if (!$this->connect($err) && $debug) ADOConnection::outp($err); + } + if (!$this->_memcache) return false; + + $del = $this->_memcache->flush(); + + if ($debug) + if (!$del) ADOConnection::outp("flushall: failed!
\n"); + else ADOConnection::outp("flushall: succeeded!
\n"); + + return $del; + } + + function flushcache($filename, $debug=false) + { + if (!$this->_connected) { + $err = ''; + if (!$this->connect($err) && $debug) ADOConnection::outp($err); + } + if (!$this->_memcache) return false; + + $del = $this->_memcache->delete($filename); + + if ($debug) + if (!$del) ADOConnection::outp("flushcache: $key entry doesn't exist on memcached server!
\n"); + else ADOConnection::outp("flushcache: $key entry flushed from memcached server!
\n"); + + return $del; + } + + // not used for memcache + function createdir($dir, $hash) + { + return true; + } + } diff --git a/ehcp/adodb5/adodb-pager.inc.php b/ehcp/adodb5/adodb-pager.inc.php new file mode 100644 index 0000000..291e4e3 --- /dev/null +++ b/ehcp/adodb5/adodb-pager.inc.php @@ -0,0 +1,289 @@ + implemented Render_PageLinks(). + + Please note, this class is entirely unsupported, + and no free support requests except for bug reports + will be entertained by the author. + +*/ +class ADODB_Pager { + var $id; // unique id for pager (defaults to 'adodb') + var $db; // ADODB connection object + var $sql; // sql used + var $rs; // recordset generated + var $curr_page; // current page number before Render() called, calculated in constructor + var $rows; // number of rows per page + var $linksPerPage=10; // number of links per page in navigation bar + var $showPageLinks; + + var $gridAttributes = 'width=100% border=1 bgcolor=white'; + + // Localize text strings here + var $first = '|<'; + var $prev = '<<'; + var $next = '>>'; + var $last = '>|'; + var $moreLinks = '...'; + var $startLinks = '...'; + var $gridHeader = false; + var $htmlSpecialChars = true; + var $page = 'Page'; + var $linkSelectedColor = 'red'; + var $cache = 0; #secs to cache with CachePageExecute() + + //---------------------------------------------- + // constructor + // + // $db adodb connection object + // $sql sql statement + // $id optional id to identify which pager, + // if you have multiple on 1 page. + // $id should be only be [a-z0-9]* + // + function __construct(&$db,$sql,$id = 'adodb', $showPageLinks = false) + { + global $PHP_SELF; + + $curr_page = $id.'_curr_page'; + if (!empty($PHP_SELF)) $PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF']); // htmlspecialchars() to prevent XSS attacks + + $this->sql = $sql; + $this->id = $id; + $this->db = $db; + $this->showPageLinks = $showPageLinks; + + $next_page = $id.'_next_page'; + + if (isset($_GET[$next_page])) { + $_SESSION[$curr_page] = (integer) $_GET[$next_page]; + } + if (empty($_SESSION[$curr_page])) $_SESSION[$curr_page] = 1; ## at first page + + $this->curr_page = $_SESSION[$curr_page]; + + } + + //--------------------------- + // Display link to first page + function Render_First($anchor=true) + { + global $PHP_SELF; + if ($anchor) { + ?> + first;?>   + first   "; + } + } + + //-------------------------- + // Display link to next page + function render_next($anchor=true) + { + global $PHP_SELF; + + if ($anchor) { + ?> + next;?>   + next   "; + } + } + + //------------------ + // Link to last page + // + // for better performance with large recordsets, you can set + // $this->db->pageExecuteCountRows = false, which disables + // last page counting. + function render_last($anchor=true) + { + global $PHP_SELF; + + if (!$this->db->pageExecuteCountRows) return; + + if ($anchor) { + ?> + last;?>   + last   "; + } + } + + //--------------------------------------------------- + // original code by "Pablo Costa" + function render_pagelinks() + { + global $PHP_SELF; + $pages = $this->rs->LastPageNo(); + $linksperpage = $this->linksPerPage ? $this->linksPerPage : $pages; + for($i=1; $i <= $pages; $i+=$linksperpage) + { + if($this->rs->AbsolutePage() >= $i) + { + $start = $i; + } + } + $numbers = ''; + $end = $start+$linksperpage-1; + $link = $this->id . "_next_page"; + if($end > $pages) $end = $pages; + + + if ($this->startLinks && $start > 1) { + $pos = $start - 1; + $numbers .= "$this->startLinks "; + } + + for($i=$start; $i <= $end; $i++) { + if ($this->rs->AbsolutePage() == $i) + $numbers .= "linkSelectedColor>$i "; + else + $numbers .= "$i "; + + } + if ($this->moreLinks && $end < $pages) + $numbers .= "$this->moreLinks "; + print $numbers . '   '; + } + // Link to previous page + function render_prev($anchor=true) + { + global $PHP_SELF; + if ($anchor) { + ?> + prev;?>   + prev   "; + } + } + + //-------------------------------------------------------- + // Simply rendering of grid. You should override this for + // better control over the format of the grid + // + // We use output buffering to keep code clean and readable. + function RenderGrid() + { + global $gSQLBlockRows; // used by rs2html to indicate how many rows to display + include_once(ADODB_DIR.'/tohtml.inc.php'); + ob_start(); + $gSQLBlockRows = $this->rows; + rs2html($this->rs,$this->gridAttributes,$this->gridHeader,$this->htmlSpecialChars); + $s = ob_get_contents(); + ob_end_clean(); + return $s; + } + + //------------------------------------------------------- + // Navigation bar + // + // we use output buffering to keep the code easy to read. + function RenderNav() + { + ob_start(); + if (!$this->rs->AtFirstPage()) { + $this->Render_First(); + $this->Render_Prev(); + } else { + $this->Render_First(false); + $this->Render_Prev(false); + } + if ($this->showPageLinks){ + $this->Render_PageLinks(); + } + if (!$this->rs->AtLastPage()) { + $this->Render_Next(); + $this->Render_Last(); + } else { + $this->Render_Next(false); + $this->Render_Last(false); + } + $s = ob_get_contents(); + ob_end_clean(); + return $s; + } + + //------------------- + // This is the footer + function RenderPageCount() + { + if (!$this->db->pageExecuteCountRows) return ''; + $lastPage = $this->rs->LastPageNo(); + if ($lastPage == -1) $lastPage = 1; // check for empty rs. + if ($this->curr_page > $lastPage) $this->curr_page = 1; + return "$this->page ".$this->curr_page."/".$lastPage.""; + } + + //----------------------------------- + // Call this class to draw everything. + function Render($rows=10) + { + global $ADODB_COUNTRECS; + + $this->rows = $rows; + + if ($this->db->dataProvider == 'informix') $this->db->cursorType = IFX_SCROLL; + + $savec = $ADODB_COUNTRECS; + if ($this->db->pageExecuteCountRows) $ADODB_COUNTRECS = true; + if ($this->cache) + $rs = $this->db->CachePageExecute($this->cache,$this->sql,$rows,$this->curr_page); + else + $rs = $this->db->PageExecute($this->sql,$rows,$this->curr_page); + $ADODB_COUNTRECS = $savec; + + $this->rs = $rs; + if (!$rs) { + print "

Query failed: $this->sql

"; + return; + } + + if (!$rs->EOF && (!$rs->AtFirstPage() || !$rs->AtLastPage())) + $header = $this->RenderNav(); + else + $header = " "; + + $grid = $this->RenderGrid(); + $footer = $this->RenderPageCount(); + + $this->RenderLayout($header,$grid,$footer); + + $rs->Close(); + $this->rs = false; + } + + //------------------------------------------------------ + // override this to control overall layout and formating + function RenderLayout($header,$grid,$footer,$attributes='border=1 bgcolor=beige') + { + echo "
", + $header, + "
", + $grid, + "
", + $footer, + "
"; + } +} diff --git a/ehcp/adodb5/adodb-pear.inc.php b/ehcp/adodb5/adodb-pear.inc.php new file mode 100644 index 0000000..b3f4aa1 --- /dev/null +++ b/ehcp/adodb5/adodb-pear.inc.php @@ -0,0 +1,370 @@ + | + * and Tomas V.V.Cox . Portions (c)1997-2002 The PHP Group. + */ + + /* + We support: + + DB_Common + --------- + query - returns PEAR_Error on error + limitQuery - return PEAR_Error on error + prepare - does not return PEAR_Error on error + execute - does not return PEAR_Error on error + setFetchMode - supports ASSOC and ORDERED + errorNative + quote + nextID + disconnect + + getOne + getAssoc + getRow + getCol + getAll + + DB_Result + --------- + numRows - returns -1 if not supported + numCols + fetchInto - does not support passing of fetchmode + fetchRows - does not support passing of fetchmode + free + */ + +define('ADODB_PEAR',dirname(__FILE__)); +include_once "PEAR.php"; +include_once ADODB_PEAR."/adodb-errorpear.inc.php"; +include_once ADODB_PEAR."/adodb.inc.php"; + +if (!defined('DB_OK')) { +define("DB_OK", 1); +define("DB_ERROR",-1); + +/** + * This is a special constant that tells DB the user hasn't specified + * any particular get mode, so the default should be used. + */ + +define('DB_FETCHMODE_DEFAULT', 0); + +/** + * Column data indexed by numbers, ordered from 0 and up + */ + +define('DB_FETCHMODE_ORDERED', 1); + +/** + * Column data indexed by column names + */ + +define('DB_FETCHMODE_ASSOC', 2); + +/* for compatibility */ + +define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED); +define('DB_GETMODE_ASSOC', DB_FETCHMODE_ASSOC); + +/** + * these are constants for the tableInfo-function + * they are bitwised or'ed. so if there are more constants to be defined + * in the future, adjust DB_TABLEINFO_FULL accordingly + */ + +define('DB_TABLEINFO_ORDER', 1); +define('DB_TABLEINFO_ORDERTABLE', 2); +define('DB_TABLEINFO_FULL', 3); +} + +/** + * The main "DB" class is simply a container class with some static + * methods for creating DB objects as well as some utility functions + * common to all parts of DB. + * + */ + +class DB +{ + /** + * Create a new DB object for the specified database type + * + * @param $type string database type, for example "mysql" + * + * @return object a newly created DB object, or a DB error code on + * error + */ + + function factory($type) + { + include_once(ADODB_DIR."/drivers/adodb-$type.inc.php"); + $obj = NewADOConnection($type); + if (!is_object($obj)) $obj = new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1); + return $obj; + } + + /** + * Create a new DB object and connect to the specified database + * + * @param $dsn mixed "data source name", see the DB::parseDSN + * method for a description of the dsn format. Can also be + * specified as an array of the format returned by DB::parseDSN. + * + * @param $options mixed if boolean (or scalar), tells whether + * this connection should be persistent (for backends that support + * this). This parameter can also be an array of options, see + * DB_common::setOption for more information on connection + * options. + * + * @return object a newly created DB connection object, or a DB + * error object on error + * + * @see DB::parseDSN + * @see DB::isError + */ + function connect($dsn, $options = false) + { + if (is_array($dsn)) { + $dsninfo = $dsn; + } else { + $dsninfo = DB::parseDSN($dsn); + } + switch ($dsninfo["phptype"]) { + case 'pgsql': $type = 'postgres7'; break; + case 'ifx': $type = 'informix9'; break; + default: $type = $dsninfo["phptype"]; break; + } + + if (is_array($options) && isset($options["debug"]) && + $options["debug"] >= 2) { + // expose php errors with sufficient debug level + @include_once("adodb-$type.inc.php"); + } else { + @include_once("adodb-$type.inc.php"); + } + + @$obj = NewADOConnection($type); + if (!is_object($obj)) { + $obj = new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1); + return $obj; + } + if (is_array($options)) { + foreach($options as $k => $v) { + switch(strtolower($k)) { + case 'persist': + case 'persistent': $persist = $v; break; + #ibase + case 'dialect': $obj->dialect = $v; break; + case 'charset': $obj->charset = $v; break; + case 'buffers': $obj->buffers = $v; break; + #ado + case 'charpage': $obj->charPage = $v; break; + #mysql + case 'clientflags': $obj->clientFlags = $v; break; + } + } + } else { + $persist = false; + } + + if (isset($dsninfo['socket'])) $dsninfo['hostspec'] .= ':'.$dsninfo['socket']; + else if (isset($dsninfo['port'])) $dsninfo['hostspec'] .= ':'.$dsninfo['port']; + + if($persist) $ok = $obj->PConnect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']); + else $ok = $obj->Connect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']); + + if (!$ok) $obj = ADODB_PEAR_Error(); + return $obj; + } + + /** + * Return the DB API version + * + * @return int the DB API version number + */ + function apiVersion() + { + return 2; + } + + /** + * Tell whether a result code from a DB method is an error + * + * @param $value int result code + * + * @return bool whether $value is an error + */ + function isError($value) + { + if (!is_object($value)) return false; + $class = strtolower(get_class($value)); + return $class == 'pear_error' || is_subclass_of($value, 'pear_error') || + $class == 'db_error' || is_subclass_of($value, 'db_error'); + } + + + /** + * Tell whether a result code from a DB method is a warning. + * Warnings differ from errors in that they are generated by DB, + * and are not fatal. + * + * @param $value mixed result value + * + * @return bool whether $value is a warning + */ + function isWarning($value) + { + return false; + /* + return is_object($value) && + (get_class( $value ) == "db_warning" || + is_subclass_of($value, "db_warning"));*/ + } + + /** + * Parse a data source name + * + * @param $dsn string Data Source Name to be parsed + * + * @return array an associative array with the following keys: + * + * phptype: Database backend used in PHP (mysql, odbc etc.) + * dbsyntax: Database used with regards to SQL syntax etc. + * protocol: Communication protocol to use (tcp, unix etc.) + * hostspec: Host specification (hostname[:port]) + * database: Database to use on the DBMS server + * username: User name for login + * password: Password for login + * + * The format of the supplied DSN is in its fullest form: + * + * phptype(dbsyntax)://username:password@protocol+hostspec/database + * + * Most variations are allowed: + * + * phptype://username:password@protocol+hostspec:110//usr/db_file.db + * phptype://username:password@hostspec/database_name + * phptype://username:password@hostspec + * phptype://username@hostspec + * phptype://hostspec/database + * phptype://hostspec + * phptype(dbsyntax) + * phptype + * + * @author Tomas V.V.Cox + */ + function parseDSN($dsn) + { + if (is_array($dsn)) { + return $dsn; + } + + $parsed = array( + 'phptype' => false, + 'dbsyntax' => false, + 'protocol' => false, + 'hostspec' => false, + 'database' => false, + 'username' => false, + 'password' => false + ); + + // Find phptype and dbsyntax + if (($pos = strpos($dsn, '://')) !== false) { + $str = substr($dsn, 0, $pos); + $dsn = substr($dsn, $pos + 3); + } else { + $str = $dsn; + $dsn = NULL; + } + + // Get phptype and dbsyntax + // $str => phptype(dbsyntax) + if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) { + $parsed['phptype'] = $arr[1]; + $parsed['dbsyntax'] = (empty($arr[2])) ? $arr[1] : $arr[2]; + } else { + $parsed['phptype'] = $str; + $parsed['dbsyntax'] = $str; + } + + if (empty($dsn)) { + return $parsed; + } + + // Get (if found): username and password + // $dsn => username:password@protocol+hostspec/database + if (($at = strpos($dsn,'@')) !== false) { + $str = substr($dsn, 0, $at); + $dsn = substr($dsn, $at + 1); + if (($pos = strpos($str, ':')) !== false) { + $parsed['username'] = urldecode(substr($str, 0, $pos)); + $parsed['password'] = urldecode(substr($str, $pos + 1)); + } else { + $parsed['username'] = urldecode($str); + } + } + + // Find protocol and hostspec + // $dsn => protocol+hostspec/database + if (($pos=strpos($dsn, '/')) !== false) { + $str = substr($dsn, 0, $pos); + $dsn = substr($dsn, $pos + 1); + } else { + $str = $dsn; + $dsn = NULL; + } + + // Get protocol + hostspec + // $str => protocol+hostspec + if (($pos=strpos($str, '+')) !== false) { + $parsed['protocol'] = substr($str, 0, $pos); + $parsed['hostspec'] = urldecode(substr($str, $pos + 1)); + } else { + $parsed['hostspec'] = urldecode($str); + } + + // Get dabase if any + // $dsn => database + if (!empty($dsn)) { + $parsed['database'] = $dsn; + } + + return $parsed; + } + + /** + * Load a PHP database extension if it is not loaded already. + * + * @access public + * + * @param $name the base name of the extension (without the .so or + * .dll suffix) + * + * @return bool true if the extension was already or successfully + * loaded, false if it could not be loaded + */ + function assertExtension($name) + { + if (!extension_loaded($name)) { + $dlext = (strncmp(PHP_OS,'WIN',3) === 0) ? '.dll' : '.so'; + @dl($name . $dlext); + } + if (!extension_loaded($name)) { + return false; + } + return true; + } +} diff --git a/ehcp/adodb5/adodb-perf.inc.php b/ehcp/adodb5/adodb-perf.inc.php new file mode 100644 index 0000000..42ad714 --- /dev/null +++ b/ehcp/adodb5/adodb-perf.inc.php @@ -0,0 +1,1099 @@ += minimum number of secs to run + + +// returns in K the memory of current process, or 0 if not known +function adodb_getmem() +{ + if (function_exists('memory_get_usage')) + return (integer) ((memory_get_usage()+512)/1024); + + $pid = getmypid(); + + if ( strncmp(strtoupper(PHP_OS),'WIN',3)==0) { + $output = array(); + + exec('tasklist /FI "PID eq ' . $pid. '" /FO LIST', $output); + return substr($output[5], strpos($output[5], ':') + 1); + } + + /* Hopefully UNIX */ + exec("ps --pid $pid --no-headers -o%mem,size", $output); + if (sizeof($output) == 0) return 0; + + $memarr = explode(' ',$output[0]); + if (sizeof($memarr)>=2) return (integer) $memarr[1]; + + return 0; +} + +// avoids localization problems where , is used instead of . +function adodb_round($n,$prec) +{ + return number_format($n, $prec, '.', ''); +} + +/* obsolete: return microtime value as a float. Retained for backward compat */ +function adodb_microtime() +{ + return microtime(true); +} + +/* sql code timing */ +function adodb_log_sql(&$connx,$sql,$inputarr) +{ + $perf_table = adodb_perf::table(); + $connx->fnExecute = false; + $a0 = microtime(true); + $rs = $connx->Execute($sql,$inputarr); + $a1 = microtime(true); + + if (!empty($connx->_logsql) && (empty($connx->_logsqlErrors) || !$rs)) { + global $ADODB_LOG_CONN; + + if (!empty($ADODB_LOG_CONN)) { + $conn = $ADODB_LOG_CONN; + if ($conn->databaseType != $connx->databaseType) + $prefix = '/*dbx='.$connx->databaseType .'*/ '; + else + $prefix = ''; + } else { + $conn = $connx; + $prefix = ''; + } + + $conn->_logsql = false; // disable logsql error simulation + $dbT = $conn->databaseType; + + $time = $a1 - $a0; + + if (!$rs) { + $errM = $connx->ErrorMsg(); + $errN = $connx->ErrorNo(); + $conn->lastInsID = 0; + $tracer = substr('ERROR: '.htmlspecialchars($errM),0,250); + } else { + $tracer = ''; + $errM = ''; + $errN = 0; + $dbg = $conn->debug; + $conn->debug = false; + if (!is_object($rs) || $rs->dataProvider == 'empty') + $conn->_affected = $conn->affected_rows(true); + $conn->lastInsID = @$conn->Insert_ID(); + $conn->debug = $dbg; + } + if (isset($_SERVER['HTTP_HOST'])) { + $tracer .= '
'.$_SERVER['HTTP_HOST']; + if (isset($_SERVER['PHP_SELF'])) $tracer .= htmlspecialchars($_SERVER['PHP_SELF']); + } else + if (isset($_SERVER['PHP_SELF'])) $tracer .= '
'.htmlspecialchars($_SERVER['PHP_SELF']); + //$tracer .= (string) adodb_backtrace(false); + + $tracer = (string) substr($tracer,0,500); + + if (is_array($inputarr)) { + if (is_array(reset($inputarr))) $params = 'Array sizeof='.sizeof($inputarr); + else { + // Quote string parameters so we can see them in the + // performance stats. This helps spot disabled indexes. + $xar_params = $inputarr; + foreach ($xar_params as $xar_param_key => $xar_param) { + if (gettype($xar_param) == 'string') + $xar_params[$xar_param_key] = '"' . $xar_param . '"'; + } + $params = implode(', ', $xar_params); + if (strlen($params) >= 3000) $params = substr($params, 0, 3000); + } + } else { + $params = ''; + } + + if (is_array($sql)) $sql = $sql[0]; + if ($prefix) $sql = $prefix.$sql; + $arr = array('b'=>strlen($sql).'.'.crc32($sql), + 'c'=>substr($sql,0,3900), 'd'=>$params,'e'=>$tracer,'f'=>adodb_round($time,6)); + //var_dump($arr); + $saved = $conn->debug; + $conn->debug = 0; + + $d = $conn->sysTimeStamp; + if (empty($d)) $d = date("'Y-m-d H:i:s'"); + if ($conn->dataProvider == 'oci8' && $dbT != 'oci8po') { + $isql = "insert into $perf_table values($d,:b,:c,:d,:e,:f)"; + } else if ($dbT == 'odbc_mssql' || $dbT == 'informix' || strncmp($dbT,'odbtp',4)==0) { + $timer = $arr['f']; + if ($dbT == 'informix') $sql2 = substr($sql2,0,230); + + $sql1 = $conn->qstr($arr['b']); + $sql2 = $conn->qstr($arr['c']); + $params = $conn->qstr($arr['d']); + $tracer = $conn->qstr($arr['e']); + + $isql = "insert into $perf_table (created,sql0,sql1,params,tracer,timer) values($d,$sql1,$sql2,$params,$tracer,$timer)"; + if ($dbT == 'informix') $isql = str_replace(chr(10),' ',$isql); + $arr = false; + } else { + if ($dbT == 'db2') $arr['f'] = (float) $arr['f']; + $isql = "insert into $perf_table (created,sql0,sql1,params,tracer,timer) values( $d,?,?,?,?,?)"; + } + + global $ADODB_PERF_MIN; + if ($errN != 0 || $time >= $ADODB_PERF_MIN) { + $ok = $conn->Execute($isql,$arr); + } else + $ok = true; + + $conn->debug = $saved; + + if ($ok) { + $conn->_logsql = true; + } else { + $err2 = $conn->ErrorMsg(); + $conn->_logsql = true; // enable logsql error simulation + $perf = NewPerfMonitor($conn); + if ($perf) { + if ($perf->CreateLogTable()) $ok = $conn->Execute($isql,$arr); + } else { + $ok = $conn->Execute("create table $perf_table ( + created varchar(50), + sql0 varchar(250), + sql1 varchar(4000), + params varchar(3000), + tracer varchar(500), + timer decimal(16,6))"); + } + if (!$ok) { + ADOConnection::outp( "

LOGSQL Insert Failed: $isql
$err2

"); + $conn->_logsql = false; + } + } + $connx->_errorMsg = $errM; + $connx->_errorCode = $errN; + } + $connx->fnExecute = 'adodb_log_sql'; + return $rs; +} + + +/* +The settings data structure is an associative array that database parameter per element. + +Each database parameter element in the array is itself an array consisting of: + +0: category code, used to group related db parameters +1: either + a. sql string to retrieve value, eg. "select value from v\$parameter where name='db_block_size'", + b. array holding sql string and field to look for, e.g. array('show variables','table_cache'), + c. a string prefixed by =, then a PHP method of the class is invoked, + e.g. to invoke $this->GetIndexValue(), set this array element to '=GetIndexValue', +2: description of the database parameter +*/ + +class adodb_perf { + var $conn; + var $color = '#F0F0F0'; + var $table = ''; + var $titles = ''; + var $warnRatio = 90; + var $tablesSQL = false; + var $cliFormat = "%32s => %s \r\n"; + var $sql1 = 'sql1'; // used for casting sql1 to text for mssql + var $explain = true; + var $helpurl = 'LogSQL help'; + var $createTableSQL = false; + var $maxLength = 2000; + + // Sets the tablename to be used + static function table($newtable = false) + { + static $_table; + + if (!empty($newtable)) $_table = $newtable; + if (empty($_table)) $_table = 'adodb_logsql'; + return $_table; + } + + // returns array with info to calculate CPU Load + function _CPULoad() + { +/* + +cpu 524152 2662 2515228 336057010 +cpu0 264339 1408 1257951 168025827 +cpu1 259813 1254 1257277 168031181 +page 622307 25475680 +swap 24 1891 +intr 890153570 868093576 6 0 4 4 0 6 1 2 0 0 0 124 0 8098760 2 13961053 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +disk_io: (3,0):(3144904,54369,610378,3090535,50936192) (3,1):(3630212,54097,633016,3576115,50951320) +ctxt 66155838 +btime 1062315585 +processes 69293 + +*/ + // Algorithm is taken from + // http://social.technet.microsoft.com/Forums/en-US/winservergen/thread/414b0e1b-499c-411e-8a02-6a12e339c0f1/ + if (strncmp(PHP_OS,'WIN',3)==0) { + if (PHP_VERSION == '5.0.0') return false; + if (PHP_VERSION == '5.0.1') return false; + if (PHP_VERSION == '5.0.2') return false; + if (PHP_VERSION == '5.0.3') return false; + if (PHP_VERSION == '4.3.10') return false; # see http://bugs.php.net/bug.php?id=31737 + + static $FAIL = false; + if ($FAIL) return false; + + $objName = "winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\CIMV2"; + $myQuery = "SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = '_Total'"; + + try { + @$objWMIService = new COM($objName); + if (!$objWMIService) { + $FAIL = true; + return false; + } + + $info[0] = -1; + $info[1] = 0; + $info[2] = 0; + $info[3] = 0; + foreach($objWMIService->ExecQuery($myQuery) as $objItem) { + $info[0] = $objItem->PercentProcessorTime(); + } + + } catch(Exception $e) { + $FAIL = true; + echo $e->getMessage(); + return false; + } + + return $info; + } + + // Algorithm - Steve Blinch (BlitzAffe Online, http://www.blitzaffe.com) + $statfile = '/proc/stat'; + if (!file_exists($statfile)) return false; + + $fd = fopen($statfile,"r"); + if (!$fd) return false; + + $statinfo = explode("\n",fgets($fd, 1024)); + fclose($fd); + foreach($statinfo as $line) { + $info = explode(" ",$line); + if($info[0]=="cpu") { + array_shift($info); // pop off "cpu" + if(!$info[0]) array_shift($info); // pop off blank space (if any) + return $info; + } + } + + return false; + + } + + /* NOT IMPLEMENTED */ + function MemInfo() + { + /* + + total: used: free: shared: buffers: cached: +Mem: 1055289344 917299200 137990144 0 165437440 599773184 +Swap: 2146775040 11055104 2135719936 +MemTotal: 1030556 kB +MemFree: 134756 kB +MemShared: 0 kB +Buffers: 161560 kB +Cached: 581384 kB +SwapCached: 4332 kB +Active: 494468 kB +Inact_dirty: 322856 kB +Inact_clean: 24256 kB +Inact_target: 168316 kB +HighTotal: 131064 kB +HighFree: 1024 kB +LowTotal: 899492 kB +LowFree: 133732 kB +SwapTotal: 2096460 kB +SwapFree: 2085664 kB +Committed_AS: 348732 kB + */ + } + + + /* + Remember that this is client load, not db server load! + */ + var $_lastLoad; + function CPULoad() + { + $info = $this->_CPULoad(); + if (!$info) return false; + + if (strncmp(PHP_OS,'WIN',3)==0) { + return (integer) $info[0]; + }else { + if (empty($this->_lastLoad)) { + sleep(1); + $this->_lastLoad = $info; + $info = $this->_CPULoad(); + } + + $last = $this->_lastLoad; + $this->_lastLoad = $info; + + $d_user = $info[0] - $last[0]; + $d_nice = $info[1] - $last[1]; + $d_system = $info[2] - $last[2]; + $d_idle = $info[3] - $last[3]; + + //printf("Delta - User: %f Nice: %f System: %f Idle: %f
",$d_user,$d_nice,$d_system,$d_idle); + + $total=$d_user+$d_nice+$d_system+$d_idle; + if ($total<1) $total=1; + return 100*($d_user+$d_nice+$d_system)/$total; + } + } + + function Tracer($sql) + { + $perf_table = adodb_perf::table(); + $saveE = $this->conn->fnExecute; + $this->conn->fnExecute = false; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $sqlq = $this->conn->qstr($sql); + $arr = $this->conn->GetArray( +"select count(*),tracer + from $perf_table where sql1=$sqlq + group by tracer + order by 1 desc"); + $s = ''; + if ($arr) { + $s .= '

Scripts Affected

'; + foreach($arr as $k) { + $s .= sprintf("%4d",$k[0]).'   '.strip_tags($k[1]).'
'; + } + } + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_CACHE_MODE = $save; + $this->conn->fnExecute = $saveE; + return $s; + } + + /* + Explain Plan for $sql. + If only a snippet of the $sql is passed in, then $partial will hold the crc32 of the + actual sql. + */ + function Explain($sql,$partial=false) + { + return false; + } + + function InvalidSQL($numsql = 10) + { + + if (isset($_GET['sql'])) return; + $s = '

Invalid SQL

'; + $saveE = $this->conn->fnExecute; + $this->conn->fnExecute = false; + $perf_table = adodb_perf::table(); + $rs = $this->conn->SelectLimit("select distinct count(*),sql1,tracer as error_msg from $perf_table where tracer like 'ERROR:%' group by sql1,tracer order by 1 desc",$numsql);//,$numsql); + $this->conn->fnExecute = $saveE; + if ($rs) { + $s .= rs2html($rs,false,false,false,false); + } else + return "

$this->helpurl. ".$this->conn->ErrorMsg()."

"; + + return $s; + } + + + /* + This script identifies the longest running SQL + */ + function _SuspiciousSQL($numsql = 10) + { + global $ADODB_FETCH_MODE; + + $perf_table = adodb_perf::table(); + $saveE = $this->conn->fnExecute; + $this->conn->fnExecute = false; + + if (isset($_GET['exps']) && isset($_GET['sql'])) { + $partial = !empty($_GET['part']); + echo "".$this->Explain($_GET['sql'],$partial)."\n"; + } + + if (isset($_GET['sql'])) return; + $sql1 = $this->sql1; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + //$this->conn->debug=1; + $rs = $this->conn->SelectLimit( + "select avg(timer) as avg_timer,$sql1,count(*),max(timer) as max_timer,min(timer) as min_timer + from $perf_table + where {$this->conn->upperCase}({$this->conn->substr}(sql0,1,5)) not in ('DROP ','INSER','COMMI','CREAT') + and (tracer is null or tracer not like 'ERROR:%') + group by sql1 + order by 1 desc",$numsql); + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + $this->conn->fnExecute = $saveE; + + if (!$rs) return "

$this->helpurl. ".$this->conn->ErrorMsg()."

"; + $s = "

Suspicious SQL

+The following SQL have high average execution times
+
ParameterValueDescription
\n"; + $max = $this->maxLength; + while (!$rs->EOF) { + $sql = $rs->fields[1]; + $raw = urlencode($sql); + if (strlen($raw)>$max-100) { + $sql2 = substr($sql,0,$max-500); + $raw = urlencode($sql2).'&part='.crc32($sql); + } + $prefix = ""; + $suffix = ""; + if ($this->explain == false || strlen($prefix)>$max) { + $suffix = ' ... String too long for GET parameter: '.strlen($prefix).''; + $prefix = ''; + } + $s .= ""; + $rs->MoveNext(); + } + return $s."
Avg TimeCountSQLMaxMin
".adodb_round($rs->fields[0],6)."".$rs->fields[2]."".$prefix.htmlspecialchars($sql).$suffix."". + "".$rs->fields[3]."".$rs->fields[4]."
"; + + } + + function CheckMemory() + { + return ''; + } + + + function SuspiciousSQL($numsql=10) + { + return adodb_perf::_SuspiciousSQL($numsql); + } + + function ExpensiveSQL($numsql=10) + { + return adodb_perf::_ExpensiveSQL($numsql); + } + + + /* + This reports the percentage of load on the instance due to the most + expensive few SQL statements. Tuning these statements can often + make huge improvements in overall system performance. + */ + function _ExpensiveSQL($numsql = 10) + { + global $ADODB_FETCH_MODE; + + $perf_table = adodb_perf::table(); + $saveE = $this->conn->fnExecute; + $this->conn->fnExecute = false; + + if (isset($_GET['expe']) && isset($_GET['sql'])) { + $partial = !empty($_GET['part']); + echo "".$this->Explain($_GET['sql'],$partial)."\n"; + } + + if (isset($_GET['sql'])) return; + + $sql1 = $this->sql1; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->SelectLimit( + "select sum(timer) as total,$sql1,count(*),max(timer) as max_timer,min(timer) as min_timer + from $perf_table + where {$this->conn->upperCase}({$this->conn->substr}(sql0,1,5)) not in ('DROP ','INSER','COMMI','CREAT') + and (tracer is null or tracer not like 'ERROR:%') + group by sql1 + having count(*)>1 + order by 1 desc",$numsql); + if (isset($savem)) $this->conn->SetFetchMode($savem); + $this->conn->fnExecute = $saveE; + $ADODB_FETCH_MODE = $save; + if (!$rs) return "

$this->helpurl. ".$this->conn->ErrorMsg()."

"; + $s = "

Expensive SQL

+Tuning the following SQL could reduce the server load substantially
+\n"; + $max = $this->maxLength; + while (!$rs->EOF) { + $sql = $rs->fields[1]; + $raw = urlencode($sql); + if (strlen($raw)>$max-100) { + $sql2 = substr($sql,0,$max-500); + $raw = urlencode($sql2).'&part='.crc32($sql); + } + $prefix = ""; + $suffix = ""; + if($this->explain == false || strlen($prefix>$max)) { + $prefix = ''; + $suffix = ''; + } + $s .= ""; + $rs->MoveNext(); + } + return $s."
LoadCountSQLMaxMin
".adodb_round($rs->fields[0],6)."".$rs->fields[2]."".$prefix.htmlspecialchars($sql).$suffix."". + "".$rs->fields[3]."".$rs->fields[4]."
"; + } + + /* + Raw function to return parameter value from $settings. + */ + function DBParameter($param) + { + if (empty($this->settings[$param])) return false; + $sql = $this->settings[$param][1]; + return $this->_DBParameter($sql); + } + + /* + Raw function returning array of poll paramters + */ + function PollParameters() + { + $arr[0] = (float)$this->DBParameter('data cache hit ratio'); + $arr[1] = (float)$this->DBParameter('data reads'); + $arr[2] = (float)$this->DBParameter('data writes'); + $arr[3] = (integer) $this->DBParameter('current connections'); + return $arr; + } + + /* + Low-level Get Database Parameter + */ + function _DBParameter($sql) + { + $savelog = $this->conn->LogSQL(false); + if (is_array($sql)) { + global $ADODB_FETCH_MODE; + + $sql1 = $sql[0]; + $key = $sql[1]; + if (sizeof($sql)>2) $pos = $sql[2]; + else $pos = 1; + if (sizeof($sql)>3) $coef = $sql[3]; + else $coef = false; + $ret = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->Execute($sql1); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if ($rs) { + while (!$rs->EOF) { + $keyf = reset($rs->fields); + if (trim($keyf) == $key) { + $ret = $rs->fields[$pos]; + if ($coef) $ret *= $coef; + break; + } + $rs->MoveNext(); + } + $rs->Close(); + } + $this->conn->LogSQL($savelog); + return $ret; + } else { + if (strncmp($sql,'=',1) == 0) { + $fn = substr($sql,1); + return $this->$fn(); + } + $sql = str_replace('$DATABASE',$this->conn->database,$sql); + $ret = $this->conn->GetOne($sql); + $this->conn->LogSQL($savelog); + + return $ret; + } + } + + /* + Warn if cache ratio falls below threshold. Displayed in "Description" column. + */ + function WarnCacheRatio($val) + { + if ($val < $this->warnRatio) + return 'Cache ratio should be at least '.$this->warnRatio.'%'; + else return ''; + } + + function clearsql() + { + $perf_table = adodb_perf::table(); + $this->conn->Execute("delete from $perf_table where created<".$this->conn->sysTimeStamp); + } + /***********************************************************************************************/ + // HIGH LEVEL UI FUNCTIONS + /***********************************************************************************************/ + + + function UI($pollsecs=5) + { + global $ADODB_LOG_CONN; + + $perf_table = adodb_perf::table(); + $conn = $this->conn; + + $app = $conn->host; + if ($conn->host && $conn->database) $app .= ', db='; + $app .= $conn->database; + + if ($app) $app .= ', '; + $savelog = $this->conn->LogSQL(false); + $info = $conn->ServerInfo(); + if (isset($_GET['clearsql'])) { + $this->clearsql(); + } + $this->conn->LogSQL($savelog); + + // magic quotes + + if (isset($_GET['sql']) && get_magic_quotes_gpc()) { + $_GET['sql'] = $_GET['sql'] = str_replace(array("\\'",'\"'),array("'",'"'),$_GET['sql']); + } + + if (!isset($_SESSION['ADODB_PERF_SQL'])) $nsql = $_SESSION['ADODB_PERF_SQL'] = 10; + else $nsql = $_SESSION['ADODB_PERF_SQL']; + + $app .= $info['description']; + + + if (isset($_GET['do'])) $do = $_GET['do']; + else if (isset($_POST['do'])) $do = $_POST['do']; + else if (isset($_GET['sql'])) $do = 'viewsql'; + else $do = 'stats'; + + if (isset($_GET['nsql'])) { + if ($_GET['nsql'] > 0) $nsql = $_SESSION['ADODB_PERF_SQL'] = (integer) $_GET['nsql']; + } + echo "ADOdb Performance Monitor on $app"; + if ($do == 'viewsql') $form = "
# SQL:
"; + else $form = " "; + + $allowsql = !defined('ADODB_PERF_NO_RUN_SQL'); + global $ADODB_PERF_MIN; + $app .= " (Min sql timing \$ADODB_PERF_MIN=$ADODB_PERF_MIN secs)"; + + if (empty($_GET['hidem'])) + echo "
+ ADOdb Performance Monitor for $app
+ Performance Stats   View SQL +   View Tables   Poll Stats", + $allowsql ? '   Run SQL' : '', + "$form", + "
"; + + + switch ($do) { + default: + case 'stats': + if (empty($ADODB_LOG_CONN)) + echo "

  Clear SQL Log
"; + echo $this->HealthCheck(); + //$this->conn->debug=1; + echo $this->CheckMemory(); + break; + case 'poll': + $self = htmlspecialchars($_SERVER['PHP_SELF']); + echo ""; + break; + case 'poll2': + echo "

";
+			$this->Poll($pollsecs);
+			break;
+
+		case 'dosql':
+			if (!$allowsql) break;
+
+			$this->DoSQLForm();
+			break;
+		case 'viewsql':
+			if (empty($_GET['hidem']))
+				echo "  Clear SQL Log
"; + echo($this->SuspiciousSQL($nsql)); + echo($this->ExpensiveSQL($nsql)); + echo($this->InvalidSQL($nsql)); + break; + case 'tables': + echo $this->Tables(); break; + } + global $ADODB_vers; + echo "

$ADODB_vers Sponsored by phpLens
"; + } + + /* + Runs in infinite loop, returning real-time statistics + */ + function Poll($secs=5) + { + $this->conn->fnExecute = false; + //$this->conn->debug=1; + if ($secs <= 1) $secs = 1; + echo "Accumulating statistics, every $secs seconds...\n";flush(); + $arro = $this->PollParameters(); + $cnt = 0; + set_time_limit(0); + sleep($secs); + while (1) { + + $arr = $this->PollParameters(); + + $hits = sprintf('%2.2f',$arr[0]); + $reads = sprintf('%12.4f',($arr[1]-$arro[1])/$secs); + $writes = sprintf('%12.4f',($arr[2]-$arro[2])/$secs); + $sess = sprintf('%5d',$arr[3]); + + $load = $this->CPULoad(); + if ($load !== false) { + $oslabel = 'WS-CPU%'; + $osval = sprintf(" %2.1f ",(float) $load); + }else { + $oslabel = ''; + $osval = ''; + } + if ($cnt % 10 == 0) echo " Time ".$oslabel." Hit% Sess Reads/s Writes/s\n"; + $cnt += 1; + echo date('H:i:s').' '.$osval."$hits $sess $reads $writes\n"; + flush(); + + if (connection_aborted()) return; + + sleep($secs); + $arro = $arr; + } + } + + /* + Returns basic health check in a command line interface + */ + function HealthCheckCLI() + { + return $this->HealthCheck(true); + } + + + /* + Returns basic health check as HTML + */ + function HealthCheck($cli=false) + { + $saveE = $this->conn->fnExecute; + $this->conn->fnExecute = false; + if ($cli) $html = ''; + else $html = $this->table.'

'.$this->conn->databaseType.'

'.$this->titles; + + $oldc = false; + $bgc = ''; + foreach($this->settings as $name => $arr) { + if ($arr === false) break; + + if (!is_string($name)) { + if ($cli) $html .= " -- $arr -- \n"; + else $html .= "color>$arr  "; + continue; + } + + if (!is_array($arr)) break; + $category = $arr[0]; + $how = $arr[1]; + if (sizeof($arr)>2) $desc = $arr[2]; + else $desc = '   '; + + + if ($category == 'HIDE') continue; + + $val = $this->_DBParameter($how); + + if ($desc && strncmp($desc,"=",1) === 0) { + $fn = substr($desc,1); + $desc = $this->$fn($val); + } + + if ($val === false) { + $m = $this->conn->ErrorMsg(); + $val = "Error: $m"; + } else { + if (is_numeric($val) && $val >= 256*1024) { + if ($val % (1024*1024) == 0) { + $val /= (1024*1024); + $val .= 'M'; + } else if ($val % 1024 == 0) { + $val /= 1024; + $val .= 'K'; + } + //$val = htmlspecialchars($val); + } + } + if ($category != $oldc) { + $oldc = $category; + //$bgc = ($bgc == ' bgcolor='.$this->color) ? ' bgcolor=white' : ' bgcolor='.$this->color; + } + if (strlen($desc)==0) $desc = ' '; + if (strlen($val)==0) $val = ' '; + if ($cli) { + $html .= str_replace(' ','',sprintf($this->cliFormat,strip_tags($name),strip_tags($val),strip_tags($desc))); + + }else { + $html .= "".$name.''.$val.''.$desc."\n"; + } + } + + if (!$cli) $html .= "\n"; + $this->conn->fnExecute = $saveE; + + return $html; + } + + function Tables($orderby='1') + { + if (!$this->tablesSQL) return false; + + $savelog = $this->conn->LogSQL(false); + $rs = $this->conn->Execute($this->tablesSQL.' order by '.$orderby); + $this->conn->LogSQL($savelog); + $html = rs2html($rs,false,false,false,false); + return $html; + } + + + function CreateLogTable() + { + if (!$this->createTableSQL) return false; + + $table = $this->table(); + $sql = str_replace('adodb_logsql',$table,$this->createTableSQL); + $savelog = $this->conn->LogSQL(false); + $ok = $this->conn->Execute($sql); + $this->conn->LogSQL($savelog); + return ($ok) ? true : false; + } + + function DoSQLForm() + { + + + $PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF']); + $sql = isset($_REQUEST['sql']) ? $_REQUEST['sql'] : ''; + + if (isset($_SESSION['phplens_sqlrows'])) $rows = $_SESSION['phplens_sqlrows']; + else $rows = 3; + + if (isset($_REQUEST['SMALLER'])) { + $rows /= 2; + if ($rows < 3) $rows = 3; + $_SESSION['phplens_sqlrows'] = $rows; + } + if (isset($_REQUEST['BIGGER'])) { + $rows *= 2; + $_SESSION['phplens_sqlrows'] = $rows; + } + +?> + +
+ + + + + + +
Form size: + + +
+
+
+ +undomq(trim($sql)); + if (substr($sql,strlen($sql)-1) === ';') { + $print = true; + $sqla = $this->SplitSQL($sql); + } else { + $print = false; + $sqla = array($sql); + } + foreach($sqla as $sqls) { + + if (!$sqls) continue; + + if ($print) { + print "

".htmlspecialchars($sqls)."

"; + flush(); + } + $savelog = $this->conn->LogSQL(false); + $rs = $this->conn->Execute($sqls); + $this->conn->LogSQL($savelog); + if ($rs && is_object($rs) && !$rs->EOF) { + rs2html($rs); + while ($rs->NextRecordSet()) { + print "
 
"; + rs2html($rs); + } + } else { + $e1 = (integer) $this->conn->ErrorNo(); + $e2 = $this->conn->ErrorMsg(); + if (($e1) || ($e2)) { + if (empty($e1)) $e1 = '-1'; // postgresql fix + print '   '.$e1.': '.$e2; + } else { + print "

No Recordset returned

"; + } + } + } // foreach + } + + function SplitSQL($sql) + { + $arr = explode(';',$sql); + return $arr; + } + + function undomq($m) + { + if (get_magic_quotes_gpc()) { + // undo the damage + $m = str_replace('\\\\','\\',$m); + $m = str_replace('\"','"',$m); + $m = str_replace('\\\'','\'',$m); + } + return $m; +} + + + /************************************************************************/ + + /** + * Reorganise multiple table-indices/statistics/.. + * OptimizeMode could be given by last Parameter + * + * @example + *
+     *          optimizeTables( 'tableA');
+     *      
+ *
+     *          optimizeTables( 'tableA', 'tableB', 'tableC');
+     *      
+ *
+     *          optimizeTables( 'tableA', 'tableB', ADODB_OPT_LOW);
+     *      
+ * + * @param string table name of the table to optimize + * @param int mode optimization-mode + * ADODB_OPT_HIGH for full optimization + * ADODB_OPT_LOW for CPU-less optimization + * Default is LOW ADODB_OPT_LOW + * @author Markus Staab + * @return Returns true on success and false on error + */ + function OptimizeTables() + { + $args = func_get_args(); + $numArgs = func_num_args(); + + if ( $numArgs == 0) return false; + + $mode = ADODB_OPT_LOW; + $lastArg = $args[ $numArgs - 1]; + if ( !is_string($lastArg)) { + $mode = $lastArg; + unset( $args[ $numArgs - 1]); + } + + foreach( $args as $table) { + $this->optimizeTable( $table, $mode); + } + } + + /** + * Reorganise the table-indices/statistics/.. depending on the given mode. + * Default Implementation throws an error. + * + * @param string table name of the table to optimize + * @param int mode optimization-mode + * ADODB_OPT_HIGH for full optimization + * ADODB_OPT_LOW for CPU-less optimization + * Default is LOW ADODB_OPT_LOW + * @author Markus Staab + * @return Returns true on success and false on error + */ + function OptimizeTable( $table, $mode = ADODB_OPT_LOW) + { + ADOConnection::outp( sprintf( "

%s: '%s' not implemented for driver '%s'

", __CLASS__, __FUNCTION__, $this->conn->databaseType)); + return false; + } + + /** + * Reorganise current database. + * Default implementation loops over all MetaTables() and + * optimize each using optmizeTable() + * + * @author Markus Staab + * @return Returns true on success and false on error + */ + function optimizeDatabase() + { + $conn = $this->conn; + if ( !$conn) return false; + + $tables = $conn->MetaTables( 'TABLES'); + if ( !$tables ) return false; + + foreach( $tables as $table) { + if ( !$this->optimizeTable( $table)) { + return false; + } + } + + return true; + } + // end hack +} diff --git a/ehcp/adodb5/adodb-php4.inc.php b/ehcp/adodb5/adodb-php4.inc.php new file mode 100644 index 0000000..de255b7 --- /dev/null +++ b/ehcp/adodb5/adodb-php4.inc.php @@ -0,0 +1,16 @@ + 4 digit year conversion. The maximum is billions of years in the +future, but this is a theoretical limit as the computation of that year +would take too long with the current implementation of adodb_mktime(). + +This library replaces native functions as follows: + +
+	getdate()  with  adodb_getdate()
+	date()     with  adodb_date()
+	gmdate()   with  adodb_gmdate()
+	mktime()   with  adodb_mktime()
+	gmmktime() with  adodb_gmmktime()
+	strftime() with  adodb_strftime()
+	strftime() with  adodb_gmstrftime()
+
+ +The parameters are identical, except that adodb_date() accepts a subset +of date()'s field formats. Mktime() will convert from local time to GMT, +and date() will convert from GMT to local time, but daylight savings is +not handled currently. + +This library is independant of the rest of ADOdb, and can be used +as standalone code. + +PERFORMANCE + +For high speed, this library uses the native date functions where +possible, and only switches to PHP code when the dates fall outside +the 32-bit signed integer range. + +GREGORIAN CORRECTION + +Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, +October 4, 1582 (Julian) was followed immediately by Friday, October 15, +1582 (Gregorian). + +Since 0.06, we handle this correctly, so: + +adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) + == 24 * 3600 (1 day) + +============================================================================= + +COPYRIGHT + +(c) 2003-2014 John Lim and released under BSD-style license except for code by +jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year +and originally found at http://www.php.net/manual/en/function.mktime.php + +============================================================================= + +BUG REPORTS + +These should be posted to the ADOdb forums at + + http://phplens.com/lens/lensforum/topics.php?id=4 + +============================================================================= + +FUNCTION DESCRIPTIONS + +** FUNCTION adodb_time() + +Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) as an unsigned integer. + +** FUNCTION adodb_getdate($date=false) + +Returns an array containing date information, as getdate(), but supports +dates greater than 1901 to 2038. The local date/time format is derived from a +heuristic the first time adodb_getdate is called. + + +** FUNCTION adodb_date($fmt, $timestamp = false) + +Convert a timestamp to a formatted local date. If $timestamp is not defined, the +current timestamp is used. Unlike the function date(), it supports dates +outside the 1901 to 2038 range. + +The format fields that adodb_date supports: + +
+	a - "am" or "pm"
+	A - "AM" or "PM"
+	d - day of the month, 2 digits with leading zeros; i.e. "01" to "31"
+	D - day of the week, textual, 3 letters; e.g. "Fri"
+	F - month, textual, long; e.g. "January"
+	g - hour, 12-hour format without leading zeros; i.e. "1" to "12"
+	G - hour, 24-hour format without leading zeros; i.e. "0" to "23"
+	h - hour, 12-hour format; i.e. "01" to "12"
+	H - hour, 24-hour format; i.e. "00" to "23"
+	i - minutes; i.e. "00" to "59"
+	j - day of the month without leading zeros; i.e. "1" to "31"
+	l (lowercase 'L') - day of the week, textual, long; e.g. "Friday"
+	L - boolean for whether it is a leap year; i.e. "0" or "1"
+	m - month; i.e. "01" to "12"
+	M - month, textual, 3 letters; e.g. "Jan"
+	n - month without leading zeros; i.e. "1" to "12"
+	O - Difference to Greenwich time in hours; e.g. "+0200"
+	Q - Quarter, as in 1, 2, 3, 4
+	r - RFC 2822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200"
+	s - seconds; i.e. "00" to "59"
+	S - English ordinal suffix for the day of the month, 2 characters;
+	   			i.e. "st", "nd", "rd" or "th"
+	t - number of days in the given month; i.e. "28" to "31"
+	T - Timezone setting of this machine; e.g. "EST" or "MDT"
+	U - seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
+	w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday)
+	Y - year, 4 digits; e.g. "1999"
+	y - year, 2 digits; e.g. "99"
+	z - day of the year; i.e. "0" to "365"
+	Z - timezone offset in seconds (i.e. "-43200" to "43200").
+	   			The offset for timezones west of UTC is always negative,
+				and for those east of UTC is always positive.
+
+ +Unsupported: +
+	B - Swatch Internet time
+	I (capital i) - "1" if Daylight Savings Time, "0" otherwise.
+	W - ISO-8601 week number of year, weeks starting on Monday
+
+
+ + +** FUNCTION adodb_date2($fmt, $isoDateString = false) +Same as adodb_date, but 2nd parameter accepts iso date, eg. + + adodb_date2('d-M-Y H:i','2003-12-25 13:01:34'); + + +** FUNCTION adodb_gmdate($fmt, $timestamp = false) + +Convert a timestamp to a formatted GMT date. If $timestamp is not defined, the +current timestamp is used. Unlike the function date(), it supports dates +outside the 1901 to 2038 range. + + +** FUNCTION adodb_mktime($hr, $min, $sec[, $month, $day, $year]) + +Converts a local date to a unix timestamp. Unlike the function mktime(), it supports +dates outside the 1901 to 2038 range. All parameters are optional. + + +** FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year]) + +Converts a gmt date to a unix timestamp. Unlike the function gmmktime(), it supports +dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters +are currently compulsory. + +** FUNCTION adodb_gmstrftime($fmt, $timestamp = false) +Convert a timestamp to a formatted GMT date. + +** FUNCTION adodb_strftime($fmt, $timestamp = false) + +Convert a timestamp to a formatted local date. Internally converts $fmt into +adodb_date format, then echo result. + +For best results, you can define the local date format yourself. Define a global +variable $ADODB_DATE_LOCALE which is an array, 1st element is date format using +adodb_date syntax, and 2nd element is the time format, also in adodb_date syntax. + + eg. $ADODB_DATE_LOCALE = array('d/m/Y','H:i:s'); + + Supported format codes: + +
+	%a - abbreviated weekday name according to the current locale
+	%A - full weekday name according to the current locale
+	%b - abbreviated month name according to the current locale
+	%B - full month name according to the current locale
+	%c - preferred date and time representation for the current locale
+	%d - day of the month as a decimal number (range 01 to 31)
+	%D - same as %m/%d/%y
+	%e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')
+	%h - same as %b
+	%H - hour as a decimal number using a 24-hour clock (range 00 to 23)
+	%I - hour as a decimal number using a 12-hour clock (range 01 to 12)
+	%m - month as a decimal number (range 01 to 12)
+	%M - minute as a decimal number
+	%n - newline character
+	%p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale
+	%r - time in a.m. and p.m. notation
+	%R - time in 24 hour notation
+	%S - second as a decimal number
+	%t - tab character
+	%T - current time, equal to %H:%M:%S
+	%x - preferred date representation for the current locale without the time
+	%X - preferred time representation for the current locale without the date
+	%y - year as a decimal number without a century (range 00 to 99)
+	%Y - year as a decimal number including the century
+	%Z - time zone or name or abbreviation
+	%% - a literal `%' character
+
+ + Unsupported codes: +
+	%C - century number (the year divided by 100 and truncated to an integer, range 00 to 99)
+	%g - like %G, but without the century.
+	%G - The 4-digit year corresponding to the ISO week number (see %V).
+	     This has the same format and value as %Y, except that if the ISO week number belongs
+		 to the previous or next year, that year is used instead.
+	%j - day of the year as a decimal number (range 001 to 366)
+	%u - weekday as a decimal number [1,7], with 1 representing Monday
+	%U - week number of the current year as a decimal number, starting
+	    with the first Sunday as the first day of the first week
+	%V - The ISO 8601:1988 week number of the current year as a decimal number,
+	     range 01 to 53, where week 1 is the first week that has at least 4 days in the
+		 current year, and with Monday as the first day of the week. (Use %G or %g for
+		 the year component that corresponds to the week number for the specified timestamp.)
+	%w - day of the week as a decimal, Sunday being 0
+	%W - week number of the current year as a decimal number, starting with the
+	     first Monday as the first day of the first week
+
+ +============================================================================= + +NOTES + +Useful url for generating test timestamps: + http://www.4webhelp.net/us/timestamp.php + +Possible future optimizations include + +a. Using an algorithm similar to Plauger's in "The Standard C Library" +(page 428, xttotm.c _Ttotm() function). Plauger's algorithm will not +work outside 32-bit signed range, so i decided not to implement it. + +b. Implement daylight savings, which looks awfully complicated, see + http://webexhibits.org/daylightsaving/ + + +CHANGELOG +- 16 Jan 2011 0.36 +Added adodb_time() which returns current time. If > 2038, will return as float + +- 7 Feb 2011 0.35 +Changed adodb_date to be symmetric with adodb_mktime. See $jan1_71. fix for bc. + +- 13 July 2010 0.34 +Changed adodb_get_gm_diff to use DateTimeZone(). + +- 11 Feb 2008 0.33 +* Bug in 0.32 fix for hour handling. Fixed. + +- 1 Feb 2008 0.32 +* Now adodb_mktime(0,0,0,12+$m,20,2040) works properly. + +- 10 Jan 2008 0.31 +* Now adodb_mktime(0,0,0,24,1,2037) works correctly. + +- 15 July 2007 0.30 +Added PHP 5.2.0 compatability fixes. + * gmtime behaviour for 1970 has changed. We use the actual date if it is between 1970 to 2038 to get the + * timezone, otherwise we use the current year as the baseline to retrieve the timezone. + * Also the timezone's in php 5.2.* support historical data better, eg. if timezone today was +8, but + in 1970 it was +7:30, then php 5.2 return +7:30, while this library will use +8. + * + +- 19 March 2006 0.24 +Changed strftime() locale detection, because some locales prepend the day of week to the date when %c is used. + +- 10 Feb 2006 0.23 +PHP5 compat: when we detect PHP5, the RFC2822 format for gmt 0000hrs is changed from -0000 to +0000. + In PHP4, we will still use -0000 for 100% compat with PHP4. + +- 08 Sept 2005 0.22 +In adodb_date2(), $is_gmt not supported properly. Fixed. + +- 18 July 2005 0.21 +In PHP 4.3.11, the 'r' format has changed. Leading 0 in day is added. Changed for compat. +Added support for negative months in adodb_mktime(). + +- 24 Feb 2005 0.20 +Added limited strftime/gmstrftime support. x10 improvement in performance of adodb_date(). + +- 21 Dec 2004 0.17 +In adodb_getdate(), the timestamp was accidentally converted to gmt when $is_gmt is false. +Also adodb_mktime(0,0,0) did not work properly. Both fixed thx Mauro. + +- 17 Nov 2004 0.16 +Removed intval typecast in adodb_mktime() for secs, allowing: + adodb_mktime(0,0,0 + 2236672153,1,1,1934); +Suggested by Ryan. + +- 18 July 2004 0.15 +All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. +This brings it more in line with mktime (still not identical). + +- 23 June 2004 0.14 + +Allow you to define your own daylights savings function, adodb_daylight_sv. +If the function is defined (somewhere in an include), then you can correct for daylights savings. + +In this example, we apply daylights savings in June or July, adding one hour. This is extremely +unrealistic as it does not take into account time-zone, geographic location, current year. + +function adodb_daylight_sv(&$arr, $is_gmt) +{ + if ($is_gmt) return; + $m = $arr['mon']; + if ($m == 6 || $m == 7) $arr['hours'] += 1; +} + +This is only called by adodb_date() and not by adodb_mktime(). + +The format of $arr is +Array ( + [seconds] => 0 + [minutes] => 0 + [hours] => 0 + [mday] => 1 # day of month, eg 1st day of the month + [mon] => 2 # month (eg. Feb) + [year] => 2102 + [yday] => 31 # days in current year + [leap] => # true if leap year + [ndays] => 28 # no of days in current month + ) + + +- 28 Apr 2004 0.13 +Fixed adodb_date to properly support $is_gmt. Thx to Dimitar Angelov. + +- 20 Mar 2004 0.12 +Fixed month calculation error in adodb_date. 2102-June-01 appeared as 2102-May-32. + +- 26 Oct 2003 0.11 +Because of daylight savings problems (some systems apply daylight savings to +January!!!), changed adodb_get_gmt_diff() to ignore daylight savings. + +- 9 Aug 2003 0.10 +Fixed bug with dates after 2038. +See http://phplens.com/lens/lensforum/msgs.php?id=6980 + +- 1 July 2003 0.09 +Added support for Q (Quarter). +Added adodb_date2(), which accepts ISO date in 2nd param + +- 3 March 2003 0.08 +Added support for 'S' adodb_date() format char. Added constant ADODB_ALLOW_NEGATIVE_TS +if you want PHP to handle negative timestamps between 1901 to 1969. + +- 27 Feb 2003 0.07 +All negative numbers handled by adodb now because of RH 7.3+ problems. +See http://bugs.php.net/bug.php?id=20048&edit=2 + +- 4 Feb 2003 0.06 +Fixed a typo, 1852 changed to 1582! This means that pre-1852 dates +are now correctly handled. + +- 29 Jan 2003 0.05 + +Leap year checking differs under Julian calendar (pre 1582). Also +leap year code optimized by checking for most common case first. + +We also handle month overflow correctly in mktime (eg month set to 13). + +Day overflow for less than one month's days is supported. + +- 28 Jan 2003 0.04 + +Gregorian correction handled. In PHP5, we might throw an error if +mktime uses invalid dates around 5-14 Oct 1582. Released with ADOdb 3.10. +Added limbo 5-14 Oct 1582 check, when we set to 15 Oct 1582. + +- 27 Jan 2003 0.03 + +Fixed some more month problems due to gmt issues. Added constant ADODB_DATE_VERSION. +Fixed calculation of days since start of year for <1970. + +- 27 Jan 2003 0.02 + +Changed _adodb_getdate() to inline leap year checking for better performance. +Fixed problem with time-zones west of GMT +0000. + +- 24 Jan 2003 0.01 + +First implementation. +*/ + + +/* Initialization */ + +/* + Version Number +*/ +define('ADODB_DATE_VERSION',0.35); + +$ADODB_DATETIME_CLASS = (PHP_VERSION >= 5.2); + +/* + This code was originally for windows. But apparently this problem happens + also with Linux, RH 7.3 and later! + + glibc-2.2.5-34 and greater has been changed to return -1 for dates < + 1970. This used to work. The problem exists with RedHat 7.3 and 8.0 + echo (mktime(0, 0, 0, 1, 1, 1960)); // prints -1 + + References: + http://bugs.php.net/bug.php?id=20048&edit=2 + http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html +*/ + +if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1); + +function adodb_date_test_date($y1,$m,$d=13) +{ + $h = round(rand()% 24); + $t = adodb_mktime($h,0,0,$m,$d,$y1); + $rez = adodb_date('Y-n-j H:i:s',$t); + if ($h == 0) $h = '00'; + else if ($h < 10) $h = '0'.$h; + if ("$y1-$m-$d $h:00:00" != $rez) { + print "$y1 error, expected=$y1-$m-$d $h:00:00, adodb=$rez
"; + return false; + } + return true; +} + +function adodb_date_test_strftime($fmt) +{ + $s1 = strftime($fmt); + $s2 = adodb_strftime($fmt); + + if ($s1 == $s2) return true; + + echo "error for $fmt, strftime=$s1, adodb=$s2
"; + return false; +} + +/** + Test Suite +*/ +function adodb_date_test() +{ + + for ($m=-24; $m<=24; $m++) + echo "$m :",adodb_date('d-m-Y',adodb_mktime(0,0,0,1+$m,20,2040)),"
"; + + error_reporting(E_ALL); + print "

Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION.' PHP='.PHP_VERSION."

"; + @set_time_limit(0); + $fail = false; + + // This flag disables calling of PHP native functions, so we can properly test the code + if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1); + + $t = time(); + + + $fmt = 'Y-m-d H:i:s'; + echo '
';
+	echo 'adodb: ',adodb_date($fmt,$t),'
'; + echo 'php : ',date($fmt,$t),'
'; + echo '
'; + + adodb_date_test_strftime('%Y %m %x %X'); + adodb_date_test_strftime("%A %d %B %Y"); + adodb_date_test_strftime("%H %M S"); + + $t = adodb_mktime(0,0,0); + if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'
'; + + $t = adodb_mktime(0,0,0,6,1,2102); + if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'
'; + + $t = adodb_mktime(0,0,0,2,1,2102); + if (!(adodb_date('Y-m-d',$t) == '2102-02-01')) print 'Error in '.adodb_date('Y-m-d',$t).'
'; + + + print "

Testing gregorian <=> julian conversion

"; + $t = adodb_mktime(0,0,0,10,11,1492); + //http://www.holidayorigins.com/html/columbus_day.html - Friday check + if (!(adodb_date('D Y-m-d',$t) == 'Fri 1492-10-11')) print 'Error in Columbus landing
'; + + $t = adodb_mktime(0,0,0,2,29,1500); + if (!(adodb_date('Y-m-d',$t) == '1500-02-29')) print 'Error in julian leap years
'; + + $t = adodb_mktime(0,0,0,2,29,1700); + if (!(adodb_date('Y-m-d',$t) == '1700-03-01')) print 'Error in gregorian leap years
'; + + print adodb_mktime(0,0,0,10,4,1582).' '; + print adodb_mktime(0,0,0,10,15,1582); + $diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582)); + if ($diff != 3600*24) print " Error in gregorian correction = ".($diff/3600/24)." days
"; + + print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : 'Error')."
"; + print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : 'Error')."
"; + + print "

Testing overflow

"; + + $t = adodb_mktime(0,0,0,3,33,1965); + if (!(adodb_date('Y-m-d',$t) == '1965-04-02')) print 'Error in day overflow 1
'; + $t = adodb_mktime(0,0,0,4,33,1971); + if (!(adodb_date('Y-m-d',$t) == '1971-05-03')) print 'Error in day overflow 2
'; + $t = adodb_mktime(0,0,0,1,60,1965); + if (!(adodb_date('Y-m-d',$t) == '1965-03-01')) print 'Error in day overflow 3 '.adodb_date('Y-m-d',$t).'
'; + $t = adodb_mktime(0,0,0,12,32,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-01-01')) print 'Error in day overflow 4 '.adodb_date('Y-m-d',$t).'
'; + $t = adodb_mktime(0,0,0,12,63,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-02-01')) print 'Error in day overflow 5 '.adodb_date('Y-m-d',$t).'
'; + $t = adodb_mktime(0,0,0,13,3,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-01-03')) print 'Error in mth overflow 1
'; + + print "Testing 2-digit => 4-digit year conversion

"; + if (adodb_year_digit_check(00) != 2000) print "Err 2-digit 2000
"; + if (adodb_year_digit_check(10) != 2010) print "Err 2-digit 2010
"; + if (adodb_year_digit_check(20) != 2020) print "Err 2-digit 2020
"; + if (adodb_year_digit_check(30) != 2030) print "Err 2-digit 2030
"; + if (adodb_year_digit_check(40) != 1940) print "Err 2-digit 1940
"; + if (adodb_year_digit_check(50) != 1950) print "Err 2-digit 1950
"; + if (adodb_year_digit_check(90) != 1990) print "Err 2-digit 1990
"; + + // Test string formating + print "

Testing date formating

"; + + $fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C2822 r s t U w y Y z Z 2003'; + $s1 = date($fmt,0); + $s2 = adodb_date($fmt,0); + if ($s1 != $s2) { + print " date() 0 failed
$s1
$s2
"; + } + flush(); + for ($i=100; --$i > 0; ) { + + $ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000); + $s1 = date($fmt,$ts); + $s2 = adodb_date($fmt,$ts); + //print "$s1
$s2

"; + $pos = strcmp($s1,$s2); + + if (($s1) != ($s2)) { + for ($j=0,$k=strlen($s1); $j < $k; $j++) { + if ($s1[$j] != $s2[$j]) { + print substr($s1,$j).' '; + break; + } + } + print "Error date(): $ts

+  \"$s1\" (date len=".strlen($s1).")
+  \"$s2\" (adodb_date len=".strlen($s2).")

"; + $fail = true; + } + + $a1 = getdate($ts); + $a2 = adodb_getdate($ts); + $rez = array_diff($a1,$a2); + if (sizeof($rez)>0) { + print "Error getdate() $ts
"; + print_r($a1); + print "
"; + print_r($a2); + print "

"; + $fail = true; + } + } + + // Test generation of dates outside 1901-2038 + print "

Testing random dates between 100 and 4000

"; + adodb_date_test_date(100,1); + for ($i=100; --$i >= 0;) { + $y1 = 100+rand(0,1970-100); + $m = rand(1,12); + adodb_date_test_date($y1,$m); + + $y1 = 3000-rand(0,3000-1970); + adodb_date_test_date($y1,$m); + } + print '

'; + $start = 1960+rand(0,10); + $yrs = 12; + $i = 365.25*86400*($start-1970); + $offset = 36000+rand(10000,60000); + $max = 365*$yrs*86400; + $lastyear = 0; + + // we generate a timestamp, convert it to a date, and convert it back to a timestamp + // and check if the roundtrip broke the original timestamp value. + print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: "; + $cnt = 0; + for ($max += $i; $i < $max; $i += $offset) { + $ret = adodb_date('m,d,Y,H,i,s',$i); + $arr = explode(',',$ret); + if ($lastyear != $arr[2]) { + $lastyear = $arr[2]; + print " $lastyear "; + flush(); + } + $newi = adodb_mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]); + if ($i != $newi) { + print "Error at $i, adodb_mktime returned $newi ($ret)"; + $fail = true; + break; + } + $cnt += 1; + } + echo "Tested $cnt dates
"; + if (!$fail) print "

Passed !

"; + else print "

Failed :-(

"; +} + +function adodb_time() +{ + $d = new DateTime(); + return $d->format('U'); +} + +/** + Returns day of week, 0 = Sunday,... 6=Saturday. + Algorithm from PEAR::Date_Calc +*/ +function adodb_dow($year, $month, $day) +{ +/* +Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and +proclaimed that from that time onwards 3 days would be dropped from the calendar +every 400 years. + +Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). +*/ + if ($year <= 1582) { + if ($year < 1582 || + ($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3; + else + $greg_correction = 0; + } else + $greg_correction = 0; + + if($month > 2) + $month -= 2; + else { + $month += 10; + $year--; + } + + $day = floor((13 * $month - 1) / 5) + + $day + ($year % 100) + + floor(($year % 100) / 4) + + floor(($year / 100) / 4) - 2 * + floor($year / 100) + 77 + $greg_correction; + + return $day - 7 * floor($day / 7); +} + + +/** + Checks for leap year, returns true if it is. No 2-digit year check. Also + handles julian calendar correctly. +*/ +function _adodb_is_leap_year($year) +{ + if ($year % 4 != 0) return false; + + if ($year % 400 == 0) { + return true; + // if gregorian calendar (>1582), century not-divisible by 400 is not leap + } else if ($year > 1582 && $year % 100 == 0 ) { + return false; + } + + return true; +} + + +/** + checks for leap year, returns true if it is. Has 2-digit year check +*/ +function adodb_is_leap_year($year) +{ + return _adodb_is_leap_year(adodb_year_digit_check($year)); +} + +/** + Fix 2-digit years. Works for any century. + Assumes that if 2-digit is more than 30 years in future, then previous century. +*/ +function adodb_year_digit_check($y) +{ + if ($y < 100) { + + $yr = (integer) date("Y"); + $century = (integer) ($yr /100); + + if ($yr%100 > 50) { + $c1 = $century + 1; + $c0 = $century; + } else { + $c1 = $century; + $c0 = $century - 1; + } + $c1 *= 100; + // if 2-digit year is less than 30 years in future, set it to this century + // otherwise if more than 30 years in future, then we set 2-digit year to the prev century. + if (($y + $c1) < $yr+30) $y = $y + $c1; + else $y = $y + $c0*100; + } + return $y; +} + +function adodb_get_gmt_diff_ts($ts) +{ + if (0 <= $ts && $ts <= 0x7FFFFFFF) { // check if number in 32-bit signed range) { + $arr = getdate($ts); + $y = $arr['year']; + $m = $arr['mon']; + $d = $arr['mday']; + return adodb_get_gmt_diff($y,$m,$d); + } else { + return adodb_get_gmt_diff(false,false,false); + } + +} + +/** + get local time zone offset from GMT. Does not handle historical timezones before 1970. +*/ +function adodb_get_gmt_diff($y,$m,$d) +{ +static $TZ,$tzo; +global $ADODB_DATETIME_CLASS; + + if (!defined('ADODB_TEST_DATES')) $y = false; + else if ($y < 1970 || $y >= 2038) $y = false; + + if ($ADODB_DATETIME_CLASS && $y !== false) { + $dt = new DateTime(); + $dt->setISODate($y,$m,$d); + if (empty($tzo)) { + $tzo = new DateTimeZone(date_default_timezone_get()); + # $tzt = timezone_transitions_get( $tzo ); + } + return -$tzo->getOffset($dt); + } else { + if (isset($TZ)) return $TZ; + $y = date('Y'); + /* + if (function_exists('date_default_timezone_get') && function_exists('timezone_offset_get')) { + $tzonename = date_default_timezone_get(); + if ($tzonename) { + $tobj = new DateTimeZone($tzonename); + $TZ = -timezone_offset_get($tobj,new DateTime("now",$tzo)); + } + } + */ + if (empty($TZ)) $TZ = mktime(0,0,0,12,2,$y) - gmmktime(0,0,0,12,2,$y); + } + return $TZ; +} + +/** + Returns an array with date info. +*/ +function adodb_getdate($d=false,$fast=false) +{ + if ($d === false) return getdate(); + if (!defined('ADODB_TEST_DATES')) { + if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer + return @getdate($d); + } + } + return _adodb_getdate($d); +} + +/* +// generate $YRS table for _adodb_getdate() +function adodb_date_gentable($out=true) +{ + + for ($i=1970; $i >= 1600; $i-=10) { + $s = adodb_gmmktime(0,0,0,1,1,$i); + echo "$i => $s,
"; + } +} +adodb_date_gentable(); + +for ($i=1970; $i > 1500; $i--) { + +echo "
$i "; + adodb_date_test_date($i,1,1); +} + +*/ + + +$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); +$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + +function adodb_validdate($y,$m,$d) +{ +global $_month_table_normal,$_month_table_leaf; + + if (_adodb_is_leap_year($y)) $marr = $_month_table_leaf; + else $marr = $_month_table_normal; + + if ($m > 12 || $m < 1) return false; + + if ($d > 31 || $d < 1) return false; + + if ($marr[$m] < $d) return false; + + if ($y < 1000 && $y > 3000) return false; + + return true; +} + +/** + Low-level function that returns the getdate() array. We have a special + $fast flag, which if set to true, will return fewer array values, + and is much faster as it does not calculate dow, etc. +*/ +function _adodb_getdate($origd=false,$fast=false,$is_gmt=false) +{ +static $YRS; +global $_month_table_normal,$_month_table_leaf; + + $d = $origd - ($is_gmt ? 0 : adodb_get_gmt_diff_ts($origd)); + $_day_power = 86400; + $_hour_power = 3600; + $_min_power = 60; + + if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction + + $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); + $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + + $d366 = $_day_power * 366; + $d365 = $_day_power * 365; + + if ($d < 0) { + + if (empty($YRS)) $YRS = array( + 1970 => 0, + 1960 => -315619200, + 1950 => -631152000, + 1940 => -946771200, + 1930 => -1262304000, + 1920 => -1577923200, + 1910 => -1893456000, + 1900 => -2208988800, + 1890 => -2524521600, + 1880 => -2840140800, + 1870 => -3155673600, + 1860 => -3471292800, + 1850 => -3786825600, + 1840 => -4102444800, + 1830 => -4417977600, + 1820 => -4733596800, + 1810 => -5049129600, + 1800 => -5364662400, + 1790 => -5680195200, + 1780 => -5995814400, + 1770 => -6311347200, + 1760 => -6626966400, + 1750 => -6942499200, + 1740 => -7258118400, + 1730 => -7573651200, + 1720 => -7889270400, + 1710 => -8204803200, + 1700 => -8520336000, + 1690 => -8835868800, + 1680 => -9151488000, + 1670 => -9467020800, + 1660 => -9782640000, + 1650 => -10098172800, + 1640 => -10413792000, + 1630 => -10729324800, + 1620 => -11044944000, + 1610 => -11360476800, + 1600 => -11676096000); + + if ($is_gmt) $origd = $d; + // The valid range of a 32bit signed timestamp is typically from + // Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT + // + + # old algorithm iterates through all years. new algorithm does it in + # 10 year blocks + + /* + # old algo + for ($a = 1970 ; --$a >= 0;) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d += $d366; + else $d += $d365; + + if ($d >= 0) { + $year = $a; + break; + } + } + */ + + $lastsecs = 0; + $lastyear = 1970; + foreach($YRS as $year => $secs) { + if ($d >= $secs) { + $a = $lastyear; + break; + } + $lastsecs = $secs; + $lastyear = $year; + } + + $d -= $lastsecs; + if (!isset($a)) $a = $lastyear; + + //echo ' yr=',$a,' ', $d,'.'; + + for (; --$a >= 0;) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d += $d366; + else $d += $d365; + + if ($d >= 0) { + $year = $a; + break; + } + } + /**/ + + $secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd; + + $d = $lastd; + $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; + for ($a = 13 ; --$a > 0;) { + $lastd = $d; + $d += $mtab[$a] * $_day_power; + if ($d >= 0) { + $month = $a; + $ndays = $mtab[$a]; + break; + } + } + + $d = $lastd; + $day = $ndays + ceil(($d+1) / ($_day_power)); + + $d += ($ndays - $day+1)* $_day_power; + $hour = floor($d/$_hour_power); + + } else { + for ($a = 1970 ;; $a++) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d -= $d366; + else $d -= $d365; + if ($d < 0) { + $year = $a; + break; + } + } + $secsInYear = $lastd; + $d = $lastd; + $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; + for ($a = 1 ; $a <= 12; $a++) { + $lastd = $d; + $d -= $mtab[$a] * $_day_power; + if ($d < 0) { + $month = $a; + $ndays = $mtab[$a]; + break; + } + } + $d = $lastd; + $day = ceil(($d+1) / $_day_power); + $d = $d - ($day-1) * $_day_power; + $hour = floor($d /$_hour_power); + } + + $d -= $hour * $_hour_power; + $min = floor($d/$_min_power); + $secs = $d - $min * $_min_power; + if ($fast) { + return array( + 'seconds' => $secs, + 'minutes' => $min, + 'hours' => $hour, + 'mday' => $day, + 'mon' => $month, + 'year' => $year, + 'yday' => floor($secsInYear/$_day_power), + 'leap' => $leaf, + 'ndays' => $ndays + ); + } + + + $dow = adodb_dow($year,$month,$day); + + return array( + 'seconds' => $secs, + 'minutes' => $min, + 'hours' => $hour, + 'mday' => $day, + 'wday' => $dow, + 'mon' => $month, + 'year' => $year, + 'yday' => floor($secsInYear/$_day_power), + 'weekday' => gmdate('l',$_day_power*(3+$dow)), + 'month' => gmdate('F',mktime(0,0,0,$month,2,1971)), + 0 => $origd + ); +} +/* + if ($isphp5) + $dates .= sprintf('%s%04d',($gmt<=0)?'+':'-',abs($gmt)/36); + else + $dates .= sprintf('%s%04d',($gmt<0)?'+':'-',abs($gmt)/36); + break;*/ +function adodb_tz_offset($gmt,$isphp5) +{ + $zhrs = abs($gmt)/3600; + $hrs = floor($zhrs); + if ($isphp5) + return sprintf('%s%02d%02d',($gmt<=0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); + else + return sprintf('%s%02d%02d',($gmt<0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); +} + + +function adodb_gmdate($fmt,$d=false) +{ + return adodb_date($fmt,$d,true); +} + +// accepts unix timestamp and iso date format in $d +function adodb_date2($fmt, $d=false, $is_gmt=false) +{ + if ($d !== false) { + if (!preg_match( + "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", + ($d), $rr)) return adodb_date($fmt,false,$is_gmt); + + if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt); + + // h-m-s-MM-DD-YY + if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1],false,$is_gmt); + else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1],false,$is_gmt); + } + + return adodb_date($fmt,$d,$is_gmt); +} + + +/** + Return formatted date based on timestamp $d +*/ +function adodb_date($fmt,$d=false,$is_gmt=false) +{ +static $daylight; +global $ADODB_DATETIME_CLASS; +static $jan1_1971; + + + if (!isset($daylight)) { + $daylight = function_exists('adodb_daylight_sv'); + if (empty($jan1_1971)) $jan1_1971 = mktime(0,0,0,1,1,1971); // we only use date() when > 1970 as adodb_mktime() only uses mktime() when > 1970 + } + + if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt); + if (!defined('ADODB_TEST_DATES')) { + if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + + if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= $jan1_1971) // if windows, must be +ve integer + return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d); + + } + } + $_day_power = 86400; + + $arr = _adodb_getdate($d,true,$is_gmt); + + if ($daylight) adodb_daylight_sv($arr, $is_gmt); + + $year = $arr['year']; + $month = $arr['mon']; + $day = $arr['mday']; + $hour = $arr['hours']; + $min = $arr['minutes']; + $secs = $arr['seconds']; + + $max = strlen($fmt); + $dates = ''; + + $isphp5 = PHP_VERSION >= 5; + + /* + at this point, we have the following integer vars to manipulate: + $year, $month, $day, $hour, $min, $secs + */ + for ($i=0; $i < $max; $i++) { + switch($fmt[$i]) { + case 'e': + $dates .= date('e'); + break; + case 'T': + if ($ADODB_DATETIME_CLASS) { + $dt = new DateTime(); + $dt->SetDate($year,$month,$day); + $dates .= $dt->Format('T'); + } else + $dates .= date('T'); + break; + // YEAR + case 'L': $dates .= $arr['leap'] ? '1' : '0'; break; + case 'r': // Thu, 21 Dec 2000 16:01:07 +0200 + + // 4.3.11 uses '04 Jun 2004' + // 4.3.8 uses ' 4 Jun 2004' + $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', ' + . ($day<10?'0'.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' '; + + if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; + + if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min; + + if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs; + + $gmt = adodb_get_gmt_diff($year,$month,$day); + + $dates .= ' '.adodb_tz_offset($gmt,$isphp5); + break; + + case 'Y': $dates .= $year; break; + case 'y': $dates .= substr($year,strlen($year)-2,2); break; + // MONTH + case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break; + case 'Q': $dates .= ($month+3)>>2; break; + case 'n': $dates .= $month; break; + case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break; + case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break; + // DAY + case 't': $dates .= $arr['ndays']; break; + case 'z': $dates .= $arr['yday']; break; + case 'w': $dates .= adodb_dow($year,$month,$day); break; + case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break; + case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break; + case 'j': $dates .= $day; break; + case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break; + case 'S': + $d10 = $day % 10; + if ($d10 == 1) $dates .= 'st'; + else if ($d10 == 2 && $day != 12) $dates .= 'nd'; + else if ($d10 == 3) $dates .= 'rd'; + else $dates .= 'th'; + break; + + // HOUR + case 'Z': + $dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff($year,$month,$day); break; + case 'O': + $gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$month,$day); + + $dates .= adodb_tz_offset($gmt,$isphp5); + break; + + case 'H': + if ($hour < 10) $dates .= '0'.$hour; + else $dates .= $hour; + break; + case 'h': + if ($hour > 12) $hh = $hour - 12; + else { + if ($hour == 0) $hh = '12'; + else $hh = $hour; + } + + if ($hh < 10) $dates .= '0'.$hh; + else $dates .= $hh; + break; + + case 'G': + $dates .= $hour; + break; + + case 'g': + if ($hour > 12) $hh = $hour - 12; + else { + if ($hour == 0) $hh = '12'; + else $hh = $hour; + } + $dates .= $hh; + break; + // MINUTES + case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break; + // SECONDS + case 'U': $dates .= $d; break; + case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break; + // AM/PM + // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM + case 'a': + if ($hour>=12) $dates .= 'pm'; + else $dates .= 'am'; + break; + case 'A': + if ($hour>=12) $dates .= 'PM'; + else $dates .= 'AM'; + break; + default: + $dates .= $fmt[$i]; break; + // ESCAPE + case "\\": + $i++; + if ($i < $max) $dates .= $fmt[$i]; + break; + } + } + return $dates; +} + +/** + Returns a timestamp given a GMT/UTC time. + Note that $is_dst is not implemented and is ignored. +*/ +function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false) +{ + return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true); +} + +/** + Return a timestamp given a local time. Originally by jackbbs. + Note that $is_dst is not implemented and is ignored. + + Not a very fast algorithm - O(n) operation. Could be optimized to O(1). +*/ +function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) +{ + if (!defined('ADODB_TEST_DATES')) { + + if ($mon === false) { + return $is_gmt? @gmmktime($hr,$min,$sec): @mktime($hr,$min,$sec); + } + + // for windows, we don't check 1970 because with timezone differences, + // 1 Jan 1970 could generate negative timestamp, which is illegal + $usephpfns = (1970 < $year && $year < 2038 + || !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038) + ); + + + if ($usephpfns && ($year + $mon/12+$day/365.25+$hr/(24*365.25) >= 2038)) $usephpfns = false; + + if ($usephpfns) { + return $is_gmt ? + @gmmktime($hr,$min,$sec,$mon,$day,$year): + @mktime($hr,$min,$sec,$mon,$day,$year); + } + } + + $gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$mon,$day); + + /* + # disabled because some people place large values in $sec. + # however we need it for $mon because we use an array... + $hr = intval($hr); + $min = intval($min); + $sec = intval($sec); + */ + $mon = intval($mon); + $day = intval($day); + $year = intval($year); + + + $year = adodb_year_digit_check($year); + + if ($mon > 12) { + $y = floor(($mon-1)/ 12); + $year += $y; + $mon -= $y*12; + } else if ($mon < 1) { + $y = ceil((1-$mon) / 12); + $year -= $y; + $mon += $y*12; + } + + $_day_power = 86400; + $_hour_power = 3600; + $_min_power = 60; + + $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); + $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + + $_total_date = 0; + if ($year >= 1970) { + for ($a = 1970 ; $a <= $year; $a++) { + $leaf = _adodb_is_leap_year($a); + if ($leaf == true) { + $loop_table = $_month_table_leaf; + $_add_date = 366; + } else { + $loop_table = $_month_table_normal; + $_add_date = 365; + } + if ($a < $year) { + $_total_date += $_add_date; + } else { + for($b=1;$b<$mon;$b++) { + $_total_date += $loop_table[$b]; + } + } + } + $_total_date +=$day-1; + $ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different; + + } else { + for ($a = 1969 ; $a >= $year; $a--) { + $leaf = _adodb_is_leap_year($a); + if ($leaf == true) { + $loop_table = $_month_table_leaf; + $_add_date = 366; + } else { + $loop_table = $_month_table_normal; + $_add_date = 365; + } + if ($a > $year) { $_total_date += $_add_date; + } else { + for($b=12;$b>$mon;$b--) { + $_total_date += $loop_table[$b]; + } + } + } + $_total_date += $loop_table[$mon] - $day; + + $_day_time = $hr * $_hour_power + $min * $_min_power + $sec; + $_day_time = $_day_power - $_day_time; + $ret = -( $_total_date * $_day_power + $_day_time - $gmt_different); + if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction + else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582. + } + //print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret; + return $ret; +} + +function adodb_gmstrftime($fmt, $ts=false) +{ + return adodb_strftime($fmt,$ts,true); +} + +// hack - convert to adodb_date +function adodb_strftime($fmt, $ts=false,$is_gmt=false) +{ +global $ADODB_DATE_LOCALE; + + if (!defined('ADODB_TEST_DATES')) { + if ((abs($ts) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + if (!defined('ADODB_NO_NEGATIVE_TS') || $ts >= 0) // if windows, must be +ve integer + return ($is_gmt)? @gmstrftime($fmt,$ts): @strftime($fmt,$ts); + + } + } + + if (empty($ADODB_DATE_LOCALE)) { + /* + $tstr = strtoupper(gmstrftime('%c',31366800)); // 30 Dec 1970, 1 am + $sep = substr($tstr,2,1); + $hasAM = strrpos($tstr,'M') !== false; + */ + # see http://phplens.com/lens/lensforum/msgs.php?id=14865 for reasoning, and changelog for version 0.24 + $dstr = gmstrftime('%x',31366800); // 30 Dec 1970, 1 am + $sep = substr($dstr,2,1); + $tstr = strtoupper(gmstrftime('%X',31366800)); // 30 Dec 1970, 1 am + $hasAM = strrpos($tstr,'M') !== false; + + $ADODB_DATE_LOCALE = array(); + $ADODB_DATE_LOCALE[] = strncmp($tstr,'30',2) == 0 ? 'd'.$sep.'m'.$sep.'y' : 'm'.$sep.'d'.$sep.'y'; + $ADODB_DATE_LOCALE[] = ($hasAM) ? 'h:i:s a' : 'H:i:s'; + + } + $inpct = false; + $fmtdate = ''; + for ($i=0,$max = strlen($fmt); $i < $max; $i++) { + $ch = $fmt[$i]; + if ($ch == '%') { + if ($inpct) { + $fmtdate .= '%'; + $inpct = false; + } else + $inpct = true; + } else if ($inpct) { + + $inpct = false; + switch($ch) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'E': + case 'O': + /* ignore format modifiers */ + $inpct = true; + break; + + case 'a': $fmtdate .= 'D'; break; + case 'A': $fmtdate .= 'l'; break; + case 'h': + case 'b': $fmtdate .= 'M'; break; + case 'B': $fmtdate .= 'F'; break; + case 'c': $fmtdate .= $ADODB_DATE_LOCALE[0].$ADODB_DATE_LOCALE[1]; break; + case 'C': $fmtdate .= '\C?'; break; // century + case 'd': $fmtdate .= 'd'; break; + case 'D': $fmtdate .= 'm/d/y'; break; + case 'e': $fmtdate .= 'j'; break; + case 'g': $fmtdate .= '\g?'; break; //? + case 'G': $fmtdate .= '\G?'; break; //? + case 'H': $fmtdate .= 'H'; break; + case 'I': $fmtdate .= 'h'; break; + case 'j': $fmtdate .= '?z'; $parsej = true; break; // wrong as j=1-based, z=0-basd + case 'm': $fmtdate .= 'm'; break; + case 'M': $fmtdate .= 'i'; break; + case 'n': $fmtdate .= "\n"; break; + case 'p': $fmtdate .= 'a'; break; + case 'r': $fmtdate .= 'h:i:s a'; break; + case 'R': $fmtdate .= 'H:i:s'; break; + case 'S': $fmtdate .= 's'; break; + case 't': $fmtdate .= "\t"; break; + case 'T': $fmtdate .= 'H:i:s'; break; + case 'u': $fmtdate .= '?u'; $parseu = true; break; // wrong strftime=1-based, date=0-based + case 'U': $fmtdate .= '?U'; $parseU = true; break;// wrong strftime=1-based, date=0-based + case 'x': $fmtdate .= $ADODB_DATE_LOCALE[0]; break; + case 'X': $fmtdate .= $ADODB_DATE_LOCALE[1]; break; + case 'w': $fmtdate .= '?w'; $parseu = true; break; // wrong strftime=1-based, date=0-based + case 'W': $fmtdate .= '?W'; $parseU = true; break;// wrong strftime=1-based, date=0-based + case 'y': $fmtdate .= 'y'; break; + case 'Y': $fmtdate .= 'Y'; break; + case 'Z': $fmtdate .= 'T'; break; + } + } else if (('A' <= ($ch) && ($ch) <= 'Z' ) || ('a' <= ($ch) && ($ch) <= 'z' )) + $fmtdate .= "\\".$ch; + else + $fmtdate .= $ch; + } + //echo "fmt=",$fmtdate,"
"; + if ($ts === false) $ts = time(); + $ret = adodb_date($fmtdate, $ts, $is_gmt); + return $ret; +} diff --git a/ehcp/adodb5/adodb-xmlschema.inc.php b/ehcp/adodb5/adodb-xmlschema.inc.php new file mode 100644 index 0000000..0890155 --- /dev/null +++ b/ehcp/adodb5/adodb-xmlschema.inc.php @@ -0,0 +1,2224 @@ +parent = $parent; + } + + /** + * XML Callback to process start elements + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + + } + + function create(&$xmls) { + return array(); + } + + /** + * Destroys the object + */ + function destroy() { + unset( $this ); + } + + /** + * Checks whether the specified RDBMS is supported by the current + * database object or its ranking ancestor. + * + * @param string $platform RDBMS platform name (from ADODB platform list). + * @return boolean TRUE if RDBMS is supported; otherwise returns FALSE. + */ + function supportedPlatform( $platform = NULL ) { + return is_object( $this->parent ) ? $this->parent->supportedPlatform( $platform ) : TRUE; + } + + /** + * Returns the prefix set by the ranking ancestor of the database object. + * + * @param string $name Prefix string. + * @return string Prefix. + */ + function prefix( $name = '' ) { + return is_object( $this->parent ) ? $this->parent->prefix( $name ) : $name; + } + + /** + * Extracts a field ID from the specified field. + * + * @param string $field Field. + * @return string Field ID. + */ + function FieldID( $field ) { + return strtoupper( preg_replace( '/^`(.+)`$/', '$1', $field ) ); + } +} + +/** +* Creates a table object in ADOdb's datadict format +* +* This class stores information about a database table. As charactaristics +* of the table are loaded from the external source, methods and properties +* of this class are used to build up the table description in ADOdb's +* datadict format. +* +* @package axmls +* @access private +*/ +class dbTable extends dbObject { + + /** + * @var string Table name + */ + var $name; + + /** + * @var array Field specifier: Meta-information about each field + */ + var $fields = array(); + + /** + * @var array List of table indexes. + */ + var $indexes = array(); + + /** + * @var array Table options: Table-level options + */ + var $opts = array(); + + /** + * @var string Field index: Keeps track of which field is currently being processed + */ + var $current_field; + + /** + * @var boolean Mark table for destruction + * @access private + */ + var $drop_table; + + /** + * @var boolean Mark field for destruction (not yet implemented) + * @access private + */ + var $drop_field = array(); + + /** + * Iniitializes a new table object. + * + * @param string $prefix DB Object prefix + * @param array $attributes Array of table attributes. + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + $this->name = $this->prefix($attributes['NAME']); + } + + /** + * XML Callback to process start elements. Elements currently + * processed are: INDEX, DROP, FIELD, KEY, NOTNULL, AUTOINCREMENT & DEFAULT. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'INDEX': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + xml_set_object( $parser, $this->addIndex( $attributes ) ); + } + break; + case 'DATA': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + xml_set_object( $parser, $this->addData( $attributes ) ); + } + break; + case 'DROP': + $this->drop(); + break; + case 'FIELD': + // Add a field + $fieldName = $attributes['NAME']; + $fieldType = $attributes['TYPE']; + $fieldSize = isset( $attributes['SIZE'] ) ? $attributes['SIZE'] : NULL; + $fieldOpts = isset( $attributes['OPTS'] ) ? $attributes['OPTS'] : NULL; + + $this->addField( $fieldName, $fieldType, $fieldSize, $fieldOpts ); + break; + case 'KEY': + case 'NOTNULL': + case 'AUTOINCREMENT': + // Add a field option + $this->addFieldOpt( $this->current_field, $this->currentElement ); + break; + case 'DEFAULT': + // Add a field option to the table object + + // Work around ADOdb datadict issue that misinterprets empty strings. + if( $attributes['VALUE'] == '' ) { + $attributes['VALUE'] = " '' "; + } + + $this->addFieldOpt( $this->current_field, $this->currentElement, $attributes['VALUE'] ); + break; + case 'DEFDATE': + case 'DEFTIMESTAMP': + // Add a field option to the table object + $this->addFieldOpt( $this->current_field, $this->currentElement ); + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Table constraint + case 'CONSTRAINT': + if( isset( $this->current_field ) ) { + $this->addFieldOpt( $this->current_field, $this->currentElement, $cdata ); + } else { + $this->addTableOpt( $cdata ); + } + break; + // Table option + case 'OPT': + $this->addTableOpt( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'TABLE': + $this->parent->addSQL( $this->create( $this->parent ) ); + xml_set_object( $parser, $this->parent ); + $this->destroy(); + break; + case 'FIELD': + unset($this->current_field); + break; + + } + } + + /** + * Adds an index to a table object + * + * @param array $attributes Index attributes + * @return object dbIndex object + */ + function addIndex( $attributes ) { + $name = strtoupper( $attributes['NAME'] ); + $this->indexes[$name] = new dbIndex( $this, $attributes ); + return $this->indexes[$name]; + } + + /** + * Adds data to a table object + * + * @param array $attributes Data attributes + * @return object dbData object + */ + function addData( $attributes ) { + if( !isset( $this->data ) ) { + $this->data = new dbData( $this, $attributes ); + } + return $this->data; + } + + /** + * Adds a field to a table object + * + * $name is the name of the table to which the field should be added. + * $type is an ADODB datadict field type. The following field types + * are supported as of ADODB 3.40: + * - C: varchar + * - X: CLOB (character large object) or largest varchar size + * if CLOB is not supported + * - C2: Multibyte varchar + * - X2: Multibyte CLOB + * - B: BLOB (binary large object) + * - D: Date (some databases do not support this, and we return a datetime type) + * - T: Datetime or Timestamp + * - L: Integer field suitable for storing booleans (0 or 1) + * - I: Integer (mapped to I4) + * - I1: 1-byte integer + * - I2: 2-byte integer + * - I4: 4-byte integer + * - I8: 8-byte integer + * - F: Floating point number + * - N: Numeric or decimal number + * + * @param string $name Name of the table to which the field will be added. + * @param string $type ADODB datadict field type. + * @param string $size Field size + * @param array $opts Field options array + * @return array Field specifier array + */ + function addField( $name, $type, $size = NULL, $opts = NULL ) { + $field_id = $this->FieldID( $name ); + + // Set the field index so we know where we are + $this->current_field = $field_id; + + // Set the field name (required) + $this->fields[$field_id]['NAME'] = $name; + + // Set the field type (required) + $this->fields[$field_id]['TYPE'] = $type; + + // Set the field size (optional) + if( isset( $size ) ) { + $this->fields[$field_id]['SIZE'] = $size; + } + + // Set the field options + if( isset( $opts ) ) { + $this->fields[$field_id]['OPTS'][] = $opts; + } + } + + /** + * Adds a field option to the current field specifier + * + * This method adds a field option allowed by the ADOdb datadict + * and appends it to the given field. + * + * @param string $field Field name + * @param string $opt ADOdb field option + * @param mixed $value Field option value + * @return array Field specifier array + */ + function addFieldOpt( $field, $opt, $value = NULL ) { + if( !isset( $value ) ) { + $this->fields[$this->FieldID( $field )]['OPTS'][] = $opt; + // Add the option and value + } else { + $this->fields[$this->FieldID( $field )]['OPTS'][] = array( $opt => $value ); + } + } + + /** + * Adds an option to the table + * + * This method takes a comma-separated list of table-level options + * and appends them to the table object. + * + * @param string $opt Table option + * @return array Options + */ + function addTableOpt( $opt ) { + if(isset($this->currentPlatform)) { + $this->opts[$this->parent->db->databaseType] = $opt; + } + return $this->opts; + } + + + /** + * Generates the SQL that will create the table in the database + * + * @param object $xmls adoSchema object + * @return array Array containing table creation SQL + */ + function create( &$xmls ) { + $sql = array(); + + // drop any existing indexes + if( is_array( $legacy_indexes = $xmls->dict->MetaIndexes( $this->name ) ) ) { + foreach( $legacy_indexes as $index => $index_details ) { + $sql[] = $xmls->dict->DropIndexSQL( $index, $this->name ); + } + } + + // remove fields to be dropped from table object + foreach( $this->drop_field as $field ) { + unset( $this->fields[$field] ); + } + + // if table exists + if( is_array( $legacy_fields = $xmls->dict->MetaColumns( $this->name ) ) ) { + // drop table + if( $this->drop_table ) { + $sql[] = $xmls->dict->DropTableSQL( $this->name ); + + return $sql; + } + + // drop any existing fields not in schema + foreach( $legacy_fields as $field_id => $field ) { + if( !isset( $this->fields[$field_id] ) ) { + $sql[] = $xmls->dict->DropColumnSQL( $this->name, '`'.$field->name.'`' ); + } + } + // if table doesn't exist + } else { + if( $this->drop_table ) { + return $sql; + } + + $legacy_fields = array(); + } + + // Loop through the field specifier array, building the associative array for the field options + $fldarray = array(); + + foreach( $this->fields as $field_id => $finfo ) { + // Set an empty size if it isn't supplied + if( !isset( $finfo['SIZE'] ) ) { + $finfo['SIZE'] = ''; + } + + // Initialize the field array with the type and size + $fldarray[$field_id] = array( + 'NAME' => $finfo['NAME'], + 'TYPE' => $finfo['TYPE'], + 'SIZE' => $finfo['SIZE'] + ); + + // Loop through the options array and add the field options. + if( isset( $finfo['OPTS'] ) ) { + foreach( $finfo['OPTS'] as $opt ) { + // Option has an argument. + if( is_array( $opt ) ) { + $key = key( $opt ); + $value = $opt[key( $opt )]; + @$fldarray[$field_id][$key] .= $value; + // Option doesn't have arguments + } else { + $fldarray[$field_id][$opt] = $opt; + } + } + } + } + + if( empty( $legacy_fields ) ) { + // Create the new table + $sql[] = $xmls->dict->CreateTableSQL( $this->name, $fldarray, $this->opts ); + logMsg( end( $sql ), 'Generated CreateTableSQL' ); + } else { + // Upgrade an existing table + logMsg( "Upgrading {$this->name} using '{$xmls->upgrade}'" ); + switch( $xmls->upgrade ) { + // Use ChangeTableSQL + case 'ALTER': + logMsg( 'Generated ChangeTableSQL (ALTERing table)' ); + $sql[] = $xmls->dict->ChangeTableSQL( $this->name, $fldarray, $this->opts ); + break; + case 'REPLACE': + logMsg( 'Doing upgrade REPLACE (testing)' ); + $sql[] = $xmls->dict->DropTableSQL( $this->name ); + $sql[] = $xmls->dict->CreateTableSQL( $this->name, $fldarray, $this->opts ); + break; + // ignore table + default: + return array(); + } + } + + foreach( $this->indexes as $index ) { + $sql[] = $index->create( $xmls ); + } + + if( isset( $this->data ) ) { + $sql[] = $this->data->create( $xmls ); + } + + return $sql; + } + + /** + * Marks a field or table for destruction + */ + function drop() { + if( isset( $this->current_field ) ) { + // Drop the current field + logMsg( "Dropping field '{$this->current_field}' from table '{$this->name}'" ); + // $this->drop_field[$this->current_field] = $xmls->dict->DropColumnSQL( $this->name, $this->current_field ); + $this->drop_field[$this->current_field] = $this->current_field; + } else { + // Drop the current table + logMsg( "Dropping table '{$this->name}'" ); + // $this->drop_table = $xmls->dict->DropTableSQL( $this->name ); + $this->drop_table = TRUE; + } + } +} + +/** +* Creates an index object in ADOdb's datadict format +* +* This class stores information about a database index. As charactaristics +* of the index are loaded from the external source, methods and properties +* of this class are used to build up the index description in ADOdb's +* datadict format. +* +* @package axmls +* @access private +*/ +class dbIndex extends dbObject { + + /** + * @var string Index name + */ + var $name; + + /** + * @var array Index options: Index-level options + */ + var $opts = array(); + + /** + * @var array Indexed fields: Table columns included in this index + */ + var $columns = array(); + + /** + * @var boolean Mark index for destruction + * @access private + */ + var $drop = FALSE; + + /** + * Initializes the new dbIndex object. + * + * @param object $parent Parent object + * @param array $attributes Attributes + * + * @internal + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + + $this->name = $this->prefix ($attributes['NAME']); + } + + /** + * XML Callback to process start elements + * + * Processes XML opening tags. + * Elements currently processed are: DROP, CLUSTERED, BITMAP, UNIQUE, FULLTEXT & HASH. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'DROP': + $this->drop(); + break; + case 'CLUSTERED': + case 'BITMAP': + case 'UNIQUE': + case 'FULLTEXT': + case 'HASH': + // Add index Option + $this->addIndexOpt( $this->currentElement ); + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * Processes XML cdata. + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Index field name + case 'COL': + $this->addField( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'INDEX': + xml_set_object( $parser, $this->parent ); + break; + } + } + + /** + * Adds a field to the index + * + * @param string $name Field name + * @return string Field list + */ + function addField( $name ) { + $this->columns[$this->FieldID( $name )] = $name; + + // Return the field list + return $this->columns; + } + + /** + * Adds options to the index + * + * @param string $opt Comma-separated list of index options. + * @return string Option list + */ + function addIndexOpt( $opt ) { + $this->opts[] = $opt; + + // Return the options list + return $this->opts; + } + + /** + * Generates the SQL that will create the index in the database + * + * @param object $xmls adoSchema object + * @return array Array containing index creation SQL + */ + function create( &$xmls ) { + if( $this->drop ) { + return NULL; + } + + // eliminate any columns that aren't in the table + foreach( $this->columns as $id => $col ) { + if( !isset( $this->parent->fields[$id] ) ) { + unset( $this->columns[$id] ); + } + } + + return $xmls->dict->CreateIndexSQL( $this->name, $this->parent->name, $this->columns, $this->opts ); + } + + /** + * Marks an index for destruction + */ + function drop() { + $this->drop = TRUE; + } +} + +/** +* Creates a data object in ADOdb's datadict format +* +* This class stores information about table data. +* +* @package axmls +* @access private +*/ +class dbData extends dbObject { + + var $data = array(); + + var $row; + + /** + * Initializes the new dbIndex object. + * + * @param object $parent Parent object + * @param array $attributes Attributes + * + * @internal + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + } + + /** + * XML Callback to process start elements + * + * Processes XML opening tags. + * Elements currently processed are: DROP, CLUSTERED, BITMAP, UNIQUE, FULLTEXT & HASH. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'ROW': + $this->row = count( $this->data ); + $this->data[$this->row] = array(); + break; + case 'F': + $this->addField($attributes); + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * Processes XML cdata. + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Index field name + case 'F': + $this->addData( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'DATA': + xml_set_object( $parser, $this->parent ); + break; + } + } + + /** + * Adds a field to the index + * + * @param string $name Field name + * @return string Field list + */ + function addField( $attributes ) { + if( isset( $attributes['NAME'] ) ) { + $name = $attributes['NAME']; + } else { + $name = count($this->data[$this->row]); + } + + // Set the field index so we know where we are + $this->current_field = $this->FieldID( $name ); + } + + /** + * Adds options to the index + * + * @param string $opt Comma-separated list of index options. + * @return string Option list + */ + function addData( $cdata ) { + if( !isset( $this->data[$this->row] ) ) { + $this->data[$this->row] = array(); + } + + if( !isset( $this->data[$this->row][$this->current_field] ) ) { + $this->data[$this->row][$this->current_field] = ''; + } + + $this->data[$this->row][$this->current_field] .= $cdata; + } + + /** + * Generates the SQL that will create the index in the database + * + * @param object $xmls adoSchema object + * @return array Array containing index creation SQL + */ + function create( &$xmls ) { + $table = $xmls->dict->TableName($this->parent->name); + $table_field_count = count($this->parent->fields); + $sql = array(); + + // eliminate any columns that aren't in the table + foreach( $this->data as $row ) { + $table_fields = $this->parent->fields; + $fields = array(); + + foreach( $row as $field_id => $field_data ) { + if( !array_key_exists( $field_id, $table_fields ) ) { + if( is_numeric( $field_id ) ) { + $field_id = reset( array_keys( $table_fields ) ); + } else { + continue; + } + } + + $name = $table_fields[$field_id]['NAME']; + + switch( $table_fields[$field_id]['TYPE'] ) { + case 'C': + case 'C2': + case 'X': + case 'X2': + $fields[$name] = $xmls->db->qstr( $field_data ); + break; + case 'I': + case 'I1': + case 'I2': + case 'I4': + case 'I8': + $fields[$name] = intval($field_data); + break; + default: + $fields[$name] = $field_data; + } + + unset($table_fields[$field_id]); + } + + // check that at least 1 column is specified + if( empty( $fields ) ) { + continue; + } + + // check that no required columns are missing + if( count( $fields ) < $table_field_count ) { + foreach( $table_fields as $field ) { + if (isset( $field['OPTS'] )) + if( ( in_array( 'NOTNULL', $field['OPTS'] ) || in_array( 'KEY', $field['OPTS'] ) ) && !in_array( 'AUTOINCREMENT', $field['OPTS'] ) ) { + continue(2); + } + } + } + + $sql[] = 'INSERT INTO '. $table .' ('. implode( ',', array_keys( $fields ) ) .') VALUES ('. implode( ',', $fields ) .')'; + } + + return $sql; + } +} + +/** +* Creates the SQL to execute a list of provided SQL queries +* +* @package axmls +* @access private +*/ +class dbQuerySet extends dbObject { + + /** + * @var array List of SQL queries + */ + var $queries = array(); + + /** + * @var string String used to build of a query line by line + */ + var $query; + + /** + * @var string Query prefix key + */ + var $prefixKey = ''; + + /** + * @var boolean Auto prefix enable (TRUE) + */ + var $prefixMethod = 'AUTO'; + + /** + * Initializes the query set. + * + * @param object $parent Parent object + * @param array $attributes Attributes + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + + // Overrides the manual prefix key + if( isset( $attributes['KEY'] ) ) { + $this->prefixKey = $attributes['KEY']; + } + + $prefixMethod = isset( $attributes['PREFIXMETHOD'] ) ? strtoupper( trim( $attributes['PREFIXMETHOD'] ) ) : ''; + + // Enables or disables automatic prefix prepending + switch( $prefixMethod ) { + case 'AUTO': + $this->prefixMethod = 'AUTO'; + break; + case 'MANUAL': + $this->prefixMethod = 'MANUAL'; + break; + case 'NONE': + $this->prefixMethod = 'NONE'; + break; + } + } + + /** + * XML Callback to process start elements. Elements currently + * processed are: QUERY. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'QUERY': + // Create a new query in a SQL queryset. + // Ignore this query set if a platform is specified and it's different than the + // current connection platform. + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + $this->newQuery(); + } else { + $this->discardQuery(); + } + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Line of queryset SQL data + case 'QUERY': + $this->buildQuery( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'QUERY': + // Add the finished query to the open query set. + $this->addQuery(); + break; + case 'SQL': + $this->parent->addSQL( $this->create( $this->parent ) ); + xml_set_object( $parser, $this->parent ); + $this->destroy(); + break; + default: + + } + } + + /** + * Re-initializes the query. + * + * @return boolean TRUE + */ + function newQuery() { + $this->query = ''; + + return TRUE; + } + + /** + * Discards the existing query. + * + * @return boolean TRUE + */ + function discardQuery() { + unset( $this->query ); + + return TRUE; + } + + /** + * Appends a line to a query that is being built line by line + * + * @param string $data Line of SQL data or NULL to initialize a new query + * @return string SQL query string. + */ + function buildQuery( $sql = NULL ) { + if( !isset( $this->query ) OR empty( $sql ) ) { + return FALSE; + } + + $this->query .= $sql; + + return $this->query; + } + + /** + * Adds a completed query to the query list + * + * @return string SQL of added query + */ + function addQuery() { + if( !isset( $this->query ) ) { + return FALSE; + } + + $this->queries[] = $return = trim($this->query); + + unset( $this->query ); + + return $return; + } + + /** + * Creates and returns the current query set + * + * @param object $xmls adoSchema object + * @return array Query set + */ + function create( &$xmls ) { + foreach( $this->queries as $id => $query ) { + switch( $this->prefixMethod ) { + case 'AUTO': + // Enable auto prefix replacement + + // Process object prefix. + // Evaluate SQL statements to prepend prefix to objects + $query = $this->prefixQuery( '/^\s*((?is)INSERT\s+(INTO\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + $query = $this->prefixQuery( '/^\s*((?is)UPDATE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + $query = $this->prefixQuery( '/^\s*((?is)DELETE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + + // SELECT statements aren't working yet + #$data = preg_replace( '/(?ias)(^\s*SELECT\s+.*\s+FROM)\s+(\W\s*,?\s*)+((?i)\s+WHERE.*$)/', "\1 $prefix\2 \3", $data ); + + case 'MANUAL': + // If prefixKey is set and has a value then we use it to override the default constant XMLS_PREFIX. + // If prefixKey is not set, we use the default constant XMLS_PREFIX + if( isset( $this->prefixKey ) AND( $this->prefixKey !== '' ) ) { + // Enable prefix override + $query = str_replace( $this->prefixKey, $xmls->objectPrefix, $query ); + } else { + // Use default replacement + $query = str_replace( XMLS_PREFIX , $xmls->objectPrefix, $query ); + } + } + + $this->queries[$id] = trim( $query ); + } + + // Return the query set array + return $this->queries; + } + + /** + * Rebuilds the query with the prefix attached to any objects + * + * @param string $regex Regex used to add prefix + * @param string $query SQL query string + * @param string $prefix Prefix to be appended to tables, indices, etc. + * @return string Prefixed SQL query string. + */ + function prefixQuery( $regex, $query, $prefix = NULL ) { + if( !isset( $prefix ) ) { + return $query; + } + + if( preg_match( $regex, $query, $match ) ) { + $preamble = $match[1]; + $postamble = $match[5]; + $objectList = explode( ',', $match[3] ); + // $prefix = $prefix . '_'; + + $prefixedList = ''; + + foreach( $objectList as $object ) { + if( $prefixedList !== '' ) { + $prefixedList .= ', '; + } + + $prefixedList .= $prefix . trim( $object ); + } + + $query = $preamble . ' ' . $prefixedList . ' ' . $postamble; + } + + return $query; + } +} + +/** +* Loads and parses an XML file, creating an array of "ready-to-run" SQL statements +* +* This class is used to load and parse the XML file, to create an array of SQL statements +* that can be used to build a database, and to build the database using the SQL array. +* +* @tutorial getting_started.pkg +* +* @author Richard Tango-Lowy & Dan Cech +* @version $Revision: 1.12 $ +* +* @package axmls +*/ +class adoSchema { + + /** + * @var array Array containing SQL queries to generate all objects + * @access private + */ + var $sqlArray; + + /** + * @var object ADOdb connection object + * @access private + */ + var $db; + + /** + * @var object ADOdb Data Dictionary + * @access private + */ + var $dict; + + /** + * @var string Current XML element + * @access private + */ + var $currentElement = ''; + + /** + * @var string If set (to 'ALTER' or 'REPLACE'), upgrade an existing database + * @access private + */ + var $upgrade = ''; + + /** + * @var string Optional object prefix + * @access private + */ + var $objectPrefix = ''; + + /** + * @var long Original Magic Quotes Runtime value + * @access private + */ + var $mgq; + + /** + * @var long System debug + * @access private + */ + var $debug; + + /** + * @var string Regular expression to find schema version + * @access private + */ + var $versionRegex = '//'; + + /** + * @var string Current schema version + * @access private + */ + var $schemaVersion; + + /** + * @var int Success of last Schema execution + */ + var $success; + + /** + * @var bool Execute SQL inline as it is generated + */ + var $executeInline; + + /** + * @var bool Continue SQL execution if errors occur + */ + var $continueOnError; + + /** + * Creates an adoSchema object + * + * Creating an adoSchema object is the first step in processing an XML schema. + * The only parameter is an ADOdb database connection object, which must already + * have been created. + * + * @param object $db ADOdb database connection object. + */ + function __construct( $db ) { + // Initialize the environment + $this->mgq = get_magic_quotes_runtime(); + ini_set("magic_quotes_runtime", 0); + #set_magic_quotes_runtime(0); + + $this->db = $db; + $this->debug = $this->db->debug; + $this->dict = NewDataDictionary( $this->db ); + $this->sqlArray = array(); + $this->schemaVersion = XMLS_SCHEMA_VERSION; + $this->executeInline( XMLS_EXECUTE_INLINE ); + $this->continueOnError( XMLS_CONTINUE_ON_ERROR ); + $this->setUpgradeMethod(); + } + + /** + * Sets the method to be used for upgrading an existing database + * + * Use this method to specify how existing database objects should be upgraded. + * The method option can be set to ALTER, REPLACE, BEST, or NONE. ALTER attempts to + * alter each database object directly, REPLACE attempts to rebuild each object + * from scratch, BEST attempts to determine the best upgrade method for each + * object, and NONE disables upgrading. + * + * This method is not yet used by AXMLS, but exists for backward compatibility. + * The ALTER method is automatically assumed when the adoSchema object is + * instantiated; other upgrade methods are not currently supported. + * + * @param string $method Upgrade method (ALTER|REPLACE|BEST|NONE) + * @returns string Upgrade method used + */ + function SetUpgradeMethod( $method = '' ) { + if( !is_string( $method ) ) { + return FALSE; + } + + $method = strtoupper( $method ); + + // Handle the upgrade methods + switch( $method ) { + case 'ALTER': + $this->upgrade = $method; + break; + case 'REPLACE': + $this->upgrade = $method; + break; + case 'BEST': + $this->upgrade = 'ALTER'; + break; + case 'NONE': + $this->upgrade = 'NONE'; + break; + default: + // Use default if no legitimate method is passed. + $this->upgrade = XMLS_DEFAULT_UPGRADE_METHOD; + } + + return $this->upgrade; + } + + /** + * Enables/disables inline SQL execution. + * + * Call this method to enable or disable inline execution of the schema. If the mode is set to TRUE (inline execution), + * AXMLS applies the SQL to the database immediately as each schema entity is parsed. If the mode + * is set to FALSE (post execution), AXMLS parses the entire schema and you will need to call adoSchema::ExecuteSchema() + * to apply the schema to the database. + * + * @param bool $mode execute + * @return bool current execution mode + * + * @see ParseSchema(), ExecuteSchema() + */ + function ExecuteInline( $mode = NULL ) { + if( is_bool( $mode ) ) { + $this->executeInline = $mode; + } + + return $this->executeInline; + } + + /** + * Enables/disables SQL continue on error. + * + * Call this method to enable or disable continuation of SQL execution if an error occurs. + * If the mode is set to TRUE (continue), AXMLS will continue to apply SQL to the database, even if an error occurs. + * If the mode is set to FALSE (halt), AXMLS will halt execution of generated sql if an error occurs, though parsing + * of the schema will continue. + * + * @param bool $mode execute + * @return bool current continueOnError mode + * + * @see addSQL(), ExecuteSchema() + */ + function ContinueOnError( $mode = NULL ) { + if( is_bool( $mode ) ) { + $this->continueOnError = $mode; + } + + return $this->continueOnError; + } + + /** + * Loads an XML schema from a file and converts it to SQL. + * + * Call this method to load the specified schema (see the DTD for the proper format) from + * the filesystem and generate the SQL necessary to create the database described. + * @see ParseSchemaString() + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute + */ + function ParseSchema( $filename, $returnSchema = FALSE ) { + return $this->ParseSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema ); + } + + /** + * Loads an XML schema from a file and converts it to SQL. + * + * Call this method to load the specified schema from a file (see the DTD for the proper format) + * and generate the SQL necessary to create the database described by the schema. + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + * + * @deprecated Replaced by adoSchema::ParseSchema() and adoSchema::ParseSchemaString() + * @see ParseSchema(), ParseSchemaString() + */ + function ParseSchemaFile( $filename, $returnSchema = FALSE ) { + // Open the file + if( !($fp = fopen( $filename, 'r' )) ) { + // die( 'Unable to open file' ); + return FALSE; + } + + // do version detection here + if( $this->SchemaFileVersion( $filename ) != $this->schemaVersion ) { + return FALSE; + } + + if ( $returnSchema ) + { + $xmlstring = ''; + while( $data = fread( $fp, 100000 ) ) { + $xmlstring .= $data; + } + return $xmlstring; + } + + $this->success = 2; + + $xmlParser = $this->create_parser(); + + // Process the file + while( $data = fread( $fp, 4096 ) ) { + if( !xml_parse( $xmlParser, $data, feof( $fp ) ) ) { + die( sprintf( + "XML error: %s at line %d", + xml_error_string( xml_get_error_code( $xmlParser) ), + xml_get_current_line_number( $xmlParser) + ) ); + } + } + + xml_parser_free( $xmlParser ); + + return $this->sqlArray; + } + + /** + * Converts an XML schema string to SQL. + * + * Call this method to parse a string containing an XML schema (see the DTD for the proper format) + * and generate the SQL necessary to create the database described by the schema. + * @see ParseSchema() + * + * @param string $xmlstring XML schema string. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + */ + function ParseSchemaString( $xmlstring, $returnSchema = FALSE ) { + if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) { + return FALSE; + } + + // do version detection here + if( $this->SchemaStringVersion( $xmlstring ) != $this->schemaVersion ) { + return FALSE; + } + + if ( $returnSchema ) + { + return $xmlstring; + } + + $this->success = 2; + + $xmlParser = $this->create_parser(); + + if( !xml_parse( $xmlParser, $xmlstring, TRUE ) ) { + die( sprintf( + "XML error: %s at line %d", + xml_error_string( xml_get_error_code( $xmlParser) ), + xml_get_current_line_number( $xmlParser) + ) ); + } + + xml_parser_free( $xmlParser ); + + return $this->sqlArray; + } + + /** + * Loads an XML schema from a file and converts it to uninstallation SQL. + * + * Call this method to load the specified schema (see the DTD for the proper format) from + * the filesystem and generate the SQL necessary to remove the database described. + * @see RemoveSchemaString() + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute + */ + function RemoveSchema( $filename, $returnSchema = FALSE ) { + return $this->RemoveSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema ); + } + + /** + * Converts an XML schema string to uninstallation SQL. + * + * Call this method to parse a string containing an XML schema (see the DTD for the proper format) + * and generate the SQL necessary to uninstall the database described by the schema. + * @see RemoveSchema() + * + * @param string $schema XML schema string. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + */ + function RemoveSchemaString( $schema, $returnSchema = FALSE ) { + + // grab current version + if( !( $version = $this->SchemaStringVersion( $schema ) ) ) { + return FALSE; + } + + return $this->ParseSchemaString( $this->TransformSchema( $schema, 'remove-' . $version), $returnSchema ); + } + + /** + * Applies the current XML schema to the database (post execution). + * + * Call this method to apply the current schema (generally created by calling + * ParseSchema() or ParseSchemaString() ) to the database (creating the tables, indexes, + * and executing other SQL specified in the schema) after parsing. + * @see ParseSchema(), ParseSchemaString(), ExecuteInline() + * + * @param array $sqlArray Array of SQL statements that will be applied rather than + * the current schema. + * @param boolean $continueOnErr Continue to apply the schema even if an error occurs. + * @returns integer 0 if failure, 1 if errors, 2 if successful. + */ + function ExecuteSchema( $sqlArray = NULL, $continueOnErr = NULL ) { + if( !is_bool( $continueOnErr ) ) { + $continueOnErr = $this->ContinueOnError(); + } + + if( !isset( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + + if( !is_array( $sqlArray ) ) { + $this->success = 0; + } else { + $this->success = $this->dict->ExecuteSQLArray( $sqlArray, $continueOnErr ); + } + + return $this->success; + } + + /** + * Returns the current SQL array. + * + * Call this method to fetch the array of SQL queries resulting from + * ParseSchema() or ParseSchemaString(). + * + * @param string $format Format: HTML, TEXT, or NONE (PHP array) + * @return array Array of SQL statements or FALSE if an error occurs + */ + function PrintSQL( $format = 'NONE' ) { + $sqlArray = null; + return $this->getSQL( $format, $sqlArray ); + } + + /** + * Saves the current SQL array to the local filesystem as a list of SQL queries. + * + * Call this method to save the array of SQL queries (generally resulting from a + * parsed XML schema) to the filesystem. + * + * @param string $filename Path and name where the file should be saved. + * @return boolean TRUE if save is successful, else FALSE. + */ + function SaveSQL( $filename = './schema.sql' ) { + + if( !isset( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + if( !isset( $sqlArray ) ) { + return FALSE; + } + + $fp = fopen( $filename, "w" ); + + foreach( $sqlArray as $key => $query ) { + fwrite( $fp, $query . ";\n" ); + } + fclose( $fp ); + } + + /** + * Create an xml parser + * + * @return object PHP XML parser object + * + * @access private + */ + function create_parser() { + // Create the parser + $xmlParser = xml_parser_create(); + xml_set_object( $xmlParser, $this ); + + // Initialize the XML callback functions + xml_set_element_handler( $xmlParser, '_tag_open', '_tag_close' ); + xml_set_character_data_handler( $xmlParser, '_tag_cdata' ); + + return $xmlParser; + } + + /** + * XML Callback to process start elements + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + switch( strtoupper( $tag ) ) { + case 'TABLE': + $this->obj = new dbTable( $this, $attributes ); + xml_set_object( $parser, $this->obj ); + break; + case 'SQL': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + $this->obj = new dbQuerySet( $this, $attributes ); + xml_set_object( $parser, $this->obj ); + } + break; + default: + // print_r( array( $tag, $attributes ) ); + } + + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + } + + /** + * XML Callback to process end elements + * + * @access private + * @internal + */ + function _tag_close( &$parser, $tag ) { + + } + + /** + * Converts an XML schema string to the specified DTD version. + * + * Call this method to convert a string containing an XML schema to a different AXMLS + * DTD version. For instance, to convert a schema created for an pre-1.0 version for + * AXMLS (DTD version 0.1) to a newer version of the DTD (e.g. 0.2). If no DTD version + * parameter is specified, the schema will be converted to the current DTD version. + * If the newFile parameter is provided, the converted schema will be written to the specified + * file. + * @see ConvertSchemaFile() + * + * @param string $schema String containing XML schema that will be converted. + * @param string $newVersion DTD version to convert to. + * @param string $newFile File name of (converted) output file. + * @return string Converted XML schema or FALSE if an error occurs. + */ + function ConvertSchemaString( $schema, $newVersion = NULL, $newFile = NULL ) { + + // grab current version + if( !( $version = $this->SchemaStringVersion( $schema ) ) ) { + return FALSE; + } + + if( !isset ($newVersion) ) { + $newVersion = $this->schemaVersion; + } + + if( $version == $newVersion ) { + $result = $schema; + } else { + $result = $this->TransformSchema( $schema, 'convert-' . $version . '-' . $newVersion); + } + + if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) { + fwrite( $fp, $result ); + fclose( $fp ); + } + + return $result; + } + + // compat for pre-4.3 - jlim + function _file_get_contents($path) + { + if (function_exists('file_get_contents')) return file_get_contents($path); + return join('',file($path)); + } + + /** + * Converts an XML schema file to the specified DTD version. + * + * Call this method to convert the specified XML schema file to a different AXMLS + * DTD version. For instance, to convert a schema created for an pre-1.0 version for + * AXMLS (DTD version 0.1) to a newer version of the DTD (e.g. 0.2). If no DTD version + * parameter is specified, the schema will be converted to the current DTD version. + * If the newFile parameter is provided, the converted schema will be written to the specified + * file. + * @see ConvertSchemaString() + * + * @param string $filename Name of XML schema file that will be converted. + * @param string $newVersion DTD version to convert to. + * @param string $newFile File name of (converted) output file. + * @return string Converted XML schema or FALSE if an error occurs. + */ + function ConvertSchemaFile( $filename, $newVersion = NULL, $newFile = NULL ) { + + // grab current version + if( !( $version = $this->SchemaFileVersion( $filename ) ) ) { + return FALSE; + } + + if( !isset ($newVersion) ) { + $newVersion = $this->schemaVersion; + } + + if( $version == $newVersion ) { + $result = _file_get_contents( $filename ); + + // remove unicode BOM if present + if( substr( $result, 0, 3 ) == sprintf( '%c%c%c', 239, 187, 191 ) ) { + $result = substr( $result, 3 ); + } + } else { + $result = $this->TransformSchema( $filename, 'convert-' . $version . '-' . $newVersion, 'file' ); + } + + if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) { + fwrite( $fp, $result ); + fclose( $fp ); + } + + return $result; + } + + function TransformSchema( $schema, $xsl, $schematype='string' ) + { + // Fail if XSLT extension is not available + if( ! function_exists( 'xslt_create' ) ) { + return FALSE; + } + + $xsl_file = dirname( __FILE__ ) . '/xsl/' . $xsl . '.xsl'; + + // look for xsl + if( !is_readable( $xsl_file ) ) { + return FALSE; + } + + switch( $schematype ) + { + case 'file': + if( !is_readable( $schema ) ) { + return FALSE; + } + + $schema = _file_get_contents( $schema ); + break; + case 'string': + default: + if( !is_string( $schema ) ) { + return FALSE; + } + } + + $arguments = array ( + '/_xml' => $schema, + '/_xsl' => _file_get_contents( $xsl_file ) + ); + + // create an XSLT processor + $xh = xslt_create (); + + // set error handler + xslt_set_error_handler ($xh, array (&$this, 'xslt_error_handler')); + + // process the schema + $result = xslt_process ($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); + + xslt_free ($xh); + + return $result; + } + + /** + * Processes XSLT transformation errors + * + * @param object $parser XML parser object + * @param integer $errno Error number + * @param integer $level Error level + * @param array $fields Error information fields + * + * @access private + */ + function xslt_error_handler( $parser, $errno, $level, $fields ) { + if( is_array( $fields ) ) { + $msg = array( + 'Message Type' => ucfirst( $fields['msgtype'] ), + 'Message Code' => $fields['code'], + 'Message' => $fields['msg'], + 'Error Number' => $errno, + 'Level' => $level + ); + + switch( $fields['URI'] ) { + case 'arg:/_xml': + $msg['Input'] = 'XML'; + break; + case 'arg:/_xsl': + $msg['Input'] = 'XSL'; + break; + default: + $msg['Input'] = $fields['URI']; + } + + $msg['Line'] = $fields['line']; + } else { + $msg = array( + 'Message Type' => 'Error', + 'Error Number' => $errno, + 'Level' => $level, + 'Fields' => var_export( $fields, TRUE ) + ); + } + + $error_details = $msg['Message Type'] . ' in XSLT Transformation' . "\n" + . '' . "\n"; + + foreach( $msg as $label => $details ) { + $error_details .= '' . "\n"; + } + + $error_details .= '
' . $label . ': ' . htmlentities( $details ) . '
'; + + trigger_error( $error_details, E_USER_ERROR ); + } + + /** + * Returns the AXMLS Schema Version of the requested XML schema file. + * + * Call this method to obtain the AXMLS DTD version of the requested XML schema file. + * @see SchemaStringVersion() + * + * @param string $filename AXMLS schema file + * @return string Schema version number or FALSE on error + */ + function SchemaFileVersion( $filename ) { + // Open the file + if( !($fp = fopen( $filename, 'r' )) ) { + // die( 'Unable to open file' ); + return FALSE; + } + + // Process the file + while( $data = fread( $fp, 4096 ) ) { + if( preg_match( $this->versionRegex, $data, $matches ) ) { + return !empty( $matches[2] ) ? $matches[2] : XMLS_DEFAULT_SCHEMA_VERSION; + } + } + + return FALSE; + } + + /** + * Returns the AXMLS Schema Version of the provided XML schema string. + * + * Call this method to obtain the AXMLS DTD version of the provided XML schema string. + * @see SchemaFileVersion() + * + * @param string $xmlstring XML schema string + * @return string Schema version number or FALSE on error + */ + function SchemaStringVersion( $xmlstring ) { + if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) { + return FALSE; + } + + if( preg_match( $this->versionRegex, $xmlstring, $matches ) ) { + return !empty( $matches[2] ) ? $matches[2] : XMLS_DEFAULT_SCHEMA_VERSION; + } + + return FALSE; + } + + /** + * Extracts an XML schema from an existing database. + * + * Call this method to create an XML schema string from an existing database. + * If the data parameter is set to TRUE, AXMLS will include the data from the database + * in the schema. + * + * @param boolean $data Include data in schema dump + * @return string Generated XML schema + */ + function ExtractSchema( $data = FALSE ) { + $old_mode = $this->db->SetFetchMode( ADODB_FETCH_NUM ); + + $schema = '' . "\n" + . '' . "\n"; + + if( is_array( $tables = $this->db->MetaTables( 'TABLES' ) ) ) { + foreach( $tables as $table ) { + $schema .= ' ' . "\n"; + + // grab details from database + $rs = $this->db->Execute( 'SELECT * FROM ' . $table . ' WHERE 1=1' ); + $fields = $this->db->MetaColumns( $table ); + $indexes = $this->db->MetaIndexes( $table ); + + if( is_array( $fields ) ) { + foreach( $fields as $details ) { + $extra = ''; + $content = array(); + + if( $details->max_length > 0 ) { + $extra .= ' size="' . $details->max_length . '"'; + } + + if( $details->primary_key ) { + $content[] = ''; + } elseif( $details->not_null ) { + $content[] = ''; + } + + if( $details->has_default ) { + $content[] = ''; + } + + if( $details->auto_increment ) { + $content[] = ''; + } + + // this stops the creation of 'R' columns, + // AUTOINCREMENT is used to create auto columns + $details->primary_key = 0; + $type = $rs->MetaType( $details ); + + $schema .= ' '; + + if( !empty( $content ) ) { + $schema .= "\n " . implode( "\n ", $content ) . "\n "; + } + + $schema .= '' . "\n"; + } + } + + if( is_array( $indexes ) ) { + foreach( $indexes as $index => $details ) { + $schema .= ' ' . "\n"; + + if( $details['unique'] ) { + $schema .= ' ' . "\n"; + } + + foreach( $details['columns'] as $column ) { + $schema .= ' ' . $column . '' . "\n"; + } + + $schema .= ' ' . "\n"; + } + } + + if( $data ) { + $rs = $this->db->Execute( 'SELECT * FROM ' . $table ); + + if( is_object( $rs ) ) { + $schema .= ' ' . "\n"; + + while( $row = $rs->FetchRow() ) { + foreach( $row as $key => $val ) { + $row[$key] = htmlentities($val); + } + + $schema .= ' ' . implode( '', $row ) . '' . "\n"; + } + + $schema .= ' ' . "\n"; + } + } + + $schema .= '
' . "\n"; + } + } + + $this->db->SetFetchMode( $old_mode ); + + $schema .= '
'; + return $schema; + } + + /** + * Sets a prefix for database objects + * + * Call this method to set a standard prefix that will be prepended to all database tables + * and indices when the schema is parsed. Calling setPrefix with no arguments clears the prefix. + * + * @param string $prefix Prefix that will be prepended. + * @param boolean $underscore If TRUE, automatically append an underscore character to the prefix. + * @return boolean TRUE if successful, else FALSE + */ + function SetPrefix( $prefix = '', $underscore = TRUE ) { + switch( TRUE ) { + // clear prefix + case empty( $prefix ): + logMsg( 'Cleared prefix' ); + $this->objectPrefix = ''; + return TRUE; + // prefix too long + case strlen( $prefix ) > XMLS_PREFIX_MAXLEN: + // prefix contains invalid characters + case !preg_match( '/^[a-z][a-z0-9_]+$/i', $prefix ): + logMsg( 'Invalid prefix: ' . $prefix ); + return FALSE; + } + + if( $underscore AND substr( $prefix, -1 ) != '_' ) { + $prefix .= '_'; + } + + // prefix valid + logMsg( 'Set prefix: ' . $prefix ); + $this->objectPrefix = $prefix; + return TRUE; + } + + /** + * Returns an object name with the current prefix prepended. + * + * @param string $name Name + * @return string Prefixed name + * + * @access private + */ + function prefix( $name = '' ) { + // if prefix is set + if( !empty( $this->objectPrefix ) ) { + // Prepend the object prefix to the table name + // prepend after quote if used + return preg_replace( '/^(`?)(.+)$/', '$1' . $this->objectPrefix . '$2', $name ); + } + + // No prefix set. Use name provided. + return $name; + } + + /** + * Checks if element references a specific platform + * + * @param string $platform Requested platform + * @returns boolean TRUE if platform check succeeds + * + * @access private + */ + function supportedPlatform( $platform = NULL ) { + $regex = '/^(\w*\|)*' . $this->db->databaseType . '(\|\w*)*$/'; + + if( !isset( $platform ) OR preg_match( $regex, $platform ) ) { + logMsg( "Platform $platform is supported" ); + return TRUE; + } else { + logMsg( "Platform $platform is NOT supported" ); + return FALSE; + } + } + + /** + * Clears the array of generated SQL. + * + * @access private + */ + function clearSQL() { + $this->sqlArray = array(); + } + + /** + * Adds SQL into the SQL array. + * + * @param mixed $sql SQL to Add + * @return boolean TRUE if successful, else FALSE. + * + * @access private + */ + function addSQL( $sql = NULL ) { + if( is_array( $sql ) ) { + foreach( $sql as $line ) { + $this->addSQL( $line ); + } + + return TRUE; + } + + if( is_string( $sql ) ) { + $this->sqlArray[] = $sql; + + // if executeInline is enabled, and either no errors have occurred or continueOnError is enabled, execute SQL. + if( $this->ExecuteInline() && ( $this->success == 2 || $this->ContinueOnError() ) ) { + $saved = $this->db->debug; + $this->db->debug = $this->debug; + $ok = $this->db->Execute( $sql ); + $this->db->debug = $saved; + + if( !$ok ) { + if( $this->debug ) { + ADOConnection::outp( $this->db->ErrorMsg() ); + } + + $this->success = 1; + } + } + + return TRUE; + } + + return FALSE; + } + + /** + * Gets the SQL array in the specified format. + * + * @param string $format Format + * @return mixed SQL + * + * @access private + */ + function getSQL( $format = NULL, $sqlArray = NULL ) { + if( !is_array( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + + if( !is_array( $sqlArray ) ) { + return FALSE; + } + + switch( strtolower( $format ) ) { + case 'string': + case 'text': + return !empty( $sqlArray ) ? implode( ";\n\n", $sqlArray ) . ';' : ''; + case'html': + return !empty( $sqlArray ) ? nl2br( htmlentities( implode( ";\n\n", $sqlArray ) . ';' ) ) : ''; + } + + return $this->sqlArray; + } + + /** + * Destroys an adoSchema object. + * + * Call this method to clean up after an adoSchema object that is no longer in use. + * @deprecated adoSchema now cleans up automatically. + */ + function Destroy() { + ini_set("magic_quotes_runtime", $this->mgq ); + #set_magic_quotes_runtime( $this->mgq ); + unset( $this ); + } +} + +/** +* Message logging function +* +* @access private +*/ +function logMsg( $msg, $title = NULL, $force = FALSE ) { + if( XMLS_DEBUG or $force ) { + echo '
';
+
+		if( isset( $title ) ) {
+			echo '

' . htmlentities( $title ) . '

'; + } + + if( is_object( $this ) ) { + echo '[' . get_class( $this ) . '] '; + } + + print_r( $msg ); + + echo '
'; + } +} diff --git a/ehcp/adodb5/adodb-xmlschema03.inc.php b/ehcp/adodb5/adodb-xmlschema03.inc.php new file mode 100644 index 0000000..45a59bb --- /dev/null +++ b/ehcp/adodb5/adodb-xmlschema03.inc.php @@ -0,0 +1,2406 @@ +parent = $parent; + } + + /** + * XML Callback to process start elements + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + + } + + function create(&$xmls) { + return array(); + } + + /** + * Destroys the object + */ + function destroy() { + unset( $this ); + } + + /** + * Checks whether the specified RDBMS is supported by the current + * database object or its ranking ancestor. + * + * @param string $platform RDBMS platform name (from ADODB platform list). + * @return boolean TRUE if RDBMS is supported; otherwise returns FALSE. + */ + function supportedPlatform( $platform = NULL ) { + return is_object( $this->parent ) ? $this->parent->supportedPlatform( $platform ) : TRUE; + } + + /** + * Returns the prefix set by the ranking ancestor of the database object. + * + * @param string $name Prefix string. + * @return string Prefix. + */ + function prefix( $name = '' ) { + return is_object( $this->parent ) ? $this->parent->prefix( $name ) : $name; + } + + /** + * Extracts a field ID from the specified field. + * + * @param string $field Field. + * @return string Field ID. + */ + function FieldID( $field ) { + return strtoupper( preg_replace( '/^`(.+)`$/', '$1', $field ) ); + } +} + +/** +* Creates a table object in ADOdb's datadict format +* +* This class stores information about a database table. As charactaristics +* of the table are loaded from the external source, methods and properties +* of this class are used to build up the table description in ADOdb's +* datadict format. +* +* @package axmls +* @access private +*/ +class dbTable extends dbObject { + + /** + * @var string Table name + */ + var $name; + + /** + * @var array Field specifier: Meta-information about each field + */ + var $fields = array(); + + /** + * @var array List of table indexes. + */ + var $indexes = array(); + + /** + * @var array Table options: Table-level options + */ + var $opts = array(); + + /** + * @var string Field index: Keeps track of which field is currently being processed + */ + var $current_field; + + /** + * @var boolean Mark table for destruction + * @access private + */ + var $drop_table; + + /** + * @var boolean Mark field for destruction (not yet implemented) + * @access private + */ + var $drop_field = array(); + + /** + * @var array Platform-specific options + * @access private + */ + var $currentPlatform = true; + + + /** + * Iniitializes a new table object. + * + * @param string $prefix DB Object prefix + * @param array $attributes Array of table attributes. + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + $this->name = $this->prefix($attributes['NAME']); + } + + /** + * XML Callback to process start elements. Elements currently + * processed are: INDEX, DROP, FIELD, KEY, NOTNULL, AUTOINCREMENT & DEFAULT. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'INDEX': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + xml_set_object( $parser, $this->addIndex( $attributes ) ); + } + break; + case 'DATA': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + xml_set_object( $parser, $this->addData( $attributes ) ); + } + break; + case 'DROP': + $this->drop(); + break; + case 'FIELD': + // Add a field + $fieldName = $attributes['NAME']; + $fieldType = $attributes['TYPE']; + $fieldSize = isset( $attributes['SIZE'] ) ? $attributes['SIZE'] : NULL; + $fieldOpts = !empty( $attributes['OPTS'] ) ? $attributes['OPTS'] : NULL; + + $this->addField( $fieldName, $fieldType, $fieldSize, $fieldOpts ); + break; + case 'KEY': + case 'NOTNULL': + case 'AUTOINCREMENT': + case 'DEFDATE': + case 'DEFTIMESTAMP': + case 'UNSIGNED': + // Add a field option + $this->addFieldOpt( $this->current_field, $this->currentElement ); + break; + case 'DEFAULT': + // Add a field option to the table object + + // Work around ADOdb datadict issue that misinterprets empty strings. + if( $attributes['VALUE'] == '' ) { + $attributes['VALUE'] = " '' "; + } + + $this->addFieldOpt( $this->current_field, $this->currentElement, $attributes['VALUE'] ); + break; + case 'OPT': + case 'CONSTRAINT': + // Accept platform-specific options + $this->currentPlatform = ( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ); + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Table/field constraint + case 'CONSTRAINT': + if( isset( $this->current_field ) ) { + $this->addFieldOpt( $this->current_field, $this->currentElement, $cdata ); + } else { + $this->addTableOpt( $cdata ); + } + break; + // Table/field option + case 'OPT': + if( isset( $this->current_field ) ) { + $this->addFieldOpt( $this->current_field, $cdata ); + } else { + $this->addTableOpt( $cdata ); + } + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'TABLE': + $this->parent->addSQL( $this->create( $this->parent ) ); + xml_set_object( $parser, $this->parent ); + $this->destroy(); + break; + case 'FIELD': + unset($this->current_field); + break; + case 'OPT': + case 'CONSTRAINT': + $this->currentPlatform = true; + break; + default: + + } + } + + /** + * Adds an index to a table object + * + * @param array $attributes Index attributes + * @return object dbIndex object + */ + function addIndex( $attributes ) { + $name = strtoupper( $attributes['NAME'] ); + $this->indexes[$name] = new dbIndex( $this, $attributes ); + return $this->indexes[$name]; + } + + /** + * Adds data to a table object + * + * @param array $attributes Data attributes + * @return object dbData object + */ + function addData( $attributes ) { + if( !isset( $this->data ) ) { + $this->data = new dbData( $this, $attributes ); + } + return $this->data; + } + + /** + * Adds a field to a table object + * + * $name is the name of the table to which the field should be added. + * $type is an ADODB datadict field type. The following field types + * are supported as of ADODB 3.40: + * - C: varchar + * - X: CLOB (character large object) or largest varchar size + * if CLOB is not supported + * - C2: Multibyte varchar + * - X2: Multibyte CLOB + * - B: BLOB (binary large object) + * - D: Date (some databases do not support this, and we return a datetime type) + * - T: Datetime or Timestamp + * - L: Integer field suitable for storing booleans (0 or 1) + * - I: Integer (mapped to I4) + * - I1: 1-byte integer + * - I2: 2-byte integer + * - I4: 4-byte integer + * - I8: 8-byte integer + * - F: Floating point number + * - N: Numeric or decimal number + * + * @param string $name Name of the table to which the field will be added. + * @param string $type ADODB datadict field type. + * @param string $size Field size + * @param array $opts Field options array + * @return array Field specifier array + */ + function addField( $name, $type, $size = NULL, $opts = NULL ) { + $field_id = $this->FieldID( $name ); + + // Set the field index so we know where we are + $this->current_field = $field_id; + + // Set the field name (required) + $this->fields[$field_id]['NAME'] = $name; + + // Set the field type (required) + $this->fields[$field_id]['TYPE'] = $type; + + // Set the field size (optional) + if( isset( $size ) ) { + $this->fields[$field_id]['SIZE'] = $size; + } + + // Set the field options + if( isset( $opts ) ) { + $this->fields[$field_id]['OPTS'] = array($opts); + } else { + $this->fields[$field_id]['OPTS'] = array(); + } + } + + /** + * Adds a field option to the current field specifier + * + * This method adds a field option allowed by the ADOdb datadict + * and appends it to the given field. + * + * @param string $field Field name + * @param string $opt ADOdb field option + * @param mixed $value Field option value + * @return array Field specifier array + */ + function addFieldOpt( $field, $opt, $value = NULL ) { + if( $this->currentPlatform ) { + if( !isset( $value ) ) { + $this->fields[$this->FieldID( $field )]['OPTS'][] = $opt; + // Add the option and value + } else { + $this->fields[$this->FieldID( $field )]['OPTS'][] = array( $opt => $value ); + } + } + } + + /** + * Adds an option to the table + * + * This method takes a comma-separated list of table-level options + * and appends them to the table object. + * + * @param string $opt Table option + * @return array Options + */ + function addTableOpt( $opt ) { + if(isset($this->currentPlatform)) { + $this->opts[$this->parent->db->databaseType] = $opt; + } + return $this->opts; + } + + + /** + * Generates the SQL that will create the table in the database + * + * @param object $xmls adoSchema object + * @return array Array containing table creation SQL + */ + function create( &$xmls ) { + $sql = array(); + + // drop any existing indexes + if( is_array( $legacy_indexes = $xmls->dict->MetaIndexes( $this->name ) ) ) { + foreach( $legacy_indexes as $index => $index_details ) { + $sql[] = $xmls->dict->DropIndexSQL( $index, $this->name ); + } + } + + // remove fields to be dropped from table object + foreach( $this->drop_field as $field ) { + unset( $this->fields[$field] ); + } + + // if table exists + if( is_array( $legacy_fields = $xmls->dict->MetaColumns( $this->name ) ) ) { + // drop table + if( $this->drop_table ) { + $sql[] = $xmls->dict->DropTableSQL( $this->name ); + + return $sql; + } + + // drop any existing fields not in schema + foreach( $legacy_fields as $field_id => $field ) { + if( !isset( $this->fields[$field_id] ) ) { + $sql[] = $xmls->dict->DropColumnSQL( $this->name, $field->name ); + } + } + // if table doesn't exist + } else { + if( $this->drop_table ) { + return $sql; + } + + $legacy_fields = array(); + } + + // Loop through the field specifier array, building the associative array for the field options + $fldarray = array(); + + foreach( $this->fields as $field_id => $finfo ) { + // Set an empty size if it isn't supplied + if( !isset( $finfo['SIZE'] ) ) { + $finfo['SIZE'] = ''; + } + + // Initialize the field array with the type and size + $fldarray[$field_id] = array( + 'NAME' => $finfo['NAME'], + 'TYPE' => $finfo['TYPE'], + 'SIZE' => $finfo['SIZE'] + ); + + // Loop through the options array and add the field options. + if( isset( $finfo['OPTS'] ) ) { + foreach( $finfo['OPTS'] as $opt ) { + // Option has an argument. + if( is_array( $opt ) ) { + $key = key( $opt ); + $value = $opt[key( $opt )]; + @$fldarray[$field_id][$key] .= $value; + // Option doesn't have arguments + } else { + $fldarray[$field_id][$opt] = $opt; + } + } + } + } + + if( empty( $legacy_fields ) ) { + // Create the new table + $sql[] = $xmls->dict->CreateTableSQL( $this->name, $fldarray, $this->opts ); + logMsg( end( $sql ), 'Generated CreateTableSQL' ); + } else { + // Upgrade an existing table + logMsg( "Upgrading {$this->name} using '{$xmls->upgrade}'" ); + switch( $xmls->upgrade ) { + // Use ChangeTableSQL + case 'ALTER': + logMsg( 'Generated ChangeTableSQL (ALTERing table)' ); + $sql[] = $xmls->dict->ChangeTableSQL( $this->name, $fldarray, $this->opts ); + break; + case 'REPLACE': + logMsg( 'Doing upgrade REPLACE (testing)' ); + $sql[] = $xmls->dict->DropTableSQL( $this->name ); + $sql[] = $xmls->dict->CreateTableSQL( $this->name, $fldarray, $this->opts ); + break; + // ignore table + default: + return array(); + } + } + + foreach( $this->indexes as $index ) { + $sql[] = $index->create( $xmls ); + } + + if( isset( $this->data ) ) { + $sql[] = $this->data->create( $xmls ); + } + + return $sql; + } + + /** + * Marks a field or table for destruction + */ + function drop() { + if( isset( $this->current_field ) ) { + // Drop the current field + logMsg( "Dropping field '{$this->current_field}' from table '{$this->name}'" ); + // $this->drop_field[$this->current_field] = $xmls->dict->DropColumnSQL( $this->name, $this->current_field ); + $this->drop_field[$this->current_field] = $this->current_field; + } else { + // Drop the current table + logMsg( "Dropping table '{$this->name}'" ); + // $this->drop_table = $xmls->dict->DropTableSQL( $this->name ); + $this->drop_table = TRUE; + } + } +} + +/** +* Creates an index object in ADOdb's datadict format +* +* This class stores information about a database index. As charactaristics +* of the index are loaded from the external source, methods and properties +* of this class are used to build up the index description in ADOdb's +* datadict format. +* +* @package axmls +* @access private +*/ +class dbIndex extends dbObject { + + /** + * @var string Index name + */ + var $name; + + /** + * @var array Index options: Index-level options + */ + var $opts = array(); + + /** + * @var array Indexed fields: Table columns included in this index + */ + var $columns = array(); + + /** + * @var boolean Mark index for destruction + * @access private + */ + var $drop = FALSE; + + /** + * Initializes the new dbIndex object. + * + * @param object $parent Parent object + * @param array $attributes Attributes + * + * @internal + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + + $this->name = $this->prefix ($attributes['NAME']); + } + + /** + * XML Callback to process start elements + * + * Processes XML opening tags. + * Elements currently processed are: DROP, CLUSTERED, BITMAP, UNIQUE, FULLTEXT & HASH. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'DROP': + $this->drop(); + break; + case 'CLUSTERED': + case 'BITMAP': + case 'UNIQUE': + case 'FULLTEXT': + case 'HASH': + // Add index Option + $this->addIndexOpt( $this->currentElement ); + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * Processes XML cdata. + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Index field name + case 'COL': + $this->addField( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'INDEX': + xml_set_object( $parser, $this->parent ); + break; + } + } + + /** + * Adds a field to the index + * + * @param string $name Field name + * @return string Field list + */ + function addField( $name ) { + $this->columns[$this->FieldID( $name )] = $name; + + // Return the field list + return $this->columns; + } + + /** + * Adds options to the index + * + * @param string $opt Comma-separated list of index options. + * @return string Option list + */ + function addIndexOpt( $opt ) { + $this->opts[] = $opt; + + // Return the options list + return $this->opts; + } + + /** + * Generates the SQL that will create the index in the database + * + * @param object $xmls adoSchema object + * @return array Array containing index creation SQL + */ + function create( &$xmls ) { + if( $this->drop ) { + return NULL; + } + + // eliminate any columns that aren't in the table + foreach( $this->columns as $id => $col ) { + if( !isset( $this->parent->fields[$id] ) ) { + unset( $this->columns[$id] ); + } + } + + return $xmls->dict->CreateIndexSQL( $this->name, $this->parent->name, $this->columns, $this->opts ); + } + + /** + * Marks an index for destruction + */ + function drop() { + $this->drop = TRUE; + } +} + +/** +* Creates a data object in ADOdb's datadict format +* +* This class stores information about table data, and is called +* when we need to load field data into a table. +* +* @package axmls +* @access private +*/ +class dbData extends dbObject { + + var $data = array(); + + var $row; + + /** + * Initializes the new dbData object. + * + * @param object $parent Parent object + * @param array $attributes Attributes + * + * @internal + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + } + + /** + * XML Callback to process start elements + * + * Processes XML opening tags. + * Elements currently processed are: ROW and F (field). + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'ROW': + $this->row = count( $this->data ); + $this->data[$this->row] = array(); + break; + case 'F': + $this->addField($attributes); + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + * + * Processes XML cdata. + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Index field name + case 'F': + $this->addData( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'DATA': + xml_set_object( $parser, $this->parent ); + break; + } + } + + /** + * Adds a field to the insert + * + * @param string $name Field name + * @return string Field list + */ + function addField( $attributes ) { + // check we're in a valid row + if( !isset( $this->row ) || !isset( $this->data[$this->row] ) ) { + return; + } + + // Set the field index so we know where we are + if( isset( $attributes['NAME'] ) ) { + $this->current_field = $this->FieldID( $attributes['NAME'] ); + } else { + $this->current_field = count( $this->data[$this->row] ); + } + + // initialise data + if( !isset( $this->data[$this->row][$this->current_field] ) ) { + $this->data[$this->row][$this->current_field] = ''; + } + } + + /** + * Adds options to the index + * + * @param string $opt Comma-separated list of index options. + * @return string Option list + */ + function addData( $cdata ) { + // check we're in a valid field + if ( isset( $this->data[$this->row][$this->current_field] ) ) { + // add data to field + $this->data[$this->row][$this->current_field] .= $cdata; + } + } + + /** + * Generates the SQL that will add/update the data in the database + * + * @param object $xmls adoSchema object + * @return array Array containing index creation SQL + */ + function create( &$xmls ) { + $table = $xmls->dict->TableName($this->parent->name); + $table_field_count = count($this->parent->fields); + $tables = $xmls->db->MetaTables(); + $sql = array(); + + $ukeys = $xmls->db->MetaPrimaryKeys( $table ); + if( !empty( $this->parent->indexes ) and !empty( $ukeys ) ) { + foreach( $this->parent->indexes as $indexObj ) { + if( !in_array( $indexObj->name, $ukeys ) ) $ukeys[] = $indexObj->name; + } + } + + // eliminate any columns that aren't in the table + foreach( $this->data as $row ) { + $table_fields = $this->parent->fields; + $fields = array(); + $rawfields = array(); // Need to keep some of the unprocessed data on hand. + + foreach( $row as $field_id => $field_data ) { + if( !array_key_exists( $field_id, $table_fields ) ) { + if( is_numeric( $field_id ) ) { + $field_id = reset( array_keys( $table_fields ) ); + } else { + continue; + } + } + + $name = $table_fields[$field_id]['NAME']; + + switch( $table_fields[$field_id]['TYPE'] ) { + case 'I': + case 'I1': + case 'I2': + case 'I4': + case 'I8': + $fields[$name] = intval($field_data); + break; + case 'C': + case 'C2': + case 'X': + case 'X2': + default: + $fields[$name] = $xmls->db->qstr( $field_data ); + $rawfields[$name] = $field_data; + } + + unset($table_fields[$field_id]); + + } + + // check that at least 1 column is specified + if( empty( $fields ) ) { + continue; + } + + // check that no required columns are missing + if( count( $fields ) < $table_field_count ) { + foreach( $table_fields as $field ) { + if( isset( $field['OPTS'] ) and ( in_array( 'NOTNULL', $field['OPTS'] ) || in_array( 'KEY', $field['OPTS'] ) ) && !in_array( 'AUTOINCREMENT', $field['OPTS'] ) ) { + continue(2); + } + } + } + + // The rest of this method deals with updating existing data records. + + if( !in_array( $table, $tables ) or ( $mode = $xmls->existingData() ) == XMLS_MODE_INSERT ) { + // Table doesn't yet exist, so it's safe to insert. + logMsg( "$table doesn't exist, inserting or mode is INSERT" ); + $sql[] = 'INSERT INTO '. $table .' ('. implode( ',', array_keys( $fields ) ) .') VALUES ('. implode( ',', $fields ) .')'; + continue; + } + + // Prepare to test for potential violations. Get primary keys and unique indexes + $mfields = array_merge( $fields, $rawfields ); + $keyFields = array_intersect( $ukeys, array_keys( $mfields ) ); + + if( empty( $ukeys ) or count( $keyFields ) == 0 ) { + // No unique keys in schema, so safe to insert + logMsg( "Either schema or data has no unique keys, so safe to insert" ); + $sql[] = 'INSERT INTO '. $table .' ('. implode( ',', array_keys( $fields ) ) .') VALUES ('. implode( ',', $fields ) .')'; + continue; + } + + // Select record containing matching unique keys. + $where = ''; + foreach( $ukeys as $key ) { + if( isset( $mfields[$key] ) and $mfields[$key] ) { + if( $where ) $where .= ' AND '; + $where .= $key . ' = ' . $xmls->db->qstr( $mfields[$key] ); + } + } + $records = $xmls->db->Execute( 'SELECT * FROM ' . $table . ' WHERE ' . $where ); + switch( $records->RecordCount() ) { + case 0: + // No matching record, so safe to insert. + logMsg( "No matching records. Inserting new row with unique data" ); + $sql[] = $xmls->db->GetInsertSQL( $records, $mfields ); + break; + case 1: + // Exactly one matching record, so we can update if the mode permits. + logMsg( "One matching record..." ); + if( $mode == XMLS_MODE_UPDATE ) { + logMsg( "...Updating existing row from unique data" ); + $sql[] = $xmls->db->GetUpdateSQL( $records, $mfields ); + } + break; + default: + // More than one matching record; the result is ambiguous, so we must ignore the row. + logMsg( "More than one matching record. Ignoring row." ); + } + } + return $sql; + } +} + +/** +* Creates the SQL to execute a list of provided SQL queries +* +* @package axmls +* @access private +*/ +class dbQuerySet extends dbObject { + + /** + * @var array List of SQL queries + */ + var $queries = array(); + + /** + * @var string String used to build of a query line by line + */ + var $query; + + /** + * @var string Query prefix key + */ + var $prefixKey = ''; + + /** + * @var boolean Auto prefix enable (TRUE) + */ + var $prefixMethod = 'AUTO'; + + /** + * Initializes the query set. + * + * @param object $parent Parent object + * @param array $attributes Attributes + */ + function __construct( &$parent, $attributes = NULL ) { + $this->parent = $parent; + + // Overrides the manual prefix key + if( isset( $attributes['KEY'] ) ) { + $this->prefixKey = $attributes['KEY']; + } + + $prefixMethod = isset( $attributes['PREFIXMETHOD'] ) ? strtoupper( trim( $attributes['PREFIXMETHOD'] ) ) : ''; + + // Enables or disables automatic prefix prepending + switch( $prefixMethod ) { + case 'AUTO': + $this->prefixMethod = 'AUTO'; + break; + case 'MANUAL': + $this->prefixMethod = 'MANUAL'; + break; + case 'NONE': + $this->prefixMethod = 'NONE'; + break; + } + } + + /** + * XML Callback to process start elements. Elements currently + * processed are: QUERY. + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + $this->currentElement = strtoupper( $tag ); + + switch( $this->currentElement ) { + case 'QUERY': + // Create a new query in a SQL queryset. + // Ignore this query set if a platform is specified and it's different than the + // current connection platform. + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + $this->newQuery(); + } else { + $this->discardQuery(); + } + break; + default: + // print_r( array( $tag, $attributes ) ); + } + } + + /** + * XML Callback to process CDATA elements + */ + function _tag_cdata( &$parser, $cdata ) { + switch( $this->currentElement ) { + // Line of queryset SQL data + case 'QUERY': + $this->buildQuery( $cdata ); + break; + default: + + } + } + + /** + * XML Callback to process end elements + * + * @access private + */ + function _tag_close( &$parser, $tag ) { + $this->currentElement = ''; + + switch( strtoupper( $tag ) ) { + case 'QUERY': + // Add the finished query to the open query set. + $this->addQuery(); + break; + case 'SQL': + $this->parent->addSQL( $this->create( $this->parent ) ); + xml_set_object( $parser, $this->parent ); + $this->destroy(); + break; + default: + + } + } + + /** + * Re-initializes the query. + * + * @return boolean TRUE + */ + function newQuery() { + $this->query = ''; + + return TRUE; + } + + /** + * Discards the existing query. + * + * @return boolean TRUE + */ + function discardQuery() { + unset( $this->query ); + + return TRUE; + } + + /** + * Appends a line to a query that is being built line by line + * + * @param string $data Line of SQL data or NULL to initialize a new query + * @return string SQL query string. + */ + function buildQuery( $sql = NULL ) { + if( !isset( $this->query ) OR empty( $sql ) ) { + return FALSE; + } + + $this->query .= $sql; + + return $this->query; + } + + /** + * Adds a completed query to the query list + * + * @return string SQL of added query + */ + function addQuery() { + if( !isset( $this->query ) ) { + return FALSE; + } + + $this->queries[] = $return = trim($this->query); + + unset( $this->query ); + + return $return; + } + + /** + * Creates and returns the current query set + * + * @param object $xmls adoSchema object + * @return array Query set + */ + function create( &$xmls ) { + foreach( $this->queries as $id => $query ) { + switch( $this->prefixMethod ) { + case 'AUTO': + // Enable auto prefix replacement + + // Process object prefix. + // Evaluate SQL statements to prepend prefix to objects + $query = $this->prefixQuery( '/^\s*((?is)INSERT\s+(INTO\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + $query = $this->prefixQuery( '/^\s*((?is)UPDATE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + $query = $this->prefixQuery( '/^\s*((?is)DELETE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix ); + + // SELECT statements aren't working yet + #$data = preg_replace( '/(?ias)(^\s*SELECT\s+.*\s+FROM)\s+(\W\s*,?\s*)+((?i)\s+WHERE.*$)/', "\1 $prefix\2 \3", $data ); + + case 'MANUAL': + // If prefixKey is set and has a value then we use it to override the default constant XMLS_PREFIX. + // If prefixKey is not set, we use the default constant XMLS_PREFIX + if( isset( $this->prefixKey ) AND( $this->prefixKey !== '' ) ) { + // Enable prefix override + $query = str_replace( $this->prefixKey, $xmls->objectPrefix, $query ); + } else { + // Use default replacement + $query = str_replace( XMLS_PREFIX , $xmls->objectPrefix, $query ); + } + } + + $this->queries[$id] = trim( $query ); + } + + // Return the query set array + return $this->queries; + } + + /** + * Rebuilds the query with the prefix attached to any objects + * + * @param string $regex Regex used to add prefix + * @param string $query SQL query string + * @param string $prefix Prefix to be appended to tables, indices, etc. + * @return string Prefixed SQL query string. + */ + function prefixQuery( $regex, $query, $prefix = NULL ) { + if( !isset( $prefix ) ) { + return $query; + } + + if( preg_match( $regex, $query, $match ) ) { + $preamble = $match[1]; + $postamble = $match[5]; + $objectList = explode( ',', $match[3] ); + // $prefix = $prefix . '_'; + + $prefixedList = ''; + + foreach( $objectList as $object ) { + if( $prefixedList !== '' ) { + $prefixedList .= ', '; + } + + $prefixedList .= $prefix . trim( $object ); + } + + $query = $preamble . ' ' . $prefixedList . ' ' . $postamble; + } + + return $query; + } +} + +/** +* Loads and parses an XML file, creating an array of "ready-to-run" SQL statements +* +* This class is used to load and parse the XML file, to create an array of SQL statements +* that can be used to build a database, and to build the database using the SQL array. +* +* @tutorial getting_started.pkg +* +* @author Richard Tango-Lowy & Dan Cech +* @version $Revision: 1.62 $ +* +* @package axmls +*/ +class adoSchema { + + /** + * @var array Array containing SQL queries to generate all objects + * @access private + */ + var $sqlArray; + + /** + * @var object ADOdb connection object + * @access private + */ + var $db; + + /** + * @var object ADOdb Data Dictionary + * @access private + */ + var $dict; + + /** + * @var string Current XML element + * @access private + */ + var $currentElement = ''; + + /** + * @var string If set (to 'ALTER' or 'REPLACE'), upgrade an existing database + * @access private + */ + var $upgrade = ''; + + /** + * @var string Optional object prefix + * @access private + */ + var $objectPrefix = ''; + + /** + * @var long Original Magic Quotes Runtime value + * @access private + */ + var $mgq; + + /** + * @var long System debug + * @access private + */ + var $debug; + + /** + * @var string Regular expression to find schema version + * @access private + */ + var $versionRegex = '//'; + + /** + * @var string Current schema version + * @access private + */ + var $schemaVersion; + + /** + * @var int Success of last Schema execution + */ + var $success; + + /** + * @var bool Execute SQL inline as it is generated + */ + var $executeInline; + + /** + * @var bool Continue SQL execution if errors occur + */ + var $continueOnError; + + /** + * @var int How to handle existing data rows (insert, update, or ignore) + */ + var $existingData; + + /** + * Creates an adoSchema object + * + * Creating an adoSchema object is the first step in processing an XML schema. + * The only parameter is an ADOdb database connection object, which must already + * have been created. + * + * @param object $db ADOdb database connection object. + */ + function __construct( $db ) { + // Initialize the environment + $this->mgq = get_magic_quotes_runtime(); + #set_magic_quotes_runtime(0); + ini_set("magic_quotes_runtime", 0); + + $this->db = $db; + $this->debug = $this->db->debug; + $this->dict = NewDataDictionary( $this->db ); + $this->sqlArray = array(); + $this->schemaVersion = XMLS_SCHEMA_VERSION; + $this->executeInline( XMLS_EXECUTE_INLINE ); + $this->continueOnError( XMLS_CONTINUE_ON_ERROR ); + $this->existingData( XMLS_EXISTING_DATA ); + $this->setUpgradeMethod(); + } + + /** + * Sets the method to be used for upgrading an existing database + * + * Use this method to specify how existing database objects should be upgraded. + * The method option can be set to ALTER, REPLACE, BEST, or NONE. ALTER attempts to + * alter each database object directly, REPLACE attempts to rebuild each object + * from scratch, BEST attempts to determine the best upgrade method for each + * object, and NONE disables upgrading. + * + * This method is not yet used by AXMLS, but exists for backward compatibility. + * The ALTER method is automatically assumed when the adoSchema object is + * instantiated; other upgrade methods are not currently supported. + * + * @param string $method Upgrade method (ALTER|REPLACE|BEST|NONE) + * @returns string Upgrade method used + */ + function SetUpgradeMethod( $method = '' ) { + if( !is_string( $method ) ) { + return FALSE; + } + + $method = strtoupper( $method ); + + // Handle the upgrade methods + switch( $method ) { + case 'ALTER': + $this->upgrade = $method; + break; + case 'REPLACE': + $this->upgrade = $method; + break; + case 'BEST': + $this->upgrade = 'ALTER'; + break; + case 'NONE': + $this->upgrade = 'NONE'; + break; + default: + // Use default if no legitimate method is passed. + $this->upgrade = XMLS_DEFAULT_UPGRADE_METHOD; + } + + return $this->upgrade; + } + + /** + * Specifies how to handle existing data row when there is a unique key conflict. + * + * The existingData setting specifies how the parser should handle existing rows + * when a unique key violation occurs during the insert. This can happen when inserting + * data into an existing table with one or more primary keys or unique indexes. + * The existingData method takes one of three options: XMLS_MODE_INSERT attempts + * to always insert the data as a new row. In the event of a unique key violation, + * the database will generate an error. XMLS_MODE_UPDATE attempts to update the + * any existing rows with the new data based upon primary or unique key fields in + * the schema. If the data row in the schema specifies no unique fields, the row + * data will be inserted as a new row. XMLS_MODE_IGNORE specifies that any data rows + * that would result in a unique key violation be ignored; no inserts or updates will + * take place. For backward compatibility, the default setting is XMLS_MODE_INSERT, + * but XMLS_MODE_UPDATE will generally be the most appropriate setting. + * + * @param int $mode XMLS_MODE_INSERT, XMLS_MODE_UPDATE, or XMLS_MODE_IGNORE + * @return int current mode + */ + function ExistingData( $mode = NULL ) { + if( is_int( $mode ) ) { + switch( $mode ) { + case XMLS_MODE_UPDATE: + $mode = XMLS_MODE_UPDATE; + break; + case XMLS_MODE_IGNORE: + $mode = XMLS_MODE_IGNORE; + break; + case XMLS_MODE_INSERT: + $mode = XMLS_MODE_INSERT; + break; + default: + $mode = XMLS_EXISTING_DATA; + break; + } + $this->existingData = $mode; + } + + return $this->existingData; + } + + /** + * Enables/disables inline SQL execution. + * + * Call this method to enable or disable inline execution of the schema. If the mode is set to TRUE (inline execution), + * AXMLS applies the SQL to the database immediately as each schema entity is parsed. If the mode + * is set to FALSE (post execution), AXMLS parses the entire schema and you will need to call adoSchema::ExecuteSchema() + * to apply the schema to the database. + * + * @param bool $mode execute + * @return bool current execution mode + * + * @see ParseSchema(), ExecuteSchema() + */ + function ExecuteInline( $mode = NULL ) { + if( is_bool( $mode ) ) { + $this->executeInline = $mode; + } + + return $this->executeInline; + } + + /** + * Enables/disables SQL continue on error. + * + * Call this method to enable or disable continuation of SQL execution if an error occurs. + * If the mode is set to TRUE (continue), AXMLS will continue to apply SQL to the database, even if an error occurs. + * If the mode is set to FALSE (halt), AXMLS will halt execution of generated sql if an error occurs, though parsing + * of the schema will continue. + * + * @param bool $mode execute + * @return bool current continueOnError mode + * + * @see addSQL(), ExecuteSchema() + */ + function ContinueOnError( $mode = NULL ) { + if( is_bool( $mode ) ) { + $this->continueOnError = $mode; + } + + return $this->continueOnError; + } + + /** + * Loads an XML schema from a file and converts it to SQL. + * + * Call this method to load the specified schema (see the DTD for the proper format) from + * the filesystem and generate the SQL necessary to create the database + * described. This method automatically converts the schema to the latest + * axmls schema version. + * @see ParseSchemaString() + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute + */ + function ParseSchema( $filename, $returnSchema = FALSE ) { + return $this->ParseSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema ); + } + + /** + * Loads an XML schema from a file and converts it to SQL. + * + * Call this method to load the specified schema directly from a file (see + * the DTD for the proper format) and generate the SQL necessary to create + * the database described by the schema. Use this method when you are dealing + * with large schema files. Otherwise, ParseSchema() is faster. + * This method does not automatically convert the schema to the latest axmls + * schema version. You must convert the schema manually using either the + * ConvertSchemaFile() or ConvertSchemaString() method. + * @see ParseSchema() + * @see ConvertSchemaFile() + * @see ConvertSchemaString() + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + * + * @deprecated Replaced by adoSchema::ParseSchema() and adoSchema::ParseSchemaString() + * @see ParseSchema(), ParseSchemaString() + */ + function ParseSchemaFile( $filename, $returnSchema = FALSE ) { + // Open the file + if( !($fp = fopen( $filename, 'r' )) ) { + logMsg( 'Unable to open file' ); + return FALSE; + } + + // do version detection here + if( $this->SchemaFileVersion( $filename ) != $this->schemaVersion ) { + logMsg( 'Invalid Schema Version' ); + return FALSE; + } + + if( $returnSchema ) { + $xmlstring = ''; + while( $data = fread( $fp, 4096 ) ) { + $xmlstring .= $data . "\n"; + } + return $xmlstring; + } + + $this->success = 2; + + $xmlParser = $this->create_parser(); + + // Process the file + while( $data = fread( $fp, 4096 ) ) { + if( !xml_parse( $xmlParser, $data, feof( $fp ) ) ) { + die( sprintf( + "XML error: %s at line %d", + xml_error_string( xml_get_error_code( $xmlParser) ), + xml_get_current_line_number( $xmlParser) + ) ); + } + } + + xml_parser_free( $xmlParser ); + + return $this->sqlArray; + } + + /** + * Converts an XML schema string to SQL. + * + * Call this method to parse a string containing an XML schema (see the DTD for the proper format) + * and generate the SQL necessary to create the database described by the schema. + * @see ParseSchema() + * + * @param string $xmlstring XML schema string. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + */ + function ParseSchemaString( $xmlstring, $returnSchema = FALSE ) { + if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) { + logMsg( 'Empty or Invalid Schema' ); + return FALSE; + } + + // do version detection here + if( $this->SchemaStringVersion( $xmlstring ) != $this->schemaVersion ) { + logMsg( 'Invalid Schema Version' ); + return FALSE; + } + + if( $returnSchema ) { + return $xmlstring; + } + + $this->success = 2; + + $xmlParser = $this->create_parser(); + + if( !xml_parse( $xmlParser, $xmlstring, TRUE ) ) { + die( sprintf( + "XML error: %s at line %d", + xml_error_string( xml_get_error_code( $xmlParser) ), + xml_get_current_line_number( $xmlParser) + ) ); + } + + xml_parser_free( $xmlParser ); + + return $this->sqlArray; + } + + /** + * Loads an XML schema from a file and converts it to uninstallation SQL. + * + * Call this method to load the specified schema (see the DTD for the proper format) from + * the filesystem and generate the SQL necessary to remove the database described. + * @see RemoveSchemaString() + * + * @param string $file Name of XML schema file. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute + */ + function RemoveSchema( $filename, $returnSchema = FALSE ) { + return $this->RemoveSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema ); + } + + /** + * Converts an XML schema string to uninstallation SQL. + * + * Call this method to parse a string containing an XML schema (see the DTD for the proper format) + * and generate the SQL necessary to uninstall the database described by the schema. + * @see RemoveSchema() + * + * @param string $schema XML schema string. + * @param bool $returnSchema Return schema rather than parsing. + * @return array Array of SQL queries, ready to execute. + */ + function RemoveSchemaString( $schema, $returnSchema = FALSE ) { + + // grab current version + if( !( $version = $this->SchemaStringVersion( $schema ) ) ) { + return FALSE; + } + + return $this->ParseSchemaString( $this->TransformSchema( $schema, 'remove-' . $version), $returnSchema ); + } + + /** + * Applies the current XML schema to the database (post execution). + * + * Call this method to apply the current schema (generally created by calling + * ParseSchema() or ParseSchemaString() ) to the database (creating the tables, indexes, + * and executing other SQL specified in the schema) after parsing. + * @see ParseSchema(), ParseSchemaString(), ExecuteInline() + * + * @param array $sqlArray Array of SQL statements that will be applied rather than + * the current schema. + * @param boolean $continueOnErr Continue to apply the schema even if an error occurs. + * @returns integer 0 if failure, 1 if errors, 2 if successful. + */ + function ExecuteSchema( $sqlArray = NULL, $continueOnErr = NULL ) { + if( !is_bool( $continueOnErr ) ) { + $continueOnErr = $this->ContinueOnError(); + } + + if( !isset( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + + if( !is_array( $sqlArray ) ) { + $this->success = 0; + } else { + $this->success = $this->dict->ExecuteSQLArray( $sqlArray, $continueOnErr ); + } + + return $this->success; + } + + /** + * Returns the current SQL array. + * + * Call this method to fetch the array of SQL queries resulting from + * ParseSchema() or ParseSchemaString(). + * + * @param string $format Format: HTML, TEXT, or NONE (PHP array) + * @return array Array of SQL statements or FALSE if an error occurs + */ + function PrintSQL( $format = 'NONE' ) { + $sqlArray = null; + return $this->getSQL( $format, $sqlArray ); + } + + /** + * Saves the current SQL array to the local filesystem as a list of SQL queries. + * + * Call this method to save the array of SQL queries (generally resulting from a + * parsed XML schema) to the filesystem. + * + * @param string $filename Path and name where the file should be saved. + * @return boolean TRUE if save is successful, else FALSE. + */ + function SaveSQL( $filename = './schema.sql' ) { + + if( !isset( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + if( !isset( $sqlArray ) ) { + return FALSE; + } + + $fp = fopen( $filename, "w" ); + + foreach( $sqlArray as $key => $query ) { + fwrite( $fp, $query . ";\n" ); + } + fclose( $fp ); + } + + /** + * Create an xml parser + * + * @return object PHP XML parser object + * + * @access private + */ + function create_parser() { + // Create the parser + $xmlParser = xml_parser_create(); + xml_set_object( $xmlParser, $this ); + + // Initialize the XML callback functions + xml_set_element_handler( $xmlParser, '_tag_open', '_tag_close' ); + xml_set_character_data_handler( $xmlParser, '_tag_cdata' ); + + return $xmlParser; + } + + /** + * XML Callback to process start elements + * + * @access private + */ + function _tag_open( &$parser, $tag, $attributes ) { + switch( strtoupper( $tag ) ) { + case 'TABLE': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + $this->obj = new dbTable( $this, $attributes ); + xml_set_object( $parser, $this->obj ); + } + break; + case 'SQL': + if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { + $this->obj = new dbQuerySet( $this, $attributes ); + xml_set_object( $parser, $this->obj ); + } + break; + default: + // print_r( array( $tag, $attributes ) ); + } + + } + + /** + * XML Callback to process CDATA elements + * + * @access private + */ + function _tag_cdata( &$parser, $cdata ) { + } + + /** + * XML Callback to process end elements + * + * @access private + * @internal + */ + function _tag_close( &$parser, $tag ) { + + } + + /** + * Converts an XML schema string to the specified DTD version. + * + * Call this method to convert a string containing an XML schema to a different AXMLS + * DTD version. For instance, to convert a schema created for an pre-1.0 version for + * AXMLS (DTD version 0.1) to a newer version of the DTD (e.g. 0.2). If no DTD version + * parameter is specified, the schema will be converted to the current DTD version. + * If the newFile parameter is provided, the converted schema will be written to the specified + * file. + * @see ConvertSchemaFile() + * + * @param string $schema String containing XML schema that will be converted. + * @param string $newVersion DTD version to convert to. + * @param string $newFile File name of (converted) output file. + * @return string Converted XML schema or FALSE if an error occurs. + */ + function ConvertSchemaString( $schema, $newVersion = NULL, $newFile = NULL ) { + + // grab current version + if( !( $version = $this->SchemaStringVersion( $schema ) ) ) { + return FALSE; + } + + if( !isset ($newVersion) ) { + $newVersion = $this->schemaVersion; + } + + if( $version == $newVersion ) { + $result = $schema; + } else { + $result = $this->TransformSchema( $schema, 'convert-' . $version . '-' . $newVersion); + } + + if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) { + fwrite( $fp, $result ); + fclose( $fp ); + } + + return $result; + } + + /* + // compat for pre-4.3 - jlim + function _file_get_contents($path) + { + if (function_exists('file_get_contents')) return file_get_contents($path); + return join('',file($path)); + }*/ + + /** + * Converts an XML schema file to the specified DTD version. + * + * Call this method to convert the specified XML schema file to a different AXMLS + * DTD version. For instance, to convert a schema created for an pre-1.0 version for + * AXMLS (DTD version 0.1) to a newer version of the DTD (e.g. 0.2). If no DTD version + * parameter is specified, the schema will be converted to the current DTD version. + * If the newFile parameter is provided, the converted schema will be written to the specified + * file. + * @see ConvertSchemaString() + * + * @param string $filename Name of XML schema file that will be converted. + * @param string $newVersion DTD version to convert to. + * @param string $newFile File name of (converted) output file. + * @return string Converted XML schema or FALSE if an error occurs. + */ + function ConvertSchemaFile( $filename, $newVersion = NULL, $newFile = NULL ) { + + // grab current version + if( !( $version = $this->SchemaFileVersion( $filename ) ) ) { + return FALSE; + } + + if( !isset ($newVersion) ) { + $newVersion = $this->schemaVersion; + } + + if( $version == $newVersion ) { + $result = _file_get_contents( $filename ); + + // remove unicode BOM if present + if( substr( $result, 0, 3 ) == sprintf( '%c%c%c', 239, 187, 191 ) ) { + $result = substr( $result, 3 ); + } + } else { + $result = $this->TransformSchema( $filename, 'convert-' . $version . '-' . $newVersion, 'file' ); + } + + if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) { + fwrite( $fp, $result ); + fclose( $fp ); + } + + return $result; + } + + function TransformSchema( $schema, $xsl, $schematype='string' ) + { + // Fail if XSLT extension is not available + if( ! function_exists( 'xslt_create' ) ) { + return FALSE; + } + + $xsl_file = dirname( __FILE__ ) . '/xsl/' . $xsl . '.xsl'; + + // look for xsl + if( !is_readable( $xsl_file ) ) { + return FALSE; + } + + switch( $schematype ) + { + case 'file': + if( !is_readable( $schema ) ) { + return FALSE; + } + + $schema = _file_get_contents( $schema ); + break; + case 'string': + default: + if( !is_string( $schema ) ) { + return FALSE; + } + } + + $arguments = array ( + '/_xml' => $schema, + '/_xsl' => _file_get_contents( $xsl_file ) + ); + + // create an XSLT processor + $xh = xslt_create (); + + // set error handler + xslt_set_error_handler ($xh, array (&$this, 'xslt_error_handler')); + + // process the schema + $result = xslt_process ($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); + + xslt_free ($xh); + + return $result; + } + + /** + * Processes XSLT transformation errors + * + * @param object $parser XML parser object + * @param integer $errno Error number + * @param integer $level Error level + * @param array $fields Error information fields + * + * @access private + */ + function xslt_error_handler( $parser, $errno, $level, $fields ) { + if( is_array( $fields ) ) { + $msg = array( + 'Message Type' => ucfirst( $fields['msgtype'] ), + 'Message Code' => $fields['code'], + 'Message' => $fields['msg'], + 'Error Number' => $errno, + 'Level' => $level + ); + + switch( $fields['URI'] ) { + case 'arg:/_xml': + $msg['Input'] = 'XML'; + break; + case 'arg:/_xsl': + $msg['Input'] = 'XSL'; + break; + default: + $msg['Input'] = $fields['URI']; + } + + $msg['Line'] = $fields['line']; + } else { + $msg = array( + 'Message Type' => 'Error', + 'Error Number' => $errno, + 'Level' => $level, + 'Fields' => var_export( $fields, TRUE ) + ); + } + + $error_details = $msg['Message Type'] . ' in XSLT Transformation' . "\n" + . '' . "\n"; + + foreach( $msg as $label => $details ) { + $error_details .= '' . "\n"; + } + + $error_details .= '
' . $label . ': ' . htmlentities( $details ) . '
'; + + trigger_error( $error_details, E_USER_ERROR ); + } + + /** + * Returns the AXMLS Schema Version of the requested XML schema file. + * + * Call this method to obtain the AXMLS DTD version of the requested XML schema file. + * @see SchemaStringVersion() + * + * @param string $filename AXMLS schema file + * @return string Schema version number or FALSE on error + */ + function SchemaFileVersion( $filename ) { + // Open the file + if( !($fp = fopen( $filename, 'r' )) ) { + // die( 'Unable to open file' ); + return FALSE; + } + + // Process the file + while( $data = fread( $fp, 4096 ) ) { + if( preg_match( $this->versionRegex, $data, $matches ) ) { + return !empty( $matches[2] ) ? $matches[2] : XMLS_DEFAULT_SCHEMA_VERSION; + } + } + + return FALSE; + } + + /** + * Returns the AXMLS Schema Version of the provided XML schema string. + * + * Call this method to obtain the AXMLS DTD version of the provided XML schema string. + * @see SchemaFileVersion() + * + * @param string $xmlstring XML schema string + * @return string Schema version number or FALSE on error + */ + function SchemaStringVersion( $xmlstring ) { + if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) { + return FALSE; + } + + if( preg_match( $this->versionRegex, $xmlstring, $matches ) ) { + return !empty( $matches[2] ) ? $matches[2] : XMLS_DEFAULT_SCHEMA_VERSION; + } + + return FALSE; + } + + /** + * Extracts an XML schema from an existing database. + * + * Call this method to create an XML schema string from an existing database. + * If the data parameter is set to TRUE, AXMLS will include the data from the database + * in the schema. + * + * @param boolean $data Include data in schema dump + * @indent string indentation to use + * @prefix string extract only tables with given prefix + * @stripprefix strip prefix string when storing in XML schema + * @return string Generated XML schema + */ + function ExtractSchema( $data = FALSE, $indent = ' ', $prefix = '' , $stripprefix=false) { + $old_mode = $this->db->SetFetchMode( ADODB_FETCH_NUM ); + + $schema = '' . "\n" + . '' . "\n"; + if( is_array( $tables = $this->db->MetaTables( 'TABLES' ,false ,($prefix) ? str_replace('_','\_',$prefix).'%' : '') ) ) { + foreach( $tables as $table ) { + $schema .= $indent + . '' . "\n"; + + // grab details from database + $rs = $this->db->Execute( 'SELECT * FROM ' . $table . ' WHERE -1' ); + $fields = $this->db->MetaColumns( $table ); + $indexes = $this->db->MetaIndexes( $table ); + + if( is_array( $fields ) ) { + foreach( $fields as $details ) { + $extra = ''; + $content = array(); + + if( isset($details->max_length) && $details->max_length > 0 ) { + $extra .= ' size="' . $details->max_length . '"'; + } + + if( isset($details->primary_key) && $details->primary_key ) { + $content[] = ''; + } elseif( isset($details->not_null) && $details->not_null ) { + $content[] = ''; + } + + if( isset($details->has_default) && $details->has_default ) { + $content[] = ''; + } + + if( isset($details->auto_increment) && $details->auto_increment ) { + $content[] = ''; + } + + if( isset($details->unsigned) && $details->unsigned ) { + $content[] = ''; + } + + // this stops the creation of 'R' columns, + // AUTOINCREMENT is used to create auto columns + $details->primary_key = 0; + $type = $rs->MetaType( $details ); + + $schema .= str_repeat( $indent, 2 ) . '' . "\n"; + } else { + $schema .= "/>\n"; + } + } + } + + if( is_array( $indexes ) ) { + foreach( $indexes as $index => $details ) { + $schema .= str_repeat( $indent, 2 ) . '' . "\n"; + + if( $details['unique'] ) { + $schema .= str_repeat( $indent, 3 ) . '' . "\n"; + } + + foreach( $details['columns'] as $column ) { + $schema .= str_repeat( $indent, 3 ) . '' . htmlentities( $column ) . '' . "\n"; + } + + $schema .= str_repeat( $indent, 2 ) . '' . "\n"; + } + } + + if( $data ) { + $rs = $this->db->Execute( 'SELECT * FROM ' . $table ); + + if( is_object( $rs ) && !$rs->EOF ) { + $schema .= str_repeat( $indent, 2 ) . "\n"; + + while( $row = $rs->FetchRow() ) { + foreach( $row as $key => $val ) { + if ( $val != htmlentities( $val ) ) { + $row[$key] = ''; + } + } + + $schema .= str_repeat( $indent, 3 ) . '' . implode( '', $row ) . "\n"; + } + + $schema .= str_repeat( $indent, 2 ) . "\n"; + } + } + + $schema .= $indent . "
\n"; + } + } + + $this->db->SetFetchMode( $old_mode ); + + $schema .= '
'; + return $schema; + } + + /** + * Sets a prefix for database objects + * + * Call this method to set a standard prefix that will be prepended to all database tables + * and indices when the schema is parsed. Calling setPrefix with no arguments clears the prefix. + * + * @param string $prefix Prefix that will be prepended. + * @param boolean $underscore If TRUE, automatically append an underscore character to the prefix. + * @return boolean TRUE if successful, else FALSE + */ + function SetPrefix( $prefix = '', $underscore = TRUE ) { + switch( TRUE ) { + // clear prefix + case empty( $prefix ): + logMsg( 'Cleared prefix' ); + $this->objectPrefix = ''; + return TRUE; + // prefix too long + case strlen( $prefix ) > XMLS_PREFIX_MAXLEN: + // prefix contains invalid characters + case !preg_match( '/^[a-z][a-z0-9_]+$/i', $prefix ): + logMsg( 'Invalid prefix: ' . $prefix ); + return FALSE; + } + + if( $underscore AND substr( $prefix, -1 ) != '_' ) { + $prefix .= '_'; + } + + // prefix valid + logMsg( 'Set prefix: ' . $prefix ); + $this->objectPrefix = $prefix; + return TRUE; + } + + /** + * Returns an object name with the current prefix prepended. + * + * @param string $name Name + * @return string Prefixed name + * + * @access private + */ + function prefix( $name = '' ) { + // if prefix is set + if( !empty( $this->objectPrefix ) ) { + // Prepend the object prefix to the table name + // prepend after quote if used + return preg_replace( '/^(`?)(.+)$/', '$1' . $this->objectPrefix . '$2', $name ); + } + + // No prefix set. Use name provided. + return $name; + } + + /** + * Checks if element references a specific platform + * + * @param string $platform Requested platform + * @returns boolean TRUE if platform check succeeds + * + * @access private + */ + function supportedPlatform( $platform = NULL ) { + if( !empty( $platform ) ) { + $regex = '/(^|\|)' . $this->db->databaseType . '(\||$)/i'; + + if( preg_match( '/^- /', $platform ) ) { + if (preg_match ( $regex, substr( $platform, 2 ) ) ) { + logMsg( 'Platform ' . $platform . ' is NOT supported' ); + return FALSE; + } + } else { + if( !preg_match ( $regex, $platform ) ) { + logMsg( 'Platform ' . $platform . ' is NOT supported' ); + return FALSE; + } + } + } + + logMsg( 'Platform ' . $platform . ' is supported' ); + return TRUE; + } + + /** + * Clears the array of generated SQL. + * + * @access private + */ + function clearSQL() { + $this->sqlArray = array(); + } + + /** + * Adds SQL into the SQL array. + * + * @param mixed $sql SQL to Add + * @return boolean TRUE if successful, else FALSE. + * + * @access private + */ + function addSQL( $sql = NULL ) { + if( is_array( $sql ) ) { + foreach( $sql as $line ) { + $this->addSQL( $line ); + } + + return TRUE; + } + + if( is_string( $sql ) ) { + $this->sqlArray[] = $sql; + + // if executeInline is enabled, and either no errors have occurred or continueOnError is enabled, execute SQL. + if( $this->ExecuteInline() && ( $this->success == 2 || $this->ContinueOnError() ) ) { + $saved = $this->db->debug; + $this->db->debug = $this->debug; + $ok = $this->db->Execute( $sql ); + $this->db->debug = $saved; + + if( !$ok ) { + if( $this->debug ) { + ADOConnection::outp( $this->db->ErrorMsg() ); + } + + $this->success = 1; + } + } + + return TRUE; + } + + return FALSE; + } + + /** + * Gets the SQL array in the specified format. + * + * @param string $format Format + * @return mixed SQL + * + * @access private + */ + function getSQL( $format = NULL, $sqlArray = NULL ) { + if( !is_array( $sqlArray ) ) { + $sqlArray = $this->sqlArray; + } + + if( !is_array( $sqlArray ) ) { + return FALSE; + } + + switch( strtolower( $format ) ) { + case 'string': + case 'text': + return !empty( $sqlArray ) ? implode( ";\n\n", $sqlArray ) . ';' : ''; + case'html': + return !empty( $sqlArray ) ? nl2br( htmlentities( implode( ";\n\n", $sqlArray ) . ';' ) ) : ''; + } + + return $this->sqlArray; + } + + /** + * Destroys an adoSchema object. + * + * Call this method to clean up after an adoSchema object that is no longer in use. + * @deprecated adoSchema now cleans up automatically. + */ + function Destroy() { + ini_set("magic_quotes_runtime", $this->mgq ); + #set_magic_quotes_runtime( $this->mgq ); + unset( $this ); + } +} + +/** +* Message logging function +* +* @access private +*/ +function logMsg( $msg, $title = NULL, $force = FALSE ) { + if( XMLS_DEBUG or $force ) { + echo '
';
+
+		if( isset( $title ) ) {
+			echo '

' . htmlentities( $title ) . '

'; + } + + if( @is_object( $this ) ) { + echo '[' . get_class( $this ) . '] '; + } + + print_r( $msg ); + + echo '
'; + } +} diff --git a/ehcp/adodb5/adodb.inc.php b/ehcp/adodb5/adodb.inc.php new file mode 100644 index 0000000..5207cc0 --- /dev/null +++ b/ehcp/adodb5/adodb.inc.php @@ -0,0 +1,4960 @@ +fields is available on EOF + $ADODB_FETCH_MODE, // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default... + $ADODB_GETONE_EOF, + $ADODB_QUOTE_FIELDNAMES; // Allows you to force quotes (backticks) around field names in queries generated by getinsertsql and getupdatesql. + + //============================================================================================== + // GLOBAL SETUP + //============================================================================================== + + $ADODB_EXTENSION = defined('ADODB_EXTENSION'); + + // ******************************************************** + // Controls $ADODB_FORCE_TYPE mode. Default is ADODB_FORCE_VALUE (3). + // Used in GetUpdateSql and GetInsertSql functions. Thx to Niko, nuko#mbnet.fi + // + // 0 = ignore empty fields. All empty fields in array are ignored. + // 1 = force null. All empty, php null and string 'null' fields are changed to sql NULL values. + // 2 = force empty. All empty, php null and string 'null' fields are changed to sql empty '' or 0 values. + // 3 = force value. Value is left as it is. Php null and string 'null' are set to sql NULL values and empty fields '' are set to empty '' sql values. + + define('ADODB_FORCE_IGNORE',0); + define('ADODB_FORCE_NULL',1); + define('ADODB_FORCE_EMPTY',2); + define('ADODB_FORCE_VALUE',3); + // ******************************************************** + + + if (!$ADODB_EXTENSION || ADODB_EXTENSION < 4.0) { + + define('ADODB_BAD_RS','

Bad $rs in %s. Connection or SQL invalid. Try using $connection->debug=true;

'); + + // allow [ ] @ ` " and . in table names + define('ADODB_TABLE_REGEX','([]0-9a-z_\:\"\`\.\@\[-]*)'); + + // prefetching used by oracle + if (!defined('ADODB_PREFETCH_ROWS')) { + define('ADODB_PREFETCH_ROWS',10); + } + + + /** + * Fetch mode + * + * Set global variable $ADODB_FETCH_MODE to one of these constants or use + * the SetFetchMode() method to control how recordset fields are returned + * when fetching data. + * + * - NUM: array() + * - ASSOC: array('id' => 456, 'name' => 'john') + * - BOTH: array(0 => 456, 'id' => 456, 1 => 'john', 'name' => 'john') + * - DEFAULT: driver-dependent + */ + define('ADODB_FETCH_DEFAULT', 0); + define('ADODB_FETCH_NUM', 1); + define('ADODB_FETCH_ASSOC', 2); + define('ADODB_FETCH_BOTH', 3); + + /** + * Associative array case constants + * + * By defining the ADODB_ASSOC_CASE constant to one of these values, it is + * possible to control the case of field names (associative array's keys) + * when operating in ADODB_FETCH_ASSOC fetch mode. + * - LOWER: $rs->fields['orderid'] + * - UPPER: $rs->fields['ORDERID'] + * - NATIVE: $rs->fields['OrderID'] (or whatever the RDBMS will return) + * + * The default is to use native case-names. + * + * NOTE: This functionality is not implemented everywhere, it currently + * works only with: mssql, odbc, oci8 and ibase derived drivers + */ + define('ADODB_ASSOC_CASE_LOWER', 0); + define('ADODB_ASSOC_CASE_UPPER', 1); + define('ADODB_ASSOC_CASE_NATIVE', 2); + + + if (!defined('TIMESTAMP_FIRST_YEAR')) { + define('TIMESTAMP_FIRST_YEAR',100); + } + + /** + * AutoExecute constants + * (moved from adodb-pear.inc.php since they are only used in here) + */ + define('DB_AUTOQUERY_INSERT', 1); + define('DB_AUTOQUERY_UPDATE', 2); + + + // PHP's version scheme makes converting to numbers difficult - workaround + $_adodb_ver = (float) PHP_VERSION; + if ($_adodb_ver >= 5.2) { + define('ADODB_PHPVER',0x5200); + } else if ($_adodb_ver >= 5.0) { + define('ADODB_PHPVER',0x5000); + } else { + die("PHP5 or later required. You are running ".PHP_VERSION); + } + unset($_adodb_ver); + } + + + /** + Accepts $src and $dest arrays, replacing string $data + */ + function ADODB_str_replace($src, $dest, $data) { + if (ADODB_PHPVER >= 0x4050) { + return str_replace($src,$dest,$data); + } + + $s = reset($src); + $d = reset($dest); + while ($s !== false) { + $data = str_replace($s,$d,$data); + $s = next($src); + $d = next($dest); + } + return $data; + } + + function ADODB_Setup() { + GLOBAL + $ADODB_vers, // database version + $ADODB_COUNTRECS, // count number of records returned - slows down query + $ADODB_CACHE_DIR, // directory to cache recordsets + $ADODB_FETCH_MODE, + $ADODB_CACHE, + $ADODB_CACHE_CLASS, + $ADODB_FORCE_TYPE, + $ADODB_GETONE_EOF, + $ADODB_QUOTE_FIELDNAMES; + + if (empty($ADODB_CACHE_CLASS)) { + $ADODB_CACHE_CLASS = 'ADODB_Cache_File' ; + } + $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT; + $ADODB_FORCE_TYPE = ADODB_FORCE_VALUE; + $ADODB_GETONE_EOF = null; + + if (!isset($ADODB_CACHE_DIR)) { + $ADODB_CACHE_DIR = '/tmp'; //(isset($_ENV['TMP'])) ? $_ENV['TMP'] : '/tmp'; + } else { + // do not accept url based paths, eg. http:/ or ftp:/ + if (strpos($ADODB_CACHE_DIR,'://') !== false) { + die("Illegal path http:// or ftp://"); + } + } + + + // Initialize random number generator for randomizing cache flushes + // -- note Since PHP 4.2.0, the seed becomes optional and defaults to a random value if omitted. + srand(((double)microtime())*1000000); + + /** + * ADODB version as a string. + */ + $ADODB_vers = 'v5.20.4 30-Mar-2016'; + + /** + * Determines whether recordset->RecordCount() is used. + * Set to false for highest performance -- RecordCount() will always return -1 then + * for databases that provide "virtual" recordcounts... + */ + if (!isset($ADODB_COUNTRECS)) { + $ADODB_COUNTRECS = true; + } + } + + + //============================================================================================== + // CHANGE NOTHING BELOW UNLESS YOU ARE DESIGNING ADODB + //============================================================================================== + + ADODB_Setup(); + + //============================================================================================== + // CLASS ADOFieldObject + //============================================================================================== + /** + * Helper class for FetchFields -- holds info on a column + */ + class ADOFieldObject { + var $name = ''; + var $max_length=0; + var $type=""; +/* + // additional fields by dannym... (danny_milo@yahoo.com) + var $not_null = false; + // actually, this has already been built-in in the postgres, fbsql AND mysql module? ^-^ + // so we can as well make not_null standard (leaving it at "false" does not harm anyways) + + var $has_default = false; // this one I have done only in mysql and postgres for now ... + // others to come (dannym) + var $default_value; // default, if any, and supported. Check has_default first. +*/ + } + + + function _adodb_safedate($s) { + return str_replace(array("'", '\\'), '', $s); + } + + // parse date string to prevent injection attack + // date string will have one quote at beginning e.g. '3434343' + function _adodb_safedateq($s) { + $len = strlen($s); + if ($s[0] !== "'") { + $s2 = "'".$s[0]; + } else { + $s2 = "'"; + } + for($i=1; $i<$len; $i++) { + $ch = $s[$i]; + if ($ch === '\\') { + $s2 .= "'"; + break; + } elseif ($ch === "'") { + $s2 .= $ch; + break; + } + + $s2 .= $ch; + } + + return strlen($s2) == 0 ? 'null' : $s2; + } + + + // for transaction handling + + function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection) { + //print "Errorno ($fn errno=$errno m=$errmsg) "; + $thisConnection->_transOK = false; + if ($thisConnection->_oldRaiseFn) { + $fn = $thisConnection->_oldRaiseFn; + $fn($dbms, $fn, $errno, $errmsg, $p1, $p2,$thisConnection); + } + } + + //------------------ + // class for caching + class ADODB_Cache_File { + + var $createdir = true; // requires creation of temp dirs + + function __construct() { + global $ADODB_INCLUDED_CSV; + if (empty($ADODB_INCLUDED_CSV)) { + include_once(ADODB_DIR.'/adodb-csvlib.inc.php'); + } + } + + // write serialised recordset to cache item/file + function writecache($filename, $contents, $debug, $secs2cache) { + return adodb_write_file($filename, $contents,$debug); + } + + // load serialised recordset and unserialise it + function &readcache($filename, &$err, $secs2cache, $rsClass) { + $rs = csv2rs($filename,$err,$secs2cache,$rsClass); + return $rs; + } + + // flush all items in cache + function flushall($debug=false) { + global $ADODB_CACHE_DIR; + + $rez = false; + + if (strlen($ADODB_CACHE_DIR) > 1) { + $rez = $this->_dirFlush($ADODB_CACHE_DIR); + if ($debug) { + ADOConnection::outp( "flushall: $ADODB_CACHE_DIR
\n". $rez."
"); + } + } + return $rez; + } + + // flush one file in cache + function flushcache($f, $debug=false) { + if (!@unlink($f)) { + if ($debug) { + ADOConnection::outp( "flushcache: failed for $f"); + } + } + } + + function getdirname($hash) { + global $ADODB_CACHE_DIR; + if (!isset($this->notSafeMode)) { + $this->notSafeMode = !ini_get('safe_mode'); + } + return ($this->notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($hash,0,2) : $ADODB_CACHE_DIR; + } + + // create temp directories + function createdir($hash, $debug) { + global $ADODB_CACHE_PERMS; + + $dir = $this->getdirname($hash); + if ($this->notSafeMode && !file_exists($dir)) { + $oldu = umask(0); + if (!@mkdir($dir, empty($ADODB_CACHE_PERMS) ? 0771 : $ADODB_CACHE_PERMS)) { + if(!is_dir($dir) && $debug) { + ADOConnection::outp("Cannot create $dir"); + } + } + umask($oldu); + } + + return $dir; + } + + /** + * Private function to erase all of the files and subdirectories in a directory. + * + * Just specify the directory, and tell it if you want to delete the directory or just clear it out. + * Note: $kill_top_level is used internally in the function to flush subdirectories. + */ + function _dirFlush($dir, $kill_top_level = false) { + if(!$dh = @opendir($dir)) return; + + while (($obj = readdir($dh))) { + if($obj=='.' || $obj=='..') continue; + $f = $dir.'/'.$obj; + + if (strpos($obj,'.cache')) { + @unlink($f); + } + if (is_dir($f)) { + $this->_dirFlush($f, true); + } + } + if ($kill_top_level === true) { + @rmdir($dir); + } + return true; + } + } + + //============================================================================================== + // CLASS ADOConnection + //============================================================================================== + + /** + * Connection object. For connecting to databases, and executing queries. + */ + abstract class ADOConnection { + // + // PUBLIC VARS + // + var $dataProvider = 'native'; + var $databaseType = ''; /// RDBMS currently in use, eg. odbc, mysql, mssql + var $database = ''; /// Name of database to be used. + var $host = ''; /// The hostname of the database server + var $user = ''; /// The username which is used to connect to the database server. + var $password = ''; /// Password for the username. For security, we no longer store it. + var $debug = false; /// if set to true will output sql statements + var $maxblobsize = 262144; /// maximum size of blobs or large text fields (262144 = 256K)-- some db's die otherwise like foxpro + var $concat_operator = '+'; /// default concat operator -- change to || for Oracle/Interbase + var $substr = 'substr'; /// substring operator + var $length = 'length'; /// string length ofperator + var $random = 'rand()'; /// random function + var $upperCase = 'upper'; /// uppercase function + var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt. + var $true = '1'; /// string that represents TRUE for a database + var $false = '0'; /// string that represents FALSE for a database + var $replaceQuote = "\\'"; /// string to use to replace quotes + var $nameQuote = '"'; /// string to use to quote identifiers and names + var $charSet=false; /// character set to use - only for interbase, postgres and oci8 + var $metaDatabasesSQL = ''; + var $metaTablesSQL = ''; + var $uniqueOrderBy = false; /// All order by columns have to be unique + var $emptyDate = ' '; + var $emptyTimeStamp = ' '; + var $lastInsID = false; + //-- + var $hasInsertID = false; /// supports autoincrement ID? + var $hasAffectedRows = false; /// supports affected rows for update/delete? + var $hasTop = false; /// support mssql/access SELECT TOP 10 * FROM TABLE + var $hasLimit = false; /// support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + var $readOnly = false; /// this is a readonly database - used by phpLens + var $hasMoveFirst = false; /// has ability to run MoveFirst(), scrolling backwards + var $hasGenID = false; /// can generate sequences using GenID(); + var $hasTransactions = true; /// has transactions + //-- + var $genID = 0; /// sequence id used by GenID(); + var $raiseErrorFn = false; /// error function to call + var $isoDates = false; /// accepts dates in ISO format + var $cacheSecs = 3600; /// cache for 1 hour + + // memcache + var $memCache = false; /// should we use memCache instead of caching in files + var $memCacheHost; /// memCache host + var $memCachePort = 11211; /// memCache port + var $memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + + var $sysDate = false; /// name of function that returns the current date + var $sysTimeStamp = false; /// name of function that returns the current timestamp + var $sysUTimeStamp = false; // name of function that returns the current timestamp accurate to the microsecond or nearest fraction + var $arrayClass = 'ADORecordSet_array'; /// name of class used to generate array recordsets, which are pre-downloaded recordsets + + var $noNullStrings = false; /// oracle specific stuff - if true ensures that '' is converted to ' ' + var $numCacheHits = 0; + var $numCacheMisses = 0; + var $pageExecuteCountRows = true; + var $uniqueSort = false; /// indicates that all fields in order by must be unique + var $leftOuter = false; /// operator to use for left outer join in WHERE clause + var $rightOuter = false; /// operator to use for right outer join in WHERE clause + var $ansiOuter = false; /// whether ansi outer join syntax supported + var $autoRollback = false; // autoRollback on PConnect(). + var $poorAffectedRows = false; // affectedRows not working or unreliable + + var $fnExecute = false; + var $fnCacheExecute = false; + var $blobEncodeType = false; // false=not required, 'I'=encode to integer, 'C'=encode to char + var $rsPrefix = "ADORecordSet_"; + + var $autoCommit = true; /// do not modify this yourself - actually private + var $transOff = 0; /// temporarily disable transactions + var $transCnt = 0; /// count of nested transactions + + var $fetchMode=false; + + var $null2null = 'null'; // in autoexecute/getinsertsql/getupdatesql, this value will be converted to a null + var $bulkBind = false; // enable 2D Execute array + // + // PRIVATE VARS + // + var $_oldRaiseFn = false; + var $_transOK = null; + var $_connectionID = false; /// The returned link identifier whenever a successful database connection is made. + var $_errorMsg = false; /// A variable which was used to keep the returned last error message. The value will + /// then returned by the errorMsg() function + var $_errorCode = false; /// Last error code, not guaranteed to be used - only by oci8 + var $_queryID = false; /// This variable keeps the last created result link identifier + + var $_isPersistentConnection = false; /// A boolean variable to state whether its a persistent connection or normal connection. */ + var $_bindInputArray = false; /// set to true if ADOConnection.Execute() permits binding of array parameters. + var $_evalAll = false; + var $_affected = false; + var $_logsql = false; + var $_transmode = ''; // transaction mode + + /* + * Additional parameters that may be passed to drivers in the connect string + * Driver must be coded to accept the parameters + */ + protected $connectionParameters = array(); + + /** + * Adds a parameter to the connection string. + * + * These parameters are added to the connection string when connecting, + * if the driver is coded to use it. + * + * @param string $parameter The name of the parameter to set + * @param string $value The value of the parameter + * + * @return null + * + * @example, for mssqlnative driver ('CharacterSet','UTF-8') + */ + final public function setConnectionParameter($parameter,$value) + { + + $this->connectionParameters[$parameter] = $value; + + } + + static function Version() { + global $ADODB_vers; + + // Semantic Version number matching regex + $regex = '^[vV]?(\d+\.\d+\.\d+' // Version number (X.Y.Z) with optional 'V' + . '(?:-(?:' // Optional preprod version: a '-' + . 'dev|' // followed by 'dev' + . '(?:(?:alpha|beta|rc)(?:\.\d+))' // or a preprod suffix and version number + . '))?)(?:\s|$)'; // Whitespace or end of string + + if (!preg_match("/$regex/", $ADODB_vers, $matches)) { + // This should normally not happen... Return whatever is between the start + // of the string and the first whitespace (or the end of the string). + self::outp("Invalid version number: '$ADODB_vers'", 'Version'); + $regex = '^[vV]?(.*?)(?:\s|$)'; + preg_match("/$regex/", $ADODB_vers, $matches); + } + return $matches[1]; + } + + /** + Get server version info... + + @returns An array with 2 elements: $arr['string'] is the description string, + and $arr[version] is the version (also a string). + */ + function ServerInfo() { + return array('description' => '', 'version' => ''); + } + + function IsConnected() { + return !empty($this->_connectionID); + } + + function _findvers($str) { + if (preg_match('/([0-9]+\.([0-9\.])+)/',$str, $arr)) { + return $arr[1]; + } else { + return ''; + } + } + + /** + * All error messages go through this bottleneck function. + * You can define your own handler by defining the function name in ADODB_OUTP. + */ + static function outp($msg,$newline=true) { + global $ADODB_FLUSH,$ADODB_OUTP; + + if (defined('ADODB_OUTP')) { + $fn = ADODB_OUTP; + $fn($msg,$newline); + return; + } else if (isset($ADODB_OUTP)) { + $fn = $ADODB_OUTP; + $fn($msg,$newline); + return; + } + + if ($newline) { + $msg .= "
\n"; + } + + if (isset($_SERVER['HTTP_USER_AGENT']) || !$newline) { + echo $msg; + } else { + echo strip_tags($msg); + } + + + if (!empty($ADODB_FLUSH) && ob_get_length() !== false) { + flush(); // do not flush if output buffering enabled - useless - thx to Jesse Mullan + } + + } + + function Time() { + $rs = $this->_Execute("select $this->sysTimeStamp"); + if ($rs && !$rs->EOF) { + return $this->UnixTimeStamp(reset($rs->fields)); + } + + return false; + } + + /** + * Connect to database + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * @param [forceNew] force new connection + * + * @return true or false + */ + function Connect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "", $forceNew = false) { + if ($argHostname != "") { + $this->host = $argHostname; + } + if ( strpos($this->host, ':') > 0 && isset($this->port) ) { + list($this->host, $this->port) = explode(":", $this->host, 2); + } + if ($argUsername != "") { + $this->user = $argUsername; + } + if ($argPassword != "") { + $this->password = 'not stored'; // not stored for security reasons + } + if ($argDatabaseName != "") { + $this->database = $argDatabaseName; + } + + $this->_isPersistentConnection = false; + + if ($forceNew) { + if ($rez=$this->_nconnect($this->host, $this->user, $argPassword, $this->database)) { + return true; + } + } else { + if ($rez=$this->_connect($this->host, $this->user, $argPassword, $this->database)) { + return true; + } + } + if (isset($rez)) { + $err = $this->ErrorMsg(); + if (empty($err)) { + $err = "Connection error to server '$argHostname' with user '$argUsername'"; + } + $ret = false; + } else { + $err = "Missing extension for ".$this->dataProvider; + $ret = 0; + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'CONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); + } + + $this->_connectionID = false; + if ($this->debug) { + ADOConnection::outp( $this->host.': '.$err); + } + return $ret; + } + + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName); + } + + + /** + * Always force a new connection to database - currently only works with oracle + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * + * @return true or false + */ + function NConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") { + return $this->Connect($argHostname, $argUsername, $argPassword, $argDatabaseName, true); + } + + /** + * Establish persistent connect to database + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * + * @return return true or false + */ + function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") { + + if (defined('ADODB_NEVER_PERSIST')) { + return $this->Connect($argHostname,$argUsername,$argPassword,$argDatabaseName); + } + + if ($argHostname != "") { + $this->host = $argHostname; + } + if ( strpos($this->host, ':') > 0 && isset($this->port) ) { + list($this->host, $this->port) = explode(":", $this->host, 2); + } + if ($argUsername != "") { + $this->user = $argUsername; + } + if ($argPassword != "") { + $this->password = 'not stored'; + } + if ($argDatabaseName != "") { + $this->database = $argDatabaseName; + } + + $this->_isPersistentConnection = true; + + if ($rez = $this->_pconnect($this->host, $this->user, $argPassword, $this->database)) { + return true; + } + if (isset($rez)) { + $err = $this->ErrorMsg(); + if (empty($err)) { + $err = "Connection error to server '$argHostname' with user '$argUsername'"; + } + $ret = false; + } else { + $err = "Missing extension for ".$this->dataProvider; + $ret = 0; + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'PCONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); + } + + $this->_connectionID = false; + if ($this->debug) { + ADOConnection::outp( $this->host.': '.$err); + } + return $ret; + } + + function outp_throw($msg,$src='WARN',$sql='') { + if (defined('ADODB_ERROR_HANDLER') && ADODB_ERROR_HANDLER == 'adodb_throw') { + adodb_throw($this->databaseType,$src,-9999,$msg,$sql,false,$this); + return; + } + ADOConnection::outp($msg); + } + + // create cache class. Code is backward compat with old memcache implementation + function _CreateCache() { + global $ADODB_CACHE, $ADODB_CACHE_CLASS; + + if ($this->memCache) { + global $ADODB_INCLUDED_MEMCACHE; + + if (empty($ADODB_INCLUDED_MEMCACHE)) { + include_once(ADODB_DIR.'/adodb-memcache.lib.inc.php'); + } + $ADODB_CACHE = new ADODB_Cache_MemCache($this); + } else { + $ADODB_CACHE = new $ADODB_CACHE_CLASS($this); + } + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) { + if (!$col) { + $col = $this->sysDate; + } + return $col; // child class implement + } + + /** + * Should prepare the sql statement and return the stmt resource. + * For databases that do not support this, we return the $sql. To ensure + * compatibility with databases that do not support prepare: + * + * $stmt = $db->Prepare("insert into table (id, name) values (?,?)"); + * $db->Execute($stmt,array(1,'Jill')) or die('insert failed'); + * $db->Execute($stmt,array(2,'Joe')) or die('insert failed'); + * + * @param sql SQL to send to database + * + * @return return FALSE, or the prepared statement, or the original sql if + * if the database does not support prepare. + * + */ + function Prepare($sql) { + return $sql; + } + + /** + * Some databases, eg. mssql require a different function for preparing + * stored procedures. So we cannot use Prepare(). + * + * Should prepare the stored procedure and return the stmt resource. + * For databases that do not support this, we return the $sql. To ensure + * compatibility with databases that do not support prepare: + * + * @param sql SQL to send to database + * + * @return return FALSE, or the prepared statement, or the original sql if + * if the database does not support prepare. + * + */ + function PrepareSP($sql,$param=true) { + return $this->Prepare($sql,$param); + } + + /** + * PEAR DB Compat + */ + function Quote($s) { + return $this->qstr($s,false); + } + + /** + * Requested by "Karsten Dambekalns" + */ + function QMagic($s) { + return $this->qstr($s,get_magic_quotes_gpc()); + } + + function q(&$s) { + //if (!empty($this->qNull && $s == 'null') { + // return $s; + //} + $s = $this->qstr($s,false); + } + + /** + * PEAR DB Compat - do not use internally. + */ + function ErrorNative() { + return $this->ErrorNo(); + } + + + /** + * PEAR DB Compat - do not use internally. + */ + function nextId($seq_name) { + return $this->GenID($seq_name); + } + + /** + * Lock a row, will escalate and lock the table if row locking not supported + * will normally free the lock at the end of the transaction + * + * @param $table name of table to lock + * @param $where where clause to use, eg: "WHERE row=12". If left empty, will escalate to table lock + */ + function RowLock($table,$where,$col='1 as adodbignore') { + return false; + } + + function CommitLock($table) { + return $this->CommitTrans(); + } + + function RollbackLock($table) { + return $this->RollbackTrans(); + } + + /** + * PEAR DB Compat - do not use internally. + * + * The fetch modes for NUMERIC and ASSOC for PEAR DB and ADODB are identical + * for easy porting :-) + * + * @param mode The fetchmode ADODB_FETCH_ASSOC or ADODB_FETCH_NUM + * @returns The previous fetch mode + */ + function SetFetchMode($mode) { + $old = $this->fetchMode; + $this->fetchMode = $mode; + + if ($old === false) { + global $ADODB_FETCH_MODE; + return $ADODB_FETCH_MODE; + } + return $old; + } + + + /** + * PEAR DB Compat - do not use internally. + */ + function Query($sql, $inputarr=false) { + $rs = $this->Execute($sql, $inputarr); + if (!$rs && defined('ADODB_PEAR')) { + return ADODB_PEAR_Error(); + } + return $rs; + } + + + /** + * PEAR DB Compat - do not use internally + */ + function LimitQuery($sql, $offset, $count, $params=false) { + $rs = $this->SelectLimit($sql, $count, $offset, $params); + if (!$rs && defined('ADODB_PEAR')) { + return ADODB_PEAR_Error(); + } + return $rs; + } + + + /** + * PEAR DB Compat - do not use internally + */ + function Disconnect() { + return $this->Close(); + } + + /** + * Returns a placeholder for query parameters + * e.g. $DB->Param('a') will return + * - '?' for most databases + * - ':a' for Oracle + * - '$1', '$2', etc. for PostgreSQL + * @param string $name parameter's name, false to force a reset of the + * number to 1 (for databases that require positioned + * params such as PostgreSQL; note that ADOdb will + * automatically reset this when executing a query ) + * @param string $type (unused) + * @return string query parameter placeholder + */ + function Param($name,$type='C') { + return '?'; + } + + /* + InParameter and OutParameter are self-documenting versions of Parameter(). + */ + function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) { + return $this->Parameter($stmt,$var,$name,false,$maxLen,$type); + } + + /* + */ + function OutParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) { + return $this->Parameter($stmt,$var,$name,true,$maxLen,$type); + + } + + + /* + Usage in oracle + $stmt = $db->Prepare('select * from table where id =:myid and group=:group'); + $db->Parameter($stmt,$id,'myid'); + $db->Parameter($stmt,$group,'group',64); + $db->Execute(); + + @param $stmt Statement returned by Prepare() or PrepareSP(). + @param $var PHP variable to bind to + @param $name Name of stored procedure variable name to bind to. + @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. + @param [$maxLen] Holds an maximum length of the variable. + @param [$type] The data type of $var. Legal values depend on driver. + + */ + function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) { + return false; + } + + + function IgnoreErrors($saveErrs=false) { + if (!$saveErrs) { + $saveErrs = array($this->raiseErrorFn,$this->_transOK); + $this->raiseErrorFn = false; + return $saveErrs; + } else { + $this->raiseErrorFn = $saveErrs[0]; + $this->_transOK = $saveErrs[1]; + } + } + + /** + * Improved method of initiating a transaction. Used together with CompleteTrans(). + * Advantages include: + * + * a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans. + * Only the outermost block is treated as a transaction.
+ * b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.
+ * c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block + * are disabled, making it backward compatible. + */ + function StartTrans($errfn = 'ADODB_TransMonitor') { + if ($this->transOff > 0) { + $this->transOff += 1; + return true; + } + + $this->_oldRaiseFn = $this->raiseErrorFn; + $this->raiseErrorFn = $errfn; + $this->_transOK = true; + + if ($this->debug && $this->transCnt > 0) { + ADOConnection::outp("Bad Transaction: StartTrans called within BeginTrans"); + } + $ok = $this->BeginTrans(); + $this->transOff = 1; + return $ok; + } + + + /** + Used together with StartTrans() to end a transaction. Monitors connection + for sql errors, and will commit or rollback as appropriate. + + @autoComplete if true, monitor sql errors and commit and rollback as appropriate, + and if set to false force rollback even if no SQL error detected. + @returns true on commit, false on rollback. + */ + function CompleteTrans($autoComplete = true) { + if ($this->transOff > 1) { + $this->transOff -= 1; + return true; + } + $this->raiseErrorFn = $this->_oldRaiseFn; + + $this->transOff = 0; + if ($this->_transOK && $autoComplete) { + if (!$this->CommitTrans()) { + $this->_transOK = false; + if ($this->debug) { + ADOConnection::outp("Smart Commit failed"); + } + } else { + if ($this->debug) { + ADOConnection::outp("Smart Commit occurred"); + } + } + } else { + $this->_transOK = false; + $this->RollbackTrans(); + if ($this->debug) { + ADOCOnnection::outp("Smart Rollback occurred"); + } + } + + return $this->_transOK; + } + + /* + At the end of a StartTrans/CompleteTrans block, perform a rollback. + */ + function FailTrans() { + if ($this->debug) + if ($this->transOff == 0) { + ADOConnection::outp("FailTrans outside StartTrans/CompleteTrans"); + } else { + ADOConnection::outp("FailTrans was called"); + adodb_backtrace(); + } + $this->_transOK = false; + } + + /** + Check if transaction has failed, only for Smart Transactions. + */ + function HasFailedTrans() { + if ($this->transOff > 0) { + return $this->_transOK == false; + } + return false; + } + + /** + * Execute SQL + * + * @param sql SQL statement to execute, or possibly an array holding prepared statement ($sql[0] will hold sql text) + * @param [inputarr] holds the input data to bind to. Null elements will be set to null. + * @return RecordSet or false + */ + function Execute($sql,$inputarr=false) { + if ($this->fnExecute) { + $fn = $this->fnExecute; + $ret = $fn($this,$sql,$inputarr); + if (isset($ret)) { + return $ret; + } + } + if ($inputarr !== false) { + if (!is_array($inputarr)) { + $inputarr = array($inputarr); + } + + $element0 = reset($inputarr); + # is_object check because oci8 descriptors can be passed in + $array_2d = $this->bulkBind && is_array($element0) && !is_object(reset($element0)); + + //remove extra memory copy of input -mikefedyk + unset($element0); + + if (!is_array($sql) && !$this->_bindInputArray) { + // @TODO this would consider a '?' within a string as a parameter... + $sqlarr = explode('?',$sql); + $nparams = sizeof($sqlarr)-1; + + if (!$array_2d) { + // When not Bind Bulk - convert to array of arguments list + $inputarr = array($inputarr); + } else { + // Bulk bind - Make sure all list of params have the same number of elements + $countElements = array_map('count', $inputarr); + if (1 != count(array_unique($countElements))) { + $this->outp_throw( + "[bulk execute] Input array has different number of params [" . print_r($countElements, true) . "].", + 'Execute' + ); + return false; + } + unset($countElements); + } + // Make sure the number of parameters provided in the input + // array matches what the query expects + $element0 = reset($inputarr); + if ($nparams != count($element0)) { + $this->outp_throw( + "Input array has " . count($element0) . + " params, does not match query: '" . htmlspecialchars($sql) . "'", + 'Execute' + ); + return false; + } + + // clean memory + unset($element0); + + foreach($inputarr as $arr) { + $sql = ''; $i = 0; + //Use each() instead of foreach to reduce memory usage -mikefedyk + while(list(, $v) = each($arr)) { + $sql .= $sqlarr[$i]; + // from Ron Baldwin + // Only quote string types + $typ = gettype($v); + if ($typ == 'string') { + //New memory copy of input created here -mikefedyk + $sql .= $this->qstr($v); + } else if ($typ == 'double') { + $sql .= str_replace(',','.',$v); // locales fix so 1.1 does not get converted to 1,1 + } else if ($typ == 'boolean') { + $sql .= $v ? $this->true : $this->false; + } else if ($typ == 'object') { + if (method_exists($v, '__toString')) { + $sql .= $this->qstr($v->__toString()); + } else { + $sql .= $this->qstr((string) $v); + } + } else if ($v === null) { + $sql .= 'NULL'; + } else { + $sql .= $v; + } + $i += 1; + + if ($i == $nparams) { + break; + } + } // while + if (isset($sqlarr[$i])) { + $sql .= $sqlarr[$i]; + if ($i+1 != sizeof($sqlarr)) { + $this->outp_throw( "Input Array does not match ?: ".htmlspecialchars($sql),'Execute'); + } + } else if ($i != sizeof($sqlarr)) { + $this->outp_throw( "Input array does not match ?: ".htmlspecialchars($sql),'Execute'); + } + + $ret = $this->_Execute($sql); + if (!$ret) { + return $ret; + } + } + } else { + if ($array_2d) { + if (is_string($sql)) { + $stmt = $this->Prepare($sql); + } else { + $stmt = $sql; + } + + foreach($inputarr as $arr) { + $ret = $this->_Execute($stmt,$arr); + if (!$ret) { + return $ret; + } + } + } else { + $ret = $this->_Execute($sql,$inputarr); + } + } + } else { + $ret = $this->_Execute($sql,false); + } + + return $ret; + } + + function _Execute($sql,$inputarr=false) { + // ExecuteCursor() may send non-string queries (such as arrays), + // so we need to ignore those. + if( is_string($sql) ) { + // Strips keyword used to help generate SELECT COUNT(*) queries + // from SQL if it exists. + $sql = ADODB_str_replace( '_ADODB_COUNT', '', $sql ); + } + + if ($this->debug) { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + $this->_queryID = _adodb_debug_execute($this, $sql,$inputarr); + } else { + $this->_queryID = @$this->_query($sql,$inputarr); + } + + // ************************ + // OK, query executed + // ************************ + + // error handling if query fails + if ($this->_queryID === false) { + if ($this->debug == 99) { + adodb_backtrace(true,5); + } + $fn = $this->raiseErrorFn; + if ($fn) { + $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr,$this); + } + return false; + } + + // return simplified recordset for inserts/updates/deletes with lower overhead + if ($this->_queryID === true) { + $rsclass = $this->rsPrefix.'empty'; + $rs = (class_exists($rsclass)) ? new $rsclass(): new ADORecordSet_empty(); + + return $rs; + } + + // return real recordset from select statement + $rsclass = $this->rsPrefix.$this->databaseType; + $rs = new $rsclass($this->_queryID,$this->fetchMode); + $rs->connection = $this; // Pablo suggestion + $rs->Init(); + if (is_array($sql)) { + $rs->sql = $sql[0]; + } else { + $rs->sql = $sql; + } + if ($rs->_numOfRows <= 0) { + global $ADODB_COUNTRECS; + if ($ADODB_COUNTRECS) { + if (!$rs->EOF) { + $rs = $this->_rs2rs($rs,-1,-1,!is_array($sql)); + $rs->_queryID = $this->_queryID; + } else + $rs->_numOfRows = 0; + } + } + return $rs; + } + + function CreateSequence($seqname='adodbseq',$startID=1) { + if (empty($this->_genSeqSQL)) { + return false; + } + return $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); + } + + function DropSequence($seqname='adodbseq') { + if (empty($this->_dropSeqSQL)) { + return false; + } + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + /** + * Generates a sequence id and stores it in $this->genID; + * GenID is only available if $this->hasGenID = true; + * + * @param seqname name of sequence to use + * @param startID if sequence does not exist, start at this ID + * @return 0 if not supported, otherwise a sequence id + */ + function GenID($seqname='adodbseq',$startID=1) { + if (!$this->hasGenID) { + return 0; // formerly returns false pre 1.60 + } + + $getnext = sprintf($this->_genIDSQL,$seqname); + + $holdtransOK = $this->_transOK; + + $save_handler = $this->raiseErrorFn; + $this->raiseErrorFn = ''; + @($rs = $this->Execute($getnext)); + $this->raiseErrorFn = $save_handler; + + if (!$rs) { + $this->_transOK = $holdtransOK; //if the status was ok before reset + $createseq = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); + $rs = $this->Execute($getnext); + } + if ($rs && !$rs->EOF) { + $this->genID = reset($rs->fields); + } else { + $this->genID = 0; // false + } + + if ($rs) { + $rs->Close(); + } + + return $this->genID; + } + + /** + * @param $table string name of the table, not needed by all databases (eg. mysql), default '' + * @param $column string name of the column, not needed by all databases (eg. mysql), default '' + * @return the last inserted ID. Not all databases support this. + */ + function Insert_ID($table='',$column='') { + if ($this->_logsql && $this->lastInsID) { + return $this->lastInsID; + } + if ($this->hasInsertID) { + return $this->_insertid($table,$column); + } + if ($this->debug) { + ADOConnection::outp( '

Insert_ID error

'); + adodb_backtrace(); + } + return false; + } + + + /** + * Portable Insert ID. Pablo Roca + * + * @return the last inserted ID. All databases support this. But aware possible + * problems in multiuser environments. Heavy test this before deploying. + */ + function PO_Insert_ID($table="", $id="") { + if ($this->hasInsertID){ + return $this->Insert_ID($table,$id); + } else { + return $this->GetOne("SELECT MAX($id) FROM $table"); + } + } + + /** + * @return # rows affected by UPDATE/DELETE + */ + function Affected_Rows() { + if ($this->hasAffectedRows) { + if ($this->fnExecute === 'adodb_log_sql') { + if ($this->_logsql && $this->_affected !== false) { + return $this->_affected; + } + } + $val = $this->_affectedrows(); + return ($val < 0) ? false : $val; + } + + if ($this->debug) { + ADOConnection::outp( '

Affected_Rows error

',false); + } + return false; + } + + + /** + * @return the last error message + */ + function ErrorMsg() { + if ($this->_errorMsg) { + return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg; + } else { + return ''; + } + } + + + /** + * @return the last error number. Normally 0 means no error. + */ + function ErrorNo() { + return ($this->_errorMsg) ? -1 : 0; + } + + function MetaError($err=false) { + include_once(ADODB_DIR."/adodb-error.inc.php"); + if ($err === false) { + $err = $this->ErrorNo(); + } + return adodb_error($this->dataProvider,$this->databaseType,$err); + } + + function MetaErrorMsg($errno) { + include_once(ADODB_DIR."/adodb-error.inc.php"); + return adodb_errormsg($errno); + } + + /** + * @returns an array with the primary key columns in it. + */ + function MetaPrimaryKeys($table, $owner=false) { + // owner not used in base class - see oci8 + $p = array(); + $objs = $this->MetaColumns($table); + if ($objs) { + foreach($objs as $v) { + if (!empty($v->primary_key)) { + $p[] = $v->name; + } + } + } + if (sizeof($p)) { + return $p; + } + if (function_exists('ADODB_VIEW_PRIMARYKEYS')) { + return ADODB_VIEW_PRIMARYKEYS($this->databaseType, $this->database, $table, $owner); + } + return false; + } + + /** + * @returns assoc array where keys are tables, and values are foreign keys + */ + function MetaForeignKeys($table, $owner=false, $upper=false) { + return false; + } + /** + * Choose a database to connect to. Many databases do not support this. + * + * @param dbName is the name of the database to select + * @return true or false + */ + function SelectDB($dbName) {return false;} + + + /** + * Will select, getting rows from $offset (1-based), for $nrows. + * This simulates the MySQL "select * from table limit $offset,$nrows" , and + * the PostgreSQL "select * from table limit $nrows offset $offset". Note that + * MySQL and PostgreSQL parameter ordering is the opposite of the other. + * eg. + * SelectLimit('select * from table',3); will return rows 1 to 3 (1-based) + * SelectLimit('select * from table',3,2); will return rows 3 to 5 (1-based) + * + * Uses SELECT TOP for Microsoft databases (when $this->hasTop is set) + * BUG: Currently SelectLimit fails with $sql with LIMIT or TOP clause already set + * + * @param sql + * @param [offset] is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to get + * @param [inputarr] array of bind variables + * @param [secs2cache] is a private parameter only used by jlim + * @return the recordset ($rs->databaseType == 'array') + */ + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { + if ($this->hasTop && $nrows > 0) { + // suggested by Reinhard Balling. Access requires top after distinct + // Informix requires first before distinct - F Riosa + $ismssql = (strpos($this->databaseType,'mssql') !== false); + if ($ismssql) { + $isaccess = false; + } else { + $isaccess = (strpos($this->databaseType,'access') !== false); + } + + if ($offset <= 0) { + // access includes ties in result + if ($isaccess) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + + if ($secs2cache != 0) { + $ret = $this->CacheExecute($secs2cache, $sql,$inputarr); + } else { + $ret = $this->Execute($sql,$inputarr); + } + return $ret; // PHP5 fix + } else if ($ismssql){ + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + } else { + $sql = preg_replace( + '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + } + } else { + $nn = $nrows + $offset; + if ($isaccess || $ismssql) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); + } else { + $sql = preg_replace( + '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); + } + } + } + + // if $offset>0, we want to skip rows, and $ADODB_COUNTRECS is set, we buffer rows + // 0 to offset-1 which will be discarded anyway. So we disable $ADODB_COUNTRECS. + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + + if ($secs2cache != 0) { + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + } else { + $rs = $this->Execute($sql,$inputarr); + } + + $ADODB_COUNTRECS = $savec; + if ($rs && !$rs->EOF) { + $rs = $this->_rs2rs($rs,$nrows,$offset); + } + //print_r($rs); + return $rs; + } + + /** + * Create serializable recordset. Breaks rs link to connection. + * + * @param rs the recordset to serialize + */ + function SerializableRS(&$rs) { + $rs2 = $this->_rs2rs($rs); + $ignore = false; + $rs2->connection = $ignore; + + return $rs2; + } + + /** + * Convert database recordset to an array recordset + * input recordset's cursor should be at beginning, and + * old $rs will be closed. + * + * @param rs the recordset to copy + * @param [nrows] number of rows to retrieve (optional) + * @param [offset] offset by number of rows (optional) + * @return the new recordset + */ + function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true) { + if (! $rs) { + return false; + } + $dbtype = $rs->databaseType; + if (!$dbtype) { + $rs = $rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1 -- why ? + return $rs; + } + if (($dbtype == 'array' || $dbtype == 'csv') && $nrows == -1 && $offset == -1) { + $rs->MoveFirst(); + $rs = $rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1-- why ? + return $rs; + } + $flds = array(); + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { + $flds[] = $rs->FetchField($i); + } + + $arr = $rs->GetArrayLimit($nrows,$offset); + //print_r($arr); + if ($close) { + $rs->Close(); + } + + $arrayClass = $this->arrayClass; + + $rs2 = new $arrayClass(); + $rs2->connection = $this; + $rs2->sql = $rs->sql; + $rs2->dataProvider = $this->dataProvider; + $rs2->InitArrayFields($arr,$flds); + $rs2->fetchMode = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode; + return $rs2; + } + + /* + * Return all rows. Compat with PEAR DB + */ + function GetAll($sql, $inputarr=false) { + $arr = $this->GetArray($sql,$inputarr); + return $arr; + } + + function GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false) { + $rs = $this->Execute($sql, $inputarr); + if (!$rs) { + return false; + } + $arr = $rs->GetAssoc($force_array,$first2cols); + return $arr; + } + + function CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false) { + if (!is_numeric($secs2cache)) { + $first2cols = $force_array; + $force_array = $inputarr; + } + $rs = $this->CacheExecute($secs2cache, $sql, $inputarr); + if (!$rs) { + return false; + } + $arr = $rs->GetAssoc($force_array,$first2cols); + return $arr; + } + + /** + * Return first element of first row of sql statement. Recordset is disposed + * for you. + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetOne($sql,$inputarr=false) { + global $ADODB_COUNTRECS,$ADODB_GETONE_EOF; + + $crecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + $ret = false; + $rs = $this->Execute($sql,$inputarr); + if ($rs) { + if ($rs->EOF) { + $ret = $ADODB_GETONE_EOF; + } else { + $ret = reset($rs->fields); + } + + $rs->Close(); + } + $ADODB_COUNTRECS = $crecs; + return $ret; + } + + // $where should include 'WHERE fld=value' + function GetMedian($table, $field,$where = '') { + $total = $this->GetOne("select count(*) from $table $where"); + if (!$total) { + return false; + } + + $midrow = (integer) ($total/2); + $rs = $this->SelectLimit("select $field from $table $where order by 1",1,$midrow); + if ($rs && !$rs->EOF) { + return reset($rs->fields); + } + return false; + } + + + function CacheGetOne($secs2cache,$sql=false,$inputarr=false) { + global $ADODB_GETONE_EOF; + + $ret = false; + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + if ($rs) { + if ($rs->EOF) { + $ret = $ADODB_GETONE_EOF; + } else { + $ret = reset($rs->fields); + } + $rs->Close(); + } + + return $ret; + } + + function GetCol($sql, $inputarr = false, $trim = false) { + + $rs = $this->Execute($sql, $inputarr); + if ($rs) { + $rv = array(); + if ($trim) { + while (!$rs->EOF) { + $rv[] = trim(reset($rs->fields)); + $rs->MoveNext(); + } + } else { + while (!$rs->EOF) { + $rv[] = reset($rs->fields); + $rs->MoveNext(); + } + } + $rs->Close(); + } else { + $rv = false; + } + return $rv; + } + + function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false) { + $rs = $this->CacheExecute($secs, $sql, $inputarr); + if ($rs) { + $rv = array(); + if ($trim) { + while (!$rs->EOF) { + $rv[] = trim(reset($rs->fields)); + $rs->MoveNext(); + } + } else { + while (!$rs->EOF) { + $rv[] = reset($rs->fields); + $rs->MoveNext(); + } + } + $rs->Close(); + } else + $rv = false; + + return $rv; + } + + function Transpose(&$rs,$addfieldnames=true) { + $rs2 = $this->_rs2rs($rs); + if (!$rs2) { + return false; + } + + $rs2->_transpose($addfieldnames); + return $rs2; + } + + /* + Calculate the offset of a date for a particular database and generate + appropriate SQL. Useful for calculating future/past dates and storing + in a database. + + If dayFraction=1.5 means 1.5 days from now, 1.0/24 for 1 hour. + */ + function OffsetDate($dayFraction,$date=false) { + if (!$date) { + $date = $this->sysDate; + } + return '('.$date.'+'.$dayFraction.')'; + } + + + /** + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetArray($sql,$inputarr=false) { + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + $rs = $this->Execute($sql,$inputarr); + $ADODB_COUNTRECS = $savec; + if (!$rs) + if (defined('ADODB_PEAR')) { + $cls = ADODB_PEAR_Error(); + return $cls; + } else { + return false; + } + $arr = $rs->GetArray(); + $rs->Close(); + return $arr; + } + + function CacheGetAll($secs2cache,$sql=false,$inputarr=false) { + $arr = $this->CacheGetArray($secs2cache,$sql,$inputarr); + return $arr; + } + + function CacheGetArray($secs2cache,$sql=false,$inputarr=false) { + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + $ADODB_COUNTRECS = $savec; + + if (!$rs) + if (defined('ADODB_PEAR')) { + $cls = ADODB_PEAR_Error(); + return $cls; + } else { + return false; + } + $arr = $rs->GetArray(); + $rs->Close(); + return $arr; + } + + function GetRandRow($sql, $arr= false) { + $rezarr = $this->GetAll($sql, $arr); + $sz = sizeof($rezarr); + return $rezarr[abs(rand()) % $sz]; + } + + /** + * Return one row of sql statement. Recordset is disposed for you. + * Note that SelectLimit should not be called. + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetRow($sql,$inputarr=false) { + global $ADODB_COUNTRECS; + + $crecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + $rs = $this->Execute($sql,$inputarr); + + $ADODB_COUNTRECS = $crecs; + if ($rs) { + if (!$rs->EOF) { + $arr = $rs->fields; + } else { + $arr = array(); + } + $rs->Close(); + return $arr; + } + + return false; + } + + function CacheGetRow($secs2cache,$sql=false,$inputarr=false) { + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + if ($rs) { + if (!$rs->EOF) { + $arr = $rs->fields; + } else { + $arr = array(); + } + + $rs->Close(); + return $arr; + } + return false; + } + + /** + * Insert or replace a single record. Note: this is not the same as MySQL's replace. + * ADOdb's Replace() uses update-insert semantics, not insert-delete-duplicates of MySQL. + * Also note that no table locking is done currently, so it is possible that the + * record be inserted twice by two programs... + * + * $this->Replace('products', array('prodname' =>"'Nails'","price" => 3.99), 'prodname'); + * + * $table table name + * $fieldArray associative array of data (you must quote strings yourself). + * $keyCol the primary key field name or if compound key, array of field names + * autoQuote set to true to use a hueristic to quote strings. Works with nulls and numbers + * but does not work with dates nor SQL functions. + * has_autoinc the primary key is an auto-inc field, so skip in insert. + * + * Currently blob replace not supported + * + * returns 0 = fail, 1 = update, 2 = insert + */ + + function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false) { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + + return _adodb_replace($this, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc); + } + + + /** + * Will select, getting rows from $offset (1-based), for $nrows. + * This simulates the MySQL "select * from table limit $offset,$nrows" , and + * the PostgreSQL "select * from table limit $nrows offset $offset". Note that + * MySQL and PostgreSQL parameter ordering is the opposite of the other. + * eg. + * CacheSelectLimit(15,'select * from table',3); will return rows 1 to 3 (1-based) + * CacheSelectLimit(15,'select * from table',3,2); will return rows 3 to 5 (1-based) + * + * BUG: Currently CacheSelectLimit fails with $sql with LIMIT or TOP clause already set + * + * @param [secs2cache] seconds to cache data, set to 0 to force query. This is optional + * @param sql + * @param [offset] is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to get + * @param [inputarr] array of bind variables + * @return the recordset ($rs->databaseType == 'array') + */ + function CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false) { + if (!is_numeric($secs2cache)) { + if ($sql === false) { + $sql = -1; + } + if ($offset == -1) { + $offset = false; + } + // sql, nrows, offset,inputarr + $rs = $this->SelectLimit($secs2cache,$sql,$nrows,$offset,$this->cacheSecs); + } else { + if ($sql === false) { + $this->outp_throw("Warning: \$sql missing from CacheSelectLimit()",'CacheSelectLimit'); + } + $rs = $this->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + } + return $rs; + } + + /** + * Flush cached recordsets that match a particular $sql statement. + * If $sql == false, then we purge all files in the cache. + */ + function CacheFlush($sql=false,$inputarr=false) { + global $ADODB_CACHE_DIR, $ADODB_CACHE; + + # Create cache if it does not exist + if (empty($ADODB_CACHE)) { + $this->_CreateCache(); + } + + if (!$sql) { + $ADODB_CACHE->flushall($this->debug); + return; + } + + $f = $this->_gencachename($sql.serialize($inputarr),false); + return $ADODB_CACHE->flushcache($f, $this->debug); + } + + + /** + * Private function to generate filename for caching. + * Filename is generated based on: + * + * - sql statement + * - database type (oci8, ibase, ifx, etc) + * - database name + * - userid + * - setFetchMode (adodb 4.23) + * + * When not in safe mode, we create 256 sub-directories in the cache directory ($ADODB_CACHE_DIR). + * Assuming that we can have 50,000 files per directory with good performance, + * then we can scale to 12.8 million unique cached recordsets. Wow! + */ + function _gencachename($sql,$createdir) { + global $ADODB_CACHE, $ADODB_CACHE_DIR; + + if ($this->fetchMode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } else { + $mode = $this->fetchMode; + } + $m = md5($sql.$this->databaseType.$this->database.$this->user.$mode); + if (!$ADODB_CACHE->createdir) { + return $m; + } + if (!$createdir) { + $dir = $ADODB_CACHE->getdirname($m); + } else { + $dir = $ADODB_CACHE->createdir($m, $this->debug); + } + + return $dir.'/adodb_'.$m.'.cache'; + } + + + /** + * Execute SQL, caching recordsets. + * + * @param [secs2cache] seconds to cache data, set to 0 to force query. + * This is an optional parameter. + * @param sql SQL statement to execute + * @param [inputarr] holds the input data to bind to + * @return RecordSet or false + */ + function CacheExecute($secs2cache,$sql=false,$inputarr=false) { + global $ADODB_CACHE; + + if (empty($ADODB_CACHE)) { + $this->_CreateCache(); + } + + if (!is_numeric($secs2cache)) { + $inputarr = $sql; + $sql = $secs2cache; + $secs2cache = $this->cacheSecs; + } + + if (is_array($sql)) { + $sqlparam = $sql; + $sql = $sql[0]; + } else + $sqlparam = $sql; + + + $md5file = $this->_gencachename($sql.serialize($inputarr),true); + $err = ''; + + if ($secs2cache > 0){ + $rs = $ADODB_CACHE->readcache($md5file,$err,$secs2cache,$this->arrayClass); + $this->numCacheHits += 1; + } else { + $err='Timeout 1'; + $rs = false; + $this->numCacheMisses += 1; + } + + if (!$rs) { + // no cached rs found + if ($this->debug) { + if (get_magic_quotes_runtime() && !$this->memCache) { + ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :("); + } + if ($this->debug !== -1) { + ADOConnection::outp( " $md5file cache failure: $err (this is a notice and not an error)"); + } + } + + $rs = $this->Execute($sqlparam,$inputarr); + + if ($rs) { + $eof = $rs->EOF; + $rs = $this->_rs2rs($rs); // read entire recordset into memory immediately + $rs->timeCreated = time(); // used by caching + $txt = _rs2serialize($rs,false,$sql); // serialize + + $ok = $ADODB_CACHE->writecache($md5file,$txt,$this->debug, $secs2cache); + if (!$ok) { + if ($ok === false) { + $em = 'Cache write error'; + $en = -32000; + + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'CacheExecute', $en, $em, $md5file,$sql,$this); + } + } else { + $em = 'Cache file locked warning'; + $en = -32001; + // do not call error handling for just a warning + } + + if ($this->debug) { + ADOConnection::outp( " ".$em); + } + } + if ($rs->EOF && !$eof) { + $rs->MoveFirst(); + //$rs = csv2rs($md5file,$err); + $rs->connection = $this; // Pablo suggestion + } + + } else if (!$this->memCache) { + $ADODB_CACHE->flushcache($md5file); + } + } else { + $this->_errorMsg = ''; + $this->_errorCode = 0; + + if ($this->fnCacheExecute) { + $fn = $this->fnCacheExecute; + $fn($this, $secs2cache, $sql, $inputarr); + } + // ok, set cached object found + $rs->connection = $this; // Pablo suggestion + if ($this->debug){ + if ($this->debug == 99) { + adodb_backtrace(); + } + $inBrowser = isset($_SERVER['HTTP_USER_AGENT']); + $ttl = $rs->timeCreated + $secs2cache - time(); + $s = is_array($sql) ? $sql[0] : $sql; + if ($inBrowser) { + $s = ''.htmlspecialchars($s).''; + } + + ADOConnection::outp( " $md5file reloaded, ttl=$ttl [ $s ]"); + } + } + return $rs; + } + + + /* + Similar to PEAR DB's autoExecute(), except that + $mode can be 'INSERT' or 'UPDATE' or DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE + If $mode == 'UPDATE', then $where is compulsory as a safety measure. + + $forceUpdate means that even if the data has not changed, perform update. + */ + function AutoExecute($table, $fields_values, $mode = 'INSERT', $where = false, $forceUpdate = true, $magicq = false) { + if ($where === false && ($mode == 'UPDATE' || $mode == 2 /* DB_AUTOQUERY_UPDATE */) ) { + $this->outp_throw('AutoExecute: Illegal mode=UPDATE with empty WHERE clause', 'AutoExecute'); + return false; + } + + $sql = "SELECT * FROM $table"; + $rs = $this->SelectLimit($sql, 1); + if (!$rs) { + return false; // table does not exist + } + + $rs->tableName = $table; + if ($where !== false) { + $sql .= " WHERE $where"; + } + $rs->sql = $sql; + + switch($mode) { + case 'UPDATE': + case DB_AUTOQUERY_UPDATE: + $sql = $this->GetUpdateSQL($rs, $fields_values, $forceUpdate, $magicq); + break; + case 'INSERT': + case DB_AUTOQUERY_INSERT: + $sql = $this->GetInsertSQL($rs, $fields_values, $magicq); + break; + default: + $this->outp_throw("AutoExecute: Unknown mode=$mode", 'AutoExecute'); + return false; + } + return $sql && $this->Execute($sql); + } + + + /** + * Generates an Update Query based on an existing recordset. + * $arrFields is an associative array of fields with the value + * that should be assigned. + * + * Note: This function should only be used on a recordset + * that is run against a single table and sql should only + * be a simple select stmt with no groupby/orderby/limit + * + * "Jonathan Younger" + */ + function GetUpdateSQL(&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=null) { + global $ADODB_INCLUDED_LIB; + + // ******************************************************** + // This is here to maintain compatibility + // with older adodb versions. Sets force type to force nulls if $forcenulls is set. + if (!isset($force)) { + global $ADODB_FORCE_TYPE; + $force = $ADODB_FORCE_TYPE; + } + // ******************************************************** + + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq,$force); + } + + /** + * Generates an Insert Query based on an existing recordset. + * $arrFields is an associative array of fields with the value + * that should be assigned. + * + * Note: This function should only be used on a recordset + * that is run against a single table. + */ + function GetInsertSQL(&$rs, $arrFields,$magicq=false,$force=null) { + global $ADODB_INCLUDED_LIB; + if (!isset($force)) { + global $ADODB_FORCE_TYPE; + $force = $ADODB_FORCE_TYPE; + } + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + return _adodb_getinsertsql($this,$rs,$arrFields,$magicq,$force); + } + + + /** + * Update a blob column, given a where clause. There are more sophisticated + * blob handling functions that we could have implemented, but all require + * a very complex API. Instead we have chosen something that is extremely + * simple to understand and use. + * + * Note: $blobtype supports 'BLOB' and 'CLOB', default is BLOB of course. + * + * Usage to update a $blobvalue which has a primary key blob_id=1 into a + * field blobtable.blobcolumn: + * + * UpdateBlob('blobtable', 'blobcolumn', $blobvalue, 'blob_id=1'); + * + * Insert example: + * + * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + * $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { + return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; + } + + /** + * Usage: + * UpdateBlob('TABLE', 'COLUMN', '/path/to/file', 'ID=1'); + * + * $blobtype supports 'BLOB' and 'CLOB' + * + * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + * $conn->UpdateBlob('blobtable','blobcol',$blobpath,'id=1'); + */ + function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') { + $fd = fopen($path,'rb'); + if ($fd === false) { + return false; + } + $val = fread($fd,filesize($path)); + fclose($fd); + return $this->UpdateBlob($table,$column,$val,$where,$blobtype); + } + + function BlobDecode($blob) { + return $blob; + } + + function BlobEncode($blob) { + return $blob; + } + + function GetCharSet() { + return $this->charSet; + } + + function SetCharSet($charset) { + $this->charSet = $charset; + return true; + } + + function IfNull( $field, $ifNull ) { + return " CASE WHEN $field is null THEN $ifNull ELSE $field END "; + } + + function LogSQL($enable=true) { + include_once(ADODB_DIR.'/adodb-perf.inc.php'); + + if ($enable) { + $this->fnExecute = 'adodb_log_sql'; + } else { + $this->fnExecute = false; + } + + $old = $this->_logsql; + $this->_logsql = $enable; + if ($enable && !$old) { + $this->_affected = false; + } + return $old; + } + + /** + * Usage: + * UpdateClob('TABLE', 'COLUMN', $var, 'ID=1', 'CLOB'); + * + * $conn->Execute('INSERT INTO clobtable (id, clobcol) VALUES (1, null)'); + * $conn->UpdateClob('clobtable','clobcol',$clob,'id=1'); + */ + function UpdateClob($table,$column,$val,$where) { + return $this->UpdateBlob($table,$column,$val,$where,'CLOB'); + } + + // not the fastest implementation - quick and dirty - jlim + // for best performance, use the actual $rs->MetaType(). + function MetaType($t,$len=-1,$fieldobj=false) { + + if (empty($this->_metars)) { + $rsclass = $this->rsPrefix.$this->databaseType; + $this->_metars = new $rsclass(false,$this->fetchMode); + $this->_metars->connection = $this; + } + return $this->_metars->MetaType($t,$len,$fieldobj); + } + + + /** + * Change the SQL connection locale to a specified locale. + * This is used to get the date formats written depending on the client locale. + */ + function SetDateLocale($locale = 'En') { + $this->locale = $locale; + switch (strtoupper($locale)) + { + case 'EN': + $this->fmtDate="'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d H:i:s'"; + break; + + case 'US': + $this->fmtDate = "'m-d-Y'"; + $this->fmtTimeStamp = "'m-d-Y H:i:s'"; + break; + + case 'PT_BR': + case 'NL': + case 'FR': + case 'RO': + case 'IT': + $this->fmtDate="'d-m-Y'"; + $this->fmtTimeStamp = "'d-m-Y H:i:s'"; + break; + + case 'GE': + $this->fmtDate="'d.m.Y'"; + $this->fmtTimeStamp = "'d.m.Y H:i:s'"; + break; + + default: + $this->fmtDate="'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d H:i:s'"; + break; + } + } + + /** + * GetActiveRecordsClass Performs an 'ALL' query + * + * @param mixed $class This string represents the class of the current active record + * @param mixed $table Table used by the active record object + * @param mixed $whereOrderBy Where, order, by clauses + * @param mixed $bindarr + * @param mixed $primkeyArr + * @param array $extra Query extras: limit, offset... + * @param mixed $relations Associative array: table's foreign name, "hasMany", "belongsTo" + * @access public + * @return void + */ + function GetActiveRecordsClass( + $class, $table,$whereOrderBy=false,$bindarr=false, $primkeyArr=false, + $extra=array(), + $relations=array()) + { + global $_ADODB_ACTIVE_DBS; + ## reduce overhead of adodb.inc.php -- moved to adodb-active-record.inc.php + ## if adodb-active-recordx is loaded -- should be no issue as they will probably use Find() + if (!isset($_ADODB_ACTIVE_DBS)) { + include_once(ADODB_DIR.'/adodb-active-record.inc.php'); + } + return adodb_GetActiveRecordsClass($this, $class, $table, $whereOrderBy, $bindarr, $primkeyArr, $extra, $relations); + } + + function GetActiveRecords($table,$where=false,$bindarr=false,$primkeyArr=false) { + $arr = $this->GetActiveRecordsClass('ADODB_Active_Record', $table, $where, $bindarr, $primkeyArr); + return $arr; + } + + /** + * Close Connection + */ + function Close() { + $rez = $this->_close(); + $this->_connectionID = false; + return $rez; + } + + /** + * Begin a Transaction. Must be followed by CommitTrans() or RollbackTrans(). + * + * @return true if succeeded or false if database does not support transactions + */ + function BeginTrans() { + if ($this->debug) { + ADOConnection::outp("BeginTrans: Transactions not supported for this driver"); + } + return false; + } + + /* set transaction mode */ + function SetTransactionMode( $transaction_mode ) { + $transaction_mode = $this->MetaTransaction($transaction_mode, $this->dataProvider); + $this->_transmode = $transaction_mode; + } +/* +http://msdn2.microsoft.com/en-US/ms173763.aspx +http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-isolation.html +http://www.postgresql.org/docs/8.1/interactive/sql-set-transaction.html +http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_10005.htm +*/ + function MetaTransaction($mode,$db) { + $mode = strtoupper($mode); + $mode = str_replace('ISOLATION LEVEL ','',$mode); + + switch($mode) { + + case 'READ UNCOMMITTED': + switch($db) { + case 'oci8': + case 'oracle': + return 'ISOLATION LEVEL READ COMMITTED'; + default: + return 'ISOLATION LEVEL READ UNCOMMITTED'; + } + break; + + case 'READ COMMITTED': + return 'ISOLATION LEVEL READ COMMITTED'; + break; + + case 'REPEATABLE READ': + switch($db) { + case 'oci8': + case 'oracle': + return 'ISOLATION LEVEL SERIALIZABLE'; + default: + return 'ISOLATION LEVEL REPEATABLE READ'; + } + break; + + case 'SERIALIZABLE': + return 'ISOLATION LEVEL SERIALIZABLE'; + break; + + default: + return $mode; + } + } + + /** + * If database does not support transactions, always return true as data always commited + * + * @param $ok set to false to rollback transaction, true to commit + * + * @return true/false. + */ + function CommitTrans($ok=true) { + return true; + } + + + /** + * If database does not support transactions, rollbacks always fail, so return false + * + * @return true/false. + */ + function RollbackTrans() { + return false; + } + + + /** + * return the databases that the driver can connect to. + * Some databases will return an empty array. + * + * @return an array of database names. + */ + function MetaDatabases() { + global $ADODB_FETCH_MODE; + + if ($this->metaDatabasesSQL) { + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + + $arr = $this->GetCol($this->metaDatabasesSQL); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + return $arr; + } + + return false; + } + + /** + * List procedures or functions in an array. + * @param procedureNamePattern a procedure name pattern; must match the procedure name as it is stored in the database + * @param catalog a catalog name; must match the catalog name as it is stored in the database; + * @param schemaPattern a schema name pattern; + * + * @return array of procedures on current database. + * + * Array( + * [name_of_procedure] => Array( + * [type] => PROCEDURE or FUNCTION + * [catalog] => Catalog_name + * [schema] => Schema_name + * [remarks] => explanatory comment on the procedure + * ) + * ) + */ + function MetaProcedures($procedureNamePattern = null, $catalog = null, $schemaPattern = null) { + return false; + } + + + /** + * @param ttype can either be 'VIEW' or 'TABLE' or false. + * If false, both views and tables are returned. + * "VIEW" returns only views + * "TABLE" returns only tables + * @param showSchema returns the schema/user with the table name, eg. USER.TABLE + * @param mask is the input mask - only supported by oci8 and postgresql + * + * @return array of tables for current database. + */ + function MetaTables($ttype=false,$showSchema=false,$mask=false) { + global $ADODB_FETCH_MODE; + + if ($mask) { + return false; + } + if ($this->metaTablesSQL) { + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + + $rs = $this->Execute($this->metaTablesSQL); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if ($rs === false) { + return false; + } + $arr = $rs->GetArray(); + $arr2 = array(); + + if ($hast = ($ttype && isset($arr[0][1]))) { + $showt = strncmp($ttype,'T',1); + } + + for ($i=0; $i < sizeof($arr); $i++) { + if ($hast) { + if ($showt == 0) { + if (strncmp($arr[$i][1],'T',1) == 0) { + $arr2[] = trim($arr[$i][0]); + } + } else { + if (strncmp($arr[$i][1],'V',1) == 0) { + $arr2[] = trim($arr[$i][0]); + } + } + } else + $arr2[] = trim($arr[$i][0]); + } + $rs->Close(); + return $arr2; + } + return false; + } + + + function _findschema(&$table,&$schema) { + if (!$schema && ($at = strpos($table,'.')) !== false) { + $schema = substr($table,0,$at); + $table = substr($table,$at+1); + } + } + + /** + * List columns in a database as an array of ADOFieldObjects. + * See top of file for definition of object. + * + * @param $table table name to query + * @param $normalize makes table name case-insensitive (required by some databases) + * @schema is optional database schema to use - not supported by all databases. + * + * @return array of ADOFieldObjects for current table. + */ + function MetaColumns($table,$normalize=true) { + global $ADODB_FETCH_MODE; + + if (!empty($this->metaColumnsSQL)) { + $schema = false; + $this->_findschema($table,$schema); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + $rs = $this->Execute(sprintf($this->metaColumnsSQL,($normalize)?strtoupper($table):$table)); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + if ($rs === false || $rs->EOF) { + return false; + } + + $retarr = array(); + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + if (isset($rs->fields[3]) && $rs->fields[3]) { + if ($rs->fields[3]>0) { + $fld->max_length = $rs->fields[3]; + } + $fld->scale = $rs->fields[4]; + if ($fld->scale>0) { + $fld->max_length += 1; + } + } else { + $fld->max_length = $rs->fields[2]; + } + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) { + $retarr[] = $fld; + } else { + $retarr[strtoupper($fld->name)] = $fld; + } + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + } + return false; + } + + /** + * List indexes on a table as an array. + * @param table table name to query + * @param primary true to only show primary keys. Not actually used for most databases + * + * @return array of indexes on current table. Each element represents an index, and is itself an associative array. + * + * Array( + * [name_of_index] => Array( + * [unique] => true or false + * [columns] => Array( + * [0] => firstname + * [1] => lastname + * ) + * ) + * ) + */ + function MetaIndexes($table, $primary = false, $owner = false) { + return false; + } + + /** + * List columns names in a table as an array. + * @param table table name to query + * + * @return array of column names for current table. + */ + function MetaColumnNames($table, $numIndexes=false,$useattnum=false /* only for postgres */) { + $objarr = $this->MetaColumns($table); + if (!is_array($objarr)) { + return false; + } + $arr = array(); + if ($numIndexes) { + $i = 0; + if ($useattnum) { + foreach($objarr as $v) + $arr[$v->attnum] = $v->name; + + } else + foreach($objarr as $v) $arr[$i++] = $v->name; + } else + foreach($objarr as $v) $arr[strtoupper($v->name)] = $v->name; + + return $arr; + } + + /** + * Different SQL databases used different methods to combine strings together. + * This function provides a wrapper. + * + * param s variable number of string parameters + * + * Usage: $db->Concat($str1,$str2); + * + * @return concatenated string + */ + function Concat() { + $arr = func_get_args(); + return implode($this->concat_operator, $arr); + } + + + /** + * Converts a date "d" to a string that the database can understand. + * + * @param d a date in Unix date time format. + * + * @return date string in database date format + */ + function DBDate($d, $isfld=false) { + if (empty($d) && $d !== 0) { + return 'null'; + } + if ($isfld) { + return $d; + } + if (is_object($d)) { + return $d->format($this->fmtDate); + } + + if (is_string($d) && !is_numeric($d)) { + if ($d === 'null') { + return $d; + } + if (strncmp($d,"'",1) === 0) { + $d = _adodb_safedateq($d); + return $d; + } + if ($this->isoDates) { + return "'$d'"; + } + $d = ADOConnection::UnixDate($d); + } + + return adodb_date($this->fmtDate,$d); + } + + function BindDate($d) { + $d = $this->DBDate($d); + if (strncmp($d,"'",1)) { + return $d; + } + + return substr($d,1,strlen($d)-2); + } + + function BindTimeStamp($d) { + $d = $this->DBTimeStamp($d); + if (strncmp($d,"'",1)) { + return $d; + } + + return substr($d,1,strlen($d)-2); + } + + + /** + * Converts a timestamp "ts" to a string that the database can understand. + * + * @param ts a timestamp in Unix date time format. + * + * @return timestamp string in database timestamp format + */ + function DBTimeStamp($ts,$isfld=false) { + if (empty($ts) && $ts !== 0) { + return 'null'; + } + if ($isfld) { + return $ts; + } + if (is_object($ts)) { + return $ts->format($this->fmtTimeStamp); + } + + # strlen(14) allows YYYYMMDDHHMMSS format + if (!is_string($ts) || (is_numeric($ts) && strlen($ts)<14)) { + return adodb_date($this->fmtTimeStamp,$ts); + } + + if ($ts === 'null') { + return $ts; + } + if ($this->isoDates && strlen($ts) !== 14) { + $ts = _adodb_safedate($ts); + return "'$ts'"; + } + $ts = ADOConnection::UnixTimeStamp($ts); + return adodb_date($this->fmtTimeStamp,$ts); + } + + /** + * Also in ADORecordSet. + * @param $v is a date string in YYYY-MM-DD format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixDate($v) { + if (is_object($v)) { + // odbtp support + //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) + return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); + } + + if (is_numeric($v) && strlen($v) !== 8) { + return $v; + } + if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|", $v, $rr)) { + return false; + } + + if ($rr[1] <= TIMESTAMP_FIRST_YEAR) { + return 0; + } + + // h-m-s-MM-DD-YY + return @adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); + } + + + /** + * Also in ADORecordSet. + * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixTimeStamp($v) { + if (is_object($v)) { + // odbtp support + //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) + return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); + } + + if (!preg_match( + "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ ,-]*(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", + ($v), $rr)) return false; + + if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1) { + return 0; + } + + // h-m-s-MM-DD-YY + if (!isset($rr[5])) { + return adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); + } + return @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]); + } + + /** + * Also in ADORecordSet. + * + * Format database date based on user defined format. + * + * @param v is the character date in YYYY-MM-DD format, returned by database + * @param fmt is the format to apply to it, using date() + * + * @return a date formated as user desires + */ + function UserDate($v,$fmt='Y-m-d',$gmt=false) { + $tt = $this->UnixDate($v); + + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) { + return $v; + } else if ($tt == 0) { + return $this->emptyDate; + } else if ($tt == -1) { + // pre-TIMESTAMP_FIRST_YEAR + } + + return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); + + } + + /** + * + * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format + * @param fmt is the format to apply to it, using date() + * + * @return a timestamp formated as user desires + */ + function UserTimeStamp($v,$fmt='Y-m-d H:i:s',$gmt=false) { + if (!isset($v)) { + return $this->emptyTimeStamp; + } + # strlen(14) allows YYYYMMDDHHMMSS format + if (is_numeric($v) && strlen($v)<14) { + return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v); + } + $tt = $this->UnixTimeStamp($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) { + return $v; + } + if ($tt == 0) { + return $this->emptyTimeStamp; + } + return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); + } + + function escape($s,$magic_quotes=false) { + return $this->addq($s,$magic_quotes); + } + + /** + * Quotes a string, without prefixing nor appending quotes. + */ + function addq($s,$magic_quotes=false) { + if (!$magic_quotes) { + if ($this->replaceQuote[0] == '\\') { + // only since php 4.0.5 + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); + //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); + } + return str_replace("'",$this->replaceQuote,$s); + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + + if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) { + // ' already quoted, no need to change anything + return $s; + } else { + // change \' to '' for sybase/mssql + $s = str_replace('\\\\','\\',$s); + return str_replace("\\'",$this->replaceQuote,$s); + } + } + + /** + * Correctly quotes a string so that all strings are escaped. We prefix and append + * to the string single-quotes. + * An example is $db->qstr("Don't bother",magic_quotes_runtime()); + * + * @param s the string to quote + * @param [magic_quotes] if $s is GET/POST var, set to get_magic_quotes_gpc(). + * This undoes the stupidity of magic quotes for GPC. + * + * @return quoted string to be sent back to database + */ + function qstr($s,$magic_quotes=false) { + if (!$magic_quotes) { + if ($this->replaceQuote[0] == '\\'){ + // only since php 4.0.5 + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); + //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); + } + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + + if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) { + // ' already quoted, no need to change anything + return "'$s'"; + } else { + // change \' to '' for sybase/mssql + $s = str_replace('\\\\','\\',$s); + return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; + } + } + + + /** + * Will select the supplied $page number from a recordset, given that it is paginated in pages of + * $nrows rows per page. It also saves two boolean values saying if the given page is the first + * and/or last one of the recordset. Added by Iván Oliva to provide recordset pagination. + * + * See docs-adodb.htm#ex8 for an example of usage. + * + * @param sql + * @param nrows is the number of rows per page to get + * @param page is the page number to get (1-based) + * @param [inputarr] array of bind variables + * @param [secs2cache] is a private parameter only used by jlim + * @return the recordset ($rs->databaseType == 'array') + * + * NOTE: phpLens uses a different algorithm and does not use PageExecute(). + * + */ + function PageExecute($sql, $nrows, $page, $inputarr=false, $secs2cache=0) { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + if ($this->pageExecuteCountRows) { + $rs = _adodb_pageexecute_all_rows($this, $sql, $nrows, $page, $inputarr, $secs2cache); + } else { + $rs = _adodb_pageexecute_no_last_page($this, $sql, $nrows, $page, $inputarr, $secs2cache); + } + return $rs; + } + + + /** + * Will select the supplied $page number from a recordset, given that it is paginated in pages of + * $nrows rows per page. It also saves two boolean values saying if the given page is the first + * and/or last one of the recordset. Added by Iván Oliva to provide recordset pagination. + * + * @param secs2cache seconds to cache data, set to 0 to force query + * @param sql + * @param nrows is the number of rows per page to get + * @param page is the page number to get (1-based) + * @param [inputarr] array of bind variables + * @return the recordset ($rs->databaseType == 'array') + */ + function CachePageExecute($secs2cache, $sql, $nrows, $page,$inputarr=false) { + /*switch($this->dataProvider) { + case 'postgres': + case 'mysql': + break; + default: $secs2cache = 0; break; + }*/ + $rs = $this->PageExecute($sql,$nrows,$page,$inputarr,$secs2cache); + return $rs; + } + +} // end class ADOConnection + + + + //============================================================================================== + // CLASS ADOFetchObj + //============================================================================================== + + /** + * Internal placeholder for record objects. Used by ADORecordSet->FetchObj(). + */ + class ADOFetchObj { + }; + + //============================================================================================== + // CLASS ADORecordSet_empty + //============================================================================================== + + class ADODB_Iterator_empty implements Iterator { + + private $rs; + + function __construct($rs) { + $this->rs = $rs; + } + + function rewind() {} + + function valid() { + return !$this->rs->EOF; + } + + function key() { + return false; + } + + function current() { + return false; + } + + function next() {} + + function __call($func, $params) { + return call_user_func_array(array($this->rs, $func), $params); + } + + function hasMore() { + return false; + } + + } + + + /** + * Lightweight recordset when there are no records to be returned + */ + class ADORecordSet_empty implements IteratorAggregate + { + var $dataProvider = 'empty'; + var $databaseType = false; + var $EOF = true; + var $_numOfRows = 0; + var $fields = false; + var $connection = false; + + function RowCount() { + return 0; + } + + function RecordCount() { + return 0; + } + + function PO_RecordCount() { + return 0; + } + + function Close() { + return true; + } + + function FetchRow() { + return false; + } + + function FieldCount() { + return 0; + } + + function Init() {} + + function getIterator() { + return new ADODB_Iterator_empty($this); + } + + function GetAssoc() { + return array(); + } + + function GetArray() { + return array(); + } + + function GetAll() { + return array(); + } + + function GetArrayLimit() { + return array(); + } + + function GetRows() { + return array(); + } + + function GetRowAssoc() { + return array(); + } + + function MaxRecordCount() { + return 0; + } + + function NumRows() { + return 0; + } + + function NumCols() { + return 0; + } + } + + //============================================================================================== + // DATE AND TIME FUNCTIONS + //============================================================================================== + if (!defined('ADODB_DATE_VERSION')) { + include(ADODB_DIR.'/adodb-time.inc.php'); + } + + //============================================================================================== + // CLASS ADORecordSet + //============================================================================================== + + class ADODB_Iterator implements Iterator { + + private $rs; + + function __construct($rs) { + $this->rs = $rs; + } + + function rewind() { + $this->rs->MoveFirst(); + } + + function valid() { + return !$this->rs->EOF; + } + + function key() { + return $this->rs->_currentRow; + } + + function current() { + return $this->rs->fields; + } + + function next() { + $this->rs->MoveNext(); + } + + function __call($func, $params) { + return call_user_func_array(array($this->rs, $func), $params); + } + + function hasMore() { + return !$this->rs->EOF; + } + + } + + + /** + * RecordSet class that represents the dataset returned by the database. + * To keep memory overhead low, this class holds only the current row in memory. + * No prefetching of data is done, so the RecordCount() can return -1 ( which + * means recordcount not known). + */ + class ADORecordSet implements IteratorAggregate { + + /** + * public variables + */ + var $dataProvider = "native"; + var $fields = false; /// holds the current row data + var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob + /// in other words, we use a text area for editing. + var $canSeek = false; /// indicates that seek is supported + var $sql; /// sql text + var $EOF = false; /// Indicates that the current record position is after the last record in a Recordset object. + + var $emptyTimeStamp = ' '; /// what to display when $time==0 + var $emptyDate = ' '; /// what to display when $time==0 + var $debug = false; + var $timeCreated=0; /// datetime in Unix format rs created -- for cached recordsets + + var $bind = false; /// used by Fields() to hold array - should be private? + var $fetchMode; /// default fetch mode + var $connection = false; /// the parent connection + + /** + * private variables + */ + var $_numOfRows = -1; /** number of rows, or -1 */ + var $_numOfFields = -1; /** number of fields in recordset */ + var $_queryID = -1; /** This variable keeps the result link identifier. */ + var $_currentRow = -1; /** This variable keeps the current row in the Recordset. */ + var $_closed = false; /** has recordset been closed */ + var $_inited = false; /** Init() should only be called once */ + var $_obj; /** Used by FetchObj */ + var $_names; /** Used by FetchObj */ + + var $_currentPage = -1; /** Added by Iván Oliva to implement recordset pagination */ + var $_atFirstPage = false; /** Added by Iván Oliva to implement recordset pagination */ + var $_atLastPage = false; /** Added by Iván Oliva to implement recordset pagination */ + var $_lastPageNo = -1; + var $_maxRecordCount = 0; + var $datetime = false; + + /** + * Constructor + * + * @param queryID this is the queryID returned by ADOConnection->_query() + * + */ + function __construct($queryID) { + $this->_queryID = $queryID; + } + + function __destruct() { + $this->Close(); + } + + function getIterator() { + return new ADODB_Iterator($this); + } + + /* this is experimental - i don't really know what to return... */ + function __toString() { + include_once(ADODB_DIR.'/toexport.inc.php'); + return _adodb_export($this,',',',',false,true); + } + + function Init() { + if ($this->_inited) { + return; + } + $this->_inited = true; + if ($this->_queryID) { + @$this->_initrs(); + } else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + } + if ($this->_numOfRows != 0 && $this->_numOfFields && $this->_currentRow == -1) { + $this->_currentRow = 0; + if ($this->EOF = ($this->_fetch() === false)) { + $this->_numOfRows = 0; // _numOfRows could be -1 + } + } else { + $this->EOF = true; + } + } + + + /** + * Generate a SELECT tag string from a recordset, and return the string. + * If the recordset has 2 cols, we treat the 1st col as the containing + * the text to display to the user, and 2nd col as the return value. Default + * strings are compared with the FIRST column. + * + * @param name name of SELECT tag + * @param [defstr] the value to hilite. Use an array for multiple hilites for listbox. + * @param [blank1stItem] true to leave the 1st item in list empty + * @param [multiple] true for listbox, false for popup + * @param [size] #rows to show for listbox. not used by popup + * @param [selectAttr] additional attributes to defined for SELECT tag. + * useful for holding javascript onChange='...' handlers. + & @param [compareFields0] when we have 2 cols in recordset, we compare the defstr with + * column 0 (1st col) if this is true. This is not documented. + * + * @return HTML + * + * changes by glen.davies@cce.ac.nz to support multiple hilited items + */ + function GetMenu($name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + return _adodb_getmenu($this, $name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,$compareFields0); + } + + + + /** + * Generate a SELECT tag string from a recordset, and return the string. + * If the recordset has 2 cols, we treat the 1st col as the containing + * the text to display to the user, and 2nd col as the return value. Default + * strings are compared with the SECOND column. + * + */ + function GetMenu2($name,$defstr='',$blank1stItem=true,$multiple=false,$size=0, $selectAttr='') { + return $this->GetMenu($name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,false); + } + + /* + Grouped Menu + */ + function GetMenu3($name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='') + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + return _adodb_getmenu_gp($this, $name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,false); + } + + /** + * return recordset as a 2-dimensional array. + * + * @param [nRows] is the number of rows to return. -1 means every row. + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetArray($nRows = -1) { + global $ADODB_EXTENSION; if ($ADODB_EXTENSION) { + $results = adodb_getall($this,$nRows); + return $results; + } + $results = array(); + $cnt = 0; + while (!$this->EOF && $nRows != $cnt) { + $results[] = $this->fields; + $this->MoveNext(); + $cnt++; + } + return $results; + } + + function GetAll($nRows = -1) { + $arr = $this->GetArray($nRows); + return $arr; + } + + /* + * Some databases allow multiple recordsets to be returned. This function + * will return true if there is a next recordset, or false if no more. + */ + function NextRecordSet() { + return false; + } + + /** + * return recordset as a 2-dimensional array. + * Helper function for ADOConnection->SelectLimit() + * + * @param offset is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to return + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetArrayLimit($nrows,$offset=-1) { + if ($offset <= 0) { + $arr = $this->GetArray($nrows); + return $arr; + } + + $this->Move($offset); + + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + /** + * Synonym for GetArray() for compatibility with ADO. + * + * @param [nRows] is the number of rows to return. -1 means every row. + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetRows($nRows = -1) { + $arr = $this->GetArray($nRows); + return $arr; + } + + /** + * return whole recordset as a 2-dimensional associative array if there are more than 2 columns. + * The first column is treated as the key and is not included in the array. + * If there is only 2 columns, it will return a 1 dimensional array of key-value pairs unless + * $force_array == true. + * + * @param [force_array] has only meaning if we have 2 data columns. If false, a 1 dimensional + * array is returned, otherwise a 2 dimensional array is returned. If this sounds confusing, + * read the source. + * + * @param [first2cols] means if there are more than 2 cols, ignore the remaining cols and + * instead of returning array[col0] => array(remaining cols), return array[col0] => col1 + * + * @return an associative array indexed by the first column of the array, + * or false if the data has less than 2 cols. + */ + function GetAssoc($force_array = false, $first2cols = false) { + global $ADODB_EXTENSION; + + $cols = $this->_numOfFields; + if ($cols < 2) { + return false; + } + + // Empty recordset + if (!$this->fields) { + return array(); + } + + // Determine whether the array is associative or 0-based numeric + $numIndex = array_keys($this->fields) == range(0, count($this->fields) - 1); + + $results = array(); + + if (!$first2cols && ($cols > 2 || $force_array)) { + if ($ADODB_EXTENSION) { + if ($numIndex) { + while (!$this->EOF) { + $results[trim($this->fields[0])] = array_slice($this->fields, 1); + adodb_movenext($this); + } + } else { + while (!$this->EOF) { + // Fix for array_slice re-numbering numeric associative keys + $keys = array_slice(array_keys($this->fields), 1); + $sliced_array = array(); + + foreach($keys as $key) { + $sliced_array[$key] = $this->fields[$key]; + } + + $results[trim(reset($this->fields))] = $sliced_array; + adodb_movenext($this); + } + } + } else { + if ($numIndex) { + while (!$this->EOF) { + $results[trim($this->fields[0])] = array_slice($this->fields, 1); + $this->MoveNext(); + } + } else { + while (!$this->EOF) { + // Fix for array_slice re-numbering numeric associative keys + $keys = array_slice(array_keys($this->fields), 1); + $sliced_array = array(); + + foreach($keys as $key) { + $sliced_array[$key] = $this->fields[$key]; + } + + $results[trim(reset($this->fields))] = $sliced_array; + $this->MoveNext(); + } + } + } + } else { + if ($ADODB_EXTENSION) { + // return scalar values + if ($numIndex) { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $results[trim(($this->fields[0]))] = $this->fields[1]; + adodb_movenext($this); + } + } else { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $v1 = trim(reset($this->fields)); + $v2 = ''.next($this->fields); + $results[$v1] = $v2; + adodb_movenext($this); + } + } + } else { + if ($numIndex) { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $results[trim(($this->fields[0]))] = $this->fields[1]; + $this->MoveNext(); + } + } else { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $v1 = trim(reset($this->fields)); + $v2 = ''.next($this->fields); + $results[$v1] = $v2; + $this->MoveNext(); + } + } + } + } + + $ref = $results; # workaround accelerator incompat with PHP 4.4 :( + return $ref; + } + + + /** + * + * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format + * @param fmt is the format to apply to it, using date() + * + * @return a timestamp formated as user desires + */ + function UserTimeStamp($v,$fmt='Y-m-d H:i:s') { + if (is_numeric($v) && strlen($v)<14) { + return adodb_date($fmt,$v); + } + $tt = $this->UnixTimeStamp($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) { + return $v; + } + if ($tt === 0) { + return $this->emptyTimeStamp; + } + return adodb_date($fmt,$tt); + } + + + /** + * @param v is the character date in YYYY-MM-DD format, returned by database + * @param fmt is the format to apply to it, using date() + * + * @return a date formated as user desires + */ + function UserDate($v,$fmt='Y-m-d') { + $tt = $this->UnixDate($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) { + return $v; + } else if ($tt == 0) { + return $this->emptyDate; + } else if ($tt == -1) { + // pre-TIMESTAMP_FIRST_YEAR + } + return adodb_date($fmt,$tt); + } + + + /** + * @param $v is a date string in YYYY-MM-DD format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixDate($v) { + return ADOConnection::UnixDate($v); + } + + + /** + * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixTimeStamp($v) { + return ADOConnection::UnixTimeStamp($v); + } + + + /** + * PEAR DB Compat - do not use internally + */ + function Free() { + return $this->Close(); + } + + + /** + * PEAR DB compat, number of rows + */ + function NumRows() { + return $this->_numOfRows; + } + + + /** + * PEAR DB compat, number of cols + */ + function NumCols() { + return $this->_numOfFields; + } + + /** + * Fetch a row, returning false if no more rows. + * This is PEAR DB compat mode. + * + * @return false or array containing the current record + */ + function FetchRow() { + if ($this->EOF) { + return false; + } + $arr = $this->fields; + $this->_currentRow++; + if (!$this->_fetch()) { + $this->EOF = true; + } + return $arr; + } + + + /** + * Fetch a row, returning PEAR_Error if no more rows. + * This is PEAR DB compat mode. + * + * @return DB_OK or error object + */ + function FetchInto(&$arr) { + if ($this->EOF) { + return (defined('PEAR_ERROR_RETURN')) ? new PEAR_Error('EOF',-1): false; + } + $arr = $this->fields; + $this->MoveNext(); + return 1; // DB_OK + } + + + /** + * Move to the first row in the recordset. Many databases do NOT support this. + * + * @return true or false + */ + function MoveFirst() { + if ($this->_currentRow == 0) { + return true; + } + return $this->Move(0); + } + + + /** + * Move to the last row in the recordset. + * + * @return true or false + */ + function MoveLast() { + if ($this->_numOfRows >= 0) { + return $this->Move($this->_numOfRows-1); + } + if ($this->EOF) { + return false; + } + while (!$this->EOF) { + $f = $this->fields; + $this->MoveNext(); + } + $this->fields = $f; + $this->EOF = false; + return true; + } + + + /** + * Move to next record in the recordset. + * + * @return true if there still rows available, or false if there are no more rows (EOF). + */ + function MoveNext() { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_fetch()) { + return true; + } + } + $this->EOF = true; + /* -- tested error handling when scrolling cursor -- seems useless. + $conn = $this->connection; + if ($conn && $conn->raiseErrorFn && ($errno = $conn->ErrorNo())) { + $fn = $conn->raiseErrorFn; + $fn($conn->databaseType,'MOVENEXT',$errno,$conn->ErrorMsg().' ('.$this->sql.')',$conn->host,$conn->database); + } + */ + return false; + } + + + /** + * Random access to a specific row in the recordset. Some databases do not support + * access to previous rows in the databases (no scrolling backwards). + * + * @param rowNumber is the row to move to (0-based) + * + * @return true if there still rows available, or false if there are no more rows (EOF). + */ + function Move($rowNumber = 0) { + $this->EOF = false; + if ($rowNumber == $this->_currentRow) { + return true; + } + if ($rowNumber >= $this->_numOfRows) { + if ($this->_numOfRows != -1) { + $rowNumber = $this->_numOfRows-2; + } + } + + if ($rowNumber < 0) { + $this->EOF = true; + return false; + } + + if ($this->canSeek) { + if ($this->_seek($rowNumber)) { + $this->_currentRow = $rowNumber; + if ($this->_fetch()) { + return true; + } + } else { + $this->EOF = true; + return false; + } + } else { + if ($rowNumber < $this->_currentRow) { + return false; + } + global $ADODB_EXTENSION; + if ($ADODB_EXTENSION) { + while (!$this->EOF && $this->_currentRow < $rowNumber) { + adodb_movenext($this); + } + } else { + while (! $this->EOF && $this->_currentRow < $rowNumber) { + $this->_currentRow++; + + if (!$this->_fetch()) { + $this->EOF = true; + } + } + } + return !($this->EOF); + } + + $this->fields = false; + $this->EOF = true; + return false; + } + + + /** + * Get the value of a field in the current row by column name. + * Will not work if ADODB_FETCH_MODE is set to ADODB_FETCH_NUM. + * + * @param colname is the field to access + * + * @return the value of $colname column + */ + function Fields($colname) { + return $this->fields[$colname]; + } + + /** + * Defines the function to use for table fields case conversion + * depending on ADODB_ASSOC_CASE + * @return string strtolower/strtoupper or false if no conversion needed + */ + protected function AssocCaseConvertFunction($case = ADODB_ASSOC_CASE) { + switch($case) { + case ADODB_ASSOC_CASE_UPPER: + return 'strtoupper'; + case ADODB_ASSOC_CASE_LOWER: + return 'strtolower'; + case ADODB_ASSOC_CASE_NATIVE: + default: + return false; + } + } + + /** + * Builds the bind array associating keys to recordset fields + * + * @param int $upper Case for the array keys, defaults to uppercase + * (see ADODB_ASSOC_CASE_xxx constants) + */ + function GetAssocKeys($upper = ADODB_ASSOC_CASE) { + if ($this->bind) { + return; + } + $this->bind = array(); + + // Define case conversion function for ASSOC fetch mode + $fn_change_case = $this->AssocCaseConvertFunction($upper); + + // Build the bind array + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + + // Set the array's key + if(is_numeric($o->name)) { + // Just use the field ID + $key = $i; + } + elseif( $fn_change_case ) { + // Convert the key's case + $key = $fn_change_case($o->name); + } + else { + $key = $o->name; + } + + $this->bind[$key] = $i; + } + } + + /** + * Use associative array to get fields array for databases that do not support + * associative arrays. Submitted by Paolo S. Asioli paolo.asioli#libero.it + * + * @param int $upper Case for the array keys, defaults to uppercase + * (see ADODB_ASSOC_CASE_xxx constants) + */ + function GetRowAssoc($upper = ADODB_ASSOC_CASE) { + $record = array(); + $this->GetAssocKeys($upper); + + foreach($this->bind as $k => $v) { + if( array_key_exists( $v, $this->fields ) ) { + $record[$k] = $this->fields[$v]; + } elseif( array_key_exists( $k, $this->fields ) ) { + $record[$k] = $this->fields[$k]; + } else { + # This should not happen... trigger error ? + $record[$k] = null; + } + } + return $record; + } + + /** + * Clean up recordset + * + * @return true or false + */ + function Close() { + // free connection object - this seems to globally free the object + // and not merely the reference, so don't do this... + // $this->connection = false; + if (!$this->_closed) { + $this->_closed = true; + return $this->_close(); + } else + return true; + } + + /** + * synonyms RecordCount and RowCount + * + * @return the number of rows or -1 if this is not supported + */ + function RecordCount() { + return $this->_numOfRows; + } + + + /* + * If we are using PageExecute(), this will return the maximum possible rows + * that can be returned when paging a recordset. + */ + function MaxRecordCount() { + return ($this->_maxRecordCount) ? $this->_maxRecordCount : $this->RecordCount(); + } + + /** + * synonyms RecordCount and RowCount + * + * @return the number of rows or -1 if this is not supported + */ + function RowCount() { + return $this->_numOfRows; + } + + + /** + * Portable RecordCount. Pablo Roca + * + * @return the number of records from a previous SELECT. All databases support this. + * + * But aware possible problems in multiuser environments. For better speed the table + * must be indexed by the condition. Heavy test this before deploying. + */ + function PO_RecordCount($table="", $condition="") { + + $lnumrows = $this->_numOfRows; + // the database doesn't support native recordcount, so we do a workaround + if ($lnumrows == -1 && $this->connection) { + IF ($table) { + if ($condition) { + $condition = " WHERE " . $condition; + } + $resultrows = $this->connection->Execute("SELECT COUNT(*) FROM $table $condition"); + if ($resultrows) { + $lnumrows = reset($resultrows->fields); + } + } + } + return $lnumrows; + } + + + /** + * @return the current row in the recordset. If at EOF, will return the last row. 0-based. + */ + function CurrentRow() { + return $this->_currentRow; + } + + /** + * synonym for CurrentRow -- for ADO compat + * + * @return the current row in the recordset. If at EOF, will return the last row. 0-based. + */ + function AbsolutePosition() { + return $this->_currentRow; + } + + /** + * @return the number of columns in the recordset. Some databases will set this to 0 + * if no records are returned, others will return the number of columns in the query. + */ + function FieldCount() { + return $this->_numOfFields; + } + + + /** + * Get the ADOFieldObject of a specific column. + * + * @param fieldoffset is the column position to access(0-based). + * + * @return the ADOFieldObject for that column, or false. + */ + function FetchField($fieldoffset = -1) { + // must be defined by child class + + return false; + } + + /** + * Get the ADOFieldObjects of all columns in an array. + * + */ + function FieldTypesArray() { + $arr = array(); + for ($i=0, $max=$this->_numOfFields; $i < $max; $i++) + $arr[] = $this->FetchField($i); + return $arr; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default case is lowercase field names. + * + * @return the object with the properties set to the fields of the current row + */ + function FetchObj() { + $o = $this->FetchObject(false); + return $o; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default case is uppercase. + * + * @param $isupper to set the object property names to uppercase + * + * @return the object with the properties set to the fields of the current row + */ + function FetchObject($isupper=true) { + if (empty($this->_obj)) { + $this->_obj = new ADOFetchObj(); + $this->_names = array(); + for ($i=0; $i <$this->_numOfFields; $i++) { + $f = $this->FetchField($i); + $this->_names[] = $f->name; + } + } + $i = 0; + if (PHP_VERSION >= 5) { + $o = clone($this->_obj); + } else { + $o = $this->_obj; + } + + for ($i=0; $i <$this->_numOfFields; $i++) { + $name = $this->_names[$i]; + if ($isupper) { + $n = strtoupper($name); + } else { + $n = $name; + } + + $o->$n = $this->Fields($name); + } + return $o; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default is lower-case field names. + * + * @return the object with the properties set to the fields of the current row, + * or false if EOF + * + * Fixed bug reported by tim@orotech.net + */ + function FetchNextObj() { + $o = $this->FetchNextObject(false); + return $o; + } + + + /** + * Return the fields array of the current row as an object for convenience. + * The default is upper case field names. + * + * @param $isupper to set the object property names to uppercase + * + * @return the object with the properties set to the fields of the current row, + * or false if EOF + * + * Fixed bug reported by tim@orotech.net + */ + function FetchNextObject($isupper=true) { + $o = false; + if ($this->_numOfRows != 0 && !$this->EOF) { + $o = $this->FetchObject($isupper); + $this->_currentRow++; + if ($this->_fetch()) { + return $o; + } + } + $this->EOF = true; + return $o; + } + + /** + * Get the metatype of the column. This is used for formatting. This is because + * many databases use different names for the same type, so we transform the original + * type to our standardised version which uses 1 character codes: + * + * @param t is the type passed in. Normally is ADOFieldObject->type. + * @param len is the maximum length of that field. This is because we treat character + * fields bigger than a certain size as a 'B' (blob). + * @param fieldobj is the field object returned by the database driver. Can hold + * additional info (eg. primary_key for mysql). + * + * @return the general type of the data: + * C for character < 250 chars + * X for teXt (>= 250 chars) + * B for Binary + * N for numeric or floating point + * D for date + * T for timestamp + * L for logical/Boolean + * I for integer + * R for autoincrement counter/integer + * + * + */ + function MetaType($t,$len=-1,$fieldobj=false) { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + // changed in 2.32 to hashing instead of switch stmt for speed... + static $typeMap = array( + 'VARCHAR' => 'C', + 'VARCHAR2' => 'C', + 'CHAR' => 'C', + 'C' => 'C', + 'STRING' => 'C', + 'NCHAR' => 'C', + 'NVARCHAR' => 'C', + 'VARYING' => 'C', + 'BPCHAR' => 'C', + 'CHARACTER' => 'C', + 'INTERVAL' => 'C', # Postgres + 'MACADDR' => 'C', # postgres + 'VAR_STRING' => 'C', # mysql + ## + 'LONGCHAR' => 'X', + 'TEXT' => 'X', + 'NTEXT' => 'X', + 'M' => 'X', + 'X' => 'X', + 'CLOB' => 'X', + 'NCLOB' => 'X', + 'LVARCHAR' => 'X', + ## + 'BLOB' => 'B', + 'IMAGE' => 'B', + 'BINARY' => 'B', + 'VARBINARY' => 'B', + 'LONGBINARY' => 'B', + 'B' => 'B', + ## + 'YEAR' => 'D', // mysql + 'DATE' => 'D', + 'D' => 'D', + ## + 'UNIQUEIDENTIFIER' => 'C', # MS SQL Server + ## + 'SMALLDATETIME' => 'T', + 'TIME' => 'T', + 'TIMESTAMP' => 'T', + 'DATETIME' => 'T', + 'DATETIME2' => 'T', + 'TIMESTAMPTZ' => 'T', + 'T' => 'T', + 'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql + ## + 'BOOL' => 'L', + 'BOOLEAN' => 'L', + 'BIT' => 'L', + 'L' => 'L', + ## + 'COUNTER' => 'R', + 'R' => 'R', + 'SERIAL' => 'R', // ifx + 'INT IDENTITY' => 'R', + ## + 'INT' => 'I', + 'INT2' => 'I', + 'INT4' => 'I', + 'INT8' => 'I', + 'INTEGER' => 'I', + 'INTEGER UNSIGNED' => 'I', + 'SHORT' => 'I', + 'TINYINT' => 'I', + 'SMALLINT' => 'I', + 'I' => 'I', + ## + 'LONG' => 'N', // interbase is numeric, oci8 is blob + 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers + 'DECIMAL' => 'N', + 'DEC' => 'N', + 'REAL' => 'N', + 'DOUBLE' => 'N', + 'DOUBLE PRECISION' => 'N', + 'SMALLFLOAT' => 'N', + 'FLOAT' => 'N', + 'NUMBER' => 'N', + 'NUM' => 'N', + 'NUMERIC' => 'N', + 'MONEY' => 'N', + + ## informix 9.2 + 'SQLINT' => 'I', + 'SQLSERIAL' => 'I', + 'SQLSMINT' => 'I', + 'SQLSMFLOAT' => 'N', + 'SQLFLOAT' => 'N', + 'SQLMONEY' => 'N', + 'SQLDECIMAL' => 'N', + 'SQLDATE' => 'D', + 'SQLVCHAR' => 'C', + 'SQLCHAR' => 'C', + 'SQLDTIME' => 'T', + 'SQLINTERVAL' => 'N', + 'SQLBYTES' => 'B', + 'SQLTEXT' => 'X', + ## informix 10 + "SQLINT8" => 'I8', + "SQLSERIAL8" => 'I8', + "SQLNCHAR" => 'C', + "SQLNVCHAR" => 'C', + "SQLLVARCHAR" => 'X', + "SQLBOOL" => 'L' + ); + + $tmap = false; + $t = strtoupper($t); + $tmap = (isset($typeMap[$t])) ? $typeMap[$t] : 'N'; + switch ($tmap) { + case 'C': + // is the char field is too long, return as text field... + if ($this->blobSize >= 0) { + if ($len > $this->blobSize) { + return 'X'; + } + } else if ($len > 250) { + return 'X'; + } + return 'C'; + + case 'I': + if (!empty($fieldobj->primary_key)) { + return 'R'; + } + return 'I'; + + case false: + return 'N'; + + case 'B': + if (isset($fieldobj->binary)) { + return ($fieldobj->binary) ? 'B' : 'X'; + } + return 'B'; + + case 'D': + if (!empty($this->connection) && !empty($this->connection->datetime)) { + return 'T'; + } + return 'D'; + + default: + if ($t == 'LONG' && $this->dataProvider == 'oci8') { + return 'B'; + } + return $tmap; + } + } + + /** + * Convert case of field names associative array, if needed + * @return void + */ + protected function _updatefields() + { + if( empty($this->fields)) { + return; + } + + // Determine case conversion function + $fn_change_case = $this->AssocCaseConvertFunction(); + if(!$fn_change_case) { + // No conversion needed + return; + } + + $arr = array(); + + // Change the case + foreach($this->fields as $k => $v) { + if (!is_integer($k)) { + $k = $fn_change_case($k); + } + $arr[$k] = $v; + } + $this->fields = $arr; + } + + function _close() {} + + /** + * set/returns the current recordset page when paginating + */ + function AbsolutePage($page=-1) { + if ($page != -1) { + $this->_currentPage = $page; + } + return $this->_currentPage; + } + + /** + * set/returns the status of the atFirstPage flag when paginating + */ + function AtFirstPage($status=false) { + if ($status != false) { + $this->_atFirstPage = $status; + } + return $this->_atFirstPage; + } + + function LastPageNo($page = false) { + if ($page != false) { + $this->_lastPageNo = $page; + } + return $this->_lastPageNo; + } + + /** + * set/returns the status of the atLastPage flag when paginating + */ + function AtLastPage($status=false) { + if ($status != false) { + $this->_atLastPage = $status; + } + return $this->_atLastPage; + } + +} // end class ADORecordSet + + //============================================================================================== + // CLASS ADORecordSet_array + //============================================================================================== + + /** + * This class encapsulates the concept of a recordset created in memory + * as an array. This is useful for the creation of cached recordsets. + * + * Note that the constructor is different from the standard ADORecordSet + */ + class ADORecordSet_array extends ADORecordSet + { + var $databaseType = 'array'; + + var $_array; // holds the 2-dimensional data array + var $_types; // the array of types of each column (C B I L M) + var $_colnames; // names of each column in array + var $_skiprow1; // skip 1st row because it holds column names + var $_fieldobjects; // holds array of field objects + var $canSeek = true; + var $affectedrows = false; + var $insertid = false; + var $sql = ''; + var $compat = false; + + /** + * Constructor + */ + function __construct($fakeid=1) { + global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH; + + // fetch() on EOF does not delete $this->fields + $this->compat = !empty($ADODB_COMPAT_FETCH); + parent::__construct($fakeid); // fake queryID + $this->fetchMode = $ADODB_FETCH_MODE; + } + + function _transpose($addfieldnames=true) { + global $ADODB_INCLUDED_LIB; + + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + $hdr = true; + + $fobjs = $addfieldnames ? $this->_fieldobjects : false; + adodb_transpose($this->_array, $newarr, $hdr, $fobjs); + //adodb_pr($newarr); + + $this->_skiprow1 = false; + $this->_array = $newarr; + $this->_colnames = $hdr; + + adodb_probetypes($newarr,$this->_types); + + $this->_fieldobjects = array(); + + foreach($hdr as $k => $name) { + $f = new ADOFieldObject(); + $f->name = $name; + $f->type = $this->_types[$k]; + $f->max_length = -1; + $this->_fieldobjects[] = $f; + } + $this->fields = reset($this->_array); + + $this->_initrs(); + + } + + /** + * Setup the array. + * + * @param array is a 2-dimensional array holding the data. + * The first row should hold the column names + * unless paramter $colnames is used. + * @param typearr holds an array of types. These are the same types + * used in MetaTypes (C,B,L,I,N). + * @param [colnames] array of column names. If set, then the first row of + * $array should not hold the column names. + */ + function InitArray($array,$typearr,$colnames=false) { + $this->_array = $array; + $this->_types = $typearr; + if ($colnames) { + $this->_skiprow1 = false; + $this->_colnames = $colnames; + } else { + $this->_skiprow1 = true; + $this->_colnames = $array[0]; + } + $this->Init(); + } + /** + * Setup the Array and datatype file objects + * + * @param array is a 2-dimensional array holding the data. + * The first row should hold the column names + * unless paramter $colnames is used. + * @param fieldarr holds an array of ADOFieldObject's. + */ + function InitArrayFields(&$array,&$fieldarr) { + $this->_array = $array; + $this->_skiprow1= false; + if ($fieldarr) { + $this->_fieldobjects = $fieldarr; + } + $this->Init(); + } + + function GetArray($nRows=-1) { + if ($nRows == -1 && $this->_currentRow <= 0 && !$this->_skiprow1) { + return $this->_array; + } else { + $arr = ADORecordSet::GetArray($nRows); + return $arr; + } + } + + function _initrs() { + $this->_numOfRows = sizeof($this->_array); + if ($this->_skiprow1) { + $this->_numOfRows -= 1; + } + + $this->_numOfFields = (isset($this->_fieldobjects)) + ? sizeof($this->_fieldobjects) + : sizeof($this->_types); + } + + /* Use associative array to get fields array */ + function Fields($colname) { + $mode = isset($this->adodbFetchMode) ? $this->adodbFetchMode : $this->fetchMode; + + if ($mode & ADODB_FETCH_ASSOC) { + if (!isset($this->fields[$colname]) && !is_null($this->fields[$colname])) { + $colname = strtolower($colname); + } + return $this->fields[$colname]; + } + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function FetchField($fieldOffset = -1) { + if (isset($this->_fieldobjects)) { + return $this->_fieldobjects[$fieldOffset]; + } + $o = new ADOFieldObject(); + $o->name = $this->_colnames[$fieldOffset]; + $o->type = $this->_types[$fieldOffset]; + $o->max_length = -1; // length not known + + return $o; + } + + function _seek($row) { + if (sizeof($this->_array) && 0 <= $row && $row < $this->_numOfRows) { + $this->_currentRow = $row; + if ($this->_skiprow1) { + $row += 1; + } + $this->fields = $this->_array[$row]; + return true; + } + return false; + } + + function MoveNext() { + if (!$this->EOF) { + $this->_currentRow++; + + $pos = $this->_currentRow; + + if ($this->_numOfRows <= $pos) { + if (!$this->compat) { + $this->fields = false; + } + } else { + if ($this->_skiprow1) { + $pos += 1; + } + $this->fields = $this->_array[$pos]; + return true; + } + $this->EOF = true; + } + + return false; + } + + function _fetch() { + $pos = $this->_currentRow; + + if ($this->_numOfRows <= $pos) { + if (!$this->compat) { + $this->fields = false; + } + return false; + } + if ($this->_skiprow1) { + $pos += 1; + } + $this->fields = $this->_array[$pos]; + return true; + } + + function _close() { + return true; + } + + } // ADORecordSet_array + + //============================================================================================== + // HELPER FUNCTIONS + //============================================================================================== + + /** + * Synonym for ADOLoadCode. Private function. Do not use. + * + * @deprecated + */ + function ADOLoadDB($dbType) { + return ADOLoadCode($dbType); + } + + /** + * Load the code for a specific database driver. Private function. Do not use. + */ + function ADOLoadCode($dbType) { + global $ADODB_LASTDB; + + if (!$dbType) { + return false; + } + $db = strtolower($dbType); + switch ($db) { + case 'ado': + if (PHP_VERSION >= 5) { + $db = 'ado5'; + } + $class = 'ado'; + break; + + case 'ifx': + case 'maxsql': + $class = $db = 'mysqlt'; + break; + + case 'pgsql': + case 'postgres': + $class = $db = 'postgres8'; + break; + + default: + $class = $db; break; + } + + $file = ADODB_DIR."/drivers/adodb-".$db.".inc.php"; + @include_once($file); + $ADODB_LASTDB = $class; + if (class_exists("ADODB_" . $class)) { + return $class; + } + + //ADOConnection::outp(adodb_pr(get_declared_classes(),true)); + if (!file_exists($file)) { + ADOConnection::outp("Missing file: $file"); + } else { + ADOConnection::outp("Syntax error in file: $file"); + } + return false; + } + + /** + * synonym for ADONewConnection for people like me who cannot remember the correct name + */ + function NewADOConnection($db='') { + $tmp = ADONewConnection($db); + return $tmp; + } + + /** + * Instantiate a new Connection class for a specific database driver. + * + * @param [db] is the database Connection object to create. If undefined, + * use the last database driver that was loaded by ADOLoadCode(). + * + * @return the freshly created instance of the Connection class. + */ + function ADONewConnection($db='') { + global $ADODB_NEWCONNECTION, $ADODB_LASTDB; + + if (!defined('ADODB_ASSOC_CASE')) { + define('ADODB_ASSOC_CASE', ADODB_ASSOC_CASE_NATIVE); + } + $errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false; + if (($at = strpos($db,'://')) !== FALSE) { + $origdsn = $db; + $fakedsn = 'fake'.substr($origdsn,$at); + if (($at2 = strpos($origdsn,'@/')) !== FALSE) { + // special handling of oracle, which might not have host + $fakedsn = str_replace('@/','@adodb-fakehost/',$fakedsn); + } + + if ((strpos($origdsn, 'sqlite')) !== FALSE && stripos($origdsn, '%2F') === FALSE) { + // special handling for SQLite, it only might have the path to the database file. + // If you try to connect to a SQLite database using a dsn + // like 'sqlite:///path/to/database', the 'parse_url' php function + // will throw you an exception with a message such as "unable to parse url" + list($scheme, $path) = explode('://', $origdsn); + $dsna['scheme'] = $scheme; + if ($qmark = strpos($path,'?')) { + $dsn['query'] = substr($path,$qmark+1); + $path = substr($path,0,$qmark); + } + $dsna['path'] = '/' . urlencode($path); + } else + $dsna = @parse_url($fakedsn); + + if (!$dsna) { + return false; + } + $dsna['scheme'] = substr($origdsn,0,$at); + if ($at2 !== FALSE) { + $dsna['host'] = ''; + } + + if (strncmp($origdsn,'pdo',3) == 0) { + $sch = explode('_',$dsna['scheme']); + if (sizeof($sch)>1) { + $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : ''; + if ($sch[1] == 'sqlite') { + $dsna['host'] = rawurlencode($sch[1].':'.rawurldecode($dsna['host'])); + } else { + $dsna['host'] = rawurlencode($sch[1].':host='.rawurldecode($dsna['host'])); + } + $dsna['scheme'] = 'pdo'; + } + } + + $db = @$dsna['scheme']; + if (!$db) { + return false; + } + $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : ''; + $dsna['user'] = isset($dsna['user']) ? rawurldecode($dsna['user']) : ''; + $dsna['pass'] = isset($dsna['pass']) ? rawurldecode($dsna['pass']) : ''; + $dsna['path'] = isset($dsna['path']) ? rawurldecode(substr($dsna['path'],1)) : ''; # strip off initial / + + if (isset($dsna['query'])) { + $opt1 = explode('&',$dsna['query']); + foreach($opt1 as $k => $v) { + $arr = explode('=',$v); + $opt[$arr[0]] = isset($arr[1]) ? rawurldecode($arr[1]) : 1; + } + } else { + $opt = array(); + } + } + /* + * phptype: Database backend used in PHP (mysql, odbc etc.) + * dbsyntax: Database used with regards to SQL syntax etc. + * protocol: Communication protocol to use (tcp, unix etc.) + * hostspec: Host specification (hostname[:port]) + * database: Database to use on the DBMS server + * username: User name for login + * password: Password for login + */ + if (!empty($ADODB_NEWCONNECTION)) { + $obj = $ADODB_NEWCONNECTION($db); + + } + + if(empty($obj)) { + + if (!isset($ADODB_LASTDB)) { + $ADODB_LASTDB = ''; + } + if (empty($db)) { + $db = $ADODB_LASTDB; + } + if ($db != $ADODB_LASTDB) { + $db = ADOLoadCode($db); + } + + if (!$db) { + if (isset($origdsn)) { + $db = $origdsn; + } + if ($errorfn) { + // raise an error + $ignore = false; + $errorfn('ADONewConnection', 'ADONewConnection', -998, + "could not load the database driver for '$db'", + $db,false,$ignore); + } else { + ADOConnection::outp( "

ADONewConnection: Unable to load database driver '$db'

",false); + } + return false; + } + + $cls = 'ADODB_'.$db; + if (!class_exists($cls)) { + adodb_backtrace(); + return false; + } + + $obj = new $cls(); + } + + # constructor should not fail + if ($obj) { + if ($errorfn) { + $obj->raiseErrorFn = $errorfn; + } + if (isset($dsna)) { + if (isset($dsna['port'])) { + $obj->port = $dsna['port']; + } + foreach($opt as $k => $v) { + switch(strtolower($k)) { + case 'new': + $nconnect = true; $persist = true; break; + case 'persist': + case 'persistent': $persist = $v; break; + case 'debug': $obj->debug = (integer) $v; break; + #ibase + case 'role': $obj->role = $v; break; + case 'dialect': $obj->dialect = (integer) $v; break; + case 'charset': $obj->charset = $v; $obj->charSet=$v; break; + case 'buffers': $obj->buffers = $v; break; + case 'fetchmode': $obj->SetFetchMode($v); break; + #ado + case 'charpage': $obj->charPage = $v; break; + #mysql, mysqli + case 'clientflags': $obj->clientFlags = $v; break; + #mysql, mysqli, postgres + case 'port': $obj->port = $v; break; + #mysqli + case 'socket': $obj->socket = $v; break; + #oci8 + case 'nls_date_format': $obj->NLS_DATE_FORMAT = $v; break; + case 'cachesecs': $obj->cacheSecs = $v; break; + case 'memcache': + $varr = explode(':',$v); + $vlen = sizeof($varr); + if ($vlen == 0) { + break; + } + $obj->memCache = true; + $obj->memCacheHost = explode(',',$varr[0]); + if ($vlen == 1) { + break; + } + $obj->memCachePort = $varr[1]; + if ($vlen == 2) { + break; + } + $obj->memCacheCompress = $varr[2] ? true : false; + break; + } + } + if (empty($persist)) { + $ok = $obj->Connect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + } else if (empty($nconnect)) { + $ok = $obj->PConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + } else { + $ok = $obj->NConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + } + + if (!$ok) { + return false; + } + } + } + return $obj; + } + + + + // $perf == true means called by NewPerfMonitor(), otherwise for data dictionary + function _adodb_getdriver($provider,$drivername,$perf=false) { + switch ($provider) { + case 'odbtp': + if (strncmp('odbtp_',$drivername,6)==0) { + return substr($drivername,6); + } + case 'odbc' : + if (strncmp('odbc_',$drivername,5)==0) { + return substr($drivername,5); + } + case 'ado' : + if (strncmp('ado_',$drivername,4)==0) { + return substr($drivername,4); + } + case 'native': + break; + default: + return $provider; + } + + switch($drivername) { + case 'mysqlt': + case 'mysqli': + $drivername='mysql'; + break; + case 'postgres7': + case 'postgres8': + $drivername = 'postgres'; + break; + case 'firebird15': + $drivername = 'firebird'; + break; + case 'oracle': + $drivername = 'oci8'; + break; + case 'access': + if ($perf) { + $drivername = ''; + } + break; + case 'db2' : + case 'sapdb' : + break; + default: + $drivername = 'generic'; + break; + } + return $drivername; + } + + function NewPerfMonitor(&$conn) { + $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType,true); + if (!$drivername || $drivername == 'generic') { + return false; + } + include_once(ADODB_DIR.'/adodb-perf.inc.php'); + @include_once(ADODB_DIR."/perf/perf-$drivername.inc.php"); + $class = "Perf_$drivername"; + if (!class_exists($class)) { + return false; + } + $perf = new $class($conn); + + return $perf; + } + + function NewDataDictionary(&$conn,$drivername=false) { + if (!$drivername) { + $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType); + } + + include_once(ADODB_DIR.'/adodb-lib.inc.php'); + include_once(ADODB_DIR.'/adodb-datadict.inc.php'); + $path = ADODB_DIR."/datadict/datadict-$drivername.inc.php"; + + if (!file_exists($path)) { + ADOConnection::outp("Dictionary driver '$path' not available"); + return false; + } + include_once($path); + $class = "ADODB2_$drivername"; + $dict = new $class(); + $dict->dataProvider = $conn->dataProvider; + $dict->connection = $conn; + $dict->upperName = strtoupper($drivername); + $dict->quote = $conn->nameQuote; + if (!empty($conn->_connectionID)) { + $dict->serverInfo = $conn->ServerInfo(); + } + + return $dict; + } + + + + /* + Perform a print_r, with pre tags for better formatting. + */ + function adodb_pr($var,$as_string=false) { + if ($as_string) { + ob_start(); + } + + if (isset($_SERVER['HTTP_USER_AGENT'])) { + echo "
\n";print_r($var);echo "
\n"; + } else { + print_r($var); + } + + if ($as_string) { + $s = ob_get_contents(); + ob_end_clean(); + return $s; + } + } + + /* + Perform a stack-crawl and pretty print it. + + @param printOrArr Pass in a boolean to indicate print, or an $exception->trace array (assumes that print is true then). + @param levels Number of levels to display + */ + function adodb_backtrace($printOrArr=true,$levels=9999,$ishtml=null) { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) { + include(ADODB_DIR.'/adodb-lib.inc.php'); + } + return _adodb_backtrace($printOrArr,$levels,0,$ishtml); + } + +} diff --git a/ehcp/adodb5/composer.json b/ehcp/adodb5/composer.json new file mode 100644 index 0000000..d553724 --- /dev/null +++ b/ehcp/adodb5/composer.json @@ -0,0 +1,37 @@ +{ + "name" : "adodb/adodb-php", + "description" : "ADOdb is a PHP database abstraction layer library", + "license" : [ "BSD-3-Clause", "LGPL-2.1" ], + "authors" : [ + { + "name": "John Lim", + "email" : "jlim@natsoft.com", + "role": "Author" + }, + { + "name": "Damien Regad", + "role": "Current maintainer" + }, + { + "name": "Mark Newnham", + "role": "Developer" + } + ], + + "keywords" : [ "database", "abstraction", "layer", "library", "php" ], + + "homepage": "http://adodb.sourceforge.net/", + "support" : { + "issues" : "https://github.com/ADOdb/ADOdb/issues", + "source" : "https://github.com/ADOdb/ADOdb" + }, + + "require" : { + "php" : ">=5.3.2" + }, + + "autoload" : { + "files" : ["adodb.inc.php"] + } + +} diff --git a/ehcp/adodb5/contrib/toxmlrpc.inc.php b/ehcp/adodb5/contrib/toxmlrpc.inc.php new file mode 100644 index 0000000..f769cc5 --- /dev/null +++ b/ehcp/adodb5/contrib/toxmlrpc.inc.php @@ -0,0 +1,181 @@ +GetArray()) would work with: + * - ADODB_FETCH_BOTH + * - null values + */ + + /** + * Include the main libraries + */ + require_once('xmlrpc.inc'); + if (!defined('ADODB_DIR')) require_once('adodb.inc.php'); + + /** + * Builds an xmlrpc struct value out of an AdoDB recordset + */ + function rs2xmlrpcval(&$adodbrs) { + + $header = rs2xmlrpcval_header($adodbrs); + $body = rs2xmlrpcval_body($adodbrs); + + // put it all together and build final xmlrpc struct + $xmlrpcrs = new xmlrpcval ( array( + "header" => $header, + "body" => $body, + ), "struct"); + + return $xmlrpcrs; + + } + + /** + * Builds an xmlrpc struct value describing an AdoDB recordset + */ + function rs2xmlrpcval_header($adodbrs) + { + $numfields = $adodbrs->FieldCount(); + $numrecords = $adodbrs->RecordCount(); + + // build structure holding recordset information + $fieldstruct = array(); + for ($i = 0; $i < $numfields; $i++) { + $fld = $adodbrs->FetchField($i); + $fieldarray = array(); + if (isset($fld->name)) + $fieldarray["name"] = new xmlrpcval ($fld->name); + if (isset($fld->type)) + $fieldarray["type"] = new xmlrpcval ($fld->type); + if (isset($fld->max_length)) + $fieldarray["max_length"] = new xmlrpcval ($fld->max_length, "int"); + if (isset($fld->not_null)) + $fieldarray["not_null"] = new xmlrpcval ($fld->not_null, "boolean"); + if (isset($fld->has_default)) + $fieldarray["has_default"] = new xmlrpcval ($fld->has_default, "boolean"); + if (isset($fld->default_value)) + $fieldarray["default_value"] = new xmlrpcval ($fld->default_value); + $fieldstruct[$i] = new xmlrpcval ($fieldarray, "struct"); + } + $fieldcount = new xmlrpcval ($numfields, "int"); + $recordcount = new xmlrpcval ($numrecords, "int"); + $sql = new xmlrpcval ($adodbrs->sql); + $fieldinfo = new xmlrpcval ($fieldstruct, "array"); + + $header = new xmlrpcval ( array( + "fieldcount" => $fieldcount, + "recordcount" => $recordcount, + "sql" => $sql, + "fieldinfo" => $fieldinfo + ), "struct"); + + return $header; + } + + /** + * Builds an xmlrpc struct value out of an AdoDB recordset + * (data values only, no data definition) + */ + function rs2xmlrpcval_body($adodbrs) + { + $numfields = $adodbrs->FieldCount(); + + // build structure containing recordset data + $adodbrs->MoveFirst(); + $rows = array(); + while (!$adodbrs->EOF) { + $columns = array(); + // This should work on all cases of fetch mode: assoc, num, both or default + if ($adodbrs->fetchMode == 'ADODB_FETCH_BOTH' || count($adodbrs->fields) == 2 * $adodbrs->FieldCount()) + for ($i = 0; $i < $numfields; $i++) + if ($adodbrs->fields[$i] === null) + $columns[$i] = new xmlrpcval (''); + else + $columns[$i] = xmlrpc_encode ($adodbrs->fields[$i]); + else + foreach ($adodbrs->fields as $val) + if ($val === null) + $columns[] = new xmlrpcval (''); + else + $columns[] = xmlrpc_encode ($val); + + $rows[] = new xmlrpcval ($columns, "array"); + + $adodbrs->MoveNext(); + } + $body = new xmlrpcval ($rows, "array"); + + return $body; + } + + /** + * Returns an xmlrpc struct value as string out of an AdoDB recordset + */ + function rs2xmlrpcstring (&$adodbrs) { + $xmlrpc = rs2xmlrpcval ($adodbrs); + if ($xmlrpc) + return $xmlrpc->serialize(); + else + return null; + } + + /** + * Given a well-formed xmlrpc struct object returns an AdoDB object + * + * @todo add some error checking on the input value + */ + function xmlrpcval2rs (&$xmlrpcval) { + + $fields_array = array(); + $data_array = array(); + + // rebuild column information + $header = $xmlrpcval->structmem('header'); + + $numfields = $header->structmem('fieldcount'); + $numfields = $numfields->scalarval(); + $numrecords = $header->structmem('recordcount'); + $numrecords = $numrecords->scalarval(); + $sqlstring = $header->structmem('sql'); + $sqlstring = $sqlstring->scalarval(); + + $fieldinfo = $header->structmem('fieldinfo'); + for ($i = 0; $i < $numfields; $i++) { + $temp = $fieldinfo->arraymem($i); + $fld = new ADOFieldObject(); + while (list($key,$value) = $temp->structeach()) { + if ($key == "name") $fld->name = $value->scalarval(); + if ($key == "type") $fld->type = $value->scalarval(); + if ($key == "max_length") $fld->max_length = $value->scalarval(); + if ($key == "not_null") $fld->not_null = $value->scalarval(); + if ($key == "has_default") $fld->has_default = $value->scalarval(); + if ($key == "default_value") $fld->default_value = $value->scalarval(); + } // while + $fields_array[] = $fld; + } // for + + // fetch recordset information into php array + $body = $xmlrpcval->structmem('body'); + for ($i = 0; $i < $numrecords; $i++) { + $data_array[$i]= array(); + $xmlrpcrs_row = $body->arraymem($i); + for ($j = 0; $j < $numfields; $j++) { + $temp = $xmlrpcrs_row->arraymem($j); + $data_array[$i][$j] = $temp->scalarval(); + } // for j + } // for i + + // finally build in-memory recordset object and return it + $rs = new ADORecordSet_array(); + $rs->InitArrayFields($data_array,$fields_array); + return $rs; + + } diff --git a/ehcp/adodb5/cute_icons_for_site/adodb.gif b/ehcp/adodb5/cute_icons_for_site/adodb.gif new file mode 100644 index 0000000..c5e8dfc Binary files /dev/null and b/ehcp/adodb5/cute_icons_for_site/adodb.gif differ diff --git a/ehcp/adodb5/cute_icons_for_site/adodb2.gif b/ehcp/adodb5/cute_icons_for_site/adodb2.gif new file mode 100644 index 0000000..f12ae20 Binary files /dev/null and b/ehcp/adodb5/cute_icons_for_site/adodb2.gif differ diff --git a/ehcp/adodb5/datadict/datadict-access.inc.php b/ehcp/adodb5/datadict/datadict-access.inc.php new file mode 100644 index 0000000..8afc707 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-access.inc.php @@ -0,0 +1,95 @@ +debug) ADOConnection::outp("Warning: Access does not supported DEFAULT values (field $fname)"); + } + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + function CreateDatabase($dbname,$options=false) + { + return array(); + } + + + function SetSchema($schema) + { + } + + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + if ($this->debug) ADOConnection::outp("AlterColumnSQL not supported"); + return array(); + } + + + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported"); + return array(); + } + +} diff --git a/ehcp/adodb5/datadict/datadict-db2.inc.php b/ehcp/adodb5/datadict/datadict-db2.inc.php new file mode 100644 index 0000000..104f885 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-db2.inc.php @@ -0,0 +1,143 @@ +debug) ADOConnection::outp("AlterColumnSQL not supported"); + return array(); + } + + + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported"); + return array(); + } + + + function ChangeTableSQL($tablename, $flds, $tableoptions = false) + { + + /** + Allow basic table changes to DB2 databases + DB2 will fatally reject changes to non character columns + + */ + + $validTypes = array("CHAR","VARC"); + $invalidTypes = array("BIGI","BLOB","CLOB","DATE", "DECI","DOUB", "INTE", "REAL","SMAL", "TIME"); + // check table exists + $cols = $this->MetaColumns($tablename); + if ( empty($cols)) { + return $this->CreateTableSQL($tablename, $flds, $tableoptions); + } + + // already exists, alter table instead + list($lines,$pkey) = $this->_GenFields($flds); + $alter = 'ALTER TABLE ' . $this->TableName($tablename); + $sql = array(); + + foreach ( $lines as $id => $v ) { + if ( isset($cols[$id]) && is_object($cols[$id]) ) { + /** + If the first field of $v is the fieldname, and + the second is the field type/size, we assume its an + attempt to modify the column size, so check that it is allowed + $v can have an indeterminate number of blanks between the + fields, so account for that too + */ + $vargs = explode(' ' , $v); + // assume that $vargs[0] is the field name. + $i=0; + // Find the next non-blank value; + for ($i=1;$ialterCol . ' ' . $v; + } else { + $sql[] = $alter . $this->addCol . ' ' . $v; + } + } + + return $sql; + } + +} diff --git a/ehcp/adodb5/datadict/datadict-firebird.inc.php b/ehcp/adodb5/datadict/datadict-firebird.inc.php new file mode 100644 index 0000000..e4eff83 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-firebird.inc.php @@ -0,0 +1,151 @@ +connection) ) { + return $name; + } + + $quote = $this->connection->nameQuote; + + // if name is of the form `name`, quote it + if ( preg_match('/^`(.+)`$/', $name, $matches) ) { + return $quote . $matches[1] . $quote; + } + + // if name contains special characters, quote it + if ( !preg_match('/^[' . $this->nameRegex . ']+$/', $name) ) { + return $quote . $name . $quote; + } + + return $quote . $name . $quote; + } + + function CreateDatabase($dbname, $options=false) + { + $options = $this->_Options($options); + $sql = array(); + + $sql[] = "DECLARE EXTERNAL FUNCTION LOWER CSTRING(80) RETURNS CSTRING(80) FREE_IT ENTRY_POINT 'IB_UDF_lower' MODULE_NAME 'ib_udf'"; + + return $sql; + } + + function _DropAutoIncrement($t) + { + if (strpos($t,'.') !== false) { + $tarr = explode('.',$t); + return 'DROP GENERATOR '.$tarr[0].'."gen_'.$tarr[1].'"'; + } + return 'DROP GENERATOR "GEN_'.$t; + } + + + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fautoinc) $this->seqField = $fname; + if ($fconstraint) $suffix .= ' '.$fconstraint; + + return $suffix; + } + +/* +CREATE or replace TRIGGER jaddress_insert +before insert on jaddress +for each row +begin +IF ( NEW."seqField" IS NULL OR NEW."seqField" = 0 ) THEN + NEW."seqField" = GEN_ID("GEN_tabname", 1); +end; +*/ + function _Triggers($tabname,$tableoptions) + { + if (!$this->seqField) return array(); + + $tab1 = preg_replace( '/"/', '', $tabname ); + if ($this->schema) { + $t = strpos($tab1,'.'); + if ($t !== false) $tab = substr($tab1,$t+1); + else $tab = $tab1; + $seqField = $this->seqField; + $seqname = $this->schema.'.'.$this->seqPrefix.$tab; + $trigname = $this->schema.'.trig_'.$this->seqPrefix.$tab; + } else { + $seqField = $this->seqField; + $seqname = $this->seqPrefix.$tab1; + $trigname = 'trig_'.$seqname; + } + if (isset($tableoptions['REPLACE'])) + { $sql[] = "DROP GENERATOR \"$seqname\""; + $sql[] = "CREATE GENERATOR \"$seqname\""; + $sql[] = "ALTER TRIGGER \"$trigname\" BEFORE INSERT OR UPDATE AS BEGIN IF ( NEW.$seqField IS NULL OR NEW.$seqField = 0 ) THEN NEW.$seqField = GEN_ID(\"$seqname\", 1); END"; + } + else + { $sql[] = "CREATE GENERATOR \"$seqname\""; + $sql[] = "CREATE TRIGGER \"$trigname\" FOR $tabname BEFORE INSERT OR UPDATE AS BEGIN IF ( NEW.$seqField IS NULL OR NEW.$seqField = 0 ) THEN NEW.$seqField = GEN_ID(\"$seqname\", 1); END"; + } + + $this->seqField = false; + return $sql; + } + +} diff --git a/ehcp/adodb5/datadict/datadict-generic.inc.php b/ehcp/adodb5/datadict/datadict-generic.inc.php new file mode 100644 index 0000000..69e8361 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-generic.inc.php @@ -0,0 +1,127 @@ +debug) ADOConnection::outp("AlterColumnSQL not supported"); + return array(); + } + + + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported"); + return array(); + } + +} + +/* +//db2 + function ActualType($meta) + { + switch($meta) { + case 'C': return 'VARCHAR'; + case 'X': return 'VARCHAR'; + + case 'C2': return 'VARCHAR'; // up to 32K + case 'X2': return 'VARCHAR'; + + case 'B': return 'BLOB'; + + case 'D': return 'DATE'; + case 'T': return 'TIMESTAMP'; + + case 'L': return 'SMALLINT'; + case 'I': return 'INTEGER'; + case 'I1': return 'SMALLINT'; + case 'I2': return 'SMALLINT'; + case 'I4': return 'INTEGER'; + case 'I8': return 'BIGINT'; + + case 'F': return 'DOUBLE'; + case 'N': return 'DECIMAL'; + default: + return $meta; + } + } + +// ifx +function ActualType($meta) + { + switch($meta) { + case 'C': return 'VARCHAR';// 255 + case 'X': return 'TEXT'; + + case 'C2': return 'NVARCHAR'; + case 'X2': return 'TEXT'; + + case 'B': return 'BLOB'; + + case 'D': return 'DATE'; + case 'T': return 'DATETIME'; + + case 'L': return 'SMALLINT'; + case 'I': return 'INTEGER'; + case 'I1': return 'SMALLINT'; + case 'I2': return 'SMALLINT'; + case 'I4': return 'INTEGER'; + case 'I8': return 'DECIMAL(20)'; + + case 'F': return 'FLOAT'; + case 'N': return 'DECIMAL'; + default: + return $meta; + } + } +*/ diff --git a/ehcp/adodb5/datadict/datadict-ibase.inc.php b/ehcp/adodb5/datadict/datadict-ibase.inc.php new file mode 100644 index 0000000..80e1ccf --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-ibase.inc.php @@ -0,0 +1,67 @@ +debug) ADOConnection::outp("AlterColumnSQL not supported"); + return array(); + } + + + function DropColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported"); + return array(); + } + +} diff --git a/ehcp/adodb5/datadict/datadict-informix.inc.php b/ehcp/adodb5/datadict/datadict-informix.inc.php new file mode 100644 index 0000000..ac0d3c1 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-informix.inc.php @@ -0,0 +1,81 @@ +debug) ADOConnection::outp("AlterColumnSQL not supported"); + return array(); + } + + + function DropColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported"); + return array(); + } + + // return string must begin with space + function _CreateSuffix($fname, &$ftype, $fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + if ($fautoinc) { + $ftype = 'SERIAL'; + return ''; + } + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + +} diff --git a/ehcp/adodb5/datadict/datadict-mssql.inc.php b/ehcp/adodb5/datadict/datadict-mssql.inc.php new file mode 100644 index 0000000..e4be41e --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-mssql.inc.php @@ -0,0 +1,285 @@ +type; + $len = $fieldobj->max_length; + } + + $len = -1; // mysql max_length is not accurate + switch (strtoupper($t)) { + case 'R': + case 'INT': + case 'INTEGER': return 'I'; + case 'BIT': + case 'TINYINT': return 'I1'; + case 'SMALLINT': return 'I2'; + case 'BIGINT': return 'I8'; + case 'SMALLDATETIME': return 'T'; + case 'REAL': + case 'FLOAT': return 'F'; + default: return parent::MetaType($t,$len,$fieldobj); + } + } + + function ActualType($meta) + { + switch(strtoupper($meta)) { + + case 'C': return 'VARCHAR'; + case 'XL': return (isset($this)) ? $this->typeXL : 'TEXT'; + case 'X': return (isset($this)) ? $this->typeX : 'TEXT'; ## could be varchar(8000), but we want compat with oracle + case 'C2': return 'NVARCHAR'; + case 'X2': return 'NTEXT'; + + case 'B': return 'IMAGE'; + + case 'D': return 'DATETIME'; + + case 'TS': + case 'T': return 'DATETIME'; + case 'L': return 'BIT'; + + case 'R': + case 'I': return 'INT'; + case 'I1': return 'TINYINT'; + case 'I2': return 'SMALLINT'; + case 'I4': return 'INT'; + case 'I8': return 'BIGINT'; + + case 'F': return 'REAL'; + case 'N': return 'NUMERIC'; + default: + return $meta; + } + } + + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $f = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $s = "ALTER TABLE $tabname $this->addCol"; + foreach($lines as $v) { + $f[] = "\n $v"; + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + /* + function AlterColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + foreach($lines as $v) { + $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; + } + + return $sql; + } + */ + + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + if (!is_array($flds)) + $flds = explode(',',$flds); + $f = array(); + $s = 'ALTER TABLE ' . $tabname; + foreach($flds as $v) { + $f[] = "\n$this->dropCol ".$this->NameQuote($v); + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fautoinc) $suffix .= ' IDENTITY(1,1)'; + if ($fnotnull) $suffix .= ' NOT NULL'; + else if ($suffix == '') $suffix .= ' NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + /* +CREATE TABLE + [ database_name.[ owner ] . | owner. ] table_name + ( { < column_definition > + | column_name AS computed_column_expression + | < table_constraint > ::= [ CONSTRAINT constraint_name ] } + + | [ { PRIMARY KEY | UNIQUE } [ ,...n ] + ) + +[ ON { filegroup | DEFAULT } ] +[ TEXTIMAGE_ON { filegroup | DEFAULT } ] + +< column_definition > ::= { column_name data_type } + [ COLLATE < collation_name > ] + [ [ DEFAULT constant_expression ] + | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] + ] + [ ROWGUIDCOL] + [ < column_constraint > ] [ ...n ] + +< column_constraint > ::= [ CONSTRAINT constraint_name ] + { [ NULL | NOT NULL ] + | [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + [ WITH FILLFACTOR = fillfactor ] + [ON {filegroup | DEFAULT} ] ] + ] + | [ [ FOREIGN KEY ] + REFERENCES ref_table [ ( ref_column ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + ] + | CHECK [ NOT FOR REPLICATION ] + ( logical_expression ) + } + +< table_constraint > ::= [ CONSTRAINT constraint_name ] + { [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + { ( column [ ASC | DESC ] [ ,...n ] ) } + [ WITH FILLFACTOR = fillfactor ] + [ ON { filegroup | DEFAULT } ] + ] + | FOREIGN KEY + [ ( column [ ,...n ] ) ] + REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + | CHECK [ NOT FOR REPLICATION ] + ( search_conditions ) + } + + + */ + + /* + CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name + ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) + [ WITH < index_option > [ ,...n] ] + [ ON filegroup ] + < index_option > :: = + { PAD_INDEX | + FILLFACTOR = fillfactor | + IGNORE_DUP_KEY | + DROP_EXISTING | + STATISTICS_NORECOMPUTE | + SORT_IN_TEMPDB + } +*/ + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + $clustered = isset($idxoptions['CLUSTERED']) ? ' CLUSTERED' : ''; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s = 'CREATE' . $unique . $clustered . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')'; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + + $sql[] = $s; + + return $sql; + } + + + function _GetSize($ftype, $ty, $fsize, $fprec) + { + switch ($ftype) { + case 'INT': + case 'SMALLINT': + case 'TINYINT': + case 'BIGINT': + return $ftype; + } + if ($ty == 'T') return $ftype; + return parent::_GetSize($ftype, $ty, $fsize, $fprec); + + } +} diff --git a/ehcp/adodb5/datadict/datadict-mssqlnative.inc.php b/ehcp/adodb5/datadict/datadict-mssqlnative.inc.php new file mode 100644 index 0000000..c709b25 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-mssqlnative.inc.php @@ -0,0 +1,317 @@ +type; + $len = $fieldobj->max_length; + } + + $_typeConversion = array( + -155 => 'D', + 93 => 'D', + -154 => 'D', + -2 => 'D', + 91 => 'D', + + 12 => 'C', + 1 => 'C', + -9 => 'C', + -8 => 'C', + + -7 => 'L', + -6 => 'I2', + -5 => 'I8', + -11 => 'I', + 4 => 'I', + 5 => 'I4', + + -1 => 'X', + -10 => 'X', + + 2 => 'N', + 3 => 'N', + 6 => 'N', + 7 => 'N', + + -152 => 'X', + -151 => 'X', + -4 => 'X', + -3 => 'X' + ); + + return $_typeConversion($t); + + } + + function ActualType($meta) + { + $DATE_TYPE = 'DATETIME'; + + switch(strtoupper($meta)) { + + case 'C': return 'VARCHAR'; + case 'XL': return (isset($this)) ? $this->typeXL : 'TEXT'; + case 'X': return (isset($this)) ? $this->typeX : 'TEXT'; ## could be varchar(8000), but we want compat with oracle + case 'C2': return 'NVARCHAR'; + case 'X2': return 'NTEXT'; + + case 'B': return 'IMAGE'; + + case 'D': return $DATE_TYPE; + case 'T': return 'TIME'; + case 'L': return 'BIT'; + + case 'R': + case 'I': return 'INT'; + case 'I1': return 'TINYINT'; + case 'I2': return 'SMALLINT'; + case 'I4': return 'INT'; + case 'I8': return 'BIGINT'; + + case 'F': return 'REAL'; + case 'N': return 'NUMERIC'; + default: + print "RETURN $meta"; + return $meta; + } + } + + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $f = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $s = "ALTER TABLE $tabname $this->addCol"; + foreach($lines as $v) { + $f[] = "\n $v"; + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + /* + function AlterColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + foreach($lines as $v) { + $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; + } + + return $sql; + } + */ + + /** + * Drop a column, syntax is ALTER TABLE table DROP COLUMN column,column + * + * @param string $tabname Table Name + * @param string[] $flds One, or an array of Fields To Drop + * @param string $tableflds Throwaway value to make the function match the parent + * @param string $tableoptions Throway value to make the function match the parent + * + * @return string The SQL necessary to drop the column + */ + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + if (!is_array($flds)) + $flds = explode(',',$flds); + $f = array(); + $s = 'ALTER TABLE ' . $tabname . ' DROP COLUMN '; + foreach($flds as $v) { + //$f[] = "\n$this->dropCol ".$this->NameQuote($v); + $f[] = $this->NameQuote($v); + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fautoinc) $suffix .= ' IDENTITY(1,1)'; + if ($fnotnull) $suffix .= ' NOT NULL'; + else if ($suffix == '') $suffix .= ' NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + /* +CREATE TABLE + [ database_name.[ owner ] . | owner. ] table_name + ( { < column_definition > + | column_name AS computed_column_expression + | < table_constraint > ::= [ CONSTRAINT constraint_name ] } + + | [ { PRIMARY KEY | UNIQUE } [ ,...n ] + ) + +[ ON { filegroup | DEFAULT } ] +[ TEXTIMAGE_ON { filegroup | DEFAULT } ] + +< column_definition > ::= { column_name data_type } + [ COLLATE < collation_name > ] + [ [ DEFAULT constant_expression ] + | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] + ] + [ ROWGUIDCOL] + [ < column_constraint > ] [ ...n ] + +< column_constraint > ::= [ CONSTRAINT constraint_name ] + { [ NULL | NOT NULL ] + | [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + [ WITH FILLFACTOR = fillfactor ] + [ON {filegroup | DEFAULT} ] ] + ] + | [ [ FOREIGN KEY ] + REFERENCES ref_table [ ( ref_column ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + ] + | CHECK [ NOT FOR REPLICATION ] + ( logical_expression ) + } + +< table_constraint > ::= [ CONSTRAINT constraint_name ] + { [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + { ( column [ ASC | DESC ] [ ,...n ] ) } + [ WITH FILLFACTOR = fillfactor ] + [ ON { filegroup | DEFAULT } ] + ] + | FOREIGN KEY + [ ( column [ ,...n ] ) ] + REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + | CHECK [ NOT FOR REPLICATION ] + ( search_conditions ) + } + + + */ + + /* + CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name + ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) + [ WITH < index_option > [ ,...n] ] + [ ON filegroup ] + < index_option > :: = + { PAD_INDEX | + FILLFACTOR = fillfactor | + IGNORE_DUP_KEY | + DROP_EXISTING | + STATISTICS_NORECOMPUTE | + SORT_IN_TEMPDB + } +*/ + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + $clustered = isset($idxoptions['CLUSTERED']) ? ' CLUSTERED' : ''; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s = 'CREATE' . $unique . $clustered . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')'; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + + $sql[] = $s; + + return $sql; + } + + + function _GetSize($ftype, $ty, $fsize, $fprec) + { + switch ($ftype) { + case 'INT': + case 'SMALLINT': + case 'TINYINT': + case 'BIGINT': + return $ftype; + } + if ($ty == 'T') return $ftype; + return parent::_GetSize($ftype, $ty, $fsize, $fprec); + + } +} diff --git a/ehcp/adodb5/datadict/datadict-mysql.inc.php b/ehcp/adodb5/datadict/datadict-mysql.inc.php new file mode 100644 index 0000000..79e78c3 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-mysql.inc.php @@ -0,0 +1,183 @@ +type; + $len = $fieldobj->max_length; + } + $is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->auto_increment; + + $len = -1; // mysql max_length is not accurate + switch (strtoupper($t)) { + case 'STRING': + case 'CHAR': + case 'VARCHAR': + case 'TINYBLOB': + case 'TINYTEXT': + case 'ENUM': + case 'SET': + if ($len <= $this->blobSize) return 'C'; + + case 'TEXT': + case 'LONGTEXT': + case 'MEDIUMTEXT': + return 'X'; + + // php_mysql extension always returns 'blob' even if 'text' + // so we have to check whether binary... + case 'IMAGE': + case 'LONGBLOB': + case 'BLOB': + case 'MEDIUMBLOB': + return !empty($fieldobj->binary) ? 'B' : 'X'; + + case 'YEAR': + case 'DATE': return 'D'; + + case 'TIME': + case 'DATETIME': + case 'TIMESTAMP': return 'T'; + + case 'FLOAT': + case 'DOUBLE': + return 'F'; + + case 'INT': + case 'INTEGER': return $is_serial ? 'R' : 'I'; + case 'TINYINT': return $is_serial ? 'R' : 'I1'; + case 'SMALLINT': return $is_serial ? 'R' : 'I2'; + case 'MEDIUMINT': return $is_serial ? 'R' : 'I4'; + case 'BIGINT': return $is_serial ? 'R' : 'I8'; + default: return 'N'; + } + } + + function ActualType($meta) + { + switch(strtoupper($meta)) { + case 'C': return 'VARCHAR'; + case 'XL':return 'LONGTEXT'; + case 'X': return 'TEXT'; + + case 'C2': return 'VARCHAR'; + case 'X2': return 'LONGTEXT'; + + case 'B': return 'LONGBLOB'; + + case 'D': return 'DATE'; + case 'TS': + case 'T': return 'DATETIME'; + case 'L': return 'TINYINT'; + + case 'R': + case 'I4': + case 'I': return 'INTEGER'; + case 'I1': return 'TINYINT'; + case 'I2': return 'SMALLINT'; + case 'I8': return 'BIGINT'; + + case 'F': return 'DOUBLE'; + case 'N': return 'NUMERIC'; + default: + return $meta; + } + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if ($funsigned) $suffix .= ' UNSIGNED'; + if ($fnotnull) $suffix .= ' NOT NULL'; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fautoinc) $suffix .= ' AUTO_INCREMENT'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + /* + CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] + [table_options] [select_statement] + create_definition: + col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] + [PRIMARY KEY] [reference_definition] + or PRIMARY KEY (index_col_name,...) + or KEY [index_name] (index_col_name,...) + or INDEX [index_name] (index_col_name,...) + or UNIQUE [INDEX] [index_name] (index_col_name,...) + or FULLTEXT [INDEX] [index_name] (index_col_name,...) + or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) + [reference_definition] + or CHECK (expr) + */ + + /* + CREATE [UNIQUE|FULLTEXT] INDEX index_name + ON tbl_name (col_name[(length)],... ) + */ + + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + if ($this->alterTableAddIndex) $sql[] = "ALTER TABLE $tabname DROP INDEX $idxname"; + else $sql[] = sprintf($this->dropIndex, $idxname, $tabname); + + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + if (isset($idxoptions['FULLTEXT'])) { + $unique = ' FULLTEXT'; + } elseif (isset($idxoptions['UNIQUE'])) { + $unique = ' UNIQUE'; + } else { + $unique = ''; + } + + if ( is_array($flds) ) $flds = implode(', ',$flds); + + if ($this->alterTableAddIndex) $s = "ALTER TABLE $tabname ADD $unique INDEX $idxname "; + else $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname; + + $s .= ' (' . $flds . ')'; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + $sql[] = $s; + + return $sql; + } +} diff --git a/ehcp/adodb5/datadict/datadict-oci8.inc.php b/ehcp/adodb5/datadict/datadict-oci8.inc.php new file mode 100644 index 0000000..4e6766c --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-oci8.inc.php @@ -0,0 +1,300 @@ +type; + $len = $fieldobj->max_length; + } + switch (strtoupper($t)) { + case 'VARCHAR': + case 'VARCHAR2': + case 'CHAR': + case 'VARBINARY': + case 'BINARY': + if (isset($this) && $len <= $this->blobSize) return 'C'; + return 'X'; + + case 'NCHAR': + case 'NVARCHAR2': + case 'NVARCHAR': + if (isset($this) && $len <= $this->blobSize) return 'C2'; + return 'X2'; + + case 'NCLOB': + case 'CLOB': + return 'XL'; + + case 'LONG RAW': + case 'LONG VARBINARY': + case 'BLOB': + return 'B'; + + case 'TIMESTAMP': + return 'TS'; + + case 'DATE': + return 'T'; + + case 'INT': + case 'SMALLINT': + case 'INTEGER': + return 'I'; + + default: + return 'N'; + } + } + + function ActualType($meta) + { + switch($meta) { + case 'C': return 'VARCHAR'; + case 'X': return $this->typeX; + case 'XL': return $this->typeXL; + + case 'C2': return 'NVARCHAR2'; + case 'X2': return 'NVARCHAR2(4000)'; + + case 'B': return 'BLOB'; + + case 'TS': + return 'TIMESTAMP'; + + case 'D': + case 'T': return 'DATE'; + case 'L': return 'NUMBER(1)'; + case 'I1': return 'NUMBER(3)'; + case 'I2': return 'NUMBER(5)'; + case 'I': + case 'I4': return 'NUMBER(10)'; + + case 'I8': return 'NUMBER(20)'; + case 'F': return 'NUMBER'; + case 'N': return 'NUMBER'; + case 'R': return 'NUMBER(20)'; + default: + return $meta; + } + } + + function CreateDatabase($dbname, $options=false) + { + $options = $this->_Options($options); + $password = isset($options['PASSWORD']) ? $options['PASSWORD'] : 'tiger'; + $tablespace = isset($options["TABLESPACE"]) ? " DEFAULT TABLESPACE ".$options["TABLESPACE"] : ''; + $sql[] = "CREATE USER ".$dbname." IDENTIFIED BY ".$password.$tablespace; + $sql[] = "GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO $dbname"; + + return $sql; + } + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName($tabname); + $f = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $s = "ALTER TABLE $tabname ADD ("; + foreach($lines as $v) { + $f[] = "\n $v"; + } + + $s .= implode(', ',$f).')'; + $sql[] = $s; + return $sql; + } + + function AlterColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName($tabname); + $f = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $s = "ALTER TABLE $tabname MODIFY("; + foreach($lines as $v) { + $f[] = "\n $v"; + } + $s .= implode(', ',$f).')'; + $sql[] = $s; + return $sql; + } + + function DropColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + if (!is_array($flds)) $flds = explode(',',$flds); + foreach ($flds as $k => $v) $flds[$k] = $this->NameQuote($v); + + $sql = array(); + $s = "ALTER TABLE $tabname DROP("; + $s .= implode(', ',$flds).') CASCADE CONSTRAINTS'; + $sql[] = $s; + return $sql; + } + + function _DropAutoIncrement($t) + { + if (strpos($t,'.') !== false) { + $tarr = explode('.',$t); + return "drop sequence ".$tarr[0].".seq_".$tarr[1]; + } + return "drop sequence seq_".$t; + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + + if ($fdefault == "''" && $fnotnull) {// this is null in oracle + $fnotnull = false; + if ($this->debug) ADOConnection::outp("NOT NULL and DEFAULT='' illegal in Oracle"); + } + + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + + if ($fautoinc) $this->seqField = $fname; + if ($fconstraint) $suffix .= ' '.$fconstraint; + + return $suffix; + } + +/* +CREATE or replace TRIGGER jaddress_insert +before insert on jaddress +for each row +begin +select seqaddress.nextval into :new.A_ID from dual; +end; +*/ + function _Triggers($tabname,$tableoptions) + { + if (!$this->seqField) return array(); + + if ($this->schema) { + $t = strpos($tabname,'.'); + if ($t !== false) $tab = substr($tabname,$t+1); + else $tab = $tabname; + $seqname = $this->schema.'.'.$this->seqPrefix.$tab; + $trigname = $this->schema.'.'.$this->trigPrefix.$this->seqPrefix.$tab; + } else { + $seqname = $this->seqPrefix.$tabname; + $trigname = $this->trigPrefix.$seqname; + } + + if (strlen($seqname) > 30) { + $seqname = $this->seqPrefix.uniqid(''); + } // end if + if (strlen($trigname) > 30) { + $trigname = $this->trigPrefix.uniqid(''); + } // end if + + if (isset($tableoptions['REPLACE'])) $sql[] = "DROP SEQUENCE $seqname"; + $seqCache = ''; + if (isset($tableoptions['SEQUENCE_CACHE'])){$seqCache = $tableoptions['SEQUENCE_CACHE'];} + $seqIncr = ''; + if (isset($tableoptions['SEQUENCE_INCREMENT'])){$seqIncr = ' INCREMENT BY '.$tableoptions['SEQUENCE_INCREMENT'];} + $seqStart = ''; + if (isset($tableoptions['SEQUENCE_START'])){$seqIncr = ' START WITH '.$tableoptions['SEQUENCE_START'];} + $sql[] = "CREATE SEQUENCE $seqname $seqStart $seqIncr $seqCache"; + $sql[] = "CREATE OR REPLACE TRIGGER $trigname BEFORE insert ON $tabname FOR EACH ROW WHEN (NEW.$this->seqField IS NULL OR NEW.$this->seqField = 0) BEGIN select $seqname.nextval into :new.$this->seqField from dual; END;"; + + $this->seqField = false; + return $sql; + } + + /* + CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] + [table_options] [select_statement] + create_definition: + col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] + [PRIMARY KEY] [reference_definition] + or PRIMARY KEY (index_col_name,...) + or KEY [index_name] (index_col_name,...) + or INDEX [index_name] (index_col_name,...) + or UNIQUE [INDEX] [index_name] (index_col_name,...) + or FULLTEXT [INDEX] [index_name] (index_col_name,...) + or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) + [reference_definition] + or CHECK (expr) + */ + + + + function _IndexSQL($idxname, $tabname, $flds,$idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + if (isset($idxoptions['BITMAP'])) { + $unique = ' BITMAP'; + } elseif (isset($idxoptions['UNIQUE'])) { + $unique = ' UNIQUE'; + } else { + $unique = ''; + } + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')'; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + if (isset($idxoptions['oci8'])) + $s .= $idxoptions['oci8']; + + + $sql[] = $s; + + return $sql; + } + + function GetCommentSQL($table,$col) + { + $table = $this->connection->qstr($table); + $col = $this->connection->qstr($col); + return "select comments from USER_COL_COMMENTS where TABLE_NAME=$table and COLUMN_NAME=$col"; + } + + function SetCommentSQL($table,$col,$cmt) + { + $cmt = $this->connection->qstr($cmt); + return "COMMENT ON COLUMN $table.$col IS $cmt"; + } +} diff --git a/ehcp/adodb5/datadict/datadict-postgres.inc.php b/ehcp/adodb5/datadict/datadict-postgres.inc.php new file mode 100644 index 0000000..e003472 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-postgres.inc.php @@ -0,0 +1,484 @@ +type; + $len = $fieldobj->max_length; + } + $is_serial = is_object($fieldobj) && !empty($fieldobj->primary_key) && !empty($fieldobj->unique) && + !empty($fieldobj->has_default) && substr($fieldobj->default_value,0,8) == 'nextval('; + + switch (strtoupper($t)) { + case 'INTERVAL': + case 'CHAR': + case 'CHARACTER': + case 'VARCHAR': + case 'NAME': + case 'BPCHAR': + if ($len <= $this->blobSize) return 'C'; + + case 'TEXT': + return 'X'; + + case 'IMAGE': // user defined type + case 'BLOB': // user defined type + case 'BIT': // This is a bit string, not a single bit, so don't return 'L' + case 'VARBIT': + case 'BYTEA': + return 'B'; + + case 'BOOL': + case 'BOOLEAN': + return 'L'; + + case 'DATE': + return 'D'; + + case 'TIME': + case 'DATETIME': + case 'TIMESTAMP': + case 'TIMESTAMPTZ': + return 'T'; + + case 'INTEGER': return !$is_serial ? 'I' : 'R'; + case 'SMALLINT': + case 'INT2': return !$is_serial ? 'I2' : 'R'; + case 'INT4': return !$is_serial ? 'I4' : 'R'; + case 'BIGINT': + case 'INT8': return !$is_serial ? 'I8' : 'R'; + + case 'OID': + case 'SERIAL': + return 'R'; + + case 'FLOAT4': + case 'FLOAT8': + case 'DOUBLE PRECISION': + case 'REAL': + return 'F'; + + default: + return 'N'; + } + } + + function ActualType($meta) + { + switch($meta) { + case 'C': return 'VARCHAR'; + case 'XL': + case 'X': return 'TEXT'; + + case 'C2': return 'VARCHAR'; + case 'X2': return 'TEXT'; + + case 'B': return 'BYTEA'; + + case 'D': return 'DATE'; + case 'TS': + case 'T': return 'TIMESTAMP'; + + case 'L': return 'BOOLEAN'; + case 'I': return 'INTEGER'; + case 'I1': return 'SMALLINT'; + case 'I2': return 'INT2'; + case 'I4': return 'INT4'; + case 'I8': return 'INT8'; + + case 'F': return 'FLOAT8'; + case 'N': return 'NUMERIC'; + default: + return $meta; + } + } + + /** + * Adding a new Column + * + * reimplementation of the default function as postgres does NOT allow to set the default in the same statement + * + * @param string $tabname table-name + * @param string $flds column-names and types for the changed columns + * @return array with SQL strings + */ + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $sql = array(); + $not_null = false; + list($lines,$pkey) = $this->_GenFields($flds); + $alter = 'ALTER TABLE ' . $tabname . $this->addCol . ' '; + foreach($lines as $v) { + if (($not_null = preg_match('/NOT NULL/i',$v))) { + $v = preg_replace('/NOT NULL/i','',$v); + } + if (preg_match('/^([^ ]+) .*DEFAULT (\'[^\']+\'|\"[^\"]+\"|[^ ]+)/',$v,$matches)) { + list(,$colname,$default) = $matches; + $sql[] = $alter . str_replace('DEFAULT '.$default,'',$v); + $sql[] = 'UPDATE '.$tabname.' SET '.$colname.'='.$default; + $sql[] = 'ALTER TABLE '.$tabname.' ALTER COLUMN '.$colname.' SET DEFAULT ' . $default; + } else { + $sql[] = $alter . $v; + } + if ($not_null) { + list($colname) = explode(' ',$v); + $sql[] = 'ALTER TABLE '.$tabname.' ALTER COLUMN '.$colname.' SET NOT NULL'; + } + } + return $sql; + } + + + function DropIndexSQL ($idxname, $tabname = NULL) + { + return array(sprintf($this->dropIndex, $this->TableName($idxname), $this->TableName($tabname))); + } + + /** + * Change the definition of one column + * + * Postgres can't do that on it's own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds complete defintion of the new table, eg. for postgres, default '' + * @param array/ $tableoptions options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + /* + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + if (!$tableflds) { + if ($this->debug) ADOConnection::outp("AlterColumnSQL needs a complete table-definiton for PostgreSQL"); + return array(); + } + return $this->_recreate_copy_table($tabname,False,$tableflds,$tableoptions); + }*/ + + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + // Check if alter single column datatype available - works with 8.0+ + $has_alter_column = 8.0 <= (float) @$this->serverInfo['version']; + + if ($has_alter_column) { + $tabname = $this->TableName($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $set_null = false; + foreach($lines as $v) { + $alter = 'ALTER TABLE ' . $tabname . $this->alterCol . ' '; + if ($not_null = preg_match('/NOT NULL/i',$v)) { + $v = preg_replace('/NOT NULL/i','',$v); + } + // this next block doesn't work - there is no way that I can see to + // explicitly ask a column to be null using $flds + else if ($set_null = preg_match('/NULL/i',$v)) { + // if they didn't specify not null, see if they explicitely asked for null + // Lookbehind pattern covers the case 'fieldname NULL datatype DEFAULT NULL' + // only the first NULL should be removed, not the one specifying + // the default value + $v = preg_replace('/(?MetaColumns($tabname); + list(,$colname,$default) = $matches; + $alter .= $colname; + if ($this->connection) { + $old_coltype = $this->connection->MetaType($existing[strtoupper($colname)]); + } + else { + $old_coltype = $t; + } + $v = preg_replace('/^' . preg_quote($colname) . '\s/', '', $v); + $t = trim(str_replace('DEFAULT '.$default,'',$v)); + + // Type change from bool to int + if ( $old_coltype == 'L' && $t == 'INTEGER' ) { + $sql[] = $alter . ' DROP DEFAULT'; + $sql[] = $alter . " TYPE $t USING ($colname::BOOL)::INT"; + $sql[] = $alter . " SET DEFAULT $default"; + } + // Type change from int to bool + else if ( $old_coltype == 'I' && $t == 'BOOLEAN' ) { + if( strcasecmp('NULL', trim($default)) != 0 ) { + $default = $this->connection->qstr($default); + } + $sql[] = $alter . ' DROP DEFAULT'; + $sql[] = $alter . " TYPE $t USING CASE WHEN $colname = 0 THEN false ELSE true END"; + $sql[] = $alter . " SET DEFAULT $default"; + } + // Any other column types conversion + else { + $sql[] = $alter . " TYPE $t"; + $sql[] = $alter . " SET DEFAULT $default"; + } + + } + else { + // drop default? + preg_match ('/^\s*(\S+)\s+(.*)$/',$v,$matches); + list (,$colname,$rest) = $matches; + $alter .= $colname; + $sql[] = $alter . ' TYPE ' . $rest; + } + +# list($colname) = explode(' ',$v); + if ($not_null) { + // this does not error out if the column is already not null + $sql[] = $alter . ' SET NOT NULL'; + } + if ($set_null) { + // this does not error out if the column is already null + $sql[] = $alter . ' DROP NOT NULL'; + } + } + return $sql; + } + + // does not have alter column + if (!$tableflds) { + if ($this->debug) ADOConnection::outp("AlterColumnSQL needs a complete table-definiton for PostgreSQL"); + return array(); + } + return $this->_recreate_copy_table($tabname,False,$tableflds,$tableoptions); + } + + /** + * Drop one column + * + * Postgres < 7.3 can't do that on it's own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds complete defintion of the new table, eg. for postgres, default '' + * @param array/ $tableoptions options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $has_drop_column = 7.3 <= (float) @$this->serverInfo['version']; + if (!$has_drop_column && !$tableflds) { + if ($this->debug) ADOConnection::outp("DropColumnSQL needs complete table-definiton for PostgreSQL < 7.3"); + return array(); + } + if ($has_drop_column) { + return ADODB_DataDict::DropColumnSQL($tabname, $flds); + } + return $this->_recreate_copy_table($tabname,$flds,$tableflds,$tableoptions); + } + + /** + * Save the content into a temp. table, drop and recreate the original table and copy the content back in + * + * We also take care to set the values of the sequenz and recreate the indexes. + * All this is done in a transaction, to not loose the content of the table, if something went wrong! + * @internal + * @param string $tabname table-name + * @param string $dropflds column-names to drop + * @param string $tableflds complete defintion of the new table, eg. for postgres + * @param array/string $tableoptions options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function _recreate_copy_table($tabname,$dropflds,$tableflds,$tableoptions='') + { + if ($dropflds && !is_array($dropflds)) $dropflds = explode(',',$dropflds); + $copyflds = array(); + foreach($this->MetaColumns($tabname) as $fld) { + if (!$dropflds || !in_array($fld->name,$dropflds)) { + // we need to explicit convert varchar to a number to be able to do an AlterColumn of a char column to a nummeric one + if (preg_match('/'.$fld->name.' (I|I2|I4|I8|N|F)/i',$tableflds,$matches) && + in_array($fld->type,array('varchar','char','text','bytea'))) { + $copyflds[] = "to_number($fld->name,'S9999999999999D99')"; + } else { + $copyflds[] = $fld->name; + } + // identify the sequence name and the fld its on + if ($fld->primary_key && $fld->has_default && + preg_match("/nextval\('([^']+)'::text\)/",$fld->default_value,$matches)) { + $seq_name = $matches[1]; + $seq_fld = $fld->name; + } + } + } + $copyflds = implode(', ',$copyflds); + + $tempname = $tabname.'_tmp'; + $aSql[] = 'BEGIN'; // we use a transaction, to make sure not to loose the content of the table + $aSql[] = "SELECT * INTO TEMPORARY TABLE $tempname FROM $tabname"; + $aSql = array_merge($aSql,$this->DropTableSQL($tabname)); + $aSql = array_merge($aSql,$this->CreateTableSQL($tabname,$tableflds,$tableoptions)); + $aSql[] = "INSERT INTO $tabname SELECT $copyflds FROM $tempname"; + if ($seq_name && $seq_fld) { // if we have a sequence we need to set it again + $seq_name = $tabname.'_'.$seq_fld.'_seq'; // has to be the name of the new implicit sequence + $aSql[] = "SELECT setval('$seq_name',MAX($seq_fld)) FROM $tabname"; + } + $aSql[] = "DROP TABLE $tempname"; + // recreate the indexes, if they not contain one of the droped columns + foreach($this->MetaIndexes($tabname) as $idx_name => $idx_data) + { + if (substr($idx_name,-5) != '_pkey' && (!$dropflds || !count(array_intersect($dropflds,$idx_data['columns'])))) { + $aSql = array_merge($aSql,$this->CreateIndexSQL($idx_name,$tabname,$idx_data['columns'], + $idx_data['unique'] ? array('UNIQUE') : False)); + } + } + $aSql[] = 'COMMIT'; + return $aSql; + } + + function DropTableSQL($tabname) + { + $sql = ADODB_DataDict::DropTableSQL($tabname); + + $drop_seq = $this->_DropAutoIncrement($tabname); + if ($drop_seq) $sql[] = $drop_seq; + + return $sql; + } + + // return string must begin with space + function _CreateSuffix($fname, &$ftype, $fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + if ($fautoinc) { + $ftype = 'SERIAL'; + return ''; + } + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + // search for a sequece for the given table (asumes the seqence-name contains the table-name!) + // if yes return sql to drop it + // this is still necessary if postgres < 7.3 or the SERIAL was created on an earlier version!!! + function _DropAutoIncrement($tabname) + { + $tabname = $this->connection->quote('%'.$tabname.'%'); + + $seq = $this->connection->GetOne("SELECT relname FROM pg_class WHERE NOT relname ~ 'pg_.*' AND relname LIKE $tabname AND relkind='S'"); + + // check if a tables depends on the sequenz and it therefor cant and dont need to be droped separatly + if (!$seq || $this->connection->GetOne("SELECT relname FROM pg_class JOIN pg_depend ON pg_class.relfilenode=pg_depend.objid WHERE relname='$seq' AND relkind='S' AND deptype='i'")) { + return False; + } + return "DROP SEQUENCE ".$seq; + } + + function RenameTableSQL($tabname,$newname) + { + if (!empty($this->schema)) { + $rename_from = $this->TableName($tabname); + $schema_save = $this->schema; + $this->schema = false; + $rename_to = $this->TableName($newname); + $this->schema = $schema_save; + return array (sprintf($this->renameTable, $rename_from, $rename_to)); + } + + return array (sprintf($this->renameTable, $this->TableName($tabname),$this->TableName($newname))); + } + + /* + CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( + { column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ] + | table_constraint } [, ... ] + ) + [ INHERITS ( parent_table [, ... ] ) ] + [ WITH OIDS | WITHOUT OIDS ] + where column_constraint is: + [ CONSTRAINT constraint_name ] + { NOT NULL | NULL | UNIQUE | PRIMARY KEY | + CHECK (expression) | + REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL ] + [ ON DELETE action ] [ ON UPDATE action ] } + [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + and table_constraint is: + [ CONSTRAINT constraint_name ] + { UNIQUE ( column_name [, ... ] ) | + PRIMARY KEY ( column_name [, ... ] ) | + CHECK ( expression ) | + FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] + [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] } + [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + */ + + + /* + CREATE [ UNIQUE ] INDEX index_name ON table +[ USING acc_method ] ( column [ ops_name ] [, ...] ) +[ WHERE predicate ] +CREATE [ UNIQUE ] INDEX index_name ON table +[ USING acc_method ] ( func_name( column [, ... ]) [ ops_name ] ) +[ WHERE predicate ] + */ + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' '; + + if (isset($idxoptions['HASH'])) + $s .= 'USING HASH '; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s .= '(' . $flds . ')'; + $sql[] = $s; + + return $sql; + } + + function _GetSize($ftype, $ty, $fsize, $fprec) + { + if (strlen($fsize) && $ty != 'X' && $ty != 'B' && $ty != 'I' && strpos($ftype,'(') === false) { + $ftype .= "(".$fsize; + if (strlen($fprec)) $ftype .= ",".$fprec; + $ftype .= ')'; + } + return $ftype; + } +} diff --git a/ehcp/adodb5/datadict/datadict-sapdb.inc.php b/ehcp/adodb5/datadict/datadict-sapdb.inc.php new file mode 100644 index 0000000..f104496 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-sapdb.inc.php @@ -0,0 +1,122 @@ +type; + $len = $fieldobj->max_length; + } + static $maxdb_type2adodb = array( + 'VARCHAR' => 'C', + 'CHARACTER' => 'C', + 'LONG' => 'X', // no way to differ between 'X' and 'B' :-( + 'DATE' => 'D', + 'TIMESTAMP' => 'T', + 'BOOLEAN' => 'L', + 'INTEGER' => 'I4', + 'SMALLINT' => 'I2', + 'FLOAT' => 'F', + 'FIXED' => 'N', + ); + $type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C'; + + // convert integer-types simulated with fixed back to integer + if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) { + $type = $len == 20 ? 'I8' : 'I1'; + } + if ($fieldobj->auto_increment) $type = 'R'; + + return $type; + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if ($funsigned) $suffix .= ' UNSIGNED'; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fautoinc) $suffix .= ' DEFAULT SERIAL'; + elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' ); + } + + function AlterColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' ); + } + + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + if (!is_array($flds)) $flds = explode(',',$flds); + foreach($flds as $k => $v) { + $flds[$k] = $this->NameQuote($v); + } + return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' ); + } +} diff --git a/ehcp/adodb5/datadict/datadict-sqlite.inc.php b/ehcp/adodb5/datadict/datadict-sqlite.inc.php new file mode 100644 index 0000000..9fe68ac --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-sqlite.inc.php @@ -0,0 +1,90 @@ +debug) ADOConnection::outp("AlterColumnSQL not supported natively by SQLite"); + return array(); + } + + function DropColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + if ($this->debug) ADOConnection::outp("DropColumnSQL not supported natively by SQLite"); + return array(); + } + + function RenameColumnSQL($tabname,$oldcolumn,$newcolumn,$flds='') + { + if ($this->debug) ADOConnection::outp("RenameColumnSQL not supported natively by SQLite"); + return array(); + } + +} diff --git a/ehcp/adodb5/datadict/datadict-sybase.inc.php b/ehcp/adodb5/datadict/datadict-sybase.inc.php new file mode 100644 index 0000000..6007319 --- /dev/null +++ b/ehcp/adodb5/datadict/datadict-sybase.inc.php @@ -0,0 +1,230 @@ +type; + $len = $fieldobj->max_length; + } + + $len = -1; // mysql max_length is not accurate + switch (strtoupper($t)) { + + case 'INT': + case 'INTEGER': return 'I'; + case 'BIT': + case 'TINYINT': return 'I1'; + case 'SMALLINT': return 'I2'; + case 'BIGINT': return 'I8'; + + case 'REAL': + case 'FLOAT': return 'F'; + default: return parent::MetaType($t,$len,$fieldobj); + } + } + + function ActualType($meta) + { + switch(strtoupper($meta)) { + case 'C': return 'VARCHAR'; + case 'XL': + case 'X': return 'TEXT'; + + case 'C2': return 'NVARCHAR'; + case 'X2': return 'NTEXT'; + + case 'B': return 'IMAGE'; + + case 'D': return 'DATETIME'; + case 'TS': + case 'T': return 'DATETIME'; + case 'L': return 'BIT'; + + case 'I': return 'INT'; + case 'I1': return 'TINYINT'; + case 'I2': return 'SMALLINT'; + case 'I4': return 'INT'; + case 'I8': return 'BIGINT'; + + case 'F': return 'REAL'; + case 'N': return 'NUMERIC'; + default: + return $meta; + } + } + + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $f = array(); + list($lines,$pkey) = $this->_GenFields($flds); + $s = "ALTER TABLE $tabname $this->addCol"; + foreach($lines as $v) { + $f[] = "\n $v"; + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + function AlterColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey) = $this->_GenFields($flds); + foreach($lines as $v) { + $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; + } + + return $sql; + } + + function DropColumnSQL($tabname, $flds, $tableflds='', $tableoptions='') + { + $tabname = $this->TableName($tabname); + if (!is_array($flds)) $flds = explode(',',$flds); + $f = array(); + $s = "ALTER TABLE $tabname"; + foreach($flds as $v) { + $f[] = "\n$this->dropCol ".$this->NameQuote($v); + } + $s .= implode(', ',$f); + $sql[] = $s; + return $sql; + } + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fautoinc) $suffix .= ' DEFAULT AUTOINCREMENT'; + if ($fnotnull) $suffix .= ' NOT NULL'; + else if ($suffix == '') $suffix .= ' NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + /* +CREATE TABLE + [ database_name.[ owner ] . | owner. ] table_name + ( { < column_definition > + | column_name AS computed_column_expression + | < table_constraint > ::= [ CONSTRAINT constraint_name ] } + + | [ { PRIMARY KEY | UNIQUE } [ ,...n ] + ) + +[ ON { filegroup | DEFAULT } ] +[ TEXTIMAGE_ON { filegroup | DEFAULT } ] + +< column_definition > ::= { column_name data_type } + [ COLLATE < collation_name > ] + [ [ DEFAULT constant_expression ] + | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] + ] + [ ROWGUIDCOL] + [ < column_constraint > ] [ ...n ] + +< column_constraint > ::= [ CONSTRAINT constraint_name ] + { [ NULL | NOT NULL ] + | [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + [ WITH FILLFACTOR = fillfactor ] + [ON {filegroup | DEFAULT} ] ] + ] + | [ [ FOREIGN KEY ] + REFERENCES ref_table [ ( ref_column ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + ] + | CHECK [ NOT FOR REPLICATION ] + ( logical_expression ) + } + +< table_constraint > ::= [ CONSTRAINT constraint_name ] + { [ { PRIMARY KEY | UNIQUE } + [ CLUSTERED | NONCLUSTERED ] + { ( column [ ASC | DESC ] [ ,...n ] ) } + [ WITH FILLFACTOR = fillfactor ] + [ ON { filegroup | DEFAULT } ] + ] + | FOREIGN KEY + [ ( column [ ,...n ] ) ] + REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] + [ ON DELETE { CASCADE | NO ACTION } ] + [ ON UPDATE { CASCADE | NO ACTION } ] + [ NOT FOR REPLICATION ] + | CHECK [ NOT FOR REPLICATION ] + ( search_conditions ) + } + + + */ + + /* + CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name + ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) + [ WITH < index_option > [ ,...n] ] + [ ON filegroup ] + < index_option > :: = + { PAD_INDEX | + FILLFACTOR = fillfactor | + IGNORE_DUP_KEY | + DROP_EXISTING | + STATISTICS_NORECOMPUTE | + SORT_IN_TEMPDB + } +*/ + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + $clustered = isset($idxoptions['CLUSTERED']) ? ' CLUSTERED' : ''; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s = 'CREATE' . $unique . $clustered . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')'; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + $sql[] = $s; + + return $sql; + } +} diff --git a/ehcp/adodb5/docs/README.md b/ehcp/adodb5/docs/README.md new file mode 100644 index 0000000..b0ec294 --- /dev/null +++ b/ehcp/adodb5/docs/README.md @@ -0,0 +1,17 @@ +# ADOdb Documentation + +ADOdb documentation is available in the following locations + +- [Online](http://adodb.org/) +- [Download](https://sourceforge.net/projects/adodb/files/Documentation/) for offline use + +## Legacy documentation + +The old HTML files are available in +[GitHub](https://github.com/ADOdb/ADOdb/tree/8b8133771ecbe9c95e57abbe5dc3757f0226bfcd/docs), +or in the release zip/tarballs for version 5.20 and before on +[Sourceforge](https://sourceforge.net/projects/adodb/files/adodb-php5-only/). + +## Changelog + +The full historical [Changelog](changelog.md) is available on GitHub. diff --git a/ehcp/adodb5/docs/adodb.gif b/ehcp/adodb5/docs/adodb.gif new file mode 100644 index 0000000..c5e8dfc Binary files /dev/null and b/ehcp/adodb5/docs/adodb.gif differ diff --git a/ehcp/adodb5/docs/adodb2.gif b/ehcp/adodb5/docs/adodb2.gif new file mode 100644 index 0000000..f12ae20 Binary files /dev/null and b/ehcp/adodb5/docs/adodb2.gif differ diff --git a/ehcp/adodb5/docs/changelog.md b/ehcp/adodb5/docs/changelog.md new file mode 100644 index 0000000..d682e4d --- /dev/null +++ b/ehcp/adodb5/docs/changelog.md @@ -0,0 +1,453 @@ +# ADOdb Changelog - v5.x + +Older changelogs: +[v4.x](changelog_v4.x.md), +[v3.x](changelog_v3.x.md), +[v2.x](changelog_v2.x.md). + + +## 5.20.4 - 30-Mar-2016 + +- adodb: Fix BulkBind() param count validation. #199 +- mysqli: fix PHP warning in recordset destructor. #217 +- mysqli: cast port number to int when connecting (PHP7 compatibility). #218 + +## 5.20.3 - 01-Jan-2016 + +- mssql: PHP warning when closing recordset from destructor not fixed in v5.20.2. #180 + +## 5.20.2 - 27-Dec-2015 + +- adodb: Remove a couple leftover PHP 4.x constructors (PHP7 compatibility). #139 +- mysql: MoveNext() now respects ADODB_ASSOC_CASE. #167 +- mssql, mysql, informix: Avoid PHP warning when closing recordset from destructor. #170 + +## 5.20.1 - 06-Dec-2015 + +- adodb: Fix regression introduced in 5.20.0, causing a PHP Warning when + calling GetAssoc() on an empty recordset. See Github #162 +- ADOConnection::Version() now handles SemVer. See Github #164 + +## 5.20.0 - 28-Nov-2015 + +- adodb: Fix regression introduced in v5.19, causing queries to return empty rows. See Github #20, #93, #95 +- adodb: Fix regression introduced in v5.19 in GetAssoc() with ADODB_FETCH_ASSOC mode and '0' as data. See Github #102 +- adodb: AutoExecute correctly handles empty result set in case of updates. See Github #13 +- adodb: Fix regex in Version(). See Github #16 +- adodb: Align method signatures to definition in parent class ADODB_DataDict. See Github #31 +- adodb: Improve compatibility of ADORecordSet_empty, thanks to Sjan Evardsson. See Github #43 +- adodb: fix ADODB_Session::open() failing after successful ADONewConnection() call, thanks to Sjan Evardsson. See Github #44 +- adodb: Only include memcache library once for PHPUnit 4.x, thanks to Alan Farquharson. See Github #74 +- adodb: Move() returns false when given row is < 0, thanks to Mike Benoit. +- adodb: Add support for pagination with complex queries, thanks to Mike Benoit. See Github #88 +- adodb: Parse port out of hostname if specified in connection parameters, thanks to Andy Theuninck. See Github #63 +- adodb: Fix inability to set values from 0 to null (and vice versa) with Active Record, thanks to Louis Johnson. See Github #71 +- adodb: Fix PHP strict warning in ADODB_Active_Record::Reload(), thanks to Boštjan Žokš. See Github #75 +- adodb: Add mssql's DATETIME2 type to ADOConnection::MetaType(), thanks to MarcelTO. See Github #80 +- adodb: When flushing cache, initialize it if it is not set, thanks to Paul Haggart. See Github #57 +- adodb: Define DB_AUTOQUERY_* constants in main include file. See Github #49 +- adodb: Improve documentation of fetch mode and assoc case +- adodb: Improve logic to build the assoc case bind array +- adodb: Strict-standards compliance for function names. See Github #18, #142 +- adodb: Remove old PHP 4.x constructors for compatibility with PHP 7. See Github #139 +- adodb: Initialize charset in ADOConnection::SetCharSet. See Github #39 +- adodb: Fix incorrect handling of input array in Execute(). See Github #146 +- adodb: Release Recordset when raising exception. See Github #143 +- adodb: Added new setConnectionParameter() method, currently implemented in mssqlnative driver only. See Github #158. +- adodb-lib: Optimize query pagination, thanks to Mike Benoit. See Github #110 +- memcache: use include_once() to avoid issues with PHPUnit. See http://phplens.com/lens/lensforum/msgs.php?id=19489 +- mssql_n: Allow use of prepared statements with driver. See Github #22 +- mssqlnative: Use ADOConnection::outp instead of error_log. See Github #12 +- mssqlnative: fix failure on Insert_ID() if the insert statement contains a semicolon in a value string, thanks to sketule. See Github #96 +- mssqlnative: Fix "invalid parameter was passed to sqlsrv_configure" error, thanks to Ray Morris. See Github #103 +- mssqlnative: Fix insert_ID() failing if server returns more than 1 row, thanks to gitjti. See Github #41 +- mysql: prevent race conditions when creating/dropping sequences, thanks to MikeB. See Github #28 +- mysql: Fix adodb_strip_order_by() bug causing SQL error for subqueries with order/limit clause, thanks to MikeB. +- mysql: workaround for HHVM behavior, thanks to Mike Benoit. +- mysqli: Fix qstr() when called without an active connection. See Github #11 +- oci8: Fix broken quoting of table name in AddColumnSQL and AlterColumnSQL, thanks to Andreas Fernandez. see Github #67 +- oci8: Allow oci8 driver to use lowercase field names in assoc mode. See Github #21 +- oci8po: Prevent replacement of '?' within strings, thanks to Mark Newnham. See Github #132 +- pdo: Added missing property (fixes PHP notices). see Github #56 +- pdo: Align method signatures with parent class, thanks to Andy Theuninck. see Github #62 +- pdo: new sqlsrv driver, thanks to MarcelTO. See Github #81 +- pdo/mysql: New methods to make the driver behave more like mysql/mysqli, thanks to Andy Theuninck. see Github #40 +- postgres: Stop using legacy function aliases +- postgres: Fix AlterColumnSQL when updating multiple columns, thanks to Jouni Ahto. See Github #72 +- postgres: Fix support for HHVM 3.6, thanks to Mike Benoit. See Github #87 +- postgres: Noblob optimization, thanks to Mike Benoit. See Github #112 +- postgres7: fix system warning in MetaColumns() with schema. See http://phplens.com/lens/lensforum/msgs.php?id=19481 +- sqlite3: ServerInfo() now returns driver's version +- sqlite3: Fix wrong connection parameter in _connect(), thanks to diogotoscano. See Github #51 +- sqlite3: Fix FetchField, thanks to diogotoscano. See Github #53 +- sqlite3: Fix result-less SQL statements executed twice. See Github #99 +- sqlite3: use -1 for _numOfRows. See Github #151 +- xmlschema: Fix ExtractSchema() when given $prefix and $stripprefix parameters, thanks to peterdd. See Github #92 +- Convert languages files to UTF-8, thanks to Marc-Etienne Vargenau. See Github #32. + +## 5.19 - 23-Apr-2014 + +**NOTE:** +This release suffers from a [known issue with Associative Fetch Mode](https://github.com/ADOdb/ADOdb/issues/20) +(i.e. when $ADODB_FETCH_MODE is set to ADODB_FETCH_ASSOC). +It causes recordsets to return empty strings (no data) when using some database drivers. +The problem has been reported on MSSQL, Interbase and Foxpro, but possibly affects +other database types as well; all drivers derived from the above are also impacted. + +- adodb: GetRowAssoc will return null as required. See http://phplens.com/lens/lensforum/msgs.php?id=19289 +- adodb: Fix GetRowAssoc bug introduced in 5.17, causing function to return data from previous fetch for NULL fields. See http://phplens.com/lens/lensforum/msgs.php?id=17539 +- adodb: GetAssoc will return a zero-based array when 2nd column is null. See https://sourceforge.net/p/adodb/bugs/130/ +- adodb: Execute no longer ignores single parameters evaluating to false. See https://sourceforge.net/p/adodb/patches/32/ +- adodb: Fix LIMIT 1 clause in subquery gets stripped off. See http://phplens.com/lens/lensforum/msgs.php?id=17813 +- adodb-lib: Fix columns quoting bug. See https://sourceforge.net/p/adodb/bugs/127/ +- Added new ADODB_ASSOC_CASE_* constants. Thx to Damien Regad. +- sessions: changed lob handling to detect all variations of oci8 driver. +- ads: clear fields before fetching. See http://phplens.com/lens/lensforum/msgs.php?id=17539 +- mssqlnative: fixed many FetchField compat issues. See http://phplens.com/lens/lensforum/msgs.php?id=18464. Also date format changed to remove timezone. +- mssqlnative: Numerous fixes and improvements by Mark Newnham + - Driver supports SQL Server 2005, 2008 and 2012 + - Bigint data types mapped to I8 instead of I + - Reintroduced MetaColumns function + - On SQL Server 2012, makes use of new CREATE SEQUENCE statement + - FetchField caches metadata at initialization to improve performance + - etc. +- mssqlnative: Fix Insert ID on prepared statement, thanks to Mike Parks. See http://phplens.com/lens/lensforum/msgs.php?id=19079 +- mssql: timestamp format changed to `Y-m-d\TH:i:s` (ISO 8601) to make them independent from DATEFORMAT setting, as recommended on + [Microsoft TechNet](http://technet.microsoft.com/en-us/library/ms180878%28v=sql.105%29.aspx#StringLiteralDateandTimeFormats). +- mysql/mysqli: Fix ability for MetaTables to filter by table name, broken since 5.15. See http://phplens.com/lens/lensforum/msgs.php?id=19359 +- odbc: Fixed MetaTables and MetaPrimaryKeys definitions in odbc driver to match adoconnection class. +- odbc: clear fields before fetching. See http://phplens.com/lens/lensforum/msgs.php?id=17539 +- oci8: GetRowAssoc now works in ADODB_FETCH_ASSOC fetch mode +- oci8: MetaType and MetaForeignKeys argument count are now strict-standards compliant +- oci8: Added trailing `;` on trigger creation for sequence fields, prevents occurence of ORA-24344 +- oci8quercus: new oci8 driver with support for quercus jdbc data types. +- pdo: Fixed concat recursion bug in 5.3. See http://phplens.com/lens/lensforum/msgs.php?id=19285 +- pgsql: Default driver (postgres/pgsql) is now postgres8 +- pgsql: Fix output of BLOB (bytea) columns with PostgreSQL >= 9.0 +- pgsql: Fix handling of DEFAULT NULL columns in AlterColumnSQL +- pgsql: Fix mapping of error message to ADOdb error codes +- pgsql: Reset parameter number in Param() method when $name == false +- postgres8: New class/type with correct behavior for _insertid(). See Github #8 +- postgres9: Fixed assoc problem. See http://phplens.com/lens/lensforum/msgs.php?id=19296 +- sybase: Removed redundant sybase_connect() call in _connect(). See Github #3 +- sybase: Allow connection on custom port. See Github #9 +- sybase: Fix null values returned with ASSOC fetch mode. See Github #10 +- Added Composer support. See Github #7 + +## 5.18 - 3 Sep 2012 + +- datadict-postgres: Fixes bug in ALTER COL. See http://phplens.com/lens/lensforum/msgs.php?id=19202. +- datadict-postgres: fixed bugs in MetaType() checking $fieldobj properties. +- GetRowAssoc did not work with null values. Bug in 5.17. +- postgres9: New driver to better support PostgreSQL 9. Thx Glenn Herteg and Cacti team. +- sqlite3: Modified to support php 5.4. Thx Günter Weber [built.development#googlemail.com] +- adodb: When fetch mode is ADODB_FETCH_ASSOC, and we execute `$db->GetAssoc("select 'a','0'");` we get an error. Fixed. See http://phplens.com/lens/lensforum/msgs.php?id=19190 +- adodb: Caching directory permissions now configurable using global variable $ADODB_CACHE_PERMS. Default value is 0771. +- mysqli: SetCharSet() did not return true (success) or false (fail) correctly. Fixed. +- mysqli: changed dataProvider to 'mysql' so that MetaError and other shared functions will work. +- mssqlnative: Prepare() did not work previously. Now calling Prepare() will work but the sql is not actually compiled. Unfortunately bind params are passed to sqlsrv_prepare and not to sqlsrv_execute. make Prepare() and empty function, and we still execute the unprepared stmt. +- mysql: FetchField(-1), turns it is is not possible to retrieve the max_length. Set to -1. +- mysql-perf: Fixed "SHOW INNODB STATUS". Change to "SHOW ENGINE INNODB STATUS" + +## 5.17 - 18 May 2012 + +- Active Record: Removed trailing whitespace from adodb-active-record.inc.php. +- odbc: Added support for $database parameter in odbc Connect() function. E.g. $DB->Connect($dsn_without_db, $user, $pwd, $database). + Previously $database had to be left blank and the $dsn was used to pass in this parameter. +- oci8: Added better empty($rs) error handling to metaindexes(). +- oci8: Changed to use newer oci API to support PHP 5.4. +- adodb.inc.php: Changed GetRowAssoc to more generic code that will work in all scenarios. + +## 5.16 - 26 March 2012 + +- mysqli: extra mysqli_next_result() in close() removed. See http://phplens.com/lens/lensforum/msgs.php?id=19100 +- datadict-oci8: minor typo in create sequence trigger fixed. See http://phplens.com/lens/lensforum/msgs.php?id=18879. +- security: safe date parsing changes. Does not impact security, these are code optimisations. Thx Saithis. +- postgres, oci8, oci8po, db2oci: Param() function parameters inconsistent with base class. $type='C' missing. Fixed. +- active-record: locked bug fixed. http://phplens.com/lens/lensforum/msgs.php?phplens_forummsg=new&id=19073 +- mysql, mysqli and informix: added MetaProcedures. Metaprocedures allows to retrieve an array list of all procedures in database. http://phplens.com/lens/lensforum/msgs.php?id=18414 +- Postgres7: added support for serial data type in MetaColumns(). + +## 5.15 - 19 Jan 2012 + +- pdo: fix ErrorMsg() to detect errors correctly. Thx Jens. +- mssqlnative: added another check for $this->fields array exists. +- mssqlnative: bugs in FetchField() fixed. See http://phplens.com/lens/lensforum/msgs.php?id=19024 +- DBDate and DBTimeStamp had sql injection bug. Fixed. Thx Saithis +- mysql and mysqli: MetaTables() now identifies views and tables correctly. +- Added function adodb_time() to adodb-time.inc.php. Generates current time in unsigned integer format. + +## 5.14 - 8 Sep 2011 + +- mysqli: fix php compilation bug. +- postgres: bind variables did not work properly. Fixed. +- postgres: blob handling bug in _decode. Fixed. +- ActiveRecord: if a null field was never updated, activerecord would still update the record. Fixed. +- ActiveRecord: 1 char length string never quoted. Fixed. +- LDAP: Connection string ldap:// and ldaps:// did not work. Fixed. + +## 5.13 - 15 Aug 2011 + +- Postgres: Fix in 5.12 was wrong. Uses pg_unescape_bytea() correctly now in _decode. +- GetInsertSQL/GetUpdateSQL: Now $ADODB_QUOTE_FIELDNAMES allows you to define 'NATIVE', 'UPPER', 'LOWER'. If set to true, will default to 'UPPER'. +- mysqli: added support for persistent connections 'p:'. +- mssqlnative: ADODB_FETCH_BOTH did not work properly. Fixed. +- mssqlnative: return values for stored procedures where not returned! Fixed. See http://phplens.com/lens/lensforum/msgs.php?id=18919 +- mssqlnative: timestamp and fetchfield bugs fixed. http ://phplens.com/lens/lensforum/msgs.php?id=18453 + +## 5.12 - 30 June 2011 + +- Postgres: Added information_schema support for postgresql. +- Postgres: Use pg_unescape_bytea() in _decode. +- Fix bulk binding with oci8. http://phplens.com/lens/lensforum/msgs.php?id=18786 +- oci8 perf: added wait evt monitoring. Also db cache advice now handles multiple buffer pools properly. +- sessions2: Fixed setFetchMode problem. +- sqlite: Some DSN connection settings were not parsed correctly. +- mysqli: now GetOne obeys $ADODB_GETONE_EOF; +- memcache: compress option did not work. Fixed. See http://phplens.com/lens/lensforum/msgs.php?id=18899 + +## 5.11 - 5 May 2010 + +- mysql: Fixed GetOne() to return null if no records returned. +- oci8 perf: added stats on sga, rman, memory usage, and flash in performance tab. +- odbtp: Now you can define password in $password field of Connect()/PConnect(), and it will add it to DSN. +- Datadict: altering columns did not consider the scale of the column. Now it does. +- mssql: Fixed problem with ADODB_CASE_ASSOC causing multiple versions of column name appearing in recordset fields. +- oci8: Added missing & to refLob. +- oci8: Added obj->scale to FetchField(). +- oci8: Now you can get column info of a table in a different schema, e.g. MetaColumns("schema.table") is supported. +- odbc_mssql: Fixed missing $metaDatabasesSQL. +- xmlschema: Changed declaration of create() to create($xmls) to fix compat problems. Also changed constructor adoSchema() to pass in variable instead of variable reference. +- ado5: Fixed ado5 exceptions to only display errors when $this->debug=true; +- Added DSN support to sessions2.inc.php. +- adodb-lib.inc.php. Fixed issue with _adodb_getcount() not using $secs2cache parameter. +- adodb active record. Fixed caching bug. See http://phplens.com/lens/lensforum/msgs.php?id=18288. +- db2: fixed ServerInfo(). +- adodb_date: Added support for format 'e' for TZ as in adodb_date('e') +- Active Record: If you have a field which is a string field (with numbers in) and you add preceding 0's to it the adodb library does not pick up the fact that the field has changed because of the way php's == works (dodgily). The end result is that it never gets updated into the database - fix by Matthew Forrester (MediaEquals). [matthew.forrester#mediaequals.com] +- Fixes RowLock() and MetaIndexes() inconsistencies. See http://phplens.com/lens/lensforum/msgs.php?id=18236 +- Active record support for postgrseql boolean. See http://phplens.com/lens/lensforum/msgs.php?id=18246 +- By default, Execute 2D array is disabled for security reasons. Set $conn->bulkBind = true to enable. See http://phplens.com/lens/lensforum/msgs.php?id=18270. Note this breaks backward compat. +- MSSQL: fixes for 5.2 compat. http://phplens.com/lens/lensforum/msgs.php?id=18325 +- Changed Version() to return a string instead of a float so it correctly returns 5.10 instead of 5.1. + +## 5.10 - 10 Nov 2009 + +- Fixed memcache to properly support $rs->timeCreated. +- adodb-ado.inc.php: Added BigInt support for PHP5. Will return float instead to support large numbers. Thx nasb#mail.goo.ne.jp. +- adodb-mysqli.inc.php: mysqli_multi_query is now turned off by default. To turn it on, use $conn->multiQuery = true; This is because of the risks of sql injection. See http://phplens.com/lens/lensforum/msgs.php?id=18144 +- New db2oci driver for db2 9.7 when using PL/SQL mode. Allows oracle style :0, :1, :2 bind parameters which are remapped to ? ? ?. +- adodb-db2.inc.php: fixed bugs in MetaTables. SYS owner field not checked properly. Also in $conn->Connect($dsn, null, null, $schema) and PConnect($dsn, null, null, $schema), we do a SET SCHEMA=$schema if successful connection. +- adodb-mysqli.inc.php: Now $rs->Close() closes all pending next resultsets. Thx Clifton mesmackgod#gmail.com +- Moved _CreateCache() from PConnect()/Connect() to CacheExecute(). Suggested by Dumka. +- Many bug fixes to adodb-pdo_sqlite.inc.php and new datadict-sqlite.inc.php. Thx Andrei B. [andreutz#mymail.ro] +- Removed usage of split (deprecated in php 5.3). Thx david#horizon-nigh.org. +- Fixed RowLock() parameters to comply with PHP5 strict mode in multiple drivers. + +## 5.09 - 25 June 2009 + +- Active Record: You can force column names to be quoted in INSERT and UPDATE statements, typically because you are using reserved words as column names by setting ADODB_Active_Record::$_quoteNames = true; +- Added memcache and cachesecs to DSN. e.g. + + ``` php + # we have a memcache servers mem1,mem2 on port 8888, compression=off and cachesecs=120 + $dsn = 'mysql://user:pwd@localhost/mydb?memcache=mem1,mem2:8888:0&cachesecs=120'; + ``` + +- Fixed up MetaColumns and MetaPrimaryIndexes() for php 5.3 compat. Thx http://adodb.pastebin.com/m52082b16 +- The postgresql driver's OffsetDate() apparently does not work with postgres 8.3. Fixed. +- Added support for magic_quotes_sybase in qstr() and addq(). Thanks Eloy and Sam Moffat. +- The oci8 driver did not handle LOBs properly when binding. Fixed. See http://phplens.com/lens/lensforum/msgs.php?id=17991. +- Datadict: In order to support TIMESTAMP with subsecond accuracy, added to datadict the new TS type. Supported by mssql, postgresql and oci8 (oracle). Also changed oci8 $conn->sysTimeStamp to use 'SYSTIMESTAMP' instead of 'SYSDATE'. Should be backwards compat. +- Added support for PHP 5.1+ DateTime objects in DBDate and DBTimeStamp. This means that dates and timestamps will be managed by DateTime objects if you are running PHP 5.1+. +- Added new property to postgres64 driver to support returning I if type is unique int called $db->uniqueIisR, defaulting to true. See http://phplens.com/lens/lensforum/msgs.php?id=17963 +- Added support for bindarray in adodb_GetActiveRecordsClass with SelectLimit in adodb-active-record.inc.php. +- Transactions now allowed in ado_access driver. Thx to petar.petrov.georgiev#gmail.com. +- Sessions2 garbage collection is now much more robust. We perform ORDER BY to prevent deadlock in adodb-sessions2.inc.php. +- Fixed typo in pdo_sqlite driver. + +## 5.08a - 17 Apr 2009 + +- Fixes wrong version number string. +- Incorrect + in adodb-datadict.inc.php removed. +- Fixes missing OffsetDate() function in pdo. Thx paul#mantisforge.org. + +## 5.08 - 17 Apr 2009 + +- adodb-sybase.inc.php driver. Added $conn->charSet support. Thx Luis Henrique Mulinari (luis.mulinari#gmail.com) +- adodb-ado5.inc.php. Fixed some bind param issues. Thx Jirka Novak. +- adodb-ado5.inc.php. Now has improved error handling. +- Fixed typo in adodb-xmlschema03.inc.php. See XMLS_EXISTING_DATA, line 1501. Thx james johnson. +- Made $inputarr optional for _query() in all drivers. +- Fixed spelling mistake in flushall() in adodb.inc.ophp. +- Fixed handling of quotes in adodb_active_record::doquote. Thx Jonathan Hohle (jhohle#godaddy.com). +- Added new index parameter to adodb_active_record::setdatabaseadaptor. Thx Jonathan Hohle +- Fixed & readcache() reference compat problem with php 5.3 in adodb.Thx Jonathan Hohle. +- Some minor $ADODB_CACHE_CLASS definition issues in adodb.inc.php. +- Added Reset() function to adodb_active_record. Thx marcus. +- Minor dsn fix for pdo_sqlite in adodb.inc.php. Thx Sergey Chvalyuk. +- Fixed adodb-datadict _CreateSuffix() inconsistencies. Thx Chris Miller. +- Option to delete old fields $dropOldFlds in datadict ChangeTableSQL($table, $flds, $tableOptions, $dropOldFlds=false) added. Thx Philipp Niethammer. +- Memcache caching did not expire properly. Fixed. +- MetaForeignKeys for postgres7 driver changed from adodb_movenext to $rs->MoveNext (also in 4.99) +- Added support for ldap and ldaps url format in ldap driver. E.g. ldap://host:port/dn?attributes?scope?filter?extensions + +## 5.07 - 26 Dec 2008 + +- BeginTrans/CommitTrans/RollbackTrans return true/false correctly on success/failure now for mssql, odbc, oci8, mysqlt, mysqli, postgres, pdo. +- Replace() now quotes all non-null values including numeric ones. +- Postgresql qstr() now returns booleans as *true* and *false* without quotes. +- MetaForeignKeys in mysql and mysqli drivers had this problem: A table can have two foreign keys pointing to the same column in the same table. The original code will incorrectly report only the last column. Fixed. https://sourceforge.net/tracker/index.php?func=detail&aid=2287278&group_id=42718&atid=433976 +- Passing in full ado connection string in $argHostname with ado drivers was failing in adodb5 due to bug. Fixed. +- Fixed memcachelib flushcache and flushall bugs. Also fixed possible timeCreated = 0 problem in readcache. (Also in adodb 4.992). Thanks AlexB_UK (alexbarnes#hotmail.com). +- Fixed a notice in adodb-sessions2.inc.php, in _conn(). Thx bober m.derlukiewicz#rocktech.remove_me.pl; +- ADOdb Active Record: Fixed some issues with incompatible fetch modes (ADODB_FETCH_ASSOC) causing problems in UpdateActiveTable(). +- ADOdb Active Record: Added support for functions that support predefining one-to-many relationships: + _ClassHasMany ClassBelongsTo TableHasMany TableBelongsTo TableKeyHasMany TableKeyBelongsTo_. +- You can also define your child/parent class in these functions, instead of the default ADODB_Active_Record. Thx Arialdo Martini & Chris R for idea. +- ADOdb Active Record: HasMany hardcoded primary key to "id". Fixed. +- Many pdo and pdo-sqlite fixes from Sid Dunayer [sdunayer#interserv.com]. +- CacheSelectLimit not working for mssql. Fixed. Thx AlexB. +- The rs2html function did not display hours in timestamps correctly. Now 24hr clock used. +- Changed ereg* functions to use preg* functions as ereg* is deprecated in PHP 5.3. Modified sybase and postgresql drivers. + +## 5.06 - 16 Oct 2008 + +- Added driver adodb-pdo_sqlite.inc.php. Thanks Diogo Toscano (diogo#scriptcase.net) for the code. +- Added support for [one-to-many relationships](docs-active-record.htm#onetomany) with BelongsTo() and HasMany() in adodb_active_record. +- Added BINARY type to mysql.inc.php (also in 4.991). +- Added support for SelectLimit($sql,-1,100) in oci8. (also in 4.991). +- New $conn->GetMedian($table, $field, $where='') to get median account no. (also in 4.991) +- The rs2html() function in tohtml.inc.php did not handle dates with ':' in it properly. Fixed. (also in 4.991) +- Added support for connecting to oci8 using `$DB->Connect($ip, $user, $pwd, "SID=$sid");` (also in 4.991) +- Added mysql type 'VAR_STRING' to MetaType(). (also in 4.991) +- The session and session2 code supports setfetchmode assoc properly now (also in 4.991). +- Added concat support to pdo. Thx Andrea Baron. +- Changed db2 driver to use format `Y-m-d H-i-s` for datetime instead of `Y-m-d-H-i-s` which was legacy from odbc_db2 conversion. +- Removed vestigal break on adodb_tz_offset in adodb-time.inc.php. +- MetaForeignKeys did not work for views in MySQL 5. Fixed. +- Changed error handling in GetActiveRecordsClass. +- Added better support for using existing driver when $ADODB_NEWCONNECTION function returns false. +- In _CreateSuffix in adodb-datadict.inc.php, adding unsigned variable for mysql. +- In adodb-xmlschema03.inc.php, changed addTableOpt to include db name. +- If bytea blob in postgresql is null, empty string was formerly returned. Now null is returned. +- Changed db2 driver CreateSequence to support $start parameter. +- rs2html() now does not add nbsp to end if length of string > 0 +- The oci8po FetchField() now only lowercases field names if ADODB_ASSOC_CASE is set to 0. +- New mssqlnative drivers for php. TQ Garrett Serack of M'soft. [Download](http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en) mssqlnative extension. Note that this is still in beta. +- Fixed bugs in memcache support. +- You can now change the return value of GetOne if no records are found using the global variable $ADODB_GETONE_EOF. The default is null. To change it back to the pre-4.99/5.00 behaviour of false, set $ADODB_GETONE_EOF = false; +- In Postgresql 8.2/8.3 MetaForeignkeys did not work. Fixed William Kolodny William.Kolodny#gt-t.net + +## 5.05 - 11 Jul 2008 + +Released together with [v4.990](changelog_v4.x.md#4990---11-jul-2008) + +- Added support for multiple recordsets in mysqli , thanks to Geisel Sierote geisel#4up.com.br. See http://phplens.com/lens/lensforum/msgs.php?id=15917 +- Malcolm Cook added new Reload() function to Active Record. See http://phplens.com/lens/lensforum/msgs.php?id=17474 +- Thanks Zoltan Monori (monzol#fotoprizma.hu) for bug fixes in iterator, SelectLimit, GetRandRow, etc. +- Under heavy loads, the performance monitor for oci8 disables Ixora views. +- Fixed sybase driver SQLDate to use str_replace(). Also for adodb5, changed sybase driver UnixDate and UnixTimeStamp calls to static. +- Changed oci8 lob handler to use & reference `$this->_refLOBs[$numlob]['VAR'] = &$var`. +- We now strtolower the get_class() function in PEAR::isError() for php5 compat. +- CacheExecute did not retrieve cache recordsets properly for 5.04 (worked in 4.98). Fixed. +- New ADODB_Cache_File class for file caching defined in adodb.inc.php. +- Farsi language file contribution by Peyman Hooshmandi Raad (phooshmand#gmail.com) +- New API for creating your custom caching class which is stored in $ADODB_CACHE: + + ``` php + include "/path/to/adodb.inc.php"; + $ADODB_CACHE_CLASS = 'MyCacheClass'; + class MyCacheClass extends ADODB_Cache_File + { + function writecache($filename, $contents,$debug=false) {...} + function &readcache($filename, &$err, $secs2cache, $rsClass) { ...} + : + } + $DB = NewADOConnection($driver); + $DB->Connect(...); ## MyCacheClass created here and stored in $ADODB_CACHE global variable. + $data = $rs->CacheGetOne($sql); ## MyCacheClass is used here for caching... + ``` + +- Memcache supports multiple pooled hosts now. Only if none of the pooled servers + can be contacted will a connect error be generated. Usage example below: + + ``` php + $db = NewADOConnection($driver); + $db->memCache = true; /// should we use memCache instead of caching in files + $db->memCacheHost = array($ip1, $ip2, $ip3); /// $db->memCacheHost = $ip1; still works + $db->memCachePort = 11211; /// this is default memCache port + $db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + $db->Connect(...); + $db->CacheExecute($sql); + ``` + +## 5.04 - 13 Feb 2008 + +Released together with [v4.98](changelog_v4.x.md#498---13-feb-2008) + +- Fixed adodb_mktime problem which causes a performance bottleneck in $hrs. +- Added mysqli support to adodb_getcount(). +- Removed MYSQLI_TYPE_CHAR from MetaType(). + +## 5.03 - 22 Jan 2008 + +Released together with [v4.97](changelog_v4.x.md#497---22-jan-2008) + +- Active Record: $ADODB_ASSOC_CASE=1 did not work properly. Fixed. +- Modified Fields() in recordset class to support display null fields in FetchNextObject(). +- In ADOdb5, active record implementation, we now support column names with spaces in them - we autoconvert the spaces to _ using __set(). Thx Daniel Cook. http://phplens.com/lens/lensforum/msgs.php?id=17200 +- Removed $arg3 from mysqli SelectLimit. See http://phplens.com/lens/lensforum/msgs.php?id=16243. Thx Zsolt Szeberenyi. +- Changed oci8 FetchField, which returns the max_length of BLOB/CLOB/NCLOB as 4000 (incorrectly) to -1. +- CacheExecute would sometimes return an error on Windows if it was unable to lock the cache file. This is harmless and has been changed to a warning that can be ignored. Also adodb_write_file() code revised. +- ADOdb perf code changed to only log sql if execution time >= 0.05 seconds. New $ADODB_PERF_MIN variable holds min sql timing. Any SQL with timing value below this and is not causing an error is not logged. +- Also adodb_backtrace() now traces 1 level deeper as sometimes actual culprit function is not displayed. +- Fixed a group by problem with adodb_getcount() for db's which are not postgres/oci8 based. +- Changed mssql driver Parameter() from SQLCHAR to SQLVARCHAR: case 'string': $type = SQLVARCHAR; break. +- Problem with mssql driver in php5 (for adodb 5.03) because some functions are not static. Fixed. + +## 5.02 - 24 Sept 2007 + +Released together with [v4.96](changelog_v4.x.md#496---24-sept-2007) + +- ADOdb perf for oci8 now has non-table-locking code when clearing the sql. Slower but better transparency. Added in 4.96a and 5.02a. +- Fix adodb count optimisation. Preg_match did not work properly. Also rewrote the ORDER BY stripping code in _adodb_getcount(), adodb-lib.inc.php. +- SelectLimit for oci8 not optimal for large recordsets when offset=0. Changed $nrows check. +- Active record optimizations. Added support for assoc arrays in Set(). +- Now GetOne returns null if EOF (no records found), and false if error occurs. Use ErrorMsg()/ErrorNo() to get the error. +- Also CacheGetRow and CacheGetCol will return false if error occurs, or empty array() if EOF, just like GetRow and GetCol. +- Datadict now allows changing of types which are not resizable, eg. VARCHAR to TEXT in ChangeTableSQL. -- Mateo Tibaquirá +- Added BIT data type support to adodb-ado.inc.php and adodb-ado5.inc.php. +- Ldap driver did not return actual ldap error messages. Fixed. +- Implemented GetRandRow($sql, $inputarr). Optimized for Oci8. +- Changed adodb5 active record to use static SetDatabaseAdapter() and removed php4 constructor. Bas van Beek bas.vanbeek#gmail.com. +- Also in adodb5, changed adodb-session2 to use static function declarations in class. Thx Daniel Berlin. +- Added "Clear SQL Log" to bottom of Performance screen. +- Sessions2 code echo'ed directly to the screen in debug mode. Now uses ADOConnection::outp(). +- In mysql/mysqli, qstr(null) will return the string `null` instead of empty quoted string `''`. +- postgresql optimizeTable in perf-postgres.inc.php added by Daniel Berlin (mail#daniel-berlin.de) +- Added 5.2.1 compat code for oci8. +- Changed @@identity to SCOPE_IDENTITY() for multiple mssql drivers. Thx Stefano Nari. +- Code sanitization introduced in 4.95 caused problems in European locales (as float 3.2 was typecast to 3,2). Now we only sanitize if is_numeric fails. +- Added support for customizing ADORecordset_empty using $this->rsPrefix.'empty'. By Josh Truwin. +- Added proper support for ALterColumnSQL for Postgresql in datadict code. Thx. Josh Truwin. +- Added better support for MetaType() in mysqli when using an array recordset. +- Changed parser for pgsql error messages in adodb-error.inc.php to case-insensitive regex. + +## 5.01 - 17 May 2007 + +Released together with [v4.95](changelog_v4.x.md#495---17-may-2007) + +- CacheFlush debug outp() passed in invalid parameters. Fixed. +- Added Thai language file for adodb. Thx Trirat Petchsingh rosskouk#gmail.com and Marcos Pont +- Added zerofill checking support to MetaColumns for mysql and mysqli. +- CacheFlush no longer deletes all files/directories. Only *.cache files deleted. +- DB2 timestamp format changed to `var $fmtTimeStamp = "'Y-m-d-H:i:s'";` +- Added some code sanitization to AutoExecute in adodb-lib.inc.php. +- Due to typo, all connections in adodb-oracle.inc.php would become persistent, even non-persistent ones. Fixed. +- Oci8 DBTimeStamp uses 24 hour time for input now, so you can perform string comparisons between 2 DBTimeStamp values. +- Some PHP4.4 compat issues fixed in adodb-session2.inc.php +- For ADOdb 5.01, fixed some adodb-datadict.inc.php MetaType compat issues with PHP5. +- The $argHostname was wiped out in adodb-ado5.inc.php. Fixed. +- Adodb5 version, added iterator support for adodb_recordset_empty. +- Adodb5 version,more error checking code now will use exceptions if available. diff --git a/ehcp/adodb5/docs/changelog_v2.x.md b/ehcp/adodb5/docs/changelog_v2.x.md new file mode 100644 index 0000000..000dcd5 --- /dev/null +++ b/ehcp/adodb5/docs/changelog_v2.x.md @@ -0,0 +1,531 @@ +# ADOdb old Changelog - v2.x and older + +See the [Current Changelog](changelog.md). + + +## 2.91 - 3 Jan 2003 + +- Revised PHP version checking to use $ADODB_PHPVER with legal values 0x4000, 0x4050, 0x4200, 0x4300. +- Added support for bytea fields and oid blobs in postgres by allowing BlobDecode() to detect and convert non-oid fields. Also added BlobEncode to postgres when you want to encode oid blobs. +- Added blobEncodeType property for connections to inform phpLens what encoding method to use for blobs. +- Added BlobDecode() and BlobEncode() to base ADOConnection class. +- Added umask() to _gencachename() when creating directories. +- Added charPage for ado drivers, so you can set the code page. + ``` +$conn->charPage = CP_UTF8; +$conn->Connect($dsn); + ``` +- Modified _seek in mysql to check for num rows=0. +- Added to metatypes new informix types for IDS 9.30\. Thx Fernando Ortiz. +- _maxrecordcount returned in CachePageExecute $rsreturn +- Fixed sybase cacheselectlimit( ) problems +- MetaColumns() max_length should use precision for types X and C for ms access. Fixed. +- Speedup of odbc non-SELECT sql statements. +- Added support in MetaColumns for Wide Char types for ODBC. We halve max_length if unicode/wide char. +- Added 'B' to types handled by GetUpdateSQL/GetInsertSQL. +- Fixed warning message in oci8 driver with $persist variable when using PConnect. + +## 2.90 - 11 Dec 2002 + +- Mssql and mssqlpo and oci8po now support ADODB_ASSOC_CASE. +- Now MetaType() can accept a field object as the first parameter. +- New $arr = $db->ServerInfo( ) function. Returns $arr['description'] which is the string description, and $arr['version']. +- PostgreSQL and MSSQL speedups for insert/updates. +- Implemented new SetFetchMode() that removes the need to use $ADODB_FETCH_MODE. Each connection has independant fetchMode. +- ADODB_ASSOC_CASE now defaults to 2, use native defaults. This is because we would break backward compat for too many applications otherwise. +- Patched encrypted sessions to use replace() +- The qstr function supports quoting of nulls when escape character is \ +- Rewrote bits and pieces of session code to check for time synch and improve reliability. +- Added property ADOConnection::hasTransactions = true/false; +- Added CreateSequence and DropSequence functions +- Found misplaced MoveNext() in adodb-postgres.inc.php. Fixed. +- Sybase SelectLimit not reliable because 'set rowcount' not cached - fixed. +- Moved ADOConnection to adodb-connection.inc.php and ADORecordSet to adodb-recordset.inc.php. This allows us to use doxygen to generate documentation. Doxygen doesn't like the classes in the main adodb.inc.php file for some mysterious reason. + +## 2.50 - 14 Nov 2002 + +- Added transOff and transCnt properties for disabling (transOff = true) and tracking transaction status (transCnt>0). +- Added inputarray handling into _adodb_pageexecute_all_rows - "Ross Smith" RossSmith#bnw.com. +- Fixed postgresql inconsistencies in date handling. +- Added support for mssql_fetch_assoc. +- Fixed $ADODB_FETCH_MODE bug in odbc MetaTables() and MetaPrimaryKeys(). +- Accidentally declared UnixDate() twice, making adodb incompatible with php 4.3.0\. Fixed. +- Fixed pager problems with some databases that returned -1 for _currentRow on MoveLast() by switching to MoveNext() in adodb-lib.inc.php. +- Also fixed uninited $discard in adodb-lib.inc.php. + +## 2.43 - 25 Oct 2002 + +- Added ADODB_ASSOC_CASE constant to better support ibase and odbc field names. +- Added support for NConnect() for oracle OCINLogin. +- Fixed NumCols() bug. +- Changed session handler to use Replace() on write. +- Fixed oci8 SelectLimit aggregate function bug again. +- Rewrote pivoting code. + +## 2.42 - 4 Oct 2002 + +- Fixed ibase_fetch() problem with nulls. Also interbase now does automatic blob decoding, and is backward compatible. Suggested by Heinz Hombergs heinz#hhombergs.de. +- Fixed postgresql MoveNext() problems when called repeatedly after EOF. Also suggested by Heinz Hombergs. +- PageExecute() does not rewrite queries if SELECT DISTINCT is used. Requested by hans#velum.net +- Added additional fixes to oci8 SelectLimit handling with aggregate functions - thx to Christian Bugge for reporting the problem. + +## 2.41 - 2 Oct 2002 + +- Fixed ADODB_COUNTRECS bug in odbc. Thx to Joshua Zoshi jzoshi#hotmail.com. +- Increased buffers for adodb-csvlib.inc.php for extremely long sql from 8192 to 32000. +- Revised pivottable.inc.php code. Added better support for aggregate fields. +- Fixed mysql text/blob types problem in MetaTypes base class - thx to horacio degiorgi. +- Added SQLDate($fmt,$date) function, which allows an sql date format string to be generated - useful for group by's. +- Fixed bug in oci8 SelectLimit when offset>100. + +## 2.40 - 4 Sept 2002 + +- Added new NLS_DATE_FORMAT property to oci8\. Suggested by Laurent NAVARRO ln#altidev.com +- Now use bind parameters in oci8 selectlimit for better performance. +- Fixed interbase replaceQuote for dialect != 1\. Thx to "BEGUIN Pierre-Henri - INFOCOB" phb#infocob.com. +- Added white-space check to QA. +- Changed unixtimestamp to support fractional seconds (we always round down/floor the seconds). Thanks to beezly#beezly.org.uk. +- Now you can set the trigger_error type your own user-defined type in adodb-errorhandler.inc.php. Suggested by Claudio Bustos clbustos#entelchile.net. +- Added recordset filters with rsfilter.inc.php. + $conn->_rs2rs does not create a new recordset when it detects it is of type array. Some trickery there as there seems to be a bug in Zend Engine +- Added render_pagelinks to adodb-pager.inc.php. Code by "Pablo Costa" pablo#cbsp.com.br. +- MetaType() speedup in adodb.inc.php by using hashing instead of switch. Best performance if constant arrays are supported, as they are in PHP5. +- adodb-session.php now updates only the expiry date if the crc32 check indicates that the data has not been modified. + +## 2.31 - 20 Aug 2002 + +- Made changes to pivottable.inc.php due to daniel lucuzaeu's suggestions (we sum the pivottable column if desired). +- Fixed ErrorNo() in postgres so it does not depend on _errorMsg property. +- Robert Tuttle added support for oracle cursors. See ExecuteCursor(). +- Fixed Replace() so it works with mysql when updating record where data has not changed. Reported by Cal Evans (cal#calevans.com). + +## 2.30 - 1 Aug 2002 + +- Added pivottable.inc.php. Thanks to daniel.lucazeau#ajornet.com for the original concept. +- Added ADOConnection::outp($msg,$newline) to output error and debugging messages. Now you can override this using the ADODB_OUTP constant and use your own output handler. +- Changed == to === for 'null' comparison. Reported by ericquil#yahoo.com +- Fixed mssql SelectLimit( ) bug when distinct used. + +## 2.30 - 1 Aug 2002 + +- New GetCol() and CacheGetCol() from ross#bnw.com that returns the first field as a 1 dim array. +- We have an empty recordset, but RecordCount() could return -1\. Fixed. Reported by "Jonathan Polansky" jonathan#polansky.com. +- We now check for session variable changes using strlen($sessval).crc32($sessval). Formerly we only used crc32(). +- Informix SelectLimit() problem with $ADODB_COUNTRECS fixed. +- Fixed informix SELECT FIRST x DISTINCT, and not SELECT DISTINCT FIRST x - reported by F Riosa +- Now default adodb error handlers ignores error if @ used. +- If you set $conn->autoRollback=true, we auto-rollback persistent connections for odbc, mysql, oci8, mssql. Default for autoRollback is false. No need to do so for postgres. As interbase requires a transaction id (what a flawed api), we don't do it for interbase. +- Changed PageExecute() to use non-greedy preg_match when searching for "FROM" keyword. + +## 2.20 - 9 July 2002 + +- Added CacheGetOne($secs2cache,$sql), CacheGetRow($secs2cache,$sql), CacheGetAll($secs2cache,$sql). +- Added $conn->OffsetDate($dayFraction,$date=false) to generate sql that calcs date offsets. Useful for scheduling appointments. +- Added connection properties: leftOuter, rightOuter that hold left and right outer join operators. +- Added connection property: ansiOuter to indicate whether ansi outer joins supported. +- New driver _mssqlpo_, the portable mssql driver, which converts string concat operator from || to +. +- Fixed ms access bug - SelectLimit() did not support ties - fixed. +- Karsten Kraus (Karsten.Kraus#web.de), contributed error-handling code to ADONewConnection. Unfortunately due to backward compat problems, had to rollback most of the changes. +- Added new parameter to GetAssoc() to allow returning an array of key-value pairs, ignoring any additional columns in the recordset. Off by default. +- Corrected mssql $conn->sysDate to return only date using convert(). +- CacheExecute() improved debugging output. +- Changed rs2html() so newlines are converted to BR tags. Also optimized rs2html() based on feedback by "Jerry Workman" jerry#mtncad.com. +- Added support for Replace() with Interbase, using DELETE and INSERT. +- Some minor optimizations (mostly removing & references when passing arrays). +- Changed GenID() to allows id's larger than the size of an integer. +- Added force_session property to oci8 for better updateblob() support. +- Fixed PageExecute() which did not work properly with sql containing GROUP BY. + +## 2.12 - 12 June 2002 + +- Added toexport.inc.php to export recordsets in CSV and tab-delimited format. +- CachePageExecute() does not work - fixed - thx John Huong. +- Interbase aliases not set properly in FetchField() - fixed. Thx Stefan Goethals. +- Added cache property to adodb pager class. The number of secs to cache recordsets. +- SQL rewriting bug in pageexecute() due to skipping of newlines due to missing /s modifier. Fixed. +- Max size of cached recordset due to a bug was 256000 bytes. Fixed. +- Speedup of 1st invocation of CacheExecute() by tuning code. +- We compare $rewritesql with $sql in pageexecute code in case of rewrite failure. + +## 2.11 - 7 June 2002 + +- Fixed PageExecute() rewrite sql problem - COUNT(*) and ORDER BY don't go together with mssql, access and postgres. Thx to Alexander Zhukov alex#unipack.ru +- DB2 support for CHARACTER type added - thx John Huong huongch#bigfoot.com +- For ado, $argProvider not properly checked. Fixed - kalimero#ngi.it +- Added $conn->Replace() function for update with automatic insert if the record does not exist. Supported by all databases except interbase. + +## 2.10 - 4 June 2002 + +- Added uniqueSort property to indicate mssql ORDER BY cols must be unique. +- Optimized session handler by crc32 the data. We only write if session data has changed. +- adodb_sess_read in adodb-session.php now returns ''correctly - thanks to Jorma Tuomainen, webmaster#wizactive.com +- Mssql driver did not throw EXECUTE errors correctly because ErrorMsg() and ErrorNo() called in wrong order. Pointed out by Alexios Fakos. Fixed. +- Changed ado to use client cursors. This fixes BeginTran() problems with ado. +- Added handling of timestamp type in ado. +- Added to ado_mssql support for insert_id() and affected_rows(). +- Added support for mssql.datetimeconvert=0, available since php 4.2.0. +- Made UnixDate() less strict, so that the time is ignored if present. +- Changed quote() so that it checks for magic_quotes_gpc. +- Changed maxblobsize for odbc to default to 64000. + +## 2.00 - 13 May 2002 + +- Added drivers _informix72_ for pre-7.3 versions, and _oci805_ for oracle 8.0.5, and postgres64 for postgresql 6.4 and earlier. The postgres and postgres7 drivers are now identical. +- Interbase now partially supports ADODB_FETCH_BOTH, by defaulting to ASSOC mode. +- Proper support for blobs in mssql. Also revised blob support code is base class. Now UpdateBlobFile() calls UpdateBlob() for consistency. +- Added support for changed odbc_fetch_into api in php 4.2.0 with $conn->_has_stupid_odbc_fetch_api_change. +- Fixed spelling of tablock locking hint in GenID( ) for mssql. +- Added RowLock( ) to several databases, including oci8, informix, sybase, etc. Fixed where error in mssql RowLock(). +- Added sysDate and sysTimeStamp properties to most database drivers. These are the sql functions/constants for that database that return the current date and current timestamp, and are useful for portable inserts and updates. +- Support for RecordCount() caused date handling in sybase and mssql to break. Fixed, thanks to Toni Tunkkari, by creating derived classes for ADORecordSet_array for both databases. Generalized using arrayClass property. Also to support RecordCount(), changed metatype handling for ado drivers. Now the type returned in FetchField is no longer a number, but the 1-char data type returned by MetaType. At the same time, fixed a lot of date handling. Now mssql support dmy and mdy date formats. Also speedups in sybase and mssql with preg_match and ^ in date/timestamp handling. Added support in sybase and mssql for 24 hour clock in timestamps (no AM/PM). +- Extensive revisions to informix driver - thanks to Samuel CARRIERE samuel_carriere#hotmail.com +- Added $ok parameter to CommitTrans($ok) for easy rollbacks. +- Fixed odbc MetaColumns and MetaTables to save and restore $ADODB_FETCH_MODE. +- Some odbc drivers did not call the base connection class constructor. Fixed. +- Fixed regex for GetUpdateSQL() and GetInsertSQL() to support more legal character combinations. + +## 1.99 - 21 April 2002 + +- Added emulated RecordCount() to all database drivers if $ADODB_COUNTRECS = true (which it is by default). Inspired by Cristiano Duarte (cunha17#uol.com.br). +- Unified stored procedure support for mssql and oci8\. Parameter() and PrepareSP() functions implemented. +- Added support for SELECT FIRST in informix, modified hasTop property to support this. +- Changed csv driver to handle updates/deletes/inserts properly (when Execute() returns true). Bind params also work now, and raiseErrorFn with csv driver. Added csv driver to QA process. +- Better error checking in oci8 UpdateBlob() and UpdateBlobFile(). +- Added TIME type to MySQL - patch by Manfred h9125297#zechine.wu-wien.ac.at +- Prepare/Execute implemented for Interbase/Firebird +- Changed some regular expressions to be anchored by /^ $/ for speed. +- Added UnixTimeStamp() and UnixDate() to ADOConnection(). Now these functions are in both ADOConnection and ADORecordSet classes. +- Empty recordsets were not cached - fixed. +- Thanks to Gaetano Giunta (g.giunta#libero.it) for the oci8 code review. We didn't agree on everything, but i hoped we agreed to disagree! + +## 1.90 - 6 April 2002 + +- Now all database drivers support fetch modes ADODB_FETCH_NUM and ADODB_FETCH_ASSOC, though still not fully tested. Eg. Frontbase, Sybase, Informix. +- NextRecordSet() support for mssql. Contributed by "Sven Axelsson" sven.axelsson#bokochwebb.se +- Added blob support for SQL Anywhere. Contributed by Wade Johnson wade#wadejohnson.de +- Fixed some security loopholes in server.php. Server.php also supports fetch mode. +- Generalized GenID() to support odbc and mssql drivers. Mssql no longer generates GUID's. +- Experimental RowLock($table,$where) for mssql. +- Properly implemented Prepare() in oci8 and ODBC. +- Added Bind() support to oci8 to support Prepare(). +- Improved error handler. Catches CacheExecute() and GenID() errors now. +- Now if you are running php from the command line, debugging messages do not output html formating. Not 100% complete, but getting there. + +## 1.81 - 22 March 2002 + +- Restored default $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT for backward compatibility. +- SelectLimit for oci8 improved - Our FIRST_ROWS optimization now does not overwrite existing hint. +- New Sybase SQL Anywhere driver. Contributed by Wade Johnson wade#wadejohnson.de + +## 1.80 - 15 March 2002 + +- Redesigned directory structure of ADOdb files. Added new driver directory where all database drivers reside. +- Changed caching algorithm to create subdirectories. Now we scale better. +- Informix driver now supports insert_id(). Contribution by "Andrea Pinnisi" pinnisi#sysnet.it +- Added experimental ISO date and FetchField support for informix. +- Fixed a quoting bug in Execute() with bind parameters, causing problems with blobs. +- Mssql driver speedup by 10-15%. +- Now in CacheExecute($secs2cache,$sql,...), $secs2cache is optional. If missing, it will take the value defined in $connection->cacheSecs (default is 3600 seconds). Note that CacheSelectLimit(), the secs2cache is still compulsory - sigh. +- Sybase SQL Anywhere driver (using ODBC) contributed by Wade Johnson wade#wadejohnson.de + +## 1.72 - 8 March 2002 + +- Added @ when returning Fields() to prevent spurious error - "Michael William Miller" mille562#pilot.msu.edu +- MetaDatabases() for postgres contributed by Phil pamelant#nerim.net +- Mitchell T. Young (mitch#youngfamily.org) contributed informix driver. +- Fixed rs2html() problem. I cannot reproduce, so probably a problem with pre PHP 4.1.0 versions, when supporting new ADODB_FETCH_MODEs. +- Mattia Rossi (mattia#technologist.com) contributed BlobDecode() and UpdateBlobFile() for postgresql using the postgres specific pg_lo_import()/pg_lo_open() - i don't use them but hopefully others will find this useful. See [this posting](http://phplens.com/lens/lensforum/msgs.php?id=1262) for an example of usage. +- Added UpdateBlobFile() for uploading files to a database. +- Made UpdateBlob() compatible with oci8po driver. +- Added noNullStrings support to oci8 driver. Oracle changes all ' ' strings to nulls, so you need to set strings to ' ' to prevent the nullifying of strings. $conn->noNullStrings = true; will do this for you automatically. This is useful when you define a char column as NOT NULL. +- Fixed UnixTimeStamp() bug - wasn't setting minutes and seconds properly. Patch from Agusti Fita i Borrell agusti#anglatecnic.com. +- Toni Tunkkari added patch for sybase dates. Problem with spaces in day part of date fixed. + +## 1.71 - 18 Jan 2002 + +- Sequence start id support. Now $conn->Gen_ID('seqname', 50) to start sequence from 50. +- CSV driver fix for selectlimit, from Andreas - akaiser#vocote.de. +- Gam3r spotted that a global variable was undefined in the session handler. +- Mssql date regex had error. Fixed - reported by Minh Hoang vb_user#yahoo.com. +- DBTimeStamp() and DBDate() now accept iso dates and unix timestamps. This means that the PostgreSQL handling of dates in GetInsertSQL() and GetUpdateSQL() can be removed. Also if these functions are passed '' or null or false, we return a SQL null. +- GetInsertSQL() and GetUpdateSQL() now accept a new parameter, $magicq to indicate whether quotes should be inserted based on magic quote settings - suggested by dj#4ict.com. +- Reformated docs slightly based on suggestions by Chris Small. + +## 1.65 - 28 Dec 2001 + +- Fixed borland_ibase class naming bug. +- Now instead of using $rs->fields[0] internally, we use reset($rs->fields) so that we are compatible with ADODB_FETCH_ASSOC mode. Reported by Nico S. +- Changed recordset constructor and _initrs() for oci8 so that it returns the field definitions even if no rows in the recordset. Reported by Rick Hickerson (rhickers#mv.mv.com). +- Improved support for postgresql in GetInsertSQL and GetUpdateSQL by "mike" mike#partner2partner.com and "Ryan Bailey" rebel#windriders.com + +## 1.64 - 20 Dec 2001 + +- Danny Milosavljevic added some patches for MySQL error handling and displaying default values. +- Fixed some ADODB_FETCH_BOTH inconsistencies in odbc and interbase. +- Added more tests to test suite to cover ADODB_FETCH_* and ADODB_ERROR_HANDLER. +- Added firebird (ibase) driver +- Added borland_ibase driver for interbase 6.5 + +## 1.63 - 13 Dec 2001 + +- Absolute to the adodb-lib.inc.php file not set properly. Fixed. + +## 1.62 - 11 Dec 2001 + +- Major speedup of ADOdb for low-end web sites by reducing the php code loading and compiling cycle. We conditionally compile not so common functions. Moved csv code to adodb-csvlib.inc.php to reduce adodb.inc.php parsing. This file is loaded only when the csv/proxy driver is used, or CacheExecute() is run. Also moved PageExecute(), GetSelectSQL() and GetUpdateSQL() core code to adodb-lib.inc.php. This reduced the 70K main adodb.inc.php file to 55K, and since at least 20K of the file is comments, we have reduced 50K of code in adodb.inc.php to 35K. There should be 35% reduction in memory and thus 35% speedup in compiling the php code for the main adodb.inc.php file. +- Highly tuned SelectLimit() for oci8 for massive speed improvements on large files. Selecting 20 rows starting from the 20,000th row of a table is now 7 times faster. Thx to Tomas V V Cox. +- Allow . and # in table definitions in GetInsertSQL and GetUpdateSQL. See ADODB_TABLE_REGEX constant. Thx to Ari Kuorikoski. +- Added ADODB_PREFETCH_ROWS constant, defaulting to 10\. This determines the number of records to prefetch in a SELECT statement. Only used by oci8. +- Added high portability Oracle class called oci8po. This uses ? for bind variables, and lower cases column names. +- Now all database drivers support $ADODB_FETCH_MODE, including interbase, ado, and odbc: ADODB_FETCH_NUM and ADODB_FETCH_ASSOC. ADODB_FETCH_BOTH is not fully implemented for all database drivers. + +## 1.61 - Nov 2001 +- Added PO_RecordCount() and PO_Insert_ID(). PO stands for portable. Pablo Roca [pabloroca#mvps.org] +- GenID now returns 0 if not available. Safer is that you should check $conn->hasGenID for availability. +- M'soft ADO we now correctly close recordset in _close() peterd#telephonetics.co.uk +- MSSQL now supports GenID(). It generates a 16-byte GUID from mssql newid() function. +- Changed ereg_replace to preg_replace in SelectLimit. This is a fix for mssql. Ereg doesn't support t or n! Reported by marino Carlos xaplo#postnuke-espanol.org +- Added $recordset->connection. This is the ADOConnection object for the recordset. Works with cached and normal recordsets. Surprisingly, this had no affect on performance! + +## 1.54 - 15 Nov 2001 + +- Fixed some more bugs in PageExecute(). I am getting sick of bug in this and will have to reconsider my QA here. The main issue is that I don't use PageExecute() and to check whether it is working requires a visual inspection of the html generated currently. It is possible to write a test script but it would be quite complicated :( +- More speedups of SelectLimit() for DB2, Oci8, access, vfp, mssql. + +## 1.53 - 7 Nov 2001 + +- Added support for ADODB_FETCH_ASSOC for ado and odbc drivers. +- Tuned GetRowAssoc(false) in postgresql and mysql. +- Stephen Van Dyke contributed ADOdb icon, accepted with some minor mods. +- Enabled Affected_Rows() for postgresql +- Speedup for Concat() using implode() - Benjamin Curtis ben_curtis#yahoo.com +- Fixed some more bugs in PageExecute() to prevent infinite loops + +## 1.52 - 5 Nov 2001 + +- Spelling error in CacheExecute() caused it to fail. $ql should be $sql in line 625! +- Added fixes for parsing [ and ] in GetUpdateSQL(). + +## 1.51 - 5 Nov 2001 + +- Oci8 SelectLimit() speedup by using OCIFetch(). +- Oci8 was mistakenly reporting errors when $db->debug = true. +- If a connection failed with ODBC, it was not correctly reported - fixed. +- _connectionID was inited to -1, changed to false. +- Added $rs->FetchRow(), to simplify API, ala PEAR DB +- Added PEAR DB compat mode, which is still faster than PEAR! See adodb-pear.inc.php. +- Removed postgres pconnect debugging statement. + +## 1.50 - 31 Oct 2001 + +- ADOdbConnection renamed to ADOConnection, and ADOdbFieldObject to ADOFieldObject. +- PageExecute() now checks for empty $rs correctly, and the errors in the docs on this subject have been fixed. +- odbc_error() does not return 6 digit error correctly at times. Implemented workaround. +- Added ADORecordSet_empty class. This will speedup INSERTS/DELETES/UPDATES because the return object created is much smaller. +- Added Prepare() to odbc, and oci8 (but doesn't work properly for oci8 still). +- Made pgsql a synonym for postgre7, and changed SELECT LIMIT to use OFFSET for compat with postgres 7.2. +- Revised adodb-cryptsession.php thanks to Ari. +- Set resources to false on _close, to force freeing of resources. +- Added adodb-errorhandler.inc.php, adodb-errorpear.inc.php and raiseErrorFn on Freek's urging. +- GetRowAssoc($toUpper=true): $toUpper added as default. +- Errors when connecting to a database were not captured formerly. Now we do it correctly. + +## 1.40 - 19 September 2001 + +- PageExecute() to implement page scrolling added. Code and idea by Iván Oliva. +- Some minor postgresql fixes. +- Added sequence support using GenID() for postgresql, oci8, mysql, interbase. +- Added UpdateBlob support for interbase (untested). +- Added encrypted sessions (see adodb-cryptsession.php). By Ari Kuorikoski + +## 1.31 - 21 August 2001 + +- Many bug fixes thanks to "GaM3R (Cameron)" . Some session changes due to Gam3r. +- Fixed qstr() to quote also. +- rs2html() now pretty printed. +- Jonathan Younger contributed the great idea GetUpdateSQL() and GetInsertSQL() which generates SQL to update and insert into a table from a recordset. Modify the recordset fields array, then can this function to generate the SQL (the SQL is not executed). +- Nicola Fankhauser found some bugs in date handling for mssql. +- Added minimal Oracle support for LOBs. Still under development. +- Added $ADODB_FETCH_MODE so you can control whether recordsets return arrays which are numeric, associative or both. This is a global variable you set. Currently only MySQL, Oci8, Postgres drivers support this. +- PostgreSQL properly closes recordsets now. Reported by several people. +- Added UpdateBlob() for Oracle. A hack to make it easier to save blobs. +- Oracle timestamps did not display properly. Fixed. + +## 1.20 - 6 June 2001 + +- Now Oracle can connect using tnsnames.ora or server and service name +- Extensive Oci8 speed optimizations. Oci8 code revised to support variable binding, and /*+ FIRST_ROWS */ hint. +- Worked around some 4.0.6 bugs in odbc_fetch_into(). +- Paolo S. Asioli paolo.asioli#libero.it suggested GetRowAssoc(). +- Escape quotes for oracle wrongly set to '. Now '' is used. +- Variable binding now works in ODBC also. +- Jumped to version 1.20 because I don't like 13 :-) + +## 1.12 - 6 June 2001 + +- Changed $ADODB_DIR to ADODB_DIR constant to plug a security loophole. +- Changed _close() to close persistent connections also. Prevents connection leaks. +- Major revision of oracle and oci8 drivers. Added OCI_RETURN_NULLS and OCI_RETURN_LOBS to OCIFetchInto(). BLOB, CLOB and VARCHAR2 recognition in MetaType() improved. MetaColumns() returns columns in correct sort order. +- Interbase timestamp input format was wrong. Fixed. + +## 1.11 - 20 May 2001 + +- Improved file locking for Windows. +- Probabilistic flushing of cache to avoid avalanche updates when cache timeouts. +- Cached recordset timestamp not saved in some scenarios. Fixed. + +## 1.10 - 19 May 2001 + +- Added caching. CacheExecute() and CacheSelectLimit(). +- Added csv driver. See [http://php.weblogs.com/ADODB_csv](http://php.weblogs.com/adodb_csv). +- Fixed SelectLimit(), SELECT TOP not working under certain circumstances. +- Added better Frontbase support of MetaTypes() by Frank M. Kromann. + +## 1.01 - 24 April 2001 + +- Fixed SelectLimit bug. not quoted properly. +- SelectLimit: SELECT TOP -1 * FROM TABLE not support by Microsoft. Fixed. +- GetMenu improved by glen.davies#cce.ac.nz to support multiple hilited items +- FetchNextObject() did not work with only 1 record returned. Fixed bug reported by $tim#orotech.net +- Fixed mysql field max_length problem. Fix suggested by Jim Nicholson (jnich#att.com) + +## 1.00 - 16 April 2001 + +- Given some brilliant suggestions on how to simplify ADOdb by akul. You no longer need to setup $ADODB_DIR yourself, and ADOLoadCode() is automatically called by ADONewConnection(), simplifying the startup code. +- FetchNextObject() added. Suggested by Jakub Marecek. This makes FetchObject() obsolete, as this is more flexible and powerful. +- Misc fixes to SelectLimit() to support Access (top must follow distinct) and Fields() in the array recordset. From Reinhard Balling. + +## 0.96 - 27 Mar 2001 + +- ADOConnection Close() did not return a value correctly. Thanks to akul#otamedia.com. +- When the horrible magic_quotes is enabled, back-slash () is changed to double-backslash (\). This doesn't make sense for Microsoft/Sybase databases. We fix this in qstr(). +- Fixed Sybase date problem in UnixDate() thanks to Toni Tunkkari. Also fixed MSSQL problem in UnixDate() - thanks to milhouse31#hotmail.com. +- MoveNext() moved to leaf classes for speed in MySQL/PostgreSQL. 10-15% speedup. +- Added null handling in bindInputArray in Execute() -- Ron Baldwin suggestion. +- Fixed some option tags. Thanks to john#jrmstudios.com. + +## 0.95 - 13 Mar 2001 + +- Added postgres7 database driver which supports LIMIT and other version 7 stuff in the future. +- Added SelectLimit to ADOConnection to simulate PostgreSQL's "select * from table limit 10 offset 3". Added helper function GetArrayLimit() to ADORecordSet. +- Fixed mysql metacolumns bug. Thanks to Freek Dijkstra (phpeverywhere#macfreek.com). +- Also many PostgreSQL changes by Freek. He almost rewrote the whole PostgreSQL driver! +- Added fix to input parameters in Execute for non-strings by Ron Baldwin. +- Added new metatype, X for TeXt. Formerly, metatype B for Blob also included text fields. Now 'B' is for binary/image data. 'X' for textual data. +- Fixed $this->GetArray() in GetRows(). +- Oracle and OCI8: 1st parameter is always blank -- now warns if it is filled. +- Now _hasLimit_ and _hasTop_ added to indicate whether SELECT * FROM TABLE LIMIT 10 or SELECT TOP 10 * FROM TABLE are supported. + +## 0.94 - 04 Feb 2001 + +- Added ADORecordSet::GetRows() for compatibility with Microsoft ADO. Synonym for GetArray(). +- Added new metatype 'R' to represent autoincrement numbers. +- Added ADORecordSet.FetchObject() to return a row as an object. +- Finally got a Linux box to test PostgreSql. Many fixes. +- Fixed copyright misspellings in 0.93. +- Fixed mssql MetaColumns type bug. +- Worked around odbc bug in PHP4 for sessions. +- Fixed many documentation bugs (affected_rows, metadatabases, qstr). +- Fixed MySQL timestamp format (removed comma). +- Interbase driver did not call ibase_pconnect(). Fixed. + +## 0.93 - 18 Jan 2002 + +- Fixed GetMenu bug. +- Simplified Interbase commit and rollback. +- Default behaviour on closing a connection is now to rollback all active transactions. +- Added field object handling for array recordset for future XML compatibility. +- Added arr2html() to convert array to html table. + +## 0.92 - 2 Jan 2002 + +- Interbase Commit and Rollback should be working again. +- Changed initialisation of ADORecordSet. This is internal and should not affect users. We are doing this to support cached recordsets in the future. +- Implemented ADORecordSet_array class. This allows you to simulate a database recordset with an array. +- Added UnixDate() and UnixTimeStamp() to ADORecordSet. + +## 0.91 - 21 Dec 2000 + +- Fixed ODBC so ErrorMsg() is working. +- Worked around ADO unrecognised null (0x1) value problem in COM. +- Added Sybase support for FetchField() type +- Removed debugging code and unneeded html from various files +- Changed to javadoc style comments to adodb.inc.php. +- Added maxsql as synonym for mysqlt +- Now ODBC downloads first 8K of blob by default + +## 0.90 - 15 Nov 2000 + +- Lots of testing of Microsoft ADO. Should be more stable now. +- Added $ADODB_COUNTREC. Set to false for high speed selects. +- Added Sybase support. Contributed by Toni Tunkkari (toni.tunkkari#finebyte.com). Bug in Sybase API: GetFields is unable to determine date types. +- Changed behaviour of RecordSet.GetMenu() to support size parameter (listbox) properly. +- Added emptyDate and emptyTimeStamp to RecordSet class that defines how to represent empty dates. +- Added MetaColumns($table) that returns an array of ADOFieldObject's listing the columns of a table. +- Added transaction support for PostgresSQL -- thanks to "Eric G. Werk" egw#netguide.dk. +- Added adodb-session.php for session support. + +## 0.80 - 30 Nov 2000 + +- Added support for charSet for interbase. Implemented MetaTables for most databases. PostgreSQL more extensively tested. + +## 0.71 - 22 Nov 2000 + +- Switched from using require_once to include/include_once for backward compatability with PHP 4.02 and earlier. + +## 0.70 - 15 Nov 2000 + +- Calls by reference have been removed (call_time_pass_reference=Off) to ensure compatibility with future versions of PHP, except in Oracle 7 driver due to a bug in php_oracle.dll. +- PostgreSQL database driver contributed by Alberto Cerezal (acerezalp#dbnet.es). +- Oci8 driver for Oracle 8 contributed by George Fourlanos (fou#infomap.gr). +- Added _mysqlt_ database driver to support MySQL 3.23 which has transaction support. +- Oracle default date format (DD-MON-YY) did not match ADOdb default date format (which is YYYY-MM-DD). Use ALTER SESSION to force the default date. +- Error message checking is now included in test suite. +- MoveNext() did not check EOF properly -- fixed. + +## 0.60 - 8 Nov 2000 + +- Fixed some constructor bugs in ODBC and ADO. Added ErrorNo function to ADOConnection class. + +## 0.51 - 18 Oct 2000 + +- Fixed some interbase bugs. + +## 0.50 - 16 Oct 2000 + +- Interbase commit/rollback changed to be compatible with PHP 4.03\. +- CommitTrans( ) will now return true if transactions not supported. +- Conversely RollbackTrans( ) will return false if transactions not supported. + +## 0.46 - 12 Oct 2000 + +- Many Oracle compatibility issues fixed. + +## 0.40 - 26 Sept 2000 + +- Many bug fixes +- Now Code for BeginTrans, CommitTrans and RollbackTrans is working. So is the Affected_Rows and Insert_ID. Added above functions to test.php. +- ADO type handling was busted in 0.30\. Fixed. +- Generalised Move( ) so it works will all databases, including ODBC. + +## 0.30 - 18 Sept 2000 + +- Renamed ADOLoadDB to ADOLoadCode. This is clearer. +- Added BeginTrans, CommitTrans and RollbackTrans functions. +- Added Affected_Rows() and Insert_ID(), _affectedrows() and _insertID(), ListTables(), ListDatabases(), ListColumns(). +- Need to add New_ID() and hasInsertID and hasAffectedRows, autoCommit + +## 0.20 - 12 Sept 2000 + +- Added support for Microsoft's ADO. +- Added new field to ADORecordSet -- canSeek +- Added new parameter to _fetch($ignore_fields = false). Setting to true will not update fields array for faster performance. +- Added new field to ADORecordSet/ADOConnection -- dataProvider to indicate whether a class is derived from odbc or ado. +- Changed class ODBCFieldObject to ADOFieldObject -- not documented currently. +- Added benchmark.php and testdatabases.inc.php to the test suite. +- Added to ADORecordSet FastForward( ) for future high speed scrolling. Not documented. +- Realised that ADO's Move( ) uses relative positioning. ADOdb uses absolute. + +## 0.10 - 9 Sept 2000 + +- First release diff --git a/ehcp/adodb5/docs/changelog_v3.x.md b/ehcp/adodb5/docs/changelog_v3.x.md new file mode 100644 index 0000000..ee2bded --- /dev/null +++ b/ehcp/adodb5/docs/changelog_v3.x.md @@ -0,0 +1,242 @@ +# ADOdb old Changelog - v3.x + +See the [Current Changelog](changelog.md). +Older changelogs: +[v2.x](changelog_v2.x.md). + + +## 3.94 - 11 Oct 2003 + +- Create trigger in datadict-oci8.inc.php did not work, because all cr/lf's must be removed. +- ErrorMsg()/ErrorNo() did not work for many databases when logging enabled. Fixed. +- Removed global variable $ADODB_LOGSQL as it does not work properly with multiple connections. +- Added SQLDate support for sybase. Thx to Chris Phillipson +- Postgresql checking of pgsql resultset resource was incorrect. Fix by Bharat Mediratta bharat#menalto.com. Same patch applied to _insertid and _affectedrows for adodb-postgres64.inc.php. +- Added support for NConnect for postgresql. +- Added Sybase data dict support. Thx to Chris Phillipson +- Extensive improvements in $perf->UI(), eg. Explain now opens in new window, we show scripts which call sql, etc. +- Perf Monitor UI works with magic quotes enabled. +- rsPrefix was declared twice. Removed. +- Oci8 stored procedure support, eg. "begin func(); end;" was incorrect in _query. Fixed. +- Tiraboschi Massimiliano contributed italian language file. +- Fernando Ortiz, fortiz#lacorona.com.mx, contributed informix performance monitor. +- Added _varchar (varchar arrays) support for postgresql. Reported by PREVOT Stéphane. + + +## 3.92 - 22 Sept 2003 + +- Added GetAssoc and CacheGetAssoc to connection object. +- Removed TextMax and CharMax functions from adodb.inc.php. +- HasFailedTrans() returned false when trans failed. Fixed. +- Moved perf driver classes into adodb/perf/*.php. +- Misc improvements to performance monitoring, including UI(). +- RETVAL in mssql Parameter(), we do not append @ now. +- Added Param($name) to connection class, returns '?' or ":$name", for defining bind parameters portably. +- LogSQL traps affected_rows() and saves its value properly now. Also fixed oci8 _stmt and _affectedrows() bugs. +- Session code timestamp check for oci8 works now. Formerly default NLS_DATE_FORMAT stripped off time portion. Thx to Tony Blair (tonanbarbarian#hotmail.com). Also added new $conn->datetime field to oci8, controls whether MetaType() returns 'D' ($this->datetime==false) or 'T' ($this->datetime == true) for DATE type. +- Fixed bugs in adodb-cryptsession.inc.php and adodb-session-clob.inc.php. +- Fixed misc bugs in adodb_key_exists, GetInsertSQL() and GetUpdateSQL(). +- Tuned include_once handling to reduce file-system checking overhead. + +## 3.91 - 9 Sept 2003 + +- Only released to InterAkt +- Added LogSQL() for sql logging and $ADODB_NEWCONNECTION to override factory for driver instantiation. +- Added IfNull($field,$ifNull) function, thx to johnwilk#juno.com +- Added portable substr support. +- Now rs2html() has new parameter, $echo. Set to false to return $html instead of echoing it. + +## 3.90 - 5 Sept 2003 + +- First beta of performance monitoring released. +- MySQL supports MetaTable() masking. +- Fixed key_exists() bug in adodb-lib.inc.php +- Added sp_executesql Prepare() support to mssql. +- Added bind support to db2. +- Added swedish language file - Christian Tiberg" christian#commsoft.nu +- Bug in drop index for mssql data dict fixed. Thx to Gert-Rainer Bitterlich. +- Left join setting for oci8 was wrong. Thx to johnwilk#juno.com + +## 3.80 - 27 Aug 2003 + +- Patch for PHP 4.3.3 cached recordset csv2rs() fread loop incompatibility. +- Added matching mask for MetaTables. Only for oci8, mssql and postgres currently. +- Rewrite of "oracle" driver connection code, merging with "oci8", by Gaetano. +- Added better debugging for Smart Transactions. +- Postgres DBTimeStamp() was wrongly using TO_DATE. Changed to TO_TIMESTAMP. +- ADODB_FETCH_CASE check pushed to ADONewConnection to allow people to define it after including adodb.inc.php. +- Added portugese (brazilian) to languages. Thx to "Levi Fukumori". +- Removed arg3 parameter from Execute/SelectLimit/Cache* functions. +- Execute() now accepts 2-d array as $inputarray. Also changed docs of fnExecute() to note change in sql query counting with 2-d arrays. +- Added MONEY to MetaType in PostgreSQL. +- Added more debugging output to CacheFlush(). + +## 3.72 - 9 Aug 2003 + +- Added qmagic($str), which is a qstr($str) that auto-checks for magic quotes and does the right thing... +- Fixed CacheFlush() bug - Thx to martin#gmx.de +- Walt Boring contributed MetaForeignKeys for postgres7. +- _fetch() called _BlobDecode() wrongly in interbase. Fixed. +- adodb_time bug fixed with dates after 2038 fixed by Jason Pell. http://phplens.com/lens/lensforum/msgs.php?id=6980 + +## 3.71 - 4 Aug 2003 + +- The oci8 driver, MetaPrimaryKeys() did not check the owner correctly when $owner == false. +- Russian language file contributed by "Cyrill Malevanov" cyrill#malevanov.spb.ru. +- Spanish language file contributed by "Horacio Degiorgi" horaciod#codigophp.com. +- Error handling in oci8 bugfix - if there was an error in Execute(), then when calling ErrorNo() and/or ErrorMsg(), the 1st call would return the error, but the 2nd call would return no error. +- Error handling in odbc bugfix. ODBC would always return the last error, even if it happened 5 queries ago. Now we reset the errormsg to '' and errorno to 0 everytime before CacheExecute() and Execute(). + +## 3.70 - 29 July 2003 + +- Added new SQLite driver. Tested on PHP 4.3 and PHP 5. +- Added limited "sapdb" driver support - mainly date support. +- The oci8 driver did not identify NUMBER with no defined precision correctly. +- Added ADODB_FORCE_NULLS, if set, then PHP nulls are converted to SQL nulls in GetInsertSQL/GetUpdateSQL. +- DBDate() and DBTimeStamp() format for postgresql had problems. Fixed. +- Added tableoptions to ChangeTableSQL(). Thx to Mike Benoit. +- Added charset support to postgresql. Thx to Julian Tarkhanov. +- Changed OS check for MS-Windows to prevent confusion with darWIN (MacOS) +- Timestamp format for db2 was wrong. Changed to yyyy-mm-dd-hh.mm.ss.nnnnnn. +- adodb-cryptsession.php includes wrong. Fixed. +- Added MetaForeignKeys(). Supported by mssql, odbc_mssql and oci8. +- Fixed some oci8 MetaColumns/MetaPrimaryKeys bugs. Thx to Walt Boring. +- adodb_getcount() did not init qryRecs to 0\. Missing "WHERE" clause checking in GetUpdateSQL fixed. Thx to Sebastiaan van Stijn. +- Added support for only 'VIEWS' and "TABLES" in MetaTables. From Walt Boring. +- Upgraded to adodb-xmlschema.inc.php 0.0.2. +- NConnect for mysql now returns value. Thx to Dennis Verspuij. +- ADODB_FETCH_BOTH support added to interbase/firebird. +- Czech language file contributed by Kamil Jakubovic jake#host.sk. +- PostgreSQL BlobDecode did not use _connectionID properly. Thx to Juraj Chlebec. +- Added some new initialization stuff for Informix. Thx to "Andrea Pinnisi" pinnisi#sysnet.it +- ADODB_ASSOC_CASE constant wrong in sybase _fetch(). Fixed. + +## 3.60 - 16 June 2003 + +- We now SET CONCAT_NULL_YIELDS_NULL OFF for odbc_mssql driver to be compat with mssql driver. +- The property $emptyDate missing from connection class. Also changed 1903 to constant (TIMESTAMP_FIRST_YEAR=100). Thx to Sebastiaan van Stijn. +- ADOdb speedup optimization - we now return all arrays by reference. +- Now DBDate() and DBTimeStamp() now accepts the string 'null' as a parameter. Suggested by vincent. +- Added GetArray() to connection class. +- Added not_null check in informix metacolumns(). +- Connection parameters for postgresql did not work correctly when port was defined. +- DB2 is now a tested driver, making adodb 100% compatible. Extensive changes to odbc driver for DB2, including implementing serverinfo() and SQLDate(), switching to SQL_CUR_USE_ODBC as the cursor mode, and lastAffectedRows and SelectLimit() fixes. +- The odbc driver's FetchField() field names did not obey ADODB_ASSOC_CASE. Fixed. +- Some bugs in adodb_backtrace() fixed. +- Added "INT IDENTITY" type to adorecordset::MetaType() to support odbc_mssql properly. +- MetaColumns() for oci8, mssql, odbc revised to support scale. Also minor revisions to odbc MetaColumns() for vfp and db2 compat. +- Added unsigned support to mysql datadict class. Thx to iamsure. +- Infinite loop in mssql MoveNext() fixed when ADODB_FETCH_ASSOC used. Thx to Josh R, Night_Wulfe#hotmail.com. +- ChangeTableSQL contributed by Florian Buzin. +- The odbc_mssql driver now sets CONCAT_NULL_YIELDS_NULL OFF for compat with mssql driver. + +## 3.50 - 19 May 2003 + +- Fixed mssql compat with FreeTDS. FreeTDS does not implement mssql_fetch_assoc(). +- Merged back connection and recordset code into adodb.inc.php. +- ADOdb sessions using oracle clobs contributed by achim.gosse#ddd.de. See adodb-session-clob.php. +- Added /s modifier to preg_match everywhere, which ensures that regex does not stop at /n. Thx Pao-Hsi Huang. +- Fixed error in metacolumns() for mssql. +- Added time format support for SQLDate. +- Image => B added to metatype. +- MetaType now checks empty($this->blobSize) instead of empty($this). +- Datadict has beta support for informix, sybase (mapped to mssql), db2 and generic (which is a fudge). +- BlobEncode for postgresql uses pg_escape_bytea, if available. Needed for compat with 7.3. +- Added $ADODB_LANG, to support multiple languages in MetaErrorMsg(). +- Datadict can now parse table definition as declarative text. +- For DataDict, oci8 autoincrement trigger missing semi-colon. Fixed. +- For DataDict, when REPLACE flag enabled, drop sequence in datadict for autoincrement field in postgres and oci8.s +- Postgresql defaults to template1 database if no database defined in connect/pconnect. +- We now clear _resultid in postgresql if query fails. + +## 3.40 - 19 May 2003 + +- Added insert_id for odbc_mssql. +- Modified postgresql UpdateBlobFile() because it did not work in safe mode. +- Now connection object is passed to raiseErrorFn as last parameter. Needed by StartTrans(). +- Added StartTrans() and CompleteTrans(). It is recommended that you do not modify transOff, but use the above functions. +- oci8po now obeys ADODB_ASSOC_CASE settings. +- Added virtualized error codes, using PEAR DB equivalents. Requires you to manually include adodb-error.inc.php yourself, with MetaError() and MetaErrorMsg($errno). +- GetRowAssoc for mysql and pgsql were flawed. Fix by Ross Smith. +- Added to datadict types I1, I2, I4 and I8\. Changed datadict type 'T' to map to timestamp instead of datetime for postgresql. +- Error handling in ExecuteSQLArray(), adodb-datadict.inc.php did not work. +- We now auto-quote postgresql connection parameters when building connection string. +- Added session expiry notification. +- We now test with odbc mysql - made some changes to odbc recordset constructor. +- MetaColumns now special cases access and other databases for odbc. + +## 3.31 - 17 March 2003 + +- Added row checking for _fetch in postgres. +- Added Interval type to MetaType for postgres. +- Remapped postgres driver to call postgres7 driver internally. +- Adorecordset_array::getarray() did not return array when nRows >= 0. +- Postgresql: at times, no error message returned by pg_result_error() but error message returned in pg_last_error(). Recoded again. +- Interbase blob's now use chunking for updateblob. +- Move() did not set EOF correctly. Reported by Jorma T. +- We properly support mysql timestamp fields when we are creating mysql tables using the data-dict interface. +- Table regex includes backticks character now. + +## 3.30 - 3 March 2003 + +- Added $ADODB_EXTENSION and $ADODB_COMPAT_FETCH constant. +- Made blank1stItem configurable using syntax "value:text" in GetMenu/GetMenu2. Thx to Gabriel Birke. +- Previously ADOdb differed from the Microsoft standard because it did not define what to set $this->fields when EOF was reached. Now at EOF, ADOdb sets $this->fields to false for all databases, which is consist with Microsoft's implementation. Postgresql and mysql have always worked this way (in 3.11 and earlier). If you are experiencing compatibility problems (and you are not using postgresql nor mysql) on upgrading to 3.30, try setting the global variables $ADODB_COUNTRECS = true (which is the default) and $ADODB_FETCH_COMPAT = true (this is a new global variable). +- We now check both pg_result_error and pg_last_error as sometimes pg_result_error does not display anything. Iman Mayes +- We no longer check for magic quotes gpc in Quote(). +- Misc fixes for table creation in adodb-datadict.inc.php. Thx to iamsure. +- Time calculations use adodb_time library for all negative timestamps due to problems in Red Hat 7.3 or later. Formerly, only did this for Windows. +- In mssqlpo, we now check if $sql in _query is a string before we change || to +. This is to support prepared stmts. +- Move() and MoveLast() internals changed to support to support EOF and $this->fields change. +- Added ADODB_FETCH_BOTH support to mssql. Thx to Angel Fradejas afradejas#mediafusion.es +- We now check if link resource exists before we run mysql_escape_string in qstr(). +- Before we flock in csv code, we check that it is not a http url. + +## 3.20 - 17 Feb 2003 + +- Added new Data Dictionary classes for creating tables and indexes. Warning - this is very much alpha quality code. The API can still change. See adodb/tests/test-datadict.php for more info. +- We now ignore $ADODB_COUNTRECS for mysql, because PHP truncates incomplete recordsets when mysql_unbuffered_query() is called a second time. +- Now postgresql works correctly when $ADODB_COUNTRECS = false. +- Changed _adodb_getcount to properly support SELECT DISTINCT. +- Discovered that $ADODB_COUNTRECS=true has some problems with prepared queries - suspect PHP bug. +- Now GetOne and GetRow run in $ADODB_COUNTRECS=false mode for better performance. +- Added support for mysql_real_escape_string() and pg_escape_string() in qstr(). +- Added an intermediate variable for mysql _fetch() and MoveNext() to store fields, to prevent overwriting field array with boolean when mysql_fetch_array() returns false. +- Made arrays for getinsertsql and getupdatesql case-insensitive. Suggested by Tim Uckun" tim#diligence.com + +## 3.11 - 11 Feb 2003 + +- Added check for ADODB_NEVER_PERSIST constant in PConnect(). If defined, then PConnect() will actually call non-persistent Connect(). +- Modified interbase to properly work with Prepare(). +- Added $this->ibase_timefmt to allow you to change the date and time format. +- Added support for $input_array parameter in CacheFlush(). +- Added experimental support for dbx, which was then removed when i found that it was slower than using native calls. +- Added MetaPrimaryKeys for mssql and ibase/firebird. +- Added new $trim parameter to GetCol and CacheGetCol +- Uses updated adodb-time.inc.php 0.06. + +## 3.10 - 27 Jan 2003 + +- Added adodb_date(), adodb_getdate(), adodb_mktime() and adodb-time.inc.php. +- For interbase, added code to handle unlimited number of bind parameters. From Daniel Hasan daniel#hasan.cl. +- Added BlobDecode and UpdateBlob for informix. Thx to Fernando Ortiz. +- Added constant ADODB_WINDOWS. If defined, means that running on Windows. +- Added constant ADODB_PHPVER which stores php version as a hex num. Removed $ADODB_PHPVER variable. +- Felho Bacsi reported a minor white-space regular expression problem in GetInsertSQL. +- Modified ADO to use variant to store _affectedRows +- Changed ibase to use base class Replace(). Modified base class Replace() to support ibase. +- Changed odbc to auto-detect when 0 records returned is wrong due to bad odbc drivers. +- Changed mssql to use datetimeconvert ini setting only when 4.30 or later (does not work in 4.23). +- ExecuteCursor($stmt, $cursorname, $params) now accepts a new $params array of additional bind parameters -- William Lovaton walovaton#yahoo.com.mx. +- Added support for sybase_unbuffered_query if ADODB_COUNTRECS == false. Thx to chuck may. +- Fixed FetchNextObj() bug. Thx to Jorma Tuomainen. +- We now use SCOPE_IDENTITY() instead of @@IDENTITY for mssql - thx to marchesini#eside.it +- Changed postgresql movenext logic to prevent illegal row number from being passed to pg_fetch_array(). +- Postgresql initrs bug found by "Bogdan RIPA" bripa#interakt.ro $f1 accidentally named $f + +## 3.00 - 6 Jan 2003 + +- Fixed adodb-pear.inc.php syntax error. +- Improved _adodb_getcount() to use SELECT COUNT(*) FROM ($sql) for languages that accept it. +- Fixed _adodb_getcount() caching error. +- Added sql to retrive table and column info for odbc_mssql. diff --git a/ehcp/adodb5/docs/changelog_v4+5.md b/ehcp/adodb5/docs/changelog_v4+5.md new file mode 100644 index 0000000..c6a9c10 --- /dev/null +++ b/ehcp/adodb5/docs/changelog_v4+5.md @@ -0,0 +1,109 @@ +## 4.990/5.05 - 11 Jul 2008 + +- Added support for multiple recordsets in mysqli Geisel Sierote . See http://phplens.com/lens/lensforum/msgs.php?id=15917 +- Malcolm Cook added new Reload() function to Active Record. See http://phplens.com/lens/lensforum/msgs.php?id=17474 +- Thanks Zoltan Monori [monzol#fotoprizma.hu] for bug fixes in iterator, SelectLimit, GetRandRow, etc. +- Under heavy loads, the performance monitor for oci8 disables Ixora views. +- Fixed sybase driver SQLDate to use str_replace(). Also for adodb5, changed sybase driver UnixDate and UnixTimeStamp calls to static. +- Changed oci8 lob handler to use & reference $this->_refLOBs[$numlob]['VAR'] = &$var. +- We now strtolower the get_class() function in PEAR::isError() for php5 compat. +- CacheExecute did not retrieve cache recordsets properly for 5.04 (worked in 4.98). Fixed. +- New ADODB_Cache_File class for file caching defined in adodb.inc.php. +- Farsi language file contribution by Peyman Hooshmandi Raad (phooshmand#gmail.com) +- New API for creating your custom caching class which is stored in $ADODB_CACHE: + ``` +include "/path/to/adodb.inc.php"; +$ADODB_CACHE_CLASS = 'MyCacheClass'; + +class MyCacheClass extends ADODB_Cache_File +{ + function writecache($filename, $contents,$debug=false){...} + function &readcache($filename, &$err, $secs2cache, $rsClass){ ...} + : +} + +$DB = NewADOConnection($driver); +$DB->Connect(...); ## MyCacheClass created here and stored in $ADODB_CACHE global variable. + +$data = $rs->CacheGetOne($sql); ## MyCacheClass is used here for caching... + ``` +- Memcache supports multiple pooled hosts now. Only if none of the pooled servers can be contacted will a connect error be generated. Usage example below: + ``` +$db = NewADOConnection($driver); +$db->memCache = true; /// should we use memCache instead of caching in files +$db->memCacheHost = array($ip1, $ip2, $ip3); /// $db->memCacheHost = $ip1; still works +$db->memCachePort = 11211; /// this is default memCache port +$db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + +$db->Connect(...); +$db->CacheExecute($sql); + ``` + +## 4.98/5.04 - 13 Feb 2008 + +- Fixed adodb_mktime problem which causes a performance bottleneck in $hrs. +- Added mysqli support to adodb_getcount(). +- Removed MYSQLI_TYPE_CHAR from MetaType(). + +## 4.97/5.03 - 22 Jan 2008 + +- Active Record: $ADODB_ASSOC_CASE=1 did not work properly. Fixed. +- Modified Fields() in recordset class to support display null fields in FetchNextObject(). +- In ADOdb5, active record implementation, we now support column names with spaces in them - we autoconvert the spaces to _ using __set(). Thx Daniel Cook. http://phplens.com/lens/lensforum/msgs.php?id=17200 +- Removed $arg3 from mysqli SelectLimit. See http://phplens.com/lens/lensforum/msgs.php?id=16243. Thx Zsolt Szeberenyi. +- Changed oci8 FetchField, which returns the max_length of BLOB/CLOB/NCLOB as 4000 (incorrectly) to -1. +- CacheExecute would sometimes return an error on Windows if it was unable to lock the cache file. This is harmless and has been changed to a warning that can be ignored. Also adodb_write_file() code revised. +- ADOdb perf code changed to only log sql if execution time >= 0.05 seconds. New $ADODB_PERF_MIN variable holds min sql timing. Any SQL with timing value below this and is not causing an error is not logged. +- Also adodb_backtrace() now traces 1 level deeper as sometimes actual culprit function is not displayed. +- Fixed a group by problem with adodb_getcount() for db's which are not postgres/oci8 based. +- Changed mssql driver Parameter() from SQLCHAR to SQLVARCHAR: case 'string': $type = SQLVARCHAR; break. +- Problem with mssql driver in php5 (for adodb 5.03) because some functions are not static. Fixed. + +## 4.96/5.02 - 24 Sept 2007 + +ADOdb perf for oci8 now has non-table-locking code when clearing the sql. Slower but better transparency. Added in 4.96a and 5.02a. +Fix adodb count optimisation. Preg_match did not work properly. Also rewrote the ORDER BY stripping code in _adodb_getcount(), adodb-lib.inc.php. +SelectLimit for oci8 not optimal for large recordsets when offset=0. Changed $nrows check. +Active record optimizations. Added support for assoc arrays in Set(). +Now GetOne returns null if EOF (no records found), and false if error occurs. Use ErrorMsg()/ErrorNo() to get the error. +Also CacheGetRow and CacheGetCol will return false if error occurs, or empty array() if EOF, just like GetRow and GetCol. +Datadict now allows changing of types which are not resizable, eg. VARCHAR to TEXT in ChangeTableSQL. -- Mateo Tibaquirá +Added BIT data type support to adodb-ado.inc.php and adodb-ado5.inc.php. +Ldap driver did not return actual ldap error messages. Fixed. +Implemented GetRandRow($sql, $inputarr). Optimized for Oci8. +Changed adodb5 active record to use static SetDatabaseAdapter() and removed php4 constructor. Bas van Beek bas.vanbeek#gmail.com. +Also in adodb5, changed adodb-session2 to use static function declarations in class. Thx Daniel Berlin. +Added "Clear SQL Log" to bottom of Performance screen. +Sessions2 code echo'ed directly to the screen in debug mode. Now uses ADOConnection::outp(). +In mysql/mysqli, qstr(null) will return the string "null" instead of empty quoted string "''". +postgresql optimizeTable in perf-postgres.inc.php added by Daniel Berlin (mail#daniel-berlin.de) +Added 5.2.1 compat code for oci8. +Changed @@identity to SCOPE_IDENTITY() for multiple mssql drivers. Thx Stefano Nari. +Code sanitization introduced in 4.95 caused problems in European locales (as float 3.2 was typecast to 3,2). Now we only sanitize if is_numeric fails. +Added support for customizing ADORecordset_empty using $this->rsPrefix.'empty'. By Josh Truwin. +Added proper support for ALterColumnSQL for Postgresql in datadict code. Thx. Josh Truwin. +Added better support for MetaType() in mysqli when using an array recordset. +Changed parser for pgsql error messages in adodb-error.inc.php to case-insensitive regex. + +## 4.95/5.01 - 17 May 2007 + +CacheFlush debug outp() passed in invalid parameters. Fixed. +Added Thai language file for adodb. Thx Trirat Petchsingh rosskouk#gmail.com +and Marcos Pont +Added zerofill checking support to MetaColumns for mysql and mysqli. +CacheFlush no longer deletes all files/directories. Only *.cache files +deleted. +DB2 timestamp format changed to var $fmtTimeStamp = +"'Y-m-d-H:i:s'"; +Added some code sanitization to AutoExecute in adodb-lib.inc.php. +Due to typo, all connections in adodb-oracle.inc.php would become +persistent, even non-persistent ones. Fixed. +Oci8 DBTimeStamp uses 24 hour time for input now, so you can perform string +comparisons between 2 DBTimeStamp values. +Some PHP4.4 compat issues fixed in adodb-session2.inc.php +For ADOdb 5.01, fixed some adodb-datadict.inc.php MetaType compat issues +with PHP5. +The $argHostname was wiped out in adodb-ado5.inc.php. Fixed. +Adodb5 version, added iterator support for adodb_recordset_empty. +Adodb5 version,more error checking code now will use exceptions if +available. diff --git a/ehcp/adodb5/docs/changelog_v4.x.md b/ehcp/adodb5/docs/changelog_v4.x.md new file mode 100644 index 0000000..84bdd8a --- /dev/null +++ b/ehcp/adodb5/docs/changelog_v4.x.md @@ -0,0 +1,722 @@ +# ADOdb old Changelog - v4.x + +See the [Current Changelog](changelog.md). +Older changelogs: +[v3.x](changelog_v3.x.md), +[v2.x](changelog_v2.x.md). + + +## 4.990 - 11 Jul 2008 + +- Added support for multiple recordsets in mysqli Geisel Sierote . See http://phplens.com/lens/lensforum/msgs.php?id=15917 +- Malcolm Cook added new Reload() function to Active Record. See http://phplens.com/lens/lensforum/msgs.php?id=17474 +- Thanks Zoltan Monori [monzol#fotoprizma.hu] for bug fixes in iterator, SelectLimit, GetRandRow, etc. +- Under heavy loads, the performance monitor for oci8 disables Ixora views. +- Fixed sybase driver SQLDate to use str_replace(). Also for adodb5, changed sybase driver UnixDate and UnixTimeStamp calls to static. +- Changed oci8 lob handler to use & reference $this->_refLOBs[$numlob]['VAR'] = &$var. +- We now strtolower the get_class() function in PEAR::isError() for php5 compat. +- CacheExecute did not retrieve cache recordsets properly for 5.04 (worked in 4.98). Fixed. +- New ADODB_Cache_File class for file caching defined in adodb.inc.php. +- Farsi language file contribution by Peyman Hooshmandi Raad (phooshmand#gmail.com) +- New API for creating your custom caching class which is stored in $ADODB_CACHE: + ``` +include "/path/to/adodb.inc.php"; +$ADODB_CACHE_CLASS = 'MyCacheClass'; + +class MyCacheClass extends ADODB_Cache_File +{ + function writecache($filename, $contents,$debug=false){...} + function &readcache($filename, &$err, $secs2cache, $rsClass){ ...} + : +} + +$DB = NewADOConnection($driver); +$DB->Connect(...); ## MyCacheClass created here and stored in $ADODB_CACHE global variable. + +$data = $rs->CacheGetOne($sql); ## MyCacheClass is used here for caching... +``` +- Memcache supports multiple pooled hosts now. Only if none of the pooled servers can be contacted will a connect error be generated. Usage example below: + ``` +$db = NewADOConnection($driver); +$db->memCache = true; /// should we use memCache instead of caching in files +$db->memCacheHost = array($ip1, $ip2, $ip3); /// $db->memCacheHost = $ip1; still works +$db->memCachePort = 11211; /// this is default memCache port +$db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + +$db->Connect(...); +$db->CacheExecute($sql); +``` + +## 4.98 - 13 Feb 2008 + +- Fixed adodb_mktime problem which causes a performance bottleneck in $hrs. +- Added mysqli support to adodb_getcount(). +- Removed MYSQLI_TYPE_CHAR from MetaType(). + +## 4.97 - 22 Jan 2008 + +- Active Record: $ADODB_ASSOC_CASE=1 did not work properly. Fixed. +- Modified Fields() in recordset class to support display null fields in FetchNextObject(). +- In ADOdb5, active record implementation, we now support column names with spaces in them - we autoconvert the spaces to `_` using `__set()`. Thx Daniel Cook. http://phplens.com/lens/lensforum/msgs.php?id=17200 +- Removed $arg3 from mysqli SelectLimit. See http://phplens.com/lens/lensforum/msgs.php?id=16243. Thx Zsolt Szeberenyi. +- Changed oci8 FetchField, which returns the max_length of BLOB/CLOB/NCLOB as 4000 (incorrectly) to -1. +- CacheExecute would sometimes return an error on Windows if it was unable to lock the cache file. This is harmless and has been changed to a warning that can be ignored. Also adodb_write_file() code revised. +- ADOdb perf code changed to only log sql if execution time >= 0.05 seconds. New $ADODB_PERF_MIN variable holds min sql timing. Any SQL with timing value below this and is not causing an error is not logged. +- Also adodb_backtrace() now traces 1 level deeper as sometimes actual culprit function is not displayed. +- Fixed a group by problem with adodb_getcount() for db's which are not postgres/oci8 based. +- Changed mssql driver Parameter() from SQLCHAR to SQLVARCHAR: case 'string': $type = SQLVARCHAR; break. +- Problem with mssql driver in php5 (for adodb 5.03) because some functions are not static. Fixed. + +## 4.96 - 24 Sept 2007 + +- ADOdb perf for oci8 now has non-table-locking code when clearing the sql. Slower but better transparency. Added in 4.96a and 5.02a. +- Fix adodb count optimisation. Preg_match did not work properly. Also rewrote the ORDER BY stripping code in _adodb_getcount(), adodb-lib.inc.php. +- SelectLimit for oci8 not optimal for large recordsets when offset=0. Changed $nrows check. +- Active record optimizations. Added support for assoc arrays in Set(). +- Now GetOne returns null if EOF (no records found), and false if error occurs. Use ErrorMsg()/ErrorNo() to get the error. +- Also CacheGetRow and CacheGetCol will return false if error occurs, or empty array() if EOF, just like GetRow and GetCol. +- Datadict now allows changing of types which are not resizable, eg. VARCHAR to TEXT in ChangeTableSQL. -- Mateo Tibaquirá +- Added BIT data type support to adodb-ado.inc.php and adodb-ado5.inc.php. +- Ldap driver did not return actual ldap error messages. Fixed. +- Implemented GetRandRow($sql, $inputarr). Optimized for Oci8. +- Changed adodb5 active record to use static SetDatabaseAdapter() and removed php4 constructor. Bas van Beek bas.vanbeek#gmail.com. +- Also in adodb5, changed adodb-session2 to use static function declarations in class. Thx Daniel Berlin. +- Added "Clear SQL Log" to bottom of Performance screen. +- Sessions2 code echo'ed directly to the screen in debug mode. Now uses ADOConnection::outp(). +- In mysql/mysqli, qstr(null) will return the string "null" instead of empty quoted string "''". +- postgresql optimizeTable in perf-postgres.inc.php added by Daniel Berlin (mail#daniel-berlin.de) +- Added 5.2.1 compat code for oci8. +- Changed @@identity to SCOPE_IDENTITY() for multiple mssql drivers. Thx Stefano Nari. +- Code sanitization introduced in 4.95 caused problems in European locales (as float 3.2 was typecast to 3,2). Now we only sanitize if is_numeric fails. +- Added support for customizing ADORecordset_empty using $this->rsPrefix.'empty'. By Josh Truwin. +- Added proper support for ALterColumnSQL for Postgresql in datadict code. Thx. Josh Truwin. +- Added better support for MetaType() in mysqli when using an array recordset. +- Changed parser for pgsql error messages in adodb-error.inc.php to case-insensitive regex. + +## 4.95 - 17 May 2007 + +- CacheFlush debug outp() passed in invalid parameters. Fixed. +- Added Thai language file for adodb. Thx Trirat Petchsingh rosskouk#gmail.com and Marcos Pont +- Added zerofill checking support to MetaColumns for mysql and mysqli. +- CacheFlush no longer deletes all files directories. Only `*.cache` files deleted. +- DB2 timestamp format changed to var $fmtTimeStamp = 'Y-m-d-H:i:s'; +- Added some code sanitization to AutoExecute in adodb-lib.inc.php. +- Due to typo, all connections in adodb-oracle.inc.php would become persistent, even non-persistent ones. Fixed. +- Oci8 DBTimeStamp uses 24 hour time for input now, so you can perform string comparisons between 2 DBTimeStamp values. +- Some PHP4.4 compat issues fixed in adodb-session2.inc.php +- For ADOdb 5.01, fixed some adodb-datadict.inc.php MetaType compat issues with PHP5. +- The $argHostname was wiped out in adodb-ado5.inc.php. Fixed. +- Adodb5 version, added iterator support for adodb_recordset_empty. +- Adodb5 version,more error checking code now will use exceptions if available. + +## 4.94 - 23 Jan 2007 + +- Active Record: $ADODB_ASSOC_CASE=2 did not work properly. Fixed. Thx gmane#auxbuss.com. +- mysqli had bugs in BeginTrans() and EndTrans(). Fixed. +- Improved error handling when no database is connected for oci8. Thx Andy Hassall. +- Names longer than 30 chars in oci8 datadict will be changed to random name. Thx Eugenio. http://phplens.com/lens/lensforum/msgs.php?id=16182 +- Added var $upperCase = 'ucase' to access and ado_access drivers. Thx Renato De Giovanni renato#cria.org.br +- Postgres64 driver, if preparing plan failed in _query, did not handle error properly. Fixed. See http://phplens.com/lens/lensforum/msgs.php?id=16131. +- Fixed GetActiveRecordsClass() reference bug. See http://phplens.com/lens/lensforum/msgs.php?id=16120 +- Added handling of nulls in adodb-ado_mssql.inc.php for qstr(). Thx to Felix Rabinovich. +- Adodb-dict contributions by Gaetano + - Support for INDEX in data-dict. Example: idx_ev1. The ability to define indexes using the INDEX keyword was added in ADOdb 4.94. The following example features mutiple indexes, including a compound index idx_ev1. + + ``` + event_id I(11) NOTNULL AUTOINCREMENT PRIMARY, + event_type I(4) NOTNULL + event_start_date T DEFAULT NULL **INDEX id_esd**, + event_end_date T DEFAULT '0000-00-00 00:00:00' **INDEX id_eted**, + event_parent I(11) UNSIGNED NOTNULL DEFAULT 0 **INDEX id_evp**, + event_owner I(11) DEFAULT 0 **INDEX idx_ev1**, + event_project I(11) DEFAULT 0 **INDEX idx_ev1**, + event_times_recuring I(11) UNSIGNED NOTNULL DEFAULT 0, + event_icon C(20) DEFAULT 'obj/event', + event_description X + ``` + + - Prevents the generated SQL from including double drop-sequence statements for REPLACE case of tables with autoincrement columns (on those dbs that emulate it via sequences) + - makes any date defined as DEFAULT value for D and T columns work cross-database, not just the "sysdate" value (as long as it is specified using adodb standard format). See above example. +- Fixed pdo's GetInsertID() support. Thx Ricky Su. +- oci8 Prepare() now sets error messages if an error occurs. +- Added 'PT_BR' to SetDateLocale() -- brazilian portugese. +- charset in oci8 was not set correctly on `*Connect()` +- ADOConnection::Transpose() now appends as first column the field names. +- Added $ADODB_QUOTE_FIELDNAMES. If set to true, will autoquote field names in AutoExecute(),GetInsertSQL(), GetUpdateSQL(). +- Transpose now adds the field names as the first column after transposition. +- Added === check in ADODB_SetDatabaseAdapter for $db, adodb-active-record.inc.php. Thx Christian Affolter. +- Added ErrorNo() to adodb-active-record.inc.php. Thx ante#novisplet.com. + +## 4.93 - 10 Oct 2006 + +- Added support for multiple database connections in performance monitoring code (adodb-perf.inc.php). Now all sql in multiple database connections can be saved into one database ($ADODB_LOG_CONN). +- Added MetaIndexes() to odbc_mssql. +- Added connection property $db->null2null = 'null'. In autoexecute/getinsertsql/getupdatesql, this value will be converted to a null. Set this to a funny invalid value if you do not want null conversion. See http://phplens.com/lens/lensforum/msgs.php?id=15902. +- Path disclosure problem in mysqli fixed. Thx Andy. +- Fixed typo in session_schema2.xml. +- Changed INT in oci8 to return correct precision in $fld->max_length, MetaColumns(). Thx Eloy Lafuente Plaza. +- Patched postgres64 _connect to handle serverinfo(). see http://phplens.com/lens/lensforum/msgs.php?id=15887. +- Added pdo fix for null columns. See http://phplens.com/lens/lensforum/msgs.php?id=15889 +- For stored procedures, missing connection id now passed into mssql_query(). Thx Ecsy (ecsy#freemail.hu). + +## 4.92a - 30 Aug 2006 + +- Syntax error in postgres7 driver. Thx Eloy Lafuente Plaza. +- Minor bug fixes - adodb informix 10 types added to adodb.inc.php. Thx Fernando Ortiz. + +## 4.92 - 29 Aug 2006 + +- Better odbtp date support. +- Added IgnoreErrors() to bypass default error handling. +- The _adodb_getcount() function in adodb-lib.inc.php, some ORDER BY bug fixes. +- For ibase and firebird, set $sysTimeStamp = "CURRENT_TIMESTAMP". +- Fixed postgres connection bug: http://phplens.com/lens/lensforum/msgs.php?id=11057. +- Changed CacheSelectLimit() to flush cache when $secs2cache==-1 due to complaints from other users. +- Added support for using memcached with CacheExecute/CacheSelectLimit. Requires memcache module PECL extension. Usage: + ``` +$db = NewADOConnection($driver); +$db->memCache = true; /// should we use memCache instead of caching in files +$db->memCacheHost = "126.0.1.1"; /// memCache host +$db->memCachePort = 11211; /// this is default memCache port +$db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) +$db->Connect(...); +$db->CacheExecute($sql); +``` + +- Implemented Transpose() for recordsets. Recordset must be retrieved using ADODB_FETCH_NUM. First column becomes the column name. + ``` +$db = NewADOConnection('mysql'); +$db->Connect(...); +$db->SetFetchMode(ADODB_FETCH_NUM); +$rs = $db->Execute('select productname,productid,unitprice from products limit 10'); +$rs2 = $db->Transpose($rs); +rs2html($rs2); +``` + +## 4.91 - 2 Aug 2006 + +- Major session code rewrite... See session docs. +- PDO bindinputarray() was not set properly for MySQL (changed from true to false). +- Changed CacheSelectLimit() to re-cache when $secs2cache==0. This is one way to flush the cache when SelectLimit is called. +- Added to quotes to mysql and mysqli: "SHOW COLUMNS FROM \`%s\`"; +- Removed accidental optgroup handling in GetMenu(). Fixed ibase _BlobDecode for php5 compat, and also mem alloc issues for small blobs, thx salvatori#interia.pl +- Mysql driver OffsetDate() speedup, useful for adodb-sessions. +- Fix for GetAssoc() PHP5 compat. See http://phplens.com/lens/lensforum/msgs.php?id=15425 +- Active Record - If inserting a record and the value of a primary key field is null, then we do not insert that field in as we assume it is an auto-increment field. Needed by mssql. +- Changed postgres7 MetaForeignKeys() see http://phplens.com/lens/lensforum/msgs.php?id=15531 +- DB2 will now return db2_conn_errormsg() when it is a connection error. + +## 4.90 - 8 June 2006 + +- Changed adodb_countrec() in adodb-lib.inc.php to allow LIMIT to be used as a speedup to reduce no of records counted. +- Added support for transaction modes for postgres and oci8 with SetTransactionMode(). These transaction modes affect all subsequent transactions of that connection. +- Thanks to Halmai Csongor for suggestion. +- Removed `$off = $fieldOffset - 1` line in db2 driver, FetchField(). Tx Larry Menard. +- Added support for PHP5 objects as Execute() bind parameters using `__toString` (eg. Simple-XML). Thx Carl-Christian Salvesen. +- Rounding in tohtml.inc.php did not work properly. Fixed. +- MetaIndexes in postgres fails when fields are deleted then added in again because the attnum has gaps in it. See http://sourceforge.net/tracker/index.php?func=detail&aid=1451245&group_id=42718&atid=433976. Fixed. +- MetaForeignkeys in mysql and mysqli did not work when fetchMode==ADODB_FETCH_ASSOC used. Fixed. +- Reference error in AutoExecute() fixed. +- Added macaddr postgres type to MetaType. Maps to 'C'. +- Added to `_connect()` in adodb-ado5.inc.php support for $database and $dataProvider parameters. Thx Larry Menard. +- Added support for sequences in adodb-ado_mssql.inc.php. Thx Larry Menard. +- Added ADODB_SESSION_READONLY. +- Added session expiryref support to crc32 mode, and in LOB code. +- Clear `_errorMsg` in postgres7 driver, so that ErrorMsg() displays properly when no error occurs. +- Added BindDate and BindTimeStamp + +## 4.81 - 3 May 2006 + +- Fixed variable ref errors in adodb-ado5.inc.php in _query(). +- Mysqli setcharset fix using method_exists(). +- The adodb-perf.inc.php CreateLogTable() code now works for user-defined table names. +- Error in ibase_blob_open() fixed. See http://phplens.com/lens/lensforum/msgs.php?id=14997 + +## 4.80 - 8 Mar 2006 + +- Added activerecord support. +- Added mysql `$conn->compat323 = true` if you want MySQL 3.23 compat enabled. Fixes GetOne() Select-Limit problems. +- Added adodb-xmlschema03.inc.php to support XML Schema version 3 and updated adodb-datadict.htm docs. +- Better memory management in Execute. Thx Mike Fedyk. + +## 4.72 - 21 Feb 2006 + +- Added 'new' DSN parameter for NConnect(). +- Pager now sanitizes $PHP_SELF to protect against XSS. Thx to James Bercegay and others. +- ADOConnection::MetaType changed to setup $rs->connection correctly. +- New native DB2 driver contributed by Larry Menard, Dan Scott, Andy Staudacher, Bharat Mediratta. +- The mssql CreateSequence() did not BEGIN TRANSACTION correctly. Fixed. Thx Sean Lee. +- The _adodb_countrecs() function in adodb-lib.inc.php has been revised to handle more ORDER BY variations. + +## 4.71 - 24 Jan 2006 + +- Fixes postgresql security issue related to binary strings. Thx to Andy Staudacher. +- Several DSN bugs found: + 1. Fix bugs in DSN connections introduced in 4.70 when underscores are found in the DSN. + 2. DSN with _ did not work properly in PHP5 (fine in PHP4). Fixed. + 3. Added support for PDO DSN connections in NewADOConnection(), and database parameter in PDO::Connect(). +- The oci8 datetime flag not correctly implemented in ADORecordSet_array. Fixed. +- Added BlobDelete() to postgres, as a counterpoint to UpdateBlobFile(). +- Fixed GetInsertSQL() to support oci8po. +- Fixed qstr() issue with postgresql with \0 in strings. +- Fixed some datadict driver loading issues in _adodb_getdriver(). +- Added register shutdown function session_write_close in adodb-session.inc.php for PHP 5 compat. See http://phplens.com/lens/lensforum/msgs.php?id=14200. + +## 4.70 - 6 Jan 2006 + +- Many fixes from Danila Ulyanov to ibase, oci8, postgres, mssql, odbc_oracle, odbtp, etc drivers. +- Changed usage of binary hint in adodb-session.inc.php for mysql. See http://phplens.com/lens/lensforum/msgs.php?id=14160 +- Fixed invalid variable reference problem in undomq(), adodb-perf.inc.php. +- Fixed http://phplens.com/lens/lensforum/msgs.php?id=14254 in adodb-perf.inc.php, `_DBParameter()` settings of fetchmode was wrong. +- Fixed security issues in server.php and tmssql.php discussed by Andreas Sandblad in a Secunia security advisory. Added `$ACCEPTIP = 127.0.0.1` and changed suggested root password to something more secure. +- Changed pager to close recordset after RenderLayout(). + +## 4.68 - 25 Nov 2005 + +- PHP 5 compat for mysqli. MetaForeignKeys repeated twice and MYSQLI_BINARY_FLAG missing. +- PHP 5.1 support for postgresql bind parameters using ? did not work if >= 10 parameters. Fixed. Thx to Stanislav Shramko. +- Lots of PDO improvements. +- Spelling error fixed in mysql MetaForeignKeys, $associative parameter. + +## 4.67 - 16 Nov 2005 + +- Postgresql not_null flag not set to false correctly. Thx Cristian MARIN. +- We now check in Replace() if key is in fieldArray. Thx Sébastien Vanvelthem. +- `_file_get_contents()` function was missing in xmlschema. fixed. +- Added week in year support to SQLDate(), using 'W' flag. Thx Spider. +- In sqlite metacolumns was repeated twice, causing PHP 5 problems. Fixed. +- Made debug output XHTML compliant. + +## 4.66 - 28 Sept 2005 + +- ExecuteCursor() in oci8 did not clean up properly on failure. Fixed. +- Updated xmlschema.dtd, by "Alec Smecher" asmecher#smecher.bc.ca +- Hardened SelectLimit, typecasting nrows and offset to integer. +- Fixed misc bugs in AutoExecute() and GetInsertSQL(). +- Added $conn->database as the property holding the database name. The older $conn->databaseName is retained for backward compat. +- Changed _adodb_backtrace() compat check to use function_exists(). +- Bug in postgresql MetaIndexes fixed. Thx Kevin Jamieson. +- Improved OffsetDate for MySQL, reducing rounding error. +- Metacolumns added to sqlite. Thx Mark Newnham. +- PHP 4.4 compat fixes for GetAssoc(). +- Added postgresql bind support for php 5.1. Thx Cristiano da Cunha Duarte +- OffsetDate() fixes for postgresql, typecasting strings to date or timestamp. +- DBTimeStamp formats for mssql, odbc_mssql and postgresql made to conform with other db's. +- Changed PDO constants from PDO_ to PDO:: to support latest spec. + +## 4.65 - 22 July 2005 + +- Reverted 'X' in mssql datadict to 'TEXT' to be compat with mssql driver. However now you can set $datadict->typeX = 'varchar(4000)' or 'TEXT' or 'CLOB' for mssql and oci8 drivers. +- Added charset support when using DSN for Oracle. +- _adodb_getmenu did not use fieldcount() to get number of fields. Fixed. +- MetaForeignKeys() for mysql/mysqli contributed by Juan Carlos Gonzalez. +- MetaDatabases() now correctly returns an array for mysqli driver. Thx Cristian MARIN. +- CompleteTrans(false) did not return false. Fixed. Thx to JMF. +- AutoExecute() did not work with Oracle. Fixed. Thx José Moreira. +- MetaType() added to connection object. +- More PHP 4.4 reference return fixes. Thx Ryan C Bonham and others. + +## 4.64 - 20 June 2005 + +- In datadict, if the default field value is set to '', then it is not applied when the field is created. Fixed by Eugenio. +- MetaPrimaryKeys for postgres did not work because of true/false change in 4.63. Fixed. +- Tested ocifetchstatement in oci8. Rejected at the end. +- Added port to dsn handling. Supported in postgres, mysql, mysqli,ldap. +- Added 'w' and 'l' to mysqli SQLDate(). +- Fixed error handling in ldap _connect() to be more consistent. Also added ErrorMsg() handling to ldap. +- Added support for union in _adodb_getcount, adodb-lib.inc.php for postgres and oci8. +- rs2html() did not work with null dates properly. +- PHP 4.4 reference return fixes. + +## 4.63 - 18 May 2005 + +- Added $nrows<0 check to mysqli's SelectLimit(). +- Added OptimizeTable() and OptimizeTables() in adodb-perf.inc.php. By Markus Staab. +- PostgreSQL inconsistencies fixed. true and false set to TRUE and FALSE, and boolean type in datadict-postgres.inc.php set to 'L' => 'BOOLEAN'. Thx Kevin Jamieson. +- New adodb_session_create_table() function in adodb-session.inc.php. By Markus Staab. +- Added null check to UserTimeStamp(). +- Fixed typo in mysqlt driver in adorecordset. Thx to Andy Staudacher. +- GenID() had a bug in the raiseErrorFn handling. Fixed. Thx Marcos Pont. +- Datadict name quoting now handles ( ) in index fields correctly - they aren't part of the index field. +- Performance monitoring: + 1. oci8 Ixora checks moved down; + 2. expensive sql changed so that only those sql with count(*)>1 are shown; + 3. changed sql1 field to a length+crc32 checksum - this breaks backward compat. +- We remap firebird15 to firebird in data dictionary. + +## 4.62 - 2 Apr 2005 + +- Added 'w' (dow as 0-6 or 1-7) and 'l' (dow as string) for SQLDate for oci8, postgres and mysql. +- Rolled back MetaType() changes for mysqli done in prev version. +- Datadict change by chris, cblin#tennaxia.com data mappings from: + + ``` +oci8: X->varchar(4000) XL->CLOB +mssql: X->XL->TEXT +mysql: X->XL->LONGTEXT +fbird: X->XL->varchar(4000) +``` + to: + ``` +oci8: X->varchar(4000) XL->CLOB +mssql: X->VARCHAR(4000) XL->TEXT +mysql: X->TEXT XL->LONGTEXT +fbird: X->VARCHAR(4000) XL->VARCHAR(32000) +``` +- Added $connection->disableBlobs to postgresql to improve performance when no bytea is used (2-5% improvement). +- Removed all HTTP_* vars. +- Added $rs->tableName to be set before calling AutoExecute(). +- Alex Rootoff rootoff#pisem.net contributed ukrainian language file. +- Added new mysql_option() support using $conn->optionFlags array. +- Added support for ldap_set_option() using the $LDAP_CONNECT_OPTIONS global variable. Contributed by Josh Eldridge. +- Added LDAP_* constant definitions to ldap. +- Added support for boolean bind variables. We use $conn->false and $conn->true to hold values to set false/true to. +- We now do not close the session connection in adodb-session.inc.php as other objects could be using this connection. +- We now strip off `\0` at end of Ixora SQL strings in $perf->tohtml() for oci8. + +## 4.61 - 23 Feb 2005 + +- MySQLi added support for mysqli_connect_errno() and mysqli_connect_error(). +- Massive improvements to alpha PDO driver. +- Quote string bind parameters logged by performance monitor for easy type checking. Thx Jason Judge. +- Added support for $role when connecting with Interbase/firebird. +- Added support for enum recognition in MetaColumns() mysql and mysqli. Thx Amedeo Petrella. +- The sybase_ase driver contributed by Interakt Online. Thx Cristian Marin cristic#interaktonline.com. +- Removed not_null, has_default, and default_value from ADOFieldObject. +- Sessions code, fixed quoting of keys when handling LOBs in session write() function. +- Sessions code, added adodb_session_regenerate_id(), to reduce risk of session hijacking by changing session cookie dynamically. Thx Joe Li. +- Perf monitor, polling for CPU did not work for PHP 4.3.10 and 5.0.0-5.0.3 due to PHP bugs, so we special case these versions. +- Postgresql, UpdateBlob() added code to handle type==CLOB. + +## 4.60 - 24 Jan 2005 + +- Implemented PEAR DB's autoExecute(). Simplified design because I don't like using constants when strings work fine. +- _rs2serialize will now update $rs->sql and $rs->oldProvider. +- Added autoExecute(). +- Added support for postgres8 driver. Currently just remapped to postgres7 driver. +- Changed oci8 _query(), so that OCIBindByName() sets the length to -1 if element size is > 4000. This provides better support for LONGs. +- Added SetDateLocale() support for netherlands (Nl). +- Spelling error in pivot code ($iff should be $iif). +- mysql insert_id() did not work with mysql 3.x. Fixed. +- `\r\n` not converted to spaces correctly in exporting data. Fixed. +- _nconnect() in mysqli did not return value correctly. Fixed. +- Arne Eckmann contributed danish language file. +- Added clone() support to FetchObject() for PHP5. +- Removed SQL_CUR_USE_ODBC from odbc_mssql. + +## 4.55 - 5 Jan 2005 + +- Found bug in Execute() with bind params for db's that do not support binding natively. +- DropSequence() now correctly uses default parameter. +- Now Execute() ignores locale for floats, so 1.23 is NEVER converted to 1,23. +- SetFetchMode() not properly saved in adodb-perf, suspicious sql and expensive sql. Fixed. +- Added INET to postgresql metatypes. Thx motzel. +- Allow oracle hints to work when counting with _adodb_getcount in adodb-lib.inc.php. Thx Chris Wrye. +- Changed mysql insert_id() to use SELECT LAST_INSERT_ID(). +- If alter col in datadict does not modify col type/size of actual col, then it is removed from alter col code. By Mark Newham. Not perfect as MetaType() !== ActualType(). +- Added handling of view fields in metacolumns() for postgresql. Thx Renato De Giovanni. +- Added to informix MetaPrimaryKeys and MetaColumns fixes for null bit. Thx to Cecilio Albero. +- Removed obsolete connection_timeout() from perf code. +- Added support for arrayClass in adodb-csv.inc.php. +- RSFilter now accepts methods of the form $array($obj, 'methodname'). Thx to blake#near-time.com. +- Changed CacheFlush to `$cmd = 'rm -rf '.$ADODB_CACHE_DIR.'/[0-9a-f][0-9a-f]/';` +- For better cursor concurrency, added code to free ref cursors in oci8 when $rs->Close() is called. Note that CLose() is called internally by the Get* functions too. +- Added IIF support for access when pivoting. Thx Volodia Krupach. +- Added mssql datadict support for timestamp. Thx Alexios. +- Informix pager fix. By Mario Ramirez. +- ADODB_TABLE_REGEX now includes ':'. By Mario Ramirez. +- Mark Newnham contributed MetaIndexes for oci8 and db2. + +## 4.54 - 5 Nov 2004 + +- Now you can set $db->charSet = ?? before doing a Connect() in oci8. +- Added adodbFetchMode to sqlite. +- Perf code, added a string typecast to substr in adodb_log_sql(). +- Postgres: Changed BlobDecode() to use po_loread, added new $maxblobsize parameter, and now it returns the blob instead of sending it to stdout - make sure to mention that as a compat warning. Also added $db->IsOID($oid) function; uses a heuristic, not guaranteed to work 100%. +- Contributed arabic language file by "El-Shamaa, Khaled" k.el-shamaa#cgiar.org +- PHP5 exceptions did not handle @ protocol properly. Fixed. +- Added ifnull handling for postgresql (using coalesce). +- Added metatables() support for Postgresql 8.0 (no longer uses pg_% dictionary tables). +- Improved Sybase ErrorMsg() function. By Gaetano Giunta. +- Improved oci8 SelectLimit() to use Prepare(). By Cristiano Duarte. +- Type-cast $row parameter in ifx_fetch_row() to int. Thx stefan bodgan. +- Ralf becker contributed improvements in postgresql, sapdb, mysql data dictionary handling: + - MySql and Postgres MetaType was reporting every int column which was part of a primary key and unique as serial + - Postgres was not reporting the scale of decimal types + - MaxDB was padding the defaults of none-string types with spaces + - MySql now correctly converts enum columns to varchar +- Ralf also changed Postgresql datadict: + - you cant add NOT NULL columns in postgres in one go, they need to be added as NULL and then altered to NOT NULL + - AlterColumnSQL could not change a varchar column with numbers into an integer column, postgres need an explicit conversation + - a re-created sequence was not set to the correct value, if the name was the old name (no implicit sequence), now always the new name of the implicit sequence is used +- Sergio Strampelli added extra $intoken check to Lens_ParseArgs() in datadict code. + +## 4.53 - 28 Sept 2004 + +- FetchMode cached in recordset is sometimes mapped to native db fetchMode. Normally this does not matter, but when using cached recordsets, we need to switch back to using adodb fetchmode. So we cache this in $rs->adodbFetchMode if it differs from the db's fetchMode. +- For informix we now set canSeek = false driver because stefan bodgan tells me that seeking doesn't work. +- SetDateLocale() never worked till now ;-) Thx david#tomato.it +- Set $_bindInputArray = true in sapdb driver. Required for clob support. +- Fixed some PEAR::DB emulation issues with isError() and isWarning. Thx to Gert-Rainer Bitterlich. +- Empty() used in getupdatesql without strlen() check. Fixed. +- Added unsigned detection to mysql and mysqli drivers. Thx to dan cech. +- Added hungarian language file. Thx to Halászvári Gábor. +- Improved fieldname-type formatting of datadict SQL generated (adding $widespacing parameter to _GenField). +- Datadict oci8 DROP CONSTRAINTS misspelt. Fixed. Thx Mark Newnham. +- Changed odbtp to dynamically change databaseType based on connection, eg. from 'odbtp' to 'odbtp_mssql' when connecting to mssql database. +- In datadict, MySQL I4 was wrongly mapped to MEDIUMINT, which is actually I3. Fixed. +- Fixed mysqli MetaType() recognition. Mysqli returns numeric types unlike mysql extension. Thx Francesco Riosa. +- VFP odbc driver curmode set wrongly, causing problems with memo fields. Fixed. +- Odbc driver did not recognize odbc version 2 driver date types properly. Fixed. Thx Bostjan. +- ChangeTableSQL() fixes to datadict-db2.inc.php by Mark Newnham. +- Perf monitoring with odbc improved. Now we try in perf code to manually set the sysTimeStamp using date() if sysTimeStamp is empty. +- All ADO errors are thrown as exceptions in PHP5. So we added exception handling to ado in PHP5 by creating new adodb-ado5.inc.php driver. +- Added IsConnected(). Returns true if connection object connected. By Luca.Gioppo. +- "Ralf Becker" RalfBecker#digitalROCK.de contributed new sapdb data-dictionary driver and a large patch that implements field and table renaming for oracle, mssql, postgresql, mysql and sapdb. See the new RenameTableSQL() and RenameColumnSQL() functions. +- We now check ExecuteCursor to see if PrepareSP was initially called. +- Changed oci8 datadict to use MODIFY for $dd->alterCol. Thx Mark Newnham. + +## 4.52 - 10 Aug 2004 + +- Bug found in Replace() when performance logging enabled, introduced in ADOdb 4.50. Fixed. +- Replace() checks update stmt. If update stmt fails, we now return immediately. Thx to alex. +- Added support for $ADODB_FORCE_TYPE in GetUpdateSQL/GetInsertSQL. Thx to niko. +- Added ADODB_ASSOC_CASE support to postgres/postgres7 driver. +- Support for DECLARE stmt in oci8. Thx Lochbrunner. + +## 4.51 - 29 July 2004 + +- Added adodb-xmlschema 1.0.2. Thx dan and richard. +- Added new adorecordset_ext_* classes. If ADOdb extension installed for mysql, mysqlt and oci8 (but not oci8po), we use the superfast ADOdb extension code for movenext. +- Added schema support to mssql and odbc_mssql MetaPrimaryKeys(). +- Patched MSSQL driver to support PHP NULL and Boolean values while binding the input array parameters in the _query() function. By Stephen Farmer. +- Added support for clob's for mssql, UpdateBlob(). Thx to gfran#directa.com.br +- Added normalize support for postgresql (true=lowercase table name, or false=case-sensitive table names) to MetaColumns($table, $normalize=true). +- PHP5 variant dates in ADO not working. Fixed in adodb-ado.inc.php. +- Constant ADODB_FORCE_NULLS was not working properly for many releases (for GetUpdateSQL). Fixed. Also GetUpdateSQL strips off ORDER BY now - thx Elieser Leão. +- Perf Monitor for oci8 now dynamically highlights optimizer_* params if too high/low. +- Added dsn support to NewADOConnection/ADONewConnection. +- Fixed out of page bounds bug in _adodb_pageexecute_all_rows() Thx to "Sergio Strampelli" sergio#rir.it +- Speedup of movenext for mysql and oci8 drivers. +- Moved debugging code _adodb_debug_execute() to adodb-lib.inc.php. +- Fixed postgresql bytea detection bug. See http://phplens.com/lens/lensforum/msgs.php?id=9849. +- Fixed ibase datetimestamp typo in PHP5. Thx stefan. +- Removed whitespace at end of odbtp drivers. +- Added db2 metaprimarykeys fix. +- Optimizations to MoveNext() for mysql and oci8. Misc speedups to Get* functions. + +## 4.50 - 6 July 2004 + +- Bumped it to 4.50 to avoid confusion with PHP 4.3.x series. +- Added db2 metatables and metacolumns extensions. +- Added alpha PDO driver. Very buggy, only works with odbc. +- Tested mysqli. Set poorAffectedRows = true. Cleaned up movenext() and _fetch(). +- PageExecute does not work properly with php5 (return val not a variable). Reported Dmytro Sychevsky sych#php.com.ua. Fixed. +- MetaTables() for mysql, $showschema parameter was not backward compatible with older versions of adodb. Fixed. +- Changed mysql GetOne() to work with mysql 3.23 when using with non-select stmts (e.g. SHOW TABLES). +- Changed TRIG_ prefix to a variable in datadict-oci8.inc.php. Thx to Luca.Gioppo#csi.it. +- New to adodb-time code. We allow you to define your own daylights savings function, adodb_daylight_sv for pre-1970 dates. If the function is defined (somewhere in an include), then you can correct for daylights savings. See http://phplens.com/phpeverywhere/node/view/16#daylightsavings for more info. +- New sqlitepo driver. This is because assoc mode does not work like other drivers in sqlite. Namely, when selecting (joining) multiple tables, in assoc mode the table names are included in the assoc keys in the "sqlite" driver. In "sqlitepo" driver, the table names are stripped from the returned column names. When this results in a conflict, the first field get preference. Contributed by Herman Kuiper herman#ozuzo.net +- Added $forcenull parameter to GetInsertSQL/GetUpdateSQL. Idea by Marco Aurelio Silva. +- More XHTML changes for GetMenu. By Jeremy Evans. +- Fixes some ibase date issues. Thx to stefan bogdan. +- Improvements to mysqli driver to support $ADODB_COUNTRECS. +- Fixed adodb-csvlib.inc.php problem when reading stream from socket. We need to poll stream continiously. + +## 4.23 - 16 June 2004 + +- New interbase/firebird fixes thx to Lester Caine. Driver fixes a problem with getting field names in the result array, and corrects a couple of data conversions. Also we default to dialect3 for firebird. Also ibase sysDate property was wrong. Changed to cast as timestamp. +- The datadict driver is set up to give quoted tables and fields as this was the only way round reserved words being used as field names in TikiWiki. TikiPro is tidying that up, and I hope to be able to produce a build of THAT which uses what I consider proper UPPERCASE field and table names. The conversion of TikiWiki to ADOdb helped in that, but until the database is completely tidied up in TikiPro ... +- Modified _gencachename() to include fetchmode in name hash. This means you should clear your cache directory after installing this release as the cache name algorithm has changed. +- Now Cache* functions work in safe mode, because we do not create sub-directories in the $ADODB_CACHE_DIR in safe mode. In non-safe mode we still create sub-directories. Done by modifying _gencachename(). +- Added $gmt parameter (true/false) to UserDate and UserTimeStamp in connection class, to force conversion of input (in local time) to be converted to UTC/GMT. +- Mssql datadict did not support INT types properly (no size param allowed). Added _GetSize() to datadict-mssql.inc.php. +- For borland_ibase, BeginTrans(), changed: + + ``` +$this->_transactionID = $this->_connectionID; +``` + + to + + ``` +$this->_transactionID = ibase_trans($this->ibasetrans, $this->_connectionID); +``` + +- Fixed typo in mysqi_field_seek(). Thx to Sh4dow (sh4dow#php.pl). +- LogSQL did not work with Firebird/Interbase. Fixed. +- Postgres: made errorno() handling more consistent. Thx to Michael Jahn, Michael.Jahn#mailbox.tu-dresden.de. +- Added informix patch to better support metatables, metacolumns by "Cecilio Albero" c-albero#eos-i.com +- Cyril Malevanov contributed patch to oci8 to support passing of LOB parameters: + + ``` +$text = 'test test test'; +$sql = "declare rs clob; begin :rs := lobinout(:sa0); end;"; +$stmt = $conn -> PrepareSP($sql); +$conn -> InParameter($stmt,$text,'sa0', -1, OCI_B_CLOB); +$rs = ''; +$conn -> OutParameter($stmt,$rs,'rs', -1, OCI_B_CLOB); +$conn -> Execute($stmt); +echo "return = ".$rs."
";
+``` + + As he says, the LOBs limitations are: + - use OCINewDescriptor before binding + - if Param is IN, uses save() before each execute. This is done automatically for you. + - if Param is OUT, uses load() after each execute. This is done automatically for you. + - when we bind $var as LOB, we create new descriptor and return it as a Bind Result, so if we want to use OUT parameters, we have to store somewhere &$var to load() data from LOB to it. + - IN OUT params are not working now (should not be a big problem to fix it) + - now mass binding not working too (I've wrote about it before) +- Simplified Connect() and PConnect() error handling. +- When extension not loaded, Connect() and PConnect() will return null. On connect error, the fns will return false. +- CacheGetArray() added to code. +- Added Init() to adorecordset_empty(). +- Changed postgres64 driver, MetaColumns() to not strip off quotes in default value if :: detected (type-casting of default). +- Added test: if (!defined('ADODB_DIR')) die(). Useful to prevent hackers from detecting file paths. +- Changed metaTablesSQL to ignore Postgres 7.4 information schemas (sql_*). +- New polish language file by Grzegorz Pacan +- Added support for UNION in _adodb_getcount(). +- Added security check for ADODB_DIR to limit path disclosure issues. Requested by postnuke team. +- Added better error message support to oracle driver. Thx to Gaetano Giunta. +- Added showSchema support to mysql. +- Bind in oci8 did not handle $name=false properly. Fixed. +- If extension not loaded, Connect(), PConnect(), NConnect() will return null. + +## 4.22 - 15 Apr 2004 + +- Moved docs to own adodb/docs folder. +- Fixed session bug when quoting compressed/encrypted data in Replace(). +- Netezza Driver and LDAP drivers contributed by Josh Eldridge. +- GetMenu now uses rtrim() on values instead of trim(). +- Changed MetaColumnNames to return an associative array, keys being the field names in uppercase. +- Suggested fix to adodb-ado.inc.php affected_rows to support PHP5 variants. Thx to Alexios Fakos. +- Contributed bulgarian language file by Valentin Sheiretsky valio#valio.eu.org. +- Contributed romanian language file by stefan bogdan. +- GetInsertSQL now checks for table name (string) in $rs, and will create a recordset for that table automatically. Contributed by Walt Boring. Also added OCI_B_BLOB in bind on Walt's request - hope it doesn't break anything :-) +- Some minor postgres speedups in `_initrs()`. +- ChangeTableSQL checks now if MetaColumns returns empty. Thx Jason Judge. +- Added ADOConnection::Time(), returns current database time in unix timestamp format, or false. + +## 4.21 - 20 Mar 2004 + +- We no longer in SelectLimit for VFP driver add SELECT TOP X unless an ORDER BY exists. +- Pim Koeman contributed dutch language file adodb-nl.inc.php. +- Rick Hickerson added CLOB support to db2 datadict. +- Added odbtp driver. Thx to "stefan bogdan" sbogdan#rsb.ro. +- Changed PrepareSP() 2nd parameter, $cursor, to default to true (formerly false). Fixes oci8 backward compat problems with OUT params. +- Fixed month calculation error in adodb-time.inc.php. 2102-June-01 appeared as 2102-May-32. +- Updated PHP5 RC1 iterator support. API changed, hasMore() renamed to valid(). +- Changed internal format of serialized cache recordsets. As we store a version number, this should be backward compatible. +- Error handling when driver file not found was flawed in ADOLoadCode(). Fixed. + +## 4.20 - 27 Feb 2004 + +- Updated to AXMLS 1.01. +- MetaForeignKeys for postgres7 modified by Edward Jaramilla, works on pg 7.4. +- Now numbers accepts function calls or sequences for GetInsertSQL/GetUpdateSQL numeric fields. +- Changed quotes of 'delete from $perf_table' to "". Thx Kehui (webmaster#kehui.net) +- Added ServerInfo() for ifx, and putenv trim fix. Thx Fernando Ortiz. +- Added addq(), which is analogous to addslashes(). +- Tested with php5b4. Fix some php5 compat problems with exceptions and sybase. +- Carl-Christian Salvesen added patch to mssql _query to support binds greater than 4000 chars. +- Mike suggested patch to PHP5 exception handler. $errno must be numeric. +- Added double quotes (") to ADODB_TABLE_REGEX. +- For oci8, Prepare(...,$cursor), $cursor's meaning was accidentally inverted in 4.11. This causes problems with ExecuteCursor() too, which calls Prepare() internally. Thx to William Lovaton. +- Now dateHasTime property in connection object renamed to datetime for consistency. This could break bc. +- Csongor Halmai reports that db2 SelectLimit with input array is not working. Fixed.. + +## 4.11 - 27 Jan 2004 + +- Csongor Halmai reports db2 binding not working. Reverted back to emulated binding. +- Dan Cech modifies datadict code. Adds support for DropIndex. Minor cleanups. +- Table misspelt in perf-oci8.inc.php. Changed v$conn_cache_advice to v$db_cache_advice. Reported by Steve W. +- UserTimeStamp and DBTimeStamp did not handle YYYYMMDDHHMMSS format properly. Reported by Mike Muir. Fixed. +- Changed oci8 Prepare(). Does not auto-allocate OCINewCursor automatically, unless 2nd param is set to true. This will break backward compat, if Prepare/Execute is used instead of ExecuteCursor. Reported by Chris Jones. +- Added InParameter() and OutParameter(). Wrapper functions to Parameter(), but nicer because they are self-documenting. +- Added 'R' handling in ActualType() to datadict-mysql.inc.php +- Added ADOConnection::SerializableRS($rs). Returns a recordset that can be serialized in a session. +- Added "Run SQL" to performance UI(). +- Misc spelling corrections in adodb-mysqli.inc.php, adodb-oci8.inc.php and datadict-oci8.inc.php, from Heinz Hombergs. +- MetaIndexes() for ibase contributed by Heinz Hombergs. + +## 4.10 - 12 Jan 2004 + +- Dan Cech contributed extensive changes to data dictionary to support name quoting (with `\``), and drop table/index. +- Informix added cursorType property. Default remains IFX_SCROLL, but you can change to 0 (non-scrollable cursor) for performance. +- Added ADODB_View_PrimaryKeys() for returning view primary keys to MetaPrimaryKeys(). +- Simplified chinese file, adodb-cn.inc.php from cysoft. +- Added check for ctype_alnum in adodb-datadict.inc.php. Thx to Jason Judge. +- Added connection parameter to ibase Prepare(). Fix by Daniel Hassan. +- Added nameQuote for quoting identifiers and names to connection obj. Requested by Jason Judge. Also the data dictionary parser now detects `field name` and generates column names with spaces correctly. +- BOOL type not recognised correctly as L. Fixed. +- Fixed paths in ADODB_DIR for session files, and back-ported it to 4.05 (15 Dec 2003) +- Added Schema to postgresql MetaTables. Thx to col#gear.hu +- Empty postgresql recordsets that had blob fields did not set EOF properly. Fixed. +- CacheSelectLimit internal parameters to SelectLimit were wrong. Thx to Nio. +- Modified adodb_pr() and adodb_backtrace() to support command-line usage (eg. no html). +- Fixed some fr and it lang errors. Thx to Gaetano G. +- Added contrib directory, with adodb rs to xmlrpc convertor by Gaetano G. +- Fixed array recordset bugs when `_skiprow1` is true. Thx to Gaetano G. +- Fixed pivot table code when count is false. + +## 4.05 - 13 Dec 2003 + +- Added MetaIndexes to data-dict code - thx to Dan Cech. +- Rewritten session code by Ross Smith. Moved code to adodb/session directory. +- Added function exists check on connecting to most drivers, so we don't crash with the unknown function error. +- Smart Transactions failed with GenID() when it no seq table has been created because the sql statement fails. Fix by Mark Newnham. +- Added $db->length, which holds name of function that returns strlen. +- Fixed error handling for bad driver in ADONewConnection - passed too few params to error-handler. +- Datadict did not handle types like 16.0 properly in _GetSize. Fixed. +- Oci8 driver SelectLimit() bug &= instead of =& used. Thx to Swen Thümmler. +- Jesse Mullan suggested not flushing outp when output buffering enabled. Due to Apache 2.0 bug. Added. +- MetaTables/MetaColumns return ref bug with PHP5 fixed in adodb-datadict.inc.php. +- New mysqli driver contributed by Arjen de Rijke. Based on adodb 3.40 driver. Then jlim added BeginTrans, CommitTrans, RollbackTrans, IfNull, SQLDate. Also fixed return ref bug. +- $ADODB_FLUSH added, if true then force flush in debugging outp. Default is false. In earlier versions, outp defaulted to flush, which is not compat with apache 2.0. +- Mysql driver's GenID() function did not work when when sql logging is on. Fixed. +- $ADODB_SESSION_TBL not declared as global var. Not available if adodb-session.inc.php included in function. Fixed. +- The input array not passed to Execute() in _adodb_getcount(). Fixed. + +## 4.04 - 13 Nov 2003 + +- Switched back to foreach - faster than list-each. +- Fixed bug in ado driver - wiping out $this->fields with date fields. +- Performance Monitor, View SQL, Explain Plan did not work if strlen($SQL)>max($_GET length). Fixed. +- Performance monitor, oci8 driver added memory sort ratio. +- Added random property, returns SQL to generate a floating point number between 0 and 1; + +## 4.03 - 6 Nov 2003 + +- The path to adodb-php4.inc.php and adodb-iterators.inc.php was not setup properly. +- Patched SQLDate in interbase to support hours/mins/secs. Thx to ari kuorikoski. +- Force autorollback for pgsql persistent connections - apparently pgsql did not autorollback properly before 4.3.4. See http://bugs.php.net/bug.php?id=25404 + +## 4.02 - 5 Nov 2003 + +- Some errors in adodb_error_pg() fixed. Thx to Styve. +- Spurious Insert_ID() error was generated by LogSQL(). Fixed. +- Insert_ID was interfering with Affected_Rows() and Replace() when LogSQL() enabled. Fixed. +- More foreach loops optimized with list/each. +- Null dates not handled properly in ADO driver (it becomes 31 Dec 1969!). +- Heinz Hombergs contributed patches for mysql MetaColumns - adding scale, made interbase MetaColumns work with firebird/interbase, and added lang/adodb-de.inc.php. +- Added INFORMIXSERVER environment variable. +- Added $ADODB_ANSI_PADDING_OFF for interbase/firebird. +- PHP 5 beta 2 compat check. Foreach (Iterator) support. Exceptions support. + +## 4.01 - 23 Oct 2003 + +- Fixed bug in rs2html(), tohtml.inc.php, that generated blank table cells. +- Fixed insert_id() incorrectly generated when logsql() enabled. +- Modified PostgreSQL _fixblobs to use list/each instead of foreach. +- Informix ErrorNo() implemented correctly. +- Modified several places to use list/each, including GetRowAssoc(). +- Added UserTimeStamp() to connection class. +- Added $ADODB_ANSI_PADDING_OFF for oci8po. + +## 4.00 - 20 Oct 2003 + +- Upgraded adodb-xmlschema to 1 Oct 2003 snapshot. +- Fix to rs2html warning message. Thx to Filo. +- Fix for odbc_mssql/mssql SQLDate(), hours was wrong. +- Added MetaColumns and MetaPrimaryKeys for sybase. Thx to Chris Phillipson. +- Added autoquoting to datadict for MySQL and PostgreSQL. Suggestion by Karsten Dambekalns diff --git a/ehcp/adodb5/drivers/adodb-access.inc.php b/ehcp/adodb5/drivers/adodb-access.inc.php new file mode 100644 index 0000000..e30b36a --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-access.inc.php @@ -0,0 +1,88 @@ +_connectionID); + $rs = new ADORecordSet_odbc($qid); + $ADODB_FETCH_MODE = $savem; + if (!$rs) return false; + + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + + $arr = $rs->GetArray(); + //print_pre($arr); + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + if ($arr[$i][2] && $arr[$i][3] != 'SYSTEM TABLE') + $arr2[] = $arr[$i][2]; + } + return $arr2; + }*/ +} + + +class ADORecordSet_access extends ADORecordSet_odbc { + + var $databaseType = "access"; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +}// class +} diff --git a/ehcp/adodb5/drivers/adodb-ado.inc.php b/ehcp/adodb5/drivers/adodb-ado.inc.php new file mode 100644 index 0000000..7d67860 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ado.inc.php @@ -0,0 +1,660 @@ +_affectedRows = new VARIANT; + } + + function ServerInfo() + { + if (!empty($this->_connectionID)) $desc = $this->_connectionID->provider; + return array('description' => $desc, 'version' => ''); + } + + function _affectedrows() + { + if (PHP_VERSION >= 5) return $this->_affectedRows; + + return $this->_affectedRows->value; + } + + // you can also pass a connection string like this: + // + // $DB->Connect('USER ID=sa;PASSWORD=pwd;SERVER=mangrove;DATABASE=ai',false,false,'SQLOLEDB'); + function _connect($argHostname, $argUsername, $argPassword, $argProvider= 'MSDASQL') + { + $u = 'UID'; + $p = 'PWD'; + + if (!empty($this->charPage)) + $dbc = new COM('ADODB.Connection',null,$this->charPage); + else + $dbc = new COM('ADODB.Connection'); + + if (! $dbc) return false; + + /* special support if provider is mssql or access */ + if ($argProvider=='mssql') { + $u = 'User Id'; //User parameter name for OLEDB + $p = 'Password'; + $argProvider = "SQLOLEDB"; // SQL Server Provider + + // not yet + //if ($argDatabasename) $argHostname .= ";Initial Catalog=$argDatabasename"; + + //use trusted conection for SQL if username not specified + if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes"; + } else if ($argProvider=='access') + $argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider + + if ($argProvider) $dbc->Provider = $argProvider; + + if ($argUsername) $argHostname .= ";$u=$argUsername"; + if ($argPassword)$argHostname .= ";$p=$argPassword"; + + if ($this->debug) ADOConnection::outp( "Host=".$argHostname."
\n version=$dbc->version"); + // @ added below for php 4.0.1 and earlier + @$dbc->Open((string) $argHostname); + + $this->_connectionID = $dbc; + + $dbc->CursorLocation = $this->_cursor_location; + return $dbc->State > 0; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argProvider='MSDASQL') + { + return $this->_connect($argHostname,$argUsername,$argPassword,$argProvider); + } + +/* + adSchemaCatalogs = 1, + adSchemaCharacterSets = 2, + adSchemaCollations = 3, + adSchemaColumns = 4, + adSchemaCheckConstraints = 5, + adSchemaConstraintColumnUsage = 6, + adSchemaConstraintTableUsage = 7, + adSchemaKeyColumnUsage = 8, + adSchemaReferentialContraints = 9, + adSchemaTableConstraints = 10, + adSchemaColumnsDomainUsage = 11, + adSchemaIndexes = 12, + adSchemaColumnPrivileges = 13, + adSchemaTablePrivileges = 14, + adSchemaUsagePrivileges = 15, + adSchemaProcedures = 16, + adSchemaSchemata = 17, + adSchemaSQLLanguages = 18, + adSchemaStatistics = 19, + adSchemaTables = 20, + adSchemaTranslations = 21, + adSchemaProviderTypes = 22, + adSchemaViews = 23, + adSchemaViewColumnUsage = 24, + adSchemaViewTableUsage = 25, + adSchemaProcedureParameters = 26, + adSchemaForeignKeys = 27, + adSchemaPrimaryKeys = 28, + adSchemaProcedureColumns = 29, + adSchemaDBInfoKeywords = 30, + adSchemaDBInfoLiterals = 31, + adSchemaCubes = 32, + adSchemaDimensions = 33, + adSchemaHierarchies = 34, + adSchemaLevels = 35, + adSchemaMeasures = 36, + adSchemaProperties = 37, + adSchemaMembers = 38 + +*/ + + function MetaTables($ttype = false, $showSchema = false, $mask = false) + { + $arr= array(); + $dbc = $this->_connectionID; + + $adors=@$dbc->OpenSchema(20);//tables + if ($adors){ + $f = $adors->Fields(2);//table/view name + $t = $adors->Fields(3);//table type + while (!$adors->EOF){ + $tt=substr($t->value,0,6); + if ($tt!='SYSTEM' && $tt !='ACCESS') + $arr[]=$f->value; + //print $f->value . ' ' . $t->value.'
'; + $adors->MoveNext(); + } + $adors->Close(); + } + + return $arr; + } + + function MetaColumns($table, $normalize=true) + { + $table = strtoupper($table); + $arr = array(); + $dbc = $this->_connectionID; + + $adors=@$dbc->OpenSchema(4);//tables + + if ($adors){ + $t = $adors->Fields(2);//table/view name + while (!$adors->EOF){ + + + if (strtoupper($t->Value) == $table) { + + $fld = new ADOFieldObject(); + $c = $adors->Fields(3); + $fld->name = $c->Value; + $fld->type = 'CHAR'; // cannot discover type in ADO! + $fld->max_length = -1; + $arr[strtoupper($fld->name)]=$fld; + } + + $adors->MoveNext(); + } + $adors->Close(); + } + $false = false; + return empty($arr) ? $false : $arr; + } + + + + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + + $dbc = $this->_connectionID; + $false = false; + + // return rs + if ($inputarr) { + + if (!empty($this->charPage)) + $oCmd = new COM('ADODB.Command',null,$this->charPage); + else + $oCmd = new COM('ADODB.Command'); + $oCmd->ActiveConnection = $dbc; + $oCmd->CommandText = $sql; + $oCmd->CommandType = 1; + + // Map by http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcreateparam.asp + // Check issue http://bugs.php.net/bug.php?id=40664 !!! + while(list(, $val) = each($inputarr)) { + $type = gettype($val); + $len=strlen($val); + if ($type == 'boolean') + $this->adoParameterType = 11; + else if ($type == 'integer') + $this->adoParameterType = 3; + else if ($type == 'double') + $this->adoParameterType = 5; + elseif ($type == 'string') + $this->adoParameterType = 202; + else if (($val === null) || (!defined($val))) + $len=1; + else + $this->adoParameterType = 130; + + // name, type, direction 1 = input, len, + $p = $oCmd->CreateParameter('name',$this->adoParameterType,1,$len,$val); + + $oCmd->Parameters->Append($p); + } + $p = false; + $rs = $oCmd->Execute(); + $e = $dbc->Errors; + if ($dbc->Errors->Count > 0) return $false; + return $rs; + } + + $rs = @$dbc->Execute($sql,$this->_affectedRows, $this->_execute_option); + + if ($dbc->Errors->Count > 0) return $false; + if (! $rs) return $false; + + if ($rs->State == 0) { + $true = true; + return $true; // 0 = adStateClosed means no records returned + } + return $rs; + } + + + function BeginTrans() + { + if ($this->transOff) return true; + + if (isset($this->_thisTransactions)) + if (!$this->_thisTransactions) return false; + else { + $o = $this->_connectionID->Properties("Transaction DDL"); + $this->_thisTransactions = $o ? true : false; + if (!$o) return false; + } + @$this->_connectionID->BeginTrans(); + $this->transCnt += 1; + return true; + } + + function CommitTrans($ok=true) + { + if (!$ok) return $this->RollbackTrans(); + if ($this->transOff) return true; + + @$this->_connectionID->CommitTrans(); + if ($this->transCnt) @$this->transCnt -= 1; + return true; + } + function RollbackTrans() { + if ($this->transOff) return true; + @$this->_connectionID->RollbackTrans(); + if ($this->transCnt) @$this->transCnt -= 1; + return true; + } + + /* Returns: the last error message from previous database operation */ + + function ErrorMsg() + { + if (!$this->_connectionID) return "No connection established"; + $errc = $this->_connectionID->Errors; + if (!$errc) return "No Errors object found"; + if ($errc->Count == 0) return ''; + $err = $errc->Item($errc->Count-1); + return $err->Description; + } + + function ErrorNo() + { + $errc = $this->_connectionID->Errors; + if ($errc->Count == 0) return 0; + $err = $errc->Item($errc->Count-1); + return $err->NativeError; + } + + // returns true or false + function _close() + { + if ($this->_connectionID) $this->_connectionID->Close(); + $this->_connectionID = false; + return true; + } + + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_ado extends ADORecordSet { + + var $bind = false; + var $databaseType = "ado"; + var $dataProvider = "ado"; + var $_tarr = false; // caches the types + var $_flds; // and field objects + var $canSeek = true; + var $hideErrors = true; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + return parent::__construct($id,$mode); + } + + + // returns the field object + function FetchField($fieldOffset = -1) { + $off=$fieldOffset+1; // offsets begin at 1 + + $o= new ADOFieldObject(); + $rs = $this->_queryID; + $f = $rs->Fields($fieldOffset); + $o->name = $f->Name; + $t = $f->Type; + $o->type = $this->MetaType($t); + $o->max_length = $f->DefinedSize; + $o->ado_type = $t; + + //print "off=$off name=$o->name type=$o->type len=$o->max_length
"; + return $o; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _initrs() + { + $rs = $this->_queryID; + $this->_numOfRows = $rs->RecordCount; + + $f = $rs->Fields; + $this->_numOfFields = $f->Count; + } + + + // should only be used to move forward as we normally use forward-only cursors + function _seek($row) + { + $rs = $this->_queryID; + // absoluteposition doesn't work -- my maths is wrong ? + // $rs->AbsolutePosition->$row-2; + // return true; + if ($this->_currentRow > $row) return false; + @$rs->Move((integer)$row - $this->_currentRow-1); //adBookmarkFirst + return true; + } + +/* + OLEDB types + + enum DBTYPEENUM + { DBTYPE_EMPTY = 0, + DBTYPE_NULL = 1, + DBTYPE_I2 = 2, + DBTYPE_I4 = 3, + DBTYPE_R4 = 4, + DBTYPE_R8 = 5, + DBTYPE_CY = 6, + DBTYPE_DATE = 7, + DBTYPE_BSTR = 8, + DBTYPE_IDISPATCH = 9, + DBTYPE_ERROR = 10, + DBTYPE_BOOL = 11, + DBTYPE_VARIANT = 12, + DBTYPE_IUNKNOWN = 13, + DBTYPE_DECIMAL = 14, + DBTYPE_UI1 = 17, + DBTYPE_ARRAY = 0x2000, + DBTYPE_BYREF = 0x4000, + DBTYPE_I1 = 16, + DBTYPE_UI2 = 18, + DBTYPE_UI4 = 19, + DBTYPE_I8 = 20, + DBTYPE_UI8 = 21, + DBTYPE_GUID = 72, + DBTYPE_VECTOR = 0x1000, + DBTYPE_RESERVED = 0x8000, + DBTYPE_BYTES = 128, + DBTYPE_STR = 129, + DBTYPE_WSTR = 130, + DBTYPE_NUMERIC = 131, + DBTYPE_UDT = 132, + DBTYPE_DBDATE = 133, + DBTYPE_DBTIME = 134, + DBTYPE_DBTIMESTAMP = 135 + + ADO Types + + adEmpty = 0, + adTinyInt = 16, + adSmallInt = 2, + adInteger = 3, + adBigInt = 20, + adUnsignedTinyInt = 17, + adUnsignedSmallInt = 18, + adUnsignedInt = 19, + adUnsignedBigInt = 21, + adSingle = 4, + adDouble = 5, + adCurrency = 6, + adDecimal = 14, + adNumeric = 131, + adBoolean = 11, + adError = 10, + adUserDefined = 132, + adVariant = 12, + adIDispatch = 9, + adIUnknown = 13, + adGUID = 72, + adDate = 7, + adDBDate = 133, + adDBTime = 134, + adDBTimeStamp = 135, + adBSTR = 8, + adChar = 129, + adVarChar = 200, + adLongVarChar = 201, + adWChar = 130, + adVarWChar = 202, + adLongVarWChar = 203, + adBinary = 128, + adVarBinary = 204, + adLongVarBinary = 205, + adChapter = 136, + adFileTime = 64, + adDBFileTime = 137, + adPropVariant = 138, + adVarNumeric = 139 +*/ + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + if (!is_numeric($t)) return $t; + + switch ($t) { + case 0: + case 12: // variant + case 8: // bstr + case 129: //char + case 130: //wc + case 200: // varc + case 202:// varWC + case 128: // bin + case 204: // varBin + case 72: // guid + if ($len <= $this->blobSize) return 'C'; + + case 201: + case 203: + return 'X'; + case 128: + case 204: + case 205: + return 'B'; + case 7: + case 133: return 'D'; + + case 134: + case 135: return 'T'; + + case 11: return 'L'; + + case 16:// adTinyInt = 16, + case 2://adSmallInt = 2, + case 3://adInteger = 3, + case 4://adBigInt = 20, + case 17://adUnsignedTinyInt = 17, + case 18://adUnsignedSmallInt = 18, + case 19://adUnsignedInt = 19, + case 20://adUnsignedBigInt = 21, + return 'I'; + default: return 'N'; + } + } + + // time stamp not supported yet + function _fetch() + { + $rs = $this->_queryID; + if (!$rs or $rs->EOF) { + $this->fields = false; + return false; + } + $this->fields = array(); + + if (!$this->_tarr) { + $tarr = array(); + $flds = array(); + for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { + $f = $rs->Fields($i); + $flds[] = $f; + $tarr[] = $f->Type; + } + // bind types and flds only once + $this->_tarr = $tarr; + $this->_flds = $flds; + } + $t = reset($this->_tarr); + $f = reset($this->_flds); + + if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null + for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { + //echo "

",$t,' ';var_dump($f->value); echo '

'; + switch($t) { + case 135: // timestamp + if (!strlen((string)$f->value)) $this->fields[] = false; + else { + if (!is_numeric($f->value)) # $val = variant_date_to_timestamp($f->value); + // VT_DATE stores dates as (float) fractional days since 1899/12/30 00:00:00 + $val=(float) variant_cast($f->value,VT_R8)*3600*24-2209161600; + else + $val = $f->value; + $this->fields[] = adodb_date('Y-m-d H:i:s',$val); + } + break; + case 133:// A date value (yyyymmdd) + if ($val = $f->value) { + $this->fields[] = substr($val,0,4).'-'.substr($val,4,2).'-'.substr($val,6,2); + } else + $this->fields[] = false; + break; + case 7: // adDate + if (!strlen((string)$f->value)) $this->fields[] = false; + else { + if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); + else $val = $f->value; + + if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val); + else $this->fields[] = adodb_date('Y-m-d H:i:s',$val); + } + break; + case 1: // null + $this->fields[] = false; + break; + case 6: // currency is not supported properly; + ADOConnection::outp( ''.$f->Name.': currency type not supported by PHP'); + $this->fields[] = (float) $f->value; + break; + case 11: //BIT; + $val = ""; + if(is_bool($f->value)) { + if($f->value==true) $val = 1; + else $val = 0; + } + if(is_null($f->value)) $val = null; + + $this->fields[] = $val; + break; + default: + $this->fields[] = $f->value; + break; + } + //print " $f->value $t, "; + $f = next($this->_flds); + $t = next($this->_tarr); + } // for + if ($this->hideErrors) error_reporting($olde); + @$rs->MoveNext(); // @ needed for some versions of PHP! + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + return true; + } + + function NextRecordSet() + { + $rs = $this->_queryID; + $this->_queryID = $rs->NextRecordSet(); + //$this->_queryID = $this->_QueryId->NextRecordSet(); + if ($this->_queryID == null) return false; + + $this->_currentRow = -1; + $this->_currentPage = -1; + $this->bind = false; + $this->fields = false; + $this->_flds = false; + $this->_tarr = false; + + $this->_inited = false; + $this->Init(); + return true; + } + + function _close() { + $this->_flds = false; + @$this->_queryID->Close();// by Pete Dishman (peterd@telephonetics.co.uk) + $this->_queryID = false; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-ado5.inc.php b/ehcp/adodb5/drivers/adodb-ado5.inc.php new file mode 100644 index 0000000..0b0d9ad --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ado5.inc.php @@ -0,0 +1,708 @@ +_affectedRows = new VARIANT; + } + + function ServerInfo() + { + if (!empty($this->_connectionID)) $desc = $this->_connectionID->provider; + return array('description' => $desc, 'version' => ''); + } + + function _affectedrows() + { + if (PHP_VERSION >= 5) return $this->_affectedRows; + + return $this->_affectedRows->value; + } + + // you can also pass a connection string like this: + // + // $DB->Connect('USER ID=sa;PASSWORD=pwd;SERVER=mangrove;DATABASE=ai',false,false,'SQLOLEDB'); + function _connect($argHostname, $argUsername, $argPassword,$argDBorProvider, $argProvider= '') + { + // two modes + // - if $argProvider is empty, we assume that $argDBorProvider holds provider -- this is for backward compat + // - if $argProvider is not empty, then $argDBorProvider holds db + + + if ($argProvider) { + $argDatabasename = $argDBorProvider; + } else { + $argDatabasename = ''; + if ($argDBorProvider) $argProvider = $argDBorProvider; + else if (stripos($argHostname,'PROVIDER') === false) /* full conn string is not in $argHostname */ + $argProvider = 'MSDASQL'; + } + + + try { + $u = 'UID'; + $p = 'PWD'; + + if (!empty($this->charPage)) + $dbc = new COM('ADODB.Connection',null,$this->charPage); + else + $dbc = new COM('ADODB.Connection'); + + if (! $dbc) return false; + + /* special support if provider is mssql or access */ + if ($argProvider=='mssql') { + $u = 'User Id'; //User parameter name for OLEDB + $p = 'Password'; + $argProvider = "SQLOLEDB"; // SQL Server Provider + + // not yet + //if ($argDatabasename) $argHostname .= ";Initial Catalog=$argDatabasename"; + + //use trusted conection for SQL if username not specified + if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes"; + } else if ($argProvider=='access') + $argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider + + if ($argProvider) $dbc->Provider = $argProvider; + + if ($argProvider) $argHostname = "PROVIDER=$argProvider;DRIVER={SQL Server};SERVER=$argHostname"; + + + if ($argDatabasename) $argHostname .= ";DATABASE=$argDatabasename"; + if ($argUsername) $argHostname .= ";$u=$argUsername"; + if ($argPassword)$argHostname .= ";$p=$argPassword"; + + if ($this->debug) ADOConnection::outp( "Host=".$argHostname."
\n version=$dbc->version"); + // @ added below for php 4.0.1 and earlier + @$dbc->Open((string) $argHostname); + + $this->_connectionID = $dbc; + + $dbc->CursorLocation = $this->_cursor_location; + return $dbc->State > 0; + } catch (exception $e) { + if ($this->debug) echo "
",$argHostname,"\n",$e,"
\n"; + } + + return false; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argProvider='MSDASQL') + { + return $this->_connect($argHostname,$argUsername,$argPassword,$argProvider); + } + +/* + adSchemaCatalogs = 1, + adSchemaCharacterSets = 2, + adSchemaCollations = 3, + adSchemaColumns = 4, + adSchemaCheckConstraints = 5, + adSchemaConstraintColumnUsage = 6, + adSchemaConstraintTableUsage = 7, + adSchemaKeyColumnUsage = 8, + adSchemaReferentialContraints = 9, + adSchemaTableConstraints = 10, + adSchemaColumnsDomainUsage = 11, + adSchemaIndexes = 12, + adSchemaColumnPrivileges = 13, + adSchemaTablePrivileges = 14, + adSchemaUsagePrivileges = 15, + adSchemaProcedures = 16, + adSchemaSchemata = 17, + adSchemaSQLLanguages = 18, + adSchemaStatistics = 19, + adSchemaTables = 20, + adSchemaTranslations = 21, + adSchemaProviderTypes = 22, + adSchemaViews = 23, + adSchemaViewColumnUsage = 24, + adSchemaViewTableUsage = 25, + adSchemaProcedureParameters = 26, + adSchemaForeignKeys = 27, + adSchemaPrimaryKeys = 28, + adSchemaProcedureColumns = 29, + adSchemaDBInfoKeywords = 30, + adSchemaDBInfoLiterals = 31, + adSchemaCubes = 32, + adSchemaDimensions = 33, + adSchemaHierarchies = 34, + adSchemaLevels = 35, + adSchemaMeasures = 36, + adSchemaProperties = 37, + adSchemaMembers = 38 + +*/ + + function MetaTables($ttype = false, $showSchema = false, $mask = false) + { + $arr= array(); + $dbc = $this->_connectionID; + + $adors=@$dbc->OpenSchema(20);//tables + if ($adors){ + $f = $adors->Fields(2);//table/view name + $t = $adors->Fields(3);//table type + while (!$adors->EOF){ + $tt=substr($t->value,0,6); + if ($tt!='SYSTEM' && $tt !='ACCESS') + $arr[]=$f->value; + //print $f->value . ' ' . $t->value.'
'; + $adors->MoveNext(); + } + $adors->Close(); + } + + return $arr; + } + + function MetaColumns($table, $normalize=true) + { + $table = strtoupper($table); + $arr= array(); + $dbc = $this->_connectionID; + + $adors=@$dbc->OpenSchema(4);//tables + + if ($adors){ + $t = $adors->Fields(2);//table/view name + while (!$adors->EOF){ + + + if (strtoupper($t->Value) == $table) { + + $fld = new ADOFieldObject(); + $c = $adors->Fields(3); + $fld->name = $c->Value; + $fld->type = 'CHAR'; // cannot discover type in ADO! + $fld->max_length = -1; + $arr[strtoupper($fld->name)]=$fld; + } + + $adors->MoveNext(); + } + $adors->Close(); + } + + return $arr; + } + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + try { // In PHP5, all COM errors are exceptions, so to maintain old behaviour... + + $dbc = $this->_connectionID; + + // return rs + + $false = false; + + if ($inputarr) { + + if (!empty($this->charPage)) + $oCmd = new COM('ADODB.Command',null,$this->charPage); + else + $oCmd = new COM('ADODB.Command'); + $oCmd->ActiveConnection = $dbc; + $oCmd->CommandText = $sql; + $oCmd->CommandType = 1; + + while(list(, $val) = each($inputarr)) { + $type = gettype($val); + $len=strlen($val); + if ($type == 'boolean') + $this->adoParameterType = 11; + else if ($type == 'integer') + $this->adoParameterType = 3; + else if ($type == 'double') + $this->adoParameterType = 5; + elseif ($type == 'string') + $this->adoParameterType = 202; + else if (($val === null) || (!defined($val))) + $len=1; + else + $this->adoParameterType = 130; + + // name, type, direction 1 = input, len, + $p = $oCmd->CreateParameter('name',$this->adoParameterType,1,$len,$val); + + $oCmd->Parameters->Append($p); + } + + $p = false; + $rs = $oCmd->Execute(); + $e = $dbc->Errors; + if ($dbc->Errors->Count > 0) return $false; + return $rs; + } + + $rs = @$dbc->Execute($sql,$this->_affectedRows, $this->_execute_option); + + if ($dbc->Errors->Count > 0) return $false; + if (! $rs) return $false; + + if ($rs->State == 0) { + $true = true; + return $true; // 0 = adStateClosed means no records returned + } + return $rs; + + } catch (exception $e) { + + } + return $false; + } + + + function BeginTrans() + { + if ($this->transOff) return true; + + if (isset($this->_thisTransactions)) + if (!$this->_thisTransactions) return false; + else { + $o = $this->_connectionID->Properties("Transaction DDL"); + $this->_thisTransactions = $o ? true : false; + if (!$o) return false; + } + @$this->_connectionID->BeginTrans(); + $this->transCnt += 1; + return true; + } + function CommitTrans($ok=true) + { + if (!$ok) return $this->RollbackTrans(); + if ($this->transOff) return true; + + @$this->_connectionID->CommitTrans(); + if ($this->transCnt) @$this->transCnt -= 1; + return true; + } + function RollbackTrans() { + if ($this->transOff) return true; + @$this->_connectionID->RollbackTrans(); + if ($this->transCnt) @$this->transCnt -= 1; + return true; + } + + /* Returns: the last error message from previous database operation */ + + function ErrorMsg() + { + if (!$this->_connectionID) return "No connection established"; + $errmsg = ''; + + try { + $errc = $this->_connectionID->Errors; + if (!$errc) return "No Errors object found"; + if ($errc->Count == 0) return ''; + $err = $errc->Item($errc->Count-1); + $errmsg = $err->Description; + }catch(exception $e) { + } + return $errmsg; + } + + function ErrorNo() + { + $errc = $this->_connectionID->Errors; + if ($errc->Count == 0) return 0; + $err = $errc->Item($errc->Count-1); + return $err->NativeError; + } + + // returns true or false + function _close() + { + if ($this->_connectionID) $this->_connectionID->Close(); + $this->_connectionID = false; + return true; + } + + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_ado extends ADORecordSet { + + var $bind = false; + var $databaseType = "ado"; + var $dataProvider = "ado"; + var $_tarr = false; // caches the types + var $_flds; // and field objects + var $canSeek = true; + var $hideErrors = true; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + return parent::__construct($id,$mode); + } + + + // returns the field object + function FetchField($fieldOffset = -1) { + $off=$fieldOffset+1; // offsets begin at 1 + + $o= new ADOFieldObject(); + $rs = $this->_queryID; + if (!$rs) return false; + + $f = $rs->Fields($fieldOffset); + $o->name = $f->Name; + $t = $f->Type; + $o->type = $this->MetaType($t); + $o->max_length = $f->DefinedSize; + $o->ado_type = $t; + + + //print "off=$off name=$o->name type=$o->type len=$o->max_length
"; + return $o; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _initrs() + { + $rs = $this->_queryID; + + try { + $this->_numOfRows = $rs->RecordCount; + } catch (Exception $e) { + $this->_numOfRows = -1; + } + $f = $rs->Fields; + $this->_numOfFields = $f->Count; + } + + + // should only be used to move forward as we normally use forward-only cursors + function _seek($row) + { + $rs = $this->_queryID; + // absoluteposition doesn't work -- my maths is wrong ? + // $rs->AbsolutePosition->$row-2; + // return true; + if ($this->_currentRow > $row) return false; + @$rs->Move((integer)$row - $this->_currentRow-1); //adBookmarkFirst + return true; + } + +/* + OLEDB types + + enum DBTYPEENUM + { DBTYPE_EMPTY = 0, + DBTYPE_NULL = 1, + DBTYPE_I2 = 2, + DBTYPE_I4 = 3, + DBTYPE_R4 = 4, + DBTYPE_R8 = 5, + DBTYPE_CY = 6, + DBTYPE_DATE = 7, + DBTYPE_BSTR = 8, + DBTYPE_IDISPATCH = 9, + DBTYPE_ERROR = 10, + DBTYPE_BOOL = 11, + DBTYPE_VARIANT = 12, + DBTYPE_IUNKNOWN = 13, + DBTYPE_DECIMAL = 14, + DBTYPE_UI1 = 17, + DBTYPE_ARRAY = 0x2000, + DBTYPE_BYREF = 0x4000, + DBTYPE_I1 = 16, + DBTYPE_UI2 = 18, + DBTYPE_UI4 = 19, + DBTYPE_I8 = 20, + DBTYPE_UI8 = 21, + DBTYPE_GUID = 72, + DBTYPE_VECTOR = 0x1000, + DBTYPE_RESERVED = 0x8000, + DBTYPE_BYTES = 128, + DBTYPE_STR = 129, + DBTYPE_WSTR = 130, + DBTYPE_NUMERIC = 131, + DBTYPE_UDT = 132, + DBTYPE_DBDATE = 133, + DBTYPE_DBTIME = 134, + DBTYPE_DBTIMESTAMP = 135 + + ADO Types + + adEmpty = 0, + adTinyInt = 16, + adSmallInt = 2, + adInteger = 3, + adBigInt = 20, + adUnsignedTinyInt = 17, + adUnsignedSmallInt = 18, + adUnsignedInt = 19, + adUnsignedBigInt = 21, + adSingle = 4, + adDouble = 5, + adCurrency = 6, + adDecimal = 14, + adNumeric = 131, + adBoolean = 11, + adError = 10, + adUserDefined = 132, + adVariant = 12, + adIDispatch = 9, + adIUnknown = 13, + adGUID = 72, + adDate = 7, + adDBDate = 133, + adDBTime = 134, + adDBTimeStamp = 135, + adBSTR = 8, + adChar = 129, + adVarChar = 200, + adLongVarChar = 201, + adWChar = 130, + adVarWChar = 202, + adLongVarWChar = 203, + adBinary = 128, + adVarBinary = 204, + adLongVarBinary = 205, + adChapter = 136, + adFileTime = 64, + adDBFileTime = 137, + adPropVariant = 138, + adVarNumeric = 139 +*/ + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + if (!is_numeric($t)) return $t; + + switch ($t) { + case 0: + case 12: // variant + case 8: // bstr + case 129: //char + case 130: //wc + case 200: // varc + case 202:// varWC + case 128: // bin + case 204: // varBin + case 72: // guid + if ($len <= $this->blobSize) return 'C'; + + case 201: + case 203: + return 'X'; + case 128: + case 204: + case 205: + return 'B'; + case 7: + case 133: return 'D'; + + case 134: + case 135: return 'T'; + + case 11: return 'L'; + + case 16:// adTinyInt = 16, + case 2://adSmallInt = 2, + case 3://adInteger = 3, + case 4://adBigInt = 20, + case 17://adUnsignedTinyInt = 17, + case 18://adUnsignedSmallInt = 18, + case 19://adUnsignedInt = 19, + case 20://adUnsignedBigInt = 21, + return 'I'; + default: return 'N'; + } + } + + // time stamp not supported yet + function _fetch() + { + $rs = $this->_queryID; + if (!$rs or $rs->EOF) { + $this->fields = false; + return false; + } + $this->fields = array(); + + if (!$this->_tarr) { + $tarr = array(); + $flds = array(); + for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { + $f = $rs->Fields($i); + $flds[] = $f; + $tarr[] = $f->Type; + } + // bind types and flds only once + $this->_tarr = $tarr; + $this->_flds = $flds; + } + $t = reset($this->_tarr); + $f = reset($this->_flds); + + if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null + for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { + //echo "

",$t,' ';var_dump($f->value); echo '

'; + switch($t) { + case 135: // timestamp + if (!strlen((string)$f->value)) $this->fields[] = false; + else { + if (!is_numeric($f->value)) # $val = variant_date_to_timestamp($f->value); + // VT_DATE stores dates as (float) fractional days since 1899/12/30 00:00:00 + $val= (float) variant_cast($f->value,VT_R8)*3600*24-2209161600; + else + $val = $f->value; + $this->fields[] = adodb_date('Y-m-d H:i:s',$val); + } + break; + case 133:// A date value (yyyymmdd) + if ($val = $f->value) { + $this->fields[] = substr($val,0,4).'-'.substr($val,4,2).'-'.substr($val,6,2); + } else + $this->fields[] = false; + break; + case 7: // adDate + if (!strlen((string)$f->value)) $this->fields[] = false; + else { + if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); + else $val = $f->value; + + if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val); + else $this->fields[] = adodb_date('Y-m-d H:i:s',$val); + } + break; + case 1: // null + $this->fields[] = false; + break; + case 20: + case 21: // bigint (64 bit) + $this->fields[] = (float) $f->value; // if 64 bit PHP, could use (int) + break; + case 6: // currency is not supported properly; + ADOConnection::outp( ''.$f->Name.': currency type not supported by PHP'); + $this->fields[] = (float) $f->value; + break; + case 11: //BIT; + $val = ""; + if(is_bool($f->value)) { + if($f->value==true) $val = 1; + else $val = 0; + } + if(is_null($f->value)) $val = null; + + $this->fields[] = $val; + break; + default: + $this->fields[] = $f->value; + break; + } + //print " $f->value $t, "; + $f = next($this->_flds); + $t = next($this->_tarr); + } // for + if ($this->hideErrors) error_reporting($olde); + @$rs->MoveNext(); // @ needed for some versions of PHP! + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + return true; + } + + function NextRecordSet() + { + $rs = $this->_queryID; + $this->_queryID = $rs->NextRecordSet(); + //$this->_queryID = $this->_QueryId->NextRecordSet(); + if ($this->_queryID == null) return false; + + $this->_currentRow = -1; + $this->_currentPage = -1; + $this->bind = false; + $this->fields = false; + $this->_flds = false; + $this->_tarr = false; + + $this->_inited = false; + $this->Init(); + return true; + } + + function _close() { + $this->_flds = false; + try { + @$this->_queryID->Close();// by Pete Dishman (peterd@telephonetics.co.uk) + } catch (Exception $e) { + } + $this->_queryID = false; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-ado_access.inc.php b/ehcp/adodb5/drivers/adodb-ado_access.inc.php new file mode 100644 index 0000000..d5b33ce --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ado_access.inc.php @@ -0,0 +1,50 @@ += 5) include(ADODB_DIR."/drivers/adodb-ado5.inc.php"); + else include(ADODB_DIR."/drivers/adodb-ado.inc.php"); +} + +class ADODB_ado_access extends ADODB_ado { + var $databaseType = 'ado_access'; + var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE + var $fmtDate = "#Y-m-d#"; + var $fmtTimeStamp = "#Y-m-d h:i:sA#";// note no comma + var $sysDate = "FORMAT(NOW,'yyyy-mm-dd')"; + var $sysTimeStamp = 'NOW'; + var $upperCase = 'ucase'; + + /*function BeginTrans() { return false;} + + function CommitTrans() { return false;} + + function RollbackTrans() { return false;}*/ + +} + + +class ADORecordSet_ado_access extends ADORecordSet_ado { + + var $databaseType = "ado_access"; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-ado_mssql.inc.php b/ehcp/adodb5/drivers/adodb-ado_mssql.inc.php new file mode 100644 index 0000000..8915e39 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ado_mssql.inc.php @@ -0,0 +1,150 @@ += 5) include(ADODB_DIR."/drivers/adodb-ado5.inc.php"); + else include(ADODB_DIR."/drivers/adodb-ado.inc.php"); +} + + +class ADODB_ado_mssql extends ADODB_ado { + var $databaseType = 'ado_mssql'; + var $hasTop = 'top'; + var $hasInsertID = true; + var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; + var $sysTimeStamp = 'GetDate()'; + var $leftOuter = '*='; + var $rightOuter = '=*'; + var $ansiOuter = true; // for mssql7 or later + var $substr = "substring"; + var $length = 'len'; + var $_dropSeqSQL = "drop table %s"; + + //var $_inTransaction = 1; // always open recordsets, so no transaction problems. + + function _insertid() + { + return $this->GetOne('select SCOPE_IDENTITY()'); + } + + function _affectedrows() + { + return $this->GetOne('select @@rowcount'); + } + + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET TRANSACTION ".$transaction_mode); + } + + function qstr($s,$magic_quotes=false) + { + $s = ADOConnection::qstr($s, $magic_quotes); + return str_replace("\0", "\\\\000", $s); + } + + function MetaColumns($table, $normalize=true) + { + $table = strtoupper($table); + $arr= array(); + $dbc = $this->_connectionID; + + $osoptions = array(); + $osoptions[0] = null; + $osoptions[1] = null; + $osoptions[2] = $table; + $osoptions[3] = null; + + $adors=@$dbc->OpenSchema(4, $osoptions);//tables + + if ($adors){ + while (!$adors->EOF){ + $fld = new ADOFieldObject(); + $c = $adors->Fields(3); + $fld->name = $c->Value; + $fld->type = 'CHAR'; // cannot discover type in ADO! + $fld->max_length = -1; + $arr[strtoupper($fld->name)]=$fld; + + $adors->MoveNext(); + } + $adors->Close(); + } + $false = false; + return empty($arr) ? $false : $arr; + } + + function CreateSequence($seq='adodbseq',$start=1) + { + + $this->Execute('BEGIN TRANSACTION adodbseq'); + $start -= 1; + $this->Execute("create table $seq (id float(53))"); + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + $this->Execute('ROLLBACK TRANSACTION adodbseq'); + return false; + } + $this->Execute('COMMIT TRANSACTION adodbseq'); + return true; + } + + function GenID($seq='adodbseq',$start=1) + { + //$this->debug=1; + $this->Execute('BEGIN TRANSACTION adodbseq'); + $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1"); + if (!$ok) { + $this->Execute("create table $seq (id float(53))"); + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + $this->Execute('ROLLBACK TRANSACTION adodbseq'); + return false; + } + $this->Execute('COMMIT TRANSACTION adodbseq'); + return $start; + } + $num = $this->GetOne("select id from $seq"); + $this->Execute('COMMIT TRANSACTION adodbseq'); + return $num; + + // in old implementation, pre 1.90, we returned GUID... + //return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'"); + } + + } // end class + + class ADORecordSet_ado_mssql extends ADORecordSet_ado { + + var $databaseType = 'ado_mssql'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-ads.inc.php b/ehcp/adodb5/drivers/adodb-ads.inc.php new file mode 100644 index 0000000..d59df66 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ads.inc.php @@ -0,0 +1,784 @@ +_haserrorfunctions = ADODB_PHPVER >= 0x4050; + $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; + } + + // returns true or false + function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('ads_connect')) return null; + + if ($this->debug && $argDatabasename && $this->databaseType != 'vfp') { + ADOConnection::outp("For Advantage Connect(), $argDatabasename is not used. Place dsn in 1st parameter."); + } + if (isset($php_errormsg)) $php_errormsg = ''; + if ($this->curmode === false) $this->_connectionID = ads_connect($argDSN,$argUsername,$argPassword); + else $this->_connectionID = ads_connect($argDSN,$argUsername,$argPassword,$this->curmode); + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + return $this->_connectionID != false; + } + + // returns true or false + function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('ads_connect')) return null; + + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if ($this->debug && $argDatabasename) { + ADOConnection::outp("For PConnect(), $argDatabasename is not used. Place dsn in 1st parameter."); + } + // print "dsn=$argDSN u=$argUsername p=$argPassword
"; flush(); + if ($this->curmode === false) $this->_connectionID = ads_connect($argDSN,$argUsername,$argPassword); + else $this->_connectionID = ads_pconnect($argDSN,$argUsername,$argPassword,$this->curmode); + + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if ($this->_connectionID && $this->autoRollback) @ads_rollback($this->_connectionID); + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + return $this->_connectionID != false; + } + + // returns the Server version and Description + function ServerInfo() + { + + if (!empty($this->host) && ADODB_PHPVER >= 0x4300) { + $stmt = $this->Prepare('EXECUTE PROCEDURE sp_mgGetInstallInfo()'); + $res = $this->Execute($stmt); + if(!$res) + print $this->ErrorMsg(); + else{ + $ret["version"]= $res->fields[3]; + $ret["description"]="Advantage Database Server"; + return $ret; + } + } + else { + return ADOConnection::ServerInfo(); + } + } + + + // returns true or false + function CreateSequence($seqname = 'adodbseq', $start = 1) + { + $res = $this->Execute("CREATE TABLE $seqname ( ID autoinc( 1 ) ) IN DATABASE"); + if(!$res){ + print $this->ErrorMsg(); + return false; + } + else + return true; + + } + + // returns true or false + function DropSequence($seqname = 'adodbseq') + { + $res = $this->Execute("DROP TABLE $seqname"); + if(!$res){ + print $this->ErrorMsg(); + return false; + } + else + return true; + } + + + // returns the generated ID or false + // checks if the table already exists, else creates the table and inserts a record into the table + // and gets the ID number of the last inserted record. + function GenID($seqname = 'adodbseq', $start = 1) + { + $go = $this->Execute("select * from $seqname"); + if (!$go){ + $res = $this->Execute("CREATE TABLE $seqname ( ID autoinc( 1 ) ) IN DATABASE"); + if(!res){ + print $this->ErrorMsg(); + return false; + } + } + $res = $this->Execute("INSERT INTO $seqname VALUES( DEFAULT )"); + if(!$res){ + print $this->ErrorMsg(); + return false; + } + else{ + $gen = $this->Execute("SELECT LastAutoInc( STATEMENT ) FROM system.iota"); + $ret = $gen->fields[0]; + return $ret; + } + + } + + + + + function ErrorMsg() + { + if ($this->_haserrorfunctions) { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (empty($this->_connectionID)) return @ads_errormsg(); + return @ads_errormsg($this->_connectionID); + } else return ADOConnection::ErrorMsg(); + } + + + function ErrorNo() + { + + if ($this->_haserrorfunctions) { + if ($this->_errorCode !== false) { + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + return (strlen($this->_errorCode)<=2) ? 0 : $this->_errorCode; + } + + if (empty($this->_connectionID)) $e = @ads_error(); + else $e = @ads_error($this->_connectionID); + + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + // so we check and patch + if (strlen($e)<=2) return 0; + return $e; + } else return ADOConnection::ErrorNo(); + } + + + + function BeginTrans() + { + if (!$this->hasTransactions) return false; + if ($this->transOff) return true; + $this->transCnt += 1; + $this->_autocommit = false; + return ads_autocommit($this->_connectionID,false); + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = ads_commit($this->_connectionID); + ads_autocommit($this->_connectionID,true); + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = ads_rollback($this->_connectionID); + ads_autocommit($this->_connectionID,true); + return $ret; + } + + + // Returns tables,Views or both on succesfull execution. Returns + // tables by default on succesfull execustion. + function &MetaTables($ttype = false, $showSchema = false, $mask = false) + { + $recordSet1 = $this->Execute("select * from system.tables"); + if(!$recordSet1){ + print $this->ErrorMsg(); + return false; + } + $recordSet2 = $this->Execute("select * from system.views"); + if(!$recordSet2){ + print $this->ErrorMsg(); + return false; + } + $i=0; + while (!$recordSet1->EOF){ + $arr["$i"] = $recordSet1->fields[0]; + $recordSet1->MoveNext(); + $i=$i+1; + } + if($ttype=='FALSE'){ + while (!$recordSet2->EOF){ + $arr["$i"] = $recordSet2->fields[0]; + $recordSet2->MoveNext(); + $i=$i+1; + } + return $arr; + } + elseif($ttype=='VIEWS'){ + while (!$recordSet2->EOF){ + $arrV["$i"] = $recordSet2->fields[0]; + $recordSet2->MoveNext(); + $i=$i+1; + } + return $arrV; + } + else{ + return $arr; + } + + } + + function &MetaPrimaryKeys($table, $owner = false) + { + $recordSet = $this->Execute("select table_primary_key from system.tables where name='$table'"); + if(!$recordSet){ + print $this->ErrorMsg(); + return false; + } + $i=0; + while (!$recordSet->EOF){ + $arr["$i"] = $recordSet->fields[0]; + $recordSet->MoveNext(); + $i=$i+1; + } + return $arr; + } + +/* +See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcdatetime_data_type_changes.asp +/ SQL data type codes / +#define SQL_UNKNOWN_TYPE 0 +#define SQL_CHAR 1 +#define SQL_NUMERIC 2 +#define SQL_DECIMAL 3 +#define SQL_INTEGER 4 +#define SQL_SMALLINT 5 +#define SQL_FLOAT 6 +#define SQL_REAL 7 +#define SQL_DOUBLE 8 +#if (ODBCVER >= 0x0300) +#define SQL_DATETIME 9 +#endif +#define SQL_VARCHAR 12 + + +/ One-parameter shortcuts for date/time data types / +#if (ODBCVER >= 0x0300) +#define SQL_TYPE_DATE 91 +#define SQL_TYPE_TIME 92 +#define SQL_TYPE_TIMESTAMP 93 + +#define SQL_UNICODE (-95) +#define SQL_UNICODE_VARCHAR (-96) +#define SQL_UNICODE_LONGVARCHAR (-97) +*/ + function ODBCTypes($t) + { + switch ((integer)$t) { + case 1: + case 12: + case 0: + case -95: + case -96: + return 'C'; + case -97: + case -1: //text + return 'X'; + case -4: //image + return 'B'; + + case 9: + case 91: + return 'D'; + + case 10: + case 11: + case 92: + case 93: + return 'T'; + + case 4: + case 5: + case -6: + return 'I'; + + case -11: // uniqidentifier + return 'R'; + case -7: //bit + return 'L'; + + default: + return 'N'; + } + } + + function &MetaColumns($table, $normalize = true) + { + global $ADODB_FETCH_MODE; + + $false = false; + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + /*if (false) { // after testing, confirmed that the following does not work becoz of a bug + $qid2 = ads_tables($this->_connectionID); + $rs = new ADORecordSet_ads($qid2); + $ADODB_FETCH_MODE = $savem; + if (!$rs) return false; + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + $rs->_fetch(); + + while (!$rs->EOF) { + if ($table == strtoupper($rs->fields[2])) { + $q = $rs->fields[0]; + $o = $rs->fields[1]; + break; + } + $rs->MoveNext(); + } + $rs->Close(); + + $qid = ads_columns($this->_connectionID,$q,$o,strtoupper($table),'%'); + } */ + + switch ($this->databaseType) { + case 'access': + case 'vfp': + $qid = ads_columns($this->_connectionID);#,'%','',strtoupper($table),'%'); + break; + + + case 'db2': + $colname = "%"; + $qid = ads_columns($this->_connectionID, "", $schema, $table, $colname); + break; + + default: + $qid = @ads_columns($this->_connectionID,'%','%',strtoupper($table),'%'); + if (empty($qid)) $qid = ads_columns($this->_connectionID); + break; + } + if (empty($qid)) return $false; + + $rs = new ADORecordSet_ads($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return $false; + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + $rs->_fetch(); + + $retarr = array(); + + /* + $rs->fields indices + 0 TABLE_QUALIFIER + 1 TABLE_SCHEM + 2 TABLE_NAME + 3 COLUMN_NAME + 4 DATA_TYPE + 5 TYPE_NAME + 6 PRECISION + 7 LENGTH + 8 SCALE + 9 RADIX + 10 NULLABLE + 11 REMARKS + */ + while (!$rs->EOF) { + // adodb_pr($rs->fields); + if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[3]; + $fld->type = $this->ODBCTypes($rs->fields[4]); + + // ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp + // access uses precision to store length for char/varchar + if ($fld->type == 'C' or $fld->type == 'X') { + if ($this->databaseType == 'access') + $fld->max_length = $rs->fields[6]; + else if ($rs->fields[4] <= -95) // UNICODE + $fld->max_length = $rs->fields[7]/2; + else + $fld->max_length = $rs->fields[7]; + } else + $fld->max_length = $rs->fields[7]; + $fld->not_null = !empty($rs->fields[10]); + $fld->scale = $rs->fields[8]; + $retarr[strtoupper($fld->name)] = $fld; + } else if (sizeof($retarr)>0) + break; + $rs->MoveNext(); + } + $rs->Close(); //-- crashes 4.03pl1 -- why? + + if (empty($retarr)) $retarr = false; + return $retarr; + } + + // Returns an array of columns names for a given table + function &MetaColumnNames($table, $numIndexes = false, $useattnum = false) + { + $recordSet = $this->Execute("select name from system.columns where parent='$table'"); + if(!$recordSet){ + print $this->ErrorMsg(); + return false; + } + else{ + $i=0; + while (!$recordSet->EOF){ + $arr["FIELD$i"] = $recordSet->fields[0]; + $recordSet->MoveNext(); + $i=$i+1; + } + return $arr; + } + } + + + function Prepare($sql) + { + if (! $this->_bindInputArray) return $sql; // no binding + $stmt = ads_prepare($this->_connectionID,$sql); + if (!$stmt) { + // we don't know whether odbc driver is parsing prepared stmts, so just return sql + return $sql; + } + return array($sql,$stmt,false); + } + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + GLOBAL $php_errormsg; + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_error = ''; + + if ($inputarr) { + if (is_array($sql)) { + $stmtid = $sql[1]; + } else { + $stmtid = ads_prepare($this->_connectionID,$sql); + + if ($stmtid == false) { + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + return false; + } + } + + if (! ads_execute($stmtid,$inputarr)) { + //@ads_free_result($stmtid); + if ($this->_haserrorfunctions) { + $this->_errorMsg = ads_errormsg(); + $this->_errorCode = ads_error(); + } + return false; + } + + } else if (is_array($sql)) { + $stmtid = $sql[1]; + if (!ads_execute($stmtid)) { + //@ads_free_result($stmtid); + if ($this->_haserrorfunctions) { + $this->_errorMsg = ads_errormsg(); + $this->_errorCode = ads_error(); + } + return false; + } + } else + { + + $stmtid = ads_exec($this->_connectionID,$sql); + + } + + $this->_lastAffectedRows = 0; + + if ($stmtid) + { + + if (@ads_num_fields($stmtid) == 0) { + $this->_lastAffectedRows = ads_num_rows($stmtid); + $stmtid = true; + + } else { + + $this->_lastAffectedRows = 0; + ads_binmode($stmtid,$this->binmode); + ads_longreadlen($stmtid,$this->maxblobsize); + + } + + if ($this->_haserrorfunctions) + { + + $this->_errorMsg = ''; + $this->_errorCode = 0; + } + else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + } + else + { + if ($this->_haserrorfunctions) { + $this->_errorMsg = ads_errormsg(); + $this->_errorCode = ads_error(); + } else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + } + + return $stmtid; + + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + $sql = "UPDATE $table SET $column=? WHERE $where"; + $stmtid = ads_prepare($this->_connectionID,$sql); + if ($stmtid == false){ + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + return false; + } + if (! ads_execute($stmtid,array($val),array(SQL_BINARY) )){ + if ($this->_haserrorfunctions){ + $this->_errorMsg = ads_errormsg(); + $this->_errorCode = ads_error(); + } + return false; + } + return TRUE; + } + + // returns true or false + function _close() + { + $ret = @ads_close($this->_connectionID); + $this->_connectionID = false; + return $ret; + } + + function _affectedrows() + { + return $this->_lastAffectedRows; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_ads extends ADORecordSet { + + var $bind = false; + var $databaseType = "ads"; + var $dataProvider = "ads"; + var $useFetchArray; + var $_has_stupid_odbc_fetch_api_change; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + + $this->_queryID = $id; + + // the following is required for mysql odbc driver in 4.3.1 -- why? + $this->EOF = false; + $this->_currentRow = -1; + //parent::__construct($id); + } + + + // returns the field object + function &FetchField($fieldOffset = -1) + { + + $off=$fieldOffset+1; // offsets begin at 1 + + $o= new ADOFieldObject(); + $o->name = @ads_field_name($this->_queryID,$off); + $o->type = @ads_field_type($this->_queryID,$off); + $o->max_length = @ads_field_len($this->_queryID,$off); + if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); + else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); + return $o; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _initrs() + { + global $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS) ? @ads_num_rows($this->_queryID) : -1; + $this->_numOfFields = @ads_num_fields($this->_queryID); + // some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0 + if ($this->_numOfRows == 0) $this->_numOfRows = -1; + //$this->useFetchArray = $this->connection->useFetchArray; + $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; + } + + function _seek($row) + { + return false; + } + + // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated + function &GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $rs =& $this->GetArray($nrows); + return $rs; + } + $savem = $this->fetchMode; + $this->fetchMode = ADODB_FETCH_NUM; + $this->Move($offset); + $this->fetchMode = $savem; + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields =& $this->GetRowAssoc(); + } + + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + function MoveNext() + { + if ($this->_numOfRows != 0 && !$this->EOF) { + $this->_currentRow++; + if( $this->_fetch() ) { + return true; + } + } + $this->fields = false; + $this->EOF = true; + return false; + } + + function _fetch() + { + $this->fields = false; + if ($this->_has_stupid_odbc_fetch_api_change) + $rez = @ads_fetch_into($this->_queryID,$this->fields); + else { + $row = 0; + $rez = @ads_fetch_into($this->_queryID,$row,$this->fields); + } + if ($rez) { + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields =& $this->GetRowAssoc(); + } + return true; + } + return false; + } + + function _close() + { + return @ads_free_result($this->_queryID); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-borland_ibase.inc.php b/ehcp/adodb5/drivers/adodb-borland_ibase.inc.php new file mode 100644 index 0000000..ca71e16 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-borland_ibase.inc.php @@ -0,0 +1,87 @@ +transOff) return true; + $this->transCnt += 1; + $this->autoCommit = false; + $this->_transactionID = ibase_trans($this->ibasetrans, $this->_connectionID); + return $this->_transactionID; + } + + function ServerInfo() + { + $arr['dialect'] = $this->dialect; + switch($arr['dialect']) { + case '': + case '1': $s = 'Interbase 6.5, Dialect 1'; break; + case '2': $s = 'Interbase 6.5, Dialect 2'; break; + default: + case '3': $s = 'Interbase 6.5, Dialect 3'; break; + } + $arr['version'] = '6.5'; + $arr['description'] = $s; + return $arr; + } + + // Note that Interbase 6.5 uses ROWS instead - don't you love forking wars! + // SELECT col1, col2 FROM table ROWS 5 -- get 5 rows + // SELECT col1, col2 FROM TABLE ORDER BY col1 ROWS 3 TO 7 -- first 5 skip 2 + // Firebird uses + // SELECT FIRST 5 SKIP 2 col1, col2 FROM TABLE + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + if ($nrows > 0) { + if ($offset <= 0) $str = " ROWS $nrows "; + else { + $a = $offset+1; + $b = $offset+$nrows; + $str = " ROWS $a TO $b"; + } + } else { + // ok, skip + $a = $offset + 1; + $str = " ROWS $a TO 999999999"; // 999 million + } + $sql .= $str; + + return ($secs2cache) ? + $this->CacheExecute($secs2cache,$sql,$inputarr) + : + $this->Execute($sql,$inputarr); + } + +}; + + +class ADORecordSet_borland_ibase extends ADORecordSet_ibase { + + var $databaseType = "borland_ibase"; + + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-csv.inc.php b/ehcp/adodb5/drivers/adodb-csv.inc.php new file mode 100644 index 0000000..63b483d --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-csv.inc.php @@ -0,0 +1,207 @@ +_insertid; + } + + function _affectedrows() + { + return $this->_affectedrows; + } + + function MetaDatabases() + { + return false; + } + + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (strtolower(substr($argHostname,0,7)) !== 'http://') return false; + $this->_url = $argHostname; + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (strtolower(substr($argHostname,0,7)) !== 'http://') return false; + $this->_url = $argHostname; + return true; + } + + function MetaColumns($table, $normalize=true) + { + return false; + } + + + // parameters use PostgreSQL convention, not MySQL + function SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $secs2cache = 0) + { + global $ADODB_FETCH_MODE; + + $url = $this->_url.'?sql='.urlencode($sql)."&nrows=$nrows&fetch=". + (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE). + "&offset=$offset"; + $err = false; + $rs = csv2rs($url,$err,false); + + if ($this->debug) print "$url
$err
"; + + $at = strpos($err,'::::'); + if ($at === false) { + $this->_errorMsg = $err; + $this->_errorNo = (integer)$err; + } else { + $this->_errorMsg = substr($err,$at+4,1024); + $this->_errorNo = -9999; + } + if ($this->_errorNo) + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,''); + } + + if (is_object($rs)) { + + $rs->databaseType='csv'; + $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE; + $rs->connection = $this; + } + return $rs; + } + + // returns queryID or false + function _Execute($sql,$inputarr=false) + { + global $ADODB_FETCH_MODE; + + if (!$this->_bindInputArray && $inputarr) { + $sqlarr = explode('?',$sql); + $sql = ''; + $i = 0; + foreach($inputarr as $v) { + + $sql .= $sqlarr[$i]; + if (gettype($v) == 'string') + $sql .= $this->qstr($v); + else if ($v === null) + $sql .= 'NULL'; + else + $sql .= $v; + $i += 1; + + } + $sql .= $sqlarr[$i]; + if ($i+1 != sizeof($sqlarr)) + print "Input Array does not match ?: ".htmlspecialchars($sql); + $inputarr = false; + } + + $url = $this->_url.'?sql='.urlencode($sql)."&fetch=". + (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE); + $err = false; + + + $rs = csv2rs($url,$err,false); + if ($this->debug) print urldecode($url)."
$err
"; + $at = strpos($err,'::::'); + if ($at === false) { + $this->_errorMsg = $err; + $this->_errorNo = (integer)$err; + } else { + $this->_errorMsg = substr($err,$at+4,1024); + $this->_errorNo = -9999; + } + + if ($this->_errorNo) + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr); + } + if (is_object($rs)) { + $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE; + + $this->_affectedrows = $rs->affectedrows; + $this->_insertid = $rs->insertid; + $rs->databaseType='csv'; + $rs->connection = $this; + } + return $rs; + } + + /* Returns: the last error message from previous database operation */ + function ErrorMsg() + { + return $this->_errorMsg; + } + + /* Returns: the last error number from previous database operation */ + function ErrorNo() + { + return $this->_errorNo; + } + + // returns true or false + function _close() + { + return true; + } +} // class + +class ADORecordset_csv extends ADORecordset { + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } + + function _close() + { + return true; + } +} + +} // define diff --git a/ehcp/adodb5/drivers/adodb-db2.inc.php b/ehcp/adodb5/drivers/adodb-db2.inc.php new file mode 100644 index 0000000..8499955 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-db2.inc.php @@ -0,0 +1,849 @@ +_haserrorfunctions = ADODB_PHPVER >= 0x4050; + } + + // returns true or false + function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('db2_connect')) { + ADOConnection::outp("Warning: The old ODBC based DB2 driver has been renamed 'odbc_db2'. This ADOdb driver calls PHP's native db2 extension which is not installed."); + return null; + } + // This needs to be set before the connect(). + // Replaces the odbc_binmode() call that was in Execute() + ini_set('ibm_db2.binmode', $this->binmode); + + if ($argDatabasename && empty($argDSN)) { + + if (stripos($argDatabasename,'UID=') && stripos($argDatabasename,'PWD=')) $this->_connectionID = db2_connect($argDatabasename,null,null); + else $this->_connectionID = db2_connect($argDatabasename,$argUsername,$argPassword); + } else { + if ($argDatabasename) $schema = $argDatabasename; + if (stripos($argDSN,'UID=') && stripos($argDSN,'PWD=')) $this->_connectionID = db2_connect($argDSN,null,null); + else $this->_connectionID = db2_connect($argDSN,$argUsername,$argPassword); + } + if (isset($php_errormsg)) $php_errormsg = ''; + + // For db2_connect(), there is an optional 4th arg. If present, it must be + // an array of valid options. So far, we don't use them. + + $this->_errorMsg = @db2_conn_errormsg(); + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + if ($this->_connectionID && isset($schema)) $this->Execute("SET SCHEMA=$schema"); + return $this->_connectionID != false; + } + + // returns true or false + function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('db2_connect')) return null; + + // This needs to be set before the connect(). + // Replaces the odbc_binmode() call that was in Execute() + ini_set('ibm_db2.binmode', $this->binmode); + + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + + if ($argDatabasename && empty($argDSN)) { + + if (stripos($argDatabasename,'UID=') && stripos($argDatabasename,'PWD=')) $this->_connectionID = db2_pconnect($argDatabasename,null,null); + else $this->_connectionID = db2_pconnect($argDatabasename,$argUsername,$argPassword); + } else { + if ($argDatabasename) $schema = $argDatabasename; + if (stripos($argDSN,'UID=') && stripos($argDSN,'PWD=')) $this->_connectionID = db2_pconnect($argDSN,null,null); + else $this->_connectionID = db2_pconnect($argDSN,$argUsername,$argPassword); + } + if (isset($php_errormsg)) $php_errormsg = ''; + + $this->_errorMsg = @db2_conn_errormsg(); + if ($this->_connectionID && $this->autoRollback) @db2_rollback($this->_connectionID); + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + if ($this->_connectionID && isset($schema)) $this->Execute("SET SCHEMA=$schema"); + return $this->_connectionID != false; + } + + // format and return date string in database timestamp format + function DBTimeStamp($ts, $isfld = false) + { + if (empty($ts) && $ts !== 0) return 'null'; + if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts); + return 'TO_DATE('.adodb_date($this->fmtTimeStamp,$ts).",'YYYY-MM-DD HH24:MI:SS')"; + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + // use right() and replace() ? + if (!$col) $col = $this->sysDate; + + /* use TO_CHAR() if $fmt is TO_CHAR() allowed fmt */ + if ($fmt== 'Y-m-d H:i:s') + return 'TO_CHAR('.$col.", 'YYYY-MM-DD HH24:MI:SS')"; + + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= $this->concat_operator; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + if ($len==1) return "year($col)"; + $s .= "char(year($col))"; + break; + case 'M': + if ($len==1) return "monthname($col)"; + $s .= "substr(monthname($col),1,3)"; + break; + case 'm': + if ($len==1) return "month($col)"; + $s .= "right(digits(month($col)),2)"; + break; + case 'D': + case 'd': + if ($len==1) return "day($col)"; + $s .= "right(digits(day($col)),2)"; + break; + case 'H': + case 'h': + if ($len==1) return "hour($col)"; + if ($col != $this->sysDate) $s .= "right(digits(hour($col)),2)"; + else $s .= "''"; + break; + case 'i': + case 'I': + if ($len==1) return "minute($col)"; + if ($col != $this->sysDate) + $s .= "right(digits(minute($col)),2)"; + else $s .= "''"; + break; + case 'S': + case 's': + if ($len==1) return "second($col)"; + if ($col != $this->sysDate) + $s .= "right(digits(second($col)),2)"; + else $s .= "''"; + break; + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + } + } + return $s; + } + + + function ServerInfo() + { + $row = $this->GetRow("SELECT service_level, fixpack_num FROM TABLE(sysproc.env_get_inst_info()) + as INSTANCEINFO"); + + + if ($row) { + $info['version'] = $row[0].':'.$row[1]; + $info['fixpack'] = $row[1]; + $info['description'] = ''; + } else { + return ADOConnection::ServerInfo(); + } + + return $info; + } + + function CreateSequence($seqname='adodbseq',$start=1) + { + if (empty($this->_genSeqSQL)) return false; + $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$start)); + if (!$ok) return false; + return true; + } + + function DropSequence($seqname = 'adodbseq') + { + if (empty($this->_dropSeqSQL)) return false; + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + function SelectLimit($sql, $nrows = -1, $offset = -1, $inputArr = false, $secs2cache = 0) + { + $nrows = (integer) $nrows; + if ($offset <= 0) { + // could also use " OPTIMIZE FOR $nrows ROWS " + if ($nrows >= 0) $sql .= " FETCH FIRST $nrows ROWS ONLY "; + $rs = $this->Execute($sql,$inputArr); + } else { + if ($offset > 0 && $nrows < 0); + else { + $nrows += $offset; + $sql .= " FETCH FIRST $nrows ROWS ONLY "; + } + $rs = ADOConnection::SelectLimit($sql,-1,$offset,$inputArr); + } + + return $rs; + } + + /* + This algorithm is not very efficient, but works even if table locking + is not available. + + Will return false if unable to generate an ID after $MAXLOOPS attempts. + */ + function GenID($seq='adodbseq',$start=1) + { + // if you have to modify the parameter below, your database is overloaded, + // or you need to implement generation of id's yourself! + $num = $this->GetOne("VALUES NEXTVAL FOR $seq"); + return $num; + } + + + function ErrorMsg() + { + if ($this->_haserrorfunctions) { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (empty($this->_connectionID)) return @db2_conn_errormsg(); + return @db2_conn_errormsg($this->_connectionID); + } else return ADOConnection::ErrorMsg(); + } + + function ErrorNo() + { + + if ($this->_haserrorfunctions) { + if ($this->_errorCode !== false) { + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + return (strlen($this->_errorCode)<=2) ? 0 : $this->_errorCode; + } + + if (empty($this->_connectionID)) $e = @db2_conn_error(); + else $e = @db2_conn_error($this->_connectionID); + + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + // so we check and patch + if (strlen($e)<=2) return 0; + return $e; + } else return ADOConnection::ErrorNo(); + } + + + + function BeginTrans() + { + if (!$this->hasTransactions) return false; + if ($this->transOff) return true; + $this->transCnt += 1; + $this->_autocommit = false; + return db2_autocommit($this->_connectionID,false); + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = db2_commit($this->_connectionID); + db2_autocommit($this->_connectionID,true); + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = db2_rollback($this->_connectionID); + db2_autocommit($this->_connectionID,true); + return $ret; + } + + function MetaPrimaryKeys($table, $owner = false) + { + global $ADODB_FETCH_MODE; + + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = @db2_primarykeys($this->_connectionID,'',$schema,$table); + + if (!$qid) { + $ADODB_FETCH_MODE = $savem; + return false; + } + $rs = new ADORecordSet_db2($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return false; + + $arr = $rs->GetArray(); + $rs->Close(); + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + if ($arr[$i][3]) $arr2[] = $arr[$i][3]; + } + return $arr2; + } + + function MetaForeignKeys($table, $owner = FALSE, $upper = FALSE, $asociative = FALSE ) + { + global $ADODB_FETCH_MODE; + + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = @db2_foreign_keys($this->_connectionID,'',$schema,$table); + if (!$qid) { + $ADODB_FETCH_MODE = $savem; + return false; + } + $rs = new ADORecordSet_db2($qid); + + $ADODB_FETCH_MODE = $savem; + /* + $rs->fields indices + 0 PKTABLE_CAT + 1 PKTABLE_SCHEM + 2 PKTABLE_NAME + 3 PKCOLUMN_NAME + 4 FKTABLE_CAT + 5 FKTABLE_SCHEM + 6 FKTABLE_NAME + 7 FKCOLUMN_NAME + */ + if (!$rs) return false; + + $foreign_keys = array(); + while (!$rs->EOF) { + if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { + if (!is_array($foreign_keys[$rs->fields[5].'.'.$rs->fields[6]])) + $foreign_keys[$rs->fields[5].'.'.$rs->fields[6]] = array(); + $foreign_keys[$rs->fields[5].'.'.$rs->fields[6]][$rs->fields[7]] = $rs->fields[3]; + } + $rs->MoveNext(); + } + + $rs->Close(); + return $foreign_key; + } + + + function MetaTables($ttype = false, $schema = false, $mask = false) + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = db2_tables($this->_connectionID); + + $rs = new ADORecordSet_db2($qid); + + $ADODB_FETCH_MODE = $savem; + if (!$rs) { + $false = false; + return $false; + } + + $arr = $rs->GetArray(); + $rs->Close(); + $arr2 = array(); + + if ($ttype) { + $isview = strncmp($ttype,'V',1) === 0; + } + for ($i=0; $i < sizeof($arr); $i++) { + if (!$arr[$i][2]) continue; + $type = $arr[$i][3]; + $owner = $arr[$i][1]; + $schemaval = ($schema) ? $arr[$i][1].'.' : ''; + if ($ttype) { + if ($isview) { + if (strncmp($type,'V',1) === 0) $arr2[] = $schemaval.$arr[$i][2]; + } else if (strncmp($owner,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2]; + } else if (strncmp($owner,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2]; + } + return $arr2; + } + +/* +See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/db2/htm/db2datetime_data_type_changes.asp +/ SQL data type codes / +#define SQL_UNKNOWN_TYPE 0 +#define SQL_CHAR 1 +#define SQL_NUMERIC 2 +#define SQL_DECIMAL 3 +#define SQL_INTEGER 4 +#define SQL_SMALLINT 5 +#define SQL_FLOAT 6 +#define SQL_REAL 7 +#define SQL_DOUBLE 8 +#if (DB2VER >= 0x0300) +#define SQL_DATETIME 9 +#endif +#define SQL_VARCHAR 12 + + +/ One-parameter shortcuts for date/time data types / +#if (DB2VER >= 0x0300) +#define SQL_TYPE_DATE 91 +#define SQL_TYPE_TIME 92 +#define SQL_TYPE_TIMESTAMP 93 + +#define SQL_UNICODE (-95) +#define SQL_UNICODE_VARCHAR (-96) +#define SQL_UNICODE_LONGVARCHAR (-97) +*/ + function DB2Types($t) + { + switch ((integer)$t) { + case 1: + case 12: + case 0: + case -95: + case -96: + return 'C'; + case -97: + case -1: //text + return 'X'; + case -4: //image + return 'B'; + + case 9: + case 91: + return 'D'; + + case 10: + case 11: + case 92: + case 93: + return 'T'; + + case 4: + case 5: + case -6: + return 'I'; + + case -11: // uniqidentifier + return 'R'; + case -7: //bit + return 'L'; + + default: + return 'N'; + } + } + + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $false = false; + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + $colname = "%"; + $qid = db2_columns($this->_connectionID, "", $schema, $table, $colname); + if (empty($qid)) return $false; + + $rs = new ADORecordSet_db2($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return $false; + $rs->_fetch(); + + $retarr = array(); + + /* + $rs->fields indices + 0 TABLE_QUALIFIER + 1 TABLE_SCHEM + 2 TABLE_NAME + 3 COLUMN_NAME + 4 DATA_TYPE + 5 TYPE_NAME + 6 PRECISION + 7 LENGTH + 8 SCALE + 9 RADIX + 10 NULLABLE + 11 REMARKS + */ + while (!$rs->EOF) { + if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[3]; + $fld->type = $this->DB2Types($rs->fields[4]); + + // ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp + // access uses precision to store length for char/varchar + if ($fld->type == 'C' or $fld->type == 'X') { + if ($rs->fields[4] <= -95) // UNICODE + $fld->max_length = $rs->fields[7]/2; + else + $fld->max_length = $rs->fields[7]; + } else + $fld->max_length = $rs->fields[7]; + $fld->not_null = !empty($rs->fields[10]); + $fld->scale = $rs->fields[8]; + $fld->primary_key = false; + $retarr[strtoupper($fld->name)] = $fld; + } else if (sizeof($retarr)>0) + break; + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) $retarr = false; + + $qid = db2_primary_keys($this->_connectionID, "", $schema, $table); + if (empty($qid)) return $false; + + $rs = new ADORecordSet_db2($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return $retarr; + $rs->_fetch(); + + /* + $rs->fields indices + 0 TABLE_CAT + 1 TABLE_SCHEM + 2 TABLE_NAME + 3 COLUMN_NAME + 4 KEY_SEQ + 5 PK_NAME + */ + while (!$rs->EOF) { + if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { + $retarr[strtoupper($rs->fields[3])]->primary_key = true; + } else if (sizeof($retarr)>0) + break; + $rs->MoveNext(); + } + $rs->Close(); + + if (empty($retarr)) $retarr = false; + return $retarr; + } + + + function Prepare($sql) + { + if (! $this->_bindInputArray) return $sql; // no binding + $stmt = db2_prepare($this->_connectionID,$sql); + if (!$stmt) { + // we don't know whether db2 driver is parsing prepared stmts, so just return sql + return $sql; + } + return array($sql,$stmt,false); + } + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + GLOBAL $php_errormsg; + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_error = ''; + + if ($inputarr) { + if (is_array($sql)) { + $stmtid = $sql[1]; + } else { + $stmtid = db2_prepare($this->_connectionID,$sql); + + if ($stmtid == false) { + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + return false; + } + } + + if (! db2_execute($stmtid,$inputarr)) { + if ($this->_haserrorfunctions) { + $this->_errorMsg = db2_stmt_errormsg(); + $this->_errorCode = db2_stmt_error(); + } + return false; + } + + } else if (is_array($sql)) { + $stmtid = $sql[1]; + if (!db2_execute($stmtid)) { + if ($this->_haserrorfunctions) { + $this->_errorMsg = db2_stmt_errormsg(); + $this->_errorCode = db2_stmt_error(); + } + return false; + } + } else + $stmtid = @db2_exec($this->_connectionID,$sql); + + $this->_lastAffectedRows = 0; + if ($stmtid) { + if (@db2_num_fields($stmtid) == 0) { + $this->_lastAffectedRows = db2_num_rows($stmtid); + $stmtid = true; + } else { + $this->_lastAffectedRows = 0; + } + + if ($this->_haserrorfunctions) { + $this->_errorMsg = ''; + $this->_errorCode = 0; + } else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + } else { + if ($this->_haserrorfunctions) { + $this->_errorMsg = db2_stmt_errormsg(); + $this->_errorCode = db2_stmt_error(); + } else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + + } + return $stmtid; + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; + } + + // returns true or false + function _close() + { + $ret = @db2_close($this->_connectionID); + $this->_connectionID = false; + return $ret; + } + + function _affectedrows() + { + return $this->_lastAffectedRows; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_db2 extends ADORecordSet { + + var $bind = false; + var $databaseType = "db2"; + var $dataProvider = "db2"; + var $useFetchArray; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + + $this->_queryID = $id; + } + + + // returns the field object + function FetchField($offset = -1) + { + $o= new ADOFieldObject(); + $o->name = @db2_field_name($this->_queryID,$offset); + $o->type = @db2_field_type($this->_queryID,$offset); + $o->max_length = db2_field_width($this->_queryID,$offset); + if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); + else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); + return $o; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _initrs() + { + global $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS) ? @db2_num_rows($this->_queryID) : -1; + $this->_numOfFields = @db2_num_fields($this->_queryID); + // some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0 + if ($this->_numOfRows == 0) $this->_numOfRows = -1; + } + + function _seek($row) + { + return false; + } + + // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated + function GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $rs = $this->GetArray($nrows); + return $rs; + } + $savem = $this->fetchMode; + $this->fetchMode = ADODB_FETCH_NUM; + $this->Move($offset); + $this->fetchMode = $savem; + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + function MoveNext() + { + if ($this->_numOfRows != 0 && !$this->EOF) { + $this->_currentRow++; + + $this->fields = @db2_fetch_array($this->_queryID); + if ($this->fields) { + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + return true; + } + } + $this->fields = false; + $this->EOF = true; + return false; + } + + function _fetch() + { + + $this->fields = db2_fetch_array($this->_queryID); + if ($this->fields) { + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + return true; + } + $this->fields = false; + return false; + } + + function _close() + { + return @db2_free_result($this->_queryID); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-db2oci.inc.php b/ehcp/adodb5/drivers/adodb-db2oci.inc.php new file mode 100644 index 0000000..45f0d55 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-db2oci.inc.php @@ -0,0 +1,226 @@ + $_COLONSZ) return $p; + $_COLONARR[] = $v; + return '?'; +} + +// smart remapping of :0, :1 bind vars to ? ? +function _colonscope($sql,$arr) +{ +global $_COLONARR,$_COLONSZ; + + $_COLONARR = array(); + $_COLONSZ = sizeof($arr); + + $sql2 = preg_replace("/(:[0-9]+)/e","_colontrack('\\1')",$sql); + + if (empty($_COLONARR)) return array($sql,$arr); + + foreach($_COLONARR as $k => $v) { + $arr2[] = $arr[$v]; + } + + return array($sql2,$arr2); +} +*/ + +/* + Smart remapping of :0, :1 bind vars to ? ? + + Handles colons in comments -- and / * * / and in quoted strings. +*/ + +function _colonparser($sql,$arr) +{ + $lensql = strlen($sql); + $arrsize = sizeof($arr); + $state = 'NORM'; + $at = 1; + $ch = $sql[0]; + $ch2 = @$sql[1]; + $sql2 = ''; + $arr2 = array(); + $nprev = 0; + + + while (strlen($ch)) { + + switch($ch) { + case '/': + if ($state == 'NORM' && $ch2 == '*') { + $state = 'COMMENT'; + + $at += 1; + $ch = $ch2; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } + break; + + case '*': + if ($state == 'COMMENT' && $ch2 == '/') { + $state = 'NORM'; + + $at += 1; + $ch = $ch2; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } + break; + + case "\n": + case "\r": + if ($state == 'COMMENT2') $state = 'NORM'; + break; + + case "'": + do { + $at += 1; + $ch = $ch2; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } while ($ch !== "'"); + break; + + case ':': + if ($state == 'COMMENT' || $state == 'COMMENT2') break; + + //echo "$at=$ch $ch2, "; + if ('0' <= $ch2 && $ch2 <= '9') { + $n = ''; + $nat = $at; + do { + $at += 1; + $ch = $ch2; + $n .= $ch; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } while ('0' <= $ch && $ch <= '9'); + #echo "$n $arrsize ] "; + $n = (integer) $n; + if ($n < $arrsize) { + $sql2 .= substr($sql,$nprev,$nat-$nprev-1).'?'; + $nprev = $at-1; + $arr2[] = $arr[$n]; + } + } + break; + + case '-': + if ($state == 'NORM') { + if ($ch2 == '-') $state = 'COMMENT2'; + $at += 1; + $ch = $ch2; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } + break; + } + + $at += 1; + $ch = $ch2; + $ch2 = $at < $lensql ? $sql[$at] : ''; + } + + if ($nprev == 0) { + $sql2 = $sql; + } else { + $sql2 .= substr($sql,$nprev); + } + + return array($sql2,$arr2); +} + +class ADODB_db2oci extends ADODB_db2 { + var $databaseType = "db2oci"; + var $sysTimeStamp = 'sysdate'; + var $sysDate = 'trunc(sysdate)'; + var $_bindInputArray = true; + + function Param($name,$type='C') + { + return ':'.$name; + } + + + function MetaTables($ttype = false, $schema = false, $mask = false) + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = db2_tables($this->_connectionID); + + $rs = new ADORecordSet_db2($qid); + + $ADODB_FETCH_MODE = $savem; + if (!$rs) { + $false = false; + return $false; + } + + $arr = $rs->GetArray(); + $rs->Close(); + $arr2 = array(); + // adodb_pr($arr); + if ($ttype) { + $isview = strncmp($ttype,'V',1) === 0; + } + for ($i=0; $i < sizeof($arr); $i++) { + if (!$arr[$i][2]) continue; + $type = $arr[$i][3]; + $schemaval = ($schema) ? $arr[$i][1].'.' : ''; + $name = $schemaval.$arr[$i][2]; + $owner = $arr[$i][1]; + if (substr($name,0,8) == 'EXPLAIN_') continue; + if ($ttype) { + if ($isview) { + if (strncmp($type,'V',1) === 0) $arr2[] = $name; + } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name; + } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name; + } + return $arr2; + } + + function _Execute($sql, $inputarr=false ) + { + if ($inputarr) list($sql,$inputarr) = _colonparser($sql, $inputarr); + return parent::_Execute($sql, $inputarr); + } +}; + + +class ADORecordSet_db2oci extends ADORecordSet_db2 { + + var $databaseType = "db2oci"; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +} //define diff --git a/ehcp/adodb5/drivers/adodb-db2ora.inc.php b/ehcp/adodb5/drivers/adodb-db2ora.inc.php new file mode 100644 index 0000000..527a496 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-db2ora.inc.php @@ -0,0 +1,86 @@ + $_COLONSZ) return $p[1]; + $_COLONARR[] = $v; + return '?'; +} + +/** + * smart remapping of :0, :1 bind vars to ? ? + * @param string $sql SQL statement + * @param array $arr parameters + * @return array + */ +function _colonscope($sql,$arr) +{ +global $_COLONARR,$_COLONSZ; + + $_COLONARR = array(); + $_COLONSZ = sizeof($arr); + + $sql2 = preg_replace_callback('/(:[0-9]+)/', '_colontrack', $sql); + + if (empty($_COLONARR)) return array($sql,$arr); + + foreach($_COLONARR as $k => $v) { + $arr2[] = $arr[$v]; + } + + return array($sql2,$arr2); +} + +class ADODB_db2oci extends ADODB_db2 { + var $databaseType = "db2oci"; + var $sysTimeStamp = 'sysdate'; + var $sysDate = 'trunc(sysdate)'; + + function _Execute($sql, $inputarr = false) + { + if ($inputarr) list($sql,$inputarr) = _colonscope($sql, $inputarr); + return parent::_Execute($sql, $inputarr); + } +}; + + +class ADORecordSet_db2oci extends ADORecordSet_odbc { + + var $databaseType = "db2oci"; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +} //define diff --git a/ehcp/adodb5/drivers/adodb-fbsql.inc.php b/ehcp/adodb5/drivers/adodb-fbsql.inc.php new file mode 100644 index 0000000..d96562f --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-fbsql.inc.php @@ -0,0 +1,267 @@ +. + Set tabs to 8. +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +if (! defined("_ADODB_FBSQL_LAYER")) { + define("_ADODB_FBSQL_LAYER", 1 ); + +class ADODB_fbsql extends ADOConnection { + var $databaseType = 'fbsql'; + var $hasInsertID = true; + var $hasAffectedRows = true; + var $metaTablesSQL = "SHOW TABLES"; + var $metaColumnsSQL = "SHOW COLUMNS FROM %s"; + var $fmtTimeStamp = "'Y-m-d H:i:s'"; + var $hasLimit = false; + + function __construct() + { + } + + function _insertid() + { + return fbsql_insert_id($this->_connectionID); + } + + function _affectedrows() + { + return fbsql_affected_rows($this->_connectionID); + } + + function MetaDatabases() + { + $qid = fbsql_list_dbs($this->_connectionID); + $arr = array(); + $i = 0; + $max = fbsql_num_rows($qid); + while ($i < $max) { + $arr[] = fbsql_tablename($qid,$i); + $i += 1; + } + return $arr; + } + + // returns concatenated string + function Concat() + { + $s = ""; + $arr = func_get_args(); + $first = true; + + $s = implode(',',$arr); + if (sizeof($arr) > 0) return "CONCAT($s)"; + else return ''; + } + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + $this->_connectionID = fbsql_connect($argHostname,$argUsername,$argPassword); + if ($this->_connectionID === false) return false; + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + $this->_connectionID = fbsql_pconnect($argHostname,$argUsername,$argPassword); + if ($this->_connectionID === false) return false; + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + function MetaColumns($table, $normalize=true) + { + if ($this->metaColumnsSQL) { + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + + if ($rs === false) return false; + + $retarr = array(); + while (!$rs->EOF){ + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + + // split type into type(length): + if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) { + $fld->type = $query_array[1]; + $fld->max_length = $query_array[2]; + } else { + $fld->max_length = -1; + } + $fld->not_null = ($rs->fields[2] != 'YES'); + $fld->primary_key = ($rs->fields[3] == 'PRI'); + $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); + $fld->binary = (strpos($fld->type,'blob') !== false); + + $retarr[strtoupper($fld->name)] = $fld; + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + } + return false; + } + + // returns true or false + function SelectDB($dbName) + { + $this->database = $dbName; + if ($this->_connectionID) { + return @fbsql_select_db($dbName,$this->_connectionID); + } + else return false; + } + + + // returns queryID or false + function _query($sql,$inputarr=false) + { + return fbsql_query("$sql;",$this->_connectionID); + } + + /* Returns: the last error message from previous database operation */ + function ErrorMsg() + { + $this->_errorMsg = @fbsql_error($this->_connectionID); + return $this->_errorMsg; + } + + /* Returns: the last error number from previous database operation */ + function ErrorNo() + { + return @fbsql_errno($this->_connectionID); + } + + // returns true or false + function _close() + { + return @fbsql_close($this->_connectionID); + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_fbsql extends ADORecordSet{ + + var $databaseType = "fbsql"; + var $canSeek = true; + + function __construct($queryID,$mode=false) + { + if (!$mode) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch ($mode) { + case ADODB_FETCH_NUM: $this->fetchMode = FBSQL_NUM; break; + case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break; + case ADODB_FETCH_BOTH: + default: + $this->fetchMode = FBSQL_BOTH; break; + } + return parent::__construct($queryID); + } + + function _initrs() + { + GLOBAL $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS) ? @fbsql_num_rows($this->_queryID):-1; + $this->_numOfFields = @fbsql_num_fields($this->_queryID); + } + + + + function FetchField($fieldOffset = -1) { + if ($fieldOffset != -1) { + $o = @fbsql_fetch_field($this->_queryID, $fieldOffset); + //$o->max_length = -1; // fbsql returns the max length less spaces -- so it is unrealiable + $f = @fbsql_field_flags($this->_queryID,$fieldOffset); + $o->binary = (strpos($f,'binary')!== false); + } + else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ + $o = @fbsql_fetch_field($this->_queryID);// fbsql returns the max length less spaces -- so it is unrealiable + //$o->max_length = -1; + } + + return $o; + } + + function _seek($row) + { + return @fbsql_data_seek($this->_queryID,$row); + } + + function _fetch($ignore_fields=false) + { + $this->fields = @fbsql_fetch_array($this->_queryID,$this->fetchMode); + return ($this->fields == true); + } + + function _close() { + return @fbsql_free_result($this->_queryID); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + $len = -1; // fbsql max_length is not accurate + switch (strtoupper($t)) { + case 'CHARACTER': + case 'CHARACTER VARYING': + case 'BLOB': + case 'CLOB': + case 'BIT': + case 'BIT VARYING': + if ($len <= $this->blobSize) return 'C'; + + // so we have to check whether binary... + case 'IMAGE': + case 'LONGBLOB': + case 'BLOB': + case 'MEDIUMBLOB': + return !empty($fieldobj->binary) ? 'B' : 'X'; + + case 'DATE': return 'D'; + + case 'TIME': + case 'TIME WITH TIME ZONE': + case 'TIMESTAMP': + case 'TIMESTAMP WITH TIME ZONE': return 'T'; + + case 'PRIMARY_KEY': + return 'R'; + case 'INTEGER': + case 'SMALLINT': + case 'BOOLEAN': + + if (!empty($fieldobj->primary_key)) return 'R'; + else return 'I'; + + default: return 'N'; + } + } + +} //class +} // defined diff --git a/ehcp/adodb5/drivers/adodb-firebird.inc.php b/ehcp/adodb5/drivers/adodb-firebird.inc.php new file mode 100644 index 0000000..f69f995 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-firebird.inc.php @@ -0,0 +1,73 @@ +dialect; + switch($arr['dialect']) { + case '': + case '1': $s = 'Firebird Dialect 1'; break; + case '2': $s = 'Firebird Dialect 2'; break; + default: + case '3': $s = 'Firebird Dialect 3'; break; + } + $arr['version'] = ADOConnection::_findvers($s); + $arr['description'] = $s; + return $arr; + } + + // Note that Interbase 6.5 uses this ROWS instead - don't you love forking wars! + // SELECT col1, col2 FROM table ROWS 5 -- get 5 rows + // SELECT col1, col2 FROM TABLE ORDER BY col1 ROWS 3 TO 7 -- first 5 skip 2 + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false, $secs=0) + { + $nrows = (integer) $nrows; + $offset = (integer) $offset; + $str = 'SELECT '; + if ($nrows >= 0) $str .= "FIRST $nrows "; + $str .=($offset>=0) ? "SKIP $offset " : ''; + + $sql = preg_replace('/^[ \t]*select/i',$str,$sql); + if ($secs) + $rs = $this->CacheExecute($secs,$sql,$inputarr); + else + $rs = $this->Execute($sql,$inputarr); + + return $rs; + } + + +}; + + +class ADORecordSet_firebird extends ADORecordSet_ibase { + + var $databaseType = "firebird"; + + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-ibase.inc.php b/ehcp/adodb5/drivers/adodb-ibase.inc.php new file mode 100644 index 0000000..51988c0 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ibase.inc.php @@ -0,0 +1,918 @@ + + changed transaction handling and added experimental blob stuff + + Docs to interbase at the website + http://www.synectics.co.za/php3/tutorial/IB_PHP3_API.html + + To use gen_id(), see + http://www.volny.cz/iprenosil/interbase/ip_ib_code.htm#_code_creategen + + $rs = $conn->Execute('select gen_id(adodb,1) from rdb$database'); + $id = $rs->fields[0]; + $conn->Execute("insert into table (id, col1,...) values ($id, $val1,...)"); +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +class ADODB_ibase extends ADOConnection { + var $databaseType = "ibase"; + var $dataProvider = "ibase"; + var $replaceQuote = "''"; // string to use to replace quotes + var $ibase_datefmt = '%Y-%m-%d'; // For hours,mins,secs change to '%Y-%m-%d %H:%M:%S'; + var $fmtDate = "'Y-m-d'"; + var $ibase_timestampfmt = "%Y-%m-%d %H:%M:%S"; + var $ibase_timefmt = "%H:%M:%S"; + var $fmtTimeStamp = "'Y-m-d, H:i:s'"; + var $concat_operator='||'; + var $_transactionID; + var $metaTablesSQL = "select rdb\$relation_name from rdb\$relations where rdb\$relation_name not like 'RDB\$%'"; + //OPN STUFF start + var $metaColumnsSQL = "select a.rdb\$field_name, a.rdb\$null_flag, a.rdb\$default_source, b.rdb\$field_length, b.rdb\$field_scale, b.rdb\$field_sub_type, b.rdb\$field_precision, b.rdb\$field_type from rdb\$relation_fields a, rdb\$fields b where a.rdb\$field_source = b.rdb\$field_name and a.rdb\$relation_name = '%s' order by a.rdb\$field_position asc"; + //OPN STUFF end + var $ibasetrans; + var $hasGenID = true; + var $_bindInputArray = true; + var $buffers = 0; + var $dialect = 1; + var $sysDate = "cast('TODAY' as timestamp)"; + var $sysTimeStamp = "CURRENT_TIMESTAMP"; //"cast('NOW' as timestamp)"; + var $ansiOuter = true; + var $hasAffectedRows = false; + var $poorAffectedRows = true; + var $blobEncodeType = 'C'; + var $role = false; + + function __construct() + { + if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT; + } + + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$persist=false) + { + if (!function_exists('ibase_pconnect')) return null; + if ($argDatabasename) $argHostname .= ':'.$argDatabasename; + $fn = ($persist) ? 'ibase_pconnect':'ibase_connect'; + if ($this->role) + $this->_connectionID = $fn($argHostname,$argUsername,$argPassword, + $this->charSet,$this->buffers,$this->dialect,$this->role); + else + $this->_connectionID = $fn($argHostname,$argUsername,$argPassword, + $this->charSet,$this->buffers,$this->dialect); + + if ($this->dialect != 1) { // http://www.ibphoenix.com/ibp_60_del_id_ds.html + $this->replaceQuote = "''"; + } + if ($this->_connectionID === false) { + $this->_handleerror(); + return false; + } + + // PHP5 change. + if (function_exists('ibase_timefmt')) { + ibase_timefmt($this->ibase_datefmt,IBASE_DATE ); + if ($this->dialect == 1) { + ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP ); + } + else { + ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP ); + } + ibase_timefmt($this->ibase_timefmt,IBASE_TIME ); + + } else { + ini_set("ibase.timestampformat", $this->ibase_timestampfmt); + ini_set("ibase.dateformat", $this->ibase_datefmt); + ini_set("ibase.timeformat", $this->ibase_timefmt); + } + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,true); + } + + + function MetaPrimaryKeys($table,$owner_notused=false,$internalKey=false) + { + if ($internalKey) { + return array('RDB$DB_KEY'); + } + + $table = strtoupper($table); + + $sql = 'SELECT S.RDB$FIELD_NAME AFIELDNAME + FROM RDB$INDICES I JOIN RDB$INDEX_SEGMENTS S ON I.RDB$INDEX_NAME=S.RDB$INDEX_NAME + WHERE I.RDB$RELATION_NAME=\''.$table.'\' and I.RDB$INDEX_NAME like \'RDB$PRIMARY%\' + ORDER BY I.RDB$INDEX_NAME,S.RDB$FIELD_POSITION'; + + $a = $this->GetCol($sql,false,true); + if ($a && sizeof($a)>0) return $a; + return false; + } + + function ServerInfo() + { + $arr['dialect'] = $this->dialect; + switch($arr['dialect']) { + case '': + case '1': $s = 'Interbase 5.5 or earlier'; break; + case '2': $s = 'Interbase 5.6'; break; + default: + case '3': $s = 'Interbase 6.0'; break; + } + $arr['version'] = ADOConnection::_findvers($s); + $arr['description'] = $s; + return $arr; + } + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + $this->autoCommit = false; + $this->_transactionID = $this->_connectionID;//ibase_trans($this->ibasetrans, $this->_connectionID); + return $this->_transactionID; + } + + function CommitTrans($ok=true) + { + if (!$ok) { + return $this->RollbackTrans(); + } + if ($this->transOff) { + return true; + } + if ($this->transCnt) { + $this->transCnt -= 1; + } + $ret = false; + $this->autoCommit = true; + if ($this->_transactionID) { + //print ' commit '; + $ret = ibase_commit($this->_transactionID); + } + $this->_transactionID = false; + return $ret; + } + + // there are some compat problems with ADODB_COUNTRECS=false and $this->_logsql currently. + // it appears that ibase extension cannot support multiple concurrent queryid's + function _Execute($sql,$inputarr=false) + { + global $ADODB_COUNTRECS; + + if ($this->_logsql) { + $savecrecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = true; // force countrecs + $ret = ADOConnection::_Execute($sql,$inputarr); + $ADODB_COUNTRECS = $savecrecs; + } else { + $ret = ADOConnection::_Execute($sql,$inputarr); + } + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $ret = false; + $this->autoCommit = true; + if ($this->_transactionID) { + $ret = ibase_rollback($this->_transactionID); + } + $this->_transactionID = false; + + return $ret; + } + + function MetaIndexes ($table, $primary = FALSE, $owner=false) + { + // save old fetch mode + global $ADODB_FETCH_MODE; + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + $table = strtoupper($table); + $sql = "SELECT * FROM RDB\$INDICES WHERE RDB\$RELATION_NAME = '".$table."'"; + if (!$primary) { + $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$%'"; + } else { + $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$FOREIGN%'"; + } + // get index details + $rs = $this->Execute($sql); + if (!is_object($rs)) { + // restore fetchmode + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return $false; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + $index = $row[0]; + if (!isset($indexes[$index])) { + if (is_null($row[3])) { + $row[3] = 0; + } + $indexes[$index] = array( + 'unique' => ($row[3] == 1), + 'columns' => array() + ); + } + $sql = "SELECT * FROM RDB\$INDEX_SEGMENTS WHERE RDB\$INDEX_NAME = '".$index."' ORDER BY RDB\$FIELD_POSITION ASC"; + $rs1 = $this->Execute($sql); + while ($row1 = $rs1->FetchRow()) { + $indexes[$index]['columns'][$row1[2]] = $row1[1]; + } + } + // restore fetchmode + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + return $indexes; + } + + + // See http://community.borland.com/article/0,1410,25844,00.html + function RowLock($tables,$where,$col=false) + { + if ($this->autoCommit) { + $this->BeginTrans(); + } + $this->Execute("UPDATE $table SET $col=$col WHERE $where "); // is this correct - jlim? + return 1; + } + + + function CreateSequence($seqname = 'adodbseq', $startID = 1) + { + $ok = $this->Execute(("INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('$seqname'))" )); + if (!$ok) return false; + return $this->Execute("SET GENERATOR $seqname TO ".($startID-1).';'); + } + + function DropSequence($seqname = 'adodbseq') + { + $seqname = strtoupper($seqname); + $this->Execute("delete from RDB\$GENERATORS where RDB\$GENERATOR_NAME='$seqname'"); + } + + function GenID($seqname='adodbseq',$startID=1) + { + $getnext = ("SELECT Gen_ID($seqname,1) FROM RDB\$DATABASE"); + $rs = @$this->Execute($getnext); + if (!$rs) { + $this->Execute(("INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('$seqname'))" )); + $this->Execute("SET GENERATOR $seqname TO ".($startID-1).';'); + $rs = $this->Execute($getnext); + } + if ($rs && !$rs->EOF) { + $this->genID = (integer) reset($rs->fields); + } + else { + $this->genID = 0; // false + } + + if ($rs) { + $rs->Close(); + } + + return $this->genID; + } + + function SelectDB($dbName) + { + return false; + } + + function _handleerror() + { + $this->_errorMsg = ibase_errmsg(); + } + + function ErrorNo() + { + if (preg_match('/error code = ([\-0-9]*)/i', $this->_errorMsg,$arr)) return (integer) $arr[1]; + else return 0; + } + + function ErrorMsg() + { + return $this->_errorMsg; + } + + function Prepare($sql) + { + $stmt = ibase_prepare($this->_connectionID,$sql); + if (!$stmt) return false; + return array($sql,$stmt); + } + + // returns query ID if successful, otherwise false + // there have been reports of problems with nested queries - the code is probably not re-entrant? + function _query($sql,$iarr=false) + { + + if (!$this->autoCommit && $this->_transactionID) { + $conn = $this->_transactionID; + $docommit = false; + } else { + $conn = $this->_connectionID; + $docommit = true; + } + if (is_array($sql)) { + $fn = 'ibase_execute'; + $sql = $sql[1]; + if (is_array($iarr)) { + if (ADODB_PHPVER >= 0x4050) { // actually 4.0.4 + if ( !isset($iarr[0]) ) $iarr[0] = ''; // PHP5 compat hack + $fnarr = array_merge( array($sql) , $iarr); + $ret = call_user_func_array($fn,$fnarr); + } else { + switch(sizeof($iarr)) { + case 1: $ret = $fn($sql,$iarr[0]); break; + case 2: $ret = $fn($sql,$iarr[0],$iarr[1]); break; + case 3: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2]); break; + case 4: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3]); break; + case 5: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4]); break; + case 6: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5]); break; + case 7: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6]); break; + default: ADOConnection::outp( "Too many parameters to ibase query $sql"); + case 8: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6],$iarr[7]); break; + } + } + } else $ret = $fn($sql); + } else { + $fn = 'ibase_query'; + + if (is_array($iarr)) { + if (ADODB_PHPVER >= 0x4050) { // actually 4.0.4 + if (sizeof($iarr) == 0) $iarr[0] = ''; // PHP5 compat hack + $fnarr = array_merge( array($conn,$sql) , $iarr); + $ret = call_user_func_array($fn,$fnarr); + } else { + switch(sizeof($iarr)) { + case 1: $ret = $fn($conn,$sql,$iarr[0]); break; + case 2: $ret = $fn($conn,$sql,$iarr[0],$iarr[1]); break; + case 3: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2]); break; + case 4: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3]); break; + case 5: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4]); break; + case 6: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5]); break; + case 7: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6]); break; + default: ADOConnection::outp( "Too many parameters to ibase query $sql"); + case 8: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6],$iarr[7]); break; + } + } + } else $ret = $fn($conn,$sql); + } + if ($docommit && $ret === true) { + ibase_commit($this->_connectionID); + } + + $this->_handleerror(); + return $ret; + } + + // returns true or false + function _close() + { + if (!$this->autoCommit) { + @ibase_rollback($this->_connectionID); + } + return @ibase_close($this->_connectionID); + } + + //OPN STUFF start + function _ConvertFieldType(&$fld, $ftype, $flen, $fscale, $fsubtype, $fprecision, $dialect3) + { + $fscale = abs($fscale); + $fld->max_length = $flen; + $fld->scale = null; + switch($ftype){ + case 7: + case 8: + if ($dialect3) { + switch($fsubtype){ + case 0: + $fld->type = ($ftype == 7 ? 'smallint' : 'integer'); + break; + case 1: + $fld->type = 'numeric'; + $fld->max_length = $fprecision; + $fld->scale = $fscale; + break; + case 2: + $fld->type = 'decimal'; + $fld->max_length = $fprecision; + $fld->scale = $fscale; + break; + } // switch + } else { + if ($fscale !=0) { + $fld->type = 'decimal'; + $fld->scale = $fscale; + $fld->max_length = ($ftype == 7 ? 4 : 9); + } else { + $fld->type = ($ftype == 7 ? 'smallint' : 'integer'); + } + } + break; + case 16: + if ($dialect3) { + switch($fsubtype){ + case 0: + $fld->type = 'decimal'; + $fld->max_length = 18; + $fld->scale = 0; + break; + case 1: + $fld->type = 'numeric'; + $fld->max_length = $fprecision; + $fld->scale = $fscale; + break; + case 2: + $fld->type = 'decimal'; + $fld->max_length = $fprecision; + $fld->scale = $fscale; + break; + } // switch + } + break; + case 10: + $fld->type = 'float'; + break; + case 14: + $fld->type = 'char'; + break; + case 27: + if ($fscale !=0) { + $fld->type = 'decimal'; + $fld->max_length = 15; + $fld->scale = 5; + } else { + $fld->type = 'double'; + } + break; + case 35: + if ($dialect3) { + $fld->type = 'timestamp'; + } else { + $fld->type = 'date'; + } + break; + case 12: + $fld->type = 'date'; + break; + case 13: + $fld->type = 'time'; + break; + case 37: + $fld->type = 'varchar'; + break; + case 40: + $fld->type = 'cstring'; + break; + case 261: + $fld->type = 'blob'; + $fld->max_length = -1; + break; + } // switch + } + //OPN STUFF end + + // returns array of ADOFieldObjects for current table + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); + + $ADODB_FETCH_MODE = $save; + $false = false; + if ($rs === false) { + return $false; + } + + $retarr = array(); + //OPN STUFF start + $dialect3 = ($this->dialect==3 ? true : false); + //OPN STUFF end + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = trim($rs->fields[0]); + //OPN STUFF start + $this->_ConvertFieldType($fld, $rs->fields[7], $rs->fields[3], $rs->fields[4], $rs->fields[5], $rs->fields[6], $dialect3); + if (isset($rs->fields[1]) && $rs->fields[1]) { + $fld->not_null = true; + } + if (isset($rs->fields[2])) { + + $fld->has_default = true; + $d = substr($rs->fields[2],strlen('default ')); + switch ($fld->type) + { + case 'smallint': + case 'integer': $fld->default_value = (int) $d; break; + case 'char': + case 'blob': + case 'text': + case 'varchar': $fld->default_value = (string) substr($d,1,strlen($d)-2); break; + case 'double': + case 'float': $fld->default_value = (float) $d; break; + default: $fld->default_value = $d; break; + } + // case 35:$tt = 'TIMESTAMP'; break; + } + if ((isset($rs->fields[5])) && ($fld->type == 'blob')) { + $fld->sub_type = $rs->fields[5]; + } else { + $fld->sub_type = null; + } + //OPN STUFF end + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[strtoupper($fld->name)] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + if ( empty($retarr)) return $false; + else return $retarr; + } + + function BlobEncode( $blob ) + { + $blobid = ibase_blob_create( $this->_connectionID); + ibase_blob_add( $blobid, $blob ); + return ibase_blob_close( $blobid ); + } + + // since we auto-decode all blob's since 2.42, + // BlobDecode should not do any transforms + function BlobDecode($blob) + { + return $blob; + } + + + + + // old blobdecode function + // still used to auto-decode all blob's + function _BlobDecode_old( $blob ) + { + $blobid = ibase_blob_open($this->_connectionID, $blob ); + $realblob = ibase_blob_get( $blobid,$this->maxblobsize); // 2nd param is max size of blob -- Kevin Boillet + while($string = ibase_blob_get($blobid, 8192)){ + $realblob .= $string; + } + ibase_blob_close( $blobid ); + + return( $realblob ); + } + + function _BlobDecode( $blob ) + { + if (ADODB_PHPVER >= 0x5000) { + $blob_data = ibase_blob_info($this->_connectionID, $blob ); + $blobid = ibase_blob_open($this->_connectionID, $blob ); + } else { + + $blob_data = ibase_blob_info( $blob ); + $blobid = ibase_blob_open( $blob ); + } + + if( $blob_data[0] > $this->maxblobsize ) { + + $realblob = ibase_blob_get($blobid, $this->maxblobsize); + + while($string = ibase_blob_get($blobid, 8192)){ + $realblob .= $string; + } + } else { + $realblob = ibase_blob_get($blobid, $blob_data[0]); + } + + ibase_blob_close( $blobid ); + return( $realblob ); + } + + function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') + { + $fd = fopen($path,'rb'); + if ($fd === false) return false; + $blob_id = ibase_blob_create($this->_connectionID); + + /* fill with data */ + + while ($val = fread($fd,32768)){ + ibase_blob_add($blob_id, $val); + } + + /* close and get $blob_id_str for inserting into table */ + $blob_id_str = ibase_blob_close($blob_id); + + fclose($fd); + return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + $blob_id = ibase_blob_create($this->_connectionID); + + // ibase_blob_add($blob_id, $val); + + // replacement that solves the problem by which only the first modulus 64K / + // of $val are stored at the blob field //////////////////////////////////// + // Thx Abel Berenstein aberenstein#afip.gov.ar + $len = strlen($val); + $chunk_size = 32768; + $tail_size = $len % $chunk_size; + $n_chunks = ($len - $tail_size) / $chunk_size; + + for ($n = 0; $n < $n_chunks; $n++) { + $start = $n * $chunk_size; + $data = substr($val, $start, $chunk_size); + ibase_blob_add($blob_id, $data); + } + + if ($tail_size) { + $start = $n_chunks * $chunk_size; + $data = substr($val, $start, $tail_size); + ibase_blob_add($blob_id, $data); + } + // end replacement ///////////////////////////////////////////////////////// + + $blob_id_str = ibase_blob_close($blob_id); + + return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; + + } + + + function OldUpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + $blob_id = ibase_blob_create($this->_connectionID); + ibase_blob_add($blob_id, $val); + $blob_id_str = ibase_blob_close($blob_id); + return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; + } + + // Format date column in sql string given an input format that understands Y M D + // Only since Interbase 6.0 - uses EXTRACT + // problem - does not zero-fill the day and month yet + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysDate; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '||'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "extract(year from $col)"; + break; + case 'M': + case 'm': + $s .= "extract(month from $col)"; + break; + case 'Q': + case 'q': + $s .= "cast(((extract(month from $col)+2) / 3) as integer)"; + break; + case 'D': + case 'd': + $s .= "(extract(day from $col))"; + break; + case 'H': + case 'h': + $s .= "(extract(hour from $col))"; + break; + case 'I': + case 'i': + $s .= "(extract(minute from $col))"; + break; + case 'S': + case 's': + $s .= "CAST((extract(second from $col)) AS INTEGER)"; + break; + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + break; + } + } + return $s; + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_ibase extends ADORecordSet +{ + + var $databaseType = "ibase"; + var $bind=false; + var $_cacheType; + + function __construct($id,$mode=false) + { + global $ADODB_FETCH_MODE; + + $this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode; + parent::__construct($id); + } + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. */ + + function FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $ibf = ibase_field_info($this->_queryID,$fieldOffset); + + $name = empty($ibf['alias']) ? $ibf['name'] : $ibf['alias']; + + switch (ADODB_ASSOC_CASE) { + case ADODB_ASSOC_CASE_UPPER: + $fld->name = strtoupper($name); + break; + case ADODB_ASSOC_CASE_LOWER: + $fld->name = strtolower($name); + break; + case ADODB_ASSOC_CASE_NATIVE: + default: + $fld->name = $name; + break; + } + + $fld->type = $ibf['type']; + $fld->max_length = $ibf['length']; + + /* This needs to be populated from the metadata */ + $fld->not_null = false; + $fld->has_default = false; + $fld->default_value = 'null'; + return $fld; + } + + function _initrs() + { + $this->_numOfRows = -1; + $this->_numOfFields = @ibase_num_fields($this->_queryID); + + // cache types for blob decode check + for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { + $f1 = $this->FetchField($i); + $this->_cacheType[] = $f1->type; + } + } + + function _seek($row) + { + return false; + } + + function _fetch() + { + $f = @ibase_fetch_row($this->_queryID); + if ($f === false) { + $this->fields = false; + return false; + } + // OPN stuff start - optimized + // fix missing nulls and decode blobs automatically + + global $ADODB_ANSI_PADDING_OFF; + //$ADODB_ANSI_PADDING_OFF=1; + $rtrim = !empty($ADODB_ANSI_PADDING_OFF); + + for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { + if ($this->_cacheType[$i]=="BLOB") { + if (isset($f[$i])) { + $f[$i] = $this->connection->_BlobDecode($f[$i]); + } else { + $f[$i] = null; + } + } else { + if (!isset($f[$i])) { + $f[$i] = null; + } else if ($rtrim && is_string($f[$i])) { + $f[$i] = rtrim($f[$i]); + } + } + } + // OPN stuff end + + $this->fields = $f; + if ($this->fetchMode == ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } else if ($this->fetchMode == ADODB_FETCH_BOTH) { + $this->fields = array_merge($this->fields,$this->GetRowAssoc()); + } + return true; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + + } + + + function _close() + { + return @ibase_free_result($this->_queryID); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + switch (strtoupper($t)) { + case 'CHAR': + return 'C'; + + case 'TEXT': + case 'VARCHAR': + case 'VARYING': + if ($len <= $this->blobSize) return 'C'; + return 'X'; + case 'BLOB': + return 'B'; + + case 'TIMESTAMP': + case 'DATE': return 'D'; + case 'TIME': return 'T'; + //case 'T': return 'T'; + + //case 'L': return 'L'; + case 'INT': + case 'SHORT': + case 'INTEGER': return 'I'; + default: return 'N'; + } + } + +} diff --git a/ehcp/adodb5/drivers/adodb-informix.inc.php b/ehcp/adodb5/drivers/adodb-informix.inc.php new file mode 100644 index 0000000..6bd1ea1 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-informix.inc.php @@ -0,0 +1,41 @@ + + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +if (!defined('IFX_SCROLL')) define('IFX_SCROLL',1); + +class ADODB_informix72 extends ADOConnection { + var $databaseType = "informix72"; + var $dataProvider = "informix"; + var $replaceQuote = "''"; // string to use to replace quotes + var $fmtDate = "'Y-m-d'"; + var $fmtTimeStamp = "'Y-m-d H:i:s'"; + var $hasInsertID = true; + var $hasAffectedRows = true; + var $substr = 'substr'; + var $metaTablesSQL="select tabname,tabtype from systables where tabtype in ('T','V') and owner!='informix'"; //Don't get informix tables and pseudo-tables + + + var $metaColumnsSQL = + "select c.colname, c.coltype, c.collength, d.default,c.colno + from syscolumns c, systables t,outer sysdefaults d + where c.tabid=t.tabid and d.tabid=t.tabid and d.colno=c.colno + and tabname='%s' order by c.colno"; + + var $metaPrimaryKeySQL = + "select part1,part2,part3,part4,part5,part6,part7,part8 from + systables t,sysconstraints s,sysindexes i where t.tabname='%s' + and s.tabid=t.tabid and s.constrtype='P' + and i.idxname=s.idxname"; + + var $concat_operator = '||'; + + var $lastQuery = false; + var $has_insertid = true; + + var $_autocommit = true; + var $_bindInputArray = true; // set to true if ADOConnection.Execute() permits binding of array parameters. + var $sysDate = 'TODAY'; + var $sysTimeStamp = 'CURRENT'; + var $cursorType = IFX_SCROLL; // IFX_SCROLL or IFX_HOLD or 0 + + function __construct() + { + // alternatively, use older method: + //putenv("DBDATE=Y4MD-"); + + // force ISO date format + putenv('GL_DATE=%Y-%m-%d'); + + if (function_exists('ifx_byteasvarchar')) { + ifx_byteasvarchar(1); // Mode "0" will return a blob id, and mode "1" will return a varchar with text content. + ifx_textasvarchar(1); // Mode "0" will return a blob id, and mode "1" will return a varchar with text content. + ifx_blobinfile_mode(0); // Mode "0" means save Byte-Blobs in memory, and mode "1" means save Byte-Blobs in a file. + } + } + + function ServerInfo() + { + if (isset($this->version)) return $this->version; + + $arr['description'] = $this->GetOne("select DBINFO('version','full') from systables where tabid = 1"); + $arr['version'] = $this->GetOne("select DBINFO('version','major') || DBINFO('version','minor') from systables where tabid = 1"); + $this->version = $arr; + return $arr; + } + + + + function _insertid() + { + $sqlca =ifx_getsqlca($this->lastQuery); + return @$sqlca["sqlerrd1"]; + } + + function _affectedrows() + { + if ($this->lastQuery) { + return @ifx_affected_rows ($this->lastQuery); + } + return 0; + } + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + $this->Execute('BEGIN'); + $this->_autocommit = false; + return true; + } + + function CommitTrans($ok=true) + { + if (!$ok) return $this->RollbackTrans(); + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->Execute('COMMIT'); + $this->_autocommit = true; + return true; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->Execute('ROLLBACK'); + $this->_autocommit = true; + return true; + } + + function RowLock($tables,$where,$col='1 as adodbignore') + { + if ($this->_autocommit) $this->BeginTrans(); + return $this->GetOne("select $col from $tables where $where for update"); + } + + /* Returns: the last error message from previous database operation + Note: This function is NOT available for Microsoft SQL Server. */ + + function ErrorMsg() + { + if (!empty($this->_logsql)) return $this->_errorMsg; + $this->_errorMsg = ifx_errormsg(); + return $this->_errorMsg; + } + + function ErrorNo() + { + preg_match("/.*SQLCODE=([^\]]*)/",ifx_error(),$parse); + if (is_array($parse) && isset($parse[1])) return (int)$parse[1]; + return 0; + } + + + function MetaProcedures($NamePattern = false, $catalog = null, $schemaPattern = null) + { + // save old fetch mode + global $ADODB_FETCH_MODE; + + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + + } + $procedures = array (); + + // get index details + + $likepattern = ''; + if ($NamePattern) { + $likepattern = " WHERE procname LIKE '".$NamePattern."'"; + } + + $rs = $this->Execute('SELECT procname, isproc FROM sysprocedures'.$likepattern); + + if (is_object($rs)) { + // parse index data into array + + while ($row = $rs->FetchRow()) { + $procedures[$row[0]] = array( + 'type' => ($row[1] == 'f' ? 'FUNCTION' : 'PROCEDURE'), + 'catalog' => '', + 'schema' => '', + 'remarks' => '' + ); + } + } + + // restore fetchmode + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + return $procedures; + } + + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $false = false; + if (!empty($this->metaColumnsSQL)) { + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if ($rs === false) return $false; + $rspkey = $this->Execute(sprintf($this->metaPrimaryKeySQL,$table)); //Added to get primary key colno items + + $retarr = array(); + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; +/* //!eos. + $rs->fields[1] is not the correct adodb type + $rs->fields[2] is not correct max_length, because can include not-null bit + + $fld->type = $rs->fields[1]; + $fld->primary_key=$rspkey->fields && array_search($rs->fields[4],$rspkey->fields); //Added to set primary key flag + $fld->max_length = $rs->fields[2];*/ + $pr=ifx_props($rs->fields[1],$rs->fields[2]); //!eos + $fld->type = $pr[0] ;//!eos + $fld->primary_key=$rspkey->fields && array_search($rs->fields[4],$rspkey->fields); + $fld->max_length = $pr[1]; //!eos + $fld->precision = $pr[2] ;//!eos + $fld->not_null = $pr[3]=="N"; //!eos + + if (trim($rs->fields[3]) != "AAAAAA 0") { + $fld->has_default = 1; + $fld->default_value = $rs->fields[3]; + } else { + $fld->has_default = 0; + } + + $retarr[strtolower($fld->name)] = $fld; + $rs->MoveNext(); + } + + $rs->Close(); + $rspkey->Close(); //!eos + return $retarr; + } + + return $false; + } + + function xMetaColumns($table) + { + return ADOConnection::MetaColumns($table,false); + } + + function MetaForeignKeys($table, $owner=false, $upper=false) //!Eos + { + $sql = " + select tr.tabname,updrule,delrule, + i.part1 o1,i2.part1 d1,i.part2 o2,i2.part2 d2,i.part3 o3,i2.part3 d3,i.part4 o4,i2.part4 d4, + i.part5 o5,i2.part5 d5,i.part6 o6,i2.part6 d6,i.part7 o7,i2.part7 d7,i.part8 o8,i2.part8 d8 + from systables t,sysconstraints s,sysindexes i, + sysreferences r,systables tr,sysconstraints s2,sysindexes i2 + where t.tabname='$table' + and s.tabid=t.tabid and s.constrtype='R' and r.constrid=s.constrid + and i.idxname=s.idxname and tr.tabid=r.ptabid + and s2.constrid=r.primary and i2.idxname=s2.idxname"; + + $rs = $this->Execute($sql); + if (!$rs || $rs->EOF) return false; + $arr = $rs->GetArray(); + $a = array(); + foreach($arr as $v) { + $coldest=$this->metaColumnNames($v["tabname"]); + $colorig=$this->metaColumnNames($table); + $colnames=array(); + for($i=1;$i<=8 && $v["o$i"] ;$i++) { + $colnames[]=$coldest[$v["d$i"]-1]."=".$colorig[$v["o$i"]-1]; + } + if($upper) + $a[strtoupper($v["tabname"])] = $colnames; + else + $a[$v["tabname"]] = $colnames; + } + return $a; + } + + function UpdateBlob($table, $column, $val, $where, $blobtype = 'BLOB') + { + $type = ($blobtype == 'TEXT') ? 1 : 0; + $blobid = ifx_create_blob($type,0,$val); + return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blobid)); + } + + function BlobDecode($blobid) + { + return function_exists('ifx_byteasvarchar') ? $blobid : @ifx_get_blob($blobid); + } + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('ifx_connect')) return null; + + $dbs = $argDatabasename . "@" . $argHostname; + if ($argHostname) putenv("INFORMIXSERVER=$argHostname"); + putenv("INFORMIXSERVER=".trim($argHostname)); + $this->_connectionID = ifx_connect($dbs,$argUsername,$argPassword); + if ($this->_connectionID === false) return false; + #if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('ifx_connect')) return null; + + $dbs = $argDatabasename . "@" . $argHostname; + putenv("INFORMIXSERVER=".trim($argHostname)); + $this->_connectionID = ifx_pconnect($dbs,$argUsername,$argPassword); + if ($this->_connectionID === false) return false; + #if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } +/* + // ifx_do does not accept bind parameters - weird ??? + function Prepare($sql) + { + $stmt = ifx_prepare($sql); + if (!$stmt) return $sql; + else return array($sql,$stmt); + } +*/ + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + global $ADODB_COUNTRECS; + + // String parameters have to be converted using ifx_create_char + if ($inputarr) { + foreach($inputarr as $v) { + if (gettype($v) == 'string') { + $tab[] = ifx_create_char($v); + } + else { + $tab[] = $v; + } + } + } + + // In case of select statement, we use a scroll cursor in order + // to be able to call "move", or "movefirst" statements + if (!$ADODB_COUNTRECS && preg_match("/^\s*select/is", $sql)) { + if ($inputarr) { + $this->lastQuery = ifx_query($sql,$this->_connectionID, $this->cursorType, $tab); + } + else { + $this->lastQuery = ifx_query($sql,$this->_connectionID, $this->cursorType); + } + } + else { + if ($inputarr) { + $this->lastQuery = ifx_query($sql,$this->_connectionID, $tab); + } + else { + $this->lastQuery = ifx_query($sql,$this->_connectionID); + } + } + + // Following line have been commented because autocommit mode is + // not supported by informix SE 7.2 + + //if ($this->_autocommit) ifx_query('COMMIT',$this->_connectionID); + + return $this->lastQuery; + } + + // returns true or false + function _close() + { + $this->lastQuery = false; + if($this->_connectionID) { + return ifx_close($this->_connectionID); + } + return true; + } +} + + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_informix72 extends ADORecordSet { + + var $databaseType = "informix72"; + var $canSeek = true; + var $_fieldprops = false; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + return parent::__construct($id); + } + + + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. */ + function FetchField($fieldOffset = -1) + { + if (empty($this->_fieldprops)) { + $fp = ifx_fieldproperties($this->_queryID); + foreach($fp as $k => $v) { + $o = new ADOFieldObject; + $o->name = $k; + $arr = explode(';',$v); //"SQLTYPE;length;precision;scale;ISNULLABLE" + $o->type = $arr[0]; + $o->max_length = $arr[1]; + $this->_fieldprops[] = $o; + $o->not_null = $arr[4]=="N"; + } + } + $ret = $this->_fieldprops[$fieldOffset]; + return $ret; + } + + function _initrs() + { + $this->_numOfRows = -1; // ifx_affected_rows not reliable, only returns estimate -- ($ADODB_COUNTRECS)? ifx_affected_rows($this->_queryID):-1; + $this->_numOfFields = ifx_num_fields($this->_queryID); + } + + function _seek($row) + { + return @ifx_fetch_row($this->_queryID, (int) $row); + } + + function MoveLast() + { + $this->fields = @ifx_fetch_row($this->_queryID, "LAST"); + if ($this->fields) $this->EOF = false; + $this->_currentRow = -1; + + if ($this->fetchMode == ADODB_FETCH_NUM) { + foreach($this->fields as $v) { + $arr[] = $v; + } + $this->fields = $arr; + } + + return true; + } + + function MoveFirst() + { + $this->fields = @ifx_fetch_row($this->_queryID, "FIRST"); + if ($this->fields) $this->EOF = false; + $this->_currentRow = 0; + + if ($this->fetchMode == ADODB_FETCH_NUM) { + foreach($this->fields as $v) { + $arr[] = $v; + } + $this->fields = $arr; + } + + return true; + } + + function _fetch($ignore_fields=false) + { + + $this->fields = @ifx_fetch_row($this->_queryID); + + if (!is_array($this->fields)) return false; + + if ($this->fetchMode == ADODB_FETCH_NUM) { + foreach($this->fields as $v) { + $arr[] = $v; + } + $this->fields = $arr; + } + return true; + } + + /* close() only needs to be called if you are worried about using too much memory while your script + is running. All associated result memory for the specified result identifier will automatically be freed. */ + function _close() + { + if($this->_queryID) { + return ifx_free_result($this->_queryID); + } + return true; + } + +} +/** !Eos +* Auxiliar function to Parse coltype,collength. Used by Metacolumns +* return: array ($mtype,$length,$precision,$nullable) (similar to ifx_fieldpropierties) +*/ +function ifx_props($coltype,$collength){ + $itype=fmod($coltype+1,256); + $nullable=floor(($coltype+1) /256) ?"N":"Y"; + $mtype=substr(" CIIFFNNDN TBXCC ",$itype,1); + switch ($itype){ + case 2: + $length=4; + case 6: + case 9: + case 14: + $length=floor($collength/256); + $precision=fmod($collength,256); + break; + default: + $precision=0; + $length=$collength; + } + return array($mtype,$length,$precision,$nullable); +} diff --git a/ehcp/adodb5/drivers/adodb-ldap.inc.php b/ehcp/adodb5/drivers/adodb-ldap.inc.php new file mode 100644 index 0000000..e745ed1 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-ldap.inc.php @@ -0,0 +1,428 @@ +_connectionID = @ldap_connect($host); + } else { + $conn_info = array( $host,$this->port); + + if ( strstr( $host, ':' ) ) { + $conn_info = explode( ':', $host ); + } + + $this->_connectionID = @ldap_connect( $conn_info[0], $conn_info[1] ); + } + if (!$this->_connectionID) { + $e = 'Could not connect to ' . $conn_info[0]; + $this->_errorMsg = $e; + if ($this->debug) ADOConnection::outp($e); + return false; + } + if( count( $LDAP_CONNECT_OPTIONS ) > 0 ) { + $this->_inject_bind_options( $LDAP_CONNECT_OPTIONS ); + } + + if ($username) { + $bind = @ldap_bind( $this->_connectionID, $username, $password ); + } else { + $username = 'anonymous'; + $bind = @ldap_bind( $this->_connectionID ); + } + + if (!$bind) { + $e = sprintf($this->_bind_errmsg,ldap_error($this->_connectionID)); + $this->_errorMsg = $e; + if ($this->debug) ADOConnection::outp($e); + return false; + } + $this->_errorMsg = ''; + $this->database = $ldapbase; + return $this->_connectionID; + } + +/* + Valid Domain Values for LDAP Options: + + LDAP_OPT_DEREF (integer) + LDAP_OPT_SIZELIMIT (integer) + LDAP_OPT_TIMELIMIT (integer) + LDAP_OPT_PROTOCOL_VERSION (integer) + LDAP_OPT_ERROR_NUMBER (integer) + LDAP_OPT_REFERRALS (boolean) + LDAP_OPT_RESTART (boolean) + LDAP_OPT_HOST_NAME (string) + LDAP_OPT_ERROR_STRING (string) + LDAP_OPT_MATCHED_DN (string) + LDAP_OPT_SERVER_CONTROLS (array) + LDAP_OPT_CLIENT_CONTROLS (array) + + Make sure to set this BEFORE calling Connect() + + Example: + + $LDAP_CONNECT_OPTIONS = Array( + Array ( + "OPTION_NAME"=>LDAP_OPT_DEREF, + "OPTION_VALUE"=>2 + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_SIZELIMIT, + "OPTION_VALUE"=>100 + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_TIMELIMIT, + "OPTION_VALUE"=>30 + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_PROTOCOL_VERSION, + "OPTION_VALUE"=>3 + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_ERROR_NUMBER, + "OPTION_VALUE"=>13 + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_REFERRALS, + "OPTION_VALUE"=>FALSE + ), + Array ( + "OPTION_NAME"=>LDAP_OPT_RESTART, + "OPTION_VALUE"=>FALSE + ) + ); +*/ + + function _inject_bind_options( $options ) { + foreach( $options as $option ) { + ldap_set_option( $this->_connectionID, $option["OPTION_NAME"], $option["OPTION_VALUE"] ) + or die( "Unable to set server option: " . $option["OPTION_NAME"] ); + } + } + + /* returns _queryID or false */ + function _query($sql,$inputarr=false) + { + $rs = @ldap_search( $this->_connectionID, $this->database, $sql ); + $this->_errorMsg = ($rs) ? '' : 'Search error on '.$sql.': '.ldap_error($this->_connectionID); + return $rs; + } + + function ErrorMsg() + { + return $this->_errorMsg; + } + + function ErrorNo() + { + return @ldap_errno($this->_connectionID); + } + + /* closes the LDAP connection */ + function _close() + { + @ldap_close( $this->_connectionID ); + $this->_connectionID = false; + } + + function SelectDB($db) { + $this->database = $db; + return true; + } // SelectDB + + function ServerInfo() + { + if( !empty( $this->version ) ) { + return $this->version; + } + + $version = array(); + /* + Determines how aliases are handled during search. + LDAP_DEREF_NEVER (0x00) + LDAP_DEREF_SEARCHING (0x01) + LDAP_DEREF_FINDING (0x02) + LDAP_DEREF_ALWAYS (0x03) + The LDAP_DEREF_SEARCHING value means aliases are dereferenced during the search but + not when locating the base object of the search. The LDAP_DEREF_FINDING value means + aliases are dereferenced when locating the base object but not during the search. + Default: LDAP_DEREF_NEVER + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_DEREF, $version['LDAP_OPT_DEREF'] ) ; + switch ( $version['LDAP_OPT_DEREF'] ) { + case 0: + $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_NEVER'; + case 1: + $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_SEARCHING'; + case 2: + $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_FINDING'; + case 3: + $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_ALWAYS'; + } + + /* + A limit on the number of entries to return from a search. + LDAP_NO_LIMIT (0) means no limit. + Default: LDAP_NO_LIMIT + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_SIZELIMIT, $version['LDAP_OPT_SIZELIMIT'] ); + if ( $version['LDAP_OPT_SIZELIMIT'] == 0 ) { + $version['LDAP_OPT_SIZELIMIT'] = 'LDAP_NO_LIMIT'; + } + + /* + A limit on the number of seconds to spend on a search. + LDAP_NO_LIMIT (0) means no limit. + Default: LDAP_NO_LIMIT + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_TIMELIMIT, $version['LDAP_OPT_TIMELIMIT'] ); + if ( $version['LDAP_OPT_TIMELIMIT'] == 0 ) { + $version['LDAP_OPT_TIMELIMIT'] = 'LDAP_NO_LIMIT'; + } + + /* + Determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. + LDAP_OPT_ON + LDAP_OPT_OFF + Default: ON + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_REFERRALS, $version['LDAP_OPT_REFERRALS'] ); + if ( $version['LDAP_OPT_REFERRALS'] == 0 ) { + $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_OFF'; + } else { + $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_ON'; + } + + /* + Determines whether LDAP I/O operations are automatically restarted if they abort prematurely. + LDAP_OPT_ON + LDAP_OPT_OFF + Default: OFF + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_RESTART, $version['LDAP_OPT_RESTART'] ); + if ( $version['LDAP_OPT_RESTART'] == 0 ) { + $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_OFF'; + } else { + $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_ON'; + } + + /* + This option indicates the version of the LDAP protocol used when communicating with the primary LDAP server. + LDAP_VERSION2 (2) + LDAP_VERSION3 (3) + Default: LDAP_VERSION2 (2) + */ + ldap_get_option( $this->_connectionID, LDAP_OPT_PROTOCOL_VERSION, $version['LDAP_OPT_PROTOCOL_VERSION'] ); + if ( $version['LDAP_OPT_PROTOCOL_VERSION'] == 2 ) { + $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION2'; + } else { + $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION3'; + } + + /* The host name (or list of hosts) for the primary LDAP server. */ + ldap_get_option( $this->_connectionID, LDAP_OPT_HOST_NAME, $version['LDAP_OPT_HOST_NAME'] ); + ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_NUMBER, $version['LDAP_OPT_ERROR_NUMBER'] ); + ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_STRING, $version['LDAP_OPT_ERROR_STRING'] ); + ldap_get_option( $this->_connectionID, LDAP_OPT_MATCHED_DN, $version['LDAP_OPT_MATCHED_DN'] ); + + return $this->version = $version; + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_ldap extends ADORecordSet{ + + var $databaseType = "ldap"; + var $canSeek = false; + var $_entryID; /* keeps track of the entry resource identifier */ + + function __construct($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch ($mode) + { + case ADODB_FETCH_NUM: + $this->fetchMode = LDAP_NUM; + break; + case ADODB_FETCH_ASSOC: + $this->fetchMode = LDAP_ASSOC; + break; + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: + $this->fetchMode = LDAP_BOTH; + break; + } + + parent::__construct($queryID); + } + + function _initrs() + { + /* + This could be teaked to respect the $COUNTRECS directive from ADODB + It's currently being used in the _fetch() function and the + GetAssoc() function + */ + $this->_numOfRows = ldap_count_entries( $this->connection->_connectionID, $this->_queryID ); + } + + /* + Return whole recordset as a multi-dimensional associative array + */ + function GetAssoc($force_array = false, $first2cols = false) + { + $records = $this->_numOfRows; + $results = array(); + for ( $i=0; $i < $records; $i++ ) { + foreach ( $this->fields as $k=>$v ) { + if ( is_array( $v ) ) { + if ( $v['count'] == 1 ) { + $results[$i][$k] = $v[0]; + } else { + array_shift( $v ); + $results[$i][$k] = $v; + } + } + } + } + + return $results; + } + + function GetRowAssoc($upper = ADODB_ASSOC_CASE) + { + $results = array(); + foreach ( $this->fields as $k=>$v ) { + if ( is_array( $v ) ) { + if ( $v['count'] == 1 ) { + $results[$k] = $v[0]; + } else { + array_shift( $v ); + $results[$k] = $v; + } + } + } + + return $results; + } + + function GetRowNums() + { + $results = array(); + foreach ( $this->fields as $k=>$v ) { + static $i = 0; + if (is_array( $v )) { + if ( $v['count'] == 1 ) { + $results[$i] = $v[0]; + } else { + array_shift( $v ); + $results[$i] = $v; + } + $i++; + } + } + return $results; + } + + function _fetch() + { + if ( $this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0 ) { + return false; + } + + if ( $this->_currentRow == 0 ) { + $this->_entryID = ldap_first_entry( $this->connection->_connectionID, $this->_queryID ); + } else { + $this->_entryID = ldap_next_entry( $this->connection->_connectionID, $this->_entryID ); + } + + $this->fields = ldap_get_attributes( $this->connection->_connectionID, $this->_entryID ); + $this->_numOfFields = $this->fields['count']; + + switch ( $this->fetchMode ) { + + case LDAP_ASSOC: + $this->fields = $this->GetRowAssoc(); + break; + + case LDAP_NUM: + $this->fields = array_merge($this->GetRowNums(),$this->GetRowAssoc()); + break; + + case LDAP_BOTH: + default: + $this->fields = $this->GetRowNums(); + break; + } + + return is_array( $this->fields ); + } + + function _close() { + @ldap_free_result( $this->_queryID ); + $this->_queryID = false; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-mssql.inc.php b/ehcp/adodb5/drivers/adodb-mssql.inc.php new file mode 100644 index 0000000..fb87a4a --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-mssql.inc.php @@ -0,0 +1,1178 @@ += 0x4300) { +// docs say 4.2.0, but testing shows only since 4.3.0 does it work! + ini_set('mssql.datetimeconvert',0); +} else { +global $ADODB_mssql_mths; // array, months must be upper-case + + + $ADODB_mssql_date_order = 'mdy'; + $ADODB_mssql_mths = array( + 'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6, + 'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); +} + +//--------------------------------------------------------------------------- +// Call this to autoset $ADODB_mssql_date_order at the beginning of your code, +// just after you connect to the database. Supports mdy and dmy only. +// Not required for PHP 4.2.0 and above. +function AutoDetect_MSSQL_Date_Order($conn) +{ +global $ADODB_mssql_date_order; + $adate = $conn->GetOne('select getdate()'); + if ($adate) { + $anum = (int) $adate; + if ($anum > 0) { + if ($anum > 31) { + //ADOConnection::outp( "MSSQL: YYYY-MM-DD date format not supported currently"); + } else + $ADODB_mssql_date_order = 'dmy'; + } else + $ADODB_mssql_date_order = 'mdy'; + } +} + +class ADODB_mssql extends ADOConnection { + var $databaseType = "mssql"; + var $dataProvider = "mssql"; + var $replaceQuote = "''"; // string to use to replace quotes + var $fmtDate = "'Y-m-d'"; + var $fmtTimeStamp = "'Y-m-d\TH:i:s'"; + var $hasInsertID = true; + var $substr = "substring"; + var $length = 'len'; + var $hasAffectedRows = true; + var $metaDatabasesSQL = "select name from sysdatabases where name <> 'master'"; + var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))"; + var $metaColumnsSQL = # xtype==61 is datetime + "select c.name,t.name,c.length,c.isnullable, c.status, + (case when c.xusertype=61 then 0 else c.xprec end), + (case when c.xusertype=61 then 0 else c.xscale end) + from syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id where o.name='%s'"; + var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE + var $hasGenID = true; + var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; + var $sysTimeStamp = 'GetDate()'; + var $_has_mssql_init; + var $maxParameterLen = 4000; + var $arrayClass = 'ADORecordSet_array_mssql'; + var $uniqueSort = true; + var $leftOuter = '*='; + var $rightOuter = '=*'; + var $ansiOuter = true; // for mssql7 or later + var $poorAffectedRows = true; + var $identitySQL = 'select SCOPE_IDENTITY()'; // 'select SCOPE_IDENTITY'; # for mssql 2000 + var $uniqueOrderBy = true; + var $_bindInputArray = true; + var $forceNewConnect = false; + + function __construct() + { + $this->_has_mssql_init = (strnatcmp(PHP_VERSION,'4.1.0')>=0); + } + + function ServerInfo() + { + global $ADODB_FETCH_MODE; + + + if ($this->fetchMode === false) { + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + } else + $savem = $this->SetFetchMode(ADODB_FETCH_NUM); + + if (0) { + $stmt = $this->PrepareSP('sp_server_info'); + $val = 2; + $this->Parameter($stmt,$val,'attribute_id'); + $row = $this->GetRow($stmt); + } + + $row = $this->GetRow("execute sp_server_info 2"); + + + if ($this->fetchMode === false) { + $ADODB_FETCH_MODE = $savem; + } else + $this->SetFetchMode($savem); + + $arr['description'] = $row[2]; + $arr['version'] = ADOConnection::_findvers($arr['description']); + return $arr; + } + + function IfNull( $field, $ifNull ) + { + return " ISNULL($field, $ifNull) "; // if MS SQL Server + } + + function _insertid() + { + // SCOPE_IDENTITY() + // Returns the last IDENTITY value inserted into an IDENTITY column in + // the same scope. A scope is a module -- a stored procedure, trigger, + // function, or batch. Thus, two statements are in the same scope if + // they are in the same stored procedure, function, or batch. + if ($this->lastInsID !== false) { + return $this->lastInsID; // InsID from sp_executesql call + } else { + return $this->GetOne($this->identitySQL); + } + } + + + + /** + * Correctly quotes a string so that all strings are escaped. We prefix and append + * to the string single-quotes. + * An example is $db->qstr("Don't bother",magic_quotes_runtime()); + * + * @param s the string to quote + * @param [magic_quotes] if $s is GET/POST var, set to get_magic_quotes_gpc(). + * This undoes the stupidity of magic quotes for GPC. + * + * @return quoted string to be sent back to database + */ + function qstr($s,$magic_quotes=false) + { + if (!$magic_quotes) { + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " unless sybase is on + $sybase = ini_get('magic_quotes_sybase'); + if (!$sybase) { + $s = str_replace('\\"','"',$s); + if ($this->replaceQuote == "\\'") // ' already quoted, no need to change anything + return "'$s'"; + else {// change \' to '' for sybase/mssql + $s = str_replace('\\\\','\\',$s); + return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; + } + } else { + return "'".$s."'"; + } + } +// moodle change end - see readme_moodle.txt + + function _affectedrows() + { + return $this->GetOne('select @@rowcount'); + } + + var $_dropSeqSQL = "drop table %s"; + + function CreateSequence($seq='adodbseq',$start=1) + { + + $this->Execute('BEGIN TRANSACTION adodbseq'); + $start -= 1; + $this->Execute("create table $seq (id float(53))"); + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + $this->Execute('ROLLBACK TRANSACTION adodbseq'); + return false; + } + $this->Execute('COMMIT TRANSACTION adodbseq'); + return true; + } + + function GenID($seq='adodbseq',$start=1) + { + //$this->debug=1; + $this->Execute('BEGIN TRANSACTION adodbseq'); + $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1"); + if (!$ok) { + $this->Execute("create table $seq (id float(53))"); + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + $this->Execute('ROLLBACK TRANSACTION adodbseq'); + return false; + } + $this->Execute('COMMIT TRANSACTION adodbseq'); + return $start; + } + $num = $this->GetOne("select id from $seq"); + $this->Execute('COMMIT TRANSACTION adodbseq'); + return $num; + + // in old implementation, pre 1.90, we returned GUID... + //return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'"); + } + + + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + if ($nrows > 0 && $offset <= 0) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql); + + if ($secs2cache) + $rs = $this->CacheExecute($secs2cache, $sql, $inputarr); + else + $rs = $this->Execute($sql,$inputarr); + } else + $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + + return $rs; + } + + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '+'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "datename(yyyy,$col)"; + break; + case 'M': + $s .= "convert(char(3),$col,0)"; + break; + case 'm': + $s .= "replace(str(month($col),2),' ','0')"; + break; + case 'Q': + case 'q': + $s .= "datename(quarter,$col)"; + break; + case 'D': + case 'd': + $s .= "replace(str(day($col),2),' ','0')"; + break; + case 'h': + $s .= "substring(convert(char(14),$col,0),13,2)"; + break; + + case 'H': + $s .= "replace(str(datepart(hh,$col),2),' ','0')"; + break; + + case 'i': + $s .= "replace(str(datepart(mi,$col),2),' ','0')"; + break; + case 's': + $s .= "replace(str(datepart(ss,$col),2),' ','0')"; + break; + case 'a': + case 'A': + $s .= "substring(convert(char(19),$col,0),18,2)"; + break; + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + break; + } + } + return $s; + } + + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + $ok = $this->Execute('BEGIN TRAN'); + return $ok; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + $ok = $this->Execute('COMMIT TRAN'); + return $ok; + } + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $ok = $this->Execute('ROLLBACK TRAN'); + return $ok; + } + + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET TRANSACTION ".$transaction_mode); + } + + /* + Usage: + + $this->BeginTrans(); + $this->RowLock('table1,table2','table1.id=33 and table2.id=table1.id'); # lock row 33 for both tables + + # some operation on both tables table1 and table2 + + $this->CommitTrans(); + + See http://www.swynk.com/friends/achigrik/SQL70Locks.asp + */ + function RowLock($tables,$where,$col='1 as adodbignore') + { + if ($col == '1 as adodbignore') $col = 'top 1 null as ignore'; + if (!$this->transCnt) $this->BeginTrans(); + return $this->GetOne("select $col from $tables with (ROWLOCK,HOLDLOCK) where $where"); + } + + + function MetaColumns($table, $normalize=true) + { +// $arr = ADOConnection::MetaColumns($table); +// return $arr; + + $this->_findschema($table,$schema); + if ($schema) { + $dbName = $this->database; + $this->SelectDB($schema); + } + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + + if ($schema) { + $this->SelectDB($dbName); + } + + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if (!is_object($rs)) { + $false = false; + return $false; + } + + $retarr = array(); + while (!$rs->EOF){ + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + + $fld->not_null = (!$rs->fields[3]); + $fld->auto_increment = ($rs->fields[4] == 128); // sys.syscolumns status field. 0x80 = 128 ref: http://msdn.microsoft.com/en-us/library/ms186816.aspx + + if (isset($rs->fields[5]) && $rs->fields[5]) { + if ($rs->fields[5]>0) $fld->max_length = $rs->fields[5]; + $fld->scale = $rs->fields[6]; + if ($fld->scale>0) $fld->max_length += 1; + } else + $fld->max_length = $rs->fields[2]; + + if ($save == ADODB_FETCH_NUM) { + $retarr[] = $fld; + } else { + $retarr[strtoupper($fld->name)] = $fld; + } + $rs->MoveNext(); + } + + $rs->Close(); + return $retarr; + + } + + + function MetaIndexes($table,$primary=false, $owner=false) + { + $table = $this->qstr($table); + + $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, + CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK, + CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique + FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id + INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid + INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid + WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table + ORDER BY O.name, I.Name, K.keyno"; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute($sql); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + return FALSE; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + if ($primary && !$row[5]) continue; + + $indexes[$row[0]]['unique'] = $row[6]; + $indexes[$row[0]]['columns'][] = $row[1]; + } + return $indexes; + } + + function MetaForeignKeys($table, $owner=false, $upper=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $table = $this->qstr(strtoupper($table)); + + $sql = +"select object_name(constid) as constraint_name, + col_name(fkeyid, fkey) as column_name, + object_name(rkeyid) as referenced_table_name, + col_name(rkeyid, rkey) as referenced_column_name +from sysforeignkeys +where upper(object_name(fkeyid)) = $table +order by constraint_name, referenced_table_name, keyno"; + + $constraints = $this->GetArray($sql); + + $ADODB_FETCH_MODE = $save; + + $arr = false; + foreach($constraints as $constr) { + //print_r($constr); + $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; + } + if (!$arr) return false; + + $arr2 = false; + + foreach($arr as $k => $v) { + foreach($v as $a => $b) { + if ($upper) $a = strtoupper($a); + $arr2[$a] = $b; + } + } + return $arr2; + } + + //From: Fernando Moreira + function MetaDatabases() + { + if(@mssql_select_db("master")) { + $qry=$this->metaDatabasesSQL; + if($rs=@mssql_query($qry,$this->_connectionID)){ + $tmpAr=$ar=array(); + while($tmpAr=@mssql_fetch_row($rs)) + $ar[]=$tmpAr[0]; + @mssql_select_db($this->database); + if(sizeof($ar)) + return($ar); + else + return(false); + } else { + @mssql_select_db($this->database); + return(false); + } + } + return(false); + } + + // "Stein-Aksel Basma" + // tested with MSSQL 2000 + function MetaPrimaryKeys($table, $owner=false) + { + global $ADODB_FETCH_MODE; + + $schema = ''; + $this->_findschema($table,$schema); + if (!$schema) $schema = $this->database; + if ($schema) $schema = "and k.table_catalog like '$schema%'"; + + $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k, + information_schema.table_constraints tc + where tc.constraint_name = k.constraint_name and tc.constraint_type = + 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position "; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $a = $this->GetCol($sql); + $ADODB_FETCH_MODE = $savem; + + if ($a && sizeof($a)>0) return $a; + $false = false; + return $false; + } + + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(($mask)); + $this->metaTablesSQL .= " AND name like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + function SelectDB($dbName) + { + $this->database = $dbName; + $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions + if ($this->_connectionID) { + return @mssql_select_db($dbName); + } + else return false; + } + + function ErrorMsg() + { + if (empty($this->_errorMsg)){ + $this->_errorMsg = mssql_get_last_message(); + } + return $this->_errorMsg; + } + + function ErrorNo() + { + if ($this->_logsql && $this->_errorCode !== false) return $this->_errorCode; + if (empty($this->_errorMsg)) { + $this->_errorMsg = mssql_get_last_message(); + } + $id = @mssql_query("select @@ERROR",$this->_connectionID); + if (!$id) return false; + $arr = mssql_fetch_array($id); + @mssql_free_result($id); + if (is_array($arr)) return $arr[0]; + else return -1; + } + + // returns true or false, newconnect supported since php 5.1.0. + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$newconnect=false) + { + if (!function_exists('mssql_pconnect')) return null; + $this->_connectionID = mssql_connect($argHostname,$argUsername,$argPassword,$newconnect); + if ($this->_connectionID === false) return false; + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('mssql_pconnect')) return null; + $this->_connectionID = mssql_pconnect($argHostname,$argUsername,$argPassword); + if ($this->_connectionID === false) return false; + + // persistent connections can forget to rollback on crash, so we do it here. + if ($this->autoRollback) { + $cnt = $this->GetOne('select @@TRANCOUNT'); + while (--$cnt >= 0) $this->Execute('ROLLBACK TRAN'); + } + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, true); + } + + function Prepare($sql) + { + $sqlarr = explode('?',$sql); + if (sizeof($sqlarr) <= 1) return $sql; + $sql2 = $sqlarr[0]; + for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) { + $sql2 .= '@P'.($i-1) . $sqlarr[$i]; + } + return array($sql,$this->qstr($sql2),$max,$sql2); + } + + function PrepareSP($sql,$param=true) + { + if (!$this->_has_mssql_init) { + ADOConnection::outp( "PrepareSP: mssql_init only available since PHP 4.1.0"); + return $sql; + } + $stmt = mssql_init($sql,$this->_connectionID); + if (!$stmt) return $sql; + return array($sql,$stmt); + } + + // returns concatenated string + // MSSQL requires integers to be cast as strings + // automatically cast every datatype to VARCHAR(255) + // @author David Rogers (introspectshun) + function Concat() + { + $s = ""; + $arr = func_get_args(); + + // Split single record on commas, if possible + if (sizeof($arr) == 1) { + foreach ($arr as $arg) { + $args = explode(',', $arg); + } + $arr = $args; + } + + array_walk($arr, create_function('&$v', '$v = "CAST(" . $v . " AS VARCHAR(255))";')); + $s = implode('+',$arr); + if (sizeof($arr) > 0) return "$s"; + + return ''; + } + + /* + Usage: + $stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group + + # note that the parameter does not have @ in front! + $db->Parameter($stmt,$id,'myid'); + $db->Parameter($stmt,$group,'group',false,64); + $db->Execute($stmt); + + @param $stmt Statement returned by Prepare() or PrepareSP(). + @param $var PHP variable to bind to. Can set to null (for isNull support). + @param $name Name of stored procedure variable name to bind to. + @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. + @param [$maxLen] Holds an maximum length of the variable. + @param [$type] The data type of $var. Legal values depend on driver. + + See mssql_bind documentation at php.net. + */ + function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=4000, $type=false) + { + if (!$this->_has_mssql_init) { + ADOConnection::outp( "Parameter: mssql_bind only available since PHP 4.1.0"); + return false; + } + + $isNull = is_null($var); // php 4.0.4 and above... + + if ($type === false) + switch(gettype($var)) { + default: + case 'string': $type = SQLVARCHAR; break; + case 'double': $type = SQLFLT8; break; + case 'integer': $type = SQLINT4; break; + case 'boolean': $type = SQLINT1; break; # SQLBIT not supported in 4.1.0 + } + + if ($this->debug) { + $prefix = ($isOutput) ? 'Out' : 'In'; + $ztype = (empty($type)) ? 'false' : $type; + ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);"); + } + /* + See http://phplens.com/lens/lensforum/msgs.php?id=7231 + + RETVAL is HARD CODED into php_mssql extension: + The return value (a long integer value) is treated like a special OUTPUT parameter, + called "RETVAL" (without the @). See the example at mssql_execute to + see how it works. - type: one of this new supported PHP constants. + SQLTEXT, SQLVARCHAR,SQLCHAR, SQLINT1,SQLINT2, SQLINT4, SQLBIT,SQLFLT8 + */ + if ($name !== 'RETVAL') $name = '@'.$name; + return mssql_bind($stmt[1], $name, $var, $type, $isOutput, $isNull, $maxLen); + } + + /* + Unfortunately, it appears that mssql cannot handle varbinary > 255 chars + So all your blobs must be of type "image". + + Remember to set in php.ini the following... + + ; Valid range 0 - 2147483647. Default = 4096. + mssql.textlimit = 0 ; zero to pass through + + ; Valid range 0 - 2147483647. Default = 4096. + mssql.textsize = 0 ; zero to pass through + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + + if (strtoupper($blobtype) == 'CLOB') { + $sql = "UPDATE $table SET $column='" . $val . "' WHERE $where"; + return $this->Execute($sql) != false; + } + $sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where"; + return $this->Execute($sql) != false; + } + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + $this->_errorMsg = false; + if (is_array($inputarr)) { + + # bind input params with sp_executesql: + # see http://www.quest-pipelines.com/newsletter-v3/0402_F.htm + # works only with sql server 7 and newer + $getIdentity = false; + if (!is_array($sql) && preg_match('/^\\s*insert/i', $sql)) { + $getIdentity = true; + $sql .= (preg_match('/;\\s*$/i', $sql) ? ' ' : '; ') . $this->identitySQL; + } + if (!is_array($sql)) $sql = $this->Prepare($sql); + $params = ''; + $decl = ''; + $i = 0; + foreach($inputarr as $v) { + if ($decl) { + $decl .= ', '; + $params .= ', '; + } + if (is_string($v)) { + $len = strlen($v); + if ($len == 0) $len = 1; + + if ($len > 4000 ) { + // NVARCHAR is max 4000 chars. Let's use NTEXT + $decl .= "@P$i NTEXT"; + } else { + $decl .= "@P$i NVARCHAR($len)"; + } + + $params .= "@P$i=N". (strncmp($v,"'",1)==0? $v : $this->qstr($v)); + } else if (is_integer($v)) { + $decl .= "@P$i INT"; + $params .= "@P$i=".$v; + } else if (is_float($v)) { + $decl .= "@P$i FLOAT"; + $params .= "@P$i=".$v; + } else if (is_bool($v)) { + $decl .= "@P$i INT"; # Used INT just in case BIT in not supported on the user's MSSQL version. It will cast appropriately. + $params .= "@P$i=".(($v)?'1':'0'); # True == 1 in MSSQL BIT fields and acceptable for storing logical true in an int field + } else { + $decl .= "@P$i CHAR"; # Used char because a type is required even when the value is to be NULL. + $params .= "@P$i=NULL"; + } + $i += 1; + } + $decl = $this->qstr($decl); + if ($this->debug) ADOConnection::outp("sp_executesql N{$sql[1]},N$decl,$params"); + $rez = mssql_query("sp_executesql N{$sql[1]},N$decl,$params", $this->_connectionID); + if ($getIdentity) { + $arr = @mssql_fetch_row($rez); + $this->lastInsID = isset($arr[0]) ? $arr[0] : false; + @mssql_data_seek($rez, 0); + } + + } else if (is_array($sql)) { + # PrepareSP() + $rez = mssql_execute($sql[1]); + $this->lastInsID = false; + + } else { + $rez = mssql_query($sql,$this->_connectionID); + $this->lastInsID = false; + } + return $rez; + } + + // returns true or false + function _close() + { + if ($this->transCnt) $this->RollbackTrans(); + $rez = @mssql_close($this->_connectionID); + $this->_connectionID = false; + return $rez; + } + + // mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + return ADORecordSet_array_mssql::UnixDate($v); + } + + static function UnixTimeStamp($v) + { + return ADORecordSet_array_mssql::UnixTimeStamp($v); + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_mssql extends ADORecordSet { + + var $databaseType = "mssql"; + var $canSeek = true; + var $hasFetchAssoc; // see http://phplens.com/lens/lensforum/msgs.php?id=6083 + // _mths works only in non-localised system + + function __construct($id,$mode=false) + { + // freedts check... + $this->hasFetchAssoc = function_exists('mssql_fetch_assoc'); + + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + + } + $this->fetchMode = $mode; + return parent::__construct($id,$mode); + } + + + function _initrs() + { + GLOBAL $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS)? @mssql_num_rows($this->_queryID):-1; + $this->_numOfFields = @mssql_num_fields($this->_queryID); + } + + + //Contributed by "Sven Axelsson" + // get next resultset - requires PHP 4.0.5 or later + function NextRecordSet() + { + if (!mssql_next_result($this->_queryID)) return false; + $this->_inited = false; + $this->bind = false; + $this->_currentRow = -1; + $this->Init(); + return true; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode != ADODB_FETCH_NUM) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. */ + + function FetchField($fieldOffset = -1) + { + if ($fieldOffset != -1) { + $f = @mssql_fetch_field($this->_queryID, $fieldOffset); + } + else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ + $f = @mssql_fetch_field($this->_queryID); + } + $false = false; + if (empty($f)) return $false; + return $f; + } + + function _seek($row) + { + return @mssql_data_seek($this->_queryID, $row); + } + + // speedup + function MoveNext() + { + if ($this->EOF) return false; + + $this->_currentRow++; + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + if ($this->fetchMode & ADODB_FETCH_NUM) { + //ADODB_FETCH_BOTH mode + $this->fields = @mssql_fetch_array($this->_queryID); + } + else { + if ($this->hasFetchAssoc) {// only for PHP 4.2.0 or later + $this->fields = @mssql_fetch_assoc($this->_queryID); + } else { + $flds = @mssql_fetch_array($this->_queryID); + if (is_array($flds)) { + $fassoc = array(); + foreach($flds as $k => $v) { + if (is_numeric($k)) continue; + $fassoc[$k] = $v; + } + $this->fields = $fassoc; + } else + $this->fields = false; + } + } + + if (is_array($this->fields)) { + if (ADODB_ASSOC_CASE == 0) { + foreach($this->fields as $k=>$v) { + $kn = strtolower($k); + if ($kn <> $k) { + unset($this->fields[$k]); + $this->fields[$kn] = $v; + } + } + } else if (ADODB_ASSOC_CASE == 1) { + foreach($this->fields as $k=>$v) { + $kn = strtoupper($k); + if ($kn <> $k) { + unset($this->fields[$k]); + $this->fields[$kn] = $v; + } + } + } + } + } else { + $this->fields = @mssql_fetch_row($this->_queryID); + } + if ($this->fields) return true; + $this->EOF = true; + + return false; + } + + + // INSERT UPDATE DELETE returns false even if no error occurs in 4.0.4 + // also the date format has been changed from YYYY-mm-dd to dd MMM YYYY in 4.0.4. Idiot! + function _fetch($ignore_fields=false) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + if ($this->fetchMode & ADODB_FETCH_NUM) { + //ADODB_FETCH_BOTH mode + $this->fields = @mssql_fetch_array($this->_queryID); + } else { + if ($this->hasFetchAssoc) // only for PHP 4.2.0 or later + $this->fields = @mssql_fetch_assoc($this->_queryID); + else { + $this->fields = @mssql_fetch_array($this->_queryID); + if (@is_array($$this->fields)) { + $fassoc = array(); + foreach($$this->fields as $k => $v) { + if (is_integer($k)) continue; + $fassoc[$k] = $v; + } + $this->fields = $fassoc; + } + } + } + + if (!$this->fields) { + } else if (ADODB_ASSOC_CASE == 0) { + foreach($this->fields as $k=>$v) { + $kn = strtolower($k); + if ($kn <> $k) { + unset($this->fields[$k]); + $this->fields[$kn] = $v; + } + } + } else if (ADODB_ASSOC_CASE == 1) { + foreach($this->fields as $k=>$v) { + $kn = strtoupper($k); + if ($kn <> $k) { + unset($this->fields[$k]); + $this->fields[$kn] = $v; + } + } + } + } else { + $this->fields = @mssql_fetch_row($this->_queryID); + } + return $this->fields; + } + + /* close() only needs to be called if you are worried about using too much memory while your script + is running. All associated result memory for the specified result identifier will automatically be freed. */ + + function _close() + { + if($this->_queryID) { + $rez = mssql_free_result($this->_queryID); + $this->_queryID = false; + return $rez; + } + return true; + } + + // mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + return ADORecordSet_array_mssql::UnixDate($v); + } + + static function UnixTimeStamp($v) + { + return ADORecordSet_array_mssql::UnixTimeStamp($v); + } + +} + + +class ADORecordSet_array_mssql extends ADORecordSet_array { + function __construct($id=-1,$mode=false) + { + parent::__construct($id,$mode); + } + + // mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + + if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixDate($v); + + global $ADODB_mssql_mths,$ADODB_mssql_date_order; + + //Dec 30 2000 12:00AM + if ($ADODB_mssql_date_order == 'dmy') { + if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4})|" ,$v, $rr)) { + return parent::UnixDate($v); + } + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $theday = $rr[1]; + $themth = substr(strtoupper($rr[2]),0,3); + } else { + if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})|" ,$v, $rr)) { + return parent::UnixDate($v); + } + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $theday = $rr[2]; + $themth = substr(strtoupper($rr[1]),0,3); + } + $themth = $ADODB_mssql_mths[$themth]; + if ($themth <= 0) return false; + // h-m-s-MM-DD-YY + return mktime(0,0,0,$themth,$theday,$rr[3]); + } + + static function UnixTimeStamp($v) + { + + if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixTimeStamp($v); + + global $ADODB_mssql_mths,$ADODB_mssql_date_order; + + //Dec 30 2000 12:00AM + if ($ADODB_mssql_date_order == 'dmy') { + if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|" + ,$v, $rr)) return parent::UnixTimeStamp($v); + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $theday = $rr[1]; + $themth = substr(strtoupper($rr[2]),0,3); + } else { + if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|" + ,$v, $rr)) return parent::UnixTimeStamp($v); + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $theday = $rr[2]; + $themth = substr(strtoupper($rr[1]),0,3); + } + + $themth = $ADODB_mssql_mths[$themth]; + if ($themth <= 0) return false; + + switch (strtoupper($rr[6])) { + case 'P': + if ($rr[4]<12) $rr[4] += 12; + break; + case 'A': + if ($rr[4]==12) $rr[4] = 0; + break; + default: + break; + } + // h-m-s-MM-DD-YY + return mktime($rr[4],$rr[5],0,$themth,$theday,$rr[3]); + } +} + +/* +Code Example 1: + +select object_name(constid) as constraint_name, + object_name(fkeyid) as table_name, + col_name(fkeyid, fkey) as column_name, + object_name(rkeyid) as referenced_table_name, + col_name(rkeyid, rkey) as referenced_column_name +from sysforeignkeys +where object_name(fkeyid) = x +order by constraint_name, table_name, referenced_table_name, keyno + +Code Example 2: +select constraint_name, + column_name, + ordinal_position +from information_schema.key_column_usage +where constraint_catalog = db_name() +and table_name = x +order by constraint_name, ordinal_position + +http://www.databasejournal.com/scripts/article.php/1440551 +*/ diff --git a/ehcp/adodb5/drivers/adodb-mssql_n.inc.php b/ehcp/adodb5/drivers/adodb-mssql_n.inc.php new file mode 100644 index 0000000..2bbac5b --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-mssql_n.inc.php @@ -0,0 +1,249 @@ +_appendN($sql); + return ADODB_mssql::_query($sql,$inputarr); + } + + /** + * This function will intercept all the literals used in the SQL, prepending the "N" char to them + * in order to allow mssql to store properly data sent in the correct UCS-2 encoding (by freeTDS + * and ODBTP) keeping SQL compatibility at ADOdb level (instead of hacking every project to add + * the "N" notation when working against MSSQL. + * + * The orginal note indicated that this hack should only be used if ALL the char-based columns + * in your DB are of type nchar, nvarchar and ntext, but testing seems to indicate that SQL server + * doesn't seem to care if the statement is used against char etc fields. + * + * @todo This function should raise an ADOdb error if one of the transformations fail + * + * @param mixed $inboundData Either a string containing an SQL statement + * or an array with resources from prepared statements + * + * @return mixed + */ + function _appendN($inboundData) { + + $inboundIsArray = false; + + if (is_array($inboundData)) + { + $inboundIsArray = true; + $inboundArray = $inboundData; + } else + $inboundArray = (array)$inboundData; + + /* + * All changes will be placed here + */ + $outboundArray = $inboundArray; + + foreach($inboundArray as $inboundKey=>$inboundValue) + { + + if (is_resource($inboundValue)) + { + /* + * Prepared statement resource + */ + if ($this->debug) + ADOConnection::outp("{$this->databaseType} index $inboundKey value is resource, continue"); + + continue; + } + + if (strpos($inboundValue, SINGLEQUOTE) === false) + { + /* + * Check we have something to manipulate + */ + if ($this->debug) + ADOConnection::outp("{$this->databaseType} index $inboundKey value $inboundValue has no single quotes, continue"); + continue; + } + + /* + * Check we haven't an odd number of single quotes (this can cause problems below + * and should be considered one wrong SQL). Exit with debug info. + */ + if ((substr_count($inboundValue, SINGLEQUOTE) & 1)) + { + if ($this->debug) + ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Wrong number of quotes (odd)"); + + break; + } + + /* + * Check we haven't any backslash + single quote combination. It should mean wrong + * backslashes use (bad magic_quotes_sybase?). Exit with debug info. + */ + $regexp = '/(\\\\' . SINGLEQUOTE . '[^' . SINGLEQUOTE . '])/'; + if (preg_match($regexp, $inboundValue)) + { + if ($this->debug) + ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Found bad use of backslash + single quote"); + + break; + } + + /* + * Remove pairs of single-quotes + */ + $pairs = array(); + $regexp = '/(' . SINGLEQUOTE . SINGLEQUOTE . ')/'; + preg_match_all($regexp, $inboundValue, $list_of_pairs); + + if ($list_of_pairs) + { + foreach (array_unique($list_of_pairs[0]) as $key=>$value) + $pairs['<@#@#@PAIR-'.$key.'@#@#@>'] = $value; + + + if (!empty($pairs)) + $inboundValue = str_replace($pairs, array_keys($pairs), $inboundValue); + + } + + /* + * Remove the rest of literals present in the query + */ + $literals = array(); + $regexp = '/(N?' . SINGLEQUOTE . '.*?' . SINGLEQUOTE . ')/is'; + preg_match_all($regexp, $inboundValue, $list_of_literals); + + if ($list_of_literals) + { + foreach (array_unique($list_of_literals[0]) as $key=>$value) + $literals['<#@#@#LITERAL-'.$key.'#@#@#>'] = $value; + + + if (!empty($literals)) + $inboundValue = str_replace($literals, array_keys($literals), $inboundValue); + } + + /* + * Analyse literals to prepend the N char to them if their contents aren't numeric + */ + if (!empty($literals)) + { + foreach ($literals as $key=>$value) { + if (!is_numeric(trim($value, SINGLEQUOTE))) + /* + * Non numeric string, prepend our dear N, whilst + * Trimming potentially existing previous "N" + */ + $literals[$key] = 'N' . trim($value, 'N'); + + } + } + + /* + * Re-apply literals to the text + */ + if (!empty($literals)) + $inboundValue = str_replace(array_keys($literals), $literals, $inboundValue); + + + /* + * Any pairs followed by N' must be switched to N' followed by those pairs + * (or strings beginning with single quotes will fail) + */ + $inboundValue = preg_replace("/((<@#@#@PAIR-(\d+)@#@#@>)+)N'/", "N'$1", $inboundValue); + + /* + * Re-apply pairs of single-quotes to the text + */ + if (!empty($pairs)) + $inboundValue = str_replace(array_keys($pairs), $pairs, $inboundValue); + + + /* + * Print transformation if debug = on + */ + if (strcmp($inboundValue,$inboundArray[$inboundKey]) <> 0 && $this->debug) + ADOConnection::outp("{$this->databaseType} internal transformation: {$inboundArray[$inboundKey]} to {$inboundValue}"); + + if (strcmp($inboundValue,$inboundArray[$inboundKey]) <> 0) + /* + * Place the transformed value into the outbound array + */ + $outboundArray[$inboundKey] = $inboundValue; + } + + /* + * Any transformations are in the $outboundArray + */ + if ($inboundIsArray) + return $outboundArray; + + /* + * We passed a string in originally + */ + return $outboundArray[0]; + + } + +} + +class ADORecordset_mssql_n extends ADORecordset_mssql { + var $databaseType = "mssql_n"; + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-mssqlnative.inc.php b/ehcp/adodb5/drivers/adodb-mssqlnative.inc.php new file mode 100644 index 0000000..08cdcf6 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-mssqlnative.inc.php @@ -0,0 +1,1200 @@ += 0x4300) { +// docs say 4.2.0, but testing shows only since 4.3.0 does it work! + ini_set('mssql.datetimeconvert',0); +} else { + global $ADODB_mssql_mths; // array, months must be upper-case + $ADODB_mssql_date_order = 'mdy'; + $ADODB_mssql_mths = array( + 'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6, + 'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); +} + +class ADODB_mssqlnative extends ADOConnection { + var $databaseType = "mssqlnative"; + var $dataProvider = "mssqlnative"; + var $replaceQuote = "''"; // string to use to replace quotes + var $fmtDate = "'Y-m-d'"; + var $fmtTimeStamp = "'Y-m-d\TH:i:s'"; + var $hasInsertID = true; + var $substr = "substring"; + var $length = 'len'; + var $hasAffectedRows = true; + var $poorAffectedRows = false; + var $metaDatabasesSQL = "select name from sys.sysdatabases where name <> 'master'"; + var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))"; + var $metaColumnsSQL = + "select c.name, + t.name as type, + c.length, + c.xprec as precision, + c.xscale as scale, + c.isnullable as nullable, + c.cdefault as default_value, + c.xtype, + t.length as type_length, + sc.is_identity + from syscolumns c + join systypes t on t.xusertype=c.xusertype + join sysobjects o on o.id=c.id + join sys.tables st on st.name=o.name + join sys.columns sc on sc.object_id = st.object_id and sc.name=c.name + where o.name='%s'"; + var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE + var $hasGenID = true; + var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; + var $sysTimeStamp = 'GetDate()'; + var $maxParameterLen = 4000; + var $arrayClass = 'ADORecordSet_array_mssqlnative'; + var $uniqueSort = true; + var $leftOuter = '*='; + var $rightOuter = '=*'; + var $ansiOuter = true; // for mssql7 or later + var $identitySQL = 'select SCOPE_IDENTITY()'; // 'select SCOPE_IDENTITY'; # for mssql 2000 + var $uniqueOrderBy = true; + var $_bindInputArray = true; + var $_dropSeqSQL = "drop table %s"; + var $connectionInfo = array(); + var $sequences = false; + var $mssql_version = ''; + + function __construct() + { + if ($this->debug) { + ADOConnection::outp("
");
+			sqlsrv_set_error_handling( SQLSRV_ERRORS_LOG_ALL );
+			sqlsrv_log_set_severity( SQLSRV_LOG_SEVERITY_ALL );
+			sqlsrv_log_set_subsystems(SQLSRV_LOG_SYSTEM_ALL);
+			sqlsrv_configure('WarningsReturnAsErrors', 0);
+		} else {
+			sqlsrv_set_error_handling(0);
+			sqlsrv_log_set_severity(0);
+			sqlsrv_log_set_subsystems(SQLSRV_LOG_SYSTEM_ALL);
+			sqlsrv_configure('WarningsReturnAsErrors', 0);
+		}
+	}
+	function ServerVersion() {
+		$data = $this->ServerInfo();
+		if (preg_match('/^09/',$data['version'])){
+			/*
+			 * SQL Server 2005
+			 */
+			$this->mssql_version = 9;
+		} elseif (preg_match('/^10/',$data['version'])){
+			/*
+			 * SQL Server 2008
+			 */
+			$this->mssql_version = 10;
+		} elseif (preg_match('/^11/',$data['version'])){
+			/*
+			 * SQL Server 2012
+			 */
+			$this->mssql_version = 11;
+		} else
+			die("SQL SERVER VERSION {$data['version']} NOT SUPPORTED IN mssqlnative DRIVER");
+	}
+
+	function ServerInfo() {
+    	global $ADODB_FETCH_MODE;
+		static $arr = false;
+		if (is_array($arr))
+			return $arr;
+		if ($this->fetchMode === false) {
+			$savem = $ADODB_FETCH_MODE;
+			$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+		} elseif ($this->fetchMode >=0 && $this->fetchMode <=2) {
+			$savem = $this->fetchMode;
+		} else
+			$savem = $this->SetFetchMode(ADODB_FETCH_NUM);
+
+		$arrServerInfo = sqlsrv_server_info($this->_connectionID);
+		$ADODB_FETCH_MODE = $savem;
+		$arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];
+		$arr['version'] = $arrServerInfo['SQLServerVersion'];//ADOConnection::_findvers($arr['description']);
+		return $arr;
+	}
+
+	function IfNull( $field, $ifNull )
+	{
+		return " ISNULL($field, $ifNull) "; // if MS SQL Server
+	}
+
+	function _insertid()
+	{
+	// SCOPE_IDENTITY()
+	// Returns the last IDENTITY value inserted into an IDENTITY column in
+	// the same scope. A scope is a module -- a stored procedure, trigger,
+	// function, or batch. Thus, two statements are in the same scope if
+	// they are in the same stored procedure, function, or batch.
+		return $this->lastInsertID;
+	}
+
+	function _affectedrows()
+	{
+		if ($this->_queryID)
+		return sqlsrv_rows_affected($this->_queryID);
+	}
+
+	function GenID($seq='adodbseq',$start=1) {
+		if (!$this->mssql_version)
+			$this->ServerVersion();
+		switch($this->mssql_version){
+		case 9:
+		case 10:
+			return $this->GenID2008();
+			break;
+		case 11:
+			return $this->GenID2012();
+			break;
+		}
+	}
+
+	function CreateSequence($seq='adodbseq',$start=1)
+	{
+		if (!$this->mssql_vesion)
+			$this->ServerVersion();
+
+		switch($this->mssql_version){
+		case 9:
+		case 10:
+			return $this->CreateSequence2008();
+			break;
+		case 11:
+			return $this->CreateSequence2012();
+			break;
+		}
+
+	}
+
+	/**
+	 * For Server 2005,2008, duplicate a sequence with an identity table
+	 */
+	function CreateSequence2008($seq='adodbseq',$start=1)
+	{
+		if($this->debug) ADOConnection::outp("
CreateSequence($seq,$start)"); + sqlsrv_begin_transaction($this->_connectionID); + $start -= 1; + $this->Execute("create table $seq (id int)");//was float(53) + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + if($this->debug) ADOConnection::outp("
Error: ROLLBACK"); + sqlsrv_rollback($this->_connectionID); + return false; + } + sqlsrv_commit($this->_connectionID); + return true; + } + + /** + * Proper Sequences Only available to Server 2012 and up + */ + function CreateSequence2012($seq='adodb',$start=1){ + if (!$this->sequences){ + $sql = "SELECT name FROM sys.sequences"; + $this->sequences = $this->GetCol($sql); + } + $ok = $this->Execute("CREATE SEQUENCE $seq START WITH $start INCREMENT BY 1"); + if (!$ok) + die("CANNOT CREATE SEQUENCE" . print_r(sqlsrv_errors(),true)); + $this->sequences[] = $seq; + } + + /** + * For Server 2005,2008, duplicate a sequence with an identity table + */ + function GenID2008($seq='adodbseq',$start=1) + { + if($this->debug) ADOConnection::outp("
CreateSequence($seq,$start)"); + sqlsrv_begin_transaction($this->_connectionID); + $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1"); + if (!$ok) { + $start -= 1; + $this->Execute("create table $seq (id int)");//was float(53) + $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); + if (!$ok) { + if($this->debug) ADOConnection::outp("
Error: ROLLBACK"); + sqlsrv_rollback($this->_connectionID); + return false; + } + } + $num = $this->GetOne("select id from $seq"); + sqlsrv_commit($this->_connectionID); + return true; + } + /** + * Only available to Server 2012 and up + * Cannot do this the normal adodb way by trapping an error if the + * sequence does not exist because sql server will auto create a + * sequence with the starting number of -9223372036854775808 + */ + function GenID2012($seq='adodbseq',$start=1) + { + + /* + * First time in create an array of sequence names that we + * can use in later requests to see if the sequence exists + * the overhead is creating a list of sequences every time + * we need access to at least 1. If we really care about + * performance, we could maybe flag a 'nocheck' class variable + */ + if (!$this->sequences){ + $sql = "SELECT name FROM sys.sequences"; + $this->sequences = $this->GetCol($sql); + } + if (!is_array($this->sequences) + || is_array($this->sequences) && !in_array($seq,$this->sequences)){ + $this->CreateSequence2012($seq='adodbseq',$start=1); + + } + $num = $this->GetOne("SELECT NEXT VALUE FOR $seq"); + return $num; + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '+'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "datename(yyyy,$col)"; + break; + case 'M': + $s .= "convert(char(3),$col,0)"; + break; + case 'm': + $s .= "replace(str(month($col),2),' ','0')"; + break; + case 'Q': + case 'q': + $s .= "datename(quarter,$col)"; + break; + case 'D': + case 'd': + $s .= "replace(str(day($col),2),' ','0')"; + break; + case 'h': + $s .= "substring(convert(char(14),$col,0),13,2)"; + break; + + case 'H': + $s .= "replace(str(datepart(hh,$col),2),' ','0')"; + break; + + case 'i': + $s .= "replace(str(datepart(mi,$col),2),' ','0')"; + break; + case 's': + $s .= "replace(str(datepart(ss,$col),2),' ','0')"; + break; + case 'a': + case 'A': + $s .= "substring(convert(char(19),$col,0),18,2)"; + break; + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + break; + } + } + return $s; + } + + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + if ($this->debug) ADOConnection::outp('
begin transaction'); + sqlsrv_begin_transaction($this->_connectionID); + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if ($this->debug) ADOConnection::outp('
commit transaction'); + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + sqlsrv_commit($this->_connectionID); + return true; + } + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->debug) ADOConnection::outp('
rollback transaction'); + if ($this->transCnt) $this->transCnt -= 1; + sqlsrv_rollback($this->_connectionID); + return true; + } + + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET TRANSACTION ".$transaction_mode); + } + + /* + Usage: + + $this->BeginTrans(); + $this->RowLock('table1,table2','table1.id=33 and table2.id=table1.id'); # lock row 33 for both tables + + # some operation on both tables table1 and table2 + + $this->CommitTrans(); + + See http://www.swynk.com/friends/achigrik/SQL70Locks.asp + */ + function RowLock($tables,$where,$col='1 as adodbignore') + { + if ($col == '1 as adodbignore') $col = 'top 1 null as ignore'; + if (!$this->transCnt) $this->BeginTrans(); + return $this->GetOne("select $col from $tables with (ROWLOCK,HOLDLOCK) where $where"); + } + + function SelectDB($dbName) + { + $this->database = $dbName; + $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions + if ($this->_connectionID) { + $rs = $this->Execute('USE '.$dbName); + if($rs) { + return true; + } else return false; + } + else return false; + } + + function ErrorMsg() + { + $retErrors = sqlsrv_errors(SQLSRV_ERR_ALL); + if($retErrors != null) { + foreach($retErrors as $arrError) { + $this->_errorMsg .= "SQLState: ".$arrError[ 'SQLSTATE']."\n"; + $this->_errorMsg .= "Error Code: ".$arrError[ 'code']."\n"; + $this->_errorMsg .= "Message: ".$arrError[ 'message']."\n"; + } + } else { + $this->_errorMsg = "No errors found"; + } + return $this->_errorMsg; + } + + function ErrorNo() + { + if ($this->_logsql && $this->_errorCode !== false) return $this->_errorCode; + $err = sqlsrv_errors(SQLSRV_ERR_ALL); + if($err[0]) return $err[0]['code']; + else return -1; + } + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('sqlsrv_connect')) return null; + $connectionInfo = $this->connectionInfo; + $connectionInfo["Database"]=$argDatabasename; + $connectionInfo["UID"]=$argUsername; + $connectionInfo["PWD"]=$argPassword; + + foreach ($this->connectionParameters as $parameter=>$value) + $connectionInfo[$parameter] = $value; + + if ($this->debug) ADOConnection::outp("
connecting... hostname: $argHostname params: ".var_export($connectionInfo,true)); + //if ($this->debug) ADOConnection::outp("
_connectionID before: ".serialize($this->_connectionID)); + if(!($this->_connectionID = sqlsrv_connect($argHostname,$connectionInfo))) { + if ($this->debug) ADOConnection::outp( "
errors: ".print_r( sqlsrv_errors(), true)); + return false; + } + //if ($this->debug) ADOConnection::outp(" _connectionID after: ".serialize($this->_connectionID)); + //if ($this->debug) ADOConnection::outp("
defined functions:
".var_export(get_defined_functions(),true)."
"); + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + //return null;//not implemented. NOTE: Persistent connections have no effect if PHP is used as a CGI program. (FastCGI!) + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); + } + + function Prepare($sql) + { + return $sql; // prepare does not work properly with bind parameters as bind parameters are managed by sqlsrv_prepare! + + $stmt = sqlsrv_prepare( $this->_connectionID, $sql); + if (!$stmt) return $sql; + return array($sql,$stmt); + } + + // returns concatenated string + // MSSQL requires integers to be cast as strings + // automatically cast every datatype to VARCHAR(255) + // @author David Rogers (introspectshun) + function Concat() + { + $s = ""; + $arr = func_get_args(); + + // Split single record on commas, if possible + if (sizeof($arr) == 1) { + foreach ($arr as $arg) { + $args = explode(',', $arg); + } + $arr = $args; + } + + array_walk($arr, create_function('&$v', '$v = "CAST(" . $v . " AS VARCHAR(255))";')); + $s = implode('+',$arr); + if (sizeof($arr) > 0) return "$s"; + + return ''; + } + + /* + Unfortunately, it appears that mssql cannot handle varbinary > 255 chars + So all your blobs must be of type "image". + + Remember to set in php.ini the following... + + ; Valid range 0 - 2147483647. Default = 4096. + mssql.textlimit = 0 ; zero to pass through + + ; Valid range 0 - 2147483647. Default = 4096. + mssql.textsize = 0 ; zero to pass through + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + + if (strtoupper($blobtype) == 'CLOB') { + $sql = "UPDATE $table SET $column='" . $val . "' WHERE $where"; + return $this->Execute($sql) != false; + } + $sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where"; + return $this->Execute($sql) != false; + } + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + $this->_errorMsg = false; + + if (is_array($sql)) $sql = $sql[1]; + + $insert = false; + // handle native driver flaw for retrieving the last insert ID + if(preg_match('/^\W*insert\s(?:(?:(?:\'\')*\'[^\']+\'(?:\'\')*)|[^;\'])*;?$/i', $sql)) { + $insert = true; + $sql .= '; '.$this->identitySQL; // select scope_identity() + } + if($inputarr) { + $rez = sqlsrv_query($this->_connectionID, $sql, $inputarr); + } else { + $rez = sqlsrv_query($this->_connectionID,$sql); + } + + if ($this->debug) ADOConnection::outp("
running query: ".var_export($sql,true)."
input array: ".var_export($inputarr,true)."
result: ".var_export($rez,true)); + + if(!$rez) { + $rez = false; + } else if ($insert) { + // retrieve the last insert ID (where applicable) + while ( sqlsrv_next_result($rez) ) { + sqlsrv_fetch($rez); + $this->lastInsertID = sqlsrv_get_field($rez, 0); + } + } + return $rez; + } + + // returns true or false + function _close() + { + if ($this->transCnt) $this->RollbackTrans(); + $rez = @sqlsrv_close($this->_connectionID); + $this->_connectionID = false; + return $rez; + } + + // mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + return ADORecordSet_array_mssqlnative::UnixDate($v); + } + + static function UnixTimeStamp($v) + { + return ADORecordSet_array_mssqlnative::UnixTimeStamp($v); + } + + function MetaIndexes($table,$primary=false, $owner = false) + { + $table = $this->qstr($table); + + $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, + CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK, + CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique + FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id + INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid + INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid + WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table + ORDER BY O.name, I.Name, K.keyno"; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute($sql); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + return FALSE; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + if (!$primary && $row[5]) continue; + + $indexes[$row[0]]['unique'] = $row[6]; + $indexes[$row[0]]['columns'][] = $row[1]; + } + return $indexes; + } + + function MetaForeignKeys($table, $owner=false, $upper=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $table = $this->qstr(strtoupper($table)); + + $sql = + "select object_name(constid) as constraint_name, + col_name(fkeyid, fkey) as column_name, + object_name(rkeyid) as referenced_table_name, + col_name(rkeyid, rkey) as referenced_column_name + from sysforeignkeys + where upper(object_name(fkeyid)) = $table + order by constraint_name, referenced_table_name, keyno"; + + $constraints =& $this->GetArray($sql); + + $ADODB_FETCH_MODE = $save; + + $arr = false; + foreach($constraints as $constr) { + //print_r($constr); + $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; + } + if (!$arr) return false; + + $arr2 = false; + + foreach($arr as $k => $v) { + foreach($v as $a => $b) { + if ($upper) $a = strtoupper($a); + $arr2[$a] = $b; + } + } + return $arr2; + } + + //From: Fernando Moreira + function MetaDatabases() + { + $this->SelectDB("master"); + $rs =& $this->Execute($this->metaDatabasesSQL); + $rows = $rs->GetRows(); + $ret = array(); + for($i=0;$iSelectDB($this->database); + if($ret) + return $ret; + else + return false; + } + + // "Stein-Aksel Basma" + // tested with MSSQL 2000 + function MetaPrimaryKeys($table, $owner=false) + { + global $ADODB_FETCH_MODE; + + $schema = ''; + $this->_findschema($table,$schema); + if (!$schema) $schema = $this->database; + if ($schema) $schema = "and k.table_catalog like '$schema%'"; + + $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k, + information_schema.table_constraints tc + where tc.constraint_name = k.constraint_name and tc.constraint_type = + 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position "; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $a = $this->GetCol($sql); + $ADODB_FETCH_MODE = $savem; + + if ($a && sizeof($a)>0) return $a; + $false = false; + return $false; + } + + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(($mask)); + $this->metaTablesSQL .= " AND name like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + function MetaColumns($table, $upper=true, $schema=false){ + + # start adg + static $cached_columns = array(); + if ($this->cachedSchemaFlush) + $cached_columns = array(); + + if (array_key_exists($table,$cached_columns)){ + return $cached_columns[$table]; + } + # end adg + + if (!$this->mssql_version) + $this->ServerVersion(); + + $this->_findschema($table,$schema); + if ($schema) { + $dbName = $this->database; + $this->SelectDB($schema); + } + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + + if ($schema) { + $this->SelectDB($dbName); + } + + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if (!is_object($rs)) { + $false = false; + return $false; + } + + $retarr = array(); + while (!$rs->EOF){ + + $fld = new ADOFieldObject(); + if (array_key_exists(0,$rs->fields)) { + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + $fld->precision = $rs->fields[3]; + $fld->scale = $rs->fields[4]; + $fld->not_null =!$rs->fields[5]; + $fld->has_default = $rs->fields[6]; + $fld->xtype = $rs->fields[7]; + $fld->type_length = $rs->fields[8]; + $fld->auto_increment= $rs->fields[9]; + } else { + $fld->name = $rs->fields['name']; + $fld->type = $rs->fields['type']; + $fld->max_length = $rs->fields['length']; + $fld->precision = $rs->fields['precision']; + $fld->scale = $rs->fields['scale']; + $fld->not_null =!$rs->fields['nullable']; + $fld->has_default = $rs->fields['default_value']; + $fld->xtype = $rs->fields['xtype']; + $fld->type_length = $rs->fields['type_length']; + $fld->auto_increment= $rs->fields['is_identity']; + } + + if ($save == ADODB_FETCH_NUM) + $retarr[] = $fld; + else + $retarr[strtoupper($fld->name)] = $fld; + + $rs->MoveNext(); + + } + $rs->Close(); + # start adg + $cached_columns[$table] = $retarr; + # end adg + return $retarr; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_mssqlnative extends ADORecordSet { + + var $databaseType = "mssqlnative"; + var $canSeek = false; + var $fieldOffset = 0; + // _mths works only in non-localised system + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + + } + $this->fetchMode = $mode; + return parent::__construct($id,$mode); + } + + + function _initrs() + { + global $ADODB_COUNTRECS; + # KMN # if ($this->connection->debug) ADOConnection::outp("(before) ADODB_COUNTRECS: {$ADODB_COUNTRECS} _numOfRows: {$this->_numOfRows} _numOfFields: {$this->_numOfFields}"); + /*$retRowsAff = sqlsrv_rows_affected($this->_queryID);//"If you need to determine the number of rows a query will return before retrieving the actual results, appending a SELECT COUNT ... query would let you get that information, and then a call to next_result would move you to the "real" results." + ADOConnection::outp("rowsaff: ".serialize($retRowsAff)); + $this->_numOfRows = ($ADODB_COUNTRECS)? $retRowsAff:-1;*/ + $this->_numOfRows = -1;//not supported + $fieldmeta = sqlsrv_field_metadata($this->_queryID); + $this->_numOfFields = ($fieldmeta)? count($fieldmeta):-1; + # KMN # if ($this->connection->debug) ADOConnection::outp("(after) _numOfRows: {$this->_numOfRows} _numOfFields: {$this->_numOfFields}"); + /* + * Copy the oracle method and cache the metadata at init time + */ + if ($this->_numOfFields>0) { + $this->_fieldobjs = array(); + $max = $this->_numOfFields; + for ($i=0;$i<$max; $i++) $this->_fieldobjs[] = $this->_FetchField($i); + } + + } + + + //Contributed by "Sven Axelsson" + // get next resultset - requires PHP 4.0.5 or later + function NextRecordSet() + { + if (!sqlsrv_next_result($this->_queryID)) return false; + $this->_inited = false; + $this->bind = false; + $this->_currentRow = -1; + $this->Init(); + return true; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode != ADODB_FETCH_NUM) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. + Designed By jcortinap#jc.com.mx + */ + function _FetchField($fieldOffset = -1) + { + $_typeConversion = array( + -155 => 'datetimeoffset', + -154 => 'time', + -152 => 'xml', + -151 => 'udt', + -11 => 'uniqueidentifier', + -10 => 'ntext', + -9 => 'nvarchar', + -8 => 'nchar', + -7 => 'bit', + -6 => 'tinyint', + -5 => 'bigint', + -4 => 'image', + -3 => 'varbinary', + -2 => 'timestamp', + -1 => 'text', + 1 => 'char', + 2 => 'numeric', + 3 => 'decimal', + 4 => 'int', + 5 => 'smallint', + 6 => 'float', + 7 => 'real', + 12 => 'varchar', + 91 => 'date', + 93 => 'datetime' + ); + + $fa = @sqlsrv_field_metadata($this->_queryID); + if ($fieldOffset != -1) { + $fa = $fa[$fieldOffset]; + } + $false = false; + if (empty($fa)) { + $f = false;//PHP Notice: Only variable references should be returned by reference + } + else + { + // Convert to an object + $fa = array_change_key_case($fa, CASE_LOWER); + $fb = array(); + if ($fieldOffset != -1) + { + $fb = array( + 'name' => $fa['name'], + 'max_length' => $fa['size'], + 'column_source' => $fa['name'], + 'type' => $_typeConversion[$fa['type']] + ); + } + else + { + foreach ($fa as $key => $value) + { + $fb[] = array( + 'name' => $value['name'], + 'max_length' => $value['size'], + 'column_source' => $value['name'], + 'type' => $_typeConversion[$value['type']] + ); + } + } + $f = (object) $fb; + } + return $f; + } + + /* + * Fetchfield copies the oracle method, it loads the field information + * into the _fieldobjs array once, to save multiple calls to the + * sqlsrv_field_metadata function + * + * @author KM Newnham + * @date 02/20/2013 + */ + function FetchField($fieldOffset = -1) + { + return $this->_fieldobjs[$fieldOffset]; + } + + function _seek($row) + { + return false;//There is no support for cursors in the driver at this time. All data is returned via forward-only streams. + } + + // speedup + function MoveNext() + { + //# KMN # if ($this->connection->debug) ADOConnection::outp("movenext()"); + //# KMN # if ($this->connection->debug) ADOConnection::outp("eof (beginning): ".$this->EOF); + if ($this->EOF) return false; + + $this->_currentRow++; + // # KMN # if ($this->connection->debug) ADOConnection::outp("_currentRow: ".$this->_currentRow); + + if ($this->_fetch()) return true; + $this->EOF = true; + //# KMN # if ($this->connection->debug) ADOConnection::outp("eof (end): ".$this->EOF); + + return false; + } + + + // INSERT UPDATE DELETE returns false even if no error occurs in 4.0.4 + // also the date format has been changed from YYYY-mm-dd to dd MMM YYYY in 4.0.4. Idiot! + function _fetch($ignore_fields=false) + { + # KMN # if ($this->connection->debug) ADOConnection::outp("_fetch()"); + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + if ($this->fetchMode & ADODB_FETCH_NUM) { + //# KMN # if ($this->connection->debug) ADOConnection::outp("fetch mode: both"); + $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_BOTH); + } else { + //# KMN # if ($this->connection->debug) ADOConnection::outp("fetch mode: assoc"); + $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_ASSOC); + } + + if (is_array($this->fields)) { + if (ADODB_ASSOC_CASE == 0) { + foreach($this->fields as $k=>$v) { + $this->fields[strtolower($k)] = $v; + } + } else if (ADODB_ASSOC_CASE == 1) { + foreach($this->fields as $k=>$v) { + $this->fields[strtoupper($k)] = $v; + } + } + } + } else { + //# KMN # if ($this->connection->debug) ADOConnection::outp("fetch mode: num"); + $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_NUMERIC); + } + if(is_array($this->fields) && array_key_exists(1,$this->fields) && !array_key_exists(0,$this->fields)) {//fix fetch numeric keys since they're not 0 based + $arrFixed = array(); + foreach($this->fields as $key=>$value) { + if(is_numeric($key)) { + $arrFixed[$key-1] = $value; + } else { + $arrFixed[$key] = $value; + } + } + //if($this->connection->debug) ADOConnection::outp("
fixing non 0 based return array, old: ".print_r($this->fields,true)." new: ".print_r($arrFixed,true)); + $this->fields = $arrFixed; + } + if(is_array($this->fields)) { + foreach($this->fields as $key=>$value) { + if (is_object($value) && method_exists($value, 'format')) {//is DateTime object + $this->fields[$key] = $value->format("Y-m-d\TH:i:s\Z"); + } + } + } + if($this->fields === null) $this->fields = false; + # KMN # if ($this->connection->debug) ADOConnection::outp("
after _fetch, fields:
".print_r($this->fields,true)." backtrace: ".adodb_backtrace(false));
+		return $this->fields;
+	}
+
+	/*	close() only needs to be called if you are worried about using too much memory while your script
+		is running. All associated result memory for the specified result identifier will automatically be freed.	*/
+	function _close()
+	{
+		if($this->_queryID) {
+			$rez = sqlsrv_free_stmt($this->_queryID);
+			$this->_queryID = false;
+			return $rez;
+		}
+		return true;
+	}
+
+	// mssql uses a default date like Dec 30 2000 12:00AM
+	static function UnixDate($v)
+	{
+		return ADORecordSet_array_mssqlnative::UnixDate($v);
+	}
+
+	static function UnixTimeStamp($v)
+	{
+		return ADORecordSet_array_mssqlnative::UnixTimeStamp($v);
+	}
+}
+
+
+class ADORecordSet_array_mssqlnative extends ADORecordSet_array {
+	function __construct($id=-1,$mode=false)
+	{
+		parent::__construct($id,$mode);
+	}
+
+		// mssql uses a default date like Dec 30 2000 12:00AM
+	static function UnixDate($v)
+	{
+
+		if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixDate($v);
+
+		global $ADODB_mssql_mths,$ADODB_mssql_date_order;
+
+		//Dec 30 2000 12:00AM
+		if ($ADODB_mssql_date_order == 'dmy') {
+			if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4})|" ,$v, $rr)) {
+				return parent::UnixDate($v);
+			}
+			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
+
+			$theday = $rr[1];
+			$themth =  substr(strtoupper($rr[2]),0,3);
+		} else {
+			if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})|" ,$v, $rr)) {
+				return parent::UnixDate($v);
+			}
+			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
+
+			$theday = $rr[2];
+			$themth = substr(strtoupper($rr[1]),0,3);
+		}
+		$themth = $ADODB_mssql_mths[$themth];
+		if ($themth <= 0) return false;
+		// h-m-s-MM-DD-YY
+		return  adodb_mktime(0,0,0,$themth,$theday,$rr[3]);
+	}
+
+	static function UnixTimeStamp($v)
+	{
+
+		if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixTimeStamp($v);
+
+		global $ADODB_mssql_mths,$ADODB_mssql_date_order;
+
+		//Dec 30 2000 12:00AM
+		 if ($ADODB_mssql_date_order == 'dmy') {
+			 if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|"
+			,$v, $rr)) return parent::UnixTimeStamp($v);
+			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
+
+			$theday = $rr[1];
+			$themth =  substr(strtoupper($rr[2]),0,3);
+		} else {
+			if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|"
+			,$v, $rr)) return parent::UnixTimeStamp($v);
+			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
+
+			$theday = $rr[2];
+			$themth = substr(strtoupper($rr[1]),0,3);
+		}
+
+		$themth = $ADODB_mssql_mths[$themth];
+		if ($themth <= 0) return false;
+
+		switch (strtoupper($rr[6])) {
+		case 'P':
+			if ($rr[4]<12) $rr[4] += 12;
+			break;
+		case 'A':
+			if ($rr[4]==12) $rr[4] = 0;
+			break;
+		default:
+			break;
+		}
+		// h-m-s-MM-DD-YY
+		return  adodb_mktime($rr[4],$rr[5],0,$themth,$theday,$rr[3]);
+	}
+}
+
+/*
+Code Example 1:
+
+select	object_name(constid) as constraint_name,
+		object_name(fkeyid) as table_name,
+		col_name(fkeyid, fkey) as column_name,
+	object_name(rkeyid) as referenced_table_name,
+	col_name(rkeyid, rkey) as referenced_column_name
+from sysforeignkeys
+where object_name(fkeyid) = x
+order by constraint_name, table_name, referenced_table_name,  keyno
+
+Code Example 2:
+select	constraint_name,
+	column_name,
+	ordinal_position
+from information_schema.key_column_usage
+where constraint_catalog = db_name()
+and table_name = x
+order by constraint_name, ordinal_position
+
+http://www.databasejournal.com/scripts/article.php/1440551
+*/
diff --git a/ehcp/adodb5/drivers/adodb-mssqlpo.inc.php b/ehcp/adodb5/drivers/adodb-mssqlpo.inc.php
new file mode 100644
index 0000000..6d596fc
--- /dev/null
+++ b/ehcp/adodb5/drivers/adodb-mssqlpo.inc.php
@@ -0,0 +1,58 @@
+_has_mssql_init) {
+			ADOConnection::outp( "PrepareSP: mssql_init only available since PHP 4.1.0");
+			return $sql;
+		}
+		if (is_string($sql)) $sql = str_replace('||','+',$sql);
+		$stmt = mssql_init($sql,$this->_connectionID);
+		if (!$stmt)  return $sql;
+		return array($sql,$stmt);
+	}
+
+	function _query($sql,$inputarr=false)
+	{
+		if (is_string($sql)) $sql = str_replace('||','+',$sql);
+		return ADODB_mssql::_query($sql,$inputarr);
+	}
+}
+
+class ADORecordset_mssqlpo extends ADORecordset_mssql {
+	var $databaseType = "mssqlpo";
+	function __construct($id,$mode=false)
+	{
+		parent::__construct($id,$mode);
+	}
+}
diff --git a/ehcp/adodb5/drivers/adodb-mysql.inc.php b/ehcp/adodb5/drivers/adodb-mysql.inc.php
new file mode 100644
index 0000000..31c7818
--- /dev/null
+++ b/ehcp/adodb5/drivers/adodb-mysql.inc.php
@@ -0,0 +1,891 @@
+rsPrefix .= 'ext_';
+	}
+
+
+	// SetCharSet - switch the client encoding
+	function SetCharSet($charset_name)
+	{
+		if (!function_exists('mysql_set_charset')) {
+			return false;
+		}
+
+		if ($this->charSet !== $charset_name) {
+			$ok = @mysql_set_charset($charset_name,$this->_connectionID);
+			if ($ok) {
+				$this->charSet = $charset_name;
+				return true;
+			}
+			return false;
+		}
+		return true;
+	}
+
+	function ServerInfo()
+	{
+		$arr['description'] = ADOConnection::GetOne("select version()");
+		$arr['version'] = ADOConnection::_findvers($arr['description']);
+		return $arr;
+	}
+
+	function IfNull( $field, $ifNull )
+	{
+		return " IFNULL($field, $ifNull) "; // if MySQL
+	}
+
+	function MetaProcedures($NamePattern = false, $catalog = null, $schemaPattern = null)
+	{
+		// save old fetch mode
+		global $ADODB_FETCH_MODE;
+
+		$false = false;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+
+		if ($this->fetchMode !== FALSE) {
+			$savem = $this->SetFetchMode(FALSE);
+		}
+
+		$procedures = array ();
+
+		// get index details
+
+		$likepattern = '';
+		if ($NamePattern) {
+			$likepattern = " LIKE '".$NamePattern."'";
+		}
+		$rs = $this->Execute('SHOW PROCEDURE STATUS'.$likepattern);
+		if (is_object($rs)) {
+
+			// parse index data into array
+			while ($row = $rs->FetchRow()) {
+				$procedures[$row[1]] = array(
+					'type' => 'PROCEDURE',
+					'catalog' => '',
+					'schema' => '',
+					'remarks' => $row[7],
+				);
+			}
+		}
+
+		$rs = $this->Execute('SHOW FUNCTION STATUS'.$likepattern);
+		if (is_object($rs)) {
+			// parse index data into array
+			while ($row = $rs->FetchRow()) {
+				$procedures[$row[1]] = array(
+					'type' => 'FUNCTION',
+					'catalog' => '',
+					'schema' => '',
+					'remarks' => $row[7]
+				);
+			}
+		}
+
+		// restore fetchmode
+		if (isset($savem)) {
+			$this->SetFetchMode($savem);
+		}
+		$ADODB_FETCH_MODE = $save;
+
+		return $procedures;
+	}
+
+	/**
+	 * Retrieves a list of tables based on given criteria
+	 *
+	 * @param string $ttype Table type = 'TABLE', 'VIEW' or false=both (default)
+	 * @param string $showSchema schema name, false = current schema (default)
+	 * @param string $mask filters the table by name
+	 *
+	 * @return array list of tables
+	 */
+	function MetaTables($ttype=false,$showSchema=false,$mask=false)
+	{
+		$save = $this->metaTablesSQL;
+		if ($showSchema && is_string($showSchema)) {
+			$this->metaTablesSQL .= $this->qstr($showSchema);
+		} else {
+			$this->metaTablesSQL .= "schema()";
+		}
+
+		if ($mask) {
+			$mask = $this->qstr($mask);
+			$this->metaTablesSQL .= " AND table_name LIKE $mask";
+		}
+		$ret = ADOConnection::MetaTables($ttype,$showSchema);
+
+		$this->metaTablesSQL = $save;
+		return $ret;
+	}
+
+
+	function MetaIndexes ($table, $primary = FALSE, $owner=false)
+	{
+		// save old fetch mode
+		global $ADODB_FETCH_MODE;
+
+		$false = false;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+		if ($this->fetchMode !== FALSE) {
+			$savem = $this->SetFetchMode(FALSE);
+		}
+
+		// get index details
+		$rs = $this->Execute(sprintf('SHOW INDEX FROM %s',$table));
+
+		// restore fetchmode
+		if (isset($savem)) {
+			$this->SetFetchMode($savem);
+		}
+		$ADODB_FETCH_MODE = $save;
+
+		if (!is_object($rs)) {
+			return $false;
+		}
+
+		$indexes = array ();
+
+		// parse index data into array
+		while ($row = $rs->FetchRow()) {
+			if ($primary == FALSE AND $row[2] == 'PRIMARY') {
+				continue;
+			}
+
+			if (!isset($indexes[$row[2]])) {
+				$indexes[$row[2]] = array(
+					'unique' => ($row[1] == 0),
+					'columns' => array()
+				);
+			}
+
+			$indexes[$row[2]]['columns'][$row[3] - 1] = $row[4];
+		}
+
+		// sort columns by order in the index
+		foreach ( array_keys ($indexes) as $index )
+		{
+			ksort ($indexes[$index]['columns']);
+		}
+
+		return $indexes;
+	}
+
+
+	// if magic quotes disabled, use mysql_real_escape_string()
+	function qstr($s,$magic_quotes=false)
+	{
+		if (is_null($s)) return 'NULL';
+		if (!$magic_quotes) {
+
+			if (ADODB_PHPVER >= 0x4300) {
+				if (is_resource($this->_connectionID))
+					return "'".mysql_real_escape_string($s,$this->_connectionID)."'";
+			}
+			if ($this->replaceQuote[0] == '\\'){
+				$s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s);
+			}
+			return "'".str_replace("'",$this->replaceQuote,$s)."'";
+		}
+
+		// undo magic quotes for "
+		$s = str_replace('\\"','"',$s);
+		return "'$s'";
+	}
+
+	function _insertid()
+	{
+		return ADOConnection::GetOne('SELECT LAST_INSERT_ID()');
+		//return mysql_insert_id($this->_connectionID);
+	}
+
+	function GetOne($sql,$inputarr=false)
+	{
+	global $ADODB_GETONE_EOF;
+		if ($this->compat323 == false && strncasecmp($sql,'sele',4) == 0) {
+			$rs = $this->SelectLimit($sql,1,-1,$inputarr);
+			if ($rs) {
+				$rs->Close();
+				if ($rs->EOF) return $ADODB_GETONE_EOF;
+				return reset($rs->fields);
+			}
+		} else {
+			return ADOConnection::GetOne($sql,$inputarr);
+		}
+		return false;
+	}
+
+	function BeginTrans()
+	{
+		if ($this->debug) ADOConnection::outp("Transactions not supported in 'mysql' driver. Use 'mysqlt' or 'mysqli' driver");
+	}
+
+	function _affectedrows()
+	{
+			return mysql_affected_rows($this->_connectionID);
+	}
+
+	 // See http://www.mysql.com/doc/M/i/Miscellaneous_functions.html
+	// Reference on Last_Insert_ID on the recommended way to simulate sequences
+	var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);";
+	var $_genSeqSQL = "create table if not exists %s (id int not null)";
+	var $_genSeqCountSQL = "select count(*) from %s";
+	var $_genSeq2SQL = "insert into %s values (%s)";
+	var $_dropSeqSQL = "drop table if exists %s";
+
+	function CreateSequence($seqname='adodbseq',$startID=1)
+	{
+		if (empty($this->_genSeqSQL)) return false;
+		$u = strtoupper($seqname);
+
+		$ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
+		if (!$ok) return false;
+		return $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
+	}
+
+
+	function GenID($seqname='adodbseq',$startID=1)
+	{
+		// post-nuke sets hasGenID to false
+		if (!$this->hasGenID) return false;
+
+		$savelog = $this->_logsql;
+		$this->_logsql = false;
+		$getnext = sprintf($this->_genIDSQL,$seqname);
+		$holdtransOK = $this->_transOK; // save the current status
+		$rs = @$this->Execute($getnext);
+		if (!$rs) {
+			if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset
+			$u = strtoupper($seqname);
+			$this->Execute(sprintf($this->_genSeqSQL,$seqname));
+			$cnt = $this->GetOne(sprintf($this->_genSeqCountSQL,$seqname));
+			if (!$cnt) $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
+			$rs = $this->Execute($getnext);
+		}
+
+		if ($rs) {
+			$this->genID = mysql_insert_id($this->_connectionID);
+			$rs->Close();
+		} else
+			$this->genID = 0;
+
+		$this->_logsql = $savelog;
+		return $this->genID;
+	}
+
+	function MetaDatabases()
+	{
+		$qid = mysql_list_dbs($this->_connectionID);
+		$arr = array();
+		$i = 0;
+		$max = mysql_num_rows($qid);
+		while ($i < $max) {
+			$db = mysql_tablename($qid,$i);
+			if ($db != 'mysql') $arr[] = $db;
+			$i += 1;
+		}
+		return $arr;
+	}
+
+
+	// Format date column in sql string given an input format that understands Y M D
+	function SQLDate($fmt, $col=false)
+	{
+		if (!$col) $col = $this->sysTimeStamp;
+		$s = 'DATE_FORMAT('.$col.",'";
+		$concat = false;
+		$len = strlen($fmt);
+		for ($i=0; $i < $len; $i++) {
+			$ch = $fmt[$i];
+			switch($ch) {
+
+			default:
+				if ($ch == '\\') {
+					$i++;
+					$ch = substr($fmt,$i,1);
+				}
+				/** FALL THROUGH */
+			case '-':
+			case '/':
+				$s .= $ch;
+				break;
+
+			case 'Y':
+			case 'y':
+				$s .= '%Y';
+				break;
+			case 'M':
+				$s .= '%b';
+				break;
+
+			case 'm':
+				$s .= '%m';
+				break;
+			case 'D':
+			case 'd':
+				$s .= '%d';
+				break;
+
+			case 'Q':
+			case 'q':
+				$s .= "'),Quarter($col)";
+
+				if ($len > $i+1) $s .= ",DATE_FORMAT($col,'";
+				else $s .= ",('";
+				$concat = true;
+				break;
+
+			case 'H':
+				$s .= '%H';
+				break;
+
+			case 'h':
+				$s .= '%I';
+				break;
+
+			case 'i':
+				$s .= '%i';
+				break;
+
+			case 's':
+				$s .= '%s';
+				break;
+
+			case 'a':
+			case 'A':
+				$s .= '%p';
+				break;
+
+			case 'w':
+				$s .= '%w';
+				break;
+
+			 case 'W':
+				$s .= '%U';
+				break;
+
+			case 'l':
+				$s .= '%W';
+				break;
+			}
+		}
+		$s.="')";
+		if ($concat) $s = "CONCAT($s)";
+		return $s;
+	}
+
+
+	// returns concatenated string
+	// much easier to run "mysqld --ansi" or "mysqld --sql-mode=PIPES_AS_CONCAT" and use || operator
+	function Concat()
+	{
+		$s = "";
+		$arr = func_get_args();
+
+		// suggestion by andrew005@mnogo.ru
+		$s = implode(',',$arr);
+		if (strlen($s) > 0) return "CONCAT($s)";
+		else return '';
+	}
+
+	function OffsetDate($dayFraction,$date=false)
+	{
+		if (!$date) $date = $this->sysDate;
+
+		$fraction = $dayFraction * 24 * 3600;
+		return '('. $date . ' + INTERVAL ' .	 $fraction.' SECOND)';
+
+//		return "from_unixtime(unix_timestamp($date)+$fraction)";
+	}
+
+	// returns true or false
+	function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
+	{
+		if (!empty($this->port)) $argHostname .= ":".$this->port;
+
+		if (ADODB_PHPVER >= 0x4300)
+			$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
+												$this->forceNewConnect,$this->clientFlags);
+		else if (ADODB_PHPVER >= 0x4200)
+			$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
+												$this->forceNewConnect);
+		else
+			$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);
+
+		if ($this->_connectionID === false) return false;
+		if ($argDatabasename) return $this->SelectDB($argDatabasename);
+		return true;
+	}
+
+	// returns true or false
+	function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
+	{
+		if (!empty($this->port)) $argHostname .= ":".$this->port;
+
+		if (ADODB_PHPVER >= 0x4300)
+			$this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword,$this->clientFlags);
+		else
+			$this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword);
+		if ($this->_connectionID === false) return false;
+		if ($this->autoRollback) $this->RollbackTrans();
+		if ($argDatabasename) return $this->SelectDB($argDatabasename);
+		return true;
+	}
+
+	function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
+	{
+		$this->forceNewConnect = true;
+		return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
+	}
+
+	function MetaColumns($table, $normalize=true)
+	{
+		$this->_findschema($table,$schema);
+		if ($schema) {
+			$dbName = $this->database;
+			$this->SelectDB($schema);
+		}
+		global $ADODB_FETCH_MODE;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+
+		if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
+		$rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
+
+		if ($schema) {
+			$this->SelectDB($dbName);
+		}
+
+		if (isset($savem)) $this->SetFetchMode($savem);
+		$ADODB_FETCH_MODE = $save;
+		if (!is_object($rs)) {
+			$false = false;
+			return $false;
+		}
+
+		$retarr = array();
+		while (!$rs->EOF){
+			$fld = new ADOFieldObject();
+			$fld->name = $rs->fields[0];
+			$type = $rs->fields[1];
+
+			// split type into type(length):
+			$fld->scale = null;
+			if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
+				$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
+			} elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
+			} elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$arr = explode(",",$query_array[2]);
+				$fld->enums = $arr;
+				$zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6
+				$fld->max_length = ($zlen > 0) ? $zlen : 1;
+			} else {
+				$fld->type = $type;
+				$fld->max_length = -1;
+			}
+			$fld->not_null = ($rs->fields[2] != 'YES');
+			$fld->primary_key = ($rs->fields[3] == 'PRI');
+			$fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
+			$fld->binary = (strpos($type,'blob') !== false || strpos($type,'binary') !== false);
+			$fld->unsigned = (strpos($type,'unsigned') !== false);
+			$fld->zerofill = (strpos($type,'zerofill') !== false);
+
+			if (!$fld->binary) {
+				$d = $rs->fields[4];
+				if ($d != '' && $d != 'NULL') {
+					$fld->has_default = true;
+					$fld->default_value = $d;
+				} else {
+					$fld->has_default = false;
+				}
+			}
+
+			if ($save == ADODB_FETCH_NUM) {
+				$retarr[] = $fld;
+			} else {
+				$retarr[strtoupper($fld->name)] = $fld;
+			}
+				$rs->MoveNext();
+			}
+
+			$rs->Close();
+			return $retarr;
+	}
+
+	// returns true or false
+	function SelectDB($dbName)
+	{
+		$this->database = $dbName;
+		$this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
+		if ($this->_connectionID) {
+			return @mysql_select_db($dbName,$this->_connectionID);
+		}
+		else return false;
+	}
+
+	// parameters use PostgreSQL convention, not MySQL
+	function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0)
+	{
+		$offsetStr =($offset>=0) ? ((integer)$offset)."," : '';
+		// jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220
+		if ($nrows < 0) $nrows = '18446744073709551615';
+
+		if ($secs)
+			$rs = $this->CacheExecute($secs,$sql." LIMIT $offsetStr".((integer)$nrows),$inputarr);
+		else
+			$rs = $this->Execute($sql." LIMIT $offsetStr".((integer)$nrows),$inputarr);
+		return $rs;
+	}
+
+	// returns queryID or false
+	function _query($sql,$inputarr=false)
+	{
+
+	return mysql_query($sql,$this->_connectionID);
+	/*
+	global $ADODB_COUNTRECS;
+		if($ADODB_COUNTRECS)
+			return mysql_query($sql,$this->_connectionID);
+		else
+			return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
+	*/
+	}
+
+	/*	Returns: the last error message from previous database operation	*/
+	function ErrorMsg()
+	{
+
+		if ($this->_logsql) return $this->_errorMsg;
+		if (empty($this->_connectionID)) $this->_errorMsg = @mysql_error();
+		else $this->_errorMsg = @mysql_error($this->_connectionID);
+		return $this->_errorMsg;
+	}
+
+	/*	Returns: the last error number from previous database operation	*/
+	function ErrorNo()
+	{
+		if ($this->_logsql) return $this->_errorCode;
+		if (empty($this->_connectionID)) return @mysql_errno();
+		else return @mysql_errno($this->_connectionID);
+	}
+
+	// returns true or false
+	function _close()
+	{
+		@mysql_close($this->_connectionID);
+
+		$this->charSet = '';
+		$this->_connectionID = false;
+	}
+
+
+	/*
+	* Maximum size of C field
+	*/
+	function CharMax()
+	{
+		return 255;
+	}
+
+	/*
+	* Maximum size of X field
+	*/
+	function TextMax()
+	{
+		return 4294967295;
+	}
+
+	// "Innox - Juan Carlos Gonzalez" 
+	function MetaForeignKeys( $table, $owner = FALSE, $upper = FALSE, $associative = FALSE )
+	{
+	 global $ADODB_FETCH_MODE;
+		if ($ADODB_FETCH_MODE == ADODB_FETCH_ASSOC || $this->fetchMode == ADODB_FETCH_ASSOC) $associative = true;
+
+		if ( !empty($owner) ) {
+			$table = "$owner.$table";
+		}
+		$a_create_table = $this->getRow(sprintf('SHOW CREATE TABLE %s', $table));
+		if ($associative) {
+			$create_sql = isset($a_create_table["Create Table"]) ? $a_create_table["Create Table"] : $a_create_table["Create View"];
+		} else {
+			$create_sql = $a_create_table[1];
+		}
+
+		$matches = array();
+
+		if (!preg_match_all("/FOREIGN KEY \(`(.*?)`\) REFERENCES `(.*?)` \(`(.*?)`\)/", $create_sql, $matches)) return false;
+		$foreign_keys = array();
+		$num_keys = count($matches[0]);
+		for ( $i = 0; $i < $num_keys; $i ++ ) {
+			$my_field  = explode('`, `', $matches[1][$i]);
+			$ref_table = $matches[2][$i];
+			$ref_field = explode('`, `', $matches[3][$i]);
+
+			if ( $upper ) {
+				$ref_table = strtoupper($ref_table);
+			}
+
+			// see https://sourceforge.net/tracker/index.php?func=detail&aid=2287278&group_id=42718&atid=433976
+			if (!isset($foreign_keys[$ref_table])) {
+				$foreign_keys[$ref_table] = array();
+			}
+			$num_fields = count($my_field);
+			for ( $j = 0; $j < $num_fields; $j ++ ) {
+				if ( $associative ) {
+					$foreign_keys[$ref_table][$ref_field[$j]] = $my_field[$j];
+				} else {
+					$foreign_keys[$ref_table][] = "{$my_field[$j]}={$ref_field[$j]}";
+				}
+			}
+		}
+
+		return $foreign_keys;
+	}
+
+
+}
+
+/*--------------------------------------------------------------------------------------
+	 Class Name: Recordset
+--------------------------------------------------------------------------------------*/
+
+
+class ADORecordSet_mysql extends ADORecordSet{
+
+	var $databaseType = "mysql";
+	var $canSeek = true;
+
+	function __construct($queryID,$mode=false)
+	{
+		if ($mode === false) {
+			global $ADODB_FETCH_MODE;
+			$mode = $ADODB_FETCH_MODE;
+		}
+		switch ($mode)
+		{
+		case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
+		case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
+		case ADODB_FETCH_DEFAULT:
+		case ADODB_FETCH_BOTH:
+		default:
+			$this->fetchMode = MYSQL_BOTH; break;
+		}
+		$this->adodbFetchMode = $mode;
+		parent::__construct($queryID);
+	}
+
+	function _initrs()
+	{
+	//GLOBAL $ADODB_COUNTRECS;
+	//	$this->_numOfRows = ($ADODB_COUNTRECS) ? @mysql_num_rows($this->_queryID):-1;
+		$this->_numOfRows = @mysql_num_rows($this->_queryID);
+		$this->_numOfFields = @mysql_num_fields($this->_queryID);
+	}
+
+	function FetchField($fieldOffset = -1)
+	{
+		if ($fieldOffset != -1) {
+			$o = @mysql_fetch_field($this->_queryID, $fieldOffset);
+			$f = @mysql_field_flags($this->_queryID,$fieldOffset);
+			if ($o) $o->max_length = @mysql_field_len($this->_queryID,$fieldOffset); // suggested by: Jim Nicholson (jnich#att.com)
+			//$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable
+			if ($o) $o->binary = (strpos($f,'binary')!== false);
+		}
+		else {	/*	The $fieldOffset argument is not provided thus its -1 	*/
+			$o = @mysql_fetch_field($this->_queryID);
+			//if ($o) $o->max_length = @mysql_field_len($this->_queryID); // suggested by: Jim Nicholson (jnich#att.com)
+			$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable
+		}
+
+		return $o;
+	}
+
+	function GetRowAssoc($upper = ADODB_ASSOC_CASE)
+	{
+		if ($this->fetchMode == MYSQL_ASSOC && $upper == ADODB_ASSOC_CASE_LOWER) {
+			$row = $this->fields;
+		}
+		else {
+			$row = ADORecordSet::GetRowAssoc($upper);
+		}
+		return $row;
+	}
+
+	/* Use associative array to get fields array */
+	function Fields($colname)
+	{
+		// added @ by "Michael William Miller" 
+		if ($this->fetchMode != MYSQL_NUM) return @$this->fields[$colname];
+
+		if (!$this->bind) {
+			$this->bind = array();
+			for ($i=0; $i < $this->_numOfFields; $i++) {
+				$o = $this->FetchField($i);
+				$this->bind[strtoupper($o->name)] = $i;
+			}
+		}
+		 return $this->fields[$this->bind[strtoupper($colname)]];
+	}
+
+	function _seek($row)
+	{
+		if ($this->_numOfRows == 0) return false;
+		return @mysql_data_seek($this->_queryID,$row);
+	}
+
+	function MoveNext()
+	{
+		//return adodb_movenext($this);
+		//if (defined('ADODB_EXTENSION')) return adodb_movenext($this);
+		if (@$this->fields = mysql_fetch_array($this->_queryID,$this->fetchMode)) {
+			$this->_updatefields();
+			$this->_currentRow += 1;
+			return true;
+		}
+		if (!$this->EOF) {
+			$this->_currentRow += 1;
+			$this->EOF = true;
+		}
+		return false;
+	}
+
+	function _fetch()
+	{
+		$this->fields = @mysql_fetch_array($this->_queryID,$this->fetchMode);
+		$this->_updatefields();
+		return is_array($this->fields);
+	}
+
+	function _close() {
+		@mysql_free_result($this->_queryID);
+		$this->_queryID = false;
+	}
+
+	function MetaType($t,$len=-1,$fieldobj=false)
+	{
+		if (is_object($t)) {
+			$fieldobj = $t;
+			$t = $fieldobj->type;
+			$len = $fieldobj->max_length;
+		}
+
+		$len = -1; // mysql max_length is not accurate
+		switch (strtoupper($t)) {
+		case 'STRING':
+		case 'CHAR':
+		case 'VARCHAR':
+		case 'TINYBLOB':
+		case 'TINYTEXT':
+		case 'ENUM':
+		case 'SET':
+			if ($len <= $this->blobSize) return 'C';
+
+		case 'TEXT':
+		case 'LONGTEXT':
+		case 'MEDIUMTEXT':
+			return 'X';
+
+		// php_mysql extension always returns 'blob' even if 'text'
+		// so we have to check whether binary...
+		case 'IMAGE':
+		case 'LONGBLOB':
+		case 'BLOB':
+		case 'MEDIUMBLOB':
+		case 'BINARY':
+			return !empty($fieldobj->binary) ? 'B' : 'X';
+
+		case 'YEAR':
+		case 'DATE': return 'D';
+
+		case 'TIME':
+		case 'DATETIME':
+		case 'TIMESTAMP': return 'T';
+
+		case 'INT':
+		case 'INTEGER':
+		case 'BIGINT':
+		case 'TINYINT':
+		case 'MEDIUMINT':
+		case 'SMALLINT':
+
+			if (!empty($fieldobj->primary_key)) return 'R';
+			else return 'I';
+
+		default: return 'N';
+		}
+	}
+
+}
+
+class ADORecordSet_ext_mysql extends ADORecordSet_mysql {
+	function __construct($queryID,$mode=false)
+	{
+		parent::__construct($queryID,$mode);
+	}
+
+	function MoveNext()
+	{
+		return @adodb_movenext($this);
+	}
+}
+
+}
diff --git a/ehcp/adodb5/drivers/adodb-mysqli.inc.php b/ehcp/adodb5/drivers/adodb-mysqli.inc.php
new file mode 100644
index 0000000..82899ec
--- /dev/null
+++ b/ehcp/adodb5/drivers/adodb-mysqli.inc.php
@@ -0,0 +1,1293 @@
+_transmode = $transaction_mode;
+		if (empty($transaction_mode)) {
+			$this->Execute('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
+			return;
+		}
+		if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
+		$this->Execute("SET SESSION TRANSACTION ".$transaction_mode);
+	}
+
+	// returns true or false
+	// To add: parameter int $port,
+	//         parameter string $socket
+	function _connect($argHostname = NULL,
+				$argUsername = NULL,
+				$argPassword = NULL,
+				$argDatabasename = NULL, $persist=false)
+	{
+		if(!extension_loaded("mysqli")) {
+			return null;
+		}
+		$this->_connectionID = @mysqli_init();
+
+		if (is_null($this->_connectionID)) {
+			// mysqli_init only fails if insufficient memory
+			if ($this->debug) {
+				ADOConnection::outp("mysqli_init() failed : "  . $this->ErrorMsg());
+			}
+			return false;
+		}
+		/*
+		I suggest a simple fix which would enable adodb and mysqli driver to
+		read connection options from the standard mysql configuration file
+		/etc/my.cnf - "Bastien Duclaux" 
+		*/
+		foreach($this->optionFlags as $arr) {
+			mysqli_options($this->_connectionID,$arr[0],$arr[1]);
+		}
+
+		//http ://php.net/manual/en/mysqli.persistconns.php
+		if ($persist && PHP_VERSION > 5.2 && strncmp($argHostname,'p:',2) != 0) $argHostname = 'p:'.$argHostname;
+
+		#if (!empty($this->port)) $argHostname .= ":".$this->port;
+		$ok = mysqli_real_connect($this->_connectionID,
+					$argHostname,
+					$argUsername,
+					$argPassword,
+					$argDatabasename,
+					# PHP7 compat: port must be int. Use default port if cast yields zero
+					(int)$this->port != 0 ? (int)$this->port : 3306,
+					$this->socket,
+					$this->clientFlags);
+
+		if ($ok) {
+			if ($argDatabasename)  return $this->SelectDB($argDatabasename);
+			return true;
+		} else {
+			if ($this->debug) {
+				ADOConnection::outp("Could't connect : "  . $this->ErrorMsg());
+			}
+			$this->_connectionID = null;
+			return false;
+		}
+	}
+
+	// returns true or false
+	// How to force a persistent connection
+	function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
+	{
+		return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, true);
+	}
+
+	// When is this used? Close old connection first?
+	// In _connect(), check $this->forceNewConnect?
+	function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
+	{
+		$this->forceNewConnect = true;
+		return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
+	}
+
+	function IfNull( $field, $ifNull )
+	{
+		return " IFNULL($field, $ifNull) "; // if MySQL
+	}
+
+	// do not use $ADODB_COUNTRECS
+	function GetOne($sql,$inputarr=false)
+	{
+		global $ADODB_GETONE_EOF;
+
+		$ret = false;
+		$rs = $this->Execute($sql,$inputarr);
+		if ($rs) {
+			if ($rs->EOF) $ret = $ADODB_GETONE_EOF;
+			else $ret = reset($rs->fields);
+			$rs->Close();
+		}
+		return $ret;
+	}
+
+	function ServerInfo()
+	{
+		$arr['description'] = $this->GetOne("select version()");
+		$arr['version'] = ADOConnection::_findvers($arr['description']);
+		return $arr;
+	}
+
+
+	function BeginTrans()
+	{
+		if ($this->transOff) return true;
+		$this->transCnt += 1;
+
+		//$this->Execute('SET AUTOCOMMIT=0');
+		mysqli_autocommit($this->_connectionID, false);
+		$this->Execute('BEGIN');
+		return true;
+	}
+
+	function CommitTrans($ok=true)
+	{
+		if ($this->transOff) return true;
+		if (!$ok) return $this->RollbackTrans();
+
+		if ($this->transCnt) $this->transCnt -= 1;
+		$this->Execute('COMMIT');
+
+		//$this->Execute('SET AUTOCOMMIT=1');
+		mysqli_autocommit($this->_connectionID, true);
+		return true;
+	}
+
+	function RollbackTrans()
+	{
+		if ($this->transOff) return true;
+		if ($this->transCnt) $this->transCnt -= 1;
+		$this->Execute('ROLLBACK');
+		//$this->Execute('SET AUTOCOMMIT=1');
+		mysqli_autocommit($this->_connectionID, true);
+		return true;
+	}
+
+	function RowLock($tables,$where='',$col='1 as adodbignore')
+	{
+		if ($this->transCnt==0) $this->BeginTrans();
+		if ($where) $where = ' where '.$where;
+		$rs = $this->Execute("select $col from $tables $where for update");
+		return !empty($rs);
+	}
+
+	/**
+	 * Quotes a string to be sent to the database
+	 * When there is no active connection,
+	 * @param string $s The string to quote
+	 * @param boolean $magic_quotes If false, use mysqli_real_escape_string()
+	 *     if you are quoting a string extracted from a POST/GET variable,
+	 *     then pass get_magic_quotes_gpc() as the second parameter. This will
+	 *     ensure that the variable is not quoted twice, once by qstr() and
+	 *     once by the magic_quotes_gpc.
+	 *     Eg. $s = $db->qstr(_GET['name'],get_magic_quotes_gpc());
+	 * @return string Quoted string
+	 */
+	function qstr($s, $magic_quotes = false)
+	{
+		if (is_null($s)) return 'NULL';
+		if (!$magic_quotes) {
+			// mysqli_real_escape_string() throws a warning when the given
+			// connection is invalid
+			if (PHP_VERSION >= 5 && $this->_connectionID) {
+				return "'" . mysqli_real_escape_string($this->_connectionID, $s) . "'";
+			}
+
+			if ($this->replaceQuote[0] == '\\') {
+				$s = adodb_str_replace(array('\\',"\0"), array('\\\\',"\\\0") ,$s);
+			}
+			return "'" . str_replace("'", $this->replaceQuote, $s) . "'";
+		}
+		// undo magic quotes for "
+		$s = str_replace('\\"','"',$s);
+		return "'$s'";
+	}
+
+	function _insertid()
+	{
+		$result = @mysqli_insert_id($this->_connectionID);
+		if ($result == -1) {
+			if ($this->debug) ADOConnection::outp("mysqli_insert_id() failed : "  . $this->ErrorMsg());
+		}
+		return $result;
+	}
+
+	// Only works for INSERT, UPDATE and DELETE query's
+	function _affectedrows()
+	{
+		$result =  @mysqli_affected_rows($this->_connectionID);
+		if ($result == -1) {
+			if ($this->debug) ADOConnection::outp("mysqli_affected_rows() failed : "  . $this->ErrorMsg());
+		}
+		return $result;
+	}
+
+	// See http://www.mysql.com/doc/M/i/Miscellaneous_functions.html
+	// Reference on Last_Insert_ID on the recommended way to simulate sequences
+	var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);";
+	var $_genSeqSQL = "create table if not exists %s (id int not null)";
+	var $_genSeqCountSQL = "select count(*) from %s";
+	var $_genSeq2SQL = "insert into %s values (%s)";
+	var $_dropSeqSQL = "drop table if exists %s";
+
+	function CreateSequence($seqname='adodbseq',$startID=1)
+	{
+		if (empty($this->_genSeqSQL)) return false;
+		$u = strtoupper($seqname);
+
+		$ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
+		if (!$ok) return false;
+		return $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
+	}
+
+	function GenID($seqname='adodbseq',$startID=1)
+	{
+		// post-nuke sets hasGenID to false
+		if (!$this->hasGenID) return false;
+
+		$getnext = sprintf($this->_genIDSQL,$seqname);
+		$holdtransOK = $this->_transOK; // save the current status
+		$rs = @$this->Execute($getnext);
+		if (!$rs) {
+			if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset
+			$u = strtoupper($seqname);
+			$this->Execute(sprintf($this->_genSeqSQL,$seqname));
+			$cnt = $this->GetOne(sprintf($this->_genSeqCountSQL,$seqname));
+			if (!$cnt) $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
+			$rs = $this->Execute($getnext);
+		}
+
+		if ($rs) {
+			$this->genID = mysqli_insert_id($this->_connectionID);
+			$rs->Close();
+		} else
+			$this->genID = 0;
+
+		return $this->genID;
+	}
+
+	function MetaDatabases()
+	{
+		$query = "SHOW DATABASES";
+		$ret = $this->Execute($query);
+		if ($ret && is_object($ret)){
+			$arr = array();
+			while (!$ret->EOF){
+				$db = $ret->Fields('Database');
+				if ($db != 'mysql') $arr[] = $db;
+				$ret->MoveNext();
+			}
+			return $arr;
+		}
+		return $ret;
+	}
+
+
+	function MetaIndexes ($table, $primary = FALSE, $owner = false)
+	{
+		// save old fetch mode
+		global $ADODB_FETCH_MODE;
+
+		$false = false;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+		if ($this->fetchMode !== FALSE) {
+			$savem = $this->SetFetchMode(FALSE);
+		}
+
+		// get index details
+		$rs = $this->Execute(sprintf('SHOW INDEXES FROM %s',$table));
+
+		// restore fetchmode
+		if (isset($savem)) {
+			$this->SetFetchMode($savem);
+		}
+		$ADODB_FETCH_MODE = $save;
+
+		if (!is_object($rs)) {
+			return $false;
+		}
+
+		$indexes = array ();
+
+		// parse index data into array
+		while ($row = $rs->FetchRow()) {
+			if ($primary == FALSE AND $row[2] == 'PRIMARY') {
+				continue;
+			}
+
+			if (!isset($indexes[$row[2]])) {
+				$indexes[$row[2]] = array(
+					'unique' => ($row[1] == 0),
+					'columns' => array()
+				);
+			}
+
+			$indexes[$row[2]]['columns'][$row[3] - 1] = $row[4];
+		}
+
+		// sort columns by order in the index
+		foreach ( array_keys ($indexes) as $index )
+		{
+			ksort ($indexes[$index]['columns']);
+		}
+
+		return $indexes;
+	}
+
+
+	// Format date column in sql string given an input format that understands Y M D
+	function SQLDate($fmt, $col=false)
+	{
+		if (!$col) $col = $this->sysTimeStamp;
+		$s = 'DATE_FORMAT('.$col.",'";
+		$concat = false;
+		$len = strlen($fmt);
+		for ($i=0; $i < $len; $i++) {
+			$ch = $fmt[$i];
+			switch($ch) {
+			case 'Y':
+			case 'y':
+				$s .= '%Y';
+				break;
+			case 'Q':
+			case 'q':
+				$s .= "'),Quarter($col)";
+
+				if ($len > $i+1) $s .= ",DATE_FORMAT($col,'";
+				else $s .= ",('";
+				$concat = true;
+				break;
+			case 'M':
+				$s .= '%b';
+				break;
+
+			case 'm':
+				$s .= '%m';
+				break;
+			case 'D':
+			case 'd':
+				$s .= '%d';
+				break;
+
+			case 'H':
+				$s .= '%H';
+				break;
+
+			case 'h':
+				$s .= '%I';
+				break;
+
+			case 'i':
+				$s .= '%i';
+				break;
+
+			case 's':
+				$s .= '%s';
+				break;
+
+			case 'a':
+			case 'A':
+				$s .= '%p';
+				break;
+
+			case 'w':
+				$s .= '%w';
+				break;
+
+			case 'l':
+				$s .= '%W';
+				break;
+
+			default:
+
+				if ($ch == '\\') {
+					$i++;
+					$ch = substr($fmt,$i,1);
+				}
+				$s .= $ch;
+				break;
+			}
+		}
+		$s.="')";
+		if ($concat) $s = "CONCAT($s)";
+		return $s;
+	}
+
+	// returns concatenated string
+	// much easier to run "mysqld --ansi" or "mysqld --sql-mode=PIPES_AS_CONCAT" and use || operator
+	function Concat()
+	{
+		$s = "";
+		$arr = func_get_args();
+
+		// suggestion by andrew005@mnogo.ru
+		$s = implode(',',$arr);
+		if (strlen($s) > 0) return "CONCAT($s)";
+		else return '';
+	}
+
+	// dayFraction is a day in floating point
+	function OffsetDate($dayFraction,$date=false)
+	{
+		if (!$date) $date = $this->sysDate;
+
+		$fraction = $dayFraction * 24 * 3600;
+		return $date . ' + INTERVAL ' .	 $fraction.' SECOND';
+
+//		return "from_unixtime(unix_timestamp($date)+$fraction)";
+	}
+
+	function MetaProcedures($NamePattern = false, $catalog  = null, $schemaPattern  = null)
+	{
+		// save old fetch mode
+		global $ADODB_FETCH_MODE;
+
+		$false = false;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+
+		if ($this->fetchMode !== FALSE) {
+			$savem = $this->SetFetchMode(FALSE);
+		}
+
+		$procedures = array ();
+
+		// get index details
+
+		$likepattern = '';
+		if ($NamePattern) {
+			$likepattern = " LIKE '".$NamePattern."'";
+		}
+		$rs = $this->Execute('SHOW PROCEDURE STATUS'.$likepattern);
+		if (is_object($rs)) {
+
+			// parse index data into array
+			while ($row = $rs->FetchRow()) {
+				$procedures[$row[1]] = array(
+					'type' => 'PROCEDURE',
+					'catalog' => '',
+					'schema' => '',
+					'remarks' => $row[7],
+				);
+			}
+		}
+
+		$rs = $this->Execute('SHOW FUNCTION STATUS'.$likepattern);
+		if (is_object($rs)) {
+			// parse index data into array
+			while ($row = $rs->FetchRow()) {
+				$procedures[$row[1]] = array(
+					'type' => 'FUNCTION',
+					'catalog' => '',
+					'schema' => '',
+					'remarks' => $row[7]
+				);
+			}
+		}
+
+		// restore fetchmode
+		if (isset($savem)) {
+				$this->SetFetchMode($savem);
+		}
+		$ADODB_FETCH_MODE = $save;
+
+		return $procedures;
+	}
+
+	/**
+	 * Retrieves a list of tables based on given criteria
+	 *
+	 * @param string $ttype Table type = 'TABLE', 'VIEW' or false=both (default)
+	 * @param string $showSchema schema name, false = current schema (default)
+	 * @param string $mask filters the table by name
+	 *
+	 * @return array list of tables
+	 */
+	function MetaTables($ttype=false,$showSchema=false,$mask=false)
+	{
+		$save = $this->metaTablesSQL;
+		if ($showSchema && is_string($showSchema)) {
+			$this->metaTablesSQL .= $this->qstr($showSchema);
+		} else {
+			$this->metaTablesSQL .= "schema()";
+		}
+
+		if ($mask) {
+			$mask = $this->qstr($mask);
+			$this->metaTablesSQL .= " AND table_name LIKE $mask";
+		}
+		$ret = ADOConnection::MetaTables($ttype,$showSchema);
+
+		$this->metaTablesSQL = $save;
+		return $ret;
+	}
+
+	// "Innox - Juan Carlos Gonzalez" 
+	function MetaForeignKeys( $table, $owner = FALSE, $upper = FALSE, $associative = FALSE )
+	{
+	 global $ADODB_FETCH_MODE;
+
+		if ($ADODB_FETCH_MODE == ADODB_FETCH_ASSOC || $this->fetchMode == ADODB_FETCH_ASSOC) $associative = true;
+
+		if ( !empty($owner) ) {
+			$table = "$owner.$table";
+		}
+		$a_create_table = $this->getRow(sprintf('SHOW CREATE TABLE %s', $table));
+		if ($associative) {
+			$create_sql = isset($a_create_table["Create Table"]) ? $a_create_table["Create Table"] : $a_create_table["Create View"];
+		} else $create_sql = $a_create_table[1];
+
+		$matches = array();
+
+		if (!preg_match_all("/FOREIGN KEY \(`(.*?)`\) REFERENCES `(.*?)` \(`(.*?)`\)/", $create_sql, $matches)) return false;
+		$foreign_keys = array();
+		$num_keys = count($matches[0]);
+		for ( $i = 0; $i < $num_keys; $i ++ ) {
+			$my_field  = explode('`, `', $matches[1][$i]);
+			$ref_table = $matches[2][$i];
+			$ref_field = explode('`, `', $matches[3][$i]);
+
+			if ( $upper ) {
+				$ref_table = strtoupper($ref_table);
+			}
+
+			// see https://sourceforge.net/tracker/index.php?func=detail&aid=2287278&group_id=42718&atid=433976
+			if (!isset($foreign_keys[$ref_table])) {
+				$foreign_keys[$ref_table] = array();
+			}
+			$num_fields = count($my_field);
+			for ( $j = 0; $j < $num_fields; $j ++ ) {
+				if ( $associative ) {
+					$foreign_keys[$ref_table][$ref_field[$j]] = $my_field[$j];
+				} else {
+					$foreign_keys[$ref_table][] = "{$my_field[$j]}={$ref_field[$j]}";
+				}
+			}
+		}
+
+		return $foreign_keys;
+	}
+
+	function MetaColumns($table, $normalize=true)
+	{
+		$false = false;
+		if (!$this->metaColumnsSQL)
+			return $false;
+
+		global $ADODB_FETCH_MODE;
+		$save = $ADODB_FETCH_MODE;
+		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+		if ($this->fetchMode !== false)
+			$savem = $this->SetFetchMode(false);
+		$rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
+		if (isset($savem)) $this->SetFetchMode($savem);
+		$ADODB_FETCH_MODE = $save;
+		if (!is_object($rs))
+			return $false;
+
+		$retarr = array();
+		while (!$rs->EOF) {
+			$fld = new ADOFieldObject();
+			$fld->name = $rs->fields[0];
+			$type = $rs->fields[1];
+
+			// split type into type(length):
+			$fld->scale = null;
+			if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
+				$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
+			} elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
+			} elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) {
+				$fld->type = $query_array[1];
+				$arr = explode(",",$query_array[2]);
+				$fld->enums = $arr;
+				$zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6
+				$fld->max_length = ($zlen > 0) ? $zlen : 1;
+			} else {
+				$fld->type = $type;
+				$fld->max_length = -1;
+			}
+			$fld->not_null = ($rs->fields[2] != 'YES');
+			$fld->primary_key = ($rs->fields[3] == 'PRI');
+			$fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
+			$fld->binary = (strpos($type,'blob') !== false);
+			$fld->unsigned = (strpos($type,'unsigned') !== false);
+			$fld->zerofill = (strpos($type,'zerofill') !== false);
+
+			if (!$fld->binary) {
+				$d = $rs->fields[4];
+				if ($d != '' && $d != 'NULL') {
+					$fld->has_default = true;
+					$fld->default_value = $d;
+				} else {
+					$fld->has_default = false;
+				}
+			}
+
+			if ($save == ADODB_FETCH_NUM) {
+				$retarr[] = $fld;
+			} else {
+				$retarr[strtoupper($fld->name)] = $fld;
+			}
+			$rs->MoveNext();
+		}
+
+		$rs->Close();
+		return $retarr;
+	}
+
+	// returns true or false
+	function SelectDB($dbName)
+	{
+//		$this->_connectionID = $this->mysqli_resolve_link($this->_connectionID);
+		$this->database = $dbName;
+		$this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
+
+		if ($this->_connectionID) {
+			$result = @mysqli_select_db($this->_connectionID, $dbName);
+			if (!$result) {
+				ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg());
+			}
+			return $result;
+		}
+		return false;
+	}
+
+	// parameters use PostgreSQL convention, not MySQL
+	function SelectLimit($sql,
+				$nrows = -1,
+				$offset = -1,
+				$inputarr = false,
+				$secs = 0)
+	{
+		$offsetStr = ($offset >= 0) ? "$offset," : '';
+		if ($nrows < 0) $nrows = '18446744073709551615';
+
+		if ($secs)
+			$rs = $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows" , $inputarr );
+		else
+			$rs = $this->Execute($sql . " LIMIT $offsetStr$nrows" , $inputarr );
+
+		return $rs;
+	}
+
+
+	function Prepare($sql)
+	{
+		return $sql;
+		$stmt = $this->_connectionID->prepare($sql);
+		if (!$stmt) {
+			echo $this->ErrorMsg();
+			return $sql;
+		}
+		return array($sql,$stmt);
+	}
+
+
+	// returns queryID or false
+	function _query($sql, $inputarr)
+	{
+	global $ADODB_COUNTRECS;
+		// Move to the next recordset, or return false if there is none. In a stored proc
+		// call, mysqli_next_result returns true for the last "recordset", but mysqli_store_result
+		// returns false. I think this is because the last "recordset" is actually just the
+		// return value of the stored proc (ie the number of rows affected).
+		// Commented out for reasons of performance. You should retrieve every recordset yourself.
+		//	if (!mysqli_next_result($this->connection->_connectionID))	return false;
+
+		if (is_array($sql)) {
+
+			// Prepare() not supported because mysqli_stmt_execute does not return a recordset, but
+			// returns as bound variables.
+
+			$stmt = $sql[1];
+			$a = '';
+			foreach($inputarr as $k => $v) {
+				if (is_string($v)) $a .= 's';
+				else if (is_integer($v)) $a .= 'i';
+				else $a .= 'd';
+			}
+
+			$fnarr = array_merge( array($stmt,$a) , $inputarr);
+			$ret = call_user_func_array('mysqli_stmt_bind_param',$fnarr);
+			$ret = mysqli_stmt_execute($stmt);
+			return $ret;
+		}
+
+		/*
+		if (!$mysql_res =  mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) {
+			if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg());
+			return false;
+		}
+
+		return $mysql_res;
+		*/
+
+		if ($this->multiQuery) {
+			$rs = mysqli_multi_query($this->_connectionID, $sql.';');
+			if ($rs) {
+				$rs = ($ADODB_COUNTRECS) ? @mysqli_store_result( $this->_connectionID ) : @mysqli_use_result( $this->_connectionID );
+				return $rs ? $rs : true; // mysqli_more_results( $this->_connectionID )
+			}
+		} else {
+			$rs = mysqli_query($this->_connectionID, $sql, $ADODB_COUNTRECS ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
+
+			if ($rs) return $rs;
+		}
+
+		if($this->debug)
+			ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg());
+
+		return false;
+
+	}
+
+	/*	Returns: the last error message from previous database operation	*/
+	function ErrorMsg()
+	{
+		if (empty($this->_connectionID))
+			$this->_errorMsg = @mysqli_connect_error();
+		else
+			$this->_errorMsg = @mysqli_error($this->_connectionID);
+		return $this->_errorMsg;
+	}
+
+	/*	Returns: the last error number from previous database operation	*/
+	function ErrorNo()
+	{
+		if (empty($this->_connectionID))
+			return @mysqli_connect_errno();
+		else
+			return @mysqli_errno($this->_connectionID);
+	}
+
+	// returns true or false
+	function _close()
+	{
+		@mysqli_close($this->_connectionID);
+		$this->_connectionID = false;
+	}
+
+	/*
+	* Maximum size of C field
+	*/
+	function CharMax()
+	{
+		return 255;
+	}
+
+	/*
+	* Maximum size of X field
+	*/
+	function TextMax()
+	{
+		return 4294967295;
+	}
+
+
+	// this is a set of functions for managing client encoding - very important if the encodings
+	// of your database and your output target (i.e. HTML) don't match
+	// for instance, you may have UTF8 database and server it on-site as latin1 etc.
+	// GetCharSet - get the name of the character set the client is using now
+	// Under Windows, the functions should work with MySQL 4.1.11 and above, the set of charsets supported
+	// depends on compile flags of mysql distribution
+
+	function GetCharSet()
+	{
+		//we will use ADO's builtin property charSet
+		if (!method_exists($this->_connectionID,'character_set_name'))
+			return false;
+
+		$this->charSet = @$this->_connectionID->character_set_name();
+		if (!$this->charSet) {
+			return false;
+		} else {
+			return $this->charSet;
+		}
+	}
+
+	// SetCharSet - switch the client encoding
+	function SetCharSet($charset_name)
+	{
+		if (!method_exists($this->_connectionID,'set_charset')) {
+			return false;
+		}
+
+		if ($this->charSet !== $charset_name) {
+			$if = @$this->_connectionID->set_charset($charset_name);
+			return ($if === true & $this->GetCharSet() == $charset_name);
+		} else {
+			return true;
+		}
+	}
+
+}
+
+/*--------------------------------------------------------------------------------------
+	 Class Name: Recordset
+--------------------------------------------------------------------------------------*/
+
+class ADORecordSet_mysqli extends ADORecordSet{
+
+	var $databaseType = "mysqli";
+	var $canSeek = true;
+
+	function __construct($queryID, $mode = false)
+	{
+		if ($mode === false) {
+			global $ADODB_FETCH_MODE;
+			$mode = $ADODB_FETCH_MODE;
+		}
+
+		switch ($mode) {
+			case ADODB_FETCH_NUM:
+				$this->fetchMode = MYSQLI_NUM;
+				break;
+			case ADODB_FETCH_ASSOC:
+				$this->fetchMode = MYSQLI_ASSOC;
+				break;
+			case ADODB_FETCH_DEFAULT:
+			case ADODB_FETCH_BOTH:
+			default:
+				$this->fetchMode = MYSQLI_BOTH;
+				break;
+		}
+		$this->adodbFetchMode = $mode;
+		parent::__construct($queryID);
+	}
+
+	function _initrs()
+	{
+	global $ADODB_COUNTRECS;
+
+		$this->_numOfRows = $ADODB_COUNTRECS ? @mysqli_num_rows($this->_queryID) : -1;
+		$this->_numOfFields = @mysqli_num_fields($this->_queryID);
+	}
+
+/*
+1      = MYSQLI_NOT_NULL_FLAG
+2      = MYSQLI_PRI_KEY_FLAG
+4      = MYSQLI_UNIQUE_KEY_FLAG
+8      = MYSQLI_MULTIPLE_KEY_FLAG
+16     = MYSQLI_BLOB_FLAG
+32     = MYSQLI_UNSIGNED_FLAG
+64     = MYSQLI_ZEROFILL_FLAG
+128    = MYSQLI_BINARY_FLAG
+256    = MYSQLI_ENUM_FLAG
+512    = MYSQLI_AUTO_INCREMENT_FLAG
+1024   = MYSQLI_TIMESTAMP_FLAG
+2048   = MYSQLI_SET_FLAG
+32768  = MYSQLI_NUM_FLAG
+16384  = MYSQLI_PART_KEY_FLAG
+32768  = MYSQLI_GROUP_FLAG
+65536  = MYSQLI_UNIQUE_FLAG
+131072 = MYSQLI_BINCMP_FLAG
+*/
+
+	function FetchField($fieldOffset = -1)
+	{
+		$fieldnr = $fieldOffset;
+		if ($fieldOffset != -1) {
+			$fieldOffset = @mysqli_field_seek($this->_queryID, $fieldnr);
+		}
+		$o = @mysqli_fetch_field($this->_queryID);
+		if (!$o) return false;
+
+		//Fix for HHVM
+		if ( !isset($o->flags) ) {
+			$o->flags = 0;
+		}
+		/* Properties of an ADOFieldObject as set by MetaColumns */
+		$o->primary_key = $o->flags & MYSQLI_PRI_KEY_FLAG;
+		$o->not_null = $o->flags & MYSQLI_NOT_NULL_FLAG;
+		$o->auto_increment = $o->flags & MYSQLI_AUTO_INCREMENT_FLAG;
+		$o->binary = $o->flags & MYSQLI_BINARY_FLAG;
+		// $o->blob = $o->flags & MYSQLI_BLOB_FLAG; /* not returned by MetaColumns */
+		$o->unsigned = $o->flags & MYSQLI_UNSIGNED_FLAG;
+
+		return $o;
+	}
+
+	function GetRowAssoc($upper = ADODB_ASSOC_CASE)
+	{
+		if ($this->fetchMode == MYSQLI_ASSOC && $upper == ADODB_ASSOC_CASE_LOWER) {
+			return $this->fields;
+		}
+		$row = ADORecordSet::GetRowAssoc($upper);
+		return $row;
+	}
+
+	/* Use associative array to get fields array */
+	function Fields($colname)
+	{
+		if ($this->fetchMode != MYSQLI_NUM) {
+			return @$this->fields[$colname];
+		}
+
+		if (!$this->bind) {
+			$this->bind = array();
+			for ($i = 0; $i < $this->_numOfFields; $i++) {
+				$o = $this->FetchField($i);
+				$this->bind[strtoupper($o->name)] = $i;
+			}
+		}
+		return $this->fields[$this->bind[strtoupper($colname)]];
+	}
+
+	function _seek($row)
+	{
+		if ($this->_numOfRows == 0 || $row < 0) {
+			return false;
+		}
+
+		mysqli_data_seek($this->_queryID, $row);
+		$this->EOF = false;
+		return true;
+	}
+
+
+	function NextRecordSet()
+	{
+	global $ADODB_COUNTRECS;
+
+		mysqli_free_result($this->_queryID);
+		$this->_queryID = -1;
+		// Move to the next recordset, or return false if there is none. In a stored proc
+		// call, mysqli_next_result returns true for the last "recordset", but mysqli_store_result
+		// returns false. I think this is because the last "recordset" is actually just the
+		// return value of the stored proc (ie the number of rows affected).
+		if(!mysqli_next_result($this->connection->_connectionID)) {
+		return false;
+		}
+		// CD: There is no $this->_connectionID variable, at least in the ADO version I'm using
+		$this->_queryID = ($ADODB_COUNTRECS) ? @mysqli_store_result( $this->connection->_connectionID )
+						: @mysqli_use_result( $this->connection->_connectionID );
+		if(!$this->_queryID) {
+			return false;
+		}
+		$this->_inited = false;
+		$this->bind = false;
+		$this->_currentRow = -1;
+		$this->Init();
+		return true;
+	}
+
+	// 10% speedup to move MoveNext to child class
+	// This is the only implementation that works now (23-10-2003).
+	// Other functions return no or the wrong results.
+	function MoveNext()
+	{
+		if ($this->EOF) return false;
+		$this->_currentRow++;
+		$this->fields = @mysqli_fetch_array($this->_queryID,$this->fetchMode);
+
+		if (is_array($this->fields)) {
+			$this->_updatefields();
+			return true;
+		}
+		$this->EOF = true;
+		return false;
+	}
+
+	function _fetch()
+	{
+		$this->fields = mysqli_fetch_array($this->_queryID,$this->fetchMode);
+		$this->_updatefields();
+		return is_array($this->fields);
+	}
+
+	function _close()
+	{
+		//if results are attached to this pointer from Stored Proceedure calls, the next standard query will die 2014
+		//only a problem with persistant connections
+
+		if($this->connection->_connectionID) {
+			while(mysqli_more_results($this->connection->_connectionID)){
+				mysqli_next_result($this->connection->_connectionID);
+			}
+		}
+
+		if($this->_queryID instanceof mysqli_result) {
+			mysqli_free_result($this->_queryID);
+		}
+		$this->_queryID = false;
+	}
+
+/*
+
+0 = MYSQLI_TYPE_DECIMAL
+1 = MYSQLI_TYPE_CHAR
+1 = MYSQLI_TYPE_TINY
+2 = MYSQLI_TYPE_SHORT
+3 = MYSQLI_TYPE_LONG
+4 = MYSQLI_TYPE_FLOAT
+5 = MYSQLI_TYPE_DOUBLE
+6 = MYSQLI_TYPE_NULL
+7 = MYSQLI_TYPE_TIMESTAMP
+8 = MYSQLI_TYPE_LONGLONG
+9 = MYSQLI_TYPE_INT24
+10 = MYSQLI_TYPE_DATE
+11 = MYSQLI_TYPE_TIME
+12 = MYSQLI_TYPE_DATETIME
+13 = MYSQLI_TYPE_YEAR
+14 = MYSQLI_TYPE_NEWDATE
+247 = MYSQLI_TYPE_ENUM
+248 = MYSQLI_TYPE_SET
+249 = MYSQLI_TYPE_TINY_BLOB
+250 = MYSQLI_TYPE_MEDIUM_BLOB
+251 = MYSQLI_TYPE_LONG_BLOB
+252 = MYSQLI_TYPE_BLOB
+253 = MYSQLI_TYPE_VAR_STRING
+254 = MYSQLI_TYPE_STRING
+255 = MYSQLI_TYPE_GEOMETRY
+*/
+
+	function MetaType($t, $len = -1, $fieldobj = false)
+	{
+		if (is_object($t)) {
+			$fieldobj = $t;
+			$t = $fieldobj->type;
+			$len = $fieldobj->max_length;
+		}
+
+
+		$len = -1; // mysql max_length is not accurate
+		switch (strtoupper($t)) {
+		case 'STRING':
+		case 'CHAR':
+		case 'VARCHAR':
+		case 'TINYBLOB':
+		case 'TINYTEXT':
+		case 'ENUM':
+		case 'SET':
+
+		case MYSQLI_TYPE_TINY_BLOB :
+		#case MYSQLI_TYPE_CHAR :
+		case MYSQLI_TYPE_STRING :
+		case MYSQLI_TYPE_ENUM :
+		case MYSQLI_TYPE_SET :
+		case 253 :
+			if ($len <= $this->blobSize) return 'C';
+
+		case 'TEXT':
+		case 'LONGTEXT':
+		case 'MEDIUMTEXT':
+			return 'X';
+
+		// php_mysql extension always returns 'blob' even if 'text'
+		// so we have to check whether binary...
+		case 'IMAGE':
+		case 'LONGBLOB':
+		case 'BLOB':
+		case 'MEDIUMBLOB':
+
+		case MYSQLI_TYPE_BLOB :
+		case MYSQLI_TYPE_LONG_BLOB :
+		case MYSQLI_TYPE_MEDIUM_BLOB :
+			return !empty($fieldobj->binary) ? 'B' : 'X';
+
+		case 'YEAR':
+		case 'DATE':
+		case MYSQLI_TYPE_DATE :
+		case MYSQLI_TYPE_YEAR :
+			return 'D';
+
+		case 'TIME':
+		case 'DATETIME':
+		case 'TIMESTAMP':
+
+		case MYSQLI_TYPE_DATETIME :
+		case MYSQLI_TYPE_NEWDATE :
+		case MYSQLI_TYPE_TIME :
+		case MYSQLI_TYPE_TIMESTAMP :
+			return 'T';
+
+		case 'INT':
+		case 'INTEGER':
+		case 'BIGINT':
+		case 'TINYINT':
+		case 'MEDIUMINT':
+		case 'SMALLINT':
+
+		case MYSQLI_TYPE_INT24 :
+		case MYSQLI_TYPE_LONG :
+		case MYSQLI_TYPE_LONGLONG :
+		case MYSQLI_TYPE_SHORT :
+		case MYSQLI_TYPE_TINY :
+			if (!empty($fieldobj->primary_key)) return 'R';
+			return 'I';
+
+		// Added floating-point types
+		// Maybe not necessery.
+		case 'FLOAT':
+		case 'DOUBLE':
+//		case 'DOUBLE PRECISION':
+		case 'DECIMAL':
+		case 'DEC':
+		case 'FIXED':
+		default:
+			//if (!is_numeric($t)) echo "

--- Error in type matching $t -----

"; + return 'N'; + } + } // function + + +} // rs class + +} + +class ADORecordSet_array_mysqli extends ADORecordSet_array { + + function __construct($id=-1,$mode=false) + { + parent::__construct($id,$mode); + } + + function MetaType($t, $len = -1, $fieldobj = false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + + $len = -1; // mysql max_length is not accurate + switch (strtoupper($t)) { + case 'STRING': + case 'CHAR': + case 'VARCHAR': + case 'TINYBLOB': + case 'TINYTEXT': + case 'ENUM': + case 'SET': + + case MYSQLI_TYPE_TINY_BLOB : + #case MYSQLI_TYPE_CHAR : + case MYSQLI_TYPE_STRING : + case MYSQLI_TYPE_ENUM : + case MYSQLI_TYPE_SET : + case 253 : + if ($len <= $this->blobSize) return 'C'; + + case 'TEXT': + case 'LONGTEXT': + case 'MEDIUMTEXT': + return 'X'; + + // php_mysql extension always returns 'blob' even if 'text' + // so we have to check whether binary... + case 'IMAGE': + case 'LONGBLOB': + case 'BLOB': + case 'MEDIUMBLOB': + + case MYSQLI_TYPE_BLOB : + case MYSQLI_TYPE_LONG_BLOB : + case MYSQLI_TYPE_MEDIUM_BLOB : + + return !empty($fieldobj->binary) ? 'B' : 'X'; + case 'YEAR': + case 'DATE': + case MYSQLI_TYPE_DATE : + case MYSQLI_TYPE_YEAR : + + return 'D'; + + case 'TIME': + case 'DATETIME': + case 'TIMESTAMP': + + case MYSQLI_TYPE_DATETIME : + case MYSQLI_TYPE_NEWDATE : + case MYSQLI_TYPE_TIME : + case MYSQLI_TYPE_TIMESTAMP : + + return 'T'; + + case 'INT': + case 'INTEGER': + case 'BIGINT': + case 'TINYINT': + case 'MEDIUMINT': + case 'SMALLINT': + + case MYSQLI_TYPE_INT24 : + case MYSQLI_TYPE_LONG : + case MYSQLI_TYPE_LONGLONG : + case MYSQLI_TYPE_SHORT : + case MYSQLI_TYPE_TINY : + + if (!empty($fieldobj->primary_key)) return 'R'; + + return 'I'; + + + // Added floating-point types + // Maybe not necessery. + case 'FLOAT': + case 'DOUBLE': +// case 'DOUBLE PRECISION': + case 'DECIMAL': + case 'DEC': + case 'FIXED': + default: + //if (!is_numeric($t)) echo "

--- Error in type matching $t -----

"; + return 'N'; + } + } // function + +} diff --git a/ehcp/adodb5/drivers/adodb-mysqlpo.inc.php b/ehcp/adodb5/drivers/adodb-mysqlpo.inc.php new file mode 100644 index 0000000..666e4e3 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-mysqlpo.inc.php @@ -0,0 +1,128 @@ + + + This driver extends the deprecated mysql driver, and was originally designed to be a + portable driver in the same manner as oci8po and mssqlpo. Its functionality + is exactly duplicated in the mysqlt driver, which is itself deprecated. + This driver will be removed in ADOdb version 6.0.0. + + Requires mysql client. Works on Windows and Unix. +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +include_once(ADODB_DIR."/drivers/adodb-mysql.inc.php"); + + +class ADODB_mysqlt extends ADODB_mysql { + var $databaseType = 'mysqlt'; + var $ansiOuter = true; // for Version 3.23.17 or later + var $hasTransactions = true; + var $autoRollback = true; // apparently mysql does not autorollback properly + + function __construct() + { + global $ADODB_EXTENSION; if ($ADODB_EXTENSION) $this->rsPrefix .= 'ext_'; + } + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + $this->Execute('SET AUTOCOMMIT=0'); + $this->Execute('BEGIN'); + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + + if ($this->transCnt) $this->transCnt -= 1; + $this->Execute('COMMIT'); + $this->Execute('SET AUTOCOMMIT=1'); + return true; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->Execute('ROLLBACK'); + $this->Execute('SET AUTOCOMMIT=1'); + return true; + } + + function RowLock($tables,$where='',$col='1 as adodbignore') + { + if ($this->transCnt==0) $this->BeginTrans(); + if ($where) $where = ' where '.$where; + $rs = $this->Execute("select $col from $tables $where for update"); + return !empty($rs); + } + +} + +class ADORecordSet_mysqlt extends ADORecordSet_mysql{ + var $databaseType = "mysqlt"; + + function __construct($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + + switch ($mode) + { + case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; + case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; + + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: $this->fetchMode = MYSQL_BOTH; break; + } + + $this->adodbFetchMode = $mode; + parent::__construct($queryID); + } + + function MoveNext() + { + if (@$this->fields = mysql_fetch_array($this->_queryID,$this->fetchMode)) { + $this->_currentRow += 1; + return true; + } + if (!$this->EOF) { + $this->_currentRow += 1; + $this->EOF = true; + } + return false; + } +} + +class ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt { + + function __construct($queryID,$mode=false) + { + parent::__construct($queryID,$mode); + } + + function MoveNext() + { + return adodb_movenext($this); + } +} diff --git a/ehcp/adodb5/drivers/adodb-mysqlt.inc.php b/ehcp/adodb5/drivers/adodb-mysqlt.inc.php new file mode 100644 index 0000000..7684882 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-mysqlt.inc.php @@ -0,0 +1,137 @@ +rsPrefix .= 'ext_'; + } + + /* set transaction mode + + SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL +{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } + + */ + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET SESSION TRANSACTION ".$transaction_mode); + } + + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + $this->Execute('SET AUTOCOMMIT=0'); + $this->Execute('BEGIN'); + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + + if ($this->transCnt) $this->transCnt -= 1; + $ok = $this->Execute('COMMIT'); + $this->Execute('SET AUTOCOMMIT=1'); + return $ok ? true : false; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $ok = $this->Execute('ROLLBACK'); + $this->Execute('SET AUTOCOMMIT=1'); + return $ok ? true : false; + } + + function RowLock($tables,$where='',$col='1 as adodbignore') + { + if ($this->transCnt==0) $this->BeginTrans(); + if ($where) $where = ' where '.$where; + $rs = $this->Execute("select $col from $tables $where for update"); + return !empty($rs); + } + +} + +class ADORecordSet_mysqlt extends ADORecordSet_mysql{ + var $databaseType = "mysqlt"; + + function __construct($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + + switch ($mode) + { + case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; + case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; + + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: $this->fetchMode = MYSQL_BOTH; break; + } + + $this->adodbFetchMode = $mode; + parent::__construct($queryID); + } + + function MoveNext() + { + if (@$this->fields = mysql_fetch_array($this->_queryID,$this->fetchMode)) { + $this->_currentRow += 1; + return true; + } + if (!$this->EOF) { + $this->_currentRow += 1; + $this->EOF = true; + } + return false; + } +} + +class ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt { + + function MoveNext() + { + return adodb_movenext($this); + } +} diff --git a/ehcp/adodb5/drivers/adodb-netezza.inc.php b/ehcp/adodb5/drivers/adodb-netezza.inc.php new file mode 100644 index 0000000..f2396f7 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-netezza.inc.php @@ -0,0 +1,157 @@ + 0 ORDER BY attnum"; + var $metaColumnsSQL1 = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum"; + // netezza doesn't have keys. it does have distributions, so maybe this is + // something that can be pulled from the system tables + var $metaKeySQL = ""; + var $hasAffectedRows = true; + var $hasLimit = true; + var $true = 't'; // string that represents TRUE for a database + var $false = 'f'; // string that represents FALSE for a database + var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt. + var $ansiOuter = true; + var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4 + // http://bugs.php.net/bug.php?id=25404 + + + function __construct() + { + + } + + function MetaColumns($table,$upper=true) + { + + // Changed this function to support Netezza which has no concept of keys + // could posisbly work on other things from the system table later. + + global $ADODB_FETCH_MODE; + + $table = strtolower($table); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rs === false) return false; + + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + + // since we're returning type and length as one string, + // split them out here. + + if ($first = strstr($rs->fields[1], "(")) { + $fld->max_length = trim($first, "()"); + } else { + $fld->max_length = -1; + } + + if ($first = strpos($rs->fields[1], "(")) { + $fld->type = substr($rs->fields[1], 0, $first); + } else { + $fld->type = $rs->fields[1]; + } + + switch ($fld->type) { + case "byteint": + case "boolean": + $fld->max_length = 1; + break; + case "smallint": + $fld->max_length = 2; + break; + case "integer": + case "numeric": + case "date": + $fld->max_length = 4; + break; + case "bigint": + case "time": + case "timestamp": + $fld->max_length = 8; + break; + case "timetz": + case "time with time zone": + $fld->max_length = 12; + break; + } + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + + } + + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_netezza extends ADORecordSet_postgres64 +{ + var $databaseType = "netezza"; + var $canSeek = true; + + function __construct($queryID,$mode=false) + { + parent::__construct($queryID,$mode); + } + + // _initrs modified to disable blob handling + function _initrs() + { + global $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_num_rows($this->_queryID):-1; + $this->_numOfFields = @pg_num_fields($this->_queryID); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-oci8.inc.php b/ehcp/adodb5/drivers/adodb-oci8.inc.php new file mode 100644 index 0000000..48f9107 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-oci8.inc.php @@ -0,0 +1,1814 @@ + + + 13 Nov 2000 jlim - removed all ora_* references. +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +/* +NLS_Date_Format +Allows you to use a date format other than the Oracle Lite default. When a literal +character string appears where a date value is expected, the Oracle Lite database +tests the string to see if it matches the formats of Oracle, SQL-92, or the value +specified for this parameter in the POLITE.INI file. Setting this parameter also +defines the default format used in the TO_CHAR or TO_DATE functions when no +other format string is supplied. + +For Oracle the default is dd-mon-yy or dd-mon-yyyy, and for SQL-92 the default is +yy-mm-dd or yyyy-mm-dd. + +Using 'RR' in the format forces two-digit years less than or equal to 49 to be +interpreted as years in the 21st century (2000-2049), and years over 50 as years in +the 20th century (1950-1999). Setting the RR format as the default for all two-digit +year entries allows you to become year-2000 compliant. For example: +NLS_DATE_FORMAT='RR-MM-DD' + +You can also modify the date format using the ALTER SESSION command. +*/ + +# define the LOB descriptor type for the given type +# returns false if no LOB descriptor +function oci_lob_desc($type) { + switch ($type) { + case OCI_B_BFILE: return OCI_D_FILE; + case OCI_B_CFILEE: return OCI_D_FILE; + case OCI_B_CLOB: return OCI_D_LOB; + case OCI_B_BLOB: return OCI_D_LOB; + case OCI_B_ROWID: return OCI_D_ROWID; + } + return false; +} + +class ADODB_oci8 extends ADOConnection { + var $databaseType = 'oci8'; + var $dataProvider = 'oci8'; + var $replaceQuote = "''"; // string to use to replace quotes + var $concat_operator='||'; + var $sysDate = "TRUNC(SYSDATE)"; + var $sysTimeStamp = 'SYSDATE'; // requires oracle 9 or later, otherwise use SYSDATE + var $metaDatabasesSQL = "SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN') ORDER BY 1"; + var $_stmt; + var $_commit = OCI_COMMIT_ON_SUCCESS; + var $_initdate = true; // init date to YYYY-MM-DD + var $metaTablesSQL = "select table_name,table_type from cat where table_type in ('TABLE','VIEW') and table_name not like 'BIN\$%'"; // bin$ tables are recycle bin tables + var $metaColumnsSQL = "select cname,coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net + var $metaColumnsSQL2 = "select column_name,data_type,data_length, data_scale, data_precision, + case when nullable = 'Y' then 'NULL' + else 'NOT NULL' end as nulls, + data_default from all_tab_cols + where owner='%s' and table_name='%s' order by column_id"; // when there is a schema + var $_bindInputArray = true; + var $hasGenID = true; + var $_genIDSQL = "SELECT (%s.nextval) FROM DUAL"; + var $_genSeqSQL = " +DECLARE + PRAGMA AUTONOMOUS_TRANSACTION; +BEGIN + execute immediate 'CREATE SEQUENCE %s START WITH %s'; +END; +"; + + var $_dropSeqSQL = "DROP SEQUENCE %s"; + var $hasAffectedRows = true; + var $random = "abs(mod(DBMS_RANDOM.RANDOM,10000001)/10000000)"; + var $noNullStrings = false; + var $connectSID = false; + var $_bind = false; + var $_nestedSQL = true; + var $_hasOciFetchStatement = false; + var $_getarray = false; // currently not working + var $leftOuter = ''; // oracle wierdness, $col = $value (+) for LEFT OUTER, $col (+)= $value for RIGHT OUTER + var $session_sharing_force_blob = false; // alter session on updateblob if set to true + var $firstrows = true; // enable first rows optimization on SelectLimit() + var $selectOffsetAlg1 = 1000; // when to use 1st algorithm of selectlimit. + var $NLS_DATE_FORMAT = 'YYYY-MM-DD'; // To include time, use 'RRRR-MM-DD HH24:MI:SS' + var $dateformat = 'YYYY-MM-DD'; // DBDate format + var $useDBDateFormatForTextInput=false; + var $datetime = false; // MetaType('DATE') returns 'D' (datetime==false) or 'T' (datetime == true) + var $_refLOBs = array(); + + // var $ansiOuter = true; // if oracle9 + + function __construct() + { + $this->_hasOciFetchStatement = ADODB_PHPVER >= 0x4200; + if (defined('ADODB_EXTENSION')) { + $this->rsPrefix .= 'ext_'; + } + } + + /* function MetaColumns($table, $normalize=true) added by smondino@users.sourceforge.net*/ + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $schema = ''; + $this->_findschema($table, $schema); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + + if ($schema){ + $rs = $this->Execute(sprintf($this->metaColumnsSQL2, strtoupper($schema), strtoupper($table))); + } + else { + $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); + } + + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + if (!$rs) { + return false; + } + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + $fld->scale = $rs->fields[3]; + if ($rs->fields[1] == 'NUMBER') { + if ($rs->fields[3] == 0) { + $fld->type = 'INT'; + } + $fld->max_length = $rs->fields[4]; + } + $fld->not_null = (strncmp($rs->fields[5], 'NOT',3) === 0); + $fld->binary = (strpos($fld->type,'BLOB') !== false); + $fld->default_value = $rs->fields[6]; + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) { + $retarr[] = $fld; + } + else { + $retarr[strtoupper($fld->name)] = $fld; + } + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) { + return false; + } + return $retarr; + } + + function Time() + { + $rs = $this->Execute("select TO_CHAR($this->sysTimeStamp,'YYYY-MM-DD HH24:MI:SS') from dual"); + if ($rs && !$rs->EOF) { + return $this->UnixTimeStamp(reset($rs->fields)); + } + + return false; + } + + /** + * Multiple modes of connection are supported: + * + * a. Local Database + * $conn->Connect(false,'scott','tiger'); + * + * b. From tnsnames.ora + * $conn->Connect($tnsname,'scott','tiger'); + * $conn->Connect(false,'scott','tiger',$tnsname); + * + * c. Server + service name + * $conn->Connect($serveraddress,'scott,'tiger',$service_name); + * + * d. Server + SID + * $conn->connectSID = true; + * $conn->Connect($serveraddress,'scott,'tiger',$SID); + * + * @param string|false $argHostname DB server hostname or TNS name + * @param string $argUsername + * @param string $argPassword + * @param string $argDatabasename Service name, SID (defaults to null) + * @param int $mode Connection mode, defaults to 0 + * (0 = non-persistent, 1 = persistent, 2 = force new connection) + * + * @return bool + */ + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename=null, $mode=0) + { + if (!function_exists('oci_pconnect')) { + return null; + } + #adodb_backtrace(); + + $this->_errorMsg = false; + $this->_errorCode = false; + + if($argHostname) { // added by Jorma Tuomainen + if (empty($argDatabasename)) { + $argDatabasename = $argHostname; + } + else { + if(strpos($argHostname,":")) { + $argHostinfo=explode(":",$argHostname); + $argHostname=$argHostinfo[0]; + $argHostport=$argHostinfo[1]; + } else { + $argHostport = empty($this->port)? "1521" : $this->port; + } + + if (strncasecmp($argDatabasename,'SID=',4) == 0) { + $argDatabasename = substr($argDatabasename,4); + $this->connectSID = true; + } + + if ($this->connectSID) { + $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname + .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))"; + } else + $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname + .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))"; + } + } + + //if ($argHostname) print "

Connect: 1st argument should be left blank for $this->databaseType

"; + if ($mode==1) { + $this->_connectionID = ($this->charSet) + ? oci_pconnect($argUsername,$argPassword, $argDatabasename,$this->charSet) + : oci_pconnect($argUsername,$argPassword, $argDatabasename); + if ($this->_connectionID && $this->autoRollback) { + oci_rollback($this->_connectionID); + } + } else if ($mode==2) { + $this->_connectionID = ($this->charSet) + ? oci_new_connect($argUsername,$argPassword, $argDatabasename,$this->charSet) + : oci_new_connect($argUsername,$argPassword, $argDatabasename); + } else { + $this->_connectionID = ($this->charSet) + ? oci_connect($argUsername,$argPassword, $argDatabasename,$this->charSet) + : oci_connect($argUsername,$argPassword, $argDatabasename); + } + if (!$this->_connectionID) { + return false; + } + + if ($this->_initdate) { + $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='".$this->NLS_DATE_FORMAT."'"); + } + + // looks like: + // Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production + // $vers = oci_server_version($this->_connectionID); + // if (strpos($vers,'8i') !== false) $this->ansiOuter = true; + return true; + } + + function ServerInfo() + { + $arr['compat'] = $this->GetOne('select value from sys.database_compatible_level'); + $arr['description'] = @oci_server_version($this->_connectionID); + $arr['version'] = ADOConnection::_findvers($arr['description']); + return $arr; + } + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,1); + } + + // returns true or false + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,2); + } + + function _affectedrows() + { + if (is_resource($this->_stmt)) { + return @oci_num_rows($this->_stmt); + } + return 0; + } + + function IfNull( $field, $ifNull ) + { + return " NVL($field, $ifNull) "; // if Oracle + } + + // format and return date string in database date format + function DBDate($d,$isfld=false) + { + if (empty($d) && $d !== 0) { + return 'null'; + } + + if ($isfld) { + $d = _adodb_safedate($d); + return 'TO_DATE('.$d.",'".$this->dateformat."')"; + } + + if (is_string($d)) { + $d = ADORecordSet::UnixDate($d); + } + + if (is_object($d)) { + $ds = $d->format($this->fmtDate); + } + else { + $ds = adodb_date($this->fmtDate,$d); + } + + return "TO_DATE(".$ds.",'".$this->dateformat."')"; + } + + function BindDate($d) + { + $d = ADOConnection::DBDate($d); + if (strncmp($d, "'", 1)) { + return $d; + } + + return substr($d, 1, strlen($d)-2); + } + + function BindTimeStamp($ts) + { + if (empty($ts) && $ts !== 0) { + return 'null'; + } + if (is_string($ts)) { + $ts = ADORecordSet::UnixTimeStamp($ts); + } + + if (is_object($ts)) { + $tss = $ts->format("'Y-m-d H:i:s'"); + } + else { + $tss = adodb_date("'Y-m-d H:i:s'",$ts); + } + + return $tss; + } + + // format and return date string in database timestamp format + function DBTimeStamp($ts,$isfld=false) + { + if (empty($ts) && $ts !== 0) { + return 'null'; + } + if ($isfld) { + return 'TO_DATE(substr('.$ts.",1,19),'RRRR-MM-DD, HH24:MI:SS')"; + } + if (is_string($ts)) { + $ts = ADORecordSet::UnixTimeStamp($ts); + } + + if (is_object($ts)) { + $tss = $ts->format("'Y-m-d H:i:s'"); + } + else { + $tss = date("'Y-m-d H:i:s'",$ts); + } + + return 'TO_DATE('.$tss.",'RRRR-MM-DD, HH24:MI:SS')"; + } + + function RowLock($tables,$where,$col='1 as adodbignore') + { + if ($this->autoCommit) { + $this->BeginTrans(); + } + return $this->GetOne("select $col from $tables where $where for update"); + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtoupper($mask)); + $this->metaTablesSQL .= " AND upper(table_name) like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + // Mark Newnham + function MetaIndexes ($table, $primary = FALSE, $owner=false) + { + // save old fetch mode + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + // get index details + $table = strtoupper($table); + + // get Primary index + $primary_key = ''; + + $rs = $this->Execute(sprintf("SELECT * FROM ALL_CONSTRAINTS WHERE UPPER(TABLE_NAME)='%s' AND CONSTRAINT_TYPE='P'",$table)); + if (!is_object($rs)) { + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return false; + } + + if ($row = $rs->FetchRow()) { + $primary_key = $row[1]; //constraint_name + } + + if ($primary==TRUE && $primary_key=='') { + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return false; //There is no primary key + } + + $rs = $this->Execute(sprintf("SELECT ALL_INDEXES.INDEX_NAME, ALL_INDEXES.UNIQUENESS, ALL_IND_COLUMNS.COLUMN_POSITION, ALL_IND_COLUMNS.COLUMN_NAME FROM ALL_INDEXES,ALL_IND_COLUMNS WHERE UPPER(ALL_INDEXES.TABLE_NAME)='%s' AND ALL_IND_COLUMNS.INDEX_NAME=ALL_INDEXES.INDEX_NAME",$table)); + + + if (!is_object($rs)) { + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return false; + } + + $indexes = array (); + // parse index data into array + + while ($row = $rs->FetchRow()) { + if ($primary && $row[0] != $primary_key) { + continue; + } + if (!isset($indexes[$row[0]])) { + $indexes[$row[0]] = array( + 'unique' => ($row[1] == 'UNIQUE'), + 'columns' => array() + ); + } + $indexes[$row[0]]['columns'][$row[2] - 1] = $row[3]; + } + + // sort columns by order in the index + foreach ( array_keys ($indexes) as $index ) { + ksort ($indexes[$index]['columns']); + } + + if (isset($savem)) { + $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + } + return $indexes; + } + + function BeginTrans() + { + if ($this->transOff) { + return true; + } + $this->transCnt += 1; + $this->autoCommit = false; + $this->_commit = OCI_DEFAULT; + + if ($this->_transmode) { + $ok = $this->Execute("SET TRANSACTION ".$this->_transmode); + } + else { + $ok = true; + } + + return $ok ? true : false; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) { + return true; + } + if (!$ok) { + return $this->RollbackTrans(); + } + + if ($this->transCnt) { + $this->transCnt -= 1; + } + $ret = oci_commit($this->_connectionID); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + $this->autoCommit = true; + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) { + return true; + } + if ($this->transCnt) { + $this->transCnt -= 1; + } + $ret = oci_rollback($this->_connectionID); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + $this->autoCommit = true; + return $ret; + } + + + function SelectDB($dbName) + { + return false; + } + + function ErrorMsg() + { + if ($this->_errorMsg !== false) { + return $this->_errorMsg; + } + + if (is_resource($this->_stmt)) { + $arr = @oci_error($this->_stmt); + } + if (empty($arr)) { + if (is_resource($this->_connectionID)) { + $arr = @oci_error($this->_connectionID); + } + else { + $arr = @oci_error(); + } + if ($arr === false) { + return ''; + } + } + $this->_errorMsg = $arr['message']; + $this->_errorCode = $arr['code']; + return $this->_errorMsg; + } + + function ErrorNo() + { + if ($this->_errorCode !== false) { + return $this->_errorCode; + } + + if (is_resource($this->_stmt)) { + $arr = @oci_error($this->_stmt); + } + if (empty($arr)) { + $arr = @oci_error($this->_connectionID); + if ($arr == false) { + $arr = @oci_error(); + } + if ($arr == false) { + return ''; + } + } + + $this->_errorMsg = $arr['message']; + $this->_errorCode = $arr['code']; + + return $arr['code']; + } + + /** + * Format date column in sql string given an input format that understands Y M D + */ + function SQLDate($fmt, $col=false) + { + if (!$col) { + $col = $this->sysTimeStamp; + } + $s = 'TO_CHAR('.$col.",'"; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= 'YYYY'; + break; + case 'Q': + case 'q': + $s .= 'Q'; + break; + + case 'M': + $s .= 'Mon'; + break; + + case 'm': + $s .= 'MM'; + break; + case 'D': + case 'd': + $s .= 'DD'; + break; + + case 'H': + $s.= 'HH24'; + break; + + case 'h': + $s .= 'HH'; + break; + + case 'i': + $s .= 'MI'; + break; + + case 's': + $s .= 'SS'; + break; + + case 'a': + case 'A': + $s .= 'AM'; + break; + + case 'w': + $s .= 'D'; + break; + + case 'l': + $s .= 'DAY'; + break; + + case 'W': + $s .= 'WW'; + break; + + default: + // handle escape characters... + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + if (strpos('-/.:;, ',$ch) !== false) { + $s .= $ch; + } + else { + $s .= '"'.$ch.'"'; + } + + } + } + return $s. "')"; + } + + function GetRandRow($sql, $arr = false) + { + $sql = "SELECT * FROM ($sql ORDER BY dbms_random.value) WHERE rownum = 1"; + + return $this->GetRow($sql,$arr); + } + + /** + * This algorithm makes use of + * + * a. FIRST_ROWS hint + * The FIRST_ROWS hint explicitly chooses the approach to optimize response + * time, that is, minimum resource usage to return the first row. Results + * will be returned as soon as they are identified. + * + * b. Uses rownum tricks to obtain only the required rows from a given offset. + * As this uses complicated sql statements, we only use this if $offset >= 100. + * This idea by Tomas V V Cox. + * + * This implementation does not appear to work with oracle 8.0.5 or earlier. + * Comment out this function then, and the slower SelectLimit() in the base + * class will be used. + */ + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + // seems that oracle only supports 1 hint comment in 8i + if ($this->firstrows) { + if ($nrows > 500 && $nrows < 1000) { + $hint = "FIRST_ROWS($nrows)"; + } + else { + $hint = 'FIRST_ROWS'; + } + + if (strpos($sql,'/*+') !== false) { + $sql = str_replace('/*+ ',"/*+$hint ",$sql); + } + else { + $sql = preg_replace('/^[ \t\n]*select/i',"SELECT /*+$hint*/",$sql); + } + $hint = "/*+ $hint */"; + } else { + $hint = ''; + } + + if ($offset == -1 || ($offset < $this->selectOffsetAlg1 && 0 < $nrows && $nrows < 1000)) { + if ($nrows > 0) { + if ($offset > 0) { + $nrows += $offset; + } + //$inputarr['adodb_rownum'] = $nrows; + if ($this->databaseType == 'oci8po') { + $sql = "select * from (".$sql.") where rownum <= ?"; + } else { + $sql = "select * from (".$sql.") where rownum <= :adodb_offset"; + } + $inputarr['adodb_offset'] = $nrows; + $nrows = -1; + } + // note that $nrows = 0 still has to work ==> no rows returned + + $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $rs; + + } else { + // Algorithm by Tomas V V Cox, from PEAR DB oci8.php + + // Let Oracle return the name of the columns + $q_fields = "SELECT * FROM (".$sql.") WHERE NULL = NULL"; + + if (! $stmt_arr = $this->Prepare($q_fields)) { + return false; + } + $stmt = $stmt_arr[1]; + + if (is_array($inputarr)) { + foreach($inputarr as $k => $v) { + if (is_array($v)) { + // suggested by g.giunta@libero. + if (sizeof($v) == 2) { + oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]); + } + else { + oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); + } + } else { + $len = -1; + if ($v === ' ') { + $len = 1; + } + if (isset($bindarr)) { // is prepared sql, so no need to oci_bind_by_name again + $bindarr[$k] = $v; + } else { // dynamic sql, so rebind every time + oci_bind_by_name($stmt,":$k",$inputarr[$k],$len); + } + } + } + } + + if (!oci_execute($stmt, OCI_DEFAULT)) { + oci_free_statement($stmt); + return false; + } + + $ncols = oci_num_fields($stmt); + for ( $i = 1; $i <= $ncols; $i++ ) { + $cols[] = '"'.oci_field_name($stmt, $i).'"'; + } + $result = false; + + oci_free_statement($stmt); + $fields = implode(',', $cols); + if ($nrows <= 0) { + $nrows = 999999999999; + } + else { + $nrows += $offset; + } + $offset += 1; // in Oracle rownum starts at 1 + + if ($this->databaseType == 'oci8po') { + $sql = "SELECT $hint $fields FROM". + "(SELECT rownum as adodb_rownum, $fields FROM". + " ($sql) WHERE rownum <= ?". + ") WHERE adodb_rownum >= ?"; + } else { + $sql = "SELECT $hint $fields FROM". + "(SELECT rownum as adodb_rownum, $fields FROM". + " ($sql) WHERE rownum <= :adodb_nrows". + ") WHERE adodb_rownum >= :adodb_offset"; + } + $inputarr['adodb_nrows'] = $nrows; + $inputarr['adodb_offset'] = $offset; + + if ($secs2cache > 0) { + $rs = $this->CacheExecute($secs2cache, $sql,$inputarr); + } + else $rs = $this->Execute($sql,$inputarr); + return $rs; + } + } + + /** + * Usage: + * Store BLOBs and CLOBs + * + * Example: to store $var in a blob + * $conn->Execute('insert into TABLE (id,ablob) values(12,empty_blob())'); + * $conn->UpdateBlob('TABLE', 'ablob', $varHoldingBlob, 'ID=12', 'BLOB'); + * + * $blobtype supports 'BLOB' and 'CLOB', but you need to change to 'empty_clob()'. + * + * to get length of LOB: + * select DBMS_LOB.GETLENGTH(ablob) from TABLE + * + * If you are using CURSOR_SHARING = force, it appears this will case a segfault + * under oracle 8.1.7.0. Run: + * $db->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT'); + * before UpdateBlob() then... + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + + //if (strlen($val) < 4000) return $this->Execute("UPDATE $table SET $column=:blob WHERE $where",array('blob'=>$val)) != false; + + switch(strtoupper($blobtype)) { + default: ADOConnection::outp("UpdateBlob: Unknown blobtype=$blobtype"); return false; + case 'BLOB': $type = OCI_B_BLOB; break; + case 'CLOB': $type = OCI_B_CLOB; break; + } + + if ($this->databaseType == 'oci8po') + $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?"; + else + $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob"; + + $desc = oci_new_descriptor($this->_connectionID, OCI_D_LOB); + $arr['blob'] = array($desc,-1,$type); + if ($this->session_sharing_force_blob) { + $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT'); + } + $commit = $this->autoCommit; + if ($commit) { + $this->BeginTrans(); + } + $rs = $this->_Execute($sql,$arr); + if ($rez = !empty($rs)) { + $desc->save($val); + } + $desc->free(); + if ($commit) { + $this->CommitTrans(); + } + if ($this->session_sharing_force_blob) { + $this->Execute('ALTER SESSION SET CURSOR_SHARING=FORCE'); + } + + if ($rez) { + $rs->Close(); + } + return $rez; + } + + /** + * Usage: store file pointed to by $val in a blob + */ + function UpdateBlobFile($table,$column,$val,$where,$blobtype='BLOB') + { + switch(strtoupper($blobtype)) { + default: ADOConnection::outp( "UpdateBlob: Unknown blobtype=$blobtype"); return false; + case 'BLOB': $type = OCI_B_BLOB; break; + case 'CLOB': $type = OCI_B_CLOB; break; + } + + if ($this->databaseType == 'oci8po') + $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?"; + else + $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob"; + + $desc = oci_new_descriptor($this->_connectionID, OCI_D_LOB); + $arr['blob'] = array($desc,-1,$type); + + $this->BeginTrans(); + $rs = ADODB_oci8::Execute($sql,$arr); + if ($rez = !empty($rs)) { + $desc->savefile($val); + } + $desc->free(); + $this->CommitTrans(); + + if ($rez) { + $rs->Close(); + } + return $rez; + } + + /** + * Execute SQL + * + * @param sql SQL statement to execute, or possibly an array holding prepared statement ($sql[0] will hold sql text) + * @param [inputarr] holds the input data to bind to. Null elements will be set to null. + * @return RecordSet or false + */ + function Execute($sql,$inputarr=false) + { + if ($this->fnExecute) { + $fn = $this->fnExecute; + $ret = $fn($this,$sql,$inputarr); + if (isset($ret)) { + return $ret; + } + } + if ($inputarr !== false) { + if (!is_array($inputarr)) { + $inputarr = array($inputarr); + } + + $element0 = reset($inputarr); + $array2d = $this->bulkBind && is_array($element0) && !is_object(reset($element0)); + + # see http://phplens.com/lens/lensforum/msgs.php?id=18786 + if ($array2d || !$this->_bindInputArray) { + + # is_object check because oci8 descriptors can be passed in + if ($array2d && $this->_bindInputArray) { + if (is_string($sql)) { + $stmt = $this->Prepare($sql); + } else { + $stmt = $sql; + } + + foreach($inputarr as $arr) { + $ret = $this->_Execute($stmt,$arr); + if (!$ret) { + return $ret; + } + } + return $ret; + } else { + $sqlarr = explode(':', $sql); + $sql = ''; + $lastnomatch = -2; + #var_dump($sqlarr);echo "
";var_dump($inputarr);echo"
"; + foreach($sqlarr as $k => $str) { + if ($k == 0) { + $sql = $str; + continue; + } + // we need $lastnomatch because of the following datetime, + // eg. '10:10:01', which causes code to think that there is bind param :10 and :1 + $ok = preg_match('/^([0-9]*)/', $str, $arr); + + if (!$ok) { + $sql .= $str; + } else { + $at = $arr[1]; + if (isset($inputarr[$at]) || is_null($inputarr[$at])) { + if ((strlen($at) == strlen($str) && $k < sizeof($arr)-1)) { + $sql .= ':'.$str; + $lastnomatch = $k; + } else if ($lastnomatch == $k-1) { + $sql .= ':'.$str; + } else { + if (is_null($inputarr[$at])) { + $sql .= 'null'; + } + else { + $sql .= $this->qstr($inputarr[$at]); + } + $sql .= substr($str, strlen($at)); + } + } else { + $sql .= ':'.$str; + } + } + } + $inputarr = false; + } + } + $ret = $this->_Execute($sql,$inputarr); + + } else { + $ret = $this->_Execute($sql,false); + } + + return $ret; + } + + /* + * Example of usage: + * $stmt = $this->Prepare('insert into emp (empno, ename) values (:empno, :ename)'); + */ + function Prepare($sql,$cursor=false) + { + static $BINDNUM = 0; + + $stmt = oci_parse($this->_connectionID,$sql); + + if (!$stmt) { + $this->_errorMsg = false; + $this->_errorCode = false; + $arr = @oci_error($this->_connectionID); + if ($arr === false) { + return false; + } + + $this->_errorMsg = $arr['message']; + $this->_errorCode = $arr['code']; + return false; + } + + $BINDNUM += 1; + + $sttype = @oci_statement_type($stmt); + if ($sttype == 'BEGIN' || $sttype == 'DECLARE') { + return array($sql,$stmt,0,$BINDNUM, ($cursor) ? oci_new_cursor($this->_connectionID) : false); + } + return array($sql,$stmt,0,$BINDNUM); + } + + /* + Call an oracle stored procedure and returns a cursor variable as a recordset. + Concept by Robert Tuttle robert@ud.com + + Example: + Note: we return a cursor variable in :RS2 + $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS2); END;",'RS2'); + + $rs = $db->ExecuteCursor( + "BEGIN :RS2 = adodb.getdata(:VAR1); END;", + 'RS2', + array('VAR1' => 'Mr Bean')); + + */ + function ExecuteCursor($sql,$cursorName='rs',$params=false) + { + if (is_array($sql)) { + $stmt = $sql; + } + else $stmt = ADODB_oci8::Prepare($sql,true); # true to allocate oci_new_cursor + + if (is_array($stmt) && sizeof($stmt) >= 5) { + $hasref = true; + $ignoreCur = false; + $this->Parameter($stmt, $ignoreCur, $cursorName, false, -1, OCI_B_CURSOR); + if ($params) { + foreach($params as $k => $v) { + $this->Parameter($stmt,$params[$k], $k); + } + } + } else + $hasref = false; + + $rs = $this->Execute($stmt); + if ($rs) { + if ($rs->databaseType == 'array') { + oci_free_cursor($stmt[4]); + } + elseif ($hasref) { + $rs->_refcursor = $stmt[4]; + } + } + return $rs; + } + + /** + * Bind a variable -- very, very fast for executing repeated statements in oracle. + * + * Better than using + * for ($i = 0; $i < $max; $i++) { + * $p1 = ?; $p2 = ?; $p3 = ?; + * $this->Execute("insert into table (col0, col1, col2) values (:0, :1, :2)", array($p1,$p2,$p3)); + * } + * + * Usage: + * $stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)"); + * $DB->Bind($stmt, $p1); + * $DB->Bind($stmt, $p2); + * $DB->Bind($stmt, $p3); + * for ($i = 0; $i < $max; $i++) { + * $p1 = ?; $p2 = ?; $p3 = ?; + * $DB->Execute($stmt); + * } + * + * Some timings to insert 1000 records, test table has 3 cols, and 1 index. + * - Time 0.6081s (1644.60 inserts/sec) with direct oci_parse/oci_execute + * - Time 0.6341s (1577.16 inserts/sec) with ADOdb Prepare/Bind/Execute + * - Time 1.5533s ( 643.77 inserts/sec) with pure SQL using Execute + * + * Now if PHP only had batch/bulk updating like Java or PL/SQL... + * + * Note that the order of parameters differs from oci_bind_by_name, + * because we default the names to :0, :1, :2 + */ + function Bind(&$stmt,&$var,$size=4000,$type=false,$name=false,$isOutput=false) + { + + if (!is_array($stmt)) { + return false; + } + + if (($type == OCI_B_CURSOR) && sizeof($stmt) >= 5) { + return oci_bind_by_name($stmt[1],":".$name,$stmt[4],$size,$type); + } + + if ($name == false) { + if ($type !== false) { + $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size,$type); + } + else { + $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size); // +1 byte for null terminator + } + $stmt[2] += 1; + } else if (oci_lob_desc($type)) { + if ($this->debug) { + ADOConnection::outp("Bind: name = $name"); + } + //we have to create a new Descriptor here + $numlob = count($this->_refLOBs); + $this->_refLOBs[$numlob]['LOB'] = oci_new_descriptor($this->_connectionID, oci_lob_desc($type)); + $this->_refLOBs[$numlob]['TYPE'] = $isOutput; + + $tmp = $this->_refLOBs[$numlob]['LOB']; + $rez = oci_bind_by_name($stmt[1], ":".$name, $tmp, -1, $type); + if ($this->debug) { + ADOConnection::outp("Bind: descriptor has been allocated, var (".$name.") binded"); + } + + // if type is input then write data to lob now + if ($isOutput == false) { + $var = $this->BlobEncode($var); + $tmp->WriteTemporary($var); + $this->_refLOBs[$numlob]['VAR'] = &$var; + if ($this->debug) { + ADOConnection::outp("Bind: LOB has been written to temp"); + } + } else { + $this->_refLOBs[$numlob]['VAR'] = &$var; + } + $rez = $tmp; + } else { + if ($this->debug) + ADOConnection::outp("Bind: name = $name"); + + if ($type !== false) { + $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size,$type); + } + else { + $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size); // +1 byte for null terminator + } + } + + return $rez; + } + + function Param($name,$type='C') + { + return ':'.$name; + } + + /** + * Usage: + * $stmt = $db->Prepare('select * from table where id =:myid and group=:group'); + * $db->Parameter($stmt,$id,'myid'); + * $db->Parameter($stmt,$group,'group'); + * $db->Execute($stmt); + * + * @param $stmt Statement returned by Prepare() or PrepareSP(). + * @param $var PHP variable to bind to + * @param $name Name of stored procedure variable name to bind to. + * @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. + * @param [$maxLen] Holds an maximum length of the variable. + * @param [$type] The data type of $var. Legal values depend on driver. + * + * @link http://php.net/oci_bind_by_name + */ + function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) + { + if ($this->debug) { + $prefix = ($isOutput) ? 'Out' : 'In'; + $ztype = (empty($type)) ? 'false' : $type; + ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);"); + } + return $this->Bind($stmt,$var,$maxLen,$type,$name,$isOutput); + } + + /** + * returns query ID if successful, otherwise false + * this version supports: + * + * 1. $db->execute('select * from table'); + * + * 2. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)'); + * $db->execute($prepared_statement, array(1,2,3)); + * + * 3. $db->execute('insert into table (a,b,c) values (:a,:b,:c)',array('a'=>1,'b'=>2,'c'=>3)); + * + * 4. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)'); + * $db->bind($stmt,1); $db->bind($stmt,2); $db->bind($stmt,3); + * $db->execute($stmt); + */ + function _query($sql,$inputarr=false) + { + if (is_array($sql)) { // is prepared sql + $stmt = $sql[1]; + + // we try to bind to permanent array, so that oci_bind_by_name is persistent + // and carried out once only - note that max array element size is 4000 chars + if (is_array($inputarr)) { + $bindpos = $sql[3]; + if (isset($this->_bind[$bindpos])) { + // all tied up already + $bindarr = $this->_bind[$bindpos]; + } else { + // one statement to bind them all + $bindarr = array(); + foreach($inputarr as $k => $v) { + $bindarr[$k] = $v; + oci_bind_by_name($stmt,":$k",$bindarr[$k],is_string($v) && strlen($v)>4000 ? -1 : 4000); + } + $this->_bind[$bindpos] = $bindarr; + } + } + } else { + $stmt=oci_parse($this->_connectionID,$sql); + } + + $this->_stmt = $stmt; + if (!$stmt) { + return false; + } + + if (defined('ADODB_PREFETCH_ROWS')) { + @oci_set_prefetch($stmt,ADODB_PREFETCH_ROWS); + } + + if (is_array($inputarr)) { + foreach($inputarr as $k => $v) { + if (is_array($v)) { + // suggested by g.giunta@libero. + if (sizeof($v) == 2) { + oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]); + } + else { + oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); + } + + if ($this->debug==99) { + if (is_object($v[0])) { + echo "name=:$k",' len='.$v[1],' type='.$v[2],'
'; + } + else { + echo "name=:$k",' var='.$inputarr[$k][0],' len='.$v[1],' type='.$v[2],'
'; + } + + } + } else { + $len = -1; + if ($v === ' ') { + $len = 1; + } + if (isset($bindarr)) { // is prepared sql, so no need to oci_bind_by_name again + $bindarr[$k] = $v; + } else { // dynamic sql, so rebind every time + oci_bind_by_name($stmt,":$k",$inputarr[$k],$len); + } + } + } + } + + $this->_errorMsg = false; + $this->_errorCode = false; + if (oci_execute($stmt,$this->_commit)) { + + if (count($this -> _refLOBs) > 0) { + + foreach ($this -> _refLOBs as $key => $value) { + if ($this -> _refLOBs[$key]['TYPE'] == true) { + $tmp = $this -> _refLOBs[$key]['LOB'] -> load(); + if ($this -> debug) { + ADOConnection::outp("OUT LOB: LOB has been loaded.
"); + } + //$_GLOBALS[$this -> _refLOBs[$key]['VAR']] = $tmp; + $this -> _refLOBs[$key]['VAR'] = $tmp; + } else { + $this->_refLOBs[$key]['LOB']->save($this->_refLOBs[$key]['VAR']); + $this -> _refLOBs[$key]['LOB']->free(); + unset($this -> _refLOBs[$key]); + if ($this->debug) { + ADOConnection::outp("IN LOB: LOB has been saved.
"); + } + } + } + } + + switch (@oci_statement_type($stmt)) { + case "SELECT": + return $stmt; + + case 'DECLARE': + case "BEGIN": + if (is_array($sql) && !empty($sql[4])) { + $cursor = $sql[4]; + if (is_resource($cursor)) { + $ok = oci_execute($cursor); + return $cursor; + } + return $stmt; + } else { + if (is_resource($stmt)) { + oci_free_statement($stmt); + return true; + } + return $stmt; + } + break; + default : + + return true; + } + } + return false; + } + + // From Oracle Whitepaper: PHP Scalability and High Availability + function IsConnectionError($err) + { + switch($err) { + case 378: /* buffer pool param incorrect */ + case 602: /* core dump */ + case 603: /* fatal error */ + case 609: /* attach failed */ + case 1012: /* not logged in */ + case 1033: /* init or shutdown in progress */ + case 1043: /* Oracle not available */ + case 1089: /* immediate shutdown in progress */ + case 1090: /* shutdown in progress */ + case 1092: /* instance terminated */ + case 3113: /* disconnect */ + case 3114: /* not connected */ + case 3122: /* closing window */ + case 3135: /* lost contact */ + case 12153: /* TNS: not connected */ + case 27146: /* fatal or instance terminated */ + case 28511: /* Lost RPC */ + return true; + } + return false; + } + + // returns true or false + function _close() + { + if (!$this->_connectionID) { + return; + } + + + if (!$this->autoCommit) { + oci_rollback($this->_connectionID); + } + if (count($this->_refLOBs) > 0) { + foreach ($this ->_refLOBs as $key => $value) { + $this->_refLOBs[$key]['LOB']->free(); + unset($this->_refLOBs[$key]); + } + } + oci_close($this->_connectionID); + + $this->_stmt = false; + $this->_connectionID = false; + } + + function MetaPrimaryKeys($table, $owner=false,$internalKey=false) + { + if ($internalKey) { + return array('ROWID'); + } + + // tested with oracle 8.1.7 + $table = strtoupper($table); + if ($owner) { + $owner_clause = "AND ((a.OWNER = b.OWNER) AND (a.OWNER = UPPER('$owner')))"; + $ptab = 'ALL_'; + } else { + $owner_clause = ''; + $ptab = 'USER_'; + } + $sql = " +SELECT /*+ RULE */ distinct b.column_name + FROM {$ptab}CONSTRAINTS a + , {$ptab}CONS_COLUMNS b + WHERE ( UPPER(b.table_name) = ('$table')) + AND (UPPER(a.table_name) = ('$table') and a.constraint_type = 'P') + $owner_clause + AND (a.constraint_name = b.constraint_name)"; + + $rs = $this->Execute($sql); + if ($rs && !$rs->EOF) { + $arr = $rs->GetArray(); + $a = array(); + foreach($arr as $v) { + $a[] = reset($v); + } + return $a; + } + else return false; + } + + /** + * returns assoc array where keys are tables, and values are foreign keys + * + * @param str $table + * @param str $owner [optional][default=NULL] + * @param bool $upper [optional][discarded] + * @return mixed[] Array of foreign key information + * + * @link http://gis.mit.edu/classes/11.521/sqlnotes/referential_integrity.html + */ + function MetaForeignKeys($table, $owner=false, $upper=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $table = $this->qstr(strtoupper($table)); + if (!$owner) { + $owner = $this->user; + $tabp = 'user_'; + } else + $tabp = 'all_'; + + $owner = ' and owner='.$this->qstr(strtoupper($owner)); + + $sql = +"select constraint_name,r_owner,r_constraint_name + from {$tabp}constraints + where constraint_type = 'R' and table_name = $table $owner"; + + $constraints = $this->GetArray($sql); + $arr = false; + foreach($constraints as $constr) { + $cons = $this->qstr($constr[0]); + $rowner = $this->qstr($constr[1]); + $rcons = $this->qstr($constr[2]); + $cols = $this->GetArray("select column_name from {$tabp}cons_columns where constraint_name=$cons $owner order by position"); + $tabcol = $this->GetArray("select table_name,column_name from {$tabp}cons_columns where owner=$rowner and constraint_name=$rcons order by position"); + + if ($cols && $tabcol) + for ($i=0, $max=sizeof($cols); $i < $max; $i++) { + $arr[$tabcol[$i][0]] = $cols[$i][0].'='.$tabcol[$i][1]; + } + } + $ADODB_FETCH_MODE = $save; + + return $arr; + } + + + function CharMax() + { + return 4000; + } + + function TextMax() + { + return 4000; + } + + /** + * Quotes a string. + * An example is $db->qstr("Don't bother",magic_quotes_runtime()); + * + * @param string $s the string to quote + * @param bool $magic_quotes if $s is GET/POST var, set to get_magic_quotes_gpc(). + * This undoes the stupidity of magic quotes for GPC. + * + * @return string quoted string to be sent back to database + */ + function qstr($s,$magic_quotes=false) + { + //$nofixquotes=false; + + if ($this->noNullStrings && strlen($s)==0) { + $s = ' '; + } + if (!$magic_quotes) { + if ($this->replaceQuote[0] == '\\'){ + $s = str_replace('\\','\\\\',$s); + } + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " unless sybase is on + if (!ini_get('magic_quotes_sybase')) { + $s = str_replace('\\"','"',$s); + $s = str_replace('\\\\','\\',$s); + return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; + } else { + return "'".$s."'"; + } + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_oci8 extends ADORecordSet { + + var $databaseType = 'oci8'; + var $bind=false; + var $_fieldobjs; + + function __construct($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch ($mode) { + case ADODB_FETCH_ASSOC: + $this->fetchMode = OCI_ASSOC; + break; + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + $this->fetchMode = OCI_NUM + OCI_ASSOC; + break; + case ADODB_FETCH_NUM: + default: + $this->fetchMode = OCI_NUM; + break; + } + $this->fetchMode += OCI_RETURN_NULLS + OCI_RETURN_LOBS; + $this->adodbFetchMode = $mode; + $this->_queryID = $queryID; + } + + + function Init() + { + if ($this->_inited) { + return; + } + + $this->_inited = true; + if ($this->_queryID) { + + $this->_currentRow = 0; + @$this->_initrs(); + if ($this->_numOfFields) { + $this->EOF = !$this->_fetch(); + } + else $this->EOF = true; + + /* + // based on idea by Gaetano Giunta to detect unusual oracle errors + // see http://phplens.com/lens/lensforum/msgs.php?id=6771 + $err = oci_error($this->_queryID); + if ($err && $this->connection->debug) { + ADOConnection::outp($err); + } + */ + + if (!is_array($this->fields)) { + $this->_numOfRows = 0; + $this->fields = array(); + } + } else { + $this->fields = array(); + $this->_numOfRows = 0; + $this->_numOfFields = 0; + $this->EOF = true; + } + } + + function _initrs() + { + $this->_numOfRows = -1; + $this->_numOfFields = oci_num_fields($this->_queryID); + if ($this->_numOfFields>0) { + $this->_fieldobjs = array(); + $max = $this->_numOfFields; + for ($i=0;$i<$max; $i++) $this->_fieldobjs[] = $this->_FetchField($i); + } + } + + /** + * Get column information in the Recordset object. + * fetchField() can be used in order to obtain information about fields + * in a certain query result. If the field offset isn't specified, the next + * field that wasn't yet retrieved by fetchField() is retrieved + * + * @return object containing field information + */ + function _FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $fieldOffset += 1; + $fld->name =oci_field_name($this->_queryID, $fieldOffset); + if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER) { + $fld->name = strtolower($fld->name); + } + $fld->type = oci_field_type($this->_queryID, $fieldOffset); + $fld->max_length = oci_field_size($this->_queryID, $fieldOffset); + + switch($fld->type) { + case 'NUMBER': + $p = oci_field_precision($this->_queryID, $fieldOffset); + $sc = oci_field_scale($this->_queryID, $fieldOffset); + if ($p != 0 && $sc == 0) { + $fld->type = 'INT'; + } + $fld->scale = $p; + break; + + case 'CLOB': + case 'NCLOB': + case 'BLOB': + $fld->max_length = -1; + break; + } + return $fld; + } + + /* For some reason, oci_field_name fails when called after _initrs() so we cache it */ + function FetchField($fieldOffset = -1) + { + return $this->_fieldobjs[$fieldOffset]; + } + + + function MoveNext() + { + if ($this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) { + $this->_currentRow += 1; + $this->_updatefields(); + return true; + } + if (!$this->EOF) { + $this->_currentRow += 1; + $this->EOF = true; + } + return false; + } + + // Optimize SelectLimit() by using oci_fetch() + function GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $arr = $this->GetArray($nrows); + return $arr; + } + $arr = array(); + for ($i=1; $i < $offset; $i++) { + if (!@oci_fetch($this->_queryID)) { + return $arr; + } + } + + if (!$this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) { + return $arr; + } + $this->_updatefields(); + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + // Use associative array to get fields array + function Fields($colname) + { + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _seek($row) + { + return false; + } + + function _fetch() + { + $this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode); + $this->_updatefields(); + + return $this->fields; + } + + /** + * close() only needs to be called if you are worried about using too much + * memory while your script is running. All associated result memory for the + * specified result identifier will automatically be freed. + */ + function _close() + { + if ($this->connection->_stmt === $this->_queryID) { + $this->connection->_stmt = false; + } + if (!empty($this->_refcursor)) { + oci_free_cursor($this->_refcursor); + $this->_refcursor = false; + } + @oci_free_statement($this->_queryID); + $this->_queryID = false; + } + + /** + * not the fastest implementation - quick and dirty - jlim + * for best performance, use the actual $rs->MetaType(). + * + * @param mixed $t + * @param int $len [optional] Length of blobsize + * @param bool $fieldobj [optional][discarded] + * @return str The metatype of the field + */ + function MetaType($t, $len=-1, $fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + switch (strtoupper($t)) { + case 'VARCHAR': + case 'VARCHAR2': + case 'CHAR': + case 'VARBINARY': + case 'BINARY': + case 'NCHAR': + case 'NVARCHAR': + case 'NVARCHAR2': + if ($len <= $this->blobSize) { + return 'C'; + } + + case 'NCLOB': + case 'LONG': + case 'LONG VARCHAR': + case 'CLOB': + return 'X'; + + case 'LONG RAW': + case 'LONG VARBINARY': + case 'BLOB': + return 'B'; + + case 'DATE': + return ($this->connection->datetime) ? 'T' : 'D'; + + + case 'TIMESTAMP': return 'T'; + + case 'INT': + case 'SMALLINT': + case 'INTEGER': + return 'I'; + + default: + return 'N'; + } + } +} + +class ADORecordSet_ext_oci8 extends ADORecordSet_oci8 { + function __construct($queryID,$mode=false) + { + parent::__construct($queryID, $mode); + } + + function MoveNext() + { + return adodb_movenext($this); + } +} diff --git a/ehcp/adodb5/drivers/adodb-oci805.inc.php b/ehcp/adodb5/drivers/adodb-oci805.inc.php new file mode 100644 index 0000000..867c9e4 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-oci805.inc.php @@ -0,0 +1,55 @@ + 0) { + if ($offset > 0) $nrows += $offset; + $sql = "select * from ($sql) where rownum <= $nrows"; + $nrows = -1; + } + */ + + return ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + } +} + +class ADORecordset_oci805 extends ADORecordset_oci8 { + var $databaseType = "oci805"; + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-oci8po.inc.php b/ehcp/adodb5/drivers/adodb-oci8po.inc.php new file mode 100644 index 0000000..96a67db --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-oci8po.inc.php @@ -0,0 +1,204 @@ + + + Should some emulation of RecordCount() be implemented? + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +include_once(ADODB_DIR.'/drivers/adodb-oci8.inc.php'); + +class ADODB_oci8po extends ADODB_oci8 { + var $databaseType = 'oci8po'; + var $dataProvider = 'oci8'; + var $metaColumnsSQL = "select lower(cname),coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net + var $metaTablesSQL = "select lower(table_name),table_type from cat where table_type in ('TABLE','VIEW')"; + + function __construct() + { + $this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200; + # oci8po does not support adodb extension: adodb_movenext() + } + + function Param($name,$type='C') + { + return '?'; + } + + function Prepare($sql,$cursor=false) + { + $sqlarr = explode('?',$sql); + $sql = $sqlarr[0]; + for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) { + $sql .= ':'.($i-1) . $sqlarr[$i]; + } + return ADODB_oci8::Prepare($sql,$cursor); + } + + function Execute($sql,$inputarr=false) + { + return ADOConnection::Execute($sql,$inputarr); + } + + // emulate handling of parameters ? ?, replacing with :bind0 :bind1 + function _query($sql,$inputarr=false) + { + if (is_array($inputarr)) { + $i = 0; + if (is_array($sql)) { + foreach($inputarr as $v) { + $arr['bind'.$i++] = $v; + } + } else { + // Need to identify if the ? is inside a quoted string, and if + // so not use it as a bind variable + preg_match_all('/".*\??"|\'.*\?.*?\'/', $sql, $matches); + foreach($matches[0] as $qmMatch){ + $qmReplace = str_replace('?', '-QUESTIONMARK-', $qmMatch); + $sql = str_replace($qmMatch, $qmReplace, $sql); + } + + $sqlarr = explode('?',$sql); + $sql = $sqlarr[0]; + + foreach($inputarr as $k => $v) { + $sql .= ":$k" . $sqlarr[++$i]; + } + + $sql = str_replace('-QUESTIONMARK-', '?', $sql); + } + } + return ADODB_oci8::_query($sql,$inputarr); + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_oci8po extends ADORecordset_oci8 { + + var $databaseType = 'oci8po'; + + function __construct($queryID,$mode=false) + { + parent::__construct($queryID,$mode); + } + + function Fields($colname) + { + if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname]; + + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + // lowercase field names... + function _FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $fieldOffset += 1; + $fld->name = OCIcolumnname($this->_queryID, $fieldOffset); + if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER) { + $fld->name = strtolower($fld->name); + } + $fld->type = OCIcolumntype($this->_queryID, $fieldOffset); + $fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset); + if ($fld->type == 'NUMBER') { + $sc = OCIColumnScale($this->_queryID, $fieldOffset); + if ($sc == 0) { + $fld->type = 'INT'; + } + } + return $fld; + } + + // 10% speedup to move MoveNext to child class + function MoveNext() + { + if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) { + global $ADODB_ANSI_PADDING_OFF; + $this->_currentRow++; + $this->_updatefields(); + + if (!empty($ADODB_ANSI_PADDING_OFF)) { + foreach($this->fields as $k => $v) { + if (is_string($v)) $this->fields[$k] = rtrim($v); + } + } + return true; + } + if (!$this->EOF) { + $this->EOF = true; + $this->_currentRow++; + } + return false; + } + + /* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */ + function GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $arr = $this->GetArray($nrows); + return $arr; + } + for ($i=1; $i < $offset; $i++) + if (!@OCIFetch($this->_queryID)) { + $arr = array(); + return $arr; + } + if (!@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) { + $arr = array(); + return $arr; + } + $this->_updatefields(); + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + function _fetch() + { + global $ADODB_ANSI_PADDING_OFF; + + $ret = @OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode); + if ($ret) { + $this->_updatefields(); + + if (!empty($ADODB_ANSI_PADDING_OFF)) { + foreach($this->fields as $k => $v) { + if (is_string($v)) $this->fields[$k] = rtrim($v); + } + } + } + return $ret; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-oci8quercus.inc.php b/ehcp/adodb5/drivers/adodb-oci8quercus.inc.php new file mode 100644 index 0000000..467e619 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-oci8quercus.inc.php @@ -0,0 +1,89 @@ + + + Should some emulation of RecordCount() be implemented? + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +include_once(ADODB_DIR.'/drivers/adodb-oci8.inc.php'); + +class ADODB_oci8quercus extends ADODB_oci8 { + var $databaseType = 'oci8quercus'; + var $dataProvider = 'oci8'; + + function __construct() + { + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_oci8quercus extends ADORecordset_oci8 { + + var $databaseType = 'oci8quercus'; + + function __construct($queryID,$mode=false) + { + parent::__construct($queryID,$mode); + } + + function _FetchField($fieldOffset = -1) + { + global $QUERCUS; + $fld = new ADOFieldObject; + + if (!empty($QUERCUS)) { + $fld->name = oci_field_name($this->_queryID, $fieldOffset); + $fld->type = oci_field_type($this->_queryID, $fieldOffset); + $fld->max_length = oci_field_size($this->_queryID, $fieldOffset); + + //if ($fld->name == 'VAL6_NUM_12_4') $fld->type = 'NUMBER'; + switch($fld->type) { + case 'string': $fld->type = 'VARCHAR'; break; + case 'real': $fld->type = 'NUMBER'; break; + } + } else { + $fieldOffset += 1; + $fld->name = oci_field_name($this->_queryID, $fieldOffset); + $fld->type = oci_field_type($this->_queryID, $fieldOffset); + $fld->max_length = oci_field_size($this->_queryID, $fieldOffset); + } + switch($fld->type) { + case 'NUMBER': + $p = oci_field_precision($this->_queryID, $fieldOffset); + $sc = oci_field_scale($this->_queryID, $fieldOffset); + if ($p != 0 && $sc == 0) $fld->type = 'INT'; + $fld->scale = $p; + break; + + case 'CLOB': + case 'NCLOB': + case 'BLOB': + $fld->max_length = -1; + break; + } + + return $fld; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-odbc.inc.php b/ehcp/adodb5/drivers/adodb-odbc.inc.php new file mode 100644 index 0000000..d90c428 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbc.inc.php @@ -0,0 +1,738 @@ +_haserrorfunctions = ADODB_PHPVER >= 0x4050; + $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; + } + + // returns true or false + function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('odbc_connect')) return null; + + if (!empty($argDatabasename) && stristr($argDSN, 'Database=') === false) { + $argDSN = trim($argDSN); + $endDSN = substr($argDSN, strlen($argDSN) - 1); + if ($endDSN != ';') $argDSN .= ';'; + $argDSN .= 'Database='.$argDatabasename; + } + + if (isset($php_errormsg)) $php_errormsg = ''; + if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword); + else $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,$this->curmode); + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + return $this->_connectionID != false; + } + + // returns true or false + function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + if (!function_exists('odbc_connect')) return null; + + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if ($this->debug && $argDatabasename) { + ADOConnection::outp("For odbc PConnect(), $argDatabasename is not used. Place dsn in 1st parameter."); + } + // print "dsn=$argDSN u=$argUsername p=$argPassword
"; flush(); + if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword); + else $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,$this->curmode); + + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + if ($this->_connectionID && $this->autoRollback) @odbc_rollback($this->_connectionID); + if (isset($this->connectStmt)) $this->Execute($this->connectStmt); + + return $this->_connectionID != false; + } + + + function ServerInfo() + { + + if (!empty($this->host) && ADODB_PHPVER >= 0x4300) { + $dsn = strtoupper($this->host); + $first = true; + $found = false; + + if (!function_exists('odbc_data_source')) return false; + + while(true) { + + $rez = @odbc_data_source($this->_connectionID, + $first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT); + $first = false; + if (!is_array($rez)) break; + if (strtoupper($rez['server']) == $dsn) { + $found = true; + break; + } + } + if (!$found) return ADOConnection::ServerInfo(); + if (!isset($rez['version'])) $rez['version'] = ''; + return $rez; + } else { + return ADOConnection::ServerInfo(); + } + } + + + function CreateSequence($seqname='adodbseq',$start=1) + { + if (empty($this->_genSeqSQL)) return false; + $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); + if (!$ok) return false; + $start -= 1; + return $this->Execute("insert into $seqname values($start)"); + } + + var $_dropSeqSQL = 'drop table %s'; + function DropSequence($seqname = 'adodbseq') + { + if (empty($this->_dropSeqSQL)) return false; + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + /* + This algorithm is not very efficient, but works even if table locking + is not available. + + Will return false if unable to generate an ID after $MAXLOOPS attempts. + */ + function GenID($seq='adodbseq',$start=1) + { + // if you have to modify the parameter below, your database is overloaded, + // or you need to implement generation of id's yourself! + $MAXLOOPS = 100; + //$this->debug=1; + while (--$MAXLOOPS>=0) { + $num = $this->GetOne("select id from $seq"); + if ($num === false) { + $this->Execute(sprintf($this->_genSeqSQL ,$seq)); + $start -= 1; + $num = '0'; + $ok = $this->Execute("insert into $seq values($start)"); + if (!$ok) return false; + } + $this->Execute("update $seq set id=id+1 where id=$num"); + + if ($this->affected_rows() > 0) { + $num += 1; + $this->genID = $num; + return $num; + } elseif ($this->affected_rows() == 0) { + // some drivers do not return a valid value => try with another method + $value = $this->GetOne("select id from $seq"); + if ($value == $num + 1) { + return $value; + } + } + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); + } + return false; + } + + + function ErrorMsg() + { + if ($this->_haserrorfunctions) { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (empty($this->_connectionID)) return @odbc_errormsg(); + return @odbc_errormsg($this->_connectionID); + } else return ADOConnection::ErrorMsg(); + } + + function ErrorNo() + { + + if ($this->_haserrorfunctions) { + if ($this->_errorCode !== false) { + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + return (strlen($this->_errorCode)<=2) ? 0 : $this->_errorCode; + } + + if (empty($this->_connectionID)) $e = @odbc_error(); + else $e = @odbc_error($this->_connectionID); + + // bug in 4.0.6, error number can be corrupted string (should be 6 digits) + // so we check and patch + if (strlen($e)<=2) return 0; + return $e; + } else return ADOConnection::ErrorNo(); + } + + + + function BeginTrans() + { + if (!$this->hasTransactions) return false; + if ($this->transOff) return true; + $this->transCnt += 1; + $this->_autocommit = false; + return odbc_autocommit($this->_connectionID,false); + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = odbc_commit($this->_connectionID); + odbc_autocommit($this->_connectionID,true); + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->_autocommit = true; + $ret = odbc_rollback($this->_connectionID); + odbc_autocommit($this->_connectionID,true); + return $ret; + } + + function MetaPrimaryKeys($table,$owner=false) + { + global $ADODB_FETCH_MODE; + + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = @odbc_primarykeys($this->_connectionID,'',$schema,$table); + + if (!$qid) { + $ADODB_FETCH_MODE = $savem; + return false; + } + $rs = new ADORecordSet_odbc($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return false; + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + + $arr = $rs->GetArray(); + $rs->Close(); + //print_r($arr); + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + if ($arr[$i][3]) $arr2[] = $arr[$i][3]; + } + return $arr2; + } + + + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = odbc_tables($this->_connectionID); + + $rs = new ADORecordSet_odbc($qid); + + $ADODB_FETCH_MODE = $savem; + if (!$rs) { + $false = false; + return $false; + } + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + + $arr = $rs->GetArray(); + //print_r($arr); + + $rs->Close(); + $arr2 = array(); + + if ($ttype) { + $isview = strncmp($ttype,'V',1) === 0; + } + for ($i=0; $i < sizeof($arr); $i++) { + if (!$arr[$i][2]) continue; + $type = $arr[$i][3]; + if ($ttype) { + if ($isview) { + if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2]; + } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2]; + } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2]; + } + return $arr2; + } + +/* +See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcdatetime_data_type_changes.asp +/ SQL data type codes / +#define SQL_UNKNOWN_TYPE 0 +#define SQL_CHAR 1 +#define SQL_NUMERIC 2 +#define SQL_DECIMAL 3 +#define SQL_INTEGER 4 +#define SQL_SMALLINT 5 +#define SQL_FLOAT 6 +#define SQL_REAL 7 +#define SQL_DOUBLE 8 +#if (ODBCVER >= 0x0300) +#define SQL_DATETIME 9 +#endif +#define SQL_VARCHAR 12 + + +/ One-parameter shortcuts for date/time data types / +#if (ODBCVER >= 0x0300) +#define SQL_TYPE_DATE 91 +#define SQL_TYPE_TIME 92 +#define SQL_TYPE_TIMESTAMP 93 + +#define SQL_UNICODE (-95) +#define SQL_UNICODE_VARCHAR (-96) +#define SQL_UNICODE_LONGVARCHAR (-97) +*/ + function ODBCTypes($t) + { + switch ((integer)$t) { + case 1: + case 12: + case 0: + case -95: + case -96: + return 'C'; + case -97: + case -1: //text + return 'X'; + case -4: //image + return 'B'; + + case 9: + case 91: + return 'D'; + + case 10: + case 11: + case 92: + case 93: + return 'T'; + + case 4: + case 5: + case -6: + return 'I'; + + case -11: // uniqidentifier + return 'R'; + case -7: //bit + return 'L'; + + default: + return 'N'; + } + } + + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $false = false; + if ($this->uCaseTables) $table = strtoupper($table); + $schema = ''; + $this->_findschema($table,$schema); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + /*if (false) { // after testing, confirmed that the following does not work becoz of a bug + $qid2 = odbc_tables($this->_connectionID); + $rs = new ADORecordSet_odbc($qid2); + $ADODB_FETCH_MODE = $savem; + if (!$rs) return false; + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + $rs->_fetch(); + + while (!$rs->EOF) { + if ($table == strtoupper($rs->fields[2])) { + $q = $rs->fields[0]; + $o = $rs->fields[1]; + break; + } + $rs->MoveNext(); + } + $rs->Close(); + + $qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%'); + } */ + + switch ($this->databaseType) { + case 'access': + case 'vfp': + $qid = odbc_columns($this->_connectionID);#,'%','',strtoupper($table),'%'); + break; + + + case 'db2': + $colname = "%"; + $qid = odbc_columns($this->_connectionID, "", $schema, $table, $colname); + break; + + default: + $qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%'); + if (empty($qid)) $qid = odbc_columns($this->_connectionID); + break; + } + if (empty($qid)) return $false; + + $rs = new ADORecordSet_odbc($qid); + $ADODB_FETCH_MODE = $savem; + + if (!$rs) return $false; + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + $rs->_fetch(); + + $retarr = array(); + + /* + $rs->fields indices + 0 TABLE_QUALIFIER + 1 TABLE_SCHEM + 2 TABLE_NAME + 3 COLUMN_NAME + 4 DATA_TYPE + 5 TYPE_NAME + 6 PRECISION + 7 LENGTH + 8 SCALE + 9 RADIX + 10 NULLABLE + 11 REMARKS + */ + while (!$rs->EOF) { + // adodb_pr($rs->fields); + if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[3]; + $fld->type = $this->ODBCTypes($rs->fields[4]); + + // ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp + // access uses precision to store length for char/varchar + if ($fld->type == 'C' or $fld->type == 'X') { + if ($this->databaseType == 'access') + $fld->max_length = $rs->fields[6]; + else if ($rs->fields[4] <= -95) // UNICODE + $fld->max_length = $rs->fields[7]/2; + else + $fld->max_length = $rs->fields[7]; + } else + $fld->max_length = $rs->fields[7]; + $fld->not_null = !empty($rs->fields[10]); + $fld->scale = $rs->fields[8]; + $retarr[strtoupper($fld->name)] = $fld; + } else if (sizeof($retarr)>0) + break; + $rs->MoveNext(); + } + $rs->Close(); //-- crashes 4.03pl1 -- why? + + if (empty($retarr)) $retarr = false; + return $retarr; + } + + function Prepare($sql) + { + if (! $this->_bindInputArray) return $sql; // no binding + $stmt = odbc_prepare($this->_connectionID,$sql); + if (!$stmt) { + // we don't know whether odbc driver is parsing prepared stmts, so just return sql + return $sql; + } + return array($sql,$stmt,false); + } + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + GLOBAL $php_errormsg; + if (isset($php_errormsg)) $php_errormsg = ''; + $this->_error = ''; + + if ($inputarr) { + if (is_array($sql)) { + $stmtid = $sql[1]; + } else { + $stmtid = odbc_prepare($this->_connectionID,$sql); + + if ($stmtid == false) { + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + return false; + } + } + + if (! odbc_execute($stmtid,$inputarr)) { + //@odbc_free_result($stmtid); + if ($this->_haserrorfunctions) { + $this->_errorMsg = odbc_errormsg(); + $this->_errorCode = odbc_error(); + } + return false; + } + + } else if (is_array($sql)) { + $stmtid = $sql[1]; + if (!odbc_execute($stmtid)) { + //@odbc_free_result($stmtid); + if ($this->_haserrorfunctions) { + $this->_errorMsg = odbc_errormsg(); + $this->_errorCode = odbc_error(); + } + return false; + } + } else + $stmtid = odbc_exec($this->_connectionID,$sql); + + $this->_lastAffectedRows = 0; + if ($stmtid) { + if (@odbc_num_fields($stmtid) == 0) { + $this->_lastAffectedRows = odbc_num_rows($stmtid); + $stmtid = true; + } else { + $this->_lastAffectedRows = 0; + odbc_binmode($stmtid,$this->binmode); + odbc_longreadlen($stmtid,$this->maxblobsize); + } + + if ($this->_haserrorfunctions) { + $this->_errorMsg = ''; + $this->_errorCode = 0; + } else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + } else { + if ($this->_haserrorfunctions) { + $this->_errorMsg = odbc_errormsg(); + $this->_errorCode = odbc_error(); + } else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; + } + return $stmtid; + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; + } + + // returns true or false + function _close() + { + $ret = @odbc_close($this->_connectionID); + $this->_connectionID = false; + return $ret; + } + + function _affectedrows() + { + return $this->_lastAffectedRows; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_odbc extends ADORecordSet { + + var $bind = false; + var $databaseType = "odbc"; + var $dataProvider = "odbc"; + var $useFetchArray; + var $_has_stupid_odbc_fetch_api_change; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + + $this->_queryID = $id; + + // the following is required for mysql odbc driver in 4.3.1 -- why? + $this->EOF = false; + $this->_currentRow = -1; + //parent::__construct($id); + } + + + // returns the field object + function FetchField($fieldOffset = -1) + { + + $off=$fieldOffset+1; // offsets begin at 1 + + $o= new ADOFieldObject(); + $o->name = @odbc_field_name($this->_queryID,$off); + $o->type = @odbc_field_type($this->_queryID,$off); + $o->max_length = @odbc_field_len($this->_queryID,$off); + if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); + else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); + return $o; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + + function _initrs() + { + global $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS) ? @odbc_num_rows($this->_queryID) : -1; + $this->_numOfFields = @odbc_num_fields($this->_queryID); + // some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0 + if ($this->_numOfRows == 0) $this->_numOfRows = -1; + //$this->useFetchArray = $this->connection->useFetchArray; + $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; + } + + function _seek($row) + { + return false; + } + + // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated + function GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $rs = $this->GetArray($nrows); + return $rs; + } + $savem = $this->fetchMode; + $this->fetchMode = ADODB_FETCH_NUM; + $this->Move($offset); + $this->fetchMode = $savem; + + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + function MoveNext() + { + if ($this->_numOfRows != 0 && !$this->EOF) { + $this->_currentRow++; + if( $this->_fetch() ) { + return true; + } + } + $this->fields = false; + $this->EOF = true; + return false; + } + + function _fetch() + { + $this->fields = false; + if ($this->_has_stupid_odbc_fetch_api_change) + $rez = @odbc_fetch_into($this->_queryID,$this->fields); + else { + $row = 0; + $rez = @odbc_fetch_into($this->_queryID,$row,$this->fields); + } + if ($rez) { + if ($this->fetchMode & ADODB_FETCH_ASSOC) { + $this->fields = $this->GetRowAssoc(); + } + return true; + } + return false; + } + + function _close() + { + return @odbc_free_result($this->_queryID); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-odbc_db2.inc.php b/ehcp/adodb5/drivers/adodb-odbc_db2.inc.php new file mode 100644 index 0000000..119fa6b --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbc_db2.inc.php @@ -0,0 +1,369 @@ +curMode = SQL_CUR_USE_ODBC; +$db->Connect($dsn, $userid, $pwd); + + + +USING CLI INTERFACE +=================== + +I have had reports that the $host and $database params have to be reversed in +Connect() when using the CLI interface. From Halmai Csongor csongor.halmai#nexum.hu: + +> The symptom is that if I change the database engine from postgres or any other to DB2 then the following +> connection command becomes wrong despite being described this version to be correct in the docs. +> +> $connection_object->Connect( $DATABASE_HOST, $DATABASE_AUTH_USER_NAME, $DATABASE_AUTH_PASSWORD, $DATABASE_NAME ) +> +> In case of DB2 I had to swap the first and last arguments in order to connect properly. + + +System Error 5 +============== +IF you get a System Error 5 when trying to Connect/Load, it could be a permission problem. Give the user connecting +to DB2 full rights to the DB2 SQLLIB directory, and place the user in the DBUSERS group. +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +if (!defined('_ADODB_ODBC_LAYER')) { + include(ADODB_DIR."/drivers/adodb-odbc.inc.php"); +} +if (!defined('ADODB_ODBC_DB2')){ +define('ADODB_ODBC_DB2',1); + +class ADODB_ODBC_DB2 extends ADODB_odbc { + var $databaseType = "db2"; + var $concat_operator = '||'; + var $sysTime = 'CURRENT TIME'; + var $sysDate = 'CURRENT DATE'; + var $sysTimeStamp = 'CURRENT TIMESTAMP'; + // The complete string representation of a timestamp has the form + // yyyy-mm-dd-hh.mm.ss.nnnnnn. + var $fmtTimeStamp = "'Y-m-d-H.i.s'"; + var $ansiOuter = true; + var $identitySQL = 'values IDENTITY_VAL_LOCAL()'; + var $_bindInputArray = true; + var $hasInsertID = true; + var $rsPrefix = 'ADORecordset_odbc_'; + + function __construct() + { + if (strncmp(PHP_OS,'WIN',3) === 0) $this->curmode = SQL_CUR_USE_ODBC; + parent::__construct(); + } + + function IfNull( $field, $ifNull ) + { + return " COALESCE($field, $ifNull) "; // if DB2 UDB + } + + function ServerInfo() + { + //odbc_setoption($this->_connectionID,1,101 /*SQL_ATTR_ACCESS_MODE*/, 1 /*SQL_MODE_READ_ONLY*/); + $vers = $this->GetOne('select versionnumber from sysibm.sysversions'); + //odbc_setoption($this->_connectionID,1,101, 0 /*SQL_MODE_READ_WRITE*/); + return array('description'=>'DB2 ODBC driver', 'version'=>$vers); + } + + function _insertid() + { + return $this->GetOne($this->identitySQL); + } + + function RowLock($tables,$where,$col='1 as adodbignore') + { + if ($this->_autocommit) $this->BeginTrans(); + return $this->GetOne("select $col from $tables where $where for update"); + } + + function MetaTables($ttype=false,$showSchema=false, $qtable="%", $qschema="%") + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $qid = odbc_tables($this->_connectionID, "", $qschema, $qtable, ""); + + $rs = new ADORecordSet_odbc($qid); + + $ADODB_FETCH_MODE = $savem; + if (!$rs) { + $false = false; + return $false; + } + $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; + + $arr = $rs->GetArray(); + //print_r($arr); + + $rs->Close(); + $arr2 = array(); + + if ($ttype) { + $isview = strncmp($ttype,'V',1) === 0; + } + for ($i=0; $i < sizeof($arr); $i++) { + + if (!$arr[$i][2]) continue; + if (strncmp($arr[$i][1],'SYS',3) === 0) continue; + + $type = $arr[$i][3]; + + if ($showSchema) $arr[$i][2] = $arr[$i][1].'.'.$arr[$i][2]; + + if ($ttype) { + if ($isview) { + if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2]; + } else if (strncmp($type,'T',1) === 0) $arr2[] = $arr[$i][2]; + } else if (strncmp($type,'S',1) !== 0) $arr2[] = $arr[$i][2]; + } + return $arr2; + } + + function MetaIndexes ($table, $primary = FALSE, $owner=false) + { + // save old fetch mode + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + $false = false; + // get index details + $table = strtoupper($table); + $SQL="SELECT NAME, UNIQUERULE, COLNAMES FROM SYSIBM.SYSINDEXES WHERE TBNAME='$table'"; + if ($primary) + $SQL.= " AND UNIQUERULE='P'"; + $rs = $this->Execute($SQL); + if (!is_object($rs)) { + if (isset($savem)) + $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + return $false; + } + $indexes = array (); + // parse index data into array + while ($row = $rs->FetchRow()) { + $indexes[$row[0]] = array( + 'unique' => ($row[1] == 'U' || $row[1] == 'P'), + 'columns' => array() + ); + $cols = ltrim($row[2],'+'); + $indexes[$row[0]]['columns'] = explode('+', $cols); + } + if (isset($savem)) { + $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + } + return $indexes; + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + // use right() and replace() ? + if (!$col) $col = $this->sysDate; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '||'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "char(year($col))"; + break; + case 'M': + $s .= "substr(monthname($col),1,3)"; + break; + case 'm': + $s .= "right(digits(month($col)),2)"; + break; + case 'D': + case 'd': + $s .= "right(digits(day($col)),2)"; + break; + case 'H': + case 'h': + if ($col != $this->sysDate) $s .= "right(digits(hour($col)),2)"; + else $s .= "''"; + break; + case 'i': + case 'I': + if ($col != $this->sysDate) + $s .= "right(digits(minute($col)),2)"; + else $s .= "''"; + break; + case 'S': + case 's': + if ($col != $this->sysDate) + $s .= "right(digits(second($col)),2)"; + else $s .= "''"; + break; + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + } + } + return $s; + } + + + function SelectLimit($sql, $nrows = -1, $offset = -1, $inputArr = false, $secs2cache = 0) + { + $nrows = (integer) $nrows; + if ($offset <= 0) { + // could also use " OPTIMIZE FOR $nrows ROWS " + if ($nrows >= 0) $sql .= " FETCH FIRST $nrows ROWS ONLY "; + $rs = $this->Execute($sql,$inputArr); + } else { + if ($offset > 0 && $nrows < 0); + else { + $nrows += $offset; + $sql .= " FETCH FIRST $nrows ROWS ONLY "; + } + $rs = ADOConnection::SelectLimit($sql,-1,$offset,$inputArr); + } + + return $rs; + } + +}; + + +class ADORecordSet_odbc_db2 extends ADORecordSet_odbc { + + var $databaseType = "db2"; + + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + switch (strtoupper($t)) { + case 'VARCHAR': + case 'CHAR': + case 'CHARACTER': + case 'C': + if ($len <= $this->blobSize) return 'C'; + + case 'LONGCHAR': + case 'TEXT': + case 'CLOB': + case 'DBCLOB': // double-byte + case 'X': + return 'X'; + + case 'BLOB': + case 'GRAPHIC': + case 'VARGRAPHIC': + return 'B'; + + case 'DATE': + case 'D': + return 'D'; + + case 'TIME': + case 'TIMESTAMP': + case 'T': + return 'T'; + + //case 'BOOLEAN': + //case 'BIT': + // return 'L'; + + //case 'COUNTER': + // return 'R'; + + case 'INT': + case 'INTEGER': + case 'BIGINT': + case 'SMALLINT': + case 'I': + return 'I'; + + default: return 'N'; + } + } +} + +} //define diff --git a/ehcp/adodb5/drivers/adodb-odbc_mssql.inc.php b/ehcp/adodb5/drivers/adodb-odbc_mssql.inc.php new file mode 100644 index 0000000..9685b1a --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbc_mssql.inc.php @@ -0,0 +1,363 @@ + 'master'"; + var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE'))"; + var $metaColumnsSQL = # xtype==61 is datetime + "select c.name,t.name,c.length,c.isnullable, c.status, + (case when c.xusertype=61 then 0 else c.xprec end), + (case when c.xusertype=61 then 0 else c.xscale end) + from syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id where o.name='%s'"; + var $hasTop = 'top'; // support mssql/interbase SELECT TOP 10 * FROM TABLE + var $sysDate = 'GetDate()'; + var $sysTimeStamp = 'GetDate()'; + var $leftOuter = '*='; + var $rightOuter = '=*'; + var $substr = 'substring'; + var $length = 'len'; + var $ansiOuter = true; // for mssql7 or later + var $identitySQL = 'select SCOPE_IDENTITY()'; // 'select SCOPE_IDENTITY'; # for mssql 2000 + var $hasInsertID = true; + var $connectStmt = 'SET CONCAT_NULL_YIELDS_NULL OFF'; # When SET CONCAT_NULL_YIELDS_NULL is ON, + # concatenating a null value with a string yields a NULL result + + function __construct() + { + parent::__construct(); + //$this->curmode = SQL_CUR_USE_ODBC; + } + + // crashes php... + function ServerInfo() + { + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $row = $this->GetRow("execute sp_server_info 2"); + $ADODB_FETCH_MODE = $save; + if (!is_array($row)) return false; + $arr['description'] = $row[2]; + $arr['version'] = ADOConnection::_findvers($arr['description']); + return $arr; + } + + function IfNull( $field, $ifNull ) + { + return " ISNULL($field, $ifNull) "; // if MS SQL Server + } + + function _insertid() + { + // SCOPE_IDENTITY() + // Returns the last IDENTITY value inserted into an IDENTITY column in + // the same scope. A scope is a module -- a stored procedure, trigger, + // function, or batch. Thus, two statements are in the same scope if + // they are in the same stored procedure, function, or batch. + return $this->GetOne($this->identitySQL); + } + + + function MetaForeignKeys($table, $owner=false, $upper=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $table = $this->qstr(strtoupper($table)); + + $sql = +"select object_name(constid) as constraint_name, + col_name(fkeyid, fkey) as column_name, + object_name(rkeyid) as referenced_table_name, + col_name(rkeyid, rkey) as referenced_column_name +from sysforeignkeys +where upper(object_name(fkeyid)) = $table +order by constraint_name, referenced_table_name, keyno"; + + $constraints = $this->GetArray($sql); + + $ADODB_FETCH_MODE = $save; + + $arr = false; + foreach($constraints as $constr) { + //print_r($constr); + $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; + } + if (!$arr) return false; + + $arr2 = false; + + foreach($arr as $k => $v) { + foreach($v as $a => $b) { + if ($upper) $a = strtoupper($a); + $arr2[$a] = $b; + } + } + return $arr2; + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + if ($mask) {//$this->debug=1; + $save = $this->metaTablesSQL; + $mask = $this->qstr($mask); + $this->metaTablesSQL .= " AND name like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + function MetaColumns($table, $normalize=true) + { + + $this->_findschema($table,$schema); + if ($schema) { + $dbName = $this->database; + $this->SelectDB($schema); + } + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + + if ($schema) { + $this->SelectDB($dbName); + } + + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if (!is_object($rs)) { + $false = false; + return $false; + } + + $retarr = array(); + while (!$rs->EOF){ + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + + $fld->not_null = (!$rs->fields[3]); + $fld->auto_increment = ($rs->fields[4] == 128); // sys.syscolumns status field. 0x80 = 128 ref: http://msdn.microsoft.com/en-us/library/ms186816.aspx + + + if (isset($rs->fields[5]) && $rs->fields[5]) { + if ($rs->fields[5]>0) $fld->max_length = $rs->fields[5]; + $fld->scale = $rs->fields[6]; + if ($fld->scale>0) $fld->max_length += 1; + } else + $fld->max_length = $rs->fields[2]; + + + if ($save == ADODB_FETCH_NUM) { + $retarr[] = $fld; + } else { + $retarr[strtoupper($fld->name)] = $fld; + } + $rs->MoveNext(); + } + + $rs->Close(); + return $retarr; + + } + + + function MetaIndexes($table,$primary=false, $owner=false) + { + $table = $this->qstr($table); + + $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, + CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK, + CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique + FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id + INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid + INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid + WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table + ORDER BY O.name, I.Name, K.keyno"; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute($sql); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + return FALSE; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + if (!$primary && $row[5]) continue; + + $indexes[$row[0]]['unique'] = $row[6]; + $indexes[$row[0]]['columns'][] = $row[1]; + } + return $indexes; + } + + function _query($sql,$inputarr=false) + { + if (is_string($sql)) $sql = str_replace('||','+',$sql); + return ADODB_odbc::_query($sql,$inputarr); + } + + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET TRANSACTION ".$transaction_mode); + } + + // "Stein-Aksel Basma" + // tested with MSSQL 2000 + function MetaPrimaryKeys($table, $owner = false) + { + global $ADODB_FETCH_MODE; + + $schema = ''; + $this->_findschema($table,$schema); + //if (!$schema) $schema = $this->database; + if ($schema) $schema = "and k.table_catalog like '$schema%'"; + + $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k, + information_schema.table_constraints tc + where tc.constraint_name = k.constraint_name and tc.constraint_type = + 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position "; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $a = $this->GetCol($sql); + $ADODB_FETCH_MODE = $savem; + + if ($a && sizeof($a)>0) return $a; + $false = false; + return $false; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + if ($nrows > 0 && $offset <= 0) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql); + $rs = $this->Execute($sql,$inputarr); + } else + $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + + return $rs; + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '+'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "datename(yyyy,$col)"; + break; + case 'M': + $s .= "convert(char(3),$col,0)"; + break; + case 'm': + $s .= "replace(str(month($col),2),' ','0')"; + break; + case 'Q': + case 'q': + $s .= "datename(quarter,$col)"; + break; + case 'D': + case 'd': + $s .= "replace(str(day($col),2),' ','0')"; + break; + case 'h': + $s .= "substring(convert(char(14),$col,0),13,2)"; + break; + + case 'H': + $s .= "replace(str(datepart(hh,$col),2),' ','0')"; + break; + + case 'i': + $s .= "replace(str(datepart(mi,$col),2),' ','0')"; + break; + case 's': + $s .= "replace(str(datepart(ss,$col),2),' ','0')"; + break; + case 'a': + case 'A': + $s .= "substring(convert(char(19),$col,0),18,2)"; + break; + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + break; + } + } + return $s; + } + +} + +class ADORecordSet_odbc_mssql extends ADORecordSet_odbc { + + var $databaseType = 'odbc_mssql'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-odbc_oracle.inc.php b/ehcp/adodb5/drivers/adodb-odbc_oracle.inc.php new file mode 100644 index 0000000..86743e7 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbc_oracle.inc.php @@ -0,0 +1,111 @@ +Execute($this->metaTablesSQL); + if ($rs === false) return $false; + $arr = $rs->GetArray(); + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + $arr2[] = $arr[$i][0]; + } + $rs->Close(); + return $arr2; + } + + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); + if ($rs === false) { + $false = false; + return $false; + } + $retarr = array(); + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[strtoupper($fld->name)] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + } + + // returns true or false + function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + + $php_errormsg = ''; + $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC ); + $this->_errorMsg = $php_errormsg; + + $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"); + //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true); + return $this->_connectionID != false; + } + // returns true or false + function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + global $php_errormsg; + $php_errormsg = ''; + $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC ); + $this->_errorMsg = $php_errormsg; + + $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"); + //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true); + return $this->_connectionID != false; + } +} + +class ADORecordSet_odbc_oracle extends ADORecordSet_odbc { + + var $databaseType = 'odbc_oracle'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-odbtp.inc.php b/ehcp/adodb5/drivers/adodb-odbtp.inc.php new file mode 100644 index 0000000..21ab6df --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbtp.inc.php @@ -0,0 +1,840 @@ + + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +define("_ADODB_ODBTP_LAYER", 2 ); + +class ADODB_odbtp extends ADOConnection{ + var $databaseType = "odbtp"; + var $dataProvider = "odbtp"; + var $fmtDate = "'Y-m-d'"; + var $fmtTimeStamp = "'Y-m-d, h:i:sA'"; + var $replaceQuote = "''"; // string to use to replace quotes + var $odbc_driver = 0; + var $hasAffectedRows = true; + var $hasInsertID = false; + var $hasGenID = true; + var $hasMoveFirst = true; + + var $_genSeqSQL = "create table %s (seq_name char(30) not null unique , seq_value integer not null)"; + var $_dropSeqSQL = "delete from adodb_seq where seq_name = '%s'"; + var $_bindInputArray = false; + var $_useUnicodeSQL = false; + var $_canPrepareSP = false; + var $_dontPoolDBC = true; + + function __construct() + { + } + + function ServerInfo() + { + return array('description' => @odbtp_get_attr( ODB_ATTR_DBMSNAME, $this->_connectionID), + 'version' => @odbtp_get_attr( ODB_ATTR_DBMSVER, $this->_connectionID)); + } + + function ErrorMsg() + { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (empty($this->_connectionID)) return @odbtp_last_error(); + return @odbtp_last_error($this->_connectionID); + } + + function ErrorNo() + { + if ($this->_errorCode !== false) return $this->_errorCode; + if (empty($this->_connectionID)) return @odbtp_last_error_state(); + return @odbtp_last_error_state($this->_connectionID); + } +/* + function DBDate($d,$isfld=false) + { + if (empty($d) && $d !== 0) return 'null'; + if ($isfld) return "convert(date, $d, 120)"; + + if (is_string($d)) $d = ADORecordSet::UnixDate($d); + $d = adodb_date($this->fmtDate,$d); + return "convert(date, $d, 120)"; + } + + function DBTimeStamp($d,$isfld=false) + { + if (empty($d) && $d !== 0) return 'null'; + if ($isfld) return "convert(datetime, $d, 120)"; + + if (is_string($d)) $d = ADORecordSet::UnixDate($d); + $d = adodb_date($this->fmtDate,$d); + return "convert(datetime, $d, 120)"; + } +*/ + + function _insertid() + { + // SCOPE_IDENTITY() + // Returns the last IDENTITY value inserted into an IDENTITY column in + // the same scope. A scope is a module -- a stored procedure, trigger, + // function, or batch. Thus, two statements are in the same scope if + // they are in the same stored procedure, function, or batch. + return $this->GetOne($this->identitySQL); + } + + function _affectedrows() + { + if ($this->_queryID) { + return @odbtp_affected_rows ($this->_queryID); + } else + return 0; + } + + function CreateSequence($seqname='adodbseq',$start=1) + { + //verify existence + $num = $this->GetOne("select seq_value from adodb_seq"); + $seqtab='adodb_seq'; + if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) { + $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID ); + //if using vfp dbc file + if( !strcasecmp(strrchr($path, '.'), '.dbc') ) + $path = substr($path,0,strrpos($path,'\/')); + $seqtab = $path . '/' . $seqtab; + } + if($num == false) { + if (empty($this->_genSeqSQL)) return false; + $ok = $this->Execute(sprintf($this->_genSeqSQL ,$seqtab)); + } + $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seqname'"); + if ($num) { + return false; + } + $start -= 1; + return $this->Execute("insert into adodb_seq values('$seqname',$start)"); + } + + function DropSequence($seqname = 'adodbseq') + { + if (empty($this->_dropSeqSQL)) return false; + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + function GenID($seq='adodbseq',$start=1) + { + $seqtab='adodb_seq'; + if( $this->odbc_driver == ODB_DRIVER_FOXPRO) { + $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID ); + //if using vfp dbc file + if( !strcasecmp(strrchr($path, '.'), '.dbc') ) + $path = substr($path,0,strrpos($path,'\/')); + $seqtab = $path . '/' . $seqtab; + } + $MAXLOOPS = 100; + while (--$MAXLOOPS>=0) { + $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seq'"); + if ($num === false) { + //verify if abodb_seq table exist + $ok = $this->GetOne("select seq_value from adodb_seq "); + if(!$ok) { + //creating the sequence table adodb_seq + $this->Execute(sprintf($this->_genSeqSQL ,$seqtab)); + } + $start -= 1; + $num = '0'; + $ok = $this->Execute("insert into adodb_seq values('$seq',$start)"); + if (!$ok) return false; + } + $ok = $this->Execute("update adodb_seq set seq_value=seq_value+1 where seq_name='$seq'"); + if($ok) { + $num += 1; + $this->genID = $num; + return $num; + } + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); + } + return false; + } + + //example for $UserOrDSN + //for visual fox : DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBF;SOURCEDB=c:\YourDbfFileDir;EXCLUSIVE=NO; + //for visual fox dbc: DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBC;SOURCEDB=c:\YourDbcFileDir\mydb.dbc;EXCLUSIVE=NO; + //for access : DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\path_to_access_db\base_test.mdb;UID=root;PWD=; + //for mssql : DRIVER={SQL Server};SERVER=myserver;UID=myuid;PWD=mypwd;DATABASE=OdbtpTest; + //if uid & pwd can be separate + function _connect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='') + { + if ($argPassword && stripos($UserOrDSN,'DRIVER=') !== false) { + $this->_connectionID = odbtp_connect($HostOrInterface,$UserOrDSN.';PWD='.$argPassword); + } else + $this->_connectionID = odbtp_connect($HostOrInterface,$UserOrDSN,$argPassword,$argDatabase); + if ($this->_connectionID === false) { + $this->_errorMsg = $this->ErrorMsg() ; + return false; + } + + odbtp_convert_datetime($this->_connectionID,true); + + if ($this->_dontPoolDBC) { + if (function_exists('odbtp_dont_pool_dbc')) + @odbtp_dont_pool_dbc($this->_connectionID); + } + else { + $this->_dontPoolDBC = true; + } + $this->odbc_driver = @odbtp_get_attr(ODB_ATTR_DRIVER, $this->_connectionID); + $dbms = strtolower(@odbtp_get_attr(ODB_ATTR_DBMSNAME, $this->_connectionID)); + $this->odbc_name = $dbms; + + // Account for inconsistent DBMS names + if( $this->odbc_driver == ODB_DRIVER_ORACLE ) + $dbms = 'oracle'; + else if( $this->odbc_driver == ODB_DRIVER_SYBASE ) + $dbms = 'sybase'; + + // Set DBMS specific attributes + switch( $dbms ) { + case 'microsoft sql server': + $this->databaseType = 'odbtp_mssql'; + $this->fmtDate = "'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d h:i:sA'"; + $this->sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; + $this->sysTimeStamp = 'GetDate()'; + $this->ansiOuter = true; + $this->leftOuter = '*='; + $this->rightOuter = '=*'; + $this->hasTop = 'top'; + $this->hasInsertID = true; + $this->hasTransactions = true; + $this->_bindInputArray = true; + $this->_canSelectDb = true; + $this->substr = "substring"; + $this->length = 'len'; + $this->identitySQL = 'select SCOPE_IDENTITY()'; + $this->metaDatabasesSQL = "select name from master..sysdatabases where name <> 'master'"; + $this->_canPrepareSP = true; + break; + case 'access': + $this->databaseType = 'odbtp_access'; + $this->fmtDate = "#Y-m-d#"; + $this->fmtTimeStamp = "#Y-m-d h:i:sA#"; + $this->sysDate = "FORMAT(NOW,'yyyy-mm-dd')"; + $this->sysTimeStamp = 'NOW'; + $this->hasTop = 'top'; + $this->hasTransactions = false; + $this->_canPrepareSP = true; // For MS Access only. + break; + case 'visual foxpro': + $this->databaseType = 'odbtp_vfp'; + $this->fmtDate = "{^Y-m-d}"; + $this->fmtTimeStamp = "{^Y-m-d, h:i:sA}"; + $this->sysDate = 'date()'; + $this->sysTimeStamp = 'datetime()'; + $this->ansiOuter = true; + $this->hasTop = 'top'; + $this->hasTransactions = false; + $this->replaceQuote = "'+chr(39)+'"; + $this->true = '.T.'; + $this->false = '.F.'; + + break; + case 'oracle': + $this->databaseType = 'odbtp_oci8'; + $this->fmtDate = "'Y-m-d 00:00:00'"; + $this->fmtTimeStamp = "'Y-m-d h:i:sA'"; + $this->sysDate = 'TRUNC(SYSDATE)'; + $this->sysTimeStamp = 'SYSDATE'; + $this->hasTransactions = true; + $this->_bindInputArray = true; + $this->concat_operator = '||'; + break; + case 'sybase': + $this->databaseType = 'odbtp_sybase'; + $this->fmtDate = "'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d H:i:s'"; + $this->sysDate = 'GetDate()'; + $this->sysTimeStamp = 'GetDate()'; + $this->leftOuter = '*='; + $this->rightOuter = '=*'; + $this->hasInsertID = true; + $this->hasTransactions = true; + $this->identitySQL = 'select SCOPE_IDENTITY()'; + break; + default: + $this->databaseType = 'odbtp'; + if( @odbtp_get_attr(ODB_ATTR_TXNCAPABLE, $this->_connectionID) ) + $this->hasTransactions = true; + else + $this->hasTransactions = false; + } + @odbtp_set_attr(ODB_ATTR_FULLCOLINFO, TRUE, $this->_connectionID ); + + if ($this->_useUnicodeSQL ) + @odbtp_set_attr(ODB_ATTR_UNICODESQL, TRUE, $this->_connectionID); + + return true; + } + + function _pconnect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='') + { + $this->_dontPoolDBC = false; + return $this->_connect($HostOrInterface, $UserOrDSN, $argPassword, $argDatabase); + } + + function SelectDB($dbName) + { + if (!@odbtp_select_db($dbName, $this->_connectionID)) { + return false; + } + $this->database = $dbName; + $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions + return true; + } + + function MetaTables($ttype='',$showSchema=false,$mask=false) + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false); + + $arr = $this->GetArray("||SQLTables||||$ttype"); + + if (isset($savefm)) $this->SetFetchMode($savefm); + $ADODB_FETCH_MODE = $savem; + + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + if ($arr[$i][3] == 'SYSTEM TABLE' ) continue; + if ($arr[$i][2]) + $arr2[] = $showSchema && $arr[$i][1]? $arr[$i][1].'.'.$arr[$i][2] : $arr[$i][2]; + } + return $arr2; + } + + function MetaColumns($table,$upper=true) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $this->_findschema($table,$schema); + if ($upper) $table = strtoupper($table); + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false); + + $rs = $this->Execute( "||SQLColumns||$schema|$table" ); + + if (isset($savefm)) $this->SetFetchMode($savefm); + $ADODB_FETCH_MODE = $savem; + + if (!$rs || $rs->EOF) { + $false = false; + return $false; + } + $retarr = array(); + while (!$rs->EOF) { + //print_r($rs->fields); + if (strtoupper($rs->fields[2]) == $table) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[3]; + $fld->type = $rs->fields[5]; + $fld->max_length = $rs->fields[6]; + $fld->not_null = !empty($rs->fields[9]); + $fld->scale = $rs->fields[7]; + if (isset($rs->fields[12])) // vfp does not have field 12 + if (!is_null($rs->fields[12])) { + $fld->has_default = true; + $fld->default_value = $rs->fields[12]; + } + $retarr[strtoupper($fld->name)] = $fld; + } else if (!empty($retarr)) + break; + $rs->MoveNext(); + } + $rs->Close(); + + return $retarr; + } + + function MetaPrimaryKeys($table, $owner='') + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $arr = $this->GetArray("||SQLPrimaryKeys||$owner|$table"); + $ADODB_FETCH_MODE = $savem; + + //print_r($arr); + $arr2 = array(); + for ($i=0; $i < sizeof($arr); $i++) { + if ($arr[$i][3]) $arr2[] = $arr[$i][3]; + } + return $arr2; + } + + function MetaForeignKeys($table, $owner='', $upper=false) + { + global $ADODB_FETCH_MODE; + + $savem = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $constraints = $this->GetArray("||SQLForeignKeys|||||$owner|$table"); + $ADODB_FETCH_MODE = $savem; + + $arr = false; + foreach($constraints as $constr) { + //print_r($constr); + $arr[$constr[11]][$constr[2]][] = $constr[7].'='.$constr[3]; + } + if (!$arr) { + $false = false; + return $false; + } + + $arr2 = array(); + + foreach($arr as $k => $v) { + foreach($v as $a => $b) { + if ($upper) $a = strtoupper($a); + $arr2[$a] = $b; + } + } + return $arr2; + } + + function BeginTrans() + { + if (!$this->hasTransactions) return false; + if ($this->transOff) return true; + $this->transCnt += 1; + $this->autoCommit = false; + if (defined('ODB_TXN_DEFAULT')) + $txn = ODB_TXN_DEFAULT; + else + $txn = ODB_TXN_READUNCOMMITTED; + $rs = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS,$txn,$this->_connectionID); + if(!$rs) return false; + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + if ($this->transCnt) $this->transCnt -= 1; + $this->autoCommit = true; + if( ($ret = @odbtp_commit($this->_connectionID)) ) + $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off + return $ret; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + if ($this->transCnt) $this->transCnt -= 1; + $this->autoCommit = true; + if( ($ret = @odbtp_rollback($this->_connectionID)) ) + $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off + return $ret; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + // TOP requires ORDER BY for Visual FoxPro + if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) { + if (!preg_match('/ORDER[ \t\r\n]+BY/is',$sql)) $sql .= ' ORDER BY 1'; + } + $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $ret; + } + + function Prepare($sql) + { + if (! $this->_bindInputArray) return $sql; // no binding + + $this->_errorMsg = false; + $this->_errorCode = false; + + $stmt = @odbtp_prepare($sql,$this->_connectionID); + if (!$stmt) { + // print "Prepare Error for ($sql) ".$this->ErrorMsg()."
"; + return $sql; + } + return array($sql,$stmt,false); + } + + function PrepareSP($sql, $param = true) + { + if (!$this->_canPrepareSP) return $sql; // Can't prepare procedures + + $this->_errorMsg = false; + $this->_errorCode = false; + + $stmt = @odbtp_prepare_proc($sql,$this->_connectionID); + if (!$stmt) return false; + return array($sql,$stmt); + } + + /* + Usage: + $stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group + + # note that the parameter does not have @ in front! + $db->Parameter($stmt,$id,'myid'); + $db->Parameter($stmt,$group,'group',false,64); + $db->Parameter($stmt,$group,'photo',false,100000,ODB_BINARY); + $db->Execute($stmt); + + @param $stmt Statement returned by Prepare() or PrepareSP(). + @param $var PHP variable to bind to. Can set to null (for isNull support). + @param $name Name of stored procedure variable name to bind to. + @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in odbtp. + @param [$maxLen] Holds an maximum length of the variable. + @param [$type] The data type of $var. Legal values depend on driver. + + See odbtp_attach_param documentation at http://odbtp.sourceforge.net. + */ + function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=0, $type=0) + { + if ( $this->odbc_driver == ODB_DRIVER_JET ) { + $name = '['.$name.']'; + if( !$type && $this->_useUnicodeSQL + && @odbtp_param_bindtype($stmt[1], $name) == ODB_CHAR ) + { + $type = ODB_WCHAR; + } + } + else { + $name = '@'.$name; + } + return @odbtp_attach_param($stmt[1], $name, $var, $type, $maxLen); + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + + function UpdateBlob($table,$column,$val,$where,$blobtype='image') + { + $sql = "UPDATE $table SET $column = ? WHERE $where"; + if( !($stmt = @odbtp_prepare($sql, $this->_connectionID)) ) + return false; + if( !@odbtp_input( $stmt, 1, ODB_BINARY, 1000000, $blobtype ) ) + return false; + if( !@odbtp_set( $stmt, 1, $val ) ) + return false; + return @odbtp_execute( $stmt ) != false; + } + + function MetaIndexes($table,$primary=false, $owner=false) + { + switch ( $this->odbc_driver) { + case ODB_DRIVER_MSSQL: + return $this->MetaIndexes_mssql($table, $primary); + default: + return array(); + } + } + + function MetaIndexes_mssql($table,$primary=false, $owner = false) + { + $table = strtolower($this->qstr($table)); + + $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, + CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK, + CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique + FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id + INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid + INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid + WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND lower(O.Name) = $table + ORDER BY O.name, I.Name, K.keyno"; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute($sql); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + return FALSE; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + if ($primary && !$row[5]) continue; + + $indexes[$row[0]]['unique'] = $row[6]; + $indexes[$row[0]]['columns'][] = $row[1]; + } + return $indexes; + } + + function IfNull( $field, $ifNull ) + { + switch( $this->odbc_driver ) { + case ODB_DRIVER_MSSQL: + return " ISNULL($field, $ifNull) "; + case ODB_DRIVER_JET: + return " IIF(IsNull($field), $ifNull, $field) "; + } + return " CASE WHEN $field is null THEN $ifNull ELSE $field END "; + } + + function _query($sql,$inputarr=false) + { + global $php_errormsg; + + $this->_errorMsg = false; + $this->_errorCode = false; + + if ($inputarr) { + if (is_array($sql)) { + $stmtid = $sql[1]; + } else { + $stmtid = @odbtp_prepare($sql,$this->_connectionID); + if ($stmtid == false) { + $this->_errorMsg = $php_errormsg; + return false; + } + } + $num_params = @odbtp_num_params( $stmtid ); + /* + for( $param = 1; $param <= $num_params; $param++ ) { + @odbtp_input( $stmtid, $param ); + @odbtp_set( $stmtid, $param, $inputarr[$param-1] ); + }*/ + + $param = 1; + foreach($inputarr as $v) { + @odbtp_input( $stmtid, $param ); + @odbtp_set( $stmtid, $param, $v ); + $param += 1; + if ($param > $num_params) break; + } + + if (!@odbtp_execute($stmtid) ) { + return false; + } + } else if (is_array($sql)) { + $stmtid = $sql[1]; + if (!@odbtp_execute($stmtid)) { + return false; + } + } else { + $stmtid = odbtp_query($sql,$this->_connectionID); + } + $this->_lastAffectedRows = 0; + if ($stmtid) { + $this->_lastAffectedRows = @odbtp_affected_rows($stmtid); + } + return $stmtid; + } + + function _close() + { + $ret = @odbtp_close($this->_connectionID); + $this->_connectionID = false; + return $ret; + } +} + +class ADORecordSet_odbtp extends ADORecordSet { + + var $databaseType = 'odbtp'; + var $canSeek = true; + + function __construct($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + parent::__construct($queryID); + } + + function _initrs() + { + $this->_numOfFields = @odbtp_num_fields($this->_queryID); + if (!($this->_numOfRows = @odbtp_num_rows($this->_queryID))) + $this->_numOfRows = -1; + + if (!$this->connection->_useUnicodeSQL) return; + + if ($this->connection->odbc_driver == ODB_DRIVER_JET) { + if (!@odbtp_get_attr(ODB_ATTR_MAPCHARTOWCHAR, + $this->connection->_connectionID)) + { + for ($f = 0; $f < $this->_numOfFields; $f++) { + if (@odbtp_field_bindtype($this->_queryID, $f) == ODB_CHAR) + @odbtp_bind_field($this->_queryID, $f, ODB_WCHAR); + } + } + } + } + + function FetchField($fieldOffset = 0) + { + $off=$fieldOffset; // offsets begin at 0 + $o= new ADOFieldObject(); + $o->name = @odbtp_field_name($this->_queryID,$off); + $o->type = @odbtp_field_type($this->_queryID,$off); + $o->max_length = @odbtp_field_length($this->_queryID,$off); + if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); + else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); + return $o; + } + + function _seek($row) + { + return @odbtp_data_seek($this->_queryID, $row); + } + + function fields($colname) + { + if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; + + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $name = @odbtp_field_name( $this->_queryID, $i ); + $this->bind[strtoupper($name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function _fetch_odbtp($type=0) + { + switch ($this->fetchMode) { + case ADODB_FETCH_NUM: + $this->fields = @odbtp_fetch_row($this->_queryID, $type); + break; + case ADODB_FETCH_ASSOC: + $this->fields = @odbtp_fetch_assoc($this->_queryID, $type); + break; + default: + $this->fields = @odbtp_fetch_array($this->_queryID, $type); + } + if ($this->databaseType = 'odbtp_vfp') { + if ($this->fields) + foreach($this->fields as $k => $v) { + if (strncmp($v,'1899-12-30',10) == 0) $this->fields[$k] = ''; + } + } + return is_array($this->fields); + } + + function _fetch() + { + return $this->_fetch_odbtp(); + } + + function MoveFirst() + { + if (!$this->_fetch_odbtp(ODB_FETCH_FIRST)) return false; + $this->EOF = false; + $this->_currentRow = 0; + return true; + } + + function MoveLast() + { + if (!$this->_fetch_odbtp(ODB_FETCH_LAST)) return false; + $this->EOF = false; + $this->_currentRow = $this->_numOfRows - 1; + return true; + } + + function NextRecordSet() + { + if (!@odbtp_next_result($this->_queryID)) return false; + $this->_inited = false; + $this->bind = false; + $this->_currentRow = -1; + $this->Init(); + return true; + } + + function _close() + { + return @odbtp_free_query($this->_queryID); + } +} + +class ADORecordSet_odbtp_mssql extends ADORecordSet_odbtp { + + var $databaseType = 'odbtp_mssql'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +class ADORecordSet_odbtp_access extends ADORecordSet_odbtp { + + var $databaseType = 'odbtp_access'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +class ADORecordSet_odbtp_vfp extends ADORecordSet_odbtp { + + var $databaseType = 'odbtp_vfp'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +class ADORecordSet_odbtp_oci8 extends ADORecordSet_odbtp { + + var $databaseType = 'odbtp_oci8'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} + +class ADORecordSet_odbtp_sybase extends ADORecordSet_odbtp { + + var $databaseType = 'odbtp_sybase'; + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } +} diff --git a/ehcp/adodb5/drivers/adodb-odbtp_unicode.inc.php b/ehcp/adodb5/drivers/adodb-odbtp_unicode.inc.php new file mode 100644 index 0000000..fbb5e84 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-odbtp_unicode.inc.php @@ -0,0 +1,35 @@ + + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +/* + Because the ODBTP server sends and reads UNICODE text data using UTF-8 + encoding, the following HTML meta tag must be included within the HTML + head section of every HTML form and script page: + + + + Also, all SQL query strings must be submitted as UTF-8 encoded text. +*/ + +if (!defined('_ADODB_ODBTP_LAYER')) { + include(ADODB_DIR."/drivers/adodb-odbtp.inc.php"); +} + +class ADODB_odbtp_unicode extends ADODB_odbtp { + var $databaseType = 'odbtp'; + var $_useUnicodeSQL = true; +} diff --git a/ehcp/adodb5/drivers/adodb-oracle.inc.php b/ehcp/adodb5/drivers/adodb-oracle.inc.php new file mode 100644 index 0000000..c3d438b --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-oracle.inc.php @@ -0,0 +1,343 @@ +format($this->fmtDate); + else $ds = adodb_date($this->fmtDate,$d); + return 'TO_DATE('.$ds.",'YYYY-MM-DD')"; + } + + // format and return date string in database timestamp format + function DBTimeStamp($ts, $isfld = false) + { + + if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts); + if (is_object($ts)) $ds = $ts->format($this->fmtDate); + else $ds = adodb_date($this->fmtTimeStamp,$ts); + return 'TO_DATE('.$ds.",'RRRR-MM-DD, HH:MI:SS AM')"; + } + + + function BindDate($d) + { + $d = ADOConnection::DBDate($d); + if (strncmp($d,"'",1)) return $d; + + return substr($d,1,strlen($d)-2); + } + + function BindTimeStamp($d) + { + $d = ADOConnection::DBTimeStamp($d); + if (strncmp($d,"'",1)) return $d; + + return substr($d,1,strlen($d)-2); + } + + + + function BeginTrans() + { + $this->autoCommit = false; + ora_commitoff($this->_connectionID); + return true; + } + + + function CommitTrans($ok=true) + { + if (!$ok) return $this->RollbackTrans(); + $ret = ora_commit($this->_connectionID); + ora_commiton($this->_connectionID); + return $ret; + } + + + function RollbackTrans() + { + $ret = ora_rollback($this->_connectionID); + ora_commiton($this->_connectionID); + return $ret; + } + + + /* there seems to be a bug in the oracle extension -- always returns ORA-00000 - no error */ + function ErrorMsg() + { + if ($this->_errorMsg !== false) return $this->_errorMsg; + + if (is_resource($this->_curs)) $this->_errorMsg = @ora_error($this->_curs); + if (empty($this->_errorMsg)) $this->_errorMsg = @ora_error($this->_connectionID); + return $this->_errorMsg; + } + + + function ErrorNo() + { + if ($this->_errorCode !== false) return $this->_errorCode; + + if (is_resource($this->_curs)) $this->_errorCode = @ora_errorcode($this->_curs); + if (empty($this->_errorCode)) $this->_errorCode = @ora_errorcode($this->_connectionID); + return $this->_errorCode; + } + + + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename, $mode=0) + { + if (!function_exists('ora_plogon')) return null; + + // Reset error messages before connecting + $this->_errorMsg = false; + $this->_errorCode = false; + + // G. Giunta 2003/08/13 - This looks danegrously suspicious: why should we want to set + // the oracle home to the host name of remote DB? +// if ($argHostname) putenv("ORACLE_HOME=$argHostname"); + + if($argHostname) { // code copied from version submitted for oci8 by Jorma Tuomainen + if (empty($argDatabasename)) $argDatabasename = $argHostname; + else { + if(strpos($argHostname,":")) { + $argHostinfo=explode(":",$argHostname); + $argHostname=$argHostinfo[0]; + $argHostport=$argHostinfo[1]; + } else { + $argHostport="1521"; + } + + + if ($this->connectSID) { + $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname + .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))"; + } else + $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname + .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))"; + } + + } + + if ($argDatabasename) $argUsername .= "@$argDatabasename"; + + //if ($argHostname) print "

Connect: 1st argument should be left blank for $this->databaseType

"; + if ($mode == 1) + $this->_connectionID = ora_plogon($argUsername,$argPassword); + else + $this->_connectionID = ora_logon($argUsername,$argPassword); + if ($this->_connectionID === false) return false; + if ($this->autoCommit) ora_commiton($this->_connectionID); + if ($this->_initdate) { + $rs = $this->_query("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'"); + if ($rs) ora_close($rs); + } + + return true; + } + + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, 1); + } + + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + // Reset error messages before executing + $this->_errorMsg = false; + $this->_errorCode = false; + + $curs = ora_open($this->_connectionID); + + if ($curs === false) return false; + $this->_curs = $curs; + if (!ora_parse($curs,$sql)) return false; + if (ora_exec($curs)) return $curs; + // before we close the cursor, we have to store the error message + // that we can obtain ONLY from the cursor (and not from the connection) + $this->_errorCode = @ora_errorcode($curs); + $this->_errorMsg = @ora_error($curs); + // + @ora_close($curs); + return false; + } + + + // returns true or false + function _close() + { + return @ora_logoff($this->_connectionID); + } + + + +} + + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_oracle extends ADORecordSet { + + var $databaseType = "oracle"; + var $bind = false; + + function __construct($queryID,$mode=false) + { + + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->fetchMode = $mode; + + $this->_queryID = $queryID; + + $this->_inited = true; + $this->fields = array(); + if ($queryID) { + $this->_currentRow = 0; + $this->EOF = !$this->_fetch(); + @$this->_initrs(); + } else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + $this->EOF = true; + } + + return $this->_queryID; + } + + + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. */ + + function FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $fld->name = ora_columnname($this->_queryID, $fieldOffset); + $fld->type = ora_columntype($this->_queryID, $fieldOffset); + $fld->max_length = ora_columnsize($this->_queryID, $fieldOffset); + return $fld; + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function _initrs() + { + $this->_numOfRows = -1; + $this->_numOfFields = @ora_numcols($this->_queryID); + } + + + function _seek($row) + { + return false; + } + + function _fetch($ignore_fields=false) { +// should remove call by reference, but ora_fetch_into requires it in 4.0.3pl1 + if ($this->fetchMode & ADODB_FETCH_ASSOC) + return @ora_fetch_into($this->_queryID,$this->fields,ORA_FETCHINTO_NULLS|ORA_FETCHINTO_ASSOC); + else + return @ora_fetch_into($this->_queryID,$this->fields,ORA_FETCHINTO_NULLS); + } + + /* close() only needs to be called if you are worried about using too much memory while your script + is running. All associated result memory for the specified result identifier will automatically be freed. */ + + function _close() +{ + return @ora_close($this->_queryID); + } + + function MetaType($t, $len = -1, $fieldobj = false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + + switch (strtoupper($t)) { + case 'VARCHAR': + case 'VARCHAR2': + case 'CHAR': + case 'VARBINARY': + case 'BINARY': + if ($len <= $this->blobSize) return 'C'; + case 'LONG': + case 'LONG VARCHAR': + case 'CLOB': + return 'X'; + case 'LONG RAW': + case 'LONG VARBINARY': + case 'BLOB': + return 'B'; + + case 'DATE': return 'D'; + + //case 'T': return 'T'; + + case 'BIT': return 'L'; + case 'INT': + case 'SMALLINT': + case 'INTEGER': return 'I'; + default: return 'N'; + } + } +} diff --git a/ehcp/adodb5/drivers/adodb-pdo.inc.php b/ehcp/adodb5/drivers/adodb-pdo.inc.php new file mode 100644 index 0000000..2ca3386 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo.inc.php @@ -0,0 +1,758 @@ +_driver; + $this->fmtDate = $d->fmtDate; + $this->fmtTimeStamp = $d->fmtTimeStamp; + $this->replaceQuote = $d->replaceQuote; + $this->sysDate = $d->sysDate; + $this->sysTimeStamp = $d->sysTimeStamp; + $this->random = $d->random; + $this->concat_operator = $d->concat_operator; + $this->nameQuote = $d->nameQuote; + + $this->hasGenID = $d->hasGenID; + $this->_genIDSQL = $d->_genIDSQL; + $this->_genSeqSQL = $d->_genSeqSQL; + $this->_dropSeqSQL = $d->_dropSeqSQL; + + $d->_init($this); + } + + function Time() + { + if (!empty($this->_driver->_hasdual)) { + $sql = "select $this->sysTimeStamp from dual"; + } + else { + $sql = "select $this->sysTimeStamp"; + } + + $rs = $this->_Execute($sql); + if ($rs && !$rs->EOF) { + return $this->UnixTimeStamp(reset($rs->fields)); + } + + return false; + } + + // returns true or false + function _connect($argDSN, $argUsername, $argPassword, $argDatabasename, $persist=false) + { + $at = strpos($argDSN,':'); + $this->dsnType = substr($argDSN,0,$at); + + if ($argDatabasename) { + switch($this->dsnType){ + case 'sqlsrv': + $argDSN .= ';database='.$argDatabasename; + break; + case 'mssql': + case 'mysql': + case 'oci': + case 'pgsql': + case 'sqlite': + default: + $argDSN .= ';dbname='.$argDatabasename; + } + } + try { + $this->_connectionID = new PDO($argDSN, $argUsername, $argPassword); + } catch (Exception $e) { + $this->_connectionID = false; + $this->_errorno = -1; + //var_dump($e); + $this->_errormsg = 'Connection attempt failed: '.$e->getMessage(); + return false; + } + + if ($this->_connectionID) { + switch(ADODB_ASSOC_CASE){ + case ADODB_ASSOC_CASE_LOWER: + $m = PDO::CASE_LOWER; + break; + case ADODB_ASSOC_CASE_UPPER: + $m = PDO::CASE_UPPER; + break; + default: + case ADODB_ASSOC_CASE_NATIVE: + $m = PDO::CASE_NATURAL; + break; + } + + //$this->_connectionID->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT ); + $this->_connectionID->setAttribute(PDO::ATTR_CASE,$m); + + $class = 'ADODB_pdo_'.$this->dsnType; + //$this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,true); + switch($this->dsnType) { + case 'mssql': + case 'mysql': + case 'oci': + case 'pgsql': + case 'sqlite': + case 'sqlsrv': + include_once(ADODB_DIR.'/drivers/adodb-pdo_'.$this->dsnType.'.inc.php'); + break; + } + if (class_exists($class)) { + $this->_driver = new $class(); + } + else { + $this->_driver = new ADODB_pdo_base(); + } + + $this->_driver->_connectionID = $this->_connectionID; + $this->_UpdatePDO(); + return true; + } + $this->_driver = new ADODB_pdo_base(); + return false; + } + + function Concat() + { + $args = func_get_args(); + if(method_exists($this->_driver, 'Concat')) { + return call_user_func_array(array($this->_driver, 'Concat'), $args); + } + + if (PHP_VERSION >= 5.3) { + return call_user_func_array('parent::Concat', $args); + } + return call_user_func_array(array($this,'parent::Concat'), $args); + } + + // returns true or false + function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) + { + return $this->_connect($argDSN, $argUsername, $argPassword, $argDatabasename, true); + } + + /*------------------------------------------------------------------------------*/ + + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $save = $this->_driver->fetchMode; + $this->_driver->fetchMode = $this->fetchMode; + $this->_driver->debug = $this->debug; + $ret = $this->_driver->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + $this->_driver->fetchMode = $save; + return $ret; + } + + + function ServerInfo() + { + return $this->_driver->ServerInfo(); + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + return $this->_driver->MetaTables($ttype,$showSchema,$mask); + } + + function MetaColumns($table,$normalize=true) + { + return $this->_driver->MetaColumns($table,$normalize); + } + + function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) + { + $obj = $stmt[1]; + if ($type) { + $obj->bindParam($name, $var, $type, $maxLen); + } + else { + $obj->bindParam($name, $var); + } + } + + function OffsetDate($dayFraction,$date=false) + { + return $this->_driver->OffsetDate($dayFraction,$date); + } + + function ErrorMsg() + { + if ($this->_errormsg !== false) { + return $this->_errormsg; + } + if (!empty($this->_stmt)) { + $arr = $this->_stmt->errorInfo(); + } + else if (!empty($this->_connectionID)) { + $arr = $this->_connectionID->errorInfo(); + } + else { + return 'No Connection Established'; + } + + if ($arr) { + if (sizeof($arr)<2) { + return ''; + } + if ((integer)$arr[0]) { + return $arr[2]; + } + else { + return ''; + } + } + else { + return '-1'; + } + } + + + function ErrorNo() + { + if ($this->_errorno !== false) { + return $this->_errorno; + } + if (!empty($this->_stmt)) { + $err = $this->_stmt->errorCode(); + } + else if (!empty($this->_connectionID)) { + $arr = $this->_connectionID->errorInfo(); + if (isset($arr[0])) { + $err = $arr[0]; + } + else { + $err = -1; + } + } else { + return 0; + } + + if ($err == '00000') { + return 0; // allows empty check + } + return $err; + } + + function SetTransactionMode($transaction_mode) + { + if(method_exists($this->_driver, 'SetTransactionMode')) { + return $this->_driver->SetTransactionMode($transaction_mode); + } + + return parent::SetTransactionMode($seqname); + } + + function BeginTrans() + { + if(method_exists($this->_driver, 'BeginTrans')) { + return $this->_driver->BeginTrans(); + } + + if (!$this->hasTransactions) { + return false; + } + if ($this->transOff) { + return true; + } + $this->transCnt += 1; + $this->_autocommit = false; + $this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,false); + + return $this->_connectionID->beginTransaction(); + } + + function CommitTrans($ok=true) + { + if(method_exists($this->_driver, 'CommitTrans')) { + return $this->_driver->CommitTrans($ok); + } + + if (!$this->hasTransactions) { + return false; + } + if ($this->transOff) { + return true; + } + if (!$ok) { + return $this->RollbackTrans(); + } + if ($this->transCnt) { + $this->transCnt -= 1; + } + $this->_autocommit = true; + + $ret = $this->_connectionID->commit(); + $this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,true); + return $ret; + } + + function RollbackTrans() + { + if(method_exists($this->_driver, 'RollbackTrans')) { + return $this->_driver->RollbackTrans(); + } + + if (!$this->hasTransactions) { + return false; + } + if ($this->transOff) { + return true; + } + if ($this->transCnt) { + $this->transCnt -= 1; + } + $this->_autocommit = true; + + $ret = $this->_connectionID->rollback(); + $this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,true); + return $ret; + } + + function Prepare($sql) + { + $this->_stmt = $this->_connectionID->prepare($sql); + if ($this->_stmt) { + return array($sql,$this->_stmt); + } + + return false; + } + + function PrepareStmt($sql) + { + $stmt = $this->_connectionID->prepare($sql); + if (!$stmt) { + return false; + } + $obj = new ADOPDOStatement($stmt,$this); + return $obj; + } + + function CreateSequence($seqname='adodbseq',$startID=1) + { + if(method_exists($this->_driver, 'CreateSequence')) { + return $this->_driver->CreateSequence($seqname, $startID); + } + + return parent::CreateSequence($seqname, $startID); + } + + function DropSequence($seqname='adodbseq') + { + if(method_exists($this->_driver, 'DropSequence')) { + return $this->_driver->DropSequence($seqname); + } + + return parent::DropSequence($seqname); + } + + function GenID($seqname='adodbseq',$startID=1) + { + if(method_exists($this->_driver, 'GenID')) { + return $this->_driver->GenID($seqname, $startID); + } + + return parent::GenID($seqname, $startID); + } + + + /* returns queryID or false */ + function _query($sql,$inputarr=false) + { + if (is_array($sql)) { + $stmt = $sql[1]; + } else { + $stmt = $this->_connectionID->prepare($sql); + } + #adodb_backtrace(); + #var_dump($this->_bindInputArray); + if ($stmt) { + $this->_driver->debug = $this->debug; + if ($inputarr) { + $ok = $stmt->execute($inputarr); + } + else { + $ok = $stmt->execute(); + } + } + + + $this->_errormsg = false; + $this->_errorno = false; + + if ($ok) { + $this->_stmt = $stmt; + return $stmt; + } + + if ($stmt) { + + $arr = $stmt->errorinfo(); + if ((integer)$arr[1]) { + $this->_errormsg = $arr[2]; + $this->_errorno = $arr[1]; + } + + } else { + $this->_errormsg = false; + $this->_errorno = false; + } + return false; + } + + // returns true or false + function _close() + { + $this->_stmt = false; + return true; + } + + function _affectedrows() + { + return ($this->_stmt) ? $this->_stmt->rowCount() : 0; + } + + function _insertid() + { + return ($this->_connectionID) ? $this->_connectionID->lastInsertId() : 0; + } +} + +class ADODB_pdo_base extends ADODB_pdo { + + var $sysDate = "'?'"; + var $sysTimeStamp = "'?'"; + + + function _init($parentDriver) + { + $parentDriver->_bindInputArray = true; + #$parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true); + } + + function ServerInfo() + { + return ADOConnection::ServerInfo(); + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $ret; + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + return false; + } + + function MetaColumns($table,$normalize=true) + { + return false; + } +} + +class ADOPDOStatement { + + var $databaseType = "pdo"; + var $dataProvider = "pdo"; + var $_stmt; + var $_connectionID; + + function __construct($stmt,$connection) + { + $this->_stmt = $stmt; + $this->_connectionID = $connection; + } + + function Execute($inputArr=false) + { + $savestmt = $this->_connectionID->_stmt; + $rs = $this->_connectionID->Execute(array(false,$this->_stmt),$inputArr); + $this->_connectionID->_stmt = $savestmt; + return $rs; + } + + function InParameter(&$var,$name,$maxLen=4000,$type=false) + { + + if ($type) { + $this->_stmt->bindParam($name,$var,$type,$maxLen); + } + else { + $this->_stmt->bindParam($name, $var); + } + } + + function Affected_Rows() + { + return ($this->_stmt) ? $this->_stmt->rowCount() : 0; + } + + function ErrorMsg() + { + if ($this->_stmt) { + $arr = $this->_stmt->errorInfo(); + } + else { + $arr = $this->_connectionID->errorInfo(); + } + + if (is_array($arr)) { + if ((integer) $arr[0] && isset($arr[2])) { + return $arr[2]; + } + else { + return ''; + } + } else { + return '-1'; + } + } + + function NumCols() + { + return ($this->_stmt) ? $this->_stmt->columnCount() : 0; + } + + function ErrorNo() + { + if ($this->_stmt) { + return $this->_stmt->errorCode(); + } + else { + return $this->_connectionID->errorInfo(); + } + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_pdo extends ADORecordSet { + + var $bind = false; + var $databaseType = "pdo"; + var $dataProvider = "pdo"; + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->adodbFetchMode = $mode; + switch($mode) { + case ADODB_FETCH_NUM: $mode = PDO::FETCH_NUM; break; + case ADODB_FETCH_ASSOC: $mode = PDO::FETCH_ASSOC; break; + + case ADODB_FETCH_BOTH: + default: $mode = PDO::FETCH_BOTH; break; + } + $this->fetchMode = $mode; + + $this->_queryID = $id; + parent::__construct($id); + } + + + function Init() + { + if ($this->_inited) { + return; + } + $this->_inited = true; + if ($this->_queryID) { + @$this->_initrs(); + } + else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + } + if ($this->_numOfRows != 0 && $this->_currentRow == -1) { + $this->_currentRow = 0; + if ($this->EOF = ($this->_fetch() === false)) { + $this->_numOfRows = 0; // _numOfRows could be -1 + } + } else { + $this->EOF = true; + } + } + + function _initrs() + { + global $ADODB_COUNTRECS; + + $this->_numOfRows = ($ADODB_COUNTRECS) ? @$this->_queryID->rowCount() : -1; + if (!$this->_numOfRows) { + $this->_numOfRows = -1; + } + $this->_numOfFields = $this->_queryID->columnCount(); + } + + // returns the field object + function FetchField($fieldOffset = -1) + { + $off=$fieldOffset+1; // offsets begin at 1 + + $o= new ADOFieldObject(); + $arr = @$this->_queryID->getColumnMeta($fieldOffset); + if (!$arr) { + $o->name = 'bad getColumnMeta()'; + $o->max_length = -1; + $o->type = 'VARCHAR'; + $o->precision = 0; + # $false = false; + return $o; + } + //adodb_pr($arr); + $o->name = $arr['name']; + if (isset($arr['native_type']) && $arr['native_type'] <> "null") { + $o->type = $arr['native_type']; + } + else { + $o->type = adodb_pdo_type($arr['pdo_type']); + } + $o->max_length = $arr['len']; + $o->precision = $arr['precision']; + + switch(ADODB_ASSOC_CASE) { + case ADODB_ASSOC_CASE_LOWER: + $o->name = strtolower($o->name); + break; + case ADODB_ASSOC_CASE_UPPER: + $o->name = strtoupper($o->name); + break; + } + return $o; + } + + function _seek($row) + { + return false; + } + + function _fetch() + { + if (!$this->_queryID) { + return false; + } + + $this->fields = $this->_queryID->fetch($this->fetchMode); + return !empty($this->fields); + } + + function _close() + { + $this->_queryID = false; + } + + function Fields($colname) + { + if ($this->adodbFetchMode != ADODB_FETCH_NUM) { + return @$this->fields[$colname]; + } + + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_mssql.inc.php b/ehcp/adodb5/drivers/adodb-pdo_mssql.inc.php new file mode 100644 index 0000000..1aa587a --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_mssql.inc.php @@ -0,0 +1,62 @@ +hasTransactions = false; ## <<< BUG IN PDO mssql driver + $parentDriver->_bindInputArray = false; + $parentDriver->hasInsertID = true; + } + + function ServerInfo() + { + return ADOConnection::ServerInfo(); + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $ret; + } + + function SetTransactionMode( $transaction_mode ) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); + return; + } + if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; + $this->Execute("SET TRANSACTION ".$transaction_mode); + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + return false; + } + + function MetaColumns($table,$normalize=true) + { + return false; + } + +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_mysql.inc.php b/ehcp/adodb5/drivers/adodb-pdo_mysql.inc.php new file mode 100644 index 0000000..33cd143 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_mysql.inc.php @@ -0,0 +1,300 @@ +hasTransactions = false; + #$parentDriver->_bindInputArray = false; + $parentDriver->hasInsertID = true; + $parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + } + + // dayFraction is a day in floating point + function OffsetDate($dayFraction, $date=false) + { + if (!$date) { + $date = $this->sysDate; + } + + $fraction = $dayFraction * 24 * 3600; + return $date . ' + INTERVAL ' . $fraction . ' SECOND'; +// return "from_unixtime(unix_timestamp($date)+$fraction)"; + } + + function Concat() + { + $s = ''; + $arr = func_get_args(); + + // suggestion by andrew005#mnogo.ru + $s = implode(',', $arr); + if (strlen($s) > 0) { + return "CONCAT($s)"; + } + return ''; + } + + function ServerInfo() + { + $arr['description'] = ADOConnection::GetOne('select version()'); + $arr['version'] = ADOConnection::_findvers($arr['description']); + return $arr; + } + + function MetaTables($ttype=false, $showSchema=false, $mask=false) + { + $save = $this->metaTablesSQL; + if ($showSchema && is_string($showSchema)) { + $this->metaTablesSQL .= " from $showSchema"; + } + + if ($mask) { + $mask = $this->qstr($mask); + $this->metaTablesSQL .= " like $mask"; + } + $ret = ADOConnection::MetaTables($ttype, $showSchema); + + $this->metaTablesSQL = $save; + return $ret; + } + + function SetTransactionMode($transaction_mode) + { + $this->_transmode = $transaction_mode; + if (empty($transaction_mode)) { + $this->Execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ'); + return; + } + if (!stristr($transaction_mode, 'isolation')) { + $transaction_mode = 'ISOLATION LEVEL ' . $transaction_mode; + } + $this->Execute('SET SESSION TRANSACTION ' . $transaction_mode); + } + + function MetaColumns($table, $normalize=true) + { + $this->_findschema($table, $schema); + if ($schema) { + $dbName = $this->database; + $this->SelectDB($schema); + } + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + $rs = $this->Execute(sprintf($this->metaColumnsSQL, $table)); + + if ($schema) { + $this->SelectDB($dbName); + } + + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + if (!is_object($rs)) { + $false = false; + return $false; + } + + $retarr = array(); + while (!$rs->EOF){ + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $type = $rs->fields[1]; + + // split type into type(length): + $fld->scale = null; + if (preg_match('/^(.+)\((\d+),(\d+)/', $type, $query_array)) { + $fld->type = $query_array[1]; + $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; + $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1; + } elseif (preg_match('/^(.+)\((\d+)/', $type, $query_array)) { + $fld->type = $query_array[1]; + $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; + } elseif (preg_match('/^(enum)\((.*)\)$/i', $type, $query_array)) { + $fld->type = $query_array[1]; + $arr = explode(',', $query_array[2]); + $fld->enums = $arr; + $zlen = max(array_map('strlen', $arr)) - 2; // PHP >= 4.0.6 + $fld->max_length = ($zlen > 0) ? $zlen : 1; + } else { + $fld->type = $type; + $fld->max_length = -1; + } + $fld->not_null = ($rs->fields[2] != 'YES'); + $fld->primary_key = ($rs->fields[3] == 'PRI'); + $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); + $fld->binary = (strpos($type, 'blob') !== false); + $fld->unsigned = (strpos($type, 'unsigned') !== false); + + if (!$fld->binary) { + $d = $rs->fields[4]; + if ($d != '' && $d != 'NULL') { + $fld->has_default = true; + $fld->default_value = $d; + } else { + $fld->has_default = false; + } + } + + if ($save == ADODB_FETCH_NUM) { + $retarr[] = $fld; + } else { + $retarr[strtoupper($fld->name)] = $fld; + } + $rs->MoveNext(); + } + + $rs->Close(); + return $retarr; + } + + // returns true or false + function SelectDB($dbName) + { + $this->database = $dbName; + $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions + $try = $this->Execute('use ' . $dbName); + return ($try !== false); + } + + // parameters use PostgreSQL convention, not MySQL + function SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs=0) + { + $offsetStr =($offset>=0) ? "$offset," : ''; + // jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220 + if ($nrows < 0) { + $nrows = '18446744073709551615'; + } + + if ($secs) { + $rs = $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows", $inputarr); + } else { + $rs = $this->Execute($sql . " LIMIT $offsetStr$nrows", $inputarr); + } + return $rs; + } + + function SQLDate($fmt, $col=false) + { + if (!$col) { + $col = $this->sysTimeStamp; + } + $s = 'DATE_FORMAT(' . $col . ",'"; + $concat = false; + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + $ch = $fmt[$i]; + switch($ch) { + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt, $i, 1); + } + // FALL THROUGH + case '-': + case '/': + $s .= $ch; + break; + + case 'Y': + case 'y': + $s .= '%Y'; + break; + + case 'M': + $s .= '%b'; + break; + + case 'm': + $s .= '%m'; + break; + + case 'D': + case 'd': + $s .= '%d'; + break; + + case 'Q': + case 'q': + $s .= "'),Quarter($col)"; + + if ($len > $i+1) { + $s .= ",DATE_FORMAT($col,'"; + } else { + $s .= ",('"; + } + $concat = true; + break; + + case 'H': + $s .= '%H'; + break; + + case 'h': + $s .= '%I'; + break; + + case 'i': + $s .= '%i'; + break; + + case 's': + $s .= '%s'; + break; + + case 'a': + case 'A': + $s .= '%p'; + break; + + case 'w': + $s .= '%w'; + break; + + case 'W': + $s .= '%U'; + break; + + case 'l': + $s .= '%W'; + break; + } + } + $s .= "')"; + if ($concat) { + $s = "CONCAT($s)"; + } + return $s; + } +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_oci.inc.php b/ehcp/adodb5/drivers/adodb-pdo_oci.inc.php new file mode 100644 index 0000000..50bcc86 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_oci.inc.php @@ -0,0 +1,93 @@ +_bindInputArray = true; + $parentDriver->_nestedSQL = true; + if ($this->_initdate) { + $parentDriver->Execute("ALTER SESSION SET NLS_DATE_FORMAT='".$this->NLS_DATE_FORMAT."'"); + } + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtoupper($mask)); + $this->metaTablesSQL .= " AND table_name like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + function MetaColumns($table,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); + + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if (!$rs) { + return $false; + } + $retarr = array(); + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + $fld->scale = $rs->fields[3]; + if ($rs->fields[1] == 'NUMBER' && $rs->fields[3] == 0) { + $fld->type ='INT'; + $fld->max_length = $rs->fields[4]; + } + $fld->not_null = (strncmp($rs->fields[5], 'NOT',3) === 0); + $fld->binary = (strpos($fld->type,'BLOB') !== false); + $fld->default_value = $rs->fields[6]; + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[strtoupper($fld->name)] = $fld; + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) + return $false; + else + return $retarr; + } +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_pgsql.inc.php b/ehcp/adodb5/drivers/adodb-pdo_pgsql.inc.php new file mode 100644 index 0000000..442a05f --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_pgsql.inc.php @@ -0,0 +1,230 @@ + 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // used when schema defined + var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum +FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n +WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s')) + and c.relnamespace=n.oid and n.nspname='%s' + and a.attname not like '....%%' AND a.attnum > 0 + AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // get primary key etc -- from Freek Dijkstra + var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key + FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'"; + + var $hasAffectedRows = true; + var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + // below suggested by Freek Dijkstra + var $true = 't'; // string that represents TRUE for a database + var $false = 'f'; // string that represents FALSE for a database + var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt. + var $hasMoveFirst = true; + var $hasGenID = true; + var $_genIDSQL = "SELECT NEXTVAL('%s')"; + var $_genSeqSQL = "CREATE SEQUENCE %s START %s"; + var $_dropSeqSQL = "DROP SEQUENCE %s"; + var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum"; + var $random = 'random()'; /// random function + var $concat_operator='||'; + + function _init($parentDriver) + { + + $parentDriver->hasTransactions = false; ## <<< BUG IN PDO pgsql driver + $parentDriver->hasInsertID = true; + $parentDriver->_nestedSQL = true; + } + + function ServerInfo() + { + $arr['description'] = ADOConnection::GetOne("select version()"); + $arr['version'] = ADOConnection::_findvers($arr['description']); + return $arr; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; + $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ''; + if ($secs2cache) + $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + else + $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr); + + return $rs; + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + $info = $this->ServerInfo(); + if ($info['version'] >= 7.3) { + $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' + and schemaname not in ( 'pg_catalog','information_schema') + union + select viewname,'V' from pg_views where viewname not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema') "; + } + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtolower($mask)); + if ($info['version']>=7.3) + $this->metaTablesSQL = " +select tablename,'T' from pg_tables where tablename like $mask and schemaname not in ( 'pg_catalog','information_schema') + union +select viewname,'V' from pg_views where viewname like $mask and schemaname not in ( 'pg_catalog','information_schema') "; + else + $this->metaTablesSQL = " +select tablename,'T' from pg_tables where tablename like $mask + union +select viewname,'V' from pg_views where viewname like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + function MetaColumns($table,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $this->_findschema($table,$schema); + + if ($normalize) $table = strtolower($table); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + if ($schema) $rs = $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema)); + else $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rs === false) { + $false = false; + return $false; + } + if (!empty($this->metaKeySQL)) { + // If we want the primary keys, we have to issue a separate query + // Of course, a modified version of the metaColumnsSQL query using a + // LEFT JOIN would have been much more elegant, but postgres does + // not support OUTER JOINS. So here is the clumsy way. + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + $rskey = $this->Execute(sprintf($this->metaKeySQL,($table))); + // fetch all result in once for performance. + $keys = $rskey->GetArray(); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + $rskey->Close(); + unset($rskey); + } + + $rsdefa = array(); + if (!empty($this->metaDefaultsSQL)) { + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $sql = sprintf($this->metaDefaultsSQL, ($table)); + $rsdef = $this->Execute($sql); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rsdef) { + while (!$rsdef->EOF) { + $num = $rsdef->fields['num']; + $s = $rsdef->fields['def']; + if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */ + $s = substr($s, 1); + $s = substr($s, 0, strlen($s) - 1); + } + + $rsdefa[$num] = $s; + $rsdef->MoveNext(); + } + } else { + ADOConnection::outp( "==> SQL => " . $sql); + } + unset($rsdef); + } + + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4; + if ($fld->max_length <= 0) $fld->max_length = -1; + if ($fld->type == 'numeric') { + $fld->scale = $fld->max_length & 0xFFFF; + $fld->max_length >>= 16; + } + // dannym + // 5 hasdefault; 6 num-of-column + $fld->has_default = ($rs->fields[5] == 't'); + if ($fld->has_default) { + $fld->default_value = $rsdefa[$rs->fields[6]]; + } + + //Freek + if ($rs->fields[4] == $this->true) { + $fld->not_null = true; + } + + // Freek + if (is_array($keys)) { + foreach($keys as $key) { + if ($fld->name == $key['column_name'] AND $key['primary_key'] == $this->true) + $fld->primary_key = true; + if ($fld->name == $key['column_name'] AND $key['unique_key'] == $this->true) + $fld->unique = true; // What name is more compatible? + } + } + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) { + $false = false; + return $false; + } else return $retarr; + + } + +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_sqlite.inc.php b/ehcp/adodb5/drivers/adodb-pdo_sqlite.inc.php new file mode 100644 index 0000000..b5d3bc2 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_sqlite.inc.php @@ -0,0 +1,204 @@ +pdoDriver = $parentDriver; + $parentDriver->_bindInputArray = true; + $parentDriver->hasTransactions = false; // // should be set to false because of PDO SQLite driver not supporting changing autocommit mode + $parentDriver->hasInsertID = true; + } + + function ServerInfo() + { + $parent = $this->pdoDriver; + @($ver = array_pop($parent->GetCol("SELECT sqlite_version()"))); + @($enc = array_pop($parent->GetCol("PRAGMA encoding"))); + + $arr['version'] = $ver; + $arr['description'] = 'SQLite '; + $arr['encoding'] = $enc; + + return $arr; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $parent = $this->pdoDriver; + $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; + $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : ''); + if ($secs2cache) + $rs = $parent->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + else + $rs = $parent->Execute($sql."$limitStr$offsetStr",$inputarr); + + return $rs; + } + + function GenID($seq='adodbseq',$start=1) + { + $parent = $this->pdoDriver; + // if you have to modify the parameter below, your database is overloaded, + // or you need to implement generation of id's yourself! + $MAXLOOPS = 100; + while (--$MAXLOOPS>=0) { + @($num = array_pop($parent->GetCol("SELECT id FROM {$seq}"))); + if ($num === false || !is_numeric($num)) { + @$parent->Execute(sprintf($this->_genSeqSQL ,$seq)); + $start -= 1; + $num = '0'; + $cnt = $parent->GetOne(sprintf($this->_genSeqCountSQL,$seq)); + if (!$cnt) { + $ok = $parent->Execute(sprintf($this->_genSeq2SQL,$seq,$start)); + } + if (!$ok) return false; + } + $parent->Execute(sprintf($this->_genIDSQL,$seq,$num)); + + if ($parent->affected_rows() > 0) { + $num += 1; + $parent->genID = intval($num); + return intval($num); + } + } + if ($fn = $parent->raiseErrorFn) { + $fn($parent->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); + } + return false; + } + + function CreateSequence($seqname='adodbseq',$start=1) + { + $parent = $this->pdoDriver; + $ok = $parent->Execute(sprintf($this->_genSeqSQL,$seqname)); + if (!$ok) return false; + $start -= 1; + return $parent->Execute("insert into $seqname values($start)"); + } + + function SetTransactionMode($transaction_mode) + { + $parent = $this->pdoDriver; + $parent->_transmode = strtoupper($transaction_mode); + } + + function BeginTrans() + { + $parent = $this->pdoDriver; + if ($parent->transOff) return true; + $parent->transCnt += 1; + $parent->_autocommit = false; + return $parent->Execute("BEGIN {$parent->_transmode}"); + } + + function CommitTrans($ok=true) + { + $parent = $this->pdoDriver; + if ($parent->transOff) return true; + if (!$ok) return $parent->RollbackTrans(); + if ($parent->transCnt) $parent->transCnt -= 1; + $parent->_autocommit = true; + + $ret = $parent->Execute('COMMIT'); + return $ret; + } + + function RollbackTrans() + { + $parent = $this->pdoDriver; + if ($parent->transOff) return true; + if ($parent->transCnt) $parent->transCnt -= 1; + $parent->_autocommit = true; + + $ret = $parent->Execute('ROLLBACK'); + return $ret; + } + + + // mark newnham + function MetaColumns($tab,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $parent = $this->pdoDriver; + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($parent->fetchMode !== false) $savem = $parent->SetFetchMode(false); + $rs = $parent->Execute("PRAGMA table_info('$tab')"); + if (isset($savem)) $parent->SetFetchMode($savem); + if (!$rs) { + $ADODB_FETCH_MODE = $save; + return $false; + } + $arr = array(); + while ($r = $rs->FetchRow()) { + $type = explode('(',$r['type']); + $size = ''; + if (sizeof($type)==2) + $size = trim($type[1],')'); + $fn = strtoupper($r['name']); + $fld = new ADOFieldObject; + $fld->name = $r['name']; + $fld->type = $type[0]; + $fld->max_length = $size; + $fld->not_null = $r['notnull']; + $fld->primary_key = $r['pk']; + $fld->default_value = $r['dflt_value']; + $fld->scale = 0; + if ($save == ADODB_FETCH_NUM) $arr[] = $fld; + else $arr[strtoupper($fld->name)] = $fld; + } + $rs->Close(); + $ADODB_FETCH_MODE = $save; + return $arr; + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + $parent = $this->pdoDriver; + + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtoupper($mask)); + $this->metaTablesSQL .= " AND name LIKE $mask"; + } + + $ret = $parent->GetCol($this->metaTablesSQL); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } +} diff --git a/ehcp/adodb5/drivers/adodb-pdo_sqlsrv.inc.php b/ehcp/adodb5/drivers/adodb-pdo_sqlsrv.inc.php new file mode 100644 index 0000000..869e8e1 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-pdo_sqlsrv.inc.php @@ -0,0 +1,49 @@ +hasTransactions = true; + $parentDriver->_bindInputArray = true; + $parentDriver->hasInsertID = true; + $parentDriver->fmtTimeStamp = "'Y-m-d H:i:s'"; + $parentDriver->fmtDate = "'Y-m-d'"; + } + + function BeginTrans() + { + $returnval = parent::BeginTrans(); + return $returnval; + } + + function MetaColumns($table, $normalize = true) + { + return false; + } + + function MetaTables($ttype = false, $showSchema = false, $mask = false) + { + return false; + } + + function SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $secs2cache = 0) + { + $ret = ADOConnection::SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); + return $ret; + } + + function ServerInfo() + { + return ADOConnection::ServerInfo(); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-postgres.inc.php b/ehcp/adodb5/drivers/adodb-postgres.inc.php new file mode 100644 index 0000000..f0bc014 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-postgres.inc.php @@ -0,0 +1,14 @@ + + jlim - changed concat operator to || and data types to MetaType to match documented pgsql types + see http://www.postgresql.org/devel-corner/docs/postgres/datatype.htm + 22 Nov 2000 jlim - added changes to FetchField() and MetaTables() contributed by "raser" + 27 Nov 2000 jlim - added changes to _connect/_pconnect from ideas by "Lennie" + 15 Dec 2000 jlim - added changes suggested by Additional code changes by "Eric G. Werk" egw@netguide.dk. + 31 Jan 2002 jlim - finally installed postgresql. testing + 01 Mar 2001 jlim - Freek Dijkstra changes, also support for text type + + See http://www.varlena.com/varlena/GeneralBits/47.php + + -- What indexes are on my table? + select * from pg_indexes where tablename = 'tablename'; + + -- What triggers are on my table? + select c.relname as "Table", t.tgname as "Trigger Name", + t.tgconstrname as "Constraint Name", t.tgenabled as "Enabled", + t.tgisconstraint as "Is Constraint", cc.relname as "Referenced Table", + p.proname as "Function Name" + from pg_trigger t, pg_class c, pg_class cc, pg_proc p + where t.tgfoid = p.oid and t.tgrelid = c.oid + and t.tgconstrrelid = cc.oid + and c.relname = 'tablename'; + + -- What constraints are on my table? + select r.relname as "Table", c.conname as "Constraint Name", + contype as "Constraint Type", conkey as "Key Columns", + confkey as "Foreign Columns", consrc as "Source" + from pg_class r, pg_constraint c + where r.oid = c.conrelid + and relname = 'tablename'; + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +function adodb_addslashes($s) +{ + $len = strlen($s); + if ($len == 0) return "''"; + if (strncmp($s,"'",1) === 0 && substr($s,$len-1) == "'") return $s; // already quoted + + return "'".addslashes($s)."'"; +} + +class ADODB_postgres64 extends ADOConnection{ + var $databaseType = 'postgres64'; + var $dataProvider = 'postgres'; + var $hasInsertID = true; + var $_resultid = false; + var $concat_operator='||'; + var $metaDatabasesSQL = "select datname from pg_database where datname not in ('template0','template1') order by 1"; + var $metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' + and tablename not in ('sql_features', 'sql_implementation_info', 'sql_languages', + 'sql_packages', 'sql_sizing', 'sql_sizing_profiles') + union + select viewname,'V' from pg_views where viewname not like 'pg\_%'"; + //"select tablename from pg_tables where tablename not like 'pg_%' order by 1"; + var $isoDates = true; // accepts dates in ISO format + var $sysDate = "CURRENT_DATE"; + var $sysTimeStamp = "CURRENT_TIMESTAMP"; + var $blobEncodeType = 'C'; + var $metaColumnsSQL = "SELECT a.attname,t.typname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,a.attnum + FROM pg_class c, pg_attribute a,pg_type t + WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s')) and a.attname not like '....%%' + AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // used when schema defined + var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum + FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n + WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s')) + and c.relnamespace=n.oid and n.nspname='%s' + and a.attname not like '....%%' AND a.attnum > 0 + AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // get primary key etc -- from Freek Dijkstra + var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key + FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a + WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid + AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) + AND a.attrelid = bc.oid AND bc.relname = '%s'"; + + var $hasAffectedRows = true; + var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + // below suggested by Freek Dijkstra + var $true = 'TRUE'; // string that represents TRUE for a database + var $false = 'FALSE'; // string that represents FALSE for a database + var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d H:i:s'"; // used by DBTimeStamp as the default timestamp fmt. + var $hasMoveFirst = true; + var $hasGenID = true; + var $_genIDSQL = "SELECT NEXTVAL('%s')"; + var $_genSeqSQL = "CREATE SEQUENCE %s START %s"; + var $_dropSeqSQL = "DROP SEQUENCE %s"; + var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum"; + var $random = 'random()'; /// random function + var $autoRollback = true; // apparently pgsql does not autorollback properly before php 4.3.4 + // http://bugs.php.net/bug.php?id=25404 + + var $uniqueIisR = true; + var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database + var $disableBlobs = false; // set to true to disable blob checking, resulting in 2-5% improvement in performance. + + var $_pnum = 0; + + // The last (fmtTimeStamp is not entirely correct: + // PostgreSQL also has support for time zones, + // and writes these time in this format: "2001-03-01 18:59:26+02". + // There is no code for the "+02" time zone information, so I just left that out. + // I'm not familiar enough with both ADODB as well as Postgres + // to know what the concequences are. The other values are correct (wheren't in 0.94) + // -- Freek Dijkstra + + function __construct() + { + // changes the metaColumnsSQL, adds columns: attnum[6] + } + + function ServerInfo() + { + if (isset($this->version)) return $this->version; + + $arr['description'] = $this->GetOne("select version()"); + $arr['version'] = ADOConnection::_findvers($arr['description']); + $this->version = $arr; + return $arr; + } + + function IfNull( $field, $ifNull ) + { + return " coalesce($field, $ifNull) "; + } + + // get the last id - never tested + function pg_insert_id($tablename,$fieldname) + { + $result=pg_query($this->_connectionID, 'SELECT last_value FROM '. $tablename .'_'. $fieldname .'_seq'); + if ($result) { + $arr = @pg_fetch_row($result,0); + pg_free_result($result); + if (isset($arr[0])) return $arr[0]; + } + return false; + } + + /** + * Warning from http://www.php.net/manual/function.pg-getlastoid.php: + * Using a OID as a unique identifier is not generally wise. + * Unless you are very careful, you might end up with a tuple having + * a different OID if a database must be reloaded. + */ + function _insertid($table,$column) + { + if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; + $oid = pg_getlastoid($this->_resultid); + // to really return the id, we need the table and column-name, else we can only return the oid != id + return empty($table) || empty($column) ? $oid : $this->GetOne("SELECT $column FROM $table WHERE oid=".(int)$oid); + } + + function _affectedrows() + { + if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; + return pg_affected_rows($this->_resultid); + } + + + /** + * @return true/false + */ + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + return pg_query($this->_connectionID, 'begin '.$this->_transmode); + } + + function RowLock($tables,$where,$col='1 as adodbignore') + { + if (!$this->transCnt) $this->BeginTrans(); + return $this->GetOne("select $col from $tables where $where for update"); + } + + // returns true/false. + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + + $this->transCnt -= 1; + return pg_query($this->_connectionID, 'commit'); + } + + // returns true/false + function RollbackTrans() + { + if ($this->transOff) return true; + $this->transCnt -= 1; + return pg_query($this->_connectionID, 'rollback'); + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + $info = $this->ServerInfo(); + if ($info['version'] >= 7.3) { + $this->metaTablesSQL = " + select table_name,'T' from information_schema.tables where table_schema not in ( 'pg_catalog','information_schema') + union + select table_name,'V' from information_schema.views where table_schema not in ( 'pg_catalog','information_schema') "; + } + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtolower($mask)); + if ($info['version']>=7.3) + $this->metaTablesSQL = " + select table_name,'T' from information_schema.tables where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema') + union + select table_name,'V' from information_schema.views where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema') "; + else + $this->metaTablesSQL = " + select tablename,'T' from pg_tables where tablename like $mask + union + select viewname,'V' from pg_views where viewname like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + + // if magic quotes disabled, use pg_escape_string() + function qstr($s,$magic_quotes=false) + { + if (is_bool($s)) return $s ? 'true' : 'false'; + + if (!$magic_quotes) { + if (ADODB_PHPVER >= 0x5200 && $this->_connectionID) { + return "'".pg_escape_string($this->_connectionID,$s)."'"; + } + if (ADODB_PHPVER >= 0x4200) { + return "'".pg_escape_string($s)."'"; + } + if ($this->replaceQuote[0] == '\\'){ + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\\000"),$s); + } + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + return "'$s'"; + } + + + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = 'TO_CHAR('.$col.",'"; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= 'YYYY'; + break; + case 'Q': + case 'q': + $s .= 'Q'; + break; + + case 'M': + $s .= 'Mon'; + break; + + case 'm': + $s .= 'MM'; + break; + case 'D': + case 'd': + $s .= 'DD'; + break; + + case 'H': + $s.= 'HH24'; + break; + + case 'h': + $s .= 'HH'; + break; + + case 'i': + $s .= 'MI'; + break; + + case 's': + $s .= 'SS'; + break; + + case 'a': + case 'A': + $s .= 'AM'; + break; + + case 'w': + $s .= 'D'; + break; + + case 'l': + $s .= 'DAY'; + break; + + case 'W': + $s .= 'WW'; + break; + + default: + // handle escape characters... + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + if (strpos('-/.:;, ',$ch) !== false) $s .= $ch; + else $s .= '"'.$ch.'"'; + + } + } + return $s. "')"; + } + + + + /* + * Load a Large Object from a file + * - the procedure stores the object id in the table and imports the object using + * postgres proprietary blob handling routines + * + * contributed by Mattia Rossi mattia@technologist.com + * modified for safe mode by juraj chlebec + */ + function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') + { + pg_query($this->_connectionID, 'begin'); + + $fd = fopen($path,'r'); + $contents = fread($fd,filesize($path)); + fclose($fd); + + $oid = pg_lo_create($this->_connectionID); + $handle = pg_lo_open($this->_connectionID, $oid, 'w'); + pg_lo_write($handle, $contents); + pg_lo_close($handle); + + // $oid = pg_lo_import ($path); + pg_query($this->_connectionID, 'commit'); + $rs = ADOConnection::UpdateBlob($table,$column,$oid,$where,$blobtype); + $rez = !empty($rs); + return $rez; + } + + /* + * Deletes/Unlinks a Blob from the database, otherwise it + * will be left behind + * + * Returns TRUE on success or FALSE on failure. + * + * contributed by Todd Rogers todd#windfox.net + */ + function BlobDelete( $blob ) + { + pg_query($this->_connectionID, 'begin'); + $result = @pg_lo_unlink($blob); + pg_query($this->_connectionID, 'commit'); + return( $result ); + } + + /* + Hueristic - not guaranteed to work. + */ + function GuessOID($oid) + { + if (strlen($oid)>16) return false; + return is_numeric($oid); + } + + /* + * If an OID is detected, then we use pg_lo_* to open the oid file and read the + * real blob from the db using the oid supplied as a parameter. If you are storing + * blobs using bytea, we autodetect and process it so this function is not needed. + * + * contributed by Mattia Rossi mattia@technologist.com + * + * see http://www.postgresql.org/idocs/index.php?largeobjects.html + * + * Since adodb 4.54, this returns the blob, instead of sending it to stdout. Also + * added maxsize parameter, which defaults to $db->maxblobsize if not defined. + */ + function BlobDecode($blob,$maxsize=false,$hastrans=true) + { + if (!$this->GuessOID($blob)) return $blob; + + if ($hastrans) pg_query($this->_connectionID,'begin'); + $fd = @pg_lo_open($this->_connectionID,$blob,'r'); + if ($fd === false) { + if ($hastrans) pg_query($this->_connectionID,'commit'); + return $blob; + } + if (!$maxsize) $maxsize = $this->maxblobsize; + $realblob = @pg_lo_read($fd,$maxsize); + @pg_loclose($fd); + if ($hastrans) pg_query($this->_connectionID,'commit'); + return $realblob; + } + + /* + See http://www.postgresql.org/idocs/index.php?datatype-binary.html + + NOTE: SQL string literals (input strings) must be preceded with two backslashes + due to the fact that they must pass through two parsers in the PostgreSQL + backend. + */ + function BlobEncode($blob) + { + if (ADODB_PHPVER >= 0x5200) return pg_escape_bytea($this->_connectionID, $blob); + if (ADODB_PHPVER >= 0x4200) return pg_escape_bytea($blob); + + /*92=backslash, 0=null, 39=single-quote*/ + $badch = array(chr(92),chr(0),chr(39)); # \ null ' + $fixch = array('\\\\134','\\\\000','\\\\047'); + return adodb_str_replace($badch,$fixch,$blob); + + // note that there is a pg_escape_bytea function only for php 4.2.0 or later + } + + // assumes bytea for blob, and varchar for clob + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + if ($blobtype == 'CLOB') { + return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where"); + } + // do not use bind params which uses qstr(), as blobencode() already quotes data + return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where"); + } + + function OffsetDate($dayFraction,$date=false) + { + if (!$date) $date = $this->sysDate; + else if (strncmp($date,"'",1) == 0) { + $len = strlen($date); + if (10 <= $len && $len <= 12) $date = 'date '.$date; + else $date = 'timestamp '.$date; + } + + + return "($date+interval'".($dayFraction * 1440)." minutes')"; + #return "($date+interval'$dayFraction days')"; + } + + /** + * Generate the SQL to retrieve MetaColumns data + * @param string $table Table name + * @param string $schema Schema name (can be blank) + * @return string SQL statement to execute + */ + protected function _generateMetaColumnsSQL($table, $schema) + { + if ($schema) { + return sprintf($this->metaColumnsSQL1, $table, $table, $schema); + } + else { + return sprintf($this->metaColumnsSQL, $table, $table, $schema); + } + } + + // for schema support, pass in the $table param "$schema.$tabname". + // converts field names to lowercase, $upper is ignored + // see http://phplens.com/lens/lensforum/msgs.php?id=14018 for more info + function MetaColumns($table,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $false = false; + $this->_findschema($table,$schema); + + if ($normalize) $table = strtolower($table); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + $rs = $this->Execute($this->_generateMetaColumnsSQL($table, $schema)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rs === false) { + return $false; + } + if (!empty($this->metaKeySQL)) { + // If we want the primary keys, we have to issue a separate query + // Of course, a modified version of the metaColumnsSQL query using a + // LEFT JOIN would have been much more elegant, but postgres does + // not support OUTER JOINS. So here is the clumsy way. + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + $rskey = $this->Execute(sprintf($this->metaKeySQL,($table))); + // fetch all result in once for performance. + $keys = $rskey->GetArray(); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + $rskey->Close(); + unset($rskey); + } + + $rsdefa = array(); + if (!empty($this->metaDefaultsSQL)) { + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $sql = sprintf($this->metaDefaultsSQL, ($table)); + $rsdef = $this->Execute($sql); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rsdef) { + while (!$rsdef->EOF) { + $num = $rsdef->fields['num']; + $s = $rsdef->fields['def']; + if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */ + $s = substr($s, 1); + $s = substr($s, 0, strlen($s) - 1); + } + + $rsdefa[$num] = $s; + $rsdef->MoveNext(); + } + } else { + ADOConnection::outp( "==> SQL => " . $sql); + } + unset($rsdef); + } + + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + $fld->attnum = $rs->fields[6]; + + if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4; + if ($fld->max_length <= 0) $fld->max_length = -1; + if ($fld->type == 'numeric') { + $fld->scale = $fld->max_length & 0xFFFF; + $fld->max_length >>= 16; + } + // dannym + // 5 hasdefault; 6 num-of-column + $fld->has_default = ($rs->fields[5] == 't'); + if ($fld->has_default) { + $fld->default_value = $rsdefa[$rs->fields[6]]; + } + + //Freek + $fld->not_null = $rs->fields[4] == 't'; + + + // Freek + if (is_array($keys)) { + foreach($keys as $key) { + if ($fld->name == $key['column_name'] AND $key['primary_key'] == 't') + $fld->primary_key = true; + if ($fld->name == $key['column_name'] AND $key['unique_key'] == 't') + $fld->unique = true; // What name is more compatible? + } + } + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) + return $false; + else + return $retarr; + + } + + function Param($name,$type='C') + { + if ($name) { + $this->_pnum += 1; + } else { + // Reset param num if $name is false + $this->_pnum = 1; + } + return '$'.$this->_pnum; + } + + function MetaIndexes ($table, $primary = FALSE, $owner = false) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $this->_findschema($table,$schema); + + if ($schema) { // requires pgsql 7.3+ - pg_namespace used. + $sql = ' + SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" + FROM pg_catalog.pg_class c + JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid + JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid + ,pg_namespace n + WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\')) + and c.relnamespace=c2.relnamespace + and c.relnamespace=n.oid + and n.nspname=\'%s\''; + } else { + $sql = ' + SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" + FROM pg_catalog.pg_class c + JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid + JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid + WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))'; + } + + if ($primary == FALSE) { + $sql .= ' AND i.indisprimary=false;'; + } + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute(sprintf($sql,$table,$table,$schema)); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + $false = false; + return $false; + } + + $col_names = $this->MetaColumnNames($table,true,true); + //3rd param is use attnum, + // see http://sourceforge.net/tracker/index.php?func=detail&aid=1451245&group_id=42718&atid=433976 + $indexes = array(); + while ($row = $rs->FetchRow()) { + $columns = array(); + foreach (explode(' ', $row[2]) as $col) { + $columns[] = $col_names[$col]; + } + + $indexes[$row[0]] = array( + 'unique' => ($row[1] == 't'), + 'columns' => $columns + ); + } + return $indexes; + } + + // returns true or false + // + // examples: + // $db->Connect("host=host1 user=user1 password=secret port=4341"); + // $db->Connect('host1','user1','secret'); + function _connect($str,$user='',$pwd='',$db='',$ctype=0) + { + if (!function_exists('pg_connect')) return null; + + $this->_errorMsg = false; + + if ($user || $pwd || $db) { + $user = adodb_addslashes($user); + $pwd = adodb_addslashes($pwd); + if (strlen($db) == 0) $db = 'template1'; + $db = adodb_addslashes($db); + if ($str) { + $host = explode(":", $str); + if ($host[0]) $str = "host=".adodb_addslashes($host[0]); + else $str = ''; + if (isset($host[1])) $str .= " port=$host[1]"; + else if (!empty($this->port)) $str .= " port=".$this->port; + } + if ($user) $str .= " user=".$user; + if ($pwd) $str .= " password=".$pwd; + if ($db) $str .= " dbname=".$db; + } + + //if ($user) $linea = "user=$user host=$linea password=$pwd dbname=$db port=5432"; + + if ($ctype === 1) { // persistent + $this->_connectionID = pg_pconnect($str); + } else { + if ($ctype === -1) { // nconnect, we trick pgsql ext by changing the connection str + static $ncnt; + + if (empty($ncnt)) $ncnt = 1; + else $ncnt += 1; + + $str .= str_repeat(' ',$ncnt); + } + $this->_connectionID = pg_connect($str); + } + if ($this->_connectionID === false) return false; + $this->Execute("set datestyle='ISO'"); + + $info = $this->ServerInfo(); + $this->pgVersion = (float) substr($info['version'],0,3); + if ($this->pgVersion >= 7.1) { // good till version 999 + $this->_nestedSQL = true; + } + + # PostgreSQL 9.0 changed the default output for bytea from 'escape' to 'hex' + # PHP does not handle 'hex' properly ('x74657374' is returned as 't657374') + # https://bugs.php.net/bug.php?id=59831 states this is in fact not a bug, + # so we manually set bytea_output + if ( !empty($this->connection->noBlobs) && version_compare($info['version'], '9.0', '>=')) { + $this->Execute('set bytea_output=escape'); + } + + return true; + } + + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName,-1); + } + + // returns true or false + // + // examples: + // $db->PConnect("host=host1 user=user1 password=secret port=4341"); + // $db->PConnect('host1','user1','secret'); + function _pconnect($str,$user='',$pwd='',$db='') + { + return $this->_connect($str,$user,$pwd,$db,1); + } + + + // returns queryID or false + function _query($sql,$inputarr=false) + { + $this->_pnum = 0; + $this->_errorMsg = false; + if ($inputarr) { + /* + It appears that PREPARE/EXECUTE is slower for many queries. + + For query executed 1000 times: + "select id,firstname,lastname from adoxyz + where firstname not like ? and lastname not like ? and id = ?" + + with plan = 1.51861286163 secs + no plan = 1.26903700829 secs + */ + $plan = 'P'.md5($sql); + + $execp = ''; + foreach($inputarr as $v) { + if ($execp) $execp .= ','; + if (is_string($v)) { + if (strncmp($v,"'",1) !== 0) $execp .= $this->qstr($v); + } else { + $execp .= $v; + } + } + + if ($execp) $exsql = "EXECUTE $plan ($execp)"; + else $exsql = "EXECUTE $plan"; + + + $rez = @pg_execute($this->_connectionID,$exsql); + if (!$rez) { + # Perhaps plan does not exist? Prepare/compile plan. + $params = ''; + foreach($inputarr as $v) { + if ($params) $params .= ','; + if (is_string($v)) { + $params .= 'VARCHAR'; + } else if (is_integer($v)) { + $params .= 'INTEGER'; + } else { + $params .= "REAL"; + } + } + $sqlarr = explode('?',$sql); + //print_r($sqlarr); + $sql = ''; + $i = 1; + foreach($sqlarr as $v) { + $sql .= $v.' $'.$i; + $i++; + } + $s = "PREPARE $plan ($params) AS ".substr($sql,0,strlen($sql)-2); + //adodb_pr($s); + $rez = pg_execute($this->_connectionID,$s); + //echo $this->ErrorMsg(); + } + if ($rez) + $rez = pg_execute($this->_connectionID,$exsql); + } else { + //adodb_backtrace(); + $rez = pg_query($this->_connectionID,$sql); + } + // check if no data returned, then no need to create real recordset + if ($rez && pg_num_fields($rez) <= 0) { + if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') { + pg_free_result($this->_resultid); + } + $this->_resultid = $rez; + return true; + } + + return $rez; + } + + function _errconnect() + { + if (defined('DB_ERROR_CONNECT_FAILED')) return DB_ERROR_CONNECT_FAILED; + else return 'Database connection failed'; + } + + /* Returns: the last error message from previous database operation */ + function ErrorMsg() + { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (ADODB_PHPVER >= 0x4300) { + if (!empty($this->_resultid)) { + $this->_errorMsg = @pg_result_error($this->_resultid); + if ($this->_errorMsg) return $this->_errorMsg; + } + + if (!empty($this->_connectionID)) { + $this->_errorMsg = @pg_last_error($this->_connectionID); + } else $this->_errorMsg = $this->_errconnect(); + } else { + if (empty($this->_connectionID)) $this->_errconnect(); + else $this->_errorMsg = @pg_errormessage($this->_connectionID); + } + return $this->_errorMsg; + } + + function ErrorNo() + { + $e = $this->ErrorMsg(); + if (strlen($e)) { + return ADOConnection::MetaError($e); + } + return 0; + } + + // returns true or false + function _close() + { + if ($this->transCnt) $this->RollbackTrans(); + if ($this->_resultid) { + @pg_free_result($this->_resultid); + $this->_resultid = false; + } + @pg_close($this->_connectionID); + $this->_connectionID = false; + return true; + } + + + /* + * Maximum size of C field + */ + function CharMax() + { + return 1000000000; // should be 1 Gb? + } + + /* + * Maximum size of X field + */ + function TextMax() + { + return 1000000000; // should be 1 Gb? + } + + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_postgres64 extends ADORecordSet{ + var $_blobArr; + var $databaseType = "postgres64"; + var $canSeek = true; + + function __construct($queryID, $mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch ($mode) + { + case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break; + case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break; + + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: $this->fetchMode = PGSQL_BOTH; break; + } + $this->adodbFetchMode = $mode; + + // Parent's constructor + parent::__construct($queryID); + } + + function GetRowAssoc($upper = ADODB_ASSOC_CASE) + { + if ($this->fetchMode == PGSQL_ASSOC && $upper == ADODB_ASSOC_CASE_LOWER) { + return $this->fields; + } + $row = ADORecordSet::GetRowAssoc($upper); + return $row; + } + + + function _initrs() + { + global $ADODB_COUNTRECS; + $qid = $this->_queryID; + $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_num_rows($qid):-1; + $this->_numOfFields = @pg_num_fields($qid); + + // cache types for blob decode check + // apparently pg_field_type actually performs an sql query on the database to get the type. + if (empty($this->connection->noBlobs)) + for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { + if (pg_field_type($qid,$i) == 'bytea') { + $this->_blobArr[$i] = pg_field_name($qid,$i); + } + } + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode != PGSQL_NUM) return @$this->fields[$colname]; + + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function FetchField($off = 0) + { + // offsets begin at 0 + + $o= new ADOFieldObject(); + $o->name = @pg_field_name($this->_queryID,$off); + $o->type = @pg_field_type($this->_queryID,$off); + $o->max_length = @pg_fieldsize($this->_queryID,$off); + return $o; + } + + function _seek($row) + { + return @pg_fetch_row($this->_queryID,$row); + } + + function _decode($blob) + { + if ($blob === NULL) return NULL; +// eval('$realblob="'.adodb_str_replace(array('"','$'),array('\"','\$'),$blob).'";'); + return pg_unescape_bytea($blob); + } + + function _fixblobs() + { + if ($this->fetchMode == PGSQL_NUM || $this->fetchMode == PGSQL_BOTH) { + foreach($this->_blobArr as $k => $v) { + $this->fields[$k] = ADORecordSet_postgres64::_decode($this->fields[$k]); + } + } + if ($this->fetchMode == PGSQL_ASSOC || $this->fetchMode == PGSQL_BOTH) { + foreach($this->_blobArr as $k => $v) { + $this->fields[$v] = ADORecordSet_postgres64::_decode($this->fields[$v]); + } + } + } + + // 10% speedup to move MoveNext to child class + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + if (is_array($this->fields) && $this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + return true; + } + } + $this->fields = false; + $this->EOF = true; + } + return false; + } + + function _fetch() + { + + if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) + return false; + + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); + + return (is_array($this->fields)); + } + + function _close() + { + return @pg_free_result($this->_queryID); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + switch (strtoupper($t)) { + case 'MONEY': // stupid, postgres expects money to be a string + case 'INTERVAL': + case 'CHAR': + case 'CHARACTER': + case 'VARCHAR': + case 'NAME': + case 'BPCHAR': + case '_VARCHAR': + case 'INET': + case 'MACADDR': + if ($len <= $this->blobSize) return 'C'; + + case 'TEXT': + return 'X'; + + case 'IMAGE': // user defined type + case 'BLOB': // user defined type + case 'BIT': // This is a bit string, not a single bit, so don't return 'L' + case 'VARBIT': + case 'BYTEA': + return 'B'; + + case 'BOOL': + case 'BOOLEAN': + return 'L'; + + case 'DATE': + return 'D'; + + + case 'TIMESTAMP WITHOUT TIME ZONE': + case 'TIME': + case 'DATETIME': + case 'TIMESTAMP': + case 'TIMESTAMPTZ': + return 'T'; + + case 'SMALLINT': + case 'BIGINT': + case 'INTEGER': + case 'INT8': + case 'INT4': + case 'INT2': + if (isset($fieldobj) && + empty($fieldobj->primary_key) && (!$this->connection->uniqueIisR || empty($fieldobj->unique))) return 'I'; + + case 'OID': + case 'SERIAL': + return 'R'; + + default: + return 'N'; + } + } + +} diff --git a/ehcp/adodb5/drivers/adodb-postgres7.inc.php b/ehcp/adodb5/drivers/adodb-postgres7.inc.php new file mode 100644 index 0000000..ced7fd7 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-postgres7.inc.php @@ -0,0 +1,386 @@ + 0 + AND a.attrelid = c.oid + ORDER BY + a.attnum"; + + // used when schema defined + var $metaColumnsSQL1 = " + SELECT + a.attname, + CASE + WHEN x.sequence_name != '' + THEN 'SERIAL' + ELSE t.typname + END AS typname, + a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum + FROM + pg_class c, + pg_namespace n, + pg_attribute a + JOIN pg_type t ON a.atttypid = t.oid + LEFT JOIN ( + SELECT + c.relname as sequence_name, + c1.relname as related_table, + a.attname as related_column + FROM pg_class c + JOIN pg_depend d ON d.objid = c.oid + LEFT JOIN pg_class c1 ON d.refobjid = c1.oid + LEFT JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) + WHERE c.relkind = 'S' AND c1.relname = '%s' + ) x ON x.related_column= a.attname + WHERE + c.relkind in ('r','v') + AND (c.relname='%s' or c.relname = lower('%s')) + AND c.relnamespace=n.oid and n.nspname='%s' + AND a.attname not like '....%%' + AND a.attnum > 0 + AND a.atttypid = t.oid + AND a.attrelid = c.oid + ORDER BY a.attnum"; + + + function __construct() + { + parent::__construct(); + if (ADODB_ASSOC_CASE !== ADODB_ASSOC_CASE_NATIVE) { + $this->rsPrefix .= 'assoc_'; + } + $this->_bindInputArray = PHP_VERSION >= 5.1; + } + + + // the following should be compat with postgresql 7.2, + // which makes obsolete the LIMIT limit,offset syntax + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $offsetStr = ($offset >= 0) ? " OFFSET ".((integer)$offset) : ''; + $limitStr = ($nrows >= 0) ? " LIMIT ".((integer)$nrows) : ''; + if ($secs2cache) + $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + else + $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr); + + return $rs; + } + + /* + function Prepare($sql) + { + $info = $this->ServerInfo(); + if ($info['version']>=7.3) { + return array($sql,false); + } + return $sql; + } + */ + + /** + * Generate the SQL to retrieve MetaColumns data + * @param string $table Table name + * @param string $schema Schema name (can be blank) + * @return string SQL statement to execute + */ + protected function _generateMetaColumnsSQL($table, $schema) + { + if ($schema) { + return sprintf($this->metaColumnsSQL1, $table, $table, $table, $schema); + } + else { + return sprintf($this->metaColumnsSQL, $table, $table, $schema); + } + } + + /** + * @returns assoc array where keys are tables, and values are foreign keys + */ + function MetaForeignKeys($table, $owner=false, $upper=false) + { + # Regex isolates the 2 terms between parenthesis using subexpressions + $regex = '^.*\((.*)\).*\((.*)\).*$'; + $sql=" + SELECT + lookup_table, + regexp_replace(consrc, '$regex', '\\2') AS lookup_field, + dep_table, + regexp_replace(consrc, '$regex', '\\1') AS dep_field + FROM ( + SELECT + pg_get_constraintdef(c.oid) AS consrc, + t.relname AS dep_table, + ft.relname AS lookup_table + FROM pg_constraint c + JOIN pg_class t ON (t.oid = c.conrelid) + JOIN pg_class ft ON (ft.oid = c.confrelid) + JOIN pg_namespace nft ON (nft.oid = ft.relnamespace) + LEFT JOIN pg_description ds ON (ds.objoid = c.oid) + JOIN pg_namespace n ON (n.oid = t.relnamespace) + WHERE c.contype = 'f'::\"char\" + ORDER BY t.relname, n.nspname, c.conname, c.oid + ) constraints + WHERE + dep_table='".strtolower($table)."' + ORDER BY + lookup_table, + dep_table, + dep_field"; + $rs = $this->Execute($sql); + + if (!$rs || $rs->EOF) return false; + + $a = array(); + while (!$rs->EOF) { + if ($upper) { + $a[strtoupper($rs->Fields('lookup_table'))][] = strtoupper(str_replace('"','',$rs->Fields('dep_field').'='.$rs->Fields('lookup_field'))); + } else { + $a[$rs->Fields('lookup_table')][] = str_replace('"','',$rs->Fields('dep_field').'='.$rs->Fields('lookup_field')); + } + $rs->MoveNext(); + } + + return $a; + + } + + // from Edward Jaramilla, improved version - works on pg 7.4 + function _old_MetaForeignKeys($table, $owner=false, $upper=false) + { + $sql = 'SELECT t.tgargs as args + FROM + pg_trigger t,pg_class c,pg_proc p + WHERE + t.tgenabled AND + t.tgrelid = c.oid AND + t.tgfoid = p.oid AND + p.proname = \'RI_FKey_check_ins\' AND + c.relname = \''.strtolower($table).'\' + ORDER BY + t.tgrelid'; + + $rs = $this->Execute($sql); + + if (!$rs || $rs->EOF) return false; + + $arr = $rs->GetArray(); + $a = array(); + foreach($arr as $v) { + $data = explode(chr(0), $v['args']); + $size = count($data)-1; //-1 because the last node is empty + for($i = 4; $i < $size; $i++) { + if ($upper) + $a[strtoupper($data[2])][] = strtoupper($data[$i].'='.$data[++$i]); + else + $a[$data[2]][] = $data[$i].'='.$data[++$i]; + } + } + return $a; + } + + function _query($sql,$inputarr=false) + { + if (! $this->_bindInputArray) { + // We don't have native support for parameterized queries, so let's emulate it at the parent + return ADODB_postgres64::_query($sql, $inputarr); + } + + $this->_pnum = 0; + $this->_errorMsg = false; + // -- added Cristiano da Cunha Duarte + if ($inputarr) { + $sqlarr = explode('?',trim($sql)); + $sql = ''; + $i = 1; + $last = sizeof($sqlarr)-1; + foreach($sqlarr as $v) { + if ($last < $i) $sql .= $v; + else $sql .= $v.' $'.$i; + $i++; + } + + $rez = pg_query_params($this->_connectionID,$sql, $inputarr); + } else { + $rez = pg_query($this->_connectionID,$sql); + } + // check if no data returned, then no need to create real recordset + if ($rez && pg_num_fields($rez) <= 0) { + if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') { + pg_free_result($this->_resultid); + } + $this->_resultid = $rez; + return true; + } + return $rez; + } + + // this is a set of functions for managing client encoding - very important if the encodings + // of your database and your output target (i.e. HTML) don't match + //for instance, you may have UNICODE database and server it on-site as WIN1251 etc. + // GetCharSet - get the name of the character set the client is using now + // the functions should work with Postgres 7.0 and above, the set of charsets supported + // depends on compile flags of postgres distribution - if no charsets were compiled into the server + // it will return 'SQL_ANSI' always + function GetCharSet() + { + //we will use ADO's builtin property charSet + $this->charSet = @pg_client_encoding($this->_connectionID); + if (!$this->charSet) { + return false; + } else { + return $this->charSet; + } + } + + // SetCharSet - switch the client encoding + function SetCharSet($charset_name) + { + $this->GetCharSet(); + if ($this->charSet !== $charset_name) { + $if = pg_set_client_encoding($this->_connectionID, $charset_name); + if ($if == "0" & $this->GetCharSet() == $charset_name) { + return true; + } else return false; + } else return true; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_postgres7 extends ADORecordSet_postgres64{ + + var $databaseType = "postgres7"; + + + function __construct($queryID, $mode=false) + { + parent::__construct($queryID, $mode); + } + + // 10% speedup to move MoveNext to child class + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if (is_array($this->fields)) { + if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); + return true; + } + } + $this->fields = false; + $this->EOF = true; + } + return false; + } + +} + +class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{ + + var $databaseType = "postgres7"; + + + function __construct($queryID, $mode=false) + { + parent::__construct($queryID, $mode); + } + + function _fetch() + { + if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) { + return false; + } + + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if ($this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + $this->_updatefields(); + } + + return (is_array($this->fields)); + } + + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if (is_array($this->fields)) { + if ($this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + + $this->_updatefields(); + } + return true; + } + } + + + $this->fields = false; + $this->EOF = true; + } + return false; + } +} diff --git a/ehcp/adodb5/drivers/adodb-postgres8.inc.php b/ehcp/adodb5/drivers/adodb-postgres8.inc.php new file mode 100644 index 0000000..cf5325f --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-postgres8.inc.php @@ -0,0 +1,50 @@ +GetOne("SELECT lastval()") + : $this->GetOne("SELECT currval(pg_get_serial_sequence('$table', '$column'))"); + } +} + +class ADORecordSet_postgres8 extends ADORecordSet_postgres7 +{ + var $databaseType = "postgres8"; +} + +class ADORecordSet_assoc_postgres8 extends ADORecordSet_assoc_postgres7 +{ + var $databaseType = "postgres8"; +} diff --git a/ehcp/adodb5/drivers/adodb-postgres9.inc.php b/ehcp/adodb5/drivers/adodb-postgres9.inc.php new file mode 100644 index 0000000..9b30d8a --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-postgres9.inc.php @@ -0,0 +1,32 @@ +curmode = SQL_CUR_USE_ODBC; + parent::__construct(); + } + + function ServerInfo() + { + $info = ADODB_odbc::ServerInfo(); + if (!$info['version'] && preg_match('/([0-9.]+)/',$info['description'],$matches)) { + $info['version'] = $matches[1]; + } + return $info; + } + + function MetaPrimaryKeys($table, $owner = false) + { + $table = $this->Quote(strtoupper($table)); + + return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"); + } + + function MetaIndexes ($table, $primary = FALSE, $owner = false) + { + $table = $this->Quote(strtoupper($table)); + + $sql = "SELECT INDEXNAME,TYPE,COLUMNNAME FROM INDEXCOLUMNS ". + " WHERE TABLENAME=$table". + " ORDER BY INDEXNAME,COLUMNNO"; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute($sql); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + return FALSE; + } + + $indexes = array(); + while ($row = $rs->FetchRow()) { + $indexes[$row[0]]['unique'] = $row[1] == 'UNIQUE'; + $indexes[$row[0]]['columns'][] = $row[2]; + } + if ($primary) { + $indexes['SYSPRIMARYKEYINDEX'] = array( + 'unique' => True, // by definition + 'columns' => $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"), + ); + } + return $indexes; + } + + function MetaColumns ($table, $normalize = true) + { + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + $table = $this->Quote(strtoupper($table)); + + $retarr = array(); + foreach($this->GetAll("SELECT COLUMNNAME,DATATYPE,LEN,DEC,NULLABLE,MODE,\"DEFAULT\",CASE WHEN \"DEFAULT\" IS NULL THEN 0 ELSE 1 END AS HAS_DEFAULT FROM COLUMNS WHERE tablename=$table ORDER BY pos") as $column) + { + $fld = new ADOFieldObject(); + $fld->name = $column[0]; + $fld->type = $column[1]; + $fld->max_length = $fld->type == 'LONG' ? 2147483647 : $column[2]; + $fld->scale = $column[3]; + $fld->not_null = $column[4] == 'NO'; + $fld->primary_key = $column[5] == 'KEY'; + if ($fld->has_default = $column[7]) { + if ($fld->primary_key && $column[6] == 'DEFAULT SERIAL (1)') { + $fld->auto_increment = true; + $fld->has_default = false; + } else { + $fld->default_value = $column[6]; + switch($fld->type) { + case 'VARCHAR': + case 'CHARACTER': + case 'LONG': + $fld->default_value = $column[6]; + break; + default: + $fld->default_value = trim($column[6]); + break; + } + } + } + $retarr[$fld->name] = $fld; + } + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + return $retarr; + } + + function MetaColumnNames($table, $numIndexes = false, $useattnum = false) + { + $table = $this->Quote(strtoupper($table)); + + return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table ORDER BY pos"); + } + + // unlike it seems, this depends on the db-session and works in a multiuser environment + function _insertid($table,$column) + { + return empty($table) ? False : $this->GetOne("SELECT $table.CURRVAL FROM DUAL"); + } + + /* + SelectLimit implementation problems: + + The following will return random 10 rows as order by performed after "WHERE rowno<10" + which is not ideal... + + select * from table where rowno < 10 order by 1 + + This means that we have to use the adoconnection base class SelectLimit when + there is an "order by". + + See http://listserv.sap.com/pipermail/sapdb.general/2002-January/010405.html + */ + +}; + + +class ADORecordSet_sapdb extends ADORecordSet_odbc { + + var $databaseType = "sapdb"; + + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } +} + +} //define diff --git a/ehcp/adodb5/drivers/adodb-sqlanywhere.inc.php b/ehcp/adodb5/drivers/adodb-sqlanywhere.inc.php new file mode 100644 index 0000000..77cd961 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sqlanywhere.inc.php @@ -0,0 +1,165 @@ +create_blobvar($blobVarName); + + b) load blob var from file. $filename must be complete path + + $dbcon->load_blobvar_from_file($blobVarName, $filename); + + c) Use the $blobVarName in SQL insert or update statement in the values + clause: + + $recordSet = $dbconn->Execute('INSERT INTO tabname (idcol, blobcol) ' + . + 'VALUES (\'test\', ' . $blobVarName . ')'); + + instead of loading blob from a file, you can also load from + an unformatted (raw) blob variable: + $dbcon->load_blobvar_from_var($blobVarName, $varName); + + d) drop blob variable on db server to free up resources: + $dbconn->drop_blobvar($blobVarName); + + Sybase_SQLAnywhere data driver. Requires ODBC. + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +if (!defined('_ADODB_ODBC_LAYER')) { + include(ADODB_DIR."/drivers/adodb-odbc.inc.php"); +} + +if (!defined('ADODB_SYBASE_SQLANYWHERE')){ + + define('ADODB_SYBASE_SQLANYWHERE',1); + + class ADODB_sqlanywhere extends ADODB_odbc { + var $databaseType = "sqlanywhere"; + var $hasInsertID = true; + + function _insertid() { + return $this->GetOne('select @@identity'); + } + + function create_blobvar($blobVarName) { + $this->Execute("create variable $blobVarName long binary"); + return; + } + + function drop_blobvar($blobVarName) { + $this->Execute("drop variable $blobVarName"); + return; + } + + function load_blobvar_from_file($blobVarName, $filename) { + $chunk_size = 1000; + + $fd = fopen ($filename, "rb"); + + $integer_chunks = (integer)filesize($filename) / $chunk_size; + $modulus = filesize($filename) % $chunk_size; + if ($modulus != 0){ + $integer_chunks += 1; + } + + for($loop=1;$loop<=$integer_chunks;$loop++){ + $contents = fread ($fd, $chunk_size); + $contents = bin2hex($contents); + + $hexstring = ''; + + for($loop2=0;$loop2qstr($hexstring); + + $this->Execute("set $blobVarName = $blobVarName || " . $hexstring); + } + + fclose ($fd); + return; + } + + function load_blobvar_from_var($blobVarName, &$varName) { + $chunk_size = 1000; + + $integer_chunks = (integer)strlen($varName) / $chunk_size; + $modulus = strlen($varName) % $chunk_size; + if ($modulus != 0){ + $integer_chunks += 1; + } + + for($loop=1;$loop<=$integer_chunks;$loop++){ + $contents = substr ($varName, (($loop - 1) * $chunk_size), $chunk_size); + $contents = bin2hex($contents); + + $hexstring = ''; + + for($loop2=0;$loop2qstr($hexstring); + + $this->Execute("set $blobVarName = $blobVarName || " . $hexstring); + } + + return; + } + + /* + Insert a null into the blob field of the table first. + Then use UpdateBlob to store the blob. + + Usage: + + $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + function UpdateBlob($table,$column,&$val,$where,$blobtype='BLOB') + { + $blobVarName = 'hold_blob'; + $this->create_blobvar($blobVarName); + $this->load_blobvar_from_var($blobVarName, $val); + $this->Execute("UPDATE $table SET $column=$blobVarName WHERE $where"); + $this->drop_blobvar($blobVarName); + return true; + } + }; //class + + class ADORecordSet_sqlanywhere extends ADORecordSet_odbc { + + var $databaseType = "sqlanywhere"; + + function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } + + + }; //class + + +} //define diff --git a/ehcp/adodb5/drivers/adodb-sqlite.inc.php b/ehcp/adodb5/drivers/adodb-sqlite.inc.php new file mode 100644 index 0000000..033b71b --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sqlite.inc.php @@ -0,0 +1,451 @@ +transOff) { + return true; + } + $ret = $this->Execute("BEGIN TRANSACTION"); + $this->transCnt += 1; + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) { + return true; + } + if (!$ok) { + return $this->RollbackTrans(); + } + $ret = $this->Execute("COMMIT"); + if ($this->transCnt > 0) { + $this->transCnt -= 1; + } + return !empty($ret); + } + + function RollbackTrans() + { + if ($this->transOff) { + return true; + } + $ret = $this->Execute("ROLLBACK"); + if ($this->transCnt > 0) { + $this->transCnt -= 1; + } + return !empty($ret); + } + + // mark newnham + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + $rs = $this->Execute("PRAGMA table_info('$table')"); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + if (!$rs) { + $ADODB_FETCH_MODE = $save; + return $false; + } + $arr = array(); + while ($r = $rs->FetchRow()) { + $type = explode('(',$r['type']); + $size = ''; + if (sizeof($type)==2) { + $size = trim($type[1],')'); + } + $fn = strtoupper($r['name']); + $fld = new ADOFieldObject; + $fld->name = $r['name']; + $fld->type = $type[0]; + $fld->max_length = $size; + $fld->not_null = $r['notnull']; + $fld->default_value = $r['dflt_value']; + $fld->scale = 0; + if (isset($r['pk']) && $r['pk']) { + $fld->primary_key=1; + } + if ($save == ADODB_FETCH_NUM) { + $arr[] = $fld; + } else { + $arr[strtoupper($fld->name)] = $fld; + } + } + $rs->Close(); + $ADODB_FETCH_MODE = $save; + return $arr; + } + + function _init($parentDriver) + { + $parentDriver->hasTransactions = false; + $parentDriver->hasInsertID = true; + } + + function _insertid() + { + return sqlite_last_insert_rowid($this->_connectionID); + } + + function _affectedrows() + { + return sqlite_changes($this->_connectionID); + } + + function ErrorMsg() + { + if ($this->_logsql) { + return $this->_errorMsg; + } + return ($this->_errorNo) ? sqlite_error_string($this->_errorNo) : ''; + } + + function ErrorNo() + { + return $this->_errorNo; + } + + function SQLDate($fmt, $col=false) + { + $fmt = $this->qstr($fmt); + return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)"; + } + + + function _createFunctions() + { + @sqlite_create_function($this->_connectionID, 'adodb_date', 'adodb_date', 1); + @sqlite_create_function($this->_connectionID, 'adodb_date2', 'adodb_date2', 2); + } + + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('sqlite_open')) { + return null; + } + if (empty($argHostname) && $argDatabasename) { + $argHostname = $argDatabasename; + } + + $this->_connectionID = sqlite_open($argHostname); + if ($this->_connectionID === false) { + return false; + } + $this->_createFunctions(); + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('sqlite_open')) { + return null; + } + if (empty($argHostname) && $argDatabasename) { + $argHostname = $argDatabasename; + } + + $this->_connectionID = sqlite_popen($argHostname); + if ($this->_connectionID === false) { + return false; + } + $this->_createFunctions(); + return true; + } + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + $rez = sqlite_query($sql,$this->_connectionID); + if (!$rez) { + $this->_errorNo = sqlite_last_error($this->_connectionID); + } + // If no data was returned, we don't need to create a real recordset + // Note: this code is untested, as I don't have a sqlite2 setup available + elseif (sqlite_num_fields($rez) == 0) { + $rez = true; + } + + return $rez; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; + $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : ''); + if ($secs2cache) { + $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + } else { + $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr); + } + + return $rs; + } + + /* + This algorithm is not very efficient, but works even if table locking + is not available. + + Will return false if unable to generate an ID after $MAXLOOPS attempts. + */ + var $_genSeqSQL = "create table %s (id integer)"; + + function GenID($seq='adodbseq',$start=1) + { + // if you have to modify the parameter below, your database is overloaded, + // or you need to implement generation of id's yourself! + $MAXLOOPS = 100; + //$this->debug=1; + while (--$MAXLOOPS>=0) { + @($num = $this->GetOne("select id from $seq")); + if ($num === false) { + $this->Execute(sprintf($this->_genSeqSQL ,$seq)); + $start -= 1; + $num = '0'; + $ok = $this->Execute("insert into $seq values($start)"); + if (!$ok) { + return false; + } + } + $this->Execute("update $seq set id=id+1 where id=$num"); + + if ($this->affected_rows() > 0) { + $num += 1; + $this->genID = $num; + return $num; + } + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); + } + return false; + } + + function CreateSequence($seqname='adodbseq',$start=1) + { + if (empty($this->_genSeqSQL)) { + return false; + } + $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); + if (!$ok) { + return false; + } + $start -= 1; + return $this->Execute("insert into $seqname values($start)"); + } + + var $_dropSeqSQL = 'drop table %s'; + function DropSequence($seqname = 'adodbseq') + { + if (empty($this->_dropSeqSQL)) { + return false; + } + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + // returns true or false + function _close() + { + return @sqlite_close($this->_connectionID); + } + + function MetaIndexes($table, $primary = FALSE, $owner = false) + { + $false = false; + // save old fetch mode + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + $SQL=sprintf("SELECT name,sql FROM sqlite_master WHERE type='index' AND tbl_name='%s'", strtolower($table)); + $rs = $this->Execute($SQL); + if (!is_object($rs)) { + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return $false; + } + + $indexes = array (); + while ($row = $rs->FetchRow()) { + if ($primary && preg_match("/primary/i",$row[1]) == 0) { + continue; + } + if (!isset($indexes[$row[0]])) { + $indexes[$row[0]] = array( + 'unique' => preg_match("/unique/i",$row[1]), + 'columns' => array() + ); + } + /** + * There must be a more elegant way of doing this, + * the index elements appear in the SQL statement + * in cols[1] between parentheses + * e.g CREATE UNIQUE INDEX ware_0 ON warehouse (org,warehouse) + */ + $cols = explode("(",$row[1]); + $cols = explode(")",$cols[1]); + array_pop($cols); + $indexes[$row[0]]['columns'] = $cols; + } + if (isset($savem)) { + $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + } + return $indexes; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_sqlite extends ADORecordSet { + + var $databaseType = "sqlite"; + var $bind = false; + + function __construct($queryID,$mode=false) + { + + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch($mode) { + case ADODB_FETCH_NUM: + $this->fetchMode = SQLITE_NUM; + break; + case ADODB_FETCH_ASSOC: + $this->fetchMode = SQLITE_ASSOC; + break; + default: + $this->fetchMode = SQLITE_BOTH; + break; + } + $this->adodbFetchMode = $mode; + + $this->_queryID = $queryID; + + $this->_inited = true; + $this->fields = array(); + if ($queryID) { + $this->_currentRow = 0; + $this->EOF = !$this->_fetch(); + @$this->_initrs(); + } else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + $this->EOF = true; + } + + return $this->_queryID; + } + + + function FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $fld->name = sqlite_field_name($this->_queryID, $fieldOffset); + $fld->type = 'VARCHAR'; + $fld->max_length = -1; + return $fld; + } + + function _initrs() + { + $this->_numOfRows = @sqlite_num_rows($this->_queryID); + $this->_numOfFields = @sqlite_num_fields($this->_queryID); + } + + function Fields($colname) + { + if ($this->fetchMode != SQLITE_NUM) { + return $this->fields[$colname]; + } + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function _seek($row) + { + return sqlite_seek($this->_queryID, $row); + } + + function _fetch($ignore_fields=false) + { + $this->fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode); + return !empty($this->fields); + } + + function _close() + { + } + +} diff --git a/ehcp/adodb5/drivers/adodb-sqlite3.inc.php b/ehcp/adodb5/drivers/adodb-sqlite3.inc.php new file mode 100644 index 0000000..302271e --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sqlite3.inc.php @@ -0,0 +1,438 @@ +transOff) { + return true; + } + $ret = $this->Execute("BEGIN TRANSACTION"); + $this->transCnt += 1; + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) { + return true; + } + if (!$ok) { + return $this->RollbackTrans(); + } + $ret = $this->Execute("COMMIT"); + if ($this->transCnt > 0) { + $this->transCnt -= 1; + } + return !empty($ret); + } + + function RollbackTrans() + { + if ($this->transOff) { + return true; + } + $ret = $this->Execute("ROLLBACK"); + if ($this->transCnt > 0) { + $this->transCnt -= 1; + } + return !empty($ret); + } + + // mark newnham + function MetaColumns($table, $normalize=true) + { + global $ADODB_FETCH_MODE; + $false = false; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($this->fetchMode !== false) { + $savem = $this->SetFetchMode(false); + } + $rs = $this->Execute("PRAGMA table_info('$table')"); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + if (!$rs) { + $ADODB_FETCH_MODE = $save; + return $false; + } + $arr = array(); + while ($r = $rs->FetchRow()) { + $type = explode('(',$r['type']); + $size = ''; + if (sizeof($type)==2) { + $size = trim($type[1],')'); + } + $fn = strtoupper($r['name']); + $fld = new ADOFieldObject; + $fld->name = $r['name']; + $fld->type = $type[0]; + $fld->max_length = $size; + $fld->not_null = $r['notnull']; + $fld->default_value = $r['dflt_value']; + $fld->scale = 0; + if (isset($r['pk']) && $r['pk']) { + $fld->primary_key=1; + } + if ($save == ADODB_FETCH_NUM) { + $arr[] = $fld; + } else { + $arr[strtoupper($fld->name)] = $fld; + } + } + $rs->Close(); + $ADODB_FETCH_MODE = $save; + return $arr; + } + + function _init($parentDriver) + { + $parentDriver->hasTransactions = false; + $parentDriver->hasInsertID = true; + } + + function _insertid() + { + return $this->_connectionID->lastInsertRowID(); + } + + function _affectedrows() + { + return $this->_connectionID->changes(); + } + + function ErrorMsg() + { + if ($this->_logsql) { + return $this->_errorMsg; + } + return ($this->_errorNo) ? $this->ErrorNo() : ''; //**tochange? + } + + function ErrorNo() + { + return $this->_connectionID->lastErrorCode(); //**tochange?? + } + + function SQLDate($fmt, $col=false) + { + $fmt = $this->qstr($fmt); + return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)"; + } + + + function _createFunctions() + { + $this->_connectionID->createFunction('adodb_date', 'adodb_date', 1); + $this->_connectionID->createFunction('adodb_date2', 'adodb_date2', 2); + } + + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (empty($argHostname) && $argDatabasename) { + $argHostname = $argDatabasename; + } + $this->_connectionID = new SQLite3($argHostname); + $this->_createFunctions(); + + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + // There's no permanent connect in SQLite3 + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); + } + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + $rez = $this->_connectionID->query($sql); + if ($rez === false) { + $this->_errorNo = $this->_connectionID->lastErrorCode(); + } + // If no data was returned, we don't need to create a real recordset + elseif ($rez->numColumns() == 0) { + $rez->finalize(); + $rez = true; + } + + return $rez; + } + + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; + $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : ''); + if ($secs2cache) { + $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + } else { + $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr); + } + + return $rs; + } + + /* + This algorithm is not very efficient, but works even if table locking + is not available. + + Will return false if unable to generate an ID after $MAXLOOPS attempts. + */ + var $_genSeqSQL = "create table %s (id integer)"; + + function GenID($seq='adodbseq',$start=1) + { + // if you have to modify the parameter below, your database is overloaded, + // or you need to implement generation of id's yourself! + $MAXLOOPS = 100; + //$this->debug=1; + while (--$MAXLOOPS>=0) { + @($num = $this->GetOne("select id from $seq")); + if ($num === false) { + $this->Execute(sprintf($this->_genSeqSQL ,$seq)); + $start -= 1; + $num = '0'; + $ok = $this->Execute("insert into $seq values($start)"); + if (!$ok) { + return false; + } + } + $this->Execute("update $seq set id=id+1 where id=$num"); + + if ($this->affected_rows() > 0) { + $num += 1; + $this->genID = $num; + return $num; + } + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); + } + return false; + } + + function CreateSequence($seqname='adodbseq',$start=1) + { + if (empty($this->_genSeqSQL)) { + return false; + } + $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); + if (!$ok) { + return false; + } + $start -= 1; + return $this->Execute("insert into $seqname values($start)"); + } + + var $_dropSeqSQL = 'drop table %s'; + function DropSequence($seqname = 'adodbseq') + { + if (empty($this->_dropSeqSQL)) { + return false; + } + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + // returns true or false + function _close() + { + return $this->_connectionID->close(); + } + + function MetaIndexes($table, $primary = FALSE, $owner = false) + { + $false = false; + // save old fetch mode + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + $SQL=sprintf("SELECT name,sql FROM sqlite_master WHERE type='index' AND tbl_name='%s'", strtolower($table)); + $rs = $this->Execute($SQL); + if (!is_object($rs)) { + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + return $false; + } + + $indexes = array (); + while ($row = $rs->FetchRow()) { + if ($primary && preg_match("/primary/i",$row[1]) == 0) { + continue; + } + if (!isset($indexes[$row[0]])) { + $indexes[$row[0]] = array( + 'unique' => preg_match("/unique/i",$row[1]), + 'columns' => array() + ); + } + /** + * There must be a more elegant way of doing this, + * the index elements appear in the SQL statement + * in cols[1] between parentheses + * e.g CREATE UNIQUE INDEX ware_0 ON warehouse (org,warehouse) + */ + $cols = explode("(",$row[1]); + $cols = explode(")",$cols[1]); + array_pop($cols); + $indexes[$row[0]]['columns'] = $cols; + } + if (isset($savem)) { + $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + } + return $indexes; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordset_sqlite3 extends ADORecordSet { + + var $databaseType = "sqlite3"; + var $bind = false; + + function __construct($queryID,$mode=false) + { + + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch($mode) { + case ADODB_FETCH_NUM: + $this->fetchMode = SQLITE3_NUM; + break; + case ADODB_FETCH_ASSOC: + $this->fetchMode = SQLITE3_ASSOC; + break; + default: + $this->fetchMode = SQLITE3_BOTH; + break; + } + $this->adodbFetchMode = $mode; + + $this->_queryID = $queryID; + + $this->_inited = true; + $this->fields = array(); + if ($queryID) { + $this->_currentRow = 0; + $this->EOF = !$this->_fetch(); + @$this->_initrs(); + } else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + $this->EOF = true; + } + + return $this->_queryID; + } + + + function FetchField($fieldOffset = -1) + { + $fld = new ADOFieldObject; + $fld->name = $this->_queryID->columnName($fieldOffset); + $fld->type = 'VARCHAR'; + $fld->max_length = -1; + return $fld; + } + + function _initrs() + { + $this->_numOfFields = $this->_queryID->numColumns(); + + } + + function Fields($colname) + { + if ($this->fetchMode != SQLITE3_NUM) { + return $this->fields[$colname]; + } + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function _seek($row) + { + // sqlite3 does not implement seek + if ($this->debug) { + ADOConnection::outp("SQLite3 does not implement seek"); + } + return false; + } + + function _fetch($ignore_fields=false) + { + $this->fields = $this->_queryID->fetchArray($this->fetchMode); + return !empty($this->fields); + } + + function _close() + { + } + +} diff --git a/ehcp/adodb5/drivers/adodb-sqlitepo.inc.php b/ehcp/adodb5/drivers/adodb-sqlitepo.inc.php new file mode 100644 index 0000000..f3929c9 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sqlitepo.inc.php @@ -0,0 +1,58 @@ +fields = array(); + $fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode); + if(is_array($fields)) + foreach($fields as $n => $v) + { + if(($p = strpos($n, ".")) !== false) + $n = substr($n, $p+1); + $this->fields[$n] = $v; + } + + return !empty($this->fields); + } +} diff --git a/ehcp/adodb5/drivers/adodb-sybase.inc.php b/ehcp/adodb5/drivers/adodb-sybase.inc.php new file mode 100644 index 0000000..e1c805e --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sybase.inc.php @@ -0,0 +1,443 @@ +GetOne('select @@identity'); + } + // might require begintrans -- committrans + function _affectedrows() + { + return $this->GetOne('select @@rowcount'); + } + + + function BeginTrans() + { + + if ($this->transOff) return true; + $this->transCnt += 1; + + $this->Execute('BEGIN TRAN'); + return true; + } + + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + + if (!$ok) return $this->RollbackTrans(); + + $this->transCnt -= 1; + $this->Execute('COMMIT TRAN'); + return true; + } + + function RollbackTrans() + { + if ($this->transOff) return true; + $this->transCnt -= 1; + $this->Execute('ROLLBACK TRAN'); + return true; + } + + // http://www.isug.com/Sybase_FAQ/ASE/section6.1.html#6.1.4 + function RowLock($tables,$where,$col='top 1 null as ignore') + { + if (!$this->_hastrans) $this->BeginTrans(); + $tables = str_replace(',',' HOLDLOCK,',$tables); + return $this->GetOne("select $col from $tables HOLDLOCK where $where"); + + } + + function SelectDB($dbName) + { + $this->database = $dbName; + $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions + if ($this->_connectionID) { + return @sybase_select_db($dbName); + } + else return false; + } + + /* Returns: the last error message from previous database operation + Note: This function is NOT available for Microsoft SQL Server. */ + + + function ErrorMsg() + { + if ($this->_logsql) return $this->_errorMsg; + if (function_exists('sybase_get_last_message')) + $this->_errorMsg = sybase_get_last_message(); + else + $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : 'SYBASE error messages not supported on this platform'; + return $this->_errorMsg; + } + + // returns true or false + function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('sybase_connect')) return null; + + // Sybase connection on custom port + if ($this->port) { + $argHostname .= ':' . $this->port; + } + + if ($this->charSet) { + $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword, $this->charSet); + } else { + $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword); + } + + if ($this->_connectionID === false) return false; + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + // returns true or false + function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) + { + if (!function_exists('sybase_connect')) return null; + + // Sybase connection on custom port + if ($this->port) { + $argHostname .= ':' . $this->port; + } + + if ($this->charSet) { + $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword, $this->charSet); + } else { + $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword); + } + + if ($this->_connectionID === false) return false; + if ($argDatabasename) return $this->SelectDB($argDatabasename); + return true; + } + + // returns query ID if successful, otherwise false + function _query($sql,$inputarr=false) + { + global $ADODB_COUNTRECS; + + if ($ADODB_COUNTRECS == false && ADODB_PHPVER >= 0x4300) + return sybase_unbuffered_query($sql,$this->_connectionID); + else + return sybase_query($sql,$this->_connectionID); + } + + // See http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.12 + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + if ($secs2cache > 0) {// we do not cache rowcount, so we have to load entire recordset + $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $rs; + } + + $nrows = (integer) $nrows; + $offset = (integer) $offset; + + $cnt = ($nrows >= 0) ? $nrows : 999999999; + if ($offset > 0 && $cnt) $cnt += $offset; + + $this->Execute("set rowcount $cnt"); + $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,0); + $this->Execute("set rowcount 0"); + + return $rs; + } + + // returns true or false + function _close() + { + return @sybase_close($this->_connectionID); + } + + static function UnixDate($v) + { + return ADORecordSet_array_sybase::UnixDate($v); + } + + static function UnixTimeStamp($v) + { + return ADORecordSet_array_sybase::UnixTimeStamp($v); + } + + + + # Added 2003-10-05 by Chris Phillipson + # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=16756?target=%25N%15_12018_START_RESTART_N%25 + # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = ''; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + if ($s) $s .= '+'; + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= "datename(yy,$col)"; + break; + case 'M': + $s .= "convert(char(3),$col,0)"; + break; + case 'm': + $s .= "str_replace(str(month($col),2),' ','0')"; + break; + case 'Q': + case 'q': + $s .= "datename(qq,$col)"; + break; + case 'D': + case 'd': + $s .= "str_replace(str(datepart(dd,$col),2),' ','0')"; + break; + case 'h': + $s .= "substring(convert(char(14),$col,0),13,2)"; + break; + + case 'H': + $s .= "str_replace(str(datepart(hh,$col),2),' ','0')"; + break; + + case 'i': + $s .= "str_replace(str(datepart(mi,$col),2),' ','0')"; + break; + case 's': + $s .= "str_replace(str(datepart(ss,$col),2),' ','0')"; + break; + case 'a': + case 'A': + $s .= "substring(convert(char(19),$col,0),18,2)"; + break; + + default: + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + $s .= $this->qstr($ch); + break; + } + } + return $s; + } + + # Added 2003-10-07 by Chris Phillipson + # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=5981;uf=0?target=0;window=new;showtoc=true;book=dbrfen8 + # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version + function MetaPrimaryKeys($table, $owner = false) + { + $sql = "SELECT c.column_name " . + "FROM syscolumn c, systable t " . + "WHERE t.table_name='$table' AND c.table_id=t.table_id " . + "AND t.table_type='BASE' " . + "AND c.pkey = 'Y' " . + "ORDER BY c.column_id"; + + $a = $this->GetCol($sql); + if ($a && sizeof($a)>0) return $a; + return false; + } +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ +global $ADODB_sybase_mths; +$ADODB_sybase_mths = array( + 'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6, + 'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); + +class ADORecordset_sybase extends ADORecordSet { + + var $databaseType = "sybase"; + var $canSeek = true; + // _mths works only in non-localised system + var $_mths = array('JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6,'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); + + function __construct($id,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC; + else $this->fetchMode = $mode; + parent::__construct($id,$mode); + } + + /* Returns: an object containing field information. + Get column information in the Recordset object. fetchField() can be used in order to obtain information about + fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by + fetchField() is retrieved. */ + function FetchField($fieldOffset = -1) + { + if ($fieldOffset != -1) { + $o = @sybase_fetch_field($this->_queryID, $fieldOffset); + } + else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ + $o = @sybase_fetch_field($this->_queryID); + } + // older versions of PHP did not support type, only numeric + if ($o && !isset($o->type)) $o->type = ($o->numeric) ? 'float' : 'varchar'; + return $o; + } + + function _initrs() + { + global $ADODB_COUNTRECS; + $this->_numOfRows = ($ADODB_COUNTRECS)? @sybase_num_rows($this->_queryID):-1; + $this->_numOfFields = @sybase_num_fields($this->_queryID); + } + + function _seek($row) + { + return @sybase_data_seek($this->_queryID, $row); + } + + function _fetch($ignore_fields=false) + { + if ($this->fetchMode == ADODB_FETCH_NUM) { + $this->fields = @sybase_fetch_row($this->_queryID); + } else if ($this->fetchMode == ADODB_FETCH_ASSOC) { + $this->fields = @sybase_fetch_assoc($this->_queryID); + + if (is_array($this->fields)) { + $this->fields = $this->GetRowAssoc(); + return true; + } + return false; + } else { + $this->fields = @sybase_fetch_array($this->_queryID); + } + if ( is_array($this->fields)) { + return true; + } + + return false; + } + + /* close() only needs to be called if you are worried about using too much memory while your script + is running. All associated result memory for the specified result identifier will automatically be freed. */ + function _close() { + return @sybase_free_result($this->_queryID); + } + + // sybase/mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + return ADORecordSet_array_sybase::UnixDate($v); + } + + static function UnixTimeStamp($v) + { + return ADORecordSet_array_sybase::UnixTimeStamp($v); + } +} + +class ADORecordSet_array_sybase extends ADORecordSet_array { + function __construct($id=-1) + { + parent::__construct($id); + } + + // sybase/mssql uses a default date like Dec 30 2000 12:00AM + static function UnixDate($v) + { + global $ADODB_sybase_mths; + + //Dec 30 2000 12:00AM + if (!preg_match( "/([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})/" + ,$v, $rr)) return parent::UnixDate($v); + + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $themth = substr(strtoupper($rr[1]),0,3); + $themth = $ADODB_sybase_mths[$themth]; + if ($themth <= 0) return false; + // h-m-s-MM-DD-YY + return adodb_mktime(0,0,0,$themth,$rr[2],$rr[3]); + } + + static function UnixTimeStamp($v) + { + global $ADODB_sybase_mths; + //11.02.2001 Toni Tunkkari toni.tunkkari@finebyte.com + //Changed [0-9] to [0-9 ] in day conversion + if (!preg_match( "/([A-Za-z]{3})[-/\. ]([0-9 ]{1,2})[-/\. ]([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})/" + ,$v, $rr)) return parent::UnixTimeStamp($v); + if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; + + $themth = substr(strtoupper($rr[1]),0,3); + $themth = $ADODB_sybase_mths[$themth]; + if ($themth <= 0) return false; + + switch (strtoupper($rr[6])) { + case 'P': + if ($rr[4]<12) $rr[4] += 12; + break; + case 'A': + if ($rr[4]==12) $rr[4] = 0; + break; + default: + break; + } + // h-m-s-MM-DD-YY + return adodb_mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]); + } +} diff --git a/ehcp/adodb5/drivers/adodb-sybase_ase.inc.php b/ehcp/adodb5/drivers/adodb-sybase_ase.inc.php new file mode 100644 index 0000000..9e864f9 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-sybase_ase.inc.php @@ -0,0 +1,120 @@ +metaTablesSQL) { + // complicated state saving by the need for backward compat + + if ($ttype == 'VIEWS'){ + $sql = str_replace('U', 'V', $this->metaTablesSQL); + }elseif (false === $ttype){ + $sql = str_replace('U',"U' OR type='V", $this->metaTablesSQL); + }else{ // TABLES OR ANY OTHER + $sql = $this->metaTablesSQL; + } + $rs = $this->Execute($sql); + + if ($rs === false || !method_exists($rs, 'GetArray')){ + return $false; + } + $arr = $rs->GetArray(); + + $arr2 = array(); + foreach($arr as $key=>$value){ + $arr2[] = trim($value['name']); + } + return $arr2; + } + return $false; + } + + function MetaDatabases() + { + $arr = array(); + if ($this->metaDatabasesSQL!='') { + $rs = $this->Execute($this->metaDatabasesSQL); + if ($rs && !$rs->EOF){ + while (!$rs->EOF){ + $arr[] = $rs->Fields('name'); + $rs->MoveNext(); + } + return $arr; + } + } + return false; + } + + // fix a bug which prevent the metaColumns query to be executed for Sybase ASE + function MetaColumns($table,$upper=false) + { + $false = false; + if (!empty($this->metaColumnsSQL)) { + + $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); + if ($rs === false) return $false; + + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->Fields('field_name'); + $fld->type = $rs->Fields('type'); + $fld->max_length = $rs->Fields('width'); + $retarr[strtoupper($fld->name)] = $fld; + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + } + return $false; + } + + function getProcedureList($schema) + { + return false; + } + + function ErrorMsg() + { + if (!function_exists('sybase_connect')){ + return 'Your PHP doesn\'t contain the Sybase connection module!'; + } + return parent::ErrorMsg(); + } +} + +class adorecordset_sybase_ase extends ADORecordset_sybase { +var $databaseType = "sybase_ase"; +function __construct($id,$mode=false) + { + parent::__construct($id,$mode); + } + +} diff --git a/ehcp/adodb5/drivers/adodb-vfp.inc.php b/ehcp/adodb5/drivers/adodb-vfp.inc.php new file mode 100644 index 0000000..73c03d3 --- /dev/null +++ b/ehcp/adodb5/drivers/adodb-vfp.inc.php @@ -0,0 +1,103 @@ +replaceQuote,$s))."'"; + return "'".$s."'"; + } + + + // TOP requires ORDER BY for VFP + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + $this->hasTop = preg_match('/ORDER[ \t\r\n]+BY/is',$sql) ? 'top' : false; + $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + return $ret; + } + + + +}; + + +class ADORecordSet_vfp extends ADORecordSet_odbc { + + var $databaseType = "vfp"; + + + function __construct($id,$mode=false) + { + return parent::__construct($id,$mode); + } + + function MetaType($t, $len = -1, $fieldobj = false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + switch (strtoupper($t)) { + case 'C': + if ($len <= $this->blobSize) return 'C'; + case 'M': + return 'X'; + + case 'D': return 'D'; + + case 'T': return 'T'; + + case 'L': return 'L'; + + case 'I': return 'I'; + + default: return 'N'; + } + } +} + +} //define diff --git a/ehcp/adodb5/lang/adodb-ar.inc.php b/ehcp/adodb5/lang/adodb-ar.inc.php new file mode 100644 index 0000000..0b8f12f --- /dev/null +++ b/ehcp/adodb5/lang/adodb-ar.inc.php @@ -0,0 +1,32 @@ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ar', + DB_ERROR => 'خطأ غير محدد', + DB_ERROR_ALREADY_EXISTS => 'موجود مسبقا', + DB_ERROR_CANNOT_CREATE => 'لا يمكن إنشاء', + DB_ERROR_CANNOT_DELETE => 'لا يمكن حذف', + DB_ERROR_CANNOT_DROP => 'لا يمكن حذف', + DB_ERROR_CONSTRAINT => 'عملية إدخال ممنوعة', + DB_ERROR_DIVZERO => 'عملية التقسيم على صفر', + DB_ERROR_INVALID => 'غير صحيح', + DB_ERROR_INVALID_DATE => 'صيغة وقت أو تاريخ غير صحيحة', + DB_ERROR_INVALID_NUMBER => 'صيغة رقم غير صحيحة', + DB_ERROR_MISMATCH => 'غير متطابق', + DB_ERROR_NODBSELECTED => 'لم يتم إختيار قاعدة البيانات بعد', + DB_ERROR_NOSUCHFIELD => 'ليس هنالك حقل بهذا الاسم', + DB_ERROR_NOSUCHTABLE => 'ليس هنالك جدول بهذا الاسم', + DB_ERROR_NOT_CAPABLE => 'قاعدة البيانات المرتبط بها غير قادرة', + DB_ERROR_NOT_FOUND => 'لم يتم إيجاده', + DB_ERROR_NOT_LOCKED => 'غير مقفول', + DB_ERROR_SYNTAX => 'خطأ في الصيغة', + DB_ERROR_UNSUPPORTED => 'غير مدعوم', + DB_ERROR_VALUE_COUNT_ON_ROW => 'عدد القيم في السجل', + DB_ERROR_INVALID_DSN => 'DSN غير صحيح', + DB_ERROR_CONNECT_FAILED => 'فشل عملية الإتصال', + 0 => 'ليس هنالك أخطاء', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'البيانات المزودة غير كافية', + DB_ERROR_EXTENSION_NOT_FOUND=> 'لم يتم إيجاد الإضافة المتعلقة', + DB_ERROR_NOSUCHDB => 'ليس هنالك قاعدة بيانات بهذا الاسم', + DB_ERROR_ACCESS_VIOLATION => 'سماحيات غير كافية' +); diff --git a/ehcp/adodb5/lang/adodb-bg.inc.php b/ehcp/adodb5/lang/adodb-bg.inc.php new file mode 100644 index 0000000..07069b4 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-bg.inc.php @@ -0,0 +1,36 @@ + +*/ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'bg', + DB_ERROR => 'неизвестна грешка', + DB_ERROR_ALREADY_EXISTS => 'вече съществува', + DB_ERROR_CANNOT_CREATE => 'не може да бъде създадена', + DB_ERROR_CANNOT_DELETE => 'не може да бъде изтрита', + DB_ERROR_CANNOT_DROP => 'не може да бъде унищожена', + DB_ERROR_CONSTRAINT => 'нарушено условие', + DB_ERROR_DIVZERO => 'деление на нула', + DB_ERROR_INVALID => 'неправилно', + DB_ERROR_INVALID_DATE => 'некоректна дата или час', + DB_ERROR_INVALID_NUMBER => 'невалиден номер', + DB_ERROR_MISMATCH => 'погрешна употреба', + DB_ERROR_NODBSELECTED => 'не е избрана база данни', + DB_ERROR_NOSUCHFIELD => 'несъществуващо поле', + DB_ERROR_NOSUCHTABLE => 'несъществуваща таблица', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'не е намерена', + DB_ERROR_NOT_LOCKED => 'не е заключена', + DB_ERROR_SYNTAX => 'грешен синтаксис', + DB_ERROR_UNSUPPORTED => 'не се поддържа', + DB_ERROR_VALUE_COUNT_ON_ROW => 'некоректен брой колони в реда', + DB_ERROR_INVALID_DSN => 'невалиден DSN', + DB_ERROR_CONNECT_FAILED => 'връзката не може да бъде осъществена', + 0 => 'няма грешки', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'предоставените данни са недостатъчни', + DB_ERROR_EXTENSION_NOT_FOUND=> 'разширението не е намерено', + DB_ERROR_NOSUCHDB => 'несъществуваща база данни', + DB_ERROR_ACCESS_VIOLATION => 'нямате достатъчно права' +); diff --git a/ehcp/adodb5/lang/adodb-ca.inc.php b/ehcp/adodb5/lang/adodb-ca.inc.php new file mode 100644 index 0000000..adbafac --- /dev/null +++ b/ehcp/adodb5/lang/adodb-ca.inc.php @@ -0,0 +1,33 @@ + 'ca', + DB_ERROR => 'error desconegut', + DB_ERROR_ALREADY_EXISTS => 'ja existeix', + DB_ERROR_CANNOT_CREATE => 'no es pot crear', + DB_ERROR_CANNOT_DELETE => 'no es pot esborrar', + DB_ERROR_CANNOT_DROP => 'no es pot eliminar', + DB_ERROR_CONSTRAINT => 'violació de constraint', + DB_ERROR_DIVZERO => 'divisió per zero', + DB_ERROR_INVALID => 'no és vàlid', + DB_ERROR_INVALID_DATE => 'la data o l\'hora no són vàlides', + DB_ERROR_INVALID_NUMBER => 'el nombre no és vàlid', + DB_ERROR_MISMATCH => 'no hi ha coincidència', + DB_ERROR_NODBSELECTED => 'cap base de dades seleccionada', + DB_ERROR_NOSUCHFIELD => 'camp inexistent', + DB_ERROR_NOSUCHTABLE => 'taula inexistent', + DB_ERROR_NOT_CAPABLE => 'l\'execució secundària de DB no pot', + DB_ERROR_NOT_FOUND => 'no trobat', + DB_ERROR_NOT_LOCKED => 'no blocat', + DB_ERROR_SYNTAX => 'error de sintaxi', + DB_ERROR_UNSUPPORTED => 'no suportat', + DB_ERROR_VALUE_COUNT_ON_ROW => 'el nombre de columnes no coincideix amb el nombre de valors en la fila', + DB_ERROR_INVALID_DSN => 'el DSN no és vàlid', + DB_ERROR_CONNECT_FAILED => 'connexió fallida', + 0 => 'cap error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'les dades subministrades són insuficients', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensió no trobada', + DB_ERROR_NOSUCHDB => 'base de dades inexistent', + DB_ERROR_ACCESS_VIOLATION => 'permisos insuficients' +); diff --git a/ehcp/adodb5/lang/adodb-cn.inc.php b/ehcp/adodb5/lang/adodb-cn.inc.php new file mode 100644 index 0000000..9c97341 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-cn.inc.php @@ -0,0 +1,33 @@ + 'cn', + DB_ERROR => '未知错误', + DB_ERROR_ALREADY_EXISTS => '已经存在', + DB_ERROR_CANNOT_CREATE => '不能创建', + DB_ERROR_CANNOT_DELETE => '不能删除', + DB_ERROR_CANNOT_DROP => '不能丢弃', + DB_ERROR_CONSTRAINT => '约束限制', + DB_ERROR_DIVZERO => '被0除', + DB_ERROR_INVALID => '无效', + DB_ERROR_INVALID_DATE => '无效的日期或者时间', + DB_ERROR_INVALID_NUMBER => '无效的数字', + DB_ERROR_MISMATCH => '不匹配', + DB_ERROR_NODBSELECTED => '没有数据库被选择', + DB_ERROR_NOSUCHFIELD => '没有相应的字段', + DB_ERROR_NOSUCHTABLE => '没有相应的表', + DB_ERROR_NOT_CAPABLE => '数据库后台不兼容', + DB_ERROR_NOT_FOUND => '没有发现', + DB_ERROR_NOT_LOCKED => '没有被锁定', + DB_ERROR_SYNTAX => '语法错误', + DB_ERROR_UNSUPPORTED => '不支持', + DB_ERROR_VALUE_COUNT_ON_ROW => '在行上累计值', + DB_ERROR_INVALID_DSN => '无效的数据源 (DSN)', + DB_ERROR_CONNECT_FAILED => '连接失败', + 0 => '没有错误', // DB_OK + DB_ERROR_NEED_MORE_DATA => '提供的数据不能符合要求', + DB_ERROR_EXTENSION_NOT_FOUND=> '扩展没有被发现', + DB_ERROR_NOSUCHDB => '没有相应的数据库', + DB_ERROR_ACCESS_VIOLATION => '没有合适的权限' +); diff --git a/ehcp/adodb5/lang/adodb-cz.inc.php b/ehcp/adodb5/lang/adodb-cz.inc.php new file mode 100644 index 0000000..d79d714 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-cz.inc.php @@ -0,0 +1,35 @@ + + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'cz', + DB_ERROR => 'neznámá chyba', + DB_ERROR_ALREADY_EXISTS => 'ji? existuje', + DB_ERROR_CANNOT_CREATE => 'nelze vytvo?it', + DB_ERROR_CANNOT_DELETE => 'nelze smazat', + DB_ERROR_CANNOT_DROP => 'nelze odstranit', + DB_ERROR_CONSTRAINT => 'poru?ení omezující podmínky', + DB_ERROR_DIVZERO => 'd?lení nulou', + DB_ERROR_INVALID => 'neplatné', + DB_ERROR_INVALID_DATE => 'neplatné datum nebo ?as', + DB_ERROR_INVALID_NUMBER => 'neplatné ?íslo', + DB_ERROR_MISMATCH => 'nesouhlasí', + DB_ERROR_NODBSELECTED => '?ádná databáze není vybrána', + DB_ERROR_NOSUCHFIELD => 'pole nenalezeno', + DB_ERROR_NOSUCHTABLE => 'tabulka nenalezena', + DB_ERROR_NOT_CAPABLE => 'nepodporováno', + DB_ERROR_NOT_FOUND => 'nenalezeno', + DB_ERROR_NOT_LOCKED => 'nezam?eno', + DB_ERROR_SYNTAX => 'syntaktická chyba', + DB_ERROR_UNSUPPORTED => 'nepodporováno', + DB_ERROR_VALUE_COUNT_ON_ROW => '', + DB_ERROR_INVALID_DSN => 'neplatné DSN', + DB_ERROR_CONNECT_FAILED => 'p?ipojení selhalo', + 0 => 'bez chyb', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'málo zdrojových dat', + DB_ERROR_EXTENSION_NOT_FOUND=> 'roz?í?ení nenalezeno', + DB_ERROR_NOSUCHDB => 'databáze neexistuje', + DB_ERROR_ACCESS_VIOLATION => 'nedostate?ná práva' +); diff --git a/ehcp/adodb5/lang/adodb-da.inc.php b/ehcp/adodb5/lang/adodb-da.inc.php new file mode 100644 index 0000000..14e720b --- /dev/null +++ b/ehcp/adodb5/lang/adodb-da.inc.php @@ -0,0 +1,32 @@ + 'da', + DB_ERROR => 'ukendt fejl', + DB_ERROR_ALREADY_EXISTS => 'eksisterer allerede', + DB_ERROR_CANNOT_CREATE => 'kan ikke oprette', + DB_ERROR_CANNOT_DELETE => 'kan ikke slette', + DB_ERROR_CANNOT_DROP => 'kan ikke droppe', + DB_ERROR_CONSTRAINT => 'begrænsning krænket', + DB_ERROR_DIVZERO => 'division med nul', + DB_ERROR_INVALID => 'ugyldig', + DB_ERROR_INVALID_DATE => 'ugyldig dato eller klokkeslet', + DB_ERROR_INVALID_NUMBER => 'ugyldigt tal', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'ingen database valgt', + DB_ERROR_NOSUCHFIELD => 'felt findes ikke', + DB_ERROR_NOSUCHTABLE => 'tabel findes ikke', + DB_ERROR_NOT_CAPABLE => 'DB backend opgav', + DB_ERROR_NOT_FOUND => 'ikke fundet', + DB_ERROR_NOT_LOCKED => 'ikke låst', + DB_ERROR_SYNTAX => 'syntaksfejl', + DB_ERROR_UNSUPPORTED => 'ikke understøttet', + DB_ERROR_VALUE_COUNT_ON_ROW => 'resulterende antal felter svarer ikke til forespørgslens antal felter', + DB_ERROR_INVALID_DSN => 'ugyldig DSN', + DB_ERROR_CONNECT_FAILED => 'tilslutning mislykkedes', + 0 => 'ingen fejl', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'utilstrækkelige data angivet', + DB_ERROR_EXTENSION_NOT_FOUND=> 'udvidelse ikke fundet', + DB_ERROR_NOSUCHDB => 'database ikke fundet', + DB_ERROR_ACCESS_VIOLATION => 'utilstrækkelige rettigheder' +); diff --git a/ehcp/adodb5/lang/adodb-de.inc.php b/ehcp/adodb5/lang/adodb-de.inc.php new file mode 100644 index 0000000..dca4ffe --- /dev/null +++ b/ehcp/adodb5/lang/adodb-de.inc.php @@ -0,0 +1,32 @@ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'de', + DB_ERROR => 'Unbekannter Fehler', + DB_ERROR_ALREADY_EXISTS => 'existiert bereits', + DB_ERROR_CANNOT_CREATE => 'kann nicht erstellen', + DB_ERROR_CANNOT_DELETE => 'kann nicht löschen', + DB_ERROR_CANNOT_DROP => 'Tabelle oder Index konnte nicht gelöscht werden', + DB_ERROR_CONSTRAINT => 'Constraint Verletzung', + DB_ERROR_DIVZERO => 'Division durch Null', + DB_ERROR_INVALID => 'ungültig', + DB_ERROR_INVALID_DATE => 'ungültiges Datum oder Zeit', + DB_ERROR_INVALID_NUMBER => 'ungültige Zahl', + DB_ERROR_MISMATCH => 'Unverträglichkeit', + DB_ERROR_NODBSELECTED => 'keine Dantebank ausgewählt', + DB_ERROR_NOSUCHFIELD => 'Feld nicht vorhanden', + DB_ERROR_NOSUCHTABLE => 'Tabelle nicht vorhanden', + DB_ERROR_NOT_CAPABLE => 'Funktion nicht installiert', + DB_ERROR_NOT_FOUND => 'nicht gefunden', + DB_ERROR_NOT_LOCKED => 'nicht gesperrt', + DB_ERROR_SYNTAX => 'Syntaxfehler', + DB_ERROR_UNSUPPORTED => 'nicht Unterstützt', + DB_ERROR_VALUE_COUNT_ON_ROW => 'Anzahl der zurückgelieferten Felder entspricht nicht der Anzahl der Felder in der Abfrage', + DB_ERROR_INVALID_DSN => 'ungültiger DSN', + DB_ERROR_CONNECT_FAILED => 'Verbindung konnte nicht hergestellt werden', + 0 => 'kein Fehler', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'Nicht genügend Daten geliefert', + DB_ERROR_EXTENSION_NOT_FOUND=> 'erweiterung nicht gefunden', + DB_ERROR_NOSUCHDB => 'keine Datenbank', + DB_ERROR_ACCESS_VIOLATION => 'ungenügende Rechte' +); diff --git a/ehcp/adodb5/lang/adodb-en.inc.php b/ehcp/adodb5/lang/adodb-en.inc.php new file mode 100644 index 0000000..0582855 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-en.inc.php @@ -0,0 +1,35 @@ + 'en', + DB_ERROR => 'unknown error', + DB_ERROR_ALREADY_EXISTS => 'already exists', + DB_ERROR_CANNOT_CREATE => 'can not create', + DB_ERROR_CANNOT_DELETE => 'can not delete', + DB_ERROR_CANNOT_DROP => 'can not drop', + DB_ERROR_CONSTRAINT => 'constraint violation', + DB_ERROR_DIVZERO => 'division by zero', + DB_ERROR_INVALID => 'invalid', + DB_ERROR_INVALID_DATE => 'invalid date or time', + DB_ERROR_INVALID_NUMBER => 'invalid number', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'no database selected', + DB_ERROR_NOSUCHFIELD => 'no such field', + DB_ERROR_NOSUCHTABLE => 'no such table', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'not found', + DB_ERROR_NOT_LOCKED => 'not locked', + DB_ERROR_SYNTAX => 'syntax error', + DB_ERROR_UNSUPPORTED => 'not supported', + DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', + DB_ERROR_INVALID_DSN => 'invalid DSN', + DB_ERROR_CONNECT_FAILED => 'connect failed', + 0 => 'no error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'insufficient data supplied', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found', + DB_ERROR_NOSUCHDB => 'no such database', + DB_ERROR_ACCESS_VIOLATION => 'insufficient permissions', + DB_ERROR_DEADLOCK => 'deadlock detected', + DB_ERROR_STATEMENT_TIMEOUT => 'statement timeout', + DB_ERROR_SERIALIZATION_FAILURE => 'could not serialize access' +); diff --git a/ehcp/adodb5/lang/adodb-eo.inc.php b/ehcp/adodb5/lang/adodb-eo.inc.php new file mode 100644 index 0000000..baa589c --- /dev/null +++ b/ehcp/adodb5/lang/adodb-eo.inc.php @@ -0,0 +1,34 @@ + 'eo', + DB_ERROR => 'nekonata eraro', + DB_ERROR_ALREADY_EXISTS => 'jam ekzistas', + DB_ERROR_CANNOT_CREATE => 'maleblas krei', + DB_ERROR_CANNOT_DELETE => 'maleblas elimini', + DB_ERROR_CANNOT_DROP => 'maleblas elimini (drop)', + DB_ERROR_CONSTRAINT => 'rompo de kondiĉoj de provo', + DB_ERROR_DIVZERO => 'divido per 0 (nul)', + DB_ERROR_INVALID => 'malregule', + DB_ERROR_INVALID_DATE => 'malregula dato kaj tempo', + DB_ERROR_INVALID_NUMBER => 'malregula nombro', + DB_ERROR_MISMATCH => 'eraro', + DB_ERROR_NODBSELECTED => 'datumbazo ne elektita', + DB_ERROR_NOSUCHFIELD => 'ne ekzistas kampo', + DB_ERROR_NOSUCHTABLE => 'ne ekzistas tabelo', + DB_ERROR_NOT_CAPABLE => 'DBMS ne povas', + DB_ERROR_NOT_FOUND => 'ne trovita', + DB_ERROR_NOT_LOCKED => 'ne blokita', + DB_ERROR_SYNTAX => 'sintaksa eraro', + DB_ERROR_UNSUPPORTED => 'ne apogata', + DB_ERROR_VALUE_COUNT_ON_ROW => 'nombrilo de valoroj en linio', + DB_ERROR_INVALID_DSN => 'malregula DSN-o', + DB_ERROR_CONNECT_FAILED => 'konekto malsukcesa', + 0 => 'ĉio bone', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'ne sufiĉe da datumo', + DB_ERROR_EXTENSION_NOT_FOUND=> 'etendo ne trovita', + DB_ERROR_NOSUCHDB => 'datumbazo ne ekzistas', + DB_ERROR_ACCESS_VIOLATION => 'ne sufiĉe da rajto por atingo' +); diff --git a/ehcp/adodb5/lang/adodb-es.inc.php b/ehcp/adodb5/lang/adodb-es.inc.php new file mode 100644 index 0000000..a80a644 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-es.inc.php @@ -0,0 +1,32 @@ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'es', + DB_ERROR => 'error desconocido', + DB_ERROR_ALREADY_EXISTS => 'ya existe', + DB_ERROR_CANNOT_CREATE => 'imposible crear', + DB_ERROR_CANNOT_DELETE => 'imposible borrar', + DB_ERROR_CANNOT_DROP => 'imposible hacer drop', + DB_ERROR_CONSTRAINT => 'violacion de constraint', + DB_ERROR_DIVZERO => 'division por cero', + DB_ERROR_INVALID => 'invalido', + DB_ERROR_INVALID_DATE => 'fecha u hora invalida', + DB_ERROR_INVALID_NUMBER => 'numero invalido', + DB_ERROR_MISMATCH => 'error', + DB_ERROR_NODBSELECTED => 'no hay base de datos seleccionada', + DB_ERROR_NOSUCHFIELD => 'campo invalido', + DB_ERROR_NOSUCHTABLE => 'tabla no existe', + DB_ERROR_NOT_CAPABLE => 'capacidad invalida para esta DB', + DB_ERROR_NOT_FOUND => 'no encontrado', + DB_ERROR_NOT_LOCKED => 'no bloqueado', + DB_ERROR_SYNTAX => 'error de sintaxis', + DB_ERROR_UNSUPPORTED => 'no soportado', + DB_ERROR_VALUE_COUNT_ON_ROW => 'la cantidad de columnas no corresponden a la cantidad de valores', + DB_ERROR_INVALID_DSN => 'DSN invalido', + DB_ERROR_CONNECT_FAILED => 'fallo la conexion', + 0 => 'sin error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'insuficientes datos', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension no encontrada', + DB_ERROR_NOSUCHDB => 'base de datos no encontrada', + DB_ERROR_ACCESS_VIOLATION => 'permisos insuficientes' +); diff --git a/ehcp/adodb5/lang/adodb-fa.inc.php b/ehcp/adodb5/lang/adodb-fa.inc.php new file mode 100644 index 0000000..7fa4618 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-fa.inc.php @@ -0,0 +1,34 @@ + */ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'fa', + DB_ERROR => 'خطای ناشناخته', + DB_ERROR_ALREADY_EXISTS => 'وجود دارد', + DB_ERROR_CANNOT_CREATE => 'امکان create وجود ندارد', + DB_ERROR_CANNOT_DELETE => 'امکان حذف وجود ندارد', + DB_ERROR_CANNOT_DROP => 'امکان drop وجود ندارد', + DB_ERROR_CONSTRAINT => 'نقض شرط', + DB_ERROR_DIVZERO => 'تقسیم بر صفر', + DB_ERROR_INVALID => 'نامعتبر', + DB_ERROR_INVALID_DATE => 'زمان یا تاریخ نامعتبر', + DB_ERROR_INVALID_NUMBER => 'عدد نامعتبر', + DB_ERROR_MISMATCH => 'عدم مطابقت', + DB_ERROR_NODBSELECTED => 'بانک اطلاعاتی انتخاب نشده است', + DB_ERROR_NOSUCHFIELD => 'چنین ستونی وجود ندارد', + DB_ERROR_NOSUCHTABLE => 'چنین جدولی وجود ندارد', + DB_ERROR_NOT_CAPABLE => 'backend بانک اطلاعاتی قادر نیست', + DB_ERROR_NOT_FOUND => 'پیدا نشد', + DB_ERROR_NOT_LOCKED => 'قفل نشده', + DB_ERROR_SYNTAX => 'خطای دستوری', + DB_ERROR_UNSUPPORTED => 'پشتیبانی نمی شود', + DB_ERROR_VALUE_COUNT_ON_ROW => 'شمارش مقادیر روی ردیف', + DB_ERROR_INVALID_DSN => 'DSN نامعتبر', + DB_ERROR_CONNECT_FAILED => 'ارتباط برقرار نشد', + 0 => 'بدون خطا', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'داده ناکافی است', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension پیدا نشد', + DB_ERROR_NOSUCHDB => 'چنین بانک اطلاعاتی وجود ندارد', + DB_ERROR_ACCESS_VIOLATION => 'حق دسترسی ناکافی' +); diff --git a/ehcp/adodb5/lang/adodb-fr.inc.php b/ehcp/adodb5/lang/adodb-fr.inc.php new file mode 100644 index 0000000..620196b --- /dev/null +++ b/ehcp/adodb5/lang/adodb-fr.inc.php @@ -0,0 +1,32 @@ + 'fr', + DB_ERROR => 'erreur inconnue', + DB_ERROR_ALREADY_EXISTS => 'existe déjà', + DB_ERROR_CANNOT_CREATE => 'création impossible', + DB_ERROR_CANNOT_DELETE => 'effacement impossible', + DB_ERROR_CANNOT_DROP => 'suppression impossible', + DB_ERROR_CONSTRAINT => 'violation de contrainte', + DB_ERROR_DIVZERO => 'division par zéro', + DB_ERROR_INVALID => 'invalide', + DB_ERROR_INVALID_DATE => 'date ou heure invalide', + DB_ERROR_INVALID_NUMBER => 'nombre invalide', + DB_ERROR_MISMATCH => 'erreur de concordance', + DB_ERROR_NODBSELECTED => 'pas de base de données sélectionnée', + DB_ERROR_NOSUCHFIELD => 'nom de colonne invalide', + DB_ERROR_NOSUCHTABLE => 'table ou vue inexistante', + DB_ERROR_NOT_CAPABLE => 'fonction optionnelle non installée', + DB_ERROR_NOT_FOUND => 'pas trouvé', + DB_ERROR_NOT_LOCKED => 'non verrouillé', + DB_ERROR_SYNTAX => 'erreur de syntaxe', + DB_ERROR_UNSUPPORTED => 'non supporté', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valeur insérée trop grande pour colonne', + DB_ERROR_INVALID_DSN => 'DSN invalide', + DB_ERROR_CONNECT_FAILED => 'échec à la connexion', + 0 => "pas d'erreur", // DB_OK + DB_ERROR_NEED_MORE_DATA => 'données fournies insuffisantes', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension non trouvée', + DB_ERROR_NOSUCHDB => 'base de données inconnue', + DB_ERROR_ACCESS_VIOLATION => 'droits insuffisants' +); diff --git a/ehcp/adodb5/lang/adodb-hu.inc.php b/ehcp/adodb5/lang/adodb-hu.inc.php new file mode 100644 index 0000000..49357ce --- /dev/null +++ b/ehcp/adodb5/lang/adodb-hu.inc.php @@ -0,0 +1,33 @@ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'hu', + DB_ERROR => 'ismeretlen hiba', + DB_ERROR_ALREADY_EXISTS => 'már létezik', + DB_ERROR_CANNOT_CREATE => 'nem sikerült létrehozni', + DB_ERROR_CANNOT_DELETE => 'nem sikerült törölni', + DB_ERROR_CANNOT_DROP => 'nem sikerült eldobni', + DB_ERROR_CONSTRAINT => 'szabályok megszegése', + DB_ERROR_DIVZERO => 'osztás nullával', + DB_ERROR_INVALID => 'érvénytelen', + DB_ERROR_INVALID_DATE => 'érvénytelen dátum vagy idő', + DB_ERROR_INVALID_NUMBER => 'érvénytelen szám', + DB_ERROR_MISMATCH => 'nem megfelelő', + DB_ERROR_NODBSELECTED => 'nincs kiválasztott adatbázis', + DB_ERROR_NOSUCHFIELD => 'nincs ilyen mező', + DB_ERROR_NOSUCHTABLE => 'nincs ilyen tábla', + DB_ERROR_NOT_CAPABLE => 'DB backend nem támogatja', + DB_ERROR_NOT_FOUND => 'nem található', + DB_ERROR_NOT_LOCKED => 'nincs lezárva', + DB_ERROR_SYNTAX => 'szintaktikai hiba', + DB_ERROR_UNSUPPORTED => 'nem támogatott', + DB_ERROR_VALUE_COUNT_ON_ROW => 'soron végzett érték számlálás', + DB_ERROR_INVALID_DSN => 'hibás DSN', + DB_ERROR_CONNECT_FAILED => 'sikertelen csatlakozás', + 0 => 'nincs hiba', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'túl kevés az adat', + DB_ERROR_EXTENSION_NOT_FOUND=> 'bővítmény nem található', + DB_ERROR_NOSUCHDB => 'nincs ilyen adatbázis', + DB_ERROR_ACCESS_VIOLATION => 'nincs jogosultság' +); diff --git a/ehcp/adodb5/lang/adodb-it.inc.php b/ehcp/adodb5/lang/adodb-it.inc.php new file mode 100644 index 0000000..80524e1 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-it.inc.php @@ -0,0 +1,33 @@ + 'it', + DB_ERROR => 'errore sconosciuto', + DB_ERROR_ALREADY_EXISTS => 'esiste già', + DB_ERROR_CANNOT_CREATE => 'non posso creare', + DB_ERROR_CANNOT_DELETE => 'non posso cancellare', + DB_ERROR_CANNOT_DROP => 'non posso eliminare', + DB_ERROR_CONSTRAINT => 'violazione constraint', + DB_ERROR_DIVZERO => 'divisione per zero', + DB_ERROR_INVALID => 'non valido', + DB_ERROR_INVALID_DATE => 'data od ora non valida', + DB_ERROR_INVALID_NUMBER => 'numero non valido', + DB_ERROR_MISMATCH => 'diversi', + DB_ERROR_NODBSELECTED => 'nessun database selezionato', + DB_ERROR_NOSUCHFIELD => 'nessun campo trovato', + DB_ERROR_NOSUCHTABLE => 'nessuna tabella trovata', + DB_ERROR_NOT_CAPABLE => 'DB backend non abilitato', + DB_ERROR_NOT_FOUND => 'non trovato', + DB_ERROR_NOT_LOCKED => 'non bloccato', + DB_ERROR_SYNTAX => 'errore di sintassi', + DB_ERROR_UNSUPPORTED => 'non supportato', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valore inserito troppo grande per una colonna', + DB_ERROR_INVALID_DSN => 'DSN non valido', + DB_ERROR_CONNECT_FAILED => 'connessione fallita', + 0 => 'nessun errore', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'dati inseriti insufficienti', + DB_ERROR_EXTENSION_NOT_FOUND=> 'estensione non trovata', + DB_ERROR_NOSUCHDB => 'database non trovato', + DB_ERROR_ACCESS_VIOLATION => 'permessi insufficienti' +); diff --git a/ehcp/adodb5/lang/adodb-nl.inc.php b/ehcp/adodb5/lang/adodb-nl.inc.php new file mode 100644 index 0000000..43e3ee6 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-nl.inc.php @@ -0,0 +1,32 @@ + 'nl', + DB_ERROR => 'onbekende fout', + DB_ERROR_ALREADY_EXISTS => 'bestaat al', + DB_ERROR_CANNOT_CREATE => 'kan niet aanmaken', + DB_ERROR_CANNOT_DELETE => 'kan niet wissen', + DB_ERROR_CANNOT_DROP => 'kan niet verwijderen', + DB_ERROR_CONSTRAINT => 'constraint overtreding', + DB_ERROR_DIVZERO => 'poging tot delen door nul', + DB_ERROR_INVALID => 'ongeldig', + DB_ERROR_INVALID_DATE => 'ongeldige datum of tijd', + DB_ERROR_INVALID_NUMBER => 'ongeldig nummer', + DB_ERROR_MISMATCH => 'is incorrect', + DB_ERROR_NODBSELECTED => 'geen database geselecteerd', + DB_ERROR_NOSUCHFIELD => 'onbekend veld', + DB_ERROR_NOSUCHTABLE => 'onbekende tabel', + DB_ERROR_NOT_CAPABLE => 'database systeem is niet tot uitvoer in staat', + DB_ERROR_NOT_FOUND => 'niet gevonden', + DB_ERROR_NOT_LOCKED => 'niet vergrendeld', + DB_ERROR_SYNTAX => 'syntaxis fout', + DB_ERROR_UNSUPPORTED => 'niet ondersteund', + DB_ERROR_VALUE_COUNT_ON_ROW => 'waarde telling op rij', + DB_ERROR_INVALID_DSN => 'ongeldige DSN', + DB_ERROR_CONNECT_FAILED => 'connectie mislukt', + 0 => 'geen fout', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'onvoldoende data gegeven', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie niet gevonden', + DB_ERROR_NOSUCHDB => 'onbekende database', + DB_ERROR_ACCESS_VIOLATION => 'onvoldoende rechten' +); diff --git a/ehcp/adodb5/lang/adodb-pl.inc.php b/ehcp/adodb5/lang/adodb-pl.inc.php new file mode 100644 index 0000000..ffa10e3 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-pl.inc.php @@ -0,0 +1,34 @@ + + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'pl', + DB_ERROR => 'niezidentyfikowany błąd', + DB_ERROR_ALREADY_EXISTS => 'już istnieją', + DB_ERROR_CANNOT_CREATE => 'nie można stworzyć', + DB_ERROR_CANNOT_DELETE => 'nie można usunąć', + DB_ERROR_CANNOT_DROP => 'nie można porzucić', + DB_ERROR_CONSTRAINT => 'pogwałcenie uprawnień', + DB_ERROR_DIVZERO => 'dzielenie przez zero', + DB_ERROR_INVALID => 'błędny', + DB_ERROR_INVALID_DATE => 'błędna godzina lub data', + DB_ERROR_INVALID_NUMBER => 'błędny numer', + DB_ERROR_MISMATCH => 'niedopasowanie', + DB_ERROR_NODBSELECTED => 'baza danych nie została wybrana', + DB_ERROR_NOSUCHFIELD => 'nie znaleziono pola', + DB_ERROR_NOSUCHTABLE => 'nie znaleziono tabeli', + DB_ERROR_NOT_CAPABLE => 'nie zdolny', + DB_ERROR_NOT_FOUND => 'nie znaleziono', + DB_ERROR_NOT_LOCKED => 'nie zakmnięty', + DB_ERROR_SYNTAX => 'błąd składni', + DB_ERROR_UNSUPPORTED => 'nie obsługuje', + DB_ERROR_VALUE_COUNT_ON_ROW => 'wartość liczona w szeregu', + DB_ERROR_INVALID_DSN => 'błędny DSN', + DB_ERROR_CONNECT_FAILED => 'połączenie nie zostało zrealizowane', + 0 => 'brak błędów', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'niedostateczna ilość informacji', + DB_ERROR_EXTENSION_NOT_FOUND=> 'nie znaleziono rozszerzenia', + DB_ERROR_NOSUCHDB => 'nie znaleziono bazy', + DB_ERROR_ACCESS_VIOLATION => 'niedostateczne uprawnienia' +); diff --git a/ehcp/adodb5/lang/adodb-pt-br.inc.php b/ehcp/adodb5/lang/adodb-pt-br.inc.php new file mode 100644 index 0000000..9c687b0 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-pt-br.inc.php @@ -0,0 +1,34 @@ + 'pt-br', + DB_ERROR => 'erro desconhecido', + DB_ERROR_ALREADY_EXISTS => 'já existe', + DB_ERROR_CANNOT_CREATE => 'impossível criar', + DB_ERROR_CANNOT_DELETE => 'impossível excluír', + DB_ERROR_CANNOT_DROP => 'impossível remover', + DB_ERROR_CONSTRAINT => 'violação do confinamente', + DB_ERROR_DIVZERO => 'divisão por zero', + DB_ERROR_INVALID => 'inválido', + DB_ERROR_INVALID_DATE => 'data ou hora inválida', + DB_ERROR_INVALID_NUMBER => 'número inválido', + DB_ERROR_MISMATCH => 'erro', + DB_ERROR_NODBSELECTED => 'nenhum banco de dados selecionado', + DB_ERROR_NOSUCHFIELD => 'campo inválido', + DB_ERROR_NOSUCHTABLE => 'tabela inexistente', + DB_ERROR_NOT_CAPABLE => 'capacidade inválida para este BD', + DB_ERROR_NOT_FOUND => 'não encontrado', + DB_ERROR_NOT_LOCKED => 'não bloqueado', + DB_ERROR_SYNTAX => 'erro de sintaxe', + DB_ERROR_UNSUPPORTED => +'não suportado', + DB_ERROR_VALUE_COUNT_ON_ROW => 'a quantidade de colunas não corresponde ao de valores', + DB_ERROR_INVALID_DSN => 'DSN inválido', + DB_ERROR_CONNECT_FAILED => 'falha na conexão', + 0 => 'sem erro', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'dados insuficientes', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensão não encontrada', + DB_ERROR_NOSUCHDB => 'banco de dados não encontrado', + DB_ERROR_ACCESS_VIOLATION => 'permissão insuficiente' +); diff --git a/ehcp/adodb5/lang/adodb-ro.inc.php b/ehcp/adodb5/lang/adodb-ro.inc.php new file mode 100644 index 0000000..b6ddd31 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-ro.inc.php @@ -0,0 +1,34 @@ + */ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ro', + DB_ERROR => 'eroare necunoscuta', + DB_ERROR_ALREADY_EXISTS => 'deja exista', + DB_ERROR_CANNOT_CREATE => 'nu se poate creea', + DB_ERROR_CANNOT_DELETE => 'nu se poate sterge', + DB_ERROR_CANNOT_DROP => 'nu se poate executa drop', + DB_ERROR_CONSTRAINT => 'violare de constrain', + DB_ERROR_DIVZERO => 'se divide la zero', + DB_ERROR_INVALID => 'invalid', + DB_ERROR_INVALID_DATE => 'data sau timp invalide', + DB_ERROR_INVALID_NUMBER => 'numar invalid', + DB_ERROR_MISMATCH => 'nepotrivire-mismatch', + DB_ERROR_NODBSELECTED => 'nu exista baza de date selectata', + DB_ERROR_NOSUCHFIELD => 'camp inexistent', + DB_ERROR_NOSUCHTABLE => 'tabela inexistenta', + DB_ERROR_NOT_CAPABLE => 'functie optionala neinstalata', + DB_ERROR_NOT_FOUND => 'negasit', + DB_ERROR_NOT_LOCKED => 'neblocat', + DB_ERROR_SYNTAX => 'eroare de sintaxa', + DB_ERROR_UNSUPPORTED => 'nu e suportat', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valoare prea mare pentru coloana', + DB_ERROR_INVALID_DSN => 'DSN invalid', + DB_ERROR_CONNECT_FAILED => 'conectare esuata', + 0 => 'fara eroare', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'data introduse insuficiente', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie negasita', + DB_ERROR_NOSUCHDB => 'nu exista baza de date', + DB_ERROR_ACCESS_VIOLATION => 'permisiuni insuficiente' +); diff --git a/ehcp/adodb5/lang/adodb-ru.inc.php b/ehcp/adodb5/lang/adodb-ru.inc.php new file mode 100644 index 0000000..67d80f2 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-ru.inc.php @@ -0,0 +1,34 @@ + 'ru', + DB_ERROR => 'неизвестная ошибка', + DB_ERROR_ALREADY_EXISTS => 'уже существует', + DB_ERROR_CANNOT_CREATE => 'невозможно создать', + DB_ERROR_CANNOT_DELETE => 'невозможно удалить', + DB_ERROR_CANNOT_DROP => 'невозможно удалить (drop)', + DB_ERROR_CONSTRAINT => 'нарушение условий проверки', + DB_ERROR_DIVZERO => 'деление на 0', + DB_ERROR_INVALID => 'неправильно', + DB_ERROR_INVALID_DATE => 'некорректная дата или время', + DB_ERROR_INVALID_NUMBER => 'некорректное число', + DB_ERROR_MISMATCH => 'ошибка', + DB_ERROR_NODBSELECTED => 'БД не выбрана', + DB_ERROR_NOSUCHFIELD => 'не существует поле', + DB_ERROR_NOSUCHTABLE => 'не существует таблица', + DB_ERROR_NOT_CAPABLE => 'СУБД не в состоянии', + DB_ERROR_NOT_FOUND => 'не найдено', + DB_ERROR_NOT_LOCKED => 'не заблокировано', + DB_ERROR_SYNTAX => 'синтаксическая ошибка', + DB_ERROR_UNSUPPORTED => 'не поддерживается', + DB_ERROR_VALUE_COUNT_ON_ROW => 'счетчик значений в строке', + DB_ERROR_INVALID_DSN => 'неправильная DSN', + DB_ERROR_CONNECT_FAILED => 'соединение неуспешно', + 0 => 'нет ошибки', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'предоставлено недостаточно данных', + DB_ERROR_EXTENSION_NOT_FOUND=> 'расширение не найдено', + DB_ERROR_NOSUCHDB => 'не существует БД', + DB_ERROR_ACCESS_VIOLATION => 'недостаточно прав доступа' +); diff --git a/ehcp/adodb5/lang/adodb-sv.inc.php b/ehcp/adodb5/lang/adodb-sv.inc.php new file mode 100644 index 0000000..d3be6b0 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-sv.inc.php @@ -0,0 +1,32 @@ + 'en', + DB_ERROR => 'Okänt fel', + DB_ERROR_ALREADY_EXISTS => 'finns redan', + DB_ERROR_CANNOT_CREATE => 'kan inte skapa', + DB_ERROR_CANNOT_DELETE => 'kan inte ta bort', + DB_ERROR_CANNOT_DROP => 'kan inte släppa', + DB_ERROR_CONSTRAINT => 'begränsning kränkt', + DB_ERROR_DIVZERO => 'division med noll', + DB_ERROR_INVALID => 'ogiltig', + DB_ERROR_INVALID_DATE => 'ogiltigt datum eller tid', + DB_ERROR_INVALID_NUMBER => 'ogiltigt tal', + DB_ERROR_MISMATCH => 'felaktig matchning', + DB_ERROR_NODBSELECTED => 'ingen databas vald', + DB_ERROR_NOSUCHFIELD => 'inget sådant fält', + DB_ERROR_NOSUCHTABLE => 'ingen sådan tabell', + DB_ERROR_NOT_CAPABLE => 'DB backend klarar det inte', + DB_ERROR_NOT_FOUND => 'finns inte', + DB_ERROR_NOT_LOCKED => 'inte låst', + DB_ERROR_SYNTAX => 'syntaxfel', + DB_ERROR_UNSUPPORTED => 'stöds ej', + DB_ERROR_VALUE_COUNT_ON_ROW => 'värde räknat på rad', + DB_ERROR_INVALID_DSN => 'ogiltig DSN', + DB_ERROR_CONNECT_FAILED => 'anslutning misslyckades', + 0 => 'inget fel', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'otillräckligt med data angivet', + DB_ERROR_EXTENSION_NOT_FOUND=> 'utökning hittades ej', + DB_ERROR_NOSUCHDB => 'ingen sådan databas', + DB_ERROR_ACCESS_VIOLATION => 'otillräckliga rättigheter' +); diff --git a/ehcp/adodb5/lang/adodb-th.inc.php b/ehcp/adodb5/lang/adodb-th.inc.php new file mode 100644 index 0000000..a068564 --- /dev/null +++ b/ehcp/adodb5/lang/adodb-th.inc.php @@ -0,0 +1,32 @@ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'th', + DB_ERROR => 'error ไม่รู้สาเหตุ', + DB_ERROR_ALREADY_EXISTS => 'มี�?ล้ว', + DB_ERROR_CANNOT_CREATE => 'สร้างไม่ได้', + DB_ERROR_CANNOT_DELETE => 'ลบไม่ได้', + DB_ERROR_CANNOT_DROP => 'drop ไม่ได้', + DB_ERROR_CONSTRAINT => 'constraint violation', + DB_ERROR_DIVZERO => 'หา�?ด้วยสู�?', + DB_ERROR_INVALID => 'ไม่ valid', + DB_ERROR_INVALID_DATE => 'วันที่ เวลา ไม่ valid', + DB_ERROR_INVALID_NUMBER => 'เลขไม่ valid', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'ไม่ได้เลือ�?�?านข้อมูล', + DB_ERROR_NOSUCHFIELD => 'ไม่มีฟีลด์นี้', + DB_ERROR_NOSUCHTABLE => 'ไม่มีตารางนี้', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'ไม่พบ', + DB_ERROR_NOT_LOCKED => 'ไม่ได้ล๊อ�?', + DB_ERROR_SYNTAX => 'ผิด syntax', + DB_ERROR_UNSUPPORTED => 'ไม่ support', + DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', + DB_ERROR_INVALID_DSN => 'invalid DSN', + DB_ERROR_CONNECT_FAILED => 'ไม่สามารถ connect', + 0 => 'no error', + DB_ERROR_NEED_MORE_DATA => 'ข้อมูลไม่เพียงพอ', + DB_ERROR_EXTENSION_NOT_FOUND=> 'ไม่พบ extension', + DB_ERROR_NOSUCHDB => 'ไม่มีข้อมูลนี้', + DB_ERROR_ACCESS_VIOLATION => 'permissions ไม่พอ' +); diff --git a/ehcp/adodb5/lang/adodb-uk.inc.php b/ehcp/adodb5/lang/adodb-uk.inc.php new file mode 100644 index 0000000..2ace5bc --- /dev/null +++ b/ehcp/adodb5/lang/adodb-uk.inc.php @@ -0,0 +1,34 @@ + 'uk', + DB_ERROR => 'невідома помилка', + DB_ERROR_ALREADY_EXISTS => 'вже існує', + DB_ERROR_CANNOT_CREATE => 'неможливо створити', + DB_ERROR_CANNOT_DELETE => 'неможливо видалити', + DB_ERROR_CANNOT_DROP => 'неможливо знищити (drop)', + DB_ERROR_CONSTRAINT => 'порушення умов перевірки', + DB_ERROR_DIVZERO => 'ділення на 0', + DB_ERROR_INVALID => 'неправильно', + DB_ERROR_INVALID_DATE => 'неправильна дата чи час', + DB_ERROR_INVALID_NUMBER => 'неправильне число', + DB_ERROR_MISMATCH => 'помилка', + DB_ERROR_NODBSELECTED => 'не вибрано БД', + DB_ERROR_NOSUCHFIELD => 'не існує поле', + DB_ERROR_NOSUCHTABLE => 'не існує таблиця', + DB_ERROR_NOT_CAPABLE => 'СУБД не в стані', + DB_ERROR_NOT_FOUND => 'не знайдено', + DB_ERROR_NOT_LOCKED => 'не заблоковано', + DB_ERROR_SYNTAX => 'синтаксична помилка', + DB_ERROR_UNSUPPORTED => 'не підтримується', + DB_ERROR_VALUE_COUNT_ON_ROW => 'рахівник значень в стрічці', + DB_ERROR_INVALID_DSN => 'неправильна DSN', + DB_ERROR_CONNECT_FAILED => 'з\'єднання неуспішне', + 0 => 'все гаразд', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'надано недостатньо даних', + DB_ERROR_EXTENSION_NOT_FOUND=> 'розширення не знайдено', + DB_ERROR_NOSUCHDB => 'не існує БД', + DB_ERROR_ACCESS_VIOLATION => 'недостатньо прав доступа' +); diff --git a/ehcp/adodb5/nbproject/private/config.properties b/ehcp/adodb5/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/adodb5/nbproject/private/private.properties b/ehcp/adodb5/nbproject/private/private.properties new file mode 100644 index 0000000..9a14a3b --- /dev/null +++ b/ehcp/adodb5/nbproject/private/private.properties @@ -0,0 +1,6 @@ +copy.src.files=false +copy.src.on.open=false +copy.src.target= +index.file=test-sqlite.php +run.as=SCRIPT +url=http://localhost/ diff --git a/ehcp/adodb5/nbproject/private/private.xml b/ehcp/adodb5/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/ehcp/adodb5/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ehcp/adodb5/nbproject/project.properties b/ehcp/adodb5/nbproject/project.properties new file mode 100644 index 0000000..76f6f91 --- /dev/null +++ b/ehcp/adodb5/nbproject/project.properties @@ -0,0 +1,7 @@ +include.path=${php.global.include.path} +php.version=PHP_56 +source.encoding=UTF-8 +src.dir=. +tags.asp=false +tags.short=false +web.root=. diff --git a/ehcp/adodb5/nbproject/project.xml b/ehcp/adodb5/nbproject/project.xml new file mode 100644 index 0000000..b02cf38 --- /dev/null +++ b/ehcp/adodb5/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.php.project + + + adodb-php + + + diff --git a/ehcp/adodb5/pear/Auth/Container/ADOdb.php b/ehcp/adodb5/pear/Auth/Container/ADOdb.php new file mode 100644 index 0000000..1f9d52a --- /dev/null +++ b/ehcp/adodb5/pear/Auth/Container/ADOdb.php @@ -0,0 +1,406 @@ + + Richard Tango-Lowy +*/ + +require_once 'Auth/Container.php'; +require_once 'adodb.inc.php'; +require_once 'adodb-pear.inc.php'; +require_once 'adodb-errorpear.inc.php'; + +/** + * Storage driver for fetching login data from a database using ADOdb-PHP. + * + * This storage driver can use all databases which are supported + * by the ADBdb DB abstraction layer to fetch login data. + * See http://php.weblogs.com/adodb for information on ADOdb. + * NOTE: The ADOdb directory MUST be in your PHP include_path! + * + * @author Richard Tango-Lowy + * @package Auth + * @version $Revision: 1.3 $ + */ +class Auth_Container_ADOdb extends Auth_Container +{ + + /** + * Additional options for the storage container + * @var array + */ + var $options = array(); + + /** + * DB object + * @var object + */ + var $db = null; + var $dsn = ''; + + /** + * User that is currently selected from the DB. + * @var string + */ + var $activeUser = ''; + + // {{{ Constructor + + /** + * Constructor of the container class + * + * Initate connection to the database via PEAR::ADOdb + * + * @param string Connection data or DB object + * @return object Returns an error object if something went wrong + */ + function __construct($dsn) + { + $this->_setDefaults(); + + if (is_array($dsn)) { + $this->_parseOptions($dsn); + + if (empty($this->options['dsn'])) { + PEAR::raiseError('No connection parameters specified!'); + } + } else { + // Extract db_type from dsn string. + $this->options['dsn'] = $dsn; + } + } + + // }}} + // {{{ _connect() + + /** + * Connect to database by using the given DSN string + * + * @access private + * @param string DSN string + * @return mixed Object on error, otherwise bool + */ + function _connect($dsn) + { + if (is_string($dsn) || is_array($dsn)) { + if(!$this->db) { + $this->db = ADONewConnection($dsn); + if( $err = ADODB_Pear_error() ) { + return PEAR::raiseError($err); + } + } + + } else { + return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__, + 41, + PEAR_ERROR_RETURN, + null, + null + ); + } + + if(!$this->db) { + return PEAR::raiseError(ADODB_Pear_error()); + } else { + return true; + } + } + + // }}} + // {{{ _prepare() + + /** + * Prepare database connection + * + * This function checks if we have already opened a connection to + * the database. If that's not the case, a new connection is opened. + * + * @access private + * @return mixed True or a DB error object. + */ + function _prepare() + { + if(!$this->db) { + $res = $this->_connect($this->options['dsn']); + } + return true; + } + + // }}} + // {{{ query() + + /** + * Prepare query to the database + * + * This function checks if we have already opened a connection to + * the database. If that's not the case, a new connection is opened. + * After that the query is passed to the database. + * + * @access public + * @param string Query string + * @return mixed a DB_result object or DB_OK on success, a DB + * or PEAR error on failure + */ + function query($query) + { + $err = $this->_prepare(); + if ($err !== true) { + return $err; + } + return $this->db->query($query); + } + + // }}} + // {{{ _setDefaults() + + /** + * Set some default options + * + * @access private + * @return void + */ + function _setDefaults() + { + $this->options['db_type'] = 'mysql'; + $this->options['table'] = 'auth'; + $this->options['usernamecol'] = 'username'; + $this->options['passwordcol'] = 'password'; + $this->options['dsn'] = ''; + $this->options['db_fields'] = ''; + $this->options['cryptType'] = 'md5'; + } + + // }}} + // {{{ _parseOptions() + + /** + * Parse options passed to the container class + * + * @access private + * @param array + */ + function _parseOptions($array) + { + foreach ($array as $key => $value) { + if (isset($this->options[$key])) { + $this->options[$key] = $value; + } + } + + /* Include additional fields if they exist */ + if(!empty($this->options['db_fields'])){ + if(is_array($this->options['db_fields'])){ + $this->options['db_fields'] = join($this->options['db_fields'], ', '); + } + $this->options['db_fields'] = ', '.$this->options['db_fields']; + } + } + + // }}} + // {{{ fetchData() + + /** + * Get user information from database + * + * This function uses the given username to fetch + * the corresponding login data from the database + * table. If an account that matches the passed username + * and password is found, the function returns true. + * Otherwise it returns false. + * + * @param string Username + * @param string Password + * @return mixed Error object or boolean + */ + function fetchData($username, $password) + { + // Prepare for a database query + $err = $this->_prepare(); + if ($err !== true) { + return PEAR::raiseError($err->getMessage(), $err->getCode()); + } + + // Find if db_fields contains a *, i so assume all col are selected + if(strstr($this->options['db_fields'], '*')){ + $sql_from = "*"; + } + else{ + $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields']; + } + + $query = "SELECT ".$sql_from. + " FROM ".$this->options['table']. + " WHERE ".$this->options['usernamecol']." = " . $this->db->Quote($username); + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rset = $this->db->Execute( $query ); + $res = $rset->fetchRow(); + + if (DB::isError($res)) { + return PEAR::raiseError($res->getMessage(), $res->getCode()); + } + if (!is_array($res)) { + $this->activeUser = ''; + return false; + } + if ($this->verifyPassword(trim($password, "\r\n"), + trim($res[$this->options['passwordcol']], "\r\n"), + $this->options['cryptType'])) { + // Store additional field values in the session + foreach ($res as $key => $value) { + if ($key == $this->options['passwordcol'] || + $key == $this->options['usernamecol']) { + continue; + } + // Use reference to the auth object if exists + // This is because the auth session variable can change so a static call to setAuthData does not make sence + if(is_object($this->_auth_obj)){ + $this->_auth_obj->setAuthData($key, $value); + } else { + Auth::setAuthData($key, $value); + } + } + + return true; + } + + $this->activeUser = $res[$this->options['usernamecol']]; + return false; + } + + // }}} + // {{{ listUsers() + + function listUsers() + { + $err = $this->_prepare(); + if ($err !== true) { + return PEAR::raiseError($err->getMessage(), $err->getCode()); + } + + $retVal = array(); + + // Find if db_fileds contains a *, i so assume all col are selected + if(strstr($this->options['db_fields'], '*')){ + $sql_from = "*"; + } + else{ + $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields']; + } + + $query = sprintf("SELECT %s FROM %s", + $sql_from, + $this->options['table'] + ); + $res = $this->db->getAll($query, null, DB_FETCHMODE_ASSOC); + + if (DB::isError($res)) { + return PEAR::raiseError($res->getMessage(), $res->getCode()); + } else { + foreach ($res as $user) { + $user['username'] = $user[$this->options['usernamecol']]; + $retVal[] = $user; + } + } + return $retVal; + } + + // }}} + // {{{ addUser() + + /** + * Add user to the storage container + * + * @access public + * @param string Username + * @param string Password + * @param mixed Additional information that are stored in the DB + * + * @return mixed True on success, otherwise error object + */ + function addUser($username, $password, $additional = "") + { + if (function_exists($this->options['cryptType'])) { + $cryptFunction = $this->options['cryptType']; + } else { + $cryptFunction = 'md5'; + } + + $additional_key = ''; + $additional_value = ''; + + if (is_array($additional)) { + foreach ($additional as $key => $value) { + $additional_key .= ', ' . $key; + $additional_value .= ", '" . $value . "'"; + } + } + + $query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)", + $this->options['table'], + $this->options['usernamecol'], + $this->options['passwordcol'], + $additional_key, + $username, + $cryptFunction($password), + $additional_value + ); + + $res = $this->query($query); + + if (DB::isError($res)) { + return PEAR::raiseError($res->getMessage(), $res->getCode()); + } else { + return true; + } + } + + // }}} + // {{{ removeUser() + + /** + * Remove user from the storage container + * + * @access public + * @param string Username + * + * @return mixed True on success, otherwise error object + */ + function removeUser($username) + { + $query = sprintf("DELETE FROM %s WHERE %s = '%s'", + $this->options['table'], + $this->options['usernamecol'], + $username + ); + + $res = $this->query($query); + + if (DB::isError($res)) { + return PEAR::raiseError($res->getMessage(), $res->getCode()); + } else { + return true; + } + } + + // }}} +} + +function showDbg( $string ) { + print " +-- $string

"; +} +function dump( $var, $str, $vardump = false ) { + print "

$str

";
+	( !$vardump ) ? ( print_r( $var )) : ( var_dump( $var ));
+	print "
"; +} diff --git a/ehcp/adodb5/pear/auth_adodb_example.php b/ehcp/adodb5/pear/auth_adodb_example.php new file mode 100644 index 0000000..3b7cf5e --- /dev/null +++ b/ehcp/adodb5/pear/auth_adodb_example.php @@ -0,0 +1,25 @@ + +
+ + + +
+ $dsn, 'table' => 'auth', 'cryptType' => 'none', + 'usernamecol' => 'username', 'passwordcol' => 'password'); +$a = new Auth("ADOdb", $params, "loginFunction"); +$a->start(); + +if ($a->getAuth()) { + echo "Success"; + // * The output of your site goes here. +} diff --git a/ehcp/adodb5/pear/readme.Auth.txt b/ehcp/adodb5/pear/readme.Auth.txt new file mode 100644 index 0000000..f5b162c --- /dev/null +++ b/ehcp/adodb5/pear/readme.Auth.txt @@ -0,0 +1,20 @@ +From: Rich Tango-Lowy (richtl#arscognita.com) +Date: Sat, May 29, 2004 11:20 am + +OK, I hacked out an ADOdb container for PEAR-Auth. The error handling's +a bit of a mess, but all the methods work. + +Copy ADOdb.php to your pear/Auth/Container/ directory. + +Use the ADOdb container exactly as you would the DB +container, but specify 'ADOdb' instead of 'DB': + +$dsn = "mysql://myuser:mypass@localhost/authdb"; +$a = new Auth("ADOdb", $dsn, "loginFunction"); + + +------------------- + +John Lim adds: + +See http://pear.php.net/manual/en/package.authentication.php diff --git a/ehcp/adodb5/perf/perf-db2.inc.php b/ehcp/adodb5/perf/perf-db2.inc.php new file mode 100644 index 0000000..9d2f637 --- /dev/null +++ b/ehcp/adodb5/perf/perf-db2.inc.php @@ -0,0 +1,108 @@ + array('RATIO', + "SELECT + case when sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)=0 then 0 + else 100*(1-sum(POOL_DATA_P_READS+POOL_INDEX_P_READS)/sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)) end + FROM TABLE(SNAPSHOT_APPL('',-2)) as t", + '=WarnCacheRatio'), + + 'Data Cache', + 'data cache buffers' => array('DATAC', + 'select sum(npages) from SYSCAT.BUFFERPOOLS', + 'See tuning reference.' ), + 'cache blocksize' => array('DATAC', + 'select avg(pagesize) from SYSCAT.BUFFERPOOLS', + '' ), + 'data cache size' => array('DATAC', + 'select sum(npages*pagesize) from SYSCAT.BUFFERPOOLS', + '' ), + 'Connections', + 'current connections' => array('SESS', + "SELECT count(*) FROM TABLE(SNAPSHOT_APPL_INFO('',-2)) as t", + ''), + + false + ); + + + function __construct(&$conn) + { + $this->conn = $conn; + } + + function Explain($sql,$partial=false) + { + $save = $this->conn->LogSQL(false); + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + $qno = rand(); + $ok = $this->conn->Execute("EXPLAIN PLAN SET QUERYNO=$qno FOR $sql"); + ob_start(); + if (!$ok) echo "

Have EXPLAIN tables been created?

"; + else { + $rs = $this->conn->Execute("select * from explain_statement where queryno=$qno"); + if ($rs) rs2html($rs); + } + $s = ob_get_contents(); + ob_end_clean(); + $this->conn->LogSQL($save); + + $s .= $this->Tracer($sql); + return $s; + } + + /** + * Gets a list of tables + * + * @param int $throwaway discarded variable to match the parent method + * @return string The formatted table list + */ + function Tables($throwaway=0) + { + $rs = $this->conn->Execute("select tabschema,tabname,card as rows, + npages pages_used,fpages pages_allocated, tbspace tablespace + from syscat.tables where tabschema not in ('SYSCAT','SYSIBM','SYSSTAT') order by 1,2"); + return rs2html($rs,false,false,false,false); + } +} diff --git a/ehcp/adodb5/perf/perf-informix.inc.php b/ehcp/adodb5/perf/perf-informix.inc.php new file mode 100644 index 0000000..8801d8d --- /dev/null +++ b/ehcp/adodb5/perf/perf-informix.inc.php @@ -0,0 +1,71 @@ + array('RATIOH', + "select round((1-(wt.value / (rd.value + wr.value)))*100,2) + from sysmaster:sysprofile wr, sysmaster:sysprofile rd, sysmaster:sysprofile wt + where rd.name = 'pagreads' and + wr.name = 'pagwrites' and + wt.name = 'buffwts'", + '=WarnCacheRatio'), + 'IO', + 'data reads' => array('IO', + "select value from sysmaster:sysprofile where name='pagreads'", + 'Page reads'), + + 'data writes' => array('IO', + "select value from sysmaster:sysprofile where name='pagwrites'", + 'Page writes'), + + 'Connections', + 'current connections' => array('SESS', + 'select count(*) from sysmaster:syssessions', + 'Number of sessions'), + + false + + ); + + function __construct(&$conn) + { + $this->conn = $conn; + } + +} diff --git a/ehcp/adodb5/perf/perf-mssql.inc.php b/ehcp/adodb5/perf/perf-mssql.inc.php new file mode 100644 index 0000000..0583722 --- /dev/null +++ b/ehcp/adodb5/perf/perf-mssql.inc.php @@ -0,0 +1,164 @@ + array('RATIO', + "select round((a.cntr_value*100.0)/b.cntr_value,2) from master.dbo.sysperfinfo a, master.dbo.sysperfinfo b where a.counter_name = 'Buffer cache hit ratio' and b.counter_name='Buffer cache hit ratio base'", + '=WarnCacheRatio'), + 'prepared sql hit ratio' => array('RATIO', + array('dbcc cachestats','Prepared',1,100), + ''), + 'adhoc sql hit ratio' => array('RATIO', + array('dbcc cachestats','Adhoc',1,100), + ''), + 'IO', + 'data reads' => array('IO', + "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page reads/sec'"), + 'data writes' => array('IO', + "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page writes/sec'"), + + 'Data Cache', + 'data cache size' => array('DATAC', + "select cntr_value*8192 from master.dbo.sysperfinfo where counter_name = 'Total Pages' and object_name='SQLServer:Buffer Manager'", + '' ), + 'data cache blocksize' => array('DATAC', + "select 8192",'page size'), + 'Connections', + 'current connections' => array('SESS', + '=sp_who', + ''), + 'max connections' => array('SESS', + "SELECT @@MAX_CONNECTIONS", + ''), + + false + ); + + + function __construct(&$conn) + { + if ($conn->dataProvider == 'odbc') { + $this->sql1 = 'sql1'; + //$this->explain = false; + } + $this->conn = $conn; + } + + function Explain($sql,$partial=false) + { + + $save = $this->conn->LogSQL(false); + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + + $s = '

Explain: '.htmlspecialchars($sql).'

'; + $this->conn->Execute("SET SHOWPLAN_ALL ON;"); + $sql = str_replace('?',"''",$sql); + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs = $this->conn->Execute($sql); + //adodb_printr($rs); + $ADODB_FETCH_MODE = $save; + if ($rs && !$rs->EOF) { + $rs->MoveNext(); + $s .= ''; + while (!$rs->EOF) { + $s .= '\n"; ## NOTE CORRUPT tag is intentional!!!! + $rs->MoveNext(); + } + $s .= '
Rows IO CPU     Plan
'.round($rs->fields[8],1).''.round($rs->fields[9],3).''.round($rs->fields[10],3).'
'.htmlspecialchars($rs->fields[0])."
'; + + $rs->NextRecordSet(); + } + + $this->conn->Execute("SET SHOWPLAN_ALL OFF;"); + $this->conn->LogSQL($save); + $s .= $this->Tracer($sql); + return $s; + } + + function Tables() + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + //$this->conn->debug=1; + $s = ''; + $rs1 = $this->conn->Execute("select distinct name from sysobjects where xtype='U'"); + if ($rs1) { + while (!$rs1->EOF) { + $tab = $rs1->fields[0]; + $tabq = $this->conn->qstr($tab); + $rs2 = $this->conn->Execute("sp_spaceused $tabq"); + if ($rs2) { + $s .= ''; + $rs2->Close(); + } + $rs1->MoveNext(); + } + $rs1->Close(); + } + $ADODB_FETCH_MODE = $save; + return $s.'
tablenamesize_in_kindex sizereserved size
'.$tab.''.$rs2->fields[3].''.$rs2->fields[4].''.$rs2->fields[2].'
'; + } + + function sp_who() + { + $arr = $this->conn->GetArray('sp_who'); + return sizeof($arr); + } + + function HealthCheck($cli=false) + { + + $this->conn->Execute('dbcc traceon(3604)'); + $html = adodb_perf::HealthCheck($cli); + $this->conn->Execute('dbcc traceoff(3604)'); + return $html; + } + + +} diff --git a/ehcp/adodb5/perf/perf-mssqlnative.inc.php b/ehcp/adodb5/perf/perf-mssqlnative.inc.php new file mode 100644 index 0000000..4ce613e --- /dev/null +++ b/ehcp/adodb5/perf/perf-mssqlnative.inc.php @@ -0,0 +1,164 @@ + array('RATIO', + "select round((a.cntr_value*100.0)/b.cntr_value,2) from master.dbo.sysperfinfo a, master.dbo.sysperfinfo b where a.counter_name = 'Buffer cache hit ratio' and b.counter_name='Buffer cache hit ratio base'", + '=WarnCacheRatio'), + 'prepared sql hit ratio' => array('RATIO', + array('dbcc cachestats','Prepared',1,100), + ''), + 'adhoc sql hit ratio' => array('RATIO', + array('dbcc cachestats','Adhoc',1,100), + ''), + 'IO', + 'data reads' => array('IO', + "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page reads/sec'"), + 'data writes' => array('IO', + "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page writes/sec'"), + + 'Data Cache', + 'data cache size' => array('DATAC', + "select cntr_value*8192 from master.dbo.sysperfinfo where counter_name = 'Total Pages' and object_name='SQLServer:Buffer Manager'", + '' ), + 'data cache blocksize' => array('DATAC', + "select 8192",'page size'), + 'Connections', + 'current connections' => array('SESS', + '=sp_who', + ''), + 'max connections' => array('SESS', + "SELECT @@MAX_CONNECTIONS", + ''), + + false + ); + + + function __construct(&$conn) + { + if ($conn->dataProvider == 'odbc') { + $this->sql1 = 'sql1'; + //$this->explain = false; + } + $this->conn =& $conn; + } + + function Explain($sql,$partial=false) + { + + $save = $this->conn->LogSQL(false); + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + + $s = '

Explain: '.htmlspecialchars($sql).'

'; + $this->conn->Execute("SET SHOWPLAN_ALL ON;"); + $sql = str_replace('?',"''",$sql); + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs =& $this->conn->Execute($sql); + //adodb_printr($rs); + $ADODB_FETCH_MODE = $save; + if ($rs) { + $rs->MoveNext(); + $s .= ''; + while (!$rs->EOF) { + $s .= '\n"; ## NOTE CORRUPT tag is intentional!!!! + $rs->MoveNext(); + } + $s .= '
Rows IO CPU     Plan
'.round($rs->fields[8],1).''.round($rs->fields[9],3).''.round($rs->fields[10],3).'
'.htmlspecialchars($rs->fields[0])."
'; + + $rs->NextRecordSet(); + } + + $this->conn->Execute("SET SHOWPLAN_ALL OFF;"); + $this->conn->LogSQL($save); + $s .= $this->Tracer($sql); + return $s; + } + + function Tables($orderby='1') + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + //$this->conn->debug=1; + $s = ''; + $rs1 = $this->conn->Execute("select distinct name from sysobjects where xtype='U'"); + if ($rs1) { + while (!$rs1->EOF) { + $tab = $rs1->fields[0]; + $tabq = $this->conn->qstr($tab); + $rs2 = $this->conn->Execute("sp_spaceused $tabq"); + if ($rs2) { + $s .= ''; + $rs2->Close(); + } + $rs1->MoveNext(); + } + $rs1->Close(); + } + $ADODB_FETCH_MODE = $save; + return $s.'
tablenamesize_in_kindex sizereserved size
'.$tab.''.$rs2->fields[3].''.$rs2->fields[4].''.$rs2->fields[2].'
'; + } + + function sp_who() + { + $arr = $this->conn->GetArray('sp_who'); + return sizeof($arr); + } + + function HealthCheck($cli=false) + { + + $this->conn->Execute('dbcc traceon(3604)'); + $html = adodb_perf::HealthCheck($cli); + $this->conn->Execute('dbcc traceoff(3604)'); + return $html; + } + + +} diff --git a/ehcp/adodb5/perf/perf-mysql.inc.php b/ehcp/adodb5/perf/perf-mysql.inc.php new file mode 100644 index 0000000..53ab75f --- /dev/null +++ b/ehcp/adodb5/perf/perf-mysql.inc.php @@ -0,0 +1,316 @@ + array('RATIO', + '=GetKeyHitRatio', + '=WarnCacheRatio'), + 'InnoDB cache hit ratio' => array('RATIO', + '=GetInnoDBHitRatio', + '=WarnCacheRatio'), + 'data cache hit ratio' => array('HIDE', # only if called + '=FindDBHitRatio', + '=WarnCacheRatio'), + 'sql cache hit ratio' => array('RATIO', + '=GetQHitRatio', + ''), + 'IO', + 'data reads' => array('IO', + '=GetReads', + 'Number of selects (Key_reads is not accurate)'), + 'data writes' => array('IO', + '=GetWrites', + 'Number of inserts/updates/deletes * coef (Key_writes is not accurate)'), + + 'Data Cache', + 'MyISAM data cache size' => array('DATAC', + array("show variables", 'key_buffer_size'), + '' ), + 'BDB data cache size' => array('DATAC', + array("show variables", 'bdb_cache_size'), + '' ), + 'InnoDB data cache size' => array('DATAC', + array("show variables", 'innodb_buffer_pool_size'), + '' ), + 'Memory Usage', + 'read buffer size' => array('CACHE', + array("show variables", 'read_buffer_size'), + '(per session)'), + 'sort buffer size' => array('CACHE', + array("show variables", 'sort_buffer_size'), + 'Size of sort buffer (per session)' ), + 'table cache' => array('CACHE', + array("show variables", 'table_cache'), + 'Number of tables to keep open'), + 'Connections', + 'current connections' => array('SESS', + array('show status','Threads_connected'), + ''), + 'max connections' => array( 'SESS', + array("show variables",'max_connections'), + ''), + + false + ); + + function __construct(&$conn) + { + $this->conn = $conn; + } + + function Explain($sql,$partial=false) + { + + if (strtoupper(substr(trim($sql),0,6)) !== 'SELECT') return '

Unable to EXPLAIN non-select statement

'; + $save = $this->conn->LogSQL(false); + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + $sql = str_replace('?',"''",$sql); + + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $sql = $this->conn->GetOne("select sql1 from adodb_logsql where sql1 like $sqlq"); + } + + $s = '

Explain: '.htmlspecialchars($sql).'

'; + $rs = $this->conn->Execute('EXPLAIN '.$sql); + $s .= rs2html($rs,false,false,false,false); + $this->conn->LogSQL($save); + $s .= $this->Tracer($sql); + return $s; + } + + function Tables() + { + if (!$this->tablesSQL) return false; + + $rs = $this->conn->Execute($this->tablesSQL); + if (!$rs) return false; + + $html = rs2html($rs,false,false,false,false); + return $html; + } + + function GetReads() + { + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->Execute('show status'); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if (!$rs) return 0; + $val = 0; + while (!$rs->EOF) { + switch($rs->fields[0]) { + case 'Com_select': + $val = $rs->fields[1]; + $rs->Close(); + return $val; + } + $rs->MoveNext(); + } + + $rs->Close(); + + return $val; + } + + function GetWrites() + { + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->Execute('show status'); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if (!$rs) return 0; + $val = 0.0; + while (!$rs->EOF) { + switch($rs->fields[0]) { + case 'Com_insert': + $val += $rs->fields[1]; break; + case 'Com_delete': + $val += $rs->fields[1]; break; + case 'Com_update': + $val += $rs->fields[1]/2; + $rs->Close(); + return $val; + } + $rs->MoveNext(); + } + + $rs->Close(); + + return $val; + } + + function FindDBHitRatio() + { + // first find out type of table + //$this->conn->debug=1; + + global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->Execute('show table status'); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if (!$rs) return ''; + $type = strtoupper($rs->fields[1]); + $rs->Close(); + switch($type){ + case 'MYISAM': + case 'ISAM': + return $this->DBParameter('MyISAM cache hit ratio').' (MyISAM)'; + case 'INNODB': + return $this->DBParameter('InnoDB cache hit ratio').' (InnoDB)'; + default: + return $type.' not supported'; + } + + } + + function GetQHitRatio() + { + //Total number of queries = Qcache_inserts + Qcache_hits + Qcache_not_cached + $hits = $this->_DBParameter(array("show status","Qcache_hits")); + $total = $this->_DBParameter(array("show status","Qcache_inserts")); + $total += $this->_DBParameter(array("show status","Qcache_not_cached")); + + $total += $hits; + if ($total) return round(($hits*100)/$total,2); + return 0; + } + + /* + Use session variable to store Hit percentage, because MySQL + does not remember last value of SHOW INNODB STATUS hit ratio + + # 1st query to SHOW INNODB STATUS + 0.00 reads/s, 0.00 creates/s, 0.00 writes/s + Buffer pool hit rate 1000 / 1000 + + # 2nd query to SHOW INNODB STATUS + 0.00 reads/s, 0.00 creates/s, 0.00 writes/s + No buffer pool activity since the last printout + */ + function GetInnoDBHitRatio() + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $rs = $this->conn->Execute('show engine innodb status'); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if (!$rs || $rs->EOF) return 0; + $stat = $rs->fields[0]; + $rs->Close(); + $at = strpos($stat,'Buffer pool hit rate'); + $stat = substr($stat,$at,200); + if (preg_match('!Buffer pool hit rate\s*([0-9]*) / ([0-9]*)!',$stat,$arr)) { + $val = 100*$arr[1]/$arr[2]; + $_SESSION['INNODB_HIT_PCT'] = $val; + return round($val,2); + } else { + if (isset($_SESSION['INNODB_HIT_PCT'])) return $_SESSION['INNODB_HIT_PCT']; + return 0; + } + return 0; + } + + function GetKeyHitRatio() + { + $hits = $this->_DBParameter(array("show status","Key_read_requests")); + $reqs = $this->_DBParameter(array("show status","Key_reads")); + if ($reqs == 0) return 0; + + return round(($hits/($reqs+$hits))*100,2); + } + + // start hack + var $optimizeTableLow = 'CHECK TABLE %s FAST QUICK'; + var $optimizeTableHigh = 'OPTIMIZE TABLE %s'; + + /** + * @see adodb_perf#optimizeTable + */ + function optimizeTable( $table, $mode = ADODB_OPT_LOW) + { + if ( !is_string( $table)) return false; + + $conn = $this->conn; + if ( !$conn) return false; + + $sql = ''; + switch( $mode) { + case ADODB_OPT_LOW : $sql = $this->optimizeTableLow; break; + case ADODB_OPT_HIGH : $sql = $this->optimizeTableHigh; break; + default : + { + // May dont use __FUNCTION__ constant for BC (__FUNCTION__ Added in PHP 4.3.0) + ADOConnection::outp( sprintf( "

%s: '%s' using of undefined mode '%s'

", __CLASS__, __FUNCTION__, $mode)); + return false; + } + } + $sql = sprintf( $sql, $table); + + return $conn->Execute( $sql) !== false; + } + // end hack +} diff --git a/ehcp/adodb5/perf/perf-oci8.inc.php b/ehcp/adodb5/perf/perf-oci8.inc.php new file mode 100644 index 0000000..403a63c --- /dev/null +++ b/ehcp/adodb5/perf/perf-oci8.inc.php @@ -0,0 +1,703 @@ + array('RATIOH', + "select round((1-(phy.value / (cur.value + con.value)))*100,2) + from v\$sysstat cur, v\$sysstat con, v\$sysstat phy + where cur.name = 'db block gets' and + con.name = 'consistent gets' and + phy.name = 'physical reads'", + '=WarnCacheRatio'), + + 'sql cache hit ratio' => array( 'RATIOH', + 'select round(100*(sum(pins)-sum(reloads))/sum(pins),2) from v$librarycache', + 'increase shared_pool_size if too ratio low'), + + 'datadict cache hit ratio' => array('RATIOH', + "select + round((1 - (sum(getmisses) / (sum(gets) + + sum(getmisses))))*100,2) + from v\$rowcache", + 'increase shared_pool_size if too ratio low'), + + 'memory sort ratio' => array('RATIOH', + "SELECT ROUND((100 * b.VALUE) /DECODE ((a.VALUE + b.VALUE), + 0,1,(a.VALUE + b.VALUE)),2) +FROM v\$sysstat a, + v\$sysstat b +WHERE a.name = 'sorts (disk)' +AND b.name = 'sorts (memory)'", + "% of memory sorts compared to disk sorts - should be over 95%"), + + 'IO', + 'data reads' => array('IO', + "select value from v\$sysstat where name='physical reads'"), + + 'data writes' => array('IO', + "select value from v\$sysstat where name='physical writes'"), + + 'Data Cache', + + 'data cache buffers' => array( 'DATAC', + "select a.value/b.value from v\$parameter a, v\$parameter b + where a.name = 'db_cache_size' and b.name= 'db_block_size'", + 'Number of cache buffers. Tune db_cache_size if the data cache hit ratio is too low.'), + 'data cache blocksize' => array('DATAC', + "select value from v\$parameter where name='db_block_size'", + '' ), + + 'Memory Pools', + 'Mem Max Target (11g+)' => array( 'DATAC', + "select value from v\$parameter where name = 'memory_max_target'", + 'The memory_max_size is the maximum value to which memory_target can be set.' ), + 'Memory target (11g+)' => array( 'DATAC', + "select value from v\$parameter where name = 'memory_target'", + 'If memory_target is defined then SGA and PGA targets are consolidated into one memory_target.' ), + 'SGA Max Size' => array( 'DATAC', + "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'sga_max_size'", + 'The sga_max_size is the maximum value to which sga_target can be set.' ), + 'SGA target' => array( 'DATAC', + "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'sga_target'", + 'If sga_target is defined then data cache, shared, java and large pool size can be 0. This is because all these pools are consolidated into one sga_target.' ), + 'PGA aggr target' => array( 'DATAC', + "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'pga_aggregate_target'", + 'If pga_aggregate_target is defined then this is the maximum memory that can be allocated for cursor operations such as sorts, group by, joins, merges. When in doubt, set it to 20% of sga_target.' ), + 'data cache size' => array('DATAC', + "select value from v\$parameter where name = 'db_cache_size'", + 'db_cache_size' ), + 'shared pool size' => array('DATAC', + "select value from v\$parameter where name = 'shared_pool_size'", + 'shared_pool_size, which holds shared sql, stored procedures, dict cache and similar shared structs' ), + 'java pool size' => array('DATAJ', + "select value from v\$parameter where name = 'java_pool_size'", + 'java_pool_size' ), + 'large pool buffer size' => array('CACHE', + "select value from v\$parameter where name='large_pool_size'", + 'this pool is for large mem allocations (not because it is larger than shared pool), for MTS sessions, parallel queries, io buffers (large_pool_size) ' ), + + 'dynamic memory usage' => array('CACHE', "select '-' from dual", '=DynMemoryUsage'), + + 'Connections', + 'current connections' => array('SESS', + 'select count(*) from sys.v_$session where username is not null', + ''), + 'max connections' => array( 'SESS', + "select value from v\$parameter where name='sessions'", + ''), + + 'Memory Utilization', + 'data cache utilization ratio' => array('RATIOU', + "select round((1-bytes/sgasize)*100, 2) + from (select sum(bytes) sgasize from sys.v_\$sgastat) s, sys.v_\$sgastat f + where name = 'free memory' and pool = 'shared pool'", + 'Percentage of data cache actually in use - should be over 85%'), + + 'shared pool utilization ratio' => array('RATIOU', + 'select round((sga.bytes/case when p.value=0 then sga.bytes else to_number(p.value) end)*100,2) + from v$sgastat sga, v$parameter p + where sga.name = \'free memory\' and sga.pool = \'shared pool\' + and p.name = \'shared_pool_size\'', + 'Percentage of shared pool actually used - too low is bad, too high is worse'), + + 'large pool utilization ratio' => array('RATIOU', + "select round((1-bytes/sgasize)*100, 2) + from (select sum(bytes) sgasize from sys.v_\$sgastat) s, sys.v_\$sgastat f + where name = 'free memory' and pool = 'large pool'", + 'Percentage of large_pool actually in use - too low is bad, too high is worse'), + 'sort buffer size' => array('CACHE', + "select value from v\$parameter where name='sort_area_size'", + 'max in-mem sort_area_size (per query), uses memory in pga' ), + + /*'pga usage at peak' => array('RATIOU', + '=PGA','Mb utilization at peak transactions (requires Oracle 9i+)'),*/ + 'Transactions', + 'rollback segments' => array('ROLLBACK', + "select count(*) from sys.v_\$rollstat", + ''), + + 'peak transactions' => array('ROLLBACK', + "select max_utilization tx_hwm + from sys.v_\$resource_limit + where resource_name = 'transactions'", + 'Taken from high-water-mark'), + 'max transactions' => array('ROLLBACK', + "select value from v\$parameter where name = 'transactions'", + 'max transactions / rollback segments < 3.5 (or transactions_per_rollback_segment)'), + 'Parameters', + 'cursor sharing' => array('CURSOR', + "select value from v\$parameter where name = 'cursor_sharing'", + 'Cursor reuse strategy. Recommended is FORCE (8i+) or SIMILAR (9i+). See cursor_sharing.'), + /* + 'cursor reuse' => array('CURSOR', + "select count(*) from (select sql_text_wo_constants, count(*) + from t1 + group by sql_text_wo_constants +having count(*) > 100)",'These are sql statements that should be using bind variables'),*/ + 'index cache cost' => array('COST', + "select value from v\$parameter where name = 'optimizer_index_caching'", + '=WarnIndexCost'), + 'random page cost' => array('COST', + "select value from v\$parameter where name = 'optimizer_index_cost_adj'", + '=WarnPageCost'), + 'Waits', + 'Recent wait events' => array('WAITS','select \'Top 5 events\' from dual','=TopRecentWaits'), +// 'Historical wait SQL' => array('WAITS','select \'Last 2 days\' from dual','=TopHistoricalWaits'), -- requires AWR license + 'Backup', + 'Achivelog Mode' => array('BACKUP', 'select log_mode from v$database', '=LogMode'), + + 'DBID' => array('BACKUP','select dbid from v$database','Primary key of database, used for recovery with an RMAN Recovery Catalog'), + 'Archive Log Dest' => array('BACKUP', "SELECT NVL(v1.value,v2.value) +FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.name='log_archive_dest_10'", ''), + + 'Flashback Area' => array('BACKUP', "select nvl(value,'Flashback Area not used') from v\$parameter where name=lower('DB_RECOVERY_FILE_DEST')", 'Flashback area is a folder where all backup data and logs can be stored and managed by Oracle. If Error: message displayed, then it is not in use.'), + + 'Flashback Usage' => array('BACKUP', "select nvl('-','Flashback Area not used') from v\$parameter where name=lower('DB_RECOVERY_FILE_DEST')", '=FlashUsage', 'Flashback area usage.'), + + 'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. Recommended set to x2 or x3 times the frequency of your full backup.'), + 'Recent RMAN Jobs' => array('BACKUP', "select '-' from dual", "=RMAN"), + + // 'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. I recommend it be set to x2 or x3 times the frequency of your full backup.'), + 'Storage', 'Tablespaces' => array('TABLESPACE', "select '-' from dual", "=TableSpace"), + false + + ); + + + function __construct(&$conn) + { + global $gSQLBlockRows; + + $gSQLBlockRows = 1000; + $savelog = $conn->LogSQL(false); + $this->version = $conn->ServerInfo(); + $conn->LogSQL($savelog); + $this->conn = $conn; + } + + function LogMode() + { + $mode = $this->conn->GetOne("select log_mode from v\$database"); + + if ($mode == 'ARCHIVELOG') return 'To turn off archivelog:
+

+        SQLPLUS> connect sys as sysdba;
+        SQLPLUS> shutdown immediate;
+
+        SQLPLUS> startup mount exclusive;
+        SQLPLUS> alter database noarchivelog;
+        SQLPLUS> alter database open;
+
'; + + return 'To turn on archivelog:
+

+        SQLPLUS> connect sys as sysdba;
+        SQLPLUS> shutdown immediate;
+
+        SQLPLUS> startup mount exclusive;
+        SQLPLUS> alter database archivelog;
+        SQLPLUS> archive log start;
+        SQLPLUS> alter database open;
+
'; + } + + function TopRecentWaits() + { + + $rs = $this->conn->Execute("select * from ( + select event, round(100*time_waited/(select sum(time_waited) from v\$system_event where wait_class <> 'Idle'),1) \"% Wait\", + total_waits,time_waited, average_wait,wait_class from v\$system_event where wait_class <> 'Idle' order by 2 desc + ) where rownum <=5"); + + $ret = rs2html($rs,false,false,false,false); + return " 

".$ret." 

"; + + } + + function TopHistoricalWaits() + { + $days = 2; + + $rs = $this->conn->Execute("select * from ( SELECT + b.wait_class,B.NAME, + round(sum(wait_time+TIME_WAITED)/1000000) waitsecs, + parsing_schema_name, + C.SQL_TEXT, a.sql_id +FROM V\$ACTIVE_SESSION_HISTORY A + join V\$EVENT_NAME B on A.EVENT# = B.EVENT# + join V\$SQLAREA C on A.SQL_ID = C.SQL_ID +WHERE A.SAMPLE_TIME BETWEEN sysdate-$days and sysdate + and parsing_schema_name not in ('SYS','SYSMAN','DBSNMP','SYSTEM') +GROUP BY b.wait_class,parsing_schema_name,C.SQL_TEXT, B.NAME,A.sql_id +order by 3 desc) where rownum <=10"); + + $ret = rs2html($rs,false,false,false,false); + return " 

".$ret." 

"; + + } + + function TableSpace() + { + + $rs = $this->conn->Execute( + "select tablespace_name,round(sum(bytes)/1024/1024) as Used_MB,round(sum(maxbytes)/1024/1024) as Max_MB, round(sum(bytes)/sum(maxbytes),4) * 100 as PCT + from dba_data_files + group by tablespace_name order by 2 desc"); + + $ret = "

Tablespace".rs2html($rs,false,false,false,false); + + $rs = $this->conn->Execute("select * from dba_data_files order by tablespace_name, 1"); + $ret .= "

Datafile".rs2html($rs,false,false,false,false); + + return " 

".$ret." 

"; + } + + function RMAN() + { + $rs = $this->conn->Execute("select * from (select start_time, end_time, operation, status, mbytes_processed, output_device_type + from V\$RMAN_STATUS order by start_time desc) where rownum <=10"); + + $ret = rs2html($rs,false,false,false,false); + return " 

".$ret." 

"; + + } + + function DynMemoryUsage() + { + if (@$this->version['version'] >= 11) { + $rs = $this->conn->Execute("select component, current_size/1024./1024 as \"CurrSize (M)\" from V\$MEMORY_DYNAMIC_COMPONENTS"); + + } else + $rs = $this->conn->Execute("select name, round(bytes/1024./1024,2) as \"CurrSize (M)\" from V\$sgainfo"); + + + $ret = rs2html($rs,false,false,false,false); + return " 

".$ret." 

"; + } + + function FlashUsage() + { + $rs = $this->conn->Execute("select * from V\$FLASH_RECOVERY_AREA_USAGE"); + $ret = rs2html($rs,false,false,false,false); + return " 

".$ret." 

"; + } + + function WarnPageCost($val) + { + if ($val == 100 && $this->version['version'] < 10) $s = 'Too High. '; + else $s = ''; + + return $s.'Recommended is 20-50 for TP, and 50 for data warehouses. Default is 100. See optimizer_index_cost_adj. '; + } + + function WarnIndexCost($val) + { + if ($val == 0 && $this->version['version'] < 10) $s = 'Too Low. '; + else $s = ''; + + return $s.'Percentage of indexed data blocks expected in the cache. + Recommended is 20 (fast disk array) to 30 (slower hard disks). Default is 0. + See optimizer_index_caching.'; + } + + function PGA() + { + + //if ($this->version['version'] < 9) return 'Oracle 9i or later required'; + } + + function PGA_Advice() + { + $t = "

PGA Advice Estimate

"; + if ($this->version['version'] < 9) return $t.'Oracle 9i or later required'; + + $rs = $this->conn->Execute('select a.MB, + case when a.targ = 1 then \'<<= Current \' + when a.targ < 1 or a.pct <= b.pct then null + else + \'- BETTER than Current by \'||round(a.pct/b.pct*100-100,2)||\'%\' end as "Percent Improved", + a.targ as "PGA Size Factor",a.pct "% Perf" + from + (select round(pga_target_for_estimate/1024.0/1024.0,0) MB, + pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r + from v$pga_target_advice) a left join + (select round(pga_target_for_estimate/1024.0/1024.0,0) MB, + pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r + from v$pga_target_advice) b on + a.r = b.r+1 where + b.pct < 100'); + if (!$rs) return $t."Only in 9i or later"; + // $rs->Close(); + if ($rs->EOF) return $t."PGA could be too big"; + + return $t.rs2html($rs,false,false,true,false); + } + + function Explain($sql,$partial=false) + { + $savelog = $this->conn->LogSQL(false); + $rs = $this->conn->SelectLimit("select ID FROM PLAN_TABLE"); + if (!$rs) { + echo "

Missing PLAN_TABLE

+
+CREATE TABLE PLAN_TABLE (
+  STATEMENT_ID                    VARCHAR2(30),
+  TIMESTAMP                       DATE,
+  REMARKS                         VARCHAR2(80),
+  OPERATION                       VARCHAR2(30),
+  OPTIONS                         VARCHAR2(30),
+  OBJECT_NODE                     VARCHAR2(128),
+  OBJECT_OWNER                    VARCHAR2(30),
+  OBJECT_NAME                     VARCHAR2(30),
+  OBJECT_INSTANCE                 NUMBER(38),
+  OBJECT_TYPE                     VARCHAR2(30),
+  OPTIMIZER                       VARCHAR2(255),
+  SEARCH_COLUMNS                  NUMBER,
+  ID                              NUMBER(38),
+  PARENT_ID                       NUMBER(38),
+  POSITION                        NUMBER(38),
+  COST                            NUMBER(38),
+  CARDINALITY                     NUMBER(38),
+  BYTES                           NUMBER(38),
+  OTHER_TAG                       VARCHAR2(255),
+  PARTITION_START                 VARCHAR2(255),
+  PARTITION_STOP                  VARCHAR2(255),
+  PARTITION_ID                    NUMBER(38),
+  OTHER                           LONG,
+  DISTRIBUTION                    VARCHAR2(30)
+);
+
"; + return false; + } + + $rs->Close(); + // $this->conn->debug=1; + + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + + $s = "

Explain: ".htmlspecialchars($sql)."

"; + + $this->conn->BeginTrans(); + $id = "ADODB ".microtime(); + + $rs = $this->conn->Execute("EXPLAIN PLAN SET STATEMENT_ID='$id' FOR $sql"); + $m = $this->conn->ErrorMsg(); + if ($m) { + $this->conn->RollbackTrans(); + $this->conn->LogSQL($savelog); + $s .= "

$m

"; + return $s; + } + $rs = $this->conn->Execute(" + select + '
'||lpad('--', (level-1)*2,'-') || trim(operation) || ' ' || trim(options)||'
' as Operation, + object_name,COST,CARDINALITY,bytes + FROM plan_table +START WITH id = 0 and STATEMENT_ID='$id' +CONNECT BY prior id=parent_id and statement_id='$id'"); + + $s .= rs2html($rs,false,false,false,false); + $this->conn->RollbackTrans(); + $this->conn->LogSQL($savelog); + $s .= $this->Tracer($sql,$partial); + return $s; + } + + function CheckMemory() + { + if ($this->version['version'] < 9) return 'Oracle 9i or later required'; + + $rs = $this->conn->Execute(" +select a.name Buffer_Pool, b.size_for_estimate as cache_mb_estimate, + case when b.size_factor=1 then + '<<= Current' + when a.estd_physical_read_factor-b.estd_physical_read_factor > 0.001 and b.estd_physical_read_factor<1 then + '- BETTER than current by ' || round((1-b.estd_physical_read_factor)/b.estd_physical_read_factor*100,2) || '%' + else ' ' end as RATING, + b.estd_physical_read_factor \"Phys. Reads Factor\", + round((a.estd_physical_read_factor-b.estd_physical_read_factor)/b.estd_physical_read_factor*100,2) as \"% Improve\" + from (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r,name from v\$db_cache_advice order by name,1) a , + (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r,name from v\$db_cache_advice order by name,1) b + where a.r = b.r-1 and a.name = b.name + "); + if (!$rs) return false; + + /* + The v$db_cache_advice utility show the marginal changes in physical data block reads for different sizes of db_cache_size + */ + $s = "

Data Cache Advice Estimate

"; + if ($rs->EOF) { + $s .= "

Cache that is 50% of current size is still too big

"; + } else { + $s .= "Ideal size of Data Cache is when %BETTER gets close to zero."; + $s .= rs2html($rs,false,false,false,false); + } + return $s.$this->PGA_Advice(); + } + + /* + Generate html for suspicious/expensive sql + */ + function tohtml(&$rs,$type) + { + $o1 = $rs->FetchField(0); + $o2 = $rs->FetchField(1); + $o3 = $rs->FetchField(2); + if ($rs->EOF) return '

None found

'; + $check = ''; + $sql = ''; + $s = "\n\n'; + while (!$rs->EOF) { + if ($check != $rs->fields[0].'::'.$rs->fields[1]) { + if ($check) { + $carr = explode('::',$check); + $prefix = "'; + $suffix = ''; + if (strlen($prefix)>2000) { + $prefix = ''; + $suffix = ''; + } + + $s .= "\n'; + } + $sql = $rs->fields[2]; + $check = $rs->fields[0].'::'.$rs->fields[1]; + } else + $sql .= $rs->fields[2]; + if (substr($sql,strlen($sql)-1) == "\0") $sql = substr($sql,0,strlen($sql)-1); + $rs->MoveNext(); + } + $rs->Close(); + + $carr = explode('::',$check); + $prefix = "'; + $suffix = ''; + if (strlen($prefix)>2000) { + $prefix = ''; + $suffix = ''; + } + $s .= "\n'; + + return $s."
".$o1->name.''.$o2->name.''.$o3->name.'
".$carr[0].''.$carr[1].''.$prefix.$sql.$suffix.'
".$carr[0].''.$carr[1].''.$prefix.$sql.$suffix.'
\n\n"; + } + + // code thanks to Ixora. + // http://www.ixora.com.au/scripts/query_opt.htm + // requires oracle 8.1.7 or later + function SuspiciousSQL($numsql=10) + { + $sql = " +select + substr(to_char(s.pct, '99.00'), 2) || '%' load, + s.executions executes, + p.sql_text +from + ( + select + address, + buffer_gets, + executions, + pct, + rank() over (order by buffer_gets desc) ranking + from + ( + select + address, + buffer_gets, + executions, + 100 * ratio_to_report(buffer_gets) over () pct + from + sys.v_\$sql + where + command_type != 47 and module != 'T.O.A.D.' + ) + where + buffer_gets > 50 * executions + ) s, + sys.v_\$sqltext p +where + s.ranking <= $numsql and + p.address = s.address +order by + 1 desc, s.address, p.piece"; + + global $ADODB_CACHE_MODE; + if (isset($_GET['expsixora']) && isset($_GET['sql'])) { + $partial = empty($_GET['part']); + echo "".$this->Explain($_GET['sql'],$partial)."\n"; + } + + if (isset($_GET['sql'])) return $this->_SuspiciousSQL($numsql); + + $s = ''; + $timer = time(); + $s .= $this->_SuspiciousSQL($numsql); + $timer = time() - $timer; + + if ($timer > $this->noShowIxora) return $s; + $s .= '

'; + + $save = $ADODB_CACHE_MODE; + $ADODB_CACHE_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $savelog = $this->conn->LogSQL(false); + $rs = $this->conn->SelectLimit($sql); + $this->conn->LogSQL($savelog); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_CACHE_MODE = $save; + if ($rs) { + $s .= "\n

Ixora Suspicious SQL

"; + $s .= $this->tohtml($rs,'expsixora'); + } + + return $s; + } + + // code thanks to Ixora. + // http://www.ixora.com.au/scripts/query_opt.htm + // requires oracle 8.1.7 or later + function ExpensiveSQL($numsql = 10) + { + $sql = " +select + substr(to_char(s.pct, '99.00'), 2) || '%' load, + s.executions executes, + p.sql_text +from + ( + select + address, + disk_reads, + executions, + pct, + rank() over (order by disk_reads desc) ranking + from + ( + select + address, + disk_reads, + executions, + 100 * ratio_to_report(disk_reads) over () pct + from + sys.v_\$sql + where + command_type != 47 and module != 'T.O.A.D.' + ) + where + disk_reads > 50 * executions + ) s, + sys.v_\$sqltext p +where + s.ranking <= $numsql and + p.address = s.address +order by + 1 desc, s.address, p.piece +"; + global $ADODB_CACHE_MODE; + if (isset($_GET['expeixora']) && isset($_GET['sql'])) { + $partial = empty($_GET['part']); + echo "".$this->Explain($_GET['sql'],$partial)."\n"; + } + if (isset($_GET['sql'])) { + $var = $this->_ExpensiveSQL($numsql); + return $var; + } + + $s = ''; + $timer = time(); + $s .= $this->_ExpensiveSQL($numsql); + $timer = time() - $timer; + if ($timer > $this->noShowIxora) return $s; + + $s .= '

'; + $save = $ADODB_CACHE_MODE; + $ADODB_CACHE_MODE = ADODB_FETCH_NUM; + if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false); + + $savelog = $this->conn->LogSQL(false); + $rs = $this->conn->Execute($sql); + $this->conn->LogSQL($savelog); + + if (isset($savem)) $this->conn->SetFetchMode($savem); + $ADODB_CACHE_MODE = $save; + + if ($rs) { + $s .= "\n

Ixora Expensive SQL

"; + $s .= $this->tohtml($rs,'expeixora'); + } + + return $s; + } + + function clearsql() + { + $perf_table = adodb_perf::table(); + // using the naive "delete from $perf_table where created<".$this->conn->sysTimeStamp will cause the table to lock, possibly + // for a long time + $sql = +"DECLARE cnt pls_integer; +BEGIN + cnt := 0; + FOR rec IN (SELECT ROWID AS rr FROM $perf_table WHERE createdconn->Execute($sql); + } + +} diff --git a/ehcp/adodb5/perf/perf-postgres.inc.php b/ehcp/adodb5/perf/perf-postgres.inc.php new file mode 100644 index 0000000..aaeeed3 --- /dev/null +++ b/ehcp/adodb5/perf/perf-postgres.inc.php @@ -0,0 +1,154 @@ + array('RATIO', + "select case when count(*)=3 then 'TRUE' else 'FALSE' end from pg_settings where (name='stats_block_level' or name='stats_row_level' or name='stats_start_collector') and setting='on' ", + 'Value must be TRUE to enable hit ratio statistics (stats_start_collector,stats_row_level and stats_block_level must be set to true in postgresql.conf)'), + 'data cache hit ratio' => array('RATIO', + "select case when blks_hit=0 then 0 else round( ((1-blks_read::float/blks_hit)*100)::numeric, 2) end from pg_stat_database where datname='\$DATABASE'", + '=WarnCacheRatio'), + 'IO', + 'data reads' => array('IO', + 'select sum(heap_blks_read+toast_blks_read) from pg_statio_user_tables', + ), + 'data writes' => array('IO', + 'select round((sum(n_tup_ins/4.0+n_tup_upd/8.0+n_tup_del/4.0)/16)::numeric,2) from pg_stat_user_tables', + 'Count of inserts/updates/deletes * coef'), + + 'Data Cache', + 'data cache buffers' => array('DATAC', + "select setting from pg_settings where name='shared_buffers'", + 'Number of cache buffers. Tuning'), + 'cache blocksize' => array('DATAC', + 'select 8192', + '(estimate)' ), + 'data cache size' => array( 'DATAC', + "select setting::integer*8192 from pg_settings where name='shared_buffers'", + '' ), + 'operating system cache size' => array( 'DATA', + "select setting::integer*8192 from pg_settings where name='effective_cache_size'", + '(effective cache size)' ), + 'Memory Usage', + # Postgres 7.5 changelog: Rename server parameters SortMem and VacuumMem to work_mem and maintenance_work_mem; + 'sort/work buffer size' => array('CACHE', + "select setting::integer*1024 from pg_settings where name='sort_mem' or name = 'work_mem' order by name", + 'Size of sort buffer (per query)' ), + 'Connections', + 'current connections' => array('SESS', + 'select count(*) from pg_stat_activity', + ''), + 'max connections' => array('SESS', + "select setting from pg_settings where name='max_connections'", + ''), + 'Parameters', + 'rollback buffers' => array('COST', + "select setting from pg_settings where name='wal_buffers'", + 'WAL buffers'), + 'random page cost' => array('COST', + "select setting from pg_settings where name='random_page_cost'", + 'Cost of doing a seek (default=4). See random_page_cost'), + false + ); + + function __construct(&$conn) + { + $this->conn = $conn; + } + + var $optimizeTableLow = 'VACUUM %s'; + var $optimizeTableHigh = 'VACUUM ANALYZE %s'; + +/** + * @see adodb_perf#optimizeTable + */ + + function optimizeTable($table, $mode = ADODB_OPT_LOW) + { + if(! is_string($table)) return false; + + $conn = $this->conn; + if (! $conn) return false; + + $sql = ''; + switch($mode) { + case ADODB_OPT_LOW : $sql = $this->optimizeTableLow; break; + case ADODB_OPT_HIGH: $sql = $this->optimizeTableHigh; break; + default : + { + ADOConnection::outp(sprintf("

%s: '%s' using of undefined mode '%s'

", __CLASS__, 'optimizeTable', $mode)); + return false; + } + } + $sql = sprintf($sql, $table); + + return $conn->Execute($sql) !== false; + } + + function Explain($sql,$partial=false) + { + $save = $this->conn->LogSQL(false); + + if ($partial) { + $sqlq = $this->conn->qstr($sql.'%'); + $arr = $this->conn->GetArray("select distinct distinct sql1 from adodb_logsql where sql1 like $sqlq"); + if ($arr) { + foreach($arr as $row) { + $sql = reset($row); + if (crc32($sql) == $partial) break; + } + } + } + $sql = str_replace('?',"''",$sql); + $s = '

Explain: '.htmlspecialchars($sql).'

'; + $rs = $this->conn->Execute('EXPLAIN '.$sql); + $this->conn->LogSQL($save); + $s .= '
';
+		if ($rs)
+			while (!$rs->EOF) {
+				$s .= reset($rs->fields)."\n";
+				$rs->MoveNext();
+			}
+		$s .= '
'; + $s .= $this->Tracer($sql,$partial); + return $s; + } +} diff --git a/ehcp/adodb5/pivottable.inc.php b/ehcp/adodb5/pivottable.inc.php new file mode 100644 index 0000000..a736e8f --- /dev/null +++ b/ehcp/adodb5/pivottable.inc.php @@ -0,0 +1,188 @@ +databaseType,'access') !== false; + // note - vfp 6 still doesn' work even with IIF enabled || $db->databaseType == 'vfp'; + + //$hidecnt = false; + + if ($where) $where = "\nWHERE $where"; + if (!is_array($colfield)) $colarr = $db->GetCol("select distinct $colfield from $tables $where order by 1"); + if (!$aggfield) $hidecnt = false; + + $sel = "$rowfields, "; + if (is_array($colfield)) { + foreach ($colfield as $k => $v) { + $k = trim($k); + if (!$hidecnt) { + $sel .= $iif ? + "\n\t$aggfn(IIF($v,1,0)) AS \"$k\", " + : + "\n\t$aggfn(CASE WHEN $v THEN 1 ELSE 0 END) AS \"$k\", "; + } + if ($aggfield) { + $sel .= $iif ? + "\n\t$aggfn(IIF($v,$aggfield,0)) AS \"$sumlabel$k\", " + : + "\n\t$aggfn(CASE WHEN $v THEN $aggfield ELSE 0 END) AS \"$sumlabel$k\", "; + } + } + } else { + foreach ($colarr as $v) { + if (!is_numeric($v)) $vq = $db->qstr($v); + else $vq = $v; + $v = trim($v); + if (strlen($v) == 0 ) $v = 'null'; + if (!$hidecnt) { + $sel .= $iif ? + "\n\t$aggfn(IIF($colfield=$vq,1,0)) AS \"$v\", " + : + "\n\t$aggfn(CASE WHEN $colfield=$vq THEN 1 ELSE 0 END) AS \"$v\", "; + } + if ($aggfield) { + if ($hidecnt) $label = $v; + else $label = "{$v}_$aggfield"; + $sel .= $iif ? + "\n\t$aggfn(IIF($colfield=$vq,$aggfield,0)) AS \"$label\", " + : + "\n\t$aggfn(CASE WHEN $colfield=$vq THEN $aggfield ELSE 0 END) AS \"$label\", "; + } + } + } + if ($aggfield && $aggfield != '1'){ + $agg = "$aggfn($aggfield)"; + $sel .= "\n\t$agg as \"$sumlabel$aggfield\", "; + } + + if ($showcount) + $sel .= "\n\tSUM(1) as Total"; + else + $sel = substr($sel,0,strlen($sel)-2); + + + // Strip aliases + $rowfields = preg_replace('/ AS (\w+)/i', '', $rowfields); + + $sql = "SELECT $sel \nFROM $tables $where \nGROUP BY $rowfields"; + + return $sql; + } + +/* EXAMPLES USING MS NORTHWIND DATABASE */ +if (0) { + +# example1 +# +# Query the main "product" table +# Set the rows to CompanyName and QuantityPerUnit +# and the columns to the Categories +# and define the joins to link to lookup tables +# "categories" and "suppliers" +# + + $sql = PivotTableSQL( + $gDB, # adodb connection + 'products p ,categories c ,suppliers s', # tables + 'CompanyName,QuantityPerUnit', # row fields + 'CategoryName', # column fields + 'p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID' # joins/where +); + print "
$sql";
+ $rs = $gDB->Execute($sql);
+ rs2html($rs);
+
+/*
+Generated SQL:
+
+SELECT CompanyName,QuantityPerUnit,
+	SUM(CASE WHEN CategoryName='Beverages' THEN 1 ELSE 0 END) AS "Beverages",
+	SUM(CASE WHEN CategoryName='Condiments' THEN 1 ELSE 0 END) AS "Condiments",
+	SUM(CASE WHEN CategoryName='Confections' THEN 1 ELSE 0 END) AS "Confections",
+	SUM(CASE WHEN CategoryName='Dairy Products' THEN 1 ELSE 0 END) AS "Dairy Products",
+	SUM(CASE WHEN CategoryName='Grains/Cereals' THEN 1 ELSE 0 END) AS "Grains/Cereals",
+	SUM(CASE WHEN CategoryName='Meat/Poultry' THEN 1 ELSE 0 END) AS "Meat/Poultry",
+	SUM(CASE WHEN CategoryName='Produce' THEN 1 ELSE 0 END) AS "Produce",
+	SUM(CASE WHEN CategoryName='Seafood' THEN 1 ELSE 0 END) AS "Seafood",
+	SUM(1) as Total
+FROM products p ,categories c ,suppliers s  WHERE p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID
+GROUP BY CompanyName,QuantityPerUnit
+*/
+//=====================================================================
+
+# example2
+#
+# Query the main "product" table
+# Set the rows to CompanyName and QuantityPerUnit
+# and the columns to the UnitsInStock for diiferent ranges
+# and define the joins to link to lookup tables
+# "categories" and "suppliers"
+#
+ $sql = PivotTableSQL(
+ 	$gDB,										# adodb connection
+ 	'products p ,categories c ,suppliers s',	# tables
+	'CompanyName,QuantityPerUnit',				# row fields
+												# column ranges
+array(
+' 0 ' => 'UnitsInStock <= 0',
+"1 to 5" => '0 < UnitsInStock and UnitsInStock <= 5',
+"6 to 10" => '5 < UnitsInStock and UnitsInStock <= 10',
+"11 to 15"  => '10 < UnitsInStock and UnitsInStock <= 15',
+"16+" =>'15 < UnitsInStock'
+),
+	' p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID', # joins/where
+	'UnitsInStock', 							# sum this field
+	'Sum'										# sum label prefix
+);
+ print "
$sql";
+ $rs = $gDB->Execute($sql);
+ rs2html($rs);
+ /*
+ Generated SQL:
+
+SELECT CompanyName,QuantityPerUnit,
+	SUM(CASE WHEN UnitsInStock <= 0 THEN UnitsInStock ELSE 0 END) AS "Sum  0 ",
+	SUM(CASE WHEN 0 < UnitsInStock and UnitsInStock <= 5 THEN UnitsInStock ELSE 0 END) AS "Sum 1 to 5",
+	SUM(CASE WHEN 5 < UnitsInStock and UnitsInStock <= 10 THEN UnitsInStock ELSE 0 END) AS "Sum 6 to 10",
+	SUM(CASE WHEN 10 < UnitsInStock and UnitsInStock <= 15 THEN UnitsInStock ELSE 0 END) AS "Sum 11 to 15",
+	SUM(CASE WHEN 15 < UnitsInStock THEN UnitsInStock ELSE 0 END) AS "Sum 16+",
+	SUM(UnitsInStock) AS "Sum UnitsInStock",
+	SUM(1) as Total
+FROM products p ,categories c ,suppliers s  WHERE  p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID
+GROUP BY CompanyName,QuantityPerUnit
+ */
+}
diff --git a/ehcp/adodb5/rsfilter.inc.php b/ehcp/adodb5/rsfilter.inc.php
new file mode 100644
index 0000000..6de95aa
--- /dev/null
+++ b/ehcp/adodb5/rsfilter.inc.php
@@ -0,0 +1,62 @@
+ $v) {
+			$arr[$k] = ucwords($v);
+		}
+	}
+	$rs = RSFilter($rs,'do_ucwords');
+ */
+function RSFilter($rs,$fn)
+{
+	if ($rs->databaseType != 'array') {
+		if (!$rs->connection) return false;
+
+		$rs = $rs->connection->_rs2rs($rs);
+	}
+	$rows = $rs->RecordCount();
+	for ($i=0; $i < $rows; $i++) {
+		if (is_array ($fn)) {
+        	$obj = $fn[0];
+        	$method = $fn[1];
+        	$obj->$method ($rs->_array[$i],$rs);
+      } else {
+			$fn($rs->_array[$i],$rs);
+      }
+
+	}
+	if (!$rs->EOF) {
+		$rs->_currentRow = 0;
+		$rs->fields = $rs->_array[0];
+	}
+
+	return $rs;
+}
diff --git a/ehcp/adodb5/server.php b/ehcp/adodb5/server.php
new file mode 100644
index 0000000..227bb8b
--- /dev/null
+++ b/ehcp/adodb5/server.php
@@ -0,0 +1,100 @@
+Connect($host,$uid,$pwd,$database)) err($conn->ErrorNo(). $sep . $conn->ErrorMsg());
+$sql = undomq($_REQUEST['sql']);
+
+if (isset($_REQUEST['fetch']))
+	$ADODB_FETCH_MODE = $_REQUEST['fetch'];
+
+if (isset($_REQUEST['nrows'])) {
+	$nrows = $_REQUEST['nrows'];
+	$offset = isset($_REQUEST['offset']) ? $_REQUEST['offset'] : -1;
+	$rs = $conn->SelectLimit($sql,$nrows,$offset);
+} else
+	$rs = $conn->Execute($sql);
+if ($rs){
+	//$rs->timeToLive = 1;
+	echo _rs2serialize($rs,$conn,$sql);
+	$rs->Close();
+} else
+	err($conn->ErrorNo(). $sep .$conn->ErrorMsg());
diff --git a/ehcp/adodb5/session/adodb-compress-bzip2.php b/ehcp/adodb5/session/adodb-compress-bzip2.php
new file mode 100644
index 0000000..a9c6314
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-compress-bzip2.php
@@ -0,0 +1,118 @@
+_block_size;
+	}
+
+	/**
+	 */
+	function setBlockSize($block_size) {
+		assert('$block_size >= 1');
+		assert('$block_size <= 9');
+		$this->_block_size = (int) $block_size;
+	}
+
+	/**
+	 */
+	function getWorkLevel() {
+		return $this->_work_level;
+	}
+
+	/**
+	 */
+	function setWorkLevel($work_level) {
+		assert('$work_level >= 0');
+		assert('$work_level <= 250');
+		$this->_work_level = (int) $work_level;
+	}
+
+	/**
+	 */
+	function getMinLength() {
+		return $this->_min_length;
+	}
+
+	/**
+	 */
+	function setMinLength($min_length) {
+		assert('$min_length >= 0');
+		$this->_min_length = (int) $min_length;
+	}
+
+	/**
+	 */
+	function __construct($block_size = null, $work_level = null, $min_length = null) {
+		if (!is_null($block_size)) {
+			$this->setBlockSize($block_size);
+		}
+
+		if (!is_null($work_level)) {
+			$this->setWorkLevel($work_level);
+		}
+
+		if (!is_null($min_length)) {
+			$this->setMinLength($min_length);
+		}
+	}
+
+	/**
+	 */
+	function write($data, $key) {
+		if (strlen($data) < $this->_min_length) {
+			return $data;
+		}
+
+		if (!is_null($this->_block_size)) {
+			if (!is_null($this->_work_level)) {
+				return bzcompress($data, $this->_block_size, $this->_work_level);
+			} else {
+				return bzcompress($data, $this->_block_size);
+			}
+		}
+
+		return bzcompress($data);
+	}
+
+	/**
+	 */
+	function read($data, $key) {
+		return $data ? bzdecompress($data) : $data;
+	}
+
+}
+
+return 1;
diff --git a/ehcp/adodb5/session/adodb-compress-gzip.php b/ehcp/adodb5/session/adodb-compress-gzip.php
new file mode 100644
index 0000000..f1516b0
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-compress-gzip.php
@@ -0,0 +1,93 @@
+_level;
+	}
+
+	/**
+	 */
+	function setLevel($level) {
+		assert('$level >= 0');
+		assert('$level <= 9');
+		$this->_level = (int) $level;
+	}
+
+	/**
+	 */
+	function getMinLength() {
+		return $this->_min_length;
+	}
+
+	/**
+	 */
+	function setMinLength($min_length) {
+		assert('$min_length >= 0');
+		$this->_min_length = (int) $min_length;
+	}
+
+	/**
+	 */
+	function __construct($level = null, $min_length = null) {
+		if (!is_null($level)) {
+			$this->setLevel($level);
+		}
+
+		if (!is_null($min_length)) {
+			$this->setMinLength($min_length);
+		}
+	}
+
+	/**
+	 */
+	function write($data, $key) {
+		if (strlen($data) < $this->_min_length) {
+			return $data;
+		}
+
+		if (!is_null($this->_level)) {
+			return gzcompress($data, $this->_level);
+		} else {
+			return gzcompress($data);
+		}
+	}
+
+	/**
+	 */
+	function read($data, $key) {
+		return $data ? gzuncompress($data) : $data;
+	}
+
+}
+
+return 1;
diff --git a/ehcp/adodb5/session/adodb-cryptsession.php b/ehcp/adodb5/session/adodb-cryptsession.php
new file mode 100644
index 0000000..a52bcf4
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-cryptsession.php
@@ -0,0 +1,27 @@
+_cipher;
+	}
+
+	/**
+	 */
+	function setCipher($cipher) {
+		$this->_cipher = $cipher;
+	}
+
+	/**
+	 */
+	function getMode() {
+		return $this->_mode;
+	}
+
+	/**
+	 */
+	function setMode($mode) {
+		$this->_mode = $mode;
+	}
+
+	/**
+	 */
+	function getSource() {
+		return $this->_source;
+	}
+
+	/**
+	 */
+	function setSource($source) {
+		$this->_source = $source;
+	}
+
+	/**
+	 */
+	function __construct($cipher = null, $mode = null, $source = null) {
+		if (!$cipher) {
+			$cipher = MCRYPT_RIJNDAEL_256;
+		}
+		if (!$mode) {
+			$mode = MCRYPT_MODE_ECB;
+		}
+		if (!$source) {
+			$source = MCRYPT_RAND;
+		}
+
+		$this->_cipher = $cipher;
+		$this->_mode = $mode;
+		$this->_source = $source;
+	}
+
+	/**
+	 */
+	function write($data, $key) {
+		$iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode);
+		$iv = mcrypt_create_iv($iv_size, $this->_source);
+		return mcrypt_encrypt($this->_cipher, $key, $data, $this->_mode, $iv);
+	}
+
+	/**
+	 */
+	function read($data, $key) {
+		$iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode);
+		$iv = mcrypt_create_iv($iv_size, $this->_source);
+		$rv = mcrypt_decrypt($this->_cipher, $key, $data, $this->_mode, $iv);
+		return rtrim($rv, "\0");
+	}
+
+}
+
+return 1;
diff --git a/ehcp/adodb5/session/adodb-encrypt-md5.php b/ehcp/adodb5/session/adodb-encrypt-md5.php
new file mode 100644
index 0000000..f31f06f
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-encrypt-md5.php
@@ -0,0 +1,39 @@
+encrypt($data, $key);
+	}
+
+	/**
+	 */
+	function read($data, $key) {
+		$md5crypt = new MD5Crypt();
+		return $md5crypt->decrypt($data, $key);
+	}
+
+}
+
+return 1;
diff --git a/ehcp/adodb5/session/adodb-encrypt-secret.php b/ehcp/adodb5/session/adodb-encrypt-secret.php
new file mode 100644
index 0000000..c700e41
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-encrypt-secret.php
@@ -0,0 +1,48 @@
+encrypt($data, $key);
+
+	}
+
+
+	function read($data, $key)
+	{
+		$sha1crypt = new SHA1Crypt();
+		return $sha1crypt->decrypt($data, $key);
+
+	}
+}
+
+
+
+return 1;
diff --git a/ehcp/adodb5/session/adodb-sess.txt b/ehcp/adodb5/session/adodb-sess.txt
new file mode 100644
index 0000000..c6c7685
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-sess.txt
@@ -0,0 +1,131 @@
+John,
+
+I have been an extremely satisfied ADODB user for several years now.
+
+To give you something back for all your hard work, I've spent the last 3
+days rewriting the adodb-session.php code.
+
+----------
+What's New
+----------
+
+Here's a list of the new code's benefits:
+
+* Combines the functionality of the three files:
+
+adodb-session.php
+adodb-session-clob.php
+adodb-cryptsession.php
+
+each with very similar functionality, into a single file adodb-session.php.
+This will ease maintenance and support issues.
+
+* Supports multiple encryption and compression schemes.
+  Currently, we support:
+
+  MD5Crypt (crypt.inc.php)
+  MCrypt
+  Secure (Horde's emulation of MCrypt, if MCrypt module is not available.)
+  GZip
+  BZip2
+
+These can be stacked, so if you want to compress and then encrypt your
+session data, it's easy.
+Also, the built-in MCrypt functions will be *much* faster, and more secure,
+than the MD5Crypt code.
+
+* adodb-session.php contains a single class ADODB_Session that encapsulates
+all functionality.
+  This eliminates the use of global vars and defines (though they are
+supported for backwards compatibility).
+
+* All user defined parameters are now static functions in the ADODB_Session
+class.
+
+New parameters include:
+
+* encryptionKey(): Define the encryption key used to encrypt the session.
+Originally, it was a hard coded string.
+
+* persist(): Define if the database will be opened in persistent mode.
+Originally, the user had to call adodb_sess_open().
+
+* dataFieldName(): Define the field name used to store the session data, as
+'DATA' appears to be a reserved word in the following cases:
+	ANSI SQL
+	IBM DB2
+	MS SQL Server
+	Postgres
+	SAP
+
+* filter(): Used to support multiple, simulataneous encryption/compression
+schemes.
+
+* Debug support is improved thru _rsdump() function, which is called after
+every database call.
+
+------------
+What's Fixed
+------------
+
+The new code includes several bug fixes and enhancements:
+
+* sesskey is compared in BINARY mode for MySQL, to avoid problems with
+session keys that differ only by case.
+  Of course, the user should define the sesskey field as BINARY, to
+correctly fix this problem, otherwise performance will suffer.
+
+* In ADODB_Session::gc(), if $expire_notify is true, the multiple DELETES in
+the original code have been optimized to a single DELETE.
+
+* In ADODB_Session::destroy(), since "SELECT expireref, sesskey FROM $table
+WHERE sesskey = $qkey" will only return a single value, we don't loop on the
+result, we simply process the row, if any.
+
+* We close $rs after every use.
+
+---------------
+What's the Same
+---------------
+
+I know backwards compatibility is *very* important to you.  Therefore, the
+new code is 100% backwards compatible.
+
+If you like my code, but don't "trust" it's backwards compatible, maybe we
+offer it as beta code, in a new directory for a release or two?
+
+------------
+What's To Do
+------------
+
+I've vascillated over whether to use a single function to get/set
+parameters:
+
+$user = ADODB_Session::user(); 	// get
+ADODB_Session::user($user);		// set
+
+or to use separate functions (which is the PEAR/Java way):
+
+$user = ADODB_Session::getUser();
+ADODB_Session::setUser($user);
+
+I've chosen the former as it's makes for a simpler API, and reduces the
+amount of code, but I'd be happy to change it to the latter.
+
+Also, do you think the class should be a singleton class, versus a static
+class?
+
+Let me know if you find this code useful, and will be including it in the
+next release of ADODB.
+
+If so, I will modify the current documentation to detail the new
+functionality.  To that end, what file(s) contain the documentation?  Please
+send them to me if they are not publically available.
+
+Also, if there is *anything* in the code that you like to see changed, let
+me know.
+
+Thanks,
+
+Ross
+
diff --git a/ehcp/adodb5/session/adodb-session-clob.php b/ehcp/adodb5/session/adodb-session-clob.php
new file mode 100644
index 0000000..dd03fbb
--- /dev/null
+++ b/ehcp/adodb5/session/adodb-session-clob.php
@@ -0,0 +1,24 @@
+Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id));
+
+	/* it is possible that the update statement fails due to a collision */
+	if (!$ok) {
+		session_id($old_id);
+		if (empty($ck)) $ck = session_get_cookie_params();
+		setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']);
+		return false;
+	}
+
+	return true;
+}
+
+/*
+    Generate database table for session data
+    @see http://phplens.com/lens/lensforum/msgs.php?id=12280
+    @return 0 if failure, 1 if errors, 2 if successful.
+	@author Markus Staab http://www.public-4u.de
+*/
+function adodb_session_create_table($schemaFile=null,$conn = null)
+{
+    // set default values
+    if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema.xml';
+    if ($conn===null) $conn = ADODB_Session::_conn();
+
+	if (!$conn) return 0;
+
+    $schema = new adoSchema($conn);
+    $schema->ParseSchema($schemaFile);
+    return $schema->ExecuteSchema();
+}
+
+/*!
+	\static
+*/
+class ADODB_Session {
+	/////////////////////
+	// getter/setter methods
+	/////////////////////
+
+	/*
+
+	function Lock($lock=null)
+	{
+	static $_lock = false;
+
+		if (!is_null($lock)) $_lock = $lock;
+		return $lock;
+	}
+	*/
+	/*!
+	*/
+	function driver($driver = null) {
+		static $_driver = 'mysql';
+		static $set = false;
+
+		if (!is_null($driver)) {
+			$_driver = trim($driver);
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) {
+				return $GLOBALS['ADODB_SESSION_DRIVER'];
+			}
+		}
+
+		return $_driver;
+	}
+
+	/*!
+	*/
+	function host($host = null) {
+		static $_host = 'localhost';
+		static $set = false;
+
+		if (!is_null($host)) {
+			$_host = trim($host);
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) {
+				return $GLOBALS['ADODB_SESSION_CONNECT'];
+			}
+		}
+
+		return $_host;
+	}
+
+	/*!
+	*/
+	function user($user = null) {
+		static $_user = 'root';
+		static $set = false;
+
+		if (!is_null($user)) {
+			$_user = trim($user);
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESSION_USER'])) {
+				return $GLOBALS['ADODB_SESSION_USER'];
+			}
+		}
+
+		return $_user;
+	}
+
+	/*!
+	*/
+	function password($password = null) {
+		static $_password = '';
+		static $set = false;
+
+		if (!is_null($password)) {
+			$_password = $password;
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESSION_PWD'])) {
+				return $GLOBALS['ADODB_SESSION_PWD'];
+			}
+		}
+
+		return $_password;
+	}
+
+	/*!
+	*/
+	function database($database = null) {
+		static $_database = 'xphplens_2';
+		static $set = false;
+
+		if (!is_null($database)) {
+			$_database = trim($database);
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESSION_DB'])) {
+				return $GLOBALS['ADODB_SESSION_DB'];
+			}
+		}
+
+		return $_database;
+	}
+
+	/*!
+	*/
+	function persist($persist = null)
+	{
+		static $_persist = true;
+
+		if (!is_null($persist)) {
+			$_persist = trim($persist);
+		}
+
+		return $_persist;
+	}
+
+	/*!
+	*/
+	function lifetime($lifetime = null) {
+		static $_lifetime;
+		static $set = false;
+
+		if (!is_null($lifetime)) {
+			$_lifetime = (int) $lifetime;
+			$set = true;
+		} elseif (!$set) {
+			// backwards compatibility
+			if (isset($GLOBALS['ADODB_SESS_LIFE'])) {
+				return $GLOBALS['ADODB_SESS_LIFE'];
+			}
+		}
+		if (!$_lifetime) {
+			$_lifetime = ini_get('session.gc_maxlifetime');
+			if ($_lifetime <= 1) {
+				// bug in PHP 4.0.3 pl 1  -- how about other versions?
+				//print "

Session Error: PHP.INI setting session.gc_maxlifetimenot set: $lifetime

"; + $_lifetime = 1440; + } + } + + return $_lifetime; + } + + /*! + */ + function debug($debug = null) { + static $_debug = false; + static $set = false; + + if (!is_null($debug)) { + $_debug = (bool) $debug; + + $conn = ADODB_Session::_conn(); + if ($conn) { + $conn->debug = $_debug; + } + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESS_DEBUG'])) { + return $GLOBALS['ADODB_SESS_DEBUG']; + } + } + + return $_debug; + } + + /*! + */ + function expireNotify($expire_notify = null) { + static $_expire_notify; + static $set = false; + + if (!is_null($expire_notify)) { + $_expire_notify = $expire_notify; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) { + return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY']; + } + } + + return $_expire_notify; + } + + /*! + */ + function table($table = null) { + static $_table = 'sessions'; + static $set = false; + + if (!is_null($table)) { + $_table = trim($table); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_TBL'])) { + return $GLOBALS['ADODB_SESSION_TBL']; + } + } + + return $_table; + } + + /*! + */ + function optimize($optimize = null) { + static $_optimize = false; + static $set = false; + + if (!is_null($optimize)) { + $_optimize = (bool) $optimize; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (defined('ADODB_SESSION_OPTIMIZE')) { + return true; + } + } + + return $_optimize; + } + + /*! + */ + function syncSeconds($sync_seconds = null) { + static $_sync_seconds = 60; + static $set = false; + + if (!is_null($sync_seconds)) { + $_sync_seconds = (int) $sync_seconds; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (defined('ADODB_SESSION_SYNCH_SECS')) { + return ADODB_SESSION_SYNCH_SECS; + } + } + + return $_sync_seconds; + } + + /*! + */ + function clob($clob = null) { + static $_clob = false; + static $set = false; + + if (!is_null($clob)) { + $_clob = strtolower(trim($clob)); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) { + return $GLOBALS['ADODB_SESSION_USE_LOBS']; + } + } + + return $_clob; + } + + /*! + */ + function dataFieldName($data_field_name = null) { + static $_data_field_name = 'data'; + + if (!is_null($data_field_name)) { + $_data_field_name = trim($data_field_name); + } + + return $_data_field_name; + } + + /*! + */ + function filter($filter = null) { + static $_filter = array(); + + if (!is_null($filter)) { + if (!is_array($filter)) { + $filter = array($filter); + } + $_filter = $filter; + } + + return $_filter; + } + + /*! + */ + function encryptionKey($encryption_key = null) { + static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!'; + + if (!is_null($encryption_key)) { + $_encryption_key = $encryption_key; + } + + return $_encryption_key; + } + + ///////////////////// + // private methods + ///////////////////// + + /*! + */ + function _conn($conn=null) { + return $GLOBALS['ADODB_SESS_CONN']; + } + + /*! + */ + function _crc($crc = null) { + static $_crc = false; + + if (!is_null($crc)) { + $_crc = $crc; + } + + return $_crc; + } + + /*! + */ + function _init() { + session_module_name('user'); + session_set_save_handler( + array('ADODB_Session', 'open'), + array('ADODB_Session', 'close'), + array('ADODB_Session', 'read'), + array('ADODB_Session', 'write'), + array('ADODB_Session', 'destroy'), + array('ADODB_Session', 'gc') + ); + } + + + /*! + */ + function _sessionKey() { + // use this function to create the encryption key for crypted sessions + // crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt + return crypt(ADODB_Session::encryptionKey(), session_id()); + } + + /*! + */ + function _dumprs($rs) { + $conn = ADODB_Session::_conn(); + $debug = ADODB_Session::debug(); + + if (!$conn) { + return; + } + + if (!$debug) { + return; + } + + if (!$rs) { + echo "
\$rs is null or false
\n"; + return; + } + + //echo "
\nAffected_Rows=",$conn->Affected_Rows(),"
\n"; + + if (!is_object($rs)) { + return; + } + + require_once ADODB_SESSION.'/../tohtml.inc.php'; + rs2html($rs); + } + + ///////////////////// + // public methods + ///////////////////// + + function config($driver, $host, $user, $password, $database=false,$options=false) + { + ADODB_Session::driver($driver); + ADODB_Session::host($host); + ADODB_Session::user($user); + ADODB_Session::password($password); + ADODB_Session::database($database); + + if ($driver == 'oci8' || $driver == 'oci8po') $options['lob'] = 'CLOB'; + + if (isset($options['table'])) ADODB_Session::table($options['table']); + if (isset($options['lob'])) ADODB_Session::clob($options['lob']); + if (isset($options['debug'])) ADODB_Session::debug($options['debug']); + } + + /*! + Create the connection to the database. + + If $conn already exists, reuse that connection + */ + function open($save_path, $session_name, $persist = null) + { + $conn = ADODB_Session::_conn(); + + if ($conn) { + return true; + } + + $database = ADODB_Session::database(); + $debug = ADODB_Session::debug(); + $driver = ADODB_Session::driver(); + $host = ADODB_Session::host(); + $password = ADODB_Session::password(); + $user = ADODB_Session::user(); + + if (!is_null($persist)) { + ADODB_Session::persist($persist); + } else { + $persist = ADODB_Session::persist(); + } + +# these can all be defaulted to in php.ini +# assert('$database'); +# assert('$driver'); +# assert('$host'); + + $conn = ADONewConnection($driver); + + if ($debug) { + $conn->debug = true; +// ADOConnection::outp( " driver=$driver user=$user pwd=$password db=$database "); + } + + if ($persist) { + switch($persist) { + default: + case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break; + case 'C': $ok = $conn->Connect($host, $user, $password, $database); break; + case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break; + } + } else { + $ok = $conn->Connect($host, $user, $password, $database); + } + + if ($ok) $GLOBALS['ADODB_SESS_CONN'] = $conn; + else + ADOConnection::outp('

Session: connection failed

', false); + + + return $ok; + } + + /*! + Close the connection + */ + function close() + { +/* + $conn = ADODB_Session::_conn(); + if ($conn) $conn->Close(); +*/ + return true; + } + + /* + Slurp in the session variables and return the serialized string + */ + function read($key) + { + $conn = ADODB_Session::_conn(); + $data = ADODB_Session::dataFieldName(); + $filter = ADODB_Session::filter(); + $table = ADODB_Session::table(); + + if (!$conn) { + return ''; + } + + //assert('$table'); + + $qkey = $conn->quote($key); + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + $sql = "SELECT $data FROM $table WHERE sesskey = $binary $qkey AND expiry >= " . time(); + /* Lock code does not work as it needs to hold transaction within whole page, and we don't know if + developer has commited elsewhere... :( + */ + #if (ADODB_Session::Lock()) + # $rs = $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), $data); + #else + + $rs = $conn->Execute($sql); + //ADODB_Session::_dumprs($rs); + if ($rs) { + if ($rs->EOF) { + $v = ''; + } else { + $v = reset($rs->fields); + $filter = array_reverse($filter); + foreach ($filter as $f) { + if (is_object($f)) { + $v = $f->read($v, ADODB_Session::_sessionKey()); + } + } + $v = rawurldecode($v); + } + + $rs->Close(); + + ADODB_Session::_crc(strlen($v) . crc32($v)); + return $v; + } + + return ''; + } + + /*! + Write the serialized data to a database. + + If the data has not been modified since the last read(), we do not write. + */ + function write($key, $val) + { + global $ADODB_SESSION_READONLY; + + if (!empty($ADODB_SESSION_READONLY)) return; + + $clob = ADODB_Session::clob(); + $conn = ADODB_Session::_conn(); + $crc = ADODB_Session::_crc(); + $data = ADODB_Session::dataFieldName(); + $debug = ADODB_Session::debug(); + $driver = ADODB_Session::driver(); + $expire_notify = ADODB_Session::expireNotify(); + $filter = ADODB_Session::filter(); + $lifetime = ADODB_Session::lifetime(); + $table = ADODB_Session::table(); + + if (!$conn) { + return false; + } + $qkey = $conn->qstr($key); + + //assert('$table'); + + $expiry = time() + $lifetime; + + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + // crc32 optimization since adodb 2.1 + // now we only update expiry date, thx to sebastian thom in adodb 2.32 + if ($crc !== false && $crc == (strlen($val) . crc32($val))) { + if ($debug) { + ADOConnection::outp( '

Session: Only updating date - crc32 not changed

'); + } + + $expirevar = ''; + if ($expire_notify) { + $var = reset($expire_notify); + global $$var; + if (isset($$var)) { + $expirevar = $$var; + } + } + + + $sql = "UPDATE $table SET expiry = ".$conn->Param('0').",expireref=".$conn->Param('1')." WHERE $binary sesskey = ".$conn->Param('2')." AND expiry >= ".$conn->Param('3'); + $rs = $conn->Execute($sql,array($expiry,$expirevar,$key,time())); + return true; + } + $val = rawurlencode($val); + foreach ($filter as $f) { + if (is_object($f)) { + $val = $f->write($val, ADODB_Session::_sessionKey()); + } + } + + $arr = array('sesskey' => $key, 'expiry' => $expiry, $data => $val, 'expireref' => ''); + if ($expire_notify) { + $var = reset($expire_notify); + global $$var; + if (isset($$var)) { + $arr['expireref'] = $$var; + } + } + + if (!$clob) { // no lobs, simply use replace() + $arr[$data] = $val; + $rs = $conn->Replace($table, $arr, 'sesskey', $autoQuote = true); + + } else { + // what value shall we insert/update for lob row? + switch ($driver) { + // empty_clob or empty_lob for oracle dbs + case 'oracle': + case 'oci8': + case 'oci8po': + case 'oci805': + $lob_value = sprintf('empty_%s()', strtolower($clob)); + break; + + // null for all other + default: + $lob_value = 'null'; + break; + } + + $conn->StartTrans(); + $expiryref = $conn->qstr($arr['expireref']); + // do we insert or update? => as for sesskey + $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = $qkey"); + if ($rs && reset($rs->fields) > 0) { + $sql = "UPDATE $table SET expiry = $expiry, $data = $lob_value, expireref=$expiryref WHERE sesskey = $qkey"; + } else { + $sql = "INSERT INTO $table (expiry, $data, sesskey,expireref) VALUES ($expiry, $lob_value, $qkey,$expiryref)"; + } + if ($rs)$rs->Close(); + + + $err = ''; + $rs1 = $conn->Execute($sql); + if (!$rs1) $err = $conn->ErrorMsg()."\n"; + + $rs2 = $conn->UpdateBlob($table, $data, $val, " sesskey=$qkey", strtoupper($clob)); + if (!$rs2) $err .= $conn->ErrorMsg()."\n"; + + $rs = ($rs && $rs2) ? true : false; + $conn->CompleteTrans(); + } + + if (!$rs) { + ADOConnection::outp('

Session Replace: ' . $conn->ErrorMsg() . '

', false); + return false; + } else { + // bug in access driver (could be odbc?) means that info is not committed + // properly unless select statement executed in Win2000 + if ($conn->databaseType == 'access') { + $sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + if ($rs) { + $rs->Close(); + } + } + }/* + if (ADODB_Session::Lock()) { + $conn->CommitTrans(); + }*/ + return $rs ? true : false; + } + + /*! + */ + function destroy($key) { + $conn = ADODB_Session::_conn(); + $table = ADODB_Session::table(); + $expire_notify = ADODB_Session::expireNotify(); + + if (!$conn) { + return false; + } + + //assert('$table'); + + $qkey = $conn->quote($key); + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + if ($expire_notify) { + reset($expire_notify); + $fn = next($expire_notify); + $savem = $conn->SetFetchMode(ADODB_FETCH_NUM); + $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + $conn->SetFetchMode($savem); + if (!$rs) { + return false; + } + if (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + //assert('$ref'); + //assert('$key'); + $fn($ref, $key); + } + $rs->Close(); + } + + $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + + return $rs ? true : false; + } + + /*! + */ + function gc($maxlifetime) + { + $conn = ADODB_Session::_conn(); + $debug = ADODB_Session::debug(); + $expire_notify = ADODB_Session::expireNotify(); + $optimize = ADODB_Session::optimize(); + $sync_seconds = ADODB_Session::syncSeconds(); + $table = ADODB_Session::table(); + + if (!$conn) { + return false; + } + + + $time = time(); + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + if ($expire_notify) { + reset($expire_notify); + $fn = next($expire_notify); + $savem = $conn->SetFetchMode(ADODB_FETCH_NUM); + $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + $conn->SetFetchMode($savem); + if ($rs) { + $conn->StartTrans(); + $keys = array(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref, $key); + $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key)); + $rs->MoveNext(); + } + $rs->Close(); + + $conn->CompleteTrans(); + } + } else { + + if (1) { + $sql = "SELECT sesskey FROM $table WHERE expiry < $time"; + $arr = $conn->GetAll($sql); + foreach ($arr as $row) { + $sql2 = "DELETE FROM $table WHERE sesskey=".$conn->Param('0'); + $conn->Execute($sql2,array(reset($row))); + } + } else { + $sql = "DELETE FROM $table WHERE expiry < $time"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + if ($rs) $rs->Close(); + } + if ($debug) { + ADOConnection::outp("

Garbage Collection: $sql

"); + } + } + + // suggested by Cameron, "GaM3R" + if ($optimize) { + $driver = ADODB_Session::driver(); + + if (preg_match('/mysql/i', $driver)) { + $sql = "OPTIMIZE TABLE $table"; + } + if (preg_match('/postgres/i', $driver)) { + $sql = "VACUUM $table"; + } + if (!empty($sql)) { + $conn->Execute($sql); + } + } + + if ($sync_seconds) { + $sql = 'SELECT '; + if ($conn->dataProvider === 'oci8') { + $sql .= "TO_CHAR({$conn->sysTimeStamp}, 'RRRR-MM-DD HH24:MI:SS')"; + } else { + $sql .= $conn->sysTimeStamp; + } + $sql .= " FROM $table"; + + $rs = $conn->SelectLimit($sql, 1); + if ($rs && !$rs->EOF) { + $dbts = reset($rs->fields); + $rs->Close(); + $dbt = $conn->UnixTimeStamp($dbts); + $t = time(); + + if (abs($dbt - $t) >= $sync_seconds) { + $msg = __FILE__ . + ": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: " . + " database=$dbt ($dbts), webserver=$t (diff=". (abs($dbt - $t) / 60) . ' minutes)'; + error_log($msg); + if ($debug) { + ADOConnection::outp("

$msg

"); + } + } + } + } + + return true; + } +} + +ADODB_Session::_init(); +if (empty($ADODB_SESSION_READONLY)) + register_shutdown_function('session_write_close'); + +// for backwards compatability only +function adodb_sess_open($save_path, $session_name, $persist = true) { + return ADODB_Session::open($save_path, $session_name, $persist); +} + +// for backwards compatability only +function adodb_sess_gc($t) +{ + return ADODB_Session::gc($t); +} diff --git a/ehcp/adodb5/session/adodb-session2.php b/ehcp/adodb5/session/adodb-session2.php new file mode 100644 index 0000000..c5c061b --- /dev/null +++ b/ehcp/adodb5/session/adodb-session2.php @@ -0,0 +1,939 @@ +Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id)); + + /* it is possible that the update statement fails due to a collision */ + if (!$ok) { + session_id($old_id); + if (empty($ck)) $ck = session_get_cookie_params(); + setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); + return false; + } + + return true; +} + +/* + Generate database table for session data + @see http://phplens.com/lens/lensforum/msgs.php?id=12280 + @return 0 if failure, 1 if errors, 2 if successful. + @author Markus Staab http://www.public-4u.de +*/ +function adodb_session_create_table($schemaFile=null,$conn = null) +{ + // set default values + if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema2.xml'; + if ($conn===null) $conn = ADODB_Session::_conn(); + + if (!$conn) return 0; + + $schema = new adoSchema($conn); + $schema->ParseSchema($schemaFile); + return $schema->ExecuteSchema(); +} + +/*! + \static +*/ +class ADODB_Session { + ///////////////////// + // getter/setter methods + ///////////////////// + + /* + + function Lock($lock=null) + { + static $_lock = false; + + if (!is_null($lock)) $_lock = $lock; + return $lock; + } + */ + /*! + */ + static function driver($driver = null) + { + static $_driver = 'mysql'; + static $set = false; + + if (!is_null($driver)) { + $_driver = trim($driver); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) { + return $GLOBALS['ADODB_SESSION_DRIVER']; + } + } + + return $_driver; + } + + /*! + */ + static function host($host = null) { + static $_host = 'localhost'; + static $set = false; + + if (!is_null($host)) { + $_host = trim($host); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) { + return $GLOBALS['ADODB_SESSION_CONNECT']; + } + } + + return $_host; + } + + /*! + */ + static function user($user = null) + { + static $_user = 'root'; + static $set = false; + + if (!is_null($user)) { + $_user = trim($user); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_USER'])) { + return $GLOBALS['ADODB_SESSION_USER']; + } + } + + return $_user; + } + + /*! + */ + static function password($password = null) + { + static $_password = ''; + static $set = false; + + if (!is_null($password)) { + $_password = $password; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_PWD'])) { + return $GLOBALS['ADODB_SESSION_PWD']; + } + } + + return $_password; + } + + /*! + */ + static function database($database = null) + { + static $_database = ''; + static $set = false; + + if (!is_null($database)) { + $_database = trim($database); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_DB'])) { + return $GLOBALS['ADODB_SESSION_DB']; + } + } + return $_database; + } + + /*! + */ + static function persist($persist = null) + { + static $_persist = true; + + if (!is_null($persist)) { + $_persist = trim($persist); + } + + return $_persist; + } + + /*! + */ + static function lifetime($lifetime = null) + { + static $_lifetime; + static $set = false; + + if (!is_null($lifetime)) { + $_lifetime = (int) $lifetime; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESS_LIFE'])) { + return $GLOBALS['ADODB_SESS_LIFE']; + } + } + if (!$_lifetime) { + $_lifetime = ini_get('session.gc_maxlifetime'); + if ($_lifetime <= 1) { + // bug in PHP 4.0.3 pl 1 -- how about other versions? + //print "

Session Error: PHP.INI setting session.gc_maxlifetimenot set: $lifetime

"; + $_lifetime = 1440; + } + } + + return $_lifetime; + } + + /*! + */ + static function debug($debug = null) + { + static $_debug = false; + static $set = false; + + if (!is_null($debug)) { + $_debug = (bool) $debug; + + $conn = ADODB_Session::_conn(); + if ($conn) { + #$conn->debug = $_debug; + } + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESS_DEBUG'])) { + return $GLOBALS['ADODB_SESS_DEBUG']; + } + } + + return $_debug; + } + + /*! + */ + static function expireNotify($expire_notify = null) + { + static $_expire_notify; + static $set = false; + + if (!is_null($expire_notify)) { + $_expire_notify = $expire_notify; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) { + return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY']; + } + } + + return $_expire_notify; + } + + /*! + */ + static function table($table = null) + { + static $_table = 'sessions2'; + static $set = false; + + if (!is_null($table)) { + $_table = trim($table); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_TBL'])) { + return $GLOBALS['ADODB_SESSION_TBL']; + } + } + + return $_table; + } + + /*! + */ + static function optimize($optimize = null) + { + static $_optimize = false; + static $set = false; + + if (!is_null($optimize)) { + $_optimize = (bool) $optimize; + $set = true; + } elseif (!$set) { + // backwards compatibility + if (defined('ADODB_SESSION_OPTIMIZE')) { + return true; + } + } + + return $_optimize; + } + + /*! + */ + static function syncSeconds($sync_seconds = null) { + //echo ("

WARNING: ADODB_SESSION::syncSeconds is longer used, please remove this function for your code

"); + + return 0; + } + + /*! + */ + static function clob($clob = null) { + static $_clob = false; + static $set = false; + + if (!is_null($clob)) { + $_clob = strtolower(trim($clob)); + $set = true; + } elseif (!$set) { + // backwards compatibility + if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) { + return $GLOBALS['ADODB_SESSION_USE_LOBS']; + } + } + + return $_clob; + } + + /*! + */ + static function dataFieldName($data_field_name = null) { + //echo ("

WARNING: ADODB_SESSION::dataFieldName() is longer used, please remove this function for your code

"); + return ''; + } + + /*! + */ + static function filter($filter = null) { + static $_filter = array(); + + if (!is_null($filter)) { + if (!is_array($filter)) { + $filter = array($filter); + } + $_filter = $filter; + } + + return $_filter; + } + + /*! + */ + static function encryptionKey($encryption_key = null) { + static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!'; + + if (!is_null($encryption_key)) { + $_encryption_key = $encryption_key; + } + + return $_encryption_key; + } + + ///////////////////// + // private methods + ///////////////////// + + /*! + */ + static function _conn($conn=null) { + return isset($GLOBALS['ADODB_SESS_CONN']) ? $GLOBALS['ADODB_SESS_CONN'] : false; + } + + /*! + */ + static function _crc($crc = null) { + static $_crc = false; + + if (!is_null($crc)) { + $_crc = $crc; + } + + return $_crc; + } + + /*! + */ + static function _init() { + session_module_name('user'); + session_set_save_handler( + array('ADODB_Session', 'open'), + array('ADODB_Session', 'close'), + array('ADODB_Session', 'read'), + array('ADODB_Session', 'write'), + array('ADODB_Session', 'destroy'), + array('ADODB_Session', 'gc') + ); + } + + + /*! + */ + static function _sessionKey() { + // use this function to create the encryption key for crypted sessions + // crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt + return crypt(ADODB_Session::encryptionKey(), session_id()); + } + + /*! + */ + static function _dumprs(&$rs) { + $conn = ADODB_Session::_conn(); + $debug = ADODB_Session::debug(); + + if (!$conn) { + return; + } + + if (!$debug) { + return; + } + + if (!$rs) { + echo "
\$rs is null or false
\n"; + return; + } + + //echo "
\nAffected_Rows=",$conn->Affected_Rows(),"
\n"; + + if (!is_object($rs)) { + return; + } + $rs = $conn->_rs2rs($rs); + + require_once ADODB_SESSION.'/../tohtml.inc.php'; + rs2html($rs); + $rs->MoveFirst(); + } + + ///////////////////// + // public methods + ///////////////////// + + static function config($driver, $host, $user, $password, $database=false,$options=false) + { + ADODB_Session::driver($driver); + ADODB_Session::host($host); + ADODB_Session::user($user); + ADODB_Session::password($password); + ADODB_Session::database($database); + + if (strncmp($driver, 'oci8', 4) == 0) $options['lob'] = 'CLOB'; + + if (isset($options['table'])) ADODB_Session::table($options['table']); + if (isset($options['lob'])) ADODB_Session::clob($options['lob']); + if (isset($options['debug'])) ADODB_Session::debug($options['debug']); + } + + /*! + Create the connection to the database. + + If $conn already exists, reuse that connection + */ + static function open($save_path, $session_name, $persist = null) + { + $conn = ADODB_Session::_conn(); + + if ($conn) { + return true; + } + + $database = ADODB_Session::database(); + $debug = ADODB_Session::debug(); + $driver = ADODB_Session::driver(); + $host = ADODB_Session::host(); + $password = ADODB_Session::password(); + $user = ADODB_Session::user(); + + if (!is_null($persist)) { + ADODB_Session::persist($persist); + } else { + $persist = ADODB_Session::persist(); + } + +# these can all be defaulted to in php.ini +# assert('$database'); +# assert('$driver'); +# assert('$host'); + + $conn = ADONewConnection($driver); + + if ($debug) { + $conn->debug = true; + ADOConnection::outp( " driver=$driver user=$user db=$database "); + } + + if (empty($conn->_connectionID)) { // not dsn + if ($persist) { + switch($persist) { + default: + case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break; + case 'C': $ok = $conn->Connect($host, $user, $password, $database); break; + case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break; + } + } else { + $ok = $conn->Connect($host, $user, $password, $database); + } + } else { + $ok = true; // $conn->_connectionID is set after call to ADONewConnection + } + + if ($ok) $GLOBALS['ADODB_SESS_CONN'] = $conn; + else + ADOConnection::outp('

Session: connection failed

', false); + + + return $ok; + } + + /*! + Close the connection + */ + static function close() + { +/* + $conn = ADODB_Session::_conn(); + if ($conn) $conn->Close(); +*/ + return true; + } + + /* + Slurp in the session variables and return the serialized string + */ + static function read($key) + { + $conn = ADODB_Session::_conn(); + $filter = ADODB_Session::filter(); + $table = ADODB_Session::table(); + + if (!$conn) { + return ''; + } + + //assert('$table'); + + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + global $ADODB_SESSION_SELECT_FIELDS; + if (!isset($ADODB_SESSION_SELECT_FIELDS)) $ADODB_SESSION_SELECT_FIELDS = 'sessdata'; + $sql = "SELECT $ADODB_SESSION_SELECT_FIELDS FROM $table WHERE sesskey = $binary ".$conn->Param(0)." AND expiry >= " . $conn->sysTimeStamp; + + /* Lock code does not work as it needs to hold transaction within whole page, and we don't know if + developer has commited elsewhere... :( + */ + #if (ADODB_Session::Lock()) + # $rs = $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), sessdata); + #else + $rs = $conn->Execute($sql, array($key)); + //ADODB_Session::_dumprs($rs); + if ($rs) { + if ($rs->EOF) { + $v = ''; + } else { + $v = reset($rs->fields); + $filter = array_reverse($filter); + foreach ($filter as $f) { + if (is_object($f)) { + $v = $f->read($v, ADODB_Session::_sessionKey()); + } + } + $v = rawurldecode($v); + } + + $rs->Close(); + + ADODB_Session::_crc(strlen($v) . crc32($v)); + return $v; + } + + return ''; + } + + /*! + Write the serialized data to a database. + + If the data has not been modified since the last read(), we do not write. + */ + static function write($key, $oval) + { + global $ADODB_SESSION_READONLY; + + if (!empty($ADODB_SESSION_READONLY)) return; + + $clob = ADODB_Session::clob(); + $conn = ADODB_Session::_conn(); + $crc = ADODB_Session::_crc(); + $debug = ADODB_Session::debug(); + $driver = ADODB_Session::driver(); + $expire_notify = ADODB_Session::expireNotify(); + $filter = ADODB_Session::filter(); + $lifetime = ADODB_Session::lifetime(); + $table = ADODB_Session::table(); + + if (!$conn) { + return false; + } + if ($debug) $conn->debug = 1; + $sysTimeStamp = $conn->sysTimeStamp; + + //assert('$table'); + + $expiry = $conn->OffsetDate($lifetime/(24*3600),$sysTimeStamp); + + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + // crc32 optimization since adodb 2.1 + // now we only update expiry date, thx to sebastian thom in adodb 2.32 + if ($crc !== '00' && $crc !== false && $crc == (strlen($oval) . crc32($oval))) { + if ($debug) { + echo '

Session: Only updating date - crc32 not changed

'; + } + + $expirevar = ''; + if ($expire_notify) { + $var = reset($expire_notify); + global $$var; + if (isset($$var)) { + $expirevar = $$var; + } + } + + + $sql = "UPDATE $table SET expiry = $expiry ,expireref=".$conn->Param('0').", modified = $sysTimeStamp WHERE $binary sesskey = ".$conn->Param('1')." AND expiry >= $sysTimeStamp"; + $rs = $conn->Execute($sql,array($expirevar,$key)); + return true; + } + $val = rawurlencode($oval); + foreach ($filter as $f) { + if (is_object($f)) { + $val = $f->write($val, ADODB_Session::_sessionKey()); + } + } + + $expireref = ''; + if ($expire_notify) { + $var = reset($expire_notify); + global $$var; + if (isset($$var)) { + $expireref = $$var; + } + } + + if (!$clob) { // no lobs, simply use replace() + $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = ".$conn->Param(0),array($key)); + if ($rs) $rs->Close(); + + if ($rs && reset($rs->fields) > 0) { + $sql = "UPDATE $table SET expiry=$expiry, sessdata=".$conn->Param(0).", expireref= ".$conn->Param(1).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param(2); + + } else { + $sql = "INSERT INTO $table (expiry, sessdata, expireref, sesskey, created, modified) + VALUES ($expiry,".$conn->Param('0').", ". $conn->Param('1').", ".$conn->Param('2').", $sysTimeStamp, $sysTimeStamp)"; + } + + + $rs = $conn->Execute($sql,array($val,$expireref,$key)); + + } else { + // what value shall we insert/update for lob row? + if (strncmp($driver, 'oci8', 4) == 0) $lob_value = sprintf('empty_%s()', strtolower($clob)); + else $lob_value = 'null'; + + $conn->StartTrans(); + + $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = ".$conn->Param(0),array($key)); + + if ($rs && reset($rs->fields) > 0) { + $sql = "UPDATE $table SET expiry=$expiry, sessdata=$lob_value, expireref= ".$conn->Param(0).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param('1'); + + } else { + $sql = "INSERT INTO $table (expiry, sessdata, expireref, sesskey, created, modified) + VALUES ($expiry,$lob_value, ". $conn->Param('0').", ".$conn->Param('1').", $sysTimeStamp, $sysTimeStamp)"; + } + + $rs = $conn->Execute($sql,array($expireref,$key)); + + $qkey = $conn->qstr($key); + $rs2 = $conn->UpdateBlob($table, 'sessdata', $val, " sesskey=$qkey", strtoupper($clob)); + if ($debug) echo "
",htmlspecialchars($oval), "
"; + $rs = @$conn->CompleteTrans(); + + + } + + if (!$rs) { + ADOConnection::outp('

Session Replace: ' . $conn->ErrorMsg() . '

', false); + return false; + } else { + // bug in access driver (could be odbc?) means that info is not committed + // properly unless select statement executed in Win2000 + if ($conn->databaseType == 'access') { + $sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + if ($rs) { + $rs->Close(); + } + } + }/* + if (ADODB_Session::Lock()) { + $conn->CommitTrans(); + }*/ + return $rs ? true : false; + } + + /*! + */ + static function destroy($key) { + $conn = ADODB_Session::_conn(); + $table = ADODB_Session::table(); + $expire_notify = ADODB_Session::expireNotify(); + + if (!$conn) { + return false; + } + $debug = ADODB_Session::debug(); + if ($debug) $conn->debug = 1; + //assert('$table'); + + $qkey = $conn->quote($key); + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + if ($expire_notify) { + reset($expire_notify); + $fn = next($expire_notify); + $savem = $conn->SetFetchMode(ADODB_FETCH_NUM); + $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + ADODB_Session::_dumprs($rs); + $conn->SetFetchMode($savem); + if (!$rs) { + return false; + } + if (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + //assert('$ref'); + //assert('$key'); + $fn($ref, $key); + } + $rs->Close(); + } + + $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey"; + $rs = $conn->Execute($sql); + if ($rs) { + $rs->Close(); + } + + return $rs ? true : false; + } + + /*! + */ + static function gc($maxlifetime) + { + $conn = ADODB_Session::_conn(); + $debug = ADODB_Session::debug(); + $expire_notify = ADODB_Session::expireNotify(); + $optimize = ADODB_Session::optimize(); + $table = ADODB_Session::table(); + + if (!$conn) { + return false; + } + + + $debug = ADODB_Session::debug(); + if ($debug) { + $conn->debug = 1; + $COMMITNUM = 2; + } else { + $COMMITNUM = 20; + } + + //assert('$table'); + + $time = $conn->OffsetDate(-$maxlifetime/24/3600,$conn->sysTimeStamp); + $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; + + if ($expire_notify) { + reset($expire_notify); + $fn = next($expire_notify); + } else { + $fn = false; + } + + $savem = $conn->SetFetchMode(ADODB_FETCH_NUM); + $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time ORDER BY 2"; # add order by to prevent deadlock + $rs = $conn->SelectLimit($sql,1000); + if ($debug) ADODB_Session::_dumprs($rs); + $conn->SetFetchMode($savem); + if ($rs) { + $tr = $conn->hasTransactions; + if ($tr) $conn->BeginTrans(); + $keys = array(); + $ccnt = 0; + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + if ($fn) $fn($ref, $key); + $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key)); + $rs->MoveNext(); + $ccnt += 1; + if ($tr && $ccnt % $COMMITNUM == 0) { + if ($debug) echo "Commit
\n"; + $conn->CommitTrans(); + $conn->BeginTrans(); + } + } + $rs->Close(); + + if ($tr) $conn->CommitTrans(); + } + + + // suggested by Cameron, "GaM3R" + if ($optimize) { + $driver = ADODB_Session::driver(); + + if (preg_match('/mysql/i', $driver)) { + $sql = "OPTIMIZE TABLE $table"; + } + if (preg_match('/postgres/i', $driver)) { + $sql = "VACUUM $table"; + } + if (!empty($sql)) { + $conn->Execute($sql); + } + } + + + return true; + } +} + +ADODB_Session::_init(); +if (empty($ADODB_SESSION_READONLY)) + register_shutdown_function('session_write_close'); + +// for backwards compatability only +function adodb_sess_open($save_path, $session_name, $persist = true) { + return ADODB_Session::open($save_path, $session_name, $persist); +} + +// for backwards compatability only +function adodb_sess_gc($t) +{ + return ADODB_Session::gc($t); +} diff --git a/ehcp/adodb5/session/adodb-sessions.mysql.sql b/ehcp/adodb5/session/adodb-sessions.mysql.sql new file mode 100644 index 0000000..f90de44 --- /dev/null +++ b/ehcp/adodb5/session/adodb-sessions.mysql.sql @@ -0,0 +1,16 @@ +-- $CVSHeader$ + +CREATE DATABASE /*! IF NOT EXISTS */ adodb_sessions; + +USE adodb_sessions; + +DROP TABLE /*! IF EXISTS */ sessions; + +CREATE TABLE /*! IF NOT EXISTS */ sessions ( + sesskey CHAR(32) /*! BINARY */ NOT NULL DEFAULT '', + expiry INT(11) /*! UNSIGNED */ NOT NULL DEFAULT 0, + expireref VARCHAR(64) DEFAULT '', + data LONGTEXT DEFAULT '', + PRIMARY KEY (sesskey), + INDEX expiry (expiry) +); diff --git a/ehcp/adodb5/session/adodb-sessions.oracle.clob.sql b/ehcp/adodb5/session/adodb-sessions.oracle.clob.sql new file mode 100644 index 0000000..c5c4f2d --- /dev/null +++ b/ehcp/adodb5/session/adodb-sessions.oracle.clob.sql @@ -0,0 +1,15 @@ +-- $CVSHeader$ + +DROP TABLE adodb_sessions; + +CREATE TABLE sessions ( + sesskey CHAR(32) DEFAULT '' NOT NULL, + expiry INT DEFAULT 0 NOT NULL, + expireref VARCHAR(64) DEFAULT '', + data CLOB DEFAULT '', + PRIMARY KEY (sesskey) +); + +CREATE INDEX ix_expiry ON sessions (expiry); + +QUIT; diff --git a/ehcp/adodb5/session/adodb-sessions.oracle.sql b/ehcp/adodb5/session/adodb-sessions.oracle.sql new file mode 100644 index 0000000..8fd5a34 --- /dev/null +++ b/ehcp/adodb5/session/adodb-sessions.oracle.sql @@ -0,0 +1,16 @@ +-- $CVSHeader$ + +DROP TABLE adodb_sessions; + +CREATE TABLE sessions ( + sesskey CHAR(32) DEFAULT '' NOT NULL, + expiry INT DEFAULT 0 NOT NULL, + expireref VARCHAR(64) DEFAULT '', + data VARCHAR(4000) DEFAULT '', + PRIMARY KEY (sesskey), + INDEX expiry (expiry) +); + +CREATE INDEX ix_expiry ON sessions (expiry); + +QUIT; diff --git a/ehcp/adodb5/session/crypt.inc.php b/ehcp/adodb5/session/crypt.inc.php new file mode 100644 index 0000000..1468cb1 --- /dev/null +++ b/ehcp/adodb5/session/crypt.inc.php @@ -0,0 +1,157 @@ + +class MD5Crypt{ + function keyED($txt,$encrypt_key) + { + $encrypt_key = md5($encrypt_key); + $ctr=0; + $tmp = ""; + for ($i=0;$ikeyED($tmp,$key)); + } + + function Decrypt($txt,$key) + { + $txt = $this->keyED(base64_decode($txt),$key); + $tmp = ""; + for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) + { + $randnumber = rand(48,120); + } + + $randomPassword .= chr($randnumber); + } + return $randomPassword; + } + +} + + +class SHA1Crypt{ + function keyED($txt,$encrypt_key) + { + + $encrypt_key = sha1($encrypt_key); + $ctr=0; + $tmp = ""; + + for ($i=0;$ikeyED($tmp,$key)); + + } + + + + function Decrypt($txt,$key) + { + + $txt = $this->keyED(base64_decode($txt),$key); + + $tmp = ""; + + for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) + { + $randnumber = rand(48,120); + } + + $randomPassword .= chr($randnumber); + } + + return $randomPassword; + + } + + + +} diff --git a/ehcp/adodb5/session/old/adodb-cryptsession.php b/ehcp/adodb5/session/old/adodb-cryptsession.php new file mode 100644 index 0000000..d5569cb --- /dev/null +++ b/ehcp/adodb5/session/old/adodb-cryptsession.php @@ -0,0 +1,325 @@ + + + Set tabs to 4 for best viewing. + + Latest version of ADODB is available at http://php.weblogs.com/adodb + ====================================================================== + + This file provides PHP4 session management using the ADODB database +wrapper library. + + Example + ======= + + include('adodb.inc.php'); + #---------------------------------# + include('adodb-cryptsession.php'); + #---------------------------------# + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + print " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

"; + + + Installation + ============ + 1. Create a new database in MySQL or Access "sessions" like +so: + + create table sessions ( + SESSKEY char(32) not null, + EXPIRY int(11) unsigned not null, + EXPIREREF varchar(64), + DATA CLOB, + primary key (sesskey) + ); + + 2. Then define the following parameters. You can either modify + this file, or define them before this file is included: + + $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; + $ADODB_SESSION_CONNECT='server to connect to'; + $ADODB_SESSION_USER ='user'; + $ADODB_SESSION_PWD ='password'; + $ADODB_SESSION_DB ='database'; + $ADODB_SESSION_TBL = 'sessions' + + 3. Recommended is PHP 4.0.2 or later. There are documented +session bugs in earlier versions of PHP. + +*/ + + +include_once('crypt.inc.php'); + +if (!defined('_ADODB_LAYER')) { + include (dirname(__FILE__).'/adodb.inc.php'); +} + + /* if database time and system time is difference is greater than this, then give warning */ + define('ADODB_SESSION_SYNCH_SECS',60); + +if (!defined('ADODB_SESSION')) { + + define('ADODB_SESSION',1); + +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_CONN, + $ADODB_SESS_LIFE, + $ADODB_SESS_DEBUG, + $ADODB_SESS_INSERT, + $ADODB_SESSION_EXPIRE_NOTIFY, + $ADODB_SESSION_TBL; + + //$ADODB_SESS_DEBUG = true; + + /* SET THE FOLLOWING PARAMETERS */ +if (empty($ADODB_SESSION_DRIVER)) { + $ADODB_SESSION_DRIVER='mysql'; + $ADODB_SESSION_CONNECT='localhost'; + $ADODB_SESSION_USER ='root'; + $ADODB_SESSION_PWD =''; + $ADODB_SESSION_DB ='xphplens_2'; +} + +if (empty($ADODB_SESSION_TBL)){ + $ADODB_SESSION_TBL = 'sessions'; +} + +if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { + $ADODB_SESSION_EXPIRE_NOTIFY = false; +} + +function ADODB_Session_Key() +{ +$ADODB_CRYPT_KEY = 'CRYPTED ADODB SESSIONS ROCK!'; + + /* USE THIS FUNCTION TO CREATE THE ENCRYPTION KEY FOR CRYPTED SESSIONS */ + /* Crypt the used key, $ADODB_CRYPT_KEY as key and session_ID as SALT */ + return crypt($ADODB_CRYPT_KEY, session_ID()); +} + +$ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); +if ($ADODB_SESS_LIFE <= 1) { + // bug in PHP 4.0.3 pl 1 -- how about other versions? + //print "

Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE

"; + $ADODB_SESS_LIFE=1440; +} + +function adodb_sess_open($save_path, $session_name) +{ +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_CONN, + $ADODB_SESS_DEBUG; + + $ADODB_SESS_INSERT = false; + + if (isset($ADODB_SESS_CONN)) return true; + + $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); + if (!empty($ADODB_SESS_DEBUG)) { + $ADODB_SESS_CONN->debug = true; + print" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "; + } + return $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, + $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); + +} + +function adodb_sess_close() +{ +global $ADODB_SESS_CONN; + + if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); + return true; +} + +function adodb_sess_read($key) +{ +$Crypt = new MD5Crypt; +global $ADODB_SESS_CONN,$ADODB_SESS_INSERT,$ADODB_SESSION_TBL; + $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); + if ($rs) { + if ($rs->EOF) { + $ADODB_SESS_INSERT = true; + $v = ''; + } else { + // Decrypt session data + $v = rawurldecode($Crypt->Decrypt(reset($rs->fields), ADODB_Session_Key())); + } + $rs->Close(); + return $v; + } + else $ADODB_SESS_INSERT = true; + + return ''; +} + +function adodb_sess_write($key, $val) +{ +$Crypt = new MD5Crypt; + global $ADODB_SESS_INSERT,$ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + $expiry = time() + $ADODB_SESS_LIFE; + + // encrypt session data.. + $val = $Crypt->Encrypt(rawurlencode($val), ADODB_Session_Key()); + + $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + $var = reset($ADODB_SESSION_EXPIRE_NOTIFY); + global $$var; + $arr['expireref'] = $$var; + } + $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL, + $arr, + 'sesskey',$autoQuote = true); + + if (!$rs) { + ADOConnection::outp( ' +-- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'

',false); + } else { + // bug in access driver (could be odbc?) means that info is not commited + // properly unless select statement executed in Win2000 + + if ($ADODB_SESS_CONN->databaseType == 'access') $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); + } + return isset($rs); +} + +function adodb_sess_destroy($key) +{ + global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $ADODB_SESS_CONN->CommitTrans(); + } + } else { + $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; + $rs = $ADODB_SESS_CONN->Execute($qry); + } + return $rs ? true : false; +} + + +function adodb_sess_gc($maxlifetime) { + global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY,$ADODB_SESS_DEBUG; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $t = time(); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + //$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $rs->Close(); + + $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t"); + $ADODB_SESS_CONN->CommitTrans(); + } + } else { + $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time(); + $ADODB_SESS_CONN->Execute($qry); + } + + // suggested by Cameron, "GaM3R" + if (defined('ADODB_SESSION_OPTIMIZE')) + { + global $ADODB_SESSION_DRIVER; + + switch( $ADODB_SESSION_DRIVER ) { + case 'mysql': + case 'mysqlt': + $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; + break; + case 'postgresql': + case 'postgresql7': + $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; + break; + } + } + + if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; + else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; + + $rs = $ADODB_SESS_CONN->SelectLimit($sql,1); + if ($rs && !$rs->EOF) { + + $dbts = reset($rs->fields); + $rs->Close(); + $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); + $t = time(); + if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { + $msg = + __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; + error_log($msg); + if ($ADODB_SESS_DEBUG) ADOConnection::outp(" +-- $msg

"); + } + } + + return true; +} + +session_module_name('user'); +session_set_save_handler( + "adodb_sess_open", + "adodb_sess_close", + "adodb_sess_read", + "adodb_sess_write", + "adodb_sess_destroy", + "adodb_sess_gc"); +} + +/* TEST SCRIPT -- UNCOMMENT */ +/* +if (0) { + + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + print " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

"; +} +*/ diff --git a/ehcp/adodb5/session/old/adodb-session-clob.php b/ehcp/adodb5/session/old/adodb-session-clob.php new file mode 100644 index 0000000..2f781e3 --- /dev/null +++ b/ehcp/adodb5/session/old/adodb-session-clob.php @@ -0,0 +1,448 @@ +"; + +To force non-persistent connections, call adodb_session_open first before session_start(): + + include('adodb.inc.php'); + include('adodb-session.php'); + adodb_session_open(false,false,false); + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + print " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

"; + + + Installation + ============ + 1. Create this table in your database (syntax might vary depending on your db): + + create table sessions ( + SESSKEY char(32) not null, + EXPIRY int(11) unsigned not null, + EXPIREREF varchar(64), + DATA CLOB, + primary key (sesskey) + ); + + + 2. Then define the following parameters in this file: + $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; + $ADODB_SESSION_CONNECT='server to connect to'; + $ADODB_SESSION_USER ='user'; + $ADODB_SESSION_PWD ='password'; + $ADODB_SESSION_DB ='database'; + $ADODB_SESSION_TBL = 'sessions' + $ADODB_SESSION_USE_LOBS = false; (or, if you wanna use CLOBS (= 'CLOB') or ( = 'BLOB') + + 3. Recommended is PHP 4.1.0 or later. There are documented + session bugs in earlier versions of PHP. + + 4. If you want to receive notifications when a session expires, then + you can tag a session with an EXPIREREF, and before the session + record is deleted, we can call a function that will pass the EXPIREREF + as the first parameter, and the session key as the second parameter. + + To do this, define a notification function, say NotifyFn: + + function NotifyFn($expireref, $sesskey) + { + } + + Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY. + This is an array with 2 elements, the first being the name of the variable + you would like to store in the EXPIREREF field, and the 2nd is the + notification function's name. + + In this example, we want to be notified when a user's session + has expired, so we store the user id in the global variable $USERID, + store this value in the EXPIREREF field: + + $ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn'); + + Then when the NotifyFn is called, we are passed the $USERID as the first + parameter, eg. NotifyFn($userid, $sesskey). +*/ + +if (!defined('_ADODB_LAYER')) { + include (dirname(__FILE__).'/adodb.inc.php'); +} + +if (!defined('ADODB_SESSION')) { + + define('ADODB_SESSION',1); + + /* if database time and system time is difference is greater than this, then give warning */ + define('ADODB_SESSION_SYNCH_SECS',60); + +/****************************************************************************************\ + Global definitions +\****************************************************************************************/ +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_CONN, + $ADODB_SESS_LIFE, + $ADODB_SESS_DEBUG, + $ADODB_SESSION_EXPIRE_NOTIFY, + $ADODB_SESSION_CRC, + $ADODB_SESSION_USE_LOBS, + $ADODB_SESSION_TBL; + + if (!isset($ADODB_SESSION_USE_LOBS)) $ADODB_SESSION_USE_LOBS = 'CLOB'; + + $ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); + if ($ADODB_SESS_LIFE <= 1) { + // bug in PHP 4.0.3 pl 1 -- how about other versions? + //print "

Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE

"; + $ADODB_SESS_LIFE=1440; + } + $ADODB_SESSION_CRC = false; + //$ADODB_SESS_DEBUG = true; + + ////////////////////////////////// + /* SET THE FOLLOWING PARAMETERS */ + ////////////////////////////////// + + if (empty($ADODB_SESSION_DRIVER)) { + $ADODB_SESSION_DRIVER='mysql'; + $ADODB_SESSION_CONNECT='localhost'; + $ADODB_SESSION_USER ='root'; + $ADODB_SESSION_PWD =''; + $ADODB_SESSION_DB ='xphplens_2'; + } + + if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { + $ADODB_SESSION_EXPIRE_NOTIFY = false; + } + // Made table name configurable - by David Johnson djohnson@inpro.net + if (empty($ADODB_SESSION_TBL)){ + $ADODB_SESSION_TBL = 'sessions'; + } + + + // defaulting $ADODB_SESSION_USE_LOBS + if (!isset($ADODB_SESSION_USE_LOBS) || empty($ADODB_SESSION_USE_LOBS)) { + $ADODB_SESSION_USE_LOBS = false; + } + + /* + $ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER; + $ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT; + $ADODB_SESS['user'] = $ADODB_SESSION_USER; + $ADODB_SESS['pwd'] = $ADODB_SESSION_PWD; + $ADODB_SESS['db'] = $ADODB_SESSION_DB; + $ADODB_SESS['life'] = $ADODB_SESS_LIFE; + $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; + + $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; + $ADODB_SESS['table'] = $ADODB_SESS_TBL; + */ + +/****************************************************************************************\ + Create the connection to the database. + + If $ADODB_SESS_CONN already exists, reuse that connection +\****************************************************************************************/ +function adodb_sess_open($save_path, $session_name,$persist=true) +{ +GLOBAL $ADODB_SESS_CONN; + if (isset($ADODB_SESS_CONN)) return true; + +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_DEBUG; + + // cannot use & below - do not know why... + $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); + if (!empty($ADODB_SESS_DEBUG)) { + $ADODB_SESS_CONN->debug = true; + ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "); + } + if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, + $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); + else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT, + $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); + + if (!$ok) ADOConnection::outp( " +-- Session: connection failed

",false); +} + +/****************************************************************************************\ + Close the connection +\****************************************************************************************/ +function adodb_sess_close() +{ +global $ADODB_SESS_CONN; + + if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); + return true; +} + +/****************************************************************************************\ + Slurp in the session variables and return the serialized string +\****************************************************************************************/ +function adodb_sess_read($key) +{ +global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC; + + $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); + if ($rs) { + if ($rs->EOF) { + $v = ''; + } else + $v = rawurldecode(reset($rs->fields)); + + $rs->Close(); + + // new optimization adodb 2.1 + $ADODB_SESSION_CRC = strlen($v).crc32($v); + + return $v; + } + + return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com +} + +/****************************************************************************************\ + Write the serialized data to a database. + + If the data has not been modified since adodb_sess_read(), we do not write. +\****************************************************************************************/ +function adodb_sess_write($key, $val) +{ + global + $ADODB_SESS_CONN, + $ADODB_SESS_LIFE, + $ADODB_SESSION_TBL, + $ADODB_SESS_DEBUG, + $ADODB_SESSION_CRC, + $ADODB_SESSION_EXPIRE_NOTIFY, + $ADODB_SESSION_DRIVER, // added + $ADODB_SESSION_USE_LOBS; // added + + $expiry = time() + $ADODB_SESS_LIFE; + + // crc32 optimization since adodb 2.1 + // now we only update expiry date, thx to sebastian thom in adodb 2.32 + if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) { + if ($ADODB_SESS_DEBUG) echo " +-- Session: Only updating date - crc32 not changed

"; + $qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time(); + $rs = $ADODB_SESS_CONN->Execute($qry); + return true; + } + $val = rawurlencode($val); + + $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + $var = reset($ADODB_SESSION_EXPIRE_NOTIFY); + global $$var; + $arr['expireref'] = $$var; + } + + + if ($ADODB_SESSION_USE_LOBS === false) { // no lobs, simply use replace() + $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr, 'sesskey',$autoQuote = true); + if (!$rs) { + $err = $ADODB_SESS_CONN->ErrorMsg(); + } + } else { + // what value shall we insert/update for lob row? + switch ($ADODB_SESSION_DRIVER) { + // empty_clob or empty_lob for oracle dbs + case "oracle": + case "oci8": + case "oci8po": + case "oci805": + $lob_value = sprintf("empty_%s()", strtolower($ADODB_SESSION_USE_LOBS)); + break; + + // null for all other + default: + $lob_value = "null"; + break; + } + + // do we insert or update? => as for sesskey + $res = $ADODB_SESS_CONN->Execute("select count(*) as cnt from $ADODB_SESSION_TBL where sesskey = '$key'"); + if ($res && reset($res->fields) > 0) { + $qry = sprintf("update %s set expiry = %d, data = %s where sesskey = '%s'", $ADODB_SESSION_TBL, $expiry, $lob_value, $key); + } else { + // insert + $qry = sprintf("insert into %s (sesskey, expiry, data) values ('%s', %d, %s)", $ADODB_SESSION_TBL, $key, $expiry, $lob_value); + } + + $err = ""; + $rs1 = $ADODB_SESS_CONN->Execute($qry); + if (!$rs1) { + $err .= $ADODB_SESS_CONN->ErrorMsg()."\n"; + } + $rs2 = $ADODB_SESS_CONN->UpdateBlob($ADODB_SESSION_TBL, 'data', $val, "sesskey='$key'", strtoupper($ADODB_SESSION_USE_LOBS)); + if (!$rs2) { + $err .= $ADODB_SESS_CONN->ErrorMsg()."\n"; + } + $rs = ($rs1 && $rs2) ? true : false; + } + + if (!$rs) { + ADOConnection::outp( ' +-- Session Replace: '.nl2br($err).'

',false); + } else { + // bug in access driver (could be odbc?) means that info is not commited + // properly unless select statement executed in Win2000 + if ($ADODB_SESS_CONN->databaseType == 'access') + $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); + } + return !empty($rs); +} + +function adodb_sess_destroy($key) +{ + global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $ADODB_SESS_CONN->CommitTrans(); + } + } else { + $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; + $rs = $ADODB_SESS_CONN->Execute($qry); + } + return $rs ? true : false; +} + +function adodb_sess_gc($maxlifetime) +{ + global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $t = time(); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $rs->Close(); + + //$ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t"); + $ADODB_SESS_CONN->CommitTrans(); + + } + } else { + $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time()); + + if ($ADODB_SESS_DEBUG) ADOConnection::outp(" +-- Garbage Collection: $qry

"); + } + // suggested by Cameron, "GaM3R" + if (defined('ADODB_SESSION_OPTIMIZE')) { + global $ADODB_SESSION_DRIVER; + + switch( $ADODB_SESSION_DRIVER ) { + case 'mysql': + case 'mysqlt': + $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; + break; + case 'postgresql': + case 'postgresql7': + $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; + break; + } + if (!empty($opt_qry)) { + $ADODB_SESS_CONN->Execute($opt_qry); + } + } + if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; + else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; + + $rs = $ADODB_SESS_CONN->SelectLimit($sql,1); + if ($rs && !$rs->EOF) { + + $dbts = reset($rs->fields); + $rs->Close(); + $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); + $t = time(); + if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { + $msg = + __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; + error_log($msg); + if ($ADODB_SESS_DEBUG) ADOConnection::outp(" +-- $msg

"); + } + } + + return true; +} + +session_module_name('user'); +session_set_save_handler( + "adodb_sess_open", + "adodb_sess_close", + "adodb_sess_read", + "adodb_sess_write", + "adodb_sess_destroy", + "adodb_sess_gc"); +} + +/* TEST SCRIPT -- UNCOMMENT */ + +if (0) { + + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + ADOConnection::outp( " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

",false); +} diff --git a/ehcp/adodb5/session/old/adodb-session.php b/ehcp/adodb5/session/old/adodb-session.php new file mode 100644 index 0000000..8fc073f --- /dev/null +++ b/ehcp/adodb5/session/old/adodb-session.php @@ -0,0 +1,439 @@ +"; + +To force non-persistent connections, call adodb_session_open first before session_start(): + + include('adodb.inc.php'); + include('adodb-session.php'); + adodb_sess_open(false,false,false); + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + print " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

"; + + + Installation + ============ + 1. Create this table in your database (syntax might vary depending on your db): + + create table sessions ( + SESSKEY char(32) not null, + EXPIRY int(11) unsigned not null, + EXPIREREF varchar(64), + DATA text not null, + primary key (sesskey) + ); + + For oracle: + create table sessions ( + SESSKEY char(32) not null, + EXPIRY DECIMAL(16) not null, + EXPIREREF varchar(64), + DATA varchar(4000) not null, + primary key (sesskey) + ); + + + 2. Then define the following parameters. You can either modify + this file, or define them before this file is included: + + $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; + $ADODB_SESSION_CONNECT='server to connect to'; + $ADODB_SESSION_USER ='user'; + $ADODB_SESSION_PWD ='password'; + $ADODB_SESSION_DB ='database'; + $ADODB_SESSION_TBL = 'sessions' + + 3. Recommended is PHP 4.1.0 or later. There are documented + session bugs in earlier versions of PHP. + + 4. If you want to receive notifications when a session expires, then + you can tag a session with an EXPIREREF, and before the session + record is deleted, we can call a function that will pass the EXPIREREF + as the first parameter, and the session key as the second parameter. + + To do this, define a notification function, say NotifyFn: + + function NotifyFn($expireref, $sesskey) + { + } + + Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY. + This is an array with 2 elements, the first being the name of the variable + you would like to store in the EXPIREREF field, and the 2nd is the + notification function's name. + + In this example, we want to be notified when a user's session + has expired, so we store the user id in the global variable $USERID, + store this value in the EXPIREREF field: + + $ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn'); + + Then when the NotifyFn is called, we are passed the $USERID as the first + parameter, eg. NotifyFn($userid, $sesskey). +*/ + +if (!defined('_ADODB_LAYER')) { + include (dirname(__FILE__).'/adodb.inc.php'); +} + +if (!defined('ADODB_SESSION')) { + + define('ADODB_SESSION',1); + + /* if database time and system time is difference is greater than this, then give warning */ + define('ADODB_SESSION_SYNCH_SECS',60); + + /* + Thanks Joe Li. See http://phplens.com/lens/lensforum/msgs.php?id=11487&x=1 +*/ +function adodb_session_regenerate_id() +{ + $conn = ADODB_Session::_conn(); + if (!$conn) return false; + + $old_id = session_id(); + if (function_exists('session_regenerate_id')) { + session_regenerate_id(); + } else { + session_id(md5(uniqid(rand(), true))); + $ck = session_get_cookie_params(); + setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); + //@session_start(); + } + $new_id = session_id(); + $ok = $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id)); + + /* it is possible that the update statement fails due to a collision */ + if (!$ok) { + session_id($old_id); + if (empty($ck)) $ck = session_get_cookie_params(); + setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); + return false; + } + + return true; +} + +/****************************************************************************************\ + Global definitions +\****************************************************************************************/ +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_CONN, + $ADODB_SESS_LIFE, + $ADODB_SESS_DEBUG, + $ADODB_SESSION_EXPIRE_NOTIFY, + $ADODB_SESSION_CRC, + $ADODB_SESSION_TBL; + + + $ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); + if ($ADODB_SESS_LIFE <= 1) { + // bug in PHP 4.0.3 pl 1 -- how about other versions? + //print "

Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE

"; + $ADODB_SESS_LIFE=1440; + } + $ADODB_SESSION_CRC = false; + //$ADODB_SESS_DEBUG = true; + + ////////////////////////////////// + /* SET THE FOLLOWING PARAMETERS */ + ////////////////////////////////// + + if (empty($ADODB_SESSION_DRIVER)) { + $ADODB_SESSION_DRIVER='mysql'; + $ADODB_SESSION_CONNECT='localhost'; + $ADODB_SESSION_USER ='root'; + $ADODB_SESSION_PWD =''; + $ADODB_SESSION_DB ='xphplens_2'; + } + + if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { + $ADODB_SESSION_EXPIRE_NOTIFY = false; + } + // Made table name configurable - by David Johnson djohnson@inpro.net + if (empty($ADODB_SESSION_TBL)){ + $ADODB_SESSION_TBL = 'sessions'; + } + + /* + $ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER; + $ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT; + $ADODB_SESS['user'] = $ADODB_SESSION_USER; + $ADODB_SESS['pwd'] = $ADODB_SESSION_PWD; + $ADODB_SESS['db'] = $ADODB_SESSION_DB; + $ADODB_SESS['life'] = $ADODB_SESS_LIFE; + $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; + + $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; + $ADODB_SESS['table'] = $ADODB_SESS_TBL; + */ + +/****************************************************************************************\ + Create the connection to the database. + + If $ADODB_SESS_CONN already exists, reuse that connection +\****************************************************************************************/ +function adodb_sess_open($save_path, $session_name,$persist=true) +{ +GLOBAL $ADODB_SESS_CONN; + if (isset($ADODB_SESS_CONN)) return true; + +GLOBAL $ADODB_SESSION_CONNECT, + $ADODB_SESSION_DRIVER, + $ADODB_SESSION_USER, + $ADODB_SESSION_PWD, + $ADODB_SESSION_DB, + $ADODB_SESS_DEBUG; + + // cannot use & below - do not know why... + $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); + if (!empty($ADODB_SESS_DEBUG)) { + $ADODB_SESS_CONN->debug = true; + ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "); + } + if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, + $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); + else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT, + $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); + + if (!$ok) ADOConnection::outp( " +-- Session: connection failed

",false); +} + +/****************************************************************************************\ + Close the connection +\****************************************************************************************/ +function adodb_sess_close() +{ +global $ADODB_SESS_CONN; + + if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); + return true; +} + +/****************************************************************************************\ + Slurp in the session variables and return the serialized string +\****************************************************************************************/ +function adodb_sess_read($key) +{ +global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC; + + $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); + if ($rs) { + if ($rs->EOF) { + $v = ''; + } else + $v = rawurldecode(reset($rs->fields)); + + $rs->Close(); + + // new optimization adodb 2.1 + $ADODB_SESSION_CRC = strlen($v).crc32($v); + + return $v; + } + + return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com +} + +/****************************************************************************************\ + Write the serialized data to a database. + + If the data has not been modified since adodb_sess_read(), we do not write. +\****************************************************************************************/ +function adodb_sess_write($key, $val) +{ + global + $ADODB_SESS_CONN, + $ADODB_SESS_LIFE, + $ADODB_SESSION_TBL, + $ADODB_SESS_DEBUG, + $ADODB_SESSION_CRC, + $ADODB_SESSION_EXPIRE_NOTIFY; + + $expiry = time() + $ADODB_SESS_LIFE; + + // crc32 optimization since adodb 2.1 + // now we only update expiry date, thx to sebastian thom in adodb 2.32 + if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) { + if ($ADODB_SESS_DEBUG) echo " +-- Session: Only updating date - crc32 not changed

"; + $qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time(); + $rs = $ADODB_SESS_CONN->Execute($qry); + return true; + } + $val = rawurlencode($val); + + $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + $var = reset($ADODB_SESSION_EXPIRE_NOTIFY); + global $$var; + $arr['expireref'] = $$var; + } + $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr, + 'sesskey',$autoQuote = true); + + if (!$rs) { + ADOConnection::outp( ' +-- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'

',false); + } else { + // bug in access driver (could be odbc?) means that info is not commited + // properly unless select statement executed in Win2000 + if ($ADODB_SESS_CONN->databaseType == 'access') + $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); + } + return !empty($rs); +} + +function adodb_sess_destroy($key) +{ + global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $ADODB_SESS_CONN->CommitTrans(); + } + } else { + $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; + $rs = $ADODB_SESS_CONN->Execute($qry); + } + return $rs ? true : false; +} + +function adodb_sess_gc($maxlifetime) +{ + global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; + + if ($ADODB_SESSION_EXPIRE_NOTIFY) { + reset($ADODB_SESSION_EXPIRE_NOTIFY); + $fn = next($ADODB_SESSION_EXPIRE_NOTIFY); + $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); + $t = time(); + $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); + $ADODB_SESS_CONN->SetFetchMode($savem); + if ($rs) { + $ADODB_SESS_CONN->BeginTrans(); + while (!$rs->EOF) { + $ref = $rs->fields[0]; + $key = $rs->fields[1]; + $fn($ref,$key); + $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); + $rs->MoveNext(); + } + $rs->Close(); + + $ADODB_SESS_CONN->CommitTrans(); + + } + } else { + $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time(); + $ADODB_SESS_CONN->Execute($qry); + + if ($ADODB_SESS_DEBUG) ADOConnection::outp(" +-- Garbage Collection: $qry

"); + } + // suggested by Cameron, "GaM3R" + if (defined('ADODB_SESSION_OPTIMIZE')) { + global $ADODB_SESSION_DRIVER; + + switch( $ADODB_SESSION_DRIVER ) { + case 'mysql': + case 'mysqlt': + $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; + break; + case 'postgresql': + case 'postgresql7': + $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; + break; + } + if (!empty($opt_qry)) { + $ADODB_SESS_CONN->Execute($opt_qry); + } + } + if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; + else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; + + $rs = $ADODB_SESS_CONN->SelectLimit($sql,1); + if ($rs && !$rs->EOF) { + + $dbts = reset($rs->fields); + $rs->Close(); + $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); + $t = time(); + + if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { + + $msg = + __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; + error_log($msg); + if ($ADODB_SESS_DEBUG) ADOConnection::outp(" +-- $msg

"); + } + } + + return true; +} + +session_module_name('user'); +session_set_save_handler( + "adodb_sess_open", + "adodb_sess_close", + "adodb_sess_read", + "adodb_sess_write", + "adodb_sess_destroy", + "adodb_sess_gc"); +} + +/* TEST SCRIPT -- UNCOMMENT */ + +if (0) { + + session_start(); + session_register('AVAR'); + $_SESSION['AVAR'] += 1; + ADOConnection::outp( " +-- \$_SESSION['AVAR']={$_SESSION['AVAR']}

",false); +} diff --git a/ehcp/adodb5/session/old/crypt.inc.php b/ehcp/adodb5/session/old/crypt.inc.php new file mode 100644 index 0000000..9c347db --- /dev/null +++ b/ehcp/adodb5/session/old/crypt.inc.php @@ -0,0 +1,63 @@ + +class MD5Crypt{ + function keyED($txt,$encrypt_key) + { + $encrypt_key = md5($encrypt_key); + $ctr=0; + $tmp = ""; + for ($i=0;$ikeyED($tmp,$key)); + } + + function Decrypt($txt,$key) + { + $txt = $this->keyED(base64_decode($txt),$key); + $tmp = ""; + for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) + { + $randnumber = rand(48,120); + } + + $randomPassword .= chr($randnumber); + } + return $randomPassword; + } + +} diff --git a/ehcp/adodb5/session/session_schema.xml b/ehcp/adodb5/session/session_schema.xml new file mode 100644 index 0000000..27e47bf --- /dev/null +++ b/ehcp/adodb5/session/session_schema.xml @@ -0,0 +1,26 @@ + + + + table for ADOdb session-management + + + session key + + + + + + + + + + + + + + + + + +
+
diff --git a/ehcp/adodb5/session/session_schema2.xml b/ehcp/adodb5/session/session_schema2.xml new file mode 100644 index 0000000..f0d3ec9 --- /dev/null +++ b/ehcp/adodb5/session/session_schema2.xml @@ -0,0 +1,38 @@ + + + + table for ADOdb session-management + + + session key + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/ehcp/adodb5/tests/benchmark.php b/ehcp/adodb5/tests/benchmark.php new file mode 100644 index 0000000..672d179 --- /dev/null +++ b/ehcp/adodb5/tests/benchmark.php @@ -0,0 +1,86 @@ + + + + + ADODB Benchmarks + + + +ADODB Version: $ADODB_version Host: $db->host   Database: $db->database"; + + // perform query once to cache results so we are only testing throughput + $rs = $db->Execute($sql); + if (!$rs){ + print "Error in recordset

"; + return; + } + $arr = $rs->GetArray(); + //$db->debug = true; + global $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + $start = microtime(); + for ($i=0; $i < $max; $i++) { + $rs = $db->Execute($sql); + $arr = $rs->GetArray(); + // print $arr[0][1]; + } + $end = microtime(); + $start = explode(' ',$start); + $end = explode(' ',$end); + + //print_r($start); + //print_r($end); + + // print_r($arr); + $total = $end[0]+trim($end[1]) - $start[0]-trim($start[1]); + printf ("

seconds = %8.2f for %d iterations each with %d records

",$total,$max, sizeof($arr)); + flush(); + + + //$db->Close(); +} +include("testdatabases.inc.php"); + +?> + + + + diff --git a/ehcp/adodb5/tests/client.php b/ehcp/adodb5/tests/client.php new file mode 100644 index 0000000..74c100e --- /dev/null +++ b/ehcp/adodb5/tests/client.php @@ -0,0 +1,199 @@ + + +'; + var_dump(parse_url('odbc_mssql://userserver/')); + die(); + +include('../adodb.inc.php'); +include('../tohtml.inc.php'); + + function send2server($url,$sql) + { + $url .= '?sql='.urlencode($sql); + print "

$url

"; + $rs = csv2rs($url,$err); + if ($err) print $err; + return $rs; + } + + function print_pre($s) + { + print "
";print_r($s);print "
"; + } + + +$serverURL = 'http://localhost/php/phplens/adodb/server.php'; +$testhttp = false; + +$sql1 = "insertz into products (productname) values ('testprod 1')"; +$sql2 = "insert into products (productname) values ('testprod 1')"; +$sql3 = "insert into products (productname) values ('testprod 2')"; +$sql4 = "delete from products where productid>80"; +$sql5 = 'select * from products'; + +if ($testhttp) { + print "Client Driver Tests

"; + print "

Test Error

"; + $rs = send2server($serverURL,$sql1); + print_pre($rs); + print "
"; + + print "

Test Insert

"; + + $rs = send2server($serverURL,$sql2); + print_pre($rs); + print "
"; + + print "

Test Insert2

"; + + $rs = send2server($serverURL,$sql3); + print_pre($rs); + print "
"; + + print "

Test Delete

"; + + $rs = send2server($serverURL,$sql4); + print_pre($rs); + print "
"; + + + print "

Test Select

"; + $rs = send2server($serverURL,$sql5); + if ($rs) rs2html($rs); + + print "
"; +} + + +print "

CLIENT Driver Tests

"; +$conn = ADONewConnection('csv'); +$conn->Connect($serverURL); +$conn->debug = true; + +print "

Bad SQL

"; + +$rs = $conn->Execute($sql1); + +print "

Insert SQL 1

"; +$rs = $conn->Execute($sql2); + +print "

Insert SQL 2

"; +$rs = $conn->Execute($sql3); + +print "

Select SQL

"; +$rs = $conn->Execute($sql5); +if ($rs) rs2html($rs); + +print "

Delete SQL

"; +$rs = $conn->Execute($sql4); + +print "

Select SQL

"; +$rs = $conn->Execute($sql5); +if ($rs) rs2html($rs); + + +/* EXPECTED RESULTS FOR HTTP TEST: + +Test Insert +http://localhost/php/adodb/server.php?sql=insert+into+products+%28productname%29+values+%28%27testprod%27%29 + +adorecordset Object +( + [dataProvider] => native + [fields] => + [blobSize] => 64 + [canSeek] => + [EOF] => 1 + [emptyTimeStamp] => + [emptyDate] => + [debug] => + [timeToLive] => 0 + [bind] => + [_numOfRows] => -1 + [_numOfFields] => 0 + [_queryID] => 1 + [_currentRow] => -1 + [_closed] => + [_inited] => + [sql] => insert into products (productname) values ('testprod') + [affectedrows] => 1 + [insertid] => 81 +) + + +-------------------------------------------------------------------------------- + +Test Insert2 +http://localhost/php/adodb/server.php?sql=insert+into+products+%28productname%29+values+%28%27testprod%27%29 + +adorecordset Object +( + [dataProvider] => native + [fields] => + [blobSize] => 64 + [canSeek] => + [EOF] => 1 + [emptyTimeStamp] => + [emptyDate] => + [debug] => + [timeToLive] => 0 + [bind] => + [_numOfRows] => -1 + [_numOfFields] => 0 + [_queryID] => 1 + [_currentRow] => -1 + [_closed] => + [_inited] => + [sql] => insert into products (productname) values ('testprod') + [affectedrows] => 1 + [insertid] => 82 +) + + +-------------------------------------------------------------------------------- + +Test Delete +http://localhost/php/adodb/server.php?sql=delete+from+products+where+productid%3E80 + +adorecordset Object +( + [dataProvider] => native + [fields] => + [blobSize] => 64 + [canSeek] => + [EOF] => 1 + [emptyTimeStamp] => + [emptyDate] => + [debug] => + [timeToLive] => 0 + [bind] => + [_numOfRows] => -1 + [_numOfFields] => 0 + [_queryID] => 1 + [_currentRow] => -1 + [_closed] => + [_inited] => + [sql] => delete from products where productid>80 + [affectedrows] => 2 + [insertid] => 0 +) + +[more stuff deleted] + . + . + . +*/ diff --git a/ehcp/adodb5/tests/pdo.php b/ehcp/adodb5/tests/pdo.php new file mode 100644 index 0000000..31ca596 --- /dev/null +++ b/ehcp/adodb5/tests/pdo.php @@ -0,0 +1,92 @@ +"; +try { + echo "New Connection\n"; + + + $dsn = 'pdo_mysql://root:@localhost/northwind?persist'; + + if (!empty($dsn)) { + $DB = NewADOConnection($dsn) || die("CONNECT FAILED"); + $connstr = $dsn; + } else { + + $DB = NewADOConnection('pdo'); + + echo "Connect\n"; + + $u = ''; $p = ''; + /* + $connstr = 'odbc:nwind'; + + $connstr = 'oci:'; + $u = 'scott'; + $p = 'natsoft'; + + + $connstr ="sqlite:d:\inetpub\adodb\sqlite.db"; + */ + + $connstr = "mysql:dbname=northwind"; + $u = 'root'; + + $connstr = "pgsql:dbname=test"; + $u = 'tester'; + $p = 'test'; + + $DB->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + + } + + echo "connection string=$connstr\n Execute\n"; + + //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $DB->Execute("select * from ADOXYZ where id<3"); + if ($DB->ErrorNo()) echo "*** errno=".$DB->ErrorNo() . " ".($DB->ErrorMsg())."\n"; + + + //print_r(get_class_methods($DB->_stmt)); + + if (!$rs) die("NO RS"); + + echo "Meta\n"; + for ($i=0; $i < $rs->NumCols(); $i++) { + var_dump($rs->FetchField($i)); + echo "
"; + } + + echo "FETCH\n"; + $cnt = 0; + while (!$rs->EOF) { + adodb_pr($rs->fields); + $rs->MoveNext(); + if ($cnt++ > 1000) break; + } + + echo "
--------------------------------------------------------
\n\n\n"; + + $stmt = $DB->PrepareStmt("select * from ADOXYZ"); + + $rs = $stmt->Execute(); + $cols = $stmt->NumCols(); // execute required + + echo "COLS = $cols"; + for($i=1;$i<=$cols;$i++) { + $v = $stmt->_stmt->getColumnMeta($i); + var_dump($v); + } + + echo "e=".$stmt->ErrorNo() . " ".($stmt->ErrorMsg())."\n"; + while ($arr = $rs->FetchRow()) { + adodb_pr($arr); + } + die("DONE\n"); + +} catch (exception $e) { + echo "
";
+	echo $e;
+	echo "
"; +} diff --git a/ehcp/adodb5/tests/test-active-record.php b/ehcp/adodb5/tests/test-active-record.php new file mode 100644 index 0000000..5947162 --- /dev/null +++ b/ehcp/adodb5/tests/test-active-record.php @@ -0,0 +1,140 @@ += 5) { + include('../adodb-exceptions.inc.php'); + echo "

Exceptions included

"; + } + } + + $db = NewADOConnection('mysql://root@localhost/northwind?persist'); + $db->debug=1; + ADOdb_Active_Record::SetDatabaseAdapter($db); + + + $db->Execute("CREATE TEMPORARY TABLE `persons` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_color` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + $db->Execute("CREATE TEMPORARY TABLE `children` ( + `id` int(10) unsigned NOT NULL auto_increment, + `person_id` int(10) unsigned NOT NULL, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_pet` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + class Person extends ADOdb_Active_Record{ function ret($v) {return $v;} } + $person = new Person(); + ADOdb_Active_Record::$_quoteNames = '111'; + + echo "

Output of getAttributeNames: "; + var_dump($person->getAttributeNames()); + + /** + * Outputs the following: + * array(4) { + * [0]=> + * string(2) "id" + * [1]=> + * string(9) "name_first" + * [2]=> + * string(8) "name_last" + * [3]=> + * string(13) "favorite_color" + * } + */ + + $person = new Person(); + $person->name_first = 'Andi'; + $person->name_last = 'Gutmans'; + $person->save(); // this save() will fail on INSERT as favorite_color is a must fill... + + + $person = new Person(); + $person->name_first = 'Andi'; + $person->name_last = 'Gutmans'; + $person->favorite_color = 'blue'; + $person->save(); // this save will perform an INSERT successfully + + echo "

The Insert ID generated:"; print_r($person->id); + + $person->favorite_color = 'red'; + $person->save(); // this save() will perform an UPDATE + + $person = new Person(); + $person->name_first = 'John'; + $person->name_last = 'Lim'; + $person->favorite_color = 'lavender'; + $person->save(); // this save will perform an INSERT successfully + + // load record where id=2 into a new ADOdb_Active_Record + $person2 = new Person(); + $person2->Load('id=2'); + + $activeArr = $db->GetActiveRecordsClass($class = "Person",$table = "Persons","id=".$db->Param(0),array(2)); + $person2 = $activeArr[0]; + echo "

Name (should be John): ",$person->name_first, "
Class (should be Person): ",get_class($person2),"
"; + + $db->Execute("insert into children (person_id,name_first,name_last) values (2,'Jill','Lim')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (2,'Joan','Lim')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (2,'JAMIE','Lim')"); + + $newperson2 = new Person(); + $person2->HasMany('children','person_id'); + $person2->Load('id=2'); + $person2->name_last='green'; + $c = $person2->children; + $person2->save(); + + if (is_array($c) && sizeof($c) == 3 && $c[0]->name_first=='Jill' && $c[1]->name_first=='Joan' + && $c[2]->name_first == 'JAMIE') echo "OK Loaded HasMany
"; + else { + var_dump($c); + echo "error loading hasMany should have 3 array elements Jill Joan Jamie
"; + } + + class Child extends ADOdb_Active_Record{}; + $ch = new Child('children',array('id')); + $ch->BelongsTo('person','person_id','id'); + $ch->Load('id=1'); + if ($ch->name_first !== 'Jill') echo "error in Loading Child
"; + + $p = $ch->person; + if ($p->name_first != 'John') echo "Error loading belongsTo
"; + else echo "OK loading BelongTo
"; + + $p->hasMany('children','person_id'); + $p->LoadRelations('children', " Name_first like 'J%' order by id",1,2); + if (sizeof($p->children) == 2 && $p->children[1]->name_first == 'JAMIE') echo "OK LoadRelations
"; + else echo "error LoadRelations
"; + + $db->Execute("CREATE TEMPORARY TABLE `persons2` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_color` varchar(100) default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + $p = new adodb_active_record('persons2'); + $p->name_first = 'James'; + + $p->name_last = 'James'; + + $p->HasMany('children','person_id'); + $p->children; + var_dump($p); + $p->Save(); diff --git a/ehcp/adodb5/tests/test-active-recs2.php b/ehcp/adodb5/tests/test-active-recs2.php new file mode 100644 index 0000000..f5898fc --- /dev/null +++ b/ehcp/adodb5/tests/test-active-recs2.php @@ -0,0 +1,76 @@ +Connect("localhost","tester","test","test"); +} else + $db = NewADOConnection('oci8://scott:natsoft@/'); + + +$arr = $db->ServerInfo(); +echo "

$db->dataProvider: {$arr['description']}

"; + +$arr = $db->GetActiveRecords('products',' productid<10'); +adodb_pr($arr); + +ADOdb_Active_Record::SetDatabaseAdapter($db); +if (!$db) die('failed'); + + + + +$rec = new ADODB_Active_Record('photos'); + +$rec = new ADODB_Active_Record('products'); + + +adodb_pr($rec->getAttributeNames()); + +echo "
"; + + +$rec->load('productid=2'); +adodb_pr($rec); + +$db->debug=1; + + +$rec->productname = 'Changie Chan'.rand(); + +$rec->insert(); +$rec->update(); + +$rec->productname = 'Changie Chan 99'; +$rec->replace(); + + +$rec2 = new ADODB_Active_Record('products'); +$rec->load('productid=3'); +$rec->save(); + +$rec = new ADODB_Active_record('products'); +$rec->productname = 'John ActiveRec'; +$rec->notes = 22; +#$rec->productid=0; +$rec->discontinued=1; +$rec->Save(); +$rec->supplierid=33; +$rec->Save(); +$rec->discontinued=0; +$rec->Save(); +$rec->Delete(); + +echo "

Affected Rows after delete=".$db->Affected_Rows()."

"; diff --git a/ehcp/adodb5/tests/test-active-relations.php b/ehcp/adodb5/tests/test-active-relations.php new file mode 100644 index 0000000..7a98d47 --- /dev/null +++ b/ehcp/adodb5/tests/test-active-relations.php @@ -0,0 +1,85 @@ +debug=1; + ADOdb_Active_Record::SetDatabaseAdapter($db); + + $db->Execute("CREATE TEMPORARY TABLE `persons` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_color` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + $db->Execute("CREATE TEMPORARY TABLE `children` ( + `id` int(10) unsigned NOT NULL auto_increment, + `person_id` int(10) unsigned NOT NULL, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_pet` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + + $db->Execute("insert into children (person_id,name_first,name_last) values (1,'Jill','Lim')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (1,'Joan','Lim')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (1,'JAMIE','Lim')"); + + ADODB_Active_Record::TableHasMany('persons', 'children','person_id'); + class person extends ADOdb_Active_Record{} + + $person = new person(); +# $person->HasMany('children','person_id'); ## this is affects all other instances of Person + + $person->name_first = 'John'; + $person->name_last = 'Lim'; + $person->favorite_color = 'lavender'; + $person->save(); // this save will perform an INSERT successfully + + $person2 = new person(); + $person2->Load('id=1'); + + $c = $person2->children; + if (is_array($c) && sizeof($c) == 3 && $c[0]->name_first=='Jill' && $c[1]->name_first=='Joan' + && $c[2]->name_first == 'JAMIE') echo "OK Loaded HasMany
"; + else { + var_dump($c); + echo "error loading hasMany should have 3 array elements Jill Joan Jamie
"; + } + + class child extends ADOdb_Active_Record{}; + ADODB_Active_Record::TableBelongsTo('children','person','person_id','id'); + $ch = new Child('children',array('id')); + + $ch->Load('id=1'); + if ($ch->name_first !== 'Jill') echo "error in Loading Child
"; + + $p = $ch->person; + if (!$p || $p->name_first != 'John') echo "Error loading belongsTo
"; + else echo "OK loading BelongTo
"; + + if ($p) { + #$p->HasMany('children','person_id'); ## this is affects all other instances of Person + $p->LoadRelations('children', 'order by id',1,2); + if (sizeof($p->children) == 2 && $p->children[1]->name_first == 'JAMIE') echo "OK LoadRelations
"; + else { + var_dump($p->children); + echo "error LoadRelations
"; + } + + unset($p->children); + $p->LoadRelations('children', " name_first like 'J%' order by id",1,2); + } + if ($p) + foreach($p->children as $c) { + echo " Saving $c->name_first
"; + $c->name_first .= ' K.'; + $c->Save(); + } diff --git a/ehcp/adodb5/tests/test-active-relationsx.php b/ehcp/adodb5/tests/test-active-relationsx.php new file mode 100644 index 0000000..0f28f72 --- /dev/null +++ b/ehcp/adodb5/tests/test-active-relationsx.php @@ -0,0 +1,418 @@ +\n", $txt); + echo $txt; + } + + include_once('../adodb.inc.php'); + include_once('../adodb-active-recordx.inc.php'); + + + $db = NewADOConnection('mysql://root@localhost/test'); + $db->debug=0; + ADOdb_Active_Record::SetDatabaseAdapter($db); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("Preparing database using SQL queries (creating 'people', 'children')\n"); + + $db->Execute("DROP TABLE `people`"); + $db->Execute("DROP TABLE `children`"); + $db->Execute("DROP TABLE `artists`"); + $db->Execute("DROP TABLE `songs`"); + + $db->Execute("CREATE TABLE `people` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_color` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + $db->Execute("CREATE TABLE `children` ( + `person_id` int(10) unsigned NOT NULL, + `name_first` varchar(100) NOT NULL default '', + `name_last` varchar(100) NOT NULL default '', + `favorite_pet` varchar(100) NOT NULL default '', + `id` int(10) unsigned NOT NULL auto_increment, + PRIMARY KEY (`id`) + ) ENGINE=MyISAM; + "); + + $db->Execute("CREATE TABLE `artists` ( + `name` varchar(100) NOT NULL default '', + `artistuniqueid` int(10) unsigned NOT NULL auto_increment, + PRIMARY KEY (`artistuniqueid`) + ) ENGINE=MyISAM; + "); + + $db->Execute("CREATE TABLE `songs` ( + `name` varchar(100) NOT NULL default '', + `artistid` int(10) NOT NULL, + `recordid` int(10) unsigned NOT NULL auto_increment, + PRIMARY KEY (`recordid`) + ) ENGINE=MyISAM; + "); + + $db->Execute("insert into children (person_id,name_first,name_last,favorite_pet) values (1,'Jill','Lim','tortoise')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (1,'Joan','Lim')"); + $db->Execute("insert into children (person_id,name_first,name_last) values (1,'JAMIE','Lim')"); + + $db->Execute("insert into artists (artistuniqueid, name) values(1,'Elvis Costello')"); + $db->Execute("insert into songs (recordid, name, artistid) values(1,'No Hiding Place', 1)"); + $db->Execute("insert into songs (recordid, name, artistid) values(2,'American Gangster Time', 1)"); + + // This class _implicitely_ relies on the 'people' table (pluralized form of 'person') + class Person extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct(); + $this->hasMany('children'); + } + } + // This class _implicitely_ relies on the 'children' table + class Child extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct(); + $this->belongsTo('person'); + } + } + // This class _explicitely_ relies on the 'children' table and shares its metadata with Child + class Kid extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct('children'); + $this->belongsTo('person'); + } + } + // This class _explicitely_ relies on the 'children' table but does not share its metadata + class Rugrat extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct('children', false, false, array('new' => true)); + } + } + + class Artist extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct('artists', array('artistuniqueid')); + $this->hasMany('songs', 'artistid'); + } + } + class Song extends ADOdb_Active_Record + { + function __construct() + { + parent::__construct('songs', array('recordid')); + $this->belongsTo('artist', 'artistid'); + } + } + + ar_echo("Inserting person in 'people' table ('John Lim, he likes lavender')\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + $person->name_first = 'John'; + $person->name_last = 'Lim'; + $person->favorite_color = 'lavender'; + $person->save(); // this save will perform an INSERT successfully + + $person = new Person(); + $person->name_first = 'Lady'; + $person->name_last = 'Cat'; + $person->favorite_color = 'green'; + $person->save(); + + $child = new Child(); + $child->name_first = 'Fluffy'; + $child->name_last = 'Cat'; + $child->favorite_pet = 'Cat Lady'; + $child->person_id = $person->id; + $child->save(); + + $child = new Child(); + $child->name_first = 'Sun'; + $child->name_last = 'Cat'; + $child->favorite_pet = 'Cat Lady'; + $child->person_id = $person->id; + $child->save(); + + $err_count = 0; + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("person->Find('id=1') [Lazy Method]\n"); + ar_echo("person is loaded but its children will be loaded on-demand later on\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + $people = $person->Find('id=1'); + ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo("\n-- Lazily Loading Children:\n\n"); + foreach($people as $aperson) + { + foreach($aperson->children as $achild) + { + if($achild->name_first); + } + } + ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("person->Find('id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("person is loaded, and so are its children\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + $people = $person->Find('id=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("person->Find('id=1' ... ADODB_JOIN_AR) [Join Method]\n"); + ar_echo("person and its children are loaded using a single query\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + // When I specifically ask for a join, I have to specify which table id I am looking up + // otherwise the SQL parser will wonder which table's id that would be. + $people = $person->Find('people.id=1', false, false, array('loading' => ADODB_JOIN_AR)); + ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("person->Load('people.id=1') [Join Method]\n"); + ar_echo("Load() always uses the join method since it returns only one row\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + // Under the hood, Load(), since it returns only one row, always perform a join + // Therefore we need to clarify which id we are talking about. + $person->Load('people.id=1'); + ar_echo((ar_assert(found($person, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($person, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n"); + ar_echo((ar_assert(found($person, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($person, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("child->Load('children.id=1') [Join Method]\n"); + ar_echo("We are now loading from the 'children' table, not from 'people'\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $child = new Child(); + $child->Load('children.id=1'); + ar_echo((ar_assert(found($child, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($child, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("child->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $child = new Child(); + $children = $child->Find('id=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($children, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($children, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n"); + ar_echo((ar_assert(notfound($children, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($children, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("kid->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("Where we see that kid shares relationships with child because they are stored\n"); + ar_echo("in the common table's metadata structure.\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $kid = new Kid('children'); + $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("kid->Find('children.id=1' ... ADODB_LAZY_AR) [Lazy Method]\n"); + ar_echo("Of course, lazy loading also retrieve medata information...\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $kid = new Kid('children'); + $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_LAZY_AR)); + ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($kids, "'favorite_color' => 'lavender'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo("\n-- Lazily Loading People:\n\n"); + foreach($kids as $akid) + { + if($akid->person); + } + ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("rugrat->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("In rugrat's constructor it is specified that\nit must forget any existing relation\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $rugrat = new Rugrat('children'); + $rugrats = $rugrat->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($rugrats, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($rugrats, "'favorite_color' => 'lavender'"))) ? "[OK] No relation found\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($rugrats, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($rugrats, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("kid->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("Note how only rugrat forgot its relations - kid is fine.\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $kid = new Kid('children'); + $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] I did not forget relation: person\n" : "[!!] I should not have forgotten relation: person\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("rugrat->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $rugrat = new Rugrat('children'); + $rugrats = $rugrat->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR)); + $arugrat = $rugrats[0]; + ar_echo((ar_assert(found($arugrat, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($arugrat, "'favorite_color' => 'lavender'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + + ar_echo("\n-- Loading relations:\n\n"); + $arugrat->belongsTo('person'); + $arugrat->LoadRelations('person', 'order by id', 0, 2); + ar_echo((ar_assert(found($arugrat, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n"); + ar_echo((ar_assert(found($arugrat, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($arugrat, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($arugrat, "'name_first' => 'JAMIE'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("person->Find('1=1') [Lazy Method]\n"); + ar_echo("And now for our finale...\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $person = new Person(); + $people = $person->Find('1=1', false, false, array('loading' => ADODB_LAZY_AR)); + ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + ar_echo((ar_assert(notfound($people, "'name_first' => 'Fluffy'"))) ? "[OK] No Fluffy yet\n" : "[!!] Found Fluffy relation when I shouldn't\n"); + ar_echo("\n-- Lazily Loading Everybody:\n\n"); + foreach($people as $aperson) + { + foreach($aperson->children as $achild) + { + if($achild->name_first); + } + } + ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Lady'"))) ? "[OK] Found Cat Lady\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Fluffy'"))) ? "[OK] Found Fluffy\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($people, "'name_first' => 'Sun'"))) ? "[OK] Found Sun\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("artist->Load('artistuniqueid=1') [Join Method]\n"); + ar_echo("Yes, we are dabbling in the musical field now..\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $artist = new Artist(); + $artist->Load('artistuniqueid=1'); + ar_echo((ar_assert(found($artist, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($artist, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n"); + + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("song->Load('recordid=1') [Join Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $song = new Song(); + $song->Load('recordid=1'); + ar_echo((ar_assert(found($song, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("artist->Find('artistuniqueid=1' ... ADODB_JOIN_AR) [Join Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $artist = new Artist(); + $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_JOIN_AR)); + ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("song->Find('recordid=1' ... ADODB_JOIN_AR) [Join Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $song = new Song(); + $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_JOIN_AR)); + ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("artist->Find('artistuniqueid=1' ... ADODB_WORK_AR) [Work Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $artist = new Artist(); + $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("song->Find('recordid=1' ... ADODB_JOIN_AR) [Join Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $song = new Song(); + $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_WORK_AR)); + ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("artist->Find('artistuniqueid=1' ... ADODB_LAZY_AR) [Lazy Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $artist = new Artist(); + $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_LAZY_AR)); + ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($artists, "'name' => 'No Hiding Place'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + foreach($artists as $anartist) + { + foreach($anartist->songs as $asong) + { + if($asong->name); + } + } + ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("song->Find('recordid=1' ... ADODB_LAZY_AR) [Lazy Method]\n"); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); + $song = new Song(); + $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_LAZY_AR)); + ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n"); + ar_echo((ar_assert(notfound($songs, "'name' => 'Elvis Costello'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n"); + foreach($songs as $asong) + { + if($asong->artist); + } + ar_echo((ar_assert(found($songs, "'name' => 'Elvis Costello'"))) ? "[OK] Found relation: artist\n" : "[!!] Missing relation: artist\n"); + + ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n"); + ar_echo("Test suite complete. " . (($err_count > 0) ? "$err_count errors found.\n" : "Success.\n")); + ar_echo("-------------------------------------------------------------------------------------------------------------------\n"); diff --git a/ehcp/adodb5/tests/test-datadict.php b/ehcp/adodb5/tests/test-datadict.php new file mode 100644 index 0000000..c508170 --- /dev/null +++ b/ehcp/adodb5/tests/test-datadict.php @@ -0,0 +1,251 @@ +$dbType

"; + $db = NewADOConnection($dbType); + $dict = NewDataDictionary($db); + + if (!$dict) continue; + $dict->debug = 1; + + $opts = array('REPLACE','mysql' => 'ENGINE=INNODB', 'oci8' => 'TABLESPACE USERS'); + +/* $flds = array( + array('id', 'I', + 'AUTO','KEY'), + + array('name' => 'firstname', 'type' => 'varchar','size' => 30, + 'DEFAULT'=>'Joan'), + + array('lastname','varchar',28, + 'DEFAULT'=>'Chen','key'), + + array('averylonglongfieldname','X',1024, + 'NOTNULL','default' => 'test'), + + array('price','N','7.2', + 'NOTNULL','default' => '0.00'), + + array('MYDATE', 'D', + 'DEFDATE'), + array('TS','T', + 'DEFTIMESTAMP') + );*/ + + $flds = " +ID I AUTO KEY, +FIRSTNAME VARCHAR(30) DEFAULT 'Joan' INDEX idx_name, +LASTNAME VARCHAR(28) DEFAULT 'Chen' key INDEX idx_name INDEX idx_lastname, +averylonglongfieldname X(1024) DEFAULT 'test', +price N(7.2) DEFAULT '0.00', +MYDATE D DEFDATE INDEX idx_date, +BIGFELLOW X NOTNULL, +TS_SECS T DEFTIMESTAMP, +TS_SUBSEC TS DEFTIMESTAMP +"; + + + $sqla = $dict->CreateDatabase('KUTU',array('postgres'=>"LOCATION='/u01/postdata'")); + $dict->SetSchema('KUTU'); + + $sqli = ($dict->CreateTableSQL('testtable',$flds, $opts)); + $sqla = array_merge($sqla,$sqli); + + $sqli = $dict->CreateIndexSQL('idx','testtable','price,firstname,lastname',array('BITMAP','FULLTEXT','CLUSTERED','HASH')); + $sqla = array_merge($sqla,$sqli); + $sqli = $dict->CreateIndexSQL('idx2','testtable','price,lastname');//,array('BITMAP','FULLTEXT','CLUSTERED')); + $sqla = array_merge($sqla,$sqli); + + $addflds = array(array('height', 'F'),array('weight','F')); + $sqli = $dict->AddColumnSQL('testtable',$addflds); + $sqla = array_merge($sqla,$sqli); + $addflds = array(array('height', 'F','NOTNULL'),array('weight','F','NOTNULL')); + $sqli = $dict->AlterColumnSQL('testtable',$addflds); + $sqla = array_merge($sqla,$sqli); + + + printsqla($dbType,$sqla); + + if (file_exists('d:\inetpub\wwwroot\php\phplens\adodb\adodb.inc.php')) + if ($dbType == 'mysqlt') { + $db->Connect('localhost', "root", "", "test"); + $dict->SetSchema(''); + $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); + if ($sqla2) printsqla($dbType,$sqla2); + } + if ($dbType == 'postgres') { + if (@$db->Connect('localhost', "tester", "test", "test")); + $dict->SetSchema(''); + $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); + if ($sqla2) printsqla($dbType,$sqla2); + } + + if ($dbType == 'odbc_mssql') { + $dsn = $dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=localhost;Database=northwind;"; + if (@$db->Connect($dsn, "sa", "natsoft", "test")); + $dict->SetSchema(''); + $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); + if ($sqla2) printsqla($dbType,$sqla2); + } + + + + adodb_pr($dict->databaseType); + printsqla($dbType, $dict->DropColumnSQL('table',array('my col','`col2_with_Quotes`','A_col3','col3(10)'))); + printsqla($dbType, $dict->ChangeTableSQL('adoxyz','LASTNAME varchar(32)')); + +} + +function printsqla($dbType,$sqla) +{ + print "

";
+	//print_r($dict->MetaTables());
+	foreach($sqla as $s) {
+		$s = htmlspecialchars($s);
+		print "$s;\n";
+		if ($dbType == 'oci8') print "/\n";
+	}
+	print "

"; +} + +/*** + +Generated SQL: + +mysql + +CREATE DATABASE KUTU; +DROP TABLE KUTU.testtable; +CREATE TABLE KUTU.testtable ( +id INTEGER NOT NULL AUTO_INCREMENT, +firstname VARCHAR(30) DEFAULT 'Joan', +lastname VARCHAR(28) NOT NULL DEFAULT 'Chen', +averylonglongfieldname LONGTEXT NOT NULL, +price NUMERIC(7,2) NOT NULL DEFAULT 0.00, +MYDATE DATE DEFAULT CURDATE(), + PRIMARY KEY (id, lastname) +)TYPE=ISAM; +CREATE FULLTEXT INDEX idx ON KUTU.testtable (firstname,lastname); +CREATE INDEX idx2 ON KUTU.testtable (price,lastname); +ALTER TABLE KUTU.testtable ADD height DOUBLE; +ALTER TABLE KUTU.testtable ADD weight DOUBLE; +ALTER TABLE KUTU.testtable MODIFY COLUMN height DOUBLE NOT NULL; +ALTER TABLE KUTU.testtable MODIFY COLUMN weight DOUBLE NOT NULL; + + +-------------------------------------------------------------------------------- + +oci8 + +CREATE USER KUTU IDENTIFIED BY tiger; +/ +GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO KUTU; +/ +DROP TABLE KUTU.testtable CASCADE CONSTRAINTS; +/ +CREATE TABLE KUTU.testtable ( +id NUMBER(16) NOT NULL, +firstname VARCHAR(30) DEFAULT 'Joan', +lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, +averylonglongfieldname CLOB NOT NULL, +price NUMBER(7,2) DEFAULT 0.00 NOT NULL, +MYDATE DATE DEFAULT TRUNC(SYSDATE), + PRIMARY KEY (id, lastname) +)TABLESPACE USERS; +/ +DROP SEQUENCE KUTU.SEQ_testtable; +/ +CREATE SEQUENCE KUTU.SEQ_testtable; +/ +CREATE OR REPLACE TRIGGER KUTU.TRIG_SEQ_testtable BEFORE insert ON KUTU.testtable + FOR EACH ROW + BEGIN + select KUTU.SEQ_testtable.nextval into :new.id from dual; + END; +/ +CREATE BITMAP INDEX idx ON KUTU.testtable (firstname,lastname); +/ +CREATE INDEX idx2 ON KUTU.testtable (price,lastname); +/ +ALTER TABLE testtable ADD ( + height NUMBER, + weight NUMBER); +/ +ALTER TABLE testtable MODIFY( + height NUMBER NOT NULL, + weight NUMBER NOT NULL); +/ + + +-------------------------------------------------------------------------------- + +postgres +AlterColumnSQL not supported for PostgreSQL + + +CREATE DATABASE KUTU LOCATION='/u01/postdata'; +DROP TABLE KUTU.testtable; +CREATE TABLE KUTU.testtable ( +id SERIAL, +firstname VARCHAR(30) DEFAULT 'Joan', +lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, +averylonglongfieldname TEXT NOT NULL, +price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, +MYDATE DATE DEFAULT CURRENT_DATE, + PRIMARY KEY (id, lastname) +); +CREATE INDEX idx ON KUTU.testtable USING HASH (firstname,lastname); +CREATE INDEX idx2 ON KUTU.testtable (price,lastname); +ALTER TABLE KUTU.testtable ADD height FLOAT8; +ALTER TABLE KUTU.testtable ADD weight FLOAT8; + + +-------------------------------------------------------------------------------- + +odbc_mssql + +CREATE DATABASE KUTU; +DROP TABLE KUTU.testtable; +CREATE TABLE KUTU.testtable ( +id INT IDENTITY(1,1) NOT NULL, +firstname VARCHAR(30) DEFAULT 'Joan', +lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, +averylonglongfieldname TEXT NOT NULL, +price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, +MYDATE DATETIME DEFAULT GetDate(), + PRIMARY KEY (id, lastname) +); +CREATE CLUSTERED INDEX idx ON KUTU.testtable (firstname,lastname); +CREATE INDEX idx2 ON KUTU.testtable (price,lastname); +ALTER TABLE KUTU.testtable ADD + height REAL, + weight REAL; +ALTER TABLE KUTU.testtable ALTER COLUMN height REAL NOT NULL; +ALTER TABLE KUTU.testtable ALTER COLUMN weight REAL NOT NULL; + + +-------------------------------------------------------------------------------- +*/ + + +echo "

Test XML Schema

"; +$ff = file('xmlschema.xml'); +echo "
";
+foreach($ff as $xml) echo htmlspecialchars($xml);
+echo "
"; +include_once('test-xmlschema.php'); diff --git a/ehcp/adodb5/tests/test-perf.php b/ehcp/adodb5/tests/test-perf.php new file mode 100644 index 0000000..62465be --- /dev/null +++ b/ehcp/adodb5/tests/test-perf.php @@ -0,0 +1,48 @@ + $v) { + if (strncmp($k,'test',4) == 0) $_SESSION['_db'] = $k; + } +} + +if (isset($_SESSION['_db'])) { + $_db = $_SESSION['_db']; + $_GET[$_db] = 1; + $$_db = 1; +} + +echo "

Performance Monitoring

"; +include_once('testdatabases.inc.php'); + + +function testdb($db) +{ + if (!$db) return; + echo "";print_r($db->ServerInfo()); echo " user=".$db->user.""; + + $perf = NewPerfMonitor($db); + + # unit tests + if (0) { + //$DB->debug=1; + echo "Data Cache Size=".$perf->DBParameter('data cache size').'

'; + echo $perf->HealthCheck(); + echo($perf->SuspiciousSQL()); + echo($perf->ExpensiveSQL()); + echo($perf->InvalidSQL()); + echo $perf->Tables(); + + echo "

";
+		echo $perf->HealthCheckCLI();
+		$perf->Poll(3);
+		die();
+	}
+
+	if ($perf) $perf->UI(3);
+}
diff --git a/ehcp/adodb5/tests/test-pgblob.php b/ehcp/adodb5/tests/test-pgblob.php
new file mode 100644
index 0000000..3add99e
--- /dev/null
+++ b/ehcp/adodb5/tests/test-pgblob.php
@@ -0,0 +1,86 @@
+Param(false);
+		$x = (rand() % 10) + 1;
+		$db->debug= ($i==1);
+		$id = $db->GetOne($sql,
+			array('Z%','Z%',$x));
+		if($id != $offset+$x) {
+			print "

Error at $x"; + break; + } + } +} + +include_once('../adodb.inc.php'); +$db = NewADOConnection('postgres7'); +$db->PConnect('localhost','tester','test','test') || die("failed connection"); + +$enc = "GIF89a%01%00%01%00%80%FF%00%C0%C0%C0%00%00%00%21%F9%04%01%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%01%012%00%3Bt_clear.gif%0D"; +$val = rawurldecode($enc); + +$MAX = 1000; + +adodb_pr($db->ServerInfo()); + +echo "

Testing PREPARE/EXECUTE PLAN

"; + + +$db->_bindInputArray = true; // requires postgresql 7.3+ and ability to modify database +$t = getmicrotime(); +doloop(); +echo '

',$MAX,' times, with plan=',getmicrotime() - $t,'

'; + + +$db->_bindInputArray = false; +$t = getmicrotime(); +doloop(); +echo '

',$MAX,' times, no plan=',getmicrotime() - $t,'

'; + + + +echo "

Testing UPDATEBLOB

"; +$db->debug=1; + +### TEST BEGINS + +$db->Execute("insert into photos (id,name) values(9999,'dot.gif')"); +$db->UpdateBlob('photos','photo',$val,'id=9999'); +$v = $db->GetOne('select photo from photos where id=9999'); + + +### CLEANUP + +$db->Execute("delete from photos where id=9999"); + +### VALIDATION + +if ($v !== $val) echo "*** ERROR: Inserted value does not match downloaded val"; +else echo "*** OK: Passed"; + +echo "
";
+echo "INSERTED: ", $enc;
+echo "
"; +echo"RETURNED: ", rawurlencode($v); +echo "

"; +echo "INSERTED: ", $val; +echo "


"; +echo "RETURNED: ", $v; diff --git a/ehcp/adodb5/tests/test-php5.php b/ehcp/adodb5/tests/test-php5.php new file mode 100644 index 0000000..e44669d --- /dev/null +++ b/ehcp/adodb5/tests/test-php5.php @@ -0,0 +1,116 @@ +PHP ".PHP_VERSION."\n"; +try { + +$dbt = 'oci8po'; + +try { +switch($dbt) { +case 'oci8po': + $db = NewADOConnection("oci8po"); + + $db->Connect('localhost','scott','natsoft','sherkhan'); + break; +default: +case 'mysql': + $db = NewADOConnection("mysql"); + $db->Connect('localhost','root','','northwind'); + break; + +case 'mysqli': + $db = NewADOConnection("mysqli://root:@localhost/northwind"); + //$db->Connect('localhost','root','','test'); + break; +} +} catch (exception $e){ + echo "Connect Failed"; + adodb_pr($e); + die(); +} + +$db->debug=1; + +$cnt = $db->GetOne("select count(*) from adoxyz where ?Prepare("select * from adoxyz where ?ErrorMsg(),"\n"; +$rs = $db->Execute($stmt,array(10,20)); + +echo "
Foreach Iterator Test (rand=".rand().")
"; +$i = 0; +foreach($rs as $v) { + $i += 1; + echo "rec $i: "; $s1 = adodb_pr($v,true); $s2 = adodb_pr($rs->fields,true); + if ($s1 != $s2 && !empty($v)) {adodb_pr($s1); adodb_pr($s2);} + else echo "passed
"; + flush(); +} + +$rs = new ADORecordSet_empty(); +foreach($rs as $v) { + echo "

empty ";var_dump($v); +} + + +if ($i != $cnt) die("actual cnt is $i, cnt should be $cnt\n"); +else echo "Count $i is correct
"; + +$rs = $db->Execute("select bad from badder"); + +} catch (exception $e) { + adodb_pr($e); + echo "

adodb_backtrace:

\n"; + $e = adodb_backtrace($e->gettrace()); +} + +$rs = $db->Execute("select distinct id, firstname,lastname from adoxyz order by id"); +echo "Result=\n",$rs,"

"; + +echo "

Active Record

"; + + include_once("../adodb-active-record.inc.php"); + ADOdb_Active_Record::SetDatabaseAdapter($db); + +try { + class City extends ADOdb_Active_Record{}; + $a = new City(); + +} catch(exception $e){ + echo $e->getMessage(); +} + +try { + + $a = new City(); + + echo "

Successfully created City()
"; + #var_dump($a->GetPrimaryKeys()); + $a->city = 'Kuala Lumpur'; + $a->Save(); + $a->Update(); + #$a->SetPrimaryKeys(array('city')); + $a->country = "M'sia"; + $a->save(); + $a->Delete(); +} catch(exception $e){ + echo $e->getMessage(); +} + +//include_once("test-active-record.php"); diff --git a/ehcp/adodb5/tests/test-xmlschema.php b/ehcp/adodb5/tests/test-xmlschema.php new file mode 100644 index 0000000..c56cfec --- /dev/null +++ b/ehcp/adodb5/tests/test-xmlschema.php @@ -0,0 +1,53 @@ +Connect( 'localhost', 'root', '', 'test' ) || die('fail connect1'); + +// To create a schema object and build the query array. +$schema = new adoSchema( $db ); + +// To upgrade an existing schema object, use the following +// To upgrade an existing database to the provided schema, +// uncomment the following line: +#$schema->upgradeSchema(); + +print "SQL to build xmlschema.xml:\n

";
+// Build the SQL array
+$sql = $schema->ParseSchema( "xmlschema.xml" );
+
+var_dump( $sql );
+print "
\n"; + +// Execute the SQL on the database +//$result = $schema->ExecuteSchema( $sql ); + +// Finally, clean up after the XML parser +// (PHP won't do this for you!) +//$schema->Destroy(); + + + +print "SQL to build xmlschema-mssql.xml:\n
";
+
+$db2 = ADONewConnection('mssql');
+$db2->Connect('','adodb','natsoft','northwind') || die("Fail 2");
+
+$db2->Execute("drop table simple_table");
+
+$schema = new adoSchema( $db2 );
+$sql = $schema->ParseSchema( "xmlschema-mssql.xml" );
+
+print_r( $sql );
+print "
\n"; + +$db2->debug=1; + +foreach ($sql as $s) +$db2->Execute($s); diff --git a/ehcp/adodb5/tests/test.php b/ehcp/adodb5/tests/test.php new file mode 100644 index 0000000..68559b5 --- /dev/null +++ b/ehcp/adodb5/tests/test.php @@ -0,0 +1,1778 @@ +$msg

"; + flush(); +} + +function CheckWS($conn) +{ +global $ADODB_EXTENSION; + + include_once('../session/adodb-session.php'); + if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();} + $saved = $ADODB_EXTENSION; + $db = ADONewConnection($conn); + $ADODB_EXTENSION = $saved; + if (headers_sent()) { + print "

White space detected in adodb-$conn.inc.php or include file...

"; + //die(); + } +} + +function do_strtolower(&$arr) +{ + foreach($arr as $k => $v) { + if (is_object($v)) $arr[$k] = adodb_pr($v,true); + else $arr[$k] = strtolower($v); + } +} + + +function CountExecs($db, $sql, $inputarray) +{ +global $EXECS; $EXECS++; +} + +function CountCachedExecs($db, $secs2cache, $sql, $inputarray) +{ +global $CACHED; $CACHED++; +} + +// the table creation code is specific to the database, so we allow the user +// to define their own table creation stuff + +function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)") +{ +GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE,$ADODB_COUNTRECS; + + //adodb_pr($db); + +?>
+

+
 
+

+Execute('select lastname,firstname,lastname,id from ADOXYZ'); + $arr = $rs->GetAssoc(); + echo "
";print_r($arr);
+	die();*/
+
+	if (!$db) die("testdb: database not inited");
+	GLOBAL $EXECS, $CACHED;
+
+	$EXECS = 0;
+	$CACHED = 0;
+	//$db->Execute("drop table adodb_logsql");
+	if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql");
+	$db->debug=1;
+
+	$db->fnExecute = 'CountExecs';
+	$db->fnCacheExecute = 'CountCachedExecs';
+
+	if (empty($_GET['nolog'])) {
+		echo "

SQL Logging enabled

"; + $db->LogSQL();/* + $sql = +"SELECT t1.sid, t1.sid, t1.title, t1.hometext, t1.notes, t1.aid, t1.informant, +t2.url, t2.email, t1.catid, t3.title, t1.topic, t4.topicname, t4.topicimage, +t4.topictext, t1.score, t1.ratings, t1.counter, t1.comments, t1.acomm +FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_topics` `t4` + WHERE ((t2.aid=t1.aid) AND (t3.catid=t1.catid) AND (t4.topicid=t1.topic) + AND ((t1.alanguage='german') OR (t1.alanguage='')) AND (t1.ihome='0')) + ORDER BY t1.time DESC"; + $db->SelectLimit($sql); + echo $db->ErrorMsg();*/ + } + $ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb')); + $db->debug = false; + //print $db->UnixTimeStamp('2003-7-22 23:00:00'); + + $phpv = phpversion(); + if (defined('ADODB_EXTENSION')) $ext = '   Extension '.ADODB_EXTENSION.' installed'; + else $ext = ''; + print "

ADODB Version: $ADODB_vers"; + print "

Host: $db->host"; + print "
Database: $db->database"; + print "
PHP: $phpv $ext

"; + + flush(); + + print "Current timezone: " . date_default_timezone_get() . "

"; + + $arr = $db->ServerInfo(); + print_r($arr); + echo E_ALL,' ',E_STRICT, "
"; + $e = error_reporting(E_ALL | E_STRICT); + echo error_reporting(),'

'; + flush(); + #$db->debug=1; + $tt = $db->Time(); + if ($tt == 0) echo '
$db->Time failed'; + else echo "
db->Time: ".date('d-m-Y H:i:s',$tt); + echo '
'; + + echo "Date=",$db->UserDate('2002-04-07'),'
'; + print "date1 (1969-02-20) = ".$db->DBDate('1969-2-20'); + print "
date1 (1999-02-20) = ".$db->DBDate('1999-2-20'); + print "
date1.1 1999 injection attack= ".$db->DBDate("'1999', ' injection attack '"); + print "
date2 (1970-1-2) = ".$db->DBDate(24*3600)."

"; + print "ts1 (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm'); + print "
ts1.1 (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40'); + print "
ts2 (1999-02-20) = ".$db->DBTimeStamp('1999-2-20'); + print "
ts2 (1999-02-20) = ".$db->DBTimeStamp("'1999-2-20', 'injection attack'"); + print "
ts3 (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600); + print "
Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1')); + $dd = $db->UnixDate('1999-02-20'); + print "
unixdate 1999-02-20 = ".date('Y-m-d',$dd)."

"; + print "
ts4 =".($db->UnixTimeStamp("19700101000101")+8*3600); + print "
ts5 =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123")); + print "
ts6 =".$db->UserTimeStamp("20040110092123"); + print "
ts7 =".$db->DBTimeStamp("20040110092123"); + flush(); + // mssql too slow in failing bad connection + if (false && $db->databaseType != 'mssql') { + print "

Testing bad connection. Ignore following error msgs:
"; + $db2 = ADONewConnection(); + $rez = $db2->Connect("bad connection"); + $err = $db2->ErrorMsg(); + print "Error='$err'

"; + if ($rez) print "Cannot check if connection failed. The Connect() function returned true.

"; + } + #error_reporting($e); + flush(); + + //$ADODB_COUNTRECS=false; + $rs=$db->Execute('select * from ADOXYZ order by id'); + if($rs === false) $create = true; + else $rs->Close(); + + //if ($db->databaseType !='vfp') $db->Execute("drop table ADOXYZ"); + + if ($create) { + if (false && $db->databaseType == 'ibase') { + print "Please create the following table for testing:

$createtab

"; + return; + } else { + $db->debug = 99; + # $e = error_reporting(E_ALL-E_WARNING); + $db->Execute($createtab); + # error_reporting($e); + } + } + #error_reporting(E_ALL); + echo "

Testing Metatypes

"; + $t = $db->MetaType('varchar'); + if ($t != 'C') Err("Bad Metatype for varchar"); + + $rs = $db->Execute("delete from ADOXYZ"); // some ODBC drivers will fail the drop so we delete + if ($rs) { + if(! $rs->EOF) print "Error: RecordSet returned by Execute('delete...') should show EOF

"; + $rs->Close(); + } else print "err=".$db->ErrorMsg(); + + print "

Test select on empty table, FetchField when EOF, and GetInsertSQL

"; + $rs = $db->Execute("select id,firstname from ADOXYZ where id=9999"); + if ($rs && !$rs->EOF) print "Error: RecordSet returned by Execute(select...') on empty table should show EOF

"; + if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) { + $record['id'] = 99; + $record['firstname'] = 'John'; + $sql = $db->GetInsertSQL($rs, $record); + if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql"); + } else { + Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail..."); + } + if ($rs) $rs->Close(); + flush(); + //$db->debug=true; + print "

Testing Commit: "; + $time = $db->DBDate(time()); + if (!$db->BeginTrans()) { + print 'Transactions not supported

'; + if ($db->hasTransactions) Err("hasTransactions should be false"); + } else { /* COMMIT */ + if (!$db->hasTransactions) Err("hasTransactions should be true"); + if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)"); + $rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)"); + if ($rs && $db->CommitTrans()) { + $rs->Close(); + $rs = $db->Execute("select * from ADOXYZ where id=99"); + if ($rs === false || $rs->EOF) { + print 'Data not saved

'; + $rs = $db->Execute("select * from ADOXYZ where id=99"); + print_r($rs); + die(); + } else print 'OK

'; + if ($rs) $rs->Close(); + } else { + if (!$rs) { + print "Insert failed

"; + $db->RollbackTrans(); + } else print "Commit failed

"; + } + if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); + + /* ROLLBACK */ + if (!$db->BeginTrans()) print "

Error in BeginTrans()

"; + print "

Testing Rollback: "; + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)"); + if ($db->RollbackTrans()) { + $rs = $db->Execute("select * from ADOXYZ where id=100"); + if ($rs && !$rs->EOF) print 'Fail: Data should rollback

'; + else print 'OK

'; + if ($rs) $rs->Close(); + } else + print "Commit failed

"; + + $rs = $db->Execute('delete from ADOXYZ where id>50'); + if ($rs) $rs->Close(); + + if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); + } + + if (1) { + print "

Testing MetaDatabases()

"; + print_r( $db->MetaDatabases()); + + print "

Testing MetaTables() and MetaColumns()

"; + $a = $db->MetaTables(); + if ($a===false) print "MetaTables not supported

"; + else { + print "Array of tables and views: "; + foreach($a as $v) print " ($v) "; + print '

'; + } + + $a = $db->MetaTables('VIEW'); + if ($a===false) print "MetaTables not supported (views)

"; + else { + print "Array of views: "; + foreach($a as $v) print " ($v) "; + print '

'; + } + + $a = $db->MetaTables(false,false,'aDo%'); + if ($a===false) print "MetaTables not supported (mask)

"; + else { + print "Array of ado%: "; + foreach($a as $v) print " ($v) "; + print '

'; + } + + $a = $db->MetaTables('TABLE'); + if ($a===false) print "MetaTables not supported

"; + else { + print "Array of tables: "; + foreach($a as $v) print " ($v) "; + print '

'; + } + + $db->debug=0; + $rez = $db->MetaColumns("NOSUCHTABLEHERE"); + if ($rez !== false) { + Err("MetaColumns error handling failed"); + var_dump($rez); + } + $db->debug=1; + $a = $db->MetaColumns('ADOXYZ'); + if ($a===false) print "MetaColumns not supported

"; + else { + print "

Columns of ADOXYZ:
"; + foreach($a as $v) {print_r($v); echo "
";} + echo "
"; + } + + print "

Testing MetaIndexes

"; + + $a = $db->MetaIndexes(('ADOXYZ'),true); + if ($a===false) print "MetaIndexes not supported

"; + else { + print "

Indexes of ADOXYZ:
"; + adodb_pr($a); + echo "
"; + } + print "

Testing MetaPrimaryKeys

"; + $a = $db->MetaPrimaryKeys('ADOXYZ'); + var_dump($a); + } + $rs = $db->Execute('delete from ADOXYZ'); + if ($rs) $rs->Close(); + + $db->debug = false; + + + switch ($db->databaseType) { + case 'vfp': + + if (0) { + // memo test + $rs = $db->Execute("select data from memo"); + rs2html($rs); + } + break; + + case 'postgres7': + case 'postgres64': + case 'postgres': + case 'ibase': + print "

Encode=".$db->BlobEncode("abc\0d\"' +ef")."

";//' + + print "

Testing Foreign Keys

"; + $arr = $db->MetaForeignKeys('ADOXYZ',false,true); + print_r($arr); + if (!$arr) Err("No MetaForeignKeys"); + break; + + case 'odbc_mssql': + case 'mssqlpo': + print "

Testing Foreign Keys

"; + $arr = $db->MetaForeignKeys('Orders',false,true); + print_r($arr); + if (!$arr) Err("Bad MetaForeignKeys"); + if ($db->databaseType == 'odbc_mssql') break; + + case 'mssql': + + +/* +ASSUME Northwind available... + +CREATE PROCEDURE SalesByCategory + @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998' +AS +IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998' +BEGIN + SELECT @OrdYear = '1998' +END + +SELECT ProductName, + TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0) +FROM [Order Details] OD, Orders O, Products P, Categories C +WHERE OD.OrderID = O.OrderID + AND OD.ProductID = P.ProductID + AND P.CategoryID = C.CategoryID + AND C.CategoryName = @CategoryName + AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear +GROUP BY ProductName +ORDER BY ProductName +GO + + +CREATE PROCEDURE ADODBTestSP +@a nvarchar(25) +AS +SELECT GETDATE() AS T, @a AS A +GO +*/ + print "

Testing Stored Procedures for mssql

"; + $saved = $db->debug; + $db->debug=true; + $assoc = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $cmd = $db->PrepareSP('ADODBTestSP'); + $ss = "You should see me in the output."; + $db->InParameter($cmd,$ss,'a'); + $rs = $db->Execute($cmd); + #var_dump($rs->fields); + echo $rs->fields['T']." --- ".$rs->fields['A']."---
"; + + $cat = 'Dairy Products'; + $yr = '1998'; + + $stmt = $db->PrepareSP('SalesByCategory'); + $db->InParameter($stmt,$cat,'CategoryName'); + $db->InParameter($stmt,$yr,'OrdYear'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $cat = 'Grains/Cereals'; + $yr = 1998; + + $stmt = $db->PrepareSP('SalesByCategory'); + $db->InParameter($stmt,$cat,'CategoryName'); + $db->InParameter($stmt,$yr,'OrdYear'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $ADODB_FETCH_MODE = $assoc; + + /* + Test out params - works in PHP 4.2.3 and 4.3.3 and 4.3.8 but not 4.3.0: + + CREATE PROCEDURE at_date_interval + @days INTEGER, + @start VARCHAR(20) OUT, + @end VARCHAR(20) OUT + AS + BEGIN + set @start = CONVERT(VARCHAR(20), getdate(), 101) + set @end =CONVERT(VARCHAR(20), dateadd(day, @days, getdate()), 101 ) + END + GO + */ + $db->debug=1; + $stmt = $db->PrepareSP('at_date_interval'); + $days = 10; + $begin_date = ''; + $end_date = ''; + $db->InParameter($stmt,$days,'days', 4, SQLINT4); + $db->OutParameter($stmt,$begin_date,'start', 20, SQLVARCHAR ); + $db->OutParameter($stmt,$end_date,'end', 20, SQLVARCHAR ); + $db->Execute($stmt); + if (empty($begin_date) or empty($end_date) or $begin_date == $end_date) { + Err("MSSQL SP Test for OUT Failed"); + print "begin=$begin_date end=$end_date

"; + } else print "(Today +10days) = (begin=$begin_date end=$end_date)

"; + + $db->debug = $saved; + break; + case 'oci8': + case 'oci8po': + + if (0) { + $t = getmicrotime(); + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $arr = $db->GetArray('select * from abalone_tree'); + $arr = $db->GetArray('select * from abalone_tree'); + $arr = $db->GetArray('select * from abalone_tree'); + echo "

t = ",getmicrotime() - $t,"

"; + die(); + } + + # cleanup + $db->Execute("delete from photos where id=99 or id=1"); + $db->Execute("insert into photos (id) values(1)"); + $db->Execute("update photos set photo=null,descclob=null where id=1"); + + $saved = $db->debug; + $db->debug=true; + + + + /* + CREATE TABLE PHOTOS + ( + ID NUMBER(16) primary key, + PHOTO BLOB, + DESCRIPTION VARCHAR2(4000 BYTE), + DESCCLOB CLOB + ); + + INSERT INTO PHOTOS (ID) VALUES(1); + */ + $s = ''; + for ($i = 0; $i <= 500; $i++) { + $s .= '1234567890'; + } + + $sql = "INSERT INTO photos ( ID, photo) ". + "VALUES ( :id, empty_blob() )". + " RETURNING photo INTO :xx"; + + + $blob_data = $s; + $id = 99; + + $stmt = $db->PrepareSP($sql); + $db->InParameter($stmt, $id, 'id'); + $blob = $db->InParameter($stmt, $s, 'xx',-1, OCI_B_BLOB); + $db->StartTrans(); + $result = $db->Execute($stmt); + $db->CompleteTrans(); + + $s2= $db->GetOne("select photo from photos where id=99"); + echo "
---$s2"; + if ($s !== $s2) Err("insert blob does not match"); + + print "

Testing Blob: size=".strlen($s)."

"; + $ok = $db->Updateblob('photos','photo',$s,'id=1'); + if (!$ok) Err("Blob failed 1"); + else { + $s2= $db->GetOne("select photo from photos where id=1"); + if ($s !== $s2) Err("updateblob does not match"); + } + + print "

Testing Clob: size=".strlen($s)."

"; + $ok = $db->UpdateClob('photos','descclob',$s,'id=1'); + if (!$ok) Err("Clob failed 1"); + else { + $s2= $db->GetOne("select descclob from photos where id=1"); + if ($s !== $s2) Err("updateclob does not match"); + } + + + $s = ''; + $s2 = ''; + print "

Testing Foreign Keys

"; + $arr = $db->MetaForeignKeys('emp','scott'); + print_r($arr); + if (!$arr) Err("Bad MetaForeignKeys"); +/* +-- TEST PACKAGE +-- "Set scan off" turns off substitution variables. +Set scan off; + +CREATE OR REPLACE PACKAGE Adodb AS +TYPE TabType IS REF CURSOR RETURN TAB%ROWTYPE; +PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR); +PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) ; +PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR); +PROCEDURE data_in(input IN VARCHAR); +PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER); +END Adodb; +/ + + +CREATE OR REPLACE PACKAGE BODY Adodb AS +PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR) IS + BEGIN + OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames; + END open_tab; + + PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) IS + BEGIN + OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames; + tablenames := 'TEST'; + END open_tab2; + +PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR) IS + BEGIN + output := 'Cinta Hati '||input; + END; + +PROCEDURE data_in(input IN VARCHAR) IS + ignore varchar(1000); + BEGIN + ignore := input; + END; + +PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER) AS +BEGIN +p2 := p1; +END; +END Adodb; +/ + +*/ + + print "

Testing Cursor Variables

"; + $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz'); + + if ($rs && !$rs->EOF) { + $v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'"); + if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK

"; + else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v"); + } else { + print "Error in using Cursor Variables 1

"; + } + if ($rs) $rs->Close(); + + print "

Testing Stored Procedures for oci8

"; + + $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;"); + $a1 = 'Malaysia'; + //$a2 = ''; # a2 doesn't even need to be defined! + $db->InParameter($stmt,$a1,'a1'); + $db->OutParameter($stmt,$a2,'a2'); + $rs = $db->Execute($stmt); + if ($rs) { + if ($a2 !== 'Cinta Hati Malaysia') print "Stored Procedure Error: a2 = $a2

"; + else echo "OK: a2=$a2

"; + } else { + print "Error in using Stored Procedure IN/Out Variables

"; + } + + $tname = 'A%'; + + $stmt = $db->PrepareSP('select * from tab where tname like :tablename'); + $db->Parameter($stmt,$tname,'tablename'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $stmt = $db->PrepareSP("begin adodb.data_in(:a1); end;"); + $db->InParameter($stmt,$a1,'a1'); + $db->Execute($stmt); + + $db->debug = $saved; + break; + + default: + break; + } + $arr = array( + array(1,'Caroline','Miranda'), + array(2,'John','Lim'), + array(3,'Wai Hun','See') + ); + //$db->debug=1; + print "

Testing Bulk Insert of 3 rows

"; + +// $db->debug=1; +// $db->Execute('select * from table where val=? AND value=?', array('val'=>'http ://www.whatever.com/test?=21', 'value'=>'blabl')); + + + $sql = "insert into ADOXYZ (id,firstname,lastname) values (".$db->Param('0').",".$db->Param('1').",".$db->Param('2').")"; + $db->bulkBind = true; + $db->StartTrans(); + $db->debug=99; + $db->Execute($sql,$arr); + $db->CompleteTrans(); + $db->bulkBind = false; + $rs = $db->Execute('select * from ADOXYZ order by id'); + if (!$rs || $rs->RecordCount() != 3) Err("Bad bulk insert"); + + rs2html($rs); + + $db->Execute('delete from ADOXYZ'); + + print "

Inserting 50 rows

"; + + for ($i = 0; $i < 5; $i++) { + + $time = $db->DBDate(time()); + if (empty($_GET['hide'])) $db->debug = true; + switch($db->databaseType){ + case 'mssqlpo': + case 'mssql': + $sqlt = "CREATE TABLE mytable ( + row1 INT IDENTITY(1,1) NOT NULL, + row2 varchar(16), + PRIMARY KEY (row1))"; + //$db->debug=1; + if (!$db->Execute("delete from mytable")) + $db->Execute($sqlt); + + $ok = $db->Execute("insert into mytable (row2) values ('test')"); + $ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id); + if ($ins_id == 0) Err("Bad Insert_ID()"); + $ins_id2 = $db->GetOne("select row1 from mytable"); + if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); + + $arr = array(0=>'Caroline',1=>'Miranda'); + $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; + break; + case 'mysqli': + case 'mysqlt': + case 'mysql': + $sqlt = "CREATE TABLE `mytable` ( + `row1` int(11) NOT NULL auto_increment, + `row2` varchar(16) NOT NULL default '', + PRIMARY KEY (`row1`), + KEY `myindex` (`row1`,`row2`) +) "; + if (!$db->Execute("delete from mytable")) + $db->Execute($sqlt); + + $ok = $db->Execute("insert into mytable (row2) values ('test')"); + $ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id); + if ($ins_id == 0) Err("Bad Insert_ID()"); + $ins_id2 = $db->GetOne("select row1 from mytable"); + if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); + + default: + $arr = array(0=>'Caroline',1=>'Miranda'); + $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; + break; + + case 'oci8': + case 'oci805': + $arr = array('first'=>'Caroline','last'=>'Miranda'); + $amt = rand() % 100; + $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,:first,:last,$time)"; + break; + } + if ($i & 1) { + $sql = $db->Prepare($sql); + } + $rs = $db->Execute($sql,$arr); + + if ($rs === false) Err( 'Error inserting with parameters'); + else $rs->Close(); + $db->debug = false; + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+1,'John','Lim',$time)"); + /*$ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id);*/ + if ($db->databaseType == 'mysql') if ($ins_id == 0) Err('Bad Insert_ID'); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+2,'Mary','Lamb',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+3,'George','Washington',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+4,'Mr. Alan','Tam',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+5,'Alan',".$db->quote("Turing'ton").",$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created)values ($i*10+6,'Serena','Williams',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+7,'Yat Sun','Sun',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+8,'Wai Hun','See',$time )"); + $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+9,'Steven','Oey',$time )"); + } // for + if (1) { + $db->debug=1; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $cnt = $db->GetOne("select count(*) from ADOXYZ"); + $rs = $db->Execute('update ADOXYZ set id=id+1'); + if (!is_object($rs)) { + print_r($rs); + err("Update should return object"); + } + if (!$rs) err("Update generated error"); + + $nrows = $db->Affected_Rows(); + if ($nrows === false) print "

Affected_Rows() not supported

"; + else if ($nrows != $cnt) print "

Affected_Rows() Error: $nrows returned (should be 50)

"; + else print "

Affected_Rows() passed

"; + } + + if ($db->dataProvider == 'oci8') $array = array('zid'=>1,'zdate'=>date('Y-m-d',time())); + else $array=array(1,date('Y-m-d',time())); + + + #$array = array(1,date('Y-m-d',time())); + $id = $db->GetOne("select id from ADOXYZ + where id=".$db->Param('zid')." and created>=".$db->Param('ZDATE')."", + $array); + if ($id != 1) Err("Bad bind; id=$id"); + else echo "
Bind date/integer 1 passed"; + + $array =array(1,$db->BindDate(time())); + $id = $db->GetOne("select id from ADOXYZ + where id=".$db->Param('0')." and created>=".$db->Param('1')."", + $array); + if ($id != 1) Err("Bad bind; id=$id"); + else echo "
Bind date/integer 2 passed"; + + $db->debug = false; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + ////////////////////////////////////////////////////////////////////////////////////////// + + $rs = $db->Execute("select * from ADOXYZ where firstname = 'not known'"); + if (!$rs || !$rs->EOF) print "

Error on empty recordset

"; + else if ($rs->RecordCount() != 0) { + print "

Error on RecordCount. Should be 0. Was ".$rs->RecordCount()."

"; + print_r($rs->fields); + } + if ($db->databaseType !== 'odbc') { + $rs = $db->Execute("select id,firstname,lastname,created,".$db->random." from ADOXYZ order by id"); + if ($rs) { + if ($rs->RecordCount() != 50) { + print "

RecordCount returns ".$rs->RecordCount().", should be 50

"; + adodb_pr($rs->GetArray()); + $poc = $rs->PO_RecordCount('ADOXYZ'); + if ($poc == 50) print "

    PO_RecordCount passed

"; + else print "

PO_RecordCount returns wrong value: $poc

"; + } else print "

RecordCount() passed

"; + if (isset($rs->fields['firstname'])) print '

The fields columns can be indexed by column name.

'; + else { + Err( '

The fields columns cannot be indexed by column name.

'); + print_r($rs->fields); + } + if (empty($_GET['hide'])) rs2html($rs); + } + else print "

Error in Execute of SELECT with random

"; + } + $val = $db->GetOne("select count(*) from ADOXYZ"); + if ($val == 50) print "

GetOne returns ok

"; + else print "

Fail: GetOne returns $val

"; + + echo "GetRow Test"; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $val1 = $db->GetRow("select count(*) from ADOXYZ"); + $val2 = $db->GetRow("select count(*) from ADOXYZ"); + if ($val1[0] == 50 and sizeof($val1) == 1 and $val2[0] == 50 and sizeof($val2) == 1) print "

GetRow returns ok

"; + else { + print_r($val); + print "

Fail: GetRow returns {$val2[0]}

"; + } + + print "

FetchObject/FetchNextObject Test

"; + $rs = $db->Execute('select * from ADOXYZ'); + if ($rs) { + if (empty($rs->connection)) print "Connection object missing from recordset
"; + + while ($o = $rs->FetchNextObject()) { // calls FetchObject internally + if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { + print_r($o); + print "

Firstname is not string

"; + break; + } + } + } else { + print "

Failed rs

"; + die("

ADOXYZ table cannot be read - die()"); + } + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + print "

FetchObject/FetchNextObject Test 2

"; + #$db->debug=99; + $rs = $db->Execute('select * from ADOXYZ'); + if (empty($rs->connection)) print "Connection object missing from recordset
"; + print_r($rs->fields); + while ($o = $rs->FetchNextObject()) { // calls FetchObject internally + if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { + print_r($o); + print "

Firstname is not string

"; + break; + } + } + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + $savefetch = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + print "

CacheSelectLimit Test...

"; + $rs = $db->CacheSelectLimit('select id, firstname from ADOXYZ order by id',2); + + if (ADODB_ASSOC_CASE == 2 || $db->dataProvider == 'oci8') { + $id = 'ID'; + $fname = 'FIRSTNAME'; + }else { + $id = 'id'; + $fname = 'firstname'; + } + + + if ($rs && !$rs->EOF) { + if (isset($rs->fields[0])) { + Err("ASSOC has numeric fields"); + print_r($rs->fields); + } + if ($rs->fields[$id] != 1) {Err("Error"); print_r($rs->fields);}; + if (trim($rs->fields[$fname]) != 'Caroline') {print Err("Error 2"); print_r($rs->fields);}; + + $rs->MoveNext(); + if ($rs->fields[$id] != 2) {Err("Error 3"); print_r($rs->fields);}; + $rs->MoveNext(); + if (!$rs->EOF) { + Err("Error EOF"); + print_r($rs); + } + } + + print "

FETCH_MODE = ASSOC: Should get 1, Caroline ASSOC_CASE=".ADODB_ASSOC_CASE."

"; + $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',2); + if ($rs && !$rs->EOF) { + + if ($rs->fields[$id] != 1) {Err("Error 1"); print_r($rs->fields);}; + if (trim($rs->fields[$fname]) != 'Caroline') {Err("Error 2"); print_r($rs->fields);}; + $rs->MoveNext(); + if ($rs->fields[$id] != 2) {Err("Error 3"); print_r($rs->fields);}; + $rs->MoveNext(); + if (!$rs->EOF) Err("Error EOF"); + else if (is_array($rs->fields) || $rs->fields) { + Err("Error: ## fields should be set to false on EOF"); + print_r($rs->fields); + } + } + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + print "

FETCH_MODE = NUM: Should get 1, Caroline

"; + $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); + if ($rs && !$rs->EOF) { + if (isset($rs->fields[$id])) Err("FETCH_NUM has ASSOC fields"); + if ($rs->fields[0] != 1) {Err("Error 1"); print_r($rs->fields);}; + if (trim($rs->fields[1]) != 'Caroline') {Err("Error 2");print_r($rs->fields);}; + $rs->MoveNext(); + if (!$rs->EOF) Err("Error EOF"); + + } + $ADODB_FETCH_MODE = $savefetch; + + $db->debug = false; + print "

GetRowAssoc Upper: Should get 1, Caroline

"; + $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); + if ($rs && !$rs->EOF) { + $arr = $rs->GetRowAssoc(ADODB_ASSOC_CASE_UPPER); + + if ($arr[strtoupper($id)] != 1) {Err("Error 1");print_r($arr);}; + if (trim($arr[strtoupper($fname)]) != 'Caroline') {Err("Error 2"); print_r($arr);}; + $rs->MoveNext(); + if (!$rs->EOF) Err("Error EOF"); + + } + print "

GetRowAssoc Lower: Should get 1, Caroline

"; + $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); + if ($rs && !$rs->EOF) { + $arr = $rs->GetRowAssoc(ADODB_ASSOC_CASE_LOWER); + if ($arr['id'] != 1) {Err("Error 1"); print_r($arr);}; + if (trim($arr['firstname']) != 'Caroline') {Err("Error 2"); print_r($arr);}; + + } + + print "

GetCol Test

"; + $col = $db->GetCol('select distinct firstname from ADOXYZ order by 1'); + if (!is_array($col)) Err("Col size is wrong"); + if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong"); + + + $col = $db->CacheGetCol('select distinct firstname from ADOXYZ order by 1'); + if (!is_array($col)) Err("Col size is wrong"); + if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong"); + + $db->debug = true; + + + echo "

Date Update Test

"; + $zdate = date('Y-m-d',time()+3600*24); + $zdate = $db->DBDate($zdate); + $db->Execute("update ADOXYZ set created=$zdate where id=1"); + $row = $db->GetRow("select created,firstname from ADOXYZ where id=1"); + print_r($row); echo "
"; + + + + print "

SelectLimit Distinct Test 1: Should see Caroline, John and Mary

"; + $rs = $db->SelectLimit('select distinct * from ADOXYZ order by id',3); + + + if ($rs && !$rs->EOF) { + if (trim($rs->fields[1]) != 'Caroline') Err("Error 1 (exp Caroline), ".$rs->fields[1]); + $rs->MoveNext(); + + if (trim($rs->fields[1]) != 'John') Err("Error 2 (exp John), ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'Mary') Err("Error 3 (exp Mary),".$rs->fields[1]); + $rs->MoveNext(); + if (! $rs->EOF) Err("Error EOF"); + //rs2html($rs); + } else Err("Failed SelectLimit Test 1"); + + print "

SelectLimit Test 2: Should see Mary, George and Mr. Alan

"; + $rs = $db->SelectLimit('select * from ADOXYZ order by id',3,2); + if ($rs && !$rs->EOF) { + if (trim($rs->fields[1]) != 'Mary') Err("Error 1 - No Mary, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'George')Err("Error 2 - No George, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3 - No Mr. Alan, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (! $rs->EOF) Err("Error EOF"); + // rs2html($rs); + } + else Err("Failed SelectLimit Test 2 ". ($rs ? 'EOF':'no RS')); + + print "

SelectLimit Test 3: Should see Wai Hun and Steven

"; + $db->debug=1; + global $A; $A=1; + $rs = $db->SelectLimit('select * from ADOXYZ order by id',-1,48); + $A=0; + if ($rs && !$rs->EOF) { + if (empty($rs->connection)) print "Connection object missing from recordset
"; + if (trim($rs->fields[1]) != 'Wai Hun') Err("Error 1 ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'Steven') Err("Error 2 ".$rs->fields[1]); + $rs->MoveNext(); + if (! $rs->EOF) { + Err("Error EOF"); + } + //rs2html($rs); + } + else Err("Failed SelectLimit Test 3"); + $db->debug = false; + + + $rs = $db->Execute("select * from ADOXYZ order by id"); + print "

Testing Move()

"; + if (!$rs)Err( "Failed Move SELECT"); + else { + if (!$rs->Move(2)) { + if (!$rs->canSeek) print "

$db->databaseType: Move(), MoveFirst() nor MoveLast() not supported.

"; + else print '

RecordSet->canSeek property should be set to false

'; + } else { + $rs->MoveFirst(); + if (trim($rs->Fields("firstname")) != 'Caroline') { + print "

$db->databaseType: MoveFirst failed -- probably cannot scroll backwards

"; + } + else print "MoveFirst() OK
"; + + // Move(3) tests error handling -- MoveFirst should not move cursor + $rs->Move(3); + if (trim($rs->Fields("firstname")) != 'George') { + print '

'.$rs->Fields("id")."$db->databaseType: Move(3) failed

"; + } else print "Move(3) OK
"; + + $rs->Move(7); + if (trim($rs->Fields("firstname")) != 'Yat Sun') { + print '

'.$rs->Fields("id")."$db->databaseType: Move(7) failed

"; + print_r($rs); + } else print "Move(7) OK
"; + if ($rs->EOF) Err("Move(7) is EOF already"); + $rs->MoveLast(); + if (trim($rs->Fields("firstname")) != 'Steven'){ + print '

'.$rs->Fields("id")."$db->databaseType: MoveLast() failed

"; + print_r($rs); + }else print "MoveLast() OK
"; + $rs->MoveNext(); + if (!$rs->EOF) err("Bad MoveNext"); + if ($rs->canSeek) { + $rs->Move(3); + if (trim($rs->Fields("firstname")) != 'George') { + print '

'.$rs->Fields("id")."$db->databaseType: Move(3) after MoveLast failed

"; + + } else print "Move(3) after MoveLast() OK
"; + } + + print "

Empty Move Test"; + $rs = $db->Execute("select * from ADOXYZ where id > 0 and id < 0"); + $rs->MoveFirst(); + if (!$rs->EOF || $rs->fields) Err("Error in empty move first"); + } + } + + $rs = $db->Execute('select * from ADOXYZ where id = 2'); + if ($rs->EOF || !is_array($rs->fields)) Err("Error in select"); + $rs->MoveNext(); + if (!$rs->EOF) Err("Error in EOF (xx) "); + // $db->debug=true; + print "

Testing ADODB_FETCH_ASSOC and concat: concat firstname and lastname

"; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($db->dataProvider == 'postgres') { + $sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ"; + $rs = $db->Execute($sql); + } else { + $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ"; + $rs = $db->Execute($sql); + } + if ($rs) { + if (empty($_GET['hide'])) rs2html($rs); + } else { + Err( "Failed Concat:".$sql); + } + $ADODB_FETCH_MODE = $save; + print "
Testing GetArray() "; + //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + $rs = $db->Execute("select * from ADOXYZ order by id"); + if ($rs) { + $arr = $rs->GetArray(10); + if (sizeof($arr) != 10 || trim($arr[1][1]) != 'John' || trim($arr[1][2]) != 'Lim') print $arr[1][1].' '.$arr[1][2]."   ERROR
"; + else print " OK
"; + } + + $arr = $db->GetArray("select x from ADOXYZ"); + $e = $db->ErrorMsg(); $e2 = $db->ErrorNo(); + echo "Testing error handling, should see illegal column 'x' error=$e ($e2)
"; + if (!$e || !$e2) Err("Error handling did not work"); + print "Testing FetchNextObject for 1 object "; + $rs = $db->Execute("select distinct lastname,firstname from ADOXYZ where firstname='Caroline'"); + $fcnt = 0; + if ($rs) + while ($o = $rs->FetchNextObject()) { + $fcnt += 1; + } + if ($fcnt == 1) print " OK
"; + else print "FAILED
"; + + $stmt = $db->Prepare("select * from ADOXYZ where id < 3"); + $rs = $db->Execute($stmt); + if (!$rs) Err("Prepare failed"); + else { + $arr = $rs->GetArray(); + if (!$arr) Err("Prepare failed 2"); + if (sizeof($arr) != 2) Err("Prepare failed 3"); + } + print "Testing GetAssoc() "; + + + if ($db->dataProvider == 'mysql') { + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $arr = $db->GetAssoc("SELECT 'adodb', '0'"); + var_dump($arr); + die(); + } + + $savecrecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + //$arr = $db->GetArray("select lastname,firstname from ADOXYZ"); + //print_r($arr); + print "
"; + $rs = $db->Execute("select distinct lastname,firstname,created from ADOXYZ"); + + if ($rs) { + $arr = $rs->GetAssoc(); + //print_r($arr); + if (empty($arr['See']) || trim(reset($arr['See'])) != 'Wai Hun') print $arr['See']."   ERROR
"; + else print " OK 1"; + } + + $arr = $db->GetAssoc("select distinct lastname,firstname from ADOXYZ"); + if ($arr) { + //print_r($arr); + if (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']."   ERROR
"; + else print " OK 2
"; + } + // Comment this out to test countrecs = false + $ADODB_COUNTRECS = $savecrecs; + $db->debug=1; + $query = $db->Prepare("select count(*) from ADOXYZ"); + $rs = $db->CacheExecute(10,$query); + if (reset($rs->fields) != 50) echo Err("$cnt wrong for Prepare/CacheGetOne"); + + for ($loop=0; $loop < 1; $loop++) { + print "Testing GetMenu() and CacheExecute
"; + $db->debug = true; + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + + + + + if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu('menu','Steven').'
'; + else print " Fail
"; + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + + if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu('menu','Steven',false).'
'; + else print " Fail
"; + + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + + if ($rs) print ' 1st line set to **** , Steven selected: '. $rs->GetMenu('menu','Steven','1st:****').'
'; + else print " Fail
"; + + + + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + if ($rs) print ' Multiple, Alan selected: '. $rs->GetMenu('menu','Alan',false,true).'
'; + else print " Fail
"; + print '


'; + + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + if ($rs) { + print ' Multiple, Alan and George selected: '. $rs->GetMenu('menu',array('Alan','George'),false,true); + if (empty($rs->connection)) print "Connection object missing from recordset
"; + } else print " Fail
"; + print '


'; + + print "Testing GetMenu3()
"; + $rs = $db->Execute("select ".$db->Concat('firstname',"'-'",'id').",id, lastname from ADOXYZ order by lastname,id"); + if ($rs) print "Grouped Menu: ".$rs->GetMenu3('name'); + else Err('Grouped Menu GetMenu3()'); + print "
"; + + print "Testing GetMenu2()
"; + $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); + if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu2('menu',('Oey')).'
'; + else print " Fail
"; + $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); + if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'
'; + else print " Fail
"; + } + echo "

CacheExecute

"; + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); + print_r($rs->fields); echo $rs->fetchMode;echo "
"; + echo $rs->Fields($fname); + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); + print_r($rs->fields);echo "
"; + echo $rs->Fields($fname); + $db->debug = false; + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + // phplens + + $sql = 'select * from ADOXYZ where 0=1'; + echo "

**Testing '$sql' (phplens compat 1)

"; + $rs = $db->Execute($sql); + if (!$rs) err( "No recordset returned for '$sql'"); + if (!$rs->FieldCount()) err( "No fields returned for $sql"); + if (!$rs->FetchField(1)) err( "FetchField failed for $sql"); + + $sql = 'select * from ADOXYZ order by 1'; + echo "

**Testing '$sql' (phplens compat 2)

"; + $rs = $db->Execute($sql); + if (!$rs) err( "No recordset returned for '$sql'
".$db->ErrorMsg()."
"); + + + $sql = 'select * from ADOXYZ order by 1,1'; + echo "

**Testing '$sql' (phplens compat 3)

"; + $rs = $db->Execute($sql); + if (!$rs) err( "No recordset returned for '$sql'
".$db->ErrorMsg()."
"); + + + // Move + $rs1 = $db->Execute("select id from ADOXYZ where id <= 2 order by 1"); + $rs2 = $db->Execute("select id from ADOXYZ where id = 3 or id = 4 order by 1"); + + if ($rs1) $rs1->MoveLast(); + if ($rs2) $rs2->MoveLast(); + + if (empty($rs1) || empty($rs2) || $rs1->fields[0] != 2 || $rs2->fields[0] != 4) { + $a = $rs1->fields[0]; + $b = $rs2->fields[0]; + print "

Error in multiple recordset test rs1=$a rs2=$b (should be rs1=2 rs2=4)

"; + } else + print "

Testing multiple recordsets OK

"; + + + echo "

GenID test: "; + for ($i=1; $i <= 10; $i++) + echo "($i: ",$val = $db->GenID($db->databaseType.'abcseq7' ,5), ") "; + if ($val == 0) Err("GenID not supported"); + + if ($val) { + $db->DropSequence('abc_seq2'); + $db->CreateSequence('abc_seq2'); + $val = $db->GenID('abc_seq2'); + $db->DropSequence('abc_seq2'); + $db->CreateSequence('abc_seq2'); + $val = $db->GenID('abc_seq2'); + if ($val != 1) Err("Drop and Create Sequence not supported ($val)"); + } + echo "

"; + + if (substr($db->dataProvider,0,3) != 'notused') { // used to crash ado + $sql = "select firstnames from ADOXYZ"; + print "

Testing execution of illegal statement: $sql

"; + if ($db->Execute($sql) === false) { + print "

This returns the following ErrorMsg(): ".$db->ErrorMsg()." and ErrorNo(): ".$db->ErrorNo().'

'; + } else + print "

Error in error handling -- Execute() should return false

"; + } else + print "

ADO skipped error handling of bad select statement

"; + + print "

ASSOC TEST 2
"; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $db->query('select * from ADOXYZ order by id'); + if ($ee = $db->ErrorMsg()) { + Err("Error message=$ee"); + } + if ($ee = $db->ErrorNo()) { + Err("Error No = $ee"); + } + print_r($rs->fields); + for($i=0;$i<$rs->FieldCount();$i++) + { + $fld=$rs->FetchField($i); + print "
Field name is ".$fld->name; + print " ".$rs->Fields($fld->name); + } + + + print "

BOTH TEST 2
"; + if ($db->dataProvider == 'ado') { + print "ADODB_FETCH_BOTH not supported for dataProvider=".$db->dataProvider."
"; + } else { + $ADODB_FETCH_MODE = ADODB_FETCH_BOTH; + $rs = $db->query('select * from ADOXYZ order by id'); + for($i=0;$i<$rs->FieldCount();$i++) + { + $fld=$rs->FetchField($i); + print "
Field name is ".$fld->name; + print " ".$rs->Fields($fld->name); + } + } + + print "

NUM TEST 2
"; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs = $db->query('select * from ADOXYZ order by id'); + for($i=0;$i<$rs->FieldCount();$i++) + { + $fld=$rs->FetchField($i); + print "
Field name is ".$fld->name; + print " ".$rs->Fields($fld->name); + } + + print "

ASSOC Test of SelectLimit
"; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $db->selectlimit('select * from ADOXYZ order by id',3,4); + $cnt = 0; + while ($rs && !$rs->EOF) { + $cnt += 1; + if (!isset($rs->fields['firstname'])) { + print "
ASSOC returned numeric field

"; + break; + } + $rs->MoveNext(); + } + if ($cnt != 3) print "
Count should be 3, instead it was $cnt

"; + + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($db->sysDate) { + $saved = $db->debug; + $db->debug = 1; + $rs = $db->Execute("select {$db->sysDate} from ADOXYZ where id=1"); + if (ADORecordSet::UnixDate(date('Y-m-d')) != $rs->UnixDate($rs->fields[0])) { + print "

Invalid date {$rs->fields[0]}

"; + } else + print "

Passed \$sysDate test ({$rs->fields[0]})

"; + + print_r($rs->FetchField(0)); + print time(); + $db->debug=$saved; + } else { + print "

\$db->sysDate not defined

"; + } + + print "

Test CSV

"; + include_once('../toexport.inc.php'); + //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $db->SelectLimit('select id,firstname,lastname,created,\'He, he\' he,\'"\' q from ADOXYZ',10); + + print "
";
+	print rs2csv($rs);
+	print "
"; + + $rs = $db->SelectLimit('select id,firstname,lastname,created,\'The "young man", he said\' from ADOXYZ',10); + + if (PHP_VERSION < 5) { + print "
";
+		rs2tabout($rs);
+		print "
"; + } + #print " CacheFlush "; + #$db->CacheFlush(); + + $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A'); + $sql = "SELECT $date from ADOXYZ"; + print "

Test SQLDate: ".htmlspecialchars($sql)."

"; + $rs = $db->SelectLimit($sql,1); + $d = date('d-m-M-Y-').'Q'.(ceil(date('m')/3.0)).date(' h:i:s A'); + if (!$rs) Err("SQLDate query returned no recordset"); + else if ($d != $rs->fields[0]) Err("SQLDate 1 failed expected:
act:$d
sql:".$rs->fields[0]); + + $dbdate = $db->DBDate("1974-02-25"); + if (substr($db->dataProvider, 0, 8) == 'postgres') { + $dbdate .= "::TIMESTAMP"; + } + + $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A', $dbdate); + $sql = "SELECT $date from ADOXYZ"; + print "

Test SQLDate: ".htmlspecialchars($sql)."

"; + $db->debug=1; + $rs = $db->SelectLimit($sql,1); + $ts = ADOConnection::UnixDate('1974-02-25'); + $d = date('d-m-M-Y-',$ts).'Q'.(ceil(date('m',$ts)/3.0)).date(' h:i:s A',$ts); + if (!$rs) { + Err("SQLDate query returned no recordset"); + echo $db->ErrorMsg(),'
'; + } else if ($d != reset($rs->fields)) { + Err("SQLDate 2 failed expected:
act:$d
sql:".$rs->fields[0].'
'.$db->ErrorMsg()); + } + + + print "

Test Filter

"; + $db->debug = 1; + + $rs = $db->SelectLimit('select * from ADOXYZ where id < 3 order by id'); + + $rs = RSFilter($rs,'do_strtolower'); + if (trim($rs->fields[1]) != 'caroline' && trim($rs->fields[2]) != 'miranda') { + err('**** RSFilter failed'); + print_r($rs->fields); + } + + rs2html($rs); + + $db->debug=1; + + + print "

Test Replace

"; + + $ret = $db->Replace('ADOXYZ', + array('id'=>1,'firstname'=>'Caroline','lastname'=>'Miranda'), + array('id'), + $autoq = true); + if (!$ret) echo "

Error in replacing existing record

"; + else { + $saved = $db->debug; + $db->debug = 0; + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = true; + $rs = $db->Execute('select * FROM ADOXYZ where id=1'); + $db->debug = $saved; + if ($rs->RecordCount() != 1) { + $cnt = $rs->RecordCount(); + rs2html($rs); + print "Error - Replace failed, count=$cnt

"; + } + $ADODB_COUNTRECS = $savec; + } + $ret = $db->Replace('ADOXYZ', + array('id'=>1000,'firstname'=>'Harun','lastname'=>'Al-Rashid'), + array('id','firstname'), + $autoq = true); + if ($ret != 2) print "Replace failed: "; + print "test A return value=$ret (2 expected)

"; + + $ret = $db->Replace('ADOXYZ', + array('id'=>1000,'firstname'=>'Sherazade','lastname'=>'Al-Rashid'), + 'id', + $autoq = true); + if ($ret != 1) + if ($db->dataProvider == 'ibase' && $ret == 2); + else print "Replace failed: "; + print "test B return value=$ret (1 or if ibase then 2 expected)

"; + + print "

rs2rs Test

"; + + $rs = $db->Execute('select * from ADOXYZ where id>= 1 order by id'); + $rs = $db->_rs2rs($rs); + $rs->valueX = 'X'; + $rs->MoveNext(); + $rs = $db->_rs2rs($rs); + if (!isset($rs->valueX)) err("rs2rs does not preserve array recordsets"); + if (reset($rs->fields) != 1) err("rs2rs does not move to first row: id=".reset($rs->fields)); + + ///////////////////////////////////////////////////////////// + include_once('../pivottable.inc.php'); + print "

Pivot Test

"; + $db->debug=true; + $sql = PivotTableSQL( + $db, # adodb connection + 'ADOXYZ', # tables + 'firstname', # row fields + 'lastname', # column fields + false, # join + 'ID', # sum + 'Sum ', # label for sum + 'sum', # aggregate function + true + ); + $rs = $db->Execute($sql); + if ($rs) rs2html($rs); + else Err("Pivot sql error"); + + $pear = false; //true; + $db->debug=false; + + if ($pear) { + // PEAR TESTS BELOW + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + include_once "PEAR.php"; + $rs = $db->query('select * from ADOXYZ where id>0 and id<10 order by id'); + + $i = 0; + if ($rs && !$rs->EOF) { + while ($arr = $rs->fetchRow()) { + $i++; + //print "$i "; + if ($arr[0] != $i) { + print_r($arr); + print "

PEAR DB emulation error 1.

"; + $pear = false; + break; + } + } + $rs->Close(); + } + + + if ($i != $db->GetOne('select count(*) from ADOXYZ where id>0 and id<10')) { + print "

PEAR DB emulation error 1.1 EOF ($i)

"; + $pear = false; + } + + $rs = $db->limitQuery('select * from ADOXYZ where id>0 order by id',$i=3,$top=3); + $i2 = $i; + if ($rs && !$rs->EOF) { + + while (!is_object($rs->fetchInto($arr))) { + $i2++; + + // print_r($arr); + // print "$i ";print_r($arr); + if ($arr[0] != $i2) { + print "

PEAR DB emulation error 2.

"; + $pear = false; + break; + } + } + $rs->Close(); + } + if ($i2 != $i+$top) { + print "

PEAR DB emulation error 2.1 EOF (correct=$i+$top, actual=$i2)

"; + $pear = false; + } + } + if ($pear) print "

PEAR DB emulation passed.

"; + flush(); + + + $rs = $db->SelectLimit("select ".$db->sysDate." from ADOXYZ",1); + $date = $rs->fields[0]; + if (!$date) Err("Bad sysDate"); + else { + $ds = $db->UserDate($date,"d m Y"); + if ($ds != date("d m Y")) Err("Bad UserDate: ".$ds.' expected='.date("d m Y")); + else echo "Passed UserDate: $ds

"; + } + $db->debug=1; + if ($db->dataProvider == 'oci8') + $rs = $db->SelectLimit("select to_char(".$db->sysTimeStamp.",'YYYY-MM-DD HH24:MI:SS') from ADOXYZ",1); + else + $rs = $db->SelectLimit("select ".$db->sysTimeStamp." from ADOXYZ",1); + $date = $rs->fields[0]; + if (!$date) Err("Bad sysTimeStamp"); + else { + $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); + if ($ds != date("H \\h\\r\\s-d m Y")) Err("Bad UserTimeStamp: ".$ds.", correct is ".date("H \\h\\r\\s-d m Y")); + else echo "Passed UserTimeStamp: $ds

"; + + $date = 100; + $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); + $ds2 = date("H \\h\\r\\s-d m Y",$date); + if ($ds != $ds2) Err("Bad UserTimeStamp 2: $ds: $ds2"); + else echo "Passed UserTimeStamp 2: $ds

"; + } + flush(); + + if ($db->hasTransactions) { + $db->debug=1; + echo "

Testing StartTrans CompleteTrans

"; + $db->raiseErrorFn = false; + + $db->SetTransactionMode('SERIALIZABLE'); + $db->StartTrans(); + $rs = $db->Execute('select * from notable'); + $db->StartTrans(); + $db->BeginTrans(); + $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); + $db->CommitTrans(); + $db->CompleteTrans(); + $rez = $db->CompleteTrans(); + $db->SetTransactionMode(''); + $db->debug=0; + if ($rez !== false) { + if (is_null($rez)) Err("Error: _transOK not modified"); + else Err("Error: CompleteTrans (1) should have failed"); + } else { + $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); + if ($name == "Carolx") Err("Error: CompleteTrans (2) should have failed"); + else echo "

-- Passed StartTrans test1 - rolling back

"; + } + + $db->StartTrans(); + $db->BeginTrans(); + $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); + $db->RollbackTrans(); + $rez = $db->CompleteTrans(); + if ($rez !== true) Err("Error: CompleteTrans (1) should have succeeded"); + else { + $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); + if (trim($name) != "Carolx") Err("Error: CompleteTrans (2) should have succeeded, returned name=$name"); + else echo "

-- Passed StartTrans test2 - commiting

"; + } + } + flush(); + $saved = $db->debug; + $db->debug=1; + $cnt = _adodb_getcount($db, 'select * from ADOXYZ where firstname in (select firstname from ADOXYZ)'); + echo "Count= $cnt"; + $db->debug=$saved; + + global $TESTERRS; + $debugerr = true; + + global $ADODB_LANG;$ADODB_LANG = 'fr'; + $db->debug = false; + $TESTERRS = 0; + $db->raiseErrorFn = 'adodb_test_err'; + global $ERRNO; // from adodb_test_err + $db->Execute('select * from nowhere'); + $metae = $db->MetaError($ERRNO); + if ($metae !== DB_ERROR_NOSUCHTABLE) print "

MetaError=".$metae." wrong, should be ".DB_ERROR_NOSUCHTABLE."

"; + else print "

MetaError ok (".DB_ERROR_NOSUCHTABLE."): ".$db->MetaErrorMsg($metae)."

"; + if ($TESTERRS != 1) print "raiseErrorFn select nowhere failed
"; + $rs = $db->Execute('select * from ADOXYZ'); + if ($debugerr) print " Move"; + $rs->Move(100); + $rs->_queryID = false; + if ($debugerr) print " MoveNext"; + $rs->MoveNext(); + if ($debugerr) print " $rs=false"; + $rs = false; + + flush(); + + print "

SetFetchMode() tests

"; + $db->SetFetchMode(ADODB_FETCH_ASSOC); + $rs = $db->SelectLimit('select firstname from ADOXYZ',1); + if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs = $db->SelectLimit('select firstname from ADOXYZ',1); + //var_dump($rs->fields); + if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $db->SetFetchMode(ADODB_FETCH_NUM); + $rs = $db->SelectLimit('select firstname from ADOXYZ',1); + if (!isset($rs->fields[0])) Err("BAD FETCH NUM"); + + flush(); + + print "

Test MetaTables again with SetFetchMode()

"; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $db->SetFetchMode(ADODB_FETCH_ASSOC); + print_r($db->MetaTables()); + print "

"; + + //////////////////////////////////////////////////////////////////// + + print "

Testing Bad Connection

"; + flush(); + + if (true || PHP_VERSION < 5) { + if ($db->dataProvider == 'odbtp') $db->databaseType = 'odbtp'; + $conn = NewADOConnection($db->databaseType); + $conn->raiseErrorFn = 'adodb_test_err'; + if (1) $conn->PConnect('abc','baduser','badpassword'); + if ($TESTERRS == 2) print "raiseErrorFn tests passed
"; + else print "raiseErrorFn tests failed ($TESTERRS)
"; + + flush(); + } + //////////////////////////////////////////////////////////////////// + + global $nocountrecs; + + if (isset($nocountrecs) && $ADODB_COUNTRECS) err("Error: \$ADODB_COUNTRECS is set"); + if (empty($nocountrecs) && $ADODB_COUNTRECS==false) err("Error: \$ADODB_COUNTRECS is not set"); + + flush(); +?> +

+
 
+

+Close(); + if ($rs2) $rs2->Close(); + if ($rs) $rs->Close(); + $db->Close(); + + if ($db->transCnt != 0) Err("Error in transCnt=$db->transCnt (should be 0)"); + + + printf("

Total queries=%d; total cached=%d

",$EXECS+$CACHED, $CACHED); + flush(); +} + +function adodb_test_err($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false) +{ +global $TESTERRS,$ERRNO; + + $ERRNO = $errno; + $TESTERRS += 1; + print "** $dbms ($fn): errno=$errno   errmsg=$errmsg ($p1,$p2)
"; +} + +//-------------------------------------------------------------------------------------- + + +@set_time_limit(240); // increase timeout + +include("../tohtml.inc.php"); +include("../adodb.inc.php"); +include("../rsfilter.inc.php"); + +/* White Space Check */ + +if (isset($_SERVER['argv'][1])) { + //print_r($_SERVER['argv']); + $_GET[$_SERVER['argv'][1]] = 1; +} + +if (@$_SERVER['COMPUTERNAME'] == 'TIGRESS') { + CheckWS('mysqlt'); + CheckWS('postgres'); + CheckWS('oci8po'); + + CheckWS('firebird'); + CheckWS('sybase'); + if (!ini_get('safe_mode')) CheckWS('informix'); + + CheckWS('ado_mssql'); + CheckWS('ado_access'); + CheckWS('mssql'); + + CheckWS('vfp'); + CheckWS('sqlanywhere'); + CheckWS('db2'); + CheckWS('access'); + CheckWS('odbc_mssql'); + CheckWS('firebird15'); + // + CheckWS('oracle'); + CheckWS('proxy'); + CheckWS('fbsql'); + print "White Space Check complete

"; +} +if (sizeof($_GET) == 0) $testmysql = true; + + +foreach($_GET as $k=>$v) { + //global $$k; + $$k = $v; +} + +?> + +ADODB Testing + +

ADODB Test

+ +This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO). +There is also support for Sybase, PostgreSQL.

+For the latest version of ADODB, visit
adodb.sourceforge.net.

+ +Test GetInsertSQL/GetUpdateSQL   + Sessions   + Paging   + Perf Monitor

+vers=",ADOConnection::Version(); + + + +?> +

ADODB Database Library (c) 2000-2014 John Lim. All rights reserved. Released under BSD and LGPL, PHP .

+ + diff --git a/ehcp/adodb5/tests/test2.php b/ehcp/adodb5/tests/test2.php new file mode 100644 index 0000000..eb3b025 --- /dev/null +++ b/ehcp/adodb5/tests/test2.php @@ -0,0 +1,25 @@ +debug=1; + $access = 'd:\inetpub\wwwroot\php\NWIND.MDB'; + $myDSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;' + . 'DATA SOURCE=' . $access . ';'; + + echo "

PHP ",PHP_VERSION,"

"; + + $db->Connect($myDSN) || die('fail'); + + print_r($db->ServerInfo()); + + try { + $rs = $db->Execute("select $db->sysTimeStamp,* from adoxyz where id>02xx"); + print_r($rs->fields); + } catch(exception $e) { + print_r($e); + echo "

Date m/d/Y =",$db->UserDate($rs->fields[4],'m/d/Y'); + } diff --git a/ehcp/adodb5/tests/test3.php b/ehcp/adodb5/tests/test3.php new file mode 100644 index 0000000..30b2666 --- /dev/null +++ b/ehcp/adodb5/tests/test3.php @@ -0,0 +1,44 @@ +Connect('','scott','natsoft'); +$db->debug=1; + +$cnt = $db->GetOne("select count(*) from adoxyz"); +$rs = $db->Execute("select * from adoxyz order by id"); + +$i = 0; +foreach($rs as $k => $v) { + $i += 1; + echo $k; adodb_pr($v); + flush(); +} + +if ($i != $cnt) die("actual cnt is $i, cnt should be $cnt\n"); + + + +$rs = $db->Execute("select bad from badder"); + +} catch (exception $e) { + adodb_pr($e); + $e = adodb_backtrace($e->trace); +} diff --git a/ehcp/adodb5/tests/test4.php b/ehcp/adodb5/tests/test4.php new file mode 100644 index 0000000..4a6791c --- /dev/null +++ b/ehcp/adodb5/tests/test4.php @@ -0,0 +1,144 @@ +PConnect("", "sa", "natsoft", "northwind"); // connect to MySQL, testdb + +$conn = ADONewConnection("mysql"); // create a connection +$conn->PConnect("localhost", "root", "", "test"); // connect to MySQL, testdb + + +#$conn = ADONewConnection('oci8po'); +#$conn->Connect('','scott','natsoft'); + +if (PHP_VERSION >= 5) { + $connstr = "mysql:dbname=northwind"; + $u = 'root';$p=''; + $conn = ADONewConnection('pdo'); + $conn->Connect($connstr, $u, $p); +} +//$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + +$conn->debug=1; +$conn->Execute("delete from adoxyz where lastname like 'Smi%'"); + +$rs = $conn->Execute($sql); // Execute the query and get the empty recordset +$record = array(); // Initialize an array to hold the record data to insert + +if (strpos($conn->databaseType,'mysql')===false) $record['id'] = 751; +$record["firstname"] = 'Jann'; +$record["lastname"] = "Smitts"; +$record["created"] = time(); + +$insertSQL = $conn->GetInsertSQL($rs, $record); +$conn->Execute($insertSQL); // Insert the record into the database + +if (strpos($conn->databaseType,'mysql')===false) $record['id'] = 752; +// Set the values for the fields in the record +$record["firstname"] = 'anull'; +$record["lastname"] = "Smith\$@//"; +$record["created"] = time(); + +if (isset($_GET['f'])) $ADODB_FORCE_TYPE = $_GET['f']; + +//$record["id"] = -1; + +// Pass the empty recordset and the array containing the data to insert +// into the GetInsertSQL function. The function will process the data and return +// a fully formatted insert sql statement. +$insertSQL = $conn->GetInsertSQL($rs, $record); +$conn->Execute($insertSQL); // Insert the record into the database + + + +$insertSQL2 = $conn->GetInsertSQL($table='ADOXYZ', $record); +if ($insertSQL != $insertSQL2) echo "

Walt's new stuff failed: $insertSQL2

"; +//========================== +// This code tests an update + +$sql = " +SELECT * +FROM ADOXYZ WHERE lastname=".$conn->Param('var'). " ORDER BY 1"; +// Select a record to update + +$varr = array('var'=>$record['lastname'].''); +$rs = $conn->Execute($sql,$varr); // Execute the query and get the existing record to update +if (!$rs || $rs->EOF) print "

No record found!

"; + +$record = array(); // Initialize an array to hold the record data to update + + +// Set the values for the fields in the record +$record["firstName"] = "Caroline".rand(); +//$record["lasTname"] = ""; // Update Caroline's lastname from Miranda to Smith +$record["creAted"] = '2002-12-'.(rand()%30+1); +$record['num'] = ''; +// Pass the single record recordset and the array containing the data to update +// into the GetUpdateSQL function. The function will process the data and return +// a fully formatted update sql statement. +// If the data has not changed, no recordset is returned + +$updateSQL = $conn->GetUpdateSQL($rs, $record); +$conn->Execute($updateSQL,$varr); // Update the record in the database +if ($conn->Affected_Rows() != 1)print "

Error1 : Rows Affected=".$conn->Affected_Rows().", should be 1

"; + +$record["firstName"] = "Caroline".rand(); +$record["lasTname"] = "Smithy Jones"; // Update Caroline's lastname from Miranda to Smith +$record["creAted"] = '2002-12-'.(rand()%30+1); +$record['num'] = 331; +$updateSQL = $conn->GetUpdateSQL($rs, $record); +$conn->Execute($updateSQL,$varr); // Update the record in the database +if ($conn->Affected_Rows() != 1)print "

Error 2: Rows Affected=".$conn->Affected_Rows().", should be 1

"; + +$rs = $conn->Execute("select * from ADOXYZ where lastname like 'Sm%'"); +//adodb_pr($rs); +rs2html($rs); + +$record["firstName"] = "Carol-new-".rand(); +$record["lasTname"] = "Smithy"; // Update Caroline's lastname from Miranda to Smith +$record["creAted"] = '2002-12-'.(rand()%30+1); +$record['num'] = 331; + +$conn->AutoExecute('ADOXYZ',$record,'UPDATE', "lastname like 'Sm%'"); +$rs = $conn->Execute("select * from ADOXYZ where lastname like 'Sm%'"); +//adodb_pr($rs); +rs2html($rs); +} + + +testsql(); diff --git a/ehcp/adodb5/tests/test5.php b/ehcp/adodb5/tests/test5.php new file mode 100644 index 0000000..fdc0e28 --- /dev/null +++ b/ehcp/adodb5/tests/test5.php @@ -0,0 +1,48 @@ +debug=1; + $conn->PConnect("localhost","root","","xphplens"); + print $conn->databaseType.':'.$conn->GenID().'
'; +} + +if (0) { + $conn = ADONewConnection("oci8"); // create a connection + $conn->debug=1; + $conn->PConnect("falcon", "scott", "tiger", "juris8.ecosystem.natsoft.com.my"); // connect to MySQL, testdb + print $conn->databaseType.':'.$conn->GenID(); +} + +if (0) { + $conn = ADONewConnection("ibase"); // create a connection + $conn->debug=1; + $conn->Connect("localhost:c:\\Interbase\\Examples\\Database\\employee.gdb", "sysdba", "masterkey", ""); // connect to MySQL, testdb + print $conn->databaseType.':'.$conn->GenID().'
'; +} + +if (0) { + $conn = ADONewConnection('postgres'); + $conn->debug=1; + @$conn->PConnect("susetikus","tester","test","test"); + print $conn->databaseType.':'.$conn->GenID().'
'; +} diff --git a/ehcp/adodb5/tests/test_rs_array.php b/ehcp/adodb5/tests/test_rs_array.php new file mode 100644 index 0000000..547b20a --- /dev/null +++ b/ehcp/adodb5/tests/test_rs_array.php @@ -0,0 +1,46 @@ +InitArray($array,$typearr); + +while (!$rs->EOF) { + print_r($rs->fields);echo "
"; + $rs->MoveNext(); +} + +echo "
1 Seek
"; +$rs->Move(1); +while (!$rs->EOF) { + print_r($rs->fields);echo "
"; + $rs->MoveNext(); +} + +echo "
2 Seek
"; +$rs->Move(2); +while (!$rs->EOF) { + print_r($rs->fields);echo "
"; + $rs->MoveNext(); +} + +echo "
3 Seek
"; +$rs->Move(3); +while (!$rs->EOF) { + print_r($rs->fields);echo "
"; + $rs->MoveNext(); +} + + + +die(); diff --git a/ehcp/adodb5/tests/testcache.php b/ehcp/adodb5/tests/testcache.php new file mode 100644 index 0000000..e984a48 --- /dev/null +++ b/ehcp/adodb5/tests/testcache.php @@ -0,0 +1,30 @@ + + +PConnect('nwind'); +} else { + $db = ADONewConnection('mysql'); + $db->PConnect('mangrove','root','','xphplens'); +} +if (isset($cache)) $rs = $db->CacheExecute(120,'select * from products'); +else $rs = $db->Execute('select * from products'); + +$arr = $rs->GetArray(); +print sizeof($arr); diff --git a/ehcp/adodb5/tests/testdatabases.inc.php b/ehcp/adodb5/tests/testdatabases.inc.php new file mode 100644 index 0000000..e71fbe8 --- /dev/null +++ b/ehcp/adodb5/tests/testdatabases.inc.php @@ -0,0 +1,478 @@ + + +
+
+> Access
+> Interbase
+> MSSQL
+> MySQL
+> MySQL ODBC
+> MySQLi +
+
> SQLite
+> MySQL Proxy
+> Oracle (oci8)
+> PostgreSQL
+> PostgreSQL 9
+> PostgreSQL ODBC
+
+> PgSQL PDO
+> MySQL PDO
+> SQLite PDO
+> Access PDO
+> MSSQL PDO
+ +> OCI PDO
+ +
> DB2
+> VFP+ODBTP
+> ADO (for mssql and access)
+> $ADODB_COUNTRECS=false
+> No SQL Logging
+> ADOdb time test +
+ + + +FETCH MODE IS NOT ADODB_FETCH_DEFAULT"; + +if (isset($nocountrecs)) $ADODB_COUNTRECS = false; + +// cannot test databases below, but we include them anyway to check +// if they parse ok... + +if (sizeof($_GET) || !isset($_SERVER['HTTP_HOST'])) { + echo "
"; + ADOLoadCode2("sybase"); + ADOLoadCode2("postgres"); + ADOLoadCode2("postgres7"); + ADOLoadCode2("firebird"); + ADOLoadCode2("borland_ibase"); + ADOLoadCode2("informix"); + ADOLoadCode2('mysqli'); + if (defined('ODBC_BINMODE_RETURN')) { + ADOLoadCode2("sqlanywhere"); + ADOLoadCode2("access"); + } + ADOLoadCode2("mysql"); + ADOLoadCode2("oci8"); +} + +function ADOLoadCode2($d) +{ + ADOLoadCode($d); + $c = ADONewConnection($d); + echo "Loaded $d ",($c ? 'ok' : 'extension not installed'),"
"; +} + +flush(); + +// dregad 2014-04-15 added serial field to avoid error with lastval() +$pg_test_table = "create table ADOXYZ (id integer, firstname char(24), lastname varchar,created date, ser serial)"; +$pg_hostname = 'localhost'; +$pg_user = 'tester'; +$pg_password = 'test'; +$pg_database = 'northwind'; +$pg_errmsg = "ERROR: PostgreSQL requires a database called '$pg_database' " + . "on server '$pg_hostname', user '$pg_user', password '$pg_password'.
"; + +if (!empty($testpostgres)) { + //ADOLoadCode("postgres"); + + $db = ADONewConnection('postgres'); + print "

Connecting $db->databaseType...

"; + if ($db->Connect($pg_hostname, $pg_user, $pg_password, $pg_database)) { + testdb($db, $pg_test_table); + } else { + print $pg_errmsg . $db->ErrorMsg(); + } +} + +if (!empty($testpostgres9)) { + //ADOLoadCode("postgres"); + + $db = ADONewConnection('postgres9'); + print "

Connecting $db->databaseType...

"; + if ($db->Connect($pg_hostname, $pg_user, $pg_password, $pg_database)) { + testdb($db, $pg_test_table); + } else { + print $pg_errmsg . $db->ErrorMsg(); + } +} + +if (!empty($testpgodbc)) { + + $db = ADONewConnection('odbc'); + $db->hasTransactions = false; + print "

Connecting $db->databaseType...

"; + + if ($db->PConnect('Postgresql')) { + $db->hasTransactions = true; + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date) type=innodb"); + } else print "ERROR: PostgreSQL requires a database called test on server, user tester, password test.
".$db->ErrorMsg(); +} + +if (!empty($testibase)) { + //$_GET['nolog'] = true; + $db = ADONewConnection('firebird'); + print "

Connecting $db->databaseType...

"; + if ($db->PConnect("localhost:d:\\firebird\\151\\examples\\EMPLOYEE.fdb", "sysdba", "masterkey", "")) + testdb($db,"create table ADOXYZ (id integer, firstname char(24), lastname char(24),price numeric(12,2),created date)"); + else print "ERROR: Interbase test requires a database called employee.gdb".'
'.$db->ErrorMsg(); + +} + + +if (!empty($testsqlite)) { + $path =urlencode('d:\inetpub\adodb\sqlite.db'); + $dsn = "sqlite://$path/"; + $db = ADONewConnection($dsn); + //echo $dsn; + + //$db = ADONewConnection('sqlite'); + + + if ($db && $db->PConnect("d:\\inetpub\\adodb\\sqlite.db", "", "", "")) { + print "

Connecting $db->databaseType...

"; + testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)"); + } else + print "ERROR: SQLite"; + +} + +if (!empty($testpdopgsql)) { + $connstr = "pgsql:dbname=test"; + $u = 'tester';$p='test'; + $db = ADONewConnection('pdo'); + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +if (!empty($testpdomysql)) { + $connstr = "mysql:dbname=northwind"; + $u = 'root';$p=''; + $db = ADONewConnection('pdo'); + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +if (!empty($testpdomssql)) { + $connstr = "mssql:dbname=northwind"; + $u = 'sa';$p='natsoft'; + $db = ADONewConnection('pdo'); + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +if (!empty($testpdosqlite)) { + $connstr = "sqlite:d:/inetpub/adodb/sqlite-pdo.db3"; + $u = '';$p=''; + $db = ADONewConnection('pdo'); + $db->hasTransactions = false; + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +if (!empty($testpdoaccess)) { + $connstr = 'odbc:nwind'; + $u = '';$p=''; + $db = ADONewConnection('pdo'); + $db->hasTransactions = false; + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +if (!empty($testpdoora)) { + $connstr = 'oci:'; + $u = 'scott';$p='natsoft'; + $db = ADONewConnection('pdo'); + #$db->hasTransactions = false; + print "

Connecting $db->databaseType...

"; + $db->Connect($connstr,$u,$p) || die("CONNECT FAILED"); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); +} + +// REQUIRES ODBC DSN CALLED nwind +if (!empty($testaccess)) { + $db = ADONewConnection('access'); + print "

Connecting $db->databaseType...

"; + $access = 'd:\inetpub\wwwroot\php\NWIND.MDB'; + $dsn = "nwind"; + $dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=$access;Uid=Admin;Pwd=;"; + + //$dsn = 'Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=' . $access . ';'; + if ($db->PConnect($dsn, "", "", "")) + testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)"); + else print "ERROR: Access test requires a Windows ODBC DSN=nwind, Access driver"; + +} + +if (!empty($testaccess) && !empty($testado)) { // ADO ACCESS + + $db = ADONewConnection("ado_access"); + print "

Connecting $db->databaseType...

"; + + $access = 'd:\inetpub\wwwroot\php\NWIND.MDB'; + $myDSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;' + . 'DATA SOURCE=' . $access . ';'; + //. 'USER ID=;PASSWORD=;'; + $_GET['nolog'] = 1; + if ($db->PConnect($myDSN, "", "", "")) { + print "ADO version=".$db->_connectionID->version."
"; + testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)"); + } else print "ERROR: Access test requires a Access database $access".'
'.$db->ErrorMsg(); + +} + +if (!empty($testvfp)) { // ODBC + $db = ADONewConnection('vfp'); + print "

Connecting $db->databaseType...

";flush(); + + if ( $db->PConnect("vfp-adoxyz")) { + testdb($db,"create table d:\\inetpub\\adodb\\ADOXYZ (id int, firstname char(24), lastname char(24),created date)"); + } else print "ERROR: Visual FoxPro test requires a Windows ODBC DSN=vfp-adoxyz, VFP driver"; + + echo "
"; + $db = ADONewConnection('odbtp'); + + if ( $db->PConnect('localhost','DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBF;SOURCEDB=d:\inetpub\adodb;EXCLUSIVE=NO;')) { + print "

Connecting $db->databaseType...

";flush(); + testdb($db,"create table d:\\inetpub\\adodb\\ADOXYZ (id int, firstname char(24), lastname char(24),created date)"); + } else print "ERROR: Visual FoxPro odbtp requires a Windows ODBC DSN=vfp-adoxyz, VFP driver"; + +} + + +// REQUIRES MySQL server at localhost with database 'test' +if (!empty($testmysql)) { // MYSQL + + + if (PHP_VERSION >= 5 || $_SERVER['HTTP_HOST'] == 'localhost') $server = 'localhost'; + else $server = "mangrove"; + $user = 'root'; $password = ''; $database = 'northwind'; + $db = ADONewConnection("mysqlt://$user:$password@$server/$database?persist"); + print "

Connecting $db->databaseType...

"; + + if (true || $db->PConnect($server, "root", "", "northwind")) { + //$db->Execute("DROP TABLE ADOXYZ") || die('fail drop'); + //$db->debug=1;$db->Execute('drop table ADOXYZ'); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date) Type=InnoDB"); + } else print "ERROR: MySQL test requires a MySQL server on localhost, userid='admin', password='', database='test'".'
'.$db->ErrorMsg(); +} + +// REQUIRES MySQL server at localhost with database 'test' +if (!empty($testmysqli)) { // MYSQL + + $db = ADONewConnection('mysqli'); + print "

Connecting $db->databaseType...

"; + if (PHP_VERSION >= 5 || $_SERVER['HTTP_HOST'] == 'localhost') $server = 'localhost'; + else $server = "mangrove"; + if ($db->PConnect($server, "root", "", "northwind")) { + //$db->debug=1;$db->Execute('drop table ADOXYZ'); + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)"); + } else print "ERROR: MySQL test requires a MySQL server on localhost, userid='admin', password='', database='test'".'
'.$db->ErrorMsg(); +} + + +// REQUIRES MySQL server at localhost with database 'test' +if (!empty($testmysqlodbc)) { // MYSQL + + $db = ADONewConnection('odbc'); + $db->hasTransactions = false; + print "

Connecting $db->databaseType...

"; + if ($_SERVER['HTTP_HOST'] == 'localhost') $server = 'localhost'; + else $server = "mangrove"; + if ($db->PConnect('mysql', "root", "")) + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date) type=innodb"); + else print "ERROR: MySQL test requires a MySQL server on localhost, userid='admin', password='', database='test'".'
'.$db->ErrorMsg(); +} + +if (!empty($testproxy)){ + $db = ADONewConnection('proxy'); + print "

Connecting $db->databaseType...

"; + if ($_SERVER['HTTP_HOST'] == 'localhost') $server = 'localhost'; + + if ($db->PConnect('http://localhost/php/phplens/adodb/server.php')) + testdb($db, + "create table ADOXYZ (id int, firstname char(24), lastname char(24), created date) type=innodb"); + else print "ERROR: MySQL test requires a MySQL server on localhost, userid='admin', password='', database='test'".'
'.$db->ErrorMsg(); + +} + +ADOLoadCode('oci805'); +ADOLoadCode("oci8po"); + +if (!empty($testoracle)) { + $dsn = "oci8";//://scott:natsoft@kk2?persist"; + $db = ADONewConnection($dsn );//'oci8'); + + //$db->debug=1; + print "

Connecting $db->databaseType...

"; + if ($db->Connect('mobydick', "scott", "natsoft",'SID=mobydick')) + testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)"); + else + print "ERROR: Oracle test requires an Oracle server setup with scott/natsoft".'
'.$db->ErrorMsg(); + +} +ADOLoadCode("oracle"); // no longer supported +if (false && !empty($testoracle)) { + + $db = ADONewConnection(); + print "

Connecting $db->databaseType...

"; + if ($db->PConnect("", "scott", "tiger", "natsoft.domain")) + testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)"); + else print "ERROR: Oracle test requires an Oracle server setup with scott/tiger".'
'.$db->ErrorMsg(); + +} + +ADOLoadCode("odbc_db2"); // no longer supported +if (!empty($testdb2)) { + if (PHP_VERSION>=5.1) { + $db = ADONewConnection("db2"); + print "

Connecting $db->databaseType...

"; + + #$db->curMode = SQL_CUR_USE_ODBC; + #$dsn = "driver={IBM db2 odbc DRIVER};Database=test;hostname=localhost;port=50000;protocol=TCPIP; uid=natsoft; pwd=guest"; + if ($db->Connect('localhost','natsoft','guest','test')) { + testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)"); + } else print "ERROR: DB2 test requires an server setup with odbc data source db2_sample".'
'.$db->ErrorMsg(); + } else { + $db = ADONewConnection("odbc_db2"); + print "

Connecting $db->databaseType...

"; + + $dsn = "db2test"; + #$db->curMode = SQL_CUR_USE_ODBC; + #$dsn = "driver={IBM db2 odbc DRIVER};Database=test;hostname=localhost;port=50000;protocol=TCPIP; uid=natsoft; pwd=guest"; + if ($db->Connect($dsn)) { + testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)"); + } else print "ERROR: DB2 test requires an server setup with odbc data source db2_sample".'
'.$db->ErrorMsg(); + } +echo "
"; +flush(); + $dsn = "driver={IBM db2 odbc DRIVER};Database=sample;hostname=localhost;port=50000;protocol=TCPIP; uid=root; pwd=natsoft"; + + $db = ADONewConnection('odbtp'); + if ($db->Connect('127.0.0.1',$dsn)) { + + $db->debug=1; + $arr = $db->GetArray( "||SQLProcedures" ); adodb_pr($arr); + $arr = $db->GetArray( "||SQLProcedureColumns|||GET_ROUTINE_SAR" );adodb_pr($arr); + + testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)"); + } else echo ("ERROR Connection"); + echo $db->ErrorMsg(); +} + + +$server = 'localhost'; + + + +ADOLoadCode("mssqlpo"); +if (false && !empty($testmssql)) { // MS SQL Server -- the extension is buggy -- probably better to use ODBC + $db = ADONewConnection("mssqlpo"); + //$db->debug=1; + print "

Connecting $db->databaseType...

"; + + $ok = $db->Connect('','sa','natsoft','northwind'); + echo $db->ErrorMsg(); + if ($ok /*or $db->PConnect("mangrove", "sa", "natsoft", "ai")*/) { + AutoDetect_MSSQL_Date_Order($db); + // $db->Execute('drop table adoxyz'); + testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)"); + } else print "ERROR: MSSQL test 2 requires a MS SQL 7 on a server='$server', userid='adodb', password='natsoft', database='ai'".'
'.$db->ErrorMsg(); + +} + + +ADOLoadCode('odbc_mssql'); +if (!empty($testmssql)) { // MS SQL Server via ODBC + $db = ADONewConnection(); + + print "

Connecting $db->databaseType...

"; + + $dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=$server;Database=northwind;"; + $dsn = 'condor'; + if ($db->PConnect($dsn, "sa", "natsoft", "")) { + testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)"); + } + else print "ERROR: MSSQL test 1 requires a MS SQL 7 server setup with DSN setup"; + +} + +ADOLoadCode("ado_mssql"); +if (!empty($testmssql) && !empty($testado) ) { // ADO ACCESS MSSQL -- thru ODBC -- DSN-less + + $db = ADONewConnection("ado_mssql"); + //$db->debug=1; + print "

Connecting DSN-less $db->databaseType...

"; + + $myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};" + . "SERVER=$server;DATABASE=NorthWind;UID=adodb;PWD=natsoft;Trusted_Connection=No"; + + + if ($db->PConnect($myDSN, "", "", "")) + testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)"); + else print "ERROR: MSSQL test 2 requires MS SQL 7"; + +} + +if (!empty($testmssql) && !empty($testado)) { // ADO ACCESS MSSQL with OLEDB provider + + $db = ADONewConnection("ado_mssql"); + print "

Connecting DSN-less OLEDB Provider $db->databaseType...

"; + //$db->debug=1; + $myDSN="SERVER=localhost;DATABASE=northwind;Trusted_Connection=yes"; + if ($db->PConnect($myDSN, "adodb", "natsoft", 'SQLOLEDB')) { + testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)"); + } else print "ERROR: MSSQL test 2 requires a MS SQL 7 on a server='mangrove', userid='sa', password='', database='ai'"; + +} + + +if (extension_loaded('odbtp') && !empty($testmssql)) { // MS SQL Server via ODBC + $db = ADONewConnection('odbtp'); + + $dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=$server;Database=northwind;uid=adodb;pwd=natsoft"; + + if ($db->PConnect('localhost',$dsn, "", "")) { + print "

Connecting $db->databaseType...

"; + testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)"); + } + else print "ERROR: MSSQL test 1 requires a MS SQL 7 server setup with DSN setup"; + +} + + +print "

Tests Completed

"; diff --git a/ehcp/adodb5/tests/testgenid.php b/ehcp/adodb5/tests/testgenid.php new file mode 100644 index 0000000..3310734 --- /dev/null +++ b/ehcp/adodb5/tests/testgenid.php @@ -0,0 +1,35 @@ +Execute("drop table $table"); + //$db->debug=true; + + $ctr = 5000; + $lastnum = 0; + + while (--$ctr >= 0) { + $num = $db->GenID($table); + if ($num === false) { + print "GenID returned false"; + break; + } + if ($lastnum + 1 == $num) print " $num "; + else { + print " $num "; + flush(); + } + $lastnum = $num; + } +} diff --git a/ehcp/adodb5/tests/testmssql.php b/ehcp/adodb5/tests/testmssql.php new file mode 100644 index 0000000..7bb18f6 --- /dev/null +++ b/ehcp/adodb5/tests/testmssql.php @@ -0,0 +1,77 @@ +Connect('127.0.0.1','adodb','natsoft','northwind') or die('Fail'); + +$conn->debug =1; +$query = 'select * from products'; +$conn->SetFetchMode(ADODB_FETCH_ASSOC); +$rs = $conn->Execute($query); +echo "
";
+while( !$rs->EOF ) {
+	$output[] = $rs->fields;
+	var_dump($rs->fields);
+	$rs->MoveNext();
+	print "

"; +} +die(); + + +$p = $conn->Prepare('insert into products (productname,unitprice,dcreated) values (?,?,?)'); +echo "

";
+print_r($p);
+
+$conn->debug=1;
+$conn->Execute($p,array('John'.rand(),33.3,$conn->DBDate(time())));
+
+$p = $conn->Prepare('select * from products where productname like ?');
+$arr = $conn->getarray($p,array('V%'));
+print_r($arr);
+die();
+
+//$conn = ADONewConnection("mssql");
+//$conn->Connect('mangrove','sa','natsoft','ai');
+
+//$conn->Connect('mangrove','sa','natsoft','ai');
+$conn->debug=1;
+$conn->Execute('delete from blobtest');
+
+$conn->Execute('insert into blobtest (id) values(1)');
+$conn->UpdateBlobFile('blobtest','b1','../cute_icons_for_site/adodb.gif','id=1');
+$rs = $conn->Execute('select b1 from blobtest where id=1');
+
+$output = "c:\\temp\\test_out-".date('H-i-s').".gif";
+print "Saving file $output, size=".strlen($rs->fields[0])."

"; +$fd = fopen($output, "wb"); +fwrite($fd, $rs->fields[0]); +fclose($fd); + +print " View Image"; +//$rs = $conn->Execute('SELECT id,SUBSTRING(b1, 1, 10) FROM blobtest'); +//rs2html($rs); diff --git a/ehcp/adodb5/tests/testoci8.php b/ehcp/adodb5/tests/testoci8.php new file mode 100644 index 0000000..995ff5e --- /dev/null +++ b/ehcp/adodb5/tests/testoci8.php @@ -0,0 +1,84 @@ + + +PConnect('','scott','natsoft'); + if (!empty($testblob)) { + $varHoldingBlob = 'ABC DEF GEF John TEST'; + $num = time()%10240; + // create table atable (id integer, ablob blob); + $db->Execute('insert into ATABLE (id,ablob) values('.$num.',empty_blob())'); + $db->UpdateBlob('ATABLE', 'ablob', $varHoldingBlob, 'id='.$num, 'BLOB'); + + $rs = $db->Execute('select * from atable'); + + if (!$rs) die("Empty RS"); + if ($rs->EOF) die("EOF RS"); + rs2html($rs); + } + $stmt = $db->Prepare('select * from adoxyz where id=?'); + for ($i = 1; $i <= 10; $i++) { + $rs = $db->Execute( + $stmt, + array($i)); + + if (!$rs) die("Empty RS"); + if ($rs->EOF) die("EOF RS"); + rs2html($rs); + } +} +if (1) { + $db = ADONewConnection('oci8'); + $db->PConnect('','scott','natsoft'); + $db->debug = true; + $db->Execute("delete from emp where ename='John'"); + print $db->Affected_Rows().'
'; + $stmt = $db->Prepare('insert into emp (empno, ename) values (:empno, :ename)'); + $rs = $db->Execute($stmt,array('empno'=>4321,'ename'=>'John')); + // prepare not quite ready for prime time + //$rs = $db->Execute($stmt,array('empno'=>3775,'ename'=>'John')); + if (!$rs) die("Empty RS"); + + $db->setfetchmode(ADODB_FETCH_NUM); + + $vv = 'A%'; + $stmt = $db->PrepareSP("BEGIN adodb.open_tab2(:rs,:tt); END;",true); + $db->OutParameter($stmt, $cur, 'rs', -1, OCI_B_CURSOR); + $db->OutParameter($stmt, $vv, 'tt'); + $rs = $db->Execute($stmt); + while (!$rs->EOF) { + adodb_pr($rs->fields); + $rs->MoveNext(); + } + echo " val = $vv"; + +} + +if (0) { + $db = ADONewConnection('odbc_oracle'); + if (!$db->PConnect('local_oracle','scott','tiger')) die('fail connect'); + $db->debug = true; + $rs = $db->Execute( + 'select * from adoxyz where firstname=? and trim(lastname)=?', + array('first'=>'Caroline','last'=>'Miranda')); + if (!$rs) die("Empty RS"); + if ($rs->EOF) die("EOF RS"); + rs2html($rs); +} diff --git a/ehcp/adodb5/tests/testoci8cursor.php b/ehcp/adodb5/tests/testoci8cursor.php new file mode 100644 index 0000000..c8bca59 --- /dev/null +++ b/ehcp/adodb5/tests/testoci8cursor.php @@ -0,0 +1,110 @@ +PConnect('','scott','natsoft'); + $db->debug = 99; + + +/* +*/ + + define('MYNUM',5); + + + $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS,'A%'); END;"); + + if ($rs && !$rs->EOF) { + print "Test 1 RowCount: ".$rs->RecordCount()."

"; + } else { + print "Error in using Cursor Variables 1

"; + } + + print "

Testing Stored Procedures for oci8

"; + + $stid = $db->PrepareSP('BEGIN adodb.myproc('.MYNUM.', :myov); END;'); + $db->OutParameter($stid, $myov, 'myov'); + $db->Execute($stid); + if ($myov != MYNUM) print "

Error with myproc

"; + + + $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;",true); + $a1 = 'Malaysia'; + //$a2 = ''; # a2 doesn't even need to be defined! + $db->InParameter($stmt,$a1,'a1'); + $db->OutParameter($stmt,$a2,'a2'); + $rs = $db->Execute($stmt); + if ($rs) { + if ($a2 !== 'Cinta Hati Malaysia') print "Stored Procedure Error: a2 = $a2

"; + else echo "OK: a2=$a2

"; + } else { + print "Error in using Stored Procedure IN/Out Variables

"; + } + + + $tname = 'A%'; + + $stmt = $db->PrepareSP('select * from tab where tname like :tablename'); + $db->Parameter($stmt,$tname,'tablename'); + $rs = $db->Execute($stmt); + rs2html($rs); diff --git a/ehcp/adodb5/tests/testpaging.php b/ehcp/adodb5/tests/testpaging.php new file mode 100644 index 0000000..c7474ee --- /dev/null +++ b/ehcp/adodb5/tests/testpaging.php @@ -0,0 +1,87 @@ +PConnect('localhost','tester','test','test'); +} + +if ($driver == 'access') { + $db = NewADOConnection('access'); + $db->PConnect("nwind", "", "", ""); +} + +if ($driver == 'ibase') { + $db = NewADOConnection('ibase'); + $db->PConnect("localhost:e:\\firebird\\examples\\employee.gdb", "sysdba", "masterkey", ""); + $sql = 'select distinct firstname, lastname from adoxyz order by firstname'; + +} +if ($driver == 'mssql') { + $db = NewADOConnection('mssql'); + $db->Connect('JAGUAR\vsdotnet','adodb','natsoft','northwind'); +} +if ($driver == 'oci8') { + $db = NewADOConnection('oci8'); + $db->Connect('','scott','natsoft'); + +$sql = "select * from (select ID, firstname as \"First Name\", lastname as \"Last Name\" from adoxyz + order by 1)"; +} + +if ($driver == 'access') { + $db = NewADOConnection('access'); + $db->Connect('nwind'); +} + +if (empty($driver) or $driver == 'mysql') { + $db = NewADOConnection('mysql'); + $db->Connect('localhost','root','','test'); +} + +//$db->pageExecuteCountRows = false; + +$db->debug = true; + +if (0) { +$rs = $db->Execute($sql); +include_once('../toexport.inc.php'); +print "

";
+print rs2csv($rs); # return a string
+
+print '
'; +$rs->MoveFirst(); # note, some databases do not support MoveFirst +print rs2tab($rs); # return a string + +print '
'; +$rs->MoveFirst(); +rs2tabout($rs); # send to stdout directly +print "
"; +} + +$pager = new ADODB_Pager($db,$sql); +$pager->showPageLinks = true; +$pager->linksPerPage = 10; +$pager->cache = 60; +$pager->Render($rows=7); diff --git a/ehcp/adodb5/tests/testpear.php b/ehcp/adodb5/tests/testpear.php new file mode 100644 index 0000000..f921ac9 --- /dev/null +++ b/ehcp/adodb5/tests/testpear.php @@ -0,0 +1,35 @@ +setFetchMode(ADODB_FETCH_ASSOC); +$rs = $db->Query('select firstname,lastname from adoxyz'); +$cnt = 0; +while ($arr = $rs->FetchRow()) { + print_r($arr); + print "
"; + $cnt += 1; +} + +if ($cnt != 50) print "Error in \$cnt = $cnt"; diff --git a/ehcp/adodb5/tests/testsessions.php b/ehcp/adodb5/tests/testsessions.php new file mode 100644 index 0000000..8879cdb --- /dev/null +++ b/ehcp/adodb5/tests/testsessions.php @@ -0,0 +1,100 @@ +Notify Expiring=$ref, sessionkey=$key

"; +} + +//------------------------------------------------------------------- + +error_reporting(E_ALL); + + +ob_start(); +include('../session/adodb-cryptsession2.php'); + + +$options['debug'] = 1; +$db = 'postgres'; + +#### CONNECTION +switch($db) { +case 'oci8': + $options['table'] = 'adodb_sessions2'; + ADOdb_Session::config('oci8', 'mobydick', 'jdev', 'natsoft', 'mobydick',$options); + break; + +case 'postgres': + $options['table'] = 'sessions2'; + ADOdb_Session::config('postgres', 'localhost', 'postgres', 'natsoft', 'northwind',$options); + break; + +case 'mysql': +default: + $options['table'] = 'sessions2'; + ADOdb_Session::config('mysql', 'localhost', 'root', '', 'xphplens_2',$options); + break; + + +} + + + +#### SETUP NOTIFICATION + $USER = 'JLIM'.rand(); + $ADODB_SESSION_EXPIRE_NOTIFY = array('USER','NotifyExpire'); + + adodb_session_create_table(); + session_start(); + + adodb_session_regenerate_id(); + +### SETUP SESSION VARIABLES + if (empty($_SESSION['MONKEY'])) $_SESSION['MONKEY'] = array(1,'abc',44.41); + else $_SESSION['MONKEY'][0] += 1; + if (!isset($_GET['nochange'])) @$_SESSION['AVAR'] += 1; + + +### START DISPLAY + print "

PHP ".PHP_VERSION."

"; + print "

\$_SESSION['AVAR']={$_SESSION['AVAR']}

"; + + print "
Cookies: "; + print_r($_COOKIE); + + var_dump($_SESSION['MONKEY']); + +### RANDOMLY PERFORM Garbage Collection +### In real-production environment, this is done for you +### by php's session extension, which calls adodb_sess_gc() +### automatically for you. See php.ini's +### session.cookie_lifetime and session.gc_probability + + if (rand() % 5 == 0) { + + print "

Garbage Collection

"; + adodb_sess_gc(10); + + if (rand() % 2 == 0) { + print "

Random own session destroy

"; + session_destroy(); + } + } else { + $DB = ADODB_Session::_conn(); + $sessk = $DB->qstr('%AZ'.rand().time()); + $olddate = $DB->DBTimeStamp(time()-30*24*3600); + $rr = $DB->qstr(rand()); + $DB->Execute("insert into {$options['table']} (sesskey,expiry,expireref,sessdata,created,modified) values ($sessk,$olddate, $rr,'',$olddate,$olddate)"); + } diff --git a/ehcp/adodb5/tests/time.php b/ehcp/adodb5/tests/time.php new file mode 100644 index 0000000..8261e1e --- /dev/null +++ b/ehcp/adodb5/tests/time.php @@ -0,0 +1,16 @@ + +" ); +echo( "Converted: $convertedDate" ); //why is string returned as one day (3 not 4) less for this example?? diff --git a/ehcp/adodb5/tests/tmssql.php b/ehcp/adodb5/tests/tmssql.php new file mode 100644 index 0000000..0f81311 --- /dev/null +++ b/ehcp/adodb5/tests/tmssql.php @@ -0,0 +1,79 @@ +mssql"; + $db = mssql_connect('JAGUAR\vsdotnet','adodb','natsoft') or die('No Connection'); + mssql_select_db('northwind',$db); + + $rs = mssql_query('select getdate() as date',$db); + $o = mssql_fetch_row($rs); + print_r($o); + mssql_free_result($rs); + + print "

Delete

"; flush(); + $rs2 = mssql_query('delete from adoxyz',$db); + $p = mssql_num_rows($rs2); + mssql_free_result($rs2); + +} + +function tpear() +{ +include_once('DB.php'); + + print "

PEAR

"; + $username = 'adodb'; + $password = 'natsoft'; + $hostname = 'JAGUAR\vsdotnet'; + $databasename = 'northwind'; + + $dsn = "mssql://$username:$password@$hostname/$databasename"; + $conn = DB::connect($dsn); + print "date=".$conn->GetOne('select getdate()')."
"; + @$conn->query('create table tester (id integer)'); + print "

Delete

"; flush(); + $rs = $conn->query('delete from tester'); + print "date=".$conn->GetOne('select getdate()')."
"; +} + +function tadodb() +{ +include_once('../adodb.inc.php'); + + print "

ADOdb

"; + $conn = NewADOConnection('mssql'); + $conn->Connect('JAGUAR\vsdotnet','adodb','natsoft','northwind'); +// $conn->debug=1; + print "date=".$conn->GetOne('select getdate()')."
"; + $conn->Execute('create table tester (id integer)'); + print "

Delete

"; flush(); + $rs = $conn->Execute('delete from tester'); + print "date=".$conn->GetOne('select getdate()')."
"; +} + + +$ACCEPTIP = '127.0.0.1'; + +$remote = $_SERVER["REMOTE_ADDR"]; + +if (!empty($ACCEPTIP)) + if ($remote != '127.0.0.1' && $remote != $ACCEPTIP) + die("Unauthorised client: '$remote'"); + +?> +mssql +pear +adodb + + + + + + + + + + + + + +id + + +id + + + +
+ + SQL to be executed only on specific platforms + + insert into mytable ( row1, row2 ) values ( 12, 'postgres stuff' ) + + + insert into mytable ( row1, row2 ) values ( 12, 'mysql stuff' ) + + + INSERT into simple_table ( name, description ) values ( '12', 'Microsoft stuff' ) + + +
\ No newline at end of file diff --git a/ehcp/adodb5/tests/xmlschema.xml b/ehcp/adodb5/tests/xmlschema.xml new file mode 100644 index 0000000..ea48ae2 --- /dev/null +++ b/ehcp/adodb5/tests/xmlschema.xml @@ -0,0 +1,33 @@ + + + + + An integer row that's a primary key and autoincrements + + + + + A 16 character varchar row that can't be null + + + + row1 + row2 + +
+ + SQL to be executed only on specific platforms + + insert into mytable ( row1, row2 ) values ( 12, 'postgres stuff' ) + + + insert into mytable ( row1, row2 ) values ( 12, 'mysql stuff' ) + + + insert into mytable ( row1, row2 ) values ( 12, 'Microsoft stuff' ) + + + + +
+
\ No newline at end of file diff --git a/ehcp/adodb5/toexport.inc.php b/ehcp/adodb5/toexport.inc.php new file mode 100644 index 0000000..6bd9da4 --- /dev/null +++ b/ehcp/adodb5/toexport.inc.php @@ -0,0 +1,136 @@ +FieldTypesArray(); + reset($fieldTypes); + $i = 0; + $elements = array(); + while(list(,$o) = each($fieldTypes)) { + + $v = ($o) ? $o->name : 'Field'.($i++); + if ($escquote) $v = str_replace($quote,$escquotequote,$v); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + $elements[] = $v; + + } + $s .= implode($sep, $elements).$NEWLINE; + } + $hasNumIndex = isset($rs->fields[0]); + + $line = 0; + $max = $rs->FieldCount(); + + while (!$rs->EOF) { + $elements = array(); + $i = 0; + + if ($hasNumIndex) { + for ($j=0; $j < $max; $j++) { + $v = $rs->fields[$j]; + if (!is_object($v)) $v = trim($v); + else $v = 'Object'; + if ($escquote) $v = str_replace($quote,$escquotequote,$v); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + + if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote"; + else $elements[] = $v; + } + } else { // ASSOCIATIVE ARRAY + foreach($rs->fields as $v) { + if ($escquote) $v = str_replace($quote,$escquotequote,trim($v)); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + + if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote"; + else $elements[] = $v; + } + } + $s .= implode($sep, $elements).$NEWLINE; + $rs->MoveNext(); + $line += 1; + if ($fp && ($line % $BUFLINES) == 0) { + if ($fp === true) echo $s; + else fwrite($fp,$s); + $s = ''; + } + } + + if ($fp) { + if ($fp === true) echo $s; + else fwrite($fp,$s); + $s = ''; + } + + return $s; +} diff --git a/ehcp/adodb5/tohtml.inc.php b/ehcp/adodb5/tohtml.inc.php new file mode 100644 index 0000000..9c64276 --- /dev/null +++ b/ehcp/adodb5/tohtml.inc.php @@ -0,0 +1,201 @@ + +*/ + +// specific code for tohtml +GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND; + +$ADODB_ROUND=4; // rounding +$gSQLMaxRows = 1000; // max no of rows to download +$gSQLBlockRows=20; // max no of rows per table block + +// RecordSet to HTML Table +//------------------------------------------------------------ +// Convert a recordset to a html table. Multiple tables are generated +// if the number of rows is > $gSQLBlockRows. This is because +// web browsers normally require the whole table to be downloaded +// before it can be rendered, so we break the output into several +// smaller faster rendering tables. +// +// $rs: the recordset +// $ztabhtml: the table tag attributes (optional) +// $zheaderarray: contains the replacement strings for the headers (optional) +// +// USAGE: +// include('adodb.inc.php'); +// $db = ADONewConnection('mysql'); +// $db->Connect('mysql','userid','password','database'); +// $rs = $db->Execute('select col1,col2,col3 from table'); +// rs2html($rs, 'BORDER=2', array('Title1', 'Title2', 'Title3')); +// $rs->Close(); +// +// RETURNS: number of rows displayed + + +function rs2html(&$rs,$ztabhtml=false,$zheaderarray=false,$htmlspecialchars=true,$echo = true) +{ +$s ='';$rows=0;$docnt = false; +GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND; + + if (!$rs) { + printf(ADODB_BAD_RS,'rs2html'); + return false; + } + + if (! $ztabhtml) $ztabhtml = "BORDER='1' WIDTH='98%'"; + //else $docnt = true; + $typearr = array(); + $ncols = $rs->FieldCount(); + $hdr = "\n\n"; + for ($i=0; $i < $ncols; $i++) { + $field = $rs->FetchField($i); + if ($field) { + if ($zheaderarray) $fname = $zheaderarray[$i]; + else $fname = htmlspecialchars($field->name); + $typearr[$i] = $rs->MetaType($field->type,$field->max_length); + //print " $field->name $field->type $typearr[$i] "; + } else { + $fname = 'Field '.($i+1); + $typearr[$i] = 'C'; + } + if (strlen($fname)==0) $fname = ' '; + $hdr .= ""; + } + $hdr .= "\n"; + if ($echo) print $hdr."\n\n"; + else $html = $hdr; + + // smart algorithm - handles ADODB_FETCH_MODE's correctly by probing... + $numoffset = isset($rs->fields[0]) ||isset($rs->fields[1]) || isset($rs->fields[2]); + while (!$rs->EOF) { + + $s .= "\n"; + + for ($i=0; $i < $ncols; $i++) { + if ($i===0) $v=($numoffset) ? $rs->fields[0] : reset($rs->fields); + else $v = ($numoffset) ? $rs->fields[$i] : next($rs->fields); + + $type = $typearr[$i]; + switch($type) { + case 'D': + if (strpos($v,':') !== false); + else { + if (empty($v)) { + $s .= "\n"; + } else { + $s .= " \n"; + } + break; + } + case 'T': + if (empty($v)) $s .= "\n"; + else $s .= " \n"; + break; + + case 'N': + if (abs(abs($v) - round($v,0)) < 0.00000001) + $v = round($v); + else + $v = round($v,$ADODB_ROUND); + case 'I': + $vv = stripslashes((trim($v))); + if (strlen($vv) == 0) $vv .= ' '; + $s .= " \n"; + + break; + /* + case 'B': + if (substr($v,8,2)=="BM" ) $v = substr($v,8); + $mtime = substr(str_replace(' ','_',microtime()),2); + $tmpname = "tmp/".uniqid($mtime).getmypid(); + $fd = @fopen($tmpname,'a'); + @ftruncate($fd,0); + @fwrite($fd,$v); + @fclose($fd); + if (!function_exists ("mime_content_type")) { + function mime_content_type ($file) { + return exec("file -bi ".escapeshellarg($file)); + } + } + $t = mime_content_type($tmpname); + $s .= (substr($t,0,5)=="image") ? " \\n" : " \\n"; + break; + */ + + default: + if ($htmlspecialchars) $v = htmlspecialchars(trim($v)); + $v = trim($v); + if (strlen($v) == 0) $v = ' '; + $s .= " \n"; + + } + } // for + $s .= "\n\n"; + + $rows += 1; + if ($rows >= $gSQLMaxRows) { + $rows = "

Truncated at $gSQLMaxRows

"; + break; + } // switch + + $rs->MoveNext(); + + // additional EOF check to prevent a widow header + if (!$rs->EOF && $rows % $gSQLBlockRows == 0) { + + //if (connection_aborted()) break;// not needed as PHP aborts script, unlike ASP + if ($echo) print $s . "
$fname
  ".$rs->UserDate($v,"D d, M Y") ."   ".$rs->UserTimeStamp($v,"D d, M Y, H:i:s") ."".$vv ."$t$t". str_replace("\n",'
',stripslashes($v)) ."
\n\n"; + else $html .= $s ."\n\n"; + $s = $hdr; + } + } // while + + if ($echo) print $s."\n\n"; + else $html .= $s."\n\n"; + + if ($docnt) if ($echo) print "

".$rows." Rows

"; + + return ($echo) ? $rows : $html; + } + +// pass in 2 dimensional array +function arr2html(&$arr,$ztabhtml='',$zheaderarray='') +{ + if (!$ztabhtml) $ztabhtml = 'BORDER=1'; + + $s = "";//';print_r($arr); + + if ($zheaderarray) { + $s .= ''; + for ($i=0; $i\n"; + } else $s .= " \n"; + $s .= "\n\n"; + } + $s .= '
 
'; + print $s; +} diff --git a/ehcp/adodb5/x.php b/ehcp/adodb5/x.php new file mode 100644 index 0000000..30664d2 --- /dev/null +++ b/ehcp/adodb5/x.php @@ -0,0 +1,9 @@ +connect('localhost', 'root', 'C0yote71', 'mantis_13x'); + +$t = 'mantis_user_table'; +$c = array('username' => 'test'); +print $db->getinsertsql($t, $c) . PHP_EOL; diff --git a/ehcp/adodb5/xmlschema.dtd b/ehcp/adodb5/xmlschema.dtd new file mode 100644 index 0000000..2d0b579 --- /dev/null +++ b/ehcp/adodb5/xmlschema.dtd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +] > \ No newline at end of file diff --git a/ehcp/adodb5/xmlschema03.dtd b/ehcp/adodb5/xmlschema03.dtd new file mode 100644 index 0000000..97850bc --- /dev/null +++ b/ehcp/adodb5/xmlschema03.dtd @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> \ No newline at end of file diff --git a/ehcp/adodb5/xsl/convert-0.1-0.2.xsl b/ehcp/adodb5/xsl/convert-0.1-0.2.xsl new file mode 100644 index 0000000..5b2e3ce --- /dev/null +++ b/ehcp/adodb5/xsl/convert-0.1-0.2.xsl @@ -0,0 +1,205 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + + 0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/xsl/convert-0.1-0.3.xsl b/ehcp/adodb5/xsl/convert-0.1-0.3.xsl new file mode 100644 index 0000000..3202dce --- /dev/null +++ b/ehcp/adodb5/xsl/convert-0.1-0.3.xsl @@ -0,0 +1,221 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + + 0.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/xsl/convert-0.2-0.1.xsl b/ehcp/adodb5/xsl/convert-0.2-0.1.xsl new file mode 100644 index 0000000..6398e3e --- /dev/null +++ b/ehcp/adodb5/xsl/convert-0.2-0.1.xsl @@ -0,0 +1,207 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + + 0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/xsl/convert-0.2-0.3.xsl b/ehcp/adodb5/xsl/convert-0.2-0.3.xsl new file mode 100644 index 0000000..9e1f2ae --- /dev/null +++ b/ehcp/adodb5/xsl/convert-0.2-0.3.xsl @@ -0,0 +1,281 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + + 0.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/xsl/remove-0.2.xsl b/ehcp/adodb5/xsl/remove-0.2.xsl new file mode 100644 index 0000000..c82c3ad --- /dev/null +++ b/ehcp/adodb5/xsl/remove-0.2.xsl @@ -0,0 +1,54 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + +Uninstallation Schema + + + + 0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/adodb5/xsl/remove-0.3.xsl b/ehcp/adodb5/xsl/remove-0.3.xsl new file mode 100644 index 0000000..4b1cd02 --- /dev/null +++ b/ehcp/adodb5/xsl/remove-0.3.xsl @@ -0,0 +1,54 @@ + + + + + + + +ADODB XMLSchema +http://adodb-xmlschema.sourceforge.net + + + +Uninstallation Schema + + + + 0.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ehcp/apache_default.conf b/ehcp/apache_default.conf new file mode 100755 index 0000000..57dbf45 --- /dev/null +++ b/ehcp/apache_default.conf @@ -0,0 +1,23 @@ +NameVirtualHost * + + +DocumentRoot /var/www + +Options FollowSymLinks +AllowOverride None + + + +Options Indexes FollowSymLinks MultiViews +AllowOverride None +Order allow,deny +allow from all + + + +ErrorLog /var/log/apache2/error.log +LogLevel warn +CustomLog /var/log/apache2/access.log combined + + + diff --git a/ehcp/apache_subdomain_template b/ehcp/apache_subdomain_template new file mode 100755 index 0000000..1e95790 --- /dev/null +++ b/ehcp/apache_subdomain_template @@ -0,0 +1,25 @@ +#____________start of {subdomain}.{domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir {homedir}/phptmpdir + php_admin_value session.save_path 0;660;{homedir}/phptmpdir + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customsubdomainhttp} + + diff --git a/ehcp/apachehcp.conf b/ehcp/apachehcp.conf new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/ehcp/apachehcp.conf @@ -0,0 +1 @@ + diff --git a/ehcp/apachehcp_auth.conf b/ehcp/apachehcp_auth.conf new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/ehcp/apachehcp_auth.conf @@ -0,0 +1 @@ + diff --git a/ehcp/apachehcp_globalpanelurls.conf b/ehcp/apachehcp_globalpanelurls.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/ehcp/apachehcp_globalpanelurls.conf @@ -0,0 +1 @@ + diff --git a/ehcp/apachehcp_passivedomains.conf b/ehcp/apachehcp_passivedomains.conf new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/ehcp/apachehcp_passivedomains.conf @@ -0,0 +1 @@ + diff --git a/ehcp/apachehcp_subdomains.conf b/ehcp/apachehcp_subdomains.conf new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/ehcp/apachehcp_subdomains.conf @@ -0,0 +1 @@ + diff --git a/ehcp/apachetemplate b/ehcp/apachetemplate new file mode 100755 index 0000000..b4036c1 --- /dev/null +++ b/ehcp/apachetemplate @@ -0,0 +1,114 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# if you make any changes in this file, do this: ehcp->options->syncdomains , or, changes will not take effect + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + # this is pear compatible: + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir {homedir}/phptmpdir + php_admin_value session.save_path 0;660;{homedir}/phptmpdir + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ diff --git a/ehcp/apachetemplate_ehcp_panel b/ehcp/apachetemplate_ehcp_panel new file mode 100644 index 0000000..048fe03 --- /dev/null +++ b/ehcp/apachetemplate_ehcp_panel @@ -0,0 +1,35 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template + + ServerName {domainname} + ServerAlias {domainname_alias} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + +# END OF CUSTOM GLOBAL PANEL URLS Template diff --git a/ehcp/apachetemplate_ipbased b/ehcp/apachetemplate_ipbased new file mode 100755 index 0000000..c5f22a2 --- /dev/null +++ b/ehcp/apachetemplate_ipbased @@ -0,0 +1,112 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + # this is pear compatible: + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ diff --git a/ehcp/apachetemplate_passivedomains b/ehcp/apachetemplate_passivedomains new file mode 100755 index 0000000..412239f --- /dev/null +++ b/ehcp/apachetemplate_passivedomains @@ -0,0 +1,27 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {domainname} + ServerAlias www.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {homedir} + php_admin_value upload_tmp_dir {homedir}/phptmpdir + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ + + + diff --git a/ehcp/checkapacheconfig.sh b/ehcp/checkapacheconfig.sh new file mode 100755 index 0000000..c01a6d1 --- /dev/null +++ b/ehcp/checkapacheconfig.sh @@ -0,0 +1,9 @@ +#!/bin/bash +#checks for common apache problems + + +cd /etc/apache2 + +echo "Below are some apache Include and DocumentRoot lines. If you see some non-related data, you need to delete them in apache config files... So that ehcp can function normally." +grep Include * -R +grep DocumentRoot * -R diff --git a/ehcp/class_serverplan.php b/ehcp/class_serverplan.php new file mode 100755 index 0000000..9e0f9c3 --- /dev/null +++ b/ehcp/class_serverplan.php @@ -0,0 +1,41 @@ +singleserverip<>'') return $this->singleserverip; + + # serverplan oku, ona gore server adresini al.. + + } + + function getDnsServer(){ + if($this->singleserverip<>'') return $this->singleserverip; + + # serverplan oku, ona gore server adresini al.. + + + } + + function getWebServer(){ + if($this->singleserverip<>'') return $this->singleserverip; + + # serverplan oku, ona gore server adresini al.. + + + } + + +} + + + +?> diff --git a/ehcp/classapp.php b/ehcp/classapp.php new file mode 100755 index 0000000..224cab8 --- /dev/null +++ b/ehcp/classapp.php @@ -0,0 +1,14537 @@ +", $td="", $th=""; + var $ehcpForceSplitString = "{EHCP_EAM_FORCE_SPLIT_STRING2015}"; + var $ehcpInstallPath = "/var/www/new/ehcp/"; + var $ehcpDownloadPath = "/var/www/new/ehcp/downloads"; + + var $conf=array( + # config section + # yavas yavas conf sistemine gecmek lazim. aslinda kod icinde sabit bilgi kullanmamak lazim. string bile... ama nerdee... + # this is like configuration of many system settings, tablenames etc. by this, changing something is easier, without need to change code.. + # apache and dns defs: + + 'adminname'=>'ehcpdeveloper', + 'adminemail'=>'ehcpdeveloper@gmail.com', + 'wwwbase'=>'/var/www', + 'ehcpdir'=>'', + 'vhosts'=>'/var/www/vhosts', + 'namedbase'=>'/etc/bind', + 'dnsip' => '10.0.0.10', + 'dnsemail' => 'your.email.here', + + # mysql definitions + 'mysqlrootuser'=>'root', # this is for db creation. + 'mysqlrootpass'=>'12345', + + # ehcp db table definitions, this is to make code more db-independent... + 'logintable'=>array( + 'tablename'=>'panelusers', + 'passwordfunction'=>'md5', + 'usernamefield'=>'panelusername', + 'passwordfield'=>'password' + ), + 'settingstable2'=>array( + 'tablename'=>'settings', + 'createtable'=> +"CREATE TABLE IF NOT EXISTS `settings` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `group` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `reseller` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `panelusername` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `value` varchar(200) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `longvalue` text CHARACTER SET utf8 COLLATE utf8_turkish_ci, + `comment` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `group` (`group`,`reseller`,`panelusername`,`name`,`value`) +) DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='ehcp db - Table for settings of ehcp'" + ), + 'vpstable'=>array( + 'tablename'=>'vps', + 'listfields'=>array('vpsname','ip','ip2','ram','description','reseller','panelusername','hostip','state','image_template'), + 'linkimages'=>array('images/incele.jpg','images/poweron.gif','images/poweroff.gif','images/pause.gif','images/edit2.gif','images/delete1.jpg'), + 'linkfiles'=>array('?op=vps&op2=select','?op=vps&op2=start','?op=vps&op2=shutoff','?op=vps&op2=pause','?op=vps&op2=edit','?op=vps&op2=delete'), + 'linkfield'=>'vpsname', + 'checkfields'=>array( + 'addvpscmd'=>'text', + 'ip2'=>'varchar(20)', + 'cdimage'=>'varchar(100)' + ), + 'createtable'=> +"CREATE TABLE `vps` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `reseller` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `panelusername` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `status` varchar(10) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `vpsname` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `description` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `hostip` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `netmask` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `broadcast` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `gateway` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `image_template` varchar(100) DEFAULT NULL, + `ram` int(11) DEFAULT NULL, + `cpu` int(11) DEFAULT NULL, + `state` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `ping` varchar(10) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `hdimage` varchar(200) DEFAULT NULL, + `addvpscmd` text CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='ehcp db - list of vps and their properties'" + + ), + + 'domainstable'=>array( + 'tablename'=>'domains', + 'ownerfield'=>'panelusername', + 'resellerfield'=>'reseller', + 'domainfields'=>array('id','reseller','panelusername','domainname','status','comment'), + 'listfields'=>array('id','reseller','panelusername','domainname','webserverips','status','diskquotaused','diskquota'), + 'checkfields'=>array( + 'serverip'=>'varchar(30)', + 'dnsserverips'=>'varchar(200)', + 'webserverips'=>'varchar(200)', + 'mailserverips'=>'varchar(200)', + 'mysqlserverips'=>'varchar(200)', + 'host'=>'varchar(30)', + 'apachetemplate'=>'text', + 'apache2template'=>'text', + 'nginxtemplate'=>'text', + 'dnstemplate'=>'text', + 'aliases'=>'text', + 'diskquotaused'=>'int(4)', + 'diskquota'=>'int(4)', + 'diskquotaovernotified'=>'int(4)', + 'diskquotaoversince'=>'date', + 'graceperiod'=>'int(4) default 7', + 'theorder'=>'int(11)', + 'dnsmaster'=>'varchar(15) default NULL', + 'redirect_to'=>'varchar(200) default NULL', + 'ssl_cert'=>'text', + 'ssl_cert_key'=>'text', + 'ssl_cert_chain'=>'text', + 'ssl_wild_card' => 'bit(1) default b\'0\'', + 'ssl_use_letsenc' => 'bit(1) default b\'0\'', + 'ssl_redirect_https' => 'bit(1) default b\'0\'', + 'ssl_lets_enc_additional_hosts' => 'text' + ) + ), + 'domainstable2'=>array( + 'tablename'=>'domains', + 'listfields'=>array('domainname') + ), + 'subdomainstable'=>array( + 'tablename'=>'subdomains', + 'listfields'=>array('reseller','panelusername','subdomain','domainname','homedir','ftpusername','comment'), + 'linkimages'=>array('images/delete1.jpg'), + 'linkfiles'=>array('?op=delsubdomain'), + 'linkfield'=>'id', + 'checkfields'=>array( + 'ftpusername'=>'varchar(30)', + 'password'=>'varchar(20)', + 'email'=>'varchar(50)', + 'webserverips'=>'varchar(200)' + ) + ), + + 'globalwebservertemplatestable'=>array( + 'tablename'=>'globalwebservertemplates', + 'listfields'=>array('template_name','template_webserver_type','template_value'), + // Password protected directories + 'createtable'=>"CREATE TABLE IF NOT EXISTS `globalwebservertemplates` ( + template_name varchar(100) NOT NULL, + template_webserver_type varchar(100) NOT NULL, + template_ssl_type varchar(100) NOT NULL, + template_value text default NULL, + PRIMARY KEY (template_name, template_webserver_type, template_ssl_type) + ) comment='Used for custom global webserver templates';" + ), + + 'paneluserstable'=> array( + 'tablename'=>'panelusers', + 'resellerfield'=>'reseller', + 'usernamefield'=>'panelusername', + 'passwordfield'=>'password', + 'listlabels'=>array('ID','Reseller','Username','Max Domains','Max Emails','Quota','Max Panel Users','Max FTP Users','Max MySQL Databases','Full Name','Email','Theme Color','Theme Contrast','Maser Reseller','Max Sub Domains'), + 'listfields'=>array('id','reseller','panelusername','maxdomains','maxemails','quota','maxpanelusers','maxftpusers','maxdbs','name','email','theme_color','theme_contrast','master_reseller','maxsubdomains'), + 'clickimages'=>array('images/edit.gif','images/delete1.jpg'), + 'clickfiles'=>array('?op=editpaneluser','?op=deletepaneluser'), + 'insertfields'=>array(array('panelusername', 'lefttext'=>'Panel Username:'),array('password','password','lefttext'=>'Password:'),array('maxdomains','default'=>5, 'lefttext'=>'Max Domains:'),array('maxsubdomains','default'=>15, 'lefttext'=>'Max Sub Domains:'),array('maxemails','default'=>20, 'lefttext'=>'Max Emails:'),array('quota','default'=>500, 'lefttext'=>'Quota in MB:'),array('master_reseller','checkbox','default'=>1,'disabled'=>'','lefttext'=>'Set as Master Reseller Account:','requires_admin'=>true),array('maxpanelusers','default'=>0, 'lefttext'=>'Max Panel Users:'),array('maxftpusers','default'=>5, 'lefttext'=>'Max FTP Users:'),array('maxdbs','default'=>10, 'lefttext'=>'Max Databases:'),array('name', 'lefttext'=>'Full Name:'),array('email', 'lefttext'=>'Email Address:')), + 'insertfieldlabels'=>array('Panel Username','Password','Max Domains','Max Subdomains','Max Emails','Quota (MB)','Master Reseller Account','Max Panel Users','Max FTP Users','Max MySQL Databases','Name','Email'), + 'mandatoryinsertfields'=>array('panelusername'), # zorunlu insert alanlari + 'editfields'=>array('maxdomains','maxsubdomains','maxemails','quota','maxpanelusers','maxftpusers','maxdbs','name','email','master_reseller'), # edit edildigi zaman görünecek alanlar.. + 'editlabels'=>array('Max Domains','Max Subdomains','Max Emails','Quota (MB)','Max Panel Users','Max FTP Users','Max MySQL Databases','Full Name','Email','Master Reseller'), # edit edildigi zaman görünecek alanlar.. + 'checkbox_fields'=>array('master_reseller'), + 'linkfield'=>'id', + 'checkfields'=>array( + 'comment'=>'varchar(100)', + 'theme_color'=>'varchar(7)', + 'theme_contrast'=>'varchar(10)', + 'master_reseller'=>'tinyint(1) default 0', + 'maxsubdomains'=>'int(11) default 10', + ), + 'help'=>'description of this table... ehcp control panel users... ' + ), + + 'customstable'=>array( # custom dns and http settings + 'tablename'=>'customsettings', + 'listfields'=>array('id','domainname','name','comment','value','value2','webservertype'), + 'linkimages'=>array('images/delete1.jpg'), + 'linkfiles'=>array('?op=deletecustom'), + 'orderby'=>'id', + 'linkfield'=>'id', + 'checkfields'=>array( + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)', + 'webservertype'=>'varchar(30)', + 'value2'=>'text' + ) + ), + 'emailuserstable'=>array( + 'tablename'=>'emailusers', # going to be array as above.. + 'listfields'=>array('email','quota','domainname'), + 'linkimages'=>array('images/delete1.jpg','images/edit.gif'), + 'linkfiles'=>array('?op=userop&action=emailuserdelete','?op=editemailuser'), + 'linkfield'=>'id', + 'ownerfield'=>'panelusername', + 'resellerfield'=>'reseller', + # for use with email user logins + 'passwordfunction'=>'encrypt', + 'usernamefield'=>'email', + 'passwordfield'=>'password', + + 'checkfields'=>array( + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)', + 'status'=>'varchar(10)', + 'autoreplysubject'=>'varchar(100)', + 'autoreplymessage'=>'text' + ) + + ), + + 'ftpuserstable'=>array( + 'tablename'=>'ftpaccounts', # going to be array as above.. + 'ownerfield'=>'panelusername', + 'resellerfield'=>'reseller', + 'listfields'=>array('domainname','ftpusername','status','homedir','type'), + 'checkfields'=>array( + 'type'=>'varchar(10)', + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)', + 'homedir'=>'varchar(100)', + 'datetime'=>'datetime' + + ) + + ), + + 'operations_table'=>array( + 'tablename'=>'operations', # going to be array as above.. + 'listfields'=>array('id','user','ip','op','status','tarih','try','info','info2','info3','action'), + 'checkfields'=>array( + 'info'=>'text', + 'info2'=>'text', + 'info3'=>'text', + 'user'=>'varchar(30)', + 'ip'=>'varchar(30)' + ) + ), + + 'backups_table'=>array( + 'tablename'=>'backups', + 'listfields'=>array('id','domainname','backupname','filename','date','size','status'), + 'linkimages'=>array('images/delete1.gif'), + 'linkfiles'=>array('?op=backups&op2=delete&filename='), + 'linkfield'=>'filename', + 'checkfields'=>array( + 'status'=>'varchar(100)', + 'domainname'=>'varchar(100)', + 'filename'=>'varchar(200)' + ) + ), + + 'mysqldbstable'=>array( + 'tablename'=>'mysqldb', + 'listfields'=>array('domainname','dbname','host'), + 'linkimages'=>array('images/delete1.jpg'), + 'linkfiles'=>array('?op=domainop&action=deletedb'), + 'linkfield'=>'id', + 'checkfields'=>array( + 'host'=>'varchar(30)', + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)' + ) + ), + 'mysqldbuserstable'=>array( + 'tablename'=>'mysqlusers', + 'listfields'=>array('domainname','dbname','dbusername','host'), + 'linkimages'=>array('images/edit.gif'), + 'linkfiles'=>array('?op=dbedituser'), + 'linkfield'=>'id', + 'checkfields'=>array( + 'host'=>'varchar(30)', + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)' + ) + + ), + 'serverstable'=>array( + 'tablename'=>'servers', + 'listfields'=>array('servertype','ip','accessip','mandatory','location'), + 'linkimages'=>array('images/edit.gif'), + 'linkfiles'=>array('?op=editserver'), + 'linkfield'=>'id', + 'checkfields'=>array('accessip'=>'varchar(30)') + ), + 'emailforwardingstable'=>array( + 'tablename'=>'forwardings', + 'listfields'=>array('panelusername','domainname','source','destination'), + 'linkimages'=>array('images/delete1.jpg'), + 'linkfiles'=>array('?op=delemailforwarding'), + 'linkfield'=>'id', + 'checkfields'=>array( + 'reseller'=>'varchar(30)', + 'panelusername'=>'varchar(30)', + 'domainname'=>'varchar(50)' + ) + ), + 'transporttable'=>array( # for email autoreply + 'tablename'=>'transport', + 'createtable'=> +" +CREATE TABLE transport ( + domainname varchar(128) NOT NULL default '', + transport varchar(128) NOT NULL default '', + UNIQUE KEY domainname (domainname) +) DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci +" + ), + 'settingstable'=>array( + 'tablename'=>'misc', + 'checkfields'=>array( + 'name'=>'varchar(40)', + 'panelusername'=>'varchar(30)' + ) + ), + 'scriptstable'=>array( + 'tablename'=>'scripts', + 'checkfields'=>array( + 'homepage'=>'varchar(50)', + 'description'=>'text', + 'customfileownerships'=>'text' + ) + ), + 'daemonopstable'=>'operations', + 'hashtable'=>array( + 'tablename'=>'hash', + 'createtable'=>" +CREATE TABLE IF NOT EXISTS `hash` ( + `email` varchar(100) COLLATE utf8_turkish_ci NOT NULL DEFAULT 'NULL', + `hash` varchar(100) COLLATE utf8_turkish_ci DEFAULT NULL, + KEY `email_index` (`email`) +) DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='to store password remind hash' + " + + ), + + // Start of new tables + + // Remote backups table + 'remote_backups_table'=>array( + 'tablename'=>'remote_backups', + 'createtable'=>" +CREATE TABLE IF NOT EXISTS `remote_backups` ( + `id` tinyint(4) NOT NULL auto_increment, + `name` varchar(50) default NULL, + `dayofweek` tinyint(1) default NULL, + `time` varchar(2), + `transfer_method` varchar(20) default NULL, + `transfer_host` varchar(100) default NULL, + `transfer_port` varchar(5) default NULL, + `transfer_login` varchar(50) default NULL, + `transfer_pass` varchar(50) default NULL, + `encryption_pass` varchar(50) default NULL, + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='Used to schedule cronjobs for remote backups'; + ", + 'checkfields'=>array( + 'encryption_pass'=>'varchar(50)' + ) + + ), + + // Cronjob table + 'cronjobs_table'=>array( + 'tablename'=>'cronjobs', + 'createtable'=>" +CREATE TABLE IF NOT EXISTS `cronjobs` ( + `id` tinyint(4) NOT NULL auto_increment, + `script` varchar(100) default NULL, + `dayofweek` tinyint(1) default NULL, + `time` varchar(2), + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='Used to run any cronjobs an admin may want to run'; + " + + ), + + // Password protected directories + 'pwd_dirs_table'=>array( + 'tablename'=>'pwd_dirs', + 'createtable'=>"CREATE TABLE IF NOT EXISTS `pwd_dirs` ( + id int(11) NOT NULL auto_increment, + domainname varchar(100) default NULL, + domainpath varchar(300) default NULL, + protected_dir varchar(50) default NULL, + username varchar(50) default NULL, + password varchar(50) default NULL, + PRIMARY KEY (id) + ) comment='Used for password protected directories';" + ), + + // Admin defined hosting plans + 'hosting_plans_table'=>array( + 'tablename'=>'hosting_plans', + 'createtable'=>"CREATE TABLE IF NOT EXISTS `hosting_plans` ( + id int(11) NOT NULL auto_increment, + name varchar(200) default NULL, + master_reseller tinyint(1) default 0, + max_panelusers int(11) default NULL, + max_ftpusers smallint(6) default NULL, + max_dbs int(11) default NULL, + max_emails int(11) default NULL, + max_domains int(11) default NULL, + max_subdomains int(11) default NULL, + quota int(20) default '10485760', + panelusername varchar(30) NOT NULL default 'admin', + PRIMARY KEY (id) + ) comment='Used for admin defined hosting plans';", + 'checkfields'=>array( + 'panelusername'=>"varchar(30) NOT NULL default 'admin'", + ) + ), + + 'logtable'=>array( + 'tablename'=>'log', + 'listfields'=>array('tarih','panelusername','notified','ip','log'), + 'checkfields'=>array( + 'panelusername'=>'varchar(50)', + 'notified'=>'varchar(5)' + ) + ) + + + ); + +/* +for almost every record: +panelusername: who is the owner of that, who setupd that. cannot be empty. +resellername: who is the reseller of that panelusername. cannot be empty. +domainname: to which domain is that related. empty if not related to domainname + +*/ + +///////////////////// +// The constructor // +///////////////////// +function __construct() { + global $skipUpdateWebstats,$debuglevel; + + // Get the right FTP username since Ubuntu 15 and up decided to use a different username... + $wwwUser = $this->getWWWUser(); + + // Get the BIND9 DNS user + $bindUser = $this->getBindUser(); + + // Get the service name for php-fpm + $phpFPMName = $this->getPHPFPMName(); + + // Set our global public class members to the value + $this->wwwuser = $wwwUser; + $this->ftpuser = $wwwUser; + + if($phpFPMName){ + $this->php_fpm_name = $phpFPMName; + } + + // Set global bind user variable + if($this->hasValueOrZero($bindUser)){ + $this->binduser = $bindUser; + } + + // Load mysql settings from configuration + include('config.php'); + $this->set_ehcp_dir(dirname(__FILE__)); + $this->vhostsdir=$this->conf['vhosts']; + + // Set variables + $this->dbhost=$dbhost; + $this->dbusername=$dbusername; + $this->dbpass=$dbpass; + $this->dbname=$dbname; + $this->conf['mysqlrootpass']=$dbrootpass; + $this->defaultlanguage=$defaultlanguage; + $this->isDemo=$isdemo; + if(!(isset($this->isDemo))) $this->isDemo=False; + $this->statusActivePassive=array("active"=>"active","passive"=>"passive"); + + /* Remote Backup Select List Vars */ + $this->remoteBackupMethod=array("ftp"=>"FTP","scp"=>"SCP"); + $this->remoteBackupTime=array("0"=>"00:00","6"=>"06:00","12"=>"12:00","18"=>"18:00"); + $this->remoteDayOfWeek=array("0"=>"Sunday","1"=>"Monday", "2"=>"Tuesday","3"=>"Wednesday","4"=>"Thursday","5"=>"Friday","6"=>"Saturday"); + + if(isset($this->debuglevel)){ + #.... + } + $debuglevel=$this->debuglevel; # for outer functions using debuglevel + + $this->clientip = getenv ("REMOTE_ADDR"); + $this->referer = getenv("HTTP_REFERER"); + + $this->wwwowner=$this->wwwuser.':'.$this->wwwgroup; + $this->ftpowner=$this->ftpuser.':'.$this->ftpgroup; + +} + +// -------------------- // +// All other functions // +// -------------------- // +function run() { + $this->debugecho("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4,false); + #$this->serverPlan=new serverPlan(); + # $this->output.=$this->debug(); + global $commandline; + $this->commandline=$commandline; + $this->initialize(); + # this is actual application runner, maps urls to functions.. + $this->runOp($this->op); + $this->show(); +} + +function runOp($op){ # these are like url to function mappers... maps op variable to some functions in ehcp; This also can be seen as a controller in MVC model. + global $id,$domainname,$op2,$_insert; + $this->getVariable(array('id','domainname','op2','_insert')); + $op=strtolower($op); + $otheroperations=array('advancedsettings'); + + + switch ($op) { + + case 'failedlogins' : return $this->failedlogins();break; + + #ssl related: + case 'adjust_ssl' : return $this->adjust_ssl();break; + case 'pagerewrite' : return $this->pagerewrite();break; + + # other + case 'activate' : return $this->activate();break; + case 'settings' : return $this->settings();break; + case 'adjust_system' : return $this->adjust_system();break; + case 'redirect_domain' : return $this->redirect_domain();break; + case 'information' : return $this->information($id);break; + + #multi-server operations: + case 'multiserver_add_domain' : return $this->multiserver_add_domain();break; + + case 'new_sync_all' : return $this->new_sync_all();break; + case 'new_sync_domains' : return $this->new_sync_domains();break; + case 'new_sync_dns' : return $this->new_sync_dns();break; + case 'multiserver_add_ftp_user_direct': return $this->gui_multiserver_add_ftp_user_direct();break; + + #single-server operations: + case 'bulkaddemail' : return $this->bulkAddEmail();break; + case 'whitelist' : return $this->whitelist();break; + case 'fixmailconfiguration' : return $this->fixMailConfiguration();break; + case 'dofixmailconfiguration' : return $this->addDaemonOp('fixmailconfiguration','','','','fix mail configuration');break; + case 'dofixapacheconfigssl' : return $this->addDaemonOp('fixApacheConfigSsl','','','','fixApacheConfigSsl');break; + case 'dofixapacheconfigsslonly' : return $this->addDaemonOp('fixApacheConfigSslOnly','','','','fixApacheConfigSslOnly');break; + case 'dofixapacheconfignonssl' : return $this->addDaemonOp('fixApacheConfigNonSsl','','','','fixApacheConfigNonSsl');break; + case 'dofixapacheconfignonssl2' : return $this->addDaemonOp('fixApacheConfigNonSsl2','','','','fixApacheConfigNonSsl2');break; + case 'rebuild_webserver_configs': return $this->rebuild_webserver_configs();break; + case 'configure_anon_ftp' : return $this->configure_anon_ftp();break; + + case 'updatediskquota' : return $this->updateDiskQuota();break; + case 'doupdatediskquota' : $this->addDaemonOp('updatediskquota','',$domainname,'','update disk quota');return $this->displayHome();break; + + #editing of dns/apache templates for domains, on ehcp db + case 'editdnstemplate' : return $this->editDnsTemplate();break; + case 'editapachetemplate' : return $this->editApacheTemplate();break; + case 'editdomainaliases' : return $this->editDomainAliases();break; + + case 'changedomainserverip' : return $this->changedomainserverip();break; + case 'warnings' : break; # this will be written just before show.. + case 'bulkadddomain' : return $this->bulkaddDomain();break ; + case 'bulkdeletedomain' : return $this->bulkDeleteDomain();break ; + case 'exportdomain' : return $this->exportDomain();break; + + case 'adddnsonlydomain' : return $this->addDnsOnlyDomain();break; + + // Slave DNS + case 'addslavedns' : return $this->addSlaveDNS();break; + case 'removeslavedns' : return $this->removeSlaveDNS();break; + + // Custom FTP + case 'addcustomftp' : return $this->addCustomFTP();break; + case 'removecustomftp' : return $this->removeCustomFTP();break; + + // Global Website Apache / Nginx Templates + case 'manageglobalwebtemplates' : return $this->manageGlobalWebTemplates();break; + case 'getglobalwebtemplate' : return $this->getGlobalWebTemplate();break; + + // Is PolicyD installed: + case 'ispolicydinstalled' : return $this->isPolicyDInstalled();break; + + // Get public server settings: + case 'getpublicserversettings' : return $this->getPublicServerSettings();break; + + // Remote backups + case 'addremotebackup': + case 'editremotebackup': + return $this->addRemoteBackup();break; + case 'removeremotebackup' : return $this->removeRemoteBackup();break; + + // Password directories + case 'addpasswordprotecteddir' : return $this->addPasswordProtectedDir();break; + case 'rmpasswordprotecteddir' : return $this->rmPasswordProtectedDIR();break; + + // Admin defined hosting plans + case 'addhostingplan' : return $this->addHostingPlan();break; + case 'removehostingplan' : return $this->removeHostingPlan();break; + + // Theming stuff + case 'updatethemecolor' : $this->updateThemeColor();break; + case 'updatethemecontrast' : $this->updateThemeContrast();break; + case 'getmydomainsobject' : $this->getMyDomainsAsObject();break; + + // Cronjobs + case 'addcronjob' : return $this->addCronjob();break; + case 'removecronjob' : return $this->removeCronjob();break; + + case 'adddnsonlydomainwithpaneluser': return $this->addDnsOnlyDomainWithPaneluser();break; + + case 'getselfftpaccount' : return $this->getSelfFtpAccount();break; + case 'adddomaintothispaneluser' : return $this->addDomainToThisPaneluser();break; + + case 'dodownloadallscripts' : return $this->doDownloadAllscripts();break; + case 'choosedomaingonextop' : return $this->chooseDomainGoNextOp();break; + + case 'getmysqlserver' : return $this->getMysqlServer();break; + + case 'emailforwardingsself' : return $this->emailForwardingsSelf();break; + case 'addemailforwardingself' : return $this->addEmailForwardingSelf();break; + + case 'cmseditpages' : return $this->cmsEditPages();break; + case 'listservers' : return $this->listServers();break; + case 'addserver' : return $this->addServer();break; + case 'addiptothisserver' : return $this->add_ip_to_this_server();break; + case 'setactiveserverip' : return $this->set_active_server_ip();break; + + + case 'advancedsettings' : return $this->advancedsettings();break; + case 'delemailforwarding' : return $this->delEmailForwarding();break; + case 'addemailforwarding' : return $this->addEmailForwarding();break; + case 'emailforwardings' : return $this->emailForwardings();break; + case 'addscript' : return $this->addScript();break; + case 'addnewscript' : return $this->addNewScript();break; + + case 'suggestnewscript' : return $this->suggestnewscript();break; + case 'updateinstallscriptsql' : return $this->updateInstallScriptSQL();break; + case 'listselectdomain' : return $this->listselectdomain();break; + case 'selectdomain' : return $this->selectdomain($id);break; + case 'deselectdomain' : return $this->deselectdomain();break; + case 'otheroperations' : return $this->otheroperations();break; + + + case 'loadconfig' : return $this->loadConfig();break; + #case 'showconf' : return $this->showConfig();break; + case 'changemypass' : return $this->changeMyPass();break; + + # for mysql, stop and start is meaningless, because if mysql cannot run, then, panel also cannot be accessible or this functions do not work. + case 'dorestartmysql' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'mysql','info2'=>'restart')); break; + + case 'dostopapache2' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'apache2','info2'=>'stop')); break; + case 'dostartapache2' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'apache2','info2'=>'start')); break; + case 'dorestartapache2' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'apache2','info2'=>'restart')); break; + + case 'dostopnginx' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'nginx','info2'=>'stop')); break; + case 'dostartnginx' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'nginx','info2'=>'start')); break; + case 'dorestartnginx' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'nginx','info2'=>'restart')); break; + + case 'dostopphp5fpm' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>$this->php_fpm_name,'info2'=>'stop')); break; + case 'dostartphp5fpm' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>$this->php_fpm_name,'info2'=>'start')); break; + case 'dorestartphp5fpm' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>$this->php_fpm_name,'info2'=>'restart')); break; + + case 'dostopvsftpd' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'vsftpd','info2'=>'stop')); break; + case 'dostartvsftpd' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'vsftpd','info2'=>'start')); break; + case 'dorestartvsftpd' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'vsftpd','info2'=>'restart')); break; + + case 'dostopbind' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'bind9','info2'=>'stop')); break; + case 'dostartbind' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'bind9','info2'=>'start')); break; + case 'dorestartbind' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'bind9','info2'=>'restart')); break; + + case 'dostoppostfix' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'postfix','info2'=>'stop')); break; + case 'dostartpostfix' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'postfix','info2'=>'start')); break; + case 'dorestartpostfix' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'service','info'=>'postfix','info2'=>'restart')); break; + + + case 'donewsyncdomains' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'new_sync_domains')); break; + case 'donewsyncdns' : $this->requireAdmin(); return $this->add_daemon_op(array('op'=>'new_sync_dns')); break; + + case 'dosyncdomains' : $this->requireAdmin(); return $this->addDaemonOp('syncdomains','','','','sync domains');break; + case 'dosyncdns' : $this->requireAdmin(); return $this->addDaemonOp('syncdns','','','','sync dns');break; + case 'dosyncftp' : $this->requireAdmin(); return $this->addDaemonOp('syncftp','','','','sync ftp for nonstandard homes');break; + case 'options' : return $this->options(); + + + case 'backups' : return $this->backups();break; + case 'dobackup' : return $this->doBackup();break; + case 'dorestore' : return $this->doRestore();break; + case 'listbackups' : return $this->listBackups();break; + + # these sync functions are executed in daemon mode. + case 'updatehostsfile' : return $this->updateHostsFile();break; + case 'syncdomains' : return $this->syncDomains();break; + case 'handlecouriersslcert' : return $this->handleCourierSSLCert();break; + case 'resynccourierssl' : return $this->resyncCourierSSL();break; + case 'syncftp' : return $this->syncFtp();break; + case 'rebuild_crontab' : return $this->rebuildCrontab();break; + case 'process_pwd_dirs' : return $this->handlePasswordProtectedDirs();break; + case 'handle_reset_sites_enabled_default' : return $this->handleResetSitesEnabledDefault();break; + case 'handle_reset_mainwebserverconf' : return $this->handleResetMainWebServerConf();break; + case 'process_ssl_certs' : return $this->handleCustomSSLCertsForDomains();break; + case 'syncdns' : return $this->syncDns();break; + case 'syncall' : return $this->syncAll();break; + case 'fixapacheconfigssl' : return $this->fixApacheConfigSsl();break; + case 'fixapacheconfigsslonly' : return $this->fixApacheConfigSslOnly();break; + case 'fixapacheconfignonssl' : return $this->fixApacheConfigNonSsl();break; + + + #case 'syncallnew' : return $this->syncallnew();break; + case 'listdomains' : return $this->listDomains();break; # ayni zamanda domain email userlarini da listeler. + case 'subdomains' : return $this->subDomains(); break; + case 'addsubdomain' : return $this->addSubDomain(); break; + case 'addsubdomainwithftp' : return $this->addSubDomainWithFtp(); break; + case 'addsubdirectorywithftp' :return $this->addSubDirectoryWithFtp(); break; + + + case 'delsubdomain' : return $this->delSubDomain(); break; + + + case 'editdomain' : return $this->editdomain(); + case 'listpassivedomains' : return $this->listDomains('',$this->passivefilt);break; + case 'phpinfo' : return $this->phpinfo();break; + case 'help' : return $this->help();break; + case 'syncpostfix' : return $this->syncpostfix();break; + case 'listemailusers' : return $this->listemailusers();break; + case 'listallemailusers' : return $this->listallemailusers();break; + case 'listpanelusers' : return $this->listpanelusers();break; + case 'resellers' : return $this->resellers();break; + + case 'deletepaneluser' : return $this->deletepaneluser();break; + + case 'operations' : $this->requireAdmin();$this->listTable('operations','operations_table','');break; + + case 'listallftpusers' : return $this->listAllFtpUsers();break; + case 'listftpusersrelatedtodomains': return $this->listAllFtpUsers("domainname<>''");break; + case 'listftpuserswithoutdomain': return $this->listAllFtpUsers("domainname='' or domainname is null");break; + case 'listftpusers' : return $this->listftpusers();break; + case 'sifrehatirlat' : return $this->sifreHatirlat();break; + case 'todolist' : return $this->todolist();break; + case 'adddomain' : return $this->addDomain();break; + case 'adddomaineasy' : return $this->addDomainEasy();break; + case 'adddomaineasyip' : return $this->addDomainEasyip();break; + case 'transferdomain' : return $this->transferDomain(); break; + case 'deletedomain' : return $this->deleteDomain();break; + case 'addemailuser' : return $this->addEmailUser();break; + case 'addftpuser' : return $this->addFtpUser();break; + case 'addftptothispaneluser' : return $this->addFtpToThisPaneluser();break;# added in 7.6.2009 + case 'add_ftp_special' : return $this->add_ftp_special();break; + + case 'userop' : return $this->userop();break; + case 'domainop' : return $this->domainop();break; + case 'addmysqldb' : return $this->addMysqlDb(); break; + case 'addmysqldbtouser' : return $this->addMysqlDbtoUser(); break; + case 'addpaneluser' : return $this->addPanelUser();break; + case 'addpaneluserwithpredefinedplan' : return $this->addPanelUserWithHostingPlan();break; + case 'editpaneluser' : return $this->editPanelUser();break; + case 'editftpuser' : return $this->editFtpUser();break; + + // Domain ordering settings which are no longer used + // case 'domainsettings' : return $this->domainSettings();break; + + case 'logout' : return $this->logout();break; + case 'daemon' : return $this->daemon();break; + case 'test' : return $this->test(); break; + case 'aboutcontactus' : return $this->aboutcontactus();break; + case 'applyforaccount' : return $this->applyforaccount();break; + case 'applyfordomainaccount' : return $this->applyfordomainaccount();break; + case 'setconfigvalue2' : return $this->setConfigValue2($id);break; + case 'customhttp' : return $this->customHttpSettings();break; + case 'addcustomhttp' : return $this->addCustomHttp();break; + case 'deletecustom' : return $this->deleteCustomSetting();break; + case 'customdns' : return $this->customDnsSettings();break; + case 'addcustomdns' : return $this->addCustomDns();break; + case 'dbedituser' : return $this->dbEditUser();break; + case 'dbadduser' : return $this->dbAddUser();break; + + case 'custompermissions' : return $this->custompermissions();break; + case 'addcustompermission' : return $this->addcustompermission();break; + + case 'editemailuser' : # same as below + case 'editemailuserself' : return $this->editEmailUser();break; + + case 'editemailuserautoreplyself': + case 'editemailuserautoreply' : return $this->editEmailUserAutoreply();break; + + case 'editemailuserpasswordself': + case 'editemailuserpassword' : return $this->editEmailUserPassword();break; + case 'changetemplate' : return $this->changetemplate();break; + case 'addredirect' : return $this->addRedirect();break; + case 'adddomainsslcert' : return $this->addDomainSSLCert();break; + case 'serverstatus' : return $this->serverStatus();break; + case 'setlanguage' : $this->setLanguage($id);$this->displayHome();break; + case 'setdefaultdomain' : $this->setDefaultDomain();$this->displayHome();break; + + case 'dologin' : # default anasayfa, same as below: + case '' : $this->displayHome();break; + + # virtual machine (vps) opcodes: + case 'vps_home' : return $this->call_func_in_module('Vps_Module','vps_home'); break; + case 'vps' : return $this->call_func_in_module('Vps_Module','vps'); break; + case 'vps_mountimage' : return $this->call_func_in_module('Vps_Module','vps_mountimage'); break; + case 'vps_dismountimage' : return $this->call_func_in_module('Vps_Module','vps_dismountimage'); break; + case 'add_vps' : return $this->call_func_in_module('Vps_Module','add_vps'); break; + + + default : return $this->errorText("Internal EHCP Error - Undefined Operation: $op
This feature may not be complete.");break; + + }# switch + return True; + +}# func runop + +function getWWWUser(){ + return determineFTPUserFromCMD(); +} + +function getBindUser(){ + return determineBindUserFromCMD(); +} + +function getPHPFPMName(){ + return determinePHPFPMName(); +} + +function set_ehcp_dir($dirname){ + # extra variables will be removed later, only one should be used. + $this->ehcpdir=$dirname; + $this->mydir=$dirname; + $this->conf['ehcpdir']=$dirname; +} + +function setInitialMiscConfigOptionDefaultsPostInstall(){ + // Should only really be called once post EHCP installation + // Don't call this function more than once or config values could be reset. + $success = $this->setConfigValue('disableeditapachetemplate','Yes'); // Prevent apache2 template modifications by non-admin users... + $success2 = $this->setConfigValue('disableeditdnstemplate','Yes'); // Prevent dns template modifications by non-admin users... + $success3 = $this->setConfigValue('forcedeletesubdomainfiles','Yes'); // Delete files under subdomain home directory when subdomain is deleted by default + $success4 = $this->setConfigValue('useglobalsslcert','Yes'); // Use invalid system default global https cert for SSL sites by default + $success5 = $this->setConfigValue('enablewildcarddomain','Yes'); // Use wildcard domains and DNS + + return $success && $success2 && $success3 && $success4 && $success5; +} + +function initialize(){ + # burda herhangi class initialization yapilacak.. basta yapilacak isler.. + global $commandline,$ehcpversion; + #if(!$commandline)$this->output.="".$this->appname."

"; + $this->myversion=$ehcpversion; + + $this->connectTodb(); + $this->debugecho("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4,false); + $this->syncConfigs(); + + $this->passivefilt="status<>'".$this->status_active."' or status is null"; + $this->activefilt="status='".$this->status_active."'"; + $this->loadLanguage(); # load default en to handle errors in loadconfig, + $this->checkInstall(); + $this->loadConfig(); + + if(!$this->isNoPassOp() and $this->requirePassword ) $this->securitycheck(); + $this->loadLanguage(); # load again to activate actual lang in config. + + if($this->isadmin()) { + $this->globalfilter=''; # burasi, securitycheck den sonra olmali. isadmin yoksa calismaz. + } else $this->globalfilter="(reseller='".$this->activeuser."' or panelusername='".$this->activeuser."')"; + + if(!$this->isadmin()) { + $userinfo=$this->query("select * from ".$this->conf['paneluserstable']['tablename']." where panelusername='$this->activeuser'", "dologin2"); + $this->userinfo=$userinfo[0]; + if($this->userinfo['maxpanelusers']>0) $this->isreseller=True; + } + + $this->loadServerPlan(); + + $HTTPMode = $this->EHCPIsUsingHTTPS() ? "https://" : "http://"; + $this->url = $HTTPMode . $this->conf['dnsip'] . $_SERVER['REQUEST_URI']; + + if($this->isloggedin) $this->output.=$this->check_failed_logins(); + if($commandline) $this->echoln("Finished initialize"); + #$this->check_mysql_connection(); +} + +function counter_reached($counter,$count){ + # can be used to count something... + if(intval($this->miscconfig[$counter])>0) { + $nextval=intval($this->miscconfig[$counter])-1; + $this->setConfigValue($counter,$nextval); + return False; # check sometime, + } + $this->setConfigValue($counter,$count); + return True; +} + +function check_ehcp_version(){ + global $ehcpversion; + if($this->latest_version<>'') return; # check once + if(!$this->counter_reached('versionwarningcounter',20)) return False; # check 20 login later again. + + $this->latest_version=trim(@file_get_contents("http://www.ehcpforce.tk/latest_version.txt")); + if($this->latest_version<>'' and $this->latest_version<>$ehcpversion) { + $str="Your EHCP Force Edition version ($ehcpversion) is different than the latest version ($this->latest_version). Either your EHCP Force Edition installation is old, or you are using a new beta/test version. Check here for updates!"; + $this->warnings.=$str; + $this->infotoadminemail($str,"Version Warning for ".$this->dnsip,false); + } +} + +function loadServerPlan(){ + $this->singleserverip=$this->conf['dnsip']; # if there is only one server... + #$this->output.=__FUNCTION__.":".$this->singleserverip."
"; + # more servers will be coded here... +} + +function load_module($name){ + if(!defined($name.'_file_loaded')) { + $this->echoln2(__FUNCTION__.": Sory, that module file not loaded yet. check code. (php autoload does not work with CLI)"); + return False; + } + if(gettype($this->$name)<>'object') $this->$name=new $name($this,$name); # initialize new module, only if not done before. + return True; +} + +function call_func_in_module($name,$func,$params=Null){ + if(!$this->load_module($name)) return False; + + if($params==Null) return $this->$name->$func(); # a function with no args + else return $this->$name->$func($params); # a func with named arguments (named array), as used in many parts of this file +} + +function check_module_tables(){ + # to be coded later. +} + +function activate(){ + $alanlar=array('panelusername','code','newpass'); + foreach($alanlar as $al) global $$al; + $degerler=$this->getVariable($alanlar); + + if($panelusername) { + $info=$this->getPanelUserInfo('',$panelusername); + $email=$info['email']; + if($email=='') return; + } + + + if(!$panelusername){ + $this->output.=inputform5(array( + array('panelusername', 'lefttext'=>'Panel Username:') + + )); + } elseif($panelusername and !$code) { + $hash=get_rand_id(10); + $r=$this->executeQuery("insert into hash (email,hash)values('$email','$hash')"); + $msg="Dear EHCP Force User,

Your EHCP activation code is: $hash"; + $this->sendEmail($email, "EHCP Activation Code", $msg); + $this->output.="An activation code was sent to your email address of $email. Please insert this code now:
".inputform5(array( + array('panelusername', 'lefttext'=>'Panel Username:'), + array('code', 'lefttext'=>'Code:'), + array('newpass', 'lefttext'=>'New Password:') + )); + } elseif($panelusername and $code) { + $filt3="email='$email' and hash='$hash'"; + $sayi=$this->recordcount("hash",$filt3); + if($sayi==0) $this->errorTextExit("Invalid activation information received. Please verify the activation code that was sent to your email."); + + if($this->conf['logintable']['passwordfunction']==''){ + $set="'$newpass'"; + } else { + $set=$this->conf['logintable']['passwordfunction']."('$newpass')"; + } + + $this->executeQuery("update panelusers set status='active',{$this->conf['logintable']['passwordfield']}=$set where status='passive' and panelusername='$panelusername'"); + } + +} + +function pagerewrite(){ + global $op2,$_insert; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $this->output.="This function is being tested with nginx only
"; + + $alanlar=array('frompage','topage','redirecttype'); + foreach($alanlar as $al) global $$al; + $degerler=$this->getVariable($alanlar); + + $table=$this->conf['customstable']; + + + if($op2=='add') { + + if($_insert){ + switch($this->miscconfig['webservertype']) { + case 'nginx': + if($redirecttype=='exactmatch') $val="rewrite ^($frompage)\$ $topage break; \n"; + else $val="rewrite $frompage $topage break; \n"; + break; + + #case 'apache2: + default: $this->errorTextExit("Your webserver does not support changing the EHCP GUI directory: ".$this->miscconfig['webservertype']); + } + + #$q="insert into customsettings (panelusername,domainname,name,`value`,webservertype) values ('$this->activeuser','$domainname','pagerewrite','$val','".$this->miscconfig['webservertype']."')"; + #if($this->executeQuery($q)) $this->output.="Ekleme tamam - OK"; + $this->addCustomHttpDirect($domainname,$val,"pagerewrite"); + + }else{ + $alanlar=array(array('frompage','righttext'=>''),array('topage'),array('redirecttype','radio','secenekler'=>array('exactmatch'=>'Exact Match Ex: frompage: /basvuru topage: /en/basvuru.html','partialmatch'=>'Partial Match, nginx style, examples'))); + $this->output.=inputform5($alanlar); + } + $this->output.="nginx, For partial, examples:
+ frompage: ^(/download/.*)/media/(.*)\..*$
+ topage: $1/mp3/$2.mp3
+
+ frompage: ^/users/(.*)$
+ topage: /showuser.php?uid=$1
"; + + } else + $this->listTable("Page redirects:","customstable","domainname='$domainname' and comment='pagerewrite'"); + + $this->showSimilarFunctions("pagerewrite"); +} + +function upload_file($srcfile,$dstfile){ + $srcfilename=$_FILES[$srcfile]['name']; + + $this->output.= "Copy (".$_FILES[$srcfile]['tmp_name'].") -> ".$dstfile; + + if(copy($_FILES[$srcfile]['tmp_name'], $dstfile)) { + $this->output.= "
Dosya yükleme başarılı
"; + $this->output.= "File Name :".$_FILES[$srcfile]['name']."
"; + $this->output.= "File Size :".$_FILES[$srcfile]['size']."
"; + $this->output.= "File Type :".$_FILES[$srcfile]['type']."
"; + } + else { + $this->output.="
Dosya yüklerken Hata oluştu ($path)
".print_r2($_FILES); + } +} + +function adjust_ssl(){ + /* +# steps for ssl adjust +openssl genrsa -out server.key 2048 +# prepare LocalServer.cnf +openssl req -new -key server.key -out server.csr -config LocalServer.cnf +# send your server.csr to your Certificate company. +# upload key files in ehcp, + + * */ + $alanlar=array("step","_insert",'country_name','state','city','company','unit_name','common_name','email','SSLCertificateKeyFile'); + foreach($alanlar as $al) global $$al; + $this->getVariable($alanlar); + $this->requireAdmin(); # şimdilik fazla güvenlik almadım, ondan... + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + # howto: http://www.digicert.com/ssl-certificate-installation-apache.htm + $waitstr="Your ssl config is being built now, wait until finished, retry here"; + $file1=$this->ehcpdir."/upload/LocalServer_$domainname.cnf"; + $file2=$this->ehcpdir."/upload/ssl_generated"; # + + + if(!$step){ + unlink($file1); # remove file if exists + $params=array( + array('country_name','righttext'=>'Country Name (2 letter code) [ex:TR]'), + array('state','righttext'=>'State or Province Name (full name) [Some-State], ex: Yorks'), + array('city'), + array('company','righttext'=>'optional, Your organization name, i.e, company'), + array('unit_name','righttext'=>'Organizational Unit Name (eg, section)'), + array('common_name','righttext'=>'(www.yourdomain.com, fqdn, or *.yourdomain.com to generate for all subdomains) THIS IS MOST IMPORTANT PART this should be the Fully Qualified Domain Name (FQDN) or the web address for which you plan to use your Certificate, e.g. the area of your site you wish customers to connect to using SSL. For example, an SSL Certificate issued for yourdomain.com will not be valid for secure.yourdomain.com, unless you use wildcard *.yourdomain.com'), + array('email','righttext'=>'optional'), + array('step','hidden','default'=>'1') + ); + + $this->output.="This is experimental, will be improved:
Step 1: CSR Generation:".inputform5($params)." Skip to step 2 if you already generated your key files before."; + } elseif($step==1) { + $out=" +[ req ] +prompt = no +distinguished_name = server_distinguished_name + +[ server_distinguished_name ] +commonName = $common_name +stateOrProvinceName = $state +countryName = $country_name +emailAddress = $email +organizationName = $company +organizationalUnitName = $unit_name"; + + file_put_contents($file1,$out); + $this->addDaemonOp('generate_ssl_config1','',$domainname,$file1,'generate_ssl_config'); + $this->output.=$waitstr; + } elseif($step==2){ + if(file_exists($file2)) $this->output.="Now, put/send your CSR (Certificate Signing Request) to your Certificate Company:
".file_get_contents($this->ehcpdir."/server.csr")."

After sending, Your may proceed to step 3 for importing crt files. "; + else $this->output.=$waitstr; + } elseif($step==3) { + + $params=array( + array('SSLCertificateFile','fileupload','righttext'=>'should be your domain certificate file (eg. your_domain_name.crt)'), + array('SSLCertificateChainFile','fileupload','righttext'=>'should be the Chain certificate file, eg, certificate of certificate seller (eg. DigiCertCA.crt) '), + array('step','hidden','default'=>'2') + ); + + if(!file_exists($file2)) $params[]=array('SSLCertificateKeyFile','fileupload','righttext'=>'should be the key file generated when you created the CSR, (your_private.key)'); # if generated externally, for uploading to server. + # else $params[]=array('SSLCertificateKeyFile','hidden','default'=>'server.key'); # if generated by ehcp. + + $this->output.="This is experimental, will be improved: Now, upload files provided by your Certificate company:
Step 2:".inputform5($params); + } elseif($step==2) { + $files=array('SSLCertificateFile','SSLCertificateChainFile'); + if(!file_exists($file2)) $files[]='SSLCertificateKeyFile'; + + foreach($files as $file) { + $path=$this->ehcpdir."upload/"; + $this->upload_file($file,$path); + } + } + +} + +#include_once('modules/module_index.php'); # verdigi hata: Parse error: syntax error, unexpected T_INCLUDE_ONCE, expecting T_FUNCTION in /var/www/new/ehcp/classapp.php on line 1044 + +function information($id,$link=false){ + if($link) return " - ?"; + + switch($id){ + case 1: $out='The translation of this item is not complete. see languages folder or launchpad translation section';break; + default: $out=' Information id is not provided/wrong. see function '.__FUNCTION__.' in '.__FILE__;break; + } + $this->output.="
$out
"; +} + +function gui_multiserver_add_ftp_user_direct(){ + $params=array( + 'ftpserver'=>'96.31.91.67', + 'panelusername'=>'admin22', + 'ftpusername'=>'bvdene', + 'ftppassword'=>'1234', + 'homedir'=>'/var/www/bvdene', + 'domainname'=>'bvdene.com' + ); + #$this->output.="Adding ftp for remote:".print_r2($params); + $this->multiserver_add_ftp_user_direct($params); +} + +function checkFields($tb,$fields1,$fields2){ + # $fields1: that should exist, + # $fields2: that actually exist, + if(!$fields1 or !$fields2) return; + + + foreach($fields1 as $field=>$type){ + $found=false; + $needmodify=false; + + foreach($fields2 as $fsearch){ + + if($fsearch['Field']==$field) { + $found=True; + $bulunantip=$fsearch['Type']; + if($fsearch['Default']<>''){ + if($fsearch['Null']=='NO'){ + $bulunantip .= " NOT NULL"; + } + $bulunantip.=" default "; + if(!is_numeric($fsearch['Default']) && $fsearch['Default'] != "b'0'" && $fsearch['Default'] != "b'1'"){ + $bulunantip .= "'" . $fsearch['Default'] . "'"; + }else{ + $bulunantip .= $fsearch['Default']; + } + } + if($fsearch['Null']=='YES' and $fsearch['Default']=='') $bulunantip.=" default NULL"; + if($fsearch['Null']=='NO' and $fsearch['Default']=='') $bulunantip.=" default NOT NULL"; + + if(strstr($type,' default ')===false) { # if requested field has not default, remove it again, to match existing. that is, ignore differences in "default null" + $bulunantip=str_replace(array(" default NULL"," default NOT NULL"),array('',''),$bulunantip); + } + + if($bulunantip != $type) { + $needmodify=True; + #$this->output.="field check ($field -> $type): ".print_r2($fsearch); + $this->output.="Need modify: current:[ $bulunantip ] Should be:[ $type ]
".print_r2($fsearch); + } + break; + } + } + + if(!$found){ + $query="ALTER TABLE $tb ADD `$field` $type"; + if(!strpos($type,'default')) $query.=" NULL"; + + $this->output.="
This field is not found in database, fixing: $tb: $field, $type : query: $query , seting up new field..(this msg should appear once for this table/field)
"; + $this->executeQuery($query); + } + + if($needmodify){ + if(strstr($type,' default ')===false) $type.=" default NULL"; + $query="ALTER TABLE $tb change `$field` `$field` $type"; + $this->output.="
This field needs modification in database, fixing: $tb: $field, $type : query: $query , modifiying field..(this msg should appear once for this table/field)
"; + $this->executeQuery($query); + } + + } +} + +function checkTableExists($tb){ + $q="show tables like '".$tb['tablename']."'"; + $res=$this->query($q); + if(count($res)==0){ + $this->output.="
The table does not exist: ".$tb['tablename']; + if($tb['createtable']<>''){ + $this->executeQuery($tb['createtable']); + $this->output.=" Table setup in mysql complete.. (this msg should appear once for this table/field)
"; + + } else $this->output.=" but, the mysql createtable command is not defined in ehcp \$config, classapp.php"; + } +} + +function some_table_fixes(){ + $qq=array( + "update scripts set customfileownerships='vsftpd:www-data#wp-content\nvsftpd:www-data#wp-admin' where scriptname like '%wordpress%'" + ); + + foreach($qq as $q) $this->executeQuery($q); +} + +function checkTables(){ + # checks ehcp db tables for old tables that may have some missing fields, and add those fields if not present... especially useful for old ehcp installations... + # programmer should put new field definitions in conf variable in top of class. + # in progress.. + foreach($this->conf as $tb){ + if(!is_array($tb)) continue; + if($tb['tablename']=='') continue; # skip non-table configurations.. + $this->checkTableExists($tb); + + #$this->output.="Checking table..: $tb ---> ".$tb['tablename']."
"; + $fields1=$tb['checkfields']; + $tb=$tb['tablename']; + + $fields2=$this->query("SHOW COLUMNS FROM $tb"); + $this->checkFields($tb,$fields1,$fields2); + } + $this->check_module_tables(); + $this->some_table_fixes(); + + # other initialize for old ehcp's + $this->executeQuery("update emailusers set status='active' where status is null or status=''"); + +} + +function exportTable($tbname,$where='',$withoutid=True){ # export table data in mysql format + + + $fields=$this->query("SHOW COLUMNS FROM $tbname"); + $query="select * from $tbname"; + if($where<>'') $query.=" where $where "; + $res=$this->query($query); + $this->output.=print_r2($res); + $sql="-- $tbname table data export \n"; + foreach($res as $row){ + $sql.="insert into $tbname ("; + $fieldnum=0; + foreach($fields as $field){ # build sql of : insert into table (f1,f2,f3) values ('','',''); + if(!($field['Field']=='id' and $withoutid)) { + if($fieldnum>0) $sql.=","; + $sql.=$field['Field']; + $fieldnum++; + } + } + $sql.=")values("; + $fieldnum=0; + foreach($fields as $field){ + if(!($field['Field']=='id' and $withoutid)) { + if($fieldnum>0) $sql.=","; + if(isNumericField($field['Type'])) $quote=''; + else $quote="'"; + $sql.=$quote.$row[$field['Field']].$quote; + $fieldnum++; + } + } + $sql.=");\n"; + } + $sql.="\n"; + #$this->output.=""; + +} + +function exportDomain(){ + # may be used by admin, i will do an export/transfer mechanism for transfering from/to non-admin accounts, for resellers.. + $this->exportTable($this->conf['domainstable']['tablename']); + $this->exportTable($this->conf['ftpuserstable']['tablename']); +} + +function syncConfigs(){ +# does sync of webmail plugin configs, or any other configs, ehcp user&pass is written on other config files. +# added in ver 0.29.13, 2010-01-01, in first hours of 2010, happy new year ! +if(!$this->commandline) return; + +$filecontents=" +dbhost."'; +\$dbusername='".$this->dbusername."'; +\$dbpass='".$this->dbpass."'; +\$dbname='".$this->dbname."'; +?>"; + +writeoutput2("$this->ehcpdir/webmail/plugins/ehcp_change_pass/config.php",$filecontents,"w"); + +} + + +function setDefaultDomain(){ + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $this->executeQuery("delete from misc where panelusername='$this->activeuser'"); + $this->executeQuery("insert into misc (panelusername,name,`value`) values('$this->activeuser','defaultdomain','$domainname')"); + $this->output.="Domain is set as default: $domainname

"; +} + +function executeProg3($prog,$echooutput=False){ + # executes program and return output + if($echooutput) echo "\n".__FUNCTION__.": executing: ($prog)\n"; + exec($prog,$topcmd); + if(!is_array($topcmd)) return ""; + foreach($topcmd as $t) $topoutput.=$t."\n"; + $out=trim($topoutput); + if($echooutput and ($out<>'')) echo "\n$out\n"; + return $out; +} + +function check_program_service($progname,$start_opname,$stop_opname,$restart_opname){ + $this->output.="$progname: "; + $serviceCount=$this->executeProg3("ps ax | grep $progname | grep -v grep | wc -l"); + if ($serviceCount > 0) $this->output.="YES"; + else $this->output.="NO"; + $this->output.=" (Start | Stop | Restart) Attention, by stopping your services, you may lose your conn. to panel."; +} + +function serverStatus(){ + $this->requireAdmin(); + #-------------- deconectat edit --------------------------------------------------------- + # ehcpdeveloper note: in fact, these html should be abstracted from source. left as of now. + + $this->output.=""; + + // Show only the web server type that is activated + if($this->miscconfig['webservertype'] == "apache2"){ + $this->check_program_service('apache2','dostartapache2','dostopapache2','dorestartapache2'); + }else if($this->miscconfig['webservertype'] == "nginx"){ + $this->check_program_service('nginx','dostartnginx','dostopnginx','dorestartnginx'); + $this->check_program_service('php-fpm','dostartphp5fpm','dostopphp5fpm','dorestartphp5fpm'); + } + + $this->check_program_service('mysqld','dostartmysqld','dostopmysqld','dorestartmysqld'); + $this->check_program_service('vsftpd','dostartvsftpd','dostopvsftpd','dorestartvsftpd'); + $this->check_program_service('bind','dostartbind','dostopbind','dorestartbind'); + $this->check_program_service('postfix','dostartpostfix','dostoppostfix','dorestartpostfix'); + $this->output.="
"; + + $systemStatus=$this->executeProg3($this->ehcpdir."/misc/serverstatus.sh"); #moved the bash script in a separate file; this way it will be easyer to edit. + + $this->output.="

".$systemStatus."

"; + #-------------- end deconectat edit ----------------------------------------------------- + + + $topoutput=$this->executeProg3("top -b -n 1 | head -40"); + $this->output.="
Top output:
$topoutput
"; + + $topoutput=$this->executeProg3("tail -200 /var/log/syslog"); + $this->output.="
Syslog (to see this, you must chmod a+r /var/log/syslog on server console, adjust system for this):
$topoutput
"; + + return True; +} + +function adjust_system(){ + if($this->commandline) { + passthru2("chmod a+r /var/log/syslog"); + } else { + $this->add_daemon_op(array('op'=>__FUNCTION__)); + } + return True; +} + +function editApacheTemplate(){ + #$this->output.=print_r2($this->miscconfig); + + $templatefield=$this->miscconfig['webservertype'].'template'; + global $_insert,$apachetemplate,$$templatefield,$saveTemplate,$clearTemplate; + $this->getVariable(array('_insert','apachetemplate',$templatefield,'clearTemplate','saveTemplate')); + if($this->miscconfig['disableeditapachetemplate']<>'') $this->requireAdmin(); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $domaininfo=$this->domaininfo=$this->getDomainInfo($this->selecteddomain); + $this->output.="Careful, this a dangerous thing, you should know about webserver (".$this->miscconfig['webservertype'].", currently active) configuration syntax!
if syntax is broken, a series of fallback operations will be done to make your panel reachable, such as rebuilding config using default apache configuration
"; + + if($domaininfo['webserverips']=='' or $domaininfo['webserverips']=='localhost') $templateinfile=file_get_contents("apachetemplate"); # template different, if domain is served in another IP + else $templateinfile=file_get_contents("apachetemplate_ipbased"); + + // Check for global domain template + $globalDomainTemplate = $this->getGlobalDomainTemplate(); + + $success=True; + + + if(!$_insert){ + $template=$domaininfo[$templatefield]; + if($template==''){ + if(empty($globalDomainTemplate)){ + $template=$templateinfile; + }else{ + $template=$globalDomainTemplate; + } + } + + $inputparams=array( + array($templatefield,'textarea','default'=>$template,'cols'=>80,'rows'=>30, 'lefttext'=>'Current Apache Template:'), + array('saveTemplate','submit','default'=>'Save Template'), + array('clearTemplate','submit','default'=>'Revert to Default'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + }else { + if($clearTemplate){ + $success=$success && $this->executeQuery("update ".$this->conf['domainstable']['tablename']." set $templatefield='' where domainname='" . $domainname . "'"); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname); # sync only domain that is changed. not all domains... + $this->ok_err_text($success,"The custom template for the domain of " . $domainname . " has been successfully removed and the default template will now be used for the domain." ,"Failed to save apache modifications."); + }else if($saveTemplate){ + $continue = true; + + // Below is a messy way to check if the template was actually changed from the default global or EHCP default template + // But it has to be done this way since the template processing replaces certain variables and because textarea fields have \r\n for line breaks when database fields just have \n + if(!empty($globalDomainTemplate)){ + if($$templatefield==$this->escape(str_replace('{domainname}', $this->selecteddomain, $globalDomainTemplate))) { + $$templatefield=''; # if same as in default template file, do not store it in db. + $this->output.="
The apache template was not changed. No modified entries were stored in the database.
"; + $continue = false; + } + }else if($this->removeLineCharacterLiteralsFromString($$templatefield) == $this->removeLineCharacterLiteralsFromString($this->escape(str_replace('{domainname}', $this->selecteddomain, $templateinfile)))){ + $$templatefield=''; # if same as in default template file, do not store it in db. + $this->output.="
The apache template was not changed. No modified entries were stored in the database.
"; + $continue = false; + } + + if($continue){ + $success=$success && $this->executeQuery("update ".$this->conf['domainstable']['tablename']." set $templatefield='".$$templatefield."' where domainname='$domainname'"); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname); # sync only domain that is changed. not all domains... + $this->ok_err_text($success,"Apache modifications were successfully saved and stored in the database.","Failed to save apache modifications."); + } + } + } + $this->showSimilarFunctions('HttpDnsTemplatesAliases'); + return $success; +} + +function removeLineCharacterLiteralsFromString($str){ + $str = str_replace('\r\n', '', $str); + $str = str_replace('\r', '', $str); + $str = str_replace('\n', '', $str); + return $str; +} + +function editDomainAliases(){ + global $_insert,$aliases; + $this->getVariable(array('_insert','aliases')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $domaininfo=$this->domaininfo=$this->getDomainInfo($this->selecteddomain); + $this->output.="Enter one alias per line one by one
+ Example:
+ www.domain2.com
+ www.domain3.com
+ other.domain2.com
+
"; + $templateinfile=file_get_contents("dnszonetemplate"); + $success=True; + + if(!$_insert){ + $template=$domaininfo['aliases']; + $inputparams=array( + array('aliases','textarea','default'=>$template,'cols'=>80,'rows'=>30, 'lefttext'=>'Domain Aliases:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + + }else { + $success=$success && $this->executeQuery("update ".$this->conf['domainstable']['tablename']." set aliases='".$aliases."' where domainname='$domainname'"); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains-aliases'); # sync only that domain... + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns-aliases'); + $this->ok_err_text($success,"Domain alias(es) were successfully modified. ","Failed to modify domain alias(es)."); + } + + $this->showSimilarFunctions('HttpDnsTemplatesAliases'); + return $success; +} + +function editDnsTemplate(){ + global $_insert,$dnstemplate; + $this->getVariable(array('_insert','dnstemplate')); + if($this->miscconfig['disableeditdnstemplate']<>'') $this->requireAdmin(); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $domaininfo=$this->domaininfo=$this->getDomainInfo($this->selecteddomain); + $this->output.="Careful, this a dangerous thing, you should now about dns configuration syntax!
"; + $templateinfile=file_get_contents("dnszonetemplate"); + $success=True; + + if(!$_insert){ + $template=$domaininfo['dnstemplate']; + if($template=='') {$template=$templateinfile;} + + $inputparams=array( + array('dnstemplate','textarea','default'=>$template,'cols'=>80,'rows'=>30, 'lefttext'=>'Current DNS Template:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.=inputform5($inputparams); + + } else { + if($dnstemplate==$this->escape($templateinfile)) { + $dnstemplate=''; # if same as in default template file, do not store it in db. + $this->output.="
Template same as in template file, so, not stored in db
"; + } + $success=$success && $this->executeQuery("update ".$this->conf['domainstable']['tablename']." set dnstemplate='".$dnstemplate."' where domainname='$domainname'"); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,"Custom DNS entries were successfully saved and stored in the database.","Failed to save custom DNS entries."); + } + $this->showSimilarFunctions('HttpDnsTemplatesAliases'); + return $success; +} + +function changedomainserverip(){ + global $serverip; + $this->getVariable(array('serverip')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $domaininfo=$this->domaininfo=$this->getDomainInfo($this->selecteddomain); + + if(!$serverip){ + $inputparams=array( + array('serverip', 'lefttext'=>'Change Domain Server IP Address To:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.=inputform5($inputparams); + } else { + $success=$this->executeQuery("update ".$this->conf['domainstable']['tablename']." set serverip='$serverip' where domainname='$domainname'"); + $this->addDaemonOp("syncdns",'',''); + return $this->ok_err_text($success,"Server IP address was successfully updated.","Failed to update the server IP address."); + } + return True; +} + +function addRedirect(){ + global $todomain, $_insert, $set_redir, $delete_redir; + $this->getVariable(array('todomain', 'set_redir', 'delete_redir', '_insert')); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + $curRedirect = $this->getRedirectDomain($domainname); + if(!$_insert){ + $this->output.="Redirect Domain:
Include http:// or https://.
(custom apache/nginx templates will be reset and lost for $domainname if redirected)
".inputform5(array( + array('todomain', 'lefttext'=>'To:', 'default'=> $curRedirect), + array('set_redir','submit','default'=>'Set Redirect'), + array('delete_redir', 'submit', 'default'=>'Remove Redirect'), + array('op','hidden','default'=>__FUNCTION__) + )); + } else { + if($delete_redir){ + $success = $this->removeRedirectDomain($domainname); + + // If a redirect operation was successfully completed, add syncdomains op + if($success){ + $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + } + + return $this->ok_err_text($success,"Domain redirection for '" . $domainname . "' has been removed!", "Failed to remove redirection for '" . $domainname . "'!"); + }else if($set_redir){ + if(inputValid($todomain,'url')){ + // Strip trailing slashes + $todomain = removeAllTrailingSlashes($todomain); + $success = $this->setRedirectDomain($domainname, $todomain); + + // If a redirect operation was successfully completed, add syncdomains op + if($success){ + $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + } + + return $this->ok_err_text($success,"Domain '" . $domainname . "' is now redirected to '" . $todomain . "'.","Failed to redirect domain '" . $domainname . "' to '" . $todomain . "'!"); + }else{ + $success=false; + return $this->ok_err_text($success,"","Redirect URL '" . $todomain . "' is invalid."); + } + } + } + + $this->showSimilarFunctions('redirect'); + return True; +} + +function addDomainSSLCert(){ + global $ssl_cert, $ssl_cert_key, $ssl_cert_chain, $_insert, $set_ssl, $delete_ssl, $ssl_use_letsenc, $ssl_wild_card, $ssl_redirect_https, $lets_enc_additional_hosts; + $this->getVariable(array('ssl_cert', 'ssl_cert_key', 'ssl_cert_chain', 'delete_ssl', 'set_ssl', '_insert', 'ssl_use_letsenc', 'ssl_wild_card', 'ssl_redirect_https', 'lets_enc_additional_hosts'), true); + unset($arr); // Clear array + + // Make sure SSL is enabled on the web server... + if($this->miscconfig['webservermode']=='ssl' || $this->miscconfig['webservermode']=='sslonly'){ + + if($this->isadmin() || (!$this->isadmin() && !empty($this->miscconfig['allowcustomsslnonadmin']))){ + + // Make sure domain is selected + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + $curSSLSettingsForDomain = $this->getSSLSettingForDomain($domainname); + if(!$_insert){ + + if($this->miscconfig['webservermode']=='ssl'){ + $toAdd = array('ssl_redirect_https','checkbox','default'=>'1','lefttext'=>'Redirect All HTTP Requests to HTTPS:','checked'=>$curSSLSettingsForDomain["redir_https"]); + } + + $letsEncHTML = array( + array('ssl_use_letsenc', 'submit', 'default'=>'Use FREE SSL'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $customSSLHTML = array( + array('ssl_cert', 'textarea', 'lefttext'=>'SSL Certificate (Raw Text):', 'default'=> $curSSLSettingsForDomain["cert"]), + array('ssl_cert_key', 'textarea', 'lefttext'=>'SSL Certificate Private Key (Raw Text):', 'default'=> $curSSLSettingsForDomain["key"]), + array('ssl_cert_chain', 'textarea', 'lefttext'=>'SSL Certificate Chain (Raw Text):', 'default'=> $curSSLSettingsForDomain["chain"]), + array('ssl_wild_card','checkbox','default'=>'1','lefttext'=>'Is Wildcard Certificate:','checked'=>$curSSLSettingsForDomain["wildcard"]), + array('set_ssl', 'submit','default'=>'Save SSL Settings'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $deleteSSLHTML = array( + array('delete_ssl', 'submit', 'default'=>'Remove Certificate & Reset SSL Settings'), + array('op','hidden','default'=>__FUNCTION__) + ); + + if($this->isadmin()){ + $additionalHostsToProtectLetsEnc = array('lets_enc_additional_hosts', 'textarea', 'lefttext'=>'Additional Valid Let\'s Encrypt SSL Hosts:

(in case you have a custom web template and want to protect additional hosts that are not EHCP configured subdomains)
(Takes the format of ns3.otherdomain.com{skipdomain},ns4=/var/www/new/ehcp;nextsubhost,n88,a9=/location)
subdomains (without domains) separated by ","
along with optional {skipdomain} if you don\'t want to append the domain name to the entry,
optional path specified with "=" (defaults to domain httpdocs path if left out),
next extry follows ";"
Leave blank if you don\'t know what you\'re doing.

', 'default'=> $curSSLSettingsForDomain["lets_enc_additional_hosts"], 'cssclass'=> 'ehcp-all-hide ehcp-all-adminAdvancedOption', 'skip-ending-colon'=>true); + array_unshift($letsEncHTML, $additionalHostsToProtectLetsEnc); + } + + if($this->hasValueOrZero($toAdd)){ + array_unshift($letsEncHTML, $toAdd); + array_splice($customSSLHTML, 4, 0, array($toAdd) ); // splice in at position 4 + } + + $this->output.="

SSL Certificate Settings for $domainname:

" . $curSSLSettingsForDomain["ssl_status"] . "

Use Free SSL from Let's Encrypt

"; + + if($this->isadmin()){ + $this->output.= ""; + } + + $this->output .= inputform5($letsEncHTML) . "

Click to Use Custom SSL

" .inputform5($customSSLHTML) . "

Click to Remove and Reset SSL Configuration for Domain

" . inputform5($deleteSSLHTML) . "
"; + + } else { + if($delete_ssl){ + $success = $this->removeSSLSettingForDomain($domainname); + + // If a redirect operation was successfully completed, add syncdomains op + if($success){ + $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + } + + return $this->ok_err_text($success,"Domain SSL settings for '" . $domainname . "' have been removed!", "Failed to remove SSL settings for '" . $domainname . "'!"); + }else if($set_ssl){ + $ssl_cert_nonescaped = strip_tags(trim($_POST["ssl_cert"])); + $ssl_cert_key_nonescaped = strip_tags(trim($_POST["ssl_cert_key"])); + $ssl_cert_chain_nonescaped = strip_tags(trim($_POST["ssl_cert_chain"])); + + if(!empty($ssl_cert) && !empty($ssl_cert_key)){ + if(inputValid($ssl_cert,'certificate') && inputValid($ssl_cert_key,'certificate_key')){ + // To do - better ssl cert chain validation??? + if((!empty($ssl_cert_chain) && inputValid($ssl_cert_chain,'certificate') && testCertificateChainValid($ssl_cert_chain_nonescaped)) || empty($ssl_cert_chain)){ + if((!empty($ssl_cert_chain) && makeSureSSLTestChainFileMatches($ssl_cert_chain_nonescaped)) || empty($ssl_cert_chain)){ + if(testCertificateAndPrivateKeyHashMatch($ssl_cert_nonescaped, $ssl_cert_key_nonescaped)){ + if(makeSureSSLTestFileMatches($ssl_cert_nonescaped, $ssl_cert_key_nonescaped)){ + $arr["cert"] = $ssl_cert; $arr["key"] = $ssl_cert_key; $arr["chain"] = $ssl_cert_chain; + if(isset($ssl_wild_card) && !empty($ssl_wild_card)){ + $arr["wildcard"] = 1; + }else{ + $arr["wildcard"] = 0; + } + + if(isset($ssl_redirect_https) && !empty($ssl_redirect_https)){ + $arr["redir_https"] = 1; + }else{ + $arr["redir_https"] = 0; + } + + $success = $this->setSSLSettingForDomain($domainname, $arr); + + // Run daemon ops if successful + if($success){ + $success=$success && $this->addDaemonOp("process_ssl_certs",'xx',$domainname,'','handle creation of ssl cert files'); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + } + + return $this->ok_err_text($success,"Domain '" . $domainname . "' will use the custom SSL certificate settings provided.","Failed to save custom SSL settings for '" . $domainname . "'!",""); + }else{ + $success=false; + return $this->ok_err_text($success,"","Test file contents do not match entered key or certificate.  Please try again."); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","Certificate and key hash do not match, or the certificate and key combo is not valid!"); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","Test file contents do not match entered chain certificate.  Please try again."); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","Certificate chain is invalid!"); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","You must enter a valid certificate and private key for custom SSL settings!"); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","The SSL certificate and private key are required!"); + } + }else if($ssl_use_letsenc){ + if(isset($ssl_redirect_https) && !empty($ssl_redirect_https)){ + $arr["redir_https"] = 1; + }else{ + $arr["redir_https"] = 0; + } + + if($this->isadmin()){ + if(isset($lets_enc_additional_hosts) && !empty($lets_enc_additional_hosts)){ + $arr["lets_enc_additional_hosts"] = $lets_enc_additional_hosts; + }else{ + $arr["lets_enc_additional_hosts"] = ""; + } + } + + $success = $this->setLetsEncryptForDomain($domainname, $arr); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + return $this->ok_err_text($success,"Domain will use and automatically renew SSL certificate from Let's Encrypt.","Failed to configure domain to use SSL certificate from Let's Encrypt."); + } + } + }else{ + $success=false; + return $this->ok_err_text($success,"","Only the administrator of this server can setup custom SSL certificates for your domain.  Please contact support."); + } + }else{ + $success=false; + return $this->ok_err_text($success,"","SSL must be enabled on the web server before you can use custom domain SSL settings."); + } + return True; +} + + +function cmsEditPages(){ + global $output; + + $grup=$this->selecteddomain; + include_once("multicms/cmsindex.php"); +} + + +function updateWebstats(){ + global $skipUpdateWebstats; + if($skipUpdateWebstats or $this->miscconfig['enablewebstats']=='') { + # if you put webstats.sh in crontab + echo "\nSkipping ".__FUNCTION__." because of config directive (\$skipUpdateWebstats) or enablewebstats is not checked in options.\n"; + return false; + } + + $this->requireCommandLine(__FUNCTION__); + $res=$this->query("select domainname,homedir from domains where status='$this->status_active' and homedir<>''"); + $str=''; + foreach($res as $dom){ + passthru2("mkdir -p ".$dom['homedir']."/httpdocs/webstats/"); + $str.="webalizer -Q -p -n www.".$dom['domainname']." -o ".$dom['homedir']."/httpdocs/webstats ".$dom['homedir']."/logs/access_log -R 100 TopReferrers -r ".$dom['domainname']." HideReferrer \n"; + } + echo $str; + + writeoutput2("/etc/ehcp/webstats.sh",$str,"w"); + passthru2("chmod a+x /etc/ehcp/webstats.sh"); + passthru2("/etc/ehcp/webstats.sh"); + echo "\nwrite webstats file to /etc/ehcp/webstats.sh complete... need to put this in crontab or run automatically.. \n"; + +} + +function set_active_server_ip(){ + $this->requireAdmin(); + + global $ip,$_insert; + $this->getVariable(array('ip','_insert')); + + if($_insert){ + if($ip<>'') $this->validate_ip_address($ip); + $this->setConfigValue('activewebserverip',$ip); + $this->output.='Default Webserver Ip changed in ehcp (not in system)'; + } else { + $inputparams=array( + array('ip','righttext'=>'leave empty to make it default of your server', 'lefttext'=>'IP Address:') + ); + $this->output.="Change the server's main IP address that is used in this webserver:".inputform5($inputparams); + } + + $this->showSimilarFunctions('server'); +} + +function addServer(){ + $this->requireAdmin(); + + global $_insert,$id,$serveroption,$serverip,$accessip,$servertype,$password,$defaultmysqlhostname; + $this->getVariable(array('_insert','id','serveroption','servertype','serverip','accessip','password','defaultmysqlhostname')); + $this->output.="
This is not a cluster setup. These are Individual servers
"; + $res=True; + + if($servertype==''){ + $inputparams=array( + 'serverip', + array('accessip','righttext'=>'leave empty if same as server ip', 'lefttext'=>'Server IP Address:'), + array('servertype','radio','secenekler'=>array('mysql'=>'Mysql Database Server','binddns'=>'Bind DNS server','apache2'=>'Apache Web Server','nginx'=>'nginx Web Server')), + array('serveroption','radio','lefttext'=>'Server Option:','secenekler'=>array('usedalways'=>'This Server is used always in this ehcp','optional'=>'This server is optional, may be choosen')), + array('isdefault','radio','lefttext'=>'if Optional: Is Server Default ?','secenekler'=>array('yes','no')), + array('password','password','lefttext'=>'mysql root pass if server is mysql'), + array('defaultmysqlhostname','lefttext'=>'if mysql server: Default mysql user hostname/ip','righttext'=>'This is host of mysql user, to connect from,
You should write hostname/ip of your webserver here.. Otherwise, webserver cannot connect to your mysql server..') + ); + $this->output.="Add Server:".inputform5($inputparams); + + } else { + $this->output.="Adding server."; + if($accessip=='')$accessip=$serverip; + + $q="insert into servers (servertype,ip,accessip,mandatory,password,defaultmysqlhostname) values ('$servertype','$serverip','$accessip','".($serveroption=='usedalways'?'E':'H')."','$password','$defaultmysqlhostname')"; # E=Yes, H=No + $res=$this->executeQuery($q); + $this->ok_err_text($res,"Successfully added an additional server.",'Failed to add an additional server.'); + } + $this->showSimilarFunctions('server'); + + return $res; + +} + +function advancedsettings(){ + $this->requireAdmin(); + + global $_insert; + $this->getVariable(array('_insert')); + + $optionlist=array( + array('morethanoneserver','checkbox','righttext'=>'(This is experimental)','checked'=>$this->miscconfig['morethanoneserver'],'default'=>'Yes'), + array('mysqlcharset','lefttext'=>'Default mysql charset for new databases','righttext'=>'Example: DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci','default'=>$this->miscconfig['mysqlcharset']), + array('server_id','lefttext'=>'The id of this server, assigned by you, may be empty','righttext'=>'Example: 1 or home, This will be used in future for auto dyndns service inside ehcp','default'=>$this->miscconfig['server_id']), + array('defaultdnsserverips','lefttext'=>'Default dns server ip\'s that will host new domains:','righttext'=>'Enter list of ip\'s of your dnsservers here, comma separated list (for this server, you may use localhost)','default'=>$this->miscconfig['defaultdnsserverips']), + array('defaultwebserverips','lefttext'=>'Default webserver ip\'s that will host new domains:','righttext'=>'Enter list of ip\'s of your webservers here, comma separated list (for this server, you may use localhost)','default'=>$this->miscconfig['defaultwebserverips']), + #array('defaultwebservertypes','lefttext'=>'Webserver type\'s that will run on those webservers above:','righttext'=>'Enter list of webserver type\'s of your webservers here, comma separated list (nginx or apache2, default is apache2 for all if left empty)','default'=>$this->miscconfig['defaultwebservertypes']), + array('defaultmailserverips','lefttext'=>'Default mailserver ip\'s that will host new domains:','righttext'=>'Enter list of ip\'s of your mailservers here, comma separated list (for this server, you may use localhost)','default'=>$this->miscconfig['defaultmailserverips']), + array('webservertype','radio','default'=>$this->miscconfig['webservertype'],'righttext'=>'webserver type of this server, default apache2, do not change this unless you know what you are doing','secenekler'=>array('apache2'=>'apache2','nginx'=>'nginx')), + array('webservermode','radio','default'=>$this->miscconfig['webservermode'],'righttext'=>'Set the SSL mode of the server. The default is non-ssl for port 80 connections (http). SSL is a mixed mode where both port 80 (HTTP) and 443 (HTTPS) resolve. SSLOnly is port 443 HTTPS only.','secenekler'=>array('ssl'=>'ssl','sslonly'=>'sslonly','nonssl'=>'nonssl')), + array('useglobalsslcert','checkbox','default'=>'Yes','lefttext'=>'Use global SSL certificate for domains WITHOUT user configured certificates','righttext'=>'If selected, an invalid but secure SSL certificate will be used for domains that don\'t have user configured SSL certificates only when a SSL mode is enabled. Leave unchecked if you only want to use SSL for domains that have their own SSL certificates. (Best Mode)','checked'=>$this->miscconfig['useglobalsslcert']), + array('allowcustomsslnonadmin','checkbox','lefttext'=>'Allow non-admin users to manage and use custom SSL certs for domains','default'=>'Yes','checked'=>$this->miscconfig['allowcustomsslnonadmin'],'righttext'=>'(may break webserver if certificates are invalid)'), + array('allowanonymousftptodirectory','lefttext'=>'Enable Anonymous READONLY FTP Access to Specific Directory:','righttext'=>'Leave blank to keep disabled.  DO NOT USE EHCP DIRECTORIES!','default'=>$this->miscconfig['allowanonymousftptodirectory']), + array('globalpanelurls', 'textarea', 'lefttext'=>'EHCP Panel Direct URL(s) (Protected by Let\'s Encrypt if SSL is Enabled):
(Takes the format of ns3.otherdomain.com,otherdomain.com)
Multiple entries separated by comma ",".
Leave blank if you don\'t want to configure any.
Use only domains or subdomains not currently configured in the panel for best results.

', 'default'=> $this->miscconfig['globalpanelurls'], 'skip-ending-colon'=>true), + array('sslcouriercertpath','lefttext'=>'POP3-SSL and IMAP-SSL Certificate Path:','righttext'=>'Leave blank to use the default self-signed certificate.','default'=>$this->miscconfig['sslcouriercertpath']), + array('restartcourier','checkbox','lefttext'=>'Reload Courier SSL (Refresh SSL Cert)','default'=>'Yes') + ); + + if($this->miscconfig['morethanoneserver']) { + #$optionlist[]='othersetting'; + $addstr="
List Servers
Add Server"; + } + + if($_insert){ + $old_webserver_type=$this->miscconfig['webservertype']."-".$this->miscconfig['webservermode']; + $old_anon_ftp_dir = $this->miscconfig['allowanonymousftptodirectory']; + $old_globalpanelurls = $this->miscconfig['globalpanelurls']; + $old_globalcert_type=$this->miscconfig['useglobalsslcert']; + $old_courier_ssl_cert=$this->miscconfig['sslcouriercertpath']; + + if($old_webserver_type=='') $old_webserver_type='apache2-nonssl'; + + $this->output.="Updating configuration..."; + #$this->debugecho(print_r2($optionlist),3,false); + + $optionsToIgnore = array('restartcourier'); + foreach($optionlist as $option) { + if(!in_array($option[0], $optionsToIgnore)){ + global ${$option[0]}; # make it global to be able to read in getVariable function..may be we need to fix the global thing.. + $this->getVariable($option[0]); + $this->setConfigValue($option[0],${$option[0]}); + } + } + + + $this->loadConfigWithDaemon(); # loads config for this session, to show below.. + $this->output.="..update complete."; + + $current_webserver_type=$this->miscconfig['webservertype']."-".$this->miscconfig['webservermode']; + if($old_webserver_type != $current_webserver_type || ($old_globalcert_type != $this->miscconfig['useglobalsslcert'] && $this->miscconfig['webservermode'] = "ssl")){ + $rebuildTriggered = true; + } + + if($old_globalpanelurls != $this->miscconfig['globalpanelurls']){ + + // Get array of entries + $entries = $this->explodeComma($this->miscconfig['globalpanelurls']); + $oldEntries = $this->explodeComma($old_globalpanelurls); + + // Check to make sure entries are valid + $valid = $this->checkValidGlobalPanelURLs($entries); + + if(!isset($rebuildTriggered) && $rebuildTriggered !== true && $valid){ + $this->addDaemonOp('syncdomains','','','','sync domains'); + } + + if(!$valid){ + // Reset its value + $this->setConfigValue('globalpanelurls',$old_globalpanelurls); + }else{ + // Change is valid, so remove the old lets encrypt certs if they exist + if($this->hasValueOrZero($old_globalpanelurls) && $oldEntries){ + $this->removeLetsEncryptCertificates($oldEntries); + } + } + + } + + // Handle courier POP3-SSL and IMAP-SSL certificate path + if($old_courier_ssl_cert != $this->miscconfig['sslcouriercertpath']){ + if($this->hasValueOrZero($this->miscconfig['sslcouriercertpath']) && !isextension($this->miscconfig['sslcouriercertpath'], 'pem')){ + // Reset its value since it's not valid + $this->setConfigValue('sslcouriercertpath',$old_courier_ssl_cert); + } + $this->addDaemonOp('handlecouriersslcert','','','','handlecouriersslcert'); + }else{ + // If they're the same, the certificate may have changed, so we allow a quick way to restart the courier ssl services + if($this->hasValueOrZero($_REQUEST["restartcourier"])){ + $this->addDaemonOp('resynccourierssl','','','','resynccourierssl'); + } + } + + // Handle anonymous ftp: + if($old_anon_ftp_dir != $this->miscconfig['allowanonymousftptodirectory']){ + $this->addDaemonOp('configure_anon_ftp','','','','configure_anon_ftp'); + } + + if($rebuildTriggered){ + $this->addDaemonOp('rebuild_webserver_configs','','','','rebuild_webserver_configs'); + } + + } else { + $optionlist[]=array('op','default'=>__FUNCTION__,'type'=>'hidden'); + $this->output.="Advanced Settings:
(In future: server plans will be done, most of these settings will be filled from serverplans)
". inputform5($optionlist).$addstr; + } + +} + +function explodeComma($input){ + if($this->hasValueOrZero($input)){ + if(stripos($input, ",") !== false){ + $entries = explode(",", $input); + }else{ + $entries[] = $input; + } + return $entries; + } + return false; +} + +function checkValidGlobalPanelURLs($urls){ + + foreach($urls as $entry){ + if(!$this->isValidDomain($entry) && !$this->isValidSubDomain($entry)){ + return false; + } + } + + return true; +} + +function listServers(){ + $this->requireAdmin(); + + $this->output.="Servers "; + $this->listTable("", "serverstable", $filter); + $this->showSimilarFunctions('server'); +} + +function otherpage($id){# de-selects a domain and display other page whose name is $id_lang.html , function written to be used later... + $this->deselectdomain2(); + return $this->displayHome($id); +} + +function otheroperations(){ # de-selects a domain and display other operations page.. or some other page + $this->deselectdomain2(); + if(!$this->isadmin() and $this->userinfo['maxdomains']>1) { + if($this->selecteddomain=='') $home='homepage_reseller_other'; + } elseif($this->isadmin()) { + $home='homepage_serveradmin_other'; + } + return $this->displayHome($home); +} + +function selectdomain($id){ # selects a domain and displays home + global $domainname; + $this->getVariable(array("domainname")); + + if($id<>'') $domainname=$id; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + #$this->output.="Domain selected... $domainname, id: $id
"; + + # reset search session values + $_SESSION['sess_arananalan']=''; + $_SESSION['sess_aranan']=''; + + $this->displayHome(); +} + +function updateInstallScriptSQL(){ + // Require's admin priv + $this->requireAdmin(); + $this->addDaemonOp("update_ez_install", '', 'xx', '', 'Update EZ Script Install SQL'); + $this->output.="

Easy installation script SQL has successfully been updated from the ehcpforce.tk master.

"; + + return True; +} + +function suggestnewscript(){ + global $name,$url,$scriptdirtocopy,$homepage,$description,$lastmsgtoehcpdeveloper; + $this->getVariable(array('name','url','scriptdirtocopy','homepage','description')); + + if(!$url){ + $inputparams=array( + array('name', 'lefttext'=>'Script Name:'), + array('url', 'lefttext'=>'Script URL:'), + array('scriptdirtocopy', 'lefttext'=>'Script Directory To Copy:'), + array('homepage', 'lefttext'=>'Script Homepage:'), + array('description','textarea', 'lefttext'=>'Script Description:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="Suggest a new application integration by providing a detailed description of the script. ".inputform5($inputparams). "The script may be added if approved by an admin. "; + + } else { + $this->output.="Thank you for your submission.  The script will be reviewed by the server admin and will be added if approved. "; + $subj="New Easy Install Script Integration Request"; + $msg="

EHCP Admin:

A user has suggested that an application be integrated with the easy installation scripts module.
Name of the script: $name
URL to Application: $url
Script Homepage: $homepage
Description: $description"; + $this->infotoadminemail($msg, $subj); + } +} + + + +function read_dir($path,$func="is_file"){ + $dirArray=array(); + $myDirectory = opendir($path); + while($entryName = readdir($myDirectory)) { + if($func("$path/$entryName") and $entryName<>'.' and $entryName<>'..' and $entryName <> 'all_templates') $dirArray[] = $entryName; + } + closedir($myDirectory); + return $dirArray; +} + +function changetemplate(){ + global $template; + $this->getVariable(array('template')); + $this->requireAdmin(); # only admin can change theme.... normally should be: everybody can change theme, theme of each user stored in their data, after login, every user should see its theme/lang... + # before login: default theme/lang... + + if(!$template){ + $dirArray=$this->read_dir("./templates","is_dir"); + $this->output.="Select the template :
"; + foreach($dirArray as $dir) + $this->output.="$dir
"; + } else { + $this->setConfigValue("defaulttemplate",$template); + $this->output.="Changed default template to : $template "; + $this->loadConfigWithDaemon(); + $this->displayHome(); + } +} + +function smallserverstats($isaret=''){ + global $ehcpversion; + $email=str_replace('@','((at))',$this->conf['adminemail']); # to prevent spam... + + + $out="
Small statistics of server:
Panel User count:".$this->recordcount($this->conf['logintable']['tablename'],''). + "
Domain Count:".$this->recordcount($this->conf['domainstable']['tablename'],''). + "
FTP users count:".$this->recordcount($this->conf['ftpuserstable']['tablename'],''). + "
Email users count:".$this->recordcount($this->conf['emailuserstable']['tablename'],'')."
$email
Version: $ehcpversion
$isaret
"; + + return $out; +} + + +function isNoPassOp(){ # is this operation a no password one? such as an application before login, no password required. + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__.": kontrol:".$this->op,4); + $nopassops=array("applyforaccount","applyfordomainaccount",'sifrehatirlat','activate'); + return in_array($this->op,$nopassops); + + #** dikkat, burada guvenlik kontrolu yapilmiyor, dikkat edilmesi lazim... +} + + +function options(){ + $this->requireAdmin(); + + global $edit,$_insert,$dnsip; + $this->getVariable(array('edit','_insert','dnsip','localip')); + #echo print_r2($this->miscconfig); + + # new style: options as an array, so, easy addition of new options.. + $optionlist=array( + array('updatehostsfile','checkbox','lefttext'=>'This machine is used for Desktop access too (Update hosts file with domains)','default'=>'Yes','checked'=>$this->miscconfig['updatehostsfile']), + array('localip','lefttext'=>'Local ip of server','default'=>$this->miscconfig['localip']), + array('dnsip','lefttext'=>'dnsip (outside/real/static ip of server)','default'=>$this->miscconfig['dnsip']), + array('dnsipv6','lefttext'=>'dnsip V6(outside/real/static V6 ip of server)','default'=>$this->miscconfig['dnsipv6'],'righttext'=>'Leave empty to disable (experimental even if enabled)'), + array('updatednsipfromweb','checkbox','lefttext'=>'Do you use dynamic ip/dns?','righttext'=>'Check this if your server is behind a dynamic IP','default'=>'Yes','checked'=>$this->miscconfig['updatednsipfromweb']), + array('banner','textarea','default'=>$this->miscconfig['banner']), + array('adminemail','lefttext'=>'Admin Email','default'=>$this->miscconfig['adminemail']), + array('defaulttemplate','default'=>$this->miscconfig['defaulttemplate']), + array('defaultlanguage','default'=>$this->defaultlanguage), + array('messagetonewuser','textarea','default'=>$this->miscconfig['messagetonewuser']), + array('disableeditapachetemplate','checkbox','lefttext'=>'Disable Custom http for non-admins','default'=>'Yes','checked'=>$this->miscconfig['disableeditapachetemplate'],'righttext'=>'This is a security measure to disable non-experienced users to break configs'), + array('disableeditdnstemplate','checkbox','lefttext'=>'Disable Custom dns for non-admins','default'=>'Yes','checked'=>$this->miscconfig['disableeditdnstemplate'],'righttext'=>'This is a security measure to disable non-experienced users to break configs'), + array('forcedeleteftpuserhomedir','checkbox','lefttext'=>'When an FTP Account is deleted, also delete ALL FILES and FOLDERS that used to be accessible by the deleted FTP account','default'=>'Yes','checked'=>$this->miscconfig['forcedeleteftpuserhomedir'],'righttext'=>'Will delete files that could be owned by a domain, subdomain, other user, or other FTP account. RECOMMENDED: Do NOT Enabled'), + array('forcedeletesubdomainfiles','checkbox','lefttext'=>'When a subdomain is deleted, delete the subdomain\'s files automatically too.','default'=>'Yes','checked'=>$this->miscconfig['forcedeletesubdomainfiles']), + array('turnoffoverquotadomains','checkbox','lefttext'=>'Turn off over quota domains','default'=>'Yes','checked'=>$this->miscconfig['turnoffoverquotadomains']), + array('quotaupdateinterval','default'=>$this->miscconfig['quotaupdateinterval'],'righttext'=>'interval in hours'), + array('userscansignup','checkbox','default'=>'Yes','checked'=>$this->miscconfig['userscansignup'],'righttext'=>'disabled by default, can users sign up for domains/ftp? (you should approve/reject them in short time)'), + array('enablewebstats','checkbox','default'=>'Yes','checked'=>$this->miscconfig['enablewebstats'],'righttext'=>'enabled by default, this can use some of server resources, so, disabling it may help some slow servers to speed up'), + array('enablewildcarddomain','checkbox','default'=>'Yes','checked'=>$this->miscconfig['enablewildcarddomain'],'righttext'=>'do you want xxxx.yourdomain.com to show your domain homepage? disabled by default, and shows server home, which is default index, ehcp home.'), + array('freednsidentifier','default'=>$this->miscconfig['freednsidentifier'],'righttext'=>'freedns.afraid.org unique identifier, for dynamic dns update, automatic; take your id from freedns.afraid.org if you want to use that. ') + + #array('singleserverip','default'=>$this->miscconfig['singleserverip']) + + ); + + + + if($_insert){ + $old_webserver_type=$this->miscconfig['webservertype']."-".$this->miscconfig['webservermode']; + if($old_webserver_type=='') $old_webserver_type='apache2-nonssl'; + + $this->output.="Updating configuration..."; + $this->validate_ip_address($dnsip); + + foreach($optionlist as $option) { + global ${$option[0]}; # make it global to be able to read in getVariable function..may be we need to fix the global thing.. + $this->getVariable($option[0]); + $this->setConfigValue($option[0],${$option[0]}); + } + + # options that use longvalue: + $this->setConfigValue("banner","",'value');# delete short value for banner, if there is any.. because longvalue is used for banner. + $this->setConfigValue("banner",$banner,'longvalue'); + + # operations that needs daemon or other settings. + + if($dnsip<>$this->miscconfig['dnsip']){ # fix all dnsip related config if dnsip is changed... + $this->addDaemonOp("fixmailconfiguration",'','','','fix mail configuration'); # fixes postfix configuration, hope this works..yes, works... + } + + $addSyncOpAfterSettingsReloaded = false; + if($enablewildcarddomain != $this->miscconfig['enablewildcarddomain']){ + $addSyncOpAfterSettingsReloaded = true; + } + + if($defaultlanguage) { # update for current session too.. + $_SESSION['currentlanguage']=''; + $this->defaultlanguage=$this->currentlanguage=$defaultlanguage; + } + + # load latest config again in this session. + $this->loadConfigWithDaemon(); # loads config for this session, to show below.. + if($updatehostsfile<>'') $this->addDaemonOp("updatehostsfile",'','','','update hostsfile'); # updateHostsFile degistiginden dolayi + if($addSyncOpAfterSettingsReloaded){ + $this->addDaemonOp('syncdomains','','','','sync domains'); + } + + $this->output.="..update complete."; + + } elseif ($edit) { + $optionlist[]=array('op','default'=>__FUNCTION__,'type'=>'hidden'); + $this->output.="

Options:


".inputform5($optionlist); + + } else { + $this->output.="

Options:


".print_r3($this->miscconfig,"$this->th Option Name $this->th Option Value "); + } + + $this->showSimilarFunctions('options'); + $this->debugecho(print_r2($this->miscconfig),3,false); +} + + +function settings(){ + $this->requireAdmin(); + + global $edit,$_insert,$dnsip,$group; + $this->getVariable(array('edit','_insert','group')); + #echo print_r2($this->miscconfig); + + # new style: options as an array, so, easy addition of new options.. +/*$ip="206.51.230.224"; +$netmask="255.255.255.0"; +$broadcast="206.51.230.255"; +$gateway="206.51.230.1"; +*/ + + if($group=='vps' or $group=='vpsadvanced') { + $this->load_module('Vps_Module'); + switch($group){ + case 'vps': $optionlist=$this->Vps_Module->vps_settings; break; + case 'vpsadvanced': $optionlist=$this->Vps_Module->vps_settings_advanced; break; + } + } + else $optionlist=array(); + + if($_insert){ + $this->output.="Updating settings for $group..."; + + + foreach($optionlist as $option) { + global ${$option[0]}; # make it global to be able to read in getVariable function..may be we need to fix the global thing.. + $this->getVariable($option[0]); + $this->setSettingsValue($group,$option[0],${$option[0]}); + } + + $this->loadConfigWithDaemon(); + $this->output.="..update complete."; + } else { + $optionlist[]=array('op','default'=>__FUNCTION__,'type'=>'hidden'); + $this->output.="

Settings:


".inputform5($optionlist); + + } + + #$this->showSimilarFunctions('options'); + #$this->print_r2($this->settings); + + if($group=='vps' or $group=='vpsadvanced') { + $this->showSimilarFunctions('vps'); + $this->output.="
Click rescan vps images & templates to check them on server, then wait 10sec, click vps settings again, to see them here

advanced vps settings(vps with 2 interface)
"; + } + + $this->debugecho(print_r2($this->miscconfig),3,false); +} + +function disableService($service){ + if(sysIsUsingSystemD()){ + passthru2("systemctl disable $service"); + }else{ + passthru2("update-rc.d -f $service remove"); + passthru2("update-rc.d $service disable"); + } +} + +function enableService($service){ + if(sysIsUsingSystemD()){ + passthru2("systemctl enable $service"); + }else{ + passthru2("update-rc.d $service defaults"); + passthru2("update-rc.d $service enable"); + } +} + +function rebuild_webserver_configs(){ + # this function will rebuild all webserver configs according to current choosen webserver type, ssl etc.. + $this->requireCommandLine(__FUNCTION__,True); + + # remove all webservers from auto-start + $this->disableService("nginx"); + $this->disableService("apache2"); + $this->disableService($this->php_fpm_name); + + if($this->miscconfig['webservertype']=='apache2'){ + // Web server mode changed so restore the original main config file if it exists + if(file_exists("/etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE")){ + passthru2("cp /etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE /etc/apache2/apache2.conf", true, true); + } + + // Make sure we rebuild password protected directories for apache as well + $this->handlePasswordProtectedDirs(); + return $this->rebuild_apache2_config(); + }else if($this->miscconfig['webservertype']=='nginx'){ + return $this->rebuild_nginx_config(); + } + + return False; # yukardaki webserver tipi degilse, başka bişey... +} + +function configure_anon_ftp(){ + # this function will configure VSFTPD for anonymous read only access if specified by an admin + $this->requireCommandLine(__FUNCTION__,True); + $shouldClearSettings = false; + + if(!empty($this->miscconfig['allowanonymousftptodirectory'])){ + $this->miscconfig['allowanonymousftptodirectory'] = removeInvalidChars($this->miscconfig['allowanonymousftptodirectory'], "directory"); + $this->miscconfig['allowanonymousftptodirectory'] = rtrim($this->miscconfig['allowanonymousftptodirectory'], '/'); + $this->setConfigValue('allowanonymousftptodirectory', $this->miscconfig['allowanonymousftptodirectory']); + + // Admin advanced feature, but let's do a little validation before we let em go wild. + if(strpos($this->miscconfig['allowanonymousftptodirectory'], "/var/www/") === FALSE && $this->miscconfig['allowanonymousftptodirectory'] != "/var/www" && inputValid($this->miscconfig['allowanonymousftptodirectory'], "directory_at_least_two_levels")){ + exec('bash /var/www/new/ehcp/scripts/anonymous_vsftpd.sh "' . $this->miscconfig['allowanonymousftptodirectory'] . '"'); + }else{ + // Option was not valid, so just reset it + $this->setConfigValue('allowanonymousftptodirectory', ''); + $shouldClearSettings = true; + } + } + + if((!isset($this->miscconfig['allowanonymousftptodirectory']) || empty($this->miscconfig['allowanonymousftptodirectory'])) || $shouldClearSettings){ + // Remove vsftpd anonymous access if previously setup + exec('bash /var/www/new/ehcp/scripts/anonymous_vsftpd.sh'); + } + + return true; +} + +function rebuild_apache2_config(){ + $this->requireCommandLine(__FUNCTION__,True); + + // Support SSL properly + if($this->miscconfig['webservermode']=='ssl'){ + $this->fixApacheConfigSsl(); + }else if($this->miscconfig['webservermode']=='nonssl') { + $this->fixApacheConfigNonSsl(); + }else if($this->miscconfig['webservermode']=='sslonly'){ + $this->fixApacheConfigSslOnly(); + } + + if($this->miscconfig['webservertype']=='apache2'){ + $this->enableService("apache2"); # make apache2 auto-start on reboot + } + $this->syncDomains(); + + return True; +} + +function rebuild_nginx_config(){ + $this->requireCommandLine(__FUNCTION__,True); + // include_once("install_lib.php"); + + if(!$this->getPHPFPMName()) { + $this->echoln("This server has no " . $this->php_fpm_name . " installed. install it before trying to switch to nginx. now, switching back to apache2"); + $this->enableService("apache2"); # make apache2 auto-start on reboot + $this->setConfigValue('webservertype','apache2'); + $this->loadConfigWithDaemon(); + rebuild_webserver_configs(); + return False; + } + + // Debug + //$this->writeToLogFile("Webmode is set to: " . $this->miscconfig['webservermode']); + + // Support SSL properly + if($this->miscconfig['webservermode']=='ssl'){ + $this->fixApacheConfigSsl(); + }else if($this->miscconfig['webservermode']=='nonssl') { + $this->fixApacheConfigNonSsl(); + }else if($this->miscconfig['webservermode']=='sslonly'){ + $this->fixApacheConfigSslOnly(); + } + + $this->enableService("nginx"); # make nginx auto-start on reboot + $this->enableService($this->php_fpm_name); # make nginx auto-start on reboot + + if($this->miscconfig['webservermode']=='ssl' && !$this->is_webserver_running()) { + $this->echoln2("webserver seems not working...appearantly, some error occured; rolling back to non-ssl mode again."); + $this->fixApacheConfigNonSsl(); + } + + return True; +} + +function writeToLogFile($message){ + $logFile = "/var/log/ehcpphp.log"; + if(!file_exists($logFile)){ + $stream = fopen("$logFile", "w+"); + }else{ + $stream = fopen("$logFile", "a+"); + } + $date = date('m/d/Y H:i:s'); + if(strlen($message) > 100){ + $longAster = "****************************************************************************\n"; + fwrite($stream, $longAster); + fwrite($stream, $date . "\n\n"); + fwrite($stream, $message . "\n"); + fwrite($stream, $longAster); + }else{ + fwrite($stream, $date . " - "); + fwrite($stream, $message . "\n"); + } + fclose($stream); +} + +function useNginxTemplates(){ + passthru2("rm -rvf /etc/nginx/sites-enabled/*", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/default.nginx /etc/nginx/sites-enabled/default", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/nginx.conf /etc/nginx/", true, true); + + // Update the variables + $this->updateNginxConfVariablesInFile(); + + passthru2("cp $this->ehcpdir/etc/nginx/apachetemplate.nginx $this->ehcpdir/apachetemplate", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/apachetemplate_ehcp_panel.nginx $this->ehcpdir/apachetemplate_ehcp_panel", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/redirect $this->ehcpdir/apachetemplate_redirect", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/apachetemplate.nginx $this->ehcpdir/apachetemplate_passivedomains", true, true); + passthru2("cp $this->ehcpdir/etc/nginx/apache_subdomain_template.nginx $this->ehcpdir/apache_subdomain_template", true, true); + /* + // Debug + $contentsOfFile = file_get_contents("$this->ehcpdir/apachetemplate"); + $this->writeToLogFile("In using nginxtemplates and contents of template is: " . $contentsOfFile); + */ +} + +function listSelector($arr,$print,$link,$linkfield='id',$className="EHCPListItem"){ + # for small lists that no paging required... + $res.=""; + foreach($arr as $item){ + $res.=""; + foreach($print as $pr){ + $res.=""; + } + $res.=""; + } + $res.="
".$item[$pr]."
"; + return $res; +} + +function getVariable($variables,$dotrim=true) { + # get variables by means of $_POST or $_GET globals.., makes them secure for sql injection + if(!is_array($variables)) $variables=array($variables); # accept non-array, single parameter + + $varCount=count($variables); + for ($i=0;$i<$varCount;$i++) { + $varname=$variables[$i]; + if(is_array($varname)) $varname=$varname[0]; # accept array members.. use 1st element for varname. + if($varname=='') continue; + + global ${$varname}; # make it global at same time.. may be disabled in future.. + + if($_POST[$varname]<>"") { + if(get_magic_quotes_gpc()) ${$varname}=stripslashes($_POST[$varname]); + else ${$varname}=$_POST[$varname]; + } else { + if(get_magic_quotes_gpc()) ${$varname}=stripslashes($_GET[$varname]); + else ${$varname}=$_GET[$varname]; + } + + // trim should occur before escaping + if($dotrim) ${$varname}=trim(${$varname}); + + // Escape each post variable + $tmp=@$this->escape(${$varname}); + if($tmp!==False) ${$varname}=$tmp; # otherwise, without a db connection, mysqli_real_escape_string returns false. this will skip that; no need to mysqli_real_escape_string when there is no db conn, I think. + + $values[$varname]=${$varname}; + }; + #echo print_r2($variables).print_r2($values); + return $values; # return values as an array too... may be used after disabling global variables... +} + + +function getDomain($table_description,$id){ # returns dommainname of record with id $id, from table with $table_description (defined in start of file with conf variable) + return $this->getField($this->conf[$table_description]['tablename'], "domainname", "id=$id"); +} + +function setField($table,$field,$value,$func,$wherecondition,$opname='',$isInt=false){ + # prepares an update query based on some parameters, for faster coding... + + $tablename=$this->conf[$table]['tablename']; + if($tablename=='') $tablename=$table; # works both if direct tablename is given, or "table description from conf" is given + + $query="update $tablename set $field="; + + if(!$isInt) $value="'$value'"; # surround value with ' if not integer.. + + if($func) {# function such as md5, password, encrypt + if($func=='encrypt') $set="$func($value,'ehcp') "; # encrypt is a special function that produces different results for different 2nd par.... + else $set="$func($value) "; + } + + else $set=" $value "; + + if($wherecondition) $wherestr=" where $wherecondition "; + + $query.=$set.$wherestr; + #$this->output.="
setfield: query: $query
"; + return $this->executeQuery($query, $opname); # this in turn calls adodb liberary for execute.. +} + +function adjustEmailAutoreply($email,$autoreplysubject,$autoreplymessage){ + # set db fields + $where="email='$email'"; + $this->setField('emailuserstable','autoreplysubject',$autoreplysubject,"",$where,"editemailuser-update email"); + $this->setField('emailuserstable','autoreplymessage',$autoreplymessage,"",$where,"editemailuser-update email"); + + $autoreplyenabled=($autoreplysubject<>'' and $autoreplymessage<>''); # if both not empty.. + + # adjust forwardings, if autoreply enabled, delete if not + $domainpart=getLastPart($email,'@'); # domain part of email + $beforeat=getFirstPart($email,'@'); + + $forwarddestination="$email,$beforeat@autoreply.$domainpart"; + $forwardcount=$this->recordcount("forwardings","destination='$forwarddestination'"); + + if($autoreplyenabled and $forwardcount==0){ + $success=$this->addEmailForwardingDirect($this->activeuser,$domainpart,$email,$forwarddestination); + } elseif (!$autoreplyenabled and $forwardcount>0){ + $success=$this->executeQuery("delete from forwardings where destination='$forwarddestination'"); + } + + if($autoreplyenabled) $this->output.="
Autoreply enabled for email: $email"; + + # add email transports if autoreply enabled, delete if not + # check if any email of that domain has autoreply enabled + + $autoreplycount=$this->recordcount("emailusers","domainname='$domainpart' and (autoreplysubject<>'' and autoreplymessage<>'')"); + $transportcount=$this->recordcount("transport","domainname='autoreply.$domainpart'"); + + if($autoreplycount>0 and $transportcount==0){ + $this->executeQuery("insert into transport (domainname,transport) values ('autoreply.$domainpart','ehcp_autoreply')"); + } elseif($autoreplycount==0 and $transportcount>0){ + $this->executeQuery("delete from transport where domainname='autoreply.$domainpart'"); + } + +} + +function editEmailUser(){ + global $id,$newpass,$newpass2,$_insert,$autoreplysubject,$autoreplymessage; + $this->getVariable(array('id','newpass','newpass2','_insert','autoreplysubject','autoreplymessage')); + + if($this->isEmailUser()){ # email users edits itself + $email=$this->activeuser; + } else { + $dom=$this->getDomain('emailuserstable',$id); + $this->requireMyDomain($dom); + $email=$this->query("select email from emailusers where id=$id"); + $email=$email[0]['email']; + } + $where="email='$email'"; + + if($_insert){ + if($newpass and ($newpass==$newpass2)){ + # what this mean: set password field of table emailuserstable with newpass, by applying encrypt function, with id=$id + $this->setField('emailuserstable','password',$newpass,"encrypt",$where,"editemailuser-update email pass"); + $this->output.="
Success email pass change. "; + #equivalent: $this->executeQuery("update ".$this->conf['emailuserstable']['tablename']." set password=encrypt($newpass) where id=$id ", "update email pass"); + } + $this->adjustEmailAutoreply($email,$autoreplysubject,$autoreplymessage); + + } else { + $info=$this->query("select autoreplysubject,autoreplymessage from emailusers where $where"); + $autoreplysubject=$info[0]['autoreplysubject']; + $autoreplymessage=$info[0]['autoreplymessage']; + + $inputparams=array( + array('newpass','password','lefttext'=>'New Password:','righttext'=>'Leave emtpy for no change'), + array('newpass2','password','lefttext'=>'New Password Again:','righttext'=>'Leave emtpy for no change'), + array('autoreplysubject','default'=>$autoreplysubject,'righttext'=>'Leave emtpy to disable autoreply', 'lefttext'=>'Auto Reply Subject:'), + array('autoreplymessage','textarea','default'=>$autoreplymessage, 'lefttext'=>'Auto Reply Message:'), + array('id','hidden','default'=>$id), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } + + $this->showSimilarFunctions('email'); +} + +function editEmailUserPassword(){ + global $id,$newpass,$newpass2,$_insert,$autoreplysubject,$autoreplymessage; + $this->getVariable(array('id','newpass','newpass2','_insert','autoreplysubject','autoreplymessage')); + + if($this->isEmailUser()){ # email users edits itself + $email=$this->activeuser; + } else { + $dom=$this->getDomain('emailuserstable',$id); + $this->requireMyDomain($dom); + $email=$this->query("select email from emailusers where id=$id"); + $email=$email[0]['email']; + } + $where="email='$email'"; + + if($_insert){ + if($newpass and ($newpass==$newpass2)){ + # what this mean: set password field of table emailuserstable with newpass, by applying encrypt function, with id=$id + $this->setField('emailuserstable','password',$newpass,"encrypt",$where,"editemailuser-update email pass"); + $this->output.="
Success email pass change. "; + #equivalent: $this->executeQuery("update ".$this->conf['emailuserstable']['tablename']." set password=encrypt($newpass) where id=$id ", "update email pass"); + } + + } else { + $info=$this->query("select autoreplysubject,autoreplymessage from emailusers where $where"); + + $inputparams=array( + array('newpass','password','lefttext'=>'New Password:','righttext'=>'Leave emtpy for no change'), + array('newpass2','password','lefttext'=>'New Password Again:','righttext'=>'Leave emtpy for no change'), + array('id','hidden','default'=>$id), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } + + $this->showSimilarFunctions('email'); +} + +function editEmailUserAutoreply(){ + global $id,$newpass,$newpass2,$_insert,$autoreplysubject,$autoreplymessage; + $this->getVariable(array('id','newpass','newpass2','_insert','autoreplysubject','autoreplymessage')); + + if($this->isEmailUser()){ # email users edits itself + $email=$this->activeuser; + } else { + $dom=$this->getDomain('emailuserstable',$id); + $this->requireMyDomain($dom); + $email=$this->query("select email from emailusers where id=$id"); + $email=$email[0]['email']; + } + $where="email='$email'"; + + if($_insert){ + $this->adjustEmailAutoreply($email,$autoreplysubject,$autoreplymessage); + } else { + $info=$this->query("select autoreplysubject,autoreplymessage from emailusers where $where"); + $autoreplysubject=$info[0]['autoreplysubject']; + $autoreplymessage=$info[0]['autoreplymessage']; + + $inputparams=array( + array('autoreplysubject','default'=>$autoreplysubject,'righttext'=>'Leave emtpy to disable autoreply', 'lefttext'=>'Auto Reply Subject:'), + array('autoreplymessage','textarea','default'=>$autoreplymessage, 'lefttext'=>'Auto Reply Message:'), + array('id','hidden','default'=>$id), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } + + $this->showSimilarFunctions('email'); +} + + +function dbAddUser(){ + global $dbname,$dbusername,$dbuserpass; + $this->getVariable(array('dbname','dbusername','dbuserpass')); + + $domainname = $this->selecteddomain; + + $dbs=$this->query("select * from ".$this->conf['mysqldbstable']['tablename']." where panelusername='$this->activeuser'"); + if(count($dbs)==0){ + $this->output.="
You have not any db's yet.. so, use add mysql db link here"; + return false; + } + $success=True; + + if($dbname){ + + if($this->recordcount($this->conf['mysqldbstable']['tablename'], "panelusername='$this->activeuser' and dbname='$dbname'")==0) + return $this->errorText("This database is not owned by your account."); + + $q="grant all privileges on `$dbname`.* to '$dbusername'@'localhost' identified by '$dbuserpass' "; + $success=$success && $this->mysqlRootQuery($q); + + $q="insert into ".$this->conf['mysqldbuserstable']['tablename']." (host,domainname,dbname,dbusername,password,panelusername)values('localhost','$domainname','$dbname','$dbusername','$dbuserpass','$this->activeuser')"; + $success=$success && $s=$this->executeQuery($q,' add mysql user to ehcp db '); + + $this->ok_err_text($success,'Successfully added database user.','Failed to add database user.'); + + } else { + $inputparams=array( + array('dbname','leftext'=>'Your Existing Database:'), + array('dbusername','lefttext'=>'New Database User:'), + array('dbuserpass','lefttext'=>'Database User Password:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="Add new database user to an existing database.
Enter new database user information:
(Works only for local MySQL servers)
" + .inputform5($inputparams); + } + $this->showSimilarFunctions('mysql'); + return $success; +} + +function dbEditUser(){ + global $dbusername,$newpassword,$newpassword2,$id; + $this->getVariable(array('dbusername','newpassword','newpassword2')); + if($dbusername=='') $dbusername=$this->getField($this->conf['mysqldbuserstable']['tablename'],'dbusername',"id=$id"); + + if($this->recordcount($this->conf['mysqldbuserstable']['tablename'], "panelusername='$this->activeuser' and dbusername='$dbusername'")==0){ + // Admin should be able to edit any MySQL user + if(!$this->isadmin()){ + return $this->errorText("This database is not owned by your account."); + } + } + + if($newpassword and ($newpassword==$newpassword2)){ + $this->output.="setting new password for db user: $dbusername"; + $q=" SET PASSWORD FOR '$dbusername'@'localhost' = PASSWORD( '$newpassword' )"; + if($this->mysqlRootQuery($q)===false){ + $this->errorText("Error: Password cannot be changed for database user " . $dbusername . "."); + } else $this->okeyText("Change password success.."); + + } else { + $inputparams=array( + array('newpassword','password','lefttext'=>'New Password'), + array('newpassword2','password','lefttext'=>'new password again'), + array('dbusername','hidden','default'=>$dbusername), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Change password for database user \"$dbusername\":
(Works only for local MySQL servers)
" + .inputform5($inputparams); + } + $this->showSimilarFunctions('mysql'); + return True; +} + +function deleteCustomSetting(){ + global $id; + $this->getVariable(array('id')); + $q="select * from customsettings where id=$id"; + $info=$this->query($q); + $info=$info[0]; + + $domainname=trim($info['domainname']); + if($domainname=='') { + $this->output.="Domainname for custom setting is empty. strange..
"; + return ; + } + + $success=True; + + $this->output.='
( should check ownership) Deleting id: '.$id.'
' ; + $success=$success && $this->executeQuery("delete from ".$this->conf['customstable']['tablename']." where id=$id limit 1"); + + if($info['name']=='customdns') $success=$success && $this->addDaemonOp("syncdns",'',''); + if($info['name']=='customhttp' or $info['name']=='fileowner') $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname); + $this->ok_err_text($success," was deleted successfully.",__FUNCTION__." failed."); + $this->showSimilarFunctions('customhttpdns'); + return $success; +} + +function customHttpSettings(){ + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $this->listTable('Custom http settings:','customstable',"name='customhttp' and domainname='$domainname' and (webservertype is null or webservertype='' or webservertype='".$this->miscconfig['webservertype']."')"); + $this->output.="Add Custom http"; + $this->showSimilarFunctions('customhttpdns'); +} + +function custompermissions(){ + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $this->listTable('Custom file permissinos:','customstable',"name='fileowner' and domainname='$domainname'"); + + $this->showSimilarFunctions('custompermissions'); +} + +function emailForwardingsSelf(){ + $this->requireEmailUser(); + + $filter="source='$this->activeuser'"; + $this->listTable("Email Forwardings", 'emailforwardingstable', $filter); + if ($this->recordcount($this->conf['emailforwardingstable']['tablename'],$filter)==0) + $this->output.="Add Email Forwarding"; +} + +function addEmailForwardingSelf(){ + # for mail user login.. + global $forwardto; + $this->getVariable(array('forwardto')); + + $this->requireEmailUser(); + $email=$this->activeuser; + + # this ensures the ownership of domain + $domainname=getLastPart($email,'@'); + + + if(!$forwardto){ + $this->output.="Email:$email , domain: $domainname
Enter target emails one by line"; + $inputparams=array( + array('forwardto', 'textarea', 'lefttext'=>'Forward To:') + ); + + $this->output.=inputform5($inputparams); + + } else { + $this->output.="Will forward $email to mails: $forwardto "; + $success=$this->addEmailForwardingDirect($email,$domainname,"$email",$forwardto); + $res=$this->ok_err_text($success, "Successfully added email forwarding.",'Failed to add email forwarding.'); + return $res; + } + +} + +function emailForwardings(){ + global $domainname; + $this->getVariable(array('domainname')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + $filter="panelusername='$this->activeuser' and domainname='$domainname'"; + #$filter=$this->applyGlobalFilter($filter); + + $this->listTable("Email Forwardings", 'emailforwardingstable', $filter); + $this->output.="Add Email Forwarding"; + $this->showSimilarFunctions('email'); +} + +function addEmailForwardingDirect($panelusername,$domainname,$fromemail,$forwardto){ + return $this->executeQuery("insert into forwardings (panelusername,domainname,source,destination)values('$panelusername','$domainname','$fromemail','$forwardto')", $opname); +} + +function addEmailForwarding(){ + global $domainname,$beforeat,$forwardto; + $this->getVariable(array('domainname','beforeat','forwardto')); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + $success=True; + + # this ensures the ownership of domain + + if(!$forwardto){ + $inputparams=array( + array('beforeat','righttext'=>"@$domainname",'lefttext'=>'Email:
Leave empty to use the catch-all email
(to receive all emails that are not setup)'), + array('forwardto','textarea', 'lefttext'=>'Forward To'), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.=inputform5($inputparams); + + } else { + $beforeat=getFirstPart($beforeat,'@'); # make sure + $this->output.="Will forward $beforeat@$domainname to mails: $forwardto "; + $success=$success && $this->addEmailForwardingDirect($this->activeuser,$domainname,"$beforeat@$domainname",$forwardto); + $this->ok_err_text($success, "Successfully added email forwarding.",__FUNCTION__.' failed'); + $this->output.="
List Email forwardings
"; + } + $this->showSimilarFunctions('email'); + return $success; +} + +function delEmailForwarding(){ + global $id; + $filter=$this->applyGlobalFilter("id=$id"); + $success=$this->executeQuery("delete from ".$this->conf['emailforwardingstable']['tablename']." where $filter", $opname); + $this->output.="
List Email forwardings
"; + $res=$this->ok_err_text($success, "Email forwarding deleted",'Failed to delete email forwarder.'); + $this->showSimilarFunctions('email'); + return $res; +} + +function addCustomHttpDirect($domainname,$customhttp,$comment){ + $this->output.="Adding customhttp :"; + $success=True; + $success=$success && ($domainname<>''); + $success=$success && $this->executeQuery("insert into ".$this->conf['customstable']['tablename']." (domainname,name,value,comment,webservertype) values ('$domainname','customhttp','$customhttp','$comment','".$this->miscconfig['webservertype']."')",'add custom http'); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + + return $this->ok_err_text($success,"Custom HTTP settings were added successfully.",'Failed to add custom HTTP settings.'); + +} + +function addCustomHttp(){ + global $domainname,$customhttp,$comment; + $this->getVariable(array("domainname","customhttp",'comment')); # this gets variables from _GET or _POST + # Disable custom http if misc disableeditapachetemplate setting is set, as that is a way to break the apache template. + if($this->miscconfig['disableeditapachetemplate']<>'') $this->requireAdmin(); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + if(!$customhttp){ + $inputparams=array( + array('customhttp','textarea','lefttext'=>'Custom HTTP'), + array('comment', 'lefttext'=>'Comment'), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + + ); + $this->output.="Adding custom HTTP for domain \"$domainname\" and your current webserver of (".$this->miscconfig['webservertype'].")
(Note that this custom HTTP will be active whenever your current webserver type is active):
"; + $this->output.=inputform5($inputparams); + + } else{ + $success=$success && $this->addCustomHttpDirect($domainname,$customhttp,$comment); + $this->ok_err_text($success,"Successfully added custom HTTP settings.",__FUNCTION__." failed."); + } + + $this->showSimilarFunctions('customhttpdns'); + return $success; + + + +} + +function addcustompermission(){ + global $domainname,$fileowner,$directory; + $this->getVariable(array("domainname","fileowner",'directory')); # this gets variables from _GET or _POST + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + if(!$fileowner){ + $inputparams=array( + array('fileowner','righttext'=>'like vsftpd, or: vsftpd:www-data, cannot be root', 'lefttext'=>'File Owner:'), + array('directory','righttext'=>'relative to domain home, such as wp-content for wordpress,or wp/wp-admin', 'lefttext'=>'Directory'), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="Adding custom permission for domain ($domainname):
"; + $this->output.=inputform5($inputparams); + + } else{ + $params=array('domainname'=>$domainname,'name'=>'fileowner','value'=>$fileowner,'value2'=>$directory); + $success=$this->insert_custom_setting_direct($params); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname); + $this->ok_err_text($success,"Successfully added custom HTTP settings.",__FUNCTION__." failed."); + } + + $this->showSimilarFunctions('custompermissions'); + return $success; + +} + +function customDnsSettings(){ + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $this->listTable('Custom dns settings:','customstable',"name='customdns' and domainname='$domainname'"); + $this->output.='Add Custom dns'; + $this->showSimilarFunctions('customhttpdns'); +} + +function getIsSlaveDomain($domainname){ + $dnsmaster = $this->getMasterIP($domainname); + return ($dnsmaster<>''); +} + +function addCustomDns(){ + global $domainname,$customdns,$comment; + $this->getVariable(array("domainname","customdns",'comment')); # this gets variables from _GET or _POST + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + // If is slave domain, do not allow custom DNS + if($this->getIsSlaveDomain($domainname)) $this->errorTextExit('Custom dns cannot be added for domains with slave dns'); + + if(!$customdns){ + $inputparams=array( + array('customdns','textarea','lefttext'=>'Custom DNS'), + array('comment', 'lefttext'=>'Comment'), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Adding custom DNS for domain \"$domainname\":
Attention! Adding incorrect entries will cause DNS service errors!

Example: + www2       IN     A    YOURIP " + .inputform5($inputparams); + + $this->output.="Following dns records already added from template, you may modify template (dnszonetemplate file) in filesystem.

".
+  		file_get_contents('dnszonetemplate')."
"; + + } else{ + $this->output.="Adding customdns :"; + $success=$success && $this->executeQuery("insert into ".$this->conf['customstable']['tablename']." (domainname,name,value,comment) values ('$domainname','customdns','$customdns','$comment')",'add custom dns'); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,"Successfully added custom DNS entries!",'Failed to add custom DNS entries.'); + } + + $this->showSimilarFunctions('customhttpdns'); + return $success; +} + + +function listBackups(){ + $this->requireAdmin(); + $this->echoln('
Backups are placed in /var/backup directory. Note filename to a secure place to restore it later.
+ you will need this filename if you need restore from a clean install of ehcp

+ Refresh your page to see latest status...'); + $this->listTable('','backups_table',''); + $this->echoln("You may delete all these files and records manually... from shell and phpmyadmin gui..
Refresh List"); + + $this->showSimilarFunctions('backup'); + + return True; +} + +function doRestore(){ + global $backupname,$filename; + $this->getVariable(array('backupname','filename')); + + $this->requireAdmin(); + + if(!$backupname){ + $inputparams=array( + array('backupname','lefttext'=>'Enter your backup file name which is located at /var/backup (with .tgz extension)','default'=>$filename), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="

Attention! Backup data including domains, users, files, and MySQL databases will be restored. Your current data will be permanently deleted!

" + .inputform5($inputparams); + } else { + $this->echoln("Will restore from file: ".$backupname); + $this->executeQuery("insert into backups (backupname,filename,date,status) values ('restore','$backupname','".date_tarih()."','Restore command issued by gui')"); + $this->addDaemonOp("daemonrestore",'',$backupname,'','opname:restore'); + $this->echoln("doRestore called...Restore will be started on your Server soon. Click here to list backups/restores "); + } + + $this->showSimilarFunctions('backup'); + return True; +} + + +function daemonRestore($action,$info,$info2='') { + + $filename=securefilename($info); + $backupname=$filename; + $filename=str_replace('.tgz','',$filename); + $filename=str_replace('.gz','',$filename); + $tarwithparams="tar --same-owner --preserve-permissions -zxvf "; + + echo "\n\nRestore starting..: backupname:$backupname, filename:$filename .. this is critic place...\n\n"; + $this->executeQuery("update backups set status='restore processing now... by daemon' where filename='$filename' and backupname='restore'"); + + + $mydir=getcwd(); + + # restore files first + chdir("/var/backup"); + passthru2("$tarwithparams $backupname"); + chdir("/var/backup/$filename"); + + + $this->pwdls('before extract files'); + + #writeoutput($this->conf['vhosts']."/ehcp/nohup.out",''); + + #passthru2("/bin/cat '' > ".$this->conf['vhosts']."/ehcp/nohup.out"); # truncate this file in case this may be big + passthru2("$tarwithparams files.tgz"); + $this->pwdls('after files, before ehcp'); + passthru2("$tarwithparams ehcp.tgz"); # this will normally give error if there is no ehcp backup + $this->pwdls('after ehcp, before copy'); + + # restore email contents, if any + passthru2("$tarwithparams home_vmail.tgz"); + + # Email fix: should be "cp -Rvf --preserve=all home/vmail /home/" (starting from relative directory where home_vmail.tgz was unzipped) as the "*" in vmail/* was getting escaped which ruined the command + # Changed from vmail/* + passthru2("cp -Rvf --preserve=all home/vmail /home/"); + passthru2("chown -Rf vmail:vmail /home/vmail"); + + + + passthru2("cp -Rvf --preserve=all var/www/vhosts /var/www/"); # here, var/www/vhosts is inside /var/backup... so, I used var/www/vhosts + + + #restore mysql ehcp db.. + + echo "\nrestoring your whole mysql.. \n\n"; + $cmd="mysql -u root --password=".$this->conf['mysqlrootpass']." < mysql.sql"; + passthru3($cmd,__FUNCTION__); + + sleep(1); + $this->executeQuery("delete from operations");# delete operations to avoid re-run of backup/restore.. + #$this->executeQuery("Flush tables"); + echo "\nfinished restoring your whole mysql.. \n"; + + echo "\nfinished copying and mysql ops, deleting remaining files... \n"; + $this->pwdls('will just delete files...'); + passthru2("rm -rf /var/backup/$filename"); + + chdir($mydir);# return back to original dir + sleep(1); + $this->syncAll(); + sleep(1); + $this->executeQuery("update backups set status='restore complete' where filename='$filename' and backupname='restore'"); + $this->executeQuery("insert into backups (backupname,filename,status) values ('restore complete','$filename','after restore')"); + sleep(1); # sleep to let mysql handle latest updates... + + echo "\n\nRestore complete.... you should restart the ehcp daemon..."; + $this->infotoadminemail("The EHCP backup was successfully restored!","Backup Restored",False); + + return True; +} + +function backups(){ + # domain based backups, not whole server or not all domains. + global $_insert,$op2,$filename; + $this->getVariable(array('_insert','op2','filename')); + + #$this->output.="This section is not working fully!

"; + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); # choose domain, or selecteddomain.. + + switch($op2) { + case 'dobackup': $this->add_daemon_op(array('op'=>'daemon_backup_domain','info'=>$domainname)); + $this->executeQuery("insert into backups (domainname,date,status) values ('$domainname',now(),'command sent to ehcp daemon by ehcp gui')"); + break; + + default:$this->output.="Start a new domain backup (your domain backup will be started in background)";break; + } + + $this->listTable('','backups_table',"domainname='$domainname'"); + $this->output.="
Refresh/list"; + + return True; +} + +function doBackup(){ + $this->requireAdmin(); + + $inputparams=array( + array('backupname','lefttext'=>'Enter a name for your backup','default'=>'My Backup'), + array('backupmysql','checkbox','lefttext'=>'Backup mysql databases (that are listed in ehcp):','default'=>'1','checked'=>'1'), + array('backupfiles','checkbox','lefttext'=>'Backup Site files:','default'=>'1','checked'=>'1'), + array('backupehcpfiles','checkbox','lefttext'=>'Backup ehcp files itself:','default'=>'1'), + array('backupehcpdb','checkbox','lefttext'=>'Backup ehcp database itself:','default'=>'1','checked'=>'1'), + array('emailme','checkbox','lefttext'=>'Email me when backup finished (may not work yet):','default'=>'1','checked'=>'1'), + array('myemail','lefttext'=>'My Email, enter different if you wish:','default'=>$this->conf['adminemail']), + array('emailaccounts','checkbox','lefttext'=>'Backup email accounts:','default'=>'1','checked'=>'1'), + array('emailcontents','checkbox','lefttext'=>'Backup email contents/files:','default'=>'1','checked'=>'1'), + array('gzipbackup','checkbox','lefttext'=>'tar-gzip backup dir/file:','righttext'=>'This is useful, but requires some extra space temporarily. uncheck if you have little space','default'=>'1','checked'=>'1'), + + array('domainname','hidden','default'=>$domainname), + array('_insert','hidden','default'=>'1'), + array('op','hidden','default'=>__FUNCTION__) + ); + + # instead of: #$this->getVariable(array('_insert','backupmysql','backupfiles','backupehcpfiles','backupehcpdb','backupname')); + foreach($inputparams as $p) { # howto avoid global variables ? + global ${$p[0]}; + $this->getVariable($p[0]); + } + + if(!$_insert){ + $this->output.="Caution: System may take a while to complete backup operations. The compressed backup file may consume lots of hard disk space depending on how many domains and files are backed-up.".inputform5($inputparams); + } else { + + + $filename='backup-'.date('Y-m-d_H-i-s'); + $this->output.="What will do/backup:
+ Backup mysql:$backupmysql
+ Backup site files:$backupfiles
+ Backup ehcp files:$backupehcpfiles
+ Backup ehcp database:$backupehcpdb
+ Backup emailaccounts:$emailaccounts
+ Backup email contents:$emailcontents
+ Gzip backup:$gzipbackup
+ "; + + $backup=''; # what will be backup + if($backupmysql) $backup.='-mysql'; + if($backupfiles) $backup.='-files'; + if($backupehcpfiles) $backup.='-ehcpfiles'; + if($backupehcpdb) $backup.='-ehcpdb'; + if($emailme) $backup.='-emailme'; + if($emailaccounts) $backup.='-emailaccounts'; + if($emailcontents) $backup.='-emailcontents'; + if($gzipbackup) $backup.='-gzipbackup'; + + $backupname.='-Backups:'.$backup; + + $this->executeQuery("insert into backups (backupname,filename,date,status) values ('$backupname','$filename','".date_tarih()."','command sent to ehcp daemon by ehcp gui')"); + $this->addDaemonOp("daemonbackup",'',$filename,$backup,'opname:backup'); + $this->echoln("Backup will be started on your Server soon. Click here to list backups and see status "); + } + + $this->showSimilarFunctions('backup'); + return True; +} + +function pwdls($comment='',$dir=''){ + echo "\n $comment \npwd is:".getcwd()."\n"; + passthru('ls -l '.$dir); + echo "\n\n"; + sleep(1); +} + +function backup_databases2($dbs,$mysqlusers,$file){ + $this->requireCommandLine(__FUNCTION__); + + # set empty file then fill with dump of each mysql database, in ehcp, (before vers 0.27: all databases were dumped, that caused: malfunction because of restore of mysql db itself... now, mysql db is not restored... so, passwords of new mysql server are kept after restore... ) + + print_r($dbs); + + if(count($dbs)>0){ + foreach($dbs as $db) { + $sql="create database if not exists ".$db['dbname'].";\n"; + $sql.="use ".$db['dbname'].";\n"; + writeoutput2($file,$sql,"a"); + + $cmd=escapeshellcmd("mysqldump ".$db['dbname']." -u root --password=".$this->conf['mysqlrootpass'])." >> ".escapeshellcmd($file); + passthru3($cmd,__FUNCTION__); + } + } + + if(count($mysqlusers)>0){ + foreach($mysqlusers as $user){ + #print_r($user); + // Get MySQL User and DB Information + $dbname=$user['dbname']; + $dbusername=$user['dbusername']; + $dbuserpass=$user['password']; + + // Put grant usage permissions into the file + $sql = "GRANT USAGE ON *.* TO '$dbusername'@'localhost' IDENTIFIED BY '$dbuserpass';"; + $sql .= "\n" . "GRANT ALL PRIVILEGES ON $dbname.* TO '$dbusername'@'localhost';"; + writeoutput2($file,$sql,"a"); + } + } + // Flush privileges to activate the new user accounts and passwords + $fixAccounts = "FLUSH PRIVILEGES;"; + writeoutput2($file,$fixAccounts,"a"); + +} + +function backup_databases($filt,$file){ # yeni fonks. + $this->requireCommandLine(__FUNCTION__); + + if($filt<>'') $where=" where $filt"; + else $where=""; + + $dbs=$this->query("select dbname from mysqldb $where"); + $mysqlusers=$this->query("select * from mysqlusers $where"); + + $this->backup_databases2($dbs,$mysqlusers,$file); +} + +function daemonBackup($action,$info,$info2='') { + $this->requireCommandLine(__FUNCTION__); + + # do all operations inside /var/backup + + $filename=securefilename($info); + $backupdir=$this->miscconfig['backupdir']; + if($backupdir=='') $backupdir="/var/backup"; + $dirname="$backupdir/$filename";# this may be a variable in misc/options table + + echo "Backup starting..: dirname:$dirname, filename:$filename ($info2)"; + $this->executeQuery("update backups set status='processing now... by daemon' where filename='$filename'"); + $this->executeQuery("delete from operations");# delete operations to avoid re-run of backup/restore.. + #$this->executeQuery("Flush tables"); + $tarwithparams="tar -zcvf "; + + passthru2("mkdir -p $dirname"); + chdir($dirname); + + $this->pwdls(); + + $dbs=array(); + + if(strstr($info2,'-mysql')) { + $dbs=$this->query("select dbname from mysqldb"); + $mysqlusers=$this->query("select * from mysqlusers"); + } + + if(strstr($info2,'-ehcpdb')) $dbs[]=array("dbname"=>"ehcp"); + + $this->backup_databases2($dbs,$mysqlusers,"$dirname/mysql.sql"); + + + + $this->pwdls(); + + if(strstr($info2,'-ehcpfiles')) + passthru2("$tarwithparams ehcp.tgz ".$this->ehcpdir); # ehcp files will be backedup + + if(strstr($info2,'-files')) + passthru2("$tarwithparams files.tgz ".$this->vhostsdir." --exclude=".$this->ehcpdir); # files will be backedup + + if(strstr($info2,'-emailcontents')) + passthru2("$tarwithparams home_vmail.tgz /home/vmail"); # files will be backedup + + $this->pwdls(); + + # combine all in one file + if(strstr($info2,'-gzipbackup')) { + chdir('/var/backup'); + passthru2("$tarwithparams $filename.tgz $filename"); + $size = filesize("$filename.tgz"); + if(!$size) $size=0; + + $this->pwdls(); + + passthru2("rm -rf ".$filename); + } else { + $size=0; + $filename='Not gzipped into single file, as you requested'; + } + + $commandPostBackup = 'echo 1 > /var/backup/' . $filename . '_STATUS'; + passthru3($commandPostBackup); + + $this->check_mysql_connection(); + $this->executeQuery("update backups set status='complete',size=$size where filename='$filename'"); + + + echo "finished backups..."; + chdir($this->ehcpdir);# return back to original dir + $this->infotoadminemail("An EHCP backup has successfully been created.  More information about this backup can be viewed in the panel.","Backup Created",False); + return True; + + +} + +function is_email_user(){ + return strstr($this->activeuser,'@'); +} + +function displayHome($homefile=''){ + + # display different home pages depending on logedin user.. admin, reseller, domain admin, email user (There are four levels of login..) + +if($this->userinfo['maxdomains']==1) { + $domainname=$this->getField($this->conf['domainstable']['tablename'], "domainname", "panelusername='$this->activeuser'"); + $this->setselecteddomain($domainname); +} + +if($this->selecteddomain<>''){ + $this->domaininfo=$this->getDomainInfo($this->selecteddomain); +} + +if ($homefile<>'') { + $homepage=$homefile ; +} elseif($this->selecteddomain<>'' and $this->domaininfo['serverip']<>''){ + $homepage='homepage_remotehosting_dnsonly'; + $this->output.="
This domain is dns hosted, directed to ip:".$this->domaininfo['serverip']."
"; +} elseif($this->is_email_user()){ + $homepage='homepage_emailuser'; +} elseif($this->userinfo['maxdomains']==1) { + $homepage='homepage_domainadmin'; +} elseif(!$this->isadmin() and $this->userinfo['maxdomains']>1) { + if($this->selecteddomain=='') $homepage='homepage_reseller'; + else $homepage='homepage_domainadmin_forreseller'; +} elseif($this->isadmin()) { + if($this->selecteddomain=='') $homepage='homepage_serveradmin'; + else $homepage='homepage_domainadmin_forreseller'; # domain pages for reseller and admin are same +} +else $homepage='homepage_domainadmin'; # this line should never be executed.. + + + # buraya bide email girisi icin homepage yapilacak, emailde bitek sifre degistirme, ve belkide yonlendirme olacak... + +$pageinfo="Homepage Template used to generate this page: ".$homepage."_".$this->currentlanguage.".html
"; + +$this->output.=str_replace(array("{selecteddomain}"),array($this->selecteddomain),$this->loadTemplate($homepage)); +$this->output.=" Your language: $this->currentlanguage + +(En +Tr +German +Spanish +Fr +Latviešu +Italian +
+ + + + + + + + + + + +
+
+$pageinfo +"; + + + $this->output.="

Welcome ".$this->activeuser; + $_SESSION['myserver']=false; # reset mysql server data.. + +/* + $this->debugecho("Query test:".print_r2($this->query3("select * from domains limit 1")),3,false); + $this->debugecho("Query test:".print_r2($this->query3("select * from domains limit 1",'','',false,$this->conn)),3,false); + + $logininfo=array( + 'dbhost'=>'96.31.91.67', + 'dbusername'=>$this->dbusername, + 'dbpass'=>$this->dbpass, + 'dbname'=>$this->dbname + ); + + $uzak_conn=$this->connect_to_mysql($logininfo); + $this->debugecho("Query test:".print_r2($this->query3("select * from domains limit 2",'','',$uzak_conn)),3,false); + * + */ + #$domaininfo=$this->getDomainInfo('merhaba.com'); $this->output.="ftp username: ".$this->multiserver_get_domain_ftpusername($domaininfo); + #$this->conn->AutoExecute('operations',array('op'=>'new_sync_domains2'),'INSERT'); + + +} + + +function changeMyPass(){ + global $oldpass,$newpass,$newpass2,$_insert; + $this->getVariable(array('oldpass','newpass','newpass2','_insert')); + + if(!$_insert){ + $inputparams=array( + array('oldpass','password','lefttext'=>'Your Old Password:'), + array('newpass','password','lefttext'=>'New Password:'), + array('newpass2','password','lefttext'=>'New Password Again:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + + } else { + if($newpass<>$newpass2){ + $this->errorText("Both entered passwords do not match. Please try again."); + } elseif(!$this->isPasswordOk($this->activeuser,$oldpass)) { + $this->errorText("Your current password is not correct."); + } elseif($newpass=='' || $newpass2=='') { + $this->output.="You did not enter a new unique password!"; + } else { + + if($this->conf['logintable']['passwordfunction']==''){ + $set="'$newpass'"; + } else { + $set=$this->conf['logintable']['passwordfunction']."('$newpass')"; + } + $where=$this->conf['logintable']['usernamefield']."='".$this->activeuser."'"; + $q="update ".$this->conf['logintable']['tablename']." set ".$this->conf['logintable']['passwordfield']."=$set where $where"; + $this->executeQuery($q); + $this->okeyText('Changed your pass '); + } + } +} + + function stopvsftpd(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("vsftpd","stop")); + } + + function startvsftpd(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("vsftpd","start")); + } + + function restartvsftpd(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("vsftpd","restart")); + } + + function stopmysqld(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("mysql","stop")); + } + + function startmysqld(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("mysql","start")); + } + + function restartmysqld(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("mysql","restart")); + } + + function stopbind9(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("bind9","stop")); + } + + function startbind9(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("bind9","start")); + } + + function restartbind9(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("bind9","restart")); + } + + function stopapache2(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("apache2","stop")); + } + + function startapache2(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("apache2","start")); + } + + function restartapache2(){ + $this->requireCommandLine(__FUNCTION__); + return passthru2(getServiceActionStr("apache2","restart")); + } + + function service($name,$op){ + $this->requireCommandLine(__FUNCTION__); + return passthru2("service $name $op"); + } + + +function editdomain(){ + # sadece reseller/admin edit edebilmeli.. + + global $domainname,$_insert,$status; + $this->getVariable(array('domainname','_insert','status')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $domaininfo=$this->getDomainInfo($domainname); + $success=True; + + if(!$_insert){ + $inputparams=array( + array('status','select','secenekler'=>$this->statusActivePassive,'default'=>$domaininfo['status'], 'lefttext'=>'Status'), + array('domainname','hidden','default'=>$domainname), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= inputform5($inputparams); + + } else {# editpaneluser icinde active/passive yapilmasi lazim. kullanici aktiflestirmede, eger tek domaini varsa, paneluser'ini da aktiflestirmek lazim. + $filt=$this->applyGlobalFilter("domainname='$domainname'"); + $domaininfo=$this->getDomainInfo($domainname); + $domainpaneluser=$domaininfo['panelusername']; + $domainsayisi=$this->recordcount("domains","panelusername='$domainpaneluser'"); # bu paneluser'in kac tane domaini var ? howmany domains this paneluser has? + + $this->debugtext("filter: $filt"); + $success=$this->executeQuery("update ".$this->conf['domainstable']['tablename']." set status='$status',reseller='".$this->activeuser."' where $filt"); + if($domainsayisi==1) $success=$this->executeQuery("update panelusers set status='$status' where panelusername='$domainpaneluser' and reseller='".$this->activeuser."'"); + + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + return $this->ok_err_text($success,'Domain status was successfully updated.','Unable to update domain status.'); + + } + +} + +function applyfordomainaccount(){ # add domain, paneluser and ftp user once + if($this->miscconfig['userscansignup']=='') + $this->showUnauthorized(); + + global $domainname,$ftpusername,$ftppassword,$quota,$upload,$download,$panelusername,$paneluserpass,$_insert; + $this->getVariable(array("domainname","ftpusername","ftppassword","quota","upload","download","panelusername","paneluserpass","_insert")); + + if(!$_insert) { + #if(!$this->beforeInputControls("adddomain",array())) return false; + $inputparams=array( + 'domainname', + array('panelusername','lefttext'=>'Panel username:'), + array('paneluserpass','password_with_generate','lefttext'=>'Panel user password:'), + array('ftpusername','lefttext'=>'FTP username:'), + array('ftppassword','password_with_generate','lefttext'=>'FTP Password:'), + array('quota','lefttext'=>'Quota (MB)','default'=>100), + array('upload','lefttext'=>'Upload Bandwidth (KB/s)','default'=>1000), + array('download','lefttext'=>'Download Bandwidth (KB/s)','default'=>1000), + array('id','hidden','default'=>$id), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } else { + # existcontrol addDomainDirect icinde + if($this->addDomainDirect($domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$this->status_passive)) + $this->output.="Your application is recieved. You will be informed when your domain is activated."; + $this->infotoadminemail('A new domain application has been received.', 'New Domain Application'); + } +} + +function applyforaccount(){ + if($this->miscconfig['userscansignup']=='') + $this->showUnauthorized(); + + $this->output.="Apply for Web Hosting Account
"; +} + +function aboutcontactus(){ + $alanlar=array("email","msn","skype","adisoyadi","firma","sehir","adres","tel","fax","talepler"); + foreach($alanlar as $al) global $$al; + $this->getVariable($alanlar); + if(isset($email) and $talepler<>'') { + $subject="New EHCP Message"; + $mesaj="Dear Admin,

The following message was successfully submitted via the panel:

Name: ".$adisoyadi."
Company: ".$firma."
City: ".$sehir."
Address: ".$adres."
Email: ".$email."
MSN: " . $msn . "
Skype: " . $skype . "
Phone Number: ".$tel."
Message:
".$talepler . "
"; + $headers="From: $email"; + $fromAddress = $email; + + $this->infotoadminemail($mesaj,$subject,false,$fromAddress); + #emailadmins($subject,$mesaj,$headers); + $this->sendEmail($email, "Message Received", "Hi EHCP Force User,

We received your message of: $talepler"); + return $this->okeyText($this->sayinmylang("yourmessage_received")); + + } else { + $out.=" +

".$this->sayinmylang("enter_yourcontactinfo")."

+
+ + + + + + +
".$this->sayinmylang("name_surname").":
Email:
Msn:
Skype:
Tel:
+
+

+ ".$this->sayinmylang("write_yourmessage_here")."
+ +

+ +
+
+ + "; + #ajaxsubmit($link,"submit","G�nder","div_1","form2") + } + $this->output.=$out; +} + + +function htmlekle2($id) { # bunun tek farki echo yapmaz. return eder. + $id=trim($id); + if($id=='') { + return "id empty. (htmlekle2)"; + } + if($this->recordcount("html","id='$id'")==0){ + return "($id) id'li kod not found.
".$this->sayinmylang('perhaps_db_error'); + } + + GLOBAL $nestcount; + $nestcount++; + if($nestcount>100) { + echo "
too many nestcount (100, htmlekle2)"; + $this->showexit(); + }; + #$query="select * from html where id='$id'"; + $kod=$this->getField('html','htmlkodu',"id='$id'"); + #$kod=dbresult($query,array("htmlkodu")); + #$kod="".$kod.""; + + $parcalar=explode("{kod}",$kod); + $sayi=count($parcalar); + + $out=''; + $out.= "\n"; + for($i=0;$i<$sayi;$i++) { + if(iseven($i)){ + $out.= $parcalar[$i]; + } else { + $out.= $this->htmlekle2($parcalar[$i]); + } + }; + $nestcount--; + $out.=""; + return $out; +} + +function sendEmail($to, $subject, $message){ + global $ehcpversion; + + // Get today's date + $date = date('m-d-Y H:i:s'); + + // Prepend to Subject + $preSubject = "EHCP Force ::"; + + // Subject empty? + if(!$subject) $subject="Important"; + + // Email headers + $headers = 'MIME-Version: 1.0' . "\n"; + $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; + $headers .= "From: " . $this->conf['adminemail']; + + // Add this to the end of the email message. + $message .= "

~
Thanks
EHCP Force Administration"; + + // Send the mail + mail($to, $preSubject . ' ' . $subject, $message, $headers); +} + +function infotoadminemail($str,$subj='',$todeveloper=True,$fromAddress=''){ + global $lastmsgtoehcpdeveloper,$ehcpversion; + + // Get today's date + $date = date('m-d-Y H:i:s'); + + // Email headers + $headers = 'MIME-Version: 1.0' . "\n"; + $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; + if(empty($fromAddress)){ + $headers .= "From: " . $this->conf['adminemail']; + }else{ + $headers .= "From: " . $fromAddress; + } + + // Prepend to subject + $preSubject = "EHCP Force Information ::"; + // Subject empty? + if(!$subj) $subj="Important"; + + // Add server IP address information to email + $str.="

Server IP Address: ".$this->singleserverip . "

"; + + // Add date and username for who performed the action + if(isset($this->activeuser) && !empty($this->activeuser)){ + $str .= "

Operation Performed by User:  " . $this->activeuser . "
Date Performed:  " . $date . "

"; + } + + // Add signature post email message + $str .= "

~
Thanks
EHCP Force Administration"; + + // Send email + return mail($this->conf['adminemail'], $preSubject . ' ' . $subj, $str, $headers); +} + +function infoemail($adminsubject,$adminmessage,$useremail,$usersubject,$usermessage,$todeveloper=True){ + # will replace function infotoadminemail + global $lastmsgtoehcpdeveloper; + + $headers = 'MIME-Version: 1.0' . "\n"; + $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; + $headers .= "From: " . $this->conf['adminemail']; + + $preSubject = "EHCP Force Information ::"; + + if(!$adminsubject) $adminsubject="Important"; + if(!$usersubject) $usersubject="Important"; + $adminmessage.="
Server IP Address: ".$this->singleserverip; + // Add date and username for who performed the action + if(isset($this->activeuser) && !empty($this->activeuser)){ + // Get today's date + $date = date('m-d-Y H:i:s'); + $adminmessage .= "
Operation Performed by User:  " . $this->activeuser . "
Date Performed:  " . $date; + } + + $adminmessage .= "

~
Thanks
EHCP Force Administration"; + $usermessage .= "

~
Thanks
EHCP Force Administration"; + + mail($this->conf['adminemail'], $preSubject . ' ' . $adminsubject, $adminmessage, $headers); + mail($useremail, $preSubject . ' ' . $usersubject, $usermessage, $headers); +} + +function infoEmailToUserandAdmin($useremail,$subject,$message,$todeveloper=True){ + + $this->infoemail($subject,$message,$useremail,$subject,$message,$todeveloper); +} + +function loadConfigIntoArray($q){ + $res=$this->query($q); + + if(is_array($res)) { + # fill miscconfig variable + $miscconfig=array(); + foreach($res as $c){ + if($c['group']<>'') $gr=$c['group'].':'; + else $gr=''; + #print "($gr)(".$c['name'].'):('.$c['value'].")
"; + + if($c['value']<>'') $miscconfig[$gr.$c['name']]=trimstrip($c['value']); + else $miscconfig[$gr.$c['name']]=trimstrip($c['longvalue']); + } + + } else { + $this->output.="Config from a table cannot be read...($q)
"; + } + #echo "burasi:".print_r2($miscconfig); + + return $miscconfig; +} + +function loadConfigIntoArray2($q){ + $res=$this->query($q); + + if(is_array($res)) { + # fill miscconfig variable + $miscconfig=array(); + foreach($res as $c){ + if($c['group']=='') $c['group']='nogroup'; + $miscconfig[$c['group']][$c['name']]=trimstrip($c['value']); + } + + } else { + $this->output.="Config from a table cannot be read...($q)
"; + } + + return $miscconfig; +} + + +function checkConnection($opname){ + if(!$this->connected) { + $this->output.="
Following operation cannot be completed, since you have not connected to database: $opname
"; + return false; + } else return True; +} + +function loadConfigWithDaemon(){ + $this->loadConfig(); + $this->addDaemonOp("loadconfig",'','','',__FUNCTION__); +} + +function loadSettings(){ + $this->settings=$this->loadConfigIntoArray2("select * from settings where panelusername is null or panelusername=''"); +} + +function EHCPIsUsingHTTPS() { + return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443; +} + +function loadConfig(){ + global $skipUpdateWebstats; + + if(!$this->checkConnection('config load')) return false; + + $miscconfig=$this->loadConfigIntoArray("select * from misc where panelusername is null or panelusername=''"); + #$this->output.="
Loading config. ".print_r2($miscconfig)."
"; + + if(is_array($miscconfig)) + foreach($miscconfig as $name=>$value) + switch($name){ + case 'dnsip' : $this->conf['dnsip']=trim($value);break; + case 'adminname' : $this->conf['adminname']=trim($value);break; + case 'adminemail' : $this->conf['adminemail']=trim($value);break; + } + + #$this->output.="dnsip: ".$this->conf['dnsip']; + $this->miscconfig=$miscconfig; + $this->miscconfig['singleserverip']=$this->miscconfig['dnsip']; # single ip hosting. + if($this->miscconfig['webservertype']=='') { + $this->echoln2("webservertype seems empty. defaulting to apache2 (check your options->advanced)"); + $this->miscconfig['webservertype']='apache2'; + } + + $HTTPMode = $this->EHCPIsUsingHTTPS() ? "https://" : "http://"; + $this->ehcpurl = $HTTPMode . $this->conf['dnsip'] . '/ehcp'; + + #$this->output.=print_r2($miscconfig); + # get defaultlanguage value from db, options, misc table.. + if($this->miscconfig['defaultlanguage']) $this->defaultlanguage=$this->miscconfig['defaultlanguage']; + if($this->defaultlanguage=='') $this->defaultlanguage='en'; + $this->currentlanguage=$_SESSION['currentlanguage']; + if($this->currentlanguage=='') $this->currentlanguage=$this->defaultlanguage; + + + if($this->conf['dnsip']=='') { + $this->output.="Your DNS or Server IP address is not set.
+ This causes ehcp/dns/bind/named to malfunction.
+ Please set it in your Settings


"; + } + + # other settigns, template, session etc.. + + $this->selecteddomain=$_SESSION['selecteddomain']; + $this->template=$_SESSION['template']; # load template in session if any.. + if ($this->template=='') $this->template=$this->miscconfig['defaulttemplate']; + $this->loadServerPlan(); + + $skipUpdateWebstats=($this->miscconfig['enablewebstats']==''); + $this->dnsip=$this->miscconfig['dnsip']; + $this->apachePortFile="/etc/apache2/ports.conf"; + + if($this->commandline){ + print "\n\nlatest miscconfig:"; + print_r($this->miscconfig); + } + + + $this->loadSettings(); # this is new settings func. will transition to that. + return True; +} + +function saveConfig(){ + # to be coded later .. saves class conf to db using setConfigValue +} + +function getConfigValueOrLongvalue($configname,$field=''){ + + if($this->recordcount("misc","name='$configname'")==0) { + $this->output.="
Config value not found: $configname
"; + } else { + if($field<>'') return $this->getField("misc",$field,"name='$configname'"); + else { + $qu="select * from misc where name='$configname'"; + $res=$this->query($qu); + if($res[0]['value']<>'') return $res[0]['value']; + else return $res[0]['longvalue']; + } + } +} + + +function getConfigValue($configname,$field=''){ + if(!$field) $field='value'; + if($this->recordcount("misc","name='$configname'")==0) { + $this->output.="
Config value not found: $configname
"; + } else { + return $this->getField("misc",$field,"name='$configname'"); + } +} + +function setConfigValue($configname,$value,$field=''){ # sets or inserts a config value.. + if(!$field) $field='value'; + if(!$value) $value = ''; + if($this->recordcount("misc","name='$configname'")>0){ + return $this->executeQuery("update misc set $field='$value' where name='$configname'"); + } else { + return $this->executeQuery("insert into misc (name,$field) values ('$configname','$value')"); + } +} + +function setSettingsValue($group,$configname,$value,$field=''){ # sets or inserts a config value.. + if(!$field) $field='value'; + if($this->recordcount("settings","name='$configname'")>0){ + return $this->executeQuery("update settings set $field='$value' where name='$configname' and `group`='$group'"); + } else { + return $this->executeQuery("insert into settings (`group`,name,$field) values ('$group','$configname','$value')"); + } +} + +function setConfigValue2($configname=''){ + # displays input and sets config value + $this->requireAdmin(); + global $_insert,$value,$configname2; + $this->getVariable(array('_insert','value','configname2')); + + + if($_insert){ + $success=$this->setConfigValue($configname2,$value); + if($configname2=='dnsip') $this->addDaemonOp("syncdns",'',''); + return $this->ok_err_text($success,"Successfully set configuration value for $configname2 as $value.","Failed setting configuration value for $configname2 as $value."); + } else { + $currentvalue=$this->getConfigValue($configname); + $inputparams=array( + array('value', 'lefttext'=>'Value'), + array('configname2','hidden','default'=>$configname), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="($configname) setting: ".inputform5($inputparams); + } +} + + +function errorTextExit($str){ + $this->errorText($str); + $this->showexit(); +} + +function requireReseller(){ + if(!($this->isadmin() || $this->isreseller)) + $this->errorTextExit('This operation requires admin or reseller rights!'); +} + +function requireAdmin(){ + if(!$this->isadmin()) + $this->errorTextExit('This operation requires admin rights!'); +} + +# why so much call and call? because this is a timely growing, developing panel, so, something settles down in time... + +function ismydomain($domainname) { + return $this->isuserpermited('domainowner',$domainname); +} + +function isEmailUser(){ + return strstr($this->activeuser,'@'); # active username has @ in its username, hence, this is an email user. +} + +function requireEmailUser(){ + if($this->isEmailUser()) return True; # bu fonksiyon sadece email kullanicilari icin.. + else $this->errorTextExit('This operation requires Email User to be loged in..'); +} + +function requireMyDomain($domainname){ + if($this->isadmin()) return True; + if(!$this->ismydomain($domainname)) + $this->errorTextExit("
$domainname does not belong to your account!
"); +} + +function isLimitExceeded($table1,$where1,$table2,$field,$where2){ + # is count of rows of table1 where "where1" is bigger then the field defined in table2 where "where2" + $sayi=$this->recordcount($table1,$where1); + $max=$this->getField($table2,$field, $where2); + + #$this->output.=print_r2($sayi); + if ($max=="") { + $this->errorText("Error: $field for user is not defined."); + return True; + } elseif ($sayi>=$max) { + $this->errorText("Error: You exceeded your $field (max) quota of: $max
Please contact an administrator.
" ); + return True; + } + return false; +} + +function isuserlimitexceeded ($limittype='',$user=''){ + # check the user limits, such as # of domains, users, quota etc. to be coded later. + if($user=='') $user=$this->activeuser; + $filter=" panelusername='$user'"; + if($user=='') return True; + + switch($limittype){ # different naming issue in conf... + case "maxdomains": + return $this->isLimitExceeded($this->conf['domainstable']['tablename'],$filter,$this->conf['paneluserstable']['tablename'],"maxdomains",$filter); + break; + case "maxsubdomains": + return $this->isLimitExceeded($this->conf['subdomainstable']['tablename'],$filter,$this->conf['paneluserstable']['tablename'],"maxsubdomains",$filter); + break; + case "maxpanelusers": + return $this->isLimitExceeded($this->conf['paneluserstable']['tablename'],"reseller='$user'",$this->conf['paneluserstable']['tablename'],"maxpanelusers",$filter); + break; + + case "maxftpusers": + return $this->isLimitExceeded($this->conf['ftpuserstable']['tablename'],"reseller='$user'",$this->conf['paneluserstable']['tablename'],"maxftpusers",$filter); + break; + + case "maxemails": + return $this->isLimitExceeded($this->conf['emailuserstable']['tablename'],$this->conf['emailuserstable']['ownerfield']."='$user'",$this->conf['paneluserstable']['tablename'],"maxemails",$filter); + break; + + case "maxdbs": + return $this->isLimitExceeded($this->conf['mysqldbstable']['tablename'],"panelusername='$user'",$this->conf['paneluserstable']['tablename'],"maxdbs",$filter); + break; + + case "maxemails": + return $this->isLimitExceeded($this->conf['emailuserstable']['tablename'],"panelusername='$user'",$this->conf['paneluserstable']['tablename'],"maxemails",$filter); + break; + + case "maxvps": + #return $this->isLimitExceeded($this->conf['emailuserstable']['tablename'],"panelusername='$user'",$this->conf['paneluserstable']['tablename'],"maxemails",$filter); + return False; # not checked yet. + break; + + default : $this->errorText($this->sayinmylang("int_undefined_limittype").": $limittype
"); + return True; + } + + #$this->output.="max limit error: $limittype , you exceeded your limit
"; + return false; +} + + +function isuserpermited($permtype,$item='',$user='') { # user permission check, is user authorized to do something + if($this->isadmin()) return True; # admin is permitted to anything. + + if($user=='') $user=$this->activeuser; + switch ($permtype) { + case "deletedomain": + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($user); + $filt="domainname='" . $item . "'"; + $reseller=$this->getField($this->conf['domainstable']['tablename'],"reseller",$filt); + if(in_array($reseller, $userHasAccessToTheseChildrenUsers) or $this->isadmin()) return True; + + break; + case "caneditpaneluser": + $reseller=$this->getField($this->conf['paneluserstable']['tablename'],"reseller","id=$item"); + $panelusername=$this->getField($this->conf['paneluserstable']['tablename'],"panelusername","id=$item"); + if($this->activeuser==$panelusername and !$this->isadmin()) return $this->errorText('You are unable to edit your own account.'); + return ($this->isadmin() or ($reseller==$this->activeuser)) ; + break; + + case "domainowner": + $domainowner=$this->alanal2($this->conf['domainstable']['tablename'],array($this->conf['domainstable']['ownerfield'],$this->conf['domainstable']['resellerfield']),"domainname='$item'"); + if($this->isadmin() or trim($domainowner[$this->conf['domainstable']['ownerfield']]) == trim($this->activeuser) or trim($domainowner['reseller']) == trim($this->activeuser)) return True; + break; + + default: return $this->errorText("Internal EHCP Error: Undefined permtype: $permtype"); + } + + return $this->errorText("Permission Error: $permtype on item $item"); +} + +function editPanelUser(){ + global $id,$newpass,$newpass2; + $this->getVariable(array("id",'newpass','newpass2')); # can edit only if (s)he is reseller of that panel user or is admin.. + + $info=$this->getPanelUserInfo($id); + + if(!$this->isuserpermited('caneditpaneluser',$id)){ # is this owner of that panel user ? + return $this->errorText("You are not authorized to edit this panel user."); + } else { + $extra=array(array('status','select','secenekler'=>$this->statusActivePassive)); + if(!$newpass and !$newpass2 and $id) $this->editrow("paneluserstable","id=$id",$extra); + } + + if(!$newpass and !$newpass2 and $id){ + $_SESSION["temp_id"] = $id; + $inputparams=array( + array('newpass', 'lefttext'=>'New Password:'), + array('newpass2', 'lefttext'=>'Enter New Password Again:'), + array('id','hidden','default'=>$id), + array('op','hidden','default'=>'editpaneluser') + ); + $this->output.="
Reset User Pass:
".inputform5($inputparams); + + } elseif ($newpass and $newpass2 and $id and $newpass==$newpass2){ + if($id == $_SESSION["temp_id"]){ + $success=$this->executeQuery("update ".$this->conf['paneluserstable']['tablename']." set password=md5('$newpass') where id=$id ",'',__FUNCTION__); + }else{ + $success = false; + } + unset($_SESSION["temp_id"]); + $this->ok_err_text($success, "Successfully changed password.", "Failed to change password."); + } + + $this->output.="
← Back to User List"; +} + +// No longer used +// Domains are sorted alphabetically now... +/* +function domainsettings(){ + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $dominfo=$this->getDomainInfo($domainname); + + $alanlar=array('theorder','_insert'); + foreach($alanlar as $al) global $$al; + $degerler=$this->getVariable($alanlar); + + if($_insert){ + $success=True; + $success=$success && $this->executeQuery("update domains set theorder=$theorder where domainname='$domainname'"); + $success=$success && $this->addDaemonOp('syncdomains','',$domainname,'','sync domains'); + $this->ok_err_text($success,"Successfully saved domain settings.","Failed to save domain settings."); + } else { + $inputparams=array(array('theorder','default'=>$dominfo['theorder'])); + $this->output.=inputform5($inputparams); + } + +} +*/ + + +function existscontrol($controls){ + # to be coded later. like domain=>"xxx.com" + $result=True; + foreach($controls as $key=>$val){ + $count=0; + switch($key){ + # vps cases + case 'ip': continue ; # no ip check, same ip can exists on different servers, perhaps.. + case 'hostip': continue ; # multiple vps will have same hostip + case "vpsname": + $count=$this->recordcount($this->conf['vpstable']['tablename'],"vpsname='$val'"); + break; + # end vps cases + + + case "domainname": + $count=$this->recordcount($this->conf['domainstable']['tablename'],"domainname='$val'"); + break; + + case "ftpusername": + $count=$this->recordcount($this->conf['ftpuserstable']['tablename'],"ftpusername='$val'"); + break; + + case "panelusername": + $count=$this->recordcount($this->conf['paneluserstable']['tablename'],"panelusername='$val'"); + break; + + case "dbname": + $count=$this->recordcount($this->conf['mysqldbstable']['tablename'],"dbname='$val'"); + break; + + case "dbusername": + $count=$this->recordcount($this->conf['mysqldbuserstable']['tablename'],"dbusername='$val'"); + break; + + case 'email': + $count=$this->recordcount($this->conf['emailuserstable']['tablename'],"email='$val'"); + break; + + case 'mailusername': + $count=0; # mailusername may be multiple for different domains, no problem. + break; + + default: return $this->errorText("Internal EHCP Error: Undefined parameter: $key=>$val ar: ".print_r2($controls)); + } + + if($count>0) { + $result=$this->errorText("$key already exists: $val "); + } + + } #foreach + if(!$result) $this->errorText("At least one error occured!"); + return $result; +}# function + +/* +steps to control when doing something: +1- is user active? +2- is user limit exceeded for that action? +3- is user permitted to do that? +4- is user owner of that or authorized? +5- is target entity already exists ? that is, is domain exists, or is panel users exists ? + +two kind of control: +before displaying inputs, is user active, limit controls, is user permitted, is user owner(if entity known) +after submitting inputs, all of these controls, for security, plus, is that alread exists? +*/ + +# ---------------- error ve debug fonksiyonlari... + +function error_occured($source='',$errstr=''){ + if(!$source) $source='source not specified'; + $str=$this->sayinmylang('error_occured')."(source:$source)
err: $errstr
".$this->conn->ErrorMsg(); + return $this->errorText($str); +} + +function errorText($str='',$emailtoadmin=false){ + // Multiple stop signs pls. + $img=""; + if($this->conn->ErrorMsg()<>'') $str.="
Last Database Error: ".$this->conn->ErrorMsg(); + + if($this->commandline) { + echo "\n___________________\n$str\n__________________\n"; + }else{ + $this->output.="
+ + + + +
$imgAn Error Occured:
$str

"; + } + if($emailtoadmin) $this->infotoadminemail($str,"An Error has Occurred",false); + return false; # errorText function always returns false; +} + +function okeyText($str=''){ + $img=""; + $this->output.="
+ + + + +
$imgOperation completed successfully!
".$str."

"; + return True;# okeytext always returns True +} + +function ok_err_text($success,$successtext='',$failtext=''){ + if($success) + $this->okeyText($successtext); + else $this->errorText($failtext); + return $success; +} + + +function debugtext($str){ + + if($this->debuglevel == 0) return false; # z7 mod + + $img=""; + $this->output.="
+ + + + +
$imgDebug output:
".$str."

"; + return True; +} + +#---- end of error-debug functions + + +function isactive($user=''){ + if(!$user) $user=$this->activeuser; + $status=$this->getField($this->conf['paneluserstable']['tablename'],"status",$this->conf['paneluserstable']['usernamefield']."='$user'"); + + if($status!=$this->status_active){ + return $this->errorText("Error: User $user is not active. Your account is not active. Please contact your hosting provider. Your domain status is currently set to: $status) "); + }else return True; +} + +function beforeInputControls($op='',$params=''){ + # all before input controls in a single place, so after input controls... + # returns false, if input control fails and user cannor proceed, + # returns True, if user can proceed + + # first common controls + if(!$this->isNoPassOp()) { # if no password required, being active is not required. if this is an operation that does not need a pass.. do it without checking if active. + if(!$this->isactive()) return false; + } + + # controls specific to op(eration) + switch($op){ + case "adddomaintothispaneluser": + return !$this->isuserlimitexceeded('maxdomains'); + break; + + case "adddomain": + return !( + $this->isuserlimitexceeded('maxdomains') + or $this->isuserlimitexceeded('maxpanelusers') + or $this->isuserlimitexceeded('maxftpusers') + ) + or + $this->isNoPassOp();# for domain requests, no limit is important.. there may be a limit here too. + break; + + case "addftpuser": + return !$this->isuserlimitexceeded('maxftpusers') or $this->isNoPassOp();# for domain requests + break; + + case 'adddb': + return !$this->isuserlimitexceeded('maxdbs'); + # old and equivalent statement: if($this->isuserlimitexceeded('maxdbs')) return false; + # meaning: if user maxdb limit exceeded, user cannot add more, cannot proceed, so return false.. + break; + + case 'addpaneluser': + return !$this->isuserlimitexceeded('maxpanelusers'); + break; + + case 'addemail': + return !$this->isuserlimitexceeded('maxemails'); + break; + + case 'addvps': + return !$this->isuserlimitexceeded('maxvps'); + break; + + case 'addsubdomain': + case 'addsubdomainwithftp': + return !$this->isuserlimitexceeded('maxsubdomains'); + break; + + default: $this->output.="Undefined input control: ".$op; + + + } + + return True; +} + +function afterInputControls($op='',$params=''){ + if(!$this->beforeInputControls($op)) return false; # same controls as above, + if(!$this->existscontrol($params)) return false; + $domainname=trim($params['domainname']); + + if($op=='addvps') { + foreach(array('vpsname','ip','hostip') as $check) if($params[$check]=='') return $this->errorTextExit("$op: $check parameter cannot be empty."); + $sayi=$this->recordcount("vps","vpsname='".$params['vpsname']."' and ip='".$params['ip']."' and hostip='".$params['hostip']."'"); + if($sayi>0) return $this->errorTextExit("We have another vps with same name, same ip in same host/server"); + } + + # domainname check may be on top, and common for all ops. + + if($op=='adddomain' or $op=='adddomaintothispaneluser'){ # common controls for both operation + if($domainname=='') return $this->errorText("Domain name cannot be empty!"); + if($domainname==$this->miscconfig['dnsip'] or $domainname==$this->miscconfig['localip']) return $this->errorText("You cannot use the IP address of the server as a domain name: $domainname
DNS IP Address: ".$this->miscconfig['dnsip']."
Local IP: ".$this->miscconfig['localip']); # domainde kisitlama yok, ama boyle olunca, abuk subuk seyler olabilir.. ip girince de, sunucu paneli webden ulasilamaz oluyor.. + } + + if($op=='adddomain'){ + if($domainname=='' or $params['ftpusername']=='' or $params['panelusername']=='') { + return $this->errorText("FTP Username or Panel Username cannot be empty.
You provided:
".print_r2($params)); + } + } + + if($op=='adddomaintothispaneluser'){ + if($params['domainname']=='') { + return $this->errorText("Domain cannot be empty.
You provided:
".print_r2($params)); + } + } + + if($op=='adddb'){ + # thanks to www.bikcmp.com for bug-report.. + if($params['dbusername']=='root') return $this->errorText("'root' username is forbidden. Use another username!"); + } + + if($op=='addemail'){ + if(trim($params['mailusername'])==''){ + return $this->errorText("Mail username cannot be empty.
You provided:
".print_r2($params)); + } + } + + if($op == 'addpaneluser'){ + if(!$this->hasValueOrZero($params['email'])){ + return $this->errorText("Email address is required!"); + }else{ + if(!inputValid($params['email'], "email_address")){ + return $this->errorText("Please use a valid email address!"); + } + } + } + + + return True; +} + +function addDomainEasy(){ + global $domainname,$email,$password,$_insert; + $this->getVariable(array("domainname","email",'password','_insert')); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomain",array())) return false; + + $inputparams=array( + array('domainname', 'lefttext'=>'Domain Name:'), + array('password','password_with_generate','default'=>'1234', 'lefttext'=>'Password'), + array('email','lefttext'=>'Email of Domain Owner','default'=>$this->miscconfig['adminemail']), + array('op','hidden','default'=>__FUNCTION__) + ); + + + $this->output.="Enter info below, all usernames will be domainname, all passwords will be same:
Default values are: quota(mb):50, ul/dl bw: 200KB/s
" + ."
Normally, do not write www. only yourdom.com forexample:
" + .inputform5($inputparams); + + + } else { + $panelusername=$ftpusername=$domainname; + $paneluserpass=$ftppassword=$password; + + $success=$success && $this->addDomainDirect($domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$this->status_active,$email); + $success=$success && $this->setselecteddomain($domainname); + $this->ok_err_text($success,'Successfully added domain!','Failed to add domain!'); + } + $this->showSimilarFunctions('domain'); + return $success; +} + + +function addDomainEasyip(){ + global $domainname,$email,$password,$ip,$_insert; + $this->getVariable(array("domainname","email",'password','ip','_insert')); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomain",array())) return false; + $ips=$this->query("select ip from servers where accessip='localhost'"); + #$this->print_r2($ips); + $ips2=array(); + foreach($ips as $i) $ips2[$i['ip']]=$i['ip']; + + $inputparams=array( + array('ip','select','lefttext'=>'IP to be Assigned','secenekler'=>$ips2,'righttext'=>"List/Add Servers/ IP's"), + array('domainname', 'lefttext'=>'Domain Name'), + array('password','password_with_generate','default'=>'1234', 'lefttext'=>'Password'), + array('email','lefttext'=>'Email of Domain Owner','default'=>$this->miscconfig['adminemail']), + array('op','hidden','default'=>__FUNCTION__) + ); + + #$this->print_r2($inputparams); + + $this->output.="Enter info below, all usernames will be domainname, all passwords will be same:
Default values are: quota(mb):50, ul/dl bw: 200KB/s
" + ."
Normally, do not write www. only yourdom.com forexample:
" + .inputform5($inputparams); + + + } else { + $panelusername=$ftpusername=$domainname; + $paneluserpass=$ftppassword=$password; + + $success=$success && $this->addDomainDirect($domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$this->status_active,$email,0,$ip); + $success=$success && $this->setselecteddomain($domainname); + $this->ok_err_text($success,'Successfully added domain.','Failed to add domain.'); + } + $this->showSimilarFunctions('domain'); + return $success; +} + + +function transferDomain(){ + # transfer domain to another ehcp user/client in this server + global $domainname,$username,$_insert; + $this->getVariable(array("domainname",'username','_insert')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + if(!$username){ + $this->output.="Please enter the EHCP username that you would like to transfer the domain to: ".inputform5(array( + array("username", 'lefttext'=>'Username') + )); + } else { + $count=$this->recordcount($this->conf['paneluserstable']['tablename'], "panelusername='$username'"); + if($count==0) return $this->errorText("User $username was not found."); + + $success=$this->executeQuery("update ".$this->conf['domainstable']['tablename']." set ".$this->conf['domainstable']['ownerfield']."='$username' where domainname='$domainname'", $opname); + return $this->ok_err_text($success, "Domain was successfully transfered.", "Domain transfer failed!"); + } +} + +function setFTPPathInSession(){ + $selfftp=$this->getField('ftpaccounts','ftpusername',"panelusername='$this->activeuser' and type='default'"); + if($selfftp != ''){ + $_SESSION['FTP_HOME_PATH'] = $this->conf['vhosts'] . '/' . $selfftp; + } +} + +function getSelfFtpAccount($returnto1=''){ + global $ftpusername,$ftppassword,$returnto,$_insert; + $this->getVariable(array('ftpusername','ftppassword','returnto','_insert')); + + $selfftp=$this->getField('ftpaccounts','ftpusername',"panelusername='$this->activeuser' and type='default'"); + if($selfftp<>'') return $selfftp; + + if($_insert) { + if(!$this->afterInputControls('addftpuser',array('ftpusername'=>$ftpusername))) return false; + $this->output.='Will add here'; + $success=$this->addFtpUserDirect($this->activeuser,$ftpusername,$ftppassword,$this->conf['vhosts'].'/'.$ftpusername,$upload=100,$download=100,$quota=1000,$domainname,'default'); + $this->setFTPPathInSession(); + $this->redirecttourl('?op='.$returnto); + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + + $inputparams=array( + array('ftpusername', 'lefttext'=>'FTP Username:'), + array('ftppassword','password_with_generate','lefttext'=>'FTP Password:'), + array('returnto','hidden','default'=>$returnto1), + array('op','hidden','default'=>__FUNCTION__) + ); + + + $this->output.="A default FTP account does not yet exist for your EHCP username.  Let's set one up now:
Specify your desired default FTP account information:" + .inputform5($inputparams); + + $this->showexit(); + } + return True; +} + + + + +function addDomainToThisPaneluser(){ # add domain to this paneluser and existing ftp space + global $domainname,$_insert; + $this->getVariable(array("domainname","_insert")); + $selfftp=$this->getSelfFtpAccount($returnto=__FUNCTION__); # ftp account for this panel user is with type field=default in ftpaccounts table + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomaintothispaneluser",array())) return false; + $inputparams=array( + array('domainname','lefttext'=>'Domain Name:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="
Add an additional domain to your account which will be accessible via your default FTP account:
Do not include domain prefixes such as \"http://\" or \"www.\":
".inputform5($inputparams); + } else { + // Better domain validation + $domainname=$this->adjustDomainname($domainname); + $success = inputValid($domainname,'domainname'); + + $success=$success && $this->addDomainDirectToThisPaneluser($domainname,$selfftp); + $success=$success && $this->setselecteddomain($domainname); + $this->ok_err_text($success,'Successfully added domain to your account.','Failed to add domain to your account. Please make sure the domain name is valid and includes a top level domain ending such as .com, .net, etc.'); + } + $this->showSimilarFunctions('domain'); + return $success; +} + +function strNewlineToArray($str){ + # this is written because, input text in an inputbox in web browser, sometime has \n as newline char, sometime \r\n + # used in especially bulkaddDomain + +/* + if($a=strstr($str,'\r\n')===false) + $ret=explode('\n',$str); + else + $ret=explode('\r\n',$str); +*/ + # testing: $this->output.='
'.$str.'....\n___\r___

'; + # $str=preg_replace('/\r\n|\r/', '\n', $str); # this does not work. + $str=str_replace(array('\n\r','\r\n','\r'),array('\n','\n','\n'), $str); + # $this->output.="
$str

"; + + $ret=explode('\n',$str); # bugreport by razvan , should work for all browsers. https://bugs.launchpad.net/ehcp/+bug/524551 + return $ret; +} + +function bulkAddEmail(){ +/* +thanks avra911: http://www.ehcp.net/?q=node/577#comment-1414 + +email1@domain1.com:password1 +email2@domain2.com:password2 + +*/ + global $emails; + $this->getVariable(array('emails')); + + if(!$emails){ + $this->output.="Enter emails line by line, like:
+email1@domain1.com:password1
+email2@domain2.com:password2
+
+

"; + $this->showSimilarFunctions('email'); + } else { + $this->output.="emailler eklenecek:"; + $emails=$this->strNewlineToArray($emails); + $this->output.=print_r2($emails); + foreach($emails as $line){ + $line=trim($line); + if($line=='') continue; + $info=explode(":",$line); # get email part + $info2=explode("@",$info[0]); + $mailusername=$info2[0]; + $domainname=$info2[1]; + $password=$info[1]; # get pass + $this->addEmailDirect($mailusername,$domainname,$password,$quota=10,$autoreplysubject,$autoreplymessage); + } + } + +} + +function bulkaddDomain(){ + # gets many domains in one step, adds them, then call syncdns and syncdomains once + global $domainler; + $this->getVariable(array('domainler')); + $selfftp=$this->getSelfFtpAccount($returnto=__FUNCTION__); + $success=True; + + if(!$domainler){ + $this->output.="Enter domain names below one by one,
don't enter www. at start of domains,
All domains will be setup under your ftp directory:

"; + } else { + $this->output.="Adding domains:
"; + $domains=$this->strNewlineToArray($domainler); + $newdomains=array(); + $errors = 0; + + foreach($domains as $dom){ + $dom=trim($dom); + $dom=str_replace(array("\\","www.","http://","https://"),array('','','',''),$dom); # replace accidental www.'s + + if($dom=="") continue; + if(!in_array($dom,$newdomains)) { + $newdomains[]=$dom; # eliminate duplicate domainnames.. + + $this->output.="Checking domain: $dom
"; + + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$dom, + ) + ) + ) return false; + } + } + + foreach($newdomains as $dom){ + $this->output.="Setting up domain: $dom
"; + if($success == false){ + $errors++; + } + $this->addDomainDirectToThisPaneluser($dom,$selfftp,false); + } + + + # sync all new domains... + #$success=$success && $this->addDaemonOp("syncdomains",'xx','','','sync domains'); # this is not needed anymore, since each domain is synced itself, in addDomainDirectToThisPaneluser function above. + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + + if($errors > 0){ + $success = false; + } + + $this->ok_err_text($success,"Successfully added multiple domains in bulk.","Failed to add multiple domains in bulk."); + } + $this->showSimilarFunctions('domain'); + return $success; +} + +function bulkDeleteDomain(){ + # this is not put in gui yet, for security + global $domainler; + $this->getVariable(array('domainler')); + + $success=True; + + if(!$domainler){ + $this->output.="Enter domain names below one by one,
don't enter www. at start of domains,
All domains will be deleted automatically. BE CAREFUL !!! :

"; + } else { + $this->output.="Deleting domains:
"; + $domains=$this->strNewlineToArray($domainler); + + $newdomains=array(); + + foreach($domains as $dom){ + $dom=trim($dom); + $dom=str_replace("\\",'',$dom); + + if($dom=="") continue; + if(!in_array($dom,$newdomains) and $this->isuserpermited('deletedomain',$dom)) { + $newdomains[]=$dom; # eliminate duplicate domainnames.. and check if deletable, + } + } + + foreach($newdomains as $dom){ + $this->output.="Deleting domain: $dom
"; + $success=$success && $this->deleteDomainDirect($dom,false); + } + + + # sync all domains... + #$this->addDaemonOp("syncdomains",'xx','','','sync domains'); # this is not needed anymore, since each domain is synced itself. + $this->addDaemonOp("syncdns",'','','','sync dns'); + + return $this->ok_err_text($success,"Selected domains were deleted.","Failed to delete selected domains."); + + } +} + +function noEmpty($values){ + if(!is_array($values)) $values=array($values); # this way, function may accept both array,and non-array + foreach($values as $val) + if($val=='') $this->errorTextExit("Empty value not allowed"); +} + + +function addDnsOnlyDomainWithPaneluser(){ + global $domainname,$serverip,$_insert,$password,$email; + $this->getVariable(array("domainname","_insert",'serverip','password','email')); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomaintothispaneluser",array())) return false; + $inputparams=array( + array('domainname', 'lefttext'=>'Domain Name:'), + array('password','password_with_generate', 'lefttext'=>'Password:'), + array('email', 'lefttext'=>'Email Address:'), + array('serverip', 'lefttext'=>'Server IP Address the Domain is Hosted On:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="
Add a DNS only domain.  This will create DNS records for a domain only along with creating an account to access the panel.
".inputform5($inputparams); + } else { + + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$domainname, + ) + ) + ) return false; + + $domainname = $this->adjustDomainname($domainname); + $success = $this->is_valid_domain_name($domainname); + if($success){ + $paneluserinfo=$this->getPanelUserInfo(); + $panelusername=$ftpusername=$domainname; + $paneluserpass=$ftppassword=$password; + + $sql="insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,serverip) values ('".$this->activeuser."','$panelusername','$domainname','','".$this->status_active."','$serverip')"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addPanelUserDirect($panelusername,$paneluserpass,1,0,0,0,0,$quota,0,10,'',$email,$this->status_active); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,'DNS only domain was successfully added.','Failed to add domain ('.__FUNCTION__.')'); + }else{ + $this->ok_err_text($success,'DNS only domain was successfully added.','Domain ' . $domainname . ' is invalid!'); + } + } + $this->showSimilarFunctions('domain'); + return $success; + +} + +function isValidIP($ip){ # by earnolmartin@gmail.com + if(preg_match( "/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/", $ip)){ + return True; + }else{ + return False; + } +} + +function isValidDomain($domain, $checkIfExistsInPanel = true){ + $parts = explode(".", $domain); + if(is_array($parts) && count($parts) != 2){ + return false; + } + + $origDomain = $domain; + $domain = removeInvalidChars($domain, "domainname"); + if($domain !== $origDomain){ + return false; + } + + if($checkIfExistsInPanel){ + $result = $this->getDomainInfo($domain, $checkIfExistsInPanel); + if($result){ // Domain info returns false if the domain does not exist... we don't want it to exist in the panel. + return false; + } + } + + return true; +} + +function isValidSubDomain($entry, $checkIfExistsInPanel = true){ + $parts = explode(".", $entry); + if(is_array($parts) && count($parts) < 3){ + return false; + } + + $origEntry = $entry; + $entry = removeInvalidChars($entry, "domainname"); + if($entry !== $origEntry){ + return false; + } + + if($checkIfExistsInPanel){ + $domIndex = count($parts) - 2; + $domainname = $parts[$domIndex] . "." . $parts[count($parts) - 1]; + for($i = 0; $i < $domIndex; $i++){ + if($i == 0){ + $subdomain .= $parts[$i]; + }else{ + $subdomain .= "." . $parts[$i]; + } + } + $result = $this->getSubDomains("domainname ='" . $domainname . "' AND subdomain = '" . $subdomain . "'"); + if(count($result) > 0 || $result){ // Should return nothing if the subdomain doesn't already exist in the panel + return false; // Subdomain exists + } + } + + return true; +} + +function getMasterIP($domainname){ # by earnolmartin@gmail.com + $res=$this->query("select dnsmaster from domains where domainname = '$domainname'"); + return $res[0]['dnsmaster']; +} + +function addSlaveDNS(){ # coded by earnolmartin@gmail.com, modified little by ehcpdeveloper + global $serverip,$_insert,$password,$dnsmaster,$email; + $this->getVariable(array("_insert",'dnsmaster')); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); # this ensures a domain selected. + + $success=True; + $errmsg=''; + + if($this->getIsSlaveDomain($domainname)){ + $dnsmaster = $this->getMasterIP($domainname); + $isAlreadySlave="

$domainname is currently configured as a slave DNS domain.  You can edit the master server IP address below.  Click here to remove slave configuration from the domain.  If you do not wish to change these settings, please go back.

"; + } + + if(!$_insert) { + $inputparams=array( + array('dnsmaster','input','lefttext'=>'Master Server IP:','default'=>$dnsmaster), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= $isAlreadySlave . "


If this domain should download and use DNS records from another server, please enter the master server IP address below.
".inputform5($inputparams); + } else { + if (!$this->isValidIP($dnsmaster)) $this->errorTextExit("IP address $dnsmaster entered is invalid!"); + + $sql="update ".$this->conf['domainstable']['tablename']." set dnsmaster ='$dnsmaster' WHERE domainname = '$domainname'"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + + # single function ok_err_text is enaugh at end of an operation. + $this->ok_err_text($success,'Domain has been configured as a DNS Slave',"Failed to change domain into slave! $errmsg (".__FUNCTION__.')'); + } + + + $this->showSimilarFunctions('domain'); + return $success; +} + +function errArrayToStr($errors){ + $errStr = ''; + + foreach($errors as $err){ + $errStr .= $err . "
"; + } + + return $errStr; +} + +function removeSlaveDNS(){ # coded by earnolmartin@gmail.com, modified by ehcpdeveloper + global $domainname,$serverip,$_insert,$password,$email, $yes, $no; + $this->getVariable(array("_insert",'yes','no')); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); # this ensures a domain selected. + + $success=True; + + if(!($this->getIsSlaveDomain($domainname))) $this->errorTextExit("Configuration cannot be changed! The currently selected domain is already NOT configured as a slave!"); + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Yes') + ); + + $this->output.="


Are you sure you want to remove the slave status from $domainname ?".inputform5($inputparams); + } else { + $sql="update ".$this->conf['domainstable']['tablename']." set dnsmaster = NULL WHERE domainname = '$domainname'"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,"$domainname is no longer configured as a slave domain.","$errmsg
No configuration changes have been made to the DNS type of your domain! (".__FUNCTION__.')'); + } + + + $this->showSimilarFunctions('domain'); + return $success; +} + +function hasValueOrZero($var){ + if(empty($var) && @$var != "0"){ + return false; + }else{ + return true; + } +} + +function hasValueOrZeroAndIsNumeric($var){ + if((empty($var) || @!is_numeric($var)) && @$var != "0"){ + return false; + }else{ + if($var >= 0){ + return true; + } + return false; + } +} + +function addHostingPlan(){ + global $_insert,$plan_name,$plan_master_reseller,$plan_max_panelusers,$plan_max_ftpusers,$plan_max_dbs,$plan_max_emails,$plan_max_domains,$plan_max_subdomains,$plan_quota; + + // Only admins and resellers can define hosting plans + $this->requireReseller(); + + $reseller = $this->activeuser; + $userinfo = $this->getPanelUserInfo('',$reseller); + $success=True; + + // All variables will already be escaped and posted when using this function + $this->getVariable(array("_insert",'plan_name','plan_master_reseller','plan_max_panelusers','plan_max_ftpusers','plan_max_dbs','plan_max_emails','plan_max_domains','plan_max_subdomains','plan_quota')); + + if(!$_insert) { + $inputparams=array( + array('plan_name','input',"lefttext"=>"Plan Name:",'default'=>$plan_name), + array('plan_master_reseller','checkbox','lefttext'=>'Master Reseller Account:','default'=>'1'), + array('plan_max_panelusers','input','lefttext'=>'Max Panel Users:','default'=>'0'), + array('plan_max_ftpusers','input','lefttext'=>'Max FTP Users:','default'=>'5'), + array('plan_max_dbs','input','lefttext'=>'Max MySQL Databases:','default'=>'20'), + array('plan_max_emails','input','lefttext'=>'Max Email Accounts:','default'=>'5'), + array('plan_max_domains','input','lefttext'=>'Max Domains:','default'=>'5'), + array('plan_max_subdomains','input','lefttext'=>'Max Sub Domains:','default'=>'10'), + array('plan_quota','input','lefttext'=>'Hard Disk Space Quota (in MB):','default'=>'500'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.= "

Create Hosting Plan Templates:

".inputform5($inputparams); + }else{ + // OK, perform validation + // Clear any errors that may exist + if(isset($errors)){ + unset($errors); + } + + /* Validation Section */ + if(empty($plan_name)){ + $errors[] = "You must provide a name for this hosting plan."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_panelusers)){ + $errors[] = "Please define the maximum number of panel users a client is allowed to create for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_ftpusers)){ + $errors[] = "Please define the maximum number of FTP users a client is allowed to create for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_dbs)){ + $errors[] = "Please define the maximum number of MySQL databases a client is allowed to create for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_emails)){ + $errors[] = "Please define the maximum number of Email accounts a client is allowed to create for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_domains)){ + $errors[] = "Please define the maximum number of Domains a client is allowed to add for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_max_subdomains)){ + $errors[] = "Please define the maximum number of Sub Domains a client is allowed to create for this hosting plan as an integer value."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_quota)){ + $errors[] = "Please define the hard disk space quota for this hosting plan."; + } + + if(empty($plan_master_reseller)){ + // Default to not a reseller if the checkbox isn't checked + $plan_master_reseller = 0; + } + + // Reseller validation handling to prevent the creation of plans + if($reseller != 'admin'){ + if($plan_master_reseller == 1){ + $plan_master_reseller = 0; + $this->output.="

Only the root server administrator can set the master reseller parameter on a hosting plan template.  Your selection was ignored.

"; + } + } + + if($reseller != 'admin' && $userinfo['master_reseller'] != 1){ + // Normal resellers cannot create other resellers + if($plan_max_panelusers != 0){ + $plan_max_panelusers = 0; + $this->output.="

Only master reseller accounts can create other reseller accounts!  The hosting plan template created will allow no-additional panel users.

"; + } + } + + // Check and make sure any other existing hosting plans don't have the same name + $SQL = "SELECT * FROM " . $this->conf['hosting_plans_table']['tablename'] . " WHERE name = '$plan_name' AND panelusername = '$this->activeuser'"; + $rs=$this->query($SQL); + if(count($rs) > 0){ + $errors[] = "A hosting plan has already been defined with the name of \"$plan_name\". Choose another name."; + } + + // Output errors + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Ok we passed validation... put it in db + $SQL = "INSERT INTO " . $this->conf['hosting_plans_table']['tablename'] . " (name, master_reseller, max_panelusers, max_ftpusers, max_dbs, max_emails, max_domains, max_subdomains, quota, panelusername) VALUES ('$plan_name', '$plan_master_reseller', '$plan_max_panelusers', '$plan_max_ftpusers', '$plan_max_dbs', '$plan_max_emails', '$plan_max_domains', '$plan_max_subdomains', '$plan_quota', '$this->activeuser')"; + + // Run Query + $success = $this->executeQuery($SQL); + + // Return + $this->ok_err_text($success,'Saved hosting plan named "' . $plan_name . '" into the database.','Failed to saved hosting plan named "' . $plan_name . '"! ('.__FUNCTION__.')'); + } + return $success; +} + +function removeHostingPlan(){ + global $_insert,$hostingPlanIdsToDelete; + + // Only admins and resellers can define hosting plans + $this->requireReseller(); + $success=True; + + $this->getVariable(array("_insert")); + $hostingPlanIdsToDelete = $_POST['hostingPlanIdsToDelete']; + $success=True; + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Remove Selected Hosting Plan Templates') + ); + + // Build table based on queries + $SQL = "SELECT * FROM " . $this->conf['hosting_plans_table']['tablename']; + + // Admin should be able to see all hosting plans + if(!$this->isadmin()){ + $SQL .= " WHERE panelusername='" . $this->activeuser . "'"; + } + + $SQL .= " ORDER BY panelusername"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 0){ + $this->errorTextExit('No saved hosting plan templates exist in the database yet.'); + }else{ + $table = "
"; + foreach ($rs as $r) { + if(empty($r["master_reseller"]) || $r["master_reseller"] == 0){ + $MasterResellerPlan = "No"; + }else{ + $MasterResellerPlan = "Yes"; + } + $table .= ""; + } + $table .= "
SelectPlan NameMaster ResellerMax Panel UsersMax FTP UsersMax MySQL DBsMax Email AccountsMax DomainsMax Sub DomainsQuota (in MB)Created By
{$r['name']}{$MasterResellerPlan}{$r['max_panelusers']}{$r['max_ftpusers']}{$r['max_dbs']}{$r['max_emails']}{$r['max_domains']}{$r['max_subdomains']}{$r['quota']}{$r['panelusername']}

"; + } + + $this->output.="
List of Saved Hosting Plan Templates
".$table; + } else { + if(isset($hostingPlanIdsToDelete) && is_array($hostingPlanIdsToDelete) && count($hostingPlanIdsToDelete) > 0){ + foreach($hostingPlanIdsToDelete as $toDelete){ + // Secure the string + $toDelete = $this->escape($toDelete); + + // Then actually delete the record + $sql="delete from ". $this->conf['hosting_plans_table']['tablename'] ." WHERE id = '$toDelete'"; + if(!$this->isadmin()){ + $sql .= " AND panelusername = '$this->activeuser'"; + } + $success=$success && $this->executeQuery($sql); + } + }else{ + $success = FALSE; + $errmsg = "No existing hosting plans were selected for removal!"; + } + + $this->ok_err_text($success,"Selected hosting plans were deleted!","$errmsg
Nothing deleted! (".__FUNCTION__.')'); + } + return $success; +} + +function addPasswordProtectedDir(){ #coded by earnolmartin@gmail.com + global $protected_dir,$_insert,$password,$username; + + // Domain must be chosen + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + $success=True; + + if(isset($domainname) && !empty($domainname)){ + $this->getVariable(array("_insert",'protected_dir','password','username')); + $domainhome=$this->getField($this->conf['domainstable']['tablename'],"homedir","domainname='$domainname'")."/"; + + $errmsg=''; + + if(!$_insert) { + $inputparams=array( + array('protected_dir','input',"lefttext"=>"Directory: {$domainhome}httpdocs/",'default'=>$protected_dir), + array('username','input','lefttext'=>'Username for Directory:','default'=>$username), + array('password','input','lefttext'=>'Password for Directory:','default'=>$password), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= "
Create Password Protected Directory:

Leave the protected directory field blank to password protect the entire domain.


".inputform5($inputparams); + } else { + // Clear any errors that may exist + if(isset($errors)){ + unset($errors); + } + + // Convert the directory to lowercase + $protected_dir = strtolower($protected_dir); + + /* Validation Section */ + // Array of invalid protected directories + $cantUseTheseDirs = array("phpmyadmin", "webmail", "roundcube"); + if(in_array($protected_dir, $cantUseTheseDirs)){ + $errors[] = "You can't setup \"$protected_dir\" as a password protected directory as it is a system used directory!"; + } + + if(empty($password) || empty($username)){ + $errors[] = "You must provide a valid username and password in order to proceed!"; + } + + if(!isset($protected_dir) || empty($protected_dir) || $protected_dir == "/"){ + $protected_dir = ""; + } + + // Check and make sure any existing password protected directories for this domain are not contained in the one they want to add + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname = '$domainname'"; + $rs=$this->query($SQL); + $dirToCheck = $domainhome . "httpdocs/" . $protected_dir; + foreach($rs as $row){ + if(!empty($row["protected_dir"])){ + $fullPathFromDB = $row["domainpath"] . "httpdocs/" . $row["protected_dir"] . "/"; + }else{ + $fullPathFromDB = $row["domainpath"] . "httpdocs/" . $row["protected_dir"]; + } + $fullPathFromDBWithoutEndingSlash = $row["domainpath"] . "httpdocs/" . $row["protected_dir"]; + // If an entry exists in the database already pointing to + if (strpos($dirToCheck,$fullPathFromDB) !== false || $dirToCheck == $fullPathFromDBWithoutEndingSlash) { + $errors[] = "An existing password protected directory preceeds the authority over the desired directory of \"$protected_dir\"!"; + } + } + + // Strip out invalid characters + $protected_dir = preg_replace('/[^A-Za-z0-9\/_-]/', '', strip_tags(trim($protected_dir))); + + // Remove preceeding forward slash + if($protected_dir != "" && $protected_dir[0] == "/"){ + $protected_dir = substr($protected_dir, 1); + } + + // Remove proceeding forward slash + if($protected_dir != "" && $protected_dir[strlen($protected_dir)-1] == "/"){ + $protected_dir = substr($protected_dir, 0, -1); + } + + // Remove any invalid characters: + $protected_dir = removeInvalidChars($protected_dir, "directory"); + + // Output errors + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Escape all variables + $protected_dir = $this->escape($protected_dir); + $username = $this->escape($username); + $password = $this->escape($password); + + // If the password protection is for the entire domain, we need to delete any other password protected entries + if(empty($protected_dir)){ + + // First select each record to delete, delete the htaccess file and httpauthentication file + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname='$domainname' and protected_dir IS NOT NULL;"; + $rs = $this->query($SQL); + foreach($rs as $row){ + $authPath = $row["domainpath"] . $row["id"]; + $htaccessPath = $row["domainpath"] . "httpdocs/" . $row["protected_dir"] . "/.htaccess"; + $this->bashDelete($authPath); + $this->bashDelete($htaccessPath); + } + + // Delete them from the database + $SQL = "DELETE FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname='$domainname' and protected_dir IS NOT NULL"; + $this->executeQuery($SQL); + } + + // Ok we passed validation... put it in db + $SQL = "INSERT INTO " . $this->conf['pwd_dirs_table']['tablename'] . " (domainname, domainpath, protected_dir, username, password) VALUES ('$domainname', '$domainhome', '$protected_dir', '$username', '$password')"; + + // Run Query + $this->executeQuery($SQL); + + $success=$success && $this->addDaemonOp("process_pwd_dirs",'','','','handle password protected directories'); + + // Domains need to be synced since the password protected directory structure is stored in the actual template itself + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + + $this->ok_err_text($success,'Successfully password protected the directory of "' . $dirToCheck . '"!',"Failed to add password protected the directory of " . $dirToCheck . "! (".__FUNCTION__.')'); + } + } + return $success; +} + +function bashDelete($file, $recursive = false){ + return $this->addDaemonOp('deletefilefromsystem', $file, ($recursive ? 1 : 0) , '', 'Delete File(s)'); +} + +function deleteFileFromSystem($file, $recursive = false){ + $this->requireCommandLine(__FUNCTION__); + echo "Deleting file/folder " . $file . " from system... Using recursive call: " . (!$recursive ? "NO" : "YES") . "\n"; + if(file_exists($file)){ + $comStr = "rm"; + if($recursive){ + $comStr .= " -rf"; + } + $comStr .= " $file"; + passthru2_silent($comStr, true, true); + } + + return true; +} + +function removePasswordProtectedDirByDomain($domainname){ + $success = true; + + $sql="delete from ". $this->conf['pwd_dirs_table']['tablename'] ." WHERE domainname='$domainname';"; + $success=$success && $this->executeQuery($sql); + + return $success; +} + +function getNginxPasswordProtectedRootDirectoriesByDomain($domainname){ + $conf = ""; + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname = '$domainname' and (protected_dir IS NULL OR protected_dir='')"; + $rs=$this->query($SQL); + if(count($rs) == 1){ + foreach($rs as $row){ + $homedir=$row['domainpath']."httpdocs"; + $protected_dir = $row['protected_dir']; + $passwdfile = $row['domainpath'] . $row['id']; + $conf .= "auth_basic \"Restricted Area\"; + auth_basic_user_file $passwdfile;"; + } + } + return $conf; +} + +function getApachePasswordProtectedRootDirectoriesByDomain($domainname){ + $conf = ""; + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname = '$domainname' and (protected_dir IS NULL OR protected_dir='')"; + $rs=$this->query($SQL); + if(count($rs) == 1){ + foreach($rs as $row){ + $homedir=$row['domainpath']."httpdocs"; + $homedirForTemplate=$row['domainpath']; + $lastCharOfHomeDirForTemp = $homedirForTemplate[strlen($homedirForTemplate)-1]; + if($lastCharOfHomeDirForTemp == "/"){ + $homedirForTemplate = substr($homedirForTemplate, 0, -1); + } + $protected_dir = $homedir . "/" . $row['protected_dir']; + $passwdfile = $row['domainpath'] . $row['id']; + + $customGlobalTemplateForPWDirs = $this->getGlobalPasswordProtectedDirectoryTemplate(); + + if(!empty($customGlobalTemplateForPWDirs)){ + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_path}", $protected_dir, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_credentials_file}", $passwdfile, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{homedir}", $homedirForTemplate, $customGlobalTemplateForPWDirs); + $conf .= $customGlobalTemplateForPWDirs . "\n"; + }else{ + $fromTemplate = file_get_contents($this->ehcpdir . "/etc/generic_apache_templates/password_protected_directory.conf"); + $fromTemplate = str_replace("{protected_directory_path}", $protected_dir, $fromTemplate); + $fromTemplate = str_replace("{protected_directory_credentials_file}", $passwdfile, $fromTemplate); + $fromTemplate = str_replace("{homedir}", $homedirForTemplate, $fromTemplate); + $conf .= $fromTemplate . "\n"; + } + } + } + return $conf; +} + +function getRedirectDomain($domainname){ + $SQL = "SELECT redirect_to FROM " . $this->conf['domainstable']['tablename'] . " WHERE domainname = '$domainname'"; + $rs=$this->query($SQL); + if(count($rs) == 1){ + return $rs[0]['redirect_to']; + } + return ""; +} + +function setRedirectDomain($domainname, $redirect_domain){ + // Update redirect location for this domain + $SQL = "UPDATE " . $this->conf['domainstable']['tablename'] . " SET redirect_to='" . $redirect_domain . "', apachetemplate = NULL, apache2template = NULL, nginxtemplate = NULL WHERE domainname ='" . $domainname . "'"; + + if(!$this->isadmin()) { + $SQL .= " AND panelusername='" . $this->activeuser . "'"; + } + + // Run Query + return $this->executeQuery($SQL); +} + +function removeRedirectDomain($domainname){ + // Remove the redirect for this domain + $SQL = "UPDATE " . $this->conf['domainstable']['tablename'] . " SET redirect_to = NULL WHERE domainname ='" . $domainname . "'"; + + if(!$this->isadmin()) { + $SQL .= " AND panelusername='" . $this->activeuser . "'"; + } + + // Run Query + return $this->executeQuery($SQL); +} + +function getSSLSettingForDomain($domainname){ + $SQL = "SELECT ssl_cert, ssl_cert_key, ssl_cert_chain, ssl_wild_card, ssl_use_letsenc, ssl_redirect_https, ssl_lets_enc_additional_hosts FROM " . $this->conf['domainstable']['tablename'] . " WHERE domainname = '$domainname'"; + $rs=$this->query($SQL); + if(count($rs) == 1){ + $arr["cert"] = $rs[0]['ssl_cert']; + $arr["key"] = $rs[0]['ssl_cert_key']; + $arr["chain"] = $rs[0]['ssl_cert_chain']; + $arr["wildcard"] = $rs[0]['ssl_wild_card']; + $arr["letsenc"] = $rs[0]['ssl_use_letsenc']; + $arr["redir_https"] = $rs[0]['ssl_redirect_https']; + $arr["lets_enc_additional_hosts"] = $rs[0]['ssl_lets_enc_additional_hosts']; + + // Set a status variable + if(!empty($arr["cert"])){ + $arr["ssl_status"] = "Domain " . $domainname . " is currently using a custom SSL certificate."; + }else if(empty($arr["cert"]) && $arr["letsenc"]){ + $arr["ssl_status"] = "Domain " . $domainname . " is currently using Let's Encrypt free SSL certificates."; + }else{ + $arr["ssl_status"] = "Domain " . $domainname . " is using the server default SSL certificate for HTTPS which will cause browser warnings."; + } + + return $arr; + } + return ""; +} + +function setSSLSettingForDomain($domainname, $sslInfo){ + if(is_numeric($sslInfo["wildcard"])){ + // Update redirect location for this domain + $SQL = "UPDATE " . $this->conf['domainstable']['tablename'] . " SET ssl_cert='" . $sslInfo["cert"] . "', ssl_cert_key='" . $sslInfo["key"] . "', ssl_cert_chain='" . $sslInfo["chain"] . "', ssl_wild_card = " . $sslInfo["wildcard"] . ", ssl_use_letsenc = 0, ssl_redirect_https = " . $sslInfo["redir_https"] . " WHERE domainname ='" . $domainname . "'"; + + if(!$this->isadmin()) { + $SQL .= " AND panelusername='" . $this->activeuser . "'"; + } + + // Run Query + return $this->executeQuery($SQL); + } + return false; +} + +function setLetsEncryptForDomain($domainname, $sslInfo){ + $success = true; + $SQL = "UPDATE " . $this->conf['domainstable']['tablename'] . " SET ssl_cert = NULL, ssl_cert_key = NULL, ssl_cert_chain = NULL, ssl_wild_card = 0, ssl_use_letsenc = 1, ssl_redirect_https = " . $sslInfo["redir_https"]; + + if (array_key_exists('lets_enc_additional_hosts', $sslInfo)){ + $SQL .= ", ssl_lets_enc_additional_hosts = '" . $sslInfo["lets_enc_additional_hosts"] . "'"; + } + + $SQL .= " WHERE domainname ='" . $domainname . "'"; + if(!$this->isadmin()) { + $SQL .= " AND panelusername='" . $this->activeuser . "'"; + } + $success = $this->executeQuery($SQL); + return $success; +} + +function removeSSLSettingForDomain($domainname, $removeSSLLetsEnc=true){ + $success = true; + // Remove the redirect for this domain + $SQL = "UPDATE " . $this->conf['domainstable']['tablename'] . " SET ssl_cert = NULL, ssl_cert_key = NULL, ssl_cert_chain = NULL, ssl_wild_card = 0, ssl_redirect_https = 0"; + + if($removeSSLLetsEnc){ + $SQL .= ", ssl_use_letsenc = 0, ssl_lets_enc_additional_hosts = ''"; + } + + $SQL .= " WHERE domainname ='" . $domainname . "'"; + + if(!$this->isadmin()) { + $SQL .= " AND panelusername='" . $this->activeuser . "'"; + } + + $success = $this->executeQuery($SQL); + + if($success){ + $this->deleteSSLCustomKeys($domainname); + } + + return $success; +} + +function deleteSSLCustomKeys($domainname){ + + $domaininfo=$this->getDomainInfo($domainname); + $homedir=$domaininfo['homedir']; + $pathToCertFile=$homedir."/phptmpdir/server.crt"; + $pathToCertKeyFile=$homedir."/phptmpdir/server.key"; + $pathToCertChainFile=$homedir."/phptmpdir/chain.crt"; + $pathToMixedFile = $homedir."/phptmpdir/mixed.crt"; + + $this->bashDelete($pathToCertFile); + $this->bashDelete($pathToCertKeyFile); + $this->bashDelete($pathToCertChainFile); + $this->bashDelete($pathToMixedFile); +} + +function getNginxPasswordProtectedSubDirectoriesByDomain($domainname){ + $conf = ""; + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname = '$domainname' and protected_dir IS NOT NULL and protected_dir != ''"; + $rs=$this->query($SQL); + foreach($rs as $row){ + $homedir=$row['domainpath']."httpdocs"; + $homedirForTemplate=$row['domainpath']; + $lastCharOfHomeDirForTemp = $homedirForTemplate[strlen($homedirForTemplate)-1]; + if($lastCharOfHomeDirForTemp == "/"){ + $homedirForTemplate = substr($homedirForTemplate, 0, -1); + } + + $protected_dir = $row['protected_dir']; + $passwdfile = $row['domainpath'] . $row['id']; + + $customGlobalTemplateForPWDirs = $this->getGlobalPasswordProtectedDirectoryTemplate(); + + if(!empty($customGlobalTemplateForPWDirs)){ + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_path}", $protected_dir, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_credentials_file}", $passwdfile, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{homedir}", $homedirForTemplate, $customGlobalTemplateForPWDirs); + $conf .= $customGlobalTemplateForPWDirs . "\n"; + }else{ + $fromTemplate = file_get_contents($this->ehcpdir . "/etc/generic_nginx_templates/password_protected_directory.conf"); + $fromTemplate = str_replace("{protected_directory_path}", $protected_dir, $fromTemplate); + $fromTemplate = str_replace("{protected_directory_credentials_file}", $passwdfile, $fromTemplate); + $fromTemplate = str_replace("{homedir}", $homedirForTemplate, $fromTemplate); + $conf .= $fromTemplate . "\n"; + } + } + return $conf; +} + +function getApachePasswordProtectedSubDirectoriesByDomain($domainname){ + $conf = ""; + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname = '$domainname' and protected_dir IS NOT NULL and protected_dir != ''"; + $rs=$this->query($SQL); + foreach($rs as $row){ + $homedir=$row['domainpath']."httpdocs"; + $homedirForTemplate=$row['domainpath']; + $lastCharOfHomeDirForTemp = $homedirForTemplate[strlen($homedirForTemplate)-1]; + if($lastCharOfHomeDirForTemp == "/"){ + $homedirForTemplate = substr($homedirForTemplate, 0, -1); + } + $protected_dir = $homedir . "/" . $row['protected_dir']; + $passwdfile = $row['domainpath'] . $row['id']; + + $customGlobalTemplateForPWDirs = $this->getGlobalPasswordProtectedDirectoryTemplate(); + + if(!empty($customGlobalTemplateForPWDirs)){ + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_path}", $protected_dir, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{protected_directory_credentials_file}", $passwdfile, $customGlobalTemplateForPWDirs); + $customGlobalTemplateForPWDirs = str_replace("{homedir}", $homedirForTemplate, $customGlobalTemplateForPWDirs); + $conf .= $customGlobalTemplateForPWDirs . "\n"; + }else{ + $fromTemplate = file_get_contents($this->ehcpdir . "/etc/generic_apache_templates/password_protected_directory.conf"); + $fromTemplate = str_replace("{protected_directory_path}", $protected_dir, $fromTemplate); + $fromTemplate = str_replace("{protected_directory_credentials_file}", $passwdfile, $fromTemplate); + $fromTemplate = str_replace("{homedir}", $homedirForTemplate, $fromTemplate); + $conf .= $fromTemplate . "\n"; + } + } + return $conf; +} + +function rmPasswordProtectedDIR(){ + global $_insert,$pwdDirectoryIdsToDelete; + + // Domain must be chosen + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + $this->getVariable(array("_insert")); + $pwdDirectoryIdsToDelete = $_POST['pwdDirsToDelete']; + $success=True; + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Remove Selected Password Protected Directories') + ); + + // Build table based on queries + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE domainname='$domainname'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 0){ + $this->errorTextExit('Currently, no password protected directories exist for the domain of "' . $domainname . '"!'); + }else{ + $table = "
"; + foreach ($rs as $r) { + $realPWDDir = $r['domainpath'] . "httpdocs/" . $r['protected_dir']; + $table .= ""; + } + $table .= "
SelectPassword Protected DirectoryDirectory LoginDirectory Password
{$realPWDDir}{$r['username']}{$r['password']}

"; + } + + $this->output.="
List of Password Protected Directories
".$table; + } else { + if(isset($pwdDirectoryIdsToDelete) && is_array($pwdDirectoryIdsToDelete) && count($pwdDirectoryIdsToDelete) > 0){ + foreach($pwdDirectoryIdsToDelete as $toDelete){ + // Secure the string + $toDelete = $this->escape($toDelete); + + // First select each record to delete, delete the htaccess file and httpauthentication file + $SQL = "SELECT * FROM " . $this->conf['pwd_dirs_table']['tablename'] . " WHERE id = '$toDelete' and domainname='$domainname';"; + $rs = $this->query($SQL); + + $authPath = $rs[0]["domainpath"] . $rs[0]["id"]; + if(!empty($rs[0]["protected_dir"])){ + $htaccessPath = $rs[0]["domainpath"] . "httpdocs/" . $rs[0]["protected_dir"] . "/.htaccess"; + }else{ + $htaccessPath = $rs[0]["domainpath"] . "httpdocs/.htaccess"; + } + $this->bashDelete($authPath); + + // Password protection settings are no longer stored in the .htaccess files... + // They are now stored in the template exclusively + // $this->bashDelete($htaccessPath); + + // Then actually delete the record + $sql="delete from ". $this->conf['pwd_dirs_table']['tablename'] ." WHERE id = '$toDelete' AND domainname='$domainname';"; + $success=$success && $this->executeQuery($sql); + } + + // Sync domains + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + + }else{ + $success = FALSE; + $errmsg = "No existing password protected directories were selected for removal!"; + } + + $this->ok_err_text($success,"Selected password protected directories were deleted!","$errmsg
Nothing deleted! (".__FUNCTION__.')'); + } + return $success; +} + +function addCustomFTP(){ # coded by earnolmartin@gmail.com + global $serverip,$_insert,$password,$hpath,$ftplogin,$ftppass,$email; + + // Custom FTP accounts must be configured by an admin. + $this->requireAdmin(); + + $this->getVariable(array("_insert",'ftplogin','ftppass','hpath')); + + $success=True; + $errmsg=''; + + if(!$_insert) { + $inputparams=array( + array('ftplogin','input','lefttext'=>'FTP Login:','default'=>$ftplogin), + array('ftppass','input','lefttext'=>'FTP Password:','default'=>$ftppass), + array('hpath','input','lefttext'=>'FTP Home Directory:','default'=>$hpath), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= "
Create Custom FTP Account
".inputform5($inputparams); + } else { + + // Clear any errors that may exist + if(isset($errors)){ + unset($errors); + } + + /* * + * All Fields Have Value * + * */ + + if(empty($hpath)){ + $errors[] = "Please enter a directory path as the user's home FTP directory!"; + } + + if(empty($ftplogin)){ + $errors[] = "Please enter a username for this FTP account!"; + } + + if(empty($ftppass)){ + $errors[] = "Please enter a password for this FTP account!"; + }else{ + if(strlen($ftppass) < 4){ + $errors[] = "Password must be at least 4 characters long!"; + } + } + + // Output errors + + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + /* * + * Path validation * + * */ + + if(!preg_match('/^[^*?"<>|:]*$/i', $hpath)){ + $errors[] = "You entered an invalid Linux path!"; + } + + // Remove tailing slash if exists + if($hpath[strlen($hpath) - 1] == '/'){ + $hpath = substr($hpath, 0, strlen($hpath) - 1); + } + + if(substr_count($hpath, '/') < 2){ + $errorCount++; + $errors[] = "In order to prevent security risks, users cannot be granted access to the main directories in the root file system of the server.  You must go down two directory levels!  Example: /games/user1!"; + } + + if(stripos($hpath, "/") === FALSE || stripos($hpath, "/") != 0){ + $errorCount++; + $errors[] = "You have not chosen a valid directory!"; + } + + $protectedPaths = array("/var/www/vhosts", "/var/www/new", "/var/www/php_sessions", "/var/www/webalizer", "/var/www/passivedomains"); + foreach($protectedPaths as $pPath){ + if($hpath == $pPath || $hpath == $pPath . "/" || stripos($hpath, $pPath) != false){ + $errorCount++; + $errors[] = "You may not create custom FTP accounts with access to protected EHCP directories!"; + } + } + + if(stripos($hpath, "\\")){ + $errorCount++; + $errors[] = "This is not a Windows machine... use the correct slash character for path..."; + } + + // Output errors + + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Security checks + $ftp_password_db = $this->escape($ftppass); + $ftp_username_db = $this->escape($ftplogin); + $rDir = $this->escape($hpath); + $SQL = "SELECT id FROM " . $this->conf['ftpuserstable']['tablename'] . " WHERE ftpusername = '$ftp_username_db'"; + + // Run Query + $rs=$this->query($SQL); + + if(count($rs) == 0){ + $SQL = "INSERT INTO " . $this->conf['ftpuserstable']['tablename'] . " (ftpusername, password, homedir) VALUES ('$ftp_username_db', password('$ftp_password_db'), '$rDir')"; + + // Run Query + $this->executeQuery($SQL); + + }else{ + $this->errorTextExit("Another account is already using the login of " . $ftp_username_db . "! Please try another username!"); + } + + $success=$success && $this->addDaemonOp("syncftp",'','','','sync ftp'); + + # single function ok_err_text is enaugh at end of an operation. + $this->ok_err_text($success,'Successfully added the custom FTP account with a login of ' . $ftp_username_db . '!',"Failed to add FTP account with a login of " . $ftp_username_db . "! (".__FUNCTION__.')'); + } + + $this->showSimilarFunctions('ftp'); + return $success; +} + +function removeCustomFTP(){ # coded by earnolmartin@gmail.com + global $_insert,$loginsToDelete; + + // Custom FTP accounts must be configured by an admin. + $this->requireAdmin(); + + $this->getVariable(array("_insert")); + $loginsToDelete = $_POST['loginsToDelete']; + $success=True; + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Remove Selected FTP Accounts') + ); + + // Build table based on queries + $SQL = "SELECT id, ftpusername, homedir FROM " . $this->conf['ftpuserstable']['tablename'] . " where homedir IS NOT NULL and status IS NULL"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 0){ + $this->errorTextExit('Currently, no custom FTP accounts exist!'); + }else{ + $table = "
"; + foreach ($rs as $r) { + // Only show custom entries... do not allow to modify EHCP accounts. + if(!empty($r['homedir'])){ + $countNotNull++; + $table .= ""; + } + } + $table .= "
SelectUsernameHome Directory
{$r['ftpusername']}{$r['homedir']}

"; + } + + $this->output.="
List of FTP Accounts
".$table; + } else { + if(isset($loginsToDelete) && is_array($loginsToDelete) && count($loginsToDelete) > 0){ + foreach($loginsToDelete as $toDelete){ + // Secure the string + $toDelete = $this->escape($toDelete); + $sql="delete from ". $this->conf['ftpuserstable']['tablename'] ." WHERE id = '$toDelete'"; + $success=$success && $this->executeQuery($sql); + } + }else{ + $success = FALSE; + $errmsg = "No custom FTP accounts were selected for removal!"; + } + + $success=$success && $this->addDaemonOp("syncftp",'','','','sync ftp'); + $this->ok_err_text($success,"Selected accounts were deleted!","$errmsg
No custom FTP accounts were deleted! (".__FUNCTION__.')'); + } + + + $this->showSimilarFunctions('ftp'); + return $success; +} + +/* Is PolicyD Installed */ +function isPolicyDInstalled(){ + if(file_exists($this->ehcpdir . "/policyd")){ + $json["policyDInstalled"] = true; + }else{ + $json["policyDInstalled"] = false; + } + header('Content-Type: application/json'); + die(json_encode($json)); +} + +/* Get Public Server Settings */ +function getPublicServerSettings(){ + $json["isadmin"] = $this->isadmin(); + $json["customhttp"] = $this->miscconfig['disableeditapachetemplate'] == "" || $this->isadmin() ? true : false; + $json["customdns"] = $this->miscconfig['disableeditdnstemplate'] == "" || $this->isadmin() ? true : false; + $json["adddomainsslcert"] = ($this->miscconfig['webservermode'] == 'ssl' || $this->miscconfig['webservermode'] == 'sslonly') && (!empty($this->miscconfig['allowcustomsslnonadmin']) || $this->isadmin()) ? true : false; + + header('Content-Type: application/json'); + die(json_encode($json)); +} + +/* Global Web Templates */ + +function manageGlobalWebTemplates(){ + global $_insert, $template_file, $template_contents, $saveTemplate, $clearTemplate; + + $success = true; + + // Requires admin + $this->requireAdmin(); + + $this->getVariable(array("_insert",'template_file','template_contents','saveTemplate','clearTemplate')); + + if(!$_insert) { + + $optionsArray = array("apachetemplate"=>"Domain Template","subdomaintemplate"=>"Subdomain Template","enableddefault"=>"Default Enabled Domain","pwdir"=>"Password Protected Directory","mainwebserverconf"=>"Webserver Main Config"); + + $inputparams=array( + array('template_file','select','lefttext'=>'Edit Template:','secenekler'=>$optionsArray), + array('template_contents','textarea','lefttext'=>'Template Contents:','cols'=>80,'rows'=>30), + array('saveTemplate','submit','default'=>'Save Template'), + array('clearTemplate','submit','default'=>'Revert to Default'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= "
Edit Global Website " . $this->miscconfig['webservertype'] . " " . $this->miscconfig['webservermode'] . " Templates
Currently Using Default Template:
".inputform5($inputparams); + }else{ + if($clearTemplate){ + $success = $this->revertTemplateBackToEHCPDefault($template_file); + + // Sync all domains so they use the default EHCP template again + $this->addDaemonOp('syncdomains','','','','sync domains'); + + $this->showSimilarFunctions('global_templates'); + + return $this->ok_err_text($success,"Selected global web server template has been reverted to the EHCP default.", "Failed to revert selected global web server template back to EHCP default."); + }else if($saveTemplate){ + $success = $this->saveGlobalWebserverTemplate($template_file, $template_contents); + + // Sync all domains so tehy use the new global template + $this->addDaemonOp('syncdomains','','','','sync domains'); + + $this->showSimilarFunctions('global_templates'); + + return $this->ok_err_text($success,"Successfully saved selected global webserver template into the database. This template will be used for all domains unless a custom template has been defined for a specific domain.","Failed to save global template."); + } + } + return $success; +} + +function getGlobalWebTemplate($template = false){ + // This is a JSON operation only... + // Only should be used with an ajax call. + + // Requires ADMIN + $this->requireAdmin(); + + $json = array(); + if($template === false){ + if(isset($_REQUEST['template'])){ + $template = $_REQUEST['template']; + } + } + + if($template !== false){ + // Update redirect location for this domain + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='" . $template . "' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type ='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + // Build our JSON object + $json["template_file"] = $template; + + if(count($rs) == 0 || empty($rs[0]["template_value"])){ + switch($template){ + case "apachetemplate": + $json["template_contents"] = file_get_contents("apachetemplate"); + break; + case "subdomaintemplate": + $json["template_contents"] = file_get_contents("apache_subdomain_template"); + break; + case "enableddefault": + if($this->miscconfig['webservertype'] == "nginx"){ + if($this->miscconfig['webservermode'] == "sslonly"){ + $json["template_contents"] = file_get_contents("etc/nginx_sslonly/default.nginx"); + }else if($this->miscconfig['webservermode'] == "ssl"){ + $json["template_contents"] = file_get_contents("etc/nginx_ssl/default.nginx"); + }else{ + $json["template_contents"] = file_get_contents("etc/nginx_nonssl/default.nginx"); + } + }else{ + if($this->miscconfig['webservermode'] == "sslonly"){ + $json["template_contents"] = file_get_contents("etc/apache2_sslonly/fork/default"); + }else if($this->miscconfig['webservermode'] == "ssl"){ + $json["template_contents"] = file_get_contents("etc/apache2_ssl/fork/default"); + }else{ + $json["template_contents"] = file_get_contents("etc/apache2/default"); + } + } + break; + case "mainwebserverconf": + if($this->miscconfig['webservertype'] == "nginx"){ + if($this->miscconfig['webservermode'] == "sslonly"){ + $json["template_contents"] = file_get_contents("etc/nginx_sslonly/nginx.conf"); + }else if($this->miscconfig['webservermode'] == "ssl"){ + $json["template_contents"] = file_get_contents("etc/nginx_ssl/nginx.conf"); + }else{ + $json["template_contents"] = file_get_contents("etc/nginx_nonssl/nginx.conf"); + } + }else{ + // Need to read this file using exec since file_get_contents will fail + exec("cat /etc/apache2/apache2.conf", $arr); + if(is_array($arr) && count($arr) > 0){ + $json["template_contents"] = implode("\n", $arr); + }else{ + $json["error_reading_file"] = true; + } + } + break; + case "pwdir": + if($this->miscconfig['webservertype'] == "nginx"){ + $json["template_contents"] = file_get_contents("etc/generic_nginx_templates/password_protected_directory.conf"); + }else{ + $json["template_contents"] = file_get_contents("etc/generic_apache_templates/password_protected_directory.conf"); + } + break; + } + $json["using_default"] = true; + }else{ + $json["template_contents"] = $rs[0]["template_value"]; + $json["using_default"] = false; + } + } + + header('Content-Type: application/json'); + die(json_encode($json)); +} + +function getGlobalDomainTemplate(){ + $template = ""; + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='apachetemplate' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 1){ + $template = $rs[0]["template_value"]; + } + + return $template; +} + +function getGlobalSubDomainTemplate(){ + $template = ""; + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='subdomaintemplate' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 1){ + $template = $rs[0]["template_value"]; + } + + return $template; +} + +function getGlobalPasswordProtectedDirectoryTemplate(){ + $template = ""; + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='pwdir' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 1){ + $template = $rs[0]["template_value"]; + } + + return $template; +} + +function saveGlobalWebserverTemplate($template, $value){ + if(!empty($value)){ + $validTemplates = array('apachetemplate', 'subdomaintemplate', 'enableddefault', 'pwdir', 'mainwebserverconf'); + if(in_array($template, $validTemplates)){ + // Update redirect location for this domain + $SQL = "INSERT INTO " . $this->conf['globalwebservertemplatestable']['tablename'] . " (template_name, template_webserver_type, template_ssl_type, template_value) VALUES ('" . $template . "', '" . $this->miscconfig['webservertype'] . "', '" . $this->miscconfig['webservermode'] . "', '" . $value . "') ON DUPLICATE KEY UPDATE template_value='" . $value . "';"; + + // Run Query + return $this->executeQuery($SQL); + } + } + + return false; +} + +function revertTemplateBackToEHCPDefault($template){ + + // Update redirect location for this domain + $SQL = "UPDATE " . $this->conf['globalwebservertemplatestable']['tablename'] . " SET template_value='' WHERE template_name ='" . $template . "' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssL_type='" . $this->miscconfig['webservermode'] . "'"; + + if($template == "enableddefault"){ + $this->addDaemonOp('handle_reset_sites_enabled_default','','','','reset default sites enabled template'); + } + + if($template == "mainwebserverconf"){ + $this->addDaemonOp('handle_reset_mainwebserverconf','','','','reset main webserver conf to default'); + } + + // Run Query + return $this->executeQuery($SQL); +} + +function handleGlobalTemplatesForBaseWebserverFiles(){ + $success = false; + $this->requireCommandLine(__FUNCTION__); + + $this->echoln("Handling global domain templates...\n"); + + // Handle default sites enabled + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='enableddefault' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 1){ + $template = $rs[0]["template_value"]; + if(!empty($template)){ + if($this->miscconfig['webservertype'] == "nginx"){ + $file = "/etc/nginx/sites-enabled/default"; + }else{ + $file = "/etc/apache2/sites-enabled/default"; + } + $success = writeoutput2($file,$template,'w',false); + } + } + + // Handle main webserver config file sites enabled + $SQL = "SELECT * FROM " . $this->conf['globalwebservertemplatestable']['tablename'] . " WHERE template_name ='mainwebserverconf' AND template_webserver_type='" . $this->miscconfig['webservertype'] . "' AND template_ssl_type='" . $this->miscconfig['webservermode'] . "'"; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 1){ + $template = $rs[0]["template_value"]; + if(!empty($template)){ + if($this->miscconfig['webservertype'] == "nginx"){ + $file = "/etc/nginx/nginx.conf"; + + // Update the variables + $template = str_replace(array('{wwwuser}','{wwwgroup}'),array($this->wwwuser,$this->wwwgroup),$template); + }else{ + // Make a backup of the original configuration if it does not exist... this will be used to restore later + // We don't have a template for the apache2 base configuration + if(!file_exists("/etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE")){ + copy("/etc/apache2/apache2.conf", "/etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE"); + } + $file = "/etc/apache2/apache2.conf"; + } + $success = writeoutput2($file,$template,'w',false); + } + } + + return $success; +} + +function resetAllGlobalTemplatesDueToConfErrors(){ + // Do not expose this function to the public + // This could be used as an API call to help admins that messed everything up... + // EHCP support will need to provide them the code to do this though. + $this->addDaemonOp('handle_reset_sites_enabled_default','','','','reset default sites enabled template'); + $this->addDaemonOp('handle_reset_mainwebserverconf','','','','reset main webserver conf to default'); + + // Clear entire templates file + $SQL = "DELETE FROM " . $this->conf['globalwebservertemplatestable']['tablename']; + + // Run Query + $this->executeQuery($SQL); + + // Sync domains + $this->addDaemonOp('syncdomains','','','','sync domains'); + + return true; +} + +/* Cronjobs and Remote Backups */ + +function addRemoteBackup(){ # coded by earnolmartin@gmail.com + global $serverip, $_insert, $name, $transfer_host, $transfer_port, $transfer_login, $transfer_pass, $transfer_method, $dayofweek, $time, $encryption_pass, $backupid; + + // Remote backup scheduling can on + $this->requireAdmin(); + + $this->getVariable(array("_insert",'name','dayofweek','time','transfer_method','transfer_host','transfer_port','transfer_login','transfer_pass','encryption_pass','backupid')); + + $success=True; + $editMode = false; + $errmsg=''; + + if(isset($backupid) && is_numeric($backupid)){ + $recordId = $backupid; + } + + $recordId = $_REQUEST["id"]; + + // Check for edit mode + if(isset($recordId) && is_numeric($recordId)){ + $id = $recordId; + // Build table based on queries + $SQL = "SELECT * FROM " . $this->conf['remote_backups_table']['tablename'] . " WHERE id = '" . $recordId . "'"; + + // Run Query + $rs = $this->query($SQL); + if(count($rs) == 1){ + $row = $rs[0]; + $defaultMessage = "Edit"; + $successMessageWording = "edited"; + $failMessageWording = "edit"; + $editMode = true; + } + } + + if(!$_insert) { + $defaultMessage = "Schedule New"; + $successMessageWording = "scheduled"; + $failMessageWording = "schedule"; + + $inputparams=array( + array('name','input','lefttext'=>'Backup Name:','default'=>(!empty($row["name"]) ? $row["name"] : '')), + array('dayofweek','select','lefttext'=>'Day of Week:','secenekler'=>$this->remoteDayOfWeek,'default'=>(!empty($row["dayofweek"]) ? $row["dayofweek"] : '')), + array('time','select','lefttext'=>'Time:','secenekler'=>$this->remoteBackupTime,'default'=>(!empty($row["time"]) ? $row["time"] : '')), + array('transfer_method','select','lefttext'=>'Transfer Method:','secenekler'=>$this->remoteBackupMethod,'default'=>(!empty($row["transfer_method"]) ? $row["transfer_method"] : '')), + array('transfer_host','input','lefttext'=>'Transfer Host IP Address:','default'=>(!empty($row["transfer_host"]) ? $row["transfer_host"] : '')), + array('transfer_port','input','lefttext'=>'Transfer Port:','default'=>(!empty($row["transfer_port"]) ? $row["transfer_port"] : '')), + array('transfer_login','input','lefttext'=>'Host Login:','default'=>(!empty($row["transfer_login"]) ? $row["transfer_login"] : '')), + array('transfer_pass','input','lefttext'=>'Host Password:','default'=>(!empty($row["transfer_pass"]) ? $row["transfer_pass"] : '')), + array('encryption_pass','input','lefttext'=>'Backup Encryption Password:','default'=>(!empty($row["encryption_pass"]) ? $row["encryption_pass"] : '')), + array('op','hidden','default'=>__FUNCTION__) + ); + + if(isset($row) && !empty($row) && is_array($row) && is_numeric($row["id"])){ + array_push($inputparams, array('backupid','hidden','default'=>$row["id"])); + } + + $this->output.= "
" . $defaultMessage . " Remote Backup

Security Notice:  Please be sure to provide credentials for a non-sudo user on the remote host if the SCP protocol is to be used.

".inputform5($inputparams); + } else { + + // Clear any errors that may exist + if(isset($errors)){ + unset($errors); + } + + /* * + * All Fields Have Value * + * */ + + if(empty($name) || strpos($name, " ") != false){ + $errors[] = "Please enter a valid name without any spaces!"; + }else{ + // Strip out any invalid inputs + $name = preg_replace("/[^a-zA-Z0-9]/", "", $name); + if(empty($name)){ + $errors[] = "Please enter a valid name!"; + } + } + + if(is_numeric($name[0])){ + $errors[] = "Please enter a name that starts with a letter."; + } + + if(empty($transfer_host) || $this->validate_ip_address($transfer_host)){ + $errors[] = "Please enter a valid IP address as your host."; + } + + if(empty($transfer_port) || strlen($transfer_port) > 5){ + $errors[] = "Please enter a valid port for this remote host."; + } + + if(empty($transfer_login)){ + $errors[] = "Please enter a valid login for the remote host."; + } + + if(empty($transfer_pass)){ + $errors[] = "Please enter a valid password for the remote host."; + } + + if(@$dayofweek != 0 && empty($dayofweek)){ + $errors[] = "Please enter a valid day of the week."; + } + + if(@$time != 0 && empty($time)){ + $errors[] = "Please enter a valid time."; + } + + if(empty($transfer_method)){ + $errors[] = "Please enter a valid transfer method."; + } + + if(empty($encryption_pass) || strlen($encryption_pass) < 10 || strlen($encryption_pass) > 50){ + $errors[] = "Please enter an ecryption password greater than 10 characters but less than 50 characters in length."; + } + + // Output errors + + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Remove invalid characters from name + $name = removeInvalidChars($name, "name"); + + // Last validation + if(empty($name)){ + $this->errorTextExit("Please enter a valid name!"); + } + + // Security checks + $name = $this->escape($name); + $transfer_host = $this->escape($transfer_host); + $transfer_port = $this->escape($transfer_port); + $transfer_login = $this->escape($transfer_login); + $transfer_pass = $this->escape($transfer_pass); + $transfer_method = $this->escape($transfer_method); + $dayofweek = $this->escape($dayofweek); + $time = $this->escape($time); + $encryption_pass = $this->escape($encryption_pass); + + // Select any records where the time is set to the selected... we cannot allow this! + $SQL = "SELECT id FROM " . $this->conf['remote_backups_table']['tablename'] . " WHERE time = '$time' AND dayofweek = '$dayofweek'"; + $rs = $this->query($SQL); + + // Select any records that might have the same name + $SQL = "SELECT id FROM " . $this->conf['remote_backups_table']['tablename'] . " WHERE name = '$name'"; + $rsName = $this->query($SQL); + + if(count($rsName) >= 1){ + if($editMode && $rsName[0]["id"] != $recordId){ + $this->errorTextExit("Please use a backup name that is not already in use."); + }else if(!$editMode){ + $this->errorTextExit("Please use a backup name that is not already in use."); + } + } + + if(count($rs) >= 1){ + if($editMode && $rs[0]["id"] != $recordId){ + $this->errorTextExit("A remote backup operation is already scheduled to run at the selected time!"); + }else if(!$editMode){ + $this->errorTextExit("A remote backup operation is already scheduled to run at the selected time!"); + } + } + + if(!$editMode){ + $SQL = "INSERT INTO " . $this->conf['remote_backups_table']['tablename'] . " (name, dayofweek, time, transfer_method, transfer_host, transfer_port, transfer_login, transfer_pass, encryption_pass) VALUES ('$name', '$dayofweek', '$time', '$transfer_method', '$transfer_host', '$transfer_port', '$transfer_login', '$transfer_pass', '$encryption_pass')"; + }else{ + $SQL = "UPDATE " . $this->conf['remote_backups_table']['tablename'] . " SET name = '" . $name . "', dayofweek = '" . $dayofweek . "', time='" . $time . "', transfer_method='" . $transfer_method . "', transfer_host='" . $transfer_host . "', transfer_port='" . $transfer_port . "', transfer_login='" . $transfer_login . "', transfer_pass='" . $transfer_pass . "', encryption_pass='" . $encryption_pass . "' WHERE id = '" . $recordId . "'"; + } + + // Run Query + $this->executeQuery($SQL); + + $success=$success && $this->addDaemonOp("rebuild_crontab",'','','','rebuild crontab'); + + # single function ok_err_text is enaugh at end of an operation. + $this->ok_err_text($success,'Successfully ' . $successMessageWording . ' the remote backup configured to use a transfer method of ' . $transfer_method . ' to ' . $transfer_host . '!','Failed to ' . $failMessageWording . ' remote backup! ('.__FUNCTION__.')'); + } + + $this->showSimilarFunctions('backup'); + return $success; +} + +function removeRemoteBackup(){ # coded by earnolmartin@gmail.com + global $_insert, $backupJobsToDelete; + + // Custom FTP accounts must be configured by an admin. + $this->requireAdmin(); + + $this->getVariable(array("_insert")); + $backupJobsToDelete = $_POST['backupJobsToDelete']; + $success=True; + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Remove Selected Remote Backup Jobs') + ); + + // Build table based on queries + $SQL = "SELECT * FROM " . $this->conf['remote_backups_table']['tablename']; + + // Run Query + $rs = $this->query($SQL); + + if(count($rs) == 0){ + $this->errorTextExit('Currently no remote backup jobs exist!'); + }else{ + $table = "
"; + foreach ($rs as $r) { + // Only show custom entries... do not allow to modify EHCP accounts. + $dayOfWeekNum = $r['dayofweek']; + $backupDay = $this->getBackupDay($dayOfWeekNum); + $table .= ""; + } + $table .= "
SelectJob NameRemote HostTransfer MethodTimeDay of WeekEncryption PasswordActions
{$r['name']}{$r['transfer_host']}:{$r['transfer_port']}{$r['transfer_method']}{$r['time']}:00{$backupDay}{$r['encryption_pass']}Edit

"; + } + + $this->output.="
List of Remote Backup Jobs
".$table; + } else { + if(isset($backupJobsToDelete) && is_array($backupJobsToDelete) && count($backupJobsToDelete) > 0){ + foreach($backupJobsToDelete as $toDelete){ + // Secure the string + $toDelete = $this->escape($toDelete); + $sql="delete from ". $this->conf['remote_backups_table']['tablename'] ." WHERE id = '$toDelete'"; + $success=$success && $this->executeQuery($sql); + } + }else{ + $success = FALSE; + $errmsg = "No remote backup jobs were selected for removal!"; + } + + $success=$success && $this->addDaemonOp("rebuild_crontab",'','','','rebuild crontab'); + $this->ok_err_text($success,"Selected remote backup jobs were deleted!","$errmsg
No backup remote jobs were deleted! (".__FUNCTION__.')'); + } + + + $this->showSimilarFunctions('backup'); + return $success; +} + +// Update theme color +function updateThemeColor(){ # coded by earnolmartin@gmail.com + // This is an ajax call + + if(isset($_REQUEST['theme_color'])){ + $theme_color = strip_tags(trim($_REQUEST['theme_color'])); + $theme_color = $this->escape($theme_color); + if(strlen($theme_color) == 7){ + // Get current user + $paneluserinfo=$this->getPanelUserInfo(); + + // Update theme color + $SQL = "UPDATE " . $this->conf['paneluserstable']['tablename'] . " SET theme_color='" . $theme_color . "' WHERE id ='" . $paneluserinfo["id"] . "'"; + + // Run Query + $this->executeQuery($SQL); + } + } +} + +// Update theme contrast +function updateThemeContrast(){ # coded by earnolmartin@gmail.com + // This is an ajax call + + if(isset($_REQUEST['theme_contrast'])){ + $theme_contrast = strip_tags(trim($_REQUEST['theme_contrast'])); + $theme_contrast = $this->escape($theme_contrast); + if(strlen($theme_contrast) < 10){ + // Get current user + $paneluserinfo=$this->getPanelUserInfo(); + + // Update theme color + $SQL = "UPDATE " . $this->conf['paneluserstable']['tablename'] . " SET theme_contrast='" . $theme_contrast . "' WHERE id ='" . $paneluserinfo["id"] . "'"; + + // Run Query + $this->executeQuery($SQL); + } + } +} + +function getMyDomainsAsObject(){ + $mydomains=$this->getMyDomains('',' ORDER BY domainname ASC'); + header('Content-Type: application/json'); + die(json_encode($mydomains)); +} + +// Generic cronjobs: +function addCronjob(){ # coded by earnolmartin@gmail.com + global $serverip,$_insert,$script,$dayofweek,$time; + + // Remote backup scheduling can on + $this->requireAdmin(); + + $this->getVariable(array("_insert",'script','dayofweek','time')); + + $success=True; + $errmsg=''; + + if(!$_insert) { + $inputparams=array( + array('script','input','lefttext'=>'Command or Path to Script:','default'=>''), + array('dayofweek','select','lefttext'=>'Day of Week:','secenekler'=>$this->remoteDayOfWeek), + array('time','select','lefttext'=>'Time:','secenekler'=>$this->remoteBackupTime), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.= "
Schedule and Create Cronjobs
".inputform5($inputparams); + } else { + + // Clear any errors that may exist + if(isset($errors)){ + unset($errors); + } + + /* * + * All Fields Have Value * + * */ + + if(empty($script)){ + $errors[] = "Please enter a valid command or script path!"; + } + + if(@$dayofweek != 0 && empty($dayofweek)){ + $errors[] = "Please enter a valid day of the week."; + } + + if(@$time != 0 && empty($time)){ + $errors[] = "Please enter a valid time."; + } + + // Output errors + + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Security checks + $script = $this->escape($script); + $dayofweek = $this->escape($dayofweek); + $time = $this->escape($time); + + // Select any records where the time is set to the selected... we cannot allow this! + $SQL = "SELECT id FROM " . $this->conf['cronjobs_table']['tablename'] . " WHERE script = '$script'"; + $rs=$this->query($SQL); + + if(count($rs) > 0){ + $this->errorTextExit("A cronjob has already been configured through the panel to run this command."); + }else{ + $SQL = "INSERT INTO " . $this->conf['cronjobs_table']['tablename'] . " (script, dayofweek, time) VALUES ('$script', '$dayofweek', '$time')"; + + // Run Query + $this->executeQuery($SQL); + } + + $success=$success && $this->addDaemonOp("rebuild_crontab",'','','','rebuild crontab'); + + # single function ok_err_text is enaugh at end of an operation. + $this->ok_err_text($success,'Successfully created cronjob to run command or script of ' . $script . '!','Failed to create cronjob to run script ' . $script . '! ('.__FUNCTION__.')'); + } + + $this->showSimilarFunctions('backup'); + return $success; +} + +function removeCronjob(){ # coded by earnolmartin@gmail.com + global $_insert, $cronJobsToDelete; + + $this->requireAdmin(); + + $this->getVariable(array("_insert")); + $cronJobsToDelete = $_POST['cronJobsToDelete']; + $success=True; + + if(!$_insert) { + $inputparams=array( + array('op','hidden','default'=>__FUNCTION__), + array('submit','submit','default'=>'Remove Selected Scheduled Cronjobs') + ); + + // Build table based on queries + $SQL = "SELECT * FROM " . $this->conf['cronjobs_table']['tablename']; + + // Run Query + $rs=$this->query($SQL); + + if(count($rs) == 0){ + $this->errorTextExit('Currently, no cronjobs have been scheduled!'); + }else{ + $table = "
"; + foreach ($rs as $r) { + $dayOfWeekNum = $r['dayofweek']; + $backupDay = $this->getBackupDay($dayOfWeekNum); + $table .= ""; + } + $table .= "
SelectJob Script / CommandTimeDay of Week
{$r['script']}{$r['time']}:00{$backupDay}

"; + } + + $this->output.="
List of Cronjobs
".$table; + } else { + if(isset($cronJobsToDelete) && is_array($cronJobsToDelete) && count($cronJobsToDelete) > 0){ + foreach($cronJobsToDelete as $toDelete){ + // Secure the string + $toDelete = $this->escape($toDelete); + $sql="delete from ". $this->conf['cronjobs_table']['tablename'] ." WHERE id = '$toDelete'"; + $success=$success && $this->executeQuery($sql); + } + }else{ + $success = FALSE; + $errmsg = "No cronjobs were selected for removal!"; + } + + $success=$success && $this->addDaemonOp("rebuild_crontab",'','','','rebuild crontab'); + $this->ok_err_text($success,"Selected cronjobs were deleted!","$errmsg
No cronjobs were deleted! (".__FUNCTION__.')'); + } + + + $this->showSimilarFunctions('backup'); + return $success; +} + +function getBackupDay($dayOfWeekNum){ + $backupDay = ""; + switch($dayOfWeekNum){ + case 0: + $backupDay = "Sunday"; + break; + case 1: + $backupDay = "Monday"; + break; + case 2: + $backupDay = "Tuesday"; + break; + case 3: + $backupDay = "Wednesday"; + break; + case 4: + $backupDay = "Thursday"; + break; + case 5: + $backupDay = "Friday"; + break; + case 6: + $backupDay = "Saturday"; + break; + default: + $backupDay = "Unknown"; + } + return $backupDay; +} + +function addDnsOnlyDomain(){ + global $domainname,$serverip,$_insert; + $this->getVariable(array("domainname","_insert",'serverip')); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomaintothispaneluser",array())) return false; + $inputparams=array( + array('domainname','lefttext'=>'Domain Name:'), + array('serverip', 'lefttext'=>'Server IP Address Domain is Currently Hosted On:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.="
Add a DNS only domain.  This function will create DNS records only and is not a normal hosted domain.
".inputform5($inputparams); + + } else { + + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$domainname, + ) + ) + ) return false; + + $this->noEmpty($domainname); # same control is done above, in afterInputControls. left here for example usage for noEmpty + + // Check to make sure valid domain + $domainname = $this->adjustDomainname($domainname); + $success = $this->is_valid_domain_name($domainname); + if($success){ + $paneluserinfo=$this->getPanelUserInfo(); + $sql="insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,serverip) values ('".$this->activeuser."','".$this->activeuser."','$domainname','','".$this->status_active."','$serverip')"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,'DNS only domain was successfully added.','Failed to add domain ('.__FUNCTION__.')'); + }else{ + $this->ok_err_text($success,'DNS only domain was successfully added.','Domain ' . $domainname . ' is invalid!'); + } + } + $this->showSimilarFunctions('domain'); + return $success; +} + +function print_r2($ar){ + $this->output.=print_r2($ar); +} + +function multiserver_add_domain(){ # add domain, paneluser and ftp user once + global $dnsserverips,$webserverips,$mailserverips,$mysqlserverips,$domainname,$ftpusername,$ftppassword,$quota,$upload,$download,$panelusername,$paneluserpass,$_insert,$email; + $vars=$this->getVariable(array('dnsserverips','webserverips','mailserverips','mysqlserverips','domainname','ftpusername','ftppassword','quota','upload','download','panelusername','paneluserpass','_insert','email')); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomain",array())) return false; + $inputparams=array( + + 'domainname', + array('panelusername','lefttext'=>'Panel Username'), + array('paneluserpass','password_with_generate','lefttext'=>'Paneluser Password'), + array('ftpusername','lefttext'=>'FTP Username'), + array('ftppassword','password_with_generate','lefttext'=>'FTP Password'), + array('quota','default'=>'200','lefttext'=>"Quota (MB)"), + array('upload','default'=>'200','lefttext'=>"Upload Bandwidth (KB/s)"), + array('download','default'=>'200','lefttext'=>"Download Bandwidth (KB/s)"), + array('email','default'=>$this->miscconfig['adminemail']), + array('dnsserverips','hidden&text','lefttext'=>'DNS Server IPs','default'=>$this->miscconfig['defaultdnsserverips']), + array('webserverips','hidden&text','lefttext'=>'Webserver IPs','default'=>$this->miscconfig['defaultwebserverips']), + array('mailserverips','hidden&text','lefttext'=>'Mailserver IPs','default'=>$this->miscconfig['defaultmailserverips']), + array('mysqlserverips','hidden&text','lefttext'=>'MySQL Server IPs','default'=>$this->miscconfig['defaultmysqlserverips']), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="(These will be done using ServerPlans in future)
".inputform5($inputparams); + } else { + $status=$this->status_active; + $success=$success && $this->multiserver_add_domain_direct(compact('dnsserverips','webserverips','mailserverips','mysqlserverips','domainname','panelusername','paneluserpass','ftpusername','ftppassword','status','email','quota')); + $success=$success && $this->setselecteddomain($domainname); + $this->ok_err_text($success,'Successfully added domain(s).','Failed to add domain (adddomain)'); + } + $this->showSimilarFunctions('domain'); + return $success; +} + + +function addDomain(){ # add domain, paneluser and ftp user once + + global $domainname,$ftpusername,$ftppassword,$quota,$upload,$download,$panelusername,$paneluserpass,$_insert,$email; + $this->getVariable(array("domainname","ftpusername","ftppassword","quota","upload","download","panelusername","paneluserpass","_insert",'email')); + + # This is a reseller / admin feature only! + $this->requireReseller(); + $success=True; + + if(!$_insert) { + if(!$this->beforeInputControls("adddomain",array())) return false; + $inputparams=array( + array('domainname', 'lefttext'=>'Domain Name'), + array('panelusername','lefttext'=>'Panel username'), + array('paneluserpass','password_with_generate','lefttext'=>'Paneluser password'), + array('ftpusername','lefttext'=>'Ftp username'), + array('ftppassword','password_with_generate','lefttext'=>'Ftp Password'), + array('quota','default'=>'200','lefttext'=>"Quota (Mb)"), + array('upload','default'=>'200','lefttext'=>"Upload bw(kb/s)"), + array('download','default'=>'200','lefttext'=>"Download bw(kb/s)"), + array('email','default'=>$this->miscconfig['adminemail']), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="
Add domain
Please do not include prefixes such as \"http://\" or \"www.\":
" + .inputform5($inputparams); + + } else { + $success=$success && $this->addDomainDirect($domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$this->status_active,$email,$quota); + $success=$success && $this->setselecteddomain($domainname); + $this->ok_err_text($success,'Successfully added domain.','Failed to add domain.'); + } + $this->showSimilarFunctions('domain'); + return $success; +} + + +function check_remote_mysql_connection($dbhost){ + if($this->connected_mysql_servers[$dbhost]) return $this->connected_mysql_servers[$dbhost]; + #$conn=$this-> + # **** to be completed later + return True; +} + +function multiserver_add_domain_direct($named_params){ + extract($named_params); # produces variables with dnsservers, webservers and so on. from now on, I plan to use named_params + # opposite: compact($vars... + + # $dnsservers,$webservers,$mailserver,$mysqlservers,$domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$status,$email='',$quota=0 + # dnsservers: dns will be defined here + # webservers: ftp also will be setup here, apache configs will be + # mailserver: mail settings will be done in that server + # mysqlservers: already done, default mysqlservers for that domain will be this. if multiple, user will be able to select one + + # tum kodlar, server ipler dahil edilecek sekilde yeniden tasarlanacak. + if($webservers<>'localhost') $this->check_remote_mysql_connection($webservers); + + $domainname=$this->adjustDomainname($domainname); + $success = $this->is_valid_domain_name($domainname); + + if($success){ + $panelusername=trim($panelusername); + $ftpusername=trim($ftpusername); + + + if(!$this->afterInputControls("adddomain", + array( + "domainname"=>$domainname, + "ftpusername"=>$ftpusername, + "panelusername"=>$panelusername + ) + ) + ) return false; + + $this->output.=__FUNCTION__.": Adding domain: $domainname"; + $this->debugecho(__FUNCTION__.":". print_r2($named_params),3,false); + + + $homedir=$this->conf['vhosts']."/$ftpusername/$domainname"; + $success=True; + + # server ipler eklenecek. + $s=$this->executeQuery("insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,diskquota,dnsserverips,webserverips,mailserverips,mysqlserverips) values ('".$this->activeuser."','$panelusername','$domainname','$homedir','$status',$quota,'$dnsserverips','$webserverips','$mailserverips','$mysqlserverips')",'domain add to ehcp db'); + + list($ftpserver)=explode(',',$webserverips); # take first ip/localhost from list of webservers: ftp is only setup on first of webservers. other webservers(if any) should update files itself, by nfs/nas or other means. + + #$success=$success && ($s=$this->addDaemonOp("daemondomain","multiserver_add_domain",$domainname,$homedir,'domain info&ftp'));# since, adddaemonop only returns True or false, this construct is True, but above, execute may return other thing... + + $this->debugecho(__FUNCTION__.": webserverips:($webserverips) ftpserver:($ftpserver)",3,false); + + $success=$success && $this->add_daemon_op(array('op'=>'daemondomain','action'=>'multiserver_add_domain','info'=>$domainname,'info2'=>$homedir,'info3'=>$ftpserver)); # domain initial directory settings are done in one of webservers, which sees same hdd space as others. + $success=$success && $this->add_daemon_op(array('op'=>'new_sync_all')); + $success=$success && $this->addPanelUserDirect($panelusername,$paneluserpass,1,5,0,1,1,$quota,0,10,'',$email,$status); + + + # ftp ekleme: nereye eklemeli? + # herşey uzağa eklenirse, listelemek icin uzağa bağlanmak gerekir. + # lokale eklenirse, lokal ftp daemonda degisiklik gerekir, localdeki ftpaccounts tablosuna ekleyemiyorum, zira daemon where cumleciginde iki kolon desteklemiyor. + # uzakta ftp nin çalışması için oraya da eklenmesi gerekir. ozaman hem lokale hem uzağa eklenmeli sanki. ozaman silerken/güncellerken her iki yerden silinmeli v.b. + + $home=$this->conf['vhosts']."/$ftpusername"; + $type='default'; + $is_special_home=false; + $success=$success && ($s=$this->multiserver_add_ftp_user_direct(compact('ftpserver','panelusername','ftpusername','ftppassword','home','upload','download','quota','domainname','type','is_special_home','status'))); + + $sayi=$this->recordcount($this->conf['domainstable']['tablename'],''); + $msg="

Hi EHCP Admin,

The domain of $domainname was added to the server with the IP address of ".$this->singleserverip . "!

"; + $msg.=$this->url; + + $msguser="

Hi EHCP Force User,

Your domain of $domainname was successfully configured on the server!

"; + $subj="Domain $domainname Added To Panel"; + $this->infotoadminemail($msg,$subj); + if($email<>'') $this->sendEmail($email, $subj, $msguser); + + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + "Failed to add domain: $domainname"); + }else{ + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + 'Domain ' . $domainname . ' is invalid!'); + } +} + +function multiserver_add_ftp_user_direct($named_params){ + extract($named_params); + $this->debugecho(__FUNCTION__.":".__LINE__.":".print_r2($named_params),3,false); + + if($ftpserver=='') $named_params['ftpserver']=$ftpserver='localhost'; + if($ftpserver=='localhost') return $this->add_ftp_user_direct($named_params); # call local ftp function if server is localhost + # equivalent: if($ftpserver=='localhost') return $this->addFtpUserDirect($panelusername,$panelusername,$ftpusername,$ftppassword,$home,$upload,$download,$quota,$domainname,$type,$is_special_home,$status)); + + + + # rest is for remote + if($status=='') $status=$this->status_active; # default is active, + $this->debugecho("$panelusername,$ftpusername,$ftppassword,$home,$upload,$download,$quota,$domainname,$type,$isSpecialHome",1,false); + $panelusername=trim($panelusername); + $ftpusername=trim($ftpusername); + if($isSpecialHome) $homedir=$home; # home dir is only inserted if different from default of ".$this->vhostsdir."/ftphome.... + + # uzak server baglan ekle + # remote server connect add + $p=array( + 'dbhost'=>$ftpserver, + 'dbusername'=>$this->dbusername, + 'dbpass'=>$this->dbpass, + 'dbname'=>$this->dbname + ); + + $this->debugecho(__FUNCTION__.":".__LINE__.":".print_r2($p),3,false); + + $success=True; + + $success=$success && $uzak_conn=$this->connect_to_mysql($p); # use same settings as this server. + $qu="INSERT INTO ftpaccounts ( reseller, panelusername, domainname, ftpusername, password, homedir, type,status,datetime) VALUES ('".$this->activeuser."','$panelusername','$domainname','$ftpusername', password('$ftppassword'),'$homedir','$type','$status',now())"; + $success=$success && $this->executeQuery($qu,'add ftp user : '.$ftpusername,__FUNCTION__,$uzak_conn); + $success=$success && $this->addDaemonOp('daemonftp','multiserver_add',$home,$ftpserver); + + return $success; + + +} + +function add_ftp_user_direct($named_params){ + # difference from addFtpUserDirect: uses named_params, my new coding style, I hope will be successful. + # only calls old function using old style, until all code cleaned and tested enaugh. + extract($named_params); + return $this->addFtpUserDirect($panelusername,$panelusername,$ftpusername,$ftppassword,$home,$upload,$download,$quota,$domainname,$type,$is_special_home,$status); +} + +function addDomainDirect($domainname,$panelusername,$paneluserpass,$ftpusername,$ftppassword,$status,$email='',$quota=0,$webserverips=''){ + // This is ONE of the base functions for adding a domain to the panel... + + // Better validation + $domainname = $this->adjustDomainname($domainname); + $success = inputValid($domainname,'domainname'); + + if($success){ + $panelusername=trim($panelusername); + $ftpusername=trim($ftpusername); + + + if(!$this->afterInputControls("adddomain", + array( + "domainname"=>$domainname, + "ftpusername"=>$ftpusername, + "panelusername"=>$panelusername + ) + ) + ) return false; + + + /* + domain path will be like: /var/www/vhosts/ftpusername/domain.com + /var/www/vhosts/ftpusername/domain.com will be stored as homedir in domains table, + one user will may have multiple domains with single ftp acount. + to achive this, i must implement domain add to an existing ftp acount. + */ + $this->output.="Adding domain: $domainname"; + $homedir=$this->conf['vhosts']."/$ftpusername/$domainname"; + $success=True; + + if($webserverips=='' and $this->miscconfig['activewebserverip']<>'') $webserverips=$this->miscconfig['activewebserverip']; # another ip is active for webserver + + #$s=$this->executeQuery("insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,diskquota,webserverips) values ('".$this->activeuser."','$panelusername','$domainname','$homedir','$status',$quota,'".$this->miscconfig['defaultwebserverips']."')",'domain add to ehcp db'); + $s=$this->executeQuery("insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,diskquota,webserverips) values ('".$this->activeuser."','$panelusername','$domainname','$homedir','$status',$quota,'$webserverips')",'domain add to ehcp db'); # multiserver ayri bir fonksiyona yazıldı. + #$success=$success && ($s=$this->addDaemonOp("syncdomains",'xx','','','sync apache ')); # sync'ing of all domains disabled upon each add domain, because it is time consuming for large domains&files, complains occured from users. only newly added domain is sync'ed in "add daemondomain" + $success=$success && ($s=$this->addDaemonOp("syncdns",'','','','sync dns')); + $success=$success && ($s=$this->addFtpUserDirect($panelusername,$ftpusername,$ftppassword,$this->conf['vhosts']."/$ftpusername",$upload,$download,$quota,$domainname,'default',false,$status)); + $success=$success && ($s=$this->addPanelUserDirect($panelusername,$paneluserpass,1,5,0,1,1,$quota,0,10,'',$email,$status)); + $success=$success && ($s=$this->addDaemonOp("daemondomain","add",$domainname,$homedir,'domain info&ftp'));# since, adddaemonop only returns True or false, this construct is True, but above, execute may return other thing... + + $sayi=$this->recordcount($this->conf['domainstable']['tablename'],''); + $msg="Hi EHCP User,
The domain of $domainname has successfully been set up and configured in your EHCP panel at ".$this->singleserverip.".
"; + $msg.=$this->url; + + $msguser=$msg; + $subj="Domain Added to Panel"; + $this->infotoadminemail($msg,$subj); + + if($email<>'') $this->sendEmail($email, $subj, $msguser); + + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + "Failed to add domain $domainname to the panel."); + # rollback of operations when not succeeded, is not implemented. it just displays an error message... to be fixed later.. + }else{ + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + 'Domain ' . $domainname . ' is invalid!'); + } +} + +function is_valid_domain_name($domain_name) +{ + return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check + && preg_match("/^.{1,253}$/", $domain_name) //overall length check + && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name) ); //length of each label +} + +function adjustDomainname($domainname){ # if user enters www. at start of domain, it is trimmed, since www. is already added in necessarry ehcp operations, otherwise, it becomes, www.www.domainname... + $domainname=trim($domainname); + $domainname=str_replace(array("\\","http://","www.","https://"),array('','','',''),$domainname); # replace accidental www.'s + $domainname = removeInvalidChars($domainname, 'domainname'); + return $domainname; +} + +function addDomainDirectToThisPaneluser($domainname,$ftpusername,$sync=True){ + // This is ONE of the base functions for adding a domain to the panel... + + // Better validation + $domainname = $this->adjustDomainname($domainname); + $success = inputValid($domainname,'domainname'); + + if($success){ + + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$domainname, + ) + ) + ) return false; + + $success=True; + + /* + domain path will be like: /var/www/vhosts/ftpusername/domain.com + /var/www/vhosts/ftpusername/domain.com will be stored as homedir in domains table, + one user will may have multiple domains with single ftp acount. + to achive this, i must implement domain add to an existing ftp acount. + */ + + $this->output.="Adding domain: $domainname"; + $homedir=$this->conf['vhosts']."/$ftpusername/$domainname"; + + # *** Burada eklenirken, hangi ftp hesabina eklendigi yazilacak, ftpusername, bu sayede o ftp silinirken kontrol edilecek. + # $success=$this->executeQuery("insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status) values ('".$this->activeuser."','".$this->activeuser."','$domainname','$homedir','$this->status_active')",'domain add to ehcp db'); + if($webserverips=='' and $this->miscconfig['activewebserverip']<>'') $webserverips=$this->miscconfig['activewebserverip']; # another ip is active for webserver + + $success=$this->executeQuery("insert into ".$this->conf['domainstable']['tablename']." (reseller,panelusername,domainname,homedir,status,apachetemplate,dnstemplate,webserverips) values ('".$this->activeuser."','".$this->activeuser."','$domainname','$homedir','$this->status_active','$apachetemplate','$dnstemplate','$webserverips')",'domain add to ehcp db'); + $success=$success && $this->addDaemonOp("daemondomain","add",$domainname,$homedir,'domain info&ftp');# since, adddaemonop only returns True or false, this construct is True, but above, execute may return other thing... + + if($sync){ # in multiple domain add, no sync is done for all domains one by one... a single syncAll is called at end of all domains.. + #$success=$success && ($s=$this->addDaemonOp("syncdomains",'xx','','','sync apache ')); + $success=$success && ($s=$this->addDaemonOp("syncdns",'','','','sync dns')); + } + $success=$success && ($s=$this->addDaemonOp("syncdomains",'xx',$domainname,'','sync apache ')); + + $sayi=$this->recordcount($this->conf['domainstable']['tablename'],''); + $msg="Hi EHCP Admin,
The domain of $domainname has successfully been set up and configured in your EHCP panel at ".$this->singleserverip.".
"; + $msg.="Control Panel URL: " . $this->url . "
Total domain count in this server: $sayi"; + + $msguser="Hi EHCP Force User,
The domain of $domainname has successfully been set up and configured in the EHCP panel at http://".$this->singleserverip; + $subj=$msg; + $this->infotoadminemail($msg,"Domain Added to Panel"); + + if($email<>'') $this->sendEmail($email, "Domain Added to Panel", $msguser); + + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + "Failed to add domain $domainname to the panel."); + # rollback of operations when not succeeded, is not implemented. it just displays an error message... to be fixed later.. + }else{ + return $this->ok_err_text($success,"Domain $domainname was successfully added to the panel.", + 'Domain ' . $domainname . ' is invalid!'); + } +} + + +function deleteDomain(){ + global $domainname,$confirm,$confirm2; # gets domainname from _GET + $this->getVariable(array("domainname","confirm",'confirm2')); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + if(!$this->isuserpermited('deletedomain',$domainname)) return false; # is this reseller of that domain ? + + + $domaininfo=$this->domaininfo=$this->getDomainInfo($domainname); + + $domainpaneluser=$domaininfo['panelusername']; + $homedir=$domaininfo['homedir']; + + $panelusercount=$this->recordcount($this->conf['domainstable']['tablename'],"panelusername='$domainpaneluser'"); + if($domainpaneluser==$this->activeuser) $panelusercount=2; # dont delete your self acount... + + if($domaininfo['reseller']<>$this->activeuser and !$confirm2 ){ + $inputparams=array( + array('domainname','hidden','default'=>$domainname), + array('confirm2','hidden','default'=>'1'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="
This domain currently belongs to the reseller account of: ".$domaininfo['reseller'].". Are you sure you want to delete this domain: \"" . $domainname ."\"?
" + .inputform5($inputparams); + + return True; + } + + if(!$confirm){ + if($panelusercount > 0){ + // Subtract one to mimick deleting the domain to see if the user will be removed. + $panelusercount--; + } + $filter="domainname='$domainname'"; + $this->output.= $this->sayinmylang("areyousuretodelete").$domainname." Email/ftp users:
"; + #$this->output.="$domainname domain ftp user List: ".$this->tablolistele3_5_4($this->conf['ftpuserstable']['tablename'],$baslik,array("ftpusername","domainname"),$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount,false); + $domaininfo=$this->getDomainInfo($domainname); + $this->output.="ftp username:".$this->multiserver_get_domain_ftpusername($domaininfo)."
"; + + $this->output.="
$domainname domain email user List: ".$this->tablolistele3_5_4($this->conf['emailuserstable']['tablename'],$baslik,$this->conf['emailuserstable']['listfields'],$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount,false); + $this->output.="
Domain File Count:".executeprog("ls -l ".$this->conf['vhosts']."/$domainname/httpdocs | wc -l"); + + $this->listTable("

Subdomains related to this domain:", 'subdomainstable', "domainname='$domainname'"); + + if($panelusercount==0) $this->output.="
Panel user to be deleted:".$domainpaneluser; + $this->output.="

Databases related to this domain:".$this->tablolistele3_5_4($this->conf['mysqldbstable']['tablename'],$baslik,array("dbname"),$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount,false); + $this->output.="
Email Forwardings:".$this->tablolistele3_5_4($this->conf['emailforwardingstable']['tablename'],$baslik,$this->conf['emailforwardingstable']['listfields'],$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount,false); + + $inputparams=array( + array('domainname','hidden','default'=>$domainname), + array('confirm','hidden','default'=>'1'), + array('confirm2','hidden','default'=>'1'), + array('op','hidden','default'=>__FUNCTION__) + ); + + + $this->output.="
Are you sure to delete all these?
" + .inputform5($inputparams); + + return True; + } + + $success=$this->deleteDomainDirect($domainname); + $this->output.="
Goto Home
"; + $this->deselectdomain2();# deselect domain, if any... + $ret=$this->ok_err_text($success,"Domain \"$domainname\" was successfully deleted and removed from the panel.","Failed to delete domain \"$domainname\"."); + + $this->showSimilarFunctions('domain'); + return $ret; + +} + +function multiserver_delete_ftp_direct($domaininfo){ + # to be coded. + # burda tüm domain degil,sadece ftpaccount silinmeli. + # delete ftp account that is located on remote , maybe also local in future. + + $domainname=trim($domaininfo['domainname']); + $webserverips=trim($domaininfo['webserverips']); + $ftpusername=trim($domaininfo['ftpusername']); + $ftpserver=trim($domaininfo['ftpserver']); + + $this->debugecho(__FUNCTION__.":".print_r2($domaininfo)." domain:$domainname, $webserverips, $ftpusername ",3,false); + + if($domainname=='' or $ftpusername=='') { + $this->output.=__FUNCTION__.": domainname or ftpusername is empty.returning."; + return True; + } + + $this->output.="
Deleting ftp user: $ftpusername
"; + + $success=True; + + $qu="delete from ftpaccounts where ftpusername='$ftpusername'"; + $success=$success && $this->multiserver_executequery($qu,$ftpserver); + + $qu="delete from ftpaccounts where ftpusername='$ftpusername' and domainname='$domainname'"; # delete from local mysql, if there is any record (until all code is clean) + $success=$success && $this->multiserver_executequery($qu,'localhost'); + + # burada bitek remote daemon kaldı. + $homedir=$this->multiserver_getfield($this->conf['ftpuserstable']['tablename'], "homedir", "ftpusername='$ftpusername' limit 1",$ftpserver); + if($homedir=="") { + $homedir=$this->conf['vhosts']."/$ftpusername"; + } + + $success=$success && ($s=$this->add_daemon_op(array('op'=>'daemonftp','action'=>'delete','info'=>"/etc/vsftpd_user_conf/$ftpusername",'info3'=>$ftpserver))); + $success=$success && ($s=$this->add_daemon_op(array('op'=>'daemonftp','action'=>'delete','info'=>$homedir,'info3'=>$ftpserver))); + + return $success; + +} + +function multiserver_query($q,$serverip,$logininfo=false){ + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + $this->debugecho(__FUNCTION__.': server:'.$serverip.' logininfo:'.print_r2($logininfo),3,false); + + + if($serverip=='localhost') return $this->query($q); + else { + if(!$logininfo) + $logininfo=array( + 'dbhost'=>$serverip, + 'dbusername'=>$this->dbusername, + 'dbpass'=>$this->dbpass, + 'dbname'=>$this->dbname + ); + + $uzak_conn=$this->connect_to_mysql($logininfo); + return $this->query3($q,'',__FUNCTION__,$uzak_conn); + } +} + +function multiserver_executequery($q,$serverip,$logininfo=false){ + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + $this->debugecho(__FUNCTION__.': server:'.$serverip.' logininfo:'.print_r2($logininfo),3,false); + + if($serverip=='localhost') return $this->executeQuery($q); + else { + if(!$logininfo) + $logininfo=array( + 'dbhost'=>$serverip, + 'dbusername'=>$this->dbusername, + 'dbpass'=>$this->dbpass, + 'dbname'=>$this->dbname + ); + + $uzak_conn=$this->connect_to_mysql($logininfo); + return $this->executeQuery($q,'',__FUNCTION__,$uzak_conn); + } +} + +function multiserver_get_domain_ftpusername($domaininfo){ + $q="select ftpusername from ".$this->conf['ftpuserstable']['tablename']." where domainname='".$domaininfo['domainname']."'"; + $res=$this->multiserver_query($q,$domaininfo['ftpserver']); + return trim($res[0]['ftpusername']); +} + +function deleteDomainDirect($domainname,$syncdomains=True){ + $domainname=trim($domainname); + $success=True; + if($domainname=='') return false; + + if(!$this->isuserpermited('deletedomain',$domainname)) return false; # is this reseller of that domain ? + $domaininfo=$this->domaininfo=$this->getDomainInfo($domainname); + $panelusercount=$this->recordcount($this->conf['domainstable']['tablename'],"panelusername='$domainpaneluser'"); + + if(is_array($domaininfo)){ + // If domain exists, let's delete it! + $this->last_deleted_domaininfo=$domaininfo; # used for rebuilding configs of servers of deleted domain . otherwise, the config of that server is not updated, resulting failure. + + #$domainpaneluser=$this->getField($this->conf['domainstable']['tablename'],"panelusername","domainname='$domainname'"); + $domainpaneluser=$domaininfo['panelusername']; + $homedir=$domaininfo['homedir']; + + + if($domainpaneluser==$this->activeuser) $panelusercount=2; # dont delete your self acount... + + if($domaininfo['reseller']<>$this->activeuser){ # inform domain reseller, if this is not yours.. + $reseller=$this->query("select * from ".$this->conf['paneluserstable']['tablename']." where panelusername='".$domaininfo['reseller']."'"); + $this->sendEmail($reseller[0]['email'],"Domain $domainname Deleted","Hi EHCP Force User,

The domain of $domainname was deleted from the panel.
Server IP Address: ".$this->singleserverip); + } + + $domfilt=" where domainname='$domainname'"; + $ftpusername=$this->multiserver_get_domain_ftpusername($domaininfo); + $this->output.="
Deleting Domain: $domainname
"; + + # Get list of subdomains that belong to the domain + $arr=$this->query("select * from ".$this->conf['subdomainstable']['tablename'] . $domfilt); + if($arr){ + foreach($arr as $dom) { + $subdomainFullStr[] = $dom['subdomain'] . "." . $domainname; + } + } + + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['domainstable']['tablename'].$domfilt." limit 1",'Deleting domain from ehcp db'); + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['emailuserstable']['tablename'].$domfilt,'Deleting emails from ehcp db'); + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['emailforwardingstable']['tablename'].$domfilt,'Deleting email forwardings from ehcp db'); + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['subdomainstable']['tablename'].$domfilt,'delete subdomains of domain'); + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['customstable']['tablename'].$domfilt,'delete custom http/dns settigns of domain'); + + $domaininfo['ftpusername']= $ftpusername; + if($ftpusername<>'') $this->multiserver_delete_ftp_direct($domaininfo); # code for multiple servers. + + $success=$success && ($s=$this->add_daemon_op(array('op'=>'daemondomain','action'=>'delete','info'=>$domainname,'info2'=>$homedir,'info3'=>$ftpserver))); + + if($syncdomains){ + $success=$success && $this->add_daemon_op(array('op'=>'new_sync_all')); + } + $ret=$this->query("select id from ".$this->conf['mysqldbstable']['tablename'].$domfilt); + foreach($ret as $d) $success=$success && $this->deleteDB($d['id']); + + // Delete any let's encrypt certificates + if(isset($subdomainFullStr) && is_array($subdomainFullStr)){ + $subdomainFullStr[] = $domainname; + $success= $success && $this->removeLetsEncryptCertificates($subdomainFullStr); + } + + // Remove all password protected directories for the domain + $this->removePasswordProtectedDirByDomain($domainname); + + // Remove any custom ssl certs if they exist for the domain + $this->deleteSSLCustomKeys($domainname); + + $panelusercount--; + } + + // Delete account if there are no more domains + if($panelusercount==0) {# if no other domain left with this panel user, then delete panel user too, except for ehcp special reseller account + $success = $this->removePanelUser($domainpaneluser); + } + + return $success; + +} + +function removeLetsEncryptCertificates($domains){ + $success = true; + foreach($domains as $domain){ + // echo "\nDeleting Let's Encrypt SSL certificates for domain/subdomain " . $dom['domainname'] . " from letsencrypt live folder.\n"; + $this->bashDelete("/etc/letsencrypt/live/" . $domain, true); + + // echo "\nDeleting Let's Encrypt SSL certificates for domain/subdomain " . $dom['domainname'] . " from letsencrypt archive folder.\n"; + $this->bashDelete("/etc/letsencrypt/archive/" . $domain, true); + } + return $success; +} + +function deselectdomain2(){ # de-selects a domain + $this->setselecteddomain('',false); +} + +function deselectdomain(){ # de-selects a domain and displays home + $this->deselectdomain2(); + $this->displayHome(); + return True; +} + + +function setselecteddomain($dom,$checkdomain=True){ # only sets selecteddomain.. + if($checkdomain){ + if(!$this->exist($this->conf['domainstable']['tablename'],"domainname='$dom'")) return false; # if there is no such domain, dont set it.. + $this->requireMyDomain($dom); + } + + $_SESSION['selecteddomain']=$dom; + $this->selecteddomain=$dom; + return True; +} + +# i split some operations to different functions to be understandable... +# choosing a domain is possible in many ways, these functions do this.. + +function chooseDomainGoNextOp(){ # sets selected domain, then redirect to new op.. + global $domainname,$nextop; + $this->getVariable(array("domainname","nextop")); + $this->requireMyDomain($domainname); + $this->setselecteddomain($domainname); + $this->redirecttourl("?op=$nextop"); +} + +function chooseDomain2($opname){ + # displays list of domains available, then let user choose one, then goes to next op.. + + $mydomains=$this->getMyDomains('',' ORDER BY domainname ASC'); + if(!$mydomains) $this->output.="
You have no domains yet. Add domain first, then use this function."; + else $this->output.="

Select A Domain:".$this->listSelector($arr=$mydomains,$print=array('domainname'),$link="?op=choosedomaingonextop&nextop=$opname&domainname=",$linfield='domainname','selectDomainNameLink'); + return True; +} + +function listselectdomain(){ + $this->chooseDomain2(''); + $this->showSimilarFunctions('domain'); +} + +function chooseDomain($opname,$dom=''){ + # gives previously selected domain, or domain entered from url... or if nothing exists, shows a list of domains, let user select it... + + #$this->debugtext(__FUNCTION__."called.. dom: $dom, this->selecteddomain: $this->selecteddomain"); + + if($dom<>'') { # is there anything passed in parameter or entered in url ? + $domainname=$dom; + $this->setselecteddomain($domainname); + } + + if(!$domainname) $domainname=$this->selecteddomain; # is there an already selected domain ? + if(!$domainname) { + $this->chooseDomain2($opname); # if none, let user select domain.. + $this->showexit(); + } + + $this->requireMyDomain($domainname); # ensure this is my domain.. + + return $domainname; +} + +function showexit($template=''){ + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + $this->show($template); + exit; +} + +function addNewScript(){ + global $name,$url,$scriptdirtocopy,$homepage,$description; + $this->getVariable(array('name','url','scriptdirtocopy','homepage','description')); + + $this->requireAdmin(); + + if(!$url){ + $inputparams=array( + array('name', 'lefttext'=>'Script Name:'), + array('url','lefttext'=>'Script URL:'), + array('scriptdirtocopy','lefttext'=>'Script Directory to Copy:'), + array('homepage','lefttext'=>'Script Homepage:'), + array('description','textarea', 'lefttext'=>'Script Description:'), + array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + + } else { + $q="insert into scripts (scriptname,filetype,fileinfo,scriptdirtocopy,homepage,description) values ('$name','directurl','$url','$scriptdirtocopy','$homepage','$description')"; + $success=$this->executeQuery($q); + + $msg="Hi EHCP Admin,

A new easy installation script was added:

Name: $name
URL: $url
Home Page: $homepage
Description: $description"; + $this->infotoadminemail($msg, "New Easy Install Script Addded", True); + return $this->ok_err_text($success,"Successfully added new easy installation script.",''); + } + + +} + +function doDownloadAllscripts(){ + $this->requireAdmin(); + $this->addDaemonOp('downloadallscripts',$action,$info); +} + +function resolveDomainToIP($domainName){ + return gethostbyname($domainName); +} + +function addScript(){ + $alanlar=array("domainname","scriptname",'directory','iamsure','dbname','dbusername','dbuserpass','title','admin_email'); + foreach($alanlar as $al) global $$al; + $degerler=$this->getVariable($alanlar); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + if(!$scriptname){ + $linkimages=array("images/install.jpg"); + $linkfiles=array("?op=addscript&domainname=$domainname"); + $linkfield='scriptname'; + $filter=''; + $this->output.="Select script to install:
(Please note that, some script url's may be out of date in future. So, in that case, you may be unable to install these. In that case, update list of these scripts from ehcp.net site, or manually fix that in phpmyadmin)
".$this->tablolistele3_5_4("scripts",$baslik,array("scriptname",array('homepage','link_newwindow'),'description'),$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount=100); + if($this->isadmin()){ + $this->output.= "
Update Easy Install Script Definitions

"; + } + return True; + } + + if ((strpos($scriptname,"ehcp itself")!==false)or(strpos($scriptname,"ehcp webmail")!==false)) { + if(!$this->isadmin()) $this->errorTextExit("Only admins can install EHCP. You should be able to access webmail at: http://webmail.yourdomain.com"); + $this->output.="
Note that, by copying EHCP or webmail files, you put your sensitive EHCP files in that domain's direction. So, be careful. Also note that, only the EHCP web GUI will run from this new directory. The daemon will continue to run from the original installation directory.
"; + } + + if((!$directory and !$iamsure) or !$admin_email or !$title){ + $inputparams=array( + "directory", + "title", + array('admin_email','input','lefttext'=>'Admin Email Address:'), + array('iamsure','checkbox','lefttext'=>'Check here if you are sure to install to root of your domain','secenekyazisi'=>'Confirm','default'=>'1'), + array('op','hidden','default'=>'addscript'), + array('domainname','hidden','default'=>$domainname), + array('scriptname','hidden','default'=>$scriptname), + array('comment','comment','default'=>'

Please create a new MySQL database & user account for this installation. (Required)
'), + array('dbname','righttext'=>''), + array('dbusername','righttext'=>''), + array('dbuserpass','password_with_generate','righttext'=>''), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Enter a directory name (under your domain, below the httpdocs folder) where the script files will be installed:
For example, enter 'test' to install the script files into http://www.$domainname/test.
+ The directory will be created if it doesn't already exist.
+ Leave the directory field empty (and check the checkbox below) to install the script files into the root of your domain (http://www.$domainname).  If the folder already exists, some of your files may be overwritten!
Also, please enter a title / name for your installation of the script.  This will be used as the script's sitewide title name.
" + .inputform5($inputparams); + + return True; + } + + $success=True; + + // Validation + $directory = removeInvalidChars($directory, "directory"); + $title = removeInvalidChars($title, "strictTitle"); + $title = $this->escape($title); + + if($dbname and $dbusername and $dbuserpass and $success) { + $success=$success && $this->addMysqlDbDirect($myserver,$domainname,$dbusername,$dbuserpass,$dbuserhost,$dbname,$adduser=True); + }else{ + $success = false; + } + + if($success){ + $str="Will copy/add script [$scriptname] to domain: [$domainname] directory: [$directory]

Click here to see that dir after 30-60 seconds....
You may tail -f /var/log/ehcp.log for script operations...

Your login will be as follows:

Login:  "; + if(strtolower($scriptname) != "phpcoin"){ + $str.="admin
Password: 12345678!"; + }else{ + $str.="webmaster
Password: $dbuserpass"; + } + $str .= "

Please change these settings for security purposes ASAP!

"; + + $this->output.=$str; + + // get mysql host + if(!$myserver) $myserver=$_SESSION['myserver']; + if(!$myserver) $myserver=$this->getMysqlServer('',false,__FUNCTION__); # get mysql server info.. + + $installInfoNeeded = $directory . $this->ehcpForceSplitString . $dbname . $this->ehcpForceSplitString . $dbusername . $this->ehcpForceSplitString . $dbuserpass . $this->ehcpForceSplitString . $myserver['host'] . $this->ehcpForceSplitString . $title . $this->ehcpForceSplitString . $admin_email; + + $this->addDaemonOp("installscript_force", $scriptname, $domainname, $installInfoNeeded, $opname); + $q="insert into scripts_log (scriptname,dir,panelusername,domainname,link) values ('$scriptname','$directory','$this->activeuser','$domainname','http://www.$domainname/$directory')"; + $this->executeQuery($q); + + $q="select * from scripts where scriptname='$scriptname'"; + $bilgi=$this->query($q); + $bilgi=$bilgi[0]; + + + # burası aslında önemli, kurulan scriptleri daha düzenli yapmak lazım. + $this->showSimilarFunctions('easyinstall'); + $msg="Hi EHCP Admin,

User $this->activeuser has queued the installation of the following easy install script:
$scriptname

It will be installed for the domain of \"$domainname\" in the following directory:
$directory
"; + $this->infotoadminemail($msg,"New Easy Installation Script Queued",false); + }else{ + return $this->ok_err_text($success,"Failed to create MySQL database and user account.  The database and user must be created before an easy installation script can install.",''); + } + +} + +function addEmailUser(){ + # modified upon suggestion of sextasy@discardmail.com, thanks, nice contribution. + + global $domainname,$mailusername,$password,$quota,$autoreplysubject,$autoreplymessage; + $this->getVariable(array('domainname','mailusername','password','quota','autoreplysubject','autoreplymessage')); # this gets variables from _GET or _POST + if($this->isuserlimitexceeded('maxemails')) return false; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + if(!$mailusername){ + if(!$this->beforeInputControls("addemail",array())) return false; + + $query = "select subdomain from subdomains where domainname = '$domainname'"; + $res = $this->query($query); + + $select_domainname = "'; + + $inputparams=array( + array('mailusername','righttext'=>"@".$select_domainname . "
(do not write @domainname)",'lefttext'=>'Email Address:'), + array('quota','lefttext'=>'Email Quota (MB)','default'=>'25'), + array('password','password_with_generate', 'lefttext'=>'Email Account Password:'), + array('autoreplysubject','default'=>$autoreplysubject,'righttext'=>'Leave emtpy to disable autoreply','lefttext'=>'Auto Reply Subject:'), + array('autoreplymessage','textarea','default'=>$autoreplymessage, 'lefttext'=>'Auto Reply Message:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Add new email account:
" + .inputform5($inputparams); + } else{ + $success=$this->addEmailDirect($mailusername,$domainname,$password,$quota,$autoreplysubject,$autoreplymessage); + } + $this->showSimilarFunctions('email'); + return $success; +} + + +function addEmailDirect($mailusername,$domainname,$password,$quota,$autoreplysubject,$autoreplymessage){ + $success=True; + $this->noEmpty($domainname); + + if(!$this->afterInputControls("addemail",array('email'=>$mailusername.'@'.$domainname,'mailusername'=>$mailusername))) return false; + + $this->output.="Adding email user:"; + $mailusername=getFirstPart($mailusername,'@'); # make sure does not include @ sign + $email="$mailusername@$domainname"; + + $success=$success && $this->executeQuery("insert into ".$this->conf['emailuserstable']['tablename']." (panelusername,domainname,mailusername,email,password,quota,status,autoreplysubject,autoreplymessage) values ('$this->activeuser','$domainname','$mailusername','$email',encrypt('$password','ehcp'),$quota,'".$this->status_active."','$autoreplysubject','$autoreplymessage')",'add mail user'); + #$success=$success && $this->executeQuery("insert into ".$this->conf['emailuserstable']['tablename']." (panelusername,domainname,mailusername,email,password,quota,status,autoreplysubject,autoreplymessage) values ('$this->activeuser','$domainname','$mailusername','$email',encrypt('$password','ehcp'),'".($quota*1000000)."','".$this->status_active."','$autoreplysubject','$autoreplymessage')",'add mail user'); + $this->adjustEmailAutoreply($email,$autoreplysubject,$autoreplymessage); + + + $this->sendEmail($email,"Welcome","EHCP hopes you enjoy your new email account!"); # bir mail gonderiyor. zira yoksa dizin olusmuyor, pop3 login calismiyor.. + return $this->ok_err_text($success,"Successfully created email account.",'Failed to add email account.'); +} + +function echoln($str){ + if($this->commandline) echo "\n".$str; + else $this->output.="
$str"; +} + +function echoln2($str){ + if($this->commandline) echo "\n".$str."\n"; + else $this->output.="
$str
"; +} + + +function addPanelUserDirect($panelusername,$password,$maxdomains,$maxemails,$maxpanelusers,$maxftpusers,$maxdbs,$quota,$master_reseller,$maxsubdomains,$name='',$email='',$status='active'){ + foreach(array('maxdomains','maxemails','$maxpanelusers','$maxftpusers','$maxdbs','$quota','$master_reseller','$maxsubdomains') as $var) # if sent empty, default 0 + if(!$$var) $$var=0; + + + $panelusername=trim($panelusername); + $reseller=$this->activeuser; + $userinfo = $this->getPanelUserInfo('',$reseller); + if($reseller=='')$reseller='admin'; # in applyfordomain, activeuser is empty.. + + // Handle master reseller parameter + // It can only be set by admin to prevent reseller's resellers from creating another master reseller account + if($reseller != 'admin'){ + if($master_reseller == 1){ + $master_reseller = 0; + $this->output.="

Only the root server administrator can set the master reseller parameter on an account.  Your selection was ignored.

"; + } + } + if(!isset($master_reseller) || empty($master_reseller)){ + $master_reseller = 0; + } + + if($reseller != 'admin' && $userinfo['master_reseller'] != 1){ + // Normal resellers cannot create other resellers + if($maxpanelusers != 0){ + $maxpanelusers = 0; + $this->output.="

Only master reseller accounts can create other reseller accounts!  The account created will be a normal user who cannot create other panel users.

"; + } + } + + $logintable=$this->conf['logintable']; + + if ($logintable['passwordfunction']=='') { + $pass="'$password'"; + } elseif($logintable['passwordfunction']=='encrypt'){ + $pass="encrypt('$password','ehcp')"; + } else { + $pass=$logintable['passwordfunction']."('$password')"; + } + + $query="insert into panelusers + (panelusername,password,maxdomains,maxemails,maxpanelusers,maxftpusers,maxdbs,name,email,quota,reseller,status,master_reseller,maxsubdomains) + values + ('$panelusername',$pass,$maxdomains,$maxemails,$maxpanelusers,$maxftpusers,$maxdbs,'$name','$email',$quota,'$reseller','$status',$master_reseller,$maxsubdomains)"; + + $this->debugecho("
debug:query: $query
",1,false); + + if($email<>'') { + $msguser="Hi EHCP Force User,

Your account was successfully setup.

Your Account Information:

Panel Username: $panelusername
Password: $password
Server Control Panel URL: singleserverip/\">http://". $this->singleserverip."

".$this->miscconfig['messagetonewuser']; + $this->sendEmail($email,"Web Hosting Account Information", $msguser); + $this->output.="
Email sent to new panel user.
"; + } + + return $this->executeQuery($query,'add panel user: '.$panelusername); +} + +function addPanelUser(){ + + $tb=$this->conf['paneluserstable']; + foreach($tb['insertfields'] as $insertfield) { + if(is_array($insertfield)) $insertfield=$insertfield[0]; + global $$insertfield; + } + + #global $panelusername,$password,$maxdomains,$maxemails,$maxpanelusers,$maxftpusers,$maxdbs,$quota; + #$this->getVariable(array("panelusername","password","maxdomains","maxemails","maxpanelusers",'maxftpusers',"quota")); # this gets variables from _GET or _POST + $ret=$this->getVariable($tb['insertfields']); + $this->debugecho(print_r2($ret),2,false); + + if(!$this->beforeInputControls("addpaneluser")) return false; + + + if(!$panelusername){ + $this->output.="Adding new panel user or reseller:
" + .inputform5ForTableConfig($tb,array(array('op','hidden','default'=>__FUNCTION__)),$this->isadmin()); + }else { + if(!$this->afterInputControls("addpaneluser",array('panelusername'=>$panelusername, 'email'=>$email))) return false; + $this->output.="Adding user:
"; + $success=$this->addPanelUserDirect($panelusername,$password,$maxdomains,$maxemails,$maxpanelusers,$maxftpusers,$maxdbs,$quota,$master_reseller,$maxsubdomains,$name,$email); + $this->ok_err_text($success,"Added panel user successfully.",'Failed to add panel user.'); + } + $this->showSimilarFunctions('panelusers'); + return $success; +} + +function addPanelUserWithHostingPlan(){ + $this->requireReseller(); + + if(!$this->beforeInputControls("addpaneluser")) return false; + + global $plan_id, $_insert, $client_name, $client_email, $client_panelusername, $client_password; + $tb=$this->conf['paneluserstable']; + $success = true; + + $this->getVariable(array("_insert", "plan_id", "client_name", "client_email", "client_panelusername", "client_password"), true); + + // Build select list from saved hosting templates + $SQL = "SELECT * FROM " . $this->conf['hosting_plans_table']['tablename'] . " WHERE panelusername='" . $this->activeuser . "' ORDER BY name;"; + $rs=$this->query($SQL); + + if(count($rs) > 0){ + // Build hosting plans key value array + foreach ($rs as $r) { + $hostingPlans[$r["id"]] = $r["name"]; + } + if(!$_insert) { + $inputparams=array( + array('client_name','input',"lefttext"=>"Full Name:",'default'=>$client_name), + array('client_email','input',"lefttext"=>"Email Address:",'default'=>$client_email), + array('client_panelusername','input',"lefttext"=>"Username:",'default'=>$client_panelusername), + array('client_password','input',"lefttext"=>"Password:",'default'=>$client_password), + array('plan_id','select','lefttext'=>'Hosting Plan','secenekler'=>$hostingPlans), + ); + $this->output .= "

Add New Client with the Following Pre-Defined Hosting Plan:

".inputform5($inputparams)."
"; + }else{ + if(isset($errors)){ + unset($errors); + } + + /* Validation Section */ + if(empty($client_name)){ + $errors[] = "You must provide the client's full name."; + } + + if(empty($client_email) || stripos($client_email, "@") == false){ + $errors[] = "The client you are adding must have a valid email address."; + } + + if(empty($client_panelusername)){ + $errors[] = "You must provide the client's login username used for the panel."; + } + + if(empty($client_password)){ + $errors[] = "You must provide the client's password used for the panel."; + } + + if(!$this->hasValueOrZeroAndIsNumeric($plan_id)){ + $errors[] = "Please select client's hosting plan."; + } + + // Output errors + if(isset($errors) && is_array($errors)){ + $errStr = $this->errArrayToStr($errors); + unset($errors); + $this->errorTextExit($errStr); + } + + // Passed validation, so now go and load the appropriate settings from the hosting plan template... + + $SQL = "SELECT * FROM " . $this->conf['hosting_plans_table']['tablename'] . " WHERE id='$plan_id';"; + $rs=$this->query($SQL); + if(count($rs) == 1){ + $maxdomains = $rs[0]["max_domains"]; + $maxemails = $rs[0]["max_emails"]; + $maxpanelusers = $rs[0]["max_panelusers"]; + $maxftpusers = $rs[0]["max_ftpusers"]; + $maxdbs = $rs[0]["max_ftpusers"]; + $quota = $rs[0]["quota"]; + $master_reseller = $rs[0]["master_reseller"]; + $maxsubdomains = $rs[0]["max_subdomains"]; + }else{ + $success = false; + $this->ok_err_text($success,"",'Failed to load hosting plan from the database.'); + } + + if(!$this->afterInputControls("addpaneluser",array('panelusername'=>$client_panelusername, 'email'=>$client_email))) return false; + $this->output.="Adding user:
"; + $success=$this->addPanelUserDirect($client_panelusername,$client_password,$maxdomains,$maxemails,$maxpanelusers,$maxftpusers,$maxdbs,$quota,$master_reseller,$maxsubdomains,$client_name,$client_email); + $this->ok_err_text($success,"Added panel user successfully.",'Failed to add panel user.'); + + } + }else{ + $success = false; + $this->ok_err_text($success,"",'No existing hosting plans have currently been defined.'); + } + $this->showSimilarFunctions('panelusers'); + return $success; +} + +function addFtpUserDirect($panelusername,$ftpusername,$password,$home,$upload,$download,$quota,$domainname='',$type='',$isSpecialHome=false,$status=''){ + $success=True; + + if($status=='') $status=$this->status_active; # default is active, + # for pureftpd: $qu="INSERT INTO ftpd ( reseller, User , status , Password , Uid , Gid , Dir , ULBandwidth , DLBandwidth , comment , ipaccess , QuotaSize , QuotaFiles,domainname) VALUES ('".$this->activeuser."','$ftpusername', '1', MD5( '$password' ) , '2001', '2001', '$home', '$upload', '$download', '', '*', '$quota', '0','$domainname');"; + if(strstr($home,$this->ehcpdir)!==false) return $this->errorText($this->ehcpdir." location cannot be used for security purposes!"); + + $this->debugecho2("$panelusername,$ftpusername,$password,$home,$upload,$download,$quota,$domainname,$type,$isSpecialHome",1); + $panelusername=trim($panelusername); + $ftpusername=trim($ftpusername); + if($isSpecialHome) $homedir=$home; # home dir is only inserted if different from default of /var/www/vhosts/ftphome.... + $homedir=securefilename($homedir); + + $qu="INSERT INTO ftpaccounts ( reseller, panelusername, domainname, ftpusername, password, homedir, type,status) VALUES ('".$this->activeuser."','$panelusername','$domainname','$ftpusername', password('$password'),'$homedir','$type','$status')"; + $success=$this->executeQuery($qu,'add ftp user : '.$ftpusername); + $success=$success && $this->addDaemonOp('daemonftp','add',$home); + + return $success; +} + +function deleteFtpUserDirect($ftpusername){ + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + $inClause = $this->generateMySQLInClause($userHasAccessToTheseChildrenUsers); + + if(trim($ftpusername)=='') return True; + $success=True; + + $homedir=$this->getField($this->conf['ftpuserstable']['tablename'], "homedir", "ftpusername='$ftpusername' limit 1"); + if($homedir=="") { + $homedir=$this->conf['vhosts']."/$ftpusername"; + } + $success=$success && $this->addDaemonOp("daemonftp","delete","/etc/vsftpd_user_conf/$ftpusername",''," ftp delete info for user specific config file(/etc/vsftpd_user_conf/$ftpusername)"); + + $this->output.="
Deleting ftp user: $ftpusername
"; + $qu="delete from ".$this->conf['ftpuserstable']['tablename']." where ftpusername='$ftpusername'"; + if(!$this->isadmin()){ + $qu .= " AND panelusername " . $inClause; + } + $qu .= " limit 1"; + $success=$success && $this->executeQuery($qu,' delete ftp user from ehcp db'); + + # WHY WOULD YOU DELETE THE FILES --- THEY COULD BE OWNED BY OTHERS + if($this->miscconfig['forcedeleteftpuserhomedir']<>''){ + $success=$success && $this->addDaemonOp("daemonftp","delete",$homedir,'',' ftp delete info '); + } + return $success; +} + +function delSubDomain(){ + global $id; + $success=True; + + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + $inClause = $this->generateMySQLInClause($userHasAccessToTheseChildrenUsers); + + $sql = "select * from ".$this->conf['subdomainstable']['tablename']. " where id='" . $id . "'"; + if(!$this->isadmin()){ + $sql .= " AND panelusername " . $inClause; + } + + $data=$this->query($sql); + + if(count($data) == 0){ + return $this->errorText("This subdomain does NOT belong to your account."); + } + + $data=$data[0]; + + $this->debugecho2(print_r2($data),1); + + $domainname=$data['domainname']; + $subdomain=$data['subdomain']; + $ftpusername=$data['ftpusername']; + $homedir=$data['homedir']; + + $successText = "Successfully removed the subdomain configuration from the database."; + + $success=$success && $this->deleteFtpUserDirect($ftpusername); + $success=$success && $this->executeQuery("delete from ".$this->conf['subdomainstable']['tablename']." where id=$id"); + if($this->miscconfig['forcedeletesubdomainfiles'] == 'Yes'){ + $success=$success && $this->addDaemonOp("daemondomain","delsubdomain",$subdomain,$homedir,'subdomain delete'); + $successText .= " Files located in the subdomain home directory were deleted."; + }else{ + $successText .= " Files located in the subdomain home directory were NOT deleted. The files can be deleted manually via FTP."; + } + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + + $letsEncSubs[] = $subdomain . "." . $domainname; + $success = $success && $this->removeLetsEncryptCertificates($letsEncSubs); + + $this->ok_err_text($success, $successText, "Error deleting subdomain"); + $this->showSimilarFunctions('subdomainsDirs'); + return $success; +} + +function addSubDomain(){ + global $subdomain,$domainname; + $this->getVariable(array('subdomain',"domainname")); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + + $filter="domainname='$domainname'"; + + if($subdomain){ + + $subdomain = removeInvalidChars($subdomain, "subdomainname"); + + if($subdomain){ + $count=$this->recordcount($this->conf['subdomainstable']['tablename'], "domainname='$domainname' and subdomain='$subdomain'"); # todo: this should be moved to existscontrol + if($count>0) return $this->errorText("Subdomain already exists."); + $domaininfo=$this->domaininfo=$this->getDomainInfo($domainname); + + $homedir=$domaininfo['homedir']."/httpdocs/subdomains/$subdomain"; + $webserverips=$domaininfo['webserverips']; + + $qu="insert into ".$this->conf['subdomainstable']['tablename']." (panelusername,subdomain,domainname,homedir,webserverips)values('$this->activeuser','$subdomain','$domainname','$homedir','$webserverips')"; + $success=$success && $this->executeQuery($qu, $opname); + + #$success=$success && $this->addDaemonOp("daemondomain","addsubdomain",$domainname,$homedir,'add subdomain'); + $success=$success && $this->add_daemon_op(array('op'=>'daemondomain','action'=>'addsubdomain','info'=>$subdomain,'info2'=>$domainname,'info3'=>$homedir)); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + if($success){ + $sub1="http://".$subdomain.".".$domainname; + $sub2="http://www.".$subdomain.".".$domainname; + $this->output.="
You may access $sub1 and $sub2 in a few seconds..
"; + } + }else{ + $success = false; + } + $this->ok_err_text($success, "Successfully added subdomain!", "Error adding subdomain."); + } else { + if(!$this->beforeInputControls("addsubdomain",array())) return false; + $inputparams=array(array('subdomain','righttext'=>".$domainname", 'lefttext'=>'Subdomain:')); + $this->output.="Add new subdomain:
(Do not include \"www.\" or \"http://\")".inputform5($inputparams); + } + $this->showSimilarFunctions('subdomainsDirs'); + return $success; + +} + +function showSimilarFunctions($func){ + # the text here may be read from a template + $out1="

Similar / Related $func Functions:

"; + + switch($func){ + case 'ftp': + $out="Add FTP AccountRemove FTP AccountAdd SubDirectory FTP Account Under DomainAdd subdomain with ftpWebFtp (Net2Ftp)Add Custom FTP Account (Admins Only)Remove Custom FTP Account (Admin Only)List All FTP Users "; + if($this->isadmin()){ + $out = "Add VHOST Directory FTP Account" . $out; + } + break; + case 'easyinstall' : $out="Easy Install More Packages";break; + case 'mysql' : $out="List / Delete Mysql DatabasesAdd Mysql Database & UserCreate MySQL Database and Assign to Existing Database UserAdd MySQL User to Existing DatabasephpMyAdmin";break; + case 'email' : $out="List Email Users / Change PasswordsAdd Email UserList Email ForwardersAdd Email ForwarderBulk Add EmailEdit Email AutoreplyWebmail (Squirrelmail)";break; + case 'domain': $out="Add Domain To My AccountEasy Add Domain (with separate ftpuser)Normal Add Domain (Separate ftp&panel user)Bulk Add DomainAdd DNS-Only HostingAdd DNS-Only Hosting with Separate PaneluserMake Domain a DNS SlaveRemove DNS SlaveEasy Add Domain to Different IPSet Active Webserver IPList Domains";break; + case 'redirect': $out="Edit Domain Aliases";break; + case 'options' : $out= " +
Edit/Change Options
+
Change My Password +
List/Add Panelusers/Resellers +
Sync Dns +
Sync Domains
+
Sync Ftp (for non standard home dirs)
+
Advanced Settings

+
Fix Mail Configuration
Fix ehcp Configuration
(This is used after changing ehcp mysql user pass, or if you upgraded from a previous version, in some cases)
+

Fix Apache Configuration with SSL and Non-SSL Mixed Mode(use with caution,may be risky)

+

Fix Apache Configuration with SSL ONLY(use with caution,may be risky)

+
Fix apache Configuration without ssl
+
Fix apache Configuration without ssl, way2 - use this if first wone does not work. this deletes custom apache configurations, if any
+
+
+ List/Add Servers/ IP's
+
+ + Experimental: +
New Sync Dns - Multiserver +
New Sync Domains - Multiserver
+
Multiserver Add Domain +
+ + ";break; + case 'customhttpdns': $out="List Custom HTTPAdd Custom HTTPList Custom DNSAdd Custom DNSList Custom PermissionsAdd Custom Permissions";break; + case 'subdomainsDirs': $out="List SubdomainsAdd SubdomainsAdd Subdomain with FTPAdd Subdirectory with FTP";break; + case 'HttpDnsTemplatesAliases': $out="Edit DNS Template for this DomainEdit Apache Template for this DomainEdit Aliases for this Domain";break; + case 'panelusers': $out="List All Panelusers/ClientsList ResellersAdd Paneluser/Client/ResellerAdd Paneluser/Client/Reseller from Hosting Plan Template";break; + case 'server':$out="List Servers/IP'sAdd ServerAdd IP to This ServerSet Active Webserver IPAdd CronjobRemove Cronjob";break; + case 'backup':$out="BackupRestoreList BackupsSchedule Remote BackupEdit or Remove Scheduled Remote Backup";break; + case 'vps': $out="VPS HomeAdd New VPSVPS SettingsOther VPS Options";break; + case 'pagerewrite': $out="Page Rewrite HomeAdd Page Rewrite";break; + case 'custompermissions': $out="List Custom PermissionsAdd Custom Permissions";break; + case 'global_templates': $out = "Manage Global Webserver Templates"; break; + default : $out="(internal ehcp error) This similar function is not defined in ".__FUNCTION__." : ($func)"; $out1='';break; + } + + if($func != "options"){ + $this->output.="

$out1".$out."
"; + }else{ + $this->output.="

$out1".$out."
"; + } +} + +function validate_ip_address($ip){ + if(validateIpAddress($ip)===false) $this->errorTextExit("The IP address entered is wrong. Here's a working IP address example: 85.98.112.34. You entered this IP Address: $ip)"); +} + +function add_ip_to_this_server(){ + global $ip; + $this->getVariable(array('ip')); + + if($ip){ + $this->validate_ip_address($ip); + $q="insert into servers (servertype,ip,accessip) values ('apache2','$ip','localhost')"; + $this->executeQuery($q); + $this->output.='Ip added.'; + } else { + $this->output.=inputform5(array( + array('ip', 'lefttext'=>'IP Address:') + )); + } + + $this->showSimilarFunctions('server'); +} + +function checkFtpLimit($ftpusername){ + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) $this->showexit(); +} + +function addFtpUser(){ + $this->requireAdmin(); // Requires admin since this really shouldn't be used... it should be assigned to current panel user by default... this is an advanced function that probably shouldn't be used + + $op="addftpuser"; + global $domainname,$ftpusername,$password,$quota,$upload,$download; + $this->getVariable(array("domainname","ftpusername","password","quota","upload","download")); + $homedir=$this->conf['vhosts']."/$ftpusername"; + $success=True; + + if($ftpusername){ + + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) return false; + + $this->output.="Adding ftp user with homedir $homedir:"; + + $success=$success && $this->addFtpUserDirect($this->activeuser,$ftpusername,$password,$homedir,$quota,$upload,$download,$domainname); + $this->ok_err_text($success,"FTP account was added successfully.","Failed to add FTP account. "); # all these functions are to reduce code needed... + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + $inputparams=array( + array('ftpusername','lefttext'=>'FTP Username'), + array('password','password_with_generate'), + array('quota','lefttext'=>'Quota (MB)','default'=>100), + array('upload','lefttext'=>'Upload Bandwidth (KB/s)','default'=>1000), + array('download','lefttext'=>'Download Bandwidth (KB/s)','default'=>1000), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="

Adding FTP User:
(Under " . $homedir . "ftpusername)
" + .inputform5($inputparams); + } + $this->showSimilarFunctions('ftp'); + return $success; + +} + +function addFtpToThisPaneluser(){ # add an ftp user freely under your master ftp directory + global $ftphomedir,$ftpusername,$password,$_insert; + $this->getVariable(array("ftphomedir","ftpusername","password","_insert")); + $selfftp=$this->getSelfFtpAccount($returnto=__FUNCTION__); # ftp account for this panel user is with type field=default in ftpaccounts table + $masterhome=$this->conf['vhosts']."/$selfftp"; + $success=True; # must be at start, to keep good formating. + + if($_insert){ + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) return false; + + $homedir="$masterhome/$ftphomedir"; + $this->output.="Adding ftp user:"; + $quota=$upload=$download=200; + $success=$success && $this->addFtpUserDirect($this->activeuser,$ftpusername,$password,$homedir,$quota,$upload,$download,$domainname,'',True);# this also prepares that dir.. + + if($success) { + $this->output.="
You may now access $homedir via FTP.
"; + $msguser="Hi EHCP Force User,

A FTP account with the home directory of $homedir has been added to your account on server IP: ".$this->singleserverip."

Your FTP Username: $ftpusername
FTP Password: $password"; + if($email<>'') $this->sendEmail($email,"FTP Account Created", $msguser); + } + + $this->ok_err_text($success, "FTP account was added successfully.", "Failed to create FTP account."); + + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + $inputparams=array( + array('ftphomedir','lefttext'=>"$masterhome/",'righttext'=>'Home Directory of FTP User (leave empty to default to your home directory)'), + array("ftpusername", 'lefttext'=>'FTP Username:'), + array("password","password_with_generate", 'lefttext'=>'Password:'), + array('email','righttext'=>' of person the subdirectory is setup for..(will be informed)', 'lefttext'=>'Email Address:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Enter FTP Information Here:
".inputform5($inputparams); + } + + $this->showSimilarFunctions("ftp"); + return $success; +} + + +function add_ftp_special(){ # add an ftp user freely under /home/ dir freely + global $ftphomedir,$ftpusername,$password,$_insert; + $this->getVariable(array("ftphomedir","ftpusername","password","_insert")); + $this->requireAdmin(); + + $masterhome='/home'; + $success=True; # must be at start, to keep good formating. + + if($_insert){ + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) return false; + + $homedir="$masterhome/$ftphomedir"; + $this->output.="Adding ftp user:"; + $quota=$upload=$download=200; + $success=$success && $this->addFtpUserDirect($this->activeuser,$ftpusername,$password,$homedir,$quota,$upload,$download,$domainname,'',True);# this also prepares that dir.. + + if($success) { + $this->output.="
You may access $homedir by ftp from now on.
"; + $msguser="Hi EHCP Force User,

A FTP account with the home directory of $homedir has been added to your account on server IP: ".$this->singleserverip."

Your FTP Username: $ftpusername
FTP Password: $password"; + if($email<>'') $this->sendEmail($email,"FTP Account Created", $msguser); + } + + $this->ok_err_text($success, "FTP account was added successfully.", "Error add ftp"); + + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + + $inputparams=array( + array('ftphomedir','lefttext'=>"$masterhome/",'righttext'=>'Home Directory of FTP User'), + array("ftpusername",'lefttext'=>'FTP Username:'), + array("password","password_with_generate", 'lefttext'=>'Password:'), + array('email','righttext'=>' of the person the subdirectory is setup for. User will receive credentials for this FTP account via email.', 'lefttext'=>'Email Address:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Enter FTP Information Here:
".inputform5($inputparams); + } + + $this->showSimilarFunctions("ftp"); + return $success; +} + + +function addSubDirectoryWithFtp(){ + global $subdirectory,$domainname,$ftpusername,$password,$email; + $this->getVariable(array('subdirectory',"domainname","ftpusername","password",'email'),True); + + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $filter="domainname='$domainname'"; + $success=True; # must be at start, to keep good formating. + + if($subdirectory){ + + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) return false; + + $homedir=$this->getField($this->conf['domainstable']['tablename'], "homedir", $filter)."/httpdocs/$subdirectory"; + $this->output.="Adding ftp user:"; + $quota=$upload=$download=200; + $success=$success && $this->addFtpUserDirect($this->activeuser,$ftpusername,$password,$homedir,$quota,$upload,$download,$domainname,'',True);# this also prepares that dir.. + + if($success) { + $sub1="http://".$domainname."/$subdirectory"; + $sub2="http://www.".$domainname."/$subdirectory"; + $this->output.="
You may access $sub1 and $sub2 in a few seconds..
"; + + $msguser="Hi EHCP Force User,

The subdirectory of $sub1 or $sub2 was setup in the EHCP panel on server IP: ".$this->singleserverip."

Your FTP Username: $ftpusername
FTP Password: $password"; + if($email<>'') $this->sendEmail($email,"Subdirectory with FTP Account Created", $msguser); + } + + $this->ok_err_text($success, "Subdirectory was successfully configured, and a FTP account was created which can access this subdirectory.", "Error adding subdirectory."); + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + $inputparams=array( + array('subdirectory','lefttext'=>"www.$domainname/"), + array("ftpusername", 'lefttext'=>'FTP Username:'), + array("password","password_with_generate", 'lefttext'=>'Password:'), + array('email','righttext'=>' of person the subdirectory is setup for.', 'lefttext'=>'Email Address:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Enter Subdirectory Information Here:
".inputform5($inputparams); + } + $this->showSimilarFunctions("ftp"); + $this->showSimilarFunctions('subdomainsDirs'); + return $success; + +} + + +function addSubDomainWithFtp(){ + + global $subdomain,$domainname,$ftpusername,$password,$email; + $this->getVariable(array('subdomain',"domainname","ftpusername","password",'email'),True); + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $success=True; + + $filter="domainname='$domainname'"; + + if($subdomain){ + $subdomain = removeInvalidChars($subdomain, "subdomainname"); + + if($subdomain){ + + if(!$this->afterInputControls("addftpuser", + array( + "ftpusername"=>$ftpusername + ) + ) + ) return false; + + $count=$this->recordcount($this->conf['subdomainstable']['tablename'], "domainname='$domainname' and subdomain='$subdomain'"); + if($count>0) return $this->errorText("Subdomain already exists."); + + $homedir=$this->getField($this->conf['domainstable']['tablename'], "homedir", $filter)."/httpdocs/subdomains/$subdomain"; + $qu="insert into ".$this->conf['subdomainstable']['tablename']." (panelusername,subdomain,domainname,homedir,ftpusername,password)values('$this->activeuser','$subdomain','$domainname','$homedir','$ftpusername',md5('$password'))"; + $success=$success && $this->executeQuery($qu, $opname); + $success=$success && $this->addDaemonOp("syncdomains",'xx',$domainname,'','sync domains'); + + $this->output.="Adding ftp user:"; + $quota=$upload=$download=100; + $success=$success && $this->addFtpUserDirect($this->activeuser,$ftpusername,$password,$homedir,$quota,$upload,$download,$domainname,'subdomain',True); + + if($success) { + $sub1="http://".$subdomain.".".$domainname; + $sub2="http://www.".$subdomain.".".$domainname; + $this->output.="
You may access $sub1 and $sub2 in a few seconds..
"; + + $msguser="Hi EHCP Force User,

The subdomain of $sub1 or $sub2 was setup in the EHCP panel on server IP: ".$this->singleserverip."

Your FTP Username: $ftpusername
FTP Password: $password"; + if($email<>'') $this->sendEmail($email,"Subdomain and FTP Account Created", $msguser); + } + + $this->ok_err_text($success, "Successfully added subdomain and FTP account for access to this subdomain.", "Error adding subdomain and FTP account."); + }else{ + $success = false; + $this->ok_err_text($success, "Successfully added subdomain and FTP account for access to this subdomain.", "Error adding subdomain and FTP account."); + } + } else { + if(!$this->beforeInputControls('addftpuser')) return false; + if(!$this->beforeInputControls('addsubdomainwithftp')) return false; + $inputparams=array( + array('subdomain','righttext'=>".$domainname", 'lefttext'=>'Subdomain:'), + array("ftpusername", 'lefttext'=>'FTP Username for Subdomain Access:'), + array("password","password_with_generate", 'lefttext'=>'Password:'), + array('email','righttext'=>' of person the subdomain is setup for.'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Enter Subdomain Here:
(\"www.\" will be automatically added in front of the subdomain, so please don't include it!)".inputform5($inputparams); + } + $this->showSimilarFunctions("ftp"); + $this->showSimilarFunctions('subdomainsDirs'); + return $success; + +} + +function subDomains(){ + global $domainname; + $this->getVariable(array("domainname")); + + if($dom<>'')$domainname=$dom; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + #$filter="panelusername='$this->activeuser'"; + $filter="domainname='$domainname'"; + + if($this->selecteddomain<>'') $filter.=" and domainname='$this->selecteddomain' ORDER BY subdomain ASC"; + $this->listTable("Subdomains", 'subdomainstable', $filter); + $this->output.="
Add Subdomain"; + $this->showSimilarFunctions('subdomainsDirs'); + +} + +function listDomains($dom='',$filt=''){ + global $domainname; + $this->getVariable(array("domainname")); + if($dom<>'')$domainname=$dom; + + if(!$domainname) { + $linkimages=array('images/edit.gif','images/incele.jpg','images/delete1.jpg','images/openinnew.jpg'); + $linkfiles=array('?op=editdomain','?op=selectdomain','?op=deletedomain',"target=_blank href='?op=redirect_domain"); + $linkfield='domainname'; + $filter=$this->applyGlobalFilter($filt); + #$this->output.="
filtre: $filter"; + $this->output.="
Domain List: ". + $this->tablolistele3_5_4($this->conf['domainstable']['tablename'],$baslik,$this->conf['domainstable']['listfields'],$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount)."
"; + } else { + $this->listemailusers($domainname); + } +} + +function listemailusers($dom=''){ # listemailusers + global $domainname; + $this->getVariable(array("domainname")); + + if($dom<>'')$domainname=$dom; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + # this ensures the ownership of domain + + #$filter="domainname='$domainname'"; + $filter="domainname REGEXP '".$domainname."(,|$)'"; # modified upon suggestion of sextasy@discardmail.com + + $this->output.="$domainname domain email user List: "; + $this->listTable("", "emailuserstable", $filter); + $this->showSimilarFunctions('email'); +} + + +function listftpusers($dom=''){ + global $domainname; + $this->getVariable(array("domainname")); + if($dom<>'')$domainname=$dom; # parametre ile verilmisse listele... + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + + # this ensures the ownership of domain + + $filter="domainname='$domainname'"; + $linkfiles=array('?op=editftpuser','?op=userop&action=ftpuserdelete'); + $linkimages=array('images/edit.gif','images/delete1.jpg'); + $linkfield='ftpusername'; + $this->output.="
$domainname domain ftp user List:
Note: deleting a user, will delete his files too..
" + .$this->tablolistele3_5_4($this->conf['ftpuserstable']['tablename'],$baslik,array("domainname","ftpusername"),$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount)."
"; + + $this->showSimilarFunctions("ftp"); +} + + + +function listallemailusers(){ + if(!$this->isadmin()) { + $filter="panelusername='$this->activeuser'"; + $filter=$this->applyGlobalFilter($filter); + } + + $this->output.="All domain's email users: "; + $this->listTable("", "emailuserstable", $filter); +} + + +function listAllFtpUsers($filt=''){ + $linkfiles=array('?op=editftpuser','?op=userop&action=ftpuserdelete'); + $linkimages=array('images/edit.gif','images/delete1.jpg'); # edit passwordlu image eklenecek + $linkfield='ftpusername'; + $filter=$this->applyGlobalFilter($filt); + $this->debugtext("filter: $filter"); + $this->output.="
Ftp users: ". + $this->tablolistele3_5_4($this->conf['ftpuserstable']['tablename'],$baslik,$this->conf['ftpuserstable']['listfields'],$filter,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount)."
"; + + $this->output.="
Empty homedir means default location"; + + $this->showSimilarFunctions("ftp"); +} + +function listpanelusers(){ + $table=$this->conf['paneluserstable']; + $filter=$this->globalfilter; + $this->output.="
Panel Users". + $this->tablolistele3_5_4($table['tablename'],array('','','','','','Quota (MB*)'),$table['listfields'],$filter,$sirala,$table['clickimages'],$table['clickfiles'],$table['linkfield'],$listrowstart,$listrowcount) + ."Add Paneluser/Reseller
"; + $this->showSimilarFunctions('panelusers'); +} + +function resellers(){ + $table=$this->conf['paneluserstable']; + $filter="maxpanelusers>1"; + $filter=andle($filter,$this->globalfilter); + $this->output.="
All/your panel users: ". + $this->tablolistele3_5_4($table['tablename'],$baslik,$table['listfields'],$filter,$sirala,$table['clickimages'],$table['clickfiles'],$table['linkfield'],$listrowstart,$listrowcount)."
"; + + $this->output.="
Add Reseller/Panel User
"; + $this->showSimilarFunctions('panelusers'); +} + +function getPanelUserInfo($id='',$panelusername=''){ + if($id){ + $filt="id=$id"; + } elseif($panelusername<>'') { + $filt="panelusername='$panelusername'"; + } else { + $filt="panelusername='".$this->activeuser."'"; + } + $ret=$this->query("select * from ".$this->conf['paneluserstable']['tablename']." where $filt "); + return $ret[0]; +} + +function getParentsAndChildren($parent){ + // This function recursively retrieves parent and direct children tree all the way down generations + // Add parent to array + $users[] = $parent; + + // Get subusers + // admin is the only account where reseller and paneluser are both admin + // So to prevent endless recursive loop, we must exclude accounts where panelusername = 'admin' + $resellerUsers = $this->getPanelUsers("reseller='" . $parent . "' and panelusername != 'admin'"); + + if(is_array($resellerUsers)){ + foreach($resellerUsers as $usr){ + // For each child, go and get their children + $users = array_merge($users, $this->getParentsAndChildren($usr['panelusername'])); + } + } + return $users; +} + +function deletepaneluser(){ + global $id,$confirm; + $this->getVariable(array('id','confirm')); + + $success = false; + $paneluserinfo=$this->getPanelUserInfo($id); + + // Get user information + $panelusername=$paneluserinfo['panelusername']; + + if($panelusername=='admin'){ + return $this->errorText('The admin account cannot be removed.'); + } + + // Variables + $domInfoTableHTML = ""; + $domCounter = 0; + $userInfoHTML = "
    "; + + $usersToRemove = $this->getParentsAndChildren($panelusername); + $userCanDeleteTheseUsers = $this->getParentsAndChildren($this->activeuser); + + if($panelusername == $this->activeuser){ + return $this->errorText('You cannot delete your own account. Please have an administrator do this for you.'); + } + + // Better security here... don't print what is available unless they have permission to delete that domain + if(!in_array($panelusername, $userCanDeleteTheseUsers)){ + return $this->errorText('You are not authorized to delete this account from the panel!'); + } + + // Build information variables used to inform user about everything that will happen from deleting this user + foreach($usersToRemove as $userToDelete){ + + // Get domains that belong to the user including domains that have been created under that reseller's account + $usersDomains = $this->getDomains("panelusername='" . $userToDelete ."' or reseller='" . $userToDelete . "'"); + + foreach($usersDomains as $dom){ + $domInfoTableHTML .= "" . $dom['domainname'] . "" . $dom['panelusername'] . "" . $dom['reseller'] . ""; + $domCounter++; + } + + $domainsCollection[] = $usersDomains; + + // Append to our HTML output + $userInfoHTML .= "
  • " . $userToDelete . "
  • "; + } + $userInfoHTML .= "
"; + + + + if(!$confirm){ + // Make sure user wants to delete this user and all of this good stuff! + + $outputHTML = "

Delete User " . $panelusername . "?

Also, if the user " . $panelusername . " is a reseller, his users and sub-users will also be deleted!

"; + $outputHTML .= "

The following users will be deleted:

" . $userInfoHTML; + + if($domCounter > 0){ + $outputHTML .= "

The following domains along with their associated subdomains, FTP accounts, and MySQL databases will be deleted:

+ + + + + + " + . $domInfoTableHTML . "
DomainPanel UserReseller
"; + } + $outputHTML .= "

 
"; + $this->output .= $outputHTML; + return false; + }else{ + // We need to delete each domain and its settings + // Which will also delete the reseller's accounts + foreach($domainsCollection as $usersDomains){ + for($i = 0; $i < count($usersDomains); $i++){ + $domainsToDeleteUnique[] = $usersDomains[$i]['domainname']; + } + } + + // Get unique domains only + $domainsToDeleteUnique = array_unique($domainsToDeleteUnique); + foreach($domainsToDeleteUnique as $delDomain){ + $this->deleteDomainDirect($delDomain, false); + } + + // Remove panel users + foreach($usersToRemove as $userToDelete){ + if(in_array($userToDelete, $userCanDeleteTheseUsers)){ + $success = $this->removePanelUser($userToDelete); + }else{ + return $this->errorText('You are not authorized to delete this account from the panel!'); + } + } + $this->ok_err_text($success,"Panel user " . $panelusername . " with account ID \"" . $id . "\" was deleted along with any children.","Failed to remove panel user $panelusername."); + $this->showSimilarFunctions('panelusers'); + $this->add_daemon_op(array('op'=>'new_sync_all')); + } + + return $success; +} + +function removePanelUser($user){ + // Delete the user from the panelusers table + $success=$this->executeQuery("delete from ".$this->conf['paneluserstable']['tablename']." where panelusername='$user'",'Deleting User: ' . $user); + + // Delete FTP home dir + $userFTPAccounts=$this->getUserFTPAccounts($user); + foreach($userFTPAccounts as $ftpAccount){ + // Get FTP home directory + $ftpHomeDirectory = $ftpAccount["homedir"]; + if(empty($ftpHomeDirectory) || is_null($ftpHomeDirectory)){ + $ftpHomeDirectory = $this->vhostsdir . "/" . $ftpAccount["ftpusername"]; + } + + // Make sure ftpHomeDirectory is at least 3 levels deep on root filesystem + $pieces = explode("/", $ftpHomeDirectory); + if($pieces != false){ + $pieces = array_filter($pieces); + } + if(!empty($ftpHomeDirectory) && file_exists($ftpHomeDirectory) && $pieces != false && count($pieces) >= 3){ + passthru2_silent("rm -rf '" . $ftpHomeDirectory . "'", true, true); + passthru2_silent("rmdir '" . $ftpHomeDirectory . "'", true, true); + } + } + + // We need to remove FTP users for this account + $success=$this->executeQuery("delete from ".$this->conf['ftpuserstable']['tablename']." where panelusername='$user'",'Deleting FTP Users Belonging To Account: ' . $user); + + // We need to remove this users predefined hosting templates + $success=$this->executeQuery("delete from ".$this->conf['hosting_plans_table']['tablename']." where panelusername='$user'",'Deleting Hosting Plan Templates Belonging To Account: ' . $user); + + // Sync FTP accounts + $this->addDaemonOp('syncftp','','','','sync ftp for nonstandard homes'); + + return $success; +} + +function editFtpUser(){ + global $ftpusername,$_insert,$status,$newpass,$newpass2; + $this->getVariable(array('ftpusername','_insert','status','newpass','newpass2')); + $success=True; + + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + $inClause = $this->generateMySQLInClause($userHasAccessToTheseChildrenUsers); + + if(!$ftpusername){ # if no ftpusername given, learn it from domainname, + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $ftpusername=$this->getField($this->conf['ftpuserstable']['tablename'], "ftpusername", "domainname='$domainname' limit 1"); + } + + if(!$ftpusername){ + $this->output.="
This account does not have a dedicated FTP account! You may change your general FTP account here.
"; + return false; + } + + if(!$this->isadmin() && $this->recordcount($this->conf['ftpuserstable']['tablename'], "panelusername " . $inClause . " AND ftpusername='" . $ftpusername . "'")==0){ + // Admin should be able to edit any MySQL user + return $this->errorText("This FTP account is not owned by your account."); + } + + if(!$_insert){ + $inputparams=array( + array('status','select','lefttext'=>'Set Active/Passive','secenekler'=>$this->statusActivePassive), + #array('status','lefttext'=>'Set Active/Passive'), + array('newpass','password','lefttext'=>'New Password: (leave empty for no change)'), + array('newpass2','password', 'lefttext'=>'Enter Password Again:'), + array('ftpusername','hidden','default'=>$ftpusername, 'lefttext'=>'FTP Username:'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.="Changing FTP User: $ftpusername
".inputform5($inputparams); + + } else { + + $filt=$this->applyGlobalFilter("ftpusername='$ftpusername'"); + $this->debugtext("filter: $filt"); + if($newpass=='' and $newpass2=='') { + $passwordset=''; + } else { + if($newpass<>$newpass2) $success=$this->errorText('The entered passwords do not match. Please try again.'); + $passwordset=", password=password('$newpass') "; + } + + + $success=$success && $this->executeQuery("update ".$this->conf['ftpuserstable']['tablename']." set status='$status' $passwordset where $filt"); + $success=$success && $this->addDaemonOp("daemonftp",$status,$this->conf['vhosts'].'/'.$ftpusername); + $success=$success && $this->addDaemonOp('syncftp','','','','sync ftp for nonstandard homes'); + + $this->ok_err_text($success,'FTP account was successfully modified.','Failed to modify FTP account.'); + } + $this->showSimilarFunctions('ftp'); + return $success; + +} +#============================================================== +# =============== class utility functions insertrow, editrow, + +function editrow2($tabledesc,$where,$extra=array()){ + # 1den farki: inputform5 ile calisacak:, editpaneluser icinde kullanilacak, + global $_insert; + $this->getVariable(array("_insert")); + $table=$this->conf[$tabledesc]; + + $linkfield=$table['linkfield']; + global $$linkfield; # get id.. + $this->getVariable(array($linkfield)); + $fields=$table['editfields']; # get other edit fields + + +} + +function editrow($tabledesc,$where,$extra=array()){ + global $_insert; + + $op = $_REQUEST["op"]; + $this->getVariable(array("_insert")); + $table=$this->conf[$tabledesc]; + + $linkfield=$table['linkfield']; + global $$linkfield; # get id.. + $this->getVariable(array($linkfield)); + + $fields=$table['editfields']; # get other edit fields + $editlabels=$table['editlabels']; + $checkboxFields = $table['checkbox_fields']; + if(!$this->hasValueOrZero($checkboxFields) || !is_array($checkboxFields)){ + $checkboxFields = array(); + } + + if($_insert){ + if($_SESSION["temp_id"] == $$linkfield){ + foreach ($fields as $alan) global $$alan; # yukardakilerin hepsini global yap.. + $newvalues=$this->getVariable($fields); + foreach($checkboxFields as $cbField){ + if(!$this->hasValueOrZero($$cbField)){ + $$cbField = 0; // default it to false + } + } + $success=$this->updatequery($table['tablename'],$fields,$newvalues,$linkfield."=".$$linkfield); + }else{ + $success = false; + } + unset($_SESSION[$$linkfield]); + return $this->ok_err_text($success,"Updated successfully.","Update failed (editrow)"); + }else{ + $_SESSION["temp_id"] = $id; + $values=array_values($this->alanal2($table['tablename'],$fields,$where)); + + // Debug + //echo "

Values:
" . print_r($values, true) . "
Edit Labels:
" . print_r($editlabels, true) . "
Fields:
" . print_r($fields, true) . "

"; + + $inputparams=array(); + + if(count($fields) == count($values) && count($fields) == count($editlabels)){ + for($i = 0; $i < count($fields); $i++){ + if(!in_array($fields[$i], $checkboxFields)){ + $inputparams[] = array($fields[$i], 'lefttext'=>$editlabels[$i], 'default'=>$values[$i]); + }else{ + $inputparams[] = array($fields[$i], 'checkbox', 'lefttext'=>$editlabels[$i], 'default'=>'1', 'checked'=>$values[$i]); + } + } + if(count($inputparams) > 0 && is_array($inputparams)){ + if($this->hasValueOrZero($op)){ + $inputparams[] = array('op','hidden','default'=>$op); + }else{ + $inputparams[] = array('op','hidden','default'=>__FUNCTION__); + } + $inputparams[] = array($linkfield,'hidden','default'=>$$linkfield); + } + $this->output.="Edit ID: $id
".inputform5($inputparams); + return True; + }else{ + $success = false; + } + + return $this->ok_err_text($success,"Record successfully loaded.", "Failed to retrieve record."); + } + + return $this->ok_err_text($success,"Record successfully loaded.", "Failed to retrieve record."); +} + +function myreseller(){ + #return $this->alanal(); #enson email ekleme yap�yordum... +} + +function applyGlobalFilter($filter){ + if($this->globalfilter) $global='('.$this->globalfilter.')'; + $filt=andle($global,$filter); + #$this->output.="
globalfilter: $this->globalfilter, filter: $filter, applyglobalfilter result: $filt"; + return $filt; +} + +function test(){ + #return executeprog2("mkdir xxx"); + return false; + $suc=True; + $ss=false; + $suc=$suc && $ss; + $this->isTrue($suc,'test icinde'); + + $suc=True; + $ss=True; + + $suc=$suc && $ss=$gg=false; + $this->isTrue($suc,'test icinde, True olmali.'); + + + $this->isTrue(True); + $this->isTrue(false); + $this->isTrue(null); + $this->isTrue(0); + $this->isTrue(''); + $this->output.="
finished first test"; +} + + + +#============================= utility functions, query etc.. +function exist($table,$where){ + $sayi=$this->recordcount($table,$where); + return ($sayi>0); +} + +function recordcount($table,$where,$debug=false) { + $q="select count(*) as sayi from ".$table; + if($where<>'') $q.=" where ". $where; + $sayi=$this->query2($q); + if($debug) $this->output.="
$q
"; + if($sayi) return $sayi['sayi']; + else return false; +} + + +function updatequery($table,$fields,$values,$where){ + $record=array_combine($fields,$values); + #$this->output.=print_r2($record); + return $this->conn->AutoExecute($table,$record,'UPDATE', $where); +} + +function insertquery($table,$fields,$values){ + $record=array_combine($fields,$values); + #$this->output.=print_r2($record); + return $this->conn->AutoExecute($table,$record,'INSERT'); +} + + +function safe_execute_query($qu,$params,$opname='',$caller='',$mysqlconn=false){ # only executes conn->execute + # example: $this->safe_query("select * from panelusers where panelusername='%s' and md5('%s')=password",array($username,$password),"","comment-caller") + $this->logquery($qu.($caller?' Caller:'.$caller:'')); + $params2=array($qu); + foreach($params as $p) $params2[]=$this->escape($p); + $qu = call_user_func_array('sprintf', $params2); + $this->logquery($qu.' Caller:'.$caller); + + if($mysqlconn){ # mysqlconn is for queries that needs to be executed on another mysql link. + $rs=mysqli_query($mysqlconn,$qu); + $err = $this->getDBError($mysqlconn); + } else $rs=$this->conn->Execute($qu); + + if($rs===false) { + $err=$this->getDBError(); + return $this->error_occured("Error $opname (executequery: $qu) $err"); + } + if($opname<>''){ + $this->echoln("Success " . $opname . "\n"); + } + return True; +} + + +function safe_query($qu,$params,$caller=''){ #returns associated array + $this->logquery($qu.' Caller:'.$caller); + $params2=array($qu); + foreach($params as $p) $params2[]=$this->escape($p); + $qu = call_user_func_array('sprintf', $params2); + $this->logquery($qu.' Caller:'.$caller); + + $rs = $this->conn->Execute($qu); + + if($rs===false) { + $err=$this->getDBError(); + return $this->error_occured("query, caller: $caller ","query: $qu ($err)"); + } + else $res=$rs->GetArray(); + #if(!$res) $this->debugtext("query: res null, query: $qu"); + return $res; + +} + +function check_mysql_connection(){ + # reconnect if mysql conn gone away + # should be called in daemon mode + + echo "\nfile:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."\n"; + + $rs = $this->conn->Execute("select now()"); + if($rs===false){ + $msg=$this->conn->ErrorMsg(); + + if(strstr($msg,'server has gone away')!==false){ + $this->tryReconnect(); + } + } else { + echo "\nmysql connection is already alive\n"; + } + +} + +function query($qu,$caller=''){ #returns associated array + #$this->check_mysql_connection(); + $this->logquery($qu.' Caller:'.$caller); + $rs = $this->conn->Execute($qu); + if($rs===false) { + $err=$this->getDBError(); + return $this->error_occured("query, caller: $caller ","query: $qu ($err)"); + } + else $res=$rs->GetArray(); + #if(!$res) $this->debugtext("query: res null, query: $qu"); + return $res; +} + +function query2($qu) { # sadece tek sat�r d�nd�r�r.. + $res=$this->query($qu); + #$this->output.="qu: $qu
".print_r2($res); + return $res[0]; +} + + +function getField($tablo,$alan,$filter){ + $query="select $alan from $tablo"; + if($filter<>'')$query.=" where $filter"; + $res=$this->query($query); + #$this->output.="alanal icinde:".print_r2($res); + #if($res)$this->output.="
bilgi var...
"; + if($res)return $res[0][$alan]; + else return false; +} + +function multiserver_getfield($tablo,$alan,$filter,$serverip){ + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + $query="select $alan from $tablo"; + if($filter<>'')$query.=" where $filter"; + $res=$this->multiserver_query($query,$serverip); + #$this->output.="alanal icinde:".print_r2($res); + #if($res)$this->output.="
bilgi var...
"; + if($res)return $res[0][$alan]; + else return false; +} + +function alanal2($tablo,$alanlar,$filter){ + $query="select ".selectstring($alanlar)." from $tablo "; + if($filter<>'')$query.=" where $filter"; + $res=$this->query($query); + #$this->output.=print_r2($res); + if($res) return $res[0]; + else return false; +} + + +function tabloyaekle2($tablo,$record){ + $sql = "SELECT * FROM $tablo WHERE 1 = 2"; + $rs = $this->executeQuery($sql); + $sql = $this->conn->GetInsertSQL($rs, $record); + #$this->output.="
sql:$sql ".print_r2($fields).print_r2($values)."
"; + if(!$res=$this->executeQuery($sql)) $this->output.="Tabloya eklerken hata: $tablo
"; + return $res; +} + + +function getinsertsql($tablo,$fields,$values){ + $sql = "SELECT * FROM $tablo WHERE 1 = 2"; + $rs = $this->conn->Execute($sql); + $record=array_combine($fields,$values); + $sql = $this->conn->GetInsertSQL($rs, $record); + #$this->output.="
sql:$sql ".print_r2($fields).print_r2($values).print_r2($record)."
"; + return $sql; +} + +function logquery($qu){ + $this->queries[]=$qu; + if(rand(1,20)>18) { # do not count for queries each time + if(count($this->queries)>1000) $this->queries=array(); # limit it + } +} + +function executeQuery($qu,$opname='',$caller='',$mysqlconn=false,$adoConn=false){ # only executes conn->execute + $this->logquery($qu.($caller?' Caller:'.$caller:'')); + + if($mysqlconn){ # mysqlconn is for queries that needs to be executed on another mysql link. + $rs=mysqli_query($mysqlconn, $qu); + $err=$this->getDBError($mysqlconn); + $this->debugecho("query executed on another mysql link:($qu)",1,false); + $affectedRows = mysqli_affected_rows($mysqlconn); + } elseif($adoConn) { + $rs=$adoConn->Execute($qu); + $err=$adoConn->ErrorMsg(); + $this->debugecho("query executed on another ado-mysql link.($qu)",1,false); + $affectedRows = $adoConn->Affected_Rows(); + } else { + $rs=$this->conn->Execute($qu); + $err=$this->conn->ErrorMsg(); + $affectedRows = $this->conn->Affected_Rows(); + } + + if($rs===false) { + return $this->error_occured("Error $opname (executequery: $qu) ($err)"); + } + + if($opname<>''){ + $this->echoln("Success " . $opname . "\n"); + } + + if(is_numeric($affectedRows)){ + if($affectedRows > 0){ + return $affectedRows; + } + } + + return True; +} + +function query3($qu,$opname='',$caller='',$mysqlconn=false,$adoConn=false){ # only executes conn->execute + $this->logquery(__FUNCTION__.':'.$qu.($caller?' Caller:'.$caller:'')); + + if($mysqlconn){ # mysqlconn is for queries that needs to be executed on another mysql link. + $rs=mysqli_query($mysqlconn,$qu); + $err=$this->getDBError($mysqlconn); + $this->debugecho("query executed on another mysql link:($qu)",1,false); + $res=array(); + + while($r=mysqli_fetch_assoc($rs)) $res[]=$r; # build ado style result set. + + } elseif($adoConn) { + $rs=$adoConn->Execute($qu); + $err=$adoConn->ErrorMsg(); + $this->debugecho("query executed on another ado-mysql link.($qu)",1,false); + $res=$rs->GetArray(); + } else { + $rs=$this->conn->Execute($qu); + $err=$this->conn->ErrorMsg(); + $res=$rs->GetArray(); + } + + if($rs===false) { + return $this->error_occured("Error $opname (executequery: $qu) ($err)"); + } + + if($opname<>''){ + $this->echoln("Success " . $opname . "\n"); + } + + return $res; +} + +# ============================ initialization and db settings misc + +function nextgoal(){ + +} + + +function isadmin(){ + return ($this->activeuser=='admin'); +} + +function connectTodb() { + # $this->conn=NewADOConnection("mysql"); # reconnect did not work, so i moved $this->conn=NewADOConnection("mysql") into connectTodb2 + $ret=$this->connectTodb2(); + return $ret; +} + +function connect_to_mysql($named_params){ + + # our new function with named_params + extract($named_params); + + $this->output.=__FUNCTION__.": dbhost:$dbhost,dbusername:$dbusername,dbname:$dbname"; + + if($this->connected_mysql_servers[$dbhost]) return $this->connected_mysql_servers[$dbhost]; + + if(! $conn = mysqli_connect($dbhost, $dbusername, $dbpass)){ + $this->output.="
mysql connection error: $dbhost".$this->getDBErrorNo($conn)." ".$this->getDBError($conn).""; + return false; + } + + if(!mysqli_select_db($conn,$dbname)){ + $this->output.="
Cannot select db: $dbname on host:$dbhost
"; + return false; + }; + + + $this->connected_mysql_servers[$dbhost]=$conn; # keep track of connections, to prevent multiple connection trying. + + return $conn; +} + +function escape($str) { + return mysqli_real_escape_string($this->link,$str); +} + +function getDBError($connection=""){ + if(!empty($connection)){ + return mysqli_error($connection); + }else{ + return mysqli_error($this->link); + } +} + +function getDBErrorNo($connection=""){ + if(!empty($connection)){ + return mysqli_errno($connection); + }else{ + return mysqli_errno($this->link); + } +} + +function connectTodb2(){ + # why a separate func: connecttodb is a wrapper for this. it may do other stuff. + $this->conn=NewADOConnection("mysqli"); + $this->conn->SetFetchMode(ADODB_FETCH_ASSOC); + $this->conn->connect($this->dbhost,$this->dbusername,$this->dbpass,$this->dbname); + + if(!$this->conn or ($this->conn->ErrorMsg()<>'')){ + echo "

Error Occured while connecting to db, check your db settings...
+ This is mostly caused by wrong ehcp password in config.php
+ if you just installed ehcp, then learn/know your ehcp root password, then re-install ehcp..
+ you may also try troubleshoot page or Additional mysql troubleshooter... or www.ehcp.net/?q=node/245 +
".$this->conn->ErrorMsg()."
"; + $this->connected=false; + return false; + } + $this->executeQuery("set names utf8"); + + $this->connected=True; + + // Get link instance + + if(!$this->conn or !$this->connected) { + // Also create a normal mysqli connection to use for various functions such as escaping values + $logininfo=array( + 'dbhost'=>'localhost', + 'dbusername'=>$this->dbusername, + 'dbpass'=>$this->dbpass, + 'dbname'=>$this->dbname + ); + + $this->link = $this->connect_to_mysql($logininfo); + } else { + $this->link = $this->conn->_connectionID; + } + + return True; +} + + +#=================================== login functions etc.. +function sayinmylang($str){ + $res=$this->lang[$this->currentlanguage][$str]; + if(!$res) $res="($str:language error, not defined ".$this->information(1,True).")"; + # $res="language error: ($str) is not defined in currentlanguage of:(".$this->currentlanguage.")
please define \$this->lang['".$this->currentlanguage."']['".$str."']=\"........\"; in
language/".$this->currentlanguage.".php
"; + return $res; +} + +function setLanguage($lang,$quite=false){ + $this->requireAdmin(); + $file="templates/$this->template/$lang/template_$lang.html"; + if(!file_exists($file)) $this->errorTextExit("The selected localization file $file does not exist within this theme! Try another theme."); + $_SESSION['currentlanguage']=$lang; + $this->setConfigValue("defaultlanguage",$lang); + $this->loadLanguage(); + if(!$quite) $this->output.="
Language is set as: $lang
"; +} + +function debugecho($str,$inlevel,$directecho=True){ + + if($this->commandline){ + $lf="\n"; + if(is_array($str)) $str=print_r($str); + } else { + $lf="
"; + if(is_array($str)) $str=print_r2($str); + }; + + + if($this->debuglevel>=$inlevel) { + $out="$lf Debug*: Debuglevel: $this->debuglevel, $str $lf"; + if($directecho or $this->commandline) echo $out; + else $this->output.=$out; + } +} + +function debugecho2($str,$inlevel){ + if($this->debuglevel>=$inlevel) $this->output.="
Debug*: Debuglevel: $this->debuglevel, ".$str."
"; +} + +function loadLanguage(){ + + + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + + if(!$this->defaultlanguage) { + $this->output.="defaultlanguage is not defined.."; + } + + if(!$currentlanguage) $currentlanguage=$_SESSION['currentlanguage']; # load currentlanguage from session, if not set, it is defaultlanguage + if(!$currentlanguage){ + $currentlanguage=$this->defaultlanguage; + } + + if($currentlanguage=='') $currentlanguage='en'; + $this->currentlanguage=$currentlanguage; + + + include_once("language/".$this->currentlanguage.".php"); + + # load english lang if language file is not found + if(count($this->lang)==0) { + $this->echoln("default language file for ($this->defaultlanguage) is not found, english file loaded instead
+ Language files under language directory, under ehcp dir, you may write your own lang file..
+ default language is defined in config.php
"); + include_once("language/en.php"); + } + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + #$this->output.="loadlanguage is loaded.....
".print_r2($this->lang); +} + + +function debug() { + $ret.="
Debug:
dbhost:".$this->dbhost; + $ret.="
dbuser:".$this->dbusername; + #$ret.="
dbpass:".$this->dbpass; + $ret.="
dbname:".$this->dbname; + return $ret; +} + +function showConfig(){ + #$this->output.=print_r2($this->conf); +} + +function isPrivateIp($ip){ + if(is_array($ip)) { # test for multiple ips if an array + $ret=false; + foreach($ip as $i) + $ret=$ret or $this->isPrivateIp($i); + return $ret; + } + + return (substr($ip,0,7)=='192.168' or substr($ip,0,6)=='172.16' or substr($ip,0,3)=='10.'); +} + +function dynamicInfo(){ + global $quickdomains,$smallserverstats; # used in show() + if(!$this->checkConnection('Some dynamic info')) return false; + + $email=str_replace('@','((at))',$this->conf['adminemail']); # to prevent spam... + $ret.="Current Active user: Welcome $this->activeuser !
Admin email: $email
"; + + + if(!$this->isloggedin or $this->isadmin()) { + $ret.="Your dns/server ip is set as:".$this->conf['dnsip'].", if it is not detected/set correctly, please set it in your Settings

"; + $smallserverstats=$this->smallserverstats(); + $ret.=$smallserverstats; # this may be disabled + } + + if(validateIpAddress($this->conf['dnsip'])===false) { + $this->warnings.="
Warning : Your dns/server ip syntax is wrong.. you must fix it.. example: 85.98.112.34 or alike b>
"; + } + + if($this->isPrivateIp($this->conf['dnsip'])) { + $this->warnings.="
Warning : Your dns/server ip seems your local/private ip (".$this->conf['dnsip']."). in order your server be accessible from outside, you should set it to your outside/real ip (your modem/router's ip)
"; + } + + if($this->isDemo) $this->warnings.="
This is demo mode, some operations such as change dns may not be available
"; + # $ret.=print_r2($this->userinfo); + + $quickdomains=''; + $doms=$this->getMyDomains(""); + if(count($doms)<=10 and is_array($doms)){ + $quickdomains="Quickselect: "; + foreach($doms as $d) $quickdomains.="".$d['domainname']." "; + } + + + return $ret; +} + +function dynamicInfo2(){ + global $quickdomains,$smallserverstats,$ehcpversion; # used in show() + if(!$this->checkConnection('Some dynamic info')) return false; + + $email=str_replace('@','((at))',$this->conf['adminemail']); # to prevent spam... + $ret.="Admin:$email
"; + + + $ret.="Users:".$this->recordcount($this->conf['logintable']['tablename'],''). + ",Domains:".$this->recordcount($this->conf['domainstable']['tablename'],''). + ",Ftpusers:".$this->recordcount($this->conf['ftpuserstable']['tablename'],''). + ",Emails:".$this->recordcount($this->conf['emailuserstable']['tablename'],''). + "
Version: $ehcpversion
"; + + return $ret; +} + +function debuginfo(){ # this is debug info for developer, me ! + + if($this->debuglevel==0) return; + + #if($this->clientip<>'127.0.0.1' and $this->conf['adminemail']<>'bvidinli@gmail.com' and $this->clientip<>'78.187.86.112') return false; + $ret=print_r2($this->queries).$this->clientip; + return $ret; +} + + +function getDomainInfo($domainname, $checkIfExists = false){ + $ret=$this->query("select * from ".$this->conf['domainstable']['tablename']." where domainname='$domainname'"); + if($checkIfExists && (!is_array($ret) || count($ret) == 0 || $ret == false)){ + return false; + } + $ret=$ret[0]; + + + list($ftpserver)=explode(',',$ret['webserverips']); + if($ftpserver=='') $ftpserver='localhost'; + $ret['ftpserver']=$ftpserver; + if($ret['webserverips']=='') $ret['webserverips']='localhost'; + if($ret['dnsserverips']=='') $ret['dnsserverips']='localhost'; + + return $ret; +} + +function navigation_bar(){ + if($this->selecteddomain) { + + if(!$this->domaininfo) $this->domaininfo=$this->getDomainInfo($this->selecteddomain); + $domaininfo=$this->domaininfo; + if($domaininfo['reseller']<>$this->activeuser and $this->isadmin()) $warning="This domain belongs to (".$domaininfo['reseller'].") reseller, go to resellers page for details
"; // z7 mod + + if (($domaininfo['diskquotaused']>$domaininfo['diskquota']) && ($domaininfo['diskquota']>0)) $quotaWarning=$this->sayinmylang("You have exceeded your quota");else $quotaWarning=""; + + if(($domaininfo['webserverips']=='') or ($domaininfo['webserverips']=='localhost')) $webserverips_str=''; + else $webserverips_str=" - Webserverips:".$domaininfo['webserverips']; + + if($domaininfo['status']=='passive') $pass="This domain is passive click here to activate"; + + $ret="$warning
".$this->sayinmylang("Panel Home")." - ".$this->sayinmylang("Domain Home")." - ".$this->sayinmylang("Domains")." -> ".$this->sayinmylang("Selected Domain").": $this->selecteddomain selecteddomain> - Disk Quota: [".$domaininfo['diskquotaused']."MB / ".$domaininfo['diskquota']."MB] (update quotainfo)".$quotaWarning.$webserverips_str." $pass
"; + } elseif ($this->is_email_user()) { + + } else $ret='(No domain is selected yet)
'; + + return $ret; +} + +function failedlogins(){ + global $mark; + $this->getVariable(array('mark')); + if($mark<>'') { + $this->executeQuery("update log set notified='yes' where panelusername='$this->activeuser' and (notified is null or notified='')"); + $this->output.="Marked all read ($mark)"; + } + + $this->listTable('','logtable',"panelusername='$this->activeuser' and (notified is null or notified='')"); + $this->output.="Mark all read"; + + + +} + +function check_failed_logins(){ + $s=$this->recordcount('log',"panelusername='$this->activeuser' and (notified is null or notified='')"); + if($s>0) return "

You have failed login attempts, click here for more info


"; +} + +function show($templatefile1='') { + global $commandline,$output,$quickdomains,$ehcpversion; + $this->output.=$output.$this->debuginfo(); + $dynamicInfo=$this->dynamicInfo(); + $dynamicInfo2=$this->dynamicInfo2(); + + $paneluserinfo=$this->getPanelUserInfo(); + $theme_color = $paneluserinfo["theme_color"]; + $theme_contrast = $paneluserinfo["theme_contrast"]; + + // Domain selected js variable for use in scripts + if(isset($this->selecteddomain) && !empty($this->selecteddomain)){ + $jsOnDomainSelected = 'var domainSelected = true; var selectedDomainName = "' . $this->selecteddomain . '";'; + }else{ + $jsOnDomainSelected = 'var domainSelected = false; var selectedDomainName = "";'; + } + + // Theme color and contrast settings + if(empty($theme_color)){ + $theme_color = "#16ff0f"; + } + if(empty($theme_contrast)){ + $theme_contrast = 'light'; + } + + $theme_color_js = 'var defaultColor = \'' . $theme_color . '\'; var contrastStyle = \'' . $theme_contrast . '\';'; + + // Build the javascript variables into {extra_js} header replacement variable + $extraJSForTheme = $jsOnDomainSelected . $theme_color_js; + $extraJSForTheme = ''; + + $extraJSForTheme .= ''; + $extraJSForTheme .= ''; + + // Add our global css here too + $extraJSForTheme .= ''; + + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."-".$point++,4); + + + #$this->output.="
".$this->conf['dnsip']."
"; + #$this->output.="deneme.... "; + + if($this->warnings<>'') { + if ($this->op=='warnings') { + $this->requireAdmin(); + $this->check_ehcp_version(); + $this->output.=$this->warnings; + } else { + if($this->isadmin()){ + $this->output.="
+ + + + +
+ You have general server warnings. Click here to view them.
"; + } + } + } + + if($commandline) { + echo "\nThis is commandline (show):
\n".$this->output."\n\n"; + return True; + } + + + + + $this->getVariable(array("ajax")); + + if($templatefile1<>'') { + $this->templatefile=$templatefile1; + } else { + if($this->isadmin()) $this->templatefile="template_admin"; + elseif($this->isreseller) $this->templatefile="template_reseller"; + elseif(strstr($this->activeuser,'@')) $this->templatefile="template_emailuser"; + else $this->templatefile="template_domainadmin"; + + if(!file_exists("templates/$this->template/$this->currentlanguage/".$this->templatefile.'_'.$this->currentlanguage.".html")) $this->templatefile="template"; + if(!file_exists("templates/$this->template/$this->currentlanguage/".$this->templatefile.'_'.$this->currentlanguage.".html")) { + echo "
Template file still not found: (templates/$this->template/$this->currentlanguage/".$this->templatefile.'_'.$this->currentlanguage.".html)
"; + } + + } + + /* + if($this->recordcount("html","id='$this->cerceve'")==0) { + $this->echoln("Template for this language ($this->currentlanguage) is not found. using English template instead.
You may add this in html table in ehcp db
"); + $this->cerceve="template_en"; + }*/ + + + $this->selecteddomainstr=$this->navigation_bar(); + #$this->debugecho("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."-".$point++." selecteddomainstr:".$this->selecteddomainstr,4,false); + + $stylefile="templates/".$this->template."/$this->currentlanguage/style.css"; + + + if($ajax) { + header("Content-Type: text/html; charset=ISO-8859-9"); + echo " + + + + + + ".$this->output.""; + } + else { + ////cerceveletyaz($this->output,$this->cerceve); + $templatedir='templates/'.$this->template.'/'.$this->currentlanguage; + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."-****".$point++,4); + + $ehcpversion1=$ehcpversion; + if($this->debuglevel>0) $ehcpversion1.="
Debuglevel: $this->debuglevel"; + $webserver=$this->miscconfig['webservertype']; + if($webserver=='') $webserver='apache2'; + + $this->templateEcho( // apply template and echo + $this->templatefile, + // bunlar sablonda kullanilacak tagler. + array('{webserver}','{domainname}','{domain}','{adminemail}',"{ehcpversion}","{ajaxscript}","{ajaxonload}","{username}","{logo}",'{myip}','{selecteddomain}','{quickdomains}','{banner}','{stylefile}','{templatedir}','{language}','{dynamicinfo}','{dynamicinfo2}','{template_color}','{extra_js}'), + // bunlar da tagler yerine konacak degiskenler. + array($webserver,$this->selecteddomain,$this->selecteddomain,$this->conf['adminemail'],$ehcpversion1,$this->ajaxscript,$this->ajaxonload,$this->activeuser,$this->logo,$this->conf['dnsip'],$this->selecteddomainstr,$quickdomains,$this->miscconfig['banner'],$stylefile,$templatedir, $this->currentlanguage,$dynamicInfo,$dynamicInfo2,$theme_color_js,$extraJSForTheme) + ); + #if(!$this->isDemo and ($this->conf['adminemail']=='bvidinli@gmail.com')) echo "query count: ".count($this->queries)."
".$this->debuginfo(); + } + +} + + +function templateEcho($template,$isaretler,$icerikler){ + + $isaret="{ickisim}"; + # $cerceve=$this->htmlekle2($cerceve); # code to read template from database, html table, used previously... can be used if you whish... + # burada ister dbden ister dosyadan okuma yapilabilir. binevi storage engine gibi... bunu ilerde dusuneyim,. + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."-".$point++,4); + +/* + $this->output.=print_r2($isaretler); + $this->output.=$icerikler['selecteddomainstr']; +*/ + + + $template=$this->loadTemplate($template); + + // THIS AFFECTS ALL OUTPUT... NEED TO REMEMBER THAT {domainname} which shows up in any apache file... dns file (maybe)... can never use equal operators unless we applied this change to the variable being compared + $output2=str_replace($isaret,$this->output,$template); // cerceve icinde isareti ara, isaret yerine simdiye kadarki outputu koy. + $output2=str_replace($isaretler,$icerikler,$output2); +/* + $isaretcount=count($isaretler); + for($i=0;$i<$isaretcount;$i++){ + $output2=str_replace($isaretler[$i],$icerikler[$i],$output2); + } +*/ + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."-".$point++,4); + echo $output2; # final output +} + +function cerceveletyaz4($output,$isaretler,$icerikler){ + # replace {likethis} tags, with values + + $isaretcount=count($isaretler); + for($i=0;$i<$isaretcount;$i++){ + $output=str_replace($isaretler[$i],$icerikler[$i],$output); + } + echo $output; +} + + + +function showoutput($header='',$bodyonload='') { + global $output; + $output.=$this->output; + header("Content-Type: text/html; charset=ISO-8859-9"); //ajax icin yazildi.. + + echo " + + + + + $header + + ".$output.""; +} + + +function help() { + $this->output.="This info is from ehcp.net site:
"; +} + + +function todolist(){ + $this->output.="This info is from ehcp.net site:
"; + + +} + + +//------------- securitycheck, login logout functions... + +function securitycheck() { + // check login and show login page if needed. set activeuser here. + global $kullaniciadi,$sifre,$isloggedin,$username,$password,$commandline; + #echo "securitycheck..."; + + + if($this->op=="dologin") $this->dologin(); + + $username=$_SESSION['loggedin_kullaniciadi']; + $isloggedin=$_SESSION['isloggedin']; + + if(((!$isloggedin) or ($username==''))and(!$commandline)){ + if(!empty($this->op) && $this->op != "logout" && $this->op != "dologin"){ + $_SESSION['opToGoTo'] = trim($this->op); + } + $this->loginform(); # this exits at the same time herein.. + }; + + # these are different variables, that may be used in legacy codes of ehcp. + $this->activeuser=$username; + $this->loggedin_kullaniciadi=$username; + $this->loggedin_username=$username; + $this->isloggedin=$isloggedin; + + // Check and see if we should redirect to another op after successful login only + $opToGoTo = $_SESSION['opToGoTo']; + if(!empty($opToGoTo)){ + unset($_SESSION['opToGoTo']); + header("Location: index.php?op=$opToGoTo"); + exit(); + } +} + +function showUnauthorized(){ + header('HTTP/1.0 401 Not Authorized'); + echo "

401 Not Authorized

"; + echo "You are not authorized to access this page."; + exit(); +} + +function fatalError($str){ + echo "Fatal Error: $str"; +} + +function fatalErrorExit($str){ + echo "ehcp Fatal Error: $str"; + exit(); +} + + +function loadTemplate($templatefile,$strict=True){ + + + $templateengine="file"; # currently templating done through files under templates directory. before, it was from db, but many web developers are confused with html in db.. so, i swithced to html files.. + $this->debugecho("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__." Templatefile:($templatefile)",4,True); + + if($templateengine=="file"){ + $file="templates/$this->template/$this->currentlanguage/".$templatefile."_".$this->currentlanguage.".html"; + $this->debugecho("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__."file:($file)",4,True); + + if(!file_exists($file)){ + if(!$strict) return ""; + + $err="Template file '$file' for this language ($this->currentlanguage) and template ($this->template) is not found. using English default template instead.
"; + $this->echoln($err); + $this->template='default'; + $file="templates/$this->template/en/".$templatefile."_en.html"; + if(!file_exists($file)){ + echo $err; + $this->fatalErrorExit("$file template file is not found... "); + } + } + + if($this->debuglevel>3) echo "file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__.'-template:'.$this->templatefile."-default:$this->defaultlanguage-current:$this->currentlanguage-session.cur:".$_SESSION['currentlanguage']."
"; + if($this->debuglevel>3) debug_backtrace2(); + + $ret=''; + $ret=@file_get_contents($file); + #echo "curr template: $this->template , temp file: $file
"; + if(($ret===false)and $strict) $this->fatalError("Template File: $file cannot be loaded... "); + } else { + $html=$this->htmlekle2($templatefile."_".$this->currentlanguage); + if($html=='') $html=$this->htmlekle2($templatefile."_en"); + + } + return $ret; +} + +function loginform(){ + if($this->debuglevel>3) echo "file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__.'-template:'.$this->templatefile."-default:$this->defaultlanguage-current:$this->currentlanguage-session.cur:".$_SESSION['currentlanguage']."
"; + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + $this->showexit('loginpage'); +} + +function doLoginEmailUser($username,$password){ + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + return $this->dologin2($username,$password,'','',$this->conf['emailuserstable']); +} + +function dologin(){ + global $kullaniciadi,$sifre,$isloggedin,$username,$password; + $this->getVariable(array("kullaniciadi","username","password"), true); + $username=strtolower($username); # reason: some panel users type in Admin and cannot do admin ops... + + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__,4); + + $this->checkTables(); # check tables for missing fields, once on each login + $this->check_ehcp_version(); + + + if(strstr($username,'@')) return $this->doLoginEmailUser($username,$password); + else return $this->dologin2($username,$password); +} + + + +function isPasswordOk($username,$password,$usernamefield='',$passwordfield='',$logintable1=''){ +# only does password comparison + if($logintable1=='') $logintable=$this->conf['logintable']; + else $logintable=$logintable1; + + if(!$usernamefield) $usernamefield=$logintable['usernamefield']; + if(!$passwordfield) $passwordfield=$logintable['passwordfield']; + if(!$usernamefield) $usernamefield='username'; + if(!$passwordfield) $passwordfield='password'; + + if ($logintable['passwordfunction']=='') { + $where="$usernamefield='$username' and '$password'=$passwordfield"; + } elseif($logintable['passwordfunction']=='encrypt'){ + $where="$usernamefield='$username' and ".$logintable['passwordfunction']."('$password','ehcp')=$passwordfield"; + } else { + $where="$usernamefield='$username' and ".$logintable['passwordfunction']."('$password')=$passwordfield"; + } + + $where.=" and status='".$this->status_active."'"; + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__.": $username,$password,$usernamefield,$passwordfield,$logintable, query where: ($where)
",4); + + $sayi=$this->recordcount($logintable['tablename'],$where); + if($sayi===false){ + $this->error_occured("dologin2"); + return false; + } + + if($sayi==0) { + return false; + } elseif($sayi>0) { + return True; + } +} + +function dologin2($username,$password,$usernamefield='',$passwordfield='',$logintable=''){ +# sets session values if password comparison succeeds.. + $this->debugecho2("file:".__FILE__.", Line:".__LINE__.", Function:".__FUNCTION__.": $username,$password,$usernamefield,$passwordfield,$logintable
",4); + + if($this->isPasswordOk($username,$password,$usernamefield,$passwordfield,$logintable)) { + $this->debugecho2("
logging in user....",2); + $_SESSION['loggedin_kullaniciadi'] = $username; + $_SESSION['activeuser'] = $username; + $_SESSION['loggedin_username'] = $username; + $_SESSION['isloggedin']=True; + + $this->isloggedin=True; + $this->loggedin_kullaniciadi=$username; + $this->loggedin_username=$username; + $this->activeuser=$username; + + // Set the FTP Path into session + $this->setFTPPathInSession(); + + $_SESSION['currentlanguage']=$this->defaultlanguage; + + + # load user config, and set default domain and other, if any.. + $this->userconfig=$this->loadConfigIntoArray("select * from misc where panelusername='$this->activeuser'"); + if($this->userconfig['defaultdomain']<>'' and $this->selecteddomain=='') { + $this->setselecteddomain($this->userconfig['defaultdomain']); + } + + $this->addDaemonOp('daemon_vps','vps_check_state','xx'); + + return True; + } else { + $this->debugecho2("
user/pass is not correct....",2); + $this->executeQuery("insert into log (tarih,panelusername,ip,log)values(now(),'$username','$this->clientip','Failed Login Attempt')"); + $userIP = $_SERVER['REMOTE_ADDR']; + $f2banDate = date("M d H:i:s"); + $this->log_to_file("log/ehcp_failed_authentication.log","$f2banDate EHCP authentication failed attemping to login as user $username from $userIP\n"); + return $this->errorText("Incorrect username or password."); + } + //echo "
dologin2 bitti..sayi:($sayi)"; +} + +function log_to_file($logFile,$logstr){ + /* Log Failed Authentication For Use with Fail2Ban ; by own3mall*/ + if(file_exists($logFile)) { + // Size check larger than 20MBs + if(filesize($logFile) >= 20971520){ + $newName = $logFile . "_" . date("d-m-Y_H:i:s"); + rename($logFile, $newName); + + // Create the new log file + $authLog = fopen($logFile, "x+"); + if($authLog){ + fclose($authLog); + } + chmod($logFile, 0644); + } + } else { + // Create the file + $authLog = fopen($logFile, "x+"); + if($authLog) { + fclose($authLog); + } + + chmod($logFile, 0644); + } + + // Get contents of Authentication Log and add a new entry + $fp=@fopen($logFile,'a'); + @fwrite($fp,$logstr); + @fclose($fp); +} + +function dologin3($tablo,$username,$password,$usernamefield,$passwordfield,$md5=''){ + // farkli tablodan user dogrulamaya izin verir... + # bu pek kullanilmiyor artik... ispasswordOk is goruyor... + if ($md5=='md5') { + $where="$usernamefield='$username' and md5('$password')=$passwordfield"; + } else { + $where="$usernamefield='$username' and '$password'=$passwordfield"; + } + + $sayi=$this->recordcount($tablo,$where); + if(!$sayi) return false; + + if($sayi==0) { + $this->output.="Wrong username/password.:
"; + return false; + } elseif($sayi>0) { + $_SESSION['loggedin_kullaniciadi'] = $username; + $_SESSION['isloggedin']=True; + $this->isloggedin=True; + return True; + } +} + + +function logout(){ + $this->logout2(); + header('Location: index.php'); +} + +function logout2(){ + $_SESSION['loggedin_kullaniciadi'] = ''; + $_SESSION['loggedin_username'] = ''; + $_SESSION['isloggedin']=false; + $_SESSION['FTP_HOME_PATH'] = ''; + $_SESSION['temp_id'] = ''; + + $this->isloggedin=false; + $this->loggedin_kullaniciadi=''; + $this->loggedin_username=''; + + session_unset(); + session_destroy(); + return True; +} + +//------------------ end of securitycheck functions + + +function checkInstall() { + // check if installed, and install if not. to be coded later. + if(!$this->checkinstall) return false; + $this->checkdaemon(); + if(!$this->isinstalled) $this->installehcp; + return True; +} + +function isinstalled(){ + //? to be coded later. + return True; +} + +function installehcp(){ + // to be coded later. + return True; +} + +function phpinfo(){ + $this->requireAdmin(); + $this->output.=phpinfo(); // may be disabled for security +} + +function getMyDomains($filt='',$orderBy=''){ + if($this->isadmin()) $filt=''; + else $filt="panelusername='$this->activeuser' or reseller='$this->activeuser'"; + + return $this->getDomains($filt, $orderBy); +} + + +function getDomains($filt='', $orderBy=''){ + $domtable=$this->conf['domainstable']['tablename']; + $q="select * from $domtable"; + if($filt<>'')$q.=" where $filt"; + if($orderBy<>'')$q.= " " . $orderBy; + #echo "$q\n"; + return $this->query($q); +} + +function getUserFTPAccounts($user, $filt=''){ + $domtable=$this->conf['ftpuserstable']['tablename']; + $q="select * from $domtable where panelusername='$user' and status IS NOT NULL"; + if($filt<>'')$q.=" $filt"; + #echo "$q\n"; + return $this->query($q); +} + + + +function getPanelUsers($filt=''){ + $domtable=$this->conf['paneluserstable']['tablename']; + $q="select * from $domtable"; + if($filt<>'')$q.=" where $filt"; + #echo "$q\n"; + return $this->query($q); +} + + + + +function getSubDomains($filt='', $orderBy=''){ + $subdomtable=$this->conf['subdomainstable']['tablename']; + $q="select * from $subdomtable"; + if($filt<>'')$q.=" where $filt"; + if($orderBy<>'')$q.=" " . $orderBy; + #echo "$q\n"; + return $this->query($q); +} + + +//=================================== below are functions for or related to daemon mode .. +// operation,add/delete, user/domainname, userpass etc.... 4 parameters. + +function checkPort($server, $port) { + $conn = @fsockopen($server, $port, $errno, $errstr, 2); + if ($conn) { + fclose($conn); + return True; + } + return false; +} + +function checkPort2($portno){ + if(!$this->checkPort('localhost',$portno)) $ret="Port $portno problem with your server."; + return $ret; +} + +function checkPorts(){ + $portstocheck=array(22,25,53,80,110,143); + foreach($portstocheck as $port) + $ret.=$this->checkPort2($port); + if($ret<>'') { + $this->infotoadminemail("Hi EHCP Admin,

There appears to be an error with the server configuration regarding ports!",'EHCP Services Ports Problem'); + } +} + +function updateDiskQuota($domainname=''){ # this function coded by deconectat + global $skipupdatediskquota; + if($skipupdatediskquota) { + echo "\n".__FUNCTION__.": not updateing disk quota, because $skipupdatediskquota variable is set. \n"; + return; + } + + $this->requireCommandLine(__FUNCTION__); + $q="select id,homedir,domainname from domains"; + if($domainname<>'') $q.=" where domainname='$domainname'"; + + $res=$this->query($q); + echo "Starting ".__FUNCTION__."\n"; + foreach($res as $dom){ + $quota = $this->executeProg3("/usr/bin/nice -n 19 du -ms ".$dom['homedir']); # -ms: meausre MB + #echo "\n---------------------\nQuota info: $quota \n---------------\n"; + $quota = explode ("\t", $quota); + $quotaused=trim($quota[0]); + if($quotaused=='') $quotaused='0'; + echo "\nUpdated disk quota: ".$dom['domainname'].":$quotaused | ".$dom['homedir']."\n"; + $this->executeQuery("update domains set diskquotaused=$quotaused where id=".$dom['id']); + } + $this->checkOverDiskQuota(); + echo "\nfinished ".__FUNCTION__."\n"; + return True; +} + +function checkOverDiskQuota(){ # coded by deconectat, modified by ehcpdeveloper + # update normal quota + $this->executeQuery("update domains set diskquotaovernotified=0,status='active' where diskquota>=diskquotaused and status='overquota' "); + + # make passive, domains with high quota and who had been notified, and notify them of passify + # panel admin is able to set type of action for over-quota domains, admain may just warn them, or disable domains automatically. + # this may cause problem on some systems if updateDiskQuota calcluates disk quota wrong using du system command... so i left an option to disable this by admin.. default for turnoffoverquotadomains is disabled for now. + + if($this->miscconfig['turnoffoverquotadomains']<>''){ + $this->executeQuery("update domains set status='overquota' where DATEDIFF(curdate(),diskquotaoversince)>graceperiod and diskquotaovernotified=1"); + $this->syncDomains(); + $warn="Your site is disabled. Please contact your provider"; + $warn2="Your site will be disabled"; + } else { + $warn=""; + $warn2="Please solve this"; + } + $footer="\nSent from your panel, Easy Hosting Control Panel (ehcpforce.tk), url:http://".$this->dnsip."\n"; + + # warn people with high quota, and who were notified before.. + $res=$this->query("select * from domains where DATEDIFF(curdate(),diskquotaoversince)>graceperiod and diskquotaovernotified=1"); + if($res) + foreach($res as $dom){ + $this->infoEmailToUserandAdmin($dom['email'],"Domain ".$dom['domainname']." is over quota!","Panelusername:".$dom['panelusername'].",Domain: ".$dom['domainname']." is over quota! You are using ".$dom['diskquotaused']."MB of your ".$dom['diskquota']."MB quota. $warn . $footer",false); + } + + + # warn people with high quota + $res=$this->query("select d.domainname,d.diskquotaused,d.diskquota,d.graceperiod,p.email,p.panelusername from domains d,panelusers p where d.diskquota0 and d.diskquotaovernotified=0 and d.panelusername=p.panelusername"); + if($res) + foreach($res as $dom){ + $this->infoEmailToUserandAdmin($dom['email'],"Domain ".$dom['domainname']." is over quota!","Panelusername:".$dom['panelusername'].",Domain: ".$dom['domainname']." is over quota! You are using ".$dom['diskquotaused']."MB of your ".$dom['diskquota']."MB quota. $warn2 in ".$dom['graceperiod']." days. $footer",false); + $this->executeQuery("update domains set diskquotaovernotified=1, diskquotaoversince=CURDATE() where domainname='".$dom['domainname']."'"); + } +} + + +function securedelete($files,$serverip){ + // to be able to securely delete files. to prevent accidental deletion of crucial data. + // once, i deleted some ;) + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + if(strpos($files,'..')!==false) return $this->errorText("Deleting the following files is forbidden: ($files)",True); + + $nodelete=array('',"/","/var/www",$this->ehcpdir,$this->vhostsdir,"/bin","/boot","/cdrom","/dev","/ehcp","/etc","/home","/initrd","/initrd.img","/lib","/lost+found","/media","/mnt","/opt","/proc","/root","/sbin","/srv","/sys","/tmp","/usr","/var","/vmlinuz","/web"); + foreach($nodelete as $dir) $nd3[]=$dir."/"; + if(in_array($files,$nodelete) or in_array($files,$nd3)) { + return $this->errorText("Deleting the following files is forbidden: ($files)",True); + } + + $nodelete2=array("/bin","/boot","/cdrom","/dev","/ehcp","/etc","/home","/initrd","/initrd.img","/lib","/lost+found","/media","/mnt","/opt","/proc","/root","/sbin","/srv","/sys","/tmp","/usr","/vmlinuz","/web"); + foreach($nodelete2 as $dir) $nd4[]=$dir."/"; + + foreach($nodelete2 as $dir){ + $len=strlen($dir); + $sub=substr($files,0,$len); + if(strstr($files,"/etc/vsftpd_user_conf/")) continue ; # except for vsftpd_user_conf + //$this->echoln("checked for delete: substr: $sub, dir:$dir "); + + if($sub==$dir){ + return $this->errorText("Deleting the following files is forbidden: ($files)",True);// this function already returns false... so, only one line of code... + } + } + + foreach($nd4 as $dir){ + $len=strlen($dir); + $sub=substr($files,0,$len); + //$this->echoln("checked for delete: substr: $sub, dir:$dir "); + if(strstr($files,"/etc/vsftpd_user_conf/")) continue ; # except for vsftpd_user_conf + + if($sub==$dir){ + return $this->errorText("Deleting the following files is forbidden: ($files)",True); + } + } + + + $this->echoln("checks complete.. removing files: $files"); + + $cmds=array(); + $cmds[]="rm -rvf $files"; + if(trim($serverip)=='') $serverip='localhost'; + + return $this->execute_server_commands($serverip,$cmds); +} + +function syncFtp(){ + // Only creates structure for custom FTP accounts with the homedir not empty check. + $this->requireCommandLine(__FUNCTION__); + passthru2("mkdir -p /etc/vsftpd_user_conf"); + + $rs = $this->conn->Execute("select * from ".$this->conf['ftpuserstable']['tablename']. " where homedir<>''"); + if ($rs) { # this part is only necessary with vsftpd, # prepares non-standard home dir, + echo "\n==========================================================================================\n"; + while (!$rs->EOF) { + $homedir=$rs->fields['homedir']; + $ftpusername=$rs->fields['ftpusername']; + $panelusername=$rs->fields['panelusername']; + if(!file_exists($homedir)){ + passthru2("mkdir -p $homedir"); + passthru2("chown -Rf $this->ftpowner $homedir"); + } + writeoutput2("/etc/vsftpd_user_conf/$ftpusername","local_root=$homedir",'w'); + $rs->MoveNext(); + } + } + return True; +} + +function handlePasswordProtectedDirs(){ + $this->requireCommandLine(__FUNCTION__); + + // Get all password protected directories from the database and create what we need to make it work! + $rs = $this->conn->Execute("select * from ".$this->conf['pwd_dirs_table']['tablename']); + if ($rs) { + echo "\n==========================================================================================\n"; + + while (!$rs->EOF) { + $id = $rs->fields['id']; + $domainname=$rs->fields['domainname']; + $domainpath=$rs->fields['domainpath']; + $protected_dir=$rs->fields['protected_dir']; + $username=$rs->fields['username']; + $password=$rs->fields['password']; + $conf = ''; + + // Check to make sure the domainpath exists first... if it doesn't, we shouldn't do anything! + if(file_exists($domainpath)){ + // Create the password protected directory if it doesn't yet exist + $protectedDirPath = $domainpath . "httpdocs/" . $protected_dir; + if(!file_exists($protectedDirPath)){ + mkdir($protectedDirPath, 0755, true); + } + + // Get htaccess path + $htaccessPath = $protectedDirPath . "/.htaccess"; + + // Get authentication file path + $authPath = $domainpath . $id; + + // Create authentication file + $buildAuthFileCommand = "htpasswd -b -c '" . $authPath . "' '" . $username . "' '" . $password . "'"; + + passthru2($buildAuthFileCommand, true, true); + + // Make sure perms are correct by using bash... + passthru2("chown -R " . $this->wwwuser . ":" . $this->wwwgroup . " " . $protectedDirPath, true, true); + passthru2("chmod 644 $htaccessPath", true, true); + passthru2("chown " . $this->wwwuser . ":" . $this->wwwgroup . " " . $authPath, true, true); + passthru2("chmod 644 $authPath", true, true); + } + + $rs->MoveNext(); + } + + } +} + +function handleResetSitesEnabledDefault(){ + $this->requireCommandLine(__FUNCTION__); + + if($this->miscconfig['webservertype'] == "nginx"){ + if($this->miscconfig['webservermode'] == "sslonly"){ + passthru2("cp $this->ehcpdir/etc/nginx_sslonly/default.nginx /etc/nginx/sites-enabled/default", true, true); + }else if($this->miscconfig['webservermode'] == "ssl"){ + passthru2("cp $this->ehcpdir/etc/nginx_ssl/default.nginx /etc/nginx/sites-enabled/default", true, true); + }else{ + passthru2("cp $this->ehcpdir/etc/nginx_nonssl/default.nginx /etc/nginx/sites-enabled/default", true, true); + } + }else{ + if($this->miscconfig['webservermode'] == "sslonly"){ + passthru2("cp $this->ehcpdir/etc/apache2_sslonly/fork/default /etc/apache2/sites-enabled/default", true, true); + }else if($this->miscconfig['webservermode'] == "ssl"){ + passthru2("cp $this->ehcpdir/etc/apache2_ssl/fork/default /etc/apache2/sites-enabled/default", true, true); + }else{ + passthru2("cp $this->ehcpdir/etc/apache2/default /etc/apache2/sites-enabled/default", true, true); + } + } + + return true; +} + +function handleResetMainWebServerConf(){ + $this->requireCommandLine(__FUNCTION__); + + if($this->miscconfig['webservertype'] == "nginx"){ + if($this->miscconfig['webservermode'] == "sslonly"){ + passthru2("cp $this->ehcpdir/etc/nginx_sslonly/nginx.conf /etc/nginx/nginx.conf", true, true); + }else if($this->miscconfig['webservermode'] == "ssl"){ + passthru2("cp $this->ehcpdir/etc/nginx_ssl/nginx.conf /etc/nginx/nginx.conf", true, true); + }else{ + passthru2("cp $this->ehcpdir/etc/nginx_nonssl/nginx.conf /etc/nginx/nginx.conf", true, true); + } + + // Update the variables + $this->updateNginxConfVariablesInFile(); + }else{ + if(file_exists("/etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE")){ + passthru2("cp /etc/apache2/apache2.conf.bk_used_for_EHCP_DO_NOT_DELETE /etc/apache2/apache2.conf", true, true); + } + } + + return true; +} + +function updateNginxConfVariablesInFile(){ + $this->requireCommandLine(__FUNCTION__); + + $nginxContents = file_get_contents("/etc/nginx/nginx.conf"); + $nginxContents = str_replace(array('{wwwuser}','{wwwgroup}'),array($this->wwwuser,$this->wwwgroup),$nginxContents); + file_put_contents("/etc/nginx/nginx.conf", $nginxContents); +} + +function handleCustomSSLCertsForDomains(){ + $this->requireCommandLine(__FUNCTION__); + + // Get all domains using custom ssl settings + $rs = $this->conn->Execute("select * from " . $this->conf['domainstable']['tablename'] . " WHERE ssl_cert IS NOT NULL AND ssl_cert_key IS NOT NULL"); + if ($rs) { + echo "\n==========================================================================================\n"; + + while (!$rs->EOF) { + $domainname=$rs->fields['domainname']; + $homedir=$rs->fields['homedir']; + $ssl_cert = $rs->fields['ssl_cert']; + $ssl_key = $rs->fields['ssl_cert_key']; + $ssl_chain = $rs->fields['ssl_cert_chain']; + $dirUsedForSSL= $homedir . "/phptmpdir/"; + $sslCertFile= $dirUsedForSSL . "server.crt"; + $sslCertKeyFile= $dirUsedForSSL . "server.key"; + $sslCertChainFile= $dirUsedForSSL . "chain.crt"; + $sslCertMixedFile= $dirUsedForSSL . "mixed.crt"; + + // Check to make sure the domainpath exists first... if it doesn't, we shouldn't do anything! + if(file_exists($dirUsedForSSL)){ + + // Write cert files + if(!empty($ssl_cert)){ + writeoutput2($sslCertFile, $ssl_cert, "w+"); + } + + if(!empty($ssl_key)){ + writeoutput2($sslCertKeyFile, $ssl_key, "w+"); + } + + if(!empty($ssl_chain)){ + writeoutput2($sslCertChainFile, $ssl_chain, "w+"); + }else{ + // Erase the file because we don't want it anymore + $this->bashDelete($sslCertChainFile); + $this->bashDelete($sslCertMixedFile); + } + + if(file_exists($sslCertFile) && file_exists($sslCertChainFile)){ + // For nginx + passthru2("cat $sslCertFile $sslCertChainFile > $sslCertMixedFile", true, true); + } + + // Make sure perms are correct by using bash... + if(file_exists($sslCertFile)){ + passthru2("chown root:root " . $sslCertFile, true, true); + passthru2("chmod 755 " . $sslCertFile, true, true); + } + + if(file_exists($sslCertKeyFile)){ + passthru2("chown root:root " . $sslCertKeyFile, true, true); + passthru2("chmod 755 " . $sslCertKeyFile, true, true); + } + + if(file_exists($sslCertChainFile)){ + passthru2("chown root:root " . $sslCertChainFile, true, true); + passthru2("chmod 755 " . $sslCertChainFile, true, true); + } + + if(file_exists($sslCertMixedFile)){ + passthru2("chown root:root " . $sslCertMixedFile, true, true); + passthru2("chmod 755 " . $sslCertMixedFile, true, true); + } + + } + + $rs->MoveNext(); + } + + } + return True; +} + +function rebuildCrontab(){ + $this->requireCommandLine(__FUNCTION__); + + $createBackupScript = "/var/www/new/ehcp/scripts/ehcp_backup/create_ehcp_backup.sh"; + $uploadScript = "/var/www/new/ehcp/scripts/ehcp_backup/uploadBackup.sh"; + $ehcpCronFile = "/var/www/new/ehcp/ehcpcron.conf"; + passthru3("rm $ehcpCronFile"); + passthru3("touch $ehcpCronFile"); + + // Get remote backup operations list + $rs = $this->conn->Execute("select * from ".$this->conf['remote_backups_table']['tablename']); + if ($rs) { + + echo "\n==========================================================================================\n"; + while (!$rs->EOF) { + $dayofweek=$rs->fields['dayofweek']; + $time=$rs->fields['time']; + $transfer_method=$rs->fields['transfer_method']; + $transfer_host=$rs->fields['transfer_host']; + $transfer_port=$rs->fields['transfer_port']; + $transfer_login=$rs->fields['transfer_login']; + $transfer_pass=$rs->fields['transfer_pass']; + $transfer_encrpytion_password=$rs->fields['encryption_pass']; + $name = $rs->fields['name']; + + // Append server IP address to name to ensure unique backup file names from multiple servers (if there are any) + $name = $this->getIPAsStringNoPeriods($this->singleserverip) . "_" . $name; + + $backupScriptCommand = 'echo "0 ' . $time . ' * * ' . $dayofweek . ' ' . $createBackupScript . ' ' . $name . '" >> ' . $ehcpCronFile; + $timeInOneHour = ($time + 1); + $uploadScriptCommand = 'echo "0 ' . $timeInOneHour . ' * * ' . $dayofweek . ' ' . $uploadScript . ' ' . $transfer_method . ' \'' . $transfer_login . '\' \'' . $transfer_pass . '\' ' . $transfer_host . ' ' . $transfer_port . ' \'' . $transfer_encrpytion_password . '\'" >> ' . $ehcpCronFile; + + passthru2($backupScriptCommand, true, true); + passthru2($uploadScriptCommand, true, true); + $rs->MoveNext(); + } + + } + + // Get crontabs added by user: + $rs = $this->conn->Execute("select * from ".$this->conf['cronjobs_table']['tablename']); + if ($rs) { + + echo "\n==========================================================================================\n"; + while (!$rs->EOF) { + $dayofweek=$rs->fields['dayofweek']; + $time=$rs->fields['time']; + $command=$rs->fields['script']; + + $cronJobCommand = 'echo "0 ' . $time . ' * * ' . $dayofweek . ' ' . $command . '" >> ' . $ehcpCronFile; + passthru2($cronJobCommand, true, true); + $rs->MoveNext(); + } + + } + passthru3("/var/www/new/ehcp/handleCronjobs.sh $ehcpCronFile"); + return True; +} + +function getIPAsStringNoPeriods($ip){ + $str = ""; + if(!empty($ip)){ + if(stripos($ip, ".") != false){ + $ip = str_replace(".", "_", $ip); + $str .= $ip; + } + } + + return $str; +} + +function daemonftp($action,$info,$info2,$info3=''){ + + + $this->requireCommandLine(__FUNCTION__); + switch($action){ + case "delete": // deleting an ftp account + $this->securedelete($info,$info3); + return True; + break; + case 'add': + passthru2("mkdir -p ".$info); + passthru2("chown -Rf $this->ftpowner $info"); + $this->syncFtp(); + return True; + break; + + case 'multiserver_add': + $this->commands=array(); + $this->commands[]="mkdir -p $info"; + $this->commands[]="chown -Rf $this->ftpowner $info"; + $this->execute_server_commands($info2,$this->commands); + $this->commands=array(); # make sure it is empty. + return True; + break; + + case $this->status_passive: // changing status to passive + passthru2("chown nobody:nogroup -Rf ".$info); + passthru2("chmod og-rw -Rf ".$info); + return True; + break; + case $this->status_active: + passthru2("chown $this->ftpowner -Rf $info"); + passthru2("chmod a+r -Rf ".$info); + return True; + break; + + + } +} + + +function add_daemon_op($named_params){ + $this->debugecho(__FUNCTION__.": sending info to daemon (".$named_params['op'].":".$named_params['action'].")",1,false); + $this->debugecho($named_params,3,false); + + + $ret=$this->executeQuery("insert into operations (op,user,ip,action,info,info2,info3,tarih) values ('".$named_params['op']."','$this->activeuser','$this->clientip','".$named_params['action']."','".$named_params['info']."','".$named_params['info2']."','".$named_params['info3']."',now())",' sending info to daemon ('.$opname.')'); + # $ret=$this->conn->AutoExecute('operations',$named_params,'INSERT'); # this does not work. + + #$this->debugecho($this->queries,3,false); + return $ret; + + #return $this->executeQuery("insert into operations (op,action,info,info2,info3,tarih) values ('$op','$action','$info','$info2','$info3','')",' sending info to daemon ('.$opname.')'); +} + +function addDaemonOp($op,$action,$info,$info2='',$opname=''){ + return $this->executeQuery("insert into operations (op,user,ip,action,info,info2,tarih) values ('$op','$this->activeuser','$this->clientip','$action','$info','$info2',NOW())",' sending info to daemon ('.$opname.')'); +} + +function check_remote_ssh_connection($server){ + return True; # to be coded later +} + +function daemon_backup_domain($info){ + $this->requireCommandLine(__FUNCTION__); + + $domaininfo=$this->domaininfo=$this->getDomainInfo($info); + echo __FUNCTION__." basliyor... for $info".print_r($domaininfo); + $backupbasedir="/var/www/new/backups"; + @mkdir($backupbasedir); + chdir($backupbasedir); + + $where=$domaininfo['homedir'].'/httpdocs'; + $filename="$backupbasedir/$info-backup-".date('Y-m-d_H-i-s').'_'.rand(1,1000).'_'.rand(1,1000).'.tgz'; + $files="$backupbasedir/$info/$info-backup-files.tgz"; + $mysql="$backupbasedir/$info/$info-backup-mysql.txt"; + @mkdir("$backupbasedir/$info"); + + $cmd="tar -zcvf $files $where"; + + $this->executeQuery("update backups set filename='$filename',status='backup started by daemon',date=now() where domainname='$info' and (filename is null or filename='' or status like '%backup started%')"); + passthru2($cmd); + $this->backup_databases("domainname='$info'",$mysql); + passthru2("tar -zcvf $filename $info"); # tar again files and mysql which are in dir of $domainname=$info + passthru2("rm -rf $backupbasedir/$info"); + + $this->executeQuery("update backups set filename='$filename',status='backup finished by daemon, ready to download',date=now() where domainname='$info' and filename='$filename'"); + chdir($this->ehcpdir); + return True; +} + +function daemondomain($action,$info,$info2='',$info3=''){// domain operations in daemon mode. + + /* + action: add or delete, what to do + info: domain to delete/add + info2: whatever info needed, such as user to which domain belongs, or changed: homedir of domain, that is: /var/www/vhosts/ftpusername/domain.com + */ + + $this->requireCommandLine(__FUNCTION__); + $base=$this->conf['vhosts']; + /* + domain path will be like: /var/www/vhosts/ftpusername/domain.com + /var/www/vhosts/ftpusername/domain.com will be stored as homedir in domains table, + one user will may have multiple domains with single ftp acount. + */ + + $info=$domainname=trim($info); # domainname + $info2=trim($info2); + $info3=trim($info3); + $homedir=$info2; + + $this->echoln2("(daemondomain) domain operation starts: ".$info.", homedir:".$homedir); + + echo "\n".__FUNCTION__.":action:($action),info:($info),info2:($info2),info3:($info3)\n"; + + switch($action){ + case "multiserver_add_domain": + $info3=trim($info3); + if($info3=='') { + echo "\n info3 is empt. cannot complete $action \n"; + return True; # actually should be false, left True during development stage. + } + + if(!$this->check_remote_ssh_connection($info3)) return false; # should be equivalent, but do not work: $this->check_remote_ssh_connection($info3) || return false; + + $this->commands=array(); + # all domain dirs should be setup here.. + $this->initialize_domain_files($homedir); + $this->commands[]="echo 'Under Construction-multi-server-ehcp' > $homedir/httpdocs/index.php"; + $this->execute_server_commands($info3,$this->commands); + $this->commands=array(); # ensure it is empty after our job finished. + + return True; + break; + + case "add": + # all domain dirs should be setup here.. + #$params=array('domainname'=>$domainname,'homedir'=>$homedir); + #$this->initializeDomainFiles($params); # done in syncdomains below. + $this->syncDomains('',$domainname); # only sync newly added domain. + return True; + break; + case "delete": + echo "deleting: $info \n"; + if($info3=='') { + $info3='localhost'; + } + + $this->commands=array(); + $this->commands[]="rm -Rvf $homedir"; + $this->commands[]="rm -Rvf ".$this->conf['namedbase'].'/'.$info; + $this->execute_server_commands($info3,$this->commands); + return True; + break; + + case 'addsubdomain': + # single caller in function addsubdomain: + # $success=$success && $this->add_daemon_op(array('op'=>'daemondomain','action'=>'addsubdomain','info'=>$subdomain,'info2'=>$domainname,'info3'=>$homedir)); + passthru2("mkdir -p $info3"); + + $index=$this->loadTemplate('defaultindexforsubdomains',False); + if(trim($index)==''){ + $index='
+

Subdomain Under Construction

+

EHCP Force Edition

+
'; + } + + if((!file_exists($info3."/index.html"))or(!file_exists($info3."/index.htm"))) $this->write_file_if_not_exists($info3."/index.php",$index); + + return True; + break; + + case "delsubdomain": + echo "deleting: $info \n"; + passthru2("rm -Rvf $homedir"); + return True; + break; + + default: echo "undefined action in ".__FUNCTION__.": $action";return false; + } +} + +function isOpThatOnlyNeedsToRunOnce($op){ + $op = strtolower($op); + $runOnce = false; + $manualListOfOpsThatRunOnce = array('updatehostsfile', 'rebuild_crontab', 'process_pwd_dirs', 'process_ssl_certs', 'fixapacheconfigssl', 'fixapacheconfigsslonly', 'fixapacheconfignonssl', 'update_ez_install'); + + // Allow ops that start with daemon to run more than once + if(startsWith($op, "sync") || in_array($op, $manualListOfOpsThatRunOnce)){ + $runOnce = true; + } + + return $runOnce; +} + +function runOpWrapper($op){ // normal operations + $this->requireCommandLine(__FUNCTION__); // run from commandline. + if($this->runOp(trim($op['op']))) { + echo "\ndaemon->runop success ** \n"; + $this->executeQuery("update operations set try=try+1,status='ok' where id=".$op['id']." limit 1",'update operations set status ok.'); + } else { // increase try count + $q="update operations set try=try+1,status='failed' where id=".$op['id']." limit 1"; + echo "\ndaemon->runop failure **** : $q\n"; + $this->executeQuery($q,' increasing try count'); + } +} + +function runOp2Wrapper($op){ // for daemon ops + $this->requireCommandLine(__FUNCTION__); // run from commandline. + if($this->runop2(trim($op['op']),$op['action'],$op['info'],$op['info2'],$op['info3'])) { + echo "\ndaemon->runop2 success ** \n"; + $this->executeQuery("update operations set try=try+1,status='ok' where id=".$op['id']." limit 1",' updating operations '); + } else { + $q="update operations set try=try+1,status='failed' where id=".$op['id']." limit 1"; + echo "\ndaemon->op2 failure **** : $q\n"; + $this->executeQuery($q,' daemon increasing try count'); + } +} + +function daemon(){ + set_time_limit(0); # run forever... i hope... :) + $this->requireCommandLine(__FUNCTION__); // run from commandline. + $this->echoln2("Running daemon now.."); + $sleep_interval=10; + + $this->output.="Daemonized..".$this->myversion."\n__________________________\n\n"; + $i=1; + $this->updateWebstats(); + passthru2("chmod a+x /var/spool/postfix/var/run/saslauthd"); # for the bug/problem at http://www.ehcp.net/?q=node/149#comment-668 + @mkdir($this->ehcpdir.'/webmail');# make this if not present + @mkdir($this->ehcpdir.'/upload'); + $this->executeProg3("chmod a+w ".$this->ehcpdir.'/upload'); + $this->executeProg3("chmod a+w ".$this->ehcpdir.'/LocalServer.cnf'); + + while(True) {// run forever + // Set up the array to prevent duplicate operations from running + if(isset($opArray)){ + unset($opArray); + } + if(isset($daemonOpArray)){ + unset($daemonOpArray); + } + $opArray = array(); + $daemonOpArray = array(); + + + // Get daemon operations and execute them + print_r($rs=$this->query("select * from operations where ((status is null)or(status<>'ok' and status<>'duplicate'))and(try<2)and(info<>'')")); + if($rs){ + foreach($rs as $op){ + $operationName = trim($op['op']); + if($this->isOpThatOnlyNeedsToRunOnce($operationName)){ + if(!in_array($operationName, $daemonOpArray)){ + $this->output=''; + $this->runOp2Wrapper($op); + $daemonOpArray[] = $operationName; + }else{ + // The same operation has already been run in this loop, so don't run it again! + $q="update operations set try=try+1,status='duplicate' where id=".$op['id']." limit 1"; + echo "\ndaemon->op2 failure - duplicate operation in daemon loop. Ignoring operation " . $operationName . "... **** : $q\n"; + $this->executeQuery($q,' increasing try count'); + } + }else{ + $this->runOp2Wrapper($op); + } + } + echo $this->output; + } else { + //$this->error_occured("daemon main loop"); + if($rs===false)$this->tryReconnect(); + } + + + // Query the database and run operations (some daemon ops do not follow convention above) + print_r($rs=$this->query("select * from operations where ((status is null)or(status<>'ok' and status<>'duplicate'))and(try<3)and(info is null or info='') ORDER BY try ASC")); + + // Read list of operations and execture them. + if($rs){ + foreach($rs as $op){ + $operationName = trim($op['op']); + if($this->isOpThatOnlyNeedsToRunOnce($operationName)){ + #$this->executeQuery("update operations set try=try+1 where id=".$op['id']." limit 1",' updating operations, increasing try count '); + if(!in_array($operationName, $opArray)){ + $this->output=''; + $this->runOpWrapper($op); + echo $this->output; + $opArray[] = $operationName; + }else{ + // The same operation has already been run in this loop, so don't run it again! + $q="update operations set try=try+1,status='duplicate' where id=".$op['id']." limit 1"; + echo "\ndaemon->runop duplicate in daemon loop. Ignoring operation " . $operationName . "... **** : $q\n"; + $this->executeQuery($q,' increasing try count'); + } + }else{ + $this->runOpWrapper($op); + } + } + } else { + //$this->error_occured("daemon main loop2"); + if($rs===false)$this->tryReconnect(); + } + + // Write out which loop number we're at + echo "\nehcp ".$this->myversion."- Daemon loop number:$i Datetime:(".date_tarih().")\n-----------daemon suspended for $sleep_interval sec ---------pwd:(".getcwd().") \n"; + + // Do special operations + if($i % 5 == 0) { + # Every 5 loops + # if mysql goes away while daemon runs, this will refresh connection, so, operations can continue.. + $this->check_mysql_connection(); + } + + if($i % 50 == 0) { + # Every 50 loops + $this->checkDynDns(); + $this->daemonQuotaCheck(); + $this->call_func_in_module('Vps_Module','vps_check_state'); + } + + if($i % 200 == 0) { + # Every 200 Loops + $this->updateWebstats(); + + // Reset i to 0 so it's 1 when it runs again + $i = 0; + } + + // Sleep and increment loop + sleep($sleep_interval); + $i++; + // infinite loop... + } +} + +function getRemoteIPAddressFromSite($site){ + $str = ""; + if(isset($site) && !empty($site)){ + $str=trim(file_get_contents($site)); + // Look for an IP + if (preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $str, $ip_match)) { + $ip = $ip_match[0]; + if($this->isValidIP($ip) && !$this->isPrivateIp($ip)){ + $str = $ip; + } + } + } + return $str; +} + +function get_outside_ip(){ + $i = 0; + $ip = ""; + $sitesToCheck = array('http://grabip.tk', 'http://www.ipchicken.com/', 'http://www.tracemyip.org/', 'http://what-is-my-ip.net/?text'); + while(empty($ip) && $i < count($sitesToCheck)){ + $ip = $this->getRemoteIPAddressFromSite($sitesToCheck[$i]); + $i++; + } + + return $ip; +} + +function checkDynDns(){ + # this only works if current url is reachable on web, + #$url="http://checkip.dyndns.com"; + if($this->miscconfig['updatednsipfromweb']=='') return false; + + $str=$this->get_outside_ip(); + print __FUNCTION__.": dyndns information from web: ($str) \n"; + if($str==''){ + print "dyn dns information could not get from web ($url) \n"; + } else { + if($this->miscconfig['dnsip']<>$str){ + print "updating dns information according to one obtained from web as ($str)\n"; + # Update freedns.afraid.org: + if($this->miscconfig['freednsidentifier']<>'') { + # thanks to Kris Sallee http://sallee.us for contribution. + echo "updating freedns.afraid.org \n"; + $updateurl="https://freedns.afraid.org/dynamic/update.php?".$this->miscconfig['freednsidentifier']; + $update=file_get_contents($updateurl); + } + + # Update ehcp configs + $this->setConfigValue('dnsip',$str); + + // DNSIP Changed, so reload the config + $this->loadConfigWithDaemon(); + + $this->fixMailConfiguration(); # fix everything related to dns ip + } else { + print "Your Dynamic IP Address Has NOT Changed!\n"; + } + } + +} + +function daemonQuotaCheck(){ #updatequota + # checks quota at regular intervals, as defined in options/misc table + $this->requireCommandLine(__FUNCTION__); + + $lastupdate=trim($this->miscconfig['lastquotaupdate']); + $tarih=date_tarih(); + + if($lastupdate==''){ + $this->setConfigValue('lastquotaupdate',$tarih); + $this->loadConfig(); + } + + # calculte if last update is more than update interval + $fark=timediffhrs($this->miscconfig['lastquotaupdate'],$tarih); + if($fark>$miscconfig['quotaupdateinterval']){ + echo "\nQuota update needed...\n"; + $this->setConfigValue('lastquotaupdate',$tarih); + $this->loadConfig(); + $this->updateDiskQuota(); + } + return True; +} + +function tryReconnect(){ + $this->conn->close(); + print "trying re-connecting to mysql db..\n"; + if($this->connectTodb2()){ + print "\n\nreconnect to mysql successfull.\n"; + } else { + echo "\n\nehcp->cannot re-connect to mysql db...\n"; + exit(); + } +} + +function syncAll(){ + $this->requireCommandLine(__FUNCTION__); + + return ( + $this->syncDomains() and + $this->syncDns() + ); +} + +function checkdaemon(){ + # first, check if this is able to see root processes, + $res=executeprog("ps aux | grep root | grep -v grep | grep init "); + if (strlen($res)<10) { + $this->warnings.="it seems that this process is not able to see all processes, so, i cannot check if ehcp daemon is running...This does not mean an error, you only need to check your ehcp daemon manually"; + return false; # then + } + + // check if daemon is running. + $res=executeprog("ps aux | grep 'php index.php' | grep root | grep -v grep "); + if (strlen($res)>10) return True; + else { + $this->warnings.="
Attention!
ehcp daemon not running !
+Please run it from command/line by:
+ +sudo service ehcp start
+ +
"; + if(!$this->isloggedin) $this->infotoadminemail('Hi EHCP Admin,

The EHCP Daemon is not running!
'.$this->clientip,'EHCP Daemon Not Running On '.$this->clientip); # with if, reduce mail traffic.. + return false; + } +} + +function getMailServer(){ + if($this->singleserverip<>'') return $this->singleserverip; + else $this->output.="mail server is not defined"; + # serverplan oku, ona gore server adresini al.. +} + +function getDnsServer(){ + if($this->singleserverip<>'') return $this->singleserverip; + else $this->output.="dns server is not defined"; + # serverplan oku, ona gore server adresini al.. +} + +function getWebServer(){ + // Check for dynamic dns + $this->checkDynDns(); + + if($this->singleserverip<>'') { + $ret=$this->singleserverip; + + if($this->miscconfig['localip']<>'' and $this->miscconfig['dnsip']<>$this->miscconfig['localip']){ + $ret=$this->miscconfig['localip']; # Case webserver*: for private ip's that are used in local nets,(which are nat'ed by modem/router to outer world) otherwise, apache cannot bind to real ip, which is not assigned to server. + } + + if($this->miscconfig['activewebserverip']<>'') $ret=$this->miscconfig['activewebserverip']; + + return $ret; + } else { + $this->output.="web server is not defined"; + } + # serverplan oku, ona gore server adresini al.. +} + +function get_webserver_real_ip(){ + # get extrenal real ip of webserver. other function returns local ip of server for apache. + if($this->singleserverip<>'') { + return $this->singleserverip; + } else { + $this->output.="web server is not defined"; + } +} + + +function dnsZoneFiles($arr){// for daemon mode + # reverse dns burda zone dosyalarini olusturmali.. http://langfeldt.net/DNS-HOWTO/BIND-9/DNS-HOWTO-5.html + $this->requireCommandLine(__FUNCTION__); + $success=True; + + //$this->output.=print_r2($arr); + //print_r($arr); + $alanlar=alanlarial($this->conn,"domains"); + $replacealanlar=arrayop($alanlar,"strop"); # puts each field in {} + $replacealanlar[]='{customdns}'; + + // Get master DNS template + $dnstemplatefile=file_get_contents($this->dnszonetemplate); + + $mailserverip=$this->getMailServer(); + $dnsserverip=$this->getDnsServer(); + $webserverip=$this->get_webserver_real_ip(); # burada aslinda birden çok IP almasi lazim. + + if($this->isPrivateIp(array($mailserverip,$dnsserverip))){ + $mesaj="Hi EHCP Admin,

Your EHCP Server is using a private IP address for either the mail, DNS, or webserver configuration (maybe all of them): $mailserverip, $dnsserverip, $webserverip
This may cause problems!"; + $subject="DNS IP Problem on $dnsserverip"; + $this->infotoadminemail($mesaj,$subject); + } + + echo __FUNCTION__.": mailserverip: $mailserverip, dnsserverip: $dnsserverip, webserverip: $webserverip \n"; + + foreach($arr as $ar1){ + #farkli IP lerde host edilen domainler icin + list($webserver1)=explode(',',$ar1['webserverips']); # sadece ilk ip yi al, aslinda birden cok IP yi de alabilmesi lazim. + + # assign ip addresses for different services.. + if($ar1['serverip']<>''){ # single ip if hosted in a single place, + $mailip=$webip=$dnsip=$ar1['serverip']; + } else{ + $mailip=$mailserverip; + $dnsip=$dnsserverip; + $webip=($webserver1==''?$webserverip:$webserver1); #use IP from webserverips field of domains table, if not empty. + } + + $this->echoln2("yaziyor: ".$ar1["domainname"]." mailip/webip/dnsip : $mailip/$webip/$dnsip"); + + $dnstemp=$ar1['dnstemplate']; + if($dnstemp=='') $dnstemp=$dnstemplatefile; // read dns info from template file, if not written to db.. + $dnstemp=str_replace($replacealanlar,$ar1,$dnstemp);// replace domain fields, + + #$temp=str_replace(array('{serial}',"{ip}","{dnsemail}"),array(rand(1000,2000),$this->conf['dnsip'],$this->conf['dnsemail']),$temp); // replace serial,ip,dnsemail etc. + # if php bug occurs because of date, above line may be used... http://bugs.php.net/bug.php?id=44481 + + + # multiserver a gore ayarlanacak: {dnsip},{webip},{mailip} + # + + # these codes are for transition to a multi-server environment... will be implemented step by step.. + + // Pick serial number # by earnolmartin + if(!is_null($ar1["dnsmaster"])){ + // Will force it to pull updates because the master will have a larger serial number. + $serialNum = 1; + }else{ + $serialNum = rand(2,1000); + } + # end earnolmartin + + $dnstemp=str_replace(array('{mailip}','{dnsip}','{webip}','{serial}',"{ip}","{dnsemail}"),array($mailip,$dnsip,$webip,$serialNum,$this->conf['dnsip'],$this->conf['dnsemail']),$dnstemp); + + # lokalden erisenler icin ayri bir dns, dns icinde view olusturulabilir buraya bak: http://www.oreillynet.com/pub/a/oreilly/networking/news/views_0501.html + # amac: bir networkde server varsa, o network icinden erisenler icin bu bir local server dir. her desktop da ayri ayri hosts ayari girmek yerine, sunucu bunlara real degil, lokal ip doner. + # bu sayede, kucuk-orta isletmeler icin, sunucunun lokalden cevap vermesi saglanir.. veya dns icinde view destegi, birden cok konfigurasyon v.b... + # to translate Turkish comments, use google translate.. + + $dnstemplocal=str_replace(array('{mailip}','{dnsip}','{webip}','{serial}',"{ip}","{dnsemail}"),array($mailip,$dnsip,$webip,$serialNum,$this->conf['dnsip'],$this->conf['dnsemail']),$dnstemp); + + # $temp=str_replace(array('{serial}',"{ip}","{dnsemail}"),array(rand(1,1000),$this->conf['dnsip'],$this->conf['dnsemail']),$temp); // replace serial,ip,dnsemail etc. Ymds hata veriyordu iptal ettim. bu sorunla ilgilenilecek... + // verdigi hata: Fatal error: date(): Timezone database is corrupt - this should *never* happen! thats why i cannot use date in daemon mode... this seems a php bug.., for tr locale + + $zoneFile = $this->conf['namedbase'].'/'.$ar1["domainname"]; + + $success=$success and writeoutput2($zoneFile,$dnstemp,"w"); + + // Fix perms on the bind file + $this->fixBindFilePerms($zoneFile); + + // If slave domain, retransfer the zone , earnolmartin + if(!is_null($ar1["dnsmaster"])){ + passthru2("rndc retransfer " . $ar1["domainname"]); + } + + #$success=$success and writeoutput2($this->conf['namedbase'].'/'.$ar1["domainname"].".local",$dnstemplocal,"w"); # bu kisim henuz tamamlanmadi, yani lokal destegi.. + + } + return $success; +} + +function dnsNamedConfFile($arr){// for daemon mode + # $out="options { directory \''.$this->wwwbase."\";}"; + # reverse dns burda named.conf icine yazilmali.. http://langfeldt.net/DNS-HOWTO/BIND-9/DNS-HOWTO-5.html + + $this->requireCommandLine(__FUNCTION__); + foreach($arr as $ar){ + $ar['namedbase']=$this->conf['namedbase']; + $arr2[]=$ar; + } + # named files are located at namedbase directory, typically, /var/www/named/ + + $out.=$this->putArrayToStrDns($arr2); # for slave dns, we should use $dnsnamedconftemplate_slave if domain has dnsmaster field set. will code later. + $file=$this->conf['namedbase']."/named_ehcp.conf"; + echo "\n\nwriting namedfile: $file \n\n"; + $success = writeoutput2($file,$out,w); + + // Fix perms on the bind file + $this->fixBindFilePerms($file); + + return $success; +} + +function fixBindFilePerms($file){ + $success = setOwner($file, $this->binduser); + $success = $success && setPermissions($file, 0774); + return $success; +} + +function calculateAliasedDomains($doms,$exampledomain){ + + # convert alias names to regular domain names, so that dns zone files can be setup + # ex: changes www.dene.com to dene.com, xxx.com -> xxx.com, yyy.zzz.com -> zzz.com +/* + function domainname($alias){ + if(substr_count($alias,'.')<=1) return $alias; # xxx.com -> xxx.com + return substr($alias,strpos($alias,'.')); # yyy.zzz.com -> zzz.com + } +*/ + + $aliasedarr=array(); + foreach($doms as $dom){ + $aliases=$dom['aliases']; + if($aliases=='') continue; + $aliasarr=explode("\n",$aliases); + foreach($aliasarr as $alias) { + $alias=trim($alias); + if(substr_count($alias,'.')<=1) $newdom=$alias; # xxx.com -> xxx.com + else $newdom=substr($alias,strpos($alias,'.')+1); # yyy.zzz.com -> zzz.com + $newdom=trim($newdom); + if($newdom=='') continue; + if (!in_array($newdom,$aliasedarr,True)) $aliasedarr[]=$newdom; + } + } + + $aliasedarr2=array(); + + # construct domains array as if read from domains table, in fact, these are not read from domains table, but these are aliases. + # i added alias domains to dns, because dns should resolve this, for domains to work.. + + foreach($aliasedarr as $dom) { + $ex=$exampledomain; + $ex['id']=$ex['panelusername']=$ex['reseller']='aliasdomain'; + $ex['domainname']=$dom; + $aliasedarr2[]=$ex; + } + + return $aliasedarr2; +} + +function syncDns(){// for daemon mode + # dnsde serial ayari yapilmasi lazim. yoksa nanay... *** + + $this->requireCommandLine(__FUNCTION__); + + $arr=$this->getDomains(); + $exampledomain=$arr[0]; + $arr_aliaseddomains=$this->calculateAliasedDomains($arr,$exampledomain); + + # merge two array to one domains array: + # this array is like 0 => array('domainname'=>'xxx.com') + + foreach($arr_aliaseddomains as $aliasdomain){ + $found=false; + foreach($arr as $dom) if($aliasdomain['domainname']==$dom['domainname']) $found=True; + if(!$found) $arr[]=$aliasdomain; + } + + # put customdns info into zone files.. + $arr_customdns=$this->query("select * from ".$this->conf['customstable']['tablename']." where name='customdns' "); + $arr2=array(); + + foreach($arr as $dom) { # add customdns to array, + $customdnsvalue=''; + foreach($arr_customdns as $cust) { + if($cust['domainname']==$dom['domainname']) $customdnsvalue.=$cust['value']."\n"; # this loop prevents repetitive mysql query, thus faster execution. + } + $dom['customdns']=$customdnsvalue; + # will include domain aliases in dns too, to be able to catch those domains with dns + + + + $arr2[]=$dom; + } + + + echo "\n\nsyncdns working..: \n"; + if($this->debuglevel>0) print_r($arr2); + + if(($this->dnsZoneFiles($arr2)) and ($this->dnsNamedConfFile($arr2))) { + $this->output.="daemon->dns success (syncdns)\n"; + manageService("bind9", "reload"); + return True; + } + else return false; + +} + +function whitelist(){ + # this is a special function, that will be used in a dns project. not related directly to hosting or ehcp. just uses ehcp structure. + global $mod,$domainname,$domainler; + $this->getVariable(array('mod','domainname','domainler')); + + + switch($mod){ + case 'cocuklistele': + $this->listTable("", "domainstable2", $filter); + break; + + case 'cocukekle': + if(!$domainname){ + $inputparams=array( + array('domainname', 'lefttext'=>'Domain Name:')#, array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } else { + + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$domainname, + ) + ) + ) return false; + + + $this->output.="Dom ekleniyor:".$domainname; + $paneluserinfo=$this->getPanelUserInfo(); + $success=True; + + $sql="insert into domains (reseller,panelusername,domainname,homedir,status,serverip) values ('".$this->activeuser."','".$this->activeuser."','$domainname','','".$this->status_active."','7.7.7.7')"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,'DNS only domain was successfully added.','Failed to add domain ('.__FUNCTION__.')'); + + } + + break; + + case 'cocukeklebulk': + if(!$domainler){ + $inputparams=array(array('domainler','textarea')#, array('op','hidden','default'=>__FUNCTION__) + ); + $this->output.=inputform5($inputparams); + } else { + $domains=$this->strNewlineToArray($domainler); + $paneluserinfo=$this->getPanelUserInfo(); + + foreach($domains as $dom){ + if(trim($dom)=='') continue; + if(!$this->afterInputControls("adddomaintothispaneluser", + array( + "domainname"=>$dom, + ) + ) + ) continue ; + + + $this->output.="Dom ekleniyor: ($dom)"; + $success=True; + $sql="insert into domains (reseller,panelusername,domainname,homedir,status,serverip) values ('".$this->activeuser."','".$this->activeuser."','$dom','','".$this->status_active."','7.7.7.7')"; + $success=$success && $this->executeQuery($sql); + $success=$success && $this->addDaemonOp("syncdns",'','','','sync dns'); + $this->ok_err_text($success,'DNS only domain was successfully added.','Failed to add domain ('.__FUNCTION__.')'); + } + + } + + break; + + } + + $this->output.="Whitelist ($mod)
Home"; +} + +function requireCommandLine($func='',$echoinfo=false){ + if(!$this->commandline) { + return $this->errorTextExit("The command you requested works only from the commandline: $func"); + } + if($echoinfo) echo "\n$func: basliyor\n"; + $this->debugecho("Commandline: $func: basliyor\n",3); + +} + +function syncpostfix(){ + $this->output.="No need postfix sync. postfix already synced from db...
"; + return false; + /* + http://www.howtoforge.com/virtual_postfix_mysql_quota_courier + this document is a good place to go for postfix and related stuff + */ +} + +function userop(){ + global $action,$ftpusername,$mailusername,$panelusername,$id; + $this->getVariable(array("action","ftpusername","mailusername","panelusername","id")); + if(!$action) { + return $this->errorText(__FUNCTION__.": Error: Action was not provided."); + } + + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + $inClause = $this->generateMySQLInClause($userHasAccessToTheseChildrenUsers); + + switch($action){ + case "emailuserdelete": //*** bu yapilmadi henuz... tam olarak... + if($id==''){ + $this->output.="user id to delete not given.
"; + $success=false; + } else { + $sql = "delete from ".$this->conf['emailuserstable']['tablename']." where id='" . $id . "'"; + if(!$this->isadmin()){ + $sql .= " AND panelusername " . $inClause; + } + $success=$this->executeQuery($sql, ' email user delete'); + $this->ok_err_text($success,"Email account successfully deleted.",'Failed to delete email account.'); + } + $this->showSimilarFunctions('email'); + return $success; + + break; + + # ftp silerken aslında arayüzde dosyaların silinip silinmeyeceğini sorsa iyi olur. + case "ftpuserdelete"://*** sonra bakilacak... username ile beraber domain de kontrol edilmeli..where icinde + + $ftp=$this->query("select * from ".$this->conf['ftpuserstable']['tablename']." where ftpusername='$ftpusername'"); + if($ftp['domainname']<>'' and $ftp['type']<>''){ + $success=$this->errorText('This account has active domains or subdomains. Please delete domains and subdomains first.'); + } else { + $success=$this->deleteFtpUserDirect($ftpusername); + $this->ok_err_text($success,"Successfully deleted FTP account.","Failed to remove FTP account."); + } + $this->showSimilarFunctions('ftp'); + return $success; + break; + + default: return $this->errorText("userop: No action was provided."); + } +} + +function getMySqlDBAndUserInfo($id){ # by earnolmartin@gmail.com + $db=$this->query("select * from mysqldb where id='" . $id . "'"); + if(count($db) == 1){ + $finalResult = array(); + $dbname=$db[0]['dbname']; + $panelusername=$db[0]['panelusername']; + $mysqlDBUserInfo = $this->query("select * from ".$this->conf['mysqldbuserstable']['tablename']." where dbname='$dbname'"); + if(count($mysqlDBUserInfo) > 0){ + foreach($mysqlDBUserInfo as $info){ + $mysqlUserName=$info["dbusername"]; + $otherdbcount=$this->recordcount($this->conf['mysqldbuserstable']['tablename'],"dbusername='$mysqlUserName' and dbname<>'$dbname'"); + + $dbInfo["dbname"] = $dbname; + $dbInfo["mysqluser"] = $mysqlUserName; + $dbInfo["other_assoc_dbs"] = $otherdbcount; + $dbInfo["owned_by"] = $panelusername; + $finalResult[] = $dbInfo; + } + }else{ + $dbInfo["dbname"] = $dbname; + $dbInfo["mysqluser"] = ""; + $dbInfo["other_assoc_dbs"] = 0; + $dbInfo["owned_by"] = $panelusername; + $finalResult[] = $dbInfo; + } + + return $finalResult; + } + return false; +} + +function deleteDB($id){ + $db=$this->query("select * from mysqldb where id='" . $id . "'"); + $dbname=$db[0]['dbname']; + $panelusername=$db[0]['panelusername']; + $paneluserinfo=$this->getPanelUserInfo('',$panelusername); + $resellername=$paneluserinfo['reseller']; + + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + + if(!in_array($panelusername, $userHasAccessToTheseChildrenUsers) and !$this->isadmin()) { + return $this->errorText("Unable to delete database. Your account does not own this database!"); + } + + $this->output.="
deleting db $id : $dbname
"; + + $host=$db[0]['ip']; + $myserver=$this->getMysqlServer($host,True); # get myinfo for that host or default if no host specified.. + + + if(! ($mysqlconn = mysqli_connect($myserver['host'], $myserver['user'], $myserver['pass']))){ + return $this->errorText('Could not connect as '.$myserver['user'].' to server '.$myserver['host']); + } + + $this->output.= "Connected as user : ".$myserver['user']."
"; + if($this->executeQuery("drop database `$dbname`",'','',$mysqlconn)) $this->output.="Dropped database: $dbname
"; + else { + $this->output.="Error dropping db.. " . $this->getDBError(); + } + + + $success=True; + $success=$success && $s=$this->executeQuery("delete from ".$this->conf['mysqldbstable']['tablename']." where dbname='$dbname'",' delete db from ehcp db'); + + $q="select dbusername from ".$this->conf['mysqldbuserstable']['tablename']." where dbname='$dbname'"; + $s=$user1=$this->query($q); + if($s===false) { + $this->echoln('error getting db users list..'); + $success=false; + } + + $s=$this->executeQuery("use mysql",'','',$mysqlconn); + + if($s===false){ + $success=$this->errorText('Error Selecting Database'); + } + + // delete all users associated with the db. actually there may be only one user... but one user may be used to access more than one db... + foreach($user1 as $user){ + $user2=$user['dbusername']; + + $s=$this->executeQuery("delete from ".$this->conf['mysqldbuserstable']['tablename']." where dbusername='$user2' and dbname='$dbname'"); + if($s===false) { + $this->output.="Error Occured: ".$this->conn->ErrorMsg()."
"; + $success=false; + } else $this->output.="user $user2 : deleted from ehcp db
"; + + $otherdbcount=$this->recordcount($this->conf['mysqldbuserstable']['tablename'],"dbusername='$user2' and dbname<>'$dbname'"); + if($otherdbcount>0) continue; # if user has more databases that has access to, it is not dropped.. + + $s=$this->executeQuery("DELETE FROM `user` WHERE User = '$user2'",'','',$mysqlconn); + if($s===false) { + $this->output.="Error Occured: ". $this->getDBError() ."
"; + $success=false; + } else $this->output.="user $user2 : deleted user from mysql
"; + + + $s=$this->executeQuery("DELETE FROM `db` WHERE User = '$user2'",'','',$mysqlconn); + if($s===false) { + $this->output.="Error Occured: ". $this->getDBError() ."
"; + $success=false; + } else $this->output.="user $user2 : deleted user from mysql.db
"; + + + $s=$this->executeQuery("DELETE FROM `tables_priv` WHERE User = '$user2'",'','',$mysqlconn); + if($s===false) { + $this->output.="Error Occured: ". $this->getDBError() ."
"; + $success=false; + } else $this->output.="user $user2 : deleted user from mysql.tables_priv
"; + + + $s=$this->executeQuery("DELETE FROM `columns_priv` WHERE User = '$user2'",'','',$mysqlconn); + if($s===false) { + $this->output.="Error Occured: ". $this->getDBError() ."
"; + $success=false; + } else $this->output.="user $user2 : deleted user from mysql.columns_priv
"; + $this->executeQuery("flush privileges",'','',$mysqlconn); + + } + return $success; + +} + +function domainop(){ + global $domainname,$action,$dbusername,$dbuserpass,$dbname,$id,$confirm; + $this->getVariable(array("domainname","action","user","pass","dbname","id",'confirm')); + if($action=='') { + $this->output.="userop: action not given
";return false; + } + + $userHasAccessToTheseChildrenUsers = $this->getParentsAndChildren($this->activeuser); + $inClause = $this->generateMySQLInClause($userHasAccessToTheseChildrenUsers); + + switch($action){ + case "deletedb": + if($confirm==''){ + // Get DB Info + $databaseInfo = $this->getMySqlDBAndUserInfo($id); + + if(!is_array($databaseInfo) || count($databaseInfo) == 0){ + return $this->errorText("Database not found."); + } + + if(!in_array($databaseInfo[0]["owned_by"], $userHasAccessToTheseChildrenUsers)){ + return $this->errorText("This database is not owned by your account."); + } + + $selectedDBName = $databaseInfo[0]["dbname"]; + + $this->output.="
Are you sure you want to delete the following MySQL database: \"" . $selectedDBName . "\"?
"; + $message = ""; + + // Confirm this is what should happen + foreach($databaseInfo as $info){ + + if($info["other_assoc_dbs"] > 0){ + $message .= "
Note, the MySQL user \"" . $info["mysqluser"] . "\" associated with this database will NOT be deleted since it is associated with another MySQL database."; + }else{ + if($this->hasValueOrZero($info["mysqluser"])){ + $message .= "
Note, the MySQL user \"" . $info["mysqluser"] . "\" associated with this database WILL BE deleted since it is NOT associated with any other MySQL database."; + } + } + } + + $message .= "

Click here to delete.

"; + + $this->output .= $message; + + $success=false; + } else { + $success=$this->deleteDB($id); + $this->ok_err_text($success,'Database operations successful.','Database operations failed.'); + // yukardaki kodda, bircok success (basari) ile, her bir islemin sonucu ogrenilir. herhangi biri fail olsa, sonuc fail olur.. + } + break; + + case "listdb": + #$filter="panelusername='$this->activeuser'"; + $filter=$this->globalfilter; + if($this->selecteddomain) $filter=andle($filter,"domainname='$this->selecteddomain'"); + + $this->listTable("All mysql db's", 'mysqldbstable', $filter); + $this->output.="

"; + $this->listTable("All mysql db users", 'mysqldbuserstable', $filter); + $success=True; + break; + + default: $this->output.="domainop: unknown action given: $action
"; + } + $this->showSimilarFunctions('mysql'); + return $success; +}//function + +function redirect_domain(){ + global $domainname; + $this->redirecttourl("http://www.$domainname"); +} + +function redirecttourl($url){ + header("Location: $url"); + exit; +} + +function getMysqlServer($host='',$returndefault=False,$returnto=False){ + # choose a mysqlserver from server farm.. servers table..or return server info for a host + # this is written to go into multi-server concept.. Multi server is not complete yet for all server types, only mysql can be separate for customers. + global $serverip,$returntoop; + $this->getVariable(array('serverip','returntoop')); + + if($serverip<>'') { + $q="select * from ".$this->conf['serverstable']['tablename']." where ip='$serverip' and servertype='mysql'"; + $ret=$this->query($q); + $ret=$ret[0]; + $server=array('host'=>$ret['ip'],'user'=>'root','pass'=>$ret['password'],'defaultmysqlhostname'=>$ret['defaultmysqlhostname']); + $_SESSION['myserver']=$server; + $this->redirecttourl("?op=$returntoop"); + } + + $defaultmyserver=array('host'=>'localhost','user'=>$this->conf['mysqlrootuser'],'pass'=>$this->conf['mysqlrootpass']); + $sayi=$this->recordcount($this->conf['serverstable']['tablename'],"servertype='mysql' and upper(mandatory) in ('E','Y')"); # E=Y Evet=Yes # number of mandatoryservers.. + + $where2="servertype='mysql' and (mandatory in ('',null) or (upper(mandatory) not in ('E','Y')))"; + $sayi2=$this->recordcount($this->conf['serverstable']['tablename'],$where2); # number of servers, which are non-mandatory + + if($host=='' and !$returndefault and $sayi==0 and $sayi2>0){ # if there are some choises.. + $this->output.="Choose mysql server to use:"; + $q="select * from ".$this->conf['serverstable']['tablename']." where $where2"; + $servers=$this->query($q); + $this->output.=$this->listSelector($arr=$servers,$print=array('ip'),$link="?op=".__FUNCTION__."&returntoop=$returnto&serverip=",$linfield='ip'); + $this->showexit(); + + + } elseif ($host=='' and ($returndefault or $sayi==0)){# if no mandatory, take optional, or default localhost... + # belli bir host sorulmuyorsa, default gonder.. . + $server=$defaultmyserver; + } else { # choose for a specific host or mandatory one.. + if($host=='') $where="servertype='mysql' and upper(mandatory) in ('E','Y')"; + else $where="host='$host'"; + + $ret=$this->query("select * from ".$this->conf['serverstable']['tablename']." where $where"); + $ret=$ret[0]; + $server=array('host'=>$ret['ip'],'user'=>'root','pass'=>$ret['password'],'defaultmysqlhostname'=>$ret['defaultmysqlhostname']); + $this->echoln("Using mandatory mysql server at ".$server['host']); + } + return $server; +} + +function addMysqlDbtoUser(){ + global $domainname,$dbusername,$dbuserpass,$dbname,$id,$confirm; + $this->getVariable(array("domainname","dbusername","dbuserpass","dbname","id",'confirm')); + + if(!$this->beforeInputControls('adddb')) return false; + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $myserver=$_SESSION['myserver']; + if(!$myserver) $myserver=$this->getMysqlServer('',false,__FUNCTION__); # get mysql server info.. + $success=True; + + + $users=$this->query("select distinct dbusername from ".$this->conf['mysqldbuserstable']['tablename']." where panelusername='$this->activeuser'"); + if(count($users)==0){ + $this->output.="
You have not any db users yet.. so, use add mysql db link here"; + return false; + } + + if(!$dbusername) { + $this->output.="
Select User:".$this->listSelector($arr=$users,$print=array('dbusername'),$link="?op=".__FUNCTION__."&dbusername=",$linfield='dbusername'); + return false; + } + + + if(!$dbname){ + $inputparams=array( + array("dbname", 'lefttext'=>'Database Name'), + array('dbusername','hidden','value'=>$dbusername, 'lefttext'=>'Database Username'), + array('op','hidden','value'=>__FUNCTION__) + ); + + if($myserver['host']<>'localhost') { # if this is not local mysql server, the db user may not be localhost, so, ask that.. + $dbuserhost=$myserver['defaultmysqlhostname']; + $inputparams[]=array('dbuserhost','lefttext'=>'dbuser hostname','value'=>$dbuserhost,'righttext'=>'This is host of mysql user, to connect from,
You should write hostname of your webserver here..'); + } + + $this->output.="MySQL Server:".$myserver['host'].inputform5($inputparams); + + } else { + if(!$this->afterInputControls("adddb", + array( + "dbname"=>$dbname + ) + ) + ) return false; + $this->output.="
Adding database \"$dbname\" to user: $dbusername."; + $success=$success && $this->addMysqlDbDirect($myserver,$domainname,$dbusername,$dbuserpass,$dbuserhost,$dbname,$adduser=false); + $this->ok_err_text($success); + } + + $this->showSimilarFunctions('mysql'); + return $success; + +} + +function addMysqlDb(){ + // **** burda bikac sorun olabilir.. enonemlisi, bu success olayi calismiyor.. success lerden biri fail olsa da, sonuc degismiyor.. + // diger sorun, if(!rs) denilen yerlerde, dbden okumus sorunsuzca, ama sonuc bos ise, sanki dbden okuyamamış gibi davranıyor.. + global $domainname,$dbusername,$dbuserpass,$dbremoteaccess,$dbname,$dbuserhost,$id,$confirm; + $this->getVariable(array("domainname","dbusername","dbuserpass","dbname","dbuserhost","id",'confirm','dbremoteaccess')); + + if(!$this->beforeInputControls('adddb')) return false; # check limit + $domainname=$this->chooseDomain(__FUNCTION__,$domainname); + $myserver=$_SESSION['myserver']; + if(!$myserver) $myserver=$this->getMysqlServer('',false,__FUNCTION__); # get mysql server info.. + $success=True; + + if($dbname==''){ + $inputparams=array( + array("dbname", 'lefttext'=>'Database Name'), + array("dbusername", 'lefttext'=>'Database Username'), + array("dbuserpass","password_with_generate", 'lefttext'=>'Database Password'), + array('op','hidden','value'=>__FUNCTION__) + ); + + if($this->isadmin()){ + $inputparams[] = array("dbremoteaccess", 'checkbox', 'lefttext'=>'Allow remote access to database:','default'=>'1','checked'=>'0'); + } + + + if($myserver['host']<>'localhost') { # if this is not local mysql server, the db user may not be localhsot, so, ask that.. + $dbuserhost=$myserver['defaultmysqlhostname']; + $inputparams[]=array('dbuserhost','lefttext'=>'Database Hostname','value'=>$dbuserhost,'righttext'=>'This is the MySQL host for the mysql user used for connecting to te database.
You should write the hostname of your webserver here.'); + } + + $this->output.="MySQL Server:".$myserver['host'].inputform5($inputparams); + + }else { + if(!$this->afterInputControls("adddb", + array( + "dbname"=>$dbname, + "dbusername"=>$dbusername + ) + ) + ) return false; + + + # non-interactive part: + $remoteAccess = false; + if($dbremoteaccess && $this->isadmin()){ + $remoteAccess = true; + } + + $success=$success && $this->addMysqlDbDirect($myserver,$domainname,$dbusername,$dbuserpass,$dbuserhost,$dbname,true,$remoteAccess); + $_SESSION['myserver']=false; # reset mysql server selector... + $this->ok_err_text($success); + } + + $this->showSimilarFunctions('mysql'); + return $success; + + +} + +function addMysqlDbDirect($myserver, $domainname, $dbusername, $dbuserpass, $dbuserhost, $dbname, $adduser = true, $allowRemoteAccess = false){ + // Must have validation + if(strlen($dbusername) > 16){ + return $this->errorText("Database username cannot be greater than 16 characters."); + } + + if(strlen($dbname) > 64){ + return $this->errorText("Database name cannot be greater than 64 characters."); + } + + if(strlen($dbuserpass) > 32){ + return $this->errorText("Database user passwords cannot be greater than 32 characters."); + } + + if(!$myserver) $myserver=$_SESSION['myserver']; + if(!$myserver) $myserver=$this->getMysqlServer('',false,__FUNCTION__); # get mysql server info.. + + if($myserver['host']=='localhost') $dbuserhost='localhost'; + if($dbuserhost=='') $dbuserhost='localhost'; + + if($allowRemoteAccess){ + $dbuserhost = '%'; + } + + # connect to mysql server, local or remote + if(! $link = mysqli_connect($myserver['host'], $myserver['user'], $myserver['pass'])){ + return $this->errorText("Could not connect as root!"); + } + + $this->output.= "
Connected as mysql root user: ".$myserver['user']."
"; + + + # actual setup for db and dbuser, local or remote + # step 1: setup database: DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci + + $s=$this->executeQuery("create database `$dbname` ".$this->miscconfig['mysqlcharset'],'creating db','',$link); + + if($s===false) return $this->errorText("Error creating database ". $this->getDBError() ."
"); + else $this->output.="setup complete database: $dbname
"; + + + $success=True; + # step 2: grant user rights + if($adduser) $s=$this->executeQuery("grant all privileges on `$dbname`.* to '$dbusername'@'$dbuserhost' identified by '$dbuserpass' ",'grant user rights','',$link); + else $s=$this->executeQuery("GRANT ALL PRIVILEGES ON `$dbname`.* TO '$dbusername'@'$dbuserhost'",'grant user to db','',$link); + + if($s===false){ + $this->errorText("Error: user $dbusername cannot be granted access to: $dbname"); + $success=false; + }else $this->output.="user $dbusername permitted to : $dbname
"; + + # step 3: + # add these to ehcp db, to local only if local server, to both local and remote, if it is remote server + # local add to ehcp db, + $q="insert into ".$this->conf['mysqldbstable']['tablename']." (domainname,host,dbname,panelusername)values('$domainname','".$myserver['host']."','$dbname','$this->activeuser')"; + if($success) $success=$success && $s=$this->executeQuery($q,' add new mysql db info to ehcp db'); + + + $q="insert into ".$this->conf['mysqldbuserstable']['tablename']." (domainname,host,dbname,dbusername,password,panelusername)values('$domainname','".$myserver['host']."','$dbname','$dbusername','$dbuserpass','$this->activeuser')"; + if($success) $success=$success && $s=$this->executeQuery($q,' add mysql user to ehcp db '); + + # add to remote ehcp db too, if this mysql is a remote one... this is for: if i add a remote mysql db, the data is also written to remote ehcp db. so, remote sees and may remove that. this may be disabled.. + if($success and $myserver['host']<>'localhost'){ # if remote + $q="insert into ".$this->conf['mysqldbstable']['tablename']." (domainname,host,dbname,panelusername)values('$domainname','localhost','$dbname','$this->activeuser')"; + $success=$success && mysqli_select_db($link, "ehcp") && mysqli_query($link, $q); # do not use this->executeQuery here, since this is executed on remote mysql server. + if(!$success) return $this->errorText("MySQL Error ". $this->getDBError() ."
"); + + $q="insert into ".$this->conf['mysqldbuserstable']['tablename']." (domainname,host,dbname,dbusername,password,panelusername)values('$domainname','localhost','$dbname','$dbusername','$dbuserpass','$this->activeuser')"; + if($success) $success=$success && mysqli_select_db($link, "ehcp") && mysqli_query($link, $q); + if(!$success) return $this->errorText("MySQL Error ". $this->getDBError() ."
"); + } + return $success; + +} + + +function mysqlRootQuery($q){ + if(! $link = mysqli_connect("localhost", $this->conf['mysqlrootuser'], $this->conf['mysqlrootpass'])){ + return $this->errorText("Could not connect as root. Please check your MySQL root password."); + } + + $this->output.= "
Connected as root : ".$this->conf['mysqlrootuser']."
"; + $s=$this->executeQuery($q,'execute root query','',$link); + if($s===false){ + return $this->errorText("Error: MySQL root query cannot be executed: $q"); + } else return True; +} + +function arrayToFile($file,$lines) { + $new_content = join('',$lines); + $fp = fopen($file,'w'); + $write = fwrite($fp, $new_content); + fclose($fp); +} + + +function addIfNotExists($what,$where) { + $what.="\n"; + $filearr=@file($where); + if(!$filearr) { + echo "\ncannot open file, trying to setup new file: ($where)\n"; + $fp = fopen($where,'w'); + fclose($fp); + $filearr=file($where); + + } //else print_r($file); + + if(array_search($what,$filearr)===false) { + //echo "dosyada bulamadı ekliyor: $where -> $what \n"; + $filearr[]=$what; + $this->arrayToFile($where,$filearr); + + } else { + //echo "buldu... sorun yok. \n"; + // already found, so, do not add + } + +} + +function generateSslFiles(){ + $nowDate = time(); + $certFile = "/etc/ssl/certs/server.crt"; + + // If the certificate file does not exist or the last modification date of the certificate is greater than 365 days + // Generate a new self signed one that lasts another 365 days + if(!file_exists($certFile) || (file_exists($certFile) && ($nowDate - filemtime($certFile) >= (86400 * 365)))){ + $findarray=array('webserverip'); + $replacearray=array($this->getWebServer()); + $this->replaceArrayPutInFile("$this->ehcpdir/LocalServer.cnf","$this->ehcpdir/LocalServerIP.cnf",$findarray,$replacearray); + + passthru2("openssl genrsa -out $this->ehcpdir/server.key 1024"); + passthru2("openssl req -new -key $this->ehcpdir/server.key -out $this->ehcpdir/server.csr -config $this->ehcpdir/LocalServerIP.cnf"); + passthru2("openssl x509 -req -days 365 -in $this->ehcpdir/server.csr -signkey $this->ehcpdir/server.key -out $this->ehcpdir/server.crt"); + + passthru2("cp -vf $this->ehcpdir/server.crt /etc/ssl/certs/"); + passthru2("cp -vf $this->ehcpdir/server.key /etc/ssl/private/"); + } +} + +function replaceArrayPutInFile($srcfile,$dstfile,$findarray,$replacearray){ + # reads srcfile, replace some findarray with replacearray, then put in dstfile, for writing some template files.. + + $filestr=file_get_contents($srcfile); + $findarray2=arrayop($findarray,"strop"); + $fileout=str_replace($findarray2,$replacearray,$filestr); + $res=writeoutput2($dstfile,$fileout,'w'); + if($res===True) echo __FUNCTION__.": Dst file ($dstfile) written.. \n"; + return $res; +} + +function restart_webserver2($server){ + echo __FUNCTION__.":\n"; + print_r($server); + + $serverip=$serverip['ip']; + $webservertype=$server['servertype']; + + $this->debugecho(__FUNCTION__.":$serverip",1); + + if($serverip=='') $serverip='localhost'; + if($webservertype=='') $webservertype='apache2'; + + $this->server_command($serverip, getServiceActionStr($webservertype, "restart")); + # configtest_reload yapılacak. +} + +function restart_webserver(){ + # thanks to webmaster@securitywonks.net for encourage of nginx integration + + echo "\n".__FUNCTION__.": Current webserver is:".$this->miscconfig['webservertype']."\n"; + + if($this->miscconfig['webservertype']=='apache2') { + manageService("nginx", "stop"); + manageService("apache2", "restart"); + } else if($this->miscconfig['webservertype']=='nginx') { + manageService("apache2", "stop"); + passthru2("killall " . $this->php_fpm_name); + manageService($this->php_fpm_name, "restart"); + manageService("nginx", "restart"); + } +} + +function is_webserver_running(){ + // will be checked.. + // Sleep for 18 seconds before checking to allow configuration to be updated. + sleep(18); + if($this->miscconfig['webservertype']=='apache2') { + $out=shell_exec('ps aux | grep apache | grep -v grep | grep -v php'); + echo __FUNCTION__.":".$out; + return (strstr($out,'apache')!==false); + + } elseif($this->miscconfig['webservertype']=='nginx') { + $out=shell_exec('ps aux | grep nginx | grep -v grep | grep -v php'); + echo __FUNCTION__.":".$out; + return (strstr($out,'nginx')!==false); + } + + return True; +} + +function fixApacheConfigSsl($domain=''){ + $this->requireCommandLine(__FUNCTION__,True); + $this->generateSslFiles(); + + if($this->miscconfig['webservertype']=='apache2') { + + passthru2("a2enmod ssl"); + passthru2("cp -vf $this->ehcpdir/etc/apache2_ssl/fork/apachetemplate_ipbased $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_ssl/fork/apachetemplate_ehcp_panel $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_ssl/fork/redirect $this->ehcpdir/apachetemplate_redirect", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_ssl/fork/apache_subdomain_template $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_ssl/fork/apachetemplate_passivedomains $this->ehcpdir/", true, true); + passthru2("rm -rvf /etc/apache2/sites-enabled/*", true, true); + + $this->executeQuery("update misc set value='apache2' where name='webservertype'"); + $this->executeQuery("update misc set value='ssl' where name='webservermode'"); + + // We will bind on configured panel IP address + + $findarray=array('webserverip'); + $replacearray=array($this->getWebServer()); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/apachetemplate_ipbased","$this->ehcpdir/apachetemplate",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/apache_subdomain_template","$this->ehcpdir/apache_subdomain_template",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/default","/etc/apache2/sites-enabled/default",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/redirect","$this->ehcpdir/apachetemplate_redirect",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/apachetemplate_ehcp_panel","$this->ehcpdir/apachetemplate_ehcp_panel",$findarray,$replacearray); + + // Get any custom ports Apache is currently listening on + $customPorts = getCustomApache2ListenPorts(); + + // Replace the ports file + if((getIsUbuntu() && getUbuntuReleaseYear() >= "14") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/ports_ubu14.conf" ,"/etc/apache2/ports.conf" ,$findarray,$replacearray); + }else{ + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_ssl/fork/ports.conf" ,"/etc/apache2/ports.conf",$findarray,$replacearray); + } + + // Re-add any custom ports + addCustomPortsToApache($customPorts); + + }else if($this->miscconfig['webservertype']=='nginx'){ + // Debug + /* + $this->writeToLogFile("Setting SSL on Nginx Configs"); + + $contentsOfFile = file_get_contents("$this->ehcpdir/etc/nginx_ssl/apache_subdomain_template.nginx"); + $this->writeToLogFile($contentsOfFile); + */ + + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/apachetemplate.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/apachetemplate_ehcp_panel.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/default.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/nginx.conf $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/apache_subdomain_template.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_ssl/redirect $this->ehcpdir/etc/nginx", true, true); + + passthru2("rm -rvf /etc/nginx/sites-enabled/*", true, true); + + $this->executeQuery("update misc set value='nginx' where name='webservertype'"); + $this->executeQuery("update misc set value='ssl' where name='webservermode'"); + + //Debug + //$this->writeToLogFile("Going to use nginx templates: " . $this->miscconfig['webservermode']); + + $this->useNginxTemplates(); + } + + $this->new_sync_domains(); + $this->syncDomains(); + $this->restart_webserver(); + + return True; +} + +function fixApacheConfigSslOnly($domain=''){ + $this->requireCommandLine(__FUNCTION__,True); + $this->generateSslFiles(); + + if($this->miscconfig['webservertype']=='apache2') { + + passthru2("a2enmod ssl"); + passthru2("a2enmod rewrite"); + + passthru2("cp -vf $this->ehcpdir/etc/apache2_sslonly/fork/apachetemplate_ipbased $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_sslonly/fork/apache_subdomain_template $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_sslonly/fork/apachetemplate_passivedomains $this->ehcpdir/", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_sslonly/fork/redirect","$this->ehcpdir/apachetemplate_redirect", true, true); + passthru2("cp -vf $this->ehcpdir/etc/apache2_sslonly/fork/apachetemplate_ehcp_panel","$this->ehcpdir/apachetemplate_ehcp_panel", true, true); + + passthru2("rm -rvf /etc/apache2/sites-enabled/*", true, true); + + $this->executeQuery("update misc set value='apache2' where name='webservertype'"); + $this->executeQuery("update misc set value='sslonly' where name='webservermode'"); + + // We will bind on configured panel IP address + + $findarray=array('webserverip'); + $replacearray=array($this->getWebServer()); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/apachetemplate_ipbased","$this->ehcpdir/apachetemplate",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/apachetemplate_ehcp_panel","$this->ehcpdir/apachetemplate_ehcp_panel",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/apache_subdomain_template","$this->ehcpdir/apache_subdomain_template",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/redirect","$this->ehcpdir/apachetemplate_redirect",$findarray,$replacearray); + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/default" ,"/etc/apache2/sites-enabled/default" ,$findarray,$replacearray); + + // Get any custom ports Apache is currently listening on + $customPorts = getCustomApache2ListenPorts(); + + // Replace the old file with the new base file + if((getIsUbuntu() && getUbuntuReleaseYear() >= "14") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/ports_ubu14.conf" ,"/etc/apache2/ports.conf" ,$findarray,$replacearray); + }else{ + $this->replaceArrayPutInFile("$this->ehcpdir/etc/apache2_sslonly/fork/ports.conf" ,"/etc/apache2/ports.conf" ,$findarray,$replacearray); + } + + // Re-add any custom ports + addCustomPortsToApache($customPorts); + + + }else if($this->miscconfig['webservertype']=='nginx'){ + // Debug + /* + $this->writeToLogFile("Setting SSL on Nginx Configs"); + + $contentsOfFile = file_get_contents("$this->ehcpdir/etc/nginx_ssl/apache_subdomain_template.nginx"); + $this->writeToLogFile($contentsOfFile); + */ + + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/apachetemplate.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/apachetemplate_ehcp_panel.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/default.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/nginx.conf $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/apache_subdomain_template.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_sslonly/redirect $this->ehcpdir/etc/nginx", true, true); + + passthru2("rm -rvf /etc/nginx/sites-enabled/*", true, true); + + $this->executeQuery("update misc set value='nginx' where name='webservertype'"); + $this->executeQuery("update misc set value='sslonly' where name='webservermode'"); + + //Debug + //$this->writeToLogFile("Going to use nginx templates: " . $this->miscconfig['webservermode']); + + $this->useNginxTemplates(); + } + + $this->new_sync_domains(); + $this->syncDomains(); + $this->restart_webserver(); + + return True; +} + + +function fixApacheConfigNonSsl2(){ + $this->executeQuery("delete from customsettings"); + # do any other necessary things here... + $this->fixApacheConfigNonSsl(); +} + +function fixApacheConfigNonSsl(){ + $this->requireCommandLine(__FUNCTION__,True); + global $ehcpinstalldir; + $ehcpinstalldir=$this->conf['ehcpdir']; + + if($this->miscconfig['webservertype']=='apache2') { + $this->resetNonSSLApacheConf(); + }else if($this->miscconfig['webservertype']=='nginx'){ + $this->resetNonSSLNginxConf(); + } + + $this->new_sync_domains(); + $this->restart_webserver(); + return True; +} + +function resetNonSSLApacheConf(){ + // Variables + global $ehcpinstalldir; + $ehcpinstalldir=$this->conf['ehcpdir']; + + // Disable the ssl mod + passthru2("a2dismod ssl"); + + // Copy original apache configs from ehcpinstalldir/etc/apache2 back to root ehcpinstalldir + include_once("install_lib.php"); + rebuild_apache2_config2(); # in install_lib.php + + // Update database settings + $this->executeQuery("update misc set value='apache2' where name='webservertype'"); + $this->executeQuery("update misc set value='nonssl' where name='webservermode'"); +} + +function resetNonSSLNginxConf(){ + // Copy nonssl nginx configs back into shared ehcp nginx config directory + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/apache_subdomain_template.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/apachetemplate.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/apachetemplate_ehcp_panel.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/default.nginx $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/nginx.conf $this->ehcpdir/etc/nginx", true, true); + passthru2("cp -vf $this->ehcpdir/etc/nginx_nonssl/redirect $this->ehcpdir/etc/nginx", true, true); + + passthru2("rm -rvf /etc/nginx/sites-enabled/*", true, true); + + // Update database settings + $this->executeQuery("update misc set value='nginx' where name='webservertype'"); + $this->executeQuery("update misc set value='nonssl' where name='webservermode'"); + + $this->useNginxTemplates(); + +} + +function sync_domains_multi_server($file='') { # this should be same as syncdomains below, but I wrote a separate function to minimize conflicts, errors while developing. will call this function only if ehcp has multi-server enabled. + # not completed yet. + + $this->requireCommandLine(__FUNCTION__); + echo "\n".__FUNCTION__.": start syncing domains"; + if($file=='') $file="apachehcp.conf"; # gecici olarak yaptim. **** + $filt=andle($this->activefilt,"(serverip is null or serverip='') and homedir<>''"); # exclude where serverip is set, that is, for remote dns hosted only domains.. + $arr=$this->getDomains($filt); + $webserverip=$this->getWebServer(); + + + $success=True; + + $arr_customhttp=$this->query("select * from ".$this->conf['customstable']['tablename']." where name='customhttp' and (webservertype is null or webservertype='' or webservertype='".$this->miscconfig['webservertype']."')"); + + $arr2=array(); + + # farkli webserver'lara yazabilmek icin, herbir domain'i ayri degerlendirmek, ilgili webserver'a konfigurasyonlari gondermek lazim. + # group by webserver tarzi bisey olabilir, sonra herbir grup icin bu kodlar calistirilir. birer dizine konur. sonra her dizin kendi sunucusuna rsync yapilir. + # domains arrayi soyle olabilir + + #array=>server1=>array(domainler) + # server2=>array(domainler) + +} + +function clear_slash_at_end($str){ + # clears slash at end of a string, for path names. path names should have no slash at end. this should be a standard. this function ensures this. + # until code is clean enaugh. + + $len=strlen($str); + if(substr($str,$len-1,1)=='/') $out=substr_replace($str,'',$len-1); + else $out=$str; + + #echo __FUNCTION__.":($str)($out)(len:$len) (".substr($str,$len-1,1).") \n"; + return $out; +} + +function server_command($serverip,$cmd,$noremove=false,$copy_file_to_dest=False){ # not used yet. + # execute a shell command in local or remote server. + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + if(!$noremove) $cmd=removeDoubleSlash($cmd); + $escapedcmd=escapeshellcmd($cmd); + $accessip=$this->get_server_access_ip($serverip); + #echo "\nexecuting command: $cmd \n(escaped cmd:$escapedcmd)\n"; + + if($accessip=='localhost') { + echo "\nexecuting command: $cmd \n(escapedcmd: $escapedcmd)\n"; + return shell_exec($escapedcmd); + } else { + if($copy_file_to_dest){ # in this case, the command is a file (probably that has many commands inside) that needs to be transfered to dest server before executing. + shell_exec("scp $cmd $accessip:/etc/ehcp/"); + $cmd="/etc/ehcp/$cmd"; + } + echo "\nexecuting command: ssh $accessip \"$cmd\" \n(escapedcmd: ssh $accessip \"$escapedcmd\")\n"; + return shell_exec("ssh $accessip \"$escapedcmd\""); + } + +} + +function server_commands($serverip,$filename){ + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + echo "\n".__FUNCTION__.":file $filename is being executed on server:($serverip) \n"; + if(trim($serverip)=='') { + echo "\n".__FUNCTION__.": server is empty. strange! \n"; + debug_print_backtrace(); + return false; + } + + $accessip=$this->get_server_access_ip($serverip); + + if($accessip=='localhost'){ + my_shell_exec($filename,__FUNCTION__); + } else { + my_shell_exec("scp $filename $accessip:$filename",__FUNCTION__); + my_shell_exec("ssh $accessip \"$filename\"",__FUNCTION__); + } + return True; +} + +function execute_server_commands($serverip,$commands){ + # prepare commands as a whole, put them in a file, execute that file. especially may be useful for remote server command execution. + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + if(trim($serverip)=='') { + echo "\n".__FUNCTION__.": server is empty. strange! \n"; + debug_print_backtrace(); + return false; + } + + echo "\n".__FUNCTION__.": preparing server commands for server ($serverip)\n"; + $out=""; + foreach($commands as $com) $out.=$com."\n"; # array_to_plaintext + $filename="/etc/ehcp/ehcp_executethisfile.sh"; + writeoutput2($filename, $out, "w"); + my_shell_exec("chmod a+x $filename",__FUNCTION__); + echo "\n".__FUNCTION__.":Executing this file: $filename on server ($serverip)\n $out \n"; + $this->server_commands($serverip,$filename); + echo "\n".__FUNCTION__.":end\n"; + +} + +function initialize_logs2($dir){ + + # fill commands to be executed on relatd server. these will be executed all in once. + $this->commands[]="mkdir -p $dir"; + $this->commands[]="mkdir -p $dir/logs"; + $this->commands[]="echo '' >> $dir/logs/access_log";// these are defined in apachetemplate file, bunlarin log_rotate olayi yapilmali. + $this->commands[]="echo '' >> $dir/logs/error_log"; + + #passthru2("chown $this->ftpowner -Rf $dir"); + # this caused problem especially for file upload scripts, + + $this->commands[]="chown root:root -Rf $dir/logs"; # bu olmayinca, biri logs dizinini silince, apache hata verip cikiyor.. # suanda access ver error loglar silinemiyor kullanici tarafindan...ancak sunucudan ssh ile silinebilir...! +} + +function noExistingIndex($homedir){ + if(!file_exists($homedir."/httpdocs/index.php") and !file_exists($homedir."/httpdocs/index.htm" and !file_exists($homedir."/httpdocs/index.html"))) { # do not overwrite if any older index.php exists there... + return true; + }else{ + return false; + } +} + +function initialize_domain_files($homedir){ + # fill commands to be executed on related server. these will be executed all in once. + + $this->commands[]="mkdir -p $homedir"; + $this->commands[]="mkdir -p $homedir/httpdocs"; + $this->commands[]="chown $this->ftpowner -Rf $homedir/httpdocs"; + # $this->commands[]="chmod g+w -Rf $homedir/httpdocs"; # make group writable, if www-data writable, then, all domains files would be writable. + $this->commands[]="mkdir -p $homedir/phptmpdir"; + $this->commands[]="chmod a+w $homedir/phptmpdir"; + + $this->commands[]="echo '' > $homedir/UPLOAD_SITE_FILES_TO_httpdocs_FOLDER"; // z7 mod + $this->commands[]="cp ".$this->ehcpdir."/z7/install_files/.htaccess $homedir/phptmpdir/.htaccess"; // z7 mod + if($this->noExistingIndex($homedir)){ + $this->commands[]="cp ".$this->ehcpdir."/z7/install_files/domain_index.php $homedir/index.php"; // z7 mod\ + } + $this->commands[]="cp -f $this->ehcpdir/ehcpinfo.html $homedir/httpdocs/ehcpinfo.html"; # final execution of commands will be done after all commands are collected at calling functions. + + $this->initialize_logs2($homedir); + +} + +function prepare_webserver_files($file,$server){ + # Case webserver* is not taken into account here. for this function to work, all servers need to have real ip. + # this function is a re-write of sync_domains (syncDomains) function, will be used in multi-server environments. + # idea: prepare server files, then, send these files to related servers, if localhost, send to related dirs in local machine. + + # *** MISSING HERE: sync subdomains, different ip within a server.. will be made similar to syncDomains for multi IP, multiserver + + $this->requireCommandLine(__FUNCTION__); + + + $this->commands=array('#!/bin/bash','echo "$0: commands are executed from within ehcp '.date_tarih().'" >> /var/log/ehcp.log'); # these will be commands to be executed on local or remote server as a whole, ?? i am testing this technique + + $serverip=$server['ip']; + $webservertype=$server['servertype']; + + echo "\n===========================================\n# start process server files for server:$serverip, ".date_tarih()."\n"; + + if($serverip=='') $serverip='localhost'; + + if($webservertype=='') $webservertype='apache2'; + $accessip=$this->get_server_access_ip($serverip); + if($accessip<>'localhost' and $file=='') $file="$this->ehcpdir/serverfiles/$accessip/webserver/ehcp_webserver_remote_config_produced_by_".$this->miscconfig['dnsip'].'.conf'; # for testing, or give a diffrent name for this, so that track easier. + if($accessip=='localhost') $file="$this->ehcpdir/apachehcp.conf"; + + # clean old server files first: + passthru2("rm -vf $this->ehcpdir/serverfiles/$accessip/webserver/*",True,True); + + # get domains list first, related to + if($serverip=='localhost') { + $filt="webserverips is null or webserverips='' or webserverips like '%localhost%'"; + $webserverip=$this->miscconfig['dnsip']; + } else { + $filt="webserverips like '%$serverip%'"; + $webserverip=$serverip; + $this->commands[]="mkdir -p ".$this->ehcpdir; + $this->commands[]="mkdir -p /etc/ehcp"; + + if(rand(1,10)==10) my_shell_exec("rsync -arvz $this->ehcpdir/ehcpinfo.html $accessip:".$this->ehcpdir,__FUNCTION__); # copy that file to dest server. do not send every time, only %10 of time. to prevent copy eachtime. + } + + $arr=$this->getDomains($filt); + if(count($arr)==0) { + echo "\n number of domains for server ($serverip) is zero. quiting ".__FUNCTION__; + writeoutput2($file,"",'w',false); # no domains, so, empty the config + return True; + } + + print_r($arr2); + + $success=True; + $arr_customhttp=$this->query("select * from ".$this->conf['customstable']['tablename']." where name='customhttp' and (webservertype is null or webservertype='' or webservertype='".$this->miscconfig['webservertype']."')"); + $arr2=array(); + + + # prepare webserver config files for this server, put in serverfiles/ folder. + + # prepare domain array + + foreach($arr as $dom) { // setup necessry dirs/files if doesnt exist.. + # files will be prepared.. such as mkdir, like in sync_domains + $this->initialize_domain_files($dom['homedir']); + + # add customhttp to array, + $customhttpvalue=''; + if($arr_customhttp) + foreach($arr_customhttp as $cust) { + if($cust['domainname']==$dom['domainname']) $customhttpvalue.=$cust['value']."\n"; # this loop prevents repetitive mysql query, thus faster execution. + } + $dom['customhttp']=$customhttpvalue; + + # add ServerAlias to begining of lines in aliases field + $aliases=$dom['aliases']; + $aliasarr=explode("\n",$aliases); + $newaliases=""; + foreach($aliasarr as $al) if(trim($al)<>'') $newaliases.="ServerAlias ".trim($al)." \n"; + $dom['aliases']=$newaliases; + $dom['webserverip']=$webserverip; + + $arr2[]=$dom; + } + + $this->commands[]="mkdir -p /var/www/passivedomains"; + $this->commands[]="echo domain_deactivated_contact_administrator > /var/www/passivedomains/index.html"; + + + #process passive domains + $passivedomains=$this->getDomains($this->passivefilt); + + $passives=array(); + foreach($passivedomains as $p){ + if($ssl_enabled){ + $p['webserverip']=$webserverip; + } + $this->initialize_domain_files($dp['homedir']); + $passives[]=$p; + } + + + if($serverip=='localhost') $passive_file="$this->ehcpdir/apachehcp_passivedomains.conf"; + else $passive_file="$this->ehcpdir/serverfiles/$serverip/webserver/ehcp_webserver_remote_config_passivedomains_produced_by_".$this->miscconfig['dnsip'].'.conf'; + + $this->putArrayToFile($passives,$passive_file,"apachetemplate_passivedomains"); + + + + $this->execute_server_commands($serverip,$this->commands); # all commands for whole domains are done in single step. + + # domain array prepared. now, put these in configs. + + #begin: reconstruct apache config file: + $fileout="# This is an automatically generated file, by ehcp. Do not edit this file by hand. if you need to change apache configs, edit apachetemplate file (to take effect for all domains) in ehcp dir, or use custom http in ehcp gui \n"; + $alanlar=array_keys($arr2[0]); // gets array keys, from first(0th) array element of two-dimensional $arr2 array. + + // following code, replaces fields from template to values here in $arr2 two-dim array. each $arr2 element written to output file according to template file. + // Adds brackets around array_key entries - TRANSLATED ABOVE LINE TO ENGLISH EARNOLMARTIN + $replacealanlar=arrayop($alanlar,"strop"); + + # load webserver config template: (these are a bit different than single server sync_domains, because, here, multiple templates may be used simultaneously, since many servers with different webserver possible..) + switch($webservertype){ + case 'apache2': $webserver_template_filename="$this->ehcpdir/apachetemplate";break; + case 'nginx' : $webserver_template_filename="$this->ehcpdir/etc/nginx/apachetemplate.nginx";break; + # other webservers here.., lighthttpd, litespeed, + } + $webserver_template_file=file_get_contents($webserver_template_filename); + + + $ssl_enabled=strstr($webserver_template_file,"{webserverip}")!==false; # *1 if template file contains {webserverip} then, ssl is assumed to enabled on apache configs. this case, non-ssl custom http's are disabled to prevent apache config error. All custom http's should be fixed by admin in this case. + if ($ssl_enabled) $this->echoln("ssl seems enabled in this server, because tag {webserverip} is found in apache config templates files.."); + else $this->echoln("ssl seems not enabled in this server, because tag {webserverip} is not found in apache config templates files.."); + + + foreach($arr2 as $ar1) {// template e gore apache dosyasini olustur + $webserver_template=$ar1[$webservertype.'template'];# get domain specific (custom) template + + if($webserver_template<>'') { + $this->echoln2("Domain:".$ar1['domainname']." has custom webserver template."); + $webserver_template.="\n#this last template is read from database for ".$ar1['domainname']."..\n\n"; + + if($ssl_enabled and strstr($webserver_template,"{webserverip}")===false){ + $this->echoln("apache config is adjusted as ssl enabled, however, your custom http for this domain contains non-ssl custom http, so, I disable custom http for this domain:".$ar1['domainname']); + $webserver_template=$webserver_template_file; # read explanation above *1 + } elseif(!$ssl_enabled and strstr($webserver_template,"{webserverip}")!==false){ + $this->echoln("apache config is adjusted as non-ssl enabled, however, your custom http for this domain contains ssl custom http, so, I disable custom http for this domain:".$ar1['domainname']); + $webserver_template=$webserver_template_file; # read explanation above *1 + } + } else { + $webserver_template=$webserver_template_file; + } + + $webserver_template=str_replace(array('{ehcpdir}','{localip}'),array($this->ehcpdir,$this->miscconfig['localip']),$webserver_template); + $webserver_config=str_replace($replacealanlar,$ar1,$webserver_template); + $fileout.=$webserver_config; + } + + $success=writeoutput2($file,$fileout,'w',false); + # end: reconstruct apache config file: + + + echo "\n# ** end process server files for server: $serverip ".date_tarih()."\n===========================================\n"; + +} + +function get_servers($filt){ + $q="select * from servers"; + if($filt<>'') $q.=" where $filt"; + return $this->query($q); +} + +function new_sync_domains2(){ + # NON-COMPLETEEE ******* + + # Design: many ips may arise in many servers, multi-server, each multi-ip + # what if same config needs to be sent to more than one server, such as cluster ? + + # functions will be constructed.. + + $domain_ips=$this->get_domain_ips(); # find ip's of domains. + foreach($domain_ips as $ip){ # for each ip, + $domains=$this->get_domains_in_ip($ip); # get domain list + $this->prepare_webserver_files($domains,$ip); # build config + $access_ip=$this->get_access_ip($ip); # learn access ip of that ip, if a server has many ips, then, only one access ip. + $this->write_webserver_config_to_access_ip(); + } + + $servers=$this->get_access_ips(); # get server list, using their access ips + foreach($servers as $ip){ + $this->send_webserver_files($ip); + } + +} + +function get_webservers(){ + print __FUNCTION__.": basliyor ** \n"; + # this function reads servers table, then merges it through domain list, thus building dns/web servers, + + $webservers=$this->query("select servertype,ip from servers where servertype in ('apache2','nginx')"); + $localserver=$this->query("select servertype,ip from servers where servertype in ('apache2','nginx') and ip='localhost'"); + if(count($localserver)==0) $webservers[]=array('servertype'=>$this->miscconfig['webservertype'],'ip'=>'localhost'); # add localhost if not exist + + #print_r($webservers); + $w2=array(); # servers in "servers" table + foreach($webservers as $w) $w2[$w['ip']]=$w['servertype']; # convert to ip=>type pairs + + echo "w2:"; + print_r($w2); + + $doms=$this->getDomains(); + if(is_array($this->last_deleted_domaininfo)) $doms[]=$this->last_deleted_domaininfo; # server of last deleted domain also needs to be updated,so, add that + + $w3=array(); + + # find servers related to domains: (including last deleted domain) + foreach($doms as $dom){ + $ip=trim($dom['webserverips']); + if($ip=='') $ip='localhost'; + + $list=explode(",", $ip); + + foreach($list as $l) { + $l=trim($l); + if($l<>'' and ($w3[$l]=='')) { + $w3[$l]=$w2[$l]; # assign type from list of servers above + if($w3[$l]=='') $w3[$l]='apache2'; # if there is no type until now, set to default of apache2 + } + } + } + + if($w3['localhost']=='') $w3['localhost']='apache2'; + echo "w3:"; + print_r($w3); + + + $w4=array(); + foreach($w3 as $ip=>$type) $w4[]=array('servertype'=>$type,'ip'=>$ip);#convert back to servers array + + #$keys=array_keys($w3); foreach($keys as $k) $w4[]=array('servertype'=>$w3[$k],'ip'=>$k); #convert back to servers array + echo "w4:"; + print_r($w4); + + + + return $w4; +} + +function get_server_access_ip($ip){ + # server ip's and access ips may be different, for servers having more than one ip. so, for accessing a server, we need to know its access ip. + # otherwise, many settings required. + + $ret=$this->query("select accessip from servers where ip='$ip'"); + $ret=$ret[0]['accessip']; + if($ret=='') $ret=$ip; + return $ret; +} + +function send_webserver_files($server){ + print __FUNCTION__.": basliyor \n"; + print_r($server); + + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + /* + * Burada, aynı sunucuda birden fazla ip için şu yapılabilir: + * sunucu için bir ip listesi tutulur, + * burada gönderilirken, oradan kontrol edilir. + * servers tablosunda: ip, accessip olmalı. bir sunucu tek bir accessip ile tanımlanmalı, ama birden çok diğer ipleri olabilir. bu şekilde, bir sunucunun diğer iplerine domain ekleme mümkün olabilir. + * orada varsa, oradaki yere gönderilir, + * orada yoksa, normal ipye gönderilir. + */ + + if(trim($serverip)=='')$serverip='localhost'; + $accessip=$this->get_server_access_ip($serverip); + + if($accessip<>'localhost') my_shell_exec("rsync -arvz $this->ehcpdir/serverfiles/$accessip/webserver/* $accessip:".$this->ehcpdir,__FUNCTION__); + # for local server, files are directly written to normal destination, no need to send. +} + +function send_dnsserver_files($server){ # if remote machine is not yours, then, additional security should be taken here. ** + print __FUNCTION__.": basliyor \n"; + print_r($server); + + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + + if(trim($serverip)=='')$serverip='localhost'; + if($serverip<>'localhost') my_shell_exec("rsync -arvz $this->ehcpdir/serverfiles/$serverip/named/* $serverip:/etc/bind/",__FUNCTION__); + # for local server, files are directly written to normal destination, no need to send. +} + +function get_dnsservers(){ + #this function is multi_server enabled. + print __FUNCTION__.": basliyor \n"; + # this function reads servers table, then merges it through domain list, thus building dns/web servers + + $dnsservers=$this->query("select servertype,ip from servers where servertype in ('binddns')"); + $localserver=$this->query("select servertype,ip from servers where servertype in ('binddns') and ip='localhost'"); + if(count($localserver)==0) $dnsservers[]=array('servertype'=>'binddns','ip'=>'localhost'); # add localhost if not exist # binddns harici bir sey kullanılacaksa, modifiye edilmeli.get_webservers a bak. + + #print_r($webservers); + $w2=array(); # servers in "servers" table + foreach($dnsservers as $w) $w2[$w['ip']]=$w['servertype']; # convert to ip=>type pairs + + print_r($w2); + # kontrol edilecek. + + $doms=$this->getDomains(); + $doms[]=$this->last_deleted_domaininfo; + + + + + $w3=array(); + + foreach($doms as $dom){ + $ip=$dom['dnsserverips']; + $list=explode(",", $ip); + + foreach($list as $l) { + $l=trim($l); + if($l<>'' and ($w3[$l]=='')) { + $w3[$l]=$w2[$l]; # assign type + if($w3[$l]=='') $w3[$l]='binddns'; # if there is no type, set to default of apache2 + } + } + } + + if($w3['localhost']=='') $w3['localhost']='binddns'; + print_r($w3); + + $w4=array(); + $keys=array_keys($w3); + + foreach($keys as $k) $w4[]=array('servertype'=>$w3[$k],'ip'=>$k); #convert back to servers array + + print_r($w4); + + return $w4; +} + +function prepare_dns_files($server){ + $this->requireCommandLine(__FUNCTION__); + + $serverip=$server['ip']; + $servertype=$server['servertype']; + + # get domains list first, related to + if($serverip=='localhost') { + $filt="dnsserverips is null or dnsserverips='' or dnsserverips like '%localhost%'"; + $dnsserverip=$this->miscconfig['dnsip']; + } else { + $filt="dnsserverips like '%$serverip%'"; + $dnsserverip=$serverip; + } + + if($serverip==localhost) $file=$this->conf['namedbase']."/named_ehcp.conf"; + else $file="$this->ehcpdir/serverfiles/$serverip/named/named_ehcp_produced_by_".$this->miscconfig['dnsip'].'.conf'; + + + $arr=$this->getDomains($filt); + if(count($arr)==0) { + echo "\n domains for this server cannot be found: $serverip, quiting ".__FUNCTION__."! \n"; + writeoutput2($file,"",'w',false); # no domains, so, empty the config + // Fix perms on the bind file + $this->fixBindFilePerms($file); + return True; + } + + $exampledomain=$arr[0]; + $arr_aliaseddomains=$this->calculateAliasedDomains($arr,$exampledomain); + + # merge two array to one domains array: + # this array is like 0 => array('domainname'=>'xxx.com') + + foreach($arr_aliaseddomains as $aliasdomain){ + $found=false; + foreach($arr as $dom) if($aliasdomain['domainname']==$dom['domainname']) $found=True; + if(!$found) $arr[]=$aliasdomain; + } + + # put customdns info into zone files.. + $arr_customdns=$this->query("select * from ".$this->conf['customstable']['tablename']." where name='customdns' "); + $arr2=array(); + + foreach($arr as $dom) { # add customdns to array, + $customdnsvalue=''; + foreach($arr_customdns as $cust) { + if($cust['domainname']==$dom['domainname']) $customdnsvalue.=$cust['value']."\n"; # this loop prevents repetitive mysql query, thus faster execution. + } + $dom['customdns']=$customdnsvalue; + # will include domain aliases in dns too, to be able to catch those domains with dns + $arr2[]=$dom; + } + + echo "\n".__FUNCTION__." working..: domains for $serverip:\n"; + print_r($arr2); + + passthru2("rm -vf $this->ehcpdir/serverfiles/$serverip/named/*",True,True); + + if(($this->prepare_dns_zone_files($server,$arr2)) and ($this->prepare_dns_named_conf_file($server,$arr2))) { + # sending of files is done in other function. + return True; + } + else return false; + +} + +function replace_tags_with_multiple_values($subject,$tags,$values){ + # replaces tags with multiple values, a line containing a tag is replaced with multiple lines containing values. + # written for building dns/web configs, generally used in multi-server dns config etc + # tags: array(tag1,tag2...) values: array(values1,values2...) values1=comma separated list of ips/strings + + $lines=explode("\n",$subject); + + foreach($lines as $line) { #process for each line + $found=false; + $tagindex=0; + foreach($tags as $tag) { # process each tag, one line must have only one tag, otherwise, this function will fail + if(strstr($line,$tag)!==false) { + $replace=explode(',',$values[$tagindex]); + foreach($replace as $r) $out.=str_replace($tag,$r,$line)."\n"; + $found=True; + } + $tagindex++; + } + if(!$found) $out.=$line."\n"; + } + + return $out; +} + +function replace_tags($template,$replace_fields,$replace_values){ + return str_replace($replace_fields,$replace_values,$template);// replace domain fields, +} + +function build_from_template($template,$tags_with_multiple_values,$multiple_values,$tags,$values){ + echo __FUNCTION__.": basliyor \n"; + + $template=$this->replace_tags_with_multiple_values($template,$tags_with_multiple_values,$multiple_values); + $template=$this->replace_tags($template,$tags,$values); + return $template; +} + +function prepare_dns_zone_files($server,$arr2){ + $this->requireCommandLine(__FUNCTION__); + echo __FUNCTION__.": basliyor \n"; + + $success=True; + + $serverip=$server['ip']; + $servertype=$server['servertype']; + + + //$this->output.=print_r2($arr); + //print_r($arr); + $alanlar=alanlarial($this->conn,"domains"); + $replacealanlar=arrayop($alanlar,"strop"); # puts each field in {} + $replacealanlar[]='{customdns}'; + + # eger remote dns ler farkli olacaksa, burasi modifiye edilmeli. + $dnstemplatefile=file_get_contents($this->dnszonetemplate);// get template once. + #$dnstemplatefile=file_get_contents("$this->ehcpdir/dnszonetemplate_multiple_servers");// get template once. + + + + # for old style: # these are not needed if all templates are new style + $mailserverip=$this->getMailServer(); + $dnsserverip=$this->getDnsServer(); + $webserverip=$this->get_webserver_real_ip(); + + + foreach($arr2 as $ar1){ + + + # assign ip addresses for different services.. + if($ar1['serverip']<>''){ # single ip if hosted in a single place, + $mailserverips=$dnsserverips=$webserverips=$ar1['serverip']; + $mailip=$webip=$dnsip=$ar1['serverip']; # for old styles + + } else{ + + $dnsserverips=$ar1['dnsserverips']; + $webserverips=$ar1['webserverips']; + $mailserverips=$ar1['mailserverips']; + + if($dnsserverips=='') $dnsserverips=$this->miscconfig['singleserverip']; + if($webserverips=='') $webserverips=$this->miscconfig['singleserverip']; + if($mailserverips=='') $mailserverips=$this->miscconfig['singleserverip']; + + # for old style: + $mailip=$mailserverip; + $dnsip=$dnsserverip; + $webip=$webserverip; + + + } + + $this->echoln2("yaziyor: ".$ar1["domainname"]." mailip/webip/dnsip : $mailserverips/$webserverips/$dnsserverips"); + + $dnstemp=$ar1['dnstemplate']; + if($dnstemp=='') $dnstemp=$dnstemplatefile; // read dns info from template file, if not written to db.. + echo "\n".__FUNCTION__.": buraya geldi.\n"; + + # replace any old style tags that may be left on template: + $replacealanlar=array_merge($replacealanlar,array('{serial}','{ip}','{dnsemail}','{mailip}','{dnsip}','{webip}')); # tags to replace + $ar1=array_merge($ar1,array(rand(1,1000),$this->conf['dnsip'],$this->conf['dnsemail'],$mailip,$dnsip,$webip)); # tag contents to put + + + $dnstemp=$this->build_from_template($dnstemp,array('{dnsserverips}','{webserverips}','{mailserverips}'),array($dnsserverips,$webserverips,$mailserverips),$replacealanlar,$ar1); + #echo "Hazirlanan dns config: \n$dnstemp"; + + # lokalden erisenler icin ayri bir dns, dns icinde view olusturulabilir buraya bak: http://www.oreillynet.com/pub/a/oreilly/networking/news/views_0501.html + # amac: bir networkde server varsa, o network icinden erisenler icin bu bir local server dir. her desktop da ayri ayri hosts ayari girmek yerine, sunucu bunlara real degil, lokal ip doner. + # bu sayede, kucuk-orta isletmeler icin, sunucunun lokalden cevap vermesi saglanir.. veya dns icinde view destegi, birden cok konfigurasyon v.b... + # to translate Turkish comments, use google translate.. + # $dnstemplocal=str_replace(array('{serial}',"{ip}","{dnsemail}"),array(rand(1,1000),$this->conf['dnsip'],$this->conf['dnsemail']),$dnstemp); + + # $temp=str_replace(array('{serial}',"{ip}","{dnsemail}"),array(rand(1,1000),$this->conf['dnsip'],$this->conf['dnsemail']),$temp); // replace serial,ip,dnsemail etc. Ymds hata veriyordu iptal ettim. bu sorunla ilgilenilecek... + // verdigi hata: Fatal error: date(): Timezone database is corrupt - this should *never* happen! thats why i cannot use date in daemon mode... this seems a php bug.., for tr locale + + if($serverip=='localhost') $file=$this->conf['namedbase'].'/'.$ar1["domainname"]; + else $file="$this->ehcpdir/serverfiles/$serverip/named/".$ar1["domainname"]; + + $success=$success and writeoutput2($file,$dnstemp,"w"); + + // Fix perms on the bind file + $this->fixBindFilePerms($file); + + #$success=$success and writeoutput2($this->conf['namedbase'].$ar1["domainname"].".local",$dnstemplocal,"w"); # bu kisim henuz tamamlanmadi, yani lokal destegi.. + + } + return $success; + +} + +function prepare_dns_named_conf_file($server,$arr){ + $this->requireCommandLine(__FUNCTION__); + $serverip=$server['ip']; + $servertype=$server['servertype']; + + foreach($arr as $ar){ + $ar['namedbase']=$this->conf['namedbase']; + $arr2[]=$ar; + } + + # bind harici dns icin burda modifiye yapilmali + # if($servertype=='binddns') ..... + + $out.=$this->putArrayToStr($arr2,$this->dnsnamedconftemplate); + + if($serverip==localhost) $file=$this->conf['namedbase']."/named_ehcp.conf"; + else $file="$this->ehcpdir/serverfiles/$serverip/named/named_ehcp_produced_by_".$this->miscconfig['dnsip'].'.conf'; + + echo "\n\nwriting namedfile: $file \n\n"; + $success = writeoutput2($file,$out,w); + + // Fix perms on the bind file + $this->fixBindFilePerms($file); + + return $success; + +} + +function new_sync_dns(){ + # will be like this: + $dnsservers=$this->get_dnsservers(); # get server list, server list should determine the type of remote server. currently, default is apache2 + + foreach($dnsservers as $w) $this->prepare_dns_files($w); # for each server in list, call prepare_server_files + foreach($dnsservers as $w) if($w<>'localhost') $this->send_dnsserver_files($w); # send server_files(configs) to destinations. + foreach($dnsservers as $w) $this->restart_dnsserver2($w); + + # done. todo: add domain info to dns as "remote" : this may be done while adding domain. + # done. todo: setup domain ftp in remote or nfs/nas: this may be done while adding domain. + return True; +} + +function restart_dnsserver2($serverip){ + if(is_array($serverip)) $serverip=$serverip['ip']; # accept both until all code is standard. + echo __FUNCTION__.": basliyor: $serverip dns restarting.. \n"; + + if($serverip=='') $serverip='localhost'; + $this->server_command($serverip,getServiceActionStr("bind9", "restart")); + +} + +function adjust_webmail_dirs(){ + # for squirrelmail, which is bundled in ehcp dir, webmail folder. + $localconfig="ehcpdir/webmail/data/'; +\$attachment_dir = '$this->ehcpdir/webmail/data/'; +?>"; + + $success=writeoutput2("$this->ehcpdir/webmail/config/config_local.php",$localconfig,'w',false); + passthru("chmod a+w $this->ehcpdir/webmail/data/"); + + $change_pass_config="dbpass'; +\$dbname='ehcp'; +?>"; + + $success=$success && writeoutput2("$this->ehcpdir/webmail/plugins/ehcp_change_pass/config.php",$change_pass_config,'w',false); + + return $success; +} + +function new_sync_domains($file=''){ + # will be like this: + $webservers=$this->get_webservers(); # get server list, server list should determine the type of remote server. currently, default is apache2 + echo __FUNCTION__.":\n"; + print_r($webservers); + + + $multiserver=false; + foreach($webservers as $w){ + if($this->get_server_access_ip($w[ip])<>'localhost') { + $multiserver=True; + } + } + + if($multiserver) { + echo "\n".__FUNCTION__.": This seems a multiserver ehcp, has more servers than localhost\n"; + foreach($webservers as $w) $this->prepare_webserver_files('',$w); # for each server in list, call prepare_server_files + foreach($webservers as $w) if($w['ip']<>'localhost') $this->send_webserver_files($w); # send server_files(configs) to destinations. + foreach($webservers as $w) $this->restart_webserver2($w); + $success = $this->syncSubdomains();# this func is not multi-server... this is a lack of feature, an important one... under construction. + + sleep(1); + $success=$success && $this->configtest_reload_webserver(); + + sleep(1); + $success=$success && $this->run_lets_encrypt_commands(); + + } else { + echo "\n".__FUNCTION__.": This seems NOT a multiserver ehcp, has only localhost as server\n"; + $this->syncDomains(); + } + + # done. todo: add domain info to dns as "remote" : this may be done while adding domain. + # done. todo: setup domain ftp in remote or nfs/nas: this may be done while adding domain. + return True; +} + + +function new_sync_all(){ + $success=$this->new_sync_domains(); + $success=$success && $this->new_sync_dns(); + + if($success) $this->last_deleted_domaininfo=false; # burada kucuk problem cıkabilir + #$this->conn->AutoExecute('operations',array('op'=>'new_sync_domains3'),'INSERT'); # this is not working, thats why, i need to leave adodb autoinserts.. + return $success; +} + + +function build_logrotate_conf($arr2,$host){ + if($this->debuglevel>0) print_r($arr2); + + foreach($arr2 as $dom) { + $logrotate.=$dom['homedir']."/logs/access_log ".$dom['homedir']."/logs/error_log "; + } + $logrotate.=" /var/log/ehcp.log /var/log/apache_common_access_log { + daily + missingok + compress + delaycompress +}"; + passthru2('mkdir -p '.$this->ehcpdir.'/etc/logrotate.d/'); + writeoutput($this->ehcpdir.'/etc/logrotate.d/ehcp',$logrotate,'w',True); + + $cmd="cp -vf ".$this->ehcpdir.'/etc/logrotate.d/ehcp /etc/logrotate.d/'; + if((!$host) or ($host=='localhost')) passthru2($cmd); # bu kısım bir fonksiyon yapılabilir. + else $this->cmds[]=$cmd; # multi server da kullanmak uzere +} + + +function initializeDomainFiles($dom,$domainname){ # singleserver mode + $this->requireCommandLine(__FUNCTION__); + if ($domainname<>''){ + if($dom['domainname']<>$domainname) return ; # do only requested domains. + } + + $domainname=$dom['domainname']; + $homedir=$dom['homedir']; + $username=$dom['panelusername']; + + passthru2("mkdir -p $homedir/httpdocs"); + + // Create webstats directory and password protection file used to "protect" webstats information from public viewing + passthru2("mkdir -p $homedir/httpdocs/webstats/"); + $this->createPasswordAuthFileForWebstatsDir($homedir, $domainname, $username); + + # put default index + if($this->noExistingIndex($homedir)){ + $filestr=$this->loadTemplate('defaultindexfordomains'); # load template + $findarray=array('webserverip','domainname','localip'); # replace some variables, + $localipcode=""; + + $replacearray=array($this->getWebServer(),$domainname,$localipcode); + $findarray2=arrayop($findarray,"strop"); + $fileout=str_replace($findarray2,$replacearray,$filestr); + + writeoutput2($homedir."/httpdocs/index.php",$fileout,"w"); # put in index file + passthru2("chown $this->ftpowner -Rf $homedir"); + } # ownership is not changed if some files already exists there.. + + $this->initializeLogs($homedir); + $this->initializePhpTmpDir($homedir); + + # adjust some custom file ownerships, for wordpress and some scripts.. + $q="select * from customsettings where domainname='$domainname' and name='fileowner' and `value`<>'root'"; + $ownership=$this->query($q); + + foreach($ownership as $ow) { + echo "Adjusting custom file ownership: \n"; + passthru2("chown ".$ow['value']." -Rf $homedir/httpdocs/".$ow['value2']); + #$this->pwdls('file ownership:',"$homedir/httpdocs/".$ow['value2']); + } + + + # put some files if not exists: + foreach(array('ehcpinfo.html','error_page.html') as $f) { + if(!file_exists("$homedir/httpdocs/$f")){ + passthru2("cp -f $f $homedir/httpdocs/"); + } + } + + writeoutput2($homedir."/UPLOAD_SITE_FILES_TO_httpdocs_FOLDER","","w"); // z7 mod + passthru2("cp ".$this->ehcpdir."/z7/install_files/.htaccess ".$homedir."/phptmpdir/.htaccess"); // z7 mod + if($this->noExistingIndex($homedir)){ + passthru2("cp ".$this->ehcpdir."/z7/install_files/domain_index.php ".$homedir."/index.php"); // z7 mod + } + +} + +function createPasswordAuthFileForWebstatsDir($home, $domain, $username){ + $webstatsAuthFile = $home . "/" . $this->webstats_auth_file; + if($this->hasValueOrZero($home) && $this->hasValueOrZero($domain) && $this->hasValueOrZero($username)){ + if(!file_exists($webstatsAuthFile)){ + // Create authentication file + $buildAuthFileCommand = "htpasswd -b -c '" . $webstatsAuthFile . "' '" . $domain . "' '" . $username . "'"; + + // Create the password directory + passthru2($buildAuthFileCommand, true, true); + + // Set proper permissions on the authentication file used for the webstats directory + passthru2("chown " . $this->wwwuser . ":" . $this->wwwgroup . " " . $webstatsAuthFile, true, true); + passthru2("chmod 644 $webstatsAuthFile", true, true); + + return true; + } + } + return false; +} + +function getWebStatsProtectionDirective($dom, $webserv){ + $string = ""; + $httpdocs = $dom["homedir"] . "/httpdocs"; + $webstatsAuthFile = $dom["homedir"] . "/" . $this->webstats_auth_file; + $pathToWebstats = $dom["homedir"] . "/httpdocs/webstats"; + $nginxRelativePathToWebstats = "webstats"; + if(file_exists($pathToWebstats)){ + if($webserv == "nginx"){ + $string = " + location ^~ /" . $nginxRelativePathToWebstats . "/ { + root " . $httpdocs . "; + auth_basic \"Restricted Area\"; + auth_basic_user_file $webstatsAuthFile; + }"; + }else if($webserv == "apache2"){ + $string = " + + AuthType Basic + AuthName \"Authentication Required\" + AuthUserFile \"" . $webstatsAuthFile . "\" + Require valid-user + + Order allow,deny + Allow from all + "; + } + } + return $string; +} + +function syncDomains($file='',$domainname='') { + $webservertype=$this->miscconfig['webservertype']; + $templatefield=$webservertype.'template'; + + $this->requireCommandLine(__FUNCTION__); + + echo "\nstart syncing domains\nlocalip:".$this->miscconfig['localip'].", dnsip:".$this->miscconfig['dnsip']."\nwebservertype:".$this->miscconfig['webservertype']."\n"; + if($file=='') $file="apachehcp.conf"; + $filt=andle($this->activefilt,"(serverip is null or serverip='') and homedir<>'' order by theorder"); # exclude where serverip is set, that is, for remote dns hosted only domains.. + + if($domainname<>'') { + echo "###>> syncdomain is initialising files only for a single domain: $domainname !!\n"; + } + + $arr=$this->getDomains($filt); + if($this->debuglevel>0) print_r($arr); + + $webserverip=$this->getWebServer(); + echo "\nwebserverip: $webserverip\n"; + + $success=True; + $arr_customhttp=$this->query("select * from ".$this->conf['customstable']['tablename']." where name='customhttp' and (webservertype is null or webservertype='' or webservertype='".$this->miscconfig['webservertype']."')"); + $arr2=array(); + + $webserver_template_filename="$this->ehcpdir/apachetemplate"; # this file may be an apache template actually, or an nginx template, code will be fixed later.. + $globalWebServerTemplate = $this->getGlobalDomainTemplate(); + + $ips=array(); + + foreach($arr as $dom) { // setup necessry dirs/files if doesnt exist.. + $this->initializeDomainFiles($dom,$domainname); + + # add customhttp to array, + $customhttpvalue=''; + + if($arr_customhttp) + foreach($arr_customhttp as $cust) { + if($cust['domainname']==$dom['domainname']) $customhttpvalue.=$cust['value']."\n"; # this loop prevents repetitive mysql query, thus faster execution. + } + + if($this->miscconfig['webservertype'] == "nginx"){ + $dom['password_protected_dirs'] = $this->getNginxPasswordProtectedSubDirectoriesByDomain($dom['domainname']); + $dom['root_password_protected_dirs'] = $this->getNginxPasswordProtectedRootDirectoriesByDomain($dom['domainname']); + }else{ + $dom['password_protected_dirs'] = $this->getApachePasswordProtectedSubDirectoriesByDomain($dom['domainname']); + $dom['root_password_protected_dirs'] = $this->getApachePasswordProtectedRootDirectoriesByDomain($dom['domainname']); + } + + if(file_exists($dom['homedir'] . "/" . $this->webstats_auth_file)){ + $dom['webstats_password_protection'] = $this->getWebStatsProtectionDirective($dom, $this->miscconfig['webservertype']); + }else{ + $dom['webstats_password_protection'] = ""; + } + + // Get redirection for domain if any + $dom['domainname_redirect'] = $this->getRedirectDomain($dom['domainname']); + + // Get custom ssl certs for domain if any + $sslInfo = $this->getSSLSettingForDomain($dom['domainname']); + if(!empty($sslInfo["cert"])){ + + echo "\nUsing custom SSL certificate for domain " . $dom['domainname'] . ".\n"; + + $certPath = $dom['homedir'] . "/phptmpdir/server.crt"; + $certKeyPath = $dom['homedir'] . "/phptmpdir/server.key"; + $certChainPath = $dom['homedir'] . "/phptmpdir/chain.crt"; + $certMixedPathNginx = $dom['homedir'] . "/phptmpdir/mixed.crt"; + + if(file_exists($certPath)){ + $dom['ssl_cert_path'] = $certPath; + }else{ + // Use default server one + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + } + if(file_exists($certKeyPath)){ + $dom['ssl_cert_key_path'] = $certKeyPath; + }else{ + // Use default server one + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + } + if(file_exists($certChainPath)){ + $dom['ssl_cert_chain_setting_with_path'] = "SSLCertificateChainFile " . $certChainPath; + }else{ + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + + // For nginx + if($this->miscconfig['webservertype'] == "nginx" && file_exists($certMixedPathNginx) && file_exists($certKeyPath)){ + $dom['ssl_cert_path'] = $certMixedPathNginx; + } + }else if($sslInfo["letsenc"] && empty($sslInfo["cert"])){ + echo "\nUsing Let's Encrypt SSL certificate for domain " . $dom['domainname'] . ".\n"; + $dmnNamesToEncrypt = array($dom['domainname']); + $parts = explode(".", $dom['domainname']); + if(count($parts) <= 2){ + array_push($dmnNamesToEncrypt, "www." . $dom['domainname']); + } + $encDomains["domainnames"] = $dmnNamesToEncrypt; + $encDomains["domainpath"] = $dom['homedir'] . "/httpdocs"; + $this->getAndUseLetsEncryptCert($encDomains, $this->getClientEmailFromPanelUsername($dom['panelusername'])); + + // Admin function... parse extra hosts which take this format... this is an advanced option only + // Takes the format of ns3.otherdomain.com{skipdomain},ns4=/var/www/new/ehcp;nextsubhost,n88,a9=/location + if(isset($sslInfo["lets_enc_additional_hosts"]) && !empty($sslInfo["lets_enc_additional_hosts"])){ + $subdoms=$this->getSubDomains("domainname = '" . $dom['domainname'] . "'"); + if(is_array($subdoms) && count($subdoms) > 0){ + $subdomsDomain = array_map(create_function('$ar', 'return $ar["subdomain"];'), $subdoms); + }else{ + $subdomsDomain = array(); + } + + if(strrpos($sslInfo["lets_enc_additional_hosts"], ";") !== false){ + $entries = explode(";", $sslInfo["lets_enc_additional_hosts"]); + $entries = array_filter($entries); + }else{ + $entries = array($sslInfo["lets_enc_additional_hosts"]); + } + + foreach($entries as $entry){ + $hostSpecificPath = ""; + $hostArray = array(); + + if(strrpos($entry, "=") !== false){ + $settings = explode("=", $entry); + if(count($settings) == 2){ + $hosts = $settings[0]; + $hostSpecificPath = $settings[1]; + if(!empty($hosts) && !empty($hostSpecificPath)){ + if(strrpos($hosts, ",") !== false){ + $hostArray = explode(",", $hosts); + $hostArray = array_filter($hostArray); + }else{ + $hostArray = array($hosts); + } + } + } + }else{ + if(strrpos($entry, ",") !== false){ + $hostArray = explode(",", $entry); + $hostArray = array_filter($hostArray); + }else{ + $hostArray = array($entry); + } + } + + if(isset($hostArray) && is_array($hostArray)){ + foreach($hostArray as $h){ + $appendDomainNameToEnd = true; + + if(stripos($h, "{skipdomain}") !== false){ + $appendDomainNameToEnd = false; + $h = str_replace("{skipdomain}", "", $h); + } + + $h = removeInvalidChars($h, "domainname"); + if(!in_array($h, $subdomsDomain) && $h != "www" && $h != $dom['domainname'] && stripos($h, $dom['domainname']) === false){ + if($appendDomainNameToEnd){ + $hostArrayFinal[] = $h . "." . $dom['domainname']; + }else{ + $hostArrayFinal[] = $h; + } + } + } + } + + if(isset($hostArrayFinal) && is_array($hostArrayFinal) && count($hostArrayFinal) > 0){ + if($this->hasValueOrZero($hostSpecificPath)){ + $encDomainsExtraAdmin["domainpath"] = $hostSpecificPath; + }else{ + $encDomainsExtraAdmin["domainpath"] = $dom['homedir'] . "/httpdocs"; + } + $encDomainsExtraAdmin["domainnames"] = $hostArrayFinal; + $this->getAndUseLetsEncryptCert($encDomainsExtraAdmin, $this->getClientEmailFromPanelUsername($dom['panelusername'])); + } + } + } + + // END ADVANCED LOGIC + + if(file_exists("/etc/letsencrypt/live/" . $dom['domainname'] . "/fullchain.pem")){ + $dom['ssl_cert_path'] = "/etc/letsencrypt/live/" . $dom['domainname'] . "/fullchain.pem"; + $dom['ssl_cert_key_path'] = "/etc/letsencrypt/live/" . $dom['domainname'] . "/privkey.pem"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + }else{ + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + }else{ + echo "\nUsing global server SSL certificate for domain " . $dom['domainname'] . ".\n"; + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + + $dom['customhttp']=$customhttpvalue; + + # add ServerAlias to begining of lines in aliases field + $aliases=$dom['aliases']; + $aliasarr=explode("\n",$aliases); + $newaliases=""; + foreach($aliasarr as $al) if(trim($al)<>'') $newaliases.="ServerAlias ".trim($al)." \n"; # this is apache specific code, should be fixed later. + $dom['aliases']=$newaliases; + $dom['webserverip']=$webserverip; # taken from system ip setting. + + + if($dom['webserverips']<>'') { + list($i)=explode(',',$dom['webserverips']); + if(validateIpAddress($i)){ + echo "\nThis domain has custom webserverips,adjusting:".$dom['domainname'].":".$dom['webserverips']; + $dom['webserverip']=$i; # if entered in db exclusively. # diger ip ler ne olacak ? sanirim multiserver fonksiyonlarinda halledilecek... + switch($this->miscconfig['webservertype']){ + case 'apache2': $webserver_template_filename="$this->ehcpdir/apachetemplate_ipbased";break; + # other servers, if multi-ip supported, it seems no change needed for nginx + } + if(!in_array($i,$ips)) $ips[]=$i; + if(!in_array($webserverip,$ips)) $ips[]=$webserverip; # add default ip too. + } + } + + + $arr2[]=$dom; + } + + # here write config to apachehcp.conf file. + # you may see daemon mode output at logfile, typically tail -f /var/log/ehcp.log from command line + + echo "\n**Syncing domains for webserver type of (".$this->miscconfig['webservertype']."):"; + if($this->debuglevel>0) print_r($arr2); + if($this->debuglevel>0) print_r($ips); + + $this->build_logrotate_conf($arr2,'localhost'); + + #begin: reconstruct apache config file: + $fileout="# This is an automatically generated file, by ehcp. Do not edit this file by hand. if you need to change webserver configs, edit apachetemplate(or similar) file (to take effect for all domains) in ehcp dir, or use (custom http or edit webserver/apache template to take effect for single domain) in ehcp gui \n"; + + if($this->miscconfig['webservertype']=='apache2') { + foreach($ips as $i){# eger ipler kullanılacaksa + $fileout.="\nNameVirtualHost $i\n"; + } + } + + if(count($arr2)>0) { + $alanlar=array_keys($arr2[0]); // gets array keys, from first(0th) array element of two-dimensional $arr2 array. + + // following code, replaces fields from template to values here in $arr2 two-dim array. each $arr2 element written to output file according to template file. + $replacealanlar=arrayop($alanlar,"strop"); + $webserver_template_file=file_get_contents($webserver_template_filename); + + $sslenabled=strstr($webserver_template_file,"{webserverip}")!==false; + # *1 if template file contains {webserverip} then, ssl/ipbased is assumed to enabled on apache configs. + # in this case, non-ssl/ipbased custom http's are disabled to prevent apache config error. All custom http's should be fixed by admin in this case. + + if ($sslenabled) $this->echoln("ssl/ipbased seems enabled in this server, because tag {webserverip} is found in apache config templates files.."); # this is a bit apache specific code. + else $this->echoln("ssl/ipbasedseems not enabled in this server, because tag {webserverip} is not found in apache config templates files.."); + + + foreach($arr2 as $ar1) {// template e gore apache dosyasini olustur + $webserver_template=$ar1[$templatefield];# get domain specific (custom) template + if($webserver_template=='' and $ar1['apachetemplate']<>'') $webserver_template=$ar1['apachetemplate']; # be backward compatible, for older installs.. + + if($webserver_template<>'') { + $this->echoln2("Domain:".$ar1['domainname']." has custom webserver template."); + $webserver_template.="\n#this last template is read from database for ".$ar1['domainname']."..\n\n"; + + if($sslenabled and strstr($webserver_template,"{webserverip}")===false){ + $this->echoln("apache config is adjusted as ssl/ipbased enabled, however, your custom http for this domain contains non-ssl/ipbased custom http, so, I disable custom http for this domain:".$ar1['domainname']); + $webserver_template=$webserver_template_file; # read explanation above *1 + } elseif(!$sslenabled and strstr($webserver_template,"{webserverip}")!==false){ + $this->echoln("apache config is adjusted as non-ssl/ipbased enabled, however, your custom http for this domain contains ssl/ipbased custom http, so, I disable custom http for this domain:".$ar1['domainname']); + $webserver_template=$webserver_template_file; # read explanation above *1 + } + }else if(!empty($globalWebServerTemplate)){ + $this->echoln2("Domain:".$ar1['domainname']." should use the global admin templated domain template!"); + $webserver_template = $globalWebServerTemplate; + } else { + $stripSSLSectionFromTemplate = false; + $stripNonSSLSectionFromTemplate = false; + $this->echoln2("Domain:".$ar1['domainname']." should use the default domain template!"); + $webserver_template=$webserver_template_file; + + $sslInfo = $this->getSSLSettingForDomain($ar1['domainname']); + + if(strtolower($this->miscconfig['useglobalsslcert']) != 'yes' && $this->miscconfig['webservermode'] == 'ssl'){ + if(empty($sslInfo["cert"]) && empty($sslInfo["letsenc"])){ + $stripSSLSectionFromTemplate = true; + }else{ + $stripSSLSectionFromTemplate = false; + } + } + + if($this->miscconfig['webservermode'] == 'ssl' && $sslInfo["redir_https"] && !$stripSSLSectionFromTemplate){ + $stripNonSSLSectionFromTemplate = true; + } + + // If the domain should be redirected, we need to use a different webserver_template_file + if(!empty($ar1['domainname_redirect'])){ + $this->echoln("domain redirect is set to: " . $ar1['domainname_redirect'] . " for the domain of " . $ar1['domainname'] . "!"); + $webserver_template=file_get_contents($this->ehcpdir . "/apachetemplate_redirect"); + + // See if we should include the request URI as part of the redirect template (a redirect URL without a slash in it) + $removeProt = array("https://", "http://"); + $nameWithoutHTTP = str_replace($removeProt, '', $ar1['domainname_redirect']); + if(stripos($nameWithoutHTTP, '/') !== false){ + if($this->miscconfig['webservertype'] == "nginx"){ + $webserver_template = str_replace('{domainname_redirect}$request_uri', '{domainname_redirect}', $webserver_template); + }else if($this->miscconfig['webservertype'] == "apache2"){ + $webserver_template = str_replace('{domainname_redirect}%{REQUEST_URI}', '{domainname_redirect}', $webserver_template); + } + } + }else{ + if($stripSSLSectionFromTemplate === true){ + $this->echoln2("Removing SSL portions from template for domain " . $ar1['domainname']); + $webserver_template = stripContentsAfterLine("# FOR SSL CONFIG", $webserver_template); + } + + if($stripNonSSLSectionFromTemplate === true && !$stripSSLSectionFromTemplate){ + $this->echoln2("Removing Non-SSL portions from template for domain " . $ar1['domainname'] . " and redirecting all standard HTTP requests to HTTPS!"); + $redirectTemplate = file_get_contents($this->ehcpdir . "/apachetemplate_redirect"); + $httpOnlyRedirect = stripContentsAfterLine("# FOR SSL CONFIG", $redirectTemplate); + $httpOnlyRedirect = str_replace("{domainname_redirect}", "https://{domainname_redirect}", $httpOnlyRedirect); + $ar1['domainname_redirect'] = $ar1['domainname']; + + if($this->miscconfig['webservertype'] == "nginx"){ + $ar1['domainname_redirect'] = '$host'; + }else{ + $ar1['domainname_redirect'] = '%{HTTP_HOST}'; + } + + $webserver_template = getContentsAfterLine("# FOR SSL CONFIG", $webserver_template); + $webserver_template = $httpOnlyRedirect . "\n" . $webserver_template; + } + } + } + + + if($this->miscconfig['enablewildcarddomain']<>'') $wildcard='*.{domainname}'; + else $wildcard=''; + + # replace some fields that does not exist in domain array + $webserver_template=str_replace(array('{ehcpdir}','{localip}','{wildcarddomain}'),array($this->ehcpdir,$this->miscconfig['localip'],$wildcard),$webserver_template); + $webserver_config=str_replace($replacealanlar,$ar1,$webserver_template); + $fileout.=$webserver_config; + } + } + + $res=writeoutput2($file,$fileout,'w',false); + if($res) { + $this->echoln("Domain list exported (syncdomains) webserver conf to: $file \n"); + } + else $success=false; + # end: reconstruct apache config file: + + + + #process passive domains + $passivedomains=$this->getDomains($this->passivefilt); + echo "Passive domains:\n"; + print_r($passivedomains); + + $passives=array(); + foreach($passivedomains as $p){ + if($ssl_enabled){ + $p['webserverip']=$webserverip; + } + $this->initializeDomainFiles($p,$domainname); + $passives[]=$p; + } + + $this->putArrayToFile($passivedomains,"apachehcp_passivedomains.conf","apachetemplate_passivedomains"); + + $passiveindex=$this->miscconfig['passiveindexfile']; + if($passiveindex=='') $passiveindex=$this->sayinmylang("domain_deactivated_contact_administrator"); + writeoutput2("/var/www/passivedomains/index.html",$passiveindex,'w',false); + # end processs passive domains + + # Add a second of wait time between functions. by eric. + # I've seen some strange issues regarding the exit status of apache2ctl + + sleep(1); + $success=$success && $this->syncSubdomains('',$domainname); + + sleep(1); + $success = $success && $this->syncGlobalPanelURLS(); + + sleep(1); + $this->handleGlobalTemplatesForBaseWebserverFiles(); + + sleep(1); + $success=$success && $this->configtest_reload_webserver(); + + sleep(1); + $success=$success && $this->run_lets_encrypt_commands(); + + if($this->miscconfig['updatehostsfile']<>'') $this->updateHostsFile(); + + return $success; +} + +function getClientEmailFromPanelUsername($panelusername){ + $user = $this->getPanelUserInfo('', $panelusername); + if($user){ + if($this->hasValueOrZero($user["email"])){ + return $user["email"]; + } + } + + if($this->hasValueOrZero($this->conf['adminemail'])){ + return $this->conf['adminemail']; + } + + return $this->emailfrom; +} + +function getAdminEmailAddress(){ + if($this->hasValueOrZero($this->conf['adminemail'])){ + return $this->conf['adminemail']; + } + + return $this->emailfrom; +} + +function getAndUseLetsEncryptCert($domains, $emailAddr){ + // Domains is an associative array made up of "domainnames" with an array of domains / subdomain strings and "domainpath" containing the physical path string where the shared document root is. + $commandStr = ""; + $endCommandStr = ""; + $firstDomainInList = ""; + $wrapperCmd = ""; + $wrapperEndCmd = ""; + $letsEncStr = "/usr/local/bin/certbot certonly --quiet --webroot --agree-tos --email " . $emailAddr; + + // Loop through each domain in the list and append commands to the Let's Encrypt string + $i = 0; + foreach($domains["domainnames"] as $domain){ + $letsEncStr .= " -d " . $domain; + if($i == 0){ + // Set first domain + $firstDomainInList = $domain; + + // Create lets encrypt path, symlink the current server wide key as a fallback, and then run the commands + passthru2("mkdir -p /etc/letsencrypt/live/" . $domain, true, true); + passthru2("ln -s /etc/ssl/private/server.key /etc/letsencrypt/live/" . $domain . "/privkey.pem", true, true); + passthru2("ln -s /etc/ssl/certs/server.crt /etc/letsencrypt/live/" . $domain . "/fullchain.pem", true, true); + } + + $commandStr .= "if [ -e /etc/letsencrypt/live/" . $domain . " ]; then" . "\n"; + $commandStr .= "mv /etc/letsencrypt/live/" . $domain . " /etc/letsencrypt/live/" . $domain . "_before_certbot" . "\n"; + $commandStr .= "fi" . "\n"; + $endCommandStr .= "if [ -e /etc/letsencrypt/live/" . $domain . " ]; then" . "\n"; + $endCommandStr .= "rm -rf /etc/letsencrypt/live/" . $domain . "_before_certbot" . "\n"; + $endCommandStr .= "else" . "\n"; + $endCommandStr .= "if [ -e /etc/letsencrypt/live/" . $domain . "_before_certbot ]; then" . "\n"; + $endCommandStr .= "mv /etc/letsencrypt/live/" . $domain . "_before_certbot /etc/letsencrypt/live/" . $domain . "\n"; + $endCommandStr .= "fi" . "\n"; + $endCommandStr .= "fi" . "\n"; + + $i++; + } + $letsEncStr .= " -w " . $domains["domainpath"] . " >> /var/log/ehcp.log" . "\n"; + + // Move htaccess which may prevent lets encrypt from installing... move it back when the command is run + if(file_exists($domains["domainpath"] . "/.htaccess")){ + $commandStr .= "mv " . $domains["domainpath"] . "/.htaccess" . " " . $domains["domainpath"] . "/.htaccess2" . "\n"; + $endCommandStr .= "mv " . $domains["domainpath"] . "/.htaccess2" . " " . $domains["domainpath"] . "/.htaccess" . "\n"; + } + + // Commands to set proper permissions on the domain directory + $commandStr .= "chown -Rf " . $this->wwwuser . ":" . $this->wwwgroup . " " . $domains["domainpath"] . "\n"; + $commandStr .= "chmod 775 -R " . $domains["domainpath"] . "\n"; + + if($firstDomainInList != ""){ + $wrapperCmd = "if [ ! -e /etc/letsencrypt/archive/" . $firstDomainInList . " ]; then" . "\n"; + $wrapperEndCmd = "fi" . "\n"; + } + + // The final command + $finalCommand = "#!/bin/bash" . "\n" . $wrapperCmd . $commandStr . $letsEncStr . $endCommandStr . "\n" . $wrapperEndCmd; + + + // Write all commands to a file + $stream = fopen("/var/www/new/ehcp/scripts/lets_enc.conf", "a+"); + fwrite($stream, $finalCommand); + fclose($stream); + + return true; +} + +function updateHostsFile(){ + # update hosts file, so that user on server desktop can reach the website. + $this->requireCommandLine(__FUNCTION__); + + $this->echoln("Updating hosts file...\n"); + + $count = 0; + + $ip=$this->miscconfig['localip']; + if(!$ip) $ip=$this->getLocalIP(); + if(trim($ip)=='') return True; + + $doms=$this->getDomains(""); + #print_r($doms); + $line="\n" . $ip; + foreach($doms as $domain) { + # Limit entries per line to avoid problems due to the line being too long + # 255 Character Limit Per Line + if($count == 2){ + $line .= '\n' . $ip; + $count = 0; + } + $line.=" www.".$domain['domainname']." ".$domain['domainname']." mail.".$domain['domainname'] . " ehcp.".$domain['domainname']; + $count++; + } + + // Don't forget to add subdomains to the hosts file too! + $subdoms=$this->getSubDomains(""); + foreach($subdoms as $sub) { + # Limit entries per line to avoid problems due to the line being too long + # 255 Character Limit Per Line + if($count == 2){ + $line .= '\n' . $ip; + $count = 0; + } + $line.=" www." . $sub['subdomain'] . '.' . $sub['domainname'] . " " . $sub['subdomain'] . '.' . $sub['domainname']; + $count++; + } + + # Causes issues because localhost is already defined in its own line + // $line.=" localhost"; + echo "updating hosts file: ip: ($ip) line: ($line)\n "; + passthru2("bash /var/www/new/ehcp/updateHostsFile.sh \"$line\""); + # No longer needed + //replaceOrAddLineInFile("$ip ",$line,"/etc/hosts"); + echo "update complete\n"; + + return True; +} + +function initializeLogs($dir){ + + passthru2("mkdir -p ".$dir); + passthru2("mkdir -p ".$dir."/logs"); + $this->write_file_if_not_exists("$dir/logs/access_log","");// these are defined in apachetemplate file, bunlarin log_rotate olayi yapilmali. + $this->write_file_if_not_exists("$dir/logs/error_log",""); + + #passthru2("chown $this->ftpowner -Rf $dir"); + # this caused problem especially for file upload scripts, + + passthru2("chown root:root -Rf $dir/logs"); # bu olmayinca, biri logs dizinini silince, apache hata verip cikiyor.. # suanda access ver error loglar silinemiyor kullanici tarafindan...ancak sunucudan ssh ile silinebilir...! +} + +function initializePhpTmpDir($subdir){ + passthru2("mkdir -p $subdir/phptmpdir"); + passthru2("chown $this->ftpowner -Rf $subdir/phptmpdir"); # **** Buradaki problem şu: phptmpdir içinde yeni oluşturulan dosyalar -rw------- 1 www-data www-data şeklinde oluşturuluyor. burası da sahipliğini vsftpd yapınca, artık apache bunu silemez oluyor. burayı -rw-rw--- şeklinde yapmak lazım. Problem: http://ehcp.net/?q=node/1351#comment-2831 ; Bunu umask ile çözdüm sanırım. + passthru2("chmod a+w -Rf $subdir/phptmpdir"); +} + +function initializeDir($dir){ + passthru2("mkdir -p ".$dir); + passthru2("chown $this->ftpowner -Rf ".$dir); +} + +function write_file_if_not_exists($file,$content){ + if(!file_exists($file)) { + writeoutput($file,$content,'w',false); + } +} + +function initialize_subdomain_files($dom,$domainname){ + if ($domainname<>''){ + if($dom['domainname']<>$domainname) return ; # do only requested domains. + } + + $subdir=$dom['homedir']; + + $this->initializeLogs($subdir); + $this->initializePhpTmpDir($subdir); + $this->initializeDir($subdir); + +} + +function resyncCourierSSL(){ + $this->requireCommandLine(__FUNCTION__); + echo "Restarting Courier IMAP and POP3 SSL services!\n"; + manageService("courier-imap-ssl", "restart"); + manageService("courier-pop-ssl", "restart"); + + return true; +} + +function handleCourierSSLCert(){ + $this->requireCommandLine(__FUNCTION__); + + // Echo statements for debug and showing in the log + echo "Updating Courier IMAP and POP3 SSL certificate!\n"; + + // Load latest config + $this->loadConfigWithDaemon(); + + // Variables + $imapdOrigPath = "/etc/courier/imapd_original.pem"; + $pop3dOrigPath = "/etc/courier/pop3d_original.pem"; + $imapdPath = "/etc/courier/imapd.pem"; + $pop3dPath = "/etc/courier/pop3d.pem"; + + if($this->hasValueOrZero($this->miscconfig['sslcouriercertpath'])){ + $sslCourierPath = $this->miscconfig['sslcouriercertpath']; + if(file_exists($sslCourierPath) && isextension($sslCourierPath,'pem')){ + echo "Using certificate from $sslCourierPath for POP3-SSL and IMAP-SSL!\n"; + + if(!file_exists($imapdOrigPath)){ + echo "Saving a copy of the default IMAP-SSL certificate to " . $imapdOrigPath . "\n"; + rename($imapdPath, $imapdOrigPath); + }else{ + // Make a copy + $copyPath = $imapdPath . "_" . date('Y_m_d_H_i_s'); + echo "Saving a copy of the current IMAP-SSL certificate to " . $copyPath . "\n"; + rename($imapdPath, $copyPath); + } + + if(!file_exists($pop3dOrigPath)){ + echo "Saving a copy of the default POP3-SSL certificate to " . $pop3dOrigPath . "\n"; + rename($pop3dPath, $pop3dOrigPath); + }else{ + // Make a copy + $copyPath = $pop3dPath . "_" . date('Y_m_d_H_i_s'); + echo "Saving a copy of the current POP3-SSL certificate to " . $copyPath . "\n"; + rename($pop3dPath, $copyPath); + } + + // Create a symlink which will point to the user's certpath... Let's Encrypt certificates will update, so I can see this working nicely. + passthru2("ln -sf " . $sslCourierPath . " " . $imapdPath, true, true); + passthru2("ln -sf " . $sslCourierPath . " " . $pop3dPath, true, true); + $this->resyncCourierSSL(); + }else{ + echo "Proposed certificate path of \"" . $sslCourierPath . "\" does NOT exist!\n"; + } + }else{ + echo "Restoring default SSL certificate for POP3-SSL and IMAP-SSL!\n"; + + // Restore default cert if it exists + if(file_exists($imapdOrigPath)){ + unlink($imapdPath); + rename($imapdOrigPath, $imapdPath); + manageService("courier-imap-ssl", "restart"); + } + + // Restore default cert if it exists + if(file_exists($pop3dOrigPath)){ + unlink($pop3dPath); + rename($pop3dOrigPath, $pop3dPath); + manageService("courier-pop-ssl", "restart"); + } + } + + return true; +} + +function syncGlobalPanelURLS(){ + $this->requireCommandLine(__FUNCTION__); + + // Echo statements for debug and showing in the log + echo "Running syncGlobalPanelURLS!\n"; + + // Load latest config + $this->loadConfigWithDaemon(); + + $write = false; + if($this->hasValueOrZero($this->miscconfig['globalpanelurls'])){ + + echo "Global URLs are " . $this->miscconfig['globalpanelurls'] . "\n"; + + $currentGlobalURLs = $this->miscconfig['globalpanelurls']; + if(stripos($currentGlobalURLs, ",") !== FALSE){ + $entries = explode(",", $currentGlobalURLs); + }else{ + $entries = array($currentGlobalURLs); + } + + foreach($entries as $entry){ + $entry = removeInvalidChars($entry, "domainname"); + if($this->hasValueOrZero($entry)){ + $processedEntries[] = $entry; + } + } + + echo "Processed and validated global panel URL entries are: " . print_r($processedEntries, true) . "\n"; + + if(isset($processedEntries) && is_array($processedEntries) && count($processedEntries) > 0){ + $firstDomain = $processedEntries[0]; + + $fullDomainList = implode(" ", $processedEntries); + + if($this->miscconfig['webservermode'] == "ssl" || $this->miscconfig['webservermode'] == "sslonly"){ + + // Get ready to set it up to use Let's Encrypt + echo "Server has SSL enabled... using Let's Encrypt for the global panel URL entries " . $fullDomainList . "\n"; + + if(!file_exists("/etc/letsencrypt/live/" . $firstDomain . "/fullchain.pem")){ + echo "Let's Encrypt certificates do NOT exist for the global panel URL entries " . $fullDomainList . "... requesting certificates now...\n"; + $this->getAndUseLetsEncryptCert(array('domainnames'=>$processedEntries, 'domainpath'=>$this->ehcpdir), $this->getAdminEmailAddress()); + }else{ + echo "Let's Encrypt certificates already exist for the global panel URL entries " . $fullDomainList . "\n"; + } + + if(file_exists("/etc/letsencrypt/live/" . $firstDomain . "/fullchain.pem")){ + $dom['ssl_cert_path'] = "/etc/letsencrypt/live/" . $firstDomain . "/fullchain.pem"; + $dom['ssl_cert_key_path'] = "/etc/letsencrypt/live/" . $firstDomain . "/privkey.pem"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + }else{ + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + } + + + + if($this->hasValueOrZero($fullDomainList)){ + $dom['domainname'] = $fullDomainList; + $dom['ehcpdir'] = $this->ehcpdir; + + if($this->miscconfig['webservertype']=='apache2'){ + $dom['domainname'] = $firstDomain; + + // Set the aliases by removing the first domain from the array and then expanding it + array_shift($processedEntries); + $dom['domainname_alias'] = implode(" ", $processedEntries); + } + + // Wrap brackets around the array keys + $keys = array_keys($dom); + $replaceArray=arrayop($keys,"strop"); + + $templateContents = file_get_contents($this->ehcpdir . "/apachetemplate_ehcp_panel"); + $finalContent = str_replace($replaceArray, $dom, $templateContents); + if($this->hasValueOrZero($finalContent)){ + $write = true; + file_put_contents($this->ehcpdir . "/apachehcp_globalpanelurls.conf", $finalContent); + } + } + } + } + + // If there was nothing to write, we want to clear the file + if($write === false){ + file_put_contents($this->ehcpdir . "/apachehcp_globalpanelurls.conf", ""); + } + + return true; +} + +function syncSubdomains($file='',$domainname) { + $this->requireCommandLine(__FUNCTION__); + $this->echoln("Synchronizing subdomains...\n"); + if($file=='') $file="apachehcp_subdomains.conf"; + $arr=$this->query("select * from ".$this->conf['subdomainstable']['tablename']); + $webserverip=$this->getWebServer(); + $success=True; + + $arr2=array(); + $ips=array(); + $webserver_template_filename="$this->ehcpdir/apache_subdomain_template"; + $globalSubdomainTemplate = $this->getGlobalSubDomainTemplate(); + + if($arr) + foreach($arr as $dom) { // setup necessry dirs/files if doesnt exist.. + $subdir=$dom['homedir']; + print "\nProcessing subdir: $subdir \n"; + $this->initialize_subdomain_files($dom,$domainname); + + $dom['customsubdomainhttp']=''; + $dom['webserverip']=$webserverip; + + # modified at 1.4.2012 + if($dom['webserverips']<>'') { + list($i)=explode(',',$dom['webserverips']); + if(validateIpAddress($i)){ + echo "\nThis subdomain has custom webserverips,adjusting:".$dom['subdomain'].".".$dom['domainname'].":".$dom['webserverips']; + $dom['webserverip']=$i; # if entered in db exclusively. # diger ip ler ne olacak ? sanirim multiserver fonksiyonlarinda halledilecek... + switch($this->miscconfig['webservertype']){ + case 'nginx': $webserver_template_filename="$this->ehcpdir/etc/nginx/apache_subdomain_template.nginx";break; + # other servers, if multi-ip supported, it seems no change needed for nginx + } + if(!in_array($i,$ips)) $ips[]=$i; + if(!in_array($webserverip,$ips)) $ips[]=$webserverip; # add default ip too. + } + } + + // Get custom ssl certs for domain if any + $rootDomainHomeDir = substr($dom['homedir'], 0, stripos($dom['homedir'], $dom['domainname'])) . $dom['domainname']; + $fullSubdomainStr = $dom['subdomain'] . "." . $dom['domainname']; + + $sslInfo = $this->getSSLSettingForDomain($dom['domainname']); + if(!empty($sslInfo["cert"]) && $sslInfo["wildcard"]){ + echo "\nUsing wildcard custom SSL certificate for subdomain " . $fullSubdomainStr . ".\n"; + $certPath = $rootDomainHomeDir . "/phptmpdir/server.crt"; + $certKeyPath = $rootDomainHomeDir . "/phptmpdir/server.key"; + $certChainPath = $rootDomainHomeDir . "/phptmpdir/chain.crt"; + $certMixedPathNginx = $rootDomainHomeDir . "/phptmpdir/mixed.crt"; + + if(file_exists($certPath)){ + $dom['ssl_cert_path'] = $certPath; + }else{ + // Use default server one + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + } + if(file_exists($certKeyPath)){ + $dom['ssl_cert_key_path'] = $certKeyPath; + }else{ + // Use default server one + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + } + if(file_exists($certChainPath)){ + $dom['ssl_cert_chain_setting_with_path'] = "SSLCertificateChainFile " . $certChainPath; + }else{ + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + + // For nginx + if($this->miscconfig['webservertype'] == "nginx" && file_exists($certMixedPathNginx) && file_exists($certKeyPath)){ + $dom['ssl_cert_path'] = $certMixedPathNginx; + } + }else if($sslInfo["letsenc"] && empty($sslInfo["cert"])){ + echo "\nUsing Let's Encrypt SSL certificate for subdomain " . $fullSubdomainStr . ".\n"; + $subdomainPath = $rootDomainHomeDir . "/httpdocs/subdomains/" . $dom['subdomain']; + $encDomains["domainnames"] = array($fullSubdomainStr); + $encDomains["domainpath"] = $subdomainPath; + $this->getAndUseLetsEncryptCert($encDomains, $this->getClientEmailFromPanelUsername($dom['panelusername'])); + if(file_exists("/etc/letsencrypt/live/" . $fullSubdomainStr . "/fullchain.pem")){ + $dom['ssl_cert_path'] = "/etc/letsencrypt/live/" . $fullSubdomainStr . "/fullchain.pem"; + $dom['ssl_cert_key_path'] = "/etc/letsencrypt/live/" . $fullSubdomainStr . "/privkey.pem"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + }else{ + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + }else{ + echo "\nUsing server default SSL certificate for subdomain " . $fullSubdomainStr . ".\n"; + $dom['ssl_cert_path'] = "/etc/ssl/certs/server.crt"; + $dom['ssl_cert_key_path'] = "/etc/ssl/private/server.key"; + $dom['ssl_cert_chain_setting_with_path'] = ''; + } + + if(!array_key_exists("wildcarddomain", $dom)){ + $dom['wildcarddomain'] = ""; // Replace wildcard domain from redirect if it's used... + } + + $dom['domainname_redirect'] = ""; // Needs this key added to it since it may be populated with an actual value in processing logic + $arr2[]=$dom; + # arr2 used because, customsubdomainhttp is used or similar... + + if(!file_exists($subdir."/ehcpinfo.html")){ + passthru2("cp -f ehcpinfo.html ".$subdir."/ehcpinfo.html"); + } + + } + + # you may see daemon mode output at logfile, typically tail -f /var/log/ehcp.log from command line + echo __FUNCTION__.": syncing subdomains:"; + print_r($arr2); + + if(!empty($globalSubdomainTemplate)){ + $alanlar=array_keys($arr2[0]); // gets array keys, from first(0th) array element of two-dimensional $arr2 array. https://stackoverflow.com/questions/2399286/str-replace-with-associative-array (to understand this better... we take the keys from the first entry and then we replace each {key} with the value for that key in domain / subdomain array --- pretty clever + // following code, replaces fields from template to values here in $arr2 two-dim array. each $arr2 element written to output file according to template file. + $replacealanlar=arrayop($alanlar,"strop"); + $fileOut = ""; + foreach($arr2 as $ar1) { + $webserver_template=str_replace(array('{ehcpdir}','{localip}'),array($this->ehcpdir,$this->miscconfig['localip']),$globalSubdomainTemplate); + $webserver_config=str_replace($replacealanlar,$ar1,$webserver_template); + $fileOut .= $webserver_config; + } + $success = writeoutput2($file,$fileOut,'w',false); + if($success){ + $this->echoln("SUBDOMAINS-Domain list exported from global subdomain template (".__FUNCTION__.")\n"); + } + }else{ + if ($this->putArrayToFile($arr2,$file,$webserver_template_filename, true)) { + $this->echoln("SUBDOMAINS-Domain list exported (".__FUNCTION__.")\n"); + } else $success=false; + } + + return $success; +} + +function run_lets_encrypt_commands(){ + $this->requireCommandLine(__FUNCTION__); + $this->echoln("Running Let's Encrypt commands...\n"); + $success = true; + if(file_exists("/var/www/new/ehcp/scripts/lets_enc.conf")){ + echo "\nRunning Let's Encrypt script generated by EHCP...\n"; + passthru2("bash /var/www/new/ehcp/scripts/lets_enc.conf", true, true); + echo "\nRemoving Let's Encrypt script generated by EHCP...\n"; + $contentsOfScript = file_get_contents("/var/www/new/ehcp/scripts/lets_enc.conf"); + if($contentsOfScript){ + $this->echoln2("\nContents of the bash Let's Encrypt script:\n" . $contentsOfScript . "\n"); + } + passthru2("rm /var/www/new/ehcp/scripts/lets_enc.conf", true, true); + + // Reload web server again to pick up on changed let's encrypt keys + sleep(1); + $success=$success && $this->configtest_reload_webserver(); + } + return $success; +} + +function configtest_reload_webserver(){ + $this->requireCommandLine(__FUNCTION__); + + $this->echoln("Checking web server configuration files...\n"); + + $domainContents = file_get_contents($this->ehcpInstallPath . "apachehcp.conf"); + $subdomainContents = file_get_contents($this->ehcpInstallPath . "apachehcp_subdomains.conf"); + $pDomainContents = file_get_contents($this->ehcpInstallPath . "apachehcp_passivedomains.conf"); + + $webserver=trim($this->miscconfig['webservertype']); + if($webserver=='' or !in_array($webserver,array('apache2','nginx'))) { + $this->echoln("webservertype is not defined in settings/config or not recognised. now setting is:($webserver). setting to default of apache2."); + $webserver='apache2'; + } + + if($webserver=='apache2') { + manageService("nginx", "stop"); + $this->echoln("checking $webserver syntax: "); + system("apache2ctl configtest",$ret); # burda apache config test ediyor... custom http de abuk subuk seyler girenler nedeniyle... bu olmazsa, apache baslayamiyor ve ehcp arayuzu de, ayni apache dan calistigindan, ulasilamaz hale geliyor.. + # aslinda ehcp arayuzu farkli/statik bir apache e yonlendirilebilir.. farkli porttan calisan.. + # ayni isi dns icin de yapmak lazim... suanda biri custom dns olarak hatali bisey girse, dns cortlar... onu da ilerde duzeltcem. + # Exit Code of 8 Means Syntax Error - Anything Else Should Not Impact the Reload of the Apache2 Config - ret changed from 0 to 8 + # To see the exit codes, look at the script source like I did + if($ret==8){ + echo "\n $webserver configuration issue detected! There is an error in the config.\n"; + echo "\n Configuration for domains is set to the following:\n"; + echo "\n " . $domainContents . "\n"; + echo "\n Configuration for subdomains is set to the following:\n"; + echo "\n " . $subdomainContents . "\n"; + echo "\n Configuration for passive domains is set to the following:\n"; + echo "\n " . $pDomainContents . "\n"; + $this->infotoadminemail("Hi EHCP Admin,

There is an error in your $webserver config.

Domain Contents:
" . $domainContents . "
Subdomain Contents:
" . $subdomainContents . "

Passive Domain Contents:
" . $pDomainContents . "
","Error in $webserver Config",false); + $success=false; + } else { + echo "\n $webserver configuration is valid and tested successfully!"; + manageService("apache2", "reload"); + $success=true; + } + } elseif($webserver=='nginx') { + manageService("apache2", "stop"); + + $this->echoln("checking $webserver syntax: "); + $out=shell_exec('service nginx 2>&1 | grep -o "configtest"'); + if(!strstr($out,'configtest')) { + $this->echoln("Your $webserver does not support configtest. Assuming the configuration is ok...\n($out)\n"); + print_r($out); + manageService($this->php_fpm_name, "reload"); + manageService("nginx", "reload"); + return true; + } + + system(getServiceActionStr("nginx", "configtest"),$ret); + + if($ret<>0){ + echo "\n $webserver configuration issue detected! There is an error in the config.\n"; + echo "\n Configuration for domains is set to the following:\n"; + echo "\n " . $domainContents . "\n"; + echo "\n Configuration for subdomains is set to the following:\n"; + echo "\n " . $subdomainContents . "\n"; + echo "\n Configuration for passive domains is set to the following:\n"; + echo "\n " . $pDomainContents . "\n"; + $this->infotoadminemail("Hi EHCP Admin,

There is an error in your $webserver config.

Domain Contents:
" . $domainContents . "
Subdomain Contents:
" . $subdomainContents . "

Passive Domain Contents:
" . $pDomainContents . "
","Error in $webserver Config",false); + $success=false; + } else { + echo "\n $webserver configuration is valid and tested successfully!"; + $success=true; + } + manageService($this->php_fpm_name, "reload"); + manageService("nginx", "reload"); + } + + $this->webserver_test_and_fallback(); + + return $success; +} + +function webserver_test_and_fallback(){ + # to be coded later. + # test if any webserver running, if not, perform a series of fallback operations, such as switch back to apache.. + +} + +function putArrayToFile($arr,$filename,$template,$additionalTemplateLogic = false){ + $res=writeoutput2($filename,$this->putArrayToStr($arr,$template,$additionalTemplateLogic),"w"); + if($res) return $res;#$this->echoln("Putting some content to file: $filename (putArrayToFile)\n"); + else $this->echoln("Failed-Putting some content to file: $filename (".__FUNCTION__.")\n"); + return $res; +} + + +function putArrayToStr($arr,$template,$additionalTemplateLogic = false){ + # you should not change this function, as it is being used by other methods too, as I remember; this is a general purpose function + // bir template e gore dosyaya yazar. array template de yerine koyar. template de array elemanlari {domain} seklinde olmalidir. + + if(!$arr) return ""; + + $alanlar=array_keys($arr[0]); // gets array keys, from first(0th) array element of two-dimensional $arr array. + + // following code, replaces fields from template to values here in $arr two-dim array. each $arr element written to output file accourding to template file. + $replacealanlar=arrayop($alanlar,"strop"); + $templatefile=file_get_contents($template); + + foreach($arr as $ar1) {// template e gore apacehe dosyasn olustur + $temp=$templatefile; + + if($additionalTemplateLogic === true){ + $stripSSLSectionFromTemplate = false; + $stripNonSSLSectionFromTemplate = false; + + $sslInfo = $this->getSSLSettingForDomain($ar1['domainname']); + + if(strtolower($this->miscconfig['useglobalsslcert']) != 'yes' && $this->miscconfig['webservermode'] == 'ssl'){ + if(empty($sslInfo["cert"]) && empty($sslInfo["letsenc"])){ + $stripSSLSectionFromTemplate = true; + }else{ + $stripSSLSectionFromTemplate = false; + } + } + + if($this->miscconfig['webservermode'] == 'ssl' && $sslInfo["redir_https"] && !$stripSSLSectionFromTemplate){ + $stripNonSSLSectionFromTemplate = true; + } + + if($stripSSLSectionFromTemplate === true){ + $this->echoln2("Removing SSL portions from template for subdomain " . $ar1["subdomain"] . "." . $ar1["domainname"]); + $temp = stripContentsAfterLine("# FOR SSL CONFIG", $temp); + } + + if($stripNonSSLSectionFromTemplate === true && !$stripSSLSectionFromTemplate){ + $this->echoln2("Removing Non-SSL portions from template for subdomain " . $ar1["subdomain"] . " and redirecting all standard HTTP requests to HTTPS!"); + $redirectTemplate = file_get_contents($this->ehcpdir . "/apachetemplate_redirect"); + $httpOnlyRedirect = stripContentsAfterLine("# FOR SSL CONFIG", $redirectTemplate); + $httpOnlyRedirect = str_replace("{domainname_redirect}", "https://{domainname_redirect}", $httpOnlyRedirect); + + // Gotta use the subdomain here + $httpOnlyRedirect = str_replace("{domainname}", "{subdomain}.{domainname}", $httpOnlyRedirect); + + $ar1['domainname_redirect'] = $ar1["subdomain"]; + + if($this->miscconfig['webservertype'] == "nginx"){ + $ar1['domainname_redirect'] = '$host'; + }else{ + $ar1['domainname_redirect'] = '%{HTTP_HOST}'; + } + + $temp = getContentsAfterLine("# FOR SSL CONFIG", $temp); + $temp = $httpOnlyRedirect . "\n" . $temp; + } + } + + $temp=str_replace($replacealanlar,$ar1,$temp); + $out.=$temp; + } + + return $out; +} + +function putArrayToStrDns($arr){ + # we should better code this, we should use existing function putArrayToStr, or reduce code... + if(!$arr) return ""; + + $alanlar=array_keys($arr[0]); // gets array keys, from first(0th) array element of two-dimensional $arr array. + + // following code, replaces fields from template to values here in $arr two-dim array. each $arr element written to output file accourding to template file. + $replacealanlar=arrayop($alanlar,"strop"); + + + foreach($arr as $ar1) {// template e gore apacehe dosyasn olustur + // Check which template to really use for DNS + if($ar1["dnsmaster"]<>'') { + // Use slave template + $template = $this->dnsnamedconftemplate_slave; + } elseif ($ar1["dnsmaster"]=='') { + // Use master template + $template = $this->dnsnamedconftemplate; + } + + $templatefile=file_get_contents($template); + $temp=$templatefile; + $temp=str_replace($replacealanlar,$ar1,$temp); + $out.=$temp; + } + + return $out; +} + +function runop2($op,$action,$info,$info2='',$info3=''){ + // for operations that needs more than one argument. such as domain add/delete, especially for daemon mode. + global $commandline; + $this->requireCommandLine(__FUNCTION__); + + echo "(runop2) op:$op, action:$action, info:$info, info2:$info2 \n"; + + switch ($op) { # info3 is usually server + case 'syncdomains': + return $this->syncDomains('',$info); + break; + case 'deletefilefromsystem': + return $this->deleteFileFromSystem($action,$info); + break; + case 'daemon_backup_domain': + return $this->daemon_backup_domain($info); + break; + case 'daemondomain': + return $this->daemondomain($action,$info,$info2,$info3); + break; + case 'daemonftp': + return $this->daemonftp($action,$info,$info2,$info3); + break; + case 'daemonbackup': + return $this->daemonBackup($action,$info,$info2); + break; + case 'daemonrestore': + return $this->daemonRestore($action,$info,$info2); + break; + case 'installscript': + return $this->installScript($action,$info,$info2); + break; + case 'installscript_force': + return $this->installScriptForceEdition($action,$info,$info2); + break; + case 'update_ez_install': + return $this->updateEZScriptSQL($action,$info,$info2); + break; + case 'downloadallscripts': + return $this->downloadAllScripts(); + break; + case 'updatediskquota': + return $this->updateDiskQuota($info); + break; + case 'service': + return $this->service($info,$info2); + break; + case 'fixApacheConfigSsl': + return $this->fixApacheConfigSsl($info); + break; + case 'fixApacheConfigSslOnly': + return $this->fixApacheConfigSslOnly($info); + break; + case 'daemon_vps': + return $this->call_func_in_module('Vps_Module','daemon_vps',array('action'=>$action,'info'=>$info)); + break; # array in this is params + case 'process_ssl_certs': + return $this->handleCustomSSLCertsForDomains(); + break; + default: + return $this->errorText("Internal EHCP Error - Undefined Operation: ".$op."
This feature may not be complete."); + }// switch + +} + +function fixMailConfiguration(){ + # this re-runs function mailconfiguration,configurepamsmtp, configureauthmysql, that is, mail related functions in install_lib.php + # purpose: in case mail/ehcp configuration is corrupted, or ehcp mysql db pass changed, update system configuration accordingly + # this function was for mail configuration at start, became whole ehcp configuration later.. included vsftpd, net2ftp... and so on.. + $this->requireCommandLine(__FUNCTION__); + + include_once("install_lib.php"); + $this->write_file_if_not_exists('/etc/mailname','mail.myserver.com') ; # on some systems, this is deleted somehow. + if(!file_exists('/etc/postfix/main.cf')) passthru2("cp ".$this->ehcpdir."/etc/postfix/main.cf.sample /etc/postfix/main.cf"); # on some systems, this is deleted somehow. + + $params=array('ehcppass'=>$this->dbpass); + $params2=array_merge($params,array('ehcpinstalldir'=>$this->conf['ehcpdir'])); + + global $ip,$ehcpmysqlpass,$ehcpinstalldir; + include('config.php'); + + $ip=$this->miscconfig['dnsip']; + $ehcpmysqlpass=$dbpass; + $ehcpinstalldir=$this->conf['ehcpdir']; + + $this->adjust_webmail_dirs(); + mailconfiguration($params); + passthru2('newaliases'); + + net2ftp_configuration($params2); + + $this->syncDns(); + $this->syncDomains(); + + passthru2("chmod a+w ".$this->ehcpdir."/webmail/data"); + passthru2("chmod a+w ".$this->ehcpdir."/net2ftp/temp"); + manageService("vsftpd", "restart"); + manageService("postfix", "restart"); + + return True; +} + +function downloadAllscripts(){ + $this->requireCommandLine(__FUNCTION__); + echoln("downloading all scripts- not completed yet"); + return true; +} + +function extract_file($filename,$extractto){ + $ext=get_filename_extension($filename); + $mydir=getcwd(); + chdir($extractto); + $ret=True; + + if($ext=='gz') { + if(strpos($filename,'.tar.gz')===False) passthru2("gunzip $filename"); + else passthru2("tar -zvxf $filename"); + } elseif ($ext=='tgz'){ + passthru2("tar -zxvf $filename"); + } elseif ($ext=='bz2'){ + if(strpos($filename,'.tar.bz2')===False) passthru2("bunzip2 $filename"); + else passthru2("tar -jvxf $filename"); + } elseif ($ext=='zip') { + passthru2("unzip $filename"); + } elseif ($ext=='rar') { + passthru2("unrar x $filename"); + } else { + print "Unsupported extension/Desteklenmeyen dosya uzantisi, extract yapılmadı... : $ext "; + $ret=False; + } + + chdir($mydir); + return $ret; +} + +function download_url($url,$downloadto,$filename=''){ + if($filename=='') $filename=get_filename_from_url($url); + + passthru2("wget -N -O $downloadto/$filename -t 3 $url", true); + print "got filename using wget : $filename"; +} + + +function download_file_from_url_extract($url,$downloadto,$extractto,$filename='') { + print "getting and installing file from url: $url "; + if($filename=='') $filename=get_filename_from_url($url); + + $this->download_url($url,$downloadto,$filename); + + # dosyayi gecici bir dizine kopyala, sonra icinde ac, sonra icinde bircok dosya varsa direk .... + passthru2("mkdir -vp $extractto"); + if($downloadto<>$extractto) passthru2("cp -vf $downloadto/$filename $extractto/"); + + print "current dir: ".getcwd()."... will extract files... \n\n"; + + if(!$this->extract_file($filename,$extractto)) return False; + + if($downloadto<>$extractto) passthru2("rm -vf $filename"); # remove file in tmp dir. + return True; +} + +function insert_custom_setting_direct($params){ + $q="insert into customsettings (domainname,name,`value`,value2) values('{$params['domainname']}','{$params['name']}','{$params['value']}','{$params['value2']}')"; + return $this->executeQuery($q); +} + +function getAndInstallFile($bilgi,$domainname,$directory){ + $this->requireCommandLine(__FUNCTION__); + $url=$bilgi['fileinfo']; # burada guvenlik kontrol edilmeli, yoksa baskasi baskasinin domainine biseyler kurar... + + #adjust script install dir + $scriptdirtocopy=trim($bilgi['scriptdirtocopy']); + $scriptdirtocopy.="/."; + + + $domainhome=$this->getField($this->conf['domainstable']['tablename'],"homedir","domainname='$domainname'")."/httpdocs"; + $directory=trim($directory); + if($directory=='') $targetdirectory=$domainhome; + else $targetdirectory="$domainhome/$directory/"; + +/* canceled this check because unable to install into subdomain + if($directory<>'' and file_exists("$targetdirectory")){ + print "Target directory already exists, so, cancelling script installation.. : $targetdirectory "; + return False; + } +*/ + + $mydir=getcwd(); + + if (strpos($bilgi['scriptname'],"ehcp itself")!==false){ + $filename="ehcp_latest.tgz"; + } else $filename=''; + + + $tmpdir=$this->conf['ehcpdir']."/scriptinstall/gecici_temp"; + $installdir=$this->conf['ehcpdir']."/scriptinstall"; + passthru2("mkdir $installdir"); + passthru2("rm -rf $tmpdir"); + + if(!$this->download_file_from_url_extract($url,$installdir,$tmpdir,$filename='')) return False; + + + # copy files to target dir + + passthru2("mkdir -p \"$targetdirectory\""); + #passthru2("cp -Rvf ".$this->conf['ehcpdir']."/scriptinstall/$tmpdir/$scriptdirtocopy/* $targetdirectory"); + # ilginc bir sekilde bu yildizli kopyalama calismadi... yildizi, php icinden gormuyor, no such file or dir diyor... garip.. bu nedenle noktalihale geldi. + passthru2("rm -rvf \"$targetdirectory/index.html\""); # remove any index.html file already there... this may cause some loss... + passthru2("cp -Rvf $tmpdir/$scriptdirtocopy $targetdirectory"); + passthru2("rm -rf $tmpdir"); + + if(!(strpos($bilgi['scriptname'],"ehcp itself")===false)){ # if this is ehcp itself... # download new version of ehcp, overwrite settings&config files. should work directly if you have latest ehcp. + $settingsfiles=array('config.php','apachetemplate','dnszonetemplate','apachetemplate_passivedomains','apache_subdomain_template','dnsnamedconftemplate', 'dnsnamedconftemplate_slave'); + foreach($settingsfiles as $tocopy) + passthru2("cp -Rvf ".$this->conf['ehcpdir']."/$tocopy $targetdirectory"); + } + + print "\nscript dir $scriptdirtocopy copied to: $targetdirectory"; + + + # burda kopyalama sonrasi islemler.. + # these are commands that are executed after copy... such as chmod a+w somfile.. specific to that script... + + passthru2("chown -Rf " . $this->wwwuser . " $targetdirectory"); + + # go to inside that dir... + chdir($targetdirectory); + echo "Custom file ownerships, if any:\n"; + print_r($bilgi['customfileownerships']); + foreach(explode("\n",$bilgi['customfileownerships']) as $com) { + $com=trim($com); + if($com=='') continue; + + $inf=explode("#",$com); # get fileowner and path owner:group#path format + if (strstr($inf[0],'root')!==False) continue; # avoid root ownership. + + $inf[1]=str_replace('..','',$inf[1]); # avoid hi-jacking by ../../ ... etc. + $cmd="chown -Rf ".$inf[0]." $targetdirectory/".$inf[1]; # path is relative to target dir. this way, this does not write to system files, I hope. + passthru2($cmd); # adjust first.. + $params=array('domainname'=>$domainname,'name'=>'fileowner','value'=>$inf[0],'value2'=>"$directory/".$inf[1]); + $this->insert_custom_setting_direct($params); # insert this for adjusting next time, while syncing... + } + + /* path for custom permissions: + * scripts table: relative path, because, actual install path is not known + * customsettings: instalpath/path in scripts table + * syncdomains: set permissions of "domainhome/path in customsettings" that is, "domainhome/installpath/relativepath" that is "/var/www/vhosts/ftpuser/domain.com/httpdocs/installdir(maybeempty)/wp-admin + * */ + + echo "\n\ncommands to execute after script copy: (current dir: ".getcwd().") \n"; + print_r($bilgi['commandsaftercopy']); + + foreach(explode("\n",$bilgi['commandsaftercopy']) as $com) { + $com=trim($com); + $com=str_replace(array('{domainname}','{domainhome}','{targetdirectory}'),array($domainname,$domainhome,$targetdirectory),$com); + $com=trim($com); + if($com<>'') passthru2($com); + } + + chdir($mydir);# return back to original dir + return True; +} + +function updateEZScriptSQL($action,$info,$info2){ + $this->requireCommandLine(__FUNCTION__); + + $mysql_script = $this->ehcpDownloadPath . "/easy_install.sql"; + if(!file_exists($this->ehcpDownloadPath)){ + mkdir($this->ehcpDownloadPath, 0775); + } + + $downloadScript = 'wget -N -O ' . $this->ehcpDownloadPath . '/easy_install.sql "http://ehcpforce.tk/files/easy_install.sql"'; + passthru2($downloadScript, true, true); + + $mysql_host = $this->dbhost; + $mysql_user = $this->dbusername; + $mysql_userpass = $this->dbpass; + $mysql_dbname = $this->dbname; + + $mysqlCommandToRun = 'mysql -h "' . $mysql_host . '" -u "' . $mysql_user . '" -p"' . $mysql_userpass . '" "' . $mysql_dbname . '" -f < ' . $mysql_script; + passthru2($mysqlCommandToRun, true, true); + + return true; +} + +function installScriptForceEdition($scriptname,$domainname,$installInfoNeeded){ + $this->requireCommandLine(__FUNCTION__); + print "installing script....: $scriptname "; + $q="select * from scripts where scriptname='$scriptname'"; + $bilgi=$this->query($q); + $bilgi=$bilgi[0]; + print "\nkurulacak script bilgileri: query: $q \n"; + print_r($bilgi); + + $settingsForIns = explode($this->ehcpForceSplitString, $installInfoNeeded); + + // $installInfoNeeded = $directory . $this->ehcpForceSplitString . $dbname . $this->ehcpForceSplitString . $dbusername . $this->ehcpForceSplitString . $dbuserpass . $this->ehcpForceSplitString . $myserver['host'] . $this->ehcpForceSplitString . $title . $this->ehcpForceSplitString . $admin_email; + + $directory = $settingsForIns[0]; + $dbName = $settingsForIns[1]; + $dbUserName = $settingsForIns[2]; + $dbPass = $settingsForIns[3]; + $mysql_host = $settingsForIns[4]; + $titleForScript = $settingsForIns[5]; + $adminEmailForScript = $settingsForIns[6]; + + $domainhome=$this->getField($this->conf['domainstable']['tablename'],"homedir","domainname='$domainname'")."/httpdocs"; + $directory=trim($directory); + if($directory=='') $targetdirectory=$domainhome; + else $targetdirectory="$domainhome/$directory/"; + + $installedTheScriptFiles = $this->getAndInstallFile($bilgi,$domainname,$directory); + $ranInstallerUsingSteps = $this->runCurlToCompleteInstall(strtolower($scriptname),$domainname,$directory,$targetdirectory,$dbName,$dbUserName,$dbPass,$mysql_host,$titleForScript,$adminEmailForScript); + + return $installedTheScriptFiles & $ranInstallerUsingSteps; +} + +function runCurlToCompleteInstall($scriptname,$domainname,$directory,$targetdirectory,$dbName,$dbUserName,$dbPass,$mysql_host,$titleForScript,$adminEmail){ + $this->requireCommandLine(__FUNCTION__); + $insScript = "bash /var/www/new/ehcp/scripts/curl_installer/curlInstallScript.sh '" . $scriptname . "' '" . $domainname . "' '" . $directory . "' '" . $targetdirectory . "' '" . $dbName . "' '" . $dbUserName . "' '" . $dbPass . "' '" . $mysql_host . "' \"" . $titleForScript . "\" '" . $adminEmail . "' '" . $this->wwwuser . "' '" . $this->wwwgroup . "' '" . $this->miscconfig['webservermode'] . "' > /dev/null 2>&1 &"; + passthru2($insScript, true, true); + return true; +} + +function installScript($scriptname,$domainname,$directory){ + $this->requireCommandLine(__FUNCTION__); + print "installing script....: $scriptname "; + $q="select * from scripts where scriptname='$scriptname'"; + $bilgi=$this->query($q); + $bilgi=$bilgi[0]; + print "\nkurulacak script bilgileri: query: $q \n"; + print_r($bilgi); + + if($bilgi['filetype']=='remoteurlconfig'){ # fileinfo contains, remote url config file of format url=http..... + $config=file_get_contents($bilgi['fileinfo']); + print "configfile:".$config; + $lines=split("\n",$config); + print_r($lines); + print " this part is not completed.. use directurl"; + } elseif($bilgi['filetype']=='directurl'){ + return $this->getAndInstallFile($bilgi,$domainname,$directory); + } else { + print "\n\nUnknown file type:".$bilgi['filetype']."(File:".__FILE__."Line:".__LINE__.") \n\n"; + return False; + } + + return true; +} + +function listTable($baslik1,$conf_tabloadi,$filtre=""){ + + $tablo=$this->conf[$conf_tabloadi]; + $this->output.="$baslik1
"; + + $linkimages=$tablo['linkimages']; + $linkfiles=$tablo['linkfiles']; + $linkfield=$tablo['linkfield']; + $sirala=$tablo['orderby']; + + $this->output.=$this->tablolistele3_5_4($tablo['tablename'],$baslik,$tablo['listfields'],$filtre,$sirala,$linkimages,$linkfiles,$linkfield,$listrowstart,$listrowcount).'
'; + return true; +} + + +// extra functions from old dbutil + +function ilerigeriekle($kayitsayisi,$baslangic,$satirsayisi,$querystring) { + if(!isset($baslangic))$baslangic=0; + if(!isset($satirsayisi))$satirsayisi=10; + + $ilerimiktar=$baslangic+$satirsayisi; + $self=$_SERVER['PHP_SELF']; + $querystring=$_SERVER['QUERY_STRING']; + $querystring=str_replace(array("&baslangic=$baslangic&satirsayisi=$satirsayisi","&&"),array("","&"),$querystring); + $self2=$self."?".$querystring; + + if($satirsayisi>0) { + $sondanoncesi=$kayitsayisi-$satirsayisi; + $querystring=str_replace("baslangic=$baslangic&satirsayisi=$satirsayisi","",$querystring); + + // asagidaki tabloya bu baslangic tekrar gitmesin diye. asagida zaten ekleniyor. + //if($querystring<>"")$querystring.="&"; // bialtsatrda ?den sonra yazmak i�n. ileri geride kullanlyor. + + if($ilerimiktar<$kayitsayisi) { + $ileri=">"; + $son=">>"; + } else { + $ileri=">"; + $son=">>"; + }; + + if($baslangic>0) { + $geri="<"; + $bas="<<"; + } else { + $geri="<"; + $bas="<<"; + }; + + # cok sayida (100 binlerce) kayit olunca, birsürü sayfa gösteriyor. bunu engellemek için, burada değişik bir mantık lazım. + if($kayitsayisi>20000) $cokkayit=True; + + if($kayitsayisi>$satirsayisi) { + if($cokkayit) { + $result2.="Cok sayida kayit var, bu nedenle aralardan sayfalar ornekleniyor.
$bas   $geri $ileri   $son
"; + $sayfalar="Pages:"; + $bolunecek=$satirsayisi*$kayitsayisi/20000; # nekadar cok kayit varsa, okadar fazla bol, aradan ornekleme yap... + for($sayfa=0;$sayfa<($kayitsayisi/$bolunecek);$sayfa++) + $sayfalar.="".($sayfa+1)."  "; + } else { + $result2.= round(($baslangic/$satirsayisi)+1).".page: (".($baslangic+1)."-".($baslangic+$satirsayisi).". records) (in each page $satirsayisi record)
$bas   $geri $ileri   $son
"; + $sayfalar="Pages:"; + for($sayfa=0;$sayfa<($kayitsayisi/$satirsayisi);$sayfa++) + $sayfalar.="".($sayfa+1)."  "; + } + } + + }; + + if($kayitsayisi>0) $reccount=$this->sayinmylang("recordcount").$kayitsayisi; + $result2.=$sayfalar.$arama."
$reccount
"; + return $result2; +} + + +function tablolistele3_5_4($tablo,$baslik,$alan,$filtre,$sirala,$linkyazi,$linkdosya,$linkalan,$baslangic1,$satirsayisi1,$aramayap=true,$altbilgi=true,$baslikgoster=true) +{ +# this lists table rows in a paged view +// +// ehcp icin modifiye edildi, gelistirildi. +// tablolistele3_4 den fark bilgilerin belli gruplarda listelenmesi. ileri geri tular v.b. +// bir farki da echo yapmaz +// 3_5_2 den fark, mssqlden de okuyabilmesi olacak.. yeni yazyorum. adodb ye gectim. + +GLOBAL $aranan,$arananalan,$app,$baslangic,$satirsayisi,$listall; + +// Get table info +$table=$this->conf[$tablo . "table"]; +if(!$this->hasValueOrZero($table)){ + $table=$this->conf[$tablo]; +} + +$this->getVariable(array("arananalan","aranan","hepsi",'baslangic','satirsayisi','listall')); + +$color1="#FFE8B2"; +$color2="#E2E2E2"; + +if(!isset($baslangic) || empty($baslangic)){ + $baslangic = 0; +} +if(!isset($baslangic1)) $baslangic1=$baslangic; +if(!isset($satirsayisi1) or $satirsayisi1==0) $satirsayisi1=$satirsayisi; + +if(!isset($baslangic1)) $baslangic1=0; +if(!isset($satirsayisi1) or $satirsayisi1==0) $satirsayisi1=10; + + + +$result2=''; +$alansayisi=count($alan); +$alansayisi2=count($linkyazi); +$satirno=0; +$ilkfiltre=$filtre; + +#$this->output.="
(ks: $kayitsayisi, iks: $ilkkayitsayisi, filtre: $filtre, ilkfiltre: $ilkfiltre)
"; + +$ilkkayitsayisi=$this->recordcount($tablo,$ilkfiltre);//$res[0]; + + +// listelemedeki arama fonksiyonlary: + + +if($listall<>"1") { + $sess_arananalan=$_SESSION['sess_arananalan']; + $sess_aranan=$_SESSION['sess_aranan']; +} else { + $_SESSION['sess_arananalan']=''; + $_SESSION['sess_aranan']=''; +} + +if($arananalan<>'' or $sess_arananalan<>'') + $this->output.=" Searchfield:($arananalan), searchvalue:($aranan) , sess_searchfield:($sess_arananalan), sess_searchvalue($sess_aranan)..
"; + +if($aranan<>''){ + $_SESSION['sess_arananalan']=$arananalan; + $_SESSION['sess_aranan']=$aranan; + $baslangic1=0; + + if($arananalan==''){ + $this->output.="Aranacak Alanı belirtmediniz. Bir alan seciniz."; + } else { + $filtre=andle($filtre,"$arananalan like '%$aranan%'"); + //$this->output.="Filtre: $filtre
"; + } +} elseif($sess_arananalan<>'') { // bu session olayy, arama yapynca sayfalamanyn �aly?asy i�in + $filtre=andle($filtre,"$sess_arananalan like '%$sess_aranan%'"); +} else { + $_SESSION['sess_arananalan']=''; + $_SESSION['sess_aranan']=''; +} +//------------------ arama bitti ------------------- +$kayitsayisi=$this->recordcount($tablo,$filtre);//$res[0]; +$topkayitsayisi=$this->recordcount($tablo,''); + +if($kayitsayisi==0){ + $result2.=$this->sayinmylang("norecordfound"); + //return $result2; +} + +$selectalan=array(); +foreach($alan as $al){ + if(is_array($al)) $selectalan[]=$al[0]; + else $selectalan[]=$al; +} + +$baslikalan=$selectalan; +if(!in_array($linkalan,$selectalan)) array_push($selectalan,$linkalan);//linkalan yoksa, ekle +//$query=buildquery3("select ".selectstring($selectalan)." from $tablo",$filtre,$sirala,$baslangic,$satirsayisi1); +$query=buildquery2("select ".selectstring($selectalan)." from $tablo",$filtre,$sirala); +$this->queries[]=$query; +$res = $this->conn->selectlimit($query,$satirsayisi1,$baslangic1); + + +#$this->output.="res:".print_r2($res); +$tr=""; +$td=""; + + +if ($res) { + + $result2.= "\n"; + + // Get custom th headers + $customListLabels = $table['listlabels']; + if($this->hasValueOrZero($customListLabels) || is_array($customListLabels)){ + $baslik = $customListLabels; + } + + if($kayitsayisi>0 and $baslikgoster)$result2.=tablobaslikyaz($baslikalan,$baslik,$linkyazi); + + while (! $res->EOF ) { + $r=$res->FetchRow(); + #$this->output.=print_r2($r); + + #if(iseven($satirno)){$satirrengi=$color1;} else {$satirrengi=$color2;};$satirno++; + #$result2.=""; + $result2.=$tr; + for ($i=0;$i<$alansayisi;$i++) { + if(is_array($alan[$i])) $al=$alan[$i][0]; else $al=$alan[$i]; + $yaz=htmlspecialchars($r[$al]); + if($yaz==''){ + $result2.="$td "; + } else { + if(is_array($alan[$i])) { + $yaz1=$yaz; + if($alan[$i]['linktext']<>'') $yaz1=$alan[$i]['linktext']; + + if($alan[$i][1]=="sayi") $yaz="

".number_format($yaz,2)."

"; + if($alan[$i][1]=="link_newwindow") $yaz="$yaz1"; + if($alan[$i][1]=="link") $yaz="$yaz1"; + if($alan[$i][1]=="image") $yaz=""; + } + $result2.="$td$yaz"; + }; + //if($al==$linkalan){$link=$r[$al];}; + }; + $link=$r[$linkalan]; + + for ($i=0;$i<$alansayisi2;$i++) { + $ly=$linkyazi[$i]; + $ld=$linkdosya[$i]; + $char="&"; + if(strpos($ld,"?")===false)$char="?"; + if(strpos($ld,"href=")===false) $ld="href='$ld"; + + $result2.="$td"; + } + + $result2.= "\n"; + } + + $result2.= "
"; + $ilerimiktar=$baslangic1+$satirsayisi1; + $self=$_SERVER['PHP_SELF']; + $querystring=$_SERVER['QUERY_STRING']; + $self2=$self."?".$querystring; + + if($altbilgi) $result2.=$this->ilerigeriekle($kayitsayisi,$baslangic1,$satirsayisi1,$querystring); + + + // aramalarn ayarlanmas. + + if($aramayap and $topkayitsayisi>5){ + $arama="
".$this->sayinmylang('search_').": ".buildoption2("arananalan",$alan,$arananalan)."
"; + $result2.=$arama; + } + + if(($aranan<>'' or $arananalan<>'' or $_SESSION['sess_arananalan']<>'' or $filtre<>'')and($ilkkayitsayisi>$kayitsayisi)){ # sonuclarda arama, filtreleme yapildi ise, filtrelemeyi kaldir.. + $result2.="".$this->sayinmylang('list_all')."
"; + } + +} else { + $this->error_occured("(tablolistele_3_5_4)","query:$query"); +}; +// $result2.="
tablo bitti.
"; +//echo "query:$query"; +$result2.=$this->conn->ErrorMsg(); +return $result2; +}//fonksiyon + +function isTrue($param,$str='',$returnit=False){ # this is a test function to figure out a variable type, true or false ? + $found=false; + $this->output.="
$str - starting checks-(isTrue)
"; + if($param===true){ + $ret="this is exact true
"; + $this->output.= + $found=true; + } + if($param===false){ + $ret="this is exact false
"; + $found=true; + } + if($param===null){ + $ret="this is exact null
"; + $found=true; + } + if($param===0){ + $ret="this is exact 0 - zero
"; + $found=true; + } + if($param===""){ + $ret="this is exact '' - empty
"; + $found=true; + } + if($param===array()){ + $ret="this is exact empty array
"; + $found=true; + } + if($found===false) { + $ret="This variable is not true,false,0,null or empty array
this seems:" + .gettype($param)."
" + .(is_resource($param)?get_resource_type($param):"")."
" + ; + + } + $this->output.=$ret; + $this->output.="
finished isTrue.
"; + if($returnit) return $ret; +} + + +function sifreHatirlat(){ # password reminder + $tarih=date_tarih(); + global $email,$panelusername,$hash; + $this->getVariable(array("email",'panelusername','hash')); + + if($email<>"") { + + #validate email: + $kayitliemail=$this->getField($this->conf['logintable']['tablename'],'email',"email='$email'"); + $filt="email='$email'"; + + if($kayitliemail<>''){ + + if(!$hash){ + $hash=get_rand_id(10); + $r=$this->executeQuery("insert into hash (email,hash)values('$email','$hash')"); + if(!$r) return false; + + $msg="Hi EHCP Force User,

Someone using the IP address of $this->clientip requested to reset your password.  To reset your password, ehcpurl . "/?op=sifrehatirlat&email=$email&hash=$hash\">click here.

" . "If you are attempting to access your server locally, replace the IP address in the above URL with the local IP address of the server."; + $this->sendEmail($email,'Password Reset Information',$msg); + $this->output.="Password reset information has been sent to your email address."; + return; + } + + + # get username + $filt2=$filt; + if($panelusername<>'') $filt2="$filt and panelusername='$panelusername'"; + $username=$this->getField($this->conf['logintable']['tablename'],$this->conf['logintable']['usernamefield'],$filt2); + + #validate hash + $filt3="$filt and hash='$hash'"; + $sayi=$this->recordcount("hash",$filt3); + if($sayi==0) $this->errorTextExit("Received invalid password reset information. Verify the password reset URL that was sent to your email."); + + + + #reset pass + $yenisifre=get_rand_id(5); + $s=$this->executeQuery("update ".$this->conf['logintable']['tablename']." set ".$this->conf['logintable']['passwordfield']."=md5('$yenisifre') where email='$email'",'update user pass','update user pass'); + if($s){ + $msg="Hi EHCP Force User,

Your newly reset password is: $yenisifre
Your username is: $username"; + $this->sendEmail($email,$this->sitename.' - Password Reset Successfully',$msg); + $this->echoln("Your updated account information was sent by email!
"); + $this->executeQuery("delete from hash where $filt3"); # delete hash after verify + } + + } else { + $this->output.='No such email'; + } + } else { + $inputparams=array( + array('email','lefttext'=>'Enter your email:'), + array('panelusername','righttext'=>'leave empty if you dont remember'), + array('op','hidden','default'=>__FUNCTION__) + ); + + $this->output.=inputform5($inputparams); + } + return true; +} + +function getLocalIP() { + global $localip;//only for daemon mode + + // old + //$ipline=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'"); + + // Get first entry only: + $ipline=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | head -1"); + + if(!isset($ipline) || empty($ipline)){ + $ipline = "127.0.0.1"; + } + $localip=$ipline; + return $ipline; +} + + +function generateMySQLInClause($arrayOfInputs){ + $inClause = "IN ('"; + for($i = 0; $i < count($arrayOfInputs); $i++){ + if($i == 0){ + $inClause .= $arrayOfInputs[$i]; + }else{ + $inClause .= "','" . $arrayOfInputs[$i]; + } + } + $inClause .= "')"; + + return $inClause; +} + +}// end class + +?> diff --git a/ehcp/config.php b/ehcp/config.php new file mode 100755 index 0000000..a675b9b --- /dev/null +++ b/ehcp/config.php @@ -0,0 +1,51 @@ + \ No newline at end of file diff --git a/ehcp/config/.htaccess b/ehcp/config/.htaccess new file mode 100755 index 0000000..03688ee --- /dev/null +++ b/ehcp/config/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/ehcp/config/config.php b/ehcp/config/config.php new file mode 100755 index 0000000..2fb56e4 --- /dev/null +++ b/ehcp/config/config.php @@ -0,0 +1,4 @@ + diff --git a/ehcp/config/db_readme.txt b/ehcp/config/db_readme.txt new file mode 100755 index 0000000..9a62630 --- /dev/null +++ b/ehcp/config/db_readme.txt @@ -0,0 +1,3 @@ +ehcp uses adodb as the database abstraction layer. +http://adodb.sourceforge.net/ + diff --git a/ehcp/config/dbconf.php b/ehcp/config/dbconf.php new file mode 100755 index 0000000..007055b --- /dev/null +++ b/ehcp/config/dbconf.php @@ -0,0 +1,16 @@ + diff --git a/ehcp/config/randomstring.php b/ehcp/config/randomstring.php new file mode 100755 index 0000000..3ad0f71 --- /dev/null +++ b/ehcp/config/randomstring.php @@ -0,0 +1,136 @@ +0) + { + $rand_id=""; + for($i=1; $i<=$length; $i++) + { + mt_srand((double)microtime() * 1000000); + $num = mt_rand(1,36); + $rand_id .= assign_rand_value($num); + } + } +return $rand_id; +} + +?> diff --git a/ehcp/config/readme.txt b/ehcp/config/readme.txt new file mode 100755 index 0000000..d92ce54 --- /dev/null +++ b/ehcp/config/readme.txt @@ -0,0 +1,4 @@ +this directory is old, obsolete, +not used most of the time... +or will be deleted in future.. + diff --git a/ehcp/console.php b/ehcp/console.php new file mode 100755 index 0000000..fbf3bc8 --- /dev/null +++ b/ehcp/console.php @@ -0,0 +1,191 @@ + $v) { + $identifiers[strtolower($v['identifier'])] = $k; + $max_length = max(strlen($v['identifier']), $max_length); + } + + while (true) { + if ($clear) { + self::ClearScreen(); + } + + echo "Please select one of the following options:\n\n"; + + // Print the menu + foreach ($items as $k => $v) { + echo str_pad($v['identifier'], $max_length, ' ', STR_PAD_LEFT), ") ", $v['text'], "\n"; + } + + echo "\nSelect: "; + $input = trim(strtolower(self::GetLine())); + + // Invalid menu item chosen + if (!isset($identifiers[$input])) { + echo "Invalid menu item chosen...\n"; + sleep(1); + continue; + + // Valid menu item chosen + } else { + $item = $items[$identifiers[$input]]; + if (!empty($item['callback']) AND is_callable($item['callback'])) { + call_user_func($item['callback'], $input); + } + + return $input; + } + } + } +} +?> diff --git a/ehcp/daemon.sh b/ehcp/daemon.sh new file mode 100755 index 0000000..29ac068 --- /dev/null +++ b/ehcp/daemon.sh @@ -0,0 +1 @@ +nohup ./ehcpdaemon.sh & diff --git a/ehcp/dnsnamedconftemplate b/ehcp/dnsnamedconftemplate new file mode 100755 index 0000000..533e43f --- /dev/null +++ b/ehcp/dnsnamedconftemplate @@ -0,0 +1,12 @@ +/* +domain id:{id} +domainname:{domainname} +panelusername:{panelusername} +reseller:{reseller} +aciklama-explanation:{aciklama} +*/ +zone "{domainname}" { + type master; + file "{namedbase}/{domainname}"; +}; + diff --git a/ehcp/dnsnamedconftemplate_slave b/ehcp/dnsnamedconftemplate_slave new file mode 100755 index 0000000..986ca8f --- /dev/null +++ b/ehcp/dnsnamedconftemplate_slave @@ -0,0 +1,13 @@ +/* +domain id:{id} +domainname:{domainname} +panelusername:{panelusername} +reseller:{reseller} +aciklama-explanation:{aciklama} +*/ +zone "{domainname}" { + type slave; + file "{namedbase}/{domainname}"; + masters { {dnsmaster}; }; +}; + diff --git a/ehcp/dnszonetemplate b/ehcp/dnszonetemplate new file mode 100755 index 0000000..ff36eb0 --- /dev/null +++ b/ehcp/dnszonetemplate @@ -0,0 +1,31 @@ +$TTL 86400 +@ IN SOA ns.{domainname}. {dnsemail} ( + {serial} ; Serial, this is www.ehcp.net dns zone template file.. + 10800 ; Refresh + 1200 ; Retry + 86400 ; Expire + 86400 ) ; Minimum + +{domainname}. IN NS ns.{domainname}. +{domainname}. IN NS ns1.{domainname}. +{domainname}. IN NS ns2.{domainname}. +ns.{domainname}. IN A {dnsip} +ns1.{domainname}. IN A {dnsip} +ns2.{domainname}. IN A {dnsip} +dns.{domainname}. IN A {dnsip} +dns1.{domainname}. IN A {dnsip} +dns2.{domainname}. IN A {dnsip} +{domainname}. IN A {webip} +mail.{domainname}. IN A {mailip} +smtp.{domainname}. IN A {webip} +imap.{domainname}. IN A {webip} +webmail.{domainname}. IN A {webip} +ehcp.{domainname}. IN A {webip} +ftp.{domainname}. IN CNAME {domainname}. +www.{domainname}. IN CNAME {domainname}. +{domainname}. IN MX 10 mail.{domainname}. +{domainname}. IN TXT "v=spf1 a mx" + +{customdns} + +* IN A {webip} diff --git a/ehcp/dnszonetemplate_multiple_servers b/ehcp/dnszonetemplate_multiple_servers new file mode 100755 index 0000000..8117846 --- /dev/null +++ b/ehcp/dnszonetemplate_multiple_servers @@ -0,0 +1,31 @@ +$TTL 86400 +@ IN SOA ns.{domainname}. {dnsemail} ( + {serial} ; Serial, this is www.ehcp.net dns zone template file.. + 10800 ; Refresh + 1200 ; Retry + 86400 ; Expire + 86400 ) ; Minimum + +{domainname}. IN NS ns.{domainname}. +{domainname}. IN NS ns1.{domainname}. +{domainname}. IN NS ns2.{domainname}. +ns.{domainname}. IN A {dnsserverips} +ns1.{domainname}. IN A {dnsserverips} +ns2.{domainname}. IN A {dnsserverips} +dns.{domainname}. IN A {dnsserverips} +dns1.{domainname}. IN A {dnsserverips} +dns2.{domainname}. IN A {dnsserverips} +{domainname}. IN A {webserverips} +mail.{domainname}. IN A {mailserverips} +smtp.{domainname}. IN A {mailserverips} +imap.{domainname}. IN A {mailserverips} + +webmail.{domainname}. IN A {webserverips} +ftp.{domainname}. IN CNAME {domainname}. +www.{domainname}. IN CNAME {domainname}. +{domainname}. IN MX 10 mail.{domainname}. +{domainname}. IN TXT "v=spf1 a mx" + +{customdns} + +* IN A {webserverips} diff --git a/ehcp/ehcp b/ehcp/ehcp new file mode 100755 index 0000000..16639c3 --- /dev/null +++ b/ehcp/ehcp @@ -0,0 +1,81 @@ +#!/bin/bash +# By ehcpforce.tk +### BEGIN INIT INFO +# Provides: ehcp +# Required-Start: $remote_fs $all +# Required-Stop: $remote_fs +# Should-Start: $remote_fs +# Should-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: starts ehcp +# Description: Starts The EHCP Daemon +### END INIT INFO + +echo +echo + +show_ehcp(){ + ps aux | grep ehcpdaemon2 | grep -v grep + ps aux | grep "index.php daemon" | grep -v grep + + return 0 +} + +ehcp_start(){ + echo "Your OS info:" + cat /etc/*ele* + + echo "starting ehcp.." + cd /var/www/new/ehcp + ./ehcpdaemon.sh + show_ehcp + + return 0 +} + +ehcp_stop(){ + echo "stopping ehcp.." + + echo "stopping ehcpdaemon2.sh" + ps aux | grep ehcpdaemon2 | grep -v grep | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 + + echo "stopping index.php daemon" + ps aux | grep "index.php daemon" | grep -v grep | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 + + show_ehcp + + return 0 +} + + +case $1 in + start) + ehcp_start + RETVAL=$? + ;; + + stop) + ehcp_stop + RETVAL=$? + ;; + + restart) + ehcp_stop + ehcp_start + RETVAL=$? + ;; + + status) + show_ehcp + RETVAL=$? + ;; + + *) + echo "Usage: service ehcp {start|stop|restart|status}" + RETVAL=1 + ;; +esac +exit $RETVAL + + diff --git a/ehcp/ehcp-apt-get-install.log b/ehcp/ehcp-apt-get-install.log new file mode 100755 index 0000000..e69de29 diff --git a/ehcp/ehcp.sql b/ehcp/ehcp.sql new file mode 100755 index 0000000..28f25c2 --- /dev/null +++ b/ehcp/ehcp.sql @@ -0,0 +1,463 @@ +CREATE TABLE IF NOT EXISTS `scripts` ( + `id` tinyint(4) NOT NULL auto_increment, + `scriptname` varchar(50) default NULL, + `homepage` varchar(50) default NULL, + `description` text, + `filetype` varchar(15) default NULL, + `fileinfo` varchar(200) default NULL, + `scriptdirtocopy` varchar(50) default NULL, + `commandsaftercopy` text, + `customfileownerships` text, + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='ehcp db - stores scripts that can be installed in ehcp'; + +INSERT INTO `scripts` (`id`, `scriptname`, `homepage`, `description`, `filetype`, `fileinfo`, `scriptdirtocopy`, `commandsaftercopy`, `customfileownerships`) VALUES +(1, 'WordPress', NULL, NULL, 'directurl', 'https://wordpress.org/latest.zip', 'wordpress', '', NULL), +(2, 'Joomla', NULL, NULL, 'directurl', 'http://ehcpforce.tk/files/Joomla_3.4.0-Stable-Full_Package.zip', '', '', NULL), +(3, 'SMF2', NULL, 'Simple Machine Forum Software Version 2.0.9', 'directurl', 'http://ehcpforce.tk/files/smf_2-0-9_install.zip', '', '', NULL), +(4, 'phpBB', NULL, 'phpBB Forum Software Version 3.1.3', 'directurl', 'http://ehcpforce.tk/files/phpBB-3.1.3.zip', 'phpBB3', '', NULL), +(5, 'Drupal', NULL, 'Drupal CMS Version 7.35', 'directurl', 'http://ehcpforce.tk/files/drupal-7.35.zip', 'drupal-7.35', '', NULL), +(6, 'phpCOIN', NULL, 'phpCOIN Billing Software Force Edition Latest from SVN', 'directurl', 'http://ehcpforce.tk/files/phpcoin_force_edition_stable_snapshot.zip', 'phpCOIN', '', NULL), +(7, 'SMF1', NULL, 'Simple Machine Forum Software Version 1.1.20', 'directurl', 'http://ehcpforce.tk/files/smf_1-1-20_install.zip', '', '', NULL), +(8, 'MyBB', NULL, 'MyBB Version 1.8.4', 'directurl', 'http://ehcpforce.tk/files/mybb_install.zip', '', '', NULL); + +CREATE TABLE IF NOT EXISTS scripts_log ( + id tinyint(4) NOT NULL auto_increment, + host varchar(30) default NULL, + scriptname varchar(50) default NULL, + dir text, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + link varchar(200) default NULL, + PRIMARY KEY (id) +) COMMENT='ehcp db - stores script install logs that are installed through ehcp easy install scripts'; + +CREATE TABLE IF NOT EXISTS servers ( + id smallint(6) NOT NULL auto_increment, + servertype varchar(10) default NULL, + ip varchar(30) default NULL, + accessip varchar(30) default NULL, + mandatory char(1) default NULL, + location varchar(20) default NULL, + password varchar(20) default NULL, + defaultmysqlhostname varchar(30) default NULL, + PRIMARY KEY (id) +) COMMENT='ehcp db - servers that are to be used with ehcp, multi server concept'; + +CREATE TABLE IF NOT EXISTS directories ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + username varchar(30) default NULL, + password varchar(30) default NULL, + directory varchar(100) NOT NULL, + expire date default NULL, + comment varchar(50) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - password protected directories'; + +CREATE TABLE IF NOT EXISTS subdomains ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + subdomain varchar(30) default NULL, + domainname varchar(50) default NULL, + homedir varchar(100) default NULL, + ftpusername varchar(30) default NULL, + comment varchar(50) default NULL, + status varchar(10) default NULL, + password varchar(20) default NULL, + email varchar(50) default NULL, + webserverips varchar(200) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - subdomains'; + +CREATE TABLE IF NOT EXISTS customsettings ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + name varchar(30) default NULL, + webservertype varchar(30) default NULL, + `value` text, + value2 text, + comment varchar(50) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - custom http, custom dns for domains'; + +CREATE TABLE alias ( + host varchar(30) default NULL, + address varchar(255) NOT NULL default '', + goto text NOT NULL, + domain varchar(255) NOT NULL default '', + created datetime default NULL, + modified datetime default NULL, + active tinyint(1) NOT NULL default '1', + PRIMARY KEY (address), + KEY address (address) +) COMMENT='ehcp db - Postfix Admin - Virtual Aliases'; + +CREATE TABLE IF NOT EXISTS domains ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + webserverips varchar(200) default NULL, + dnsserverips varchar(200) default NULL, + mailserverips varchar(200) default NULL, + mysqlserverips varchar(200) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + homedir varchar(100) default NULL, + comment varchar(50) default NULL, + status varchar(10) default NULL, + serverip varchar(30) default NULL, + diskquotaused int(4) default NULL, -- Thanks to deconectat + diskquota int(4) default NULL, + diskquotaovernotified int(4) NULL, + diskquotaoversince date NULL , + graceperiod int(4) default 7 , + apachetemplate text NULL, + dnstemplate text NULL, + aliases text NULL, + apache2template text NULL, + nginxtemplate text NULL, + theorder int(11) default NULL, + dnsmaster varchar(15) default NULL, + redirect_to varchar(200) default NULL, + ssl_cert text NULL, + ssl_cert_key text NULL, + ssl_cert_chain text NULL, + ssl_wild_card bit(1) default b'0', + ssl_use_letsenc bit(1) default b'0', + ssl_redirect_https bit(1) default b'0', + ssl_lets_enc_additional_hosts text NULL, + PRIMARY KEY (id), + KEY domainname (domainname) +) comment='ehcp db - list of domains and their properties'; + +CREATE TABLE IF NOT EXISTS emailusers ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + mailusername varchar(30) default NULL, + beforeat varchar(30) default NULL, + password varchar(40) default NULL, + email varchar(80) NOT NULL default '', + status varchar(10) NULL default '', + quota int(10) default '10485760', + autoreplysubject varchar(100) default NULL, + autoreplymessage text, + PRIMARY KEY (id), + KEY email (email) +) COMMENT='ehcp db - email users of domains'; + +CREATE TABLE IF NOT EXISTS forwardings ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + source varchar(80) NOT NULL default '', + destination text NOT NULL, + PRIMARY KEY (id) +) comment='ehcp db - email forwardings'; + +CREATE TABLE ftpaccounts ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + ftpusername varchar(30) NOT NULL, + password varchar(50) NOT NULL, + domainname varchar(50) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + homedir varchar(100) default NULL, + status varchar(10) default NULL, + type varchar(10) default NULL, + `datetime` datetime default NULL, + PRIMARY KEY (id), + UNIQUE KEY ftpusername (ftpusername) +) comment='ehcp db - ftp accounts that are used in domains,ehcp,etc, used in vsftpd'; + +CREATE TABLE html ( + id varchar(30) NOT NULL default '0', + htmlkodu longtext, + htmlkodu2 longtext, + aciklama varchar(50) default NULL, + grup varchar(20) default NULL, + PRIMARY KEY (id), + KEY id (id) +) comment='ehcp db - used in db style of templates, not used much now'; + +CREATE TABLE IF NOT EXISTS backups ( + id int(11) NOT NULL auto_increment, + domainname varchar(100) default NULL, + host varchar(30) default NULL, + backupname varchar(100) default NULL, + filename varchar(200) default NULL, + date datetime default NULL, + size bigint(20) default NULL, + status varchar(100) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - list of backups done through ehcp gui'; + +CREATE TABLE log ( + id int(11) NOT NULL auto_increment, + tarih datetime default NULL, + panelusername varchar(50) default NULL, + notified varchar(5) default NULL, + ip varchar(30) default NULL, + log varchar(60) default NULL, + referrer varchar(100) default NULL, + url varchar(100) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - some log entries, may not be used'; + +CREATE TABLE log2 ( + id int(11) NOT NULL auto_increment, + panelusername varchar(30) default NULL, + referrer varchar(80) default NULL, + count int(11) default NULL, + aciklama varchar(30) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - some log entries, may not be used'; + +CREATE TABLE IF NOT EXISTS misc ( + id int(11) NOT NULL auto_increment, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + name varchar(40) default NULL, + `value` varchar(200) default NULL, + longvalue text, + comment varchar(100) default NULL, + PRIMARY KEY (id) +) COMMENT='ehcp db - Table for misc configruation of ehcp'; + +INSERT INTO misc (id, name, `value`, longvalue,comment) VALUES +(1, 'dnsip', '83.133.127.19', NULL,''), +(2, 'adminname', 'b', NULL,''), +(3, 'adminemail', 'b', NULL,''), +(5, 'ehcpdir', '/var/www/vhosts/ehcp', NULL,''), +(6, 'banner', '', 'this is banner.. you may write here something using server settings\r\n

',''), +(7, 'defaulttemplate', 'picante', NULL,''), +-- (7, 'defaulttemplate', 'xp5-z7', NULL,''), +(8, 'defaultlanguage', 'en', NULL,''), +(9, 'updatehostsfile', 'on', NULL,''), +(10,'messagetonewuser', 'Dns servers for our server:\r\n...........\r\n\r\n(This will be sent to new users)', '',''), +(11, 'backupdir', '/var/backup', NULL,''), +(12, 'quotaupdateinterval', '6', NULL,'this is in hours, quota will be calculated in this interval'), +(13, 'webservertype', 'apache2', NULL,'apache2 or nginx, (or any other that is supported)'), +(14, 'webservermode', 'nonssl', NULL,'ssl or nonssl'), +(15, 'mysqlcharset', 'DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci', NULL,'Default charset/collation for newly added databases'), +(16, 'enablewebstats', 'on',null,'Webalizer web stats'), +(17, 'versionwarningcounter', '5',null,'') +; + +CREATE TABLE mysqldb ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + dbname varchar(30) default NULL, + aciklama varchar(30) NOT NULL default '', + PRIMARY KEY (id) +) comment='ehcp db - list of mysql databases, related to ehcp'; + +CREATE TABLE mysqlusers ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + panelusername varchar(30) default NULL, + domainname varchar(50) default NULL, + dbname varchar(30) default NULL, + dbusername varchar(30) default NULL, + password varchar(30) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - list of mysql users related to ehcp'; + +CREATE TABLE operations ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + user varchar(30) default NULL, + ip varchar(30) default NULL, + op varchar(50) default NULL, + status varchar(15) default NULL, + tarih datetime default NULL, + try smallint(6) default '0', + info text default NULL, + info2 text default NULL, + info3 text default NULL, + action varchar(50) default NULL, + PRIMARY KEY (id) +) comment='ehcp db - list of pending/done daemon operations, misc operations.. '; + + +CREATE TABLE panelusers ( + id int(11) NOT NULL auto_increment, + host varchar(30) default NULL, + reseller varchar(30) default NULL, + domainname varchar(50) default NULL, + panelusername varchar(30) default NULL, + password varchar(40) default NULL, + email varchar(80) NOT NULL default '', + quota int(20) default '10485760', + maxdomains int(11) default NULL, + maxemails int(11) default NULL, + maxpanelusers int(11) default NULL, + maxftpusers int(6) default NULL, + maxdbs int(11) default NULL, + status varchar(10) default NULL, + name varchar(100) default NULL, + comment varchar(100) default NULL, + theme_color varchar(7) default NULL, + theme_contrast varchar(10) default NULL, + master_reseller tinyint(1) default 0, + maxsubdomains int(11) default 10, + PRIMARY KEY (id) +) comment='ehcp db - panel users, clients, resellers'; + +INSERT INTO panelusers (id, reseller, domainname, panelusername, password, email, quota, maxdomains, maxemails, maxpanelusers, maxftpusers, maxdbs, status, name) VALUES +(1, 'admin', '', 'admin', '81dc9bdb52d04dc20036dbd8313ed055', 'admin@admindomain.com', 0, 50000, 50000, 50000, 50000, 50000, 'active', NULL); + +CREATE TABLE transport ( + domainname varchar(128) NOT NULL default '', + transport varchar(128) NOT NULL default '', + UNIQUE KEY domainname (domainname) +) comment='ehcp db - email transport maps'; + +DROP TABLE IF EXISTS `hash`; +CREATE TABLE IF NOT EXISTS `hash` ( + `email` varchar(100) COLLATE utf8_turkish_ci NOT NULL DEFAULT 'NULL', + `hash` varchar(100) COLLATE utf8_turkish_ci DEFAULT NULL, + KEY `email_index` (`email`) +) DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='to store password remind hash'; + +# these are net2ftp tables for logging etc... +DROP TABLE IF EXISTS net2ftp_logAccess; +DROP TABLE IF EXISTS net2ftp_log_access; +CREATE TABLE net2ftp_log_access (id int(10) unsigned NOT NULL auto_increment,date date NOT NULL,time time NOT NULL,remote_addr text NOT NULL,remote_port text NOT NULL,http_user_agent text NOT NULL,page text NOT NULL,datatransfer int(10) unsigned default '0',executiontime mediumint(8) unsigned default '0',ftpserver text NOT NULL,username text NOT NULL,state text NOT NULL,state2 text NOT NULL,screen text NOT NULL,directory text NOT NULL,entry text NOT NULL,http_referer text NOT NULL,KEY index1 (id)); +DROP TABLE IF EXISTS net2ftp_logError; +DROP TABLE IF EXISTS net2ftp_log_error; +CREATE TABLE net2ftp_log_error (date date NOT NULL,time time NOT NULL,ftpserver text NOT NULL,username text NOT NULL,message text NOT NULL,backtrace text NOT NULL,state text NOT NULL,state2 text NOT NULL,directory text NOT NULL,remote_addr text NOT NULL,remote_port text NOT NULL,http_user_agent text NOT NULL,KEY index1 (date,time,ftpserver(100),username(50))); +DROP TABLE IF EXISTS net2ftp_logConsumptionFtpserver; +DROP TABLE IF EXISTS net2ftp_log_consumption_ftpserver; +CREATE TABLE net2ftp_log_consumption_ftpserver(date date NOT NULL,ftpserver varchar(255) NOT NULL default '0',datatransfer int(10) unsigned default '0',executiontime mediumint(8) unsigned default '0',PRIMARY KEY (date,ftpserver)); +DROP TABLE IF EXISTS net2ftp_logConsumptionIpaddress; +DROP TABLE IF EXISTS net2ftp_log_consumption_ipaddress; +CREATE TABLE net2ftp_log_consumption_ipaddress(date date NOT NULL,ipaddress varchar(15) NOT NULL default '0',datatransfer int(10) unsigned default '0',executiontime mediumint(8) unsigned default '0',PRIMARY KEY (date,ipaddress)); +DROP TABLE IF EXISTS net2ftp_users; +CREATE TABLE net2ftp_users (ftpserver varchar(255) NOT NULL default '0',username text NOT NULL,homedirectory text NOT NULL,KEY index1 (ftpserver,username(50))); + +CREATE TABLE IF NOT EXISTS `vps` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `reseller` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `panelusername` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `status` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `vpsname` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `description` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `hostip` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `ip2` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `netmask` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `broadcast` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `gateway` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL, + `image_template` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `cdimage` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `ram` int(11) DEFAULT NULL, + `cpu` int(11) DEFAULT NULL, + `state` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `ping` varchar(10) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL, + `hdimage` varchar(200) DEFAULT NULL, + `vncpassword` varchar(20) DEFAULT NULL, + `addvpscmd` text default null, + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='ehcp db - list of domains and their properties'; + + +CREATE TABLE IF NOT EXISTS `settings` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `group` varchar(20) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `reseller` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `panelusername` varchar(30) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + `value` text CHARACTER SET utf8 COLLATE utf8_turkish_ci, + `longvalue` text CHARACTER SET utf8 COLLATE utf8_turkish_ci, + `comment` varchar(100) CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT '', + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='ehcp db - Table for misc configruation of ehcp'; + +CREATE TABLE IF NOT EXISTS `remote_backups` ( + `id` tinyint(4) NOT NULL auto_increment, + `name` varchar(50) default NULL, + `dayofweek` tinyint(1) default NULL, + `time` varchar(2), + `transfer_method` varchar(20) default NULL, + `transfer_host` varchar(100) default NULL, + `transfer_port` varchar(5) default NULL, + `transfer_login` varchar(50) default NULL, + `transfer_pass` varchar(50) default NULL, + `encryption_pass` varchar(50) default NULL, + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='Used to schedule cronjobs for remote backups'; + +CREATE TABLE IF NOT EXISTS `cronjobs` ( + `id` tinyint(4) NOT NULL auto_increment, + `script` varchar(100) default NULL, + `dayofweek` tinyint(1) default NULL, + `time` varchar(2), + PRIMARY KEY (`id`) +) DEFAULT CHARSET=latin1 COMMENT='Used to run any cronjobs an admin may want to run'; + +CREATE TABLE IF NOT EXISTS `pwd_dirs` ( + id int(11) NOT NULL auto_increment, + domainname varchar(100) default NULL, + domainpath varchar(300) default NULL, + protected_dir varchar(50) default NULL, + username varchar(50) default NULL, + password varchar(50) default NULL, + PRIMARY KEY (id) +) comment='Used for password protected directories'; + +CREATE TABLE IF NOT EXISTS `hosting_plans` ( + id int(11) NOT NULL auto_increment, + name varchar(200) default NULL, + master_reseller tinyint(1) default 0, + max_panelusers int(11) default NULL, + max_ftpusers smallint(6) default NULL, + max_dbs int(11) default NULL, + max_emails int(11) default NULL, + max_domains int(11) default NULL, + max_subdomains int(11) default NULL, + quota int(20) default '10485760', + panelusername varchar(30) NOT NULL default 'admin', + PRIMARY KEY (id) +) comment='Used for admin defined hosting plans'; + +CREATE TABLE IF NOT EXISTS `hosting_plans` ( + id int(11) NOT NULL auto_increment, + name varchar(200) default NULL, + master_reseller tinyint(1) default 0, + max_panelusers int(11) default NULL, + max_ftpusers smallint(6) default NULL, + max_dbs int(11) default NULL, + max_emails int(11) default NULL, + max_domains int(11) default NULL, + max_subdomains int(11) default NULL, + quota int(20) default '10485760', + panelusername varchar(30) NOT NULL default 'admin', + PRIMARY KEY (id) +) comment='Used for admin defined hosting plans'; + +CREATE TABLE IF NOT EXISTS `globalwebservertemplates` ( + template_name varchar(100) NOT NULL, + template_webserver_type varchar(100) NOT NULL, + template_ssl_type varchar(100) NOT NULL, + template_value text default NULL, + PRIMARY KEY (template_name, template_webserver_type, template_ssl_type) +) comment='Used for custom global webserver templates'; diff --git a/ehcp/ehcp_fix_apache.php b/ehcp/ehcp_fix_apache.php new file mode 100755 index 0000000..6c0b42c --- /dev/null +++ b/ehcp/ehcp_fix_apache.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +cerceve="standartcerceve"; +$app->connecttodb(); + + +$app->addDaemonOp('fixApacheConfigNonSsl','','','','fixApacheConfigNonSsl'); +$app->addDaemonOp('syncdomains','','','','sync domains'); +$app->addDaemonOp('syncftp','','','','sync ftp for nonstandard homes'); +$app->addDaemonOp('syncdns','','','','sync dns'); +$app->addDaemonOp('syncapacheauth','','','','sync apache auth'); +passthru2("service ehcp restart"); + +$app->showoutput(); + +?> diff --git a/ehcp/ehcp_vsftpd.sh.txt b/ehcp/ehcp_vsftpd.sh.txt new file mode 100755 index 0000000..3de207d --- /dev/null +++ b/ehcp/ehcp_vsftpd.sh.txt @@ -0,0 +1,78 @@ +# This file is no longer used in ehcp, left here for historical purposes. + +log_ftp_protocol=YES +listen=YES +anonymous_enable=NO +local_enable=YES +write_enable=YES +local_umask=022 +dirmessage_enable=YES +xferlog_enable=YES +connect_from_port_20=YES +nopriv_user=vsftpd +chroot_local_user=YES +secure_chroot_dir=/var/run/vsftpd +pam_service_name=vsftpd +rsa_cert_file=/etc/ssl/certs/vsftpd.pem +guest_enable=YES +guest_username=vsftpd +local_root=/home/vsftpd/$USER +user_sub_token=$USER +virtual_use_local_privs=YES +user_config_dir=/etc/vsftpd_user_conf + + + +auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 +account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 + + +auth required pam_mysql.so user=ehcp passwd=12345 host=localhost db=ehcp table=accounts usercolumn=username passwdcolumn=pass crypt=2 +account required pam_mysql.so user=ehcp passwd=12345 host=localhost db=ehcp table=accounts usercolumn=username passwdcolumn=pass crypt=2 +ok. + +auth required pam_mysql.so user=ehcp passwd=12345 host=localhost db=ehcp table=ftpaccounts usercolumn=ftpusername passwdcolumn=password crypt=2 +account required pam_mysql.so user=ehcp passwd=12345 host=localhost db=ehcp table=ftpaccounts usercolumn=ftpusername passwdcolumn=password crypt=2 +ok. + + +CREATE TABLE `ftpaccounts` ( + `id` int(11) NOT NULL auto_increment, + `ftpusername` varchar(30) NOT NULL, + `password` varchar(50) NOT NULL, + `domainname` varchar(40) default NULL, + `panelusername` varchar(30) default NULL, + `reseller` varchar(30) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`ftpusername`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; + +-- +-- Tablo d�k�m verisi `ftpaccounts` +-- + +INSERT INTO `ftpaccounts` (`id`, `ftpusername`, `password`, `domainname`, `panelusername`, `reseller`) VALUES (1, 'test', '*676243218923905CF94CB52A3C9D3EB30CE8E20D', NULL, NULL, NULL); + + +ok. bu haliyle calisti. + + +bu da calisti: +CREATE TABLE `ftpaccounts` ( + `id` int(11) NOT NULL auto_increment, + `ftpusername` varchar(30) NOT NULL, + `password` varchar(50) NOT NULL, + `domainname` varchar(40) default NULL, + `panelusername` varchar(30) default NULL, + `reseller` varchar(30) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ftpusername` (`ftpusername`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; + +-- +-- Tablo d�k�m verisi `ftpaccounts` +-- + +INSERT INTO `ftpaccounts` (`id`, `ftpusername`, `password`, `domainname`, `panelusername`, `reseller`) VALUES (1, 'test', '*676243218923905CF94CB52A3C9D3EB30CE8E20D', NULL, NULL, NULL); + + diff --git a/ehcp/ehcpdaemon.sh b/ehcp/ehcpdaemon.sh new file mode 100755 index 0000000..ca314b1 --- /dev/null +++ b/ehcp/ehcpdaemon.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# only calls nohup... + +nohup /var/www/new/ehcp/ehcpdaemon2.sh >> /var/log/ehcp.log 2>&1 & diff --git a/ehcp/ehcpdaemon2.sh b/ehcp/ehcpdaemon2.sh new file mode 100755 index 0000000..5e10f3f --- /dev/null +++ b/ehcp/ehcpdaemon2.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# This small shell is written to re-run php based daemon in case of failure.. +# because php based daemon quits sometime ocasionally or un-expectedly... +# Changed the way this works by using a function that respawns the php script if it exits. +# Changed by: earnolmartin@gmail.com +function startPHPDaemon(){ + cd /var/www/new/ehcp + until php index.php daemon ; do + echo "Server php index.php daemon crashed with exit code -1. Respawning..." >&2 + sleep 3 + done + startPHPDaemon +} + +# Start the initial loop +startPHPDaemon diff --git a/ehcp/ehcpdaemon_stop.sh b/ehcp/ehcpdaemon_stop.sh new file mode 100755 index 0000000..3304311 --- /dev/null +++ b/ehcp/ehcpdaemon_stop.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Stops the EHCP daemon +# Used by systemd +# Moved commands here since systemd character escaping is retarded + +ps aux | grep ehcpdaemon2 | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 +ps aux | grep "index.php daemon" | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 diff --git a/ehcp/ehcpforceupdate.sh b/ehcp/ehcpforceupdate.sh new file mode 100755 index 0000000..f8904fe --- /dev/null +++ b/ehcp/ehcpforceupdate.sh @@ -0,0 +1,2893 @@ +#!/bin/bash +# EHCP Non-Force Edition to EHCP Force Edition Upgrade Script +# By earnolmartin@gmail.com +# http://www.ehcpforce.tk + +########### +#FUNCTIONS# +########### + +function setGlobalVars(){ + FIXDIR="/var/www/new/ehcp/fixes" + serviceNameTempFile="/root/ehcp_service_name_search_temp_file" + patchDir="/root/Downloads" + if [ ! -e $patchDir ]; then + mkdir $patchDir + fi + getVSFTPDUser + getPHPConfigPath + installerDir=$(pwd) + initProcessStr=$(ps -p 1 | awk '{print $4}' | tail -n 1) + if [ "$initProcessStr" == "systemd" ]; then + systemdPresent=1 + fi + EHCPMySQLPass=$(cat "/var/www/new/ehcp/config.php" | grep -o "dbpass=.*" | grep -o "=.*" | grep -o "[^='].*" | grep -o ".*[^';]") +} + +function detectRunningWebServer(){ + # Get the web server type from the database + curDir=$(pwd) + cd "$patchDir" + cp "$FIXDIR/api/getwebservertype.tar.gz" "getwebservertype.tar.gz" + tar -zxvf "getwebservertype.tar.gz" + WebServerType=$(php -f getwebservertype.php | xargs) + + if [ -z "$WebServerType" ] || [[ "$WebServerType" != "nginx" && "$WebServerType" != "apache2" ]]; then + nginxIsRunning=$(pidof nginx) + apache2IsRunning=$(pidof apache2) + if [ ! -z "$nginxIsRunning" ]; then + WebServerType="nginx" + fi + if [ ! -z "$apache2IsRunning" ]; then + WebServerType="apache2" + fi + fi + cd "$curDir" +} + +function aptget_Update(){ + apt-get update +} + +function libldapFix(){ # by earnolmartin@gmail.com + # install libldap, for vsftpd fix, without prompts + #Remove originally installed libpam-ldap if it exists + origDir=$(pwd) + aptgetRemove libpam-ldap + DEBIAN_FRONTEND=noninteractive apt-get -y install libpam-ldap + cd "$patchDir" + mkdir lib32gccfix + cd lib32gccfix + cp "$FIXDIR/vsftpd/x64/ldap_conf_64bit_vsftpd.tar.gz" "ldap_conf.tar.gz" + tar -zxvf ldap_conf.tar.gz + cp ldap.conf /etc/ + cd $origDir +} + +function fixApacheEnvVars(){ + # Check to make sure export APACHE_LOG_DIR=/var/log/apache2$SUFFIX exists + if [ -e "/etc/apache2/envvars" ]; then + APACHELOGCHECK=$(cat "/etc/apache2/envvars" | grep "APACHE_LOG_DIR=*") + if [ -z "$APACHELOGCHECK" ]; then + echo "export APACHE_LOG_DIR=/var/log/apache2\$SUFFIX" >> "/etc/apache2/envvars" + fi + fi +} + +function slaveDNSApparmorFix(){ # by earnolmartin@gmail.com + if [ -e /etc/apparmor.d/usr.sbin.named ]; then + echo -e "\nChanging bind apparmor rule to allow master DNS synchronization for slave setups.\n" + sed -i 's#/etc/bind/\*\* r,#/etc/bind/\*\* rw,#g' /etc/apparmor.d/usr.sbin.named + manageService "apparmor" "restart" + fi +} + +function changeApacheUser(){ # by earnolmartin@gmail.com + # Apache should run as the vsftpd account so that FTP connections own the file and php scripts can own the file + # Without this fix, files uploaded by ftp could not be changed by PHP scripts... AND + # Files uploaded / created by PHP scripts could not be modified (chmod) via FTP clients + + if [ -e "/etc/apache2/envvars" ]; then + sed -i "s/export APACHE_RUN_USER=.*/export APACHE_RUN_USER=${VSFTPDUser}/g" "/etc/apache2/envvars" + if [ -e "/var/lock/apache2" ]; then + chown ${VSFTPDUser} "/var/lock/apache2" + fi + fi + + # Also change nginx user + changeNginxUser + + # Also change php-fpm user + if [ -e "$PHPCONFDir/fpm/pool.d/www.conf" ]; then + sed -i "s/user = .*/user = ${VSFTPDUser}/g" "$PHPCONFDir/fpm/pool.d/www.conf" + sed -i "s/group = .*/group = www-data/g" "$PHPCONFDir/fpm/pool.d/www.conf" + fi +} + +function changeNginxUser(){ + # Change nginx user + if [ -e "/etc/nginx/nginx.conf" ]; then + sed -i "s/^user .*/user ${VSFTPDUser} www-data;/g" "/etc/nginx/nginx.conf" + fi +} + +function nginxRateLimit(){ + if [ -e "/etc/nginx/nginx.conf" ]; then + NGINXHASRATELIMIT=$(cat "/etc/nginx/nginx.conf" | grep "limit_req_zone") + if [ -z "$NGINXHASRATELIMIT" ]; then + sed -i '/http {/a limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;' "/etc/nginx/nginx.conf" + fi + fi +} + +# Secures BIND and prevents UDP Recursion Attacks: +# https://www.team-cymru.org/Services/Resolvers/instructions.html +# Good explanation FROM MS Forums (LOL): http://social.technet.microsoft.com/Forums/windowsserver/en-US/24ea1094-0ae4-47b5-9b74-2f77884cce15/dns-recursion?forum=winserverNIS +function disableRecursiveBIND(){ # by earnolmartin@gmail.com + # Get Resolv.conf and do not run this code if nameserver is set to 127.0.0.1 + RESOLVCOUNT=$(cat "/etc/resolv.conf" | grep -c "nameserver") + RESOLVLOCAL=$(cat "/etc/resolv.conf" | grep "nameserver 127.0.0.1") + + if [ "$RESOLVCOUNT" == "1" ] && [ ! -z "$RESOLVLOCAL" ]; then + echo -e "Skipping Bind Recursion Settings Due to 127.0.0.1 Nameserver" + else + bindOptionsFile="/etc/bind/named.conf.options" + bindBckFile="/etc/bind/named.conf.options_backup" + if [ -e "$bindOptionsFile" ]; then + + # Create a backup of the original + if [ ! -e "$bindBckFile" ]; then + cp "$bindOptionsFile" "$bindBckFile" + fi + + # Remove all blank lines at the end of the file: + # BINDNoEmptyLines=$(sed '/^ *$/d' "$bindOptionsFile") + # Better code here to strip out ending lines of empty text: http://stackoverflow.com/questions/7359527/removing-trailing-starting-newlines-with-sed-awk-tr-and-friends + # Can also do this for leading and trailing empty lines: sed -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba' file + BINDNoEmptyLines=$(sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' "$bindOptionsFile") + BINDNoEmptyLines=$(trim "$BINDNoEmptyLines") + echo "$BINDNoEmptyLines" > "$bindOptionsFile" + + # Add recursion no + RecursiveSettingCheck=$( cat "$bindOptionsFile" | grep -o "^recursion .*" | grep -o " .*$" | grep -o "[^ ].*" ) + if [ -z "$RecursiveSettingCheck" ]; then + # Put it one line before close pattern + sed -i '$i \recursion no;' "$bindOptionsFile" + else + sed -i 's/^recursion .*/recursion no;/g' "$bindOptionsFile" + fi + + # Add additional-from-cache no + RecursiveCacheCheck=$( cat "$bindOptionsFile" | grep -o "^additional-from-cache .*" | grep -o " .*$" | grep -o "[^ ].*" ) + if [ -z "$RecursiveCacheCheck" ]; then + sed -i '$i \additional-from-cache no;' "$bindOptionsFile" + else + sed -i 's/^additional-from-cache .*/additional-from-cache no;/g' "$bindOptionsFile" + fi + fi + + # Extra optional step + #if [ -e "/etc/default/bind9" ]; then + # sed -i 's/^RESOLVCONF=.*/RESOLVCONF=no/g' "/etc/default/bind9" + #fi + + manageService "bind9" "restart" + fi +} + +function getLatestEHCPFiles(){ + cd "$patchDir" + + # If ehcp folder already exists, delete it + if [ -e "ehcp" ]; then + rm -Rf "ehcp" + fi + + # Get the latest snapshot files of EHCP Force + if [ "$operationMode" == "update" ] || [ "$operationMode" == "upgrade" ]; then + wget -O "ehcpforce_stable_snapshot.tar.gz" -N http://sourceforge.net/projects/ehcpforce/files/ehcpforce_stable_snapshot.tar.gz/download + tar -zxvf "ehcpforce_stable_snapshot.tar.gz" + cd ehcp + CUREHCPDLDIR=$(pwd) + else + svnCount=0 + while [ ! -e "ehcp" ]; do + if [ "$svnCount" -gt "0" ]; then + echo -e "Unable to download the EHCP files from SVN! Please make sure you are connected to the internet. Trying again..." + fi + svn checkout svn://svn.code.sf.net/p/ehcpforce/code/trunk/ehcpforce/ ./ + svnCount=$((svnCount+1)) + done + rm -Rf .svn + cd ehcp + CUREHCPDLDIR=$(pwd) + fi + + # Remove stock config.php (we want to use the existing one) + rm config.php + + # Remove webmail stock config.php (we want to use the existing one) + if [ -e "webmail2" ]; then + cd "webmail2" + if [ -e "config" ]; then + cd "config" + if [ -e "config.php" ]; then + rm "config.php" + fi + fi + fi + + # Go back to main ehcp dir + cd "$CUREHCPDLDIR" + + # Make backup of previous EHCP files + LATESTBACKUPDIR="/var/www/new/ehcp_nonforce" + CurDate=$(date +%Y_%m_%d_%s) + cd .. + if [ ! -e "/var/www/new/ehcp_nonforce" ]; then + cp -R "/var/www/new/ehcp" "/var/www/new/ehcp_nonforce" + else + cp -R "/var/www/new/ehcp" "/var/www/new/ehcp_nonforce_$CurDate" + LATESTBACKUPDIR="/var/www/new/ehcp_nonforce_$CurDate" + fi + + # Copy the updated downloaded EHCP files over + cp -R "ehcp" "/var/www/new/" + + # Restore the old configuraiton files for EHCP and Webmail + cp "$LATESTBACKUPDIR/config.php" "/var/www/new/ehcp" + cp "$LATESTBACKUPDIR/webmail2/config/config.php" "/var/www/new/ehcp/webmail2/config" + + # Fix permissions + fixEHCPPerms + logDirFix + + # Move the old EHCP files into backup directory (enhance security) + if [ "$operationMode" == "update" ] || [ "$operationMode" == "update-svn" ]; then + mv "$LATESTBACKUPDIR" "$EHCPBACKUPDIR/ehcp_force_backup_$CurDate" + elif [ "$operationMode" == "upgrade" ]; then + mv "$LATESTBACKUPDIR" "$EHCPBACKUPDIR/ehcp_backup_$CurDate" + fi +} + +function updateDaemon(){ + manageService "ehcp" "stop" + + # Copy daemon over to init dir + cp /var/www/new/ehcp/ehcp /etc/init.d/ + + # Get rid of experimental python daemon + # It was never used to begin with + if [ -e "/etc/init.d/ehcp_daemon.py" ]; then + rm "/etc/init.d/ehcp_daemon.py" + fi + + # Use systemd Service for newer Ubuntu versions + if ([ "$distro" == "ubuntu" ] && [ "$yrelease" -ge "16" ]) || [ ! -z "$systemdPresent" ]; then + if [ -e "/lib/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/ehcp.service" "/lib/systemd/system" + rm -rf "/etc/init.d/ehcp" + elif [ -e "/etc/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/ehcp.service" "/etc/systemd/system" + rm -rf "/etc/init.d/ehcp" + fi + fi + + # Reload systemd to pick up on the new daemon if applicable + systemctl daemon-reload + systemctl enable ehcp.service +} + +function fail2ban(){ + aptgetInstall fail2ban + manageService "fail2ban" "stop" + + cp "/var/www/new/ehcp/fail2ban/apache-dos.conf" "/etc/fail2ban/filter.d/apache-dos.conf" + cp "/var/www/new/ehcp/fail2ban/ehcp.conf" "/etc/fail2ban/filter.d/ehcp.conf" + cp "/var/www/new/ehcp/fail2ban/postfix-sasl.conf" "/etc/fail2ban/filter.d/postfix-sasl.conf" + + if [ ! -e "/etc/fail2ban/jail.local" ]; then + cp "/var/www/new/ehcp/fail2ban/jail.local" "/etc/fail2ban/jail.local" + fi + + EHCPINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[ehcp\]") + APACHEDOSINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[apache-dos\]") + POSTFIXSASLINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[sasl\]") + + if [ -z "$EHCPINF2BAN" ]; then + echo " +[ehcp] +# fail2ban section for Easy Hosting Control Panel, ehcp.net +enabled = true +port = http,https +filter = ehcp +logpath = /var/www/new/ehcp/log/ehcp_failed_authentication.log +maxretry = 10" >> "/etc/fail2ban/jail.local" + fi + + if [ -z "$APACHEDOSINF2BAN" ]; then + echo " +[apache-dos] +# Apache Anti-DDoS Security Based Log Entries from Mod Evasive Apache Module +enabled = true +port = http,https +filter = apache-dos +logpath = /var/log/apache*/*error.log +maxretry = 5" >> "/etc/fail2ban/jail.local" + fi + + if [ -z "$POSTFIXSASLINF2BAN" ]; then + echo " +[sasl] +enabled = true +port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s +filter = postfix-sasl +# You might consider monitoring /var/log/warn.log instead +# if you are running postfix. See http://bugs.debian.org/507990 +logpath = /var/log/mail.log +maxretry = 4" >> "/etc/fail2ban/jail.local" + fi + + manageService "fail2ban" "restart" +} + +function mysqlUseLocalHost(){ + if [ -e "/etc/mysql/my.cnf" ]; then + sed -i "s/^bind-address.*/bind-address=0.0.0.0/g" "/etc/mysql/my.cnf" + fi + + if [ -e "/etc/mysql/mariadb.conf.d/50-server.cnf" ]; then + sed -i "s/^bind-address.*/bind-address=0.0.0.0/g" "/etc/mysql/mariadb.conf.d/50-server.cnf" + fi + + manageService "mysql" "restart" +} + +function apacheSecurity(){ + aptgetInstall libapache2-mod-evasive + aptgetInstall libapache-mod-security + aptgetInstall libapache2-modsecurity + + # Make sure the conf.d directory exists + addConfDFolder + + # Shouldn't be running, but attempt to stop it anyways just in case + manageService "apache2" "stop" + + # Ensures that we always get the latest security rules and apply only the latest + if [ -e "/etc/apache2/mod_security_rules" ]; then + rm -R "/etc/apache2/mod_security_rules" + fi + + mkdir /etc/apache2/mod_security_rules + cd "$patchDir" + + if [ -e "mod_security_rules_latest" ]; then + rm -R "mod_security_rules_latest" + fi + + mkdir "mod_security_rules_latest" + + # Different rules based on different versions + if [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$yrelease" -ge "14" && "$distro" == "ubuntu" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "$FIXDIR/apache2/modsecurity/mod_security_rules_13.10.tar.gz" "mod_security_rules.tar.gz" + else + cp "$FIXDIR/apache2/modsecurity/mod_security_base_rules.tar.gz" "mod_security_rules.tar.gz" + fi + + tar -zxvf "mod_security_rules.tar.gz" -C "mod_security_rules_latest" + mv mod_security_rules_latest/* /etc/apache2/mod_security_rules + chown -R root:root /etc/apache2/mod_security_rules + + # Config file names + ModSecureNewConfFile="security2.conf" + ModSecureNewLoadFile="security2.load" + ModEvasiveNewConfFile="evasive.conf" + ModEvasiveNewLoadFile="evasive.load" + + ModSecureOldConfFile="mod-security.conf" + ModSecureOldLoadFile="mod-security.load" + ModEvasiveOldConfFile="mod-evasive.conf" + ModEvasiveOldLoadFile="mod-evasive.load" + + + # Cleanup mod security + if [ -e "/etc/apache2/mods-available/${ModSecureNewConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureNewConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + fi + + # Cleanup old config it exists from an OS upgrade + if [ -e "/etc/apache2/mods-available/${ModSecureOldConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureOldConfFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + + # Remove old load file as well + if [ -e "/etc/apache2/mods-available/${ModSecureOldLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureOldLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureOldLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + elif [ -e "/etc/apache2/mods-available/${ModSecureOldConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureOldConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + fi + + # Remove incorrect config file if it exists + if [ -e "/etc/apache2/mods-available/${ModSecureNewConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureNewConfFile}" + fi + + if [ -e "/etc/apache2/mods-available/${ModSecureNewLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureNewLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + else + # None exist + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureNewConfFile}" + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-available/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-available/${ModSecureOldLoadFile}" + rm "/etc/apache2/mods-enabled/${ModSecureOldLoadFile}" + else + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureOldConfFile}" + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-available/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-available/${ModSecureNewLoadFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewLoadFile}" + fi + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + fi + + # Cleanup mod evasive + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + fi + + # Cleanup old config it exists from an OS upgrade + if [ -e "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + + # Remove old load file as well + if [ -e "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveOldLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + elif [ -e "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + fi + + # Remove incorrect config file if it exists + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + fi + + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + else + # None exist + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveOldLoadFile}" + rm "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" + else + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewLoadFile}" + rm "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" + fi + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + fi + + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + a2enmod evasive + a2enmod security2 + else + a2enmod mod-evasive + a2enmod mod-security + fi +} + +function finalize(){ + # Get web server type + detectRunningWebServer + + # Get PHP Session Time + getPHPSessionTimeout + + if [ -z "$SessionTimeoutSetting" ]; then + echo -e "Adding cronjob to cleanup old php session files" + # Add cronjob to clean up old php session files + addSystemCronJob "0 2 */5 * *" "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh" + fi + + # Make sure all log files have correct group + ERRORLOGAPACH="/var/log/apache2/access.log" + if [ -e "$ERRORLOGAPACH" ]; then + APACHLOGGROUPOWNER=$(ls -ali "$ERRORLOGAPACH" | awk '{print $5}') + chown root:"$APACHLOGGROUPOWNER" -R "/var/log/apache2" + fi + + cd "$patchDir" + + # Download Let's Encrypt Certbot: + installCertBotLetsEncrypt + + # Sync domains + cp "$FIXDIR/api/syncdomains_apiscript.tar.gz" "syncdomains_apiscript.tar.gz" + tar -zxvf "syncdomains_apiscript.tar.gz" + php syncdomains.php + + # Sync ez install information + cp "$FIXDIR/api/update_ez_install.tar.gz" "update_ez_install.tar.gz" + tar -zxvf "update_ez_install.tar.gz" + php update_ez_install.php + + # Restart PolicyD if available + if [ ! -z "$insPolicyD" ] && [ "$insPolicyD" = true ]; then + manageService "policyd_agent" "stop" + manageService "policyd_agent" "start" + fi + + # Killall and restart mysql + killAllMySQLAndRestart + + # Restart ehcp + manageService "ehcp" "restart" + + echo -e "\nWaiting 30 seconds before restarting $WebServerType daemon so that website configs are reconstructed.\n" + sleep 30 + + # Restart php-fpm before nginx if the web server is nginx + if [ "$WebServerType" == "nginx" ]; then + managePHPFPMService + fi + + # Restart web server + manageService "$WebServerType" "restart" + + # Make sure courier daemon is enabled (mainly for Ubuntu 16.04 and up) + update-rc.d courier-authdaemon enable + update-rc.d courier-authdaemon defaults + manageService "courier-authdaemon" "restart" + + # Restart postfix + manageService "postfix" "restart" + + finalCleanup +} + +# Get distro name , by Marcel , thanks to marcel for fixing whole code syntax +# No longer works in Ubuntu 13.04 +# Fixed by Eric Martin +function checkDistro() { + # Get distro properly + # Get distro properly + if [ -e /etc/issue ]; then + distro=$( cat /etc/issue | awk '{ print $1 }' ) + fi + + if [ ! -z "$distro" ]; then + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + + if [ -z "$distro" ] || [[ "$distro" != "ubuntu" && "$distro" != "debian" ]]; then + if [ -e /etc/os-release ]; then + distro=$( cat /etc/os-release | grep -o "^NAME=.*" | grep -o "[^NAME=\"].*[^\"]" ) + fi + fi + + # Assume Ubuntu + if [ -z "$distro" ]; then + distro="ubuntu" + else + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + + # Get actual release version information + version=$( lsb_release -r | awk '{ print $2 }' ) + if [ -z "$version" ]; then + version=$( cat /etc/issue | awk '{ print $2 }' ) + fi + + # Separate year and version + if [[ "$version" == *.* ]]; then + yrelease=$( echo "$version" | cut -d. -f1 ) + mrelease=$( echo "$version" | cut -d. -f2 ) + fi + + # Get 64-bit OS or 32-bit OS [used in vsftpd fix] + if [ $( uname -m ) == 'x86_64' ]; then + OSBits=64 + else + OSBits=32 + fi + + # Another way to get the version number + # version=$(lsb_release -r | awk '{ print $2 }') + + echo "Your distro is $distro runnning version $version" + + # Get distro and version initially installed on + if [ -e "/var/www/new/ehcp/distro_during_install.txt" ]; then + oldDistro=$(cat "/var/www/new/ehcp/distro_during_install.txt") + fi + + if [ -e "/var/www/new/ehcp/version_during_install.txt" ]; then + oldYRelease=$(cat "/var/www/new/ehcp/version_during_install.txt" | awk {'print $1'}) + oldMRelease=$(cat "/var/www/new/ehcp/version_during_install.txt" | awk {'print $2'}) + fi + + if [ ! -z "$oldYRelease" ] && [ ! -z "$oldMRelease" ] && [ ! -z "$oldDistro" ] && [ "$oldYRelease" != "$yrelease" ] && [ "$oldMRelease" != "$mrelease" ] && [ "$oldDistro" == "$distro" ]; then + OSUpgradeChangeDetectedFromInstall=true + else + OSUpgradeChangeDetectedFromInstall=false + fi +} + +function fixVSFTPConfig(){ # by earnolmartin@gmail.com + # VSFTPD config file + VSFTPDCONF="/etc/vsftpd.conf" + + # Check to see if the chroot_local_user setting is present + chrootLocalCheck=$(cat "$VSFTPDCONF" | grep "chroot_local_user") + if [ -z "$chrootLocalCheck" ]; then + sh -c "echo 'chroot_local_user=YES' >> $VSFTPDCONF" + else + sed -i 's/chroot_local_user=.*/chroot_local_user=YES/g' "$VSFTPDCONF" + fi + + # Check to see if allow writeable chroot is present + allowWriteValue=$(cat "$VSFTPDCONF" | grep "allow_writeable_chroot") + if [ -z "$allowWriteValue" ]; then + sh -c "echo 'allow_writeable_chroot=YES' >> $VSFTPDCONF" + else + sed -i 's/allow_writeable_chroot=.*/allow_writeable_chroot=YES/g' "$VSFTPDCONF" + fi + + if [ $OSBits -eq "64" ]; then + #aptgetInstall libpam-ldap # this is required in buggy vsftpd installs.. ubuntu 12.04,12.10, 13.04, now... + libldapFix + aptgetInstall libgcc1 + # 64-bit 500 OOPS: priv_sock_get_cmd Fix + # seccomp_sandbox=NO + allowSandBox=$(cat "$VSFTPDCONF" | grep "seccomp_sandbox") + if [ -z "$allowSandBox" ]; then + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "13" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + sh -c "echo 'seccomp_sandbox=NO' >> $VSFTPDCONF" + fi + else + sed -i 's/seccomp_sandbox=.*/seccomp_sandbox=NO/g' "$VSFTPDCONF" + fi + fi + + # Restart the VSFTPD service + manageService "vsftpd" "restart" +} + +function remove_vsftpd(){ + # Remove the hold if any: + echo "vsftpd install" | dpkg --set-selections + # Remove originally installed vsftpd + aptgetRemove vsftpd + # Just incase it's been installed already or another version has been installed using dpgk, let's remove it + dpkg --remove vsftpd +} + +function fixApacheDefault(){ + ApacheFile="/etc/apache2/apache2.conf" + confStr="IncludeOptional sites-enabled/\*.conf" + correctConfStr="Include sites-enabled/" + if [ -e "$ApacheFile" ]; then + ConfCheck=$( cat "$ApacheFile" | grep -o "$confStr" ) + if [ ! -z "$ConfCheck" ]; then + sed -i "s#$confStr#$correctConfStr#g" "$ApacheFile" + manageService "apache2" "restart" + fi + fi +} + +function removeNameVirtualHost(){ + ApacheFile="/etc/apache2/ports.conf" + confStr="NameVirtualHost.*" + + if [ -e "$ApacheFile" ]; then + ConfCheck=$( cat "$ApacheFile" | grep -o "$confStr" ) + if [ ! -z "$ConfCheck" ]; then + sed -i "s#$confStr##g" "$ApacheFile" + manageService "apache2" "restart" + fi + fi +} + +function genUbuntuFixes(){ + # Ubuntu packages keep coming with new features that mess things up + # Thanks Ubuntu for the unneccessary headaches! + # Includes debian too... jesus christ + if [ ! -z "$yrelease" ]; then + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "13" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + fixApacheDefault + removeNameVirtualHost + addConfDFolder + getRidOfExtraPHPMyAdminAlias + fixApache2ConfigInvalidLockFileLine + fixMariaDBSkippingInnoDB + fi + + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "16" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + # Fixes libpam for virtual VSFTPD and email accoutns + installPythonPamMysql + fi + fi +} + +function finalCleanup(){ + if [ -e "${serviceNameTempFile}" ]; then + rm -rf "${serviceNameTempFile}" + fi +} + +function genFixes(){ + # Generic fixes that should be run + if [ ! -e "/etc/apache2/httpd.conf" ]; then + sed -i 's/^Include httpd.conf/#Include httpd.conf/g' "/etc/apache2/apache2.conf" + fi + + # add panel conf to apache2 or nginx + if [ -e "/etc/apache2/apache2.conf" ]; then + hasEHCPPanelConf=$(cat "/etc/apache2/apache2.conf" | grep -o "apachehcp_globalpanelurls.conf") + if [ -z "$hasEHCPPanelConf" ]; then + echo -e "Include /var/www/new/ehcp/apachehcp_globalpanelurls.conf" >> "/etc/apache2/apache2.conf" + fi + fi + # Same thing for nginx + if [ -e "/etc/nginx/nginx.conf" ]; then + hasEHCPPanelConf=$(cat "/etc/nginx/nginx.conf" | grep -o "apachehcp_globalpanelurls.conf") + if [ -z "$hasEHCPPanelConf" ]; then + # Put it one line before close pattern + sed -i '$i \include /var/www/new/ehcp/apachehcp_globalpanelurls.conf;' "/etc/nginx/nginx.conf" + fi + fi + + # Change to .conf + if [ -e "/var/www/new/ehcp/scripts/curl_installer/curl_php_log" ]; then + mv "/var/www/new/ehcp/scripts/curl_installer/curl_php_log" "/var/www/new/ehcp/scripts/curl_installer/curl_php_log.conf" + fi + + # Change to .conf + if [ -e "/var/www/new/ehcp/scripts/ehcp_backup/backup_log" ]; then + mv "/var/www/new/ehcp/scripts/ehcp_backup/backup_log" "/var/www/new/ehcp/scripts/ehcp_backup/backup_log.conf" + fi +} + +function fixApache2ConfigInvalidLockFileLine(){ + sed -i "s/^LockFile/#LockFile/g" "/etc/apache2/apache2.conf" +} + +function ubuntuVSFTPDFix(){ # by earnolmartin@gmail.com + # Get currently working directory + origDir=$( pwd ) + + # Install vsftpd if for some reason it wasn't installed earlier + aptgetInstall vsftpd + + # Ubuntu VSFTPD Fixes + if [ ! -z "$yrelease" ]; then + if [ "$distro" == "ubuntu" ]; then + if [ "$yrelease" == "12" ] ; then + if [ "$mrelease" == "04" ]; then + # Run 12.04 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.04\n" + add-apt-repository -y ppa:thefrontiergroup/vsftpd + aptget_Update + aptgetInstall vsftpd + + elif [ "$mrelease" == "10" ]; then + # Run 12.10 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.10\n" + #get the code + cd "$patchDir" + if [ ! -e vsftpd_2.3.5-3ubuntu1.deb ]; then + if [ $OSBits -eq "32" ]; then + cp "$FIXDIR/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3ubuntu1_i386.deb" "vsftpd_2.3.5-3ubuntu1.deb" + else + cp "$FIXDIR/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3.jme_amd64.deb" "vsftpd_2.3.5-3ubuntu1.deb" + fi + fi + #install + dpkg -i vsftpd_2.3.5-3ubuntu1.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + cd $origDir + fi + elif [ "$yrelease" == "13" ]; then + # Ubuntu 13.04 + if [ "$mrelease" == "04" ]; then + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 13.04\n" + cd "$patchDir" + if [ ! -e vsftpd_3.0.2-patched_ubuntu.deb ]; then + if [ $OSBits -eq "32" ]; then + cp "$FIXDIR/vsftpd/ubuntu/13.04/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb" "vsftpd_3.0.2-patched_ubuntu.deb" + else + cp "$FIXDIR/vsftpd/ubuntu/13.04/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb" "vsftpd_3.0.2-patched_ubuntu.deb" + fi + fi + dpkg -i vsftpd_3.0.2-patched_ubuntu.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + cd $origDir + fi + + # Ubuntu 13.10 + if [ "$mrelease" == "10" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 13.10\n" + fi + elif [ "$yrelease" == "14" ]; then + # Ubuntu 14.04 + if [ "$mrelease" == "04" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 14.04\n" + if [ $OSBits -eq "64" ]; then + remove_vsftpd + cp "$FIXDIR/vsftpd/ubuntu/14.04/vsftpd_3.0.2-1ubuntu2_amd64.deb" "vsftpd_3.0.2-1ubuntu2.deb" + dpkg -i vsftpd_3.0.2-1ubuntu2.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + fi + fi + + # Ubuntu 14.10 + if [ "$mrelease" == "10" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 14.10\n" + if [ $OSBits -eq "64" ]; then + remove_vsftpd + cp "$FIXDIR/vsftpd/ubuntu/14.10/vsftpd_3.0.2-14ubuntu1_amd64.deb" "vsftpd_3.0.2-14ubuntu1.deb" + dpkg -i vsftpd_3.0.2-14ubuntu1.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + fi + fi + fi + fi + fi + + # Run our fixes to the vsftpd config file + fixVSFTPConfig +} + +function aptgetInstall(){ + # Parameter $1 is a list of programs to install + # Parameter $2 is used to specify runlevel 1 in front of the command to prevent daemons from automatically starting (needed for amavisd-new) + + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get install for:$1" + return + fi + + # first, try to install without any prompt, then if anything goes wrong, normal install.. + cmd="apt-get -y --no-remove --allow-unauthenticated install $1" + + if [ ! -z "$2" ]; then + cmd="RUNLEVEL=1 $cmd" + fi + + # Run the command + sh -c "$cmd" + + if [ $? -ne 0 ]; then + cmd="apt-get -y --allow-unauthenticated install $1" + if [ ! -z "$2" ]; then + cmd="RUNLEVEL=1 $cmd" + fi + sh -c "$cmd" + fi + + PackageFailed="$?" + +} + +function aptPackageInstallOrManualGet(){ + cd "$patchDir" + aptgetInstall "$1" + AptExitCode="$PackageFailed" + if [ "$AptExitCode" -eq "100" ]; then + PackageExists=$(echo "$AptExitCode") + else + PackageExists= + fi + + if [ ! -z "$PackageExists" ]; then + echo -e "\nPackage $1 was not found in the main Ubuntu repository. However, it is needed in EHCP. Checking EHCP fix directory for local fix.\n" + # See if the package exists locally + if [ $OSBits -eq "64" ]; then + localPackageName="$1_x64.deb" + else + localPackageName="$1.deb" + fi + localSearchResults=$(find "$FIXDIR" -name "$localPackageName") + if [ ! -z "$localSearchResults" ]; then + cp "$localSearchResults" "$1.deb" + fi + + # Clear the flag as we have found it locally... + if [ -e "$1.deb" ]; then + PackageExists= + fi + fi + + # If the package was not found locally, get it from the web + baseDLURL="http://www.dinofly.com/files/linux/" + if [ ! -z "$PackageExists" ]; then + echo -e "\nPackage $1 was not found in the main Ubuntu repository. However, it is needed in EHCP. Checking developer's server for appropriate package.\n" + + # Get proper version of package from + if [ $OSBits -eq "64" ]; then + # Check to see if package exists + fExists=$(wget --spider -v "$baseDLURL$1_x64.deb") + fExistsCheck=$(echo "$fExists" | grep "404") + if [ -z "$fExistsCheck" ]; then + echo -e "Package $1 was found on developer server. Downloading and installing now!" + wget -N -O "$1.deb" "$baseDLURL$1_x64.deb" + fi + else + fExists=$(wget --spider -v "$baseDLURL$1.deb") + fExistsCheck=$(echo "$fExists" | grep "404") + if [ -z "$fExistsCheck" ]; then + echo -e "Package $1 was found on developer server. Downloading and installing now!" + wget -N -O "$1.deb" "$baseDLURL$1.deb" + fi + fi + fi + + # Install the missing package if it exists within our repository + if [ -e "$1.deb" ]; then + gdebi --n "$1.deb" + fi +} + +function aptgetRemove(){ + if [ -n "$noapt" ] ; then # skip uninstall + echo "skipping apt-get remove for:$1" + return + fi + + # first, try to uninstall without any prompt, then if anything goes wrong, normal uninstall.. + cmd="apt-get -y remove $1" + + # Run the command + sh -c "$cmd" + + if [ $? -ne 0 ]; then + cmd="apt-get remove $1" + + # Run the command + sh -c "$cmd" + fi +} + +function isAptGetInUseBySomething(){ + if [ -e "/var/lib/dpkg/lock" ]; then + APTGETRunning=$(fuser /var/lib/dpkg/lock) + if [ ! -z "$APTGETRunning" ]; then + APTGETProcInfo=$(ps -ef | grep "$APTGETRunning") + clear + echo -e "Unable to run EHCP Force $operationMode script!" + echo "" + echo -e "A system update process is currently running on your system.\n\n$APTGETProcInfo\n\nClose any update applications listed above and try running the script again. Most of these update applications finish quickly. Re-run this installer in a few minutes if you are unsure how to close any update processes." + exit + fi + fi +} + +function rootCheck(){ + # Check to make sure the script is running as root + if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" 1>&2 + exit 1 + fi + + # Make EHCP Backup Directory + if [ "$operationMode" == "update" ] || [ "$operationMode" == "update-svn" ]; then + EHCPBACKUPDIR="/root/Backup/EHCP_FORCE" + elif [ "$operationMode" == "upgrade" ]; then + EHCPBACKUPDIR="/root/Backup/EHCP" + fi + + if [ ! -e "$EHCPBACKUPDIR" ]; then + mkdir -p "$EHCPBACKUPDIR" + fi + + # Make nginx Backup Directory + NGINXBACKUPDIR="/root/Backup/nginx" + if [ ! -e "$NGINXBACKUPDIR" ]; then + mkdir -p "$NGINXBACKUPDIR" + fi + + if [ ! -e "/var/www/new/ehcp/config.php" ]; then + echo -e "EHCP is not currently installed. This script may only be used on a valid installation of EHCP Force Edition." + exit 1 + fi +} + +function updateBeforeInstall(){ # by earnolmartin@gmail.com + # Update packages before installing to avoid errors + checkAptget + if [ "$aptIsInstalled" -eq "1" ] ; then + echo "Updating package information and downloading package updates before installation." + + # Make sure the system will update and upgrade + if [ -e "/var/lib/apt/lists/lock" ]; then + rm "/var/lib/apt/lists/lock" + fi + + # Make sure the system will update and upgrade + if [ -e "/var/cache/apt/archives/lock" ]; then + rm "/var/cache/apt/archives/lock" + fi + + # Run update commands + apt-key update + apt-get update -y --allow-unauthenticated + apt-get upgrade -y --allow-unauthenticated + fi +} + +function checkAptget(){ + sayi=`which apt-get | wc -w` + if [ $sayi -eq 0 ] ; then + ehco "apt-get is not found." + else + aptIsInstalled=1 + echo -e "apt-get seems to be installed on your system.\n" + fi +} + +function nginxOff(){ + # Stop nginx + manageService "nginx" "stop" + + # Disable nginx --- apache is the default + update-rc.d nginx disable +} + +function fixEHCPPerms(){ # by earnolmartin@gmail.com + # Secure ehcp files + chown -R root:root /var/www/new/ehcp + chmod -R 755 /var/www/new/ehcp/ + + # Correct net2ftp permissions + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/net2ftp + chmod -R 755 /var/www/new/ehcp/net2ftp + + # Correct permissions on test folder - used for testing some things like SSL certs + # Delete old security risk files from the directory first + if [ -e "/var/www/new/ehcp/test" ]; then + rm -r "/var/www/new/ehcp/test" + fi + mkdir -p /var/www/new/ehcp/test + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/test + chmod -R 755 /var/www/new/ehcp/test + + # Correct extplorer permissions + if [ -e "/var/www/new/ehcp/extplorer" ]; then + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/extplorer + chmod -R 755 /var/www/new/ehcp/extplorer + fi + + # Make default index readable + chmod 755 /var/www/new/index.html + + # Set proper permissions on vhosts + chown ${VSFTPDUser}:www-data -R /var/www/vhosts/ + chmod 0755 -R /var/www/vhosts/ + + # Secure webmail + chown root:www-data -R /var/www/new/ehcp/webmail2 + chmod 754 -R /var/www/new/ehcp/webmail2 + chmod -R 774 /var/www/new/ehcp/webmail2/data + + # Fix EHCP security + if [ -e "/var/www/new/ehcp/ehcpbackup.php" ]; then + rm "/var/www/new/ehcp/ehcpbackup.php" + fi + + if [ -e "/var/www/new/ehcp/phpadmin.php" ]; then + rm "/var/www/new/ehcp/phpadmin.php" + fi + + if [ -e "/var/www/new/ehcp/install_log.txt" ]; then + rm "/var/www/new/ehcp/install_log.txt" + fi + + chmod 700 "/var/www/new/ehcp/install_1.php" + chmod 700 "/var/www/new/ehcp/install_2.php" + chmod 700 "/var/www/new/ehcp/install_lib.php" + chmod 700 "/var/www/new/ehcp/install2.1.php" + chmod 700 "/var/www/new/ehcp/ehcp_fix_apache.php" + + # + # Remove some old files + # + + # Remove update / upgrade scripts that were removed. + if [ -e "/var/www/new/ehcp/ehcpforceupdate_svn_version_dev.sh" ]; then + rm "/var/www/new/ehcp/ehcpforceupdate_svn_version_dev.sh" + fi + + if [ -e "/var/www/new/ehcp/ehcpforceupgrade.sh" ]; then + rm "/var/www/new/ehcp/ehcpforceupgrade.sh" + fi + +} + +function logDirFix(){ # by earnolmartin@gmail.com + chmod 755 /var/www/new/ehcp/log + chmod 744 /var/www/new/ehcp/log/ehcp_failed_authentication.log + chown ${VSFTPDUser}:www-data /var/www/new/ehcp/log/ehcp_failed_authentication.log +} + +function nginxUpdateFiles(){ # by earnolmartin@gmail.com + if [ -e "/etc/nginx/sites-enabled/default" ]; then + # Make backups of originals just in case + CurDate=$(date +%Y_%m_%d_%s) + cp "/etc/nginx/sites-enabled/default" "$NGINXBACKUPDIR/default_backup_$CurDate" + + # Update configuration + cp "/var/www/new/ehcp/etc/nginx/default.nginx" "/etc/nginx/sites-enabled/default" + fi + + if [ -e "/etc/nginx/nginx.conf" ]; then + # Make backups of originals just in case + CurDate=$(date +%Y_%m_%d_%s) + cp "/etc/nginx/nginx.conf" "$NGINXBACKUPDIR/nginx.conf_backup_$CurDate" + + # Update configuration + cp "/var/www/new/ehcp/etc/nginx/nginx.conf" "/etc/nginx/nginx.conf" + + # And update user and group + changeNginxUser + fi +} + +function CheckPreReqs(){ + # Stop apache first... + manageService "apache2" "stop" + + # Normal + aptgetInstall nginx + aptgetInstall php5-fpm + aptgetInstall php-fpm +} + +function addConfDFolder(){ + # If the conf.d folder doesn't exist, we must create it! + if [ ! -e "/etc/apache2/conf.d" ]; then + mkdir -p "/etc/apache2/conf.d" + fi + + # Include it in apache2 config + if [ -e "/etc/apache2/apache2.conf" ]; then + APACHECONFCONTENTS=$(cat "/etc/apache2/apache2.conf" | grep "conf.d") + if [ -z "$APACHECONFCONTENTS" ]; then + echo "Include conf.d/" >> "/etc/apache2/apache2.conf" + fi + fi +} + +function ApacheLoadConfDFolder(){ + if [ -e "/etc/apache2/apache2.conf" ]; then + APACHECONFCONTENTS=$(cat "/etc/apache2/apache2.conf" | grep "IncludeOptional conf.d") + if [ -z "$APACHECONFCONTENTS" ]; then + echo "IncludeOptional conf.d/*" >> "/etc/apache2/apache2.conf" + fi + fi +} + +function killAllMySQLAndRestart(){ + # Stop service + manageService "mysql" "stop" + + # Get each PID of mysqld and kill it --- random bug occurs sometimes after install + ps -ef | grep mysqld | while read mysqlProcess ; do kill -9 $(echo $mysqlProcess | awk '{ print $2 }') ; done + + # Restart the service + manageService "mysql" "start" +} + +function secureApache(){ + APACHE2Conf="/etc/apache2/apache2.conf" + if [ -e "$APACHE2Conf" ]; then + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ ! -z "$containsDef" ]; then + sed -i "s/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/g" "$APACHE2Conf" + else + containsCorrectIndexs=$(cat "$APACHE2Conf" | grep "Options -Indexes +FollowSymLinks") + if [ -z "$containsCorrectIndexs" ]; then + echo "Options -Indexes +FollowSymLinks" >> "$APACHE2Conf" + fi + fi + fi +} + +function allowHTACCESSOverrides(){ + APACHE2Conf="/etc/apache2/apache2.conf" + if [ -e "$APACHE2Conf" ]; then + # This should only be done for Apache versions in latest versions of Ubuntu where they define specifically allow override perms + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ ! -z "$containsDef" ]; then + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ -z "$containsDef" ]; then + echo -e "\n\tOptions -Indexes +FollowSymLinks\n\tAllowOverride All\n\tRequire all granted\n" >> "$APACHE2Conf" + fi + fi + fi +} + +function installExtras(){ + # Spam Assassin + AntiSpamInstalled=$(which "spamassassin") + if [ -z "$AntiSpamInstalled" ]; then + echo "" + echo -n "Install Amavis, SpamAssassin, and ClamAV? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + installAntiSpam + fi + else + echo -e "Anti-Spam software has been detected and is already installed." + fi + + # PolicyD + if [ ! -e "/var/www/new/ehcp/policyd" ]; then + if ([[ "$distro" == "ubuntu" && "$yrelease" -ge "14" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]) && [ "$promptForPolicyD" = true ]; then + echo "" + echo -n "ADVANCED: Would you like to install PolicyD (Ubuntu 14.04, Debian 8, and Up ONLY)? [y/n]: " + read policyDI + policyDI=$(echo "$policyDI" | awk '{print tolower($0)}') + if [ "$policyDI" == "y" ] || "$policyDI" == "yes" ]; then + insPolicyD=true + echo -e "Installing PolicyD" + installPolicyD + echo -e "Installation of PolicyD complete." + fi + fi + else + echo -e "PolicyD software has been detected and is already installed." + echo -e "" + echo -e "Updating the PolicyD daemon if necessary." + updatePolicyDDaemon + fi + + # Fail2Ban + Fail2BanInstalled=$(which "fail2ban-server") + if [ -z "$Fail2BanInstalled" ]; then + echo "" + echo -n "Install fail2ban? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + echo -e "Installing Fail2Ban\n" + # Install Fail2Ban + fail2ban + fi + else + echo -e "Fail2Ban has been detected and is already installed." + fi + + # Mod Security and Evasive + APACHE2CTLExists=$(which "apache2ctl") + APACHECTLExists=$(which "apachectl") + PromptForApacheSecurityAndEvasive=true + + # Check that both modules are enabled + if [ ! -z "$APACHE2CTLExists" ]; then + ModEvasiveInstalled=$(apache2ctl -M | grep -o "evasive.*") + ModSecurityInstalled=$(apache2ctl -M | grep -o "security.*") + if [ ! -z "$ModEvasiveInstalled" ] && [ ! -z "$ModSecurityInstalled" ]; then + PromptForApacheSecurityAndEvasive=false + fi + fi + + # Extra fallback to apachectl just in-case + if [ ! -z "$APACHECTLExists" ] && [ "$PromptForApacheSecurityAndEvasive" = true ]; then + ModEvasiveInstalled=$(apachectl -M | grep -o "evasive.*") + ModSecurityInstalled=$(apachectl -M | grep -o "security.*") + if [ ! -z "$ModEvasiveInstalled" ] && [ ! -z "$ModSecurityInstalled" ]; then + PromptForApacheSecurityAndEvasive=false + fi + fi + + # Last check just in-case + if [ -e "/etc/apache2/mod_security_rules" ] && [ "$PromptForApacheSecurityAndEvasive" = true ]; then + PromptForApacheSecurityAndEvasive=false + fi + + if [ "$PromptForApacheSecurityAndEvasive" = true ]; then + echo "" + echo -n "Install and enable Apache2 security modules (mod-security and mod-evasive)? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + echo -e "Installing Apache2 Security Modules\n" + # Install Apache2 Security Modules + apacheSecurity + fi + else + echo -e "Apache2 security and evasive modules have been detected and are already installed." + + if [ "$OSUpgradeChangeDetectedFromInstall" = true ]; then + # If we've changed distribution versions, we need to reset the rules + echo -e "A system upgrade has been detected since the original install of EHCP... updating mod security rules..." + apacheSecurity + else + echo "" + echo -n "Has the operating system version changed since the original install of EHCP (in case you're running this script after upgrading your old version of Ubuntu to a newer version)? [y/n]: " + read insMode + echo "" + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + if [ "$insMode" == "y" ]; then + apacheSecurity + fi + fi + fi +} + +function installAntiSpam(){ + + # Postfix must be installed + CURDIR=$(pwd) + ANTISPAMINSTALLED=$(which "spamassassin") + POSTFIXInstalled=$(which "postfix") + postFixUserExists=$(grep postfix /etc/passwd) + if [ ! -z "$POSTFIXInstalled" ] && [ ! -z "$postFixUserExists" ]; then + # SpamAssassin is not installed / configured + # Lets roll + # Set variables + SPConfig="/etc/default/spamassassin" + PHeadChecks="/etc/postfix/header_checks" + PostFixConf="/etc/postfix/main.cf" + PostFixMaster="/etc/postfix/master.cf" + CONTENTFILTER="/etc/amavis/conf.d/15-content_filter_mode" + SPAMASSASSCONF="/etc/spamassassin/local.cf" + AMAVISHOST="/etc/amavis/conf.d/05-node_id" + AMAVISDEBDEFAULTSCONF="/etc/amavis/conf.d/20-debian_defaults" + AMAVISDOMAINIDCONF="/etc/amavis/conf.d/05-domain_id" + CLAMAVCONFFILE="/etc/clamav/clamd.conf" + + # Install Anti-Spam Software + aptgetInstall "amavisd-new" "runlevel=1" # amavisd-new install should not start the daemon immediately after installation since we haven't configured our fully qualified domain name of the server yet + aptgetInstall "spamassassin clamav-daemon" + + # Install individually incase some packages are not found + aptgetInstall libnet-dns-perl + aptgetInstall pyzor + aptgetInstall razor + aptgetInstall arj + aptgetInstall bzip2 + aptgetInstall cabextract + aptgetInstall cpio + aptgetInstall file + aptgetInstall gzip + aptgetInstall lha + aptgetInstall nomarch + aptgetInstall pax + aptgetInstall rar + aptgetInstall unrar + aptgetInstall unzip + aptgetInstall zip + aptgetInstall zoo + aptgetInstall unzoo + aptgetInstall libdbi-perl + aptgetInstall opendkim + aptgetInstall postfix-policyd-spf-python + + # Only keep going if we have the basic packages installed + AMAVISINS=$(which amavisd-new) + SPAMASSASSINS=$(which spamassassin) + + if [ ! -z "$AMAVISINS" ] && [ ! -z "$SPAMASSASSINS" ]; then + + # Add Users + adduser clamav amavis + adduser amavis clamav + + # Enable SpamAssassin + if [ -e "$SPConfig" ]; then + sed -i "s#ENABLED=.*#ENABLED=1#g" "$SPConfig" + sed -i "s#CRON=.*#CRON=1#g" "$SPConfig" + + # More settings + if [ -e "$SPAMASSASSCONF" ]; then + # Rewrite the header + sed -i "s/#rewrite_header.*/rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*/g" "$SPAMASSASSCONF" + sed -i "s/# rewrite_header.*/rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*/g" "$SPAMASSASSCONF" + sed -i "s#rewrite_header.*#rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*#g" "$SPAMASSASSCONF" + + # Set the spam score + sed -i "s/#required_score.*/required_score 12.0/g" "$SPAMASSASSCONF" + sed -i "s/# required_score.*/required_score 12.0/g" "$SPAMASSASSCONF" + sed -i "s#required_score.*#required_score 12.0#g" "$SPAMASSASSCONF" + + # use bayes 1 + sed -i "s/#use_bayes.*/use_bayes 1/g" "$SPAMASSASSCONF" + sed -i "s/# use_bayes.*/use_bayes 1/g" "$SPAMASSASSCONF" + sed -i "s#use_bayes.*#use_bayes 1#g" "$SPAMASSASSCONF" + + # use bayes auto learn + sed -i "s/#bayes_auto_learn.*/bayes_auto_learn 1/g" "$SPAMASSASSCONF" + sed -i "s/# bayes_auto_learn.*/bayes_auto_learn 1/g" "$SPAMASSASSCONF" + sed -i "s#bayes_auto_learn.*#bayes_auto_learn 1#g" "$SPAMASSASSCONF" + + fi + + manageService "spamassassin" "restart" + fi + + # Integrate into postfix + postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024" + + echo "use strict; + +# You can modify this file to re-enable SPAM checking through spamassassin +# and to re-enable antivirus checking. + +# +# Default antivirus checking mode +# Uncomment the two lines below to enable it +# + +@bypass_virus_checks_maps = ( + \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); + + +# +# Default SPAM checking mode +# Uncomment the two lines below to enable it +# + +@bypass_spam_checks_maps = ( + \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); + +1; # insure a defined return" > "$CONTENTFILTER" + if [ -e "$PostFixMaster" ]; then + POSTFIXMASCHECK1=$(cat "$PostFixMaster" | grep "smtp-amavis") + if [ -z "$POSTFIXMASCHECK1" ]; then + echo " +smtp-amavis unix - - - - 2 smtp + -o smtp_data_done_timeout=1200 + -o smtp_send_xforward_command=yes + -o disable_dns_lookups=yes + -o max_use=20" >> "$PostFixMaster" + fi + + POSTFIXMASCHECK2=$(cat "$PostFixMaster" | grep "127.0.0.1:10025") + if [ -z "$POSTFIXMASCHECK2" ]; then + echo " +127.0.0.1:10025 inet n - - - - smtpd + -o content_filter= + -o local_recipient_maps= + -o relay_recipient_maps= + -o smtpd_restriction_classes= + -o smtpd_delay_reject=no + -o smtpd_client_restrictions=permit_mynetworks,reject + -o smtpd_helo_restrictions= + -o smtpd_sender_restrictions= + -o smtpd_recipient_restrictions=permit_mynetworks,reject + -o smtpd_data_restrictions=reject_unauth_pipelining + -o smtpd_end_of_data_restrictions= + -o mynetworks=127.0.0.0/8 + -o smtpd_error_sleep_time=0 + -o smtpd_soft_error_limit=1001 + -o smtpd_hard_error_limit=1000 + -o smtpd_client_connection_count_limit=0 + -o smtpd_client_connection_rate_limit=0 + -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks" >> "$PostFixMaster" + fi + + fi + + #http://stackoverflow.com/questions/11694980/using-sed-insert-a-line-below-or-above-the-pattern + POSTFIXMASCHECK3=$(cat "$PostFixMaster" | grep -A2 "pickup" | grep -v "pickup" | grep -o "\-o receive_override_options=no_header_body_checks$") + if [ -z "$POSTFIXMASCHECK3" ]; then + sed -i "/pickup.*/a\\\t-o receive_override_options=no_header_body_checks" "$PostFixMaster" + fi + + POSTFIXMASCHECK4=$(cat "$PostFixMaster" | grep -A2 'pickup' | grep -v "pickup" | grep -o "\-o content_filter=$") + if [ -z "$POSTFIXMASCHECK4" ]; then + sed -i "/pickup.*/a\\\t-o content_filter=" "$PostFixMaster" + fi + + # Prompt for FQDN + echo "" + echo -n "Please enter your Fully Qualified Domain Name (FQDN) for this mail server: " + read FQDNName + FQDNName=$(echo "$FQDNName" | awk '{print tolower($0)}') + if [ -z "$FQDNName" ]; then + # Just replace it with ehcpforce.tk + sed -i "s/^#\$myhostname.*/\$myhostname = \"ehcpforce.tk\";/g" "$AMAVISHOST" + sed -i "s#^\$myhostname.*#\$myhostname = \"ehcpforce.tk\";#g" "$AMAVISHOST" + else + sed -i "s/^#\$myhostname.*/\$myhostname = \"$FQDNName\";/g" "$AMAVISHOST" + sed -i "s#^\$myhostname.*#\$myhostname = \"$FQDNName\";#g" "$AMAVISHOST" + fi + + # Change settings for amavis deb defaults + if [ -e "$AMAVISDEBDEFAULTSCONF" ]; then + # Set spam scores higher for a few levels + + # Change $sa_kill_level_deflt to 8.01 + sed -i "s/^#\$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^# \$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^\$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + + # Change $sa_dsn_cutoff_level to 11 + sed -i "s/^#\$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^# \$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^\$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + + # Check to see if we have the rewrite subject line in the configuration file + amavisHasSubjRewrite=$(cat "$AMAVISDEBDEFAULTSCONF" | grep '$sa_spam_modifies_subj') + if [ -z "$amavisHasSubjRewrite" ]; then + sed -i "/^\$sa_spam_subject_tag.*/a\$sa_spam_modifies_subj = 1;" "$AMAVISDEBDEFAULTSCONF" + else + sed -i "s/^\$sa_spam_modifies_subj.*/\$sa_spam_modifies_subj = 1;/g" "$AMAVISDEBDEFAULTSCONF" + fi + fi + + # Allow for any domain configuration + if [ -e "$AMAVISDOMAINIDCONF" ]; then + # Check to see if we have the rewrite subject line in the configuration file + amavisHasLocalDomainMaps=$(cat "$AMAVISDOMAINIDCONF" | grep '@local_domains_maps') + if [ -z "$amavisHasLocalDomainMaps" ]; then + sed -i "/^@local_domains_acl.*/a@local_domains_maps = \( \[\"\.\"\] \);" "$AMAVISDOMAINIDCONF" + else + sed -i "s/^@local_domains_maps.*/@local_domains_maps = \( \[\"\.\"\] \);/g" "$AMAVISDOMAINIDCONF" + fi + fi + + # Needed in Ubuntu 16.04 + # Allow supplementary groups to fix permissions + if [ -e "$CLAMAVCONFFILE" ]; then + sed -i "s/^AllowSupplementaryGroups.*/AllowSupplementaryGroups true/g" "$CLAMAVCONFFILE" + fi + + # Should be good to go? + + # Restart Amavis + manageService "amavis" "restart" + + # Restart services + manageService "postfix" "restart" + + # Get lastest clamav definitions + freshclam + + # Restart clamav-daemon + manageService "clamav-daemon" "restart" + + fi + fi +} + +function fixSASLAUTH(){ + # Fix SASLAUTH CACHE and limit to no threads for better performance + if [ -e "/etc/default/saslauthd" ]; then + backupFile "/etc/default/saslauthd" + echo "NAME=\"saslauthd\" +START=yes +MECHANISMS=\"pam\" +PARAMS=\"-n 0 -m /var/spool/postfix/var/run/saslauthd -r\" +OPTIONS=\"-n 0 -m /var/spool/postfix/var/run/saslauthd -r\" +" > "/etc/default/saslauthd" + + # restart the service + manageService "saslauthd" "restart" + fi +} + +function backupFile(){ + # Backups up a file in the general backup directory. + # Params: + # $1 = filepath to backup + + genBackupDIR="/root/Backup/general" + if [ ! -e "$genBackupDIR" ]; then + mkdir -p "$genBackupDIR" + fi + + if [ ! -z "$1" ]; then + FileToBackup="$1" + if [ -e "$FileToBackup" ]; then + nameOfFileToBeBackedUp=$(basename "$FileToBackup") + dirOfFileToBeBackedUp=$(dirname "$FileToBackup") + # Replace "/" with underscores so that the directory where the file should + # be if the user wishes to restore the file is in the file name of the backup + fileStructure=$(echo "$dirOfFileToBeBackedUp" | tr "/" "_") + # Get first character that isn't underscore + fileStructure=$(echo "$fileStructure" | cut -c 2-) + nowDate=$(date +"%m_%d_%Y_%H%M%S") + backupFullPath="${genBackupDIR}/${fileStructure}_${nameOfFileToBeBackedUp}_${nowDate}" + cp "$FileToBackup" "$backupFullPath" + fi + fi +} + +function fixPHPFPMListen(){ + FPMConfFile="$PHPCONFDir/fpm/pool.d/www.conf" + if [ -e "$FPMConfFile" ]; then + sed -i "s#^listen =.*#listen = 9000#g" "$FPMConfFile" + fi +} + +function fixNginxSessions(){ + nginxFPMPHPConfig="$PHPCONFDir/fpm/php.ini" + if [ -e "$nginxFPMPHPConfig" ]; then + SESSIONPathConfigured=$(cat "$nginxFPMPHPConfig" | grep -o "^session.save_path.*") + if [ -z "$SESSIONPathConfigured" ]; then + echo -e "session.save_path = \"/tmp\"" >> "$nginxFPMPHPConfig" + fi + managePHPFPMService + fi +} + +function fixPHPmcrypt(){ + aptgetInstall php5-mcrypt + aptgetInstall php-mcrypt + php5enmod mcrypt + phpenmod mcrypt +} + +function fixPopBeforeSMTP(){ + aptPackageInstallOrManualGet "pop-before-smtp" +} + +function fixPostfixMainConfIPv6(){ + PostfixMainConf="/etc/postfix/main.cf" + if [ -e "$PostfixMainConf" ]; then + CurrentPostfixMyNetworks=$(cat /etc/postfix/main.cf | grep -o "^mynetworks.*" | grep -o "=.*" | grep -o "[^=]*" | sed -e 's/^ *//' -e 's/ *$//') + getLastChar="${CurrentPostfixMyNetworks: -1}" + HasIPV6InIt=$(cat /etc/postfix/main.cf | grep -o "^mynetworks.*" | grep -o "=.*" | grep -o "[^=]*" | sed -e 's/^ *//' -e 's/ *$//' | grep -F "[::1]/128") + if [ -z "$HasIPV6InIt" ]; then + if [ "$getLastChar" == "," ]; then + sed -i "s#^mynetworks.*#mynetworks = $CurrentPostfixMyNetworks [::1]/128#g" "$PostfixMainConf" + else + sed -i "s#^mynetworks.*#mynetworks = $CurrentPostfixMyNetworks, [::1]/128#g" "$PostfixMainConf" + fi + fi + fi +} + +function removeApacheUmask(){ + APACHE2ENVVARS="/etc/apache2/envvars" + if [ -e "$APACHE2ENVVARS" ]; then + sed -i "s/^umask/#umask/g" "$APACHE2ENVVARS" + fi +} + +function securePHPMyAdminConfiguration(){ + # Variables + PHPMYADMINMAINCONFFILE="/etc/phpmyadmin/config.inc.php" + PHPMYADMINTMPDIR="/var/lib/phpmyadmin/tmp" + PHPMYADMINCONFFILE="/usr/share/phpmyadmin/config.inc.php" + PHPMYADMINROOTWL="/usr/share/phpmyadmin/rootip_whitelist.php" + PHPMYADMINROOTWLFunctions="/usr/share/phpmyadmin/rootip_whitelist_functions.php" + PHPMYADMINTEMPUPDIR="/usr/share/phpmyadmin/upload" + WHITELISTEMPLATEFILE="/var/www/new/ehcp/etc/phpmyadmin/rootip_whitelist.php" + WHITELISTEMPLATEFILEFunctions="/var/www/new/ehcp/etc/phpmyadmin/rootip_whitelist_functions.php" + DEFAULTPHPMYADMINCONFTEMPLATE="/var/www/new/ehcp/etc/phpmyadmin/phpmyadmin_default_conf" + DEFAULTPHPMYADMINMAINCONFTEMPLATE="/var/www/new/ehcp/etc/phpmyadmin/phpmyadmin_default_main_conf" + + # Fix perms on temporary directory that may be used for file uploads (importing exported sql files for example): + if [ -e "$PHPMYADMINTMPDIR" ]; then + chown -R ${VSFTPDUser}:www-data "$PHPMYADMINTMPDIR" + fi + + # See if PHPMyAdmin config.inc.php exists and secure its configuration if it does + if [ -e "$PHPMYADMINMAINCONFFILE" ]; then + phpMyAdminConfigurationTweaks "$PHPMYADMINMAINCONFFILE" + else + # Copy template over to have a valid phpmyadmin config + cp "$DEFAULTPHPMYADMINMAINCONFTEMPLATE" "$PHPMYADMINMAINCONFFILE" + fi + + if [ -e "$PHPMYADMINCONFFILE" ]; then + phpMyAdminConfigurationTweaks "$PHPMYADMINCONFFILE" + else + # Copy template over to have a valid phpmyadmin config + cp "$DEFAULTPHPMYADMINCONFTEMPLATE" "$PHPMYADMINCONFFILE" + fi + + # Copy root ip address whitelist over to phpmyadmin directory if it doesn't exist + if [ ! -e "$PHPMYADMINROOTWL" ]; then + cp "$WHITELISTEMPLATEFILE" "$PHPMYADMINROOTWL" + fi + + # Copy root ip address whitelist functions over to phpmyadmin directory if it doesn't exist + if [ ! -e "$PHPMYADMINROOTWLFunctions" ]; then + cp "$WHITELISTEMPLATEFILEFunctions" "$PHPMYADMINROOTWLFunctions" + fi + + # Create temporary upload directory for large SQL database imports + if [ ! -e "$PHPMYADMINTEMPUPDIR" ]; then + mkdir -p "$PHPMYADMINTEMPUPDIR" + fi + + # Replace rootip if the function is in it because this had to be separated to avoid errors in some configurations... + if [ -e "$PHPMYADMINROOTWL" ]; then + hasFunctionPrivateIP=$(cat "$PHPMYADMINROOTWL" | grep -o "function isPrivateIP") + if [ ! -z "$hasFunctionPrivateIP" ]; then + cp "$WHITELISTEMPLATEFILE" "$PHPMYADMINROOTWL" + fi + fi + + chown ${VSFTPDUser}:www-data -R $PHPMYADMINTEMPUPDIR + chmod 775 -R $PHPMYADMINTEMPUPDIR + + # Required in Ubuntu 16.04 and up + aptgetInstall "php-gettext" +} + +function phpMyAdminConfigurationTweaks(){ + if [ ! -z "$1" ]; then + # Config file to modify = $1 + phpmyadminCONFToModify="$1" + + # Run checks for various extra config settings + hasNoRootCheck=$(cat "$phpmyadminCONFToModify" | grep -o "$cfg\['Servers'\]\[1\]\['AllowRoot'\]") + hasTmpUploadDir=$(cat "$phpmyadminCONFToModify" | grep -o "$cfg\['UploadDir'\]") + hasIncludeApprovedIPAddressesFunction=$(cat "$phpmyadminCONFToModify" | grep -o "include_once 'rootip_whitelist_functions.php'") + hasIncludeApprovedIPAddresses=$(cat "$phpmyadminCONFToModify" | grep -o "include 'rootip_whitelist.php'") + hasPHPCloseTag=$(cat "$phpmyadminCONFToModify" | grep -o "^?>") + + # Prevent root mysql user from logging in + if [ -z "$hasNoRootCheck" ]; then + if [ -z "$hasIncludeApprovedIPAddresses" ]; then + # Put it above the close tag if it exists or at the end of the file + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/i\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;" "$phpmyadminCONFToModify" + else + echo -e "\$cfg['Servers'][1]['AllowRoot'] = FALSE;" >> "$phpmyadminCONFToModify" + fi + else + # Put it before the include white_list setting since IP addresses may set it to true + sed -i "/^include 'rootip_whitelist.php'/i\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;" "$phpmyadminCONFToModify" + fi + else + sed -i "s#^\$cfg\['Servers'\]\[1\]\['AllowRoot'\].*#\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;#g" "$phpmyadminCONFToModify" + fi + + # Add a temporary upload directory for files + if [ -z "$hasTmpUploadDir" ]; then + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/i\$cfg\['UploadDir'\] = '\./upload';" "$phpmyadminCONFToModify" + else + echo -e "\$cfg['UploadDir'] = './upload';" >> "$phpmyadminCONFToModify" + fi + else + sed -i "s#^\$cfg\['UploadDir'\].*#\$cfg\['UploadDir'\] = '\./upload';#g" "$phpmyadminCONFToModify" + fi + + # White listed IP addresses that can login to root account via PHPMyAdmin + if [ -z "$hasIncludeApprovedIPAddresses" ]; then + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/iinclude 'rootip_whitelist.php';" "$phpmyadminCONFToModify" + else + echo -e "include 'rootip_whitelist.php';" >> "$phpmyadminCONFToModify" + fi + fi + + # Make sure rootip_whitelist functions are included + if [ -z "$hasIncludeApprovedIPAddressesFunction" ]; then + hasIncludeApprovedIPAddresses=$(cat "$phpmyadminCONFToModify" | grep -o "include 'rootip_whitelist.php'") + if [ ! -z "$hasIncludeApprovedIPAddresses" ]; then + sed -i "/^include 'rootip_whitelist.php';/iinclude_once 'rootip_whitelist_functions.php';" "$phpmyadminCONFToModify" + fi + fi + fi +} + +function configurePHPIni(){ + # Variables + PHPINIFORAPACHE="$PHPCONFDir/apache2/php.ini" + PHPINIFORNGINX="$PHPCONFDir/fpm/php.ini" + + ModifyPHPIniConfigForFile "$PHPINIFORAPACHE" + ModifyPHPIniConfigForFile "$PHPINIFORNGINX" + #Opcache seems to have some random php session issues. If it should be disabled in the future, run this: + #ModifyPHPIniConfigForFile "$PHPINIFORNGINX" "disableOpcache" + + # Create /var/www/php_sessions directory to store PHP session files for the default configuration file only + # All defined vhosts have their own php_sessions directory for permissions sake... + setupPHPSessionsDir +} + +function ModifyPHPIniConfigForFile(){ + # $1 is the php.ini file to modify + # $2 is additional action such as disble opcache completely + if [ ! -z "$1" ]; then + PHPINIFILE="$1" + if [ -e "$PHPINIFILE" ]; then + # Turn error displaying on + sed -i "s#^display_errors.*#display_errors = On#g" "$PHPINIFILE" + + # Set upload limit higher to 50MB (We don't live in the 90s anymore...) + sed -i "s#^upload_max_filesize.*#upload_max_filesize = 50M#g" "$PHPINIFILE" + + # Set max post size to 50MB (We don't live in the 90s anymore...) + sed -i "s#^post_max_size.*#post_max_size = 50M#g" "$PHPINIFILE" + + # And for gods sake, please set error reporting so that it doesn't annoy anyone! + sed -i "s#^error_reporting.*#error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_NOTICE \& \~E_STRICT#g" "$PHPINIFILE" + + # Set max execution time higher to 100 seconds + sed -i "s#^max_execution_time.*#max_execution_time = 100#g" "$PHPINIFILE" + + # Configure opcache "properly" for PHP 5.5.x and up + hasOpCache=$(cat "$PHPINIFILE" | grep -o "^\[opcache\]") + if [ ! -z "$hasOpCache" ]; then + # Correct opcache based on this bug report: https://bugs.php.net/bug.php?id=68869 + # Timestamps + sed -i "s#^;opcache.validate_timestamps=.*#opcache.validate_timestamps=1#g" "$PHPINIFILE" + sed -i "s#^opcache.validate_timestamps=.*#opcache.validate_timestamps=1#g" "$PHPINIFILE" + + # Revalidation frequency + sed -i "s#^;opcache.revalidate_freq=.*#opcache.revalidate_freq=0#g" "$PHPINIFILE" + sed -i "s#^opcache.revalidate_freq=.*#opcache.revalidate_freq=0#g" "$PHPINIFILE" + + if [ ! -z "$2" ] && [ "$2" == "disableOpcache" ]; then + # Disable it completely + sed -i "s#^;opcache.enable=.*#opcache.enable=0#g" "$PHPINIFILE" + sed -i "s#^opcache.enable=.*#opcache.enable=0#g" "$PHPINIFILE" + fi + fi + fi + fi +} + +function installNewPackages(){ + # Install required packages that may be missing + aptgetInstall lsb-release + aptgetInstall "gdebi-core" + aptgetInstall "ftp" + aptgetInstall sshpass + aptgetInstall apache2-utils + aptgetInstall python-software-properties + aptgetInstall debconf-utils + aptgetInstall php-mail-mimedecode + aptgetInstall php7.0-zip + aptgetInstall php5-gd + aptgetInstall php7.0-gd + aptgetInstall php5-zip + + # Required for Certbot + aptgetInstall python + aptgetInstall libexpat1-dev + aptgetInstall libpython-dev + aptgetInstall libpython2.7-dev + aptgetInstall python-setuptools + aptgetInstall python2.7-dev + aptgetInstall libssl-doc + aptgetInstall openssl gcc build-essential + aptgetInstall python-pip + aptgetInstall augeas-tools + aptgetInstall libffi-dev + aptgetInstall libssl-dev + aptgetInstall python-dev + aptgetInstall python-virtualenv +} + +function getRidOfExtraPHPMyAdminAlias(){ + # Remove extra phpmyadmin.conf file which may have been used for older versions + if [ -e "/etc/apache2/conf-enabled/phpmyadmin.conf" ] && [ -e "/etc/apache2/conf.d/phpmyadmin.conf" ]; then + rm "/etc/apache2/conf.d/phpmyadmin.conf" + fi +} + +function turnOffIPv6PostFix(){ + PostFixConfFile="/etc/postfix/main.cf" + if [ -e "$PostFixConfFile" ]; then + ProtocolsSetting=$(cat "$PostFixConfFile" | grep -o "^inet_protocols.*") + CurrentProtocolSetting=$(echo "$ProtocolsSetting" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$ProtocolsSetting" ]; then + if [ "$CurrentProtocolSetting" == "all" ]; then + echo -e "\nYour current inet_protocols Postfix setting is \"$CurrentProtocolSetting\"." + echo -e "Unless ipv6 is configured correctly on the server, emails sent using Postfix will most likely fail.\n" + echo -n "Do you want to configure postfix to use ipv4 only [y/n]? " + read postfixIPv4Change + postfixIPv4Change=$(echo "$postfixIPv4Change" | awk '{print tolower($0)}') + + if [ "$postfixIPv4Change" != "n" ]; then + sed -i 's/^inet_protocols.*/inet_protocols = ipv4/g' "$PostFixConfFile" + echo -e "\nPostfix is now configured to use IPv4 only!" + else + echo -e "\nPostfix configuration was not changed..." + fi + fi + fi + fi +} + +function manageService(){ # by earnolmartin@gmail.com + # Linux is introducing systemd booting, so now I gotta handle craziness + # $1 is the service name + # $2 is the service action + service "$1" "$2" +} + +function getVSFTPDUser(){ + vsftpdUserExists=$(cat "/etc/passwd" | grep "vsftpd") + if [ -z "$vsftpdUserExists" ]; then + VSFTPDUser="ftp" + else + VSFTPDUser="vsftpd" + fi +} + +function stopServices(){ + # Stop services + manageService "ehcp" "stop" + manageService "apache2" "stop" + managePHPFPMService "stop" + manageService "nginx" "stop" +} + +function setupPHPSessionsDir(){ + PHPSessDir="/var/www/php_sessions" + mkdir -p "$PHPSessDir" + chown -R ${VSFTPDUser}:www-data "$PHPSessDir" +} + +function fixRoundCubeFileAttachments(){ + roundCubeConfigFile="/etc/roundcube/main.inc.php" + if [ -e "$roundCubeConfigFile" ]; then + sed -i "s/^\$rcmail_config\['temp_dir'\].*/\$rcmail_config\['temp_dir'\] = '\/tmp';/g" "$roundCubeConfigFile" + hasRCTempDirSetting=$(cat "$roundCubeConfigFile" | grep -o "\$rcmail_config\['temp_dir'\].*") + if [ -z "$hasRCTempDirSetting" ]; then + echo "\$rcmail_config['temp_dir'] = '/tmp';" >> "$roundCubeConfigFile" + fi + fi +} + +function setDefaultRoundCubeServer(){ + if [ -e "/etc/roundcube/config.inc.php" ]; then + sed -i "s/^\$config\['default_host'\].*/\$config\['default_host'\] = 'localhost';/g" "/etc/roundcube/config.inc.php" + fi +} + +function installPolicyD(){ + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "14" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + # Create policyd mysql database under ehcp mysql user and populate it with policyd sql + curDir=$(pwd) + + # install prereqs + aptgetInstall libconfig-inifiles-perl + aptgetInstall libcache-fastmmap-perl + + #create policyd users + policyDUserCheck=$(cat /etc/passwd | grep "cbpolicyd") + if [ -z "$policyDUserCheck" ]; then + groupadd cbpolicyd + useradd -M cbpolicyd -g cbpolicyd -s /usr/sbin/nologin + passwd -d cbpolicyd + fi + + # Create needed directories and log files: + mkdir -p "/var/log/cbpolicyd" + touch "/var/log/cbpolicyd/cbpolicyd.log" + chown cbpolicyd:cbpolicyd -R "/var/log/cbpolicyd" + mkdir -p "/var/run/cbpolicyd" + chown cbpolicyd:cbpolicyd -R "/var/run/cbpolicyd" + + # Generate password for policyd mysql user + generatePassword + policyDMySQLUser="ehcp_policyd" + policyDMySQLPass="$rPass" + + # Create the database with the username and password and populate it with the policyd mysql + cd "$patchDir" + cp "$FIXDIR/api/create_mysql_db_user.tar.gz" "create_mysql_db_user.tar.gz" + tar -zxvf "create_mysql_db_user.tar.gz" + php -f create_mysql_db_user.php "policyd" "$policyDMySQLUser" "$policyDMySQLPass" "$FIXDIR/policyd/policyd.mysql" + + # Copy the main config file to this directory, replace some variables, and then move it to /etc/ + cp "$FIXDIR/policyd/cluebringer.conf" ./ + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "cluebringer.conf" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "cluebringer.conf" + mkdir -p "/etc/cbpolicyd" + mv "cluebringer.conf" "/etc/cbpolicyd/cluebringer.conf" + + # Create the proper directories + mkdir -p "/usr/local/lib/cbpolicyd-2.1" + cp -r "$FIXDIR/policyd/cbp" "/usr/local/lib/cbpolicyd-2.1/" + cp -r "$FIXDIR/policyd/awitpt/awitpt" "/usr/local/lib/cbpolicyd-2.1/" + + # Copy script files for policyD + cp "$FIXDIR/policyd/cbpadmin" "/usr/local/bin/" + cp "$FIXDIR/policyd/cbpolicyd" "/usr/local/sbin/" + cp "$FIXDIR/policyd/run_policyd_async.sh" "/etc/cbpolicyd" + + # Replace vars in async script + sed -i "s/{policyDMySQLUser}/$policyDMySQLUser/g" "/etc/cbpolicyd/run_policyd_async.sh" + sed -i "s/{policyDMySQLPass}/$policyDMySQLPass/g" "/etc/cbpolicyd/run_policyd_async.sh" + + # Append configuration to main.cf postfix settings + CurRecipRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_recipient_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurRecipRestrictions" ]; then + lastCharInRestriction="${CurRecipRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurRecipRestrictions="${CurRecipRestrictions: : -1}" + fi + fi + + CurEndOfDataRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_end_of_data_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurEndOfDataRestrictions" ]; then + lastCharInRestriction="${CurEndOfDataRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurEndOfDataRestrictions="${CurEndOfDataRestrictions: : -1}" + fi + fi + + hasPolicyDRecipRestr=$(echo $CurRecipRestrictions | grep -o "check_policy_service inet:127.0.0.1:10031") + hasPolicyDEndOfData=$(echo $CurEndOfDataRestrictions | grep -o "check_policy_service inet:127.0.0.1:10031") + if [ -z "$hasPolicyDRecipRestr" ]; then + sed -i "s#smtpd_recipient_restrictions\( \)*=.*#smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031,$CurRecipRestrictions#g" "/etc/postfix/main.cf" + fi + if [ -z "$hasPolicyDEndOfData" ]; then + hasSMTPDEndLine=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_end_of_data_restrictions") + if [ ! -z "$hasSMTPDEndLine" ]; then + sed -i "s#smtpd_end_of_data_restrictions\( \)*=.*#smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031,$CurEndOfDataRestrictions#g" "/etc/postfix/main.cf" + else + echo "smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031" >> "/etc/postfix/main.cf" + fi + fi + + # Make AMAVISD work with policyD + mkdir -p "/etc/amavis/plugins" + cp "$FIXDIR/policyd/amavisd-policyd.pm" ./ + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "amavisd-policyd.pm" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "amavisd-policyd.pm" + cp "amavisd-policyd.pm" "/etc/amavis/plugins" + hasPolicyAmavisInclude=$(cat "/etc/amavis/conf.d/01-debian" | grep -o "include_config_files('/etc/amavis/plugins/amavisd-policyd.pm');") + if [ -z "$hasPolicyAmavisInclude" ]; then + echo "include_config_files('/etc/amavis/plugins/amavisd-policyd.pm');" >> "/etc/amavis/conf.d/01-debian" + fi + + # Copy webui to main ehcp folder + cp -R "$FIXDIR/policyd/webui" "/var/www/new/ehcp/policyd" + # Fix mysql info in webui policyd folder + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "/var/www/new/ehcp/policyd/includes/config.php" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "/var/www/new/ehcp/policyd/includes/config.php" + + # Copy init.d script to /etc/init.d and start it + cp "$FIXDIR/policyd/policyd_agent" "/etc/init.d/" + + # Use systemd Service for newer Ubuntu versions + useSystemDPolicyDDaemon + + systemctl daemon-reload + manageService "policyd_agent" "start" + + # Start the service on boot + update-rc.d policyd_agent defaults + else + echo "Failed to install policyd! This feature requires Ubuntu 14.04 and up!"; + fi +} + +function generatePassword(){ + if [ ! -z "$1" ]; then + PLENGTH="$1" + else + PLENGTH="10" + fi + + #rPass=$(date +%s | sha256sum | base64 | head -c "$PLENGTH") + rPass=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 | head -c "$PLENGTH") +} + +function removeSystemCronJob(){ # by earnolmartin@gmail.com + # $1 is the command or script to run that needs to be deleted + # Example of what $1 should be: echo hello + + if [ ! -z "$1" ]; then + CURDIR=$(pwd) + cd "$patchDir" + + # Get the current crontab + crontab -l > mycron + if [ -s mycron ]; then + echo -e "Removing cronjob $1!" + # remove cronjob if it exists + sed -i "\\#$1.*\$#c\\" mycron + + # Install the new crontab file + crontab mycron + fi + + # Delete the crontab file + rm mycron + + cd "$CURDIR" + fi +} + +function addSystemCronJob(){ # by earnolmartin@gmail.com + # $1 is the cronjob syntax + # $2 is the command or script to run + # Example of what $1 should be: 00 09 * * 1-5 + # Example of what $2 should be: echo hello + + if [ ! -z "$1" ] && [ ! -z "$2" ]; then + CURDIR=$(pwd) + cd "$patchDir" + + # Get the current crontab + crontab -l > mycron + if [ ! -s mycron ]; then + echo -e "$1 $2\n" >> mycron + else + # check to make sure the command or script isn't already being called + scriptRunAlreadyCheck=$(cat mycron | grep "$2") + if [ -z "$scriptRunAlreadyCheck" ]; then + # Add the cronjob to the top of the file since custom EHCP admin defined cronjobs may have already been created. + sed -i "1s#^#$1 $2\n#" mycron + fi + fi + + # Install the new crontab file + crontab mycron + + # Delete the crontab file + rm mycron + + cd "$CURDIR" + fi +} + +function getPHPSessionTimeout(){ + if [ "$WebServerType" == "nginx" ]; then + nginxFPMPHPConfig="$PHPCONFDir/fpm/php.ini" + if [ -e "$nginxFPMPHPConfig" ]; then + SessionTimeoutSetting=$(cat "$nginxFPMPHPConfig" | grep -o "^session.gc_maxlifetime.*" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + SessionTimeoutSetting=$((SessionTimeoutSetting/60)) + if [ "$SessionTimeoutSetting" -le "0" ]; then + SessionTimeoutSetting=1 + fi + echo -e "Session timeout is configured to be to $SessionTimeoutSetting minutes!" + fi + fi + elif [ "$WebServerType" == "apache2" ]; then + apachePHPConfig="$PHPCONFDir/apache2/php.ini" + if [ -e "$apachePHPConfig" ]; then + SessionTimeoutSetting=$(cat "$apachePHPConfig" | grep -o "^session.gc_maxlifetime.*" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + SessionTimeoutSetting=$((SessionTimeoutSetting/60)) + if [ "$SessionTimeoutSetting" -le "0" ]; then + SessionTimeoutSetting=1 + fi + echo -e "Session timeout is configured to be to $SessionTimeoutSetting minutes!" + fi + fi + fi + + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + if [ "$SessionTimeoutSetting" -ge "5" ] && [ "$SessionTimeoutSetting" -lt "60" ]; then + echo -e "Adding cronjob to clear sessions last accessed more than $SessionTimeoutSetting minutes ago." + removeSystemCronJob "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh" + addSystemCronJob "*/$SessionTimeoutSetting * * * *" "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh $SessionTimeoutSetting" + else + SessionTimeoutSetting= + fi + else + SessionTimeoutSetting= + fi +} + +function fixBINDPerms(){ # by earnolmartin@gmail.com + chmod -R 774 /etc/bind + + # Set correct owner on the bind directory: + if [ -e "/etc/bind" ]; then + BINDUser=$(ls -alhi /etc/bind | awk '{print $4}' | head -n2 | tail -n1) + if [ "$BINDUser" == "root" ]; then + BINDUser=$(ls -alhi /etc/bind | awk '{print $5}' | head -n2 | tail -n1) + fi + + if [ ! -z "$BINDUser" ] && [ "$BINDUser" != "root" ]; then + chown "$BINDUser":root -R /etc/bind + else + BINDUser=$(cat /etc/passwd | grep -o "^bind.*") + if [ ! -z "$BINDUser" ]; then + chown bind:root -R /etc/bind + else + BINDUser=$(cat /etc/passwd | grep -o "^named.*") + if [ ! -z "$BINDUser" ]; then + chown named:root -R /etc/bind + fi + fi + fi + fi +} + +function isnum(){ + # http://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash + result=$(awk -v a="$1" 'BEGIN {print (a == a + 0)}';) + if [ "$result" == "1" ]; then + # 0 = true + return 0 + else + # 1 = false + return 1 + fi +} + +function getPHPConfigPath(){ + if [ -d "/etc/php5" ]; then + PHPCONFDir="/etc/php5" + else + if [ -d "/etc/php" ]; then + PHPCONFDir=$(ls "/etc/php" | head -n 1) + PHPCONFDir="/etc/php/$PHPCONFDir" + fi + fi +} + +function convertToMariaDBFromMYSQLPrompt(){ + # Not supported in Ubuntu 12.04 and under... + if [[ "$distro" == "ubuntu" && "$yrelease" -lt "14" ]] || [[ "$distro" == "debian" && "$yrelease" -lt "8" ]]; then + echo "MariaDB is not available for your operating system." + return + fi + + mariaDBServerAlreadyInstalled=$(dpkg -l | grep mariadb-server) + if [ ! -z "$mariaDBServerAlreadyInstalled" ]; then + echo "MariaDB is already installed on the server." + return + fi + + echo -n "Convert from MySQL to MariaDB? MariaDB is a drop-in replacement for MySQL and is the true open source successor. NO existing databases are lost from the conversion. Install MariaDB? [y/n]: " + read insMode + echo "" + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + echo -e "Attempting to Convert from MySQL to MariaDB\n" + convertToMariaDBFromMYSQL + fi +} + + +function convertToMariaDBFromMYSQL(){ + # Get current version of MySQL + mysqlVersionInstalled=$(apt-cache policy mysql-server | grep -o "Candidate:.*" | grep -o "[^Candidate: ].*") + posOfFirstDecimal=$(indexOf "$mysqlVersionInstalled" ".") + if [ "$posOfFirstDecimal" -ge "0" ]; then + mysqlMajorVersionInst=$(echo ${mysqlVersionInstalled:0:$posOfFirstDecimal}) + stringMinusFirstIndexChar=$(echo ${mysqlVersionInstalled:$((posOfFirstDecimal+1))}) + if [ ! -z "$stringMinusFirstIndexChar" ]; then + posOfSecondDecimal=$(indexOf "$stringMinusFirstIndexChar" ".") + if [ "$posOfSecondDecimal" -ge "0" ]; then + mysqlMinorVersionInst=$(echo ${stringMinusFirstIndexChar:0:$posOfSecondDecimal}) + fi + fi + fi + + # MySQL 5.7 to MariaDB is not supported + # https://jira.mariadb.org/browse/MDEV-11170 + if [ "$mysqlMajorVersionInst" == "5" ] && [ "$mysqlMinorVersionInst" -ge "7" ]; then + echo -e "The currently installed version of mysql-server (version ${mysqlVersionInstalled}) cannot be converted to MariaDB due to major design differences.\n\nKeeping MySQL to prevent data loss.\n" + return + fi + + # Do not change existing root password + echo 'mariadb-server-5.5 mysql-server/root_password password ' | debconf-set-selections + echo 'mariadb-server-5.5 mysql-server/root_password_again password ' | debconf-set-selections + echo 'mariadb-server-5.5 mariadb-server/oneway_migration boolean true' | debconf-set-selections + + # For version 10.0 + echo 'mariadb-server-10.0 mysql-server/root_password password ' | debconf-set-selections + echo 'mariadb-server-10.0 mysql-server/root_password_again password ' | debconf-set-selections + echo 'mariadb-server-10.0 mariadb-server/oneway_migration boolean true' | debconf-set-selections + + # Generic + echo 'mariadb-server mysql-server/root_password password ' | debconf-set-selections + echo 'mariadb-server mysql-server/root_password_again password ' | debconf-set-selections + echo 'mariadb-server mariadb-server/oneway_migration boolean true' | debconf-set-selections + + # Handle any version in case this changes (since it usually does)... we cannot afford for any DB info to be lost... ever... that would be bad. + # It's not installed yet, so use this method + # mariaDBVersion=$(dpkg -s mariadb-server | grep -o "Version:.*" | grep -o "[^Version: ].*") + mariaDBVersion=$(apt-cache policy mariadb-server | grep -o "Candidate:.*" | grep -o "[^Candidate: ].*") + posOfFirstDecimal=$(indexOf "$mariaDBVersion" ".") + if [ "$posOfFirstDecimal" -ge "0" ]; then + mariaDBMajorVersion=$(echo ${mariaDBVersion:0:$posOfFirstDecimal}) + stringMinusFirstIndexChar=$(echo ${mariaDBVersion:$((posOfFirstDecimal+1))}) + if [ ! -z "$stringMinusFirstIndexChar" ]; then + posOfSecondDecimal=$(indexOf "$stringMinusFirstIndexChar" ".") + if [ "$posOfSecondDecimal" -ge "0" ]; then + mariaDBMinorVersion=$(echo ${stringMinusFirstIndexChar:0:$posOfSecondDecimal}) + fi + fi + fi + + if [ ! -z "$mariaDBMajorVersion" ] && [ ! -z "$mariaDBMinorVersion" ]; then + echo "mariadb-server-${mariaDBMajorVersion}.${mariaDBMinorVersion} mysql-server/root_password password " | debconf-set-selections + echo "mariadb-server-${mariaDBMajorVersion}.${mariaDBMinorVersion} mysql-server/root_password_again password " | debconf-set-selections + echo "mariadb-server-${mariaDBMajorVersion}.${mariaDBMinorVersion} mariadb-server/oneway_migration boolean true" | debconf-set-selections + fi + + # Make a backup of everything in the current DB and then reimport it later since the upgrade loses your data in some cases... thanks devs of MariaDB... + currentRootMySQLPass=$(cat /var/www/new/ehcp/config.php | grep "\$dbrootpass=" | grep -o "[^\$dbrootpass=].*" | grep -o "[^'].*[^';]") + if [ ! -z "$currentRootMySQLPass" ]; then + echo "" + echo -n "Would you like this script to create a full backup of all existing MySQL databases and data before upgrading to MariaDB since this operation is risky? The backup will be stored in ${EHCPBACKUPDIR}/db_master_backup.sql, and this operation may take a while. [y/n]: " + read insMode + echo "" + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + if [ "$insMode" != "n" ]; then + mysqldump -u'root' -p"${currentRootMySQLPass}" --all-databases > "${EHCPBACKUPDIR}/db_master_backup.sql" + fi + fi + + # Install MariaDB + DEBIAN_FRONTEND=noninteractive apt-get -y install mariadb-server mariadb-client +} + +function installPythonPamMysql(){ + # Install Python Prereqs + aptgetInstall "libpam-python python-pip python-dev build-essential" + pip install passlib + + # Copy our libpam-python scripts to /etc/security + cp -vf /var/www/new/ehcp/etc/pam/pam_dbauth_smtp.conf /etc/security/pam_dbauth_smtp.conf + cp -vf /var/www/new/ehcp/etc/pam/pam_dbauth_smtp.py /etc/security/pam_dbauth_smtp.py + cp -vf /var/www/new/ehcp/etc/pam/pam_dbauth_vsftpd.conf /etc/security/pam_dbauth_vsftpd.conf + cp -vf /var/www/new/ehcp/etc/pam/pam_dbauth_vsftpd.py /etc/security/pam_dbauth_vsftpd.py + + # Replace EHCP mysql password with the correct one + sed -i "s#^password=.*#password=$EHCPMySQLPass#g" "/etc/security/pam_dbauth_smtp.conf" + sed -i "s#^password=.*#password=$EHCPMySQLPass#g" "/etc/security/pam_dbauth_vsftpd.conf" + + # Configure PAM services for SMTP and VSFTPD + echo "auth required pam_python.so /etc/security/pam_dbauth_vsftpd.py +account required pam_python.so /etc/security/pam_dbauth_vsftpd.py" > "/etc/pam.d/vsftpd" + echo "auth required pam_python.so /etc/security/pam_dbauth_smtp.py +account required pam_python.so /etc/security/pam_dbauth_smtp.py" > "/etc/pam.d/smtp" +} + +function updatePolicyDDaemon(){ + if ([[ "$distro" == "ubuntu" && "$yrelease" -ge "14" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]) && ([ -e "/etc/init.d/policyd_agent" ] || [ -e "/lib/systemd/system/policyd_agent.service" ] || [ -e "/etc/systemd/system/policyd_agent.service" ]) && [ -e "/var/www/new/ehcp/policyd/includes/config.php" ]; then + # Update the daemon if it needs to be updated + hasPolicyBashNOHUPChange=$(cat /etc/init.d/policyd_agent | grep "run_policyd_async.sh") + if [ -z "$hasPolicyBashNOHUPChange" ]; then + echo -e "\nAn older version of PolicyD has been detected on this system... updating the daemon and start script now.\n" + + # Stop the daemon + manageService "policyd_agent" "stop" + + # Copy the bash script used by the daemon to start policyd + cp "$FIXDIR/policyd/run_policyd_async.sh" "/etc/cbpolicyd" + + policyDMySQLUser=$(cat "/var/www/new/ehcp/policyd/includes/config.php" | grep -o "\$DB_USER=\".*" | grep -o "\".*" | grep -o "[^\";]*") + policyDMySQLPass=$(cat "/var/www/new/ehcp/policyd/includes/config.php" | grep -o "\$DB_PASS=\".*" | grep -o "\".*" | grep -o "[^\";]*") + + # Replace vars in async script + sed -i "s/{policyDMySQLUser}/$policyDMySQLUser/g" "/etc/cbpolicyd/run_policyd_async.sh" + sed -i "s/{policyDMySQLPass}/$policyDMySQLPass/g" "/etc/cbpolicyd/run_policyd_async.sh" + + cp "$FIXDIR/policyd/policyd_agent" "/etc/init.d/" + + # Use systemd if system supports it + useSystemDPolicyDDaemon + + # Reload systemd if exists + systemctl daemon-reload + + # Start the daemon + manageService "policyd_agent" "start" + fi + fi +} + +function useSystemDPolicyDDaemon(){ + # Use systemd Service for newer Ubuntu versions + if ([ "$distro" == "ubuntu" ] && [ "$yrelease" -ge "16" ]) || [ ! -z "$systemdPresent" ]; then + if [ -e "/lib/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/policyd_agent.service" "/lib/systemd/system" + rm "/etc/init.d/policyd_agent" + elif [ -e "/etc/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/policyd_agent.service" "/etc/systemd/system" + rm "/etc/init.d/policyd_agent" + fi + fi + + systemctl daemon-reload + systemctl enable policyd_agent.service +} + +# http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable +function trim() { + local var="$*" + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + echo -n "$var" +} + +function addToPostFixRecipientRestrictions(){ + CurRecipRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_recipient_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurRecipRestrictions" ]; then + # Remove last character if it's a comma which is used as the separator + lastCharInRestriction="${CurRecipRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurRecipRestrictions="${CurRecipRestrictions: : -1}" + fi + + hasSpamhaus=$(echo "$CurRecipRestrictions" | grep -o "zen.spamhaus.org") + hasSpamCop=$(echo "$CurRecipRestrictions" | grep -o "bl.spamcop.net") + if [ -z "$hasSpamhaus" ]; then + CurRecipRestrictions="${CurRecipRestrictions},reject_rbl_client zen.spamhaus.org" + fi + if [ -z "$hasSpamCop" ]; then + CurRecipRestrictions="${CurRecipRestrictions},reject_rbl_client bl.spamcop.net" + fi + sed -i "s#^smtpd_recipient_restrictions\( \)*=.*#smtpd_recipient_restrictions = $CurRecipRestrictions#g" "/etc/postfix/main.cf" + fi +} + +function changeSquirrelMailConfigurationUseSendmail(){ + # SquirrelMail webmail folder should be renamed to webmail2 + if [ -e "/var/www/new/ehcp/webmail2/config/config.php" ]; then + SquirrelMailConf="/var/www/new/ehcp/webmail2/config/config.php" + else + if [ -e "/var/www/new/ehcp/webmail/config/config.php" ]; then + isSquirrelMail=$(cat "/var/www/new/ehcp/webmail/config/config.php" | grep -o "squirrelmail") + if [ ! -z "$isSquirrelMail" ]; then + SquirrelMailConf="/var/www/new/ehcp/webmail/config/config.php" + fi + fi + fi + + hasSendMailSetting=$(cat "$SquirrelMailConf" | grep -o "\$useSendmail") + if [ -z "$hasSendMailSetting" ]; then + echo -e "\$useSendmail = true;" >> "$SquirrelMailConf" + else + currentSQMailSetting=$(cat "$SquirrelMailConf" | grep -o "\$useSendmail.*" | grep -o "=.*" | grep -o "[^=( )*].*") + currentSQMailSetting=${currentSQMailSetting%?} + + if [ "$currentSQMailSetting" == "false" ]; then + # Set it to true + sed -i "s#^\$useSendmail\( \)*=.*#\$useSendmail = true;#g" "$SquirrelMailConf" + fi + fi + + sed -i "s#^\$data_dir\( \)*=.*#\$data_dir = '/var/www/new/ehcp/webmail2/data/';#g" "$SquirrelMailConf" + sed -i "s#^\$attachment_dir\( \)*=.*#\$attachment_dir = '/var/www/new/ehcp/webmail2/data/';#g" "$SquirrelMailConf" +} + +function makeRoundCubeDefaultMailClient(){ + if [ -e "/var/www/new/ehcp/webmail2" ]; then + if [ ! -e "/var/www/new/ehcp/webmail2/config/config.php" ] ; then + mv "/var/www/new/ehcp/webmail2" "/var/www/new/ehcp/webmail_roundcube" + mv "/var/www/new/ehcp/webmail" "/var/www/new/ehcp/webmail2" + mv "/var/www/new/ehcp/webmail_roundcube" "/var/www/new/ehcp/webmail" + fi + fi +} + +function writeOutVersionInfo(){ + if [ "$OSUpgradeChangeDetectedFromInstall" = true ] || [ ! -e "/var/www/new/ehcp/version_during_install" ]; then + if [ ! -z "$yrelease" ] && [ ! -z "$mrelease" ]; then + echo -e "$yrelease $mrelease" > "/var/www/new/ehcp/version_during_install.txt" + fi + + if [ ! -z "$distro" ]; then + echo -e "$distro" > "/var/www/new/ehcp/distro_during_install.txt" + fi + fi +} + +function indexOf(){ + # $1 = search string + # $2 = string or char to find + # Returns -1 if not found + x="${1%%$2*}" + [[ $x = $1 ]] && echo -1 || echo ${#x} +} + +function installCertBotLetsEncrypt(){ + if [ ! -e "/usr/local/bin/certbot" ]; then + curDir=$(pwd) + cd "$patchDir" + wget -N https://dl.eff.org/certbot-auto + chmod a+x certbot-auto + mv certbot-auto /usr/local/bin/certbot + /usr/local/bin/certbot --quiet + cd "$curDir" + addSystemCronJob "45 4 * * *" "/var/www/new/ehcp/scripts/certbot_renew_certs.sh" + fi +} + +function adjustOperationMode(){ + if [ -z "$operationMode" ]; then + operationMode="update" + fi + + if [ "$operationMode" == "upgrade" ]; then + EHCPModeText="the original EHCP" + operationVerb="upgrade" + elif [ "$operationMode" == "update" ] || [ "$operationMode" == "update-svn" ]; then + EHCPModeText="EHCP Force Edition" + operationVerb="update" + fi +} + +function fixCourierMYSQLAuthFile(){ + authmysqlrc="/etc/courier/authmysqlrc" + if [ -e "$authmysqlrc" ]; then + hasMYSQLOPT=$(cat "$authmysqlrc" | grep -o "MYSQL_OPT.*") + hasMYSQLEndMarker=$(cat "$authmysqlrc" | grep -o "##NAME: MARKER:0") + + # Add MYSQL_OPT in + if [ -z "$hasMYSQLOPT" ]; then + echo -e "\nMYSQL_OPT 0" >> "$authmysqlrc" + else + sed -i 's#MYSQL_OPT.*#MYSQL_OPT 0#g' "$authmysqlrc" + fi + + # Add stupid MARKER line in + if [ -z "$hasMYSQLEndMarker" ]; then + echo -e "\n##NAME: MARKER:0 +# +# Do not remove this section from this configuration file. This section +# must be present at the end of this file." >> "$authmysqlrc" + fi + fi +} + +function searchForServiceName(){ + # $1 is the search string... find a service that contains this string + if [ -e "${serviceNameTempFile}" ]; then + rm -rf "${serviceNameTempFile}" + fi + + if [ ! -z "$1" ]; then + serviceName=$(ls /etc/init.d 2>/dev/null | grep -F -- "${1}") + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + serviceName=$(find /lib/systemd/system -name "*${1}*" -exec basename {} .service \; 2>/dev/null) + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + serviceName=$(find /etc/systemd/system -name "*${1}*" -exec basename {} .service \; 2>/dev/null) + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + if [ -z "${serviceNameTempFile}" ]; then + > "${serviceNameTempFile}" + fi + fi +} + +function managePHPFPMService(){ + # $1 is the action + if [ -z "$1" ]; then + fpmAction="restart" + else + fpmAction="$1" + fi + + searchForServiceName "-fpm" + fpmService=$(cat "${serviceNameTempFile}") + if [ ! -z "$fpmService" ]; then + echo -e "${fpmAction}ing specifically detected php-fpm service ${fpmService}...\n" + manageService "${fpmService}" "${fpmAction}" + else + echo -e "Restarting php-fpm generically...\n" + manageService "php5-fpm" "${fpmAction}" + manageService "php-fpm" "${fpmAction}" + manageService "php7.0-fpm" "${fpmAction}" + manageService "php7.1-fpm" "${fpmAction}" + fi +} + +function fixMariaDBSkippingInnoDB(){ + # Check to see if allow writeable chroot is present + # MariaDB Config file + mariaDBConfFile="/etc/mysql/mariadb.cnf" + if [ -e "$mariaDBConfFile" ]; then + sed -i 's/^skip-innodb/#skip-innodb/g' "$mariaDBConfFile" + fi +} + +############################### +###START OF SCRIPT MAIN CODE### +############################### +clear + +# Get parameters +for varCheck in "$@" +do + if [ "$varCheck" == "policyd" ]; then + # Because PolicyD is experimental, I don't want to prompt users to install it each time the update script is run + # Because they most likely answered no during the initial install + promptForPolicyD=true + fi + + if [ "$varCheck" == "debug" ]; then + # Debug mode + debugMode=true + fi + + if [ "$varCheck" == "upgrade" ]; then + # Debug mode + operationMode="upgrade" + fi + + if [ "$varCheck" == "update" ]; then + # Debug mode + operationMode="update" + fi + + if [ "$varCheck" == "update-svn" ]; then + # Debug mode + operationMode="update-svn" + fi +done + +# Set more variables +adjustOperationMode + +# Check and see if this script is being executed by root +rootCheck + +# Check for Apt-get availability +isAptGetInUseBySomething + +# Tell the user the script is running +echo -e "Running EHCP Force Edition ${operationMode} script...\n" + +# Get distro info +echo -e "Retrieving Distribution Information\n" +checkDistro + +# Set our global variables +setGlobalVars + +# Stop services +echo -e "Stopping services\n" +stopServices + +# Install new packages that are needed +echo -e "Installing any missing software packages that are needed by the latest version of EHCP Force!\n" +installNewPackages + +# Update packages +echo -e "Downloading and installing package updates!\n" +updateBeforeInstall + +echo -e "Making Sure nginx and php-fpm Are Installed\n" +# Checking PreReqs +CheckPreReqs + +# Make sure nginx is stopped +echo -e "Checking to make sure nginx is disabled!\n" +nginxOff + +# Fix envvar config +echo -e "Checking Apache2 EnvVars for Errors\n" +fixApacheEnvVars + +echo -e "Fixing php-fpm Listen Settings\n" +# Fix php-fpm to listen to port 9000 +fixPHPFPMListen + +# Fix session saving for nginx +fixNginxSessions + +echo -e "Changing Apache User\n" +# Change Apache User +changeApacheUser + +# Add Nginx Limiting +echo -e "Adding rate limiting for nginx\n" +nginxRateLimit + +echo -e "Enabling Slave DNS\n" +# Allow slave DNS: +slaveDNSApparmorFix + +echo -e "Setting roundcube as default email client for websites.\n" +# Fix SquirrelMail config to use Sendmail +makeRoundCubeDefaultMailClient + +echo -e "Retrieving Latest EHCP Force Files and Making a Backup of Original Files\n" +# Get EHCP Files +getLatestEHCPFiles + +echo -e "Updating the EHCP Daemon\n" +# Update EHCP Daemon +updateDaemon + +echo -e "Running MySQL Bind Address Fix\n" +# Fix MySQL Bind Address +mysqlUseLocalHost + +echo -e "Updating Base nginx Configuration Files\n" +# Update nginx configuration files +nginxUpdateFiles + +echo -e "Checking for VSFTPD Updates\n" +# Check for VSFTPD Updates +ubuntuVSFTPDFix + +echo -e "Checking for Generic Fixes Depending on Ubuntu Version\n" +# Check for VSFTPD Updates +genUbuntuFixes + +echo -e "Upgrading courier authmysqlrc format if needed...\n" +# Fix courier configuration in newer versions +fixCourierMYSQLAuthFile + +echo -e "Running generic fixes...\n" +# Run generic fixes +genFixes + +echo -e "Making Apache more secure by not listing files within a folder without an index page.\n" +# Make it so that strangers can't just browse folders without an index file +secureApache + +# Allow .htaccess file overrides for Ubuntu 14.04 and up (hopefully versions above) +allowHTACCESSOverrides + +# Install and enable php mcrypt module --- if not enabled already +fixPHPmcrypt + +echo -e "Fixing apache2 umask issue if applicable!\n" +# Get rid of umask envvars entry +removeApacheUmask + +echo -e "Securing PHPMyAdmin Configuration!\n" +# Secure PHPMyAdmin Configuration to Prevent Root Logins Except for Local Connections +securePHPMyAdminConfiguration + +echo -e "Disabling BIND Recursion\n" +# Disable Bind Recursion: +disableRecursiveBIND + +echo -e "Fixing SASLAuth caching and setting maximum number of threads to 2.\n" +# Prevent SASLAuth memory leaks: +fixSASLAUTH + +echo -e "Setting Postfix Configuration to Allow IPv6 Local IP Relay\n" +# Add [::1]/128 to end of mynetworks setting in main.cf +fixPostfixMainConfIPv6 + +echo -e "Making sure pop-before-smtp has been installed and installing it if missing.\n" +#Fix pop-before-smtp +fixPopBeforeSMTP + +echo -e "Configuring php.ini settings for optimal usage.\n" +#Change settings in php.ini to allow 50MB upload files, turn on displaying errors, and setting the error_reporting to something practical +configurePHPIni + +echo -e "Fixing roundcube configuration so that email file attachments will work.\n" +# Fix roundcube config for file attachments +fixRoundCubeFileAttachments + +echo -e "Setting default roundcube mail server to localhost.\n" +# Set localhost as server to use for roundcube +setDefaultRoundCubeServer + +echo -e "Checking Postfix configuration for problems...\n" +#IPv6 should not be used in Postfix in most cases... prompt the user if all is detected instead of ipv4 for inet_protocols +turnOffIPv6PostFix + +echo -e "Fixing /etc/bind directory permissions required for slave DNS." +# Fix /etc/bind directory permissions required for slave dns +fixBINDPerms + +echo -e "Fixing SquirrelMail configuration to use Sendmail by default.\n" +# Fix SquirrelMail config to use Sendmail +changeSquirrelMailConfigurationUseSendmail + +echo -e "Presenting Additional User Options\n" +# Install extra software if users want it: +installExtras + +echo -e "Prompting for MySQL to MariaDB Conversion\n" +# Ask if we should convert from MySQL to MariaDB? +convertToMariaDBFromMYSQLPrompt + +echo -e "Adding email blacklist lookup for incoming emails.\n" +addToPostFixRecipientRestrictions + +echo -e "Restarting web services, synchronizing domains, and finalizing installation!\n" +# Start the services and sync domains +finalize + +# Write out version info with current info in case anything has changed +writeOutVersionInfo + +echo -e "\nSuccessfully ${operationVerb}d ${EHCPModeText} to the latest version of EHCP Force Edition!" diff --git a/ehcp/ehcpinfo.html b/ehcp/ehcpinfo.html new file mode 100755 index 0000000..bc4b195 --- /dev/null +++ b/ehcp/ehcpinfo.html @@ -0,0 +1,24 @@ +you may find useful information on following sites:

+ +Mainly:http://www.ehcp.net
+
+A great forum:http://www.ubuntuforums.org/forumdisplay.php?f=180
+ +http://freshmeat.net/projects/ehcp/
+http://www.sourceforge.net/projects/ehcp
+http://code.google.com/p/ehcp/
+http://www.howtoforge.com/instaling_ehcp_on_debian_ubuntu


+http://www.freewebhostingtalk.com/showthread.php?t=4191
+http://www.webhostingtalk.com/showthread.php?threadid=519724
+http://forum.iyibirisi.com/viewforum.php?f=3
+
+ +I need php developers, html designers, testers, hosting providers to be able to continue this project.
+if you think you may help me in one of these ways, or if you want to help and dont know how to do, please contact me..
+All kind of help is welcome.
+
+Keep in mind that, ehcp is the first and only opensource,full php, object oriented, gpl, free hosting control panel on the earth !
+ +
+ehcp version 0.29.15 + diff --git a/ehcp/error_page.html b/ehcp/error_page.html new file mode 100755 index 0000000..3ddd409 --- /dev/null +++ b/ehcp/error_page.html @@ -0,0 +1,3 @@ +

Error
+Page Not Found
+Server powered by EHCP Force Edition

diff --git a/ehcp/etc/.htaccess b/ehcp/etc/.htaccess new file mode 100755 index 0000000..03688ee --- /dev/null +++ b/ehcp/etc/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/ehcp/etc/apache2/apache_subdomain_template b/ehcp/etc/apache2/apache_subdomain_template new file mode 100755 index 0000000..b49a936 --- /dev/null +++ b/ehcp/etc/apache2/apache_subdomain_template @@ -0,0 +1,27 @@ +#____________start of {subdomain}.{domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + DirectoryIndex index.htm index.html index.php + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customsubdomainhttp} + + + + + diff --git a/ehcp/etc/apache2/apache_subdomain_template_ipbased b/ehcp/etc/apache2/apache_subdomain_template_ipbased new file mode 100755 index 0000000..6534d46 --- /dev/null +++ b/ehcp/etc/apache2/apache_subdomain_template_ipbased @@ -0,0 +1,28 @@ +#____________start of {subdomain}.{domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + DirectoryIndex index.htm index.html index.php + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customsubdomainhttp} + + + + + diff --git a/ehcp/etc/apache2/apachetemplate b/ehcp/etc/apache2/apachetemplate new file mode 100755 index 0000000..aaa1f39 --- /dev/null +++ b/ehcp/etc/apache2/apachetemplate @@ -0,0 +1,115 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# if you make any changes in this file, do this: ehcp->options->syncdomains , or, changes will not take effect + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + php_admin_value open_basedir {ehcpdir} + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + # this is pear compatible: + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ diff --git a/ehcp/etc/apache2/apachetemplate_ehcp_panel b/ehcp/etc/apache2/apachetemplate_ehcp_panel new file mode 100755 index 0000000..f9f57ab --- /dev/null +++ b/ehcp/etc/apache2/apachetemplate_ehcp_panel @@ -0,0 +1,35 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template + + ServerName {domainname} + ServerAlias {domainname_alias} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + php_admin_value open_basedir {ehcpdir} + + +# END OF CUSTOM GLOBAL PANEL URLS Template diff --git a/ehcp/etc/apache2/apachetemplate_ipbased b/ehcp/etc/apache2/apachetemplate_ipbased new file mode 100755 index 0000000..66df291 --- /dev/null +++ b/ehcp/etc/apache2/apachetemplate_ipbased @@ -0,0 +1,113 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + # this is pear compatible: + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ diff --git a/ehcp/etc/apache2/apachetemplate_passivedomains b/ehcp/etc/apache2/apachetemplate_passivedomains new file mode 100755 index 0000000..70f471d --- /dev/null +++ b/ehcp/etc/apache2/apachetemplate_passivedomains @@ -0,0 +1,28 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {domainname} + ServerAlias www.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ + + + diff --git a/ehcp/etc/apache2/default b/ehcp/etc/apache2/default new file mode 100755 index 0000000..067663e --- /dev/null +++ b/ehcp/etc/apache2/default @@ -0,0 +1,42 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName default + DocumentRoot /var/www/new + + Options +FollowSymLinks + AllowOverride None + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + AccessFileName .htaccess + + ErrorLog /var/log/apache2/default.error.log + CustomLog /var/log/apache2/default.access.log vhost_combined + + php_admin_value open_basedir "/var/www:/tmp:/usr/share:/etc/roundcube:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + diff --git a/ehcp/etc/apache2/ports.conf b/ehcp/etc/apache2/ports.conf new file mode 100755 index 0000000..b296694 --- /dev/null +++ b/ehcp/etc/apache2/ports.conf @@ -0,0 +1,10 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +NameVirtualHost * +Listen 80 diff --git a/ehcp/etc/apache2/ports_ubu14.conf b/ehcp/etc/apache2/ports_ubu14.conf new file mode 100644 index 0000000..db52c69 --- /dev/null +++ b/ehcp/etc/apache2/ports_ubu14.conf @@ -0,0 +1,9 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +Listen 80 diff --git a/ehcp/etc/apache2/redirect b/ehcp/etc/apache2/redirect new file mode 100644 index 0000000..64e3e37 --- /dev/null +++ b/ehcp/etc/apache2/redirect @@ -0,0 +1,8 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + ServerName {domainname} + ServerAlias www.{domainname} *.{domainname} + RewriteEngine On + RewriteCond %{HTTPS} off + RewriteRule (.*) {domainname_redirect}%{REQUEST_URI} + diff --git a/ehcp/etc/apache2_ssl/fork/apache_subdomain_template b/ehcp/etc/apache2_ssl/fork/apache_subdomain_template new file mode 100644 index 0000000..56b899e --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/apache_subdomain_template @@ -0,0 +1,58 @@ +#____________start of {subdomain}.{domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + DirectoryIndex index.htm index.html index.php + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customsubdomainhttp} + + + +# FOR SSL CONFIG + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + DirectoryIndex index.htm index.html index.php + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + {customsubdomainhttp} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + + + diff --git a/ehcp/etc/apache2_ssl/fork/apachetemplate b/ehcp/etc/apache2_ssl/fork/apachetemplate new file mode 100644 index 0000000..1cedbe1 --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/apachetemplate @@ -0,0 +1,245 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# template with ssl +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + + +# burdan asagisi ssl icin yazildi +# FOR SSL CONFIG + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName webmail2.{domainname} + ServerAlias email2.{domainname} + ServerAlias mail2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# end template with ssl diff --git a/ehcp/etc/apache2_ssl/fork/apachetemplate_ehcp_panel b/ehcp/etc/apache2_ssl/fork/apachetemplate_ehcp_panel new file mode 100755 index 0000000..eae6d76 --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/apachetemplate_ehcp_panel @@ -0,0 +1,47 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template + + ServerName {domainname} + ServerAlias {domainname_alias} + RewriteEngine On + RewriteCond %{HTTPS} off + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} + + + + ServerName {domainname} + ServerAlias {domainname_alias} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + +# END OF CUSTOM GLOBAL PANEL URLS Template diff --git a/ehcp/etc/apache2_ssl/fork/apachetemplate_ipbased b/ehcp/etc/apache2_ssl/fork/apachetemplate_ipbased new file mode 100644 index 0000000..54bb69b --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/apachetemplate_ipbased @@ -0,0 +1,247 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# template with ssl +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + + + ServerName webmail2.{domainname} + ServerAlias mail2.{domainname} + ServerAlias email2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + + +# burdan asagisi ssl icin yazildi +# FOR SSL CONFIG + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName webmail2.{domainname} + ServerAlias email2.{domainname} + ServerAlias mail2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# end template with ssl diff --git a/ehcp/etc/apache2_ssl/fork/apachetemplate_passivedomains b/ehcp/etc/apache2_ssl/fork/apachetemplate_passivedomains new file mode 100644 index 0000000..4d4a292 --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/apachetemplate_passivedomains @@ -0,0 +1,51 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {domainname} + ServerAlias www.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + + ServerName {domainname} + ServerAlias www.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ + + + diff --git a/ehcp/etc/apache2_ssl/fork/default b/ehcp/etc/apache2_ssl/fork/default new file mode 100644 index 0000000..245ee2c --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/default @@ -0,0 +1,95 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName default + DocumentRoot /var/www/new + + Options +FollowSymLinks + AllowOverride None + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + ErrorLog /var/log/apache2/default.error.log + CustomLog /var/log/apache2/default.access.log vhost_combined + + php_admin_value open_basedir "/var/www:/tmp:/usr/share:/etc/roundcube:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName ssl + DocumentRoot /var/www/new + + Options +FollowSymLinks + AllowOverride None + + + + Options -Indexes -FollowSymLinks -MultiViews + AllowOverride All + Order Allow,Deny + Allow from All + + + + Deny from All + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + LogLevel debug + ErrorLog /var/log/apache2/default.error.log + CustomLog /var/log/apache2/default.access.log vhost_combined + + SSLEngine on + SSLCertificateFile /etc/ssl/certs/server.crt + SSLCertificateKeyFile /etc/ssl/private/server.key + + php_admin_value open_basedir "/var/www:/tmp:/usr/share:/etc/roundcube:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + diff --git a/ehcp/etc/apache2_ssl/fork/ports.conf b/ehcp/etc/apache2_ssl/fork/ports.conf new file mode 100644 index 0000000..413c3aa --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/ports.conf @@ -0,0 +1,17 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +NameVirtualHost *:80 +Listen 80 + + +NameVirtualHost *:443 +Listen 443 + + +SSLStrictSNIVHostCheck off diff --git a/ehcp/etc/apache2_ssl/fork/ports_ubu14.conf b/ehcp/etc/apache2_ssl/fork/ports_ubu14.conf new file mode 100644 index 0000000..3b7549b --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/ports_ubu14.conf @@ -0,0 +1,15 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +Listen 80 + + +Listen 443 + + +SSLStrictSNIVHostCheck off diff --git a/ehcp/etc/apache2_ssl/fork/redirect b/ehcp/etc/apache2_ssl/fork/redirect new file mode 100644 index 0000000..01d9059 --- /dev/null +++ b/ehcp/etc/apache2_ssl/fork/redirect @@ -0,0 +1,21 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + ServerName {domainname} + ServerAlias www.{domainname} *.{domainname} + RewriteEngine On + RewriteCond %{HTTPS} off + RewriteRule (.*) {domainname_redirect}%{REQUEST_URI} + + +# FOR SSL CONFIG + + + ServerName {domainname} + ServerAlias www.{domainname} *.{domainname} + SSLEngine on + SSLCertificateFile /etc/ssl/certs/server.crt + SSLCertificateKeyFile /etc/ssl/private/server.key + RewriteEngine On + RewriteCond %{HTTPS} on + RewriteRule (.*) {domainname_redirect}%{REQUEST_URI} + diff --git a/ehcp/etc/apache2_sslonly/fork/apache_subdomain_template b/ehcp/etc/apache2_sslonly/fork/apache_subdomain_template new file mode 100644 index 0000000..84c16d5 --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/apache_subdomain_template @@ -0,0 +1,32 @@ +#____________start of {subdomain}.{domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {subdomain}.{domainname} + ServerAlias www.{subdomain}.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + DirectoryIndex index.htm index.html index.php + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customsubdomainhttp} + + + + diff --git a/ehcp/etc/apache2_sslonly/fork/apachetemplate b/ehcp/etc/apache2_sslonly/fork/apachetemplate new file mode 100644 index 0000000..cf8ed79 --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/apachetemplate @@ -0,0 +1,133 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# template with ssl +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName webmail2.{domainname} + ServerAlias email2.{domainname} + ServerAlias mail2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# end template with ssl diff --git a/ehcp/etc/apache2_sslonly/fork/apachetemplate_ehcp_panel b/ehcp/etc/apache2_sslonly/fork/apachetemplate_ehcp_panel new file mode 100755 index 0000000..10d015e --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/apachetemplate_ehcp_panel @@ -0,0 +1,39 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template + + ServerName {domainname} + ServerAlias {domainname_alias} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + +# END OF CUSTOM GLOBAL PANEL URLS Template diff --git a/ehcp/etc/apache2_sslonly/fork/apachetemplate_ipbased b/ehcp/etc/apache2_sslonly/fork/apachetemplate_ipbased new file mode 100644 index 0000000..10beed9 --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/apachetemplate_ipbased @@ -0,0 +1,134 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# template with ssl +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName webmail.{domainname} + ServerAlias email.{domainname} + ServerAlias mail.{domainname} + + DocumentRoot {ehcpdir}/webmail + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail:/tmp:/var/www/php_sessions:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName webmail2.{domainname} + ServerAlias email2.{domainname} + ServerAlias mail2.{domainname} + + DocumentRoot {ehcpdir}/webmail2 + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{ehcpdir}/webmail2" + php_admin_value upload_tmp_dir "{ehcpdir}/webmail2/data" + php_admin_value session.save_path "{ehcpdir}/webmail2/data" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName cpanel.{domainname} + ServerAlias panel.{domainname} + ServerAlias ehcp.{domainname} + ServerAlias cp.{domainname} + + DocumentRoot {ehcpdir} + + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir {ehcpdir} + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + + + + ServerName {domainname} + ServerAlias www.{domainname} {wildcarddomain} # this is changed to *.{domainname} within classapp.php + # buraya aliaslar yazilacak.. + {aliases} + + UseCanonicalName Off + DocumentRoot {homedir}/httpdocs + DirectoryIndex index.htm index.html index.php + + # this combined log format is understandable by webalizer... some other formats are not recognised by webalizer.. thats why, specified here explicitly.. + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%v:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}:/usr/share/php:/usr/share/pear" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + AccessFileName .htaccess + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + {customhttp} + {root_password_protected_dirs} + {password_protected_dirs} + {webstats_password_protection} + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# end template with ssl diff --git a/ehcp/etc/apache2_sslonly/fork/apachetemplate_passivedomains b/ehcp/etc/apache2_sslonly/fork/apachetemplate_passivedomains new file mode 100644 index 0000000..473dbcf --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/apachetemplate_passivedomains @@ -0,0 +1,34 @@ +#____________start of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ +# Comment: {aciklama} +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName {domainname} + ServerAlias www.{domainname} + UseCanonicalName Off + DocumentRoot {homedir} + + LogFormat "%v:%p %h %l %u %t \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_host + CustomLog {homedir}/logs/access_log combined + CustomLog /var/log/apache2/access_log_multi.log vhost_combined_host + + php_admin_value open_basedir "{homedir}" + php_admin_value upload_tmp_dir "{homedir}/phptmpdir" + php_admin_value session.save_path "{homedir}/phptmpdir" + php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen" + + SSLEngine on + SSLCertificateFile {ssl_cert_path} + SSLCertificateKeyFile {ssl_cert_key_path} + {ssl_cert_chain_setting_with_path} + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + + + +#____________end of {domainname}__paneluser:{panelusername}_reseller:{reseller}_id:{id}____________ + + + diff --git a/ehcp/etc/apache2_sslonly/fork/default b/ehcp/etc/apache2_sslonly/fork/default new file mode 100644 index 0000000..efde774 --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/default @@ -0,0 +1,69 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + RewriteEngine On + RewriteCond %{HTTPS} off + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} + + php_admin_value open_basedir "/var/www:/tmp:/usr/share:/etc/roundcube:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + + ServerName ssl + DocumentRoot /var/www/new + + Options +FollowSymLinks + AllowOverride None + + + + Options -Indexes -FollowSymLinks -MultiViews + AllowOverride All + Order Allow,Deny + Allow from All + + + + Deny from All + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + LogLevel debug + ErrorLog /var/log/apache2/default.error.log + CustomLog /var/log/apache2/default.access.log vhost_combined + + SSLEngine on + SSLCertificateFile /etc/ssl/certs/server.crt + SSLCertificateKeyFile /etc/ssl/private/server.key + + php_admin_value open_basedir "/var/www:/tmp:/usr/share:/etc/roundcube:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/lib/roundcube:/var/log/roundcube" + php_admin_value upload_tmp_dir "/tmp" + php_admin_value session.save_path "/var/www/php_sessions" + + diff --git a/ehcp/etc/apache2_sslonly/fork/ports.conf b/ehcp/etc/apache2_sslonly/fork/ports.conf new file mode 100644 index 0000000..413c3aa --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/ports.conf @@ -0,0 +1,17 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +NameVirtualHost *:80 +Listen 80 + + +NameVirtualHost *:443 +Listen 443 + + +SSLStrictSNIVHostCheck off diff --git a/ehcp/etc/apache2_sslonly/fork/ports_ubu14.conf b/ehcp/etc/apache2_sslonly/fork/ports_ubu14.conf new file mode 100644 index 0000000..3b7549b --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/ports_ubu14.conf @@ -0,0 +1,15 @@ +# If you just change the port or add more ports here, you will likely also +# have to change the VirtualHost statement in +# /etc/apache2/sites-enabled/000-default +# This is also true if you have upgraded from before 2.2.9-3 (i.e. from +# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and +# README.Debian.gz + +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +Listen 80 + + +Listen 443 + + +SSLStrictSNIVHostCheck off diff --git a/ehcp/etc/apache2_sslonly/fork/redirect b/ehcp/etc/apache2_sslonly/fork/redirect new file mode 100644 index 0000000..c82da48 --- /dev/null +++ b/ehcp/etc/apache2_sslonly/fork/redirect @@ -0,0 +1,12 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net + + + ServerName {domainname} + ServerAlias www.{domainname} *.{domainname} + SSLEngine on + SSLCertificateFile /etc/ssl/certs/server.crt + SSLCertificateKeyFile /etc/ssl/private/server.key + RewriteEngine On + RewriteCond %{HTTPS} on + RewriteRule (.*) {domainname_redirect}%{REQUEST_URI} + diff --git a/ehcp/etc/courier/authmysqlrc_template.conf b/ehcp/etc/courier/authmysqlrc_template.conf new file mode 100644 index 0000000..0db82bd --- /dev/null +++ b/ehcp/etc/courier/authmysqlrc_template.conf @@ -0,0 +1,304 @@ +##VERSION: $Id: 01c3b327e4d5b8f4123500ce4c8d0ef7a690c10d-20160418083235$ +# +# Copyright 2000-2007 Double Precision, Inc. See COPYING for +# distribution information. +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# authmysqlrc created from authmysqlrc.dist by sysconftool +# +# DO NOT INSTALL THIS FILE with world read permissions. This file +# might contain the MySQL admin password! +# +# Each line in this file must follow the following format: +# +# field[spaces|tabs]value +# +# That is, the name of the field, followed by spaces or tabs, followed by +# field value. Trailing spaces are prohibited. + + +##NAME: LOCATION:0 +# +# The server name, userid, and password used to log in. + +MYSQL_SERVER localhost +MYSQL_USERNAME ehcp +MYSQL_PASSWORD {EHCP_MYSQL_PASS} + +##NAME: SSLINFO:0 +# +# The SSL information. +# +# To use SSL-encrypted connections, define the following variables (available +# in MySQL 4.0, or higher): +# +# +# MYSQL_SSL_KEY /path/to/file +# MYSQL_SSL_CERT /path/to/file +# MYSQL_SSL_CACERT /path/to/file +# MYSQL_SSL_CAPATH /path/to/file +# MYSQL_SSL_CIPHERS ALL:!DES + +##NAME: MYSQL_SOCKET:0 +# +# MYSQL_SOCKET can be used with MySQL version 3.22 or later, it specifies the +# filesystem pipe used for the connection +# +# MYSQL_SOCKET /var/run/mysqld/mysqld.sock + +##NAME: MYSQL_PORT:0 +# +# MYSQL_PORT can be used with MySQL version 3.22 or later to specify a port to +# connect to. + +MYSQL_PORT 0 + +##NAME: MYSQL_OPT:0 +# +# Leave MYSQL_OPT as 0, unless you know what you're doing. + +MYSQL_OPT 0 + +##NAME: MYSQL_DATABASE:0 +# +# The name of the MySQL database we will open: + +MYSQL_DATABASE ehcp + +#NAME: MYSQL_CHARACTER_SET:0 +# +# This is optional. MYSQL_CHARACTER_SET installs a character set. This option +# can be used with MySQL version 4.1 or later. MySQL supports 70+ collations +# for 30+ character sets. See MySQL documentations for more detalis. +# +# MYSQL_CHARACTER_SET latin1 + +##NAME: MYSQL_USER_TABLE:0 +# +# The name of the table containing your user data. See README.authmysqlrc +# for the required fields in this table. + +MYSQL_USER_TABLE emailusers + +##NAME: MYSQL_CRYPT_PWFIELD:0 +# +# Either MYSQL_CRYPT_PWFIELD or MYSQL_CLEAR_PWFIELD must be defined. Both +# are OK too. crypted passwords go into MYSQL_CRYPT_PWFIELD, cleartext +# passwords go into MYSQL_CLEAR_PWFIELD. Cleartext passwords allow +# CRAM-MD5 authentication to be implemented. + +MYSQL_CRYPT_PWFIELD password + +##NAME: MYSQL_CLEAR_PWFIELD:0 +# +# +# MYSQL_CLEAR_PWFIELD clear + +##NAME: MYSQL_DEFAULT_DOMAIN:0 +# +# If DEFAULT_DOMAIN is defined, and someone tries to log in as 'user', +# we will look up 'user@DEFAULT_DOMAIN' instead. +# +# +# DEFAULT_DOMAIN example.com + +##NAME: MYSQL_UID_FIELD:0 +# +# Other fields in the mysql table: +# +# MYSQL_UID_FIELD - contains the numerical userid of the account +# +MYSQL_UID_FIELD 5000 + +##NAME: MYSQL_GID_FIELD:0 +# +# Numerical groupid of the account + +MYSQL_GID_FIELD 5000 + +##NAME: MYSQL_LOGIN_FIELD:0 +# +# The login id, default is id. Basically the query is: +# +# SELECT MYSQL_UID_FIELD, MYSQL_GID_FIELD, ... WHERE id='loginid' +# + +MYSQL_LOGIN_FIELD email + +##NAME: MYSQL_HOME_FIELD:0 +# + +MYSQL_HOME_FIELD "/home/vmail" + +##NAME: MYSQL_NAME_FIELD:0 +# +# The user's name (optional) + +#MYSQL_NAME_FIELD name + +##NAME: MYSQL_MAILDIR_FIELD:0 +# +# This is an optional field, and can be used to specify an arbitrary +# location of the maildir for the account, which normally defaults to +# $HOME/Maildir (where $HOME is read from MYSQL_HOME_FIELD). +# +# You still need to provide a MYSQL_HOME_FIELD, even if you uncomment this +# out. +# +MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') + +##NAME: MYSQL_DEFAULTDELIVERY:0 +# +# Courier mail server only: optional field specifies custom mail delivery +# instructions for this account (if defined) -- essentially overrides +# DEFAULTDELIVERY from ${sysconfdir}/courierd +# +# MYSQL_DEFAULTDELIVERY defaultdelivery + +##NAME: MYSQL_QUOTA_FIELD:0 +# +# Define MYSQL_QUOTA_FIELD to be the name of the field that can optionally +# specify a maildir quota. See README.maildirquota for more information +# +MYSQL_QUOTA_FIELD quota + +##NAME: MYSQL_AUXOPTIONS:0 +# +# Auxiliary options. The MYSQL_AUXOPTIONS field should be a char field that +# contains a single string consisting of comma-separated "ATTRIBUTE=NAME" +# pairs. These names are additional attributes that define various per-account +# "options", as given in INSTALL's description of the "Account OPTIONS" +# setting. +# +# MYSQL_AUXOPTIONS_FIELD auxoptions +# +# You might want to try something like this, if you'd like to use a bunch +# of individual fields, instead of a single text blob: +# +# MYSQL_AUXOPTIONS_FIELD CONCAT("disableimap=",disableimap,",disablepop3=",disablepop3,",disablewebmail=",disablewebmail,",sharedgroup=",sharedgroup) +# +# This will let you define fields called "disableimap", etc, with the end result +# being something that the OPTIONS parser understands. + + +##NAME: MYSQL_WHERE_CLAUSE:0 +# +# This is optional, MYSQL_WHERE_CLAUSE can be basically set to an arbitrary +# fixed string that is appended to the WHERE clause of our query +# +# MYSQL_WHERE_CLAUSE server='mailhost.example.com' + +##NAME: MYSQL_SELECT_CLAUSE:0 +# +# This is optional, MYSQL_SELECT_CLAUSE can be set when you have a database, +# which is structuraly different from proposed. The fixed string will +# be used to do a SELECT operation on database, which should return fields +# in order specified bellow: +# +# username, cryptpw, clearpw, uid, gid, home, maildir, quota, fullname, options +# +# The username field should include the domain (see example below). +# +# There are two variables, which you can use. Substitution will be made +# for them, so you can put entered username (local part) and domain name +# in the right place of your query. These variables are: +# $(local_part), $(domain), $(service) +# +# If a $(domain) is empty (not given by the remote user) the default domain +# name is used in its place. +# +# $(service) will expand out to the service being authenticated: imap, imaps, +# pop3 or pop3s. Courier mail server only: service will also expand out to +# "courier", when searching for local mail account's location. In this case, +# if the "maildir" field is not empty it will be used in place of +# DEFAULTDELIVERY. Courier mail server will also use esmtp when doing +# authenticated ESMTP. +# +# Either cryptpw or clearpw are required. The other one can be specified +# as an empty string; as well as maildir, quota, and option fields. +# +# Example: +# +# MYSQL_SELECT_CLAUSE SELECT CONCAT(user,'@',domain), '', password, \ +# uid, gid, home, '' \ +# FROM users WHERE user='$(local_part)' \ +# AND domain='$(domain)' +# +# The encrypted password field is not used, and a literal '', empty string, +# appears in its place. Ditto for the 'maildir' field, and the remaining +# optional fields are completely absent. The maildir field, in this example +# can also be omitted, it's shown as an example only. +# +# This example is a little bit modified adaptation of vmail-sql +# database scheme: +# +# MYSQL_SELECT_CLAUSE SELECT CONCAT(popbox.local_part, '@', popbox.domain_name), \ +# CONCAT('{MD5}', popbox.password_hash), \ +# popbox.clearpw, \ +# domain.uid, \ +# domain.gid, \ +# CONCAT(domain.path, '/', popbox.mbox_name), \ +# '', \ +# domain.quota, \ +# '', \ +# CONCAT("disableimap=",disableimap,",disablepop3=", \ +# disablepop3,",disablewebmail=",disablewebmail, \ +# ",sharedgroup=",sharedgroup) \ +# FROM popbox, domain \ +# WHERE popbox.local_part = '$(local_part)' \ +# AND popbox.domain_name = '$(domain)' \ +# AND popbox.domain_name = domain.domain_name + + +##NAME: MYSQL_ENUMERATE_CLAUSE:1 +# +# {EXPERIMENTAL} +# Optional custom SQL query used to enumerate accounts for authenumerate, +# in order to compile a list of accounts for shared folders. The query +# should return the following fields: name, uid, gid, homedir, maildir, options +# +# Example: +# MYSQL_ENUMERATE_CLAUSE SELECT CONCAT(popbox.local_part, '@', popbox.domain_name), \ +# domain.uid, \ +# domain.gid, \ +# CONCAT(domain.path, '/', popbox.mbox_name), \ +# '', \ +# CONCAT('sharedgroup=', sharedgroup) \ +# FROM popbox, domain \ +# WHERE popbox.local_part = '$(local_part)' \ +# AND popbox.domain_name = '$(domain)' \ +# AND popbox.domain_name = domain.domain_name + + + +##NAME: MYSQL_CHPASS_CLAUSE:0 +# +# (EXPERIMENTAL) +# This is optional, MYSQL_CHPASS_CLAUSE can be set when you have a database, +# which is structuraly different from proposed. The fixed string will +# be used to do an UPDATE operation on database. In other words, it is +# used, when changing password. +# +# There are four variables, which you can use. Substitution will be made +# for them, so you can put entered username (local part) and domain name +# in the right place of your query. There variables are: +# $(local_part) , $(domain) , $(newpass) , $(newpass_crypt) +# +# If a $(domain) is empty (not given by the remote user) the default domain +# name is used in its place. +# $(newpass) contains plain password +# $(newpass_crypt) contains its crypted form +# +# MYSQL_CHPASS_CLAUSE UPDATE popbox \ +# SET clearpw='$(newpass)', \ +# password_hash='$(newpass_crypt)' \ +# WHERE local_part='$(local_part)' \ +# AND domain_name='$(domain)' +# + +##NAME: MARKER:0 +# +# Do not remove this section from this configuration file. This section +# must be present at the end of this file. diff --git a/ehcp/etc/generic_apache_templates/password_protected_directory.conf b/ehcp/etc/generic_apache_templates/password_protected_directory.conf new file mode 100644 index 0000000..c96f257 --- /dev/null +++ b/ehcp/etc/generic_apache_templates/password_protected_directory.conf @@ -0,0 +1,8 @@ + + AuthType Basic + AuthName "Authentication Required" + AuthUserFile "{protected_directory_credentials_file}" + Require valid-user + Order allow,deny + Allow from all + diff --git a/ehcp/etc/generic_nginx_templates/password_protected_directory.conf b/ehcp/etc/generic_nginx_templates/password_protected_directory.conf new file mode 100644 index 0000000..49c6d9e --- /dev/null +++ b/ehcp/etc/generic_nginx_templates/password_protected_directory.conf @@ -0,0 +1,15 @@ +location ^~ /{protected_directory_path}/ { + root {homedir}/httpdocs; + auth_basic "Restricted Area"; + auth_basic_user_file {protected_directory_credentials_file}; + location ~ ^/{protected_directory_path}/(.+\.php)$ { + try_files $uri =404; + root {homedir}/httpdocs; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } +} diff --git a/ehcp/etc/logrotate.d/ehcp b/ehcp/etc/logrotate.d/ehcp new file mode 100755 index 0000000..ed6fdd6 --- /dev/null +++ b/ehcp/etc/logrotate.d/ehcp @@ -0,0 +1,6 @@ +/var/www/vhosts/bvidinli/deneme.com/logs/access_log /var/www/vhosts/bvidinli/deneme.com/logs/error_log /var/www/vhosts/bvidinli/ffff.com/logs/access_log /var/www/vhosts/bvidinli/ffff.com/logs/error_log /var/www/vhosts/bvidinli/ppppp.com/logs/access_log /var/www/vhosts/bvidinli/ppppp.com/logs/error_log /var/www/vhosts/bvidinli/ff/logs/access_log /var/www/vhosts/bvidinli/ff/logs/error_log /var/log/ehcp.log /var/log/apache_common_access_log { + daily + missingok + compress + delaycompress +} diff --git a/ehcp/etc/nginx/apache_subdomain_template.nginx b/ehcp/etc/nginx/apache_subdomain_template.nginx new file mode 100755 index 0000000..4ae9790 --- /dev/null +++ b/ehcp/etc/nginx/apache_subdomain_template.nginx @@ -0,0 +1,43 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {subdomain}.{domainname} www.{subdomain}.{domainname}; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + root {homedir}; + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + } + + ## Images and static content is treated different + location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|swf)$ { + access_log off; + expires 30d; + root {homedir}; + } + + location ~ .php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME {homedir}$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } +} diff --git a/ehcp/etc/nginx/apachetemplate.nginx b/ehcp/etc/nginx/apachetemplate.nginx new file mode 100755 index 0000000..26b925a --- /dev/null +++ b/ehcp/etc/nginx/apachetemplate.nginx @@ -0,0 +1,152 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + + root {homedir}/httpdocs; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + {root_password_protected_dirs} + } + + location ~ \.php$ { + root {homedir}/httpdocs; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /ehcp { + root /var/www/new/; + index index.php index.html index.htm; + + location ~ ^/ehcp/(.+\.php)$ { + try_files $uri =404; + root /var/www/new/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/:/var/www/php_sessions:/tmp \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/ehcp/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /var/www/new/; + } + + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + # any files that should be avoided, may be put here: + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + {customhttp} + {password_protected_dirs} + {webstats_password_protection} +} diff --git a/ehcp/etc/nginx/apachetemplate_ehcp_panel.nginx b/ehcp/etc/nginx/apachetemplate_ehcp_panel.nginx new file mode 100755 index 0000000..1a22611 --- /dev/null +++ b/ehcp/etc/nginx/apachetemplate_ehcp_panel.nginx @@ -0,0 +1,114 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template +server { + listen 80; + server_name {domainname}; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root {ehcpdir}; + index index.php; + + location ~ \.php$ { + root {ehcpdir}; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location / { + location ~ ^/(.+\.conf)$ { + return 403; + } + location ~ ^/(.+\.txt)$ { + return 403; + } + location ~ ^/(.+\.log)$ { + return 403; + } + location ~ ^/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } +} +# END OF CUSTOM GLOBAL PANEL URLS Template + diff --git a/ehcp/etc/nginx/default.nginx b/ehcp/etc/nginx/default.nginx new file mode 100755 index 0000000..99436e3 --- /dev/null +++ b/ehcp/etc/nginx/default.nginx @@ -0,0 +1,86 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx default server config file + +server { + listen 80 default; + server_name _; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root /var/www/new; + index index.html index.htm index.php; + + # Set this to off if you're hosting more than one site + server_name_in_redirect off; + + # SEO friendly URLs for Wordpress + # + #location /wordpress/ { + # if (!-e $request_filename) { + # rewrite ^(.*)$ /wordpress/index.php?q=$1 last; + # } + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/www/nginx-default; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/new$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location /ehcp { + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + +} diff --git a/ehcp/etc/nginx/mime.types b/ehcp/etc/nginx/mime.types new file mode 100755 index 0000000..4900bdc --- /dev/null +++ b/ehcp/etc/nginx/mime.types @@ -0,0 +1,88 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + image/pcx pcx; + application/x-javascript js; + application/atom+xml atom; + + text/mathml mml; + text/plain txt cfg; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tga tga; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + application/jdownload dlc; + application/vnd.android.package-archive apk; + application/pk3 pk3; + application/targz tar gz tgz; + application/bz2 bz2; + application/wor wor; + application/trillian tsz; + application/x-bzip-compressed-tar tbz; + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/ogg ogx; + + audio/midi mid midi kar; + audio/mpeg mpga mpega mp2 mp3 m4a; + audio/ogg oga ogg spx; + audio/x-realaudio ra; + audio/webm weba; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg mpe; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/ehcp/etc/nginx/nginx.conf b/ehcp/etc/nginx/nginx.conf new file mode 100755 index 0000000..8088ad6 --- /dev/null +++ b/ehcp/etc/nginx/nginx.conf @@ -0,0 +1,51 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx main config file + +user {wwwuser} {wwwgroup}; +worker_processes 4; + +error_log /var/log/nginx/default.error.log; + +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + server_names_hash_bucket_size 4096; + limit_req_zone $binary_remote_addr zone=one:20m rate=10r/s; + + include /etc/nginx/mime.types; + #default_type application/octet-stream; + default_type text/html; + + log_format combined_host '$remote_addr - $remote_user [$time_local] ' + '"$host" "$request" $status $body_bytes_sent ' + '"$http_referer" "$http_user_agent"'; + + access_log /var/log/nginx/default.access.log; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 3; + tcp_nodelay on; + + gzip on; + gzip_comp_level 2; + gzip_proxied any; + gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + # Nginx default value was 1 MB and therefore all uploads exceeding 1 MB was + # getting "413 Request Entity Too Large" error.Script default is 64 MB. + # Remember to change the settings for upload size in php.ini as well. + client_max_body_size 64m; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /var/www/new/ehcp/apachehcp.conf; + include /var/www/new/ehcp/apachehcp_subdomains.conf; + include /var/www/new/ehcp/apachehcp_globalpanelurls.conf; +} diff --git a/ehcp/etc/nginx/redirect b/ehcp/etc/nginx/redirect new file mode 100644 index 0000000..cf7e0af --- /dev/null +++ b/ehcp/etc/nginx/redirect @@ -0,0 +1,5 @@ +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + return 301 {domainname_redirect}$request_uri; +} diff --git a/ehcp/etc/nginx_nonssl/apache_subdomain_template.nginx b/ehcp/etc/nginx_nonssl/apache_subdomain_template.nginx new file mode 100755 index 0000000..623c0b9 --- /dev/null +++ b/ehcp/etc/nginx_nonssl/apache_subdomain_template.nginx @@ -0,0 +1,44 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {subdomain}.{domainname} www.{subdomain}.{domainname}; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + root {homedir}; + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + } + + ## Images and static content is treated different + location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|swf)$ { + access_log off; + expires 30d; + root {homedir}; + } + + location ~ .php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME {homedir}$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + +} diff --git a/ehcp/etc/nginx_nonssl/apachetemplate.nginx b/ehcp/etc/nginx_nonssl/apachetemplate.nginx new file mode 100755 index 0000000..ee1dcdc --- /dev/null +++ b/ehcp/etc/nginx_nonssl/apachetemplate.nginx @@ -0,0 +1,146 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + + root {homedir}/httpdocs; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + {root_password_protected_dirs} + } + + location ~ \.php$ { + root {homedir}/httpdocs; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /ehcp { + root /var/www/new/; + index index.php index.html index.htm; + location ~ ^/ehcp/(.+\.php)$ { + try_files $uri =404; + root /var/www/new/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/:/var/www/php_sessions:/tmp \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/ehcp/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /var/www/new/; + } + + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + # any files that should be avoided, may be put here: + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + {customhttp} + {password_protected_dirs} + {webstats_password_protection} +} diff --git a/ehcp/etc/nginx_nonssl/apachetemplate_ehcp_panel.nginx b/ehcp/etc/nginx_nonssl/apachetemplate_ehcp_panel.nginx new file mode 100755 index 0000000..1a22611 --- /dev/null +++ b/ehcp/etc/nginx_nonssl/apachetemplate_ehcp_panel.nginx @@ -0,0 +1,114 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template +server { + listen 80; + server_name {domainname}; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root {ehcpdir}; + index index.php; + + location ~ \.php$ { + root {ehcpdir}; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location / { + location ~ ^/(.+\.conf)$ { + return 403; + } + location ~ ^/(.+\.txt)$ { + return 403; + } + location ~ ^/(.+\.log)$ { + return 403; + } + location ~ ^/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } +} +# END OF CUSTOM GLOBAL PANEL URLS Template + diff --git a/ehcp/etc/nginx_nonssl/default.nginx b/ehcp/etc/nginx_nonssl/default.nginx new file mode 100755 index 0000000..99436e3 --- /dev/null +++ b/ehcp/etc/nginx_nonssl/default.nginx @@ -0,0 +1,86 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx default server config file + +server { + listen 80 default; + server_name _; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root /var/www/new; + index index.html index.htm index.php; + + # Set this to off if you're hosting more than one site + server_name_in_redirect off; + + # SEO friendly URLs for Wordpress + # + #location /wordpress/ { + # if (!-e $request_filename) { + # rewrite ^(.*)$ /wordpress/index.php?q=$1 last; + # } + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/www/nginx-default; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/new$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location /ehcp { + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + +} diff --git a/ehcp/etc/nginx_nonssl/mime.types b/ehcp/etc/nginx_nonssl/mime.types new file mode 100755 index 0000000..4900bdc --- /dev/null +++ b/ehcp/etc/nginx_nonssl/mime.types @@ -0,0 +1,88 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + image/pcx pcx; + application/x-javascript js; + application/atom+xml atom; + + text/mathml mml; + text/plain txt cfg; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tga tga; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + application/jdownload dlc; + application/vnd.android.package-archive apk; + application/pk3 pk3; + application/targz tar gz tgz; + application/bz2 bz2; + application/wor wor; + application/trillian tsz; + application/x-bzip-compressed-tar tbz; + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/ogg ogx; + + audio/midi mid midi kar; + audio/mpeg mpga mpega mp2 mp3 m4a; + audio/ogg oga ogg spx; + audio/x-realaudio ra; + audio/webm weba; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg mpe; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/ehcp/etc/nginx_nonssl/nginx.conf b/ehcp/etc/nginx_nonssl/nginx.conf new file mode 100755 index 0000000..8088ad6 --- /dev/null +++ b/ehcp/etc/nginx_nonssl/nginx.conf @@ -0,0 +1,51 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx main config file + +user {wwwuser} {wwwgroup}; +worker_processes 4; + +error_log /var/log/nginx/default.error.log; + +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + server_names_hash_bucket_size 4096; + limit_req_zone $binary_remote_addr zone=one:20m rate=10r/s; + + include /etc/nginx/mime.types; + #default_type application/octet-stream; + default_type text/html; + + log_format combined_host '$remote_addr - $remote_user [$time_local] ' + '"$host" "$request" $status $body_bytes_sent ' + '"$http_referer" "$http_user_agent"'; + + access_log /var/log/nginx/default.access.log; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 3; + tcp_nodelay on; + + gzip on; + gzip_comp_level 2; + gzip_proxied any; + gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + # Nginx default value was 1 MB and therefore all uploads exceeding 1 MB was + # getting "413 Request Entity Too Large" error.Script default is 64 MB. + # Remember to change the settings for upload size in php.ini as well. + client_max_body_size 64m; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /var/www/new/ehcp/apachehcp.conf; + include /var/www/new/ehcp/apachehcp_subdomains.conf; + include /var/www/new/ehcp/apachehcp_globalpanelurls.conf; +} diff --git a/ehcp/etc/nginx_nonssl/redirect b/ehcp/etc/nginx_nonssl/redirect new file mode 100644 index 0000000..cf7e0af --- /dev/null +++ b/ehcp/etc/nginx_nonssl/redirect @@ -0,0 +1,5 @@ +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + return 301 {domainname_redirect}$request_uri; +} diff --git a/ehcp/etc/nginx_ssl/apache_subdomain_template.nginx b/ehcp/etc/nginx_ssl/apache_subdomain_template.nginx new file mode 100755 index 0000000..9beb280 --- /dev/null +++ b/ehcp/etc/nginx_ssl/apache_subdomain_template.nginx @@ -0,0 +1,89 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {subdomain}.{domainname} www.{subdomain}.{domainname}; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + root {homedir}; + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + } + + ## Images and static content is treated different + location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|swf)$ { + access_log off; + expires 30d; + root {homedir}; + } + + location ~ .php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME {homedir}$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } +} + +# FOR SSL CONFIG +server { + listen 443 ssl; + server_name {subdomain}.{domainname} www.{subdomain}.{domainname}; + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + root {homedir}; + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + } + + ## Images and static content is treated different + location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|swf)$ { + access_log off; + expires 30d; + root {homedir}; + } + + location ~ .php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME {homedir}$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } +} diff --git a/ehcp/etc/nginx_ssl/apachetemplate.nginx b/ehcp/etc/nginx_ssl/apachetemplate.nginx new file mode 100755 index 0000000..2d91f01 --- /dev/null +++ b/ehcp/etc/nginx_ssl/apachetemplate.nginx @@ -0,0 +1,308 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + + root {homedir}/httpdocs; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + {root_password_protected_dirs} + } + + location ~ \.php$ { + root {homedir}/httpdocs; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /ehcp { + root /var/www/new/; + index index.php index.html index.htm; + + location ~ ^/ehcp/(.+\.php)$ { + try_files $uri =404; + root /var/www/new/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/:/var/www/php_sessions:/tmp \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/ehcp/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /var/www/new/; + } + + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + # any files that should be avoided, may be put here: + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + {customhttp} + {password_protected_dirs} + {webstats_password_protection} +} + +# FOR SSL CONFIG +server { + listen 443 ssl; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + root {homedir}/httpdocs; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + {root_password_protected_dirs} + } + + location ~ \.php$ { + root {homedir}/httpdocs; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /ehcp { + root /var/www/new/; + index index.php index.html index.htm; + + location ~ ^/ehcp/(.+\.php)$ { + try_files $uri =404; + root /var/www/new/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/:/var/www/php_sessions:/tmp \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/ehcp/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /var/www/new/; + } + + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + # any files that should be avoided, may be put here: + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + {customhttp} + {password_protected_dirs} + {webstats_password_protection} +} diff --git a/ehcp/etc/nginx_ssl/apachetemplate_ehcp_panel.nginx b/ehcp/etc/nginx_ssl/apachetemplate_ehcp_panel.nginx new file mode 100755 index 0000000..9664e9f --- /dev/null +++ b/ehcp/etc/nginx_ssl/apachetemplate_ehcp_panel.nginx @@ -0,0 +1,129 @@ +### START OF CUSTOM GLOBAL PANEL URLS Template ### + +# NON-SSL +server { + listen 80; + server_name {domainname}; + return 301 https://$host$request_uri; +} + +# FOR SSL CONFIG + +server { + listen 443 ssl; + server_name {domainname}; + + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root {ehcpdir}; + index index.php; + + location ~ \.php$ { + root {ehcpdir}; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location / { + location ~ ^/(.+\.conf)$ { + return 403; + } + location ~ ^/(.+\.txt)$ { + return 403; + } + location ~ ^/(.+\.log)$ { + return 403; + } + location ~ ^/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } +} +### END OF CUSTOM GLOBAL PANEL URLS Template ### + diff --git a/ehcp/etc/nginx_ssl/default.nginx b/ehcp/etc/nginx_ssl/default.nginx new file mode 100755 index 0000000..ce9d149 --- /dev/null +++ b/ehcp/etc/nginx_ssl/default.nginx @@ -0,0 +1,177 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx default server config file + +server { + listen 80 default; + server_name _; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root /var/www/new; + index index.html index.htm index.php; + + # Set this to off if you're hosting more than one site + server_name_in_redirect off; + + # SEO friendly URLs for Wordpress + # + #location /wordpress/ { + # if (!-e $request_filename) { + # rewrite ^(.*)$ /wordpress/index.php?q=$1 last; + # } + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/www/nginx-default; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/new$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location /ehcp { + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + +} + +# For SSL CONFIG + +server { + listen 443 ssl; + server_name _; + + ssl_certificate /etc/ssl/certs/server.crt; + ssl_certificate_key /etc/ssl/private/server.key; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root /var/www/new; + index index.html index.htm index.php; + + # Set this to off if you're hosting more than one site + server_name_in_redirect off; + + # SEO friendly URLs for Wordpress + # + #location /wordpress/ { + # if (!-e $request_filename) { + # rewrite ^(.*)$ /wordpress/index.php?q=$1 last; + # } + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/www/nginx-default; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/new$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location /ehcp { + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + +} diff --git a/ehcp/etc/nginx_ssl/mime.types b/ehcp/etc/nginx_ssl/mime.types new file mode 100755 index 0000000..4900bdc --- /dev/null +++ b/ehcp/etc/nginx_ssl/mime.types @@ -0,0 +1,88 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + image/pcx pcx; + application/x-javascript js; + application/atom+xml atom; + + text/mathml mml; + text/plain txt cfg; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tga tga; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + application/jdownload dlc; + application/vnd.android.package-archive apk; + application/pk3 pk3; + application/targz tar gz tgz; + application/bz2 bz2; + application/wor wor; + application/trillian tsz; + application/x-bzip-compressed-tar tbz; + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/ogg ogx; + + audio/midi mid midi kar; + audio/mpeg mpga mpega mp2 mp3 m4a; + audio/ogg oga ogg spx; + audio/x-realaudio ra; + audio/webm weba; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg mpe; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/ehcp/etc/nginx_ssl/nginx.conf b/ehcp/etc/nginx_ssl/nginx.conf new file mode 100755 index 0000000..bb0959a --- /dev/null +++ b/ehcp/etc/nginx_ssl/nginx.conf @@ -0,0 +1,50 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx main config file + +user {wwwuser} {wwwgroup}; +worker_processes 4; + +error_log /var/log/nginx/default.error.log; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + server_names_hash_bucket_size 4096; + limit_req_zone $binary_remote_addr zone=one:20m rate=10r/s; + + include /etc/nginx/mime.types; + #default_type application/octet-stream; + default_type text/html; + + log_format combined_host '$remote_addr - $remote_user [$time_local] ' + '"$host" "$request" $status $body_bytes_sent ' + '"$http_referer" "$http_user_agent"'; + + access_log /var/log/nginx/default.access.log; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 3; + tcp_nodelay on; + + gzip on; + gzip_comp_level 2; + gzip_proxied any; + gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + # Nginx default value was 1 MB and therefore all uploads exceeding 1 MB was + # getting "413 Request Entity Too Large" error.Script default is 64 MB. + # Remember to change the settings for upload size in php.ini as well. + client_max_body_size 64m; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /var/www/new/ehcp/apachehcp.conf; + include /var/www/new/ehcp/apachehcp_subdomains.conf; + include /var/www/new/ehcp/apachehcp_globalpanelurls.conf; +} diff --git a/ehcp/etc/nginx_ssl/redirect b/ehcp/etc/nginx_ssl/redirect new file mode 100644 index 0000000..85fe482 --- /dev/null +++ b/ehcp/etc/nginx_ssl/redirect @@ -0,0 +1,19 @@ +server { + listen 80; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + return 301 {domainname_redirect}$request_uri; +} + +# FOR SSL CONFIG + +server { + listen 443 ssl; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + ssl_certificate /etc/ssl/certs/server.crt; + ssl_certificate_key /etc/ssl/private/server.key; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + return 301 {domainname_redirect}$request_uri; +} + diff --git a/ehcp/etc/nginx_sslonly/apache_subdomain_template.nginx b/ehcp/etc/nginx_sslonly/apache_subdomain_template.nginx new file mode 100755 index 0000000..04a89bf --- /dev/null +++ b/ehcp/etc/nginx_sslonly/apache_subdomain_template.nginx @@ -0,0 +1,48 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +# FOR SSL CONFIG +server { + listen 443 ssl; + server_name {subdomain}.{domainname} www.{subdomain}.{domainname}; + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + root {homedir}; + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + } + + ## Images and static content is treated different + location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|swf)$ { + access_log off; + expires 30d; + root {homedir}; + } + + location ~ .php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME {homedir}$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } +} diff --git a/ehcp/etc/nginx_sslonly/apachetemplate.nginx b/ehcp/etc/nginx_sslonly/apachetemplate.nginx new file mode 100755 index 0000000..b5f25df --- /dev/null +++ b/ehcp/etc/nginx_sslonly/apachetemplate.nginx @@ -0,0 +1,158 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# webserver config file for nginx webserver + +# FOR SSL CONFIG +server { + listen 443 ssl; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + root {homedir}/httpdocs; + + # User specific logs and generic logs (have one conglomerate [good for server admins] and one specific to user [good for individual user]) + access_log {homedir}/logs/access_log; + access_log /var/log/nginx/access_log_multi.log combined_host; + error_log {homedir}/logs/error_log; + + index index.html index.htm index.php; + + location / { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; + if (-f $document_root/error_page.html ) { + error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html; + } + {root_password_protected_dirs} + } + + location ~ \.php$ { + root {homedir}/httpdocs; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={homedir}:/usr/share/php:/usr/share/pear \n upload_tmp_dir={homedir}/phptmpdir \n session.save_path={homedir}/phptmpdir \n disable_functions=exec,passthru,shell_exec,system,proc_open,popen"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /ehcp { + root /var/www/new/; + index index.php index.html index.htm; + + location ~ ^/ehcp/(.+\.php)$ { + try_files $uri =404; + root /var/www/new/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/:/var/www/php_sessions:/tmp \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/ehcp/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /var/www/new/; + } + + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + # any files that should be avoided, may be put here: + location ~ (apache_subdomain_template|apachetemplate|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + {customhttp} + {password_protected_dirs} + {webstats_password_protection} +} diff --git a/ehcp/etc/nginx_sslonly/apachetemplate_ehcp_panel.nginx b/ehcp/etc/nginx_sslonly/apachetemplate_ehcp_panel.nginx new file mode 100755 index 0000000..087930c --- /dev/null +++ b/ehcp/etc/nginx_sslonly/apachetemplate_ehcp_panel.nginx @@ -0,0 +1,119 @@ +# START OF CUSTOM GLOBAL PANEL URLS Template +server { + listen 443 ssl; + server_name {domainname}; + + ssl_certificate {ssl_cert_path}; + ssl_certificate_key {ssl_cert_key_path}; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root {ehcpdir}; + index index.php; + + location ~ \.php$ { + root {ehcpdir}; + include fastcgi_params; + try_files $uri = 404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + fastcgi_read_timeout 300; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location / { + location ~ ^/(.+\.conf)$ { + return 403; + } + location ~ ^/(.+\.txt)$ { + return 403; + } + location ~ ^/(.+\.log)$ { + return 403; + } + location ~ ^/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + + location /webmail2 { + root {ehcpdir}/; + index index.php index.html index.htm; + + location ~ ^/webmail2/(.+\.php)$ { + try_files $uri =404; + root {ehcpdir}/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir={ehcpdir}/webmail2 \n upload_tmp_dir={ehcpdir}/webmail2/data \n session.save_path={ehcpdir}/webmail2/data"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/webmail2/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root {ehcpdir}/; + } + } + + location /webmail { + rewrite ^/* /roundcube last; + } + + location /roundcube { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/roundcube/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/lib/roundcube:/etc/roundcube:/usr/share:/tmp:/var/www/php_sessions:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + } + + location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } +} +# END OF CUSTOM GLOBAL PANEL URLS Template + diff --git a/ehcp/etc/nginx_sslonly/default.nginx b/ehcp/etc/nginx_sslonly/default.nginx new file mode 100755 index 0000000..ceb318e --- /dev/null +++ b/ehcp/etc/nginx_sslonly/default.nginx @@ -0,0 +1,98 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx default server config file + +server { + listen 80; + return 301 https://$host$request_uri; +} + +# For SSL CONFIG + +server { + listen 443 ssl; + server_name _; + + ssl_certificate /etc/ssl/certs/server.crt; + ssl_certificate_key /etc/ssl/private/server.key; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + access_log /var/log/nginx/default.access.log; + error_log /var/log/nginx/default.error.log; + + root /var/www/new; + index index.html index.htm index.php; + + # Set this to off if you're hosting more than one site + server_name_in_redirect off; + + # SEO friendly URLs for Wordpress + # + #location /wordpress/ { + # if (!-e $request_filename) { + # rewrite ^(.*)$ /wordpress/index.php?q=$1 last; + # } + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/www/nginx-default; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/www/new$fastcgi_script_name; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www:/tmp:/usr/share:/etc/roundcube:/var/lib/roundcube:/var/log/roundcube \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include fastcgi_params; + limit_req zone=one burst=5; + } + + # deny access to .htaccess files, if Apache's document root concurs with nginx's one + # + location ~ (apache_subdomain_template|apachetemplate$|apachetemplate_ipbased|apachetemplate_passivedomains|/\.conf$|/\.ht|access_log|error_log|access\.log|error\.log) { + deny all; + } + + location /ehcp { + location ~ ^/ehcp/(.+\.conf)$ { + return 403; + } + location ~ ^/ehcp/(.+\.txt)$ { + return 403; + } + location ~ ^/ehcp/(.+\.log)$ { + return 403; + } + location ~ ^/ehcp/(.+\.sh)$ { + return 403; + } + } + + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/tmp:/usr/share/php:/usr/share/pear:/usr/share:/var/www/php_sessions \n upload_tmp_dir=/tmp \n session.save_path=/var/www/php_sessions"; + include /etc/nginx/fastcgi_params; + limit_req zone=one burst=5; + proxy_send_timeout 600; + proxy_read_timeout 600; + } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + +} diff --git a/ehcp/etc/nginx_sslonly/mime.types b/ehcp/etc/nginx_sslonly/mime.types new file mode 100755 index 0000000..4900bdc --- /dev/null +++ b/ehcp/etc/nginx_sslonly/mime.types @@ -0,0 +1,88 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + image/pcx pcx; + application/x-javascript js; + application/atom+xml atom; + + text/mathml mml; + text/plain txt cfg; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tga tga; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + application/jdownload dlc; + application/vnd.android.package-archive apk; + application/pk3 pk3; + application/targz tar gz tgz; + application/bz2 bz2; + application/wor wor; + application/trillian tsz; + application/x-bzip-compressed-tar tbz; + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/ogg ogx; + + audio/midi mid midi kar; + audio/mpeg mpga mpega mp2 mp3 m4a; + audio/ogg oga ogg spx; + audio/x-realaudio ra; + audio/webm weba; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg mpe; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/ehcp/etc/nginx_sslonly/nginx.conf b/ehcp/etc/nginx_sslonly/nginx.conf new file mode 100755 index 0000000..138b8a3 --- /dev/null +++ b/ehcp/etc/nginx_sslonly/nginx.conf @@ -0,0 +1,50 @@ +# this file used in Easy Hosting Control Panel (ehcp), www.ehcp.net +# nginx main config file + +user {wwwuser} {wwwgroup}; +worker_processes 4; + +error_log /var/log/nginx/default.error.log; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + server_names_hash_bucket_size 4096; + limit_req_zone $binary_remote_addr zone=one:20m rate=10r/s; + + include /etc/nginx/mime.types; + #default_type application/octet-stream; + default_type text/html; + + log_format combined_host '$remote_addr - $remote_user [$time_local] ' + '"$host" "$request" $status $body_bytes_sent ' + '"$http_referer" "$http_user_agent"'; + + access_log /var/log/nginx/default.access.log; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 3; + tcp_nodelay on; + + gzip on; + gzip_comp_level 2; + gzip_proxied any; + gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + # Nginx default value was 1 MB and therefore all uploads exceeding 1 MB was + # getting "413 Request Entity Too Large" error.Script default is 64 MB. + # Remember to change the settings for upload size in php.ini as well. + client_max_body_size 64m; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /var/www/new/ehcp/apachehcp.conf; + include /var/www/new/ehcp/apachehcp_subdomains.conf; + include /var/www/new/ehcp/apachehcp_globalpanelurls.conf; +} diff --git a/ehcp/etc/nginx_sslonly/redirect b/ehcp/etc/nginx_sslonly/redirect new file mode 100644 index 0000000..8d14b72 --- /dev/null +++ b/ehcp/etc/nginx_sslonly/redirect @@ -0,0 +1,10 @@ +server { + listen 443 ssl; + server_name {domainname} www.{domainname} {wildcarddomain}; # this is changed to *.{domainname} within classapp.php + ssl_certificate /etc/ssl/certs/server.crt; + ssl_certificate_key /etc/ssl/private/server.key; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + return 301 {domainname_redirect}$request_uri; +} diff --git a/ehcp/etc/pam/pam_dbauth_smtp.conf b/ehcp/etc/pam/pam_dbauth_smtp.conf new file mode 100644 index 0000000..cea16b1 --- /dev/null +++ b/ehcp/etc/pam/pam_dbauth_smtp.conf @@ -0,0 +1,14 @@ +[database] +host=localhost +user=ehcp +password={EHCP_DB_PASSWORD} +db=ehcp +port=3306 +engine=mysqldb +; engine=psycopg2 +; engine=redis + +[query] +; SQL Example +select_statement=select password from emailusers where email='{0}' +;hashtype_force=sha1 diff --git a/ehcp/etc/pam/pam_dbauth_smtp.py b/ehcp/etc/pam/pam_dbauth_smtp.py new file mode 100644 index 0000000..e785b11 --- /dev/null +++ b/ehcp/etc/pam/pam_dbauth_smtp.py @@ -0,0 +1,246 @@ +# vim: noai:ts=2:sw=2:set expandtab: +# +# pam_dbauth.py +# Performs salted-hash authentication from a database +# +""" + Author: Eric Windisch + Copyright: 2010, Eric Windisch , VPS Village + License: EPL v1.0 + + Contributor: Eric Arnol-Martin + Added MySQL Password() Function Support + - Requires passlib (sudo pip install passlib) + - Fixed port integer bug MySQL + - Added logic to handle an already encrypted password being sent in +""" + + +""" +Add to PAM configuration with: + auth required pam_python.so pam_dbauth.py + + +Requires configuration file, /etc/security/pam_dbauth.conf, +Example: + + [database] + host=localhost + user=myuser + password=mypass + db=myuser_db + port=XXXX + engine=mysqldb + ; engine=psycopg2 + ; engine=redis + + [query] + ; SQL Example + select_statement=select password from users where username=%s + + ; Redis example: + ; select_statement=users:%s:password + + ; ---------------------------------------------------------------- + ; Support forcing or defaulting hashtypes, + ; ONLY effective if stored password does not start with {hashtype}. + ; ---------------------------------------------------------------- + ; hashtype_force=sha1 + ; + ; ---------------------------------------------------------------- + ; Default type to be used if all auto-detection fails (unlikely) + ; ---------------------------------------------------------------- + ; hashtype_default=md5 + ; +""" + +import syslog +import hashlib +import base64 +import string +import sys +import traceback +import ConfigParser +from passlib.hash import mysql41 +import crypt + +config = ConfigParser.ConfigParser() +config.read('/etc/security/pam_dbauth_smtp.conf') + +dbengine=config.get('database','engine') +if dbengine == 'mysqldb': + import MySQLdb + dbengineClass=MySQLdb +elif dbengine == 'pyscopg2': + import psycopg2 + dbengineClass=psycopg2 +elif dbengine == 'redis': + import redis + dbengineClass=redis +else: + syslog.syslog ("pam_dbauth.py - Unknown or unspecified database engine") + sys.exit(1) + +def pam_sm_authenticate(pamh, flags, argv): + resp=pamh.conversation( + pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,"Password") + ) + + try: + user = pamh.get_user(None) + except pamh.exception, e: + return e.pam_result + if user == None: + return pamh.PAM_USER_UNKNOWN + + try: + def safeConfigGet(sect,key): + if config.has_option(sect,key): + return config.get(sect,key) + else: + None + + connargs={ + # Each engine has its own connection string type. + # perhaps I might abstract this further into a class, + # but for now, this module is light enough, that I + # simply won't bother. + 'mysqldb': { + 'host': safeConfigGet('database','host'), + 'user': safeConfigGet('database','user'), + 'passwd': safeConfigGet('database','password'), + 'port': int(safeConfigGet('database','port')), + 'db': safeConfigGet('database','db') + }, + 'pyscopg2': { + 'host': safeConfigGet('database','host'), + 'user': safeConfigGet('database','user'), + 'password': safeConfigGet('database','password'), + 'port': safeConfigGet('database','port'), + 'db': safeConfigGet('database','db') + }, + 'redis': { + 'host': safeConfigGet('database','host'), + 'password': safeConfigGet('database','password'), + 'port': safeConfigGet('database','port'), + 'db': safeConfigGet('database','db') + } + }[dbengine] + + # Filter out None vars. + for k in connargs.keys(): + if connargs[k] is None: + del connargs[k] + + # Connect to database... finally! + db=dbengineClass.connect( **connargs ) + + # Query the DB. + # All but Redis (so-far) are SQL-based... + if dbengine != 'redis': + cursor=db.cursor() + query=str(config.get('query','select_statement')).format(user) + #syslog.syslog ("query is " + query) + cursor.execute(query) + pass_raw=cursor.fetchone()[0] + else: + pass_raw=db.get(config.get('query','select_statement' % (user))) + + # Initalize pass_stored to pass_raw... we might change it + pass_stored=pass_raw + + # We search for a {} section containing the hashtype + htindex=string.find(pass_raw,"}") + if htindex > 0: + # password contained a hashtype + hashtype=pass_raw[1:htindex] + # Remove the hashtype indicator + pass_stored=pass_raw[htindex:] + elif config.has_option('query','hashtype_force'): + # if a hashtype is forced on us + hashtype=config.get('query','hashtype_force') + elif len(pass_raw) == 16: + # assume 16-byte length is md5 + hashtype='md5' + elif len(pass_raw) == 20: + # assume 20-byte length is sha-1 + hashtype='ssha1' + elif config.has_option('query','hashtype_default'): + # attempt to fall back... + hashtype=config.get('query','hashtype_default') + elif len(pass_raw) == 41: + # MySQL Password() function hash + hashtype='mysql_password_function' + elif pass_stored == resp.resp: # Perhaps an already encrypted password is being sent in like in the case of SMTP sasl auth... + return pamh.PAM_SUCCESS + elif pass_stored == crypt.crypt(resp.resp, "ehcp"): + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("Unable to determine hash type... the length is " + str(len(pass_raw))) + return pamh.PAM_SERVICE_ERR + + if hashtype != 'mysql_password_function': + + pass_decoded=base64.b64decode(pass_stored) + + # Set the hashlib + hl={ + 'ssha1': hashlib.sha1(), + 'sha1': hashlib.sha1(), + 'md5': hashlib.md5(), + }[hashtype] + + pass_base=pass_decoded[:hl.digest_size] + pass_salt=pass_decoded[hl.digest_size:] + + hl.update(resp.resp) + hl.update(pass_salt) + + hashedrep = base64.b64encode(hl.digest()) + + if hl.digest() == pass_base: + #syslog.syslog ("pam-dbauth.py hashes match") + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("hashes do not match: " + hl.digest() + " not equal to " + pass_base) + pamh.PAM_AUTH_ERR + else: + if pass_stored == mysql41.encrypt(resp.resp): + #syslog.syslog ("pam-dbauth.py hashes match") + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("hashes do not match: " + hl.digest() + " not equal to " + pass_base) + pamh.PAM_AUTH_ERR + + except Exception,e: + #traceback.print_exc() + #syslog.syslog ("pam-dbauth.py exception triggered " + str(e)) + return pamh.PAM_SERVICE_ERR + + return pamh.PAM_SERVICE_ERR + +def pam_sm_setcred(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_acct_mgmt(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_open_session(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_close_session(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_chauthtok(pamh, flags, argv): + return pamh.PAM_SUCCESS + +#if __name__ == '__main__': +# pam_sm_authenticate(pamh, flags, argv): + + +""" + Author: Eric Windisch + Copyright: 2010, Eric Windisch , VPS Village + License: EPL v1.0 +""" + diff --git a/ehcp/etc/pam/pam_dbauth_smtp.pyc b/ehcp/etc/pam/pam_dbauth_smtp.pyc new file mode 100644 index 0000000..e459014 Binary files /dev/null and b/ehcp/etc/pam/pam_dbauth_smtp.pyc differ diff --git a/ehcp/etc/pam/pam_dbauth_vsftpd.conf b/ehcp/etc/pam/pam_dbauth_vsftpd.conf new file mode 100644 index 0000000..70bf1c8 --- /dev/null +++ b/ehcp/etc/pam/pam_dbauth_vsftpd.conf @@ -0,0 +1,14 @@ +[database] +host=localhost +user=ehcp +password={EHCP_DB_PASSWORD} +db=ehcp +port=3306 +engine=mysqldb +; engine=psycopg2 +; engine=redis + +[query] +; SQL Example +select_statement=select password from ftpaccounts where ftpusername='{0}' +;hashtype_force=sha1 diff --git a/ehcp/etc/pam/pam_dbauth_vsftpd.py b/ehcp/etc/pam/pam_dbauth_vsftpd.py new file mode 100644 index 0000000..4920e55 --- /dev/null +++ b/ehcp/etc/pam/pam_dbauth_vsftpd.py @@ -0,0 +1,243 @@ +# vim: noai:ts=2:sw=2:set expandtab: +# +# pam_dbauth.py +# Performs salted-hash authentication from a database +# +""" + Author: Eric Windisch + Copyright: 2010, Eric Windisch , VPS Village + License: EPL v1.0 + + Contributor: Eric Arnol-Martin + Added MySQL Password() Function Support + - Requires passlib (sudo pip install passlib) + - Fixed port integer bug MySQL + - Added logic to handle an already encrypted password being sent in +""" + + +""" +Add to PAM configuration with: + auth required pam_python.so pam_dbauth.py + + +Requires configuration file, /etc/security/pam_dbauth.conf, +Example: + + [database] + host=localhost + user=myuser + password=mypass + db=myuser_db + port=XXXX + engine=mysqldb + ; engine=psycopg2 + ; engine=redis + + [query] + ; SQL Example + select_statement=select password from users where username=%s + + ; Redis example: + ; select_statement=users:%s:password + + ; ---------------------------------------------------------------- + ; Support forcing or defaulting hashtypes, + ; ONLY effective if stored password does not start with {hashtype}. + ; ---------------------------------------------------------------- + ; hashtype_force=sha1 + ; + ; ---------------------------------------------------------------- + ; Default type to be used if all auto-detection fails (unlikely) + ; ---------------------------------------------------------------- + ; hashtype_default=md5 + ; +""" + +import syslog +import hashlib +import base64 +import string +import sys +import traceback +import ConfigParser +from passlib.hash import mysql41 + +config = ConfigParser.ConfigParser() +config.read('/etc/security/pam_dbauth_vsftpd.conf') + +dbengine=config.get('database','engine') +if dbengine == 'mysqldb': + import MySQLdb + dbengineClass=MySQLdb +elif dbengine == 'pyscopg2': + import psycopg2 + dbengineClass=psycopg2 +elif dbengine == 'redis': + import redis + dbengineClass=redis +else: + syslog.syslog ("pam_dbauth.py - Unknown or unspecified database engine") + sys.exit(1) + +def pam_sm_authenticate(pamh, flags, argv): + resp=pamh.conversation( + pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,"Password") + ) + + try: + user = pamh.get_user(None) + except pamh.exception, e: + return e.pam_result + if user == None: + return pamh.PAM_USER_UNKNOWN + + try: + def safeConfigGet(sect,key): + if config.has_option(sect,key): + return config.get(sect,key) + else: + None + + connargs={ + # Each engine has its own connection string type. + # perhaps I might abstract this further into a class, + # but for now, this module is light enough, that I + # simply won't bother. + 'mysqldb': { + 'host': safeConfigGet('database','host'), + 'user': safeConfigGet('database','user'), + 'passwd': safeConfigGet('database','password'), + 'port': int(safeConfigGet('database','port')), + 'db': safeConfigGet('database','db') + }, + 'pyscopg2': { + 'host': safeConfigGet('database','host'), + 'user': safeConfigGet('database','user'), + 'password': safeConfigGet('database','password'), + 'port': safeConfigGet('database','port'), + 'db': safeConfigGet('database','db') + }, + 'redis': { + 'host': safeConfigGet('database','host'), + 'password': safeConfigGet('database','password'), + 'port': safeConfigGet('database','port'), + 'db': safeConfigGet('database','db') + } + }[dbengine] + + # Filter out None vars. + for k in connargs.keys(): + if connargs[k] is None: + del connargs[k] + + # Connect to database... finally! + db=dbengineClass.connect( **connargs ) + + # Query the DB. + # All but Redis (so-far) are SQL-based... + if dbengine != 'redis': + cursor=db.cursor() + query=str(config.get('query','select_statement')).format(user) + #syslog.syslog ("query is " + query) + cursor.execute(query) + pass_raw=cursor.fetchone()[0] + else: + pass_raw=db.get(config.get('query','select_statement' % (user))) + + # Initalize pass_stored to pass_raw... we might change it + pass_stored=pass_raw + + # We search for a {} section containing the hashtype + htindex=string.find(pass_raw,"}") + if htindex > 0: + # password contained a hashtype + hashtype=pass_raw[1:htindex] + # Remove the hashtype indicator + pass_stored=pass_raw[htindex:] + elif config.has_option('query','hashtype_force'): + # if a hashtype is forced on us + hashtype=config.get('query','hashtype_force') + elif len(pass_raw) == 16: + # assume 16-byte length is md5 + hashtype='md5' + elif len(pass_raw) == 20: + # assume 20-byte length is sha-1 + hashtype='ssha1' + elif config.has_option('query','hashtype_default'): + # attempt to fall back... + hashtype=config.get('query','hashtype_default') + elif len(pass_raw) == 41: + # MySQL Password() function hash + hashtype='mysql_password_function' + elif pass_stored == resp.resp: # Perhaps an already encrypted password is being sent in like in the case of SMTP sasl auth... + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("Unable to determine hash type... the length is " + str(len(pass_raw))) + return pamh.PAM_SERVICE_ERR + + if hashtype != 'mysql_password_function': + + pass_decoded=base64.b64decode(pass_stored) + + # Set the hashlib + hl={ + 'ssha1': hashlib.sha1(), + 'sha1': hashlib.sha1(), + 'md5': hashlib.md5(), + }[hashtype] + + pass_base=pass_decoded[:hl.digest_size] + pass_salt=pass_decoded[hl.digest_size:] + + hl.update(resp.resp) + hl.update(pass_salt) + + hashedrep = base64.b64encode(hl.digest()) + + if hl.digest() == pass_base: + #syslog.syslog ("pam-dbauth.py hashes match") + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("hashes do not match: " + hl.digest() + " not equal to " + pass_base) + pamh.PAM_AUTH_ERR + else: + if pass_stored == mysql41.encrypt(resp.resp): + #syslog.syslog ("pam-dbauth.py hashes match") + return pamh.PAM_SUCCESS + else: + #syslog.syslog ("hashes do not match: " + hl.digest() + " not equal to " + pass_base) + pamh.PAM_AUTH_ERR + + except Exception,e: + #traceback.print_exc() + #syslog.syslog ("pam-dbauth.py exception triggered " + str(e)) + return pamh.PAM_SERVICE_ERR + + return pamh.PAM_SERVICE_ERR + +def pam_sm_setcred(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_acct_mgmt(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_open_session(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_close_session(pamh, flags, argv): + return pamh.PAM_SUCCESS + +def pam_sm_chauthtok(pamh, flags, argv): + return pamh.PAM_SUCCESS + +#if __name__ == '__main__': +# pam_sm_authenticate(pamh, flags, argv): + + +""" + Author: Eric Windisch + Copyright: 2010, Eric Windisch , VPS Village + License: EPL v1.0 +""" + diff --git a/ehcp/etc/phpmyadmin/phpmyadmin_default_conf b/ehcp/etc/phpmyadmin/phpmyadmin_default_conf new file mode 100644 index 0000000..b6914b7 --- /dev/null +++ b/ehcp/etc/phpmyadmin/phpmyadmin_default_conf @@ -0,0 +1,53 @@ + diff --git a/ehcp/etc/phpmyadmin/phpmyadmin_default_main_conf b/ehcp/etc/phpmyadmin/phpmyadmin_default_main_conf new file mode 100644 index 0000000..52bae98 --- /dev/null +++ b/ehcp/etc/phpmyadmin/phpmyadmin_default_main_conf @@ -0,0 +1,161 @@ + 0){ + $cfg['Servers'][1]['AllowRoot'] = TRUE; + } + +?> diff --git a/ehcp/etc/phpmyadmin/rootip_whitelist_functions.php b/ehcp/etc/phpmyadmin/rootip_whitelist_functions.php new file mode 100644 index 0000000..a1a4c82 --- /dev/null +++ b/ehcp/etc/phpmyadmin/rootip_whitelist_functions.php @@ -0,0 +1,29 @@ += 16 && $secOct <=32){ + return true; + } + + if($firstOct == '192' && $secOct == '168'){ + return true; + } + } + + return false; + } +?> diff --git a/ehcp/etc/postfix/main.cf.sample b/ehcp/etc/postfix/main.cf.sample new file mode 100755 index 0000000..009d65a --- /dev/null +++ b/ehcp/etc/postfix/main.cf.sample @@ -0,0 +1,69 @@ +# See /usr/share/postfix/main.cf.dist for a commented, more complete version + + +# Debian specific: Specifying a file name will cause the first +# line of that file to be used as the name. The Debian default +# is /etc/mailname. +#myorigin = /etc/mailname + +smtpd_banner = $myhostname ESMTP $mail_name powered by Easy Hosting Control Panel (ehcp) on Ubuntu, www.ehcp.net +biff = no + +# appending .domain is the MUA's job. +append_dot_mydomain = no + +# Uncomment the next line to generate "delayed mail" warnings +#delay_warning_time = 4h + +readme_directory = /usr/share/doc/postfix + +# TLS parameters +smtpd_tls_cert_file = /etc/postfix/smtpd.cert +smtpd_tls_key_file = /etc/postfix/smtpd.key +smtpd_use_tls = yes +smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache +smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache + +# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for +# information on enabling SSL in the smtp client. + +myhostname = me +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases +myorigin = /etc/mailname +mydestination = localhost +relayhost = +mynetworks = 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/16, 10.0.0.0/8, 192.168.1.0/24, [::1]/128 +mailbox_size_limit = 0 +recipient_delimiter = + +inet_interfaces = all +html_directory = /usr/share/doc/postfix/html +virtual_alias_domains = +virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf +transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf +virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf +virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf +virtual_mailbox_base = /home/vmail +virtual_uid_maps = static:5000 +virtual_gid_maps = static:5000 +smtpd_sasl_auth_enable = yes +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_client_access hash:/var/lib/pop-before-smtp/hosts,reject_unauth_destination +smtp_use_tls = yes +smtpd_tls_auth_only = no +smtpd_tls_CAfile = /etc/postfix/cacert.pem +smtpd_tls_loglevel = 1 +smtpd_tls_received_header = yes +smtpd_tls_session_cache_timeout = 3600s +tls_random_source = dev:/dev/urandom +virtual_create_maildirsize = yes +virtual_mailbox_extended = yes +virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf +virtual_mailbox_limit_override = yes +virtual_maildir_limit_message = "The user you are trying to reach is over quota." +virtual_overquota_bounce = yes +debug_peer_list = +sender_canonical_maps = +debug_peer_level = 1 +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $mynetworks $virtual_mailbox_limit_maps $transport_maps diff --git a/ehcp/extplorer/CHANGELOG.txt b/ehcp/extplorer/CHANGELOG.txt new file mode 100755 index 0000000..2a55a4e --- /dev/null +++ b/ehcp/extplorer/CHANGELOG.txt @@ -0,0 +1,328 @@ +**************************** +Changelog for eXtplorer +Version $Id: CHANGELOG.txt 246 2016-02-10 21:21:12Z soeren $ +**************************** +--- version 2.1.9 --- +- fixed PHP 7 compatibility issues + +--- version 2.1.8 --- +- added security functions for protection against CSRF attacks +- fixed "directories with the name '0' are not loading" + +--- version 2.1.7 --- +- fixed SWFUpload against XSS vulnerabilities +- fixed XSS vulnerability in file list + + +--- version 2.1.6 --- +- fixed https usage for ports other than 443 +- fixed XSS issue related to PHP_SELF +- added date range filtering to file search +- simplified search function +- fixed scrambled non-ASCII file names on UTF-8 systems + +--- version 2.1.5 --- +- fixed doubled subdirectories in directory tree +- fixed wrong Joomla path detection (security issue on some systems) + +--- version 2.1.4 --- +- fixed security issues found by Trustwave SpiderLabs, Vikas Singhal +- update to the latest version of Archive_Tar +- fixed version check link, now points to extplorer.net + +--- version 2.1.3 --- +- fixed serious login vulnerability reported by Brendan Coles of itsecuritysolutions.org (the only changed file is /include/users.php) + +--- version 2.1.2 --- +- hide the top and bottom bar in J! 3.0 +- fixed installer for J! 2.5 + +--- version 2.1.1 --- +- Joomla! 3.0 compatibility + +--- version 2.1.0 --- + +- fixed an XSS-vulnerability (impact: medium, users needs to be logged in) + +--- version 2.1.0 RC5 released --- + +- fixed password change functionality + +--- version 2.1.0 RC4 released --- + +- updated version check to work with J! 1.7 +- implemented PHPass Library for more secure hashing of passwords: http://www.openwall.com/phpass/ (backwards compatible with previous md5 hashing method) +- updated to ExtJS 3.4.0 (brings support for IE9) +- fixed file-disclosure issue reported by colonelxc@users.sourceforge.net +- support for files with non-ascii chars for editing (thanks gr8ron) +- fixed a fatal error in the webdav module +- added ability to load without fetchscript.php (when it's inaccessible due to server permission problems) + +--- version 2.1.0 RC3 released --- + +- fixed filesize for files > 2GB +- works and installs on Joomla! 1.6 now + +--- version 2.1.0 RC2 released --- + +- updated to ExtJS 3.3.1 +- fixed Flash Upload +- updated to SWFUPload 2.5 beta +- fixed deprecated warnings because of ereg functions +- fixed some FTP file operations (upload, copy, move, delete) +- fixed visibility of user form fields (form appeared empty) +- fixed editable file types detection (+ added .ini) + +--- version 2.1.0 RC1 released --- +- finally added the File Diff Feature +- added RAR extraction feature +- updated to ExtJS 3.2.1 +- only editable files are shown in source view now, viewing all other files will lead to a redirected to "download" +- PDF files now open inline in an iframe + +--- version 2.1.0 beta6 released --- +- updated to ExtJS 3.0.3 + +--- version 2.1.0 beta5 released --- + +- added nice slide-in message box for success messages +- removed deprecated ZIP library + +--- version 2.1.0 beta4 released --- + +- changed Save/Reopen/Cancel buttons in Edit View to appear in the top toolbar +- changed directory drop-down lists to a vista-like location bar +- new: Flash Upload! Using SWFUploadPanel +- added pluggable authentication system + +--- version 2.1.0 beta3 released --- + +- changed default state of "Show Directories" to enabled +- changed Edit Window to appear in a new Tab per File +- assigned Keyboard Events to the Grid (Delete, Ctrl-A, Ctrl-C, Ctrl-X) +- updated to ExtJS3 RC2 +- updated EditArea to version 0.8.1.1 (loads faster and is more stable) + +--- version 2.1.0 beta released --- + +- allowing Download by users with "view" permission +- updated Services-JSON class to version 0.9.0 +- updated GeSHi to version 1.0.8.3 +- moved from ExtJS 1.1 to ExtJS 2.2 + +-- version 2.0.1 released (2009-01-15) ---- + +- added script for WebDAV access (disabled by default, requires 2 database tables and DB login credentials) +- fixed a security issue within script initialization + +-- version 2.0.0 stable released (2008-08-05) ---- + +- added .csv to the editable file types +- when copying/moving multiple directories, only the first directory was processed +- fixed failing extraction of larger archives ("Failed to connect to the server") +- updated Editarea to 0.7.1.3 +- fixed browsing & working on external FTP servers +- fixed dirselectors not working in FTP mode +- fixed file-mode switch link + +-- version 2.0.0 RC4 released (2008-05-31) ---- + +- fixed installation package for Joomla! 1.5 +- added Danish Language Files (thanks to Ronny Buelund!) + +-- version 2.0.0 RC3 released (2008-05-31) ---- + +- [ 1944163 ] In germanf.php fehlt ein Eintrag +- fixed compatibility problem with JomComment+MyBlog (Services_JSON was redeclared) +- switched from "Codepress" to "EditArea" (http://www.cdolivet.net/index.php?page=editArea), which gives a lot of advantages: + * faster loading of large files + * built-in toggle feature + * built-in Find, Search+Replace and Jump-To-Line Features + +-- version 2.0.0 RC3 released (2008-05-26) ---- + +- fixed Cross-Site Scripting & File Disclosure Vulnerability +- fixed MimeType detection for search results + +-- version 2.0.0 RC2 released (2008-02-10) ---- + +- fixed Standalone scripts.zip extraction error +- re-added System Info (moved to "About" Window) +- implemented basic UTF-8 support for file mode +- changed [ 1800028 ] Need to enlarge file edit box, or allow for full screen +- fixed [ 1791706 ] incorrect error reporting +- fixed [ 1790536 ] Browsing directory incorrect +- fixed [ 1782937 ] when unzipping a zip containing a zip: zip not present! + +-- version 2.0.0 RC1 released ---- + +- fixed [ 1755938 ] status bar messages truncated when path is too long +- fixed [ 1759450 ] No textfield and browse button in upload file on IE7 +- fixed [ 1762000 ] copy a file from a subfolder to "root" folder doesn't work +- fixed [ 1766233 ] Chmod error in FTP mode +- fixed [ 1761083 ] IE7 closing button & seach action (file search - subdirectories weren't included) + +--- version 2.0.0 beta5 released ---- + +- added Swedish and Slovenian Language Files +- set "zip" as default archive type +- added message box that prevents eXtplorer usage on Joomla! 1.0.x versions >= 1.0.13 and explains why. +- added Joomla! version check +- implemented some changes for compatibility on Windows Systems with IIS running + +--- version 2.0.0 beta4 released ---- + +- fixed header-only problems on Mambo/Joomla! < 1.0.10 +- added Server-to-Server transfer capabilities (using fopen, cURL or fsockopen) +- fixed [#6092] Some strings remained hardcoded +- fixed [ 1754755 ] Save button when uploading file not translated +- fixed the Frontend Browsing part (when being used as a Joomla! component) +- updated finnish and french language file +- updated ExtJS to 1.1 RC1, included Konqueror Patch +- fixed [ 1752904 ] error on admin dialog opening +- fixed [ 1752901 ] Combo on Login page doesn't work in IE6 and 7 +- fixed [ 1752534 ] Non-static method ext_Lang::msg() +- removed dialog_status from onHide function for the dialog +- fixed bugs in the language files with undefined properties of non-existant var $_VERSION +- fixed bug with undefined var $acl + +--- version 2.0.0 beta4 released ---- + +- fixed a bug which caused that a maximum of 50 directories in the same level were listed in the tree, not all +- fixed a bug with CodePress - didn't allow to edit files (when used in Joomla!) +- added a check to the standalone version to extract the contents of the file "scripts.zip" online and throw a warning if it doesn't succeed. +- removed the status bar from the Dialogs, moved the status bat into the Paging Toolbar +- added CSS styles to make the dropdown lists smaller + +--- version 2.0.0 beta3 released ---- + +- re-activated User Management for the stand-alone version +- fixed a critical error which caused deletion of directories although "Cancel" was clicked +- fixed an error which prevented correct listing of numeric directories/files + +--- version 2.0.0 beta2 released ---- +- added double-click action which opens the Context Menu in the grid (Opera and Konqueror don't allow custom right-click menus) +- applied patches to ExtJS to allow usage with Konqueror +- added new ext_Lang class to be able to escape quotes and line endings for using it in JavaScript Strings +- fixed node context menu displaying outside of view +- added the fetchscript.php file to bundle and compress javascript and stylesheet files + (Sending compressed js and css files significantly reduces the download size for ExtJS) + +--- version 2.0.0 beta1 released ---- + +- fixed the "symlink points to target which can't be accessed" problem +- fixed "out of memory" problems +- directory names changed (no directories starting with a '.' anymore now) +- completely changed layout: directory tree, file grid with renaming, context menu, drag&drop +- added the ExtJS 1.0.1a library + + +--- version 1.6.0 released ---- + +- archives do not contain the whole file path anymore now, but only the relative one +- added possibility to specify a directory where an archive file is saved to (allows to create archives even when the currenty directory is not writable) +- added the great CodePress Sytnax Highlighting Editor (http://codepress.fermads.net/) +- removed the extra spaces in the directory path +- fixed the "Strict Standards" error (non-static method called statically) + +--- version 1.5.1 released ---- + +- added ftp logout function to allow different ftp logins during one admin session +- added possibility to specify an FTP host name and port (other than localhost:21) +- bookmark functionality fixes (thanks to pokemon!) +- fixed a critical error where wrong permissions would be applied to an uploaded file in FTP mode + (leading to a 403 error on some servers) + +--- version 1.5.0 released --- + +- changed the way errors are displayed (+nice styling). +- added support for *symbolic links*. You can create and delete links, but not change the target. You will have to create a new link to do so. + +- eXtplorer is an FTP client now! - added PEAR'S Net_FTP package to allow local FTP access/transactions + +- changed Archiving Section to ajax-based step-by-step system to prevent time-outs +- added PEAR Package File_Archive to allow better archive handling +- changed file links in the directory list to "Edit" or "Download" +- added a simple file-based bookmark system +- changed the download function to allow larger downloads (100MB+) +- replaced hardcoded english strings with new variables (thanks to Paulino Michelazzo!) + +--- version 1.4.0 released --- + +- added a new "View File" feature to dispay a file's source code with GeSHi syntax highlighting + +- checking now, if a remembered directory exists (it might have been deleted meanwhile) +- added line number / column monitoring on the "Edit file" form + it also allows to jump to a certain line number +- added feature to allow overwriting existing files on upload +- fixed directory chmod issues + Details: when running a *chmod* command on files and directories + with permissions that do not include "execute", directories would become inaccessible (e.g. d--------- (root). Tip by John, thanks!) +- added basic frontend directory browsing and file download feature (not comparable to Docman or ReMOSitory, + it's just a directory browser, no descriptions, no download counter!) + !DISABLED BY DEFAULT! + Enable by editing the file + /components/com_extplorer/configuration.jx.php + +--- version 1.3.3 released --- + +- fixed a wrong image source (menu_divider.gif => png) +- fixed a fatal error when using eXtplorer on installations with the SafeMode hack +- added Bulgarian language (thanks to Ivo Apostolov) +- fixed download problems under Mambo 4.5.2.3 with gzip compression = On + + +--- version 1.3.2 released --- + +- fixed various problems (create file/directory, archiving, download) with $mosConfig_absolute_path + + +--- version 1.3.1 released --- + +- last visited directory is stored in the session for quick go-back +- updated finnish language +- added Icelandic language +- fixed an error which caused icons not to display + in directories outside of the Joomla/Mambo root directory + +--- version 1.3.0 released --- + +- the home directory is now ONE LEVEL ABOVE the joomla/mambo directory. + If you have joomla inside + /public_html/ + You will be able to browse to the root directory + / + ! Check if you want this behaviour. When not, see /config/conf.php line 41.... +- created archives don't contain the full path anymore, but the relative path from the mosConfig_absolute_path +- converted transparent .png to .gif +- removed the IE transparency fix, which caused IE to slow down (really long load times!) +- updated the language files +- "Chmod", "Edit" and "Delete" links are not active now, when the file is not chmodable, writable or deletable +- delete alert box will display the name of the file that is to be deleted +- added a checkbox to chmod form, so the user can decide wether to chmod rescursively or not +- added a rename feature +- current user ID and group ID (on a *nix OS) are displayed correctly now +- component name changed to "eXtplorer" + +--- version 1.2.1 released --- + +- bug fix: File Upload Icon is grey although file uploads are allowed +- bug fix: [#4944] mamboXplorer strips \r\n to just rn +- added Unzip / Unarchive Feature (Feature Request #6171) + to unpack archive types: zip, gz, bz2 + directly on your webspace. +- fix for the PNG Fix. + +--- version 1.2a released --- + +- new language variables + more languages +- nice X - Icon for components Menu. thanks to Michael! +- added PNG transparency fix for IE +- added Owner / Group information to File List +- bug fix: "$ok @cmod" changed to "$ok = @chmod" + +--- version 1.2 released --- +- removed full path from Archive ( tar.gz /bzip2 Archive Creation) +- added ability to change permissions recursiveley through all subdirectories + +--- version 1.1 released --- diff --git a/ehcp/extplorer/LICENSE_GPL.txt b/ehcp/extplorer/LICENSE_GPL.txt new file mode 100755 index 0000000..a73f8ba --- /dev/null +++ b/ehcp/extplorer/LICENSE_GPL.txt @@ -0,0 +1,359 @@ +GNU GENERAL PUBLIC LICENSE + 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +Linking Joomla! statically or dynamically with other modules is making +a combined work based on Joomla!. Thus, the terms and conditions of +the GNU General Public License cover the whole combination. + +In addition, as a special exception, the copyright holders of Joomla! +give you permission to combine Joomla! with free software programs or +libraries that are released under the GNU LGPL and with independent +extensions that communicate with Joomla! solely through the Joomla! +extension interface. You may copy and distribute such a system following +the terms of the GNU GPL for Joomla! and the licenses of the extension, +even if you do not include the source code of that extension. + +Note that people who make modified versions of Joomla! are not +obligated to grant this special exception for their modified versions; +it is their choice whether to do so. The GNU General Public License +gives permission to release a modified version without this exception; +this exception also makes it possible to release a modified version +which carries forward this exception. diff --git a/ehcp/extplorer/LICENSE_MPL.txt b/ehcp/extplorer/LICENSE_MPL.txt new file mode 100755 index 0000000..d4e781b --- /dev/null +++ b/ehcp/extplorer/LICENSE_MPL.txt @@ -0,0 +1,469 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] \ No newline at end of file diff --git a/ehcp/extplorer/README.txt b/ehcp/extplorer/README.txt new file mode 100755 index 0000000..a29f309 --- /dev/null +++ b/ehcp/extplorer/README.txt @@ -0,0 +1,123 @@ +---------------------------------------------------------------------------------------------------- +eXtplorer 2.1 - README +---------------------------------------------------------------------------------------------------- + +Requirements: +------------------- +* PHP > 5.2 + +Supported Browsers: +------------------- +* Internet Explorer >= 8.0 +* Firefox >= 2 +* Safari >= 4 +* Google Chrome/Iron >= 3 +* Konqueror (KDE > 4.0) +* Opera 10.5+ + +Opera and Konqueror don't allow custom Context Menus. Use Double Click on a record in the grid instead. + +Installation as Standalone Script +------------------- + 1. Unpack the Archive (where this README.txt is contained) to a local directory + 2. Login to your server via FTP and create a subdirectory for eXtplorer + 3. Upload all eXtplorer files from your computer into the subdirectory on the server + 4. Browse to the URL http:/// and login. Remember to immediately change the admin password. + 5. If you can't change your admin password, this is most likely because the user file is not writable. With your FTP program browse to + the eXtplorer directory /config and make the file ".htusers.php" writable (CHMOD 666). + + Done. + +Installation into Joomla!/Mambo: +------------------- + 1. Login to Joomla!'s Administration Backend /administrator + 2. Go to "Components", "Install/Uninstall". + 3. Browse to the file "com_eXtplorer_xx.tar.gz" on your computer and click on "Upload File & Install". + + Done. + You can now access eXtplorer through "Components" => "eXtplorer" + + +License: +-------------------- +The software is dual-licensed and subject to the + - Mozilla Public License Version 1.1 (the "License") + or + - to the terms of the GNU General Public License Version 2 or later (the "GPL"); + +You may not use this software except in compliance with one of these Licenses. + +You may obtain a copy of the Mozilla Public License at http://www.mozilla.org/MPL/. +You may obtain a copy of the GNU General Public License at http://www.gnu.org/copyleft/gpl.html. + +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +License for the specific language governing rights and limitations under the License. + +Alternatively, the software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in +which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this software only +under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by +deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete +the provisions above, a recipient may use your version of this software under either the MPL or the GPL. + + +Credits: +-------------------- +eXtplorer is based on QuiXplorer 2.3.1 (available at http://quixplorer.sourceforge.net/). + +eXtplorer makes use of the fabulous ExtJS Javascript Library by Jack Slocum, Ext JS, LCC (http://extjs.com/), and that does indeed explain +the name eXtplorer. +Please note that ExtJS is released under the terms of the GNU General Public license version 3 (GPL v3). Because the MPL and +the GPL are not compliant to each other, you are not allowed to use the ExtJS library in eXtplorer if you decide to use and/or distribute eXtplorer +under the terms of the MPL. + + +---------------------------------------------------------------------------------------------------- +Facts, you should know of: +* If you're running in trouble, because you don't have permissions to chmod() or + write to files: That's a fact! Switch to FTP mode (or file mode if you're in ftp mode) +* eXtplorer is a multi-language Script. + The Language is automatically picked from the browser (or from the global language in Joomla!/Mambo) + +* eXtplorer comes with an User Management feature. As Joomla!/Mambo have their own framework, User Management isn't + available in non-standalone mode. +* All users must login to access eXtplorer. You can allow visitors to view files by creating a "guest" account with "View" permissions. + +* In Joomla!/Mambo the access to this script is restricted to Super Administrators by default. If you want to change this, + edit the file header of "admin.extplorer.php" and change the following: + **** + if (!$acl->acl_check( 'administration', 'config', 'users', $my->usertype )) { + mosRedirect( 'index2.php', _NOT_AUTH ); + } + **** + to something different. +---------------------------------------------------------------------------------------------------- + +Troubleshooting: + * Some browsers (e.g. Konqueror) may want to save a download as index.php. + To solve this, just supply the correct name when saving. + * Internet Explorer may behave strangely when downloading files. + If you open the php-file download, the real download window should open. + * Mozilla may add the extension 'php' to a file being downloaded. + Save as 'any file (*.*)' and remove the 'php' extension to get the proper name. + (NOTE: for php-files, this extension is correct) + * If you are unable to perform certain operations, + try using an FTP-chmod to set the directories to 755 and the files to 644. + * If you don't know the full name of a directory on your website, + you can use a php-script containing '' to get it. + * The Search Function uses PCRE regex syntax to search; though wildcards like * and ? + should work (like with 'ls' on Linux), it may show unexpected behaviour. + * User-management may logout unexpectedly or show other strange behaviour. + This is due to a bug in PHP 4.1.2; we would advise you to upgrade to a higher version. +---------------------------------------------------------------------------------------------------- +Users: + * You can easily magage users using the "admin" section of eXtplorer. + * Standard, there is only one user: "admin", with password "admin"; + you should change this password immediately. +---------------------------------------------------------------------------------------------------- +Languages: + * Users can select one of all available languages on login. +---------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------- +Developer: Soeren Eberhardt-Biermann +original author: the QuiX project +---------------------------------------------------------------------------------------------------- diff --git a/ehcp/extplorer/admin.extplorer.php b/ehcp/extplorer/admin.extplorer.php new file mode 100755 index 0000000..bb6134b --- /dev/null +++ b/ehcp/extplorer/admin.extplorer.php @@ -0,0 +1,227 @@ +=' )) { + $access = $my->authorise('core.admin'); + } else { + $access = $my->usertype == 'Super Administrator'; + } + + if (!$access) { + $url = htmlspecialchars($_SERVER['PHP_SELF']); + if (headers_sent()) { + echo "\n"; + } else { + @ob_end_clean(); // clear output buffer + header( 'HTTP/1.1 403 Forbidden' ); + header( "Location: ". $url ); + } + } +} + +/** Needed to keep the filelist in the XML installer file up-to-date +$path = dirname(__FILE__); +$filelist = extReadDirectory( $path, '.', true, true ); +$contents =''; +foreach($filelist as $file ) { + if( is_dir( $file ) || strstr(dirname($file), "scripts" )) continue; + $filepath = str_replace( $path.'/', '', $file ); + $contents .= ''.$filepath."\n"; +} +file_put_contents( 'extplorer_filelist.txt', $contents ); +*/ +//------------------------------------------------------------------------------ +if(!isset($action) || empty($action)){ + unset($_SESSION['dirCurrentlyInPath']); +} + +if( $action == "post" ) + $action = extGetParam( $_REQUEST, "do_action" ); +elseif( empty( $action )) + $action = "list"; + +if(isset($_SESSION['dirCurrentlyInPath'])){ + $dir = $_SESSION['dirCurrentlyInPath']; +} + +//die($dir); +if( $action != 'show_error') { + ext_Result::init(); +} + +if( defined( '_LOGIN_REQUIRED')) return; + +// Empty the output buffer if this is a XMLHttpRequest +if( ext_isXHR() ) { + error_reporting(0); + while( @ob_end_clean() ); +} + +if( file_exists( _EXT_PATH . '/include/'. strtolower(basename( $action )) .'.php') ) { + require_once( _EXT_PATH . '/include/'. strtolower(basename( $action )) .'.php'); +} +$classname = 'ext_'.$action; +if( class_exists(strtolower($classname)) && is_callable(array($classname,'execaction'))) { + $handler = new $classname(); + $handler->execAction( $dir, $item ); +} else { + + switch($action) { // Execute actions, which are not in class file + + //------------------------------------------------------------------------------ + // COPY/MOVE FILE(S)/DIR(S) + case "copy": case "move": + require_once( _EXT_PATH ."/include/copy_move.php" ); + ext_copy_move_items($dir); + break; + + //------------------------------------------------------------------------------ + // SEARCH FOR FILE(S)/DIR(S) + case "search": + require_once( _EXT_PATH ."/include/search.php" ); + ext_search_items($dir); + break; + + //------------------------------------------------------------------------------ + // USER-ADMINISTRATION + case "admin": + require_once( _EXT_PATH . "/include/admin.php" ); + ext_show_admin($dir); + break; + + //------------------------------------------------------------------------------ + // BOOKMARKS + case 'modify_bookmark': + $task = extGetParam( $_REQUEST, 'task' ); + require_once( _EXT_PATH.'/include/bookmarks.php' ); + ext_modify_bookmark( $task, $dir ); + + break; + //------------------------------------------------------------------------------ + case 'show_error': + ext_Result::sendResult('', false, ''); + break; + case'get_about': + require_once( _EXT_PATH . "/include/system_info.php" ); + system_info(); + break; + //------------------------------------------------------------------------------ + // DEFAULT: LIST FILES & DIRS + case "getdircontents": + require_once( _EXT_PATH . "/include/list.php" ); + $node = extGetParam( $_REQUEST, 'node' ); + $dirPost = extGetParam( $_REQUEST, 'dir' ); + + if(empty($dirPost) && !empty($node)){ + $requestedDir = stripslashes(str_replace( '_RRR_', '/', $node)); + } + + if(empty($node) && !empty($dirPost)){ + $requestedDir = stripslashes(str_replace( 'ext_root', '', $dirPost)); + } + + //die($requestedDir . " is " . $dir); + if( empty($requestedDir) || $requestedDir == 'ext_root') { + $requestedDir = ""; + } + $dir = $requestedDir; + $_SESSION['dirCurrentlyInPath'] = $dir; + //die($requestedDir . " is " . $dir); + send_dircontents( $requestedDir, extGetParam($_REQUEST,'sendWhat','files') ); + break; + case 'get_dir_selects': + echo get_dir_selects( $dir ); + break; + case 'chdir_event': + require_once( _EXT_PATH.'/include/bookmarks.php' ); + $response = Array( 'bookmarks' => ext_list_bookmarks($dir) ); + $classname = class_exists('ext_Json') ? 'ext_Json' : 'Services_JSON'; + $json = new $classname(); + echo $json->encode( $response ); + break; + case 'get_image': + require_once( _EXT_PATH . "/include/view.php" ); + ext_View::sendImage( $dir, $item ); + case 'ftp_authentication': + case 'ssh2_authentication': + case 'extplorer_authentication': + $auth_info = explode('_', $action); + $auth_classname = 'ext_'.$action; + require_once(_EXT_PATH.'/include/authentication/'.$auth_info[0].'.php'); + $auth_plugin = new $auth_classname(); + $auth_plugin->onShowLoginForm(); + break; + default: + require_once( _EXT_PATH . "/include/list.php" ); + ext_List::execAction($dir); + //------------------------------------------------------------------------------ + } +// end switch-statement +} +//------------------------------------------------------------------------------ +// Disconnect from ftp server +if( ext_isFTPMode() && is_object($GLOBALS['FTPCONNECTION']) ) { + $GLOBALS['FTPCONNECTION']->disconnect(); +} + +// Empty the output buffer if this is a XMLHttpRequest +if( ext_isXHR() ) { + ext_exit(); +} diff --git a/ehcp/extplorer/application.php b/ehcp/extplorer/application.php new file mode 100755 index 0000000..d421509 --- /dev/null +++ b/ehcp/extplorer/application.php @@ -0,0 +1,185 @@ + $lang) { + if(strpos($_AL, $K)===0) + return file_exists( _EXT_PATH.'/languages/'.$lang.'.php' ) ? $lang : $default; + } + + // Try to detect any language if not yet detected', + foreach($GLOBALS['_LANG'] as $K => $lang) { + if(strpos($_AL, $K)!==false) + return file_exists( _EXT_PATH.'/languages/'.$lang.'.php' ) ? $lang : $default; + } + foreach($GLOBALS['_LANG'] as $K => $lang) { + if(preg_match("/[\[\( ]{$K}[;,_\-\)]/",$_UA)) + return file_exists( _EXT_PATH.'/languages/'.$lang.'.php' ) ? $lang : $default; + } + + // Return default language if language is not yet detected', + return $default; + } +} +// Define all available languages', +// WARNING: uncomment all available languages + +$GLOBALS['_LANG'] = array( +'af' => 'afrikaans', +'ar' => 'arabic', +'bg' => 'bulgarian', +'ca' => 'catalan', +'cs' => 'czech', +'da' => 'danish', +'de' => 'german', +'el' => 'greek', +'en' => 'english', +'es' => 'spanish', +'et' => 'estonian', +'fi' => 'finnish', +'fr' => 'french', +'gl' => 'galician', +'he' => 'hebrew', +'hi' => 'hindi', +'hr' => 'croatian', +'hu' => 'hungarian', +'id' => 'indonesian', +'it' => 'italian', +'ja' => 'japanese', +'ko' => 'korean', +'ka' => 'georgian', +'lt' => 'lithuanian', +'lv' => 'latvian', +'ms' => 'malay', +'nl' => 'dutch', +'no' => 'norwegian', +'pl' => 'polish', +'pt' => 'portuguese', +'ro' => 'romanian', +'ru' => 'russian', +'sk' => 'slovak', +'sl' => 'slovenian', +'sq' => 'albanian', +'sr' => 'serbian', +'sv' => 'swedish', +'th' => 'thai', +'tr' => 'turkish', +'uk' => 'ukrainian', +'zh-tw' => 'traditional_chinese', +'zh-cn' => 'simplified_chinese' +); diff --git a/ehcp/extplorer/config/.htaccess b/ehcp/extplorer/config/.htaccess new file mode 100755 index 0000000..e019832 --- /dev/null +++ b/ehcp/extplorer/config/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/ehcp/extplorer/config/.htusers.php b/ehcp/extplorer/config/.htusers.php new file mode 100755 index 0000000..93764b6 --- /dev/null +++ b/ehcp/extplorer/config/.htusers.php @@ -0,0 +1,8 @@ + diff --git a/ehcp/extplorer/config/bookmarks_extplorer_.php b/ehcp/extplorer/config/bookmarks_extplorer_.php new file mode 100755 index 0000000..80b2b79 --- /dev/null +++ b/ehcp/extplorer/config/bookmarks_extplorer_.php @@ -0,0 +1,2 @@ +; +Home= diff --git a/ehcp/extplorer/config/conf.php b/ehcp/extplorer/config/conf.php new file mode 100755 index 0000000..9eb6107 --- /dev/null +++ b/ehcp/extplorer/config/conf.php @@ -0,0 +1,69 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/config/mimes.php b/ehcp/extplorer/config/mimes.php new file mode 100755 index 0000000..1eb8afa --- /dev/null +++ b/ehcp/extplorer/config/mimes.php @@ -0,0 +1,106 @@ + array(extGetParam( $GLOBALS["mimes"], 'dir', 'Dir' ),"extension/folder.png"), + "exe" => array(extGetParam( $GLOBALS["mimes"], 'exe', 'exe' ),"extension/exe.png",".exe", ".com", ".bin"), + "file" => array(extGetParam( $GLOBALS["mimes"], 'file', 'file' ),"extension/document.png") +); +$GLOBALS["used_mime_types"]=array( + // text + "text" => array(extGetParam( $GLOBALS["mimes"], 'text', 'Text' ), "extension/txt.png", ".txt"), + + // programming + "php" => array(extGetParam( $GLOBALS["mimes"], 'php', 'php' ), "extension/php.png", ".php"), + "php3" => array(extGetParam( $GLOBALS["mimes"], 'php3', 'php3' ), "extension/php3.png", ".php3"), + "php4" => array(extGetParam( $GLOBALS["mimes"], 'php4', 'php4' ), "extension/php4.png", ".php4"), + "php5" => array(extGetParam( $GLOBALS["mimes"], 'php5', 'php5' ), "extension/php5.png", ".php5"), + "phtml" => array(extGetParam( $GLOBALS["mimes"], 'phtml', 'phtml' ), "extension/phtml.png", ".phtml"), + "inc" => array(extGetParam( $GLOBALS["mimes"], 'inc', 'inc' ), "extension/inc.png", ".inc"), + "sql" => array(extGetParam( $GLOBALS["mimes"], 'sql', 'SQL' ), "extension/sql.png", ".sql"), + "pl" => array(extGetParam( $GLOBALS["mimes"], 'pl', 'Perl' ), "extension/pl.png", ".pl"), + "cgi" => array(extGetParam( $GLOBALS["mimes"], 'cgi', 'CGI' ), "extension/cgi.png", ".cgi"), + "py" => array(extGetParam( $GLOBALS["mimes"], 'py', 'Python' ), "extension/py.png", ".py"), + "sh" => array(extGetParam( $GLOBALS["mimes"], 'sh', 'Shell' ), "extension/sh.png", ".sh"), + "c" => array(extGetParam( $GLOBALS["mimes"], 'c', 'C' ), "extension/c.png", ".c"), + "cc" => array(extGetParam( $GLOBALS["mimes"], 'cc', 'CC' ), "extension/cc.png", ".cc"), + "cpp" => array(extGetParam( $GLOBALS["mimes"], 'cpp', 'CPP' ), "extension/cpp.png", ".cpp"), + "cxx" => array(extGetParam( $GLOBALS["mimes"], 'cxx', 'CXX' ), "extension/cxx.png", ".cxx"), + "h" => array(extGetParam( $GLOBALS["mimes"], 'h', 'H' ), "extension/h.png", ".h"), + "hpp" => array(extGetParam( $GLOBALS["mimes"], 'hpp', 'hpp' ), "extension/hpp.png", ".hpp"), + "java" => array(extGetParam( $GLOBALS["mimes"], 'java', 'Java' ), "extension/java.png", ".java"), + "class" => array(extGetParam( $GLOBALS["mimes"], 'class', 'Class' ), "extension/class.png", ".class"), + "jar" => array(extGetParam( $GLOBALS["mimes"], 'jar', 'Jar' ), "extension/jar.png", ".jar"), + + // browser + "htm" => array(extGetParam( $GLOBALS["mimes"], 'htm', 'HTML' ), "extension/htm.png", ".htm"), + "html" => array(extGetParam( $GLOBALS["mimes"], 'html', 'HTML' ), "extension/html.png", ".html"), + "shtml" => array(extGetParam( $GLOBALS["mimes"], 'shtml', 'sHTML' ), "extension/shtml.png", ".shtml"), + "dhtml" => array(extGetParam( $GLOBALS["mimes"], 'dhtml', 'dHTML' ), "extension/dhtml.png", ".dhtml"), + "xhtml" => array(extGetParam( $GLOBALS["mimes"], 'xhtml', 'XHTML' ), "extension/xhtml.png", ".xhtml"), + "xml" => array(extGetParam( $GLOBALS["mimes"], 'xml', 'XML' ), "extension/xml.png", ".xml"), + "js" => array(extGetParam( $GLOBALS["mimes"], 'js', 'JS' ), "extension/js.png", ".js"), + "css" => array(extGetParam( $GLOBALS["mimes"], 'css', 'CSS' ), "extension/css.png", ".css"), + + // images + "gif" => array(extGetParam( $GLOBALS["mimes"], 'gif', 'GIF' ), "extension/gif.png", ".gif"), + "jpg" => array(extGetParam( $GLOBALS["mimes"], 'jpg', 'JPG' ), "extension/jpg.png", ".jpg"), + "jpeg" => array(extGetParam( $GLOBALS["mimes"], 'jpeg', 'JPEG' ), "extension/jpeg.png", ".jpeg"), + "bmp" => array(extGetParam( $GLOBALS["mimes"], 'bmp', 'Bitmap' ), "extension/bmp.png", ".bmp"), + "png" => array(extGetParam( $GLOBALS["mimes"], 'png', 'PNG' ), "extension/png.png", ".png"), + + // compressed + "zip" => array(extGetParam( $GLOBALS["mimes"], 'zip', 'ZIP' ), "extension/zip.png", ".zip"), + "tar" => array(extGetParam( $GLOBALS["mimes"], 'tar', 'TAR' ), "extension/tar.png", ".tar"), + "tgz" => array(extGetParam( $GLOBALS["mimes"], 'tgz', 'Tar/GZ' ), "extension/tgz.png", ".tgz"), + "gz" => array(extGetParam( $GLOBALS["mimes"], 'gz', 'GZip' ), "extension/gz.png", ".gz"), + + + "bz2" => array(extGetParam( $GLOBALS["mimes"], 'bz2', 'Bzip2' ), "extension/bz2.png", ".bz2"), + "tbz" => array(extGetParam( $GLOBALS["mimes"], 'tbz', 'Tar/Bz2' ), "extension/tbz.png", ".tbz"), + "rar" => array(extGetParam( $GLOBALS["mimes"], 'rar', 'RAR' ), "extension/rar.png", ".rar"), + + // music + "mp3" => array(extGetParam( $GLOBALS["mimes"], 'mp3', 'Mp3' ), "extension/mp3.png", ".mp3"), + "wav" => array(extGetParam( $GLOBALS["mimes"], 'wav', 'WAV' ), "extension/wav.png", ".wav"), + "midi" => array(extGetParam( $GLOBALS["mimes"], 'midi', 'Midi' ), "extension/midi.png", ".mid"), + "rm" => array(extGetParam( $GLOBALS["mimes"], 'real', 'Real Media' ), "extension/rm.png", ".rm"), + "ra" => array(extGetParam( $GLOBALS["mimes"], 'real', 'Real Audio' ), "extension/ra.png", ".ra"), + "ram" => array(extGetParam( $GLOBALS["mimes"], 'real', 'Real Media' ), "extension/ram.png", ".ram"), + "pls" => array(extGetParam( $GLOBALS["mimes"], 'pls', 'pls' ), "extension/pls.png", ".pls"), + "m3u" => array(extGetParam( $GLOBALS["mimes"], 'm3u', 'm3u' ), "extension/m3u.png", ".m3u"), + + // movie + "mpg" => array(extGetParam( $GLOBALS["mimes"], 'mpg', 'MPG' ), "extension/mpg.png", ".mpg"), + "mpeg" => array(extGetParam( $GLOBALS["mimes"], 'mpeg', 'MPG'), "extension/mpeg.png", ".mpeg"), + "mov" => array(extGetParam( $GLOBALS["mimes"], 'mov', 'MOV' ), "extension/mov.png", ".mov"), + "avi" => array(extGetParam( $GLOBALS["mimes"], 'avi', 'AVI' ), "extension/avi.png", ".avi"), + "swf" => array(extGetParam( $GLOBALS["mimes"], 'swf', 'SWF' ), "extension/swf.png", ".swf"), + + // Micosoft / Adobe + "doc" => array(extGetParam( $GLOBALS["mimes"], 'doc', 'Word' ), "extension/doc.png", ".doc"), + "docx" => array(extGetParam( $GLOBALS["mimes"], 'docx', 'Word' ), "extension/docx.png", ".docx"), + "xls" => array(extGetParam( $GLOBALS["mimes"], 'xls', 'Excel' ), "extension/xls.png", ".xls"), + "xlsx" => array(extGetParam( $GLOBALS["mimes"], 'xlsx', 'Excel' ), "extension/xlsx.png", ".xlsx"), + "rtf" => array(extGetParam( $GLOBALS["mimes"], 'rtf', 'Rich Text Format' ), "extension/doc.png", ".rtf"), + + "pdf" => array(extGetParam( $GLOBALS["mimes"], 'pdf', 'PDF' ), "extension/pdf.png", ".pdf") +); +//------------------------------------------------------------------------------ diff --git a/ehcp/extplorer/configuration.ext.php b/ehcp/extplorer/configuration.ext.php new file mode 100755 index 0000000..fbe60f7 --- /dev/null +++ b/ehcp/extplorer/configuration.ext.php @@ -0,0 +1,20 @@ + diff --git a/ehcp/extplorer/copyright b/ehcp/extplorer/copyright new file mode 100755 index 0000000..f428bf4 --- /dev/null +++ b/ehcp/extplorer/copyright @@ -0,0 +1,259 @@ +This package was debianized by Thomas Goirand on +Wed, 07 Oct 2009 10:45:22 +0800 + +It was downloaded from: +http://extplorer.sourceforge.net/ + +Upstream Author: + Soeren Eberhardt + +Other licenses: + eXtplorer embeds loads of libraries in its original upstream source + package. Some packages were even some PHP pear packages carying some + licenses that are usable in Debian only for PHP itself. That means + that, even if the license PHP 2.02 could work for a PEAR package in + the Debian distribution, this couldn't even in the Debian source + package of eXtplorer. + For this reason, the maintainers of this package decided to create a + +dfsg version of the upstream code deleting unwanted libraries. All + the libraries that could be packaged separately, outside of + eXtplorer have been totally removed using the available shell script + debian/create_dfsg_from_upstream that is to be run right after + extraction of the upstream binary. + + Here is a list of what has been removed from the upstream source, + once scripts.tar.gz has been extracted, together with the + corresponding Debian package: + + scripts/editarea: libjs-edit-are + scripts/extjs3: libjs-extjs + scripts/yui: libjs-yui + libraries/Auth, libraries/HTTP: php-auth-http + libraries/Console, libraries/PEAR.php, libraries/Tar.php + libraries/System.php: php-pear + libraries/geshi: php-geshi + libraries/compat.php41x.php, libraries/compat.php42x.php + libraries/compat.php50x.php: php-compat + libraries/JSON.php: php-services-json + libraries/MIME: php-mime-type + libraries/FTP.php, libraries/FTP: php-net-ftp + +Files: debian/*, Makefile +Copyright: (c) 2009, Thomas Goirand +License: LGPL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + USA + +On Debian systems, the complete text of the GNU Lesser General Public +License (LGPL) may be found in /usr/share/common-licenses/LGPL. + +Files: libraries/SSH2.php +Copyright: (c) 2008, Bas Weermann http://www.php.net/manual/de/function.ssh2-sftp.php#83174 + (c) 2009, Soeren Eberhardt +License: GPL-2, MPL 1.1 + + This file is derived from the work of Bas Weermann as published at: + http://www.php.net/manual/de/function.ssh2-sftp.php#83174 + +Copyright notice for the MPL 1.1: + The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + +You may obtain a copy of the License at http://www.mozilla.org/MPL/ + +Copyright notice for the GPL-2: + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General Public License +(GPL v2) may be found in /usr/share/common-licenses/GPL-2. + +Files: libraries/Archive/path.php, libraries/Archive/folder.php, +libraries/Archive/file.php, libraries/Archive/archive.php, +libraries/Archive/adapter/zip.php +Copyright: (C) 2005 - 2008 Open Source Matters. All rights reserved. + (c) 2009, Soeren Eberhardt +License: GPL + + These files are modified versions of the Joomla! Framework. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +File: libraries/inputfilter.php +Copyright: (c) Daniel Morris with contribution from: + (c) Gianpaolo Racca + (c) Ghislain Picard + (c) Marco Wandschneider + (c) Chris Tobin and Andrew Eddie + (c) Louis Landry + (c) 2007-2009, Soeren Eberhardt +License: GPL + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General Public License +(GPL) may be found in /usr/share/common-licenses/GPL. + +Files: webdav.php, webdav_authenticate.php +Copyright: (c) 2008-2009, Soeren Eberhardt + (c) 2008-2009, Vincent JAULIN +License: GPL-2 + + This is based on what can bind found here: + +http://blog.keyphrene.com/keyphrene/index.php/2006/09/16/9-how-to-install-a-webdav-server-in-php + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General Public License +(GPL v2) may be found in /usr/share/common-licenses/GPL-2. + +Files: libraries/lib_zip.php, include/admin.php, include/archive.php, +include/bookmarks.php, include/chmod.php, include/copy_move.php, +include/delete.php, include/download.php, include/edit.php, +include/extract.php, include/ftp_authentication.php, include/functions.php, +include/header.php, include/init.php, include/list.php, +include/login.php, include/mkitem.php, include/rename.php, +include/result.class.php, include/search.php, include/upload.php, +include/users.php, include/authentication/extplorer.php, +include/authentication/ftp.php, include/authentication/ssh2.php +admin.extplorer.php, extplorer.php, extplorer.init.php, +extplorer.list.php, index.php +Copyright: (c) 2003 The QuiX project + (c) 2009, Soeren Eberhardt +License: MPL, GPL + + The Initial Developer of the Original Code is The QuiX project, and is + released into a dual license. So eXtplorer is released under a dual-license: + You can choose wether you want to use eXtplorer under the Mozilla Public + License (MPL 1.1) or under the GNU General Public License (GNU/GPL). + + MPL 1.1: + The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + +You may obtain a copy of the License at http://www.mozilla.org/MPL/, or in +this package in /usr/share/doc/extplorer/LICENSE_MPL.txt + +Copyright notice for GPL: + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Files: * +Copyright: (c) 2009, Soeren Eberhardt +License: GPL-2, MPL 1.1 + +eXtplorer is released under a dual-license: You can choose wether you want to +use eXtplorer under the Mozilla Public License (MPL 1.1) or under the GNU +General Public License (GNU/GPL). + + MPL 1.1: + The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + +You may obtain a copy of the License at http://www.mozilla.org/MPL/, or in +this package in /usr/share/doc/extplorer/LICENSE_MPL.txt + + GPL-2: + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General Public License +(GPL v2) may be found in /usr/share/common-licenses/GPL-2. diff --git a/ehcp/extplorer/eXtplorer.ico b/ehcp/extplorer/eXtplorer.ico new file mode 100755 index 0000000..4d83ed6 Binary files /dev/null and b/ehcp/extplorer/eXtplorer.ico differ diff --git a/ehcp/extplorer/eric.php b/ehcp/extplorer/eric.php new file mode 100755 index 0000000..fb6c1f6 --- /dev/null +++ b/ehcp/extplorer/eric.php @@ -0,0 +1,5 @@ + diff --git a/ehcp/extplorer/extplorer.init.php b/ehcp/extplorer/extplorer.init.php new file mode 100755 index 0000000..475682f --- /dev/null +++ b/ehcp/extplorer/extplorer.init.php @@ -0,0 +1,102 @@ +". + $GLOBALS["messages"]["btnlogout"].""; + } + else { + $extra=NULL; + } + $GLOBALS['ERROR'] = $GLOBALS["error_msg"]["home"]; + } +} +if(!down_home($abs_dir)) { + ext_Result::sendResult('', false, $GLOBALS["dir"]." : ".$GLOBALS["error_msg"]["abovehome"]); + $dir = $GLOBALS['dir'] = $_SESSION['ext_dir'] = ''; + return false; +} +if(!is_dir($abs_dir) && !is_dir($abs_dir.$GLOBALS["separator"])) { + $GLOBALS['ERROR'] = $abs_dir." : ".$GLOBALS["error_msg"]["direxist"]; + $dir = $GLOBALS['dir'] = $_SESSION['ext_dir'] = ''; +} +//------------------------------------------------------------------------------ diff --git a/ehcp/extplorer/extplorer.j15.xml b/ehcp/extplorer/extplorer.j15.xml new file mode 100755 index 0000000..cc3a713 --- /dev/null +++ b/ehcp/extplorer/extplorer.j15.xml @@ -0,0 +1,475 @@ + + + + + eXtplorer + 15.03.2016 + soeren, QuiX Project + Soeren Eberhardt-Biermann, QuiX Project + GNU/GPL, alternative: MPL + info|at|extplorer.net + http://extplorer.net/ + 2.1.9 + eXtplorer Logo +

Successfully installed eXtplorer 

+ eXtplorer is a powerful File- and FTP/WebDAV Manager script. +
It allows +
  • Browsing Directories & Files,
  • +
  • Editing, Copying, Moving and Deleting files,
  • +
  • Searching, Uploading and Downloading files,
  • +
  • Creating new Files and Directories,
  • +
  • Creating and Extracting Archives with Files and Directories,
  • +
  • Changing file permissions (chmod)

and much more.

+ By default restricted to Superadministrators! + ]]>
+ + script.php + + configuration.ext.php + extplorer.php + extplorer.init.php + extplorer.list.php + + + + + CREATE TABLE IF NOT EXISTS `#__extwebdav_locks` ( + token varchar(255) NOT NULL default '', + path varchar(200) NOT NULL default '', + expires int(11) NOT NULL default '0', + owner varchar(200) default NULL, + recursive int(11) default '0', + writelock int(11) default '0', + exclusivelock int(11) NOT NULL default 0, + PRIMARY KEY (token), + UNIQUE KEY token (token), + KEY path (path), + KEY expires (expires) + ) ENGINE=MyISAM; + + CREATE TABLE IF NOT EXISTS `#__extwebdav_properties` ( + path varchar(255) NOT NULL default '', + name varchar(120) NOT NULL default '', + ns varchar(120) NOT NULL default 'DAV:', + value text, + PRIMARY KEY ( `ns` ( 100 ) , `path` ( 100 ) , `name` ( 50 ) ), + KEY path (path) + ) ENGINE=MyISAM; + + + + + + + DROP TABLE IF EXISTS `#__extwebdav_locks`; + DROP TABLE IF EXISTS `#__extwebdav_properties`; + + + install.extplorer.php + + eXtplorer + + scripts.tar.gz + CHANGELOG.txt + README.txt + admin.extplorer.php + application.php + config/.htaccess + config/.htusers.php + config/conf.php + config/index.html + config/mimes.php + eXtplorer.ico + fetchscript.php + ftp_tmp/index.html + images/_.gif + images/_accept.png + images/_admin.gif + images/_archive.png + images/_arrowdown.gif + images/_arrowup.gif + images/_bookmark_add.png + images/_cancel.png + images/_chmod.png + images/_down.png + images/_edit.png + images/_editcopy.png + images/_editdelete.png + images/_extract.gif + images/_extract.png + images/_filefind.png + images/_filenew.png + images/_folder_new.png + images/_fonts.png + images/_help.png + images/_home.gif + images/_home.png + images/_indicator.gif + images/_log_error.png + images/_logout.png + images/_messagebox_warning.png + images/_move.png + images/_reload.png + images/_remove.png + images/_rename.gif + images/_rename_.gif + images/_save.png + images/_up.png + images/_view.png + images/eXtplorer-horizontal2.png + images/eXtplorer_logo.png + images/extension/avi.png + images/extension/bmp.png + images/extension/bz2.png + images/extension/c.png + images/extension/cc.png + images/extension/cgi.png + images/extension/class.png + images/extension/cpp.png + images/extension/css.png + images/extension/cxx.png + images/extension/dhtml.png + images/extension/doc.png + images/extension/document.png + images/extension/docx.png + images/extension/exe.png + images/extension/folder.png + images/extension/fon.png + images/extension/gif.png + images/extension/gz.png + images/extension/h.png + images/extension/hpp.png + images/extension/htm.png + images/extension/html.png + images/extension/inc.png + images/extension/index.html + images/extension/jar.png + images/extension/java.png + images/extension/jpeg.png + images/extension/jpg.png + images/extension/js.png + images/extension/m3u.png + images/extension/midi.png + images/extension/mov.png + images/extension/mp3.png + images/extension/mpeg.png + images/extension/mpg.png + images/extension/pdf.png + images/extension/php.png + images/extension/php3.png + images/extension/php4.png + images/extension/php5.png + images/extension/phtml.png + images/extension/pl.png + images/extension/pls.png + images/extension/png.png + images/extension/py.png + images/extension/ra.png + images/extension/ram.png + images/extension/rar.png + images/extension/rm.png + images/extension/sh.png + images/extension/shtml.png + images/extension/sql.png + images/extension/swf.png + images/extension/tar.png + images/extension/tbz.png + images/extension/tgz.png + images/extension/txt.gif + images/extension/txt.png + images/extension/wav.png + images/extension/xhtml.png + images/extension/xls.png + images/extension/xlsx.png + images/extension/xml.png + images/extension/zip.png + images/index.html + images/x_icon.png + images/logo.gif + images/systeminfo.gif + include/.htaccess + include/admin.php + include/archive.php + include/authentication/extplorer.php + include/authentication/ftp.php + include/authentication/ssh2.php + include/bookmarks.php + include/chmod.php + include/copy_move.php + include/delete.php + include/diff.php + include/download.php + include/edit.php + include/extract.php + include/functions.php + include/header.php + include/index.html + include/init.php + include/list.php + include/login.php + include/mkitem.php + include/rename.php + include/result.class.php + include/search.php + include/system_info.php + include/transfer.php + include/upload.php + include/users.php + include/view.php + index.php + install.extplorer.php + languages/arabic.php + languages/arabic_mimes.php + languages/brazilian_portuguese.php + languages/brazilian_portuguese_mimes.php + languages/bulgarian.php + languages/bulgarian_mimes.php + languages/czech.php + languages/czech_mimes.php + languages/danish.php + languages/danish_mimes.php + languages/dutch.php + languages/dutch_mimes.php + languages/english.php + languages/english_mimes.php + languages/finnish.php + languages/finnish_mimes.php + languages/french.php + languages/french_mimes.php + languages/german.php + languages/german_mimes.php + languages/germanf.php + languages/germanf_mimes.php + languages/germani.php + languages/germani_mimes.php + languages/greek.php + languages/greek_mimes.php + languages/hungarian.php + languages/hungarian_mimes.php + languages/hungariani.php + languages/index.html + languages/islenska.php + languages/islenska_mimes.php + languages/italian.php + languages/italian_mimes.php + languages/japanese.php + languages/japanese_mimes.php + languages/norwegian.php + languages/norwegian_mimes.php + languages/polish.php + languages/polish_mimes.php + languages/portuguese.php + languages/portuguese_mimes.php + languages/romanian.php + languages/romanian_mimes.php + languages/russian.php + languages/russian_mimes.php + languages/simplified_chinese.php + languages/simplified_chinese_mimes.php + languages/slovenian.php + languages/slovenian_mimes.php + languages/spanish.php + languages/spanish_mimes.php + languages/swedish.php + languages/swedish_mimes.php + languages/traditional_chinese.php + languages/traditional_chinese_mimes.php + languages/turkish.php + languages/turkish_mimes.php + libraries/Archive/adapter/index.html + libraries/Archive/adapter/rar.php + libraries/Archive/adapter/zip.php + libraries/Archive/archive.php + libraries/Archive/file.php + libraries/Archive/folder.php + libraries/Archive/index.html + libraries/Archive/path.php + libraries/Auth/Auth.php + libraries/Auth/HTTP/HTTP.php + libraries/Console/Getopt.php + libraries/FTP.php + libraries/FTP/Observer.php + libraries/FTP/Socket.php + libraries/FTP/index.html + libraries/File_Operations.php + libraries/HTTP/WebDAV/Server.php + libraries/HTTP/WebDAV/Server/Filesystem.php + libraries/HTTP/WebDAV/Tools/_parse_lockinfo.php + libraries/HTTP/WebDAV/Tools/_parse_propfind.php + libraries/HTTP/WebDAV/Tools/_parse_proppatch.php + libraries/JSON.php + libraries/MIME/Parameter.php + libraries/MIME/Type.php + libraries/MIME/index.html + libraries/PasswordHash.php + libraries/PEAR.php + libraries/SSH2.php + libraries/System.php + libraries/Tar.php + libraries/Text/Diff.php + libraries/Text/TextEncoding.php + libraries/Text/Diff/Engine/native.php + libraries/Text/Diff/Engine/shell.php + libraries/Text/Diff/Engine/string.php + libraries/Text/Diff/Engine/xdiff.php + libraries/Text/Diff/Mapped.php + libraries/Text/Diff/Renderer.php + libraries/Text/Diff/Renderer/context.php + libraries/Text/Diff/Renderer/inline.php + libraries/Text/Diff/Renderer/unified.php + libraries/Text/Diff/ThreeWay.php + libraries/compat.php41x.php + libraries/compat.php42x.php + libraries/compat.php50x.php + libraries/geshi/geshi.php + libraries/geshi/geshi/abap.php + libraries/geshi/geshi/actionscript.php + libraries/geshi/geshi/actionscript3.php + libraries/geshi/geshi/ada.php + libraries/geshi/geshi/apache.php + libraries/geshi/geshi/applescript.php + libraries/geshi/geshi/apt_sources.php + libraries/geshi/geshi/asm.php + libraries/geshi/geshi/asp.php + libraries/geshi/geshi/autoit.php + libraries/geshi/geshi/avisynth.php + libraries/geshi/geshi/bash.php + libraries/geshi/geshi/basic4gl.php + libraries/geshi/geshi/bf.php + libraries/geshi/geshi/blitzbasic.php + libraries/geshi/geshi/bnf.php + libraries/geshi/geshi/boo.php + libraries/geshi/geshi/c.php + libraries/geshi/geshi/c_mac.php + libraries/geshi/geshi/caddcl.php + libraries/geshi/geshi/cadlisp.php + libraries/geshi/geshi/cfdg.php + libraries/geshi/geshi/cfm.php + libraries/geshi/geshi/cil.php + libraries/geshi/geshi/cobol.php + libraries/geshi/geshi/cpp-qt.php + libraries/geshi/geshi/cpp.php + libraries/geshi/geshi/csharp.php + libraries/geshi/geshi/css.php + libraries/geshi/geshi/d.php + libraries/geshi/geshi/dcs.php + libraries/geshi/geshi/delphi.php + libraries/geshi/geshi/diff.php + libraries/geshi/geshi/div.php + libraries/geshi/geshi/dos.php + libraries/geshi/geshi/dot.php + libraries/geshi/geshi/eiffel.php + libraries/geshi/geshi/email.php + libraries/geshi/geshi/fortran.php + libraries/geshi/geshi/freebasic.php + libraries/geshi/geshi/genero.php + libraries/geshi/geshi/gettext.php + libraries/geshi/geshi/glsl.php + libraries/geshi/geshi/gml.php + libraries/geshi/geshi/gnuplot.php + libraries/geshi/geshi/groovy.php + libraries/geshi/geshi/haskell.php + libraries/geshi/geshi/hq9plus.php + libraries/geshi/geshi/html4strict.php + libraries/geshi/geshi/idl.php + libraries/geshi/geshi/index.html + libraries/geshi/geshi/ini.php + libraries/geshi/geshi/inno.php + libraries/geshi/geshi/intercal.php + libraries/geshi/geshi/io.php + libraries/geshi/geshi/java.php + libraries/geshi/geshi/java5.php + libraries/geshi/geshi/javascript.php + libraries/geshi/geshi/kixtart.php + libraries/geshi/geshi/klonec.php + libraries/geshi/geshi/klonecpp.php + libraries/geshi/geshi/latex.php + libraries/geshi/geshi/lisp.php + libraries/geshi/geshi/locobasic.php + libraries/geshi/geshi/lolcode.php + libraries/geshi/geshi/lotusformulas.php + libraries/geshi/geshi/lotusscript.php + libraries/geshi/geshi/lscript.php + libraries/geshi/geshi/lsl2.php + libraries/geshi/geshi/lua.php + libraries/geshi/geshi/m68k.php + libraries/geshi/geshi/make.php + libraries/geshi/geshi/matlab.php + libraries/geshi/geshi/mirc.php + libraries/geshi/geshi/modula3.php + libraries/geshi/geshi/mpasm.php + libraries/geshi/geshi/mxml.php + libraries/geshi/geshi/mysql.php + libraries/geshi/geshi/nsis.php + libraries/geshi/geshi/oberon2.php + libraries/geshi/geshi/objc.php + libraries/geshi/geshi/ocaml-brief.php + libraries/geshi/geshi/ocaml.php + libraries/geshi/geshi/oobas.php + libraries/geshi/geshi/oracle11.php + libraries/geshi/geshi/oracle8.php + libraries/geshi/geshi/pascal.php + libraries/geshi/geshi/per.php + libraries/geshi/geshi/perl.php + libraries/geshi/geshi/php-brief.php + libraries/geshi/geshi/php.php + libraries/geshi/geshi/pic16.php + libraries/geshi/geshi/pixelbender.php + libraries/geshi/geshi/plsql.php + libraries/geshi/geshi/povray.php + libraries/geshi/geshi/powershell.php + libraries/geshi/geshi/progress.php + libraries/geshi/geshi/prolog.php + libraries/geshi/geshi/providex.php + libraries/geshi/geshi/python.php + libraries/geshi/geshi/qbasic.php + libraries/geshi/geshi/rails.php + libraries/geshi/geshi/rebol.php + libraries/geshi/geshi/reg.php + libraries/geshi/geshi/robots.php + libraries/geshi/geshi/ruby.php + libraries/geshi/geshi/sas.php + libraries/geshi/geshi/scala.php + libraries/geshi/geshi/scheme.php + libraries/geshi/geshi/scilab.php + libraries/geshi/geshi/sdlbasic.php + libraries/geshi/geshi/smalltalk.php + libraries/geshi/geshi/smarty.php + libraries/geshi/geshi/sql.php + libraries/geshi/geshi/tcl.php + libraries/geshi/geshi/teraterm.php + libraries/geshi/geshi/text.php + libraries/geshi/geshi/thinbasic.php + libraries/geshi/geshi/tsql.php + libraries/geshi/geshi/typoscript.php + libraries/geshi/geshi/vb.php + libraries/geshi/geshi/vbnet.php + libraries/geshi/geshi/verilog.php + libraries/geshi/geshi/vhdl.php + libraries/geshi/geshi/vim.php + libraries/geshi/geshi/visualfoxpro.php + libraries/geshi/geshi/visualprolog.php + libraries/geshi/geshi/whitespace.php + libraries/geshi/geshi/winbatch.php + libraries/geshi/geshi/xml.php + libraries/geshi/geshi/xorg_conf.php + libraries/geshi/geshi/xpp.php + libraries/geshi/geshi/z80.php + libraries/geshi/index.html + libraries/index.html + libraries/inputfilter.php + libraries/lib_zip.php + libraries/standalone.php + style/index.html + style/opacity.js + style/style.css + style/tablebg.gif + uploadhandler.php + webdav.php + webdav_authenticate.php +webdav_table.sql.php + + +
diff --git a/ehcp/extplorer/extplorer.j30.php b/ehcp/extplorer/extplorer.j30.php new file mode 100755 index 0000000..467afac --- /dev/null +++ b/ehcp/extplorer/extplorer.j30.php @@ -0,0 +1,2 @@ +"; + echo "  ..\n"; + echo "   "; + echo ""; + } + $i = 0; + + while(list($item,) = each($list)){ + if( $item == 'index.html') { + continue; + } + $abs_item=get_abs_item($dir,$item); + + $is_writable = is_writable( $abs_item ); + $is_chmodable = $GLOBALS['ext_File']->is_chmodable( $abs_item ); + $is_readable = is_readable( $abs_item ); + $is_deletable = $GLOBALS['ext_File']->is_deletable( $abs_item ); + + $file_info = @stat( $abs_item ); + + $is_file = false; + //if(is_link($abs_item)) $extra=" -> ".@readlink($abs_item); + if(@is_dir($abs_item)) { + $link = ext_make_link("list",get_rel_item($dir, $item),NULL); + } else { //if(get_is_editable($dir,$item) || get_is_image($dir,$item)) { + $link = ext_make_link("download",$dir,$item); + $is_file = true; + } //else $link = ""; + + $class = $i % 2 ? 'sectiontableentry1' : 'sectiontableentry2'; + + //echo "" + echo ''; + + // Icon + Link + echo ""; + if($is_readable) { + echo ""; + } + //else echo ""; + echo "\"\" "; + $s_item=$item; + if(strlen($s_item)>50) $s_item=substr($s_item,0,47)."..."; + $s_item = htmlspecialchars($s_item); + if( !$is_file ) { + echo ''.$s_item.''; + } + else { + echo $s_item; + } + if( $is_readable ) { + echo ""; // ...$extra... + } + echo "\n"; + // Size + echo "".parse_file_size(get_file_size($abs_item))."\n"; + // type + echo "".get_mime_type($abs_item, "type")."\n"; + // modified + echo "".parse_file_date(get_file_date($abs_item))."\n"; + + // actions + echo "\n"; + $i++; + } +} +//------------------------------------------------------------------------------ +// MAIN FUNCTION +function list_dir($dir) { // list directory contents + global $dir_up, $mosConfig_live_site, $_VERSION; + + $allow=($GLOBALS["permissions"]&01)==01; + $admin=((($GLOBALS["permissions"]&04)==04) || (($GLOBALS["permissions"]&02)==02)); + + $dir_up = dirname($dir); + if($dir_up==".") $dir_up = ""; + + if(!get_show_item($dir_up,basename($dir))) ext_Result::sendResult('', false, $dir." : ".$GLOBALS["error_msg"]["accessdir"]); + + // make file & dir tables, & get total filesize & number of items + make_tables($dir, $dir_list, $file_list, $tot_file_size, $num_items); + + + $dirs = explode( "/", $dir ); + $implode = ""; + $dir_links = ".. / "; + foreach( $dirs as $directory ) { + if( $directory != "" ) { + $implode .= $directory."/"; + $dir_links .= "$directory / "; + } + } + echo '
'.$GLOBALS["messages"]["actdir"].": ".$dir_links.'
'; + + // Sorting of items + $images = " \"^\""; + } else { + $_srt = "ASC"; $images .= "_arrowdown.gif\" alt=\"v\">"; + } + + // Toolbar + /*echo "
\n"; + + // Create File / Dir + + if($allow && is_writable($GLOBALS['home_dir'].'/'.$dir)) { + echo "\n"; + } + + echo "
\n"; + + // PARENT DIR + echo "\n"; + // HOME DIR + echo "\n"; + // RELOAD + echo "\n"; + // SEARCH + echo "\n"; + + echo ""; + + // Joomla Sysinfo + echo "\n"; + + echo ""; + + if($allow) { + // COPY + echo "\n"; + // MOVE + echo "\n"; + // DELETE + echo "\n"; + // CHMOD + echo "\n"; + // UPLOAD + if(ini_get("file_uploads")) { + echo "\n"; + } else { + echo "\n"; + } + // ARCHIVE + if($GLOBALS["zip"] || $GLOBALS["tar"] || $GLOBALS["tgz"]) { + echo "\n"; + } + } else { + // COPY + echo "\n"; + // MOVE + echo "\n"; + // DELETE + echo "\n"; + // UPLOAD + echo "\n"; + } + + // ADMIN & LOGOUT + if($GLOBALS["require_login"]) { + echo ""; + // ADMIN + if($admin) { + echo "\n"; + } + // LOGOUT + echo "\n"; + } + // Logo + echo "\n"; + + echo "
"; + if( $dir != "" ) { + echo ""; + echo ""; + } + echo ""; + echo "\"".$GLOBALS["messages"]["reloadlink"];"; + echo "\"|\""; + echo "\"|\"\"".$GLOBALS["messages"]["copylink"];\"".$GLOBALS["messages"]["movelink"];\"".$GLOBALS["messages"]["dellink"];\"chmod\""; + echo "\"".$GLOBALS["messages"]["uploadlink"];\"".$GLOBALS["messages"]["uploadlink"];\"".$GLOBALS["messages"]["comprlink"];\"".$GLOBALS["messages"]["copylink"]."\"\"".$GLOBALS["messages"]["movelink"]."\"\"".$GLOBALS["messages"]["dellink"]."\"\"".$GLOBALS["messages"]["uplink"];::"; + echo "\"".$GLOBALS["messages"]["adminlink"]."\""; + echo "\"".$GLOBALS["messages"]["logoutlink"]."\""; + //echo "
"; + echo "\"""; + //echo "
"; + echo "
\n
"; + echo "\n"; + echo ""; + echo "
\n"; + */ + // End Toolbar + + + // Begin Table + Form for checkboxes + echo"\n"; + echo "\n\n\n"; + + // make & print Table using lists + print_table($dir, make_list($dir_list, $file_list), $allow); + + // print number of items & total filesize + echo "\n"; + echo "\n"; + echo ""; + echo "\n
\n"; + if($GLOBALS["order"]=="name") $new_srt = $_srt; else $new_srt = "yes"; + echo "".$GLOBALS["messages"]["nameheader"]; + if($GLOBALS["order"]=="name") echo $images; + echo "\n"; + if($GLOBALS["order"]=="size") $new_srt = $_srt; else $new_srt = "yes"; + echo "".$GLOBALS["messages"]["sizeheader"]; + if($GLOBALS["order"]=="size") echo $images; + echo ""; + if($GLOBALS["order"]=="type") $new_srt = $_srt; else $new_srt = "yes"; + echo "".$GLOBALS["messages"]["typeheader"]; + if($GLOBALS["order"]=="type") echo $images; + echo ""; + if($GLOBALS["order"]=="mod") $new_srt = $_srt; else $new_srt = "yes"; + echo "".$GLOBALS["messages"]["modifheader"]; + if($GLOBALS["order"]=="mod") echo $images; + echo "

 ".$num_items." ".$GLOBALS["messages"]["miscitems"]." ".parse_file_size($tot_file_size)."  

\n"; + +} +//------------------------------------------------------------------------------ +?> diff --git a/ehcp/extplorer/extplorer.php b/ehcp/extplorer/extplorer.php new file mode 100755 index 0000000..3589a14 --- /dev/null +++ b/ehcp/extplorer/extplorer.php @@ -0,0 +1,88 @@ +'.$GLOBALS['ERROR'].''; + return; +} +if( !is_object( $database )) { + $database = JFactory::getDBO(); +} +$res = new StdClass(); +$database->setQuery( 'SELECT id, name FROM `#__menu` WHERE link LIKE \'%option=com_extplorer%\' ORDER BY `id` LIMIT 1'); +$database->loadObject( $res ); +if( is_object( $res ) && !empty( $res->name )) { + $name = $res->name; +} +else { + $name = ''; +} + +if( $name || $dir ) { + $mainframe->setPageTitle( $name.' - '.$dir ); +} +$action = extGetParam( $_REQUEST, 'action', 'list'); +$item = extGetParam( $_REQUEST, 'item', ''); + +// Here we allow *download* and *directory listing*, nothing more, nothing less +switch( $action ) { + case 'download': + require _EXT_PATH . "/include/download.php"; + ext_Download::execAction($dir, $item); + exit; + case 'list': + default: + list_dir($dir); + break; +} + +// A small nice footer. Remove if you don't want to give credit to the developer. +echo '
+ + powered by eXtplorer + + '; diff --git a/ehcp/extplorer/extplorer.xml b/ehcp/extplorer/extplorer.xml new file mode 100755 index 0000000..925c979 --- /dev/null +++ b/ehcp/extplorer/extplorer.xml @@ -0,0 +1,470 @@ + + + + eXtplorer + 15.03.2016 + soeren, QuiX Project + Soeren Eberhardt-Biermann, QuiX Project + info|-at|-extplorer.net + http://extplorer.net/ + 2.1.9 + eXtplorer Logo +

Successfully installed eXtplorer 

+ eXtplorer is a powerful File- and FTP/WebDAV Manager script. +
It allows +
  • Browsing Directories & Files,
  • +
  • Editing, Copying, Moving and Deleting files,
  • +
  • Searching, Uploading and Downloading files,
  • +
  • Creating new Files and Directories,
  • +
  • Creating and Extracting Archives with Files and Directories,
  • +
  • Changing file permissions (chmod)

and much more.

+ By default restricted to Superadministrators! + ]]>
+ + configuration.ext.php + extplorer.php + extplorer.init.php + extplorer.list.php + + + + CREATE TABLE IF NOT EXISTS `#__extwebdav_locks` ( + token varchar(255) NOT NULL default '', + path varchar(200) NOT NULL default '', + expires int(11) NOT NULL default '0', + owner varchar(200) default NULL, + recursive int(11) default '0', + writelock int(11) default '0', + exclusivelock int(11) NOT NULL default 0, + PRIMARY KEY (token), + UNIQUE KEY token (token), + KEY path (path), + KEY expires (expires) + ) TYPE=MyISAM + + CREATE TABLE IF NOT EXISTS `#__extwebdav_properties` ( + path varchar(255) NOT NULL default '', + name varchar(120) NOT NULL default '', + ns varchar(120) NOT NULL default 'DAV:', + value text, + PRIMARY KEY ( `ns` ( 100 ) , `path` ( 100 ) , `name` ( 50 ) ), + KEY path (path) + ) TYPE=MyISAM + + + + + + + DROP TABLE IF EXISTS `#__extwebdav_locks` + DROP TABLE IF EXISTS `#__extwebdav_properties` + + + install.extplorer.php + + eXtplorer + + scripts.tar.gz + CHANGELOG.txt + README.txt + admin.extplorer.php + application.php + config/.htaccess + config/.htusers.php + config/conf.php + config/index.html + config/mimes.php + eXtplorer.ico + fetchscript.php + ftp_tmp/index.html + images/_.gif + images/_accept.png + images/_admin.gif + images/_archive.png + images/_arrowdown.gif + images/_arrowup.gif + images/_bookmark_add.png + images/_cancel.png + images/_chmod.png + images/_down.png + images/_edit.png + images/_editcopy.png + images/_editdelete.png + images/_extract.gif + images/_extract.png + images/_filefind.png + images/_filenew.png + images/_folder_new.png + images/_fonts.png + images/_help.png + images/_home.gif + images/_home.png + images/_indicator.gif + images/_log_error.png + images/_logout.png + images/_messagebox_warning.png + images/_move.png + images/_reload.png + images/_remove.png + images/_rename.gif + images/_rename_.gif + images/_save.png + images/_up.png + images/_view.png + images/eXtplorer-horizontal2.png + images/eXtplorer_logo.png + images/extension/avi.png + images/extension/bmp.png + images/extension/bz2.png + images/extension/c.png + images/extension/cc.png + images/extension/cgi.png + images/extension/class.png + images/extension/cpp.png + images/extension/css.png + images/extension/cxx.png + images/extension/dhtml.png + images/extension/doc.png + images/extension/document.png + images/extension/docx.png + images/extension/exe.png + images/extension/folder.png + images/extension/fon.png + images/extension/gif.png + images/extension/gz.png + images/extension/h.png + images/extension/hpp.png + images/extension/htm.png + images/extension/html.png + images/extension/inc.png + images/extension/index.html + images/extension/jar.png + images/extension/java.png + images/extension/jpeg.png + images/extension/jpg.png + images/extension/js.png + images/extension/m3u.png + images/extension/midi.png + images/extension/mov.png + images/extension/mp3.png + images/extension/mpeg.png + images/extension/mpg.png + images/extension/pdf.png + images/extension/php.png + images/extension/php3.png + images/extension/php4.png + images/extension/php5.png + images/extension/phtml.png + images/extension/pl.png + images/extension/pls.png + images/extension/png.png + images/extension/py.png + images/extension/ra.png + images/extension/ram.png + images/extension/rar.png + images/extension/rm.png + images/extension/sh.png + images/extension/shtml.png + images/extension/sql.png + images/extension/swf.png + images/extension/tar.png + images/extension/tbz.png + images/extension/tgz.png + images/extension/txt.gif + images/extension/txt.png + images/extension/wav.png + images/extension/xhtml.png + images/extension/xls.png + images/extension/xlsx.png + images/extension/xml.png + images/extension/zip.png + images/index.html + images/x_icon.png + images/logo.gif + images/systeminfo.gif + include/.htaccess + include/admin.php + include/archive.php + include/authentication/extplorer.php + include/authentication/ftp.php + include/authentication/ssh2.php + include/bookmarks.php + include/chmod.php + include/copy_move.php + include/delete.php + include/diff.php + include/download.php + include/edit.php + include/extract.php + include/functions.php + include/header.php + include/index.html + include/init.php + include/list.php + include/login.php + include/mkitem.php + include/rename.php + include/result.class.php + include/search.php + include/system_info.php + include/transfer.php + include/upload.php + include/users.php + include/view.php + index.php + install.extplorer.php + languages/arabic.php + languages/arabic_mimes.php + languages/brazilian_portuguese.php + languages/brazilian_portuguese_mimes.php + languages/bulgarian.php + languages/bulgarian_mimes.php + languages/czech.php + languages/czech_mimes.php + languages/danish.php + languages/danish_mimes.php + languages/dutch.php + languages/dutch_mimes.php + languages/english.php + languages/english_mimes.php + languages/finnish.php + languages/finnish_mimes.php + languages/french.php + languages/french_mimes.php + languages/german.php + languages/german_mimes.php + languages/germanf.php + languages/germanf_mimes.php + languages/germani.php + languages/germani_mimes.php + languages/greek.php + languages/greek_mimes.php + languages/hungarian.php + languages/hungarian_mimes.php + languages/hungariani.php + languages/index.html + languages/islenska.php + languages/islenska_mimes.php + languages/italian.php + languages/italian_mimes.php + languages/japanese.php + languages/japanese_mimes.php + languages/norwegian.php + languages/norwegian_mimes.php + languages/polish.php + languages/polish_mimes.php + languages/portuguese.php + languages/portuguese_mimes.php + languages/romanian.php + languages/romanian_mimes.php + languages/russian.php + languages/russian_mimes.php + languages/simplified_chinese.php + languages/simplified_chinese_mimes.php + languages/slovenian.php + languages/slovenian_mimes.php + languages/spanish.php + languages/spanish_mimes.php + languages/swedish.php + languages/swedish_mimes.php + languages/traditional_chinese.php + languages/traditional_chinese_mimes.php + languages/turkish.php + languages/turkish_mimes.php + libraries/Archive/adapter/index.html + libraries/Archive/adapter/rar.php + libraries/Archive/adapter/zip.php + libraries/Archive/archive.php + libraries/Archive/file.php + libraries/Archive/folder.php + libraries/Archive/index.html + libraries/Archive/path.php + libraries/Auth/Auth.php + libraries/Auth/HTTP/HTTP.php + libraries/Console/Getopt.php + libraries/FTP.php + libraries/FTP/Observer.php + libraries/FTP/Socket.php + libraries/FTP/index.html + libraries/File_Operations.php + libraries/HTTP/WebDAV/Server.php + libraries/HTTP/WebDAV/Server/Filesystem.php + libraries/HTTP/WebDAV/Tools/_parse_lockinfo.php + libraries/HTTP/WebDAV/Tools/_parse_propfind.php + libraries/HTTP/WebDAV/Tools/_parse_proppatch.php + libraries/JSON.php + libraries/MIME/Parameter.php + libraries/MIME/Type.php + libraries/MIME/index.html + libraries/PasswordHash.php + libraries/PEAR.php + libraries/SSH2.php + libraries/System.php + libraries/Tar.php + libraries/Text/Diff.php + libraries/Text/TextEncoding.php + libraries/Text/Diff/Engine/native.php + libraries/Text/Diff/Engine/shell.php + libraries/Text/Diff/Engine/string.php + libraries/Text/Diff/Engine/xdiff.php + libraries/Text/Diff/Mapped.php + libraries/Text/Diff/Renderer.php + libraries/Text/Diff/Renderer/context.php + libraries/Text/Diff/Renderer/inline.php + libraries/Text/Diff/Renderer/unified.php + libraries/Text/Diff/ThreeWay.php + libraries/compat.php41x.php + libraries/compat.php42x.php + libraries/compat.php50x.php + libraries/geshi/geshi.php + libraries/geshi/geshi/abap.php + libraries/geshi/geshi/actionscript.php + libraries/geshi/geshi/actionscript3.php + libraries/geshi/geshi/ada.php + libraries/geshi/geshi/apache.php + libraries/geshi/geshi/applescript.php + libraries/geshi/geshi/apt_sources.php + libraries/geshi/geshi/asm.php + libraries/geshi/geshi/asp.php + libraries/geshi/geshi/autoit.php + libraries/geshi/geshi/avisynth.php + libraries/geshi/geshi/bash.php + libraries/geshi/geshi/basic4gl.php + libraries/geshi/geshi/bf.php + libraries/geshi/geshi/blitzbasic.php + libraries/geshi/geshi/bnf.php + libraries/geshi/geshi/boo.php + libraries/geshi/geshi/c.php + libraries/geshi/geshi/c_mac.php + libraries/geshi/geshi/caddcl.php + libraries/geshi/geshi/cadlisp.php + libraries/geshi/geshi/cfdg.php + libraries/geshi/geshi/cfm.php + libraries/geshi/geshi/cil.php + libraries/geshi/geshi/cobol.php + libraries/geshi/geshi/cpp-qt.php + libraries/geshi/geshi/cpp.php + libraries/geshi/geshi/csharp.php + libraries/geshi/geshi/css.php + libraries/geshi/geshi/d.php + libraries/geshi/geshi/dcs.php + libraries/geshi/geshi/delphi.php + libraries/geshi/geshi/diff.php + libraries/geshi/geshi/div.php + libraries/geshi/geshi/dos.php + libraries/geshi/geshi/dot.php + libraries/geshi/geshi/eiffel.php + libraries/geshi/geshi/email.php + libraries/geshi/geshi/fortran.php + libraries/geshi/geshi/freebasic.php + libraries/geshi/geshi/genero.php + libraries/geshi/geshi/gettext.php + libraries/geshi/geshi/glsl.php + libraries/geshi/geshi/gml.php + libraries/geshi/geshi/gnuplot.php + libraries/geshi/geshi/groovy.php + libraries/geshi/geshi/haskell.php + libraries/geshi/geshi/hq9plus.php + libraries/geshi/geshi/html4strict.php + libraries/geshi/geshi/idl.php + libraries/geshi/geshi/index.html + libraries/geshi/geshi/ini.php + libraries/geshi/geshi/inno.php + libraries/geshi/geshi/intercal.php + libraries/geshi/geshi/io.php + libraries/geshi/geshi/java.php + libraries/geshi/geshi/java5.php + libraries/geshi/geshi/javascript.php + libraries/geshi/geshi/kixtart.php + libraries/geshi/geshi/klonec.php + libraries/geshi/geshi/klonecpp.php + libraries/geshi/geshi/latex.php + libraries/geshi/geshi/lisp.php + libraries/geshi/geshi/locobasic.php + libraries/geshi/geshi/lolcode.php + libraries/geshi/geshi/lotusformulas.php + libraries/geshi/geshi/lotusscript.php + libraries/geshi/geshi/lscript.php + libraries/geshi/geshi/lsl2.php + libraries/geshi/geshi/lua.php + libraries/geshi/geshi/m68k.php + libraries/geshi/geshi/make.php + libraries/geshi/geshi/matlab.php + libraries/geshi/geshi/mirc.php + libraries/geshi/geshi/modula3.php + libraries/geshi/geshi/mpasm.php + libraries/geshi/geshi/mxml.php + libraries/geshi/geshi/mysql.php + libraries/geshi/geshi/nsis.php + libraries/geshi/geshi/oberon2.php + libraries/geshi/geshi/objc.php + libraries/geshi/geshi/ocaml-brief.php + libraries/geshi/geshi/ocaml.php + libraries/geshi/geshi/oobas.php + libraries/geshi/geshi/oracle11.php + libraries/geshi/geshi/oracle8.php + libraries/geshi/geshi/pascal.php + libraries/geshi/geshi/per.php + libraries/geshi/geshi/perl.php + libraries/geshi/geshi/php-brief.php + libraries/geshi/geshi/php.php + libraries/geshi/geshi/pic16.php + libraries/geshi/geshi/pixelbender.php + libraries/geshi/geshi/plsql.php + libraries/geshi/geshi/povray.php + libraries/geshi/geshi/powershell.php + libraries/geshi/geshi/progress.php + libraries/geshi/geshi/prolog.php + libraries/geshi/geshi/providex.php + libraries/geshi/geshi/python.php + libraries/geshi/geshi/qbasic.php + libraries/geshi/geshi/rails.php + libraries/geshi/geshi/rebol.php + libraries/geshi/geshi/reg.php + libraries/geshi/geshi/robots.php + libraries/geshi/geshi/ruby.php + libraries/geshi/geshi/sas.php + libraries/geshi/geshi/scala.php + libraries/geshi/geshi/scheme.php + libraries/geshi/geshi/scilab.php + libraries/geshi/geshi/sdlbasic.php + libraries/geshi/geshi/smalltalk.php + libraries/geshi/geshi/smarty.php + libraries/geshi/geshi/sql.php + libraries/geshi/geshi/tcl.php + libraries/geshi/geshi/teraterm.php + libraries/geshi/geshi/text.php + libraries/geshi/geshi/thinbasic.php + libraries/geshi/geshi/tsql.php + libraries/geshi/geshi/typoscript.php + libraries/geshi/geshi/vb.php + libraries/geshi/geshi/vbnet.php + libraries/geshi/geshi/verilog.php + libraries/geshi/geshi/vhdl.php + libraries/geshi/geshi/vim.php + libraries/geshi/geshi/visualfoxpro.php + libraries/geshi/geshi/visualprolog.php + libraries/geshi/geshi/whitespace.php + libraries/geshi/geshi/winbatch.php + libraries/geshi/geshi/xml.php + libraries/geshi/geshi/xorg_conf.php + libraries/geshi/geshi/xpp.php + libraries/geshi/geshi/z80.php + libraries/geshi/index.html + libraries/index.html + libraries/inputfilter.php + libraries/lib_zip.php + libraries/standalone.php + style/index.html + style/opacity.js + style/style.css + style/tablebg.gif + uploadhandler.php + webdav.php + webdav_authenticate.php +webdav_table.sql.php + + +
\ No newline at end of file diff --git a/ehcp/extplorer/fetchscript.php b/ehcp/extplorer/fetchscript.php new file mode 100755 index 0000000..1778771 --- /dev/null +++ b/ehcp/extplorer/fetchscript.php @@ -0,0 +1,274 @@ += '4.0.4pl1' && ( strpos($useragent,'compatible') !== false || strpos($useragent,'Gecko') !== false ) ) { + // Check for gzip header or norton internet securities + if ( ( $gzip_check || isset( $_SERVER['---------------']) ) && $zlib_check && $gz_check && !$zlibO_check ) { + // You cannot specify additional output handlers if + // zlib.output_compression is activated here + ob_start( 'ob_gzhandler' ); + + return; + } + } else if ( $phpver > '4.0' ) { + if ( $gzip_check ) { + + if ( $zlib_check ) { + $do_gzip_compress = TRUE; + ob_start(); + ob_implicit_flush(0); + + header( 'Content-Encoding: gzip' ); + return; + } + } + } + } + ob_start(); +} + +/** +* Perform GZIP +* @author Mambo / Joomla! project +*/ +function doGzip() { + global $do_gzip_compress; + if ( $do_gzip_compress ) { + /** + *Borrowed from php.net! + */ + $gzip_contents = ob_get_contents(); + ob_end_clean(); + + $gzip_size = strlen($gzip_contents); + $gzip_crc = crc32($gzip_contents); + + $gzip_contents = gzcompress($gzip_contents, 9); + $gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4); + + echo "\x1f\x8b\x08\x00\x00\x00\x00\x00"; + echo $gzip_contents; + echo pack('V', $gzip_crc); + echo pack('V', $gzip_size); + } else { + ob_end_flush(); + } +} + +/** +* This function fixes the URLs used in the CSS file +* This is necessary, because this file is (usually) located somewhere else than the CSS file! That makes +* relative URL references point to wrong directories - so we need to fix that! +*/ +function cssUrl( $refs ) { + + $ref = $refs[1]; + + $subdir = $GLOBALS['subdir']; + $ref = str_replace( "'", '', stripslashes( $ref )); + $ref = trim( str_replace( '"', '', $ref) ); + // Absolute References don't need to be fixed + if( substr( $ref, 0, 4 ) == 'http' ) { + return 'url( "'. $ref.'" )'; + } + + chdir( dirname( __FILE__ ).'/'.$subdir ); + $ref = str_replace( dirname( __FILE__ ), '', realpath( $ref )); + $ref = str_replace( "\\", '/', $ref ); + + return 'url( "'. substr( $ref, 1 ).'" )'; + +} +/** + * Checks and sets HTTP headers for conditional HTTP requests + * Borrowed from DokuWiki (/lib/exe/fetch.php) + * @author Simon Willison + * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet + */ +function http_conditionalRequest($timestamp){ + // A PHP implementation of conditional get, see + // http://fishbowl.pastiche.org/archives/001132.html + $last_modified = gmdate( 'D, d M Y H:i:s', $timestamp ) . ' GMT'; + $etag = '"'.md5($last_modified).'"'; + // Send the headers + header("Last-Modified: $last_modified"); + header("ETag: $etag"); + // See if the client has provided the required headers + $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? + stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : + false; + $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? + stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : + false; + if (!$if_modified_since && !$if_none_match) { + return; + } + // At least one of the headers is there - check them + if ($if_none_match && $if_none_match != $etag) { + return; // etag is there but doesn't match + } + if ($if_modified_since && $if_modified_since != $last_modified) { + return; // if-modified-since is there but doesn't match + } + // Nothing has changed since their last request - serve a 304 and exit + header('HTTP/1.0 304 Not Modified'); + exit; +} + +initGzip(); + +$base_dir = dirname( __FILE__ ); +$subdirs = @$_GET['subdir']; +if( !is_array( $subdirs ) && !empty( $subdirs )) { + $subdirs = array( $subdirs ); +} + +$files = @$_GET['file']; +if( !is_array( $files ) && !empty( $files )) { + $files = array( $files ); +} +if( empty( $files ) || sizeof($files) != sizeof( $subdirs )) { + header("HTTP/1.0 400 Bad Request"); + echo 'Bad request'; + exit; +} +$countFiles = sizeof($files); +$newest_mdate = 0; + +for( $i = 0; $i < $countFiles; $i++ ) { + if( empty( $files[$i] )) continue; + $file = $files[$i]; + $subdir = $subdirs[$i]; + + $dir = realpath( $base_dir . '/' . $subdir ); + $file = $dir . '/' . basename( $file ); + + if( !file_exists( $file ) || (!stristr( $dir, $base_dir ) && !stristr( $dir, "/usr/share/javascript") && !stristr( $dir, "/usr/share/yui")) ) { + if( $countFiles == 1 ) { + header("HTTP/1.0 404 Not Found"); + echo 'Not Found'; + exit; + } + continue; + } + $newest_mdate = max( filemtime( $file ), $newest_mdate ); +} + +// This function quits the page load if the browser has a cached version of the requested script. +// It then returns a 304 Not Modified header +http_conditionalRequest( $newest_mdate ); + +// here we need to send the script or stylesheet +$processed_files = 0; +for( $i = 0; $i < $countFiles; $i++ ) { + $file = addslashes($files[$i]);// fix by colonelxc + $subdir = $subdirs[$i]; + + $dir = realpath( $base_dir . '/' . $subdir ); + $file = $dir . '/' . basename( $file ); + if( !file_exists( $file ) || (!stristr( $dir, $base_dir ) && !stristr( $dir, "/usr/share/javascript") && !stristr( $dir, "/usr/share/yui")) || !is_readable( $file )) { + continue; + } + $processed_files++; + $fileinfo = pathinfo( $file ); + switch ( $fileinfo['extension']) { + case 'css': + $mime_type = 'text/css'; + header( 'Content-Type: '.$mime_type.';'); + $css = implode( '', file( $file )); + $GLOBALS['subdir'] = $subdir; + $str_css = preg_replace_callback("/url\((.+?)\)/i", 'cssUrl', $css); + echo $str_css; + + break; + + case 'js': + $mime_type = 'application/x-javascript'; + header( 'Content-Type: '.$mime_type.';'); + + readfile( $file ); + + break; + + default: + continue; + + } +} +if( $processed_files == 0 ) { + if( !file_exists( $file ) ) { + header("HTTP/1.0 404 Not Found"); + echo 'Not Found'; + exit; + } + if( !is_readable( $file ) ) { + header("HTTP/1.0 500 Internal Server Error"); + echo "Could not read ".basename($file)." - bad permissions?"; + exit; + } +} +// Tell the user agent to cache this script/stylesheet for an hour +$age = 3600; +header( 'Expires: '.gmdate( 'D, d M Y H:i:s', time()+ $age ) . ' GMT' ); +header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', @filemtime( $file ) ) . ' GMT' ); +header( 'Cache-Control: public, max-age='.$age.', must-revalidate, post-check=0, pre-check=0' ); +header( 'Pragma: public' ); + +doGzip(); + +exit; + +?> \ No newline at end of file diff --git a/ehcp/extplorer/ftp_tmp/index.html b/ehcp/extplorer/ftp_tmp/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/ftp_tmp/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/images/_.gif b/ehcp/extplorer/images/_.gif new file mode 100755 index 0000000..f44a942 Binary files /dev/null and b/ehcp/extplorer/images/_.gif differ diff --git a/ehcp/extplorer/images/_accept.png b/ehcp/extplorer/images/_accept.png new file mode 100755 index 0000000..3e5a300 Binary files /dev/null and b/ehcp/extplorer/images/_accept.png differ diff --git a/ehcp/extplorer/images/_admin.gif b/ehcp/extplorer/images/_admin.gif new file mode 100755 index 0000000..04d2319 Binary files /dev/null and b/ehcp/extplorer/images/_admin.gif differ diff --git a/ehcp/extplorer/images/_archive.png b/ehcp/extplorer/images/_archive.png new file mode 100755 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/extplorer/images/_archive.png differ diff --git a/ehcp/extplorer/images/_arrowdown.gif b/ehcp/extplorer/images/_arrowdown.gif new file mode 100755 index 0000000..1191cc5 Binary files /dev/null and b/ehcp/extplorer/images/_arrowdown.gif differ diff --git a/ehcp/extplorer/images/_arrowup.gif b/ehcp/extplorer/images/_arrowup.gif new file mode 100755 index 0000000..b7c7db6 Binary files /dev/null and b/ehcp/extplorer/images/_arrowup.gif differ diff --git a/ehcp/extplorer/images/_bookmark_add.png b/ehcp/extplorer/images/_bookmark_add.png new file mode 100755 index 0000000..95105ad Binary files /dev/null and b/ehcp/extplorer/images/_bookmark_add.png differ diff --git a/ehcp/extplorer/images/_cancel.png b/ehcp/extplorer/images/_cancel.png new file mode 100755 index 0000000..a432b49 Binary files /dev/null and b/ehcp/extplorer/images/_cancel.png differ diff --git a/ehcp/extplorer/images/_chmod.png b/ehcp/extplorer/images/_chmod.png new file mode 100755 index 0000000..ef0b030 Binary files /dev/null and b/ehcp/extplorer/images/_chmod.png differ diff --git a/ehcp/extplorer/images/_down.png b/ehcp/extplorer/images/_down.png new file mode 100755 index 0000000..e7c0197 Binary files /dev/null and b/ehcp/extplorer/images/_down.png differ diff --git a/ehcp/extplorer/images/_edit.png b/ehcp/extplorer/images/_edit.png new file mode 100755 index 0000000..b6000a7 Binary files /dev/null and b/ehcp/extplorer/images/_edit.png differ diff --git a/ehcp/extplorer/images/_editcopy.png b/ehcp/extplorer/images/_editcopy.png new file mode 100755 index 0000000..182804a Binary files /dev/null and b/ehcp/extplorer/images/_editcopy.png differ diff --git a/ehcp/extplorer/images/_editdelete.png b/ehcp/extplorer/images/_editdelete.png new file mode 100755 index 0000000..d33c344 Binary files /dev/null and b/ehcp/extplorer/images/_editdelete.png differ diff --git a/ehcp/extplorer/images/_extract.gif b/ehcp/extplorer/images/_extract.gif new file mode 100755 index 0000000..fb7e53e Binary files /dev/null and b/ehcp/extplorer/images/_extract.gif differ diff --git a/ehcp/extplorer/images/_extract.png b/ehcp/extplorer/images/_extract.png new file mode 100755 index 0000000..66e13a2 Binary files /dev/null and b/ehcp/extplorer/images/_extract.png differ diff --git a/ehcp/extplorer/images/_filefind.png b/ehcp/extplorer/images/_filefind.png new file mode 100755 index 0000000..6dd1931 Binary files /dev/null and b/ehcp/extplorer/images/_filefind.png differ diff --git a/ehcp/extplorer/images/_filenew.png b/ehcp/extplorer/images/_filenew.png new file mode 100755 index 0000000..f38d02e Binary files /dev/null and b/ehcp/extplorer/images/_filenew.png differ diff --git a/ehcp/extplorer/images/_folder_new.png b/ehcp/extplorer/images/_folder_new.png new file mode 100755 index 0000000..cc6020b Binary files /dev/null and b/ehcp/extplorer/images/_folder_new.png differ diff --git a/ehcp/extplorer/images/_fonts.png b/ehcp/extplorer/images/_fonts.png new file mode 100755 index 0000000..e4c2042 Binary files /dev/null and b/ehcp/extplorer/images/_fonts.png differ diff --git a/ehcp/extplorer/images/_help.png b/ehcp/extplorer/images/_help.png new file mode 100755 index 0000000..28a0f9e Binary files /dev/null and b/ehcp/extplorer/images/_help.png differ diff --git a/ehcp/extplorer/images/_home.gif b/ehcp/extplorer/images/_home.gif new file mode 100755 index 0000000..3b62135 Binary files /dev/null and b/ehcp/extplorer/images/_home.gif differ diff --git a/ehcp/extplorer/images/_home.png b/ehcp/extplorer/images/_home.png new file mode 100755 index 0000000..2347d16 Binary files /dev/null and b/ehcp/extplorer/images/_home.png differ diff --git a/ehcp/extplorer/images/_indicator.gif b/ehcp/extplorer/images/_indicator.gif new file mode 100755 index 0000000..e846e1d Binary files /dev/null and b/ehcp/extplorer/images/_indicator.gif differ diff --git a/ehcp/extplorer/images/_log_error.png b/ehcp/extplorer/images/_log_error.png new file mode 100755 index 0000000..df63d75 Binary files /dev/null and b/ehcp/extplorer/images/_log_error.png differ diff --git a/ehcp/extplorer/images/_logout.png b/ehcp/extplorer/images/_logout.png new file mode 100755 index 0000000..6323241 Binary files /dev/null and b/ehcp/extplorer/images/_logout.png differ diff --git a/ehcp/extplorer/images/_messagebox_warning.png b/ehcp/extplorer/images/_messagebox_warning.png new file mode 100755 index 0000000..82d3fc7 Binary files /dev/null and b/ehcp/extplorer/images/_messagebox_warning.png differ diff --git a/ehcp/extplorer/images/_move.png b/ehcp/extplorer/images/_move.png new file mode 100755 index 0000000..e766142 Binary files /dev/null and b/ehcp/extplorer/images/_move.png differ diff --git a/ehcp/extplorer/images/_reload.png b/ehcp/extplorer/images/_reload.png new file mode 100755 index 0000000..188ed61 Binary files /dev/null and b/ehcp/extplorer/images/_reload.png differ diff --git a/ehcp/extplorer/images/_remove.png b/ehcp/extplorer/images/_remove.png new file mode 100755 index 0000000..ff39d8c Binary files /dev/null and b/ehcp/extplorer/images/_remove.png differ diff --git a/ehcp/extplorer/images/_rename.gif b/ehcp/extplorer/images/_rename.gif new file mode 100755 index 0000000..0d155c0 Binary files /dev/null and b/ehcp/extplorer/images/_rename.gif differ diff --git a/ehcp/extplorer/images/_rename_.gif b/ehcp/extplorer/images/_rename_.gif new file mode 100755 index 0000000..0668f58 Binary files /dev/null and b/ehcp/extplorer/images/_rename_.gif differ diff --git a/ehcp/extplorer/images/_save.png b/ehcp/extplorer/images/_save.png new file mode 100755 index 0000000..fd0048d Binary files /dev/null and b/ehcp/extplorer/images/_save.png differ diff --git a/ehcp/extplorer/images/_up.png b/ehcp/extplorer/images/_up.png new file mode 100755 index 0000000..369e814 Binary files /dev/null and b/ehcp/extplorer/images/_up.png differ diff --git a/ehcp/extplorer/images/_view.png b/ehcp/extplorer/images/_view.png new file mode 100755 index 0000000..e167acf Binary files /dev/null and b/ehcp/extplorer/images/_view.png differ diff --git a/ehcp/extplorer/images/eXtplorer-horizontal2.png b/ehcp/extplorer/images/eXtplorer-horizontal2.png new file mode 100755 index 0000000..ae70b6f Binary files /dev/null and b/ehcp/extplorer/images/eXtplorer-horizontal2.png differ diff --git a/ehcp/extplorer/images/eXtplorer_logo.png b/ehcp/extplorer/images/eXtplorer_logo.png new file mode 100755 index 0000000..e463892 Binary files /dev/null and b/ehcp/extplorer/images/eXtplorer_logo.png differ diff --git a/ehcp/extplorer/images/extension/avi.png b/ehcp/extplorer/images/extension/avi.png new file mode 100755 index 0000000..27ddf38 Binary files /dev/null and b/ehcp/extplorer/images/extension/avi.png differ diff --git a/ehcp/extplorer/images/extension/bmp.png b/ehcp/extplorer/images/extension/bmp.png new file mode 100755 index 0000000..246a66c Binary files /dev/null and b/ehcp/extplorer/images/extension/bmp.png differ diff --git a/ehcp/extplorer/images/extension/bz2.png b/ehcp/extplorer/images/extension/bz2.png new file mode 100755 index 0000000..184f959 Binary files /dev/null and b/ehcp/extplorer/images/extension/bz2.png differ diff --git a/ehcp/extplorer/images/extension/c.png b/ehcp/extplorer/images/extension/c.png new file mode 100755 index 0000000..e237b3f Binary files /dev/null and b/ehcp/extplorer/images/extension/c.png differ diff --git a/ehcp/extplorer/images/extension/cc.png b/ehcp/extplorer/images/extension/cc.png new file mode 100755 index 0000000..e237b3f Binary files /dev/null and b/ehcp/extplorer/images/extension/cc.png differ diff --git a/ehcp/extplorer/images/extension/cgi.png b/ehcp/extplorer/images/extension/cgi.png new file mode 100755 index 0000000..7514245 Binary files /dev/null and b/ehcp/extplorer/images/extension/cgi.png differ diff --git a/ehcp/extplorer/images/extension/class.png b/ehcp/extplorer/images/extension/class.png new file mode 100755 index 0000000..d7aa15e Binary files /dev/null and b/ehcp/extplorer/images/extension/class.png differ diff --git a/ehcp/extplorer/images/extension/cpp.png b/ehcp/extplorer/images/extension/cpp.png new file mode 100755 index 0000000..e237b3f Binary files /dev/null and b/ehcp/extplorer/images/extension/cpp.png differ diff --git a/ehcp/extplorer/images/extension/css.png b/ehcp/extplorer/images/extension/css.png new file mode 100755 index 0000000..7c56160 Binary files /dev/null and b/ehcp/extplorer/images/extension/css.png differ diff --git a/ehcp/extplorer/images/extension/cxx.png b/ehcp/extplorer/images/extension/cxx.png new file mode 100755 index 0000000..e237b3f Binary files /dev/null and b/ehcp/extplorer/images/extension/cxx.png differ diff --git a/ehcp/extplorer/images/extension/dhtml.png b/ehcp/extplorer/images/extension/dhtml.png new file mode 100755 index 0000000..f56567f Binary files /dev/null and b/ehcp/extplorer/images/extension/dhtml.png differ diff --git a/ehcp/extplorer/images/extension/doc.png b/ehcp/extplorer/images/extension/doc.png new file mode 100755 index 0000000..53a675f Binary files /dev/null and b/ehcp/extplorer/images/extension/doc.png differ diff --git a/ehcp/extplorer/images/extension/document.png b/ehcp/extplorer/images/extension/document.png new file mode 100755 index 0000000..24c9c57 Binary files /dev/null and b/ehcp/extplorer/images/extension/document.png differ diff --git a/ehcp/extplorer/images/extension/docx.png b/ehcp/extplorer/images/extension/docx.png new file mode 100755 index 0000000..53a675f Binary files /dev/null and b/ehcp/extplorer/images/extension/docx.png differ diff --git a/ehcp/extplorer/images/extension/exe.png b/ehcp/extplorer/images/extension/exe.png new file mode 100755 index 0000000..7514245 Binary files /dev/null and b/ehcp/extplorer/images/extension/exe.png differ diff --git a/ehcp/extplorer/images/extension/folder.png b/ehcp/extplorer/images/extension/folder.png new file mode 100755 index 0000000..9232553 Binary files /dev/null and b/ehcp/extplorer/images/extension/folder.png differ diff --git a/ehcp/extplorer/images/extension/fon.png b/ehcp/extplorer/images/extension/fon.png new file mode 100755 index 0000000..3aab3bd Binary files /dev/null and b/ehcp/extplorer/images/extension/fon.png differ diff --git a/ehcp/extplorer/images/extension/gif.png b/ehcp/extplorer/images/extension/gif.png new file mode 100755 index 0000000..246a66c Binary files /dev/null and b/ehcp/extplorer/images/extension/gif.png differ diff --git a/ehcp/extplorer/images/extension/gz.png b/ehcp/extplorer/images/extension/gz.png new file mode 100755 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/extplorer/images/extension/gz.png differ diff --git a/ehcp/extplorer/images/extension/h.png b/ehcp/extplorer/images/extension/h.png new file mode 100755 index 0000000..3523f98 Binary files /dev/null and b/ehcp/extplorer/images/extension/h.png differ diff --git a/ehcp/extplorer/images/extension/hpp.png b/ehcp/extplorer/images/extension/hpp.png new file mode 100755 index 0000000..3523f98 Binary files /dev/null and b/ehcp/extplorer/images/extension/hpp.png differ diff --git a/ehcp/extplorer/images/extension/htm.png b/ehcp/extplorer/images/extension/htm.png new file mode 100755 index 0000000..f56567f Binary files /dev/null and b/ehcp/extplorer/images/extension/htm.png differ diff --git a/ehcp/extplorer/images/extension/html.png b/ehcp/extplorer/images/extension/html.png new file mode 100755 index 0000000..f56567f Binary files /dev/null and b/ehcp/extplorer/images/extension/html.png differ diff --git a/ehcp/extplorer/images/extension/inc.png b/ehcp/extplorer/images/extension/inc.png new file mode 100755 index 0000000..b0afbd5 Binary files /dev/null and b/ehcp/extplorer/images/extension/inc.png differ diff --git a/ehcp/extplorer/images/extension/index.html b/ehcp/extplorer/images/extension/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/images/extension/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/images/extension/jar.png b/ehcp/extplorer/images/extension/jar.png new file mode 100755 index 0000000..568bffa Binary files /dev/null and b/ehcp/extplorer/images/extension/jar.png differ diff --git a/ehcp/extplorer/images/extension/java.png b/ehcp/extplorer/images/extension/java.png new file mode 100755 index 0000000..d7aa15e Binary files /dev/null and b/ehcp/extplorer/images/extension/java.png differ diff --git a/ehcp/extplorer/images/extension/jpeg.png b/ehcp/extplorer/images/extension/jpeg.png new file mode 100755 index 0000000..246a66c Binary files /dev/null and b/ehcp/extplorer/images/extension/jpeg.png differ diff --git a/ehcp/extplorer/images/extension/jpg.png b/ehcp/extplorer/images/extension/jpg.png new file mode 100755 index 0000000..246a66c Binary files /dev/null and b/ehcp/extplorer/images/extension/jpg.png differ diff --git a/ehcp/extplorer/images/extension/js.png b/ehcp/extplorer/images/extension/js.png new file mode 100755 index 0000000..0be6c26 Binary files /dev/null and b/ehcp/extplorer/images/extension/js.png differ diff --git a/ehcp/extplorer/images/extension/m3u.png b/ehcp/extplorer/images/extension/m3u.png new file mode 100755 index 0000000..3f1bd56 Binary files /dev/null and b/ehcp/extplorer/images/extension/m3u.png differ diff --git a/ehcp/extplorer/images/extension/midi.png b/ehcp/extplorer/images/extension/midi.png new file mode 100755 index 0000000..bbc5e59 Binary files /dev/null and b/ehcp/extplorer/images/extension/midi.png differ diff --git a/ehcp/extplorer/images/extension/mov.png b/ehcp/extplorer/images/extension/mov.png new file mode 100755 index 0000000..27ddf38 Binary files /dev/null and b/ehcp/extplorer/images/extension/mov.png differ diff --git a/ehcp/extplorer/images/extension/mp3.png b/ehcp/extplorer/images/extension/mp3.png new file mode 100755 index 0000000..3f1bd56 Binary files /dev/null and b/ehcp/extplorer/images/extension/mp3.png differ diff --git a/ehcp/extplorer/images/extension/mpeg.png b/ehcp/extplorer/images/extension/mpeg.png new file mode 100755 index 0000000..27ddf38 Binary files /dev/null and b/ehcp/extplorer/images/extension/mpeg.png differ diff --git a/ehcp/extplorer/images/extension/mpg.png b/ehcp/extplorer/images/extension/mpg.png new file mode 100755 index 0000000..27ddf38 Binary files /dev/null and b/ehcp/extplorer/images/extension/mpg.png differ diff --git a/ehcp/extplorer/images/extension/pdf.png b/ehcp/extplorer/images/extension/pdf.png new file mode 100755 index 0000000..f4863cb Binary files /dev/null and b/ehcp/extplorer/images/extension/pdf.png differ diff --git a/ehcp/extplorer/images/extension/php.png b/ehcp/extplorer/images/extension/php.png new file mode 100755 index 0000000..02fb3eb Binary files /dev/null and b/ehcp/extplorer/images/extension/php.png differ diff --git a/ehcp/extplorer/images/extension/php3.png b/ehcp/extplorer/images/extension/php3.png new file mode 100755 index 0000000..02fb3eb Binary files /dev/null and b/ehcp/extplorer/images/extension/php3.png differ diff --git a/ehcp/extplorer/images/extension/php4.png b/ehcp/extplorer/images/extension/php4.png new file mode 100755 index 0000000..02fb3eb Binary files /dev/null and b/ehcp/extplorer/images/extension/php4.png differ diff --git a/ehcp/extplorer/images/extension/php5.png b/ehcp/extplorer/images/extension/php5.png new file mode 100755 index 0000000..02fb3eb Binary files /dev/null and b/ehcp/extplorer/images/extension/php5.png differ diff --git a/ehcp/extplorer/images/extension/phtml.png b/ehcp/extplorer/images/extension/phtml.png new file mode 100755 index 0000000..02fb3eb Binary files /dev/null and b/ehcp/extplorer/images/extension/phtml.png differ diff --git a/ehcp/extplorer/images/extension/pl.png b/ehcp/extplorer/images/extension/pl.png new file mode 100755 index 0000000..7c38cb6 Binary files /dev/null and b/ehcp/extplorer/images/extension/pl.png differ diff --git a/ehcp/extplorer/images/extension/pls.png b/ehcp/extplorer/images/extension/pls.png new file mode 100755 index 0000000..3f1bd56 Binary files /dev/null and b/ehcp/extplorer/images/extension/pls.png differ diff --git a/ehcp/extplorer/images/extension/png.png b/ehcp/extplorer/images/extension/png.png new file mode 100755 index 0000000..246a66c Binary files /dev/null and b/ehcp/extplorer/images/extension/png.png differ diff --git a/ehcp/extplorer/images/extension/py.png b/ehcp/extplorer/images/extension/py.png new file mode 100755 index 0000000..e8d15f1 Binary files /dev/null and b/ehcp/extplorer/images/extension/py.png differ diff --git a/ehcp/extplorer/images/extension/ra.png b/ehcp/extplorer/images/extension/ra.png new file mode 100755 index 0000000..85725f5 Binary files /dev/null and b/ehcp/extplorer/images/extension/ra.png differ diff --git a/ehcp/extplorer/images/extension/ram.png b/ehcp/extplorer/images/extension/ram.png new file mode 100755 index 0000000..85725f5 Binary files /dev/null and b/ehcp/extplorer/images/extension/ram.png differ diff --git a/ehcp/extplorer/images/extension/rar.png b/ehcp/extplorer/images/extension/rar.png new file mode 100755 index 0000000..184f959 Binary files /dev/null and b/ehcp/extplorer/images/extension/rar.png differ diff --git a/ehcp/extplorer/images/extension/rm.png b/ehcp/extplorer/images/extension/rm.png new file mode 100755 index 0000000..85725f5 Binary files /dev/null and b/ehcp/extplorer/images/extension/rm.png differ diff --git a/ehcp/extplorer/images/extension/sh.png b/ehcp/extplorer/images/extension/sh.png new file mode 100755 index 0000000..5a218fe Binary files /dev/null and b/ehcp/extplorer/images/extension/sh.png differ diff --git a/ehcp/extplorer/images/extension/shtml.png b/ehcp/extplorer/images/extension/shtml.png new file mode 100755 index 0000000..f56567f Binary files /dev/null and b/ehcp/extplorer/images/extension/shtml.png differ diff --git a/ehcp/extplorer/images/extension/sql.png b/ehcp/extplorer/images/extension/sql.png new file mode 100755 index 0000000..5a218fe Binary files /dev/null and b/ehcp/extplorer/images/extension/sql.png differ diff --git a/ehcp/extplorer/images/extension/swf.png b/ehcp/extplorer/images/extension/swf.png new file mode 100755 index 0000000..4b7dc45 Binary files /dev/null and b/ehcp/extplorer/images/extension/swf.png differ diff --git a/ehcp/extplorer/images/extension/tar.png b/ehcp/extplorer/images/extension/tar.png new file mode 100755 index 0000000..184f959 Binary files /dev/null and b/ehcp/extplorer/images/extension/tar.png differ diff --git a/ehcp/extplorer/images/extension/tbz.png b/ehcp/extplorer/images/extension/tbz.png new file mode 100755 index 0000000..184f959 Binary files /dev/null and b/ehcp/extplorer/images/extension/tbz.png differ diff --git a/ehcp/extplorer/images/extension/tgz.png b/ehcp/extplorer/images/extension/tgz.png new file mode 100755 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/extplorer/images/extension/tgz.png differ diff --git a/ehcp/extplorer/images/extension/txt.gif b/ehcp/extplorer/images/extension/txt.gif new file mode 100755 index 0000000..f229509 Binary files /dev/null and b/ehcp/extplorer/images/extension/txt.gif differ diff --git a/ehcp/extplorer/images/extension/txt.png b/ehcp/extplorer/images/extension/txt.png new file mode 100755 index 0000000..3c3b4b0 Binary files /dev/null and b/ehcp/extplorer/images/extension/txt.png differ diff --git a/ehcp/extplorer/images/extension/wav.png b/ehcp/extplorer/images/extension/wav.png new file mode 100755 index 0000000..3f1bd56 Binary files /dev/null and b/ehcp/extplorer/images/extension/wav.png differ diff --git a/ehcp/extplorer/images/extension/xhtml.png b/ehcp/extplorer/images/extension/xhtml.png new file mode 100755 index 0000000..f56567f Binary files /dev/null and b/ehcp/extplorer/images/extension/xhtml.png differ diff --git a/ehcp/extplorer/images/extension/xls.png b/ehcp/extplorer/images/extension/xls.png new file mode 100755 index 0000000..c1a32d0 Binary files /dev/null and b/ehcp/extplorer/images/extension/xls.png differ diff --git a/ehcp/extplorer/images/extension/xlsx.png b/ehcp/extplorer/images/extension/xlsx.png new file mode 100755 index 0000000..c1a32d0 Binary files /dev/null and b/ehcp/extplorer/images/extension/xlsx.png differ diff --git a/ehcp/extplorer/images/extension/xml.png b/ehcp/extplorer/images/extension/xml.png new file mode 100755 index 0000000..e8c7d1d Binary files /dev/null and b/ehcp/extplorer/images/extension/xml.png differ diff --git a/ehcp/extplorer/images/extension/zip.png b/ehcp/extplorer/images/extension/zip.png new file mode 100755 index 0000000..184f959 Binary files /dev/null and b/ehcp/extplorer/images/extension/zip.png differ diff --git a/ehcp/extplorer/images/index.html b/ehcp/extplorer/images/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/images/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/images/logo.gif b/ehcp/extplorer/images/logo.gif new file mode 100755 index 0000000..842ad48 Binary files /dev/null and b/ehcp/extplorer/images/logo.gif differ diff --git a/ehcp/extplorer/images/systeminfo.gif b/ehcp/extplorer/images/systeminfo.gif new file mode 100755 index 0000000..a6e7b9b Binary files /dev/null and b/ehcp/extplorer/images/systeminfo.gif differ diff --git a/ehcp/extplorer/images/x_icon.png b/ehcp/extplorer/images/x_icon.png new file mode 100755 index 0000000..b69a76a Binary files /dev/null and b/ehcp/extplorer/images/x_icon.png differ diff --git a/ehcp/extplorer/include/.htaccess b/ehcp/extplorer/include/.htaccess new file mode 100755 index 0000000..e019832 --- /dev/null +++ b/ehcp/extplorer/include/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/ehcp/extplorer/include/admin.php b/ehcp/extplorer/include/admin.php new file mode 100755 index 0000000..6089241 --- /dev/null +++ b/ehcp/extplorer/include/admin.php @@ -0,0 +1,598 @@ + +{ + "xtype": "tabpanel", + "width": "450", + "id": "dialog_tabpanel", + "dialogtitle": "", + "listeners": { + "afterrender": { + fn: function(cmp) { + cmp.activate(); + } + } + }, + "items": + [{ + "xtype": "form", + "id": "passform", + "autoHeight": "true", + "headerAsText": false, + "labelWidth": 125, + "url":"", + "title": "", + "frame": true, + "items": [{ + "xtype": "textfield", + "fieldLabel": "", + "name": "oldpwd", + "inputType": "password", + "allowBlank":false + }, + { "xtype": "textfield", + "fieldLabel": "", + "name": "newpwd1", + "hiddenName": "newpwd1", + "inputType": "password", + "allowBlank":false + }, + { "xtype": "textfield", + "fieldLabel": "", + "name": "newpwd2", + "hiddenName": "newpwd2", + "inputType": "password", + "allowBlank":false + }], + "buttons": [{ + "text": "", + "handler": function() { + frm = Ext.getCmp("passform").getForm(); + if(frm.findField('newpwd1').getValue() != frm.findField('newpwd2').getValue() ) { + Ext.Msg.alert("Error!", ""); + return false; + } + if(frm.findField('oldpwd').getValue() ==frm.findField('newpwd1').getValue()) { + Ext.Msg.alert("Error!", ""); + return false; + } + + statusBarMessage( "Please wait...", true ); + frm.submit({ + //reset: true, + reset: false, + "success": function(form, action) { + statusBarMessage( action.result.message, false, true ); + Ext.getCmp("dialog").destroy(); + }, + "failure": function(form, action) { + if( !action.result ) return; + Ext.MessageBox.alert("Error!", action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + "scope": Ext.getCmp("passform"), + // add some vars to the request, similar to hidden fields + "params": { + option: "com_extplorer", + "action": "admin", + "action2": "chpwd" + } + }) + } + }] + + + + },{ + "xtype": "form", + "id": "userlist", + "autoHeight": "true", + "headerAsText": false, + "labelWidth": 125, + "url":"", + title: "", + + "frame": true, + "items": [{ + 15) $user=substr($user,0,12)."..."; + $home=$GLOBALS["users"][$i][2]; if(strlen($home)>30) $home=substr($home,0,27)."..."; + ?> + + "xtype": "radio", + "name": "nuser", + "inputValue": "", + "fieldLabel": "", + "boxLabel": "Homedir: '.$home.'; ' + .($GLOBALS["users"][$i][4] ? $GLOBALS["messages"]["miscyesno"][2]:$GLOBALS["messages"]["miscyesno"][3]).'; ' + .$GLOBALS["users"][$i][6].'; ' + .($GLOBALS["users"][$i][7] ? $GLOBALS["messages"]["miscyesno"][2]:$GLOBALS["messages"]["miscyesno"][3]); + ?>" + } + + ], + "buttons": [{ + + "text": "", + "handler": function() { + Ext.Ajax.request( { url: "", + "params": { "option": "com_extplorer","action": "admin","action2": "adduser" }, + "callback": function(oElement, bSuccess, oResponse) { + if( !bSuccess ) { + Ext.Msg.alert( "Ajax communication failure!"); + } + if( oResponse && oResponse.responseText ) { + try{ json = Ext.decode( oResponse.responseText ); + if( json.error && typeof json.error != 'xml' ) { + Ext.Msg.alert( "", json.error ); + dialog.destroy(); + return false; + } + } catch(e) { return false; } + + Ext.getCmp("dialog_tabpanel").add( json ); + Ext.getCmp("dialog_tabpanel").activate(json.id); + Ext.getCmp("dialog").syncSize(); + } + } + + }); + } + }, + { + "text": "", + "handler": function() { + frm = Ext.getCmp("userlist").getForm(); + try { + theUser = frm.findField(0).getGroupValue(); + } catch(e) { + Ext.Msg.alert( "Error", "" ); + return; + } + Ext.Ajax.request( { url: "", + "params": { option: "com_extplorer","action": "admin","action2": "edituser","nuser":theUser }, + "callback": function(oElement, bSuccess, oResponse) { + if( !bSuccess ) { + Ext.Msg.alert( "Ajax communication failure!"); + } + if( oResponse && oResponse.responseText ) { + try{ json = Ext.decode( oResponse.responseText ); + if( json.error && typeof json.error != 'xml' ) { + Ext.Msg.alert( "", json.error ); + dialog.destroy(); + return false; + } + } catch(e) { return false; } + + Ext.getCmp("dialog_tabpanel").add( json ); + Ext.getCmp("dialog_tabpanel").activate(json.id); + Ext.getCmp("dialog").syncSize(); + } + } + + }); + } + }, + { + "text": "", + "handler": function() { + frm = Ext.getCmp("userlist").getForm(); + try { + theUser = frm.findField(0).getGroupValue(); + } catch(e) { + Ext.Msg.alert( "Error", "" ); + return; + } + + Ext.Msg.confirm( "", String.format( "", theUser ), function( btn ) { + if( btn != 'yes') return; + statusBarMessage( "Please wait...", true ); + frm.submit({ + "success": function(form, action) { + statusBarMessage( action.result.message, false, true ); + }, + "failure": function(form, action) { + if( !action.result ) return; + Ext.MessageBox.alert("Error!", action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + "scope": Ext.getCmp("userlist").getForm(), + // add some vars to the request, similar to hidden fields + "params": { + "option": "com_extplorer", + "action": "admin", + "action2": "rmuser", + "user": theUser + } + }); + }); + } + } + ] + + + + }] +} +CheckPassword($GLOBALS['__POST']["oldpwd"], $data[1]); + if(!$result) { + $data=ext_find_user($GLOBALS['__SESSION']['credentials_extplorer']['username'],md5(stripslashes($GLOBALS['__POST']["oldpwd"]))); + if($data==NULL) { + ext_Result::sendResult('changepwd', false, $GLOBALS["error_msg"]["miscnouserpass"]); + } + } + + $data[1]=extEncodePassword(stripslashes($GLOBALS['__POST']["newpwd1"])); + if(!ext_update_user($data[0],$data)) { + ext_Result::sendResult('changepwd', false, $data[0].": ".$GLOBALS["error_msg"]["chpass"]); + } + require_once(_EXT_PATH.'/include/authentication/extplorer.php'); + $auth = new ext_extplorer_authentication(); + $auth->onAuthenticate(array('username'=>$data[0],'password'=>$data[1])); + + ext_Result::sendResult('changepwd', true, ext_Lang::msg('change_password_success')); +} +//------------------------------------------------------------------------------ +function adduser($dir) { // Add User + if(isset($GLOBALS['__POST']["confirm"]) && $GLOBALS['__POST']["confirm"]=="true") { + $user=stripslashes($GLOBALS['__POST']["nuser"]); + if($user=="" || $GLOBALS['__POST']["home_dir"]=="") { + ext_Result::sendResult('adduser', false, $GLOBALS["error_msg"]["miscfieldmissed"]); + } + if($GLOBALS['__POST']["pass1"]!=$GLOBALS['__POST']["pass2"]) { + ext_Result::sendResult('adduser', false, $GLOBALS["error_msg"]["miscnopassmatch"]); + } + $data=ext_find_user($user,NULL); + if($data!=NULL) { + ext_Result::sendResult('adduser', false, $user.": ".$GLOBALS["error_msg"]["miscuserexist"]); + } + + $data=array($user,extEncodePassword(stripslashes($GLOBALS['__POST']["pass1"])), + stripslashes($GLOBALS['__POST']["home_dir"]),stripslashes($GLOBALS['__POST']["home_url"]), + $GLOBALS['__POST']["show_hidden"],stripslashes($GLOBALS['__POST']["no_access"]), + $GLOBALS['__POST']["permissions"],$GLOBALS['__POST']["active"]); + + if(!ext_add_user($data)) { + ext_Result::sendResult('adduser', false, $user.": ".$GLOBALS["error_msg"]["adduser"]); + } + ext_Result::sendResult('adduser', true, $user.": The user has been added"); + return; + } + + show_userform(); + +} +//------------------------------------------------------------------------------ +function edituser($dir) { // Edit User + $user=stripslashes($GLOBALS['__POST']["nuser"]); + $data=ext_find_user($user,NULL); + if($data==NULL) { + ext_Result::sendResult('edituser', false, $user.": ".$GLOBALS["error_msg"]["miscnofinduser"]); + } + + if($self=($user==$GLOBALS['__SESSION']['credentials_extplorer']['username'])) $dir=""; + + if(isset($GLOBALS['__POST']["confirm"]) && $GLOBALS['__POST']["confirm"]=="true") { + + $nuser=stripslashes($GLOBALS['__POST']["nuser"]); + if($nuser=="" || $GLOBALS['__POST']["home_dir"]=="") { + ext_Result::sendResult('edituser', false, $GLOBALS["error_msg"]["miscfieldmissed"]); + } + if(isset($GLOBALS['__POST']["chpass"]) && $GLOBALS['__POST']["chpass"]=="on") { + if($GLOBALS['__POST']["pass1"]!=$GLOBALS['__POST']["pass2"]) ext_Result::sendResult('edituser', false, $GLOBALS["error_msg"]["miscnopassmatch"]); + $pass=extEncodePassword(stripslashes($GLOBALS['__POST']["pass1"])); + } else { + $pass=$data[1]; + } + + if($self) $GLOBALS['__POST']["active"]=1; + + $data=array($nuser,$pass,stripslashes($GLOBALS['__POST']["home_dir"]), + stripslashes($GLOBALS['__POST']["home_url"]),$GLOBALS['__POST']["show_hidden"], + stripslashes($GLOBALS['__POST']["no_access"]),$GLOBALS['__POST']["permissions"],$GLOBALS['__POST']["active"]); + + if(!ext_update_user($user,$data)) { + ext_Result::sendResult('edituser', false, $user.": ".$GLOBALS["error_msg"]["saveuser"]); + } + /*if($self) { + activate_user($nuser,NULL); + }*/ + ext_Result::sendResult('edituser', true, $user.": ".ext_Lang::msg('User Profile has been updated')); + } + + show_userform( $data); +} + +function show_userform( $data = null ) { + if( $data == null ) { $data = array('', '', '', '', '', '', '' ); } + $formname = @$data[0] ? 'frmedituser' : 'frmadduser'; + ?> +{ + "xtype": "form", + "id" : "", + "renderTo": Ext.getCmp("dialog_tabpanel").getEl(), + "hidden": true, + "closable":true, + "autoHeight": "true", + "labelWidth": 125, + "url":"", + "title": "" , + + items: [{ + "xtype": "textfield", + "fieldLabel": "", + "name": "nuser", + "value": "", + "width":175, + "allowBlank":false + },{ + "xtype": "textfield", + "fieldLabel": "", + "name": "pass1", + "inputType": "password", + "width":175 + }, + { "xtype": "textfield", + "fieldLabel": "", + "name": "pass2", + "inputType": "password", + "width":175 + }, + + { "xtype": "checkbox", + "fieldLabel": "", + "name": "chpass", + "hiddenValue": "true" + }, + + { + "xtype": "textfield", + "fieldLabel": "", + "name": "home_dir", + "value": "", + "width":175, + "allowBlank":false + }, + { "xtype": "textfield", + "fieldLabel": "", + "name": "home_url", + "value": "", + "width":175, + "allowBlank":false + },{ + "xtype": "combo", + "fieldLabel": "", + "store": [ + ["1", " 0), true ) ?>"], + ["0", " 1), true ) ?>"] + ], + "hiddenName": "show_hidden", + "disableKeyFilter": true, + "value": "", + "editable": false, + "triggerAction": "all", + "mode": "local", + "allowBlank": false, + "selectOnFocus":true + }, + { "xtype": "textfield", + "fieldLabel": "", + "name": "no_access", + "value": "", + "width":175, + "allowBlank":true + }, + { + "xtype": "combo", + "fieldLabel": "", + "store": [ $index)).'" ]'."\n"; + if( $i+1<$permcount) echo ','; + } + ?> + ], + "hiddenName": "permissions", + "disableKeyFilter": true, + "value": "", + "editable": false, + "triggerAction": "all", + "mode": "local" + }, + { "xtype": "combo", + "fieldLabel": "", + "store": [ + ["1", " 0), true ) ?>"], + ["0", " 1), true ) ?>"] + ], + "hiddenName": "active", + "disableKeyFilter": true, + "value": "", + "disabled": , + "editable": false, + "triggerAction": "all", + "mode": "local", + "allowBlank": false, + "selectOnFocus":true + } + ], + + "buttons": [ { + "text": "", + "handler": function() { + userform = Ext.getCmp("").getForm(); + if(userform.findField('nuser').getValue()=="" || userform.findField('home_dir').getValue()=="") { + Ext.Msg.alert('Status', ""); + return false; + } + if( userform.findField('chpass') ) { + if(userform.findField('chpass').getValue() && + userform.findField('pass1').getValue() != userform.findField('pass2').getValue()) + { + Ext.Msg.alert('Status', ""); + return false; + } + } + statusBarMessage( 'Please wait...', true ); + userform.submit({ + "success": function(form, action) { + statusBarMessage( action.result.message, false, true ); + Ext.getCmp("dialog_tabpanel").remove(""); + }, + "failure": function(form, action) { + if( !action.result ) return; + Ext.Msg.alert('Error!', action.result.error); + statusBarMessage( action.result.error, false, true ); + }, + "scope": userform, + // add some vars to the request, similar to hidden fields + "params": {option: 'com_extplorer', + user: "", + "action": 'admin', + "action2": "", + "confirm": "true" + } + }) + } + },{ + "text": "", + "handler": function() { Ext.getCmp("dialog_tabpanel").remove(""); } + }] +} + $files_per_step ) { + if( file_put_contents($dir_contents_cache_file, implode("\n", $v_list )) == false ) { + ext_Result::sendResult('archive', false, 'Failed to create a temporary list of the directory contents' ); + } + } + } else { + $file_list_string = file_get_contents($dir_contents_cache_file); + if( empty( $file_list_string )) { + ext_Result::sendResult('archive', false, 'Failed to retrieve the temporary list of the directory contents' ); + } + $v_list = explode("\n", $file_list_string ); + } + $cnt_filelist = count( $v_list ); + // Now we go to the right range of files and "slice" the array + $v_list = array_slice( $v_list, $startfrom, $files_per_step-1 ); + + $remove_path = $GLOBALS["home_dir"]; + if( $dir ) { + $remove_path .= $dir; + } + $remove_path = str_replace( '\\', '/', realpath($remove_path) ).'/'; + $debug = 'Starting from: '.$startfrom."\n"; + $debug .= 'Files to process: '.$cnt_filelist."\n"; + $debug .= implode( "\n", $v_list ); + //file_put_contents( 'log.txt', $debug, FILE_APPEND ); + + // Do some setup stuff + ini_set('memory_limit', '128M'); + @set_time_limit( 0 ); + //error_reporting( E_ERROR | E_PARSE ); + $result = extArchive::create( $archive_name, $v_list, $GLOBALS['__POST']["type"], '', $remove_path ); + + if( PEAR::isError( $result ) ) { + ext_Result::sendResult('archive', false, $name.': '.ext_Lang::err('archive_creation_failed').' ('.$result->getMessage().$archive_name.')' ); + } + $classname = class_exists('ext_Json') ? 'ext_Json' : 'Services_JSON'; + $json = new $classname(); + if( $cnt_filelist > $startfrom+$files_per_step ) { + + $response = Array( 'startfrom' => $startfrom + $files_per_step, + 'totalitems' => $cnt_filelist, + 'success' => true, + 'action' => 'archive', + 'token' => ext_getToken(), + 'message' => sprintf( ext_Lang::msg('processed_x_files'), $startfrom + $files_per_step, $cnt_filelist ) + ); + } + else { + @unlink($dir_contents_cache_file); + if( $GLOBALS['__POST']["type"] == 'tgz' || $GLOBALS['__POST']["type"] == 'tbz') { + chmod( $archive_name, 0644 ); + } + $response = Array( 'action' => 'archive', + 'success' => true, + 'token' => ext_getToken(), + 'message' => ext_Lang::msg('archive_created'), + 'newlocation' => ext_make_link( 'download', $dir, basename($archive_name) ) + ); + + } + + echo $json->encode( $response ); + ext_exit(); + } + $default_archive_type = 'zip'; + ?> + { + "xtype": "form", + "id": "simpleform", + "height": "200", + "width": "350", + "labelWidth": 125, + "url":"", + "dialogtitle": "", + "frame": true, + "items": [{ + "xtype": "textfield", + "fieldLabel": "", + "name": "name", + "value": "", + "width": "200" + }, + { + "xtype": "combo", + "fieldLabel": "", + "store": [ + ['zip', 'Zip ()'], + ['tgz', 'Tar/Gz ()'], + + ['tar', 'Tar ()'] + ], + "displayField":"typename", + "valueField": "type", + "name": "type", + "value": "", + "triggerAction": "all", + "hiddenName": "type", + "disableKeyFilter": "true", + "editable": "false", + "mode": "local", + "allowBlank": "false", + "selectOnFocus":"true", + "width": "200", + "listeners": { "select": { + fn: function(o, record ) { + form = Ext.getCmp("simpleform").getForm(); + var nameField = form.findField("name").getValue(); + if( nameField.indexOf( '.' ) > 0 ) { + form.findField('name').setValue( nameField.substring( 0, nameField.indexOf('.')+1 ) + o.getValue() ); + } else { + form.findField('name').setValue( nameField + '.'+ o.getValue()); + } + } + } + } + + + }, { + "xtype": "textfield", + "fieldLabel": "", + "name": "saveToDir", + "value": "", + "width": "200" + },{ + "xtype": "checkbox", + "fieldLabel": "?", + "name": "download", + "checked": "true" + } + ], + "buttons": [{ + "text": "", + "type": "submit", + "handler": function() { + Ext.ux.OnDemandLoad.load( "?option=com_extplorer&action=include_javascript&file=archive.js", + function(options) { submitArchiveForm(0) } ); + } + },{ + "text": "", + "handler": function() { Ext.getCmp("dialog").destroy() } + }] +} + + \ No newline at end of file diff --git a/ehcp/extplorer/include/authentication/ehcp.php b/ehcp/extplorer/include/authentication/ehcp.php new file mode 100755 index 0000000..0677e65 --- /dev/null +++ b/ehcp/extplorer/include/authentication/ehcp.php @@ -0,0 +1,66 @@ +Unauthorized.  Please login to the EHCP panel and try again.

"; + } + + function onLogout() { + logout(); + } +} +?> diff --git a/ehcp/extplorer/include/authentication/extplorer.php b/ehcp/extplorer/include/authentication/extplorer.php new file mode 100755 index 0000000..36c834f --- /dev/null +++ b/ehcp/extplorer/include/authentication/extplorer.php @@ -0,0 +1,199 @@ +CheckPassword($credentials['password'], $data[1]); + + if(!$result) { + $data=ext_find_user( $credentials['username'],$credentials['password'] ); + if( $data == NULL ) return false; + } + // Set Login + $_SESSION['credentials_extplorer']['username'] = $data[0]; + $_SESSION['credentials_extplorer']['password'] = $data[1]; + $_SESSION['file_mode'] = 'extplorer'; + $GLOBALS["home_dir"] = str_replace( '\\', '/', $data[2] ); + $GLOBALS["home_url"] = $data[3]; + $GLOBALS["show_hidden"] = $data[4]; + $GLOBALS["no_access"] = $data[5]; + $GLOBALS["permissions"] = $data[6]; + + return true; + } + + function onShowLoginForm() { + ?> + { + xtype: "form", + renderTo: "adminForm", + title: "", + id: "simpleform", + labelWidth: 125, // label settings here cascade unless overridden + url: "", + frame: true, + keys: { + key: Ext.EventObject.ENTER, + fn : function(){ + if (simple.getForm().isValid()) { + Ext.get( "statusBar").update( "Please wait..." ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.reload() }, + failure: function(form, action) { + if( !action.result ) return; + Ext.Msg.alert('', action.result.error, function() { + this.findField( 'password').setValue(''); + this.findField( 'password').focus(); + }, form ); + Ext.get( 'statusBar').update( action.result.error ); + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "login", + type : "extplorer" + } + }); + } else { + return false; + } + } + }, + items: [{ + xtype:"textfield", + fieldLabel: "", + name: "username", + width:175, + allowBlank:false + },{ + xtype:"textfield", + fieldLabel: "", + name: "password", + inputType: "password", + width:175, + allowBlank:false + }, new Ext.form.ComboBox({ + + fieldLabel: "", + store: new Ext.data.SimpleStore({ + fields: ['language', 'langname'], + data : [ + $name ) { + echo "['$language', '$name' ]"; + if( ++$i < $c ) echo ','; + } + ?> + ] + }), + displayField:"langname", + valueField: "language", + value: "", + hiddenName: "lang", + disableKeyFilter: true, + editable: false, + triggerAction: "all", + mode: "local", + allowBlank: false, + selectOnFocus:true + }), + { + xtype: "displayfield", + id: "statusBar" + } + ], + buttons: [{ + text: "", + type: "submit", + handler: function() { + Ext.get( "statusBar").update( "Please wait..." ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.reload() }, + failure: function(form, action) { + if( !action.result ) return; + Ext.Msg.alert('', action.result.error, function() { + this.findField( 'password').setValue(''); + this.findField( 'password').focus(); + }, form ); + Ext.get( 'statusBar').update( action.result.error ); + + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "login", + type : "extplorer" + } + }); + } + }, + { + text: '', + handler: function() { simple.getForm().reset(); } + } + + { + text: "", + handler: function() { Ext.getCmp("dialog").destroy(); } + } + + ] + } + + \ No newline at end of file diff --git a/ehcp/extplorer/include/authentication/ftp.php b/ehcp/extplorer/include/authentication/ftp.php new file mode 100755 index 0000000..6d29bc3 --- /dev/null +++ b/ehcp/extplorer/include/authentication/ftp.php @@ -0,0 +1,191 @@ +connect(); + if( PEAR::isError( $res )) { + ext_Result::sendResult('ftp_authentication', false, ext_Lang::msg('ftp_connection_failed').' ('.$url['host'].')' ); + } + else { + $res = $GLOBALS['FTPCONNECTION']->login( $ftp_login, $ftp_pass ); + + if( PEAR::isError( $res )) { + ext_Result::sendResult('ftp_authentication', false, ext_Lang::msg('ftp_login_failed') ); + + } + + $_SESSION['credentials_ftp']['username'] = $ftp_login; + $_SESSION['credentials_ftp']['password'] = $ftp_pass; + $_SESSION['ftp_host'] = $ftp_host; + $_SESSION['file_mode'] = 'ftp'; + $_SESSION['ftp_login'] = $ftp_login; + + return true; + } + + } + return false; + } + function onShowLoginForm() { + + ?> + { + xtype: "form", + renderTo: "adminForm", + id: "simpleform", + labelWidth: 125, + url:"", + dialogtitle: "", + title: "", + frame: true, + keys: { + key: Ext.EventObject.ENTER, + fn : function(){ + if (Ext.getCmp("simpleform").getForm().isValid()) { + Ext.get( 'statusBar').update( '' ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.reload() }, + failure: function(form, action) { + if( !action.result ) return; + Ext.Msg.alert('', action.result.error); + Ext.get( 'statusBar').update( action.result.error ); + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "login", + type: "ftp", + file_mode: "ftp" + } + }); + } else { + return false; + } + } + }, + items: [{ + xtype: "textfield", + fieldLabel: "", + name: "username", + width:175, + allowBlank:false + },{ + xtype: "textfield", + fieldLabel: "", + name: "password", + inputType: "password", + width:175, + allowBlank:false + },{ + xtype: "combo", + fieldLabel: "", + hiddenName: "ftp_host", + triggerAction: "all", + value: "", + store: [""], + width:175, + editable: false, + forceSelection: true, + allowBlank:false + }, + { + xtype: "displayfield", + id: "statusBar" + }], + buttons: [{ + text: "", + type: "submit", + handler: function() { + Ext.get( 'statusBar').update( '' ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.reload() }, + failure: function(form, action) { + if( !action.result ) return; + Ext.Msg.alert('', action.result.error); + Ext.get( 'statusBar').update( action.result.error ); + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "login", + type: "ftp", + file_mode: "ftp" + } + }); + } + }, + + { + text: '', + handler: function() { simple.getForm().reset(); } + } + + { + text: "", + handler: function() { Ext.getCmp("dialog").destroy(); } + } + ] + } + connect($url['host'], $port); + + if( PEAR::isError( $res )) { + return $res; + } + + $res = $GLOBALS['FTPCONNECTION']->login( $ssh2_user, $ssh2_pass ); + + if( PEAR::isError( $res )) { + return $res; + } + $_SESSION['credentials_ssh2']['username'] = $ssh2_user; + $_SESSION['credentials_ssh2']['password'] = $ssh2_pass; + $_SESSION['ssh2_host'] = $ssh2_host; + $_SESSION['file_mode'] = 'ssh2'; + + return true; + + + } + return false; + } + function onShowLoginForm() { + + ?> + { + xtype: "form", + renderTo: "adminForm", + id: "simpleform", + labelWidth: 125, + url:"", + dialogtitle: "", + title: "", + frame: true, + keys: { + key: Ext.EventObject.ENTER, + fn : function(){ + if (Ext.getCmp("simpleform").getForm().isValid()) { + statusBarMessage( '', true ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.href = '?ssh2' }, + failure: function(form, action) { + if( !action.result ) return; + msgbox = Ext.Msg.alert('', action.result.error); + msgbox.setIcon( Ext.MessageBox.ERROR ); + statusBarMessage( action.result.error, false, false ); + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "ssh2_authentication" + } + }); + } else { + return false; + } + } + }, + items: [{ + xtype: "textfield", + fieldLabel: "", + name: "username", + width:175, + allowBlank:false + },{ + xtype: "textfield", + fieldLabel: "", + name: "password", + inputType: "password", + width:175, + allowBlank:false + },{ + xtype: "combo", + fieldLabel: "", + name: "ssh2_host", + value: "", + store: [""], + width:175, + triggerAction: "all", + editable: false, + forceSelection: true, + allowBlank:false + }, + { + xtype: "displayfield", + id: "statusBar" + }], + buttons: [{ + text: "", + type: "submit", + handler: function() { + Ext.get( 'statusBar').update( '' ); + Ext.getCmp("simpleform").getForm().submit({ + reset: false, + success: function(form, action) { location.reload() }, + failure: function(form, action) { + if( !action.result ) return; + msgbox = Ext.Msg.alert('', action.result.error); + msgbox.setIcon( Ext.MessageBox.ERROR ); + Ext.get( 'statusBar').update( action.result.error ); + }, + scope: Ext.getCmp("simpleform").getForm(), + params: { + option: "com_extplorer", + action: "login", + type : "ssh2" + } + }); + } + }, + + { + text: '', + handler: function() { simple.getForm().reset(); } + } + + { + text: "", + handler: function() { Ext.getCmp("dialog").destroy(); } + } + ] + } + id )) { + if( class_exists('jfactory') ) { + $user = JFactory::getUser(); + $bookmarkfile .= $user->get('id').'.php'; + } else { + $bookmarkfile .= $mainframe->getUserName().'.php'; + } + } else { + $bookmarkfile .= $my->id . '.php'; + } + if( file_exists( $bookmarkfile )) { + return parse_ini_file( $bookmarkfile ); + } + else { + if( !is_writable( dirname( $bookmarkfile ) ) && !chmod( dirname( $bookmarkfile ), 0777 )) { + return array( $GLOBALS['messages']['homelink'] => '' ); + } else { + file_put_contents( $bookmarkfile, ";\n{$GLOBALS['messages']['homelink']}=\n" ); + return array( $GLOBALS['messages']['homelink'] => '' ); + } + } +} + +function strip_invalid_key_char($s, $replacement ="") { + return preg_replace('/[{}|&~![()"]/u', $replacement, $s); +} + +/** + * Adds a new bookmark to the bookmark ini file + * + * @param string $dir + */ +function ext_modify_bookmark( $task, $dir ) { + global $my, $user, $mainframe; + $alias = substr( extGetParam($_REQUEST,'alias'), 0, 150 ); + // CSRF Security Check + if( !ext_checkToken($GLOBALS['__POST']["token"]) ) { + ext_Result::sendResult('tokencheck', false, 'Request failed: Security Token not valid.'); + } + $bookmarks = read_bookmarks(); + $bookmarkfile = _EXT_PATH.'/config/bookmarks_'.$GLOBALS['file_mode'].'_'; + if( empty( $my->id )) { + if( class_exists('jfactory') ) { + $user = JFactory::getUser(); + $bookmarkfile .= $user->get('id').'.php'; + } else { + $bookmarkfile .= $mainframe->getUserName().'.php'; + } + } else { + $bookmarkfile .= $my->id . '.php'; + } + while( @ob_end_clean() ); + + header( "Status: 200 OK" ); + + switch ( $task ) { + case 'add': + + if( in_array( $dir, $bookmarks )) { + echo ext_alertBox( $GLOBALS['messages']['already_bookmarked'] ); exit; + } + //$alias = preg_replace('~[^\w-.\/\\\]~','', $alias ); // Make the alias ini-safe by removing all non-word characters + $alias = strip_invalid_key_char($alias, "_"); + $bookmarks[$alias] = $dir; //we deal with the flippped array here + $msg = ext_successBox( $GLOBALS['messages']['bookmark_was_added'] ); + break; + + case 'remove': + + if( !in_array( $dir, $bookmarks )) { + echo ext_alertBox( $GLOBALS['messages']['not_a_bookmark'] ); exit; + } + $bookmarks = array_flip( $bookmarks ); + unset( $bookmarks[$dir] ); + $bookmarks = array_flip( $bookmarks ); + $msg = ext_successBox( $GLOBALS['messages']['bookmark_was_removed'] ); + } + + $inifile = "; \n"; + $inifile .= $GLOBALS['messages']['homelink']."=\n"; + + foreach( $bookmarks as $alias => $directory ) { //changed by pokemon + if( empty( $directory ) || empty( $alias ) ) continue; + if( $directory[0] == $GLOBALS['separator']) $directory = substr( $directory, 1 ); + $inifile .= "$alias=$directory\n"; + } + if( !is_writable( $bookmarkfile )) { + echo ext_alertBox( sprintf( $GLOBALS['messages']['bookmarkfile_not_writable'], $task, $bookmarkfile ) ); exit; + } + file_put_contents( $bookmarkfile, $inifile ); + + echo $msg; + echo ext_list_bookmarks($dir); + exit; +} + +/** + * Lists all bookmarked directories in a dropdown list. + * + * @param string $dir + */ +function ext_list_bookmarks( $dir ) { + + $bookmarks = read_bookmarks(); + $bookmarks = array_flip($bookmarks); + + foreach( $bookmarks as $bookmark ) { + $len = strlen( $bookmark ); + if( $len > 40 ) { + $first_part = substr( $bookmark, 0, 20 ); + $last_part = substr( $bookmark, -20 ); + $bookmarks[$bookmark] = $first_part . '...' . $last_part; + } + } + + // Not doing this in production mode... what a terrible idea! + /* + $html = $GLOBALS['messages']['quick_jump'].': '; + if( !empty($dir[0]) && @$dir[0] == '/' ) { + $dir = substr( $dir, 1); + } + $html .= ext_selectList( 'favourites', $dir, $bookmarks, 1, '', 'onchange="chDir( this.options[this.options.selectedIndex].value);" style="max-width: 200px;"'); + $img_add = ''.$GLOBALS['messages']['lbl_add_bookmark'].''; + $img_remove = ''.$GLOBALS['messages']['lbl_remove_bookmark'].''; + */ + $html = ""; + + $addlink=$removelink=''; + + if( !isset( $bookmarks[$dir] ) && $dir != '' && $dir != '/' ) { + $addlink = ''.$img_add.''; + } elseif( $dir != '' && $dir != '/' ) { + $removelink = ''.$img_remove.''; + } + + $html .= $addlink .' '.$removelink; + + return $html; +} + +?> diff --git a/ehcp/extplorer/include/chmod.php b/ehcp/extplorer/include/chmod.php new file mode 100755 index 0000000..0ecddcb --- /dev/null +++ b/ehcp/extplorer/include/chmod.php @@ -0,0 +1,232 @@ +file_exists( $abs_item )) { + ext_Result::sendResult('chmod', false, $item.": ".$GLOBALS["error_msg"]["fileexist"]); + } + if(!get_show_item($dir, $item)) { + ext_Result::sendResult('chmod', false, $item.": ".$GLOBALS["error_msg"]["accessfile"]); + } + if( $do_recurse ) { + $ok = $GLOBALS['ext_File']->chmodRecursive( $abs_item, $mode ); + } + else { + if( get_is_dir( $abs_item )) { + // when we chmod a directory we must care for the permissions + // to prevent that the directory becomes not readable (when the "execute bits" are removed) + $bin = substr_replace( $bin, '1', 2, 1 ); // set 1st x bit to 1 + $bin = substr_replace( $bin, '1', 5, 1 );// set 2nd x bit to 1 + $bin = substr_replace( $bin, '1', 8, 1 );// set 3rd x bit to 1 + if( ext_isFTPMode() ) { + $mode = decoct(bindec($bin)); + } else { + $mode = bindec($bin); + } + } + //ext_Result::sendResult('chmod', false, $GLOBALS['FTPCONNECTION']->pwd()); + $ok = @$GLOBALS['ext_File']->chmod( $abs_item, $mode ); + } + + $bin = $old_bin; + } + + if($ok===false || PEAR::isError( $ok ) ) { + $msg = $item.": ".$GLOBALS["error_msg"]["permchange"]; + $msg .= PEAR::isError( $ok ) ? ' [' . $ok->getMessage().']' : ''; + ext_Result::sendResult('chmod', false, $msg ); + } + ext_Result::sendResult('chmod', true, ext_Lang::msg('permchange') ); + return; + } + if( ext_isFTPMode() ) { + $abs_item = get_item_info( $dir, $GLOBALS['__POST']["selitems"][0]); + } else { + $abs_item = get_abs_item( $dir, $GLOBALS['__POST']["selitems"][0]); + $abs_item = utf8_decode($abs_item); + } + + $mode = parse_file_perms(get_file_perms( $abs_item )); + if($mode===false) { + ext_Result::sendResult('chmod', false, $item.": ".$GLOBALS["error_msg"]["permread"]); + } + $pos = "rwx"; + $text = ""; + for($i=0;$i<$cnt;++$i) { + $s_item=get_rel_item($dir,$GLOBALS['__POST']["selitems"][$i]); + if(strlen($s_item)>50) $s_item="...".substr($s_item,-47); + $text .= $s_item.($i+1<$cnt ? ', ':''); + } + ?> + { + "xtype": "form", + "id": "simpleform", + "width": "300", + "labelWidth": 125, + "url":"", + "dialogtitle": "", + "title" : "", + "frame": true, + "items": [{ + "layout": "column", + "items": [{ + + "width":80, + "title":" $i ), true ) ?>", + "items": [{ + + "xtype": "checkbox", + "boxLabel":"", + + "name":"" + } + ] + } + ,{ + "width":400, + "style":"margin-left:10px", + "clear":true, + "html": " " + }] + + },{ + "xtype": "checkbox", + "fieldLabel":"", + "name":"do_recurse" + }], + "buttons": [{ + "text": "", + "handler": function() { + statusBarMessage( '', true ); + form = Ext.getCmp("simpleform").getForm(); + form.submit({ + //reset: true, + reset: false, + success: function(form, action) { + statusBarMessage( action.result.message, false, true ); + datastore.reload(); + Ext.getCmp("dialog").destroy(); + }, + failure: function(form, action) { + statusBarMessage( action.result.error, false, false ); + Ext.Msg.alert('', action.result.error); + }, + scope: form, + params: { + "option": "com_extplorer", + "action": "chmod", + "dir": "", + "selitems[]": [''], + confirm: 'true', + token: "" + } + }); + } + },{ + "text": "", + "handler": function() { Ext.getCmp("dialog").destroy(); } + }] +} + + \ No newline at end of file diff --git a/ehcp/extplorer/include/copy_move.php b/ehcp/extplorer/include/copy_move.php new file mode 100755 index 0000000..aacf191 --- /dev/null +++ b/ehcp/extplorer/include/copy_move.php @@ -0,0 +1,210 @@ +file_exists(dirname(get_abs_dir($new_dir)))) { + ext_Result::sendResult( $action, false, dirname(get_abs_dir($new_dir)).": ".$GLOBALS["error_msg"]["targetexist"]); + } + if(!get_show_item($new_dir,"")) { + ext_Result::sendResult( $action, false, $new_dir.": ".$GLOBALS["error_msg"]["accesstarget"]); + } + if(!down_home(get_abs_dir($new_dir))) { + ext_Result::sendResult( $action, false, $new_dir.": ".$GLOBALS["error_msg"]["targetabovehome"]); + } + + // copy / move files + $err=false; + for($i=0;$i<$cnt;++$i) { + $tmp = basename(stripslashes($GLOBALS['__POST']["selitems"][$i])); + $new = basename(stripslashes($GLOBALS['__POST']["selitems"][$i])); + + if( ext_isFTPMode() ) { + $abs_item = get_item_info($dir,$tmp); + $abs_new_item = $new_dir.'/'.$new; + } else { + $abs_item = get_abs_item($dir,$tmp); + $abs_new_item = get_abs_item($new_dir,$new); + } + + $items[$i] = $tmp; + + // Check + if($new=="") { + $error[$i]= $GLOBALS["error_msg"]["miscnoname"]; + $err=true; continue; + } + if(!@$GLOBALS['ext_File']->file_exists($abs_item)) { + $error[$i]= $GLOBALS["error_msg"]["itemexist"]; + $err=true; continue; + } + if(!get_show_item($dir, $tmp)) { + $error[$i]= $GLOBALS["error_msg"]["accessitem"]; + $err=true; continue; + } + if(@$GLOBALS['ext_File']->file_exists($abs_new_item)) { + $error[$i]= $GLOBALS["error_msg"]["targetdoesexist"]; + $err=true; continue; + } + + // Copy / Move + if($action=="copy") { + if(@is_link(ext_TextEncoding::fromUTF8($abs_item)) || get_is_file(ext_TextEncoding::fromUTF8($abs_item))) { + // check file-exists to avoid error with 0-size files (PHP 4.3.0) + if( ext_isFTPMode() ) $abs_item = '/'.$dir.'/'.$abs_item['name']; + $ok=@$GLOBALS['ext_File']->copy( $abs_item ,$abs_new_item); //||@file_exists($abs_new_item); + + } + elseif(@get_is_dir(ext_TextEncoding::fromUTF8($abs_item))) { + $ext_copy_dir = ext_isFTPMode() ? '/'.$dir.'/'.$abs_item['name'].'/' : $abs_item; + if( ext_isFTPMode() ) $abs_new_item .= '/'; + + $ok=$GLOBALS['ext_File']->ext_copy_dir( $ext_copy_dir, $abs_new_item); + } + } + else { + $ok= $GLOBALS['ext_File']->rename($abs_item,$abs_new_item); + } + + if($ok===false || PEAR::isError( $ok ) ) { + $error[$i]=($action=="copy"? + $GLOBALS["error_msg"]["copyitem"]: + $GLOBALS["error_msg"]["moveitem"] + ); + if( PEAR::isError( $ok ) ) { + $error[$i].= ' ['.$ok->getMessage().']'; + } + $err=true; continue; + } + + $error[$i]=NULL; + } + + if($err) { // there were errors + $err_msg=""; + for($i=0;$i<$cnt;++$i) { + if($error[$i]==NULL) continue; + + $err_msg .= $items[$i]." : ".$error[$i]."\n"; + } + ext_Result::sendResult( $action, false, $err_msg); + } + + ext_Result::sendResult( $action, true, 'The File(s)/Directory(s) were successfully '.($action=='copy'?'copied':'moved').'.' ); +} + +function ext_copy_move_dialog($dir='') { + $action = extGetParam( $_REQUEST, 'action' ); + ?> +{ + "xtype": "form", + "id": "simpleform", + "labelWidth": 125, + "width": "340", + "url":"", + "dialogtitle": "", + "frame": true, + "items": [{ + "xtype": "textfield", + "fieldLabel": "Destination", + "name": "new_dir", + "value": "/", + "width":175, + "allowBlank":false + }], + "buttons": [{ + text: '', + handler: function() { + form = Ext.getCmp('simpleform').getForm(); + statusBarMessage( 'Please wait...', true ); + var requestParams = getRequestParams(); + requestParams.confirm = 'true'; + requestParams.action = ''; + form.submit({ + //reset: true, + reset: false, + success: function(form, action) { + statusBarMessage( action.result.message, false, true ); + try{ + dirTree.getSelectionModel().getSelectedNode().reload(); + } catch(e) {} + datastore.reload(); + Ext.getCmp("dialog").destroy(); + }, + failure: function(form, action) { + if( !action.result ) return; + Ext.MessageBox.alert('Error!', action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + scope: form, + // add some vars to the request, similar to hidden fields + params: requestParams + }); + } + },{ + text: '', + handler: function() { Ext.getCmp("dialog").destroy(); } + } + ] +} + \ No newline at end of file diff --git a/ehcp/extplorer/include/delete.php b/ehcp/extplorer/include/delete.php new file mode 100755 index 0000000..16ca843 --- /dev/null +++ b/ehcp/extplorer/include/delete.php @@ -0,0 +1,99 @@ +file_exists( $abs )) { + $error[$i] = $GLOBALS["error_msg"]["itemexist"]; + $err=true; continue; + } + if(!get_show_item($dir, $items[$i])) { + $error[$i] = $GLOBALS["error_msg"]["accessitem"]; + $err=true; continue; + } + + // Delete + if( ext_isFTPMode() ) $abs = str_replace('\\', '/', get_abs_item($dir,$abs) ); + + $ok= $GLOBALS['ext_File']->remove( $abs ); + + if($ok===false || PEAR::isError( $ok )) { + $error[$i]=$GLOBALS["error_msg"]["delitem"]; + if( PEAR::isError( $ok ) ) { + $error[$i].= ' ['.$ok->getMessage().']'; + } + $err=true; continue; + } + + $error[$i]=NULL; + } + + if($err) { // there were errors + $err_msg=""; + for($i=0;$i<$cnt;++$i) { + if($error[$i]==NULL) continue; + + $err_msg .= $items[$i]." : ".$error[$i]."\n"; + } + ext_Result::sendResult('delete', false, $err_msg); + } + ext_Result::sendResult('delete', true, $GLOBALS['messages']['success_delete_file'] ); + } +} diff --git a/ehcp/extplorer/include/diff.php b/ehcp/extplorer/include/diff.php new file mode 100755 index 0000000..305544d --- /dev/null +++ b/ehcp/extplorer/include/diff.php @@ -0,0 +1,191 @@ + 'cs', + 'german' => 'de', + 'danish' => 'dk', + 'english' => 'en', + 'esperanto' => 'eo', + 'spanish' => 'es', + 'french' => 'fr', + 'croatian' => 'hr', + 'italian' => 'it', + 'japanese' => 'ja', + 'macedonian' => 'mk', + 'dutch' => 'nl', + 'polish' => 'pl', + 'portuguese' => 'pt', + 'russian' => 'ru', + 'slovenian' => 'sk' + ); + + function execAction($dir, $item) { + + if(($GLOBALS["permissions"]&01)!=01) { + ext_Result::sendResult('diff', false, ext_Lang::err('accessfunc' )); + } + $fname = get_abs_item($dir, $item); + + if(!get_is_file(utf8_decode($fname))) { + ext_Result::sendResult('diff', false, $item.": ".ext_Lang::err('fileexist' )); + } + if(!get_show_item($dir, $item)) { + ext_Result::sendResult('diff', false, $item.": ".ext_Lang::err('accessfile' )); + } + $cnt = 0; + if( !empty($GLOBALS['__POST']["selitems"])) { + $cnt=count($GLOBALS['__POST']["selitems"]); + } + $item2 = extGetParam( $_POST, 'item2'); + if ($item2 !== null) { + $fname2 = get_abs_item('', utf8_decode($item2)); + } + elseif( $cnt >= 2 ) { + $item2 = $GLOBALS['__POST']["selitems"][1]; + $fname2 = get_abs_item( $dir, $item2); + } + + if ($item2 !== null) { + if(!get_is_file($fname2)) { + ext_Result::sendResult('diff', false, $item2.": ".ext_Lang::err('fileexist' )); + } + + if(!get_show_item('', $item2)) { + ext_Result::sendResult('diff', false, $item2.": ".ext_Lang::err('accessfile' )); + } + } elseif( empty( $cnt ) && extGetParam($_POST, 'confirm') == 'true' ) { + ext_Result::sendResult('diff', false, 'Please select a second file to diff to'); + } + if ($item2 || $cnt >= 2) { + // Show File In TextArea + $content = $GLOBALS['ext_File']->file_get_contents( $fname ); + $content2 = $GLOBALS['ext_File']->file_get_contents( $fname2 ); + + //$content = nl2br(str_replace("\t", "    ", htmlentities($content))); + //$content2 = nl2br(str_replace("\t", "    ", htmlentities($content2))); + $diff = $this->inline_diff($content, $content2); + if( empty( $diff )) { + ext_Result::sendResult('diff', true, 'Both Files are identical'); + } + $diff = utf8_encode( nl2br( $diff ) ); + echo '{ "xtype": "panel", "dialogtitle": "Diff Result", "html": "'.str_replace( array("\n", "\r"), array('',''), $diff).'" }'; + exit; + } + + ?> +{ + "xtype": "form", + "id": "simpleform", + "width": "700", + "labelWidth": 125, + "url":"", + "dialogtitle": "Diff ", + "title": "Diff", + "items": [{ + xtype: "textfield", + fieldLabel: 'File to Compare', + name: 'item2', + value: "/", + width:175, + allowBlank:false + }], + buttons: [{ + "text": "", + "handler": function() { + statusBarMessage( 'Please wait...', true ); + form = Ext.getCmp("simpleform").getForm(); + form.submit({ + //reset: true, + reset: false, + success: function(form, action) { + Ext.getCmp("dialog").setContent( action.result.message, true ); + }, + failure: function(form, action) { + if( !action.result ) return; + Ext.MessageBox.alert('Error!', action.result.error); + statusBarMessage( action.result.error, false, true ); + }, + scope: form, + // add some vars to the request, similar to hidden fields + params: { + "option": "com_extplorer", + "action": "diff", + "dir": "", + "item": "", + "selitems[]": [''], + confirm: 'true' + } + }); + } + },{ + "text": "", + "handler": function() { Ext.getCmp("dialog").destroy(); } + }] +} + render($diff); + } +} \ No newline at end of file diff --git a/ehcp/extplorer/include/download.php b/ehcp/extplorer/include/download.php new file mode 100755 index 0000000..9d49240 --- /dev/null +++ b/ehcp/extplorer/include/download.php @@ -0,0 +1,162 @@ +file_exists($abs_item)) { + ext_Result::sendResult( 'download', false, $item.": ".$GLOBALS["error_msg"]["fileexist"]); + return false; + } + + if (!get_show_item($dir, $item)) { + ext_Result::sendResult( 'download', false, $item.": ".$GLOBALS["error_msg"]["accessfile"]); + return false; + } + + @set_time_limit( 0 ); + + if (ext_isFTPMode()) { + $abs_item = ext_ftp_make_local_copy( $abs_item ); + $unlink = true; + } + + $browser = id_browser(); + + header('Expires: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Transfer-Encoding: binary'); + header('Content-Length: '.filesize(realpath($abs_item))); + //header("Content-Encoding: none"); + + if( isset($_GET['action2']) && $_GET['action2'] == 'view' ) { + $content_disposition = 'inline'; + include_once( _EXT_PATH.'/libraries/Archive/file.php'); + $extension = extFile::getExt($item); + switch( strtolower($extension) ) { + case 'doc': + case 'dot': $extension = 'msword'; break; + case 'docx': + case 'dotx': $extension = 'vnd.openxmlformats-officedocument.wordprocessingml.template';break; + case 'docm': $extension = 'vnd.ms-word.document.macroEnabled.12';break; + case 'docm': $extension = 'vnd.ms-word.template.macroEnabled.12';break; + case 'xls': + case 'xlt': + case 'xla': + $extension = 'vnd.ms-excel';break; + case 'xlsx': $extension = 'vnd.openxmlformats-officedocument.spreadsheetml.sheet';break; + case 'xltx': $extension = 'vnd.openxmlformats-officedocument.spreadsheetml.template';break; + case 'xlsm': $extension = 'vnd.ms-excel.sheet.macroEnabled.12';break; + case 'xltm': $extension = 'vnd.ms-excel.template.macroEnabled.12';break; + case 'xlam': $extension = 'vnd.ms-excel.addin.macroEnabled.12';break; + case 'xlsb': $extension = 'vnd.ms-excel.sheet.binary.macroEnabled.12';break; + case 'ppt': + case 'pot': + case 'pps': + case 'ppa': + $extension = 'vnd.ms-powerpoint';break; + case 'pptx': $extension = 'vnd.openxmlformats-officedocument.presentationml.presentation';break; + case 'potx': $extension = 'vnd.openxmlformats-officedocument.presentationml.template';break; + case 'ppsx': $extension = 'vnd.openxmlformats-officedocument.presentationml.slideshow';break; + case 'ppam': $extension = 'vnd.ms-powerpoint.addin.macroEnabled.12';break; + case 'pptm': $extension = 'vnd.ms-powerpoint.presentation.macroEnabled.12';break; + case 'potm': $extension = 'vnd.ms-powerpoint.template.macroEnabled.12';break; + case 'ppsm': $extension = 'vnd.ms-powerpoint.slideshow.macroEnabled.12';break; + case 'rtf': $extension = 'application/rtf';break; + + } + header('Content-Type: application/'.$extension.'; Charset=' . $GLOBALS["system_charset"]); + + } else { + $content_disposition = 'attachment'; + if ($browser=='IE' || $browser=='OPERA') { + header('Content-Type: application/octetstream; Charset=' . $GLOBALS["system_charset"]); + } else { + header('Content-Type: application/octet-stream; Charset=' . $GLOBALS["system_charset"]); + } + } + if($browser=='IE') { + // http://support.microsoft.com/kb/436616/ja + header('Content-Disposition: '.$content_disposition.'; filename="'.urlencode($item).'"'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + } else { + header('Content-Disposition: '.$content_disposition.'; filename="'.$item.'"'); + header('Cache-Control: no-cache, must-revalidate'); + header('Pragma: no-cache'); + } + + if($GLOBALS['use_mb']) { + if (mb_detect_encoding($abs_item) == 'ASCII') { + @readFileChunked(utf8_decode($abs_item)); + } else { + @readFileChunked($abs_item); + } + } else { + @readFileChunked(utf8_decode($abs_item)); + } + if( $unlink==true ) { + unlink( utf8_decode($abs_item) ); + } + + ob_end_flush(); + ext_exit(); + + } +} +//------------------------------------------------------------------------------ +?> diff --git a/ehcp/extplorer/include/edit.php b/ehcp/extplorer/include/edit.php new file mode 100755 index 0000000..1e1ddf5 --- /dev/null +++ b/ehcp/extplorer/include/edit.php @@ -0,0 +1,353 @@ + 'cs', + 'german' => 'de', + 'danish' => 'dk', + 'english' => 'en', + 'esperanto' => 'eo', + 'spanish' => 'es', + 'french' => 'fr', + 'croatian' => 'hr', + 'italian' => 'it', + 'japanese' => 'ja', + 'macedonian' => 'mk', + 'dutch' => 'nl', + 'polish' => 'pl', + 'portuguese' => 'pt', + 'russian' => 'ru', + 'slovenian' => 'sk' + ); + + function execAction($dir, $item) { // edit file + global $mainframe, $mosConfig_live_site; + + if(($GLOBALS["permissions"]&01)!=01) { + ext_Result::sendResult('edit', false, ext_Lang::err('accessfunc' )); + } + $fname = ext_TextEncoding::fromUTF8(get_abs_item($dir, $item)); + + if(!get_is_file($fname)) { + ext_Result::sendResult('edit', false, ext_TextEncoding::toUTF8($item).": ".ext_Lang::err('fileexist' )); + } + if(!get_show_item($dir, $item)) { + ext_Result::sendResult('edit', false, $item.": ".ext_Lang::err('accessfile' )); + } + + // CSRF Security Check + if( !ext_checkToken($GLOBALS['__POST']["token"]) ) { + ext_Result::sendResult('tokencheck', false, 'Request failed: Security Token not valid.'); + } + if(isset($GLOBALS['__POST']["dosave"]) && $GLOBALS['__POST']["dosave"]=="yes") { + // Save / Save As + $item=basename(stripslashes($GLOBALS['__POST']["fname"])); + $fname2=ext_TextEncoding::fromUTF8(get_abs_item($dir, $item)); + + if(!isset($item) || $item=="") { + ext_Result::sendResult('edit', false, ext_Lang::err('miscnoname' )); + } + if($fname!=$fname2 && @$GLOBALS['ext_File']->file_exists($fname2)) { + ext_Result::sendResult('edit', false, $item.": ".ext_Lang::err('itemdoesexist' )); + } + + $this->savefile($fname2); + $fname=$fname2; + + ext_Result::sendResult('edit', true, ext_Lang::msg('savefile').': '.$item ); + + } + if(isset($GLOBALS['__POST']["doreopen"]) && $GLOBALS['__POST']["doreopen"]=="yes") { + // File Reopen + $extra = Array(); + $content = $GLOBALS['ext_File']->file_get_contents( $fname ); + if( get_magic_quotes_runtime()) { + $content = stripslashes( $content ); + } + + $langs = $GLOBALS["language"]; + if ($langs == "japanese"){ + $_encoding = $GLOBALS['__POST']["file_encoding"]; + if ($content){ + $content = mb_convert_encoding($content, "UTF-8", $_encoding); + } + $extra["file_encoding"] = $_encoding; + } + + $extra["content"] = $content; + + ext_Result::sendResult('edit', true, ext_Lang::msg('reopenfile').': '.$item, $extra); + + } + + // header + $s_item=get_rel_item($dir,$item); if(strlen($s_item)>50) $s_item="...".substr($s_item,-47); + $id_hash = substr('f'.md5($s_item),0, 10); + $s_info = pathinfo( $s_item ); + $s_extension = str_replace('.', '', $s_info['extension'] ); + switch (strtolower($s_extension)) { + case 'txt': + $cp_lang = 'text'; break; + case 'cs': + $cp_lang = 'csharp'; break; + case 'css': + $cp_lang = 'css'; break; + case 'html': + case 'htm': + case 'xhtml': + $cp_lang = 'html'; break; + case 'java': + $cp_lang = 'java'; break; + case 'js': + $cp_lang = 'js'; break; + case 'pl': + $cp_lang = 'perl'; break; + case 'py': + $cp_lang = 'python'; break; + case 'ruby': + $cp_lang = 'ruby'; break; + case 'sql': + $cp_lang = 'sql'; break; + case 'vb': + case 'vbs': + $cp_lang = 'vb'; break; + case 'php': + $cp_lang = 'php'; break; + case 'xml': + $cp_lang = 'xml'; break; + default: + $cp_lang = ''; + } + $content = $GLOBALS['ext_File']->file_get_contents( $fname ); + if( get_magic_quotes_runtime()) { + $content = stripslashes( $content ); + } + $cw = 250; + $langs = $GLOBALS["language"]; + if ($langs == "japanese"){ + $cw = 200; + if ($content){ + $_encoding = strtoupper(mb_detect_encoding($content, Array("ASCII", "ISO-2022-JP", "UTF-8", "EUCJP-WIN", "SJIS-WIN"), true)); + $content = mb_convert_encoding($content, "UTF-8", $_encoding); + if ($_encoding == "SJIS-WIN"){ + $_encoding_label = "SJIS"; + } elseif ($_encoding == "EUCJP-WIN"){ + $_encoding_label = "EUC-JP"; + } elseif ($_encoding == "ISO-2022-JP"){ + $_encoding_label = "JIS"; + } elseif ($_encoding == "ASCII"){ + $_encoding_label = "UTF-8"; + } else { + $_encoding_label = $_encoding; + } + } else { + $_encoding_label = "UTF-8"; + } + } + ?> +{ + "xtype": "form", + "id": "", + "labelWidth": "300", + "autoScroll": "true", + "url":"", + "title": " 50 ? substr( htmlentities($s_item,ENT_QUOTES), strlen($s_item)-30, 30 ) : htmlentities($s_item,ENT_QUOTES); ?>", + "frame": "true", + "closable": "true", + "tbar": [{ + "text": "", + "handler": function() { + statusBarMessage( '', true ); + form = Ext.getCmp("").getForm(); + form.submit({ + waitMsg: 'Saving the File, please wait...', + reset: false, + success: function(form, action) { + datastore.reload(); + statusBarMessage( action.result.message, false, true ); + }, + failure: function(form, action) { + statusBarMessage( action.result.error, false, false ); + Ext.Msg.alert('!', action.result.error); + }, + scope: form, + // add some vars to the request, similar to hidden fields + params: {option: 'com_extplorer', + action: 'edit', + code: editAreaLoader.getValue("ext_codefield"), + dir: '', + item: '', + dosave: 'yes', + token: "" + } + }); + }, + "cls":"x-btn-text-icon", + "icon": "/images/_save.png" + },{ + "text": "", + "handler": function() { + statusBarMessage( '', true ); + form = Ext.getCmp("").getForm(); + form.submit({ + waitMsg: 'Processing Data, please wait...', + reset: false, + success: function(form, action) { + statusBarMessage( action.result.message, false, true ); + editAreaLoader.setValue("ext_codefield", action.result.content); + }, + failure: function(form, action) { + statusBarMessage( action.result.error, false, false ); + Ext.Msg.alert('!', action.result.error); + }, + scope: form, + // add some vars to the request, similar to hidden fields + params: { + option: 'com_extplorer', + action: 'edit', + dir: '', + item: '', + doreopen: 'yes', + token: "" + } + }); + }, + "cls":"x-btn-text-icon", + "icon": "/images/_reload.png" + }, + { + "text": "", + "handler": function() { + Ext.getCmp("mainpanel").remove( Ext.getCmp("mainpanel").getActiveTab() ); + }, + "cls":"x-btn-text-icon", + "icon": "/images/_cancel.png" + }], + "items": [{ + "xtype": "displayfield", + "value": "" + }, + { + "xtype": "textarea", + "hideLabel": true, + "name": "thecode", + "id": "ext_codefield", + "fieldClass": "x-form-field", + "value": "", + "width": "100%", + "height": 500, + "plugins": new Ext.ux.plugins.EditAreaEditor({ + "id" : "ext_codefield", + "syntax": "", + "start_highlight": true, + "display": "later", + "toolbar": "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, |, help" + lang_tbl)){?> + ,"language": "lang_tbl[$langs] ?>" + + }) + }, + { + + "width": "", + "xtype": "textfield", + "fieldLabel": "", + "name": "fname", + "value": "", + "clear": "true" + } + + ,{ + "width": "", + "style":"margin-left:10px", + "clear":"true", + "xtype": "combo", + "fieldLabel": "", + "name": "file_encoding", + "store": [ + ["UTF-8", "UTF-8"], + ["SJIS-WIN", "SJIS"], + ["EUCJP-WIN", "EUC-JP"], + ["ISO-2022-JP","JIS"] + ], + "value" : "", + "typeAhead": "true", + "mode": "local", + "triggerAction": "all", + "editable": "false", + "forceSelection": "true" + } + + + ] + +} + +file_put_contents( $file_name, $code ); + + if( $res==false || PEAR::isError( $res )) { + $err = basename($file_name).": ".ext_Lang::err('savefile' ); + if( PEAR::isError( $res ) ) { + $err .= $res->getMessage(); + } + ext_Result::sendResult( 'edit', false, $err ); + } + + } +} +//------------------------------------------------------------------------------ +?> diff --git a/ehcp/extplorer/include/extract.php b/ehcp/extplorer/include/extract.php new file mode 100755 index 0000000..434645b --- /dev/null +++ b/ehcp/extplorer/include/extract.php @@ -0,0 +1,74 @@ +getMessage() ); + } + if( $res === false ) { + ext_Result::sendResult( 'extract', false, ext_Lang::err( 'extract_failure' )); + } else { + ext_Result::sendResult( 'extract', true, ext_Lang::msg( 'extract_success' )); + } + + ext_Result::sendResult( 'extract', true, ext_Lang::msg( 'extract_success' ) ) ; + + } + } +} +?> \ No newline at end of file diff --git a/ehcp/extplorer/include/functions.php b/ehcp/extplorer/include/functions.php new file mode 100755 index 0000000..6e5d72e --- /dev/null +++ b/ehcp/extplorer/include/functions.php @@ -0,0 +1,1454 @@ +filesize( $abs_item ); +} +//------------------------------------------------------------------------------ + +function get_dir_size($dir) { + if(is_file($dir)) return array('size'=>filesize($dir),'howmany'=>0); + if($dh=opendir($dir)) { + $size=0; + $n = 0; + while(($file=readdir($dh))!==false) { + if($file=='.' || $file=='..') continue; + $n++; + $data = get_dir_size($dir.'/'.$file); + $size += $data['size']; + $n += $data['howmany']; + } + closedir($dh); + return array('size'=>$size,'howmany'=>$n); + } + return array('size'=>0,'howmany'=>0); +} + +function parse_file_size($bytes, $precision = 2) { + $units = array('B', 'KB', 'MB', 'GB', 'TB'); + if( !is_float($bytes)) { + $bytes = (float)sprintf("%u", $bytes); + } + $bytes = max($bytes, 0); + $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); + $pow = min($pow, count($units) - 1); + + $bytes /= pow(1024, $pow); + + return round($bytes, $precision) . ' ' . $units[$pow]; +} +//------------------------------------------------------------------------------ +function get_file_date( $item) { // file date + return @$GLOBALS['ext_File']->filemtime( $item ); +} +//------------------------------------------------------------------------------ +function parse_file_date($date) { // parsed file date + if ($date) { + return @date($GLOBALS["date_fmt"],$date); + } else { + return " (unknown) "; + } +} +//------------------------------------------------------------------------------ +function get_is_image( $abs_item ) { // is this file an image? + if(!get_is_file($abs_item)) return false; + if( isset($abs_item['name'])) { + $abs_item = $abs_item['name']; + } + return in_array(pathinfo($abs_item,PATHINFO_EXTENSION ), $GLOBALS["images_ext"]); +} +//----------------------------------------------------------------------------- +function get_is_editable( $abs_item ) { // is this file editable? + if(!get_is_file( $abs_item )) return false; + + if( is_array( $abs_item ) ) { + $abs_item = $abs_item['name']; + } + + if(in_array(".".strtolower(pathinfo($abs_item,PATHINFO_EXTENSION )), $GLOBALS["editable_ext"])) { + return true; + } + + return strpos( basename($abs_item), "." ) ? false : true; + +} +//----------------------------------------------------------------------------- +function get_mime_type( $abs_item, $query) { // get file's mimetype + + if(get_is_dir( $abs_item )) { // directory + $mime_type = $GLOBALS["super_mimes"]["dir"][0]; + $image = $GLOBALS["super_mimes"]["dir"][1]; + + if($query=="img") return $image; + else return $mime_type; + } + $extra = $GLOBALS['ext_File']->is_link( $abs_item ) ? ' ('.$GLOBALS['mimes']['symlink'].')' : ''; + if( ext_isFTPMode() && isset($abs_item['name']) ) { + $abs_item=$abs_item['name']; + } + // mime_type + foreach($GLOBALS["used_mime_types"] as $mime) { + list($desc,$img,$ext) = $mime; + + if(stristr(basename($abs_item), $ext )) { + $mime_type = $desc; + $image = $img; + if($query=="img") return $image; + else return $mime_type . $extra; + } + } + + if((function_exists("is_executable") && + @is_executable( $abs_item )) || + @stristr($abs_item,$GLOBALS["super_mimes"]["exe"][2])) + { // executable + $mime_type = $GLOBALS["super_mimes"]["exe"][0]; + $image = $GLOBALS["super_mimes"]["exe"][1]; + } else { // unknown file + $mime_type = $GLOBALS["super_mimes"]["file"][0]; + $image = $GLOBALS["super_mimes"]["file"][1]; + } + + if($query=="img") { + return $image; + } + else { + return $mime_type . $extra; + } +} +//------------------------------------------------------------------------------ +function get_show_item($dir, $item) { // show this file? + if( is_array( $item )) { + $item = $item['name']; + } + if($item == "." || $item == ".." || + (substr($item,0,1)=="." && $GLOBALS["show_hidden"]==false)) return false; + + if($GLOBALS["no_access"]!="" && @preg_match($GLOBALS["no_access"],$item)) return false; + + if($GLOBALS["show_hidden"]==false) { + $dirs=explode("/",$dir); + foreach($dirs as $i) if(substr($i,0,1)==".") return false; + } + + return true; +} +//------------------------------------------------------------------------------ +function get_dir_list( $dir='' ) { + if( ext_isFTPMode()) { + $files = getCachedFTPListing(empty($dir) ? '.' : $dir); + } else { + $files = extReadDirectory( get_abs_dir( $dir), '.', false, true ); + } + + $dirs =array(); + foreach( $files as $item) { + $itemname = ext_isFTPMode() ? (empty($dir) ? '' : $dir.'/') .$item['name'] : $item; + + $itemname = str_replace( '\\', '/', $itemname ); + if( get_is_dir($item)) { + $index = str_replace( + str_replace('\\', '/', $GLOBALS['home_dir'].$GLOBALS['separator']), + '', $itemname ); + + $dirs[$index]= basename($index); + } + } + + return $dirs; +} +/** + * Returns select lists with all the subdirectories along the current directory path + * + * @param string $dir + * @return string + */ +function get_dir_selects( $dir ) { + $dirs = explode( "/", str_replace( "\\", '/', $dir ) ); + + $subdirs = get_dir_list(); + if( sizeof( $subdirs ) > 0) { + $subdirs = array_merge(Array('ext_disabled' => '-'), $subdirs ); + } + + if( empty($dirs[0]) ) array_shift($dirs); + $dirsCopy = $dirs; + $implode = ''; + $selectedDir = @$dirs[0]; + foreach( $subdirs as $index => $val ) { + if ($GLOBALS['use_mb']) { + if (mb_detect_encoding($val) == 'ASCII') { + $subdirs[$index] = utf8_encode($val); + } else { + $subdirs[$index] = $val; + } + } else { + $subdirs[$index] = utf8_encode($val); + } + } + + $dir_links = ext_selectList('dirselect1', $selectedDir, $subdirs, 1, '', 'onchange="theDir=this.options[this.selectedIndex].value;if(theDir!=\'ext_disabled\' ) chDir(theDir);"' ); + $i = 2; + foreach( $dirs as $directory ) { + if( $directory != "" ) { + $implode .= $directory; + $next = next($dirsCopy); + $subdirs = get_dir_list( $implode ); + + foreach( $subdirs as $index => $val ) { + unset( $subdirs[$index]); + if ($GLOBALS['use_mb']) { + if (mb_detect_encoding($index) == 'ASCII') { + if (mb_detect_encoding($val) == 'ASCII') { + $subdirs[utf8_encode($index)] = utf8_encode($val); + } else { + $subdirs[utf8_encode($index)] = $val; + } + } else { + if (mb_detect_encoding($val) == 'ASCII') { + $subdirs[$index] = utf8_encode($val); + } else { + $subdirs[$index] = $val; + } + } + } else { + $subdirs[utf8_encode($index)] = utf8_encode($val); + } + } + if( $next !== false ) { + $selectedDir .= '/'.$next; + } else { + if( sizeof( $subdirs ) > 0) { + $subdirs = array_merge(Array('ext_disabled' => '-'), $subdirs ); + } + } + $dir_links .= ' / '.ext_selectList('dirselect'.$i++, $selectedDir, $subdirs, 1, '', 'onchange="theDir=this.options[this.selectedIndex].value;if(theDir!=\'ext_disabled\' ) chDir(theDir);"' ); + $implode .= '/'; + } + + } + //echo '
'.htmlspecialchars($dir_links).'
';exit; + return $dir_links; +} +//------------------------------------------------------------------------------ +function ext_copy_dir($source,$dest) { // copy dir + $ok = true; + $source = str_replace( '\\', '/', $source ); + $dest = str_replace( '\\', '/', $dest ); + if(!@mkdir($dest,0777)) return false; + $itemlist = extReadDirectory( $source, '.', true, true ); + if( empty( $itemlist )) return true; + + foreach( $itemlist as $file ) { + if(($file==".." || $file==".")) continue; + $file = str_replace( '\\', '/', $file ); + $new_dest = str_replace( $source, $dest, $file ); + + if(@is_dir($file)) { + @mkdir($new_dest,0777); + } else { + $ok=@copy($file,$new_dest); + } + } + + return $ok; +} + +//------------------------------------------------------------------------------ +function remove($item) { // remove file / dir + + if( !is_link( $item )) { + $item = realpath($item); + } + $ok = true; + if( is_link($item) || is_file($item)) + $ok = unlink($item); + elseif( @is_dir($item)) { + + if(($handle= opendir($item))===false) + ext_Result::sendResult('delete', false, basename($item).": ".$GLOBALS["error_msg"]["opendir"]); + + while(($file=readdir($handle))!==false) { + if(($file==".." || $file==".")) continue; + + $new_item = $item."/".$file; + if(!file_exists($new_item)) + ext_Result::sendResult('delete', false, basename($item).": ".$GLOBALS["error_msg"]["readdir"]); + //if(!get_show_item($item, $new_item)) continue; + + if( @is_dir($new_item)) { + $ok=remove($new_item); + } else { + $ok= unlink($new_item); + } + } + + closedir($handle); + $ok=@rmdir($item); + } + return $ok; +} +function chmod_recursive($item, $mode) { // chmod file / dir + $ok = true; + + if(@is_link($item) || @is_file($item)) { + $ok=@chmod( $item, $mode ); + if($ok) ext_Result::add_message($GLOBALS['messages']['permchange'].' '.$new_item); + else ext_Result::add_error($GLOBALS['error_msg']['permchange'].' '.$new_item); + } + elseif(@is_dir($item)) { + if(($handle=@opendir($item))===false) { + + ext_Result::add_error(basename($item).": ".$GLOBALS["error_msg"]["opendir"]); + return false; + } + + while(($file=readdir($handle))!==false) { + if(($file==".." || $file==".")) continue; + + $new_item = $item."/".$file; + if(!@file_exists($new_item)) { + ext_Result::add_error(basename($item).": ".$GLOBALS["error_msg"]["readdir"]); + continue; + } + //if(!get_show_item($item, $new_item)) continue; + + if(@is_dir($new_item)) { + $ok=chmod_recursive($new_item, $mode); + } else { + $ok=@chmod($new_item, $mode); + if($ok) ext_Result::add_message($GLOBALS['messages']['permchange'].' '.$new_item); + else ext_Result::add_error($GLOBALS['error_msg']['permchange'].' '.$new_item); + } + } + closedir($handle); + if( @is_dir( $item )) { + $bin = decbin( $mode ); + // when we chmod a directory we must care for the permissions + // to prevent that the directory becomes not readable (when the "execute bits" are removed) + $bin = substr_replace( $bin, '1', 2, 1 ); // set 1st x bit to 1 + $bin = substr_replace( $bin, '1', 5, 1 );// set 2nd x bit to 1 + $bin = substr_replace( $bin, '1', 8, 1 );// set 3rd x bit to 1 + $mode = bindec( $bin ); + } + $ok=@chmod( $item, $mode ); + if($ok) ext_Result::add_message($GLOBALS['messages']['permchange'].' '.$item); + else ext_Result::add_error($GLOBALS['error_msg']['permchange'].' '.$item); + } + + return $ok; +} +//------------------------------------------------------------------------------ +function get_max_file_size() { // get php max_upload_file_size + return calc_php_setting_bytes( ini_get("upload_max_filesize") ); +} +function get_max_upload_limit() { + return calc_php_setting_bytes( ini_get('post_max_size')); +} + +function calc_php_setting_bytes( $value ) { + switch(strtoupper(substr($value,-1))) { + case 'G': + $value = substr($value,0,-1); + $value = round($value*1073741824); + break; + case 'M': + $value = substr($value,0,-1); + $value = round($value*1048576); + break; + case 'K': + $value = substr($value,0,-1); + $value = round($value*1024); + break; + } + + return $value; +} +//------------------------------------------------------------------------------ +function down_home($abs_dir) { // dir deeper than home? + if( ext_isFTPMode() ) { + return true; + } + $real_home = @realpath($GLOBALS["home_dir"]); + $real_dir = @realpath($abs_dir); + + if($real_home===false || $real_dir===false) { + if(@stristr($abs_dir,"\\.\\.")) return false; + } else if(strcmp($real_home,@substr($real_dir,0,strlen($real_home)))) { + return false; + } + return true; +} +//------------------------------------------------------------------------------ +function id_browser() { + $browser=$GLOBALS['__SERVER']['HTTP_USER_AGENT']; + + if(preg_match('/Opera(\/| )([0-9]\.[0-9]{1,2})/', $browser)) { + return 'OPERA'; + } else if(preg_match('/MSIE ([0-9]\.[0-9]{1,2})/', $browser)) { + return 'IE'; + } else if(preg_match('/OmniWeb\/([0-9]\.[0-9]{1,2})/', $browser)) { + return 'OMNIWEB'; + } else if(preg_match('/(Konqueror\/)(.*)/', $browser)) { + return 'KONQUEROR'; + } else if(preg_match('/Mozilla\/([0-9]\.[0-9]{1,2})/', $browser)) { + return 'MOZILLA'; + } else { + return 'OTHER'; + } +} +function ext_isArchive( $file ) { + + $file_info = pathinfo($file); + $ext = @strtolower($file_info["extension"]); + $archive_types = array("tar", "gz", "tgz", "zip", "bzip2", "bz2", "tbz", 'rar'); + if( in_array( $ext, $archive_types )) { + return true; + } + return false; +} +if( !extension_loaded('posix') ) { + function posix_geteuid() { + return false; + } + function posix_getpwnam() { + + } +} + +//------------------------------------------------------------------------------ +/** + * Checks if the User Agent String identifies the browser as Internet Explorer + * + * @return boolean + */ +function ext_isWindows() { + if(empty($GLOBALS['isWindows'])) { + $GLOBALS['isWindows'] = substr(PHP_OS, 0, 3) == 'WIN'; + } + return $GLOBALS['isWindows']; +} +/** + * Returns the valid directory separator for this OS & Webserver combination + * + * @return string + */ +function ext_getSeparator() { + if( defined( 'DIRECTORY_SEPARATOR')) { + return DIRECTORY_SEPARATOR; + } + elseif (@preg_match('/Microsoft|WebSTAR|Xitami/', $_SERVER['SERVER_SOFTWARE']) ) { + return '\\'; + } else { + return '/'; + } +} +/** + * Checks if the User Agent String identifies the browser as Internet Explorer + * + * @return boolean + */ +function ext_isIE() { + return (preg_match('/MSIE ([0-9]\.[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])); +} + +/** + * Prints an HTML dropdown box named $name using $arr to + * load the drop down. If $value is in $arr, then $value + * will be the selected option in the dropdown. + * @author gday + * @author soeren + * + * @param string $name The name of the select element + * @param string $value The pre-selected value + * @param array $arr The array containting $key and $val + * @param int $size The size of the select element + * @param string $multiple use "multiple=\"multiple\" to have a multiple choice select list + * @param string $extra More attributes when needed + * @return string HTML drop-down list + */ +function ext_selectList($name, $value, $arr, $size=1, $multiple="", $extra="") { + $html = ''; + if( !empty( $arr ) ) { + $html = "\n"; + } + return $html; +} +function ext_scriptTag( $src = '', $script = '') { + if( $src!='') { + return ''; + } + if( $script != '') { + return ''; + } +} +function ext_alertBox( $msg ) { + return ext_scriptTag('', 'Ext.Msg.alert( \''.$GLOBALS["error_msg"]['message'].'\', \''. @mysql_escape_string( $msg ) .'\' );' ); +} +function ext_successBox( $msg ) { + return ext_scriptTag('', 'Ext.msgBoxSlider.msg( \''.ext_Lang::msg('success', true ).'\', \''. @mysql_escape_string( $msg ) .'\' );' ); +} +function ext_docLocation( $url ) { + return ext_scriptTag('', 'document.location=\''. $url .'\';' ); +} +function ext_isXHR() { + return strtolower(extGetParam($_SERVER,'HTTP_X_REQUESTED_WITH')) == 'xmlhttprequest' + || strtolower(extGetParam($_POST,'requestType')) == 'xmlhttprequest'; +} +function ext_exit() { + global $mainframe; + if( class_exists( 'jfactory' )) { + $app = jfactory::getApplication(); + $app->close(); + } + if( is_callable( array( $mainframe, 'close' ) ) ) { + $mainframe->close(); + } else { + session_write_close(); + exit; + } +} +function ext_isJoomla( $version='', $operator='=', $compare_minor_versions=true) { + $this_version = ''; + if( !empty($GLOBALS['_VERSION']) && is_object($GLOBALS['_VERSION'])) { + $jversion =& $GLOBALS['_VERSION']; + $this_version = $jversion->RELEASE .'.'. $jversion->DEV_LEVEL; + } + elseif ( class_exists('JVersion') ) { + $jversion = new JVersion(); + $this_version = $jversion->RELEASE .'.'. $jversion->DEV_LEVEL; + } else { + return false; + } + if( empty( $version ) ) { + return !empty($this_version); + } + $allowed_operators = array( '<', 'lt', '<=', 'le', '>', 'gt', '>=', 'ge', '==', '=', 'eq', '!=', '<>', 'ne' ); + + if( $compare_minor_versions ) { + $this_version = $jversion->RELEASE; + } + if( in_array($operator, $allowed_operators )) { + + return version_compare( $this_version, $version, $operator ); + } + return false; +} +/** + * Raise the memory limit when it is lower than the needed value + * + * @param string $setLimit Example: 16M + */ +function ext_RaiseMemoryLimit( $setLimit ) { + + $memLimit = @ini_get('memory_limit'); + + if( stristr( $memLimit, 'k') ) { + $memLimit = str_replace( 'k', '', str_replace( 'K', '', $memLimit )) * 1024; + } + elseif( stristr( $memLimit, 'm') ) { + $memLimit = str_replace( 'm', '', str_replace( 'M', '', $memLimit )) * 1024 * 1024; + } + + if( stristr( $setLimit, 'k') ) { + $setLimitB = str_replace( 'k', '', str_replace( 'K', '', $setLimit )) * 1024; + } + elseif( stristr( $setLimit, 'm') ) { + $setLimitB = str_replace( 'm', '', str_replace( 'M', '', $setLimit )) * 1024 * 1024; + } + + if( $memLimit < $setLimitB ) { + @ini_set('memory_limit', $setLimit ); + } +} +/** + * Reads a file and sends them in chunks to the browser + * This should overcome memory problems + * http://www.php.net/manual/en/function.readfile.php#54295 + * + * @since 1.4.1 + * @param string $filename + * @param boolean $retbytes + * @return mixed + */ +function readFileChunked($filename,$retbytes=true) { + $chunksize = 1*(1024*1024); // how many bytes per chunk + $buffer = ''; + $cnt =0; + // $handle = fopen($filename, 'rb'); + $handle = fopen($filename, 'rb'); + if ($handle === false) { + return false; + } + while (!feof($handle)) { + $buffer = fread($handle, $chunksize); + echo $buffer; + sleep(1); + ob_flush(); + flush(); + if ($retbytes) { + $cnt += strlen($buffer); + } + } + $status = fclose($handle); + if ($retbytes && $status) { + return $cnt; // return num. bytes delivered like readfile() does. + } + return $status; +} +//implements file_put_contents function for compatability with PHP < 4.3 +if ( ! function_exists('file_put_contents') ) { + function file_put_contents ( $filename, $filecont ){ + $handle = fopen( $filename, 'w' ); + if ( is_array($filecont) ) { + $size = 0; + foreach ( $filecont as $filestring ) { + fwrite( $handle, $filestring ); + $size += strlen( $filestring ); + } + fclose($handle); + return $size; + } else { + fwrite( $handle, $filecont ); + fclose($handle); + return strlen( $filecont ); + } + } +} +if ( ! function_exists('scandir') ) { +function scandir($dir,$listDirectories=false, $skipDots=true) { + $dirArray = array(); + if ($handle = opendir($dir)) { + while (false !== ($file = readdir($handle))) { + if (($file != "." && $file != "..") || $skipDots == true) { + if($listDirectories == false) { if(@is_dir($file)) { continue; } } + array_push($dirArray,basename($file)); + } + } + closedir($handle); + } + return $dirArray; +} +} + +/** + * Page generation time + * @package Joomla + */ +class extProfiler { + /** @var int Start time stamp */ + var $start=0; + /** @var string A prefix for mark messages */ + var $prefix=''; + + /** + * Constructor + * @param string A prefix for mark messages + */ + function __construct( $prefix='' ) { + $this->start = $this->getmicrotime(); + $this->prefix = $prefix; + } + + /** + * @return string A format message of the elapsed time + */ + function mark( $label ) { + return sprintf ( "\n
$this->prefix %.3f $label
", $this->getmicrotime() - $this->start ); + } + + /** + * @return float The current time in milliseconds + */ + function getmicrotime(){ + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); + } +} +/** +* Utility class for all HTML drawing classes +* @package eXtplorer +*/ +class extHTML { + static function loadExtJS() { + $scripts[] = array('dir' => 'scripts/editarea/', 'file' => 'edit_area_full_with_plugins.js'); + $scripts[] = array('dir' => 'scripts/extjs3/adapter/ext/', 'file' => 'ext-base.js'); + $scripts[] = array('dir' => 'scripts/extjs3/', 'file' => 'ext-all.js'); + $scripts[] = array('dir' => 'scripts/extjs3-ext/ux.ondemandload/', 'file' => 'scriptloader.js'); + $scripts[] = array('dir' => 'scripts/extjs3-ext/ux.editareaadapater/', 'file' => 'ext-editarea-adapter.js'); + $scripts[] = array('dir' => 'scripts/extjs3-ext/ux.statusbar/', 'file' => 'ext-statusbar.js'); + $scripts[] = array('dir' => 'scripts/extjs3-ext/ux.fileuploadfield/', 'file' => 'ext-fileUploadField.js'); + $scripts[] = array('dir' => 'scripts/extjs3-ext/ux.locationbar/', 'file' => 'Ext.ux.LocationBar.js'); + + $styles[] = array('dir' => 'scripts/extjs3/resources/css/', 'file' => 'ext-all.css'); + $styles[] = array('dir' => 'scripts/extjs3-ext/ux.locationbar/', 'file' => 'LocationBar.css'); + $styles[] = array('dir' => 'scripts/extjs3-ext/ux.fileuploadfield/', 'file' => 'fileuploadfield.css'); + $scriptTag = ''; + if( !empty($_GET['nofetchscript']) || !empty( $_COOKIE['nofetchscript'])) { + foreach( $scripts as $script ) { + $scriptTag .= ''; + } + foreach( $styles as $style ) { + $scriptTag .= ''; + } + } else { + $scriptTag = ' + '; + $scriptTag .= ' + '; + } + $scriptTag .= ' + + '; + + + if (defined('EXT_STANDALONE')) { + $GLOBALS['mainframe']->addcustomheadtag($scriptTag); + } else { + echo $scriptTag; + } + } + + static function makeOption( $value, $text='', $value_name='value', $text_name='text' ) { + $obj = new stdClass; + $obj->$value_name = $value; + $obj->$text_name = trim( $text ) ? $text : $value; + return $obj; + } + + static function writableCell( $folder, $relative=1, $text='', $visible=1 ) { + $writeable = 'Writeable'; + $unwriteable = 'Unwriteable'; + + echo ''; + echo ''; + echo $text; + if ( $visible ) { + echo $folder . '/'; + } + echo ''; + echo ''; + if ( $relative ) { + echo is_writable( "../$folder" ) ? $writeable : $unwriteable; + } else { + echo is_writable( "$folder" ) ? $writeable : $unwriteable; + } + echo ''; + echo ''; + } + + /** + * Generates an HTML select list + * @param array An array of objects + * @param string The value of the HTML name attribute + * @param string Additional HTML attributes for the "; + $count = count( $arr ); + + for ($i=0, $n=$count; $i < $n; $i++ ) { + $k = $arr[$i]->$key; + $t = $arr[$i]->$text; + $id = ( isset($arr[$i]->id) ? @$arr[$i]->id : null); + + $extra = ''; + $extra .= $id ? " id=\"" . $arr[$i]->id . "\"" : ''; + if (is_array( $selected )) { + foreach ($selected as $obj) { + $k2 = $obj->$key; + if ($k == $k2) { + $extra .= " selected=\"selected\""; + break; + } + } + } else { + $extra .= ($k == $selected ? " selected=\"selected\"" : ''); + } + $html .= "\n\t"; + } + $html .= "\n\n"; + + return $html; + } + + /** + * Writes a select list of integers + * @param int The start integer + * @param int The end integer + * @param int The increment + * @param string The value of the HTML name attribute + * @param string Additional HTML attributes for the tag + * @param mixed The key that is selected + * @returns string HTML for the select list values + */ + static function monthSelectList( $tag_name, $tag_attribs, $selected ) { + $arr = array( + extHTML::makeOption( '01', _JAN ), + extHTML::makeOption( '02', _FEB ), + extHTML::makeOption( '03', _MAR ), + extHTML::makeOption( '04', _APR ), + extHTML::makeOption( '05', _MAY ), + extHTML::makeOption( '06', _JUN ), + extHTML::makeOption( '07', _JUL ), + extHTML::makeOption( '08', _AUG ), + extHTML::makeOption( '09', _SEP ), + extHTML::makeOption( '10', _OCT ), + extHTML::makeOption( '11', _NOV ), + extHTML::makeOption( '12', _DEC ) + ); + + return extHTML::selectList( $arr, $tag_name, $tag_attribs, 'value', 'text', $selected ); + } + + /** + * Writes a yes/no select list + * @param string The value of the HTML name attribute + * @param string Additional HTML attributes for the tag + * @param mixed The key that is selected + * @param string The name of the object variable for the option value + * @param string The name of the object variable for the option text + * @returns string HTML for the select list + */ + static function radioList( &$arr, $tag_name, $tag_attribs, $selected=null, $key='value', $text='text' ) { + reset( $arr ); + $html = ""; + for ($i=0, $n=count( $arr ); $i < $n; $i++ ) { + $k = $arr[$i]->$key; + $t = $arr[$i]->$text; + $id = ( isset($arr[$i]->id) ? @$arr[$i]->id : null); + + $extra = ''; + $extra .= $id ? " id=\"" . $arr[$i]->id . "\"" : ''; + if (is_array( $selected )) { + foreach ($selected as $obj) { + $k2 = $obj->$key; + if ($k == $k2) { + $extra .= " selected=\"selected\""; + break; + } + } + } else { + $extra .= ($k == $selected ? " checked=\"checked\"" : ''); + } + $html .= "\n\t"; + $html .= "\n\t"; + } + $html .= "\n"; + + return $html; + } + + /** + * Writes a yes/no radio list + * @param string The value of the HTML name attribute + * @param string Additional HTML attributes for the ";html+="";si=[8,9,10,11,12,14];for(i=0;i"+si[i]+" pt";}html+="";return html;case "syntax_selection":html="";return html;}return "["+button_name+"]";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest(); +else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP"); +else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText; +else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang); +else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);} +else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler); +else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]); +else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;} +else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;} +else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);'); +else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);} +else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x0){results=results.concat(result);}} +else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;} +else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;} +else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);} +else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];} +else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(nav.isOpera&&nav.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(nav.isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}if(t&&t.id){setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);}};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded"; + EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded"; + EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}} +else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded"; +var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false'); +editAreaLoader.template= " EditArea [__CSSRULES__] [__JSCODE__]
[__TOOLBAR__]
 
 
{$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
{$processing}
{$search} {$close_popup}
{$replace} {$move_popup}

{$find_next} {$replace} {$replace_all}
{$close_popup}

Editarea [__EA_VERSION__]


{$shortcuts}:

{$tab}: {$add_tab}
{$shift}+{$tab}: {$remove_tab}
{$ctrl}+f: {$search_command}
{$ctrl}+r: {$replace_command}
{$ctrl}+h: {$highlight}
{$ctrl}+g: {$go_to_line}
{$ctrl}+z: {$undo}
{$ctrl}+y: {$redo}
{$ctrl}+e: {$help}
{$ctrl}+q, {$esc}: {$close_popup}
{$accesskey} E: {$toggle}

{$about_notice}
"; +editAreaLoader.iframe_css= ""; diff --git a/ehcp/extplorer/scripts/editarea/images/autocompletion.gif b/ehcp/extplorer/scripts/editarea/images/autocompletion.gif new file mode 100755 index 0000000..f3dfc2e Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/autocompletion.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/close.gif b/ehcp/extplorer/scripts/editarea/images/close.gif new file mode 100755 index 0000000..679ca2a Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/close.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/fullscreen.gif b/ehcp/extplorer/scripts/editarea/images/fullscreen.gif new file mode 100755 index 0000000..66fa6d9 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/fullscreen.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/go_to_line.gif b/ehcp/extplorer/scripts/editarea/images/go_to_line.gif new file mode 100755 index 0000000..06042ec Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/go_to_line.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/help.gif b/ehcp/extplorer/scripts/editarea/images/help.gif new file mode 100755 index 0000000..51a1ee4 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/help.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/highlight.gif b/ehcp/extplorer/scripts/editarea/images/highlight.gif new file mode 100755 index 0000000..16491f6 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/highlight.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/index.html b/ehcp/extplorer/scripts/editarea/images/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/images/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/images/load.gif b/ehcp/extplorer/scripts/editarea/images/load.gif new file mode 100755 index 0000000..461698f Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/load.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/move.gif b/ehcp/extplorer/scripts/editarea/images/move.gif new file mode 100755 index 0000000..d15f9f5 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/move.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/newdocument.gif b/ehcp/extplorer/scripts/editarea/images/newdocument.gif new file mode 100755 index 0000000..a9d2938 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/newdocument.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/opacity.png b/ehcp/extplorer/scripts/editarea/images/opacity.png new file mode 100755 index 0000000..b4217cb Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/opacity.png differ diff --git a/ehcp/extplorer/scripts/editarea/images/processing.gif b/ehcp/extplorer/scripts/editarea/images/processing.gif new file mode 100755 index 0000000..cce32f2 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/processing.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/redo.gif b/ehcp/extplorer/scripts/editarea/images/redo.gif new file mode 100755 index 0000000..3af9069 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/redo.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/reset_highlight.gif b/ehcp/extplorer/scripts/editarea/images/reset_highlight.gif new file mode 100755 index 0000000..0fa3cb7 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/reset_highlight.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/save.gif b/ehcp/extplorer/scripts/editarea/images/save.gif new file mode 100755 index 0000000..2777beb Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/save.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/search.gif b/ehcp/extplorer/scripts/editarea/images/search.gif new file mode 100755 index 0000000..cfe76b5 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/search.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/smooth_selection.gif b/ehcp/extplorer/scripts/editarea/images/smooth_selection.gif new file mode 100755 index 0000000..8a532e5 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/smooth_selection.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/spacer.gif b/ehcp/extplorer/scripts/editarea/images/spacer.gif new file mode 100755 index 0000000..3884865 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/spacer.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/statusbar_resize.gif b/ehcp/extplorer/scripts/editarea/images/statusbar_resize.gif new file mode 100755 index 0000000..af89d80 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/statusbar_resize.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/undo.gif b/ehcp/extplorer/scripts/editarea/images/undo.gif new file mode 100755 index 0000000..520796d Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/undo.gif differ diff --git a/ehcp/extplorer/scripts/editarea/images/word_wrap.gif b/ehcp/extplorer/scripts/editarea/images/word_wrap.gif new file mode 100755 index 0000000..8f256cc Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/images/word_wrap.gif differ diff --git a/ehcp/extplorer/scripts/editarea/index.html b/ehcp/extplorer/scripts/editarea/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/langs/bg.js b/ehcp/extplorer/scripts/editarea/langs/bg.js new file mode 100755 index 0000000..e088403 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/bg.js @@ -0,0 +1,54 @@ +/* + * Bulgarian translation + * Author: Valentin Hristov + * Company: SOFTKIT Bulgarian + * Site: http://www.softkit-bg.com + */ +editAreaLoader.lang["bg"]={ +new_document: "нов документ", +search_button: "търсене и замяна", +search_command: "търси следващия / отвори прозорец с търсачка", +search: "търсене", +replace: "замяна", +replace_command: "замяна / отвори прозорец с търсачка", +find_next: "намери следващия", +replace_all: "замени всички", +reg_exp: "реголярни изрази", +match_case: "чуствителен към регистъра", +not_found: "няма резултат.", +occurrence_replaced: "замяната е осъществена.", +search_field_empty: "Полето за търсене е празно", +restart_search_at_begin: "До края на документа. Почни с началото.", +move_popup: "премести прозореца с търсачката", +font_size: "--Размер на шрифта--", +go_to_line: "премени към реда", +go_to_line_prompt: "премени към номера на реда:", +undo: "отмени", +redo: "върни", +change_smooth_selection: "включи/изключи някой от функциите за преглед (по красиво, но повече натоварва)", +highlight: "превключване на оцветяване на синтаксиса включена/изключена", +reset_highlight: "въстанови оцветяване на синтаксиса (ако не е синхронизиран с текста)", +word_wrap: "режим на пренасяне на дълги редове", +help: "за програмата", +save: "съхрани", +load: "зареди", +line_abbr: "Стр", +char_abbr: "Стлб", +position: "Позиция", +total: "Всичко", +close_popup: "затвори прозореца", +shortcuts: "Бързи клавиши", +add_tab: "добави табулация в текста", +remove_tab: "премахни табулацията в текста", +about_notice: "Внимание: използвайте функцията оцветяване на синтаксиса само за малки текстове", +toggle: "Превключи редактор", +accesskey: "Бърз клавиш", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Зареждане...", +fullscreen: "на цял екран", +syntax_selection: "--Синтаксис--", +close_tab: "Затвори файла" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/cs.js b/ehcp/extplorer/scripts/editarea/langs/cs.js new file mode 100755 index 0000000..d1a614c --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/cs.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["cs"]={ +new_document: "Nový dokument", +search_button: "Najdi a nahraď", +search_command: "Hledej další / otevři vyhledávací pole", +search: "Hledej", +replace: "Nahraď", +replace_command: "Nahraď / otevři vyhledávací pole", +find_next: "Najdi další", +replace_all: "Nahraď vše", +reg_exp: "platné výrazy", +match_case: "vyhodnocené výrazy", +not_found: "nenalezené.", +occurrence_replaced: "výskyty nahrazené.", +search_field_empty: "Pole vyhledávání je prázdné", +restart_search_at_begin: "Dosažen konec souboru, začínám od začátku.", +move_popup: "Přesuň vyhledávací okno", +font_size: "--Velikost textu--", +go_to_line: "Přejdi na řádek", +go_to_line_prompt: "Přejdi na řádek:", +undo: "krok zpět", +redo: "znovu", +change_smooth_selection: "Povolit nebo zakázat některé ze zobrazených funkcí (účelnější zobrazení požaduje větší zatížení procesoru)", +highlight: "Zvýrazňování syntaxe zap./vyp.", +reset_highlight: "Obnovit zvýraznění (v případě nesrovnalostí)", +word_wrap: "toggle word wrapping mode", +help: "O programu", +save: "Uložit", +load: "Otevřít", +line_abbr: "Ř.", +char_abbr: "S.", +position: "Pozice", +total: "Celkem", +close_popup: "Zavřít okno", +shortcuts: "Zkratky", +add_tab: "Přidat tabulování textu", +remove_tab: "Odtsranit tabulování textu", +about_notice: "Upozornění! Funkce zvýrazňování textu je k dispozici pouze pro malý text", +toggle: "Přepnout editor", +accesskey: "Přístupová klávesa", +tab: "Záložka", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Zpracovávám ...", +fullscreen: "Celá obrazovka", +syntax_selection: "--vyber zvýrazňovač--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/de.js b/ehcp/extplorer/scripts/editarea/langs/de.js new file mode 100755 index 0000000..6ca2ad6 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/de.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["de"]={ +new_document: "Neues Dokument", +search_button: "Suchen und Ersetzen", +search_command: "Weitersuchen / öffne Suchfeld", +search: "Suchen", +replace: "Ersetzen", +replace_command: "Ersetzen / öffne Suchfeld", +find_next: "Weitersuchen", +replace_all: "Ersetze alle Treffer", +reg_exp: "reguläre Ausdrücke", +match_case: "passt auf den Begriff
", +not_found: "Nicht gefunden.", +occurrence_replaced: "Die Vorkommen wurden ersetzt.", +search_field_empty: "Leeres Suchfeld", +restart_search_at_begin: "Ende des zu durchsuchenden Bereiches erreicht. Es wird die Suche von Anfang an fortgesetzt.", //find a shorter translation +move_popup: "Suchfenster bewegen", +font_size: "--Schriftgröße--", +go_to_line: "Gehe zu Zeile", +go_to_line_prompt: "Gehe zu Zeilennummmer:", +undo: "Rückgängig", +redo: "Wiederherstellen", +change_smooth_selection: "Aktiviere/Deaktiviere einige Features (weniger Bildschirmnutzung aber mehr CPU-Belastung)", +highlight: "Syntax Highlighting an- und ausschalten", +reset_highlight: "Highlighting zurücksetzen (falls mit Text nicht konform)", +word_wrap: "Toggle word wrapping mode", +help: "Info", +save: "Speichern", +load: "Öffnen", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Position", +total: "Gesamt", +close_popup: "Popup schließen", +shortcuts: "Shortcuts", +add_tab: "Tab zum Text hinzufügen", +remove_tab: "Tab aus Text entfernen", +about_notice: "Bemerkung: Syntax Highlighting ist nur für kurze Texte", +toggle: "Editor an- und ausschalten", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "In Bearbeitung...", +fullscreen: "Full-Screen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/dk.js b/ehcp/extplorer/scripts/editarea/langs/dk.js new file mode 100755 index 0000000..bb1d7b2 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/dk.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["dk"]={ +new_document: "nyt tomt dokument", +search_button: "søg og erstat", +search_command: "find næste / åben søgefelt", +search: "søg", +replace: "erstat", +replace_command: "erstat / åben søgefelt", +find_next: "find næste", +replace_all: "erstat alle", +reg_exp: "regular expressions", +match_case: "forskel på store/små bogstaver
", +not_found: "not found.", +occurrence_replaced: "occurences replaced.", +search_field_empty: "Search field empty", +restart_search_at_begin: "End of area reached. Restart at begin.", +move_popup: "flyt søgepopup", +font_size: "--Skriftstørrelse--", +go_to_line: "gå til linie", +go_to_line_prompt: "gå til linienummer:", +undo: "fortryd", +redo: "gentag", +change_smooth_selection: "slå display funktioner til/fra (smartere display men mere CPU krævende)", +highlight: "slå syntax highlight til/fra", +reset_highlight: "nulstil highlight (hvis den er desynkroniseret fra teksten)", +word_wrap: "toggle word wrapping mode", +help: "om", +save: "gem", +load: "hent", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Position", +total: "Total", +close_popup: "luk popup", +shortcuts: "Genveje", +add_tab: "tilføj tabulation til tekst", +remove_tab: "fjern tabulation fra tekst", +about_notice: "Husk: syntax highlight funktionen bør kun bruge til små tekster", +toggle: "Slå editor til / fra", +accesskey: "Accesskey", +tab: "Tab", +shift: "Skift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Processing...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/en.js b/ehcp/extplorer/scripts/editarea/langs/en.js new file mode 100755 index 0000000..d2fa561 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/en.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["en"]={ +new_document: "new empty document", +search_button: "search and replace", +search_command: "search next / open search area", +search: "search", +replace: "replace", +replace_command: "replace / open search area", +find_next: "find next", +replace_all: "replace all", +reg_exp: "regular expressions", +match_case: "match case", +not_found: "not found.", +occurrence_replaced: "occurences replaced.", +search_field_empty: "Search field empty", +restart_search_at_begin: "End of area reached. Restart at begin.", +move_popup: "move search popup", +font_size: "--Font size--", +go_to_line: "go to line", +go_to_line_prompt: "go to line number:", +undo: "undo", +redo: "redo", +change_smooth_selection: "enable/disable some display features (smarter display but more CPU charge)", +highlight: "toggle syntax highlight on/off", +reset_highlight: "reset highlight (if desyncronized from text)", +word_wrap: "toggle word wrapping mode", +help: "about", +save: "save", +load: "load", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Position", +total: "Total", +close_popup: "close popup", +shortcuts: "Shortcuts", +add_tab: "add tabulation to text", +remove_tab: "remove tabulation to text", +about_notice: "Notice: syntax highlight function is only for small text", +toggle: "Toggle editor", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Processing...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/eo.js b/ehcp/extplorer/scripts/editarea/langs/eo.js new file mode 100755 index 0000000..77230d1 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/eo.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["eo"]={ +new_document: "nova dokumento (vakigas la enhavon)", +search_button: "serĉi / anstataŭigi", +search_command: "pluserĉi / malfermi la serĉo-fenestron", +search: "serĉi", +replace: "anstataŭigi", +replace_command: "anstataŭigi / malfermi la serĉo-fenestron", +find_next: "serĉi", +replace_all: "anstataŭigi ĉion", +reg_exp: "regula esprimo", +match_case: "respekti la usklecon", +not_found: "ne trovita.", +occurrence_replaced: "anstataŭigoj plenumitaj.", +search_field_empty: "La kampo estas malplena.", +restart_search_at_begin: "Fino de teksto ĝisrirata, ĉu daŭrigi el la komenco?", +move_popup: "movi la serĉo-fenestron", +font_size: "--Tipara grando--", +go_to_line: "iri al la linio", +go_to_line_prompt: "iri al la linio numero:", +undo: "rezigni", +redo: "refari", +change_smooth_selection: "ebligi/malebligi la funkcioj de vidigo (pli bona vidigo, sed pli da ŝarĝo de la ĉeforgano)", +highlight: "ebligi/malebligi la sintaksan kolorigon", +reset_highlight: "repravalorizi la sintaksan kolorigon (se malsinkronigon de la teksto)", +word_wrap: "toggle word wrapping mode", +help: "pri", +save: "registri", +load: "ŝarĝi", +line_abbr: "Ln", +char_abbr: "Sg", +position: "Pozicio", +total: "Sumo", +close_popup: "fermi la ŝprucfenestron", +shortcuts: "Fulmoklavo", +add_tab: "aldoni tabon en la tekston", +remove_tab: "forigi tablon el la teksto", +about_notice: "Noto: la sintaksa kolorigo estas nur prikalkulita por mallongaj tekstoj.", +toggle: "baskuligi la redaktilon", +accesskey: "Fulmoklavo", +tab: "Tab", +shift: "Maj", +ctrl: "Ktrl", +esc: "Esk", +processing: "ŝargante...", +fullscreen: "plenekrane", +syntax_selection: "--Sintakso--", +close_tab: "Fermi la dosieron" +}; \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/langs/es.js b/ehcp/extplorer/scripts/editarea/langs/es.js new file mode 100755 index 0000000..83dd507 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/es.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["es"]={ +new_document: "nuevo documento vacío", +search_button: "buscar y reemplazar", +search_command: "buscar siguiente / abrir área de búsqueda", +search: "buscar", +replace: "reemplazar", +replace_command: "reemplazar / abrir área de búsqueda", +find_next: "encontrar siguiente", +replace_all: "reemplazar todos", +reg_exp: "expresiones regulares", +match_case: "coincidir capitalización", +not_found: "no encontrado.", +occurrence_replaced: "ocurrencias reemplazadas.", +search_field_empty: "Campo de búsqueda vacío", +restart_search_at_begin: "Se ha llegado al final del área. Se va a seguir desde el principio.", +move_popup: "mover la ventana de búsqueda", +font_size: "--Tamaño de la fuente--", +go_to_line: "ir a la línea", +go_to_line_prompt: "ir a la línea número:", +undo: "deshacer", +redo: "rehacer", +change_smooth_selection: "activar/desactivar algunas características de visualización (visualización más inteligente pero más carga de CPU)", +highlight: "intercambiar resaltado de sintaxis", +reset_highlight: "reinicializar resaltado (si no esta sincronizado con el texto)", +word_wrap: "toggle word wrapping mode", +help: "acerca", +save: "guardar", +load: "cargar", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Posición", +total: "Total", +close_popup: "recuadro de cierre", +shortcuts: "Atajos", +add_tab: "añadir tabulado al texto", +remove_tab: "borrar tabulado del texto", +about_notice: "Aviso: el resaltado de sintaxis sólo funciona para texto pequeño", +toggle: "Cambiar editor", +accesskey: "Tecla de acceso", +tab: "Tab", +shift: "Mayúsc", +ctrl: "Ctrl", +esc: "Esc", +processing: "Procesando...", +fullscreen: "pantalla completa", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/fi.js b/ehcp/extplorer/scripts/editarea/langs/fi.js new file mode 100755 index 0000000..496b23d --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/fi.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["fi"]={ +new_document: "uusi tyhjä dokumentti", +search_button: "etsi ja korvaa", +search_command: "etsi seuraava / avaa etsintävalikko", +search: "etsi", +replace: "korvaa", +replace_command: "korvaa / avaa etsintävalikko", +find_next: "etsi seuraava", +replace_all: "korvaa kaikki", +reg_exp: "säännölliset lausekkeet", +match_case: "täsmää kirjainkokoon", +not_found: "ei löytynyt.", +occurrence_replaced: "esiintymää korvattu.", +search_field_empty: "Haettava merkkijono on tyhjä", +restart_search_at_begin: "Alueen loppu saavutettiin. Aloitetaan alusta.", +move_popup: "siirrä etsintävalikkoa", +font_size: "--Fontin koko--", +go_to_line: "siirry riville", +go_to_line_prompt: "mene riville:", +undo: "peruuta", +redo: "tee uudelleen", +change_smooth_selection: "kytke/sammuta joitakin näyttötoimintoja (Älykkäämpi toiminta, mutta suurempi CPU kuormitus)", +highlight: "kytke syntaksikorostus päälle/pois", +reset_highlight: "resetoi syntaksikorostus (jos teksti ei ole synkassa korostuksen kanssa)", +word_wrap: "toggle word wrapping mode", +help: "tietoja", +save: "tallenna", +load: "lataa", +line_abbr: "Rv", +char_abbr: "Pos", +position: "Paikka", +total: "Yhteensä", +close_popup: "sulje valikko", +shortcuts: "Pikatoiminnot", +add_tab: "lisää sisennys tekstiin", +remove_tab: "poista sisennys tekstistä", +about_notice: "Huomautus: syntaksinkorostus toimii vain pienelle tekstille", +toggle: "Kytke editori", +accesskey: "Pikanäppäin", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Odota...", +fullscreen: "koko ruutu", +syntax_selection: "--Syntaksi--", +close_tab: "Sulje tiedosto" +}; \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/langs/fr.js b/ehcp/extplorer/scripts/editarea/langs/fr.js new file mode 100755 index 0000000..16cf88f --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/fr.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["fr"]={ +new_document: "nouveau document (efface le contenu)", +search_button: "rechercher / remplacer", +search_command: "rechercher suivant / ouvrir la fenêtre de recherche", +search: "rechercher", +replace: "remplacer", +replace_command: "remplacer / ouvrir la fenêtre de recherche", +find_next: "rechercher", +replace_all: "tout remplacer", +reg_exp: "expr. régulière", +match_case: "respecter la casse", +not_found: "pas trouvé.", +occurrence_replaced: "remplacements éffectués.", +search_field_empty: "Le champ de recherche est vide.", +restart_search_at_begin: "Fin du texte atteint, poursuite au début.", +move_popup: "déplacer la fenêtre de recherche", +font_size: "--Taille police--", +go_to_line: "aller à la ligne", +go_to_line_prompt: "aller a la ligne numero:", +undo: "annuler", +redo: "refaire", +change_smooth_selection: "activer/désactiver des fonctions d'affichage (meilleur affichage mais plus de charge processeur)", +highlight: "activer/désactiver la coloration syntaxique", +reset_highlight: "réinitialiser la coloration syntaxique (si désyncronisée du texte)", +word_wrap: "activer/désactiver les retours à la ligne automatiques", +help: "à propos", +save: "sauvegarder", +load: "charger", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Position", +total: "Total", +close_popup: "fermer le popup", +shortcuts: "Racourcis clavier", +add_tab: "ajouter une tabulation dans le texte", +remove_tab: "retirer une tabulation dans le texte", +about_notice: "Note: la coloration syntaxique n'est prévue que pour de courts textes.", +toggle: "basculer l'éditeur", +accesskey: "Accesskey", +tab: "Tab", +shift: "Maj", +ctrl: "Ctrl", +esc: "Esc", +processing: "chargement...", +fullscreen: "plein écran", +syntax_selection: "--Syntaxe--", +close_tab: "Fermer le fichier" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/hr.js b/ehcp/extplorer/scripts/editarea/langs/hr.js new file mode 100755 index 0000000..6951bb6 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/hr.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["hr"]={ +new_document: "Novi dokument", +search_button: "Traži i izmijeni", +search_command: "Traži dalje / Otvori prozor za traženje", +search: "Traži", +replace: "Izmijeni", +replace_command: "Izmijeni / Otvori prozor za traženje", +find_next: "Traži dalje", +replace_all: "Izmjeni sve", +reg_exp: "Regularni izrazi", +match_case: "Bitna vel. slova", +not_found: "nije naðeno.", +occurrence_replaced: "izmjenjenih.", +search_field_empty: "Prazno polje za traženje!", +restart_search_at_begin: "Došao do kraja. Poèeo od poèetka.", +move_popup: "Pomakni prozor", +font_size: "--Velièina teksta--", +go_to_line: "Odi na redak", +go_to_line_prompt: "Odi na redak:", +undo: "Vrati natrag", +redo: "Napravi ponovo", +change_smooth_selection: "Ukljuèi/iskljuèi neke moguænosti prikaza (pametniji prikaz, ali zagušeniji CPU)", +highlight: "Ukljuèi/iskljuèi bojanje sintakse", +reset_highlight: "Ponovi kolorizaciju (ako je nesinkronizirana s tekstom)", +word_wrap: "toggle word wrapping mode", +help: "O edit_area", +save: "Spremi", +load: "Uèitaj", +line_abbr: "Ln", +char_abbr: "Zn", +position: "Pozicija", +total: "Ukupno", +close_popup: "Zatvori prozor", +shortcuts: "Kratice", +add_tab: "Dodaj tabulaciju", +remove_tab: "Makni tabulaciju", +about_notice: "Napomena: koloriziranje sintakse je samo za kratke kodove", +toggle: "Prebaci naèin ureðivanja", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Procesiram...", +fullscreen: "Cijeli prozor", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/index.html b/ehcp/extplorer/scripts/editarea/langs/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/langs/it.js b/ehcp/extplorer/scripts/editarea/langs/it.js new file mode 100755 index 0000000..356e4c8 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/it.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["it"]={ +new_document: "nuovo documento vuoto", +search_button: "cerca e sostituisci", +search_command: "trova successivo / apri finestra di ricerca", +search: "cerca", +replace: "sostituisci", +replace_command: "sostituisci / apri finestra di ricerca", +find_next: "trova successivo", +replace_all: "sostituisci tutti", +reg_exp: "espressioni regolari", +match_case: "confronta maiuscole/minuscole
", +not_found: "non trovato.", +occurrence_replaced: "occorrenze sostituite.", +search_field_empty: "Campo ricerca vuoto", +restart_search_at_begin: "Fine del testo raggiunta. Ricomincio dall'inizio.", +move_popup: "sposta popup di ricerca", +font_size: "-- Dimensione --", +go_to_line: "vai alla linea", +go_to_line_prompt: "vai alla linea numero:", +undo: "annulla", +redo: "ripeti", +change_smooth_selection: "abilita/disabilita alcune caratteristiche della visualizzazione", +highlight: "abilita/disabilita colorazione della sintassi", +reset_highlight: "aggiorna colorazione (se non sincronizzata)", +word_wrap: "toggle word wrapping mode", +help: "informazioni su...", +save: "salva", +load: "carica", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Posizione", +total: "Totale", +close_popup: "chiudi popup", +shortcuts: "Scorciatoie", +add_tab: "aggiungi tabulazione", +remove_tab: "rimuovi tabulazione", +about_notice: "Avviso: la colorazione della sintassi vale solo con testo piccolo", +toggle: "Abilita/disabilita editor", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "In corso...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/ja.js b/ehcp/extplorer/scripts/editarea/langs/ja.js new file mode 100755 index 0000000..35d5f0a --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/ja.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["ja"]={ +new_document: "新規作成", +search_button: "検索・置換", +search_command: "次を検索 / 検索窓を表示", +search: "検索", +replace: "置換", +replace_command: "置換 / 置換窓を表示", +find_next: "次を検索", +replace_all: "全置換", +reg_exp: "正規表現", +match_case: "大文字小文字の区別", +not_found: "見つかりません。", +occurrence_replaced: "置換しました。", +search_field_empty: "検索対象文字列が空です。", +restart_search_at_begin: "終端に達しました、始めに戻ります", +move_popup: "検索窓を移動", +font_size: "--フォントサイズ--", +go_to_line: "指定行へ移動", +go_to_line_prompt: "指定行へ移動します:", +undo: "元に戻す", +redo: "やり直し", +change_smooth_selection: "スムース表示の切り替え(CPUを使います)", +highlight: "構文強調表示の切り替え", +reset_highlight: "構文強調表示のリセット", +word_wrap: "toggle word wrapping mode", +help: "ヘルプを表示", +save: "保存", +load: "読み込み", +line_abbr: "行", +char_abbr: "文字", +position: "位置", +total: "合計", +close_popup: "ポップアップを閉じる", +shortcuts: "ショートカット", +add_tab: "タブを挿入する", +remove_tab: "タブを削除する", +about_notice: "注意:構文強調表示は短いテキストでしか有効に機能しません。", +toggle: "テキストエリアとeditAreaの切り替え", +accesskey: "アクセスキー", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "処理中です...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/mk.js b/ehcp/extplorer/scripts/editarea/langs/mk.js new file mode 100755 index 0000000..b2fb0e4 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/mk.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["mk"]={ +new_document: "Нов документ", +search_button: "Најди и замени", +search_command: "Барај следно / Отвори нов прозорец за пребарување", +search: "Барај", +replace: "Замени", +replace_command: "Замени / Отвори прозорец за пребарување", +find_next: "најди следно", +replace_all: "Замени ги сите", +reg_exp: "Регуларни изрази", +match_case: "Битна е големината на буквите", +not_found: "не е пронајдено.", +occurrence_replaced: "замени.", +search_field_empty: "Полето за пребарување е празно", +restart_search_at_begin: "Крај на областа. Стартувај од почеток.", +move_popup: "Помести го прозорецот", +font_size: "--Големина на текстот--", +go_to_line: "Оди на линија", +go_to_line_prompt: "Оди на линија со број:", +undo: "Врати", +redo: "Повтори", +change_smooth_selection: "Вклучи/исклучи некои карактеристики за приказ (попаметен приказ, но поголемо оптеретување за процесорот)", +highlight: "Вклучи/исклучи осветлување на синтакса", +reset_highlight: "Ресетирај го осветлувањето на синтакса (доколку е десинхронизиранo со текстот)", +word_wrap: "toggle word wrapping mode", +help: "За", +save: "Зачувај", +load: "Вчитај", +line_abbr: "Лн", +char_abbr: "Зн", +position: "Позиција", +total: "Вкупно", +close_popup: "Затвори го прозорецот", +shortcuts: "Кратенки", +add_tab: "Додај табулација на текстот", +remove_tab: "Отстрани ја табулацијата", +about_notice: "Напомена: Осветлувањето на синтанса е само за краток текст", +toggle: "Смени начин на уредување", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Обработувам...", +fullscreen: "Цел прозорец", +syntax_selection: "--Синтакса--", +close_tab: "Избери датотека" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/nl.js b/ehcp/extplorer/scripts/editarea/langs/nl.js new file mode 100755 index 0000000..bcd13d3 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/nl.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["nl"]={ +new_document: "nieuw leeg document", +search_button: "zoek en vervang", +search_command: "zoek volgende / zoekscherm openen", +search: "zoek", +replace: "vervang", +replace_command: "vervang / zoekscherm openen", +find_next: "volgende vinden", +replace_all: "alles vervangen", +reg_exp: "reguliere expressies", +match_case: "hoofdletter gevoelig", +not_found: "niet gevonden.", +occurrence_replaced: "object vervangen.", +search_field_empty: "Zoek veld leeg", +restart_search_at_begin: "Niet meer instanties gevonden, begin opnieuw", +move_popup: "versleep zoek scherm", +font_size: "--Letter grootte--", +go_to_line: "Ga naar regel", +go_to_line_prompt: "Ga naar regel nummer:", +undo: "Ongedaan maken", +redo: "Opnieuw doen", +change_smooth_selection: "zet wat schermopties aan/uit (kan langzamer zijn)", +highlight: "zet syntax highlight aan/uit", +reset_highlight: "reset highlight (indien gedesynchronizeerd)", +word_wrap: "toggle word wrapping mode", +help: "informatie", +save: "opslaan", +load: "laden", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Positie", +total: "Totaal", +close_popup: "Popup sluiten", +shortcuts: "Snelkoppelingen", +add_tab: "voeg tabs toe in tekst", +remove_tab: "verwijder tabs uit tekst", +about_notice: "Notitie: syntax highlight functie is alleen voor kleine tekst", +toggle: "geavanceerde bewerkingsopties", +accesskey: "Accessknop", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Verwerken...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/pl.js b/ehcp/extplorer/scripts/editarea/langs/pl.js new file mode 100755 index 0000000..c879888 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/pl.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["pl"]={ +new_document: "nowy dokument", +search_button: "znajdź i zamień", +search_command: "znajdź następny", +search: "znajdź", +replace: "zamień", +replace_command: "zamień", +find_next: "następny", +replace_all: "zamień wszystko", +reg_exp: "wyrażenie regularne", +match_case: "uwzględnij wielkość liter
", +not_found: "nie znaleziono.", +occurrence_replaced: "wystąpień zamieniono.", +search_field_empty: "Nie wprowadzono tekstu", +restart_search_at_begin: "Koniec dokumentu. Wyszukiwanie od początku.", +move_popup: "przesuń okienko wyszukiwania", +font_size: "Rozmiar", +go_to_line: "idź do linii", +go_to_line_prompt: "numer linii:", +undo: "cofnij", +redo: "przywróć", +change_smooth_selection: "włącz/wyłącz niektóre opcje wyglądu (zaawansowane opcje wyglądu obciążają procesor)", +highlight: "włącz/wyłącz podświetlanie składni", +reset_highlight: "odśwież podświetlanie składni (jeśli rozsynchronizowało się z tekstem)", +word_wrap: "toggle word wrapping mode", +help: "o programie", +save: "zapisz", +load: "otwórz", +line_abbr: "Ln", +char_abbr: "Zn", +position: "Pozycja", +total: "W sumie", +close_popup: "zamknij okienko", +shortcuts: "Skróty klawiaturowe", +add_tab: "dodaj wcięcie do zaznaczonego tekstu", +remove_tab: "usuń wcięcie", +about_notice: "Uwaga: podświetlanie składni nie jest zalecane dla długich tekstów", +toggle: "Włącz/wyłącz edytor", +accesskey: "Alt+", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Przetwarzanie...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/pt.js b/ehcp/extplorer/scripts/editarea/langs/pt.js new file mode 100755 index 0000000..32cf015 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/pt.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["pt"]={ +new_document: "Novo documento", +search_button: "Localizar e substituir", +search_command: "Localizar próximo", +search: "Localizar", +replace: "Substituir", +replace_command: "Substituir", +find_next: "Localizar", +replace_all: "Subst. tudo", +reg_exp: "Expressões regulares", +match_case: "Diferenciar maiúsculas e minúsculas", +not_found: "Não encontrado.", +occurrence_replaced: "Ocorrências substituidas", +search_field_empty: "Campo localizar vazio.", +restart_search_at_begin: "Fim das ocorrências. Recomeçar do inicio.", +move_popup: "Mover janela", +font_size: "--Tamanho da fonte--", +go_to_line: "Ir para linha", +go_to_line_prompt: "Ir para a linha:", +undo: "Desfazer", +redo: "Refazer", +change_smooth_selection: "Opções visuais", +highlight: "Cores de sintaxe", +reset_highlight: "Resetar cores (se não sincronizado)", +word_wrap: "toggle word wrapping mode", +help: "Sobre", +save: "Salvar", +load: "Carregar", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Posição", +total: "Total", +close_popup: "Fechar", +shortcuts: "Shortcuts", +add_tab: "Adicionar tabulação", +remove_tab: "Remover tabulação", +about_notice: "Atenção: Cores de sintaxe são indicados somente para textos pequenos", +toggle: "Exibir editor", +accesskey: "Accesskey", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Processando...", +fullscreen: "fullscreen", +syntax_selection: "--Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/ru.js b/ehcp/extplorer/scripts/editarea/langs/ru.js new file mode 100755 index 0000000..fcd381d --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/ru.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["ru"]={ +new_document: "новый пустой документ", +search_button: "поиск и замена", +search_command: "искать следующий / открыть панель поиска", +search: "поиск", +replace: "замена", +replace_command: "заменить / открыть панель поиска", +find_next: "найти следующее", +replace_all: "заменить все", +reg_exp: "регулярное выражение", +match_case: "учитывать регистр", +not_found: "не найдено.", +occurrence_replaced: "вхождение заменено.", +search_field_empty: "Поле поиска пустое", +restart_search_at_begin: "Достигнут конец документа. Начинаю с начала.", +move_popup: "переместить окно поиска", +font_size: "--Размер шрифта--", +go_to_line: "перейти к строке", +go_to_line_prompt: "перейти к строке номер:", +undo: "отменить", +redo: "вернуть", +change_smooth_selection: "включить/отключить некоторые функции просмотра (более красиво, но больше использует процессор)", +highlight: "переключить подсветку синтаксиса включена/выключена", +reset_highlight: "восстановить подсветку (если разсинхронизирована от текста)", +word_wrap: "toggle word wrapping mode", +help: "о программе", +save: "сохранить", +load: "загрузить", +line_abbr: "Стр", +char_abbr: "Стлб", +position: "Позиция", +total: "Всего", +close_popup: "закрыть всплывающее окно", +shortcuts: "Горячие клавиши", +add_tab: "добавить табуляцию в текст", +remove_tab: "убрать табуляцию из текста", +about_notice: "Внимание: функция подсветки синтаксиса только для небольших текстов", +toggle: "Переключить редактор", +accesskey: "Горячая клавиша", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Обработка...", +fullscreen: "полный экран", +syntax_selection: "--Синтакс--", +close_tab: "Закрыть файл" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/sk.js b/ehcp/extplorer/scripts/editarea/langs/sk.js new file mode 100755 index 0000000..59f18b4 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/sk.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["sk"]={ +new_document: "nový prázdy dokument", +search_button: "vyhľadaj a nahraď", +search_command: "hľadaj ďalsšie / otvor vyhľadávacie pole", +search: "hľadaj", +replace: "nahraď", +replace_command: "nahraď / otvor vyhľadávacie pole", +find_next: "nájdi ďalšie", +replace_all: "nahraď všetko", +reg_exp: "platné výrazy", +match_case: "zhodujúce sa výrazy", +not_found: "nenájdené.", +occurrence_replaced: "výskyty nahradené.", +search_field_empty: "Pole vyhľadávanie je prádzne", +restart_search_at_begin: "End of area reached. Restart at begin.", +move_popup: "presuň vyhľadávacie okno", +font_size: "--Veľkosť textu--", +go_to_line: "prejdi na riadok", +go_to_line_prompt: "prejdi na riadok:", +undo: "krok späť", +redo: "prepracovať", +change_smooth_selection: "povoliť/zamietnúť niektoré zo zobrazených funkcií (účelnejšie zobrazenie vyžaduje väčšie zaťaženie procesora CPU)", +highlight: "prepnúť zvýrazňovanie syntaxe zap/vyp", +reset_highlight: "zrušiť zvýrazňovanie (ak je nesynchronizované s textom)", +word_wrap: "toggle word wrapping mode", +help: "o programe", +save: "uložiť", +load: "načítať", +line_abbr: "Ln", +char_abbr: "Ch", +position: "Pozícia", +total: "Spolu", +close_popup: "zavrieť okno", +shortcuts: "Skratky", +add_tab: "pridať tabulovanie textu", +remove_tab: "odstrániť tabulovanie textu", +about_notice: "Upozornenie: funkcia zvýrazňovania syntaxe je dostupná iba pre malý text", +toggle: "Prepnúť editor", +accesskey: "Accesskey", +tab: "Záložka", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "Spracúvam...", +fullscreen: "cel=a obrazovka", +syntax_selection: "--Vyber Syntax--", +close_tab: "Close file" +}; diff --git a/ehcp/extplorer/scripts/editarea/langs/zh.js b/ehcp/extplorer/scripts/editarea/langs/zh.js new file mode 100755 index 0000000..612fa03 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/langs/zh.js @@ -0,0 +1,48 @@ +editAreaLoader.lang["zh"]={ +new_document: "新建空白文档", +search_button: "查找与替换", +search_command: "查找下一个 / 打开查找框", +search: "查找", +replace: "替换", +replace_command: "替换 / 打开查找框", +find_next: "查找下一个", +replace_all: "全部替换", +reg_exp: "正则表达式", +match_case: "匹配大小写", +not_found: "未找到.", +occurrence_replaced: "处被替换.", +search_field_empty: "查找框没有内容", +restart_search_at_begin: "已到到文档末尾. 从头重新查找.", +move_popup: "移动查找对话框", +font_size: "--字体大小--", +go_to_line: "转到行", +go_to_line_prompt: "转到行:", +undo: "恢复", +redo: "重做", +change_smooth_selection: "启用/禁止一些显示特性(更好看但更耗费资源)", +highlight: "启用/禁止语法高亮", +reset_highlight: "重置语法高亮(当文本显示不同步时)", +word_wrap: "toggle word wrapping mode", +help: "关于", +save: "保存", +load: "加载", +line_abbr: "行", +char_abbr: "字符", +position: "位置", +total: "总计", +close_popup: "关闭对话框", +shortcuts: "快捷键", +add_tab: "添加制表符(Tab)", +remove_tab: "移除制表符(Tab)", +about_notice: "注意:语法高亮功能仅用于较少内容的文本(文件内容太大会导致浏览器反应慢)", +toggle: "切换编辑器", +accesskey: "快捷键", +tab: "Tab", +shift: "Shift", +ctrl: "Ctrl", +esc: "Esc", +processing: "正在处理中...", +fullscreen: "全屏编辑", +syntax_selection: "--语法--", +close_tab: "关闭文件" +}; diff --git a/ehcp/extplorer/scripts/editarea/license.txt b/ehcp/extplorer/scripts/editarea/license.txt new file mode 100755 index 0000000..5faba9d --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/license.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ehcp/extplorer/scripts/editarea/license_lgpl.txt b/ehcp/extplorer/scripts/editarea/license_lgpl.txt new file mode 100755 index 0000000..9e29e89 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/license_lgpl.txt @@ -0,0 +1,458 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/charmap.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/charmap.js new file mode 100755 index 0000000..df42822 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/charmap.js @@ -0,0 +1,90 @@ +/** + * Charmap plugin + * by Christophe Dolivet + * v0.1 (2006/09/22) + * + * + * This plugin allow to use a visual keyboard allowing to insert any UTF-8 characters in the text. + * + * - plugin name to add to the plugin list: "charmap" + * - plugin name to add to the toolbar list: "charmap" + * - possible parameters to add to EditAreaLoader.init(): + * "charmap_default": (String) define the name of the default character range displayed on popup display + * (default: "arrows") + * + * + */ + +var EditArea_charmap= { + /** + * Get called once this file is loaded (editArea still not initialized) + * + * @return nothing + */ + init: function(){ + this.default_language="Arrows"; + } + + /** + * Returns the HTML code for a specific control string or false if this plugin doesn't have that control. + * A control can be a button, select list or any other HTML item to present in the EditArea user interface. + * Language variables such as {$lang_somekey} will also be replaced with contents from + * the language packs. + * + * @param {string} ctrl_name: the name of the control to add + * @return HTML code for a specific control or false. + * @type string or boolean + */ + ,get_control_html: function(ctrl_name){ + switch(ctrl_name){ + case "charmap": + // Control id, button img, command + return parent.editAreaLoader.get_button_html('charmap_but', 'charmap.gif', 'charmap_press', false, this.baseURL); + } + return false; + } + /** + * Get called once EditArea is fully loaded and initialised + * + * @return nothing + */ + ,onload: function(){ + if(editArea.settings["charmap_default"] && editArea.settings["charmap_default"].length>0) + this.default_language= editArea.settings["charmap_default"]; + } + + /** + * Is called each time the user touch a keyboard key. + * + * @param (event) e: the keydown event + * @return true - pass to next handler in chain, false - stop chain execution + * @type boolean + */ + ,onkeydown: function(e){ + + } + + /** + * Executes a specific command, this function handles plugin commands. + * + * @param {string} cmd: the name of the command being executed + * @param {unknown} param: the parameter of the command + * @return true - pass to next handler in chain, false - stop chain execution + * @type boolean + */ + ,execCommand: function(cmd, param){ + // Handle commands + switch(cmd){ + case "charmap_press": + win= window.open(this.baseURL+"popup.html", "charmap", "width=500,height=270,scrollbars=yes,resizable=yes"); + win.focus(); + return false; + } + // Pass to next handler in chain + return true; + } + +}; + +// Adds the plugin class to the list of available EditArea plugins +editArea.add_plugin("charmap", EditArea_charmap); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/css/charmap.css b/ehcp/extplorer/scripts/editarea/plugins/charmap/css/charmap.css new file mode 100755 index 0000000..fc8d666 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/css/charmap.css @@ -0,0 +1,64 @@ +body{ + background-color: #F0F0EE; + font: 12px monospace, sans-serif; +} + +select{ + background-color: #F9F9F9; + border: solid 1px #888888; +} + +h1, h2, h3, h4, h5, h6{ + margin: 0; + padding: 0; + color: #2B6FB6; +} + +h1{ + font-size: 1.5em; +} + +div#char_list{ + height: 200px; + overflow: auto; + padding: 1px; + border: 1px solid #0A246A; + background-color: #F9F9F9; + clear: both; + margin-top: 5px; +} + +a.char{ + display: block; + float: left; + width: 20px; + height: 20px; + line-height: 20px; + margin: 1px; + border: solid 1px #888888; + text-align: center; + cursor: pointer; +} + +a.char:hover{ + background-color: #CCCCCC; +} + +.preview{ + border: solid 1px #888888; + width: 50px; + padding: 2px 5px; + height: 35px; + line-height: 35px; + text-align:center; + background-color: #CCCCCC; + font-size: 2em; + float: right; + font-weight: bold; + margin: 0 0 5px 5px; +} + +#preview_code{ + font-size: 1.1em; + width: 70px; +} diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/css/index.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/css/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/images/Thumbs.db b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/Thumbs.db new file mode 100755 index 0000000..2e7c918 Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/Thumbs.db differ diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/images/charmap.gif b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/charmap.gif new file mode 100755 index 0000000..3cdc4ac Binary files /dev/null and b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/charmap.gif differ diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/images/index.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/images/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/index.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/index.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/map.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/map.js new file mode 100755 index 0000000..6c194a4 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/jscripts/map.js @@ -0,0 +1,373 @@ +var editArea; + + +/** + * UTF-8 list taken from http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec + */ + + +/* +var char_range_list={ +"Basic Latin":"0021,007F", +"Latin-1 Supplement":"0080,00FF", +"Latin Extended-A":"0100,017F", +"Latin Extended-B":"0180,024F", +"IPA Extensions":"0250,02AF", +"Spacing Modifier Letters":"02B0,02FF", + +"Combining Diacritical Marks":"0300,036F", +"Greek and Coptic":"0370,03FF", +"Cyrillic":"0400,04FF", +"Cyrillic Supplement":"0500,052F", +"Armenian":"0530,058F", +"Hebrew":"0590,05FF", +"Arabic":"0600,06FF", +"Syriac":"0700,074F", +"Arabic Supplement":"0750,077F", + +"Thaana":"0780,07BF", +"Devanagari":"0900,097F", +"Bengali":"0980,09FF", +"Gurmukhi":"0A00,0A7F", +"Gujarati":"0A80,0AFF", +"Oriya":"0B00,0B7F", +"Tamil":"0B80,0BFF", +"Telugu":"0C00,0C7F", +"Kannada":"0C80,0CFF", + +"Malayalam":"0D00,0D7F", +"Sinhala":"0D80,0DFF", +"Thai":"0E00,0E7F", +"Lao":"0E80,0EFF", +"Tibetan":"0F00,0FFF", +"Myanmar":"1000,109F", +"Georgian":"10A0,10FF", +"Hangul Jamo":"1100,11FF", +"Ethiopic":"1200,137F", + +"Ethiopic Supplement":"1380,139F", +"Cherokee":"13A0,13FF", +"Unified Canadian Aboriginal Syllabics":"1400,167F", +"Ogham":"1680,169F", +"Runic":"16A0,16FF", +"Tagalog":"1700,171F", +"Hanunoo":"1720,173F", +"Buhid":"1740,175F", +"Tagbanwa":"1760,177F", + +"Khmer":"1780,17FF", +"Mongolian":"1800,18AF", +"Limbu":"1900,194F", +"Tai Le":"1950,197F", +"New Tai Lue":"1980,19DF", +"Khmer Symbols":"19E0,19FF", +"Buginese":"1A00,1A1F", +"Phonetic Extensions":"1D00,1D7F", +"Phonetic Extensions Supplement":"1D80,1DBF", + +"Combining Diacritical Marks Supplement":"1DC0,1DFF", +"Latin Extended Additional":"1E00,1EFF", +"Greek Extended":"1F00,1FFF", +"General Punctuation":"2000,206F", +"Superscripts and Subscripts":"2070,209F", +"Currency Symbols":"20A0,20CF", +"Combining Diacritical Marks for Symbols":"20D0,20FF", +"Letterlike Symbols":"2100,214F", +"Number Forms":"2150,218F", + +"Arrows":"2190,21FF", +"Mathematical Operators":"2200,22FF", +"Miscellaneous Technical":"2300,23FF", +"Control Pictures":"2400,243F", +"Optical Character Recognition":"2440,245F", +"Enclosed Alphanumerics":"2460,24FF", +"Box Drawing":"2500,257F", +"Block Elements":"2580,259F", +"Geometric Shapes":"25A0,25FF", + +"Miscellaneous Symbols":"2600,26FF", +"Dingbats":"2700,27BF", +"Miscellaneous Mathematical Symbols-A":"27C0,27EF", +"Supplemental Arrows-A":"27F0,27FF", +"Braille Patterns":"2800,28FF", +"Supplemental Arrows-B":"2900,297F", +"Miscellaneous Mathematical Symbols-B":"2980,29FF", +"Supplemental Mathematical Operators":"2A00,2AFF", +"Miscellaneous Symbols and Arrows":"2B00,2BFF", + +"Glagolitic":"2C00,2C5F", +"Coptic":"2C80,2CFF", +"Georgian Supplement":"2D00,2D2F", +"Tifinagh":"2D30,2D7F", +"Ethiopic Extended":"2D80,2DDF", +"Supplemental Punctuation":"2E00,2E7F", +"CJK Radicals Supplement":"2E80,2EFF", +"Kangxi Radicals":"2F00,2FDF", +"Ideographic Description Characters":"2FF0,2FFF", + +"CJK Symbols and Punctuation":"3000,303F", +"Hiragana":"3040,309F", +"Katakana":"30A0,30FF", +"Bopomofo":"3100,312F", +"Hangul Compatibility Jamo":"3130,318F", +"Kanbun":"3190,319F", +"Bopomofo Extended":"31A0,31BF", +"CJK Strokes":"31C0,31EF", +"Katakana Phonetic Extensions":"31F0,31FF", + +"Enclosed CJK Letters and Months":"3200,32FF", +"CJK Compatibility":"3300,33FF", +"CJK Unified Ideographs Extension A":"3400,4DBF", +"Yijing Hexagram Symbols":"4DC0,4DFF", +"CJK Unified Ideographs":"4E00,9FFF", +"Yi Syllables":"A000,A48F", +"Yi Radicals":"A490,A4CF", +"Modifier Tone Letters":"A700,A71F", +"Syloti Nagri":"A800,A82F", + +"Hangul Syllables":"AC00,D7AF", +"High Surrogates":"D800,DB7F", +"High Private Use Surrogates":"DB80,DBFF", +"Low Surrogates":"DC00,DFFF", +"Private Use Area":"E000,F8FF", +"CJK Compatibility Ideographs":"F900,FAFF", +"Alphabetic Presentation Forms":"FB00,FB4F", +"Arabic Presentation Forms-A":"FB50,FDFF", +"Variation Selectors":"FE00,FE0F", + +"Vertical Forms":"FE10,FE1F", +"Combining Half Marks":"FE20,FE2F", +"CJK Compatibility Forms":"FE30,FE4F", +"Small Form Variants":"FE50,FE6F", +"Arabic Presentation Forms-B":"FE70,FEFF", +"Halfwidth and Fullwidth Forms":"FF00,FFEF", +"Specials":"FFF0,FFFF", +"Linear B Syllabary":"10000,1007F", +"Linear B Ideograms":"10080,100FF", + +"Aegean Numbers":"10100,1013F", +"Ancient Greek Numbers":"10140,1018F", +"Old Italic":"10300,1032F", +"Gothic":"10330,1034F", +"Ugaritic":"10380,1039F", +"Old Persian":"103A0,103DF", +"Deseret":"10400,1044F", +"Shavian":"10450,1047F", +"Osmanya":"10480,104AF", + +"Cypriot Syllabary":"10800,1083F", +"Kharoshthi":"10A00,10A5F", +"Byzantine Musical Symbols":"1D000,1D0FF", +"Musical Symbols":"1D100,1D1FF", +"Ancient Greek Musical Notation":"1D200,1D24F", +"Tai Xuan Jing Symbols":"1D300,1D35F", +"Mathematical Alphanumeric Symbols":"1D400,1D7FF", +"CJK Unified Ideographs Extension B":"20000,2A6DF", +"CJK Compatibility Ideographs Supplement":"2F800,2FA1F", +"Tags":"E0000,E007F", +"Variation Selectors Supplement":"E0100,E01EF" +}; +*/ +var char_range_list={ +"Aegean Numbers":"10100,1013F", +"Alphabetic Presentation Forms":"FB00,FB4F", +"Ancient Greek Musical Notation":"1D200,1D24F", +"Ancient Greek Numbers":"10140,1018F", +"Arabic":"0600,06FF", +"Arabic Presentation Forms-A":"FB50,FDFF", +"Arabic Presentation Forms-B":"FE70,FEFF", +"Arabic Supplement":"0750,077F", +"Armenian":"0530,058F", +"Arrows":"2190,21FF", +"Basic Latin":"0020,007F", +"Bengali":"0980,09FF", +"Block Elements":"2580,259F", +"Bopomofo Extended":"31A0,31BF", +"Bopomofo":"3100,312F", +"Box Drawing":"2500,257F", +"Braille Patterns":"2800,28FF", +"Buginese":"1A00,1A1F", +"Buhid":"1740,175F", +"Byzantine Musical Symbols":"1D000,1D0FF", +"CJK Compatibility Forms":"FE30,FE4F", +"CJK Compatibility Ideographs Supplement":"2F800,2FA1F", +"CJK Compatibility Ideographs":"F900,FAFF", +"CJK Compatibility":"3300,33FF", +"CJK Radicals Supplement":"2E80,2EFF", +"CJK Strokes":"31C0,31EF", +"CJK Symbols and Punctuation":"3000,303F", +"CJK Unified Ideographs Extension A":"3400,4DBF", +"CJK Unified Ideographs Extension B":"20000,2A6DF", +"CJK Unified Ideographs":"4E00,9FFF", +"Cherokee":"13A0,13FF", +"Combining Diacritical Marks Supplement":"1DC0,1DFF", +"Combining Diacritical Marks for Symbols":"20D0,20FF", +"Combining Diacritical Marks":"0300,036F", +"Combining Half Marks":"FE20,FE2F", +"Control Pictures":"2400,243F", +"Coptic":"2C80,2CFF", +"Currency Symbols":"20A0,20CF", +"Cypriot Syllabary":"10800,1083F", +"Cyrillic Supplement":"0500,052F", +"Cyrillic":"0400,04FF", +"Deseret":"10400,1044F", +"Devanagari":"0900,097F", +"Dingbats":"2700,27BF", +"Enclosed Alphanumerics":"2460,24FF", +"Enclosed CJK Letters and Months":"3200,32FF", +"Ethiopic Extended":"2D80,2DDF", +"Ethiopic Supplement":"1380,139F", +"Ethiopic":"1200,137F", +"General Punctuation":"2000,206F", +"Geometric Shapes":"25A0,25FF", +"Georgian Supplement":"2D00,2D2F", +"Georgian":"10A0,10FF", +"Glagolitic":"2C00,2C5F", +"Gothic":"10330,1034F", +"Greek Extended":"1F00,1FFF", +"Greek and Coptic":"0370,03FF", +"Gujarati":"0A80,0AFF", +"Gurmukhi":"0A00,0A7F", +"Halfwidth and Fullwidth Forms":"FF00,FFEF", +"Hangul Compatibility Jamo":"3130,318F", +"Hangul Jamo":"1100,11FF", +"Hangul Syllables":"AC00,D7AF", +"Hanunoo":"1720,173F", +"Hebrew":"0590,05FF", +"High Private Use Surrogates":"DB80,DBFF", +"High Surrogates":"D800,DB7F", +"Hiragana":"3040,309F", +"IPA Extensions":"0250,02AF", +"Ideographic Description Characters":"2FF0,2FFF", +"Kanbun":"3190,319F", +"Kangxi Radicals":"2F00,2FDF", +"Kannada":"0C80,0CFF", +"Katakana Phonetic Extensions":"31F0,31FF", +"Katakana":"30A0,30FF", +"Kharoshthi":"10A00,10A5F", +"Khmer Symbols":"19E0,19FF", +"Khmer":"1780,17FF", +"Lao":"0E80,0EFF", +"Latin Extended Additional":"1E00,1EFF", +"Latin Extended-A":"0100,017F", +"Latin Extended-B":"0180,024F", +"Latin-1 Supplement":"0080,00FF", +"Letterlike Symbols":"2100,214F", +"Limbu":"1900,194F", +"Linear B Ideograms":"10080,100FF", +"Linear B Syllabary":"10000,1007F", +"Low Surrogates":"DC00,DFFF", +"Malayalam":"0D00,0D7F", +"Mathematical Alphanumeric Symbols":"1D400,1D7FF", +"Mathematical Operators":"2200,22FF", +"Miscellaneous Mathematical Symbols-A":"27C0,27EF", +"Miscellaneous Mathematical Symbols-B":"2980,29FF", +"Miscellaneous Symbols and Arrows":"2B00,2BFF", +"Miscellaneous Symbols":"2600,26FF", +"Miscellaneous Technical":"2300,23FF", +"Modifier Tone Letters":"A700,A71F", +"Mongolian":"1800,18AF", +"Musical Symbols":"1D100,1D1FF", +"Myanmar":"1000,109F", +"New Tai Lue":"1980,19DF", +"Number Forms":"2150,218F", +"Ogham":"1680,169F", +"Old Italic":"10300,1032F", +"Old Persian":"103A0,103DF", +"Optical Character Recognition":"2440,245F", +"Oriya":"0B00,0B7F", +"Osmanya":"10480,104AF", +"Phonetic Extensions Supplement":"1D80,1DBF", +"Phonetic Extensions":"1D00,1D7F", +"Private Use Area":"E000,F8FF", +"Runic":"16A0,16FF", +"Shavian":"10450,1047F", +"Sinhala":"0D80,0DFF", +"Small Form Variants":"FE50,FE6F", +"Spacing Modifier Letters":"02B0,02FF", +"Specials":"FFF0,FFFF", +"Superscripts and Subscripts":"2070,209F", +"Supplemental Arrows-A":"27F0,27FF", +"Supplemental Arrows-B":"2900,297F", +"Supplemental Mathematical Operators":"2A00,2AFF", +"Supplemental Punctuation":"2E00,2E7F", +"Syloti Nagri":"A800,A82F", +"Syriac":"0700,074F", +"Tagalog":"1700,171F", +"Tagbanwa":"1760,177F", +"Tags":"E0000,E007F", +"Tai Le":"1950,197F", +"Tai Xuan Jing Symbols":"1D300,1D35F", +"Tamil":"0B80,0BFF", +"Telugu":"0C00,0C7F", +"Thaana":"0780,07BF", +"Thai":"0E00,0E7F", +"Tibetan":"0F00,0FFF", +"Tifinagh":"2D30,2D7F", +"Ugaritic":"10380,1039F", +"Unified Canadian Aboriginal Syllabics":"1400,167F", +"Variation Selectors Supplement":"E0100,E01EF", +"Variation Selectors":"FE00,FE0F", +"Vertical Forms":"FE10,FE1F", +"Yi Radicals":"A490,A4CF", +"Yi Syllables":"A000,A48F", +"Yijing Hexagram Symbols":"4DC0,4DFF" +}; + +var insert="charmap_insert"; + +function map_load(){ + editArea=opener.editArea; + // translate the document + insert= editArea.get_translation(insert, "word"); + //alert(document.title); + document.title= editArea.get_translation(document.title, "template"); + document.body.innerHTML= editArea.get_translation(document.body.innerHTML, "template"); + //document.title= editArea.get_translation(document.getElementBytitle, "template"); + + var selected_lang=opener.EditArea_charmap.default_language.toLowerCase(); + var selected=0; + + var select= document.getElementById("select_range") + for(var i in char_range_list){ + if(i.toLowerCase()==selected_lang) + selected=select.options.length; + select.options[select.options.length]=new Option(i, char_range_list[i]); + } + select.options[selected].selected=true; +/* start=0; + end=127; + content=""; + for(var i=start; i"+ String.fromCharCode(i) +""; + } + document.getElementById("char_list").innerHTML= html; + document.getElementById("preview_char").innerHTML=""; +} + +function previewChar(i){ + document.getElementById("preview_char").innerHTML= String.fromCharCode(i); + document.getElementById("preview_code").innerHTML= "&#"+ i +";"; +} + +function insertChar(i){ + opener.parent.editAreaLoader.setSelectedText(editArea.id, String.fromCharCode( i)); + range= opener.parent.editAreaLoader.getSelectionRange(editArea.id); + opener.parent.editAreaLoader.setSelectionRange(editArea.id, range["end"], range["end"]); + window.focus(); +} diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/bg.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/bg.js new file mode 100755 index 0000000..eaba0f9 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/bg.js @@ -0,0 +1,12 @@ +/* + * Bulgarian translation + * Author: Valentin Hristov + * Company: SOFTKIT Bulgarian + * Site: http://www.softkit-bg.com + */ +editArea.add_lang("bg",{ +charmap_but: "Виртуална клавиатура", +charmap_title: "Виртуална клавиатура", +charmap_choose_block: "избери езиков блок", +charmap_insert:"постави този символ" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/cs.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/cs.js new file mode 100755 index 0000000..6b1c907 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/cs.js @@ -0,0 +1,6 @@ +editArea.add_lang("cs",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/de.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/de.js new file mode 100755 index 0000000..6dfe69c --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/de.js @@ -0,0 +1,6 @@ +editArea.add_lang("de",{ +charmap_but: "Sonderzeichen", +charmap_title: "Sonderzeichen", +charmap_choose_block: "Bereich auswählen", +charmap_insert: "dieses Zeichen einfügen" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/dk.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/dk.js new file mode 100755 index 0000000..ebcde25 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/dk.js @@ -0,0 +1,6 @@ +editArea.add_lang("dk",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/en.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/en.js new file mode 100755 index 0000000..335ec28 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/en.js @@ -0,0 +1,6 @@ +editArea.add_lang("en",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/eo.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/eo.js new file mode 100755 index 0000000..9a30841 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/eo.js @@ -0,0 +1,6 @@ +editArea.add_lang("eo",{ +charmap_but: "Ekranklavaro", +charmap_title: "Ekranklavaro", +charmap_choose_block: "Elekto de lingvo", +charmap_insert:"enmeti tiun signaron" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/es.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/es.js new file mode 100755 index 0000000..be04b4b --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/es.js @@ -0,0 +1,6 @@ +editArea.add_lang("es",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/fr.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/fr.js new file mode 100755 index 0000000..8131e30 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/fr.js @@ -0,0 +1,6 @@ +editArea.add_lang("fr",{ +charmap_but: "Clavier visuel", +charmap_title: "Clavier visuel", +charmap_choose_block: "choix du language", +charmap_insert:"insérer ce caractère" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/hr.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/hr.js new file mode 100755 index 0000000..4d74354 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/hr.js @@ -0,0 +1,6 @@ +editArea.add_lang("hr",{ +charmap_but: "Virtualna tipkovnica", +charmap_title: "Virtualna tipkovnica", +charmap_choose_block: "Odaberi blok s jezikom", +charmap_insert:"Ubaci taj znak" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/index.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/it.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/it.js new file mode 100755 index 0000000..b05abb9 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/it.js @@ -0,0 +1,6 @@ +editArea.add_lang("it",{ +charmap_but: "Tastiera visuale", +charmap_title: "Tastiera visuale", +charmap_choose_block: "seleziona blocco", +charmap_insert:"inserisci questo carattere" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ja.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ja.js new file mode 100755 index 0000000..efe060e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ja.js @@ -0,0 +1,6 @@ +editArea.add_lang("ja",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/mk.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/mk.js new file mode 100755 index 0000000..f533116 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/mk.js @@ -0,0 +1,6 @@ +editArea.add_lang("mkn",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/nl.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/nl.js new file mode 100755 index 0000000..70d7968 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/nl.js @@ -0,0 +1,6 @@ +editArea.add_lang("nl",{ +charmap_but: "Visueel toetsenbord", +charmap_title: "Visueel toetsenbord", +charmap_choose_block: "Kies een taal blok", +charmap_insert:"Voeg dit symbool in" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pl.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pl.js new file mode 100755 index 0000000..9feabbb --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pl.js @@ -0,0 +1,6 @@ +editArea.add_lang("pl",{ +charmap_but: "Klawiatura ekranowa", +charmap_title: "Klawiatura ekranowa", +charmap_choose_block: "wybierz grupę znaków", +charmap_insert:"wstaw ten znak" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pt.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pt.js new file mode 100755 index 0000000..5d3eaa3 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/pt.js @@ -0,0 +1,6 @@ +editArea.add_lang("pt",{ +charmap_but: "Visual keyboard", +charmap_title: "Visual keyboard", +charmap_choose_block: "select language block", +charmap_insert:"insert this character" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ru.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ru.js new file mode 100755 index 0000000..3163f36 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/ru.js @@ -0,0 +1,6 @@ +editArea.add_lang("ru",{ +charmap_but: "Визуальная клавиатура", +charmap_title: "Визуальная клавиатура", +charmap_choose_block: "выбрать языковой блок", +charmap_insert:"вставить этот символ" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/sk.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/sk.js new file mode 100755 index 0000000..8513641 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/sk.js @@ -0,0 +1,6 @@ +editArea.add_lang("sk",{ +charmap_but: "Vizuálna klávesnica", +charmap_title: "Vizuálna klávesnica", +charmap_choose_block: "vyber jazykový blok", +charmap_insert: "vlož tento znak" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/zh.js b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/zh.js new file mode 100755 index 0000000..2a20233 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/langs/zh.js @@ -0,0 +1,6 @@ +editArea.add_lang("zh",{ +charmap_but: "软键盘", +charmap_title: "软键盘", +charmap_choose_block: "选择一个语言块", +charmap_insert:"插入此字符" +}); diff --git a/ehcp/extplorer/scripts/editarea/plugins/charmap/popup.html b/ehcp/extplorer/scripts/editarea/plugins/charmap/popup.html new file mode 100755 index 0000000..4b549db --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/charmap/popup.html @@ -0,0 +1,24 @@ + + + + +{$charmap_title} + + + + + +
+
+

{$charmap_title}:

+ +
+ +
+ + + + + diff --git a/ehcp/extplorer/scripts/editarea/plugins/index.html b/ehcp/extplorer/scripts/editarea/plugins/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/plugins/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/basic.js b/ehcp/extplorer/scripts/editarea/reg_syntax/basic.js new file mode 100755 index 0000000..d8082f7 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/basic.js @@ -0,0 +1,70 @@ +editAreaLoader.load_syntax["basic"] = { + 'DISPLAY_NAME' : 'Basic' + ,'COMMENT_SINGLE' : {1 : "'", 2 : 'rem'} + ,'COMMENT_MULTI' : { } + ,'QUOTEMARKS' : {1: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'if','then','for','wend','while', + 'else','elseif','select','case','end select', + 'until','next','step','to','end if', 'call' + ] + ,'keywords' : [ + 'sub', 'end sub', 'function', 'end function', 'exit', + 'exit function', 'dim', 'redim', 'shared', 'const', + 'is', 'absolute', 'access', 'any', 'append', 'as', + 'base', 'beep', 'binary', 'bload', 'bsave', 'chain', + 'chdir', 'circle', 'clear', 'close', 'cls', 'color', + 'com', 'common', 'data', 'date', 'declare', 'def', + 'defdbl', 'defint', 'deflng', 'defsng', 'defstr', + 'double', 'draw', 'environ', 'erase', 'error', 'field', + 'files', 'fn', 'get', 'gosub', 'goto', 'integer', 'key', + 'kill', 'let', 'line', 'list', 'locate', 'lock', 'long', + 'lprint', 'lset', 'mkdir', 'name', 'off', 'on', 'open', + 'option', 'out', 'output', 'paint', 'palette', 'pcopy', + 'poke', 'preset', 'print', 'pset', 'put', 'random', + 'randomize', 'read', 'reset', 'restore', 'resume', + 'return', 'rmdir', 'rset', 'run', 'screen', 'seg', + 'shell', 'single', 'sleep', 'sound', 'static', 'stop', + 'strig', 'string', 'swap', 'system', 'time', 'timer', + 'troff', 'tron', 'type', 'unlock', 'using', 'view', + 'wait', 'width', 'window', 'write' + ] + ,'functions' : [ + 'abs', 'asc', 'atn', 'cdbl', 'chr', 'cint', 'clng', + 'cos', 'csng', 'csrlin', 'cvd', 'cvdmbf', 'cvi', 'cvl', + 'cvs', 'cvsmbf', 'eof', 'erdev', 'erl', 'err', 'exp', + 'fileattr', 'fix', 'fre', 'freefile', 'hex', 'inkey', + 'inp', 'input', 'instr', 'int', 'ioctl', 'lbound', + 'lcase', 'left', 'len', 'loc', 'lof', 'log', 'lpos', + 'ltrim', 'mid', 'mkd', 'mkdmbf', 'mki', 'mkl', 'mks', + 'mksmbf', 'oct', 'peek', 'pen', 'play', 'pmap', 'point', + 'pos', 'right', 'rnd', 'rtrim', 'seek', 'sgn', 'sin', + 'space', 'spc', 'sqr', 'stick', 'str', 'tab', 'tan', + 'ubound', 'ucase', 'val', 'varptr', 'varseg' + ] + ,'operators' : [ + 'and', 'eqv', 'imp', 'mod', 'not', 'or', 'xor' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '!', '&' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #99CC00;' + ,'QUOTESMARKS': 'color: #333399;' + ,'KEYWORDS' : { + 'keywords' : 'color: #3366FF;' + ,'functions' : 'color: #0000FF;' + ,'statements' : 'color: #3366FF;' + ,'operators' : 'color: #FF0000;' + } + ,'OPERATORS' : 'color: #FF0000;' + ,'DELIMITERS' : 'color: #0000FF;' + + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/brainfuck.js b/ehcp/extplorer/scripts/editarea/reg_syntax/brainfuck.js new file mode 100755 index 0000000..6f8f063 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/brainfuck.js @@ -0,0 +1,45 @@ +editAreaLoader.load_syntax["brainfuck"] = { + 'DISPLAY_NAME' : 'Brainfuck' + ,'COMMENT_SINGLE' : {} + ,'COMMENT_MULTI' : {} + ,'QUOTEMARKS' : {} + ,'KEYWORD_CASE_SENSITIVE' : true + ,'OPERATORS' :[ + '+', '-' + ] + ,'DELIMITERS' :[ + '[', ']' + ] + ,'REGEXPS' : { + 'bfispis' : { + 'search' : '()(\\.)()' + ,'class' : 'bfispis' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + ,'bfupis' : { + 'search' : '()(\\,)()' + ,'class' : 'bfupis' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + ,'bfmemory' : { + 'search' : '()([<>])()' + ,'class' : 'bfmemory' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'OPERATORS' : 'color: #88AA00;' + ,'DELIMITERS' : 'color: #00C138;' + ,'REGEXPS' : { + 'bfispis' : 'color: #EE0000;' + ,'bfupis' : 'color: #4455ee;' + ,'bfmemory' : 'color: #DD00DD;' + } + } +}; + diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/c.js b/ehcp/extplorer/scripts/editarea/reg_syntax/c.js new file mode 100755 index 0000000..0e0f843 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/c.js @@ -0,0 +1,63 @@ +editAreaLoader.load_syntax["c"] = { + 'DISPLAY_NAME' : 'C' + ,'COMMENT_SINGLE' : {1 : '//'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : true + ,'KEYWORDS' : { + 'constants' : [ + 'NULL', 'false', 'stdin', 'stdout', 'stderr', 'true' + ] + ,'types' : [ + 'FILE', 'auto', 'char', 'const', 'double', + 'extern', 'float', 'inline', 'int', 'long', 'register', + 'short', 'signed', 'size_t', 'static', 'struct', + 'time_t', 'typedef', 'union', 'unsigned', 'void', + 'volatile' + ] + ,'statements' : [ + 'do', 'else', 'enum', 'for', 'goto', 'if', 'sizeof', + 'switch', 'while' + ] + ,'keywords' : [ + 'break', 'case', 'continue', 'default', 'delete', + 'return' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + 'precompiler' : { + 'search' : '()(#[^\r\n]*)()' + ,'class' : 'precompiler' + ,'modifiers' : 'g' + ,'execute' : 'before' + } +/* ,'precompilerstring' : { + 'search' : '(#[\t ]*include[\t ]*)([^\r\n]*)([^\r\n]*[\r\n])' + ,'class' : 'precompilerstring' + ,'modifiers' : 'g' + ,'execute' : 'before' + }*/ + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'constants' : 'color: #EE0000;' + ,'types' : 'color: #0000EE;' + ,'statements' : 'color: #60CA00;' + ,'keywords' : 'color: #48BDDF;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #0038E1;' + ,'REGEXPS' : { + 'precompiler' : 'color: #009900;' + ,'precompilerstring' : 'color: #994400;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/coldfusion.js b/ehcp/extplorer/scripts/editarea/reg_syntax/coldfusion.js new file mode 100755 index 0000000..792f10b --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/coldfusion.js @@ -0,0 +1,120 @@ +editAreaLoader.load_syntax["coldfusion"] = { + 'DISPLAY_NAME' : 'Coldfusion' + ,'COMMENT_SINGLE' : {1 : '//', 2 : '#'} + ,'COMMENT_MULTI' : {''} + ,'COMMENT_MULTI2' : {''} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'include', 'require', 'include_once', 'require_once', + 'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', + 'endif', 'switch', 'case', 'endswitch', + 'return', 'break', 'continue' + ] + ,'reserved' : [ + 'AND', 'break', 'case', 'CONTAIN', 'CONTAINS', 'continue', 'default', 'do', + 'DOES', 'else', 'EQ', 'EQUAL', 'EQUALTO', 'EQV', 'FALSE', 'for', 'GE', + 'GREATER', 'GT', 'GTE', 'if', 'IMP', 'in', 'IS', 'LE', 'LESS', 'LT', 'LTE', + 'MOD', 'NEQ', 'NOT', 'OR', 'return', 'switch', 'THAN', 'TO', 'TRUE', 'var', + 'while', 'XOR' + ] + ,'functions' : [ + 'Abs', 'ACos', 'ArrayAppend', 'ArrayAvg', 'ArrayClear', 'ArrayDeleteAt', 'ArrayInsertAt', + 'ArrayIsEmpty', 'ArrayLen', 'ArrayMax', 'ArrayMin', 'ArrayNew', 'ArrayPrepend', 'ArrayResize', + 'ArraySet', 'ArraySort', 'ArraySum', 'ArraySwap', 'ArrayToList', 'Asc', 'ASin', 'Atn', 'AuthenticatedContext', + 'AuthenticatedUser', 'BitAnd', 'BitMaskClear', 'BitMaskRead', 'BitMaskSet', 'BitNot', 'BitOr', + 'BitSHLN', 'BitSHRN', 'BitXor', 'Ceiling', 'Chr', 'CJustify', 'Compare', 'CompareNoCase', 'Cos', + 'CreateDate', 'CreateDateTime', 'CreateODBCDate', 'CreateODBCDateTime', 'CreateODBCTime', + 'CreateTime', 'CreateTimeSpan', 'DateAdd', 'DateCompare', 'DateConvert', 'DateDiff', + 'DateFormat', 'DatePart', 'Day', 'DayOfWeek', 'DayOfWeekAsString', 'DayOfYear', 'DaysInMonth', + 'DaysInYear', 'DE', 'DecimalFormat', 'DecrementValue', 'Decrypt', 'DeleteClientVariable', + 'DirectoryExists', 'DollarFormat', 'Duplicate', 'Encrypt', 'Evaluate', 'Exp', 'ExpandPath', + 'FileExists', 'Find', 'FindNoCase', 'FindOneOf', 'FirstDayOfMonth', 'Fix', 'FormatBaseN', + 'GetBaseTagData', 'GetBaseTagList', 'GetBaseTemplatePath', 'GetClientVariablesList', + 'GetCurrentTemplatePath', 'GetDirectoryFromPath', 'GetException', 'GetFileFromPath', + 'GetFunctionList', 'GetHttpTimeString', 'GetHttpRequestData', 'GetLocale', 'GetMetricData', + 'GetProfileString', 'GetTempDirectory', 'GetTempFile', 'GetTemplatePath', 'GetTickCount', + 'GetTimeZoneInfo', 'GetToken', 'Hash', 'Hour', 'HTMLCodeFormat', 'HTMLEditFormat', 'IIf', + 'IncrementValue', 'InputBaseN', 'Insert', 'Int', 'IsArray', 'IsAuthenticated', 'IsAuthorized', + 'IsBoolean', 'IsBinary', 'IsCustomFunction', 'IsDate', 'IsDebugMode', 'IsDefined', 'IsLeapYear', + 'IsNumeric', 'IsNumericDate', 'IsProtected', 'IsQuery', 'IsSimpleValue', 'IsStruct', 'IsWDDX', + 'JavaCast', 'JSStringFormat', 'LCase', 'Left', 'Len', 'ListAppend', 'ListChangeDelims', + 'ListContains', 'ListContainsNoCase', 'ListDeleteAt', 'ListFind', 'ListFindNoCase', 'ListFirst', + 'ListGetAt', 'ListInsertAt', 'ListLast', 'ListLen', 'ListPrepend', 'ListQualify', 'ListRest', + 'ListSetAt', 'ListSort', 'ListToArray', 'ListValueCount', 'ListValueCountNoCase', 'LJustify', + 'Log', 'Log10', 'LSCurrencyFormat', 'LSDateFormat', 'LSEuroCurrencyFormat', 'LSIsCurrency', + 'LSIsDate', 'LSIsNumeric', 'LSNumberFormat', 'LSParseCurrency', 'LSParseDateTime', 'LSParseNumber', + 'LSTimeFormat', 'LTrim', 'Max', 'Mid', 'Min', 'Minute', 'Month', 'MonthAsString', 'Now', 'NumberFormat', + 'ParagraphFormat', 'ParameterExists', 'ParseDateTime', 'Pi', 'PreserveSingleQuotes', 'Quarter', + 'QueryAddRow', 'QueryNew', 'QuerySetCell', 'QuotedValueList', 'Rand', 'Randomize', 'RandRange', + 'REFind', 'REFindNoCase', 'RemoveChars', 'RepeatString', 'Replace', 'ReplaceList', 'ReplaceNoCase', + 'REReplace', 'REReplaceNoCase', 'Reverse', 'Right', 'RJustify', 'Round', 'RTrim', 'Second', 'SetLocale', + 'SetProfileString', 'SetVariable', 'Sgn', 'Sin', 'SpanExcluding', 'SpanIncluding', 'Sqr', 'StripCR', + 'StructAppend', 'StructClear', 'StructCopy', 'StructCount', 'StructDelete', 'StructFind', 'StructFindKey', + 'StructFindValue', 'StructGet', 'StructInsert', 'StructIsEmpty', 'StructKeyArray', 'StructKeyExists', + 'StructKeyList', 'StructNew', 'StructSort', 'StructUpdate', 'Tan', 'TimeFormat', 'ToBase64', 'ToBinary', + 'ToString', 'Trim', 'UCase', 'URLDecode', 'URLEncodedFormat', 'Val', 'ValueList', 'Week', 'WriteOutput', + 'XMLFormat', 'Year', 'YesNoFormat' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '%', '!', '&&', '||' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + 'doctype' : { + 'search' : '()(]*>)()' + ,'class' : 'doctype' + ,'modifiers' : '' + ,'execute' : 'before' // before or after + } + ,'cftags' : { + 'search' : '(<)(/cf[a-z][^ \r\n\t>]*)([^>]*>)' + ,'class' : 'cftags' + ,'modifiers' : 'gi' + ,'execute' : 'before' // before or after + } + ,'cftags2' : { + 'search' : '(<)(cf[a-z][^ \r\n\t>]*)([^>]*>)' + ,'class' : 'cftags2' + ,'modifiers' : 'gi' + ,'execute' : 'before' // before or after + } + ,'tags' : { + 'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)' + ,'class' : 'tags' + ,'modifiers' : 'gi' + ,'execute' : 'before' // before or after + } + ,'attributes' : { + 'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)' + ,'class' : 'attributes' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'reserved' : 'color: #48BDDF;' + ,'functions' : 'color: #0000FF;' + ,'statements' : 'color: #60CA00;' + } + ,'OPERATORS' : 'color: #E775F0;' + ,'DELIMITERS' : '' + ,'REGEXPS' : { + 'attributes': 'color: #990033;' + ,'cftags': 'color: #990033;' + ,'cftags2': 'color: #990033;' + ,'tags': 'color: #000099;' + ,'doctype': 'color: #8DCFB5;' + ,'test': 'color: #00FF00;' + } + } +}; + + diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/cpp.js b/ehcp/extplorer/scripts/editarea/reg_syntax/cpp.js new file mode 100755 index 0000000..6b176e8 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/cpp.js @@ -0,0 +1,66 @@ +editAreaLoader.load_syntax["cpp"] = { + 'DISPLAY_NAME' : 'CPP' + ,'COMMENT_SINGLE' : {1 : '//'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : true + ,'KEYWORDS' : { + 'constants' : [ + 'NULL', 'false', 'std', 'stdin', 'stdout', 'stderr', + 'true' + ] + ,'types' : [ + 'FILE', 'auto', 'char', 'class', 'const', 'double', + 'extern', 'float', 'friend', 'inline', 'int', + 'iterator', 'long', 'map', 'operator', 'queue', + 'register', 'short', 'signed', 'size_t', 'stack', + 'static', 'string', 'struct', 'time_t', 'typedef', + 'union', 'unsigned', 'vector', 'void', 'volatile' + ] + ,'statements' : [ + 'catch', 'do', 'else', 'enum', 'for', 'goto', 'if', + 'sizeof', 'switch', 'this', 'throw', 'try', 'while' + ] + ,'keywords' : [ + 'break', 'case', 'continue', 'default', 'delete', + 'namespace', 'new', 'private', 'protected', 'public', + 'return', 'using' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + 'precompiler' : { + 'search' : '()(#[^\r\n]*)()' + ,'class' : 'precompiler' + ,'modifiers' : 'g' + ,'execute' : 'before' + } +/* ,'precompilerstring' : { + 'search' : '(#[\t ]*include[\t ]*)([^\r\n]*)([^\r\n]*[\r\n])' + ,'class' : 'precompilerstring' + ,'modifiers' : 'g' + ,'execute' : 'before' + }*/ + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'constants' : 'color: #EE0000;' + ,'types' : 'color: #0000EE;' + ,'statements' : 'color: #60CA00;' + ,'keywords' : 'color: #48BDDF;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #0038E1;' + ,'REGEXPS' : { + 'precompiler' : 'color: #009900;' + ,'precompilerstring' : 'color: #994400;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/css.js b/ehcp/extplorer/scripts/editarea/reg_syntax/css.js new file mode 100755 index 0000000..087186b --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/css.js @@ -0,0 +1,85 @@ +editAreaLoader.load_syntax["css"] = { + 'DISPLAY_NAME' : 'CSS' + ,'COMMENT_SINGLE' : {1 : '@'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : ['"', "'"] + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'attributes' : [ + 'aqua', 'azimuth', 'background-attachment', 'background-color', + 'background-image', 'background-position', 'background-repeat', + 'background', 'border-bottom-color', 'border-bottom-style', + 'border-bottom-width', 'border-left-color', 'border-left-style', + 'border-left-width', 'border-right', 'border-right-color', + 'border-right-style', 'border-right-width', 'border-top-color', + 'border-top-style', 'border-top-width','border-bottom', 'border-collapse', + 'border-left', 'border-width', 'border-color', 'border-spacing', + 'border-style', 'border-top', 'border', 'caption-side', + 'clear', 'clip', 'color', 'content', 'counter-increment', 'counter-reset', + 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display', + 'elevation', 'empty-cells', 'float', 'font-family', 'font-size', + 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', + 'font-weight', 'font', 'height', 'letter-spacing', 'line-height', + 'list-style', 'list-style-image', 'list-style-position', 'list-style-type', + 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'margin', + 'marker-offset', 'marks', 'max-height', 'max-width', 'min-height', + 'min-width', 'opacity', 'orphans', 'outline', 'outline-color', 'outline-style', + 'outline-width', 'overflow', 'padding-bottom', 'padding-left', + 'padding-right', 'padding-top', 'padding', 'page', 'page-break-after', + 'page-break-before', 'page-break-inside', 'pause-after', 'pause-before', + 'pause', 'pitch', 'pitch-range', 'play-during', 'position', 'quotes', + 'richness', 'right', 'size', 'speak-header', 'speak-numeral', 'speak-punctuation', + 'speak', 'speech-rate', 'stress', 'table-layout', 'text-align', 'text-decoration', + 'text-indent', 'text-shadow', 'text-transform', 'top', 'unicode-bidi', + 'vertical-align', 'visibility', 'voice-family', 'volume', 'white-space', 'widows', + 'width', 'word-spacing', 'z-index', 'bottom', 'left' + ] + ,'values' : [ + 'above', 'absolute', 'always', 'armenian', 'aural', 'auto', 'avoid', + 'baseline', 'behind', 'below', 'bidi-override', 'black', 'blue', 'blink', 'block', 'bold', 'bolder', 'both', + 'capitalize', 'center-left', 'center-right', 'center', 'circle', 'cjk-ideographic', + 'close-quote', 'collapse', 'condensed', 'continuous', 'crop', 'crosshair', 'cross', 'cursive', + 'dashed', 'decimal-leading-zero', 'decimal', 'default', 'digits', 'disc', 'dotted', 'double', + 'e-resize', 'embed', 'extra-condensed', 'extra-expanded', 'expanded', + 'fantasy', 'far-left', 'far-right', 'faster', 'fast', 'fixed', 'fuchsia', + 'georgian', 'gray', 'green', 'groove', 'hebrew', 'help', 'hidden', 'hide', 'higher', + 'high', 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table', 'inline', + 'inset', 'inside', 'invert', 'italic', 'justify', 'katakana-iroha', 'katakana', + 'landscape', 'larger', 'large', 'left-side', 'leftwards', 'level', 'lighter', 'lime', 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek', 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', + 'maroon', 'medium', 'message-box', 'middle', 'mix', 'monospace', + 'n-resize', 'narrower', 'navy', 'ne-resize', 'no-close-quote', 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap', 'nw-resize', + 'oblique', 'olive', 'once', 'open-quote', 'outset', 'outside', 'overline', + 'pointer', 'portrait', 'purple', 'px', + 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', 'ridge', 'right-side', 'rightwards', + 's-resize', 'sans-serif', 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower', 'small-caps', 'small-caption', 'smaller', 'soft', 'solid', 'spell-out', 'square', + 'static', 'status-bar', 'super', 'sw-resize', + 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom', 'text-top', 'thick', 'thin', 'transparent', + 'ultra-condensed', 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin', 'upper-roman', 'uppercase', 'url', + 'visible', + 'w-resize', 'wait', 'white', 'wider', + 'x-fast', 'x-high', 'x-large', 'x-loud', 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', + 'yellow', 'yes' + ] + ,'specials' : [ + 'important' + ] + } + ,'OPERATORS' :[ + ':', ';', '!', '.', '#' + ] + ,'DELIMITERS' :[ + '{', '}' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'attributes' : 'color: #48BDDF;' + ,'values' : 'color: #2B60FF;' + ,'specials' : 'color: #FF0000;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #60CA00;' + + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/html.js b/ehcp/extplorer/scripts/editarea/reg_syntax/html.js new file mode 100755 index 0000000..defab6b --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/html.js @@ -0,0 +1,51 @@ +/* +* last update: 2006-08-24 +*/ + +editAreaLoader.load_syntax["html"] = { + 'DISPLAY_NAME' : 'HTML' + ,'COMMENT_SINGLE' : {} + ,'COMMENT_MULTI' : {''} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + } + ,'OPERATORS' :[ + ] + ,'DELIMITERS' :[ + ] + ,'REGEXPS' : { + 'doctype' : { + 'search' : '()(]*>)()' + ,'class' : 'doctype' + ,'modifiers' : '' + ,'execute' : 'before' // before or after + } + ,'tags' : { + 'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)' + ,'class' : 'tags' + ,'modifiers' : 'gi' + ,'execute' : 'before' // before or after + } + ,'attributes' : { + 'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)' + ,'class' : 'attributes' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + } + ,'OPERATORS' : 'color: #E775F0;' + ,'DELIMITERS' : '' + ,'REGEXPS' : { + 'attributes': 'color: #B1AC41;' + ,'tags': 'color: #E62253;' + ,'doctype': 'color: #8DCFB5;' + ,'test': 'color: #00FF00;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/index.html b/ehcp/extplorer/scripts/editarea/reg_syntax/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/java.js b/ehcp/extplorer/scripts/editarea/reg_syntax/java.js new file mode 100755 index 0000000..2c01928 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/java.js @@ -0,0 +1,57 @@ +editAreaLoader.load_syntax["java"] = { + 'DISPLAY_NAME' : 'Java' + ,'COMMENT_SINGLE': { 1: '//', 2: '@' } + , 'COMMENT_MULTI': { '/*': '*/' } + , 'QUOTEMARKS': { 1: "'", 2: '"' } + , 'KEYWORD_CASE_SENSITIVE': true + , 'KEYWORDS': { + 'constants': [ + 'null', 'false', 'true' + ] + , 'types': [ + 'String', 'int', 'short', 'long', 'char', 'double', 'byte', + 'float', 'static', 'void', 'private', 'boolean', 'protected', + 'public', 'const', 'class', 'final', 'abstract', 'volatile', + 'enum', 'transient', 'interface' + ] + , 'statements': [ + 'this', 'extends', 'if', 'do', 'while', 'try', 'catch', 'finally', + 'throw', 'throws', 'else', 'for', 'switch', 'continue', 'implements', + 'break', 'case', 'default', 'goto' + ] + , 'keywords': [ + 'new', 'return', 'import', 'native', 'super', 'package', 'assert', 'synchronized', + 'instanceof', 'strictfp' + ] + } + , 'OPERATORS': [ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&' + ] + , 'DELIMITERS': [ + '(', ')', '[', ']', '{', '}' + ] + , 'REGEXPS': { + 'precompiler': { + 'search': '()(#[^\r\n]*)()' + , 'class': 'precompiler' + , 'modifiers': 'g' + , 'execute': 'before' + } + } + , 'STYLES': { + 'COMMENTS': 'color: #AAAAAA;' + , 'QUOTESMARKS': 'color: #6381F8;' + , 'KEYWORDS': { + 'constants': 'color: #EE0000;' + , 'types': 'color: #0000EE;' + , 'statements': 'color: #60CA00;' + , 'keywords': 'color: #48BDDF;' + } + , 'OPERATORS': 'color: #FF00FF;' + , 'DELIMITERS': 'color: #0038E1;' + , 'REGEXPS': { + 'precompiler': 'color: #009900;' + , 'precompilerstring': 'color: #994400;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/js.js b/ehcp/extplorer/scripts/editarea/reg_syntax/js.js new file mode 100755 index 0000000..cf7533a --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/js.js @@ -0,0 +1,94 @@ +editAreaLoader.load_syntax["js"] = { + 'DISPLAY_NAME' : 'Javascript' + ,'COMMENT_SINGLE' : {1 : '//'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do', + 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item', + 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void', + 'while', 'write', 'with' + ] + ,'keywords' : [ + 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false', + 'function', 'import', 'namespace', 'new', 'null', 'package', 'private', + 'protected', 'public', 'super', 'true', 'use', 'var', 'window', 'document', + // the list below must be sorted and checked (if it is a keywords or a function and if it is not present twice + 'Link ', 'outerHeight ', 'Anchor', 'FileUpload', + 'location', 'outerWidth', 'Select', 'Area', 'find', 'Location', 'Packages', 'self', + 'arguments', 'locationbar', 'pageXoffset', 'Form', + 'Math', 'pageYoffset', 'setTimeout', 'assign', 'Frame', 'menubar', 'parent', 'status', + 'blur', 'frames', 'MimeType', 'parseFloat', 'statusbar', 'Boolean', 'Function', 'moveBy', + 'parseInt', 'stop', 'Button', 'getClass', 'moveTo', 'Password', 'String', 'callee', 'Hidden', + 'name', 'personalbar', 'Submit', 'caller', 'history', 'NaN', 'Plugin', 'sun', 'captureEvents', + 'History', 'navigate', 'print', 'taint', 'Checkbox', 'home', 'navigator', 'prompt', 'Text', + 'Image', 'Navigator', 'prototype', 'Textarea', 'clearTimeout', 'Infinity', + 'netscape', 'Radio', 'toolbar', 'close', 'innerHeight', 'Number', 'ref', 'top', 'closed', + 'innerWidth', 'Object', 'RegExp', 'toString', 'confirm', 'isFinite', 'onBlur', 'releaseEvents', + 'unescape', 'constructor', 'isNan', 'onError', 'Reset', 'untaint', 'Date', 'java', 'onFocus', + 'resizeBy', 'unwatch', 'defaultStatus', 'JavaArray', 'onLoad', 'resizeTo', 'valueOf', 'document', + 'JavaClass', 'onUnload', 'routeEvent', 'watch', 'Document', 'JavaObject', 'open', 'scroll', 'window', + 'Element', 'JavaPackage', 'opener', 'scrollbars', 'Window', 'escape', 'length', 'Option', 'scrollBy' + ] + ,'functions' : [ + // common functions for Window object + 'alert', 'Array', 'back', 'blur', 'clearInterval', 'close', 'confirm', 'eval ', 'focus', 'forward', 'home', + 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove', + 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'scrollTo', 'setInterval', 'status', + 'stop' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'statements' : 'color: #60CA00;' + ,'keywords' : 'color: #48BDDF;' + ,'functions' : 'color: #2B60FF;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #0038E1;' + + } + ,'AUTO_COMPLETION' : { + "default": { // the name of this definition group. It's posisble to have different rules inside the same definition file + "REGEXP": { "before_word": "[^a-zA-Z0-9_]|^" // \\s|\\.| + ,"possible_words_letters": "[a-zA-Z0-9_]+" + ,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$" + ,"prefix_separator": "\\." + } + ,"CASE_SENSITIVE": true + ,"MAX_TEXT_LENGTH": 100 // the maximum length of the text being analyzed before the cursor position + ,"KEYWORDS": { + '': [ // the prefix of thoses items + /** + * 0 : the keyword the user is typing + * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous ) + * If empty the keyword will be displayed + * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed) + */ + ['Array', '§()', ''] + ,['alert', '§({@})', 'alert(String message)'] + ,['document'] + ,['window'] + ] + ,'window' : [ + ['location'] + ,['document'] + ,['scrollTo', 'scrollTo({@})', 'scrollTo(Int x,Int y)'] + ] + ,'location' : [ + ['href'] + ] + } + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/pas.js b/ehcp/extplorer/scripts/editarea/reg_syntax/pas.js new file mode 100755 index 0000000..0efaed9 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/pas.js @@ -0,0 +1,83 @@ +editAreaLoader.load_syntax["pas"] = { + 'DISPLAY_NAME' : 'Pascal' + ,'COMMENT_SINGLE' : {} + ,'COMMENT_MULTI' : {'{' : '}', '(*':'*)'} + ,'QUOTEMARKS' : {1: '"', 2: "'"} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'constants' : [ + 'Blink', 'Black', 'Blue', 'Green', 'Cyan', 'Red', + 'Magenta', 'Brown', 'LightGray', 'DarkGray', + 'LightBlue', 'LightGreen', 'LightCyan', 'LightRed', + 'LightMagenta', 'Yellow', 'White', 'MaxSIntValue', + 'MaxUIntValue', 'maxint', 'maxLongint', 'maxSmallint', + 'erroraddr', 'errorcode', 'LineEnding' + ] + ,'keywords' : [ + 'in', 'or', 'div', 'mod', 'and', 'shl', 'shr', 'xor', + 'pow', 'is', 'not','Absolute', 'And_then', 'Array', + 'Begin', 'Bindable', 'Case', 'Const', 'Do', 'Downto', + 'Else', 'End', 'Export', 'File', 'For', 'Function', + 'Goto', 'If', 'Import', 'Implementation', 'Inherited', + 'Inline', 'Interface', 'Label', 'Module', 'Nil', + 'Object', 'Of', 'Only', 'Operator', 'Or_else', + 'Otherwise', 'Packed', 'Procedure', 'Program', + 'Protected', 'Qualified', 'Record', 'Repeat', + 'Restricted', 'Set', 'Then', 'To', 'Type', 'Unit', + 'Until', 'Uses', 'Value', 'Var', 'Virtual', 'While', + 'With' + ] + ,'functions' : [ + 'Abs', 'Addr', 'Append', 'Arctan', 'Assert', 'Assign', + 'Assigned', 'BinStr', 'Blockread', 'Blockwrite', + 'Break', 'Chdir', 'Chr', 'Close', 'CompareByte', + 'CompareChar', 'CompareDWord', 'CompareWord', 'Concat', + 'Continue', 'Copy', 'Cos', 'CSeg', 'Dec', 'Delete', + 'Dispose', 'DSeg', 'Eof', 'Eoln', 'Erase', 'Exclude', + 'Exit', 'Exp', 'Filepos', 'Filesize', 'FillByte', + 'Fillchar', 'FillDWord', 'Fillword', 'Flush', 'Frac', + 'Freemem', 'Getdir', 'Getmem', 'GetMemoryManager', + 'Halt', 'HexStr', 'Hi', 'High', 'Inc', 'Include', + 'IndexByte', 'IndexChar', 'IndexDWord', 'IndexWord', + 'Insert', 'IsMemoryManagerSet', 'Int', 'IOresult', + 'Length', 'Ln', 'Lo', 'LongJmp', 'Low', 'Lowercase', + 'Mark', 'Maxavail', 'Memavail', 'Mkdir', 'Move', + 'MoveChar0', 'New', 'Odd', 'OctStr', 'Ofs', 'Ord', + 'Paramcount', 'Paramstr', 'Pi', 'Pos', 'Power', 'Pred', + 'Ptr', 'Random', 'Randomize', 'Read', 'Readln', + 'Real2Double', 'Release', 'Rename', 'Reset', 'Rewrite', + 'Rmdir', 'Round', 'Runerror', 'Seek', 'SeekEof', + 'SeekEoln', 'Seg', 'SetMemoryManager', 'SetJmp', + 'SetLength', 'SetString', 'SetTextBuf', 'Sin', 'SizeOf', + 'Sptr', 'Sqr', 'Sqrt', 'SSeg', 'Str', 'StringOfChar', + 'Succ', 'Swap', 'Trunc', 'Truncate', 'Upcase', 'Val', + 'Write', 'WriteLn' + ] + ,'types' : [ + 'Integer', 'Shortint', 'SmallInt', 'Longint', + 'Longword', 'Int64', 'Byte', 'Word', 'Cardinal', + 'QWord', 'Boolean', 'ByteBool', 'LongBool', 'Char', + 'Real', 'Single', 'Double', 'Extended', 'Comp', + 'String', 'ShortString', 'AnsiString', 'PChar' + ] + } + ,'OPERATORS' :[ + '@', '*', '+', '-', '/', '^', ':=', '<', '=', '>' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + 'specials' : 'color: #EE0000;' + ,'constants' : 'color: #654321;' + ,'keywords' : 'color: #48BDDF;' + ,'functions' : 'color: #449922;' + ,'types' : 'color: #2B60FF;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #60CA00;' + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/perl.js b/ehcp/extplorer/scripts/editarea/reg_syntax/perl.js new file mode 100755 index 0000000..9a42436 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/perl.js @@ -0,0 +1,88 @@ +/*************************************************************************** + * (c) 2008 - file created by Christoph Pinkel, MTC Infomedia OHG. + * + * You may choose any license of the current release or any future release + * of editarea to use, modify and/or redistribute this file. + * + * This language specification file supports for syntax checking on + * a large subset of Perl 5.x. + * The basic common syntax of Perl is fully supported, but as for + * the highlighting of built-in operations, it's mainly designed + * to support for hightlighting Perl code in a Safe environment (compartment) + * as used by CoMaNet for evaluation of administrative scripts. This Safe + * compartment basically allows for all of Opcode's :default operations, + * but little others. See http://perldoc.perl.org/Opcode.html to learn + * more. + ***************************************************************************/ + +editAreaLoader.load_syntax["perl"] = { + 'DISPLAY_NAME' : 'Perl', + 'COMMENT_SINGLE' : {1 : '#'}, + 'QUOTEMARKS' : {1: "'", 2: '"'}, + 'KEYWORD_CASE_SENSITIVE' : true, + 'KEYWORDS' : + { + 'core' : + [ "if", "else", "elsif", "while", "for", "each", "foreach", + "next", "last", "goto", "exists", "delete", "undef", + "my", "our", "local", "use", "require", "package", "keys", "values", + "sub", "bless", "ref", "return" ], + 'functions' : + [ + //from :base_core + "int", "hex", "oct", "abs", "substr", "vec", "study", "pos", + "length", "index", "rindex", "ord", "chr", "ucfirst", "lcfirst", + "uc", "lc", "quotemeta", "chop", "chomp", "split", "list", "splice", + "push", "pop", "shift", "unshift", "reverse", "and", "or", "dor", + "xor", "warn", "die", "prototype", + //from :base_mem + "concat", "repeat", "join", "range", + //none from :base_loop, as we'll see them as basic statements... + //from :base_orig + "sprintf", "crypt", "tie", "untie", "select", "localtime", "gmtime", + //others + "print", "open", "close" + ] + }, + 'OPERATORS' : + [ '+', '-', '/', '*', '=', '<', '>', '!', '||', '.', '&&', + ' eq ', ' ne ', '=~' ], + 'DELIMITERS' : + [ '(', ')', '[', ']', '{', '}' ], + 'REGEXPS' : + { + 'packagedecl' : { 'search': '(package )([^ \r\n\t#;]*)()', + 'class' : 'scopingnames', + 'modifiers' : 'g', 'execute' : 'before' }, + 'subdecl' : { 'search': '(sub )([^ \r\n\t#]*)()', + 'class' : 'scopingnames', + 'modifiers' : 'g', 'execute' : 'before' }, + 'scalars' : { 'search': '()(\\\$[a-zA-Z0-9_:]*)()', + 'class' : 'vars', + 'modifiers' : 'g', 'execute' : 'after' }, + 'arrays' : { 'search': '()(@[a-zA-Z0-9_:]*)()', + 'class' : 'vars', + 'modifiers' : 'g', 'execute' : 'after' }, + 'hashs' : { 'search': '()(%[a-zA-Z0-9_:]*)()', + 'class' : 'vars', + 'modifiers' : 'g', 'execute' : 'after' } + }, + + 'STYLES' : + { + 'COMMENTS': 'color: #AAAAAA;', + 'QUOTESMARKS': 'color: #DC0000;', + 'KEYWORDS' : + { + 'core' : 'color: #8aca00;', + 'functions' : 'color: #2B60FF;' + }, + 'OPERATORS' : 'color: #8aca00;', + 'DELIMITERS' : 'color: #0038E1;', + 'REGEXPS': + { + 'scopingnames' : 'color: #ff0000;', + 'vars' : 'color: #00aaaa;' + } + } //'STYLES' +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/php.js b/ehcp/extplorer/scripts/editarea/reg_syntax/php.js new file mode 100755 index 0000000..1d35ddb --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/php.js @@ -0,0 +1,157 @@ +editAreaLoader.load_syntax["php"] = { + 'DISPLAY_NAME' : 'Php' + ,'COMMENT_SINGLE' : {1 : '//', 2 : '#'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'include', 'require', 'include_once', 'require_once', + 'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', + 'endif', 'switch', 'case', 'endswitch', + 'return', 'break', 'continue' + ] + ,'reserved' : [ + '_GET', '_POST', '_SESSION', '_SERVER', '_FILES', '_ENV', '_COOKIE', '_REQUEST', + 'null', '__LINE__', '__FILE__', + 'false', '<?php', '?>', '<?', + '<script language', '</script>', + 'true', 'var', 'default', + 'function', 'class', 'new', '&new', 'this', + '__FUNCTION__', '__CLASS__', '__METHOD__', 'PHP_VERSION', + 'PHP_OS', 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR', + 'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', 'PHP_SYSCONFDIR', + 'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR', + 'E_USER_WARNING', 'E_USER_NOTICE', 'E_ALL' + + ] + ,'functions' : [ + 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined', + 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions', + 'extension_loaded', 'get_extension_funcs', 'debug_backtrace', + 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv', + 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime', + 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar', + 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown', + 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate', + 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode', + 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat', + 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from', + 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport', + 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die' + + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '&&', '||' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + // highlight all variables ($...) + 'variables' : { + 'search' : '()(\\$\\w+)()' + ,'class' : 'variables' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #879EFA;' + ,'KEYWORDS' : { + 'reserved' : 'color: #48BDDF;' + ,'functions' : 'color: #0040FD;' + ,'statements' : 'color: #60CA00;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #2B60FF;' + ,'REGEXPS' : { + 'variables' : 'color: #E0BD54;' + } + } + ,'AUTO_COMPLETION' : { + "default": { // the name of this definition group. It's posisble to have different rules inside the same definition file + "REGEXP": { "before_word": "[^a-zA-Z0-9_]|^" // \\s|\\.| + ,"possible_words_letters": "[a-zA-Z0-9_\$]+" + ,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$" + ,"prefix_separator": "\\-\\>|\\:\\:" + } + ,"CASE_SENSITIVE": true + ,"MAX_TEXT_LENGTH": 100 // the maximum length of the text being analyzed before the cursor position + ,"KEYWORDS": { + '': [ // the prefix of thoses items + /** + * 0 : the keyword the user is typing + * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous ) + * If empty the keyword will be displayed + * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed) + */ + ['$_POST'] + ,['$_GET'] + ,['$_SESSION'] + ,['$_SERVER'] + ,['$_FILES'] + ,['$_ENV'] + ,['$_COOKIE'] + ,['$_REQUEST'] + // magic methods + ,['__construct', '§( {@} )'] + ,['__destruct', '§( {@} )'] + ,['__sleep', '§( {@} )'] + ,['__wakeup', '§( {@} )'] + ,['__toString', '§( {@} )'] + // include + ,['include', '§ "{@}";'] + ,['include_once', '§ "{@}";'] + ,['require', '§ "{@}";'] + ,['require_once', '§ "{@}";'] + // statements + ,['for', '§( {@} )'] + ,['foreach', '§( {@} )'] + ,['if', '§( {@} )'] + ,['elseif', '§( {@} )'] + ,['while', '§( {@} )'] + ,['switch', '§( {@} )'] + ,['break'] + ,['case'] + ,['continue'] + ,['do'] + ,['else'] + ,['endif'] + ,['endswitch'] + ,['endwhile'] + ,['return'] + // function + ,['unset', '§( {@} )'] + ] + } + } + ,"live": { + + // class NAME: /class\W+([a-z]+)\W+/gi + // method: /^(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi + // static: /^(public|private|protected)?\s+static\s+(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi + // attributes: /(\$this\-\>|(?:var|public|protected|private)\W+\$)([a-z0-9\_]+)(?!\()\b/gi + // v1 : /(\$this\-\>|var\W+|public\W+|protected\W+|private\W+)([a-z0-9\_]+)\W*(=|;)/gi + // var type: /(\$(this\-\>)?[a-z0-9\_]+)\s*\=\s*new\s+([a-z0-9\_])+/gi + + + "REGEXP": { "before_word": "[^a-zA-Z0-9_]|^" // \\s|\\.| + ,"possible_words_letters": "[a-zA-Z0-9_\$]+" + ,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$" + ,"prefix_separator": "\\-\\>" + } + ,"CASE_SENSITIVE": true + ,"MAX_TEXT_LENGTH": 100 // the maximum length of the text being analyzed before the cursor position + ,"KEYWORDS": { + '$this': [ // the prefix of thoses items + ['test'] + ] + } + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/python.js b/ehcp/extplorer/scripts/editarea/reg_syntax/python.js new file mode 100755 index 0000000..1a5e7fb --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/python.js @@ -0,0 +1,145 @@ +/** + * Python syntax v 1.1 + * + * v1.1 by Andre Roberge (2006/12/27) + * +**/ +editAreaLoader.load_syntax["python"] = { + 'DISPLAY_NAME' : 'Python' + ,'COMMENT_SINGLE' : {1 : '#'} + ,'COMMENT_MULTI' : {} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : true + ,'KEYWORDS' : { + /* + ** Set 1: reserved words + ** http://python.org/doc/current/ref/keywords.html + ** Note: 'as' and 'with' have been added starting with Python 2.5 + */ + 'reserved' : [ + 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', + 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', + 'import', 'is', 'in', 'lambda', 'not', 'or', 'pass', 'print', 'raise', + 'return', 'try', 'while', 'with', 'yield' + //the following are *almost* reserved; we'll treat them as such + , 'False', 'True', 'None' + ] + /* + ** Set 2: builtins + ** http://python.org/doc/current/lib/built-in-funcs.html + */ + ,'builtins' : [ + '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp', + 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', + 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', + 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals', + 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', + 'vars', 'xrange', 'zip', + // Built-in constants: http://www.python.org/doc/2.4.1/lib/node35.html + //'False', 'True', 'None' have been included in 'reserved' + 'NotImplemented', 'Ellipsis', + // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html + 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError', + 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError', + 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError', + 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError', + 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError', + 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError', + 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning', + 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning', + 'RuntimeWarning', 'FutureWarning', + // we will include the string methods as well + // http://python.org/doc/current/lib/string-methods.html + 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', + 'find', 'index', 'isalnum', 'isaplpha', 'isdigit', 'islower', 'isspace', 'istitle', + 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', + 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', + 'translate', 'upper', 'zfill' + ] + /* + ** Set 3: standard library + ** http://python.org/doc/current/lib/modindex.html + */ + ,'stdlib' : [ + '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm', + 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer', + 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi', + 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop', + 'collections', 'colorsys', 'commands', 'compileall', 'compiler', 'compiler', + 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt', + 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE', + 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm', + 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl', + 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl', + 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob', + 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib', + 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect', + 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap', + 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify', + 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator', + 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes', + 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile', + 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random', + 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter', + 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve', + 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd', + 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string', + 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev', + 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios', + 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token', + 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2', + 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings', + 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml', + 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib' + + ] + /* + ** Set 4: special methods + ** http://python.org/doc/current/ref/specialnames.html + */ + ,'special' : [ + // Basic customization: http://python.org/doc/current/ref/customization.html + '__new__', '__init__', '__del__', '__repr__', '__str__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__', + '__hash__', '__nonzero__', '__unicode__', '__dict__', + // Attribute access: http://python.org/doc/current/ref/attribute-access.html + '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__', + '__delete__', '__slots__', + // Class creation, callable objects + '__metaclass__', '__call__', + // Container types: http://python.org/doc/current/ref/sequence-types.html + '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__', + '__getslice__', '__setslice__', '__delslice__', + // Numeric types: http://python.org/doc/current/ref/numeric-types.html + '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__', + '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__', + '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__', + '__long__','__lshift__', + '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__', + '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__', + '__rshift__','__rsub__','__rmul__','__repr__','__rand__','__rxor__','__ror__', + '__sub__','__xor__' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '&', ';', '?', '`', ':', ',' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #660066;' + ,'KEYWORDS' : { + 'reserved' : 'color: #0000FF;' + ,'builtins' : 'color: #009900;' + ,'stdlib' : 'color: #009900;' + ,'special': 'color: #006666;' + } + ,'OPERATORS' : 'color: #993300;' + ,'DELIMITERS' : 'color: #993300;' + + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/robotstxt.js b/ehcp/extplorer/scripts/editarea/reg_syntax/robotstxt.js new file mode 100755 index 0000000..9b141f0 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/robotstxt.js @@ -0,0 +1,25 @@ +editAreaLoader.load_syntax["robotstxt"] = { + 'DISPLAY_NAME' : 'Robots txt', + 'COMMENT_SINGLE' : {1 : '#'}, + 'COMMENT_MULTI' : {}, + 'QUOTEMARKS' : [], + 'KEYWORD_CASE_SENSITIVE' : false, + 'KEYWORDS' : { + 'attributes' : ['User-agent', 'Disallow', 'Allow', 'Crawl-delay'], + 'values' : ['*'], + 'specials' : ['*'] + }, + 'OPERATORS' :[':'], + 'DELIMITERS' :[], + 'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;', + 'QUOTESMARKS': 'color: #6381F8;', + 'KEYWORDS' : { + 'attributes' : 'color: #48BDDF;', + 'values' : 'color: #2B60FF;', + 'specials' : 'color: #FF0000;' + }, + 'OPERATORS' : 'color: #FF00FF;', + 'DELIMITERS' : 'color: #60CA00;' + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/ruby.js b/ehcp/extplorer/scripts/editarea/reg_syntax/ruby.js new file mode 100755 index 0000000..bca0140 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/ruby.js @@ -0,0 +1,68 @@ +/** + * Ruby syntax v 1.0 + * + * v1.0 by Patrice De Saint Steban (2007/01/03) + * +**/ +editAreaLoader.load_syntax["ruby"] = { + 'DISPLAY_NAME' : 'Ruby' + ,'COMMENT_SINGLE' : {1 : '#'} + ,'COMMENT_MULTI' : {} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : true + ,'KEYWORDS' : { + 'reserved' : [ + 'alias', 'and', 'BEGIN', 'begin', 'break', 'case', 'class', 'def', 'defined', 'do', 'else', + 'elsif', 'END', 'end', 'ensure', 'false', 'for', 'if', + 'in', 'module', 'next', 'not', 'or', 'redo', 'rescue', 'retry', + 'return', 'self', 'super', 'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '%', '!', '&', ';', '?', '`', ':', ',' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + 'constants' : { + 'search' : '()([A-Z]\\w*)()' + ,'class' : 'constants' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + ,'variables' : { + 'search' : '()([\$\@\%]+\\w+)()' + ,'class' : 'variables' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + ,'numbers' : { + 'search' : '()(-?[0-9]+)()' + ,'class' : 'numbers' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + ,'symbols' : { + 'search' : '()(:\\w+)()' + ,'class' : 'symbols' + ,'modifiers' : 'g' + ,'execute' : 'before' + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #660066;' + ,'KEYWORDS' : { + 'reserved' : 'font-weight: bold; color: #0000FF;' + } + ,'OPERATORS' : 'color: #993300;' + ,'DELIMITERS' : 'color: #993300;' + ,'REGEXPS' : { + 'variables' : 'color: #E0BD54;' + ,'numbers' : 'color: green;' + ,'constants' : 'color: #00AA00;' + ,'symbols' : 'color: #879EFA;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/sql.js b/ehcp/extplorer/scripts/editarea/reg_syntax/sql.js new file mode 100755 index 0000000..118ad5b --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/sql.js @@ -0,0 +1,56 @@ +editAreaLoader.load_syntax["sql"] = { + 'DISPLAY_NAME' : 'SQL' + ,'COMMENT_SINGLE' : {1 : '--'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'", 2: '"', 3: '`'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'select', 'SELECT', 'where', 'order', 'by', + 'insert', 'from', 'update', 'grant', 'left join', 'right join', + 'union', 'group', 'having', 'limit', 'alter', 'LIKE','IN','CASE' + ] + ,'reserved' : [ + 'null', 'enum', 'int', 'boolean', 'add', 'varchar' + + ] + ,'functions' : [ + 'ABS','ACOS','ADDDATE','ADDTIME','AES_DECRYPT','AES_ENCRYPT','ASCII','ASIN','ATAN2 ATAN','ATAN','AVG','BENCHMARK','DISTINCT','BIN','BIT_AND','BIT_COUNT','BIT_LENGTH','BIT_OR','BIT_XOR','CAST','CEILING CEIL','CHAR_LENGTH','CHAR', +'CHARACTER_LENGTH','CHARSET','COALESCE','COERCIBILITY','COLLATION','COMPRESS','CONCAT_WS','CONCAT','CONNECTION_ID','CONV','CONVERT_TZ','COS','COT','COUNT','CRC32','CURDATE','CURRENT_DATE','CURRENT_TIME','CURRENT_TIMESTAMP','CURRENT_USER','CURTIME','DATABASE','DATE_ADD','DATE_FORMAT','DATE_SUB','DATE','DATEDIFF','DAY','DAYNAME','DAYOFMONTH', +'DAYOFWEEK','DAYOFYEAR','DECODE','DEFAULT','DEGREES','DES_DECRYPT','DES_ENCRYPT','ELT','ENCODE','ENCRYPT','EXP','EXPORT_SET','EXTRACT','FIELD','FIND_IN_SET','FLOOR','FORMAT','FOUND_ROWS','FROM_DAYS','FROM_UNIXTIME','GET_FORMAT','GET_LOCK','GREATEST','GROUP_CONCAT','HEX','HOUR','IF','IFNULL','INET_ATON','INET_NTOA', +'INSERT','INSTR','INTERVAL','IS_FREE_LOCK','IS_USED_LOCK','ISNULL','LAST_DAY','LAST_INSERT_ID','LCASE','LEAST','LEFT','LENGTH','LN','LOAD_FILE','LOCALTIME','LOCALTIMESTAMP','LOCATE','LOG10','LOG2','LOG','LOWER','LPAD','LTRIM','MAKE_SET','MAKEDATE','MAKETIME','MASTER_POS_WAIT','MAX','MD5','MICROSECOND', +'MID','MIN','MINUTE','MOD','MONTH','MONTHNAME','NOW','NULLIF','OCT','OCTET_LENGTH','OLD_PASSWORD','ORD','PASSWORD','PERIOD_ADD','PERIOD_DIFF','PI','POSITION','POW','POWER','PROCEDURE ANALYSE','QUARTER','QUOTE','RADIANS','RAND','RELEASE_LOCK','REPEAT','REPLACE','REVERSE','RIGHT','ROUND', +'RPAD','RTRIM','SEC_TO_TIME','SECOND','SESSION_USER','SHA1','SHA','SIGN','SIN','SOUNDEX','SOUNDS LIKE','SPACE','SQRT','STD','STDDEV','STR_TO_DATE','STRCMP','SUBDATE','SUBSTRING_INDEX','SUBSTRING','SUBSTR','SUBTIME','SUM','SYSDATE','SYSTEM_USER','TAN','TIME_FORMAT','TIME_TO_SEC','TIME','TIMEDIFF', +'TIMESTAMP','TO_DAYS','TRIM','TRUNCATE','UCASE','UNCOMPRESS','UNCOMPRESSED_LENGTH','UNHEX','UNIX_TIMESTAMP','UPPER','USER','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','UUID','VALUES','VARIANCE','WEEK','WEEKDAY','WEEKOFYEAR','YEAR','YEARWEEK' + ] + } + ,'OPERATORS' :[ + 'AND','&&','BETWEEN','BINARY','&','|','^','/','DIV','<=>','=','>=','>','<<','>>','IS','NULL','<=','<','-','%','!=','<>','!','||','OR','+','REGEXP','RLIKE','XOR','~','*' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + // highlight all variables (@...) + 'variables' : { + 'search' : '()(\\@\\w+)()' + ,'class' : 'variables' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #879EFA;' + ,'KEYWORDS' : { + 'reserved' : 'color: #48BDDF;' + ,'functions' : 'color: #0040FD;' + ,'statements' : 'color: #60CA00;' + } + ,'OPERATORS' : 'color: #FF00FF;' + ,'DELIMITERS' : 'color: #2B60FF;' + ,'REGEXPS' : { + 'variables' : 'color: #E0BD54;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/tsql.js b/ehcp/extplorer/scripts/editarea/reg_syntax/tsql.js new file mode 100755 index 0000000..868567d --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/tsql.js @@ -0,0 +1,88 @@ +editAreaLoader.load_syntax["tsql"] = { + 'DISPLAY_NAME' : 'T-SQL' + ,'COMMENT_SINGLE' : {1 : '--'} + ,'COMMENT_MULTI' : {'/*' : '*/'} + ,'QUOTEMARKS' : {1: "'" } + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements': [ + 'ADD', 'EXCEPT', 'PERCENT', 'EXEC', 'PLAN', 'ALTER', 'EXECUTE', 'PRECISION', + 'PRIMARY', 'EXIT', 'PRINT', 'AS', 'FETCH', 'PROC', 'ASC', + 'FILE', 'PROCEDURE', 'AUTHORIZATION', 'FILLFACTOR', 'PUBLIC', 'BACKUP', 'FOR', 'RAISERROR', + 'BEGIN', 'FOREIGN', 'READ', 'FREETEXT', 'READTEXT', 'BREAK', 'FREETEXTTABLE', + 'RECONFIGURE', 'BROWSE', 'FROM', 'REFERENCES', 'BULK', 'FULL', 'REPLICATION', 'BY', + 'FUNCTION', 'RESTORE', 'CASCADE', 'GOTO', 'RESTRICT', 'CASE', 'GRANT', 'RETURN', + 'CHECK', 'GROUP', 'REVOKE', 'CHECKPOINT', 'HAVING', 'RIGHT', 'CLOSE', 'HOLDLOCK', 'ROLLBACK', + 'CLUSTERED', 'IDENTITY', 'ROWCOUNT', 'IDENTITY_INSERT', 'ROWGUIDCOL', 'COLLATE', + 'IDENTITYCOL', 'RULE', 'COLUMN', 'IF', 'SAVE', 'COMMIT', 'SCHEMA', 'COMPUTE', 'INDEX', + 'SELECT', 'CONSTRAINT', 'CONTAINS', 'INSERT', 'SET', + 'CONTAINSTABLE', 'INTERSECT', 'SETUSER', 'CONTINUE', 'INTO', 'SHUTDOWN', 'SOME', + 'CREATE', 'STATISTICS', 'KEY', 'CURRENT', 'KILL', 'TABLE', + 'CURRENT_DATE', 'TEXTSIZE', 'CURRENT_TIME', 'THEN', 'LINENO', + 'TO', 'LOAD', 'TOP', 'CURSOR', 'NATIONAL', 'TRAN', 'DATABASE', 'NOCHECK', + 'TRANSACTION', 'DBCC', 'NONCLUSTERED', 'TRIGGER', 'DEALLOCATE', 'TRUNCATE', + 'DECLARE', 'TSEQUAL', 'DEFAULT', 'UNION', 'DELETE', 'OF', 'UNIQUE', + 'DENY', 'OFF', 'UPDATE', 'DESC', 'OFFSETS', 'UPDATETEXT', 'DISK', 'ON', 'USE', 'DISTINCT', 'OPEN', + 'DISTRIBUTED', 'OPENDATASOURCE', 'VALUES', 'DOUBLE', 'OPENQUERY', 'VARYING', 'DROP', + 'OPENROWSET', 'VIEW', 'DUMMY', 'OPENXML', 'WAITFOR', 'DUMP', 'OPTION', 'WHEN', 'ELSE', 'WHERE', + 'END', 'ORDER', 'WHILE', 'ERRLVL', 'WITH', 'ESCAPE', 'OVER', 'WRITETEXT' + ], + 'functions': [ + 'COALESCE', 'SESSION_USER', 'CONVERT', 'SYSTEM_USER', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'NULLIF', 'USER', + 'AVG', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG', 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'GROUPING', 'VARP', 'MAX', + '@@DATEFIRST', '@@OPTIONS', '@@DBTS', '@@REMSERVER', '@@LANGID', '@@SERVERNAME', '@@LANGUAGE', '@@SERVICENAME', '@@LOCK_TIMEOUT', + '@@SPID', '@@MAX_CONNECTIONS', '@@TEXTSIZE', '@@MAX_PRECISION', '@@VERSION', '@@NESTLEVEL', + '@@CURSOR_ROWS', 'CURSOR_STATUS', '@@FETCH_STATUS', + 'DATEADD', 'DATEDIFF', 'DATENAME', 'DATEPART', 'DAY', 'GETDATE', 'GETUTCDATE', 'MONTH', 'YEAR', + 'ABS', 'DEGREES', 'RAND', 'ACOS', 'EXP', 'ROUND', 'ASIN', 'FLOOR', 'SIGN', 'ATAN', 'LOG', 'SIN', 'ATN2', 'LOG10', 'SQRT', + 'CEILING', 'PI ', 'SQUARE', 'COS', 'POWER', 'TAN', 'COT', 'RADIANS', + '@@PROCID', 'COL_LENGTH', 'FULLTEXTCATALOGPROPERTY', 'COL_NAME', 'FULLTEXTSERVICEPROPERTY', 'COLUMNPROPERTY', 'INDEX_COL', + 'DATABASEPROPERTY', 'INDEXKEY_PROPERTY', 'DATABASEPROPERTYEX', 'INDEXPROPERTY', 'DB_ID', 'OBJECT_ID', 'DB_NAME', 'OBJECT_NAME', + 'FILE_ID', 'OBJECTPROPERTY', 'OBJECTPROPERTYEX', 'FILE_NAME', 'SQL_VARIANT_PROPERTY', 'FILEGROUP_ID', 'FILEGROUP_NAME', + 'FILEGROUPPROPERTY', 'TYPEPROPERTY', 'FILEPROPERTY', + 'CURRENT_USER', 'SUSER_ID', 'SUSER_SID', 'IS_MEMBER', 'SUSER_SNAME', 'IS_SRVROLEMEMBER', 'PERMISSIONS', 'SYSTEM_USER', + 'SUSER_NAME', 'USER_ID', 'SESSION_USER', 'USER_NAME', 'ASCII', 'SOUNDEX', 'PATINDEX', 'SPACE', 'CHARINDEX', 'QUOTENAME', + 'STR', 'DIFFERENCE', 'REPLACE', 'STUFF', 'REPLICATE', 'SUBSTRING', 'LEN', 'REVERSE', 'UNICODE', 'LOWER', + 'UPPER', 'LTRIM', 'RTRIM', 'APP_NAME', 'CAST', 'CONVERT', 'COALESCE', 'COLLATIONPROPERTY', 'COLUMNS_UPDATED', 'CURRENT_TIMESTAMP', + 'CURRENT_USER', 'DATALENGTH', '@@ERROR', 'FORMATMESSAGE', 'GETANSINULL', 'HOST_ID', 'HOST_NAME', 'IDENT_CURRENT', 'IDENT_INCR', + 'IDENT_SEED', '@@IDENTITY', 'ISDATE', 'ISNULL', 'ISNUMERIC', 'NEWID', 'NULLIF', 'PARSENAME', '@@ROWCOUNT', + 'SCOPE_IDENTITY', 'SERVERPROPERTY', 'SESSIONPROPERTY', 'SESSION_USER', 'STATS_DATE', 'SYSTEM_USER', '@@TRANCOUNT', 'USER_NAME', + '@@CONNECTIONS', '@@PACK_RECEIVED', '@@CPU_BUSY', '@@PACK_SENT', '@@TIMETICKS', '@@IDLE', '@@TOTAL_ERRORS', '@@IO_BUSY', '@@TOTAL_READ', + '@@PACKET_ERRORS', '@@TOTAL_WRITE', 'PATINDEX', 'TEXTVALID', 'TEXTPTR' + ], + 'reserved': [ + 'RIGHT', 'INNER', 'IS', 'JOIN', 'CROSS', 'LEFT', 'NULL', 'OUTER' + ] + } + ,'OPERATORS' :[ + '+', '-', '*', '/', '%', '=', '&' ,'|', '^', '>', '<', '>=', '<=', '<>', '!=', '!<', '!>', 'ALL', 'AND', 'ANY', 'BETWEEN', 'EXISTS', 'IN', 'LIKE', 'NOT', 'OR', '~' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'REGEXPS' : { + // highlight all variables (@...) + 'variables' : { + 'search' : '()(\\@\\w+)()' + ,'class' : 'variables' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #008000;' + ,'QUOTESMARKS': 'color: #FF0000;' + ,'KEYWORDS' : { + 'reserved' : 'color: #808080;' + ,'functions' : 'color: #FF00FF;' + ,'statements' : 'color: #0000FF;' + } + ,'OPERATORS' : 'color: #808080;' + ,'DELIMITERS' : 'color: #FF8000;' + ,'REGEXPS' : { + 'variables' : 'color: #E0BD54;' + } + } +}; + + diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/vb.js b/ehcp/extplorer/scripts/editarea/reg_syntax/vb.js new file mode 100755 index 0000000..c831300 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/vb.js @@ -0,0 +1,53 @@ +editAreaLoader.load_syntax["vb"] = { + 'DISPLAY_NAME' : 'Visual Basic' + ,'COMMENT_SINGLE' : {1 : "'"} + ,'COMMENT_MULTI' : { } + ,'QUOTEMARKS' : {1: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + 'statements' : [ + 'if','then','for','each','while','do','loop', + 'else','elseif','select','case','end select', + 'until','next','step','to','in','end if' + ] + ,'keywords' : [ + 'empty','isempty','nothing','null','isnull','true','false', + 'set','call', + 'sub','end sub','function','end function','exit','exit function', + 'dim','Mod','In','private','public','shared','const' + ] + + ,'functions' : [ + 'CDate','Date','DateAdd','DateDiff','DatePart','DateSerial','DateValue','Day','FormatDateTime', + 'Hour','IsDate','Minute','Month', + 'MonthName','Now','Second','Time','Timer','TimeSerial','TimeValue','Weekday','WeekdayName ','Year', + 'Asc','CBool','CByte','CCur','CDate','CDbl','Chr','CInt','CLng','CSng','CStr','Hex','Oct','FormatCurrency', + 'FormatDateTime','FormatNumber','FormatPercent','Abs','Atn','Cos','Exp','Hex','Int','Fix','Log','Oct', + 'Rnd','Sgn','Sin','Sqr','Tan', + 'Array','Filter','IsArray','Join','LBound','Split','UBound', + 'InStr','InStrRev','LCase','Left','Len','LTrim','RTrim','Trim','Mid','Replace','Right','Space','StrComp', + 'String','StrReverse','UCase', + 'CreateObject','Eval','GetLocale','GetObject','GetRef','InputBox','IsEmpty','IsNull','IsNumeric', + 'IsObject','LoadPicture','MsgBox','RGB','Round','ScriptEngine','ScriptEngineBuildVersion','ScriptEngineMajorVersion', + 'ScriptEngineMinorVersion','SetLocale','TypeName','VarType' + ] + } + ,'OPERATORS' :[ + '+', '-', '/', '*', '=', '<', '>', '!', '&' + ] + ,'DELIMITERS' :[ + '(', ')', '[', ']', '{', '}' + ] + ,'STYLES' : { + 'COMMENTS': 'color: #99CC00;' + ,'QUOTESMARKS': 'color: #333399;' + ,'KEYWORDS' : { + 'keywords' : 'color: #3366FF;' + ,'functions' : 'color: #0000FF;' + ,'statements' : 'color: #3366FF;' + } + ,'OPERATORS' : 'color: #FF0000;' + ,'DELIMITERS' : 'color: #0000FF;' + + } +}; diff --git a/ehcp/extplorer/scripts/editarea/reg_syntax/xml.js b/ehcp/extplorer/scripts/editarea/reg_syntax/xml.js new file mode 100755 index 0000000..03f6076 --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/reg_syntax/xml.js @@ -0,0 +1,57 @@ +/* +* last update: 2006-08-24 +*/ + +editAreaLoader.load_syntax["xml"] = { + 'DISPLAY_NAME' : 'XML' + ,'COMMENT_SINGLE' : {} + ,'COMMENT_MULTI' : {''} + ,'QUOTEMARKS' : {1: "'", 2: '"'} + ,'KEYWORD_CASE_SENSITIVE' : false + ,'KEYWORDS' : { + } + ,'OPERATORS' :[ + ] + ,'DELIMITERS' :[ + ] + ,'REGEXPS' : { + 'xml' : { + 'search' : '()(<\\?[^>]*?\\?>)()' + ,'class' : 'xml' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + ,'cdatas' : { + 'search' : '()()()' + ,'class' : 'cdata' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + ,'tags' : { + 'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)' + ,'class' : 'tags' + ,'modifiers' : 'gi' + ,'execute' : 'before' // before or after + } + ,'attributes' : { + 'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)' + ,'class' : 'attributes' + ,'modifiers' : 'g' + ,'execute' : 'before' // before or after + } + } + ,'STYLES' : { + 'COMMENTS': 'color: #AAAAAA;' + ,'QUOTESMARKS': 'color: #6381F8;' + ,'KEYWORDS' : { + } + ,'OPERATORS' : 'color: #E775F0;' + ,'DELIMITERS' : '' + ,'REGEXPS' : { + 'attributes': 'color: #B1AC41;' + ,'tags': 'color: #E62253;' + ,'xml': 'color: #8DCFB5;' + ,'cdata': 'color: #50B020;' + } + } +}; diff --git a/ehcp/extplorer/scripts/editarea/template.html b/ehcp/extplorer/scripts/editarea/template.html new file mode 100755 index 0000000..738ffce --- /dev/null +++ b/ehcp/extplorer/scripts/editarea/template.html @@ -0,0 +1,100 @@ + + + + + EditArea + + + [__CSSRULES__] + [__JSCODE__] + + +
+
[__TOOLBAR__]
+
+
+
+
+
 
+
 
+
+
+
+
+
+ + +
+
+
+ + + + + + + + +
{$position}: + {$line_abbr} 0, {$char_abbr} 0 + {$total}: + {$line_abbr} 0, {$char_abbr} 0 + + resize +
+
+
+
+
+ {$processing} +
+
+ +
+ + + + + + + + + +
{$search} + {$close_popup}
+
{$replace}{$move_popup}
+
+ + +
+ {$find_next} + {$replace} + {$replace_all}
+
+
+
+
+
+ {$close_popup} +
+

Editarea [__EA_VERSION__]


+

{$shortcuts}:

+ {$tab}: {$add_tab}
+ {$shift}+{$tab}: {$remove_tab}
+ {$ctrl}+f: {$search_command}
+ {$ctrl}+r: {$replace_command}
+ {$ctrl}+h: {$highlight}
+ {$ctrl}+g: {$go_to_line}
+ {$ctrl}+z: {$undo}
+ {$ctrl}+y: {$redo}
+ {$ctrl}+e: {$help}
+ {$ctrl}+q, {$esc}: {$close_popup}
+ {$accesskey} E: {$toggle}
+
+ {$about_notice} +
+
+
+ + diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.editareaadapater/ext-editarea-adapter.js b/ehcp/extplorer/scripts/extjs3-ext/ux.editareaadapater/ext-editarea-adapter.js new file mode 100755 index 0000000..c365e44 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.editareaadapater/ext-editarea-adapter.js @@ -0,0 +1,85 @@ +Ext.namespace('Ext.ux.plugins'); + +Ext.ux.plugins.EditAreaEditor = function(config){ + Ext.apply(this, {config:config}); +}; + +Ext.extend(Ext.ux.plugins.EditAreaEditor, Ext.util.Observable, { + config: { + start_highlight: true + }, + onRender:function(o){ + Ext.apply(this.config, { id: o.id}); + editAreaLoader.init(this.config); + editAreaLoader.start(o.id); + }, + init: function(textarea) { + textarea.on('render', this.onRender, this); + // Extend Textarea + Ext.apply(textarea, { + setValue:textarea.setValue.createSequence(function(ct, position) { + //alert('update:'+textarea.id); + editAreaLoader.setValue(textarea.id, editAreaLoader.getValue(textarea.id)) + }), + + getValue: function() { return editAreaLoader.getValue(textarea.id) }, + + beforeDestroy:textarea.beforeDestroy.createSequence(function(ct, position) { + //TODO + + } + ) + }); + + } + +}); + +// register xtype +Ext.reg('editarea', Ext.ux.plugins.EditAreaEditor); + +Ext.app.SearchField = Ext.extend(Ext.form.TwinTriggerField, { + initComponent : function(){ + Ext.app.SearchField.superclass.initComponent.call(this); + this.on('specialkey', function(f, e){ + if(e.getKey() == e.ENTER){ + this.onTrigger2Click(); + } + }, this); + }, + + validationEvent:false, + validateOnBlur:false, + trigger1Class:'x-form-clear-trigger', + trigger2Class:'x-form-search-trigger', + hideTrigger1:true, + width:180, + hasSearch : false, + paramName : 'searchitem', + + onTrigger1Click : function(){ + if(this.hasSearch){ + this.el.dom.value = ''; + var o = {start: 0}; + this.store.baseParams = this.store.baseParams || {}; + this.store.baseParams[this.paramName] = ''; + this.store.reload({params:o}); + this.triggers[0].hide(); + this.hasSearch = false; + } + }, + + onTrigger2Click : function(){ + var v = this.getRawValue(); + if(v.length < 1){ + this.onTrigger1Click(); + return; + } + var o = {start: 0}; + this.store.baseParams = this.store.baseParams || {}; + this.store.baseParams[this.paramName] = v; + this.store.reload({params:o}); + this.hasSearch = true; + this.triggers[0].show(); + } +}); diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/ext-fileUploadField.js b/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/ext-fileUploadField.js new file mode 100755 index 0000000..b086b1d --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/ext-fileUploadField.js @@ -0,0 +1,145 @@ +/*! + * Ext JS Library 3.0.0 + * Copyright(c) 2006-2009 Ext JS, LLC + * licensing@extjs.com + * http://www.extjs.com/license + */ +Ext.ns('Ext.ux.form'); + +/** + * @class Ext.ux.form.FileUploadField + * @extends Ext.form.TextField + * Creates a file upload field. + * @xtype fileuploadfield + */ +Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, { + /** + * @cfg {String} buttonText The button text to display on the upload button (defaults to + * 'Browse...'). Note that if you supply a value for {@link #buttonCfg}, the buttonCfg.text + * value will be used instead if available. + */ + buttonText: 'Browse...', + /** + * @cfg {Boolean} buttonOnly True to display the file upload field as a button with no visible + * text field (defaults to false). If true, all inherited TextField members will still be available. + */ + buttonOnly: false, + /** + * @cfg {Number} buttonOffset The number of pixels of space reserved between the button and the text field + * (defaults to 3). Note that this only applies if {@link #buttonOnly} = false. + */ + buttonOffset: 3, + /** + * @cfg {Object} buttonCfg A standard {@link Ext.Button} config object. + */ + + // private + readOnly: true, + + /** + * @hide + * @method autoSize + */ + autoSize: Ext.emptyFn, + + // private + initComponent: function(){ + Ext.ux.form.FileUploadField.superclass.initComponent.call(this); + + this.addEvents( + /** + * @event fileselected + * Fires when the underlying file input field's value has changed from the user + * selecting a new file from the system file selection dialog. + * @param {Ext.ux.form.FileUploadField} this + * @param {String} value The file value returned by the underlying file input field + */ + 'fileselected' + ); + }, + + // private + onRender : function(ct, position){ + Ext.ux.form.FileUploadField.superclass.onRender.call(this, ct, position); + + this.wrap = this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'}); + this.el.addClass('x-form-file-text'); + this.el.dom.removeAttribute('name'); + + this.fileInput = this.wrap.createChild({ + id: this.getFileInputId(), + name: this.name||this.getId(), + cls: 'x-form-file', + tag: 'input', + type: 'file', + size: 1 + }); + + var btnCfg = Ext.applyIf(this.buttonCfg || {}, { + text: this.buttonText + }); + this.button = new Ext.Button(Ext.apply(btnCfg, { + renderTo: this.wrap, + cls: 'x-form-file-btn' + (btnCfg.iconCls ? ' x-btn-icon' : '') + })); + + if(this.buttonOnly){ + this.el.hide(); + this.wrap.setWidth(this.button.getEl().getWidth()); + } + + this.fileInput.on('change', function(){ + var v = this.fileInput.dom.value; + this.setValue(v); + this.fireEvent('fileselected', this, v); + }, this); + }, + + // private + getFileInputId: function(){ + return this.id + '-file'; + }, + + // private + onResize : function(w, h){ + Ext.ux.form.FileUploadField.superclass.onResize.call(this, w, h); + + this.wrap.setWidth(w); + + if(!this.buttonOnly){ + var w = this.wrap.getWidth() - this.button.getEl().getWidth() - this.buttonOffset; + this.el.setWidth(w); + } + }, + + // private + onDestroy: function(){ + Ext.ux.form.FileUploadField.superclass.onDestroy.call(this); + Ext.destroy(this.fileInput, this.button, this.wrap); + }, + + + // private + preFocus : Ext.emptyFn, + + // private + getResizeEl : function(){ + return this.wrap; + }, + + // private + getPositionEl : function(){ + return this.wrap; + }, + + // private + alignErrorIcon : function(){ + this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]); + } + +}); + +Ext.reg('fileuploadfield', Ext.ux.form.FileUploadField); + +// backwards compat +Ext.form.FileUploadField = Ext.ux.form.FileUploadField; diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/fileuploadfield.css b/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/fileuploadfield.css new file mode 100755 index 0000000..78cbb61 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.fileuploadfield/fileuploadfield.css @@ -0,0 +1,33 @@ +/*! + * Ext JS Library 3.0+ + * Copyright(c) 2006-2009 Ext JS, LLC + * licensing@extjs.com + * http://www.extjs.com/license + */ +/* + * FileUploadField component styles + */ +.x-form-file-wrap { + position: relative; + height: 22px; +} +.x-form-file-wrap .x-form-file { + position: absolute; + right: 0; + -moz-opacity: 0; + filter:alpha(opacity: 0); + opacity: 0; + z-index: 2; + height: 22px; +} +.x-form-file-wrap .x-form-file-btn { + position: absolute; + right: 0; + z-index: 1; +} +.x-form-file-wrap .x-form-file-text { + position: absolute; + left: 0; + z-index: 3; + color: #777; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Ext.ux.LocationBar.js b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Ext.ux.LocationBar.js new file mode 100755 index 0000000..e0e1d74 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Ext.ux.LocationBar.js @@ -0,0 +1,431 @@ +/* + * Copyright 2008, brainbits GmbH All rights reserved. + * Author: Stephan Wentz. swentz[at]brainbits.net + * + * http://www.brainbits.net/ + */ + +/** + * LocationBar class + * Version: 0.1 + * @class Ext.ux.Locationbar + * @extends Ext.Toolbar + * Locationbar class. + * @constructor + * Creates a new LocationBar + * @param {Object/Array} config A config object or an array of buttons to add + */ +Ext.ux.LocationBar = Ext.extend(Ext.Toolbar, { + + /** + * @cfg {Number} maxItem Maximum number of items the Locationbar takes before the first items are removed (defaults to 15). + * Set to 0 for unlimited items. + */ + maxItems: 15, + + /** + * @cfg {String} emptyText The that is shown if no history is available (defaults to 'No node selected.'). + */ + emptyText: 'No node selected.', + + /** + * @cfg {Boolean} noReload If set to true the reload button will not be visible (defaults to false). + */ + noReload: false, + + /** + * @cfg {Function} selectHandler The function to + * call when clicked. Arguments passed are:
    + *
  • node : Object

    The node associated with the clicked item.

  • + *
+ */ + selectHandler: null, + + /** + * @cfg {Function} reloadHandler The function to + * call when clicked. Arguments passed are:
    + *
  • node : Object

    The node associated with the current item.

  • + *
+ */ + reloadHandler: null, + + /** + * @cfg {String} locationItems Initial items (defaults to []). + */ + locationItems: [], + + /** + * @cfg {String} folderIconCls Iconclass for folder icons. + */ + folderIconCls: 'x-locationbar-folder-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the backward icon. + */ + backwardIconCls: 'x-locationbar-back-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the forward icon. + */ + forwardIconCls: 'x-locationbar-forward-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the reload icon. + */ + reloadIconCls: 'x-locationbar-reload-icon', + + /** + * @cfg {Ext.tree.TreePanel} tree The treePanel this Locationbar is associated with. + */ + tree: null, + + // private + historyItemNodes: {}, + + // private + historyItems: [], + + // private + currentItem: false, + + // private + historyNext: true, + + // private + initComponent: function() { + + if(this.tree) { + this.tree.getLoader().addListener('load',function(tl,node,resp){ + if(node){ + node.loaded=true; + this.setNode(node); + } + },this) + this.tree.getSelectionModel().addListener('selectionchange', function(sm, node) { + if(node != null){ + if( node && node.id ) { + chDir( node.id.replace( /_RRR_/g, '/' ), true ); + } + if (node.isLeaf()==false && node.childNodes.length==0){ + //console.log(node.isLeaf(),node.childNodes.length) + this.nodeJustLoaded=node; + this.tree.getLoader().load(node); + //this.loadNode(node); + }else{ + this.setNode(node); + } + } + }, this) + + } + + //this.addListener('render', this.repaint, this); + + Ext.ux.LocationBar.superclass.initComponent.call(this); + }, + + // private + autoCreate: { + cls:'x-toolbar x-small-editor x-locationbar', + html:'
' + }, + + // private + onRender: function(ct, position) { + Ext.ux.LocationBar.superclass.onRender.call(this, ct, position); + + this.repaint(); + }, + + // private + onClick: function(node) { + if (this.selectHandler) { + this.selectHandler(node); + } else { + if(node.parentNode) { + node.parentNode.expand(false,true) + node.ensureVisible(); + } + node.select(); + } + }, + + // private + onReload: function(node) { + if (this.reloadHandler) { + this.reloadHandler(node); + } else if(node.reload) { + node.reload(); + } + }, + + /** + * Clears all items from the LocationBar. + */ + clear: function() { + this.locationItems = []; + + this.repaint; + }, + + /** + * Sets the current Treenode + * If a tree was provided as a config to this LocationBar, this should + * be called automatically. + * @param {Ext.ux.TreeNode} node The currently selected TreeNode + */ + setNode: function(node) { + var path = []; + var pNode = node; + var i; + do { + var conf = { + text: pNode.attributes.text, + node: pNode, + handler: this.onClick.createDelegate(this, [pNode], false) + }; + if (pNode.childNodes.length) { + var childs = []; + + for (i = 0; i < pNode.childNodes.length; i++) { + + childs[i] = { + text: pNode.childNodes[i].attributes.text, + node: pNode.childNodes[i], + iconCls: this.folderIconCls, + handler: this.onClick.createDelegate(this, [pNode.childNodes[i]], false) + }; + } + conf.xtype = 'tbsplit'; + conf.menu = childs; + } + conf.fullPath = pNode.getPath('text').substr(1); + path.unshift(conf); + } while (pNode.parentNode && (pNode = pNode.parentNode) && pNode.id != 'root') + + this.locationItems = []; + + for(i=0; i maxItems, remove last + if(this.maxItems && this.locationItems.length > this.maxItems) { + this.locationItems.pop(); + } + + // put new item at the end + this.locationItems.push(item); + }, + + // private + repaint: function() { + if (this.items && this.items.length) { + var _doLayout = true; + this.items.each(function(item){ + this.items.remove(item); + item.destroy(); + }, this.items); + } else { + var _doLayout = false; + } + try { + this.items.each(function(item){ + this.items.remove(item); + item.destroy(); + }, this.items); + } catch(e) {} + // back button + this.add({ + cls: 'x-btn-icon', + iconCls: this.backwardIconCls, + handler: function() { + this.historyNext = this.historyItems.pop(); + var itemKey = this.historyItems.pop(); + var item = this.historyItemNodes[itemKey]; + this.onClick(item.node); + }, + scope: this, + disabled: this.historyItems.length > 1 ? false : true + }); + + // forward button + // TODO: disabled, FUBAR + this.add({ + cls: 'x-btn-icon', + iconCls: this.forwardIconCls, + handler: function() { + var node = this.historyNext.node; + this.historyNext = false; + this.onClick(node); + }, + scope: this, + disabled: true //this.historyNext ? false : true + }); + + this.add(' ','-',' '); + + if (this.locationItems.length) { + // folder icon + this.add({ + cls: 'x-btn-icon', + iconCls: this.folderIconCls, + ctCls: 'x-locationbar-location x-locationbar-location-first', + disabled: true + }); + + var text; + for (var i = 0; i < this.locationItems.length; i++) { + var locationItem = this.locationItems[i]; + + var item = {}; + + if (typeof locationItem == 'object') { + item = locationItem; + } + else { + item.text = locationItem; + } + + if(!item.text) { + item.text = 'n/a'; + } + + item.handler = this.onClick.createDelegate(this, [locationItem.node], false); + + item.ctCls = 'x-locationbar-location'; + + this.add(item); + } + + // spacer + this.addItem( + { + cls: 'x-locationbar-location x-locationbar-location-last', + xtype: 'tbfill' + }); + + menu = []; + for(var i=this.historyItems.length-2; i>=0; i--) { + menu.push({ + text: this.historyItemNodes[this.historyItems[i]].fullPath, + iconCls: this.folderIconCls, + node: this.historyItemNodes[this.historyItems[i]].node, + handler: function(item) { + this.onClick(item.node); + }, + scope: this + }); + } + this.add({ + cls: 'x-btn-icon', + ctCls: 'x-locationbar-location x-locationbar-location-last', + menuAlign: 'tr-br?', + menu: menu + }); + if(!this.noReload) { + this.add(' '); + // reload button + this.add({ + cls: 'x-btn-icon', + iconCls: this.reloadIconCls, + handler: function() { + this.onReload(this.currentItem.node); + }, + scope: this + }); + } + this.add(' '); + } else { + this.add({ + cls: 'x-btn-icon', + iconCls: this.folderIconCls, + ctCls: 'x-locationbar-location x-locationbar-location-first', + disabled: true + }); + + if(this.emptyText) { + this.add({ + xtype: 'lbtext', + text: this.emptyText + }); + } + + this.addItem(new Ext.ux.LocationBar.Fill()); + + this.add({ + cls: 'x-btn-icon', + ctCls: 'x-locationbar-location x-locationbar-location-last', + menuAlign: 'tr-br?', + disabled: true + }); + this.add(' '); + this.add({ + cls: 'x-btn-icon', + iconCls: this.reloadIconCls, + disabled: true + }); + this.add(' '); + } + if (_doLayout === true) { + this.doLayout(); + } + + } +}); + +Ext.reg('locationbar', Ext.ux.LocationBar); + +Ext.ux.Fill = Ext.extend(Ext.Toolbar.Spacer, { + // private + render : function(td){ + + td.style.width = '100%'; + Ext.fly(td).addClass('x-locationbar-location'); + Ext.ux.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('tbfill', Ext.ux.Fill); + +Ext.ux.LocationBar.Fill = Ext.extend(Ext.Toolbar.Fill, { + // private + render : function(td){ + td.className = 'x-locationbar-location'; + + // insert a   + var data = document.createTextNode('\u00a0'); + this.el.appendChild(data); + + Ext.ux.LocationBar.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('lbfill', Ext.ux.LocationBar.Fill); + +Ext.ux.LocationBar.TextItem = Ext.extend(Ext.Toolbar.TextItem, { + // private + render : function(td){ + td.className = 'x-locationbar-location'; + + Ext.ux.LocationBar.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('lbtext', Ext.ux.LocationBar.TextItem); diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/LocationBar.css b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/LocationBar.css new file mode 100755 index 0000000..1cb1d12 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/LocationBar.css @@ -0,0 +1,41 @@ +.x-locationbar { + padding-left: 5px; +} +.x-locationbar .x-locationbar-location { + background-color: white; + border-top: 1px solid #96969D; + border-bottom: 1px solid #96969D; +} +.x-locationbar .x-locationbar-location-first { + border-left: 1px solid #96969D; +} +.x-locationbar .x-locationbar-location-last { + border-right: 1px solid #96969D; +} +.x-locationbar-folder-icon { + background-image: url("location_folder.png") !important; +} +.x-locationbar-back-icon { + background-image: url("location_back.png") !important; +} +.x-locationbar-forward-icon { + background-image: url("location_forward.png") !important; +} +.x-locationbar-reload-icon { + background-image: url("location_reload.png") !important; +} +.x-locationbar .x-btn-menu-arrow-wrap .x-btn-center button { + background:transparent url(btn-arrow.gif) no-repeat scroll 0pt 3px; + width: 12px; +} +.x-locationbar .x-btn-menu-active .x-btn-menu-arrow-wrap .x-btn-center button { + background-position: 0pt -97px; +} +.x-locationbar .x-btn-click .x-btn-center, +.x-locationbar .x-btn-pressed .x-btn-center, +.x-locationbar .x-btn-menu-active .x-btn-center { + background:transparent url(tb-btn-sprite.gif) repeat-x scroll 0pt -105px; +} + +/* HIDE BAD NON-WORKING CODE */ +td.x-toolbar-cell.x-locationbar-location.x-locationbar-location-last{display: none;} diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-component.html b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-component.html new file mode 100755 index 0000000..98fc489 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-component.html @@ -0,0 +1,96 @@ + + + +LocationBar demo + + + + + + + + + + + + + diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-render.html b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-render.html new file mode 100755 index 0000000..f5c0dd8 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/Locationbar-render.html @@ -0,0 +1,96 @@ + + + +LocationBar demo + + + + + + + + + + + +

TreePanel with a Locationbar

+

Click on a node inside the tree.

+ +
+
+ + + diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/btn-arrow.gif b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/btn-arrow.gif new file mode 100755 index 0000000..876f4e1 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/btn-arrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_back.png b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_back.png new file mode 100755 index 0000000..5dc6967 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_back.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_folder.png b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_folder.png new file mode 100755 index 0000000..784e8fa Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_folder.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_forward.png b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_forward.png new file mode 100755 index 0000000..b1a1819 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_forward.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_reload.png b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_reload.png new file mode 100755 index 0000000..0de2656 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/location_reload.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/tb-btn-sprite.gif b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/tb-btn-sprite.gif new file mode 100755 index 0000000..19bbef3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.locationbar/tb-btn-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.ondemandload/scriptloader.js b/ehcp/extplorer/scripts/extjs3-ext/ux.ondemandload/scriptloader.js new file mode 100755 index 0000000..a52bc9e --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.ondemandload/scriptloader.js @@ -0,0 +1,51 @@ +Ext.namespace('Ext.ux'); +var scriptRegister = []; +Ext.ux.OnDemandLoad = function(){ + + loadComponent = function(component, callback){ + + if( !scriptRegister[component] ) { + scriptRegister[component] = { loaded: false }; + } + var fileType = component.substring(component.lastIndexOf('.')); + var head = document.getElementsByTagName("head")[0]; + var done = false; + if (fileType === ".js" ) { + if( !scriptRegister[component].loaded ) { + var fileRef = document.createElement('script'); + fileRef.setAttribute("type", "text/javascript"); + fileRef.setAttribute("src", component); + fileRef.onload = fileRef.onreadystatechange = function(){ + if (!done) { + scriptRegister[component].loaded = true; + + done = true; + if(typeof callback == "function"){ + callback(); + }; + head.removeChild(fileRef); + } + }; + } else { + if(typeof callback == "function"){ + callback(); + }; + } + } else if (fileType === ".css" && !scriptRegister[component].loaded) { + var fileRef = document.createElement("link"); + fileRef.setAttribute("type", "text/css"); + fileRef.setAttribute("rel", "stylesheet"); + fileRef.setAttribute("href", component); + scriptRegister[component].loaded = true; + } + if (typeof fileRef != "undefined") { + head.appendChild(fileRef); + } + }; + + return { + load: function(component, callback){ + loadComponent(component, callback); + } + }; +}(); \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.statusbar/ext-statusbar.js b/ehcp/extplorer/scripts/extjs3-ext/ux.statusbar/ext-statusbar.js new file mode 100755 index 0000000..195bcd5 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.statusbar/ext-statusbar.js @@ -0,0 +1,80 @@ +Ext.namespace('Ext.ux'); + +Ext.ux.StatusBar = Ext.extend(Ext.Toolbar, { + textId: '', + defaultText: '', + autoClear: 5000, + task: null, + initComponent: function() { + this.textId = Ext.id(); + this.defaultText = this.initialConfig.defaultText || ''; + var text = this.initialConfig.text || this.defaultText; + + var config = { + items: [ + ''+text+'', // status text + '->' // make it greedy + ] + }; + if (this.initialConfig.items) { + config.items = config.items.concat(this.initialConfig.items); + delete this.initialConfig.items; + } + Ext.apply(this, Ext.apply(this.initialConfig, config)); + Ext.ux.StatusBar.superclass.initComponent.apply(this, arguments); + this.task = new Ext.util.DelayedTask(function() { + var el = Ext.get(this.textId); + var defaultText = this.defaultText; + el.fadeOut({ + callback: function() { + el.update(defaultText); + el.show(); + }, + duration: 1 + }); + }, this); + }, + onRender: function() { + Ext.ux.StatusBar.superclass.onRender.apply(this, arguments); + }, + setText: function(text) { + var el = Ext.get(this.textId); + el.update(text); + }, + setStatus: function(config) { + var defaults = { + clear: { + wait: this.autoClear, + anim: true, + useDefaults: true + } + }; + + if (config.clear === true) { + delete config.clear; + } + if (!Ext.isArray(config)) { + config = { + text: config.text || '' + } + } + Ext.apply(config, defaults); + var el = Ext.get(this.textId); + el.update(config.text); + var clear = config.clear; + var defaultText = this.defaultText; + if (clear.wait) { + this.task.delay(clear.wait); + } + else { + this.task.cancel(); + } + }, + clearStatus: function() { + this.setText(this.defaultText); + this.task.cancel(); + }, + showBusy: function(msg) { + // stub for now + } +}); \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/SwfUpload.js b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/SwfUpload.js new file mode 100755 index 0000000..6a37677 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/SwfUpload.js @@ -0,0 +1,1132 @@ +/** + * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com + * + * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ + * + * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzn and Mammon Media and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * SWFObject v2.2 + * is released under the MIT License + */ + + + +/* ******************* */ +/* Constructor & Init */ +/* ******************* */ +var SWFUpload; +var swfobject; + +if (SWFUpload == undefined) { + SWFUpload = function (settings) { + this.initSWFUpload(settings); + }; +} + +SWFUpload.prototype.initSWFUpload = function (userSettings) { + try { + this.customSettings = {}; // A container where developers can place their own settings associated with this instance. + this.settings = {}; + this.eventQueue = []; + this.movieName = "SWFUpload_" + SWFUpload.movieCount++; + this.movieElement = null; + + + // Setup global control tracking + SWFUpload.instances[this.movieName] = this; + + // Load the settings. Load the Flash movie. + this.initSettings(userSettings); + this.loadSupport(); + if (this.swfuploadPreload()) { + this.loadFlash(); + } + + this.displayDebugInfo(); + } catch (ex) { + delete SWFUpload.instances[this.movieName]; + throw ex; + } +}; + +/* *************** */ +/* Static Members */ +/* *************** */ +SWFUpload.instances = {}; +SWFUpload.movieCount = 0; +SWFUpload.version = "2.5.0 2010-01-15 Beta 2"; +SWFUpload.QUEUE_ERROR = { + QUEUE_LIMIT_EXCEEDED : -100, + FILE_EXCEEDS_SIZE_LIMIT : -110, + ZERO_BYTE_FILE : -120, + INVALID_FILETYPE : -130 +}; +SWFUpload.UPLOAD_ERROR = { + HTTP_ERROR : -200, + MISSING_UPLOAD_URL : -210, + IO_ERROR : -220, + SECURITY_ERROR : -230, + UPLOAD_LIMIT_EXCEEDED : -240, + UPLOAD_FAILED : -250, + SPECIFIED_FILE_ID_NOT_FOUND : -260, + FILE_VALIDATION_FAILED : -270, + FILE_CANCELLED : -280, + UPLOAD_STOPPED : -290, + RESIZE : -300 +}; +SWFUpload.FILE_STATUS = { + QUEUED : -1, + IN_PROGRESS : -2, + ERROR : -3, + COMPLETE : -4, + CANCELLED : -5 +}; +SWFUpload.UPLOAD_TYPE = { + NORMAL : -1, + RESIZED : -2 +}; + +SWFUpload.BUTTON_ACTION = { + SELECT_FILE : -100, + SELECT_FILES : -110, + START_UPLOAD : -120, + JAVASCRIPT : -130, // DEPRECATED + NONE : -130 +}; +SWFUpload.CURSOR = { + ARROW : -1, + HAND : -2 +}; +SWFUpload.WINDOW_MODE = { + WINDOW : "window", + TRANSPARENT : "transparent", + OPAQUE : "opaque" +}; + +SWFUpload.RESIZE_ENCODING = { + JPEG : -1, + PNG : -2 +}; + +// Private: takes a URL, determines if it is relative and converts to an absolute URL +// using the current site. Only processes the URL if it can, otherwise returns the URL untouched +SWFUpload.completeURL = function (url) { + try { + var path = "", indexSlash = -1; + if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//) || url === "") { + return url; + } + + indexSlash = window.location.pathname.lastIndexOf("/"); + if (indexSlash <= 0) { + path = "/"; + } else { + path = window.location.pathname.substr(0, indexSlash) + "/"; + } + + return path + url; + } catch (ex) { + return url; + } +}; + +// Public: assign a new function to onload to use swfobject's domLoad functionality +SWFUpload.onload = function () {}; + + +/* ******************** */ +/* Instance Members */ +/* ******************** */ + +// Private: initSettings ensures that all the +// settings are set, getting a default value if one was not assigned. +SWFUpload.prototype.initSettings = function (userSettings) { + this.ensureDefault = function (settingName, defaultValue) { + var setting = userSettings[settingName]; + if (setting != undefined) { + this.settings[settingName] = setting; + } else { + this.settings[settingName] = defaultValue; + } + }; + + // Upload backend settings + this.ensureDefault("upload_url", ""); + this.ensureDefault("preserve_relative_urls", false); + this.ensureDefault("file_post_name", "Filedata"); + this.ensureDefault("post_params", {}); + this.ensureDefault("use_query_string", false); + this.ensureDefault("requeue_on_error", false); + this.ensureDefault("http_success", []); + this.ensureDefault("assume_success_timeout", 0); + + // File Settings + this.ensureDefault("file_types", "*.*"); + this.ensureDefault("file_types_description", "All Files"); + this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited" + this.ensureDefault("file_upload_limit", 0); + this.ensureDefault("file_queue_limit", 0); + + // Flash Settings + this.ensureDefault("flash_url", "swfupload.swf"); + this.ensureDefault("flash9_url", "swfupload_fp9.swf"); + this.ensureDefault("prevent_swf_caching", false); + + // Button Settings + this.ensureDefault("button_image_url", ""); + this.ensureDefault("button_width", 1); + this.ensureDefault("button_height", 1); + this.ensureDefault("button_text", ""); + this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;"); + this.ensureDefault("button_text_top_padding", 0); + this.ensureDefault("button_text_left_padding", 0); + this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES); + this.ensureDefault("button_disabled", false); + this.ensureDefault("button_placeholder_id", ""); + this.ensureDefault("button_placeholder", null); + this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW); + this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW); + + // Debug Settings + this.ensureDefault("debug", false); + this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API + + // Event Handlers + this.settings.return_upload_start_handler = this.returnUploadStart; + this.ensureDefault("swfupload_preload_handler", null); + this.ensureDefault("swfupload_load_failed_handler", null); + this.ensureDefault("swfupload_loaded_handler", null); + this.ensureDefault("file_dialog_start_handler", null); + this.ensureDefault("file_queued_handler", null); + this.ensureDefault("file_queue_error_handler", null); + this.ensureDefault("file_dialog_complete_handler", null); + + this.ensureDefault("upload_resize_start_handler", null); + this.ensureDefault("upload_start_handler", null); + this.ensureDefault("upload_progress_handler", null); + this.ensureDefault("upload_error_handler", null); + this.ensureDefault("upload_success_handler", null); + this.ensureDefault("upload_complete_handler", null); + + this.ensureDefault("mouse_click_handler", null); + this.ensureDefault("mouse_out_handler", null); + this.ensureDefault("mouse_over_handler", null); + + this.ensureDefault("debug_handler", this.debugMessage); + + this.ensureDefault("custom_settings", {}); + + // Other settings + this.customSettings = this.settings.custom_settings; + + // Update the flash url if needed + if (!!this.settings.prevent_swf_caching) { + this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime(); + this.settings.flash9_url = this.settings.flash9_url + (this.settings.flash9_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime(); + } + + if (!this.settings.preserve_relative_urls) { + this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url); + this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url); + } + + delete this.ensureDefault; +}; + +// Initializes the supported functionality based the Flash Player version, state, and event that occur during initialization +SWFUpload.prototype.loadSupport = function () { + this.support = { + loading : swfobject.hasFlashPlayerVersion("9.0.28"), + imageResize : swfobject.hasFlashPlayerVersion("10.0.0") + }; + +}; + +// Private: loadFlash replaces the button_placeholder element with the flash movie. +SWFUpload.prototype.loadFlash = function () { + var targetElement, tempParent, wrapperType, flashHTML, els; + + if (!this.support.loading) { + this.queueEvent("swfupload_load_failed_handler", ["Flash Player doesn't support SWFUpload"]); + return; + } + + // Make sure an element with the ID we are going to use doesn't already exist + if (document.getElementById(this.movieName) !== null) { + this.support.loading = false; + this.queueEvent("swfupload_load_failed_handler", ["Element ID already in use"]); + return; + } + + // Get the element where we will be placing the flash movie + targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder; + + if (targetElement == undefined) { + this.support.loading = false; + this.queueEvent("swfupload_load_failed_handler", ["button place holder not found"]); + return; + } + + wrapperType = (targetElement.currentStyle && targetElement.currentStyle["display"] || window.getComputedStyle && document.defaultView.getComputedStyle(targetElement, null).getPropertyValue("display")) !== "block" ? "span" : "div"; + + // Append the container and load the flash + tempParent = document.createElement(wrapperType); + + flashHTML = this.getFlashHTML(); + + try { + tempParent.innerHTML = flashHTML; // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers) + } catch (ex) { + this.support.loading = false; + this.queueEvent("swfupload_load_failed_handler", ["Exception loading Flash HTML into placeholder"]); + return; + } + + // Try to get the movie element immediately + els = tempParent.getElementsByTagName("object"); + if (!els || els.length > 1 || els.length === 0) { + this.support.loading = false; + this.queueEvent("swfupload_load_failed_handler", ["Unable to find movie after adding to DOM"]); + return; + } else if (els.length === 1) { + this.movieElement = els[0]; + } + + targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement); + + // Fix IE Flash/Form bug + if (window[this.movieName] == undefined) { + window[this.movieName] = this.getMovieElement(); + } +}; + +// Private: getFlashHTML generates the object tag needed to embed the flash in to the document +SWFUpload.prototype.getFlashHTML = function (flashVersion) { + // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay + return ['', + '', + '', + '', + '', + '', + ''].join(""); +}; + +// Private: getFlashVars builds the parameter string that will be passed +// to flash in the flashvars param. +SWFUpload.prototype.getFlashVars = function () { + // Build a string from the post param object + var httpSuccessString, paramString; + + paramString = this.buildParamString(); + httpSuccessString = this.settings.http_success.join(","); + + // Build the parameter string + return ["movieName=", encodeURIComponent(this.movieName), + "&uploadURL=", encodeURIComponent(this.settings.upload_url), + "&useQueryString=", encodeURIComponent(this.settings.use_query_string), + "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), + "&httpSuccess=", encodeURIComponent(httpSuccessString), + "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), + "&params=", encodeURIComponent(paramString), + "&filePostName=", encodeURIComponent(this.settings.file_post_name), + "&fileTypes=", encodeURIComponent(this.settings.file_types), + "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), + "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), + "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), + "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), + "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), + "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), + "&buttonWidth=", encodeURIComponent(this.settings.button_width), + "&buttonHeight=", encodeURIComponent(this.settings.button_height), + "&buttonText=", encodeURIComponent(this.settings.button_text), + "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), + "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), + "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), + "&buttonAction=", encodeURIComponent(this.settings.button_action), + "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), + "&buttonCursor=", encodeURIComponent(this.settings.button_cursor) + ].join(""); +}; + +// Public: get retrieves the DOM reference to the Flash element added by SWFUpload +// The element is cached after the first lookup +SWFUpload.prototype.getMovieElement = function () { + if (this.movieElement == undefined) { + this.movieElement = document.getElementById(this.movieName); + } + + if (this.movieElement === null) { + throw "Could not find Flash element"; + } + + return this.movieElement; +}; + +// Private: buildParamString takes the name/value pairs in the post_params setting object +// and joins them up in to a string formatted "name=value&name=value" +SWFUpload.prototype.buildParamString = function () { + var name, postParams, paramStringPairs = []; + + postParams = this.settings.post_params; + + if (typeof(postParams) === "object") { + for (name in postParams) { + if (postParams.hasOwnProperty(name)) { + paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString())); + } + } + } + + return paramStringPairs.join("&"); +}; + +// Public: Used to remove a SWFUpload instance from the page. This method strives to remove +// all references to the SWF, and other objects so memory is properly freed. +// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state. +// Credits: Major improvements provided by steffen +SWFUpload.prototype.destroy = function () { + var movieElement; + + try { + // Make sure Flash is done before we try to remove it + this.cancelUpload(null, false); + + movieElement = this.cleanUp(); + + // Remove the SWFUpload DOM nodes + if (movieElement) { + // Remove the Movie Element from the page + try { + movieElement.parentNode.removeChild(movieElement); + } catch (ex) {} + } + + // Remove IE form fix reference + window[this.movieName] = null; + + // Destroy other references + SWFUpload.instances[this.movieName] = null; + delete SWFUpload.instances[this.movieName]; + + this.movieElement = null; + this.settings = null; + this.customSettings = null; + this.eventQueue = null; + this.movieName = null; + + + return true; + } catch (ex2) { + return false; + } +}; + + +// Public: displayDebugInfo prints out settings and configuration +// information about this SWFUpload instance. +// This function (and any references to it) can be deleted when placing +// SWFUpload in production. +SWFUpload.prototype.displayDebugInfo = function () { + this.debug( + [ + "---SWFUpload Instance Info---\n", + "Version: ", SWFUpload.version, "\n", + "Movie Name: ", this.movieName, "\n", + "Settings:\n", + "\t", "upload_url: ", this.settings.upload_url, "\n", + "\t", "flash_url: ", this.settings.flash_url, "\n", + "\t", "flash9_url: ", this.settings.flash9_url, "\n", + "\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n", + "\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n", + "\t", "http_success: ", this.settings.http_success.join(", "), "\n", + "\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n", + "\t", "file_post_name: ", this.settings.file_post_name, "\n", + "\t", "post_params: ", this.settings.post_params.toString(), "\n", + "\t", "file_types: ", this.settings.file_types, "\n", + "\t", "file_types_description: ", this.settings.file_types_description, "\n", + "\t", "file_size_limit: ", this.settings.file_size_limit, "\n", + "\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n", + "\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n", + "\t", "debug: ", this.settings.debug.toString(), "\n", + + "\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n", + + "\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n", + "\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", + "\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n", + "\t", "button_width: ", this.settings.button_width.toString(), "\n", + "\t", "button_height: ", this.settings.button_height.toString(), "\n", + "\t", "button_text: ", this.settings.button_text.toString(), "\n", + "\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n", + "\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n", + "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", + "\t", "button_action: ", this.settings.button_action.toString(), "\n", + "\t", "button_cursor: ", this.settings.button_cursor.toString(), "\n", + "\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n", + + "\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n", + "Event Handlers:\n", + "\t", "swfupload_preload_handler assigned: ", (typeof this.settings.swfupload_preload_handler === "function").toString(), "\n", + "\t", "swfupload_load_failed_handler assigned: ", (typeof this.settings.swfupload_load_failed_handler === "function").toString(), "\n", + "\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", + "\t", "mouse_click_handler assigned: ", (typeof this.settings.mouse_click_handler === "function").toString(), "\n", + "\t", "mouse_over_handler assigned: ", (typeof this.settings.mouse_over_handler === "function").toString(), "\n", + "\t", "mouse_out_handler assigned: ", (typeof this.settings.mouse_out_handler === "function").toString(), "\n", + "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", + "\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", + "\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", + "\t", "upload_resize_start_handler assigned: ", (typeof this.settings.upload_resize_start_handler === "function").toString(), "\n", + "\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", + "\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", + "\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", + "\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", + "\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", + "\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n", + + "Support:\n", + "\t", "Load: ", (this.support.loading ? "Yes" : "No"), "\n", + "\t", "Image Resize: ", (this.support.imageResize ? "Yes" : "No"), "\n" + + ].join("") + ); +}; + +/* Note: addSetting and getSetting are no longer used by SWFUpload but are included + the maintain v2 API compatibility +*/ +// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used. +SWFUpload.prototype.addSetting = function (name, value, default_value) { + if (value == undefined) { + return (this.settings[name] = default_value); + } else { + return (this.settings[name] = value); + } +}; + +// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found. +SWFUpload.prototype.getSetting = function (name) { + if (this.settings[name] != undefined) { + return this.settings[name]; + } + + return ""; +}; + + + +// Private: callFlash handles function calls made to the Flash element. +// Calls are made with a setTimeout for some functions to work around +// bugs in the ExternalInterface library. +SWFUpload.prototype.callFlash = function (functionName, argumentArray) { + var movieElement, returnValue, returnString; + + argumentArray = argumentArray || []; + movieElement = this.getMovieElement(); + + // Flash's method if calling ExternalInterface methods (code adapted from MooTools). + try { + if (movieElement != undefined) { + returnString = movieElement.CallFunction('' + __flash__argumentsToXML(argumentArray, 0) + ''); + returnValue = eval(returnString); + } else { + this.debug("Can't call flash because the movie wasn't found."); + } + } catch (ex) { + this.debug("Exception calling flash function '" + functionName + "': " + ex.message); + } + + // Unescape file post param values + if (returnValue != undefined && typeof returnValue.post === "object") { + returnValue = this.unescapeFilePostParams(returnValue); + } + + return returnValue; +}; + +/* ***************************** + -- Flash control methods -- + Your UI should use these + to operate SWFUpload + ***************************** */ + +// WARNING: this function does not work in Flash Player 10 +// Public: selectFile causes a File Selection Dialog window to appear. This +// dialog only allows 1 file to be selected. +SWFUpload.prototype.selectFile = function () { + this.callFlash("SelectFile"); +}; + +// WARNING: this function does not work in Flash Player 10 +// Public: selectFiles causes a File Selection Dialog window to appear/ This +// dialog allows the user to select any number of files +// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names. +// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around +// for this bug. +SWFUpload.prototype.selectFiles = function () { + this.callFlash("SelectFiles"); +}; + + +// Public: startUpload starts uploading the first file in the queue unless +// the optional parameter 'fileID' specifies the ID +SWFUpload.prototype.startUpload = function (fileID) { + this.callFlash("StartUpload", [fileID]); +}; + +// Public: startUpload starts uploading the first file in the queue unless +// the optional parameter 'fileID' specifies the ID +SWFUpload.prototype.startResizedUpload = function (fileID, width, height, encoding, quality, allowEnlarging) { + this.callFlash("StartUpload", [fileID, { "width": width, "height" : height, "encoding" : encoding, "quality" : quality, "allowEnlarging" : allowEnlarging }]); +}; + +// Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index. +// If you do not specify a fileID the current uploading file or first file in the queue is cancelled. +// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter. +SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) { + if (triggerErrorEvent !== false) { + triggerErrorEvent = true; + } + this.callFlash("CancelUpload", [fileID, triggerErrorEvent]); +}; + +// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue. +// If nothing is currently uploading then nothing happens. +SWFUpload.prototype.stopUpload = function () { + this.callFlash("StopUpload"); +}; + + +// Public: requeueUpload requeues any file. If the file is requeued or already queued true is returned. +// If the file is not found or is currently uploading false is returned. Requeuing a file bypasses the +// file size, queue size, upload limit and other queue checks. Certain files can't be requeued (e.g, invalid or zero bytes files). +SWFUpload.prototype.requeueUpload = function (indexOrFileID) { + return this.callFlash("RequeueUpload", [indexOrFileID]); +}; + + +/* ************************ + * Settings methods + * These methods change the SWFUpload settings. + * SWFUpload settings should not be changed directly on the settings object + * since many of the settings need to be passed to Flash in order to take + * effect. + * *********************** */ + +// Public: getStats gets the file statistics object. +SWFUpload.prototype.getStats = function () { + return this.callFlash("GetStats"); +}; + +// Public: setStats changes the SWFUpload statistics. You shouldn't need to +// change the statistics but you can. Changing the statistics does not +// affect SWFUpload accept for the successful_uploads count which is used +// by the upload_limit setting to determine how many files the user may upload. +SWFUpload.prototype.setStats = function (statsObject) { + this.callFlash("SetStats", [statsObject]); +}; + +// Public: getFile retrieves a File object by ID or Index. If the file is +// not found then 'null' is returned. +SWFUpload.prototype.getFile = function (fileID) { + if (typeof(fileID) === "number") { + return this.callFlash("GetFileByIndex", [fileID]); + } else { + return this.callFlash("GetFile", [fileID]); + } +}; + +// Public: getFileFromQueue retrieves a File object by ID or Index. If the file is +// not found then 'null' is returned. +SWFUpload.prototype.getQueueFile = function (fileID) { + if (typeof(fileID) === "number") { + return this.callFlash("GetFileByQueueIndex", [fileID]); + } else { + return this.callFlash("GetFile", [fileID]); + } +}; + + +// Public: addFileParam sets a name/value pair that will be posted with the +// file specified by the Files ID. If the name already exists then the +// exiting value will be overwritten. +SWFUpload.prototype.addFileParam = function (fileID, name, value) { + return this.callFlash("AddFileParam", [fileID, name, value]); +}; + +// Public: removeFileParam removes a previously set (by addFileParam) name/value +// pair from the specified file. +SWFUpload.prototype.removeFileParam = function (fileID, name) { + this.callFlash("RemoveFileParam", [fileID, name]); +}; + +// Public: setUploadUrl changes the upload_url setting. +SWFUpload.prototype.setUploadURL = function (url) { + this.settings.upload_url = url.toString(); + this.callFlash("SetUploadURL", [url]); +}; + +// Public: setPostParams changes the post_params setting +SWFUpload.prototype.setPostParams = function (paramsObject) { + this.settings.post_params = paramsObject; + this.callFlash("SetPostParams", [paramsObject]); +}; + +// Public: addPostParam adds post name/value pair. Each name can have only one value. +SWFUpload.prototype.addPostParam = function (name, value) { + this.settings.post_params[name] = value; + this.callFlash("SetPostParams", [this.settings.post_params]); +}; + +// Public: removePostParam deletes post name/value pair. +SWFUpload.prototype.removePostParam = function (name) { + delete this.settings.post_params[name]; + this.callFlash("SetPostParams", [this.settings.post_params]); +}; + +// Public: setFileTypes changes the file_types setting and the file_types_description setting +SWFUpload.prototype.setFileTypes = function (types, description) { + this.settings.file_types = types; + this.settings.file_types_description = description; + this.callFlash("SetFileTypes", [types, description]); +}; + +// Public: setFileSizeLimit changes the file_size_limit setting +SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) { + this.settings.file_size_limit = fileSizeLimit; + this.callFlash("SetFileSizeLimit", [fileSizeLimit]); +}; + +// Public: setFileUploadLimit changes the file_upload_limit setting +SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) { + this.settings.file_upload_limit = fileUploadLimit; + this.callFlash("SetFileUploadLimit", [fileUploadLimit]); +}; + +// Public: setFileQueueLimit changes the file_queue_limit setting +SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) { + this.settings.file_queue_limit = fileQueueLimit; + this.callFlash("SetFileQueueLimit", [fileQueueLimit]); +}; + +// Public: setFilePostName changes the file_post_name setting +SWFUpload.prototype.setFilePostName = function (filePostName) { + this.settings.file_post_name = filePostName; + this.callFlash("SetFilePostName", [filePostName]); +}; + +// Public: setUseQueryString changes the use_query_string setting +SWFUpload.prototype.setUseQueryString = function (useQueryString) { + this.settings.use_query_string = useQueryString; + this.callFlash("SetUseQueryString", [useQueryString]); +}; + +// Public: setRequeueOnError changes the requeue_on_error setting +SWFUpload.prototype.setRequeueOnError = function (requeueOnError) { + this.settings.requeue_on_error = requeueOnError; + this.callFlash("SetRequeueOnError", [requeueOnError]); +}; + +// Public: setHTTPSuccess changes the http_success setting +SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) { + if (typeof http_status_codes === "string") { + http_status_codes = http_status_codes.replace(" ", "").split(","); + } + + this.settings.http_success = http_status_codes; + this.callFlash("SetHTTPSuccess", [http_status_codes]); +}; + +// Public: setHTTPSuccess changes the http_success setting +SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) { + this.settings.assume_success_timeout = timeout_seconds; + this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]); +}; + +// Public: setDebugEnabled changes the debug_enabled setting +SWFUpload.prototype.setDebugEnabled = function (debugEnabled) { + this.settings.debug_enabled = debugEnabled; + this.callFlash("SetDebugEnabled", [debugEnabled]); +}; + +// Public: setButtonImageURL loads a button image sprite +SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) { + if (buttonImageURL == undefined) { + buttonImageURL = ""; + } + + this.settings.button_image_url = buttonImageURL; + this.callFlash("SetButtonImageURL", [buttonImageURL]); +}; + +// Public: setButtonDimensions resizes the Flash Movie and button +SWFUpload.prototype.setButtonDimensions = function (width, height) { + this.settings.button_width = width; + this.settings.button_height = height; + + var movie = this.getMovieElement(); + if (movie != undefined) { + movie.style.width = width + "px"; + movie.style.height = height + "px"; + } + + this.callFlash("SetButtonDimensions", [width, height]); +}; +// Public: setButtonText Changes the text overlaid on the button +SWFUpload.prototype.setButtonText = function (html) { + this.settings.button_text = html; + this.callFlash("SetButtonText", [html]); +}; +// Public: setButtonTextPadding changes the top and left padding of the text overlay +SWFUpload.prototype.setButtonTextPadding = function (left, top) { + this.settings.button_text_top_padding = top; + this.settings.button_text_left_padding = left; + this.callFlash("SetButtonTextPadding", [left, top]); +}; + +// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button +SWFUpload.prototype.setButtonTextStyle = function (css) { + this.settings.button_text_style = css; + this.callFlash("SetButtonTextStyle", [css]); +}; +// Public: setButtonDisabled disables/enables the button +SWFUpload.prototype.setButtonDisabled = function (isDisabled) { + this.settings.button_disabled = isDisabled; + this.callFlash("SetButtonDisabled", [isDisabled]); +}; +// Public: setButtonAction sets the action that occurs when the button is clicked +SWFUpload.prototype.setButtonAction = function (buttonAction) { + this.settings.button_action = buttonAction; + this.callFlash("SetButtonAction", [buttonAction]); +}; + +// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button +SWFUpload.prototype.setButtonCursor = function (cursor) { + this.settings.button_cursor = cursor; + this.callFlash("SetButtonCursor", [cursor]); +}; + +/* ******************************* + Flash Event Interfaces + These functions are used by Flash to trigger the various + events. + + All these functions a Private. + + Because the ExternalInterface library is buggy the event calls + are added to a queue and the queue then executed by a setTimeout. + This ensures that events are executed in a determinate order and that + the ExternalInterface bugs are avoided. +******************************* */ + +SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + var self = this; + + if (argumentArray == undefined) { + argumentArray = []; + } else if (!(argumentArray instanceof Array)) { + argumentArray = [argumentArray]; + } + + if (typeof this.settings[handlerName] === "function") { + // Queue the event + this.eventQueue.push(function () { + this.settings[handlerName].apply(this, argumentArray); + }); + + // Execute the next queued event + setTimeout(function () { + self.executeNextEvent(); + }, 0); + + } else if (this.settings[handlerName] !== null) { + throw "Event handler " + handlerName + " is unknown or is not a function"; + } +}; + +// Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout +// we must queue them in order to garentee that they are executed in order. +SWFUpload.prototype.executeNextEvent = function () { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + + var f = this.eventQueue ? this.eventQueue.shift() : null; + if (typeof(f) === "function") { + f.apply(this); + } +}; + +// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have +// properties that contain characters that are not valid for JavaScript identifiers. To work around this +// the Flash Component escapes the parameter names and we must unescape again before passing them along. +SWFUpload.prototype.unescapeFilePostParams = function (file) { + var reg = /[$]([0-9a-f]{4})/i, unescapedPost = {}, uk, k, match; + + if (file != undefined) { + for (k in file.post) { + if (file.post.hasOwnProperty(k)) { + uk = k; + while ((match = reg.exec(uk)) !== null) { + uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16))); + } + unescapedPost[uk] = file.post[k]; + } + } + + file.post = unescapedPost; + } + + return file; +}; + +// Private: This event is called by SWFUpload Init after we've determined what the user's Flash Player supports. +// Use the swfupload_preload_handler event setting to execute custom code when SWFUpload has loaded. +// Return false to prevent SWFUpload from loading and allow your script to do something else if your required feature is +// not supported +SWFUpload.prototype.swfuploadPreload = function () { + var returnValue; + if (typeof this.settings.swfupload_preload_handler === "function") { + returnValue = this.settings.swfupload_preload_handler.call(this); + } else if (this.settings.swfupload_preload_handler != undefined) { + throw "upload_start_handler must be a function"; + } + + // Convert undefined to true so if nothing is returned from the upload_start_handler it is + // interpretted as 'true'. + if (returnValue === undefined) { + returnValue = true; + } + + return !!returnValue; +} + +// Private: This event is called by Flash when it has finished loading. Don't modify this. +// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded. +SWFUpload.prototype.flashReady = function () { + // Check that the movie element is loaded correctly with its ExternalInterface methods defined + var movieElement = this.cleanUp(); + + if (!movieElement) { + this.debug("Flash called back ready but the flash movie can't be found."); + return; + } + + this.queueEvent("swfupload_loaded_handler"); +}; + +// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE. +// This function is called by Flash each time the ExternalInterface functions are created. +SWFUpload.prototype.cleanUp = function () { + var key, movieElement = this.getMovieElement(); + + // Pro-actively unhook all the Flash functions + try { + if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE + this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)"); + for (key in movieElement) { + try { + if (typeof(movieElement[key]) === "function") { + movieElement[key] = null; + } + } catch (ex) { + } + } + } + } catch (ex1) { + + } + + // Fix Flashes own cleanup code so if the SWF Movie was removed from the page + // it doesn't display errors. + window["__flash__removeCallback"] = function (instance, name) { + try { + if (instance) { + instance[name] = null; + } + } catch (flashEx) { + + } + }; + + return movieElement; +}; + +/* When the button_action is set to None this event gets fired and executes the mouse_click_handler */ +SWFUpload.prototype.mouseClick = function () { + this.queueEvent("mouse_click_handler"); +}; +SWFUpload.prototype.mouseOver = function () { + this.queueEvent("mouse_over_handler"); +}; +SWFUpload.prototype.mouseOut = function () { + this.queueEvent("mouse_out_handler"); +}; + +/* This is a chance to do something before the browse window opens */ +SWFUpload.prototype.fileDialogStart = function () { + this.queueEvent("file_dialog_start_handler"); +}; + + +/* Called when a file is successfully added to the queue. */ +SWFUpload.prototype.fileQueued = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queued_handler", file); +}; + + +/* Handle errors that occur when an attempt to queue a file fails. */ +SWFUpload.prototype.fileQueueError = function (file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queue_error_handler", [file, errorCode, message]); +}; + +/* Called after the file dialog has closed and the selected files have been queued. + You could call startUpload here if you want the queued files to begin uploading immediately. */ +SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) { + this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]); +}; + +SWFUpload.prototype.uploadResizeStart = function (file, resizeSettings) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_resize_start_handler", [file, resizeSettings.width, resizeSettings.height, resizeSettings.encoding, resizeSettings.quality]); +}; + +SWFUpload.prototype.uploadStart = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("return_upload_start_handler", file); +}; + +SWFUpload.prototype.returnUploadStart = function (file) { + var returnValue; + if (typeof this.settings.upload_start_handler === "function") { + file = this.unescapeFilePostParams(file); + returnValue = this.settings.upload_start_handler.call(this, file); + } else if (this.settings.upload_start_handler != undefined) { + throw "upload_start_handler must be a function"; + } + + // Convert undefined to true so if nothing is returned from the upload_start_handler it is + // interpretted as 'true'. + if (returnValue === undefined) { + returnValue = true; + } + + returnValue = !!returnValue; + + this.callFlash("ReturnUploadStart", [returnValue]); +}; + + + +SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]); +}; + +SWFUpload.prototype.uploadError = function (file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_error_handler", [file, errorCode, message]); +}; + +SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_success_handler", [file, serverData, responseReceived]); +}; + +SWFUpload.prototype.uploadComplete = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_complete_handler", file); +}; + +/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the + internal debug console. You can override this event and have messages written where you want. */ +SWFUpload.prototype.debug = function (message) { + this.queueEvent("debug_handler", message); +}; + + +/* ********************************** + Debug Console + The debug console is a self contained, in page location + for debug message to be sent. The Debug Console adds + itself to the body if necessary. + + The console is automatically scrolled as messages appear. + + If you are using your own debug handler or when you deploy to production and + have debug disabled you can remove these functions to reduce the file size + and complexity. +********************************** */ + +// Private: debugMessage is the default debug_handler. If you want to print debug messages +// call the debug() function. When overriding the function your own function should +// check to see if the debug setting is true before outputting debug information. +SWFUpload.prototype.debugMessage = function (message) { + var exceptionMessage, exceptionValues, key; + + if (this.settings.debug) { + exceptionValues = []; + + // Check for an exception object and print it nicely + if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { + for (key in message) { + if (message.hasOwnProperty(key)) { + exceptionValues.push(key + ": " + message[key]); + } + } + exceptionMessage = exceptionValues.join("\n") || ""; + exceptionValues = exceptionMessage.split("\n"); + exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); + SWFUpload.Console.writeLine(exceptionMessage); + } else { + SWFUpload.Console.writeLine(message); + } + } +}; + +SWFUpload.Console = {}; +SWFUpload.Console.writeLine = function (message) { + var console, documentForm; + + try { + console = document.getElementById("SWFUpload_Console"); + + if (!console) { + documentForm = document.createElement("form"); + document.getElementsByTagName("body")[0].appendChild(documentForm); + + console = document.createElement("textarea"); + console.id = "SWFUpload_Console"; + console.style.fontFamily = "monospace"; + console.setAttribute("wrap", "off"); + console.wrap = "off"; + console.style.overflow = "auto"; + console.style.width = "700px"; + console.style.height = "350px"; + console.style.margin = "5px"; + documentForm.appendChild(console); + } + + console.value += message + "\n"; + + console.scrollTop = console.scrollHeight - console.clientHeight; + } catch (ex) { + alert("Exception: " + ex.name + " Message: " + ex.message); + } +}; + + +/* SWFObject v2.2 + is released under the MIT License +*/ +swfobject = function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab', { + text: this.strings.text_cancel, + id: 'swfuploadpanel-cancel-button', + iconCls: 'SwfUploadPanel_iconCancel', + handler: this.stopUpload, + scope: this, + hidden: true + }, { + text: this.strings.text_upload, + id: 'swfuploadpanel-upload-button', + iconCls: 'SwfUploadPanel_iconUpload', + handler: this.startUpload, + scope: this, + hidden: true + }, { + text: this.strings.text_clear, + id: 'swfuploadpanel-clear-button', + iconCls: 'SwfUploadPanel_iconClear', + handler: this.removeAllFiles, + scope: this, + hidden: false + }]; + + this.bbar = [ + this.progress_bar + ]; + + Ext.ux.SwfUploadPanel.superclass.initComponent.call(this); + this.addListener({ + keypress: { + fn: function(e) { + if (this.confirm_delete) { + if(e.getKey() == e.DELETE) { + Ext.MessageBox.confirm(this.strings.text_remove,this.strings.text_remove_sure, function(e) { + if (e == 'yes') { + this.removeFiles(); + } + }, this); + } + } else { + this.removeFiles(this); + } + }, + scope: this + }, + + // Prevent the default right click to show up in the grid. + contextmenu: function(e) { + e.stopEvent(); + } + }); + }, + onRender: function() { + Ext.ux.SwfUploadPanel.superclass.onRender.apply(this,arguments); + + this.setHeight( parseInt( this.height ) ); + + this.resizeProgressBar(); + var tb = this.getTopToolbar(); + this.addBtn = Ext.getCmp('swfuploadpanel-add-button'); + this.cancelBtn = Ext.getCmp('swfuploadpanel-cancel-button'); + this.uploadBtn = Ext.getCmp('swfuploadpanel-upload-button'); + this.clearBtn = Ext.getCmp('swfuploadpanel-clear-button'); + this.on('resize', this.resizeProgressBar, this); + + + }, + myInit: function() { + var suoID = Ext.id(); + var em = this.addBtn.el.child('em'); + em.setStyle({ + position: 'relative', + display: 'block' + }); + em.createChild({ + tag: 'div', + id: suoID + }); + this.suo = new SWFUpload({ + button_placeholder_id: suoID, + button_width: em.getWidth(), + button_height: em.getHeight(), + button_cursor: SWFUpload.CURSOR.HAND, + button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT, + + upload_url: this.upload_url, + post_params: this.post_params, + file_post_name: this.file_post_name, + file_size_limit: this.file_size_limit, + file_queue_limit: this.file_queue_limit, + file_types: this.file_types, + file_types_description: this.file_types_description, + file_upload_limit: this.file_upload_limit, + flash_url: this.flash_url, + prevent_swf_caching: this.prevent_swf_caching, + + // Event Handler Settings + swfupload_loaded_handler: this.swfUploadLoaded.createDelegate(this), + + file_dialog_start_handler: this.fileDialogStart.createDelegate(this), + file_queued_handler: this.fileQueue.createDelegate(this), + file_queue_error_handler: this.fileQueueError.createDelegate(this), + file_dialog_complete_handler: this.fileDialogComplete.createDelegate(this), + + upload_start_handler: this.uploadStart.createDelegate(this), + upload_progress_handler: this.uploadProgress.createDelegate(this), + upload_error_handler: this.uploadError.createDelegate(this), + upload_success_handler: this.uploadSuccess.createDelegate(this), + upload_complete_handler: this.uploadComplete.createDelegate(this), + + debug: this.debug, + debug_handler: this.debugHandler + }); + + Ext.get(this.suo.movieName).setStyle({ + position: 'absolute', + top: 0, + left: 0 + }); + }, + + // private + resizeProgressBar: function() { + if (this.progress_bar.el) { + this.progress_bar.setWidth(this.getBottomToolbar().el.getWidth() - 5); + Ext.fly(this.progress_bar.el.dom.firstChild.firstChild).applyStyles("height: 16px"); + } + }, + + /** + * SWFUpload debug handler + * @param {Object} line + */ + debugHandler: function(line) { + if( typeof console != "undefined" ) { + console.log(line); + } + }, + + /** + * Formats file status + * @param {Integer} status + * @return {String} + */ + formatStatus: function(status) { + return this.strings.status[status]; + }, + + /** + * Formats raw bytes into kB/mB/GB/TB + * @param {Integer} bytes + * @return {String} + */ + formatBytes: function(size) { + if (!size) { + size = 0; + } + var suffix = ["B", "KB", "MB", "GB"]; + var result = size; + size = parseInt(size, 10); + result = size + " " + suffix[0]; + var loop = 0; + while (size / 1024 > 1) { + size = size / 1024; + loop++; + } + result = Math.round(size) + " " + suffix[loop]; + + return result; + + }, + + /** + * SWFUpload swfUploadLoaded event + */ + swfUploadLoaded: function() { + if(this.debug) console.info('SWFUPLOAD LOADED'); + + this.fireEvent('swfUploadLoaded', this); + }, + + /** + * SWFUpload fileDialogStart event + */ + fileDialogStart: function() { + if(this.debug) console.info('FILE DIALOG START'); + + this.fireEvent('fileDialogStart', this); + }, + + /** + * Add file to store / grid + * SWFUpload fileQueue event + * @param {Object} file + */ + fileQueue: function(file) { + if(this.debug) console.info('FILE QUEUE'); + + file.status = 0; + r = new this.rec(file); + r.id = file.id; + this.store.add(r); + + this.fireEvent('fileQueued', this, file); + }, + + /** + * Error when file queue error occurs + * SWFUpload fileQueueError event + * @param {Object} file + * @param {Integer} code + * @param {string} message + */ + fileQueueError: function(file, code, message) { + if(this.debug) console.info('FILE QUEUE ERROR'); + + switch (code) { + case -100: + var slots; + switch(message) { + case '0': + slots = this.strings.error_queue_slots_0; + break; + case '1': + slots = this.strings.error_queue_slots_1; + break; + default: + slots = String.format(this.strings.error_queue_slots_2, message); + } + Ext.MessageBox.alert(this.strings.text_error, String.format(this.strings.error_queue_exceeded + ' ' + slots, this.file_queue_limit)); + break; + + case -110: + Ext.MessageBox.alert(this.strings.text_error, String.format(this.strings.error_size_exceeded, this.formatBytes( parseInt(this.file_size_limit) ))); + break; + + case -120: + Ext.MessageBox.alert(this.strings.text_error, this.strings.error_zero_byte_file); + break; + + case -130: + Ext.MessageBox.alert(this.strings.text_error, this.strings.error_invalid_filetype); + break; + } + + this.fireEvent('fileQueueError', this, file, code ); + }, + + /** + * SWFUpload fileDialogComplete event + * @param {Integer} file_count + */ + fileDialogComplete: function(file_count) { + if(this.debug) console.info('FILE DIALOG COMPLETE'); + + if (file_count > 0) { + this.uploadBtn.show(); + } + + this.addBtn.show(); + this.clearBtn.show(); + + this.fireEvent('fileDialogComplete', this, file_count); + }, + + /** + * SWFUpload uploadStart event + * @param {Object} file + */ + uploadStart: function(file) { + if(this.debug) console.info('UPLOAD START'); + + this.fireEvent('uploadStart', this, file); + + return true; + }, + + /** + * SWFUpload uploadProgress event + * @param {Object} file + * @param {Integer} bytes_completed + * @param {Integer} bytes_total + */ + uploadProgress: function(file, bytes_completed, bytes_total) { + if(this.debug) console.info('UPLOAD PROGRESS'); + + this.store.getById(file.id).set('status', 1); + this.store.getById(file.id).commit(); + this.progress_bar.updateProgress(bytes_completed/bytes_total, String.format(this.strings.text_uploading, file.name, this.formatBytes(bytes_completed), this.formatBytes(bytes_total))); + + this.fireEvent('uploadProgress', this, file, bytes_completed, bytes_total); + }, + + /** + * SWFUpload uploadError event + * Show notice when error occurs + * @param {Object} file + * @param {Integer} error + * @param {Integer} code + * @return {} + */ + uploadError: function(file, error, code) { + if(this.debug) console.info('UPLOAD ERROR'); + + switch (error) { + case -200: + Ext.MessageBox.alert(this.strings.text_error, this.strings.error_file_not_found); + break; + + case -230: + Ext.MessageBox.alert(this.strings.text_error, this.strings.error_security_error); + break; + + case -290: + this.store.getById(file.id).set('status', 4); + this.store.getById(file.id).commit(); + break; + } + + this.fireEvent('fileUploadError', this, file, error, code); + }, + + /** + * SWFUpload uploadSuccess event + * @param {Object} file + * @param {Object} response + */ + uploadSuccess: function(file, response) { + if(this.debug) console.info('UPLOAD SUCCESS'); + + var data = Ext.decode(response); + if (data.success) { + this.store.remove(this.store.getById(file.id)); + } else { + this.store.getById(file.id).set('status', 3); + this.store.getById(file.id).commit(); + if (data.msg) { + Ext.MessageBox.alert(this.strings.text_error, data.msg); + } + } + + + this.fireEvent('fileUploadSuccess', this, file, data); + }, + + /** + * SWFUpload uploadComplete event + * @param {Object} file + */ + uploadComplete: function(file) { + if(this.debug) console.info('UPLOAD COMPLETE'); + + this.progress_bar.reset(); + this.progress_bar.updateText(this.strings.text_progressbar); + + if(this.suo.getStats().files_queued && !this.upload_cancelled) { + this.suo.startUpload(); + } else { + this.fireEvent('fileUploadComplete', this, file); + + this.allUploadsComplete(); + } + + }, + + /** + * SWFUpload allUploadsComplete method + */ + allUploadsComplete: function() { + this.cancelBtn.hide(); + this.addBtn.show(); + this.clearBtn.show(); + + this.fireEvent('allUploadsComplete', this); + }, + + /** + * SWFUpload setPostParams method + * @param {String} name + * @param {String} value + */ + addPostParam: function(name, value) { + if (this.suo) { + this.suo.settings.post_params[name] = value; + this.suo.setPostParams(this.suo.settings.post_params); + } else { + this.post_params[name] = value; + } + }, + + /** + * Start file upload + * SWFUpload startUpload method + */ + startUpload: function() { + if(this.debug) console.info('START UPLOAD'); + + this.cancelBtn.show(); + this.uploadBtn.hide(); + this.clearBtn.hide(); +// this.addBtn.hide(); + + this.upload_cancelled = false; + + this.fireEvent('startUpload', this); + + this.suo.startUpload(); + }, + + /** + * SWFUpload stopUpload method + * @param {Object} file + */ + stopUpload: function(file) { + if(this.debug) console.info('STOP UPLOAD'); + + this.suo.stopUpload(); + + this.upload_cancelled = true; + + this.getStore().each(function() { + if (this.data.status == 1) { + this.set('status', 0); + this.commit(); + } + }); + + this.cancelBtn.hide(); + if (this.suo.getStats().files_queued > 0) { + this.uploadBtn.show(); + } + this.addBtn.show(); + this.clearBtn.show(); + + this.progress_bar.reset(); + this.progress_bar.updateText(this.strings.text_progressbar); + + }, + + /** + * Delete one or multiple rows + * SWFUpload cancelUpload method + */ + removeFiles: function() { + if(this.debug) console.info('REMOVE FILES'); + + var selRecords = this.getSelections(); + for (var i=0; i < selRecords.length; i++) { + if (selRecords[i].data.status != 1) { + this.suo.cancelUpload(selRecords[i].id); + this.store.remove(selRecords[i]); + } + } + + if (this.suo.getStats().files_queued === 0) { + this.uploadBtn.hide(); +// this.clearBtn.hide(); + } + + this.fireEvent('removeFiles', this); + }, + + /** + * Clear the Queue + * SWFUpload cancelUpload method + */ + removeAllFiles: function() { + if(this.debug) console.info('REMOVE ALL'); + + // mark all internal files as cancelled + var files_left = this.suo.getStats().files_queued; + + while (files_left > 0) { + this.suo.cancelUpload(); + files_left = this.suo.getStats().files_queued; + } + + this.store.removeAll(); + + this.cancelBtn.hide(); + this.uploadBtn.hide(); +// this.clearBtn.hide(); + + this.fireEvent('removeAllFiles', this); + } + +}); +Ext.reg("swfuploadpanel", Ext.ux.SwfUploadPanel ); diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/add.png b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/add.png new file mode 100755 index 0000000..6332fef Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/add.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/arrow_up.png b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/arrow_up.png new file mode 100755 index 0000000..1ebb193 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/arrow_up.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/cancel.png b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/cancel.png new file mode 100755 index 0000000..c149c2b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/cancel.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/delete.png b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/delete.png new file mode 100755 index 0000000..08f2493 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/delete.png differ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/SWFObject License.txt b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/SWFObject License.txt new file mode 100755 index 0000000..c393619 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/SWFObject License.txt @@ -0,0 +1,4 @@ +/* SWFObject v2.0 rc4 + Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis + This software is released under the MIT License +*/ diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.cookies.js b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.cookies.js new file mode 100755 index 0000000..2422358 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.cookies.js @@ -0,0 +1,53 @@ +/* + Cookie Plug-in + + This plug in automatically gets all the cookies for this site and adds them to the post_params. + Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params. + The cookies will override any other post params with the same name. +*/ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.prototype.initSettings = function (oldInitSettings) { + return function (userSettings) { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this, userSettings); + } + + this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point + }; + }(SWFUpload.prototype.initSettings); + + // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True + SWFUpload.prototype.refreshCookies = function (sendToFlash) { + if (sendToFlash === undefined) { + sendToFlash = true; + } + sendToFlash = !!sendToFlash; + + // Get the post_params object + var postParams = this.settings.post_params; + + // Get the cookies + var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value; + for (i = 0; i < caLength; i++) { + c = cookieArray[i]; + + // Left Trim spaces + while (c.charAt(0) === " ") { + c = c.substring(1, c.length); + } + eqIndex = c.indexOf("="); + if (eqIndex > 0) { + name = c.substring(0, eqIndex); + value = c.substring(eqIndex + 1); + postParams[name] = value; + } + } + + if (sendToFlash) { + this.setPostParams(postParams); + } + }; + +} diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.proxy.js b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.proxy.js new file mode 100755 index 0000000..d9ff405 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.proxy.js @@ -0,0 +1,96 @@ +/* + Proxy Plug-in + + Features: + Times an upload to see if it appear suspiciously fast which might indicate a proxy server or anti-virus suite intercepting the upload. + If the upload seems too fast an uploadError event is fired with PROXY error code after the final uploadProgress event. + + Adds a SWFUpload setting allowing you to tweak the bytes/s for triggering the error: + proxy_detect_threshold : 256000 + + Adds an UPLOAD_ERROR entry called PROXY: + function uploadError(file, errorCode, message) { + if (errorCode === SWFUpload.UPLOAD_ERROR.PROXY) { + alert("You might have a proxy!"); + } + } + */ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.proxyDetect = {}; + SWFUpload.UPLOAD_ERROR.PROXY = -30300; + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function (userSettings) { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this, userSettings); + } + + this.ensureDefault = function (settingName, defaultValue) { + this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName]; + }; + + // List used to keep the speed stats for the files we are tracking + this.proxyDetectFileStartTimes = {}; + this.proxyDetectSettings = {}; + + this.ensureDefault("proxy_detect_threshold", 256000); // Default is 250 KB per second + + this.proxyDetectSettings.user_upload_progress_handler = this.settings.upload_progress_handler; + this.proxyDetectSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + + this.settings.upload_progress_handler = SWFUpload.proxyDetect.uploadProgressHandler; + this.settings.upload_complete_handler = SWFUpload.proxyDetect.uploadCompleteHandler; + + + delete this.ensureDefault; + }; + }(SWFUpload.prototype.initSettings)); + + SWFUpload.proxyDetect.uploadProgressHandler = function (file, bytesComplete, bytesTotal) { + var ex1 = null, time, differenceMS, bps; + try { + if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { + this.proxyDetectSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal); + } + } catch (ex1) { } + + + if (bytesComplete === 0) { + this.proxyDetectFileStartTimes[file.ID] = new Date(); + + } else if (bytesComplete === bytesTotal) { + try { + // Calculate the Bps and decide if we should trigger the error + time = new Date(); + differenceMS = time.getTime() - this.proxyDetectFileStartTimes[file.ID].getTime(); + + if (differenceMS === 0) { + differenceMS = 1; + } + + bps = bytesTotal / (differenceMS * 1000); + if (bps > parseInt(this.settings.proxy_detect_threshold, 10)) { + this.queueEvent("upload_error_handler", [file, SWFUpload.UPLOAD_ERROR.PROXY, bps]); + } + } catch (ex) { + } + } + + if (ex1 !== null) { + throw(ex1); + } + }; + + SWFUpload.proxyDetect.uploadCompleteHandler = function (file) { + try { + delete this.proxyDetectFileStartTimes[file.ID]; + } catch (ex) { + } + + if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { + return this.proxyDetectSettings.user_upload_progress_handler.call(this, file); + } + }; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.queue.js b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.queue.js new file mode 100755 index 0000000..a3788bd --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.queue.js @@ -0,0 +1,98 @@ +/* + Queue Plug-in + + Features: + *Adds a cancelQueue() method for cancelling the entire queue. + *All queued files are uploaded when startUpload() is called. + *If false is returned from uploadComplete then the queue upload is stopped. + If false is not returned (strict comparison) then the queue upload is continued. + *Adds a QueueComplete event that is fired when all the queued files have finished uploading. + Set the event handler with the queue_complete_handler setting. + + */ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.queue = {}; + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function (userSettings) { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this, userSettings); + } + + this.queueSettings = {}; + + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + + this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; + this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; + this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; + + this.settings.queue_complete_handler = userSettings.queue_complete_handler || null; + }; + })(SWFUpload.prototype.initSettings); + + SWFUpload.prototype.startUpload = function (fileID) { + this.queueSettings.queue_cancelled_flag = false; + this.callFlash("StartUpload", [fileID]); + }; + + SWFUpload.prototype.cancelQueue = function () { + this.queueSettings.queue_cancelled_flag = true; + this.stopUpload(); + + var stats = this.getStats(); + while (stats.files_queued > 0) { + this.cancelUpload(); + stats = this.getStats(); + } + }; + + SWFUpload.queue.uploadStartHandler = function (file) { + var returnValue; + if (typeof(this.queueSettings.user_upload_start_handler) === "function") { + returnValue = this.queueSettings.user_upload_start_handler.call(this, file); + } + + // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. + returnValue = (returnValue === false) ? false : true; + + this.queueSettings.queue_cancelled_flag = !returnValue; + + return returnValue; + }; + + SWFUpload.queue.uploadCompleteHandler = function (file) { + var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; + var continueUpload; + + if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { + this.queueSettings.queue_upload_count++; + } + + if (typeof(user_upload_complete_handler) === "function") { + continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; + } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { + // If the file was stopped and re-queued don't restart the upload + continueUpload = false; + } else { + continueUpload = true; + } + + if (continueUpload) { + var stats = this.getStats(); + if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { + this.startUpload(); + } else if (this.queueSettings.queue_cancelled_flag === false) { + this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); + this.queueSettings.queue_upload_count = 0; + } else { + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + } + } + }; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.speed.js b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.speed.js new file mode 100755 index 0000000..fc30d1d --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/plugins/swfupload.speed.js @@ -0,0 +1,346 @@ +/* + Speed Plug-in + + Features: + *Adds several properties to the 'file' object indicated upload speed, time left, upload time, etc. + - currentSpeed -- String indicating the upload speed, bits per second + - averageSpeed -- Overall average upload speed, bits per second + - movingAverageSpeed -- Speed over averaged over the last several measurements, bits per second + - timeRemaining -- Estimated remaining upload time in seconds + - timeElapsed -- Number of seconds passed for this upload + - percentUploaded -- Percentage of the file uploaded (0 to 100) + - sizeUploaded -- Formatted size uploaded so far, bytes + + *Adds setting 'moving_average_history_size' for defining the window size used to calculate the moving average speed. + + *Adds several Formatting functions for formatting that values provided on the file object. + - SWFUpload.speed.formatBPS(bps) -- outputs string formatted in the best units (Gbps, Mbps, Kbps, bps) + - SWFUpload.speed.formatTime(seconds) -- outputs string formatted in the best units (x Hr y M z S) + - SWFUpload.speed.formatSize(bytes) -- outputs string formatted in the best units (w GB x MB y KB z B ) + - SWFUpload.speed.formatPercent(percent) -- outputs string formatted with a percent sign (x.xx %) + - SWFUpload.speed.formatUnits(baseNumber, divisionArray, unitLabelArray, fractionalBoolean) + - Formats a number using the division array to determine how to apply the labels in the Label Array + - factionalBoolean indicates whether the number should be returned as a single fractional number with a unit (speed) + or as several numbers labeled with units (time) + */ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.speed = {}; + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function (userSettings) { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this, userSettings); + } + + this.ensureDefault = function (settingName, defaultValue) { + this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName]; + }; + + // List used to keep the speed stats for the files we are tracking + this.fileSpeedStats = {}; + this.speedSettings = {}; + + this.ensureDefault("moving_average_history_size", "10"); + + this.speedSettings.user_file_queued_handler = this.settings.file_queued_handler; + this.speedSettings.user_file_queue_error_handler = this.settings.file_queue_error_handler; + this.speedSettings.user_upload_start_handler = this.settings.upload_start_handler; + this.speedSettings.user_upload_error_handler = this.settings.upload_error_handler; + this.speedSettings.user_upload_progress_handler = this.settings.upload_progress_handler; + this.speedSettings.user_upload_success_handler = this.settings.upload_success_handler; + this.speedSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + + this.settings.file_queued_handler = SWFUpload.speed.fileQueuedHandler; + this.settings.file_queue_error_handler = SWFUpload.speed.fileQueueErrorHandler; + this.settings.upload_start_handler = SWFUpload.speed.uploadStartHandler; + this.settings.upload_error_handler = SWFUpload.speed.uploadErrorHandler; + this.settings.upload_progress_handler = SWFUpload.speed.uploadProgressHandler; + this.settings.upload_success_handler = SWFUpload.speed.uploadSuccessHandler; + this.settings.upload_complete_handler = SWFUpload.speed.uploadCompleteHandler; + + delete this.ensureDefault; + }; + })(SWFUpload.prototype.initSettings); + + + SWFUpload.speed.fileQueuedHandler = function (file) { + if (typeof this.speedSettings.user_file_queued_handler === "function") { + file = SWFUpload.speed.extendFile(file); + + return this.speedSettings.user_file_queued_handler.call(this, file); + } + }; + + SWFUpload.speed.fileQueueErrorHandler = function (file, errorCode, message) { + if (typeof this.speedSettings.user_file_queue_error_handler === "function") { + file = SWFUpload.speed.extendFile(file); + + return this.speedSettings.user_file_queue_error_handler.call(this, file, errorCode, message); + } + }; + + SWFUpload.speed.uploadStartHandler = function (file) { + if (typeof this.speedSettings.user_upload_start_handler === "function") { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + return this.speedSettings.user_upload_start_handler.call(this, file); + } + }; + + SWFUpload.speed.uploadErrorHandler = function (file, errorCode, message) { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + SWFUpload.speed.removeTracking(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_error_handler === "function") { + return this.speedSettings.user_upload_error_handler.call(this, file, errorCode, message); + } + }; + SWFUpload.speed.uploadProgressHandler = function (file, bytesComplete, bytesTotal) { + this.updateTracking(file, bytesComplete); + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_progress_handler === "function") { + return this.speedSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal); + } + }; + + SWFUpload.speed.uploadSuccessHandler = function (file, serverData) { + if (typeof this.speedSettings.user_upload_success_handler === "function") { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + return this.speedSettings.user_upload_success_handler.call(this, file, serverData); + } + }; + SWFUpload.speed.uploadCompleteHandler = function (file) { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + SWFUpload.speed.removeTracking(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_complete_handler === "function") { + return this.speedSettings.user_upload_complete_handler.call(this, file); + } + }; + + // Private: extends the file object with the speed plugin values + SWFUpload.speed.extendFile = function (file, trackingList) { + var tracking; + + if (!file) { + return file; + } + + if (trackingList) { + tracking = trackingList[file.id]; + } + + if (tracking) { + file.currentSpeed = tracking.currentSpeed; + file.averageSpeed = tracking.averageSpeed; + file.movingAverageSpeed = tracking.movingAverageSpeed; + file.timeRemaining = tracking.timeRemaining; + file.timeElapsed = tracking.timeElapsed; + file.percentUploaded = tracking.percentUploaded; + file.sizeUploaded = tracking.bytesUploaded; + + } else { + file.currentSpeed = 0; + file.averageSpeed = 0; + file.movingAverageSpeed = 0; + file.timeRemaining = 0; + file.timeElapsed = 0; + file.percentUploaded = 0; + file.sizeUploaded = 0; + } + + return file; + }; + + // Private: Updates the speed tracking object, or creates it if necessary + SWFUpload.prototype.updateTracking = function (file, bytesUploaded) { + var tracking = this.fileSpeedStats[file.id]; + if (!tracking) { + this.fileSpeedStats[file.id] = tracking = {}; + } + + // Sanity check inputs + bytesUploaded = bytesUploaded || tracking.bytesUploaded || 0; + if (bytesUploaded < 0) { + bytesUploaded = 0; + } + if (bytesUploaded > file.size) { + bytesUploaded = file.size; + } + + var tickTime = (new Date()).getTime(); + if (!tracking.startTime) { + tracking.startTime = (new Date()).getTime(); + tracking.lastTime = tracking.startTime; + tracking.currentSpeed = 0; + tracking.averageSpeed = 0; + tracking.movingAverageSpeed = 0; + tracking.movingAverageHistory = []; + tracking.timeRemaining = 0; + tracking.timeElapsed = 0; + tracking.percentUploaded = bytesUploaded / file.size; + tracking.bytesUploaded = bytesUploaded; + } else if (tracking.startTime > tickTime) { + this.debug("When backwards in time"); + } else { + // Get time and deltas + var now = (new Date()).getTime(); + var lastTime = tracking.lastTime; + var deltaTime = now - lastTime; + var deltaBytes = bytesUploaded - tracking.bytesUploaded; + + if (deltaBytes === 0 || deltaTime === 0) { + return tracking; + } + + // Update tracking object + tracking.lastTime = now; + tracking.bytesUploaded = bytesUploaded; + + // Calculate speeds + tracking.currentSpeed = (deltaBytes * 8 ) / (deltaTime / 1000); + tracking.averageSpeed = (tracking.bytesUploaded * 8) / ((now - tracking.startTime) / 1000); + + // Calculate moving average + tracking.movingAverageHistory.push(tracking.currentSpeed); + if (tracking.movingAverageHistory.length > this.settings.moving_average_history_size) { + tracking.movingAverageHistory.shift(); + } + + tracking.movingAverageSpeed = SWFUpload.speed.calculateMovingAverage(tracking.movingAverageHistory); + + // Update times + tracking.timeRemaining = (file.size - tracking.bytesUploaded) * 8 / tracking.movingAverageSpeed; + tracking.timeElapsed = (now - tracking.startTime) / 1000; + + // Update percent + tracking.percentUploaded = (tracking.bytesUploaded / file.size * 100); + } + + return tracking; + }; + SWFUpload.speed.removeTracking = function (file, trackingList) { + try { + trackingList[file.id] = null; + delete trackingList[file.id]; + } catch (ex) { + } + }; + + SWFUpload.speed.formatUnits = function (baseNumber, unitDivisors, unitLabels, singleFractional) { + var i, unit, unitDivisor, unitLabel; + + if (baseNumber === 0) { + return "0 " + unitLabels[unitLabels.length - 1]; + } + + if (singleFractional) { + unit = baseNumber; + unitLabel = unitLabels.length >= unitDivisors.length ? unitLabels[unitDivisors.length - 1] : ""; + for (i = 0; i < unitDivisors.length; i++) { + if (baseNumber >= unitDivisors[i]) { + unit = (baseNumber / unitDivisors[i]).toFixed(2); + unitLabel = unitLabels.length >= i ? " " + unitLabels[i] : ""; + break; + } + } + + return unit + unitLabel; + } else { + var formattedStrings = []; + var remainder = baseNumber; + + for (i = 0; i < unitDivisors.length; i++) { + unitDivisor = unitDivisors[i]; + unitLabel = unitLabels.length > i ? " " + unitLabels[i] : ""; + + unit = remainder / unitDivisor; + if (i < unitDivisors.length -1) { + unit = Math.floor(unit); + } else { + unit = unit.toFixed(2); + } + if (unit > 0) { + remainder = remainder % unitDivisor; + + formattedStrings.push(unit + unitLabel); + } + } + + return formattedStrings.join(" "); + } + }; + + SWFUpload.speed.formatBPS = function (baseNumber) { + var bpsUnits = [1073741824, 1048576, 1024, 1], bpsUnitLabels = ["Gbps", "Mbps", "Kbps", "bps"]; + return SWFUpload.speed.formatUnits(baseNumber, bpsUnits, bpsUnitLabels, true); + + }; + SWFUpload.speed.formatTime = function (baseNumber) { + var timeUnits = [86400, 3600, 60, 1], timeUnitLabels = ["d", "h", "m", "s"]; + return SWFUpload.speed.formatUnits(baseNumber, timeUnits, timeUnitLabels, false); + + }; + SWFUpload.speed.formatBytes = function (baseNumber) { + var sizeUnits = [1073741824, 1048576, 1024, 1], sizeUnitLabels = ["GB", "MB", "KB", "bytes"]; + return SWFUpload.speed.formatUnits(baseNumber, sizeUnits, sizeUnitLabels, true); + + }; + SWFUpload.speed.formatPercent = function (baseNumber) { + return baseNumber.toFixed(2) + " %"; + }; + + SWFUpload.speed.calculateMovingAverage = function (history) { + var vals = [], size, sum = 0.0, mean = 0.0, varianceTemp = 0.0, variance = 0.0, standardDev = 0.0; + var i; + var mSum = 0, mCount = 0; + + size = history.length; + + // Check for sufficient data + if (size >= 8) { + // Clone the array and Calculate sum of the values + for (i = 0; i < size; i++) { + vals[i] = history[i]; + sum += vals[i]; + } + + mean = sum / size; + + // Calculate variance for the set + for (i = 0; i < size; i++) { + varianceTemp += Math.pow((vals[i] - mean), 2); + } + + variance = varianceTemp / size; + standardDev = Math.sqrt(variance); + + //Standardize the Data + for (i = 0; i < size; i++) { + vals[i] = (vals[i] - mean) / standardDev; + } + + // Calculate the average excluding outliers + var deviationRange = 2.0; + for (i = 0; i < size; i++) { + + if (vals[i] <= deviationRange && vals[i] >= -deviationRange) { + mCount++; + mSum += history[i]; + } + } + + } else { + // Calculate the average (not enough data points to remove outliers) + mCount = size; + for (i = 0; i < size; i++) { + mSum += history[i]; + } + } + + return mSum / mCount; + }; + +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/swfupload.swf b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/swfupload.swf new file mode 100755 index 0000000..1090a0e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3-ext/ux.swfupload/swfupload.swf differ diff --git a/ehcp/extplorer/scripts/extjs3/adapter/ext/ext-base.js b/ehcp/extplorer/scripts/extjs3/adapter/ext/ext-base.js new file mode 100755 index 0000000..5dc6905 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/adapter/ext/ext-base.js @@ -0,0 +1,7 @@ +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +window.undefined=window.undefined;Ext={version:"3.4.0",versionDetail:{major:3,minor:4,patch:0}};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,u=Object.prototype.toString,v=navigator.userAgent.toLowerCase(),A=function(e){return e.test(v)},i=document,n=i.documentMode,l=i.compatMode=="CSS1Compat",C=A(/opera/),h=A(/\bchrome\b/),w=A(/webkit/),z=!h&&A(/safari/),f=z&&A(/applewebkit\/4/),b=z&&A(/version\/3/),D=z&&A(/version\/4/),t=!C&&A(/msie/),r=t&&(A(/msie 7/)||n==7),q=t&&(A(/msie 8/)&&n!=7),p=t&&A(/msie 9/),s=t&&!r&&!q&&!p,o=!w&&A(/gecko/),d=o&&A(/rv:1\.8/),a=o&&A(/rv:1\.9/),x=t&&!l,B=A(/windows|win32/),k=A(/macintosh|mac os x/),j=A(/adobeair/),m=A(/linux/),c=/^https/i.test(window.location.protocol);if(s){try{i.execCommand("BackgroundImageCache",false,true)}catch(y){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&t?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableForcedBoxModel:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(E,F){if(E){for(var e in F){if(!Ext.isDefined(E[e])){E[e]=F[e]}}}return E},id:function(e,E){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(E||"ext-gen")+(++g)}return e.id},extend:function(){var E=function(G){for(var F in G){this[F]=G[F]}};var e=Object.prototype.constructor;return function(L,I,K){if(typeof I=="object"){K=I;I=L;L=K.constructor!=e?K.constructor:function(){I.apply(this,arguments)}}var H=function(){},J,G=I.prototype;H.prototype=G;J=L.prototype=new H();J.constructor=L;L.superclass=G;if(G.constructor==e){G.constructor=I}L.override=function(F){Ext.override(L,F)};J.superclass=J.supr=(function(){return G});J.override=E;Ext.override(L,K);L.extend=function(F){return Ext.extend(L,F)};return L}}(),override:function(e,F){if(F){var E=e.prototype;Ext.apply(E,F);if(Ext.isIE&&F.hasOwnProperty("toString")){E.toString=F.toString}}},namespace:function(){var G=arguments.length,H=0,E,F,e,J,I,K;for(;H0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c0){for(var p=0;p0);if(!A){A=true;for(I=0;I=0){B=s.substr(0,A).toLowerCase();if(s.charAt(A+1)==" "){++A}C[B]=s.substr(A+1)}})}catch(z){}return{tId:u.tId,status:v?204:w.status,statusText:v?"No Content":w.statusText,getResponseHeader:function(s){return C[s.toLowerCase()]},getAllResponseHeaders:function(){return x},responseText:w.responseText,responseXML:w.responseXML,argument:y}}function o(s){if(s.tId){k.conn[s.tId]=null}s.conn=null;s=null}function f(x,y,t,s){if(!y){o(x);return}var v,u;try{if(x.conn.status!==undefined&&x.conn.status!=0){v=x.conn.status}else{v=13030}}catch(w){v=13030}if((v>=200&&v<300)||(Ext.isIE&&v==1223)){u=p(x,y.argument);if(y.success){if(!y.scope){y.success(u)}else{y.success.apply(y.scope,[u])}}}else{switch(v){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:u=e(x.tId,y.argument,(t?t:false),s);if(y.failure){if(!y.scope){y.failure(u)}else{y.failure.apply(y.scope,[u])}}break;default:u=p(x,y.argument);if(y.failure){if(!y.scope){y.failure(u)}else{y.failure.apply(y.scope,[u])}}}}o(x);u=null}function m(u,x,s,w,t,v){if(s&&s.readyState==4){clearInterval(t[w]);t[w]=null;if(v){clearTimeout(k.timeout[w]);k.timeout[w]=null}f(u,x)}}function r(s,t){k.abort(s,t,true)}function n(u,x){x=x||{};var s=u.conn,w=u.tId,t=k.poll,v=x.timeout||null;if(v){k.conn[w]=s;k.timeout[w]=setTimeout(r.createCallback(u,x),v)}t[w]=setInterval(m.createCallback(u,x,s,w,t,v),k.pollInterval)}function i(w,t,v,s){var u=l()||null;if(u){u.conn.open(w,t,true);if(k.useDefaultXhrHeader){j("X-Requested-With",k.defaultXhrHeader)}if(s&&k.useDefaultHeader&&(!k.headers||!k.headers[d])){j(d,k.defaultPostHeader)}if(k.defaultHeaders||k.headers){h(u)}n(u,v);u.conn.send(s||null)}return u}function l(){var t;try{if(t=q(k.transactionId)){k.transactionId++}}catch(s){}finally{return t}}function q(v){var s;try{s=new XMLHttpRequest()}catch(u){for(var t=Ext.isIE6?1:0;t0&&isFinite(w)){if(r.curFrame+w>=v){w=v-(u+1)}r.curFrame+=w}}};g.Bezier=new function(){this.getPosition=function(p,o){var r=p.length,m=[],q=1-o,l,k;for(l=0;l0&&!Ext.isArray(s[0])){s=[s]}else{}Ext.fly(p,"_anim").position();A.setXY(p,j(x)?x:A.getXY(p));o=w.getAttr("points");if(j(y)){q=k.call(w,y,o);for(r=0,t=s.length;r0){n=n.concat(s)}n[n.length]=q}else{m.setRunAttr.call(this,u)}}});var k=function(n,p){var o=g.Dom.getXY(this.el);return[n[0]-o[0]+p[0],n[1]-o[1]+p[1]]}})()})();(function(){var d=Math.abs,i=Math.PI,h=Math.asin,g=Math.pow,e=Math.sin,f=Ext.lib;Ext.apply(f.Easing,{easeBoth:function(k,j,m,l){return((k/=l/2)<1)?m/2*k*k+j:-m/2*((--k)*(k-2)-1)+j},easeInStrong:function(k,j,m,l){return m*(k/=l)*k*k*k+j},easeOutStrong:function(k,j,m,l){return -m*((k=k/l-1)*k*k*k-1)+j},easeBothStrong:function(k,j,m,l){return((k/=l/2)<1)?m/2*k*k*k*k+j:-m/2*((k-=2)*k*k*k-2)+j},elasticIn:function(l,j,q,o,k,n){if(l==0||(l/=o)==1){return l==0?j:j+q}n=n||(o*0.3);var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return -(k*g(2,10*(l-=1))*e((l*o-m)*(2*i)/n))+j},elasticOut:function(l,j,q,o,k,n){if(l==0||(l/=o)==1){return l==0?j:j+q}n=n||(o*0.3);var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return k*g(2,-10*l)*e((l*o-m)*(2*i)/n)+q+j},elasticBoth:function(l,j,q,o,k,n){if(l==0||(l/=o/2)==2){return l==0?j:j+q}n=n||(o*(0.3*1.5));var m;if(k>=d(q)){m=n/(2*i)*h(q/k)}else{k=q;m=n/4}return l<1?-0.5*(k*g(2,10*(l-=1))*e((l*o-m)*(2*i)/n))+j:k*g(2,-10*(l-=1))*e((l*o-m)*(2*i)/n)*0.5+q+j},backIn:function(k,j,n,m,l){l=l||1.70158;return n*(k/=m)*k*((l+1)*k-l)+j},backOut:function(k,j,n,m,l){if(!l){l=1.70158}return n*((k=k/m-1)*k*((l+1)*k+l)+1)+j},backBoth:function(k,j,n,m,l){l=l||1.70158;return((k/=m/2)<1)?n/2*(k*k*(((l*=(1.525))+1)*k-l))+j:n/2*((k-=2)*k*(((l*=(1.525))+1)*k+l)+2)+j},bounceIn:function(k,j,m,l){return m-f.Easing.bounceOut(l-k,0,m,l)+j},bounceOut:function(k,j,m,l){if((k/=l)<(1/2.75)){return m*(7.5625*k*k)+j}else{if(k<(2/2.75)){return m*(7.5625*(k-=(1.5/2.75))*k+0.75)+j}else{if(k<(2.5/2.75)){return m*(7.5625*(k-=(2.25/2.75))*k+0.9375)+j}}}return m*(7.5625*(k-=(2.625/2.75))*k+0.984375)+j},bounceBoth:function(k,j,m,l){return(k + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/charts.swf b/ehcp/extplorer/scripts/extjs3/charts.swf new file mode 100755 index 0000000..472ca22 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/charts.swf differ diff --git a/ehcp/extplorer/scripts/extjs3/expressinstall.swf b/ehcp/extplorer/scripts/extjs3/expressinstall.swf new file mode 100755 index 0000000..613d69b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/expressinstall.swf differ diff --git a/ehcp/extplorer/scripts/extjs3/ext-all.js b/ehcp/extplorer/scripts/extjs3/ext-all.js new file mode 100755 index 0000000..8bf4adb --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/ext-all.js @@ -0,0 +1,11 @@ +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +(function(){var h=Ext.util,j=Ext.each,g=true,i=false;h.Observable=function(){var k=this,l=k.events;if(k.listeners){k.on(k.listeners);delete k.listeners}k.events=l||{}};h.Observable.prototype={filterOptRe:/^(?:scope|delay|buffer|single)$/,fireEvent:function(){var k=Array.prototype.slice.call(arguments,0),m=k[0].toLowerCase(),n=this,l=g,p=n.events[m],s,o,r;if(n.eventsSuspended===g){if(o=n.eventQueue){o.push(k)}}else{if(typeof p=="object"){if(p.bubble){if(p.fire.apply(p,k.slice(1))===i){return i}r=n.getBubbleTarget&&n.getBubbleTarget();if(r&&r.enableBubble){s=r.events[m];if(!s||typeof s!="object"||!s.bubble){r.enableBubble(m)}return r.fireEvent.apply(r,k)}}else{k.shift();l=p.fire.apply(p,k)}}}return l},addListener:function(k,m,l,r){var n=this,q,s,p;if(typeof k=="object"){r=k;for(q in r){s=r[q];if(!n.filterOptRe.test(q)){n.addListener(q,s.fn||s,s.scope||r.scope,s.fn?s:r)}}}else{k=k.toLowerCase();p=n.events[k]||g;if(typeof p=="boolean"){n.events[k]=p=new h.Event(n,k)}p.addListener(m,l,typeof r=="object"?r:{})}},removeListener:function(k,m,l){var n=this.events[k.toLowerCase()];if(typeof n=="object"){n.removeListener(m,l)}},purgeListeners:function(){var m=this.events,k,l;for(l in m){k=m[l];if(typeof k=="object"){k.clearListeners()}}},addEvents:function(n){var m=this;m.events=m.events||{};if(typeof n=="string"){var k=arguments,l=k.length;while(l--){m.events[k[l]]=m.events[k[l]]||g}}else{Ext.applyIf(m.events,n)}},hasListener:function(k){var l=this.events[k.toLowerCase()];return typeof l=="object"&&l.listeners.length>0},suspendEvents:function(k){this.eventsSuspended=g;if(k&&!this.eventQueue){this.eventQueue=[]}},resumeEvents:function(){var k=this,l=k.eventQueue||[];k.eventsSuspended=i;delete k.eventQueue;j(l,function(m){k.fireEvent.apply(k,m)})}};var d=h.Observable.prototype;d.on=d.addListener;d.un=d.removeListener;h.Observable.releaseCapture=function(k){k.fireEvent=d.fireEvent};function e(l,m,k){return function(){if(m.target==arguments[0]){l.apply(k,Array.prototype.slice.call(arguments,0))}}}function b(n,p,k,m){k.task=new h.DelayedTask();return function(){k.task.delay(p.buffer,n,m,Array.prototype.slice.call(arguments,0))}}function c(m,n,l,k){return function(){n.removeListener(l,k);return m.apply(k,arguments)}}function a(n,p,k,m){return function(){var l=new h.DelayedTask(),o=Array.prototype.slice.call(arguments,0);if(!k.tasks){k.tasks=[]}k.tasks.push(l);l.delay(p.delay||10,function(){k.tasks.remove(l);n.apply(m,o)},m)}}h.Event=function(l,k){this.name=k;this.obj=l;this.listeners=[]};h.Event.prototype={addListener:function(o,n,m){var p=this,k;n=n||p.obj;if(!p.isListening(o,n)){k=p.createListener(o,n,m);if(p.firing){p.listeners=p.listeners.slice(0)}p.listeners.push(k)}},createListener:function(p,n,q){q=q||{};n=n||this.obj;var k={fn:p,scope:n,options:q},m=p;if(q.target){m=e(m,q,n)}if(q.delay){m=a(m,q,k,n)}if(q.single){m=c(m,this,p,n)}if(q.buffer){m=b(m,q,k,n)}k.fireFn=m;return k},findListener:function(o,n){var p=this.listeners,m=p.length,k;n=n||this.obj;while(m--){k=p[m];if(k){if(k.fn==o&&k.scope==n){return m}}}return -1},isListening:function(l,k){return this.findListener(l,k)!=-1},removeListener:function(r,q){var p,m,n,s=this,o=i;if((p=s.findListener(r,q))!=-1){if(s.firing){s.listeners=s.listeners.slice(0)}m=s.listeners[p];if(m.task){m.task.cancel();delete m.task}n=m.tasks&&m.tasks.length;if(n){while(n--){m.tasks[n].cancel()}delete m.tasks}s.listeners.splice(p,1);o=g}return o},clearListeners:function(){var n=this,k=n.listeners,m=k.length;while(m--){n.removeListener(k[m].fn,k[m].scope)}},fire:function(){var q=this,p=q.listeners,k=p.length,o=0,m;if(k>0){q.firing=g;var n=Array.prototype.slice.call(arguments,0);for(;o",i="",b=a+"",j=""+i,l=b+"",w=""+j;function h(B,D,C,E,A,y){var z=r.insertHtml(E,Ext.getDom(B),u(D));return C?Ext.get(z,true):z}function u(D){var z="",y,C,B,E;if(typeof D=="string"){z=D}else{if(Ext.isArray(D)){for(var A=0;A"}}}return z}function g(F,C,B,D){x.innerHTML=[C,B,D].join("");var y=-1,A=x,z;while(++y "'+D+'"'},insertBefore:function(y,A,z){return h(y,A,z,c)},insertAfter:function(y,A,z){return h(y,A,z,p,"nextSibling")},insertFirst:function(y,A,z){return h(y,A,z,n,"firstChild")},append:function(y,A,z){return h(y,A,z,q,"",true)},overwrite:function(y,A,z){y=Ext.getDom(y);y.innerHTML=u(A);return z?Ext.get(y.firstChild):y.firstChild},createHtml:u};return r}();Ext.Template=function(h){var j=this,c=arguments,e=[],d;if(Ext.isArray(h)){h=h.join("")}else{if(c.length>1){for(var g=0,b=c.length;g+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w\-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;eval("var batch = 30803;");function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}function byClassName(nodeSet,cls){if(!cls){return nodeSet}var result=[],ri=-1;for(var i=0,ci;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!=-1){result[++ri]=ci}}return result}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:document.querySelectorAll?function(path,root,type){root=root||document;if(!Ext.DomQuery.isXml(root)){try{var cs=root.querySelectorAll(path);return Ext.toArray(cs)}catch(ex){}}return Ext.DomQuery.jsSelect.call(this,path,root,type)}:function(path,root,type){return Ext.DomQuery.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w\-]+)/,select:'n = byClassName(n, " {1} ");'},{re:/^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?(["']?)(.*?)\4)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{5}", "{3}", "{1}");'},{re:/^#([\w\-]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w\-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(i,k,j,h){e.cancel();d=k||d;c=j||c;a=h||a;g=setInterval(b,i)};e.cancel=function(){if(g){clearInterval(g);g=null}}};(function(){var h=document;Ext.Element=function(l,m){var n=typeof l=="string"?h.getElementById(l):l,o;if(!n){return null}o=n.id;if(!m&&o&&Ext.elCache[o]){return Ext.elCache[o].el}this.dom=n;this.id=o||Ext.id(n)};var d=Ext.DomHelper,e=Ext.Element,a=Ext.elCache;e.prototype={set:function(q,m){var n=this.dom,l,p,m=(m!==false)&&!!n.setAttribute;for(l in q){if(q.hasOwnProperty(l)){p=q[l];if(l=="style"){d.applyStyles(n,p)}else{if(l=="cls"){n.className=p}else{if(m){n.setAttribute(l,p)}else{n[l]=p}}}}}return this},defaultUnit:"px",is:function(l){return Ext.DomQuery.is(this.dom,l)},focus:function(o,n){var l=this,n=n||l.dom;try{if(Number(o)){l.focus.defer(o,null,[null,n])}else{n.focus()}}catch(m){}return l},blur:function(){try{this.dom.blur()}catch(l){}return this},getValue:function(l){var m=this.dom.value;return l?parseInt(m,10):m},addListener:function(l,o,n,m){Ext.EventManager.on(this.dom,l,o,n||this,m);return this},removeListener:function(l,n,m){Ext.EventManager.removeListener(this.dom,l,n,m||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},purgeAllListeners:function(){Ext.EventManager.purgeElement(this,true);return this},addUnits:function(l){if(l===""||l=="auto"||l===undefined){l=l||""}else{if(!isNaN(l)||!i.test(l)){l=l+(this.defaultUnit||"px")}}return l},load:function(m,n,l){Ext.Ajax.request(Ext.apply({params:n,url:m.url||m,callback:l,el:this.dom,indicatorText:m.indicatorText||""},Ext.isObject(m)?m:{}));return this},isBorderBox:function(){return Ext.isBorderBox||Ext.isForcedBorderBox||g[(this.dom.tagName||"").toLowerCase()]},remove:function(){var l=this,m=l.dom;if(m){delete l.dom;Ext.removeNode(m)}},hover:function(m,l,o,n){var p=this;p.on("mouseenter",m,o||p.dom,n);p.on("mouseleave",l,o||p.dom,n);return p},contains:function(l){return !l?false:Ext.lib.Dom.isAncestor(this.dom,l.dom?l.dom:l)},getAttributeNS:function(m,l){return this.getAttribute(l,m)},getAttribute:(function(){var p=document.createElement("table"),o=false,m="getAttribute" in p,l=/undefined|unknown/;if(m){try{p.getAttribute("ext:qtip")}catch(n){o=true}return function(q,s){var r=this.dom,t;if(r.getAttributeNS){t=r.getAttributeNS(s,q)||null}if(t==null){if(s){if(o&&r.tagName.toUpperCase()=="TABLE"){try{t=r.getAttribute(s+":"+q)}catch(u){t=""}}else{t=r.getAttribute(s+":"+q)}}else{t=r.getAttribute(q)||r[q]}}return t||""}}else{return function(q,s){var r=this.om,u,t;if(s){t=r[s+":"+q];u=l.test(typeof t)?undefined:t}else{u=r[q]}return u||""}}p=null})(),update:function(l){if(this.dom){this.dom.innerHTML=l}return this}};var k=e.prototype;e.addMethods=function(l){Ext.apply(k,l)};k.on=k.addListener;k.un=k.removeListener;k.autoBoxAdjust=true;var i=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,c;e.get=function(m){var l,p,o;if(!m){return null}if(typeof m=="string"){if(!(p=h.getElementById(m))){return null}if(a[m]&&a[m].el){l=a[m].el;l.dom=p}else{l=e.addToCache(new e(p))}return l}else{if(m.tagName){if(!(o=m.id)){o=Ext.id(m)}if(a[o]&&a[o].el){l=a[o].el;l.dom=m}else{l=e.addToCache(new e(m))}return l}else{if(m instanceof e){if(m!=c){if(Ext.isIE&&(m.id==undefined||m.id=="")){m.dom=m.dom}else{m.dom=h.getElementById(m.id)||m.dom}}return m}else{if(m.isComposite){return m}else{if(Ext.isArray(m)){return e.select(m)}else{if(m==h){if(!c){var n=function(){};n.prototype=e.prototype;c=new n();c.dom=h}return c}}}}}}return null};e.addToCache=function(l,m){m=m||l.id;a[m]={el:l,data:{},events:{}};return l};e.data=function(m,l,n){m=e.get(m);if(!m){return null}var o=a[m.id].data;if(arguments.length==2){return o[l]}else{return(o[l]=n)}};function j(){if(!Ext.enableGarbageCollector){clearInterval(e.collectorThreadId)}else{var l,n,q,p;for(l in a){p=a[l];if(p.skipGC){continue}n=p.el;q=n.dom;if(!q||!q.parentNode||(!q.offsetParent&&!h.getElementById(l))){if(Ext.enableListenerCollection){Ext.EventManager.removeAll(q)}delete a[l]}}if(Ext.isIE){var m={};for(l in a){m[l]=a[l]}a=Ext.elCache=m}}}e.collectorThreadId=setInterval(j,30000);var b=function(){};b.prototype=e.prototype;e.Flyweight=function(l){this.dom=l};e.Flyweight.prototype=new b();e.Flyweight.prototype.isFlyweight=true;e._flyweights={};e.fly=function(n,l){var m=null;l=l||"_global";if(n=Ext.getDom(n)){(e._flyweights[l]=e._flyweights[l]||new e.Flyweight()).dom=n;m=e._flyweights[l]}return m};Ext.get=e.get;Ext.fly=e.fly;var g=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){g.button=1}})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(m,l,h){var j=this.dom,g=document.body,k=0,i;if(Ext.isGecko&&Object.prototype.toString.call(j)=="[object XULElement]"){return null}l=l||50;if(isNaN(l)){i=Ext.getDom(l);l=Number.MAX_VALUE}while(j&&j.nodeType==1&&k "+g,this.dom);return h?i:a(i)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,k,g,i){var j=this.dom[k];while(j){if(j.nodeType==1&&(!g||e.is(j,g))){return !i?a(j):j}j=j[h]}return null}}}());Ext.Element.addMethods(function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{appendChild:function(d){return a(d).appendTo(this)},appendTo:function(d){c(d).appendChild(this.dom);return this},insertBefore:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d);return this},insertAfter:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);return this},insertFirst:function(e,d){e=e||{};if(e.nodeType||e.dom||typeof e=="string"){e=c(e);this.dom.insertBefore(e,this.dom.firstChild);return !d?a(e):e}else{return this.createChild(e,this.dom.firstChild,d)}},replace:function(d){d=a(d);this.insertBefore(d);d.remove();return this},replaceWith:function(d){var e=this;if(d.nodeType||d.dom||typeof d=="string"){d=c(d);e.dom.parentNode.insertBefore(d,e.dom)}else{d=b.insertBefore(e.dom,d)}delete Ext.elCache[e.id];Ext.removeNode(e.dom);e.id=Ext.id(e.dom=d);Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);return e},createChild:function(e,d,g){e=e||{tag:"div"};return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)},wrap:function(d,e){var g=b.insertBefore(this.dom,d||{tag:"div"},!e);g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);return g},insertHtml:function(e,g,d){var h=b.insertHtml(e,this.dom,g);return d?Ext.get(h):h}}}());Ext.Element.addMethods(function(){var A=Ext.supports,h={},x=/(-[a-z])/gi,s=document.defaultView,D=/alpha\(opacity=(.*)\)/i,l=/^\s+|\s+$/g,B=Ext.Element,u=/\s+/,b=/\w/g,d="padding",c="margin",y="border",t="-left",q="-right",w="-top",o="-bottom",j="-width",r=Math,z="hidden",e="isClipped",k="overflow",n="overflow-x",m="overflow-y",C="originalClip",i={l:y+t+j,r:y+q+j,t:y+w+j,b:y+o+j},g={l:d+t,r:d+q,t:d+w,b:d+o},a={l:c+t,r:c+q,t:c+w,b:c+o},E=Ext.Element.data;function p(F,G){return G.charAt(1).toUpperCase()}function v(F){return h[F]||(h[F]=F=="float"?(A.cssFloat?"cssFloat":"styleFloat"):F.replace(x,p))}return{adjustWidth:function(F){var G=this;var H=(typeof F=="number");if(H&&G.autoBoxAdjust&&!G.isBorderBox()){F-=(G.getBorderWidth("lr")+G.getPadding("lr"))}return(H&&F<0)?0:F},adjustHeight:function(F){var G=this;var H=(typeof F=="number");if(H&&G.autoBoxAdjust&&!G.isBorderBox()){F-=(G.getBorderWidth("tb")+G.getPadding("tb"))}return(H&&F<0)?0:F},addClass:function(J){var K=this,I,F,H,G=[];if(!Ext.isArray(J)){if(typeof J=="string"&&!this.hasClass(J)){K.dom.className+=" "+J}}else{for(I=0,F=J.length;I5?H.toLowerCase():G)},setStyle:function(I,H){var F,G;if(typeof I!="object"){F={};F[I]=H;I=F}for(G in I){H=I[G];G=="opacity"?this.setOpacity(H):this.dom.style[v(G)]=H}return this},setOpacity:function(G,F){var J=this,H=J.dom.style;if(!F||!J.anim){if(Ext.isIE){var I=G<1?"alpha(opacity="+G*100+")":"",K=H.filter.replace(D,"").replace(l,"");H.zoom=1;H.filter=K+(K.length>0?" ":"")+I}else{H.opacity=G}}else{J.anim({opacity:{to:G}},J.preanim(arguments,1),null,0.35,"easeIn")}return J},clearOpacity:function(){var F=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(F.filter)){F.filter=F.filter.replace(D,"").replace(l,"")}}else{F.opacity=F["-moz-opacity"]=F["-khtml-opacity"]=""}return this},getHeight:function(H){var G=this,J=G.dom,I=Ext.isIE&&G.isStyle("display","none"),F=r.max(J.offsetHeight,I?0:J.clientHeight)||0;F=!H?F:F-G.getBorderWidth("tb")-G.getPadding("tb");return F<0?0:F},getWidth:function(G){var H=this,J=H.dom,I=Ext.isIE&&H.isStyle("display","none"),F=r.max(J.offsetWidth,I?0:J.clientWidth)||0;F=!G?F:F-H.getBorderWidth("lr")-H.getPadding("lr");return F<0?0:F},setWidth:function(G,F){var H=this;G=H.adjustWidth(G);!F||!H.anim?H.dom.style.width=H.addUnits(G):H.anim({width:{to:G}},H.preanim(arguments,1));return H},setHeight:function(F,G){var H=this;F=H.adjustHeight(F);!G||!H.anim?H.dom.style.height=H.addUnits(F):H.anim({height:{to:F}},H.preanim(arguments,1));return H},getBorderWidth:function(F){return this.addStyles(F,i)},getPadding:function(F){return this.addStyles(F,g)},clip:function(){var F=this,G=F.dom;if(!E(G,e)){E(G,e,true);E(G,C,{o:F.getStyle(k),x:F.getStyle(n),y:F.getStyle(m)});F.setStyle(k,z);F.setStyle(n,z);F.setStyle(m,z)}return F},unclip:function(){var F=this,H=F.dom;if(E(H,e)){E(H,e,false);var G=E(H,C);if(G.o){F.setStyle(k,G.o)}if(G.x){F.setStyle(n,G.x)}if(G.y){F.setStyle(m,G.y)}}return F},addStyles:function(M,L){var J=0,K=M.match(b),I,H,G,F=K.length;for(G=0;Ga.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.OFFSETS=3;Ext.Element.ASCLASS=4;Ext.Element.visibilityCls="x-hide-nosize";Ext.Element.addMethods(function(){var e=Ext.Element,p="opacity",j="visibility",g="display",d="hidden",n="offsets",k="asclass",m="none",a="nosize",b="originalDisplay",c="visibilityMode",h="isVisible",i=e.data,l=function(r){var q=i(r,b);if(q===undefined){i(r,b,q="")}return q},o=function(r){var q=i(r,c);if(q===undefined){i(r,c,q=1)}return q};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(q){i(this.dom,c,q);return this},animate:function(r,t,s,u,q){this.anim(r,{duration:t,callback:s,easing:u},q);return this},anim:function(t,u,r,w,s,q){r=r||"run";u=u||{};var v=this,x=Ext.lib.Anim[r](v.dom,t,(u.duration||w)||0.35,(u.easing||s)||"easeOut",function(){if(q){q.call(v)}if(u.callback){u.callback.call(u.scope||v,v,u)}},v);u.anim=x;return x},preanim:function(q,r){return !q[r]?false:(typeof q[r]=="object"?q[r]:{duration:q[r+1],callback:q[r+2],easing:q[r+3]})},isVisible:function(){var q=this,s=q.dom,r=i(s,h);if(typeof r=="boolean"){return r}r=!q.isStyle(j,d)&&!q.isStyle(g,m)&&!((o(s)==e.ASCLASS)&&q.hasClass(q.visibilityCls||e.visibilityCls));i(s,h,r);return r},setVisible:function(t,q){var w=this,r,y,x,v,u=w.dom,s=o(u);if(typeof q=="string"){switch(q){case g:s=e.DISPLAY;break;case j:s=e.VISIBILITY;break;case n:s=e.OFFSETS;break;case a:case k:s=e.ASCLASS;break}w.setVisibilityMode(s);q=false}if(!q||!w.anim){if(s==e.ASCLASS){w[t?"removeClass":"addClass"](w.visibilityCls||e.visibilityCls)}else{if(s==e.DISPLAY){return w.setDisplayed(t)}else{if(s==e.OFFSETS){if(!t){w.hideModeStyles={position:w.getStyle("position"),top:w.getStyle("top"),left:w.getStyle("left")};w.applyStyles({position:"absolute",top:"-10000px",left:"-10000px"})}else{w.applyStyles(w.hideModeStyles||{position:"",top:"",left:""});delete w.hideModeStyles}}else{w.fixDisplay();u.style.visibility=t?"visible":d}}}}else{if(t){w.setOpacity(0.01);w.setVisible(true)}w.anim({opacity:{to:(t?1:0)}},w.preanim(arguments,1),null,0.35,"easeIn",function(){t||w.setVisible(false).setOpacity(1)})}i(u,h,t);return w},hasMetrics:function(){var q=this.dom;return this.isVisible()||(o(q)==e.VISIBILITY)},toggle:function(q){var r=this;r.setVisible(!r.isVisible(),r.preanim(arguments,0));return r},setDisplayed:function(q){if(typeof q=="boolean"){q=q?l(this.dom):m}this.setStyle(g,q);return this},fixDisplay:function(){var q=this;if(q.isStyle(g,m)){q.setStyle(j,d);q.setStyle(g,l(this.dom));if(q.isStyle(g,m)){q.setStyle(g,"block")}}},hide:function(q){if(typeof q=="string"){this.setVisible(false,q);return this}this.setVisible(false,this.preanim(arguments,0));return this},show:function(q){if(typeof q=="string"){this.setVisible(true,q);return this}this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var y=null,A=undefined,k=true,t=false,j="setX",h="setY",a="setXY",n="left",l="bottom",s="top",m="right",q="height",g="width",i="points",w="hidden",z="absolute",u="visible",e="motion",o="position",r="easeOut",d=new Ext.Element.Flyweight(),v={},x=function(B){return B||{}},p=function(B){d.dom=B;d.id=Ext.id(B);return d},c=function(B){if(!v[B]){v[B]=[]}return v[B]},b=function(C,B){v[C]=B};Ext.enableFx=k;Ext.Fx={switchStatements:function(C,D,B){return D.apply(this,B[C])},slideIn:function(H,E){E=x(E);var J=this,G=J.dom,M=G.style,O,B,L,D,C,M,I,N,K,F;H=H||"t";J.queueFx(E,function(){O=p(G).getXY();p(G).fixDisplay();B=p(G).getFxRestore();L={x:O[0],y:O[1],0:O[0],1:O[1],width:G.offsetWidth,height:G.offsetHeight};L.right=L.x+L.width;L.bottom=L.y+L.height;p(G).setWidth(L.width).setHeight(L.height);D=p(G).fxWrap(B.pos,E,w);M.visibility=u;M.position=z;function P(){p(G).fxUnwrap(D,B.pos,E);M.width=B.width;M.height=B.height;p(G).afterFx(E)}N={to:[L.x,L.y]};K={to:L.width};F={to:L.height};function Q(U,R,V,S,X,Z,ac,ab,aa,W,T){var Y={};p(U).setWidth(V).setHeight(S);if(p(U)[X]){p(U)[X](Z)}R[ac]=R[ab]="0";if(aa){Y.width=aa}if(W){Y.height=W}if(T){Y.points=T}return Y}I=p(G).switchStatements(H.toLowerCase(),Q,{t:[D,M,L.width,0,y,y,n,l,y,F,y],l:[D,M,0,L.height,y,y,m,s,K,y,y],r:[D,M,L.width,L.height,j,L.right,n,s,y,y,N],b:[D,M,L.width,L.height,h,L.bottom,n,s,y,F,N],tl:[D,M,0,0,y,y,m,l,K,F,N],bl:[D,M,0,0,h,L.y+L.height,m,s,K,F,N],br:[D,M,0,0,a,[L.right,L.bottom],n,s,K,F,N],tr:[D,M,0,0,j,L.x+L.width,n,l,K,F,N]});M.visibility=u;p(D).show();arguments.callee.anim=p(D).fxanim(I,E,e,0.5,r,P)});return J},slideOut:function(F,D){D=x(D);var H=this,E=H.dom,K=E.style,L=H.getXY(),C,B,I,J,G={to:0};F=F||"t";H.queueFx(D,function(){B=p(E).getFxRestore();I={x:L[0],y:L[1],0:L[0],1:L[1],width:E.offsetWidth,height:E.offsetHeight};I.right=I.x+I.width;I.bottom=I.y+I.height;p(E).setWidth(I.width).setHeight(I.height);C=p(E).fxWrap(B.pos,D,u);K.visibility=u;K.position=z;p(C).setWidth(I.width).setHeight(I.height);function M(){D.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).fxUnwrap(C,B.pos,D);K.width=B.width;K.height=B.height;p(E).afterFx(D)}function N(O,W,U,X,S,V,R,T,Q){var P={};O[W]=O[U]="0";P[X]=S;if(V){P[V]=R}if(T){P[T]=Q}return P}J=p(E).switchStatements(F.toLowerCase(),N,{t:[K,n,l,q,G],l:[K,m,s,g,G],r:[K,n,s,g,G,i,{to:[I.right,I.y]}],b:[K,n,s,q,G,i,{to:[I.x,I.bottom]}],tl:[K,m,l,g,G,q,G],bl:[K,m,s,g,G,q,G,i,{to:[I.x,I.bottom]}],br:[K,n,s,g,G,q,G,i,{to:[I.x+I.width,I.bottom]}],tr:[K,n,l,g,G,q,G,i,{to:[I.right,I.y]}]});arguments.callee.anim=p(C).fxanim(J,D,e,0.5,r,M)});return H},puff:function(H){H=x(H);var F=this,G=F.dom,C=G.style,D,B,E;F.queueFx(H,function(){D=p(G).getWidth();B=p(G).getHeight();p(G).clearOpacity();p(G).show();E=p(G).getFxRestore();function I(){H.useDisplay?p(G).setDisplayed(t):p(G).hide();p(G).clearOpacity();p(G).setPositioning(E.pos);C.width=E.width;C.height=E.height;C.fontSize="";p(G).afterFx(H)}arguments.callee.anim=p(G).fxanim({width:{to:p(G).adjustWidth(D*2)},height:{to:p(G).adjustHeight(B*2)},points:{by:[-D*0.5,-B*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},H,e,0.5,r,I)});return F},switchOff:function(F){F=x(F);var D=this,E=D.dom,B=E.style,C;D.queueFx(F,function(){p(E).clearOpacity();p(E).clip();C=p(E).getFxRestore();function G(){F.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).clearOpacity();p(E).setPositioning(C.pos);B.width=C.width;B.height=C.height;p(E).afterFx(F)}p(E).fxanim({opacity:{to:0.3}},y,y,0.1,y,function(){p(E).clearOpacity();(function(){p(E).fxanim({height:{to:1},points:{by:[0,p(E).getHeight()*0.5]}},F,e,0.3,"easeIn",G)}).defer(100)})});return D},highlight:function(D,H){H=x(H);var F=this,G=F.dom,B=H.attr||"backgroundColor",C={},E;F.queueFx(H,function(){p(G).clearOpacity();p(G).show();function I(){G.style[B]=E;p(G).afterFx(H)}E=G.style[B];C[B]={from:D||"ffff9c",to:H.endColor||p(G).getColor(B)||"ffffff"};arguments.callee.anim=p(G).fxanim(C,H,"color",1,"easeIn",I)});return F},frame:function(B,E,H){H=x(H);var D=this,G=D.dom,C,F;D.queueFx(H,function(){B=B||"#C3DAF9";if(B.length==6){B="#"+B}E=E||1;p(G).show();var L=p(G).getXY(),J={x:L[0],y:L[1],0:L[0],1:L[1],width:G.offsetWidth,height:G.offsetHeight},I=function(){C=p(document.body||document.documentElement).createChild({style:{position:z,"z-index":35000,border:"0px solid "+B}});return C.queueFx({},K)};arguments.callee.anim={isAnimated:true,stop:function(){E=0;C.stopFx()}};function K(){var M=Ext.isBorderBox?2:1;F=C.anim({top:{from:J.y,to:J.y-20},left:{from:J.x,to:J.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:J.height,to:J.height+20*M},width:{from:J.width,to:J.width+20*M}},{duration:H.duration||1,callback:function(){C.remove();--E>0?I():p(G).afterFx(H)}});arguments.callee.anim={isAnimated:true,stop:function(){F.stop()}}}I()});return D},pause:function(D){var C=this.dom,B;this.queueFx({},function(){B=setTimeout(function(){p(C).afterFx({})},D*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(B);p(C).afterFx({})}}});return this},fadeIn:function(D){D=x(D);var B=this,C=B.dom,E=D.endOpacity||1;B.queueFx(D,function(){p(C).setOpacity(0);p(C).fixDisplay();C.style.visibility=u;arguments.callee.anim=p(C).fxanim({opacity:{to:E}},D,y,0.5,r,function(){if(E==1){p(C).clearOpacity()}p(C).afterFx(D)})});return B},fadeOut:function(E){E=x(E);var C=this,D=C.dom,B=D.style,F=E.endOpacity||0;C.queueFx(E,function(){arguments.callee.anim=p(D).fxanim({opacity:{to:F}},E,y,0.5,r,function(){if(F==0){Ext.Element.data(D,"visibilityMode")==Ext.Element.DISPLAY||E.useDisplay?B.display="none":B.visibility=w;p(D).clearOpacity()}p(D).afterFx(E)})});return C},scale:function(B,C,D){this.shift(Ext.apply({},D,{width:B,height:C}));return this},shift:function(D){D=x(D);var C=this.dom,B={};this.queueFx(D,function(){for(var E in D){if(D[E]!=A){B[E]={to:D[E]}}}B.width?B.width.to=p(C).adjustWidth(D.width):B;B.height?B.height.to=p(C).adjustWidth(D.height):B;if(B.x||B.y||B.xy){B.points=B.xy||{to:[B.x?B.x.to:p(C).getX(),B.y?B.y.to:p(C).getY()]}}arguments.callee.anim=p(C).fxanim(B,D,e,0.35,r,function(){p(C).afterFx(D)})});return this},ghost:function(E,C){C=x(C);var G=this,D=G.dom,J=D.style,H={opacity:{to:0},points:{}},K=H.points,B,I,F;E=E||"b";G.queueFx(C,function(){B=p(D).getFxRestore();I=p(D).getWidth();F=p(D).getHeight();function L(){C.useDisplay?p(D).setDisplayed(t):p(D).hide();p(D).clearOpacity();p(D).setPositioning(B.pos);J.width=B.width;J.height=B.height;p(D).afterFx(C)}K.by=p(D).switchStatements(E.toLowerCase(),function(N,M){return[N,M]},{t:[0,-F],l:[-I,0],r:[I,0],b:[0,F],tl:[-I,-F],bl:[-I,F],br:[I,F],tr:[I,-F]});arguments.callee.anim=p(D).fxanim(H,C,e,0.5,r,L)});return G},syncFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:k,stopFx:t});return B},sequenceFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:t,stopFx:t});return B},nextFx:function(){var B=c(this.dom.id)[0];if(B){B.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(B){var C=this,E=C.dom.id;if(C.hasActiveFx()){var D=c(E)[0];if(D&&D.anim){if(D.anim.isAnimated){b(E,[D]);D.anim.stop(B!==undefined?B:k)}else{b(E,[])}}}return C},beforeFx:function(B){if(this.hasActiveFx()&&!B.concurrent){if(B.stopFx){this.stopFx();return k}return t}return k},hasFxBlock:function(){var B=c(this.dom.id);return B&&B[0]&&B[0].block},queueFx:function(E,B){var C=p(this.dom);if(!C.hasFxBlock()){Ext.applyIf(E,C.fxDefaults);if(!E.concurrent){var D=C.beforeFx(E);B.block=E.block;c(C.dom.id).push(B);if(D){C.nextFx()}}else{B.call(C)}}return C},fxWrap:function(H,F,D){var E=this.dom,C,B;if(!F.wrap||!(C=Ext.getDom(F.wrap))){if(F.fixPosition){B=p(E).getXY()}var G=document.createElement("div");G.style.visibility=D;C=E.parentNode.insertBefore(G,E);p(C).setPositioning(H);if(p(C).isStyle(o,"static")){p(C).position("relative")}p(E).clearPositioning("auto");p(C).clip();C.appendChild(E);if(B){p(C).setXY(B)}}return C},fxUnwrap:function(C,F,E){var D=this.dom;p(D).clearPositioning();p(D).setPositioning(F);if(!E.wrap){var B=p(C).dom.parentNode;B.insertBefore(D,C);p(C).remove()}},getFxRestore:function(){var B=this.dom.style;return{pos:this.getPositioning(),width:B.width,height:B.height}},afterFx:function(C){var B=this.dom,D=B.id;if(C.afterStyle){p(B).setStyle(C.afterStyle)}if(C.afterCls){p(B).addClass(C.afterCls)}if(C.remove==k){p(B).remove()}if(C.callback){C.callback.call(C.scope,p(B))}if(!C.concurrent){c(D).shift();p(B).nextFx()}},fxanim:function(E,F,C,G,D,B){C=C||"run";F=F||{};var H=Ext.lib.Anim[C](this.dom,E,(F.duration||G)||0.35,(F.easing||D)||r,B,this);F.anim=H;return H}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getElement:function(a){var b=this.el;b.dom=a;b.id=a.id;return b},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(d,b){var e=this,g=e.elements;if(!d){return this}if(typeof d=="string"){d=Ext.Element.selectorFunction(d,b)}else{if(d.isComposite){d=d.elements}else{if(!Ext.isIterable(d)){d=[d]}}}for(var c=0,a=d.length;c-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;Ext.CompositeElementLite.importElementMethods=function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(c in b){if(typeof b[c]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}};Ext.CompositeElementLite.importElementMethods();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;Ext.data.Connection=function(j){Ext.apply(this,j);this.addEvents(b,e,d);Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(n){var s=this;if(s.fireEvent(b,s,n)){if(n.el){if(!Ext.isEmpty(n.indicatorText)){s.indicatorText='
'+n.indicatorText+"
"}if(s.indicatorText){Ext.getDom(n.el).innerHTML=s.indicatorText}n.success=(Ext.isFunction(n.success)?n.success:function(){}).createInterceptor(function(o){Ext.getDom(n.el).innerHTML=o.responseText})}var l=n.params,k=n.url||s.url,j,q={success:s.handleResponse,failure:s.handleFailure,scope:s,argument:{options:n},timeout:Ext.num(n.timeout,s.timeout)},m,t;if(Ext.isFunction(l)){l=l.call(n.scope||g,n)}l=Ext.urlEncode(s.extraParams,Ext.isObject(l)?Ext.urlEncode(l):l);if(Ext.isFunction(k)){k=k.call(n.scope||g,n)}if((m=Ext.getDom(n.form))){k=k||m.action;if(n.isUpload||(/multipart\/form-data/i.test(m.getAttribute("enctype")))){return s.doFormUpload.call(s,n,l,k)}t=Ext.lib.Ajax.serializeForm(m);l=l?(l+"&"+t):t}j=n.method||s.method||((l||n.xmlData||n.jsonData)?i:a);if(j===a&&(s.disableCaching&&n.disableCaching!==false)||n.disableCaching===true){var r=n.disableCachingParam||s.disableCachingParam;k=Ext.urlAppend(k,r+"="+(new Date().getTime()))}n.headers=Ext.applyIf(n.headers||{},s.defaultHeaders||{});if(n.autoAbort===true||s.autoAbort){s.abort()}if((j==a||n.xmlData||n.jsonData)&&l){k=Ext.urlAppend(k,l);l=""}return(s.transId=Ext.lib.Ajax.request(j,k,q,l,n))}else{return n.callback?n.callback.apply(n.scope,[n,h,h]):null}},isLoading:function(j){return j?Ext.lib.Ajax.isCallInProgress(j):!!this.transId},abort:function(j){if(j||this.isLoading()){Ext.lib.Ajax.abort(j||this.transId)}},handleResponse:function(j){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(e,this,j,k);if(k.success){k.success.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,true,j)}},handleFailure:function(j,l){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(d,this,j,k,l);if(k.failure){k.failure.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,false,j)}},doFormUpload:function(q,j,k){var l=Ext.id(),v=document,r=v.createElement("iframe"),m=Ext.getDom(q.form),u=[],t,p="multipart/form-data",n={target:m.target,method:m.method,encoding:m.encoding,enctype:m.enctype,action:m.action};Ext.fly(r).set({id:l,name:l,cls:"x-hidden",src:Ext.SSL_SECURE_URL});v.body.appendChild(r);if(Ext.isIE){document.frames[l].name=l}Ext.fly(m).set({target:l,method:i,enctype:p,encoding:p,action:k||n.action});Ext.iterate(Ext.urlDecode(j,false),function(w,o){t=v.createElement("input");Ext.fly(t).set({type:"hidden",value:o,name:w});m.appendChild(t);u.push(t)});function s(){var x=this,w={responseText:"",responseXML:null,argument:q.argument},A,z;try{A=r.contentWindow.document||r.contentDocument||g.frames[l].document;if(A){if(A.body){if(/textarea/i.test((z=A.body.firstChild||{}).tagName)){w.responseText=z.value}else{w.responseText=A.body.innerHTML}}w.responseXML=A.XMLDocument||A}}catch(y){}Ext.EventManager.removeListener(r,c,s,x);x.fireEvent(e,x,w,q);function o(D,C,B){if(Ext.isFunction(D)){D.apply(C,B)}}o(q.success,q.scope,[w,q]);o(q.callback,q.scope,[q,true,w]);if(!x.debugUploads){setTimeout(function(){Ext.removeNode(r)},100)}}Ext.EventManager.on(r,c,s,this);m.submit();Ext.fly(m).set(n);Ext.each(u,function(o){Ext.removeNode(o)})}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=function(){var useNative=null;return function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative}}(),pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return json?eval("("+json+")"):""},doEncode=function(o){if(!Ext.isDefined(o)||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Ext.isDate(o)){return Ext.util.JSON.encodeDate(o)}else{if(Ext.isString(o)){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!o.getElementsByTagName){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(doEncode(i),":",v===null?"null":doEncode(v));b=true}}}}a.push("}");return a.join("")}}}}}}},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i
';e.body.appendChild(g);d=g.lastChild;if((c=e.defaultView)){if(c.getComputedStyle(g.firstChild.firstChild,null).marginRight!="0px"){b.correctRightMargin=false}if(c.getComputedStyle(d,null).backgroundColor!="transparent"){b.correctTransparentColor=false}}b.cssFloat=!!d.style.cssFloat;e.body.removeChild(g)};if(Ext.isReady){a()}else{Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,c=/(dbl)?click/,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},d=Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2};Ext.EventObjectImpl=function(g){if(g){this.setEvent(g.browserEvent||g)}};Ext.EventObjectImpl.prototype={setEvent:function(h){var g=this;if(h==g||(h&&h.browserEvent)){return h}g.browserEvent=h;if(h){g.button=h.button?d[h.button]:(h.which?h.which-1:-1);if(c.test(h.type)&&g.button==-1){g.button=0}g.type=h.type;g.shiftKey=h.shiftKey;g.ctrlKey=h.ctrlKey||h.metaKey||false;g.altKey=h.altKey;g.keyCode=h.keyCode;g.charCode=h.charCode;g.target=b.getTarget(h);g.xy=b.getXY(h)}else{g.button=-1;g.shiftKey=false;g.ctrlKey=false;g.altKey=false;g.keyCode=0;g.charCode=0;g.target=null;g.xy=[0,0]}return g},stopEvent:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopEvent(e.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopPropagation(e.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(e){return Ext.isSafari?(a[e]||e):e},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(g,h,e){return g?Ext.fly(this.target).findParent(g,h,e):(e?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var g=this.browserEvent;var h=0;if(g.wheelDelta){h=g.wheelDelta/120}else{if(g.detail){h=-g.detail/3}}return h},within:function(h,i,e){if(h){var g=this[i?"getRelatedTarget":"getTarget"]();return g&&((e?(g==Ext.getDom(h)):false)||Ext.fly(h).contains(g))}return false}};return new Ext.EventObjectImpl()}();Ext.Loader=Ext.apply({},{load:function(j,i,k,c){var k=k||this,g=document.getElementsByTagName("head")[0],b=document.createDocumentFragment(),a=j.length,h=0,e=this;var l=function(m){g.appendChild(e.buildScriptTag(j[m],d))};var d=function(){h++;if(a==h&&typeof i=="function"){i.call(k)}else{if(c===true){l(h)}}};if(c===true){l.call(this,0)}else{Ext.each(j,function(n,m){b.appendChild(this.buildScriptTag(n,d))},this);g.appendChild(b)}},buildScriptTag:function(b,c){var a=document.createElement("script");a.type="text/javascript";a.src=b;if(a.readyState){a.onreadystatechange=function(){if(a.readyState=="loaded"||a.readyState=="complete"){a.onreadystatechange=null;c()}}}else{a.onload=c}return a}});Ext.ns("Ext.grid","Ext.list","Ext.dd","Ext.tree","Ext.form","Ext.menu","Ext.state","Ext.layout.boxOverflow","Ext.app","Ext.ux","Ext.chart","Ext.direct","Ext.slider");Ext.apply(Ext,function(){var c=Ext,a=0,b=null;return{emptyFn:function(){},BLANK_IMAGE_URL:Ext.isIE6||Ext.isIE7||Ext.isAir?"http://www.extjs.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",extendX:function(d,e){return Ext.extend(d,e(d.prototype))},getDoc:function(){return Ext.get(document)},num:function(e,d){e=Number(Ext.isEmpty(e)||Ext.isArray(e)||typeof e=="boolean"||(typeof e=="string"&&e.trim().length==0)?NaN:e);return isNaN(e)?d:e},value:function(g,d,e){return Ext.isEmpty(g,e)?d:g},escapeRe:function(d){return d.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},sequence:function(h,d,g,e){h[d]=h[d].createSequence(g,e)},addBehaviors:function(i){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(i)})}else{var e={},h,d,g;for(d in i){if((h=d.split("@"))[1]){g=h[0];if(!e[g]){e[g]=Ext.select(g)}e[g].on(h[1],i[d])}}e=null}},getScrollBarWidth:function(g){if(!Ext.isReady){return 0}if(g===true||b===null){var i=Ext.getBody().createChild('
'),h=i.child("div",true);var e=h.offsetWidth;i.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=h.offsetWidth;i.remove();b=e-d+2}return b},combine:function(){var g=arguments,e=g.length,j=[];for(var h=0;hh?1:-1};Ext.each(d,function(h){g=e(g,h)==1?g:h});return g},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(g){e+=g});return e},partition:function(d,e){var g=[[],[]];Ext.each(d,function(j,k,h){g[(e&&e(j,k,h))||(!e&&j)?0:1].push(j)});return g},invoke:function(d,e){var h=[],g=Array.prototype.slice.call(arguments,2);Ext.each(d,function(j,k){if(j&&typeof j[e]=="function"){h.push(j[e].apply(j,g))}else{h.push(undefined)}});return h},pluck:function(d,g){var e=[];Ext.each(d,function(h){e.push(h[g])});return e},zip:function(){var n=Ext.partition(arguments,function(i){return typeof i!="function"}),k=n[0],m=n[1][0],d=Ext.max(Ext.pluck(k,"length")),h=[];for(var l=0;l=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom)},getArea:function(){var a=this;return((a.bottom-a.top)*(a.right-a.left))},intersect:function(h){var g=this,d=Math.max(g.top,h.top),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.left,h.left);if(a>=d&&e>=c){return new Ext.lib.Region(d,e,a,c)}},union:function(h){var g=this,d=Math.min(g.top,h.top),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.left,h.left);return new Ext.lib.Region(d,e,a,c)},constrainTo:function(b){var a=this;a.top=a.top.constrain(b.top,b.bottom);a.bottom=a.bottom.constrain(b.top,b.bottom);a.left=a.left.constrain(b.left,b.right);a.right=a.right.constrain(b.left,b.right);return a},adjust:function(d,c,a,g){var e=this;e.top+=d;e.left+=c;e.right+=g;e.bottom+=a;return e}};Ext.lib.Region.getRegion=function(e){var h=Ext.lib.Dom.getXY(e),d=h[1],g=h[0]+e.offsetWidth,a=h[1]+e.offsetHeight,c=h[0];return new Ext.lib.Region(d,g,a,c)};Ext.lib.Point=function(a,c){if(Ext.isArray(a)){c=a[1];a=a[0]}var b=this;b.x=b.right=b.left=b[0]=a;b.y=b.top=b.bottom=b[1]=c};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.apply(Ext.DomHelper,function(){var e,a="afterbegin",h="afterend",i="beforebegin",d="beforeend",b=/tag|children|cn|html$/i;function g(m,p,n,q,l,j){m=Ext.getDom(m);var k;if(e.useDom){k=c(p,null);if(j){m.appendChild(k)}else{(l=="firstChild"?m:m.parentNode).insertBefore(k,m[l]||m)}}else{k=Ext.DomHelper.insertHtml(q,m,Ext.DomHelper.createHtml(p))}return n?Ext.get(k,true):k}function c(j,r){var k,u=document,p,s,m,t;if(Ext.isArray(j)){k=u.createDocumentFragment();for(var q=0,n=j.length;q0){return setTimeout(d,c)}d();return 0},createSequence:function(c,b,a){if(!Ext.isFunction(b)){return c}else{return function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}}};Ext.defer=Ext.util.Functions.defer;Ext.createInterceptor=Ext.util.Functions.createInterceptor;Ext.createSequence=Ext.util.Functions.createSequence;Ext.createDelegate=Ext.util.Functions.createDelegate;Ext.apply(Ext.util.Observable.prototype,function(){function a(j){var i=(this.methodEvents=this.methodEvents||{})[j],d,c,g,h=this;if(!i){this.methodEvents[j]=i={};i.originalFn=this[j];i.methodName=j;i.before=[];i.after=[];var b=function(l,k,e){if((c=l.apply(k||h,e))!==undefined){if(typeof c=="object"){if(c.returnValue!==undefined){d=c.returnValue}else{d=c}g=!!c.cancel}else{if(c===false){g=true}else{d=c}}}};this[j]=function(){var l=Array.prototype.slice.call(arguments,0),k;d=c=undefined;g=false;for(var m=0,e=i.before.length;m=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera);return{_unload:function(){Ext.EventManager.un(window,"resize",this.fireWindowResize,this);c.call(Ext.EventManager)},doResizeEvent:function(){var m=a.getViewHeight(),l=a.getViewWidth();if(h!=m||i!=l){d.fire(i=l,h=m)}},onWindowResize:function(n,m,l){if(!d){d=new Ext.util.Event();k=new Ext.util.DelayedTask(this.doResizeEvent);Ext.EventManager.on(window,"resize",this.fireWindowResize,this)}d.addListener(n,m,l)},fireWindowResize:function(){if(d){k.delay(100)}},onTextResize:function(o,n,l){if(!g){g=new Ext.util.Event();var m=new Ext.Element(document.createElement("div"));m.dom.className="x-text-resize";m.dom.innerHTML="X";m.appendTo(document.body);b=m.dom.offsetHeight;setInterval(function(){if(m.dom.offsetHeight!=b){g.fire(b,b=m.dom.offsetHeight)}},this.textResizeInterval)}g.addListener(o,n,l)},removeResizeListener:function(m,l){if(d){d.removeListener(m,l)}},fireResize:function(){if(d){d.fire(a.getViewWidth(),a.getViewHeight())}},textResizeInterval:50,ieDeferSrc:false,getKeyEvent:function(){return e?"keydown":"keypress"},useKeydown:e}}());Ext.EventManager.on=Ext.EventManager.addListener;Ext.apply(Ext.EventObjectImpl.prototype,{BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1])},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)}});Ext.Element.addMethods({swallowEvent:function(a,b){var d=this;function c(g){g.stopPropagation();if(b){g.preventDefault()}}if(Ext.isArray(a)){Ext.each(a,function(g){d.on(g,c)});return d}d.on(a,c);return d},relayEvent:function(a,b){this.on(a,function(c){b.fireEvent(a,c)})},clean:function(b){var d=this,e=d.dom,g=e.firstChild,c=-1;if(Ext.Element.data(e,"isCleaned")&&b!==true){return d}while(g){var a=g.nextSibling;if(g.nodeType==3&&!(/\S/.test(g.nodeValue))){e.removeChild(g)}else{g.nodeIndex=++c}g=a}Ext.Element.data(e,"isCleaned",true);return d},load:function(){var a=this.getUpdater();a.update.apply(a,arguments);return this},getUpdater:function(){return this.updateManager||(this.updateManager=new Ext.Updater(this))},update:function(html,loadScripts,callback){if(!this.dom){return this}html=html||"";if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback()}return this}var id=Ext.id(),dom=this.dom;html+='';Ext.lib.Event.onAvailable(id,function(){var DOC=document,hd=DOC.getElementsByTagName("head")[0],re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,match,attrs,srcMatch,typeMatch,el,s;while((match=re.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}el=DOC.getElementById(id);if(el){Ext.removeNode(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(a,e,d){a=(typeof a=="object")?a:{tag:"div",cls:a};var c=this,b=e?Ext.DomHelper.append(e,a,true):Ext.DomHelper.insertBefore(c.dom,a,true);if(d&&c.setBox&&c.getBox){b.setBox(c.getBox())}return b}});Ext.Element.prototype.getUpdateManager=Ext.Element.prototype.getUpdater;Ext.Element.addMethods({getAnchorXY:function(e,l,q){e=(e||"tl").toLowerCase();q=q||{};var k=this,b=k.dom==document.body||k.dom==document,n=q.width||b?Ext.lib.Dom.getViewWidth():k.getWidth(),i=q.height||b?Ext.lib.Dom.getViewHeight():k.getHeight(),p,a=Math.round,c=k.getXY(),m=k.getScroll(),j=b?m.left:!l?c[0]:0,g=b?m.top:!l?c[1]:0,d={c:[a(n*0.5),a(i*0.5)],t:[a(n*0.5),0],l:[0,a(i*0.5)],r:[n,a(i*0.5)],b:[a(n*0.5),i],tl:[0,0],bl:[0,i],br:[n,i],tr:[n,0]};p=d[e];return[p[0]+j,p[1]+g]},anchorTo:function(b,h,c,a,k,l){var i=this,e=i.dom,j=!Ext.isEmpty(k),d=function(){Ext.fly(e).alignTo(b,h,c,a);Ext.callback(l,Ext.fly(e))},g=this.getAnchor();this.removeAnchor();Ext.apply(g,{fn:d,scroll:j});Ext.EventManager.onWindowResize(d,null);if(j){Ext.EventManager.on(window,"scroll",d,null,{buffer:!isNaN(k)?k:50})}d.call(i);return i},removeAnchor:function(){var b=this,a=this.getAnchor();if(a&&a.fn){Ext.EventManager.removeResizeListener(a.fn);if(a.scroll){Ext.EventManager.un(window,"scroll",a.fn)}delete a.fn}return b},getAnchor:function(){var b=Ext.Element.data,c=this.dom;if(!c){return}var a=b(c,"_anchor");if(!a){a=b(c,"_anchor",{})}return a},getAlignToXY:function(g,A,B){g=Ext.get(g);if(!g||!g.dom){throw"Element.alignToXY with an element that doesn't exist"}B=B||[0,0];A=(!A||A=="?"?"tl-bl?":(!(/-/).test(A)&&A!==""?"tl-"+A:A||"tl-bl")).toLowerCase();var K=this,H=K.dom,M,L,n,l,s,F,v,t=Ext.lib.Dom.getViewWidth()-10,G=Ext.lib.Dom.getViewHeight()-10,b,i,j,k,u,z,N=document,J=N.documentElement,q=N.body,E=(J.scrollLeft||q.scrollLeft||0)+5,D=(J.scrollTop||q.scrollTop||0)+5,I=false,e="",a="",C=A.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!C){throw"Element.alignTo with an invalid alignment "+A}e=C[1];a=C[2];I=!!C[3];M=K.getAnchorXY(e,true);L=g.getAnchorXY(a,false);n=L[0]-M[0]+B[0];l=L[1]-M[1]+B[1];if(I){s=K.getWidth();F=K.getHeight();v=g.getRegion();b=e.charAt(0);i=e.charAt(e.length-1);j=a.charAt(0);k=a.charAt(a.length-1);u=((b=="t"&&j=="b")||(b=="b"&&j=="t"));z=((i=="r"&&k=="l")||(i=="l"&&k=="r"));if(n+s>t+E){n=z?v.left-s:t+E-s}if(nG+D){l=u?v.top-F:G+D-F}if(lB){p=B-q;m=true}if((o+C)>g){o=g-C;m=true}if(p"+String.format(Ext.Element.boxMarkup,c)+"
"));Ext.DomQuery.selectNode("."+c+"-mc",d.dom).appendChild(this.dom);return d},setSize:function(e,c,d){var g=this;if(typeof e=="object"){c=e.height;e=e.width}e=g.adjustWidth(e);c=g.adjustHeight(c);if(!d||!g.anim){g.dom.style.width=g.addUnits(e);g.dom.style.height=g.addUnits(c)}else{g.anim({width:{to:e},height:{to:c}},g.preanim(arguments,2))}return g},getComputedHeight:function(){var d=this,c=Math.max(d.dom.offsetHeight,d.dom.clientHeight);if(!c){c=parseFloat(d.getStyle("height"))||0;if(!d.isBorderBox()){c+=d.getFrameWidth("tb")}}return c},getComputedWidth:function(){var c=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!c){c=parseFloat(this.getStyle("width"))||0;if(!this.isBorderBox()){c+=this.getFrameWidth("lr")}}return c},getFrameWidth:function(d,c){return c&&this.isBorderBox()?0:(this.getPadding(d)+this.getBorderWidth(d))},addClassOnOver:function(c){this.hover(function(){Ext.fly(this,a).addClass(c)},function(){Ext.fly(this,a).removeClass(c)});return this},addClassOnFocus:function(c){this.on("focus",function(){Ext.fly(this,a).addClass(c)},this.dom);this.on("blur",function(){Ext.fly(this,a).removeClass(c)},this.dom);return this},addClassOnClick:function(c){var d=this.dom;this.on("mousedown",function(){Ext.fly(d,a).addClass(c);var g=Ext.getDoc(),e=function(){Ext.fly(d,a).removeClass(c);g.removeListener("mouseup",e)};g.on("mouseup",e)});return this},getViewSize:function(){var g=document,h=this.dom,c=(h==g||h==g.body);if(c){var e=Ext.lib.Dom;return{width:e.getViewWidth(),height:e.getViewHeight()}}else{return{width:h.clientWidth,height:h.clientHeight}}},getStyleSize:function(){var j=this,c,i,l=document,m=this.dom,e=(m==l||m==l.body),g=m.style;if(e){var k=Ext.lib.Dom;return{width:k.getViewWidth(),height:k.getViewHeight()}}if(g.width&&g.width!="auto"){c=parseFloat(g.width);if(j.isBorderBox()){c-=j.getFrameWidth("lr")}}if(g.height&&g.height!="auto"){i=parseFloat(g.height);if(j.isBorderBox()){i-=j.getFrameWidth("tb")}}return{width:c||j.getWidth(true),height:i||j.getHeight(true)}},getSize:function(c){return{width:this.getWidth(c),height:this.getHeight(c)}},repaint:function(){var c=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.fly(c).removeClass("x-repaint")},1);return this},unselectable:function(){this.dom.unselectable="on";return this.swallowEvent("selectstart",true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable")},getMargins:function(d){var e=this,c,g={t:"top",l:"left",r:"right",b:"bottom"},h={};if(!d){for(c in e.margins){h[g[c]]=parseFloat(e.getStyle(e.margins[c]))||0}return h}else{return e.addStyles.call(e,d,e.margins)}}}}());Ext.Element.addMethods({setBox:function(e,g,b){var d=this,a=e.width,c=e.height;if((g&&!d.autoBoxAdjust)&&!d.isBorderBox()){a-=(d.getBorderWidth("lr")+d.getPadding("lr"));c-=(d.getBorderWidth("tb")+d.getPadding("tb"))}d.setBounds(e.x,e.y,a,c,d.animTest.call(d,arguments,b,2));return d},getBox:function(j,p){var m=this,v,e,o,d=m.getBorderWidth,q=m.getPadding,g,a,u,n;if(!p){v=m.getXY()}else{e=parseInt(m.getStyle("left"),10)||0;o=parseInt(m.getStyle("top"),10)||0;v=[e,o]}var c=m.dom,s=c.offsetWidth,i=c.offsetHeight,k;if(!j){k={x:v[0],y:v[1],0:v[0],1:v[1],width:s,height:i}}else{g=d.call(m,"l")+q.call(m,"l");a=d.call(m,"r")+q.call(m,"r");u=d.call(m,"t")+q.call(m,"t");n=d.call(m,"b")+q.call(m,"b");k={x:v[0]+g,y:v[1]+u,0:v[0]+g,1:v[1]+u,width:s-(g+a),height:i-(u+n)}}k.right=k.x+k.width;k.bottom=k.y+k.height;return k},move:function(j,b,c){var g=this,m=g.getXY(),k=m[0],i=m[1],d=[k-b,i],l=[k+b,i],h=[k,i-b],a=[k,i+b],e={l:d,left:d,r:l,right:l,t:h,top:h,up:h,b:a,bottom:a,down:a};j=j.toLowerCase();g.moveTo(e[j][0],e[j][1],g.animTest.call(g,arguments,c,2))},setLeftTop:function(d,c){var b=this,a=b.dom.style;a.left=b.addUnits(d);a.top=b.addUnits(c);return b},getRegion:function(){return Ext.lib.Dom.getRegion(this.dom)},setBounds:function(b,g,d,a,c){var e=this;if(!c||!e.anim){e.setSize(d,a);e.setLocation(b,g)}else{e.anim({points:{to:[b,g]},width:{to:e.adjustWidth(d)},height:{to:e.adjustHeight(a)}},e.preanim(arguments,4),"motion")}return e},setRegion:function(b,a){return this.setBounds(b.left,b.top,b.right-b.left,b.bottom-b.top,this.animTest.call(this,arguments,a,1))}});Ext.Element.addMethods({scrollTo:function(b,d,a){var e=/top/i.test(b),c=this,g=c.dom,h;if(!a||!c.anim){h="scroll"+(e?"Top":"Left");g[h]=d}else{h="scroll"+(e?"Left":"Top");c.anim({scroll:{to:e?[g[h],d]:[d,g[h]]}},c.preanim(arguments,2),"scroll")}return c},scrollIntoView:function(e,i){var p=Ext.getDom(e)||Ext.getBody().dom,h=this.dom,g=this.getOffsetsTo(p),k=g[0]+p.scrollLeft,u=g[1]+p.scrollTop,q=u+h.offsetHeight,d=k+h.offsetWidth,a=p.clientHeight,m=parseInt(p.scrollTop,10),s=parseInt(p.scrollLeft,10),j=m+a,n=s+p.clientWidth;if(h.offsetHeight>a||uj){p.scrollTop=q-a}}p.scrollTop=p.scrollTop;if(i!==false){if(h.offsetWidth>p.clientWidth||kn){p.scrollLeft=d-p.clientWidth}}p.scrollLeft=p.scrollLeft}return this},scrollChildIntoView:function(b,a){Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)},scroll:function(m,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,p=e.scrollTop,n=e.scrollWidth,k=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,o,j={l:Math.min(g+b,n-i),r:o=Math.max(g-b,0),t:Math.max(p-b,0),b:Math.min(p+b,k-a)};j.d=j.b;j.u=j.t;m=m.substr(0,1);if((o=j[m])>-1){c=true;this.scrollTo(m=="l"||m=="r"?"left":"top",o,this.preanim(arguments,2))}return c}});Ext.Element.addMethods(function(){var d="visibility",b="display",a="hidden",h="none",c="x-masked",g="x-masked-relative",e=Ext.Element.data;return{isVisible:function(i){var j=!this.isStyle(d,a)&&!this.isStyle(b,h),k=this.dom.parentNode;if(i!==true||!j){return j}while(k&&!(/^body/i.test(k.tagName))){if(!Ext.fly(k,"_isVisible").isVisible()){return false}k=k.parentNode}return true},isDisplayed:function(){return !this.isStyle(b,h)},enableDisplayMode:function(i){this.setVisibilityMode(Ext.Element.DISPLAY);if(!Ext.isEmpty(i)){e(this.dom,"originalDisplay",i)}return this},mask:function(j,n){var p=this,l=p.dom,o=Ext.DomHelper,m="ext-el-mask-msg",i,q;if(!/^body/i.test(l.tagName)&&p.getStyle("position")=="static"){p.addClass(g)}if(i=e(l,"maskMsg")){i.remove()}if(i=e(l,"mask")){i.remove()}q=o.append(l,{cls:"ext-el-mask"},true);e(l,"mask",q);p.addClass(c);q.setDisplayed(true);if(typeof j=="string"){var k=o.append(l,{cls:m,cn:{tag:"div"}},true);e(l,"maskMsg",k);k.dom.className=n?m+" "+n:m;k.dom.firstChild.innerHTML=j;k.setDisplayed(true);k.center(p)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&p.getStyle("height")=="auto"){q.setSize(undefined,p.getHeight())}return q},unmask:function(){var k=this,l=k.dom,i=e(l,"mask"),j=e(l,"maskMsg");if(i){if(j){j.remove();e(l,"maskMsg",undefined)}i.remove();e(l,"mask",undefined);k.removeClass([c,g])}},isMasked:function(){var i=e(this.dom,"mask");return i&&i.isVisible()},createShim:function(){var i=document.createElement("iframe"),j;i.frameBorder="0";i.className="ext-shim";i.src=Ext.SSL_SECURE_URL;j=Ext.get(this.dom.parentNode.insertBefore(i,this.dom));j.autoBoxAdjust=false;return j}}}());Ext.Element.addMethods({addKeyListener:function(b,d,c){var a;if(typeof b!="object"||Ext.isArray(b)){a={key:b,fn:d,scope:c}}else{a={key:b.key,shift:b.shift,ctrl:b.ctrl,alt:b.alt,fn:d,scope:c}}return new Ext.KeyMap(this,a)},addKeyMap:function(a){return new Ext.KeyMap(this,a)}});Ext.CompositeElementLite.importElementMethods();Ext.apply(Ext.CompositeElementLite.prototype,{addElements:function(c,a){if(!c){return this}if(typeof c=="string"){c=Ext.Element.selectorFunction(c,a)}var b=this.elements;Ext.each(c,function(d){b.push(Ext.get(d))});return this},first:function(){return this.item(0)},last:function(){return this.item(this.getCount()-1)},contains:function(a){return this.indexOf(a)!=-1},removeElement:function(d,e){var c=this,a=this.elements,b;Ext.each(d,function(g){if((b=(a[g]||a[g=c.indexOf(g)]))){if(e){if(b.dom){b.remove()}else{Ext.removeNode(b)}}a.splice(g,1)}});return this}});Ext.CompositeElement=Ext.extend(Ext.CompositeElementLite,{constructor:function(b,a){this.elements=[];this.add(b,a)},getElement:function(a){return a},transformElement:function(a){return Ext.get(a)}});Ext.Element.select=function(a,d,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return(d===true)?new Ext.CompositeElement(c):new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;Ext.UpdateManager=Ext.Updater=Ext.extend(Ext.util.Observable,function(){var b="beforeupdate",d="update",c="failure";function a(h){var i=this;i.transaction=null;if(h.argument.form&&h.argument.reset){try{h.argument.form.reset()}catch(j){}}if(i.loadScripts){i.renderer.render(i.el,h,i,g.createDelegate(i,[h]))}else{i.renderer.render(i.el,h,i);g.call(i,h)}}function g(h,i,j){this.fireEvent(i||d,this.el,h);if(Ext.isFunction(h.argument.callback)){h.argument.callback.call(h.argument.scope,this.el,Ext.isEmpty(j)?true:false,h,h.argument.options)}}function e(h){g.call(this,h,c,!!(this.transaction=null))}return{constructor:function(i,h){var j=this;i=Ext.get(i);if(!h&&i.updateManager){return i.updateManager}j.el=i;j.defaultUrl=null;j.addEvents(b,d,c);Ext.apply(j,Ext.Updater.defaults);j.transaction=null;j.refreshDelegate=j.refresh.createDelegate(j);j.updateDelegate=j.update.createDelegate(j);j.formUpdateDelegate=(j.formUpdate||function(){}).createDelegate(j);j.renderer=j.renderer||j.getDefaultRenderer();Ext.Updater.superclass.constructor.call(j)},setRenderer:function(h){this.renderer=h},getRenderer:function(){return this.renderer},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer()},setDefaultUrl:function(h){this.defaultUrl=h},getEl:function(){return this.el},update:function(i,n,p,l){var k=this,h,j;if(k.fireEvent(b,k.el,i,n)!==false){if(Ext.isObject(i)){h=i;i=h.url;n=n||h.params;p=p||h.callback;l=l||h.discardUrl;j=h.scope;if(!Ext.isEmpty(h.nocache)){k.disableCaching=h.nocache}if(!Ext.isEmpty(h.text)){k.indicatorText='
'+h.text+"
"}if(!Ext.isEmpty(h.scripts)){k.loadScripts=h.scripts}if(!Ext.isEmpty(h.timeout)){k.timeout=h.timeout}}k.showLoading();if(!l){k.defaultUrl=i}if(Ext.isFunction(i)){i=i.call(k)}var m=Ext.apply({},{url:i,params:(Ext.isFunction(n)&&j)?n.createDelegate(j):n,success:a,failure:e,scope:k,callback:undefined,timeout:(k.timeout*1000),disableCaching:k.disableCaching,argument:{options:h,url:i,form:null,callback:p,scope:j||window,params:n}},h);k.transaction=Ext.Ajax.request(m)}},formUpdate:function(k,h,j,l){var i=this;if(i.fireEvent(b,i.el,k,h)!==false){if(Ext.isFunction(h)){h=h.call(i)}k=Ext.getDom(k);i.transaction=Ext.Ajax.request({form:k,url:h,success:a,failure:e,scope:i,timeout:(i.timeout*1000),argument:{url:h,form:k,callback:l,reset:j}});i.showLoading.defer(1,i)}},startAutoRefresh:function(i,j,l,m,h){var k=this;if(h){k.update(j||k.defaultUrl,l,m,true)}if(k.autoRefreshProcId){clearInterval(k.autoRefreshProcId)}k.autoRefreshProcId=setInterval(k.update.createDelegate(k,[j||k.defaultUrl,l,m,true]),i*1000)},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId}},isAutoRefreshing:function(){return !!this.autoRefreshProcId},showLoading:function(){if(this.showLoadIndicator){this.el.dom.innerHTML=this.indicatorText}},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){return this.transaction?Ext.Ajax.isLoading(this.transaction):false},refresh:function(h){if(this.defaultUrl){this.update(this.defaultUrl,null,h,true)}}}}());Ext.Updater.defaults={timeout:30,disableCaching:false,showLoadIndicator:true,indicatorText:'
Loading...
',loadScripts:false,sslBlankUrl:Ext.SSL_SECURE_URL};Ext.Updater.updateElement=function(d,c,e,b){var a=Ext.get(d).getUpdater();Ext.apply(a,b);a.update(c,e,b?b.callback:null)};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(c,a,b,d){c.update(a.responseText,b.loadScripts,d)}};(function(){Date.useStrict=false;function b(d){var c=Array.prototype.slice.call(arguments,1);return d.replace(/\{(\d+)\}/g,function(e,g){return c[g]})}Date.formatCodeToRegex=function(d,c){var e=Date.parseCodes[d];if(e){e=typeof e=="function"?e():e;Date.parseCodes[d]=e}return e?Ext.applyIf({c:e.c?b(e.c,c||"{0}"):e.c},e):{g:0,c:null,s:Ext.escapeRe(d)}};var a=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{"M$":function(d,c){var e=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/");var g=(d||"").match(e);return g?new Date(((g[1]||"")+g[2])*1):null}},parseRegexes:[],formatFunctions:{"M$":function(){return"\\/Date("+this.getTime()+")\\/"}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(c){return Date.monthNames[c].substring(0,3)},getShortDayName:function(c){return Date.dayNames[c].substring(0,3)},getMonthNumber:function(c){return Date.monthNumbers[c.substring(0,1).toUpperCase()+c.substring(1,3).toLowerCase()]},formatContainsHourInfo:(function(){var d=/(\\.)/g,c=/([gGhHisucUOPZ]|M\$)/;return function(e){return c.test(e.replace(d,""))}})(),formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var k="Y-m-dTH:i:sP",h=[],g=0,d=k.length;g= 0 && y >= 0){","v = new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y < 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");return function(m){var e=Date.parseRegexes.length,o=1,g=[],l=[],k=false,d="",j=0,h,n;for(;j Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:function(){return a("A")},A:{calcLast:true,g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)"},g:function(){return a("G")},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return a("H")},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var e=[],c=[a("Y",1),a("m",2),a("d",3),a("h",4),a("i",5),a("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a("P",8).c,"}else{",a("O",8).c,"}","}"].join("\n")}];for(var g=0,d=c.length;g0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+(a?":":"")+String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0")},getDayOfYear:function(){var b=0,e=this.clone(),a=this.getMonth(),c;for(c=0,e.setDate(1),e.setMonth(0);c28){a=Math.min(a,this.getFirstDateOfMonth().add("mo",c).getLastDateOfMonth().getDate())}e.setDate(a);e.setMonth(this.getMonth()+c);break;case Date.YEAR:e.setFullYear(this.getFullYear()+c);break}return e},between:function(c,a){var b=this.getTime();return c.getTime()<=b&&b<=a.getTime()}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){Ext.apply(Date.prototype,{_xMonth:Date.prototype.setMonth,_xDate:Date.prototype.setDate,setMonth:function(a){if(a<=-1){var d=Math.ceil(-a),c=Math.ceil(d/12),b=(d%12)?12-d%12:0;this.setFullYear(this.getFullYear()-c);return this._xMonth(b)}else{return this._xMonth(a)}},setDate:function(a){return this.setTime(this.getTime()-(this.getDate()-a)*86400000)}})}Ext.util.MixedCollection=function(b,a){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents("clear","add","replace","remove","sort");this.allowFunctions=b===true;if(a){this.getKey=a}Ext.util.MixedCollection.superclass.constructor.call(this)};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(b,c){if(arguments.length==1){c=arguments[0];b=this.getKey(c)}if(typeof b!="undefined"&&b!==null){var a=this.map[b];if(typeof a!="undefined"){return this.replace(b,c)}this.map[b]=c}this.length++;this.items.push(c);this.keys.push(b);this.fireEvent("add",this.length-1,c,b);return c},getKey:function(a){return a.id},replace:function(c,d){if(arguments.length==1){d=arguments[0];c=this.getKey(d)}var a=this.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return this.add(c,d)}var b=this.indexOfKey(c);this.items[b]=d;this.map[c]=d;this.fireEvent("replace",c,a,d);return d},addAll:function(e){if(arguments.length>1||Ext.isArray(e)){var b=arguments.length>1?arguments:e;for(var d=0,a=b.length;d=this.length){return this.add(b,c)}this.length++;this.items.splice(a,0,c);if(typeof b!="undefined"&&b!==null){this.map[b]=c}this.keys.splice(a,0,b);this.fireEvent("add",a,c,b);return c},remove:function(a){return this.removeAt(this.indexOf(a))},removeAt:function(a){if(a=0){this.length--;var c=this.items[a];this.items.splice(a,1);var b=this.keys[a];if(typeof b!="undefined"){delete this.map[b]}this.keys.splice(a,1);this.fireEvent("remove",c,b);return c}return false},removeKey:function(a){return this.removeAt(this.indexOfKey(a))},getCount:function(){return this.length},indexOf:function(a){return this.items.indexOf(a)},indexOfKey:function(a){return this.keys.indexOf(a)},item:function(b){var a=this.map[b],c=a!==undefined?a:(typeof b=="number")?this.items[b]:undefined;return typeof c!="function"||this.allowFunctions?c:null},itemAt:function(a){return this.items[a]},key:function(a){return this.map[a]},contains:function(a){return this.indexOf(a)!=-1},containsKey:function(a){return typeof this.map[a]!="undefined"},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear")},first:function(){return this.items[0]},last:function(){return this.items[this.length-1]},_sort:function(k,a,j){var d,e,b=String(a).toUpperCase()=="DESC"?-1:1,h=[],l=this.keys,g=this.items;j=j||function(i,c){return i-c};for(d=0,e=g.length;de?1:(g=a;c--){d[d.length]=b[c]}}return d},filter:function(c,b,d,a){if(Ext.isEmpty(b,false)){return this.clone()}b=this.createValueMatcher(b,d,a);return this.filterBy(function(e){return e&&b.test(e[c])})},filterBy:function(g,e){var h=new Ext.util.MixedCollection();h.getKey=this.getKey;var b=this.keys,d=this.items;for(var c=0,a=d.length;c]+>/gi,stripScriptsRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe=/\r?\n/g;return{ellipsis:function(value,len,word){if(value&&value.length>len){if(word){var vs=value.substr(0,len-2),index=Math.max(vs.lastIndexOf(" "),vs.lastIndexOf("."),vs.lastIndexOf("!"),vs.lastIndexOf("?"));if(index==-1||index<(len-15)){return value.substr(0,len-3)+"..."}else{return vs.substr(0,index)+"..."}}else{return value.substr(0,len-3)+"..."}}return value},undef:function(value){return value!==undefined?value:""},defaultValue:function(value,defaultValue){return value!==undefined&&value!==""?value:defaultValue},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<").replace(/"/g,'"').replace(/&/g,"&")},trim:function(value){return String(value).replace(trimRe,"")},substr:function(value,start,length){return String(value).substr(start,length)},lowercase:function(value){return String(value).toLowerCase()},uppercase:function(value){return String(value).toUpperCase()},capitalize:function(value){return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args)}else{return eval(fn).call(window,value)}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split("."),whole=ps[0],sub=ps[1]?"."+ps[1]:".00",r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,"$1,$2")}v=whole+sub;if(v.charAt(0)=="-"){return"-$"+v.substr(1)}return"$"+v},date:function(v,format){if(!v){return""}if(!Ext.isDate(v)){v=new Date(Date.parse(v))}return v.dateFormat(format||"m/d/Y")},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format)}},stripTags:function(v){return !v?v:String(v).replace(stripTagsRE,"")},stripScripts:function(v){return !v?v:String(v).replace(stripScriptsRe,"")},fileSize:function(size){if(size<1024){return size+" bytes"}else{if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB"}else{return(Math.round(((size*10)/1048576))/10)+" MB"}}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function("v","return v "+a+";")}return fns[a](v)}}(),round:function(value,precision){var result=Number(value);if(typeof precision=="number"){precision=Math.pow(10,precision);result=Math.round(value*precision)/precision}return result},number:function(v,format){if(!format){return v}v=Ext.num(v,NaN);if(isNaN(v)){return""}var comma=",",dec=".",i18n=false,neg=v<0;v=Math.abs(v);if(format.substr(format.length-2)=="/i"){format=format.substr(0,format.length-2);i18n=true;comma=".";dec=","}var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,""):format.replace(/[^\d\.]/g,"")).split(dec);if(1")}}}();Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var y=this,j=y.html,q=/]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,d=/^]*?for="(.*?)"/,v=/^]*?if="(.*?)"/,x=/^]*?exec="(.*?)"/,r,p=0,k=[],o="values",w="parent",l="xindex",n="xcount",e="return ",c="with(values){ ";j=["",j,""].join("");while((r=j.match(q))){var b=r[0].match(d),a=r[0].match(v),A=r[0].match(x),g=null,h=null,t=null,z=b&&b[1]?b[1]:"";if(a){g=a&&a[1]?a[1]:null;if(g){h=new Function(o,w,l,n,c+e+(Ext.util.Format.htmlDecode(g))+"; }")}}if(A){g=A&&A[1]?A[1]:null;if(g){t=new Function(o,w,l,n,c+(Ext.util.Format.htmlDecode(g))+"; }")}}if(z){switch(z){case".":z=new Function(o,w,c+e+o+"; }");break;case"..":z=new Function(o,w,c+e+w+"; }");break;default:z=new Function(o,w,c+e+z+"; }")}}k.push({id:p,target:z,exec:t,test:h,body:r[1]||""});j=j.replace(r[0],"{xtpl"+p+"}");++p}for(var u=k.length-1;u>=0;--u){y.compileTpl(k[u])}y.master=k[k.length-1];y.tpls=k};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w\-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,applySubTemplate:function(a,k,j,d,c){var h=this,g,m=h.tpls[a],l,b=[];if((m.test&&!m.test.call(h,k,j,d,c))||(m.exec&&m.exec.call(h,k,j,d,c))){return""}l=m.target?m.target.call(h,k,j):k;g=l.length;j=m.target?k:j;if(m.target&&Ext.isArray(l)){for(var e=0,g=l.length;e=0;--g){d[k[g].selectorText.toLowerCase()]=k[g]}}catch(i){}},getRules:function(h){if(d===null||h){d={};var k=c.styleSheets;for(var j=0,g=k.length;j=37&&a<=40){b.stopEvent()}},destroy:function(){this.disable()},enable:function(){if(this.disabled){if(Ext.isSafari2){this.el.on("keyup",this.stopKeyUp,this)}this.el.on(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=false}},disable:function(){if(!this.disabled){if(Ext.isSafari2){this.el.un("keyup",this.stopKeyUp,this)}this.el.un(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=true}},setDisabled:function(a){this[a?"disable":"enable"]()},isKeydown:function(){return this.forceKeyDown||Ext.EventManager.useKeydown}};Ext.KeyMap=function(c,b,a){this.el=Ext.get(c);this.eventName=a||"keydown";this.bindings=[];if(b){this.addBinding(b)}this.enable()};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(b){if(Ext.isArray(b)){Ext.each(b,function(j){this.addBinding(j)},this);return}var k=b.key,g=b.fn||b.handler,l=b.scope;if(b.stopEvent){this.stopEvent=b.stopEvent}if(typeof k=="string"){var h=[];var e=k.toUpperCase();for(var c=0,d=e.length;c2)?a[2]:null;var h=(i>3)?a[3]:"/";var d=(i>4)?a[4]:null;var g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=";var g=b.length;var a=document.cookie.length;var e=0;var c=0;while(e0){return this.ownerCt.items.itemAt(a-1)}}return null},getBubbleTarget:function(){return this.ownerCt}});Ext.reg("component",Ext.Component);Ext.Action=Ext.extend(Object,{constructor:function(a){this.initialConfig=a;this.itemId=a.itemId=(a.itemId||a.id||Ext.id());this.items=[]},isAction:true,setText:function(a){this.initialConfig.text=a;this.callEach("setText",[a])},getText:function(){return this.initialConfig.text},setIconClass:function(a){this.initialConfig.iconCls=a;this.callEach("setIconClass",[a])},getIconClass:function(){return this.initialConfig.iconCls},setDisabled:function(a){this.initialConfig.disabled=a;this.callEach("setDisabled",[a])},enable:function(){this.setDisabled(false)},disable:function(){this.setDisabled(true)},isDisabled:function(){return this.initialConfig.disabled},setHidden:function(a){this.initialConfig.hidden=a;this.callEach("setVisible",[!a])},show:function(){this.setHidden(false)},hide:function(){this.setHidden(true)},isHidden:function(){return this.initialConfig.hidden},setHandler:function(b,a){this.initialConfig.handler=b;this.initialConfig.scope=a;this.callEach("setHandler",[b,a])},each:function(b,a){Ext.each(this.items,b,a)},callEach:function(e,b){var d=this.items;for(var c=0,a=d.length;cj+o.left){k=j-l-c;g=true}if((i+e)>d+o.top){i=d-e-c;g=true}if(k=m){i=m-e-5}}n=[k,i];this.storeXY(n);a.setXY.call(this,n);this.sync()}}return this},getConstrainOffset:function(){return this.shadowOffset},isVisible:function(){return this.visible},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("")}else{if(this.lastXY){a.setXY.call(this,this.lastXY)}else{if(this.lastLT){a.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])}}}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false)}else{this.setLeftTop(-10000,-10000)}},setVisible:function(i,h,k,l,j){if(i){this.showAction()}if(h&&i){var g=function(){this.sync(true);if(l){l()}}.createDelegate(this);a.setVisible.call(this,true,true,k,g,j)}else{if(!i){this.hideUnders(true)}var g=l;if(h){g=function(){this.hideAction();if(l){l()}}.createDelegate(this)}a.setVisible.call(this,i,h,k,g,j);if(i){this.sync(true)}else{if(!h){this.hideAction()}}}return this},storeXY:function(c){delete this.lastLT;this.lastXY=c},storeLeftTop:function(d,c){delete this.lastXY;this.lastLT=[d,c]},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments)},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible())},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide()}},setLeft:function(c){this.storeLeftTop(c,this.getTop(true));a.setLeft.apply(this,arguments);this.sync();return this},setTop:function(c){this.storeLeftTop(this.getLeft(true),c);a.setTop.apply(this,arguments);this.sync();return this},setLeftTop:function(d,c){this.storeLeftTop(d,c);a.setLeftTop.apply(this,arguments);this.sync();return this},setXY:function(j,h,k,l,i){this.fixDisplay();this.beforeAction();this.storeXY(j);var g=this.createCB(l);a.setXY.call(this,j,h,k,g,i);if(!h){g()}return this},createCB:function(e){var d=this;return function(){d.constrainXY();d.sync(true);if(e){e()}}},setX:function(g,h,j,k,i){this.setXY([g,this.getY()],h,j,k,i);return this},setY:function(k,g,i,j,h){this.setXY([this.getX(),k],g,i,j,h);return this},setSize:function(j,k,i,m,n,l){this.beforeAction();var g=this.createCB(n);a.setSize.call(this,j,k,i,m,g,l);if(!i){g()}return this},setWidth:function(i,h,k,l,j){this.beforeAction();var g=this.createCB(l);a.setWidth.call(this,i,h,k,g,j);if(!h){g()}return this},setHeight:function(j,i,l,m,k){this.beforeAction();var g=this.createCB(m);a.setHeight.call(this,j,i,l,g,k);if(!i){g()}return this},setBounds:function(o,m,p,i,n,k,l,j){this.beforeAction();var g=this.createCB(l);if(!n){this.storeXY([o,m]);a.setXY.call(this,[o,m]);a.setSize.call(this,p,i,n,k,g,j);g()}else{a.setBounds.call(this,o,m,p,i,n,k,g,j)}return this},setZIndex:function(c){this.zindex=c;this.setStyle("z-index",c+2);if(this.shadow){this.shadow.setZIndex(c+1)}if(this.shim){this.shim.setStyle("z-index",c)}return this}})})();Ext.Shadow=function(d){Ext.apply(this,d);if(typeof this.mode!="string"){this.mode=this.defaultMode}var e=this.offset,c={h:0},b=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":c.w=0;c.l=c.t=e;c.t-=1;if(Ext.isIE){c.l-=this.offset+b;c.t-=this.offset+b;c.w-=b;c.h-=b;c.t+=1}break;case"sides":c.w=(e*2);c.l=-e;c.t=e-1;if(Ext.isIE){c.l-=(this.offset-b);c.t-=this.offset+b;c.l+=1;c.w-=(this.offset-b)*2;c.w-=b+1;c.h-=1}break;case"frame":c.w=c.h=(e*2);c.l=c.t=-e;c.t+=1;c.h-=2;if(Ext.isIE){c.l-=(this.offset-b);c.t-=(this.offset-b);c.l+=1;c.w-=(this.offset+b+1);c.h-=(this.offset+b);c.h+=1}break}this.adjusts=c};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(a){a=Ext.get(a);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=a.dom){this.el.insertBefore(a)}}this.el.setStyle("z-index",this.zIndex||parseInt(a.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"}this.realign(a.getLeft(true),a.getTop(true),a.getWidth(),a.getHeight());this.el.dom.style.display="block"},isVisible:function(){return this.el?true:false},realign:function(b,r,q,g){if(!this.el){return}var n=this.adjusts,k=this.el.dom,u=k.style,i=0,p=(q+n.w),e=(g+n.h),j=p+"px",o=e+"px",m,c;u.left=(b+n.l)+"px";u.top=(r+n.t)+"px";if(u.width!=j||u.height!=o){u.width=j;u.height=o;if(!Ext.isIE){m=k.childNodes;c=Math.max(0,(p-12))+"px";m[0].childNodes[1].style.width=c;m[1].childNodes[1].style.width=c;m[2].childNodes[1].style.width=c;m[1].style.height=Math.max(0,(e-12))+"px"}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el}},setZIndex:function(a){this.zIndex=a;if(this.el){this.el.setStyle("z-index",a)}}};Ext.Shadow.Pool=function(){var b=[],a=Ext.isIE?'
':'
';return{pull:function(){var c=b.shift();if(!c){c=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,a));c.autoBoxAdjust=false}return c},push:function(c){b.push(c)}}}();Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents("resize","move")},boxReady:false,deferHeight:false,setSize:function(b,d){if(typeof b=="object"){d=b.height;b=b.width}if(Ext.isDefined(b)&&Ext.isDefined(this.boxMinWidth)&&(bthis.boxMaxWidth)){b=this.boxMaxWidth}if(Ext.isDefined(d)&&Ext.isDefined(this.boxMaxHeight)&&(d>this.boxMaxHeight)){d=this.boxMaxHeight}if(!this.boxReady){this.width=b;this.height=d;return this}if(this.cacheSizes!==false&&this.lastSize&&this.lastSize.width==b&&this.lastSize.height==d){return this}this.lastSize={width:b,height:d};var c=this.adjustSize(b,d),g=c.width,a=c.height,e;if(g!==undefined||a!==undefined){e=this.getResizeEl();if(!this.deferHeight&&g!==undefined&&a!==undefined){e.setSize(g,a)}else{if(!this.deferHeight&&a!==undefined){e.setHeight(a)}else{if(g!==undefined){e.setWidth(g)}}}this.onResize(g,a,b,d);this.fireEvent("resize",this,g,a,b,d)}return this},setWidth:function(a){return this.setSize(a)},setHeight:function(a){return this.setSize(undefined,a)},getSize:function(){return this.getResizeEl().getSize()},getWidth:function(){return this.getResizeEl().getWidth()},getHeight:function(){return this.getResizeEl().getHeight()},getOuterSize:function(){var a=this.getResizeEl();return{width:a.getWidth()+a.getMargins("lr"),height:a.getHeight()+a.getMargins("tb")}},getPosition:function(a){var b=this.getPositionEl();if(a===true){return[b.getLeft(true),b.getTop(true)]}return this.xy||b.getXY()},getBox:function(a){var c=this.getPosition(a);var b=this.getSize();b.x=c[0];b.y=c[1];return b},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getResizeEl:function(){return this.resizeEl||this.el},setAutoScroll:function(a){if(this.rendered){this.getContentTarget().setOverflow(a?"auto":"")}this.autoScroll=a;return this},setPosition:function(a,g){if(a&&typeof a[1]=="number"){g=a[1];a=a[0]}this.x=a;this.y=g;if(!this.boxReady){return this}var b=this.adjustPosition(a,g);var e=b.x,d=b.y;var c=this.getPositionEl();if(e!==undefined||d!==undefined){if(e!==undefined&&d!==undefined){c.setLeftTop(e,d)}else{if(e!==undefined){c.setLeft(e)}else{if(d!==undefined){c.setTop(d)}}}this.onPosition(e,d);this.fireEvent("move",this,e,d)}return this},setPagePosition:function(a,c){if(a&&typeof a[1]=="number"){c=a[1];a=a[0]}this.pageX=a;this.pageY=c;if(!this.boxReady){return}if(a===undefined||c===undefined){return}var b=this.getPositionEl().translatePoints(a,c);this.setPosition(b.left,b.top);return this},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl)}if(this.positionEl){this.positionEl=Ext.get(this.positionEl)}this.boxReady=true;Ext.isDefined(this.autoScroll)&&this.setAutoScroll(this.autoScroll);this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y)}else{if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY)}}},syncSize:function(){delete this.lastSize;this.setSize(this.autoWidth?undefined:this.getResizeEl().getWidth(),this.autoHeight?undefined:this.getResizeEl().getHeight());return this},onResize:function(d,b,a,c){},onPosition:function(a,b){},adjustSize:function(a,b){if(this.autoWidth){a="auto"}if(this.autoHeight){b="auto"}return{width:a,height:b}},adjustPosition:function(a,b){return{x:a,y:b}}});Ext.reg("box",Ext.BoxComponent);Ext.Spacer=Ext.extend(Ext.BoxComponent,{autoEl:"div"});Ext.reg("spacer",Ext.Spacer);Ext.SplitBar=function(c,e,b,d,a){this.el=Ext.get(c,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(e,true);this.orientation=b||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!a){this.proxy=Ext.SplitBar.createProxy(this.orientation)}else{this.proxy=Ext.get(a).dom}this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=d||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h")}else{this.placement=d||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v")}this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this)};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(a,e){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:" "},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var c=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var d=c-this.activeMinSize;var b=Math.max(this.activeMaxSize-c,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?d:b,this.placement==Ext.SplitBar.LEFT?b:d,this.tickSize);this.dd.setYConstraint(0,0)}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?d:b,this.placement==Ext.SplitBar.TOP?b:d,this.tickSize)}this.dragSpecs.startSize=c;this.dragSpecs.startPoint=[a,e];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,a,e)},onEndProxyDrag:function(c){Ext.get(this.proxy).setDisplayed(false);var b=Ext.lib.Event.getXY(c);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay}var a;if(this.orientation==Ext.SplitBar.HORIZONTAL){a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?b[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-b[0])}else{a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?b[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-b[1])}a=Math.min(Math.max(a,this.activeMinSize),this.activeMaxSize);if(a!=this.dragSpecs.startSize){if(this.fireEvent("beforeapply",this,a)!==false){this.adapter.setElementSize(this,a);this.fireEvent("moved",this,a);this.fireEvent("resize",this,a)}}},getAdapter:function(){return this.adapter},setAdapter:function(a){this.adapter=a;this.adapter.init(this)},getMinimumSize:function(){return this.minSize},setMinimumSize:function(a){this.minSize=a},getMaximumSize:function(){return this.maxSize},setMaximumSize:function(a){this.maxSize=a},setCurrentSize:function(b){var a=this.animate;this.animate=false;this.adapter.setElementSize(this,b);this.animate=a},destroy:function(a){Ext.destroy(this.shim,Ext.get(this.proxy));this.dd.unreg();if(a){this.el.remove()}this.purgeListeners()}});Ext.SplitBar.createProxy=function(b){var c=new Ext.Element(document.createElement("div"));document.body.appendChild(c.dom);c.unselectable();var a="x-splitbar-proxy";c.addClass(a+" "+(b==Ext.SplitBar.HORIZONTAL?a+"-h":a+"-v"));return c.dom};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(a){},getElementSize:function(a){if(a.orientation==Ext.SplitBar.HORIZONTAL){return a.resizingEl.getWidth()}else{return a.resizingEl.getHeight()}},setElementSize:function(b,a,c){if(b.orientation==Ext.SplitBar.HORIZONTAL){if(!b.animate){b.resizingEl.setWidth(a);if(c){c(b,a)}}else{b.resizingEl.setWidth(a,true,0.1,c,"easeOut")}}else{if(!b.animate){b.resizingEl.setHeight(a);if(c){c(b,a)}}else{b.resizingEl.setHeight(a,true,0.1,c,"easeOut")}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(a){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(a)};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(a){this.basic.init(a)},getElementSize:function(a){return this.basic.getElementSize(a)},setElementSize:function(b,a,c){this.basic.setElementSize(b,a,this.moveSplitter.createDelegate(this,[b]))},moveSplitter:function(a){var b=Ext.SplitBar;switch(a.placement){case b.LEFT:a.el.setX(a.resizingEl.getRight());break;case b.RIGHT:a.el.setStyle("right",(this.container.getWidth()-a.resizingEl.getLeft())+"px");break;case b.TOP:a.el.setY(a.resizingEl.getBottom());break;case b.BOTTOM:a.el.setY(a.resizingEl.getTop()-a.el.getHeight());break}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;Ext.Container=Ext.extend(Ext.BoxComponent,{bufferResize:50,autoDestroy:true,forceLayout:false,defaultType:"panel",resizeEvent:"resize",bubbleEvents:["add","remove"],initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents("afterlayout","beforeadd","beforeremove","add","remove");var a=this.items;if(a){delete this.items;this.add(a)}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout()}},setLayout:function(a){if(this.layout&&this.layout!=a){this.layout.setContainer(null)}this.layout=a;this.initItems();a.setContainer(this)},afterRender:function(){Ext.Container.superclass.afterRender.call(this);if(!this.layout){this.layout="auto"}if(Ext.isObject(this.layout)&&!this.layout.layout){this.layoutConfig=this.layout;this.layout=this.layoutConfig.type}if(Ext.isString(this.layout)){this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig)}this.setLayout(this.layout);if(this.activeItem!==undefined&&this.layout.setActiveItem){var a=this.activeItem;delete this.activeItem;this.layout.setActiveItem(a)}if(!this.ownerCt){this.doLayout(false,true)}if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false])}},getLayoutTarget:function(){return this.el},getComponentId:function(a){return a.getItemId()},add:function(b){this.initItems();var e=arguments.length>1;if(e||Ext.isArray(b)){var a=[];Ext.each(e?arguments:b,function(h){a.push(this.add(h))},this);return a}var g=this.lookupComponent(this.applyDefaults(b));var d=this.items.length;if(this.fireEvent("beforeadd",this,g,d)!==false&&this.onBeforeAdd(g)!==false){this.items.add(g);g.onAdded(this,d);this.onAdd(g);this.fireEvent("add",this,g,d)}return g},onAdd:function(a){},onAdded:function(a,b){this.ownerCt=a;this.initRef();this.cascade(function(d){d.initRef()});this.fireEvent("added",this,a,b)},insert:function(e,b){var d=arguments,h=d.length,a=[],g,j;this.initItems();if(h>2){for(g=h-1;g>=1;--g){a.push(this.insert(e,d[g]))}return a}j=this.lookupComponent(this.applyDefaults(b));e=Math.min(e,this.items.length);if(this.fireEvent("beforeadd",this,j,e)!==false&&this.onBeforeAdd(j)!==false){if(j.ownerCt==this){this.items.remove(j)}this.items.insert(e,j);j.onAdded(this,e);this.onAdd(j);this.fireEvent("add",this,j,e)}return j},applyDefaults:function(b){var a=this.defaults;if(a){if(Ext.isFunction(a)){a=a.call(this,b)}if(Ext.isString(b)){b=Ext.ComponentMgr.get(b);Ext.apply(b,a)}else{if(!b.events){Ext.applyIf(b.isAction?b.initialConfig:b,a)}else{Ext.apply(b,a)}}}return b},onBeforeAdd:function(a){if(a.ownerCt){a.ownerCt.remove(a,false)}if(this.hideBorders===true){a.border=(a.border===true)}},remove:function(a,b){this.initItems();var d=this.getComponent(a);if(d&&this.fireEvent("beforeremove",this,d)!==false){this.doRemove(d,b);this.fireEvent("remove",this,d)}return d},onRemove:function(a){},doRemove:function(e,d){var b=this.layout,a=b&&this.rendered;if(a){b.onRemove(e)}this.items.remove(e);e.onRemoved();this.onRemove(e);if(d===true||(d!==false&&this.autoDestroy)){e.destroy()}if(a){b.afterRemove(e)}},removeAll:function(c){this.initItems();var e,g=[],b=[];this.items.each(function(h){g.push(h)});for(var d=0,a=g.length;d','','
','
',"");a.disableFormats=true;return a.compile()})(),destroy:function(){if(this.resizeTask&&this.resizeTask.cancel){this.resizeTask.cancel()}if(this.container){this.container.un(this.container.resizeEvent,this.onResize,this)}if(!Ext.isEmpty(this.targetCls)){var a=this.container.getLayoutTarget();if(a){a.removeClass(this.targetCls)}}}});Ext.layout.AutoLayout=Ext.extend(Ext.layout.ContainerLayout,{type:"auto",monitorResize:true,onLayout:function(d,g){Ext.layout.AutoLayout.superclass.onLayout.call(this,d,g);var e=this.getRenderedItems(d),a=e.length,b,h;for(b=0;b0){b.setSize(a)}}});Ext.Container.LAYOUTS.fit=Ext.layout.FitLayout;Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{deferredRender:false,layoutOnCardChange:false,renderHidden:true,type:"card",setActiveItem:function(d){var a=this.activeItem,b=this.container;d=b.getComponent(d);if(d&&a!=d){if(a){a.hide();if(a.hidden!==true){return false}a.fireEvent("deactivate",a)}var c=d.doLayout&&(this.layoutOnCardChange||!d.rendered);this.activeItem=d;delete d.deferLayout;d.show();this.layout();if(c){d.doLayout()}d.fireEvent("activate",d)}},renderAll:function(a,b){if(this.deferredRender){this.renderItem(this.activeItem,undefined,b)}else{Ext.layout.CardLayout.superclass.renderAll.call(this,a,b)}}});Ext.Container.LAYOUTS.card=Ext.layout.CardLayout;Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"anchor",defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a={};if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},onLayout:function(m,w){Ext.layout.AnchorLayout.superclass.onLayout.call(this,m,w);var p=this.getLayoutTargetSize(),k=p.width,o=p.height,q=w.getStyle("overflow"),n=this.getRenderedItems(m),t=n.length,g=[],j,a,v,l,h,c,e,d,u=0,s,b;if(k<20&&o<20){return}if(m.anchorSize){if(typeof m.anchorSize=="number"){a=m.anchorSize}else{a=m.anchorSize.width;v=m.anchorSize.height}}else{a=m.initialConfig.width;v=m.initialConfig.height}for(s=0;s ');b.disableFormats=true;b.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=b}this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+"-xcollapsed"});this.collapsedEl.enableDisplayMode("block");if(this.collapseMode=="mini"){this.collapsedEl.addClass("x-layout-cmini-"+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:" "});this.miniCollapsedEl.addClassOnOver("x-layout-mini-over");this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.onExpandClick,this,{stopEvent:true})}else{if(this.collapsible!==false&&!this.hideCollapseTool){var a=this.expandToolEl=this.toolTemplate.append(this.collapsedEl.dom,{id:"expand-"+this.position},true);a.addClassOnOver("x-tool-expand-"+this.position+"-over");a.on("click",this.onExpandClick,this,{stopEvent:true})}if(this.floatable!==false||this.titleCollapse){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this[this.floatable?"collapseClick":"onExpandClick"],this)}}}return this.collapsedEl},onExpandClick:function(a){if(this.isSlid){this.panel.expand(false)}else{this.panel.expand()}},onCollapseClick:function(a){this.panel.collapse()},beforeCollapse:function(c,a){this.lastAnim=a;if(this.splitEl){this.splitEl.hide()}this.getCollapsedEl().show();var b=this.panel.getEl();this.originalZIndex=b.getStyle("z-index");b.setStyle("z-index",100);this.isCollapsed=true;this.layout.layout()},onCollapse:function(a){this.panel.el.setStyle("z-index",1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility="visible"}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:0.2})}this.state.collapsed=true;this.panel.saveState()},beforeExpand:function(a){if(this.isSlid){this.afterSlideIn()}var b=this.getCollapsedEl();this.el.show();if(this.position=="east"||this.position=="west"){this.panel.setSize(undefined,b.getHeight())}else{this.panel.setSize(b.getWidth(),undefined)}b.hide();b.dom.style.visibility="hidden";this.panel.el.setStyle("z-index",this.floatingZIndex)},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show()}this.layout.layout();this.panel.el.setStyle("z-index",this.originalZIndex);this.state.collapsed=false;this.panel.saveState()},collapseClick:function(a){if(this.isSlid){a.stopPropagation();this.slideIn()}else{a.stopPropagation();this.slideOut()}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide()}else{if(this.splitEl){this.splitEl.hide()}}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show()}else{if(this.splitEl){this.splitEl.show()}}},isVisible:function(){return !this.panel.hidden},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize()},setPanel:function(a){this.panel=a},getMinWidth:function(){return this.minWidth},getMinHeight:function(){return this.minHeight},applyLayoutCollapsed:function(a){var b=this.getCollapsedEl();b.setLeftTop(a.x,a.y);b.setSize(a.width,a.height)},applyLayout:function(a){if(this.isCollapsed){this.applyLayoutCollapsed(a)}else{this.panel.setPosition(a.x,a.y);this.panel.setSize(a.width,a.height)}},beforeSlide:function(){this.panel.beforeEffect()},afterSlide:function(){this.panel.afterEffect()},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){this.autoHideSlideTask=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={mouseout:function(a){if(!a.within(this.el,true)){this.autoHideSlideTask.delay(500)}},mouseover:function(a){this.autoHideSlideTask.cancel()},scope:this}}this.el.on(this.autoHideHd);this.collapsedEl.on(this.autoHideHd)}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);this.collapsedEl.un("mouseout",this.autoHideHd.mouseout);this.collapsedEl.un("mouseover",this.autoHideHd.mouseover)}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this)},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return}this.isSlid=true;var b=this.panel.tools,c,a;if(b&&b.toggle){b.toggle.hide()}this.el.show();a=this.panel.collapsed;this.panel.collapsed=false;if(this.position=="east"||this.position=="west"){c=this.panel.deferHeight;this.panel.deferHeight=false;this.panel.setSize(undefined,this.collapsedEl.getHeight());this.panel.deferHeight=c}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined)}this.panel.collapsed=a;this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);this.panel.el.replaceClass("x-panel-collapsed","x-panel-floating");if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)},scope:this,block:true})}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.panel.el.replaceClass("x-panel-floating","x-panel-collapsed");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var a=this.panel.tools;if(a&&a.toggle){a.toggle.show()}},slideIn:function(a){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(a);return}this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(a)},scope:this,block:true})}else{this.el.hide();this.afterSlideIn()}},slideInIf:function(a){if(!a.within(this.el)){this.slideIn()}},anchors:{west:"left",east:"right",north:"top",south:"bottom"},sanchors:{west:"l",east:"r",north:"t",south:"b"},canchors:{west:"tl-tr",east:"tr-tl",north:"tl-bl",south:"bl-tl"},getAnchor:function(){return this.anchors[this.position]},getCollapseAnchor:function(){return this.canchors[this.position]},getSlideAnchor:function(){return this.sanchors[this.position]},getAlignAdj:function(){var a=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}},getExpandAdj:function(){var b=this.collapsedEl,a=this.cmargins;switch(this.position){case"west":return[-(a.right+b.getWidth()+a.left),0];break;case"east":return[a.right+b.getWidth()+a.left,0];break;case"north":return[0,-(a.top+a.bottom+b.getHeight())];break;case"south":return[0,a.top+a.bottom+b.getHeight()];break}},destroy:function(){if(this.autoHideSlideTask&&this.autoHideSlideTask.cancel){this.autoHideSlideTask.cancel()}Ext.destroyMembers(this,"miniCollapsedEl","collapsedEl","expandToolEl")}};Ext.layout.BorderLayout.SplitRegion=function(b,a,c){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,b,a,c);this.applyLayout=this.applyFns[c]};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"}},applyFns:{west:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;this.panel.setPosition(c.x,c.y);var a=d.offsetWidth;b.left=(c.x+c.width-a)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},east:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetWidth;this.panel.setPosition(c.x+a,c.y);b.left=(c.x)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},north:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y);b.left=(c.x)+"px";b.top=(c.y+c.height-a)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)},south:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y+a);b.left=(c.x)+"px";b.top=(c.y)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)}},render:function(a,c){Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,a,c);var d=this.position;this.splitEl=a.createChild({cls:"x-layout-split x-layout-split-"+d,html:" ",id:this.panel.id+"-xsplit"});if(this.collapseMode=="mini"){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+d,html:" "});this.miniSplitEl.addClassOnOver("x-layout-mini-over");this.miniSplitEl.on("click",this.onCollapseClick,this,{stopEvent:true})}var b=this.splitSettings[d];this.split=new Ext.SplitBar(this.splitEl.dom,c.el,b.orientation);this.split.tickSize=this.tickSize;this.split.placement=b.placement;this.split.getMaximumSize=this[b.maxFn].createDelegate(this);this.split.minSize=this.minSize||this[b.minProp];this.split.on("beforeapply",this.onSplitMove,this);this.split.useShim=this.useShim===true;this.maxSize=this.maxSize||this[b.maxProp];if(c.hidden){this.splitEl.hide()}if(this.useSplitTips){this.splitEl.dom.title=this.collapsible?this.collapsibleSplitTip:this.splitTip}if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this)}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize()}var a=this.panel.getSize();if(this.position=="north"||this.position=="south"){a.height+=this.splitEl.dom.offsetHeight}else{a.width+=this.splitEl.dom.offsetWidth}return a},getHMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getWidth()+a.el.getWidth())-a.getMinWidth())},getVMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getHeight()+a.el.getHeight())-a.getMinHeight())},onSplitMove:function(b,a){var c=this.panel.getSize();this.lastSplitSize=a;if(this.position=="north"||this.position=="south"){this.panel.setSize(c.width,a);this.state.height=a}else{this.panel.setSize(a,c.height);this.state.width=a}this.layout.layout();this.panel.saveState();return false},getSplitBar:function(){return this.split},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.border=Ext.layout.BorderLayout;Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:":",trackLabels:true,type:"form",onRemove:function(d){Ext.layout.FormLayout.superclass.onRemove.call(this,d);if(this.trackLabels){d.un("show",this.onFieldShow,this);d.un("hide",this.onFieldHide,this)}var b=d.getPositionEl(),a=d.getItemCt&&d.getItemCt();if(d.rendered&&a){if(b&&b.dom){b.insertAfter(a)}Ext.destroy(a);Ext.destroyMembers(d,"label","itemCt");if(d.customItemCt){Ext.destroyMembers(d,"getItemCt","customItemCt")}}},setContainer:function(a){Ext.layout.FormLayout.superclass.setContainer.call(this,a);if(a.labelAlign){a.addClass("x-form-label-"+a.labelAlign)}if(a.hideLabels){Ext.apply(this,{labelStyle:"display:none",elementStyle:"padding-left:0;",labelAdjust:0})}else{this.labelSeparator=Ext.isDefined(a.labelSeparator)?a.labelSeparator:this.labelSeparator;a.labelWidth=a.labelWidth||100;if(Ext.isNumber(a.labelWidth)){var b=Ext.isNumber(a.labelPad)?a.labelPad:5;Ext.apply(this,{labelAdjust:a.labelWidth+b,labelStyle:"width:"+a.labelWidth+"px;",elementStyle:"padding-left:"+(a.labelWidth+b)+"px"})}if(a.labelAlign=="top"){Ext.apply(this,{labelStyle:"width:auto;",labelAdjust:0,elementStyle:"padding-left:0;"})}}},isHide:function(a){return a.hideLabel||this.container.hideLabels},onFieldShow:function(a){a.getItemCt().removeClass("x-hide-"+a.hideMode);if(a.isComposite){a.doLayout()}},onFieldHide:function(a){a.getItemCt().addClass("x-hide-"+a.hideMode)},getLabelStyle:function(e){var b="",c=[this.labelStyle,e];for(var d=0,a=c.length;d=b)||(this.cells[c]&&this.cells[c][a])){if(b&&a>=b){c++;a=0}else{a++}}return[a,c]},renderItem:function(e,a,d){if(!this.table){this.table=d.createChild(Ext.apply({tag:"table",cls:"x-table-layout",cellspacing:0,cn:{tag:"tbody"}},this.tableAttrs),null,true)}if(e&&!e.rendered){e.render(this.getNextCell(e));this.configureItem(e)}else{if(e&&!this.isValidParent(e,d)){var b=this.getNextCell(e);b.insertBefore(e.getPositionEl().dom,null);e.container=Ext.get(b);this.configureItem(e)}}},isValidParent:function(b,a){return b.getPositionEl().up("table",5).dom.parentNode===(a.dom||a)},destroy:function(){delete this.table;Ext.layout.TableLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.table=Ext.layout.TableLayout;Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:"x-abs-layout-item",type:"absolute",onLayout:function(a,b){b.position();this.paddingLeft=b.getPadding("l");this.paddingTop=b.getPadding("t");Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,a,b)},adjustWidthAnchor:function(b,a){return b?b-a.getPosition(true)[0]+this.paddingLeft:b},adjustHeightAnchor:function(b,a){return b?b-a.getPosition(true)[1]+this.paddingTop:b}});Ext.Container.LAYOUTS.absolute=Ext.layout.AbsoluteLayout;Ext.layout.BoxLayout=Ext.extend(Ext.layout.ContainerLayout,{defaultMargins:{left:0,top:0,right:0,bottom:0},padding:"0",pack:"start",monitorResize:true,type:"box",scrollOffset:0,extraCls:"x-box-item",targetCls:"x-box-layout-ct",innerCls:"x-box-inner",constructor:function(a){Ext.layout.BoxLayout.superclass.constructor.call(this,a);if(Ext.isString(this.defaultMargins)){this.defaultMargins=this.parseMargins(this.defaultMargins)}var d=this.overflowHandler;if(typeof d=="string"){d={type:d}}var c="none";if(d&&d.type!=undefined){c=d.type}var b=Ext.layout.boxOverflow[c];if(b[this.type]){b=b[this.type]}this.overflowHandler=new b(this,d)},onLayout:function(b,h){Ext.layout.BoxLayout.superclass.onLayout.call(this,b,h);var d=this.getLayoutTargetSize(),i=this.getVisibleItems(b),c=this.calculateChildBoxes(i,d),g=c.boxes,j=c.meta;if(d.width>0){var k=this.overflowHandler,a=j.tooNarrow?"handleOverflow":"clearOverflow";var e=k[a](c,d);if(e){if(e.targetSize){d=e.targetSize}if(e.recalculate){i=this.getVisibleItems(b);c=this.calculateChildBoxes(i,d);g=c.boxes}}}this.layoutTargetLastSize=d;this.childBoxCache=c;this.updateInnerCtSize(d,c);this.updateChildBoxes(g);this.handleTargetOverflow(d,b,h)},updateChildBoxes:function(c){for(var b=0,e=c.length;b(None)',constructor:function(a){Ext.layout.boxOverflow.Menu.superclass.constructor.apply(this,arguments);this.menuItems=[]},createInnerElements:function(){if(!this.afterCt){this.afterCt=this.layout.innerCt.insertSibling({cls:this.afterCls},"before")}},clearOverflow:function(a,g){var e=g.width+(this.afterCt?this.afterCt.getWidth():0),b=this.menuItems;this.hideTrigger();for(var c=0,d=b.length;ci.width;return l}},handleOverflow:function(d,h){this.showTrigger();var k=h.width-this.afterCt.getWidth(),l=d.boxes,e=0,r=false;for(var o=0,c=l.length;o=0;j--){var q=l[j].component,p=l[j].left+l[j].width;if(p>=k){this.menuItems.unshift({component:q,width:l[j].width});q.hide()}else{break}}}if(this.menuItems.length==0){this.hideTrigger()}return{targetSize:{height:h.height,width:k},recalculate:r}}});Ext.layout.boxOverflow.menu.hbox=Ext.layout.boxOverflow.HorizontalMenu;Ext.layout.boxOverflow.Scroller=Ext.extend(Ext.layout.boxOverflow.None,{animateScroll:true,scrollIncrement:100,wheelIncrement:3,scrollRepeatInterval:400,scrollDuration:0.4,beforeCls:"x-strip-left",afterCls:"x-strip-right",scrollerCls:"x-strip-scroller",beforeScrollerCls:"x-strip-scroller-left",afterScrollerCls:"x-strip-scroller-right",createWheelListener:function(){this.layout.innerCt.on({scope:this,mousewheel:function(a){a.stopEvent();this.scrollBy(a.getWheelDelta()*this.wheelIncrement*-1,false)}})},handleOverflow:function(a,b){this.createInnerElements();this.showScrollers()},clearOverflow:function(){this.hideScrollers()},showScrollers:function(){this.createScrollers();this.beforeScroller.show();this.afterScroller.show();this.updateScrollButtons()},hideScrollers:function(){if(this.beforeScroller!=undefined){this.beforeScroller.hide();this.afterScroller.hide()}},createScrollers:function(){if(!this.beforeScroller&&!this.afterScroller){var a=this.beforeCt.createChild({cls:String.format("{0} {1} ",this.scrollerCls,this.beforeScrollerCls)});var b=this.afterCt.createChild({cls:String.format("{0} {1}",this.scrollerCls,this.afterScrollerCls)});a.addClassOnOver(this.beforeScrollerCls+"-hover");b.addClassOnOver(this.afterScrollerCls+"-hover");a.setVisibilityMode(Ext.Element.DISPLAY);b.setVisibilityMode(Ext.Element.DISPLAY);this.beforeRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.scrollLeft,scope:this});this.afterRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.scrollRight,scope:this});this.beforeScroller=a;this.afterScroller=b}},destroy:function(){Ext.destroy(this.beforeScroller,this.afterScroller,this.beforeRepeater,this.afterRepeater,this.beforeCt,this.afterCt)},scrollBy:function(b,a){this.scrollTo(this.getScrollPosition()+b,a)},getItem:function(a){if(Ext.isString(a)){a=Ext.getCmp(a)}else{if(Ext.isNumber(a)){a=this.items[a]}}return a},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},updateScrollButtons:function(){if(this.beforeScroller==undefined||this.afterScroller==undefined){return}var d=this.atExtremeBefore()?"addClass":"removeClass",c=this.atExtremeAfter()?"addClass":"removeClass",a=this.beforeScrollerCls+"-disabled",b=this.afterScrollerCls+"-disabled";this.beforeScroller[d](a);this.afterScroller[c](b);this.scrolling=false},atExtremeBefore:function(){return this.getScrollPosition()===0},scrollLeft:function(a){this.scrollBy(-this.scrollIncrement,a)},scrollRight:function(a){this.scrollBy(this.scrollIncrement,a)},scrollToItem:function(d,b){d=this.getItem(d);if(d!=undefined){var a=this.getItemVisibility(d);if(!a.fullyVisible){var c=d.getBox(true,true),e=c.x;if(a.hiddenRight){e-=(this.layout.innerCt.getWidth()-c.width)}this.scrollTo(e,b)}}},getItemVisibility:function(e){var d=this.getItem(e).getBox(true,true),a=d.x,c=d.x+d.width,g=this.getScrollPosition(),b=this.layout.innerCt.getWidth()+g;return{hiddenLeft:ab,fullyVisible:a>g&&c=this.getMaxScrollBottom()}});Ext.layout.boxOverflow.scroller.vbox=Ext.layout.boxOverflow.VerticalScroller;Ext.layout.boxOverflow.HorizontalScroller=Ext.extend(Ext.layout.boxOverflow.Scroller,{handleOverflow:function(a,b){Ext.layout.boxOverflow.HorizontalScroller.superclass.handleOverflow.apply(this,arguments);return{targetSize:{height:b.height,width:b.width-(this.beforeCt.getWidth()+this.afterCt.getWidth())}}},createInnerElements:function(){var a=this.layout.innerCt;if(!this.beforeCt){this.afterCt=a.insertSibling({cls:this.afterCls},"before");this.beforeCt=a.insertSibling({cls:this.beforeCls},"before");this.createWheelListener()}},scrollTo:function(a,b){var d=this.getScrollPosition(),c=a.constrain(0,this.getMaxScrollRight());if(c!=d&&!this.scrolling){if(b==undefined){b=this.animateScroll}this.layout.innerCt.scrollTo("left",c,b?this.getScrollAnim():false);if(b){this.scrolling=true}else{this.scrolling=false;this.updateScrollButtons()}}},getScrollPosition:function(){return parseInt(this.layout.innerCt.dom.scrollLeft,10)||0},getMaxScrollRight:function(){return this.layout.innerCt.dom.scrollWidth-this.layout.innerCt.getWidth()},atExtremeAfter:function(){return this.getScrollPosition()>=this.getMaxScrollRight()}});Ext.layout.boxOverflow.scroller.hbox=Ext.layout.boxOverflow.HorizontalScroller;Ext.layout.HBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"top",type:"hbox",calculateChildBoxes:function(r,b){var F=r.length,R=this.padding,D=R.top,U=R.left,y=D+R.bottom,O=U+R.right,a=b.width-this.scrollOffset,e=b.height,o=Math.max(0,e-y),P=this.pack=="start",W=this.pack=="center",A=this.pack=="end",L=0,Q=0,T=0,l=0,X=0,H=[],k,J,M,V,w,j,S,I,c,x,q,N;for(S=0;Sa;var n=Math.max(0,a-L-O);if(p){for(S=0;S0){var C=[];for(var E=0,v=F;Ei.available?1:-1});for(var S=0,v=C.length;S0){I.top=D+q+(z/2)}}U+=I.width+w.right}return{boxes:H,meta:{maxHeight:Q,nonFlexWidth:L,desiredWidth:l,minimumWidth:X,shortfall:l-a,tooNarrow:p}}}});Ext.Container.LAYOUTS.hbox=Ext.layout.HBoxLayout;Ext.layout.VBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"left",type:"vbox",calculateChildBoxes:function(o,b){var E=o.length,R=this.padding,C=R.top,V=R.left,x=C+R.bottom,O=V+R.right,a=b.width-this.scrollOffset,c=b.height,K=Math.max(0,a-O),P=this.pack=="start",X=this.pack=="center",z=this.pack=="end",k=0,u=0,U=0,L=0,m=0,G=[],h,I,N,W,t,g,T,H,S,w,n,d,r;for(T=0;Tc;var q=Math.max(0,(c-k-x));if(l){for(T=0,r=E;T0){var J=[];for(var D=0,r=E;Di.available?1:-1});for(var T=0,r=J.length;T0){H.left=V+w+(y/2)}}C+=H.height+t.bottom}return{boxes:G,meta:{maxWidth:u,nonFlexHeight:k,desiredHeight:L,minimumHeight:m,shortfall:L-c,tooNarrow:l}}}});Ext.Container.LAYOUTS.vbox=Ext.layout.VBoxLayout;Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"toolbar",triggerWidth:18,noItemsMenuText:'
(None)
',lastOverflow:false,tableHTML:['',"","",'",'","","","
','',"",'',"","
","
','',"","","","","","","
",'',"",'',"","
","
",'',"",'',"","
","
","
"].join(""),onLayout:function(e,j){if(!this.leftTr){var h=e.buttonAlign=="center"?"center":"left";j.addClass("x-toolbar-layout-ct");j.insertHtml("beforeEnd",String.format(this.tableHTML,h));this.leftTr=j.child("tr.x-toolbar-left-row",true);this.rightTr=j.child("tr.x-toolbar-right-row",true);this.extrasTr=j.child("tr.x-toolbar-extras-row",true);if(this.hiddenItem==undefined){this.hiddenItems=[]}}var k=e.buttonAlign=="right"?this.rightTr:this.leftTr,l=e.items.items,d=0;for(var b=0,g=l.length,m;b=0&&(d=e[a]);a--){if(!d.firstChild){b.removeChild(d)}}},insertCell:function(e,b,a){var d=document.createElement("td");d.className="x-toolbar-cell";b.insertBefore(d,b.childNodes[a]||null);return d},hideItem:function(a){this.hiddenItems.push(a);a.xtbHidden=true;a.xtbWidth=a.getPositionEl().dom.parentNode.offsetWidth;a.hide()},unhideItem:function(a){a.show();a.xtbHidden=false;this.hiddenItems.remove(a)},getItemWidth:function(a){return a.hidden?(a.xtbWidth||0):a.getPositionEl().dom.parentNode.offsetWidth},fitToSize:function(k){if(this.container.enableOverflow===false){return}var b=k.dom.clientWidth,j=k.dom.firstChild.offsetWidth,m=b-this.triggerWidth,a=this.lastWidth||0,c=this.hiddenItems,e=c.length!=0,n=b>=a;this.lastWidth=b;if(j>b||(e&&n)){var l=this.container.items.items,h=l.length,d=0,o;for(var g=0;gm){if(!(o.hidden||o.xtbHidden)){this.hideItem(o)}}else{if(o.xtbHidden){this.unhideItem(o)}}}}}e=c.length!=0;if(e){this.initMore();if(!this.lastOverflow){this.container.fireEvent("overflowchange",this.container,true);this.lastOverflow=true}}else{if(this.more){this.clearMenu();this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent("overflowchange",this.container,false);this.lastOverflow=false}}}},createMenuConfig:function(c,a){var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);Ext.apply(b,{text:c.overflowText||c.text,hideOnClick:a});if(d||c.enableToggle){Ext.apply(b,{group:d,checked:c.pressed,listeners:{checkchange:function(g,e){c.toggle(e)}}})}delete b.ownerCt;delete b.xtype;delete b.id;return b},addComponentToMenu:function(b,a){if(a instanceof Ext.Toolbar.Separator){b.add("-")}else{if(Ext.isFunction(a.isXType)){if(a.isXType("splitbutton")){b.add(this.createMenuConfig(a,true))}else{if(a.isXType("button")){b.add(this.createMenuConfig(a,!a.menu))}else{if(a.isXType("buttongroup")){a.items.each(function(c){this.addComponentToMenu(b,c)},this)}}}}}},clearMenu:function(){var a=this.moreMenu;if(a&&a.items){a.items.each(function(b){delete b.menu})}},beforeMoreShow:function(h){var b=this.container.items.items,a=b.length,g,e;var c=function(j,i){return j.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)};this.clearMenu();h.removeAll();for(var d=0;d','','{altText}',"","")}if(g&&!g.rendered){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}var d=this.getItemArgs(g);g.render(g.positionEl=b?this.itemTpl.insertBefore(b,d,true):this.itemTpl.append(e,d,true));g.positionEl.menuItemId=g.getItemId();if(!d.isMenuItem&&d.needsIcon){g.positionEl.addClass("x-menu-list-item-indent")}this.configureItem(g)}else{if(g&&!this.isValidParent(g,e)){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}e.dom.insertBefore(g.getActionEl().dom,b||null)}}},getItemArgs:function(d){var a=d instanceof Ext.menu.Item,b=!(a||d instanceof Ext.menu.Separator);return{isMenuItem:a,needsIcon:b&&(d.icon||d.iconCls),icon:d.icon||Ext.BLANK_IMAGE_URL,iconCls:"x-menu-item-icon "+(d.iconCls||""),itemId:"x-menu-el-"+d.id,itemCls:"x-menu-list-item ",altText:d.altText||""}},isValidParent:function(b,a){return b.el.up("li.x-menu-list-item",5).dom.parentNode===(a.dom||a)},onLayout:function(a,b){Ext.layout.MenuLayout.superclass.onLayout.call(this,a,b);this.doAutoSize()},doAutoSize:function(){var c=this.container,a=c.width;if(c.floating){if(a){c.setWidth(a)}else{if(Ext.isIE){c.setWidth(Ext.isStrict&&(Ext.isIE7||Ext.isIE8||Ext.isIE9)?"auto":c.minWidth);var d=c.getEl(),b=d.dom.offsetWidth;c.setWidth(c.getLayoutTarget().getWidth()+d.getFrameWidth("lr"))}}}}});Ext.Container.LAYOUTS.menu=Ext.layout.MenuLayout;Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName("html")[0].className+=" x-viewport";this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll="no";this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el},fireResize:function(a,b){this.fireEvent("resize",this,a,b,a,b)}});Ext.reg("viewport",Ext.Viewport);Ext.Panel=Ext.extend(Ext.Container,{baseCls:"x-panel",collapsedCls:"x-panel-collapsed",maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:"right",collapsed:false,collapseFirst:true,minButtonWidth:75,elements:"body",preventBodyReset:false,padding:undefined,resizeEvent:"bodyresize",toolTarget:"header",collapseEl:"bwrap",slideAnchor:"t",disabledClass:"",deferHeight:true,expandDefaults:{duration:0.25},collapseDefaults:{duration:0.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents("bodyresize","titlechange","iconchange","collapse","expand","beforecollapse","beforeexpand","beforeclose","close","activate","deactivate");if(this.unstyled){this.baseCls="x-plain"}this.toolbars=[];if(this.tbar){this.elements+=",tbar";this.topToolbar=this.createToolbar(this.tbar);this.tbar=null}if(this.bbar){this.elements+=",bbar";this.bottomToolbar=this.createToolbar(this.bbar);this.bbar=null}if(this.header===true){this.elements+=",header";this.header=null}else{if(this.headerCfg||(this.title&&this.header!==false)){this.elements+=",header"}}if(this.footerCfg||this.footer===true){this.elements+=",footer";this.footer=null}if(this.buttons){this.fbar=this.buttons;this.buttons=null}if(this.fbar){this.createFbar(this.fbar)}if(this.autoLoad){this.on("render",this.doAutoLoad,this,{delay:10})}},createFbar:function(b){var a=this.minButtonWidth;this.elements+=",footer";this.fbar=this.createToolbar(b,{buttonAlign:this.buttonAlign,toolbarCls:"x-panel-fbar",enableOverflow:false,defaults:function(d){return{minWidth:d.minWidth||a}}});this.fbar.items.each(function(d){d.minWidth=d.minWidth||this.minButtonWidth},this);this.buttons=this.fbar.items.items},createToolbar:function(b,c){var a;if(Ext.isArray(b)){b={items:b}}a=b.events?Ext.apply(b,c):this.createComponent(Ext.apply({},b,c),"toolbar");this.toolbars.push(a);return a},createElement:function(a,c){if(this[a]){c.appendChild(this[a].dom);return}if(a==="bwrap"||this.elements.indexOf(a)!=-1){if(this[a+"Cfg"]){this[a]=Ext.fly(c).createChild(this[a+"Cfg"])}else{var b=document.createElement("div");b.className=this[a+"Cls"];this[a]=Ext.get(c.appendChild(b))}if(this[a+"CssClass"]){this[a].addClass(this[a+"CssClass"])}if(this[a+"Style"]){this[a].applyStyles(this[a+"Style"])}}},onRender:function(g,e){Ext.Panel.superclass.onRender.call(this,g,e);this.createClasses();var a=this.el,h=a.dom,k,i;if(this.collapsible&&!this.hideCollapseTool){this.tools=this.tools?this.tools.slice(0):[];this.tools[this.collapseFirst?"unshift":"push"]({id:"toggle",handler:this.toggleCollapse,scope:this})}if(this.tools){i=this.tools;this.elements+=(this.header!==false)?",header":""}this.tools={};a.addClass(this.baseCls);if(h.firstChild){this.header=a.down("."+this.headerCls);this.bwrap=a.down("."+this.bwrapCls);var j=this.bwrap?this.bwrap:a;this.tbar=j.down("."+this.tbarCls);this.body=j.down("."+this.bodyCls);this.bbar=j.down("."+this.bbarCls);this.footer=j.down("."+this.footerCls);this.fromMarkup=true}if(this.preventBodyReset===true){a.addClass("x-panel-reset")}if(this.cls){a.addClass(this.cls)}if(this.buttons){this.elements+=",footer"}if(this.frame){a.insertHtml("afterBegin",String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement("header",h.firstChild.firstChild.firstChild);this.createElement("bwrap",h);k=this.bwrap.dom;var c=h.childNodes[1],b=h.childNodes[2];k.appendChild(c);k.appendChild(b);var l=k.firstChild.firstChild.firstChild;this.createElement("tbar",l);this.createElement("body",l);this.createElement("bbar",l);this.createElement("footer",k.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=" x-panel-nofooter"}this.ft=Ext.get(this.bwrap.dom.lastChild);this.mc=Ext.get(l)}else{this.createElement("header",h);this.createElement("bwrap",h);k=this.bwrap.dom;this.createElement("tbar",k);this.createElement("body",k);this.createElement("bbar",k);this.createElement("footer",k);if(!this.header){this.body.addClass(this.bodyCls+"-noheader");if(this.tbar){this.tbar.addClass(this.tbarCls+"-noheader")}}}if(Ext.isDefined(this.padding)){this.body.setStyle("padding",this.body.addUnits(this.padding))}if(this.border===false){this.el.addClass(this.baseCls+"-noborder");this.body.addClass(this.bodyCls+"-noborder");if(this.header){this.header.addClass(this.headerCls+"-noborder")}if(this.footer){this.footer.addClass(this.footerCls+"-noborder")}if(this.tbar){this.tbar.addClass(this.tbarCls+"-noborder")}if(this.bbar){this.bbar.addClass(this.bbarCls+"-noborder")}}if(this.bodyBorder===false){this.body.addClass(this.bodyCls+"-noborder")}this.bwrap.enableDisplayMode("block");if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML=''+this.header.dom.innerHTML+"";if(this.iconCls){this.setIconClass(this.iconCls)}}}if(this.floating){this.makeFloating(this.floating)}if(this.collapsible&&this.titleCollapse&&this.header){this.mon(this.header,"click",this.toggleCollapse,this);this.header.setStyle("cursor","pointer")}if(i){this.addTool.apply(this,i)}if(this.fbar){this.footer.addClass("x-panel-btns");this.fbar.ownerCt=this;this.fbar.render(this.footer);this.footer.createChild({cls:"x-clear"})}if(this.tbar&&this.topToolbar){this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar)}if(this.bbar&&this.bottomToolbar){this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar)}},setIconClass:function(b){var a=this.iconCls;this.iconCls=b;if(this.rendered&&this.header){if(this.frame){this.header.addClass("x-panel-icon");this.header.replaceClass(a,this.iconCls)}else{var e=this.header,c=e.child("img.x-panel-inline-icon");if(c){Ext.fly(c).replaceClass(a,this.iconCls)}else{var d=e.child("span."+this.headerTextCls);if(d){Ext.DomHelper.insertBefore(d.dom,{tag:"img",alt:"",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.iconCls})}}}}this.fireEvent("iconchange",this,b,a)},makeFloating:function(a){this.floating=true;this.el=new Ext.Layer(Ext.apply({},a,{shadow:Ext.isDefined(this.shadow)?this.shadow:"sides",shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined}),this.el)},getTopToolbar:function(){return this.topToolbar},getBottomToolbar:function(){return this.bottomToolbar},getFooterToolbar:function(){return this.fbar},addButton:function(a,c,b){if(!this.fbar){this.createFbar([])}if(c){if(Ext.isString(a)){a={text:a}}a=Ext.apply({handler:c,scope:b},a)}return this.fbar.add(a)},addTool:function(){if(!this.rendered){if(!this.tools){this.tools=[]}Ext.each(arguments,function(a){this.tools.push(a)},this);return}if(!this[this.toolTarget]){return}if(!this.toolTemplate){var h=new Ext.Template('
 
');h.disableFormats=true;h.compile();Ext.Panel.prototype.toolTemplate=h}for(var g=0,d=arguments,c=d.length;g0){Ext.each(this.toolbars,function(c){c.doLayout(undefined,a)});this.syncHeight()}},syncHeight:function(){var b=this.toolbarHeight,c=this.body,a=this.lastSize.height,d;if(this.autoHeight||!Ext.isDefined(a)||a=="auto"){return}if(b!=this.getToolbarHeight()){b=Math.max(0,a-this.getFrameHeight());c.setHeight(b);d=c.getSize();this.toolbarHeight=this.getToolbarHeight();this.onBodyResize(d.width,d.height)}},onShow:function(){if(this.floating){return this.el.show()}Ext.Panel.superclass.onShow.call(this)},onHide:function(){if(this.floating){return this.el.hide()}Ext.Panel.superclass.onHide.call(this)},createToolHandler:function(c,a,d,b){return function(g){c.removeClass(d);if(a.stopEvent!==false){g.stopEvent()}if(a.handler){a.handler.call(a.scope||c,g,c,b,a)}}},afterRender:function(){if(this.floating&&!this.hidden){this.el.show()}if(this.title){this.setTitle(this.title)}Ext.Panel.superclass.afterRender.call(this);if(this.collapsed){this.collapsed=false;this.collapse(false)}this.initEvents()},getKeyMap:function(){if(!this.keyMap){this.keyMap=new Ext.KeyMap(this.el,this.keys)}return this.keyMap},initEvents:function(){if(this.keys){this.getKeyMap()}if(this.draggable){this.initDraggable()}if(this.toolbars.length>0){Ext.each(this.toolbars,function(a){a.doLayout();a.on({scope:this,afterlayout:this.syncHeight,remove:this.syncHeight})},this);this.syncHeight()}},initDraggable:function(){this.dd=new Ext.Panel.DD(this,Ext.isBoolean(this.draggable)?null:this.draggable)},beforeEffect:function(a){if(this.floating){this.el.beforeAction()}if(a!==false){this.el.addClass("x-panel-animated")}},afterEffect:function(a){this.syncShadow();this.el.removeClass("x-panel-animated")},createEffect:function(c,b,d){var e={scope:d,block:true};if(c===true){e.callback=b;return e}else{if(!c.callback){e.callback=b}else{e.callback=function(){b.call(d);Ext.callback(c.callback,c.scope)}}}return Ext.applyIf(e,c)},collapse:function(b){if(this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforecollapse",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.beforeEffect(a);this.onCollapse(a,b);return this},onCollapse:function(a,b){if(a){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterCollapse,this),this.collapseDefaults))}else{this[this.collapseEl].hide(this.hideMode);this.afterCollapse(false)}},afterCollapse:function(a){this.collapsed=true;this.el.addClass(this.collapsedCls);if(a!==false){this[this.collapseEl].hide(this.hideMode)}this.afterEffect(a);this.cascade(function(b){if(b.lastSize){b.lastSize={width:undefined,height:undefined}}});this.fireEvent("collapse",this)},expand:function(b){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforeexpand",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect(a);this.onExpand(a,b);return this},onExpand:function(a,b){if(a){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterExpand,this),this.expandDefaults))}else{this[this.collapseEl].show(this.hideMode);this.afterExpand(false)}},afterExpand:function(a){this.collapsed=false;if(a!==false){this[this.collapseEl].show(this.hideMode)}this.afterEffect(a);if(this.deferLayout){delete this.deferLayout;this.doLayout(true)}this.fireEvent("expand",this)},toggleCollapse:function(a){this[this.collapsed?"expand":"collapse"](a);return this},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask()}Ext.Panel.superclass.onDisable.call(this)},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask()}Ext.Panel.superclass.onEnable.call(this)},onResize:function(g,d,c,e){var a=g,b=d;if(Ext.isDefined(a)||Ext.isDefined(b)){if(!this.collapsed){if(Ext.isNumber(a)){this.body.setWidth(a=this.adjustBodyWidth(a-this.getFrameWidth()))}else{if(a=="auto"){a=this.body.setWidth("auto").dom.offsetWidth}else{a=this.body.dom.offsetWidth}}if(this.tbar){this.tbar.setWidth(a);if(this.topToolbar){this.topToolbar.setSize(a)}}if(this.bbar){this.bbar.setWidth(a);if(this.bottomToolbar){this.bottomToolbar.setSize(a);if(Ext.isIE){this.bbar.setStyle("position","static");this.bbar.setStyle("position","")}}}if(this.footer){this.footer.setWidth(a);if(this.fbar){this.fbar.setSize(Ext.isIE?(a-this.footer.getFrameWidth("lr")):"auto")}}if(Ext.isNumber(b)){b=Math.max(0,b-this.getFrameHeight());this.body.setHeight(b)}else{if(b=="auto"){this.body.setHeight(b)}}if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight())}}else{this.queuedBodySize={width:a,height:b};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on("expand",function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height)},this,{single:true})}}this.onBodyResize(a,b)}this.syncShadow();Ext.Panel.superclass.onResize.call(this,g,d,c,e)},onBodyResize:function(a,b){this.fireEvent("bodyresize",this,a,b)},getToolbarHeight:function(){var a=0;if(this.rendered){Ext.each(this.toolbars,function(b){a+=b.getHeight()},this)}return a},adjustBodyHeight:function(a){return a},adjustBodyWidth:function(a){return a},onPosition:function(){this.syncShadow()},getFrameWidth:function(){var b=this.el.getFrameWidth("lr")+this.bwrap.getFrameWidth("lr");if(this.frame){var a=this.bwrap.dom.firstChild;b+=(Ext.fly(a).getFrameWidth("l")+Ext.fly(a.firstChild).getFrameWidth("r"));b+=this.mc.getFrameWidth("lr")}return b},getFrameHeight:function(){var a=this.el.getFrameWidth("tb")+this.bwrap.getFrameWidth("tb");a+=(this.tbar?this.tbar.getHeight():0)+(this.bbar?this.bbar.getHeight():0);if(this.frame){a+=this.el.dom.firstChild.offsetHeight+this.ft.dom.offsetHeight+this.mc.getFrameWidth("tb")}else{a+=(this.header?this.header.getHeight():0)+(this.footer?this.footer.getHeight():0)}return a},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth()},getInnerHeight:function(){return this.body.getHeight()},syncShadow:function(){if(this.floating){this.el.sync(true)}},getLayoutTarget:function(){return this.body},getContentTarget:function(){return this.body},setTitle:function(b,a){this.title=b;if(this.header&&this.headerAsText){this.header.child("span").update(b)}if(a){this.setIconClass(a)}this.fireEvent("titlechange",this,b);return this},getUpdater:function(){return this.body.getUpdater()},load:function(){var a=this.body.getUpdater();a.update.apply(a,arguments);return this},beforeDestroy:function(){Ext.Panel.superclass.beforeDestroy.call(this);if(this.header){this.header.removeAllListeners()}if(this.tools){for(var a in this.tools){Ext.destroy(this.tools[a])}}if(this.toolbars.length>0){Ext.each(this.toolbars,function(b){b.un("afterlayout",this.syncHeight,this);b.un("remove",this.syncHeight,this)},this)}if(Ext.isArray(this.buttons)){while(this.buttons.length){Ext.destroy(this.buttons[0])}}if(this.rendered){Ext.destroy(this.ft,this.header,this.footer,this.tbar,this.bbar,this.body,this.mc,this.bwrap,this.dd);if(this.fbar){Ext.destroy(this.fbar,this.fbar.el)}}Ext.destroy(this.toolbars)},createClasses:function(){this.headerCls=this.baseCls+"-header";this.headerTextCls=this.baseCls+"-header-text";this.bwrapCls=this.baseCls+"-bwrap";this.tbarCls=this.baseCls+"-tbar";this.bodyCls=this.baseCls+"-body";this.bbarCls=this.baseCls+"-bbar";this.footerCls=this.baseCls+"-footer"},createGhost:function(a,e,b){var d=document.createElement("div");d.className="x-panel-ghost "+(a?a:"");if(this.header){d.appendChild(this.el.dom.firstChild.cloneNode(true))}Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight());d.style.width=this.el.dom.offsetWidth+"px";if(!b){this.container.dom.appendChild(d)}else{Ext.getDom(b).appendChild(d)}if(e!==false&&this.el.useShim!==false){var c=new Ext.Layer({shadow:false,useDisplay:true,constrain:false},d);c.show();return c}else{return new Ext.Element(d)}},doAutoLoad:function(){var a=this.body.getUpdater();if(this.renderer){a.setRenderer(this.renderer)}a.update(Ext.isObject(this.autoLoad)?this.autoLoad:{url:this.autoLoad})},getTool:function(a){return this.tools[a]}});Ext.reg("panel",Ext.Panel);Ext.Editor=function(b,a){if(b.field){this.field=Ext.create(b.field,"textfield");a=Ext.apply({},b);delete a.field}else{this.field=b}Ext.Editor.superclass.constructor.call(this,a)};Ext.extend(Ext.Editor,Ext.Component,{allowBlur:true,value:"",alignment:"c-c?",offsets:[0,0],shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:true,cancelOnEsc:true,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey")},onRender:function(b,a){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:b,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex)}this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!="title"){this.field.msgTarget="qtip"}this.field.inEditor=true;this.mon(this.field,{scope:this,blur:this.onBlur,specialkey:this.onSpecialKey});if(this.field.grow){this.mon(this.field,"autosize",this.el.sync,this.el,{delay:1})}this.field.render(this.el).show();this.field.getEl().dom.name="";if(this.swallowKeys){this.field.el.swallowEvent(["keypress","keydown"])}},onSpecialKey:function(g,d){var b=d.getKey(),a=this.completeOnEnter&&b==d.ENTER,c=this.cancelOnEsc&&b==d.ESC;if(a||c){d.stopEvent();if(a){this.completeEdit()}else{this.cancelEdit()}if(g.triggerBlur){g.triggerBlur()}}this.fireEvent("specialkey",g,d)},startEdit:function(b,c){if(this.editing){this.completeEdit()}this.boundEl=Ext.get(b);var a=c!==undefined?c:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body)}if(this.fireEvent("beforestartedit",this,this.boundEl,a)!==false){this.startValue=a;this.field.reset();this.field.setValue(a);this.realign(true);this.editing=true;this.show()}},doAutoSize:function(){if(this.autoSize){var b=this.boundEl.getSize(),a=this.field.getSize();switch(this.autoSize){case"width":this.setSize(b.width,a.height);break;case"height":this.setSize(a.width,b.height);break;case"none":this.setSize(a.width,a.height);break;default:this.setSize(b.width,b.height)}}},setSize:function(a,b){delete this.field.lastSize;this.field.setSize(a,b);if(this.el){if(Ext.isGecko2||Ext.isOpera||(Ext.isIE7&&Ext.isStrict)){this.el.setSize(a,b)}this.el.sync()}},realign:function(a){if(a===true){this.doAutoSize()}this.el.alignTo(this.boundEl,this.alignment,this.offsets)},completeEdit:function(a){if(!this.editing){return}if(this.field.assertValue){this.field.assertValue()}var b=this.getValue();if(!this.field.isValid()){if(this.revertInvalid!==false){this.cancelEdit(a)}return}if(String(b)===String(this.startValue)&&this.ignoreNoChange){this.hideEdit(a);return}if(this.fireEvent("beforecomplete",this,b,this.startValue)!==false){b=this.getValue();if(this.updateEl&&this.boundEl){this.boundEl.update(b)}this.hideEdit(a);this.fireEvent("complete",this,b,this.startValue)}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide()}this.field.show().focus(false,true);this.fireEvent("startedit",this.boundEl,this.startValue)},cancelEdit:function(a){if(this.editing){var b=this.getValue();this.setValue(this.startValue);this.hideEdit(a);this.fireEvent("canceledit",this,b,this.startValue)}},hideEdit:function(a){if(a!==true){this.editing=false;this.hide()}},onBlur:function(){if(this.allowBlur===true&&this.editing&&this.selectSameEditor!==true){this.completeEdit()}},onHide:function(){if(this.editing){this.completeEdit();return}this.field.blur();if(this.field.collapse){this.field.collapse()}this.el.hide();if(this.hideEl!==false){this.boundEl.show()}},setValue:function(a){this.field.setValue(a)},getValue:function(){return this.field.getValue()},beforeDestroy:function(){Ext.destroyMembers(this,"field");delete this.parentEl;delete this.boundEl}});Ext.reg("editor",Ext.Editor);Ext.ColorPalette=Ext.extend(Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],initComponent:function(){Ext.ColorPalette.superclass.initComponent.call(this);this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope,true)}},onRender:function(b,a){this.autoEl={tag:"div",cls:this.itemCls};Ext.ColorPalette.superclass.onRender.call(this,b,a);var c=this.tpl||new Ext.XTemplate(' ');c.overwrite(this.el,this.colors);this.mon(this.el,this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!="click"){this.mon(this.el,"click",Ext.emptyFn,this,{delegate:"a",preventDefault:true})}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var a=this.value;this.value=null;this.select(a,true)}},handleClick:function(b,a){b.preventDefault();if(!this.disabled){var d=a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(d.toUpperCase())}},select:function(b,a){b=b.replace("#","");if(b!=this.value||this.allowReselect){var c=this.el;if(this.value){c.child("a.color-"+this.value).removeClass("x-color-palette-sel")}c.child("a.color-"+b).addClass("x-color-palette-sel");this.value=b;if(a!==true){this.fireEvent("select",this,b)}}}});Ext.reg("colorpalette",Ext.ColorPalette);Ext.DatePicker=Ext.extend(Ext.BoxComponent,{todayText:"Today",okText:" OK ",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",startDay:0,showToday:true,focusOnSelect:true,initHour:12,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime(true):new Date().clearTime();this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope||this)}this.initDisabledDays()},initDisabledDays:function(){if(!this.disabledDatesRE&&this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){if(Ext.isArray(a)){this.disabledDates=a;this.disabledDatesRE=null}else{this.disabledDatesRE=a}this.initDisabledDays();this.update(this.value,true)},setDisabledDays:function(a){this.disabledDays=a;this.update(this.value,true)},setMinDate:function(a){this.minDate=a;this.update(this.value,true)},setMaxDate:function(a){this.maxDate=a;this.update(this.value,true)},setValue:function(a){this.value=a.clearTime(true);this.update(this.value)},getValue:function(){return this.value},focus:function(){this.update(this.activeDate)},onEnable:function(a){Ext.DatePicker.superclass.onEnable.call(this);this.doDisabled(false);this.update(a?this.value:this.activeDate);if(Ext.isIE){this.el.repaint()}},onDisable:function(){Ext.DatePicker.superclass.onDisable.call(this);this.doDisabled(true);if(Ext.isIE&&!Ext.isIE8){Ext.each([].concat(this.textNodes,this.el.query("th span")),function(a){Ext.fly(a).repaint()})}},doDisabled:function(a){this.keyNav.setDisabled(a);this.prevRepeater.setDisabled(a);this.nextRepeater.setDisabled(a);if(this.showToday){this.todayKeyListener.setDisabled(a);this.todayBtn.setDisabled(a)}},onRender:function(e,b){var a=['','','",this.showToday?'':"",'
  
'],c=this.dayNames,h;for(h=0;h<7;h++){var k=this.startDay+h;if(k>6){k=k-7}a.push("")}a[a.length]="";for(h=0;h<42;h++){if(h%7===0&&h!==0){a[a.length]=""}a[a.length]=''}a.push("
",c[k].substr(0,1),"
');var j=document.createElement("div");j.className="x-date-picker";j.innerHTML=a.join("");e.dom.insertBefore(j,b);this.el=Ext.get(j);this.eventEl=Ext.get(j.firstChild);this.prevRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});this.nextRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.monthPicker=this.el.down("div.x-date-mp");this.monthPicker.enableDisplayMode("block");this.keyNav=new Ext.KeyNav(this.eventEl,{left:function(d){if(d.ctrlKey){this.showPrevMonth()}else{this.update(this.activeDate.add("d",-1))}},right:function(d){if(d.ctrlKey){this.showNextMonth()}else{this.update(this.activeDate.add("d",1))}},up:function(d){if(d.ctrlKey){this.showNextYear()}else{this.update(this.activeDate.add("d",-7))}},down:function(d){if(d.ctrlKey){this.showPrevYear()}else{this.update(this.activeDate.add("d",7))}},pageUp:function(d){this.showNextMonth()},pageDown:function(d){this.showPrevMonth()},enter:function(d){d.stopPropagation();return true},scope:this});this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button({text:" ",tooltip:this.monthYearText,renderTo:this.el.child("td.x-date-middle",true)});this.mbtn.el.child("em").addClass("x-btn-arrow");if(this.showToday){this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);var g=(new Date()).dateFormat(this.format);this.todayBtn=new Ext.Button({renderTo:this.el.child("td.x-date-bottom",true),text:String.format(this.todayText,g),tooltip:String.format(this.todayTip,g),handler:this.selectToday,scope:this})}this.mon(this.eventEl,"mousewheel",this.handleMouseWheel,this);this.mon(this.eventEl,"click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.mon(this.mbtn,"click",this.showMonthPicker,this);this.onEnable(true)},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var a=[''];for(var b=0;b<6;b++){a.push('",'",b===0?'':'')}a.push('","
',Date.getShortMonthName(b),"',Date.getShortMonthName(b+6),"
");this.monthPicker.update(a.join(""));this.mon(this.monthPicker,"click",this.onMonthClick,this);this.mon(this.monthPicker,"dblclick",this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select("td.x-date-mp-month");this.mpYears=this.monthPicker.select("td.x-date-mp-year");this.mpMonths.each(function(c,d,e){e+=1;if((e%2)===0){c.dom.xmonth=5+Math.round(e*0.5)}else{c.dom.xmonth=Math.round((e-1)*0.5)}})}},showMonthPicker:function(){if(!this.disabled){this.createMonthPicker();var a=this.el.getSize();this.monthPicker.setSize(a);this.monthPicker.child("table").setSize(a);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn("t",{duration:0.2})}},updateMPYear:function(e){this.mpyear=e;var c=this.mpYears.elements;for(var b=1;b<=10;b++){var d=c[b-1],a;if((b%2)===0){a=e+Math.round(b*0.5);d.firstChild.innerHTML=a;d.xyear=a}else{a=e-(5-Math.round(b*0.5));d.firstChild.innerHTML=a;d.xyear=a}this.mpYears.item(b-1)[a==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")}},updateMPMonth:function(a){this.mpMonths.each(function(b,c,d){b[b.dom.xmonth==a?"addClass":"removeClass"]("x-date-mp-sel")})},selectMPMonth:function(a){},onMonthClick:function(g,b){g.stopEvent();var c=new Ext.Element(b),a;if(c.is("button.x-date-mp-cancel")){this.hideMonthPicker()}else{if(c.is("button.x-date-mp-ok")){var h=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());if(h.getMonth()!=this.mpSelMonth){h=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth()}this.update(h);this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-month",2))){this.mpMonths.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelMonth=a.dom.xmonth}else{if((a=c.up("td.x-date-mp-year",2))){this.mpYears.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelYear=a.dom.xyear}else{if(c.is("a.x-date-mp-prev")){this.updateMPYear(this.mpyear-10)}else{if(c.is("a.x-date-mp-next")){this.updateMPYear(this.mpyear+10)}}}}}}},onMonthDblClick:function(d,b){d.stopEvent();var c=new Ext.Element(b),a;if((a=c.up("td.x-date-mp-month",2))){this.update(new Date(this.mpSelYear,a.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-year",2))){this.update(new Date(a.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}}},hideMonthPicker:function(a){if(this.monthPicker){if(a===true){this.monthPicker.hide()}else{this.monthPicker.slideOut("t",{duration:0.2})}}},showPrevMonth:function(a){this.update(this.activeDate.add("mo",-1))},showNextMonth:function(a){this.update(this.activeDate.add("mo",1))},showPrevYear:function(){this.update(this.activeDate.add("y",-1))},showNextYear:function(){this.update(this.activeDate.add("y",1))},handleMouseWheel:function(a){a.stopEvent();if(!this.disabled){var b=a.getWheelDelta();if(b>0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(b,a){b.stopEvent();if(!this.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasClass("x-date-disabled")){this.cancelFocus=this.focusOnSelect===false;this.setValue(new Date(a.dateValue));delete this.cancelFocus;this.fireEvent("select",this,this.value)}},selectToday:function(){if(this.todayBtn&&!this.todayBtn.disabled){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value)}},update:function(G,A){if(this.rendered){var a=this.activeDate,p=this.isVisible();this.activeDate=G;if(!A&&a&&this.el){var o=G.getTime();if(a.getMonth()==G.getMonth()&&a.getFullYear()==G.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(d){if(d.dom.firstChild.dateValue==o){d.addClass("x-date-selected");if(p&&!this.cancelFocus){Ext.fly(d.dom.firstChild).focus(50)}return false}},this);return}}var k=G.getDaysInMonth(),q=G.getFirstDateOfMonth(),g=q.getDay()-this.startDay;if(g<0){g+=7}k+=g;var B=G.add("mo",-1),h=B.getDaysInMonth()-g,e=this.cells.elements,r=this.textNodes,D=(new Date(B.getFullYear(),B.getMonth(),h,this.initHour)),C=new Date().clearTime().getTime(),v=G.clearTime(true).getTime(),u=this.minDate?this.minDate.clearTime(true):Number.NEGATIVE_INFINITY,y=this.maxDate?this.maxDate.clearTime(true):Number.POSITIVE_INFINITY,F=this.disabledDatesRE,s=this.disabledDatesText,I=this.disabledDays?this.disabledDays.join(""):false,E=this.disabledDaysText,z=this.format;if(this.showToday){var m=new Date().clearTime(),c=(my||(F&&z&&F.test(m.dateFormat(z)))||(I&&I.indexOf(m.getDay())!=-1));if(!this.disabled){this.todayBtn.setDisabled(c);this.todayKeyListener[c?"disable":"enable"]()}}var l=function(J,d){d.title="";var i=D.clearTime(true).getTime();d.firstChild.dateValue=i;if(i==C){d.className+=" x-date-today";d.title=J.todayText}if(i==v){d.className+=" x-date-selected";if(p){Ext.fly(d.firstChild).focus(50)}}if(iy){d.className=" x-date-disabled";d.title=J.maxText;return}if(I){if(I.indexOf(D.getDay())!=-1){d.title=E;d.className=" x-date-disabled"}}if(F&&z){var w=D.dateFormat(z);if(F.test(w)){d.title=s.replace("%0",w);d.className=" x-date-disabled"}}};var x=0;for(;x=a.value){d=a.value}}c.setValue(b,d,false);c.fireEvent("drag",c,g,this)},getNewValue:function(){var a=this.slider,b=a.innerEl.translatePoints(this.tracker.getXY());return Ext.util.Format.round(a.reverseValue(b.left),a.decimalPrecision)},onDragEnd:function(c){var a=this.slider,b=this.value;this.el.removeClass("x-slider-thumb-drag");this.dragging=false;a.fireEvent("dragend",a,c);if(this.dragStartValue!=b){a.fireEvent("changecomplete",a,b,this)}},destroy:function(){Ext.destroyMembers(this,"tracker","el")}});Ext.slider.MultiSlider=Ext.extend(Ext.BoxComponent,{vertical:false,minValue:0,maxValue:100,decimalPrecision:0,keyIncrement:1,increment:0,clickRange:[5,15],clickToChange:true,animate:true,constrainThumbs:true,topThumbZIndex:10000,initComponent:function(){if(!Ext.isDefined(this.value)){this.value=this.minValue}this.thumbs=[];Ext.slider.MultiSlider.superclass.initComponent.call(this);this.keyIncrement=Math.max(this.increment,this.keyIncrement);this.addEvents("beforechange","change","changecomplete","dragstart","drag","dragend");if(this.values==undefined||Ext.isEmpty(this.values)){this.values=[0]}var a=this.values;for(var b=0;bthis.clickRange[0]&&c.top=c){d+=c}else{if(a*2<-c){d-=c}}}return d.constrain(this.minValue,this.maxValue)},afterRender:function(){Ext.slider.MultiSlider.superclass.afterRender.apply(this,arguments);for(var c=0;ce?e:c.value}this.syncThumb()},setValue:function(d,c,b,g){var a=this.thumbs[d],e=a.el;c=this.normalizeValue(c);if(c!==a.value&&this.fireEvent("beforechange",this,c,a.value,a)!==false){a.value=c;if(this.rendered){this.moveThumb(d,this.translateValue(c),b!==false);this.fireEvent("change",this,c,a);if(g){this.fireEvent("changecomplete",this,c,a)}}}},translateValue:function(a){var b=this.getRatio();return(a*b)-(this.minValue*b)-this.halfThumb},reverseValue:function(b){var a=this.getRatio();return(b+(this.minValue*a))/a},moveThumb:function(d,c,b){var a=this.thumbs[d].el;if(!b||this.animate===false){a.setLeft(c)}else{a.shift({left:c,stopFx:true,duration:0.35})}},focus:function(){this.focusEl.focus(10)},onResize:function(c,e){var b=this.thumbs,a=b.length,d=0;for(;dthis.clickRange[0]&&c.left','
','
','
',"
 
","
","
",'
',"
 
","
","
","");this.el=a?c.insertBefore(a,{cls:this.baseCls},true):c.append(d,{cls:this.baseCls},true);if(this.id){this.el.dom.id=this.id}var b=this.el.dom.firstChild;this.progressBar=Ext.get(b.firstChild);if(this.textEl){this.textEl=Ext.get(this.textEl);delete this.textTopEl}else{this.textTopEl=Ext.get(this.progressBar.dom.firstChild);var e=Ext.get(b.childNodes[1]);this.textTopEl.setStyle("z-index",99).addClass("x-hidden");this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,e.dom.firstChild]);this.textEl.setWidth(b.offsetWidth)}this.progressBar.setHeight(b.offsetHeight)},afterRender:function(){Ext.ProgressBar.superclass.afterRender.call(this);if(this.value){this.updateProgress(this.value,this.text)}else{this.updateText(this.text)}},updateProgress:function(c,d,b){this.value=c||0;if(d){this.updateText(d)}if(this.rendered&&!this.isDestroyed){var a=Math.floor(c*this.el.dom.firstChild.offsetWidth);this.progressBar.setWidth(a,b===true||(b!==false&&this.animate));if(this.textTopEl){this.textTopEl.removeClass("x-hidden").setWidth(a)}}this.fireEvent("update",this,c,d);return this},wait:function(b){if(!this.waitTimer){var a=this;b=b||{};this.updateText(b.text);this.waitTimer=Ext.TaskMgr.start({run:function(c){var d=b.increment||10;c-=1;this.updateProgress(((((c+d)%d)+1)*(100/d))*0.01,null,b.animate)},interval:b.interval||1000,duration:b.duration,onStop:function(){if(b.fn){b.fn.apply(b.scope||this)}this.reset()},scope:a})}return this},isWaiting:function(){return this.waitTimer!==null},updateText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text)}return this},syncProgressBar:function(){if(this.value){this.updateProgress(this.value,this.text)}return this},setSize:function(a,c){Ext.ProgressBar.superclass.setSize.call(this,a,c);if(this.textTopEl){var b=this.el.dom.firstChild;this.textEl.setSize(b.offsetWidth,b.offsetHeight)}this.syncProgressBar();return this},reset:function(a){this.updateProgress(0);if(this.textTopEl){this.textTopEl.addClass("x-hidden")}this.clearTimer();if(a===true){this.hide()}return this},clearTimer:function(){if(this.waitTimer){this.waitTimer.onStop=null;Ext.TaskMgr.stop(this.waitTimer);this.waitTimer=null}},onDestroy:function(){this.clearTimer();if(this.rendered){if(this.textEl.isComposite){this.textEl.clear()}Ext.destroyMembers(this,"textEl","progressBar","textTopEl")}Ext.ProgressBar.superclass.onDestroy.call(this)}});Ext.reg("progress",Ext.ProgressBar);(function(){var a=Ext.EventManager;var b=Ext.lib.Dom;Ext.dd.DragDrop=function(e,c,d){if(e){this.init(e,c,d)}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(c,d){},startDrag:function(c,d){},b4Drag:function(c){},onDrag:function(c){},onDragEnter:function(c,d){},b4DragOver:function(c){},onDragOver:function(c,d){},b4DragOut:function(c){},onDragOut:function(c,d){},b4DragDrop:function(c){},onDragDrop:function(c,d){},onInvalidDrop:function(c){},b4EndDrag:function(c){},endDrag:function(c){},b4MouseDown:function(c){},onMouseDown:function(c){},onMouseUp:function(c){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(j,h,o){if(Ext.isNumber(h)){h={left:h,right:h,top:h,bottom:h}}h=h||this.defaultPadding;var l=Ext.get(this.getEl()).getBox(),d=Ext.get(j),n=d.getScroll(),k,e=d.dom;if(e==document.body){k={x:n.left,y:n.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}}else{var m=d.getXY();k={x:m[0],y:m[1],width:e.clientWidth,height:e.clientHeight}}var i=l.y-k.y,g=l.x-k.x;this.resetConstraints();this.setXConstraint(g-(h.left||0),k.width-g-l.width-(h.right||0),this.xTickSize);this.setYConstraint(i-(h.top||0),k.height-i-l.height-(h.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(e,c,d){this.initTarget(e,c,d);a.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(e,c,d){this.config=d||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof e!=="string"){e=Ext.id(e)}this.id=e;this.addToGroup((c)?c:"default");this.handleElId=e;this.setDragElId(e);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(e,c,g,d){if(!c&&0!==c){this.padding=[e,e,e,e]}else{if(!g&&0!==g){this.padding=[e,c,e,c]}else{this.padding=[e,c,g,d]}}},setInitPosition:function(g,e){var h=this.getEl();if(!this.DDM.verifyEl(h)){return}var d=g||0;var c=e||0;var i=b.getXY(h);this.initPageX=i[0]-d;this.initPageY=i[1]-c;this.lastPageX=i[0];this.lastPageY=i[1];this.setStartPosition(i)},setStartPosition:function(d){var c=d||b.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=c[0];this.startPageY=c[1]},addToGroup:function(c){this.groups[c]=true;this.DDM.regDragDrop(this,c)},removeFromGroup:function(c){if(this.groups[c]){delete this.groups[c]}this.DDM.removeDDFromGroup(this,c)},setDragElId:function(c){this.dragElId=c},setHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.handleElId=c;this.DDM.regHandle(this.id,c)},setOuterHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}a.on(c,"mousedown",this.handleMouseDown,this);this.setHandleElId(c);this.hasOuterHandles=true},unreg:function(){a.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDM.isLocked()||this.locked)},handleMouseDown:function(g,d){if(this.primaryButtonOnly&&g.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(g),Ext.lib.Event.getPageY(g));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(g)){this.setStartPosition();this.b4MouseDown(g);this.onMouseDown(g);this.DDM.handleMouseDown(g,this);this.DDM.stopEvent(g)}else{}}},clickValidator:function(d){var c=d.getTarget();return(this.isValidHandleChild(c)&&(this.id==this.handleElId||this.DDM.handleWasClicked(c,this.id)))},addInvalidHandleType:function(c){var d=c.toUpperCase();this.invalidHandleTypes[d]=d},addInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.invalidHandleIds[c]=c},addInvalidHandleClass:function(c){this.invalidHandleClasses.push(c)},removeInvalidHandleType:function(c){var d=c.toUpperCase();delete this.invalidHandleTypes[d]},removeInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}delete this.invalidHandleIds[c]},removeInvalidHandleClass:function(d){for(var e=0,c=this.invalidHandleClasses.length;e=this.minX;d=d-c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}for(d=this.initPageX;d<=this.maxX;d=d+c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(g,c){this.yTicks=[];this.yTickSize=c;var e={};for(var d=this.initPageY;d>=this.minY;d=d-c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}for(d=this.initPageY;d<=this.maxY;d=d+c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(e,d,c){this.leftConstraint=e;this.rightConstraint=d;this.minX=this.initPageX-e;this.maxX=this.initPageX+d;if(c){this.setXTicks(this.initPageX,c)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(c,e,d){this.topConstraint=c;this.bottomConstraint=e;this.minY=this.initPageY-c;this.maxY=this.initPageY+e;if(d){this.setYTicks(this.initPageY,d)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var d=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var c=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(d,c)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(k,g){if(!g){return k}else{if(g[0]>=k){return g[0]}else{for(var d=0,c=g.length;d=k){var j=k-g[d];var h=g[e]-k;return(h>j)?g[d]:g[e]}}return g[g.length-1]}}},toString:function(){return("DragDrop "+this.id)}}})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var a=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(d,c){for(var e in this.ids){for(var b in this.ids[e]){var g=this.ids[e][b];if(!this.isTypeOfDD(g)){continue}g[d].apply(g,c)}}},_onLoad:function(){this.init();a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(b){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(c,b){if(!this.initialized){this.init()}if(!this.ids[b]){this.ids[b]={}}this.ids[b][c.id]=c},removeDDFromGroup:function(d,b){if(!this.ids[b]){this.ids[b]={}}var c=this.ids[b];if(c&&c[d.id]){delete c[d.id]}},_remove:function(c){for(var b in c.groups){if(b&&this.ids[b]&&this.ids[b][c.id]){delete this.ids[b][c.id]}}delete this.handleIds[c.id]},regHandle:function(c,b){if(!this.handleIds[c]){this.handleIds[c]={}}this.handleIds[c][b]=b},isDragDrop:function(b){return(this.getDDById(b))?true:false},getRelated:function(h,c){var g=[];for(var e in h.groups){for(var d in this.ids[e]){var b=this.ids[e][d];if(!this.isTypeOfDD(b)){continue}if(!c||b.isTarget){g[g.length]=b}}}return g},isLegalTarget:function(g,e){var c=this.getRelated(g,true);for(var d=0,b=c.length;dthis.clickPixelThresh||b>this.clickPixelThresh){this.startDrag(this.startX,this.startY)}}if(this.dragThreshMet){this.dragCurrent.b4Drag(d);this.dragCurrent.onDrag(d);if(!this.dragCurrent.moveOnly){this.fireEvents(d,false)}}this.stopEvent(d);return true},fireEvents:function(n,o){var q=this.dragCurrent;if(!q||q.isLocked()){return}var r=n.getPoint();var b=[];var g=[];var l=[];var j=[];var d=[];for(var h in this.dragOvers){var c=this.dragOvers[h];if(!this.isTypeOfDD(c)){continue}if(!this.isOverTarget(r,c,this.mode)){g.push(c)}b[h]=true;delete this.dragOvers[h]}for(var p in q.groups){if("string"!=typeof p){continue}for(h in this.ids[p]){var k=this.ids[p][h];if(!this.isTypeOfDD(k)){continue}if(k.isTarget&&!k.isLocked()&&((k!=q)||(q.ignoreSelf===false))){if(this.isOverTarget(r,k,this.mode)){if(o){j.push(k)}else{if(!b[k.id]){d.push(k)}else{l.push(k)}this.dragOvers[k.id]=k}}}}}if(this.mode){if(g.length){q.b4DragOut(n,g);q.onDragOut(n,g)}if(d.length){q.onDragEnter(n,d)}if(l.length){q.b4DragOver(n,l);q.onDragOver(n,l)}if(j.length){q.b4DragDrop(n,j);q.onDragDrop(n,j)}}else{var m=0;for(h=0,m=g.length;h2000){}else{setTimeout(b._addListeners,10);if(document&&document.body){b._timeoutCount+=1}}}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id)){return true}else{var c=b.parentNode;while(c){if(this.isHandle(d,c.id)){return true}else{c=c.parentNode}}}return false}}}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners()}Ext.dd.DD=function(c,a,b){if(c){this.init(c,a,b)}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(c,b){var a=c-this.startPageX;var d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(c,h,g){var e=this.getTargetCoord(h,g);var b=c.dom?c:Ext.fly(c,"_dd");if(!this.deltaSetXY){var i=[e.x,e.y];b.setXY(i);var d=b.getLeft(true);var a=b.getTop(true);this.deltaSetXY=[d-e.x,a-e.y]}else{b.setLeftTop(e.x+this.deltaSetXY[0],e.y+this.deltaSetXY[1])}this.cachePosition(e.x,e.y);this.autoScroll(e.x,e.y,c.offsetHeight,c.offsetWidth);return e},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(l,k,e,m){if(this.scroll){var n=Ext.lib.Dom.getViewHeight();var b=Ext.lib.Dom.getViewWidth();var p=this.DDM.getScrollTop();var d=this.DDM.getScrollLeft();var j=e+k;var o=m+l;var i=(n+p-k-this.deltaY);var g=(b+d-l-this.deltaX);var c=40;var a=(document.all)?80:30;if(j>n&&i0&&k-pb&&g0&&l-dthis.maxX){a=this.maxX}}if(this.constrainY){if(dthis.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)}});Ext.dd.DDProxy=function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var b=this;var a=document.body;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}var d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;var c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl();var a=this.getDragEl();var b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX();var c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl();var a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.dd.DDTarget=function(c,a,b){if(c){this.initTarget(c,a,b)}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{getDragEl:Ext.emptyFn,isValidHandleChild:Ext.emptyFn,startDrag:Ext.emptyFn,endDrag:Ext.emptyFn,onDrag:Ext.emptyFn,onDragDrop:Ext.emptyFn,onDragEnter:Ext.emptyFn,onDragOut:Ext.emptyFn,onDragOver:Ext.emptyFn,onInvalidDrop:Ext.emptyFn,onMouseDown:Ext.emptyFn,onMouseUp:Ext.emptyFn,setXConstraint:Ext.emptyFn,setYConstraint:Ext.emptyFn,resetConstraints:Ext.emptyFn,clearConstraints:Ext.emptyFn,clearTicks:Ext.emptyFn,setInitPosition:Ext.emptyFn,setDragElId:Ext.emptyFn,setHandleElId:Ext.emptyFn,setOuterHandleElId:Ext.emptyFn,addInvalidHandleClass:Ext.emptyFn,addInvalidHandleId:Ext.emptyFn,addInvalidHandleType:Ext.emptyFn,removeInvalidHandleClass:Ext.emptyFn,removeInvalidHandleId:Ext.emptyFn,removeInvalidHandleType:Ext.emptyFn,toString:function(){return("DDTarget "+this.id)}});Ext.dd.DragTracker=Ext.extend(Ext.util.Observable,{active:false,tolerance:5,autoStart:false,constructor:function(a){Ext.apply(this,a);this.addEvents("mousedown","mouseup","mousemove","dragstart","dragend","drag");this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el)}Ext.dd.DragTracker.superclass.constructor.call(this,a)},initEl:function(a){this.el=Ext.get(a);a.on("mousedown",this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined)},destroy:function(){this.el.un("mousedown",this.onMouseDown,this);delete this.el},onMouseDown:function(b,a){if(this.fireEvent("mousedown",this,b)!==false&&this.onBeforeStart(b)!==false){this.startXY=this.lastXY=b.getXY();this.dragTarget=this.delegate?a:this.el.dom;if(this.preventDefault!==false){b.preventDefault()}Ext.getDoc().on({scope:this,mouseup:this.onMouseUp,mousemove:this.onMouseMove,selectstart:this.stopSelect});if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this,[b])}}},onMouseMove:function(d,c){if(this.active&&Ext.isIE&&!d.browserEvent.button){d.preventDefault();this.onMouseUp(d);return}d.preventDefault();var b=d.getXY(),a=this.startXY;this.lastXY=b;if(!this.active){if(Math.abs(a[0]-b[0])>this.tolerance||Math.abs(a[1]-b[1])>this.tolerance){this.triggerStart(d)}else{return}}this.fireEvent("mousemove",this,d);this.onDrag(d);this.fireEvent("drag",this,d)},onMouseUp:function(c){var b=Ext.getDoc(),a=this.active;b.un("mousemove",this.onMouseMove,this);b.un("mouseup",this.onMouseUp,this);b.un("selectstart",this.stopSelect,this);c.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent("mouseup",this,c);if(a){this.onEnd(c);this.fireEvent("dragend",this,c)}},triggerStart:function(a){this.clearStart();this.active=true;this.onStart(a);this.fireEvent("dragstart",this,a)},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getXY:function(a){return a?this.constrainModes[a].call(this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[a[0]-b[0],a[1]-b[1]]},constrainModes:{point:function(b){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion()}var a=this.dragRegion;a.left=b[0];a.top=b[1];a.right=b[0];a.bottom=b[1];a.constrainTo(this.elRegion);return[a.left,a.top]}}});Ext.dd.ScrollManager=function(){var c=Ext.dd.DragDropMgr;var e={};var b=null;var i={};var h=function(l){b=null;a()};var j=function(){if(c.dragCurrent){c.refreshCache(c.dragCurrent.groups)}};var d=function(){if(c.dragCurrent){var l=Ext.dd.ScrollManager;var m=i.el.ddScrollConfig?i.el.ddScrollConfig.increment:l.increment;if(!l.animate){if(i.el.scroll(i.dir,m)){j()}}else{i.el.scroll(i.dir,m,true,l.animDuration,j)}}};var a=function(){if(i.id){clearInterval(i.id)}i.id=0;i.el=null;i.dir=""};var g=function(m,l){a();i.el=m;i.dir=l;var o=m.ddScrollConfig?m.ddScrollConfig.ddGroup:undefined,n=(m.ddScrollConfig&&m.ddScrollConfig.frequency)?m.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;if(o===undefined||c.dragCurrent.ddGroup==o){i.id=setInterval(d,n)}};var k=function(o,q){if(q||!c.dragCurrent){return}var s=Ext.dd.ScrollManager;if(!b||b!=c.dragCurrent){b=c.dragCurrent;s.refreshCache()}var t=Ext.lib.Event.getXY(o);var u=new Ext.lib.Point(t[0],t[1]);for(var m in e){var n=e[m],l=n._region;var p=n.ddScrollConfig?n.ddScrollConfig:s;if(l&&l.contains(u)&&n.isScrollable()){if(l.bottom-u.y<=p.vthresh){if(i.el!=n){g(n,"down")}return}else{if(l.right-u.x<=p.hthresh){if(i.el!=n){g(n,"left")}return}else{if(u.y-l.top<=p.vthresh){if(i.el!=n){g(n,"up")}return}else{if(u.x-l.left<=p.hthresh){if(i.el!=n){g(n,"right")}return}}}}}}a()};c.fireEvents=c.fireEvents.createSequence(k,c);c.stopDrag=c.stopDrag.createSequence(h,c);return{register:function(n){if(Ext.isArray(n)){for(var m=0,l=n.length;m]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}};Ext.data.Record=function(a,b){this.id=(b||b===0)?b:Ext.data.Record.id(this);this.data=a||{}};Ext.data.Record.create=function(e){var c=Ext.extend(Ext.data.Record,{});var d=c.prototype;d.fields=new Ext.util.MixedCollection(false,function(g){return g.name});for(var b=0,a=e.length;b-1){a.join(null);this.data.removeAt(b)}if(this.pruneModifiedRecords){this.modified.remove(a)}if(this.snapshot){this.snapshot.remove(a)}if(b>-1){this.fireEvent("remove",this,a,b)}},removeAt:function(a){this.remove(this.getAt(a))},removeAll:function(b){var a=[];this.each(function(c){a.push(c)});this.clearData();if(this.snapshot){this.snapshot.clear()}if(this.pruneModifiedRecords){this.modified=[]}if(b!==true){this.fireEvent("clear",this,a)}},onClear:function(b,a){Ext.each(a,function(d,c){this.destroyRecord(this,d,c)},this)},insert:function(d,c){var e,a,b;c=[].concat(c);for(e=0,a=c.length;e=0;d--){if(b[d].phantom===true){var a=b.splice(d,1).shift();if(a.isValid()){g.push(a)}}else{if(!b[d].isValid()){b.splice(d,1)}}}if(g.length){h.push(["create",g])}if(b.length){h.push(["update",b])}}j=h.length;if(j){e=++this.batchCounter;for(d=0;d=0;b--){this.modified.splice(this.modified.indexOf(a[b]),1)}}else{this.modified.splice(this.modified.indexOf(a),1)}},reMap:function(b){if(Ext.isArray(b)){for(var d=0,a=b.length;d=0;c--){this.insert(b[c].lastIndex,b[c])}}},handleException:function(a){Ext.handleError(a)},reload:function(a){this.load(Ext.applyIf(a||{},this.lastOptions))},loadRecords:function(b,l,h){var e,g;if(this.isDestroyed===true){return}if(!b||h===false){if(h!==false){this.fireEvent("load",this,[],l)}if(l.callback){l.callback.call(l.scope||this,[],l,false,b)}return}var a=b.records,j=b.totalRecords||a.length;if(!l||l.add!==true){if(this.pruneModifiedRecords){this.modified=[]}for(e=0,g=a.length;e-1){this.doUpdate(d)}else{k.push(d);++c}}this.totalLength=Math.max(j,this.data.length+c);this.add(k)}this.fireEvent("load",this,a,l);if(l.callback){l.callback.call(l.scope||this,a,l,true)}},loadData:function(c,a){var b=this.reader.readRecords(c);this.loadRecords(b,{add:a},true)},getCount:function(){return this.data.length||0},getTotalCount:function(){return this.totalLength||0},getSortState:function(){return this.sortInfo},applySort:function(){if((this.sortInfo||this.multiSortInfo)&&!this.remoteSort){this.sortData()}},sortData:function(){var a=this.hasMultiSort?this.multiSortInfo:this.sortInfo,k=a.direction||"ASC",h=a.sorters,c=[];if(!this.hasMultiSort){h=[{direction:k,field:a.field}]}for(var d=0,b=h.length;d1){for(var p=1,o=c.length;ph?1:(i=0;b--){if(Ext.isArray(c)){this.realize(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.realize(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(!this.isData(c)){throw new Ext.data.DataReader.Error("realize",a)}a.phantom=false;a._phid=a.id;a.id=this.getId(c);a.data=c;a.commit();a.store.reMap(a)}},update:function(a,c){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){if(Ext.isArray(c)){this.update(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.update(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(this.isData(c)){a.data=Ext.apply(a.data,c)}a.commit()}},extractData:function(k,a){var j=(this instanceof Ext.data.JsonReader)?"json":"node";var c=[];if(this.isData(k)&&!(this instanceof Ext.data.XmlReader)){k=[k]}var h=this.recordType.prototype.fields,o=h.items,m=h.length,c=[];if(a===true){var l=this.recordType;for(var e=0;e=0){return new Function("obj","return obj"+(b>0?".":"")+c)}return function(d){return d[c]}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<\u003fxml version="{version}" encoding="{encoding}"\u003f><{documentRoot}><{name}>{value}<{root}><{parent.record}><{name}>{value}',render:function(b,c,a){c=this.toArray(c);b.xmlData=this.tpl.applyTemplate({version:this.xmlVersion,encoding:this.xmlEncoding,documentRoot:(c.length>0||this.forceDocumentRoot===true)?this.documentRoot:false,record:this.meta.record,root:this.root,baseParams:c,records:(Ext.isArray(a[0]))?a:[a]})},createRecord:function(a){return this.toArray(this.toHash(a))},updateRecord:function(a){return this.toArray(this.toHash(a))},destroyRecord:function(b){var a={};a[this.meta.idProperty]=b.id;return this.toArray(a)}});Ext.data.XmlReader=function(a,b){a=a||{};Ext.applyIf(a,{idProperty:a.idProperty||a.idPath||a.id,successProperty:a.successProperty||a.success});Ext.data.XmlReader.superclass.constructor.call(this,a,b||a.fields)};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(a){var b=a.responseXML;if(!b){throw {message:"XmlReader.read: XML Document not available"}}return this.readRecords(b)},readRecords:function(d){this.xmlData=d;var a=d.documentElement||d,c=Ext.DomQuery,g=0,e=true;if(this.meta.totalProperty){g=this.getTotal(a,0)}if(this.meta.successProperty){e=this.getSuccess(a)}var b=this.extractData(c.select(this.meta.record,a),true);return{success:e,records:b,totalRecords:g||b.length}},readResponse:function(g,b){var e=Ext.DomQuery,h=b.responseXML,a=h.documentElement||h;var c=new Ext.data.Response({action:g,success:this.getSuccess(a),message:this.getMessage(a),data:this.extractData(e.select(this.meta.record,a)||e.select(this.meta.root,a),false),raw:h});if(Ext.isEmpty(c.success)){throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)}if(g===Ext.data.Api.actions.create){var d=Ext.isDefined(c.data);if(d&&Ext.isEmpty(c.data)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!d){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}return c},getSuccess:function(){return true},buildExtractors:function(){if(this.ef){return}var l=this.meta,h=this.recordType,e=h.prototype.fields,k=e.items,j=e.length;if(l.totalProperty){this.getTotal=this.createAccessor(l.totalProperty)}if(l.successProperty){this.getSuccess=this.createAccessor(l.successProperty)}if(l.messageProperty){this.getMessage=this.createAccessor(l.messageProperty)}this.getRoot=function(g){return(!Ext.isEmpty(g[this.meta.record]))?g[this.meta.record]:g[this.meta.root]};if(l.idPath||l.idProperty){var d=this.createAccessor(l.idPath||l.idProperty);this.getId=function(g){var i=d(g)||g.id;return(i===undefined||i==="")?null:i}}else{this.getId=function(){return null}}var c=[];for(var b=0;b0&&c[0].field==this.groupField){c.shift()}this.groupField=e;this.groupDir=d;this.applyGroupField();var b=function(){this.fireEvent("groupchange",this,this.getGroupState())};if(this.groupOnSort){this.sort(e,d);b.call(this);return}if(this.remoteGroup){this.on("load",b,this,{single:true});this.reload()}else{this.sort(c);b.call(this)}},sort:function(h,c){if(this.remoteSort){return Ext.data.GroupingStore.superclass.sort.call(this,h,c)}var g=[];if(Ext.isArray(arguments[0])){g=arguments[0]}else{if(h==undefined){g=this.sortInfo?[this.sortInfo]:[]}else{var e=this.fields.get(h);if(!e){return false}var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;if(!c){if(a&&a.field==b){c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")}else{c=e.sortDir}}this.sortToggle[b]=c;this.sortInfo={field:b,direction:c};g=[this.sortInfo]}}if(this.groupField){g.unshift({direction:this.groupDir,field:this.groupField})}return this.multiSort.call(this,g,c)},applyGroupField:function(){if(this.remoteGroup){if(!this.baseParams){this.baseParams={}}Ext.apply(this.baseParams,{groupBy:this.groupField,groupDir:this.groupDir});var a=this.lastOptions;if(a&&a.params){a.params.groupDir=this.groupDir;delete a.params.groupBy}}},applyGrouping:function(a){if(this.groupField!==false){this.groupBy(this.groupField,true,this.groupDir);return true}else{if(a===true){this.fireEvent("datachanged",this)}return false}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField}});Ext.reg("groupingstore",Ext.data.GroupingStore);Ext.data.DirectProxy=function(a){Ext.apply(this,a);if(typeof this.paramOrder=="string"){this.paramOrder=this.paramOrder.split(/[\s,|]/)}Ext.data.DirectProxy.superclass.constructor.call(this,a)};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,doRequest:function(b,c,a,e,k,l,n){var j=[],h=this.api[b]||this.directFn;switch(b){case Ext.data.Api.actions.create:j.push(a.jsonData);break;case Ext.data.Api.actions.read:if(h.directCfg.method.len>0){if(this.paramOrder){for(var d=0,g=this.paramOrder.length;d1){for(var d=0,b=c.length;d0){this.doSend(a==1?this.callBuffer[0]:this.callBuffer);this.callBuffer=[]}},queueTransaction:function(a){if(a.form){this.processForm(a);return}this.callBuffer.push(a);if(this.enableBuffer){if(!this.callTask){this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this)}this.callTask.delay(Ext.isNumber(this.enableBuffer)?this.enableBuffer:10)}else{this.combineAndSend()}},doCall:function(i,a,b){var h=null,e=b[a.len],g=b[a.len+1];if(a.len!==0){h=b.slice(0,a.len)}var d=new Ext.Direct.Transaction({provider:this,args:b,action:i,method:a.name,data:h,cb:g&&Ext.isFunction(e)?e.createDelegate(g):e});if(this.fireEvent("beforecall",this,d,a)!==false){Ext.Direct.addTransaction(d);this.queueTransaction(d);this.fireEvent("call",this,d,a)}},doForm:function(j,b,g,i,e){var d=new Ext.Direct.Transaction({provider:this,action:j,method:b.name,args:[g,i,e],cb:e&&Ext.isFunction(i)?i.createDelegate(e):i,isForm:true});if(this.fireEvent("beforecall",this,d,b)!==false){Ext.Direct.addTransaction(d);var a=String(g.getAttribute("enctype")).toLowerCase()=="multipart/form-data",h={extTID:d.tid,extAction:j,extMethod:b.name,extType:"rpc",extUpload:String(a)};Ext.apply(d,{form:Ext.getDom(g),isUpload:a,params:i&&Ext.isObject(i.params)?Ext.apply(h,i.params):h});this.fireEvent("call",this,d,b);this.processForm(d)}},processForm:function(a){Ext.Ajax.request({url:this.url,params:a.params,callback:this.onData,scope:this,form:a.form,isUpload:a.isUpload,ts:a})},createMethod:function(d,a){var b;if(!a.formHandler){b=function(){this.doCall(d,a,Array.prototype.slice.call(arguments,0))}.createDelegate(this)}else{b=function(e,g,c){this.doForm(d,a,e,g,c)}.createDelegate(this)}b.directCfg={action:d,method:a};return b},getTransaction:function(a){return a&&a.tid?Ext.Direct.getTransaction(a.tid):null},doCallback:function(c,g){var d=g.status?"success":"failure";if(c&&c.cb){var b=c.cb,a=Ext.isDefined(g.result)?g.result:g.data;if(Ext.isFunction(b)){b(a,g)}else{Ext.callback(b[d],b.scope,[a,g]);Ext.callback(b.callback,b.scope,[a,g])}}}});Ext.Direct.PROVIDERS.remoting=Ext.direct.RemotingProvider;Ext.Resizable=Ext.extend(Ext.util.Observable,{constructor:function(d,e){this.el=Ext.get(d);if(e&&e.wrap){e.resizeChild=this.el;this.el=this.el.wrap(typeof e.wrap=="object"?e.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=e.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(e.resizeChild.getPositioning());e.resizeChild.clearPositioning();if(!e.width||!e.height){var g=e.resizeChild.getSize();this.el.setSize(g.width,g.height)}if(e.pinned&&!e.adjustments){e.adjustments="auto"}}this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"},Ext.getBody());this.proxy.unselectable();this.proxy.enableDisplayMode("block");Ext.apply(this,e);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned")}var k=this.el.getStyle("position");if(k!="absolute"&&k!="fixed"){this.el.setStyle("position","relative")}if(!this.handles){this.handles="s,e,se";if(this.multiDirectional){this.handles+=",n,w"}}if(this.handles=="all"){this.handles="n s e w ne nw se sw"}var o=this.handles.split(/\s*?[,;]\s*?| /);var c=Ext.Resizable.positions;for(var j=0,l=o.length;j0){if(a>(e/2)){d=c+(e-a)}else{d=c-a}}return Math.max(b,d)},resizeElement:function(){var a=this.proxy.getBox();if(this.updateBox){this.el.setBox(a,false,this.animate,this.duration,null,this.easing)}else{this.el.setSize(a.width,a.height,this.animate,this.duration,null,this.easing)}this.updateChildSize();if(!this.dynamic){this.proxy.hide()}if(this.draggable&&this.constrainTo){this.dd.resetConstraints();this.dd.constrainTo(this.constrainTo)}return a},constrain:function(b,c,a,d){if(b-cd){c=b-d}}return c},onMouseMove:function(z){if(this.enabled&&this.activeHandle){try{if(this.resizeRegion&&!this.resizeRegion.contains(z.getPoint())){return}var t=this.curSize||this.startBox,l=this.startBox.x,k=this.startBox.y,c=l,b=k,m=t.width,u=t.height,d=m,o=u,n=this.minWidth,A=this.minHeight,s=this.maxWidth,D=this.maxHeight,i=this.widthIncrement,a=this.heightIncrement,B=z.getXY(),r=-(this.startPoint[0]-Math.max(this.minX,B[0])),p=-(this.startPoint[1]-Math.max(this.minY,B[1])),j=this.activeHandle.position,E,g;switch(j){case"east":m+=r;m=Math.min(Math.max(n,m),s);break;case"south":u+=p;u=Math.min(Math.max(A,u),D);break;case"southeast":m+=r;u+=p;m=Math.min(Math.max(n,m),s);u=Math.min(Math.max(A,u),D);break;case"north":p=this.constrain(u,p,A,D);k+=p;u-=p;break;case"west":r=this.constrain(m,r,n,s);l+=r;m-=r;break;case"northeast":m+=r;m=Math.min(Math.max(n,m),s);p=this.constrain(u,p,A,D);k+=p;u-=p;break;case"northwest":r=this.constrain(m,r,n,s);p=this.constrain(u,p,A,D);k+=p;u-=p;l+=r;m-=r;break;case"southwest":r=this.constrain(m,r,n,s);u+=p;u=Math.min(Math.max(A,u),D);l+=r;m-=r;break}var q=this.snap(m,i,n);var C=this.snap(u,a,A);if(q!=m||C!=u){switch(j){case"northeast":k-=C-u;break;case"north":k-=C-u;break;case"southwest":l-=q-m;break;case"west":l-=q-m;break;case"northwest":l-=q-m;k-=C-u;break}m=q;u=C}if(this.preserveRatio){switch(j){case"southeast":case"east":u=o*(m/d);u=Math.min(Math.max(A,u),D);m=d*(u/o);break;case"south":m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);break;case"northeast":m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);break;case"north":E=m;m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);l+=(E-m)/2;break;case"southwest":u=o*(m/d);u=Math.min(Math.max(A,u),D);E=m;m=d*(u/o);l+=E-m;break;case"west":g=u;u=o*(m/d);u=Math.min(Math.max(A,u),D);k+=(g-u)/2;E=m;m=d*(u/o);l+=E-m;break;case"northwest":E=m;g=u;u=o*(m/d);u=Math.min(Math.max(A,u),D);m=d*(u/o);k+=g-u;l+=E-m;break}}this.proxy.setBounds(l,k,m,u);if(this.dynamic){this.resizeElement()}}catch(v){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over")}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over")}},getEl:function(){return this.el},getResizeChild:function(){return this.resizeChild},destroy:function(b){Ext.destroy(this.dd,this.overlay,this.proxy);this.overlay=null;this.proxy=null;var c=Ext.Resizable.positions;for(var a in c){if(typeof c[a]!="function"&&this[c[a]]){this[c[a]].destroy()}}if(b){this.el.update("");Ext.destroy(this.el);this.el=null}this.purgeListeners()},syncHandleHeight:function(){var a=this.el.getHeight(true);if(this.west){this.west.el.setHeight(a)}if(this.east){this.east.el.setHeight(a)}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=Ext.extend(Object,{constructor:function(d,g,c,e,a){if(!this.tpl){var b=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});b.compile();Ext.Resizable.Handle.prototype.tpl=b}this.position=g;this.rz=d;this.el=this.tpl.append(d.el.dom,[this.position],true);this.el.unselectable();if(e){this.el.setOpacity(0)}if(!Ext.isEmpty(a)){this.el.addClass(a)}this.el.on("mousedown",this.onMouseDown,this);if(!c){this.el.on({scope:this,mouseover:this.onMouseOver,mouseout:this.onMouseOut})}},afterResize:function(a){},onMouseDown:function(a){this.rz.onMouseDown(this,a)},onMouseOver:function(a){this.rz.handleOver(this,a)},onMouseOut:function(a){this.rz.handleOut(this,a)},destroy:function(){Ext.destroy(this.el);this.el=null}});Ext.Window=Ext.extend(Ext.Panel,{baseCls:"x-window",resizable:true,draggable:true,closable:true,closeAction:"close",constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,showAnimDuration:0.25,hideAnimDuration:0.25,collapsible:false,initHidden:undefined,hidden:true,elements:"header,body",frame:true,floating:true,initComponent:function(){this.initTools();Ext.Window.superclass.initComponent.call(this);this.addEvents("resize","maximize","minimize","restore");if(Ext.isDefined(this.initHidden)){this.hidden=this.initHidden}if(this.hidden===false){this.hidden=true;this.show()}},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox(true))},onRender:function(b,a){Ext.Window.superclass.onRender.call(this,b,a);if(this.plain){this.el.addClass("x-window-plain")}this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:" "});this.focusEl.swallowEvent("click",true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode("block");if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mon(this.mask,"click",this.focus,this)}if(this.maximizable){this.mon(this.header,"dblclick",this.toggleMaximize,this)}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget)}if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction,handleCls:"x-window-handle"});this.resizer.window=this;this.mon(this.resizer,"beforeresize",this.beforeResize,this)}if(this.draggable){this.header.addClass("x-window-draggable")}this.mon(this.el,"mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);if(this.maximized){this.maximized=false;this.maximize()}if(this.closable){var a=this.getKeyMap();a.on(27,this.onEsc,this);a.disable()}},initDraggable:function(){this.dd=new Ext.Window.DD(this)},onEsc:function(a,b){if(this.activeGhost){this.unghost()}b.stopEvent();this[this.closeAction]()},beforeDestroy:function(){if(this.rendered){this.hide();this.clearAnchor();Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask)}Ext.Window.superclass.beforeDestroy.call(this)},onDestroy:function(){if(this.manager){this.manager.unregister(this)}Ext.Window.superclass.onDestroy.call(this)},initTools:function(){if(this.minimizable){this.addTool({id:"minimize",handler:this.minimize.createDelegate(this,[])})}if(this.maximizable){this.addTool({id:"maximize",handler:this.maximize.createDelegate(this,[])});this.addTool({id:"restore",handler:this.restore.createDelegate(this,[]),hidden:true})}if(this.closable){this.addTool({id:"close",handler:this[this.closeAction].createDelegate(this,[])})}},resizerAction:function(){var a=this.proxy.getBox();this.proxy.hide();this.window.handleResize(a);return a},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox()},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint()}},handleResize:function(b){var a=this.resizeBox;if(a.x!=b.x||a.y!=b.y){this.updateBox(b)}else{this.setSize(b);if(Ext.isIE6&&Ext.isStrict){this.doLayout()}}this.focus();this.updateHandles();this.saveState()},focus:function(){var e=this.focusEl,a=this.defaultButton,c=typeof a,d,b;if(Ext.isDefined(a)){if(Ext.isNumber(a)&&this.fbar){e=this.fbar.items.get(a)}else{if(Ext.isString(a)){e=Ext.getCmp(a)}else{e=a}}d=e.getEl();b=Ext.getDom(this.container);if(d&&b){if(b!=document.body&&!Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))){return}}}e=e||this.focusEl;e.focus.defer(10,e)},setAnimateTarget:function(a){a=Ext.get(a);this.animateTarget=a},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var a=this.el.getAlignToXY(this.container,"c-c");var b=this.el.translatePoints(a[0],a[1]);this.x=this.x===undefined?b.left:this.x;this.y=this.y===undefined?b.top:this.y}this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false)}if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show()}},show:function(c,a,b){if(!this.rendered){this.render(Ext.getBody())}if(this.hidden===false){this.toFront();return this}if(this.fireEvent("beforeshow",this)===false){return this}if(a){this.on("show",a,b,{single:true})}this.hidden=false;if(Ext.isDefined(c)){this.setAnimateTarget(c)}this.beforeShow();if(this.animateTarget){this.animShow()}else{this.afterShow()}return this},afterShow:function(b){if(this.isDestroyed){return false}this.proxy.hide();this.el.setStyle("display","block");this.el.show();if(this.maximized){this.fitContainer()}if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.onWindowResize(this.onWindowResize,this)}this.doConstrain();this.doLayout();if(this.keyMap){this.keyMap.enable()}this.toFront();this.updateHandles();if(b&&(Ext.isIE||Ext.isWebKit)){var a=this.getSize();this.onResize(a.width,a.height)}this.onShow();this.fireEvent("show",this)},animShow:function(){this.proxy.show();this.proxy.setBox(this.animateTarget.getBox());this.proxy.setOpacity(0);var a=this.getBox();this.el.setStyle("display","none");this.proxy.shift(Ext.apply(a,{callback:this.afterShow.createDelegate(this,[true],false),scope:this,easing:"easeNone",duration:this.showAnimDuration,opacity:0.5}))},hide:function(c,a,b){if(this.hidden||this.fireEvent("beforehide",this)===false){return this}if(a){this.on("hide",a,b,{single:true})}this.hidden=true;if(c!==undefined){this.setAnimateTarget(c)}if(this.modal){this.mask.hide();Ext.getBody().removeClass("x-body-masked")}if(this.animateTarget){this.animHide()}else{this.el.hide();this.afterHide()}return this},afterHide:function(){this.proxy.hide();if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.removeResizeListener(this.onWindowResize,this)}if(this.keyMap){this.keyMap.disable()}this.onHide();this.fireEvent("hide",this)},animHide:function(){this.proxy.setOpacity(0.5);this.proxy.show();var a=this.getBox(false);this.proxy.setBox(a);this.el.hide();this.proxy.shift(Ext.apply(this.animateTarget.getBox(),{callback:this.afterHide,scope:this,duration:this.hideAnimDuration,easing:"easeNone",opacity:0}))},onShow:Ext.emptyFn,onHide:Ext.emptyFn,onWindowResize:function(){if(this.maximized){this.fitContainer()}if(this.modal){this.mask.setSize("100%","100%");var a=this.mask.dom.offsetHeight;this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true))}this.doConstrain()},doConstrain:function(){if(this.constrain||this.constrainHeader){var b;if(this.constrain){b={right:this.el.shadowOffset,left:this.el.shadowOffset,bottom:this.el.shadowOffset}}else{var a=this.getSize();b={right:-(a.width-100),bottom:-(a.height-25+this.el.getConstrainOffset())}}var c=this.el.getConstrainToXY(this.container,true,b);if(c){this.setPosition(c[0],c[1])}}},ghost:function(a){var c=this.createGhost(a);var b=this.getBox(true);c.setLeftTop(b.x,b.y);c.setWidth(b.width);this.el.hide();this.activeGhost=c;return c},unghost:function(b,a){if(!this.activeGhost){return}if(b!==false){this.el.show();this.focus.defer(10,this);if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}}if(a!==false){this.setPosition(this.activeGhost.getLeft(true),this.activeGhost.getTop(true))}this.activeGhost.hide();this.activeGhost.remove();delete this.activeGhost},minimize:function(){this.fireEvent("minimize",this);return this},close:function(){if(this.fireEvent("beforeclose",this)!==false){if(this.hidden){this.doClose()}else{this.hide(null,this.doClose,this)}}},doClose:function(){this.fireEvent("close",this);this.destroy()},maximize:function(){if(!this.maximized){this.expand(false);this.restoreSize=this.getSize();this.restorePos=this.getPosition(true);if(this.maximizable){this.tools.maximize.hide();this.tools.restore.show()}this.maximized=true;this.el.disableShadow();if(this.dd){this.dd.lock()}if(this.collapsible){this.tools.toggle.hide()}this.el.addClass("x-window-maximized");this.container.addClass("x-window-maximized-ct");this.setPosition(0,0);this.fitContainer();this.fireEvent("maximize",this)}return this},restore:function(){if(this.maximized){var a=this.tools;this.el.removeClass("x-window-maximized");if(a.restore){a.restore.hide()}if(a.maximize){a.maximize.show()}this.setPosition(this.restorePos[0],this.restorePos[1]);this.setSize(this.restoreSize.width,this.restoreSize.height);delete this.restorePos;delete this.restoreSize;this.maximized=false;this.el.enableShadow(true);if(this.dd){this.dd.unlock()}if(this.collapsible&&a.toggle){a.toggle.show()}this.container.removeClass("x-window-maximized-ct");this.doConstrain();this.fireEvent("restore",this)}return this},toggleMaximize:function(){return this[this.maximized?"restore":"maximize"]()},fitContainer:function(){var a=this.container.getViewSize(false);this.setSize(a.width,a.height)},setZIndex:function(a){if(this.modal){this.mask.setStyle("z-index",a)}this.el.setZIndex(++a);a+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++a)}this.lastZIndex=a},alignTo:function(b,a,c){var d=this.el.getAlignToXY(b,a,c);this.setPagePosition(d[0],d[1]);return this},anchorTo:function(c,e,d,b){this.clearAnchor();this.anchorTarget={el:c,alignment:e,offsets:d};Ext.EventManager.onWindowResize(this.doAnchor,this);var a=typeof b;if(a!="undefined"){Ext.EventManager.on(window,"scroll",this.doAnchor,this,{buffer:a=="number"?b:50})}return this.doAnchor()},doAnchor:function(){var a=this.anchorTarget;this.alignTo(a.el,a.alignment,a.offsets);return this},clearAnchor:function(){if(this.anchorTarget){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,"scroll",this.doAnchor,this);delete this.anchorTarget}return this},toFront:function(a){if(this.manager.bringToFront(this)){if(!a||!a.getTarget().focus){this.focus()}}return this},setActive:function(a){if(a){if(!this.maximized){this.el.enableShadow(true)}this.fireEvent("activate",this)}else{this.el.disableShadow();this.fireEvent("deactivate",this)}},toBack:function(){this.manager.sendToBack(this);return this},center:function(){var a=this.el.getAlignToXY(this.container,"c-c");this.setPagePosition(a[0],a[1]);return this}});Ext.reg("window",Ext.Window);Ext.Window.DD=Ext.extend(Ext.dd.DD,{constructor:function(a){this.win=a;Ext.Window.DD.superclass.constructor.call(this,a.el.id,"WindowDD-"+a.id);this.setHandleElId(a.header.id);this.scroll=false},moveOnly:true,headerOffsets:[100,25],startDrag:function(){var a=this.win;this.proxy=a.ghost(a.initialConfig.cls);if(a.constrain!==false){var c=a.el.shadowOffset;this.constrainTo(a.container,{right:c,left:c,bottom:c})}else{if(a.constrainHeader!==false){var b=this.proxy.getSize();this.constrainTo(a.container,{right:-(b.width-this.headerOffsets[0]),bottom:-(b.height-this.headerOffsets[1])})}}},b4Drag:Ext.emptyFn,onDrag:function(a){this.alignElWithMouse(this.proxy,a.getPageX(),a.getPageY())},endDrag:function(a){this.win.unghost();this.win.saveState()}});Ext.WindowGroup=function(){var g={};var d=[];var e=null;var c=function(j,i){return(!j._lastAccess||j._lastAccess0){l.sort(c);var k=l[0].manager.zseed;for(var m=0;m=0;--j){if(!d[j].hidden){b(d[j]);return}}b(null)};return{zseed:9000,register:function(i){if(i.manager){i.manager.unregister(i)}i.manager=this;g[i.id]=i;d.push(i);i.on("hide",a)},unregister:function(i){delete i.manager;delete g[i.id];i.un("hide",a);d.remove(i)},get:function(i){return typeof i=="object"?i:g[i]},bringToFront:function(i){i=this.get(i);if(i!=e){i._lastAccess=new Date().getTime();h();return true}return false},sendToBack:function(i){i=this.get(i);i._lastAccess=-(new Date().getTime());h();return i},hideAll:function(){for(var i in g){if(g[i]&&typeof g[i]!="function"&&g[i].isVisible()){g[i].hide()}}},getActive:function(){return e},getBy:function(l,k){var m=[];for(var j=d.length-1;j>=0;--j){var n=d[j];if(l.call(k||n,n)!==false){m.push(n)}}return m},each:function(j,i){for(var k in g){if(g[k]&&typeof g[k]!="function"){if(j.call(i||g[k],g[k])===false){return}}}}}};Ext.WindowMgr=new Ext.WindowGroup();Ext.MessageBox=function(){var u,b,q,t,h,l,s,a,n,p,j,g,r,v,o,i="",d="",m=["ok","yes","no","cancel"];var c=function(x){r[x].blur();if(u.isVisible()){u.hide();w();Ext.callback(b.fn,b.scope||window,[x,v.dom.value,b],1)}};var w=function(){if(b&&b.cls){u.el.removeClass(b.cls)}n.reset()};var e=function(z,x,y){if(b&&b.closable!==false){u.hide();w()}if(y){y.stopEvent()}};var k=function(x){var z=0,y;if(!x){Ext.each(m,function(A){r[A].hide()});return z}u.footer.dom.style.display="";Ext.iterate(r,function(A,B){y=x[A];if(y){B.show();B.setText(Ext.isString(y)?y:Ext.MessageBox.buttonText[A]);z+=B.getEl().getWidth()+15}else{B.hide()}});return z};return{getDialog:function(x){if(!u){var z=[];r={};Ext.each(m,function(A){z.push(r[A]=new Ext.Button({text:this.buttonText[A],handler:c.createCallback(A),hideMode:"offsets"}))},this);u=new Ext.Window({autoCreate:true,title:x,resizable:false,constrain:true,constrainHeader:true,minimizable:false,maximizable:false,stateful:false,modal:true,shim:true,buttonAlign:"center",width:400,height:100,minHeight:80,plain:true,footer:true,closable:true,close:function(){if(b&&b.buttons&&b.buttons.no&&!b.buttons.cancel){c("no")}else{c("cancel")}},fbar:new Ext.Toolbar({items:z,enableOverflow:false})});u.render(document.body);u.getEl().addClass("x-window-dlg");q=u.mask;h=u.body.createChild({html:'

'});j=Ext.get(h.dom.firstChild);var y=h.dom.childNodes[1];l=Ext.get(y.firstChild);s=Ext.get(y.childNodes[2].firstChild);s.enableDisplayMode();s.addKeyListener([10,13],function(){if(u.isVisible()&&b&&b.buttons){if(b.buttons.ok){c("ok")}else{if(b.buttons.yes){c("yes")}}}});a=Ext.get(y.childNodes[2].childNodes[1]);a.enableDisplayMode();n=new Ext.ProgressBar({renderTo:h});h.createChild({cls:"x-clear"})}return u},updateText:function(A){if(!u.isVisible()&&!b.width){u.setSize(this.maxWidth,100)}l.update(A?A+" ":" ");var y=d!=""?(j.getWidth()+j.getMargins("lr")):0,C=l.getWidth()+l.getMargins("lr"),z=u.getFrameWidth("lr"),B=u.body.getFrameWidth("lr"),x;x=Math.max(Math.min(b.width||y+C+z+B,b.maxWidth||this.maxWidth),Math.max(b.minWidth||this.minWidth,o||0));if(b.prompt===true){v.setWidth(x-y-z-B)}if(b.progress===true||b.wait===true){n.setSize(x-y-z-B)}if(Ext.isIE&&x==o){x+=4}l.update(A||" ");u.setSize(x,"auto").center();return this},updateProgress:function(y,x,z){n.updateProgress(y,x);if(z){this.updateText(z)}return this},isVisible:function(){return u&&u.isVisible()},hide:function(){var x=u?u.activeGhost:null;if(this.isVisible()||x){u.hide();w();if(x){u.unghost(false,false)}}return this},show:function(A){if(this.isVisible()){this.hide()}b=A;var B=this.getDialog(b.title||" ");B.setTitle(b.title||" ");var x=(b.closable!==false&&b.progress!==true&&b.wait!==true);B.tools.close.setDisplayed(x);v=s;b.prompt=b.prompt||(b.multiline?true:false);if(b.prompt){if(b.multiline){s.hide();a.show();a.setHeight(Ext.isNumber(b.multiline)?b.multiline:this.defaultTextHeight);v=a}else{s.show();a.hide()}}else{s.hide();a.hide()}v.dom.value=b.value||"";if(b.prompt){B.focusEl=v}else{var z=b.buttons;var y=null;if(z&&z.ok){y=r.ok}else{if(z&&z.yes){y=r.yes}}if(y){B.focusEl=y}}if(Ext.isDefined(b.iconCls)){B.setIconClass(b.iconCls)}this.setIcon(Ext.isDefined(b.icon)?b.icon:i);o=k(b.buttons);n.setVisible(b.progress===true||b.wait===true);this.updateProgress(0,b.progressText);this.updateText(b.msg);if(b.cls){B.el.addClass(b.cls)}B.proxyDrag=b.proxyDrag===true;B.modal=b.modal!==false;B.mask=b.modal!==false?q:false;if(!B.isVisible()){document.body.appendChild(u.el.dom);B.setAnimateTarget(b.animEl);B.on("show",function(){if(x===true){B.keyMap.enable()}else{B.keyMap.disable()}},this,{single:true});B.show(b.animEl)}if(b.wait===true){n.wait(b.waitConfig)}return this},setIcon:function(x){if(!u){i=x;return}i=undefined;if(x&&x!=""){j.removeClass("x-hidden");j.replaceClass(d,x);h.addClass("x-dlg-icon");d=x}else{j.replaceClass(d,"x-hidden");h.removeClass("x-dlg-icon");d=""}return this},progress:function(z,y,x){this.show({title:z,msg:y,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:x});return this},wait:function(z,y,x){this.show({title:y,msg:z,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:x});return this},alert:function(A,z,y,x){this.show({title:A,msg:z,buttons:this.OK,fn:y,scope:x,minWidth:this.minWidth});return this},confirm:function(A,z,y,x){this.show({title:A,msg:z,buttons:this.YESNO,fn:y,scope:x,icon:this.QUESTION,minWidth:this.minWidth});return this},prompt:function(C,B,z,y,x,A){this.show({title:C,msg:B,buttons:this.OKCANCEL,fn:z,minWidth:this.minPromptWidth,scope:y,prompt:true,multiline:x,value:A});return this},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:"ext-mb-info",WARNING:"ext-mb-warning",QUESTION:"ext-mb-question",ERROR:"ext-mb-error",defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,minPromptWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}}();Ext.Msg=Ext.MessageBox;Ext.dd.PanelProxy=Ext.extend(Object,{constructor:function(a,b){this.panel=a;this.id=this.panel.id+"-ddproxy";Ext.apply(this,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){if(this.ghost){if(this.proxy){this.proxy.remove();delete this.proxy}this.panel.el.dom.style.display="";this.ghost.remove();delete this.ghost}},show:function(){if(!this.ghost){this.ghost=this.panel.createGhost(this.panel.initialConfig.cls,undefined,Ext.getBody());this.ghost.setXY(this.panel.el.getXY());if(this.insertProxy){this.proxy=this.panel.el.insertSibling({cls:"x-panel-dd-spacer"});this.proxy.setSize(this.panel.getSize())}this.panel.el.dom.style.display="none"}},repair:function(b,c,a){this.hide();if(typeof c=="function"){c.call(a||this)}},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.Panel.DD=Ext.extend(Ext.dd.DragSource,{constructor:function(b,a){this.panel=b;this.dragData={panel:b};this.proxy=new Ext.dd.PanelProxy(b,a);Ext.Panel.DD.superclass.constructor.call(this,b.el,a);var d=b.header,c=b.body;if(d){this.setHandleElId(d.id);c=b.header}c.setStyle("cursor","move");this.scroll=false},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.proxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(a){return this.proxy.ghost.dom},endDrag:function(a){this.proxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)}});Ext.state.Provider=Ext.extend(Ext.util.Observable,{constructor:function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){delete this.state[a];this.fireEvent("statechange",this,a,null)},set:function(a,b){this.state[a]=b;this.fireEvent("statechange",this,a,b)},decodeValue:function(b){var e=/^(a|n|d|b|s|o|e)\:(.*)$/,h=e.exec(unescape(b)),d,c,a,g;if(!h||!h[1]){return}c=h[1];a=h[2];switch(c){case"e":return null;case"n":return parseFloat(a);case"d":return new Date(Date.parse(a));case"b":return(a=="1");case"a":d=[];if(a!=""){Ext.each(a.split("^"),function(i){d.push(this.decodeValue(i))},this)}return d;case"o":d={};if(a!=""){Ext.each(a.split("^"),function(i){g=i.split("=");d[g[0]]=this.decodeValue(g[1])},this)}return d;default:return a}},encodeValue:function(c){var b,g="",e=0,a,d;if(c==null){return"e:1"}else{if(typeof c=="number"){b="n:"+c}else{if(typeof c=="boolean"){b="b:"+(c?"1":"0")}else{if(Ext.isDate(c)){b="d:"+c.toGMTString()}else{if(Ext.isArray(c)){for(a=c.length;e-1){var e=this.isSelected(b),c=this.all.elements[b],d=this.bufferRender([a],b)[0];this.all.replaceElement(b,d,true);if(e){this.selected.replaceElement(c,d);this.all.item(b).addClass(this.selectedClass)}this.updateIndexes(b,b)}},onAdd:function(g,d,e){if(this.all.getCount()===0){this.refresh();return}var c=this.bufferRender(d,e),h,b=this.all.elements;if(e0){if(!b){this.selected.removeClass(this.selectedClass)}this.selected.clear();this.last=false;if(!a){this.fireEvent("selectionchange",this,this.selected.elements)}}},isSelected:function(a){return this.selected.contains(this.getNode(a))},deselect:function(a){if(this.isSelected(a)){a=this.getNode(a);this.selected.removeElement(a);if(this.last==a.viewIndex){this.last=false}Ext.fly(a).removeClass(this.selectedClass);this.fireEvent("selectionchange",this,this.selected.elements)}},select:function(d,g,b){if(Ext.isArray(d)){if(!g){this.clearSelections(true)}for(var c=0,a=d.length;c=a&&d[c];c--){b.push(d[c])}}return b},indexOf:function(a){a=this.getNode(a);if(Ext.isNumber(a.viewIndex)){return a.viewIndex}return this.all.indexOf(a)},onBeforeLoad:function(){if(this.loadingText){this.clearSelections(false,true);this.getTemplateTarget().update('
'+this.loadingText+"
");this.all.clear()}},onDestroy:function(){this.all.clear();this.selected.clear();Ext.DataView.superclass.onDestroy.call(this);this.bindStore(null)}});Ext.DataView.prototype.setStore=Ext.DataView.prototype.bindStore;Ext.reg("dataview",Ext.DataView);Ext.list.ListView=Ext.extend(Ext.DataView,{itemSelector:"dl",selectedClass:"x-list-selected",overClass:"x-list-over",scrollOffset:undefined,columnResize:true,columnSort:true,maxColumnWidth:Ext.isIE?99:100,initComponent:function(){if(this.columnResize){this.colResizer=new Ext.list.ColumnResizer(this.colResizer);this.colResizer.init(this)}if(this.columnSort){this.colSorter=new Ext.list.Sorter(this.columnSort);this.colSorter.init(this)}if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('
','','
',"{header}","
","
",'
',"
",'
',"
")}if(!this.tpl){this.tpl=new Ext.XTemplate('',"
",'','
',' class="{cls}">',"{[values.tpl.apply(parent)]}","
","
",'
',"
","
")}var l=this.columns,h=0,k=0,m=l.length,b=[];for(var g=0;gthis.maxColumnWidth){n.width-=(h-this.maxColumnWidth)/100}k++}b.push(n)}l=this.columns=b;if(k10)){b.style.width=d;g.style.width=d}else{b.style.width=c+"px";g.style.width=c+"px";setTimeout(function(){if((a.offsetWidth-a.clientWidth)>10){b.style.width=d;g.style.width=d}},10)}}if(Ext.isNumber(e)){a.style.height=Math.max(0,e-g.parentNode.offsetHeight)+"px"}},updateIndexes:function(){Ext.list.ListView.superclass.updateIndexes.apply(this,arguments);this.verifyInternalSize()},findHeaderIndex:function(g){g=g.dom||g;var a=g.parentNode,d=a.parentNode.childNodes,b=0,e;for(;e=d[b];b++){if(e==a){return b}}return -1},setHdWidths:function(){var d=this.innerHd.dom.getElementsByTagName("div"),c=0,b=this.columns,a=b.length;for(;c','','{text}',"");d.disableFormats=true;d.compile();Ext.TabPanel.prototype.itemTpl=d}this.items.each(this.initTab,this)},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false)}if(this.activeTab!==undefined){var a=Ext.isObject(this.activeTab)?this.activeTab:this.items.get(this.activeTab);delete this.activeTab;this.setActiveTab(a)}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.mon(this.strip,{scope:this,mousedown:this.onStripMouseDown,contextmenu:this.onStripContextMenu});if(this.enableTabScroll){this.mon(this.strip,"mousewheel",this.onWheel,this)}},findTargets:function(c){var b=null,a=c.getTarget("li:not(.x-tab-edge)",this.strip);if(a){b=this.getComponent(a.id.split(this.idDelimiter)[1]);if(b.disabled){return{close:null,item:null,el:null}}}return{close:c.getTarget(".x-tab-strip-close",this.strip),item:b,el:a}},onStripMouseDown:function(b){if(b.button!==0){return}b.preventDefault();var a=this.findTargets(b);if(a.close){if(a.item.fireEvent("beforeclose",a.item)!==false){a.item.fireEvent("close",a.item);this.remove(a.item)}return}if(a.item&&a.item!=this.activeTab){this.setActiveTab(a.item)}},onStripContextMenu:function(b){b.preventDefault();var a=this.findTargets(b);if(a.item){this.fireEvent("contextmenu",this,a.item,b)}},readTabs:function(d){if(d===true){this.items.each(function(h){this.remove(h)},this)}var c=this.el.query(this.autoTabSelector);for(var b=0,a=c.length;b0){this.setActiveTab(0)}else{this.setActiveTab(null)}}}if(!this.destroying){this.delegateUpdates()}},onBeforeShowItem:function(a){if(a!=this.activeTab){this.setActiveTab(a);return false}},onItemDisabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).addClass("x-item-disabled")}this.stack.remove(b)},onItemEnabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).removeClass("x-item-disabled")}},onItemTitleChanged:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).child("span.x-tab-strip-text",true).innerHTML=b.title}},onItemIconChanged:function(d,a,c){var b=this.getTabEl(d);if(b){b=Ext.get(b);b.child("span.x-tab-strip-text").replaceClass(c,a);b[Ext.isEmpty(a)?"removeClass":"addClass"]("x-tab-with-icon")}},getTabEl:function(a){var b=this.getComponent(a);return b?b.tabEl:null},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates()},beginUpdate:function(){this.suspendUpdates=true},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates()},hideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="none";this.delegateUpdates()}this.stack.remove(b)},unhideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="";this.delegateUpdates()}},delegateUpdates:function(){var a=this.rendered;if(this.suspendUpdates){return}if(this.resizeTabs&&a){this.autoSizeTabs()}if(this.enableTabScroll&&a){this.autoScrollTabs()}},autoSizeTabs:function(){var h=this.items.length,b=this.tabPosition!="bottom"?"header":"footer",c=this[b].dom.offsetWidth,a=this[b].dom.clientWidth;if(!this.resizeTabs||h<1||!a){return}var k=Math.max(Math.min(Math.floor((a-4)/h)-this.tabMargin,this.tabWidth),this.minTabWidth);this.lastTabWidth=k;var m=this.strip.query("li:not(.x-tab-edge)");for(var e=0,j=m.length;e20?c:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers()}else{this.scrollLeft.show();this.scrollRight.show()}}this.scrolling=true;if(i>(a-c)){e.scrollLeft=a-c}else{this.scrollToTab(this.activeTab,false)}this.updateScrollButtons()}},createScrollers:function(){this.pos.addClass("x-tab-scrolling-"+this.tabPosition);var c=this.stripWrap.dom.offsetHeight;var a=this.pos.insertFirst({cls:"x-tab-scroller-left"});a.setHeight(c);a.addClassOnOver("x-tab-scroller-left-over");this.leftRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=a;var b=this.pos.insertFirst({cls:"x-tab-scroller-right"});b.setHeight(c);b.addClassOnOver("x-tab-scroller-right-over");this.rightRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=b},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos()},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100)},scrollToTab:function(e,a){if(!e){return}var c=this.getTabEl(e),h=this.getScrollPos(),d=this.getScrollArea(),g=Ext.fly(c).getOffsetsTo(this.stripWrap)[0]+h,b=g+c.offsetWidth;if(g(h+d)){this.scrollTo(b-d,a)}}},scrollTo:function(b,a){this.stripWrap.scrollTo("left",b,a?this.getScrollAnim():false);if(!a){this.updateScrollButtons()}},onWheel:function(g){var h=g.getWheelDelta()*this.wheelIncrement*-1;g.stopEvent();var i=this.getScrollPos(),c=i+h,a=this.getScrollWidth()-this.getScrollArea();var b=Math.max(0,Math.min(a,c));if(b!=i){this.scrollTo(b,false)}},onScrollRight:function(){var a=this.getScrollWidth()-this.getScrollArea(),c=this.getScrollPos(),b=Math.min(a,c+this.getScrollIncrement());if(b!=c){this.scrollTo(b,this.animScroll)}},onScrollLeft:function(){var b=this.getScrollPos(),a=Math.max(0,b-this.getScrollIncrement());if(a!=b){this.scrollTo(a,this.animScroll)}},updateScrollButtons:function(){var a=this.getScrollPos();this.scrollLeft[a===0?"addClass":"removeClass"]("x-tab-scroller-left-disabled");this.scrollRight[a>=(this.getScrollWidth()-this.getScrollArea())?"addClass":"removeClass"]("x-tab-scroller-right-disabled")},beforeDestroy:function(){Ext.destroy(this.leftRepeater,this.rightRepeater);this.deleteMembers("strip","edge","scrollLeft","scrollRight","stripWrap");this.activeTab=null;Ext.TabPanel.superclass.beforeDestroy.apply(this)}});Ext.reg("tabpanel",Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var a=[];return{add:function(b){a.push(b);if(a.length>10){a.shift()}},remove:function(e){var d=[];for(var c=0,b=a.length;c','  ','  ','  ',"");Ext.Button.buttonTemplate.compile()}this.template=Ext.Button.buttonTemplate}var b,d=this.getTemplateArgs();if(a){b=this.template.insertBefore(a,d,true)}else{b=this.template.append(c,d,true)}this.btnEl=b.child(this.buttonSelector);this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur});this.initButtonEl(b,this.btnEl);Ext.ButtonToggleMgr.register(this)},initButtonEl:function(b,c){this.el=b;this.setIcon(this.icon);this.setText(this.text);this.setIconClass(this.iconCls);if(Ext.isDefined(this.tabIndex)){c.dom.tabIndex=this.tabIndex}if(this.tooltip){this.setTooltip(this.tooltip,true)}if(this.handleMouseEvents){this.mon(b,{scope:this,mouseover:this.onMouseOver,mousedown:this.onMouseDown})}if(this.menu){this.mon(this.menu,{scope:this,show:this.onMenuShow,hide:this.onMenuHide})}if(this.repeat){var a=new Ext.util.ClickRepeater(b,Ext.isObject(this.repeat)?this.repeat:{});this.mon(a,"click",this.onRepeatClick,this)}else{this.mon(b,this.clickEvent,this.onClick,this)}},afterRender:function(){Ext.Button.superclass.afterRender.call(this);this.useSetClass=true;this.setButtonClass();this.doc=Ext.getDoc();this.doAutoWidth()},setIconClass:function(a){this.iconCls=a;if(this.el){this.btnEl.dom.className="";this.btnEl.addClass(["x-btn-text",a||""]);this.setButtonClass()}return this},setTooltip:function(b,a){if(this.rendered){if(!a){this.clearTip()}if(Ext.isObject(b)){Ext.QuickTips.register(Ext.apply({target:this.btnEl.id},b));this.tooltip=b}else{this.btnEl.dom[this.tooltipType]=b}}else{this.tooltip=b}return this},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.QuickTips.unregister(this.btnEl)}},beforeDestroy:function(){if(this.rendered){this.clearTip()}if(this.menu&&this.destroyMenu!==false){Ext.destroy(this.btnEl,this.menu)}Ext.destroy(this.repeater)},onDestroy:function(){if(this.rendered){this.doc.un("mouseover",this.monitorMouseOver,this);this.doc.un("mouseup",this.onMouseUp,this);delete this.doc;delete this.btnEl;Ext.ButtonToggleMgr.unregister(this)}Ext.Button.superclass.onDestroy.call(this)},doAutoWidth:function(){if(this.autoWidth!==false&&this.el&&this.text&&this.width===undefined){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var a=this.btnEl;if(a&&a.getWidth()>20){a.clip();a.setWidth(Ext.util.TextMetrics.measure(a,this.text).width+a.getFrameWidth("lr"))}}if(this.minWidth){if(this.el.getWidth()a}else{return c.getPageY()>this.btnEl.getRegion().bottom}},onClick:function(b,a){b.preventDefault();if(!this.disabled){if(this.isClickOnArrow(b)){if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("arrowclick",this,b);if(this.arrowHandler){this.arrowHandler.call(this.scope||this,this,b)}}else{this.doToggle();this.fireEvent("click",this,b);if(this.handler){this.handler.call(this.scope||this,this,b)}}}},isMenuTriggerOver:function(a){return this.menu&&a.target.tagName==this.arrowSelector},isMenuTriggerOut:function(b,a){return this.menu&&b.target.tagName!=this.arrowSelector}});Ext.reg("splitbutton",Ext.SplitButton);Ext.CycleButton=Ext.extend(Ext.SplitButton,{getItemText:function(a){if(a&&this.showText===true){var b="";if(this.prependText){b+=this.prependText}b+=a.text;return b}return undefined},setActiveItem:function(c,a){if(!Ext.isObject(c)){c=this.menu.getComponent(c)}if(c){if(!this.rendered){this.text=this.getItemText(c);this.iconCls=c.iconCls}else{var b=this.getItemText(c);if(b){this.setText(b)}this.setIconClass(c.iconCls)}this.activeItem=c;if(!c.checked){c.setChecked(true,a)}if(this.forceIcon){this.setIconClass(this.forceIcon)}if(!a){this.fireEvent("change",this,c)}}},getActiveItem:function(){return this.activeItem},initComponent:function(){this.addEvents("change");if(this.changeHandler){this.on("change",this.changeHandler,this.scope||this);delete this.changeHandler}this.itemCount=this.items.length;this.menu={cls:"x-cycle-menu",items:[]};var a=0;Ext.each(this.items,function(c,b){Ext.apply(c,{group:c.group||this.id,itemIndex:b,checkHandler:this.checkHandler,scope:this,checked:c.checked||false});this.menu.items.push(c);if(c.checked){a=b}},this);Ext.CycleButton.superclass.initComponent.call(this);this.on("click",this.toggleSelected,this);this.setActiveItem(a,true)},checkHandler:function(a,b){if(b){this.setActiveItem(a)}},toggleSelected:function(){var a=this.menu;a.render();if(!a.hasLayout){a.doLayout()}var d,b;for(var c=1;c"){b=new a.Fill()}else{b=new a.TextItem(b)}}}this.applyDefaults(b)}else{if(b.isFormField||b.render){b=this.createComponent(b)}else{if(b.tag){b=new a.Item({autoEl:b})}else{if(b.tagName){b=new a.Item({el:b})}else{if(Ext.isObject(b)){b=b.xtype?this.createComponent(b):this.constructButton(b)}}}}}return b},applyDefaults:function(e){if(!Ext.isString(e)){e=Ext.Toolbar.superclass.applyDefaults.call(this,e);var b=this.internalDefaults;if(e.events){Ext.applyIf(e.initialConfig,b);Ext.apply(e,b)}else{Ext.applyIf(e,b)}}return e},addSeparator:function(){return this.add(new a.Separator())},addSpacer:function(){return this.add(new a.Spacer())},addFill:function(){this.add(new a.Fill())},addElement:function(b){return this.addItem(new a.Item({el:b}))},addItem:function(b){return this.add.apply(this,arguments)},addButton:function(c){if(Ext.isArray(c)){var e=[];for(var d=0,b=c.length;d");this.items.push(this.displayItem=new a.TextItem({}))}Ext.PagingToolbar.superclass.initComponent.call(this);this.addEvents("change","beforechange");this.on("afterlayout",this.onFirstLayout,this,{single:true});this.cursor=0;this.bindStore(this.store,true)},onFirstLayout:function(){if(this.dsLoaded){this.onLoad.apply(this,this.dsLoaded)}},updateInfo:function(){if(this.displayItem){var b=this.store.getCount();var c=b==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+b,this.store.getTotalCount());this.displayItem.setText(c)}},onLoad:function(b,e,j){if(!this.rendered){this.dsLoaded=[b,e,j];return}var g=this.getParams();this.cursor=(j.params&&j.params[g.start])?j.params[g.start]:0;var i=this.getPageData(),c=i.activePage,h=i.pages;this.afterTextItem.setText(String.format(this.afterPageText,i.pages));this.inputItem.setValue(c);this.first.setDisabled(c==1);this.prev.setDisabled(c==1);this.next.setDisabled(c==h);this.last.setDisabled(c==h);this.refresh.enable();this.updateInfo();this.fireEvent("change",this,i)},getPageData:function(){var b=this.store.getTotalCount();return{total:b,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:b=1&g<=j.pages){i.setValue(g)}}}}}},getParams:function(){return this.paramNames||this.store.paramNames},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},doLoad:function(d){var c={},b=this.getParams();c[b.start]=d;c[b.limit]=this.pageSize;if(this.fireEvent("beforechange",this,c)!==false){this.store.load({params:c})}},moveFirst:function(){this.doLoad(0)},movePrevious:function(){this.doLoad(Math.max(0,this.cursor-this.pageSize))},moveNext:function(){this.doLoad(this.cursor+this.pageSize)},moveLast:function(){var c=this.store.getTotalCount(),b=c%this.pageSize;this.doLoad(b?(c-b):c-this.pageSize)},doRefresh:function(){this.doLoad(this.cursor)},bindStore:function(c,d){var b;if(!d&&this.store){if(c!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.beforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.onLoadError,this)}if(!c){this.store=null}}if(c){c=Ext.StoreMgr.lookup(c);c.on({scope:this,beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError});b=true}this.store=c;if(b){this.onLoad(c,null,{})}},unbind:function(b){this.bindStore(null)},bind:function(b){this.bindStore(b)},onDestroy:function(){this.bindStore(null);Ext.PagingToolbar.superclass.onDestroy.call(this)}})})();Ext.reg("paging",Ext.PagingToolbar);Ext.History=(function(){var e,c;var k=false;var d;function g(){var l=location.href,m=l.indexOf("#"),n=m>=0?l.substr(m+1):null;if(Ext.isGecko){n=decodeURIComponent(n)}return n}function a(){c.value=d}function h(l){d=l;Ext.History.fireEvent("change",l)}function i(m){var l=['
',Ext.util.Format.htmlEncode(m),"
"].join("");try{var o=e.contentWindow.document;o.open();o.write(l);o.close();return true}catch(n){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var o=e.contentWindow.document;var m=o.getElementById("state");var l=m?m.innerText:null;var n=g();setInterval(function(){o=e.contentWindow.document;m=o.getElementById("state");var q=m?m.innerText:null;var p=g();if(q!==l){l=q;h(l);location.hash=l;n=l;a()}else{if(p!==n){n=p;i(p)}}},50);k=true;Ext.History.fireEvent("ready",Ext.History)}function j(){d=c.value?c.value:g();if(Ext.isIE){b()}else{var l=g();setInterval(function(){var m=g();if(m!==l){l=m;h(l);a()}},50);k=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(m,l){if(k){Ext.callback(m,l,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(m,l)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(m){this.on("ready",m,l,{single:true})}j()},add:function(l,m){if(m!==false){if(this.getToken()==l){return true}}if(Ext.isIE){return i(l)}else{location.hash=l;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return k?d:g()}}})();Ext.apply(Ext.History,new Ext.util.Observable());Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:"x-tip",floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:"hide",initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=",header"}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:"close",handler:this[this.closeAction],scope:this})}},showAt:function(a){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!="number")){this.doAutoWidth()}if(this.constrainPosition){a=this.el.adjustForConstraints(a)}this.setPagePosition(a[0],a[1])},doAutoWidth:function(a){a=a||0;var b=this.body.getTextWidth();if(this.title){b=Math.max(b,this.header.child("span").getTextWidth(this.title))}b+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr")+a;this.setWidth(b.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true}},showBy:function(a,b){if(!this.rendered){this.render(Ext.getBody())}this.showAt(this.el.getAlignToXY(a,b||this.defaultAlign))},initDraggable:function(){this.dd=new Ext.Tip.DD(this,typeof this.draggable=="boolean"?null:this.draggable);this.header.addClass("x-tip-draggable")}});Ext.reg("tip",Ext.Tip);Ext.Tip.DD=function(b,a){Ext.apply(this,a);this.tip=b;Ext.Tip.DD.superclass.constructor.call(this,b.el.id,"WindowDD-"+b.id);this.setHandleElId(b.header.id);this.scroll=false};Ext.extend(Ext.Tip.DD,Ext.dd.DD,{moveOnly:true,scroll:false,headerOffsets:[100,25],startDrag:function(){this.tip.el.disableShadow()},endDrag:function(a){this.tip.el.enableShadow(true)}});Ext.ToolTip=Ext.extend(Ext.Tip,{showDelay:500,hideDelay:200,dismissDelay:5000,trackMouse:false,anchorToTarget:true,anchorOffset:0,targetCounter:0,constrainPosition:false,initComponent:function(){Ext.ToolTip.superclass.initComponent.call(this);this.lastActive=new Date();this.initTarget(this.target);this.origAnchor=this.anchor},onRender:function(b,a){Ext.ToolTip.superclass.onRender.call(this,b,a);this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl=this.el.createChild({cls:"x-tip-anchor "+this.anchorCls})},afterRender:function(){Ext.ToolTip.superclass.afterRender.call(this);this.anchorEl.setStyle("z-index",this.el.getZIndex()+1).setVisibilityMode(Ext.Element.DISPLAY)},initTarget:function(c){var a;if((a=Ext.get(c))){if(this.target){var b=Ext.get(this.target);this.mun(b,"mouseover",this.onTargetOver,this);this.mun(b,"mouseout",this.onTargetOut,this);this.mun(b,"mousemove",this.onMouseMove,this)}this.mon(a,{mouseover:this.onTargetOver,mouseout:this.onTargetOut,mousemove:this.onMouseMove,scope:this});this.target=a}if(this.anchor){this.anchorTarget=this.target}},onMouseMove:function(b){var a=this.delegate?b.getTarget(this.delegate):this.triggerElement=true;if(a){this.targetXY=b.getXY();if(a===this.triggerElement){if(!this.hidden&&this.trackMouse){this.setPagePosition(this.getTargetXY())}}else{this.hide();this.lastActive=new Date(0);this.onTargetOver(b)}}else{if(!this.closable&&this.isVisible()){this.hide()}}},getTargetXY:function(){if(this.delegate){this.anchorTarget=this.triggerElement}if(this.anchor){this.targetCounter++;var c=this.getOffsets(),l=(this.anchorToTarget&&!this.trackMouse)?this.el.getAlignToXY(this.anchorTarget,this.getAnchorAlign()):this.targetXY,a=Ext.lib.Dom.getViewWidth()-5,h=Ext.lib.Dom.getViewHeight()-5,i=document.documentElement,e=document.body,k=(i.scrollLeft||e.scrollLeft||0)+5,j=(i.scrollTop||e.scrollTop||0)+5,b=[l[0]+c[0],l[1]+c[1]],g=this.getSize();this.anchorEl.removeClass(this.anchorCls);if(this.targetCounter<2){if(b[0]a){if(this.anchorToTarget){this.defaultAlign="r-l";if(this.mouseOffset){this.mouseOffset[0]*=-1}}this.anchor="right";return this.getTargetXY()}if(b[1]h){if(this.anchorToTarget){this.defaultAlign="b-t";if(this.mouseOffset){this.mouseOffset[1]*=-1}}this.anchor="bottom";return this.getTargetXY()}}this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl.addClass(this.anchorCls);this.targetCounter=0;return b}else{var d=this.getMouseOffset();return[this.targetXY[0]+d[0],this.targetXY[1]+d[1]]}},getMouseOffset:function(){var a=this.anchor?[0,0]:[15,18];if(this.mouseOffset){a[0]+=this.mouseOffset[0];a[1]+=this.mouseOffset[1]}return a},getAnchorPosition:function(){if(this.anchor){this.tipAnchor=this.anchor.charAt(0)}else{var a=this.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!a){throw"AnchorTip.defaultAlign is invalid"}this.tipAnchor=a[1].charAt(0)}switch(this.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var b,a=this.getAnchorPosition().charAt(0);if(this.anchorToTarget&&!this.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-this.anchorOffset,30];break;case"b":b=[-19-this.anchorOffset,-13-this.el.dom.offsetHeight];break;case"r":b=[-15-this.el.dom.offsetWidth,-13-this.anchorOffset];break;default:b=[25,-13-this.anchorOffset];break}}var c=this.getMouseOffset();b[0]+=c[0];b[1]+=c[1];return b},onTargetOver:function(b){if(this.disabled||b.within(this.target.dom,true)){return}var a=b.getTarget(this.delegate);if(a){this.triggerElement=a;this.clearTimer("hide");this.targetXY=b.getXY();this.delayShow()}},delayShow:function(){if(this.hidden&&!this.showTimer){if(this.lastActive.getElapsed()=c){d=c-b-5}}return{x:a,y:d}},beforeDestroy:function(){this.clearTimers();Ext.destroy(this.anchorEl);delete this.anchorEl;delete this.target;delete this.anchorTarget;delete this.triggerElement;Ext.ToolTip.superclass.beforeDestroy.call(this)},onDestroy:function(){Ext.getDoc().un("mousedown",this.onDocMouseDown,this);Ext.ToolTip.superclass.onDestroy.call(this)}});Ext.reg("tooltip",Ext.ToolTip);Ext.QuickTip=Ext.extend(Ext.ToolTip,{interceptTitles:false,tagConfig:{namespace:"ext",attribute:"qtip",width:"qwidth",target:"target",title:"qtitle",hide:"hide",cls:"qclass",align:"qalign",anchor:"anchor"},initComponent:function(){this.target=this.target||Ext.getDoc();this.targets=this.targets||{};Ext.QuickTip.superclass.initComponent.call(this)},register:function(e){var h=Ext.isArray(e)?e:arguments;for(var g=0,a=h.length;g1){var d=function(i,h){if(i&&h){var j=h.findChild(a,b);if(j){j.select();if(g){g(true,j)}}else{if(g){g(false,j)}}}else{if(g){g(false,j)}}};this.expandPath(c.join(this.pathSeparator),a,d)}else{this.root.select();if(g){g(true,this.root)}}},getTreeEl:function(){return this.body},onRender:function(b,a){Ext.tree.TreePanel.superclass.onRender.call(this,b,a);this.el.addClass("x-tree");this.innerCt=this.body.createChild({tag:"ul",cls:"x-tree-root-ct "+(this.useArrows?"x-tree-arrows":this.lines?"x-tree-lines":"x-tree-no-lines")})},initEvents:function(){Ext.tree.TreePanel.superclass.initEvents.call(this);if(this.containerScroll){Ext.dd.ScrollManager.register(this.body)}if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true})}if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll})}this.getSelectionModel().init(this)},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.renderRoot()},beforeDestroy:function(){if(this.rendered){Ext.dd.ScrollManager.unregister(this.body);Ext.destroy(this.dropZone,this.dragZone)}this.destroyRoot();Ext.destroy(this.loader);this.nodeHash=this.root=this.loader=null;Ext.tree.TreePanel.superclass.beforeDestroy.call(this)},destroyRoot:function(){if(this.root&&this.root.destroy){this.root.destroy(true)}}});Ext.tree.TreePanel.nodeTypes={};Ext.reg("treepanel",Ext.tree.TreePanel);Ext.tree.TreeEventModel=function(a){this.tree=a;this.tree.on("render",this.initEvents,this)};Ext.tree.TreeEventModel.prototype={initEvents:function(){var a=this.tree;if(a.trackMouseOver!==false){a.mon(a.innerCt,{scope:this,mouseover:this.delegateOver,mouseout:this.delegateOut})}a.mon(a.getTreeEl(),{scope:this,click:this.delegateClick,dblclick:this.delegateDblClick,contextmenu:this.delegateContextMenu})},getNode:function(b){var a;if(a=b.getTarget(".x-tree-node-el",10)){var c=Ext.fly(a,"_treeEvents").getAttribute("tree-node-id","ext");if(c){return this.tree.getNodeById(c)}}return null},getNodeTarget:function(b){var a=b.getTarget(".x-tree-node-icon",1);if(!a){a=b.getTarget(".x-tree-node-el",6)}return a},delegateOut:function(b,a){if(!this.beforeEvent(b)){return}if(b.getTarget(".x-tree-ec-icon",1)){var c=this.getNode(b);this.onIconOut(b,c);if(c==this.lastEcOver){delete this.lastEcOver}}if((a=this.getNodeTarget(b))&&!b.within(a,true)){this.onNodeOut(b,this.getNode(b))}},delegateOver:function(b,a){if(!this.beforeEvent(b)){return}if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on("mouseover",this.trackExit,this);this.trackingDoc=true}if(this.lastEcOver){this.onIconOut(b,this.lastEcOver);delete this.lastEcOver}if(b.getTarget(".x-tree-ec-icon",1)){this.lastEcOver=this.getNode(b);this.onIconOver(b,this.lastEcOver)}if(a=this.getNodeTarget(b)){this.onNodeOver(b,this.getNode(b))}},trackExit:function(a){if(this.lastOverNode){if(this.lastOverNode.ui&&!a.within(this.lastOverNode.ui.getEl())){this.onNodeOut(a,this.lastOverNode)}delete this.lastOverNode;Ext.getBody().un("mouseover",this.trackExit,this);this.trackingDoc=false}},delegateClick:function(b,a){if(this.beforeEvent(b)){if(b.getTarget("input[type=checkbox]",1)){this.onCheckboxClick(b,this.getNode(b))}else{if(b.getTarget(".x-tree-ec-icon",1)){this.onIconClick(b,this.getNode(b))}else{if(this.getNodeTarget(b)){this.onNodeClick(b,this.getNode(b))}}}}else{this.checkContainerEvent(b,"click")}},delegateDblClick:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeDblClick(b,this.getNode(b))}}else{this.checkContainerEvent(b,"dblclick")}},delegateContextMenu:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeContextMenu(b,this.getNode(b))}}else{this.checkContainerEvent(b,"contextmenu")}},checkContainerEvent:function(b,a){if(this.disabled){b.stopEvent();return false}this.onContainerEvent(b,a)},onContainerEvent:function(b,a){this.tree.fireEvent("container"+a,this.tree,b)},onNodeClick:function(b,a){a.ui.onClick(b)},onNodeOver:function(b,a){this.lastOverNode=a;a.ui.onOver(b)},onNodeOut:function(b,a){a.ui.onOut(b)},onIconOver:function(b,a){a.ui.addClass("x-tree-ec-over")},onIconOut:function(b,a){a.ui.removeClass("x-tree-ec-over")},onIconClick:function(b,a){a.ui.ecClick(b)},onCheckboxClick:function(b,a){a.ui.onCheckChange(b)},onNodeDblClick:function(b,a){a.ui.onDblClick(b)},onNodeContextMenu:function(b,a){a.ui.onContextMenu(b)},beforeEvent:function(b){var a=this.getNode(b);if(this.disabled||!a||!a.ui){b.stopEvent();return false}return true},disable:function(){this.disabled=true},enable:function(){this.disabled=false}};Ext.tree.DefaultSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,a);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){this.select(a)},select:function(c,a){if(!Ext.fly(c.ui.wrap).isVisible()&&a){return a.call(this,c)}var b=this.selNode;if(c==b){c.ui.onSelectedChange(true)}else{if(this.fireEvent("beforeselect",this,c,b)!==false){if(b&&b.ui){b.ui.onSelectedChange(false)}this.selNode=c;c.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,c,b)}}return c},unselect:function(b,a){if(this.selNode==b){this.clearSelections(a)}},clearSelections:function(a){var b=this.selNode;if(b){b.ui.onSelectedChange(false);this.selNode=null;if(a!==true){this.fireEvent("selectionchange",this,null)}}return b},getSelectedNode:function(){return this.selNode},isSelected:function(a){return this.selNode==a},selectPrevious:function(a){if(!(a=a||this.selNode||this.lastSelNode)){return null}var c=a.previousSibling;if(c){if(!c.isExpanded()||c.childNodes.length<1){return this.select(c,this.selectPrevious)}else{var b=c.lastChild;while(b&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()&&b.childNodes.length>0){b=b.lastChild}return this.select(b,this.selectPrevious)}}else{if(a.parentNode&&(this.tree.rootVisible||!a.parentNode.isRoot)){return this.select(a.parentNode,this.selectPrevious)}}return null},selectNext:function(b){if(!(b=b||this.selNode||this.lastSelNode)){return null}if(b.firstChild&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()){return this.select(b.firstChild,this.selectNext)}else{if(b.nextSibling){return this.select(b.nextSibling,this.selectNext)}else{if(b.parentNode){var a=null;b.parentNode.bubble(function(){if(this.nextSibling){a=this.getOwnerTree().selModel.select(this.nextSibling,this.selectNext);return false}});return a}}}return null},onKeyDown:function(c){var b=this.selNode||this.lastSelNode;var d=this;if(!b){return}var a=c.getKey();switch(a){case c.DOWN:c.stopEvent();this.selectNext();break;case c.UP:c.stopEvent();this.selectPrevious();break;case c.RIGHT:c.preventDefault();if(b.hasChildNodes()){if(!b.isExpanded()){b.expand()}else{if(b.firstChild){this.select(b.firstChild,c)}}}break;case c.LEFT:c.preventDefault();if(b.hasChildNodes()&&b.isExpanded()){b.collapse()}else{if(b.parentNode&&(this.tree.rootVisible||b.parentNode!=this.tree.getRootNode())){this.select(b.parentNode,c)}}break}}});Ext.tree.MultiSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNodes=[];this.selMap={};this.addEvents("selectionchange");Ext.apply(this,a);Ext.tree.MultiSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){if(b.ctrlKey&&this.isSelected(a)){this.unselect(a)}else{this.select(a,b,b.ctrlKey)}},select:function(a,c,b){if(b!==true){this.clearSelections(true)}if(this.isSelected(a)){this.lastSelNode=a;return a}this.selNodes.push(a);this.selMap[a.id]=a;this.lastSelNode=a;a.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return a},unselect:function(b){if(this.selMap[b.id]){b.ui.onSelectedChange(false);var c=this.selNodes;var a=c.indexOf(b);if(a!=-1){this.selNodes.splice(a,1)}delete this.selMap[b.id];this.fireEvent("selectionchange",this,this.selNodes)}},clearSelections:function(b){var d=this.selNodes;if(d.length>0){for(var c=0,a=d.length;c0},isExpandable:function(){return this.attributes.expandable||this.hasChildNodes()},appendChild:function(e){var g=false;if(Ext.isArray(e)){g=e}else{if(arguments.length>1){g=arguments}}if(g){for(var d=0,a=g.length;d0){var g=d?function(){e.apply(d,arguments)}:e;c.sort(g);for(var b=0;b
','',this.indentMarkup,"",'','',g?('':"/>")):"",'',e.text,"
",'',""].join("");if(l!==true&&e.nextSibling&&(b=e.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",b,d)}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",j,d)}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var i=this.elNode.childNodes;this.indentNode=i[0];this.ecNode=i[1];this.iconNode=i[2];var h=3;if(g){this.checkbox=i[3];this.checkbox.defaultChecked=this.checkbox.checked;h++}this.anchor=i[h];this.textNode=i[h].firstChild},getHref:function(a){return Ext.isEmpty(a)?(Ext.isGecko?"":"#"):a},getAnchor:function(){return this.anchor},getTextEl:function(){return this.textNode},getIconEl:function(){return this.iconNode},isChecked:function(){return this.checkbox?this.checkbox.checked:false},updateExpandIcon:function(){if(this.rendered){var g=this.node,d,c,a=g.isLast()?"x-tree-elbow-end":"x-tree-elbow",e=g.hasChildNodes();if(e||g.attributes.expandable){if(g.expanded){a+="-minus";d="x-tree-node-collapsed";c="x-tree-node-expanded"}else{a+="-plus";d="x-tree-node-expanded";c="x-tree-node-collapsed"}if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false}if(this.c1!=d||this.c2!=c){Ext.fly(this.elNode).replaceClass(d,c);this.c1=d;this.c2=c}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-collapsed");delete this.c1;delete this.c2;this.wasLeaf=true}}var b="x-tree-ec-icon "+a;if(this.ecc!=b){this.ecNode.className=b;this.ecc=b}}},onIdChange:function(a){if(this.rendered){this.elNode.setAttribute("ext:tree-node-id",a)}},getChildIndent:function(){if(!this.childIndent){var a=[],b=this.node;while(b){if(!b.isRoot||(b.isRoot&&b.ownerTree.rootVisible)){if(!b.isLast()){a.unshift('')}else{a.unshift('')}}b=b.parentNode}this.childIndent=a.join("")}return this.childIndent},renderIndent:function(){if(this.rendered){var a="",b=this.node.parentNode;if(b){a=b.ui.getChildIndent()}if(this.indentMarkup!=a){this.indentNode.innerHTML=a;this.indentMarkup=a}this.updateExpandIcon()}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id)}Ext.each(["textnode","anchor","checkbox","indentNode","ecNode","iconNode","elNode","ctNode","wrap","holder"],function(a){if(this[a]){Ext.fly(this[a]).remove();delete this[a]}},this);delete this.node}});Ext.tree.RootTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var a=this.node.ownerTree.innerCt.dom;this.node.expanded=true;a.innerHTML='
';this.wrap=this.ctNode=a.firstChild}},collapse:Ext.emptyFn,expand:Ext.emptyFn});Ext.tree.TreeLoader=function(a){this.baseParams={};Ext.apply(this,a);this.addEvents("beforeload","load","loadexception");Ext.tree.TreeLoader.superclass.constructor.call(this);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,paramOrder:undefined,paramsAsHash:false,nodeParameter:"node",directFn:undefined,load:function(b,c,a){if(this.clearOnLoad){while(b.firstChild){b.removeChild(b.firstChild)}}if(this.doPreload(b)){this.runCallback(c,a||b,[b])}else{if(this.directFn||this.dataUrl||this.url){this.requestData(b,c,a||b)}}},doPreload:function(d){if(d.attributes.children){if(d.childNodes.length<1){var c=d.attributes.children;d.beginUpdate();for(var b=0,a=c.length;b-1){c=[]}for(var d=0,a=b.length;dp){return e?-1:1}}return 0}},doSort:function(a){a.sort(this.sortFn)},updateSort:function(a,b){if(b.childrenRendered){this.doSort.defer(1,this,[b])}},updateSortParent:function(a){var b=a.parentNode;if(b&&b.childrenRendered){this.doSort.defer(1,this,[b])}}});if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(a,b){this.allowParentInsert=b.allowParentInsert||false;this.allowContainerDrop=b.allowContainerDrop||false;this.appendOnly=b.appendOnly||false;Ext.tree.TreeDropZone.superclass.constructor.call(this,a.getTreeEl(),b);this.tree=a;this.dragOverData={};this.lastInsertClass="x-tree-no-status"};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(a){if(a.hasChildNodes()&&!a.isExpanded()){a.expand(false,null,this.triggerCacheRefresh.createDelegate(this))}},queueExpand:function(a){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[a])},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false}},isValidDropPoint:function(a,k,i,d,c){if(!a||!c){return false}var g=a.node;var h=c.node;if(!(g&&g.isTarget&&k)){return false}if(k=="append"&&g.allowChildren===false){return false}if((k=="above"||k=="below")&&(g.parentNode&&g.parentNode.allowChildren===false)){return false}if(h&&(g==h||h.contains(g))){return false}var b=this.dragOverData;b.tree=this.tree;b.target=g;b.data=c;b.point=k;b.source=i;b.rawEvent=d;b.dropNode=h;b.cancel=false;var j=this.tree.fireEvent("nodedragover",b);return b.cancel===false&&j!==false},getDropPoint:function(h,g,l){var m=g.node;if(m.isRoot){return m.allowChildren!==false?"append":false}var c=g.ddel;var o=Ext.lib.Dom.getY(c),j=o+c.offsetHeight;var i=Ext.lib.Event.getPageY(h);var k=m.allowChildren===false||m.isLeaf();if(this.appendOnly||m.parentNode.allowChildren===false){return k?false:"append"}var d=false;if(!this.allowParentInsert){d=m.hasChildNodes()&&m.isExpanded()}var a=(j-o)/(k?2:3);if(i>=o&&i<(o+a)){return"above"}else{if(!d&&(k||i>=j-a&&i<=j)){return"below"}else{return"append"}}},onNodeEnter:function(d,a,c,b){this.cancelExpand()},onContainerOver:function(a,c,b){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,c,b)){return this.dropAllowed}return this.dropNotAllowed},onNodeOver:function(b,i,h,g){var k=this.getDropPoint(h,b,i);var c=b.node;if(!this.expandProcId&&k=="append"&&c.hasChildNodes()&&!b.node.isExpanded()){this.queueExpand(c)}else{if(k!="append"){this.cancelExpand()}}var d=this.dropNotAllowed;if(this.isValidDropPoint(b,k,i,h,g)){if(k){var a=b.ddel;var j;if(k=="above"){d=b.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";j="x-tree-drag-insert-above"}else{if(k=="below"){d=b.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";j="x-tree-drag-insert-below"}else{d="x-tree-drop-ok-append";j="x-tree-drag-append"}}if(this.lastInsertClass!=j){Ext.fly(a).replaceClass(this.lastInsertClass,j);this.lastInsertClass=j}}}return d},onNodeOut:function(d,a,c,b){this.cancelExpand();this.removeDropIndicators(d)},onNodeDrop:function(i,b,h,d){var a=this.getDropPoint(h,i,b);var g=i.node;g.ui.startDrop();if(!this.isValidDropPoint(i,a,b,h,d)){g.ui.endDrop();return false}var c=d.node||(b.getTreeNode?b.getTreeNode(d,g,a,h):null);return this.processDrop(g,d,a,b,h,c)},onContainerDrop:function(a,g,c){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,g,c)){var d=this.tree.getRootNode();d.ui.startDrop();var b=c.node||(a.getTreeNode?a.getTreeNode(c,d,"append",g):null);return this.processDrop(d,c,"append",a,g,b)}return false},processDrop:function(j,h,b,a,i,d){var g={tree:this.tree,target:j,data:h,point:b,source:a,rawEvent:i,dropNode:d,cancel:!d,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",g);if(c===false||g.cancel===true||!g.dropNode){j.ui.endDrop();return g.dropStatus}j=g.target;if(b=="append"&&!j.isExpanded()){j.expand(false,null,function(){this.completeDrop(g)}.createDelegate(this))}else{this.completeDrop(g)}return true},completeDrop:function(h){var d=h.dropNode,e=h.point,c=h.target;if(!Ext.isArray(d)){d=[d]}var g;for(var b=0,a=d.length;bd.offsetLeft){e.scrollLeft=d.offsetLeft}var a=Math.min(this.maxWidth,(e.clientWidth>20?e.clientWidth:e.offsetWidth)-Math.max(0,d.offsetLeft-e.scrollLeft)-5);this.setSize(a,"")},triggerEdit:function(a,c){this.completeEdit();if(a.attributes.editable!==false){this.editNode=a;if(this.tree.autoScroll){Ext.fly(a.ui.getEl()).scrollIntoView(this.tree.body)}var b=a.text||"";if(!Ext.isGecko&&Ext.isEmpty(a.text)){a.setText(" ")}this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[a.ui.textNode,b]);return false}},bindScroll:function(){this.tree.getTreeEl().on("scroll",this.cancelEdit,this)},beforeNodeClick:function(a,b){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(a)){b.stopEvent();return this.triggerEdit(a)}},onNodeDblClick:function(a,b){clearTimeout(this.autoEditTimer)},updateNode:function(a,b){this.tree.getTreeEl().un("scroll",this.cancelEdit,this);this.editNode.setText(b)},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui)}},onSpecialKey:function(c,b){var a=b.getKey();if(a==b.ESC){b.stopEvent();this.cancelEdit()}else{if(a==b.ENTER&&!b.hasModifier()){b.stopEvent();this.completeEdit()}}},onDestroy:function(){clearTimeout(this.autoEditTimer);Ext.tree.TreeEditor.superclass.onDestroy.call(this);var a=this.tree;a.un("beforeclick",this.beforeNodeClick,this);a.un("dblclick",this.onNodeDblClick,this)}}); +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var E="undefined",s="object",T="Shockwave Flash",X="ShockwaveFlash.ShockwaveFlash",r="application/x-shockwave-flash",S="SWFObjectExprInst",y="onreadystatechange",P=window,k=document,u=navigator,U=false,V=[i],p=[],O=[],J=[],m,R,F,C,K=false,a=false,o,H,n=true,N=function(){var ab=typeof k.getElementById!=E&&typeof k.getElementsByTagName!=E&&typeof k.createElement!=E,ai=u.userAgent.toLowerCase(),Z=u.platform.toLowerCase(),af=Z?(/win/).test(Z):/win/.test(ai),ad=Z?(/mac/).test(Z):/mac/.test(ai),ag=/webkit/.test(ai)?parseFloat(ai.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,Y=!+"\v1",ah=[0,0,0],ac=null;if(typeof u.plugins!=E&&typeof u.plugins[T]==s){ac=u.plugins[T].description;if(ac&&!(typeof u.mimeTypes!=E&&u.mimeTypes[r]&&!u.mimeTypes[r].enabledPlugin)){U=true;Y=false;ac=ac.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ah[0]=parseInt(ac.replace(/^(.*)\..*$/,"$1"),10);ah[1]=parseInt(ac.replace(/^.*\.(.*)\s.*$/,"$1"),10);ah[2]=/[a-zA-Z]/.test(ac)?parseInt(ac.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof P.ActiveXObject!=E){try{var ae=new ActiveXObject(X);if(ae){ac=ae.GetVariable("$version");if(ac){Y=true;ac=ac.split(" ")[1].split(",");ah=[parseInt(ac[0],10),parseInt(ac[1],10),parseInt(ac[2],10)]}}}catch(aa){}}}return{w3:ab,pv:ah,wk:ag,ie:Y,win:af,mac:ad}}(),l=function(){if(!N.w3){return}if((typeof k.readyState!=E&&k.readyState=="complete")||(typeof k.readyState==E&&(k.getElementsByTagName("body")[0]||k.body))){g()}if(!K){if(typeof k.addEventListener!=E){k.addEventListener("DOMContentLoaded",g,false)}if(N.ie&&N.win){k.attachEvent(y,function(){if(k.readyState=="complete"){k.detachEvent(y,arguments.callee);g()}});if(P==top){(function(){if(K){return}try{k.documentElement.doScroll("left")}catch(Y){setTimeout(arguments.callee,0);return}g()})()}}if(N.wk){(function(){if(K){return}if(!(/loaded|complete/).test(k.readyState)){setTimeout(arguments.callee,0);return}g()})()}t(g)}}();function g(){if(K){return}try{var aa=k.getElementsByTagName("body")[0].appendChild(D("span"));aa.parentNode.removeChild(aa)}catch(ab){return}K=true;var Y=V.length;for(var Z=0;Z0){for(var ag=0;ag0){var af=c(Z);if(af){if(G(p[ag].swfVersion)&&!(N.wk&&N.wk<312)){x(Z,true);if(ac){ab.success=true;ab.ref=A(Z);ac(ab)}}else{if(p[ag].expressInstall&&B()){var aj={};aj.data=p[ag].expressInstall;aj.width=af.getAttribute("width")||"0";aj.height=af.getAttribute("height")||"0";if(af.getAttribute("class")){aj.styleclass=af.getAttribute("class")}if(af.getAttribute("align")){aj.align=af.getAttribute("align")}var ai={};var Y=af.getElementsByTagName("param");var ad=Y.length;for(var ae=0;ae'}}ab.outerHTML='"+ag+"";O[O.length]=aj.id;Y=c(aj.id)}else{var aa=D(s);aa.setAttribute("type",r);for(var ad in aj){if(aj[ad]!=Object.prototype[ad]){if(ad.toLowerCase()=="styleclass"){aa.setAttribute("class",aj[ad])}else{if(ad.toLowerCase()!="classid"){aa.setAttribute(ad,aj[ad])}}}}for(var ac in ah){if(ah[ac]!=Object.prototype[ac]&&ac.toLowerCase()!="movie"){e(aa,ac,ah[ac])}}ab.parentNode.replaceChild(aa,ab);Y=aa}}return Y}function e(aa,Y,Z){var ab=D("param");ab.setAttribute("name",Y);ab.setAttribute("value",Z);aa.appendChild(ab)}function z(Z){var Y=c(Z);if(Y&&Y.nodeName=="OBJECT"){if(N.ie&&N.win){Y.style.display="none";(function(){if(Y.readyState==4){b(Z)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.removeChild(Y)}}}function b(aa){var Z=c(aa);if(Z){for(var Y in Z){if(typeof Z[Y]=="function"){Z[Y]=null}}Z.parentNode.removeChild(Z)}}function c(aa){var Y=null;try{Y=k.getElementById(aa)}catch(Z){}return Y}function D(Y){return k.createElement(Y)}function j(aa,Y,Z){aa.attachEvent(Y,Z);J[J.length]=[aa,Y,Z]}function G(aa){var Z=N.pv,Y=aa.split(".");Y[0]=parseInt(Y[0],10);Y[1]=parseInt(Y[1],10)||0;Y[2]=parseInt(Y[2],10)||0;return(Z[0]>Y[0]||(Z[0]==Y[0]&&Z[1]>Y[1])||(Z[0]==Y[0]&&Z[1]==Y[1]&&Z[2]>=Y[2]))?true:false}function w(ad,Z,ae,ac){if(N.ie&&N.mac){return}var ab=k.getElementsByTagName("head")[0];if(!ab){return}var Y=(ae&&typeof ae=="string")?ae:"screen";if(ac){o=null;H=null}if(!o||H!=Y){var aa=D("style");aa.setAttribute("type","text/css");aa.setAttribute("media",Y);o=ab.appendChild(aa);if(N.ie&&N.win&&typeof k.styleSheets!=E&&k.styleSheets.length>0){o=k.styleSheets[k.styleSheets.length-1]}H=Y}if(N.ie&&N.win){if(o&&typeof o.addRule==s){o.addRule(ad,Z)}}else{if(o&&typeof k.createTextNode!=E){o.appendChild(k.createTextNode(ad+" {"+Z+"}"))}}}function x(aa,Y){if(!n){return}var Z=Y?"visible":"hidden";if(K&&c(aa)){c(aa).style.visibility=Z}else{w("#"+aa,"visibility:"+Z)}}function M(Z){var aa=/[\\\"<>\.;]/;var Y=aa.exec(Z)!=null;return Y&&typeof encodeURIComponent!=E?encodeURIComponent(Z):Z}var d=function(){if(N.ie&&N.win){window.attachEvent("onunload",function(){var ad=J.length;for(var ac=0;ac0){for(h=0;h-1&&e.position=="left"){e.position="bottom"}return e},onDestroy:function(){Ext.chart.CartesianChart.superclass.onDestroy.call(this);Ext.each(this.labelFn,function(a){this.removeFnProxy(a)},this)}});Ext.reg("cartesianchart",Ext.chart.CartesianChart);Ext.chart.LineChart=Ext.extend(Ext.chart.CartesianChart,{type:"line"});Ext.reg("linechart",Ext.chart.LineChart);Ext.chart.ColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"column"});Ext.reg("columnchart",Ext.chart.ColumnChart);Ext.chart.StackedColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackcolumn"});Ext.reg("stackedcolumnchart",Ext.chart.StackedColumnChart);Ext.chart.BarChart=Ext.extend(Ext.chart.CartesianChart,{type:"bar"});Ext.reg("barchart",Ext.chart.BarChart);Ext.chart.StackedBarChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackbar"});Ext.reg("stackedbarchart",Ext.chart.StackedBarChart);Ext.chart.Axis=function(a){Ext.apply(this,a)};Ext.chart.Axis.prototype={type:null,orientation:"horizontal",reverse:false,labelFunction:null,hideOverlappingLabels:true,labelSpacing:2};Ext.chart.NumericAxis=Ext.extend(Ext.chart.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,alwaysShowZero:true,scale:"linear",roundMajorUnit:true,calculateByLabelSize:true,position:"left",adjustMaximumByMajorUnit:true,adjustMinimumByMajorUnit:true});Ext.chart.TimeAxis=Ext.extend(Ext.chart.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:null,snapToUnits:true,stackingEnabled:false,calculateByLabelSize:true});Ext.chart.CategoryAxis=Ext.extend(Ext.chart.Axis,{type:"category",categoryNames:null,calculateCategoryCount:false});Ext.chart.Series=function(a){Ext.apply(this,a)};Ext.chart.Series.prototype={type:null,displayName:null};Ext.chart.CartesianSeries=Ext.extend(Ext.chart.Series,{xField:null,yField:null,showInLegend:true,axis:"primary"});Ext.chart.ColumnSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"column"});Ext.chart.LineSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"line"});Ext.chart.BarSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"bar"});Ext.chart.PieSeries=Ext.extend(Ext.chart.Series,{type:"pie",dataField:null,categoryField:null});Ext.menu.Menu=Ext.extend(Ext.Container,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,enableScrolling:true,maxHeight:null,scrollIncrement:24,showSeparator:true,defaultOffsets:[0,0],plain:false,floating:true,zIndex:15000,hidden:true,layout:"menu",hideMode:"offsets",scrollerHeight:8,autoLayout:true,defaultType:"menuitem",bufferResize:false,initComponent:function(){if(Ext.isArray(this.initialConfig)){Ext.apply(this,{items:this.initialConfig})}this.addEvents("click","mouseover","mouseout","itemclick");Ext.menu.MenuMgr.register(this);if(this.floating){Ext.EventManager.onWindowResize(this.hide,this)}else{if(this.initialConfig.hidden!==false){this.hidden=false}this.internalDefaults={hideOnClick:false}}Ext.menu.Menu.superclass.initComponent.call(this);if(this.autoLayout){var a=this.doLayout.createDelegate(this,[]);this.on({add:a,remove:a})}},getLayoutTarget:function(){return this.ul},onRender:function(b,a){if(!b){b=Ext.getBody()}var c={id:this.getId(),cls:"x-menu "+((this.floating)?"x-menu-floating x-layer ":"")+(this.cls||"")+(this.plain?" x-menu-plain":"")+(this.showSeparator?"":" x-menu-nosep"),style:this.style,cn:[{tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"},{tag:"ul",cls:"x-menu-list"}]};if(this.floating){this.el=new Ext.Layer({shadow:this.shadow,dh:c,constrain:false,parentEl:b,zindex:this.zIndex})}else{this.el=b.createChild(c)}Ext.menu.Menu.superclass.onRender.call(this,b,a);if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this)}this.focusEl=this.el.child("a.x-menu-focus");this.ul=this.el.child("ul.x-menu-list");this.mon(this.ul,{scope:this,click:this.onClick,mouseover:this.onMouseOver,mouseout:this.onMouseOut});if(this.enableScrolling){this.mon(this.el,{scope:this,delegate:".x-menu-scroller",click:this.onScroll,mouseover:this.deactivateActive})}},findTargetItem:function(b){var a=b.getTarget(".x-menu-list-item",this.ul,true);if(a&&a.menuItemId){return this.items.get(a.menuItemId)}},onClick:function(b){var a=this.findTargetItem(b);if(a){if(a.isFormField){this.setActiveItem(a)}else{if(a instanceof Ext.menu.BaseItem){if(a.menu&&this.ignoreParentClicks){a.expandMenu();b.preventDefault()}else{if(a.onClick){a.onClick(b);this.fireEvent("click",this,a,b)}}}}}},setActiveItem:function(a,b){if(a!=this.activeItem){this.deactivateActive();if((this.activeItem=a).isFormField){a.focus()}else{a.activate(b)}}else{if(b){a.expandMenu()}}},deactivateActive:function(){var b=this.activeItem;if(b){if(b.isFormField){if(b.collapse){b.collapse()}}else{b.deactivate()}delete this.activeItem}},tryActivate:function(g,e){var b=this.items;for(var c=g,a=b.length;c>=0&&c=a.scrollHeight){this.onScrollerOut(null,b)}},onScrollerIn:function(d,b){var a=this.ul.dom,c=Ext.fly(b).is(".x-menu-scroller-top");if(c?a.scrollTop>0:a.scrollTop+this.activeMaxc){b=c;a=i-h}else{if(bb&&b>0){this.activeMax=b-this.scrollerHeight*2-this.el.getFrameWidth("tb")-Ext.num(this.el.shadowOffset,0);this.ul.setHeight(this.activeMax);this.createScrollers();this.el.select(".x-menu-scroller").setDisplayed("")}else{this.ul.setHeight(d);this.el.select(".x-menu-scroller").setDisplayed("none")}this.ul.dom.scrollTop=0;return a},createScrollers:function(){if(!this.scroller){this.scroller={pos:0,top:this.el.insertFirst({tag:"div",cls:"x-menu-scroller x-menu-scroller-top",html:" "}),bottom:this.el.createChild({tag:"div",cls:"x-menu-scroller x-menu-scroller-bottom",html:" "})};this.scroller.top.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.topRepeater=new Ext.util.ClickRepeater(this.scroller.top,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.top],false)}});this.scroller.bottom.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.bottomRepeater=new Ext.util.ClickRepeater(this.scroller.bottom,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.bottom],false)}})}},onLayout:function(){if(this.isVisible()){if(this.enableScrolling){this.constrainScroll(this.el.getTop())}if(this.floating){this.el.sync()}}},focus:function(){if(!this.hidden){this.doFocus.defer(50,this)}},doFocus:function(){if(!this.hidden){this.focusEl.focus()}},hide:function(a){if(!this.isDestroyed){this.deepHide=a;Ext.menu.Menu.superclass.hide.call(this);delete this.deepHide}},onHide:function(){Ext.menu.Menu.superclass.onHide.call(this);this.deactivateActive();if(this.el&&this.floating){this.el.hide()}var a=this.parentMenu;if(this.deepHide===true&&a){if(a.floating){a.hide(true)}else{a.deactivateActive()}}},lookupComponent:function(a){if(Ext.isString(a)){a=(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.TextItem(a);this.applyDefaults(a)}else{if(Ext.isObject(a)){a=this.getMenuItem(a)}else{if(a.tagName||a.el){a=new Ext.BoxComponent({el:a})}}}return a},applyDefaults:function(b){if(!Ext.isString(b)){b=Ext.menu.Menu.superclass.applyDefaults.call(this,b);var a=this.internalDefaults;if(a){if(b.events){Ext.applyIf(b.initialConfig,a);Ext.apply(b,a)}else{Ext.applyIf(b,a)}}}return b},getMenuItem:function(a){a.ownerCt=this;if(!a.isXType){if(!a.xtype&&Ext.isBoolean(a.checked)){return new Ext.menu.CheckItem(a)}return Ext.create(a,this.defaultType)}return a},addSeparator:function(){return this.add(new Ext.menu.Separator())},addElement:function(a){return this.add(new Ext.menu.BaseItem({el:a}))},addItem:function(a){return this.add(a)},addMenuItem:function(a){return this.add(this.getMenuItem(a))},addText:function(a){return this.add(new Ext.menu.TextItem(a))},onDestroy:function(){Ext.EventManager.removeResizeListener(this.hide,this);var a=this.parentMenu;if(a&&a.activeChild==this){delete a.activeChild}delete this.parentMenu;Ext.menu.Menu.superclass.onDestroy.call(this);Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable()}var b=this.scroller;if(b){Ext.destroy(b.topRepeater,b.bottomRepeater,b.top,b.bottom)}Ext.destroy(this.el,this.focusEl,this.ul)}});Ext.reg("menu",Ext.menu.Menu);Ext.menu.MenuNav=Ext.extend(Ext.KeyNav,function(){function a(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)-1,-1)){c.tryActivate(c.items.length-1,-1)}}function b(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)+1,1)){c.tryActivate(0,1)}}return{constructor:function(c){Ext.menu.MenuNav.superclass.constructor.call(this,c.el);this.scope=this.menu=c},doRelay:function(g,d){var c=g.getKey();if(this.menu.activeItem&&this.menu.activeItem.isFormField&&c!=g.TAB){return false}if(!this.menu.activeItem&&g.isNavKeyPress()&&c!=g.SPACE&&c!=g.RETURN){this.menu.tryActivate(0,1);return false}return d.call(this.scope||this,g,this.menu)},tab:function(d,c){d.stopEvent();if(d.shiftKey){a(d,c)}else{b(d,c)}},up:a,down:b,right:function(d,c){if(c.activeItem){c.activeItem.expandMenu(true)}},left:function(d,c){c.hide();if(c.parentMenu&&c.parentMenu.activeItem){c.parentMenu.activeItem.activate()}},enter:function(d,c){if(c.activeItem){d.stopPropagation();c.activeItem.onClick(d);c.fireEvent("click",this,c.activeItem);return true}}}}());Ext.menu.MenuMgr=function(){var h,e,b,d={},a=false,l=new Date();function n(){h={};e=new Ext.util.MixedCollection();b=Ext.getDoc().addKeyListener(27,j);b.disable()}function j(){if(e&&e.length>0){var o=e.clone();o.each(function(p){p.hide()});return true}return false}function g(o){e.remove(o);if(e.length<1){b.disable();Ext.getDoc().un("mousedown",m);a=false}}function k(o){var p=e.last();l=new Date();e.add(o);if(!a){b.enable();Ext.getDoc().on("mousedown",m);a=true}if(o.parentMenu){o.getEl().setZIndex(parseInt(o.parentMenu.getEl().getStyle("z-index"),10)+3);o.parentMenu.activeChild=o}else{if(p&&!p.isDestroyed&&p.isVisible()){o.getEl().setZIndex(parseInt(p.getEl().getStyle("z-index"),10)+3)}}}function c(o){if(o.activeChild){o.activeChild.hide()}if(o.autoHideTimer){clearTimeout(o.autoHideTimer);delete o.autoHideTimer}}function i(o){var p=o.parentMenu;if(!p&&!o.allowOtherMenus){j()}else{if(p&&p.activeChild){p.activeChild.hide()}}}function m(o){if(l.getElapsed()>50&&e.length>0&&!o.getTarget(".x-menu")){j()}}return{hideAll:function(){return j()},register:function(o){if(!h){n()}h[o.id]=o;o.on({beforehide:c,hide:g,beforeshow:i,show:k})},get:function(o){if(typeof o=="string"){if(!h){return null}return h[o]}else{if(o.events){return o}else{if(typeof o.length=="number"){return new Ext.menu.Menu({items:o})}else{return Ext.create(o,"menu")}}}},unregister:function(o){delete h[o.id];o.un("beforehide",c);o.un("hide",g);o.un("beforeshow",i);o.un("show",k)},registerCheckable:function(o){var p=o.group;if(p){if(!d[p]){d[p]=[]}d[p].push(o)}},unregisterCheckable:function(o){var p=o.group;if(p){d[p].remove(o)}},onCheckChange:function(q,r){if(q.group&&r){var t=d[q.group],p=0,o=t.length,s;for(;p',' target="{hrefTarget}"',"",">",'{altText}','{text}',"")}var c=this.getTemplateArgs();this.el=b?this.itemTpl.insertBefore(b,c,true):this.itemTpl.append(d,c,true);this.iconEl=this.el.child("img.x-menu-item-icon");this.textEl=this.el.child(".x-menu-item-text");if(!this.href){this.mon(this.el,"click",Ext.emptyFn,null,{preventDefault:true})}Ext.menu.Item.superclass.onRender.call(this,d,b)},getTemplateArgs:function(){return{id:this.id,cls:this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:""),href:this.href||"#",hrefTarget:this.hrefTarget,icon:this.icon||Ext.BLANK_IMAGE_URL,iconCls:this.iconCls||"",text:this.itemText||this.text||" ",altText:this.altText||""}},setText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text);this.parentMenu.layout.doAutoSize()}},setIconClass:function(a){var b=this.iconCls;this.iconCls=a;if(this.rendered){this.iconEl.replaceClass(b,this.iconCls)}},beforeDestroy:function(){clearTimeout(this.showTimer);clearTimeout(this.hideTimer);if(this.menu){delete this.menu.ownerCt;this.menu.destroy()}Ext.menu.Item.superclass.beforeDestroy.call(this)},handleClick:function(a){if(!this.href){a.stopEvent()}Ext.menu.Item.superclass.handleClick.apply(this,arguments)},activate:function(a){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(a){this.expandMenu()}}return true},shouldDeactivate:function(a){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,a)){if(this.menu&&this.menu.isVisible()){return !this.menu.getEl().getRegion().contains(a.getPoint())}return true}return false},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu()},expandMenu:function(a){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[a])}else{if(this.menu.isVisible()&&a){this.menu.tryActivate(0,1)}}}},deferExpand:function(a){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(a){this.menu.tryActivate(0,1)}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this)}},deferHide:function(){delete this.hideTimer;if(this.menu.over){this.parentMenu.setActiveItem(this,false)}else{this.menu.hide()}}});Ext.reg("menuitem",Ext.menu.Item);Ext.menu.CheckItem=Ext.extend(Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",initComponent:function(){Ext.menu.CheckItem.superclass.initComponent.call(this);this.addEvents("beforecheckchange","checkchange");if(this.checkHandler){this.on("checkchange",this.checkHandler,this.scope)}Ext.menu.MenuMgr.registerCheckable(this)},onRender:function(a){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass)}if(this.checked){this.checked=false;this.setChecked(true,true)}},destroy:function(){Ext.menu.MenuMgr.unregisterCheckable(this);Ext.menu.CheckItem.superclass.destroy.apply(this,arguments)},setChecked:function(b,a){var c=a===true;if(this.checked!=b&&(c||this.fireEvent("beforecheckchange",this,b)!==false)){Ext.menu.MenuMgr.onCheckChange(this,b);if(this.container){this.container[b?"addClass":"removeClass"]("x-menu-item-checked")}this.checked=b;if(!c){this.fireEvent("checkchange",this,b)}}},handleClick:function(a){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked)}Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments)}});Ext.reg("menucheckitem",Ext.menu.CheckItem);Ext.menu.DateMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,pickerId:null,cls:"x-date-menu",initComponent:function(){this.on("beforeshow",this.onBeforeShow,this);if(this.strict=(Ext.isIE7&&Ext.isStrict)){this.on("show",this.onShow,this,{single:true,delay:20})}Ext.apply(this,{plain:true,showSeparator:false,items:this.picker=new Ext.DatePicker(Ext.applyIf({internalRender:this.strict||!Ext.isIE,ctCls:"x-menu-date-item",id:this.pickerId},this.initialConfig))});this.picker.purgeListeners();Ext.menu.DateMenu.superclass.initComponent.call(this);this.relayEvents(this.picker,["select"]);this.on("show",this.picker.focus,this.picker);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}},onBeforeShow:function(){if(this.picker){this.picker.hideMonthPicker(true)}},onShow:function(){var a=this.picker.getEl();a.setWidth(a.getWidth())}});Ext.reg("datemenu",Ext.menu.DateMenu);Ext.menu.ColorMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,cls:"x-color-menu",paletteId:null,initComponent:function(){Ext.apply(this,{plain:true,showSeparator:false,items:this.palette=new Ext.ColorPalette(Ext.applyIf({id:this.paletteId},this.initialConfig))});this.palette.purgeListeners();Ext.menu.ColorMenu.superclass.initComponent.call(this);this.relayEvents(this.palette,["select"]);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}}});Ext.reg("colormenu",Ext.menu.ColorMenu);Ext.form.Field=Ext.extend(Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,submitValue:true,isFormField:true,msgDisplay:"",hasFocus:false,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents("focus","blur","specialkey","change","invalid","valid")},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:this.name||this.id||""},onRender:function(c,a){if(!this.el){var b=this.getAutoCreate();if(!b.name){b.name=this.name||this.id}if(this.inputType){b.type=this.inputType}this.autoEl=b}Ext.form.Field.superclass.onRender.call(this,c,a);if(this.submitValue===false){this.el.dom.removeAttribute("name")}var d=this.el.dom.type;if(d){if(d=="password"){d="text"}this.el.addClass("x-form-"+d)}if(this.readOnly){this.setReadOnly(true)}if(this.tabIndex!==undefined){this.el.dom.setAttribute("tabIndex",this.tabIndex)}this.el.addClass([this.fieldClass,this.cls])},getItemCt:function(){return this.itemCt},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value)}}this.originalValue=this.getValue()},isDirty:function(){if(this.disabled||!this.rendered){return false}return String(this.getValue())!==String(this.originalValue)},setReadOnly:function(a){if(this.rendered){this.el.dom.readOnly=a}this.readOnly=a},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue()},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,a)}},reset:function(){this.setValue(this.originalValue);this.clearInvalid()},initEvents:function(){this.mon(this.el,Ext.EventManager.getKeyEvent(),this.fireKey,this);this.mon(this.el,"focus",this.onFocus,this);this.mon(this.el,"blur",this.onBlur,this,this.inEditor?{buffer:10}:null)},preFocus:Ext.emptyFn,onFocus:function(){this.preFocus();if(this.focusClass){this.el.addClass(this.focusClass)}if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this)}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(this.focusClass){this.el.removeClass(this.focusClass)}this.hasFocus=false;if(this.validationEvent!==false&&(this.validateOnBlur||this.validationEvent=="blur")){this.validate()}var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}this.fireEvent("blur",this);this.postBlur()},postBlur:Ext.emptyFn,isValid:function(a){if(this.disabled){return true}var c=this.preventMark;this.preventMark=a===true;var b=this.validateValue(this.processValue(this.getRawValue()),a);this.preventMark=c;return b},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true}return false},processValue:function(a){return a},validateValue:function(b){var a=this.getErrors(b)[0];if(a==undefined){return true}else{this.markInvalid(a);return false}},getErrors:function(){return[]},getActiveError:function(){return this.activeError||""},markInvalid:function(c){if(this.rendered&&!this.preventMark){c=c||this.invalidText;var a=this.getMessageHandler();if(a){a.mark(this,c)}else{if(this.msgTarget){this.el.addClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML=c;b.style.display=this.msgDisplay}}}}this.setActiveError(c)},clearInvalid:function(){if(this.rendered&&!this.preventMark){this.el.removeClass(this.invalidClass);var a=this.getMessageHandler();if(a){a.clear(this)}else{if(this.msgTarget){this.el.removeClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML="";b.style.display="none"}}}}this.unsetActiveError()},setActiveError:function(b,a){this.activeError=b;if(a!==true){this.fireEvent("invalid",this,b)}},unsetActiveError:function(a){delete this.activeError;if(a!==true){this.fireEvent("valid",this)}},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget]},getErrorCt:function(){return this.el.findParent(".x-form-element",5,true)||this.el.findParent(".x-form-field-wrap",5,true)},alignErrorEl:function(){this.errorEl.setWidth(this.getErrorCt().getWidth(true)-20)},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,"tl-tr",[2,0])},getRawValue:function(){var a=this.rendered?this.el.getValue():Ext.value(this.value,"");if(a===this.emptyText){a=""}return a},getValue:function(){if(!this.rendered){return this.value}var a=this.el.getValue();if(a===this.emptyText||a===undefined){a=""}return a},setRawValue:function(a){return this.rendered?(this.el.dom.value=(Ext.isEmpty(a)?"":a)):""},setValue:function(a){this.value=a;if(this.rendered){this.el.dom.value=(Ext.isEmpty(a)?"":a);this.validate()}return this},append:function(a){this.setValue([this.getValue(),a].join(""))}});Ext.form.MessageTargets={qtip:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.qtip=b;a.el.dom.qclass="x-form-invalid-tip";if(Ext.QuickTips){Ext.QuickTips.enable()}},clear:function(a){a.el.removeClass(a.invalidClass);a.el.dom.qtip=""}},title:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.title=b},clear:function(a){a.el.dom.title=""}},under:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorEl){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorEl=a.createChild({cls:"x-form-invalid-msg"});b.on("resize",b.alignErrorEl,b);b.on("destroy",function(){Ext.destroy(this.errorEl)},b)}b.alignErrorEl();b.errorEl.update(c);Ext.form.Field.msgFx[b.msgFx].show(b.errorEl,b)},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorEl){Ext.form.Field.msgFx[a.msgFx].hide(a.errorEl,a)}else{a.el.dom.title=""}}},side:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorIcon){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorIcon=a.createChild({cls:"x-form-invalid-icon"});if(b.ownerCt){b.ownerCt.on("afterlayout",b.alignErrorIcon,b);b.ownerCt.on("expand",b.alignErrorIcon,b)}b.on("resize",b.alignErrorIcon,b);b.on("destroy",function(){Ext.destroy(this.errorIcon)},b)}b.alignErrorIcon();b.errorIcon.dom.qtip=c;b.errorIcon.dom.qclass="x-form-invalid-tip";b.errorIcon.show()},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorIcon){a.errorIcon.dom.qtip="";a.errorIcon.hide()}else{a.el.dom.title=""}}}};Ext.form.Field.msgFx={normal:{show:function(a,b){a.setDisplayed("block")},hide:function(a,b){a.setDisplayed(false).update("")}},slide:{show:function(a,b){a.slideIn("t",{stopFx:true})},hide:function(a,b){a.slideOut("t",{stopFx:true,useDisplay:true})}},slideRight:{show:function(a,b){a.fixDisplay();a.alignTo(b.el,"tl-tr");a.slideIn("l",{stopFx:true})},hide:function(a,b){a.slideOut("l",{stopFx:true,useDisplay:true})}}};Ext.reg("field",Ext.form.Field);Ext.form.TextField=Ext.extend(Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initComponent:function(){Ext.form.TextField.superclass.initComponent.call(this);this.addEvents("autosize","keydown","keyup","keypress")},initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=="keyup"){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.mon(this.el,"keyup",this.filterValidation,this)}else{if(this.validationEvent!==false&&this.validationEvent!="blur"){this.mon(this.el,this.validationEvent,this.validate,this,{buffer:this.validationDelay})}}if(this.selectOnFocus||this.emptyText){this.mon(this.el,"mousedown",this.onMouseDown,this);if(this.emptyText){this.applyEmptyText()}}if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+"Mask"]))){this.mon(this.el,"keypress",this.filterKeys,this)}if(this.grow){this.mon(this.el,"keyup",this.onKeyUpBuffered,this,{buffer:50});this.mon(this.el,"click",this.autoSize,this)}if(this.enableKeyEvents){this.mon(this.el,{scope:this,keyup:this.onKeyUp,keydown:this.onKeyDown,keypress:this.onKeyPress})}},onMouseDown:function(a){if(!this.hasFocus){this.mon(this.el,"mouseup",Ext.emptyFn,this,{single:true,preventDefault:true})}},processValue:function(a){if(this.stripCharsRe){var b=a.replace(this.stripCharsRe,"");if(b!==a){this.setRawValue(b);return b}}return a},filterValidation:function(a){if(!a.isNavKeyPress()){this.validationTask.delay(this.validationDelay)}},onDisable:function(){Ext.form.TextField.superclass.onDisable.call(this);if(Ext.isIE){this.el.dom.unselectable="on"}},onEnable:function(){Ext.form.TextField.superclass.onEnable.call(this);if(Ext.isIE){this.el.dom.unselectable=""}},onKeyUpBuffered:function(a){if(this.doAutoSize(a)){this.autoSize()}},doAutoSize:function(a){return !a.isNavKeyPress()},onKeyUp:function(a){this.fireEvent("keyup",this,a)},onKeyDown:function(a){this.fireEvent("keydown",this,a)},onKeyPress:function(a){this.fireEvent("keypress",this,a)},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass)}},preFocus:function(){var a=this.el,b;if(this.emptyText){if(a.dom.value==this.emptyText){this.setRawValue("");b=true}a.removeClass(this.emptyClass)}if(this.selectOnFocus||b){a.dom.select()}},postBlur:function(){this.applyEmptyText()},filterKeys:function(b){if(b.ctrlKey){return}var a=b.getKey();if(Ext.isGecko&&(b.isNavKeyPress()||a==b.BACKSPACE||(a==b.DELETE&&b.button==-1))){return}var c=String.fromCharCode(b.getCharCode());if(!Ext.isGecko&&b.isSpecialKey()&&!c){return}if(!this.maskRe.test(c)){b.stopEvent()}},setValue:function(a){if(this.emptyText&&this.el&&!Ext.isEmpty(a)){this.el.removeClass(this.emptyClass)}Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize();return this},getErrors:function(a){var d=Ext.form.TextField.superclass.getErrors.apply(this,arguments);a=Ext.isDefined(a)?a:this.processValue(this.getRawValue());if(Ext.isFunction(this.validator)){var c=this.validator(a);if(c!==true){d.push(c)}}if(a.length<1||a===this.emptyText){if(this.allowBlank){return d}else{d.push(this.blankText)}}if(!this.allowBlank&&(a.length<1||a===this.emptyText)){d.push(this.blankText)}if(a.lengththis.maxLength){d.push(String.format(this.maxLengthText,this.maxLength))}if(this.vtype){var b=Ext.form.VTypes;if(!b[this.vtype](a,this)){d.push(this.vtypeText||b[this.vtype+"Text"])}}if(this.regex&&!this.regex.test(a)){d.push(this.regexText)}return d},selectText:function(h,a){var c=this.getRawValue();var e=false;if(c.length>0){h=h===undefined?0:h;a=a===undefined?c.length:a;var g=this.el.dom;if(g.setSelectionRange){g.setSelectionRange(h,a)}else{if(g.createTextRange){var b=g.createTextRange();b.moveStart("character",h);b.moveEnd("character",a-c.length);b.select()}}e=Ext.isGecko||Ext.isOpera}else{e=true}if(e){this.focus()}},autoSize:function(){if(!this.grow||!this.rendered){return}if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el)}var c=this.el;var b=c.dom.value;var e=document.createElement("div");e.appendChild(document.createTextNode(b));b=e.innerHTML;Ext.removeNode(e);e=null;b+=" ";var a=Math.min(this.growMax,Math.max(this.metrics.getWidth(b)+10,this.growMin));this.el.setWidth(a);this.fireEvent("autosize",this,a)},onDestroy:function(){if(this.validationTask){this.validationTask.cancel();this.validationTask=null}Ext.form.TextField.superclass.onDestroy.call(this)}});Ext.reg("textfield",Ext.form.TextField);Ext.form.TriggerField=Ext.extend(Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,editable:true,readOnly:false,wrapFocusClass:"x-trigger-wrap-focus",autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,mimicing:false,actionMode:"wrap",defaultTriggerWidth:17,onResize:function(a,c){Ext.form.TriggerField.superclass.onResize.call(this,a,c);var b=this.getTriggerWidth();if(Ext.isNumber(a)){this.el.setWidth(a-b)}this.wrap.setWidth(this.el.getWidth()+b)},getTriggerWidth:function(){var a=this.trigger.getWidth();if(!this.hideTrigger&&!this.readOnly&&a===0){a=this.defaultTriggerWidth}return a},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},onRender:function(b,a){this.doc=Ext.isIE?Ext.getBody():Ext.getDoc();Ext.form.TriggerField.superclass.onRender.call(this,b,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-field-trigger-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.triggerClass});this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())}this.resizeEl=this.positionEl=this.wrap},getWidth:function(){return(this.el.getWidth()+this.trigger.getWidth())},updateEditState:function(){if(this.rendered){if(this.readOnly){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this);this.trigger.setDisplayed(false)}else{if(!this.editable){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mon(this.el,"click",this.onTriggerClick,this)}else{this.el.dom.readOnly=false;this.el.removeClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this)}this.trigger.setDisplayed(!this.hideTrigger)}this.onResize(this.width||this.wrap.getWidth())}},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateEditState()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateEditState()}},setReadOnly:function(a){if(a!=this.readOnly){this.readOnly=a;this.updateEditState()}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);this.updateEditState()},initTrigger:function(){this.mon(this.trigger,"click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},onDestroy:function(){Ext.destroy(this.trigger,this.wrap);if(this.mimicing){this.doc.un("mousedown",this.mimicBlur,this)}delete this.doc;Ext.form.TriggerField.superclass.onDestroy.call(this)},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass(this.wrapFocusClass);this.mimicing=true;this.doc.on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.on("specialkey",this.checkTab,this)}}},checkTab:function(a,b){if(b.getKey()==b.TAB){this.triggerBlur()}},onBlur:Ext.emptyFn,mimicBlur:function(a){if(!this.isDestroyed&&!this.wrap.contains(a.target)&&this.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;this.doc.un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.un("specialkey",this.checkTab,this)}Ext.form.TriggerField.superclass.onBlur.call(this);if(this.wrap){this.wrap.removeClass(this.wrapFocusClass)}},beforeBlur:Ext.emptyFn,validateBlur:function(a){return true},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger2Class}]}},getTrigger:function(a){return this.triggers[a]},afterRender:function(){Ext.form.TwinTriggerField.superclass.afterRender.call(this);var c=this.triggers,b=0,a=c.length;for(;b")}}d.innerHTML=a;b=Math.min(this.growMax,Math.max(d.offsetHeight,this.growMin));if(b!=this.lastHeight){this.lastHeight=b;this.el.setHeight(b);this.fireEvent("autosize",this,b)}}});Ext.reg("textarea",Ext.form.TextArea);Ext.form.NumberField=Ext.extend(Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",baseChars:"0123456789",autoStripChars:false,initEvents:function(){var a=this.baseChars+"";if(this.allowDecimals){a+=this.decimalSeparator}if(this.allowNegative){a+="-"}a=Ext.escapeRe(a);this.maskRe=new RegExp("["+a+"]");if(this.autoStripChars){this.stripCharsRe=new RegExp("[^"+a+"]","gi")}Ext.form.NumberField.superclass.initEvents.call(this)},getErrors:function(b){var c=Ext.form.NumberField.superclass.getErrors.apply(this,arguments);b=Ext.isDefined(b)?b:this.processValue(this.getRawValue());if(b.length<1){return c}b=String(b).replace(this.decimalSeparator,".");if(isNaN(b)){c.push(String.format(this.nanText,b))}var a=this.parseValue(b);if(athis.maxValue){c.push(String.format(this.maxText,this.maxValue))}return c},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))},setValue:function(a){a=Ext.isNumber(a)?a:parseFloat(String(a).replace(this.decimalSeparator,"."));a=this.fixPrecision(a);a=isNaN(a)?"":String(a).replace(".",this.decimalSeparator);return Ext.form.NumberField.superclass.setValue.call(this,a)},setMinValue:function(a){this.minValue=Ext.num(a,Number.NEGATIVE_INFINITY)},setMaxValue:function(a){this.maxValue=Ext.num(a,Number.MAX_VALUE)},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?"":a},fixPrecision:function(b){var a=isNaN(b);if(!this.allowDecimals||this.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.decimalPrecision))},beforeBlur:function(){var a=this.parseValue(this.getRawValue());if(!Ext.isEmpty(a)){this.setValue(a)}}});Ext.reg("numberfield",Ext.form.NumberField);Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:"x-form-date-trigger",showToday:true,startDay:0,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initTime:"12",initTimeFormat:"H",safeParse:function(b,c){if(Date.formatContainsHourInfo(c)){return Date.parseDate(b,c)}else{var a=Date.parseDate(b+" "+this.initTime,c+" "+this.initTimeFormat);if(a){return a.clearTime()}}},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);this.addEvents("select");if(Ext.isString(this.minValue)){this.minValue=this.parseDate(this.minValue)}if(Ext.isString(this.maxValue)){this.maxValue=this.parseDate(this.maxValue)}this.disabledDatesRE=null;this.initDisabledDays()},initEvents:function(){Ext.form.DateField.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{down:function(a){this.onTriggerClick()},scope:this,forceKeyDown:true})},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){this.disabledDates=a;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE)}},setDisabledDays:function(a){this.disabledDays=a;if(this.menu){this.menu.picker.setDisabledDays(a)}},setMinValue:function(a){this.minValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMinDate(this.minValue)}},setMaxValue:function(a){this.maxValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMaxDate(this.maxValue)}},getErrors:function(e){var h=Ext.form.DateField.superclass.getErrors.apply(this,arguments);e=this.formatDate(e||this.processValue(this.getRawValue()));if(e.length<1){return h}var c=e;e=this.parseDate(e);if(!e){h.push(String.format(this.invalidText,c,this.format));return h}var g=e.getTime();if(this.minValue&&gthis.maxValue.clearTime().getTime()){h.push(String.format(this.maxText,this.formatDate(this.maxValue)))}if(this.disabledDays){var a=e.getDay();for(var b=0;b
{'+this.displayField+"}
"}this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+a+"-item",emptyText:this.listEmptyText,deferEmptyText:false});this.mon(this.view,{containerclick:this.onViewClick,click:this.onViewClick,scope:this});this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.mon(this.resizer,"resize",function(g,d,e){this.maxHeight=e-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=d;this.innerList.setWidth(d-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}}},getListParent:function(){return document.body},getStore:function(){return this.store},bindStore:function(a,b){if(this.store&&!b){if(this.store!==a&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.collapse,this)}if(!a){this.store=null;if(this.view){this.view.bindStore(null)}if(this.pageTb){this.pageTb.bindStore(null)}}}if(a){if(!b){this.lastQuery=null;if(this.pageTb){this.pageTb.bindStore(a)}}this.store=Ext.StoreMgr.lookup(a);this.store.on({scope:this,beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.collapse});if(this.view){this.view.bindStore(a)}}},reset:function(){if(this.clearFilterOnReset&&this.mode=="local"){this.store.clearFilter()}Ext.form.ComboBox.superclass.reset.call(this)},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{up:function(a){this.inKeyMode=true;this.selectPrev()},down:function(a){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.selectNext()}},enter:function(a){this.onViewClick()},esc:function(a){this.collapse()},tab:function(a){if(this.forceSelection===true){this.collapse()}else{this.onViewClick(false)}return true},scope:this,doRelay:function(c,b,a){if(a=="down"||this.scope.isExpanded()){var d=Ext.KeyNav.prototype.doRelay.apply(this,arguments);if(!Ext.isIE&&Ext.EventManager.useKeydown){this.scope.fireKey(c)}return d}return true},forceKeyDown:true,defaultEventAction:"stopEvent"});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(!this.enableKeyEvents){this.mon(this.el,"keyup",this.onKeyUp,this)}},onDestroy:function(){if(this.dqTask){this.dqTask.cancel();this.dqTask=null}this.bindStore(null);Ext.destroy(this.resizer,this.view,this.pageTb,this.list);Ext.destroyMembers(this,"hiddenField");Ext.form.ComboBox.superclass.onDestroy.call(this)},fireKey:function(a){if(!this.isExpanded()){Ext.form.ComboBox.superclass.fireKey.call(this,a)}},onResize:function(a,b){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(!isNaN(a)&&this.isVisible()&&this.list){this.doResize(a)}else{this.bufferSize=a}},doResize:function(a){if(!Ext.isDefined(this.listWidth)){var b=Math.max(a,this.minListWidth);this.list.setWidth(b);this.innerList.setWidth(b-this.list.getFrameWidth("lr"))}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true}},onBeforeLoad:function(){if(!this.hasFocus){return}this.innerList.update(this.loadingText?'
'+this.loadingText+"
":"");this.restrictHeight();this.selectedIndex=-1},onLoad:function(){if(!this.hasFocus){return}if(this.store.getCount()>0||this.listEmptyText){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}if(this.autoSelect!==false&&!this.selectByValue(this.value,true)){this.select(0,true)}}else{if(this.autoSelect!==false){this.selectNext()}if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.collapse()}},onTypeAhead:function(){if(this.store.getCount()>0){var b=this.store.getAt(0);var c=b.data[this.displayField];var a=c.length;var d=this.getRawValue().length;if(d!=a){this.setRawValue(c);this.selectText(d,c.length)}}},assertValue:function(){var b=this.getRawValue(),a;if(this.valueField&&Ext.isDefined(this.value)){a=this.findRecord(this.valueField,this.value)}if(!a||a.get(this.displayField)!=b){a=this.findRecord(this.displayField,b)}if(!a&&this.forceSelection){if(b.length>0&&b!=this.emptyText){this.el.dom.value=Ext.value(this.lastSelectionText,"");this.applyEmptyText()}else{this.clearValue()}}else{if(a&&this.valueField){if(this.value==b){return}b=a.get(this.valueField||this.displayField)}this.setValue(b)}},onSelect:function(a,b){if(this.fireEvent("beforeselect",this,a,b)!==false){this.setValue(a.data[this.valueField||this.displayField]);this.collapse();this.fireEvent("select",this,a,b)}},getName:function(){var a=this.hiddenField;return a&&a.name?a.name:this.hiddenName||Ext.form.ComboBox.superclass.getName.call(this)},getValue:function(){if(this.valueField){return Ext.isDefined(this.value)?this.value:""}else{return Ext.form.ComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.lastSelectionText="";this.applyEmptyText();this.value=""},setValue:function(a){var c=a;if(this.valueField){var b=this.findRecord(this.valueField,a);if(b){c=b.data[this.displayField]}else{if(Ext.isDefined(this.valueNotFoundText)){c=this.valueNotFoundText}}}this.lastSelectionText=c;if(this.hiddenField){this.hiddenField.value=Ext.value(a,"")}Ext.form.ComboBox.superclass.setValue.call(this,c);this.value=a;return this},findRecord:function(c,b){var a;if(this.store.getCount()>0){this.store.each(function(d){if(d.data[c]==b){a=d;return false}})}return a},onViewMove:function(b,a){this.inKeyMode=false},onViewOver:function(d,b){if(this.inKeyMode){return}var c=this.view.findItemFromChild(b);if(c){var a=this.view.indexOf(c);this.select(a,false)}},onViewClick:function(b){var a=this.view.getSelectedIndexes()[0],c=this.store,d=c.getAt(a);if(d){this.onSelect(d,a)}else{this.collapse()}if(b!==false){this.el.focus()}},restrictHeight:function(){this.innerList.dom.style.height="";var b=this.innerList.dom,e=this.list.getFrameWidth("tb")+(this.resizable?this.handleHeight:0)+this.assetHeight,c=Math.max(b.clientHeight,b.offsetHeight,b.scrollHeight),a=this.getPosition()[1]-Ext.getBody().getScroll().top,g=Ext.lib.Dom.getViewHeight()-a-this.getSize().height,d=Math.max(a,g,this.minHeight||0)-this.list.shadowOffset-e-5;c=Math.min(c,d,this.maxHeight);this.innerList.setHeight(c);this.list.beginUpdate();this.list.setHeight(c+e);this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.endUpdate()},isExpanded:function(){return this.list&&this.list.isVisible()},selectByValue:function(a,c){if(!Ext.isEmpty(a,true)){var b=this.findRecord(this.valueField||this.displayField,a);if(b){this.select(this.store.indexOf(b),c);return true}}return false},select:function(a,c){this.selectedIndex=a;this.view.select(a);if(c!==false){var b=this.view.getNode(a);if(b){this.innerList.scrollChildIntoView(b,false)}}},selectNext:function(){var a=this.store.getCount();if(a>0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex!==0){this.select(this.selectedIndex-1)}}}},onKeyUp:function(b){var a=b.getKey();if(this.editable!==false&&this.readOnly!==true&&(a==b.BACKSPACE||!b.isSpecialKey())){this.lastKey=a;this.dqTask.delay(this.queryDelay)}Ext.form.ComboBox.superclass.onKeyUp.call(this,b)},validateBlur:function(){return !this.list||!this.list.isVisible()},initQuery:function(){this.doQuery(this.getRawValue())},beforeBlur:function(){this.assertValue()},postBlur:function(){Ext.form.ComboBox.superclass.postBlur.call(this);this.collapse();this.inKeyMode=false},doQuery:function(c,b){c=Ext.isEmpty(c)?"":c;var a={query:c,forceAll:b,combo:this,cancel:false};if(this.fireEvent("beforequery",a)===false||a.cancel){return false}c=a.query;b=a.forceAll;if(b===true||(c.length>=this.minChars)){if(this.lastQuery!==c){this.lastQuery=c;if(this.mode=="local"){this.selectedIndex=-1;if(b){this.store.clearFilter()}else{this.store.filter(this.displayField,c)}this.onLoad()}else{this.store.baseParams[this.queryParam]=c;this.store.load({params:this.getParams(c)});this.expand()}}else{this.selectedIndex=-1;this.onLoad()}}},getParams:function(a){var b={},c=this.store.paramNames;if(this.pageSize){b[c.start]=0;b[c.limit]=this.pageSize}return b},collapse:function(){if(!this.isExpanded()){return}this.list.hide();Ext.getDoc().un("mousewheel",this.collapseIf,this);Ext.getDoc().un("mousedown",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(a){if(!this.isDestroyed&&!a.within(this.wrap)&&!a.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return}if(this.title||this.pageSize){this.assetHeight=0;if(this.title){this.assetHeight+=this.header.getHeight()}if(this.pageSize){this.assetHeight+=this.footer.getHeight()}}if(this.bufferSize){this.doResize(this.bufferSize);delete this.bufferSize}this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.setZIndex(this.getZIndex());this.list.show();if(Ext.isGecko2){this.innerList.setOverflow("auto")}this.mon(Ext.getDoc(),{scope:this,mousewheel:this.collapseIf,mousedown:this.collapseIf});this.fireEvent("expand",this)},onTriggerClick:function(){if(this.readOnly||this.disabled){return}if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}}});Ext.reg("combo",Ext.form.ComboBox);Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,boxLabel:" ",defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},actionMode:"wrap",initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents("check")},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,"c-c")}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.mon(this.el,{scope:this,click:this.onClick,change:this.onClick})},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(b,a){Ext.form.Checkbox.superclass.onRender.call(this,b,a);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})}if(this.checked){this.setValue(true)}else{this.checked=this.el.dom.checked}if(Ext.isIE&&!Ext.isStrict){this.wrap.repaint()}this.resizeEl=this.positionEl=this.wrap},onDestroy:function(){Ext.destroy(this.wrap);Ext.form.Checkbox.superclass.onDestroy.call(this)},initValue:function(){this.originalValue=this.getValue()},getValue:function(){if(this.rendered){return this.el.dom.checked}return this.checked},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked)}},setValue:function(a){var c=this.checked,b=this.inputValue;if(a===false){this.checked=false}else{this.checked=(a===true||a==="true"||a=="1"||(b?a==b:String(a).toLowerCase()=="on"))}if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked}if(c!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked)}}return this}});Ext.reg("checkbox",Ext.form.Checkbox);Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:"auto",vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:"checkbox",groupCls:"x-form-check-group",initComponent:function(){this.addEvents("change");this.on("change",this.validate,this);Ext.form.CheckboxGroup.superclass.initComponent.call(this)},onRender:function(j,g){if(!this.el){var p={autoEl:{id:this.id},cls:this.groupCls,layout:"column",renderTo:j,bufferResize:false};var a={xtype:"container",defaultType:this.defaultType,layout:"form",defaults:{hideLabel:true,anchor:"100%"}};if(this.items[0].items){Ext.apply(p,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,m=this.items.length;e0&&e%r==0){o++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}n[o].items.push(this.items[e])}}else{for(var e=0,m=this.items.length;e-1){b.setValue(true)}})},getBox:function(b){var a=null;this.eachItem(function(c){if(b==c||c.dataIndex==b||c.id==b||c.getName()==b){a=c;return false}});return a},getValue:function(){var a=[];this.eachItem(function(b){if(b.checked){a.push(b)}});return a},eachItem:function(b,a){if(this.items&&this.items.each){this.items.each(b,a||this)}},getRawValue:Ext.emptyFn,setRawValue:Ext.emptyFn});Ext.reg("checkboxgroup",Ext.form.CheckboxGroup);Ext.form.CompositeField=Ext.extend(Ext.form.Field,{defaultMargins:"0 5 0 0",skipLastItemMargin:true,isComposite:true,combineErrors:true,labelConnector:", ",initComponent:function(){var g=[],b=this.items,e;for(var d=0,c=b.length;d")},sortErrors:function(){var a=this.items;this.fieldErrors.sort("ASC",function(g,d){var c=function(b){return function(i){return i.getName()==b}};var h=a.findIndexBy(c(g.field)),e=a.findIndexBy(c(d.field));return h1){var a=this.getBox(c);if(a){a.setValue(b);if(a.checked){this.eachItem(function(d){if(d!==a){d.setValue(false)}})}}}else{this.setValueForItem(c)}},setValueForItem:function(a){a=String(a).split(",")[0];this.eachItem(function(b){b.setValue(a==b.inputValue)})},fireChecked:function(){if(!this.checkTask){this.checkTask=new Ext.util.DelayedTask(this.bufferChecked,this)}this.checkTask.delay(10)},bufferChecked:function(){var a=null;this.eachItem(function(b){if(b.checked){a=b;return false}});this.fireEvent("change",this,a)},onDestroy:function(){if(this.checkTask){this.checkTask.cancel();this.checkTask=null}Ext.form.RadioGroup.superclass.onDestroy.call(this)}});Ext.reg("radiogroup",Ext.form.RadioGroup);Ext.form.Hidden=Ext.extend(Ext.form.Field,{inputType:"hidden",shouldLayout:false,onRender:function(){Ext.form.Hidden.superclass.onRender.apply(this,arguments)},initEvents:function(){this.originalValue=this.getValue()},setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg("hidden",Ext.form.Hidden);Ext.form.BasicForm=Ext.extend(Ext.util.Observable,{constructor:function(b,a){Ext.apply(this,a);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}this.items=new Ext.util.MixedCollection(false,function(c){return c.getItemId()});this.addEvents("beforeaction","actionfailed","actioncomplete");if(b){this.initEl(b)}Ext.form.BasicForm.superclass.constructor.call(this)},timeout:30,paramOrder:undefined,paramsAsHash:false,waitTitle:"Please Wait...",activeAction:null,trackResetOnLoad:false,initEl:function(a){this.el=Ext.get(a);this.id=this.el.id||Ext.id();if(!this.standardSubmit){this.el.on("submit",this.onSubmit,this)}this.el.addClass("x-form")},getEl:function(){return this.el},onSubmit:function(a){a.stopEvent()},destroy:function(a){if(a!==true){this.items.each(function(b){Ext.destroy(b)});Ext.destroy(this.el)}this.items.clear();this.purgeListeners()},isValid:function(){var a=true;this.items.each(function(b){if(!b.validate()){a=false}});return a},isDirty:function(){var a=false;this.items.each(function(b){if(b.isDirty()){a=true;return false}});return a},doAction:function(b,a){if(Ext.isString(b)){b=new Ext.form.Action.ACTION_TYPES[b](this,a)}if(this.fireEvent("beforeaction",this,b)!==false){this.beforeAction(b);b.run.defer(100,b)}return this},submit:function(b){b=b||{};if(this.standardSubmit){var a=b.clientValidation===false||this.isValid();if(a){var c=this.el.dom;if(this.url&&Ext.isEmpty(c.action)){c.action=this.url}c.submit()}return a}var d=String.format("{0}submit",this.api?"direct":"");this.doAction(d,b);return this},load:function(a){var b=String.format("{0}load",this.api?"direct":"");this.doAction(b,a);return this},updateRecord:function(b){b.beginEdit();var a=b.fields,d,c;a.each(function(e){d=this.findField(e.name);if(d){c=d.getValue();if(Ext.type(c)!==false&&c.getGroupValue){c=c.getGroupValue()}else{if(d.eachItem){c=[];d.eachItem(function(g){c.push(g.getValue())})}}b.set(e.name,c)}},this);b.endEdit();return this},loadRecord:function(a){this.setValues(a.data);return this},beforeAction:function(a){this.items.each(function(c){if(c.isFormField&&c.syncValue){c.syncValue()}});var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.mask(b.waitMsg,"x-mask-loading")}else{if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(b.waitMsg,"x-mask-loading")}else{Ext.MessageBox.wait(b.waitMsg,b.waitTitle||this.waitTitle)}}}},afterAction:function(a,c){this.activeAction=null;var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.unmask()}else{if(this.waitMsgTarget){this.waitMsgTarget.unmask()}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}}}if(c){if(b.reset){this.reset()}Ext.callback(b.success,b.scope,[this,a]);this.fireEvent("actioncomplete",this,a)}else{Ext.callback(b.failure,b.scope,[this,a]);this.fireEvent("actionfailed",this,a)}},findField:function(c){var b=this.items.get(c);if(!Ext.isObject(b)){var a=function(d){if(d.isFormField){if(d.dataIndex==c||d.id==c||d.getName()==c){b=d;return false}else{if(d.isComposite){return d.items.each(a)}else{if(d instanceof Ext.form.CheckboxGroup&&d.rendered){return d.eachItem(a)}}}}};this.items.each(a)}return b||null},markInvalid:function(h){if(Ext.isArray(h)){for(var c=0,a=h.length;c':">"),c,"")}return d.join("")},createToolbar:function(e){var c=[];var a=Ext.QuickTips&&Ext.QuickTips.isEnabled();function d(j,h,i){return{itemId:j,cls:"x-btn-icon",iconCls:"x-edit-"+j,enableToggle:h!==false,scope:e,handler:i||e.relayBtnCmd,clickEvent:"mousedown",tooltip:a?e.buttonTips[j]||undefined:undefined,overflowText:e.buttonTips[j].title||undefined,tabIndex:-1}}if(this.enableFont&&!Ext.isSafari2){var g=new Ext.Toolbar.Item({autoEl:{tag:"select",cls:"x-font-select",html:this.createFontOptions()}});c.push(g,"-")}if(this.enableFormat){c.push(d("bold"),d("italic"),d("underline"))}if(this.enableFontSize){c.push("-",d("increasefontsize",false,this.adjustFont),d("decreasefontsize",false,this.adjustFont))}if(this.enableColors){c.push("-",{itemId:"forecolor",cls:"x-btn-icon",iconCls:"x-edit-forecolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.forecolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,listeners:{scope:this,select:function(i,h){this.execCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}},clickEvent:"mousedown"})},{itemId:"backcolor",cls:"x-btn-icon",iconCls:"x-edit-backcolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.backcolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,listeners:{scope:this,select:function(i,h){if(Ext.isGecko){this.execCmd("useCSS",false);this.execCmd("hilitecolor",h);this.execCmd("useCSS",true);this.deferFocus()}else{this.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}}},clickEvent:"mousedown"})})}if(this.enableAlignments){c.push("-",d("justifyleft"),d("justifycenter"),d("justifyright"))}if(!Ext.isSafari2){if(this.enableLinks){c.push("-",d("createlink",false,this.createLink))}if(this.enableLists){c.push("-",d("insertorderedlist"),d("insertunorderedlist"))}if(this.enableSourceEdit){c.push("-",d("sourceedit",true,function(h){this.toggleSourceEdit(!this.sourceEditMode)}))}}var b=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild,items:c});if(g){this.fontSelect=g.el;this.mon(this.fontSelect,"change",function(){var h=this.fontSelect.dom.value;this.relayCmd("fontname",h);this.deferFocus()},this)}this.mon(b.el,"click",function(h){h.preventDefault()});this.tb=b;this.tb.doLayout()},onDisable:function(){this.wrap.mask();Ext.form.HtmlEditor.superclass.onDisable.call(this)},onEnable:function(){this.wrap.unmask();Ext.form.HtmlEditor.superclass.onEnable.call(this)},setReadOnly:function(b){Ext.form.HtmlEditor.superclass.setReadOnly.call(this,b);if(this.initialized){if(Ext.isIE){this.getEditorBody().contentEditable=!b}else{this.setDesignMode(!b)}var a=this.getEditorBody();if(a){a.style.cursor=this.readOnly?"default":"text"}this.disableItems(b)}},getDocMarkup:function(){var a=Ext.fly(this.iframe).getHeight()-this.iframePad*2;return String.format('',this.iframePad,a)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document)},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name]},onRender:function(b,a){Ext.form.HtmlEditor.superclass.onRender.call(this,b,a);this.el.dom.style.border="0 none";this.el.dom.setAttribute("tabIndex",-1);this.el.addClass("x-hidden");if(Ext.isIE){this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")}this.wrap=this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});this.createToolbar(this);this.disableItems(true);this.tb.doLayout();this.createIFrame();if(!this.width){var c=this.el.getSize();this.setSize(c.width,this.height||c.height)}this.resizeEl=this.positionEl=this.wrap},createIFrame:function(){var a=document.createElement("iframe");a.name=Ext.id();a.frameBorder="0";a.style.overflow="auto";a.src=Ext.SSL_SECURE_URL;this.wrap.dom.appendChild(a);this.iframe=a;this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100})},initFrame:function(){Ext.TaskMgr.stop(this.monitorTask);var b=this.getDoc();this.win=this.getWin();b.open();b.write(this.getDocMarkup());b.close();var a={run:function(){var c=this.getDoc();if(c.body||c.readyState=="complete"){Ext.TaskMgr.stop(a);this.setDesignMode(true);this.initEditor.defer(10,this)}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(a)},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var a=this.getDoc();if(!a){return}if(!a.editorInitialized||this.getDesignMode()!="on"){this.initFrame()}}},setDesignMode:function(b){var a=this.getDoc();if(a){if(this.readOnly){b=false}a.designMode=(/on|true/i).test(String(b).toLowerCase())?"on":"off"}},getDesignMode:function(){var a=this.getDoc();if(!a){return""}return String(a.designMode).toLowerCase()},disableItems:function(a){if(this.fontSelect){this.fontSelect.dom.disabled=a}this.tb.items.each(function(b){if(b.getItemId()!="sourceedit"){b.setDisabled(a)}})},onResize:function(b,c){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(Ext.isNumber(b)){var e=b-this.wrap.getFrameWidth("lr");this.el.setWidth(e);this.tb.setWidth(e);this.iframe.style.width=Math.max(e,0)+"px"}if(Ext.isNumber(c)){var a=c-this.wrap.getFrameWidth("tb")-this.tb.el.getHeight();this.el.setHeight(a);this.iframe.style.height=Math.max(a,0)+"px";var d=this.getEditorBody();if(d){d.style.height=Math.max((a-(this.iframePad*2)),0)+"px"}}}},toggleSourceEdit:function(b){var d,a;if(b===undefined){b=!this.sourceEditMode}this.sourceEditMode=b===true;var c=this.tb.getComponent("sourceedit");if(c.pressed!==this.sourceEditMode){c.toggle(this.sourceEditMode);if(!c.xtbHidden){return}}if(this.sourceEditMode){this.previousSize=this.getSize();d=Ext.get(this.iframe).getHeight();this.disableItems(true);this.syncValue();this.iframe.className="x-hidden";this.el.removeClass("x-hidden");this.el.dom.removeAttribute("tabIndex");this.el.focus();this.el.dom.style.height=d+"px"}else{a=parseInt(this.el.dom.style.height,10);if(this.initialized){this.disableItems(this.readOnly)}this.pushValue();this.iframe.className="";this.el.addClass("x-hidden");this.el.dom.setAttribute("tabIndex",-1);this.deferFocus();this.setSize(this.previousSize);delete this.previousSize;this.iframe.style.height=a+"px"}this.fireEvent("editmodechange",this,this.sourceEditMode)},createLink:function(){var a=prompt(this.createLinkText,this.defaultLinkValue);if(a&&a!="http://"){this.relayCmd("createlink",a)}},initEvents:function(){this.originalValue=this.getValue()},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(a){Ext.form.HtmlEditor.superclass.setValue.call(this,a);this.pushValue();return this},cleanHtml:function(a){a=String(a);if(Ext.isWebKit){a=a.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,"")}if(a.charCodeAt(0)==this.defaultValue.replace(/\D/g,"")){a=a.substring(1)}return a},syncValue:function(){if(this.initialized){var d=this.getEditorBody();var c=d.innerHTML;if(Ext.isWebKit){var b=d.getAttribute("style");var a=b.match(/text-align:(.*?);/i);if(a&&a[1]){c='
'+c+"
"}}c=this.cleanHtml(c);if(this.fireEvent("beforesync",this,c)!==false){this.el.dom.value=c;this.fireEvent("sync",this,c)}}},getValue:function(){this[this.sourceEditMode?"pushValue":"syncValue"]();return Ext.form.HtmlEditor.superclass.getValue.call(this)},pushValue:function(){if(this.initialized){var a=this.el.dom.value;if(!this.activated&&a.length<1){a=this.defaultValue}if(this.fireEvent("beforepush",this,a)!==false){this.getEditorBody().innerHTML=a;if(Ext.isGecko){this.setDesignMode(false);this.setDesignMode(true)}this.fireEvent("push",this,a)}}},deferFocus:function(){this.focus.defer(10,this)},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus()}else{this.el.focus()}},initEditor:function(){try{var c=this.getEditorBody(),a=this.el.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),g,b;a["background-attachment"]="fixed";c.bgProperties="fixed";Ext.DomHelper.applyStyles(c,a);g=this.getDoc();if(g){try{Ext.EventManager.removeAll(g)}catch(d){}}b=this.onEditorEvent.createDelegate(this);Ext.EventManager.on(g,{mousedown:b,dblclick:b,click:b,keyup:b,buffer:100});if(Ext.isGecko){Ext.EventManager.on(g,"keypress",this.applyCommand,this)}if(Ext.isIE||Ext.isWebKit||Ext.isOpera){Ext.EventManager.on(g,"keydown",this.fixKeys,this)}g.editorInitialized=true;this.initialized=true;this.pushValue();this.setReadOnly(this.readOnly);this.fireEvent("initialize",this)}catch(d){}},beforeDestroy:function(){if(this.monitorTask){Ext.TaskMgr.stop(this.monitorTask)}if(this.rendered){Ext.destroy(this.tb);var b=this.getDoc();if(b){try{Ext.EventManager.removeAll(b);for(var c in b){delete b[c]}}catch(a){}}if(this.wrap){this.wrap.dom.innerHTML="";this.wrap.remove()}}Ext.form.HtmlEditor.superclass.beforeDestroy.call(this)},onFirstFocus:function(){this.activated=true;this.disableItems(this.readOnly);if(Ext.isGecko){this.win.focus();var a=this.win.getSelection();if(!a.focusNode||a.focusNode.nodeType!=3){var b=a.getRangeAt(0);b.selectNodeContents(this.getEditorBody());b.collapse(true);this.deferFocus()}try{this.execCmd("useCSS",true);this.execCmd("styleWithCSS",false)}catch(c){}}this.fireEvent("activate",this)},adjustFont:function(b){var d=b.getItemId()=="increasefontsize"?1:-1,c=this.getDoc(),a=parseInt(c.queryCommandValue("FontSize")||2,10);if((Ext.isSafari&&!Ext.isSafari2)||Ext.isChrome||Ext.isAir){if(a<=10){a=1+d}else{if(a<=13){a=2+d}else{if(a<=16){a=3+d}else{if(a<=18){a=4+d}else{if(a<=24){a=5+d}else{a=6+d}}}}}a=a.constrain(1,6)}else{if(Ext.isSafari){d*=2}a=Math.max(1,a+d)+(Ext.isSafari?"px":0)}this.execCmd("FontSize",a)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){if(this.readOnly){return}if(!this.activated){this.onFirstFocus();return}var b=this.tb.items.map,c=this.getDoc();if(this.enableFont&&!Ext.isSafari2){var a=(c.queryCommandValue("FontName")||this.defaultFont).toLowerCase();if(a!=this.fontSelect.dom.value){this.fontSelect.dom.value=a}}if(this.enableFormat){b.bold.toggle(c.queryCommandState("bold"));b.italic.toggle(c.queryCommandState("italic"));b.underline.toggle(c.queryCommandState("underline"))}if(this.enableAlignments){b.justifyleft.toggle(c.queryCommandState("justifyleft"));b.justifycenter.toggle(c.queryCommandState("justifycenter"));b.justifyright.toggle(c.queryCommandState("justifyright"))}if(!Ext.isSafari2&&this.enableLists){b.insertorderedlist.toggle(c.queryCommandState("insertorderedlist"));b.insertunorderedlist.toggle(c.queryCommandState("insertunorderedlist"))}Ext.menu.MenuMgr.hideAll();this.syncValue()},relayBtnCmd:function(a){this.relayCmd(a.getItemId())},relayCmd:function(b,a){(function(){this.focus();this.execCmd(b,a);this.updateToolbar()}).defer(10,this)},execCmd:function(b,a){var c=this.getDoc();c.execCommand(b,false,a===undefined?null:a);this.syncValue()},applyCommand:function(b){if(b.ctrlKey){var d=b.getCharCode(),a;if(d>0){d=String.fromCharCode(d);switch(d){case"b":a="bold";break;case"i":a="italic";break;case"u":a="underline";break}if(a){this.win.focus();this.execCmd(a);this.deferFocus();b.preventDefault()}}}},insertAtCursor:function(c){if(!this.activated){return}if(Ext.isIE){this.win.focus();var b=this.getDoc(),a=b.selection.createRange();if(a){a.pasteHTML(c);this.syncValue();this.deferFocus()}}else{this.win.focus();this.execCmd("InsertHTML",c);this.deferFocus()}},fixKeys:function(){if(Ext.isIE){return function(g){var a=g.getKey(),d=this.getDoc(),b;if(a==g.TAB){g.stopEvent();b=d.selection.createRange();if(b){b.collapse(true);b.pasteHTML("    ");this.deferFocus()}}else{if(a==g.ENTER){b=d.selection.createRange();if(b){var c=b.parentElement();if(!c||c.tagName.toLowerCase()!="li"){g.stopEvent();b.pasteHTML("
");b.collapse(false);b.select()}}}}}}else{if(Ext.isOpera){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.win.focus();this.execCmd("InsertHTML","    ");this.deferFocus()}}}else{if(Ext.isWebKit){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.execCmd("InsertText","\t");this.deferFocus()}else{if(a==b.ENTER){b.stopEvent();this.execCmd("InsertHtml","

");this.deferFocus()}}}}}}}(),getToolbar:function(){return this.tb},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}});Ext.reg("htmleditor",Ext.form.HtmlEditor);Ext.form.TimeField=Ext.extend(Ext.form.ComboBox,{minValue:undefined,maxValue:undefined,minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,mode:"local",triggerAction:"all",typeAhead:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",initComponent:function(){if(Ext.isDefined(this.minValue)){this.setMinValue(this.minValue,true)}if(Ext.isDefined(this.maxValue)){this.setMaxValue(this.maxValue,true)}if(!this.store){this.generateStore(true)}Ext.form.TimeField.superclass.initComponent.call(this)},setMinValue:function(b,a){this.setLimit(b,true,a);return this},setMaxValue:function(b,a){this.setLimit(b,false,a);return this},generateStore:function(b){var c=this.minValue||new Date(this.initDate).clearTime(),a=this.maxValue||new Date(this.initDate).clearTime().add("mi",(24*60)-1),d=[];while(c<=a){d.push(c.dateFormat(this.format));c=c.add("mi",this.increment)}this.bindStore(d,b)},setLimit:function(b,g,a){var e;if(Ext.isString(b)){e=this.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){var c=new Date(this.initDate).clearTime();c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds());this[g?"minValue":"maxValue"]=c;if(!a){this.generateStore()}}},getValue:function(){var a=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(a))||""},setValue:function(a){return Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))},validateValue:Ext.form.DateField.prototype.validateValue,formatDate:Ext.form.DateField.prototype.formatDate,parseDate:function(h){if(!h||Ext.isDate(h)){return h}var j=this.initDate+" ",g=this.initDateFormat+" ",b=Date.parseDate(j+h,g+this.format),c=this.altFormats;if(!b&&c){if(!this.altFormatsArray){this.altFormatsArray=c.split("|")}for(var e=0,d=this.altFormatsArray,a=d.length;e=0){if(!d){c=g-1}d=false;while(c>=0){if(e.call(j||this,k,c,i)===true){return[k,c]}c--}k--}}else{if(c>=g){k++;d=false}while(k','
','
','
','
{header}
',"
",'
',"
",'
','
{body}
','',"
","
",'
 
','
 
',""),headerTpl:new Ext.Template('',"",'{cells}',"","
"),bodyTpl:new Ext.Template("{rows}"),cellTpl:new Ext.Template('','
{value}
',""),initTemplates:function(){var c=this.templates||{},d,b,g=new Ext.Template('','
',this.grid.enableHdMenu?'':"","{value}",'',"
",""),a=['','','
{body}
',"",""].join(""),e=['',"","{cells}",this.enableRowBody?a:"","","
"].join("");Ext.applyIf(c,{hcell:g,cell:this.cellTpl,body:this.bodyTpl,header:this.headerTpl,master:this.masterTpl,row:new Ext.Template('
'+e+"
"),rowInner:new Ext.Template(e)});for(b in c){d=c[b];if(d&&Ext.isFunction(d.compile)&&!d.compiled){d.disableFormats=true;d.compile()}}this.templates=c;this.colRe=new RegExp("x-grid3-td-([^\\s]+)","")},fly:function(a){if(!this._flyweight){this._flyweight=new Ext.Element.Flyweight(document.body)}this._flyweight.dom=a;return this._flyweight},getEditorParent:function(){return this.scroller.dom},initElements:function(){var b=Ext.Element,d=Ext.get(this.grid.getGridEl().dom.firstChild),e=new b(d.child("div.x-grid3-viewport")),c=new b(e.child("div.x-grid3-header")),a=new b(e.child("div.x-grid3-scroller"));if(this.grid.hideHeaders){c.setDisplayed(false)}if(this.forceFit){a.setStyle("overflow-x","hidden")}Ext.apply(this,{el:d,mainWrap:e,scroller:a,mainHd:c,innerHd:c.child("div.x-grid3-header-inner").dom,mainBody:new b(b.fly(a).child("div.x-grid3-body")),focusEl:new b(b.fly(a).child("a")),resizeMarker:new b(d.child("div.x-grid3-resize-marker")),resizeProxy:new b(d.child("div.x-grid3-resize-proxy"))});this.focusEl.swallowEvent("click",true)},getRows:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},findCell:function(a){if(!a){return false}return this.fly(a).findParent(this.cellSelector,this.cellSelectorDepth)},findCellIndex:function(d,c){var b=this.findCell(d),a;if(b){a=this.fly(b).hasClass(c);if(!c||a){return this.getCellIndex(b)}}return false},getCellIndex:function(b){if(b){var a=b.className.match(this.colRe);if(a&&a[1]){return this.cm.getIndexById(a[1])}}return false},findHeaderCell:function(b){var a=this.findCell(b);return a&&this.fly(a).hasClass(this.hdCls)?a:null},findHeaderIndex:function(a){return this.findCellIndex(a,this.hdCls)},findRow:function(a){if(!a){return false}return this.fly(a).findParent(this.rowSelector,this.rowSelectorDepth)},findRowIndex:function(a){var b=this.findRow(a);return b?b.rowIndex:false},findRowBody:function(a){if(!a){return false}return this.fly(a).findParent(this.rowBodySelector,this.rowBodySelectorDepth)},getRow:function(a){return this.getRows()[a]},getCell:function(b,a){return Ext.fly(this.getRow(b)).query(this.cellSelector)[a]},getHeaderCell:function(a){return this.mainHd.dom.getElementsByTagName("td")[a]},addRowClass:function(b,a){var c=this.getRow(b);if(c){this.fly(c).addClass(a)}},removeRowClass:function(c,a){var b=this.getRow(c);if(b){this.fly(b).removeClass(a)}},removeRow:function(a){Ext.removeNode(this.getRow(a));this.syncFocusEl(a)},removeRows:function(c,a){var b=this.mainBody.dom,d;for(d=c;d<=a;d++){Ext.removeNode(b.childNodes[c])}this.syncFocusEl(c)},getScrollState:function(){var a=this.scroller.dom;return{left:a.scrollLeft,top:a.scrollTop}},restoreScroll:function(a){var b=this.scroller.dom;b.scrollLeft=a.left;b.scrollTop=a.top},scrollToTop:function(){var a=this.scroller.dom;a.scrollTop=0;a.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var a=this.scroller.dom;this.grid.fireEvent("bodyscroll",a.scrollLeft,a.scrollTop)},syncHeaderScroll:function(){var a=this.innerHd,b=this.scroller.dom.scrollLeft;a.scrollLeft=b;a.scrollLeft=b},updateSortIcon:function(d,c){var a=this.sortClasses,b=a[c=="DESC"?1:0],e=this.mainHd.select("td").removeClass(a);e.item(d).addClass(b)},updateAllColumnWidths:function(){var e=this.getTotalWidth(),k=this.cm.getColumnCount(),m=this.getRows(),g=m.length,b=[],l,a,h,d,c;for(d=0;d=this.ds.getCount()){return null}d=(d!==undefined?d:0);var c=this.getRow(h),b=this.cm,e=b.getColumnCount(),a;if(!(g===false&&d===0)){while(dm){n.scrollTop=q-a}}if(e!==false){var l=parseInt(h.offsetLeft,10),j=l+h.offsetWidth,i=parseInt(n.scrollLeft,10),b=i+n.clientWidth;if(lb){n.scrollLeft=j-n.clientWidth}}}return this.getResolvedXY(r)},insertRows:function(a,i,e,h){var d=a.getCount()-1;if(!h&&i===0&&e>=d){this.fireEvent("beforerowsinserted",this,i,e);this.refresh();this.fireEvent("rowsinserted",this,i,e)}else{if(!h){this.fireEvent("beforerowsinserted",this,i,e)}var b=this.renderRows(i,e),g=this.getRow(i);if(g){if(i===0){Ext.fly(this.getRow(0)).removeClass(this.firstRowCls)}Ext.DomHelper.insertHtml("beforeBegin",g,b)}else{var c=this.getRow(d-1);if(c){Ext.fly(c).removeClass(this.lastRowCls)}Ext.DomHelper.insertHtml("beforeEnd",this.mainBody.dom,b)}if(!h){this.processRows(i);this.fireEvent("rowsinserted",this,i,e)}else{if(i===0||i>=d){Ext.fly(this.getRow(i)).addClass(i===0?this.firstRowCls:this.lastRowCls)}}}this.syncFocusEl(i)},deleteRows:function(a,c,b){if(a.getRowCount()<1){this.refresh()}else{this.fireEvent("beforerowsdeleted",this,c,b);this.removeRows(c,b);this.processRows(c);this.fireEvent("rowsdeleted",this,c,b)}},getColumnStyle:function(b,d){var a=this.cm,g=a.config,c=d?"":g[b].css||"",e=g[b].align;c+=String.format("width: {0};",this.getColumnWidth(b));if(a.isHidden(b)){c+="display: none; "}if(e){c+=String.format("text-align: {0};",e)}return c},getColumnWidth:function(b){var c=this.cm.getColumnWidth(b),a=this.borderWidth;if(Ext.isNumber(c)){if(Ext.isBorderBox||(Ext.isWebKit&&!Ext.isSafari2)){return c+"px"}else{return Math.max(c-a,0)+"px"}}else{return c}},getTotalWidth:function(){return this.cm.getTotalWidth()+"px"},fitColumns:function(g,j,h){var a=this.grid,l=this.cm,s=l.getTotalWidth(false),q=this.getGridInnerWidth(),r=q-s,c=[],o=0,n=0,u,d,p;if(q<20||r===0){return false}var e=l.getColumnCount(true),m=l.getColumnCount(false),b=e-(Ext.isNumber(h)?1:0);if(b===0){b=1;h=undefined}for(p=0;pq){var t=(b==e)?o:h,k=Math.max(1,l.getColumnWidth(t)-(s-q));l.setColumnWidth(t,k,true)}if(g!==true){this.updateAllColumnWidths()}return true},autoExpand:function(k){var a=this.grid,i=this.cm,e=this.getGridInnerWidth(),c=i.getTotalWidth(false),g=a.autoExpandColumn;if(!this.userResized&&g){if(e!=c){var j=i.getIndexById(g),b=i.getColumnWidth(j),h=e-c+b,d=Math.min(Math.max(h,a.autoExpandMin),a.autoExpandMax);if(b!=d){i.setColumnWidth(j,d,true);if(k!==true){this.updateColumnWidth(j,d)}}}}},getGridInnerWidth:function(){return this.grid.getGridEl().getWidth(true)-this.getScrollOffset()},getColumnData:function(){var e=[],c=this.cm,g=c.getColumnCount(),a=this.ds.fields,d,b;for(d=0;d'+this.emptyText+"")}},updateHeaderSortState:function(){var b=this.ds.getSortState();if(!b){return}if(!this.sortState||(this.sortState.field!=b.field||this.sortState.direction!=b.direction)){this.grid.fireEvent("sortchange",this.grid,b)}this.sortState=b;var c=this.cm.findColumnIndex(b.field);if(c!=-1){var a=b.direction;this.updateSortIcon(c,a)}},clearHeaderSortState:function(){if(!this.sortState){return}this.grid.fireEvent("sortchange",this.grid,null);this.mainHd.select("td").removeClass(this.sortClasses);delete this.sortState},destroy:function(){var j=this,a=j.grid,d=a.getGridEl(),i=j.dragZone,g=j.splitZone,h=j.columnDrag,e=j.columnDrop,k=j.scrollToTopTask,c,b;if(k&&k.cancel){k.cancel()}Ext.destroyMembers(j,"colMenu","hmenu");j.initData(null,null);j.purgeListeners();Ext.fly(j.innerHd).un("click",j.handleHdDown,j);if(a.enableColumnMove){c=h.dragData;b=h.proxy;Ext.destroy(h.el,b.ghost,b.el,e.el,e.proxyTop,e.proxyBottom,c.ddel,c.header);if(b.anim){Ext.destroy(b.anim)}delete b.ghost;delete c.ddel;delete c.header;h.destroy();delete Ext.dd.DDM.locationCache[h.id];delete h._domRef;delete e.proxyTop;delete e.proxyBottom;e.destroy();delete Ext.dd.DDM.locationCache["gridHeader"+d.id];delete e._domRef;delete Ext.dd.DDM.ids[e.ddGroup]}if(g){g.destroy();delete g._domRef;delete Ext.dd.DDM.ids["gridSplitters"+d.id]}Ext.fly(j.innerHd).removeAllListeners();Ext.removeNode(j.innerHd);delete j.innerHd;Ext.destroy(j.el,j.mainWrap,j.mainHd,j.scroller,j.mainBody,j.focusEl,j.resizeMarker,j.resizeProxy,j.activeHdBtn,j._flyweight,i,g);delete a.container;if(i){i.destroy()}Ext.dd.DDM.currentTarget=null;delete Ext.dd.DDM.locationCache[d.id];Ext.EventManager.removeResizeListener(j.onWindowResize,j)},onDenyColumnHide:function(){},render:function(){if(this.autoFill){var a=this.grid.ownerCt;if(a&&a.getLayout()){a.on("afterlayout",function(){this.fitColumns(true,true);this.updateHeaders();this.updateHeaderSortState()},this,{single:true})}}else{if(this.forceFit){this.fitColumns(true,false)}else{if(this.grid.autoExpandColumn){this.autoExpand(true)}}}this.grid.getGridEl().dom.innerHTML=this.renderUI();this.afterRenderUI()},initData:function(a,e){var b=this;if(b.ds){var d=b.ds;d.un("add",b.onAdd,b);d.un("load",b.onLoad,b);d.un("clear",b.onClear,b);d.un("remove",b.onRemove,b);d.un("update",b.onUpdate,b);d.un("datachanged",b.onDataChange,b);if(d!==a&&d.autoDestroy){d.destroy()}}if(a){a.on({scope:b,load:b.onLoad,add:b.onAdd,remove:b.onRemove,update:b.onUpdate,clear:b.onClear,datachanged:b.onDataChange})}if(b.cm){var c=b.cm;c.un("configchange",b.onColConfigChange,b);c.un("widthchange",b.onColWidthChange,b);c.un("headerchange",b.onHeaderChange,b);c.un("hiddenchange",b.onHiddenChange,b);c.un("columnmoved",b.onColumnMove,b)}if(e){delete b.lastViewWidth;e.on({scope:b,configchange:b.onColConfigChange,widthchange:b.onColWidthChange,headerchange:b.onHeaderChange,hiddenchange:b.onHiddenChange,columnmoved:b.onColumnMove})}b.ds=a;b.cm=e},onDataChange:function(){this.refresh(true);this.updateHeaderSortState();this.syncFocusEl(0)},onClear:function(){this.refresh();this.syncFocusEl(0)},onUpdate:function(b,a){this.refreshRow(a)},onAdd:function(b,a,c){this.insertRows(b,c,c+(a.length-1))},onRemove:function(b,a,c,d){if(d!==true){this.fireEvent("beforerowremoved",this,c,a)}this.removeRow(c);if(d!==true){this.processRows(c);this.applyEmptyText();this.fireEvent("rowremoved",this,c,a)}},onLoad:function(){if(Ext.isGecko){if(!this.scrollToTopTask){this.scrollToTopTask=new Ext.util.DelayedTask(this.scrollToTop,this)}this.scrollToTopTask.delay(1)}else{this.scrollToTop()}},onColWidthChange:function(a,b,c){this.updateColumnWidth(b,c)},onHeaderChange:function(a,b,c){this.updateHeaders()},onHiddenChange:function(a,b,c){this.updateColumnHidden(b,c)},onColumnMove:function(a,c,b){this.indexMap=null;this.refresh(true);this.restoreScroll(this.getScrollState());this.afterMove(b);this.grid.fireEvent("columnmove",c,b)},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true)},initUI:function(a){a.on("headerclick",this.onHeaderClick,this)},initEvents:Ext.emptyFn,onHeaderClick:function(b,a){if(this.headersDisabled||!this.cm.isSortable(a)){return}b.stopEditing(true);b.store.sort(this.cm.getDataIndex(a))},onRowOver:function(b,a){var c=this.findRowIndex(a);if(c!==false){this.addRowClass(c,this.rowOverCls)}},onRowOut:function(b,a){var c=this.findRowIndex(a);if(c!==false&&!b.within(this.getRow(c),true)){this.removeRowClass(c,this.rowOverCls)}},onRowSelect:function(a){this.addRowClass(a,this.selectedRowClass)},onRowDeselect:function(a){this.removeRowClass(a,this.selectedRowClass)},onCellSelect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).addClass("x-grid3-cell-selected")}},onCellDeselect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).removeClass("x-grid3-cell-selected")}},handleWheel:function(a){a.stopPropagation()},onColumnSplitterMoved:function(a,b){this.userResized=true;this.grid.colModel.setColumnWidth(a,b,true);if(this.forceFit){this.fitColumns(true,false,a);this.updateAllColumnWidths()}else{this.updateColumnWidth(a,b);this.syncHeaderScroll()}this.grid.fireEvent("columnresize",a,b)},beforeColMenuShow:function(){var b=this.cm,d=b.getColumnCount(),a=this.colMenu,c;a.removeAll();for(c=0;c0){if(!this.cm.isHidden(a-1)){return a}a--}return undefined},handleHdOver:function(c,b){var d=this.findHeaderCell(b);if(d&&!this.headersDisabled){var a=this.fly(d);this.activeHdRef=b;this.activeHdIndex=this.getCellIndex(d);this.activeHdRegion=a.getRegion();if(!this.isMenuDisabled(this.activeHdIndex,a)){a.addClass("x-grid3-hd-over");this.activeHdBtn=a.child(".x-grid3-hd-btn");if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(d.firstChild.offsetHeight-1)+"px"}}}},handleHdOut:function(b,a){var c=this.findHeaderCell(a);if(c&&(!Ext.isIE||!b.within(c,true))){this.activeHdRef=null;this.fly(c).removeClass("x-grid3-hd-over");c.style.cursor=""}},isMenuDisabled:function(a,b){return this.cm.isMenuDisabled(a)},hasRows:function(){var a=this.mainBody.dom.firstChild;return a&&a.nodeType==1&&a.className!="x-grid-empty"},isHideableColumn:function(a){return !a.hidden},bind:function(a,b){this.initData(a,b)}});Ext.grid.GridView.SplitDragZone=Ext.extend(Ext.dd.DDProxy,{constructor:function(a,b){this.grid=a;this.view=a.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,b,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5},b4StartDrag:function(a,e){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var d=this.view.mainWrap.getHeight();this.marker.setHeight(d);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),"tl-tl",[-2,0]);this.proxy.setHeight(d);var b=this.cm.getColumnWidth(this.cellIndex),c=Math.max(b-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(c,1000);this.setYConstraint(0,0);this.minX=a-c;this.maxX=a+1000;this.startPos=a;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,a,e)},allowHeaderDrag:function(a){return true},handleMouseDown:function(a){var h=this.view.findHeaderCell(a.getTarget());if(h&&this.allowHeaderDrag(a)){var k=this.view.fly(h).getXY(),c=k[0],i=a.getXY(),b=i[0],g=h.offsetWidth,d=false;if((b-c)<=this.hw){d=-1}else{if((c+g)-b<=this.hw){d=0}}if(d!==false){this.cm=this.grid.colModel;var j=this.view.getCellIndex(h);if(d==-1){if(j+d<0){return}while(this.cm.isHidden(j+d)){--d;if(j+d<0){return}}}this.cellIndex=j+d;this.split=h.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments)}}else{if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(a)}}}},endDrag:function(g){this.marker.hide();var a=this.view,c=Math.max(this.minX,g.getPageX()),d=c-this.startPos,b=this.dragHeadersDisabled;a.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+d);setTimeout(function(){a.headersDisabled=b},50)},autoOffset:function(){this.setDelta(0,0)}});Ext.grid.PivotGridView=Ext.extend(Ext.grid.GridView,{colHeaderCellCls:"grid-hd-group-cell",title:"",getColumnHeaders:function(){return this.grid.topAxis.buildHeaders()},getRowHeaders:function(){return this.grid.leftAxis.buildHeaders()},renderRows:function(a,t){var b=this.grid,o=b.extractData(),p=o.length,g=this.templates,s=b.renderer,h=typeof s=="function",w=this.getCellCls,n=typeof w=="function",d=g.cell,x=g.row,k=[],q={},c="width:"+this.getGridInnerWidth()+"px;",l,r,e,v,m;a=a||0;t=Ext.isDefined(t)?t:p-1;for(v=0;v','
','
','
{title}
','
','
',"
",'
',"
",'
','
','
{body}
','',"
","
",'
 
','
 
',""),initTemplates:function(){Ext.grid.PivotGridView.superclass.initTemplates.apply(this,arguments);var a=this.templates||{};if(!a.gcell){a.gcell=new Ext.XTemplate('','
',this.grid.enableHdMenu?'':"","{value}","
","")}this.templates=a;this.hrowRe=new RegExp("ux-grid-hd-group-row-(\\d+)","")},initElements:function(){Ext.grid.PivotGridView.superclass.initElements.apply(this,arguments);this.rowHeadersEl=new Ext.Element(this.scroller.child("div.x-grid3-row-headers"));this.headerTitleEl=new Ext.Element(this.mainHd.child("div.x-grid3-header-title"))},getGridInnerWidth:function(){var a=Ext.grid.PivotGridView.superclass.getGridInnerWidth.apply(this,arguments);return a-this.getTotalRowHeaderWidth()},getTotalRowHeaderWidth:function(){var d=this.getRowHeaders(),c=d.length,b=0,a;for(a=0;a0&&d>0){h=h||o.data[a[g-1].dataIndex]!=l[d-1].data[a[g-1].dataIndex]}if(h){s.push({header:q,span:p,start:b});b+=p;p=0}if(k){s.push({header:n,span:p+1,start:b});b+=p;p=0}q=n;p++}c.push({items:s,width:e.width||this.defaultHeaderWidth});q=undefined}return c}});Ext.grid.HeaderDragZone=Ext.extend(Ext.dd.DragZone,{maxDragWidth:120,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,c);if(b){this.setHandleElId(Ext.id(c));this.setOuterHandleElId(Ext.id(b))}this.scroll=false},getDragData:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findHeaderCell(a);if(b){return{ddel:b.firstChild,header:b}}return false},onInitDrag:function(a){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var b=this.dragData.ddel.cloneNode(true);b.id=Ext.id();b.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(b);return true},afterValidDrop:function(){this.completeDrop()},afterInvalidDrop:function(){this.completeDrop()},completeDrop:function(){var a=this.view,b=this.dragHeadersDisabled;setTimeout(function(){a.headersDisabled=b},50)}});Ext.grid.HeaderDropZone=Ext.extend(Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.proxyTop=Ext.DomHelper.append(document.body,{cls:"col-move-top",html:" "},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:" "},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden")};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,a.getGridEl().dom)},getTargetFromEvent:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findCellIndex(a);if(b!==false){return this.view.getHeaderCell(b)}},nextVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.nextSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.nextSibling}return null},prevVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.prevSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.prevSibling}return null},positionIndicator:function(d,k,j){var a=Ext.lib.Event.getPageX(j),g=Ext.lib.Dom.getRegion(k.firstChild),c,i,b=g.top+this.proxyOffsets[1];if((g.right-a)<=(g.right-g.left)/2){c=g.right+this.view.borderWidth;i="after"}else{c=g.left;i="before"}if(this.grid.colModel.isFixed(this.view.getCellIndex(k))){return false}c+=this.proxyOffsets[0];this.proxyTop.setLeftTop(c,b);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight()}this.proxyBottom.setLeftTop(c,b+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return i},onNodeEnter:function(d,a,c,b){if(b.header!=d){this.positionIndicator(b.header,d,c)}},onNodeOver:function(g,b,d,c){var a=false;if(c.header!=g){a=this.positionIndicator(c.header,g,d)}if(!a){this.proxyTop.hide();this.proxyBottom.hide()}return a?this.dropAllowed:this.dropNotAllowed},onNodeOut:function(d,a,c,b){this.proxyTop.hide();this.proxyBottom.hide()},onNodeDrop:function(b,m,g,c){var d=c.header;if(d!=b){var k=this.grid.colModel,j=Ext.lib.Event.getPageX(g),a=Ext.lib.Dom.getRegion(b.firstChild),o=(a.right-j)<=((a.right-a.left)/2)?"after":"before",i=this.view.getCellIndex(d),l=this.view.getCellIndex(b);if(o=="after"){l++}if(i=0&&this.config[a].resizable!==false&&this.config[a].fixed!==true},setHidden:function(a,b){var d=this.config[a];if(d.hidden!==b){d.hidden=b;this.totalWidth=null;this.fireEvent("hiddenchange",this,a,b)}},setEditor:function(a,b){this.config[a].setEditor(b)},destroy:function(){var b=this.config.length,a=0;for(;a0},isSelected:function(a){var b=Ext.isNumber(a)?this.grid.store.getAt(a):a;return(b&&this.selections.key(b.id)?true:false)},isIdSelected:function(a){return(this.selections.key(a)?true:false)},handleMouseDown:function(d,i,h){if(h.button!==0||this.isLocked()){return}var a=this.grid.getView();if(h.shiftKey&&!this.singleSelect&&this.last!==false){var c=this.last;this.selectRange(c,i,h.ctrlKey);this.last=c;a.focusRow(i)}else{var b=this.isSelected(i);if(h.ctrlKey&&b){this.deselectRow(i)}else{if(!b||this.getCount()>1){this.selectRow(i,h.ctrlKey||h.shiftKey);a.focusRow(i)}}}},selectRows:function(c,d){if(!d){this.clearSelections()}for(var b=0,a=c.length;b=a;c--){this.selectRow(c,true)}}},deselectRange:function(c,b,a){if(this.isLocked()){return}for(var d=c;d<=b;d++){this.deselectRow(d,a)}},selectRow:function(b,d,a){if(this.isLocked()||(b<0||b>=this.grid.store.getCount())||(d&&this.isSelected(b))){return}var c=this.grid.store.getAt(b);if(c&&this.fireEvent("beforerowselect",this,b,d,c)!==false){if(!d||this.singleSelect){this.clearSelections()}this.selections.add(c);this.last=this.lastActive=b;if(!a){this.grid.getView().onRowSelect(b)}if(!this.silent){this.fireEvent("rowselect",this,b,c);this.fireEvent("selectionchange",this)}}},deselectRow:function(b,a){if(this.isLocked()){return}if(this.last==b){this.last=false}if(this.lastActive==b){this.lastActive=false}var c=this.grid.store.getAt(b);if(c){this.selections.remove(c);if(!a){this.grid.getView().onRowDeselect(b)}this.fireEvent("rowdeselect",this,b,c);this.fireEvent("selectionchange",this)}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)},onEditorKey:function(n,l){var d=l.getKey(),h,i=this.grid,p=i.lastEdit,j=i.activeEditor,b=l.shiftKey,o,p,a,m;if(d==l.TAB){l.stopEvent();j.completeEdit();if(b){h=i.walkCells(j.row,j.col-1,-1,this.acceptsNav,this)}else{h=i.walkCells(j.row,j.col+1,1,this.acceptsNav,this)}}else{if(d==l.ENTER){if(this.moveEditorOnEnter!==false){if(b){h=i.walkCells(p.row-1,p.col,-1,this.acceptsNav,this)}else{h=i.walkCells(p.row+1,p.col,1,this.acceptsNav,this)}}}}if(h){a=h[0];m=h[1];this.onEditorSelect(a,p.row);if(i.isEditor&&i.editing){o=i.activeEditor;if(o&&o.field.triggerBlur){o.field.triggerBlur()}}i.startEditing(a,m)}},onEditorSelect:function(b,a){if(a!=b){this.selectRow(b)}},destroy:function(){Ext.destroy(this.rowNav);this.rowNav=null;Ext.grid.RowSelectionModel.superclass.destroy.call(this)}});Ext.grid.Column=Ext.extend(Ext.util.Observable,{isColumn:true,constructor:function(b){Ext.apply(this,b);if(Ext.isString(this.renderer)){this.renderer=Ext.util.Format[this.renderer]}else{if(Ext.isObject(this.renderer)){this.scope=this.renderer.scope;this.renderer=this.renderer.fn}}if(!this.scope){this.scope=this}var a=this.editor;delete this.editor;this.setEditor(a);this.addEvents("click","contextmenu","dblclick","mousedown");Ext.grid.Column.superclass.constructor.call(this)},processEvent:function(b,d,c,g,a){return this.fireEvent(b,this,c,g,d)},destroy:function(){if(this.setEditor){this.setEditor(null)}this.purgeListeners()},renderer:function(a){return a},getEditor:function(a){return this.editable!==false?this.editor:null},setEditor:function(b){var a=this.editor;if(a){if(a.gridEditor){a.gridEditor.destroy();delete a.gridEditor}else{a.destroy()}}this.editor=null;if(b){if(!b.isXType){b=Ext.create(b,"textfield")}this.editor=b}},getCellEditor:function(b){var a=this.getEditor(b);if(a){if(!a.startEdit){if(!a.gridEditor){a.gridEditor=new Ext.grid.GridEditor(a)}a=a.gridEditor}}return a}});Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{trueText:"true",falseText:"false",undefinedText:" ",constructor:function(a){Ext.grid.BooleanColumn.superclass.constructor.call(this,a);var c=this.trueText,d=this.falseText,b=this.undefinedText;this.renderer=function(e){if(e===undefined){return b}if(!e||e==="false"){return d}return c}}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:"0,000.00",constructor:function(a){Ext.grid.NumberColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.numberRenderer(this.format)}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:"m/d/Y",constructor:function(a){Ext.grid.DateColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.dateRenderer(this.format)}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(a){Ext.grid.TemplateColumn.superclass.constructor.call(this,a);var b=(!Ext.isPrimitive(this.tpl)&&this.tpl.compile)?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(d,e,c){return b.apply(c.data)};this.tpl=b}});Ext.grid.ActionColumn=Ext.extend(Ext.grid.Column,{header:" ",actionIdRe:/x-action-col-(\d+)/,altText:"",constructor:function(b){var g=this,c=b.items||(g.items=[g]),a=c.length,d,e;Ext.grid.ActionColumn.superclass.constructor.call(g,b);g.renderer=function(h,i){h=Ext.isFunction(b.renderer)?b.renderer.apply(this,arguments)||"":"";i.css+=" x-action-col-cell";for(d=0;d"}return h}},destroy:function(){delete this.items;delete this.renderer;return Ext.grid.ActionColumn.superclass.destroy.apply(this,arguments)},processEvent:function(c,i,d,j,b){var a=i.getTarget().className.match(this.actionIdRe),h,g;if(a&&(h=this.items[parseInt(a[1],10)])){if(c=="click"){(g=h.handler||this.handler)&&g.call(h.scope||this.scope||this,d,j,b,h,i)}else{if((c=="mousedown")&&(h.stopSelection!==false)){return false}}}return Ext.grid.ActionColumn.superclass.processEvent.apply(this,arguments)}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn,actioncolumn:Ext.grid.ActionColumn};Ext.grid.RowNumberer=Ext.extend(Object,{header:"",width:23,sortable:false,constructor:function(a){Ext.apply(this,a);if(this.rowspan){this.renderer=this.renderer.createDelegate(this)}},fixed:true,hideable:false,menuDisabled:true,dataIndex:"",id:"numberer",rowspan:undefined,renderer:function(b,c,a,d){if(this.rowspan){c.cellAttr='rowspan="'+this.rowspan+'"'}return d+1}});Ext.grid.CheckboxSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{header:'
 
',width:20,sortable:false,menuDisabled:true,fixed:true,hideable:false,dataIndex:"",id:"checker",isColumn:true,constructor:function(){Ext.grid.CheckboxSelectionModel.superclass.constructor.apply(this,arguments);if(this.checkOnly){this.handleMouseDown=Ext.emptyFn}},initEvents:function(){Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);this.grid.on("render",function(){Ext.fly(this.grid.getView().innerHd).on("mousedown",this.onHdMouseDown,this)},this)},processEvent:function(b,d,c,g,a){if(b=="mousedown"){this.onMouseDown(d,d.getTarget());return false}else{return Ext.grid.Column.prototype.processEvent.apply(this,arguments)}},onMouseDown:function(c,b){if(c.button===0&&b.className=="x-grid3-row-checker"){c.stopEvent();var d=c.getTarget(".x-grid3-row");if(d){var a=d.rowIndex;if(this.isSelected(a)){this.deselectRow(a)}else{this.selectRow(a,true);this.grid.getView().focusRow(a)}}}},onHdMouseDown:function(c,a){if(a.className=="x-grid3-hd-checker"){c.stopEvent();var b=Ext.fly(a.parentNode);var d=b.hasClass("x-grid3-hd-checker-on");if(d){b.removeClass("x-grid3-hd-checker-on");this.clearSelections()}else{b.addClass("x-grid3-hd-checker-on");this.selectAll()}}},renderer:function(b,c,a){return'
 
'},onEditorSelect:function(b,a){if(a!=b&&!this.checkOnly){this.selectRow(b)}}});Ext.grid.CellSelectionModel=Ext.extend(Ext.grid.AbstractSelectionModel,{constructor:function(a){Ext.apply(this,a);this.selection=null;this.addEvents("beforecellselect","cellselect","selectionchange");Ext.grid.CellSelectionModel.superclass.constructor.call(this)},initEvents:function(){this.grid.on("cellmousedown",this.handleMouseDown,this);this.grid.on(Ext.EventManager.getKeyEvent(),this.handleKeyDown,this);this.grid.getView().on({scope:this,refresh:this.onViewChange,rowupdated:this.onRowUpdated,beforerowremoved:this.clearSelections,beforerowsinserted:this.clearSelections});if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this)}},beforeEdit:function(a){this.select(a.row,a.column,false,true,a.record)},onRowUpdated:function(a,b,c){if(this.selection&&this.selection.record==c){a.onCellSelect(b,this.selection.cell[1])}},onViewChange:function(){this.clearSelections(true)},getSelectedCell:function(){return this.selection?this.selection.cell:null},clearSelections:function(b){var a=this.selection;if(a){if(b!==true){this.grid.view.onCellDeselect(a.cell[0],a.cell[1])}this.selection=null;this.fireEvent("selectionchange",this,null)}},hasSelection:function(){return this.selection?true:false},handleMouseDown:function(b,d,a,c){if(c.button!==0||this.isLocked()){return}this.select(d,a)},select:function(g,c,b,e,d){if(this.fireEvent("beforecellselect",this,g,c)!==false){this.clearSelections();d=d||this.grid.store.getAt(g);this.selection={record:d,cell:[g,c]};if(!b){var a=this.grid.getView();a.onCellSelect(g,c);if(e!==true){a.focusCell(g,c)}}this.fireEvent("cellselect",this,g,c);this.fireEvent("selectionchange",this,this.selection)}},isSelectable:function(c,b,a){return !a.isHidden(b)},onEditorKey:function(b,a){if(a.getKey()==a.TAB){this.handleKeyDown(a)}},handleKeyDown:function(j){if(!j.isNavKeyPress()){return}var d=j.getKey(),i=this.grid,p=this.selection,b=this,m=function(g,c,e){return i.walkCells(g,c,e,i.isEditor&&i.editing?b.acceptsNav:b.isSelectable,b)},o,h,a,l,n;switch(d){case j.ESC:case j.PAGE_UP:case j.PAGE_DOWN:break;default:j.stopEvent();break}if(!p){o=m(0,0,1);if(o){this.select(o[0],o[1])}return}o=p.cell;a=o[0];l=o[1];switch(d){case j.TAB:if(j.shiftKey){h=m(a,l-1,-1)}else{h=m(a,l+1,1)}break;case j.DOWN:h=m(a+1,l,1);break;case j.UP:h=m(a-1,l,-1);break;case j.RIGHT:h=m(a,l+1,1);break;case j.LEFT:h=m(a,l-1,-1);break;case j.ENTER:if(i.isEditor&&!i.editing){i.startEditing(a,l);return}break}if(h){a=h[0];l=h[1];this.select(a,l);if(i.isEditor&&i.editing){n=i.activeEditor;if(n&&n.field.triggerBlur){n.field.triggerBlur()}i.startEditing(a,l)}}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)}});Ext.grid.EditorGridPanel=Ext.extend(Ext.grid.GridPanel,{clicksToEdit:2,forceValidation:false,isEditor:true,detectEdit:false,autoEncode:false,trackMouseOver:false,initComponent:function(){Ext.grid.EditorGridPanel.superclass.initComponent.call(this);if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel()}this.activeEditor=null;this.addEvents("beforeedit","afteredit","validateedit")},initEvents:function(){Ext.grid.EditorGridPanel.superclass.initEvents.call(this);this.getGridEl().on("mousewheel",this.stopEditing.createDelegate(this,[true]),this);this.on("columnresize",this.stopEditing,this,[true]);if(this.clicksToEdit==1){this.on("cellclick",this.onCellDblClick,this)}else{var a=this.getView();if(this.clicksToEdit=="auto"&&a.mainBody){a.mainBody.on("mousedown",this.onAutoEditClick,this)}this.on("celldblclick",this.onCellDblClick,this)}},onResize:function(){Ext.grid.EditorGridPanel.superclass.onResize.apply(this,arguments);var a=this.activeEditor;if(this.editing&&a){a.realign(true)}},onCellDblClick:function(b,c,a){this.startEditing(c,a)},onAutoEditClick:function(c,b){if(c.button!==0){return}var g=this.view.findRowIndex(b),a=this.view.findCellIndex(b);if(g!==false&&a!==false){this.stopEditing();if(this.selModel.getSelectedCell){var d=this.selModel.getSelectedCell();if(d&&d[0]===g&&d[1]===a){this.startEditing(g,a)}}else{if(this.selModel.isSelected(g)){this.startEditing(g,a)}}}},onEditComplete:function(b,d,a){this.editing=false;this.lastActiveEditor=this.activeEditor;this.activeEditor=null;var c=b.record,h=this.colModel.getDataIndex(b.col);d=this.postEditValue(d,a,c,h);if(this.forceValidation===true||String(d)!==String(a)){var g={grid:this,record:c,field:h,originalValue:a,value:d,row:b.row,column:b.col,cancel:false};if(this.fireEvent("validateedit",g)!==false&&!g.cancel&&String(d)!==String(a)){c.set(h,g.value);delete g.cancel;this.fireEvent("afteredit",g)}}this.view.focusCell(b.row,b.col)},startEditing:function(i,c){this.stopEditing();if(this.colModel.isCellEditable(c,i)){this.view.ensureVisible(i,c,true);var d=this.store.getAt(i),h=this.colModel.getDataIndex(c),g={grid:this,record:d,field:h,value:d.data[h],row:i,column:c,cancel:false};if(this.fireEvent("beforeedit",g)!==false&&!g.cancel){this.editing=true;var b=this.colModel.getCellEditor(c,i);if(!b){return}if(!b.rendered){b.parentEl=this.view.getEditorParent(b);b.on({scope:this,render:{fn:function(e){e.field.focus(false,true)},single:true,scope:this},specialkey:function(k,j){this.getSelectionModel().onEditorKey(k,j)},complete:this.onEditComplete,canceledit:this.stopEditing.createDelegate(this,[true])})}Ext.apply(b,{row:i,col:c,record:d});this.lastEdit={row:i,col:c};this.activeEditor=b;b.selectSameEditor=(this.activeEditor==this.lastActiveEditor);var a=this.preEditValue(d,h);b.startEdit(this.view.getCell(i,c).firstChild,Ext.isDefined(a)?a:"");(function(){delete b.selectSameEditor}).defer(50)}}},preEditValue:function(a,c){var b=a.data[c];return this.autoEncode&&Ext.isString(b)?Ext.util.Format.htmlDecode(b):b},postEditValue:function(c,a,b,d){return this.autoEncode&&Ext.isString(c)?Ext.util.Format.htmlEncode(c):c},stopEditing:function(b){if(this.editing){var a=this.lastActiveEditor=this.activeEditor;if(a){a[b===true?"cancelEdit":"completeEdit"]();this.view.focusCell(a.row,a.col)}this.activeEditor=null}this.editing=false}});Ext.reg("editorgrid",Ext.grid.EditorGridPanel);Ext.grid.GridEditor=function(b,a){Ext.grid.GridEditor.superclass.constructor.call(this,b,a);b.monitorTab=false};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:false});Ext.grid.PropertyRecord=Ext.data.Record.create([{name:"name",type:"string"},"value"]);Ext.grid.PropertyStore=Ext.extend(Ext.util.Observable,{constructor:function(a,b){this.grid=a;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on("update",this.onUpdate,this);if(b){this.setSource(b)}Ext.grid.PropertyStore.superclass.constructor.call(this)},setSource:function(c){this.source=c;this.store.removeAll();var b=[];for(var a in c){if(this.isEditableValue(c[a])){b.push(new Ext.grid.PropertyRecord({name:a,value:c[a]},a))}}this.store.loadRecords({records:b},{},true)},onUpdate:function(e,a,d){if(d==Ext.data.Record.EDIT){var b=a.data.value;var c=a.modified.value;if(this.grid.fireEvent("beforepropertychange",this.source,a.id,b,c)!==false){this.source[a.id]=b;a.commit();this.grid.fireEvent("propertychange",this.source,a.id,b,c)}else{a.reject()}}},getProperty:function(a){return this.store.getAt(a)},isEditableValue:function(a){return Ext.isPrimitive(a)||Ext.isDate(a)},setValue:function(d,c,a){var b=this.getRec(d);if(b){b.set("value",c);this.source[d]=c}else{if(a){this.source[d]=c;b=new Ext.grid.PropertyRecord({name:d,value:c},d);this.store.add(b)}}},remove:function(b){var a=this.getRec(b);if(a){this.store.remove(a);delete this.source[b]}},getRec:function(a){return this.store.getById(a)},getSource:function(){return this.source}});Ext.grid.PropertyColumnModel=Ext.extend(Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",trueText:"true",falseText:"false",constructor:function(c,b){var d=Ext.grid,e=Ext.form;this.grid=c;d.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:true,dataIndex:"name",id:"name",menuDisabled:true},{header:this.valueText,width:50,resizable:false,dataIndex:"value",id:"value",menuDisabled:true}]);this.store=b;var a=new e.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:this.trueText},{tag:"option",value:"false",html:this.falseText}]},getValue:function(){return this.el.dom.value=="true"}});this.editors={date:new d.GridEditor(new e.DateField({selectOnFocus:true})),string:new d.GridEditor(new e.TextField({selectOnFocus:true})),number:new d.GridEditor(new e.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new d.GridEditor(a,{autoSize:"both"})};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this)},renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return this[a?"trueText":"falseText"]},isCellEditable:function(a,b){return a==1},getRenderer:function(a){return a==1?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(a){return this.getPropertyName(a)},renderCell:function(d,b,c){var a=this.grid.customRenderers[c.get("name")];if(a){return a.apply(this,arguments)}var e=d;if(Ext.isDate(d)){e=this.renderDate(d)}else{if(typeof d=="boolean"){e=this.renderBool(d)}}return Ext.util.Format.htmlEncode(e)},getPropertyName:function(b){var a=this.grid.propertyNames;return a&&a[b]?a[b]:b},getCellEditor:function(a,e){var b=this.store.getProperty(e),d=b.data.name,c=b.data.value;if(this.grid.customEditors[d]){return this.grid.customEditors[d]}if(Ext.isDate(c)){return this.editors.date}else{if(typeof c=="number"){return this.editors.number}else{if(typeof c=="boolean"){return this.editors["boolean"]}else{return this.editors.string}}}},destroy:function(){Ext.grid.PropertyColumnModel.superclass.destroy.call(this);this.destroyEditors(this.editors);this.destroyEditors(this.grid.customEditors)},destroyEditors:function(b){for(var a in b){Ext.destroy(b[a])}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customRenderers=this.customRenderers||{};this.customEditors=this.customEditors||{};this.lastEditRow=null;var b=new Ext.grid.PropertyStore(this);this.propStore=b;var a=new Ext.grid.PropertyColumnModel(this,b);b.store.sort("name","ASC");this.addEvents("beforepropertychange","propertychange");this.cm=a;this.ds=b.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.mon(this.selModel,"beforecellselect",function(e,d,c){if(c===0){this.startEditing.defer(200,this,[d,1]);return false}},this)},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass("x-props-grid")},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source)}},setSource:function(a){this.propStore.setSource(a)},getSource:function(){return this.propStore.getSource()},setProperty:function(c,b,a){this.propStore.setValue(c,b,a)},removeProperty:function(a){this.propStore.remove(a)}});Ext.reg("propertygrid",Ext.grid.PropertyGrid);Ext.grid.GroupingView=Ext.extend(Ext.grid.GridView,{groupByText:"Group By This Field",showGroupsText:"Show in Groups",hideGroupedColumn:false,showGroupName:true,startCollapsed:false,enableGrouping:true,enableGroupingMenu:true,enableNoGroups:true,emptyGroupText:"(None)",ignoreAdd:false,groupTextTpl:"{text}",groupMode:"value",cancelEditOnToggle:true,initTemplates:function(){Ext.grid.GroupingView.superclass.initTemplates.call(this);this.state={};var a=this.grid.getSelectionModel();a.on(a.selectRow?"beforerowselect":"beforecellselect",this.onBeforeRowSelect,this);if(!this.startGroup){this.startGroup=new Ext.XTemplate('
','
',this.groupTextTpl,"
",'
')}this.startGroup.compile();if(!this.endGroup){this.endGroup="
"}},findGroup:function(a){return Ext.fly(a).up(".x-grid-group",this.mainBody.dom)},getGroups:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},onAdd:function(d,a,b){if(this.canGroup()&&!this.ignoreAdd){var c=this.getScrollState();this.fireEvent("beforerowsinserted",d,b,b+(a.length-1));this.refresh();this.restoreScroll(c);this.fireEvent("rowsinserted",d,b,b+(a.length-1))}else{if(!this.canGroup()){Ext.grid.GroupingView.superclass.onAdd.apply(this,arguments)}}},onRemove:function(e,a,b,d){Ext.grid.GroupingView.superclass.onRemove.apply(this,arguments);var c=document.getElementById(a._groupId);if(c&&c.childNodes[1].childNodes.length<1){Ext.removeNode(c)}this.applyEmptyText()},refreshRow:function(a){if(this.ds.getCount()==1){this.refresh()}else{this.isUpdating=true;Ext.grid.GroupingView.superclass.refreshRow.apply(this,arguments);this.isUpdating=false}},beforeMenuShow:function(){var c,a=this.hmenu.items,b=this.cm.config[this.hdCtxIndex].groupable===false;if((c=a.get("groupBy"))){c.setDisabled(b)}if((c=a.get("showGroups"))){c.setDisabled(b);c.setChecked(this.canGroup(),true)}},renderUI:function(){var a=Ext.grid.GroupingView.superclass.renderUI.call(this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add("-",{itemId:"groupBy",text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:"x-group-by-icon"});if(this.enableNoGroups){this.hmenu.add({itemId:"showGroups",text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this})}this.hmenu.on("beforeshow",this.beforeMenuShow,this)}return a},processEvent:function(b,i){Ext.grid.GroupingView.superclass.processEvent.call(this,b,i);var h=i.getTarget(".x-grid-group-hd",this.mainBody);if(h){var g=this.getGroupField(),d=this.getPrefix(g),a=h.id.substring(d.length),c=new RegExp("gp-"+Ext.escapeRe(g)+"--hd");a=a.substr(0,a.length-3);if(a||c.test(h.id)){this.grid.fireEvent("group"+b,this.grid,g,a,i)}if(b=="mousedown"&&i.button==0){this.toggleGroup(h.parentNode)}}},onGroupByClick:function(){var a=this.grid;this.enableGrouping=true;a.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));a.fireEvent("groupchange",a,a.store.getGroupState());this.beforeMenuShow();this.refresh()},onShowGroupsClick:function(a,b){this.enableGrouping=b;if(b){this.onGroupByClick()}else{this.grid.store.clearGrouping();this.grid.fireEvent("groupchange",this,null)}},toggleRowIndex:function(c,a){if(!this.canGroup()){return}var b=this.getRow(c);if(b){this.toggleGroup(this.findGroup(b),a)}},toggleGroup:function(c,b){var a=Ext.get(c),d=Ext.util.Format.htmlEncode(a.id);b=Ext.isDefined(b)?b:a.hasClass("x-grid-group-collapsed");if(this.state[d]!==b){if(this.cancelEditOnToggle!==false){this.grid.stopEditing(true)}this.state[d]=b;a[b?"removeClass":"addClass"]("x-grid-group-collapsed")}},toggleAllGroups:function(c){var b=this.getGroups();for(var d=0,a=b.length;d + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/README.txt b/ehcp/extplorer/scripts/extjs3/resources/css/README.txt new file mode 100755 index 0000000..a43d63f --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/README.txt @@ -0,0 +1,6 @@ +2010-03-16 jwr: +The CSS file, yourtheme.css, is an exact copy of xtheme-blue.css. Feel free to edit the images inside the yourtheme image directory to build your custom theme--just remember to update your background-image file paths in yourtheme.css. + +2006-11-21 jvs: +ext-all.css contains all of the other css files combined and stripped of comments (except themes). + diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/ext-all-notheme.css b/ehcp/extplorer/scripts/extjs3/resources/css/ext-all-notheme.css new file mode 100755 index 0000000..f0b059a --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/ext-all-notheme.css @@ -0,0 +1,5067 @@ +/* + * Ext JS Library 3.0 RC2 + * Copyright(c) 2006-2009, Ext JS, LLC. + * licensing@extjs.com + * + * http://extjs.com/license + */ + +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';} +.ext-el-mask { + z-index: 100; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width: 100%; + height: 100%; + zoom: 1; +} + +.ext-el-mask-msg { + z-index: 20001; + position: absolute; + top: 0; + left: 0; + border:1px solid; + background:repeat-x 0 -16px; + padding:2px; +} + +.ext-el-mask-msg div { + padding:5px 10px 5px 10px; + border:1px solid; + cursor:wait; +} + +.ext-shim { + position:absolute; + visibility:hidden; + left:0; + top:0; + overflow:hidden; +} + +.ext-ie .ext-shim { + filter: alpha(opacity=0); +} + +.ext-ie6 .ext-shim { + margin-left: 5px; + margin-top: 3px; +} + +.x-mask-loading div { + padding:5px 10px 5px 25px; + background:no-repeat 5px 5px; + line-height:16px; +} + + +.x-hidden, .x-hide-offsets { + position:absolute !important; + left:-10000px; + top:-10000px; + visibility:hidden; +} + +.x-hide-display { + display:none !important; +} + +.x-hide-visibility { + visibility:hidden !important; +} + +.x-masked { + overflow: hidden !important; +} +.x-masked-relative { + position: relative !important; +} + +.x-masked select, .x-masked object, .x-masked embed { + visibility: hidden; +} + +.x-layer { + visibility: hidden; +} + +.x-unselectable, .x-unselectable * { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-repaint { + zoom: 1; + background-color: transparent; + -moz-outline: none; +} + +.x-item-disabled { + cursor: default; + opacity: .6; + -moz-opacity: .6; + filter: alpha(opacity=60); +} + +.x-item-disabled * { + cursor: default !important; +} + +.x-splitbar-proxy { + position: absolute; + visibility: hidden; + z-index: 20001; + zoom: 1; + line-height: 1px; + font-size: 1px; + overflow: hidden; +} + +.x-splitbar-h, .x-splitbar-proxy-h { + cursor: e-resize; + cursor: col-resize; +} + +.x-splitbar-v, .x-splitbar-proxy-v { + cursor: s-resize; + cursor: row-resize; +} + +.x-color-palette { + width: 150px; + height: 92px; + cursor: pointer; +} + +.x-color-palette a { + border: 1px solid; + float: left; + padding: 2px; + text-decoration: none; + -moz-outline: 0 none; + outline: 0 none; + cursor: pointer; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border: 1px solid; +} + +.x-color-palette em { + display: block; + border: 1px solid; +} + +.x-color-palette em span { + cursor: pointer; + display: block; + height: 10px; + line-height: 10px; + width: 10px; +} + +.x-ie-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; + zoom:1; +} + +.x-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; +} + +.x-shadow * { + overflow: hidden; +} + +.x-shadow * { + padding: 0; + border: 0; + margin: 0; + clear: none; + zoom: 1; +} + + +.x-shadow .xstc, .x-shadow .xsbc { + height: 6px; + float: left; +} + + +.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr { + width: 6px; + height: 6px; + float: left; +} + + +.x-shadow .xsc { + width: 100%; +} + +.x-shadow .xsml, .x-shadow .xsmr { + width: 6px; + float: left; + height: 100%; +} + +.x-shadow .xsmc { + float: left; + height: 100%; + background: transparent; +} + +.x-shadow .xst, .x-shadow .xsb { + height: 6px; + overflow: hidden; + width: 100%; +} + +.x-shadow .xsml { + background: transparent repeat-y 0 0; +} + +.x-shadow .xsmr { + background: transparent repeat-y -6px 0; +} + +.x-shadow .xstl { + background: transparent no-repeat 0 0; +} + +.x-shadow .xstc { + background: transparent repeat-x 0 -30px; +} + +.x-shadow .xstr { + background: transparent repeat-x 0 -18px; +} + +.x-shadow .xsbl { + background: transparent no-repeat 0 -12px; +} + +.x-shadow .xsbc { + background: transparent repeat-x 0 -36px; +} + +.x-shadow .xsbr { + background: transparent repeat-x 0 -6px; +} + +.loading-indicator { + background: no-repeat left; + padding-left: 20px; + line-height: 16px; + margin: 3px; +} + +.x-text-resize { + position: absolute; + left: -1000px; + top: -1000px; + visibility: hidden; + zoom: 1; +} + +.x-drag-overlay { + width: 100%; + height: 100%; + display: none; + position: absolute; + left: 0; + top: 0; + background-image:url(../images/default/s.gif); + z-index: 20000; +} + +.x-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.x-spotlight { + z-index: 8999; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width:0; + height:0; + zoom: 1; +} + +#x-history-frame { + position:absolute; + top:-1px; + left:0; + width:1px; + height:1px; + visibility:hidden; +} + +#x-history-field { + position:absolute; + top:0; + left:-1px; + width:1px; + height:1px; + visibility:hidden; +} + +.x-tab-panel { + overflow:hidden; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border: 1px solid; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header { + border: 1px solid; + padding-bottom: 2px; +} + +.x-tab-panel-footer { + border: 1px solid; + padding-top: 2px; +} + +.x-tab-strip-wrap { + width:100%; + overflow:hidden; + position:relative; + zoom:1; +} + +ul.x-tab-strip { + display:block; + width:5000px; + zoom:1; +} + +ul.x-tab-strip-top{ + padding-top: 1px; + background: repeat-x bottom; + border-bottom: 1px solid; +} + +ul.x-tab-strip-bottom{ + padding-bottom: 1px; + background: repeat-x top; + border-top: 1px solid; + border-bottom: 0 none; +} + +.x-tab-panel-header-plain .x-tab-strip-top { + background:transparent !important; + padding-top:0 !important; +} + +.x-tab-panel-header-plain { + background:transparent !important; + border-width:0 !important; + padding-bottom:0 !important; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border:1px solid; + height:2px; + font-size:1px; + line-height:1px; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer { + border-top: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-bottom: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-bottom { + background:transparent !important; + padding-bottom:0 !important; +} + +.x-tab-panel-footer-plain { + background:transparent !important; + border-width:0 !important; + padding-top:0 !important; +} + +.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer, +.ext-border-box .x-tab-panel-footer-plain .x-tab-strip-spacer { + height:3px; +} + +ul.x-tab-strip li { + float:left; + margin-left:2px; +} + +ul.x-tab-strip li.x-tab-edge { + float:left; + margin:0 !important; + padding:0 !important; + border:0 none !important; + font-size:1px !important; + line-height:1px !important; + overflow:hidden; + zoom:1; + background:transparent !important; + width:1px; +} + +.x-tab-strip a, .x-tab-strip span, .x-tab-strip em { + display:block; +} + +.x-tab-strip a { + text-decoration:none !important; + -moz-outline: none; + outline: none; + cursor:pointer; +} + +.x-tab-strip-inner { + overflow:hidden; + text-overflow: ellipsis; +} + +.x-tab-strip span.x-tab-strip-text { + white-space: nowrap; + cursor:pointer; + padding:4px 0; +} + +.x-tab-strip-top .x-tab-with-icon .x-tab-right { + padding-left:6px; +} + +.x-tab-strip .x-tab-with-icon span.x-tab-strip-text { + padding-left:20px; + background-position: 0 3px; + background-repeat: no-repeat; +} + +.x-tab-strip-active, .x-tab-strip-active a.x-tab-right { + cursor:default; +} + +.x-tab-strip-active span.x-tab-strip-text { + cursor:default; +} + +.x-tab-strip-disabled .x-tabs-text { + cursor:default; +} + +.x-tab-panel-body { + overflow:hidden; +} + +.x-tab-panel-bwrap { + overflow:hidden; +} + +.ext-ie .x-tab-strip .x-tab-right { + position:relative; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + margin-bottom:-1px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-bottom:5px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + margin-top:-1px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-top:5px; +} + +.x-tab-strip-top .x-tab-right { + background: transparent no-repeat 0 -51px; + padding-left:10px; +} + +.x-tab-strip-top .x-tab-left { + background: transparent no-repeat right -351px; + padding-right:10px; +} + +.x-tab-strip-top .x-tab-strip-inner { + background: transparent repeat-x 0 -201px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-right { + background-position:0 -101px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-left { + background-position:right -401px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner { + background-position:0 -251px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + background-position: 0 0; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-left { + background-position: right -301px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner { + background-position: 0 -151px; +} + +.x-tab-strip-bottom .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + padding:0 10px; +} + +.x-tab-strip-bottom .x-tab-right { + padding:0; +} + +.x-tab-strip .x-tab-strip-close { + display:none; +} + +.x-tab-strip-closable { + position:relative; +} + +.x-tab-strip-closable .x-tab-left { + padding-right:19px; +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + opacity:.6; + -moz-opacity:.6; + background-repeat:no-repeat; + display:block; + width:11px; + height:11px; + position:absolute; + top:3px; + right:3px; + cursor:pointer; + z-index:2; +} + +.x-tab-strip .x-tab-strip-active a.x-tab-strip-close { + opacity:.8; + -moz-opacity:.8; +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + opacity:1; + -moz-opacity:1; +} + +.x-tab-panel-body { + border: 1px solid; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background: transparent no-repeat -18px 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + left:0; + top:0; + z-index:10; + cursor:pointer; +} +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background: transparent no-repeat 0 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + right:0; + top:0; + z-index:10; + cursor:pointer; +} + +.x-tab-scroller-right-over { + background-position: -18px 0; +} + +.x-tab-scroller-right-disabled { + background-position: 0 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scrolling-bottom .x-tab-scroller-left, .x-tab-scrolling-bottom .x-tab-scroller-right{ + margin-top: 1px; +} + +.x-tab-scrolling .x-tab-strip-wrap { + margin-left:18px; + margin-right:18px; +} + +.x-tab-scrolling { + position:relative; +} + +.x-tab-panel-bbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-tab-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-form-field{ + margin: 0 0 0 0; +} + +.ext-webkit *:focus{ + outline: none !important; +} + + +.x-form-text, textarea.x-form-field{ + padding:1px 3px; + background:repeat-x 0 0; + border:1px solid; +} + +textarea.x-form-field { + padding:2px 3px; +} + +.x-form-text, .ext-ie .x-form-file { + height:22px; + line-height:18px; + vertical-align:middle; +} + +.ext-ie6 .x-form-text, .ext-ie7 .x-form-text { + margin:-1px 0; + height:22px; + line-height:18px; +} + +.ext-ie6 textarea.x-form-field, .ext-ie7 textarea.x-form-field { + margin:-1px 0; +} + +.ext-strict .x-form-text { + height:18px; +} + +.ext-safari.ext-mac textarea.x-form-field { + margin-bottom:-2px; +} + +.ext-strict .ext-ie8 .x-form-text, .ext-strict .ext-ie8 textarea.x-form-field { + margin-bottom: 1px; +} + +.ext-gecko .x-form-text , .ext-ie8 .x-form-text { + padding-top:2px; + padding-bottom:0; +} + +textarea { + resize: none; +} + + +.x-form-select-one { + height:20px; + line-height:18px; + vertical-align:middle; + border: 1px solid; +} + + + + + + +.x-form-check-wrap { + line-height:18px; +} + +.ext-ie .x-form-check-wrap input { + width:15px; + height:15px; +} + +.x-editor .x-form-check-wrap { + padding:3px; +} + +.x-editor .x-form-checkbox { + height:13px; +} + +.x-form-check-group-label { + border-bottom: 1px solid; + margin-bottom: 5px; + padding-left: 3px !important; + float: none !important; +} + + +.x-form-field-wrap .x-form-trigger{ + width:17px; + height:21px; + border:0; + background:transparent no-repeat 0 0; + cursor:pointer; + border-bottom: 1px solid; + position:absolute; + top:0; +} + +.x-form-field-wrap .x-form-date-trigger, .x-form-field-wrap .x-form-clear-trigger, .x-form-field-wrap .x-form-search-trigger{ + cursor:pointer; +} + +.ext-safari .x-form-field-wrap .x-form-trigger{ + right:0; +} + +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{ + position:static; + top:auto; + vertical-align:top; +} + +.x-form-field-wrap { + position:relative; + left:0;top:0; + zoom:1; + white-space: nowrap; +} + +.x-form-field-wrap .x-form-trigger-over{ + background-position:-17px 0; +} + +.x-form-field-wrap .x-form-trigger-click{ + background-position:-34px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + background-position:-51px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-over{ + background-position:-68px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-click{ + background-position:-85px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-over{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-click{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-trigger-noedit{ + cursor:pointer; +} + + +.x-form-focus, textarea.x-form-focus{ + border: 1px solid; +} + + +.x-form-invalid, textarea.x-form-invalid{ + background:repeat-x bottom; + border: 1px solid; +} + +.ext-safari .x-form-invalid{ + border: 1px solid; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid{ + background:repeat-x bottom; +} + + +.x-editor { + visibility:hidden; + padding:0; + margin:0; +} +.x-form-check-wrap { + height: 22px; + line-height:18px; +} + +.ext-ie .x-form-check-wrap input { + width:15px; + height:15px; +} + +.x-editor .x-form-check-wrap { + padding:3px; +} + +.x-editor .x-form-checkbox { + height:13px; +} + +.x-form-grow-sizer { + left: -10000px; + padding: 8px 3px; + position: absolute; + visibility:hidden; + top: -10000px; + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + zoom:1; +} + +.x-form-grow-sizer p { + margin:0 !important; + border:0 none !important; + padding:0 !important; +} + + + +.x-form-item { + display:block; + margin-bottom:4px; + zoom:1; +} + +.x-form-item label { + display:block; + float:left; + width:100px; + padding:3px; + padding-left:0; + clear:left; + z-index:2; + position:relative; +} + +.x-form-element { + padding-left:105px; + position:relative; +} + +.x-form-invalid-msg { + padding:2px; + padding-left:18px; + background: transparent no-repeat 0 2px; + line-height:16px; + width:200px; +} + +.x-form-label-left label { + text-align:left; +} + +.x-form-label-right label { + text-align:right; +} + +.x-form-label-top .x-form-item label { + width:auto; + float:none; + clear:none; + display:inline; + margin-bottom:4px; + position:static; +} + +.x-form-label-top .x-form-element { + padding-left:0; + padding-top:4px; +} + +.x-form-label-top .x-form-item { + padding-bottom:4px; +} + + +.x-small-editor .x-form-text { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + margin-top:-1px !important; + margin-bottom:-1px !important; + height:20px !important; + line-height:16px !important; +} + +.ext-strict .x-small-editor .x-form-text { + height:16px !important; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + height:20px; + line-height:16px; +} + +.ext-border-box .x-small-editor .x-form-text { + height:20px; +} + +.x-small-editor .x-form-select-one { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.x-small-editor .x-form-num-field { + text-align:right; +} + +.x-small-editor .x-form-field-wrap .x-form-trigger{ + height:19px; +} + +.ext-webkit .x-small-editor .x-form-text{padding-top:3px;font-size:100%;} + +.x-form-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} +.x-form-clear-left { + clear:left; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.x-form-cb-label { + width:auto !important; + float:none !important; + clear:none !important; + display:inline !important; + margin-left:4px; + top: -2px; +} + +.ext-gecko2 .x-form-cb-label{ + top: -1px; +} + +.ext-strict .ext-ie8 .x-form-cb-label { + top: -3px; +} + +.ext-opera .x-form-cb-label, .ext-safari3 .x-form-cb-label, .ext-ie7 .x-form-cb-label, .ext-ie6 .x-form-cb-label { + top: 0; +} + +.x-form-column { + float:left; + padding:0; + margin:0; + width:48%; + overflow:hidden; + zoom:1; +} + + +.x-form .x-form-btns-ct .x-btn{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns td { + border:0; + padding:0; +} + +.x-form .x-form-btns-ct .x-form-btns-right table{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-left table{ + float:left; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-center{ + text-align:center; +} + +.x-form .x-form-btns-ct .x-form-btns-center table{ + margin:0 auto; +} + +.x-form .x-form-btns-ct table td.x-form-btn-td{ + padding:3px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-form-invalid-icon { + width:16px; + height:18px; + visibility:hidden; + position:absolute; + left:0; + top:0; + display:block; + background:transparent no-repeat 0 2px; +} + + +.x-fieldset { + border:1px solid; + padding:10px; + margin-bottom:10px; + display:block; +} + + +.ext-webkit .x-fieldset-header { + padding-top: 1px; +} + +.ext-ie .x-fieldset legend { + margin-bottom:10px; +} + +.ext-ie .x-fieldset { + padding-top: 0; + padding-bottom:10px; +} + +.x-fieldset legend .x-tool-toggle { + margin-right:3px; + margin-left:0; + float:left !important; +} + +.x-fieldset legend input { + margin-right:3px; + float:left !important; + height:13px; + width:13px; +} + +fieldset.x-panel-collapsed { + padding-bottom:0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent; + border-right-color: transparent; +} + +.ext-ie6 fieldset.x-panel-collapsed{ + padding-bottom:0 !important; + border-width: 1px 0 0 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +fieldset.x-panel-collapsed .x-fieldset-bwrap { + visibility:hidden; + position:absolute; + left:-1000px; + top:-1000px; +} + +.ext-ie .x-fieldset-bwrap { + zoom:1; +} + +.x-fieldset-noborder { + border:0px none transparent; +} + +.x-fieldset-noborder legend { + margin-left:-3px; +} + + +.ext-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom:23px; +} +.ext-ie .x-fieldset-noborder legend span { + position: absolute; + left:16px; +} + +.ext-gecko .x-window-body .x-form-item { + -moz-outline: none; + overflow: auto; +} + +.ext-gecko .x-form-item { + -moz-outline: none; +} + +.x-hide-label label.x-form-item-label { + display:none; +} + +.x-hide-label .x-form-element { + padding-left: 0 !important; +} + +.x-fieldset { + overflow:hidden; +} + +.x-fieldset-bwrap { + overflow:hidden; + zoom:1; +} + +.x-fieldset-body { + overflow:hidden; +} + + + +.x-btn{ + cursor:pointer; + white-space: nowrap; +} + +.x-btn button{ + border:0 none; + background:transparent; + padding-left:3px; + padding-right:3px; + cursor:pointer; + margin:0; + overflow:visible; + width:auto; + -moz-outline:0 none; + outline:0 none; +} + +* html .ext-ie .x-btn button { + width:1px; +} + +.ext-gecko .x-btn button { + padding-left:0; + padding-right:0; +} + +.ext-gecko .x-btn button::-moz-focus-inner { + padding:0; +} + +.ext-ie .x-btn button { + padding-top:2px; +} + +.x-btn td { + padding:0 !important; +} + +.x-btn-text { + cursor:pointer; + white-space: nowrap; + padding:0; +} + + + + +.x-btn-noicon .x-btn-small .x-btn-text{ + height: 16px; +} + +.x-btn-noicon .x-btn-medium .x-btn-text{ + height: 24px; +} + +.x-btn-noicon .x-btn-large .x-btn-text{ + height: 32px; +} + + +.x-btn-icon .x-btn-text{ + background-position: center; + background-repeat: no-repeat; +} + +.x-btn-icon .x-btn-small .x-btn-text{ + height: 16px; + width: 16px; +} + +.x-btn-icon .x-btn-medium .x-btn-text{ + height: 24px; + width: 24px; +} + +.x-btn-icon .x-btn-large .x-btn-text{ + height: 32px; + width: 32px; +} + + + +.x-btn-text-icon .x-btn-icon-small-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:34px; + height:32px; +} + + +.x-btn-text-icon .x-btn-icon-small-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:26px; +} + +.x-btn-text-icon .x-btn-icon-large-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:34px; +} + + +.x-btn-text-icon .x-btn-icon-small-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:34px; + height:32px; +} + + +.x-btn-text-icon .x-btn-icon-small-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:26px; +} + +.x-btn-text-icon .x-btn-icon-large-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:34px; +} + + +.x-btn-tr i, .x-btn-tl i, .x-btn-mr i, .x-btn-ml i, .x-btn-br i, .x-btn-bl i{ + font-size:1px; + line-height:1px; + width:3px; + display:block; + overflow:hidden; +} + +.x-btn-tr i, .x-btn-tl i, .x-btn-br i, .x-btn-bl i{ + height:3px; +} + +.x-btn-tl{ + width:3px; + height:3px; + background:no-repeat 0 0; +} +.x-btn-tr{ + width:3px; + height:3px; + background:no-repeat -3px 0; +} +.x-btn-tc{ + height:3px; + background:repeat-x 0 -6px; +} + +.x-btn-ml{ + width:3px; + background:no-repeat 0 -24px; +} +.x-btn-mr{ + width:3px; + background:no-repeat -3px -24px; +} + +.x-btn-mc{ + background:repeat-x 0 -1096px; + vertical-align: middle; + text-align:center; + padding:0 5px; + cursor:pointer; + white-space:nowrap; +} + +.x-btn-bl{ + width:3px; + height:3px; + background:no-repeat 0 -3px; +} + +.x-btn-br{ + width:3px; + height:3px; + background:no-repeat -3px -3px; +} + +.x-btn-bc{ + height:3px; + background:repeat-x 0 -15px; +} + +.x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-btn-click .x-btn-tl, .x-btn-menu-active .x-btn-tl, .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-btn-click .x-btn-tr, .x-btn-menu-active .x-btn-tr, .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-btn-click .x-btn-tc, .x-btn-menu-active .x-btn-tc, .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-btn-click .x-btn-ml, .x-btn-menu-active .x-btn-ml, .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-btn-click .x-btn-mr, .x-btn-menu-active .x-btn-mr, .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-btn-click .x-btn-mc, .x-btn-menu-active .x-btn-mc, .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-btn-click .x-btn-bl, .x-btn-menu-active .x-btn-bl, .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-btn-click .x-btn-br, .x-btn-menu-active .x-btn-br, .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-btn-click .x-btn-bc, .x-btn-menu-active .x-btn-bc, .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-btn-disabled *{ + cursor:default !important; +} + + + + +.x-btn-mc em.x-btn-arrow { + display:block; + background:transparent no-repeat right center; + padding-right:10px; +} + +.x-btn-mc em.x-btn-split { + display:block; + background:transparent no-repeat right center; + padding-right:14px; +} + + +.x-btn-mc em.x-btn-arrow-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + +.x-btn-mc em.x-btn-split-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + + +.x-btn-as-arrow .x-btn-mc em { + display:block; + background:transparent; + padding-bottom:14px; +} + + +.x-btn-group { + padding:1px; +} + +.x-btn-group-header { + padding:2px; + text-align:center; +} + +.x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + +.x-btn-group-tl { + background: transparent no-repeat 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:3px; +} + +.x-btn-group-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-btn-group-bc .x-panel-footer { + zoom:1; +} + +.x-btn-group-bl { + background: transparent no-repeat 0 bottom; + padding-left:3px; + zoom:1; +} + +.x-btn-group-br { + background: transparent no-repeat right bottom; + padding-right:3px; + zoom:1; +} + +.x-btn-group-mc { + border:0 none; + padding:1px 0 0 0; + margin:0; +} + +.x-btn-group-mc .x-btn-group-body { + background:transparent; + border: 0 none; +} + +.x-btn-group-ml { + background: transparent repeat-y 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-mr { + background: transparent repeat-y right 0; + padding-right:3px; + zoom:1; +} + +.x-btn-group-bc .x-btn-group-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-btn-group-bc { + height:3px; + font-size:0; + line-height:0; +} + +.x-btn-group-bwrap { + overflow:hidden; + zoom:1; +} + +.x-btn-group-body { + overflow:hidden; + zoom:1; +} + +.x-btn-group-notitle .x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + height:2px; +} +.x-toolbar{ + border-style:solid; + border-width:0 0 1px 0; + display: block; + padding:2px; + background:repeat-x top left; + position:relative; + left:0; + top:0; + zoom:1; + overflow:hidden; +} + +.x-toolbar .x-item-disabled .x-btn-icon { + opacity: .35; + -moz-opacity: .35; + filter: alpha(opacity=35); +} + +.x-toolbar td { + vertical-align:middle; +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + white-space: nowrap; +} + +.x-toolbar .x-item-disabled { + cursor:default; + opacity:.6; + -moz-opacity:.6; + filter:alpha(opacity=60); +} + +.x-toolbar .x-item-disabled * { + cursor:default; +} + +.x-toolbar .x-toolbar-cell { + vertical-align:middle; +} + +.x-toolbar .x-btn-tl, .x-toolbar .x-btn-tr, .x-toolbar .x-btn-tc, .x-toolbar .x-btn-ml, .x-toolbar .x-btn-mr, +.x-toolbar .x-btn-mc, .x-toolbar .x-btn-bl, .x-toolbar .x-btn-br, .x-toolbar .x-btn-bc +{ + background-position: 500px 500px; +} + + +.x-toolbar .x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-toolbar .x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-toolbar .x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-toolbar .x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-toolbar .x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-toolbar .x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-toolbar .x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-toolbar .x-btn-click .x-btn-tl, .x-toolbar .x-btn-menu-active .x-btn-tl, .x-toolbar .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-toolbar .x-btn-click .x-btn-tr, .x-toolbar .x-btn-menu-active .x-btn-tr, .x-toolbar .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-toolbar .x-btn-click .x-btn-tc, .x-toolbar .x-btn-menu-active .x-btn-tc, .x-toolbar .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-toolbar .x-btn-click .x-btn-ml, .x-toolbar .x-btn-menu-active .x-btn-ml, .x-toolbar .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mr, .x-toolbar .x-btn-menu-active .x-btn-mr, .x-toolbar .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mc, .x-toolbar .x-btn-menu-active .x-btn-mc, .x-toolbar .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-toolbar .x-btn-click .x-btn-bl, .x-toolbar .x-btn-menu-active .x-btn-bl, .x-toolbar .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-toolbar .x-btn-click .x-btn-br, .x-toolbar .x-btn-menu-active .x-btn-br, .x-toolbar .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-toolbar .x-btn-click .x-btn-bc, .x-toolbar .x-btn-menu-active .x-btn-bc, .x-toolbar .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-toolbar div.xtb-text{ + padding:2px 2px 0; + line-height:16px; + display:block; +} + +.x-toolbar .xtb-sep { + background-position: center; + background-repeat: no-repeat; + display: block; + font-size: 1px; + height: 16px; + width:4px; + overflow: hidden; + cursor:default; + margin: 0 2px 0; + border:0; +} + +.x-toolbar .xtb-spacer { + width:2px; +} + + +.x-tbar-page-number{ + width:24px; + height:14px; +} + +.x-paging-info { + position:absolute; + top:5px; + right: 8px; +} + + +.x-toolbar-ct { + width:100%; +} + +.x-toolbar-right td { + text-align: center; +} + +.x-panel-tbar, .x-panel-bbar, .x-window-tbar, .x-window-bbar, .x-tab-panel-tbar, .x-tab-panel-bbar, .x-plain-tbar, .x-plain-bbar { + overflow:hidden; + zoom:1; +} + +.x-toolbar-more .x-btn-small .x-btn-text{ + height: 16px; + width: 12px; +} + +.x-toolbar-more em.x-btn-arrow { + display:inline; + background:transparent; + padding-right:0; +} + +.x-toolbar-more .x-btn-mc em.x-btn-arrow { + background-image: none; +} + +div.x-toolbar-no-items { + color:gray !important; + padding:5px 10px !important; +} + + +.ext-border-box .x-toolbar-cell .x-form-text { + margin-bottom:-1px !important; +} + +.ext-border-box .x-toolbar-cell .x-form-field-wrap .x-form-text { + margin:0 !important; +} + +.ext-ie .x-toolbar-cell .x-form-field-wrap { + height:21px; +} + +.ext-ie .x-toolbar-cell .x-form-text { + position:relative; + top:-1px; +} + +.ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-text, .ext-strict .ext-ie .x-toolbar-cell .x-form-text { + top: 0px; +} + +.x-toolbar-right td .x-form-field-trigger-wrap{ + text-align: left; +} + +.x-toolbar-cell .x-form-checkbox, .x-toolbar-cell .x-form-radio{ + vertical-align: top; + margin-top: 3px; +} + +.x-toolbar-cell .x-form-check-wrap label{ + vertical-align: bottom; +} + + +.x-statusbar .x-status-text { + height: 21px; + line-height: 21px; + padding: 0 4px; + cursor: default; +} + +.x-statusbar .x-status-busy { + padding-left: 25px; + background: transparent no-repeat 3px 3px; +} + +.x-statusbar .x-status-text-panel { + border-top: 1px solid; + border-right: 1px solid; + border-bottom: 1px solid; + border-left: 1px solid; + padding: 2px 8px 2px 5px; +} +.x-resizable-handle { + position:absolute; + z-index:100; + + font-size:1px; + line-height:6px; + overflow:hidden; + filter:alpha(opacity=0); + opacity:0; + zoom:1; +} + +.x-resizable-handle-east{ + width:6px; + cursor:e-resize; + right:0; + top:0; + height:100%; +} + +.ext-ie .x-resizable-handle-east { + margin-right:-1px; +} + +.x-resizable-handle-south{ + width:100%; + cursor:s-resize; + left:0; + bottom:0; + height:6px; +} + +.ext-ie .x-resizable-handle-south { + margin-bottom:-1px; +} + +.x-resizable-handle-west{ + width:6px; + cursor:w-resize; + left:0; + top:0; + height:100%; +} + +.x-resizable-handle-north{ + width:100%; + cursor:n-resize; + left:0; + top:0; + height:6px; +} + +.x-resizable-handle-southeast{ + width:6px; + cursor:se-resize; + right:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northwest{ + width:6px; + cursor:nw-resize; + left:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northeast{ + width:6px; + cursor:ne-resize; + right:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-southwest{ + width:6px; + cursor:sw-resize; + left:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{ + filter:alpha(opacity=100); + opacity:1; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-position: left; +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-position: top; +} + +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-position: top left; +} + +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-position:bottom right; +} + +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-position: bottom left; +} + +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-position: top right; +} + +.x-resizable-proxy{ + border: 1px dashed; + position:absolute; + overflow:hidden; + display:none; + left:0; + top:0; + z-index:50000; +} + +.x-resizable-overlay{ + width:100%; + height:100%; + display:none; + position:absolute; + left:0; + top:0; + z-index:200000; + -moz-opacity: 0; + opacity:0; + filter: alpha(opacity=0); +} + + +.x-grid3 { + position:relative; + overflow:hidden; +} + +.x-grid-panel .x-panel-body { + overflow:hidden !important; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border:1px solid; +} + +.x-grid3 table { + table-layout:fixed; +} + +.x-grid3-viewport{ + overflow:hidden; +} + +.x-grid3-hd-row td, .x-grid3-row td, .x-grid3-summary-row td{ + -moz-outline: none; + -moz-user-focus: normal; +} + +.x-grid3-row td, .x-grid3-summary-row td { + line-height:13px; + vertical-align: top; + padding-left:1px; + padding-right:1px; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-cell{ + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-row td { + line-height:15px; + vertical-align:middle; + border-left:1px solid; + border-right:1px solid; +} + +.x-grid3-hd-row .x-grid3-marker-hd { + padding:3px; +} + +.x-grid3-row .x-grid3-marker { + padding:3px; +} + +.x-grid3-cell-inner, .x-grid3-hd-inner{ + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding:3px 3px 3px 5px; + white-space: nowrap; +} + +.x-grid3-hd-inner { + position:relative; + cursor:inherit; + padding:4px 3px 4px 5px; +} + +.x-grid3-row-body { + white-space:normal; +} + +.x-grid3-body-cell { + -moz-outline:0 none; + outline:0 none; +} + + +.ext-ie .x-grid3-cell-inner, .ext-ie .x-grid3-hd-inner{ + width:100%; +} + + +.ext-strict .x-grid3-cell-inner, .ext-strict .x-grid3-hd-inner{ + width:auto; +} + +.x-grid-row-loading { + background: no-repeat center center; +} + +.x-grid-page { + overflow:hidden; +} + +.x-grid3-row { + cursor: default; + border: 1px solid; + width:100%; +} + +.x-grid3-row-over { + border:1px solid; + background: repeat-x left top; +} + +.x-grid3-resize-proxy { + width:1px; + left:0; + cursor: e-resize; + cursor: col-resize; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-resize-marker { + width:1px; + left:0; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select:ignore; +} + + +.x-grid3-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + padding:1px 0 0 0; +} + +.x-grid3-header-pop { + border-left:1px solid; + float:right; + clear:none; +} + +.x-grid3-header-pop-inner { + border-left:1px solid; + width:14px; + height:19px; + background: transparent no-repeat center center; +} + +.ext-ie .x-grid3-header-pop-inner { + width:15px; +} + +.ext-strict .x-grid3-header-pop-inner { + width:14px; +} + +.x-grid3-header-inner { + overflow:hidden; + zoom:1; + float:left; +} + +.x-grid3-header-offset { + padding-left:1px; +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left:1px solid; + border-right:1px solid; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background: repeat-x left bottom; + +} + +.x-grid3-sort-icon{ + background-repeat: no-repeat; + display: none; + height: 4px; + width: 13px; + margin-left:3px; + vertical-align: middle; +} + +.sort-asc .x-grid3-sort-icon, .sort-desc .x-grid3-sort-icon { + display: inline; +} + + +.ext-strict .ext-ie .x-grid3-header-inner, .ext-strict .ext-ie6 .x-grid3-hd { + position:relative; +} + +.ext-strict .ext-ie6 .x-grid3-hd-inner{ + position:static; +} + + +.x-grid3-body { + zoom:1; +} + +.x-grid3-scroller { + overflow:auto; + zoom:1; + position:relative; +} + +.x-grid3-cell-text, .x-grid3-hd-text { + display: block; + padding: 3px 5px 3px 5px; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-grid3-split { + background-position: center; + background-repeat: no-repeat; + cursor: e-resize; + cursor: col-resize; + display: block; + font-size: 1px; + height: 16px; + overflow: hidden; + position: absolute; + top: 2px; + width: 6px; + z-index: 3; +} + + +.x-dd-drag-proxy .x-grid3-hd-inner{ + background: repeat-x left bottom; + width:120px; + padding:3px; + border:1px solid; + overflow:hidden; +} + +.col-move-top, .col-move-bottom{ + width:9px; + height:9px; + position:absolute; + top:0; + line-height:1px; + font-size:1px; + overflow:hidden; + visibility:hidden; + z-index:20000; + background:transparent no-repeat left top; +} + + +.x-grid3-row-selected { + border:1px dotted; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background: repeat-x 0 bottom !important; + vertical-align:middle !important; + padding:0; + border-top:1px solid; + border-bottom:none !important; + border-right:1px solid !important; + text-align:center; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + padding:0 4px; + text-align:center; +} + + +.x-grid3-dirty-cell { + background: transparent no-repeat 0 0; +} + + +.x-grid3-topbar, .x-grid3-bottombar{ + overflow:hidden; + display:none; + zoom:1; + position:relative; +} + +.x-grid3-topbar .x-toolbar{ + border-right:0 none; +} + +.x-grid3-bottombar .x-toolbar{ + border-right:0 none; + border-bottom:0 none; + border-top:1px solid; +} + + +.x-props-grid .x-grid3-cell{ + padding:1px; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background:transparent repeat-y -16px !important; + padding-left:12px; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + padding:1px; + padding-right:0; + border:0 none; + border-right:1px solid; +} + + +.x-grid3-col-dd { + border:0 none; + padding:0; + background:transparent; +} + +.x-dd-drag-ghost .x-grid3-dd-wrap { + padding:1px 3px 3px 1px; +} + +.x-grid3-hd { + -moz-user-select:none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-btn { + display:none; + position:absolute; + width:14px; + background:no-repeat left center; + right:0; + top:0; + z-index:2; + cursor:pointer; +} + +.x-grid3-hd-over .x-grid3-hd-btn, .x-grid3-hd-menu-open .x-grid3-hd-btn { + display:block; +} + +a.x-grid3-hd-btn:hover { + background-position:-14px center; +} + + +.x-grid3-body .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-expander { + width:100%; + height:18px; + background-position:4px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row-collapsed .x-grid3-row-expander { + background-position:4px 2px; +} + +.x-grid3-row-expanded .x-grid3-row-expander { + background-position:-21px 2px; +} + +.x-grid3-row-collapsed .x-grid3-row-body { + display:none !important; +} + +.x-grid3-row-expanded .x-grid3-row-body { + display:block !important; +} + + +.x-grid3-body .x-grid3-td-checker { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner, .x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + width:100%; + height:18px; + background-position:2px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row .x-grid3-row-checker { + background-position:2px 2px; +} + +.x-grid3-row-selected .x-grid3-row-checker, .x-grid3-hd-checker-on .x-grid3-hd-checker,.x-grid3-row-checked .x-grid3-row-checker { + background-position:-23px 2px; +} + +.x-grid3-hd-checker { + background-position:2px 3px; +} + +.x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position:-23px 3px; +} + + +.x-grid3-body .x-grid3-td-numberer { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + padding:3px 5px 0 0 !important; + text-align:right; +} + + + +.x-grid3-body .x-grid3-td-row-icon { + background:transparent repeat-y right; + vertical-align:top; + text-align:center; +} + +.x-grid3-body .x-grid3-td-row-icon .x-grid3-cell-inner { + padding:0 !important; + background-position:center center; + background-repeat:no-repeat; + width:16px; + height:16px; + margin-left:2px; + margin-top:3px; +} + + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner { + padding: 1px 0 0 0 !important; +} + +.x-grid3-check-col { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-check-col-on { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + + +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom: 2px solid; + cursor:pointer; + padding-top:6px; +} + +.x-grid-group-hd div { + background:transparent no-repeat 3px -47px; + padding:4px 4px 4px 17px; +} + +.x-grid-group-collapsed .x-grid-group-hd div { + background-position: 3px 3px; +} + +.x-grid-group-collapsed .x-grid-group-body { + display:none; +} + +.ext-ie6 .x-grid3 .x-editor .x-form-text, .ext-ie7 .x-grid3 .x-editor .x-form-text { + position:relative; + top:-1px; +} + +.ext-ie .x-props-grid .x-editor .x-form-text { + position:static; + top:0; +} + +.x-grid-empty { + padding:10px; +} + + +.ext-ie7 .x-grid-panel .x-panel-bbar { + position:relative; +} + +.ext-ie6 .x-grid3-header { + position: relative; +} + + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + padding-right:0; + border-right:1px solid; +} + +.x-dd-drag-proxy{ + position:absolute; + left:0; + top:0; + visibility:hidden; + z-index:15000; +} + +.x-dd-drag-ghost{ + -moz-opacity: 0.85; + opacity:.85; + filter: alpha(opacity=85); + border: 1px solid; + padding:3px; + padding-left:20px; + white-space:nowrap; +} + +.x-dd-drag-repair .x-dd-drag-ghost{ + -moz-opacity: 0.4; + opacity:.4; + filter: alpha(opacity=40); + border:0 none; + padding:0; + background-color:transparent; +} + +.x-dd-drag-repair .x-dd-drop-icon{ + visibility:hidden; +} + +.x-dd-drop-icon{ + position:absolute; + top:3px; + left:3px; + display:block; + width:16px; + height:16px; + background-color:transparent; + background-position: center; + background-repeat: no-repeat; + z-index:1; +} + +.x-view-selector { + position:absolute; + left:0; + top:0; + width:0; + border:1px dotted; + opacity: .5; + -moz-opacity: .5; + filter:alpha(opacity=50); + zoom:1; +} +.ext-strict .ext-ie .x-tree .x-panel-bwrap{ + position:relative; + overflow:hidden; +} + +.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-repeat: no-repeat; +} + +.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-position:center; + background-repeat: no-repeat; +} + +.ext-ie .x-tree-node-indent img, .ext-ie .x-tree-node-icon, .ext-ie .x-tree-ec-icon { + vertical-align:middle !important; +} + + +.ext-ie input.x-tree-node-cb { + width:15px; + height:15px; +} + +input.x-tree-node-cb { + margin-left:1px; +} + +.ext-ie input.x-tree-node-cb { + margin-left:0; +} + +.x-tree-noicon .x-tree-node-icon{ + width:0; height:0; +} + + +.ext-ie .x-tree-node-el input { + width:15px; + height:15px; +} + + +.x-tree-no-lines .x-tree-elbow{ + background:transparent; +} + +.x-tree-no-lines .x-tree-elbow-end{ + background:transparent; +} + +.x-tree-no-lines .x-tree-elbow-line{ + background:transparent; +} + + +.x-tree-arrows .x-tree-elbow{ + background:transparent; +} + +.x-tree-arrows .x-tree-elbow-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-end{ + background:transparent; +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-line{ + background:transparent; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{ + background-position:-48px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{ + background-position:-48px 0; +} + +.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + cursor:pointer; +} + +.ext-ie ul.x-tree-node-ct{ + font-size:0; + line-height:0; + zoom:1; +} + +.x-tree-node{ + white-space: nowrap; +} + +.x-tree-node-el { + line-height:18px; + cursor:pointer; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + text-decoration:none; + -khtml-user-select:none; + -moz-user-select:none; + -webkit-user-select:ignore; + -kthml-user-focus:normal; + -moz-user-focus:normal; + -moz-outline: 0 none; + outline:0 none; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + text-decoration:none; + padding:1px 3px 1px 2px; +} + +.x-tree-node .x-tree-node-disabled .x-tree-node-icon{ + -moz-opacity: 0.5; + opacity:.5; + filter: alpha(opacity=50); +} + +.x-tree-node .x-tree-node-inline-icon{ + background:transparent; +} + +.x-tree-node a:hover, .x-dd-drag-ghost a:hover{ + text-decoration:none; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom:1px dotted; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top:1px dotted; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{ + border-bottom:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{ + border-top:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom:2px solid; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top:2px solid; +} + +.x-tree-node .x-tree-drag-append a span{ + border:1px dotted; +} + +.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{ + display:none !important; +} + + +.x-tree-root-ct { + zoom:1; +} + +.x-date-picker { + border: 1px solid; + border-top:0 none; + position:relative; +} + +.x-date-picker a { + -moz-outline:0 none; + outline:0 none; +} + +.x-date-inner, .x-date-inner td, .x-date-inner th{ + border-collapse:separate; +} + +.x-date-middle,.x-date-left,.x-date-right { + background: repeat-x 0 -83px; + overflow:hidden; +} + +.x-date-middle .x-btn-tc,.x-date-middle .x-btn-tl,.x-date-middle .x-btn-tr, +.x-date-middle .x-btn-mc,.x-date-middle .x-btn-ml,.x-date-middle .x-btn-mr, +.x-date-middle .x-btn-bc,.x-date-middle .x-btn-bl,.x-date-middle .x-btn-br{ + background:transparent !important; + vertical-align:middle; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background:transparent no-repeat right 0; +} + +.x-date-right, .x-date-left { + width:18px; +} + +.x-date-right{ + text-align:right; +} + +.x-date-middle { + padding-top:2px; + padding-bottom:2px; + width:130px; +} + +.x-date-right a, .x-date-left a{ + display:block; + width:16px; + height:16px; + background-position: center; + background-repeat: no-repeat; + cursor:pointer; + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} + +.x-date-right a:hover, .x-date-left a:hover{ + -moz-opacity: 1; + opacity:1; + filter: alpha(opacity=100); +} + +.x-date-right a { + margin-right:2px; + text-decoration:none !important; +} + +.x-date-left a{ + margin-left:2px; + text-decoration:none !important; +} + +table.x-date-inner { + width:100%; + table-layout:fixed; +} + +.x-date-inner th { + width:25px; +} + +.x-date-inner th { + background: repeat-x left top; + text-align:right !important; + border-bottom: 1px solid; + cursor:default; + padding:0; + border-collapse:separate; +} + +.x-date-inner th span { + display:block; + padding:2px; + padding-right:7px; +} + +.x-date-inner td { + border: 1px solid; + text-align:right; + padding:0; +} + +.x-date-inner a { + padding:2px 5px; + display:block; + text-decoration:none; + text-align:right; + zoom:1; +} + +.x-date-inner .x-date-active{ + cursor:pointer; + color:black; +} + +.x-date-inner .x-date-selected a{ + background: repeat-x left top; + border:1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-today a{ + border: 1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + text-decoration:none !important; +} + +.x-date-bottom { + padding:4px; + border-top: 1px solid; + background: repeat-x left top; +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + text-decoration:none !important; +} + +.x-date-inner .x-date-disabled a { + cursor:default; +} + +.x-date-menu .x-menu-item { + padding:1px 24px 1px 4px; + white-space: nowrap; +} + +.x-date-menu .x-menu-item .x-menu-item-icon { + width:10px; + height:10px; + margin-right:5px; + background-position:center -4px !important; +} + +.x-date-mp { + position:absolute; + left:0; + top:0; + display:none; +} + +.x-date-mp td { + padding:2px; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn { + border: 0 none; + text-align:center; + vertical-align: middle; + width:25%; +} + +.x-date-mp-ok { + margin-right:3px; +} + +.x-date-mp-btns button { + text-decoration:none; + text-align:center; + text-decoration:none !important; + border:1px solid; + padding:1px 3px 1px; + cursor:pointer; +} + +.x-date-mp-btns { + background: repeat-x left top; +} + +.x-date-mp-btns td { + border-top: 1px solid; + text-align:center; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + display:block; + padding:2px 4px; + text-decoration:none; + text-align:center; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + text-decoration:none; + cursor:pointer; +} + +td.x-date-mp-sel a { + padding:1px 3px; + background: repeat-x left top; + border:1px solid; +} + +.x-date-mp-ybtn a { + overflow:hidden; + width:15px; + height:15px; + cursor:pointer; + background:transparent no-repeat; + display:block; + margin:0 auto; +} + +.x-date-mp-ybtn a.x-date-mp-next { + background-position:0 -120px; +} + +.x-date-mp-ybtn a.x-date-mp-next:hover { + background-position:-15px -120px; +} + +.x-date-mp-ybtn a.x-date-mp-prev { + background-position:0 -105px; +} + +.x-date-mp-ybtn a.x-date-mp-prev:hover { + background-position:-15px -105px; +} + +.x-date-mp-ybtn { + text-align:center; +} + +td.x-date-mp-sep { + border-right:1px solid; +} +.x-tip{ + position: absolute; + top: 0; + left:0; + visibility: hidden; + z-index: 20000; + border:0 none; +} + +.x-tip .x-tip-close{ + height: 15px; + float:right; + width: 15px; + margin:0 0 2px 2px; + cursor:pointer; + display:none; +} + +.x-tip .x-tip-tc { + background: transparent no-repeat 0 -62px; + padding-top:3px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tr { + background: transparent no-repeat right 0; + padding-right:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-bc { + background: transparent no-repeat 0 -121px; + height:3px; + overflow:hidden; +} + +.x-tip .x-tip-bl { + background: transparent no-repeat 0 -59px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-br { + background: transparent no-repeat right -59px; + padding-right:6px; + zoom:1; +} + +.x-tip .x-tip-mc { + border:0 none; +} + +.x-tip .x-tip-ml { + background: no-repeat 0 -124px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-mr { + background: transparent no-repeat right -124px; + padding-right:6px; + zoom:1; +} + +.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc { + font-size:0; + line-height:0; +} + +.x-tip .x-tip-header-text { + padding:0; + margin:0 0 2px 0; +} + +.x-tip .x-tip-body { + margin:0 !important; + line-height:14px; + padding:0; +} + +.x-tip .x-tip-body .loading-indicator { + margin:0; +} + +.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text { + cursor:move; +} + +.x-form-invalid-tip .x-tip-tc { + background: repeat-x 0 -12px; + padding-top:6px; +} + +.x-form-invalid-tip .x-tip-bc { + background: repeat-x 0 -18px; + height:6px; +} + +.x-form-invalid-tip .x-tip-bl { + background: no-repeat 0 -6px; +} + +.x-form-invalid-tip .x-tip-br { + background: no-repeat right -6px; +} + +.x-form-invalid-tip .x-tip-body { + padding:2px; +} + +.x-form-invalid-tip .x-tip-body { + padding-left:24px; + background:transparent no-repeat 2px 2px; +} + +.x-tip-anchor { + position: absolute; + width: 9px; + height: 10px; + overflow:hidden; + background: transparent no-repeat 0 0; + zoom:1; +} +.x-tip-anchor-bottom { + background-position: -9px 0; +} +.x-tip-anchor-right { + background-position: -18px 0; + width: 10px; +} +.x-tip-anchor-left { + background-position: -28px 0; + width: 10px; +} +.x-menu { + border: 1px solid; + z-index: 15000; + zoom: 1; + background: repeat-y; +} + +.x-menu a { + text-decoration: none !important; +} + +.ext-ie .x-menu { + zoom:1; + overflow:hidden; +} + +.x-menu-list{ + padding: 2px; + background:transparent; + border:0 none; + overflow:hidden; + overflow-y: hidden; +} + +.ext-strict .ext-ie .x-menu-list{ + position: relative; +} + +.x-menu li{ + line-height:100%; +} + +.x-menu li.x-menu-sep-li{ + font-size:1px; + line-height:1px; +} + +.x-menu-list-item{ + white-space: nowrap; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + display:block; + padding:1px; +} + +.x-menu-item-arrow{ + background:transparent no-repeat right; +} + +.x-menu-sep { + display:block; + font-size:1px; + line-height:1px; + margin: 2px 3px; + border-bottom:1px solid; + overflow:hidden; +} + +.x-menu-focus { + position:absolute; + left:-1px; + top:-1px; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + overflow:hidden; + display:block; +} + +a.x-menu-item { + cursor: pointer; + display: block; + line-height: 16px; + outline-color: -moz-use-text-color; + outline-style: none; + outline-width: 0; + padding: 3px 21px 3px 27px; + position: relative; + text-decoration: none; + white-space: nowrap; +} + +.x-menu-item-active { + background-repeat: repeat-x; + background-position: left bottom; + border-style:solid; + border-width: 1px 0; + margin:0 1px; + padding: 0; +} + +.x-menu-item-active a.x-menu-item { + border-style:solid; + border-width:0 1px; + margin:0 -1px; +} + +.x-menu-item-icon { + border: 0 none; + height: 16px; + padding: 0; + vertical-align: top; + width: 16px; + position: absolute; + left: 3px; + top: 3px; + margin: 0; + background-position:center; +} + +.ext-ie .x-menu-item-icon { + left: -24px; +} +.ext-strict .x-menu-item-icon { + left: 3px; +} + +.ext-ie6 .x-menu-item-icon { + left: -24px; +} + +.ext-ie .x-menu-item-icon { + vertical-align: middle; +} + +.x-menu-check-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-menu-group-item .x-menu-item-icon{ + background: transparent; +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-date-menu .x-menu-list{ + padding: 0; +} + +.x-menu-date-item{ + padding:0; +} + +.x-menu .x-color-palette, .x-menu .x-date-picker{ + margin-left: 26px; + margin-right:4px; +} + +.x-menu .x-date-picker{ + border:1px solid; + margin-top:2px; + margin-bottom:2px; +} + +.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{ + margin: 0; + border: 0 none; +} + +.x-date-menu { + padding:0 !important; +} + +.x-cycle-menu .x-menu-item-checked { + border:1px dotted !important; + padding:0; +} + +.x-menu .x-menu-scroller { + width: 100%; + background-repeat:no-repeat; + background-position:center; + height:8px; + line-height: 8px; + cursor:pointer; + margin: 0; + padding: 0; +} + +.x-menu .x-menu-scroller-active{ + height: 6px; + line-height: 6px; +} + +.x-menu-list-item-indent{ + padding-left: 27px; +} + + + +.x-box-tl { + background: transparent no-repeat 0 0; + zoom:1; +} + +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} + +.x-box-tr { + background: transparent no-repeat right -8px; +} + +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom:1; +} + +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} + +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom:1; +} + +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom:1; +} + +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +.x-box-br { + background: transparent no-repeat right -24px; +} + +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} + +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +} +#x-debug-browser .x-tree .x-tree-node a span { + padding-top:2px; + line-height:18px; +} + +#x-debug-browser .x-tool-toggle { + background-position:0 -75px; +} + +#x-debug-browser .x-tool-toggle-over { + background-position:-15px -75px; +} + +#x-debug-browser.x-panel-collapsed .x-tool-toggle { + background-position:0 -60px; +} + +#x-debug-browser.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -60px; +} +.x-combo-list { + border:1px solid; + zoom:1; + overflow:hidden; +} + +.x-combo-list-inner { + overflow:auto; + position:relative; + zoom:1; + overflow-x:hidden; +} + +.x-combo-list-hd { + border-bottom:1px solid; + padding:3px; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom:1px solid; +} + +.x-combo-list-item { + padding:2px; + border:1px solid; + white-space: nowrap; + overflow:hidden; + text-overflow: ellipsis; +} + +.x-combo-list .x-combo-selected{ + border:1px dotted !important; + cursor:pointer; +} + +.x-combo-list .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} +.x-panel { + border-style: solid; + border-width:0; +} + +.x-panel-header { + overflow:hidden; + zoom:1; + padding:5px 3px 4px 5px; + border:1px solid; + line-height: 15px; + background: transparent repeat-x 0 -1px; +} + +.x-panel-body { + border:1px solid; + border-top:0 none; + overflow:hidden; + position: relative; +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top:1px solid; + border-bottom: 0 none; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top:1px solid; +} + +.x-panel-header { + overflow:hidden; + zoom:1; +} + +.x-panel-tl .x-panel-header { + padding:5px 0 4px 0; + border:0 none; + background:transparent; +} + +.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon { + padding-left:20px !important; + background-repeat:no-repeat; + background-position:0 4px; + zoom:1; +} + +.x-panel-inline-icon { + width:16px; + height:16px; + background-repeat:no-repeat; + background-position:0 0; + vertical-align:middle; + margin-right:4px; + margin-top:-1px; + margin-bottom:-1px; +} + +.x-panel-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + + +.ext-strict .ext-ie7 .x-panel-tc { + overflow: visible; +} + +.x-panel-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + border-bottom:1px solid; +} + +.x-panel-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:6px; +} + +.x-panel-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + zoom:1; +} + +.x-panel-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-panel-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-panel-mc { + border:0 none; + padding:0; + margin:0; + padding-top:6px; +} + +.x-panel-mc .x-panel-body { + background:transparent; + border: 0 none; +} + +.x-panel-ml { + background: repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-panel-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-panel-bc, .x-panel-nofooter .x-window-bc { + height:6px; + font-size:0; + line-height:0; +} + +.x-panel-bwrap { + overflow:hidden; + zoom:1; + left:0; + top:0; +} +.x-panel-body { + overflow:hidden; + zoom:1; +} + +.x-panel-collapsed .x-resizable-handle{ + display:none; +} + +.ext-gecko .x-panel-animated div { + overflow:hidden !important; +} + + +.x-plain-body { + overflow:hidden; +} + +.x-plain-bbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-tbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-bwrap { + overflow:hidden; + zoom:1; +} + +.x-plain { + overflow:hidden; +} + + +.x-tool { + overflow:hidden; + width:15px; + height:15px; + float:right; + cursor:pointer; + background:transparent no-repeat; + margin-left:2px; +} + + +.x-tool-toggle { + background-position:0 -60px; +} + +.x-tool-toggle-over { + background-position:-15px -60px; +} + +.x-panel-collapsed .x-tool-toggle { + background-position:0 -75px; +} + +.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -75px; +} + + +.x-tool-close { + background-position:0 -0; +} + +.x-tool-close-over { + background-position:-15px 0; +} + +.x-tool-minimize { + background-position:0 -15px; +} + +.x-tool-minimize-over { + background-position:-15px -15px; +} + +.x-tool-maximize { + background-position:0 -30px; +} + +.x-tool-maximize-over { + background-position:-15px -30px; +} + +.x-tool-restore { + background-position:0 -45px; +} + +.x-tool-restore-over { + background-position:-15px -45px; +} + +.x-tool-gear { + background-position:0 -90px; +} + +.x-tool-gear-over { + background-position:-15px -90px; +} + +.x-tool-pin { + background-position:0 -135px; +} + +.x-tool-pin-over { + background-position:-15px -135px; +} + +.x-tool-unpin { + background-position:0 -150px; +} + +.x-tool-unpin-over { + background-position:-15px -150px; +} + +.x-tool-right { + background-position:0 -165px; +} + +.x-tool-right-over { + background-position:-15px -165px; +} + +.x-tool-left { + background-position:0 -180px; +} + +.x-tool-left-over { + background-position:-15px -180px; +} + +.x-tool-up { + background-position:0 -210px; +} + +.x-tool-up-over { + background-position:-15px -210px; +} + +.x-tool-down { + background-position:0 -195px; +} + +.x-tool-down-over { + background-position:-15px -195px; +} + +.x-tool-refresh { + background-position:0 -225px; +} + +.x-tool-refresh-over { + background-position:-15px -225px; +} + +.x-tool-minus { + background-position:0 -255px; +} + +.x-tool-minus-over { + background-position:-15px -255px; +} + +.x-tool-plus { + background-position:0 -240px; +} + +.x-tool-plus-over { + background-position:-15px -240px; +} + +.x-tool-search { + background-position:0 -270px; +} + +.x-tool-search-over { + background-position:-15px -270px; +} + +.x-tool-save { + background-position:0 -285px; +} + +.x-tool-save-over { + background-position:-15px -285px; +} + +.x-tool-help { + background-position:0 -300px; +} + +.x-tool-help-over { + background-position:-15px -300px; +} + +.x-tool-print { + background-position:0 -315px; +} + +.x-tool-print-over { + background-position:-15px -315px; +} + + +.x-panel-ghost { + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + opacity:.65; + -moz-opacity:.65; + filter:alpha(opacity=65); +} + +.x-panel-ghost ul { + margin:0; + padding:0; + overflow:hidden; + font-size:0; + line-height:0; + border:1px solid; + border-top:0 none; + display:block; +} + +.x-panel-ghost * { + cursor:move !important; +} + +.x-panel-dd-spacer { + border:2px dashed; +} + + +.x-panel-btns { + padding:5px; + overflow:hidden; +} + +.x-panel-btns-right .x-panel-fbar { + float:right; + clear:none; +} + +.x-panel-btns-left .x-panel-fbar { + clear:none; +} + +.x-panel-btns-center{ + text-align:center; +} + +.x-panel-btns-center .x-toolbar-ct { + margin:0 auto; + text-align:left; + width:auto; +} + +.x-panel-btns td.x-toolbar-cell{ + padding:3px; +} + +.x-panel-btns .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-panel-btns .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-panel-btns .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-panel-btns .x-btn-over .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-btns .x-btn-over .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-over .x-btn-center{ + background-position:0 -105px; +} + +.x-panel-btns .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-panel-btns .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + white-space: nowrap; +} + + +.x-panel-reset .x-panel-body html, +.x-panel-reset .x-panel-body address, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body body, +.x-panel-reset .x-panel-body dd, +.x-panel-reset .x-panel-body div, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dt, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body frame, frameset, +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body noframes, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body center, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body hr, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body pre { display: block } +.x-panel-reset .x-panel-body li { display: list-item } +.x-panel-reset .x-panel-body head { display: none } +.x-panel-reset .x-panel-body table { display: table } +.x-panel-reset .x-panel-body tr { display: table-row } +.x-panel-reset .x-panel-body thead { display: table-header-group } +.x-panel-reset .x-panel-body tbody { display: table-row-group } +.x-panel-reset .x-panel-body tfoot { display: table-footer-group } +.x-panel-reset .x-panel-body col { display: table-column } +.x-panel-reset .x-panel-body colgroup { display: table-column-group } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { display: table-cell } +.x-panel-reset .x-panel-body caption { display: table-caption } +.x-panel-reset .x-panel-body th { font-weight: bolder; text-align: center } +.x-panel-reset .x-panel-body caption { text-align: center } +.x-panel-reset .x-panel-body body { margin: 8px } +.x-panel-reset .x-panel-body h1 { font-size: 2em; margin: .67em 0 } +.x-panel-reset .x-panel-body h2 { font-size: 1.5em; margin: .75em 0 } +.x-panel-reset .x-panel-body h3 { font-size: 1.17em; margin: .83em 0 } +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu { margin: 1.12em 0 } +.x-panel-reset .x-panel-body h5 { font-size: .83em; margin: 1.5em 0 } +.x-panel-reset .x-panel-body h6 { font-size: .75em; margin: 1.67em 0 } +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body b, +.x-panel-reset .x-panel-body strong { font-weight: bolder } +.x-panel-reset .x-panel-body blockquote { margin-left: 40px; margin-right: 40px } +.x-panel-reset .x-panel-body i, +.x-panel-reset .x-panel-body cite, +.x-panel-reset .x-panel-body em, +.x-panel-reset .x-panel-body var, +.x-panel-reset .x-panel-body address { font-style: italic } +.x-panel-reset .x-panel-body pre, +.x-panel-reset .x-panel-body tt, +.x-panel-reset .x-panel-body code, +.x-panel-reset .x-panel-body kbd, +.x-panel-reset .x-panel-body samp { font-family: monospace } +.x-panel-reset .x-panel-body pre { white-space: pre } +.x-panel-reset .x-panel-body button, +.x-panel-reset .x-panel-body textarea, +.x-panel-reset .x-panel-body input, +.x-panel-reset .x-panel-body select { display: inline-block } +.x-panel-reset .x-panel-body big { font-size: 1.17em } +.x-panel-reset .x-panel-body small, +.x-panel-reset .x-panel-body sub, +.x-panel-reset .x-panel-body sup { font-size: .83em } +.x-panel-reset .x-panel-body sub { vertical-align: sub } +.x-panel-reset .x-panel-body sup { vertical-align: super } +.x-panel-reset .x-panel-body table { border-spacing: 2px; } +.x-panel-reset .x-panel-body thead, +.x-panel-reset .x-panel-body tbody, +.x-panel-reset .x-panel-body tfoot { vertical-align: middle } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { vertical-align: inherit } +.x-panel-reset .x-panel-body s, +.x-panel-reset .x-panel-body strike, +.x-panel-reset .x-panel-body del { text-decoration: line-through } +.x-panel-reset .x-panel-body hr { border: 1px inset } +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body dd { margin-left: 40px } +.x-panel-reset .x-panel-body ul, .x-panel-reset .x-panel-body menu, .x-panel-reset .x-panel-body dir { list-style-type: disc;} +.x-panel-reset .x-panel-body ol { list-style-type: decimal } +.x-panel-reset .x-panel-body ol ul, +.x-panel-reset .x-panel-body ul ol, +.x-panel-reset .x-panel-body ul ul, +.x-panel-reset .x-panel-body ol ol { margin-top: 0; margin-bottom: 0 } +.x-panel-reset .x-panel-body u, +.x-panel-reset .x-panel-body ins { text-decoration: underline } +.x-panel-reset .x-panel-body br:before { content: "\A" } +.x-panel-reset .x-panel-body :before, :after { white-space: pre-line } +.x-panel-reset .x-panel-body center { text-align: center } +.x-panel-reset .x-panel-body :link, :visited { text-decoration: underline } +.x-panel-reset .x-panel-body :focus { outline: thin dotted invert } + + +.x-panel-reset .x-panel-body BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override } +.x-panel-reset .x-panel-body BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override } + +.x-window { + zoom:1; +} + +.x-window .x-resizable-handle { + opacity:0; + -moz-opacity:0; + filter:alpha(opacity=0); +} + +.x-window-proxy { + border:1px solid; + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + display:none; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-window-header { + overflow:hidden; + zoom:1; +} + +.x-window-bwrap { + z-index:1; + position:relative; + zoom:1; + left:0;top:0; +} + +.x-window-tl .x-window-header { + padding:5px 0 4px 0; +} + +.x-window-header-text { + cursor:pointer; +} + +.x-window-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + zoom:1; +} + +.x-window-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + z-index:1; + position:relative; +} + +.x-window-tr { + background: transparent no-repeat right 0; + padding-right:6px; +} + +.x-window-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-window-bc .x-window-footer { + padding-bottom:6px; + zoom:1; + font-size:0; + line-height:0; +} + +.x-window-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-window-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-window-mc { + border:1px solid; + padding:0; + margin:0; +} + +.x-window-ml { + background: transparent repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-window-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-window-body { + overflow:hidden; +} + +.x-window-bwrap { + overflow:hidden; +} + +.x-window-maximized .x-window-bl, .x-window-maximized .x-window-br, + .x-window-maximized .x-window-ml, .x-window-maximized .x-window-mr, + .x-window-maximized .x-window-tl, .x-window-maximized .x-window-tr { + padding:0; +} + +.x-window-maximized .x-window-footer { + padding-bottom:0; +} + +.x-window-maximized .x-window-tc { + padding-left:3px; + padding-right:3px; +} + +.x-window-maximized .x-window-mc { + border-left:0 none; + border-right:0 none; +} + +.x-window-tbar .x-toolbar, .x-window-bbar .x-toolbar { + border-left:0 none; + border-right: 0 none; +} + +.x-window-bbar .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} + +.x-window-draggable, .x-window-draggable .x-window-header-text { + cursor:move; +} + +.x-window-maximized .x-window-draggable, .x-window-maximized .x-window-draggable .x-window-header-text { + cursor:default; +} + +.x-window-body { + background:transparent; +} + +.x-panel-ghost .x-window-tl { + border-bottom:1px solid; +} + +.x-panel-collapsed .x-window-tl { + border-bottom:1px solid; +} + +.x-window-maximized-ct { + overflow:hidden; +} + +.x-window-maximized .x-resizable-handle { + display:none; +} + +.x-window-sizing-ghost ul { + border:0 none !important; +} + +.x-dlg-focus{ + -moz-outline:0 none; + outline:0 none; + width:0; + height:0; + overflow:hidden; + position:absolute; + top:0; + left:0; +} + +.ext-webkit .x-dlg-focus{ + width: 1px; + height: 1px; +} + +.x-dlg-mask{ + z-index:10000; + display:none; + position:absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity:.50; + filter: alpha(opacity=50); +} + +body.ext-ie6.x-body-masked select { + visibility:hidden; +} + +body.ext-ie6.x-body-masked .x-window select { + visibility:visible; +} + +.x-window-plain .x-window-mc { + border: 1px solid; +} + +.x-window-plain .x-window-body { + border: 1px solid; + background:transparent !important; +} +.x-html-editor-wrap { + border:1px solid; +} + +.x-html-editor-tb .x-btn-text { + background:transparent no-repeat; +} + +.x-html-editor-tb .x-edit-bold, .x-menu-item .x-edit-bold { + background-position:0 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-italic, .x-menu-item .x-edit-italic { + background-position:-16px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-underline, .x-menu-item .x-edit-underline { + background-position:-32px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-forecolor, .x-menu-item .x-edit-forecolor { + background-position:-160px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-backcolor, .x-menu-item .x-edit-backcolor { + background-position:-176px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyleft, .x-menu-item .x-edit-justifyleft { + background-position:-112px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifycenter, .x-menu-item .x-edit-justifycenter { + background-position:-128px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyright, .x-menu-item .x-edit-justifyright { + background-position:-144px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertorderedlist, .x-menu-item .x-edit-insertorderedlist { + background-position:-80px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertunorderedlist, .x-menu-item .x-edit-insertunorderedlist { + background-position:-96px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-increasefontsize, .x-menu-item .x-edit-increasefontsize { + background-position:-48px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-decreasefontsize, .x-menu-item .x-edit-decreasefontsize { + background-position:-64px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-sourceedit, .x-menu-item .x-edit-sourceedit { + background-position:-192px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-createlink, .x-menu-item .x-edit-createlink { + background-position:-208px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding:5px; + padding-bottom:1px; +} + +.x-html-editor-tb .x-toolbar { + position:static !important; +} +.x-panel-noborder .x-panel-body-noborder { + border-width:0; +} + +.x-panel-noborder .x-panel-header-noborder { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-width:1px 0 0 0; + border-style:solid; +} + +.x-window-noborder .x-window-mc { + border-width:0; +} + +.x-window-plain .x-window-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-header-noborder { + border-width: 0 0 1px 0; +} + +.x-tab-panel-noborder .x-tab-panel-footer-noborder { + border-width: 1px 0 0 0; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-width: 1px 0 0 0; + border-style:solid; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} +.x-border-layout-ct { + position: relative; +} + +.x-border-panel { + position:absolute; + left:0; + top:0; +} + +.x-tool-collapse-south { + background-position:0 -195px; +} + +.x-tool-collapse-south-over { + background-position:-15px -195px; +} + +.x-tool-collapse-north { + background-position:0 -210px; +} + +.x-tool-collapse-north-over { + background-position:-15px -210px; +} + +.x-tool-collapse-west { + background-position:0 -180px; +} + +.x-tool-collapse-west-over { + background-position:-15px -180px; +} + +.x-tool-collapse-east { + background-position:0 -165px; +} + +.x-tool-collapse-east-over { + background-position:-15px -165px; +} + +.x-tool-expand-south { + background-position:0 -210px; +} + +.x-tool-expand-south-over { + background-position:-15px -210px; +} + +.x-tool-expand-north { + background-position:0 -195px; +} +.x-tool-expand-north-over { + background-position:-15px -195px; +} + +.x-tool-expand-west { + background-position:0 -165px; +} + +.x-tool-expand-west-over { + background-position:-15px -165px; +} + +.x-tool-expand-east { + background-position:0 -180px; +} + +.x-tool-expand-east-over { + background-position:-15px -180px; +} + +.x-tool-expand-north, .x-tool-expand-south { + float:right; + margin:3px; +} + +.x-tool-expand-east, .x-tool-expand-west { + float:none; + margin:3px auto; +} + +.x-accordion-hd .x-tool-toggle { + background-position:0 -255px; +} + +.x-accordion-hd .x-tool-toggle-over { + background-position:-15px -255px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle { + background-position:0 -240px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over { + background-position:-15px -240px; +} + +.x-accordion-hd { + padding-top:4px; + padding-bottom:3px; + border-top:0 none; + background: transparent repeat-x 0 -9px; +} + +.x-layout-collapsed{ + position:absolute; + left:-10000px; + top:-10000px; + visibility:hidden; + width:20px; + height:20px; + overflow:hidden; + border:1px solid; + z-index:20; +} + +.ext-border-box .x-layout-collapsed{ + width:22px; + height:22px; +} + +.x-layout-collapsed-over{ + cursor:pointer; +} + +.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{ + position:absolute; + top:0; + left:0; + width:20px; + height:20px; +} + + +.x-layout-split{ + position:absolute; + height:5px; + width:5px; + line-height:1px; + font-size:1px; + z-index:3; + background-color:transparent; +} + + +.ext-strict .ext-ie6 .x-layout-split{ + background-color: #fff !important; + filter: alpha(opacity=1); +} + +.x-layout-split-h{ + background-image:url(../images/default/s.gif); + background-position: left; +} + +.x-layout-split-v{ + background-image:url(../images/default/s.gif); + background-position: top; +} + +.x-column-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-column { + float:left; + padding:0; + margin:0; + overflow:hidden; + zoom:1; +} + +.x-column-inner { + overflow:hidden; + zoom:1; +} + + +.x-layout-mini { + position:absolute; + top:0; + left:0; + display:block; + width:5px; + height:35px; + cursor:pointer; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-layout-mini-over, .x-layout-collapsed-over .x-layout-mini{ + opacity:1; + -moz-opacity:1; + filter:none; +} + +.x-layout-split-west .x-layout-mini { + top:48%; +} + +.x-layout-split-east .x-layout-mini { + top:48%; +} + +.x-layout-split-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-split-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west .x-layout-mini { + top:48%; +} + +.x-layout-cmini-east .x-layout-mini { + top:48%; +} + +.x-layout-cmini-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west, .x-layout-cmini-east { + border:0 none; + width:5px !important; + padding:0; + background:transparent; +} + +.x-layout-cmini-north, .x-layout-cmini-south { + border:0 none; + height:5px !important; + padding:0; + background:transparent; +} + +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; +} + +.x-abs-layout-item { + position:absolute; + left:0; + top:0; +} + +.ext-ie input.x-abs-layout-item, .ext-ie textarea.x-abs-layout-item { + margin:0; +} + +.x-box-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-box-inner { + overflow:hidden; + zoom:1; + position:relative; + left:0; + top:0; +} + +.x-box-item { + position:absolute; + left:0; + top:0; +} +.x-progress-wrap { + border:1px solid; + overflow:hidden; +} + +.x-progress-inner { + height:18px; + background:repeat-x; + position:relative; +} + +.x-progress-bar { + height:18px; + float:left; + width:0; + background: repeat-x left center; + border-top:1px solid; + border-bottom:1px solid; + border-right:1px solid; +} + +.x-progress-text { + padding:1px 5px; + overflow:hidden; + position:absolute; + left:0; + text-align:center; +} + +.x-progress-text-back { + line-height:16px; +} + +.ext-ie .x-progress-text-back { + line-height:15px; +} +.x-list-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + height:22px; +} + +.x-list-header-inner div { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} + +.x-list-header-inner div em { + display:block; + border-left:1px solid; + padding:4px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; + line-height:14px; +} + +.x-list-body { + overflow:auto; + overflow-x:hidden; + overflow-y:auto; + zoom:1; + float: left; + width: 100%; +} + +.x-list-body dl { + zoom:1; +} + +.x-list-body dt { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + cursor:pointer; + zoom:1; +} + +.x-list-body dt em { + display:block; + padding:3px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +.x-list-resizer { + border-left:1px solid; + border-right:1px solid; + position:absolute; + left:0; + top:0; +} + +.x-list-header-inner em.sort-asc { + background: transparent no-repeat center 0; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + +.x-list-header-inner em.sort-desc { + background: transparent no-repeat center -23px; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + + +.x-slider { + zoom:1; +} + +.x-slider-inner { + position:relative; + left:0; + top:0; + overflow:visible; + zoom:1; +} + +.x-slider-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + display:block; + overflow:hidden; +} + + +.x-slider-horz { + padding-left:7px; + background:transparent no-repeat 0 -22px; +} + +.x-slider-horz .x-slider-end { + padding-right:7px; + zoom:1; + background:transparent no-repeat right -44px; +} + +.x-slider-horz .x-slider-inner { + background:transparent repeat-x 0 0; + height:22px; +} + +.x-slider-horz .x-slider-thumb { + width:14px; + height:15px; + position:absolute; + left:0; + top:3px; + background:transparent no-repeat 0 0; +} + +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} + +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} + + +.x-slider-vert { + padding-top:7px; + background:transparent no-repeat -44px 0; + width:22px; +} + +.x-slider-vert .x-slider-end { + padding-bottom:7px; + zoom:1; + background:transparent no-repeat -22px bottom; +} + +.x-slider-vert .x-slider-inner { + background:transparent repeat-y 0 0; +} + +.x-slider-vert .x-slider-thumb { + width:15px; + height:14px; + position:absolute; + left:3px; + bottom:0; + background:transparent no-repeat 0 0; +} + +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} + +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +} +.x-window-dlg .x-window-body { + border:0 none !important; + padding:5px 10px; + overflow:hidden !important; +} + +.x-window-dlg .x-window-mc { + border:0 none !important; +} + +.x-window-dlg .ext-mb-input { + margin-top:4px; + width:95%; +} + +.x-window-dlg .ext-mb-textarea { + margin-top:4px; +} + +.x-window-dlg .x-progress-wrap { + margin-top:4px; +} + +.ext-ie .x-window-dlg .x-progress-wrap { + margin-top:6px; +} + +.x-window-dlg .x-msg-box-wait { + background:transparent no-repeat left; + display:block; + width:300px; + padding-left:18px; + line-height:18px; +} + +.x-window-dlg .ext-mb-icon { + float:left; + width:47px; + height:32px; +} + +.ext-ie .x-window-dlg .ext-mb-icon { + width:44px; +} + +.x-window-dlg .x-dlg-icon .ext-mb-content{ + zoom: 1; margin-left: 47px; +} + +.x-window-dlg .ext-mb-info, .x-window-dlg .ext-mb-warning, .x-window-dlg .ext-mb-question, .x-window-dlg .ext-mb-error { + background:transparent no-repeat top left; +} + +.ext-gecko2 .ext-mb-fix-cursor { + overflow:auto; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/ext-all.css b/ehcp/extplorer/scripts/extjs3/resources/css/ext-all.css new file mode 100755 index 0000000..38dff3e --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/ext-all.css @@ -0,0 +1,6993 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';} + +.ext-forced-border-box, .ext-forced-border-box * { + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.ext-el-mask { + z-index: 100; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width: 100%; + height: 100%; + zoom: 1; +} + +.ext-el-mask-msg { + z-index: 20001; + position: absolute; + top: 0; + left: 0; + border:1px solid; + background:repeat-x 0 -16px; + padding:2px; +} + +.ext-el-mask-msg div { + padding:5px 10px 5px 10px; + border:1px solid; + cursor:wait; +} + +.ext-shim { + position:absolute; + visibility:hidden; + left:0; + top:0; + overflow:hidden; +} + +.ext-ie .ext-shim { + filter: alpha(opacity=0); +} + +.ext-ie6 .ext-shim { + margin-left: 5px; + margin-top: 3px; +} + +.x-mask-loading div { + padding:5px 10px 5px 25px; + background:no-repeat 5px 5px; + line-height:16px; +} + +/* class for hiding elements without using display:none */ +.x-hidden, .x-hide-offsets { + position:absolute !important; + left:-10000px; + top:-10000px; + visibility:hidden; +} + +.x-hide-display { + display:none !important; +} + +.x-hide-nosize, +.x-hide-nosize * /* Emulate display:none for children */ + { + height:0px!important; + width:0px!important; + visibility:hidden!important; + border:none!important; + zoom:1; +} + +.x-hide-visibility { + visibility:hidden !important; +} + +.x-masked { + overflow: hidden !important; +} +.x-masked-relative { + position: relative !important; +} + +.x-masked select, .x-masked object, .x-masked embed { + visibility: hidden; +} + +.x-layer { + visibility: hidden; +} + +.x-unselectable, .x-unselectable * { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-repaint { + zoom: 1; + background-color: transparent; + -moz-outline: none; + outline: none; +} + +.x-item-disabled { + cursor: default; + opacity: .6; + -moz-opacity: .6; + filter: alpha(opacity=60); +} + +.x-item-disabled * { + cursor: default !important; +} + +.x-form-radio-group .x-item-disabled { + filter: none; +} + +.x-splitbar-proxy { + position: absolute; + visibility: hidden; + z-index: 20001; + zoom: 1; + line-height: 1px; + font-size: 1px; + overflow: hidden; +} + +.x-splitbar-h, .x-splitbar-proxy-h { + cursor: e-resize; + cursor: col-resize; +} + +.x-splitbar-v, .x-splitbar-proxy-v { + cursor: s-resize; + cursor: row-resize; +} + +.x-color-palette { + width: 150px; + height: 92px; + cursor: pointer; +} + +.x-color-palette a { + border: 1px solid; + float: left; + padding: 2px; + text-decoration: none; + -moz-outline: 0 none; + outline: 0 none; + cursor: pointer; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border: 1px solid; +} + +.x-color-palette em { + display: block; + border: 1px solid; +} + +.x-color-palette em span { + cursor: pointer; + display: block; + height: 10px; + line-height: 10px; + width: 10px; +} + +.x-ie-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; + zoom:1; +} + +.x-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; +} + +.x-shadow * { + overflow: hidden; +} + +.x-shadow * { + padding: 0; + border: 0; + margin: 0; + clear: none; + zoom: 1; +} + +/* top bottom */ +.x-shadow .xstc, .x-shadow .xsbc { + height: 6px; + float: left; +} + +/* corners */ +.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr { + width: 6px; + height: 6px; + float: left; +} + +/* sides */ +.x-shadow .xsc { + width: 100%; +} + +.x-shadow .xsml, .x-shadow .xsmr { + width: 6px; + float: left; + height: 100%; +} + +.x-shadow .xsmc { + float: left; + height: 100%; + background-color: transparent; +} + +.x-shadow .xst, .x-shadow .xsb { + height: 6px; + overflow: hidden; + width: 100%; +} + +.x-shadow .xsml { + background: transparent repeat-y 0 0; +} + +.x-shadow .xsmr { + background: transparent repeat-y -6px 0; +} + +.x-shadow .xstl { + background: transparent no-repeat 0 0; +} + +.x-shadow .xstc { + background: transparent repeat-x 0 -30px; +} + +.x-shadow .xstr { + background: transparent repeat-x 0 -18px; +} + +.x-shadow .xsbl { + background: transparent no-repeat 0 -12px; +} + +.x-shadow .xsbc { + background: transparent repeat-x 0 -36px; +} + +.x-shadow .xsbr { + background: transparent repeat-x 0 -6px; +} + +.loading-indicator { + background: no-repeat left; + padding-left: 20px; + line-height: 16px; + margin: 3px; +} + +.x-text-resize { + position: absolute; + left: -1000px; + top: -1000px; + visibility: hidden; + zoom: 1; +} + +.x-drag-overlay { + width: 100%; + height: 100%; + display: none; + position: absolute; + left: 0; + top: 0; + background-image:url(../images/default/s.gif); + z-index: 20000; +} + +.x-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.x-spotlight { + z-index: 8999; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width:0; + height:0; + zoom: 1; +} + +#x-history-frame { + position:absolute; + top:-1px; + left:0; + width:1px; + height:1px; + visibility:hidden; +} + +#x-history-field { + position:absolute; + top:0; + left:-1px; + width:1px; + height:1px; + visibility:hidden; +} +.x-resizable-handle { + position:absolute; + z-index:100; + /* ie needs these */ + font-size:1px; + line-height:6px; + overflow:hidden; + filter:alpha(opacity=0); + opacity:0; + zoom:1; +} + +.x-resizable-handle-east{ + width:6px; + cursor:e-resize; + right:0; + top:0; + height:100%; +} + +.ext-ie .x-resizable-handle-east { + margin-right:-1px; /*IE rounding error*/ +} + +.x-resizable-handle-south{ + width:100%; + cursor:s-resize; + left:0; + bottom:0; + height:6px; +} + +.ext-ie .x-resizable-handle-south { + margin-bottom:-1px; /*IE rounding error*/ +} + +.x-resizable-handle-west{ + width:6px; + cursor:w-resize; + left:0; + top:0; + height:100%; +} + +.x-resizable-handle-north{ + width:100%; + cursor:n-resize; + left:0; + top:0; + height:6px; +} + +.x-resizable-handle-southeast{ + width:6px; + cursor:se-resize; + right:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northwest{ + width:6px; + cursor:nw-resize; + left:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northeast{ + width:6px; + cursor:ne-resize; + right:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-southwest{ + width:6px; + cursor:sw-resize; + left:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{ + filter:alpha(opacity=100); + opacity:1; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-position: left; +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-position: top; +} + +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-position: top left; +} + +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-position:bottom right; +} + +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-position: bottom left; +} + +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-position: top right; +} + +.x-resizable-proxy{ + border: 1px dashed; + position:absolute; + overflow:hidden; + display:none; + left:0; + top:0; + z-index:50000; +} + +.x-resizable-overlay{ + width:100%; + height:100%; + display:none; + position:absolute; + left:0; + top:0; + z-index:200000; + -moz-opacity: 0; + opacity:0; + filter: alpha(opacity=0); +} +.x-tab-panel { + overflow:hidden; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border: 1px solid; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header { + border: 1px solid; + padding-bottom: 2px; +} + +.x-tab-panel-footer { + border: 1px solid; + padding-top: 2px; +} + +.x-tab-strip-wrap { + width:100%; + overflow:hidden; + position:relative; + zoom:1; +} + +ul.x-tab-strip { + display:block; + width:5000px; + zoom:1; +} + +ul.x-tab-strip-top{ + padding-top: 1px; + background: repeat-x bottom; + border-bottom: 1px solid; +} + +ul.x-tab-strip-bottom{ + padding-bottom: 1px; + background: repeat-x top; + border-top: 1px solid; + border-bottom: 0 none; +} + +.x-tab-panel-header-plain .x-tab-strip-top { + background:transparent !important; + padding-top:0 !important; +} + +.x-tab-panel-header-plain { + background:transparent !important; + border-width:0 !important; + padding-bottom:0 !important; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border:1px solid; + height:2px; + font-size:1px; + line-height:1px; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer { + border-top: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-bottom: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-bottom { + background:transparent !important; + padding-bottom:0 !important; +} + +.x-tab-panel-footer-plain { + background:transparent !important; + border-width:0 !important; + padding-top:0 !important; +} + +.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer, +.ext-border-box .x-tab-panel-footer-plain .x-tab-strip-spacer { + height:3px; +} + +ul.x-tab-strip li { + float:left; + margin-left:2px; +} + +ul.x-tab-strip li.x-tab-edge { + float:left; + margin:0 !important; + padding:0 !important; + border:0 none !important; + font-size:1px !important; + line-height:1px !important; + overflow:hidden; + zoom:1; + background:transparent !important; + width:1px; +} + +.x-tab-strip a, .x-tab-strip span, .x-tab-strip em { + display:block; +} + +.x-tab-strip a { + text-decoration:none !important; + -moz-outline: none; + outline: none; + cursor:pointer; +} + +.x-tab-strip-inner { + overflow:hidden; + text-overflow: ellipsis; +} + +.x-tab-strip span.x-tab-strip-text { + white-space: nowrap; + cursor:pointer; + padding:4px 0; +} + +.x-tab-strip-top .x-tab-with-icon .x-tab-right { + padding-left:6px; +} + +.x-tab-strip .x-tab-with-icon span.x-tab-strip-text { + padding-left:20px; + background-position: 0 3px; + background-repeat: no-repeat; +} + +.x-tab-strip-active, .x-tab-strip-active a.x-tab-right { + cursor:default; +} + +.x-tab-strip-active span.x-tab-strip-text { + cursor:default; +} + +.x-tab-strip-disabled .x-tabs-text { + cursor:default; +} + +.x-tab-panel-body { + overflow:hidden; +} + +.x-tab-panel-bwrap { + overflow:hidden; +} + +.ext-ie .x-tab-strip .x-tab-right { + position:relative; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + margin-bottom:-1px; +} + +/* + * Horrible hack for IE8 in quirks mode + */ +.ext-ie8 .x-tab-strip li { + position: relative; +} +.ext-border-box .ext-ie8 .x-tab-strip-top .x-tab-right { + top: 1px; +} +.ext-ie8 .x-tab-strip-top { + padding-top: 1; +} +.ext-border-box .ext-ie8 .x-tab-strip-top { + padding-top: 0; +} +.ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + top:3px; +} +.ext-border-box .ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + top:4px; +} +.ext-ie8 .x-tab-strip-bottom .x-tab-right{ + top:0; +} + + +.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-bottom:5px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + margin-top:-1px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-top:5px; +} + +.x-tab-strip-top .x-tab-right { + background: transparent no-repeat 0 -51px; + padding-left:10px; +} + +.x-tab-strip-top .x-tab-left { + background: transparent no-repeat right -351px; + padding-right:10px; +} + +.x-tab-strip-top .x-tab-strip-inner { + background: transparent repeat-x 0 -201px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-right { + background-position:0 -101px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-left { + background-position:right -401px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner { + background-position:0 -251px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + background-position: 0 0; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-left { + background-position: right -301px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner { + background-position: 0 -151px; +} + +.x-tab-strip-bottom .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-left { + margin-right: 3px; + padding:0 10px; +} + +.x-tab-strip-bottom .x-tab-right { + padding:0; +} + +.x-tab-strip .x-tab-strip-close { + display:none; +} + +.x-tab-strip-closable { + position:relative; +} + +.x-tab-strip-closable .x-tab-left { + padding-right:19px; +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + opacity:.6; + -moz-opacity:.6; + background-repeat:no-repeat; + display:block; + width:11px; + height:11px; + position:absolute; + top:3px; + right:3px; + cursor:pointer; + z-index:2; +} + +.x-tab-strip .x-tab-strip-active a.x-tab-strip-close { + opacity:.8; + -moz-opacity:.8; +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + opacity:1; + -moz-opacity:1; +} + +.x-tab-panel-body { + border: 1px solid; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background: transparent no-repeat -18px 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + left:0; + top:0; + z-index:10; + cursor:pointer; +} +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background: transparent no-repeat 0 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + right:0; + top:0; + z-index:10; + cursor:pointer; +} + +.x-tab-scroller-right-over { + background-position: -18px 0; +} + +.x-tab-scroller-right-disabled { + background-position: 0 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scrolling-bottom .x-tab-scroller-left, .x-tab-scrolling-bottom .x-tab-scroller-right{ + margin-top: 1px; +} + +.x-tab-scrolling .x-tab-strip-wrap { + margin-left:18px; + margin-right:18px; +} + +.x-tab-scrolling { + position:relative; +} + +.x-tab-panel-bbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-tab-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +}/* all fields */ +.x-form-field{ + margin: 0 0 0 0; +} + +.ext-webkit *:focus{ + outline: none !important; +} + +/* ---- text fields ---- */ +.x-form-text, textarea.x-form-field{ + padding:1px 3px; + background:repeat-x 0 0; + border:1px solid; +} + +textarea.x-form-field { + padding:2px 3px; +} + +.x-form-text, .ext-ie .x-form-file { + height:22px; + line-height:18px; + vertical-align:middle; +} + +.ext-ie6 .x-form-text, .ext-ie7 .x-form-text { + margin:-1px 0; /* ie bogus margin bug */ + height:22px; /* ie quirks */ + line-height:18px; +} + +.x-quirks .ext-ie9 .x-form-text { + height: 22px; + padding-top: 3px; + padding-bottom: 0px; +} + +/* Ugly hacks for the bogus 1px margin bug in IE9 quirks */ +.x-quirks .ext-ie9 .x-input-wrapper .x-form-text, +.x-quirks .ext-ie9 .x-form-field-trigger-wrap .x-form-text { + margin-top: -1px; + margin-bottom: -1px; +} +.x-quirks .ext-ie9 .x-input-wrapper .x-form-element { + margin-bottom: -1px; +} + +.ext-ie6 .x-form-field-wrap .x-form-file-btn, .ext-ie7 .x-form-field-wrap .x-form-file-btn { + top: -1px; /* because of all these margin hacks, these buttons are off by one pixel in IE6,7 */ +} + +.ext-ie6 textarea.x-form-field, .ext-ie7 textarea.x-form-field { + margin:-1px 0; /* ie bogus margin bug */ +} + +.ext-strict .x-form-text { + height:18px; +} + +.ext-safari.ext-mac textarea.x-form-field { + margin-bottom:-2px; /* another bogus margin bug, safari/mac only */ +} + +/* +.ext-strict .ext-ie8 .x-form-text, .ext-strict .ext-ie8 textarea.x-form-field { + margin-bottom: 1px; +} +*/ + +.ext-gecko .x-form-text , .ext-ie8 .x-form-text { + padding-top:2px; /* FF won't center the text vertically */ + padding-bottom:0; +} + +.ext-ie6 .x-form-composite .x-form-text.x-box-item, .ext-ie7 .x-form-composite .x-form-text.x-box-item { + margin: 0 !important; /* clear ie bogus margin bug fix */ +} + +textarea { + resize: none; /* Disable browser resizable textarea */ +} + +/* select boxes */ +.x-form-select-one { + height:20px; + line-height:18px; + vertical-align:middle; + border: 1px solid; +} + +/* multi select boxes */ + +/* --- TODO --- */ + +/* 2.0.2 style */ +.x-form-check-wrap { + line-height:18px; + height: auto; +} + +.ext-ie .x-form-check-wrap input { + width:15px; + height:15px; +} + +.x-form-check-wrap input{ + vertical-align: bottom; +} + +.x-editor .x-form-check-wrap { + padding:3px; +} + +.x-editor .x-form-checkbox { + height:13px; +} + +.x-form-check-group-label { + border-bottom: 1px solid; + margin-bottom: 5px; + padding-left: 3px !important; + float: none !important; +} + +/* wrapped fields and triggers */ +.x-form-field-wrap .x-form-trigger{ + width:17px; + height:21px; + border:0; + background:transparent no-repeat 0 0; + cursor:pointer; + border-bottom: 1px solid; + position:absolute; + top:0; +} + +.x-form-field-wrap .x-form-date-trigger, .x-form-field-wrap .x-form-clear-trigger, .x-form-field-wrap .x-form-search-trigger{ + cursor:pointer; +} + +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{ + position:static; + top:auto; + vertical-align:top; +} + +.x-form-field-wrap { + position:relative; + left:0;top:0; + text-align: left; + zoom:1; + white-space: nowrap; +} + +.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-trigger { + right: 0; /* IE8 Strict mode trigger bug */ +} + +.x-form-field-wrap .x-form-trigger-over{ + background-position:-17px 0; +} + +.x-form-field-wrap .x-form-trigger-click{ + background-position:-34px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + background-position:-51px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-over{ + background-position:-68px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-click{ + background-position:-85px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-over{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-click{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-trigger-noedit{ + cursor:pointer; +} + +/* field focus style */ +.x-form-focus, textarea.x-form-focus{ + border: 1px solid; +} + +/* invalid fields */ +.x-form-invalid, textarea.x-form-invalid{ + background:repeat-x bottom; + border: 1px solid; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid{ + background:repeat-x bottom; +} + +/* editors */ +.x-editor { + visibility:hidden; + padding:0; + margin:0; +} + +.x-form-grow-sizer { + left: -10000px; + padding: 8px 3px; + position: absolute; + visibility:hidden; + top: -10000px; + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + zoom:1; +} + +.x-form-grow-sizer p { + margin:0 !important; + border:0 none !important; + padding:0 !important; +} + +/* Form Items CSS */ + +.x-form-item { + display:block; + margin-bottom:4px; + zoom:1; +} + +.x-form-item label.x-form-item-label { + display:block; + float:left; + width:100px; + padding:3px; + padding-left:0; + clear:left; + z-index:2; + position:relative; +} + +.x-form-element { + padding-left:105px; + position:relative; +} + +.x-form-invalid-msg { + padding:2px; + padding-left:18px; + background: transparent no-repeat 0 2px; + line-height:16px; + width:200px; +} + +.x-form-label-left label.x-form-item-label { + text-align:left; +} + +.x-form-label-right label.x-form-item-label { + text-align:right; +} + +.x-form-label-top .x-form-item label.x-form-item-label { + width:auto; + float:none; + clear:none; + display:inline; + margin-bottom:4px; + position:static; +} + +.x-form-label-top .x-form-element { + padding-left:0; + padding-top:4px; +} + +.x-form-label-top .x-form-item { + padding-bottom:4px; +} + +/* Editor small font for grid, toolbar and tree */ +.x-small-editor .x-form-text { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + margin-top:-1px !important; /* ie bogus margin bug */ + margin-bottom:-1px !important; + height:20px !important; /* ie quirks */ + line-height:16px !important; +} + +.ext-strict .x-small-editor .x-form-text { + height:16px !important; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + height:20px; + line-height:16px; +} + +.ext-border-box .x-small-editor .x-form-text { + height:20px; +} + +.x-small-editor .x-form-select-one { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.x-small-editor .x-form-num-field { + text-align:right; +} + +.x-small-editor .x-form-field-wrap .x-form-trigger{ + height:19px; +} + +.ext-webkit .x-small-editor .x-form-text{padding-top:3px;font-size:100%;} + +.ext-strict .ext-webkit .x-small-editor .x-form-text{ + height:14px !important; +} + +.x-form-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} +.x-form-clear-left { + clear:left; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.ext-ie6 .x-form-check-wrap input, .ext-border-box .x-form-check-wrap input{ + margin-top: 3px; +} + +.x-form-cb-label { + position: relative; + margin-left:4px; + top: 2px; +} + +.ext-ie .x-form-cb-label{ + top: 1px; +} + +.ext-ie6 .x-form-cb-label, .ext-border-box .x-form-cb-label{ + top: 3px; +} + +.x-form-display-field{ + padding-top: 2px; +} + +.ext-gecko .x-form-display-field, .ext-strict .ext-ie7 .x-form-display-field{ + padding-top: 1px; +} + +.ext-ie .x-form-display-field{ + padding-top: 3px; +} + +.ext-strict .ext-ie8 .x-form-display-field{ + padding-top: 0; +} + +.x-form-column { + float:left; + padding:0; + margin:0; + width:48%; + overflow:hidden; + zoom:1; +} + +/* buttons */ +.x-form .x-form-btns-ct .x-btn{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns td { + border:0; + padding:0; +} + +.x-form .x-form-btns-ct .x-form-btns-right table{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-left table{ + float:left; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-center{ + text-align:center; /*ie*/ +} + +.x-form .x-form-btns-ct .x-form-btns-center table{ + margin:0 auto; /*everyone else*/ +} + +.x-form .x-form-btns-ct table td.x-form-btn-td{ + padding:3px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-form-invalid-icon { + width:16px; + height:18px; + visibility:hidden; + position:absolute; + left:0; + top:0; + display:block; + background:transparent no-repeat 0 2px; +} + +/* fieldsets */ +.x-fieldset { + border:1px solid; + padding:10px; + margin-bottom:10px; + display:block; /* preserve margins in IE */ +} + +/* make top of checkbox/tools visible in webkit */ +.ext-webkit .x-fieldset-header { + padding-top: 1px; +} + +.ext-ie .x-fieldset legend { + margin-bottom:10px; +} + +.ext-strict .ext-ie9 .x-fieldset legend.x-fieldset-header { + padding-top: 1px; +} + +.ext-ie .x-fieldset { + padding-top: 0; + padding-bottom:10px; +} + +.x-fieldset legend .x-tool-toggle { + margin-right:3px; + margin-left:0; + float:left !important; +} + +.x-fieldset legend input { + margin-right:3px; + float:left !important; + height:13px; + width:13px; +} + +fieldset.x-panel-collapsed { + padding-bottom:0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent; + border-right-color: transparent; +} + +.ext-ie6 fieldset.x-panel-collapsed{ + padding-bottom:0 !important; + border-width: 1px 0 0 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +fieldset.x-panel-collapsed .x-fieldset-bwrap { + visibility:hidden; + position:absolute; + left:-1000px; + top:-1000px; +} + +.ext-ie .x-fieldset-bwrap { + zoom:1; +} + +.x-fieldset-noborder { + border:0px none transparent; +} + +.x-fieldset-noborder legend { + margin-left:-3px; +} + +/* IE legend positioning bug */ +.ext-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom:23px; +} +.ext-ie .x-fieldset-noborder legend span { + position: absolute; + left:16px; +} + +.ext-gecko .x-window-body .x-form-item { + -moz-outline: none; + outline: none; + overflow: auto; +} + +.ext-mac.ext-gecko .x-window-body .x-form-item { + overflow:hidden; +} + +.ext-gecko .x-form-item { + -moz-outline: none; + outline: none; +} + +.x-hide-label label.x-form-item-label { + display:none; +} + +.x-hide-label .x-form-element { + padding-left: 0 !important; +} + +.x-form-label-top .x-hide-label label.x-form-item-label{ + display: none; +} + +.x-fieldset { + overflow:hidden; +} + +.x-fieldset-bwrap { + overflow:hidden; + zoom:1; +} + +.x-fieldset-body { + overflow:hidden; +} +.x-btn{ + cursor:pointer; + white-space: nowrap; +} + +.x-btn button{ + border:0 none; + background-color:transparent; + padding-left:3px; + padding-right:3px; + cursor:pointer; + margin:0; + overflow:visible; + width:auto; + -moz-outline:0 none; + outline:0 none; +} + +* html .ext-ie .x-btn button { + width:1px; +} + +.ext-gecko .x-btn button, .ext-webkit .x-btn button { + padding-left:0; + padding-right:0; +} + +.ext-gecko .x-btn button::-moz-focus-inner { + padding:0; +} + +.ext-ie .x-btn button { + padding-top:2px; +} + +.x-btn td { + padding:0 !important; +} + +.x-btn-text { + cursor:pointer; + white-space: nowrap; + padding:0; +} + +/* icon placement and sizing styles */ + +/* Only text */ +.x-btn-noicon .x-btn-small .x-btn-text{ + height: 16px; +} + +.x-btn-noicon .x-btn-medium .x-btn-text{ + height: 24px; +} + +.x-btn-noicon .x-btn-large .x-btn-text{ + height: 32px; +} + +/* Only icons */ +.x-btn-icon .x-btn-text{ + background-position: center; + background-repeat: no-repeat; +} + +.x-btn-icon .x-btn-small .x-btn-text{ + height: 16px; + width: 16px; +} + +.x-btn-icon .x-btn-medium .x-btn-text{ + height: 24px; + width: 24px; +} + +.x-btn-icon .x-btn-large .x-btn-text{ + height: 32px; + width: 32px; +} + +/* Icons and text */ +/* left */ +.x-btn-text-icon .x-btn-icon-small-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:34px; + height:32px; +} + +/* top */ +.x-btn-text-icon .x-btn-icon-small-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:26px; +} + +.x-btn-text-icon .x-btn-icon-large-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:34px; +} + +/* right */ +.x-btn-text-icon .x-btn-icon-small-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:34px; + height:32px; +} + +/* bottom */ +.x-btn-text-icon .x-btn-icon-small-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:26px; +} + +.x-btn-text-icon .x-btn-icon-large-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:34px; +} + +/* background positioning */ +.x-btn-tr i, .x-btn-tl i, .x-btn-mr i, .x-btn-ml i, .x-btn-br i, .x-btn-bl i{ + font-size:1px; + line-height:1px; + width:3px; + display:block; + overflow:hidden; +} + +.x-btn-tr i, .x-btn-tl i, .x-btn-br i, .x-btn-bl i{ + height:3px; +} + +.x-btn-tl{ + width:3px; + height:3px; + background:no-repeat 0 0; +} +.x-btn-tr{ + width:3px; + height:3px; + background:no-repeat -3px 0; +} +.x-btn-tc{ + height:3px; + background:repeat-x 0 -6px; +} + +.x-btn-ml{ + width:3px; + background:no-repeat 0 -24px; +} +.x-btn-mr{ + width:3px; + background:no-repeat -3px -24px; +} + +.x-btn-mc{ + background:repeat-x 0 -1096px; + vertical-align: middle; + text-align:center; + padding:0 5px; + cursor:pointer; + white-space:nowrap; +} + +/* Fixes an issue with the button height */ +.ext-strict .ext-ie6 .x-btn-mc, .ext-strict .ext-ie7 .x-btn-mc { + height: 100%; +} + +.x-btn-bl{ + width:3px; + height:3px; + background:no-repeat 0 -3px; +} + +.x-btn-br{ + width:3px; + height:3px; + background:no-repeat -3px -3px; +} + +.x-btn-bc{ + height:3px; + background:repeat-x 0 -15px; +} + +.x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-btn-click .x-btn-tl, .x-btn-menu-active .x-btn-tl, .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-btn-click .x-btn-tr, .x-btn-menu-active .x-btn-tr, .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-btn-click .x-btn-tc, .x-btn-menu-active .x-btn-tc, .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-btn-click .x-btn-ml, .x-btn-menu-active .x-btn-ml, .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-btn-click .x-btn-mr, .x-btn-menu-active .x-btn-mr, .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-btn-click .x-btn-mc, .x-btn-menu-active .x-btn-mc, .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-btn-click .x-btn-bl, .x-btn-menu-active .x-btn-bl, .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-btn-click .x-btn-br, .x-btn-menu-active .x-btn-br, .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-btn-click .x-btn-bc, .x-btn-menu-active .x-btn-bc, .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-btn-disabled *{ + cursor:default !important; +} + + +/* With a menu arrow */ +/* right */ +.x-btn-mc em.x-btn-arrow { + display:block; + background:transparent no-repeat right center; + padding-right:10px; +} + +.x-btn-mc em.x-btn-split { + display:block; + background:transparent no-repeat right center; + padding-right:14px; +} + +/* bottom */ +.x-btn-mc em.x-btn-arrow-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + +.x-btn-mc em.x-btn-split-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + +/* height adjustment class */ +.x-btn-as-arrow .x-btn-mc em { + display:block; + background-color:transparent; + padding-bottom:14px; +} + +/* groups */ +.x-btn-group { + padding:1px; +} + +.x-btn-group-header { + padding:2px; + text-align:center; +} + +.x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + +.x-btn-group-tl { + background: transparent no-repeat 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:3px; +} + +.x-btn-group-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-btn-group-bc .x-panel-footer { + zoom:1; +} + +.x-btn-group-bl { + background: transparent no-repeat 0 bottom; + padding-left:3px; + zoom:1; +} + +.x-btn-group-br { + background: transparent no-repeat right bottom; + padding-right:3px; + zoom:1; +} + +.x-btn-group-mc { + border:0 none; + padding:1px 0 0 0; + margin:0; +} + +.x-btn-group-mc .x-btn-group-body { + background-color:transparent; + border: 0 none; +} + +.x-btn-group-ml { + background: transparent repeat-y 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-mr { + background: transparent repeat-y right 0; + padding-right:3px; + zoom:1; +} + +.x-btn-group-bc .x-btn-group-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-btn-group-bc { + height:3px; + font-size:0; + line-height:0; +} + +.x-btn-group-bwrap { + overflow:hidden; + zoom:1; +} + +.x-btn-group-body { + overflow:hidden; + zoom:1; +} + +.x-btn-group-notitle .x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + height:2px; +}.x-toolbar{ + border-style:solid; + border-width:0 0 1px 0; + display: block; + padding:2px; + background:repeat-x top left; + position:relative; + left:0; + top:0; + zoom:1; + overflow:hidden; +} + +.x-toolbar-left { + width: 100%; +} + +.x-toolbar .x-item-disabled .x-btn-icon { + opacity: .35; + -moz-opacity: .35; + filter: alpha(opacity=35); +} + +.x-toolbar td { + vertical-align:middle; +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + white-space: nowrap; +} + +.x-toolbar .x-item-disabled { + cursor:default; + opacity:.6; + -moz-opacity:.6; + filter:alpha(opacity=60); +} + +.x-toolbar .x-item-disabled * { + cursor:default; +} + +.x-toolbar .x-toolbar-cell { + vertical-align:middle; +} + +.x-toolbar .x-btn-tl, .x-toolbar .x-btn-tr, .x-toolbar .x-btn-tc, .x-toolbar .x-btn-ml, .x-toolbar .x-btn-mr, +.x-toolbar .x-btn-mc, .x-toolbar .x-btn-bl, .x-toolbar .x-btn-br, .x-toolbar .x-btn-bc +{ + background-position: 500px 500px; +} + +/* These rules are duplicated from button.css to give priority of x-toolbar rules above */ +.x-toolbar .x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-toolbar .x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-toolbar .x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-toolbar .x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-toolbar .x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-toolbar .x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-toolbar .x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-toolbar .x-btn-click .x-btn-tl, .x-toolbar .x-btn-menu-active .x-btn-tl, .x-toolbar .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-toolbar .x-btn-click .x-btn-tr, .x-toolbar .x-btn-menu-active .x-btn-tr, .x-toolbar .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-toolbar .x-btn-click .x-btn-tc, .x-toolbar .x-btn-menu-active .x-btn-tc, .x-toolbar .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-toolbar .x-btn-click .x-btn-ml, .x-toolbar .x-btn-menu-active .x-btn-ml, .x-toolbar .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mr, .x-toolbar .x-btn-menu-active .x-btn-mr, .x-toolbar .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mc, .x-toolbar .x-btn-menu-active .x-btn-mc, .x-toolbar .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-toolbar .x-btn-click .x-btn-bl, .x-toolbar .x-btn-menu-active .x-btn-bl, .x-toolbar .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-toolbar .x-btn-click .x-btn-br, .x-toolbar .x-btn-menu-active .x-btn-br, .x-toolbar .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-toolbar .x-btn-click .x-btn-bc, .x-toolbar .x-btn-menu-active .x-btn-bc, .x-toolbar .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-toolbar div.xtb-text{ + padding:2px 2px 0; + line-height:16px; + display:block; +} + +.x-toolbar .xtb-sep { + background-position: center; + background-repeat: no-repeat; + display: block; + font-size: 1px; + height: 16px; + width:4px; + overflow: hidden; + cursor:default; + margin: 0 2px 0; + border:0; +} + +.x-toolbar .xtb-spacer { + width:2px; +} + +/* Paging Toolbar */ +.x-tbar-page-number{ + width:30px; + height:14px; +} + +.ext-ie .x-tbar-page-number{ + margin-top: 2px; +} + +.x-paging-info { + position:absolute; + top:5px; + right: 8px; +} + +/* floating */ +.x-toolbar-ct { + width:100%; +} + +.x-toolbar-right td { + text-align: center; +} + +.x-panel-tbar, .x-panel-bbar, .x-window-tbar, .x-window-bbar, .x-tab-panel-tbar, .x-tab-panel-bbar, .x-plain-tbar, .x-plain-bbar { + overflow:hidden; + zoom:1; +} + +.x-toolbar-more .x-btn-small .x-btn-text{ + height: 16px; + width: 12px; +} + +.x-toolbar-more em.x-btn-arrow { + display:inline; + background-color:transparent; + padding-right:0; +} + +.x-toolbar-more .x-btn-mc em.x-btn-arrow { + background-image: none; +} + +div.x-toolbar-no-items { + color:gray !important; + padding:5px 10px !important; +} + +/* fix ie toolbar form items */ +.ext-border-box .x-toolbar-cell .x-form-text { + margin-bottom:-1px !important; +} + +.ext-border-box .x-toolbar-cell .x-form-field-wrap .x-form-text { + margin:0 !important; +} + +.ext-ie .x-toolbar-cell .x-form-field-wrap { + height:21px; +} + +.ext-ie .x-toolbar-cell .x-form-text { + position:relative; + top:-1px; +} + +.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-text, .ext-strict .ext-ie .x-toolbar-cell .x-form-text { + top: 0px; +} + +.x-toolbar-right td .x-form-field-trigger-wrap{ + text-align: left; +} + +.x-toolbar-cell .x-form-checkbox, .x-toolbar-cell .x-form-radio{ + margin-top: 5px; +} + +.x-toolbar-cell .x-form-cb-label{ + vertical-align: bottom; + top: 1px; +} + +.ext-ie .x-toolbar-cell .x-form-checkbox, .ext-ie .x-toolbar-cell .x-form-radio{ + margin-top: 4px; +} + +.ext-ie .x-toolbar-cell .x-form-cb-label{ + top: 0; +} +/* Grid3 styles */ +.x-grid3 { + position:relative; + overflow:hidden; +} + +.x-grid-panel .x-panel-body { + overflow:hidden !important; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border:1px solid; +} + +.x-grid3 table { + table-layout:fixed; +} + +.x-grid3-viewport{ + overflow:hidden; +} + +.x-grid3-hd-row td, .x-grid3-row td, .x-grid3-summary-row td{ + -moz-outline: none; + outline: none; + -moz-user-focus: normal; +} + +.x-grid3-row td, .x-grid3-summary-row td { + line-height:13px; + vertical-align: top; + padding-left:1px; + padding-right:1px; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-cell{ + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-row td { + line-height:15px; + vertical-align:middle; + border-left:1px solid; + border-right:1px solid; +} + +.x-grid3-hd-row .x-grid3-marker-hd { + padding:3px; +} + +.x-grid3-row .x-grid3-marker { + padding:3px; +} + +.x-grid3-cell-inner, .x-grid3-hd-inner{ + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding:3px 3px 3px 5px; + white-space: nowrap; +} + +/* ActionColumn, reduce padding to accommodate 16x16 icons in normal row height */ +.x-action-col-cell .x-grid3-cell-inner { + padding-top: 1px; + padding-bottom: 1px; +} + +.x-action-col-icon { + cursor: pointer; +} + +.x-grid3-hd-inner { + position:relative; + cursor:inherit; + padding:4px 3px 4px 5px; +} + +.x-grid3-row-body { + white-space:normal; +} + +.x-grid3-body-cell { + -moz-outline:0 none; + outline:0 none; +} + +/* IE Quirks to clip */ +.ext-ie .x-grid3-cell-inner, .ext-ie .x-grid3-hd-inner{ + width:100%; +} + +/* reverse above in strict mode */ +.ext-strict .x-grid3-cell-inner, .ext-strict .x-grid3-hd-inner{ + width:auto; +} + +.x-grid-row-loading { + background: no-repeat center center; +} + +.x-grid-page { + overflow:hidden; +} + +.x-grid3-row { + cursor: default; + border: 1px solid; + width:100%; +} + +.x-grid3-row-over { + border:1px solid; + background: repeat-x left top; +} + +.x-grid3-resize-proxy { + width:1px; + left:0; + cursor: e-resize; + cursor: col-resize; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-resize-marker { + width:1px; + left:0; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select:ignore; +} + +/* header styles */ +.x-grid3-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + padding:1px 0 0 0; +} + +.x-grid3-header-pop { + border-left:1px solid; + float:right; + clear:none; +} + +.x-grid3-header-pop-inner { + border-left:1px solid; + width:14px; + height:19px; + background: transparent no-repeat center center; +} + +.ext-ie .x-grid3-header-pop-inner { + width:15px; +} + +.ext-strict .x-grid3-header-pop-inner { + width:14px; +} + +.x-grid3-header-inner { + overflow:hidden; + zoom:1; + float:left; +} + +.x-grid3-header-offset { + padding-left:1px; + text-align: left; +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left:1px solid; + border-right:1px solid; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background: repeat-x left bottom; + +} + +.x-grid3-sort-icon{ + background-repeat: no-repeat; + display: none; + height: 4px; + width: 13px; + margin-left:3px; + vertical-align: middle; +} + +.sort-asc .x-grid3-sort-icon, .sort-desc .x-grid3-sort-icon { + display: inline; +} + +/* Header position fixes for IE strict mode */ +.ext-strict .ext-ie .x-grid3-header-inner, .ext-strict .ext-ie6 .x-grid3-hd { + position:relative; +} + +.ext-strict .ext-ie6 .x-grid3-hd-inner{ + position:static; +} + +/* Body Styles */ +.x-grid3-body { + zoom:1; +} + +.x-grid3-scroller { + overflow:auto; + zoom:1; + position:relative; +} + +.x-grid3-cell-text, .x-grid3-hd-text { + display: block; + padding: 3px 5px 3px 5px; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-grid3-split { + background-position: center; + background-repeat: no-repeat; + cursor: e-resize; + cursor: col-resize; + display: block; + font-size: 1px; + height: 16px; + overflow: hidden; + position: absolute; + top: 2px; + width: 6px; + z-index: 3; +} + +/* Column Reorder DD */ +.x-dd-drag-proxy .x-grid3-hd-inner{ + background: repeat-x left bottom; + width:120px; + padding:3px; + border:1px solid; + overflow:hidden; +} + +.col-move-top, .col-move-bottom{ + width:9px; + height:9px; + position:absolute; + top:0; + line-height:1px; + font-size:1px; + overflow:hidden; + visibility:hidden; + z-index:20000; + background:transparent no-repeat left top; +} + +/* Selection Styles */ +.x-grid3-row-selected { + border:1px dotted; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background: repeat-x 0 bottom !important; + vertical-align:middle !important; + padding:0; + border-top:1px solid; + border-bottom:none !important; + border-right:1px solid !important; + text-align:center; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + padding:0 4px; + text-align:center; +} + +/* dirty cells */ +.x-grid3-dirty-cell { + background: transparent no-repeat 0 0; +} + +/* Grid Toolbars */ +.x-grid3-topbar, .x-grid3-bottombar{ + overflow:hidden; + display:none; + zoom:1; + position:relative; +} + +.x-grid3-topbar .x-toolbar{ + border-right:0 none; +} + +.x-grid3-bottombar .x-toolbar{ + border-right:0 none; + border-bottom:0 none; + border-top:1px solid; +} + +/* Props Grid Styles */ +.x-props-grid .x-grid3-cell{ + padding:1px; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background:transparent repeat-y -16px !important; + padding-left:12px; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + padding:1px; + padding-right:0; + border:0 none; + border-right:1px solid; +} + +/* dd */ +.x-grid3-col-dd { + border:0 none; + padding:0; + background-color:transparent; +} + +.x-dd-drag-ghost .x-grid3-dd-wrap { + padding:1px 3px 3px 1px; +} + +.x-grid3-hd { + -moz-user-select:none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-btn { + display:none; + position:absolute; + width:14px; + background:no-repeat left center; + right:0; + top:0; + z-index:2; + cursor:pointer; +} + +.x-grid3-hd-over .x-grid3-hd-btn, .x-grid3-hd-menu-open .x-grid3-hd-btn { + display:block; +} + +a.x-grid3-hd-btn:hover { + background-position:-14px center; +} + +/* Expanders */ +.x-grid3-body .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-expander { + width:100%; + height:18px; + background-position:4px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row-collapsed .x-grid3-row-expander { + background-position:4px 2px; +} + +.x-grid3-row-expanded .x-grid3-row-expander { + background-position:-21px 2px; +} + +.x-grid3-row-collapsed .x-grid3-row-body { + display:none !important; +} + +.x-grid3-row-expanded .x-grid3-row-body { + display:block !important; +} + +/* Checkers */ +.x-grid3-body .x-grid3-td-checker { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner, .x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + width:100%; + height:18px; + background-position:2px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row .x-grid3-row-checker { + background-position:2px 2px; +} + +.x-grid3-row-selected .x-grid3-row-checker, .x-grid3-hd-checker-on .x-grid3-hd-checker,.x-grid3-row-checked .x-grid3-row-checker { + background-position:-23px 2px; +} + +.x-grid3-hd-checker { + background-position:2px 1px; +} + +.ext-border-box .x-grid3-hd-checker { + background-position:2px 3px; +} + +.x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position:-23px 1px; +} + +.ext-border-box .x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position:-23px 3px; +} + +/* Numberer */ +.x-grid3-body .x-grid3-td-numberer { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + padding:3px 5px 0 0 !important; + text-align:right; +} + +/* Row Icon */ + +.x-grid3-body .x-grid3-td-row-icon { + background:transparent repeat-y right; + vertical-align:top; + text-align:center; +} + +.x-grid3-body .x-grid3-td-row-icon .x-grid3-cell-inner { + padding:0 !important; + background-position:center center; + background-repeat:no-repeat; + width:16px; + height:16px; + margin-left:2px; + margin-top:3px; +} + +/* All specials */ +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner { + padding: 1px 0 0 0 !important; +} + +.x-grid3-check-col { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-check-col-on { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + +/* Grouping classes */ +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom: 2px solid; + cursor:pointer; + padding-top:6px; +} + +.x-grid-group-hd div.x-grid-group-title { + background:transparent no-repeat 3px 3px; + padding:4px 4px 4px 17px; +} + +.x-grid-group-collapsed .x-grid-group-body { + display:none; +} + +.ext-ie6 .x-grid3 .x-editor .x-form-text, .ext-ie7 .x-grid3 .x-editor .x-form-text { + position:relative; + top:-1px; +} + +.ext-ie .x-props-grid .x-editor .x-form-text { + position:static; + top:0; +} + +.x-grid-empty { + padding:10px; +} + +/* fix floating toolbar issue */ +.ext-ie7 .x-grid-panel .x-panel-bbar { + position:relative; +} + + +/* Reset position to static when Grid Panel has been framed */ +/* to resolve 'snapping' from top to bottom behavior. */ +/* @forumThread 86656 */ +.ext-ie7 .x-grid-panel .x-panel-mc .x-panel-bbar { + position: static; +} + +.ext-ie6 .x-grid3-header { + position: relative; +} + +/* Fix WebKit bug in Grids */ +.ext-webkit .x-grid-panel .x-panel-bwrap{ + -webkit-user-select:none; +} +.ext-webkit .x-tbar-page-number{ + -webkit-user-select:ignore; +} +/* end*/ + +/* column lines */ +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + padding-right:0; + border-right:1px solid; +} +.x-pivotgrid .x-grid3-header-offset table { + width: 100%; + border-collapse: collapse; +} + +.x-pivotgrid .x-grid3-header-offset table td { + padding: 4px 3px 4px 5px; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 11px; + line-height: 13px; + font-family: tahoma; +} + +.x-pivotgrid .x-grid3-row-headers { + display: block; + float: left; +} + +.x-pivotgrid .x-grid3-row-headers table { + height: 100%; + width: 100%; + border-collapse: collapse; +} + +.x-pivotgrid .x-grid3-row-headers table td { + height: 18px; + padding: 2px 7px 0 0; + text-align: right; + text-overflow: ellipsis; + font-size: 11px; + font-family: tahoma; +} + +.ext-gecko .x-pivotgrid .x-grid3-row-headers table td { + height: 21px; +} + +.x-grid3-header-title { + top: 0%; + left: 0%; + position: absolute; + text-align: center; + vertical-align: middle; + font-family: tahoma; + font-size: 11px; + padding: auto 1px; + display: table-cell; +} + +.x-grid3-header-title span { + position: absolute; + top: 50%; + left: 0%; + width: 100%; + margin-top: -6px; +}.x-dd-drag-proxy{ + position:absolute; + left:0; + top:0; + visibility:hidden; + z-index:15000; +} + +.x-dd-drag-ghost{ + -moz-opacity: 0.85; + opacity:.85; + filter: alpha(opacity=85); + border: 1px solid; + padding:3px; + padding-left:20px; + white-space:nowrap; +} + +.x-dd-drag-repair .x-dd-drag-ghost{ + -moz-opacity: 0.4; + opacity:.4; + filter: alpha(opacity=40); + border:0 none; + padding:0; + background-color:transparent; +} + +.x-dd-drag-repair .x-dd-drop-icon{ + visibility:hidden; +} + +.x-dd-drop-icon{ + position:absolute; + top:3px; + left:3px; + display:block; + width:16px; + height:16px; + background-color:transparent; + background-position: center; + background-repeat: no-repeat; + z-index:1; +} + +.x-view-selector { + position:absolute; + left:0; + top:0; + width:0; + border:1px dotted; + opacity: .5; + -moz-opacity: .5; + filter:alpha(opacity=50); + zoom:1; +}.ext-strict .ext-ie .x-tree .x-panel-bwrap{ + position:relative; + overflow:hidden; +} + +.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-repeat: no-repeat; +} + +.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-position:center; + background-repeat: no-repeat; +} + +.ext-ie .x-tree-node-indent img, .ext-ie .x-tree-node-icon, .ext-ie .x-tree-ec-icon { + vertical-align: middle !important; +} + +.ext-strict .ext-ie8 .x-tree-node-indent img, .ext-strict .ext-ie8 .x-tree-node-icon, .ext-strict .ext-ie8 .x-tree-ec-icon { + vertical-align: top !important; +} + +/* checkboxes */ + +input.x-tree-node-cb { + margin-left:1px; + height: 19px; + vertical-align: bottom; +} + +.ext-ie input.x-tree-node-cb { + margin-left:0; + margin-top: 1px; + width: 16px; + height: 16px; + vertical-align: middle; +} + +.ext-strict .ext-ie8 input.x-tree-node-cb{ + margin: 1px 1px; + height: 14px; + vertical-align: bottom; +} + +.ext-strict .ext-ie8 input.x-tree-node-cb + a{ + vertical-align: bottom; +} + +.ext-opera input.x-tree-node-cb { + height: 14px; + vertical-align: middle; +} + +.x-tree-noicon .x-tree-node-icon{ + width:0; height:0; +} + +/* No line styles */ +.x-tree-no-lines .x-tree-elbow{ + background-color:transparent; +} + +.x-tree-no-lines .x-tree-elbow-end{ + background-color:transparent; +} + +.x-tree-no-lines .x-tree-elbow-line{ + background-color:transparent; +} + +/* Arrows */ +.x-tree-arrows .x-tree-elbow{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-elbow-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-end{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-line{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{ + background-position:-48px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{ + background-position:-48px 0; +} + +.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + cursor:pointer; +} + +.ext-ie ul.x-tree-node-ct{ + font-size:0; + line-height:0; + zoom:1; +} + +.x-tree-node{ + white-space: nowrap; +} + +.x-tree-node-el { + line-height:18px; + cursor:pointer; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + text-decoration:none; + -khtml-user-select:none; + -moz-user-select:none; + -webkit-user-select:ignore; + -kthml-user-focus:normal; + -moz-user-focus:normal; + -moz-outline: 0 none; + outline:0 none; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + text-decoration:none; + padding:1px 3px 1px 2px; +} + +.x-tree-node .x-tree-node-disabled .x-tree-node-icon{ + -moz-opacity: 0.5; + opacity:.5; + filter: alpha(opacity=50); +} + +.x-tree-node .x-tree-node-inline-icon{ + background-color:transparent; +} + +.x-tree-node a:hover, .x-dd-drag-ghost a:hover{ + text-decoration:none; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom:1px dotted; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top:1px dotted; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{ + border-bottom:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{ + border-top:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom:2px solid; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top:2px solid; +} + +.x-tree-node .x-tree-drag-append a span{ + border:1px dotted; +} + +.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{ + display:none !important; +} + +/* Fix for ie rootVisible:false issue */ +.x-tree-root-ct { + zoom:1; +} +.x-date-picker { + border: 1px solid; + border-top:0 none; + position:relative; +} + +.x-date-picker a { + -moz-outline:0 none; + outline:0 none; +} + +.x-date-inner, .x-date-inner td, .x-date-inner th{ + border-collapse:separate; +} + +.x-date-middle,.x-date-left,.x-date-right { + background: repeat-x 0 -83px; + overflow:hidden; +} + +.x-date-middle .x-btn-tc,.x-date-middle .x-btn-tl,.x-date-middle .x-btn-tr, +.x-date-middle .x-btn-mc,.x-date-middle .x-btn-ml,.x-date-middle .x-btn-mr, +.x-date-middle .x-btn-bc,.x-date-middle .x-btn-bl,.x-date-middle .x-btn-br{ + background:transparent !important; + vertical-align:middle; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background:transparent no-repeat right 0; +} + +.x-date-right, .x-date-left { + width:18px; +} + +.x-date-right{ + text-align:right; +} + +.x-date-middle { + padding-top:2px; + padding-bottom:2px; + width:130px; /* FF3 */ +} + +.x-date-right a, .x-date-left a{ + display:block; + width:16px; + height:16px; + background-position: center; + background-repeat: no-repeat; + cursor:pointer; + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} + +.x-date-right a:hover, .x-date-left a:hover{ + -moz-opacity: 1; + opacity:1; + filter: alpha(opacity=100); +} + +.x-item-disabled .x-date-right a:hover, .x-item-disabled .x-date-left a:hover{ + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} + +.x-date-right a { + margin-right:2px; + text-decoration:none !important; +} + +.x-date-left a{ + margin-left:2px; + text-decoration:none !important; +} + +table.x-date-inner { + width: 100%; + table-layout:fixed; +} + +.ext-webkit table.x-date-inner{ + /* Fix for webkit browsers */ + width: 175px; +} + + +.x-date-inner th { + width:25px; +} + +.x-date-inner th { + background: repeat-x left top; + text-align:right !important; + border-bottom: 1px solid; + cursor:default; + padding:0; + border-collapse:separate; +} + +.x-date-inner th span { + display:block; + padding:2px; + padding-right:7px; +} + +.x-date-inner td { + border: 1px solid; + text-align:right; + padding:0; +} + +.x-date-inner a { + padding:2px 5px; + display:block; + text-decoration:none; + text-align:right; + zoom:1; +} + +.x-date-inner .x-date-active{ + cursor:pointer; + color:black; +} + +.x-date-inner .x-date-selected a{ + background: repeat-x left top; + border:1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-today a{ + border: 1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + text-decoration:none !important; +} + +.x-date-bottom { + padding:4px; + border-top: 1px solid; + background: repeat-x left top; +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + text-decoration:none !important; +} + +.x-item-disabled .x-date-inner a:hover{ + background: none; +} + +.x-date-inner .x-date-disabled a { + cursor:default; +} + +.x-date-menu .x-menu-item { + padding:1px 24px 1px 4px; + white-space: nowrap; +} + +.x-date-menu .x-menu-item .x-menu-item-icon { + width:10px; + height:10px; + margin-right:5px; + background-position:center -4px !important; +} + +.x-date-mp { + position:absolute; + left:0; + top:0; + display:none; +} + +.x-date-mp td { + padding:2px; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn { + border: 0 none; + text-align:center; + vertical-align: middle; + width:25%; +} + +.x-date-mp-ok { + margin-right:3px; +} + +.x-date-mp-btns button { + text-decoration:none; + text-align:center; + text-decoration:none !important; + border:1px solid; + padding:1px 3px 1px; + cursor:pointer; +} + +.x-date-mp-btns { + background: repeat-x left top; +} + +.x-date-mp-btns td { + border-top: 1px solid; + text-align:center; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + display:block; + padding:2px 4px; + text-decoration:none; + text-align:center; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + text-decoration:none; + cursor:pointer; +} + +td.x-date-mp-sel a { + padding:1px 3px; + background: repeat-x left top; + border:1px solid; +} + +.x-date-mp-ybtn a { + overflow:hidden; + width:15px; + height:15px; + cursor:pointer; + background:transparent no-repeat; + display:block; + margin:0 auto; +} + +.x-date-mp-ybtn a.x-date-mp-next { + background-position:0 -120px; +} + +.x-date-mp-ybtn a.x-date-mp-next:hover { + background-position:-15px -120px; +} + +.x-date-mp-ybtn a.x-date-mp-prev { + background-position:0 -105px; +} + +.x-date-mp-ybtn a.x-date-mp-prev:hover { + background-position:-15px -105px; +} + +.x-date-mp-ybtn { + text-align:center; +} + +td.x-date-mp-sep { + border-right:1px solid; +}.x-tip{ + position: absolute; + top: 0; + left:0; + visibility: hidden; + z-index: 20002; + border:0 none; +} + +.x-tip .x-tip-close{ + height: 15px; + float:right; + width: 15px; + margin:0 0 2px 2px; + cursor:pointer; + display:none; +} + +.x-tip .x-tip-tc { + background: transparent no-repeat 0 -62px; + padding-top:3px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tr { + background: transparent no-repeat right 0; + padding-right:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-bc { + background: transparent no-repeat 0 -121px; + height:3px; + overflow:hidden; +} + +.x-tip .x-tip-bl { + background: transparent no-repeat 0 -59px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-br { + background: transparent no-repeat right -59px; + padding-right:6px; + zoom:1; +} + +.x-tip .x-tip-mc { + border:0 none; +} + +.x-tip .x-tip-ml { + background: no-repeat 0 -124px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-mr { + background: transparent no-repeat right -124px; + padding-right:6px; + zoom:1; +} + +.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc { + font-size:0; + line-height:0; +} + +.ext-border-box .x-tip .x-tip-header, .ext-border-box .x-tip .x-tip-tc{ + line-height: 1px; +} + +.x-tip .x-tip-header-text { + padding:0; + margin:0 0 2px 0; +} + +.x-tip .x-tip-body { + margin:0 !important; + line-height:14px; + padding:0; +} + +.x-tip .x-tip-body .loading-indicator { + margin:0; +} + +.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text { + cursor:move; +} + +.x-form-invalid-tip .x-tip-tc { + background: repeat-x 0 -12px; + padding-top:6px; +} + +.x-form-invalid-tip .x-tip-bc { + background: repeat-x 0 -18px; + height:6px; +} + +.x-form-invalid-tip .x-tip-bl { + background: no-repeat 0 -6px; +} + +.x-form-invalid-tip .x-tip-br { + background: no-repeat right -6px; +} + +.x-form-invalid-tip .x-tip-body { + padding:2px; +} + +.x-form-invalid-tip .x-tip-body { + padding-left:24px; + background:transparent no-repeat 2px 2px; +} + +.x-tip-anchor { + position: absolute; + width: 9px; + height: 10px; + overflow:hidden; + background: transparent no-repeat 0 0; + zoom:1; +} +.x-tip-anchor-bottom { + background-position: -9px 0; +} +.x-tip-anchor-right { + background-position: -18px 0; + width: 10px; +} +.x-tip-anchor-left { + background-position: -28px 0; + width: 10px; +}.x-menu { + z-index: 15000; + zoom: 1; + background: repeat-y; +} + +.x-menu-floating{ + border: 1px solid; +} + +.x-menu a { + text-decoration: none !important; +} + +.ext-ie .x-menu { + zoom:1; + overflow:hidden; +} + +.x-menu-list{ + padding: 2px; + background-color:transparent; + border:0 none; + overflow:hidden; + overflow-y: hidden; +} + +.ext-strict .ext-ie .x-menu-list{ + position: relative; +} + +.x-menu li{ + line-height:100%; +} + +.x-menu li.x-menu-sep-li{ + font-size:1px; + line-height:1px; +} + +.x-menu-list-item{ + white-space: nowrap; + display:block; + padding:1px; +} + +.x-menu-item{ + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-menu-item-arrow{ + background:transparent no-repeat right; +} + +.x-menu-sep { + display:block; + font-size:1px; + line-height:1px; + margin: 2px 3px; + border-bottom:1px solid; + overflow:hidden; +} + +.x-menu-focus { + position:absolute; + left:-1px; + top:-1px; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + overflow:hidden; + display:block; +} + +a.x-menu-item { + cursor: pointer; + display: block; + line-height: 16px; + outline-color: -moz-use-text-color; + outline-style: none; + outline-width: 0; + padding: 3px 21px 3px 27px; + position: relative; + text-decoration: none; + white-space: nowrap; +} + +.x-menu-item-active { + background-repeat: repeat-x; + background-position: left bottom; + border-style:solid; + border-width: 1px 0; + margin:0 1px; + padding: 0; +} + +.x-menu-item-active a.x-menu-item { + border-style:solid; + border-width:0 1px; + margin:0 -1px; +} + +.x-menu-item-icon { + border: 0 none; + height: 16px; + padding: 0; + vertical-align: top; + width: 16px; + position: absolute; + left: 3px; + top: 3px; + margin: 0; + background-position:center; +} + +.ext-ie .x-menu-item-icon { + left: -24px; +} +.ext-strict .x-menu-item-icon { + left: 3px; +} + +.ext-ie6 .x-menu-item-icon { + left: -24px; +} + +.ext-ie .x-menu-item-icon { + vertical-align: middle; +} + +.x-menu-check-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-menu-group-item .x-menu-item-icon{ + background-color: transparent; +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-date-menu .x-menu-list{ + padding: 0; +} + +.x-menu-date-item{ + padding:0; +} + +.x-menu .x-color-palette, .x-menu .x-date-picker{ + margin-left: 26px; + margin-right:4px; +} + +.x-menu .x-date-picker{ + border:1px solid; + margin-top:2px; + margin-bottom:2px; +} + +.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{ + margin: 0; + border: 0 none; +} + +.x-date-menu { + padding:0 !important; +} + +/* + * fixes separator visibility problem in IE 6 + */ +.ext-strict .ext-ie6 .x-menu-sep-li { + padding: 3px 4px; +} +.ext-strict .ext-ie6 .x-menu-sep { + margin: 0; + height: 1px; +} + +/* + * Fixes an issue with "fat" separators in webkit + */ +.ext-webkit .x-menu-sep{ + height: 1px; +} + +/* + * Ugly mess to remove the white border under the picker + */ +.ext-ie .x-date-menu{ + height: 199px; +} + +.ext-strict .ext-ie .x-date-menu, .ext-border-box .ext-ie8 .x-date-menu{ + height: 197px; +} + +.ext-strict .ext-ie7 .x-date-menu{ + height: 195px; +} + +.ext-strict .ext-ie8 .x-date-menu{ + height: auto; +} + +.x-cycle-menu .x-menu-item-checked { + border:1px dotted !important; + padding:0; +} + +.x-menu .x-menu-scroller { + width: 100%; + background-repeat:no-repeat; + background-position:center; + height:8px; + line-height: 8px; + cursor:pointer; + margin: 0; + padding: 0; +} + +.x-menu .x-menu-scroller-active{ + height: 6px; + line-height: 6px; +} + +.x-menu-list-item-indent{ + padding-left: 27px; +}/* + Creates rounded, raised boxes like on the Ext website - the markup isn't pretty: +
+
+
+

YOUR TITLE HERE (optional)

+
YOUR CONTENT HERE
+
+
+
+ */ + +.x-box-tl { + background: transparent no-repeat 0 0; + zoom:1; +} + +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} + +.x-box-tr { + background: transparent no-repeat right -8px; +} + +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom:1; +} + +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} + +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom:1; +} + +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom:1; +} + +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +.x-box-br { + background: transparent no-repeat right -24px; +} + +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} + +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +}.x-combo-list { + border:1px solid; + zoom:1; + overflow:hidden; +} + +.x-combo-list-inner { + overflow:auto; + position:relative; /* for calculating scroll offsets */ + zoom:1; + overflow-x:hidden; +} + +.x-combo-list-hd { + border-bottom:1px solid; + padding:3px; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom:1px solid; +} + +.x-combo-list-item { + padding:2px; + border:1px solid; + white-space: nowrap; + overflow:hidden; + text-overflow: ellipsis; +} + +.x-combo-list .x-combo-selected{ + border:1px dotted !important; + cursor:pointer; +} + +.x-combo-list .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +}.x-panel { + border-style: solid; + border-width:0; +} + +.x-panel-header { + overflow:hidden; + zoom:1; + padding:5px 3px 4px 5px; + border:1px solid; + line-height: 15px; + background: transparent repeat-x 0 -1px; +} + +.x-panel-body { + border:1px solid; + border-top:0 none; + overflow:hidden; + position: relative; /* added for item scroll positioning */ +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top:1px solid; + border-bottom: 0 none; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top:1px solid; +} + +.x-panel-header { + overflow:hidden; + zoom:1; +} + +.x-panel-tl .x-panel-header { + padding:5px 0 4px 0; + border:0 none; + background:transparent no-repeat; +} + +.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon { + padding-left:20px !important; + background-repeat:no-repeat; + background-position:0 4px; + zoom:1; +} + +.x-panel-inline-icon { + width:16px; + height:16px; + background-repeat:no-repeat; + background-position:0 0; + vertical-align:middle; + margin-right:4px; + margin-top:-1px; + margin-bottom:-1px; +} + +.x-panel-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + +/* fix ie7 strict mode bug */ +.ext-strict .ext-ie7 .x-panel-tc { + overflow: visible; +} + +.x-panel-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + border-bottom:1px solid; +} + +.x-panel-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:6px; +} + +.x-panel-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + zoom:1; +} + +.x-panel-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-panel-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-panel-mc { + border:0 none; + padding:0; + margin:0; + padding-top:6px; +} + +.x-panel-mc .x-panel-body { + background-color:transparent; + border: 0 none; +} + +.x-panel-ml { + background: repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-panel-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-panel-bc, .x-panel-nofooter .x-window-bc { + height:6px; + font-size:0; + line-height:0; +} + +.x-panel-bwrap { + overflow:hidden; + zoom:1; + left:0; + top:0; +} +.x-panel-body { + overflow:hidden; + zoom:1; +} + +.x-panel-collapsed .x-resizable-handle{ + display:none; +} + +.ext-gecko .x-panel-animated div { + overflow:hidden !important; +} + +/* Plain */ +.x-plain-body { + overflow:hidden; +} + +.x-plain-bbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-tbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-bwrap { + overflow:hidden; + zoom:1; +} + +.x-plain { + overflow:hidden; +} + +/* Tools */ +.x-tool { + overflow:hidden; + width:15px; + height:15px; + float:right; + cursor:pointer; + background:transparent no-repeat; + margin-left:2px; +} + +/* expand / collapse tools */ +.x-tool-toggle { + background-position:0 -60px; +} + +.x-tool-toggle-over { + background-position:-15px -60px; +} + +.x-panel-collapsed .x-tool-toggle { + background-position:0 -75px; +} + +.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -75px; +} + + +.x-tool-close { + background-position:0 -0; +} + +.x-tool-close-over { + background-position:-15px 0; +} + +.x-tool-minimize { + background-position:0 -15px; +} + +.x-tool-minimize-over { + background-position:-15px -15px; +} + +.x-tool-maximize { + background-position:0 -30px; +} + +.x-tool-maximize-over { + background-position:-15px -30px; +} + +.x-tool-restore { + background-position:0 -45px; +} + +.x-tool-restore-over { + background-position:-15px -45px; +} + +.x-tool-gear { + background-position:0 -90px; +} + +.x-tool-gear-over { + background-position:-15px -90px; +} + +.x-tool-prev { + background-position:0 -105px; +} + +.x-tool-prev-over { + background-position:-15px -105px; +} + +.x-tool-next { + background-position:0 -120px; +} + +.x-tool-next-over { + background-position:-15px -120px; +} + +.x-tool-pin { + background-position:0 -135px; +} + +.x-tool-pin-over { + background-position:-15px -135px; +} + +.x-tool-unpin { + background-position:0 -150px; +} + +.x-tool-unpin-over { + background-position:-15px -150px; +} + +.x-tool-right { + background-position:0 -165px; +} + +.x-tool-right-over { + background-position:-15px -165px; +} + +.x-tool-left { + background-position:0 -180px; +} + +.x-tool-left-over { + background-position:-15px -180px; +} + +.x-tool-down { + background-position:0 -195px; +} + +.x-tool-down-over { + background-position:-15px -195px; +} + +.x-tool-up { + background-position:0 -210px; +} + +.x-tool-up-over { + background-position:-15px -210px; +} + +.x-tool-refresh { + background-position:0 -225px; +} + +.x-tool-refresh-over { + background-position:-15px -225px; +} + +.x-tool-plus { + background-position:0 -240px; +} + +.x-tool-plus-over { + background-position:-15px -240px; +} + +.x-tool-minus { + background-position:0 -255px; +} + +.x-tool-minus-over { + background-position:-15px -255px; +} + +.x-tool-search { + background-position:0 -270px; +} + +.x-tool-search-over { + background-position:-15px -270px; +} + +.x-tool-save { + background-position:0 -285px; +} + +.x-tool-save-over { + background-position:-15px -285px; +} + +.x-tool-help { + background-position:0 -300px; +} + +.x-tool-help-over { + background-position:-15px -300px; +} + +.x-tool-print { + background-position:0 -315px; +} + +.x-tool-print-over { + background-position:-15px -315px; +} + +.x-tool-expand { + background-position:0 -330px; +} + +.x-tool-expand-over { + background-position:-15px -330px; +} + +.x-tool-collapse { + background-position:0 -345px; +} + +.x-tool-collapse-over { + background-position:-15px -345px; +} + +.x-tool-resize { + background-position:0 -360px; +} + +.x-tool-resize-over { + background-position:-15px -360px; +} + +.x-tool-move { + background-position:0 -375px; +} + +.x-tool-move-over { + background-position:-15px -375px; +} + +/* Ghosting */ +.x-panel-ghost { + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + opacity:.65; + -moz-opacity:.65; + filter:alpha(opacity=65); +} + +.x-panel-ghost ul { + margin:0; + padding:0; + overflow:hidden; + font-size:0; + line-height:0; + border:1px solid; + border-top:0 none; + display:block; +} + +.x-panel-ghost * { + cursor:move !important; +} + +.x-panel-dd-spacer { + border:2px dashed; +} + +/* Buttons */ +.x-panel-btns { + padding:5px; + overflow:hidden; +} + +.x-panel-btns td.x-toolbar-cell{ + padding:3px; +} + +.x-panel-btns .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-panel-btns .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-panel-btns .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-panel-btns .x-btn-over .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-btns .x-btn-over .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-over .x-btn-center{ + background-position:0 -105px; +} + +.x-panel-btns .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-panel-btns .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + white-space: nowrap; +} +/** + * W3C Suggested Default style sheet for HTML 4 + * http://www.w3.org/TR/CSS21/sample.html + * + * Resets for Ext.Panel @cfg normal: true + */ +.x-panel-reset .x-panel-body html, +.x-panel-reset .x-panel-body address, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body body, +.x-panel-reset .x-panel-body dd, +.x-panel-reset .x-panel-body div, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dt, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body frame, frameset, +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body noframes, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body center, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body hr, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body pre { display: block } +.x-panel-reset .x-panel-body li { display: list-item } +.x-panel-reset .x-panel-body head { display: none } +.x-panel-reset .x-panel-body table { display: table } +.x-panel-reset .x-panel-body tr { display: table-row } +.x-panel-reset .x-panel-body thead { display: table-header-group } +.x-panel-reset .x-panel-body tbody { display: table-row-group } +.x-panel-reset .x-panel-body tfoot { display: table-footer-group } +.x-panel-reset .x-panel-body col { display: table-column } +.x-panel-reset .x-panel-body colgroup { display: table-column-group } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { display: table-cell } +.x-panel-reset .x-panel-body caption { display: table-caption } +.x-panel-reset .x-panel-body th { font-weight: bolder; text-align: center } +.x-panel-reset .x-panel-body caption { text-align: center } +.x-panel-reset .x-panel-body body { margin: 8px } +.x-panel-reset .x-panel-body h1 { font-size: 2em; margin: .67em 0 } +.x-panel-reset .x-panel-body h2 { font-size: 1.5em; margin: .75em 0 } +.x-panel-reset .x-panel-body h3 { font-size: 1.17em; margin: .83em 0 } +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu { margin: 1.12em 0 } +.x-panel-reset .x-panel-body h5 { font-size: .83em; margin: 1.5em 0 } +.x-panel-reset .x-panel-body h6 { font-size: .75em; margin: 1.67em 0 } +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body b, +.x-panel-reset .x-panel-body strong { font-weight: bolder } +.x-panel-reset .x-panel-body blockquote { margin-left: 40px; margin-right: 40px } +.x-panel-reset .x-panel-body i, +.x-panel-reset .x-panel-body cite, +.x-panel-reset .x-panel-body em, +.x-panel-reset .x-panel-body var, +.x-panel-reset .x-panel-body address { font-style: italic } +.x-panel-reset .x-panel-body pre, +.x-panel-reset .x-panel-body tt, +.x-panel-reset .x-panel-body code, +.x-panel-reset .x-panel-body kbd, +.x-panel-reset .x-panel-body samp { font-family: monospace } +.x-panel-reset .x-panel-body pre { white-space: pre } +.x-panel-reset .x-panel-body button, +.x-panel-reset .x-panel-body textarea, +.x-panel-reset .x-panel-body input, +.x-panel-reset .x-panel-body select { display: inline-block } +.x-panel-reset .x-panel-body big { font-size: 1.17em } +.x-panel-reset .x-panel-body small, +.x-panel-reset .x-panel-body sub, +.x-panel-reset .x-panel-body sup { font-size: .83em } +.x-panel-reset .x-panel-body sub { vertical-align: sub } +.x-panel-reset .x-panel-body sup { vertical-align: super } +.x-panel-reset .x-panel-body table { border-spacing: 2px; } +.x-panel-reset .x-panel-body thead, +.x-panel-reset .x-panel-body tbody, +.x-panel-reset .x-panel-body tfoot { vertical-align: middle } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { vertical-align: inherit } +.x-panel-reset .x-panel-body s, +.x-panel-reset .x-panel-body strike, +.x-panel-reset .x-panel-body del { text-decoration: line-through } +.x-panel-reset .x-panel-body hr { border: 1px inset } +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body dd { margin-left: 40px } +.x-panel-reset .x-panel-body ul, .x-panel-reset .x-panel-body menu, .x-panel-reset .x-panel-body dir { list-style-type: disc;} +.x-panel-reset .x-panel-body ol { list-style-type: decimal } +.x-panel-reset .x-panel-body ol ul, +.x-panel-reset .x-panel-body ul ol, +.x-panel-reset .x-panel-body ul ul, +.x-panel-reset .x-panel-body ol ol { margin-top: 0; margin-bottom: 0 } +.x-panel-reset .x-panel-body u, +.x-panel-reset .x-panel-body ins { text-decoration: underline } +.x-panel-reset .x-panel-body br:before { content: "\A" } +.x-panel-reset .x-panel-body :before, .x-panel-reset .x-panel-body :after { white-space: pre-line } +.x-panel-reset .x-panel-body center { text-align: center } +.x-panel-reset .x-panel-body :link, .x-panel-reset .x-panel-body :visited { text-decoration: underline } +.x-panel-reset .x-panel-body :focus { outline: invert dotted thin } + +/* Begin bidirectionality settings (do not change) */ +.x-panel-reset .x-panel-body BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override } +.x-panel-reset .x-panel-body BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override } +.x-window { + zoom:1; +} + +.x-window .x-window-handle { + opacity:0; + -moz-opacity:0; + filter:alpha(opacity=0); +} + +.x-window-proxy { + border:1px solid; + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + display:none; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-window-header { + overflow:hidden; + zoom:1; +} + +.x-window-bwrap { + z-index:1; + position:relative; + zoom:1; + left:0;top:0; +} + +.x-window-tl .x-window-header { + padding:5px 0 4px 0; +} + +.x-window-header-text { + cursor:pointer; +} + +.x-window-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + zoom:1; +} + +.x-window-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + z-index:1; + position:relative; +} + +.x-window-tr { + background: transparent no-repeat right 0; + padding-right:6px; +} + +.x-window-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-window-bc .x-window-footer { + padding-bottom:6px; + zoom:1; + font-size:0; + line-height:0; +} + +.x-window-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-window-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-window-mc { + border:1px solid; + padding:0; + margin:0; +} + +.x-window-ml { + background: transparent repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-window-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-window-body { + overflow:hidden; +} + +.x-window-bwrap { + overflow:hidden; +} + +.x-window-maximized .x-window-bl, .x-window-maximized .x-window-br, + .x-window-maximized .x-window-ml, .x-window-maximized .x-window-mr, + .x-window-maximized .x-window-tl, .x-window-maximized .x-window-tr { + padding:0; +} + +.x-window-maximized .x-window-footer { + padding-bottom:0; +} + +.x-window-maximized .x-window-tc { + padding-left:3px; + padding-right:3px; +} + +.x-window-maximized .x-window-mc { + border-left:0 none; + border-right:0 none; +} + +.x-window-tbar .x-toolbar, .x-window-bbar .x-toolbar { + border-left:0 none; + border-right: 0 none; +} + +.x-window-bbar .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} + +.x-window-draggable, .x-window-draggable .x-window-header-text { + cursor:move; +} + +.x-window-maximized .x-window-draggable, .x-window-maximized .x-window-draggable .x-window-header-text { + cursor:default; +} + +.x-window-body { + background-color:transparent; +} + +.x-panel-ghost .x-window-tl { + border-bottom:1px solid; +} + +.x-panel-collapsed .x-window-tl { + border-bottom:1px solid; +} + +.x-window-maximized-ct { + overflow:hidden; +} + +.x-window-maximized .x-window-handle { + display:none; +} + +.x-window-sizing-ghost ul { + border:0 none !important; +} + +.x-dlg-focus{ + -moz-outline:0 none; + outline:0 none; + width:0; + height:0; + overflow:hidden; + position:absolute; + top:0; + left:0; +} + +.ext-webkit .x-dlg-focus{ + width: 1px; + height: 1px; +} + +.x-dlg-mask{ + z-index:10000; + display:none; + position:absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity:.50; + filter: alpha(opacity=50); +} + +body.ext-ie6.x-body-masked select { + visibility:hidden; +} + +body.ext-ie6.x-body-masked .x-window select { + visibility:visible; +} + +.x-window-plain .x-window-mc { + border: 1px solid; +} + +.x-window-plain .x-window-body { + border: 1px solid; + background:transparent !important; +}.x-html-editor-wrap { + border:1px solid; +} + +.x-html-editor-tb .x-btn-text { + background:transparent no-repeat; +} + +.x-html-editor-tb .x-edit-bold, .x-menu-item img.x-edit-bold { + background-position:0 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-italic, .x-menu-item img.x-edit-italic { + background-position:-16px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-underline, .x-menu-item img.x-edit-underline { + background-position:-32px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-forecolor, .x-menu-item img.x-edit-forecolor { + background-position:-160px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-backcolor, .x-menu-item img.x-edit-backcolor { + background-position:-176px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyleft, .x-menu-item img.x-edit-justifyleft { + background-position:-112px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifycenter, .x-menu-item img.x-edit-justifycenter { + background-position:-128px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyright, .x-menu-item img.x-edit-justifyright { + background-position:-144px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertorderedlist, .x-menu-item img.x-edit-insertorderedlist { + background-position:-80px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertunorderedlist, .x-menu-item img.x-edit-insertunorderedlist { + background-position:-96px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-increasefontsize, .x-menu-item img.x-edit-increasefontsize { + background-position:-48px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-decreasefontsize, .x-menu-item img.x-edit-decreasefontsize { + background-position:-64px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-sourceedit, .x-menu-item img.x-edit-sourceedit { + background-position:-192px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-createlink, .x-menu-item img.x-edit-createlink { + background-position:-208px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding:5px; + padding-bottom:1px; +} + +.x-html-editor-tb .x-toolbar { + position:static !important; +}.x-panel-noborder .x-panel-body-noborder { + border-width:0; +} + +.x-panel-noborder .x-panel-header-noborder { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-width:1px 0 0 0; + border-style:solid; +} + +.x-window-noborder .x-window-mc { + border-width:0; +} + +.x-window-plain .x-window-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-header-noborder { + border-width: 0 0 1px 0; +} + +.x-tab-panel-noborder .x-tab-panel-footer-noborder { + border-width: 1px 0 0 0; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-width: 1px 0 0 0; + border-style:solid; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +}.x-border-layout-ct { + position: relative; +} + +.x-border-panel { + position:absolute; + left:0; + top:0; +} + +.x-tool-collapse-south { + background-position:0 -195px; +} + +.x-tool-collapse-south-over { + background-position:-15px -195px; +} + +.x-tool-collapse-north { + background-position:0 -210px; +} + +.x-tool-collapse-north-over { + background-position:-15px -210px; +} + +.x-tool-collapse-west { + background-position:0 -180px; +} + +.x-tool-collapse-west-over { + background-position:-15px -180px; +} + +.x-tool-collapse-east { + background-position:0 -165px; +} + +.x-tool-collapse-east-over { + background-position:-15px -165px; +} + +.x-tool-expand-south { + background-position:0 -210px; +} + +.x-tool-expand-south-over { + background-position:-15px -210px; +} + +.x-tool-expand-north { + background-position:0 -195px; +} +.x-tool-expand-north-over { + background-position:-15px -195px; +} + +.x-tool-expand-west { + background-position:0 -165px; +} + +.x-tool-expand-west-over { + background-position:-15px -165px; +} + +.x-tool-expand-east { + background-position:0 -180px; +} + +.x-tool-expand-east-over { + background-position:-15px -180px; +} + +.x-tool-expand-north, .x-tool-expand-south { + float:right; + margin:3px; +} + +.x-tool-expand-east, .x-tool-expand-west { + float:none; + margin:3px 2px; +} + +.x-accordion-hd .x-tool-toggle { + background-position:0 -255px; +} + +.x-accordion-hd .x-tool-toggle-over { + background-position:-15px -255px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle { + background-position:0 -240px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over { + background-position:-15px -240px; +} + +.x-accordion-hd { + padding-top:4px; + padding-bottom:3px; + border-top:0 none; + background: transparent repeat-x 0 -9px; +} + +.x-layout-collapsed{ + position:absolute; + left:-10000px; + top:-10000px; + visibility:hidden; + width:20px; + height:20px; + overflow:hidden; + border:1px solid; + z-index:20; +} + +.ext-border-box .x-layout-collapsed{ + width:22px; + height:22px; +} + +.x-layout-collapsed-over{ + cursor:pointer; +} + +.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{ + position:absolute; + top:0; + left:0; + width:20px; + height:20px; +} + + +.x-layout-split{ + position:absolute; + height:5px; + width:5px; + line-height:1px; + font-size:1px; + z-index:3; + background-color:transparent; +} + +/* IE6 strict won't drag w/out a color */ +.ext-strict .ext-ie6 .x-layout-split{ + background-color: #fff !important; + filter: alpha(opacity=1); +} + +.x-layout-split-h{ + background-image:url(../images/default/s.gif); + background-position: left; +} + +.x-layout-split-v{ + background-image:url(../images/default/s.gif); + background-position: top; +} + +.x-column-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-column { + float:left; + padding:0; + margin:0; + overflow:hidden; + zoom:1; +} + +.x-column-inner { + overflow:hidden; + zoom:1; +} + +/* mini mode */ +.x-layout-mini { + position:absolute; + top:0; + left:0; + display:block; + width:5px; + height:35px; + cursor:pointer; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-layout-mini-over, .x-layout-collapsed-over .x-layout-mini{ + opacity:1; + -moz-opacity:1; + filter:none; +} + +.x-layout-split-west .x-layout-mini { + top:48%; +} + +.x-layout-split-east .x-layout-mini { + top:48%; +} + +.x-layout-split-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-split-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west .x-layout-mini { + top:48%; +} + +.x-layout-cmini-east .x-layout-mini { + top:48%; +} + +.x-layout-cmini-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west, .x-layout-cmini-east { + border:0 none; + width:5px !important; + padding:0; + background-color:transparent; +} + +.x-layout-cmini-north, .x-layout-cmini-south { + border:0 none; + height:5px !important; + padding:0; + background-color:transparent; +} + +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; +} + +.x-abs-layout-item { + position:absolute; + left:0; + top:0; +} + +.ext-ie input.x-abs-layout-item, .ext-ie textarea.x-abs-layout-item { + margin:0; +} + +.x-box-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-box-inner { + overflow:hidden; + zoom:1; + position:relative; + left:0; + top:0; +} + +.x-box-item { + position:absolute; + left:0; + top:0; +}.x-progress-wrap { + border:1px solid; + overflow:hidden; +} + +.x-progress-inner { + height:18px; + background:repeat-x; + position:relative; +} + +.x-progress-bar { + height:18px; + float:left; + width:0; + background: repeat-x left center; + border-top:1px solid; + border-bottom:1px solid; + border-right:1px solid; +} + +.x-progress-text { + padding:1px 5px; + overflow:hidden; + position:absolute; + left:0; + text-align:center; +} + +.x-progress-text-back { + line-height:16px; +} + +.ext-ie .x-progress-text-back { + line-height:15px; +} + +.ext-strict .ext-ie7 .x-progress-text-back{ + width: 100%; +} +.x-list-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + height:22px; +} + +.x-list-header-inner div { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} + +.x-list-header-inner div em { + display:block; + border-left:1px solid; + padding:4px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; + line-height:14px; +} + +.x-list-body { + overflow:auto; + overflow-x:hidden; + overflow-y:auto; + zoom:1; + float: left; + width: 100%; +} + +.x-list-body dl { + zoom:1; +} + +.x-list-body dt { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + cursor:pointer; + zoom:1; +} + +.x-list-body dt em { + display:block; + padding:3px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +.x-list-resizer { + border-left:1px solid; + border-right:1px solid; + position:absolute; + left:0; + top:0; +} + +.x-list-header-inner em.sort-asc { + background: transparent no-repeat center 0; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + +.x-list-header-inner em.sort-desc { + background: transparent no-repeat center -23px; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + +/* Shared styles */ +.x-slider { + zoom:1; +} + +.x-slider-inner { + position:relative; + left:0; + top:0; + overflow:visible; + zoom:1; +} + +.x-slider-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + display:block; + overflow:hidden; +} + +/* Horizontal styles */ +.x-slider-horz { + padding-left:7px; + background:transparent no-repeat 0 -22px; +} + +.x-slider-horz .x-slider-end { + padding-right:7px; + zoom:1; + background:transparent no-repeat right -44px; +} + +.x-slider-horz .x-slider-inner { + background:transparent repeat-x 0 0; + height:22px; +} + +.x-slider-horz .x-slider-thumb { + width:14px; + height:15px; + position:absolute; + left:0; + top:3px; + background:transparent no-repeat 0 0; +} + +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} + +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} + +/* Vertical styles */ +.x-slider-vert { + padding-top:7px; + background:transparent no-repeat -44px 0; + width:22px; +} + +.x-slider-vert .x-slider-end { + padding-bottom:7px; + zoom:1; + background:transparent no-repeat -22px bottom; +} + +.x-slider-vert .x-slider-inner { + background:transparent repeat-y 0 0; +} + +.x-slider-vert .x-slider-thumb { + width:15px; + height:14px; + position:absolute; + left:3px; + bottom:0; + background:transparent no-repeat 0 0; +} + +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} + +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +}.x-window-dlg .x-window-body { + border:0 none !important; + padding:5px 10px; + overflow:hidden !important; +} + +.x-window-dlg .x-window-mc { + border:0 none !important; +} + +.x-window-dlg .ext-mb-input { + margin-top:4px; + width:95%; +} + +.x-window-dlg .ext-mb-textarea { + margin-top:4px; +} + +.x-window-dlg .x-progress-wrap { + margin-top:4px; +} + +.ext-ie .x-window-dlg .x-progress-wrap { + margin-top:6px; +} + +.x-window-dlg .x-msg-box-wait { + background:transparent no-repeat left; + display:block; + width:300px; + padding-left:18px; + line-height:18px; +} + +.x-window-dlg .ext-mb-icon { + float:left; + width:47px; + height:32px; +} + +.x-window-dlg .x-dlg-icon .ext-mb-content{ + zoom: 1; + margin-left: 47px; +} + +.x-window-dlg .ext-mb-info, .x-window-dlg .ext-mb-warning, .x-window-dlg .ext-mb-question, .x-window-dlg .ext-mb-error { + background:transparent no-repeat top left; +} + +.ext-gecko2 .ext-mb-fix-cursor { + overflow:auto; +}.ext-el-mask { + background-color: #ccc; +} + +.ext-el-mask-msg { + border-color:#6593cf; + background-color:#c3daf9; + background-image:url(../images/default/box/tb-blue.gif); +} +.ext-el-mask-msg div { + background-color: #eee; + border-color:#a3bad9; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-mask-loading div { + background-color:#fbfbfb; + background-image:url(../images/default/grid/loading.gif); +} + +.x-item-disabled { + color: gray; +} + +.x-item-disabled * { + color: gray !important; +} + +.x-splitbar-proxy { + background-color: #aaa; +} + +.x-color-palette a { + border-color:#fff; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border-color:#8bb8f3; + background-color: #deecfd; +} + +/* +.x-color-palette em:hover, .x-color-palette span:hover{ + background-color: #deecfd; +} +*/ + +.x-color-palette em { + border-color:#aca899; +} + +.x-ie-shadow { + background-color:#777; +} + +.x-shadow .xsmc { + background-image: url(../images/default/shadow-c.png); +} + +.x-shadow .xsml, .x-shadow .xsmr { + background-image: url(../images/default/shadow-lr.png); +} + +.x-shadow .xstl, .x-shadow .xstc, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{ + background-image: url(../images/default/shadow.png); +} + +.loading-indicator { + font-size: 11px; + background-image: url(../images/default/grid/loading.gif); +} + +.x-spotlight { + background-color: #ccc; +} +.x-tab-panel-header, .x-tab-panel-footer { + background-color: #deecfd; + border-color:#8db2e3; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border-color:#8db2e3; +} + +ul.x-tab-strip-top{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-bg.gif); + border-bottom-color:#8db2e3; +} + +ul.x-tab-strip-bottom{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-btm-bg.gif); + border-top-color:#8db2e3; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-color:#8db2e3; + background-color: #deecfd; +} + +.x-tab-strip span.x-tab-strip-text { + font:normal 11px tahoma,arial,helvetica; + color:#416aa3; +} + +.x-tab-strip-over span.x-tab-strip-text { + color:#15428b; +} + +.x-tab-strip-active span.x-tab-strip-text { + color:#15428b; + font-weight:bold; +} + +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} + +.x-tab-strip-top .x-tab-right, .x-tab-strip-top .x-tab-left, .x-tab-strip-top .x-tab-strip-inner{ + background-image: url(../images/default/tabs/tabs-sprite.gif); +} + +.x-tab-strip-bottom .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-inactive-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-inactive-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-over-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-over-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-left-bg.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-panel-body { + border-color:#8db2e3; + background-color:#fff; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background-image:url(../images/default/tabs/scroll-left.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background-image:url(../images/default/tabs/scroll-right.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-panel-bbar .x-toolbar, .x-tab-panel-tbar .x-toolbar { + border-color:#99bbe8; +}.x-form-field { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-text, textarea.x-form-field { + background-color:#fff; + background-image:url(../images/default/form/text-bg.gif); + border-color:#b5b8c8; +} + +.x-form-select-one { + background-color:#fff; + border-color:#b5b8c8; +} + +.x-form-check-group-label { + border-bottom: 1px solid #99bbe8; + color: #15428b; +} + +.x-editor .x-form-check-wrap { + background-color:#fff; +} + +.x-form-field-wrap .x-form-trigger { + background-image:url(../images/default/form/trigger.gif); + border-bottom-color:#b5b8c8; +} + +.x-form-field-wrap .x-form-date-trigger { + background-image: url(../images/default/form/date-trigger.gif); +} + +.x-form-field-wrap .x-form-clear-trigger { + background-image: url(../images/default/form/clear-trigger.gif); +} + +.x-form-field-wrap .x-form-search-trigger { + background-image: url(../images/default/form/search-trigger.gif); +} + +.x-trigger-wrap-focus .x-form-trigger { + border-bottom-color:#7eadd9; +} + +.x-item-disabled .x-form-trigger-over { + border-bottom-color:#b5b8c8; +} + +.x-item-disabled .x-form-trigger-click { + border-bottom-color:#b5b8c8; +} + +.x-form-focus, textarea.x-form-focus { + border-color:#7eadd9; +} + +.x-form-invalid, textarea.x-form-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.x-form-invalid.x-form-composite { + border: none; + background-image: none; +} + +.x-form-invalid.x-form-composite .x-form-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); +} + +.x-form-grow-sizer { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-item { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-invalid-msg { + color:#c0272b; + font:normal 11px tahoma, arial, helvetica, sans-serif; + background-image:url(../images/default/shared/warning.gif); +} + +.x-form-empty-field { + color:gray; +} + +.x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-webkit .x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-form-invalid-icon { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-fieldset { + border-color:#b5b8c8; +} + +.x-fieldset legend { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; +} +.x-btn{ + font:normal 11px tahoma, verdana, helvetica; +} + +.x-btn button{ + font:normal 11px arial,tahoma,verdana,helvetica; + color:#333; +} + +.x-btn em { + font-style:normal; + font-weight:normal; +} + +.x-btn-tl, .x-btn-tr, .x-btn-tc, .x-btn-ml, .x-btn-mr, .x-btn-mc, .x-btn-bl, .x-btn-br, .x-btn-bc{ + background-image:url(../images/default/button/btn.gif); +} + +.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{ + color:#000; +} + +.x-btn-disabled *{ + color:gray !important; +} + +.x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/button/arrow.gif); +} + +.x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-btn-mc em.x-btn-arrow-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-btn-click .x-btn-mc em.x-btn-split-bottom, .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-btn-pressed .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-btn-group-header { + color: #3e6aaa; +} + +.x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-tl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-tr { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-bc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-bl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-br { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-ml { + background-image: url(../images/default/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/default/button/group-lr.gif); +} + +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +}.x-toolbar{ + border-color:#a9bfd3; + background-color:#d0def0; + background-image:url(../images/default/toolbar/bg.gif); +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} + +.x-toolbar .x-item-disabled { + color:gray; +} + +.x-toolbar .x-item-disabled * { + color:gray; +} + +.x-toolbar .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split +{ + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-toolbar .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom +{ + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-toolbar .xtb-sep { + background-image: url(../images/default/grid/grid-blue-split.gif); +} + +.x-tbar-page-first{ + background-image: url(../images/default/grid/page-first.gif) !important; +} + +.x-tbar-loading{ + background-image: url(../images/default/grid/refresh.gif) !important; +} + +.x-tbar-page-last{ + background-image: url(../images/default/grid/page-last.gif) !important; +} + +.x-tbar-page-next{ + background-image: url(../images/default/grid/page-next.gif) !important; +} + +.x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev.gif) !important; +} + +.x-item-disabled .x-tbar-loading{ + background-image: url(../images/default/grid/refresh-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-first{ + background-image: url(../images/default/grid/page-first-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-last{ + background-image: url(../images/default/grid/page-last-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-next{ + background-image: url(../images/default/grid/page-next-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev-disabled.gif) !important; +} + +.x-paging-info { + color:#444; +} + +.x-toolbar-more-icon { + background-image: url(../images/default/toolbar/more.gif) !important; +}.x-resizable-handle { + background-color:#fff; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-image:url(../images/default/sizer/e-handle.gif); +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-image:url(../images/default/sizer/s-handle.gif); +} + +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background-image:url(../images/default/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-image:url(../images/default/sizer/se-handle.gif); +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-image:url(../images/default/sizer/nw-handle.gif); +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-image:url(../images/default/sizer/ne-handle.gif); +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-image:url(../images/default/sizer/sw-handle.gif); +} +.x-resizable-proxy{ + border-color:#3b5a82; +} +.x-resizable-overlay{ + background-color:#fff; +} +.x-grid3 { + background-color:#fff; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border-color:#99bbe8; +} + +.x-grid3-row td, .x-grid3-summary-row td{ + font:normal 11px/13px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row td { + font:normal 11px/15px arial, tahoma, helvetica, sans-serif; +} + + +.x-grid3-hd-row td { + border-left-color:#eee; + border-right-color:#d0d0d0; +} + +.x-grid-row-loading { + background-color: #fff; + background-image:url(../images/default/shared/loading-balls.gif); +} + +.x-grid3-row { + border-color:#ededed; + border-top-color:#fff; +} + +.x-grid3-row-alt{ + background-color:#fafafa; +} + +.x-grid3-row-over { + border-color:#ddd; + background-color:#efefef; + background-image:url(../images/default/grid/row-over.gif); +} + +.x-grid3-resize-proxy { + background-color:#777; +} + +.x-grid3-resize-marker { + background-color:#777; +} + +.x-grid3-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-grid3-header-pop { + border-left-color:#d0d0d0; +} + +.x-grid3-header-pop-inner { + border-left-color:#eee; + background-image:url(../images/default/grid/hd-pop.gif); +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left-color:#aaccf6; + border-right-color:#aaccf6; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + +} + +.sort-asc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_asc.gif); +} + +.sort-desc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_desc.gif); +} + +.x-grid3-cell-text, .x-grid3-hd-text { + color:#000; +} + +.x-grid3-split { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-grid3-hd-text { + color:#15428b; +} + +.x-dd-drag-proxy .x-grid3-hd-inner{ + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + border-color:#aaccf6; +} + +.col-move-top{ + background-image:url(../images/default/grid/col-move-top.gif); +} + +.col-move-bottom{ + background-image:url(../images/default/grid/col-move-bottom.gif); +} + +td.grid-hd-group-cell { + background: url(../images/default/grid/grid3-hrow.gif) repeat-x bottom; +} + +.x-grid3-row-selected { + background-color: #dfe8f6 !important; + background-image: none; + border-color:#a3bae9; +} + +.x-grid3-cell-selected{ + background-color: #b8cfee !important; + color:#000; +} + +.x-grid3-cell-selected span{ + color:#000 !important; +} + +.x-grid3-cell-selected .x-grid3-cell-text{ + color:#000; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background-color:#ebeadb !important; + background-image:url(../images/default/grid/grid-hrow.gif) !important; + color:#000; + border-top-color:#fff; + border-right-color:#6fa0df !important; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + color:#15428b !important; +} + +.x-grid3-dirty-cell { + background-image:url(../images/default/grid/dirty.gif); +} + +.x-grid3-topbar, .x-grid3-bottombar{ + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-bottombar .x-toolbar{ + border-top-color:#a9bfd3; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background-image:url(../images/default/grid/grid3-special-col-bg.gif) !important; + color:#000 !important; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + background-color:#fff !important; + border-right-color:#eee; +} + +.xg-hmenu-sort-asc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-asc.gif); +} + +.xg-hmenu-sort-desc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-desc.gif); +} + +.xg-hmenu-lock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-lock.gif); +} + +.xg-hmenu-unlock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +.x-grid3-hd-btn { + background-color:#c3daf9; + background-image:url(../images/default/grid/grid3-hd-btn.gif); +} + +.x-grid3-body .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-expander { + background-image:url(../images/default/grid/row-expand-sprite.gif); +} + +.x-grid3-body .x-grid3-td-checker { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + background-image:url(../images/default/grid/row-check-sprite.gif); +} + +.x-grid3-body .x-grid3-td-numberer { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + color:#444; +} + +.x-grid3-body .x-grid3-td-row-icon { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-sel-bg.gif); +} + +.x-grid3-check-col { + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-grid3-check-col-on { + background-image:url(../images/default/menu/checked.gif); +} + +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom-color:#99bbe8; +} + +.x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/default/grid/group-collapse.gif); + color:#3764a0; + font:bold 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/default/grid/group-expand.gif); +} + +.x-group-by-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-cols-icon { + background-image:url(../images/default/grid/columns.gif); +} + +.x-show-groups-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-grid-empty { + color:gray; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + border-right-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row-selected { + border-top-color:#a3bae9; +}.x-pivotgrid .x-grid3-header-offset table td { + background: url(../images/default/grid/grid3-hrow.gif) repeat-x 50% 100%; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #EEE; + border-right-color: #D0D0D0; +} + +.x-pivotgrid .x-grid3-row-headers { + background-color: #f9f9f9; +} + +.x-pivotgrid .x-grid3-row-headers table td { + background: #EEE url(../images/default/grid/grid3-rowheader.gif) repeat-x left top; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #EEE; + border-right-color: #D0D0D0; + border-bottom: 1px solid; + border-bottom-color: #D0D0D0; + height: 18px; +} +.x-dd-drag-ghost{ + color:#000; + font: normal 11px arial, helvetica, sans-serif; + border-color: #ddd #bbb #bbb #ddd; + background-color:#fff; +} + +.x-dd-drop-nodrop .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-no.gif); +} + +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} + +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} + +.x-view-selector { + background-color:#c3daf9; + border-color:#3399bb; +}.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/default/tree/folder-open.gif); +} + +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/default/tree/leaf.gif); +} + +.x-tree-node-collapsed .x-tree-node-icon{ + background-image:url(../images/default/tree/folder.gif); +} + +.x-tree-node-loading .x-tree-node-icon{ + background-image:url(../images/default/tree/loading.gif) !important; +} + +.x-tree-node .x-tree-node-inline-icon { + background-image: none; +} + +.x-tree-node-loading a span{ + font-style: italic; + color:#444444; +} + +.x-tree-lines .x-tree-elbow{ + background-image:url(../images/default/tree/elbow.gif); +} + +.x-tree-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus.gif); +} + +.x-tree-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus.gif); +} + +.x-tree-lines .x-tree-elbow-end{ + background-image:url(../images/default/tree/elbow-end.gif); +} + +.x-tree-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus.gif); +} + +.x-tree-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus.gif); +} + +.x-tree-lines .x-tree-elbow-line{ + background-image:url(../images/default/tree/elbow-line.gif); +} + +.x-tree-no-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus-nl.gif); +} + +.x-tree-arrows .x-tree-elbow-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-node{ + color:#000; + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + color:#000; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + color:#000; +} + +.x-tree-node .x-tree-node-disabled a span{ + color:gray !important; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom-color:#36c; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top-color:#36c; +} + +.x-tree-node .x-tree-drag-append a span{ + background-color:#ddd; + border-color:gray; +} + +.x-tree-node .x-tree-node-over { + background-color: #eee; +} + +.x-tree-node .x-tree-selected { + background-color: #d9e8fb; +} + +.x-tree-drop-ok-append .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-add.gif); +} + +.x-tree-drop-ok-above .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-over.gif); +} + +.x-tree-drop-ok-below .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-under.gif); +} + +.x-tree-drop-ok-between .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-between.gif); +}.x-date-picker { + border-color: #1b376c; + background-color:#fff; +} + +.x-date-middle,.x-date-left,.x-date-right { + background-image: url(../images/default/shared/hd-sprite.gif); + color:#fff; + font:bold 11px "sans serif", tahoma, verdana, helvetica; +} + +.x-date-middle .x-btn .x-btn-text { + color:#fff; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/toolbar/btn-arrow-light.gif); +} + +.x-date-right a { + background-image: url(../images/default/shared/right-btn.gif); +} + +.x-date-left a{ + background-image: url(../images/default/shared/left-btn.gif); +} + +.x-date-inner th { + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-bottom-color:#a3bad9; + font:normal 10px arial, helvetica,tahoma,sans-serif; + color:#233d6d; +} + +.x-date-inner td { + border-color:#fff; +} + +.x-date-inner a { + font:normal 11px arial, helvetica,tahoma,sans-serif; + color:#000; +} + +.x-date-inner .x-date-active{ + color:#000; +} + +.x-date-inner .x-date-selected a{ + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-inner .x-date-today a{ + border-color:darkred; +} + +.x-date-inner .x-date-selected span{ + font-weight:bold; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + color:#aaa; +} + +.x-date-bottom { + border-top-color:#a3bad9; + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + color:#000; + background-color:#ddecfe; +} + +.x-date-inner .x-date-disabled a { + background-color:#eee; + color:#bbb; +} + +.x-date-mmenu{ + background-color:#eee !important; +} + +.x-date-mmenu .x-menu-item { + font-size:10px; + color:#000; +} + +.x-date-mp { + background-color:#fff; +} + +.x-date-mp td { + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns button { + background-color:#083772; + color:#fff; + border-color: #3366cc #000055 #000055 #3366cc; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); +} + +.x-date-mp-btns td { + border-top-color: #c5d2df; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + color:#15428b; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + color:#15428b; + background-color: #ddecfe; +} + +td.x-date-mp-sel a { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-mp-ybtn a { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +td.x-date-mp-sep { + border-right-color:#c5d2df; +}.x-tip .x-tip-close{ + background-image: url(../images/default/qtip/close.gif); +} + +.x-tip .x-tip-tc, .x-tip .x-tip-tl, .x-tip .x-tip-tr, .x-tip .x-tip-bc, .x-tip .x-tip-bl, .x-tip .x-tip-br, .x-tip .x-tip-ml, .x-tip .x-tip-mr { + background-image: url(../images/default/qtip/tip-sprite.gif); +} + +.x-tip .x-tip-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; +} +.x-tip .x-tip-ml { + background-color: #fff; +} + +.x-tip .x-tip-header-text { + font: bold 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-tip .x-tip-body { + font: normal 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-form-invalid-tip .x-tip-tc, .x-form-invalid-tip .x-tip-tl, .x-form-invalid-tip .x-tip-tr, .x-form-invalid-tip .x-tip-bc, +.x-form-invalid-tip .x-tip-bl, .x-form-invalid-tip .x-tip-br, .x-form-invalid-tip .x-tip-ml, .x-form-invalid-tip .x-tip-mr +{ + background-image: url(../images/default/form/error-tip-corners.gif); +} + +.x-form-invalid-tip .x-tip-body { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-tip-anchor { + background-image:url(../images/default/qtip/tip-anchor-sprite.gif); +}.x-menu { + background-color:#f0f0f0; + background-image:url(../images/default/menu/menu.gif); +} + +.x-menu-floating{ + border-color:#718bb7; +} + +.x-menu-nosep { + background-image:none; +} + +.x-menu-list-item{ + font:normal 11px arial,tahoma,sans-serif; +} + +.x-menu-item-arrow{ + background-image:url(../images/default/menu/menu-parent.gif); +} + +.x-menu-sep { + background-color:#e0e0e0; + border-bottom-color:#fff; +} + +a.x-menu-item { + color:#222; +} + +.x-menu-item-active { + background-image: url(../images/default/menu/item-over.gif); + background-color: #dbecf4; + border-color:#aaccf6; +} + +.x-menu-item-active a.x-menu-item { + border-color:#aaccf6; +} + +.x-menu-check-item .x-menu-item-icon{ + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/default/menu/checked.gif); +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background-image:url(../images/default/menu/group-checked.gif); +} + +.x-menu-group-item .x-menu-item-icon{ + background-image:none; +} + +.x-menu-plain { + background-color:#f0f0f0 !important; + background-image: none; +} + +.x-date-menu, .x-color-menu{ + background-color: #fff !important; +} + +.x-menu .x-date-picker{ + border-color:#a3bad9; +} + +.x-cycle-menu .x-menu-item-checked { + border-color:#a3bae9 !important; + background-color:#def8f6; +} + +.x-menu-scroller-top { + background-image:url(../images/default/layout/mini-top.gif); +} + +.x-menu-scroller-bottom { + background-image:url(../images/default/layout/mini-bottom.gif); +} +.x-box-tl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-tc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-tr { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-ml { + background-image: url(../images/default/box/l.gif); +} + +.x-box-mc { + background-color: #eee; + background-image: url(../images/default/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 12px; +} + +.x-box-mc h3 { + font-size: 14px; + font-weight: bold; +} + +.x-box-mr { + background-image: url(../images/default/box/r.gif); +} + +.x-box-bl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-bc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-br { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(../images/default/box/corners-blue.gif); +} + +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(../images/default/box/tb-blue.gif); +} + +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +.x-box-blue .x-box-ml { + background-image: url(../images/default/box/l-blue.gif); +} + +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +}.x-combo-list { + border-color:#98c0f4; + background-color:#ddecfe; + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-combo-list-inner { + background-color:#fff; +} + +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; + background-image: url(../images/default/layout/panel-title-light-bg.gif); + border-bottom-color:#98c0f4; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom-color:#98c0f4; +} + +.x-combo-list-item { + border-color:#fff; +} + +.x-combo-list .x-combo-selected{ + border-color:#a3bae9 !important; + background-color:#dfe8f6; +} + +.x-combo-list .x-toolbar { + border-top-color:#98c0f4; +} + +.x-combo-list-small { + font:normal 11px tahoma, arial, helvetica, sans-serif; +}.x-panel { + border-color: #99bbe8; +} + +.x-panel-header { + color:#15428b; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; + border-color:#99bbe8; + background-image: url(../images/default/panel/white-top-bottom.gif); +} + +.x-panel-body { + border-color:#99bbe8; + background-color:#fff; +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border-color:#99bbe8; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top-color:#99bbe8; +} + +.x-panel-tl .x-panel-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-panel-tc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-tl, .x-panel-tr, .x-panel-bl, .x-panel-br{ + background-image: url(../images/default/panel/corners-sprite.gif); + border-bottom-color:#99bbe8; +} + +.x-panel-bc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-panel-ml { + background-color: #fff; + background-image:url(../images/default/panel/left-right.gif); +} + +.x-panel-mr { + background-image: url(../images/default/panel/left-right.gif); +} + +.x-tool { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +.x-panel-ghost { + background-color:#cbddf3; +} + +.x-panel-ghost ul { + border-color:#99bbe8; +} + +.x-panel-dd-spacer { + border-color:#99bbe8; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} +.x-window-proxy { + background-color:#c7dffc; + border-color:#99bbe8; +} + +.x-window-tl .x-window-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-window-tc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-tl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-tr { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-bc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-bl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-br { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-mc { + border-color:#99bbe8; + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-window-ml { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-mr { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-maximized .x-window-tc { + background-color:#fff; +} + +.x-window-bbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-ghost .x-window-tl { + border-bottom-color:#99bbe8; +} + +.x-panel-collapsed .x-window-tl { + border-bottom-color:#84a0c4; +} + +.x-dlg-mask{ + background-color:#ccc; +} + +.x-window-plain .x-window-mc { + background-color: #ccd9e8; + border-color: #a3bae9 #dfe8f6 #dfe8f6 #a3bae9; +} + +.x-window-plain .x-window-body { + border-color: #dfe8f6 #a3bae9 #a3bae9 #dfe8f6; +} + +body.x-body-masked .x-window-plain .x-window-mc { + background-color: #ccd9e8; +}.x-html-editor-wrap { + border-color:#a9bfd3; + background-color:#fff; +} +.x-html-editor-tb .x-btn-text { + background-image:url(../images/default/editor/tb-sprite.gif); +}.x-panel-noborder .x-panel-header-noborder { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +}.x-border-layout-ct { + background-color:#dfe8f6; +} + +.x-accordion-hd { + color:#222; + font-weight:normal; + background-image: url(../images/default/panel/light-hd.gif); +} + +.x-layout-collapsed{ + background-color:#d2e0f2; + border-color:#98c0f4; +} + +.x-layout-collapsed-over{ + background-color:#d9e8fb; +} + +.x-layout-split-west .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-split-east .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-split-north .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-layout-split-south .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-west .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} + +.x-layout-cmini-east .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} + +.x-layout-cmini-north .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-south .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +}.x-progress-wrap { + border-color:#6593cf; +} + +.x-progress-inner { + background-color:#e0e8f3; + background-image:url(../images/default/qtip/bg.gif); +} + +.x-progress-bar { + background-color:#9cbfee; + background-image:url(../images/default/progress/progress-bg.gif); + border-top-color:#d1e4fd; + border-bottom-color:#7fa9e4; + border-right-color:#7fa9e4; +} + +.x-progress-text { + font-size:11px; + font-weight:bold; + color:#fff; +} + +.x-progress-text-back { + color:#396095; +}.x-list-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-list-header-inner div em { + border-left-color:#ddd; + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-body dt em { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-over { + background-color:#eee; +} + +.x-list-selected { + background-color:#dfe8f6; +} + +.x-list-resizer { + border-left-color:#555; + border-right-color:#555; +} + +.x-list-header-inner em.sort-asc, .x-list-header-inner em.sort-desc { + background-image:url(../images/default/grid/sort-hd.gif); + border-color: #99bbe8; +}.x-slider-horz, .x-slider-horz .x-slider-end, .x-slider-horz .x-slider-inner { + background-image:url(../images/default/slider/slider-bg.png); +} + +.x-slider-horz .x-slider-thumb { + background-image:url(../images/default/slider/slider-thumb.png); +} + +.x-slider-vert, .x-slider-vert .x-slider-end, .x-slider-vert .x-slider-inner { + background-image:url(../images/default/slider/slider-v-bg.png); +} + +.x-slider-vert .x-slider-thumb { + background-image:url(../images/default/slider/slider-v-thumb.png); +}.x-window-dlg .ext-mb-text, +.x-window-dlg .x-window-header-text { + font-size:12px; +} + +.x-window-dlg .ext-mb-textarea { + font:normal 12px tahoma,arial,helvetica,sans-serif; +} + +.x-window-dlg .x-msg-box-wait { + background-image:url(../images/default/grid/loading.gif); +} + +.x-window-dlg .ext-mb-info { + background-image:url(../images/default/window/icon-info.gif); +} + +.x-window-dlg .ext-mb-warning { + background-image:url(../images/default/window/icon-warning.gif); +} + +.x-window-dlg .ext-mb-question { + background-image:url(../images/default/window/icon-question.gif); +} + +.x-window-dlg .ext-mb-error { + background-image:url(../images/default/window/icon-error.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/index.html b/ehcp/extplorer/scripts/extjs3/resources/css/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/reset-min.css b/ehcp/extplorer/scripts/extjs3/resources/css/reset-min.css new file mode 100755 index 0000000..9edea6d --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/reset-min.css @@ -0,0 +1,7 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/borders.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/borders.css new file mode 100755 index 0000000..755cb2a --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/borders.css @@ -0,0 +1,54 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-panel-noborder .x-panel-body-noborder { + border-width:0; +} + +.x-panel-noborder .x-panel-header-noborder { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-width:1px 0 0 0; + border-style:solid; +} + +.x-window-noborder .x-window-mc { + border-width:0; +} + +.x-window-plain .x-window-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-header-noborder { + border-width: 0 0 1px 0; +} + +.x-tab-panel-noborder .x-tab-panel-footer-noborder { + border-width: 1px 0 0 0; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-width: 1px 0 0 0; + border-style:solid; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/box.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/box.css new file mode 100755 index 0000000..f658304 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/box.css @@ -0,0 +1,80 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +/* + Creates rounded, raised boxes like on the Ext website - the markup isn't pretty: +
+
+
+

YOUR TITLE HERE (optional)

+
YOUR CONTENT HERE
+
+
+
+ */ + +.x-box-tl { + background: transparent no-repeat 0 0; + zoom:1; +} + +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} + +.x-box-tr { + background: transparent no-repeat right -8px; +} + +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom:1; +} + +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} + +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom:1; +} + +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom:1; +} + +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +.x-box-br { + background: transparent no-repeat right -24px; +} + +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} + +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/button.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/button.css new file mode 100755 index 0000000..95bb9f9 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/button.css @@ -0,0 +1,445 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-btn{ + cursor:pointer; + white-space: nowrap; +} + +.x-btn button{ + border:0 none; + background-color:transparent; + padding-left:3px; + padding-right:3px; + cursor:pointer; + margin:0; + overflow:visible; + width:auto; + -moz-outline:0 none; + outline:0 none; +} + +* html .ext-ie .x-btn button { + width:1px; +} + +.ext-gecko .x-btn button, .ext-webkit .x-btn button { + padding-left:0; + padding-right:0; +} + +.ext-gecko .x-btn button::-moz-focus-inner { + padding:0; +} + +.ext-ie .x-btn button { + padding-top:2px; +} + +.x-btn td { + padding:0 !important; +} + +.x-btn-text { + cursor:pointer; + white-space: nowrap; + padding:0; +} + +/* icon placement and sizing styles */ + +/* Only text */ +.x-btn-noicon .x-btn-small .x-btn-text{ + height: 16px; +} + +.x-btn-noicon .x-btn-medium .x-btn-text{ + height: 24px; +} + +.x-btn-noicon .x-btn-large .x-btn-text{ + height: 32px; +} + +/* Only icons */ +.x-btn-icon .x-btn-text{ + background-position: center; + background-repeat: no-repeat; +} + +.x-btn-icon .x-btn-small .x-btn-text{ + height: 16px; + width: 16px; +} + +.x-btn-icon .x-btn-medium .x-btn-text{ + height: 24px; + width: 24px; +} + +.x-btn-icon .x-btn-large .x-btn-text{ + height: 32px; + width: 32px; +} + +/* Icons and text */ +/* left */ +.x-btn-text-icon .x-btn-icon-small-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:34px; + height:32px; +} + +/* top */ +.x-btn-text-icon .x-btn-icon-small-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:26px; +} + +.x-btn-text-icon .x-btn-icon-large-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:34px; +} + +/* right */ +.x-btn-text-icon .x-btn-icon-small-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:18px; + height:16px; +} + +.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:26px; + height:24px; +} + +.x-btn-text-icon .x-btn-icon-large-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:34px; + height:32px; +} + +/* bottom */ +.x-btn-text-icon .x-btn-icon-small-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:18px; +} + +.x-btn-text-icon .x-btn-icon-medium-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:26px; +} + +.x-btn-text-icon .x-btn-icon-large-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:34px; +} + +/* background positioning */ +.x-btn-tr i, .x-btn-tl i, .x-btn-mr i, .x-btn-ml i, .x-btn-br i, .x-btn-bl i{ + font-size:1px; + line-height:1px; + width:3px; + display:block; + overflow:hidden; +} + +.x-btn-tr i, .x-btn-tl i, .x-btn-br i, .x-btn-bl i{ + height:3px; +} + +.x-btn-tl{ + width:3px; + height:3px; + background:no-repeat 0 0; +} +.x-btn-tr{ + width:3px; + height:3px; + background:no-repeat -3px 0; +} +.x-btn-tc{ + height:3px; + background:repeat-x 0 -6px; +} + +.x-btn-ml{ + width:3px; + background:no-repeat 0 -24px; +} +.x-btn-mr{ + width:3px; + background:no-repeat -3px -24px; +} + +.x-btn-mc{ + background:repeat-x 0 -1096px; + vertical-align: middle; + text-align:center; + padding:0 5px; + cursor:pointer; + white-space:nowrap; +} + +/* Fixes an issue with the button height */ +.ext-strict .ext-ie6 .x-btn-mc, .ext-strict .ext-ie7 .x-btn-mc { + height: 100%; +} + +.x-btn-bl{ + width:3px; + height:3px; + background:no-repeat 0 -3px; +} + +.x-btn-br{ + width:3px; + height:3px; + background:no-repeat -3px -3px; +} + +.x-btn-bc{ + height:3px; + background:repeat-x 0 -15px; +} + +.x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-btn-click .x-btn-tl, .x-btn-menu-active .x-btn-tl, .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-btn-click .x-btn-tr, .x-btn-menu-active .x-btn-tr, .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-btn-click .x-btn-tc, .x-btn-menu-active .x-btn-tc, .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-btn-click .x-btn-ml, .x-btn-menu-active .x-btn-ml, .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-btn-click .x-btn-mr, .x-btn-menu-active .x-btn-mr, .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-btn-click .x-btn-mc, .x-btn-menu-active .x-btn-mc, .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-btn-click .x-btn-bl, .x-btn-menu-active .x-btn-bl, .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-btn-click .x-btn-br, .x-btn-menu-active .x-btn-br, .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-btn-click .x-btn-bc, .x-btn-menu-active .x-btn-bc, .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-btn-disabled *{ + cursor:default !important; +} + + +/* With a menu arrow */ +/* right */ +.x-btn-mc em.x-btn-arrow { + display:block; + background:transparent no-repeat right center; + padding-right:10px; +} + +.x-btn-mc em.x-btn-split { + display:block; + background:transparent no-repeat right center; + padding-right:14px; +} + +/* bottom */ +.x-btn-mc em.x-btn-arrow-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + +.x-btn-mc em.x-btn-split-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} + +/* height adjustment class */ +.x-btn-as-arrow .x-btn-mc em { + display:block; + background-color:transparent; + padding-bottom:14px; +} + +/* groups */ +.x-btn-group { + padding:1px; +} + +.x-btn-group-header { + padding:2px; + text-align:center; +} + +.x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + +.x-btn-group-tl { + background: transparent no-repeat 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:3px; +} + +.x-btn-group-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-btn-group-bc .x-panel-footer { + zoom:1; +} + +.x-btn-group-bl { + background: transparent no-repeat 0 bottom; + padding-left:3px; + zoom:1; +} + +.x-btn-group-br { + background: transparent no-repeat right bottom; + padding-right:3px; + zoom:1; +} + +.x-btn-group-mc { + border:0 none; + padding:1px 0 0 0; + margin:0; +} + +.x-btn-group-mc .x-btn-group-body { + background-color:transparent; + border: 0 none; +} + +.x-btn-group-ml { + background: transparent repeat-y 0 0; + padding-left:3px; + zoom:1; +} + +.x-btn-group-mr { + background: transparent repeat-y right 0; + padding-right:3px; + zoom:1; +} + +.x-btn-group-bc .x-btn-group-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-btn-group-bc { + height:3px; + font-size:0; + line-height:0; +} + +.x-btn-group-bwrap { + overflow:hidden; + zoom:1; +} + +.x-btn-group-body { + overflow:hidden; + zoom:1; +} + +.x-btn-group-notitle .x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + height:2px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/combo.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/combo.css new file mode 100755 index 0000000..3edeea1 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/combo.css @@ -0,0 +1,45 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-combo-list { + border:1px solid; + zoom:1; + overflow:hidden; +} + +.x-combo-list-inner { + overflow:auto; + position:relative; /* for calculating scroll offsets */ + zoom:1; + overflow-x:hidden; +} + +.x-combo-list-hd { + border-bottom:1px solid; + padding:3px; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom:1px solid; +} + +.x-combo-list-item { + padding:2px; + border:1px solid; + white-space: nowrap; + overflow:hidden; + text-overflow: ellipsis; +} + +.x-combo-list .x-combo-selected{ + border:1px dotted !important; + cursor:pointer; +} + +.x-combo-list .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/core.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/core.css new file mode 100755 index 0000000..13c77aa --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/core.css @@ -0,0 +1,341 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.ext-el-mask { + z-index: 100; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width: 100%; + height: 100%; + zoom: 1; +} + +.ext-el-mask-msg { + z-index: 20001; + position: absolute; + top: 0; + left: 0; + border:1px solid; + background:repeat-x 0 -16px; + padding:2px; +} + +.ext-el-mask-msg div { + padding:5px 10px 5px 10px; + border:1px solid; + cursor:wait; +} + +.ext-shim { + position:absolute; + visibility:hidden; + left:0; + top:0; + overflow:hidden; +} + +.ext-ie .ext-shim { + filter: alpha(opacity=0); +} + +.ext-ie6 .ext-shim { + margin-left: 5px; + margin-top: 3px; +} + +.x-mask-loading div { + padding:5px 10px 5px 25px; + background:no-repeat 5px 5px; + line-height:16px; +} + +/* class for hiding elements without using display:none */ +.x-hidden, .x-hide-offsets { + position:absolute !important; + left:-10000px; + top:-10000px; + visibility:hidden; +} + +.x-hide-display { + display:none !important; +} + +.x-hide-nosize, +.x-hide-nosize * /* Emulate display:none for children */ + { + height:0px!important; + width:0px!important; + visibility:hidden!important; + border:none!important; + zoom:1; +} + +.x-hide-visibility { + visibility:hidden !important; +} + +.x-masked { + overflow: hidden !important; +} +.x-masked-relative { + position: relative !important; +} + +.x-masked select, .x-masked object, .x-masked embed { + visibility: hidden; +} + +.x-layer { + visibility: hidden; +} + +.x-unselectable, .x-unselectable * { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-repaint { + zoom: 1; + background-color: transparent; + -moz-outline: none; + outline: none; +} + +.x-item-disabled { + cursor: default; + opacity: .6; + -moz-opacity: .6; + filter: alpha(opacity=60); +} + +.x-item-disabled * { + cursor: default !important; +} + +.x-form-radio-group .x-item-disabled { + filter: none; +} + +.x-splitbar-proxy { + position: absolute; + visibility: hidden; + z-index: 20001; + zoom: 1; + line-height: 1px; + font-size: 1px; + overflow: hidden; +} + +.x-splitbar-h, .x-splitbar-proxy-h { + cursor: e-resize; + cursor: col-resize; +} + +.x-splitbar-v, .x-splitbar-proxy-v { + cursor: s-resize; + cursor: row-resize; +} + +.x-color-palette { + width: 150px; + height: 92px; + cursor: pointer; +} + +.x-color-palette a { + border: 1px solid; + float: left; + padding: 2px; + text-decoration: none; + -moz-outline: 0 none; + outline: 0 none; + cursor: pointer; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border: 1px solid; +} + +.x-color-palette em { + display: block; + border: 1px solid; +} + +.x-color-palette em span { + cursor: pointer; + display: block; + height: 10px; + line-height: 10px; + width: 10px; +} + +.x-ie-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; + zoom:1; +} + +.x-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; +} + +.x-shadow * { + overflow: hidden; +} + +.x-shadow * { + padding: 0; + border: 0; + margin: 0; + clear: none; + zoom: 1; +} + +/* top bottom */ +.x-shadow .xstc, .x-shadow .xsbc { + height: 6px; + float: left; +} + +/* corners */ +.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr { + width: 6px; + height: 6px; + float: left; +} + +/* sides */ +.x-shadow .xsc { + width: 100%; +} + +.x-shadow .xsml, .x-shadow .xsmr { + width: 6px; + float: left; + height: 100%; +} + +.x-shadow .xsmc { + float: left; + height: 100%; + background-color: transparent; +} + +.x-shadow .xst, .x-shadow .xsb { + height: 6px; + overflow: hidden; + width: 100%; +} + +.x-shadow .xsml { + background: transparent repeat-y 0 0; +} + +.x-shadow .xsmr { + background: transparent repeat-y -6px 0; +} + +.x-shadow .xstl { + background: transparent no-repeat 0 0; +} + +.x-shadow .xstc { + background: transparent repeat-x 0 -30px; +} + +.x-shadow .xstr { + background: transparent repeat-x 0 -18px; +} + +.x-shadow .xsbl { + background: transparent no-repeat 0 -12px; +} + +.x-shadow .xsbc { + background: transparent repeat-x 0 -36px; +} + +.x-shadow .xsbr { + background: transparent repeat-x 0 -6px; +} + +.loading-indicator { + background: no-repeat left; + padding-left: 20px; + line-height: 16px; + margin: 3px; +} + +.x-text-resize { + position: absolute; + left: -1000px; + top: -1000px; + visibility: hidden; + zoom: 1; +} + +.x-drag-overlay { + width: 100%; + height: 100%; + display: none; + position: absolute; + left: 0; + top: 0; + background-image:url(../images/default/s.gif); + z-index: 20000; +} + +.x-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.x-spotlight { + z-index: 8999; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + width:0; + height:0; + zoom: 1; +} + +#x-history-frame { + position:absolute; + top:-1px; + left:0; + width:1px; + height:1px; + visibility:hidden; +} + +#x-history-field { + position:absolute; + top:0; + left:-1px; + width:1px; + height:1px; + visibility:hidden; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/date-picker.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/date-picker.css new file mode 100755 index 0000000..8d5f409 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/date-picker.css @@ -0,0 +1,271 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-date-picker { + border: 1px solid; + border-top:0 none; + position:relative; +} + +.x-date-picker a { + -moz-outline:0 none; + outline:0 none; +} + +.x-date-inner, .x-date-inner td, .x-date-inner th{ + border-collapse:separate; +} + +.x-date-middle,.x-date-left,.x-date-right { + background: repeat-x 0 -83px; + overflow:hidden; +} + +.x-date-middle .x-btn-tc,.x-date-middle .x-btn-tl,.x-date-middle .x-btn-tr, +.x-date-middle .x-btn-mc,.x-date-middle .x-btn-ml,.x-date-middle .x-btn-mr, +.x-date-middle .x-btn-bc,.x-date-middle .x-btn-bl,.x-date-middle .x-btn-br{ + background:transparent !important; + vertical-align:middle; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background:transparent no-repeat right 0; +} + +.x-date-right, .x-date-left { + width:18px; +} + +.x-date-right{ + text-align:right; +} + +.x-date-middle { + padding-top:2px; + padding-bottom:2px; + width:130px; /* FF3 */ +} + +.x-date-right a, .x-date-left a{ + display:block; + width:16px; + height:16px; + background-position: center; + background-repeat: no-repeat; + cursor:pointer; + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} + +.x-date-right a:hover, .x-date-left a:hover{ + -moz-opacity: 1; + opacity:1; + filter: alpha(opacity=100); +} + +.x-item-disabled .x-date-right a:hover, .x-item-disabled .x-date-left a:hover{ + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} + +.x-date-right a { + margin-right:2px; + text-decoration:none !important; +} + +.x-date-left a{ + margin-left:2px; + text-decoration:none !important; +} + +table.x-date-inner { + width: 100%; + table-layout:fixed; +} + +.ext-webkit table.x-date-inner{ + /* Fix for webkit browsers */ + width: 175px; +} + + +.x-date-inner th { + width:25px; +} + +.x-date-inner th { + background: repeat-x left top; + text-align:right !important; + border-bottom: 1px solid; + cursor:default; + padding:0; + border-collapse:separate; +} + +.x-date-inner th span { + display:block; + padding:2px; + padding-right:7px; +} + +.x-date-inner td { + border: 1px solid; + text-align:right; + padding:0; +} + +.x-date-inner a { + padding:2px 5px; + display:block; + text-decoration:none; + text-align:right; + zoom:1; +} + +.x-date-inner .x-date-active{ + cursor:pointer; + color:black; +} + +.x-date-inner .x-date-selected a{ + background: repeat-x left top; + border:1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-today a{ + border: 1px solid; + padding:1px 4px; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + text-decoration:none !important; +} + +.x-date-bottom { + padding:4px; + border-top: 1px solid; + background: repeat-x left top; +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + text-decoration:none !important; +} + +.x-item-disabled .x-date-inner a:hover{ + background: none; +} + +.x-date-inner .x-date-disabled a { + cursor:default; +} + +.x-date-menu .x-menu-item { + padding:1px 24px 1px 4px; + white-space: nowrap; +} + +.x-date-menu .x-menu-item .x-menu-item-icon { + width:10px; + height:10px; + margin-right:5px; + background-position:center -4px !important; +} + +.x-date-mp { + position:absolute; + left:0; + top:0; + display:none; +} + +.x-date-mp td { + padding:2px; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn { + border: 0 none; + text-align:center; + vertical-align: middle; + width:25%; +} + +.x-date-mp-ok { + margin-right:3px; +} + +.x-date-mp-btns button { + text-decoration:none; + text-align:center; + text-decoration:none !important; + border:1px solid; + padding:1px 3px 1px; + cursor:pointer; +} + +.x-date-mp-btns { + background: repeat-x left top; +} + +.x-date-mp-btns td { + border-top: 1px solid; + text-align:center; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + display:block; + padding:2px 4px; + text-decoration:none; + text-align:center; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + text-decoration:none; + cursor:pointer; +} + +td.x-date-mp-sel a { + padding:1px 3px; + background: repeat-x left top; + border:1px solid; +} + +.x-date-mp-ybtn a { + overflow:hidden; + width:15px; + height:15px; + cursor:pointer; + background:transparent no-repeat; + display:block; + margin:0 auto; +} + +.x-date-mp-ybtn a.x-date-mp-next { + background-position:0 -120px; +} + +.x-date-mp-ybtn a.x-date-mp-next:hover { + background-position:-15px -120px; +} + +.x-date-mp-ybtn a.x-date-mp-prev { + background-position:0 -105px; +} + +.x-date-mp-ybtn a.x-date-mp-prev:hover { + background-position:-15px -105px; +} + +.x-date-mp-ybtn { + text-align:center; +} + +td.x-date-mp-sep { + border-right:1px solid; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/dd.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/dd.css new file mode 100755 index 0000000..de6d7aa --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/dd.css @@ -0,0 +1,61 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-dd-drag-proxy{ + position:absolute; + left:0; + top:0; + visibility:hidden; + z-index:15000; +} + +.x-dd-drag-ghost{ + -moz-opacity: 0.85; + opacity:.85; + filter: alpha(opacity=85); + border: 1px solid; + padding:3px; + padding-left:20px; + white-space:nowrap; +} + +.x-dd-drag-repair .x-dd-drag-ghost{ + -moz-opacity: 0.4; + opacity:.4; + filter: alpha(opacity=40); + border:0 none; + padding:0; + background-color:transparent; +} + +.x-dd-drag-repair .x-dd-drop-icon{ + visibility:hidden; +} + +.x-dd-drop-icon{ + position:absolute; + top:3px; + left:3px; + display:block; + width:16px; + height:16px; + background-color:transparent; + background-position: center; + background-repeat: no-repeat; + z-index:1; +} + +.x-view-selector { + position:absolute; + left:0; + top:0; + width:0; + border:1px dotted; + opacity: .5; + -moz-opacity: .5; + filter:alpha(opacity=50); + zoom:1; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/debug.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/debug.css new file mode 100755 index 0000000..9c18de9 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/debug.css @@ -0,0 +1,26 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +#x-debug-browser .x-tree .x-tree-node a span { + padding-top:2px; + line-height:18px; +} + +#x-debug-browser .x-tool-toggle { + background-position:0 -75px; +} + +#x-debug-browser .x-tool-toggle-over { + background-position:-15px -75px; +} + +#x-debug-browser.x-panel-collapsed .x-tool-toggle { + background-position:0 -60px; +} + +#x-debug-browser.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -60px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/dialog.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/dialog.css new file mode 100755 index 0000000..f12c5c5 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/dialog.css @@ -0,0 +1,59 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-window-dlg .x-window-body { + border:0 none !important; + padding:5px 10px; + overflow:hidden !important; +} + +.x-window-dlg .x-window-mc { + border:0 none !important; +} + +.x-window-dlg .ext-mb-input { + margin-top:4px; + width:95%; +} + +.x-window-dlg .ext-mb-textarea { + margin-top:4px; +} + +.x-window-dlg .x-progress-wrap { + margin-top:4px; +} + +.ext-ie .x-window-dlg .x-progress-wrap { + margin-top:6px; +} + +.x-window-dlg .x-msg-box-wait { + background:transparent no-repeat left; + display:block; + width:300px; + padding-left:18px; + line-height:18px; +} + +.x-window-dlg .ext-mb-icon { + float:left; + width:47px; + height:32px; +} + +.x-window-dlg .x-dlg-icon .ext-mb-content{ + zoom: 1; + margin-left: 47px; +} + +.x-window-dlg .ext-mb-info, .x-window-dlg .ext-mb-warning, .x-window-dlg .ext-mb-question, .x-window-dlg .ext-mb-error { + background:transparent no-repeat top left; +} + +.ext-gecko2 .ext-mb-fix-cursor { + overflow:auto; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/editor.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/editor.css new file mode 100755 index 0000000..7882ba6 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/editor.css @@ -0,0 +1,92 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-html-editor-wrap { + border:1px solid; +} + +.x-html-editor-tb .x-btn-text { + background:transparent no-repeat; +} + +.x-html-editor-tb .x-edit-bold, .x-menu-item img.x-edit-bold { + background-position:0 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-italic, .x-menu-item img.x-edit-italic { + background-position:-16px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-underline, .x-menu-item img.x-edit-underline { + background-position:-32px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-forecolor, .x-menu-item img.x-edit-forecolor { + background-position:-160px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-backcolor, .x-menu-item img.x-edit-backcolor { + background-position:-176px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyleft, .x-menu-item img.x-edit-justifyleft { + background-position:-112px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifycenter, .x-menu-item img.x-edit-justifycenter { + background-position:-128px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyright, .x-menu-item img.x-edit-justifyright { + background-position:-144px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertorderedlist, .x-menu-item img.x-edit-insertorderedlist { + background-position:-80px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertunorderedlist, .x-menu-item img.x-edit-insertunorderedlist { + background-position:-96px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-increasefontsize, .x-menu-item img.x-edit-increasefontsize { + background-position:-48px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-decreasefontsize, .x-menu-item img.x-edit-decreasefontsize { + background-position:-64px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-sourceedit, .x-menu-item img.x-edit-sourceedit { + background-position:-192px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-createlink, .x-menu-item img.x-edit-createlink { + background-position:-208px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding:5px; + padding-bottom:1px; +} + +.x-html-editor-tb .x-toolbar { + position:static !important; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/form.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/form.css new file mode 100755 index 0000000..9e7684b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/form.css @@ -0,0 +1,597 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +/* all fields */ +.x-form-field{ + margin: 0 0 0 0; +} + +.ext-webkit *:focus{ + outline: none !important; +} + +/* ---- text fields ---- */ +.x-form-text, textarea.x-form-field{ + padding:1px 3px; + background:repeat-x 0 0; + border:1px solid; +} + +textarea.x-form-field { + padding:2px 3px; +} + +.x-form-text, .ext-ie .x-form-file { + height:22px; + line-height:18px; + vertical-align:middle; +} + +.ext-ie6 .x-form-text, .ext-ie7 .x-form-text { + margin:-1px 0; /* ie bogus margin bug */ + height:22px; /* ie quirks */ + line-height:18px; +} + +.x-quirks .ext-ie9 .x-form-text { + height: 22px; + padding-top: 3px; + padding-bottom: 0px; +} + +/* Ugly hacks for the bogus 1px margin bug in IE9 quirks */ +.x-quirks .ext-ie9 .x-input-wrapper .x-form-text, +.x-quirks .ext-ie9 .x-form-field-trigger-wrap .x-form-text { + margin-top: -1px; + margin-bottom: -1px; +} +.x-quirks .ext-ie9 .x-input-wrapper .x-form-element { + margin-bottom: -1px; +} + +.ext-ie6 .x-form-field-wrap .x-form-file-btn, .ext-ie7 .x-form-field-wrap .x-form-file-btn { + top: -1px; /* because of all these margin hacks, these buttons are off by one pixel in IE6,7 */ +} + +.ext-ie6 textarea.x-form-field, .ext-ie7 textarea.x-form-field { + margin:-1px 0; /* ie bogus margin bug */ +} + +.ext-strict .x-form-text { + height:18px; +} + +.ext-safari.ext-mac textarea.x-form-field { + margin-bottom:-2px; /* another bogus margin bug, safari/mac only */ +} + +/* +.ext-strict .ext-ie8 .x-form-text, .ext-strict .ext-ie8 textarea.x-form-field { + margin-bottom: 1px; +} +*/ + +.ext-gecko .x-form-text , .ext-ie8 .x-form-text { + padding-top:2px; /* FF won't center the text vertically */ + padding-bottom:0; +} + +.ext-ie6 .x-form-composite .x-form-text.x-box-item, .ext-ie7 .x-form-composite .x-form-text.x-box-item { + margin: 0 !important; /* clear ie bogus margin bug fix */ +} + +textarea { + resize: none; /* Disable browser resizable textarea */ +} + +/* select boxes */ +.x-form-select-one { + height:20px; + line-height:18px; + vertical-align:middle; + border: 1px solid; +} + +/* multi select boxes */ + +/* --- TODO --- */ + +/* 2.0.2 style */ +.x-form-check-wrap { + line-height:18px; + height: auto; +} + +.ext-ie .x-form-check-wrap input { + width:15px; + height:15px; +} + +.x-form-check-wrap input{ + vertical-align: bottom; +} + +.x-editor .x-form-check-wrap { + padding:3px; +} + +.x-editor .x-form-checkbox { + height:13px; +} + +.x-form-check-group-label { + border-bottom: 1px solid; + margin-bottom: 5px; + padding-left: 3px !important; + float: none !important; +} + +/* wrapped fields and triggers */ +.x-form-field-wrap .x-form-trigger{ + width:17px; + height:21px; + border:0; + background:transparent no-repeat 0 0; + cursor:pointer; + border-bottom: 1px solid; + position:absolute; + top:0; +} + +.x-form-field-wrap .x-form-date-trigger, .x-form-field-wrap .x-form-clear-trigger, .x-form-field-wrap .x-form-search-trigger{ + cursor:pointer; +} + +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{ + position:static; + top:auto; + vertical-align:top; +} + +.x-form-field-wrap { + position:relative; + left:0;top:0; + text-align: left; + zoom:1; + white-space: nowrap; +} + +.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-trigger { + right: 0; /* IE8 Strict mode trigger bug */ +} + +.x-form-field-wrap .x-form-trigger-over{ + background-position:-17px 0; +} + +.x-form-field-wrap .x-form-trigger-click{ + background-position:-34px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + background-position:-51px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-over{ + background-position:-68px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-click{ + background-position:-85px 0; +} + +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-over{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-click{ + background-position:0 0 !important; + border-bottom: 1px solid; +} + +.x-trigger-noedit{ + cursor:pointer; +} + +/* field focus style */ +.x-form-focus, textarea.x-form-focus{ + border: 1px solid; +} + +/* invalid fields */ +.x-form-invalid, textarea.x-form-invalid{ + background:repeat-x bottom; + border: 1px solid; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid{ + background:repeat-x bottom; +} + +/* editors */ +.x-editor { + visibility:hidden; + padding:0; + margin:0; +} + +.x-form-grow-sizer { + left: -10000px; + padding: 8px 3px; + position: absolute; + visibility:hidden; + top: -10000px; + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + zoom:1; +} + +.x-form-grow-sizer p { + margin:0 !important; + border:0 none !important; + padding:0 !important; +} + +/* Form Items CSS */ + +.x-form-item { + display:block; + margin-bottom:4px; + zoom:1; +} + +.x-form-item label.x-form-item-label { + display:block; + float:left; + width:100px; + padding:3px; + padding-left:0; + clear:left; + z-index:2; + position:relative; +} + +.x-form-element { + padding-left:105px; + position:relative; +} + +.x-form-invalid-msg { + padding:2px; + padding-left:18px; + background: transparent no-repeat 0 2px; + line-height:16px; + width:200px; +} + +.x-form-label-left label.x-form-item-label { + text-align:left; +} + +.x-form-label-right label.x-form-item-label { + text-align:right; +} + +.x-form-label-top .x-form-item label.x-form-item-label { + width:auto; + float:none; + clear:none; + display:inline; + margin-bottom:4px; + position:static; +} + +.x-form-label-top .x-form-element { + padding-left:0; + padding-top:4px; +} + +.x-form-label-top .x-form-item { + padding-bottom:4px; +} + +/* Editor small font for grid, toolbar and tree */ +.x-small-editor .x-form-text { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + margin-top:-1px !important; /* ie bogus margin bug */ + margin-bottom:-1px !important; + height:20px !important; /* ie quirks */ + line-height:16px !important; +} + +.ext-strict .x-small-editor .x-form-text { + height:16px !important; +} + +.ext-ie6 .x-small-editor .x-form-text, .ext-ie7 .x-small-editor .x-form-text { + height:20px; + line-height:16px; +} + +.ext-border-box .x-small-editor .x-form-text { + height:20px; +} + +.x-small-editor .x-form-select-one { + height:20px; + line-height:16px; + vertical-align:middle; +} + +.x-small-editor .x-form-num-field { + text-align:right; +} + +.x-small-editor .x-form-field-wrap .x-form-trigger{ + height:19px; +} + +.ext-webkit .x-small-editor .x-form-text{padding-top:3px;font-size:100%;} + +.ext-strict .ext-webkit .x-small-editor .x-form-text{ + height:14px !important; +} + +.x-form-clear { + clear:both; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} +.x-form-clear-left { + clear:left; + height:0; + overflow:hidden; + line-height:0; + font-size:0; +} + +.ext-ie6 .x-form-check-wrap input, .ext-border-box .x-form-check-wrap input{ + margin-top: 3px; +} + +.x-form-cb-label { + position: relative; + margin-left:4px; + top: 2px; +} + +.ext-ie .x-form-cb-label{ + top: 1px; +} + +.ext-ie6 .x-form-cb-label, .ext-border-box .x-form-cb-label{ + top: 3px; +} + +.x-form-display-field{ + padding-top: 2px; +} + +.ext-gecko .x-form-display-field, .ext-strict .ext-ie7 .x-form-display-field{ + padding-top: 1px; +} + +.ext-ie .x-form-display-field{ + padding-top: 3px; +} + +.ext-strict .ext-ie8 .x-form-display-field{ + padding-top: 0; +} + +.x-form-column { + float:left; + padding:0; + margin:0; + width:48%; + overflow:hidden; + zoom:1; +} + +/* buttons */ +.x-form .x-form-btns-ct .x-btn{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns td { + border:0; + padding:0; +} + +.x-form .x-form-btns-ct .x-form-btns-right table{ + float:right; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-left table{ + float:left; + clear:none; +} + +.x-form .x-form-btns-ct .x-form-btns-center{ + text-align:center; /*ie*/ +} + +.x-form .x-form-btns-ct .x-form-btns-center table{ + margin:0 auto; /*everyone else*/ +} + +.x-form .x-form-btns-ct table td.x-form-btn-td{ + padding:3px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-form-invalid-icon { + width:16px; + height:18px; + visibility:hidden; + position:absolute; + left:0; + top:0; + display:block; + background:transparent no-repeat 0 2px; +} + +/* fieldsets */ +.x-fieldset { + border:1px solid; + padding:10px; + margin-bottom:10px; + display:block; /* preserve margins in IE */ +} + +/* make top of checkbox/tools visible in webkit */ +.ext-webkit .x-fieldset-header { + padding-top: 1px; +} + +.ext-ie .x-fieldset legend { + margin-bottom:10px; +} + +.ext-strict .ext-ie9 .x-fieldset legend.x-fieldset-header { + padding-top: 1px; +} + +.ext-ie .x-fieldset { + padding-top: 0; + padding-bottom:10px; +} + +.x-fieldset legend .x-tool-toggle { + margin-right:3px; + margin-left:0; + float:left !important; +} + +.x-fieldset legend input { + margin-right:3px; + float:left !important; + height:13px; + width:13px; +} + +fieldset.x-panel-collapsed { + padding-bottom:0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent; + border-right-color: transparent; +} + +.ext-ie6 fieldset.x-panel-collapsed{ + padding-bottom:0 !important; + border-width: 1px 0 0 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +fieldset.x-panel-collapsed .x-fieldset-bwrap { + visibility:hidden; + position:absolute; + left:-1000px; + top:-1000px; +} + +.ext-ie .x-fieldset-bwrap { + zoom:1; +} + +.x-fieldset-noborder { + border:0px none transparent; +} + +.x-fieldset-noborder legend { + margin-left:-3px; +} + +/* IE legend positioning bug */ +.ext-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom:23px; +} +.ext-ie .x-fieldset-noborder legend span { + position: absolute; + left:16px; +} + +.ext-gecko .x-window-body .x-form-item { + -moz-outline: none; + outline: none; + overflow: auto; +} + +.ext-mac.ext-gecko .x-window-body .x-form-item { + overflow:hidden; +} + +.ext-gecko .x-form-item { + -moz-outline: none; + outline: none; +} + +.x-hide-label label.x-form-item-label { + display:none; +} + +.x-hide-label .x-form-element { + padding-left: 0 !important; +} + +.x-form-label-top .x-hide-label label.x-form-item-label{ + display: none; +} + +.x-fieldset { + overflow:hidden; +} + +.x-fieldset-bwrap { + overflow:hidden; + zoom:1; +} + +.x-fieldset-body { + overflow:hidden; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/grid.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/grid.css new file mode 100755 index 0000000..1d9e5b5 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/grid.css @@ -0,0 +1,588 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +/* Grid3 styles */ +.x-grid3 { + position:relative; + overflow:hidden; +} + +.x-grid-panel .x-panel-body { + overflow:hidden !important; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border:1px solid; +} + +.x-grid3 table { + table-layout:fixed; +} + +.x-grid3-viewport{ + overflow:hidden; +} + +.x-grid3-hd-row td, .x-grid3-row td, .x-grid3-summary-row td{ + -moz-outline: none; + outline: none; + -moz-user-focus: normal; +} + +.x-grid3-row td, .x-grid3-summary-row td { + line-height:13px; + vertical-align: top; + padding-left:1px; + padding-right:1px; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-cell{ + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-row td { + line-height:15px; + vertical-align:middle; + border-left:1px solid; + border-right:1px solid; +} + +.x-grid3-hd-row .x-grid3-marker-hd { + padding:3px; +} + +.x-grid3-row .x-grid3-marker { + padding:3px; +} + +.x-grid3-cell-inner, .x-grid3-hd-inner{ + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding:3px 3px 3px 5px; + white-space: nowrap; +} + +/* ActionColumn, reduce padding to accommodate 16x16 icons in normal row height */ +.x-action-col-cell .x-grid3-cell-inner { + padding-top: 1px; + padding-bottom: 1px; +} + +.x-action-col-icon { + cursor: pointer; +} + +.x-grid3-hd-inner { + position:relative; + cursor:inherit; + padding:4px 3px 4px 5px; +} + +.x-grid3-row-body { + white-space:normal; +} + +.x-grid3-body-cell { + -moz-outline:0 none; + outline:0 none; +} + +/* IE Quirks to clip */ +.ext-ie .x-grid3-cell-inner, .ext-ie .x-grid3-hd-inner{ + width:100%; +} + +/* reverse above in strict mode */ +.ext-strict .x-grid3-cell-inner, .ext-strict .x-grid3-hd-inner{ + width:auto; +} + +.x-grid-row-loading { + background: no-repeat center center; +} + +.x-grid-page { + overflow:hidden; +} + +.x-grid3-row { + cursor: default; + border: 1px solid; + width:100%; +} + +.x-grid3-row-over { + border:1px solid; + background: repeat-x left top; +} + +.x-grid3-resize-proxy { + width:1px; + left:0; + cursor: e-resize; + cursor: col-resize; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-resize-marker { + width:1px; + left:0; + position:absolute; + top:0; + height:100px; + overflow:hidden; + visibility:hidden; + border:0 none; + z-index:7; +} + +.x-grid3-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select:ignore; +} + +/* header styles */ +.x-grid3-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + padding:1px 0 0 0; +} + +.x-grid3-header-pop { + border-left:1px solid; + float:right; + clear:none; +} + +.x-grid3-header-pop-inner { + border-left:1px solid; + width:14px; + height:19px; + background: transparent no-repeat center center; +} + +.ext-ie .x-grid3-header-pop-inner { + width:15px; +} + +.ext-strict .x-grid3-header-pop-inner { + width:14px; +} + +.x-grid3-header-inner { + overflow:hidden; + zoom:1; + float:left; +} + +.x-grid3-header-offset { + padding-left:1px; + text-align: left; +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left:1px solid; + border-right:1px solid; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background: repeat-x left bottom; + +} + +.x-grid3-sort-icon{ + background-repeat: no-repeat; + display: none; + height: 4px; + width: 13px; + margin-left:3px; + vertical-align: middle; +} + +.sort-asc .x-grid3-sort-icon, .sort-desc .x-grid3-sort-icon { + display: inline; +} + +/* Header position fixes for IE strict mode */ +.ext-strict .ext-ie .x-grid3-header-inner, .ext-strict .ext-ie6 .x-grid3-hd { + position:relative; +} + +.ext-strict .ext-ie6 .x-grid3-hd-inner{ + position:static; +} + +/* Body Styles */ +.x-grid3-body { + zoom:1; +} + +.x-grid3-scroller { + overflow:auto; + zoom:1; + position:relative; +} + +.x-grid3-cell-text, .x-grid3-hd-text { + display: block; + padding: 3px 5px 3px 5px; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select:ignore; +} + +.x-grid3-split { + background-position: center; + background-repeat: no-repeat; + cursor: e-resize; + cursor: col-resize; + display: block; + font-size: 1px; + height: 16px; + overflow: hidden; + position: absolute; + top: 2px; + width: 6px; + z-index: 3; +} + +/* Column Reorder DD */ +.x-dd-drag-proxy .x-grid3-hd-inner{ + background: repeat-x left bottom; + width:120px; + padding:3px; + border:1px solid; + overflow:hidden; +} + +.col-move-top, .col-move-bottom{ + width:9px; + height:9px; + position:absolute; + top:0; + line-height:1px; + font-size:1px; + overflow:hidden; + visibility:hidden; + z-index:20000; + background:transparent no-repeat left top; +} + +/* Selection Styles */ +.x-grid3-row-selected { + border:1px dotted; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background: repeat-x 0 bottom !important; + vertical-align:middle !important; + padding:0; + border-top:1px solid; + border-bottom:none !important; + border-right:1px solid !important; + text-align:center; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + padding:0 4px; + text-align:center; +} + +/* dirty cells */ +.x-grid3-dirty-cell { + background: transparent no-repeat 0 0; +} + +/* Grid Toolbars */ +.x-grid3-topbar, .x-grid3-bottombar{ + overflow:hidden; + display:none; + zoom:1; + position:relative; +} + +.x-grid3-topbar .x-toolbar{ + border-right:0 none; +} + +.x-grid3-bottombar .x-toolbar{ + border-right:0 none; + border-bottom:0 none; + border-top:1px solid; +} + +/* Props Grid Styles */ +.x-props-grid .x-grid3-cell{ + padding:1px; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background:transparent repeat-y -16px !important; + padding-left:12px; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + padding:1px; + padding-right:0; + border:0 none; + border-right:1px solid; +} + +/* dd */ +.x-grid3-col-dd { + border:0 none; + padding:0; + background-color:transparent; +} + +.x-dd-drag-ghost .x-grid3-dd-wrap { + padding:1px 3px 3px 1px; +} + +.x-grid3-hd { + -moz-user-select:none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-grid3-hd-btn { + display:none; + position:absolute; + width:14px; + background:no-repeat left center; + right:0; + top:0; + z-index:2; + cursor:pointer; +} + +.x-grid3-hd-over .x-grid3-hd-btn, .x-grid3-hd-menu-open .x-grid3-hd-btn { + display:block; +} + +a.x-grid3-hd-btn:hover { + background-position:-14px center; +} + +/* Expanders */ +.x-grid3-body .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-expander { + width:100%; + height:18px; + background-position:4px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row-collapsed .x-grid3-row-expander { + background-position:4px 2px; +} + +.x-grid3-row-expanded .x-grid3-row-expander { + background-position:-21px 2px; +} + +.x-grid3-row-collapsed .x-grid3-row-body { + display:none !important; +} + +.x-grid3-row-expanded .x-grid3-row-body { + display:block !important; +} + +/* Checkers */ +.x-grid3-body .x-grid3-td-checker { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner, .x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner { + padding:0 !important; + height:100%; +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + width:100%; + height:18px; + background-position:2px 2px; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-row .x-grid3-row-checker { + background-position:2px 2px; +} + +.x-grid3-row-selected .x-grid3-row-checker, .x-grid3-hd-checker-on .x-grid3-hd-checker,.x-grid3-row-checked .x-grid3-row-checker { + background-position:-23px 2px; +} + +.x-grid3-hd-checker { + background-position:2px 1px; +} + +.ext-border-box .x-grid3-hd-checker { + background-position:2px 3px; +} + +.x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position:-23px 1px; +} + +.ext-border-box .x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position:-23px 3px; +} + +/* Numberer */ +.x-grid3-body .x-grid3-td-numberer { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + padding:3px 5px 0 0 !important; + text-align:right; +} + +/* Row Icon */ + +.x-grid3-body .x-grid3-td-row-icon { + background:transparent repeat-y right; + vertical-align:top; + text-align:center; +} + +.x-grid3-body .x-grid3-td-row-icon .x-grid3-cell-inner { + padding:0 !important; + background-position:center center; + background-repeat:no-repeat; + width:16px; + height:16px; + margin-left:2px; + margin-top:3px; +} + +/* All specials */ +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background:transparent repeat-y right; +} + +.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner { + padding: 1px 0 0 0 !important; +} + +.x-grid3-check-col { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + +.x-grid3-check-col-on { + width:100%; + height:16px; + background-position:center center; + background-repeat:no-repeat; + background-color:transparent; +} + +/* Grouping classes */ +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom: 2px solid; + cursor:pointer; + padding-top:6px; +} + +.x-grid-group-hd div.x-grid-group-title { + background:transparent no-repeat 3px 3px; + padding:4px 4px 4px 17px; +} + +.x-grid-group-collapsed .x-grid-group-body { + display:none; +} + +.ext-ie6 .x-grid3 .x-editor .x-form-text, .ext-ie7 .x-grid3 .x-editor .x-form-text { + position:relative; + top:-1px; +} + +.ext-ie .x-props-grid .x-editor .x-form-text { + position:static; + top:0; +} + +.x-grid-empty { + padding:10px; +} + +/* fix floating toolbar issue */ +.ext-ie7 .x-grid-panel .x-panel-bbar { + position:relative; +} + + +/* Reset position to static when Grid Panel has been framed */ +/* to resolve 'snapping' from top to bottom behavior. */ +/* @forumThread 86656 */ +.ext-ie7 .x-grid-panel .x-panel-mc .x-panel-bbar { + position: static; +} + +.ext-ie6 .x-grid3-header { + position: relative; +} + +/* Fix WebKit bug in Grids */ +.ext-webkit .x-grid-panel .x-panel-bwrap{ + -webkit-user-select:none; +} +.ext-webkit .x-tbar-page-number{ + -webkit-user-select:ignore; +} +/* end*/ + +/* column lines */ +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + padding-right:0; + border-right:1px solid; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/index.html b/ehcp/extplorer/scripts/extjs3/resources/css/structure/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/layout.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/layout.css new file mode 100755 index 0000000..89c2601 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/layout.css @@ -0,0 +1,296 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-border-layout-ct { + position: relative; +} + +.x-border-panel { + position:absolute; + left:0; + top:0; +} + +.x-tool-collapse-south { + background-position:0 -195px; +} + +.x-tool-collapse-south-over { + background-position:-15px -195px; +} + +.x-tool-collapse-north { + background-position:0 -210px; +} + +.x-tool-collapse-north-over { + background-position:-15px -210px; +} + +.x-tool-collapse-west { + background-position:0 -180px; +} + +.x-tool-collapse-west-over { + background-position:-15px -180px; +} + +.x-tool-collapse-east { + background-position:0 -165px; +} + +.x-tool-collapse-east-over { + background-position:-15px -165px; +} + +.x-tool-expand-south { + background-position:0 -210px; +} + +.x-tool-expand-south-over { + background-position:-15px -210px; +} + +.x-tool-expand-north { + background-position:0 -195px; +} +.x-tool-expand-north-over { + background-position:-15px -195px; +} + +.x-tool-expand-west { + background-position:0 -165px; +} + +.x-tool-expand-west-over { + background-position:-15px -165px; +} + +.x-tool-expand-east { + background-position:0 -180px; +} + +.x-tool-expand-east-over { + background-position:-15px -180px; +} + +.x-tool-expand-north, .x-tool-expand-south { + float:right; + margin:3px; +} + +.x-tool-expand-east, .x-tool-expand-west { + float:none; + margin:3px 2px; +} + +.x-accordion-hd .x-tool-toggle { + background-position:0 -255px; +} + +.x-accordion-hd .x-tool-toggle-over { + background-position:-15px -255px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle { + background-position:0 -240px; +} + +.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over { + background-position:-15px -240px; +} + +.x-accordion-hd { + padding-top:4px; + padding-bottom:3px; + border-top:0 none; + background: transparent repeat-x 0 -9px; +} + +.x-layout-collapsed{ + position:absolute; + left:-10000px; + top:-10000px; + visibility:hidden; + width:20px; + height:20px; + overflow:hidden; + border:1px solid; + z-index:20; +} + +.ext-border-box .x-layout-collapsed{ + width:22px; + height:22px; +} + +.x-layout-collapsed-over{ + cursor:pointer; +} + +.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{ + position:absolute; + top:0; + left:0; + width:20px; + height:20px; +} + + +.x-layout-split{ + position:absolute; + height:5px; + width:5px; + line-height:1px; + font-size:1px; + z-index:3; + background-color:transparent; +} + +/* IE6 strict won't drag w/out a color */ +.ext-strict .ext-ie6 .x-layout-split{ + background-color: #fff !important; + filter: alpha(opacity=1); +} + +.x-layout-split-h{ + background-image:url(../images/default/s.gif); + background-position: left; +} + +.x-layout-split-v{ + background-image:url(../images/default/s.gif); + background-position: top; +} + +.x-column-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-column { + float:left; + padding:0; + margin:0; + overflow:hidden; + zoom:1; +} + +.x-column-inner { + overflow:hidden; + zoom:1; +} + +/* mini mode */ +.x-layout-mini { + position:absolute; + top:0; + left:0; + display:block; + width:5px; + height:35px; + cursor:pointer; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-layout-mini-over, .x-layout-collapsed-over .x-layout-mini{ + opacity:1; + -moz-opacity:1; + filter:none; +} + +.x-layout-split-west .x-layout-mini { + top:48%; +} + +.x-layout-split-east .x-layout-mini { + top:48%; +} + +.x-layout-split-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-split-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west .x-layout-mini { + top:48%; +} + +.x-layout-cmini-east .x-layout-mini { + top:48%; +} + +.x-layout-cmini-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} + +.x-layout-cmini-west, .x-layout-cmini-east { + border:0 none; + width:5px !important; + padding:0; + background-color:transparent; +} + +.x-layout-cmini-north, .x-layout-cmini-south { + border:0 none; + height:5px !important; + padding:0; + background-color:transparent; +} + +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; +} + +.x-abs-layout-item { + position:absolute; + left:0; + top:0; +} + +.ext-ie input.x-abs-layout-item, .ext-ie textarea.x-abs-layout-item { + margin:0; +} + +.x-box-layout-ct { + overflow:hidden; + zoom:1; +} + +.x-box-inner { + overflow:hidden; + zoom:1; + position:relative; + left:0; + top:0; +} + +.x-box-item { + position:absolute; + left:0; + top:0; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/list-view.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/list-view.css new file mode 100755 index 0000000..3a01597 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/list-view.css @@ -0,0 +1,86 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-list-header{ + background: repeat-x 0 bottom; + cursor:default; + zoom:1; + height:22px; +} + +.x-list-header-inner div { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} + +.x-list-header-inner div em { + display:block; + border-left:1px solid; + padding:4px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; + line-height:14px; +} + +.x-list-body { + overflow:auto; + overflow-x:hidden; + overflow-y:auto; + zoom:1; + float: left; + width: 100%; +} + +.x-list-body dl { + zoom:1; +} + +.x-list-body dt { + display:block; + float:left; + overflow:hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + cursor:pointer; + zoom:1; +} + +.x-list-body dt em { + display:block; + padding:3px 4px; + overflow:hidden; + -moz-user-select: none; + -khtml-user-select: none; +} + +.x-list-resizer { + border-left:1px solid; + border-right:1px solid; + position:absolute; + left:0; + top:0; +} + +.x-list-header-inner em.sort-asc { + background: transparent no-repeat center 0; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + +.x-list-header-inner em.sort-desc { + background: transparent no-repeat center -23px; + border-style:solid; + border-width: 0 1px 1px; + padding-bottom:3px; +} + diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/menu.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/menu.css new file mode 100755 index 0000000..ed36b0b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/menu.css @@ -0,0 +1,245 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-menu { + z-index: 15000; + zoom: 1; + background: repeat-y; +} + +.x-menu-floating{ + border: 1px solid; +} + +.x-menu a { + text-decoration: none !important; +} + +.ext-ie .x-menu { + zoom:1; + overflow:hidden; +} + +.x-menu-list{ + padding: 2px; + background-color:transparent; + border:0 none; + overflow:hidden; + overflow-y: hidden; +} + +.ext-strict .ext-ie .x-menu-list{ + position: relative; +} + +.x-menu li{ + line-height:100%; +} + +.x-menu li.x-menu-sep-li{ + font-size:1px; + line-height:1px; +} + +.x-menu-list-item{ + white-space: nowrap; + display:block; + padding:1px; +} + +.x-menu-item{ + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; +} + +.x-menu-item-arrow{ + background:transparent no-repeat right; +} + +.x-menu-sep { + display:block; + font-size:1px; + line-height:1px; + margin: 2px 3px; + border-bottom:1px solid; + overflow:hidden; +} + +.x-menu-focus { + position:absolute; + left:-1px; + top:-1px; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + overflow:hidden; + display:block; +} + +a.x-menu-item { + cursor: pointer; + display: block; + line-height: 16px; + outline-color: -moz-use-text-color; + outline-style: none; + outline-width: 0; + padding: 3px 21px 3px 27px; + position: relative; + text-decoration: none; + white-space: nowrap; +} + +.x-menu-item-active { + background-repeat: repeat-x; + background-position: left bottom; + border-style:solid; + border-width: 1px 0; + margin:0 1px; + padding: 0; +} + +.x-menu-item-active a.x-menu-item { + border-style:solid; + border-width:0 1px; + margin:0 -1px; +} + +.x-menu-item-icon { + border: 0 none; + height: 16px; + padding: 0; + vertical-align: top; + width: 16px; + position: absolute; + left: 3px; + top: 3px; + margin: 0; + background-position:center; +} + +.ext-ie .x-menu-item-icon { + left: -24px; +} +.ext-strict .x-menu-item-icon { + left: 3px; +} + +.ext-ie6 .x-menu-item-icon { + left: -24px; +} + +.ext-ie .x-menu-item-icon { + vertical-align: middle; +} + +.x-menu-check-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-menu-group-item .x-menu-item-icon{ + background-color: transparent; +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background: transparent no-repeat center; +} + +.x-date-menu .x-menu-list{ + padding: 0; +} + +.x-menu-date-item{ + padding:0; +} + +.x-menu .x-color-palette, .x-menu .x-date-picker{ + margin-left: 26px; + margin-right:4px; +} + +.x-menu .x-date-picker{ + border:1px solid; + margin-top:2px; + margin-bottom:2px; +} + +.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{ + margin: 0; + border: 0 none; +} + +.x-date-menu { + padding:0 !important; +} + +/* + * fixes separator visibility problem in IE 6 + */ +.ext-strict .ext-ie6 .x-menu-sep-li { + padding: 3px 4px; +} +.ext-strict .ext-ie6 .x-menu-sep { + margin: 0; + height: 1px; +} + +/* + * Fixes an issue with "fat" separators in webkit + */ +.ext-webkit .x-menu-sep{ + height: 1px; +} + +/* + * Ugly mess to remove the white border under the picker + */ +.ext-ie .x-date-menu{ + height: 199px; +} + +.ext-strict .ext-ie .x-date-menu, .ext-border-box .ext-ie8 .x-date-menu{ + height: 197px; +} + +.ext-strict .ext-ie7 .x-date-menu{ + height: 195px; +} + +.ext-strict .ext-ie8 .x-date-menu{ + height: auto; +} + +.x-cycle-menu .x-menu-item-checked { + border:1px dotted !important; + padding:0; +} + +.x-menu .x-menu-scroller { + width: 100%; + background-repeat:no-repeat; + background-position:center; + height:8px; + line-height: 8px; + cursor:pointer; + margin: 0; + padding: 0; +} + +.x-menu .x-menu-scroller-active{ + height: 6px; + line-height: 6px; +} + +.x-menu-list-item-indent{ + padding-left: 27px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel-reset.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel-reset.css new file mode 100755 index 0000000..42fe645 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel-reset.css @@ -0,0 +1,130 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +/** + * W3C Suggested Default style sheet for HTML 4 + * http://www.w3.org/TR/CSS21/sample.html + * + * Resets for Ext.Panel @cfg normal: true + */ +.x-panel-reset .x-panel-body html, +.x-panel-reset .x-panel-body address, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body body, +.x-panel-reset .x-panel-body dd, +.x-panel-reset .x-panel-body div, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dt, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body frame, frameset, +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body noframes, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body center, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body hr, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body pre { display: block } +.x-panel-reset .x-panel-body li { display: list-item } +.x-panel-reset .x-panel-body head { display: none } +.x-panel-reset .x-panel-body table { display: table } +.x-panel-reset .x-panel-body tr { display: table-row } +.x-panel-reset .x-panel-body thead { display: table-header-group } +.x-panel-reset .x-panel-body tbody { display: table-row-group } +.x-panel-reset .x-panel-body tfoot { display: table-footer-group } +.x-panel-reset .x-panel-body col { display: table-column } +.x-panel-reset .x-panel-body colgroup { display: table-column-group } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { display: table-cell } +.x-panel-reset .x-panel-body caption { display: table-caption } +.x-panel-reset .x-panel-body th { font-weight: bolder; text-align: center } +.x-panel-reset .x-panel-body caption { text-align: center } +.x-panel-reset .x-panel-body body { margin: 8px } +.x-panel-reset .x-panel-body h1 { font-size: 2em; margin: .67em 0 } +.x-panel-reset .x-panel-body h2 { font-size: 1.5em; margin: .75em 0 } +.x-panel-reset .x-panel-body h3 { font-size: 1.17em; margin: .83em 0 } +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body p, +.x-panel-reset .x-panel-body blockquote, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body fieldset, +.x-panel-reset .x-panel-body form, +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body dl, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu { margin: 1.12em 0 } +.x-panel-reset .x-panel-body h5 { font-size: .83em; margin: 1.5em 0 } +.x-panel-reset .x-panel-body h6 { font-size: .75em; margin: 1.67em 0 } +.x-panel-reset .x-panel-body h1, +.x-panel-reset .x-panel-body h2, +.x-panel-reset .x-panel-body h3, +.x-panel-reset .x-panel-body h4, +.x-panel-reset .x-panel-body h5, +.x-panel-reset .x-panel-body h6, +.x-panel-reset .x-panel-body b, +.x-panel-reset .x-panel-body strong { font-weight: bolder } +.x-panel-reset .x-panel-body blockquote { margin-left: 40px; margin-right: 40px } +.x-panel-reset .x-panel-body i, +.x-panel-reset .x-panel-body cite, +.x-panel-reset .x-panel-body em, +.x-panel-reset .x-panel-body var, +.x-panel-reset .x-panel-body address { font-style: italic } +.x-panel-reset .x-panel-body pre, +.x-panel-reset .x-panel-body tt, +.x-panel-reset .x-panel-body code, +.x-panel-reset .x-panel-body kbd, +.x-panel-reset .x-panel-body samp { font-family: monospace } +.x-panel-reset .x-panel-body pre { white-space: pre } +.x-panel-reset .x-panel-body button, +.x-panel-reset .x-panel-body textarea, +.x-panel-reset .x-panel-body input, +.x-panel-reset .x-panel-body select { display: inline-block } +.x-panel-reset .x-panel-body big { font-size: 1.17em } +.x-panel-reset .x-panel-body small, +.x-panel-reset .x-panel-body sub, +.x-panel-reset .x-panel-body sup { font-size: .83em } +.x-panel-reset .x-panel-body sub { vertical-align: sub } +.x-panel-reset .x-panel-body sup { vertical-align: super } +.x-panel-reset .x-panel-body table { border-spacing: 2px; } +.x-panel-reset .x-panel-body thead, +.x-panel-reset .x-panel-body tbody, +.x-panel-reset .x-panel-body tfoot { vertical-align: middle } +.x-panel-reset .x-panel-body td, +.x-panel-reset .x-panel-body th { vertical-align: inherit } +.x-panel-reset .x-panel-body s, +.x-panel-reset .x-panel-body strike, +.x-panel-reset .x-panel-body del { text-decoration: line-through } +.x-panel-reset .x-panel-body hr { border: 1px inset } +.x-panel-reset .x-panel-body ol, +.x-panel-reset .x-panel-body ul, +.x-panel-reset .x-panel-body dir, +.x-panel-reset .x-panel-body menu, +.x-panel-reset .x-panel-body dd { margin-left: 40px } +.x-panel-reset .x-panel-body ul, .x-panel-reset .x-panel-body menu, .x-panel-reset .x-panel-body dir { list-style-type: disc;} +.x-panel-reset .x-panel-body ol { list-style-type: decimal } +.x-panel-reset .x-panel-body ol ul, +.x-panel-reset .x-panel-body ul ol, +.x-panel-reset .x-panel-body ul ul, +.x-panel-reset .x-panel-body ol ol { margin-top: 0; margin-bottom: 0 } +.x-panel-reset .x-panel-body u, +.x-panel-reset .x-panel-body ins { text-decoration: underline } +.x-panel-reset .x-panel-body br:before { content: "\A" } +.x-panel-reset .x-panel-body :before, .x-panel-reset .x-panel-body :after { white-space: pre-line } +.x-panel-reset .x-panel-body center { text-align: center } +.x-panel-reset .x-panel-body :link, .x-panel-reset .x-panel-body :visited { text-decoration: underline } +.x-panel-reset .x-panel-body :focus { outline: invert dotted thin } + +/* Begin bidirectionality settings (do not change) */ +.x-panel-reset .x-panel-body BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override } +.x-panel-reset .x-panel-body BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override } diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel.css new file mode 100755 index 0000000..204b787 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/panel.css @@ -0,0 +1,493 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-panel { + border-style: solid; + border-width:0; +} + +.x-panel-header { + overflow:hidden; + zoom:1; + padding:5px 3px 4px 5px; + border:1px solid; + line-height: 15px; + background: transparent repeat-x 0 -1px; +} + +.x-panel-body { + border:1px solid; + border-top:0 none; + overflow:hidden; + position: relative; /* added for item scroll positioning */ +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top:1px solid; + border-bottom: 0 none; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top:1px solid; +} + +.x-panel-header { + overflow:hidden; + zoom:1; +} + +.x-panel-tl .x-panel-header { + padding:5px 0 4px 0; + border:0 none; + background:transparent no-repeat; +} + +.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon { + padding-left:20px !important; + background-repeat:no-repeat; + background-position:0 4px; + zoom:1; +} + +.x-panel-inline-icon { + width:16px; + height:16px; + background-repeat:no-repeat; + background-position:0 0; + vertical-align:middle; + margin-right:4px; + margin-top:-1px; + margin-bottom:-1px; +} + +.x-panel-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} + +/* fix ie7 strict mode bug */ +.ext-strict .ext-ie7 .x-panel-tc { + overflow: visible; +} + +.x-panel-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + border-bottom:1px solid; +} + +.x-panel-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:6px; +} + +.x-panel-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + zoom:1; +} + +.x-panel-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-panel-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-panel-mc { + border:0 none; + padding:0; + margin:0; + padding-top:6px; +} + +.x-panel-mc .x-panel-body { + background-color:transparent; + border: 0 none; +} + +.x-panel-ml { + background: repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-panel-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-panel-bc .x-panel-footer { + padding-bottom:6px; +} + +.x-panel-nofooter .x-panel-bc, .x-panel-nofooter .x-window-bc { + height:6px; + font-size:0; + line-height:0; +} + +.x-panel-bwrap { + overflow:hidden; + zoom:1; + left:0; + top:0; +} +.x-panel-body { + overflow:hidden; + zoom:1; +} + +.x-panel-collapsed .x-resizable-handle{ + display:none; +} + +.ext-gecko .x-panel-animated div { + overflow:hidden !important; +} + +/* Plain */ +.x-plain-body { + overflow:hidden; +} + +.x-plain-bbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-tbar .x-toolbar { + overflow:hidden; + padding:2px; +} + +.x-plain-bwrap { + overflow:hidden; + zoom:1; +} + +.x-plain { + overflow:hidden; +} + +/* Tools */ +.x-tool { + overflow:hidden; + width:15px; + height:15px; + float:right; + cursor:pointer; + background:transparent no-repeat; + margin-left:2px; +} + +/* expand / collapse tools */ +.x-tool-toggle { + background-position:0 -60px; +} + +.x-tool-toggle-over { + background-position:-15px -60px; +} + +.x-panel-collapsed .x-tool-toggle { + background-position:0 -75px; +} + +.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -75px; +} + + +.x-tool-close { + background-position:0 -0; +} + +.x-tool-close-over { + background-position:-15px 0; +} + +.x-tool-minimize { + background-position:0 -15px; +} + +.x-tool-minimize-over { + background-position:-15px -15px; +} + +.x-tool-maximize { + background-position:0 -30px; +} + +.x-tool-maximize-over { + background-position:-15px -30px; +} + +.x-tool-restore { + background-position:0 -45px; +} + +.x-tool-restore-over { + background-position:-15px -45px; +} + +.x-tool-gear { + background-position:0 -90px; +} + +.x-tool-gear-over { + background-position:-15px -90px; +} + +.x-tool-prev { + background-position:0 -105px; +} + +.x-tool-prev-over { + background-position:-15px -105px; +} + +.x-tool-next { + background-position:0 -120px; +} + +.x-tool-next-over { + background-position:-15px -120px; +} + +.x-tool-pin { + background-position:0 -135px; +} + +.x-tool-pin-over { + background-position:-15px -135px; +} + +.x-tool-unpin { + background-position:0 -150px; +} + +.x-tool-unpin-over { + background-position:-15px -150px; +} + +.x-tool-right { + background-position:0 -165px; +} + +.x-tool-right-over { + background-position:-15px -165px; +} + +.x-tool-left { + background-position:0 -180px; +} + +.x-tool-left-over { + background-position:-15px -180px; +} + +.x-tool-down { + background-position:0 -195px; +} + +.x-tool-down-over { + background-position:-15px -195px; +} + +.x-tool-up { + background-position:0 -210px; +} + +.x-tool-up-over { + background-position:-15px -210px; +} + +.x-tool-refresh { + background-position:0 -225px; +} + +.x-tool-refresh-over { + background-position:-15px -225px; +} + +.x-tool-plus { + background-position:0 -240px; +} + +.x-tool-plus-over { + background-position:-15px -240px; +} + +.x-tool-minus { + background-position:0 -255px; +} + +.x-tool-minus-over { + background-position:-15px -255px; +} + +.x-tool-search { + background-position:0 -270px; +} + +.x-tool-search-over { + background-position:-15px -270px; +} + +.x-tool-save { + background-position:0 -285px; +} + +.x-tool-save-over { + background-position:-15px -285px; +} + +.x-tool-help { + background-position:0 -300px; +} + +.x-tool-help-over { + background-position:-15px -300px; +} + +.x-tool-print { + background-position:0 -315px; +} + +.x-tool-print-over { + background-position:-15px -315px; +} + +.x-tool-expand { + background-position:0 -330px; +} + +.x-tool-expand-over { + background-position:-15px -330px; +} + +.x-tool-collapse { + background-position:0 -345px; +} + +.x-tool-collapse-over { + background-position:-15px -345px; +} + +.x-tool-resize { + background-position:0 -360px; +} + +.x-tool-resize-over { + background-position:-15px -360px; +} + +.x-tool-move { + background-position:0 -375px; +} + +.x-tool-move-over { + background-position:-15px -375px; +} + +/* Ghosting */ +.x-panel-ghost { + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + opacity:.65; + -moz-opacity:.65; + filter:alpha(opacity=65); +} + +.x-panel-ghost ul { + margin:0; + padding:0; + overflow:hidden; + font-size:0; + line-height:0; + border:1px solid; + border-top:0 none; + display:block; +} + +.x-panel-ghost * { + cursor:move !important; +} + +.x-panel-dd-spacer { + border:2px dashed; +} + +/* Buttons */ +.x-panel-btns { + padding:5px; + overflow:hidden; +} + +.x-panel-btns td.x-toolbar-cell{ + padding:3px; +} + +.x-panel-btns .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} + +.x-panel-btns .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} + +.x-panel-btns .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-panel-btns .x-btn-over .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-btns .x-btn-over .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-over .x-btn-center{ + background-position:0 -105px; +} + +.x-panel-btns .x-btn-click .x-btn-center{ + background-position:0 -126px; +} + +.x-panel-btns .x-btn-click .x-btn-right{ + background-position:0 -84px; +} + +.x-panel-btns .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + white-space: nowrap; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/pivotgrid.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/pivotgrid.css new file mode 100755 index 0000000..650f0d1 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/pivotgrid.css @@ -0,0 +1,65 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-pivotgrid .x-grid3-header-offset table { + width: 100%; + border-collapse: collapse; +} + +.x-pivotgrid .x-grid3-header-offset table td { + padding: 4px 3px 4px 5px; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 11px; + line-height: 13px; + font-family: tahoma; +} + +.x-pivotgrid .x-grid3-row-headers { + display: block; + float: left; +} + +.x-pivotgrid .x-grid3-row-headers table { + height: 100%; + width: 100%; + border-collapse: collapse; +} + +.x-pivotgrid .x-grid3-row-headers table td { + height: 18px; + padding: 2px 7px 0 0; + text-align: right; + text-overflow: ellipsis; + font-size: 11px; + font-family: tahoma; +} + +.ext-gecko .x-pivotgrid .x-grid3-row-headers table td { + height: 21px; +} + +.x-grid3-header-title { + top: 0%; + left: 0%; + position: absolute; + text-align: center; + vertical-align: middle; + font-family: tahoma; + font-size: 11px; + padding: auto 1px; + display: table-cell; +} + +.x-grid3-header-title span { + position: absolute; + top: 50%; + left: 0%; + width: 100%; + margin-top: -6px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/progress.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/progress.css new file mode 100755 index 0000000..c91d12f --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/progress.css @@ -0,0 +1,46 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-progress-wrap { + border:1px solid; + overflow:hidden; +} + +.x-progress-inner { + height:18px; + background:repeat-x; + position:relative; +} + +.x-progress-bar { + height:18px; + float:left; + width:0; + background: repeat-x left center; + border-top:1px solid; + border-bottom:1px solid; + border-right:1px solid; +} + +.x-progress-text { + padding:1px 5px; + overflow:hidden; + position:absolute; + left:0; + text-align:center; +} + +.x-progress-text-back { + line-height:16px; +} + +.ext-ie .x-progress-text-back { + line-height:15px; +} + +.ext-strict .ext-ie7 .x-progress-text-back{ + width: 100%; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/qtips.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/qtips.css new file mode 100755 index 0000000..4cb8dde --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/qtips.css @@ -0,0 +1,153 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-tip{ + position: absolute; + top: 0; + left:0; + visibility: hidden; + z-index: 20002; + border:0 none; +} + +.x-tip .x-tip-close{ + height: 15px; + float:right; + width: 15px; + margin:0 0 2px 2px; + cursor:pointer; + display:none; +} + +.x-tip .x-tip-tc { + background: transparent no-repeat 0 -62px; + padding-top:3px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-tr { + background: transparent no-repeat right 0; + padding-right:6px; + overflow:hidden; + zoom:1; +} + +.x-tip .x-tip-bc { + background: transparent no-repeat 0 -121px; + height:3px; + overflow:hidden; +} + +.x-tip .x-tip-bl { + background: transparent no-repeat 0 -59px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-br { + background: transparent no-repeat right -59px; + padding-right:6px; + zoom:1; +} + +.x-tip .x-tip-mc { + border:0 none; +} + +.x-tip .x-tip-ml { + background: no-repeat 0 -124px; + padding-left:6px; + zoom:1; +} + +.x-tip .x-tip-mr { + background: transparent no-repeat right -124px; + padding-right:6px; + zoom:1; +} + +.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc { + font-size:0; + line-height:0; +} + +.ext-border-box .x-tip .x-tip-header, .ext-border-box .x-tip .x-tip-tc{ + line-height: 1px; +} + +.x-tip .x-tip-header-text { + padding:0; + margin:0 0 2px 0; +} + +.x-tip .x-tip-body { + margin:0 !important; + line-height:14px; + padding:0; +} + +.x-tip .x-tip-body .loading-indicator { + margin:0; +} + +.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text { + cursor:move; +} + +.x-form-invalid-tip .x-tip-tc { + background: repeat-x 0 -12px; + padding-top:6px; +} + +.x-form-invalid-tip .x-tip-bc { + background: repeat-x 0 -18px; + height:6px; +} + +.x-form-invalid-tip .x-tip-bl { + background: no-repeat 0 -6px; +} + +.x-form-invalid-tip .x-tip-br { + background: no-repeat right -6px; +} + +.x-form-invalid-tip .x-tip-body { + padding:2px; +} + +.x-form-invalid-tip .x-tip-body { + padding-left:24px; + background:transparent no-repeat 2px 2px; +} + +.x-tip-anchor { + position: absolute; + width: 9px; + height: 10px; + overflow:hidden; + background: transparent no-repeat 0 0; + zoom:1; +} +.x-tip-anchor-bottom { + background-position: -9px 0; +} +.x-tip-anchor-right { + background-position: -18px 0; + width: 10px; +} +.x-tip-anchor-left { + background-position: -28px 0; + width: 10px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/reset.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/reset.css new file mode 100755 index 0000000..257ea1b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/reset.css @@ -0,0 +1,13 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';} + +.ext-forced-border-box, .ext-forced-border-box * { + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -webkit-box-sizing: border-box; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/resizable.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/resizable.css new file mode 100755 index 0000000..c7f2ba1 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/resizable.css @@ -0,0 +1,149 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-resizable-handle { + position:absolute; + z-index:100; + /* ie needs these */ + font-size:1px; + line-height:6px; + overflow:hidden; + filter:alpha(opacity=0); + opacity:0; + zoom:1; +} + +.x-resizable-handle-east{ + width:6px; + cursor:e-resize; + right:0; + top:0; + height:100%; +} + +.ext-ie .x-resizable-handle-east { + margin-right:-1px; /*IE rounding error*/ +} + +.x-resizable-handle-south{ + width:100%; + cursor:s-resize; + left:0; + bottom:0; + height:6px; +} + +.ext-ie .x-resizable-handle-south { + margin-bottom:-1px; /*IE rounding error*/ +} + +.x-resizable-handle-west{ + width:6px; + cursor:w-resize; + left:0; + top:0; + height:100%; +} + +.x-resizable-handle-north{ + width:100%; + cursor:n-resize; + left:0; + top:0; + height:6px; +} + +.x-resizable-handle-southeast{ + width:6px; + cursor:se-resize; + right:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northwest{ + width:6px; + cursor:nw-resize; + left:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-northeast{ + width:6px; + cursor:ne-resize; + right:0; + top:0; + height:6px; + z-index:101; +} + +.x-resizable-handle-southwest{ + width:6px; + cursor:sw-resize; + left:0; + bottom:0; + height:6px; + z-index:101; +} + +.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{ + filter:alpha(opacity=100); + opacity:1; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-position: left; +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-position: top; +} + +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-position: top left; +} + +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-position:bottom right; +} + +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-position: bottom left; +} + +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-position: top right; +} + +.x-resizable-proxy{ + border: 1px dashed; + position:absolute; + overflow:hidden; + display:none; + left:0; + top:0; + z-index:50000; +} + +.x-resizable-overlay{ + width:100%; + height:100%; + display:none; + position:absolute; + left:0; + top:0; + z-index:200000; + -moz-opacity: 0; + opacity:0; + filter: alpha(opacity=0); +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/slider.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/slider.css new file mode 100755 index 0000000..fe9361b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/slider.css @@ -0,0 +1,103 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +/* Shared styles */ +.x-slider { + zoom:1; +} + +.x-slider-inner { + position:relative; + left:0; + top:0; + overflow:visible; + zoom:1; +} + +.x-slider-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select:none; + -webkit-user-select:ignore; + display:block; + overflow:hidden; +} + +/* Horizontal styles */ +.x-slider-horz { + padding-left:7px; + background:transparent no-repeat 0 -22px; +} + +.x-slider-horz .x-slider-end { + padding-right:7px; + zoom:1; + background:transparent no-repeat right -44px; +} + +.x-slider-horz .x-slider-inner { + background:transparent repeat-x 0 0; + height:22px; +} + +.x-slider-horz .x-slider-thumb { + width:14px; + height:15px; + position:absolute; + left:0; + top:3px; + background:transparent no-repeat 0 0; +} + +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} + +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} + +/* Vertical styles */ +.x-slider-vert { + padding-top:7px; + background:transparent no-repeat -44px 0; + width:22px; +} + +.x-slider-vert .x-slider-end { + padding-bottom:7px; + zoom:1; + background:transparent no-repeat -22px bottom; +} + +.x-slider-vert .x-slider-inner { + background:transparent repeat-y 0 0; +} + +.x-slider-vert .x-slider-thumb { + width:15px; + height:14px; + position:absolute; + left:3px; + bottom:0; + background:transparent no-repeat 0 0; +} + +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} + +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/tabs.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/tabs.css new file mode 100755 index 0000000..e0f542c --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/tabs.css @@ -0,0 +1,392 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-tab-panel { + overflow:hidden; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border: 1px solid; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header { + border: 1px solid; + padding-bottom: 2px; +} + +.x-tab-panel-footer { + border: 1px solid; + padding-top: 2px; +} + +.x-tab-strip-wrap { + width:100%; + overflow:hidden; + position:relative; + zoom:1; +} + +ul.x-tab-strip { + display:block; + width:5000px; + zoom:1; +} + +ul.x-tab-strip-top{ + padding-top: 1px; + background: repeat-x bottom; + border-bottom: 1px solid; +} + +ul.x-tab-strip-bottom{ + padding-bottom: 1px; + background: repeat-x top; + border-top: 1px solid; + border-bottom: 0 none; +} + +.x-tab-panel-header-plain .x-tab-strip-top { + background:transparent !important; + padding-top:0 !important; +} + +.x-tab-panel-header-plain { + background:transparent !important; + border-width:0 !important; + padding-bottom:0 !important; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border:1px solid; + height:2px; + font-size:1px; + line-height:1px; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer { + border-top: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-bottom: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-bottom { + background:transparent !important; + padding-bottom:0 !important; +} + +.x-tab-panel-footer-plain { + background:transparent !important; + border-width:0 !important; + padding-top:0 !important; +} + +.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer, +.ext-border-box .x-tab-panel-footer-plain .x-tab-strip-spacer { + height:3px; +} + +ul.x-tab-strip li { + float:left; + margin-left:2px; +} + +ul.x-tab-strip li.x-tab-edge { + float:left; + margin:0 !important; + padding:0 !important; + border:0 none !important; + font-size:1px !important; + line-height:1px !important; + overflow:hidden; + zoom:1; + background:transparent !important; + width:1px; +} + +.x-tab-strip a, .x-tab-strip span, .x-tab-strip em { + display:block; +} + +.x-tab-strip a { + text-decoration:none !important; + -moz-outline: none; + outline: none; + cursor:pointer; +} + +.x-tab-strip-inner { + overflow:hidden; + text-overflow: ellipsis; +} + +.x-tab-strip span.x-tab-strip-text { + white-space: nowrap; + cursor:pointer; + padding:4px 0; +} + +.x-tab-strip-top .x-tab-with-icon .x-tab-right { + padding-left:6px; +} + +.x-tab-strip .x-tab-with-icon span.x-tab-strip-text { + padding-left:20px; + background-position: 0 3px; + background-repeat: no-repeat; +} + +.x-tab-strip-active, .x-tab-strip-active a.x-tab-right { + cursor:default; +} + +.x-tab-strip-active span.x-tab-strip-text { + cursor:default; +} + +.x-tab-strip-disabled .x-tabs-text { + cursor:default; +} + +.x-tab-panel-body { + overflow:hidden; +} + +.x-tab-panel-bwrap { + overflow:hidden; +} + +.ext-ie .x-tab-strip .x-tab-right { + position:relative; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + margin-bottom:-1px; +} + +/* + * Horrible hack for IE8 in quirks mode + */ +.ext-ie8 .x-tab-strip li { + position: relative; +} +.ext-border-box .ext-ie8 .x-tab-strip-top .x-tab-right { + top: 1px; +} +.ext-ie8 .x-tab-strip-top { + padding-top: 1; +} +.ext-border-box .ext-ie8 .x-tab-strip-top { + padding-top: 0; +} +.ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + top:3px; +} +.ext-border-box .ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + top:4px; +} +.ext-ie8 .x-tab-strip-bottom .x-tab-right{ + top:0; +} + + +.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-bottom:5px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + margin-top:-1px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text { + padding-top:5px; +} + +.x-tab-strip-top .x-tab-right { + background: transparent no-repeat 0 -51px; + padding-left:10px; +} + +.x-tab-strip-top .x-tab-left { + background: transparent no-repeat right -351px; + padding-right:10px; +} + +.x-tab-strip-top .x-tab-strip-inner { + background: transparent repeat-x 0 -201px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-right { + background-position:0 -101px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-left { + background-position:right -401px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner { + background-position:0 -251px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + background-position: 0 0; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-left { + background-position: right -301px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner { + background-position: 0 -151px; +} + +.x-tab-strip-bottom .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-left { + margin-right: 3px; + padding:0 10px; +} + +.x-tab-strip-bottom .x-tab-right { + padding:0; +} + +.x-tab-strip .x-tab-strip-close { + display:none; +} + +.x-tab-strip-closable { + position:relative; +} + +.x-tab-strip-closable .x-tab-left { + padding-right:19px; +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + opacity:.6; + -moz-opacity:.6; + background-repeat:no-repeat; + display:block; + width:11px; + height:11px; + position:absolute; + top:3px; + right:3px; + cursor:pointer; + z-index:2; +} + +.x-tab-strip .x-tab-strip-active a.x-tab-strip-close { + opacity:.8; + -moz-opacity:.8; +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + opacity:1; + -moz-opacity:1; +} + +.x-tab-panel-body { + border: 1px solid; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background: transparent no-repeat -18px 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + left:0; + top:0; + z-index:10; + cursor:pointer; +} +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background: transparent no-repeat 0 0; + border-bottom: 1px solid; + width:18px; + position:absolute; + right:0; + top:0; + z-index:10; + cursor:pointer; +} + +.x-tab-scroller-right-over { + background-position: -18px 0; +} + +.x-tab-scroller-right-disabled { + background-position: 0 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scrolling-bottom .x-tab-scroller-left, .x-tab-scrolling-bottom .x-tab-scroller-right{ + margin-top: 1px; +} + +.x-tab-scrolling .x-tab-strip-wrap { + margin-left:18px; + margin-right:18px; +} + +.x-tab-scrolling { + position:relative; +} + +.x-tab-panel-bbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} + +.x-tab-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/toolbar.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/toolbar.css new file mode 100755 index 0000000..df69766 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/toolbar.css @@ -0,0 +1,246 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-toolbar{ + border-style:solid; + border-width:0 0 1px 0; + display: block; + padding:2px; + background:repeat-x top left; + position:relative; + left:0; + top:0; + zoom:1; + overflow:hidden; +} + +.x-toolbar-left { + width: 100%; +} + +.x-toolbar .x-item-disabled .x-btn-icon { + opacity: .35; + -moz-opacity: .35; + filter: alpha(opacity=35); +} + +.x-toolbar td { + vertical-align:middle; +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + white-space: nowrap; +} + +.x-toolbar .x-item-disabled { + cursor:default; + opacity:.6; + -moz-opacity:.6; + filter:alpha(opacity=60); +} + +.x-toolbar .x-item-disabled * { + cursor:default; +} + +.x-toolbar .x-toolbar-cell { + vertical-align:middle; +} + +.x-toolbar .x-btn-tl, .x-toolbar .x-btn-tr, .x-toolbar .x-btn-tc, .x-toolbar .x-btn-ml, .x-toolbar .x-btn-mr, +.x-toolbar .x-btn-mc, .x-toolbar .x-btn-bl, .x-toolbar .x-btn-br, .x-toolbar .x-btn-bc +{ + background-position: 500px 500px; +} + +/* These rules are duplicated from button.css to give priority of x-toolbar rules above */ +.x-toolbar .x-btn-over .x-btn-tl{ + background-position: -6px 0; +} + +.x-toolbar .x-btn-over .x-btn-tr{ + background-position: -9px 0; +} + +.x-toolbar .x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} + +.x-toolbar .x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} + +.x-toolbar .x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} + +.x-toolbar .x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} + +.x-toolbar .x-btn-over .x-btn-br{ + background-position: -9px -3px; +} + +.x-toolbar .x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} + +.x-toolbar .x-btn-click .x-btn-tl, .x-toolbar .x-btn-menu-active .x-btn-tl, .x-toolbar .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} + +.x-toolbar .x-btn-click .x-btn-tr, .x-toolbar .x-btn-menu-active .x-btn-tr, .x-toolbar .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} + +.x-toolbar .x-btn-click .x-btn-tc, .x-toolbar .x-btn-menu-active .x-btn-tc, .x-toolbar .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} + +.x-toolbar .x-btn-click .x-btn-ml, .x-toolbar .x-btn-menu-active .x-btn-ml, .x-toolbar .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mr, .x-toolbar .x-btn-menu-active .x-btn-mr, .x-toolbar .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} + +.x-toolbar .x-btn-click .x-btn-mc, .x-toolbar .x-btn-menu-active .x-btn-mc, .x-toolbar .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} + +.x-toolbar .x-btn-click .x-btn-bl, .x-toolbar .x-btn-menu-active .x-btn-bl, .x-toolbar .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} + +.x-toolbar .x-btn-click .x-btn-br, .x-toolbar .x-btn-menu-active .x-btn-br, .x-toolbar .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} + +.x-toolbar .x-btn-click .x-btn-bc, .x-toolbar .x-btn-menu-active .x-btn-bc, .x-toolbar .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} + +.x-toolbar div.xtb-text{ + padding:2px 2px 0; + line-height:16px; + display:block; +} + +.x-toolbar .xtb-sep { + background-position: center; + background-repeat: no-repeat; + display: block; + font-size: 1px; + height: 16px; + width:4px; + overflow: hidden; + cursor:default; + margin: 0 2px 0; + border:0; +} + +.x-toolbar .xtb-spacer { + width:2px; +} + +/* Paging Toolbar */ +.x-tbar-page-number{ + width:30px; + height:14px; +} + +.ext-ie .x-tbar-page-number{ + margin-top: 2px; +} + +.x-paging-info { + position:absolute; + top:5px; + right: 8px; +} + +/* floating */ +.x-toolbar-ct { + width:100%; +} + +.x-toolbar-right td { + text-align: center; +} + +.x-panel-tbar, .x-panel-bbar, .x-window-tbar, .x-window-bbar, .x-tab-panel-tbar, .x-tab-panel-bbar, .x-plain-tbar, .x-plain-bbar { + overflow:hidden; + zoom:1; +} + +.x-toolbar-more .x-btn-small .x-btn-text{ + height: 16px; + width: 12px; +} + +.x-toolbar-more em.x-btn-arrow { + display:inline; + background-color:transparent; + padding-right:0; +} + +.x-toolbar-more .x-btn-mc em.x-btn-arrow { + background-image: none; +} + +div.x-toolbar-no-items { + color:gray !important; + padding:5px 10px !important; +} + +/* fix ie toolbar form items */ +.ext-border-box .x-toolbar-cell .x-form-text { + margin-bottom:-1px !important; +} + +.ext-border-box .x-toolbar-cell .x-form-field-wrap .x-form-text { + margin:0 !important; +} + +.ext-ie .x-toolbar-cell .x-form-field-wrap { + height:21px; +} + +.ext-ie .x-toolbar-cell .x-form-text { + position:relative; + top:-1px; +} + +.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-text, .ext-strict .ext-ie .x-toolbar-cell .x-form-text { + top: 0px; +} + +.x-toolbar-right td .x-form-field-trigger-wrap{ + text-align: left; +} + +.x-toolbar-cell .x-form-checkbox, .x-toolbar-cell .x-form-radio{ + margin-top: 5px; +} + +.x-toolbar-cell .x-form-cb-label{ + vertical-align: bottom; + top: 1px; +} + +.ext-ie .x-toolbar-cell .x-form-checkbox, .ext-ie .x-toolbar-cell .x-form-radio{ + margin-top: 4px; +} + +.ext-ie .x-toolbar-cell .x-form-cb-label{ + top: 0; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/tree.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/tree.css new file mode 100755 index 0000000..dd765a0 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/tree.css @@ -0,0 +1,218 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.ext-strict .ext-ie .x-tree .x-panel-bwrap{ + position:relative; + overflow:hidden; +} + +.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-repeat: no-repeat; +} + +.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{ + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-position:center; + background-repeat: no-repeat; +} + +.ext-ie .x-tree-node-indent img, .ext-ie .x-tree-node-icon, .ext-ie .x-tree-ec-icon { + vertical-align: middle !important; +} + +.ext-strict .ext-ie8 .x-tree-node-indent img, .ext-strict .ext-ie8 .x-tree-node-icon, .ext-strict .ext-ie8 .x-tree-ec-icon { + vertical-align: top !important; +} + +/* checkboxes */ + +input.x-tree-node-cb { + margin-left:1px; + height: 19px; + vertical-align: bottom; +} + +.ext-ie input.x-tree-node-cb { + margin-left:0; + margin-top: 1px; + width: 16px; + height: 16px; + vertical-align: middle; +} + +.ext-strict .ext-ie8 input.x-tree-node-cb{ + margin: 1px 1px; + height: 14px; + vertical-align: bottom; +} + +.ext-strict .ext-ie8 input.x-tree-node-cb + a{ + vertical-align: bottom; +} + +.ext-opera input.x-tree-node-cb { + height: 14px; + vertical-align: middle; +} + +.x-tree-noicon .x-tree-node-icon{ + width:0; height:0; +} + +/* No line styles */ +.x-tree-no-lines .x-tree-elbow{ + background-color:transparent; +} + +.x-tree-no-lines .x-tree-elbow-end{ + background-color:transparent; +} + +.x-tree-no-lines .x-tree-elbow-line{ + background-color:transparent; +} + +/* Arrows */ +.x-tree-arrows .x-tree-elbow{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-elbow-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-end{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background:transparent no-repeat 0 0; +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background:transparent no-repeat -16px 0; +} + +.x-tree-arrows .x-tree-elbow-line{ + background-color:transparent; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{ + background-position:-48px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{ + background-position:-32px 0; +} + +.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{ + background-position:-48px 0; +} + +.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{ + cursor:pointer; +} + +.ext-ie ul.x-tree-node-ct{ + font-size:0; + line-height:0; + zoom:1; +} + +.x-tree-node{ + white-space: nowrap; +} + +.x-tree-node-el { + line-height:18px; + cursor:pointer; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + text-decoration:none; + -khtml-user-select:none; + -moz-user-select:none; + -webkit-user-select:ignore; + -kthml-user-focus:normal; + -moz-user-focus:normal; + -moz-outline: 0 none; + outline:0 none; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + text-decoration:none; + padding:1px 3px 1px 2px; +} + +.x-tree-node .x-tree-node-disabled .x-tree-node-icon{ + -moz-opacity: 0.5; + opacity:.5; + filter: alpha(opacity=50); +} + +.x-tree-node .x-tree-node-inline-icon{ + background-color:transparent; +} + +.x-tree-node a:hover, .x-dd-drag-ghost a:hover{ + text-decoration:none; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom:1px dotted; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top:1px dotted; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{ + border-bottom:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{ + border-top:0 none; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom:2px solid; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top:2px solid; +} + +.x-tree-node .x-tree-drag-append a span{ + border:1px dotted; +} + +.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{ + display:none !important; +} + +/* Fix for ie rootVisible:false issue */ +.x-tree-root-ct { + zoom:1; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/structure/window.css b/ehcp/extplorer/scripts/extjs3/resources/css/structure/window.css new file mode 100755 index 0000000..3871e64 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/structure/window.css @@ -0,0 +1,222 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-window { + zoom:1; +} + +.x-window .x-window-handle { + opacity:0; + -moz-opacity:0; + filter:alpha(opacity=0); +} + +.x-window-proxy { + border:1px solid; + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + display:none; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} + +.x-window-header { + overflow:hidden; + zoom:1; +} + +.x-window-bwrap { + z-index:1; + position:relative; + zoom:1; + left:0;top:0; +} + +.x-window-tl .x-window-header { + padding:5px 0 4px 0; +} + +.x-window-header-text { + cursor:pointer; +} + +.x-window-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + zoom:1; +} + +.x-window-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + z-index:1; + position:relative; +} + +.x-window-tr { + background: transparent no-repeat right 0; + padding-right:6px; +} + +.x-window-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} + +.x-window-bc .x-window-footer { + padding-bottom:6px; + zoom:1; + font-size:0; + line-height:0; +} + +.x-window-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} + +.x-window-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} + +.x-window-mc { + border:1px solid; + padding:0; + margin:0; +} + +.x-window-ml { + background: transparent repeat-y 0 0; + padding-left:6px; + zoom:1; +} + +.x-window-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} + +.x-window-body { + overflow:hidden; +} + +.x-window-bwrap { + overflow:hidden; +} + +.x-window-maximized .x-window-bl, .x-window-maximized .x-window-br, + .x-window-maximized .x-window-ml, .x-window-maximized .x-window-mr, + .x-window-maximized .x-window-tl, .x-window-maximized .x-window-tr { + padding:0; +} + +.x-window-maximized .x-window-footer { + padding-bottom:0; +} + +.x-window-maximized .x-window-tc { + padding-left:3px; + padding-right:3px; +} + +.x-window-maximized .x-window-mc { + border-left:0 none; + border-right:0 none; +} + +.x-window-tbar .x-toolbar, .x-window-bbar .x-toolbar { + border-left:0 none; + border-right: 0 none; +} + +.x-window-bbar .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} + +.x-window-draggable, .x-window-draggable .x-window-header-text { + cursor:move; +} + +.x-window-maximized .x-window-draggable, .x-window-maximized .x-window-draggable .x-window-header-text { + cursor:default; +} + +.x-window-body { + background-color:transparent; +} + +.x-panel-ghost .x-window-tl { + border-bottom:1px solid; +} + +.x-panel-collapsed .x-window-tl { + border-bottom:1px solid; +} + +.x-window-maximized-ct { + overflow:hidden; +} + +.x-window-maximized .x-window-handle { + display:none; +} + +.x-window-sizing-ghost ul { + border:0 none !important; +} + +.x-dlg-focus{ + -moz-outline:0 none; + outline:0 none; + width:0; + height:0; + overflow:hidden; + position:absolute; + top:0; + left:0; +} + +.ext-webkit .x-dlg-focus{ + width: 1px; + height: 1px; +} + +.x-dlg-mask{ + z-index:10000; + display:none; + position:absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity:.50; + filter: alpha(opacity=50); +} + +body.ext-ie6.x-body-masked select { + visibility:hidden; +} + +body.ext-ie6.x-body-masked .x-window select { + visibility:visible; +} + +.x-window-plain .x-window-mc { + border: 1px solid; +} + +.x-window-plain .x-window-body { + border: 1px solid; + background:transparent !important; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/borders.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/borders.css new file mode 100755 index 0000000..d776673 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/borders.css @@ -0,0 +1,25 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-panel-noborder .x-panel-header-noborder { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/box.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/box.css new file mode 100755 index 0000000..01f6988 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/box.css @@ -0,0 +1,74 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-box-tl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-tc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-tr { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-ml { + background-image: url(../images/default/box/l.gif); +} + +.x-box-mc { + background-color: #eee; + background-image: url(../images/default/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 12px; +} + +.x-box-mc h3 { + font-size: 14px; + font-weight: bold; +} + +.x-box-mr { + background-image: url(../images/default/box/r.gif); +} + +.x-box-bl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-bc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-br { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(../images/default/box/corners-blue.gif); +} + +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(../images/default/box/tb-blue.gif); +} + +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +.x-box-blue .x-box-ml { + background-image: url(../images/default/box/l-blue.gif); +} + +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/button.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/button.css new file mode 100755 index 0000000..3566e83 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/button.css @@ -0,0 +1,94 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-btn{ + font:normal 11px tahoma, verdana, helvetica; +} + +.x-btn button{ + font:normal 11px arial,tahoma,verdana,helvetica; + color:#333; +} + +.x-btn em { + font-style:normal; + font-weight:normal; +} + +.x-btn-tl, .x-btn-tr, .x-btn-tc, .x-btn-ml, .x-btn-mr, .x-btn-mc, .x-btn-bl, .x-btn-br, .x-btn-bc{ + background-image:url(../images/default/button/btn.gif); +} + +.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{ + color:#000; +} + +.x-btn-disabled *{ + color:gray !important; +} + +.x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/button/arrow.gif); +} + +.x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-btn-mc em.x-btn-arrow-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-btn-click .x-btn-mc em.x-btn-split-bottom, .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-btn-pressed .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-btn-group-header { + color: #3e6aaa; +} + +.x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-tl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-tr { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-bc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-bl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-br { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-ml { + background-image: url(../images/default/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/default/button/group-lr.gif); +} + +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/combo.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/combo.css new file mode 100755 index 0000000..7672901 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/combo.css @@ -0,0 +1,43 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-combo-list { + border-color:#98c0f4; + background-color:#ddecfe; + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-combo-list-inner { + background-color:#fff; +} + +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; + background-image: url(../images/default/layout/panel-title-light-bg.gif); + border-bottom-color:#98c0f4; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom-color:#98c0f4; +} + +.x-combo-list-item { + border-color:#fff; +} + +.x-combo-list .x-combo-selected{ + border-color:#a3bae9 !important; + background-color:#dfe8f6; +} + +.x-combo-list .x-toolbar { + border-top-color:#98c0f4; +} + +.x-combo-list-small { + font:normal 11px tahoma, arial, helvetica, sans-serif; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/core.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/core.css new file mode 100755 index 0000000..a4b2773 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/core.css @@ -0,0 +1,82 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.ext-el-mask { + background-color: #ccc; +} + +.ext-el-mask-msg { + border-color:#6593cf; + background-color:#c3daf9; + background-image:url(../images/default/box/tb-blue.gif); +} +.ext-el-mask-msg div { + background-color: #eee; + border-color:#a3bad9; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-mask-loading div { + background-color:#fbfbfb; + background-image:url(../images/default/grid/loading.gif); +} + +.x-item-disabled { + color: gray; +} + +.x-item-disabled * { + color: gray !important; +} + +.x-splitbar-proxy { + background-color: #aaa; +} + +.x-color-palette a { + border-color:#fff; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border-color:#8bb8f3; + background-color: #deecfd; +} + +/* +.x-color-palette em:hover, .x-color-palette span:hover{ + background-color: #deecfd; +} +*/ + +.x-color-palette em { + border-color:#aca899; +} + +.x-ie-shadow { + background-color:#777; +} + +.x-shadow .xsmc { + background-image: url(../images/default/shadow-c.png); +} + +.x-shadow .xsml, .x-shadow .xsmr { + background-image: url(../images/default/shadow-lr.png); +} + +.x-shadow .xstl, .x-shadow .xstc, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{ + background-image: url(../images/default/shadow.png); +} + +.loading-indicator { + font-size: 11px; + background-image: url(../images/default/grid/loading.gif); +} + +.x-spotlight { + background-color: #ccc; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/date-picker.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/date-picker.css new file mode 100755 index 0000000..93b593a --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/date-picker.css @@ -0,0 +1,143 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-date-picker { + border-color: #1b376c; + background-color:#fff; +} + +.x-date-middle,.x-date-left,.x-date-right { + background-image: url(../images/default/shared/hd-sprite.gif); + color:#fff; + font:bold 11px "sans serif", tahoma, verdana, helvetica; +} + +.x-date-middle .x-btn .x-btn-text { + color:#fff; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/toolbar/btn-arrow-light.gif); +} + +.x-date-right a { + background-image: url(../images/default/shared/right-btn.gif); +} + +.x-date-left a{ + background-image: url(../images/default/shared/left-btn.gif); +} + +.x-date-inner th { + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-bottom-color:#a3bad9; + font:normal 10px arial, helvetica,tahoma,sans-serif; + color:#233d6d; +} + +.x-date-inner td { + border-color:#fff; +} + +.x-date-inner a { + font:normal 11px arial, helvetica,tahoma,sans-serif; + color:#000; +} + +.x-date-inner .x-date-active{ + color:#000; +} + +.x-date-inner .x-date-selected a{ + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-inner .x-date-today a{ + border-color:darkred; +} + +.x-date-inner .x-date-selected span{ + font-weight:bold; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + color:#aaa; +} + +.x-date-bottom { + border-top-color:#a3bad9; + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + color:#000; + background-color:#ddecfe; +} + +.x-date-inner .x-date-disabled a { + background-color:#eee; + color:#bbb; +} + +.x-date-mmenu{ + background-color:#eee !important; +} + +.x-date-mmenu .x-menu-item { + font-size:10px; + color:#000; +} + +.x-date-mp { + background-color:#fff; +} + +.x-date-mp td { + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns button { + background-color:#083772; + color:#fff; + border-color: #3366cc #000055 #000055 #3366cc; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); +} + +.x-date-mp-btns td { + border-top-color: #c5d2df; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + color:#15428b; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + color:#15428b; + background-color: #ddecfe; +} + +td.x-date-mp-sel a { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-mp-ybtn a { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +td.x-date-mp-sep { + border-right-color:#c5d2df; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/dd.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/dd.css new file mode 100755 index 0000000..453aa91 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/dd.css @@ -0,0 +1,29 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-dd-drag-ghost{ + color:#000; + font: normal 11px arial, helvetica, sans-serif; + border-color: #ddd #bbb #bbb #ddd; + background-color:#fff; +} + +.x-dd-drop-nodrop .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-no.gif); +} + +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} + +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} + +.x-view-selector { + background-color:#c3daf9; + border-color:#3399bb; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/debug.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/debug.css new file mode 100755 index 0000000..111dd00 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/debug.css @@ -0,0 +1,24 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +#x-debug-browser .x-tree .x-tree-node a span { + color:#222297; + font-size:11px; + font-family:"monotype","courier new",sans-serif; +} + +#x-debug-browser .x-tree a i { + color:#ff4545; + font-style:normal; +} + +#x-debug-browser .x-tree a em { + color:#999; +} + +#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{ + background-color:#c3daf9; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/dialog.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/dialog.css new file mode 100755 index 0000000..dbc9e09 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/dialog.css @@ -0,0 +1,34 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-window-dlg .ext-mb-text, +.x-window-dlg .x-window-header-text { + font-size:12px; +} + +.x-window-dlg .ext-mb-textarea { + font:normal 12px tahoma,arial,helvetica,sans-serif; +} + +.x-window-dlg .x-msg-box-wait { + background-image:url(../images/default/grid/loading.gif); +} + +.x-window-dlg .ext-mb-info { + background-image:url(../images/default/window/icon-info.gif); +} + +.x-window-dlg .ext-mb-warning { + background-image:url(../images/default/window/icon-warning.gif); +} + +.x-window-dlg .ext-mb-question { + background-image:url(../images/default/window/icon-question.gif); +} + +.x-window-dlg .ext-mb-error { + background-image:url(../images/default/window/icon-error.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/editor.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/editor.css new file mode 100755 index 0000000..912d2cf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/editor.css @@ -0,0 +1,13 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-html-editor-wrap { + border-color:#a9bfd3; + background-color:#fff; +} +.x-html-editor-tb .x-btn-text { + background-image:url(../images/default/editor/tb-sprite.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/form.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/form.css new file mode 100755 index 0000000..df55188 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/form.css @@ -0,0 +1,123 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-form-field { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-text, textarea.x-form-field { + background-color:#fff; + background-image:url(../images/default/form/text-bg.gif); + border-color:#b5b8c8; +} + +.x-form-select-one { + background-color:#fff; + border-color:#b5b8c8; +} + +.x-form-check-group-label { + border-bottom: 1px solid #99bbe8; + color: #15428b; +} + +.x-editor .x-form-check-wrap { + background-color:#fff; +} + +.x-form-field-wrap .x-form-trigger { + background-image:url(../images/default/form/trigger.gif); + border-bottom-color:#b5b8c8; +} + +.x-form-field-wrap .x-form-date-trigger { + background-image: url(../images/default/form/date-trigger.gif); +} + +.x-form-field-wrap .x-form-clear-trigger { + background-image: url(../images/default/form/clear-trigger.gif); +} + +.x-form-field-wrap .x-form-search-trigger { + background-image: url(../images/default/form/search-trigger.gif); +} + +.x-trigger-wrap-focus .x-form-trigger { + border-bottom-color:#7eadd9; +} + +.x-item-disabled .x-form-trigger-over { + border-bottom-color:#b5b8c8; +} + +.x-item-disabled .x-form-trigger-click { + border-bottom-color:#b5b8c8; +} + +.x-form-focus, textarea.x-form-focus { + border-color:#7eadd9; +} + +.x-form-invalid, textarea.x-form-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.x-form-invalid.x-form-composite { + border: none; + background-image: none; +} + +.x-form-invalid.x-form-composite .x-form-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid { + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); +} + +.x-form-grow-sizer { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-item { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-invalid-msg { + color:#c0272b; + font:normal 11px tahoma, arial, helvetica, sans-serif; + background-image:url(../images/default/shared/warning.gif); +} + +.x-form-empty-field { + color:gray; +} + +.x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-webkit .x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-form-invalid-icon { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-fieldset { + border-color:#b5b8c8; +} + +.x-fieldset legend { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/grid.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/grid.css new file mode 100755 index 0000000..388068d --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/grid.css @@ -0,0 +1,277 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-grid3 { + background-color:#fff; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border-color:#99bbe8; +} + +.x-grid3-row td, .x-grid3-summary-row td{ + font:normal 11px/13px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row td { + font:normal 11px/15px arial, tahoma, helvetica, sans-serif; +} + + +.x-grid3-hd-row td { + border-left-color:#eee; + border-right-color:#d0d0d0; +} + +.x-grid-row-loading { + background-color: #fff; + background-image:url(../images/default/shared/loading-balls.gif); +} + +.x-grid3-row { + border-color:#ededed; + border-top-color:#fff; +} + +.x-grid3-row-alt{ + background-color:#fafafa; +} + +.x-grid3-row-over { + border-color:#ddd; + background-color:#efefef; + background-image:url(../images/default/grid/row-over.gif); +} + +.x-grid3-resize-proxy { + background-color:#777; +} + +.x-grid3-resize-marker { + background-color:#777; +} + +.x-grid3-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-grid3-header-pop { + border-left-color:#d0d0d0; +} + +.x-grid3-header-pop-inner { + border-left-color:#eee; + background-image:url(../images/default/grid/hd-pop.gif); +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left-color:#aaccf6; + border-right-color:#aaccf6; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + +} + +.sort-asc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_asc.gif); +} + +.sort-desc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_desc.gif); +} + +.x-grid3-cell-text, .x-grid3-hd-text { + color:#000; +} + +.x-grid3-split { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-grid3-hd-text { + color:#15428b; +} + +.x-dd-drag-proxy .x-grid3-hd-inner{ + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + border-color:#aaccf6; +} + +.col-move-top{ + background-image:url(../images/default/grid/col-move-top.gif); +} + +.col-move-bottom{ + background-image:url(../images/default/grid/col-move-bottom.gif); +} + +td.grid-hd-group-cell { + background: url(../images/default/grid/grid3-hrow.gif) repeat-x bottom; +} + +.x-grid3-row-selected { + background-color: #dfe8f6 !important; + background-image: none; + border-color:#a3bae9; +} + +.x-grid3-cell-selected{ + background-color: #b8cfee !important; + color:#000; +} + +.x-grid3-cell-selected span{ + color:#000 !important; +} + +.x-grid3-cell-selected .x-grid3-cell-text{ + color:#000; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background-color:#ebeadb !important; + background-image:url(../images/default/grid/grid-hrow.gif) !important; + color:#000; + border-top-color:#fff; + border-right-color:#6fa0df !important; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + color:#15428b !important; +} + +.x-grid3-dirty-cell { + background-image:url(../images/default/grid/dirty.gif); +} + +.x-grid3-topbar, .x-grid3-bottombar{ + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-bottombar .x-toolbar{ + border-top-color:#a9bfd3; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background-image:url(../images/default/grid/grid3-special-col-bg.gif) !important; + color:#000 !important; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + background-color:#fff !important; + border-right-color:#eee; +} + +.xg-hmenu-sort-asc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-asc.gif); +} + +.xg-hmenu-sort-desc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-desc.gif); +} + +.xg-hmenu-lock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-lock.gif); +} + +.xg-hmenu-unlock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +.x-grid3-hd-btn { + background-color:#c3daf9; + background-image:url(../images/default/grid/grid3-hd-btn.gif); +} + +.x-grid3-body .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-expander { + background-image:url(../images/default/grid/row-expand-sprite.gif); +} + +.x-grid3-body .x-grid3-td-checker { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + background-image:url(../images/default/grid/row-check-sprite.gif); +} + +.x-grid3-body .x-grid3-td-numberer { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + color:#444; +} + +.x-grid3-body .x-grid3-td-row-icon { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-sel-bg.gif); +} + +.x-grid3-check-col { + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-grid3-check-col-on { + background-image:url(../images/default/menu/checked.gif); +} + +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom-color:#99bbe8; +} + +.x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/default/grid/group-collapse.gif); + color:#3764a0; + font:bold 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/default/grid/group-expand.gif); +} + +.x-group-by-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-cols-icon { + background-image:url(../images/default/grid/columns.gif); +} + +.x-show-groups-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-grid-empty { + color:gray; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + border-right-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row-selected { + border-top-color:#a3bae9; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/index.html b/ehcp/extplorer/scripts/extjs3/resources/css/visual/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/layout.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/layout.css new file mode 100755 index 0000000..eaa983e --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/layout.css @@ -0,0 +1,53 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-border-layout-ct { + background-color:#dfe8f6; +} + +.x-accordion-hd { + color:#222; + font-weight:normal; + background-image: url(../images/default/panel/light-hd.gif); +} + +.x-layout-collapsed{ + background-color:#d2e0f2; + border-color:#98c0f4; +} + +.x-layout-collapsed-over{ + background-color:#d9e8fb; +} + +.x-layout-split-west .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-split-east .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-split-north .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-layout-split-south .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-west .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} + +.x-layout-cmini-east .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} + +.x-layout-cmini-north .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-south .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/list-view.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/list-view.css new file mode 100755 index 0000000..86c7aef --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/list-view.css @@ -0,0 +1,37 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-list-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-list-header-inner div em { + border-left-color:#ddd; + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-body dt em { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-over { + background-color:#eee; +} + +.x-list-selected { + background-color:#dfe8f6; +} + +.x-list-resizer { + border-left-color:#555; + border-right-color:#555; +} + +.x-list-header-inner em.sort-asc, .x-list-header-inner em.sort-desc { + background-image:url(../images/default/grid/sort-hd.gif); + border-color: #99bbe8; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/menu.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/menu.css new file mode 100755 index 0000000..416f4cd --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/menu.css @@ -0,0 +1,87 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-menu { + background-color:#f0f0f0; + background-image:url(../images/default/menu/menu.gif); +} + +.x-menu-floating{ + border-color:#718bb7; +} + +.x-menu-nosep { + background-image:none; +} + +.x-menu-list-item{ + font:normal 11px arial,tahoma,sans-serif; +} + +.x-menu-item-arrow{ + background-image:url(../images/default/menu/menu-parent.gif); +} + +.x-menu-sep { + background-color:#e0e0e0; + border-bottom-color:#fff; +} + +a.x-menu-item { + color:#222; +} + +.x-menu-item-active { + background-image: url(../images/default/menu/item-over.gif); + background-color: #dbecf4; + border-color:#aaccf6; +} + +.x-menu-item-active a.x-menu-item { + border-color:#aaccf6; +} + +.x-menu-check-item .x-menu-item-icon{ + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/default/menu/checked.gif); +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background-image:url(../images/default/menu/group-checked.gif); +} + +.x-menu-group-item .x-menu-item-icon{ + background-image:none; +} + +.x-menu-plain { + background-color:#f0f0f0 !important; + background-image: none; +} + +.x-date-menu, .x-color-menu{ + background-color: #fff !important; +} + +.x-menu .x-date-picker{ + border-color:#a3bad9; +} + +.x-cycle-menu .x-menu-item-checked { + border-color:#a3bae9 !important; + background-color:#def8f6; +} + +.x-menu-scroller-top { + background-image:url(../images/default/layout/mini-top.gif); +} + +.x-menu-scroller-bottom { + background-image:url(../images/default/layout/mini-bottom.gif); +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/panel.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/panel.css new file mode 100755 index 0000000..d72ba21 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/panel.css @@ -0,0 +1,87 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-panel { + border-color: #99bbe8; +} + +.x-panel-header { + color:#15428b; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; + border-color:#99bbe8; + background-image: url(../images/default/panel/white-top-bottom.gif); +} + +.x-panel-body { + border-color:#99bbe8; + background-color:#fff; +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border-color:#99bbe8; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top-color:#99bbe8; +} + +.x-panel-tl .x-panel-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-panel-tc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-tl, .x-panel-tr, .x-panel-bl, .x-panel-br{ + background-image: url(../images/default/panel/corners-sprite.gif); + border-bottom-color:#99bbe8; +} + +.x-panel-bc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-panel-ml { + background-color: #fff; + background-image:url(../images/default/panel/left-right.gif); +} + +.x-panel-mr { + background-image: url(../images/default/panel/left-right.gif); +} + +.x-tool { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +.x-panel-ghost { + background-color:#cbddf3; +} + +.x-panel-ghost ul { + border-color:#99bbe8; +} + +.x-panel-dd-spacer { + border-color:#99bbe8; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/pivotgrid.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/pivotgrid.css new file mode 100755 index 0000000..cbccfda --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/pivotgrid.css @@ -0,0 +1,28 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-pivotgrid .x-grid3-header-offset table td { + background: url(../images/default/grid/grid3-hrow.gif) repeat-x 50% 100%; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #EEE; + border-right-color: #D0D0D0; +} + +.x-pivotgrid .x-grid3-row-headers { + background-color: #f9f9f9; +} + +.x-pivotgrid .x-grid3-row-headers table td { + background: #EEE url(../images/default/grid/grid3-rowheader.gif) repeat-x left top; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #EEE; + border-right-color: #D0D0D0; + border-bottom: 1px solid; + border-bottom-color: #D0D0D0; + height: 18px; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/progress.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/progress.css new file mode 100755 index 0000000..21ca06f --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/progress.css @@ -0,0 +1,32 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-progress-wrap { + border-color:#6593cf; +} + +.x-progress-inner { + background-color:#e0e8f3; + background-image:url(../images/default/qtip/bg.gif); +} + +.x-progress-bar { + background-color:#9cbfee; + background-image:url(../images/default/progress/progress-bg.gif); + border-top-color:#d1e4fd; + border-bottom-color:#7fa9e4; + border-right-color:#7fa9e4; +} + +.x-progress-text { + font-size:11px; + font-weight:bold; + color:#fff; +} + +.x-progress-text-back { + color:#396095; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/qtips.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/qtips.css new file mode 100755 index 0000000..fe1dc5b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/qtips.css @@ -0,0 +1,44 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-tip .x-tip-close{ + background-image: url(../images/default/qtip/close.gif); +} + +.x-tip .x-tip-tc, .x-tip .x-tip-tl, .x-tip .x-tip-tr, .x-tip .x-tip-bc, .x-tip .x-tip-bl, .x-tip .x-tip-br, .x-tip .x-tip-ml, .x-tip .x-tip-mr { + background-image: url(../images/default/qtip/tip-sprite.gif); +} + +.x-tip .x-tip-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; +} +.x-tip .x-tip-ml { + background-color: #fff; +} + +.x-tip .x-tip-header-text { + font: bold 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-tip .x-tip-body { + font: normal 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-form-invalid-tip .x-tip-tc, .x-form-invalid-tip .x-tip-tl, .x-form-invalid-tip .x-tip-tr, .x-form-invalid-tip .x-tip-bc, +.x-form-invalid-tip .x-tip-bl, .x-form-invalid-tip .x-tip-br, .x-form-invalid-tip .x-tip-ml, .x-form-invalid-tip .x-tip-mr +{ + background-image: url(../images/default/form/error-tip-corners.gif); +} + +.x-form-invalid-tip .x-tip-body { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-tip-anchor { + background-image:url(../images/default/qtip/tip-anchor-sprite.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/resizable.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/resizable.css new file mode 100755 index 0000000..e890718 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/resizable.css @@ -0,0 +1,43 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-resizable-handle { + background-color:#fff; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-image:url(../images/default/sizer/e-handle.gif); +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-image:url(../images/default/sizer/s-handle.gif); +} + +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background-image:url(../images/default/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-image:url(../images/default/sizer/se-handle.gif); +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-image:url(../images/default/sizer/nw-handle.gif); +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-image:url(../images/default/sizer/ne-handle.gif); +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-image:url(../images/default/sizer/sw-handle.gif); +} +.x-resizable-proxy{ + border-color:#3b5a82; +} +.x-resizable-overlay{ + background-color:#fff; +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/slider.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/slider.css new file mode 100755 index 0000000..6aaf37b --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/slider.css @@ -0,0 +1,21 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-slider-horz, .x-slider-horz .x-slider-end, .x-slider-horz .x-slider-inner { + background-image:url(../images/default/slider/slider-bg.png); +} + +.x-slider-horz .x-slider-thumb { + background-image:url(../images/default/slider/slider-thumb.png); +} + +.x-slider-vert, .x-slider-vert .x-slider-end, .x-slider-vert .x-slider-inner { + background-image:url(../images/default/slider/slider-v-bg.png); +} + +.x-slider-vert .x-slider-thumb { + background-image:url(../images/default/slider/slider-v-thumb.png); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/tabs.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/tabs.css new file mode 100755 index 0000000..c361528 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/tabs.css @@ -0,0 +1,127 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-tab-panel-header, .x-tab-panel-footer { + background-color: #deecfd; + border-color:#8db2e3; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border-color:#8db2e3; +} + +ul.x-tab-strip-top{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-bg.gif); + border-bottom-color:#8db2e3; +} + +ul.x-tab-strip-bottom{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-btm-bg.gif); + border-top-color:#8db2e3; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-color:#8db2e3; + background-color: #deecfd; +} + +.x-tab-strip span.x-tab-strip-text { + font:normal 11px tahoma,arial,helvetica; + color:#416aa3; +} + +.x-tab-strip-over span.x-tab-strip-text { + color:#15428b; +} + +.x-tab-strip-active span.x-tab-strip-text { + color:#15428b; + font-weight:bold; +} + +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} + +.x-tab-strip-top .x-tab-right, .x-tab-strip-top .x-tab-left, .x-tab-strip-top .x-tab-strip-inner{ + background-image: url(../images/default/tabs/tabs-sprite.gif); +} + +.x-tab-strip-bottom .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-inactive-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-inactive-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-over-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-over-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-left-bg.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-panel-body { + border-color:#8db2e3; + background-color:#fff; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background-image:url(../images/default/tabs/scroll-left.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background-image:url(../images/default/tabs/scroll-right.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-panel-bbar .x-toolbar, .x-tab-panel-tbar .x-toolbar { + border-color:#99bbe8; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/toolbar.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/toolbar.css new file mode 100755 index 0000000..100fe93 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/toolbar.css @@ -0,0 +1,95 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-toolbar{ + border-color:#a9bfd3; + background-color:#d0def0; + background-image:url(../images/default/toolbar/bg.gif); +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} + +.x-toolbar .x-item-disabled { + color:gray; +} + +.x-toolbar .x-item-disabled * { + color:gray; +} + +.x-toolbar .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split +{ + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-toolbar .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom +{ + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-toolbar .xtb-sep { + background-image: url(../images/default/grid/grid-blue-split.gif); +} + +.x-tbar-page-first{ + background-image: url(../images/default/grid/page-first.gif) !important; +} + +.x-tbar-loading{ + background-image: url(../images/default/grid/refresh.gif) !important; +} + +.x-tbar-page-last{ + background-image: url(../images/default/grid/page-last.gif) !important; +} + +.x-tbar-page-next{ + background-image: url(../images/default/grid/page-next.gif) !important; +} + +.x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev.gif) !important; +} + +.x-item-disabled .x-tbar-loading{ + background-image: url(../images/default/grid/refresh-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-first{ + background-image: url(../images/default/grid/page-first-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-last{ + background-image: url(../images/default/grid/page-last-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-next{ + background-image: url(../images/default/grid/page-next-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev-disabled.gif) !important; +} + +.x-paging-info { + color:#444; +} + +.x-toolbar-more-icon { + background-image: url(../images/default/toolbar/more.gif) !important; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/tree.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/tree.css new file mode 100755 index 0000000..df67769 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/tree.css @@ -0,0 +1,152 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/default/tree/folder-open.gif); +} + +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/default/tree/leaf.gif); +} + +.x-tree-node-collapsed .x-tree-node-icon{ + background-image:url(../images/default/tree/folder.gif); +} + +.x-tree-node-loading .x-tree-node-icon{ + background-image:url(../images/default/tree/loading.gif) !important; +} + +.x-tree-node .x-tree-node-inline-icon { + background-image: none; +} + +.x-tree-node-loading a span{ + font-style: italic; + color:#444444; +} + +.x-tree-lines .x-tree-elbow{ + background-image:url(../images/default/tree/elbow.gif); +} + +.x-tree-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus.gif); +} + +.x-tree-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus.gif); +} + +.x-tree-lines .x-tree-elbow-end{ + background-image:url(../images/default/tree/elbow-end.gif); +} + +.x-tree-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus.gif); +} + +.x-tree-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus.gif); +} + +.x-tree-lines .x-tree-elbow-line{ + background-image:url(../images/default/tree/elbow-line.gif); +} + +.x-tree-no-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus-nl.gif); +} + +.x-tree-arrows .x-tree-elbow-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-node{ + color:#000; + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + color:#000; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + color:#000; +} + +.x-tree-node .x-tree-node-disabled a span{ + color:gray !important; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom-color:#36c; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top-color:#36c; +} + +.x-tree-node .x-tree-drag-append a span{ + background-color:#ddd; + border-color:gray; +} + +.x-tree-node .x-tree-node-over { + background-color: #eee; +} + +.x-tree-node .x-tree-selected { + background-color: #d9e8fb; +} + +.x-tree-drop-ok-append .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-add.gif); +} + +.x-tree-drop-ok-above .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-over.gif); +} + +.x-tree-drop-ok-below .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-under.gif); +} + +.x-tree-drop-ok-between .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-between.gif); +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/visual/window.css b/ehcp/extplorer/scripts/extjs3/resources/css/visual/window.css new file mode 100755 index 0000000..e556dcf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/visual/window.css @@ -0,0 +1,86 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.x-window-proxy { + background-color:#c7dffc; + border-color:#99bbe8; +} + +.x-window-tl .x-window-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-window-tc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-tl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-tr { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-bc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-bl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-br { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-mc { + border-color:#99bbe8; + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-window-ml { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-mr { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-maximized .x-window-tc { + background-color:#fff; +} + +.x-window-bbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-ghost .x-window-tl { + border-bottom-color:#99bbe8; +} + +.x-panel-collapsed .x-window-tl { + border-bottom-color:#84a0c4; +} + +.x-dlg-mask{ + background-color:#ccc; +} + +.x-window-plain .x-window-mc { + background-color: #ccd9e8; + border-color: #a3bae9 #dfe8f6 #dfe8f6 #a3bae9; +} + +.x-window-plain .x-window-body { + border-color: #dfe8f6 #a3bae9 #a3bae9 #dfe8f6; +} + +body.x-body-masked .x-window-plain .x-window-mc { + background-color: #ccd9e8; +} \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/css/xtheme-blue.css b/ehcp/extplorer/scripts/extjs3/resources/css/xtheme-blue.css new file mode 100755 index 0000000..9f37122 --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/css/xtheme-blue.css @@ -0,0 +1,1670 @@ +/* + * Ext JS Library 3.0 RC2 + * Copyright(c) 2006-2009, Ext JS, LLC. + * licensing@extjs.com + * + * http://extjs.com/license + */ + +.ext-el-mask { + background-color: #ccc; +} + +.ext-el-mask-msg { + border-color:#6593cf; + background-color:#c3daf9; + background-image:url(../images/default/box/tb-blue.gif); +} +.ext-el-mask-msg div { + background-color: #eee; + border-color:#a3bad9; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-mask-loading div { + background-color:#fbfbfb; + background-image:url(../images/default/grid/loading.gif); +} + +.x-item-disabled { + color: gray; +} + +.x-item-disabled * { + color: gray !important; +} + +.x-splitbar-proxy { + background-color: #aaa; +} + +.x-color-palette a { + border-color:#fff; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border-color:#8bb8f3; + background-color: #deecfd; +} + +.x-color-palette em { + border-color:#aca899; +} + +.x-ie-shadow { + background-color:#777; +} + +.x-shadow .xsmc { + background-image: url(../images/default/shadow-c.png); +} + +.x-shadow .xsml, .x-shadow .xsmr { + background-image: url(../images/default/shadow-lr.png); +} + +.x-shadow .xstl, .x-shadow .xstc, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{ + background-image: url(../images/default/shadow.png); +} + +.loading-indicator { + font-size: 11px; + background-image: url(../images/default/grid/loading.gif); +} + +.x-spotlight { + background-color: #ccc; +} + +.x-tab-panel-header, .x-tab-panel-footer { + background-color: #deecfd; + border-color:#8db2e3; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border-color:#8db2e3; +} + +ul.x-tab-strip-top{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-bg.gif); + border-bottom-color:#8db2e3; +} + +ul.x-tab-strip-bottom{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-btm-bg.gif); + border-top-color:#8db2e3; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-color:#8db2e3; + background-color: #deecfd; +} + +.x-tab-strip span.x-tab-strip-text { + font:normal 11px tahoma,arial,helvetica; + color:#416aa3; +} + +.x-tab-strip-over span.x-tab-strip-text { + color:#15428b; +} + +.x-tab-strip-active span.x-tab-strip-text { + color:#15428b; + font-weight:bold; +} + +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} + +.x-tab-strip-top .x-tab-right, .x-tab-strip-top .x-tab-left, .x-tab-strip-top .x-tab-strip-inner{ + background-image: url(../images/default/tabs/tabs-sprite.gif); +} + +.x-tab-strip-bottom .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-inactive-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-inactive-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-left-bg.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/default/tabs/tab-close.gif); +} + +.x-tab-panel-body { + border-color:#8db2e3; + background-color:#fff; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background-image:url(../images/default/tabs/scroll-left.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background-image:url(../images/default/tabs/scroll-right.gif); + border-bottom-color:#8db2e3; +} + +.x-tab-panel-bbar .x-toolbar, .x-tab-panel-tbar .x-toolbar { + border-color:#99bbe8; +} +.x-form-field{ + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-text, textarea.x-form-field{ + background-color:#fff; + background-image:url(../images/default/form/text-bg.gif); + border-color:#b5b8c8; +} + +.x-form-select-one { + background-color:#fff; + border-color:#b5b8c8; +} + +.x-form-check-group-label { + border-bottom: 1px solid #99bbe8; + color: #15428b; +} + +.x-editor .x-form-check-wrap { + background-color:#fff; +} + +.x-form-field-wrap .x-form-trigger{ + background-image:url(../images/default/form/trigger.gif); + border-bottom-color:#b5b8c8; +} + +.x-form-field-wrap .x-form-date-trigger{ + background-image: url(../images/default/form/date-trigger.gif); +} + +.x-form-field-wrap .x-form-clear-trigger{ + background-image: url(../images/default/form/clear-trigger.gif); +} + +.x-form-field-wrap .x-form-search-trigger{ + background-image: url(../images/default/form/search-trigger.gif); +} + +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom-color:#7eadd9; +} + +.x-item-disabled .x-form-trigger-over{ + border-bottom-color:#b5b8c8; +} + +.x-item-disabled .x-form-trigger-click{ + border-bottom-color:#b5b8c8; +} + +.x-form-focus, textarea.x-form-focus{ + border-color:#7eadd9; +} + +.x-form-invalid, textarea.x-form-invalid{ + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.ext-safari .x-form-invalid{ + background-color:#fee; + border-color:#ff7870; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid{ + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); +} + +.x-form-grow-sizer { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-item { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-invalid-msg { + color:#c0272b; + font:normal 11px tahoma, arial, helvetica, sans-serif; + background-image:url(../images/default/shared/warning.gif); +} + +.x-form-empty-field { + color:gray; +} + +.x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-safari .x-small-editor .x-form-field { + font:normal 12px arial, tahoma, helvetica, sans-serif; +} + +.x-form-invalid-icon { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-fieldset { + border-color:#b5b8c8; +} + +.x-fieldset legend { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; +} + +.x-btn{ + font:normal 11px tahoma, verdana, helvetica; +} + +.x-btn button{ + font:normal 11px arial,tahoma,verdana,helvetica; + color:#333; +} + +.x-btn em { + font-style:normal; + font-weight:normal; +} + +.x-btn-tl, .x-btn-tr, .x-btn-tc, .x-btn-ml, .x-btn-mr, .x-btn-mc, .x-btn-bl, .x-btn-br, .x-btn-bc{ + background-image:url(../images/default/button/btn.gif); +} + +.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{ + color:#000; +} + +.x-btn-disabled *{ + color:gray !important; +} + +.x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/button/arrow.gif); +} + +.x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-btn-mc em.x-btn-arrow-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-btn-click .x-btn-mc em.x-btn-split-bottom, .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-btn-pressed .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-btn-group-header { + color: #3e6aaa; +} + +.x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-tl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-tr { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-bc { + background-image: url(../images/default/button/group-tb.gif); +} + +.x-btn-group-bl { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-br { + background-image: url(../images/default/button/group-cs.gif); +} + +.x-btn-group-ml { + background-image: url(../images/default/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/default/button/group-lr.gif); +} + +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} +.x-toolbar{ + border-color:#a9bfd3; + background-color:#d0def0; + background-image:url(../images/default/toolbar/bg.gif); +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} + +.x-toolbar .x-item-disabled { + color:gray; +} + +.x-toolbar .x-item-disabled * { + color:gray; +} + +.x-toolbar .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split +{ + background-image:url(../images/default/button/s-arrow-o.gif); +} + +.x-toolbar .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom +{ + background-image:url(../images/default/button/s-arrow-bo.gif); +} + +.x-toolbar .xtb-sep { + background-image: url(../images/default/grid/grid-blue-split.gif); +} + +.x-tbar-page-first{ + background-image: url(../images/default/grid/page-first.gif) !important; +} + +.x-tbar-loading{ + background-image: url(../images/default/grid/refresh.gif) !important; +} + +.x-tbar-page-last{ + background-image: url(../images/default/grid/page-last.gif) !important; +} + +.x-tbar-page-next{ + background-image: url(../images/default/grid/page-next.gif) !important; +} + +.x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev.gif) !important; +} + +.x-item-disabled .x-tbar-loading{ + background-image: url(../images/default/grid/loading.gif) !important; +} + +.x-item-disabled .x-tbar-page-first{ + background-image: url(../images/default/grid/page-first-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-last{ + background-image: url(../images/default/grid/page-last-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-next{ + background-image: url(../images/default/grid/page-next-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev-disabled.gif) !important; +} + +.x-paging-info { + color:#444; +} + +.x-toolbar-more-icon { + background-image: url(../images/default/toolbar/more.gif) !important; +} + +.x-statusbar .x-status-busy { + background-image: url(../images/default/grid/loading.gif); +} + +.x-statusbar .x-status-text-panel { + border-color: #99bbe8 #fff #fff #99bbe8; +} +.x-resizable-handle { + background-color:#fff; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-image:url(../images/default/sizer/e-handle.gif); +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-image:url(../images/default/sizer/s-handle.gif); +} + +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background-image:url(../images/default/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-image:url(../images/default/sizer/se-handle.gif); +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-image:url(../images/default/sizer/nw-handle.gif); +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-image:url(../images/default/sizer/ne-handle.gif); +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-image:url(../images/default/sizer/sw-handle.gif); +} +.x-resizable-proxy{ + border-color:#3b5a82; +} +.x-resizable-overlay{ + background-color:#fff; +} + +.x-grid3 { + background-color:#fff; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border-color:#99bbe8; +} + +.x-grid3-hd-row td, .x-grid3-row td, .x-grid3-summary-row td{ + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row td { + border-left-color:#eee; + border-right-color:#d0d0d0; +} + +.x-grid-row-loading { + background-color: #fff; + background-image:url(../images/default/shared/loading-balls.gif); +} + +.x-grid3-row { + border-color:#ededed; + border-top-color:#fff; +} + +.x-grid3-row-alt{ + background-color:#fafafa; +} + +.x-grid3-row-over { + border-color:#ddd; + background-color:#efefef; + background-image:url(../images/default/grid/row-over.gif); +} + +.x-grid3-resize-proxy { + background-color:#777; +} + +.x-grid3-resize-marker { + background-color:#777; +} + +.x-grid3-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-grid3-header-pop { + border-left-color:#d0d0d0; +} + +.x-grid3-header-pop-inner { + border-left-color:#eee; + background-image:url(../images/default/grid/hd-pop.gif); +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left-color:#aaccf6; + border-right-color:#aaccf6; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + +} + +.sort-asc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_asc.gif); +} + +.sort-desc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_desc.gif); +} + +.x-grid3-cell-text, .x-grid3-hd-text { + color:#000; +} + +.x-grid3-split { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-grid3-hd-text { + color:#15428b; +} + +.x-dd-drag-proxy .x-grid3-hd-inner{ + background-color:#ebf3fd; + background-image:url(../images/default/grid/grid3-hrow-over.gif); + border-color:#aaccf6; +} + +.col-move-top{ + background-image:url(../images/default/grid/col-move-top.gif); +} + +.col-move-bottom{ + background-image:url(../images/default/grid/col-move-bottom.gif); +} + +.x-grid3-row-selected { + background-color: #dfe8f6 !important; + background-image: none; + border-color:#a3bae9; +} + +.x-grid3-cell-selected{ + background-color: #b8cfee !important; + color:#000; +} + +.x-grid3-cell-selected span{ + color:#000 !important; +} + +.x-grid3-cell-selected .x-grid3-cell-text{ + color:#000; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background-color:#ebeadb !important; + background-image:url(../images/default/grid/grid-hrow.gif) !important; + color:#000; + border-top-color:#fff; + border-right-color:#6fa0df !important; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + color:#15428b !important; +} + +.x-grid3-dirty-cell { + background-image:url(../images/default/grid/dirty.gif); +} + +.x-grid3-topbar, .x-grid3-bottombar{ + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-bottombar .x-toolbar{ + border-top-color:#a9bfd3; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background-image:url(../images/default/grid/grid3-special-col-bg.gif) !important; + color:#000 !important; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + background-color:#fff !important; + border-right-color:#eee; +} + +.xg-hmenu-sort-asc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-asc.gif); +} + +.xg-hmenu-sort-desc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-desc.gif); +} + +.xg-hmenu-lock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-lock.gif); +} + +.xg-hmenu-unlock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +.x-grid3-hd-btn { + background-color:#c3daf9; + background-image:url(../images/default/grid/grid3-hd-btn.gif); +} + +.x-grid3-body .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-expander { + background-image:url(../images/default/grid/row-expand-sprite.gif); +} + +.x-grid3-body .x-grid3-td-checker { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + background-image:url(../images/default/grid/row-check-sprite.gif); +} + +.x-grid3-body .x-grid3-td-numberer { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + color:#444; +} + +.x-grid3-body .x-grid3-td-row-icon { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-sel-bg.gif); +} + +.x-grid3-check-col { + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-grid3-check-col-on { + background-image:url(../images/default/menu/checked.gif); +} + +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom-color:#99bbe8; +} + +.x-grid-group-hd div { + background-image:url(../images/default/grid/group-expand-sprite.gif); + color:#3764a0; + font:bold 11px tahoma, arial, helvetica, sans-serif; +} + +.x-group-by-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-cols-icon { + background-image:url(../images/default/grid/columns.gif); +} + +.x-show-groups-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-grid-empty { + color:gray; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + border-right-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row{ + border-top-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row-selected { + border-top-color:#a3bae9; +} +.x-dd-drag-ghost{ + color:#000; + font: normal 11px arial, helvetica, sans-serif; + border-color: #ddd #bbb #bbb #ddd; + background-color:#fff; +} + +.x-dd-drop-nodrop .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-no.gif); +} + +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} + +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} + +.x-view-selector { + background-color:#c3daf9; + border-color:#3399bb; +} +.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/default/tree/folder-open.gif); +} + +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/default/tree/leaf.gif); +} + +.x-tree-node-collapsed .x-tree-node-icon{ + background-image:url(../images/default/tree/folder.gif); +} + +.x-tree-node-loading .x-tree-node-icon{ + background-image:url(../images/default/tree/loading.gif) !important; +} + +.x-tree-node .x-tree-node-inline-icon { + background-image: none; +} + +.x-tree-node-loading a span{ + font-style: italic; + color:#444444; +} + +.ext-ie .x-tree-node-el input { + width:15px; + height:15px; +} + +.x-tree-lines .x-tree-elbow{ + background-image:url(../images/default/tree/elbow.gif); +} + +.x-tree-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus.gif); +} + +.x-tree-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus.gif); +} + +.x-tree-lines .x-tree-elbow-end{ + background-image:url(../images/default/tree/elbow-end.gif); +} + +.x-tree-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus.gif); +} + +.x-tree-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus.gif); +} + +.x-tree-lines .x-tree-elbow-line{ + background-image:url(../images/default/tree/elbow-line.gif); +} + +.x-tree-no-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus-nl.gif); +} + +.x-tree-arrows .x-tree-elbow-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/arrows.gif); +} + +.x-tree-node{ + color:#000; + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + color:#000; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + color:#000; +} + +.x-tree-node .x-tree-node-disabled a span{ + color:gray !important; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom-color:#36c; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top-color:#36c; +} + +.x-tree-node .x-tree-drag-append a span{ + background-color:#ddd; + border-color:gray; +} + +.x-tree-node .x-tree-node-over { + background-color: #eee; +} + +.x-tree-node .x-tree-selected { + background-color: #d9e8fb; +} + +.x-tree-drop-ok-append .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-add.gif); +} + +.x-tree-drop-ok-above .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-over.gif); +} + +.x-tree-drop-ok-below .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-under.gif); +} + +.x-tree-drop-ok-between .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-between.gif); +} +.x-date-picker { + border-color: #1b376c; + background-color:#fff; +} + +.x-date-middle,.x-date-left,.x-date-right { + background-image: url(../images/default/shared/hd-sprite.gif); + color:#fff; + font:bold 11px "sans serif", tahoma, verdana, helvetica; +} + +.x-date-middle .x-btn .x-btn-text { + color:#fff; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/toolbar/btn-arrow-light.gif); +} + +.x-date-right a { + background-image: url(../images/default/shared/right-btn.gif); +} + +.x-date-left a{ + background-image: url(../images/default/shared/left-btn.gif); +} + +.x-date-inner th { + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-bottom-color:#a3bad9; + font:normal 10px arial, helvetica,tahoma,sans-serif; + color:#233d6d; +} + +.x-date-inner td { + border-color:#fff; +} + +.x-date-inner a { + font:normal 11px arial, helvetica,tahoma,sans-serif; + color:#000; +} + +.x-date-inner .x-date-active{ + color:#000; +} + +.x-date-inner .x-date-selected a{ + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-inner .x-date-today a{ + border-color:darkred; +} + +.x-date-inner .x-date-selected span{ + font-weight:bold; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + color:#aaa; +} + +.x-date-bottom { + border-top-color:#a3bad9; + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + color:#000; + background-color:#ddecfe; +} + +.x-date-inner .x-date-disabled a { + background-color:#eee; + color:#bbb; +} + +.x-date-mmenu{ + background-color:#eee !important; +} + +.x-date-mmenu .x-menu-item { + font-size:10px; + color:#000; +} + +.x-date-mp { + background-color:#fff; +} + +.x-date-mp td { + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns button { + background-color:#083772; + color:#fff; + border-color: #3366cc #000055 #000055 #3366cc; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); +} + +.x-date-mp-btns td { + border-top-color: #c5d2df; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + color:#15428b; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + color:#15428b; + background-color: #ddecfe; +} + +td.x-date-mp-sel a { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} + +.x-date-mp-ybtn a { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +td.x-date-mp-sep { + border-right-color:#c5d2df; +} +.x-tip .x-tip-close{ + background-image: url(../images/default/qtip/close.gif); +} + +.x-tip .x-tip-tc, .x-tip .x-tip-tl, .x-tip .x-tip-tr, .x-tip .x-tip-bc, .x-tip .x-tip-bl, .x-tip .x-tip-br, .x-tip .x-tip-ml, .x-tip .x-tip-mr { + background-image: url(../images/default/qtip/tip-sprite.gif); +} + +.x-tip .x-tip-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; +} +.x-tip .x-tip-ml { + background-color: #fff; +} + +.x-tip .x-tip-header-text { + font: bold 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-tip .x-tip-body { + font: normal 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-form-invalid-tip .x-tip-tc, .x-form-invalid-tip .x-tip-tl, .x-form-invalid-tip .x-tip-tr, .x-form-invalid-tip .x-tip-bc, +.x-form-invalid-tip .x-tip-bl, .x-form-invalid-tip .x-tip-br, .x-form-invalid-tip .x-tip-ml, .x-form-invalid-tip .x-tip-mr +{ + background-image: url(../images/default/form/error-tip-corners.gif); +} + +.x-form-invalid-tip .x-tip-body { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-tip-anchor { + background-image:url(../images/default/qtip/tip-anchor-sprite.gif); +} +.x-menu { + border-color:#718bb7; + background-color:#f0f0f0; + background-image:url(../images/default/menu/menu.gif); +} + +.x-menu-nosep { + background-image:none; +} + +.x-menu-list-item{ + font:normal 11px arial,tahoma,sans-serif; +} + +.x-menu-item-arrow{ + background-image:url(../images/default/menu/menu-parent.gif); +} + +.x-menu-sep { + background-color:#e0e0e0; + border-bottom-color:#fff; +} + +a.x-menu-item { + color:#222; +} + +.x-menu-item-active { + background-image: url(../images/default/menu/item-over.gif); + background-color: #dbecf4; + border-color:#aaccf6; +} + +.x-menu-item-active a.x-menu-item { + border-color:#aaccf6; +} + +.x-menu-check-item .x-menu-item-icon{ + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/default/menu/checked.gif); +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background-image:url(../images/default/menu/group-checked.gif); +} + +.x-menu-group-item .x-menu-item-icon{ + background-image:none; +} + +.x-menu-plain { + background-color:#fff !important; +} + +.x-menu .x-date-picker{ + border-color:#a3bad9; +} + +.x-cycle-menu .x-menu-item-checked { + border-color:#a3bae9 !important; + background-color:#def8f6; +} + +.x-menu-scroller-top { + background-image:url(../images/default/layout/mini-top.gif); +} + +.x-menu-scroller-bottom { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-box-tl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-tc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-tr { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-ml { + background-image: url(../images/default/box/l.gif); +} + +.x-box-mc { + background-color: #eee; + background-image: url(../images/default/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 12px; +} + +.x-box-mc h3 { + font-size: 14px; + font-weight: bold; +} + +.x-box-mr { + background-image: url(../images/default/box/r.gif); +} + +.x-box-bl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-bc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-br { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(../images/default/box/corners-blue.gif); +} + +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(../images/default/box/tb-blue.gif); +} + +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +.x-box-blue .x-box-ml { + background-image: url(../images/default/box/l-blue.gif); +} + +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +} +#x-debug-browser .x-tree .x-tree-node a span { + color:#222297; + font-size:11px; + font-family:"monotype","courier new",sans-serif; +} + +#x-debug-browser .x-tree a i { + color:#ff4545; + font-style:normal; +} + +#x-debug-browser .x-tree a em { + color:#999; +} + +#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{ + background-color:#c3daf9; +} +.x-combo-list { + border-color:#98c0f4; + background-color:#ddecfe; + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-combo-list-inner { + background-color:#fff; +} + +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; + background-image: url(../images/default/layout/panel-title-light-bg.gif); + border-bottom-color:#98c0f4; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom-color:#98c0f4; +} + +.x-combo-list-item { + border-color:#fff; +} + +.x-combo-list .x-combo-selected{ + border-color:#a3bae9 !important; + background-color:#dfe8f6; +} + +.x-combo-list .x-toolbar { + border-top-color:#98c0f4; +} + +.x-combo-list-small { + font:normal 11px tahoma, arial, helvetica, sans-serif; +} +.x-panel { + border-color: #99bbe8; +} + +.x-panel-header { + color:#15428b; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; + border-color:#99bbe8; + background-image: url(../images/default/panel/white-top-bottom.gif); +} + +.x-panel-body { + border-color:#99bbe8; + background-color:#fff; +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border-color:#99bbe8; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top-color:#99bbe8; +} + +.x-panel-tl .x-panel-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-panel-tc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-tl, .x-panel-tr, .x-panel-bl, .x-panel-br{ + background-image: url(../images/default/panel/corners-sprite.gif); + border-bottom-color:#99bbe8; +} + +.x-panel-bc { + background-image: url(../images/default/panel/top-bottom.gif); +} + +.x-panel-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-panel-ml { + background-color: #fff; + background-image:url(../images/default/panel/left-right.gif); +} + +.x-panel-mr { + background-image: url(../images/default/panel/left-right.gif); +} + +.x-tool { + background-image:url(../images/default/panel/tool-sprites.gif); +} + +.x-panel-ghost { + background-color:#cbddf3; +} + +.x-panel-ghost ul { + border-color:#99bbe8; +} + +.x-panel-dd-spacer { + border-color:#99bbe8; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} + +.x-window-proxy { + background-color:#c7dffc; + border-color:#99bbe8; +} + +.x-window-tl .x-window-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-window-tc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-tl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-tr { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-bc { + background-image: url(../images/default/window/top-bottom.png); +} + +.x-window-bl { + background-image: url(../images/default/window/left-corners.png); +} + +.x-window-br { + background-image: url(../images/default/window/right-corners.png); +} + +.x-window-mc { + border-color:#99bbe8; + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} + +.x-window-ml { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-mr { + background-image: url(../images/default/window/left-right.png); +} + +.x-window-maximized .x-window-tc { + background-color:#fff; +} + +.x-window-bbar .x-toolbar { + border-top-color:#99bbe8; +} + +.x-panel-ghost .x-window-tl { + border-bottom-color:#99bbe8; +} + +.x-panel-collapsed .x-window-tl { + border-bottom-color:#84a0c4; +} + +.x-dlg-mask{ + background-color:#ccc; +} + +.x-window-plain .x-window-mc { + background-color: #ccd9e8; + border-color: #a3bae9 #dfe8f6 #dfe8f6 #a3bae9; +} + +.x-window-plain .x-window-body { + border-color: #dfe8f6 #a3bae9 #a3bae9 #dfe8f6; +} + +body.x-body-masked .x-window-plain .x-window-mc { + background-color: #ccd9e8; +} +.x-html-editor-wrap { + border-color:#a9bfd3; + background-color:#fff; +} +.x-html-editor-tb .x-btn-text { + background-image:url(../images/default/editor/tb-sprite.gif); +} +.x-panel-noborder .x-panel-header-noborder { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} +.x-border-layout-ct { + background-color:#dfe8f6; +} + +.x-accordion-hd { + color:#222; + font-weight:normal; + background-image: url(../images/default/panel/light-hd.gif); +} + +.x-layout-collapsed{ + background-color:#d2e0f2; + border-color:#98c0f4; +} + +.x-layout-collapsed-over{ + background-color:#d9e8fb; +} + +.x-layout-split-west .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-split-east .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-split-north .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-layout-split-south .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-west .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} + +.x-layout-cmini-east .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} + +.x-layout-cmini-north .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-south .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-progress-wrap { + border-color:#6593cf; +} + +.x-progress-inner { + background-color:#e0e8f3; + background-image:url(../images/default/qtip/bg.gif); +} + +.x-progress-bar { + background-color:#9cbfee; + background-image:url(../images/default/progress/progress-bg.gif); + border-top-color:#d1e4fd; + border-bottom-color:#7fa9e4; + border-right-color:#7fa9e4; +} + +.x-progress-text { + font-size:11px; + font-weight:bold; + color:#fff; +} + +.x-progress-text-back { + color:#396095; +} +.x-list-header{ + background-color:#f9f9f9; + background-image:url(../images/default/grid/grid3-hrow.gif); +} + +.x-list-header-inner div em { + border-left-color:#ddd; + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-body dt em { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-over { + background-color:#eee; +} + +.x-list-selected { + background-color:#dfe8f6; +} + +.x-list-resizer { + border-left-color:#555; + border-right-color:#555; +} + +.x-list-header-inner em.sort-asc, .x-list-header-inner em.sort-desc { + background-image:url(../images/default/grid/sort-hd.gif); + border-color: #99bbe8; +} +.x-slider-horz, .x-slider-horz .x-slider-end, .x-slider-horz .x-slider-inner { + background-image:url(../images/default/slider/slider-bg.png); +} + +.x-slider-horz .x-slider-thumb { + background-image:url(../images/default/slider/slider-thumb.png); +} + +.x-slider-vert, .x-slider-vert .x-slider-end, .x-slider-vert .x-slider-inner { + background-image:url(../images/default/slider/slider-v-bg.png); +} + +.x-slider-vert .x-slider-thumb { + background-image:url(../images/default/slider/slider-v-thumb.png); +} +.x-window-dlg .ext-mb-text, +.x-window-dlg .x-window-header-text { + font-size:12px; +} + +.x-window-dlg .ext-mb-textarea { + font:normal 12px tahoma,arial,helvetica,sans-serif; +} + +.x-window-dlg .x-msg-box-wait { + background-image:url(../images/default/grid/loading.gif); +} + +.x-window-dlg .ext-mb-info { + background-image:url(../images/default/window/icon-info.gif); +} + +.x-window-dlg .ext-mb-warning { + background-image:url(../images/default/window/icon-warning.gif); +} + +.x-window-dlg .ext-mb-question { + background-image:url(../images/default/window/icon-question.gif); +} + +.x-window-dlg .ext-mb-error { + background-image:url(../images/default/window/icon-error.gif); +} diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners-blue.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners-blue.gif new file mode 100755 index 0000000..fa419b5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners-blue.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners.gif new file mode 100755 index 0000000..8aa8cae Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/corners.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l-blue.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l-blue.gif new file mode 100755 index 0000000..5ed7f00 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l-blue.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l.gif new file mode 100755 index 0000000..0160f97 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/l.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r-blue.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r-blue.gif new file mode 100755 index 0000000..3ea5cae Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r-blue.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r.gif new file mode 100755 index 0000000..34237f6 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/r.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb-blue.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb-blue.gif new file mode 100755 index 0000000..562fecc Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb-blue.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb.gif new file mode 100755 index 0000000..435889b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/box/tb.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/arrow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/arrow.gif new file mode 100755 index 0000000..3ab4f71 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/arrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/btn.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/btn.gif new file mode 100755 index 0000000..06b404d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/btn.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-cs.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-cs.gif new file mode 100755 index 0000000..3d1dca8 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-cs.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-lr.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-lr.gif new file mode 100755 index 0000000..7c549f9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-lr.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-tb.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-tb.gif new file mode 100755 index 0000000..adeb0a4 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/group-tb.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b-noline.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b-noline.gif new file mode 100755 index 0000000..a4220ee Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b-noline.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b.gif new file mode 100755 index 0000000..84b6470 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-b.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-bo.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-bo.gif new file mode 100755 index 0000000..548700b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-bo.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-noline.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-noline.gif new file mode 100755 index 0000000..0953eab Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-noline.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-o.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-o.gif new file mode 100755 index 0000000..89c70f3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow-o.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow.gif new file mode 100755 index 0000000..8940774 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/button/s-arrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-add.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-add.gif new file mode 100755 index 0000000..b22cd14 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-add.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-no.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-no.gif new file mode 100755 index 0000000..08d0833 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-no.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-yes.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-yes.gif new file mode 100755 index 0000000..8aacb30 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/drop-yes.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/dd/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/gradient-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/gradient-bg.gif new file mode 100755 index 0000000..8134e49 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/gradient-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/tb-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/tb-sprite.gif new file mode 100755 index 0000000..fb70577 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/editor/tb-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/checkbox.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/checkbox.gif new file mode 100755 index 0000000..835b346 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/checkbox.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.gif new file mode 100755 index 0000000..da78d45 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.psd new file mode 100755 index 0000000..f637fa5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/clear-trigger.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.gif new file mode 100755 index 0000000..25ef7b3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.psd new file mode 100755 index 0000000..74883b2 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/date-trigger.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/error-tip-corners.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/error-tip-corners.gif new file mode 100755 index 0000000..6ea4c38 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/error-tip-corners.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/exclamation.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/exclamation.gif new file mode 100755 index 0000000..ea31a30 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/exclamation.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/radio.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/radio.gif new file mode 100755 index 0000000..36bb91d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/radio.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.gif new file mode 100755 index 0000000..db8802b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.psd new file mode 100755 index 0000000..b11f273 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/search-trigger.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/text-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/text-bg.gif new file mode 100755 index 0000000..4179607 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/text-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-square.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-square.gif new file mode 100755 index 0000000..3004ec5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-square.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-tpl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-tpl.gif new file mode 100755 index 0000000..e3701a3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger-tpl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.gif new file mode 100755 index 0000000..f6cba37 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.psd new file mode 100755 index 0000000..344c768 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/form/trigger.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/gradient-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/gradient-bg.gif new file mode 100755 index 0000000..8134e49 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/gradient-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/Thumbs.db b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/Thumbs.db new file mode 100755 index 0000000..46df4e9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/Thumbs.db differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-left-white.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-left-white.gif new file mode 100755 index 0000000..63088f5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-left-white.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-right-white.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-right-white.gif new file mode 100755 index 0000000..e9e0678 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/arrow-right-white.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-bottom.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-bottom.gif new file mode 100755 index 0000000..cc1e473 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-bottom.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-top.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-top.gif new file mode 100755 index 0000000..58ff32c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/col-move-top.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/columns.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/columns.gif new file mode 100755 index 0000000..2d3a823 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/columns.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/dirty.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/dirty.gif new file mode 100755 index 0000000..4f217a4 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/dirty.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/done.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/done.gif new file mode 100755 index 0000000..a937cb2 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/done.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-no.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-no.gif new file mode 100755 index 0000000..31a332b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-no.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-yes.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-yes.gif new file mode 100755 index 0000000..926010e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/drop-yes.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/footer-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/footer-bg.gif new file mode 100755 index 0000000..126120f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/footer-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-hd.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-hd.gif new file mode 100755 index 0000000..862094e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-hd.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-split.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-split.gif new file mode 100755 index 0000000..5286f58 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-blue-split.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-hrow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-hrow.gif new file mode 100755 index 0000000..6374104 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-hrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-loading.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-loading.gif new file mode 100755 index 0000000..d112c54 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-loading.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-split.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-split.gif new file mode 100755 index 0000000..c76a16e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-split.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-vista-hd.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-vista-hd.gif new file mode 100755 index 0000000..d097263 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid-vista-hd.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hd-btn.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hd-btn.gif new file mode 100755 index 0000000..2112607 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hd-btn.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow-over.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow-over.gif new file mode 100755 index 0000000..f9c07af Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow-over.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow.gif new file mode 100755 index 0000000..8d459a3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-hrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-rowheader.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-rowheader.gif new file mode 100755 index 0000000..2799b45 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-rowheader.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-bg.gif new file mode 100755 index 0000000..0b4d6ca Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-sel-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-sel-bg.gif new file mode 100755 index 0000000..1dfe9a6 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/grid3-special-col-sel-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-by.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-by.gif new file mode 100755 index 0000000..d6075bb Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-by.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-collapse.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-collapse.gif new file mode 100755 index 0000000..495bb05 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-collapse.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand-sprite.gif new file mode 100755 index 0000000..9c1653b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand.gif new file mode 100755 index 0000000..a33ac30 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/group-expand.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hd-pop.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hd-pop.gif new file mode 100755 index 0000000..eb8ba79 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hd-pop.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-asc.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-asc.gif new file mode 100755 index 0000000..8917e0e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-asc.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-desc.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-desc.gif new file mode 100755 index 0000000..f26b7c2 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-desc.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.gif new file mode 100755 index 0000000..1596126 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.png new file mode 100755 index 0000000..8b81e7f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-lock.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.gif new file mode 100755 index 0000000..af59cf9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.png new file mode 100755 index 0000000..9dd5df3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/hmenu-unlock.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/invalid_line.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/invalid_line.gif new file mode 100755 index 0000000..fb7e0f3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/invalid_line.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/loading.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/loading.gif new file mode 100755 index 0000000..e846e1d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/loading.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/mso-hd.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/mso-hd.gif new file mode 100755 index 0000000..669f3cf Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/mso-hd.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/nowait.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/nowait.gif new file mode 100755 index 0000000..4c5862c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/nowait.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first-disabled.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first-disabled.gif new file mode 100755 index 0000000..1e02c41 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first-disabled.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first.gif new file mode 100755 index 0000000..d84f41a Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-first.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last-disabled.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last-disabled.gif new file mode 100755 index 0000000..8697067 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last-disabled.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last.gif new file mode 100755 index 0000000..3df5c2b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-last.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next-disabled.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next-disabled.gif new file mode 100755 index 0000000..90a7756 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next-disabled.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next.gif new file mode 100755 index 0000000..9601635 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-next.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev-disabled.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev-disabled.gif new file mode 100755 index 0000000..37154d6 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev-disabled.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev.gif new file mode 100755 index 0000000..eb70cf8 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/page-prev.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/pick-button.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/pick-button.gif new file mode 100755 index 0000000..6957924 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/pick-button.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh-disabled.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh-disabled.gif new file mode 100755 index 0000000..607800b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh-disabled.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh.gif new file mode 100755 index 0000000..110f684 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/refresh.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-check-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-check-sprite.gif new file mode 100755 index 0000000..6101164 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-check-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-expand-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-expand-sprite.gif new file mode 100755 index 0000000..6f4d874 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-expand-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-over.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-over.gif new file mode 100755 index 0000000..b288e38 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-over.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-sel.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-sel.gif new file mode 100755 index 0000000..98209e6 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/row-sel.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort-hd.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort-hd.gif new file mode 100755 index 0000000..45e545f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort-hd.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_asc.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_asc.gif new file mode 100755 index 0000000..67a2a4c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_asc.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_desc.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_desc.gif new file mode 100755 index 0000000..34db47c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/sort_desc.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/wait.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/wait.gif new file mode 100755 index 0000000..471c1a4 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/grid/wait.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/collapse.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/collapse.gif new file mode 100755 index 0000000..d87b0a9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/collapse.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/expand.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/expand.gif new file mode 100755 index 0000000..7b6e1c1 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/expand.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/gradient-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/gradient-bg.gif new file mode 100755 index 0000000..8134e49 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/gradient-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-bottom.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-bottom.gif new file mode 100755 index 0000000..c18f9e3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-bottom.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-left.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-left.gif new file mode 100755 index 0000000..99f7993 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-left.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-right.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-right.gif new file mode 100755 index 0000000..5b13c5a Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-right.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-top.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-top.gif new file mode 100755 index 0000000..a4ca2bb Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/mini-top.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-collapse.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-collapse.gif new file mode 100755 index 0000000..df2a77e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-collapse.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-expand.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-expand.gif new file mode 100755 index 0000000..77ab9da Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/ns-expand.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-close.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-close.gif new file mode 100755 index 0000000..2bdd623 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-close.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-bg.gif new file mode 100755 index 0000000..d1daef5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-light-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-light-bg.gif new file mode 100755 index 0000000..8c2c83d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/panel-title-light-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stick.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stick.gif new file mode 100755 index 0000000..5a1e8ba Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stick.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stuck.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stuck.gif new file mode 100755 index 0000000..0a8de4d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/stuck.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close-on.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close-on.gif new file mode 100755 index 0000000..eacea39 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close-on.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close.gif new file mode 100755 index 0000000..45db61e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/layout/tab-close.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/checked.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/checked.gif new file mode 100755 index 0000000..fad5893 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/checked.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/group-checked.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/group-checked.gif new file mode 100755 index 0000000..d30b3e5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/group-checked.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/item-over.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/item-over.gif new file mode 100755 index 0000000..0167839 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/item-over.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu-parent.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu-parent.gif new file mode 100755 index 0000000..1e37562 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu-parent.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu.gif new file mode 100755 index 0000000..30a2c4b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/menu.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/unchecked.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/unchecked.gif new file mode 100755 index 0000000..43823e5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/menu/unchecked.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/corners-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/corners-sprite.gif new file mode 100755 index 0000000..aa0d0ed Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/corners-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/left-right.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/left-right.gif new file mode 100755 index 0000000..9fae2d5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/left-right.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/light-hd.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/light-hd.gif new file mode 100755 index 0000000..58d6747 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/light-hd.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprite-tpl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprite-tpl.gif new file mode 100755 index 0000000..e647867 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprite-tpl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprites.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprites.gif new file mode 100755 index 0000000..2b6b809 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tool-sprites.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tools-sprites-trans.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tools-sprites-trans.gif new file mode 100755 index 0000000..ead931e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/tools-sprites-trans.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.gif new file mode 100755 index 0000000..be6c50e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.png new file mode 100755 index 0000000..578ffb6 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/top-bottom.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-corners-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-corners-sprite.gif new file mode 100755 index 0000000..22d4bba Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-corners-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-left-right.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-left-right.gif new file mode 100755 index 0000000..d82c337 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-left-right.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-top-bottom.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-top-bottom.gif new file mode 100755 index 0000000..fe7dd1c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/panel/white-top-bottom.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/progress-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/progress-bg.gif new file mode 100755 index 0000000..1c1abeb Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/progress/progress-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/bg.gif new file mode 100755 index 0000000..43488af Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/close.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/close.gif new file mode 100755 index 0000000..69ab915 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/close.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-anchor-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-anchor-sprite.gif new file mode 100755 index 0000000..9cf4850 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-anchor-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-sprite.gif new file mode 100755 index 0000000..9810aca Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/qtip/tip-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/s.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/s.gif new file mode 100755 index 0000000..1d11fa9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/s.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-c.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-c.png new file mode 100755 index 0000000..d435f80 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-c.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-lr.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-lr.png new file mode 100755 index 0000000..bb88b6f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow-lr.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow.png new file mode 100755 index 0000000..75c0eba Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shadow.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/blue-loading.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/blue-loading.gif new file mode 100755 index 0000000..3bbf639 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/blue-loading.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/calendar.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/calendar.gif new file mode 100755 index 0000000..133cf23 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/calendar.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/glass-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/glass-bg.gif new file mode 100755 index 0000000..26fbbae Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/glass-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/hd-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/hd-sprite.gif new file mode 100755 index 0000000..42da1ea Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/hd-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/large-loading.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/large-loading.gif new file mode 100755 index 0000000..b36b555 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/large-loading.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/left-btn.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/left-btn.gif new file mode 100755 index 0000000..a0ddd9e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/left-btn.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/loading-balls.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/loading-balls.gif new file mode 100755 index 0000000..9ce214b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/loading-balls.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/right-btn.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/right-btn.gif new file mode 100755 index 0000000..dee63e2 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/right-btn.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/warning.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/warning.gif new file mode 100755 index 0000000..806d4bc Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/shared/warning.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle-dark.gif new file mode 100755 index 0000000..b5486c1 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle.gif new file mode 100755 index 0000000..00ba835 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/e-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle-dark.gif new file mode 100755 index 0000000..04e5ecf Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle.gif new file mode 100755 index 0000000..09405c7 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/ne-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle-dark.gif new file mode 100755 index 0000000..6e49d69 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle.gif new file mode 100755 index 0000000..2fcea8a Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/nw-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle-dark.gif new file mode 100755 index 0000000..4eb5f0f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle.gif new file mode 100755 index 0000000..bf069c2 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/s-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle-dark.gif new file mode 100755 index 0000000..c4c1087 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle.gif new file mode 100755 index 0000000..972055e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/se-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/square.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/square.gif new file mode 100755 index 0000000..14ce6f7 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/square.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle-dark.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle-dark.gif new file mode 100755 index 0000000..77224b0 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle-dark.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle.gif new file mode 100755 index 0000000..3ca0ed9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/sizer/sw-handle.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-bg.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-bg.png new file mode 100755 index 0000000..9999194 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-bg.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-thumb.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-thumb.png new file mode 100755 index 0000000..cd654a4 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-thumb.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-bg.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-bg.png new file mode 100755 index 0000000..121450c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-bg.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-thumb.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-thumb.png new file mode 100755 index 0000000..7b3d725 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/slider/slider-v-thumb.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-left.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-left.gif new file mode 100755 index 0000000..9f2f6d1 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-left.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-right.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-right.gif new file mode 100755 index 0000000..4c5e7e3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroll-right.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroller-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroller-bg.gif new file mode 100755 index 0000000..099b90d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/scroller-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-left-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-left-bg.gif new file mode 100755 index 0000000..188bf94 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-left-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-right-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-right-bg.gif new file mode 100755 index 0000000..e1f5e3c Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-inactive-right-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-left-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-left-bg.gif new file mode 100755 index 0000000..dde7968 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-left-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-left-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-left-bg.gif new file mode 100755 index 0000000..da49c10 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-left-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-right-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-right-bg.gif new file mode 100755 index 0000000..45346ab Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-over-right-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-right-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-right-bg.gif new file mode 100755 index 0000000..e695186 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-btm-right-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-close.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-close.gif new file mode 100755 index 0000000..e699878 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-close.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.gif new file mode 100755 index 0000000..34f1333 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.png new file mode 100755 index 0000000..fa8ab3f Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-bg.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-btm-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-btm-bg.gif new file mode 100755 index 0000000..5eaba1e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tab-strip-btm-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tabs-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tabs-sprite.gif new file mode 100755 index 0000000..e969fb0 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tabs/tabs-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/bg.gif new file mode 100755 index 0000000..0b085bf Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow-light.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow-light.gif new file mode 100755 index 0000000..b0e24b5 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow-light.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow.gif new file mode 100755 index 0000000..8acb460 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-arrow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-over-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-over-bg.gif new file mode 100755 index 0000000..ee2dd98 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/btn-over-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/gray-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/gray-bg.gif new file mode 100755 index 0000000..bd49438 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/gray-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/more.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/more.gif new file mode 100755 index 0000000..02c2509 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/more.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-bg.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-bg.gif new file mode 100755 index 0000000..4969e4e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-bg.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-btn-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-btn-sprite.gif new file mode 100755 index 0000000..19bbef3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-btn-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-btn-sprite.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-btn-sprite.gif new file mode 100755 index 0000000..1bc0420 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-btn-sprite.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-sep.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-sep.gif new file mode 100755 index 0000000..30555ee Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/toolbar/tb-xl-sep.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/arrows.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/arrows.gif new file mode 100755 index 0000000..2683463 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/arrows.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-add.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-add.gif new file mode 100755 index 0000000..b22cd14 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-add.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-between.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-between.gif new file mode 100755 index 0000000..5c6c09d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-between.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-no.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-no.gif new file mode 100755 index 0000000..9d9c6a9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-no.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-over.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-over.gif new file mode 100755 index 0000000..30d1ca7 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-over.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-under.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-under.gif new file mode 100755 index 0000000..85f66b1 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-under.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-yes.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-yes.gif new file mode 100755 index 0000000..8aacb30 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/drop-yes.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus-nl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus-nl.gif new file mode 100755 index 0000000..928779e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus-nl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus.gif new file mode 100755 index 0000000..9a8d727 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-minus.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus-nl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus-nl.gif new file mode 100755 index 0000000..9f7f698 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus-nl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus.gif new file mode 100755 index 0000000..5943a01 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end-plus.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end.gif new file mode 100755 index 0000000..f24ddee Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-end.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-line.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-line.gif new file mode 100755 index 0000000..75e6da4 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-line.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus-nl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus-nl.gif new file mode 100755 index 0000000..928779e Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus-nl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus.gif new file mode 100755 index 0000000..97dcc71 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-minus.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus-nl.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus-nl.gif new file mode 100755 index 0000000..9f7f698 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus-nl.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus.gif new file mode 100755 index 0000000..698de47 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow-plus.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow.gif new file mode 100755 index 0000000..b8f4208 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/elbow.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder-open.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder-open.gif new file mode 100755 index 0000000..56ba737 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder-open.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder.gif new file mode 100755 index 0000000..20412f7 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/folder.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/leaf.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/leaf.gif new file mode 100755 index 0000000..445769d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/leaf.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/loading.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/loading.gif new file mode 100755 index 0000000..e846e1d Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/loading.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/s.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/s.gif new file mode 100755 index 0000000..1d11fa9 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/tree/s.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-error.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-error.gif new file mode 100755 index 0000000..397b655 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-error.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-info.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-info.gif new file mode 100755 index 0000000..58281c3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-info.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-question.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-question.gif new file mode 100755 index 0000000..08abd82 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-question.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-warning.gif b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-warning.gif new file mode 100755 index 0000000..27ff98b Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/icon-warning.gif differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.png new file mode 100755 index 0000000..1a51833 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.psd new file mode 100755 index 0000000..3d7f062 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-corners.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.png new file mode 100755 index 0000000..7586ff3 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.psd new file mode 100755 index 0000000..59a3960 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/left-right.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.png new file mode 100755 index 0000000..e69a3ff Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.psd new file mode 100755 index 0000000..86d5095 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/right-corners.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.png b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.png new file mode 100755 index 0000000..33779e7 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.png differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.psd b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.psd new file mode 100755 index 0000000..48c5395 Binary files /dev/null and b/ehcp/extplorer/scripts/extjs3/resources/images/default/window/top-bottom.psd differ diff --git a/ehcp/extplorer/scripts/extjs3/resources/images/index.html b/ehcp/extplorer/scripts/extjs3/resources/images/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/images/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/extjs3/resources/index.html b/ehcp/extplorer/scripts/extjs3/resources/index.html new file mode 100755 index 0000000..88a5baf --- /dev/null +++ b/ehcp/extplorer/scripts/extjs3/resources/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/functions.js.php b/ehcp/extplorer/scripts/functions.js.php new file mode 100755 index 0000000..2ac6537 --- /dev/null +++ b/ehcp/extplorer/scripts/functions.js.php @@ -0,0 +1,643 @@ + +Ext.BLANK_IMAGE_URL = '/scripts/extjs3/resources/images/default/s.gif'; + + /** + * This function is for changing into a specified directory + * It updates the tree, the grid and the ContentPanel title + */ + function chDir( directory, loadGridOnly ) { + + if( datastore.directory.replace( /\//g, '' ) == directory.replace( /\//g, '' ) + && datastore.getTotalCount() > 0 && directory != '') { + // Prevent double loading + return false; + } + datastore.directory = directory; + var conn = datastore.proxy.getConnection(); + if( directory == '' || conn && !conn.isLoading()) { + datastore.load({params:{start:0, limit:150, dir: directory, option:'com_extplorer', action:'getdircontents', sendWhat: datastore.sendWhat }}); + } + + document.title = 'eXtplorer - ' + datastore.directory; + + /* + Ext.Ajax.request({ + url: '', + params: { action:'chdir_event', dir: directory, option: 'com_extplorer' }, + callback: function(options, success, response ) { + if( success ) { + checkLoggedOut( response ); // Check if current user is logged off. If yes, Joomla! sends a document.location redirect, which will be eval'd here + var result = Ext.decode( response.responseText ); + document.title = 'eXtplorer - ' + datastore.directory; + Ext.get('bookmark_container').update( result.bookmarks ); + } + } + }); + */ + + if( !loadGridOnly ) { + expandTreeToDir( null, directory ); + } + + var manipulateDirectory = directory; + manipulateDirectory = manipulateDirectory.replace("ext_root", ""); + var dirs = manipulateDirectory.split('/'); + var fullNodeId = dirs.join('_RRR_'); + + //alert(fullNodeId); + + // Select the root dir if we do not have a node id + if(fullNodeId == ""){ + fullNodeId = "ext_root"; + } + var node = Ext.getCmp("dirTree").getNodeById( fullNodeId ); + if(node != null){ + //alert('I am selecting a node'); + Ext.getCmp("dirTree").getSelectionModel().select(node); + } + reloadNode(); + } + + function reloadNode(){ + var selNode = Ext.getCmp("dirTree").getSelectionModel().getSelectedNode(); + if(selNode != null){ + setTimeout(function(){ selNode.reload(); }, 320); + } + } + + function expandTreeToDir( node, dir ) { + dir = dir ? dir : new String(''); + var dirs = dir.split('/'); + if( dirs[0] == '') { dirs.shift(); } + if( dirs.length > 0 ) { + node = Ext.getCmp("dirTree").getNodeById( '_RRR_'+ dirs[0] ); + if( !node ) return; + if( node.isExpanded() ) { + expandNode( node, dir ); + return; + } + node.on('load', function() { expandNode( node, dir ) } ); + node.expand(); + } + } + function expandNode( node, dir ) { + var fulldirpath, dirpath; + + var dirs = dir.split('/'); + if( dirs[0] == '') { dirs.shift(); } + if( dirs.length > 0 ) { + fulldirpath = ''; + for( i=0; i < dirs.length; i++ ) { + fulldirpath += '_RRR_'+ dirs[i]; + } + if( node.id.substr( 0, 5 ) != '_RRR_' ) { + fulldirpath = fulldirpath.substr( 5 ); + } + + if( node.id != fulldirpath ) { + dirpath = ''; + + var nodedirs = node.id.split('_RRR_'); + if( nodedirs[0] == '' ) nodedirs.shift(); + for( i=0; i < dirs.length; i++ ) { + if( nodedirs[i] ) { + dirpath += '_RRR_'+ dirs[i]; + } else { + dirpath += '_RRR_'+ dirs[i]; + //dirpath = dirpath.substr( 5 ); + var nextnode = Ext.getCmp("dirTree").getNodeById( dirpath ); + if( !nextnode ) { return; } + if( nextnode.isExpanded() ) { expandNode( nextnode, dir ); return;} + nextnode.on( 'load', function() { expandNode( nextnode, dir ) } ); + + nextnode.expand(); + break; + } + } + } + else { + node.select(); + } + + } + } + function handleNodeClick( node ) { + if( node && node.id ) { + chDir( node.id.replace( /_RRR_/g, '/' ) ); + } + } + function checkLoggedOut( response ) { + var re = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig; + + var match; + while(match = re.exec(response.responseText)){ + if(match[2] && match[2].length > 0){ + eval(match[2]); + } + } + } +function showLoadingIndicator( el, replaceContent ) { + if( !el ) return; + var loadingimg = 'components/com_extplorer/images/_indicator.gif'; + var imgtag = '<' + 'img src="'+ loadingimg + '" alt="Loading..." border="0" name="Loading" align="absmiddle" />'; + + if( replaceContent ) { + el.innerHTML = imgtag; + } + else { + el.innerHTML += imgtag; + } +} +function getURLParam( strParamName, myWindow){ + if( !myWindow ){ + myWindow = window; + } + var strReturn = ""; + var strHref = myWindow.location.href; + if ( strHref.indexOf("?") > -1 ){ + var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase(); + var aQueryString = strQueryString.split("&"); + for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){ + if ( aQueryString[iParam].indexOf(strParamName + "=") > -1 ){ + var aParam = aQueryString[iParam].split("="); + strReturn = aParam[1]; + break; + } + } + } + return strReturn; +} + +function openActionDialog( caller, action ) { + var dialog; + var selectedRows = ext_itemgrid.getSelectionModel().getSelections(); + if( selectedRows.length < 1 ) { + var selectedNode = Ext.getCmp("dirTree").getSelectionModel().getSelectedNode(); + if( selectedNode ) { + selectedRows = Array( Ext.getCmp("dirTree").getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' ) ); + } + } + var dontNeedSelection = { mkitem:1, get_about:1, ftp_authentication:1, upload:1, search:1, admin:1, ssh2_authentication: 1, extplorer_authentication: 1 }; + if( dontNeedSelection[action] == null && selectedRows.length < 1 ) { + Ext.Msg.alert( ''); + return false; + } + + switch( action ) { + case 'admin': + case 'archive': + case 'chmod': + case 'copy': + case 'edit': + case 'extplorer_authentication': + case 'ftp_authentication': + case 'ssh2_authentication': + case 'get_about': + case 'mkitem': + case 'move': + case 'rename': + case 'search': + case 'upload': + case 'view': + case 'diff': + case 'move': + requestParams = getRequestParams(); + requestParams.action = action; + if( action != "edit" ) { + dialog = new Ext.Window( { + id: "dialog", + autoCreate: true, + modal:true, + width:600, + height:400, + shadow:true, + minWidth:300, + minHeight:200, + proxyDrag: true, + resizable: true, + renderTo: Ext.getBody(), + keys: { + key: 27, + fn : function(){ + dialog.hide(); + } + }, + //animateTarget: typeof caller.getEl == 'function' ? caller.getEl() : caller, + title: '' + + }); + } + Ext.Ajax.request( { url: '', + params: Ext.urlEncode( requestParams ), + scripts: true, + callback: function(oElement, bSuccess, oResponse) { + if( !bSuccess ) { + msgbox = Ext.Msg.alert( "Ajax communication failure!"); + msgbox.setIcon( Ext.MessageBox.ERROR ); + } + if( oResponse && oResponse.responseText ) { + + //Ext.Msg.alert("Debug", oResponse.responseText ); + try{ json = Ext.decode( oResponse.responseText ); + if( json.error && typeof json.error != 'xml' ) { + Ext.Msg.alert( "", json.error ); + dialog.destroy(); + return false; + } + } catch(e) { + msgbox = Ext.Msg.alert( "", "JSON Decode Error: " + e.message ); + msgbox.setIcon( Ext.MessageBox.ERROR ); + return false; + } + if( action == "edit" ) { + Ext.getCmp("mainpanel").add(json); + Ext.getCmp("mainpanel").activate(json.id); + } + else { + // we expect the returned JSON to be an object that + // contains an "Ext.Component" or derivative in xtype notation + // so we can simply add it to the Window + dialog.add(json); + if( json.dialogtitle ) { + // if the component delivers a title for our + // dialog we can set the title of the window + dialog.setTitle(json.dialogtitle); + } + + try { + // recalculate layout + dialog.doLayout(); + // recalculate dimensions, based on those of the newly added child component + firstComponent = dialog.getComponent(0); + newWidth = firstComponent.getWidth() + dialog.getFrameWidth(); + newHeight = firstComponent.getHeight() + dialog.getFrameHeight(); + dialog.setSize( newWidth, newHeight ); + + } catch(e) {} + //alert( "Before: Dialog.width: " + dialog.getWidth() + ", Client Width: "+ Ext.getBody().getWidth()); + if( dialog.getWidth() >= Ext.getBody().getWidth() ) { + dialog.setWidth( Ext.getBody().getWidth() * 0.8 ); + } + //alert( "After: Dialog.width: " + dialog.getWidth() + ", Client Width: "+ Ext.getBody().getWidth()); + if( dialog.getHeight() >= Ext.getBody().getHeight() ) { + dialog.setHeight( Ext.getBody().getHeight() * 0.7 ); + } else if( dialog.getHeight() < Ext.getBody().getHeight() * 0.3 ) { + dialog.setHeight( Ext.getBody().getHeight() * 0.5 ); + } + + // recalculate Window size + dialog.syncSize(); + // center the window + dialog.center(); + } + } else if( !response || !oResponse.responseText) { + msgbox = Ext.Msg.alert( "", "Received an empty response"); + msgbox.setIcon( Ext.MessageBox.ERROR ); + + } + } + }); + + if( action != "edit" ) { + dialog.on( 'hide', function() { dialog.destroy(true); reloadNode(); } ); + dialog.show(); + } + break; + + case 'delete': + var num = selectedRows.length; + var filesAndDirsToDelete = "
"; + for(var i = 0; i < selectedRows.length; i++){ + var selectedRow = selectedRows[i]; + if(selectedRow !== null && typeof selectedRow === 'object'){ + filesAndDirsToDelete += "
File: " + selectedRows[i].data.name; + }else{ + filesAndDirsToDelete += "
Entire directory: " + selectedRows[i]; + } + } + Ext.Msg.confirm('?', String.format("", num ) + filesAndDirsToDelete, deleteFiles); + break; + case 'extract': + Ext.Msg.confirm('?', "", extractArchive); + break; + case 'download': + document.location = '?option=com_extplorer&action=download&item='+ encodeURIComponent(ext_itemgrid.getSelectionModel().getSelected().get('name')) + '&dir=' + encodeURIComponent( datastore.directory ); + break; + } +} +function handleCallback(requestParams, node) { + var conn = new Ext.data.Connection(); + + conn.request({ + url: '', + params: requestParams, + callback: function(options, success, response ) { + if( success ) { + json = Ext.decode( response.responseText ); + if( json.success ) { + statusBarMessage( json.message, false, true ); + try { + if( dropEvent) { + dropEvent.target.parentNode.reload(); + dropEvent = null; + } + if( node ) { + if( options.params.action == 'delete' || options.params.action == 'rename' ) { + node.parentNode.select(); + } + node.parentNode.reload(); + } else { + datastore.reload(); + } + } catch(e) { datastore.reload(); } + } else { + Ext.Msg.alert( 'Failure', json.error ); + } + } + else { + Ext.Msg.alert( 'Error', 'Failed to connect to the server.'); + } + + } + }); +} +function getRequestParams() { + var selitems, dir, node; + var selectedRows = ext_itemgrid.getSelectionModel().getSelections(); + if( selectedRows.length < 1 ) { + node = Ext.getCmp("dirTree").getSelectionModel().getSelectedNode(); + if( node ) { + var dir = Ext.getCmp("dirTree").getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' ); + var lastSlash = dir.lastIndexOf( '/' ); + if( lastSlash > 0 ) { + selitems = Array( dir.substring(lastSlash+1) ); + } else { + selitems = Array( dir ); + } + } else { + selitems = {}; + } + dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/')); + } + else { + selitems = Array(selectedRows.length); + + if( selectedRows.length > 0 ) { + for( i=0; i < selectedRows.length;i++) { + selitems[i] = selectedRows[i].get('name'); + } + } + dir = datastore.directory; + } + //Ext.Msg.alert("Debug", dir ); + var requestParams = { + option: 'com_extplorer', + dir: dir, + item: selitems.length > 0 ? selitems[0]:'', + 'selitems[]': selitems, + token: "" + }; + return requestParams; +} +/** +* Function for actions, which don't require a form like download, extraction, deletion etc. +*/ +function deleteFiles(btn) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.action = 'delete'; + handleCallback(requestParams); +} +function extractArchive(btn) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.action = 'extract'; + handleCallback(requestParams); +} +function deleteDir( btn, node ) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/')); + requestParams.selitems = Array( node.id.replace( /_RRR_/g, '/' ) ); + requestParams.action = 'delete'; + handleCallback(requestParams, node); +} + +Ext.msgBoxSlider = function(){ + var msgCt; + + function createBox(t, s){ + return ['
', + '
', + '

', t, '

', s, '
', + '
', + '
'].join(''); + } + return { + msg : function(title, format){ + if(!msgCt){ + msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true); + } + msgCt.alignTo(document, 't-t'); + var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1)); + var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true); + m.setWidth(400 ); + m.position(null, 5000 ); + m.alignTo(document, 't-t'); + Ext.get('x-box-mc-inner' ).setStyle('background-image', 'url("/images/_accept.png")'); + Ext.get('x-box-mc-inner' ).setStyle('background-position', '5px 10px'); + Ext.get('x-box-mc-inner' ).setStyle('background-repeat', 'no-repeat'); + Ext.get('x-box-mc-inner' ).setStyle('padding-left', '35px'); + m.slideIn('t').pause(3).ghost("t", {remove:true}); + } + }; +}(); + + +function statusBarMessage( msg, isLoading, success ) { + msg = msg.replace(/[\u00A0-\u9999<>\&]/gim, function(i) { return '&#' + i.charCodeAt(0) + ';';}); + var statusBar = Ext.getCmp('statusPanel'); + if( !statusBar ) return; + if( isLoading ) { + statusBar.showBusy(); + } + else { + statusBar.setStatus("Done."); + } + if( success ) { + statusBar.setStatus({ + text: ': ' + msg, + iconCls: 'success', + clear: true + }); + Ext.msgBoxSlider.msg('', msg ); + } else if( success != null ) { + statusBar.setStatus({ + text: ': ' + msg, + iconCls: 'error', + clear: true + }); + + } + + +} + +function selectFile( dir, file ) { + chDir( dir ); + var conn = datastore.proxy.getConnection(); + if( conn.isLoading() ) { + setTimeout( "selectFile(\"" + dir + "\", \""+ file + "\")", 1000 ); + } + idx = datastore.find( "name", file ); + if( idx >= 0 ) { + ext_itemgrid.getSelectionModel().selectRow( idx ); + } +} + +/** +* Debug Function, that works like print_r for Objects in Javascript +*/ +function var_dump(obj) { + var vartext = ""; + for (var prop in obj) { + if( isNaN( prop.toString() )) { + vartext += "\t->"+prop+" = "+ eval( "obj."+prop.toString()) +"\n"; + } + } + if(typeof obj == "object") { + return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "") + "\n" + vartext; + } else { + return "Type: "+typeof(obj)+"\n" + vartext; + } +}//end function var_dump + +//http://www.bazon.net/mishoo/home.epl?NEWS_ID=1345 +function doGetCaretPosition (textarea) { + + var txt = textarea.value; + var len = txt.length; + var erg = txt.split("\n"); + var pos = -1; + if(typeof textarea.selectionStart != "undefined") { // FOR MOZILLA + pos = textarea.selectionStart; + } + else if(typeof document.selection != "undefined") { // FOR MSIE + range_sel = document.selection.createRange(); + range_obj = textarea.createTextRange(); + range_obj.moveToBookmark(range_sel.getBookmark()); + range_obj.moveEnd('character',textarea.value.length); + pos = len - range_obj.text.length; + } + if(pos != -1) { + var ind = 0; + for(;erg.length;ind++) { + len = erg[ind].length + 1; + if(pos < len) + break; + pos -= len; + } + ind++; pos++; + return [ind, pos]; // ind = LINE, pos = COLUMN + + } +} +/** +* This function allows us to change the position of the caret +* (cursor) in the textarea +* Various workarounds for IE, Firefox and Opera are included +* Firefox doesn't count empty lines, IE does... +*/ +function setCaretPosition( textarea, linenum ) { + if (isNaN(linenum)) { + updatePosition( textarea ); + return; + } + var txt = textarea.value; + var len = txt.length; + var erg = txt.split("\n"); + + var ind = 0; + var pos = 0; + var nonempty = -1; + var empty = -1; + for(;ind < linenum;ind++) { + if( !erg[ind] && pos < len ) { empty++; pos++; continue; } + else if( !erg[ind] ) break; + pos += erg[ind].length; + nonempty++; + } + try { + pos -= erg[ind-1].length; + } catch(e) {} + + textarea.focus(); + + if(textarea.setSelectionRange) + { + pos += nonempty; + textarea.setSelectionRange(pos,pos); + } + else if (textarea.createTextRange) { + pos -= empty; + var range = textarea.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + + range.select(); + } +} +/** +* Updates the Position Indicator fields +*/ +function updatePosition(textBox) { + var posArray = doGetCaretPosition(textBox); + if( posArray[0] ) { + Ext.fly( 'txtLine' ).set( { value: posArray[0] } ); + } + if( posArray[1] ) { + Ext.fly( 'txtColumn' ).set( { value: posArray[1] } ); + } +} diff --git a/ehcp/extplorer/scripts/index.html b/ehcp/extplorer/scripts/index.html new file mode 100755 index 0000000..fa6d84e --- /dev/null +++ b/ehcp/extplorer/scripts/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/extplorer/scripts/yui/utilities/utilities.js b/ehcp/extplorer/scripts/yui/utilities/utilities.js new file mode 100755 index 0000000..bac245a --- /dev/null +++ b/ehcp/extplorer/scripts/yui/utilities/utilities.js @@ -0,0 +1,17 @@ +/* +Copyright (c) 2007, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.4.1 +*/ +if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}if(I.length>1){I.pop();}I.push("]");}else{I.push("{");for(D in A){if(C.hasOwnProperty(A,D)){I.push(D+E);if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}}if(I.length>1){I.pop();}I.push("}");}return I.join("");},substitute:function(Q,B,J){var G,F,E,M,N,P,D=YAHOO.lang,L=[],C,H="dump",K=" ",A="{",O="}";for(;;){G=Q.lastIndexOf(A);if(G<0){break;}F=Q.indexOf(O,G);if(G+1>=F){break;}C=Q.substring(G+1,F);M=C;P=null;E=M.indexOf(K);if(E>-1){P=M.substring(E+1);M=M.substring(0,E);}N=B[M];if(J){N=J(M,N,P);}if(D.isObject(N)){if(D.isArray(N)){N=D.dump(N,parseInt(P,10));}else{P=P||"";var I=P.indexOf(H);if(I>-1){P=P.substring(4);}if(N.toString===Object.prototype.toString||I>-1){N=D.dump(N,parseInt(P,10));}else{N=N.toString();}}}else{if(!D.isString(N)&&!D.isNumber(N)){N="~-"+L.length+"-~";L[L.length]=C;}}Q=Q.substring(0,G)+N+Q.substring(F+1);}for(G=L.length-1;G>=0;G=G-1){Q=Q.replace(new RegExp("~-"+G+"-~"),"{"+L[G]+"}","g");}return Q;},trim:function(A){try{return A.replace(/^\s+|\s+$/g,"");}catch(B){return A;}},merge:function(){var D={},B=arguments;for(var C=0,A=B.length;C=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.right);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.4.1",build:"742"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B0){A=H[0];}try{F=L.fn.call(K,A,L.obj);}catch(E){this.lastError=E;}}else{try{F=L.fn.call(K,this.type,H,L.obj);}catch(G){this.lastError=G;}}if(false===F){if(!this.silent){}return false;}}}if(I){var J=[],B=this.subscribers;for(C=0,D=B.length;C=0){P=I[Q];}if(!L||!P){return false;}if(this.useLegacyEvent(L,K)){var N=this.getLegacyIndex(L,K);var M=E[N];if(M){for(O=0,R=M.length;O0);}var O=[];var Q=function(S,T){var R=S;if(T.override){if(T.override===true){R=T.obj;}else{R=T.override;}}T.fn.call(R,T.obj);};var L,K,N,M;for(L=0,K=F.length;L0){for(var Q=0,S=T.length;Q0){N=I.length;while(N){M=N-1;L=I[M];if(L){Q.removeListener(L[Q.EL],L[Q.TYPE],L[Q.FN],M);}N--;}L=null;}G=null;Q._simpleRemove(window,"unload",Q._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var A=YAHOO.util.Event;A.on=A.addListener;if(A.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);A._dri=setInterval(function(){var C=document.createElement("p");try{C.doScroll("left");clearInterval(A._dri);A._dri=null;A._ready();C=null;}catch(B){C=null;}},A.POLL_INTERVAL);}else{if(A.webkit){A._dri=setInterval(function(){var B=document.readyState;if("loaded"==B||"complete"==B){clearInterval(A._dri);A._dri=null;A._ready();}},A.POLL_INTERVAL);}else{A._simpleAdd(document,"DOMContentLoaded",A._ready);}}A._simpleAdd(window,"load",A._load);A._simpleAdd(window,"unload",A._unload);A._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{}; +var F=this.__yui_subscribers[G];if(F){for(var C=0;C=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E");if(typeof A=="boolean"){C.src="javascript:false";}else{if(typeof secureURI=="string"){C.src=A;}}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[];var B=A.split("&");for(var C=0;C0){for(var G=0;G0)?C:0;}YAHOO.util.Dom.setStyle(this.getEl(),A,C+B);},getAttribute:function(A){var C=this.getEl();var E=YAHOO.util.Dom.getStyle(C,A);if(E!=="auto"&&!this.patterns.offsetUnit.test(E)){return parseFloat(E);}var B=this.patterns.offsetAttribute.exec(A)||[];var F=!!(B[3]);var D=!!(B[2]);if(D||(YAHOO.util.Dom.getStyle(C,"position")=="absolute"&&F)){E=C["offset"+B[0].charAt(0).toUpperCase()+B[0].substr(1)];}else{E=0;}return E;},getDefaultUnit:function(A){if(this.patterns.defaultUnit.test(A)){return"px";}return"";},setRuntimeAttribute:function(B){var G;var C;var D=this.attributes;this.runtimeAttributes[B]={};var F=function(H){return(typeof H!=="undefined");};if(!F(D[B]["to"])&&!F(D[B]["by"])){return false;}G=(F(D[B]["from"]))?D[B]["from"]:this.getAttribute(B);if(F(D[B]["to"])){C=D[B]["to"];}else{if(F(D[B]["by"])){if(G.constructor==Array){C=[];for(var E=0,A=G.length;E0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B0&&!(K[0] instanceof Array)){K=[K];}else{var J=[];for(L=0,N=K.length;L0){this.runtimeAttributes[O]=this.runtimeAttributes[O].concat(K);}this.runtimeAttributes[O][this.runtimeAttributes[O].length]=H;}else{E.setRuntimeAttribute.call(this,O);}};var A=function(F,H){var G=D.Dom.getXY(this.getEl());F=[F[0]-G[0]+H[0],F[1]-G[1]+H[1]];return F;};var C=function(F){return(typeof F!=="undefined");};})();(function(){YAHOO.util.Scroll=function(E,D,F,G){if(E){YAHOO.util.Scroll.superclass.constructor.call(this,E,D,F,G);}};YAHOO.extend(YAHOO.util.Scroll,YAHOO.util.ColorAnim);var B=YAHOO.util;var C=B.Scroll.superclass;var A=B.Scroll.prototype;A.toString=function(){var D=this.getEl();var E=D.id||D.tagName;return("Scroll "+E);};A.doMethod=function(D,G,E){var F=null;if(D=="scroll"){F=[this.method(this.currentFrame,G[0],E[0]-G[0],this.totalFrames),this.method(this.currentFrame,G[1],E[1]-G[1],this.totalFrames)]; +}else{F=C.doMethod.call(this,D,G,E);}return F;};A.getAttribute=function(D){var F=null;var E=this.getEl();if(D=="scroll"){F=[E.scrollLeft,E.scrollTop];}else{F=C.getAttribute.call(this,D);}return F;};A.setAttribute=function(D,G,F){var E=this.getEl();if(D=="scroll"){E.scrollLeft=G[0];E.scrollTop=G[1];}else{C.setAttribute.call(this,D,G,F);}};})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.4.1",build:"742"});if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(D,C){for(var E in this.ids){for(var B in this.ids[E]){var F=this.ids[E][B];if(!this.isTypeOfDD(F)){continue;}F[D].apply(F,C);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(B){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(C,B){if(!this.initialized){this.init();}if(!this.ids[B]){this.ids[B]={};}this.ids[B][C.id]=C;},removeDDFromGroup:function(D,B){if(!this.ids[B]){this.ids[B]={};}var C=this.ids[B];if(C&&C[D.id]){delete C[D.id];}},_remove:function(C){for(var B in C.groups){if(B&&this.ids[B][C.id]){delete this.ids[B][C.id];}}delete this.handleIds[C.id];},regHandle:function(C,B){if(!this.handleIds[C]){this.handleIds[C]={};}this.handleIds[C][B]=B;},isDragDrop:function(B){return(this.getDDById(B))?true:false;},getRelated:function(G,C){var F=[];for(var E in G.groups){for(var D in this.ids[E]){var B=this.ids[E][D];if(!this.isTypeOfDD(B)){continue;}if(!C||B.isTarget){F[F.length]=B;}}}return F;},isLegalTarget:function(F,E){var C=this.getRelated(F,true);for(var D=0,B=C.length;Dthis.clickPixelThresh||C>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){B.b4Drag(E);if(B){B.onDrag(E);}if(B){this.fireEvents(E,false);}}this.stopEvent(E);}},fireEvents:function(T,J){var V=this.dragCurrent;if(!V||V.isLocked()||V.dragOnly){return ;}var L=YAHOO.util.Event.getPageX(T),K=YAHOO.util.Event.getPageY(T),M=new YAHOO.util.Point(L,K),H=V.getTargetCoord(M.x,M.y),E=V.getDragEl(),S=new YAHOO.util.Region(H.y,H.x+E.offsetWidth,H.y+E.offsetHeight,H.x),G=[],I=[],D=[],U=[],R=[],C={},N=[];for(var P in this.dragOvers){var W=this.dragOvers[P];if(!this.isTypeOfDD(W)){continue;}if(!this.isOverTarget(M,W,this.mode,S)){I.push(W);}G[P]=true;delete this.dragOvers[P];}for(var O in V.groups){if("string"!=typeof O){continue;}for(P in this.ids[O]){var F=this.ids[O][P];if(!this.isTypeOfDD(F)){continue;}if(F.isTarget&&!F.isLocked()&&F!=V){if(this.isOverTarget(M,F,this.mode,S)){C[O]=true;if(J){U.push(F);}else{if(!G[F.id]){R.push(F);}else{D.push(F);}this.dragOvers[F.id]=F;}}}}}this.interactionInfo={out:I,enter:R,over:D,drop:U,point:M,draggedRegion:S,sourceRegion:this.locationCache[V.id],validDrop:J};for(var B in C){N.push(B);}if(J&&!U.length){this.interactionInfo.validDrop=false;V.onInvalidDrop(T);}if(this.mode){if(I.length){V.b4DragOut(T,I);if(V){V.onDragOut(T,I);}}if(R.length){if(V){V.onDragEnter(T,R,N);}}if(D.length){if(V){V.b4DragOver(T,D,N);}if(V){V.onDragOver(T,D,N);}}if(U.length){if(V){V.b4DragDrop(T,U,N);}if(V){V.onDragDrop(T,U,N);}}}else{var Q=0;for(P=0,Q=I.length;P2000){}else{setTimeout(B._addListeners,10);if(document&&document.body){B._timeoutCount+=1;}}}},handleWasClicked:function(B,D){if(this.isHandle(D,B.id)){return true;}else{var C=B.parentNode;while(C){if(this.isHandle(D,C.id)){return true;}else{C=C.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(E,C,D){this.initTarget(E,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);},initTarget:function(E,C,D){this.config=D||{};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){return ;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C); +this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(H,G){var D=H.which||H.button;if(this.primaryButtonOnly&&D>1){return ;}if(this.isLocked()){return ;}var C=this.b4MouseDown(H);var E=this.onMouseDown(H);if((C===false)||(E===false)){return ;}this.DDM.refreshCache(this.groups);var F=new YAHOO.util.Point(A.getPageX(H),A.getPageY(H));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(F,this)){}else{if(this.clickValidator(H)){this.setStartPosition();this.DDM.handleMouseDown(H,this);this.DDM.stopEvent(H);}else{}}},clickValidator:function(D){var C=A.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(Cthis.maxX){C=this.maxX;}}if(this.constrainY){if(Fthis.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G0&&I-NB&&F0&&J-D \ No newline at end of file diff --git a/ehcp/extplorer/style/opacity.js b/ehcp/extplorer/style/opacity.js new file mode 100755 index 0000000..6a83154 --- /dev/null +++ b/ehcp/extplorer/style/opacity.js @@ -0,0 +1,50 @@ +/* +* This nice script fades in and out using CSS and JS +* +* http://www.brainerror.net/scriptsscripts_blendtrans.php +*/ +function opacity(id, opacStart, opacEnd, millisec) { + //speed for each frame + var speed = Math.round(millisec / 100); + var timer = 0; + + //determine the direction for the blending, if start and end are the same nothing happens + if(opacStart > opacEnd) { + for(i = opacStart; i >= opacEnd; i--) { + setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); + timer++; + } + } else if(opacStart < opacEnd) { + for(i = opacStart; i <= opacEnd; i++) + { + setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); + timer++; + } + } +} + +//change the opacity for different browsers +function changeOpac(opacity, id) { + var object = document.getElementById(id).style; + object.opacity = (opacity / 100); + object.MozOpacity = (opacity / 100); + object.KhtmlOpacity = (opacity / 100); + object.filter = "alpha(opacity=" + opacity + ")"; +} + +// When working with multiple opacities you might notice that you +// cannot always know the starting opacity when writing the page. +// To get arround this I created the function currentOpac(), +// it simply retrieves the current opacity of an element and then fades from that. +function currentOpac(id, opacEnd, millisec) { + //standard opacity is 100 + var currentOpac = 100; + + //if the element has an opacity set, get it + if(document.getElementById(id).style.opacity < 100) { + currentOpac = document.getElementById(id).style.opacity * 100; + } + + //call for the function that changes the opacity + opacity(id, currentOpac, opacEnd, millisec) +} \ No newline at end of file diff --git a/ehcp/extplorer/style/style.css b/ehcp/extplorer/style/style.css new file mode 100755 index 0000000..9b796fe --- /dev/null +++ b/ehcp/extplorer/style/style.css @@ -0,0 +1,441 @@ +input, select { font-size: 10px; border: 1px solid silver; } +textarea { font-size: 11px; border: 1px solid silver; } + +.rowdata { + background-color: #EAECEE; +} + +.rowdatasel { + background-color: #D8E1EB; +} + +td.header { + background-color: #DDDDDD; + vertical-align: middle; +} + +td.title { + background-repeat: repeat-x; + background-image: url(./tablebg.gif); + font-weight: bold; + font-size: 13; + border-top: solid 1px #000000; + border-bottom: solid 1px #000000; +} + +small { + font-size: 10; +} + + +a, a:link, a:visited { + + text-decoration: none; +} + +a:hover, a:active { + + text-decoration: none; +} +.ext_error, .ext_message { + font-size: 120%; + margin-top: 0.8em; + margin-left: auto; + margin-right: auto; + width: 70% !important; + clear: both; + text-align: justify; + vertical-align: middle; + border-collapse: collapse; + padding: 15px 20px 15px 80px; + background-position: 20px 50%; + background-repeat: no-repeat; + -moz-border-radius: 20px; + -khtml-border-radius: 20px; + border-radius: 20px; +} +.ext_error { + background-color: #fdd; + background-image: url( ../images/_log_error.png ); +} +.ext_message { + background-color: #f1f3f5; + background-image: url( ../images/_info.gif ); +} + +.ytheme-gray .x-layout-panel-north{ + border-bottom:2px solid #f3f2e7; +} +.x-tabs-item-body {padding:10px;} + +#dialog_tabpanel .x-panel { + height: 322px; + overflow: auto; +} + +.ext_statusbar { + font-family: Arial, Helvetica, sans-serif; + font-size:8pt; + background-image: url('../scripts/extjs3/resources/images/default/grid/loading.gif'); + background-repeat: no-repeat; + background-position: left; + padding-left:20px; + padding-top:3px; + height:18px; +} +.done { + background-image: url('../scripts/extjs3/resources/images/default/grid/done.gif'); +} +.success { + font-weight: bold; + color: green; +} +.error { + font-weight: bold; + color: red; +} +.search-item { + font:normal 11px tahoma, arial, helvetica, sans-serif; + padding:3px 10px 3px 10px; + border-bottom:1px solid #eeeeee; +} +.search-item h3 { + display:block; + font:inherit; + font-weight:bold; +} + +.search-item h3 span { + float: right; + font-weight:normal; + margin:0 0 5px 5px; + width:100px; + display:block; + clear:none; +} +.body-wrap { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + color: #222; + background-color:#FFFFFF; + margin: 0px; + padding: 10px; + position:relative; +} +.body-wrap { + width:95%; +} + +.body-wrap ul.list { + margin-left:20px; + margin-bottom:10px; +} +.body-wrap ul.list li { + list-style:inside square; + padding:2px; +} +.body-wrap .description p { + margin:8px 3px !important; +} +.body-wrap .description h4{ + color:#083772; + border-bottom:1px dashed #ccc; + margin:8px 0; + padding-bottom:3px; +} +.body-wrap, .body-wrap td, .body-wrap th { + font-size: 13px; +} +.body-wrap code { + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} +.body-wrap pre { + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} +.body-wrap th { + text-align: left; + vertical-align:middle; + border-right:1px solid #d0d0d0; + border-top:1px solid #eee; + border-left:1px solid #eee; + background: #f9f9f9 url('../scripts/extjs3/resources/images/default/grid/grid3-hrow.gif') repeat-x 0 top; + padding:3px; +} +.body-wrap .msource-header { + border-right: 0 none; +} +.body-wrap .top-tools{ + font-size:11px; + text-align:right; +} +.body-wrap table { + background-color: white; +} +.body-wrap a { + color: #083772; +} +.body-wrap a:link { + color: #083772; + text-decoration: none; +} + +.body-wrap a:visited { + color: #1e4e8f; + text-decoration: none; +} + +.body-wrap a:hover { + text-decoration: underline; + color: #0000CC; +} + +.body-wrap a:active { + text-decoration: none; + color: #1e4e8f; +} + +/* Headings */ +.body-wrap h1, .body-wrap h2, .body-wrap h3, .body-wrap h4, .body-wrap h5, .body-wrap h6 { + font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; + font-weight: bold; + margin:3px 300px 3px 0; + letter-spacing: 1px; + width: 90%; +} + +.body-wrap h1 { + font-size: 18px; +} + +.body-wrap h2 { + font-weight: bold; + font-size: 15px; + padding-top: 20px; + padding-bottom: 5px; +} + +.body-wrap h3 { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 16px; +} + +.body-wrap h4 { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 14px; +} + +.body-wrap h5 { + font-size: 11px; +} + +.body-wrap .label { + font-weight: bold; + padding:3px 15px 3px 0; + color:#333; +} + +.body-wrap .hd-info { + color:#333; + padding:3px; +} +.body-wrap .hd-info a { + +} +.body-wrap .description{ + margin: 10px 0px; +} +.body-wrap .member-table{ + width:100%; + margin-bottom:10px; +} +.body-wrap .member-table td{ + padding:4px; + vertical-align:top; + padding-right:15px; +} +.body-wrap .member-table td.sig { + padding-left:7px; +} +.body-wrap .alt{ + /*background:#f1f1f1;*/ +} +.body-wrap .member-table td.micon{ + width:16px; + padding:0px; + background: #f9f9f9 url(expand-bg.gif) repeat-y top right; + border-right:1px solid #d0d0d0; +} +.body-wrap .member-table td.micon a { + display:block; + height:1px; + width:1px; + overflow:hidden; + cursor:default; +} +.body-wrap .member-table .expandable td.micon a { + display:block; + width:98%; + height:30px; + text-decoration:none !important; + -moz-outline:none; + outline:none; +} + +.body-wrap .member-table td.msource{ + width:100px; +} +.mlink{ + font-weight:bold; +} + +.member-table { + border:1px solid #d0d0d0; +} +.member-table tr.inherited td.msource{ + background-image: url(inherited.gif); + background-position:2px 4px; + background-repeat: no-repeat; + padding-left:18px; +} +.member-table .mdesc{ + padding:5px 0; + color:#444; +} +.member-table td.micon,.member-table td.sig,.member-table td.msource{ + border-top:1px solid #d0d0d0; +} +.body-wrap .optional{ + color:#444 !important; +} + +.body-wrap pre { + background: #F8F8F8; + border: 1px dotted #ccc; + margin: 1em ; + margin-right: 0; + font-size: 12px; + line-height:14px; + padding:7px; + margin-left:0; +} +.detail-wrap{ + +} +.mdetail-head{ + margin-top:10px; +} +.mdetail{ + padding:7px; + border-top:1px dotted #ccc; +} +.mdetail h3{ + margin: 5px 0px; + font-size:14px; + color:#083772; +} +.mdetail-desc{ + margin:8px; +} +.mdetail-def{ + font-style: italic; + font-size: 12px; + margin-top:10px; + margin-left:8px; + display:block; +} +.sub-desc{ + margin:5px; + margin-left:16px; +} +.mdetail-params{ + margin-top:10px; +} +.mdetail-params strong{ + display: block; + margin-bottom:3px; + font-size:11px; + font-weight:bold; + color:#555; +} + +.mdetail-params ul{ + list-style: inside; + list-style-type: circle; + margin:12px; +} +.mdetail-params li{ + list-style: inside; + list-style-type: circle; +} +pre code{ + font-size:12px !important; + color:#000; + line-height:16px !important; +} +pre code b{ + font-weight: normal; + color: #800080; +} +pre code em{ + font-weight: normal; + color: #008080; + background-color:#eee; +} +pre code i,pre code i b,pre code i em{ + font-weight: normal; + font-style: normal; + color: #999; +} + + +.mdesc .long { + display:none; +} +.mdesc .long .mdetail-params { + font-size:12px; + padding-left:12px; +} +.expanded .mdesc .short { + display:none; +} + +.expanded .mdesc .long { + display: block; +} + +.full-details .expandable .micon a { + height:1px !important; + width:1px !important; + overflow:hidden; + cursor:default; +} + +.full-details .mdesc .short { + display:none !important; +} + +.full-details .mdesc .long { + display: block !important; +} + +.full-details .body-wrap .member-table .expanded td.micon{ + background: #f9f9f9 url(expand-bg.gif) repeat-y top right; +} + +div.hr { + height:1px; + background:#ccc; + margin: 5px 0; + overflow:hidden; + line-height:1px; +} + + +.expanded .mdesc .long { + line-height:18px; +} +del{ background: #fcc} +ins{ background: #cfc } \ No newline at end of file diff --git a/ehcp/extplorer/style/tablebg.gif b/ehcp/extplorer/style/tablebg.gif new file mode 100755 index 0000000..58a7ded Binary files /dev/null and b/ehcp/extplorer/style/tablebg.gif differ diff --git a/ehcp/extplorer/uploadhandler.php b/ehcp/extplorer/uploadhandler.php new file mode 100755 index 0000000..af55a6c --- /dev/null +++ b/ehcp/extplorer/uploadhandler.php @@ -0,0 +1,29 @@ += 1.5 + $config = new JConfig; + $server->db_host = $config->host; + $server->db_name = $config->db; + $server->db_user = $config->user; + $server->db_passwd = $config->password; + $server->db_type = $config->dbtype; + $server->db_prefix = $config->dbprefix.'_extwebdav_'; + + } elseif(!empty($mosConfig_absolute_path)) { + // Joomla! 1.0 + $server->db_host = $mosConfig_host; + $server->db_name = $mosConfig_db; + $server->db_user = $mosConfig_user; + $server->db_passwd = $mosConfig_password; + $server->db_type = 'mysql'; + $server->db_prefix = $mosConfig_dbprefix.'_extwebdav_'; + } else { + header( 'HTTP/1.0 500 Internal Error'); + echo 'Internal Error: Configuration File not found.'; + exit; + } +} else { + $server->db_host = $GLOBALS['DB_HOST']; + $server->db_name = $GLOBALS['DB_NAME']; + $server->db_user = $GLOBALS['DB_USER']; + $server->db_passwd = $GLOBALS['DB_PASSWORD']; + $server->db_type = $GLOBALS['DB_TYPE']; +} + +# Real path of your site +$server->ServeRequest($GLOBALS["home_dir"]); + +?> \ No newline at end of file diff --git a/ehcp/extplorer/webdav_authenticate.php b/ehcp/extplorer/webdav_authenticate.php new file mode 100755 index 0000000..0729762 --- /dev/null +++ b/ehcp/extplorer/webdav_authenticate.php @@ -0,0 +1,85 @@ +1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1); + $data = array(); + + preg_match_all('@(\w+)=([\'"]?)([%a-zA-Z0-9=./\_-]+)\2@', $txt, $matches, PREG_SET_ORDER); + + foreach ($matches as $m) { + $data[$m[1]] = $m[3]; + unset($needed_parts[$m[1]]); + } + + return $needed_parts ? false : $data; +} + +function AuthenticationDigestHTTP($realm, $users, $phpcgi=0) { + if (empty($_SERVER['PHP_AUTH_DIGEST']) && empty($_SERVER['REDIRECT_REMOTE_USER'])){ + header('HTTP/1.1 401 Unauthorized'); + header('WWW-Authenticate: Digest realm="'.$realm.'" qop="auth" nonce="'.uniqid(rand(), true).'" opaque="'.md5($realm).'"'); + die('401 Unauthorized'); + } + // analyze the PHP_AUTH_DIGEST variable + $auth = $_SERVER['PHP_AUTH_DIGEST']; + if ($phpcgi == 1) { + $auth = $_SERVER['REDIRECT_REMOTE_USER']; + } + $data = http_digest_parse($auth); + if (!array_key_exists($data['username'], $users)) { + header('HTTP/1.1 401 Unauthorized'); + die('401 Unauthorized'); + } + + // generate the valid response + $A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]); + $A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']); + $valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2); + + if ($data['response'] != $valid_response) { + header('HTTP/1.1 401 Unauthorized'); + die('401 Unauthorized'); + } + return TRUE; +} + +function AuthenticationBasicHTTP($realm, $users, $phpcgi=0) { + + if ((empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['REDIRECT_REMOTE_USER'])) || empty($_SERVER['PHP_AUTH_PW'])) { + header('WWW-Authenticate: Basic realm="'.$realm.'"'); + header('HTTP/1.0 401 Unauthorized'); + die('401 Unauthorized'); + } + + $user = $_SERVER['PHP_AUTH_USER']; + if ($phpcgi == 1) { + $matches = explode(' ', $_SERVER['REDIRECT_REMOTE_USER']); + list($name, $password) = explode(':', base64_decode($matches[1])); + $_SERVER['PHP_AUTH_USER'] = $user = strip_tags($name); + $_SERVER['PHP_AUTH_PW'] = strip_tags($password); + } + + if( !empty($GLOBALS['webdav_authentication_method']) && file_exists(_EXT_PATH.'/include/authentication/'.$GLOBALS['webdav_authentication_method'].'.php') ) { + require_once( _EXT_PATH.'/include/authentication/'.$GLOBALS['webdav_authentication_method'].'.php'); + $classname = 'ext_'.$GLOBALS['webdav_authentication_method'].'_authentication'; + $auth = new $classname(); + + } else { + require_once( _EXT_PATH.'/include/authentication/extplorer.php'); + $auth = new ext_extplorer_authentication(); + } + if( $auth->onAuthenticate(array('username' => $user, 'password' => $_SERVER['PHP_AUTH_PW'] )) !== false ) { + return TRUE; + } + header('WWW-Authenticate: Basic realm="'.$realm.'"'); + header('HTTP/1.0 401 Unauthorized'); + die('401 Unauthorized'); + return FALSE; +} diff --git a/ehcp/extplorer/webdav_table.sql.php b/ehcp/extplorer/webdav_table.sql.php new file mode 100755 index 0000000..b184e6f --- /dev/null +++ b/ehcp/extplorer/webdav_table.sql.php @@ -0,0 +1,50 @@ + +CREATE DATABASE webdav; +USE webdav; + +-- +-- Table structure for table 'locks' +-- + +CREATE TABLE locks ( + token varchar(255) NOT NULL default '', + path varchar(200) NOT NULL default '', + expires int(11) NOT NULL default '0', + owner varchar(200) default NULL, + recursive int(11) default '0', + writelock int(11) default '0', + exclusivelock int(11) NOT NULL default 0, + PRIMARY KEY (token), + UNIQUE KEY token (token), + KEY path (path), + KEY expires (expires) +) TYPE=MyISAM; + +-- +-- Dumping data for table 'locks' +-- + + +-- +-- Table structure for table 'properties' +-- + +CREATE TABLE properties ( + path varchar(255) NOT NULL default '', + name varchar(120) NOT NULL default '', + ns varchar(120) NOT NULL default 'DAV:', + value text, + PRIMARY KEY ( `ns` ( 100 ) , `path` ( 100 ) , `name` ( 50 ) ), + KEY path (path) +) TYPE=MyISAM; + +-- +-- Dumping data for table 'properties' +-- + + diff --git a/ehcp/fail2ban/apache-dos.conf b/ehcp/fail2ban/apache-dos.conf new file mode 100644 index 0000000..cb9a283 --- /dev/null +++ b/ehcp/fail2ban/apache-dos.conf @@ -0,0 +1,22 @@ +# Fail2Ban configuration file +# +# Author: Xela +# +# $Revision: 728 $ +# + +[Definition] + +# Option: failregex +# Notes.: regex to match the Forbidden log entrys in apache error.log +# maybe (but not only) provided by mod_evasive +# +# Values: TEXT +# +failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client \] client denied by server configuration:\s + +# Option: ignoreregex +# Notes.: regex to ignore. If this regex matches, the line is ignored. +# Values: TEXT +# +ignoreregex = diff --git a/ehcp/fail2ban/ehcp.conf b/ehcp/fail2ban/ehcp.conf new file mode 100755 index 0000000..b97276c --- /dev/null +++ b/ehcp/fail2ban/ehcp.conf @@ -0,0 +1,23 @@ +# Fail2Ban configuration file +# +# Author: Eric Martin +# +# $Revision: 1 $ +# + +[Definition] + +# Option: failregex +# Notes.: regex to match the password failure messages in the logfile. The +# host must be matched by a group named "host". The tag "" can +# be used for standard IP/hostname matching and is only an alias for +# (?:::f{4,6}:)?(?P[\w\-.^_]+) +# Values: TEXT +# +failregex = EHCP authentication failed attemping to login as user .* from + +# Option: ignoreregex +# Notes.: regex to ignore. If this regex matches, the line is ignored. +# Values: TEXT +# +ignoreregex = diff --git a/ehcp/fail2ban/jail.local b/ehcp/fail2ban/jail.local new file mode 100755 index 0000000..97c8ed6 --- /dev/null +++ b/ehcp/fail2ban/jail.local @@ -0,0 +1,300 @@ +# Fail2Ban configuration file. +# +# This file was composed for Debian systems from the original one +# provided now under /usr/share/doc/fail2ban/examples/jail.conf +# for additional examples. +# +# To avoid merges during upgrades DO NOT MODIFY THIS FILE +# and rather provide your changes in /etc/fail2ban/jail.local +# +# Author: Yaroslav O. Halchenko +# +# $Revision: 281 $ +# + +# The DEFAULT allows a global definition of the options. They can be override +# in each jail afterwards. + +[DEFAULT] + +# "ignoreip" can be an IP address, a CIDR mask or a DNS host +ignoreip = 127.0.0.1 +bantime = 3600 +maxretry = 8 + +# "backend" specifies the backend used to get files modification. Available +# options are "gamin", "polling" and "auto". +# yoh: For some reason Debian shipped python-gamin didn't work as expected +# This issue left ToDo, so polling is default backend for now +backend = polling + +# +# Destination email address used solely for the interpolations in +# jail.{conf,local} configuration files. +destemail = changeme@gmail.com + +# +# ACTIONS +# + +# Default banning action (e.g. iptables, iptables-new, +# iptables-multiport, shorewall, etc) It is used to define +# action_* variables. Can be overriden globally or per +# section within jail.local file +banaction = iptables-multiport + +# email action. Since 0.8.1 upstream fail2ban uses sendmail +# MTA for the mailing. Change mta configuration parameter to mail +# if you want to revert to conventional 'mail'. +mta = sendmail + +# Default protocol +protocol = tcp + +# +# Action shortcuts. To be used to define action parameter + +# The simplest action to take: ban only +action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] + +# ban & send an e-mail with whois report to the destemail. +action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] + %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s] + +# ban & send an e-mail with whois report and relevant log lines +# to the destemail. +action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] + %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s] + +# Choose default action. To change, just override value of 'action' with the +# interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local +# globally (section [DEFAULT]) or per specific section +# action = %(action_)s +action = %(action_mw)s + +# +# JAILS +# + +# Next jails corresponds to the standard configuration in Fail2ban 0.6 which +# was shipped in Debian. Enable any defined here jail by including +# +# [SECTION_NAME] +# enabled = true + +# +# in /etc/fail2ban/jail.local. +# +# Optionally you may override any other parameter (e.g. banaction, +# action, port, logpath, etc) in that section within jail.local + +[ssh] + +enabled = true +port = ssh +filter = sshd +logpath = /var/log/auth.log +maxretry = 5 + +# Generic filter for pam. Has to be used with action which bans all ports +# such as iptables-allports, shorewall +[pam-generic] + +enabled = false +# pam-generic filter can be customized to monitor specific subset of 'tty's +filter = pam-generic +# port actually must be irrelevant but lets leave it all for some possible uses +port = all +banaction = iptables-allports +port = anyport +logpath = /var/log/auth.log +maxretry = 6 + +[xinetd-fail] + +enabled = false +filter = xinetd-fail +port = all +banaction = iptables-multiport-log +logpath = /var/log/daemon.log +maxretry = 2 + + +[ssh-ddos] + +enabled = false +port = ssh +filter = sshd-ddos +logpath = /var/log/auth.log +maxretry = 6 + +# +# HTTP servers +# + +[apache] + +enabled = true +port = http,https +filter = apache-auth +logpath = /var/log/apache*/*error.log +maxretry = 6 + +[apache-dos] +enabled = true +port = http,https +filter = apache-dos +logpath = /var/log/apache*/*error.log +maxretry = 5 + +[ehcp] +# section for Easy Hosting Control Panel, ehcp.net +enabled = true +port = http,https +filter = ehcp +logpath = /var/www/new/ehcp/log/ehcp_failed_authentication.log +maxretry = 10 + +# default action is now multiport, so apache-multiport jail was left +# for compatibility with previous (<0.7.6-2) releases +[apache-multiport] + +enabled = false +port = http,https +filter = apache-auth +logpath = /var/log/apache*/*error.log +maxretry = 6 + +[apache-noscript] + +enabled = false +port = http,https +filter = apache-noscript +logpath = /var/log/apache*/*error.log +maxretry = 6 + +[apache-overflows] + +enabled = false +port = http,https +filter = apache-overflows +logpath = /var/log/apache*/*error.log +maxretry = 2 + +# +# FTP servers +# + +[vsftpd] + +enabled = true +port = ftp,ftp-data,ftps,ftps-data +filter = vsftpd +logpath = /var/log/vsftpd.log +# or overwrite it in jails.local to be +# logpath = /var/log/auth.log +# if you want to rely on PAM failed login attempts +# vsftpd's failregex should match both of those formats +maxretry = 15 + + +[proftpd] + +enabled = false +port = ftp,ftp-data,ftps,ftps-data +filter = proftpd +logpath = /var/log/proftpd/proftpd.log +maxretry = 6 + + +[wuftpd] + +enabled = false +port = ftp,ftp-data,ftps,ftps-data +filter = wuftpd +logpath = /var/log/auth.log +maxretry = 6 + + +# +# Mail servers +# + +[postfix] + +enabled = true +port = smtp,ssmtp +filter = postfix +logpath = /var/log/mail.log + + +[couriersmtp] + +enabled = false +port = smtp,ssmtp +filter = couriersmtp +logpath = /var/log/mail.log + + +# +# Mail servers authenticators: might be used for smtp,ftp,imap servers, so +# all relevant ports get banned +# + +[courierauth] + +enabled = false +port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s +filter = courierlogin +logpath = /var/log/mail.log + + +[sasl] + +enabled = true +port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s +filter = postfix-sasl +# You might consider monitoring /var/log/warn.log instead +# if you are running postfix. See http://bugs.debian.org/507990 +logpath = /var/log/mail.log +maxretry = 4 + +# DNS Servers + + +# These jails block attacks against named (bind9). By default, logging is off +# with bind9 installation. You will need something like this: +# +# logging { +# channel security_file { +# file "/var/log/named/security.log" versions 3 size 30m; +# severity dynamic; +# print-time yes; +# }; +# category security { +# security_file; +# }; +# }; +# +# in your named.conf to provide proper logging + +# Word of Caution: +# Given filter can lead to DoS attack against your DNS server +# since there is no way to assure that UDP packets come from the +# real source IP +[named-refused-udp] + +enabled = false +port = domain,953 +protocol = udp +filter = named-refused +logpath = /var/log/named/security.log + +[named-refused-tcp] + +enabled = false +port = domain,953 +protocol = tcp +filter = named-refused +logpath = /var/log/named/security.log + diff --git a/ehcp/fail2ban/postfix-sasl.conf b/ehcp/fail2ban/postfix-sasl.conf new file mode 100755 index 0000000..660b8e8 --- /dev/null +++ b/ehcp/fail2ban/postfix-sasl.conf @@ -0,0 +1,14 @@ +# Fail2Ban filter for postfix authentication failures +# + +[INCLUDES] + +before = common.conf + +[Definition] + +_daemon = postfix/smtpd + +failregex = ^%(__prefix_line)swarning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$ + +# Author: Yaroslav Halchenko diff --git a/ehcp/favicon.ico b/ehcp/favicon.ico new file mode 100644 index 0000000..1926c1b Binary files /dev/null and b/ehcp/favicon.ico differ diff --git a/ehcp/fixes/apache2/modsecurity/mod_security_base_rules.tar.gz b/ehcp/fixes/apache2/modsecurity/mod_security_base_rules.tar.gz new file mode 100644 index 0000000..b58f5f7 Binary files /dev/null and b/ehcp/fixes/apache2/modsecurity/mod_security_base_rules.tar.gz differ diff --git a/ehcp/fixes/apache2/modsecurity/mod_security_rules_13.10.tar.gz b/ehcp/fixes/apache2/modsecurity/mod_security_rules_13.10.tar.gz new file mode 100644 index 0000000..b7ed2fa Binary files /dev/null and b/ehcp/fixes/apache2/modsecurity/mod_security_rules_13.10.tar.gz differ diff --git a/ehcp/fixes/apache2/setehcpapache2.tar.gz b/ehcp/fixes/apache2/setehcpapache2.tar.gz new file mode 100644 index 0000000..a13f62a Binary files /dev/null and b/ehcp/fixes/apache2/setehcpapache2.tar.gz differ diff --git a/ehcp/fixes/api/create_mysql_db_under_ehcp_user.tar.gz b/ehcp/fixes/api/create_mysql_db_under_ehcp_user.tar.gz new file mode 100644 index 0000000..1041500 Binary files /dev/null and b/ehcp/fixes/api/create_mysql_db_under_ehcp_user.tar.gz differ diff --git a/ehcp/fixes/api/create_mysql_db_user.php b/ehcp/fixes/api/create_mysql_db_user.php new file mode 100644 index 0000000..9fc2d02 --- /dev/null +++ b/ehcp/fixes/api/create_mysql_db_user.php @@ -0,0 +1,67 @@ + 3){ + $dbnameToCreate = $argv[1]; + $mysqlUser = $argv[2]; + $mysqlUserPass = $argv[3]; + if(isset($argv[4])){ + $sqlFileToRunAfter = $argv[4]; + } + $curDir = getcwd(); + + if(chdir("/var/www/new/ehcp/")){ + /* EHCP API Call */ + require ("classapp.php"); + $app = new Application(); + $app->connectTodb(); # fill config.php with db user/pass for things to work.. + $app->loadConfig(); + $mysqlInfo = $app->getMysqlServer('',false,__FUNCTION__); + if(!empty($mysqlInfo["pass"]) && !empty($dbnameToCreate) && !empty($mysqlUser) && !empty($mysqlUserPass)){ + $filecontent=" + drop database if exists " . $dbnameToCreate . "; + create database " . $dbnameToCreate . "; + grant all privileges on " . $dbnameToCreate . ".* to " . $mysqlUser . "@'localhost' identified by '" . $mysqlUserPass . "' with grant option; + grant all privileges on " . $dbnameToCreate . ".* to " . $mysqlUser . "@'127.0.0.1' identified by '" . $mysqlUserPass . "' with grant option; + grant all privileges on " . $dbnameToCreate . ".* to " . $mysqlUser . "@'127.0.1.1' identified by '" . $mysqlUserPass . "' with grant option; + "; + $file = "tempsql.sql"; + $handle = fopen($file, "w+"); + fwrite($handle, $filecontent); + fclose($handle); + + passthru("mysql -u root --password=" . $mysqlInfo["pass"] . " < $file"); # root pass changes here... if different , disabled + unlink($file); + + if(!empty($sqlFileToRunAfter)){ + if(file_exists($sqlFileToRunAfter)){ + passthru("mysql -u " . $mysqlUser . " --password=" . $mysqlUserPass . " " . $dbnameToCreate . " < " . $sqlFileToRunAfter); + } + } + } + /* END EHCP API Call */ + } + chdir($curDir); + } + + + + +?> diff --git a/ehcp/fixes/api/create_mysql_db_user.tar.gz b/ehcp/fixes/api/create_mysql_db_user.tar.gz new file mode 100644 index 0000000..209136e Binary files /dev/null and b/ehcp/fixes/api/create_mysql_db_user.tar.gz differ diff --git a/ehcp/fixes/api/getwebservertype.tar.gz b/ehcp/fixes/api/getwebservertype.tar.gz new file mode 100644 index 0000000..61a247b Binary files /dev/null and b/ehcp/fixes/api/getwebservertype.tar.gz differ diff --git a/ehcp/fixes/api/reset_all_global_web_templates.tar.gz b/ehcp/fixes/api/reset_all_global_web_templates.tar.gz new file mode 100644 index 0000000..433d0a9 Binary files /dev/null and b/ehcp/fixes/api/reset_all_global_web_templates.tar.gz differ diff --git a/ehcp/fixes/api/syncdomains_apiscript.tar.gz b/ehcp/fixes/api/syncdomains_apiscript.tar.gz new file mode 100644 index 0000000..302c166 Binary files /dev/null and b/ehcp/fixes/api/syncdomains_apiscript.tar.gz differ diff --git a/ehcp/fixes/api/update_ez_install.tar.gz b/ehcp/fixes/api/update_ez_install.tar.gz new file mode 100644 index 0000000..374b5cb Binary files /dev/null and b/ehcp/fixes/api/update_ez_install.tar.gz differ diff --git a/ehcp/fixes/daemon/systemd/ehcp.service b/ehcp/fixes/daemon/systemd/ehcp.service new file mode 100644 index 0000000..b7bb8fc --- /dev/null +++ b/ehcp/fixes/daemon/systemd/ehcp.service @@ -0,0 +1,14 @@ +# EHCP Force systemd Service Script +# By Eric Arnol-Martin +[Unit] +Description=Easy Hosting Control Panel (EHCP Force) Daemon www.ehcpforce.tk +After=network.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c "/var/www/new/ehcp/ehcpdaemon.sh" +ExecStop=-/bin/sh -c "/var/www/new/ehcp/ehcpdaemon_stop.sh" +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/ehcp/fixes/daemon/systemd/policyd_agent.service b/ehcp/fixes/daemon/systemd/policyd_agent.service new file mode 100644 index 0000000..fc83ae4 --- /dev/null +++ b/ehcp/fixes/daemon/systemd/policyd_agent.service @@ -0,0 +1,13 @@ +# PolicyD Agent systemd Script +# By Eric Arnol-Martin +[Unit] +Description=PolicyD Agent (works with EHCP Force www.ehcpforce.tk) +After=network.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c "nohup /var/www/new/ehcp/scripts/start_policyd.sh >> /dev/null 2>&1 &" +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/ehcp/fixes/policyd/amavisd-policyd.pm b/ehcp/fixes/policyd/amavisd-policyd.pm new file mode 100644 index 0000000..afd7a37 --- /dev/null +++ b/ehcp/fixes/policyd/amavisd-policyd.pm @@ -0,0 +1,775 @@ +# Cluebringer policy support for amavisd-new +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package Amavis::Custom; +use strict; + +use lib('/usr/local/lib/cbpolicyd-2.1'); + + +#my $DB_dsn = "DBI:SQLite:dbname=/tmp/cluebringer.sqlite"; +my $DB_dsn = "DBI:mysql:database=policyd;host=localhost"; +my $DB_user = "{ehcpusername}"; +my $DB_pass = "{ehcppass}"; +my $DB_prefix = ""; + + +# This is the amavis rule options we can use +my %ruleOptions = ( + 'boolean' => [ qw( + bypass_virus_checks + bypass_banned_checks + bypass_spam_checks + bypass_header_checks + + spam_modifies_subject + ) ], + + 'float' => [ qw( + spam_tag_level + spam_tag2_level + spam_tag3_level + spam_kill_level + spam_dsn_cutoff_level + spam_quarantine_cutoff_level + ) ], + + 'text' => [ qw( + spam_tag_subject + spam_tag2_subject + spam_tag3_subject + + quarantine_virus + quarantine_banned_file + quarantine_bad_header + quarantine_spam + + bcc_to + ) ], + + 'integer' => [ qw( + max_message_size + ) ], + + 'textlist' => [ qw( + banned_files + + sender_whitelist + sender_blacklist + + notify_admin_newvirus + notify_admin_virus + notify_admin_spam + notify_admin_banned_file + notify_admin_bad_header + ) ], +); + + + + +BEGIN { + import Amavis::Util qw(do_log); + import Amavis::rfc2821_2822_Tools qw(parse_message_id); + import Amavis::Conf qw( + D_REJECT + D_BOUNCE + D_DISCARD + D_PASS + ); + + # Use cluebringer modules + use cbp::config; + use awitpt::db::dblayer; + use cbp::tracking; + use cbp::policies; + use cbp::logging; +} + + + +sub new { + my($class,$conn,$msginfo) = @_; + my($self) = bless {}, $class; + + # Forge configuration + $self->{'inifile'}{'database'}{'dsn'} = $DB_dsn; + $self->{'inifile'}{'database'}{'username'} = $DB_user; + $self->{'inifile'}{'database'}{'password'} = $DB_pass; + $self->{'inifile'}{'database'}{'table_prefix'} = $DB_prefix; + cbp::config::Init($self); + + # Init system stuff + $self->{'dbh'} = awitpt::db::dbilayer::Init($self,'cbp'); + if (!defined($self->{'dbh'})) { + $self->log(LOG_WARN,"Failed to Initialize: ".awitpt::db::dbilayer::internalError()." ($$)"); + die; + } + if ($self->{'dbh'}->connect()) { + $self->log(LOG_WARN,"Failed to connect to database: ".$self->{'dbh'}->Error()." ($$)"); + die; + } + + # Setup database handle + awitpt::db::dblayer::setHandle($self->{'dbh'}); + + return $self; +} + + + +sub process_policy { + my($self,$conn,$msginfo,$pbn) = @_; + + do_log(5,"policyd/process_policy: Starting"); + + # Get message ID + my (undef,undef,$lastReceived) = $msginfo->get_header_field('received',0); + if (!($lastReceived =~ /with E?SMTPS?A? id ([0-9A-Z]+)/)) { + do_log(-1,"policyd/process_policy: Failed to parse in queue id from received line '$lastReceived'"); + return $pbn; + } + my $queueID = $1; + + # + # Pull session data + # + # We pull in this information so we can get the sasl details + # once we have hte sasl details we can generate a policy. + # We do all this because the email addy may of been changed + # due to an alias or distribution list. + do_log(5,"policyd/process_policy: Getting session data from queue ID '$queueID'"); + my $sessionData = getSessionDataFromQueueID($self,$queueID,$msginfo->client_addr,$msginfo->sender); + if (ref $sessionData ne "HASH") { + do_log(-1,"policyd/process_policy: No session data found"); + return $pbn; + } + + # Loop with recipients + my %recip_to_policy; + foreach my $r (@{$msginfo->per_recip_data}) { + my $emailAddy = $r->recip_addr; + + # If this recipient isn't part of the stored policy, get the policy ourselves + # This means that the recipients addy changed, or there is no policy for them?? + if (!defined($sessionData->{'_Recipient_To_Policy'}{$emailAddy})) { + # Override recipient + $sessionData->{'Recipient'} = $emailAddy; + # Now pull in policy + my $policy = getPolicy($self,$sessionData); + if (!$policy) { + next; + } + + $recip_to_policy{$emailAddy} = $policy; + + # Else just load + } else { + $recip_to_policy{$emailAddy} = $sessionData->{'_Recipient_To_Policy'}{$emailAddy}; + } + } + + # Loop with email addies + foreach my $emailAddy (keys %recip_to_policy) { + + # Start with a blank config + my %amavisConfig = (); + + # Loop with priorities, low to high + foreach my $priority (sort {$a <=> $b} keys %{$recip_to_policy{$emailAddy}}) { + + # Loop with each policyID + foreach my $policyID (@{$recip_to_policy{$emailAddy}->{$priority}}) { + + # Grab amavis policyID + my $amavisRule = $self->getAmavisRule($policyID); + # If no amavis policyID, next... + if (!$amavisRule) { + next; + } + + # Loop with variable types + foreach my $vartype (keys %ruleOptions) { + + # Start with checking booleans + if ($vartype eq "boolean") { + + # Loop with variables + foreach my $varname (@{$ruleOptions{$vartype}}) { + + # We ignore state 0, which is ignore/inherit + if ($amavisRule->{$varname."_m"} eq "0") { + + # Mode 2 is overwrite + } elsif ($amavisRule->{$varname."_m"} eq "2") { + $amavisConfig{$varname} = $amavisRule->{$varname}; + + # All other modes including mode 1 (merge) is invalid + } else { + do_log(-1,"policyd/process_policy: Mode '%s' for amavis policy '%s' variable '%s' is invalid as its a boolean", + $amavisRule->{$varname."_m"},$policyID,$varname); + } + } + + # Floats + } elsif ($vartype eq "float") { + # Loop with variables + foreach my $varname (@{$ruleOptions{$vartype}}) { + + # We ignore state 0, which is ignore/inherit + if ($amavisRule->{$varname."_m"} eq "0") { + + # Mode 2 is overwrite + } elsif ($amavisRule->{$varname."_m"} eq "2") { + $amavisConfig{$varname} = $amavisRule->{$varname}; + + # All other modes including mode 1 (merge) is invalid + } else { + do_log(-1,"policyd/process_policy: Mode '%s' for amavis policy '%s' variable '%s' is invalid as its a float", + $amavisRule->{$varname."_m"},$policyID,$varname); + } + } + + # Text + } elsif ($vartype eq "text") { + # Loop with variables + foreach my $varname (@{$ruleOptions{$vartype}}) { + + # We ignore state 0, which is ignore/inherit + if ($amavisRule->{$varname."_m"} eq "0") { + + # Mode 2 is overwrite + } elsif ($amavisRule->{$varname."_m"} eq "2") { + $amavisConfig{$varname} = $amavisRule->{$varname}; + + # All other modes including mode 1 (merge) is invalid + } else { + do_log(-1,"policyd/process_policy: Mode '%s' for amavis policy '%s' variable '%s' is invalid as its a text", + $amavisRule->{$varname."_m"},$policyID,$varname); + } + } + + # Integers + } elsif ($vartype eq "integer") { + # Loop with variables + foreach my $varname (@{$ruleOptions{$vartype}}) { + + # We ignore state 0, which is ignore/inherit + if ($amavisRule->{$varname."_m"} eq "0") { + + # Mode 2 is overwrite + } elsif ($amavisRule->{$varname."_m"} eq "2") { + $amavisConfig{$varname} = $amavisRule->{$varname}; + + # All other modes including mode 1 (merge) is invalid + } else { + do_log(-1,"policyd/process_policy: Mode '%s' for amavis policy '%s' variable '%s' is invalid as its a integer", + $amavisRule->{$varname."_m"},$policyID,$varname); + } + } + + # Text list (array) + } elsif ($vartype eq "textlist") { + # Loop with variables + foreach my $varname (@{$ruleOptions{$vartype}}) { + # We ignore state 0, which is ignore/inherit + if ($amavisRule->{$varname."_m"} eq "0") { + + # Mode 1 is merge + } elsif ($amavisRule->{$varname."_m"} eq "1") { + my @items = split /[,;\s+]/, $amavisRule->{$varname}; + + # If we already have a list, add to end of it + if (defined($amavisConfig{$varname})) { + push(@items,@{$amavisConfig{$varname}}); + } + + # Loop and get unique + my %uniqItems = (); + foreach my $item (@items) { + $uniqItems{$item} = 1; + } + + my @items = keys %uniqItems; + + # Only store the key list we have + $amavisConfig{$varname} = \@items; + + # Mode 2 is overwrite + } elsif ($amavisRule->{$varname."_m"} eq "2") { + my @items = split /[,;\s+]/, $amavisRule->{$varname}; + # Wipe and add + $amavisConfig{$varname} = \@items; + + # All other modes including mode 1 (merge) is invalid + } else { + do_log(-1,"policyd/process_policy: Mode '%s' for amavis policy '%s' variable '%s' is invalid as its a text list", + $amavisRule->{$varname."_m"},$policyID,$varname); + } + } + } + } # foreach my $vartype (keys %ruleOptions) + } # foreach my $policyID (@{$recip_to_policy{$emailAddy}{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$recip_to_policy{$emailAddy}}) + + # Check bypass + # + # Bypass will bypass the check if no other recip needs to be checked, lover means we will + # send to the recip regardless of the result + + # Check for virus bypass + if (defined($amavisConfig{'bypass_virus_checks'})) { + push(@{$pbn->{'bypass_virus_checks_maps'}},\{ + $emailAddy => 1 + }); + push(@{$pbn->{'virus_lovers_maps'}},\{ + $emailAddy => 1 + }); + } + # Check for banned file/filetype bypass + if (defined($amavisConfig{'bypass_banned_checks'})) { + push(@{$pbn->{'bypass_banned_checks_maps'}},\{ + $emailAddy => 1 + }); + push(@{$pbn->{'banned_files_lovers_maps'}},\{ + $emailAddy => 1 + }); + } + # Check for spam bypass + if (defined($amavisConfig{'bypass_spam_checks'})) { + push(@{$pbn->{'bypass_spam_checks_maps'}},\{ + $emailAddy => 1 + }); + push(@{$pbn->{'spam_lovers_maps'}},\{ + $emailAddy => 1 + }); + } + # Check for header bypass + if (defined($amavisConfig{'bypass_header_checks'})) { + push(@{$pbn->{'bypass_header_checks_maps'}},\{ + $emailAddy => 1 + }); + push(@{$pbn->{'bad_header_lovers_maps'}},\{ + $emailAddy => 1 + }); + } + + # Spam levels + + # Check if we have a tag level + if (defined($amavisConfig{'spam_tag_level'})) { + push(@{$pbn->{'spam_tag_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag_level'} + }); + } + + # Check if we have a tag2 level + if (defined($amavisConfig{'spam_tag2_level'})) { + push(@{$pbn->{'spam_tag2_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag2_level'} + }); + } + + # Check if we have a tag3 level + if (defined($amavisConfig{'spam_tag3_level'})) { + push(@{$pbn->{'spam_tag3_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag3_level'} + }); + } + + # Check if we have a kill level + if (defined($amavisConfig{'spam_kill_level'})) { + push(@{$pbn->{'spam_kill_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_kill_level'} + }); + } + + # Check if we have a dsn_cutoff level + if (defined($amavisConfig{'spam_dsn_cutoff_level'})) { + push(@{$pbn->{'spam_dsn_cutoff_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_dsn_cutoff_level'} + }); + } + + # Check if we have a quarantine_cutoff level + if (defined($amavisConfig{'spam_quarantine_cutoff_level'})) { + push(@{$pbn->{'spam_quarantine_cutoff_level_maps'}},\{ + $emailAddy => $amavisConfig{'spam_quarantine_cutoff_level'} + }); + } + + + # Spam subject stuff + + # Check for spam modifies subject + if (defined($amavisConfig{'spam_modifies_subject'})) { + push(@{$pbn->{'spam_modifies_subj_maps'}},\{ + $emailAddy => 1 + }); + } + + # Check for spam tag subject + if (defined($amavisConfig{'spam_tag_subject'})) { + push(@{$pbn->{'spam_subject_tag_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag_subject'} + }); + } + + # Check for spam tag2 subject + if (defined($amavisConfig{'spam_tag2_subject'})) { + push(@{$pbn->{'spam_subject_tag2_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag2_subject'} + }); + } + + # Check for spam tag3 subject + if (defined($amavisConfig{'spam_tag3_subject'})) { + push(@{$pbn->{'spam_subject_tag3_maps'}},\{ + $emailAddy => $amavisConfig{'spam_tag3_subject'} + }); + } + + # General checks + + # Check if we have a message size limit, if so push it in + if (defined($amavisConfig{'max_message_size'})) { + push(@{$pbn->{'message_size_limit_maps'}},\{ + $emailAddy => ( $amavisConfig{'max_message_size'} * 1024 ) + }); + } + + # Check if we have a list of banned files + if (defined($amavisConfig{'banned_files'})) { + my @banned_ext; + my @banned_type; + foreach my $bf (@{$amavisConfig{'banned_files'}}) { + # Check for file extension + if ($bf =~ /^\./) { + $bf =~ s/^\.//; + push(@banned_ext,$bf); + # Check for content type + } elsif ($bf =~ /^\S+\//) { + # Fix * + $bf =~ s/\*$/.*/; + push(@banned_type,$bf); + } + } + + # Build half the regex + my $banned_ext_re = join('|',@banned_ext); + my $banned_type_re = join('|',@banned_type); + + my @re_list; + + # Check vars we just created + if ($banned_ext_re ne "") { + $banned_ext_re = "^\\.($banned_ext_re)\$"; + $banned_ext_re = qr"$banned_ext_re"i; + push(@re_list,$banned_ext_re); + } + if ($banned_type_re ne "") { + $banned_type_re = "^($banned_type_re)\$"; + $banned_type_re = qr"$banned_type_re"i; + push(@re_list,$banned_type_re); + } + + push(@{$pbn->{'banned_filename_maps'}},\{ + $emailAddy => [ Amavis::Lookup::RE->new(@re_list) ] + }); + } + + + # Whitelist & blacklist + + # Check if we have a list of sender whitelists + if (defined($amavisConfig{'sender_whitelist'})) { + # If the lookup tables isn't a hash ref, make one + if (ref $pbn->{'per_recip_whitelist_sender_lookup_tables'} ne "HASH") { + $pbn->{'per_recip_whitelist_sender_lookup_tables'} = { }; + } + + # Get list of vals to add + my @vals = @{$amavisConfig{'sender_whitelist'}}; + # Check if we can add old vals + if (defined($pbn->{'per_recip_whitelist_sender_lookup_tables'}{$emailAddy})) { + push(@vals,@{$pbn->{'per_recip_whitelist_sender_lookup_tables'}{$emailAddy}}); + } + # Build hahs to get unique + my %tmphash = (); + foreach my $item (@vals) { + $tmphash{$item} = 1; + } + # Create array + @vals = keys %tmphash; + # Save... + $pbn->{'per_recip_whitelist_sender_lookup_tables'}{$emailAddy} = \@vals; + } + + # Check if we have a list of sender blacklists + if (defined($amavisConfig{'sender_blacklist'})) { + # If the lookup tables isn't a hash ref, make one + if (ref $pbn->{'per_recip_blacklist_sender_lookup_tables'} ne "HASH") { + $pbn->{'per_recip_blacklist_sender_lookup_tables'} = { }; + } + + # Get list of vals to add + my @vals = @{$amavisConfig{'sender_blacklist'}}; + # Check if we can add old vals + if (defined($pbn->{'per_recip_blacklist_sender_lookup_tables'}{$emailAddy})) { + push(@vals,@{$pbn->{'per_recip_blacklist_sender_lookup_tables'}{$emailAddy}}); + } + # Build hahs to get unique + my %tmphash = (); + foreach my $item (@vals) { + $tmphash{$item} = 1; + } + # Create array + @vals = keys %tmphash; + # Save... + $pbn->{'per_recip_blacklist_sender_lookup_tables'}{$emailAddy} = \@vals; + } + + + # Admin notifications + + # Check if we have a list of new virus admins + if (defined($amavisConfig{'notify_admin_newvirus'})) { + push(@{$pbn->{'newvirus_admin_maps'}},\{ + $emailAddy => $amavisConfig{'notify_admin_newvirus'} + }); + } + + # Check if we have a list of virus admins + if (defined($amavisConfig{'notify_admin_virus'})) { + push(@{$pbn->{'virus_admin_maps'}},\{ + $emailAddy => $amavisConfig{'notify_admin_virus'} + }); + } + + # Check if we have a list of spam admins + if (defined($amavisConfig{'notify_admin_spam'})) { + push(@{$pbn->{'spam_admin_maps'}},\{ + $emailAddy => $amavisConfig{'notify_admin_spam'} + }); + } + + # Check if we have a list of banned file admins + if (defined($amavisConfig{'notify_admin_banned_file'})) { + push(@{$pbn->{'banned_admin_maps'}},\{ + $emailAddy => $amavisConfig{'notify_admin_banned_file'} + }); + } + + # Check if we have a list of bad header admins + if (defined($amavisConfig{'notify_admin_bad_header'})) { + push(@{$pbn->{'bad_header_admin_maps'}},\{ + $emailAddy => $amavisConfig{'notify_admin_bad_header'} + }); + } + + + # Quarantine options + + # Check if we must quarantine a virus + if (defined($amavisConfig{'quarantine_virus'})) { + push(@{$pbn->{'virus_quarantine_to_maps'}},\{ + $emailAddy => $amavisConfig{'quarantine_virus'} + }); + } + + # Check if we must quarantine a banned file + if (defined($amavisConfig{'quarantine_banned_file'})) { + push(@{$pbn->{'banned_quarantine_to_maps'}},\{ + $emailAddy => $amavisConfig{'quarantine_banned_file'} + }); + } + + # Check if we must quarantine a banned header + if (defined($amavisConfig{'quarantine_bad_header'})) { + push(@{$pbn->{'bad_header_quarantine_to_maps'}},\{ + $emailAddy => $amavisConfig{'quarantine_bad_header'} + }); + } + + # Check if we must quarantine spam + if (defined($amavisConfig{'quarantine_spam'})) { + push(@{$pbn->{'spam_quarantine_to_maps'}},\{ + $emailAddy => $amavisConfig{'quarantine_spam'} + }); + } + + # Interception + + # Email addy to BCC to + if (defined($amavisConfig{'bcc_to'})) { + if (!defined($pbn->{'always_bcc'}) || $pbn->{'always_bcc'} eq "") { + $pbn->{'always_bcc'} = $amavisConfig{'bcc_to'} + } else { + $pbn->{'always_bcc'} .= "," . $amavisConfig{'bcc_to'} + } + } + } # foreach my $emailAddy (keys %{$sessionData->{'_Recipient_To_Policy'}}) + + return $pbn; +}; + + + +# Mail logging +sub amail_done +{ + my($self,$conn,$msginfo) = @_; + + my($mail_id) = $msginfo->mail_id; + my($spam_level) = $msginfo->spam_level; + my($sid) = $msginfo->sender_maddr_id; + my($m_id) = $msginfo->orig_header_fields->{'message-id'}; + do_log(-2,"CUSTOM: m_id1: $m_id"); + my($m_id) = parse_message_id($m_id) if $m_id ne ''; # strip CFWS, take #1 + do_log(-2,"CUSTOM: m_id2: $m_id"); + my($subj) = $msginfo->orig_header_fields->{'subject'}; + my($from) = $msginfo->orig_header_fields->{'from'}; # raw full field + my($rfc2822_from) = $msginfo->rfc2822_from; # undef, scalar or listref + my($rfc2822_sender) = $msginfo->rfc2822_sender; # undef or scalar + $rfc2822_from = join(', ',@$rfc2822_from) if ref $rfc2822_from; + my($os_fp) = $msginfo->client_os_fingerprint; + my $size = $msginfo->msg_size; + + # insert per-recipient records into table msgrcpt + for my $r (@{$msginfo->per_recip_data}) { + my($rid) = $r->recip_maddr_id; + my($dest,$resp) = ($r->recip_destiny, $r->recip_smtp_response); + my $blacklist_sender = $r->recip_blacklisted_sender ? 'Y' : 'N'; + my $blacklist_recipient = $r->recip_whitelisted_sender ? 'Y' : 'N'; + my $score = $spam_level+$r->recip_score_boost; + do_log(-2,"CUSTOM: mail_id: $mail_id, rid: $rid, dest: $dest, ". + "resp: $resp, black_sender: $blacklist_sender, black_recip: ". + "$blacklist_recipient, spam_level: $score, sid: $sid, mm_id: ". + "$m_id, subj: $subj, from: $from ($rfc2822_from), to: ". + $r->recip_addr.", os_fp: $os_fp"); + do_log(-2,"CUSTOM DBLOG: mail_id: $mail_id, from: $from, to: ".$r->recip_addr.", subject: $subj, size: $size, status: $resp"); + } +} + + + +# Get amavis rule +sub getAmavisRule +{ + my ($self,$policyID) = @_; + + + # Query amavis rules table + my $sth = DBSelect(' + SELECT + ID, + + bypass_virus_checks, bypass_banned_checks, bypass_spam_checks, bypass_header_checks, + bypass_virus_checks_m, bypass_banned_checks_m, bypass_spam_checks_m, bypass_header_checks_m, + + + spam_tag_level, spam_tag2_level, spam_tag3_level, spam_kill_level, spam_dsn_cutoff_level, spam_quarantine_cutoff_level, + spam_tag_level_m, spam_tag2_level_m, spam_tag3_level_m, spam_kill_level_m, spam_dsn_cutoff_level_m, spam_quarantine_cutoff_level_m, + spam_modifies_subject, spam_tag_subject, spam_tag2_subject, spam_tag3_subject, + spam_modifies_subject_m, spam_tag_subject_m, spam_tag2_subject_m, spam_tag3_subject_m, + + + max_message_size, banned_files, + max_message_size_m, banned_files_m, + + + sender_whitelist, sender_blacklist, + sender_whitelist_m, sender_blacklist_m, + + + notify_admin_newvirus, notify_admin_virus, notify_admin_spam, notify_admin_banned_file, notify_admin_bad_header, + notify_admin_newvirus_m, notify_admin_virus_m, notify_admin_spam_m, notify_admin_banned_file_m, notify_admin_bad_header_m, + + + quarantine_virus, quarantine_banned_file, quarantine_bad_header, quarantine_spam, + quarantine_virus_m, quarantine_banned_file_m, quarantine_bad_header_m, quarantine_spam_m, + + bcc_to, + bcc_to_m + + FROM + @TP@amavis_rules + + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + do_log(-2,"policyd/process_policyd: Failed to query amavis: ".awitpt::db::dblayer::Error()); + return; + } + + my $row = $sth->fetchrow_hashref(); + DBFreeRes($sth); + + # Database compatibility, quick and dirty + if ($row) { + $row->{'ID'} = $row->{'id'}; + } + + return $row; +} + + +# Logging... +sub log +{ + my ($self,$level,$msg,@args) = @_; + + # Check log level and set text + my $logtxt = "UNKNOWN"; + my $loglvl = 1; + # Check levels... + if ($level == LOG_DEBUG) { + $logtxt = "DEBUG"; + $loglvl = 2; + } elsif ($level == LOG_INFO) { + $logtxt = "INFO"; + $loglvl = 1; + } elsif ($level == LOG_NOTICE) { + $logtxt = "NOTICE"; + $loglvl = 0; + } elsif ($level == LOG_WARN) { + $logtxt = "WARNING"; + $loglvl = -1; + } elsif ($level == LOG_ERR) { + $logtxt = "ERROR"; + $loglvl = -2; + } + + # Parse message nicely + if ($msg =~ /^(\[[^\]]+\]) (.*)/s) { + $msg = "$1 $logtxt: $2"; + } else { + $msg = "[CORE] $logtxt: $msg"; + } + + do_log($loglvl,"$msg".join('',@args)); +} + + +# vim: ts=4 +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN.pm b/ehcp/fixes/policyd/awitpt/CPAN.pm new file mode 100644 index 0000000..d3e200b --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN.pm @@ -0,0 +1,28 @@ +# Load improved CPAN libs +# Copyright (C) 2011, AllWorldIT +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use strict; +use warnings; + + +use lib qw( + awitpt/CPAN/Class-Inspector-1.25/lib + awitpt/CPAN/SOAP-Lite-0.712/lib +); + + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/Changes b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/Changes new file mode 100644 index 0000000..07d8f3e --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/Changes @@ -0,0 +1,116 @@ +Revision history for Perl extension Class-Inspector + +1.25 Thu 27 Jan 2011 + - Updating to Module::Install::DSL 1.00 + - Updating copyright year + +1.24 Tue 21 Apr 2009 + - Updating Perl dependency to 5.006 + - Updating to Module::Install::DSL 0.83 + - Add the Class::Inspector::Functions interface. + +1.23 Mon 2 Jun 2008 + - No functional changes + - Updating to Module::Install 0.75 + - Correcting the location of the author tests + +1.22 Sat 1 Mar 2008 + - 1.21_01 tested ok, moving to production version + - No changes + +1.21_01 Tue 12 Feb 2008 + - Adding experimental support for utf8 methods + (as per http://rt.cpan.org/Public/Bug/Display.html?id=28796) + +1.20 Tue 12 Feb 2008 + - CPAN Testers results look good for 1.19_01, + converting to a production release. + +1.19_01 Mon 11 Feb 2008 + - Bug fix to adapt to changes to File::Spec + +1.18 Thu 8 Nov 2007 + - Incremental release, no functional changes + - Updated to Module::Install 0.68 + (This brings META.yml to the current version) + - Updated versions of the automated tests that + were causing CPAN Testers failures. + +1.17 Mon 6 Aug 2007 + - Classes with leading numbers after the first :: are permitted + - Removing some old cruft from the tests + - Updated to Module::Install 0.65 + +1.16 Wed 10 May 2006 + - This release contains only build-time changes + - AutoInstall is only needed for options, so remove auto_install + +1.15 Sun 7 May 2006 + - This release contains only build-time changes + - Upgrading to Module::Install 0.62 + +1.14 Sun 8 Apr 2006 + - This release contains only build-time changes + - Moved from older CVS to newer SVN repository + - Upgraded to Module::Install 0.61 + +1.13 Wed Sep 28 2005 + - Fixed a minor POD bug in the synopsis + +1.12 Fri Sep 9 2005 + - Added a fix for classes with insanely broken ->isa methods + that cause Perl to die. + +1.11 Tue Sep 6 2005 + - It occured to me after I added ->find that what it _really_ is + is a way to find all the subclasses, but then include the class + itself in the returned list. This method makes much more sense + it I don't return the class itself, and rename it ->subclasses + - Fixed broken Makefile.PL + +1.10 Mon Sep 5 2005 + - Added the ->find method + - Cleaned up and reorganised the POD + - Made sure all return conditions are documented properly + - Converted to Module::Install + +1.09 skipped + +1.08 Tue Feb 15 2005 + - Removing braindead Build.PL + +1.07 Thu Nov 18 2004 + - Improved the speed (slightly, and only in positive cases) and accuracy of ->loaded. + - It now checks for some additional clues before returning false. + +1.06 Wed Jul 21 2004 + - Fixed a major Win32 bug + +1.05 Mon Jul 19 2004 + - Inlined a better version of self_and_super_class + - Removed Class::ISA as a dependency + +1.04 Tue Mar 23 2004 + - Apparently on Windows @INC/%INC uses Unix style backslashes + Updated to handle this fact. + +1.03 Sun Dec 14 2003 + - Fixed an infinite loop bug in recursive_children + +1.02 Sun Dec 14 2003 + - recursive children ignores ::ISA::CACHE:: + - Minor code tweaks + +1.01 Mon Nov 10 2003 + - Symbol table entries due to overloads and anonymous subs + are filtered from the results correctly. + - Did a large amount of code cleaning and optomising + +1.0 Sat Dec 21 13:31:21 2002 + - Converted to use File::Spec + +0.2 Tue May 28 18:47:00 2002 + - Added options for ->methods + +0.1 Thu May 23 20:09:55 2002 + - original version diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/LICENSE b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/LICENSE new file mode 100644 index 0000000..05e86e0 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/LICENSE @@ -0,0 +1,378 @@ + +Terms of Perl itself + +a) the GNU General Public License as published by the Free + Software Foundation; either version 1, or (at your option) any + later version, or +b) the "Artistic License" + +---------------------------------------------------------------------------- + +The General Public License (GPL) +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, +Cambridge, MA 02139, 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. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND +MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or translated +into another language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is not +restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as +you receive it, in any medium, provided that you conspicuously and appropriately +publish on each copy an appropriate copyright notice and disclaimer of warranty; +keep intact all the notices that refer to this License and to the absence of any +warranty; and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at +your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus +forming a work based on the Program, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you also +meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you +changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in +part contains or is derived from the Program or any part thereof, to be licensed +as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you +must cause it, when started running for such interactive use in the most ordinary +way, to print or display an announcement including an appropriate copyright +notice and a notice that there is no warranty (or else, saying that you provide a +warranty) and that users may redistribute the program under these conditions, +and telling the user how to view a copy of this License. (Exception: if the +Program itself is interactive but does not normally print such an announcement, +your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Program, the distribution of the whole must be on +the terms of this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to +work written entirely by you; rather, the intent is to exercise the right to control +the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and 2 +above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source +code, which must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any +third party, for a charge no more than your cost of physically performing source +distribution, a complete machine-readable copy of the corresponding source +code, to be distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute +corresponding source code. (This alternative is allowed only for noncommercial +distribution and only if you received the program in object code or executable +form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all the +source code for all modules it contains, plus any associated interface definition +files, plus the scripts used to control compilation and installation of the +executable. However, as a special exception, the source code distributed need +not include anything that is normally distributed (in either source or binary form) +with the major components (compiler, kernel, and so on) of the operating system +on which the executable runs, unless that component itself accompanies the +executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source +code from the same place counts as distribution of the source code, even though +third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so long +as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Program +or its derivative works. These actions are prohibited by law if you do not accept +this License. Therefore, by modifying or distributing the Program (or any work +based on the Program), you indicate your acceptance of this License to do so, +and all its terms and conditions for copying, distributing or modifying the +Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor to copy, +distribute or modify the Program subject to these terms and conditions. You +may not impose any further restrictions on the recipients' exercise of the rights +granted herein. You are not responsible for enforcing compliance by third parties +to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed on +you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of this +License. If you cannot distribute so as to satisfy simultaneously your obligations +under this License and any other pertinent obligations, then as a consequence +you may not distribute the Program at all. For example, if a patent license would +not permit royalty-free redistribution of the Program by all those who receive +copies directly or indirectly through you, then the only way you could satisfy +both it and this License would be to refrain entirely from distribution of the +Program. + +If any portion of this section is held invalid or unenforceable under any particular +circumstance, the balance of the section is intended to apply and the section as +a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other +property right claims or to contest validity of any such claims; this section has +the sole purpose of protecting the integrity of the free software distribution +system, which is implemented by public license practices. Many people have +made generous contributions to the wide range of software distributed through +that system in reliance on consistent application of that system; it is up to the +author/donor to decide if he or she is willing to distribute software through any +other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries +either by patents or by copyrighted interfaces, the original copyright holder who +places the Program under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is permitted +only in or among countries not thus excluded. In such case, this License +incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the +General Public License from time to time. Such new versions will be similar in +spirit to the present version, but may differ in detail to address new problems or +concerns. + +Each version is given a distinguishing version number. If the Program specifies a +version number of this License which applies to it and "any later version", you +have the option of following the terms and conditions either of that version or of +any later version published by the Free Software Foundation. If the Program does +not specify a version number of this License, you may choose any version ever +published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of all +derivatives of our free software and of promoting the sharing and reuse of +software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS +NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE +COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR +IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED +TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY +WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS +PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY +OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +---------------------------------------------------------------------------- + +The Artistic License + +Preamble + +The intent of this document is to state the conditions under which a Package +may be copied, such that the Copyright Holder maintains some semblance of +artistic control over the development of the package, while giving the users of the +package the right to use and distribute the Package in a more-or-less customary +fashion, plus the right to make reasonable modifications. + +Definitions: + +- "Package" refers to the collection of files distributed by the Copyright + Holder, and derivatives of that collection of files created through textual + modification. +- "Standard Version" refers to such a Package if it has not been modified, + or has been modified in accordance with the wishes of the Copyright + Holder. +- "Copyright Holder" is whoever is named in the copyright or copyrights for + the package. +- "You" is you, if you're thinking about copying or distributing this Package. +- "Reasonable copying fee" is whatever you can justify on the basis of + media cost, duplication charges, time of people involved, and so on. (You + will not be required to justify it to the Copyright Holder, but only to the + computing community at large as a market that must bear the fee.) +- "Freely Available" means that no fee is charged for the item itself, though + there may be fees involved in handling the item. It also means that + recipients of the item may redistribute it under the same conditions they + received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you duplicate +all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications derived from +the Public Domain or from the Copyright Holder. A Package modified in such a +way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided +that you insert a prominent notice in each changed file stating how and when +you changed that file, and provided that you do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise + make them Freely Available, such as by posting said modifications + to Usenet or an equivalent medium, or placing the modifications on + a major archive site such as ftp.uu.net, or by allowing the + Copyright Holder to include your modifications in the Standard + Version of the Package. + + b) use the modified Package only within your corporation or + organization. + + c) rename any non-standard executables so the names do not + conflict with standard executables, which must also be provided, + and provide a separate manual page for each non-standard + executable that clearly documents how it differs from the Standard + Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or executable +form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library + files, together with instructions (in the manual page or equivalent) + on where to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) accompany any non-standard executables with their + corresponding Standard Version executables, giving the + non-standard executables non-standard names, and clearly + documenting the differences in manual pages (or equivalent), + together with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this Package. +You may charge any fee you choose for support of this Package. You may not +charge a fee for this Package itself. However, you may distribute this Package in +aggregate with other (possibly commercial) programs as part of a larger +(possibly commercial) software distribution provided that you do not advertise +this Package as a product of your own. + +6. The scripts and library files supplied as input to or produced as output from +the programs of this Package do not automatically fall under the copyright of this +Package, but belong to whomever generated them, and may be sold +commercially, and may be aggregated with this Package. + +7. C or perl subroutines supplied by you and linked into this Package shall not +be considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +The End + + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/README b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/README new file mode 100644 index 0000000..fc468e6 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/README @@ -0,0 +1,210 @@ +NAME + Class::Inspector - Get information about a class and its structure + +SYNOPSIS + use Class::Inspector; + + # Is a class installed and/or loaded + Class::Inspector->installed( 'Foo::Class' ); + Class::Inspector->loaded( 'Foo::Class' ); + + # Filename related information + Class::Inspector->filename( 'Foo::Class' ); + Class::Inspector->resolved_filename( 'Foo::Class' ); + + # Get subroutine related information + Class::Inspector->functions( 'Foo::Class' ); + Class::Inspector->function_refs( 'Foo::Class' ); + Class::Inspector->function_exists( 'Foo::Class', 'bar' ); + Class::Inspector->methods( 'Foo::Class', 'full', 'public' ); + + # Find all loaded subclasses or something + Class::Inspector->subclasses( 'Foo::Class' ); + +DESCRIPTION + Class::Inspector allows you to get information about a loaded class. + Most or all of this information can be found in other ways, but they + aren't always very friendly, and usually involve a relatively high level + of Perl wizardry, or strange and unusual looking code. Class::Inspector + attempts to provide an easier, more friendly interface to this + information. + +METHODS + installed $class + The "installed" static method tries to determine if a class is installed + on the machine, or at least available to Perl. It does this by wrapping + around "resolved_filename". + + Returns true if installed/available, false if the class is not + installed, or "undef" if the class name is invalid. + + loaded $class + The "loaded" static method tries to determine if a class is loaded by + looking for symbol table entries. + + This method it uses to determine this will work even if the class does + not have its own file, but is contained inside a single file with + multiple classes in it. Even in the case of some sort of run-time + loading class being used, these typically leave some trace in the symbol + table, so an Autoload or Class::Autouse-based class should correctly + appear loaded. + + Returns true if the class is loaded, false if not, or "undef" if the + class name is invalid. + + filename $class + For a given class, returns the base filename for the class. This will + NOT be a fully resolved filename, just the part of the filename BELOW + the @INC entry. + + print Class->filename( 'Foo::Bar' ); + > Foo/Bar.pm + + This filename will be returned with the right seperator for the local + platform, and should work on all platforms. + + Returns the filename on success or "undef" if the class name is invalid. + + resolved_filename $class, @try_first + For a given class, the "resolved_filename" static method returns the + fully resolved filename for a class. That is, the file that the class + would be loaded from. + + This is not nescesarily the file that the class WAS loaded from, as the + value returned is determined each time it runs, and the @INC include + path may change. + + To get the actual file for a loaded class, see the "loaded_filename" + method. + + Returns the filename for the class, or "undef" if the class name is + invalid. + + loaded_filename $class + For a given loaded class, the "loaded_filename" static method determines + (via the %INC hash) the name of the file that it was originally loaded + from. + + Returns a resolved file path, or false if the class did not have it's + own file. + + functions $class + For a loaded class, the "functions" static method returns a list of the + names of all the functions in the classes immediate namespace. + + Note that this is not the METHODS of the class, just the functions. + + Returns a reference to an array of the function names on success, or + "undef" if the class name is invalid or the class is not loaded. + + function_refs $class + For a loaded class, the "function_refs" static method returns references + to all the functions in the classes immediate namespace. + + Note that this is not the METHODS of the class, just the functions. + + Returns a reference to an array of "CODE" refs of the functions on + success, or "undef" if the class is not loaded. + + function_exists $class, $function + Given a class and function name the "function_exists" static method will + check to see if the function exists in the class. + + Note that this is as a function, not as a method. To see if a method + exists for a class, use the "can" method for any class or object. + + Returns true if the function exists, false if not, or "undef" if the + class or function name are invalid, or the class is not loaded. + + methods $class, @options + For a given class name, the "methods" static method will returns ALL the + methods available to that class. This includes all methods available + from every class up the class' @ISA tree. + + Returns a reference to an array of the names of all the available + methods on success, or "undef" if the class name is invalid or the class + is not loaded. + + A number of options are available to the "methods" method that will + alter the results returned. These should be listed after the class name, + in any order. + + # Only get public methods + my $method = Class::Inspector->methods( 'My::Class', 'public' ); + + public + The "public" option will return only 'public' methods, as defined by + the Perl convention of prepending an underscore to any 'private' + methods. The "public" option will effectively remove any methods + that start with an underscore. + + private + The "private" options will return only 'private' methods, as defined + by the Perl convention of prepending an underscore to an private + methods. The "private" option will effectively remove an method that + do not start with an underscore. + + Note: The "public" and "private" options are mutually exclusive + + full + "methods" normally returns just the method name. Supplying the + "full" option will cause the methods to be returned as the full + names. That is, instead of returning "[ 'method1', 'method2', + 'method3' ]", you would instead get "[ 'Class::method1', + 'AnotherClass::method2', 'Class::method3' ]". + + expanded + The "expanded" option will cause a lot more information about method + to be returned. Instead of just the method name, you will instead + get an array reference containing the method name as a single + combined name, ala "full", the seperate class and method, and a CODE + ref to the actual function ( if available ). Please note that the + function reference is not guarenteed to be available. + "Class::Inspector" is intended at some later time, work with modules + that have some some of common run-time loader in place ( e.g + "Autoloader" or "Class::Autouse" for example. + + The response from "methods( 'Class', 'expanded' )" would look + something like the following. + + [ + [ 'Class::method1', 'Class', 'method1', \&Class::method1 ], + [ 'Another::method2', 'Another', 'method2', \&Another::method2 ], + [ 'Foo::bar', 'Foo', 'bar', \&Foo::bar ], + ] + + subclasses $class + The "subclasses" static method will search then entire namespace (and + thus all currently loaded classes) to find all classes that are + subclasses of the class provided as a the parameter. + + The actual test will be done by calling "isa" on the class as a static + method. (i.e. "My::Class->isa($class)". + + Returns a reference to a list of the loaded classes that match the class + provided, or false is none match, or "undef" if the class name provided + is invalid. + +SUPPORT + Bugs should be reported via the CPAN bug tracker + + + + For other issues, or commercial enhancement or support, contact the + author. + +AUTHOR + Adam Kennedy + +SEE ALSO + , Class::Handle + +COPYRIGHT + Copyright 2002 - 2011 Adam Kennedy. + + This program is free software; you can redistribute it and/or modify it + under the same terms as Perl itself. + + The full text of the license can be found in the LICENSE file included + with this module. + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install.pm new file mode 100644 index 0000000..8ee839d --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install.pm @@ -0,0 +1,470 @@ +#line 1 +package Module::Install; + +# For any maintainers: +# The load order for Module::Install is a bit magic. +# It goes something like this... +# +# IF ( host has Module::Install installed, creating author mode ) { +# 1. Makefile.PL calls "use inc::Module::Install" +# 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install +# 3. The installed version of inc::Module::Install loads +# 4. inc::Module::Install calls "require Module::Install" +# 5. The ./inc/ version of Module::Install loads +# } ELSE { +# 1. Makefile.PL calls "use inc::Module::Install" +# 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install +# 3. The ./inc/ version of Module::Install loads +# } + +use 5.005; +use strict 'vars'; +use Cwd (); +use File::Find (); +use File::Path (); + +use vars qw{$VERSION $MAIN}; +BEGIN { + # All Module::Install core packages now require synchronised versions. + # This will be used to ensure we don't accidentally load old or + # different versions of modules. + # This is not enforced yet, but will be some time in the next few + # releases once we can make sure it won't clash with custom + # Module::Install extensions. + $VERSION = '1.00'; + + # Storage for the pseudo-singleton + $MAIN = undef; + + *inc::Module::Install::VERSION = *VERSION; + @inc::Module::Install::ISA = __PACKAGE__; + +} + +sub import { + my $class = shift; + my $self = $class->new(@_); + my $who = $self->_caller; + + #------------------------------------------------------------- + # all of the following checks should be included in import(), + # to allow "eval 'require Module::Install; 1' to test + # installation of Module::Install. (RT #51267) + #------------------------------------------------------------- + + # Whether or not inc::Module::Install is actually loaded, the + # $INC{inc/Module/Install.pm} is what will still get set as long as + # the caller loaded module this in the documented manner. + # If not set, the caller may NOT have loaded the bundled version, and thus + # they may not have a MI version that works with the Makefile.PL. This would + # result in false errors or unexpected behaviour. And we don't want that. + my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; + unless ( $INC{$file} ) { die <<"END_DIE" } + +Please invoke ${\__PACKAGE__} with: + + use inc::${\__PACKAGE__}; + +not: + + use ${\__PACKAGE__}; + +END_DIE + + # This reportedly fixes a rare Win32 UTC file time issue, but + # as this is a non-cross-platform XS module not in the core, + # we shouldn't really depend on it. See RT #24194 for detail. + # (Also, this module only supports Perl 5.6 and above). + eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; + + # If the script that is loading Module::Install is from the future, + # then make will detect this and cause it to re-run over and over + # again. This is bad. Rather than taking action to touch it (which + # is unreliable on some platforms and requires write permissions) + # for now we should catch this and refuse to run. + if ( -f $0 ) { + my $s = (stat($0))[9]; + + # If the modification time is only slightly in the future, + # sleep briefly to remove the problem. + my $a = $s - time; + if ( $a > 0 and $a < 5 ) { sleep 5 } + + # Too far in the future, throw an error. + my $t = time; + if ( $s > $t ) { die <<"END_DIE" } + +Your installer $0 has a modification time in the future ($s > $t). + +This is known to create infinite loops in make. + +Please correct this, then run $0 again. + +END_DIE + } + + + # Build.PL was formerly supported, but no longer is due to excessive + # difficulty in implementing every single feature twice. + if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } + +Module::Install no longer supports Build.PL. + +It was impossible to maintain duel backends, and has been deprecated. + +Please remove all Build.PL files and only use the Makefile.PL installer. + +END_DIE + + #------------------------------------------------------------- + + # To save some more typing in Module::Install installers, every... + # use inc::Module::Install + # ...also acts as an implicit use strict. + $^H |= strict::bits(qw(refs subs vars)); + + #------------------------------------------------------------- + + unless ( -f $self->{file} ) { + foreach my $key (keys %INC) { + delete $INC{$key} if $key =~ /Module\/Install/; + } + + local $^W; + require "$self->{path}/$self->{dispatch}.pm"; + File::Path::mkpath("$self->{prefix}/$self->{author}"); + $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); + $self->{admin}->init; + @_ = ($class, _self => $self); + goto &{"$self->{name}::import"}; + } + + local $^W; + *{"${who}::AUTOLOAD"} = $self->autoload; + $self->preload; + + # Unregister loader and worker packages so subdirs can use them again + delete $INC{'inc/Module/Install.pm'}; + delete $INC{'Module/Install.pm'}; + + # Save to the singleton + $MAIN = $self; + + return 1; +} + +sub autoload { + my $self = shift; + my $who = $self->_caller; + my $cwd = Cwd::cwd(); + my $sym = "${who}::AUTOLOAD"; + $sym->{$cwd} = sub { + my $pwd = Cwd::cwd(); + if ( my $code = $sym->{$pwd} ) { + # Delegate back to parent dirs + goto &$code unless $cwd eq $pwd; + } + unless ($$sym =~ s/([^:]+)$//) { + # XXX: it looks like we can't retrieve the missing function + # via $$sym (usually $main::AUTOLOAD) in this case. + # I'm still wondering if we should slurp Makefile.PL to + # get some context or not ... + my ($package, $file, $line) = caller; + die <<"EOT"; +Unknown function is found at $file line $line. +Execution of $file aborted due to runtime errors. + +If you're a contributor to a project, you may need to install +some Module::Install extensions from CPAN (or other repository). +If you're a user of a module, please contact the author. +EOT + } + my $method = $1; + if ( uc($method) eq $method ) { + # Do nothing + return; + } elsif ( $method =~ /^_/ and $self->can($method) ) { + # Dispatch to the root M:I class + return $self->$method(@_); + } + + # Dispatch to the appropriate plugin + unshift @_, ( $self, $1 ); + goto &{$self->can('call')}; + }; +} + +sub preload { + my $self = shift; + unless ( $self->{extensions} ) { + $self->load_extensions( + "$self->{prefix}/$self->{path}", $self + ); + } + + my @exts = @{$self->{extensions}}; + unless ( @exts ) { + @exts = $self->{admin}->load_all_extensions; + } + + my %seen; + foreach my $obj ( @exts ) { + while (my ($method, $glob) = each %{ref($obj) . '::'}) { + next unless $obj->can($method); + next if $method =~ /^_/; + next if $method eq uc($method); + $seen{$method}++; + } + } + + my $who = $self->_caller; + foreach my $name ( sort keys %seen ) { + local $^W; + *{"${who}::$name"} = sub { + ${"${who}::AUTOLOAD"} = "${who}::$name"; + goto &{"${who}::AUTOLOAD"}; + }; + } +} + +sub new { + my ($class, %args) = @_; + + delete $INC{'FindBin.pm'}; + { + # to suppress the redefine warning + local $SIG{__WARN__} = sub {}; + require FindBin; + } + + # ignore the prefix on extension modules built from top level. + my $base_path = Cwd::abs_path($FindBin::Bin); + unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { + delete $args{prefix}; + } + return $args{_self} if $args{_self}; + + $args{dispatch} ||= 'Admin'; + $args{prefix} ||= 'inc'; + $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); + $args{bundle} ||= 'inc/BUNDLES'; + $args{base} ||= $base_path; + $class =~ s/^\Q$args{prefix}\E:://; + $args{name} ||= $class; + $args{version} ||= $class->VERSION; + unless ( $args{path} ) { + $args{path} = $args{name}; + $args{path} =~ s!::!/!g; + } + $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; + $args{wrote} = 0; + + bless( \%args, $class ); +} + +sub call { + my ($self, $method) = @_; + my $obj = $self->load($method) or return; + splice(@_, 0, 2, $obj); + goto &{$obj->can($method)}; +} + +sub load { + my ($self, $method) = @_; + + $self->load_extensions( + "$self->{prefix}/$self->{path}", $self + ) unless $self->{extensions}; + + foreach my $obj (@{$self->{extensions}}) { + return $obj if $obj->can($method); + } + + my $admin = $self->{admin} or die <<"END_DIE"; +The '$method' method does not exist in the '$self->{prefix}' path! +Please remove the '$self->{prefix}' directory and run $0 again to load it. +END_DIE + + my $obj = $admin->load($method, 1); + push @{$self->{extensions}}, $obj; + + $obj; +} + +sub load_extensions { + my ($self, $path, $top) = @_; + + my $should_reload = 0; + unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { + unshift @INC, $self->{prefix}; + $should_reload = 1; + } + + foreach my $rv ( $self->find_extensions($path) ) { + my ($file, $pkg) = @{$rv}; + next if $self->{pathnames}{$pkg}; + + local $@; + my $new = eval { local $^W; require $file; $pkg->can('new') }; + unless ( $new ) { + warn $@ if $@; + next; + } + $self->{pathnames}{$pkg} = + $should_reload ? delete $INC{$file} : $INC{$file}; + push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); + } + + $self->{extensions} ||= []; +} + +sub find_extensions { + my ($self, $path) = @_; + + my @found; + File::Find::find( sub { + my $file = $File::Find::name; + return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; + my $subpath = $1; + return if lc($subpath) eq lc($self->{dispatch}); + + $file = "$self->{path}/$subpath.pm"; + my $pkg = "$self->{name}::$subpath"; + $pkg =~ s!/!::!g; + + # If we have a mixed-case package name, assume case has been preserved + # correctly. Otherwise, root through the file to locate the case-preserved + # version of the package name. + if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { + my $content = Module::Install::_read($subpath . '.pm'); + my $in_pod = 0; + foreach ( split //, $content ) { + $in_pod = 1 if /^=\w/; + $in_pod = 0 if /^=cut/; + next if ($in_pod || /^=cut/); # skip pod text + next if /^\s*#/; # and comments + if ( m/^\s*package\s+($pkg)\s*;/i ) { + $pkg = $1; + last; + } + } + } + + push @found, [ $file, $pkg ]; + }, $path ) if -d $path; + + @found; +} + + + + + +##################################################################### +# Common Utility Functions + +sub _caller { + my $depth = 0; + my $call = caller($depth); + while ( $call eq __PACKAGE__ ) { + $depth++; + $call = caller($depth); + } + return $call; +} + +# Done in evals to avoid confusing Perl::MinimumVersion +eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; +sub _read { + local *FH; + open( FH, '<', $_[0] ) or die "open($_[0]): $!"; + my $string = do { local $/; }; + close FH or die "close($_[0]): $!"; + return $string; +} +END_NEW +sub _read { + local *FH; + open( FH, "< $_[0]" ) or die "open($_[0]): $!"; + my $string = do { local $/; }; + close FH or die "close($_[0]): $!"; + return $string; +} +END_OLD + +sub _readperl { + my $string = Module::Install::_read($_[0]); + $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; + $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; + $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; + return $string; +} + +sub _readpod { + my $string = Module::Install::_read($_[0]); + $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; + return $string if $_[0] =~ /\.pod\z/; + $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; + $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; + $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; + $string =~ s/^\n+//s; + return $string; +} + +# Done in evals to avoid confusing Perl::MinimumVersion +eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; +sub _write { + local *FH; + open( FH, '>', $_[0] ) or die "open($_[0]): $!"; + foreach ( 1 .. $#_ ) { + print FH $_[$_] or die "print($_[0]): $!"; + } + close FH or die "close($_[0]): $!"; +} +END_NEW +sub _write { + local *FH; + open( FH, "> $_[0]" ) or die "open($_[0]): $!"; + foreach ( 1 .. $#_ ) { + print FH $_[$_] or die "print($_[0]): $!"; + } + close FH or die "close($_[0]): $!"; +} +END_OLD + +# _version is for processing module versions (eg, 1.03_05) not +# Perl versions (eg, 5.8.1). +sub _version ($) { + my $s = shift || 0; + my $d =()= $s =~ /(\.)/g; + if ( $d >= 2 ) { + # Normalise multipart versions + $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; + } + $s =~ s/^(\d+)\.?//; + my $l = $1 || 0; + my @v = map { + $_ . '0' x (3 - length $_) + } $s =~ /(\d{1,3})\D?/g; + $l = $l . '.' . join '', @v if @v; + return $l + 0; +} + +sub _cmp ($$) { + _version($_[0]) <=> _version($_[1]); +} + +# Cloned from Params::Util::_CLASS +sub _CLASS ($) { + ( + defined $_[0] + and + ! ref $_[0] + and + $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s + ) ? $_[0] : undef; +} + +1; + +# Copyright 2008 - 2010 Adam Kennedy. diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Base.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Base.pm new file mode 100644 index 0000000..b55bda3 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Base.pm @@ -0,0 +1,83 @@ +#line 1 +package Module::Install::Base; + +use strict 'vars'; +use vars qw{$VERSION}; +BEGIN { + $VERSION = '1.00'; +} + +# Suspend handler for "redefined" warnings +BEGIN { + my $w = $SIG{__WARN__}; + $SIG{__WARN__} = sub { $w }; +} + +#line 42 + +sub new { + my $class = shift; + unless ( defined &{"${class}::call"} ) { + *{"${class}::call"} = sub { shift->_top->call(@_) }; + } + unless ( defined &{"${class}::load"} ) { + *{"${class}::load"} = sub { shift->_top->load(@_) }; + } + bless { @_ }, $class; +} + +#line 61 + +sub AUTOLOAD { + local $@; + my $func = eval { shift->_top->autoload } or return; + goto &$func; +} + +#line 75 + +sub _top { + $_[0]->{_top}; +} + +#line 90 + +sub admin { + $_[0]->_top->{admin} + or + Module::Install::Base::FakeAdmin->new; +} + +#line 106 + +sub is_admin { + ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); +} + +sub DESTROY {} + +package Module::Install::Base::FakeAdmin; + +use vars qw{$VERSION}; +BEGIN { + $VERSION = $Module::Install::Base::VERSION; +} + +my $fake; + +sub new { + $fake ||= bless(\@_, $_[0]); +} + +sub AUTOLOAD {} + +sub DESTROY {} + +# Restore warning handler +BEGIN { + $SIG{__WARN__} = $SIG{__WARN__}->(); +} + +1; + +#line 159 diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Can.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Can.pm new file mode 100644 index 0000000..71ccc27 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Can.pm @@ -0,0 +1,81 @@ +#line 1 +package Module::Install::Can; + +use strict; +use Config (); +use File::Spec (); +use ExtUtils::MakeMaker (); +use Module::Install::Base (); + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = 'Module::Install::Base'; + $ISCORE = 1; +} + +# check if we can load some module +### Upgrade this to not have to load the module if possible +sub can_use { + my ($self, $mod, $ver) = @_; + $mod =~ s{::|\\}{/}g; + $mod .= '.pm' unless $mod =~ /\.pm$/i; + + my $pkg = $mod; + $pkg =~ s{/}{::}g; + $pkg =~ s{\.pm$}{}i; + + local $@; + eval { require $mod; $pkg->VERSION($ver || 0); 1 }; +} + +# check if we can run some command +sub can_run { + my ($self, $cmd) = @_; + + my $_cmd = $cmd; + return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); + + for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { + next if $dir eq ''; + my $abs = File::Spec->catfile($dir, $_[1]); + return $abs if (-x $abs or $abs = MM->maybe_command($abs)); + } + + return; +} + +# can we locate a (the) C compiler +sub can_cc { + my $self = shift; + my @chunks = split(/ /, $Config::Config{cc}) or return; + + # $Config{cc} may contain args; try to find out the program part + while (@chunks) { + return $self->can_run("@chunks") || (pop(@chunks), next); + } + + return; +} + +# Fix Cygwin bug on maybe_command(); +if ( $^O eq 'cygwin' ) { + require ExtUtils::MM_Cygwin; + require ExtUtils::MM_Win32; + if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { + *ExtUtils::MM_Cygwin::maybe_command = sub { + my ($self, $file) = @_; + if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { + ExtUtils::MM_Win32->maybe_command($file); + } else { + ExtUtils::MM_Unix->maybe_command($file); + } + } + } +} + +1; + +__END__ + +#line 156 diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/DSL.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/DSL.pm new file mode 100644 index 0000000..615772f --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/DSL.pm @@ -0,0 +1,94 @@ +#line 1 +package Module::Install::DSL; + +use strict; +use vars qw{$VERSION $ISCORE}; +BEGIN { + $VERSION = '1.00'; + $ISCORE = 1; + *inc::Module::Install::DSL::VERSION = *VERSION; + @inc::Module::Install::DSL::ISA = __PACKAGE__; +} + +sub import { + # Read in the rest of the Makefile.PL + open 0 or die "Couldn't open $0: $!"; + my $dsl; + SCOPE: { + local $/ = undef; + $dsl = join "", <0>; + } + + # Change inc::Module::Install::DSL to the regular one. + # Remove anything before the use inc::... line. + $dsl =~ s/.*?^\s*use\s+(?:inc::)?Module::Install::DSL(\b[^;]*);\s*\n//sm; + + # Load inc::Module::Install as we would in a regular Makefile.Pl + SCOPE: { + package main; + require inc::Module::Install; + inc::Module::Install->import; + } + + # Add the ::DSL plugin to the list of packages in /inc + my $admin = $Module::Install::MAIN->{admin}; + if ( $admin ) { + my $from = $INC{"$admin->{path}/DSL.pm"}; + my $to = "$admin->{base}/$admin->{prefix}/$admin->{path}/DSL.pm"; + $admin->copy( $from => $to ); + } + + # Convert the basic syntax to code + my $code = "INIT {\n" + . "package main;\n\n" + . dsl2code($dsl) + . "\n\nWriteAll();\n" + . "}\n"; + + # Execute the script + eval $code; + print STDERR "Failed to execute the generated code...\n$@" if $@; + + exit(0); +} + +sub dsl2code { + my $dsl = shift; + + # Split into lines and strip blanks + my @lines = grep { /\S/ } split /[\012\015]+/, $dsl; + + # Each line represents one command + my @code = (); + foreach my $line ( @lines ) { + # Split the lines into tokens + my @tokens = split /\s+/, $line; + + # The first word is the command + my $command = shift @tokens; + my @params = (); + my @suffix = (); + while ( @tokens ) { + my $token = shift @tokens; + if ( $token eq 'if' or $token eq 'unless' ) { + # This is the beginning of a suffix + push @suffix, $token; + push @suffix, @tokens; + last; + } else { + # Convert to a string + $token =~ s/([\\\'])/\\$1/g; + push @params, "'$token'"; + } + }; + + # Merge to create the final line of code + @tokens = ( $command, @params ? join( ', ', @params ) : (), @suffix ); + push @code, join( ' ', @tokens ) . ";\n"; + } + + # Join into the complete code block + return join( '', @code ); +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Fetch.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Fetch.pm new file mode 100644 index 0000000..ec1f106 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Fetch.pm @@ -0,0 +1,93 @@ +#line 1 +package Module::Install::Fetch; + +use strict; +use Module::Install::Base (); + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = 'Module::Install::Base'; + $ISCORE = 1; +} + +sub get_file { + my ($self, %args) = @_; + my ($scheme, $host, $path, $file) = + $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; + + if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { + $args{url} = $args{ftp_url} + or (warn("LWP support unavailable!\n"), return); + ($scheme, $host, $path, $file) = + $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; + } + + $|++; + print "Fetching '$file' from $host... "; + + unless (eval { require Socket; Socket::inet_aton($host) }) { + warn "'$host' resolve failed!\n"; + return; + } + + return unless $scheme eq 'ftp' or $scheme eq 'http'; + + require Cwd; + my $dir = Cwd::getcwd(); + chdir $args{local_dir} or return if exists $args{local_dir}; + + if (eval { require LWP::Simple; 1 }) { + LWP::Simple::mirror($args{url}, $file); + } + elsif (eval { require Net::FTP; 1 }) { eval { + # use Net::FTP to get past firewall + my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); + $ftp->login("anonymous", 'anonymous@example.com'); + $ftp->cwd($path); + $ftp->binary; + $ftp->get($file) or (warn("$!\n"), return); + $ftp->quit; + } } + elsif (my $ftp = $self->can_run('ftp')) { eval { + # no Net::FTP, fallback to ftp.exe + require FileHandle; + my $fh = FileHandle->new; + + local $SIG{CHLD} = 'IGNORE'; + unless ($fh->open("|$ftp -n")) { + warn "Couldn't open ftp: $!\n"; + chdir $dir; return; + } + + my @dialog = split(/\n/, <<"END_FTP"); +open $host +user anonymous anonymous\@example.com +cd $path +binary +get $file $file +quit +END_FTP + foreach (@dialog) { $fh->print("$_\n") } + $fh->close; + } } + else { + warn "No working 'ftp' program available!\n"; + chdir $dir; return; + } + + unless (-f $file) { + warn "Fetching failed: $@\n"; + chdir $dir; return; + } + + return if exists $args{size} and -s $file != $args{size}; + system($args{run}) if exists $args{run}; + unlink($file) if $args{remove}; + + print(((!exists $args{check_for} or -e $args{check_for}) + ? "done!" : "failed! ($!)"), "\n"); + chdir $dir; return !$?; +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Makefile.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Makefile.pm new file mode 100644 index 0000000..5dfd0e9 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Makefile.pm @@ -0,0 +1,415 @@ +#line 1 +package Module::Install::Makefile; + +use strict 'vars'; +use ExtUtils::MakeMaker (); +use Module::Install::Base (); +use Fcntl qw/:flock :seek/; + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = 'Module::Install::Base'; + $ISCORE = 1; +} + +sub Makefile { $_[0] } + +my %seen = (); + +sub prompt { + shift; + + # Infinite loop protection + my @c = caller(); + if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { + die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; + } + + # In automated testing or non-interactive session, always use defaults + if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { + local $ENV{PERL_MM_USE_DEFAULT} = 1; + goto &ExtUtils::MakeMaker::prompt; + } else { + goto &ExtUtils::MakeMaker::prompt; + } +} + +# Store a cleaned up version of the MakeMaker version, +# since we need to behave differently in a variety of +# ways based on the MM version. +my $makemaker = eval $ExtUtils::MakeMaker::VERSION; + +# If we are passed a param, do a "newer than" comparison. +# Otherwise, just return the MakeMaker version. +sub makemaker { + ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 +} + +# Ripped from ExtUtils::MakeMaker 6.56, and slightly modified +# as we only need to know here whether the attribute is an array +# or a hash or something else (which may or may not be appendable). +my %makemaker_argtype = ( + C => 'ARRAY', + CONFIG => 'ARRAY', +# CONFIGURE => 'CODE', # ignore + DIR => 'ARRAY', + DL_FUNCS => 'HASH', + DL_VARS => 'ARRAY', + EXCLUDE_EXT => 'ARRAY', + EXE_FILES => 'ARRAY', + FUNCLIST => 'ARRAY', + H => 'ARRAY', + IMPORTS => 'HASH', + INCLUDE_EXT => 'ARRAY', + LIBS => 'ARRAY', # ignore '' + MAN1PODS => 'HASH', + MAN3PODS => 'HASH', + META_ADD => 'HASH', + META_MERGE => 'HASH', + PL_FILES => 'HASH', + PM => 'HASH', + PMLIBDIRS => 'ARRAY', + PMLIBPARENTDIRS => 'ARRAY', + PREREQ_PM => 'HASH', + CONFIGURE_REQUIRES => 'HASH', + SKIP => 'ARRAY', + TYPEMAPS => 'ARRAY', + XS => 'HASH', +# VERSION => ['version',''], # ignore +# _KEEP_AFTER_FLUSH => '', + + clean => 'HASH', + depend => 'HASH', + dist => 'HASH', + dynamic_lib=> 'HASH', + linkext => 'HASH', + macro => 'HASH', + postamble => 'HASH', + realclean => 'HASH', + test => 'HASH', + tool_autosplit => 'HASH', + + # special cases where you can use makemaker_append + CCFLAGS => 'APPENDABLE', + DEFINE => 'APPENDABLE', + INC => 'APPENDABLE', + LDDLFLAGS => 'APPENDABLE', + LDFROM => 'APPENDABLE', +); + +sub makemaker_args { + my ($self, %new_args) = @_; + my $args = ( $self->{makemaker_args} ||= {} ); + foreach my $key (keys %new_args) { + if ($makemaker_argtype{$key}) { + if ($makemaker_argtype{$key} eq 'ARRAY') { + $args->{$key} = [] unless defined $args->{$key}; + unless (ref $args->{$key} eq 'ARRAY') { + $args->{$key} = [$args->{$key}] + } + push @{$args->{$key}}, + ref $new_args{$key} eq 'ARRAY' + ? @{$new_args{$key}} + : $new_args{$key}; + } + elsif ($makemaker_argtype{$key} eq 'HASH') { + $args->{$key} = {} unless defined $args->{$key}; + foreach my $skey (keys %{ $new_args{$key} }) { + $args->{$key}{$skey} = $new_args{$key}{$skey}; + } + } + elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { + $self->makemaker_append($key => $new_args{$key}); + } + } + else { + if (defined $args->{$key}) { + warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; + } + $args->{$key} = $new_args{$key}; + } + } + return $args; +} + +# For mm args that take multiple space-seperated args, +# append an argument to the current list. +sub makemaker_append { + my $self = shift; + my $name = shift; + my $args = $self->makemaker_args; + $args->{$name} = defined $args->{$name} + ? join( ' ', $args->{$name}, @_ ) + : join( ' ', @_ ); +} + +sub build_subdirs { + my $self = shift; + my $subdirs = $self->makemaker_args->{DIR} ||= []; + for my $subdir (@_) { + push @$subdirs, $subdir; + } +} + +sub clean_files { + my $self = shift; + my $clean = $self->makemaker_args->{clean} ||= {}; + %$clean = ( + %$clean, + FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), + ); +} + +sub realclean_files { + my $self = shift; + my $realclean = $self->makemaker_args->{realclean} ||= {}; + %$realclean = ( + %$realclean, + FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), + ); +} + +sub libs { + my $self = shift; + my $libs = ref $_[0] ? shift : [ shift ]; + $self->makemaker_args( LIBS => $libs ); +} + +sub inc { + my $self = shift; + $self->makemaker_args( INC => shift ); +} + +sub _wanted_t { +} + +sub tests_recursive { + my $self = shift; + my $dir = shift || 't'; + unless ( -d $dir ) { + die "tests_recursive dir '$dir' does not exist"; + } + my %tests = map { $_ => 1 } split / /, ($self->tests || ''); + require File::Find; + File::Find::find( + sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, + $dir + ); + $self->tests( join ' ', sort keys %tests ); +} + +sub write { + my $self = shift; + die "&Makefile->write() takes no arguments\n" if @_; + + # Check the current Perl version + my $perl_version = $self->perl_version; + if ( $perl_version ) { + eval "use $perl_version; 1" + or die "ERROR: perl: Version $] is installed, " + . "but we need version >= $perl_version"; + } + + # Make sure we have a new enough MakeMaker + require ExtUtils::MakeMaker; + + if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { + # MakeMaker can complain about module versions that include + # an underscore, even though its own version may contain one! + # Hence the funny regexp to get rid of it. See RT #35800 + # for details. + my $v = $ExtUtils::MakeMaker::VERSION =~ /^(\d+\.\d+)/; + $self->build_requires( 'ExtUtils::MakeMaker' => $v ); + $self->configure_requires( 'ExtUtils::MakeMaker' => $v ); + } else { + # Allow legacy-compatibility with 5.005 by depending on the + # most recent EU:MM that supported 5.005. + $self->build_requires( 'ExtUtils::MakeMaker' => 6.42 ); + $self->configure_requires( 'ExtUtils::MakeMaker' => 6.42 ); + } + + # Generate the MakeMaker params + my $args = $self->makemaker_args; + $args->{DISTNAME} = $self->name; + $args->{NAME} = $self->module_name || $self->name; + $args->{NAME} =~ s/-/::/g; + $args->{VERSION} = $self->version or die <<'EOT'; +ERROR: Can't determine distribution version. Please specify it +explicitly via 'version' in Makefile.PL, or set a valid $VERSION +in a module, and provide its file path via 'version_from' (or +'all_from' if you prefer) in Makefile.PL. +EOT + + $DB::single = 1; + if ( $self->tests ) { + my @tests = split ' ', $self->tests; + my %seen; + $args->{test} = { + TESTS => (join ' ', grep {!$seen{$_}++} @tests), + }; + } elsif ( $Module::Install::ExtraTests::use_extratests ) { + # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. + # So, just ignore our xt tests here. + } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { + $args->{test} = { + TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), + }; + } + if ( $] >= 5.005 ) { + $args->{ABSTRACT} = $self->abstract; + $args->{AUTHOR} = join ', ', @{$self->author || []}; + } + if ( $self->makemaker(6.10) ) { + $args->{NO_META} = 1; + #$args->{NO_MYMETA} = 1; + } + if ( $self->makemaker(6.17) and $self->sign ) { + $args->{SIGN} = 1; + } + unless ( $self->is_admin ) { + delete $args->{SIGN}; + } + if ( $self->makemaker(6.31) and $self->license ) { + $args->{LICENSE} = $self->license; + } + + my $prereq = ($args->{PREREQ_PM} ||= {}); + %$prereq = ( %$prereq, + map { @$_ } # flatten [module => version] + map { @$_ } + grep $_, + ($self->requires) + ); + + # Remove any reference to perl, PREREQ_PM doesn't support it + delete $args->{PREREQ_PM}->{perl}; + + # Merge both kinds of requires into BUILD_REQUIRES + my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); + %$build_prereq = ( %$build_prereq, + map { @$_ } # flatten [module => version] + map { @$_ } + grep $_, + ($self->configure_requires, $self->build_requires) + ); + + # Remove any reference to perl, BUILD_REQUIRES doesn't support it + delete $args->{BUILD_REQUIRES}->{perl}; + + # Delete bundled dists from prereq_pm, add it to Makefile DIR + my $subdirs = ($args->{DIR} || []); + if ($self->bundles) { + my %processed; + foreach my $bundle (@{ $self->bundles }) { + my ($mod_name, $dist_dir) = @$bundle; + delete $prereq->{$mod_name}; + $dist_dir = File::Basename::basename($dist_dir); # dir for building this module + if (not exists $processed{$dist_dir}) { + if (-d $dist_dir) { + # List as sub-directory to be processed by make + push @$subdirs, $dist_dir; + } + # Else do nothing: the module is already present on the system + $processed{$dist_dir} = undef; + } + } + } + + unless ( $self->makemaker('6.55_03') ) { + %$prereq = (%$prereq,%$build_prereq); + delete $args->{BUILD_REQUIRES}; + } + + if ( my $perl_version = $self->perl_version ) { + eval "use $perl_version; 1" + or die "ERROR: perl: Version $] is installed, " + . "but we need version >= $perl_version"; + + if ( $self->makemaker(6.48) ) { + $args->{MIN_PERL_VERSION} = $perl_version; + } + } + + if ($self->installdirs) { + warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; + $args->{INSTALLDIRS} = $self->installdirs; + } + + my %args = map { + ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) + } keys %$args; + + my $user_preop = delete $args{dist}->{PREOP}; + if ( my $preop = $self->admin->preop($user_preop) ) { + foreach my $key ( keys %$preop ) { + $args{dist}->{$key} = $preop->{$key}; + } + } + + my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); + $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); +} + +sub fix_up_makefile { + my $self = shift; + my $makefile_name = shift; + my $top_class = ref($self->_top) || ''; + my $top_version = $self->_top->VERSION || ''; + + my $preamble = $self->preamble + ? "# Preamble by $top_class $top_version\n" + . $self->preamble + : ''; + my $postamble = "# Postamble by $top_class $top_version\n" + . ($self->postamble || ''); + + local *MAKEFILE; + open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; + eval { flock MAKEFILE, LOCK_EX }; + my $makefile = do { local $/; }; + + $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; + $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; + $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; + $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; + $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; + + # Module::Install will never be used to build the Core Perl + # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks + # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist + $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; + #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; + + # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. + $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; + + # XXX - This is currently unused; not sure if it breaks other MM-users + # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; + + seek MAKEFILE, 0, SEEK_SET; + truncate MAKEFILE, 0; + print MAKEFILE "$preamble$makefile$postamble" or die $!; + close MAKEFILE or die $!; + + 1; +} + +sub preamble { + my ($self, $text) = @_; + $self->{preamble} = $text . $self->{preamble} if defined $text; + $self->{preamble}; +} + +sub postamble { + my ($self, $text) = @_; + $self->{postamble} ||= $self->admin->postamble; + $self->{postamble} .= $text if defined $text; + $self->{postamble} +} + +1; + +__END__ + +#line 541 diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Metadata.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Metadata.pm new file mode 100644 index 0000000..cfe45b3 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Metadata.pm @@ -0,0 +1,715 @@ +#line 1 +package Module::Install::Metadata; + +use strict 'vars'; +use Module::Install::Base (); + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = 'Module::Install::Base'; + $ISCORE = 1; +} + +my @boolean_keys = qw{ + sign +}; + +my @scalar_keys = qw{ + name + module_name + abstract + version + distribution_type + tests + installdirs +}; + +my @tuple_keys = qw{ + configure_requires + build_requires + requires + recommends + bundles + resources +}; + +my @resource_keys = qw{ + homepage + bugtracker + repository +}; + +my @array_keys = qw{ + keywords + author +}; + +*authors = \&author; + +sub Meta { shift } +sub Meta_BooleanKeys { @boolean_keys } +sub Meta_ScalarKeys { @scalar_keys } +sub Meta_TupleKeys { @tuple_keys } +sub Meta_ResourceKeys { @resource_keys } +sub Meta_ArrayKeys { @array_keys } + +foreach my $key ( @boolean_keys ) { + *$key = sub { + my $self = shift; + if ( defined wantarray and not @_ ) { + return $self->{values}->{$key}; + } + $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); + return $self; + }; +} + +foreach my $key ( @scalar_keys ) { + *$key = sub { + my $self = shift; + return $self->{values}->{$key} if defined wantarray and !@_; + $self->{values}->{$key} = shift; + return $self; + }; +} + +foreach my $key ( @array_keys ) { + *$key = sub { + my $self = shift; + return $self->{values}->{$key} if defined wantarray and !@_; + $self->{values}->{$key} ||= []; + push @{$self->{values}->{$key}}, @_; + return $self; + }; +} + +foreach my $key ( @resource_keys ) { + *$key = sub { + my $self = shift; + unless ( @_ ) { + return () unless $self->{values}->{resources}; + return map { $_->[1] } + grep { $_->[0] eq $key } + @{ $self->{values}->{resources} }; + } + return $self->{values}->{resources}->{$key} unless @_; + my $uri = shift or die( + "Did not provide a value to $key()" + ); + $self->resources( $key => $uri ); + return 1; + }; +} + +foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { + *$key = sub { + my $self = shift; + return $self->{values}->{$key} unless @_; + my @added; + while ( @_ ) { + my $module = shift or last; + my $version = shift || 0; + push @added, [ $module, $version ]; + } + push @{ $self->{values}->{$key} }, @added; + return map {@$_} @added; + }; +} + +# Resource handling +my %lc_resource = map { $_ => 1 } qw{ + homepage + license + bugtracker + repository +}; + +sub resources { + my $self = shift; + while ( @_ ) { + my $name = shift or last; + my $value = shift or next; + if ( $name eq lc $name and ! $lc_resource{$name} ) { + die("Unsupported reserved lowercase resource '$name'"); + } + $self->{values}->{resources} ||= []; + push @{ $self->{values}->{resources} }, [ $name, $value ]; + } + $self->{values}->{resources}; +} + +# Aliases for build_requires that will have alternative +# meanings in some future version of META.yml. +sub test_requires { shift->build_requires(@_) } +sub install_requires { shift->build_requires(@_) } + +# Aliases for installdirs options +sub install_as_core { $_[0]->installdirs('perl') } +sub install_as_cpan { $_[0]->installdirs('site') } +sub install_as_site { $_[0]->installdirs('site') } +sub install_as_vendor { $_[0]->installdirs('vendor') } + +sub dynamic_config { + my $self = shift; + unless ( @_ ) { + warn "You MUST provide an explicit true/false value to dynamic_config\n"; + return $self; + } + $self->{values}->{dynamic_config} = $_[0] ? 1 : 0; + return 1; +} + +sub perl_version { + my $self = shift; + return $self->{values}->{perl_version} unless @_; + my $version = shift or die( + "Did not provide a value to perl_version()" + ); + + # Normalize the version + $version = $self->_perl_version($version); + + # We don't support the reall old versions + unless ( $version >= 5.005 ) { + die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; + } + + $self->{values}->{perl_version} = $version; +} + +sub all_from { + my ( $self, $file ) = @_; + + unless ( defined($file) ) { + my $name = $self->name or die( + "all_from called with no args without setting name() first" + ); + $file = join('/', 'lib', split(/-/, $name)) . '.pm'; + $file =~ s{.*/}{} unless -e $file; + unless ( -e $file ) { + die("all_from cannot find $file from $name"); + } + } + unless ( -f $file ) { + die("The path '$file' does not exist, or is not a file"); + } + + $self->{values}{all_from} = $file; + + # Some methods pull from POD instead of code. + # If there is a matching .pod, use that instead + my $pod = $file; + $pod =~ s/\.pm$/.pod/i; + $pod = $file unless -e $pod; + + # Pull the different values + $self->name_from($file) unless $self->name; + $self->version_from($file) unless $self->version; + $self->perl_version_from($file) unless $self->perl_version; + $self->author_from($pod) unless @{$self->author || []}; + $self->license_from($pod) unless $self->license; + $self->abstract_from($pod) unless $self->abstract; + + return 1; +} + +sub provides { + my $self = shift; + my $provides = ( $self->{values}->{provides} ||= {} ); + %$provides = (%$provides, @_) if @_; + return $provides; +} + +sub auto_provides { + my $self = shift; + return $self unless $self->is_admin; + unless (-e 'MANIFEST') { + warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; + return $self; + } + # Avoid spurious warnings as we are not checking manifest here. + local $SIG{__WARN__} = sub {1}; + require ExtUtils::Manifest; + local *ExtUtils::Manifest::manicheck = sub { return }; + + require Module::Build; + my $build = Module::Build->new( + dist_name => $self->name, + dist_version => $self->version, + license => $self->license, + ); + $self->provides( %{ $build->find_dist_packages || {} } ); +} + +sub feature { + my $self = shift; + my $name = shift; + my $features = ( $self->{values}->{features} ||= [] ); + my $mods; + + if ( @_ == 1 and ref( $_[0] ) ) { + # The user used ->feature like ->features by passing in the second + # argument as a reference. Accomodate for that. + $mods = $_[0]; + } else { + $mods = \@_; + } + + my $count = 0; + push @$features, ( + $name => [ + map { + ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ + } @$mods + ] + ); + + return @$features; +} + +sub features { + my $self = shift; + while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { + $self->feature( $name, @$mods ); + } + return $self->{values}->{features} + ? @{ $self->{values}->{features} } + : (); +} + +sub no_index { + my $self = shift; + my $type = shift; + push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; + return $self->{values}->{no_index}; +} + +sub read { + my $self = shift; + $self->include_deps( 'YAML::Tiny', 0 ); + + require YAML::Tiny; + my $data = YAML::Tiny::LoadFile('META.yml'); + + # Call methods explicitly in case user has already set some values. + while ( my ( $key, $value ) = each %$data ) { + next unless $self->can($key); + if ( ref $value eq 'HASH' ) { + while ( my ( $module, $version ) = each %$value ) { + $self->can($key)->($self, $module => $version ); + } + } else { + $self->can($key)->($self, $value); + } + } + return $self; +} + +sub write { + my $self = shift; + return $self unless $self->is_admin; + $self->admin->write_meta; + return $self; +} + +sub version_from { + require ExtUtils::MM_Unix; + my ( $self, $file ) = @_; + $self->version( ExtUtils::MM_Unix->parse_version($file) ); + + # for version integrity check + $self->makemaker_args( VERSION_FROM => $file ); +} + +sub abstract_from { + require ExtUtils::MM_Unix; + my ( $self, $file ) = @_; + $self->abstract( + bless( + { DISTNAME => $self->name }, + 'ExtUtils::MM_Unix' + )->parse_abstract($file) + ); +} + +# Add both distribution and module name +sub name_from { + my ($self, $file) = @_; + if ( + Module::Install::_read($file) =~ m/ + ^ \s* + package \s* + ([\w:]+) + \s* ; + /ixms + ) { + my ($name, $module_name) = ($1, $1); + $name =~ s{::}{-}g; + $self->name($name); + unless ( $self->module_name ) { + $self->module_name($module_name); + } + } else { + die("Cannot determine name from $file\n"); + } +} + +sub _extract_perl_version { + if ( + $_[0] =~ m/ + ^\s* + (?:use|require) \s* + v? + ([\d_\.]+) + \s* ; + /ixms + ) { + my $perl_version = $1; + $perl_version =~ s{_}{}g; + return $perl_version; + } else { + return; + } +} + +sub perl_version_from { + my $self = shift; + my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); + if ($perl_version) { + $self->perl_version($perl_version); + } else { + warn "Cannot determine perl version info from $_[0]\n"; + return; + } +} + +sub author_from { + my $self = shift; + my $content = Module::Install::_read($_[0]); + if ($content =~ m/ + =head \d \s+ (?:authors?)\b \s* + ([^\n]*) + | + =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* + .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* + ([^\n]*) + /ixms) { + my $author = $1 || $2; + + # XXX: ugly but should work anyway... + if (eval "require Pod::Escapes; 1") { + # Pod::Escapes has a mapping table. + # It's in core of perl >= 5.9.3, and should be installed + # as one of the Pod::Simple's prereqs, which is a prereq + # of Pod::Text 3.x (see also below). + $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } + { + defined $2 + ? chr($2) + : defined $Pod::Escapes::Name2character_number{$1} + ? chr($Pod::Escapes::Name2character_number{$1}) + : do { + warn "Unknown escape: E<$1>"; + "E<$1>"; + }; + }gex; + } + elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { + # Pod::Text < 3.0 has yet another mapping table, + # though the table name of 2.x and 1.x are different. + # (1.x is in core of Perl < 5.6, 2.x is in core of + # Perl < 5.9.3) + my $mapping = ($Pod::Text::VERSION < 2) + ? \%Pod::Text::HTML_Escapes + : \%Pod::Text::ESCAPES; + $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } + { + defined $2 + ? chr($2) + : defined $mapping->{$1} + ? $mapping->{$1} + : do { + warn "Unknown escape: E<$1>"; + "E<$1>"; + }; + }gex; + } + else { + $author =~ s{E}{<}g; + $author =~ s{E}{>}g; + } + $self->author($author); + } else { + warn "Cannot determine author info from $_[0]\n"; + } +} + +#Stolen from M::B +my %license_urls = ( + perl => 'http://dev.perl.org/licenses/', + apache => 'http://apache.org/licenses/LICENSE-2.0', + apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', + artistic => 'http://opensource.org/licenses/artistic-license.php', + artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', + lgpl => 'http://opensource.org/licenses/lgpl-license.php', + lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', + lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', + bsd => 'http://opensource.org/licenses/bsd-license.php', + gpl => 'http://opensource.org/licenses/gpl-license.php', + gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', + gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', + mit => 'http://opensource.org/licenses/mit-license.php', + mozilla => 'http://opensource.org/licenses/mozilla1.1.php', + open_source => undef, + unrestricted => undef, + restrictive => undef, + unknown => undef, +); + +sub license { + my $self = shift; + return $self->{values}->{license} unless @_; + my $license = shift or die( + 'Did not provide a value to license()' + ); + $license = __extract_license($license) || lc $license; + $self->{values}->{license} = $license; + + # Automatically fill in license URLs + if ( $license_urls{$license} ) { + $self->resources( license => $license_urls{$license} ); + } + + return 1; +} + +sub _extract_license { + my $pod = shift; + my $matched; + return __extract_license( + ($matched) = $pod =~ m/ + (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) + (=head \d.*|=cut.*|)\z + /xms + ) || __extract_license( + ($matched) = $pod =~ m/ + (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) + (=head \d.*|=cut.*|)\z + /xms + ); +} + +sub __extract_license { + my $license_text = shift or return; + my @phrases = ( + '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, + '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, + 'Artistic and GPL' => 'perl', 1, + 'GNU general public license' => 'gpl', 1, + 'GNU public license' => 'gpl', 1, + 'GNU lesser general public license' => 'lgpl', 1, + 'GNU lesser public license' => 'lgpl', 1, + 'GNU library general public license' => 'lgpl', 1, + 'GNU library public license' => 'lgpl', 1, + 'GNU Free Documentation license' => 'unrestricted', 1, + 'GNU Affero General Public License' => 'open_source', 1, + '(?:Free)?BSD license' => 'bsd', 1, + 'Artistic license' => 'artistic', 1, + 'Apache (?:Software )?license' => 'apache', 1, + 'GPL' => 'gpl', 1, + 'LGPL' => 'lgpl', 1, + 'BSD' => 'bsd', 1, + 'Artistic' => 'artistic', 1, + 'MIT' => 'mit', 1, + 'Mozilla Public License' => 'mozilla', 1, + 'Q Public License' => 'open_source', 1, + 'OpenSSL License' => 'unrestricted', 1, + 'SSLeay License' => 'unrestricted', 1, + 'zlib License' => 'open_source', 1, + 'proprietary' => 'proprietary', 0, + ); + while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { + $pattern =~ s#\s+#\\s+#gs; + if ( $license_text =~ /\b$pattern\b/i ) { + return $license; + } + } + return ''; +} + +sub license_from { + my $self = shift; + if (my $license=_extract_license(Module::Install::_read($_[0]))) { + $self->license($license); + } else { + warn "Cannot determine license info from $_[0]\n"; + return 'unknown'; + } +} + +sub _extract_bugtracker { + my @links = $_[0] =~ m#L<( + \Qhttp://rt.cpan.org/\E[^>]+| + \Qhttp://github.com/\E[\w_]+/[\w_]+/issues| + \Qhttp://code.google.com/p/\E[\w_\-]+/issues/list + )>#gx; + my %links; + @links{@links}=(); + @links=keys %links; + return @links; +} + +sub bugtracker_from { + my $self = shift; + my $content = Module::Install::_read($_[0]); + my @links = _extract_bugtracker($content); + unless ( @links ) { + warn "Cannot determine bugtracker info from $_[0]\n"; + return 0; + } + if ( @links > 1 ) { + warn "Found more than one bugtracker link in $_[0]\n"; + return 0; + } + + # Set the bugtracker + bugtracker( $links[0] ); + return 1; +} + +sub requires_from { + my $self = shift; + my $content = Module::Install::_readperl($_[0]); + my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; + while ( @requires ) { + my $module = shift @requires; + my $version = shift @requires; + $self->requires( $module => $version ); + } +} + +sub test_requires_from { + my $self = shift; + my $content = Module::Install::_readperl($_[0]); + my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; + while ( @requires ) { + my $module = shift @requires; + my $version = shift @requires; + $self->test_requires( $module => $version ); + } +} + +# Convert triple-part versions (eg, 5.6.1 or 5.8.9) to +# numbers (eg, 5.006001 or 5.008009). +# Also, convert double-part versions (eg, 5.8) +sub _perl_version { + my $v = $_[-1]; + $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; + $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; + $v =~ s/(\.\d\d\d)000$/$1/; + $v =~ s/_.+$//; + if ( ref($v) ) { + # Numify + $v = $v + 0; + } + return $v; +} + +sub add_metadata { + my $self = shift; + my %hash = @_; + for my $key (keys %hash) { + warn "add_metadata: $key is not prefixed with 'x_'.\n" . + "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; + $self->{values}->{$key} = $hash{$key}; + } +} + + +###################################################################### +# MYMETA Support + +sub WriteMyMeta { + die "WriteMyMeta has been deprecated"; +} + +sub write_mymeta_yaml { + my $self = shift; + + # We need YAML::Tiny to write the MYMETA.yml file + unless ( eval { require YAML::Tiny; 1; } ) { + return 1; + } + + # Generate the data + my $meta = $self->_write_mymeta_data or return 1; + + # Save as the MYMETA.yml file + print "Writing MYMETA.yml\n"; + YAML::Tiny::DumpFile('MYMETA.yml', $meta); +} + +sub write_mymeta_json { + my $self = shift; + + # We need JSON to write the MYMETA.json file + unless ( eval { require JSON; 1; } ) { + return 1; + } + + # Generate the data + my $meta = $self->_write_mymeta_data or return 1; + + # Save as the MYMETA.yml file + print "Writing MYMETA.json\n"; + Module::Install::_write( + 'MYMETA.json', + JSON->new->pretty(1)->canonical->encode($meta), + ); +} + +sub _write_mymeta_data { + my $self = shift; + + # If there's no existing META.yml there is nothing we can do + return undef unless -f 'META.yml'; + + # We need Parse::CPAN::Meta to load the file + unless ( eval { require Parse::CPAN::Meta; 1; } ) { + return undef; + } + + # Merge the perl version into the dependencies + my $val = $self->Meta->{values}; + my $perl = delete $val->{perl_version}; + if ( $perl ) { + $val->{requires} ||= []; + my $requires = $val->{requires}; + + # Canonize to three-dot version after Perl 5.6 + if ( $perl >= 5.006 ) { + $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e + } + unshift @$requires, [ perl => $perl ]; + } + + # Load the advisory META.yml file + my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); + my $meta = $yaml[0]; + + # Overwrite the non-configure dependency hashs + delete $meta->{requires}; + delete $meta->{build_requires}; + delete $meta->{recommends}; + if ( exists $val->{requires} ) { + $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; + } + if ( exists $val->{build_requires} ) { + $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; + } + + return $meta; +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Win32.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Win32.pm new file mode 100644 index 0000000..edc18b4 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/Win32.pm @@ -0,0 +1,64 @@ +#line 1 +package Module::Install::Win32; + +use strict; +use Module::Install::Base (); + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = 'Module::Install::Base'; + $ISCORE = 1; +} + +# determine if the user needs nmake, and download it if needed +sub check_nmake { + my $self = shift; + $self->load('can_run'); + $self->load('get_file'); + + require Config; + return unless ( + $^O eq 'MSWin32' and + $Config::Config{make} and + $Config::Config{make} =~ /^nmake\b/i and + ! $self->can_run('nmake') + ); + + print "The required 'nmake' executable not found, fetching it...\n"; + + require File::Basename; + my $rv = $self->get_file( + url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', + ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', + local_dir => File::Basename::dirname($^X), + size => 51928, + run => 'Nmake15.exe /o > nul', + check_for => 'Nmake.exe', + remove => 1, + ); + + die <<'END_MESSAGE' unless $rv; + +------------------------------------------------------------------------------- + +Since you are using Microsoft Windows, you will need the 'nmake' utility +before installation. It's available at: + + http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe + or + ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe + +Please download the file manually, save it to a directory in %PATH% (e.g. +C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to +that directory, and run "Nmake15.exe" from there; that will create the +'nmake.exe' file needed by this module. + +You may then resume the installation process described in README. + +------------------------------------------------------------------------------- +END_MESSAGE + +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/WriteAll.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/WriteAll.pm new file mode 100644 index 0000000..d0f6599 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/inc/Module/Install/WriteAll.pm @@ -0,0 +1,63 @@ +#line 1 +package Module::Install::WriteAll; + +use strict; +use Module::Install::Base (); + +use vars qw{$VERSION @ISA $ISCORE}; +BEGIN { + $VERSION = '1.00'; + @ISA = qw{Module::Install::Base}; + $ISCORE = 1; +} + +sub WriteAll { + my $self = shift; + my %args = ( + meta => 1, + sign => 0, + inline => 0, + check_nmake => 1, + @_, + ); + + $self->sign(1) if $args{sign}; + $self->admin->WriteAll(%args) if $self->is_admin; + + $self->check_nmake if $args{check_nmake}; + unless ( $self->makemaker_args->{PL_FILES} ) { + # XXX: This still may be a bit over-defensive... + unless ($self->makemaker(6.25)) { + $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; + } + } + + # Until ExtUtils::MakeMaker support MYMETA.yml, make sure + # we clean it up properly ourself. + $self->realclean_files('MYMETA.yml'); + + if ( $args{inline} ) { + $self->Inline->write; + } else { + $self->Makefile->write; + } + + # The Makefile write process adds a couple of dependencies, + # so write the META.yml files after the Makefile. + if ( $args{meta} ) { + $self->Meta->write; + } + + # Experimental support for MYMETA + if ( $ENV{X_MYMETA} ) { + if ( $ENV{X_MYMETA} eq 'JSON' ) { + $self->Meta->write_mymeta_json; + } else { + $self->Meta->write_mymeta_yaml; + } + } + + return 1; +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector.pm new file mode 100644 index 0000000..c6815cc --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector.pm @@ -0,0 +1,638 @@ +package Class::Inspector; + +=pod + +=head1 NAME + +Class::Inspector - Get information about a class and its structure + +=head1 SYNOPSIS + + use Class::Inspector; + + # Is a class installed and/or loaded + Class::Inspector->installed( 'Foo::Class' ); + Class::Inspector->loaded( 'Foo::Class' ); + + # Filename related information + Class::Inspector->filename( 'Foo::Class' ); + Class::Inspector->resolved_filename( 'Foo::Class' ); + + # Get subroutine related information + Class::Inspector->functions( 'Foo::Class' ); + Class::Inspector->function_refs( 'Foo::Class' ); + Class::Inspector->function_exists( 'Foo::Class', 'bar' ); + Class::Inspector->methods( 'Foo::Class', 'full', 'public' ); + + # Find all loaded subclasses or something + Class::Inspector->subclasses( 'Foo::Class' ); + +=head1 DESCRIPTION + +Class::Inspector allows you to get information about a loaded class. Most or +all of this information can be found in other ways, but they aren't always +very friendly, and usually involve a relatively high level of Perl wizardry, +or strange and unusual looking code. Class::Inspector attempts to provide +an easier, more friendly interface to this information. + +=head1 METHODS + +=cut + +use 5.006; +# We don't want to use strict refs anywhere in this module, since we do a +# lot of things in here that aren't strict refs friendly. +use strict qw{vars subs}; +use warnings; +use File::Spec (); + +# Globals +use vars qw{$VERSION $RE_IDENTIFIER $RE_CLASS $UNIX}; +BEGIN { + $VERSION = '1.25'; + + # If Unicode is available, enable it so that the + # pattern matches below match unicode method names. + # We can safely ignore any failure here. + SCOPE: { + local $@; + eval "require utf8; utf8->import"; + } + + # Predefine some regexs + $RE_IDENTIFIER = qr/\A[^\W\d]\w*\z/s; + $RE_CLASS = qr/\A[^\W\d]\w*(?:(?:\'|::)\w+)*\z/s; + + # Are we on something Unix-like? + $UNIX = !! ( $File::Spec::ISA[0] eq 'File::Spec::Unix' ); +} + + + + + +##################################################################### +# Basic Methods + +=pod + +=head2 installed $class + +The C static method tries to determine if a class is installed +on the machine, or at least available to Perl. It does this by wrapping +around C. + +Returns true if installed/available, false if the class is not installed, +or C if the class name is invalid. + +=cut + +sub installed { + my $class = shift; + !! ($class->loaded_filename($_[0]) or $class->resolved_filename($_[0])); +} + +=pod + +=head2 loaded $class + +The C static method tries to determine if a class is loaded by +looking for symbol table entries. + +This method it uses to determine this will work even if the class does not +have its own file, but is contained inside a single file with multiple +classes in it. Even in the case of some sort of run-time loading class +being used, these typically leave some trace in the symbol table, so an +L or L-based class should correctly appear +loaded. + +Returns true if the class is loaded, false if not, or C if the +class name is invalid. + +=cut + +sub loaded { + my $class = shift; + my $name = $class->_class(shift) or return undef; + $class->_loaded($name); +} + +sub _loaded { + my $class = shift; + my $name = shift; + + # Handle by far the two most common cases + # This is very fast and handles 99% of cases. + return 1 if defined ${"${name}::VERSION"}; + return 1 if defined @{"${name}::ISA"}; + + # Are there any symbol table entries other than other namespaces + foreach ( keys %{"${name}::"} ) { + next if substr($_, -2, 2) eq '::'; + return 1 if defined &{"${name}::$_"}; + } + + # No functions, and it doesn't have a version, and isn't anything. + # As an absolute last resort, check for an entry in %INC + my $filename = $class->_inc_filename($name); + return 1 if defined $INC{$filename}; + + ''; +} + +=pod + +=head2 filename $class + +For a given class, returns the base filename for the class. This will NOT +be a fully resolved filename, just the part of the filename BELOW the +C<@INC> entry. + + print Class->filename( 'Foo::Bar' ); + > Foo/Bar.pm + +This filename will be returned with the right seperator for the local +platform, and should work on all platforms. + +Returns the filename on success or C if the class name is invalid. + +=cut + +sub filename { + my $class = shift; + my $name = $class->_class(shift) or return undef; + File::Spec->catfile( split /(?:\'|::)/, $name ) . '.pm'; +} + +=pod + +=head2 resolved_filename $class, @try_first + +For a given class, the C static method returns the fully +resolved filename for a class. That is, the file that the class would be +loaded from. + +This is not nescesarily the file that the class WAS loaded from, as the +value returned is determined each time it runs, and the C<@INC> include +path may change. + +To get the actual file for a loaded class, see the C +method. + +Returns the filename for the class, or C if the class name is +invalid. + +=cut + +sub resolved_filename { + my $class = shift; + my $filename = $class->_inc_filename(shift) or return undef; + my @try_first = @_; + + # Look through the @INC path to find the file + foreach ( @try_first, @INC ) { + my $full = "$_/$filename"; + next unless -e $full; + return $UNIX ? $full : $class->_inc_to_local($full); + } + + # File not found + ''; +} + +=pod + +=head2 loaded_filename $class + +For a given loaded class, the C static method determines +(via the C<%INC> hash) the name of the file that it was originally loaded +from. + +Returns a resolved file path, or false if the class did not have it's own +file. + +=cut + +sub loaded_filename { + my $class = shift; + my $filename = $class->_inc_filename(shift); + $UNIX ? $INC{$filename} : $class->_inc_to_local($INC{$filename}); +} + + + + + +##################################################################### +# Sub Related Methods + +=pod + +=head2 functions $class + +For a loaded class, the C static method returns a list of the +names of all the functions in the classes immediate namespace. + +Note that this is not the METHODS of the class, just the functions. + +Returns a reference to an array of the function names on success, or C +if the class name is invalid or the class is not loaded. + +=cut + +sub functions { + my $class = shift; + my $name = $class->_class(shift) or return undef; + return undef unless $class->loaded( $name ); + + # Get all the CODE symbol table entries + my @functions = sort grep { /$RE_IDENTIFIER/o } + grep { defined &{"${name}::$_"} } + keys %{"${name}::"}; + \@functions; +} + +=pod + +=head2 function_refs $class + +For a loaded class, the C static method returns references to +all the functions in the classes immediate namespace. + +Note that this is not the METHODS of the class, just the functions. + +Returns a reference to an array of C refs of the functions on +success, or C if the class is not loaded. + +=cut + +sub function_refs { + my $class = shift; + my $name = $class->_class(shift) or return undef; + return undef unless $class->loaded( $name ); + + # Get all the CODE symbol table entries, but return + # the actual CODE refs this time. + my @functions = map { \&{"${name}::$_"} } + sort grep { /$RE_IDENTIFIER/o } + grep { defined &{"${name}::$_"} } + keys %{"${name}::"}; + \@functions; +} + +=pod + +=head2 function_exists $class, $function + +Given a class and function name the C static method will +check to see if the function exists in the class. + +Note that this is as a function, not as a method. To see if a method +exists for a class, use the C method for any class or object. + +Returns true if the function exists, false if not, or C if the +class or function name are invalid, or the class is not loaded. + +=cut + +sub function_exists { + my $class = shift; + my $name = $class->_class( shift ) or return undef; + my $function = shift or return undef; + + # Only works if the class is loaded + return undef unless $class->loaded( $name ); + + # Does the GLOB exist and its CODE part exist + defined &{"${name}::$function"}; +} + +=pod + +=head2 methods $class, @options + +For a given class name, the C static method will returns ALL +the methods available to that class. This includes all methods available +from every class up the class' C<@ISA> tree. + +Returns a reference to an array of the names of all the available methods +on success, or C if the class name is invalid or the class is not +loaded. + +A number of options are available to the C method that will alter +the results returned. These should be listed after the class name, in any +order. + + # Only get public methods + my $method = Class::Inspector->methods( 'My::Class', 'public' ); + +=over 4 + +=item public + +The C option will return only 'public' methods, as defined by the Perl +convention of prepending an underscore to any 'private' methods. The C +option will effectively remove any methods that start with an underscore. + +=item private + +The C options will return only 'private' methods, as defined by the +Perl convention of prepending an underscore to an private methods. The +C option will effectively remove an method that do not start with an +underscore. + +B and C options are mutually exclusive> + +=item full + +C normally returns just the method name. Supplying the C option +will cause the methods to be returned as the full names. That is, instead of +returning C<[ 'method1', 'method2', 'method3' ]>, you would instead get +C<[ 'Class::method1', 'AnotherClass::method2', 'Class::method3' ]>. + +=item expanded + +The C option will cause a lot more information about method to be +returned. Instead of just the method name, you will instead get an array +reference containing the method name as a single combined name, ala C, +the seperate class and method, and a CODE ref to the actual function ( if +available ). Please note that the function reference is not guarenteed to +be available. C is intended at some later time, work +with modules that have some some of common run-time loader in place ( e.g +C or C for example. + +The response from C would look something like +the following. + + [ + [ 'Class::method1', 'Class', 'method1', \&Class::method1 ], + [ 'Another::method2', 'Another', 'method2', \&Another::method2 ], + [ 'Foo::bar', 'Foo', 'bar', \&Foo::bar ], + ] + +=back + +=cut + +sub methods { + my $class = shift; + my $name = $class->_class( shift ) or return undef; + my @arguments = map { lc $_ } @_; + + # Process the arguments to determine the options + my %options = (); + foreach ( @arguments ) { + if ( $_ eq 'public' ) { + # Only get public methods + return undef if $options{private}; + $options{public} = 1; + + } elsif ( $_ eq 'private' ) { + # Only get private methods + return undef if $options{public}; + $options{private} = 1; + + } elsif ( $_ eq 'full' ) { + # Return the full method name + return undef if $options{expanded}; + $options{full} = 1; + + } elsif ( $_ eq 'expanded' ) { + # Returns class, method and function ref + return undef if $options{full}; + $options{expanded} = 1; + + } else { + # Unknown or unsupported options + return undef; + } + } + + # Only works if the class is loaded + return undef unless $class->loaded( $name ); + + # Get the super path ( not including UNIVERSAL ) + # Rather than using Class::ISA, we'll use an inlined version + # that implements the same basic algorithm. + my @path = (); + my @queue = ( $name ); + my %seen = ( $name => 1 ); + while ( my $cl = shift @queue ) { + push @path, $cl; + unshift @queue, grep { ! $seen{$_}++ } + map { s/^::/main::/; s/\'/::/g; $_ } + ( @{"${cl}::ISA"} ); + } + + # Find and merge the function names across the entire super path. + # Sort alphabetically and return. + my %methods = (); + foreach my $namespace ( @path ) { + my @functions = grep { ! $methods{$_} } + grep { /$RE_IDENTIFIER/o } + grep { defined &{"${namespace}::$_"} } + keys %{"${namespace}::"}; + foreach ( @functions ) { + $methods{$_} = $namespace; + } + } + + # Filter to public or private methods if needed + my @methodlist = sort keys %methods; + @methodlist = grep { ! /^\_/ } @methodlist if $options{public}; + @methodlist = grep { /^\_/ } @methodlist if $options{private}; + + # Return in the correct format + @methodlist = map { "$methods{$_}::$_" } @methodlist if $options{full}; + @methodlist = map { + [ "$methods{$_}::$_", $methods{$_}, $_, \&{"$methods{$_}::$_"} ] + } @methodlist if $options{expanded}; + + \@methodlist; +} + + + + + +##################################################################### +# Search Methods + +=pod + +=head2 subclasses $class + +The C static method will search then entire namespace (and thus +B currently loaded classes) to find all classes that are subclasses +of the class provided as a the parameter. + +The actual test will be done by calling C on the class as a static +method. (i.e. Cisa($class)>. + +Returns a reference to a list of the loaded classes that match the class +provided, or false is none match, or C if the class name provided +is invalid. + +=cut + +sub subclasses { + my $class = shift; + my $name = $class->_class( shift ) or return undef; + + # Prepare the search queue + my @found = (); + my @queue = grep { $_ ne 'main' } $class->_subnames(''); + while ( @queue ) { + my $c = shift(@queue); # c for class + if ( $class->_loaded($c) ) { + # At least one person has managed to misengineer + # a situation in which ->isa could die, even if the + # class is real. Trap these cases and just skip + # over that (bizarre) class. That would at limit + # problems with finding subclasses to only the + # modules that have broken ->isa implementation. + local $@; + eval { + if ( $c->isa($name) ) { + # Add to the found list, but don't add the class itself + push @found, $c unless $c eq $name; + } + }; + } + + # Add any child namespaces to the head of the queue. + # This keeps the queue length shorted, and allows us + # not to have to do another sort at the end. + unshift @queue, map { "${c}::$_" } $class->_subnames($c); + } + + @found ? \@found : ''; +} + +sub _subnames { + my ($class, $name) = @_; + return sort + grep { + substr($_, -2, 2, '') eq '::' + and + /$RE_IDENTIFIER/o + } + keys %{"${name}::"}; +} + + + + + +##################################################################### +# Children Related Methods + +# These can go undocumented for now, until I decide if its best to +# just search the children in namespace only, or if I should do it via +# the file system. + +# Find all the loaded classes below us +sub children { + my $class = shift; + my $name = $class->_class(shift) or return (); + + # Find all the Foo:: elements in our symbol table + no strict 'refs'; + map { "${name}::$_" } sort grep { s/::$// } keys %{"${name}::"}; +} + +# As above, but recursively +sub recursive_children { + my $class = shift; + my $name = $class->_class(shift) or return (); + my @children = ( $name ); + + # Do the search using a nicer, more memory efficient + # variant of actual recursion. + my $i = 0; + no strict 'refs'; + while ( my $namespace = $children[$i++] ) { + push @children, map { "${namespace}::$_" } + grep { ! /^::/ } # Ignore things like ::ISA::CACHE:: + grep { s/::$// } + keys %{"${namespace}::"}; + } + + sort @children; +} + + + + + +##################################################################### +# Private Methods + +# Checks and expands ( if needed ) a class name +sub _class { + my $class = shift; + my $name = shift or return ''; + + # Handle main shorthand + return 'main' if $name eq '::'; + $name =~ s/\A::/main::/; + + # Check the class name is valid + $name =~ /$RE_CLASS/o ? $name : ''; +} + +# Create a INC-specific filename, which always uses '/' +# regardless of platform. +sub _inc_filename { + my $class = shift; + my $name = $class->_class(shift) or return undef; + join( '/', split /(?:\'|::)/, $name ) . '.pm'; +} + +# Convert INC-specific file name to local file name +sub _inc_to_local { + # Shortcut in the Unix case + return $_[1] if $UNIX; + + # On other places, we have to deal with an unusual path that might look + # like C:/foo/bar.pm which doesn't fit ANY normal pattern. + # Putting it through splitpath/dir and back again seems to normalise + # it to a reasonable amount. + my $class = shift; + my $inc_name = shift or return undef; + my ($vol, $dir, $file) = File::Spec->splitpath( $inc_name ); + $dir = File::Spec->catdir( File::Spec->splitdir( $dir || "" ) ); + File::Spec->catpath( $vol, $dir, $file || "" ); +} + +1; + +=pod + +=head1 SUPPORT + +Bugs should be reported via the CPAN bug tracker + +L + +For other issues, or commercial enhancement or support, contact the author. + +=head1 AUTHOR + +Adam Kennedy Eadamk@cpan.orgE + +=head1 SEE ALSO + +L, L + +=head1 COPYRIGHT + +Copyright 2002 - 2011 Adam Kennedy. + +This program is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +The full text of the license can be found in the +LICENSE file included with this module. + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector/Functions.pm b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector/Functions.pm new file mode 100644 index 0000000..5282742 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/Class-Inspector-1.25/lib/Class/Inspector/Functions.pm @@ -0,0 +1,135 @@ +package Class::Inspector::Functions; + +use 5.006; +use strict; +use warnings; +use Exporter (); +use Class::Inspector (); + +use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); +BEGIN { + $VERSION = '1.25'; + @ISA = 'Exporter'; + + + @EXPORT = qw( + installed + loaded + + filename + functions + methods + + subclasses + ); + + @EXPORT_OK = qw( + resolved_filename + loaded_filename + + function_refs + function_exists + ); + #children + #recursive_children + + %EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] ); + + foreach my $meth (@EXPORT, @EXPORT_OK) { + my $sub = Class::Inspector->can($meth); + no strict 'refs'; + *{$meth} = sub {&$sub('Class::Inspector', @_)}; + } + +} + +1; + +__END__ + +=pod + +=head1 NAME + +Class::Inspector::Functions - Get information about a class and its structure + +=head1 SYNOPSIS + + use Class::Inspector::Functions; + # Class::Inspector provides a non-polluting, + # method based interface! + + # Is a class installed and/or loaded + installed( 'Foo::Class' ); + loaded( 'Foo::Class' ); + + # Filename related information + filename( 'Foo::Class' ); + resolved_filename( 'Foo::Class' ); + + # Get subroutine related information + functions( 'Foo::Class' ); + function_refs( 'Foo::Class' ); + function_exists( 'Foo::Class', 'bar' ); + methods( 'Foo::Class', 'full', 'public' ); + + # Find all loaded subclasses or something + subclasses( 'Foo::Class' ); + +=head1 DESCRIPTION + +Class::Inspector::Functions is a function based interface of +L. For a thorough documentation of the available +functions, please check the manual for the main module. + +=head2 Exports + +The following functions are exported by default. + + installed + loaded + filename + functions + methods + subclasses + +The following functions are exported only by request. + + resolved_filename + loaded_filename + function_refs + function_exists + +All the functions may be imported using the C<:ALL> tag. + +=head1 SUPPORT + +Bugs should be reported via the CPAN bug tracker + +L + +For other issues, or commercial enhancement or support, contact the author. + +=head1 AUTHOR + +Adam Kennedy Eadamk@cpan.orgE + +Steffen Mueller Esmueller@cpan.orgE + +=head1 SEE ALSO + +L, L + +=head1 COPYRIGHT + +Copyright 2002 - 2009 Adam Kennedy. + +Class::Inspector::Functions copyright 2008 - 2009 Steffen Mueller. + +This program is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +The full text of the license can be found in the +LICENSE file included with this module. + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/README.txt b/ehcp/fixes/policyd/awitpt/CPAN/README.txt new file mode 100644 index 0000000..420b028 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/README.txt @@ -0,0 +1,16 @@ +THESE FILES REMOVED from Class-Inspector-1.25: +inc/ +MANIFEST +t/ +META.yml +xt/ +Makefile.PL + + +THESE FILES REMOVED from SOAP-Lite-0.712: +t/ +examples/ +bin/ +META.yml +MANIFEST +Makefile.PL diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/Changes b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/Changes new file mode 100644 index 0000000..21c9c49 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/Changes @@ -0,0 +1,773 @@ +# +# Revision history for Perl extension SOAP::Lite. +# +# $Id: Changes 374 2010-05-14 08:12:25Z kutterma $ + +The contents of this file provides a change history for the SOAP::Lite +Perl module. New features are designated with a '+' and bug fixes with +a '!'. +Numbers in square brackets are sourceforge tracker IDs from +https://sourceforge.net/tracker/?group_id=66000&atid=513017 + +Numbers with # are CPANRT tracker IDs from +http://rt.cpan.org/Public/Dist/Display.html?Name=SOAP-Lite + +----------------------------------------------------------------------- +THIS RELEASE +----------------------------------------------------------------------- +0.712 + ! #57409 SOAP::Lite installation problem + ! #52015 defined(%hash) deprecated in Perl 5.11 + ! #39546 use of version.pm + ! #52637 error sending a request in perl 5.10.0 containing utf-8 data using the string data type + ! #55962 Spelling errors +0.712 + SOAP::Transport::JABBER, SOAP::Transport::MQ and SOAP::Tranport::FTP + are now in their own distributions. + ! [2790747] Bugtracker specification in META.yml missing + ! #45997: Inconsistency in SOAP::Serializer documentation + ! #55618: HTTP_TRANSFER_ENCODING can be undefined in SOAP/Transpo + ! [2946245] / #54106 Only last Cookie Set + ! #50178: Win32 isuue with IO::SessionData and IO::SessionSet + ! #41527: SOAP::Lite 0.69 with Apache2 HTTP Server module and mod_perl 2 + returns 500 Internal +0.710.10 + ! #49981: UDDI::Lite version not parsable by cpanplus (again) +0.710.09 + ! #46444: use SOAP::Lite::Deserializer::XMLSchemaSOAP1_2 missing + ! #37151: Strawberry perl 5.10 - Tests fail and then later hang + ! #49981: UDDI::Lite version not parsable by cpanplus + ! #49011: Fails to install under strawberry perl + ! [2825166] In Constant DEFAULT_HTTP_CONTENT_TYPE + ! [2832939] chunked client requests are returned 411(Length Required) + ! [2860559] serious utf8 bug + ! #44568 Tracing unavailable when SOAP::Lite is used as a server + ! #44195 submitting patches / mention Nginx transport module in documentation + ! [2777361] SOAP 1.2 Content-Type rejected + ! #41937 ([patch] enable more tests) + ! #39101: Apache2::Const::HTTP_BAD_REQUEST not defined + ! #39672: serialization and autotype 'off' + ! #41348: t/SOAP/Transport/HTTP/CGI.t failing on 5.6.x + ! #20569: XMLRPC::Lite "wrong element 'nil'" exception on '' + + require Task::Weaken + + better META.yml generated (Alexandr Ciornii) + +0.710.08 - Jul 13 2008 + ! [ 2015071 ] HTTP header is no more accessible + The HTTP header can be pre-filled again. Now, the HTTP header is cloned + from a (possibly user defined) header for every request + ! #37358: Test Failure in Strawberry perl - IO::SessionData + ! #37359: Test Failure in Strawberry perl - IO::SessionSet + ! [ 2005296 ] CPANTS says META.yml broken + ! [ 2005288 ] CPANTS: has_humanreadable_license not ok + ! #37040: Memory leak when calling WS using wsdl + SOAP::Transport::HTTP->new() was leaking two scalars per call +0.710.07 + ! [ 1963995 ] > not deserialized in result + ! [ 1833218 ] < and > not deserialized in faultstring/detail + ! [ 1959329 ] Incorrect Content-Type while sending requests with no parts + ! [ 1945385 ] Incorrect starting part detection for Multipart/Related +0.710.06 + ! #36477 SOAP::Lite Envelope not stripped down for XMLRPC + ! #36455 XMLRPC::Transport::HTTP::CGI generates extra params +0.710.05 + ! got version number right, finally. Thanks to Graham Barr, + Andreas J. Koenig and Matt S Trout (in alphabetical order) for support +0.071.04 + ! updated version number and fixed declaring version, so that perl 5.6.2 + can parse it, too + ! fixed memory leaks with XMLRPC::Lite +v0.71.03 + ! #35041: SOAP::Lite Passes Decoded Strings to LWP + ! #35133: Version Unparsable by ExtUtils::MakeMaker + ! #33973: KeepAlive fails to function + ! #33773: redefined warnings + ! #34514: Subclasses of XMLRPC::Serializer misbehave because of a "ref" call in SOAP::Lite + (actually fixed in 0.71.01, but I forgot to add it to Changes) +0.71.02 + ! [1942233] Memory leak in 0.69 && 0.71 +0.71.01 + ! #34515: Printing UTF-8 through SOAP::Transport::HTTP throws a warning + ! Version numbers updated + ! [1904955] Subclassing XMLRPC::Serializer broken +0.71 Feb 2008 + - bumped up version. Just curious about commit e-mail. +0.70_08 Feb 25 2008 + - bumped up version - accidentally uploaded a ppm to CPAN +0.70_07 Feb 25 2008 + + Added additional callbacks to XML::Parser::Lite and made it work under + (at least) perl5.6.2, 5.8.7, 5.8.8 and 5.10. + Thanks to Adam Leggett. + ! Fixes failing test on 5.10. The mechanism for determining whether + a class is loaded in SOAP::Server has been changed to the following: + Assume loaded if + - the class is main + - the class implements the required method + - the corresponding module (file) exists in %INC + This is still error prone - if you know a better algorithm, please help me + out. + +0.70_06 Feb 16 2008 + ! Fixes failing test without FCGI installed + +0.70_05 Feb 13 2008 + ! Fixes #32971 Undefined subroutine &Apache::Constant::BAD_REQUEST called + ! Fixes [ 1867264 ] [PATCH] handle empty complexTypes correctly + ! Fixes #32810: [PATCH] handle empty complexTypes correctly (duplicate) + ! Fixes [ 1864481 ] XML::Parser::Lite documentation is incomplete + + Fixes [ 747302 ] Make tainting work with XML::Parser::Lite + + Fixes [ 1864480 ] Make XML::Parser::Lite's private subs private + ! Fixes [ uncategorized ] bad XML::Parser::Lite behaviour under perl 5.8 + +0.70_04 Jan 02 2008 + ! Fixes #32008: Failed t/03-server.t tests 2-5 under Perl 5.10 on Mac OS X 10.3.9 + ! Fixes [ 1855575 ] "P" autotyped as xsd:duration + ! Fixes [ 1842314 ] Expect: 100-Continue does not work with Apache::SOAP + ! Fixes #13140 unable to use local file as WSDL service description file + Acually there is no bug, but just a missing comment in the examples... + +0.70_03 Nov 18 2007 + ! Fixes [ 1816906 ] 7/06_modules.t fails with Apache 1.27 + ! Fixes [ 1414914 ] longs are serialized into xsd:int by default +- ! Fixes [ 1833803 ] int numbers serialized as long + ! Fixes #21113: sending xml files using SOAP::Transport::HTTP::CGI + (actually trapped a documentation error) + ! Fixes #3677: Line > 1000 characters breaks perl parser + ! Fixes #11797: SOAP::Transport::HTTP::CGI returns HTTP response headers terminated by "\n" instead of "\r\n" + ! Fixed #24211: strings with leading zero mistreated as int + ! Fixed #25668: cannot build SOAP::Lite with mod_perl 1.29 + ! Fixed #16897: SOAP::Lite 0.66 fails with UNIVERSAL::use + ! Fixed #30741: SOAP::Transport::HTTP::Apache + +0.70_02 Nov 08 2007 + ! Fixed [ 1828412 ] SOAP::Lite serializes faults with wrong element order, + thanks to Tom Fischer. + ! Fixed [ 1073360 ] Failure to read() long requests under mod_perl (fixed + for mod_perl before thanks to JT Justman, now fixed for CGI, too). + ! Fixed #30339: envelope subroutine() in XMLRPC/Lite.pm incorrectly + requires method parameter for a response envelope + ! Fixed #26408: SOAP::Transport::HTTP needs to call extract_cookies when + dealing with a cookie jar + ! Fixed #22730 test failure on bleedperl + ! Fixed #30271 Don't give strings with utf8 flag set to + MIME::Base64::encode_base64(). + ! Fixed [ 1816907 ] t/01_core.t fails on 5.6.x + ! Fixed #24810 missing prerequisite LWP::UserAgent + +0.70_01 Oct 18 2007 + + + Added LOOPBACK test transport backend. + + Added more core tests + ! Fixed #14052: 'use base' pragma no longer works for SOAP::Lite + ! Fixed #27032: Some debugging-aid patches + ! Fixed #22732: Documentation error for use_prefix() + ! Fixed [ 1044270 ] Suppress type for array when autotyping off + ! Fixed [ 1665916 ] encode_scalar needs "no strict 'refs'"? + ! Fixed [ 1481017 ] Typo on CPAN's documentation + ! Fixed [ 1750846 ] Error with ENV{EXPECT} + ! Fixed [ 887015 ] Memory Leak + ! Fixed [ 1700326 ] encode_data called incorrectly in envelope + ! Fixed [ 1612405 ] Incorrect deserialization of arrays/vectors + ! Fixed [ 1204279 ] Boolean serialization error and added test + ! Fixed [ 1569418 ] anyURI Serialization problem + +0.68 July 6 2006 + + ! Patched support for mod_perl Apache2 (thanks to JT Justman) + ! Fixed bug where SOAP::SOM objects were not properly detected, + serialized and returned (thanks chris at prather dot o r g) + ! Fixed bug with default_ns and ns functions so that they + serialized XML properly. + + Started to add experimental DIME support - possible impacts to MIME + support as well + +0.65-beta7 May 12 2005 + + + Added default_ns and ns to replace the confusing use of uri() and + use_prefex() + +0.65-beta6 June 3 2005 + + ! Fixed bug resulting in XMLRPC requests to be serialized using the + doc/literal serializer if serializing arrays + +0.65-beta5 May 6 2005 + + ! Fixed critical bug which prevented all XMLRPC servers from working + +0.65-beta4 Apr 3 2005 + + ! Fixed bug 1160881 - HTTP headers are now terminated by \r\n for + compatibility with .NET and compliance with HTTP spec. + ! Fixed 1158666 - stubmaker.pl no longer call deprecated subroutine + + stubmaker.pl got a lot of enhancements - now has help and version + output, run time options, etc. See 'man stubmaker.pl' for more. + + Classes generated by stub_maker.pl now have a special subroutine + called 'want_som.' When set to 1, the stub class will return a + SOAP::SOM object for every request. + ! Fixed bug 1149427 - now capable of returning SOAP::SOM objects + from generated stub classes. + +0.65-beta3 Mon Oct 25 2004 + + + SOAP::Lite will only warn you once when you call a doc/literal + service + + Added SOAP::Schema->cache_dir() and SOAP::Schema->cache_ttl(), + which control how code stubs generated from WSDLs are cached to + prevent constant reparsing of WSDL files. + ! Tested SOAP::Lite against Google, Salesforce, and FedEx. So far, + clients can successfully call these service providers (at least + some of their operations) - testing does not provide 100% coverage + of their APIs. + +0.65-beta2.1 Mon Oct 25 2004 + + + Fixed bug in unit tests in which MIME::Tools was not properly detected + resulting in failed unit tests for some users. + + Fixed some documentation issues (speling, etc). + +0.65-beta2 Mon Oct 25 2004 + ** WARNING ** substantial changes have been made to SOAP::Lite in + this release in regards to how it manages attachments. The changes + may introduce instabilities into your software that relies on this + functionality. Please test your software with 0.65 prior to moving it + to a production environment. + + + Added ReleaseNotes.txt + + Added section REPORTING BUGS to pod comments + + Deprecated SOAP::Lite->schema removed + + Deprecated SOAP::Lite->on_debug removed + + Deprecated SOAP::Schema->schema in favor of SOAP::Schema->schema_url + + Added SOAP::Schema->useragent - which returns the LWP::UserAgent instance + that will be used when accessing WSDLs via the SOAP::Lite->service call. + This is helpful when access to a WSDL requires authentication, etc. + + Made changes that allow messages to be constructed using a NULL body: + + + Added constant OBJS_BY_REF_KEEPALIVE which defaults to 600 - this is + so that services can configure how long to cache objects marked as persistent + using SOAP::Server::Object->objects_by_reference() + + Added the ability for a user to modify the UserAgent class used + by SOAP::Transport::HTTP::Client, updated Transport.pm's documentation + to reflect this. Added $SOAP::Transport::HTTP::Client::USERAGENT_CLASS + variable as a means of setting this. + + Added initial DIME support + + SOAP Packager package/unpackage now take in a context variable as + input because DIME needs to know what version of SOAP you are using. + + Refactored and rewrote README + + Renamed SOAP::Schema->stub() to SOAP::Schema->generate_stub. This populates + a private variable called C with the autogenerate Perl code. + + Added SOAP::Schema->stub() which returns the autogenerated Perl code used + internally by SOAP::Lite. This can be helpful for debugging SOAP::Lite's + utilization of WSDL, as well as helpful to developers working on S::L's + WSDL support. + +0.65-beta1 Mon Oct 18 15:55:00 2004 + + + Made SOAP::Serializer->readable actually produce readable XML! + ! Fixed bug 747312 - Made XML Schema 2001 the default schema + + Changed typelookup of base64 to base64Binary to conform with 2001 + schema + + Added support for [almost] all XML Schema 2001 built-in datatypes + + Added register_ns subroutine to SOAP::Serializer + + Added find_prefix subroutine to SOAP::Serializer + + Added use_prefix subroutine to SOAP::Serializer + + Added a necessary set of initial subroutinues to support wsdl2perl + project + + Added format_datetime to SOAP::Utils + + Documented SOAP::SOM->parts + + Added SOAP::SOM->is_multipart + + Properly escaped characters to facilitate emacs syntax highlighting + + Ran podchecker to validate all POD comments + ! Fixed bug 749636 - changed a croak to a warn to enable socket + timeouts in SOAP::Transport::TCP::Server + + Added support for UDDI 2/3 + + Majorly revamped product documentation thanks to the kind + contribution made by O'Reilly. Appendix B from "Programming Web + Services with Perl" has been completely integrated. + + To better segment SOAP::Lite documentation, many modules have been + added that contain documentation only. For those who loved the old + documentation, it can be found in lib/OldDocs/SOAP/*.pm and + lib/OldDocs/SOAP/Transport/*.pm + ! Fix a bug in which doclit style arrays were not being deserialized + properly. IOW, Repeated elements were not made into an array, only + the last occurring value was recorded. + + Added the ability for a SOAP Client to gain direct access to the + HTTP::Request and HTTP::Response objects. + + Changed default envelope namespace prefix from SOAP-ENV to soap + + Changed default encoding namespace prefix from SOAP-ENC to soapenc + + Reachitected MIME support to decouple MIME layer from transport + layer. This only impacts the HTTP layer since that is the only + transport in SOAP::Lite that supports attachments. + + Creation of SOAP::Packager - decoupled in an extensible way the + packaging of parts (a.k.a. attachments). This is used for encoding + and decoding. This enables a more seemless addition of DIME + support. Changes were made throughout SOAP::Lite to accomodate this + functionality. + - a call "context" was added to SOAP::Server and SOAP::Deserializer + so that those classes could have access to the global + SOAP::Packager instance + - deprecated many function calls and packages having to do with + attachment support + - fixed several of the SOAP::*::new() methods so that they don't + inadvertantly reinitialize themselves and destroy precious context + information in the process + + Gave developers direct access to MIME::Parser object so that they + can optimize its use. See the following URL to optimize it for + memory consumption, parsing speed, disk utilization, etc: + http://search.cpan.org/dist/MIME-tools/lib/MIME/Parser.pm#OPTIMIZING_YOUR_PARSER + + Added a context variable to SOAP::Serializer and SOAP::Deserializer + so that they have mechanisms for getting instance data from the + calling context. The value of context is either SOAP::Lite or + SOAP::Server depending upon the role the service is playing in the + transaction. Contexts are initialized when a call is made, and + destroyed when a call is completed. + + Greater than character '>' has been added to list of characters + that will be automatically escaped. This is not a requirement by + the XML spec, it is a MAY, but I am doing it after seeing a minority + of people report a compatibility problem. + - Removed deprecated methods: SOAP::Serializer::namespace and + encodingspace + + Added SOAP::Serializer::encodingStyle method which allows users to + set the URI for default encodingStyle. + + Added initial support for literal encoding style. EXPERIMENTAL + + Added some true constant values representing various SOAP namespace + URIs + + Added SOAP::Constants::SUPPORTED_ENCODING_STYLES for better tracking + of the set of encoding styles that the toolkit can [de]serialize + ! Fixed bug 840172 - "Makefile.PL --noprompt flag broken," now fixed + + Updated SOAP 1.2 URIs to the latest (TODO - maintain support for + older ones) + + Added HTTPS support for HTTP::Server Daemon class - thanks to Nils + Sowen for this contribution + +----------------------------------------------------------------------- +PREVIOUS RELEASES +----------------------------------------------------------------------- + +0.60 Mon Aug 18 12:10:27 2003 + + Merged SOAP::MIME into SOAP::Lite's core + + Cleaned up the UI for the Makefile.PL script - it now detects and + indicated whether certain Perl modules have been detected. The + table displaying installation preferences has been substantially + cleaned up, the code is much more modular and relies on a simple + data structure representing potential module dependencies. + + Made the Makefile.PL script iterative - meaning, the user will be + continually be presented with their preferences until they + explicity choose to accept them and continue (bug 747295) + + Differentiate between xsd:int and xsd:long to fix interoperability + bug with Java Web services + ! Fixed MIME interoperability bug with Apache Axis - Axis' MIME + parser requires that MIME boundaries are terminiated by a CRLF + character where the MIME::Tools package only outputs a CR + character. A patch was integrated into the MIME::Tools module + which allows SOAP::Lite to specify its own MIME Boundary delimiter + ! SOAP Faultcodes are now properly typed a xsd:QName, whereas + before they were xsd:string - to be honest, they are left untyped + so that toolkits can serialize them according to the schema + (bug 747283) + ! Fixed documentation error around turning on a trace for multiple + "channels" (bug 747310) + ! Disabled SOAPStruct (bug 747316) + ! Fixed XML::Parser::Expat vulnerability (bug 747265) + ! Added item in TROUBLESHOOTING section explaining that there is a + bug in Perl 5.8 that prevents +autodispatch from working properly. + The workaround is to use dispatch_from instead (bug 747290) + ! Fixed warning when autodispatched call has no parameters + (bug 747286) + ! Fixed warning when empty SOAPAction specified (bug 747278) + ! Turned off HTTP keep alive patch by default, however users can now + turn on the patch by setting the constant PATCH_HTTP_KEEPALIVE to + 1 (bug 747281) + ! Removed dependency on the URI module for non-HTTP transports + (bug 747306) + +0.55 Mon Apr 15 22:20:39 2002 + ! fixed security vulnerability with fully qualified method names + (thanks to Randal Schwartz, Ilya Martynov and many others) + ! fixed problem with TCP transport and SSL (thanks to Chris Hurd) + ! fixed TCP transport to specify correct length with utf8 strings + (thanks to Robin Fuller) + ! fixed incorrect encoding when parameters list includes undefined + values (thanks to Chris Radcliff) + ! updated 'xmlsoap' prefix (thanks to Pierre Denis) + ! updated MIME parser to accept messages that start with 'From' + (thanks to Chris Davies) + + added check for TCP transport on Mac (thanks to Robin Fuller) + + added check for shutdown() method on AIX (thanks to Jos Clijmans) + + added check for blocking() method in TCP transport + (thanks to Jos Clijmans) + + optimized parsing strings with entity encoding (thanks to Mathieu + Longtin) + + added check for entity size for CGI transport + ($SOAP::Constant::MAX_CONTENT_SIZE) (thanks to J. Klunder) + + added example (google.pl) + + updated tests and examples with new endpoints + +0.52 Mon Oct 18 21:20:19 2001 + ! fixed content_type returned under mod_perl with 500 SERVER ERROR + status (thanks to Geoffrey Young and Scott Hutton) + ! fixed problem with multiple bindings in WSDL file generated by + MS SOAP toolkit + ! fixed handling of boolean type in 1999 Schema and hexBinary type + in 2001 Schema + ! fixed warning and problem with WOULDBLOCK state in IO::SessionData + (thanks to Marty Pauley) + ! fixed miscalculation in position within sparse arrays + ! fixed problem with URI when methods of SOAP::Data are called in + certain order (thanks to Taras Shkvarchuk) + ! fixed CRLF problem in CGI module on Windows platform under IIS + (thanks to Werner Ackerl) + ! fixed hex and hexBinary datatypes generation + ! fixed content-length calculation when payload has multibyte utf8 + characters + ! fixed problem with XMLRPC and nested packages with more than two + levels (thanks to Leonid Gernovski) + ! fixed (again) memory leak in SOAP::Parser (thanks to Craig + Johnston) + + updated Jabber interface for new format of 'use Net::Jabber ...' + does not work with Net::Jabber 1.022 and later + + updated XMLRPC::Lite to not detect value as float for 'NaN' and + 'INF' strings + + updated XMLRPC::Lite to return 200OK on errors + + updated XMLRPC do not specify charset in content-type + + updated Makefile.PL to allow configuration from command line + (thanks to Dana Powers) + + updated publishing API tests for UDDI server to call a new server + (GLUE) + + changed close() to shutdown() in Daemon transport (thanks to Sean + Meisner) + + added support for HTTP_proxy and HTTP_proxy_* in WSDL access + (thanks to Stephen Shortland) + + added XMLRPC support in COM interface. XMLRPC client and server + can be created using COM interface + + added DO_NOT_PROCESS_XML_IN_MIME option for MIME parts with + text/xml content type + + modified deserialization algorithm that allows to properly + deserialize SOAP1.2 messages when default is set to SOAP1.1 and + vice versa + + added fault in XMLRPC::Lite for incorrect datatypes specified by + user (thanks to Paul Prescod) + + added option to not generate XML declaration + + added encoding for ']]>' (thanks to Matt Sergeant and James + Amrhein) + + added '\r' => ' ' conversion in strings + + added complaint on incorrect simple types + + added byNameOrOrder and byName functions for + SOAP::Server::Parameters (thanks to Matt Stum) + + added handling relative locations in in WSDL + + added stringification of SOAP::Fault (thanks to Tim Jenness) + + added documentation for SSL certificate authentication + + added more examples (terraserver.pl, joke.pl, weblog.pl) + + added more tests + +0.51 Tue Jul 18 15:15:14 2001 + ! fixed memory leak in SOAP::Parser (thanks to Ryan Adams and Michael + Brown) + ! fixed skipping undef elements in arrays under Perl 5.005 (thanks to + Arne Georg Gleditsch) + ! fixed warning from undefined type in out parameters (thanks to + Jrg Ziefle) + ! fixed autovivification warnings on 5.7.x (thanks to Igor Pechersky) + ! fixed tests on 64bit systems (thanks to Gurusamy Sarathy) + ! fixed installation problem with long filenames on MacOS (thanks to + Alex Harper) + ! fixed POP3 server (thanks to Kevin Hutchinson) + ! number of fixes in XMLRPC::Lite + o fixed requirement (thanks to Matthew Krenzer and Dana + Powers) + o fixed empty slot skipping (thanks to Jon Udell) + o fixed serialization of "0"/""/undef values (thanks to Michael E. + Gage) + o fixed autodispatch (thanks to Craig Kelley) + + added support for SOAP 1.2 (spec is still in draft, implementation + is subject to change) + + added extended array support (only in deserializer) + sparse arrays + multidimensional arrays (deserialized as array of arrays) + partially transmitted arrays + + modified XML::Parser::Lite to work on Perl 5.005 (thanks to John + Gotts) + fixed handling empty attributes as undef + fixed minors (thanks to Duncan Cameron) + + modified deserializer to work with different schemas (1999/2001) + + added JABBER transport + + added MQ transport + + added mod_xmlrpc transport (Apache::XMLRPC::Lite) + + added TCP over SSL transport + + added non-blocking TCP multiserver + + included FastCGI transport (thanks to Marko Asplund) + + added support for APOP authentication in POP3 transport + + added Encoding parameter for MAILTO transport (to choose + base64/binary) + + added 'autoresult' option (thanks to Mathieu Longtin) + + added support for import directive in WSDL + + added support for short (tModel) WSDL service descriptions + + added support for multiple services/ports and allowed non-SOAP + bindings in WSDL + + added full search example UDDI->WSDL->SOAP (fullsearch.pl) + + added charset in response message for HTTP transport + + modified SOAPsh/XMLRPCsh to return all parameters (thanks to Chris + Davies) + + modified dispatch for XMLRPC server to work exactly as for SOAP + server examples included in examples/XMLRPC directory + + added example with Inline::C module (inline.daemon). + Dispatch to C, C++, assembler, Java, Python and Tcl :). + Thanks to Brian Ingerson for his Inline module. + + all transport are available for both SOAP::Lite and XMLRPC::Lite: + HTTP (daemon, CGI, mod_perl), SMTP/POP3, TCP, IO, JABBER, MQ + + updated INCOMPATIBILITY section in README file + + tested on Perl 5.00503, 5.6.0, 5.6.1, 5.7.1 and 5.7.2 + + added SOAP Cookbook (http://cookbook.soaplite.com/) + + added server scripts for MQ and JABBER transports + + added roundtrip example for JABBER transport + + updated documentation and added new examples + + added more tests (more than 700 for now) + +0.50 Wed Apr 18 11:45:14 2001 + ! fixed tests on Windows platform + ! fixed authInfo in UDDI publishing interface + ! fixed mod_soap (Apache::SOAP) on Perl 5.005/5.004 + ! fixed namespace prefix on arrays of arrays + ! modified Content-encoding from 'compress' to 'deflate' + + added XML::Parser::Lite, regexp-based XML parser + used automatically when XML::Parser is not available + + added examples of custom serialization and deserialization + (XML::DOM) + + added XMLRPC::Lite (XMLRPC client and server interface) + all transports and features of SOAP::Lite should be available + + added XMLRPC interactive shell (XMLRPCsh.pl) + + added dispatching based on URI and SOAPAction (dispatch_with) + + added dispatching to object (in addition to class/method) + + added dispatch from specific class(es) (dispatch_from) + + added limited support for mustUnderstand and actor attributes + + added SOAP::Fault class for customization of returning Fault + message + + added charset in HTTP header for requests + + added check for namespace and types resolving + + added namespaces declarations from WSDL interface + + added INCOMPATIBILITY section in README file + + added live tests/examples for UDDI publishing interface + + added live tests/examples for basic authentication + + added XMLRPC server code that validates with Userland's validator + + added more examples, tests and documentation + +0.47 Wed Feb 21 17:11:12 2001 + ! fixed lack of parameter in MAILTO transport + ! fixed minimal version of COM interface to not require absent + modules + + added compression for HTTP transport + + added mod_soap interface, add SOAP server functionality + with couple of lines in .htaccess or httpd.conf file + + added proper serialization of circular multiple references + + significantly redesigned handling types and URIs + ! incompatibilities with ApacheSOAP clients may occur + + added handling PIPE and INT signals in Daemon server implementation + + changed return from autodispatched calls: + result() in scalar context and paramsall() in list context + + redesigned tests and split on core and optional for smooth CPAN + installation + + added examples for cookie-based authorization + + added examples in C# and PerlScript for COM interface + + added more documentation for COM interface + + updated documentation and added new examples + +0.46 Wed Jan 31 16:30:24 2001 + ! fixed SOAP:: prefix with SOAP::Lite objects + ! fixed documentation installation on Unix + ! changed interface of schema() method. Use service() instead + + added COM interface + single dll (standalone or minimal version, downloadable separately) + doesn't require ROPE.dll, MSXML.dll or listener.asp + tested on Windows 98/2K, and should work on Windows 9x/Me/NT/2K + ASP and daemon server implementations + examples in VB/VBS, Excel/VBA, JavaScript, Perl and ASP + + added parsing multipart/form-data + SOAP server can accept SOAP requests directly from web form + examples are provided (examples/forms/*) + + added Map type for hash encoding. Tested with ApacheSOAP + + added function that maps classes to URI (maptype) + + allowed multiple ports in WSDL + + tested object interoperability with Apache SOAP + + optimized internal functions + +0.45 Tue Jan 16 00:38:04 2001 + ! fixed interoperability problem with incorrect Array prefix for + Apache SOAP + + added interoperability tests for Apache SOAP + + added interoperability tests with MS SOAP, 4s4c and Lucin + implementations + + added attachment parsing (singlepart/multipart MIME) + Content-ID and Content-Location are supported + text/xml fragments are supported and parsed + all implementations support MIME encoded messages + + added IO server implementation (for pipes, mail handlers, FTP and + file processing) + + added FTP client implementation + + added global settings, shareable between objects + + allowed empty URI and non-prefixed method (documentation included) + + added tests for xml, xml with headers, single and multipart MIME + + updated documentation and added examples + + more that 300 tests in test suite + +0.44 Tue Dec 12 23:52:12 2000 + ! fixed mod_perl server to return '500 Server Error' in case of error + ! fixed CGI server to work under PerlIS and PerlEx (thanks to Murray + Nesbitt) + + tested publishing API for UDDI::Lite, examples provided + (thanks to Petr Janata for access to UDDI server and provided help) + + added bi-directional TCP client/server, examples and tests provided + + enabled de/serializer overloading on server side (in addition to + client) + + added optimization for objects-by-reference + + added ForkingDaemon server implementation (thanks to Peter + Fraenkel) + + added SOAP::Custom::XML for XML processing, examples and tests + provided + + added SOAP::Test as simple test framework + + added documentation for UDDI publishing API + + redesigned examples and tests (~240 tests for now) + +0.43 Tue Nov 28 01:47:02 2000 + ! fixed bug in UDDI interface that made UDDI client almost useless + ! fixed Makefile.PL + ! tests confirmed that memory leak is gone + + changed syntax for UDDI client to more flexible/convenient + + added limited support for WSDL schemas. Dynamic and stub access + supported + + added script for stub generation (stubmaker.pl) + + optimized code on server side + + object interface for SOAP, UDDI and schemas are supported + consistently + + allowed manipulation of method's attributes and namespaces + + added attributes encoding ('&', '<' and '"' are encoded) + + updated documentation + (thanks to Robert Barta who basically did this work) + + added more examples and tests (154 for now) + +0.42 Tue Nov 14 23:14:18 2000 + + added UDDI client (UDDI::Lite) with documentation + + added M-POST functionality in HTTP::Client + + added redirect (3??) functionality in HTTP::Client + + added session cache for M-POSTs and redirects + + added conversion of all objects to o-b-r in parameters + + changed passing envelope into method + + allowed \x0d and \x0a in strings (will not do base64 encode) + + added die with object that allows to specify complex Fault detail + + optimized XML encoding + + allowed function call with autodispatch + + improved syntax for 'use SOAP::Lite' + + added soap.tcp example for TCP server implementation + + added tests with Microsoft implementation + + added documentation and tests (145 for now) + +0.41 Tue Oct 31 01:24:51 2000 + ! fixed memory leak on server side + ! fixed die on absence of HTTP::* modules on server side + ! fixed working with keep-alive connections (added test with + Xmethods) + + changed autotyping from double to float + + added support for proxy authorization (thanks to Murray Nesbitt) + + added TCP client/server implementation + + added benchmark for all implementations except smtp/pop3 + + added SOAP::Trace for detail logging on client/server side + + added examples/tests for Apache::Registry implementations + + added more examples, documentation and tests (127 for now) + +0.40 Sun Oct 15 18:20:55 2000 + ! fixed die in mailto: protocol if you don't have URI::URL installed + ! fixed misbehavior on Mac platform (thanks to Carl K. Cunningham) + + added default namespace processing [xmlns] (thanks to Petr Janata) + + added objects-by-reference, simple garbage collection and + activation + + added full access to envelope on server side + + added versionMismatch reaction + + added local: protocol for local binding without any transport + + added examples for objects-by-reference: persistent/session + iterators and chat (40 lines on server and 25 lines on client side) + +0.39 Sun Oct 8 22:55:20 2000 + ! fixed incompatibility with Perl 5.005 + + added interactive Makefile.PL for CPAN installation + +0.38 Thu Oct 5 22:06:20 2000 + ! fixed namespace for base64 encoding + ! fixed security problem on server side, upgrade is highly + recommended + + added HTTPS/SSL support + + added SMTP client implementation + + added POP3 server implementation + + added support for Basic/Digest server authentication + + added support for header(s) on client/server side with SOAP::Header + + added Array and SOAPStruct for interoperability with ApacheSOAP + + added generic class for server support SOAP::Server + + added Actor attribute + + added more examples, documentation and tests (88 for now) + +0.36 Sun Sep 24 20:12:10 2000 + ! fixed output parameters autobinding + + added mod_perl server implementation + + added recognizing all simple types mentioned in specification + + added support for 'hex' type + + added more documentation (twice as much as before) + + added more tests (74 for now) + +0.35 Sun Sep 17 23:57:10 2000 + ! fixed minors (Response instead of Respond, server will map client's + URI) + + cleaned HTTP::Server internals (will go to SOAP::Server in the + future) + + test.pl won't abort on transport errors. Failed test will be + skipped + + added daemon server implementation + + added cgi/daemon server implementation examples + + added deserialization into blessed reference + + added dynamic/static class/method binding + + added output parameters matching based on signature (name/type) + + added real object transferring back and forth (see example of + Chatbot::Eliza, fixed for CODE references) + + added more interoperability with on_action on client and server + side + + added new events (on_action, on_fault, on_nonserialized) + + added global class settings with 'use SOAP::Lite ...' + + added code for returning application errors on server + + added autodispatch + + added SOAP prefix to method calls + + added more documentation + + added more tests (54 for now) + + added more examples (Chatbot::Eliza, My::PingPong) + +0.32 Sun Sep 10 23:27:10 2000 + ! fixed warnings with -w + ! fixed blessed reference serialization. Assigned type has top + priority + + added working with current node in SOAP::SOM + + SOAP::SOM::valueof returns nodeset + + SOAP::SOM::match returns boolean in boolean context + + added raw xml accepting and output + + added UserAgent parameters to SOAP::Transport (understands timeout) + + added better diagnostic on transport errors in test.pl + + added 'method', 'fault', 'freeform' types of Envelope + + added server implementation + + added CGI interface to server implementation + + added My::Examples.pm as example of loaded class for SOAP server + + added more tests (47 for now) + +0.31 Wed Sep 6 00:36:15 2000 + + added expressions to SOAP::SOM->match method + + added deserialization of circular references + + added tests for deserialization + + added documentation + +0.3 Mon Sep 4 00:59:04 2000 + + first public beta version + + added live SOAP calls + + added test suite (25 tests) + + added documentation + + added interactive shell (SOAPsh.pl) + +0.2 Mon Aug 24 19:34:24 2000 + - next stable version; works with public test servers + +0.1 Mon Aug 11 23:12:02 2000 + - first version; serialization part only + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/HACKING b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/HACKING new file mode 100644 index 0000000..a7c9f6e --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/HACKING @@ -0,0 +1,135 @@ +HACKING +======= + +Development of SOAP::Lite takes place on sourceforge.net. + +There's a Subversion repository available at + + https://soaplite.svn.sourceforge.net/svnroot/soaplite/ + +It's recommended to check out the cuurent maintenance branch from + + https://soaplite.svn.sourceforge.net/svnroot/soaplite/branches/0.71 + +Engagement in the further development of this module is highly encouraged - +many people have already contributed, and many more probably will. + +MAILING PATCHES +=============== + +Preferred patches are "unified" diffs ignoring whitespaces created by + +diff -uw OLD NEW + +Please don't create patches where the original file has been renamed (like +appending .old) - they can't be applied without editing. + + +SOAP::Lite CODING GUIDELINES +============================ + +SOAP::Lite's coding style in principle follows Perl Best Practices by +Damian Conway, but allows deviances for speed and backward compatibility +reasons. + +The following guidelines apply: + +- warnings + * "use warnings" is not used. The warnings pragma first appeared in + perl 5.6. As SOAP::Lite works with perls as old as 5.005_04, you must not + use the warnings pragma. Use "local $^W" to say "no warnings" instead. + +- Symbol table operations + * SOAP::Lite heavily relies on symbol table operations. While this is + nothing bad, you should always try other variants like subclassing before. + Use symbol table operations as a last resort, and preferably consolidate + similar operations into utility functions. + +- Autoloading + * SOAP::Lite heavily relies on AUTOLOAD, often together with symbol table + operations. While this is nothing generally bad, it can lead to subtle + errors, for example when switching the underlying protocol handler of + a transport backend. Methods already autoloaded (and cached via symbol + table) remain, even if there's a equally named method in the new protocol + handler. + It's generally best not to rely on AUTOLOAD and symbol table operations - + subclassing is often more appropriate. + +- testing + * SOAP::Lite has a test coverage of >60%, but aims at 100%. Please write + a test first. + * Use author tests for testing guidelines. Disable author tests for + users - it's time consuming and of no use to have users run author tests. + Author tests are enabled by setting the "TEST_AUTHOR" environment + variable to a true value. + +- Indentation and formatting + * indent with spaces. + * indent 4 characters per level + * use \n (LF) for newlines, not CRLF + * use blank lines to separate paragraphs + * Coding style is similar to K&R (opening brace on last line, closing + brace on new line. No cuddled else) + * No trailing spaces allowed (except to indicate a blank line in a POD + source block) + +- Flow control + * postfix if is allowed for single statements only. Preferably for flow + control only like in: + return $self if ref $self; + * postfix for, while, until are not allowed. + * unless is not allowed at all. Use if not. + * goto is only allowed for jumping into subs. Nothing else. + * redo, next, last etc. are preferred over goto. + +- Strictness + * always use strict. Switch off for the smallest block + possible, but switch off if there's a reason (don't let tools like + perlcritic fool you: no strict qw(refs); is often required. + +- Naming + * variable names are lower case with _ separating words, except when + a XML Schema, SOAP, or WSDL name is name-giving (don't force portType to + become port_type) + * hashes should be named FOO_of, lists FOO_from, references FOO_ref. + * package names are CamelCase, except when a XML, SOAP or WSDL name is + name-giving (don't force 'int' to become 'Int'. However, simpleType + becomes SimpleType). + Protocol names for transport modules are all UPPERCASE, like in + SOAP::Transport::HTTP or in SOAP::Transport::MAILTO. + +- Subroutines + * Subroutines shouldn't be more than around 50 lines long + * @_ should be unpacked. Deviances are allowed for speed reasons. If + you're not unpacking @_ in a sub of say, 5 lines or more, please comment + what you're doing. + * The preferred idiom for unpacking @_ is: + my ($self, @arg_from) = @_; + or + my ($self, %arg_of) = @_; + $_[0] is preferred over shift, except where the rest of the parameter + stack is used en block later. + * Always return. + +- POD and comments + * Comments denoting some people's copyright on some piece of the code + MUST be kept intact. + * Comment extensively. Comments are the maintainer (and core developer's) + documentation - aid them where possible (your're probably doing yourself + a favor by adding extensive comments). + * Comment either in blocks or as hanging side comments (especially when + commenting @_ access). + Example: + + sub baz { + # @_ not unpacked for speed reasons. Read: + # my ($self, $something, %args_of) = @_; + + $_[0]->bar($_[1]); # read as $self->bar($something); + $_[0]->foo($_[2..$#]); # read as $self->foo(%args_of); + return; + } + * POD is located at end of file, preferably after __END__ + * Complete POD coverage is essential. However, if the package in question + is used internally only, it's better to omit the POD completely - too many + PODs to look at confuse the average CPAN user. diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/README b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/README new file mode 100644 index 0000000..1833537 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/README @@ -0,0 +1,13 @@ +To install SOAP::Lite, run the following commands: + + perl Makefile.PL + make + make test + make install + +The test suite requires perl 5.6.0, so you will experience +failing tests under older versions of perl. + +SOAP::Lite itself should work with perls as old as 5.5.4, but +your mileage may vary. + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/ReleaseNotes.txt b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/ReleaseNotes.txt new file mode 100644 index 0000000..4792234 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/ReleaseNotes.txt @@ -0,0 +1,61 @@ +# +# ReleaseNotes.txt +# +# $Id: ReleaseNotes.txt 115 2007-11-08 21:18:25Z kutterma $ + +The following is a compilation of various issues developers should be aware of +when developing Web services using SOAP::Lite. + +LIMITED WSDL SUPPORT - SOAP::Lite is not capable of generating WSDLs +automatically. If you require a WSDL for a service written using SOAP::Lite, +please consider using a tool like XML Spy, or CapeClear's WSDL Editor. + +NO ENTITY DECODING +SOAP::Lite uses XML::Parser::Lite which relies on Unicode support in Perl and +doesn't perform XML ENTITY decoding. + +LIMITED SUPPORT FOR MUSTUNDERSTAND and ACTOR ATTRIBUTES +SOAP::Lite does not currently heed the soap:mustUnderstand XML attribute, or +SOAP actor attributes. + +DOCUMENT-LITERAL SUPPORT +All literal encoding support for SOAP::Lite is marked EXPERIMENTAL, and it is +incomplete. Developers are encouraged to use this capability but should be +fore-warned. +As an alternative, SOAP::WSDL or XML::Compiled::SOAP may be used for +document/literal bindings derived from WSDL definitions. + +CLIENT SIDE WSDL SUPPORT +SOAP::Lites ability to consume a WSDL and generate the necessary message based +on that WSDL is improving, but it does not work with complex types. +As an alternative, SOAP::WSDL or XML::Compiled::SOAP may be used for +document/literal bindings derived from WSDL definitions. + +SERVICE SIDE WSDL SUPPORT +Perl is a loosely typed language making it extraordinarily difficult to generate +a reliable WSDL based upon reflection of somekind. Therefore, no WSDL can be +generated using SOAP::Lite. + +SOAP FAULT NOT GETTING SERIALIZED PROPERLY +A user reported that when a service run under Perl version 5.5003 issues the +die command with a SOAP::Fault as input, that SOAP::Lite does not properly +serialize the Fault object. However, the same code works under 5.6 and above. + +NULL BODIES +SOAP::Lite currently allows users to construct an Envelope using a null body, +e.g. . However, SOAP::Lite services have no way +of processing such a message. + +XML NAMESPACES ABSENT FROM RESPONSES +A user reported that under mod_perl for a series of requests which were using +SOAP 1.1 and 1.2, that some of the responses to incoming messages lacked the +XSD and XSI namespace declarations causing an error with the receiving .NET +client for those response lacking these attributes. + +OBJECTS BY REFERENCE +SOAP::Server->objects_by_reference is marked EXPERIMENTAL + +SOAP CLIENT CRASHES ON WINDOWS 98 WITH BIG MESSAGES +Some users using Windows 98, and an older version of Perl experience a page +fault error in perl58.dll when transmitting/receiving messages over a certain +size. This problem is fixed by upgrading to the latest version of Perl. diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/SOAP.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/SOAP.pm new file mode 100644 index 0000000..98e8d75 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/SOAP.pm @@ -0,0 +1,149 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: SOAP.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package Apache::SOAP; + +use strict; +use vars qw(@ISA $VERSION); +use SOAP::Transport::HTTP; + +@ISA = qw(SOAP::Transport::HTTP::Apache); +our $VERSION = 0.712; + +my $server = __PACKAGE__->new; + +sub server { + return $server; +} + +sub handler { + $server->configure(@_); + $server->SUPER::handler(@_); +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +Apache::SOAP - mod_perl-based SOAP server with minimum configuration + +=head1 SYNOPSIS + +=over 4 + +=item httpd.conf (Location), directory-based access + + + SetHandler perl-script + PerlHandler Apache::SOAP + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + + +=item httpd.conf (Files), file-based access + + + SetHandler perl-script + PerlHandler Apache::SOAP + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + + +=item .htaccess, directory-based access + + SetHandler perl-script + PerlHandler Apache::SOAP + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + +=back + +=head1 DESCRIPTION + +This Apache Perl module provides the ability to add support for SOAP (Simple +Object Access Protocol) protocol with easy configuration (either in .conf or +in .htaccess file). This functionality should give you lightweight option +for hosting SOAP services and greatly simplify configuration aspects. This +module inherites functionality from SOAP::Transport::HTTP::Apache component +of SOAP::Lite module. + +=head1 CONFIGURATION + +The module can be placed in , , , +directives in main server configuration areas or directly in .htaccess file. + +All parameters should be quoted and can be separated with commas or spaces +for lists ("a, b, c") and with 'wide arrows' and commas for hash parameters +("key1 => value1, key2 => value2"). + +All options that you can find in SOAP::Transport::HTTP::Apache component +are available for configuration. Here is the description of most important +ones. + +=over 4 + +=item dispatch_to (LIST) + +Specifies path to directory that contains Perl modules you'd like to give +access to, or just list of modules (for preloaded modules). + + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + +=item options (HASH) + +Specifies list of options for your module, for example threshold for +compression. Future versions will support more options. See +SOAP::Transport::HTTP documentation for other options. + + PerlSetVar options "compress_threshold => 10000" + +=back + +=head1 METHODS/SUBROUTINES + +=head2 server + + my $server = Apache::XMLRPC::Lite->server(); + +Returns the server object. + +Useful if you need to manipulate the server object from your code. + +=head2 handle + +Request handler. Called by apache. + +=head1 DEPENDENCIES + + SOAP::Lite + mod_perl + +=head1 SEE ALSO + + SOAP::Transport::HTTP::Apache for implementation details, + SOAP::Lite for general information, and + F for .htaccess example + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/XMLRPC/Lite.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/XMLRPC/Lite.pm new file mode 100644 index 0000000..c3c06a2 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/Apache/XMLRPC/Lite.pm @@ -0,0 +1,150 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Lite.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package Apache::XMLRPC::Lite; + +use strict; +use vars qw(@ISA $VERSION); +use XMLRPC::Transport::HTTP; + +@ISA = qw(XMLRPC::Transport::HTTP::Apache); + +our $VERSION = 0.712; + +my $server = __PACKAGE__->new; + +sub server { + return $server; +} + +sub handler { + $server->configure(@_); + $server->SUPER::handler(@_); +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +Apache::XMLRPC::Lite - mod_perl-based XML-RPC server with minimum configuration + +=head1 SYNOPSIS + +=over 4 + +=item httpd.conf (Location), directory-based access + + + SetHandler perl-script + PerlHandler Apache::XMLRPC::Lite + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + + +=item httpd.conf (Files), file-based access + + + SetHandler perl-script + PerlHandler Apache::XMLRPC::Lite + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + + +=item .htaccess, directory-based access + + SetHandler perl-script + PerlHandler Apache::XMLRPC::Lite + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + PerlSetVar options "compress_threshold => 10000" + +=back + +=head1 DESCRIPTION + +This Apache Perl module provides the ability to add support for XML-RPC +protocol with easy configuration (either in .conf or in .htaccess file). +This functionality should give you lightweight option +for hosting SOAP services and greatly simplify configuration aspects. This +module inherites functionality from XMLRPC::Transport::HTTP::Apache component +of XMLRPC::Lite module. + +=head1 CONFIGURATION + +The module can be placed in , , , +directives in main server configuration areas or directly in .htaccess file. + +All parameters should be quoted and can be separated with commas or spaces +for lists ("a, b, c") and with 'wide arrows' and commas for hash parameters +("key1 => value1, key2 => value2"). + +All options that you can find in XMLRPC::Transport::HTTP::Apache component +are available for configuration. Here is the description of most important +ones. + +=over 4 + +=item dispatch_to (LIST) + +Specifies path to directory that contains Perl modules you'd like to give +access to, or just list of modules (for preloaded modules). + + PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" + +=item options (HASH) + +Specifies list of options for your module, for example threshold for +compression. Future versions will support more options. See +XMLRPC::Transport::HTTP documentation for other options. + + PerlSetVar options "compress_threshold => 10000" + +=back + +=head1 METHODS/SUBROUTINES + +=head2 server + + my $server = Apache::XMLRPC::Lite->server(); + +Returns the server object. + +Useful if you need to manipulate the server object from your code. + +=head2 handle + +Request handler. Called by apache. + +=head1 DEPENDENCIES + + XMLRPC::Lite + mod_perl + +=head1 SEE ALSO + + XMLRPC::Transport::HTTP::Apache for implementation details, + XMLRPC::Lite for general information, and + F for .htaccess example + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionData.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionData.pm new file mode 100644 index 0000000..de85382 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionData.pm @@ -0,0 +1,230 @@ +# ====================================================================== +# +# Copyright (C) 2000 Lincoln D. Stein +# Slightly modified by Paul Kulchenko to work on multiple platforms +# Formatting changed to match the layout layed out in Perl Best Practices +# (by Damian Conway) by Martin Kutter in 2008 +# +# ====================================================================== + +package IO::SessionData; + +use strict; +use Carp; +use IO::SessionSet; +use vars '$VERSION'; +$VERSION = 1.02; + +use constant BUFSIZE => 3000; + +BEGIN { + my @names = qw(EWOULDBLOCK EAGAIN EINPROGRESS); + my %WOULDBLOCK = + (eval {require Errno} + ? map { + Errno->can($_) + ? (Errno->can($_)->() => 1) + : (), + } @names + : () + ), + (eval {require POSIX} + ? map { + POSIX->can($_) && eval { POSIX->can($_)->() } + ? (POSIX->can($_)->() => 1) + : () + } @names + : () + ); + + sub WOULDBLOCK { $WOULDBLOCK{$_[0]+0} } +} + +# Class method: new() +# Create a new IO::SessionData object. Intended to be called from within +# IO::SessionSet, not directly. +sub new { + my $pack = shift; + my ($sset,$handle,$writeonly) = @_; + # make the handle nonblocking (but check for 'blocking' method first) + # thanks to Jos Clijmans + $handle->blocking(0) if $handle->can('blocking'); + my $self = bless { + outbuffer => '', + sset => $sset, + handle => $handle, + write_limit => BUFSIZE, + writeonly => $writeonly, + choker => undef, + choked => 0, + },$pack; + $self->readable(1) unless $writeonly; + return $self; +} + +# Object method: handle() +# Return the IO::Handle object corresponding to this IO::SessionData +sub handle { + return shift->{handle}; +} + +# Object method: sessions() +# Return the IO::SessionSet controlling this object. +sub sessions { + return shift->{sset}; +} + +# Object method: pending() +# returns number of bytes pending in the out buffer +sub pending { + return length shift->{outbuffer}; +} + +# Object method: write_limit([$bufsize]) +# Get or set the limit on the size of the write buffer. +# Write buffer will grow to this size plus whatever extra you write to it. +sub write_limit { + my $self = shift; + return defined $_[0] + ? $self->{write_limit} = $_[0] + : $self->{write_limit}; +} + +# set a callback to be called when the contents of the write buffer becomes larger +# than the set limit. +sub set_choke { + my $self = shift; + return defined $_[0] + ? $self->{choker} = $_[0] + : $self->{choker}; +} + +# Object method: write($scalar) +# $obj->write([$data]) -- append data to buffer and try to write to handle +# Returns number of bytes written, or 0E0 (zero but true) if data queued but not +# written. On other errors, returns undef. +sub write { + my $self = shift; + return unless my $handle = $self->handle; # no handle + return unless defined $self->{outbuffer}; # no buffer for queued data + + $self->{outbuffer} .= $_[0] if defined $_[0]; + + my $rc; + if ($self->pending) { # data in the out buffer to write + local $SIG{PIPE}='IGNORE'; + # added length() to make it work on Mac. Thanks to Robin Fuller + $rc = syswrite($handle,$self->{outbuffer},length($self->{outbuffer})); + + # able to write, so truncate out buffer apropriately + if ($rc) { + substr($self->{outbuffer},0,$rc) = ''; + } + elsif (WOULDBLOCK($!)) { # this is OK + $rc = '0E0'; + } + else { # some sort of write error, such as a PIPE error + return $self->bail_out($!); + } + } + else { + $rc = '0E0'; # nothing to do, but no error either + } + + $self->adjust_state; + + # Result code is the number of bytes successfully transmitted + return $rc; +} + +# Object method: read($scalar,$length [,$offset]) +# Just like sysread(), but returns the number of bytes read on success, +# 0EO ("0 but true") if the read would block, and undef on EOF and other failures. +sub read { + my $self = shift; + return unless my $handle = $self->handle; + my $rc = sysread($handle,$_[0],$_[1],$_[2]||0); + return $rc if defined $rc; + return '0E0' if WOULDBLOCK($!); + return; +} + +# Object method: close() +# Close the session and remove it from the monitored list. +sub close { + my $self = shift; + unless ($self->pending) { + $self->sessions->delete($self); + CORE::close($self->handle); + } + else { + $self->readable(0); + $self->{closing}++; # delayed close + } +} + +# Object method: adjust_state() +# Called periodically from within write() to control the +# status of the handle on the IO::SessionSet's IO::Select sets +sub adjust_state { + my $self = shift; + + # make writable if there's anything in the out buffer + $self->writable($self->pending > 0); + + # make readable if there's no write limit, or the amount in the out + # buffer is less than the write limit. + $self->choke($self->write_limit <= $self->pending) if $self->write_limit; + + # Try to close down the session if it is flagged + # as in the closing state. + $self->close if $self->{closing}; +} + +# choke gets called when the contents of the write buffer are larger +# than the limit. The default action is to inactivate the session for further +# reading until the situation is cleared. +sub choke { + my $self = shift; + my $do_choke = shift; + return if $self->{choked} == $do_choke; # no change in state + if (ref $self->set_choke eq 'CODE') { + $self->set_choke->($self,$do_choke); + } + else { + $self->readable(!$do_choke); + } + $self->{choked} = $do_choke; +} + +# Object method: readable($flag) +# Flag the associated IO::SessionSet that we want to do reading on the handle. +sub readable { + my $self = shift; + my $is_active = shift; + return if $self->{writeonly}; + $self->sessions->activate($self,'read',$is_active); +} + +# Object method: writable($flag) +# Flag the associated IO::SessionSet that we want to do writing on the handle. +sub writable { + my $self = shift; + my $is_active = shift; + $self->sessions->activate($self,'write',$is_active); +} + +# Object method: bail_out([$errcode]) +# Called when an error is encountered during writing (such as a PIPE). +# Default behavior is to flush all buffered outgoing data and to close +# the handle. +sub bail_out { + my $self = shift; + my $errcode = shift; # save errorno + delete $self->{outbuffer}; # drop buffered data + $self->close; + $! = $errcode; # restore errno + return; +} + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionSet.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionSet.pm new file mode 100644 index 0000000..f852dac --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/IO/SessionSet.pm @@ -0,0 +1,163 @@ +# ====================================================================== +# +# Copyright (C) 2000 Lincoln D. Stein +# Formatting changed to match the layout layed out in Perl Best Practices +# (by Damian Conway) by Martin Kutter in 2008 +# +# ====================================================================== + +package IO::SessionSet; + +use strict; +use Carp; +use IO::Select; +use IO::Handle; +use IO::SessionData; + +use vars '$DEBUG'; +$DEBUG = 0; + +# Class method new() +# Create a new Session set. +# If passed a listening socket, use that to +# accept new IO::SessionData objects automatically. +sub new { + my $pack = shift; + my $listen = shift; + my $self = bless { + sessions => {}, + readers => IO::Select->new(), + writers => IO::Select->new(), + }, $pack; + # if initialized with an IO::Handle object (or subclass) + # then we treat it as a listening socket. + if ( defined($listen) and $listen->can('accept') ) { + $self->{listen_socket} = $listen; + $self->{readers}->add($listen); + } + return $self; +} + +# Object method: sessions() +# Return list of all the sessions currently in the set. +sub sessions { + return values %{shift->{sessions}} +}; + +# Object method: add() +# Add a handle to the session set. Will automatically +# create a IO::SessionData wrapper around the handle. +sub add { + my $self = shift; + my ($handle,$writeonly) = @_; + warn "Adding a new session for $handle.\n" if $DEBUG; + return $self->{sessions}{$handle} = + $self->SessionDataClass->new($self,$handle,$writeonly); +} + +# Object method: delete() +# Remove a session from the session set. May pass either a handle or +# a corresponding IO::SessionData wrapper. +sub delete { + my $self = shift; + my $thing = shift; + my $handle = $self->to_handle($thing); + my $sess = $self->to_session($thing); + warn "Deleting session $sess handle $handle.\n" if $DEBUG; + delete $self->{sessions}{$handle}; + $self->{readers}->remove($handle); + $self->{writers}->remove($handle); +} + +# Object method: to_handle() +# Return a handle, given either a handle or a IO::SessionData object. +sub to_handle { + my $self = shift; + my $thing = shift; + return $thing->handle if $thing->isa('IO::SessionData'); + return $thing if defined (fileno $thing); + return; # undefined value +} + +# Object method: to_session +# Return a IO::SessionData object, given either a handle or the object itself. +sub to_session { + my $self = shift; + my $thing = shift; + return $thing if $thing->isa('IO::SessionData'); + return $self->{sessions}{$thing} if defined (fileno $thing); + return; # undefined value +} + +# Object method: activate() +# Called with parameters ($session,'read'|'write' [,$activate]) +# If called without the $activate argument, will return true +# if the indicated handle is on the read or write IO::Select set. +# May use either a session object or a handle as first argument. +sub activate { + my $self = shift; + my ($thing,$rw,$act) = @_; + croak 'Usage $obj->activate($session,"read"|"write" [,$activate])' + unless @_ >= 2; + my $handle = $self->to_handle($thing); + my $select = lc($rw) eq 'read' ? 'readers' : 'writers'; + my $prior = defined $self->{$select}->exists($handle); + if (defined $act && $act != $prior) { + $self->{$select}->add($handle) if $act; + $self->{$select}->remove($handle) unless $act; + warn $act ? 'Activating' : 'Inactivating', + " handle $handle for ", + $rw eq 'read' ? 'reading':'writing',".\n" if $DEBUG; + } + return $prior; +} + +# Object method: wait() +# Wait for I/O. Handles writes automatically. Returns a list of +# IO::SessionData objects ready for reading. +# If there is a listen socket, then will automatically do an accept() +# and return a new IO::SessionData object for that. +sub wait { + my $self = shift; + my $timeout = shift; + + # Call select() to get the list of sessions that are ready for + # reading/writing. + warn "IO::Select->select() returned error: $!" + unless my ($read,$write) = + IO::Select->select($self->{readers},$self->{writers},undef,$timeout); + + # handle queued writes automatically + foreach (@$write) { + my $session = $self->to_session($_); + warn "Writing pending data (",$session->pending+0," bytes) for $_.\n" + if $DEBUG; + my $rc = $session->write; + } + + # Return list of sessions that are ready for reading. + # If one of the ready handles is the listen socket, then + # create a new session. + # Otherwise return the ready handles as a list of IO::SessionData objects. + my @sessions; + foreach (@$read) { + if ($_ eq $self->{listen_socket}) { + my $newhandle = $_->accept; + warn "Accepting a new handle $newhandle.\n" if $DEBUG; + my $newsess = $self->add($newhandle) if $newhandle; + push @sessions,$newsess; + } + else { + push @sessions,$self->to_session($_); + } + } + return @sessions; +} + +# Class method: SessionDataClass +# Return the string containing the name of the session data +# wrapper class. Subclass and override to use a different +# session data class. +sub SessionDataClass { return 'IO::SessionData'; } + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Client.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Client.pod new file mode 100644 index 0000000..f55ac33 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Client.pod @@ -0,0 +1,81 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Client.pod 354 2010-03-18 18:29:09Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Client - exists purely as a superclass for client classes declared by the various SOAP::Lite transport modules. + +=head1 DESCRIPTION + +The SOAP::Client class exists purely as a superclass for client classes +declared by the various SOAP::Lite transport modules. The methods it +provides are all simple accessors; they return the current value when +called with no arguments or set the attribute value and return the object +reference when called with an argument. These attributes include: + +=head1 METHODS + +=over + +=item code, message, status + +Stores the response code, message, and status from the most-recent send attempt. For some protocols, such as FTP, the same value is used for all three because of the lack of finer-grained detail (the default is to ensure that all three attributes contain data, even if redundant). Other protocols (such as HTTP) have distinct values in each. + +=item endpoint + +Identifies the current endpoint to which messages are being sent. This should match the value of the transport method from the L class, but setting this doesn't propagate to the transport object. It is better to use the transport object (or the shortcut via the SOAP::Lite object itself) when setting this. + +=item is_success + +The success or failure of the most-recent transmission is noted here as a boolean value. + +=item options + +The options attribute keeps a hash-table reference of additional options and their values. At present, only one option is used by any of the transport modules: + +=over + +=item compress_threshold + +The value of this option should be a numerical value. If set, and if the Compress::Zlib library is available, messages whose size in bytes exceeds this value will be compressed before sending. Both ends of the conversation must have it enabled. + +=back + +Other options may be defined using this mechanism. Note that setting the options using this accessor requires a full hash reference be passed. To set just one or a few values, consider retrieving the current reference value and using it to set the key(s). + +=back + +=head1 SEE ALSO + +L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Constants.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Constants.pm new file mode 100644 index 0000000..20966db --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Constants.pm @@ -0,0 +1,186 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Constants.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== +package SOAP::Constants; +use strict; +use SOAP::Lite; + +our $VERSION = 0.712; + +use constant URI_1999_SCHEMA_XSD => "http://www.w3.org/1999/XMLSchema"; +use constant URI_1999_SCHEMA_XSI => "http://www.w3.org/1999/XMLSchema-instance"; +use constant URI_2000_SCHEMA_XSD => "http://www.w3.org/2000/10/XMLSchema"; +use constant URI_2000_SCHEMA_XSI => "http://www.w3.org/2000/10/XMLSchema-instance"; +use constant URI_2001_SCHEMA_XSD => "http://www.w3.org/2001/XMLSchema"; +use constant URI_2001_SCHEMA_XSI => "http://www.w3.org/2001/XMLSchema-instance"; +use constant URI_LITERAL_ENC => ""; +use constant URI_SOAP11_ENC => "http://schemas.xmlsoap.org/soap/encoding/"; +use constant URI_SOAP11_ENV => "http://schemas.xmlsoap.org/soap/envelope/"; +use constant URI_SOAP11_NEXT_ACTOR => "http://schemas.xmlsoap.org/soap/actor/next"; +use constant URI_SOAP12_ENC => "http://www.w3.org/2003/05/soap-encoding"; +use constant URI_SOAP12_ENV => "http://www.w3.org/2003/05/soap-envelope"; +use constant URI_SOAP12_NOENC => "http://www.w3.org/2003/05/soap-envelope/encoding/none"; +use constant URI_SOAP12_NEXT_ACTOR => "http://www.w3.org/2003/05/soap-envelope/role/next"; + +use vars qw($NSMASK $ELMASK); + +$NSMASK = '[a-zA-Z_:][\w.\-:]*'; +$ELMASK = '^(?![xX][mM][lL])[a-zA-Z_][\w.\-]*$'; + +use vars qw($NEXT_ACTOR $NS_ENV $NS_ENC $NS_APS + $FAULT_CLIENT $FAULT_SERVER $FAULT_VERSION_MISMATCH + $HTTP_ON_FAULT_CODE $HTTP_ON_SUCCESS_CODE $FAULT_MUST_UNDERSTAND + $NS_XSI_ALL $NS_XSI_NILS %XML_SCHEMAS $DEFAULT_XML_SCHEMA + $DEFAULT_HTTP_CONTENT_TYPE + $SOAP_VERSION %SOAP_VERSIONS $WRONG_VERSION + $NS_SL_HEADER $NS_SL_PERLTYPE $PREFIX_ENV $PREFIX_ENC + $DO_NOT_USE_XML_PARSER $DO_NOT_CHECK_MUSTUNDERSTAND + $DO_NOT_USE_CHARSET $DO_NOT_PROCESS_XML_IN_MIME + $DO_NOT_USE_LWP_LENGTH_HACK $DO_NOT_CHECK_CONTENT_TYPE + $MAX_CONTENT_SIZE $PATCH_HTTP_KEEPALIVE $DEFAULT_PACKAGER + @SUPPORTED_ENCODING_STYLES $OBJS_BY_REF_KEEPALIVE + $DEFAULT_CACHE_TTL + %XML_SCHEMA_OF +); + +$FAULT_CLIENT = 'Client'; +$FAULT_SERVER = 'Server'; +$FAULT_VERSION_MISMATCH = 'VersionMismatch'; +$FAULT_MUST_UNDERSTAND = 'MustUnderstand'; + +$HTTP_ON_SUCCESS_CODE = 200; # OK +$HTTP_ON_FAULT_CODE = 500; # INTERNAL_SERVER_ERROR + +@SUPPORTED_ENCODING_STYLES = ( URI_LITERAL_ENC,URI_SOAP11_ENC,URI_SOAP12_ENC,URI_SOAP12_NOENC ); + +$WRONG_VERSION = 'Wrong SOAP version specified.'; + +$SOAP_VERSION = '1.1'; +%SOAP_VERSIONS = ( + 1.1 => { + NEXT_ACTOR => URI_SOAP11_NEXT_ACTOR, + NS_ENV => URI_SOAP11_ENV, + NS_ENC => URI_SOAP11_ENC, + DEFAULT_XML_SCHEMA => URI_2001_SCHEMA_XSD, + DEFAULT_HTTP_CONTENT_TYPE => 'text/xml', + }, + 1.2 => { + NEXT_ACTOR => URI_SOAP12_NEXT_ACTOR, + NS_ENV => URI_SOAP12_ENV, + NS_ENC => URI_SOAP12_ENC, + DEFAULT_XML_SCHEMA => URI_2001_SCHEMA_XSD, + DEFAULT_HTTP_CONTENT_TYPE => 'application/soap+xml', + }, +); + +# schema namespaces +%XML_SCHEMAS = ( # The '()' is necessary to put constants in SCALAR form + URI_1999_SCHEMA_XSD() => 'SOAP::XMLSchema1999', + URI_2001_SCHEMA_XSD() => 'SOAP::XMLSchema2001', + URI_SOAP11_ENC() => 'SOAP::XMLSchemaSOAP1_1', + URI_SOAP12_ENC() => 'SOAP::XMLSchemaSOAP1_2', +); + +# schema namespaces +%XML_SCHEMA_OF = ( # The '()' is necessary to put constants in SCALAR form + URI_1999_SCHEMA_XSD() => 'XMLSchema1999', + URI_2001_SCHEMA_XSD() => 'XMLSchema2001', + URI_SOAP11_ENC() => 'XMLSchemaSOAP1_1', + URI_SOAP12_ENC() => 'XMLSchemaSOAP1_2', +); + + +$NS_XSI_ALL = join join('|', map {"$_-instance"} grep {/XMLSchema/} keys %XML_SCHEMAS), '(?:', ')'; +$NS_XSI_NILS = join join('|', map { my $class = $XML_SCHEMAS{$_} . '::Serializer'; "\{($_)-instance\}" . $class->nilValue + } grep {/XMLSchema/} keys %XML_SCHEMAS), + '(?:', ')'; + +# ApacheSOAP namespaces +$NS_APS = 'http://xml.apache.org/xml-soap'; + +# SOAP::Lite namespace +$NS_SL_HEADER = 'http://namespaces.soaplite.com/header'; +$NS_SL_PERLTYPE = 'http://namespaces.soaplite.com/perl'; + +# default prefixes +$PREFIX_ENV = 'soap'; +$PREFIX_ENC = 'soapenc'; + +# others +$DO_NOT_USE_XML_PARSER = 0; +$DO_NOT_CHECK_MUSTUNDERSTAND = 0; +$DO_NOT_USE_CHARSET = 0; +$DO_NOT_PROCESS_XML_IN_MIME = 0; +$DO_NOT_USE_LWP_LENGTH_HACK = 0; +$DO_NOT_CHECK_CONTENT_TYPE = 0; +$PATCH_HTTP_KEEPALIVE = 1; +$OBJS_BY_REF_KEEPALIVE = 600; # seconds + +# TODO - use default packager constant somewhere +$DEFAULT_PACKAGER = "SOAP::Packager::MIME"; +$DEFAULT_CACHE_TTL = 0; + +1; + +__END__ + +=pod + +=head1 NAME + +SOAP::Constants - SOAP::Lite provides several variables to allows programmers and users to modify the behavior of SOAP::Lite in specific ways. + +=head1 DESCRIPTION + +A number of "constant" values are provided by means of this namespace. The values aren't constants in the strictest sense; the purpose of the values detailed here is to allow the application to change them if it desires to alter the specific behavior governed. + +=head1 CONSTANTS + +=head2 $DO_NOT_USE_XML_PARSER + +The SOAP::Lite package attempts to locate and use the L package, falling back on an internal, pure-Perl parser in its absence. This package is a fast parser, based on the Expat parser developed by James Clark. If the application sets this value to 1, there will be no attempt to locate or use XML::Parser. There are several reasons you might choose to do this. If the package will never be made available, there is no reason to perform the test. Setting this parameter is less time-consuming than the test for the package would be. Also, the XML::Parser code links against the Expat libraries for the C language. In some environments, this could cause a problem when mixed with other applications that may be linked against a different version of the same libraries. This was once the case with certain combinations of Apache, mod_perl and XML::Parser. + +=head2 $DO_NOT_USE_CHARSET + +Unless this parameter is set to 1, outgoing Content-Type headers will include specification of the character set used in encoding the message itself. Not all endpoints (client or server) may be able to properly deal with that data on the content header, however. If dealing with an endpoint that expects to do a more literal examination of the header as whole (as opposed to fully parsing it), this parameter may prove useful. + +=head2 $DO_NOT_CHECK_CONTENT_TYPE + +The content-type itself for a SOAP message is rather clearly defined, and in most cases, an application would have no reason to disable the testing of that header. This having been said, the content-type for SOAP 1.2 is still only a recommended draft, and badly coded endpoints might send valid messages with invalid Content-Type headers. While the "right" thing to do would be to reject such messages, that isn't always an option. Setting this parameter to 1 allows the toolkit to skip the content-type test. + +=head2 $PATCH_HTTP_KEEPALIVE + +SOAP::Lite's HTTP Transport module attempts to provide a simple patch to +LWP::Protocol to enable HTTP Keep Alive. By default, this patch is turned +off, if however you would like to turn on the experimental patch change the +constant like so: + + $SOAP::Constants::PATCH_HTTP_KEEPALIVE = 1; + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Data.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Data.pod new file mode 100644 index 0000000..1ce63cb --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Data.pod @@ -0,0 +1,239 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Data.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Data - this class provides the means by which to explicitly manipulate and control all aspects of the way in which Perl data gets expressed as SOAP data entities. + +=head1 DESCRIPTION + +The SOAP::Data class provides the means by which to explicitly manipulate and control all aspects of the way in which Perl data gets expressed as SOAP data entities. Most of the methods are accessors, which like those in SOAP::Lite are designed to return the current value if no new one is passed, while returning the object reference otherwise (allowing for chained method calls). Note that most accessors (except value) accept a new value for the data object as a second argument. + +=head1 METHODS + +=over + +=item new(optional key/value pairs) + + $obj = SOAP::Data->new(name => 'idx', value => 5); + +This is the class constructor. Almost all of the attributes related to the class may be passed to the constructor as key/value pairs. This method isn't often used directly because SOAP::Data objects are generally created for temporary use. It is available for those situations that require it. + +=item name(new name, optional value) + + $obj->name('index'); + +Gets or sets the current value of the name, as the object regards it. The name is what the serializer will use for the tag when generating the XML for this object. It is what will become the accessor for the data element. Optionally, the object's value may be updated if passed as a second argument. + +=item type(new type, optional value) + + $obj->type('int'); + +Gets or sets the type associated with the current value in the object. This is useful for those cases where the SOAP::Data object is used to explicitly specify the type of data that would otherwise be interpreted as a different type completely (such as perceiving the string 123 as an integer, instead). Allows the setting of the object's value, if passed as a second argument to the method. + +=item uri(new uri, optional value) + + $obj->uri('http://www.perl.com/SOAP'); + +Gets or sets the URI that will be used as the namespace for the resulting XML entity, if one is desired. This doesn't set the label for the namespace. If one isn't provided by means of the prefix method, one is generated automatically when needed. Also allows the setting of the object's value, if passed as a second argument to the method. + +=item prefix(new prefix, optional value) + + $obj->prefix('perl'); + +Provides the prefix, or label, for use when associating the data object with a specific namespace. Also allows the setting of the object's value, if passed as a second argument to the method. + +=item attr(hash reference of attributes, optional value) + + $obj->attr({ attr1 => 'value' }); + +Allows for the setting of arbitrary attributes on the data object. Keep in mind the requirement that any attributes not natively known to SOAP must be namespace-qualified. Also allows the setting of the object's value, if passed as a second argument to the method. + +=item value(new value) + + $obj->value(10); + +Fetches the current value encapsulated by the object, or explicitly sets it. + +=back + +The last four methods are convenience shortcuts for the attributes that SOAP itself supports. Each also permits inclusion of a new value, as an optional second argument. + +=over + +=item actor(new actor, optional value) + + $obj->actor($new_actor_name); + +Gets or sets the value of the actor attribute; useful only when the object generates an entity for the message header. + +=item mustUnderstand(boolean, optional value) + + $obj->mustUnderstand(0); + +Manipulates the mustUnderstand attribute, which tells the SOAP processor whether it is required to understand the entity in question. + +=item encodingStyle(new encoding URN, optional value) + + $obj->encodingStyle($soap_11_encoding); + +This method is most likely to be used in places outside the header creation. Sets encodingStyle, which specifies an encoding that differs from the one that would otherwise be defaulted to. + +=item root(boolean, optional value) + + $obj->root(1); + +When the application must explicitly specify which data element is to be regarded as the root element for the sake of generating the object model, this method provides the access to the root attribute. + +=back + +=head1 TYPE DETECTION + +SOAP::Lite's serializer will detect the type of any scalar passed in as a SOAP::Data object's value. Because Perl is loosely typed, the serializer is only able to detect types based upon a predetermined set of regular expressions. Therefore, type detection is not always 100% accurate. In such a case you may need to explicitly set the type of the element being encoded. For example, by default the following code will be serialized as an integer: + + $elem = SOAP::Data->name('idx')->value(5); + +If, however, you need to serialize this into a long, then the following code will do so: + + $elem = SOAP::Data->name('idx')->value(5)->type('long'); + +=head1 EXAMPLES + +=head2 SIMPLE TYPES + +The following example will all produce the same XML: + + $elem1 = SOAP::Data->new(name => 'idx', value => 5); + $elem2 = SOAP::Data->name('idx' => 5); + $elem3 = SOAP::Data->name('idx')->value(5); + +=head2 COMPLEX TYPES + +A common question is how to do you created nested XML elements using SOAP::Lite. The following example demonstrates how: + + SOAP::Data->name('foo' => \SOAP::Data->value( + SOAP::Data->name('bar' => '123'))); + +The above code will produce the following XML: + + + 123 + + +=head2 ARRAYS + +The following code: + + $elem1 = SOAP::Data->name('item' => 123)->type('SomeObject'); + $elem2 = SOAP::Data->name('item' => 456)->type('SomeObject'); + push(@array,$elem1); + push(@array,$elem2); + + my $client = SOAP::Lite + ->readable(1) + ->uri($NS) + ->proxy($HOST); + + $temp_elements = SOAP::Data + ->name("CallDetails" => \SOAP::Data->value( + SOAP::Data->name("elem1" => 'foo'), + SOAP::Data->name("elem2" => 'baz'), + SOAP::Data->name("someArray" => \SOAP::Data->value( + SOAP::Data->name("someArrayItem" => @array) + ->type("SomeObject")) + )->type("ArrayOf_SomeObject") )) + + ->type("SomeObject"); + + $response = $client->someMethod($temp_elements); + +Will produce the following XML: + + + + + + + foo + baz + + 123 + 456 + + + + + + +In the code above, the @array variable can be an array of anything. If you pass +in an array of numbers, then SOAP::Lite will properly serialize that into such. +If however you need to encode an array of complex types, then simply pass in an +array of other SOAP::Data objects and you are all set. + +=head2 COMPOSING MESSAGES USING RAW XML + +In some circumstances you may need to encode a message using raw unserialized +XML text. To instantiate a SOAP::Data object using raw XML, do the following: + + $xml_content = "123"; + $elem = SOAP::Data->type('xml' => $xml_content); + +SOAP::Lite's serializer simple takes whatever text is passed to it, and inserts +into the encoded SOAP::Data element I. The text input is NOT validated to +ensure it is valid XML, nor is the resulting SOAP::Data element validated to +ensure that it will produce valid XML. Therefore, it is incumbent upon the +developer to ensure that any XML data used in this fashion is valid and will +result in a valid XML document. + +=head2 MULTIPLE NAMESPACES + +When working with complex types it may be necessary to declare multiple namespaces. The following code demonstrates how to do so: + + $elem = SOAP::Data->name("myElement" => "myValue") + ->attr( { 'xmlns:foo2' => 'urn:Foo2', + 'xmlns:foo3' => 'urn:Foo3' } ); + +This will produce the following XML: + + myValue + +=head1 SEE ALSO + +L, L, L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Deserializer.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Deserializer.pod new file mode 100644 index 0000000..8f9ab07 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Deserializer.pod @@ -0,0 +1,65 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Deserializer.pod 372 2010-04-29 18:32:31Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Deserializer - the means by which the toolkit manages the conversion of XML into an object manageable by a developer + +=head1 DESCRIPTION + +SOAP::Deserializer provides the means by which incoming XML is decoded into a Perl data structure. + +=head1 METHODS + +=over + +=item context + +This provides access to the calling context of C. In a client side context the often means a reference to an instance of SOAP::Lite. In a server side context this means a reference to a SOAP::Server instance. + +=back + +=head1 EXAMPLES + +=head2 DESERIALIZING RAW XML INTO A SOAP::SOM OBJECT + +A useful utility for SOAP::Deserializer is for parsing raw XML documents or fragments into a SOAP::SOM object. SOAP::Lite developers use this technique to write unit tests for the SOAP::Lite module itself. It is a lot more efficient for testing aspects of the toolkit than generating client calls over the network. This is a perfect way for developers to write unit tests for their custom data types for example. + +Here is an example of how raw XML content can be parsed into a SOAP::SOM object by using SOAP::Deserializer: + + $xml = < + + 123 + 456 + + + 789 + 012 + + + END_XML + + my $som = SOAP::Deserializer->deserialize($xml); + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Fault.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Fault.pod new file mode 100644 index 0000000..b636c83 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Fault.pod @@ -0,0 +1,91 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Fault.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Fault - encapsulates SOAP faults prior to their serialization or after their deserialization + +=head1 DESCRIPTION + +This class encapsulates SOAP faults prior to their serialization or after their deserialization. The methods available are a constructor and four accessors. Each accessor creates an object on demand, just as the other classes do, when called as a static method. Like other accessors in the SOAP::Lite package, they return the object itself when setting the attribute. + +=head1 GENERATING A SOAP FAULT + +To generate a SOAP Fault simply issue a Perl die command on the server side as you might normally. The SOAP processor will intercept the die command and return a SOAP Fault, using the string passed to the die command as the faultstring, to the client making the call. If you require having more control over the SOAP Fault returned to the client, then simply pass a SOAP::Fault object to the die command and the SOAP processor will behave accordingly. For example: + + die SOAP::Fault->faultcode('Server.Custom') # will be qualified + ->faultstring('Died in server method') + ->faultdetail(bless {code => 1} => 'BadError') + ->faultactor('http://www.soaplite.com/custom'); + +=head1 METHODS + +=over + +=item new(optional data) + + $fault = SOAP::Fault->new(faultcode => 'Server'); + +Explicitly creates a new SOAP::Fault object. Any of the four attributes represented next by accessor methods may be passed in the argument list with values immediately following their attribute name. + +=item faultcode(optional value) + + $fault->faultcode('MethodUnknown'); + +Returns the current fault code or sets it if a value is given. + +=item faultstring(optional value) + + $fault->faultstring("There is no $method here"); + +Returns or sets the fault string. + +=item faultactor(optional value) + + $fault->faultcode($header->actor); + +Returns or sets the fault-actor element. Note that the actor isn't always required in a SOAP fault. + +=item faultdetail(optional value) + + $fault->faultcode(bless { proxy => $ip }, 'Err'); + +Returns or sets the fault's detail element. Like the actor, this isn't always a required element. Note that fault detail content in a message is represented as tag blocks. Thus, the values passed to this accessor when setting the value are either SOAP::Data objects, or more general blessed hash references. + +=back + +In addition to these methods, the SOAP::Fault package also provides detail as an alias for faultdetail. The former is the actual name of the element with SOAP faults, but the latter name is less ambiguous when regarded with the rest of the SOAP::Lite package. Objects of this class also have a special stringification enabled. If an object is printed or otherwise stringified, the value produced is faultcode: faultstring, with the attribute values of the object. + +=head1 SEE ALSO + +L, L, L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Header.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Header.pod new file mode 100644 index 0000000..b99ae9f --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Header.pod @@ -0,0 +1,45 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Header.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Header - similar to SOAP::Data elements, a SOAP::Header object simply is encoded in the SOAP Header block + +=head1 DESCRIPTION + +Objects instantiated from the SOAP::Header class are functionally the same as SOAP::Data objects, and as such share all the methods from that class. The distinction may be cosmetic, but it is present so that applications may more easily distinguish header blocks from more generic data elements. + +=head1 SEE ALSO + +L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite.pm new file mode 100644 index 0000000..3e206cd --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite.pm @@ -0,0 +1,5610 @@ +# ====================================================================== +# +# Copyright (C) 2000-2005 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Lite.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +# Formatting hint: +# Target is the source code format laid out in Perl Best Practices (4 spaces +# indent, opening brace on condition line, no cuddled else). +# +# October 2007, Martin Kutter + +package SOAP::Lite; + +use 5.006; #weak references require perl 5.6 +use strict; +our $VERSION = 0.712; +# ====================================================================== + +package SOAP::XMLSchemaApacheSOAP::Deserializer; + +sub as_map { + my $self = shift; + return { + map { + my $hash = ($self->decode_object($_))[1]; + ($hash->{key} => $hash->{value}) + } @{$_[3] || []} + }; +} +sub as_Map; *as_Map = \&as_map; + +# Thank to Kenneth Draper for this contribution +sub as_vector { + my $self = shift; + return [ map { scalar(($self->decode_object($_))[1]) } @{$_[3] || []} ]; +} +sub as_Vector; *as_Vector = \&as_vector; + +# ---------------------------------------------------------------------- + +package SOAP::XMLSchema::Serializer; + +use vars qw(@ISA); + +sub xmlschemaclass { + my $self = shift; + return $ISA[0] unless @_; + @ISA = (shift); + return $self; +} + +# ---------------------------------------------------------------------- + +package SOAP::XMLSchema1999::Serializer; + +use vars qw(@EXPORT $AUTOLOAD); + +sub AUTOLOAD { + local($1,$2); + my($package, $method) = $AUTOLOAD =~ m/(?:(.+)::)([^:]+)$/; + return if $method eq 'DESTROY'; + no strict 'refs'; + + my $export_var = $package . '::EXPORT'; + my @export = @$export_var; + +# Removed in 0.69 - this is a total hack. For some reason this is failing +# despite not being a fatal error condition. +# die "Type '$method' can't be found in a schema class '$package'\n" +# unless $method =~ s/^as_// && grep {$_ eq $method} @{$export_var}; + +# This was added in its place - it is still a hack, but it performs the +# necessary substitution. It just does not die. + if ($method =~ s/^as_// && grep {$_ eq $method} @{$export_var}) { +# print STDERR "method is now '$method'\n"; + } else { + return; + } + + $method =~ s/_/-/; # fix ur-type + + *$AUTOLOAD = sub { + my $self = shift; + my($value, $name, $type, $attr) = @_; + return [$name, {'xsi:type' => "xsd:$method", %$attr}, $value]; + }; + goto &$AUTOLOAD; +} + +BEGIN { + @EXPORT = qw(ur_type + float double decimal timeDuration recurringDuration uriReference + integer nonPositiveInteger negativeInteger long int short byte + nonNegativeInteger unsignedLong unsignedInt unsignedShort unsignedByte + positiveInteger timeInstant time timePeriod date month year century + recurringDate recurringDay language + base64 hex string boolean + ); + # TODO: replace by symbol table operations... + # predeclare subs, so ->can check will be positive + foreach (@EXPORT) { eval "sub as_$_" } +} + +sub nilValue { 'null' } + +sub anyTypeValue { 'ur-type' } + +sub as_base64 { + my ($self, $value, $name, $type, $attr) = @_; + + # Fixes #30271 for 5.8 and above. + # Won't fix for 5.6 and below - perl can't handle unicode before + # 5.8, and applying pack() to everything is just a slowdown. + if (eval "require Encode; 1") { + if (Encode::is_utf8($value)) { + if (Encode->can('_utf8_off')) { # the quick way, but it may change in future Perl versions. + Encode::_utf8_off($value); + } + else { + $value = pack('C*',unpack('C*',$value)); # the slow but safe way, + # but this fallback works always. + } + } + } + + require MIME::Base64; + return [ + $name, + { + 'xsi:type' => SOAP::Utils::qualify($self->encprefix => 'base64'), + %$attr + }, + MIME::Base64::encode_base64($value,'') + ]; +} + +sub as_hex { + my ($self, $value, $name, $type, $attr) = @_; + return [ + $name, + { + 'xsi:type' => 'xsd:hex', %$attr + }, + join '', map { + uc sprintf "%02x", ord + } split '', $value + ]; +} + +sub as_long { + my($self, $value, $name, $type, $attr) = @_; + return [ + $name, + {'xsi:type' => 'xsd:long', %$attr}, + $value + ]; +} + +sub as_dateTime { + my ($self, $value, $name, $type, $attr) = @_; + return [$name, {'xsi:type' => 'xsd:dateTime', %$attr}, $value]; +} + +sub as_string { + my ($self, $value, $name, $type, $attr) = @_; + die "String value expected instead of @{[ref $value]} reference\n" + if ref $value; + return [ + $name, + {'xsi:type' => 'xsd:string', %$attr}, + SOAP::Utils::encode_data($value) + ]; +} + +sub as_anyURI { + my($self, $value, $name, $type, $attr) = @_; + die "String value expected instead of @{[ref $value]} reference\n" if ref $value; + return [ + $name, + {'xsi:type' => 'xsd:anyURI', %$attr}, + SOAP::Utils::encode_data($value) + ]; +} + +sub as_undef { $_[1] ? '1' : '0' } + +sub as_boolean { + my $self = shift; + my($value, $name, $type, $attr) = @_; + # fix [ 1204279 ] Boolean serialization error + return [ + $name, + {'xsi:type' => 'xsd:boolean', %$attr}, + ( $value ne 'false' && $value ) ? 'true' : 'false' + ]; +} + +sub as_float { + my($self, $value, $name, $type, $attr) = @_; + return [ + $name, + {'xsi:type' => 'xsd:float', %$attr}, + $value + ]; +} + +# ---------------------------------------------------------------------- + +package SOAP::XMLSchema2001::Serializer; + +use vars qw(@EXPORT); + +# no more warnings about "used only once" +*AUTOLOAD if 0; + +*AUTOLOAD = \&SOAP::XMLSchema1999::Serializer::AUTOLOAD; + +BEGIN { + @EXPORT = qw(anyType anySimpleType float double decimal dateTime + timePeriod gMonth gYearMonth gYear century + gMonthDay gDay duration recurringDuration anyURI + language integer nonPositiveInteger negativeInteger + long int short byte nonNegativeInteger unsignedLong + unsignedInt unsignedShort unsignedByte positiveInteger + date time string hex base64 boolean + QName + ); + # Add QName to @EXPORT + # predeclare subs, so ->can check will be positive + foreach (@EXPORT) { eval "sub as_$_" } +} + +sub nilValue { 'nil' } + +sub anyTypeValue { 'anyType' } + +sub as_long; *as_long = \&SOAP::XMLSchema1999::Serializer::as_long; +sub as_float; *as_float = \&SOAP::XMLSchema1999::Serializer::as_float; +sub as_string; *as_string = \&SOAP::XMLSchema1999::Serializer::as_string; +sub as_anyURI; *as_anyURI = \&SOAP::XMLSchema1999::Serializer::as_anyURI; + +# TODO - QNames still don't work for 2001 schema! +sub as_QName; *as_QName = \&SOAP::XMLSchema1999::Serializer::as_string; +sub as_hex; *as_hex = \&as_hexBinary; +sub as_base64; *as_base64 = \&as_base64Binary; +sub as_timeInstant; *as_timeInstant = \&as_dateTime; + +# only 0 and 1 allowed - that's easy... +sub as_undef { + $_[1] + ? 'true' + : 'false' +} + +sub as_hexBinary { + my ($self, $value, $name, $type, $attr) = @_; + return [ + $name, + {'xsi:type' => 'xsd:hexBinary', %$attr}, + join '', map { + uc sprintf "%02x", ord + } split '', $value + ]; +} + +sub as_base64Binary { + my ($self, $value, $name, $type, $attr) = @_; + + # Fixes #30271 for 5.8 and above. + # Won't fix for 5.6 and below - perl can't handle unicode before + # 5.8, and applying pack() to everything is just a slowdown. + if (eval "require Encode; 1") { + if (Encode::is_utf8($value)) { + if (Encode->can('_utf8_off')) { # the quick way, but it may change in future Perl versions. + Encode::_utf8_off($value); + } + else { + $value = pack('C*',unpack('C*',$value)); # the slow but safe way, + # but this fallback works always. + } + } + } + + require MIME::Base64; + return [ + $name, + { + 'xsi:type' => 'xsd:base64Binary', %$attr + }, + MIME::Base64::encode_base64($value,'') + ]; +} + +sub as_boolean { + my ($self, $value, $name, $type, $attr) = @_; + # fix [ 1204279 ] Boolean serialization error + return [ + $name, + { + 'xsi:type' => 'xsd:boolean', %$attr + }, + ( $value ne 'false' && $value ) + ? 'true' + : 'false' + ]; +} + + +# ====================================================================== + +package SOAP::Utils; + +sub qualify { + $_[1] + ? $_[1] =~ /:/ + ? $_[1] + : join(':', $_[0] || (), $_[1]) + : defined $_[1] + ? $_[0] + : '' + } + +sub overqualify (&$) { + for ($_[1]) { + &{$_[0]}; + s/^:|:$//g + } +} + +sub disqualify { + (my $qname = shift) =~ s/^($SOAP::Constants::NSMASK?)://; + return $qname; +} + +sub splitqname { + local($1,$2); + $_[0] =~ /^(?:([^:]+):)?(.+)$/; + return ($1,$2) +} + +sub longname { + defined $_[0] + ? sprintf('{%s}%s', $_[0], $_[1]) + : $_[1] +} + +sub splitlongname { + local($1,$2); + $_[0] =~ /^(?:\{(.*)\})?(.+)$/; + return ($1,$2) +} + +# Q: why only '&' and '<' are encoded, but not '>'? +# A: because it is not required according to XML spec. +# +# [http://www.w3.org/TR/REC-xml#syntax] +# The ampersand character (&) and the left angle bracket (<) may appear in +# their literal form only when used as markup delimiters, or within a comment, +# a processing instruction, or a CDATA section. If they are needed elsewhere, +# they must be escaped using either numeric character references or the +# strings "&" and "<" respectively. The right angle bracket (>) may be +# represented using the string ">", and must, for compatibility, be +# escaped using ">" or a character reference when it appears in the +# string "]]>" in content, when that string is not marking the end of a +# CDATA section. + +my %encode_attribute = ('&' => '&', '>' => '>', '<' => '<', '"' => '"'); +sub encode_attribute { (my $e = $_[0]) =~ s/([&<>\"])/$encode_attribute{$1}/g; $e } + +my %encode_data = ('&' => '&', '>' => '>', '<' => '<', "\xd" => ' '); +sub encode_data { + my $e = $_[0]; + if ($e) { + $e =~ s/([&<>\015])/$encode_data{$1}/g; + $e =~ s/\]\]>/\]\]>/g; + } + $e +} + +# methods for internal tree (SOAP::Deserializer, SOAP::SOM and SOAP::Serializer) + +sub o_qname { $_[0]->[0] } +sub o_attr { $_[0]->[1] } +sub o_child { ref $_[0]->[2] ? $_[0]->[2] : undef } +sub o_chars { ref $_[0]->[2] ? undef : $_[0]->[2] } + # $_[0]->[3] is not used. Serializer stores object ID there +sub o_value { $_[0]->[4] } +sub o_lname { $_[0]->[5] } +sub o_lattr { $_[0]->[6] } + +sub format_datetime { + my ($s,$m,$h,$D,$M,$Y) = (@_)[0,1,2,3,4,5]; + my $time = sprintf("%04d-%02d-%02dT%02d:%02d:%02d",($Y+1900),($M+1),$D,$h,$m,$s); + return $time; +} + +# make bytelength that calculates length in bytes regardless of utf/byte settings +# either we can do 'use bytes' or length will count bytes already +BEGIN { + sub bytelength; + *bytelength = eval('use bytes; 1') # 5.6.0 and later? + ? sub { use bytes; length(@_ ? $_[0] : $_) } + : sub { length(@_ ? $_[0] : $_) }; +} + +# ====================================================================== + +package SOAP::Cloneable; + +sub clone { + my $self = shift; + + return unless ref $self && UNIVERSAL::isa($self => __PACKAGE__); + + my $clone = bless {} => ref($self) || $self; + for (keys %$self) { + my $value = $self->{$_}; + $clone->{$_} = ref $value && UNIVERSAL::isa($value => __PACKAGE__) ? $value->clone : $value; + } + return $clone; +} + +# ====================================================================== + +package SOAP::Transport; + +use vars qw($AUTOLOAD @ISA); +@ISA = qw(SOAP::Cloneable); + +use Class::Inspector; + + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + return $self if ref $self; + my $class = ref($self) || $self; + + SOAP::Trace::objects('()'); + return bless {} => $class; +} + +sub proxy { + my $self = shift; + $self = $self->new() if not ref $self; + + my $class = ref $self; + + return $self->{_proxy} unless @_; + + $_[0] =~ /^(\w+):/ or die "proxy: transport protocol not specified\n"; + my $protocol = uc "$1"; # untainted now + + # HTTPS is handled by HTTP class + $protocol =~s/^HTTPS$/HTTP/; + + (my $protocol_class = "${class}::$protocol") =~ s/-/_/g; + + no strict 'refs'; + unless (Class::Inspector->loaded("$protocol_class\::Client") + && UNIVERSAL::can("$protocol_class\::Client" => 'new') + ) { + eval "require $protocol_class"; + die "Unsupported protocol '$protocol'\n" + if $@ =~ m!^Can\'t locate SOAP/Transport/!; + die if $@; + } + + $protocol_class .= "::Client"; + return $self->{_proxy} = $protocol_class->new(endpoint => shift, @_); +} + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY'; + + no strict 'refs'; + *$AUTOLOAD = sub { shift->proxy->$method(@_) }; + goto &$AUTOLOAD; +} + +# ====================================================================== + +package SOAP::Fault; + +use Carp (); + +use overload fallback => 1, '""' => "stringify"; + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + + unless (ref $self) { + my $class = $self; + $self = bless {} => $class; + SOAP::Trace::objects('()'); + } + + Carp::carp "Odd (wrong?) number of parameters in new()" + if $^W && (@_ & 1); + + no strict qw(refs); + while (@_) { + my $method = shift; + $self->$method(shift) + if $self->can($method) + } + + return $self; +} + +sub stringify { + my $self = shift; + return join ': ', $self->faultcode, $self->faultstring; +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(faultcode faultstring faultactor faultdetail)) { + my $field = '_' . $method; + *$method = sub { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new + : __PACKAGE__->new; + if (@_) { + $self->{$field} = shift; + return $self + } + return $self->{$field}; + } + } + *detail = \&faultdetail; +} + +# ====================================================================== + +package SOAP::Data; + +use vars qw(@ISA @EXPORT_OK); +use Exporter; +use Carp (); +use SOAP::Lite::Deserializer::XMLSchemaSOAP1_2; + +@ISA = qw(Exporter); +@EXPORT_OK = qw(name type attr value uri); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + + unless (ref $self) { + my $class = $self; + $self = bless {_attr => {}, _value => [], _signature => []} => $class; + SOAP::Trace::objects('()'); + } + no strict qw(refs); + Carp::carp "Odd (wrong?) number of parameters in new()" if $^W && (@_ & 1); + while (@_) { + my $method = shift; + $self->$method(shift) if $self->can($method) + } + + return $self; +} + +sub name { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) ? shift->new : __PACKAGE__->new; + if (@_) { + my ($name, $uri, $prefix) = shift; + if ($name) { + ($uri, $name) = SOAP::Utils::splitlongname($name); + unless (defined $uri) { + ($prefix, $name) = SOAP::Utils::splitqname($name); + $self->prefix($prefix) if defined $prefix; + } else { + $self->uri($uri); + } + } + $self->{_name} = $name; + + $self->value(@_) if @_; + return $self; + } + return $self->{_name}; +} + +sub attr { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + if (@_) { + $self->{_attr} = shift; + $self->value(@_) if @_; + return $self + } + return $self->{_attr}; +} + +sub type { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + if (@_) { + $self->{_type} = shift; + $self->value(@_) if @_; + return $self; + } + if (!defined $self->{_type} && (my @types = grep {/^\{$SOAP::Constants::NS_XSI_ALL}type$/o} keys %{$self->{_attr}})) { + $self->{_type} = (SOAP::Utils::splitlongname(delete $self->{_attr}->{shift(@types)}))[1]; + } + return $self->{_type}; +} + +BEGIN { + no strict 'refs'; + for my $method (qw(root mustUnderstand)) { + my $field = '_' . $method; + *$method = sub { + my $attr = $method eq 'root' + ? "{$SOAP::Constants::NS_ENC}$method" + : "{$SOAP::Constants::NS_ENV}$method"; + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new + : __PACKAGE__->new; + if (@_) { + $self->{_attr}->{$attr} = $self->{$field} = shift() ? 1 : 0; + $self->value(@_) if @_; + return $self; + } + $self->{$field} = SOAP::Lite::Deserializer::XMLSchemaSOAP1_2->as_boolean($self->{_attr}->{$attr}) + if !defined $self->{$field} && defined $self->{_attr}->{$attr}; + return $self->{$field}; + } + } + + for my $method (qw(actor encodingStyle)) { + my $field = '_' . $method; + *$method = sub { + my $attr = "{$SOAP::Constants::NS_ENV}$method"; + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + if (@_) { + $self->{_attr}->{$attr} = $self->{$field} = shift; + $self->value(@_) if @_; + return $self; + } + $self->{$field} = $self->{_attr}->{$attr} + if !defined $self->{$field} && defined $self->{_attr}->{$attr}; + return $self->{$field}; + } + } +} + +sub prefix { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + return $self->{_prefix} unless @_; + $self->{_prefix} = shift; + $self->value(@_) if @_; + return $self; +} + +sub uri { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + return $self->{_uri} unless @_; + my $uri = $self->{_uri} = shift; + warn "Usage of '::' in URI ($uri) deprecated. Use '/' instead\n" + if defined $uri && $^W && $uri =~ /::/; + $self->value(@_) if @_; + return $self; +} + +sub set_value { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + $self->{_value} = [@_]; + return $self; +} + +sub value { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new; + (@_) + ? ($self->set_value(@_), return $self) + : wantarray + ? return @{$self->{_value}} + : return $self->{_value}->[0]; +} + +sub signature { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? shift->new() + : __PACKAGE__->new(); + (@_) + ? ($self->{_signature} = shift, return $self) + : (return $self->{_signature}); +} + +# ====================================================================== + +package SOAP::Header; + +use vars qw(@ISA); +@ISA = qw(SOAP::Data); + +# ====================================================================== + +package SOAP::Serializer; +use SOAP::Lite::Utils; +use Carp (); +use vars qw(@ISA); + +@ISA = qw(SOAP::Cloneable SOAP::XMLSchema::Serializer); + +BEGIN { + # namespaces and anonymous data structures + my $ns = 0; + my $name = 0; + my $prefix = 'c-'; + sub gen_ns { 'namesp' . ++$ns } + sub gen_name { join '', $prefix, 'gensym', ++$name } + sub prefix { $prefix =~ s/^[^\-]+-/$_[1]-/; $_[0]; } +} + +sub BEGIN { + no strict 'refs'; + + __PACKAGE__->__mk_accessors(qw(readable level seen autotype typelookup attr maptype + namespaces multirefinplace encoding signature on_nonserialized context + ns_uri ns_prefix use_default_ns)); + + for my $method (qw(method fault freeform)) { # aliases for envelope + *$method = sub { shift->envelope($method => @_) } + } + # Is this necessary? Seems like work for nothing when a user could just use + # SOAP::Utils directly. + # for my $method (qw(qualify overqualify disqualify)) { # import from SOAP::Utils + # *$method = \&{'SOAP::Utils::'.$method}; + # } +} + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + return $self if ref $self; + + my $class = $self; + $self = bless { + _level => 0, + _autotype => 1, + _readable => 0, + _ns_uri => '', + _ns_prefix => '', + _use_default_ns => 1, + _multirefinplace => 0, + _seen => {}, + _typelookup => { + 'base64Binary' => + [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/ }, 'as_base64Binary'], + 'zerostring' => + [12, sub { $_[0] =~ /^0\d+$/ }, 'as_string'], + # int (and actually long too) are subtle: the negative range is one greater... + 'int' => + [20, sub {$_[0] =~ /^([+-]?\d+)$/ && ($1 <= 2147483647) && ($1 >= -2147483648); }, 'as_int'], + 'long' => + [25, sub {$_[0] =~ /^([+-]?\d+)$/ && $1 <= 9223372036854775807;}, 'as_long'], + 'float' => + [30, sub {$_[0] =~ /^(-?(?:\d+(?:\.\d*)?|\.\d+|NaN|INF)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)$/}, 'as_float'], + 'gMonth' => + [35, sub { $_[0] =~ /^--\d\d--(-\d\d:\d\d)?$/; }, 'as_gMonth'], + 'gDay' => + [40, sub { $_[0] =~ /^---\d\d(-\d\d:\d\d)?$/; }, 'as_gDay'], + 'gYear' => + [45, sub { $_[0] =~ /^-?\d\d\d\d(-\d\d:\d\d)?$/; }, 'as_gYear'], + 'gMonthDay' => + [50, sub { $_[0] =~ /^-\d\d-\d\d(-\d\d:\d\d)?$/; }, 'as_gMonthDay'], + 'gYearMonth' => + [55, sub { $_[0] =~ /^-?\d\d\d\d-\d\d(Z|([+-]\d\d:\d\d))?$/; }, 'as_gYearMonth'], + 'date' => + [60, sub { $_[0] =~ /^-?\d\d\d\d-\d\d-\d\d(Z|([+-]\d\d:\d\d))?$/; }, 'as_date'], + 'time' => + [70, sub { $_[0] =~ /^\d\d:\d\d:\d\d(\.\d\d\d)?(Z|([+-]\d\d:\d\d))?$/; }, 'as_time'], + 'dateTime' => + [75, sub { $_[0] =~ /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d\d\d)?(Z|([+-]\d\d:\d\d))?$/; }, 'as_dateTime'], + 'duration' => + [80, sub { $_[0] !~m{^-?PT?$} && $_[0] =~ m{^ + -? # a optional - sign + P + (:? \d+Y )? + (:? \d+M )? + (:? \d+D )? + (:? + T(:?\d+H)? + (:?\d+M)? + (:?\d+S)? + )? + $ + }x; + }, 'as_duration'], + 'boolean' => + [90, sub { $_[0] =~ /^(true|false)$/i; }, 'as_boolean'], + 'anyURI' => + [95, sub { $_[0] =~ /^(urn:|http:\/\/)/i; }, 'as_anyURI'], + 'string' => + [100, sub {1}, 'as_string'], + }, + _encoding => 'UTF-8', + _objectstack => {}, + _signature => [], + _maptype => {}, + _on_nonserialized => sub {Carp::carp "Cannot marshall @{[ref shift]} reference" if $^W; return}, + _encodingStyle => $SOAP::Constants::NS_ENC, + _attr => { + "{$SOAP::Constants::NS_ENV}encodingStyle" => $SOAP::Constants::NS_ENC, + }, + _namespaces => {}, + _soapversion => SOAP::Lite->soapversion, + } => $class; + $self->register_ns($SOAP::Constants::NS_ENC,$SOAP::Constants::PREFIX_ENC); + $self->register_ns($SOAP::Constants::NS_ENV,$SOAP::Constants::PREFIX_ENV) + if $SOAP::Constants::PREFIX_ENV; + $self->xmlschema($SOAP::Constants::DEFAULT_XML_SCHEMA); + SOAP::Trace::objects('()'); + + no strict qw(refs); + Carp::carp "Odd (wrong?) number of parameters in new()" if $^W && (@_ & 1); + while (@_) { my $method = shift; $self->$method(shift) if $self->can($method) } + + return $self; +} + +sub ns { + my $self = shift; + $self = $self->new() if not ref $self; + if (@_) { + my ($u,$p) = @_; + my $prefix; + + if ($p) { + $prefix = $p; + } + elsif (!$p && !($prefix = $self->find_prefix($u))) { + $prefix = gen_ns; + } + + $self->{'_ns_uri'} = $u; + $self->{'_ns_prefix'} = $prefix; + $self->{'_use_default_ns'} = 0; + # $self->register_ns($u,$prefix); + $self->{'_namespaces'}->{$u} = $prefix; + return $self; + } + return $self->{'_ns_uri'}; +} + +sub default_ns { + my $self = shift; + $self = $self->new() if not ref $self; + if (@_) { + my ($u) = @_; + $self->{'_ns_uri'} = $u; + $self->{'_ns_prefix'} = ''; + $self->{'_use_default_ns'} = 1; + return $self; + } + return $self->{'_ns_uri'}; +} + +sub use_prefix { + my $self = shift; + $self = $self->new() if not ref $self; + warn 'use_prefix has been deprecated. if you wish to turn off or on the ' + . 'use of a default namespace, then please use either ns(uri) or default_ns(uri)'; + if (@_) { + my $use = shift; + $self->{'_use_default_ns'} = !$use || 0; + return $self; + } else { + return $self->{'_use_default_ns'}; + } +} +sub uri { + my $self = shift; + $self = $self->new() if not ref $self; +# warn 'uri has been deprecated. if you wish to set the namespace for the request, then please use either ns(uri) or default_ns(uri)'; + if (@_) { + my $ns = shift; + if ($self->{_use_default_ns}) { + $self->default_ns($ns); + } + else { + $self->ns($ns); + } +# $self->{'_ns_uri'} = $ns; +# $self->register_ns($self->{'_ns_uri'}) if (!$self->{_use_default_ns}); + return $self; + } + return $self->{'_ns_uri'}; +} + +sub encodingStyle { + my $self = shift; + $self = $self->new() if not ref $self; + return $self->{'_encodingStyle'} unless @_; + + my $cur_style = $self->{'_encodingStyle'}; + delete($self->{'_namespaces'}->{$cur_style}); + + my $new_style = shift; + if ($new_style eq "") { + delete($self->{'_attr'}->{"{$SOAP::Constants::NS_ENV}encodingStyle"}); + } + else { + $self->{'_attr'}->{"{$SOAP::Constants::NS_ENV}encodingStyle"} = $new_style; + $self->{'_namespaces'}->{$new_style} = $SOAP::Constants::PREFIX_ENC; + } +} + +# TODO - changing SOAP version can affect previously set encodingStyle +sub soapversion { + my $self = shift; + return $self->{_soapversion} unless @_; + return $self if $self->{_soapversion} eq SOAP::Lite->soapversion; + $self->{_soapversion} = shift; + + $self->attr({ + "{$SOAP::Constants::NS_ENV}encodingStyle" => $SOAP::Constants::NS_ENC, + }); + $self->namespaces({ + $SOAP::Constants::NS_ENC => $SOAP::Constants::PREFIX_ENC, + $SOAP::Constants::PREFIX_ENV ? ($SOAP::Constants::NS_ENV => $SOAP::Constants::PREFIX_ENV) : (), + }); + $self->xmlschema($SOAP::Constants::DEFAULT_XML_SCHEMA); + + return $self; +} + +sub xmlschema { + my $self = shift->new; + return $self->{_xmlschema} unless @_; + + my @schema; + if ($_[0]) { + @schema = grep {/XMLSchema/ && /$_[0]/} keys %SOAP::Constants::XML_SCHEMAS; + Carp::croak "More than one schema match parameter '$_[0]': @{[join ', ', @schema]}" if @schema > 1; + Carp::croak "No schema match parameter '$_[0]'" if @schema != 1; + } + + # do nothing if current schema is the same as new + return $self if $self->{_xmlschema} && $self->{_xmlschema} eq $schema[0]; + + my $ns = $self->namespaces; + + # delete current schema from namespaces + if (my $schema = $self->{_xmlschema}) { + delete $ns->{$schema}; + delete $ns->{"$schema-instance"}; + } + + # add new schema into namespaces + if (my $schema = $self->{_xmlschema} = shift @schema) { + $ns->{$schema} = 'xsd'; + $ns->{"$schema-instance"} = 'xsi'; + } + + # and here is the class serializer should work with + my $class = exists $SOAP::Constants::XML_SCHEMAS{$self->{_xmlschema}} + ? $SOAP::Constants::XML_SCHEMAS{$self->{_xmlschema}} . '::Serializer' + : $self; + + $self->xmlschemaclass($class); + + return $self; +} + +sub envprefix { + my $self = shift->new(); + return $self->namespaces->{$SOAP::Constants::NS_ENV} unless @_; + $self->namespaces->{$SOAP::Constants::NS_ENV} = shift; + return $self; +} + +sub encprefix { + my $self = shift->new(); + return $self->namespaces->{$SOAP::Constants::NS_ENC} unless @_; + $self->namespaces->{$SOAP::Constants::NS_ENC} = shift; + return $self; +} + +sub gen_id { sprintf "%U", $_[1] } + +sub multiref_object { + my ($self, $object) = @_; + my $id = $self->gen_id($object); + my $seen = $self->seen; + $seen->{$id}->{count}++; + $seen->{$id}->{multiref} ||= $seen->{$id}->{count} > 1; + $seen->{$id}->{value} = $object; + $seen->{$id}->{recursive} ||= 0; + return $id; +} + +sub recursive_object { + my $self = shift; + $self->seen->{$self->gen_id(shift)}->{recursive} = 1; +} + +sub is_href { + my $self = shift; + my $seen = $self->seen->{shift || return} or return; + return 1 if $seen->{id}; + return $seen->{multiref} + && !($seen->{id} = (shift + || $seen->{recursive} + || $seen->{multiref} && $self->multirefinplace)); +} + +sub multiref_anchor { + my $seen = shift->seen->{my $id = shift || return undef}; + return $seen->{multiref} ? "ref-$id" : undef; +} + +sub encode_multirefs { + my $self = shift; + return if $self->multirefinplace(); + + my $seen = $self->seen(); + map { $_->[1]->{_id} = 1; $_ } + map { $self->encode_object($seen->{$_}->{value}) } + grep { $seen->{$_}->{multiref} && !$seen->{$_}->{recursive} } + keys %$seen; +} + +sub maptypetouri { + my($self, $type, $simple) = @_; + + return $type unless defined $type; + my($prefix, $name) = SOAP::Utils::splitqname($type); + + unless (defined $prefix) { + $name =~ s/__|\./::/g; + $self->maptype->{$name} = $simple + ? die "Schema/namespace for type '$type' is not specified\n" + : $SOAP::Constants::NS_SL_PERLTYPE + unless exists $self->maptype->{$name}; + $type = $self->maptype->{$name} + ? SOAP::Utils::qualify($self->namespaces->{$self->maptype->{$name}} ||= gen_ns, $type) + : undef; + } + return $type; +} + +sub encode_object { + my($self, $object, $name, $type, $attr) = @_; + + $attr ||= {}; + return $self->encode_scalar($object, $name, $type, $attr) + unless ref $object; + + my $id = $self->multiref_object($object); + + use vars '%objectstack'; # we'll play with symbol table + local %objectstack = %objectstack; # want to see objects ONLY in the current tree + # did we see this object in current tree? Seems to be recursive refs + $self->recursive_object($object) if ++$objectstack{$id} > 1; + # return if we already saw it twice. It should be already properly serialized + return if $objectstack{$id} > 2; + + if (UNIVERSAL::isa($object => 'SOAP::Data')) { + # use $object->SOAP::Data:: to enable overriding name() and others in inherited classes + $object->SOAP::Data::name($name) + unless defined $object->SOAP::Data::name; + + # apply ->uri() and ->prefix() which can modify name and attributes of + # element, but do not modify SOAP::Data itself + my($name, $attr) = $self->fixattrs($object); + $attr = $self->attrstoqname($attr); + + my @realvalues = $object->SOAP::Data::value; + return [$name || gen_name, $attr] unless @realvalues; + + my $method = "as_" . ($object->SOAP::Data::type || '-'); # dummy type if not defined + # try to call method specified for this type + no strict qw(refs); + my @values = map { + # store null/nil attribute if value is undef + local $attr->{SOAP::Utils::qualify(xsi => $self->xmlschemaclass->nilValue)} = $self->xmlschemaclass->as_undef(1) + unless defined; + $self->can($method) && $self->$method($_, $name || gen_name, $object->SOAP::Data::type, $attr) + || $self->typecast($_, $name || gen_name, $object->SOAP::Data::type, $attr) + || $self->encode_object($_, $name, $object->SOAP::Data::type, $attr) + } @realvalues; + $object->SOAP::Data::signature([map {join $;, $_->[0], SOAP::Utils::disqualify($_->[1]->{'xsi:type'} || '')} @values]) if @values; + return wantarray ? @values : $values[0]; + } + + my $class = ref $object; + + if ($class !~ /^(?:SCALAR|ARRAY|HASH|REF)$/o) { + # we could also check for CODE|GLOB|LVALUE, but we cannot serialize + # them anyway, so they'll be cought by check below + $class =~ s/::/__/g; + + $name = $class if !defined $name; + $type = $class if !defined $type && $self->autotype; + + my $method = 'as_' . $class; + if ($self->can($method)) { + no strict qw(refs); + my $encoded = $self->$method($object, $name, $type, $attr); + return $encoded if ref $encoded; + # return only if handled, otherwise handle with default handlers + } + } + + if (UNIVERSAL::isa($object => 'REF') || UNIVERSAL::isa($object => 'SCALAR')) { + return $self->encode_scalar($object, $name, $type, $attr); + } + elsif (UNIVERSAL::isa($object => 'ARRAY')) { + # Added in SOAP::Lite 0.65_6 to fix an XMLRPC bug + return $self->encodingStyle eq "" + || $self->isa('XMLRPC::Serializer') + ? $self->encode_array($object, $name, $type, $attr) + : $self->encode_literal_array($object, $name, $type, $attr); + } + elsif (UNIVERSAL::isa($object => 'HASH')) { + return $self->encode_hash($object, $name, $type, $attr); + } + else { + return $self->on_nonserialized->($object); + } +} + +sub encode_scalar { + my($self, $value, $name, $type, $attr) = @_; + $name ||= gen_name; + + my $schemaclass = $self->xmlschemaclass; + + # null reference + return [$name, {%$attr, SOAP::Utils::qualify(xsi => $schemaclass->nilValue) => $schemaclass->as_undef(1)}] unless defined $value; + + # object reference + return [$name, {'xsi:type' => $self->maptypetouri($type), %$attr}, [$self->encode_object($$value)], $self->gen_id($value)] if ref $value; + + # autodefined type + if ($self->autotype) { + my $lookup = $self->typelookup(); + no strict qw(refs); + for (sort {$lookup->{$a}->[0] <=> $lookup->{$b}->[0]} keys %$lookup) { + my $method = $lookup->{$_}->[2]; + return $self->can($method) && $self->$method($value, $name, $type, $attr) + || $method->($value, $name, $type, $attr) + if $lookup->{$_}->[1]->($value); + } + } + + # invariant + return [$name, $attr, $value]; +} + +sub encode_array { + my($self, $array, $name, $type, $attr) = @_; + my $items = 'item'; + + # If typing is disabled, just serialize each of the array items + # with no type information, each using the specified name, + # and do not crete a wrapper array tag. + if (!$self->autotype) { + $name ||= gen_name; + return map {$self->encode_object($_, $name)} @$array; + } + + # TODO: add support for multidimensional, partially transmitted and sparse arrays + my @items = map {$self->encode_object($_, $items)} @$array; + my $num = @items; + my($arraytype, %types) = '-'; + for (@items) { $arraytype = $_->[1]->{'xsi:type'} || '-'; $types{$arraytype}++ } + $arraytype = sprintf "%s\[$num]", keys %types > 1 || $arraytype eq '-' ? SOAP::Utils::qualify(xsd => $self->xmlschemaclass->anyTypeValue) : $arraytype; + + # $type = SOAP::Utils::qualify($self->encprefix => 'Array') if $self->autotype && !defined $type; + $type = qualify($self->encprefix => 'Array') if !defined $type; + return [$name || SOAP::Utils::qualify($self->encprefix => 'Array'), + { + SOAP::Utils::qualify($self->encprefix => 'arrayType') => $arraytype, + 'xsi:type' => $self->maptypetouri($type), %$attr + }, + [@items], + $self->gen_id($array) + ]; +} + +# Will encode arrays using doc-literal style +sub encode_literal_array { + my($self, $array, $name, $type, $attr) = @_; + + if ($self->autotype) { + my $items = 'item'; + + # TODO: add support for multidimensional, partially transmitted and sparse arrays + my @items = map {$self->encode_object($_, $items)} @$array; + + + my $num = @items; + my($arraytype, %types) = '-'; + for (@items) { + $arraytype = $_->[1]->{'xsi:type'} || '-'; + $types{$arraytype}++ + } + $arraytype = sprintf "%s\[$num]", keys %types > 1 || $arraytype eq '-' + ? SOAP::Utils::qualify(xsd => $self->xmlschemaclass->anyTypeValue) + : $arraytype; + + $type = SOAP::Utils::qualify($self->encprefix => 'Array') + if !defined $type; + + return [$name || SOAP::Utils::qualify($self->encprefix => 'Array'), + { + SOAP::Utils::qualify($self->encprefix => 'arrayType') => $arraytype, + 'xsi:type' => $self->maptypetouri($type), %$attr + }, + [ @items ], + $self->gen_id($array) + ]; + } + else { + # + # literal arrays are different - { array => [ 5,6 ] } + # results in 56 + # This means that if there's a literal inside the array (not a + # reference), we have to encode it this way. If there's only + # nested tags, encode as + # 12 + # + + my $literal = undef; + my @items = map { + ref $_ + ? $self->encode_object($_) + : do { + $literal++; + $_ + } + + } @$array; + + if ($literal) { + return map { [ $name , $attr , $_, $self->gen_id($array) ] } @items; + } + else { + return [$name || SOAP::Utils::qualify($self->encprefix => 'Array'), + $attr, + [ @items ], + $self->gen_id($array) + ]; + } + } +} + +sub encode_hash { + my($self, $hash, $name, $type, $attr) = @_; + + if ($self->autotype && grep {!/$SOAP::Constants::ELMASK/o} keys %$hash) { + warn qq!Cannot encode @{[$name ? "'$name'" : 'unnamed']} element as 'hash'. Will be encoded as 'map' instead\n! if $^W; + return $self->as_map($hash, $name || gen_name, $type, $attr); + } + + $type = 'SOAPStruct' + if $self->autotype && !defined($type) && exists $self->maptype->{SOAPStruct}; + return [$name || gen_name, + $self->autotype ? {'xsi:type' => $self->maptypetouri($type), %$attr} : { %$attr }, + [map {$self->encode_object($hash->{$_}, $_)} keys %$hash], + $self->gen_id($hash) + ]; +} + +sub as_ordered_hash { + my ($self, $value, $name, $type, $attr) = @_; + die "Not an ARRAY reference for 'ordered_hash' type" unless UNIVERSAL::isa($value => 'ARRAY'); + return [ $name, $attr, + [map{$self->encode_object(@{$value}[2*$_+1,2*$_])} 0..$#$value/2 ], + $self->gen_id($value) + ]; +} + +sub as_map { + my ($self, $value, $name, $type, $attr) = @_; + die "Not a HASH reference for 'map' type" unless UNIVERSAL::isa($value => 'HASH'); + my $prefix = ($self->namespaces->{$SOAP::Constants::NS_APS} ||= 'apachens'); + my @items = map { + $self->encode_object( + SOAP::Data->type( + ordered_hash => [ + key => $_, + value => $value->{$_} + ] + ), + 'item', + '' + )} keys %$value; + return [ + $name, + {'xsi:type' => "$prefix:Map", %$attr}, + [@items], + $self->gen_id($value) + ]; +} + +sub as_xml { + my $self = shift; + my($value, $name, $type, $attr) = @_; + return [$name, {'_xml' => 1}, $value]; +} + +sub typecast { + my $self = shift; + my($value, $name, $type, $attr) = @_; + return if ref $value; # skip complex object, caller knows how to deal with it + return if $self->autotype && !defined $type; # we don't know, autotype knows + return [$name, + {(defined $type && $type gt '' ? ('xsi:type' => $self->maptypetouri($type, 'simple type')) : ()), %$attr}, + $value + ]; +} + +sub register_ns { + my $self = shift->new(); + my ($ns,$prefix) = @_; + $prefix = gen_ns if !$prefix; + $self->{'_namespaces'}->{$ns} = $prefix if $ns; +} + +sub find_prefix { + my ($self, $ns) = @_; + return (exists $self->{'_namespaces'}->{$ns}) + ? $self->{'_namespaces'}->{$ns} + : (); +} + +sub fixattrs { + my $self = shift; + my $data = shift; + my($name, $attr) = ($data->SOAP::Data::name, {%{$data->SOAP::Data::attr}}); + my($xmlns, $prefix) = ($data->uri, $data->prefix); + unless (defined($xmlns) || defined($prefix)) { + $self->register_ns($xmlns,$prefix) unless ($self->use_default_ns); + return ($name, $attr); + } + $name ||= gen_name; # local name + $prefix = gen_ns if !defined $prefix && $xmlns gt ''; + $prefix = '' + if defined $xmlns && $xmlns eq '' + || defined $prefix && $prefix eq ''; + + $attr->{join ':', xmlns => $prefix || ()} = $xmlns if defined $xmlns; + $name = join ':', $prefix, $name if $prefix; + + $self->register_ns($xmlns,$prefix) unless ($self->use_default_ns); + + return ($name, $attr); + +} + +sub toqname { + my $self = shift; + my $long = shift; + + return $long unless $long =~ /^\{(.*)\}(.+)$/; + return SOAP::Utils::qualify $self->namespaces->{$1} ||= gen_ns, $2; +} + +sub attrstoqname { + my $self = shift; + my $attrs = shift; + + return { + map { /^\{(.*)\}(.+)$/ + ? ($self->toqname($_) => $2 eq 'type' + || $2 eq 'arrayType' + ? $self->toqname($attrs->{$_}) + : $attrs->{$_}) + : ($_ => $attrs->{$_}) + } keys %$attrs + }; +} + +sub tag { + my ($self, $tag, $attrs, @values) = @_; + my $value = join '', @values; + my $level = $self->level; + my $indent = $self->readable ? ' ' x (($level-1)*2) : ''; + + # check for special attribute + return "$indent$value" if exists $attrs->{_xml} && delete $attrs->{_xml}; + + die "Element '$tag' can't be allowed in valid XML message. Died." + if $tag !~ /^(?![xX][mM][lL])$SOAP::Constants::NSMASK$/o; + + my $prolog = $self->readable ? "\n" : ""; + my $epilog = $self->readable ? "\n" : ""; + my $tagjoiner = " "; + if ($level == 1) { + my $namespaces = $self->namespaces; + foreach (keys %$namespaces) { + $attrs->{SOAP::Utils::qualify(xmlns => $namespaces->{$_})} = $_ + } + $prolog = qq!encoding]}"?>! + if defined $self->encoding; + $prolog .= "\n" if $self->readable; + $tagjoiner = " \n".(' ' x (($level+1) * 2)) if $self->readable; + } + my $tagattrs = join($tagjoiner, '', + map { sprintf '%s="%s"', $_, SOAP::Utils::encode_attribute($attrs->{$_}) } + grep { $_ && defined $attrs->{$_} && ($_ ne 'xsi:type' || $attrs->{$_} ne '') } + keys %$attrs); + + if ($value gt '') { + return sprintf("$prolog$indent<%s%s>%s%s$epilog",$tag,$tagattrs,$value,($value =~ /^\s*$epilog$indent",$tag,$tagattrs); + } +} + +sub xmlize { + my $self = shift; + my($name, $attrs, $values, $id) = @{+shift}; + $attrs ||= {}; + + local $self->{_level} = $self->{_level} + 1; + return $self->tag($name, $attrs) + unless defined $values; + return $self->tag($name, $attrs, $values) + unless UNIVERSAL::isa($values => 'ARRAY'); + return $self->tag($name, {%$attrs, href => '#'.$self->multiref_anchor($id)}) + if $self->is_href($id, delete($attrs->{_id})); + return $self->tag($name, + { + %$attrs, id => $self->multiref_anchor($id) + }, + map {$self->xmlize($_)} @$values + ); +} + +sub uriformethod { + my $self = shift; + + my $method_is_data = ref $_[0] && UNIVERSAL::isa($_[0] => 'SOAP::Data'); + + # drop prefix from method that could be string or SOAP::Data object + my($prefix, $method) = $method_is_data + ? ($_[0]->prefix, $_[0]->name) + : SOAP::Utils::splitqname($_[0]); + + my $attr = {reverse %{$self->namespaces}}; + # try to define namespace that could be stored as + # a) method is SOAP::Data + # ? attribute in method's element as xmlns= or xmlns:${prefix}= + # : uri + # b) attribute in Envelope element as xmlns= or xmlns:${prefix}= + # c) no prefix or prefix equal serializer->envprefix + # ? '', but see coment below + # : die with error message + my $uri = $method_is_data + ? ref $_[0]->attr && ($_[0]->attr->{$prefix ? "xmlns:$prefix" : 'xmlns'} || $_[0]->uri) + : $self->uri; + + defined $uri or $uri = $attr->{$prefix || ''}; + + defined $uri or $uri = !$prefix || $prefix eq $self->envprefix + # still in doubts what should namespace be in this case + # but will keep it like this for now and be compatible with our server + ? ( $method_is_data + && $^W + && warn("URI is not provided as an attribute for method ($method)\n"), + '' + ) + : die "Can't find namespace for method ($prefix:$method)\n"; + + return ($uri, $method); +} + +sub serialize { SOAP::Trace::trace('()'); + my $self = shift->new; + @_ == 1 or Carp::croak "serialize() method accepts one parameter"; + + $self->seen({}); # reinitialize multiref table + my($encoded) = $self->encode_object($_[0]); + + # now encode multirefs if any + # v -------------- subelements of Envelope + push(@{$encoded->[2]}, $self->encode_multirefs) if ref $encoded->[2]; + return $self->xmlize($encoded); +} + +sub envelope { + SOAP::Trace::trace('()'); + my $self = shift->new; + my $type = shift; + my(@parameters, @header); + for (@_) { + # Find all the SOAP Headers + if (defined($_) && ref($_) && UNIVERSAL::isa($_ => 'SOAP::Header')) { + push(@header, $_); + } + # Find all the SOAP Message Parts (attachments) + elsif (defined($_) && ref($_) && $self->context + && $self->context->packager->is_supported_part($_) + ) { + $self->context->packager->push_part($_); + } + # Find all the SOAP Body elements + else { + # proposed resolution for [ 1700326 ] encode_data called incorrectly in envelope + push(@parameters, $_); + # push (@parameters, SOAP::Utils::encode_data($_)); + } + } + my $header = @header ? SOAP::Data->set_value(@header) : undef; + my($body,$parameters); + if ($type eq 'method' || $type eq 'response') { + SOAP::Trace::method(@parameters); + + my $method = shift(@parameters); + # or die "Unspecified method for SOAP call\n"; + + $parameters = @parameters ? SOAP::Data->set_value(@parameters) : undef; + if (!defined($method)) {} + elsif (UNIVERSAL::isa($method => 'SOAP::Data')) { + $body = $method; + } + elsif ($self->use_default_ns) { + if ($self->{'_ns_uri'}) { + $body = SOAP::Data->name($method) + ->attr({'xmlns' => $self->{'_ns_uri'} } ); + } + else { + $body = SOAP::Data->name($method); + } + } + else { + # Commented out by Byrne on 1/4/2006 - to address default namespace problems + # $body = SOAP::Data->name($method)->uri($self->{'_ns_uri'}); + # $body = $body->prefix($self->{'_ns_prefix'}) if ($self->{'_ns_prefix'}); + + # Added by Byrne on 1/4/2006 - to avoid the unnecessary creation of a new + # namespace + # Begin New Code (replaces code commented out above) + $body = SOAP::Data->name($method); + my $pre = $self->find_prefix($self->{'_ns_uri'}); + $body = $body->prefix($pre) if ($self->{'_ns_prefix'}); + # End new code + } + + # This is breaking a unit test right now... + # proposed resolution for [ 1700326 ] encode_data called incorrectly in envelope + # $body->set_value(SOAP::Utils::encode_data($parameters ? \$parameters : ())) + # if $body; + # must call encode_data on nothing to enforce xsi:nil="true" to be set. + $body->set_value($parameters ? \$parameters : SOAP::Utils::encode_data()) if $body; + } + elsif ($type eq 'fault') { + SOAP::Trace::fault(@parameters); + # -> attr({'xmlns' => ''}) + # Parameter order fixed thanks to Tom Fischer + $body = SOAP::Data-> name(SOAP::Utils::qualify($self->envprefix => 'Fault')) + -> value(\SOAP::Data->set_value( + SOAP::Data->name(faultcode => SOAP::Utils::qualify($self->envprefix => $parameters[0]))->type(""), + SOAP::Data->name(faultstring => SOAP::Utils::encode_data($parameters[1]))->type(""), + defined($parameters[3]) + ? SOAP::Data->name(faultactor => $parameters[3])->type("") + : (), + defined($parameters[2]) + ? SOAP::Data->name(detail => do{ + my $detail = $parameters[2]; + ref $detail + ? \$detail + : SOAP::Utils::encode_data($detail) + }) + : (), + )); + } + elsif ($type eq 'freeform') { + SOAP::Trace::freeform(@parameters); + $body = SOAP::Data->set_value(@parameters); + } + elsif (!defined($type)) { + # This occurs when the Body is intended to be null. When no method has been + # passed in of any kind. + } + else { + die "Wrong type of envelope ($type) for SOAP call\n"; + } + + $self->seen({}); # reinitialize multiref table + # Build the envelope + # Right now it is possible for $body to be a SOAP::Data element that has not + # XML escaped any values. How do you remedy this? + my($encoded) = $self->encode_object( + SOAP::Data->name( + SOAP::Utils::qualify($self->envprefix => 'Envelope') => \SOAP::Data->value( + ($header + ? SOAP::Data->name( SOAP::Utils::qualify($self->envprefix => 'Header') => \$header) + : () + ), + ($body + ? SOAP::Data->name(SOAP::Utils::qualify($self->envprefix => 'Body') => \$body) + : SOAP::Data->name(SOAP::Utils::qualify($self->envprefix => 'Body')) ), + ) + )->attr($self->attr) + ); + + $self->signature($parameters->signature) if ref $parameters; + + # IMHO multirefs should be encoded after Body, but only some + # toolkits understand this encoding, so we'll keep them for now (04/15/2001) + # as the last element inside the Body + # v -------------- subelements of Envelope + # vv -------- last of them (Body) + # v --- subelements + push(@{$encoded->[2]->[-1]->[2]}, $self->encode_multirefs) if ref $encoded->[2]->[-1]->[2]; + + # Sometimes SOAP::Serializer is invoked statically when there is no context. + # So first check to see if a context exists. + # TODO - a context needs to be initialized by a constructor? + if ($self->context && $self->context->packager->parts) { + # TODO - this needs to be called! Calling it though wraps the payload twice! + # return $self->context->packager->package($self->xmlize($encoded)); + } + + return $self->xmlize($encoded); +} + +# ====================================================================== + +package SOAP::Parser; + +sub DESTROY { SOAP::Trace::objects('()') } + +sub xmlparser { + my $self = shift; + return eval { + $SOAP::Constants::DO_NOT_USE_XML_PARSER + ? undef + : do { + require XML::Parser; + XML::Parser->new() } + } + || eval { require XML::Parser::Lite; XML::Parser::Lite->new } + || die "XML::Parser is not @{[$SOAP::Constants::DO_NOT_USE_XML_PARSER ? 'used' : 'available']} and ", $@; +} + +sub parser { + my $self = shift->new; + @_ + ? do { + $self->{'_parser'} = shift; + return $self; + } + : return ($self->{'_parser'} ||= $self->xmlparser); +} + +sub new { + my $self = shift; + return $self if ref $self; + my $class = $self; + SOAP::Trace::objects('()'); + return bless {_parser => shift}, $class; +} + +sub decode { SOAP::Trace::trace('()'); + my $self = shift; + + $self->parser->setHandlers( + Final => sub { shift; $self->final(@_) }, + Start => sub { shift; $self->start(@_) }, + End => sub { shift; $self->end(@_) }, + Char => sub { shift; $self->char(@_) }, + ExternEnt => sub { shift; die "External entity (pointing to '$_[1]') is not allowed" }, + ); + # my $parsed = $self->parser->parse($_[0]); + # return $parsed; + # + my $ret = undef; + eval { + $ret = $self->parser->parse($_[0]); + }; + if ($@) { + $self->final; # Clean up in the event of an error + die $@; # Pass back the error + } + return $ret; +} + +sub final { + my $self = shift; + + # clean handlers, otherwise SOAP::Parser won't be deleted: + # it refers to XML::Parser which refers to subs from SOAP::Parser + # Thanks to Ryan Adams + # and Craig Johnston + # checked by number of tests in t/02-payload.t + + undef $self->{_values}; + $self->parser->setHandlers( + Final => undef, + Start => undef, + End => undef, + Char => undef, + ExternEnt => undef, + ); + $self->{_done}; +} + +sub start { push @{shift->{_values}}, [shift, {@_}] } + +# string concatenation changed to arrays which should improve performance +# for strings with many entity-encoded elements. +# Thanks to Mathieu Longtin +sub char { push @{shift->{_values}->[-1]->[3]}, shift } + +sub end { + my $self = shift; + my $done = pop @{$self->{_values}}; + $done->[2] = defined $done->[3] + ? join('',@{$done->[3]}) + : '' unless ref $done->[2]; + undef $done->[3]; + @{$self->{_values}} + ? (push @{$self->{_values}->[-1]->[2]}, $done) + : ($self->{_done} = $done); +} + +# ====================================================================== + +package SOAP::SOM; + +use Carp (); +use SOAP::Lite::Utils; + +sub BEGIN { + no strict 'refs'; + my %path = ( + root => '/', + envelope => '/Envelope', + body => '/Envelope/Body', + header => '/Envelope/Header', + headers => '/Envelope/Header/[>0]', + fault => '/Envelope/Body/Fault', + faultcode => '/Envelope/Body/Fault/faultcode', + faultstring => '/Envelope/Body/Fault/faultstring', + faultactor => '/Envelope/Body/Fault/faultactor', + faultdetail => '/Envelope/Body/Fault/detail', + ); + for my $method (keys %path) { + *$method = sub { + my $self = shift; + ref $self or return $path{$method}; + Carp::croak "Method '$method' is readonly and doesn't accept any parameters" if @_; + return $self->valueof($path{$method}); + }; + } + my %results = ( + method => '/Envelope/Body/[1]', + result => '/Envelope/Body/[1]/[1]', + freeform => '/Envelope/Body/[>0]', + paramsin => '/Envelope/Body/[1]/[>0]', + paramsall => '/Envelope/Body/[1]/[>0]', + paramsout => '/Envelope/Body/[1]/[>1]' + ); + for my $method (keys %results) { + *$method = sub { + my $self = shift; + ref $self or return $results{$method}; + Carp::croak "Method '$method' is readonly and doesn't accept any parameters" if @_; + defined $self->fault ? return : return $self->valueof($results{$method}); + }; + } + + for my $method (qw(o_child o_value o_lname o_lattr o_qname)) { # import from SOAP::Utils + *$method = \&{'SOAP::Utils::'.$method}; + } + + __PACKAGE__->__mk_accessors('context'); + +} + +# use object in boolean context return true/false on last match +# Ex.: $som->match('//Fault') ? 'SOAP call failed' : 'success'; +use overload fallback => 1, 'bool' => sub { @{shift->{_current}} > 0 }; + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + my $class = ref($self) || $self; + my $content = shift; + SOAP::Trace::objects('()'); + return bless { _content => $content, _current => [$content] } => $class; +} + +sub parts { + my $self = shift; + if (@_) { + $self->context->packager->parts(@_); + return $self; + } + else { + return $self->context->packager->parts; + } +} + +sub is_multipart { + my $self = shift; + return defined($self->parts); +} + +sub current { + my $self = shift; + $self->{_current} = [@_], return $self if @_; + return wantarray ? @{$self->{_current}} : $self->{_current}->[0]; +} + +sub valueof { + my $self = shift; + local $self->{_current} = $self->{_current}; + $self->match(shift) if @_; + return wantarray + ? map {o_value($_)} @{$self->{_current}} + : @{$self->{_current}} ? o_value($self->{_current}->[0]) : undef; +} + +sub headerof { # SOAP::Header is the same as SOAP::Data, so just rebless it + wantarray + ? map { bless $_ => 'SOAP::Header' } shift->dataof(@_) + : do { # header returned by ->dataof can be undef in scalar context + my $header = shift->dataof(@_); + ref $header ? bless($header => 'SOAP::Header') : undef; + }; +} + +sub dataof { + my $self = shift; + local $self->{_current} = $self->{_current}; + $self->match(shift) if @_; + return wantarray + ? map {$self->_as_data($_)} @{$self->{_current}} + : @{$self->{_current}} + ? $self->_as_data($self->{_current}->[0]) + : undef; +} + +sub namespaceuriof { + my $self = shift; + local $self->{_current} = $self->{_current}; + $self->match(shift) if @_; + return wantarray + ? map {(SOAP::Utils::splitlongname(o_lname($_)))[0]} @{$self->{_current}} + : @{$self->{_current}} ? (SOAP::Utils::splitlongname(o_lname($self->{_current}->[0])))[0] : undef; +} + +#sub _as_data { +# my $self = shift; +# my $pointer = shift; +# +# SOAP::Data +# -> new(prefix => '', name => o_qname($pointer), name => o_lname($pointer), attr => o_lattr($pointer)) +# -> set_value(o_value($pointer)); +#} + +sub _as_data { + my $self = shift; + my $node = shift; + + my $data = SOAP::Data->new( prefix => '', + # name => o_qname has side effect: sets namespace ! + name => o_qname($node), + name => o_lname($node), + attr => o_lattr($node) ); + + if ( defined o_child($node) ) { + my @children; + foreach my $child ( @{ o_child($node) } ) { + push( @children, $self->_as_data($child) ); + } + $data->set_value( \SOAP::Data->value(@children) ); + } + else { + $data->set_value( o_value($node) ); + } + + return $data; +} + + +sub match { + my $self = shift; + my $path = shift; + $self->{_current} = [ + $path =~ s!^/!! || !@{$self->{_current}} + ? $self->_traverse($self->{_content}, 1 => split '/' => $path) + : map {$self->_traverse_tree(o_child($_), split '/' => $path)} @{$self->{_current}} + ]; + return $self; +} + +sub _traverse { + my $self = shift; + my ($pointer, $itself, $path, @path) = @_; + + die "Incorrect parameter" unless $itself =~ /^\d*$/; + + if ($path && substr($path, 0, 1) eq '{') { + $path = join '/', $path, shift @path while @path && $path !~ /}/; + } + + my($op, $num) = $path =~ /^\[(<=|<|>=|>|=|!=?)?(\d+)\]$/ if defined $path; + + return $pointer unless defined $path; + + $op = '==' unless $op; $op .= '=' if $op eq '=' || $op eq '!'; + my $numok = defined $num && eval "$itself $op $num"; + my $nameok = (o_lname($pointer) || '') =~ /(?:^|\})$path$/ if defined $path; # name can be with namespace + + my $anynode = $path eq ''; + unless ($anynode) { + if (@path) { + return if defined $num && !$numok || !defined $num && !$nameok; + } + else { + return $pointer if defined $num && $numok || !defined $num && $nameok; + return; + } + } + + my @walk; + push @walk, $self->_traverse_tree([$pointer], @path) if $anynode; + push @walk, $self->_traverse_tree(o_child($pointer), $anynode ? ($path, @path) : @path); + return @walk; +} + +sub _traverse_tree { + my $self = shift; + my($pointer, @path) = @_; + + # can be list of children or value itself. Traverse only children + return unless ref $pointer eq 'ARRAY'; + + my $itself = 1; + + grep {defined} + map {$self->_traverse($_, $itself++, @path)} + grep {!ref o_lattr($_) || + !exists o_lattr($_)->{"{$SOAP::Constants::NS_ENC}root"} || + o_lattr($_)->{"{$SOAP::Constants::NS_ENC}root"} ne '0'} + @$pointer; +} + +# ====================================================================== + +package SOAP::Deserializer; + +use vars qw(@ISA); +use SOAP::Lite::Utils; +use Class::Inspector; + +@ISA = qw(SOAP::Cloneable); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub BEGIN { + __PACKAGE__->__mk_accessors( qw(ids hrefs parts parser + base xmlschemas xmlschema context) ); +} + +sub new { + my $self = shift; + return $self if ref $self; + my $class = $self; + SOAP::Trace::objects('()'); + return bless { + '_ids' => {}, + '_hrefs' => {}, + '_parser' => SOAP::Parser->new, + '_xmlschemas' => { + $SOAP::Constants::NS_APS => 'SOAP::XMLSchemaApacheSOAP::Deserializer', +# map { +# $_ => $SOAP::Constants::XML_SCHEMAS{$_} . '::Deserializer' +# } keys %SOAP::Constants::XML_SCHEMAS + map { + $_ => 'SOAP::Lite::Deserializer::' . $SOAP::Constants::XML_SCHEMA_OF{$_} + } keys %SOAP::Constants::XML_SCHEMA_OF + + }, + }, $class; +} + +sub is_xml { + # Added check for envelope delivery. Fairly standard with MMDF and sendmail + # Thanks to Chris Davies + $_[1] =~ /^\s*new($location); + # make absolute location if relative + $location = $uri->abs($self->base || 'thismessage:/')->as_string unless $uri->scheme; + } + return $location; +} + +# Returns the envelope and populates SOAP::Packager with parts +sub decode_parts { + my $self = shift; + my $env = $self->context->packager->unpackage($_[0],$self->context); + my $body = $self->parser->decode($env); + # TODO - This shouldn't be here! This is packager specific! + # However this does need to pull out all the cid's + # to populate ids hash with. + foreach (@{$self->context->packager->parts}) { + my $data = $_->bodyhandle->as_string; + my $type = $_->head->mime_attr('Content-Type'); + my $location = $_->head->mime_attr('Content-Location'); + my $id = $_->head->mime_attr('Content-Id'); + $location = $self->baselocation($location); + my $part = lc($type) eq 'text/xml' && !$SOAP::Constants::DO_NOT_PROCESS_XML_IN_MIME + ? $self->parser->decode($data) + : ['mimepart', {}, $data]; + # This below looks like unnecessary bloat!!! + # I should probably dereference the mimepart, provide a callback to get the string data + $id =~ s/^<([^>]*)>$/$1/; # string any leading and trailing brackets + $self->ids->{$id} = $part if $id; + $self->ids->{$location} = $part if $location; + } + return $body; +} + +# decode returns a parsed body in the form of an ARRAY +# each element of the ARRAY is a HASH, ARRAY or SCALAR +sub decode { + my $self = shift->new; # this actually is important + return $self->is_xml($_[0]) + ? $self->parser->decode($_[0]) + : $self->decode_parts($_[0]); +} + +# deserialize returns a SOAP::SOM object and parses straight +# text as input +sub deserialize { + SOAP::Trace::trace('()'); + my $self = shift->new; + + # initialize + $self->hrefs({}); + $self->ids({}); + + # If the document is XML, then ids will be empty + # If the document is MIME, then ids will hold a list of cids + my $parsed = $self->decode($_[0]); + + # Having this code here makes multirefs in the Body work, but multirefs + # that reference XML fragments in a MIME part do not work. + if (keys %{$self->ids()}) { + $self->traverse_ids($parsed); + } + else { + # delay - set ids to be traversed later in decode_object, they only get + # traversed if an href is found that is referencing an id. + $self->ids($parsed); + } + $self->decode_object($parsed); + my $som = SOAP::SOM->new($parsed); + $som->context($self->context); # TODO - try removing this and see if it works! + return $som; +} + +sub traverse_ids { + my $self = shift; + my $ref = shift; + my($undef, $attrs, $children) = @$ref; + # ^^^^^^ to fix nasty error on Mac platform (Carl K. Cunningham) + $self->ids->{$attrs->{'id'}} = $ref if exists $attrs->{'id'}; + return unless ref $children; + for (@$children) { + $self->traverse_ids($_) + }; +} + +use constant _ATTRS => 6; +use constant _NAME => 5; + +sub decode_object { + my $self = shift; + my $ref = shift; + my($name, $attrs, $children, $value) = @$ref; + + $ref->[ _ATTRS ] = $attrs = {%$attrs}; # make a copy for long attributes + + use vars qw(%uris); + local %uris = (%uris, map { + do { (my $ns = $_) =~ s/^xmlns:?//; $ns } => delete $attrs->{$_} + } grep {/^xmlns(:|$)/} keys %$attrs); + + foreach (keys %$attrs) { + next unless m/^($SOAP::Constants::NSMASK?):($SOAP::Constants::NSMASK)$/; + + $1 =~ /^[xX][mM][lL]/ || + $uris{$1} && + do { + $attrs->{SOAP::Utils::longname($uris{$1}, $2)} = do { + my $value = $attrs->{$_}; + $2 ne 'type' && $2 ne 'arrayType' + ? $value + : SOAP::Utils::longname($value =~ m/^($SOAP::Constants::NSMASK?):(${SOAP::Constants::NSMASK}(?:\[[\d,]*\])*)/ + ? ($uris{$1} || die("Unresolved prefix '$1' for attribute value '$value'\n"), $2) + : ($uris{''} || die("Unspecified namespace for type '$value'\n"), $value) + ); + }; + 1; + } + || die "Unresolved prefix '$1' for attribute '$_'\n"; + } + + # and now check the element + my $ns = ($name =~ s/^($SOAP::Constants::NSMASK?):// ? $1 : ''); + $ref->[ _NAME ] = SOAP::Utils::longname( + $ns + ? ($uris{$ns} || die "Unresolved prefix '$ns' for element '$name'\n") + : (defined $uris{''} ? $uris{''} : undef), + $name + ); + + ($children, $value) = (undef, $children) unless ref $children; + + return $name => ($ref->[4] = $self->decode_value( + [$ref->[ _NAME ], $attrs, $children, $value] + )); +} + +sub decode_value { + my $self = shift; + my $ref = shift; + my($name, $attrs, $children, $value) = @$ref; + + # check SOAP version if applicable + use vars '$level'; local $level = $level || 0; + if (++$level == 1) { + my($namespace, $envelope) = SOAP::Utils::splitlongname($name); + SOAP::Lite->soapversion($namespace) if $envelope eq 'Envelope' && $namespace; + } + + # check encodingStyle + # future versions may bind deserializer to encodingStyle + my $encodingStyle = $attrs->{"{$SOAP::Constants::NS_ENV}encodingStyle"} || ""; + my (%union,%isect); + # TODO - SOAP 1.2 and 1.1 have different rules about valid encodingStyle values + # For example, in 1.1 - any http://schemas.xmlsoap.org/soap/encoding/* + # value is valid + # Find intersection of declared and supported encoding styles + foreach my $e (@SOAP::Constants::SUPPORTED_ENCODING_STYLES, split(/ +/,$encodingStyle)) { + $union{$e}++ && $isect{$e}++; + } + die "Unrecognized/unsupported value of encodingStyle attribute '$encodingStyle'" + if defined($encodingStyle) && length($encodingStyle) > 0 && !%isect && + !(SOAP::Lite->soapversion == 1.1 && $encodingStyle =~ /(?:^|\b)$SOAP::Constants::NS_ENC/); + + # removed to provide literal support in 0.65 + #$encodingStyle !~ /(?:^|\b)$SOAP::Constants::NS_ENC/; + # # ^^^^^^^^ \b causing problems (!?) on some systems + # # as reported by David Dyck + # # so use (?:^|\b) instead + + use vars '$arraytype'; # type of Array element specified on Array itself + # either specified with xsi:type, or or array element + my ($type) = grep { defined } + map($attrs->{$_}, sort grep {/^\{$SOAP::Constants::NS_XSI_ALL\}type$/o} keys %$attrs), + $name =~ /^\{$SOAP::Constants::NS_ENC\}/ ? $name : $arraytype; + local $arraytype; # it's used only for one level, we don't need it anymore + + # $name is not used here since type should be encoded as type, not as name + my ($schema, $class) = SOAP::Utils::splitlongname($type) if $type; + my $schemaclass = defined($schema) && $self->xmlschemas->{$schema} + || $self; + + { + no strict qw(refs); + if (! Class::Inspector->loaded($schemaclass) ) { + eval "require $schemaclass" or die $@ if not ref $schemaclass; + } + } + + # store schema that is used in parsed message + $self->xmlschema($schema) if $schema && $schema =~ /XMLSchema/; + + # don't use class/type if anyType/ur-type is specified on wire + undef $class + if $schemaclass->can('anyTypeValue') + && $schemaclass->anyTypeValue eq $class; + + my $method = 'as_' . ($class || '-'); # dummy type if not defined + $class =~ s/__|\./::/g if $class; + + my $id = $attrs->{id}; + if (defined $id && exists $self->hrefs->{$id}) { + return $self->hrefs->{$id}; + } + elsif (exists $attrs->{href}) { + (my $id = delete $attrs->{href}) =~ s/^(#|cid:|uuid:)?//; + # convert to absolute if not internal '#' or 'cid:' + $id = $self->baselocation($id) unless $1; + return $self->hrefs->{$id} if exists $self->hrefs->{$id}; + # First time optimization. we don't traverse IDs unless asked for it. + # This is where traversing id's is delayed from before + # - the first time through - ids should contain a copy of the parsed XML + # structure! seems silly to make so many copies + my $ids = $self->ids; + if (ref($ids) ne 'HASH') { + $self->ids({}); # reset list of ids first time through + $self->traverse_ids($ids); + } + if (exists($self->ids->{$id})) { + my $obj = ($self->decode_object(delete($self->ids->{$id})))[1]; + return $self->hrefs->{$id} = $obj; + } + else { + die "Unresolved (wrong?) href ($id) in element '$name'\n"; + } + } + + return undef if grep { + /^$SOAP::Constants::NS_XSI_NILS$/ && do { + my $class = $self->xmlschemas->{ $1 || $2 }; + eval "require $class" or die @$;; + $class->as_undef($attrs->{$_}) + } + } keys %$attrs; + + # try to handle with typecasting + my $res = $self->typecast($value, $name, $attrs, $children, $type); + return $res if defined $res; + + # ok, continue with others + if (exists $attrs->{"{$SOAP::Constants::NS_ENC}arrayType"}) { + my $res = []; + $self->hrefs->{$id} = $res if defined $id; + + # check for arrayType which could be [1], [,2][5] or [] + # [,][1] will NOT be allowed right now (multidimensional sparse array) + my($type, $multisize) = $attrs->{"{$SOAP::Constants::NS_ENC}arrayType"} + =~ /^(.+)\[(\d*(?:,\d+)*)\](?:\[(?:\d+(?:,\d+)*)\])*$/ + or die qq!Unrecognized/unsupported format of arrayType attribute '@{[$attrs->{"{$SOAP::Constants::NS_ENC}arrayType"}]}'\n!; + + my @dimensions = map { $_ || undef } split /,/, $multisize; + my $size = 1; + foreach (@dimensions) { $size *= $_ || 0 } + + # TODO ähm, shouldn't this local be my? + local $arraytype = $type; + + # multidimensional + if ($multisize =~ /,/) { + @$res = splitarray( + [@dimensions], + [map { scalar(($self->decode_object($_))[1]) } @{$children || []}] + ); + } + # normal + else { + @$res = map { scalar(($self->decode_object($_))[1]) } @{$children || []}; + } + + # sparse (position) + if (ref $children && exists SOAP::Utils::o_lattr($children->[0])->{"{$SOAP::Constants::NS_ENC}position"}) { + my @new; + for (my $pos = 0; $pos < @$children; $pos++) { + # TBD implement position in multidimensional array + my($position) = SOAP::Utils::o_lattr($children->[$pos])->{"{$SOAP::Constants::NS_ENC}position"} =~ /^\[(\d+)\]$/ + or die "Position must be specified for all elements of sparse array\n"; + $new[$position] = $res->[$pos]; + } + @$res = @new; + } + + # partially transmitted (offset) + # TBD implement offset in multidimensional array + my($offset) = $attrs->{"{$SOAP::Constants::NS_ENC}offset"} =~ /^\[(\d+)\]$/ + if exists $attrs->{"{$SOAP::Constants::NS_ENC}offset"}; + unshift(@$res, (undef) x $offset) if $offset; + + die "Too many elements in array. @{[scalar@$res]} instead of claimed $multisize ($size)\n" + if $multisize && $size < @$res; + + # extend the array if number of elements is specified + $#$res = $dimensions[0]-1 if defined $dimensions[0] && @$res < $dimensions[0]; + + return defined $class && $class ne 'Array' ? bless($res => $class) : $res; + + } + elsif ($name =~ /^\{$SOAP::Constants::NS_ENC\}Struct$/ + || !$schemaclass->can($method) + && (ref $children || defined $class && $value =~ /^\s*$/)) { + my $res = {}; + $self->hrefs->{$id} = $res if defined $id; + + # Patch code introduced in 0.65 - deserializes array properly + # Decode each element of the struct. + my %child_count_of = (); + foreach my $child (@{$children || []}) { + my ($child_name, $child_value) = $self->decode_object($child); + # Store the decoded element in the struct. If the element name is + # repeated, replace the previous scalar value with a new array + # containing both values. + if (not $child_count_of{$child_name}) { + # first time to see this value: use scalar + $res->{$child_name} = $child_value; + } + elsif ($child_count_of{$child_name} == 1) { + # second time to see this value: convert scalar to array + $res->{$child_name} = [ $res->{$child_name}, $child_value ]; + } + else { + # already have an array: append to it + push @{$res->{$child_name}}, $child_value; + } + $child_count_of{$child_name}++; + } + # End patch code + + return defined $class && $class ne 'SOAPStruct' ? bless($res => $class) : $res; + } + else { + my $res; + if (my $method_ref = $schemaclass->can($method)) { + $res = $method_ref->($self, $value, $name, $attrs, $children, $type); + } + else { + $res = $self->typecast($value, $name, $attrs, $children, $type); + $res = $class ? die "Unrecognized type '$type'\n" : $value + unless defined $res; + } + $self->hrefs->{$id} = $res if defined $id; + return $res; + } +} + +sub splitarray { + my @sizes = @{+shift}; + my $size = shift @sizes; + my $array = shift; + + return splice(@$array, 0, $size) unless @sizes; + my @array = (); + push @array, [ + splitarray([@sizes], $array) + ] while @$array && (!defined $size || $size--); + return @array; +} + +sub typecast { } # typecast is called for both objects AND scalar types + # check ref of the second parameter (first is the object) + # return undef if you don't want to handle it + +# ====================================================================== + +package SOAP::Client; + + +use SOAP::Lite::Utils; + +$VERSION = $SOAP::Lite::VERSION; +sub BEGIN { + __PACKAGE__->__mk_accessors(qw(endpoint code message + is_success status options)); +} + +# ====================================================================== + +package SOAP::Server::Object; + +sub gen_id; *gen_id = \&SOAP::Serializer::gen_id; + +my %alive; +my %objects; + +sub objects_by_reference { + shift; + while (@_) { + @alive{shift()} = ref $_[0] + ? shift + : sub { + $_[1]-$_[$_[5] ? 5 : 4] > $SOAP::Constants::OBJS_BY_REF_KEEPALIVE + } + } + keys %alive; +} + +sub reference { + my $self = shift; + my $stamp = time; + my $object = shift; + my $id = $stamp . $self->gen_id($object); + + # this is code for garbage collection + my $time = time; + my $type = ref $object; + my @objects = grep { $objects{$_}->[1] eq $type } keys %objects; + for (grep { $alive{$type}->(scalar @objects, $time, @{$objects{$_}}) } @objects) { + delete $objects{$_}; + } + + $objects{$id} = [$object, $type, $stamp]; + bless { id => $id } => ref $object; +} + +sub references { + my $self = shift; + return @_ unless %alive; # small optimization + return map { + ref($_) && exists $alive{ref $_} + ? $self->reference($_) + : $_ + } @_; +} + +sub object { + my $self = shift; + my $class = ref($self) || $self; + my $object = shift; + return $object unless ref($object) && $alive{ref $object} && exists $object->{id}; + + my $reference = $objects{$object->{id}}; + die "Object with specified id couldn't be found\n" unless ref $reference->[0]; + + $reference->[3] = time; # last access time + return $reference->[0]; # reference to actual object +} + +sub objects { + my $self = shift; + return @_ unless %alive; # small optimization + return map { + ref($_) && exists $alive{ref $_} && exists $_->{id} + ? $self->object($_) + : $_ + } @_; +} + +# ====================================================================== + +package SOAP::Server::Parameters; + +sub byNameOrOrder { + unless (UNIVERSAL::isa($_[-1] => 'SOAP::SOM')) { + warn "Last parameter is expected to be envelope\n" if $^W; + pop; + return @_; + } + my $params = pop->method; + my @mandatory = ref $_[0] eq 'ARRAY' + ? @{shift()} + : die "list of parameters expected as the first parameter for byName"; + my $byname = 0; + my @res = map { $byname += exists $params->{$_}; $params->{$_} } @mandatory; + return $byname + ? @res + : @_; +} + +sub byName { + unless (UNIVERSAL::isa($_[-1] => 'SOAP::SOM')) { + warn "Last parameter is expected to be envelope\n" if $^W; + pop; + return @_; + } + return @{pop->method}{ref $_[0] eq 'ARRAY' ? @{shift()} : die "list of parameters expected as the first parameter for byName"}; +} + +# ====================================================================== + +package SOAP::Server; + +use Carp (); +use Scalar::Util qw(weaken); +sub DESTROY { SOAP::Trace::objects('()') } + +sub initialize { + return ( + packager => SOAP::Packager::MIME->new, + transport => SOAP::Transport->new, + serializer => SOAP::Serializer->new, + deserializer => SOAP::Deserializer->new, + on_action => sub { ; }, + on_dispatch => sub { + return; + }, + ); +} + +sub new { + my $self = shift; + return $self if ref $self; + + unless (ref $self) { + my $class = $self; + my(@params, @methods); + + while (@_) { + my($method, $params) = splice(@_,0,2); + $class->can($method) + ? push(@methods, $method, $params) + : $^W && Carp::carp "Unrecognized parameter '$method' in new()"; + } + + $self = bless { + _dispatch_to => [], + _dispatch_with => {}, + _dispatched => [], + _action => '', + _options => {}, + } => $class; + unshift(@methods, $self->initialize); + no strict qw(refs); + while (@methods) { + my($method, $params) = splice(@methods,0,2); + $self->$method(ref $params eq 'ARRAY' ? @$params : $params) + } + SOAP::Trace::objects('()'); + } + + Carp::carp "Odd (wrong?) number of parameters in new()" + if $^W && (@_ & 1); + + no strict qw(refs); + while (@_) { + my($method, $params) = splice(@_,0,2); + $self->can($method) + ? $self->$method(ref $params eq 'ARRAY' ? @$params : $params) + : $^W && Carp::carp "Unrecognized parameter '$method' in new()" + } + + return $self; +} + +sub init_context { + my $self = shift; + $self->{'_deserializer'}->{'_context'} = $self; + # weaken circular reference to avoid a memory hole + weaken($self->{'_deserializer'}->{'_context'}); + + $self->{'_serializer'}->{'_context'} = $self; + # weaken circular reference to avoid a memory hole + weaken($self->{'_serializer'}->{'_context'}); +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(serializer deserializer transport)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new(); + if (@_) { + my $context = $self->{$field}->{'_context'}; # save the old context + $self->{$field} = shift; + $self->{$field}->{'_context'} = $context; # restore the old context + return $self; + } + else { + return $self->{$field}; + } + } + } + + for my $method (qw(action myuri options dispatch_with packager)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new(); + (@_) + ? do { + $self->{$field} = shift; + return $self; + } + : return $self->{$field}; + } + } + for my $method (qw(on_action on_dispatch)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + # my $self = shift; + return $self->{$field} unless @_; + local $@; + # commented out because that 'eval' was unsecure + # > ref $_[0] eq 'CODE' ? shift : eval shift; + # Am I paranoid enough? + $self->{$field} = shift; + Carp::croak $@ if $@; + Carp::croak "$method() expects subroutine (CODE) or string that evaluates into subroutine (CODE)" + unless ref $self->{$field} eq 'CODE'; + return $self; + } + } + + # __PACKAGE__->__mk_accessors( qw(dispatch_to) ); + for my $method (qw(dispatch_to)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + # my $self = shift; + (@_) + ? do { + $self->{$field} = [@_]; + return $self; + } + : return @{ $self->{$field} }; + } + } +} + +sub objects_by_reference { + my $self = shift; + $self = $self->new() if not ref $self; + @_ + ? (SOAP::Server::Object->objects_by_reference(@_), return $self) + : SOAP::Server::Object->objects_by_reference; +} + +sub dispatched { + my $self = shift; + $self = $self->new() if not ref $self; + @_ + ? (push(@{$self->{_dispatched}}, @_), return $self) + : return @{$self->{_dispatched}}; +} + +sub find_target { + my $self = shift; + my $request = shift; + + # try to find URI/method from on_dispatch call first + my($method_uri, $method_name) = $self->on_dispatch->($request); + + # if nothing there, then get it from envelope itself + $request->match((ref $request)->method); + ($method_uri, $method_name) = ($request->namespaceuriof || '', $request->dataof->name) + unless $method_name; + + $self->on_action->(my $action = $self->action, $method_uri, $method_name); + + # check to avoid security vulnerability: Protected->Unprotected::method(@parameters) + # see for more details: http://www.phrack.org/phrack/58/p58-0x09 + die "Denied access to method ($method_name)\n" unless $method_name =~ /^\w+$/; + + my ($class, $static); + # try to bind directly + if (defined($class = $self->dispatch_with->{$method_uri} + || $self->dispatch_with->{$action || ''} + || ($action =~ /^"(.+)"$/ + ? $self->dispatch_with->{$1} + : undef))) { + # return object, nothing else to do here + return ($class, $method_uri, $method_name) if ref $class; + $static = 1; + } + else { + die "URI path shall map to class" unless defined ($class = URI->new($method_uri)->path); + + for ($class) { s!^/|/$!!g; s!/!::!g; s/^$/main/; } + die "Failed to access class ($class)" unless $class =~ /^(\w[\w:]*)$/; + + my $fullname = "$class\::$method_name"; + foreach ($self->dispatch_to) { + return ($_, $method_uri, $method_name) if ref eq $class; # $OBJECT + next if ref; # skip other objects + # will ignore errors, because it may complain on + # d:\foo\bar, which is PATH and not regexp + eval { + $static ||= $class =~ /^$_$/ # MODULE + || $fullname =~ /^$_$/ # MODULE::method + || $method_name =~ /^$_$/ && ($class eq 'main'); # method ('main' assumed) + }; + } + } + + no strict 'refs'; + +# TODO - sort this mess out: +# The task is to test whether the class in question has already been loaded. +# +# SOAP::Lite 0.60: +# unless (defined %{"${class}::"}) { +# Patch to SOAP::Lite 0.60: +# The following patch does not work for packages defined within a BEGIN block +# unless (exists($INC{join '/', split /::/, $class.'.pm'})) { +# Combination of 0.60 and patch did not work reliably, either. +# +# Now we do the following: Check whether the class is main (always loaded) +# or the class implements the method in question +# or the package exists as file in %INC. +# +# This is still sort of a hack - but I don't know anything better +# If you have some idea, please help me out... +# + unless (($class eq 'main') || $class->can($method_name) + || exists($INC{join '/', split /::/, $class . '.pm'})) { + + # allow all for static and only specified path for dynamic bindings + local @INC = (($static ? @INC : ()), grep {!ref && m![/\\.]!} $self->dispatch_to()); + eval 'local $^W; ' . "require $class"; + die "Failed to access class ($class): $@" if $@; + $self->dispatched($class) unless $static; + } + + die "Denied access to method ($method_name) in class ($class)" + unless $static || grep {/^$class$/} $self->dispatched; + + return ($class, $method_uri, $method_name); +} + +sub handle { + SOAP::Trace::trace('()'); + my $self = shift; + $self = $self->new if !ref $self; # inits the server when called in a static context + $self->init_context(); + # we want to restore it when we are done + local $SOAP::Constants::DEFAULT_XML_SCHEMA + = $SOAP::Constants::DEFAULT_XML_SCHEMA; + + # SOAP version WILL NOT be restored when we are done. + # is it problem? + + my $result = eval { + local $SIG{__DIE__}; + # why is this here: + $self->serializer->soapversion(1.1); + my $request = eval { $self->deserializer->deserialize($_[0]) }; + + die SOAP::Fault + ->faultcode($SOAP::Constants::FAULT_VERSION_MISMATCH) + ->faultstring($@) + if $@ && $@ =~ /^$SOAP::Constants::WRONG_VERSION/; + + die "Application failed during request deserialization: $@" if $@; + my $som = ref $request; + die "Can't find root element in the message" + unless $request->match($som->envelope); + $self->serializer->soapversion(SOAP::Lite->soapversion); + $self->serializer->xmlschema($SOAP::Constants::DEFAULT_XML_SCHEMA + = $self->deserializer->xmlschema) + if $self->deserializer->xmlschema; + + die SOAP::Fault + ->faultcode($SOAP::Constants::FAULT_MUST_UNDERSTAND) + ->faultstring("Unrecognized header has mustUnderstand attribute set to 'true'") + if !$SOAP::Constants::DO_NOT_CHECK_MUSTUNDERSTAND && + grep { + $_->mustUnderstand + && (!$_->actor || $_->actor eq $SOAP::Constants::NEXT_ACTOR) + } $request->dataof($som->headers); + + die "Can't find method element in the message" + unless $request->match($som->method); + # TODO - SOAP::Dispatcher plugs in here + # my $handler = $self->dispatcher->find_handler($request); + my($class, $method_uri, $method_name) = $self->find_target($request); + my @results = eval { + local $^W; + my @parameters = $request->paramsin; + + # SOAP::Trace::dispatch($fullname); + SOAP::Trace::parameters(@parameters); + + push @parameters, $request + if UNIVERSAL::isa($class => 'SOAP::Server::Parameters'); + + no strict qw(refs); + SOAP::Server::Object->references( + defined $parameters[0] + && ref $parameters[0] + && UNIVERSAL::isa($parameters[0] => $class) + ? do { + my $object = shift @parameters; + SOAP::Server::Object->object(ref $class + ? $class + : $object + )->$method_name(SOAP::Server::Object->objects(@parameters)), + + # send object back as a header + # preserve name, specify URI + SOAP::Header + ->uri($SOAP::Constants::NS_SL_HEADER => $object) + ->name($request->dataof($som->method.'/[1]')->name) + } # end do block + + # SOAP::Dispatcher will plug-in here as well + # $handler->dispatch(SOAP::Server::Object->objects(@parameters) + : $class->$method_name(SOAP::Server::Object->objects(@parameters)) ); + }; # end eval block + SOAP::Trace::result(@results); + + # let application errors pass through with 'Server' code + die ref $@ + ? $@ + : $@ =~ /^Can\'t locate object method "$method_name"/ + ? "Failed to locate method ($method_name) in class ($class)" + : SOAP::Fault->faultcode($SOAP::Constants::FAULT_SERVER)->faultstring($@) + if $@; + + my $result = $self->serializer + ->prefix('s') # distinguish generated element names between client and server + ->uri($method_uri) + ->envelope(response => $method_name . 'Response', @results); + return $result; + }; + + # void context + return unless defined wantarray; + + # normal result + return $result unless $@; + + # check fails, something wrong with message + return $self->make_fault($SOAP::Constants::FAULT_CLIENT, $@) unless ref $@; + + # died with SOAP::Fault + return $self->make_fault($@->faultcode || $SOAP::Constants::FAULT_SERVER, + $@->faultstring || 'Application error', + $@->faultdetail, $@->faultactor) + if UNIVERSAL::isa($@ => 'SOAP::Fault'); + + # died with complex detail + return $self->make_fault($SOAP::Constants::FAULT_SERVER, 'Application error' => $@); + +} # end of handle() + +sub make_fault { + my $self = shift; + my($code, $string, $detail, $actor) = @_; + $self->serializer->fault($code, $string, $detail, $actor || $self->myuri); +} + +# ====================================================================== + +package SOAP::Trace; + +use Carp (); + +my @list = qw( + transport dispatch result + parameters headers objects + method fault freeform + trace debug); +{ + no strict 'refs'; + for (@list) { + *$_ = sub {} + } +} + +sub defaultlog { + my $caller = (caller(1))[3]; # the 4th element returned by caller is the subroutine namea + $caller = (caller(2))[3] if $caller =~ /eval/; + chomp(my $msg = join ' ', @_); + printf STDERR "%s: %s\n", $caller, $msg; +} + +sub import { + no strict 'refs'; + local $^W; + my $pack = shift; + my(@notrace, @symbols); + for (@_) { + if (ref eq 'CODE') { + my $call = $_; + foreach (@symbols) { *$_ = sub { $call->(@_) } } + @symbols = (); + } + else { + local $_ = $_; + my $minus = s/^-//; + my $all = $_ eq 'all'; + Carp::carp "Illegal symbol for tracing ($_)" unless $all || $pack->can($_); + $minus ? push(@notrace, $all ? @list : $_) : push(@symbols, $all ? @list : $_); + } + } + # TODO - I am getting a warning here about redefining a subroutine + foreach (@symbols) { *$_ = \&defaultlog } + foreach (@notrace) { *$_ = sub {} } +} + +# ====================================================================== + +package SOAP::Custom::XML::Data; + +use vars qw(@ISA $AUTOLOAD); +@ISA = qw(SOAP::Data); + +use overload fallback => 1, '""' => sub { shift->value }; + +sub _compileit { + no strict 'refs'; + my $method = shift; + *$method = sub { + return __PACKAGE__->SUPER::name($method => $_[0]->attr->{$method}) + if exists $_[0]->attr->{$method}; + my @elems = grep { + ref $_ && UNIVERSAL::isa($_ => __PACKAGE__) + && $_->SUPER::name =~ /(^|:)$method$/ + } $_[0]->value; + return wantarray? @elems : $elems[0]; + }; +} + +sub BEGIN { foreach (qw(name type import use)) { _compileit($_) } } + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY'; + + _compileit($method); + goto &$AUTOLOAD; +} + +# ====================================================================== + +package SOAP::Custom::XML::Deserializer; + +use vars qw(@ISA); +@ISA = qw(SOAP::Deserializer); + +sub decode_value { + my $self = shift; + my $ref = shift; + my($name, $attrs, $children, $value) = @$ref; + # base class knows what to do with it + return $self->SUPER::decode_value($ref) if exists $attrs->{href}; + + SOAP::Custom::XML::Data + -> SOAP::Data::name($name) + -> attr($attrs) + -> set_value(ref $children && @$children + ? map(scalar(($self->decode_object($_))[1]), @$children) + : $value); +} + +# ====================================================================== + +package SOAP::Schema::Deserializer; + +use vars qw(@ISA); +@ISA = qw(SOAP::Custom::XML::Deserializer); + +# ====================================================================== + +package SOAP::Schema::WSDL; + +use vars qw(%imported @ISA); +@ISA = qw(SOAP::Schema); + +sub new { + my $self = shift; + + unless (ref $self) { + my $class = $self; + $self = $class->SUPER::new(@_); + } + return $self; +} + +sub base { + my $self = shift->new; + @_ + ? ($self->{_base} = shift, return $self) + : return $self->{_base}; +} + +sub import { + my $self = shift->new; + my $s = shift; + my $base = shift || $self->base || die "Missing base argument for ", __PACKAGE__, "\n"; + + my @a = $s->import; + local %imported = %imported; + foreach (@a) { + next unless $_->location; + my $location = URI->new_abs($_->location->value, $base)->as_string; + if ($imported{$location}++) { + warn "Recursion loop detected in service description from '$location'. Ignored\n" if $^W; + return $s; + } + my $root = $self->import( + $self->deserializer->deserialize( + $self->access($location) + )->root, $location); + + $root->SOAP::Data::name eq 'definitions' ? $s->set_value($s->value, $root->value) : + $root->SOAP::Data::name eq 'schema' ? do { # add element if there is no one + $s->set_value($s->value, $self->deserializer->deserialize('')->root) unless $s->types; + $s->types->set_value($s->types->value, $root) } : + die "Don't know what to do with '@{[$root->SOAP::Data::name]}' in schema imported from '$location'\n"; + } + + # return the parsed WSDL file + $s; +} + +# TODO - This is woefully incomplete! +sub parse_schema_element { + my $element = shift; + # Current element is a complex type + if (defined($element->complexType)) { + my @elements = (); + if (defined($element->complexType->sequence)) { + + foreach my $e ($element->complexType->sequence->element) { + push @elements,parse_schema_element($e); + } + } + return @elements; + } + elsif ($element->simpleType) { + } + else { + return $element; + } +} + +sub parse { + my $self = shift->new; + my($s, $service, $port) = @_; + my @result; + + # handle imports + $self->import($s); + + # handle descriptions without , aka tModel-type descriptions + my @services = $s->service; + my $tns = $s->{'_attr'}->{'targetNamespace'}; + # if there is no element we'll provide it + @services = $self->deserializer->deserialize(<<"FAKE")->root->service unless @services; + + + + + +FAKE + + my $has_warned = 0; + foreach (@services) { + my $name = $_->name; + next if $service && $service ne $name; + my %services; + foreach ($_->port) { + next if $port && $port ne $_->name; + my $binding = SOAP::Utils::disqualify($_->binding); + my $endpoint = ref $_->address ? $_->address->location : undef; + foreach ($s->binding) { + # is this a SOAP binding? + next unless grep { $_->uri eq 'http://schemas.xmlsoap.org/wsdl/soap/' } $_->binding; + next unless $_->name eq $binding; + my $default_style = $_->binding->style; + my $porttype = SOAP::Utils::disqualify($_->type); + foreach ($_->operation) { + my $opername = $_->name; + $services{$opername} = {}; # should be initialized in 5.7 and after + my $soapaction = $_->operation->soapAction; + my $invocationStyle = $_->operation->style || $default_style || "rpc"; + my $encodingStyle = $_->input->body->use || "encoded"; + my $namespace = $_->input->body->namespace || $tns; + my @parts; + foreach ($s->portType) { + next unless $_->name eq $porttype; + foreach ($_->operation) { + next unless $_->name eq $opername; + my $inputmessage = SOAP::Utils::disqualify($_->input->message); + foreach my $msg ($s->message) { + next unless $msg->name eq $inputmessage; + if ($invocationStyle eq "document" && $encodingStyle eq "literal") { +# warn "document/literal support is EXPERIMENTAL in SOAP::Lite" +# if !$has_warned && ($has_warned = 1); + my ($input_ns,$input_name) = SOAP::Utils::splitqname($msg->part->element); + foreach my $schema ($s->types->schema) { + foreach my $element ($schema->element) { + next unless $element->name eq $input_name; + push @parts,parse_schema_element($element); + } + $services{$opername}->{parameters} = [ @parts ]; + } + } + else { + # TODO - support all combinations of doc|rpc/lit|enc. + #warn "$invocationStyle/$encodingStyle is not supported in this version of SOAP::Lite"; + @parts = $msg->part; + $services{$opername}->{parameters} = [ @parts ]; + } + } + } + + for ($services{$opername}) { + $_->{endpoint} = $endpoint; + $_->{soapaction} = $soapaction; + $_->{namespace} = $namespace; + # $_->{parameters} = [@parts]; + } + } + } + } + } + # fix nonallowed characters in package name, and add 's' if started with digit + for ($name) { s/\W+/_/g; s/^(\d)/s$1/ } + push @result, $name => \%services; + } + return @result; +} + +# ====================================================================== + +# Naming? SOAP::Service::Schema? +package SOAP::Schema; + +use Carp (); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + return $self if ref $self; + unless (ref $self) { + my $class = $self; + require LWP::UserAgent; + $self = bless { + '_deserializer' => SOAP::Schema::Deserializer->new, + '_useragent' => LWP::UserAgent->new, + }, $class; + + SOAP::Trace::objects('()'); + } + + Carp::carp "Odd (wrong?) number of parameters in new()" if $^W && (@_ & 1); + no strict qw(refs); + while (@_) { + my $method = shift; + $self->$method(shift) if $self->can($method) + } + + return $self; +} + +sub schema { + warn "SOAP::Schema->schema has been deprecated. " + . "Please use SOAP::Schema->schema_url instead."; + return shift->schema_url(@_); +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(deserializer schema_url services useragent stub cache_dir cache_ttl)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + @_ ? ($self->{$field} = shift, return $self) : return $self->{$field}; + } + } +} + +sub parse { + my $self = shift; + my $s = $self->deserializer->deserialize($self->access)->root; + # here should be something that defines what schema description we want to use + $self->services({SOAP::Schema::WSDL->base($self->schema_url)->parse($s, @_)}); +} + +sub refresh_cache { + my $self = shift; + my ($filename,$contents) = @_; + open CACHE,">$filename" or Carp::croak "Could not open cache file for writing: $!"; + print CACHE $contents; + close CACHE; +} + +sub load { + my $self = shift->new; + local $^W; # supress warnings about redefining + foreach (keys %{$self->services || Carp::croak 'Nothing to load. Schema is not specified'}) { + # TODO - check age of cached file, and delete if older than configured amount + if ($self->cache_dir) { + my $cached_file = File::Spec->catfile($self->cache_dir,$_.".pm"); + my $ttl = $self->cache_ttl || $SOAP::Constants::DEFAULT_CACHE_TTL; + open (CACHE, "<$cached_file"); + my @stat = stat($cached_file) unless eof(CACHE); + close CACHE; + if (@stat) { + # Cache exists + my $cache_lived = time() - $stat[9]; + if ($ttl > 0 && $cache_lived > $ttl) { + $self->refresh_cache($cached_file,$self->generate_stub($_)); + } + } + else { + # Cache doesn't exist + $self->refresh_cache($cached_file,$self->generate_stub($_)); + } + push @INC,$self->cache_dir; + eval "require $_" or Carp::croak "Could not load cached file: $@"; + } + else { + eval $self->generate_stub($_) or Carp::croak "Bad stub: $@"; + } + } + $self; +} + +sub access { + my $self = shift->new; + my $url = shift || $self->schema_url || Carp::croak 'Nothing to access. URL is not specified'; + $self->useragent->env_proxy if $ENV{'HTTP_proxy'}; + + my $req = HTTP::Request->new(GET => $url); + $req->proxy_authorization_basic($ENV{'HTTP_proxy_user'}, $ENV{'HTTP_proxy_pass'}) + if ($ENV{'HTTP_proxy_user'} && $ENV{'HTTP_proxy_pass'}); + + my $resp = $self->useragent->request($req); + $resp->is_success ? $resp->content : die "Service description '$url' can't be loaded: ", $resp->status_line, "\n"; +} + +sub generate_stub { + my $self = shift->new; + my $package = shift; + my $services = $self->services->{$package}; + my $schema_url = $self->schema_url; + + $self->{'_stub'} = <<"EOP"; +package $package; +# Generated by SOAP::Lite (v$SOAP::Lite::VERSION) for Perl -- soaplite.com +# Copyright (C) 2000-2006 Paul Kulchenko, Byrne Reese +# -- generated at [@{[scalar localtime]}] +EOP + $self->{'_stub'} .= "# -- generated from $schema_url\n" if $schema_url; + $self->{'_stub'} .= 'my %methods = ('."\n"; + foreach my $service (keys %$services) { + $self->{'_stub'} .= "$service => {\n"; + foreach (qw(endpoint soapaction namespace)) { + $self->{'_stub'} .= " $_ => '".$services->{$service}{$_}."',\n"; + } + $self->{'_stub'} .= " parameters => [\n"; + foreach (@{$services->{$service}{parameters}}) { + # This is a workaround for https://sourceforge.net/tracker/index.php?func=detail&aid=2001592&group_id=66000&atid=513017 + next unless ref $_; + $self->{'_stub'} .= " SOAP::Data->new(name => '".$_->name."', type => '".$_->type."', attr => {"; + $self->{'_stub'} .= do { + my %attr = %{$_->attr}; + join(', ', map {"'$_' => '$attr{$_}'"} + grep {/^xmlns:(?!-)/} + keys %attr); + }; + $self->{'_stub'} .= "}),\n"; + } + $self->{'_stub'} .= " ], # end parameters\n"; + $self->{'_stub'} .= " }, # end $service\n"; + } + $self->{'_stub'} .= "); # end my %methods\n"; + $self->{'_stub'} .= <<'EOP'; + +use SOAP::Lite; +use Exporter; +use Carp (); + +use vars qw(@ISA $AUTOLOAD @EXPORT_OK %EXPORT_TAGS); +@ISA = qw(Exporter SOAP::Lite); +@EXPORT_OK = (keys %methods); +%EXPORT_TAGS = ('all' => [@EXPORT_OK]); + +sub _call { + my ($self, $method) = (shift, shift); + my $name = UNIVERSAL::isa($method => 'SOAP::Data') ? $method->name : $method; + my %method = %{$methods{$name}}; + $self->proxy($method{endpoint} || Carp::croak "No server address (proxy) specified") + unless $self->proxy; + my @templates = @{$method{parameters}}; + my @parameters = (); + foreach my $param (@_) { + if (@templates) { + my $template = shift @templates; + my ($prefix,$typename) = SOAP::Utils::splitqname($template->type); + my $method = 'as_'.$typename; + # TODO - if can('as_'.$typename) {...} + my $result = $self->serializer->$method($param, $template->name, $template->type, $template->attr); + push(@parameters, $template->value($result->[2])); + } + else { + push(@parameters, $param); + } + } + $self->endpoint($method{endpoint}) + ->ns($method{namespace}) + ->on_action(sub{qq!"$method{soapaction}"!}); +EOP + my $namespaces = $self->deserializer->ids->[1]; + foreach my $key (keys %{$namespaces}) { + my ($ns,$prefix) = SOAP::Utils::splitqname($key); + $self->{'_stub'} .= ' $self->serializer->register_ns("'.$namespaces->{$key}.'","'.$prefix.'");'."\n" + if ($ns eq "xmlns"); + } + $self->{'_stub'} .= <<'EOP'; + my $som = $self->SUPER::call($method => @parameters); + if ($self->want_som) { + return $som; + } + UNIVERSAL::isa($som => 'SOAP::SOM') ? wantarray ? $som->paramsall : $som->result : $som; +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(want_som)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + @_ ? ($self->{$field} = shift, return $self) : return $self->{$field}; + } + } +} +no strict 'refs'; +for my $method (@EXPORT_OK) { + my %method = %{$methods{$method}}; + *$method = sub { + my $self = UNIVERSAL::isa($_[0] => __PACKAGE__) + ? ref $_[0] + ? shift # OBJECT + # CLASS, either get self or create new and assign to self + : (shift->self || __PACKAGE__->self(__PACKAGE__->new)) + # function call, either get self or create new and assign to self + : (__PACKAGE__->self || __PACKAGE__->self(__PACKAGE__->new)); + $self->_call($method, @_); + } +} + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY' || $method eq 'want_som'; + die "Unrecognized method '$method'. List of available method(s): @EXPORT_OK\n"; +} + +1; +EOP + return $self->stub; +} + +# ====================================================================== + +package SOAP; + +use vars qw($AUTOLOAD); +require URI; + +my $soap; # shared between SOAP and SOAP::Lite packages + +{ + no strict 'refs'; + *AUTOLOAD = sub { + local($1,$2); + my($package, $method) = $AUTOLOAD =~ m/(?:(.+)::)([^:]+)$/; + return if $method eq 'DESTROY'; + + my $soap = ref $_[0] && UNIVERSAL::isa($_[0] => 'SOAP::Lite') + ? $_[0] + : $soap + || die "SOAP:: prefix shall only be used in combination with +autodispatch option\n"; + + my $uri = URI->new($soap->uri); + my $currenturi = $uri->path; + $package = ref $_[0] && UNIVERSAL::isa($_[0] => 'SOAP::Lite') + ? $currenturi + : $package eq 'SOAP' + ? ref $_[0] || ($_[0] eq 'SOAP' + ? $currenturi || Carp::croak "URI is not specified for method call" + : $_[0]) + : $package eq 'main' + ? $currenturi || $package + : $package; + + # drop first parameter if it's a class name + { + my $pack = $package; + for ($pack) { s!^/!!; s!/!::!g; } + shift @_ if @_ && !ref $_[0] && ($_[0] eq $pack || $_[0] eq 'SOAP') + || ref $_[0] && UNIVERSAL::isa($_[0] => 'SOAP::Lite'); + } + + for ($package) { s!::!/!g; s!^/?!/!; } + $uri->path($package); + + my $som = $soap->uri($uri->as_string)->call($method => @_); + UNIVERSAL::isa($som => 'SOAP::SOM') + ? wantarray + ? $som->paramsall + : $som->result + : $som; + }; +} + +# ====================================================================== + +package SOAP::Lite; + +use vars qw($AUTOLOAD @ISA); +use Carp (); + +use SOAP::Lite::Utils; +use SOAP::Constants; +use SOAP::Packager; + +use Scalar::Util qw(weaken); + +@ISA = qw(SOAP::Cloneable); + +# provide access to global/autodispatched object +sub self { + @_ > 1 + ? $soap = $_[1] + : $soap +} + +# no more warnings about "used only once" +*UNIVERSAL::AUTOLOAD if 0; + +sub autodispatched { \&{*UNIVERSAL::AUTOLOAD} eq \&{*SOAP::AUTOLOAD} }; + +sub soapversion { + my $self = shift; + my $version = shift or return $SOAP::Constants::SOAP_VERSION; + + ($version) = grep { + $SOAP::Constants::SOAP_VERSIONS{$_}->{NS_ENV} eq $version + } keys %SOAP::Constants::SOAP_VERSIONS + unless exists $SOAP::Constants::SOAP_VERSIONS{$version}; + + die qq!$SOAP::Constants::WRONG_VERSION Supported versions:\n@{[ + join "\n", map {" $_ ($SOAP::Constants::SOAP_VERSIONS{$_}->{NS_ENV})"} keys %SOAP::Constants::SOAP_VERSIONS + ]}\n! + unless defined($version) && defined(my $def = $SOAP::Constants::SOAP_VERSIONS{$version}); + + foreach (keys %$def) { + eval "\$SOAP::Constants::$_ = '$SOAP::Constants::SOAP_VERSIONS{$version}->{$_}'"; + } + + $SOAP::Constants::SOAP_VERSION = $version; + + return $self; +} + +BEGIN { SOAP::Lite->soapversion(1.1) } + +sub import { + my $pkg = shift; + my $caller = caller; + no strict 'refs'; + # emulate 'use SOAP::Lite 0.99' behavior + $pkg->require_version(shift) if defined $_[0] && $_[0] =~ /^\d/; + + while (@_) { + my $command = shift; + + my @parameters = UNIVERSAL::isa($_[0] => 'ARRAY') + ? @{shift()} + : shift + if @_ && $command ne 'autodispatch'; + + if ($command eq 'autodispatch' || $command eq 'dispatch_from') { + $soap = ($soap||$pkg)->new; + no strict 'refs'; + foreach ($command eq 'autodispatch' + ? 'UNIVERSAL' + : @parameters + ) { + my $sub = "${_}::AUTOLOAD"; + defined &{*$sub} + ? (\&{*$sub} eq \&{*SOAP::AUTOLOAD} + ? () + : Carp::croak "$sub already assigned and won't work with DISPATCH. Died") + : (*$sub = *SOAP::AUTOLOAD); + } + } + elsif ($command eq 'service') { + foreach (keys %{SOAP::Schema->schema_url(shift(@parameters))->parse(@parameters)->load->services}) { + $_->export_to_level(1, undef, ':all'); + } + } + elsif ($command eq 'debug' || $command eq 'trace') { + SOAP::Trace->import(@parameters ? @parameters : 'all'); + } + elsif ($command eq 'import') { + local $^W; # supress warnings about redefining + my $package = shift(@parameters); + $package->export_to_level(1, undef, @parameters ? @parameters : ':all') if $package; + } + else { + Carp::carp "Odd (wrong?) number of parameters in import(), still continue" if $^W && !(@parameters & 1); + $soap = ($soap||$pkg)->$command(@parameters); + } + } +} + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + return $self if ref $self; + unless (ref $self) { + my $class = $self; + # Check whether we can clone. Only the SAME class allowed, no inheritance + $self = ref($soap) eq $class ? $soap->clone : { + _transport => SOAP::Transport->new, + _serializer => SOAP::Serializer->new, + _deserializer => SOAP::Deserializer->new, + _packager => SOAP::Packager::MIME->new, + _schema => undef, + _autoresult => 0, + _on_action => sub { sprintf '"%s#%s"', shift || '', shift }, + _on_fault => sub {ref $_[1] ? return $_[1] : Carp::croak $_[0]->transport->is_success ? $_[1] : $_[0]->transport->status}, + }; + bless $self => $class; + $self->on_nonserialized($self->on_nonserialized || $self->serializer->on_nonserialized); + SOAP::Trace::objects('()'); + } + + Carp::carp "Odd (wrong?) number of parameters in new()" if $^W && (@_ & 1); + no strict qw(refs); + while (@_) { + my($method, $params) = splice(@_,0,2); + $self->can($method) + ? $self->$method(ref $params eq 'ARRAY' ? @$params : $params) + : $^W && Carp::carp "Unrecognized parameter '$method' in new()" + } + + return $self; +} + +sub init_context { + my $self = shift->new; + $self->{'_deserializer'}->{'_context'} = $self; + # weaken circular reference to avoid a memory hole + weaken $self->{'_deserializer'}->{'_context'}; + + $self->{'_serializer'}->{'_context'} = $self; + # weaken circular reference to avoid a memory hole + weaken $self->{'_serializer'}->{'_context'}; +} + +# Naming? wsdl_parser +sub schema { + my $self = shift; + if (@_) { + $self->{'_schema'} = shift; + return $self; + } + else { + if (!defined $self->{'_schema'}) { + $self->{'_schema'} = SOAP::Schema->new; + } + return $self->{'_schema'}; + } +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(serializer deserializer)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + if (@_) { + my $context = $self->{$field}->{'_context'}; # save the old context + $self->{$field} = shift; + $self->{$field}->{'_context'} = $context; # restore the old context + return $self; + } + else { + return $self->{$field}; + } + } + } + + __PACKAGE__->__mk_accessors( + qw(endpoint transport outputxml autoresult packager) + ); + # for my $method () { + # my $field = '_' . $method; + # *$method = sub { + # my $self = shift->new; + # @_ ? ($self->{$field} = shift, return $self) : return $self->{$field}; + # } + # } + for my $method (qw(on_action on_fault on_nonserialized)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + return $self->{$field} unless @_; + local $@; + # commented out because that 'eval' was unsecure + # > ref $_[0] eq 'CODE' ? shift : eval shift; + # Am I paranoid enough? + $self->{$field} = shift; + Carp::croak $@ if $@; + Carp::croak "$method() expects subroutine (CODE) or string that evaluates into subroutine (CODE)" + unless ref $self->{$field} eq 'CODE'; + return $self; + } + } + # SOAP::Transport Shortcuts + # TODO - deprecate proxy() in favor of new language endpoint_url() + no strict qw(refs); + for my $method (qw(proxy)) { + *$method = sub { + my $self = shift->new; + @_ ? ($self->transport->$method(@_), return $self) : return $self->transport->$method(); + } + } + + # SOAP::Seriailizer Shortcuts + for my $method (qw(autotype readable envprefix encodingStyle + encprefix multirefinplace encoding + typelookup header maptype xmlschema + uri ns_prefix ns_uri use_prefix use_default_ns + ns default_ns)) { + *$method = sub { + my $self = shift->new; + @_ ? ($self->serializer->$method(@_), return $self) : return $self->serializer->$method(); + } + } + + # SOAP::Schema Shortcuts + for my $method (qw(cache_dir cache_ttl)) { + *$method = sub { + my $self = shift->new; + @_ ? ($self->schema->$method(@_), return $self) : return $self->schema->$method(); + } + } +} + +sub parts { + my $self = shift; + $self->packager->parts(@_); + return $self; +} + +# Naming? wsdl +sub service { + my $self = shift->new; + return $self->{'_service'} unless @_; + $self->schema->schema_url($self->{'_service'} = shift); + my %services = %{$self->schema->parse(@_)->load->services}; + + Carp::croak "More than one service in service description. Service and port names have to be specified\n" + if keys %services > 1; + my $service = (keys %services)[0]->new; + return $service; +} + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY'; + + ref $_[0] or Carp::croak qq!Can\'t locate class method "$method" via package \"! . __PACKAGE__ .'\"'; + + no strict 'refs'; + *$AUTOLOAD = sub { + my $self = shift; + my $som = $self->call($method => @_); + return $self->autoresult && UNIVERSAL::isa($som => 'SOAP::SOM') + ? wantarray ? $som->paramsall : $som->result + : $som; + }; + goto &$AUTOLOAD; +} + +sub call { + SOAP::Trace::trace('()'); + my $self = shift; + + die "A service address has not been specified either by using SOAP::Lite->proxy() or a service description)\n" + unless defined $self->proxy && UNIVERSAL::isa($self->proxy => 'SOAP::Client'); + + $self->init_context(); + + my $serializer = $self->serializer; + $serializer->on_nonserialized($self->on_nonserialized); + + my $response = $self->transport->send_receive( + context => $self, # this is provided for context + endpoint => $self->endpoint, + action => scalar($self->on_action->($serializer->uriformethod($_[0]))), + # leave only parameters so we can later update them if required + envelope => $serializer->envelope(method => shift, @_), + encoding => $serializer->encoding, + parts => @{$self->packager->parts} ? $self->packager->parts : undef, + ); + + return $response if $self->outputxml; + + my $result = eval { $self->deserializer->deserialize($response) } + if $response; + + if (!$self->transport->is_success || # transport fault + $@ || # not deserializible + # fault message even if transport OK + # or no transport error (for example, fo TCP, POP3, IO implementations) + UNIVERSAL::isa($result => 'SOAP::SOM') && $result->fault) { + return ($self->on_fault->($self, $@ + ? $@ . ($response || '') + : $result) + || $result + ); + # ? # trick editors + } + # this might be trouble for connection close... + return unless $response; # nothing to do for one-ways + + # little bit tricky part that binds in/out parameters + if (UNIVERSAL::isa($result => 'SOAP::SOM') + && ($result->paramsout || $result->headers) + && $serializer->signature) { + my $num = 0; + my %signatures = map {$_ => $num++} @{$serializer->signature}; + for ($result->dataof(SOAP::SOM::paramsout), $result->dataof(SOAP::SOM::headers)) { + my $signature = join $;, $_->name, $_->type || ''; + if (exists $signatures{$signature}) { + my $param = $signatures{$signature}; + my($value) = $_->value; # take first value + + # fillup parameters + UNIVERSAL::isa($_[$param] => 'SOAP::Data') + ? $_[$param]->SOAP::Data::value($value) + : UNIVERSAL::isa($_[$param] => 'ARRAY') + ? (@{$_[$param]} = @$value) + : UNIVERSAL::isa($_[$param] => 'HASH') + ? (%{$_[$param]} = %$value) + : UNIVERSAL::isa($_[$param] => 'SCALAR') + ? (${$_[$param]} = $$value) + : ($_[$param] = $value) + } + } + } + return $result; +} # end of call() + +# ====================================================================== + +package SOAP::Lite::COM; + +require SOAP::Lite; + +sub required { + foreach (qw( + URI::_foreign URI::http URI::https + LWP::Protocol::http LWP::Protocol::https LWP::Authen::Basic LWP::Authen::Digest + HTTP::Daemon Compress::Zlib SOAP::Transport::HTTP + XMLRPC::Lite XMLRPC::Transport::HTTP + )) { + eval join ';', 'local $SIG{__DIE__}', "require $_"; + } +} + +sub new { required; SOAP::Lite->new(@_) } + +sub create; *create = \&new; # make alias. Somewhere 'new' is registered keyword + +sub soap; *soap = \&new; # also alias. Just to be consistent with .xmlrpc call + +sub xmlrpc { required; XMLRPC::Lite->new(@_) } + +sub server { required; shift->new(@_) } + +sub data { SOAP::Data->new(@_) } + +sub header { SOAP::Header->new(@_) } + +sub hash { +{@_} } + +sub instanceof { + my $class = shift; + die "Incorrect class name" unless $class =~ /^(\w[\w:]*)$/; + eval "require $class"; + $class->new(@_); +} + +# ====================================================================== + +1; + +__END__ + +=pod + +=head1 NAME + +SOAP::Lite - Perl's Web Services Toolkit + +=head1 DESCRIPTION + +SOAP::Lite is a collection of Perl modules which provides a simple and +lightweight interface to the Simple Object Access Protocol (SOAP) both on +client and server side. + +=head1 PERL VERSION WARNING + +SOAP::Lite 0.71 will be the last version of SOAP::Lite running on perl 5.005 + +Future versions of SOAP::Lite will require at least perl 5.6.0 + +If you have not had the time to upgrad your perl, you should consider this +now. + +=head1 OVERVIEW OF CLASSES AND PACKAGES + +=over + +=item F + +L - Main class provides all logic + +L - Transport backend + +L - Data objects + +L - Header Data Objects + +L - Serializes data structures to SOAP messages + +L - Deserializes SOAP messages into SOAP::SOM objects + +L - SOAP Message objects + +L - Provides access to common constants and defaults + +L - Tracing facilities + +L - Provides access and stub(s) for schema(s) + +L - WSDL implementation for SOAP::Schema + +L - Handles requests on server side + +SOAP::Server::Object - Handles objects-by-reference + +L - Provides support for Faults on server side + +L - A set of private and public utility subroutines + +=item F + +L - Provides an abstract class for implementing custom packagers. + +L - Provides MIME support to SOAP::Lite + +L - Provides DIME support to SOAP::Lite + +=item F + +L - Client interface to HTTP transport + +L - Server interface to HTTP transport + +L - CGI implementation of server interface + +L - Daemon implementation of server interface + +L - mod_perl implementation of server interface + +=item F + +L - Server interface to POP3 protocol + +=item F + +L - Client interface to SMTP/sendmail + +=item F + +L - Client interface to local transport + +=item F + +L - Server interface to TCP protocol + +L - Client interface to TCP protocol + +=item F + +L - Server interface to IO transport + +=back + +=head1 METHODS + +All accessor methods return the current value when called with no arguments, +while returning the object reference itself when called with a new value. +This allows the set-attribute calls to be chained together. + +=over + +=item new(optional key/value pairs) + + $client = SOAP::Lite->new(proxy => $endpoint) + +Constructor. Many of the accessor methods defined here may be initialized at +creation by providing their name as a key, followed by the desired value. +The example provides the value for the proxy element of the client. + +=item transport(optional transport object) + + $transp = $client->transport( ); + +Gets or sets the transport object used for sending/receiving SOAP messages. + +See L for details. + +=item serializer(optional serializer object) + + $serial = $client->serializer( ) + +Gets or sets the serializer object used for creating XML messages. + +See L for details. + +=item packager(optional packager object) + + $packager = $client->packager( ) + +Provides access to the C object that the client uses to manage +the use of attachments. The default packager is a MIME packager, but unless +you specify parts to send, no MIME formatting will be done. + +See also: L. + +=item proxy(endpoint, optional extra arguments) + + $client->proxy('http://soap.xml.info/ endPoint'); + +The proxy is the server or endpoint to which the client is going to connect. +This method allows the setting of the endpoint, along with any extra +information that the transport object may need when communicating the request. + +This method is actually an alias to the proxy method of L. +It is the same as typing: + + $client->transport( )->proxy(...arguments); + +Extra parameters can be passed to proxy() - see below. + +=over + +=item compress_threshold + +See L in L. + +=item All initialization options from the underlying transport layer + +The options for HTTP(S) are the same as for LWP::UserAgent's new() method. + +A common option is to create a instance of HTTP::Cookies and pass it as +cookie_jar option: + + my $cookie_jar = HTTP::Cookies->new() + $client->proxy('http://www.example.org/webservice', + cookie_jar => $cookie_jar, + ); + +=back + +For example, if you wish to set the HTTP timeout for a SOAP::Lite client to 5 +seconds, use the following code: + + my $soap = SOAP::Lite + ->uri($uri) + ->proxy($proxyUrl, timeout => 5 ); + +See L. + +=item endpoint(optional new endpoint address) + + $client->endpoint('http://soap.xml.info/ newPoint') + +It may be preferable to set a new endpoint without the additional work of +examining the new address for protocol information and checking to ensure the +support code is loaded and available. This method allows the caller to change +the endpoint that the client is currently set to connect to, without +reloading the relevant transport code. Note that the proxy method must have +been called before this method is used. + +=item service(service URL) + + $client->service('http://svc.perl.org/Svc.wsdl'); + +C offers some support for creating method stubs from service +descriptions. At present, only WSDL support is in place. This method loads +the specified WSDL schema and uses it as the basis for generating stubs. + +=item outputxml(boolean) + + $client->outputxml('true'); + +When set to a true value, the raw XML is returned by the call to a remote +method. + +The default is to return the a L object (false). + +=item autotype(boolean) + + $client->autotype(0); + +This method is a shortcut for: + + $client->serializer->autotype(boolean); + +By default, the serializer tries to automatically deduce types for the data +being sent in a message. Setting a false value with this method disables the +behavior. + +=item readable(boolean) + + $client->readable(1); + +This method is a shortcut for: + + $client->serializer->readable(boolean); + +When this is used to set a true value for this property, the generated XML +sent to the endpoint has extra characters (spaces and new lines) added in to +make the XML itself more readable to human eyes (presumably for debugging). +The default is to not send any additional characters. + +=item default_ns($uri) + +Sets the default namespace for the request to the specified uri. This +overrides any previous namespace declaration that may have been set using a +previous call to C or C. Setting the default namespace +causes elements to be serialized without a namespace prefix, like this: + + + + + + + + + +Some .NET web services have been reported to require this XML namespace idiom. + +=item ns($uri,$prefix=undef) + +Sets the namespace uri and optionally the namespace prefix for the request to +the specified values. This overrides any previous namespace declaration that +may have been set using a previous call to C or C. + +If a prefix is not specified, one will be generated for you automatically. +Setting the namespace causes elements to be serialized with a declared +namespace prefix, like this: + + + + + + + + + +=item use_prefix(boolean) + +Deprecated. Use the C and C methods described above. + +Shortcut for C<< serializer->use_prefix() >>. This lets you turn on/off the +use of a namespace prefix for the children of the /Envelope/Body element. +Default is 'true'. + +When use_prefix is set to 'true', serialized XML will look like this: + + + + + + + +When use_prefix is set to 'false', serialized XML will look like this: + + + + + + + +Some .NET web services have been reported to require this XML namespace idiom. + +=item soapversion(optional value) + + $client->soapversion('1.2'); + +If no parameter is given, returns the current version of SOAP that is being +used by the client object to encode requests. If a parameter is given, the +method attempts to set that as the version of SOAP being used. + +The value should be either 1.1 or 1.2. + +=item envprefix(QName) + + $client->envprefix('env'); + +This method is a shortcut for: + + $client->serializer->envprefix(QName); + +Gets or sets the namespace prefix for the SOAP namespace. The default is +SOAP. + +The prefix itself has no meaning, but applications may wish to chose one +explicitly to denote different versions of SOAP or the like. + +=item encprefix(QName) + + $client->encprefix('enc'); + +This method is a shortcut for: + + $client->serializer->encprefix(QName); + +Gets or sets the namespace prefix for the encoding rules namespace. +The default value is SOAP-ENC. + +=back + +While it may seem to be an unnecessary operation to set a value that isn't +relevant to the message, such as the namespace labels for the envelope and +encoding URNs, the ability to set these labels explicitly can prove to be a +great aid in distinguishing and debugging messages on the server side of +operations. + +=over + +=item encoding(encoding URN) + + $client->encoding($soap_12_encoding_URN); + +This method is a shortcut for: + + $client->serializer->encoding(args); + +Where the earlier method dealt with the label used for the attributes related +to the SOAP encoding scheme, this method actually sets the URN to be specified +as the encoding scheme for the message. The default is to specify the encoding +for SOAP 1.1, so this is handy for applications that need to encode according +to SOAP 1.2 rules. + +=item typelookup + + $client->typelookup; + +This method is a shortcut for: + + $client->serializer->typelookup; + +Gives the application access to the type-lookup table from the serializer +object. See the section on L. + +=item uri(service specifier) + +Deprecated - the C subroutine is deprecated in order to provide a more +intuitive naming scheme for subroutines that set namespaces. In the future, +you will be required to use either the C or C subroutines +instead of C. + + $client->uri($service_uri); + +This method is a shortcut for: + + $client->serializer->uri(service); + +The URI associated with this accessor on a client object is the +service-specifier for the request, often encoded for HTTP-based requests as +the SOAPAction header. While the names may seem confusing, this method +doesn't specify the endpoint itself. In most circumstances, the C refers +to the namespace used for the request. + +Often times, the value may look like a valid URL. Despite this, it doesn't +have to point to an existing resource (and often doesn't). This method sets +and retrieves this value from the object. Note that no transport code is +triggered by this because it has no direct effect on the transport of the +object. + +=item multirefinplace(boolean) + + $client->multirefinplace(1); + +This method is a shortcut for: + + $client->serializer->multirefinplace(boolean); + +Controls how the serializer handles values that have multiple references to +them. Recall from previous SOAP chapters that a value may be tagged with an +identifier, then referred to in several places. When this is the case for a +value, the serializer defaults to putting the data element towards the top of +the message, right after the opening tag of the method-specification. It is +serialized as a standalone entity with an ID that is then referenced at the +relevant places later on. If this method is used to set a true value, the +behavior is different. When the multirefinplace attribute is true, the data +is serialized at the first place that references it, rather than as a separate +element higher up in the body. This is more compact but may be harder to read +or trace in a debugging environment. + +=item parts( ARRAY ) + +Used to specify an array of L's to be attached to the +transmitted SOAP message. Attachments that are returned in a response can be +accessed by C. + +=item self + + $ref = SOAP::Lite->self; + +Returns an object reference to the default global object the C +package maintains. This is the object that processes many of the arguments +when provided on the use line. + +=back + +The following method isn't an accessor style of method but neither does it fit +with the group that immediately follows it: + +=over + +=item call(arguments) + + $client->call($method => @arguments); + +As has been illustrated in previous chapters, the C client objects +can manage remote calls with auto-dispatching using some of Perl's more +elaborate features. call is used when the application wants a greater degree +of control over the details of the call itself. The method may be built up +from a L object, so as to allow full control over the namespace +associated with the tag, as well as other attributes like encoding. This is +also important for calling methods that contain characters not allowable in +Perl function names, such as A.B.C. + +=back + +The next four methods used in the C class are geared towards +handling the types of events than can occur during the message lifecycle. Each +of these sets up a callback for the event in question: + +=over + +=item on_action(callback) + + $client->on_action(sub { qq("$_[0]") }); + +Triggered when the transport object sets up the SOAPAction header for an +HTTP-based call. The default is to set the header to the string, uri#method, +in which URI is the value set by the uri method described earlier, and method +is the name of the method being called. When called, the routine referenced +(or the closure, if specified as in the example) is given two arguments, uri +and method, in that order. + +.NET web services usually expect C as separator for C and C. +To change SOAP::Lite's behaviour to use uri/method as SOAPAction header, use +the following code: + + $client->on_action( sub { join '/', @_ } ); +=item on_fault(callback) + + $client->on_fault(sub { popup_dialog($_[1]) }); + +Triggered when a method call results in a fault response from the server. +When it is called, the argument list is first the client object itself, +followed by the object that encapsulates the fault. In the example, the fault +object is passed (without the client object) to a hypothetical GUI function +that presents an error dialog with the text of fault extracted from the object +(which is covered shortly under the L methods). + +=item on_nonserialized(callback) + + $client->on_nonserialized(sub { die "$_[0]?!?" }); + +Occasionally, the serializer may be given data it can't turn into SOAP-savvy +XML; for example, if a program bug results in a code reference or something +similar being passed in as a parameter to method call. When that happens, this +callback is activated, with one argument. That argument is the data item that +could not be understood. It will be the only argument. If the routine returns, +the return value is pasted into the message as the serialization. Generally, +an error is in order, and this callback allows for control over signaling that +error. + +=item on_debug(callback) + + $client->on_debug(sub { print @_ }); + +Deprecated. Use the global +debug and +trace facilities described in +L + +Note that this method will not work as expected: Instead of affecting the +debugging behaviour of the object called on, it will globally affect the +debugging behaviour for all objects of that class. + +=back + +=head1 WRITING A SOAP CLIENT + +This chapter guides you to writing a SOAP client by example. + +The SOAP service to be accessed is a simple variation of the well-known +hello world program. It accepts two parameters, a name and a given name, +and returns "Hello $given_name $name". + +We will use "Martin Kutter" as the name for the call, so all variants will +print the following message on success: + + Hello Martin Kutter! + +=head2 SOAP message styles + +There are three common (and one less common) variants of SOAP messages. + +These address the message style (positional parameters vs. specified message +documents) and encoding (as-is vs. typed). + +The different message styles are: + +=over + +=item * rpc/encoded + +Typed, positional parameters. Widely used in scripting languages. +The type of the arguments is included in the message. +Arrays and the like may be encoded using SOAP encoding rules (or others). + +=item * rpc/literal + +As-is, positional parameters. The type of arguments is defined by some +pre-exchanged interface definition. + +=item * document/encoded + +Specified message with typed elements. Rarely used. + +=item * document/literal + +Specified message with as-is elements. The message specification and +element types are defined by some pre-exchanged interface definition. + +=back + +As of 2008, document/literal has become the predominant SOAP message +variant. rpc/literal and rpc/encoded are still in use, mainly with scripting +languages, while document/encoded is hardly used at all. + +You will see clients for the rpc/encoded and document/literal SOAP variants in +this section. + +=head2 Example implementations + +=head3 RPC/ENCODED + +Rpc/encoded is most popular with scripting languages like perl, php and python +without the use of a WSDL. Usual method descriptions look like this: + + Method: sayHello(string, string) + Parameters: + name: string + givenName: string + +Such a description usually means that you can call a method named "sayHello" +with two positional parameters, "name" and "givenName", which both are +strings. + +The message corresponding to this description looks somewhat like this: + + + Kutter + Martin + + +Any XML tag names may be used instead of the "s-gensym01" stuff - parameters +are positional, the tag names have no meaning. + +A client producing such a call is implemented like this: + + use SOAP::Lite; + my $soap = SOAP::Lite->new( proxy => 'http://localhost:81/soap-wsdl-test/helloworld.pl'); + $soap->default_ns('urn:HelloWorld'); + my $som = $soap->call('sayHello', 'Kutter', 'Martin'); + die $som->faultstring if ($som->fault); + print $som->result, "\n"; + +You can of course use a one-liner, too... + +Sometimes, rpc/encoded interfaces are described with WSDL definitions. +A WSDL accepting "named" parameters with rpc/encoded looks like this: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The message corresponding to this schema looks like this: + + + Kutter + Martin + + +A web service client using this schema looks like this: + + use SOAP::Lite; + my $soap = SOAP::Lite->service("file:say_hello_rpcenc.wsdl"); + eval { my $result = $soap->sayHello('Kutter', 'Martin'); }; + if ($@) { + die $@; + } + print $som->result(); + +You may of course also use the following one-liner: + + perl -MSOAP::Lite -e 'print SOAP::Lite->service("file:say_hello_rpcenc.wsdl")\ + ->sayHello('Kutter', 'Martin'), "\n";' + +A web service client (without a service description) looks like this. + + use SOAP::Lite; + my $soap = SOAP::Lite->new( proxy => 'http://localhost:81/soap-wsdl-test/helloworld.pl'); + $soap->default_ns('urn:HelloWorld'); + my $som = $soap->call('sayHello', + SOAP::Data->name('name')->value('Kutter'), + SOAP::Data->name('givenName')->value('Martin') + ); + die $som->faultstring if ($som->fault); + print $som->result, "\n"; + +=head3 RPC/LITERAL + +SOAP web services using the document/literal message encoding are usually +described by some Web Service Definition. Our web service has the following +WSDL description: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The XML message (inside the SOAP Envelope) look like this: + + + + + Kutter + Martin + + + + + + Hello Martin Kutter! + + + +This is the SOAP::Lite implementation for the web service client: + + use SOAP::Lite +trace; + my $soap = SOAP::Lite->new( proxy => 'http://localhost:80/helloworld.pl'); + + $soap->on_action( sub { "urn:HelloWorld#sayHello" }); + $soap->autotype(0)->readable(1); + $soap->default_ns('urn:HelloWorld'); + + my $som = $soap->call('sayHello', SOAP::Data->name('parameters')->value( + \SOAP::Data->value([ + SOAP::Data->name('name')->value( 'Kutter' ), + SOAP::Data->name('givenName')->value('Martin'), + ])) +); + + die $som->fault->{ faultstring } if ($som->fault); + print $som->result, "\n"; + +=head3 DOCUMENT/LITERAL + +SOAP web services using the document/literal message encoding are usually +described by some Web Service Definition. Our web service has the following +WSDL description: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The XML message (inside the SOAP Envelope) look like this: + + + Kutter + Martin + + + + Hello Martin Kutter! + + +You can call this web service with the following client code: + + use SOAP::Lite; + my $soap = SOAP::Lite->new( proxy => 'http://localhost:80/helloworld.pl'); + + $soap->on_action( sub { "urn:HelloWorld#sayHello" }); + $soap->autotype(0); + $soap->default_ns('urn:HelloWorld'); + + my $som = $soap->call("sayHello", + SOAP::Data->name('name')->value( 'Kutter' ), + SOAP::Data->name('givenName')->value('Martin'), +); + + die $som->fault->{ faultstring } if ($som->fault); + print $som->result, "\n"; + +=head2 Differences between the implementations + +You may have noticed that there's little difference between the rpc/encoded, +rpc/literal and the document/literal example's implementation. In fact, from +SOAP::Lite's point of view, the only differences between rpc/literal and +document/literal that parameters are always named. + +In our example, the rpc/encoded variant already used named parameters (by +using two messages), so there's no difference at all. + +You may have noticed the somewhat strange idiom for passing a list of named +paraneters in the rpc/literal example: + + my $som = $soap->call('sayHello', SOAP::Data->name('parameters')->value( + \SOAP::Data->value([ + SOAP::Data->name('name')->value( 'Kutter' ), + SOAP::Data->name('givenName')->value('Martin'), + ])) + ); + +While SOAP::Data provides full control over the XML generated, passing +hash-like structures require additional coding. + +=head1 WRITING A SOAP SERVER + +See L, or L. + +=head1 FEATURES + +=head2 ATTACHMENTS + +C features support for the SOAP with Attachments specification. +Currently, SOAP::Lite only supports MIME based attachments. DIME based +attachments are yet to be fully functional. + +=head3 EXAMPLES + +=head4 Client sending an attachment + +C clients can specify attachments to be sent along with a request +by using the C method, which takes as an argument an +ARRAY of C's. + + use SOAP::Lite; + use MIME::Entity; + my $ent = build MIME::Entity + Type => "image/gif", + Encoding => "base64", + Path => "somefile.gif", + Filename => "saveme.gif", + Disposition => "attachment"; + my $som = SOAP::Lite + ->uri($SOME_NAMESPACE) + ->parts([ $ent ]) + ->proxy($SOME_HOST) + ->some_method(SOAP::Data->name("foo" => "bar")); + +=head4 Client retrieving an attachment + +A client accessing attachments that were returned in a response by using the +C accessor. + + use SOAP::Lite; + use MIME::Entity; + my $soap = SOAP::Lite + ->uri($NS) + ->proxy($HOST); + my $som = $soap->foo(); + foreach my $part (${$som->parts}) { + print $part->stringify; + } + +=head4 Server receiving an attachment + +Servers, like clients, use the S module to access attachments +transmitted to it. + + package Attachment; + use SOAP::Lite; + use MIME::Entity; + use strict; + use vars qw(@ISA); + @ISA = qw(SOAP::Server::Parameters); + sub someMethod { + my $self = shift; + my $envelope = pop; + foreach my $part (@{$envelope->parts}) { + print "AttachmentService: attachment found! (".ref($part).")\n"; + } + # do something + } + +=head4 Server responding with an attachment + +Servers wishing to return an attachment to the calling client need only return +C objects along with SOAP::Data elements, or any other data +intended for the response. + + package Attachment; + use SOAP::Lite; + use MIME::Entity; + use strict; + use vars qw(@ISA); + @ISA = qw(SOAP::Server::Parameters); + sub someMethod { + my $self = shift; + my $envelope = pop; + my $ent = build MIME::Entity + 'Id' => "<1234>", + 'Type' => "text/xml", + 'Path' => "some.xml", + 'Filename' => "some.xml", + 'Disposition' => "attachment"; + return SOAP::Data->name("foo" => "blah blah blah"),$ent; + } + +=head2 DEFAULT SETTINGS + +Though this feature looks similar to +L they have (almost) +nothing in common. This capability allows you specify default settings so that +all objects created after that will be initialized with the proper default +settings. + +If you wish to provide common C or C settings for all +C objects in your application you may do: + + use SOAP::Lite + proxy => 'http://localhost/cgi-bin/soap.cgi', + uri => 'http://my.own.com/My/Examples'; + + my $soap1 = new SOAP::Lite; # will get the same proxy()/uri() as above + print $soap1->getStateName(1)->result; + + my $soap2 = SOAP::Lite->new; # same thing as above + print $soap2->getStateName(2)->result; + + # or you may override any settings you want + my $soap3 = SOAP::Lite->proxy('http://localhost/'); + print $soap3->getStateName(1)->result; + +B C properties can be propagated this way. Changes in object +copies will not affect global settings and you may still change global +settings with C<< SOAP::Lite->self >> call which returns reference to global +object. Provided parameter will update this object and you can even set it to +C: + + SOAP::Lite->self(undef); + +The C syntax also lets you specify default event handlers for +your code. If you have different SOAP objects and want to share the same +C (or C for that matter) handler. You can specify +C during initialization for every object, but you may also do: + + use SOAP::Lite + on_action => sub {sprintf '%s#%s', @_}; + +and this handler will be the default handler for all your SOAP objects. You +can override it if you specify a handler for a particular object. See F +for example of on_fault() handler. + +Be warned, that since C is executed at compile time B C +statements will be executed B script execution that can make +unexpected results. Consider code: + + use SOAP::Lite proxy => 'http://localhost/'; + print SOAP::Lite->getStateName(1)->result; + + use SOAP::Lite proxy => 'http://localhost/cgi-bin/soap.cgi'; + print SOAP::Lite->getStateName(1)->result; + +B SOAP calls will go to C<'http://localhost/cgi-bin/soap.cgi'>. If you +want to execute C at run-time, put it in C: + + eval "use SOAP::Lite proxy => 'http://localhost/cgi-bin/soap.cgi'; 1" or die; + +Or alternatively, + + SOAP::Lite->self->proxy('http://localhost/cgi-bin/soap.cgi'); + +=head2 SETTING MAXIMUM MESSAGE SIZE + +One feature of C is the ability to control the maximum size of a +message a SOAP::Lite server will be allowed to process. To control this +feature simply define C<$SOAP::Constants::MAX_CONTENT_SIZE> in your code like +so: + + use SOAP::Transport::HTTP; + use MIME::Entity; + $SOAP::Constants::MAX_CONTENT_SIZE = 10000; + SOAP::Transport::HTTP::CGI + ->dispatch_to('TemperatureService') + ->handle; + +=head2 IN/OUT, OUT PARAMETERS AND AUTOBINDING + +C gives you access to all parameters (both in/out and out) and +also does some additional work for you. Lets consider following example: + + + name1 + name2 + name3 + + +In that case: + + $result = $r->result; # gives you 'name1' + $paramout1 = $r->paramsout; # gives you 'name2', because of scalar context + $paramout1 = ($r->paramsout)[0]; # gives you 'name2' also + $paramout2 = ($r->paramsout)[1]; # gives you 'name3' + +or + + @paramsout = $r->paramsout; # gives you ARRAY of out parameters + $paramout1 = $paramsout[0]; # gives you 'res2', same as ($r->paramsout)[0] + $paramout2 = $paramsout[1]; # gives you 'res3', same as ($r->paramsout)[1] + +Generally, if server returns C you will get C<1> as the result +and C<2> and C<3> as out parameters. + +If the server returns C you will get an ARRAY reference from +C and C from C. + +Results can be arbitrary complex: they can be an array references, they can be +objects, they can be anything and still be returned by C . If only +one parameter is returned, C will return C. + +Furthermore, if you have in your output parameters a parameter with the same +signature (name+type) as in the input parameters this parameter will be mapped +into your input automatically. For example: + +B: + + sub mymethod { + shift; # object/class reference + my $param1 = shift; + my $param2 = SOAP::Data->name('myparam' => shift() * 2); + return $param1, $param2; + } + +B: + + $a = 10; + $b = SOAP::Data->name('myparam' => 12); + $result = $soap->mymethod($a, $b); + +After that, C<< $result == 10 and $b->value == 24 >>! Magic? Sort of. + +Autobinding gives it to you. That will work with objects also with one +difference: you do not need to worry about the name and the type of object +parameter. Consider the C example (F +and F): + +B: + + package My::PingPong; + + sub new { + my $self = shift; + my $class = ref($self) || $self; + bless {_num=>shift} => $class; + } + + sub next { + my $self = shift; + $self->{_num}++; + } + +B: + + use SOAP::Lite +autodispatch => + uri => 'urn:', + proxy => 'http://localhost/'; + + my $p = My::PingPong->new(10); # $p->{_num} is 10 now, real object returned + print $p->next, "\n"; # $p->{_num} is 11 now!, object autobinded + +=head2 STATIC AND DYNAMIC SERVICE DEPLOYMENT + +Let us scrutinize the deployment process. When designing your SOAP server you +can consider two kind of deployment: B and B. For both, +static and dynamic, you should specify C, C, +C or C when creating Cing the SOAP::Lite module. The +difference between static and dynamic deployment is that in case of 'dynamic', +any module which is not present will be loaded on demand. See the +L section for detailed description. + +When statically deploying a SOAP Server, you need to know all modules handling +SOAP requests before. + +Dynamic deployment allows extending your SOAP Server's interface by just +installing another module into the dispatch_to path (see below). + +=head3 STATIC DEPLOYMENT EXAMPLE + + use SOAP::Transport::HTTP; + use My::Examples; # module is preloaded + + SOAP::Transport::HTTP::CGI + # deployed module should be present here or client will get + # 'access denied' + -> dispatch_to('My::Examples') + -> handle; + +For static deployment you should specify the MODULE name directly. + +You should also use static binding when you have several different classes in +one file and want to make them available for SOAP calls. + +=head3 DYNAMIC DEPLOYMENT EXAMPLE + + use SOAP::Transport::HTTP; + # name is unknown, module will be loaded on demand + + SOAP::Transport::HTTP::CGI + # deployed module should be present here or client will get 'access denied' + -> dispatch_to('/Your/Path/To/Deployed/Modules', 'My::Examples') + -> handle; + +For dynamic deployment you can specify the name either directly (in that case +it will be Cd without any restriction) or indirectly, with a PATH. In +that case, the ONLY path that will be available will be the PATH given to the +dispatch_to() method). For information how to handle this situation see +L section. + +=head3 SUMMARY + + dispatch_to( + # dynamic dispatch that allows access to ALL modules in specified directory + PATH/TO/MODULES + # 1. specifies directory + # -- AND -- + # 2. gives access to ALL modules in this directory without limits + + # static dispatch that allows access to ALL methods in particular MODULE + MODULE + # 1. gives access to particular module (all available methods) + # PREREQUISITES: + # module should be loaded manually (for example with 'use ...') + # -- OR -- + # you can still specify it in PATH/TO/MODULES + + # static dispatch that allows access to particular method ONLY + MODULE::method + # same as MODULE, but gives access to ONLY particular method, + # so there is not much sense to use both MODULE and MODULE::method + # for the same MODULE + ); + +In addition to this C also supports an experimental syntax that +allows you to bind a specific URL or SOAPAction to a CLASS/MODULE or object. + +For example: + + dispatch_with({ + URI => MODULE, # 'http://www.soaplite.com/' => 'My::Class', + SOAPAction => MODULE, # 'http://www.soaplite.com/method' => 'Another::Class', + URI => object, # 'http://www.soaplite.com/obj' => My::Class->new, + }) + +C is checked before C. You may use both the C +and C methods in the same server, but note that +C has a higher order of precedence. C will be +checked only after C and C has been checked. + +See also: +L, +L + +=head2 COMPRESSION + +C provides you option to enable transparent compression over the +wire. Compression can be enabled by specifying a threshold value (in the form +of kilobytes) for compression on both the client and server sides: + +I + +B + + print SOAP::Lite + ->uri('http://localhost/My/Parameters') + ->proxy('http://localhost/', options => {compress_threshold => 10000}) + ->echo(1 x 10000) + ->result; + +B + + my $server = SOAP::Transport::HTTP::CGI + ->dispatch_to('My::Parameters') + ->options({compress_threshold => 10000}) + ->handle; + +For more information see L in +L. + +=head1 SECURITY + +For security reasons, the exisiting path for Perl modules (C<@INC>) will be +disabled once you have chosen dynamic deployment and specified your own +C. If you wish to access other modules in your included package you +have several options: + +=over 4 + +=item 1 + +Switch to static linking: + + use MODULE; + $server->dispatch_to('MODULE'); + +Which can also be useful when you want to import something specific from the +deployed modules: + + use MODULE qw(import_list); + +=item 2 + +Change C to C. The path is only unavailable during the +initialization phase. It is available once more during execution. Therefore, +if you utilize C somewhere in your package, it will work. + +=item 3 + +Wrap C in an C block: + + eval 'use MODULE qw(import_list)'; die if $@; + +=item 4 + +Set your include path in your package and then specify C. Don't forget to +put C<@INC> in a C block or it won't work. For example, + + BEGIN { @INC = qw(my_directory); use MODULE } + +=back + +=head1 INTEROPERABILITY + +=head2 Microsoft .NET client with SOAP::Lite Server + +In order to use a .NET client with a SOAP::Lite server, be sure you use fully +qualified names for your return values. For example: + + return SOAP::Data->name('myname') + ->type('string') + ->uri($MY_NAMESPACE) + ->value($output); + +In addition see comment about default incoding in .NET Web Services below. + +=head2 SOAP::Lite client with a .NET server + +If experiencing problems when using a SOAP::Lite client to call a .NET Web +service, it is recommended you check, or adhere to all of the following +recommendations: + +=over 4 + +=item Declare a proper soapAction in your call + +For example, use +C. + +=item Disable charset definition in Content-type header + +Some users have said that Microsoft .NET prefers the value of +the Content-type header to be a mimetype exclusively, but SOAP::Lite specifies +a character set in addition to the mimetype. This results in an error similar +to: + + Server found request content type to be 'text/xml; charset=utf-8', + but expected 'text/xml' + +To turn off this behavior specify use the following code: + + use SOAP::Lite; + $SOAP::Constants::DO_NOT_USE_CHARSET = 1; + # The rest of your code + +=item Use fully qualified name for method parameters + +For example, the following code is preferred: + + SOAP::Data->name(Query => 'biztalk') + ->uri('http://tempuri.org/') + +As opposed to: + + SOAP::Data->name('Query' => 'biztalk') + +=item Place method in default namespace + +For example, the following code is preferred: + + my $method = SOAP::Data->name('add') + ->attr({xmlns => 'http://tempuri.org/'}); + my @rc = $soap->call($method => @parms)->result; + +As opposed to: + + my @rc = $soap->call(add => @parms)->result; + # -- OR -- + my @rc = $soap->add(@parms)->result; + +=item Disable use of explicit namespace prefixes + +Some user's have reported that .NET will simply not parse messages that use +namespace prefixes on anything but SOAP elements themselves. For example, the +following XML would not be parsed: + + + + + + + +SOAP::Lite allows users to disable the use of explicit namespaces through the +C method. For example, the following code: + + $som = SOAP::Lite->uri('urn:MyURI') + ->proxy($HOST) + ->use_prefix(0) + ->myMethod(); + +Will result in the following XML, which is more pallatable by .NET: + + + + + + + +=item Modify your .NET server, if possible + +Stefan Pharies : + +SOAP::Lite uses the SOAP encoding (section 5 of the soap 1.1 spec), and +the default for .NET Web Services is to use a literal encoding. So +elements in the request are unqualified, but your service expects them to +be qualified. .Net Web Services has a way for you to change the expected +message format, which should allow you to get your interop working. +At the top of your class in the asmx, add this attribute (for Beta 1): + + [SoapService(Style=SoapServiceStyle.RPC)] + +Another source said it might be this attribute (for Beta 2): + + [SoapRpcService] + +Full Web Service text may look like: + + <%@ WebService Language="C#" Class="Test" %> + using System; + using System.Web.Services; + using System.Xml.Serialization; + + [SoapService(Style=SoapServiceStyle.RPC)] + public class Test : WebService { + [WebMethod] + public int add(int a, int b) { + return a + b; + } + } + +Another example from Kirill Gavrylyuk : + +"You can insert [SoapRpcService()] attribute either on your class or on +operation level". + + <%@ WebService Language=CS class="DataType.StringTest"%> + + namespace DataType { + + using System; + using System.Web.Services; + using System.Web.Services.Protocols; + using System.Web.Services.Description; + + [SoapRpcService()] + public class StringTest: WebService { + [WebMethod] + [SoapRpcMethod()] + public string RetString(string x) { + return(x); + } + } + } + +Example from Yann Christensen : + + using System; + using System.Web.Services; + using System.Web.Services.Protocols; + + namespace Currency { + [WebService(Namespace="http://www.yourdomain.com/example")] + [SoapRpcService] + public class Exchange { + [WebMethod] + public double getRate(String country, String country2) { + return 122.69; + } + } + } + +=back + +Special thanks goes to the following people for providing the above +description and details on .NET interoperability issues: + +Petr Janata , + +Stefan Pharies , + +Brian Jepson , and others + +=head1 TROUBLESHOOTING + +=over 4 + +=item SOAP::Lite serializes "18373" as an integer, but I want it to be a string! + +SOAP::Lite guesses datatypes from the content provided, using a set of +common-sense rules. These rules are not 100% reliable, though they fit for +most data. + +You may force the type by passing a SOAP::Data object with a type specified: + + my $proxy = SOAP::Lite->proxy('http://www.example.org/soapservice'); + my $som = $proxy->myMethod( + SOAP::Data->name('foo')->value(12345)->type('string') + ); + +You may also change the precedence of the type-guessing rules. Note that this +means fiddling with SOAP::Lite's internals - this may not work as +expected in future versions. + +The example above forces everything to be encoded as string (this is because +the string test is normally last and allways returns true): + + my @list = qw(-1 45 foo bar 3838); + my $proxy = SOAP::Lite->uri($uri)->proxy($proxyUrl); + $proxy->serializer->typelookup->{string}->[0] = 0; + $proxy->myMethod(\@list); + +See L for more details. + +=item C<+autodispatch> doesn't work in Perl 5.8 + +There is a bug in Perl 5.8's C functionality that +prevents the C<+autodispatch> functionality from working properly. The +workaround is to use C instead. Where you might normally do +something like this: + + use Some::Module; + use SOAP::Lite +autodispatch => + uri => 'urn:Foo' + proxy => 'http://...'; + +You would do something like this: + + use SOAP::Lite dispatch_from(Some::Module) => + uri => 'urn:Foo' + proxy => 'http://...'; + +=item Problems using SOAP::Lite's COM Interface + +=over + +=item Can't call method "server" on undefined value + +You probably did not register F using C + +=item Failed to load PerlCtrl Runtime + +It is likely that you have install Perl in two different locations and the +location of ActiveState's Perl is not the first instance of Perl specified +in your PATH. To rectify, rename the directory in which the non-ActiveState +Perl is installed, or be sure the path to ActiveState's Perl is specified +prior to any other instance of Perl in your PATH. + +=back + +=item Dynamic libraries are not found + +If you are using the Apache web server, and you are seeing something like the +following in your webserver log file: + + Can't load '/usr/local/lib/perl5/site_perl/.../XML/Parser/Expat/Expat.so' + for module XML::Parser::Expat: dynamic linker: /usr/local/bin/perl: + libexpat.so.0 is NEEDED, but object does not exist at + /usr/local/lib/perl5/.../DynaLoader.pm line 200. + +Then try placing the following into your F file and see if it +fixes your problem. + + + PassEnv LD_LIBRARY_PATH + + +=item SOAP client reports "500 unexpected EOF before status line seen + +See L + +=item Apache is crashing with segfaults + +Using C (or L) in combination with mod_perl +causes random segmentation faults in httpd processes. To fix, try configuring +Apache with the following: + + RULE_EXPAT=no + +If you are using Apache 1.3.20 and later, try configuring Apache with the +following option: + + ./configure --disable-rule=EXPAT + +See http://archive.covalent.net/modperl/2000/04/0185.xml for more details and +lot of thanks to Robert Barta for explaining this weird +behavior. + +If this doesn't address the problem, you may wish to try C<-Uusemymalloc>, +or a similar option in order to instruct Perl to use the system's own C. + +Thanks to Tim Bunce . + +=item CGI scripts do not work under Microsoft Internet Information Server (IIS) + +CGI scripts may not work under IIS unless scripts use the C<.pl> extension, +opposed to C<.cgi>. + +=item Java SAX parser unable to parse message composed by SOAP::Lite + +In some cases SOAP messages created by C may not be parsed +properly by a SAX2/Java XML parser. This is due to a known bug in +C. This bug manifests itself when an +attribute in an XML element occurs prior to the XML namespace declaration on +which it depends. However, according to the XML specification, the order of +these attributes is not significant. + +http://www.megginson.com/SAX/index.html + +Thanks to Steve Alpert (Steve_Alpert@idx.com) for pointing on it. + +=back + +=head1 PERFORMANCE + +=over 4 + +=item Processing of XML encoded fragments + +C is based on L which is basically wrapper around +James Clark's expat parser. Expat's behavior for parsing XML encoded string +can affect processing messages that have lot of encoded entities, like XML +fragments, encoded as strings. Providing low-level details, parser will call +char() callback for every portion of processed stream, but individually for +every processed entity or newline. It can lead to lot of calls and additional +memory manager expenses even for small messages. By contrast, XML messages +which are encoded as base64Binary, don't have this problem and difference in +processing time can be significant. For XML encoded string that has about 20 +lines and 30 tags, number of call could be about 100 instead of one for +the same string encoded as base64Binary. + +Since it is parser's feature there is NO fix for this behavior (let me know +if you find one), especially because you need to parse message you already +got (and you cannot control content of this message), however, if your are +in charge for both ends of processing you can switch encoding to base64 on +sender's side. It will definitely work with SOAP::Lite and it B work with +other toolkits/implementations also, but obviously I cannot guarantee that. + +If you want to encode specific string as base64, just do +C<< SOAP::Data->type(base64 => $string) >> either on client or on server +side. If you want change behavior for specific instance of SOAP::Lite, you +may subclass C, override C method that is +responsible for string encoding (take a look into C) and +specify B serializer class for your SOAP::Lite object with: + + my $soap = new SOAP::Lite + serializer => My::Serializer->new, + ..... other parameters + +or on server side: + + my $server = new SOAP::Transport::HTTP::Daemon # or any other server + serializer => My::Serializer->new, + ..... other parameters + +If you want to change this behavior for B instances of SOAP::Lite, just +substitute C method with C somewhere in your +code B C and B actual processing/sending: + + *SOAP::Serializer::as_string = \&SOAP::XMLSchema2001::Serializer::as_base64Binary; + +Be warned that last two methods will affect B strings and convert them +into base64 encoded. It doesn't make any difference for SOAP::Lite, but it +B make a difference for other toolkits. + +=back + +=head1 BUGS AND LIMITATIONS + +=over 4 + +=item * + +No support for multidimensional, partially transmitted and sparse arrays +(however arrays of arrays are supported, as well as any other data structures, +and you can add your own implementation with SOAP::Data). + +=item * + +Limited support for WSDL schema. + +=item * + +XML::Parser::Lite relies on Unicode support in Perl and doesn't do entity decoding. + +=item * + +Limited support for mustUnderstand and Actor attributes. + +=back + +=head1 PLATFORM SPECIFICS + +=over 4 + +=item MacOS + +Information about XML::Parser for MacPerl could be found here: + +http://bumppo.net/lists/macperl-modules/1999/07/msg00047.html + +Compiled XML::Parser for MacOS could be found here: + +http://www.perl.com/CPAN-local/authors/id/A/AS/ASANDSTRM/XML-Parser-2.27-bin-1-MacOS.tgz + +=back + +=head1 RELATED MODULES + +=head2 Transport Modules + +SOAP::Lite allows to add support for additional transport protocols, or +server handlers, via separate modules implementing the SOAP::Transport::* +interface. The following modules are available from CPAN: + +=over + +=item * SOAP-Transport-HTTP-Nginx + +L provides a transport module for nginx () + +=back + +=head1 AVAILABILITY + +You can download the latest version SOAP::Lite for Unix or SOAP::Lite for +Win32 from the following sources: + + * CPAN: http://search.cpan.org/search?dist=SOAP-Lite + * Sourceforge: http://sourceforge.net/projects/soaplite/ + +PPM packages are also available from sourceforge. + +You are welcome to send e-mail to the maintainers of SOAP::Lite with your +comments, suggestions, bug reports and complaints. + +=head1 ACKNOWLEDGEMENTS + +Special thanks to Randy J. Ray, author of +I, who has contributed greatly to the +documentation effort of SOAP::Lite. + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite +to republish and redistribute the SOAP::Lite reference manual found in +Appendix B of I. + +And special gratitude to all the developers who have contributed patches, +ideas, time, energy, and help in a million different forms to the development +of this software. + +=head1 HACKING + +SOAP::Lite's development takes place on sourceforge.net. + +There's a subversion repository set up at + + https://soaplite.svn.sourceforge.net/svnroot/soaplite/ + +=head1 REPORTING BUGS + +Please report all suspected SOAP::Lite bugs using Sourceforge. This ensures +proper tracking of the issue and allows you the reporter to know when something +gets fixed. + +http://sourceforge.net/tracker/?group_id=66000&atid=513017 + +=head1 COPYRIGHT + +Copyright (C) 2000-2007 Paul Kulchenko. All rights reserved. + +Copyright (C) 2007-2008 Martin Kutter + +=head1 LICENSE + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +This text and all associated documentation for this library is made available +under the Creative Commons Attribution-NoDerivs 2.0 license. +http://creativecommons.org/licenses/by-nd/2.0/ + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +Martin Kutter (martin.kutter@fen-net.de) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema1999.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema1999.pm new file mode 100644 index 0000000..4e40a16 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema1999.pm @@ -0,0 +1,46 @@ +package SOAP::Lite::Deserializer::XMLSchema1999; +use strict; + +use SOAP::Lite::Deserializer::XMLSchemaSOAP1_1; + +sub anyTypeValue { 'ur-type' } + +# use as_string and as_boolean from SOAP1_1 Deserializer + +sub as_string; *as_string = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_1::as_string; +sub as_boolean; *as_boolean = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_1::as_boolean; + +sub as_hex { + shift; + my $value = shift; + $value =~ s/([a-zA-Z0-9]{2})/chr oct '0x'.$1/ge; + $value +} + +sub as_ur_type { $_[1] } + +sub as_undef { + shift; + my $value = shift; + $value eq '1' || $value eq 'true' + ? 1 + : $value eq '0' || $value eq 'false' + ? 0 + : die "Wrong null/nil value '$value'\n"; +} + +BEGIN { + no strict 'refs'; + for my $method (qw( + float double decimal timeDuration recurringDuration uriReference + integer nonPositiveInteger negativeInteger long int short byte + nonNegativeInteger unsignedLong unsignedInt unsignedShort unsignedByte + positiveInteger timeInstant time timePeriod date month year century + recurringDate recurringDay language + )) { + my $name = 'as_' . $method; + *$name = sub { $_[1] }; + } +} + +1; \ No newline at end of file diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema2001.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema2001.pm new file mode 100644 index 0000000..77dc13a --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchema2001.pm @@ -0,0 +1,32 @@ +package SOAP::Lite::Deserializer::XMLSchema2001; + +use strict; +use SOAP::Lite::Deserializer::XMLSchema1999; +use SOAP::Lite::Deserializer::XMLSchemaSOAP1_1; +use SOAP::Lite::Deserializer::XMLSchemaSOAP1_2; + +sub anyTypeValue { 'anyType' } +sub as_string; *as_string = \&SOAP::Lite::Deserializer::XMLSchema1999::as_string; +sub as_anyURI; *as_anyURI = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_1::as_anyURI; +sub as_boolean; *as_boolean = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_2::as_boolean; +sub as_base64Binary; *as_base64Binary = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_2::as_base64; +sub as_hexBinary; *as_hexBinary = \&SOAP::Lite::Deserializer::XMLSchema1999::as_hex; +sub as_undef; *as_undef = \&SOAP::Lite::Deserializer::XMLSchema1999::as_undef; + +BEGIN { + no strict 'refs'; + for my $method (qw( + anyType anySimpleType + float double decimal dateTime timePeriod gMonth gYearMonth gYear + century gMonthDay gDay duration recurringDuration + language integer nonPositiveInteger negativeInteger long int short + byte nonNegativeInteger unsignedLong unsignedInt unsignedShort + unsignedByte positiveInteger date time dateTime + QName + )) { + my $name = 'as_' . $method; + *$name = sub { $_[1] } + } +} + +1; \ No newline at end of file diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_1.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_1.pm new file mode 100644 index 0000000..42b9ff9 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_1.pm @@ -0,0 +1,33 @@ +package SOAP::Lite::Deserializer::XMLSchemaSOAP1_1; +use strict; + +sub anyTypeValue { 'ur-type' } + +sub as_boolean { + shift; + my $value = shift; + $value eq '1' || $value eq 'true' + ? 1 + : $value eq '0' || $value eq 'false' + ? 0 + : die "Wrong boolean value '$value'\n" +} + +sub as_base64 { shift; require MIME::Base64; MIME::Base64::decode_base64(shift) } + +sub as_ur_type { $_[1] } + +sub as_anyURI { $_[1] } + +BEGIN { + no strict 'refs'; + for my $method (qw( + string float double decimal timeDuration recurringDuration uriReference + integer nonPositiveInteger negativeInteger long int short byte + nonNegativeInteger unsignedLong unsignedInt unsignedShort unsignedByte + positiveInteger timeInstant time timePeriod date month year century + recurringDate recurringDay language + )) { my $name = 'as_' . $method; *$name = sub { $_[1] } } +} + +1; \ No newline at end of file diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_2.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_2.pm new file mode 100644 index 0000000..3516dd7 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_2.pm @@ -0,0 +1,24 @@ +package SOAP::Lite::Deserializer::XMLSchemaSOAP1_2; +use SOAP::Lite::Deserializer::XMLSchemaSOAP1_1; + +sub anyTypeValue { 'anyType' } + +sub as_boolean; *as_boolean = \&SOAP::Lite::Deserializer::XMLSchemaSOAP1_1::as_boolean; +sub as_base64 { shift; require MIME::Base64; MIME::Base64::decode_base64(shift) } + +BEGIN { + no strict 'refs'; + for my $method (qw( + anyType + string float double decimal dateTime timePeriod gMonth gYearMonth gYear + century gMonthDay gDay duration recurringDuration anyURI + language integer nonPositiveInteger negativeInteger long int short byte + nonNegativeInteger unsignedLong unsignedInt unsignedShort unsignedByte + positiveInteger date time dateTime + )) { + my $name = 'as_' . $method; + *$name = sub { $_[1] }; + } +} + +1; \ No newline at end of file diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Packager.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Packager.pm new file mode 100644 index 0000000..367093c --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Packager.pm @@ -0,0 +1,560 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Packager.pm 372 2010-04-29 18:32:31Z kutterma $ +# +# ====================================================================== + +package SOAP::Lite::Packager; + +use strict; +use vars; + +use vars qw($SUPPORTED_TYPES); +$SUPPORTED_TYPES = { }; + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(parser headers_http persist_parts) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { + $self->{$field} = shift; + return $self + } + return $self->{$field}; + } + } +} + +sub new { + my($class) = shift; + my(%params) = @_; + bless { + "_parts" => [ ], + "_parser" => undef, + "_persist_parts" => 0, + }, $class; +} + +sub is_supported_part { + my $self = shift; + return $SUPPORTED_TYPES->{ref $_[0]}; +} + +sub parts { + my $self = shift; + if (@_) { + $self->{'_parts'} = shift; + } + return $self->{'_parts'}; +} + +# This is a static method that helps find the right Packager +sub find_packager { + # TODO - Input: + # * the mimetype of the data to be decoded raw data that needs + # * the data to be decoded + # Returns: + # * the proper SOAP::Lite::Packager instance +} + +sub push_part { + my $self = shift; + my ($part) = @_; + push @{$self->{'_parts'}}, $part; +} + +sub package { + # do nothing + die "SOAP::Lite::Packager::package() must be implemented"; +} + +sub unpackage { + my $self = shift; + $self->{'_parts'} = [] if !$self->persist_parts; # experimental +} + +# ====================================================================== + +package SOAP::Lite::Packager::MIME; + +use strict; +use vars qw(@ISA); +@ISA = qw(SOAP::Lite::Packager); + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(transfer_encoding env_id env_location) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { + $self->{$field} = shift; + return $self + } + return $self->{$field}; + } + } +} + +sub new { + my ($classname) = @_; + my $self = SOAP::Lite::Packager::new(@_); + $self->{'_content_encoding'} = '8bit'; + $self->{'_env_id'} = ''; + $self->{'_env_location'} = '/main_envelope'; + bless $self, $classname; + $SOAP::Lite::Packager::SUPPORTED_TYPES->{"MIME::Entity"} = 1; + return $self; +} + +sub initialize_parser { + my $self = shift; + eval "require MIME::Parser;"; + die "Could not find MIME::Parser - is MIME::Tools installed? Aborting." if $@; + $self->{'_parser'} = MIME::Parser->new; + $self->{'_parser'}->output_to_core('ALL'); + $self->{'_parser'}->tmp_to_core(1); + $self->{'_parser'}->ignore_errors(1); +} + +sub generate_random_string { + my ($self,$len) = @_; + my @chars=('a'..'z','A'..'Z','0'..'9','_'); + my $random_string; + foreach (1..$len) { + $random_string .= $chars[rand @chars]; + } + return $random_string; +} + +sub get_multipart_id { + my ($id) = shift; + ($id || '') =~ /^]+)>?$/; $1 || ''; +} + +sub package { + my $self = shift; + my ($envelope,$context) = @_; + return $envelope if (!$self->parts); # if there are no parts, + # then there is nothing to do + require MIME::Entity; + local $MIME::Entity::BOUNDARY_DELIMITER = "\r\n"; + my $top = MIME::Entity->build('Type' => "Multipart/Related"); + my $soapversion = defined($context) ? $context->soapversion : '1.1'; + $top->attach('Type' => $soapversion == 1.1 ? "text/xml" : "application/soap+xml", + 'Content-Transfer-Encoding' => $self->transfer_encoding(), + 'Content-Location' => $self->env_location(), + 'Content-ID' => $self->env_id(), + 'Data' => $envelope ); + # consume the attachments that come in as input by 'shift'ing + no strict 'refs'; + while (my $part = shift(@{$self->parts})) { + $top->add_part($part); + } + # determine MIME boundary + my $boundary = $top->head->multipart_boundary; + $self->headers_http({ 'Content-Type' => 'Multipart/Related; type="text/xml"; start=""; boundary="'.$boundary.'"'}); + return $top->stringify_body; +} + +sub unpackage { + my $self = shift; + my ($raw_input,$context) = @_; + $self->SUPER::unpackage(); + + # Parse the raw input into a MIME::Entity structure. + # - fail if the raw_input is not MIME formatted + $self->initialize_parser() if !defined($self->parser); + my $entity = eval { $self->parser->parse_data($raw_input) } + or die "Something wrong with MIME message: @{[$@ || $self->parser->last_error]}\n"; + + my $env = undef; + # major memory bloat below! TODO - fix! + if (lc($entity->head->mime_type) eq 'multipart/form-data') { + $env = $self->process_form_data($entity); + } + elsif (lc($entity->head->mime_type) eq 'multipart/related') { + $env = $self->process_related($entity); + } + elsif (lc($entity->head->mime_type) eq 'text/xml') { + # I don't think this ever gets called. + # warn "I am somewhere in the SOAP::Lite::Packager::MIME code I didn't know I would be in!"; + $env = $entity->bodyhandle->as_string; + } + else { + die "Can't handle MIME messsage with specified type (@{[$entity->head->mime_type]})\n"; + } + + # return the envelope + if ($env) { + return $env; + } + elsif ($entity->bodyhandle->as_string) { + return $entity->bodyhandle->as_string; + } + else { + die "No content in MIME message\n"; + } +} + +sub process_form_data { + my ($self, $entity) = @_; + my $env = undef; + foreach my $part ($entity->parts()) { + my $name = $part->head()->mime_attr('content-disposition.name'); + $name eq 'payload' ? + $env = $part->bodyhandle()->as_string() + : $self->push_part($part); + } + return $env; +} + +sub process_related { + my $self = shift; + my ($entity) = @_; + die "Multipart MIME messages MUST declare Multipart/Related content-type" + if ($entity->head->mime_attr('content-type') !~ /^multipart\/related/i); + # As it turns out, the Content-ID and start parameters are optional + # according to the MIME and SOAP specs. In the event that the head cannot + # be found, the head/root entity is used as a starting point. + my $start = get_multipart_id($entity->head->mime_attr('content-type.start')); + if (!defined($start) || $start eq "") { + $start = $self->generate_random_string(10); + $entity->parts(0)->head->add('content-id',$start); + } + my $location = $entity->head->mime_attr('content-location') + || 'thismessage:/'; + my $env; + foreach my $part ($entity->parts) { + next if !UNIVERSAL::isa($part => "MIME::Entity"); + + # Weird, the following use of head->get(SCALAR[,INDEX]) doesn't work as + # expected. Work around is to eliminate the INDEX. + my $pid = get_multipart_id($part->head->mime_attr('content-id')); + + # If Content-ID is not supplied, then generate a random one (HACK - because + # MIME::Entity does not do this as it should... content-id is required + # according to MIME specification) + $pid = $self->generate_random_string(10) if $pid eq ''; + my $type = $part->head->mime_type; + + # If a Content-Location header cannot be found, this will look for an + # alternative in the following MIME Header attributes + my $plocation = $part->head->get('content-location') + || $part->head->mime_attr('Content-Disposition.filename') + || $part->head->mime_attr('Content-Type.name'); + if ($start && $pid eq $start) { + $env = $part->bodyhandle->as_string; + } + else { + $self->push_part($part) if (defined($part->bodyhandle)); + } + } + + return $env; +} + +# ====================================================================== + +package SOAP::Lite::Packager::DIME; + +use strict; +use vars qw(@ISA); +@ISA = qw(SOAP::Lite::Packager); + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(foo) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { $self->{$field} = shift; return $self } + return $self->{$field}; + } + } +} + +sub new { + my ($classname) = @_; + my $self = SOAP::Lite::Packager::new(@_); + bless $self, $classname; + $SOAP::Lite::Packager::SUPPORTED_TYPES->{"DIME::Payload"} = 1; + return $self; +} + +sub initialize_parser { + my $self = shift; + print STDERR "Initializing parser\n"; + eval "require DIME::Parser;"; + die "Could not find DIME::Parser - is DIME::Tools installed? Aborting." if $@; + $self->{'_parser'} = DIME::Parser->new; +} + +sub package { + my $self = shift; + my ($envelope,$context) = @_; + return $envelope if (!$self->parts); # if there are no parts, + # then there is nothing to do + require DIME::Message; + require DIME::Payload; + my $message = DIME::Message->new; + my $top = DIME::Payload->new; + my $soapversion = defined($context) ? $context->soapversion : '1.1'; + $top->attach('MIMEType' => $soapversion == 1.1 ? + "http://schemas.xmlsoap.org/soap/envelope/" : "application/soap+xml", + 'Data' => $envelope ); + $message->add_payload($top); + # consume the attachments that come in as input by 'shift'ing + no strict 'refs'; + while (my $part = shift(@{$self->parts})) { + die "You are only allowed to add parts of type DIME::Payload to a DIME::Message" + if (!$part->isa('DIME::Payload')); +# print STDERR "Adding payload to DIME message: ".ref($part)."\n"; + $message->add_payload($part); +# print STDERR "Payload's payload is: ".${$part->print_content_data}."\n"; + } + $self->headers_http({ 'Content-Type' => 'application/dime' }); + return $message->print_data; +} + +sub unpackage { + my $self = shift; + my ($raw_input,$context) = @_; + $self->SUPER::unpackage(); + + # Parse the raw input into a DIME::Message structure. + # - fail if the raw_input is not DIME formatted + print STDERR "raw_data: $raw_input\n"; + $self->initialize_parser() if !defined($self->parser); + my $message = eval { $self->parser->parse_data(\$raw_input) } + or die "Something wrong with DIME message: @{[$@]}\n"; + + # The first payload is always the SOAP Message + # TODO - Error check + my @payloads = @{$message->{'_PAYLOADS'}}; + my $env = shift(@payloads); + my $env_str = $env->print_content_data; + print STDERR "Received this envelope: ".$env_str."\n"; + while (my $p = shift(@payloads)) { + print STDERR "Adding part to Packager\n"; + $self->push_part($p); + } + return $env_str; +} + +1; +__END__ + +=pod + +=head1 NAME + +SOAP::Lite::Packager - this class is an abstract class which allows for multiple types of packaging agents such as MIME and DIME. + +=head1 DESCRIPTION + +The SOAP::Lite::Packager class is responsible for managing a set of "parts." Parts are +additional pieces of information, additional documents, or virtually anything that +needs to be associated with the SOAP Envelope/payload. The packager then will take +these parts and encode/decode or "package"/"unpackage" them as they come and go +over the wire. + +=head1 METHODS + +=over + +=item new + +Instantiates a new instance of a SOAP::Lite::Packager. + +=item parts + +Contains an array of parts. The contents of this array and their types are completely +dependent upon the Packager being used. For example, when using MIME, the content +of this array is MIME::Entity's. + +=item push_part + +Adds a part to set of parts managed by the current instance of SOAP::Lite::Packager. + +=item parser + +Returns the parser used to parse attachments out of a data stream. + +=item headers_http + +This is a hook into the HTTP layer. It provides a way for a packager to add and/or modify +HTTP headers in a request/response. For example, most packaging layers will need to +override the Content-Type (e.g. multipart/related, or application/dime). + +=back + +=head1 ABSTRACT METHODS + +If you wish to implement your own SOAP::Lite::Packager, then the methods below must be +implemented by you according to the prescribed input and output requirements. + +=over + +=item package() + +The C subroutine takes as input the SOAP envelope in string/SCALAR form. +This will serve as the content of the root part. The packager then encapsulates the +envelope with the parts contained within C and returns the properly +encapsulated envelope in string/SCALAR form. + +=item unpackage() + +The C subroutines takes as input raw data that needs to be parsed into +a set of parts. It is responsible for extracting the envelope from the input, and +populating C with an ARRAY of parts extracted from the input. It then returns +the SOAP Envelope in string/SCALAR form so that SOAP::Lite can parse it. + +=back + +=head1 SUPPORTED PACKAGING FORMATS + +=head2 SOAP::Lite::Packager::MIME + +C utilizes L to provides the ability to send +and receive Multipart/Related and Multipart/Form-Data formatted requests and +responses. + +=head3 MIME METHODS + +The following methods are used when composing a MIME formatted message. + +=over + +=item transfer_encoding + +The value of the root part's Content-Transfer-Encoding MIME Header. Default is: 8bit. + +=item env_id + +The value of the root part's Content-Id MIME Header. Default is: . + +=item env_location + +The value of the root part's Content-Location MIME Header. Default is: /main_envelope. + +=item env_type + +The value of the root part's Content-Type MIME Header. Default is: text/xml. + +=back + +=head3 OPTIMIZING THE MIME PARSER + +The use of attachments can often result in a heavy drain on system resources depending +upon how your MIME parser is configured. For example, you can instruct the parser to +store attachments in memory, or to use temp files. Using one of the other can affect +performance, disk utilization, and/or reliability. Therefore you should consult the +following URL for optimization techniques and trade-offs: + +http://search.cpan.org/dist/MIME-tools/lib/MIME/Parser.pm#OPTIMIZING_YOUR_PARSER + +To modify the parser's configuration options consult the following code sample, +which incidentally shows how to minimize memory utilization: + + my $packager = SOAP::Lite::Packager::MIME->new; + # $packager->parser->decode_headers(1); # no difference + # $packager->parser->extract_nested_messages(1); # no difference + $packager->parser->output_to_core(0); # much less memory + $packager->parser->tmp_to_core(0); # much less memory + $packager->parser->tmp_recycling(0); # promotes faster garbage collection + $packager->parser->use_inner_files(1); # no difference + my $client = SOAP::Lite->uri($NS)->proxy($URL)->packager($packager); + $client->someMethod(); + +=head3 CLIENT SIDE EXAMPLE + +The following code sample shows how to use attachments within the context of a +SOAP::Lite client. + + #!/usr/bin/perl + use SOAP::Lite; + use MIME::Entity; + my $ent = build MIME::Entity + Type => "text/plain", + Path => "attachment.txt", + Filename => "attachment.txt", + Disposition => "attachment"; + $NS = "urn:Majordojo:TemperatureService"; + $HOST = "http://localhost/cgi-bin/soaplite.cgi"; + my $client = SOAP::Lite + ->packager(SOAP::Lite::Packager::MIME->new) + ->parts([ $ent ]) + ->uri($NS) + ->proxy($HOST); + $response = $client->c2f(SOAP::Data->name("temperature" => '100')); + print $response->valueof('//c2fResponse/foo'); + +=head3 SERVER SIDE EXAMPLE + +The following code shows how to use attachments within the context of a CGI +script. It shows how to read incoming attachments, and to return attachments to +the client. + + #!/usr/bin/perl -w + use SOAP::Transport::HTTP; + use MIME::Entity; + SOAP::Transport::HTTP::CGI + ->packager(SOAP::Lite::Packager::MIME->new) + ->dispatch_with({'urn:Majordojo:TemperatureService' => 'TemperatureService'}) + ->handle; + + BEGIN { + package TemperatureService; + use vars qw(@ISA); + @ISA = qw(Exporter SOAP::Server::Parameters); + use SOAP::Lite; + sub c2f { + my $self = shift; + my $envelope = pop; + my $temp = $envelope->dataof("//c2f/temperature"); + use MIME::Entity; + my $ent = build MIME::Entity + Type => "text/plain", + Path => "printenv", + Filename => "printenv", + Disposition => "attachment"; + # read attachments + foreach my $part (@{$envelope->parts}) { + print STDERR "soaplite.cgi: attachment found! (".ref($part).")\n"; + print STDERR "soaplite.cgi: contents => ".$part->stringify."\n"; + } + # send attachments + return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32)), + $ent; + } + } + +=head2 SOAP::Lite::Packager::DIME + +TODO + +=head1 SEE ALSO + +L, L + +=head1 COPYRIGHT + +Copyright (C) 2000-2007 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Byrne Reese + +Martin Kutter Emartin.kutter fen-net.deE + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Utils.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Utils.pm new file mode 100644 index 0000000..1470f15 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Lite/Utils.pm @@ -0,0 +1,29 @@ +package SOAP::Lite::Utils; +use strict; + +sub import { + my $caller = caller(); + no strict qw(refs); + *{ "$caller\::__mk_accessors" } = \&__mk_accessors; +} + +sub __mk_accessors { + my ($class, @method_from) = @_; + no strict 'refs'; + for my $method ( @method_from ) { + my $field = '_' . $method; + *{ "$class\::$method" } = sub { + my $self = ref $_[0] ? shift : shift->new(); + if (@_) { + $self->{$field} = shift; + return $self + } + return $self->{$field}; + } + } +} + + +1; + +__END__ diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Packager.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Packager.pm new file mode 100644 index 0000000..48a35ff --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Packager.pm @@ -0,0 +1,554 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Packager.pm 372 2010-04-29 18:32:31Z kutterma $ +# +# ====================================================================== + +package SOAP::Packager; + +use strict; +use vars; + +our $VERSION = 0.712; +our $SUPPORTED_TYPES = { }; + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(parser headers_http persist_parts) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { $self->{$field} = shift; return $self } + return $self->{$field}; + } + } +} + +sub new { + my($class) = shift; + my(%params) = @_; + bless { + "_parts" => [ ], + "_parser" => undef, + "_persist_parts" => 0, + }, $class; +} + +sub is_supported_part { + my $self = shift; + return $SUPPORTED_TYPES->{ref $_[0]}; +} + +sub parts { + my $self = shift; + if (@_) { + $self->{'_parts'} = shift; + } + return $self->{'_parts'}; +} + +# This is a static method that helps find the right Packager +sub find_packager { + # TODO - Input: + # * the mimetype of the data to be decoded raw data that needs + # * the data to be decoded + # Returns: + # * the proper SOAP::Packager instance +} + +sub push_part { + my $self = shift; + my ($part) = @_; + push @{$self->{'_parts'}}, $part; +} + +sub package { + # do nothing + die "SOAP::Packager::package() must be implemented"; +} + +sub unpackage { + my $self = shift; + $self->{'_parts'} = [] if !$self->persist_parts; # experimental +} + +# ====================================================================== + +package SOAP::Packager::MIME; + +use strict; +use vars qw(@ISA); +@ISA = qw(SOAP::Packager); + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(transfer_encoding env_id env_location) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { $self->{$field} = shift; return $self } + return $self->{$field}; + } + } +} + +sub new { + my ($classname) = @_; + my $self = SOAP::Packager::new(@_); + $self->{'_content_encoding'} = '8bit'; + $self->{'_env_id'} = ''; + $self->{'_env_location'} = '/main_envelope'; + bless $self, $classname; + $SOAP::Packager::SUPPORTED_TYPES->{"MIME::Entity"} = 1; + return $self; +} + +sub initialize_parser { + my $self = shift; + eval "require MIME::Parser;"; + die "Could not find MIME::Parser - is MIME::Tools installed? Aborting." if $@; + $self->{'_parser'} = MIME::Parser->new; + $self->{'_parser'}->output_to_core('ALL'); + $self->{'_parser'}->tmp_to_core(1); + $self->{'_parser'}->ignore_errors(1); +} + +sub generate_random_string { + my ($self,$len) = @_; + my @chars=('a'..'z','A'..'Z','0'..'9','_'); + my $random_string; + foreach (1..$len) { + $random_string .= $chars[rand @chars]; + } + return $random_string; +} + +sub get_multipart_id { + my ($id) = shift; + ($id || '') =~ /^]+)>?$/; $1 || ''; +} + +sub package { + my $self = shift; + my ($envelope,$context) = @_; + return $envelope if (!$self->parts); # if there are no parts, + # then there is nothing to do + require MIME::Entity; + local $MIME::Entity::BOUNDARY_DELIMITER = "\r\n"; + my $top = MIME::Entity->build('Type' => "Multipart/Related"); + my $soapversion = defined($context) ? $context->soapversion : '1.1'; + $top->attach('Type' => $soapversion == 1.1 ? "text/xml" : "application/soap+xml", + 'Content-Transfer-Encoding' => $self->transfer_encoding(), + 'Content-Location' => $self->env_location(), + 'Content-ID' => $self->env_id(), + 'Data' => $envelope ); + # consume the attachments that come in as input by 'shift'ing + no strict 'refs'; + while (my $part = shift(@{$self->parts})) { + $top->add_part($part); + } + # determine MIME boundary + my $boundary = $top->head->multipart_boundary; + $self->headers_http({ 'Content-Type' => 'Multipart/Related; type="text/xml"; start=""; boundary="'.$boundary.'"'}); + return $top->stringify_body; +} + +sub unpackage { + my $self = shift; + my ($raw_input,$context) = @_; + $self->SUPER::unpackage(); + + # Parse the raw input into a MIME::Entity structure. + # - fail if the raw_input is not MIME formatted + $self->initialize_parser() if !defined($self->parser); + my $entity = eval { $self->parser->parse_data($raw_input) } + or die "Something wrong with MIME message: @{[$@ || $self->parser->last_error]}\n"; + + my $env = undef; + # major memory bloat below! TODO - fix! + if (lc($entity->head->mime_type) eq 'multipart/form-data') { + $env = $self->process_form_data($entity); + } elsif (lc($entity->head->mime_type) eq 'multipart/related') { + $env = $self->process_related($entity); + } elsif (lc($entity->head->mime_type) eq 'text/xml') { + # I don't think this ever gets called. + # warn "I am somewhere in the SOAP::Packager::MIME code I didn't know I would be in!"; + $env = $entity->bodyhandle->as_string; + } else { + die "Can't handle MIME messsage with specified type (@{[$entity->head->mime_type]})\n"; + } + + # return the envelope + if ($env) { + return $env; + } elsif ($entity->bodyhandle->as_string) { + return $entity->bodyhandle->as_string; + } else { + die "No content in MIME message\n"; + } +} + +sub process_form_data { + my ($self, $entity) = @_; + my $env = undef; + foreach my $part ($entity->parts) { + my $name = $part->head->mime_attr('content-disposition.name'); + $name eq 'payload' ? + $env = $part->bodyhandle->as_string + : $self->push_part($part); + } + return $env; +} + +sub process_related { + my $self = shift; + my ($entity) = @_; + die "Multipart MIME messages MUST declare Multipart/Related content-type" + if ($entity->head->mime_attr('content-type') !~ /^multipart\/related/i); + # As it turns out, the Content-ID and start parameters are optional + # according to the MIME and SOAP specs. In the event that the head cannot + # be found, the head/root entity is used as a starting point. + # [19 Mar 2008] Modified by Feng Li + # Check optional start parameter, then optional Content-ID, then create/add + # Content-ID (the same approach as in SOAP::Lite 0.66) + + #my $start = get_multipart_id($entity->head->mime_attr('content-type.start')); + my $start = get_multipart_id($entity->head->mime_attr('content-type.start')) + || get_multipart_id($entity->parts(0)->head->mime_attr('content-id')); + + if (!defined($start) || $start eq "") { + $start = $self->generate_random_string(10); + $entity->parts(0)->head->add('content-id',$start); + } + my $location = $entity->head->mime_attr('content-location') || + 'thismessage:/'; + my $env; + foreach my $part ($entity->parts) { + next if !UNIVERSAL::isa($part => "MIME::Entity"); + + # Weird, the following use of head->get(SCALAR[,INDEX]) doesn't work as + # expected. Work around is to eliminate the INDEX. + my $pid = get_multipart_id($part->head->mime_attr('content-id')); + + # If Content-ID is not supplied, then generate a random one (HACK - because + # MIME::Entity does not do this as it should... content-id is required + # according to MIME specification) + $pid = $self->generate_random_string(10) if $pid eq ''; + my $type = $part->head->mime_type; + + # If a Content-Location header cannot be found, this will look for an + # alternative in the following MIME Header attributes + my $plocation = $part->head->get('content-location') || + $part->head->mime_attr('Content-Disposition.filename') || + $part->head->mime_attr('Content-Type.name'); + if ($start && $pid eq $start) { + $env = $part->bodyhandle->as_string; + } else { + $self->push_part($part); + } + } +# die "Can't find 'start' parameter in multipart MIME message\n" +# if @{$self->parts} > 1 && !$start; + return $env; +} + +# ====================================================================== + +package SOAP::Packager::DIME; + +use strict; +use vars qw(@ISA); +@ISA = qw(SOAP::Packager); + +sub BEGIN { + no strict 'refs'; + for my $method ( qw(foo) ) { + my $field = '_' . $method; + *$method = sub { + my $self = shift; + if (@_) { $self->{$field} = shift; return $self } + return $self->{$field}; + } + } +} + +sub new { + my ($classname) = @_; + my $self = SOAP::Packager::new(@_); + bless $self, $classname; + $SOAP::Packager::SUPPORTED_TYPES->{"DIME::Payload"} = 1; + return $self; +} + +sub initialize_parser { + my $self = shift; + print STDERR "Initializing parser\n"; + eval "require DIME::Parser;"; + die "Could not find DIME::Parser - is DIME::Tools installed? Aborting." if $@; + $self->{'_parser'} = DIME::Parser->new; +} + +sub package { + my $self = shift; + my ($envelope,$context) = @_; + return $envelope if (!$self->parts); # if there are no parts, + # then there is nothing to do + require DIME::Message; + require DIME::Payload; + my $message = DIME::Message->new; + my $top = DIME::Payload->new; + my $soapversion = defined($context) ? $context->soapversion : '1.1'; + $top->attach('MIMEType' => $soapversion == 1.1 ? + "http://schemas.xmlsoap.org/soap/envelope/" : "application/soap+xml", + 'Data' => $envelope ); + $message->add_payload($top); + # consume the attachments that come in as input by 'shift'ing + no strict 'refs'; + while (my $part = shift(@{$self->parts})) { + die "You are only allowed to add parts of type DIME::Payload to a DIME::Message" + if (!$part->isa('DIME::Payload')); +# print STDERR "Adding payload to DIME message: ".ref($part)."\n"; + $message->add_payload($part); +# print STDERR "Payload's payload is: ".${$part->print_content_data}."\n"; + } + $self->headers_http({ 'Content-Type' => 'application/dime' }); + return $message->print_data; +} + +sub unpackage { + my $self = shift; + my ($raw_input,$context) = @_; + $self->SUPER::unpackage(); + + # Parse the raw input into a DIME::Message structure. + # - fail if the raw_input is not DIME formatted + print STDERR "raw_data: $raw_input\n"; + $self->initialize_parser() if !defined($self->parser); + my $message = eval { $self->parser->parse_data(\$raw_input) } + or die "Something wrong with DIME message: @{[$@]}\n"; + + # The first payload is always the SOAP Message + # TODO - Error check + my @payloads = @{$message->{'_PAYLOADS'}}; + my $env = shift(@payloads); + my $env_str = $env->print_content_data; + print STDERR "Received this envelope: ".$env_str."\n"; + while (my $p = shift(@payloads)) { + print STDERR "Adding part to Packager\n"; + $self->push_part($p); + } + return $env_str; +} + +1; +__END__ + +=pod + +=head1 NAME + +SOAP::Packager - this class is an abstract class which allows for multiple types of packaging agents such as MIME and DIME. + +=head1 DESCRIPTION + +The SOAP::Packager class is responsible for managing a set of "parts." Parts are +additional pieces of information, additional documents, or virtually anything that +needs to be associated with the SOAP Envelope/payload. The packager then will take +these parts and encode/decode or "package"/"unpackage" them as they come and go +over the wire. + +=head1 METHODS + +=over + +=item new + +Instantiates a new instance of a SOAP::Packager. + +=item parts + +Contains an array of parts. The contents of this array and their types are completely +dependent upon the Packager being used. For example, when using MIME, the content +of this array is MIME::Entity's. + +=item push_part + +Adds a part to set of parts managed by the current instance of SOAP::Packager. + +=item parser + +Returns the parser used to parse attachments out of a data stream. + +=item headers_http + +This is a hook into the HTTP layer. It provides a way for a packager to add and/or modify +HTTP headers in a request/response. For example, most packaging layers will need to +override the Content-Type (e.g. multipart/related, or application/dime). + +=back + +=head1 ABSTRACT METHODS + +If you wish to implement your own SOAP::Packager, then the methods below must be +implemented by you according to the prescribed input and output requirements. + +=over + +=item package() + +The C subroutine takes as input the SOAP envelope in string/SCALAR form. +This will serve as the content of the root part. The packager then encapsulates the +envelope with the parts contained within C and returns the properly +encapsulated envelope in string/SCALAR form. + +=item unpackage() + +The C subroutines takes as input raw data that needs to be parsed into +a set of parts. It is responsible for extracting the envelope from the input, and +populating C with an ARRAY of parts extracted from the input. It then returns +the SOAP Envelope in string/SCALAR form so that SOAP::Lite can parse it. + +=back + +=head1 SUPPORTED PACKAGING FORMATS + +=head2 SOAP::Packager::MIME + +C utilizes L to provides the ability to send +and receive Multipart/Related and Multipart/Form-Data formatted requests and +responses. + +=head3 MIME METHODS + +The following methods are used when composing a MIME formatted message. + +=over + +=item transfer_encoding + +The value of the root part's Content-Transfer-Encoding MIME Header. Default is: 8bit. + +=item env_id + +The value of the root part's Content-Id MIME Header. Default is: . + +=item env_location + +The value of the root part's Content-Location MIME Header. Default is: /main_envelope. + +=item env_type + +The value of the root part's Content-Type MIME Header. Default is: text/xml. + +=back + +=head3 OPTIMIZING THE MIME PARSER + +The use of attachments can often result in a heavy drain on system resources depending +upon how your MIME parser is configured. For example, you can instruct the parser to +store attachments in memory, or to use temp files. Using one of the other can affect +performance, disk utilization, and/or reliability. Therefore you should consult the +following URL for optimization techniques and trade-offs: + +http://search.cpan.org/dist/MIME-tools/lib/MIME/Parser.pm#OPTIMIZING_YOUR_PARSER + +To modify the parser's configuration options consult the following code sample, +which incidentally shows how to minimize memory utilization: + + my $packager = SOAP::Packager::MIME->new; + # $packager->parser->decode_headers(1); # no difference + # $packager->parser->extract_nested_messages(1); # no difference + $packager->parser->output_to_core(0); # much less memory + $packager->parser->tmp_to_core(0); # much less memory + $packager->parser->tmp_recycling(0); # promotes faster garbage collection + $packager->parser->use_inner_files(1); # no difference + my $client = SOAP::Lite->uri($NS)->proxy($URL)->packager($packager); + $client->someMethod(); + +=head3 CLIENT SIDE EXAMPLE + +The following code sample shows how to use attachments within the context of a +SOAP::Lite client. + + #!/usr/bin/perl + use SOAP::Lite; + use MIME::Entity; + my $ent = build MIME::Entity + Type => "text/plain", + Path => "attachment.txt", + Filename => "attachment.txt", + Disposition => "attachment"; + $NS = "urn:Majordojo:TemperatureService"; + $HOST = "http://localhost/cgi-bin/soaplite.cgi"; + my $client = SOAP::Lite + ->packager(SOAP::Packager::MIME->new) + ->parts([ $ent ]) + ->uri($NS) + ->proxy($HOST); + $response = $client->c2f(SOAP::Data->name("temperature" => '100')); + print $response->valueof('//c2fResponse/foo'); + +=head3 SERVER SIDE EXAMPLE + +The following code shows how to use attachments within the context of a CGI +script. It shows how to read incoming attachments, and to return attachments to +the client. + + #!/usr/bin/perl -w + use SOAP::Transport::HTTP; + use MIME::Entity; + SOAP::Transport::HTTP::CGI + ->packager(SOAP::Packager::MIME->new) + ->dispatch_with({'urn:Majordojo:TemperatureService' => 'TemperatureService'}) + ->handle; + + BEGIN { + package TemperatureService; + use vars qw(@ISA); + @ISA = qw(Exporter SOAP::Server::Parameters); + use SOAP::Lite; + sub c2f { + my $self = shift; + my $envelope = pop; + my $temp = $envelope->dataof("//c2f/temperature"); + use MIME::Entity; + my $ent = build MIME::Entity + Type => "text/plain", + Path => "printenv", + Filename => "printenv", + Disposition => "attachment"; + # read attachments + foreach my $part (@{$envelope->parts}) { + print STDERR "soaplite.cgi: attachment found! (".ref($part).")\n"; + print STDERR "soaplite.cgi: contents => ".$part->stringify."\n"; + } + # send attachments + return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32)), + $ent; + } + } + +=head2 SOAP::Packager::DIME + +TODO + +=head1 SEE ALSO + +L, L + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/SOM.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/SOM.pod new file mode 100644 index 0000000..9108942 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/SOM.pod @@ -0,0 +1,315 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: SOM.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::SOM - provides access to the values contained in SOAP Response + +=head1 DESCRIPTION + +Objects from the SOAP::SOM class aren't generally instantiated directly by an application. Rather, they are handed back by the deserialization of a message. In other words, developers will almost never do this: + + $som = SOAP::SOM->new; + +SOAP::SOM objects are returned by a SOAP::Lite call in a client context. For example: + + my $client = SOAP::Lite + ->readable(1) + ->uri($NS) + ->proxy($HOST) + $som = $client->someMethod(); + +=head1 METHODS + +=over + +=item new(message) + + $som = SOAP::SOM->new($message_as_xml); + +As said, the need to actually create an object of this class should be very rare. However, if the need arises, the syntax must be followed. The single argument to new must be a valid XML document the parser will understand as a SOAP response. + +=back + +The following group of methods provide general data retrieval from the SOAP::SOM object. The model for this is an abbreviated form of XPath. Following this group are methods that are geared towards specific retrieval of commonly requested elements. + +=over + +=item match(path) + + $som->match('/Envelope/Body/[1]'); + +This method sets the internal pointers within the data structure so that the retrieval methods that follow will have access to the desired data. In the example path, the match is being made against the method entity, which is the first child tag of the body in a SOAP response. The enumeration of container children starts at 1 in this syntax, not 0. The returned value is dependent on the context of the call. If the call is made in a boolean context (such as C<< if ($som->match($path)) >>), the return value is a boolean indicating whether the requested path matched at all. Otherwise, an object reference is returned. The returned object is also a SOAP::SOM instance but is smaller, containing the subset of the document tree matched by the expression. + +=item valueof(node) + + $res = $som->valueof('[1]'); + +When the SOAP::SOM object has matched a path internally with the match method, this method allows retrieval of the data within any of the matched nodes. The data comes back as native Perl data, not a class instance (see dataof). In a scalar context, this method returns just the first element from a matched node set. In an array context, all elements are returned. Assuming that the earlier call happens after the earlier call to match, it retrieves the result entity from the method response that is contained in C<$som>, as this is the first child element in a method-response tag. + +=item dataof(node) + + $resobj = $som->dataof('[1]'); + +Performs the same operation as the earlier valueof method, except that the data is left in its L form, rather than being deserialized. This allows full access to all the attributes that were serialized along with the data, such as namespace and encoding. + +=item headerof(node) + + $resobj = $som->headerof('[1]'); + +Acts much like dataof, except that it returns an object of the L class (covered later in this chapter), rather than SOAP::Data. This is the preferred interface for manipulating the header entities in a message. + +=item namespaceuriof(node) + + $ns = $som->namespaceof('[1]'); + +Retrieves the namespace URI that governs the requested node. Note that namespaces are inherited, so this method will return the relevant value, even if it derives from a parent or other ancestor node. + +=back + +The following methods provide more direct access to the message envelope. All these methods return some form of a Perl value, most often a hash reference, when called. Context is also relevant: in a scalar context only the first matching node is returned, while in an array context, all matching nodes are. When called as a static method or as a regular function (such as C), any of the following methods returns the XPath string that is used with the match method to retrieve the data. + +=over + +=item root + + $root = $som->root; + +Returns the value of the root element as a hash reference. It behaves exactly as C<$som->valueof('/')> does. + +=item envelope + + $envelope = $som->envelope; + +Retrieves the "Envelope" element of the message, returning it and its data as a hash reference. Keys in the hash will be Header and Body (plus any optional elements that may be present in a SOAP 1.1 envelope), whose values will be the serialized header and body, respectively. + +=item header + + $header = $som->header; + +Retrieves the header portion of the envelope as a hash reference. All data within it will have been deserialized. If the attributes of the header are desired, the static form of the method can be combined with match to fetch the header as a SOAP::Data object: + + $header = $som->match(SOAP::SOM::header)->dataof; + +=item headers + + @hdrs = $som->headers; + +Retrieves the node set of values with deserialized headers from within the Header container. This is different from the earlier header method in that it returns the whole header as a single structure, and this returns the child elements as an array. In other words, the following expressions yield the same data structure: + + $header = ($som->headers)[0]; + $header = $som->valueof(SOAP::SOM::header.'/[1]'); + +=item body + + $body = $som->body; + +Retrieves the message body as a hash reference. The entity tags act as keys, with their deserialized content providing the values. + +=item fault + + if ($som->fault) { die $som->fault->faultstring } + +Acts both as a boolean test whether a fault occurred, and as a way to retrieve the Fault entity itself from the message body as a hash reference. If the message contains a fault, the next four methods (faultcode, faultstring, faultactor, and faultdetail) may be used to retrieve the respective parts of the fault (which are also available on the hash reference as keys). If fault in a boolean context is true, the C, C, C, and C methods all return C. + +=item faultcode + + $code = $som->faultcode; + +Returns the faultcode element of the fault if there is a fault; undef otherwise. + +=item faultstring + + $string = $som->faultstring; + +Returns the faultstring element of the fault if there is a fault; undef otherwise. + +=item faultactor + + $actor = $som->faultactor; + +Returns the faultactor element of the fault, if there is a fault and if the actor was specified within it. The faultactor element is optional in the serialization of a fault, so it may not always be present. This element is usually a string. + +=item faultdetail + + $detail = $som->faultdetail; + +Returns the content of the detail element of the fault, if there is a fault and if the detail element was provided. Note that the name of the element isn't the same as the method, due to the possibility for confusion had the method been called simply, detail. As with the faultactor element, this isn't always a required component of a fault, so it isn't guaranteed to be present. The specification for the detail portion of a fault calls for it to contain a series of element tags, so the application may expect a hash reference as a return value when detail information is available (and undef otherwise). + +=item method + + $method = $som->method + +Retrieves the "method" element of the message, as a hash reference. This includes all input parameters when called on a request message or all result/output parameters when called on a response message. If there is a fault present in the message, it returns undef. + +=item result + + $value = $som->result; + +Returns the value that is the result of a SOAP response. The value will be already deserialized into a native Perl datatype. + +=item paramsin + + @list = $som->paramsin; + +Retrieves the parameters being passed in on a SOAP request. If called in a scalar context, the first parameter is returned. When called in a list context, the full list of all parameters is returned. Each parameter is a hash reference, following the established structure for such return values. + +=item paramsout + + @list = $som->paramsout; + +Returns the output parameters from a SOAP response. These are the named parameters that are returned in addition to the explicit response entity itself. It shares the same scalar/list context behavior as the paramsin method. + +=item paramsall + + @list = $som->paramsall; + +Returns all parameters from a SOAP response, including the result entity itself, as one array. + +=item parts() + +Return an array of C's if the current payload contains attachments, or returns undefined if payload is not MIME multipart. + +=item is_multipart() + +Returns true if payload is MIME multipart, false otherwise. + +=back + +=head1 EXAMPLES + +=head2 ACCESSING ELEMENT VALUES + +Suppose for the following SOAP Envelope: + + + + + abcd + + + + +And suppose you wanted to access the value of the bar element, then use the following code: + + my $soap = SOAP::Lite + ->uri($SOME_NS) + ->proxy($SOME_HOST); + my $som = $soap->foo(); + print $som->valueof('//fooResponse/bar'); + +=head2 ACCESSING ATTRIBUTE VALUES + +Suppose the following SOAP Envelope: + + + + + 98.6 + + + + +Then to print the attribute 'test' use the following code: + + print "The attribute is: " . + $som->dataof('//c2fResponse/convertedTemp')->attr->{'test'}; + +=head2 ITERATING OVER AN ARRAY + +Suppose for the following SOAP Envelope: + + + + + + Programming Web Service with Perl + $29.95 + + + Perl Cookbook + $49.95 + + + + + +If the SOAP Envelope returned contained an array, use the following code to iterate over the array: + + for my $t ($som->valueof('//catalog/product')) { + print $t->{title} . " - " . $t->{price} . "\n"; + } + +=head2 DETECTING A SOAP FAULT + +A SOAP::SOM object is returned by a SOAP::Lite client regardless of whether the call succeeded or not. Therefore, a SOAP Client is responsible for determining if the returned value is a fault or not. To do so, use the fault() method which returns 1 if the SOAP::SOM object is a fault and 0 otherwise. + + my $som = $client->someMethod(@parameters); + + if ($som->fault) { + print $som->faultdetail; + } else { + # do something + } + +=head2 PARSING ARRAYS OF ARRAYS + +The most efficient way To parse and to extract data out of an array containing another array encoded in a SOAP::SOM object is the following: + + $xml = < + + 123 + 456 + + + 789 + 012 + + + END_XML + + my $som = SOAP::Deserializer->deserialize($xml); + my $i = 0; + foreach my $a ($som->dataof("//person/*")) { + $i++; + my $j = 0; + foreach my $b ($som->dataof("//person/[$i]/*")) { + $j++; + # do something + } + } + +=head1 SEE ALSO + +L, L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Schema.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Schema.pod new file mode 100644 index 0000000..8b92fc5 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Schema.pod @@ -0,0 +1,134 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Schema.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Schema - provides an umbrella for the way in which SOAP::Lite manages service description schemas + +=head1 DESCRIPTION + +This class provides an umbrella for the way in which SOAP::Lite manages service description schemas. Currently, the only support present is for the Web Services Description Language (WSDL). This is another of the classes not generally designed to be directly instantiated by an application, though it can be if so desired. + +=head1 METHODS + +=over + +=item new(optional key/value pairs) + + $schema = SOAP::Schema->new(parse => $schema_uri); + +This is the class constructor. With no arguments, it creates a blank object of the class. Any arguments that are passed are treated as key/value pairs in which the key represents one of the methods described here, and the value is what gets passed when the method itself gets invoked. + +=item parse(service description URI) + + $schema->parse('http://schemas.w3.org/soap.wsdl'); + +Parses the internal representation of the service description prior to the generation of stub routines to provide method-like access to the remote services. + +=item access(service description URI) + + $schema->access('http://soap.org/service.wsdl'); + +Loads the specified service description from the given URL, using the current value of the schema accessor if none is provided. The full content of the URL is returned on success, or an exception is thrown (via C) on error. + +=item load + + $schema->load; + +Takes the internal representation of the service and generates code stubs for the remote methods, allowing them to be called as local object methods. Stubs are generated for all the functions declared in the WSDL description with this call because it's enough of a class framework to allow for basic object creation for use as handles. + +=item schema + + $current_schema = $schema->schema; + +Gets (or sets) the current schema representation to be used by this object. The value to be passed when setting this is just the URI of the schema. This gets passed to other methods such as access for loading the actual content. + +=item services + + $hashref = $schema->services; + +Gets or sets the services currently stored on the object. The services are kept as a hash reference, whose keys and values are the list of returned values from the WSDL parser. Keys represent the names of the services themselves (names have been normalized into Perl-compatible identifiers), with values that are also hash references to the internal representation of the service itself. + +=item stub + +Returns the autogenerated Perl code as a string. This code is generated from the WSDL provided by the C method call. The code contains a package definition for the service being called. + + my $client = SOAP::Lite->new; + my $code = $client->service($WSDL_URL)->stub; + open FILE,">ServicePackage.pm"; + print FILE $code; + close FILE; + +=item cache_dir + +Sets/retrieves the value of the directory where generated stubs will be cached. If C is null, then no caching will be performed. + + my $client = SOAP::Lite->new; + my $code = $client->cache_dir("/tmp")->service($WSDL_URL)->stub; + +If C is undefined, no caching will take place. + +=item cache_ttl + +Sets/retrieves the value of the time to live (in seconds) for cached files. This is only relevant when used in conjunction with C. + +If C is set to 0, the cache will never expire. Files will have to be removed manually in order for the cache to be refreshed. + + my $client = SOAP::Lite->new; + my $code = $client->cache_ttl(3600)->cache_dir("/tmp")->service($WSDL_URL)->stub; + +The default time to live is 0. + +=item useragent(LWP::UserAgent) + + my $client = SOAP::Lite->new; + $ua = $client->schema->useragent; + $ua->agent("Fubar! 0.1"); + my $response = $client->service("http://localhost/some.wsdl") + ->someMethod("Foo"); + +Gets or sets the classes UserAgent used for retrieving schemas over the web. +This allows users to have direct access to the UserAgent so that they may control +the credentials passed to a remote server, or the specific configuration of their +HTTP agent. + +=back + +=head1 SOAP::Schema::WSDL + +At present, the SOAP::Lite toolkit supports only loading of service descriptions in the WSDL syntax. This class manages the parsing and storing of these service specifications. As a general rule, this class should be even less likely to be used directly by an application because its presence should be completely abstracted by the previous class (SOAP::Schema). None of the methods are defined here; the class is only mentioned for sake of reference. + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut + + + + + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Serializer.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Serializer.pod new file mode 100644 index 0000000..cfbf2f4 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Serializer.pod @@ -0,0 +1,274 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Serializer.pod 348 2010-03-16 19:56:31Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Serializer - the means by which the toolkit manages the expression of data as XML + +=head1 DESCRIPTION + +The SOAP::Serializer class is the means by which the toolkit manages the expression of data as XML. The object that a SOAP::Lite instance uses by default is generally enough for the task, with no need for the application to create its own. The main purpose of this class is to provide a place for applications to extend the serializer by defining additional methods for handling new datatypes. + +=head1 METHODS + +=over + +=item new(optional key/value pairs) + + $serialize = SOAP::Serializer->new( ); + +This is the constructor method for the class. In addition to creating a basic object and initializing it with default values, the constructor can also take names and values for most of the accessor methods that the class supports. + +=item envelope(method, data arguments) + + $serialize->envelope(fault => $fault_obj); + +Provides the core purpose for the SOAP::Serializer class. It creates the full SOAP envelope based on the input passed in to it. The data arguments passed in the list of parameters to the method are divided into two sublists: any parameters that are L objects or derivatives of go into one list, while the remainder go into the other. The nonheader objects are used as the content for the message body, with the body itself being largely dependent on the value of the first argument in the list. This argument is expected to be a string and should be one of the following: + +=item context + + $serialize->context->packager(); + +This provides access to the calling context of C. In a client side context the often means a reference to an instance of SOAP::Lite. In a server side context this means a reference to a SOAP::Server instance. + +=over + +=item method + +The envelope is being created to encapsulate a RPC-style method call. + +=item response + +The message being created is that of a response stemming from a RPC-style method call. + +=item fault + +For this specifier, the envelope being created is to transmit a fault. + +=item freeform + +This identifier is used as a general-case encoding style for messages that +don't fit into any of the previous cases. The arguments are encoded into the +envelope's Body tag without any sort of context sensitivity. + +=back + +Any value other than these four results in an error. + +=item envprefix(optional value) + + $serialize->envprefix('env'); + +Gets or sets the prefix that labels the SOAP envelope namespace. This defaults to SOAP-ENV. + +=item encprefix(optional value) + + $serialize->envprefix('enc'); + +Gets or sets the prefix that labels the SOAP encoding namespace. Defaults to SOAP-ENC. + +=item soapversion(optional value) + + $serialize->soapversion('1.2'); + +If no parameter is given, returns the current version of SOAP that is being used as the basis for serializing messages. If a parameter is given, attempts to set that as the version of SOAP being used. The value should be either 1.1 or 1.2. When the SOAP version is being set, the package selects new URNs for envelope and encoding spaces and also calls the xmlschema method to set the appropriate schema definition. + +=item xmlschema(optional value) + + $serialize->xmlschema($xml_schema_1999); + +Gets or sets the URN for the schema being used to express the structure of the XML generated by the serializer. If setting the value, the input must be the full URN for the new schema and is checked against the list of known SOAP schemas. + +=item register_ns + +The register_ns subroutine allows users to register a global namespace +with the SOAP Envelope. The first parameter is the namespace, the second +parameter to this subroutine is an optional prefix. If a prefix is not +provided, one will be generated automatically for you. All namespaces +registered with the serializer get declared in the +element. + +=item find_prefix + +The find_prefix subroutine takes a namespace as a parameter and returns +the assigned prefix to that namespace. This eliminates the need to declare +and redeclare namespaces within an envelope. This subroutine is especially +helpful in determining the proper prefix when assigning a type to a +SOAP::Data element. A good example of how this might be used is as follows: + + SOAP::Data->name("foo" => $inputParams{'foo'}) + ->type($client->serializer->find_prefix('urn:Foo').':Foo'); + +=back + +=head1 CUSTOM DATA TYPES + +When serializing an object, or blessed hash reference, into XML, C first checks to see if a subroutine has been defined for the corresponding class name. For example, in the code below, C will check to see if a subroutine called C has been defined. If so, then it will pass C<$foo> to that subroutine along with other data known about the C element being encoded. + + $foo = MyModule::MyPackage->new; + my $client = SOAP::Lite + ->uri($NS) + ->proxy($HOST); + $som = $client->someMethod(SOAP::Data->name("foo" => $foo)); + +=head1 as_TypeName SUBROUTINE REQUIREMENTS + +=over + +=item Naming Convention + +The subroutine should always be prepended with C followed by the type's name. The type's name must have all colons (':') substituded with an underscore ('_'). + +=item Input + +The input to C will have at least one parameter, and at most four parameters. The first parameter will always be the value or the object to be encoded. The following three parameters depend upon the context of the value/object being encoded. + +If the value/object being encoded was part of a C object (as in the above example), then the second, third and fourth parameter will be the C element's name, type, and attribute set respectively. If on the other hand, the value/object being encoded is I part of a C object, as in the code below: + + $foo = MyModule::MyPackage->new; + my $client = SOAP::Lite + ->uri($NS) + ->proxy($HOST); + $som = $client->someMethod($foo); + +Then the second and third parameters will be the class name of the value/object being encoded (e.g. "MyModule::MyPackage" in the example above), and the fourth parameter will be an empty hash. + +=item Output + +The encoding subroutine must return an array containing three elements: 1) the name of the XML element, 2) a hash containing the attributes to be placed into the element, and 3) the value of the element. + +=back + +=head1 AUTOTYPING + +When the type of an element has not been declared explicitly, SOAP::Lite must "guess" at the object's type. That is due to the fact that the only form of introspection that Perl provides (through the use of the C subroutine) does not provide enough information to C to allow SOAP::Lite to determine the exact type of an element being serialized. + +To work around this limitation, the C hash was created. This hash is populated with all the data types that the current C can auto detect. Users and developers are free to modify the contents of this hash allowing them to register new data types with the system. + +When C is asked to encode an object into XML, it goes through the following steps. First, C checks to see if a type has been explicitly stated for the current object. If a type has been provided C checks to see if an C subroutine as been defined for that type. If such a subroutine exists, then C passes the object to it to be encoded. If the subroutine does not exist, or the type has not been provided, then C must attempt to "guess" the type of the object being serialized. + +To do so, C runs in sequence a set of tests stored in the C hash. C continues to run each test until one of the tests returns true, indicating that the type of the object has been detected. When the type of the object has been detected, then C passes the object to the encoding subroutine that corresponds with the test that was passed. If all the tests fail, and the type was not determined, then C will as a last resort encode the object based on one of the four basic data types known to Perl: REF, SCALAR, ARRAY and HASH. + +The following table contains the set of data types detectable by C by default and the order in which their corresponding test subroutine will be run, according to their precedence value. + + Table 1 - Autotyping Precedence + + TYPENAME PRECEDENCE VALUE + ---------------------------- + base64 10 + int 20 + long 25 + float 30 + gMonth 35 + gDay 40 + gYear 45 + gMonthDay 50 + gYearMonth 55 + date 60 + time 70 + dateTime 75 + duration 80 + boolean 90 + anyURI 95 + string 100 + + +=head2 REGISTERING A NEW DATA TYPE + +To register a new data type that can be automatically detected by C and then serialized into XML, the developer must provide the following four things: + +=over + +=item * + +The name of the new data type. + +=item * + +A subroutine that is capable of detecting whether a value passed to it is of the corresponding data type. + +=item * + +A number representing the test subroutine's precedence relative to all the other types' test subroutinestypes. See I. + +=item * + +A subroutine that is capable of providing C with the information necessary to serialize an object of the corresponding data type into XML. + +=back + +=head3 EXAMPLE 1 + +If, for example, you wish to create a new datatype called C for which you would like Perl values to be automatically detected and serialized into, then you follow these steps. + +B + +The test subroutine will have passed to it by C a value to be tested. The test subroutine must return 1 if the value passed to it is of the corresponding type, or else it must return 0. + + sub SOAP::Serializer::uriReferenceTest { + my ($value) = @_; + return 1 if ($value =~ m!^http://!); + return 0; + } + +B + +The encoding subroutine provides C with the data necessary to encode the value passed to it into XML. The encoding subroutine name's should be of the following format: C. + +The encoding subroutine will have passed to it by C four parameters: the value to be encoded, the name of the element being encoded, the assumed type of the element being encoded, and a reference to a hash containing the attributes of the element being encoded. The encoding subroutine must return an array representing the encoded datatype. C will use the contents of this array to generate the corresponding XML of the value being encoded, or serialized. This array contains the following 3 elements: the name of the XML element, a hash containing the attributes to be placed into the element, and the value of the element. + + sub SOAP::Serializer::as_uriReference { + my $self = shift; + my($value, $name, $type, $attr) = @_; + return [$name, {'xsi:type' => 'xsd:uriReference', %$attr}, $value]; + } + +B + +To register the new data type, simply add the type to the C hash using the type name as the key, and an array containing the precedence value, the test subroutine, and the encoding subroutine. + + $s->typelookup->{uriReference} + = [11, \&uriReferenceTest, 'as_uriReference']; + +I subroutine above. For example:> + + $s->typelookup->{uriReference} + = [11, sub { $_[0] =~ m!^http://! }, 'as_uriReference']; + +Once complete, C will be able to serialize the following C object into XML: + + $elem = SOAP::Data->name("someUri" => 'http://yahoo.com')->type('uriReference'); + +C will also be able to automatically determine and serialize the following untyped C object into XML: + + $elem = SOAP::Data->name("someUri" => 'http://yahoo.com'); + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Server.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Server.pod new file mode 100644 index 0000000..872d6bc --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Server.pod @@ -0,0 +1,264 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Server.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Server - provides the basic framework for the transport-specific server classes to build upon + +=head1 DESCRIPTION + +The SOAP::Server class provides the basic framework for the transport-specific server classes to build upon. Note that in none of the code examples provided with SOAP::Lite is this class used directly. Instead, it is designed to be a superclass within more specific implementation classes. The methods provided by SOAP::Server itself are: + +=head1 METHODS + +=over + +=item new(optional key/value pairs) + + $server = SOAP::Server->new(%options); + +Creates a new object of the class. Various default instance values are set up, and like many of the constructors in this module, most of the class methods described here may be passed in the construction call by giving the name followed by the parameter (or an array reference if there are multiple parameters). + +=item action(optional new value) + + $action = $server->action + +Retrieves or sets the value of the action attribute on the server object. This attribute is used when mapping the request to an appropriate namespace or routine. For example, the HTTP library sets the attribute to the value of the SOAPAction header when processing of the request begins, so that the find_target method described later may retrieve the value to match it against the server's configuration. Returns the object itself when setting the attribute. + +=item myuri(optional new value) + + $server->myuri("http://localhost:9000/SOAP"); + +Gets or sets the myuri attribute. This specifies the specific URI that the server is answering requests to (which may be different from the value specified in action or in the SOAPAction header). + +=item serializer(optional new value) + +=item deserializer(optional new value) + + $serializer = $server->serializer; + $server->deserializer($new_deser_obj); + +As with the client objects, these methods provide direct access to the serialization and deserialization objects the server object uses to transform input and output from and to XML. There is generally little or no need to explicitly set these to new values. + +=item options(optional new value) + + $server->options({compress_threshold => 10000}); + +Sets (or retrieves) the current server options as a hash-table reference. At present, only one option is used within the SOAP::Lite libraries themselves: + +=over + +=item compress_threshold + +The value of this option is expected to be a numerical value. If set, and if the Compress::Zlib library is available to use, messages whose size in bytes exceeds this value are compressed for transmission. Both +ends of the conversation have to support this and have it enabled. + +=back + +Other options may be defined and passed around using this mechanism. Note that setting the options using this accessor requires a full hash reference be passed. To set just one or a few values, retrieve the current reference value and use it to set the key(s). + +=item dispatch_with(optional new value) + + $server->dispatch_with($new_table); + +Represents one of two ways in which a SOAP::Server (or derived) object may specify mappings of incoming requests to server-side subroutines or namespaces. The value of the attribute is a hash-table reference. To set the attribute, you must pass a new hash reference. The hash table's keys are URI strings (literal URIs or the potential values of the SOAPAction header), and the corresponding values are one of a class name or an object reference. Requests that come in for a URI found in the table are routed to the specified class or through the specified object. + +=item dispatch_to(optional list of new values) + + $server->dispatch_to($dir, 'Module', 'Mod::meth'); + +This is the more traditional way to specify modules and packages for routing requests. This is also an accessor, but it returns a list of values when called with no arguments (rather than a single one). Each item in the list of values passed to this method is expected to be one of four things: + +=over + +=item I + +If the value is a directory path, all modules located in that path are available for remote use. + +=item I + +When the value is a package name (without including a specific method name), all routines within the package are available remotely. + +=item I + +Alternately, when the value is a package-qualified name of a subroutine or method, that specific routine is made available. This allows the server to make selected methods available without opening the entire package. + +=item I + +If the value is an object reference, the object itself routes the request. + +The list of values held by the dispatch_to table are compared only after the URI mapping table from the dispatch_with attribute has been consulted. If the request's URI or SOAPAction header don't map to a specific configuration, the path specified by the action header (or in absence, the URI) is converted to a package name and compared against this set of values. + +=back + +=item objects_by_reference(optional list of new values) + + $server->objects_by_reference(qw(My:: Class)); + +This also returns a list of values when retrieving the current attribute value, +as opposed to a single value. + +This method doesn't directly specify classes for request routing so much as it +modifies the behavior of the routing for the specified classes. The classes that +are given as arguments to this method are marked to be treated as producing +persistent objects. The client is given an object representation that contains +just a handle on a local object with a default persistence of 600 idle seconds. +Each operation on the object resets the idle timer to zero. This facility is +considered experimental in the current version of SOAP::Lite. + +A global variable/"constant" allows developers to specify the amount of time +an object will be persisted. The default value is 600 idle seconds. This value +can be changed using the following code: + + $SOAP::Constants::OBJS_BY_REF_KEEPALIVE = 1000; + +=item on_action(optional new value) + + $server->on_action(sub { ...new code }); + +Gets or sets the reference to a subroutine that is used for executing the on_action hook. Where the client code uses this hook to construct the action-request data (such as for a SOAPAction header), the server uses the on_action hook to do any last-minute tests on the request itself, before it gets routed to a final destination. When called, the hook routine is passed three arguments: + +=over + +=item action + +The action URI itself, retrieved from the action method described earlier. + +=item method_uri + +The URI of the XML namespace the method name is labeled with. + +=item method_name + +The name of the method being called by the request. + +=back + +=item on_dispatch(optional new value) + + ($uri, $name) = $server->on_dispatch->($request); + +Gets or sets the subroutine reference used for the on_dispatch hook. This hook is called at the start of the request-routing phase and is given a single argument when called: + +=over + +=item request + +An object of the L class, containing the deserialized request from the client. + +=back + +=item find_target + + ($class, $uri, $name) = $server->find_target($req) + +Taking as its argument an object of the SOAP::SOM class that contains the deserialized request, this method returns a three-element list describing the method that is to be called. The elements are: + +=over + +=item class + +The class into which the method call should be made. This may come back as either a string or an objectreference, if the dispatching is configured using an object instance. + +=item uri + +The URN associated with the request method. This is the value that was used when configuring the method routing on the server object. + +=item name + +The name of the method to call. + +=back + +=item handle + + $server->handle($request_text); + +Implements the main functionality of the serving process, in which the server takes an incoming request and dispatches it to the correct server-side subroutine. The parameter taken as input is either plain XML or MIME-encoded content (if MIME-encoding support is enabled). + +=item make_fault + + return $server->makefault($code, $message); + +Creates a SOAP::Fault object from the data passed in. The order of arguments is: code, message, detail, actor. The first two are required (because they must be present in all faults), but the last two may be omitted unless needed. + +=back + +=head2 SOAP::Server::Parameters + +This class provides two methods, but the primary purpose from the developer's point of view is to allow classes that a SOAP server exposes to inherit from it. When a class inherits from the SOAP::Server::Parameters class, the list of parameters passed to a called method includes the deserialized request in the form of a L object. This parameter is passed at the end of the arguments list, giving methods the option of ignoring it unless it is needed. + +The class provides two subroutines (not methods), for retrieving parameters from the L object. These are designed to be called without an object reference in the parameter list, but with an array reference instead (as the first parameter). The remainder of the arguments list is expected to be the list from the method-call itself, including the SOAP::SOM object at the end of the list. The routines may be useful to understand if an application wishes to subclass SOAP::Server::Parameters and inherit from the new class instead. + +=over + +=item byNameOrOrder(order, parameter list, envelope) + + @args = SOAP::Server::Parameters::byNameOrOrder ([qw(a b)], @_); + +Using the list of argument names passed in the initial argument as an array reference, this routine returns a list of the parameter values for the parameters matching those names, in that order. If none of the names given in the initial array-reference exist in the parameter list, the values are returned in the order in which they already appear within the list of parameters. In this case, the number of returned values may differ from the length of the requested-parameters list. + +=item byName(order, parameter list, envelope) + + @args = SOAP::Server::Parameters::byName ([qw(a b c)], @_); + +Acts in a similar manner to the previous, with the difference that it always returns as many values as requested, even if some (or all) don't exist. Parameters that don't exist in the parameter list are returned as undef values. + +=back + +=head3 EXAMPLE + +The following is an example CGI based Web Service that utilizes a Perl module that inherits from the C class. This allows the methods of that class to access its input by name. + + #!/usr/bin/perl + use SOAP::Transport::HTTP; + SOAP::Transport::HTTP::CGI + ->dispatch_to('C2FService') + ->handle; + BEGIN { + package C2FService; + use vars qw(@ISA); + @ISA = qw(Exporter SOAP::Server::Parameters); + use SOAP::Lite; + sub c2f { + my $self = shift; + my $envelope = pop; + my $temp = $envelope->dataof("//c2f/temperature"); + return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32)); + } + } + +=head1 SEE ALSO + +L, L + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Test.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Test.pm new file mode 100644 index 0000000..fe2e8de --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Test.pm @@ -0,0 +1,407 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Test.pm 366 2010-04-27 19:02:05Z kutterma $ +# +# ====================================================================== + +package SOAP::Test; + +use 5.006; +our $VERSION = 0.712; + +our $TIMEOUT = 5; + +# ====================================================================== + +package My::PingPong; # we'll use this package in our tests + +sub new { + my $self = shift; + my $class = ref($self) || $self; + bless {_num=>shift} => $class; +} + +sub next { + my $self = shift; + $self->{_num}++; +} + +sub value { + my $self = shift; + $self->{_num}; +} + +# ====================================================================== + +package SOAP::Test::Server; + +use strict; +use Test; +use SOAP::Lite; + +sub run_for { + my $proxy = shift or die "Proxy/endpoint is not specified"; + + # ------------------------------------------------------ + my $s = SOAP::Lite->uri('http://something/somewhere')->proxy($proxy)->on_fault(sub{}); + eval { $s->transport->timeout($SOAP::Test::TIMEOUT) }; + my $r = $s->test_connection; + + unless (defined $r && defined $r->envelope) { + print "1..0 # Skip: ", $s->transport->status, "\n"; + exit; + } + # ------------------------------------------------------ + + plan tests => 53; + + eval q!use SOAP::Lite on_fault => sub{ref $_[1] ? $_[1] : new SOAP::SOM}; 1! or die; + + print STDERR "Perl SOAP server test(s)...\n"; + + $s = SOAP::Lite + -> uri('urn:/My/Examples') + -> proxy($proxy); + + ok($s->getStateName(1)->result eq 'Alabama'); + ok($s->getStateNames(1,4,6,13)->result =~ /^Alabama\s+Arkansas\s+Colorado\s+Illinois\s*$/); + + $r = $s->getStateList([1,2,3,4])->result; + ok(ref $r && $r->[0] eq 'Alabama'); + + $r = $s->getStateStruct({item1 => 1, item2 => 4})->result; + ok(ref $r && $r->{item2} eq 'Arkansas'); + + { + my $autoresult = $s->autoresult; + $s->autoresult(1); + ok($s->getStateName(1) eq 'Alabama'); + $s->autoresult($autoresult); + } + + print STDERR "Autobinding of output parameters test(s)...\n"; + + $s->uri('urn:/My/Parameters'); + my $param1 = 10; + my $param2 = SOAP::Data->name('myparam' => 12); + my $result = $s->autobind($param1, $param2)->result; + ok($result == $param1 && $param2->value == 24); + + print STDERR "Header manipulation test(s)...\n"; + $a = $s->addheader(2, SOAP::Header->name(my => 123)); + ok(ref $a->header && $a->header->{my} eq '123123'); + ok($a->headers eq '123123'); + + print STDERR "Echo untyped data test(s)...\n"; + $a = $s->echotwo(11, 12); + ok($a->result == 11); + + print STDERR "mustUnderstand test(s)...\n"; + $s->echo(SOAP::Header->name(somethingelse => 123) + ->mustUnderstand(1)); + ok($s->call->faultstring =~ /[Hh]eader has mustUnderstand attribute/); + + if ($proxy =~ /^http/) { + ok($s->transport->status =~ /^500/); + } else { + skip('No Status checks for non http protocols on server side' => undef); + } + + $s->echo(SOAP::Header->name(somethingelse => 123) + ->mustUnderstand(1) + ->actor('http://notme/')); + ok(!defined $s->call->fault); + + print STDERR "dispatch_from test(s)...\n"; + eval "use SOAP::Lite + uri => 'http://my.own.site.com/My/Examples', + dispatch_from => ['A', 'B'], + proxy => '$proxy', + ; 1" or die; + + eval { C->c }; + ok($@ =~ /Can't locate object method "c"/); + + eval { A->a }; + ok(!$@ && SOAP::Lite->self->call->faultstring =~ /Failed to access class \(A\)/); + + eval "use SOAP::Lite + dispatch_from => 'A', + uri => 'http://my.own.site.com/My/Examples', + proxy => '$proxy', + ; 1" or die; + + eval { A->a }; + ok(!$@ && SOAP::Lite->self->call->faultstring =~ /Failed to access class \(A\)/); + + print STDERR "Object autobinding and SOAP:: prefix test(s)...\n"; + + eval "use SOAP::Lite +autodispatch => + uri => 'urn:', proxy => '$proxy'; 1" or die; + + ok(SOAP::Lite->autodispatched); + + eval { SOAP->new(1) }; + ok($@ =~ /^URI is not specified/); + + eval "use SOAP::Lite +autodispatch => + uri => 'urn:/A/B', proxy => '$proxy'; 1" or die; + + # should call My::PingPong, not A::B + my $p = My::PingPong->SOAP::new(10); + ok(ref $p && $p->SOAP::next+1 == $p->value); + + # forget everything + SOAP::Lite->self(undef); + + $s = SOAP::Lite + -> uri('urn:/My/PingPong') + -> proxy($proxy) + ; + + # should return object EXACTLY as after My::PingPong->SOAP::new(10) + $p = $s->SOAP::new(10); + ok(ref $p && $s->SOAP::next($p)+1 == $p->value); + + print STDERR "VersionMismatch test(s)...\n"; + + { + local $SOAP::Constants::NS_ENV = 'http://schemas.xmlsoap.org/new/envelope/'; + my $s = SOAP::Lite + -> uri('http://my.own.site.com/My/Examples') + -> proxy($proxy) + -> on_fault(sub{}) + ; + $r = $s->dosomething; + ok(ref $r && $r->faultcode =~ /:VersionMismatch/); + } + + print STDERR "Objects-by-reference test(s)...\n"; + + eval "use SOAP::Lite +autodispatch => + uri => 'urn:', proxy => '$proxy'; 1" or die; + + print STDERR "Session iterator\n"; + $r = My::SessionIterator->new(10); + if (!ref $r || exists $r->{id}) { + ok(ref $r && $r->next && $r->next == 11); + } else { + skip('No persistent objects (o-b-r) supported on server side' => undef); + } + + print STDERR "Persistent iterator\n"; + $r = My::PersistentIterator->new(10); + if (!ref $r || exists $r->{id}) { + my $first = ($r->next, $r->next) if ref $r; + + $r = My::PersistentIterator->new(10); + ok(ref $r && $r->next && $r->next == $first+2); + } else { + skip('No persistent objects (o-b-r) supported on server side' => undef); + } + + { local $^W; # disable warnings about deprecated AUTOLOADing for nonmethods + print STDERR "Parameters-by-name test(s)...\n"; + print STDERR "You can see warning about AUTOLOAD for non-method...\n" if $^W; + + eval "use SOAP::Lite +autodispatch => + uri => 'http://my.own.site.com/My/Parameters', proxy => '$proxy'; 1" or die; + + my @parameters = ( + SOAP::Data->name(b => 222), + SOAP::Data->name(c => 333), + SOAP::Data->name(a => 111) + ); + + # switch to 'main' package, because nonqualified methods should be there + ok(main::byname(@parameters) eq "a=111, b=222, c=333"); + + ok(main::bynameororder(@parameters) eq "a=111, b=222, c=333"); + + ok(main::bynameororder(111, 222, 333) eq "a=111, b=222, c=333"); + + print STDERR "Function call test(s)...\n"; + print STDERR "You can see warning about AUTOLOAD for non-method...\n" if $^W; + ok(main::echo(11) == 11); + } + + print STDERR "SOAPAction test(s)...\n"; + if ($proxy =~ /^tcp:/) { + for (1..2) {skip('No SOAPAction checks for tcp: protocol on server side' => undef)} + } else { + my $s = SOAP::Lite + -> uri('http://my.own.site.com/My/Examples') + -> proxy($proxy) + -> on_action(sub{'""'}) + ; + ok($s->getStateName(1)->result eq 'Alabama'); + + $s->on_action(sub{'"wrong_SOAPAction_here"'}); + ok($s->getStateName(1)->faultstring =~ /SOAPAction shall match/); + } + + print STDERR "UTF8 test(s)...\n"; + if (!eval "pack('U*', 0)") { + for (1) {skip('No UTF8 test. No support for pack("U*") modifier' => undef)} + } else { + $s = SOAP::Lite + -> uri('http://my.own.site.com/My/Parameters') + -> proxy($proxy); + + my $latin1 = '�ਢ��'; + my $utf8 = pack('U*', unpack('C*', $latin1)); + my $result = $s->echo(SOAP::Data->type(string => $utf8))->result; + + ok(pack('U*', unpack('C*', $result)) eq $utf8 # should work where XML::Parser marks resulting strings as UTF-8 + || join('', unpack('C*', $result)) eq join('', unpack('C*', $utf8)) # should work where it doesn't + ); + } + + { + my $on_fault_was_called = 0; + print STDERR "Die in server method test(s)...\n"; + my $s = SOAP::Lite + -> uri('http://my.own.site.com/My/Parameters') + -> proxy($proxy) + -> on_fault(sub{$on_fault_was_called++;return}) + ; + ok($s->die_simply()->faultstring =~ /Something bad/); + ok($on_fault_was_called > 0); + my $detail = $s->die_with_object()->dataof(SOAP::SOM::faultdetail . '/[1]'); + ok($on_fault_was_called > 1); + ok(ref $detail && $detail->name =~ /(^|:)something$/); + + # get Fault as hash of subelements + my $fault = $s->die_with_fault()->fault; + ok($fault->{faultcode} =~ ':Server.Custom'); + ok($fault->{faultstring} eq 'Died in server method'); + ok(ref $fault->{detail}->{BadError} eq 'BadError'); + ok($fault->{faultactor} eq 'http://www.soaplite.com/custom'); + } + + print STDERR "Method with attributes test(s)...\n"; + + $s = SOAP::Lite + -> uri('urn:/My/Examples') + -> proxy($proxy) + ; + + ok($s->call(SOAP::Data->name('getStateName')->attr({xmlns => 'urn:/My/Examples'}), 1)->result eq 'Alabama'); + + print STDERR "Call with empty uri test(s)...\n"; + $s = SOAP::Lite + -> uri('') + -> proxy($proxy) + ; + + ok($s->getStateName(1)->faultstring =~ /Denied access to method \(getStateName\) in class \(main\)/); + + ok($s->call('a:getStateName' => 1)->faultstring =~ /Denied access to method \(getStateName\) in class \(main\)/); + + print STDERR "Number of parameters test(s)...\n"; + + $s = SOAP::Lite + -> uri('http://my.own.site.com/My/Parameters') + -> proxy($proxy) + ; + { my @all = $s->echo->paramsall; ok(@all == 0) } + { my @all = $s->echo(1)->paramsall; ok(@all == 1) } + { my @all = $s->echo((1) x 10)->paramsall; ok(@all == 10) } + + print STDERR "Memory refresh test(s)...\n"; + + # Funny test. + # Let's forget about ALL settings we did before with 'use SOAP::Lite...' + SOAP::Lite->self(undef); + ok(!defined SOAP::Lite->self); + + print STDERR "Call without uri test(s)...\n"; + $s = SOAP::Lite + -> proxy($proxy) + ; + + ok($s->getStateName(1)->faultstring =~ /Denied access to method \(getStateName\) in class \(main\)/); + + print STDERR "Different settings for method and namespace test(s)...\n"; + + ok($s->call(SOAP::Data + ->name('getStateName') + ->attr({xmlns => 'urn:/My/Examples'}), 1)->result eq 'Alabama'); + + ok($s->call(SOAP::Data + ->name('a:getStateName') + ->uri('urn:/My/Examples'), 1)->result eq 'Alabama'); + + ok($s->call(SOAP::Data + ->name('getStateName') + ->uri('urn:/My/Examples'), 1)->result eq 'Alabama'); + + ok($s->call(SOAP::Data + ->name('a:getStateName') + ->attr({'xmlns:a' => 'urn:/My/Examples'}), 1)->result eq 'Alabama'); + + eval { $s->call(SOAP::Data->name('a:getStateName')) }; + + ok($@ =~ /Can't find namespace for method \(a:getStateName\)/); + + $s->serializer->namespaces->{'urn:/My/Examples'} = ''; + + ok($s->getStateName(1)->result eq 'Alabama'); + + eval "use SOAP::Lite + uri => 'urn:/My/Examples', proxy => '$proxy'; 1" or die; + + print STDERR "Global settings test(s)...\n"; + $s = new SOAP::Lite; + + ok($s->getStateName(1)->result eq 'Alabama'); + + SOAP::Trace->import(transport => + sub {$_[0]->content_type('something/wrong') if UNIVERSAL::isa($_[0] => 'HTTP::Request')} + ); + + if ($proxy =~ /^tcp:/) { + skip('No Content-Type checks for tcp: protocol on server side' => undef); + } else { + ok($s->getStateName(1)->faultstring =~ /Content-Type must be/); + } +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +SOAP::Test - Test framework for SOAP::Lite + +=head1 SYNOPSIS + + use SOAP::Test; + + SOAP::Test::Server::run_for('http://localhost/cgi-bin/soap.cgi'); + +=head1 DESCRIPTION + +SOAP::Test provides simple framework for testing server implementations. +Specify your address (endpoint) and run provided tests against your server. +See t/1*.t for examples. + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Trace.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Trace.pod new file mode 100644 index 0000000..c0da206 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Trace.pod @@ -0,0 +1,166 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Trace.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Trace - used only to manage and manipulate the runtime tracing of execution within the toolkit + +=head1 DESCRIPTION + +This class has no methods or objects. It is used only to manage and manipulate the runtime tracing of execution within the toolkit. In absence of methods, this section reviews the events that may be configured and the ways of configuring them. + +=head1 SYNOPSIS + +Tracing is enabled by the SOAP::Lite import method. This is usually done at compile-time, though it may be done explicitly by calling import directly. The commands for setting up tracing start with the keyword +trace. Alternately, +debug may be used; the two are interchangeable. After the initial keyword, one or more of the signals detailed here may be specified, optionally with a callback to handle them. When specifying multiple signals to be handled by a single callback, it is sufficient to list all of them first, followed finally by the callback, as in: + + use SOAP::Lite +trace => + method => fault => \&message_level, + trace => objects => \&lower_level; + +In the fragment, the reference to message_level is installed as the callback for both method and fault signals, while lower_level is installed for trace and object events. If callbacks aren't explicitly provided, the default tracing action is to log a message to Perl's STDOUT file descriptor. Callbacks should expect a one or more arguments passed in, though the nature of the arguments varies based on the signal. + +Any signal can be disabled by prefacing the name with a hyphen, such as -result. This is useful with the pseudosignal "all," which is shorthand for the full list of signals. The following fragment disables only the two signals, while still enabling the rest: + + SOAP::Lite->import(+trace => all => -result => -parameters); + +If the keyword +trace (or +debug) is used without any signals specified, it enables all signals (as if all were implied). + +The signals and their meaning follow. Each also bears a note as to whether the signal is relevant to a server application, client application, or both. + +=head1 TRACE SIGNALS + +=over + +=item transport I + +Triggered in the transport layer just before a request is sent and immediately after a response is received. Each time the signal is sent, the sole argument to the callback is the relevant object. On requests, this is a L object; for responses, it's a L object. + +=item dispatch I + +Triggered with the full name of the method being dispatched, just before execution is passed to it. It is currently disabled in SOAP::Lite 0.55. + +=item result I + +Triggered after the method has been dispatched and is passed the results returned from the method as a list. The result values have not yet been serialized when this signal is sent. + +=item parameters I + +Triggered before a method call is actually dispatched, with the data that is intended for the call itself. The parameters for the method call are passed in as a list, after having been deserialized into Perl data. + +=item headers I + +This signal should be for triggering on the headers of an incoming message, but it isn't implemented as of SOAP::Lite 0.55. + +=item objects I + +Highlights when an object is instantiated or destroyed. It is triggered in the new and DESTROY methods of the various SOAP::Lite classes. + +=item method I + +Triggered with the list of arguments whenever the envelope method of L is invoked with an initial argument of method. The initial string itself isn't passed to the callback. + +=item fault I + +As with the method signal earlier, except that this signal is triggered when SOAP::Serializer::envelope is called with an initial argument of fault. + +=item freeform I + +Like the two previous, this signal is triggered when the method SOAP::Serializer::envelope is called with an initial parameter of freeform. This syntax is used when the method is creating SOAP::Data objects from free-form input data. + +=item trace I + +Triggered at the entry-point of many of the more-significant functions. Not all the functions within the SOAP::Lite classes trigger this signal. Those that do are primarily the highly visible functions described in the interface descriptions for the various classes. + +=item debug I + +Used in the various transport modules to track the contents of requests and responses (as ordinary strings, not as objects) at different points along the way. + +=back + +=head1 EXAMPLES + +=head2 SELECTING SIGNALS TO TRACE + +The following code snippet will enable tracing for all signals: + + use SOAP::Lite +trace => 'all'; + +Or, the following will also do the trick: + + use SOAP::Lite +trace; + +You can disable tracing for a set of signals by prefixing the signal name with a hyphen. Therefore, if you wish to enable tracing for every signal EXCEPT transport signals, then you would use the code below: + + use SOAP::Lite +trace => [ qw(all -transport) ]; + +=head2 LOGGING SIGNALS TO A FILE + +You can optionally provide a subroutine or callback to each signal trace you declare. Each time a signal is received, it is passed to the corresponding subroutine. For example, the following code effectively logs all fault signals to a file called fault.log: + + use SOAP::Lite +trace => [ fault => \&log_faults ]; + + sub log_faults { + open LOGFILE,">fault.log"; + print LOGFILE, $_[0] . "\n"; + close LOGFILE; + } + +You can also use a single callback for multiple signals using the code below: + + use SOAP::Lite +trace => [ method, fault => \&log ]; + +=head2 LOGGING MESSAGE CONTENTS + +The transport signal is unique in the that the signal is not a text string, but the actually HTTP::Request being sent (just prior to be sent), or HTTP::Response object (immediately after it was received). The following code sample shows how to make use of this: + + use SOAP::Lite +trace => [ transport => &log_message ]; + + sub log_message { + my ($in) = @_; + if (class($in) eq "HTTP::Request") { + # do something... + print $in->contents; # ...for example + } elsif (class($in) eq "HTTP::Response") { + # do something + } + } + +=head2 ON_DEBUG + +The C method is available, as in: + + use SOAP::Lite; + my $client = SOAP::Lite + ->uri($NS) + ->proxy($HOST) + ->on_debug( sub { print @_; } ); + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport.pod new file mode 100644 index 0000000..de3aaf4 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport.pod @@ -0,0 +1,612 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Transport.pod 372 2010-04-29 18:32:31Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Transport - an abstract class extended by more specialized transport modules + +=head1 DESCRIPTION + +Objects of the SOAP::Transport class manage two roles: they manage both the parameters related to transport as set through the containing SOAP::Lite object, and they abstract the selection and loading of an appropriate transport module. This is done with an AUTOLOAD function within the class that intercepts all methods beyond the two defined next and reroutes them to the underlying transport implementation code. + +=head1 METHODS + +=over + +=item new + + $trans = SOAP::Transport->new; + +This is the constructor, which isn't usually called by an application directly. An application can use this to create a fresh new SOAP::Transport object, which may be installed using the SOAP::Lite->transport method defined earlier. No arguments are recognized. + +=item proxy(optional URL string) + + $trans->proxy('http://www.blackperl.com/SOAP'); + +Gets or sets the proxy (endpoint). This method must be called before any other methods are called. The proper transport code is loaded based on the scheme specified by the URL itself (http, jabber, etc.). Until this method is called the first time with a URL string, the underlying code has yet to be loaded, and the methods aren't available. When getting the current proxy (calling with no parameters), the returned value is a reference to the client object created from the protocol class that matched the endpoint, not the endpoint itself. + +=back + +=head1 SOAP Transport Sub-Classes + +Because the bulk of the work is done within the C module itself, many of the transport-level modules are very simple in their implementations. Transport modules are expected to define both client and server classes within their files. If a module defines only one of the types, it is assumed that the transport protocol itself supports only that side of the conversation. An example is L, which provides only a C class. + +L - Client class only + +L - Client, and server classes for CGI, FCGI, Daemon and mod_perl + +L - Server class only + +L - Server and Client classes + +L - Client class only + +L - Client class only + +L - Server and Client classes + +L - Server class only + +L - Server and Client classes + +=head2 METHODS + +Each SOAP::Transport sub-class is expected to define (or inherit, if it is subclassing another transport class) at least two methods. Any newly developed transport classes are also expected to adhere to this interface. Clients are expected to implement the C and C methods, and servers are expected to implement the C and C methods. Here they are: + +=over + +=item new(optional key/value pairs) + + $object = $class->new(%params); + +Creates a new object instance and returns it. Like the constructors for both C and L classes, all arguments passed in are treated as key/value pairs, where the key is expected to be one of the methods the class supports, and the value is the argument (or list reference of arguments) to the method. + +=item send_receive(key/value pairs) + + $client->send_recieve(%hash_table); + +(Required for client classes only) When the SOAP::Lite objects attempt to send out requests, the means for doing so is to attempt to call this method on the object held within the SOAP::Transport object contained within the client itself. All clients are expected to provide this, and the call to this method always passes four values for the hash keys: + +=over + +=item action + +The URI specifying the action being performed, usually the result from the on_action hook on the client object. + +=item encoding + +The URI of the encoding scheme that governs the message being sent. + +=item endpoint + +The URI specifying the endpoint to which the message is being sent. + +=item envelope + +The XML content of the message to be sent. It is generally the return value of the envelope method from the L object instance that the client object maintains. + +=item parts + +Attachments to add to the request. Currently this only supports an array of MIME::Entity objects, but in theory could support attachments of any format. + +=back + +=item handle + + $server->handle; + +(Required for server classes only.) This method is the central point for the various server classes to provide an interface to handling requests. The exact set and nature of parameters generally varies based on the classes themselves. + +=back + +=head2 SOAP::Transport::HTTP + +The most commonly used transport module is the HTTP implementation. This is loaded whenever an endpoint is given that starts with the characters, http:// or https://. This is also the most involved of the transport modules, defining not only a client class but several different server classes as well. + +=head3 HTTP PROXY SETTINGS + +Because C inherits from C, you can use any of C's proxy settings. For example: + + SOAP::Lite->proxy("http://endpoint.server/", + proxy => ["http" => "http://my.proxy.server"]); + +or + + $soap->transport->proxy("http" => "http://my.proxy.server"); + +The above code samples should specify a proxy server for you. And should you use C +and C for proxy authorization, C will handle it properly. + +=head3 HTTP BASIC AUTHENTICATION + +HTTP Basic authentication is accomplished by overriding the get_basic_credentials suboutine in C (which C is a subclass): + + BEGIN { + sub SOAP::Transport::HTTP::Client::get_basic_credentials { + return 'username' => 'password'; + } + } + +=head3 COOKIE-BASED AUTHENTICATION + + use HTTP::Cookies; + my $cookies = HTTP::Cookies->new(ignore_discard => 1); + # you may also add 'file' if you want to keep them between sessions + my $soap = SOAP::Lite->proxy('http://localhost/'); + $soap->transport->cookie_jar($cookies); + +Or, alternatively, you can do the above on a single line: + + $soap->proxy('http://localhost/', + cookie_jar => HTTP::Cookies->new(ignore_discard => 1)); + +Cookies will be taken from the response and provided to the request. You may access and manipulate cookies received, as well as add cookies of your own by using the C interfaces. + +=head3 SSL CERTIFICATE AUTHENTICATION + +To get certificate authentication working you need to set three environment variables: C, C, and optionally C. This can be done either through the command line, or directly within your Perl script using the C<$ENV> variable: + + $ENV{HTTPS_CERT_FILE} = 'client-cert.pem'; + $ENV{HTTPS_KEY_FILE} = 'client-key.pem'; + +These settings are referrenced by C, the module SOAP::Lite used for HTTPS support. Other options (e.g. CA peer verification) can be specified in a similar way. See L documentation for more information. + +Those who would like to use encrypted keys may find the following thread in the SOAP::Lite newsgroup helpful: + +http://groups.yahoo.com/group/soaplite/message/729 + +=head3 COMPRESSION + +SOAP::Lite provides you with the option for enabling compression over the wire using HTTP I in both the server and client contexts, provided that you have L installed. Compression and decompression is done transparantly to your application. + +A server will respond with an encoded/compressed message only if the client has asserted that it can accept it (indicated by client sending an C HTTP header with a 'deflate' or '*' value). + +C clients all have fallback logic implemented so that if a server doesn't understand the specified encoding (i.e. "Content-Encoding: deflate") and returns the proper HTTP status code (415 NOT ACCEPTABLE), the client will repeat the request without using encoding/compression. The client will then store this server in a per-session cache, so that all subsequent requests to that server will be transmitted without encoding. + +Compression is enabled on the client side by specifying the C option, and if the size of the current request exceeds that threshold. + +B + + print SOAP::Lite + ->uri('http://localhost/My/Parameters') + ->proxy('http://localhost/', options => {compress_threshold => 10000}) + ->echo(1 x 10000) + ->result; + +Servers will respond with a compressed message if the C option has been specified, if the size of the current response exceeds that threshold, and if the calling client transmitted the proper C HTTP Header. + +B + + my $server = SOAP::Transport::HTTP::CGI + ->dispatch_to('My::Parameters') + ->options({compress_threshold => 10000}) + ->handle; + +See also: L + +=head3 SOAP::Transport::HTTP::Client + +Inherits from: L, L (from the LWP package). + +With this class, clients are able to use HTTP for sending messages. This class provides just the basic new and send_receive methods. Objects of this class understand the compress_threshold option and use it if the server being communicated to also understands it. + +=head4 CHANGING THE DEFAULT USERAGENT CLASS + +By default, C extends C. +But under some circumstances, a user may wish to change the default +UserAgent class with their in order to better handle persist connections, or +to C, for example, which has better Win32/Internet +Explorer interoperability. + +One can use the code below as an example of how to change the default UserAgent class. + + use SOAP::Lite; + use SOAP::Transport::HTTP; + $SOAP::Transport::HTTP::Client::USERAGENT_CLASS = "My::UserAgent"; + my $client = SOAP::Lite->proxy(..)->uri(..); + my $som = $client->myMethod(); + +There is one caveat, however. The UserAgent class you use, I also be a subclass of C. If it is not, then C will issue the following error: "Could not load UserAgent class ." + +=head4 HTTP-KEEP-ALIVE, TIMEOUTS, AND MORE + +Because C extends C, all methods available C are also available to your SOAP Clients. For example, using C HTTP keep alive's are accomplished using the following code: + + my $ua = LWP::UserAgent->new( + keep_alive => 1, + timeout => 30 + ); + +Therefore, the same initialization parameters you would pass to C can also be passed to your SOAP::Lite client's C subroutine like so: + + my $soap = SOAP::Lite + ->uri($uri) + ->proxy($proxyUrl, + timeout => 30, + keep_alive => 1, + ); + +This is true for all initialization parameters and methods of C. + +=head4 METHODS + +=over + +=item http_request + +This method gives you access to a prototype of the HTTP Request object that +will be transmitted to a SOAP::Server. The actual request used is a copy of +that object. + +Do not use this method for anything else than setting prototypic behaviour for +the client object. + +=item http_response + +This method gives you access to the HTTP Response object that will be, or was +transmitted to a SOAP Server. It returns a L object. + +=back + +=head3 SOAP::Transport::HTTP::Server + +Inherits from: L. + +This is the most basic of the HTTP server implementations. It provides the + basic methods, new and handle. The handle method's behavior is defined here, + along with other methods specific to this class. The role of this class is + primarily to act as a superclass for the other HTTP-based server classes. + +=over + +=item handle + + $server->handle; + +Expects the request method to have been used to associate a HTTP::Request +object with the server object prior to being called. This method retrieves +that object reference to get at the request being handled. + +=item request(I) + + $server->request($req_object) + +Gets or sets the HTTP::Request object reference that the server will process within the handle method. + +=item response(I) + + $server->response(HTTP::Response->new(...)); + +Gets or sets the HTTP::Response object reference that the server has prepared for sending back to the client. + +=item make_response(I, I) + + $server->make_response(200, $body_xml); + +Constructs and returns an object of the HTTP::Response class, using the response code and content provided. + +=item make_fault(I) + + $server->response($server->make_fault(@data)); + +Creates a HTTP::Response object reference using a predefined HTTP response code to signify that a fault has occurred. The arguments are the same as those for the make_fault method of the SOAP::Server class. + +=item product_tokens + +This method takes no arguments and simply returns a string identifying the elements of the server class itself. It is similar to the product_tokens methods in the HTTP::Daemon and Apache classes. + +=back + +=head3 SOAP::Transport::HTTP::CGI + +Inherits from: L. + +This class is a direct subclass of SOAP::Transport::HTTP::Server and defines no additional methods. It includes logic in its implementation of the handle method that deals with the request headers and parameters specific to a CGI environment. + +=head4 EXAMPLE CGI + +The following code sample is a CGI based Web Service that converts celcius to fahrenheit: + + #!/usr/bin/perl + use SOAP::Transport::HTTP; + SOAP::Transport::HTTP::CGI + ->dispatch_to('C2FService') + ->handle; + BEGIN { + package C2FService; + use vars qw(@ISA); + @ISA = qw(Exporter SOAP::Server::Parameters); + use SOAP::Lite; + sub c2f { + my $self = shift; + my $envelope = pop; + my $temp = $envelope->dataof("//c2f/temperature"); + return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32)); + } + } + +=head4 EXAMPLE APACHE::REGISTRY USAGE + +Using a strictly CGI based Web Service has certain performance drawbacks. Running the same CGI under the Apache::Registery system has certain performance gains. + +B + + Alias /mod_perl/ "/Your/Path/To/Deployed/Modules" + + SetHandler perl-script + PerlHandler Apache::Registry + PerlSendHeader On + Options +ExecCGI + + +B + + use SOAP::Transport::HTTP; + + SOAP::Transport::HTTP::CGI + ->dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method') + ->handle; + +I will fail because the module will be only loaded dynamically the first time. Subsequent calls will produce "denied access" errors because once the module is already in memory C will bypass dynamic deployment. To work around this, simply specify both the full PATH and MODULE name in C and the module will be loaded dynamically, but will then work as if under static deployment. See F as an example.> + +=head3 SOAP::Transport::HTTP::Daemon + +Inherits from: L. + +The SOAP::Transport::HTTP::Daemon class encapsulates a reference to an object of the HTTP::Daemon class (from the LWP package). The class catches methods that aren't provided locally or by the superclass and attempts to call them on the HTTP::Daemon object. Thus, all methods defined in the documentation for that class are available to this class as well. Any that conflict with methods in SOAP::Transport::HTTP::Server (such as product_tokens) go to the superclass. Additionally, the behavior of the handle method is specific to this class: + +=over + +=item handle + +When invoked, this method enters into the typical accept loop in which it waits for a request on the socket that the daemon object maintains and deals with the content of the request. When all requests from the connection returned by the accept method of the HTTP::Daemon object have been processed, this method returns. + +=back + +=head4 REUSING SOCKETS ON RESTART + +Often when implementing an HTTP daemon, sockets will get tied up when you try to restart the daemon server. This prevents the server from restarting. Often users will see an error like "Cannot start server: port already in use." To circumvent this, instruct SOAP::Lite to reuse open sockets using C<< Reuse => 1 >>: + + my $daemon = SOAP::Transport::HTTP::Daemon + -> new (LocalPort => 80000, Reuse => 1) + +=head4 EXAMPLE DAEMON SERVER + + use SOAP::Transport::HTTP; + # change LocalPort to 81 if you want to test it with soapmark.pl + my $daemon = SOAP::Transport::HTTP::Daemon + -> new (LocalAddr => 'localhost', LocalPort => 80) + # specify list of objects-by-reference here + -> objects_by_reference(qw(My::PersistentIterator My::SessionIterator My::Chat)) + # specify path to My/Examples.pm here + -> dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method') + ; + print "Contact to SOAP server at ", $daemon->url, "\n"; + $daemon->handle; + +=head3 SOAP::Transport::HTTP::Apache + +Inherits from: L. + +This class provides an integration of the SOAP::Server base class with the mod_perl extension for Apache. To work as a location handler, the package provides a method called handler, for which handle is made an alias. The new method isn't functionally different from the superclass. Here are the other methods provided by this class: + +=over + +=item handler(I) + + $server->handler($r) + +Defines the basis for a location handler in the mod_perl fashion. The method expects an Apache request object as the parameter, from which it pulls the body of the request and calls the superclass handle method. + +Note that in this class, the local method named handle is aliased to this method. + +=item configure(I) + + $server->configure(Apache->request); + +Per-location configuration information can be provided to the server object using the Apache DirConfig directive and calling this method on the object itself. When invoked, the method reads the directory configuration information from Apache and looks for lines of the form: + + method => param + +Each line that matches the pattern is regarded as a potential method to call on the server object, with the remaining token taken as the parameter to the method. Methods that take hash references as arguments may be specified as: + + method => key => param, key => param + +The key/value pairs will be made into a hash reference on demand. If the server object doesn't recognize the named method as valid, it ignores the line. + +=back + +=head4 EXAMPLE APACHE MOD_PERL SERVER + +See F and L for more information. + +B + + + SetHandler perl-script + PerlHandler SOAP::Apache + PerlSetVar options "compress_threshold => 10000" + + +B + + package SOAP::Apache; + use SOAP::Transport::HTTP; + my $server = SOAP::Transport::HTTP::Apache + ->dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method'); + sub handler { $server->handler(@_) } + 1; + +See also L. + +=head3 SOAP::Transport::HTTP::FCGI + +Inherits from: L. + +This is an extension of the SOAP::Transport::HTTP::CGI that implements the differences needed for the FastCGI protocol. None of the methods are functionally different. + +=head2 SOAP::Transport::IO + +The SOAP::Transport::IO-based class allows for a sort of I/O proxying by allowing the application to configure what files or filehandles are used. This module supplies only a server class. + +=head3 SOAP::Transport::IO::Server + +Inherits from: L. + +The server class defined here inherits all methods from SOAP::Server, and adds two additional methods specific to the nature of the class: + +=over + +=item in + + $server->in(IO::File->new($file)); + +Gets or sets the current filehandle being used as the input source. + +=item out + + $server->out(\*STDERR); + +Gets or sets the filehandle being used as the output destination. + +=back + +=head2 SOAP::Transport::LOCAL + +The SOAP::Transport::LOCAL module is designed to provide a no-transport client class for tracing and debugging communications traffic. It links SOAP::Client and SOAP::Server so that the same object that "sends" the request also "receives" it. + +=head3 SOAP::Transport::LOCAL::Client + +Inherits from: L, L. +The implementations of the new and send_receive methods aren't noticeably different in their interface. Their behavior warrants description, however: + +=over + +=item new + +When the constructor creates a new object of this class, it sets up a few things beyond the usual SOAP::Client layout. The is_success method is set to a default value of 1. The dispatch_to method inherited from SOAP::Server is called with the current value of the global array @INC, allowing the client to call any methods that can be found in the current valid search path. And as with most of the constructors in this module, the optional key/value pairs are treated as method names and parameters. + +=item send_receive + +The implementation of this method simply passes the envelope portion of the input data to the handle method of SOAP::Server. While no network traffic results (directly) from this, it allows for debug signals to be sent through the SOAP::Trace facility. + +=back + +=head2 SOAP::Transport::MAILTO + +This transport class manages SMTP-based sending of messages from a client perspective. It doesn't provide a server class. The class gets selected when a client object passes a URI to proxy or endpoint that starts with the characters, mailto:. + +=head3 SOAP::Transport::MAILTO::Client + +Inherits from: L. + +The client class for this protocol doesn't define any new methods. The constructor functions in the same style as the others class constructors. The functionality of the send_receive method is slightly different from other classes, however. + +When invoked, the send_receive method uses the MIME::Lite package to encapsulate and transmit the message. Because mail messages are one-way communications (the reply being a separate process), there is no response message to be returned by the method. Instead, all the status-related attributes (code, message, status, is_success) are set, and no value is explicitly returned. + +=head2 SOAP::Transport::POP3 + +POP3 support is limited to a server implementation. Just as the MAILTO class detailed earlier operates by sending requests without expecting to process a response, the server described here accepts request messages and dispatches them without regard for sending a response other than that which POP3 defines for successful delivery of a message. + +=head3 SOAP::Transport::POP3::Server + +Inherits from: L. + +The new method of this class creates an object of the Net::POP3 class to use internally for polling a specified POP3 server for incoming messages. When an object of this class is created, it expects an endpoint to be specified with a URI that begins with the characters pop:// and includes user ID and password information as well as the hostname itself. + +The handle method takes the messages present in the remote mailbox and passes them (one at a time) to the superclass handle method. Each message is deleted after being routed. All messages in the POP3 mailbox are presumed to be SOAP messages. + +Methods for the Net::POP3 object are detected and properly routed, allowing operations such as $server->ping( ). + +This means that the endpoint string doesn't need to provide the user ID and password because the login method from the POP3 API may be used directly. + +=head2 SOAP::Transport::TCP + +The classes provided by this module implement direct TCP/IP communications methods for both clients and servers. + +The connections don't use HTTP or any other higher-level protocol. These classes are selected when the client or server object being created uses an endpoint URI that starts with tcp://. Both client and server classes support using Secure Socket Layer if it is available. If any of the parameters to a new method from either of the classes begins with SSL_ (such as SSL_server in place of Server), the class attempts to load the IO::Socket::SSL package and use it to create socket objects. + +Both of the following classes catch methods that are intended for the socket objects and pass them along, allowing calls such as $client->accept( ) without including the socket class in the inheritance tree. + +=head3 SOAP::Transport::TCP::Client + +Inherits from: L. + +The TCP client class defines only two relevant methods beyond new and send_receive. These methods are: + +=over + +=item SSL(I) + + if ($client->SSL) # Execute only if in SSL mode + +Reflects the attribute that denotes whether the client object is using SSL sockets for communications. + +=item io_socket_class + + ($client->io_socket_class)->new(%options); + +Returns the name of the class to use when creating socket objects for internal use in communications. As implemented, it returns one of IO::Socket::INET or IO::Socket::SSL, depending on the return value of the previous SSL method. + +=back + +If an application creates a subclass that inherits from this client class, either method is a likely target for overloading. + +The new method behaves identically to most other classes, except that it detects the presence of SSL-targeted values in the parameter list and sets the SSL method appropriately if they are present. + +The send_receive method creates a socket of the appropriate class and connects to the configured endpoint. It then sets the socket to nonblocking I/O, sends the message, shuts down the client end of the connection (preventing further writing), and reads the response back from the server. The socket object is discarded after the response and +appropriate status codes are set on the client object. + +=head3 SOAP::Transport::TCP::Server + +Inherits from: L. + +The server class also defines the same two additional methods as in the client class: + +=over + +=item SSL(I) + + if ($client->SSL) # Execute only if in SSL mode + +Reflects the attribute that denotes whether the client object is using SSL sockets for communications. + +=item io_socket_class + + ($client->io_socket_class)->new(%options); + +Returns the name of the class to use when creating socket objects for internal use in communications. As implemented, it returns one of IO::Socket::INET or IO::Socket::SSL, depending on the return value of the previous SSL method. The new method also manages the automatic selection of SSL in the same fashion as the client class does. + +The handle method in this server implementation isn't designed to be called once with each new request. Rather, it is called with no arguments, at which time it enters into an infinite loop of waiting for a connection, reading the request, routing the request and sending back the serialized response. This continues until the process itself is interrupted by an untrapped signal or similar means. + +=back + +=head1 ACKNOWLEDGEMENTS + +Special thanks to O'Reilly publishing which has graciously allowed SOAP::Lite to republish and redistribute large excerpts from I, mainly the SOAP::Lite reference found in Appendix B. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Paul Kulchenko (paulclinger@yahoo.com) + +Randy J. Ray (rjray@blackperl.com) + +Byrne Reese (byrne@majordojo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/HTTP.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/HTTP.pm new file mode 100644 index 0000000..f16b990 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/HTTP.pm @@ -0,0 +1,903 @@ +# ====================================================================== +# +# Copyright (C) 2000-2004 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: HTTP.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::HTTP; + +use strict; + +our $VERSION = 0.712; + +use SOAP::Lite; +use SOAP::Packager; + +# ====================================================================== + +package SOAP::Transport::HTTP::Client; + +use vars qw(@ISA $COMPRESS $USERAGENT_CLASS); +$USERAGENT_CLASS = 'LWP::UserAgent'; +@ISA = qw(SOAP::Client); + +$COMPRESS = 'deflate'; + +my ( %redirect, %mpost, %nocompress ); + +# hack for HTTP connection that returns Keep-Alive +# miscommunication (?) between LWP::Protocol and LWP::Protocol::http +# dies after timeout, but seems like we could make it work +my $_patched = 0; + +sub patch { + return if $_patched; + BEGIN { local ($^W) = 0; } + { + local $^W = 0; + sub LWP::UserAgent::redirect_ok; + *LWP::UserAgent::redirect_ok = sub { 1 } + } + { + + package LWP::Protocol; + local $^W = 0; + my $collect = \&collect; # store original + *collect = sub { + if ( defined $_[2]->header('Connection') + && $_[2]->header('Connection') eq 'Keep-Alive' ) { + my $data = $_[3]->(); + my $next = + SOAP::Utils::bytelength($$data) == + $_[2]->header('Content-Length') + ? sub { my $str = ''; \$str; } + : $_[3]; + my $done = 0; + $_[3] = sub { + $done++ ? &$next : $data; + }; + } + goto &$collect; + }; + } + $_patched++; +} + +sub DESTROY { SOAP::Trace::objects('()') } + +sub http_request { + my $self = shift; + if (@_) { $self->{'_http_request'} = shift; return $self } + return $self->{'_http_request'}; +} + +sub http_response { + my $self = shift; + if (@_) { $self->{'_http_response'} = shift; return $self } + return $self->{'_http_response'}; +} + +sub new { + my $class = shift; + + return $class if ref $class; # skip if we're already object... + + if ( !grep { $_ eq $USERAGENT_CLASS } @ISA ) { + push @ISA, $USERAGENT_CLASS; + } + + eval("require $USERAGENT_CLASS") + or die "Could not load UserAgent class $USERAGENT_CLASS: $@"; + + require HTTP::Request; + require HTTP::Headers; + + patch() if $SOAP::Constants::PATCH_HTTP_KEEPALIVE; + + my ( @params, @methods ); + while (@_) { + $class->can( $_[0] ) + ? push( @methods, shift() => shift ) + : push( @params, shift ); + } + my $self = $class->SUPER::new(@params); + + die +"SOAP::Transport::HTTP::Client must inherit from LWP::UserAgent, or one of its subclasses" + if !$self->isa("LWP::UserAgent"); + + $self->agent( join '/', 'SOAP::Lite', 'Perl', + $SOAP::Transport::HTTP::VERSION ); + $self->options( {} ); + + $self->http_request( HTTP::Request->new() ); + + while (@methods) { + my ( $method, $params ) = splice( @methods, 0, 2 ); + $self->$method( ref $params eq 'ARRAY' ? @$params : $params ); + } + + SOAP::Trace::objects('()'); + + return $self; +} + +sub send_receive { + my ( $self, %parameters ) = @_; + my ( $context, $envelope, $endpoint, $action, $encoding, $parts ) = + @parameters{qw(context envelope endpoint action encoding parts)}; + + $endpoint ||= $self->endpoint; + + my $method = 'POST'; + $COMPRESS = 'gzip'; + + $self->options->{is_compress} ||= + exists $self->options->{compress_threshold} + && eval { require Compress::Zlib }; + + # Initialize the basic about the HTTP Request object + my $http_request = $self->http_request()->clone(); + + # $self->http_request(HTTP::Request->new); + $http_request->headers( HTTP::Headers->new ); + + # TODO - add application/dime + $http_request->header( + Accept => ['text/xml', 'multipart/*', 'application/soap'] ); + $http_request->method($method); + $http_request->url($endpoint); + + no strict 'refs'; + if ($parts) { + my $packager = $context->packager; + $envelope = $packager->package( $envelope, $context ); + for my $hname ( keys %{$packager->headers_http} ) { + $http_request->headers->header( + $hname => $packager->headers_http->{$hname} ); + } + + # TODO - DIME support + } + + COMPRESS: { + my $compressed = + !exists $nocompress{$endpoint} + && $self->options->{is_compress} + && ( $self->options->{compress_threshold} || 0 ) < length $envelope; + + $envelope = Compress::Zlib::memGzip($envelope) if $compressed; + + my $original_encoding = $http_request->content_encoding; + + while (1) { + + # check cache for redirect + $endpoint = $redirect{$endpoint} if exists $redirect{$endpoint}; + + # check cache for M-POST + $method = 'M-POST' if exists $mpost{$endpoint}; + + # what's this all about? + # unfortunately combination of LWP and Perl 5.6.1 and later has bug + # in sending multibyte characters. LWP uses length() to calculate + # content-length header and starting 5.6.1 length() calculates chars + # instead of bytes. 'use bytes' in THIS file doesn't work, because + # it's lexically scoped. Unfortunately, content-length we calculate + # here doesn't work either, because LWP overwrites it with + # content-length it calculates (which is wrong) AND uses length() + # during syswrite/sysread, so we are in a bad shape anyway. + # + # what to do? we calculate proper content-length (using + # bytelength() function from SOAP::Utils) and then drop utf8 mark + # from string (doing pack with 'C0A*' modifier) if length and + # bytelength are not the same + my $bytelength = SOAP::Utils::bytelength($envelope); + if ($] < 5.008) { + $envelope = pack( 'C0A*', $envelope ); + } + else { + require Encode; + $envelope = Encode::encode('UTF-8', $envelope); + } + # if !$SOAP::Constants::DO_NOT_USE_LWP_LENGTH_HACK + # && length($envelope) != $bytelength; + $http_request->content($envelope); + $http_request->protocol('HTTP/1.1'); + + $http_request->proxy_authorization_basic( $ENV{'HTTP_proxy_user'}, + $ENV{'HTTP_proxy_pass'} ) + if ( $ENV{'HTTP_proxy_user'} && $ENV{'HTTP_proxy_pass'} ); + + # by Murray Nesbitt + if ( $method eq 'M-POST' ) { + my $prefix = sprintf '%04d', int( rand(1000) ); + $http_request->header( + Man => qq!"$SOAP::Constants::NS_ENV"; ns=$prefix! ); + $http_request->header( "$prefix-SOAPAction" => $action ) + if defined $action; + } + else { + $http_request->header( SOAPAction => $action ) + if defined $action; + } + + # $http_request->header(Expect => '100-Continue'); + + # allow compress if present and let server know we could handle it + $http_request->header( 'Accept-Encoding' => + [$SOAP::Transport::HTTP::Client::COMPRESS] ) + if $self->options->{is_compress}; + + $http_request->content_encoding( + $SOAP::Transport::HTTP::Client::COMPRESS) + if $compressed; + + if ( !$http_request->content_type ) { + $http_request->content_type( + join '; ', + $SOAP::Constants::DEFAULT_HTTP_CONTENT_TYPE, + !$SOAP::Constants::DO_NOT_USE_CHARSET && $encoding + ? 'charset=' . lc($encoding) + : () ); + } + elsif ( !$SOAP::Constants::DO_NOT_USE_CHARSET && $encoding ) { + my $tmpType = $http_request->headers->header('Content-type'); + + # $http_request->content_type($tmpType.'; charset=' . lc($encoding)); + my $addition = '; charset=' . lc($encoding); + $http_request->content_type( $tmpType . $addition ) + if ( $tmpType !~ /$addition/ ); + } + + $http_request->content_length($bytelength); + SOAP::Trace::transport($http_request); + SOAP::Trace::debug( $http_request->as_string ); + + $self->SUPER::env_proxy if $ENV{'HTTP_proxy'}; + + # send and receive the stuff. + # TODO maybe eval this? what happens on connection close? + $self->http_response( $self->SUPER::request($http_request) ); + SOAP::Trace::transport( $self->http_response ); + SOAP::Trace::debug( $self->http_response->as_string ); + + # 100 OK, continue to read? + if ( ( + $self->http_response->code == 510 + || $self->http_response->code == 501 + ) + && $method ne 'M-POST' + ) { + $mpost{$endpoint} = 1; + } + elsif ( $self->http_response->code == 415 && $compressed ) { + + # 415 Unsupported Media Type + $nocompress{$endpoint} = 1; + $envelope = Compress::Zlib::memGunzip($envelope); + $http_request->headers->remove_header('Content-Encoding'); + redo COMPRESS; # try again without compression + } + else { + last; + } + } + } + + $redirect{$endpoint} = $self->http_response->request->url + if $self->http_response->previous + && $self->http_response->previous->is_redirect; + + $self->code( $self->http_response->code ); + $self->message( $self->http_response->message ); + $self->is_success( $self->http_response->is_success ); + $self->status( $self->http_response->status_line ); + + # Pull out any cookies from the response headers + $self->{'_cookie_jar'}->extract_cookies( $self->http_response ) + if $self->{'_cookie_jar'}; + + my $content = + ( $self->http_response->content_encoding || '' ) =~ + /\b$SOAP::Transport::HTTP::Client::COMPRESS\b/o + && $self->options->{is_compress} + ? Compress::Zlib::memGunzip( $self->http_response->content ) + : ( $self->http_response->content_encoding || '' ) =~ /\S/ ? die +"Can't understand returned Content-Encoding (@{[$self->http_response->content_encoding]})\n" + : $self->http_response->content; + + return $self->http_response->content_type =~ m!^multipart/!i + ? join( "\n", $self->http_response->headers_as_string, $content ) + : $content; +} + +# ====================================================================== + +package SOAP::Transport::HTTP::Server; + +use vars qw(@ISA $COMPRESS); +@ISA = qw(SOAP::Server); + +use URI; + +$COMPRESS = 'deflate'; + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + require LWP::UserAgent; + my $self = shift; + return $self if ref $self; # we're already an object + + my $class = $self; + $self = $class->SUPER::new(@_); + $self->{'_on_action'} = sub { + ( my $action = shift || '' ) =~ s/^(\"?)(.*)\1$/$2/; + die +"SOAPAction shall match 'uri#method' if present (got '$action', expected '@{[join('#', @_)]}'\n" + if $action + && $action ne join( '#', @_ ) + && $action ne join( '/', @_ ) + && ( substr( $_[0], -1, 1 ) ne '/' + || $action ne join( '', @_ ) ); + }; + SOAP::Trace::objects('()'); + + return $self; +} + +sub BEGIN { + no strict 'refs'; + for my $method (qw(request response)) { + my $field = '_' . $method; + *$method = sub { + my $self = shift->new; + @_ + ? ( $self->{$field} = shift, return $self ) + : return $self->{$field}; + }; + } +} + +sub handle { + my $self = shift->new; + + SOAP::Trace::debug( $self->request->content ); + + if ( $self->request->method eq 'POST' ) { + $self->action( $self->request->header('SOAPAction') || undef ); + } + elsif ( $self->request->method eq 'M-POST' ) { + return $self->response( + HTTP::Response->new( + 510, # NOT EXTENDED +"Expected Mandatory header with $SOAP::Constants::NS_ENV as unique URI" + ) ) + if $self->request->header('Man') !~ + /^"$SOAP::Constants::NS_ENV";\s*ns\s*=\s*(\d+)/; + $self->action( $self->request->header("$1-SOAPAction") || undef ); + } + else { + return $self->response( + HTTP::Response->new(405) ) # METHOD NOT ALLOWED + } + + my $compressed = + ( $self->request->content_encoding || '' ) =~ /\b$COMPRESS\b/; + $self->options->{is_compress} ||= + $compressed && eval { require Compress::Zlib }; + + # signal error if content-encoding is 'deflate', but we don't want it OR + # something else, so we don't understand it + return $self->response( + HTTP::Response->new(415) ) # UNSUPPORTED MEDIA TYPE + if $compressed && !$self->options->{is_compress} + || !$compressed + && ( $self->request->content_encoding || '' ) =~ /\S/; + + my $content_type = $self->request->content_type || ''; + +# in some environments (PerlEx?) content_type could be empty, so allow it also +# anyway it'll blow up inside ::Server::handle if something wrong with message +# TBD: but what to do with MIME encoded messages in THOSE environments? + return $self->make_fault( $SOAP::Constants::FAULT_CLIENT, + "Content-Type must be 'text/xml,' 'multipart/*,' " + . "'application/soap+xml,' 'or 'application/dime' instead of '$content_type'" + ) + if !$SOAP::Constants::DO_NOT_CHECK_CONTENT_TYPE + && $content_type + && $content_type ne 'application/soap+xml' + && $content_type ne 'text/xml' + && $content_type ne 'application/dime' + && $content_type !~ m!^multipart/!; + + # TODO - Handle the Expect: 100-Continue HTTP/1.1 Header + if ( defined( $self->request->header("Expect") ) + && ( $self->request->header("Expect") eq "100-Continue" ) ) { + + } + + # TODO - this should query SOAP::Packager to see what types it supports, + # I don't like how this is hardcoded here. + my $content = + $compressed + ? Compress::Zlib::uncompress( $self->request->content ) + : $self->request->content; + + my $response = $self->SUPER::handle( + $self->request->content_type =~ m!^multipart/! + ? join( "\n", $self->request->headers_as_string, $content ) + : $content + ) or return; + + SOAP::Trace::debug($response); + + $self->make_response( $SOAP::Constants::HTTP_ON_SUCCESS_CODE, $response ); +} + +sub make_fault { + my $self = shift; + $self->make_response( + $SOAP::Constants::HTTP_ON_FAULT_CODE => $self->SUPER::make_fault(@_) + ); + return; +} + +sub make_response { + my ( $self, $code, $response ) = @_; + + my $encoding = $1 + if $response =~ /^<\?xml(?: version="1.0"| encoding="([^\"]+)")+\?>/; + + $response =~ s!(\?>)!$1! + if $self->request->content_type eq 'multipart/form-data'; + + $self->options->{is_compress} ||= + exists $self->options->{compress_threshold} + && eval { require Compress::Zlib }; + + my $compressed = $self->options->{is_compress} + && grep( /\b($COMPRESS|\*)\b/, + $self->request->header('Accept-Encoding') ) + && ( $self->options->{compress_threshold} || 0 ) < + SOAP::Utils::bytelength $response; + + $response = Compress::Zlib::compress($response) if $compressed; + +# this next line does not look like a good test to see if something is multipart +# perhaps a /content-type:.*multipart\//gi is a better regex? + my ($is_multipart) = + ( $response =~ /content-type:.* boundary="([^\"]*)"/im ); + + $self->response( + HTTP::Response->new( + $code => undef, + HTTP::Headers->new( + 'SOAPServer' => $self->product_tokens, + $compressed ? ( 'Content-Encoding' => $COMPRESS ) : (), + 'Content-Type' => join( '; ', + 'text/xml', + !$SOAP::Constants::DO_NOT_USE_CHARSET + && $encoding ? 'charset=' . lc($encoding) : () ), + 'Content-Length' => SOAP::Utils::bytelength $response + ), + ( $] > 5.007 ) + ? do { require Encode; Encode::encode( $encoding, $response ) } + : $response, + ) ); + + $self->response->headers->header( 'Content-Type' => +'Multipart/Related; type="text/xml"; start=""; boundary="' + . $is_multipart + . '"' ) + if $is_multipart; +} + +# ->VERSION leaks a scalar every call - no idea why. +sub product_tokens { + join '/', 'SOAP::Lite', 'Perl', $SOAP::Transport::HTTP::VERSION; +} + +# ====================================================================== + +package SOAP::Transport::HTTP::CGI; + +use vars qw(@ISA); +@ISA = qw(SOAP::Transport::HTTP::Server); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + return $self if ref $self; + + my $class = ref($self) || $self; + $self = $class->SUPER::new(@_); + SOAP::Trace::objects('()'); + + return $self; +} + +sub make_response { + my $self = shift; + $self->SUPER::make_response(@_); +} + +sub handle { + my $self = shift->new; + + my $length = $ENV{'CONTENT_LENGTH'} || 0; + + # if the HTTP_TRANSFER_ENCODING env is defined, set $chunked if it's chunked* + # else to false + my $chunked = (defined $ENV{'HTTP_TRANSFER_ENCODING'} + && $ENV{'HTTP_TRANSFER_ENCODING'} =~ /^chunked.*$/) || 0; + + + my $content = q{}; + + if ($chunked) { + my $buffer; + binmode(STDIN); + while ( read( STDIN, my $buffer, 1024 ) ) { + $content .= $buffer; + } + $length = length($content); + } + + if ( !$length ) { + $self->response( HTTP::Response->new(411) ) # LENGTH REQUIRED + } + elsif ( defined $SOAP::Constants::MAX_CONTENT_SIZE + && $length > $SOAP::Constants::MAX_CONTENT_SIZE ) { + $self->response( HTTP::Response->new(413) ) # REQUEST ENTITY TOO LARGE + } + else { + if ( exists $ENV{EXPECT} && $ENV{EXPECT} =~ /\b100-Continue\b/i ) { + print "HTTP/1.1 100 Continue\r\n\r\n"; + } + + #my $content = q{}; + if ( !$chunked ) { + my $buffer; + binmode(STDIN); + while ( sysread( STDIN, $buffer, $length ) ) { + $content .= $buffer; + last if ( length($content) >= $length ); + } + } + + $self->request( + HTTP::Request->new( + $ENV{'REQUEST_METHOD'} || '' => $ENV{'SCRIPT_NAME'}, + HTTP::Headers->new( + map { ( + /^HTTP_(.+)/i + ? ( $1 =~ m/SOAPACTION/ ) + ? ('SOAPAction') + : ($1) + : $_ + ) => $ENV{$_} + } keys %ENV + ), + $content, + ) ); + $self->SUPER::handle; + } + + # imitate nph- cgi for IIS (pointed by Murray Nesbitt) + my $status = + defined( $ENV{'SERVER_SOFTWARE'} ) + && $ENV{'SERVER_SOFTWARE'} =~ /IIS/ + ? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0' + : 'Status:'; + my $code = $self->response->code; + + binmode(STDOUT); + + print STDOUT "$status $code ", HTTP::Status::status_message($code), + "\015\012", $self->response->headers_as_string("\015\012"), "\015\012", + $self->response->content; +} + +# ====================================================================== + +package SOAP::Transport::HTTP::Daemon; + +use Carp (); +use vars qw($AUTOLOAD @ISA); +@ISA = qw(SOAP::Transport::HTTP::Server); + +sub DESTROY { SOAP::Trace::objects('()') } + +#sub new { require HTTP::Daemon; +sub new { + my $self = shift; + return $self if ( ref $self ); + + my $class = $self; + + my ( @params, @methods ); + while (@_) { + $class->can( $_[0] ) + ? push( @methods, shift() => shift ) + : push( @params, shift ); + } + $self = $class->SUPER::new; + + # Added in 0.65 - Thanks to Nils Sowen + # use SSL if there is any parameter with SSL_* in the name + $self->SSL(1) if !$self->SSL && grep /^SSL_/, @params; + my $http_daemon = $self->http_daemon_class; + eval "require $http_daemon" + or Carp::croak $@ + unless $http_daemon->can('new'); + + $self->{_daemon} = $http_daemon->new(@params) + or Carp::croak "Can't create daemon: $!"; + + # End SSL patch + + $self->myuri( URI->new( $self->url )->canonical->as_string ); + + while (@methods) { + my ( $method, $params ) = splice( @methods, 0, 2 ); + $self->$method( + ref $params eq 'ARRAY' + ? @$params + : $params + ); + } + SOAP::Trace::objects('()'); + + return $self; +} + +sub SSL { + my $self = shift->new; + if (@_) { + $self->{_SSL} = shift; + return $self; + } + return $self->{_SSL}; +} + +sub http_daemon_class { shift->SSL ? 'HTTP::Daemon::SSL' : 'HTTP::Daemon' } + +sub AUTOLOAD { + my $method = substr( $AUTOLOAD, rindex( $AUTOLOAD, '::' ) + 2 ); + return if $method eq 'DESTROY'; + + no strict 'refs'; + *$AUTOLOAD = sub { shift->{_daemon}->$method(@_) }; + goto &$AUTOLOAD; +} + +sub handle { + my $self = shift->new; + while ( my $c = $self->accept ) { + while ( my $r = $c->get_request ) { + $self->request($r); + $self->SUPER::handle; + $c->send_response( $self->response ); + } + +# replaced ->close, thanks to Sean Meisner +# shutdown() doesn't work on AIX. close() is used in this case. Thanks to Jos Clijmans + $c->can('shutdown') + ? $c->shutdown(2) + : $c->close(); + $c->close; + } +} + +# ====================================================================== + +package SOAP::Transport::HTTP::Apache; + +use vars qw(@ISA); +@ISA = qw(SOAP::Transport::HTTP::Server); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + unless ( ref $self ) { + my $class = ref($self) || $self; + $self = $class->SUPER::new(@_); + SOAP::Trace::objects('()'); + } + + # Added this code thanks to JT Justman + # This code improves and provides more robust support for + # multiple versions of Apache and mod_perl + + # mod_perl 2.0 + if ( defined $ENV{MOD_PERL_API_VERSION} + && $ENV{MOD_PERL_API_VERSION} >= 2 ) { + require Apache2::RequestRec; + require Apache2::RequestIO; + require Apache2::Const; + require Apache2::RequestUtil; + require APR::Table; + Apache2::Const->import( -compile => 'OK' ); + Apache2::Const->import( -compile => 'HTTP_BAD_REQUEST' ); + $self->{'MOD_PERL_VERSION'} = 2; + $self->{OK} = &Apache2::Const::OK; + } + else { # mod_perl 1.xx + die "Could not find or load mod_perl" + unless ( eval "require mod_perl" ); + die "Could not detect your version of mod_perl" + if ( !defined($mod_perl::VERSION) ); + if ( $mod_perl::VERSION < 1.99 ) { + require Apache; + require Apache::Constants; + Apache::Constants->import('OK'); + Apache::Constants->import('HTTP_BAD_REQUEST'); + $self->{'MOD_PERL_VERSION'} = 1; + $self->{OK} = &Apache::Constants::OK; + } + else { + require Apache::RequestRec; + require Apache::RequestIO; + require Apache::Const; + Apache::Const->import( -compile => 'OK' ); + Apache::Const->import( -compile => 'HTTP_BAD_REQUEST' ); + $self->{'MOD_PERL_VERSION'} = 1.99; + $self->{OK} = &Apache::OK; + } + } + + return $self; +} + +sub handler { + my $self = shift->new; + my $r = shift; + + # Begin patch from JT Justman + if ( !$r ) { + if ( $self->{'MOD_PERL_VERSION'} < 2 ) { + $r = Apache->request(); + } + else { + $r = Apache2::RequestUtil->request(); + } + } + + my $cont_len; + if ( $self->{'MOD_PERL_VERSION'} < 2 ) { + $cont_len = $r->header_in('Content-length'); + } + else { + $cont_len = $r->headers_in->get('Content-length'); + } + + # End patch from JT Justman + + my $content = ""; + if ( $cont_len > 0 ) { + my $buf; + + # attempt to slurp in the content at once... + $content .= $buf while ( $r->read( $buf, $cont_len ) > 0 ); + } + else { + + # throw appropriate error for mod_perl 2 + return Apache2::Const::HTTP_BAD_REQUEST() + if ( $self->{'MOD_PERL_VERSION'} >= 2 ); + return Apache::Constants::BAD_REQUEST(); + } + + $self->request( + HTTP::Request->new( + $r->method() => $r->uri, + HTTP::Headers->new( $r->headers_in ), + $content + ) ); + $self->SUPER::handle; + + # we will specify status manually for Apache, because + # if we do it as it has to be done, returning SERVER_ERROR, + # Apache will modify our content_type to 'text/html; ....' + # which is not what we want. + # will emulate normal response, but with custom status code + # which could also be 500. + if ($self->{'MOD_PERL_VERSION'} < 2 ) { + $r->status( $self->response->code ); + } + else { + $r->status_line($self->response->code); + } + + # Begin JT Justman patch + if ( $self->{'MOD_PERL_VERSION'} > 1 ) { + $self->response->headers->scan(sub { $r->headers_out->add(@_) }); + $r->content_type( join '; ', $self->response->content_type ); + } + else { + $self->response->headers->scan( sub { $r->header_out(@_) } ); + $r->send_http_header( join '; ', $self->response->content_type ); + } + + $r->print( $self->response->content ); + return $self->{OK}; + + # End JT Justman patch +} + +sub configure { + my $self = shift->new; + my $config = shift->dir_config; + for (%$config) { + $config->{$_} =~ /=>/ + ? $self->$_( {split /\s*(?:=>|,)\s*/, $config->{$_}} ) + : ref $self->$_() ? () # hm, nothing can be done here + : $self->$_( split /\s+|\s*,\s*/, $config->{$_} ) + if $self->can($_); + } + return $self; +} + +{ + + # just create alias + sub handle; + *handle = \&handler +} + +# ====================================================================== +# +# Copyright (C) 2001 Single Source oy (marko.asplund@kronodoc.fi) +# a FastCGI transport class for SOAP::Lite. +# Updated formatting and removed dead code in new() in 2008 +# by Martin Kutter +# +# ====================================================================== + +package SOAP::Transport::HTTP::FCGI; + +use vars qw(@ISA); +@ISA = qw(SOAP::Transport::HTTP::CGI); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + + require FCGI; + Exporter::require_version( 'FCGI' => 0.47 ) + ; # requires thread-safe interface + + my $class = shift; + return $class if ref $class; + + my $self = $class->SUPER::new(@_); + $self->{_fcgirq} = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR ); + SOAP::Trace::objects('()'); + + return $self; +} + +sub handle { + my $self = shift->new; + + my ( $r1, $r2 ); + my $fcgirq = $self->{_fcgirq}; + + while ( ( $r1 = $fcgirq->Accept() ) >= 0 ) { + $r2 = $self->SUPER::handle; + } + + return undef; +} + +# ====================================================================== + +1; diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/IO.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/IO.pm new file mode 100644 index 0000000..ee9cc1d --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/IO.pm @@ -0,0 +1,81 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: IO.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::IO; + +use strict; + +our $VERSION = 0.712; + +use IO::File; +use SOAP::Lite; +# ====================================================================== + +package SOAP::Transport::IO::Server; + +use strict; +use Carp (); +use vars qw(@ISA); +@ISA = qw(SOAP::Server); + +sub new { + my $class = shift; + + return $class if ref $class; + my $self = $class->SUPER::new(@_); + + return $self; +} + +sub in { + my $self = shift; + $self = $self->new() if not ref $self; + + return $self->{ _in } if not @_; + + my $file = shift; + $self->{_in} = (defined $file && !ref $file && !defined fileno($file)) + ? IO::File->new($file, 'r') + : $file; + return $self; +} + +sub out { + my $self = shift; + $self = $self->new() if not ref $self; + + return $self->{ _out } if not @_; + + my $file = shift; + $self->{_out} = (defined $file && !ref $file && !defined fileno($file)) + ? IO::File->new($file, 'w') + : $file; + return $self; +} + +sub handle { + my $self = shift->new; + + $self->in(*STDIN)->out(*STDOUT) unless defined $self->in; + my $in = $self->in; + my $out = $self->out; + + my $result = $self->SUPER::handle(join '', <$in>); + no strict 'refs'; + print {$out} $result + if defined $out; + return; +} + +# ====================================================================== + +1; + +__END__ diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOCAL.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOCAL.pm new file mode 100644 index 0000000..c9d246d --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOCAL.pm @@ -0,0 +1,64 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: LOCAL.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::LOCAL; + +use strict; + + +our $VERSION = 0.712; + +# ====================================================================== + +package SOAP::Transport::LOCAL::Client; + +use SOAP::Lite; + +use vars qw(@ISA); +@ISA = qw(SOAP::Client SOAP::Server); + +sub new { + my $class = shift; + return $class if ref $class; + my(@arg_from, @method_from); + while (@_) { + $class->can($_[0]) + ? push(@method_from, shift() => shift) + : push(@arg_from, shift) + } + my $self = $class->SUPER::new(@arg_from); + $self->is_success(1); # it's difficult to fail in this module + $self->dispatch_to(@INC); + while (@method_from) { + my($method, $param_ref) = splice(@method_from,0,2); + $self->$method(ref $param_ref eq 'ARRAY' + ? @$param_ref + : $param_ref) + } + return $self; +} + +sub send_receive { + my($self, %parameters) = @_; + my($envelope, $endpoint, $action) = + @parameters{qw(envelope endpoint action)}; + + SOAP::Trace::debug($envelope); + my $response = $self->SUPER::handle($envelope); + SOAP::Trace::debug($response); + + return $response; +} + +# ====================================================================== + +1; + +__END__ diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOOPBACK.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOOPBACK.pm new file mode 100644 index 0000000..f71dcc4 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/LOOPBACK.pm @@ -0,0 +1,77 @@ +# ====================================================================== +# +# Copyright (C) 2007 Martin Kutter. +# Part of SOAP-Lite, Copyright (C) 2000-2001 Paul Kulchenko +# (paulclinger@yahoo.com) +# You may distribute/modify this file under the same terms as perl itself. +# +# $ID: $ +# +# ====================================================================== + +package SOAP::Transport::LOOPBACK; +use strict; + +package SOAP::Transport::LOOPBACK::Client; +use strict; + +use vars qw(@ISA); +@ISA = qw(SOAP::Client); + +sub new { + my $class = ref $_[0] || $_[0]; + return bless {}, $class; +} + +sub send_receive { + my($self, %parameters) = @_; + + $self->code(200); + $self->message('OK'); + $self->is_success(1); + $self->status('200 OK'); + + return $parameters{envelope}; +} + +1; + +__END__ + +=pod + +=head1 NAME + +SOAP::Transport::LOOPBACK - Test loopback transport backend (Client only) + +=head1 DESCRIPTION + +SOAP::Transport::LOOPBACK is a test transport backend for SOAP::Lite. + +It just returns the XML request as response, thus allowing to test the +complete application stack of client applications from the front end down to +the transport layer without actually sending data over the wire. + +Using this transport backend is triggered by setting a loopback:// URL. + +Sending requests through this transport backend alway succeeds with the +following states: + + status: 200 OK + code: 200 + message: OK + +=head1 COPYRIGHT + +Copyright (C) 2007 Martin Kutter. All rights reserved. + +This file is part of SOAP-Lite, Copyright (C) 2000-2001 Paul Kulchenko. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Martin Kutter Emartin.kutter fen-net.deE + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/MAILTO.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/MAILTO.pm new file mode 100644 index 0000000..90a5978 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/MAILTO.pm @@ -0,0 +1,96 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: MAILTO.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::MAILTO; + +use strict; + + +our $VERSION = 0.712; + +use MIME::Lite; +use URI; + +# ====================================================================== + +package SOAP::Transport::MAILTO::Client; +use SOAP::Lite; +use vars qw(@ISA); +@ISA = qw(SOAP::Client); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $class = shift; + return $class if ref $class; + + my(@params, @methods); + while (@_) { $class->can($_[0]) ? push(@methods, shift() => shift) : push(@params, shift) } + my $self = bless {@params} => $class; + while (@methods) { my($method, $params) = splice(@methods,0,2); + $self->$method(ref $params eq 'ARRAY' ? @$params : $params) + } + SOAP::Trace::objects('()'); + + return $self; +} + +sub send_receive { + my($self, %parameters) = @_; + my($envelope, $endpoint, $action) = + @parameters{qw(envelope endpoint action)}; + + $endpoint ||= $self->endpoint; + my $uri = URI->new($endpoint); + %parameters = (%$self, + map {URI::Escape::uri_unescape($_)} + map {split/=/,$_,2} + split /[&;]/, $uri->query || ''); + + my $msg = MIME::Lite->new( + To => $uri->to, + Type => 'text/xml', + Encoding => $parameters{Encoding} || 'base64', + Data => $envelope, + $parameters{From} + ? (From => $parameters{From}) + : (), + $parameters{'Reply-To'} + ? ('Reply-To' => $parameters{'Reply-To'}) + : (), + $parameters{Subject} + ? (Subject => $parameters{Subject}) + : (), + ); + $msg->replace('X-Mailer' => join '/', 'SOAP::Lite', 'Perl', SOAP::Transport::MAILTO->VERSION); + $msg->add(SOAPAction => $action); + + SOAP::Trace::transport($msg); + SOAP::Trace::debug($msg->as_string); + + MIME::Lite->send(map {exists $parameters{$_} + ? ($_ => $parameters{$_}) + : ()} 'smtp', 'sendmail'); + eval { local $SIG{__DIE__}; $MIME::Lite::AUTO_CC = 0; $msg->send }; + (my $code = $@) =~ s/ at .*\n//; + + $self->code($code); + $self->message($code); + $self->is_success(!defined $code || $code eq ''); + $self->status($code); + + return; +} + +# ====================================================================== + +1; + +__END__ diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/POP3.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/POP3.pm new file mode 100644 index 0000000..a5168cf --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/POP3.pm @@ -0,0 +1,123 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: POP3.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::POP3; + +use strict; + +our $VERSION = 0.712; + +use Net::POP3; +use URI; + +# ====================================================================== + +package SOAP::Transport::POP3::Server; + +use Carp (); +use vars qw(@ISA $AUTOLOAD); +@ISA = qw(SOAP::Server); + +sub DESTROY { my $self = shift; $self->quit if $self->{_pop3server} } + +sub new { + my $class = shift; + return $class if ref $class; + + my $address = shift; + Carp::carp "URLs without 'pop://' scheme are deprecated. Still continue" + if $address =~ s!^(pop://)?!pop://!i && !$1; + my $server = URI->new($address); + my $self = $class->SUPER::new(@_); + $self->{_pop3server} = Net::POP3->new($server->host_port) + or Carp::croak "Can't connect to '@{[$server->host_port]}': $!"; + my $method = ! $server->auth || $server->auth eq '*' + ? 'login' + : $server->auth eq '+APOP' + ? 'apop' + : Carp::croak "Unsupported authentication scheme '@{[$server->auth]}'"; + $self->{_pop3server}->$method( split m{:}, $server->user() ) + or Carp::croak "Can't authenticate to '@{[$server->host_port]}' with '$method' method" + if defined $server->user; + return $self; +} + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY'; + + no strict 'refs'; + *$AUTOLOAD = sub { shift->{_pop3server}->$method(@_) }; + goto &$AUTOLOAD; +} + +sub handle { + my $self = shift->new; + my $messages = $self->list or return; + # fixes [ 1416700 ] POP3 Processes Messages Out of Order + foreach my $msgid (sort { $a <=> $b } (keys(%{$messages}) ) ) { + # foreach my $msgid (keys %$messages) { + $self->SUPER::handle(join '', @{$self->get($msgid)}); + } continue { + $self->delete($msgid); + } + return scalar keys %$messages; +} + +sub make_fault { return } + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +SOAP::Transport::POP3 - Server side POP3 support for SOAP::Lite + +=head1 SYNOPSIS + + use SOAP::Transport::POP3; + + my $server = SOAP::Transport::POP3::Server + -> new('pop://pop.mail.server') + # if you want to have all in one place + # -> new('pop://user:password@pop.mail.server') + # or, if you have server that supports MD5 protected passwords + # -> new('pop://user:password;AUTH=+APOP@pop.mail.server') + # specify list of objects-by-reference here + -> objects_by_reference(qw(My::PersistentIterator My::SessionIterator My::Chat)) + # specify path to My/Examples.pm here + -> dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method') + ; + # you don't need to use next line if you specified your password in new() + $server->login('user' => 'password') or die "Can't authenticate to POP3 server\n"; + + # handle will return number of processed mails + # you can organize loop if you want + do { $server->handle } while sleep 10; + + # you may also call $server->quit explicitly to purge deleted messages + +=head1 DESCRIPTION + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm new file mode 100644 index 0000000..a22da05 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm @@ -0,0 +1,223 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: TCP.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package SOAP::Transport::TCP; + +use strict; + +our $VERSION = 0.712; + +use URI; +use IO::Socket; +use IO::Select; +use IO::SessionData; + +# ====================================================================== + +package URI::tcp; # ok, let's do 'tcp://' scheme +require URI::_server; +@URI::tcp::ISA=qw(URI::_server); + +# ====================================================================== + +package SOAP::Transport::TCP::Client; + +use vars qw(@ISA); +@ISA = qw(SOAP::Client); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + + unless (ref $self) { + my $class = ref($self) || $self; + my(@params, @methods); + while (@_) { $class->can($_[0]) ? push(@methods, shift() => shift) : push(@params, shift) } + $self = bless {@params} => $class; + while (@methods) { my($method, $params) = splice(@methods,0,2); + $self->$method(ref $params eq 'ARRAY' ? @$params : $params) + } + # use SSL if there is any parameter with SSL_* in the name + $self->SSL(1) if !$self->SSL && grep /^SSL_/, keys %$self; + SOAP::Trace::objects('()'); + } + return $self; +} + +sub SSL { + my $self = shift->new; + @_ ? ($self->{_SSL} = shift, return $self) : return $self->{_SSL}; +} + +sub io_socket_class { shift->SSL ? 'IO::Socket::SSL' : 'IO::Socket::INET' } + +sub syswrite { + my($self, $sock, $data) = @_; + + my $timeout = $sock->timeout; + + my $select = IO::Select->new($sock); + + my $len = length $data; + while (length $data > 0) { + return unless $select->can_write($timeout); + local $SIG{PIPE} = 'IGNORE'; + # added length() to make it work on Mac. Thanks to Robin Fuller + my $wc = syswrite($sock, $data, length($data)); + if (defined $wc) { + substr($data, 0, $wc) = ''; + } elsif (!IO::SessionData::WOULDBLOCK($!)) { + return; + } + } + return $len; +} + +sub sysread { + my($self, $sock) = @_; + + my $timeout = $sock->timeout; + my $select = IO::Select->new($sock); + + my $result = ''; + my $data; + while (1) { + return unless $select->can_read($timeout); + my $rc = sysread($sock, $data, 4096); + if ($rc) { + $result .= $data; + } elsif (defined $rc) { + return $result; + } elsif (!IO::SessionData::WOULDBLOCK($!)) { + return; + } + } +} + +sub send_receive { + my($self, %parameters) = @_; + my($envelope, $endpoint, $action) = + @parameters{qw(envelope endpoint action)}; + + $endpoint ||= $self->endpoint; + warn "URLs with 'tcp:' scheme are deprecated. Use 'tcp://'. Still continue\n" + if $endpoint =~ s!^tcp:(//)?!tcp://!i && !$1; + my $uri = URI->new($endpoint); + + local($^W, $@, $!); + my $socket = $self->io_socket_class; + eval "require $socket" or Carp::croak $@ unless UNIVERSAL::can($socket => 'new'); + my $sock = $socket->new ( + PeerAddr => $uri->host, PeerPort => $uri->port, Proto => $uri->scheme, %$self + ); + + SOAP::Trace::debug($envelope); + + # bytelength hack. See SOAP::Transport::HTTP.pm for details. + my $bytelength = SOAP::Utils::bytelength($envelope); + $envelope = pack('C0A*', $envelope) + if !$SOAP::Constants::DO_NOT_USE_LWP_LENGTH_HACK && length($envelope) != $bytelength; + + my $result; + if ($sock) { + $sock->blocking(0); + $self->syswrite($sock, $envelope) and + $sock->shutdown(1) and # stop writing + $result = $self->sysread($sock); + } + + SOAP::Trace::debug($result); + + my $code = $@ || $!; + + $self->code($code); + $self->message($code); + $self->is_success(!defined $code || $code eq ''); + $self->status($code); + + return $result; +} + +# ====================================================================== + +package SOAP::Transport::TCP::Server; + +use IO::SessionSet; + +use Carp (); +use vars qw($AUTOLOAD @ISA); +@ISA = qw(SOAP::Server); + +sub DESTROY { SOAP::Trace::objects('()') } + +sub new { + my $self = shift; + + unless (ref $self) { + my $class = ref($self) || $self; + + my(@params, @methods); + while (@_) { $class->can($_[0]) ? push(@methods, shift() => shift) : push(@params, shift) } + $self = $class->SUPER::new(@methods); + + # use SSL if there is any parameter with SSL_* in the name + $self->SSL(1) if !$self->SSL && grep /^SSL_/, @params; + + my $socket = $self->io_socket_class; + eval "require $socket" or Carp::croak $@ unless UNIVERSAL::can($socket => 'new'); + $self->{_socket} = $socket->new(Proto => 'tcp', @params) + or Carp::croak "Can't open socket: $!"; + + SOAP::Trace::objects('()'); + } + return $self; +} + +sub SSL { + my $self = shift->new; + @_ ? ($self->{_SSL} = shift, return $self) : return $self->{_SSL}; +} + +sub io_socket_class { shift->SSL ? 'IO::Socket::SSL' : 'IO::Socket::INET' } + +sub AUTOLOAD { + my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2); + return if $method eq 'DESTROY'; + + no strict 'refs'; + *$AUTOLOAD = sub { shift->{_socket}->$method(@_) }; + goto &$AUTOLOAD; +} + +sub handle { + my $self = shift->new; + my $sock = $self->{_socket}; + my $session_set = IO::SessionSet->new($sock); + my %data; + while (1) { + my @ready = $session_set->wait($sock->timeout); + for my $session (@ready) { + my $data; + if (my $rc = $session->read($data, 4096)) { + $data{$session} .= $data if $rc > 0; + } else { + $session->write($self->SUPER::handle(delete $data{$session})); + $session->close; + } + } + } +} + +# ====================================================================== + +1; + +__END__ diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Utils.pod b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Utils.pod new file mode 100644 index 0000000..7d288d5 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/SOAP/Utils.pod @@ -0,0 +1,45 @@ +# ====================================================================== +# +# Copyright (C) 2000-2003 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Utils.pod 98 2007-10-09 09:41:55Z kutterma $ +# +# ====================================================================== + +=pod + +=head1 NAME + +SOAP::Utils - a utility package for SOAP::Lite + +=head1 DESCRIPTION + +This class gives you access to a number of subroutines to assist in data formating, encoding, etc. Many of the subroutines are private, and are not documented here, but a few are made public. + +=head1 METHODS + +=over + +=item format_datetime + +Returns a valid xsd:datetime string given a time object returned by Perl's localtime function. Usage: + + print SOAP::Utils::format_datetime(localtime); + +=back + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHORS + +Byrne Reese (byrne@majordojo.com) + +=cut + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/UDDI/Lite.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/UDDI/Lite.pm new file mode 100644 index 0000000..d8286ea --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/UDDI/Lite.pm @@ -0,0 +1,1472 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Lite.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package UDDI::Lite; +use 5.006; +use strict; +{ +our $VERSION = 0.712; +} +# ====================================================================== + +package UDDI::Constants; +our $VERSION = 0.712; + +BEGIN +{ + use vars + qw(%UDDI_VERSIONS $ELEMENTS $ATTRIBUTES $WITHNAMES $NAMESPACE $GENERIC); + + %UDDI_VERSIONS = ( + 1 => { + ELEMENTS => { + address => { addressLine => 1 }, + authToken => { authInfo => 1 }, + bindingDetail => { bindingTemplate => 1 }, + bindingTemplate => { + accessPoint => 1, + description => 1, + hostingRedirector => 1, + tModelInstanceDetails => 1 + }, + bindingTemplates => { bindingTemplate => 1 }, + businessDetail => { businessEntity => 1 }, + businessDetailExt => { businessEntityExt => 1 }, + businessEntity => { + businessServices => 1, + categoryBag => 1, + contacts => 1, + description => 1, + discoveryURLs => 1, + identifierBag => 1, + name => 1 + }, + businessEntityExt => { businessEntity => 1 }, + businessInfo => + { description => 1, name => 1, serviceInfos => 1 }, + businessInfos => { businessInfo => 1 }, + businessList => { businessInfos => 1 }, + businessService => { + bindingTemplates => 1, + categoryBag => 1, + description => 1, + name => 1 + }, + businessServices => { businessService => 1 }, + categoryBag => { keyedReference => 1 }, + contact => { + address => 1, + description => 1, + email => 1, + personName => 1, + phone => 1 + }, + contacts => { contact => 1 }, + delete_binding => { authInfo => 1, bindingKey => 1 }, + delete_business => { authInfo => 1, businessKey => 1 }, + delete_service => { authInfo => 1, serviceKey => 1 }, + delete_tModel => { authInfo => 1, tModelKey => 1 }, + discard_authToken => { authInfo => 1 }, + discoveryURLs => { discoveryUrl => 1 }, + dispositionReport => { result => 1 }, + findQualifiers => { findQualifier => 1 }, + find_binding => { findQualifiers => 1, tModelBag => 1 }, + find_business => { + categoryBag => 1, + discoveryURLs => 1, + findQualifiers => 1, + identifierBag => 1, + name => 1, + tModelBag => 1 + }, + find_service => { + categoryBag => 1, + findQualifiers => 1, + name => 1, + tModelBag => 1 + }, + find_tModel => { + categoryBag => 1, + findQualifiers => 1, + identifierBag => 1, + name => 1 + }, + get_bindingDetail => { bindingKey => 1 }, + get_businessDetail => { businessKey => 1 }, + get_businessDetailExt => { businessKey => 1 }, + get_registeredInfo => { authInfo => 1 }, + get_serviceDetail => { serviceKey => 1 }, + get_tModelDetail => { tModelKey => 1 }, + identifierBag => { keyedReference => 1 }, + instanceDetails => + { description => 1, instanceParms => 1, overviewDoc => 1 }, + overviewDoc => { description => 1, overviewURL => 1 }, + registeredInfo => { businessInfos => 1, tModelInfos => 1 }, + result => { errInfo => 1 }, + save_binding => { authInfo => 1, bindingTemplate => 1 }, + save_business => + { authInfo => 1, businessEntity => 1, uploadRegister => 1 }, + save_service => { authInfo => 1, businessService => 1 }, + save_tModel => + { authInfo => 1, tModel => 1, uploadRegister => 1 }, + serviceDetail => { businessService => 1 }, + serviceInfo => { name => 1 }, + serviceInfos => { serviceInfo => 1 }, + serviceList => { serviceInfos => 1 }, + tModel => { + categoryBag => 1, + description => 1, + identifierBag => 1, + name => 1, + overviewDoc => 1 + }, + tModelBag => { tModelKey => 1 }, + tModelDetail => { tModel => 1 }, + tModelInfo => { name => 1 }, + tModelInfos => { tModelInfo => 1 }, + tModelInstanceDetails => { tModelInstanceInfo => 1 }, + tModelInstanceInfo => + { description => 1, instanceDetails => 1 }, + tModelList => { tModelInfos => 1 }, + validate_categorization => { + businessEntity => 1, + businessService => 1, + keyValue => 1, + tModel => 1, + tModelKey => 1 + } + }, + ATTRIBUTES => { + accessPoint => { URLType => 2 }, + address => { sortCode => 2, useType => 2 }, + authToken => { generic => 2, operator => 2 }, + bindingDetail => + { generic => 2, operator => 2, truncated => 2 }, + bindingTemplate => { bindingKey => 2, serviceKey => 2 }, + businessDetail => + { generic => 2, operator => 2, truncated => 2 }, + businessDetailExt => + { generic => 2, operator => 2, truncated => 2 }, + businessEntity => + { authorizedName => 2, businessKey => 2, operator => 2 }, + businessInfo => { businessKey => 2 }, + businessList => + { generic => 2, operator => 2, truncated => 2 }, + businessService => { businessKey => 2, serviceKey => 2 }, + contact => { useType => 2 }, + delete_binding => { generic => 2 }, + delete_business => { generic => 2 }, + delete_service => { generic => 2 }, + delete_tModel => { generic => 2 }, + description => { lang => 2 }, + discard_authToken => { generic => 2 }, + discoveryUrl => { useType => 2 }, + dispositionReport => + { generic => 2, operator => 2, truncated => 2 }, + email => { useType => 2 }, + errInfo => { errCode => 2 }, + find_binding => + { generic => 2, maxRows => 2, serviceKey => 2 }, + find_business => { generic => 2, maxRows => 2 }, + find_service => + { businessKey => 2, generic => 2, maxRows => 2 }, + find_tModel => { generic => 2, maxRows => 2 }, + get_authToken => { cred => 2, generic => 2, userID => 2 }, + get_bindingDetail => { generic => 2 }, + get_businessDetail => { generic => 2 }, + get_businessDetailExt => { generic => 2 }, + get_registeredInfo => { generic => 2 }, + get_serviceDetail => { generic => 2 }, + get_tModelDetail => { generic => 2 }, + hostingRedirector => { bindingKey => 2 }, + keyedReference => + { keyName => 2, keyValue => 2, tModelKey => 2 }, + phone => { useType => 2 }, + registeredInfo => + { generic => 2, operator => 2, truncated => 2 }, + result => { errno => 2, keyType => 2 }, + save_binding => { generic => 2 }, + save_business => { generic => 2 }, + save_service => { generic => 2 }, + save_tModel => { generic => 2 }, + serviceDetail => + { generic => 2, operator => 2, truncated => 2 }, + serviceInfo => { businessKey => 2, serviceKey => 2 }, + serviceList => + { generic => 2, operator => 2, truncated => 2 }, + tModel => + { authorizedName => 2, operator => 2, tModelKey => 2 }, + tModelDetail => + { generic => 2, operator => 2, truncated => 2 }, + tModelInfo => { tModelKey => 2 }, + tModelInstanceInfo => { tModelKey => 2 }, + tModelList => { generic => 2, operator => 2, truncated => 2 }, + validate_categorization => { generic => 2 } + }, + WITHNAMES => [ + qw/accessPoint address addressLine authInfo authToken bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessDetailExt businessEntity businessEntityExt businessInfo businessInfos businessKey businessList businessService businessServices categoryBag contact contacts description discoveryURLs discoveryUrl dispositionReport email errInfo findQualifier findQualifiers hostingRedirector identifierBag instanceDetails instanceParms keyValue keyedReference name overviewDoc overviewURL personName phone registeredInfo result serviceDetail serviceInfo serviceInfos serviceKey serviceList tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList uploadRegister/ + ], + NAMESPACE => 'urn:uddi-org:api', + GENERIC => '1.0', # string, not number; '.0' matters + }, + 2 => { + ELEMENTS => { + add_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + address => { addressLine => 1 }, + assertionStatusItem => { + fromKey => 1, + keyedReference => 1, + keysOwned => 1, + toKey => 1 + }, + assertionStatusReport => { assertionStatusItem => 1 }, + authToken => { authInfo => 1 }, + bindingDetail => { bindingTemplate => 1 }, + bindingTemplate => { + accessPoint => 1, + description => 1, + hostingRedirector => 1, + tModelInstanceDetails => 1 + }, + bindingTemplates => { bindingTemplate => 1 }, + businessDetail => { businessEntity => 1 }, + businessDetailExt => { businessEntityExt => 1 }, + businessEntity => { + businessServices => 1, + categoryBag => 1, + contacts => 1, + description => 1, + discoveryURLs => 1, + identifierBag => 1, + name => 1 + }, + businessEntityExt => { businessEntity => 1 }, + businessInfo => + { description => 1, name => 1, serviceInfos => 1 }, + businessInfos => { businessInfo => 1 }, + businessList => { businessInfos => 1 }, + businessService => { + bindingTemplates => 1, + categoryBag => 1, + description => 1, + name => 1 + }, + businessServices => { businessService => 1 }, + categoryBag => { keyedReference => 1 }, + contact => { + address => 1, + description => 1, + email => 1, + personName => 1, + phone => 1 + }, + contacts => { contact => 1 }, + delete_binding => { authInfo => 1, bindingKey => 1 }, + delete_business => { authInfo => 1, businessKey => 1 }, + delete_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + delete_service => { authInfo => 1, serviceKey => 1 }, + delete_tModel => { authInfo => 1, tModelKey => 1 }, + discard_authToken => { authInfo => 1 }, + discoveryURLs => { discoveryURL => 1 }, + dispositionReport => { result => 1 }, + findQualifiers => { findQualifier => 1 }, + find_binding => { findQualifiers => 1, tModelBag => 1 }, + find_business => { + categoryBag => 1, + discoveryURLs => 1, + findQualifiers => 1, + identifierBag => 1, + name => 1, + tModelBag => 1 + }, + find_relatedBusinesses => { + businessKey => 1, + findQualifiers => 1, + keyedReference => 1 + }, + find_service => { + categoryBag => 1, + findQualifiers => 1, + name => 1, + tModelBag => 1 + }, + find_tModel => { + categoryBag => 1, + findQualifiers => 1, + identifierBag => 1, + name => 1 + }, + get_assertionStatusReport => + { authInfo => 1, completionStatus => 1 }, + get_bindingDetail => { bindingKey => 1 }, + get_businessDetail => { businessKey => 1 }, + get_businessDetailExt => { businessKey => 1 }, + get_publisherAssertions => { authInfo => 1 }, + get_registeredInfo => { authInfo => 1 }, + get_serviceDetail => { serviceKey => 1 }, + get_tModelDetail => { tModelKey => 1 }, + identifierBag => { keyedReference => 1 }, + instanceDetails => + { description => 1, instanceParms => 1, overviewDoc => 1 }, + keysOwned => { fromKey => 1, toKey => 1 }, + overviewDoc => { description => 1, overviewURL => 1 }, + publisherAssertion => + { fromKey => 1, keyedReference => 1, toKey => 1 }, + publisherAssertions => { publisherAssertion => 1 }, + registeredInfo => { businessInfos => 1, tModelInfos => 1 }, + relatedBusinessInfo => { + businessKey => 1, + description => 1, + name => 1, + sharedRelationships => 1 + }, + relatedBusinessInfos => { relatedBusinessInfo => 1 }, + relatedBusinessesList => + { businessKey => 1, relatedBusinessInfos => 1 }, + result => { errInfo => 1 }, + save_binding => { authInfo => 1, bindingTemplate => 1 }, + save_business => + { authInfo => 1, businessEntity => 1, uploadRegister => 1 }, + save_service => { authInfo => 1, businessService => 1 }, + save_tModel => + { authInfo => 1, tModel => 1, uploadRegister => 1 }, + serviceDetail => { businessService => 1 }, + serviceInfo => { name => 1 }, + serviceInfos => { serviceInfo => 1 }, + serviceList => { serviceInfos => 1 }, + set_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + sharedRelationships => { keyedReference => 1 }, + tModel => { + categoryBag => 1, + description => 1, + identifierBag => 1, + name => 1, + overviewDoc => 1 + }, + tModelBag => { tModelKey => 1 }, + tModelDetail => { tModel => 1 }, + tModelInfo => { name => 1 }, + tModelInfos => { tModelInfo => 1 }, + tModelInstanceDetails => { tModelInstanceInfo => 1 }, + tModelInstanceInfo => + { description => 1, instanceDetails => 1 }, + tModelList => { tModelInfos => 1 }, + validate_values => + { businessEntity => 1, businessService => 1, tModel => 1 } + }, + ATTRIBUTES => { + accessPoint => { URLType => 2 }, + add_publisherAssertions => { generic => 2 }, + address => { sortCode => 2, tModelKey => 2, useType => 2 }, + addressLine => { keyName => 2, keyValue => 2 }, + assertionStatusItem => { completionStatus => 2 }, + assertionStatusReport => { generic => 2, operator => 2 }, + authToken => { generic => 2, operator => 2 }, + bindingDetail => + { generic => 2, operator => 2, truncated => 2 }, + bindingTemplate => { bindingKey => 2, serviceKey => 2 }, + businessDetail => + { generic => 2, operator => 2, truncated => 2 }, + businessDetailExt => + { generic => 2, operator => 2, truncated => 2 }, + businessEntity => + { authorizedName => 2, businessKey => 2, operator => 2 }, + businessInfo => { businessKey => 2 }, + businessList => + { generic => 2, operator => 2, truncated => 2 }, + businessService => { businessKey => 2, serviceKey => 2 }, + contact => { useType => 2 }, + delete_binding => { generic => 2 }, + delete_business => { generic => 2 }, + delete_publisherAssertions => { generic => 2 }, + delete_service => { generic => 2 }, + delete_tModel => { generic => 2 }, + description => { lang => 2 }, + discard_authToken => { generic => 2 }, + discoveryURL => { useType => 2 }, + dispositionReport => + { generic => 2, operator => 2, truncated => 2 }, + email => { useType => 2 }, + errInfo => { errCode => 2 }, + find_binding => + { generic => 2, maxRows => 2, serviceKey => 2 }, + find_business => { generic => 2, maxRows => 2 }, + find_relatedBusinesses => { generic => 2, maxRows => 2 }, + find_service => + { businessKey => 2, generic => 2, maxRows => 2 }, + find_tModel => { generic => 2, maxRows => 2 }, + get_assertionStatusReport => { generic => 2 }, + get_authToken => { cred => 2, generic => 2, userID => 2 }, + get_bindingDetail => { generic => 2 }, + get_businessDetail => { generic => 2 }, + get_businessDetailExt => { generic => 2 }, + get_publisherAssertions => { generic => 2 }, + get_registeredInfo => { generic => 2 }, + get_serviceDetail => { generic => 2 }, + get_tModelDetail => { generic => 2 }, + hostingRedirector => { bindingKey => 2 }, + keyedReference => + { keyName => 2, keyValue => 2, tModelKey => 2 }, + name => { lang => 2 }, + phone => { useType => 2 }, + publisherAssertions => + { authorizedName => 2, generic => 2, operator => 2 }, + registeredInfo => + { generic => 2, operator => 2, truncated => 2 }, + relatedBusinessesList => + { generic => 2, operator => 2, truncated => 2 }, + result => { errno => 2, keyType => 2 }, + save_binding => { generic => 2 }, + save_business => { generic => 2 }, + save_service => { generic => 2 }, + save_tModel => { generic => 2 }, + serviceDetail => + { generic => 2, operator => 2, truncated => 2 }, + serviceInfo => { businessKey => 2, serviceKey => 2 }, + serviceList => + { generic => 2, operator => 2, truncated => 2 }, + set_publisherAssertions => { generic => 2 }, + sharedRelationships => { direction => 2 }, + tModel => + { authorizedName => 2, operator => 2, tModelKey => 2 }, + tModelDetail => + { generic => 2, operator => 2, truncated => 2 }, + tModelInfo => { tModelKey => 2 }, + tModelInstanceInfo => { tModelKey => 2 }, + tModelList => { generic => 2, operator => 2, truncated => 2 }, + validate_values => { generic => 2 } + }, + WITHNAMES => [ + qw/accessPoint address addressLine assertionStatusItem assertionStatusReport authInfo authToken bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessDetailExt businessEntity businessEntityExt businessInfo businessInfos businessKey businessList businessService businessServices categoryBag completionStatus contact contacts description discoveryURL discoveryURLs dispositionReport email errInfo findQualifier findQualifiers fromKey hostingRedirector identifierBag instanceDetails instanceParms keyedReference keysOwned name overviewDoc overviewURL personName phone publisherAssertion publisherAssertions registeredInfo relatedBusinessInfo relatedBusinessInfos relatedBusinessesList result serviceDetail serviceInfo serviceInfos serviceKey serviceList sharedRelationships tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList toKey uploadRegister/ + ], + NAMESPACE => 'urn:uddi-org:api_v2', + GENERIC => '2.0', + }, + 3 => { + ELEMENTS => { + add_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + address => { addressLine => 1 }, + assertionStatusItem => { + fromKey => 1, + keyedReference => 1, + keysOwned => 1, + toKey => 1 + }, + assertionStatusReport => { assertionStatusItem => 1 }, + authToken => { authInfo => 1 }, + bindingDetail => + { bindingTemplate => 1, listDescription => 1 }, + bindingTemplate => { + accessPoint => 1, + categoryBag => 1, + description => 1, + Signature => 1, + hostingRedirector => 1, + tModelInstanceDetails => 1 + }, + bindingTemplates => { bindingTemplate => 1 }, + businessDetail => { businessEntity => 1 }, + businessEntity => { + businessServices => 1, + categoryBag => 1, + contacts => 1, + description => 1, + discoveryURLs => 1, + Signature => 1, + identifierBag => 1, + name => 1 + }, + businessInfo => + { description => 1, name => 1, serviceInfos => 1 }, + businessInfos => { businessInfo => 1 }, + businessList => { businessInfos => 1, listDescription => 1 }, + businessService => { + bindingTemplates => 1, + categoryBag => 1, + description => 1, + Signature => 1, + name => 1 + }, + businessServices => { businessService => 1 }, + categoryBag => { + keyedReference => 1, + keyedReferenceGroup => 1, + keyedReferenceGroup => 1 + }, + contact => { + address => 1, + description => 1, + email => 1, + personName => 1, + phone => 1 + }, + contacts => { contact => 1 }, + delete_binding => { authInfo => 1, bindingKey => 1 }, + delete_business => { authInfo => 1, businessKey => 1 }, + delete_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + delete_service => { authInfo => 1, serviceKey => 1 }, + delete_tModel => { authInfo => 1, tModelKey => 1 }, + discard_authToken => { authInfo => 1 }, + discoveryURLs => { discoveryURL => 1 }, + dispositionReport => { result => 1 }, + findQualifiers => { findQualifier => 1 }, + find_binding => { + authInfo => 1, + categoryBag => 1, + findQualifiers => 1, + find_tModel => 1, + tModelBag => 1 + }, + find_business => { + authInfo => 1, + categoryBag => 1, + discoveryURLs => 1, + findQualifiers => 1, + find_relatedBusinesses => 1, + find_tModel => 1, + identifierBag => 1, + name => 1, + tModelBag => 1 + }, + find_relatedBusinesses => { + authInfo => 1, + businessKey => 1, + findQualifiers => 1, + fromKey => 1, + keyedReference => 1, + toKey => 1 + }, + find_service => { + authInfo => 1, + categoryBag => 1, + findQualifiers => 1, + find_tModel => 1, + name => 1, + tModelBag => 1 + }, + find_tModel => { + authInfo => 1, + categoryBag => 1, + findQualifiers => 1, + identifierBag => 1, + name => 1 + }, + get_assertionStatusReport => + { authInfo => 1, completionStatus => 1 }, + get_bindingDetail => { authInfo => 1, bindingKey => 1 }, + get_businessDetail => { authInfo => 1, businessKey => 1 }, + get_operationalInfo => { authInfo => 1, entityKey => 1 }, + get_publisherAssertions => { authInfo => 1 }, + get_registeredInfo => { authInfo => 1 }, + get_serviceDetail => { authInfo => 1, serviceKey => 1 }, + get_tModelDetail => { authInfo => 1, tModelKey => 1 }, + identifierBag => { keyedReference => 1 }, + instanceDetails => { + description => 1, + instanceParms => 1, + instanceParms => 1, + overviewDoc => 1 + }, + keyedReferenceGroup => { keyedReference => 1 }, + keysOwned => { fromKey => 1, toKey => 1, toKey => 1 }, + listDescription => + { actualCount => 1, includeCount => 1, listHead => 1 }, + operationalInfo => { + authorizedName => 1, + created => 1, + modified => 1, + modifiedIncludingChildren => 1, + nodeID => 1 + }, + operationalInfos => { operationalInfo => 1 }, + overviewDoc => + { description => 1, overviewURL => 1, overviewURL => 1 }, + publisherAssertion => { + Signature => 1, + fromKey => 1, + keyedReference => 1, + toKey => 1 + }, + publisherAssertions => { publisherAssertion => 1 }, + registeredInfo => { businessInfos => 1, tModelInfos => 1 }, + relatedBusinessInfo => { + businessKey => 1, + description => 1, + name => 1, + sharedRelationships => 1 + }, + relatedBusinessInfos => { relatedBusinessInfo => 1 }, + relatedBusinessesList => { + businessKey => 1, + listDescription => 1, + relatedBusinessInfos => 1 + }, + result => { errInfo => 1 }, + save_binding => { authInfo => 1, bindingTemplate => 1 }, + save_business => { authInfo => 1, businessEntity => 1 }, + save_service => { authInfo => 1, businessService => 1 }, + save_tModel => { authInfo => 1, tModel => 1 }, + serviceDetail => { businessService => 1 }, + serviceInfo => { name => 1 }, + serviceInfos => { serviceInfo => 1 }, + serviceList => { listDescription => 1, serviceInfos => 1 }, + set_publisherAssertions => + { authInfo => 1, publisherAssertion => 1 }, + sharedRelationships => + { keyedReference => 1, publisherAssertion => 1 }, + tModel => { + categoryBag => 1, + description => 1, + Signature => 1, + identifierBag => 1, + name => 1, + overviewDoc => 1 + }, + tModelBag => { tModelKey => 1 }, + tModelDetail => { tModel => 1 }, + tModelInfo => { description => 1, name => 1 }, + tModelInfos => { tModelInfo => 1 }, + tModelInstanceDetails => { tModelInstanceInfo => 1 }, + tModelInstanceInfo => + { description => 1, instanceDetails => 1 }, + tModelList => { listDescription => 1, tModelInfos => 1 } + }, + ATTRIBUTES => { + accessPoint => { useType => 2 }, + address => + { sortCode => 2, tModelKey => 2, useType => 2, lang => 2 }, + addressLine => { keyName => 2, keyValue => 2 }, + assertionStatusItem => { completionStatus => 2 }, + bindingDetail => { truncated => 2 }, + bindingTemplate => { bindingKey => 2, serviceKey => 2 }, + businessDetail => { truncated => 2 }, + businessEntity => { businessKey => 2 }, + businessInfo => { businessKey => 2 }, + businessList => { truncated => 2 }, + businessService => { businessKey => 2, serviceKey => 2 }, + contact => { useType => 2 }, + description => { lang => 2 }, + discoveryURL => { useType => 2 }, + dispositionReport => { truncated => 2 }, + email => { useType => 2 }, + errInfo => { errCode => 2 }, + find_binding => + { listHead => 2, maxRows => 2, serviceKey => 2 }, + find_business => { listHead => 2, maxRows => 2 }, + find_relatedBusinesses => { listHead => 2, maxRows => 2 }, + find_service => + { businessKey => 2, listHead => 2, maxRows => 2 }, + find_tModel => { listHead => 2, maxRows => 2 }, + get_authToken => { cred => 2, userID => 2 }, + get_registeredInfo => { infoSelection => 2 }, + hostingRedirector => { bindingKey => 2 }, + keyedReference => + { keyName => 2, keyValue => 2, tModelKey => 2 }, + keyedReferenceGroup => { tModelKey => 2 }, + name => { lang => 2 }, + operationalInfo => { entityKey => 2 }, + operationalInfos => { truncated => 2 }, + overviewURL => { useType => 2 }, + personName => { lang => 2 }, + phone => { useType => 2 }, + registeredInfo => { truncated => 2 }, + relatedBusinessesList => { truncated => 2 }, + result => { errno => 2, keyType => 2 }, + serviceDetail => { truncated => 2 }, + serviceInfo => { businessKey => 2, serviceKey => 2 }, + serviceList => { truncated => 2 }, + sharedRelationships => { direction => 2 }, + tModel => { deleted => 2, tModelKey => 2 }, + tModelDetail => { truncated => 2 }, + tModelInfo => { tModelKey => 2 }, + tModelInstanceInfo => { tModelKey => 2 }, + tModelList => { truncated => 2 } + }, + WITHNAMES => [ + qw/accessPoint actualCount address addressLine assertionStatusItem assertionStatusReport authToken authorizedName bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessEntity businessInfo businessInfos businessKey businessList businessService businessServices categoryBag completionStatus contact contacts created description discoveryURL discoveryURLs dispositionReport email entityKey errInfo findQualifier findQualifiers fromKey hostingRedirector identifierBag includeCount infoSelection instanceDetails instanceParms keyedReference keyedReferenceGroup keysOwned listDescription listHead modified modifiedIncludingChildren name nodeID operationalInfo operationalInfos overviewDoc overviewURL personName phone publisherAssertion publisherAssertions registeredInfo relatedBusinessInfo relatedBusinessInfos relatedBusinessesList result serviceDetail serviceInfo serviceInfos serviceKey serviceList sharedRelationships tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList toKey/ + ], + NAMESPACE => 'urn:uddi-org:api_v3', + GENERIC => undef, + }, + ); +} + +# ====================================================================== + +package UDDI::SOM; +our $VERSION = 0.712; +use vars qw(@ISA); +@ISA = qw(SOAP::SOM); + +sub result +{ # result should point to immediate child of Body + my $self = shift; + my $result = '/Envelope/Body/[1]'; + ref $self or return $result; + defined $self->fault ? undef: $self->valueof($result); +} + +# ====================================================================== + +package UDDI::Data; +our $VERSION = 0.712; + + +use Carp (); + +use vars qw(@ISA $AUTOLOAD); +@ISA = qw(SOAP::Data); + +use overload fallback => 1, '""' => sub { shift->SUPER::value }; + +sub _init +{ + use vars qw(@EXPORT_OK %EXPORT_TAGS); + @EXPORT_OK = ( with => @$UDDI::Constants::WITHNAMES ); + %EXPORT_TAGS = ( all => [@EXPORT_OK] ); + + use vars qw($elements $attributes); + $elements = $UDDI::Constants::ELEMENTS; + $attributes = $UDDI::Constants::ATTRIBUTES; +} + +sub new +{ + my $self = shift; + my $class = ref($self) || $self; + + unless ( ref $self ) + { + $self = $class->SUPER::new( @_, type => 'uddi' ); + } + return $self; +} + +sub with +{ + my $self = shift; + $self = + ( __PACKAGE__->can($self) + || Carp::croak "Don't know what to do with '$self'" )->() + unless ref $self && UNIVERSAL::isa( $self => __PACKAGE__ ); + + my $name = $self->SUPER::name; + my @values; + while (@_) + { + my $data = shift; + my ( $method, $attr, @value ) = + UNIVERSAL::isa( $data => __PACKAGE__ ) + ? ( $data->SUPER::name, $data->SUPER::attr, $data->SUPER::value ) + : ( $data, {}, shift ); + exists $attributes->{$name}{$method} + + # attribute + ? $self->$method(@value) + + # sub element + : push( + @values, + ( + $self->can($method) + || Carp::croak "Don't know what to do with '$method'" + )->(@value)->attr($attr) + ); + } + $self->set_value( [@values] ); +} + +sub _compileit +{ + no strict 'refs'; + my $method = shift; + *$method = sub { + + # GENERATE element if no parameters: businessInfo() + return __PACKAGE__->SUPER::name($method) + if !@_ && exists $elements->{$method}; + + die "Expected element (UDDI::Data) as parameter for $method()\n" + if !ref $_[0] && exists $elements->{$method}; + + # MAKE ELEMENT: name( [{attr => value},] 'old') + if ( !UNIVERSAL::isa( $_[0] => __PACKAGE__ ) ) + { + + # get optional list of attributes as a first parameter + my $attr = ref $_[0] eq 'HASH' ? shift @_ : {}; + return __PACKAGE__->SUPER::name( $method => @_ )->attr($attr); + } + + my $name = $_[0]->SUPER::name; + + if ( defined $name ) + { + + # GET/SET ATTRIBUTE: businessInfo->businessKey + return @_ > 1 + ? scalar( $_[0]->attr->{$method} = $_[1], $_[0] ) # SET + : __PACKAGE__->SUPER::name( + $method => $_[0]->attr->{$method} ) # GET + if exists $attributes->{$name} + && exists $attributes->{$name}{$method}; + + # GET ELEMENT: businessInfos->businessInfo + my @elems = grep { + ref $_ + && UNIVERSAL::isa( $_ => __PACKAGE__ ) + && $_->SUPER::name eq $method + } map { ref $_ eq 'ARRAY' ? @$_ : $_ } $_[0]->value; + return wantarray ? @elems : $elems[0] + if exists $elements->{$name} + && exists $elements->{$name}{$method}; + + # MAKE ELEMENT: businessInfos(businessInfo('something')) + return __PACKAGE__->SUPER::name( $method => @_ ) + if exists $elements->{$method} + && exists $elements->{$method}{$name}; + } + + # handle UDDI::Data->method() calls for those SOAP::Data methods + # that conflict with UDDI methods, like name() + if ( UNIVERSAL::can( $ISA[0] => $method ) ) + { + my $pkg = shift @_; + return eval "\$pkg->SUPER::$method(\@_)"; + } + + Carp::croak + "Don't know what to do with '$method' and '$name' elements"; + } +} + +sub BEGIN { _compileit('name') } + +sub AUTOLOAD +{ + my $method = substr( $AUTOLOAD, rindex( $AUTOLOAD, '::' ) + 2 ); + return if $method eq 'DESTROY'; + + _compileit($method); + goto &$AUTOLOAD; +} + +# ====================================================================== + +package UDDI::Serializer; +our $VERSION = 0.712; + +use vars qw(@ISA); +@ISA = qw(SOAP::Serializer); + +sub new +{ + my $self = shift; + my $class = ref($self) || $self; + + unless ( ref $self ) + { + $self = $class->SUPER::new( + attr => {}, + namespaces => { + $SOAP::Constants::PREFIX_ENV + ? ( $SOAP::Constants::NS_ENV => $SOAP::Constants::PREFIX_ENV ) + : (), + }, + autotype => 0, + @_, + ); + } + return $self; +} + +use overload; # protect from stringification in UDDI::Data +sub gen_id { overload::StrVal( $_[1] ) =~ /\((0x\w+)\)/o; $1 } + +sub as_uddi +{ + my $self = shift; + my ( $value, $name, $type, $attr ) = @_; + return $self->encode_array( $value, $name, undef, $attr ) + if ref $value eq 'ARRAY'; + return $self->encode_hash( $value, $name, undef, $attr ) + if ref $value eq 'HASH'; + [ + $name, + { %{ $attr || {} } }, + ref $value + ? ( [ $self->encode_object($value) ], $self->gen_id($value) ) + : $value + ]; +} + +sub encode_array +{ + my $self = shift; + my $encoded = $self->SUPER::encode_array(@_); + delete $encoded->[1] + ->{ SOAP::Utils::qualify( $self->encprefix => 'arrayType' ) }; + return $encoded; +} + +# ====================================================================== + +package UDDI::Deserializer; +our $VERSION = 0.712; + +use vars qw(@ISA); +@ISA = qw(SOAP::Deserializer); + +sub decode_value +{ + my $self = shift; + my $ref = shift; + my ( $name, $attrs, $children, $value ) = @$ref; + + # base class knows what to do with elements in SOAP namespace + return $self->SUPER::decode_value($ref) + if exists $attrs->{href} + || ( SOAP::Utils::splitlongname($name) )[0] eq $SOAP::Constants::NS_ENV; + + UDDI::Data->SOAP::Data::name($name)->attr($attrs) + ->set_value( ref $children + && @$children + ? map( scalar( ( $self->decode_object($_) )[1] ), @$children ) + : $value ); +} + +sub deserialize +{ + bless shift->SUPER::deserialize(@_) => 'UDDI::SOM'; +} + +# ====================================================================== + +package UDDI::Lite; +our $VERSION = 0.712; + +use vars qw(@ISA $AUTOLOAD %EXPORT_TAGS); +use Exporter; +use Carp (); +@ISA = qw(SOAP::Lite Exporter); + +BEGIN +{ # handle exports + %EXPORT_TAGS = ( + 'delete' => [ + qw/delete_binding delete_business delete_service + delete_tModel delete_publisherAssertions/ + ], + + # ^-------------------- v2/3 + 'auth' => [qw/get_authToken discard_authToken get_registeredInfo/], + 'save' => [ + qw/save_binding save_business save_service save_tModel + add_publisherAssertions set_publisherAssertions/ + ], + + # ^----------------- v2/3 ^----------------- v2/3 + 'validate' => [qw/validate_categorization validate_values/], + + # ^------------------- v1 ^------------v2 + 'find' => [ + qw/find_binding find_business find_service find_tModel + find_relatedBusinesses/ + ], + + # ^---------------- v2/3 + 'get' => [ + qw/get_bindingDetail get_businessDetail get_businessDetailExt + get_serviceDetail get_tModelDetail + get_assertionStatusReport get_publisherAssertions/ + ], + + # ^------------------- v2/3 ^----------------- v2/3 + ); + $EXPORT_TAGS{inquiry} = [ map { @{ $EXPORT_TAGS{$_} } } qw/find get/ ]; + $EXPORT_TAGS{publish} = + [ map { @{ $EXPORT_TAGS{$_} } } qw/delete auth save validate/ ]; + $EXPORT_TAGS{all} = [ map { @{ $EXPORT_TAGS{$_} } } qw/inquiry publish/ ]; + Exporter::export_ok_tags('all'); +} + +my $uddiversion; + +sub uddiversion +{ + my $self = shift; + my $version = shift or return $uddiversion; + + die qq!Wrong UDDI version. Supported versions: @{[ + join ", ", keys %UDDI::Constants::UDDI_VERSIONS]}\n! + unless defined $UDDI::Constants::UDDI_VERSIONS{$version}; + + foreach ( keys %{ $UDDI::Constants::UDDI_VERSIONS{$version} } ) + { + eval +"\$UDDI::Constants::$_ = \$UDDI::Constants::UDDI_VERSIONS{$version}->{$_}" + or die; + } + + UDDI::Data->_init; + + $uddiversion = $version; + $self; +} + +BEGIN { UDDI::Lite->uddiversion(1) } + +sub new +{ + my $self = shift; + my $class = ref($self) || $self; + + unless ( ref $self ) + { + $self = $class->SUPER::new( + on_action => sub { '""' }, + serializer => UDDI::Serializer->new, # register UDDI Serializer + deserializer => UDDI::Deserializer->new, # and Deserializer + @_, + ); + } + return $self; +} + +sub AUTOLOAD +{ + my $method = substr( $AUTOLOAD, rindex( $AUTOLOAD, '::' ) + 2 ); + return if $method eq 'DESTROY'; + + no strict 'refs'; + *$AUTOLOAD = sub { + return shift->call( $method => @_ ) + if UNIVERSAL::isa( $_[0] => __PACKAGE__ ); + my $som = + ( __PACKAGE__->self + || Carp::croak "Method call on unspecified object. Died" ) + ->call( $method => @_ ); + UNIVERSAL::isa( $som => 'SOAP::SOM' ) ? $som->result : $som; + }; + goto &$AUTOLOAD; +} + +sub call +{ + SOAP::Trace::trace('()'); + my $self = shift; + my $method = shift; + my @parameters; + my $attr = ref $_[0] eq 'HASH' ? shift() : {}; + while (@_) + { + push( @parameters, + UNIVERSAL::isa( $_[0] => 'UDDI::Data' ) + ? shift + : SOAP::Data->name( shift, shift ) ); + } + my $message = + SOAP::Data->name( $method => \SOAP::Data->value(@parameters) )->attr( + { + xmlns => $UDDI::Constants::NAMESPACE, + ( + defined $UDDI::Constants::GENERIC + ? ( generic => $UDDI::Constants::GENERIC ) + : () + ), + %$attr + } + ); + + my $serializer = $self->serializer; + $serializer->on_nonserialized( $self->on_nonserialized ); + + my $respond = $self->transport->send_receive( + endpoint => $self->endpoint, + action => $self->on_action->( $self->uri ), + envelope => $serializer->envelope( freeform => $message ), + encoding => $serializer->encoding, + ); + + return $respond if $self->outputxml; + + unless ( $self->transport->is_success ) + { + my $result = eval { $self->deserializer->deserialize($respond) } + if $respond; + return $self->on_fault->( $self, $@ ? $respond : $result ) || $result; + } + + return unless $respond; # nothing to do for one-ways + return $self->deserializer->deserialize($respond); +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +UDDI::Lite - Library for UDDI clients in Perl + +=head1 SYNOPSIS + + use UDDI::Lite; + print UDDI::Lite + -> proxy('http://uddi.microsoft.com/inquire') + -> find_business(name => 'old') + -> result + -> businessInfos->businessInfo->serviceInfos->serviceInfo->name; + +The same code with autodispatch: + + use UDDI::Lite +autodispatch => + proxy => 'http://uddi.microsoft.com/inquire' + ; + + print find_business(name => 'old') + -> businessInfos->businessInfo->serviceInfos->serviceInfo->name; + +Or with importing: + + use UDDI::Lite + 'UDDI::Lite' => [':inquiry'], + proxy => 'http://uddi.microsoft.com/inquire' + ; + + print find_business(name => 'old') + -> businessInfos->businessInfo->serviceInfos->serviceInfo->name; + +Publishing API: + + use UDDI::Lite + import => ['UDDI::Data'], + import => ['UDDI::Lite'], + proxy => "https://some.server.com/endpoint_fot_publishing_API"; + + my $auth = get_authToken({userID => 'USERID', cred => 'CRED'})->authInfo; + my $busent = with businessEntity => + name("Contoso Manufacturing"), + description("We make components for business"), + businessKey(''), + businessServices with businessService => + name("Buy components"), + description("Bindings for buying our components"), + serviceKey(''), + bindingTemplates with bindingTemplate => + description("BASDA invoices over HTTP post"), + accessPoint('http://www.contoso.com/buy.asp'), + bindingKey(''), + tModelInstanceDetails with tModelInstanceInfo => + description('some tModel'), + tModelKey('UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4') + ; + print save_business($auth, $busent)->businessEntity->businessKey; + +=head1 DESCRIPTION + +UDDI::Lite for Perl is a collection of Perl modules which provides a +simple and lightweight interface to the Universal Description, Discovery +and Integration (UDDI) server. + +To learn more about UDDI, visit http://www.uddi.org/. + +The main features of the library are: + +=over 3 + +=item * + +Supports both inquiry and publishing API + +=item * + +Builded on top of SOAP::Lite module, hence inherited syntax and features + +=item * + +Supports easy-to-use interface with convenient access to (sub)elements +and attributes + +=item * + +Supports HTTPS protocol + +=item * + +Supports SMTP protocol + +=item * + +Supports Basic/Digest server authentication + +=back + +=head1 OVERVIEW OF CLASSES AND PACKAGES + +This table should give you a quick overview of the classes provided by the +library. + + UDDI::Lite.pm + -- UDDI::Lite -- Main class provides all logic + -- UDDI::Data -- Provides extensions for serialization architecture + -- UDDI::Serializer -- Serializes data structures to UDDI/SOAP package + -- UDDI::Deserializer -- Deserializes result into objects + -- UDDI::SOM -- Provides access to deserialized object tree + +=head2 UDDI::Lite + +All methods that UDDI::Lite gives you access to can be used for both +setting and retrieving values. If you provide no parameters, you'll +get current value, and if you'll provide parameter(s), new value +will be assigned and method will return object (if not stated something +else). This is suitable for stacking these calls like: + + $uddi = UDDI::Lite + -> on_debug(sub{print@_}) + -> proxy('http://uddi.microsoft.com/inquire') + ; + +Order is insignificant and you may call new() method first. If you +don't do it, UDDI::Lite will do it for you. However, new() method +gives you additional syntax: + + $uddi = new UDDI::Lite + on_debug => sub {print@_}, + proxy => 'http://uddi.microsoft.com/inquire' + ; + +new() accepts hash with method names and values, and will call +appropriate method with passed value. + +Since new() is optional it won't be mentioned anymore. + +Other available methods inherited from SOAP::Lite and most usable are: + +=over 4 + +=item proxy() + +Shortcut for Cproxy()>. This lets you specify an endpoint and +also loads the required module at the same time. It is required for dispatching SOAP +calls. The name of the module will be defined depending on the protocol +specific for the endpoint. SOAP::Lite will do the rest work. + +=item on_fault() + +Lets you specify handler for on_fault event. Default behavior is die +on transport error and does nothing on others. You can change this +behavior globally or locally, for particular object. + +=item on_debug() + +Lets you specify handler for on_debug event. Default behavior is do +nothing. Use +trace/+debug option for UDDI::Lite instead. + +=back + +To change to UDDI Version 2, use the following pragma: + + use UDDI::Lite uddiversion => 2; + +=head2 UDDI::Data + +You can use this class if you want to specify value and name for UDDI +elements. +For example, Cname('businessInfo')-Evalue(123)> will +be serialized to CbusinessInfoE123E/businessInfoE>, as +well as Cname(businessInfo =E 123)>. + +If you want to provide names for your parameters you can either specify + + find_business(name => 'old') + +or do it with UDDI::Data: + + find_business(UDDI::Data->name(name => 'old')) + +Later has some advantages: it'll work on any level, so you can do: + + find_business(UDDI::Data->name(name => UDDI::Data->name(subname => 'old'))) + +and also you can create arrays with this syntax: + + find_business(UDDI::Data->name(name => + [UDDI::Data->name(subname1 => 'name1'), + UDDI::Data->name(subname2 => 'name2')])) + +will be serialized into: + + + + name1 + name2 + + + +For standard elements more convenient syntax is available: + + find_business( + findQualifiers(findQualifier('sortByNameAsc', + 'caseSensitiveMatch')), + name('M') + ) + +and + + find_business( + findQualifiers([findQualifier('sortByNameAsc'), + findQualifier('caseSensitiveMatch')]), + name('M') + ) + +both will generate: + + + + + + sortByNameAsc + caseSensitiveMatch + + M + + + + +You can use ANY valid combinations (according to "UDDI Programmer's +API Specification"). If you try to generate something unusual, like +C, you'll get: + + Don't know what to do with 'name' and 'name' elements .... + +If you REALLY need to do it, use C syntax described above. + +As special case you can pass hash as the first parameter of method +call and values of this hash will be added as attributes to top element: + + find_business({maxRows => 10}, UDDI::Data->name(name => old)) + +gives you + + + .... + + +You can also pass back parameters exactly as you get it from method call +(like you probably want to do with authInfo). + +You can get access to attributes and elements through the same interface: + + my $list = find_business(name => old); + my $bis = $list->businessInfos; + for ($bis->businessInfo) { + my $s = $_->serviceInfos->serviceInfo; + print $s->name, # element + $s->businessKey, # attribute + "\n"; + } + +To match advantages provided by C operator available in other +languages (like VB) we provide similar functionality that adds you +flexibility: + + with findQualifiers => + findQualifier => 'sortByNameAsc', + findQualifier => 'caseSensitiveMatch' + +is the same as: + + with(findQualifiers => + findQualifier('sortByNameAsc'), + findQualifier('caseSensitiveMatch'), + ) + +and: + + findQualifiers->with( + findQualifier('sortByNameAsc'), + findQualifier('caseSensitiveMatch'), + ) + +will all generate the same code as mentioned above: + + findQualifiers(findQualifier('sortByNameAsc', + 'caseSensitiveMatch')), + +Advantage of C syntax is the you can specify both attributes and +elements through the same interface. First argument is element where all +other elements and attributes will be attached. Provided examples and +tests cover different syntaxes. + +=head2 AUTODISPATCHING + +UDDI::Lite provides autodispatching feature that lets you create +code that looks similar for local and remote access. + +For example: + + use UDDI::Lite +autodispatch => + proxy => 'http://uddi.microsoft.com/inquire'; + +tells autodispatch all UDDI calls to +'http://uddi.microsoft.com/inquire'. All subsequent calls can look +like: + + find_business(name => 'old'); + find_business(UDDI::Data->name(name => 'old')); + find_business(name('old')); + +=head1 BUGS AND LIMITATIONS + +=over 4 + +=item * + +Interface is still subject to change. + +=item * + +Though HTTPS/SSL is supported you should specify it yourself (with +C or C) for publishing API calls. + +=back + +=head1 AVAILABILITY + +For now UDDI::Lite is distributed as part of SOAP::Lite package. +You can download it from ( http://soaplite.com/ ) +or from CPAN ( http://search.cpan.org/search?dist=SOAP-Lite ). + +=head1 SEE ALSO + +L ( http://search.cpan.org/search?dist=SOAP-Lite ) +L ( http://search.cpan.org/search?dist=UDDI ) + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XML/Parser/Lite.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XML/Parser/Lite.pm new file mode 100644 index 0000000..cee2348 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XML/Parser/Lite.pm @@ -0,0 +1,366 @@ +# ====================================================================== +# +# Copyright (C) 2000-2007 Paul Kulchenko (paulclinger@yahoo.com) +# Copyright (C) 2008 Martin Kutter (martin.kutter@fen-net.de) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Lite.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XML::Parser::Lite; + +use strict; +use warnings; + +our $VERSION = 0.712; + +sub new { + my $class = shift; + + return $class if ref $class; + my $self = bless {} => $class; + + my %parameters = @_; + $self->setHandlers(); # clear first + $self->setHandlers(%{$parameters{Handlers} || {}}); + + return $self; +} + +sub setHandlers { + my $self = shift; + + # allow symbolic refs, avoid "subroutine redefined" warnings + no strict 'refs'; + no warnings qw(redefine); + # clear all handlers if called without parameters + if (not @_) { + for (qw(Start End Char Final Init Comment Doctype XMLDecl)) { + *$_ = sub {} + } + } + + # we could use each here, too... + while (@_) { + my($name, $func) = splice(@_, 0, 2); + *$name = defined $func + ? $func + : sub {} + } + return $self; +} + +sub _regexp { + my $patch = shift || ''; + my $package = __PACKAGE__; + + # This parser is based on "shallow parser" http://www.cs.sfu.ca/~cameron/REX.html + + # Robert D. Cameron "REX: XML Shallow Parsing with Regular Expressions", + # Technical Report TR 1998-17, School of Computing Science, Simon Fraser University, November, 1998. + # Copyright (c) 1998, Robert D. Cameron. + # The following code may be freely used and distributed provided that + # this copyright and citation notice remains intact and that modifications + # or additions are clearly identified. + + # Modifications may be tracked on SOAP::Lite's SVN at + # https://soaplite.svn.sourceforge.net/svnroot/soaplite/ + # + use re 'eval'; + my $TextSE = "[^<]+"; + my $UntilHyphen = "[^-]*-"; + my $Until2Hyphens = "([^-]*)-(?:[^-]$[^-]*-)*-"; + my $CommentCE = "$Until2Hyphens(?{${package}::comment(\$2)})>?"; +# my $Until2Hyphens = "$UntilHyphen(?:[^-]$UntilHyphen)*-"; +# my $CommentCE = "$Until2Hyphens>?"; + my $UntilRSBs = "[^\\]]*](?:[^\\]]+])*]+"; + my $CDATA_CE = "$UntilRSBs(?:[^\\]>]$UntilRSBs)*>"; + my $S = "[ \\n\\t\\r]+"; + my $NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]"; + my $NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]"; + my $Name = "(?:$NameStrt)(?:$NameChar)*"; + my $QuoteSE = "\"[^\"]*\"|'[^']*'"; + my $DT_IdentSE = "$Name(?:$S(?:$Name|$QuoteSE))*"; +# my $DT_IdentSE = "$S$Name(?:$S(?:$Name|$QuoteSE))*"; + my $MarkupDeclCE = "(?:[^\\]\"'><]+|$QuoteSE)*>"; + my $S1 = "[\\n\\r\\t ]"; + my $UntilQMs = "[^?]*\\?"; + my $PI_Tail = "\\?>|$S1$UntilQMs(?:[^>?]$UntilQMs)*"; + my $DT_ItemSE = "<(?:!(?:--$Until2Hyphens>|[^-]$MarkupDeclCE)|\\?$Name(?:$PI_Tail>))|%$Name;|$S"; + my $DocTypeCE = "$S($DT_IdentSE(?:$S)?(?:\\[(?:$DT_ItemSE)*](?:$S)?)?)>(?{${package}::_doctype(\$3)})"; +# my $PI_Tail = "\\?>|$S1$UntilQMs(?:[^>?]$UntilQMs)*>"; +# my $DT_ItemSE = "<(?:!(?:--$Until2Hyphens>|[^-]$MarkupDeclCE)|\\?$Name(?:$PI_Tail))|%$Name;|$S"; +# my $DocTypeCE = "$DT_IdentSE(?:$S)?(?:\\[(?:$DT_ItemSE)*](?:$S)?)?>?"; + my $DeclCE = "--(?:$CommentCE)?|\\[CDATA\\[(?:$CDATA_CE)?|DOCTYPE(?:$DocTypeCE)?"; +# my $PI_CE = "$Name(?:$PI_Tail)?"; + my $PI_CE = "($Name(?:$PI_Tail))>(?{${package}::_xmldecl(\$5)})"; + # these expressions were modified for backtracking and events +# my $EndTagCE = "($Name)(?{${package}::_end(\$2)})(?:$S)?>"; + my $EndTagCE = "($Name)(?{${package}::_end(\$6)})(?:$S)?>"; + my $AttValSE = "\"([^<\"]*)\"|'([^<']*)'"; +# my $ElemTagCE = "($Name)(?:$S($Name)(?:$S)?=(?:$S)?(?:$AttValSE)(?{[\@{\$^R||[]},\$4=>defined\$5?\$5:\$6]}))*(?:$S)?(/)?>(?{${package}::_start( \$3,\@{\$^R||[]})})(?{\${7} and ${package}::_end(\$3)})"; + my $ElemTagCE = "($Name)" + . "(?:$S($Name)(?:$S)?=(?:$S)?(?:$AttValSE)" + . "(?{[\@{\$^R||[]},\$8=>defined\$9?\$9:\$10]}))*(?:$S)?(/)?>" + . "(?{${package}::_start(\$7,\@{\$^R||[]})})(?{\$11 and ${package}::_end(\$7)})"; + + my $MarkupSPE = "<(?:!(?:$DeclCE)?|\\?(?:$PI_CE)?|/(?:$EndTagCE)?|(?:$ElemTagCE)?)"; + + # Next expression is under "black magic". + # Ideally it should be '($TextSE)(?{${package}::char(\$1)})|$MarkupSPE', + # but it doesn't work under Perl 5.005 and only magic with + # (?:....)?? solved the problem. + # I would appreciate if someone let me know what is the right thing to do + # and what's the reason for all this magic. + # Seems like a problem related to (?:....)? rather than to ?{} feature. + # Tests are in t/31-xmlparserlite.t if you decide to play with it. + #"(?{[]})(?:($TextSE)(?{${package}::_char(\$1)}))$patch|$MarkupSPE"; + "(?:($TextSE)(?{${package}::_char(\$1)}))$patch|$MarkupSPE"; +} + +setHandlers(); + +# Try 5.6 and 5.10 regex first +my $REGEXP = _regexp('??'); + +sub _parse_re { + use re "eval"; + undef $^R; + 1 while $_[0] =~ m{$REGEXP}go +}; + +# fixup regex if it does not work... +{ + if (not eval { _parse_re('bar'); 1; } ) { + $REGEXP = _regexp(); + local $^W; + *_parse_re = sub { + use re "eval"; + undef $^R; + 1 while $_[0] =~ m{$REGEXP}go + }; + } +} + +sub parse { + _init(); + _parse_re($_[1]); + _final(); +} + +my(@stack, $level); + +sub _init { + @stack = (); + $level = 0; + Init(__PACKAGE__, @_); +} + +sub _final { + die "not properly closed tag '$stack[-1]'\n" if @stack; + die "no element found\n" unless $level; + Final(__PACKAGE__, @_) +} + +sub _start { + die "multiple roots, wrong element '$_[0]'\n" if $level++ && !@stack; + push(@stack, $_[0]); + Start(__PACKAGE__, @_); +} + +sub _char { + Char(__PACKAGE__, $_[0]), return if @stack; + + # check for junk before or after element + # can't use split or regexp due to limitations in ?{} implementation, + # will iterate with loop, but we'll do it no more than two times, so + # it shouldn't affect performance + for (my $i=0; $i < length $_[0]; $i++) { + die "junk '$_[0]' @{[$level ? 'after' : 'before']} XML element\n" + if index("\n\r\t ", substr($_[0],$i,1)) < 0; # or should '< $[' be there + } +} + +sub _end { + no warnings qw(uninitialized); + pop(@stack) eq $_[0] or die "mismatched tag '$_[0]'\n"; + End(__PACKAGE__, $_[0]); +} + +sub comment { + Comment(__PACKAGE__, $_[0]); +} + +sub end { + pop(@stack) eq $_[0] or die "mismatched tag '$_[0]'\n"; + End(__PACKAGE__, $_[0]); + } + +sub _doctype { + Doctype(__PACKAGE__, $_[0]); +} + +sub _xmldecl { + XMLDecl(__PACKAGE__, $_[0]); +} + + + +# ====================================================================== +1; + +__END__ + +=head1 NAME + +XML::Parser::Lite - Lightweight regexp-based XML parser + +=head1 SYNOPSIS + + use XML::Parser::Lite; + + $p1 = new XML::Parser::Lite; + $p1->setHandlers( + Start => sub { shift; print "start: @_\n" }, + Char => sub { shift; print "char: @_\n" }, + End => sub { shift; print "end: @_\n" }, + ); + $p1->parse('Hello World!'); + + $p2 = new XML::Parser::Lite + Handlers => { + Start => sub { shift; print "start: @_\n" }, + Char => sub { shift; print "char: @_\n" }, + End => sub { shift; print "end: @_\n" }, + } + ; + $p2->parse('Hello cruel World!'); + +=head1 DESCRIPTION + +This Perl implements an XML parser with a interface similar to +XML::Parser. Though not all callbacks are supported, you should be able to +use it in the same way you use XML::Parser. Due to using experimantal regexp +features it'll work only on Perl 5.6 and above and may behave differently on +different platforms. + +Note that you cannot use regular expressions or split in callbacks. This is +due to a limitation of perl's regular expression implementation (which is +not re-entrant). + +=head1 SUBROUTINES/METHODS + +=head2 new + +Constructor. + +As (almost) all SOAP::Lite constructors, new() returns the object called on +when called as object method. This means that the following effectifely is +a no-op if $obj is a object: + + $obj = $obj->new(); + +New accepts a single named parameter, C with a hash ref as value: + + my $parser = XML::Parser::Lite->new( + Handlers => { + Start => sub { shift; print "start: @_\n" }, + Char => sub { shift; print "char: @_\n" }, + End => sub { shift; print "end: @_\n" }, + } + ); + +The handlers given will be passed to setHandlers. + +=head2 setHandlers + +Sets (or resets) the parsing handlers. Accepts a hash with the handler names +and handler code references as parameters. Passing C instead of a +code reference replaces the handler by a no-op. + +The following handlers can be set: + + Init + Start + Char + End + Final + +All other handlers are ignored. + +Calling setHandlers without parameters resets all handlers to no-ops. + +=head2 parse + +Parses the XML given. In contrast to L's parse +method, parse() only parses strings. + +=head1 Handler methods + +=head2 Init + +Called before parsing starts. You should perform any necessary initializations +in Init. + +=head2 Start + +Called at the start of each XML node. See L for details. + +=head2 Char + +Called for each character sequence. May be called multiple times for the +characters contained in an XML node (even for every single character). +Your implementation has to make sure that it captures all characters. + +=head2 End + +Called at the end of each XML node. See L for details + +=head2 Comment + +See L for details + +=head2 XMLDecl + +See L for details + +=head2 Doctype + +See L for details + +=head2 Final + +Called at the end of the parsing process. You should perform any neccessary +cleanup here. + +=head1 SEE ALSO + + XML::Parser + +=head1 COPYRIGHT + +Copyright (C) 2000-2007 Paul Kulchenko. All rights reserved. + +Copyright (C) 2008- Martin Kutter. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +This parser is based on "shallow parser" http://www.cs.sfu.ca/~cameron/REX.html +Copyright (c) 1998, Robert D. Cameron. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +Martin Kutter (martin.kutter@fen-net.de) + +Additional handlers supplied by Adam Leggett. + +=cut + + + + diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Lite.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Lite.pm new file mode 100644 index 0000000..6206331 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Lite.pm @@ -0,0 +1,450 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Lite.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XMLRPC::Lite; + +use SOAP::Lite; +use strict; + +our $VERSION = 0.712; + +# ====================================================================== + +package XMLRPC::Constants; + +BEGIN { + no strict 'refs'; + for (qw( + FAULT_CLIENT FAULT_SERVER + HTTP_ON_SUCCESS_CODE HTTP_ON_FAULT_CODE + DO_NOT_USE_XML_PARSER DO_NOT_USE_CHARSET + DO_NOT_USE_LWP_LENGTH_HACK DO_NOT_CHECK_CONTENT_TYPE + )) { + *$_ = \${'SOAP::Constants::' . $_} + } + # XML-RPC spec requires content-type to be "text/xml" + $XMLRPC::Constants::DO_NOT_USE_CHARSET = 1; +} + +# ====================================================================== + +package XMLRPC::Data; + +@XMLRPC::Data::ISA = qw(SOAP::Data); + +# ====================================================================== + +package XMLRPC::Serializer; + +@XMLRPC::Serializer::ISA = qw(SOAP::Serializer); + +sub new { + my $class = shift; + + return $class if ref $class; + + return $class->SUPER::new( + typelookup => { + base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], + int => [20, sub {$_[0] =~ /^[+-]?\d+$/}, 'as_int'], + double => [30, sub {$_[0] =~ /^(-?(?:\d+(?:\.\d*)?|\.\d+)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)$/}, 'as_double'], + dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'], + string => [40, sub {1}, 'as_string'], + }, + attr => {}, + namespaces => {}, + @_, + ); +} + +sub envelope { + my $self = shift; + $self = $self->new() if not ref $self; # serves a method call if object + my $type = shift; + + my $body; + if ($type eq 'response') { + # shift off method name to make XMLRPT happy + my $method = shift + or die "Unspecified method for XMLRPC call\n"; + $body = XMLRPC::Data->name( methodResponse => \XMLRPC::Data->value( + XMLRPC::Data->type(params => [@_]) + ) + ); + } + elsif ($type eq 'method') { + # shift off method name to make XMLRPT happy + my $method = shift + or die "Unspecified method for XMLRPC call\n"; + $body = XMLRPC::Data->name( methodCall => \XMLRPC::Data->value( + XMLRPC::Data->type( + methodName => UNIVERSAL::isa($method => 'XMLRPC::Data') + ? $method->name + : $method + ), + XMLRPC::Data->type(params => [@_]) + )); + } + elsif ($type eq 'fault') { + $body = XMLRPC::Data->name(methodResponse => + \XMLRPC::Data->type(fault => {faultCode => $_[0], faultString => $_[1]}), + ); + } + else { + die "Wrong type of envelope ($type) for XMLRPC call\n"; + } + + # SOAP::Lite keeps track of objects for XML aliasing and multiref + # encoding. + # Set/reset seen() hashref before/after encode_object avoids a + # memory leak + $self->seen({}); # initialize multiref table + my $envelope = $self->xmlize($self->encode_object($body)); + $self->seen({}); # delete multi-ref table - avoids a memory hole... + return $envelope; +} + + +sub encode_object { + my $self = shift; + my @encoded = $self->SUPER::encode_object(@_); + + return $encoded[0]->[0] =~ /^(?:array|struct|i4|int|boolean|string|double|dateTime\.iso8601|base64)$/o + ? ['value', {}, [@encoded]] + : @encoded; +} + +sub encode_scalar { + my $self = shift; + return ['value', {}] unless defined $_[0]; + return $self->SUPER::encode_scalar(@_); +} + +sub encode_array { + my ($self, $array) = @_; + + return ['array', {}, [ + ['data', {}, [ map {$self->encode_object($_)} @{ $array } ] ] + ]]; +} + +sub encode_hash { + my ($self, $hash) = @_; + + return ['struct', {}, [ + map { + ['member', {}, [['name', {}, $_], $self->encode_object($hash->{$_})]] + } keys %{ $hash } + ]]; +} + +sub as_methodName { + my ($self, $value, $name, $type, $attr) = @_; + return [ 'methodName', $attr, $value ]; +} + +sub as_params { + my ($self, $params, $name, $type, $attr) = @_; + return ['params', $attr, [ + map { + ['param', {}, [ $self->encode_object($_) ] ] + } @$params + ]]; +} + +sub as_fault { + my ($self, $fault) = @_; + return ['fault', {}, [ $self->encode_object($fault) ] ]; +} + +sub BEGIN { + no strict 'refs'; + for my $type (qw(double i4 int)) { + my $method = 'as_' . $type; + *$method = sub { + my($self, $value) = @_; + return [ $type, {}, $value ]; + } + } +} + +sub as_base64 { + my ($self, $value) = @_; + require MIME::Base64; + return ['base64', {}, MIME::Base64::encode_base64($value,'')]; +} + +sub as_string { + my ($self, $value) = @_; + return ['string', {}, SOAP::Utils::encode_data($value)]; +} + +sub as_dateTime { + my ($self, $value) = @_; + return ['dateTime.iso8601', {}, $value]; +} + +sub as_boolean { + my ($self, $value) = @_; + return ['boolean', {}, $value ? 1 : 0]; +} + +sub typecast { + my ($self, $value, $name, $type, $attr) = @_; + + die "Wrong/unsupported datatype '$type' specified\n" if defined $type; + + $self->SUPER::typecast(@_); +} + +# ====================================================================== + +package XMLRPC::SOM; + +@XMLRPC::SOM::ISA = qw(SOAP::SOM); + +sub BEGIN { + no strict 'refs'; + my %path = ( + root => '/', + envelope => '/[1]', + method => '/methodCall/methodName', + fault => '/methodResponse/fault', + ); + + for my $method (keys %path) { + *$method = sub { + my $self = shift; + ref $self or return $path{$method}; + Carp::croak "Method '$method' is readonly and doesn't accept any parameters" if @_; + $self->valueof($path{$method}); + }; + } + + my %fault = ( + faultcode => 'faultCode', + faultstring => 'faultString', + ); + + for my $method (keys %fault) { + *$method = sub { + my $self = shift; + ref $self or Carp::croak "Method '$method' doesn't have shortcut"; + Carp::croak "Method '$method' is readonly and doesn't accept any parameters" if @_; + defined $self->fault ? $self->fault->{$fault{$method}} : undef; + }; + } + + my %results = ( + result => '/methodResponse/params/[1]', + paramsin => '/methodCall/params/param', + paramsall => '/methodResponse/params/param', + ); + + for my $method (keys %results) { + *$method = sub { + my $self = shift; + ref $self or return $results{$method}; + Carp::croak "Method '$method' is readonly and doesn't accept any parameters" if @_; + defined $self->fault() + ? undef + : $self->valueof($results{$method}); + }; + } +} + +# ====================================================================== + +package XMLRPC::Deserializer; + +@XMLRPC::Deserializer::ISA = qw(SOAP::Deserializer); + +BEGIN { + no strict 'refs'; + for my $method (qw(o_child o_qname o_chars)) { # import from SOAP::Utils + *$method = \&{'SOAP::Utils::'.$method}; + } +} + +sub deserialize { + # just deserialize with SOAP::Lite's deserializer, and re-bless as + # XMLRPC::SOM + bless shift->SUPER::deserialize(@_) => 'XMLRPC::SOM'; +} + +sub decode_value { + my $self = shift; + my $ref = shift; + my($name, $attrs, $children, $value) = @$ref; + + if ($name eq 'value') { + $children ? scalar(($self->decode_object($children->[0]))[1]) : $value; + } + elsif ($name eq 'array') { + return [map {scalar(($self->decode_object($_))[1])} @{o_child($children->[0]) || []}]; + } + elsif ($name eq 'struct') { + return { + map { + my %hash = map { o_qname($_) => $_ } @{o_child($_) || []}; + # v----- scalar is required here, because 5.005 evaluates 'undef' in list context as empty array + (o_chars($hash{name}) => scalar(($self->decode_object($hash{value}))[1])); + } @{$children || []}}; + } + elsif ($name eq 'base64') { + require MIME::Base64; + MIME::Base64::decode_base64($value); + } + elsif ($name =~ /^(?:int|i4|boolean|string|double|dateTime\.iso8601|methodName)$/) { + return $value; + } + elsif ($name =~ /^(?:params)$/) { + return [map {scalar(($self->decode_object($_))[1])} @{$children || []}]; + } + elsif ($name =~ /^(?:methodResponse|methodCall)$/) { + return +{map {$self->decode_object($_)} @{$children || []}}; + } + elsif ($name =~ /^(?:param|fault)$/) { + return scalar(($self->decode_object($children->[0]))[1]); + } + elsif ($name =~ /^(?:nil)$/) { + return undef; + } + else { + die "wrong element '$name'\n"; + } +} + +# ====================================================================== + +package XMLRPC::Server; + +@XMLRPC::Server::ISA = qw(SOAP::Server); + +sub initialize { + return ( + deserializer => XMLRPC::Deserializer->new, + serializer => XMLRPC::Serializer->new, + on_action => sub {}, + on_dispatch => sub { return map {s!\.!/!g; $_} shift->method =~ /^(?:(.*)\.)?(\w+)$/ }, + ); +} + +# ====================================================================== + +package XMLRPC::Server::Parameters; + +@XMLRPC::Server::Parameters::ISA = qw(SOAP::Server::Parameters); + +# ====================================================================== + +package XMLRPC; + +@XMLRPC::ISA = qw(SOAP); + +# ====================================================================== + +package XMLRPC::Lite; + +@XMLRPC::Lite::ISA = qw(SOAP::Lite); + +sub new { + my $class = shift; + + return $class if ref $class; + + return $class->SUPER::new( + serializer => XMLRPC::Serializer->new, + deserializer => XMLRPC::Deserializer->new, + on_action => sub {return}, + uri => 'http://unspecified/', + @_ + ); +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +XMLRPC::Lite - client and server implementation of XML-RPC protocol + +=head1 SYNOPSIS + +=over 4 + +=item Client + + use XMLRPC::Lite; + print XMLRPC::Lite + -> proxy('http://betty.userland.com/RPC2') + -> call('examples.getStateStruct', {state1 => 12, state2 => 28}) + -> result; + +=item CGI server + + use XMLRPC::Transport::HTTP; + + my $server = XMLRPC::Transport::HTTP::CGI + -> dispatch_to('methodName') + -> handle + ; + +=item Daemon server + + use XMLRPC::Transport::HTTP; + + my $daemon = XMLRPC::Transport::HTTP::Daemon + -> new (LocalPort => 80) + -> dispatch_to('methodName') + ; + print "Contact to XMLRPC server at ", $daemon->url, "\n"; + $daemon->handle; + +=back + +=head1 DESCRIPTION + +XMLRPC::Lite is a Perl modules which provides a simple nterface to the +XML-RPC protocol both on client and server side. Based on SOAP::Lite module, +it gives you access to all features and transports available in that module. + +See F for client examples and F for server +implementations. + +=head1 DEPENDENCIES + + SOAP::Lite + +=head1 SEE ALSO + + SOAP::Lite + +=head1 CREDITS + +The B standard is Copyright (c) 1998-2001, UserLand Software, Inc. +See for more information about the B +specification. + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Test.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Test.pm new file mode 100644 index 0000000..04d61cb --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Test.pm @@ -0,0 +1,190 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: Test.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XMLRPC::Test; + +use 5.004; +use vars qw($VERSION $TIMEOUT); +our $VERSION = 0.712; + +$TIMEOUT = 5; + +# ====================================================================== + +package My::PingPong; # we'll use this package in our tests + +sub new { + my $self = shift; + my $class = ref($self) || $self; + bless {_num=>shift} => $class; +} + +sub next { + my $self = shift; + $self->{_num}++; +} + +sub value { + my $self = shift; + $self->{_num}; +} + +# ====================================================================== + +package XMLRPC::Test::Server; + +use strict; +use Test; +use XMLRPC::Lite; + +sub run_for { + my $proxy = shift or die "Proxy/endpoint is not specified"; + + # ------------------------------------------------------ + my $s = XMLRPC::Lite->proxy($proxy)->on_fault(sub{}); + eval { $s->transport->timeout($XMLRPC::Test::TIMEOUT) }; + my $r = $s->test_connection; + + unless (defined $r && defined $r->envelope) { + print "1..0 # Skip: ", $s->transport->status, "\n"; + exit; + } + # ------------------------------------------------------ + + plan tests => 17; + + eval q!use XMLRPC::Lite on_fault => sub{ref $_[1] ? $_[1] : new XMLRPC::SOM}; 1! or die; + + print "Perl XMLRPC server test(s)...\n"; + + $s = XMLRPC::Lite + -> proxy($proxy) + ; + + ok($s->call('My.Examples.getStateName', 1)->result eq 'Alabama'); + ok($s->call('My.Examples.getStateNames', 1,4,6,13)->result =~ /^Alabama\s+Arkansas\s+Colorado\s+Illinois\s*$/); + + $r = $s->call('My.Examples.getStateList', [1,2,3,4])->result; + ok(ref $r && $r->[0] eq 'Alabama'); + + $r = $s->call('My.Examples.getStateStruct', {item1 => 1, item2 => 4})->result; + ok(ref $r && $r->{item2} eq 'Arkansas'); + + print "dispatch_from test(s)...\n"; + eval "use XMLRPC::Lite + dispatch_from => ['A', 'B'], + proxy => '$proxy', + ; 1" or die; + + eval { C->c }; + ok($@ =~ /Can't locate object method "c"/); + + print "Object autobinding and XMLRPC:: prefix test(s)...\n"; + + eval "use XMLRPC::Lite +autodispatch => + proxy => '$proxy'; 1" or die; + + ok(XMLRPC::Lite->autodispatched); + + # forget everything + XMLRPC::Lite->self(undef); + + { + my $on_fault_was_called = 0; + print "Die in server method test(s)...\n"; + my $s = XMLRPC::Lite + -> proxy($proxy) + -> on_fault(sub{$on_fault_was_called++;return}) + ; + ok($s->call('My.Parameters.die_simply')->faultstring =~ /Something bad/); + ok($on_fault_was_called > 0); + + # get Fault as hash of subelements + my $fault = $s->call('My.Parameters.die_with_fault'); + ok($fault->faultcode =~ 'Server\.Custom'); + ok($fault->faultstring eq 'Died in server method'); + } + + print "Number of parameters test(s)...\n"; + + $s = XMLRPC::Lite + -> proxy($proxy) + ; + { my @all = $s->call('My.Parameters.echo')->paramsall; ok(@all == 0) } + { my @all = $s->call('My.Parameters.echo', 1)->paramsall; ok(@all == 1) } + { my @all = $s->call('My.Parameters.echo', (1) x 10)->paramsall; ok(@all == 10) } + + print "Memory refresh test(s)...\n"; + + # Funny test. + # Let's forget about ALL settings we did before with 'use XMLRPC::Lite...' + XMLRPC::Lite->self(undef); + ok(!defined XMLRPC::Lite->self); + + eval "use XMLRPC::Lite + proxy => '$proxy'; 1" or die; + + print "Global settings test(s)...\n"; + $s = new XMLRPC::Lite; + + ok($s->call('My.Examples.getStateName', 1)->result eq 'Alabama'); + + SOAP::Trace->import(transport => + sub {$_[0]->content_type('something/wrong') if UNIVERSAL::isa($_[0] => 'HTTP::Request')} + ); + + if ($proxy =~ /^tcp:/) { + skip('No Content-Type checks for tcp: protocol on server side' => undef); + } else { + ok($s->call('My.Examples.getStateName', 1)->faultstring =~ /Content-Type must be/); + } + + # check status for fault messages + if ($proxy =~ /^http/) { + ok($s->transport->status =~ /^200/); + } else { + skip('No Status checks for non http protocols on server side' => undef); + } +} + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +XMLRPC::Test - Test framework for XMLRPC::Lite + +=head1 SYNOPSIS + + use XMLRPC::Test; + + XMLRPC::Test::Server::run_for('http://localhost/cgi-bin/XMLRPC.cgi'); + +=head1 DESCRIPTION + +XMLRPC::Test provides simple framework for testing server implementations. +Specify your address (endpoint) and run provided tests against your server. +See t/1*.t for examples. + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/HTTP.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/HTTP.pm new file mode 100644 index 0000000..e36f659 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/HTTP.pm @@ -0,0 +1,196 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: HTTP.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XMLRPC::Transport::HTTP; + +use strict; + +our $VERSION = 0.712; + +use XMLRPC::Lite; + +use SOAP::Transport::HTTP; + +# ====================================================================== + +package XMLRPC::Transport::HTTP::CGI; + +@XMLRPC::Transport::HTTP::CGI::ISA = qw(SOAP::Transport::HTTP::CGI); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; + +sub make_fault { + local $SOAP::Constants::HTTP_ON_FAULT_CODE = 200; + shift->SUPER::make_fault(@_); +} + +sub make_response { + local $SOAP::Constants::DO_NOT_USE_CHARSET = 1; + shift->SUPER::make_response(@_); +} + +# ====================================================================== + +package XMLRPC::Transport::HTTP::Daemon; + +@XMLRPC::Transport::HTTP::Daemon::ISA = qw(SOAP::Transport::HTTP::Daemon); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; +sub make_fault; *make_fault = \&XMLRPC::Transport::HTTP::CGI::make_fault; +sub make_response; *make_response = \&XMLRPC::Transport::HTTP::CGI::make_response; + +# ====================================================================== + +package XMLRPC::Transport::HTTP::Apache; + +@XMLRPC::Transport::HTTP::Apache::ISA = qw(SOAP::Transport::HTTP::Apache); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; +sub make_fault; *make_fault = \&XMLRPC::Transport::HTTP::CGI::make_fault; +sub make_response; *make_response = \&XMLRPC::Transport::HTTP::CGI::make_response; + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +XMLRPC::Transport::HTTP - Server/Client side HTTP support for XMLRPC::Lite + +=head1 SYNOPSIS + +=over 4 + +=item Client + + use XMLRPC::Lite + proxy => 'http://localhost/', + # proxy => 'http://localhost/cgi-bin/xmlrpc.cgi', # local CGI server + # proxy => 'http://localhost/', # local daemon server + # proxy => 'http://login:password@localhost/cgi-bin/xmlrpc.cgi', # local CGI server with authentication + ; + + print getStateName(1); + +=item CGI server + + use XMLRPC::Transport::HTTP; + + my $server = XMLRPC::Transport::HTTP::CGI + -> dispatch_to('methodName') + -> handle + ; + +=item Daemon server + + use XMLRPC::Transport::HTTP; + + my $daemon = XMLRPC::Transport::HTTP::Daemon + -> new (LocalPort => 80) + -> dispatch_to('methodName') + ; + print "Contact to XMLRPC server at ", $daemon->url, "\n"; + $daemon->handle; + +=back + +=head1 DESCRIPTION + +This class encapsulates all HTTP related logic for a XMLRPC server, +independent of what web server it's attached to. +If you want to use this class you should follow simple guideline +mentioned above. + +=head2 PROXY SETTINGS + +You can use any proxy setting you use with LWP::UserAgent modules: + + XMLRPC::Lite->proxy('http://endpoint.server/', + proxy => ['http' => 'http://my.proxy.server']); + +or + + $xmlrpc->transport->proxy('http' => 'http://my.proxy.server'); + +should specify proxy server for you. And if you use C +and C for proxy authorization SOAP::Lite should know +how to handle it properly. + +=head2 COOKIE-BASED AUTHENTICATION + + use HTTP::Cookies; + + my $cookies = HTTP::Cookies->new(ignore_discard => 1); + # you may also add 'file' if you want to keep them between sessions + + my $xmlrpc = XMLRPC::Lite->proxy('http://localhost/'); + $xmlrpc->transport->cookie_jar($cookies); + +Cookies will be taken from response and provided for request. You may +always add another cookie (or extract what you need after response) +with HTTP::Cookies interface. + +You may also do it in one line: + + $xmlrpc->proxy('http://localhost/', + cookie_jar => HTTP::Cookies->new(ignore_discard => 1)); + +=head2 COMPRESSION + +XMLRPC::Lite provides you option for enabling compression on wire (for HTTP +transport only). Both server and client should support this capability, +but this logic should be absolutely transparent for your application. +Server will respond with encoded message only if client can accept it +(client sends Accept-Encoding with 'deflate' or '*' values) and client +has fallback logic, so if server doesn't understand specified encoding +(Content-Encoding: deflate) and returns proper error code +(415 NOT ACCEPTABLE) client will repeat the same request not encoded and +will store this server in per-session cache, so all other requests will +go there without encoding. + +Having options on client and server side that let you specify threshold +for compression you can safely enable this feature on both client and +server side. + +Compression will be enabled on client side IF: threshold is specified AND +size of current message is bigger than threshold AND module Compress::Zlib +is available. Client will send header 'Accept-Encoding' with value 'deflate' +if threshold is specified AND module Compress::Zlib is available. + +Server will accept compressed message if module Compress::Zlib is available, +and will respond with compressed message ONLY IF: threshold is specified AND +size of current message is bigger than threshold AND module Compress::Zlib +is available AND header 'Accept-Encoding' is presented in request. + +=head1 DEPENDENCIES + + Crypt::SSLeay for HTTPS/SSL + HTTP::Daemon for XMLRPC::Transport::HTTP::Daemon + Apache, Apache::Constants for XMLRPC::Transport::HTTP::Apache + +=head1 SEE ALSO + + See ::CGI, ::Daemon and ::Apache for implementation details. + See examples/XMLRPC/* for examples. + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/POP3.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/POP3.pm new file mode 100644 index 0000000..7a0d9d5 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/POP3.pm @@ -0,0 +1,72 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: POP3.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XMLRPC::Transport::POP3; + +use strict; + +our $VERSION = 0.712; +use XMLRPC::Lite; + +use SOAP::Transport::POP3; + +# ====================================================================== + +package XMLRPC::Transport::POP3::Server; + +@XMLRPC::Transport::POP3::Server::ISA = qw(SOAP::Transport::POP3::Server); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +XMLRPC::Transport::POP3 - Server side POP3 support for XMLRPC::Lite + +=head1 SYNOPSIS + + use XMLRPC::Transport::POP3; + + my $server = XMLRPC::Transport::POP3::Server + -> new('pop://pop.mail.server') + # if you want to have all in one place + # -> new('pop://user:password@pop.mail.server') + # or, if you have server that supports MD5 protected passwords + # -> new('pop://user:password;AUTH=+APOP@pop.mail.server') + # specify path to My/Examples.pm here + -> dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method'); + # you don't need to use next line if you specified your password in new() + $server->login('user' => 'password') or die "Can't authenticate to POP3 server\n"; + + # handle will return number of processed mails + # you can organize loop if you want + do { $server->handle } while sleep 10; + + # you may also call $server->quit explicitly to purge deleted messages + +=head1 DESCRIPTION + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/TCP.pm b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/TCP.pm new file mode 100644 index 0000000..d5cdf9f --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/CPAN/SOAP-Lite-0.712/lib/XMLRPC/Transport/TCP.pm @@ -0,0 +1,63 @@ +# ====================================================================== +# +# Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com) +# SOAP::Lite is free software; you can redistribute it +# and/or modify it under the same terms as Perl itself. +# +# $Id: TCP.pm 374 2010-05-14 08:12:25Z kutterma $ +# +# ====================================================================== + +package XMLRPC::Transport::TCP; + +use strict; + +our $VERSION = 0.712; +use XMLRPC::Lite; + + +use SOAP::Transport::TCP; + +# ====================================================================== + +package XMLRPC::Transport::TCP::Server; + +@XMLRPC::Transport::TCP::Server::ISA = qw(SOAP::Transport::TCP::Server); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; + +# ====================================================================== + +1; + +__END__ + +=head1 NAME + +XMLRPC::Transport::TCP - Server/Client side TCP support for XMLRPC::Lite + +=head1 SYNOPSIS + + use XMLRPC::Transport::TCP; + + my $daemon = XMLRPC::Transport::TCP::Server + -> new (LocalAddr => 'localhost', LocalPort => 82, Listen => 5, Reuse => 1) + -> objects_by_reference(qw(My::PersistentIterator My::SessionIterator My::Chat)) + -> dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method'); + print "Contact to XMLRPC server at ", join(':', $daemon->sockhost, $daemon->sockport), "\n"; + $daemon->handle; + +=head1 DESCRIPTION + +=head1 COPYRIGHT + +Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR + +Paul Kulchenko (paulclinger@yahoo.com) + +=cut diff --git a/ehcp/fixes/policyd/awitpt/LICENSE b/ehcp/fixes/policyd/awitpt/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/ehcp/fixes/policyd/awitpt/SOAP/Transport/HTTPng.pm b/ehcp/fixes/policyd/awitpt/SOAP/Transport/HTTPng.pm new file mode 100644 index 0000000..d10df84 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/SOAP/Transport/HTTPng.pm @@ -0,0 +1,1007 @@ +# Copyright (C) 2008-2011, AllWorldIT +# Copyright (C) 2005-2007, LinuxRulz +# Copyright (C) 2005, Nigel Kukard +# Copyright 1996-2003, Gisle Aas +# +# This library is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +use strict; +use warnings; + +our $VERSION = 0.010; + + +# Overrided server so we can intercept sensitive info +package SOAP::Transport::HTTPng::Server; + +use SOAP::Transport::HTTP; + +my $COMPRESS = 'deflate'; + +use base qw(SOAP::Transport::HTTP::Server); + +# Setup a logging function +sub set_logger { + my ($self,$logobj) = @_; + + $self->{'logobj'} = $logobj; +} + +# Setup a call logger function +sub set_soap_method_logger { + my ($self,$loggerobj) = @_; + + $self->{'soap_method_logger'} = $loggerobj; +} +sub set_soap_result_logger { + my ($self,$loggerobj) = @_; + + $self->{'soap_result_logger'} = $loggerobj; +} + + +# NK: this is basically a copy of the handle() function from SOAP::Lite, just with a few +# logger changes +sub handle_SOAP_Lite { + SOAP::Trace::trace('()'); + my $self = shift; + $self = $self->new if !ref $self; # inits the server when called in a static context + $self->init_context(); + # we want to restore it when we are done + local $SOAP::Constants::DEFAULT_XML_SCHEMA + = $SOAP::Constants::DEFAULT_XML_SCHEMA; + + # SOAP version WILL NOT be restored when we are done. + # is it problem? + + my $result = eval { + local $SIG{__DIE__}; + # why is this here: + $self->serializer->soapversion(1.1); + my $request = eval { $self->deserializer->deserialize($_[0]) }; + + die SOAP::Fault + ->faultcode($SOAP::Constants::FAULT_VERSION_MISMATCH) + ->faultstring($@) + if $@ && $@ =~ /^$SOAP::Constants::WRONG_VERSION/; + + die "Application failed during request deserialization: $@" if $@; + my $som = ref $request; + die "Can't find root element in the message" + unless $request->match($som->envelope); + $self->serializer->soapversion(SOAP::Lite->soapversion); + $self->serializer->xmlschema($SOAP::Constants::DEFAULT_XML_SCHEMA + = $self->deserializer->xmlschema) + if $self->deserializer->xmlschema; + + die SOAP::Fault + ->faultcode($SOAP::Constants::FAULT_MUST_UNDERSTAND) + ->faultstring("Unrecognized header has mustUnderstand attribute set to 'true'") + if !$SOAP::Constants::DO_NOT_CHECK_MUSTUNDERSTAND && + grep { + $_->mustUnderstand + && (!$_->actor || $_->actor eq $SOAP::Constants::NEXT_ACTOR) + } $request->dataof($som->headers); + + die "Can't find method element in the message" + unless $request->match($som->method); + # TODO - SOAP::Dispatcher plugs in here + # my $handler = $self->dispatcher->find_handler($request); + my($class, $method_uri, $method_name) = $self->find_target($request); + my @results = eval { + local $^W; + my @parameters = $request->paramsin; + + # SOAP::Trace::dispatch($fullname); + SOAP::Trace::parameters(@parameters); + # NK: This happens inside an eval? oh well whatever + $self->soap_method_logger($class,$method_uri,$method_name,@parameters); + push @parameters, $request + if UNIVERSAL::isa($class => 'SOAP::Server::Parameters'); + + no strict qw(refs); + SOAP::Server::Object->references( + defined $parameters[0] + && ref $parameters[0] + && UNIVERSAL::isa($parameters[0] => $class) + ? do { + my $object = shift @parameters; + SOAP::Server::Object->object(ref $class + ? $class + : $object + )->$method_name(SOAP::Server::Object->objects(@parameters)), + + # send object back as a header + # preserve name, specify URI + SOAP::Header + ->uri($SOAP::Constants::NS_SL_HEADER => $object) + ->name($request->dataof($som->method.'/[1]')->name) + } # end do block + + # SOAP::Dispatcher will plug-in here as well + # $handler->dispatch(SOAP::Server::Object->objects(@parameters) + : $class->$method_name(SOAP::Server::Object->objects(@parameters)) ); + }; # end eval block + SOAP::Trace::result(@results); + $self->soap_result_logger($class,$method_uri,$method_name,@results); + + # let application errors pass through with 'Server' code + die ref $@ + ? $@ + : $@ =~ /^Can\'t locate object method "$method_name"/ + ? "Failed to locate method ($method_name) in class ($class)" + : SOAP::Fault->faultcode($SOAP::Constants::FAULT_SERVER)->faultstring($@) + if $@; + + my $result = $self->serializer + ->prefix('s') # distinguish generated element names between client and server + ->uri($method_uri) + ->envelope(response => $method_name . 'Response', @results); + return $result; + }; + + # void context + return unless defined wantarray; + + # normal result + return $result unless $@; + + # check fails, something wrong with message + return $self->make_fault($SOAP::Constants::FAULT_CLIENT, $@) unless ref $@; + + # died with SOAP::Fault + return $self->make_fault($@->faultcode || $SOAP::Constants::FAULT_SERVER, + $@->faultstring || 'Application error', + $@->faultdetail, $@->faultactor) + if UNIVERSAL::isa($@ => 'SOAP::Fault'); + + # died with complex detail + return $self->make_fault($SOAP::Constants::FAULT_SERVER, 'Application error' => $@); + +} # end of handle() + + +# NK: this is basically a copy of the handle() function from SOAP::Transport::HTTP +sub handle { + my $self = shift->new; + + SOAP::Trace::debug( $self->request->content ); + + if ( $self->request->method eq 'POST' ) { + $self->action( $self->request->header('SOAPAction') || undef ); + } + elsif ( $self->request->method eq 'M-POST' ) { + return $self->response( + HTTP::Response->new( + 510, # NOT EXTENDED +"Expected Mandatory header with $SOAP::Constants::NS_ENV as unique URI" + ) ) + if $self->request->header('Man') !~ + /^"$SOAP::Constants::NS_ENV";\s*ns\s*=\s*(\d+)/; + $self->action( $self->request->header("$1-SOAPAction") || undef ); + } + else { + return $self->response( + HTTP::Response->new(405) ) # METHOD NOT ALLOWED + } + + my $compressed = + ( $self->request->content_encoding || '' ) =~ /\b$COMPRESS\b/; + $self->options->{is_compress} ||= + $compressed && eval { require Compress::Zlib }; + + # signal error if content-encoding is 'deflate', but we don't want it OR + # something else, so we don't understand it + return $self->response( + HTTP::Response->new(415) ) # UNSUPPORTED MEDIA TYPE + if $compressed && !$self->options->{is_compress} + || !$compressed + && ( $self->request->content_encoding || '' ) =~ /\S/; + + my $content_type = $self->request->content_type || ''; + +# in some environments (PerlEx?) content_type could be empty, so allow it also +# anyway it'll blow up inside ::Server::handle if something wrong with message +# TBD: but what to do with MIME encoded messages in THOSE environments? + return $self->make_fault( $SOAP::Constants::FAULT_CLIENT, + "Content-Type must be 'text/xml,' 'multipart/*,' " + . "'application/soap+xml,' 'or 'application/dime' instead of '$content_type'" + ) + if !$SOAP::Constants::DO_NOT_CHECK_CONTENT_TYPE + && $content_type + && $content_type ne 'application/soap+xml' + && $content_type ne 'text/xml' + && $content_type ne 'application/dime' + && $content_type !~ m!^multipart/!; + + # TODO - Handle the Expect: 100-Continue HTTP/1.1 Header + if ( defined( $self->request->header("Expect") ) + && ( $self->request->header("Expect") eq "100-Continue" ) ) { + + } + + # TODO - this should query SOAP::Packager to see what types it supports, + # I don't like how this is hardcoded here. + my $content = + $compressed + ? Compress::Zlib::uncompress( $self->request->content ) + : $self->request->content; + + my $response = $self->handle_SOAP_Lite( + $self->request->content_type =~ m!^multipart/! + ? join( "\n", $self->request->headers_as_string, $content ) + : $content + ) or return; + + SOAP::Trace::debug($response); + + $self->make_response( $SOAP::Constants::HTTP_ON_SUCCESS_CODE, $response ); +} + + +# We want to override the make_fault function to catch sensitive information +# being sent out when code b0rkage occurs. +sub make_fault { + my ($self, $code, $string, $detail, $actor) = @_; + + + # Check if this is a string? + if (ref($code) eq "") { + # If its a server fault, just output something nice + if ($code eq "Server") { + # If we have a logging element in ourselves, use it + if (defined($self->{'logobj'})) { + $self->{'logobj'}->log(0,"[SOAP::Server] $string"); + } + $string = "An error occured while processing the request. Please try again later."; + } + } + return $self->SUPER::make_fault($code,$string,$detail,$actor); +} + +# This is the actual interface to the method logger function which allows us +# to customize it +sub soap_method_logger { + my ($self,@params) = @_; + $self->{'soap_method_logger'}(@params) if (defined($self->{'soap_method_logger'})); +} +sub soap_result_logger { + my ($self,@params) = @_; + $self->{'soap_result_logger'}(@params) if (defined($self->{'soap_result_logger'})); +} + + + +# PreForked implementation of a SOAP HTTP transport +package SOAP::Transport::HTTPng::Daemon; +use base qw(Net::Server::PreFork); + + +use HTTP::Daemon; +use HTTP::Status; +use URI::Escape; +use IO::Socket qw(inet_ntoa); +use Socket; + +use SOAP::Lite; + +use SOAP::Transport::HTTP; + +sub new +{ + my $self = shift; + + unless (ref $self) { + my $class = ref($self) || $self; + $self = $class->SUPER::new(@_); + $self->{'soap_config'}->{'dispatch_to'} = (); + $self->{'soap_config'}->{'dispatch_with'} = {}; + } + + return $self; +} + + +sub post_configure +{ + my $self = shift; + my $server = $self->{'server'}; + + + # Make sure we have a timeout + if (!defined($server->{'timeout'})) { + $server->{'timeout'} = 30; + } + + $self->SUPER::post_configure(@_); +} + + +sub child_init_hook +{ + my $self = shift; + my $soapcfg = $self->{'soap_config'}; + + + $self->{'_soap_engine'} = SOAP::Transport::HTTPng::Server->new; + # Mappings + if (defined($soapcfg->{'dispatch_to'}) && @{$soapcfg->{'dispatch_to'}} > 0) { + $self->{'_soap_engine'}->dispatch_to(@{$soapcfg->{'dispatch_to'}}); + } + if (defined($soapcfg->{'dispatch_with'}) && @{$soapcfg->{'dispatch_with'}} > 0) { + $self->{'_soap_engine'}->dispatch_with(%{$soapcfg->{'dispatch_with'}}); + } + # Hooks + if (defined($soapcfg->{'on_action'})) { + $self->{'_soap_engine'}->on_action($soapcfg->{'on_action'}); + } + if (defined($soapcfg->{'on_dispatch'})) { + $self->{'_soap_engine'}->on_dispatch($soapcfg->{'on_dispatch'}); + } + + # Setup logging + if (defined($soapcfg->{'soap_method_logger'})) { + $self->{'_soap_engine'}->set_soap_method_logger($soapcfg->{'soap_method_logger'}); + } + if (defined($soapcfg->{'soap_result_logger'})) { + $self->{'_soap_engine'}->set_soap_result_logger($soapcfg->{'soap_result_logger'}); + } + $self->{'_soap_engine'}->set_logger($self); +} + +sub process_request +{ + my ($self) = @_; + my $soap = $self->{'_soap_engine'}; + + my $c = SOAP::Transport::HTTPng::Daemon::Client->new($self); + my $r = $c->get_request(); + + $soap->request($r); + $soap->handle; + $c->send_response($soap->response); +} + +sub log +{ + my $self = shift; + + return $self->SUPER::log(@_); +} + + +package SOAP::Transport::HTTPng::Daemon::Client; + +require Exporter; +our (@ISA); +@ISA= qw(Exporter); + +use HTTP::Request(); +use HTTP::Response(); +use HTTP::Status; +use HTTP::Date qw(time2str); +use LWP::MediaTypes qw(guess_media_type); +use Carp (); +use URI; + +# Some constants we need +use constant { + DEBUG => 0, + BUFFER_SIZE => 1024, +# Make this big enough to handle an inbound packet ... 1Mb sound sane nowadays? + MAX_REQUEST_SIZE => 1024*1024, + CRLF => "\015\012", # HTTP::Daemon claims \r\n is not portable? +}; + + +# Create object +sub new +{ + my ($class,$daemon) = @_; + + # Define ourselves and our variables + my $self = { + 'daemon' => $daemon, + '_nomore' => undef, + '_rbuf' => undef, + '_client_proto' => undef, + }; + + bless $self, $class; + return $self; +} + + +# Get request +sub get_request +{ + my($self, $only_headers) = @_; + + + # Check if no more requests + if ($self->{'_nomore'}) { + $self->reason("No more requests from this connection"); + return; + } + + # Init + $self->reason(""); + my $buf = $self->{'_rbuf'}; + $buf = "" unless defined $buf; + + # Pull in timeout + my $timeout = $self->{'daemon'}->{'server'}->{'timeout'}; + + # Grab HTTP header + while (1) { + # loop until we have the whole header in $buf + $buf =~ s/^(?:\015?\012)+//; # ignore leading blank lines + if ($buf =~ /\012/) { # potential, has at least one line + if ($buf =~ /^\w+[^\012]+HTTP\/\d+\.\d+\015?\012/) { + if ($buf =~ /\015?\012\015?\012/) { + last; # we have it + + # Header is over 16kb + } elsif (length($buf) > MAX_REQUEST_SIZE) { + $self->send_error(413); # REQUEST_ENTITY_TOO_LARGE + $self->reason("Very long header > ".MAX_REQUEST_SIZE); + return; + } + } else { + last; # HTTP/0.9 client + } + + # Again ... too large + } elsif (length($buf) > MAX_REQUEST_SIZE) { + $self->send_error(414); # REQUEST_URI_TOO_LARGE + $self->reason("Very long first line > ".MAX_REQUEST_SIZE); + return; + } + return unless $self->_need_more(\$buf); + } + + # Disect the protocol + if ($buf !~ s/^(\S+)[ \t]+(\S+)(?:[ \t]+(HTTP\/\d+\.\d+))?[^\012]*\012//) { + $self->{'_client_proto'} = $self->_http_version("HTTP/1.0"); + $self->send_error(400); # BAD_REQUEST + $self->reason("Bad request line: $buf"); + return; + } + my $method = $1; + my $uri = $2; + my $proto = $3 || "HTTP/0.9"; + + $uri = "http://$uri" if $method eq "CONNECT"; + $uri = URI->new($uri, $self->{'daemon'}->{'config'}->{'url'}); + my $r = HTTP::Request->new($method, $uri); + $r->protocol($proto); + $self->{'_client_proto'} = $proto = $self->_http_version($proto); + + if ($self->proto_ge("HTTP/1.0")) { + # we expect to find some headers + my($key, $val); + + while ($buf =~ s/^([^\012]*)\012//) { + $_ = $1; + s/\015$//; + if (/^([^:\s]+)\s*:\s*(.*)/) { + $r->push_header($key, $val) if $key; + ($key, $val) = ($1, $2); + } elsif (/^\s+(.*)/) { + $val .= " $1"; + } else { + last; + } + } + $r->push_header($key, $val) if $key; + } + + my $conn = $r->header('Connection'); + if ($self->proto_ge("HTTP/1.1")) { + $self->{'_nomore'}++ if $conn && lc($conn) =~ /\bclose\b/; + } else { + $self->{'_nomore'}++ unless $conn && lc($conn) =~ /\bkeep-alive\b/; + } + + if ($only_headers) { + $self->{'rbuf'} = $buf; + return $r; + } + + # Find out how much content to read + my $te = $r->header('Transfer-Encoding'); + my $ct = $r->header('Content-Type'); + my $len = $r->header('Content-Length'); + if ($te && lc($te) eq 'chunked') { + # Handle chunked transfer encoding + my $body = ""; + while (1) { + print STDERR "HTTPNG: Chunked\n" if DEBUG; + if ($buf =~ s/^([^\012]*)\012//) { + my $chunk_head = $1; + unless ($chunk_head =~ /^([0-9A-Fa-f]+)/) { + $self->send_error(400); + $self->reason("Bad chunk header $chunk_head"); + return; + } + my $size = hex($1); + last if $size == 0; + + my $missing = $size - length($buf) + 2; # 2=CRLF at chunk end + # must read until we have a complete chunk + while ($missing > 0) { + print STDERR "HTTPNG: Need $missing more bytes\n" if DEBUG; + my $n = $self->_need_more(\$buf); + return unless $n; + $missing -= $n; + } + $body .= substr($buf, 0, $size); + substr($buf, 0, $size+2) = ''; + # need more data in order to have a complete chunk header + } else { + return unless $self->_need_more(\$buf); + } + } + $r->content($body); + + # pretend it was a normal entity body + $r->remove_header('Transfer-Encoding'); + $r->header('Content-Length', length($body)); + + my($key, $val); + while (1) { + if ($buf !~ /\012/) { + # need at least one line to look at + return unless $self->_need_more(\$buf); + } else { + $buf =~ s/^([^\012]*)\012//; + $_ = $1; + s/\015$//; + if (/^([\w\-]+)\s*:\s*(.*)/) { + $r->push_header($key, $val) if $key; + ($key, $val) = ($1, $2); + } elsif (/^\s+(.*)/) { + $val .= " $1"; + } elsif (!length) { + last; + } else { + $self->reason("Bad footer syntax"); + return; + } + } + } + $r->push_header($key, $val) if $key; + + } elsif ($te) { + $self->send_error(501); # Unknown transfer encoding + $self->reason("Unknown transfer encoding '$te'"); + return; + + } elsif ($ct && lc($ct) =~ m/^multipart\/\w+\s*;.*boundary\s*=\s*(\w+)/) { + # Handle multipart content type + my $boundary = sprintf('%s--%s--%s',CRLF,$1,CRLF); + my $index; + while (1) { + $index = index($buf, $boundary); + last if $index >= 0; + # end marker not yet found + return unless $self->_need_more(\$buf); + } + $index += length($boundary); + $r->content(substr($buf, 0, $index)); + substr($buf, 0, $index) = ''; + + } elsif ($len) { + # Plain body specified by "Content-Length" + my $missing = $len - length($buf); + while ($missing > 0) { + print "HTTPNG: Need $missing more bytes of content\n" if DEBUG; + my $n = $self->_need_more(\$buf); + return unless $n; + $missing -= $n; + } + if (length($buf) > $len) { + $r->content(substr($buf,0,$len)); + substr($buf, 0, $len) = ''; + } else { + $r->content($buf); + $buf=''; + } + } + $self->{'rbuf'} = $buf; + + return $r; +} + + +sub _need_more +{ + my($self,$buf) = @_; + + + # Pull in timeout + my $timeout = $self->{'daemon'}->{'server'}->{'timeout'}; + + # Lets start our select() + my $select = IO::Select->new($self->{'daemon'}->{'server'}->{'client'}); + + # Check if we can read + if (my ($fd) = $select->can_read($timeout)) { + # Lets read some data .... + # We do not loop here, when reading we check what we have so far + # then read more, check, read more check, not the ENTIRE buffer + # at once + return $self->clever_sysread($fd,$buf,length($$buf)); + } + + $self->reason("Timeout on read, no data for more than ".$timeout."s"); + return; +} + + +sub clever_sysread +{ + my ($self,$fd,$buf,$offset) = @_; + + + # Setup default offset + if (!defined($offset)) { + $offset = 0; + } + + # Loop with read + my $tread = 0; + while (1) { + # Read the actual data + my $nread = sysread($fd,$$buf,BUFFER_SIZE,$offset+$tread); + + # Check if we got something back + if (!defined($nread)) { + $self->reason("Client closed"); + last; + } + + $tread += $nread; + + # Short-read , means we got it all + if ($nread < BUFFER_SIZE) { + last; + } + } + + return $tread; +} + +sub clever_syswrite +{ + my ($self,$fd,$buf,$length,$offset) = @_; + + + # Setup default length + if (!defined($length)) { + $length = length($buf); + } + # Setup default offset + if (!defined($offset)) { + $offset = 0; + } + + # Pull in timeout + my $timeout = $self->{'daemon'}->{'server'}->{'timeout'}; + + # Loop with write + my $twrite = 0; + while ($twrite < $length) { + # Lets start our select() + my $select = IO::Select->new($fd); + + # Check if we can write + my $nwrite; + if (my ($fd) = $select->can_write($timeout)) { + # Write the actual data + $nwrite = syswrite($fd,$buf,(($length-$twrite) < BUFFER_SIZE ? ($length-$twrite) : BUFFER_SIZE),$offset+$twrite); + # Check if we got something back + if (!defined($nwrite)) { + $self->reason("Client closed"); + last; + } + # Timeout + } else { + $self->reason("Timeout on write, no data for more than ".$timeout."s"); + return; + } + + $twrite += $nwrite; + } + + return $twrite; +} + + + +sub reason +{ + my $self = shift; + my $old = $self->{'reason'}; + $self->{'reason'} = shift if (@_); + return $old; +} + + +sub proto_ge +{ + my $self = shift; + return ($self->{'_client_proto'} >= $self->_http_version(shift)); +} + +sub proto_lt +{ + my $self = shift; + return ($self->{'_client_proto'} < $self->_http_version(shift)); +} + + +sub _http_version +{ + my ($self,$version) = @_; + + return 0 unless ($version =~ m,^(?:HTTP/)?(\d+)\.(\d+)$,i); + return ($1 * 1000 + $2); +} + + +sub antique_client +{ + my $self = shift; + return ($self->{'_client_proto'} < $self->_http_version("HTTP/1.0")); +} + + +sub force_last_request +{ + my $self = shift; + $self->{'_nomore'}++; +} + + +sub send_status_line +{ + my ($self, $status, $message, $proto) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + return if $self->antique_client; + + $status ||= RC_OK; + $message ||= status_message($status) || ""; + $proto ||= $HTTP::Daemon::PROTO || "HTTP/1.1"; + + $self->clever_syswrite($client,sprintf('%s %s %s%s',$proto,$status,$message,CRLF)); +} + + +sub send_crlf +{ + my $self = shift; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + $self->clever_syswrite($client,CRLF); +} + + +sub send_basic_header +{ + my $self = shift; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + return if $self->antique_client; + + $self->send_status_line(@_); + + $self->clever_syswrite($client,sprintf('Date: %s%s',time2str(time), CRLF)); + if ($self->{'daemon'}->{'_product_tokens'}) { + $self->clever_syswrite($client,sprintf('Server: %s%s', $self->{'daemon'}->{'_product_tokens'}, CRLF)); + } +} + + +sub send_response +{ + my ($self,$res) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + if (!ref $res) { + $res ||= RC_OK; + $res = HTTP::Response->new($res, @_); + } + my $content = $res->content; + my $chunked; + unless ($self->antique_client) { + my $code = $res->code; + $self->send_basic_header($code, $res->message, $res->protocol); + if ($code =~ /^(1\d\d|[23]04)$/) { + # make sure content is empty + $res->remove_header("Content-Length"); + $content = ""; + } elsif ($res->request && $res->request->method eq "HEAD") { + # probably OK + } elsif (ref($content) eq "CODE") { + if ($self->proto_ge("HTTP/1.1")) { + $res->push_header("Transfer-Encoding" => "chunked"); + $chunked++; + } else { + $self->force_last_request; + } + } elsif (length($content)) { + $res->header("Content-Length" => length($content)); + } else { + $self->force_last_request; + } + $self->clever_syswrite($client,$res->headers_as_string(CRLF)); + # Separates headers and content + $self->send_crlf(); + } + if (ref($content) eq "CODE") { + while (1) { + my $chunk = &$content(); + last unless defined($chunk) && length($chunk); + if ($chunked) { + $self->clever_syswrite($client,sprintf('%x%s%s%s', length($chunk), CRLF, $chunk, CRLF)); + } else { + $self->clever_syswrite($client,$chunk); + } + } + $self->clever_syswrite($client,sprintf('0%s%s',CRLF,CRLF)) if $chunked; # no trailers either + } elsif (length $content) { + # Write out content nicely... + my $remaining = length($content); + my $offset = 0; + while ($remaining) { + my $nwrite = $self->clever_syswrite($client,$content,($remaining < BUFFER_SIZE ? $remaining : BUFFER_SIZE),$offset); + # Check if something went wrong + if (!defined($nwrite)) { + $self->reason("Client closed"); + last; + } + $remaining -= $nwrite; + $offset += $nwrite; + } + + } +} + + +sub send_redirect +{ + my($self, $loc, $status, $content) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + $status ||= RC_MOVED_PERMANENTLY; + + Carp::croak("Status '$status' is not redirect") unless is_redirect($status); + + $self->send_basic_header($status); + + my $base = $self->{'daemon'}->{'config'}->{'url'}; + + $loc = URI->new($loc, $base) unless ref($loc); + $loc = $loc->abs($base); + + $self->clever_syswrite($client,sprintf('Location: %s%s',$loc,CRLF)); + + if ($content) { + my $ct = $content =~ /^\s*clever_syswrite($client,sprintf('Content-Type: %s%s',$ct,CRLF)); + } + + $self->send_crlf(); + $self->clever_syswrite($client,$content) if $content; + return $self->force_last_request; # no use keeping the connection open +} + + +sub send_error +{ + my($self, $status, $error) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + $status ||= RC_BAD_REQUEST; + Carp::croak("Status '$status' is not an error") unless is_error($status); + + my $mess = status_message($status); + + $error ||= ""; + + $mess = <$status $mess +

$status $mess

+$error +EOT + + unless ($self->antique_client) { + $self->send_basic_header($status); + $self->clever_syswrite($client,sprintf('Content-Type: text/html%s',CRLF)); + $self->clever_syswrite($client,sprintf('Content-Length: %s%s',length($mess),CRLF)); + $self->send_crlf(); + } + + $self->clever_syswrite($client,$mess); + + return $status; +} + + +sub send_file_response +{ + my($self, $file) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + if (-d $file) { + $self->send_dir($file); + } elsif (-f _) { + # plain file + local(*F); + sysopen(F, $file, 0) or + return $self->send_error(RC_FORBIDDEN); + binmode(F); + my($ct,$ce) = guess_media_type($file); + my($size,$mtime) = (stat _)[7,9]; + unless ($self->antique_client) { + $self->send_basic_header; + $self->clever_syswrite($client,sprintf('Content-Type: %s%s',$ct,CRLF)); + $self->clever_syswrite($client,sprintf('Content-Encoding: %s%s',$ce,CRLF)) if $ce; + $self->clever_syswrite($client,sprintf('Content-Length: %s%s',$size,CRLF)) if $size; + $self->clever_syswrite($client,sprintf('Last-Modified: %s%s',time2str($mtime),CRLF)) if $mtime; + $self->send_crlf(); + } + $self->send_file(\*F); + return RC_OK; + + } else { + $self->send_error(RC_NOT_FOUND); + } +} + + +sub send_dir +{ + my($self, $dir) = @_; + $self->send_error(RC_NOT_FOUND) unless -d $dir; + $self->send_error(RC_NOT_IMPLEMENTED); +} + + +sub send_file +{ + my($self, $file) = @_; + my $client = $self->{'daemon'}->{'server'}->{'client'}; + + + my $opened = 0; + local(*FILE); + if (!ref($file)) { + open(FILE, $file) || return undef; + binmode(FILE); + $file = \*FILE; + $opened++; + } + my $cnt = 0; + my $buf = ""; + my $n; + while ($n = sysread($file, $buf, BUFFER_SIZE)) { + last if !$n; + $cnt += $n; + syswrite($client,$buf); + } + close($file) if $opened; + return $cnt; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/awitpt/awitpt/cache.pm b/ehcp/fixes/policyd/awitpt/awitpt/cache.pm new file mode 100644 index 0000000..460015d --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/awitpt/cache.pm @@ -0,0 +1,344 @@ +# Caching engine +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2007 Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package awitpt::cache; + +use strict; +use warnings; + + +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( + cacheStoreKeyPair + cacheStoreComplexKeyPair + cacheGetKeyPair + cacheGetComplexKeyPair +); +@EXPORT_OK = qw( + getCacheHits + getCacheMisses +); + +use Cache::FastMmap; +use Storable; + +# Cache stuff +my $cache_type = "FastMmap"; +my $cache; + + +# Our current error message +my $error = ""; + +## @internal +# @fn setError($err) +# This function is used to set the last error for this class +# +# @param err Error message +sub setError +{ + my $err = shift; + my ($package,$filename,$line) = caller; + my (undef,undef,undef,$subroutine) = caller(1); + + # Set error + $error = "$subroutine($line): $err"; +} + + +## @internal +# @fn Error +# Return current error message +# +# @return Last error message +sub Error +{ + my $err = $error; + + # Reset error + $error = ""; + + # Return error + return $err; +} + + + + + +## @fn Init($server) +# Initialize cache +# +# @param server Server object +# @param params Parameters for the cache +# @li cache_file Filename of the cache file +# @li cache_file_user Owner of the cache file +# @li cache_file_group Group of the cache file +sub Init +{ + my ($server,$params) = @_; + my $ch; + + + # We going to pass these options to new() + my %opt = ( + 'page_size' => 2048, + 'num_pages' => 1000, + 'expire_time' => 300, + 'raw_values' => 1, + 'unlink_on_exit' => 1, + ); + + # Check if we have the optional $params + if (defined($params)) { + # If we have a special cache file, use it and init it too + if (defined($params->{'cache_file'})) { + $opt{'share_file'} = $params->{'cache_file'}; + $opt{'init_file'} = 1; + } + } + + # Create Cache + $ch = Cache::FastMmap->new(%opt); + + # Check if we have the optional $params + if (defined($params)) { + # If we have an explicit owner set, use it + if (defined($params->{'cache_file_user'})) { + # Check all is ok... + my ($chown_user,$chown_group); + if (!($chown_user = getpwnam($params->{'cache_file_user'}))) { + setError("User '$chown_user' appears to be invalid: $?"); + return(-1); + } + if (!($chown_group = getgrnam($params->{'cache_file_group'}))) { + setError("Group '$chown_group' appears to be invalid: $?"); + return(-1); + } + # Go in and chown it + if (!chown($chown_user,$chown_group,$opt{'share_file'})) { + setError("Failed to chown cache file '".$opt{'share_file'}."': $!"); + return(-1); + } + } + } + + # Stats + $ch->set('Cache/Stats/Hit',0); + $ch->set('Cache/Stats/Miss',0); + + # Set server vars + $server->{'cache_engine'}{'handle'} = $ch; +}; + + +## @fn Destroy() +# Destroy cache +# +# @param server Server object +sub Destroy +{ +}; + + +## @fn connect($server) +# Connect server with the cache +# +# @param server Server object +sub connect +{ + my $server = shift; + + $cache = $server->{'cache_engine'}{'handle'}; +} + + +## @fn disconnect() +# Disconnect cache from server +# +# @param server Server object +sub disconnect +{ +} + + +## @fn cacheStoreKeyPair($cacheName,$key,$value) +# Store keypair in cache +# +# @param cacheName Cache name to use +# @param key Item key +# @param value Item value +sub cacheStoreKeyPair +{ + my ($cacheName,$key,$value) = @_; + + + if (!defined($cacheName)) { + setError("Cache name not defined in store"); + return -1; + } + + if ($cacheName eq "") { + setError("Cache name not set in store"); + return -1; + } + + if (!defined($key)) { + setError("Key not defined for cache '$cacheName' store"); + return -1; + } + + if (!defined($value)) { + setError("Value not defined for cache '$cacheName' key '$key' store"); + return -1; + } + + # If we're not caching just return + return 0 if ($cache_type eq 'none'); + + # Store + $cache->set("$cacheName/$key",$value); + + return 0; +} + + +## @fn cacheGetKeyPair($cacheName,$key) +# Get value from cache +# +# @param cacheName Cache name to use +# @param key Item key +sub cacheGetKeyPair +{ + my ($cacheName,$key) = @_; + + + if (!defined($cacheName)) { + setError("Cache name not defined in get"); + return (-1); + } + + if ($cacheName eq "") { + setError("Cache name not set in get"); + return (-1); + } + + if (!defined($key)) { + setError("Key not defined for cache '$cacheName' get"); + return (-1); + } + + # If we're not caching just return + if ($cache_type eq 'none') { + return (0,undef); + } + + # Check and count + my $res = $cache->get("$cacheName/$key"); + if ($res) { + $cache->get_and_set('Cache/Stats/Hit',sub { return ++$_[1]; }); + } else { + $cache->get_and_set('Cache/Stats/Miss',sub { return ++$_[1]; }); + } + + return (0,$res); +} + + +## @fn cacheStoreComplexKeyPair($cacheName,$key,$value) +# Store a complex keypair in cache, this would be an object and +# not a number or text +# +# @param cacheName Cache name to use +# @param key Item key +# @param value Item value +sub cacheStoreComplexKeyPair +{ + my ($cacheName,$key,$value) = @_; + + + my $rawValue = Storable::freeze($value); + if (!defined($rawValue)) { + setError("Unable to freeze cache value in '$cacheName'"); + return -1; + } + + return cacheStoreKeyPair($cacheName,$key,$rawValue); +} + + + +## @fn cacheGetComplexKeyPair($cacheName,$key) +# Get value from cache +# +# @param cacheName Cache name to use +# @param key Item key +sub cacheGetComplexKeyPair +{ + my ($cacheName,$key) = @_; + + + my ($res,$rawValue) = cacheGetKeyPair($cacheName,$key); + # Thaw out item, if there is no error and we are defined + if (!$res && defined($rawValue)) { + $rawValue = Storable::thaw($rawValue); + } + + return ($res,$rawValue); +} + + + +## @fn getCacheHits +# Return cache hits +# +# @return Cache hits +sub getCacheHits +{ + my $res; + + + # Get counter + $res = defined($cache->get('Cache/Stats/Hit')) ? $cache->get('Cache/Stats/Hit') : 0; + + return $res; +} + + +## @fn getCacheMisses +# Return cache misses +# +# @return Cache misses +sub getCacheMisses +{ + my $res; + + + # Get counter + $res = defined($cache->get('Cache/Stats/Miss')) ? $cache->get('Cache/Stats/Miss') : 0; + + return $res; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/awitpt/awitpt/db/dbilayer.pm b/ehcp/fixes/policyd/awitpt/awitpt/db/dbilayer.pm new file mode 100644 index 0000000..7563296 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/awitpt/db/dbilayer.pm @@ -0,0 +1,463 @@ +# Database independent layer module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2005-2007 Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + + +## @class awit::db::dbilayer +# Database independant layer module. This module encapsulates the DBI +# module and provides us with some tweaked functionality +package awitpt::db::dbilayer; + +use strict; +use warnings; + + +use DBI; + + + +# Our current error message +my $error = ""; + + +## @internal +# @fn setError($err) +# This function is used to set the last error for this class +# +# @param err Error message +sub setError +{ + my $err = shift; + my ($package,$filename,$line) = caller; + my (undef,undef,undef,$subroutine) = caller(1); + + # Set error + $error = "$subroutine($line): $err"; +} + +## @fn internalError +# Return current module error message +# +# @return Last module error message +sub internalError +{ + my $err = $error; + + # Reset error + $error = ""; + + # Return error + return $err; +} + + +## @member Error +# Return current object error message +# +# @return Current object error message +sub Error +{ + my $self = shift; + + my $err = $self->{_error}; + + # Reset error + $self->{_error} = ""; + + # Return error + return $err; +} + + + +## @fn Init($server,$server_name) +# Initialize class and return a fully connected object +# +# @param server Server object +# @param server_name Name of server +# +# @return dbilayer object, undef on error +sub Init +{ + my $server = shift; + my $server_name = shift; + + + if (!defined($server)) { + setError("Server object undefined"); + return undef; + } + if (!defined($server_name)) { + setError("Server name undefined"); + return undef; + } + + + my $dbconfig = $server->{$server_name}->{'database'}; + + + # Check if we created + my $dbh = awitpt::db::dbilayer->new($dbconfig->{'DSN'},$dbconfig->{'Username'},$dbconfig->{'Password'}, + $dbconfig->{'TablePrefix'}); + return undef if (!defined($dbh)); + + + return $dbh; +} + + +## @member new($dsn,$username,$password) +# Class constructor +# +# @param dsn Data source name +# @param username Username to use +# @param password Password to use +# +# @return Constructed object, undef on error +sub new +{ + my ($class,$dsn,$username,$password,$table_prefix) = @_; + + # Iternals + my $self = { + _type => undef, + + _dbh => undef, + _error => undef, + + _dsn => undef, + _username => undef, + _password => undef, + + _table_prefix => "", + + _in_transaction => undef, + }; + + # Set database parameters + if (defined($dsn)) { + $self->{_dsn} = $dsn; + $self->{_username} = $username; + $self->{_password} = $password; + $self->{_table_prefix} = $table_prefix if (defined($table_prefix) && $table_prefix ne ""); + } else { + setError("Invalid DSN '$dsn' given"); + return undef; + } + + # Try grab database type + $self->{_dsn} =~ /^DBI:([^:]+):/i; + $self->{_type} = (defined($1) && $1 ne "") ? lc($1) : "unknown"; + + # Create... + bless $self, $class; + return $self; +} + + + +## @member connect(@params) +# Return connection to database +# +# @param params DBI parameters +# +# @return 0 on success, < 0 on error +sub connect +{ + my $self = shift; + + + $self->{_dbh} = DBI->connect($self->{_dsn}, $self->{_username}, $self->{_password}, { + 'AutoCommit' => 1, + 'PrintError' => 0, + 'FetchHashKeyName' => 'NAME_lc' + }); + + # Connect to database if we have to, check if we ok + if (!$self->{_dbh}) { + $self->{_error} = "Error connecting to database: $DBI::errstr"; + return -1; + } + + # Apon connect we are not in a transaction + $self->{_in_transaction} = 0; + + return 0; +} + + +## @member type +# Return database type +# +# @return Database type string +sub type +{ + my $self = shift; + + return $self->{_type}; +} + + +## @member _check +# Check database connection and reconnect if we lost the connection +sub _check +{ + my $self = shift; + + + # If we not in a transaction try connect + if ($self->{_in_transaction} == 0) { + # Try ping + if (!$self->{_dbh}->ping()) { + # Disconnect & reconnect + $self->{_dbh}->disconnect(); + $self->connect(); + } + } +} + + +## @member select($query) +# Return database selection results... +# +# @param query SQL query +# +# @return DBI statement handle object, undef on error +sub select +{ + my ($self,$query,@params) = @_; + + + $self->_check(); + +# # Build single query instead of using binding of params +# # not all databases support binding, and not all support all +# # the places we use ? +# $query =~ s/\?/%s/g; +# # Map each element in params to the quoted value +# $query = sprintf($query, +# map { $self->quote($_) } @params +# ); +#use Data::Dumper; print STDERR Dumper($query); + # Prepare query + my $sth; + if (!($sth = $self->{_dbh}->prepare($query))) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + # Check for execution error +# if (!$sth->execute()) { + if (!$sth->execute(@params)) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $sth; +} + + +## @member do($command) +# Perform a command +# +# @param command Command to execute +# +# @return DBI statement handle object, undef on error +sub do +{ + my ($self,$command,@params) = @_; + + + $self->_check(); + +# # Build single command instead of using binding of params +# # not all databases support binding, and not all support all +# # the places we use ? +# $command =~ s/\?/%s/g; +# # Map each element in params to the quoted value +# $command = sprintf($command, +# map { $self->quote($_) } @params +# ); +#use Data::Dumper; print STDERR Dumper($command); + + # Prepare query + my $sth; +# if (!($sth = $self->{_dbh}->do($command))) { + if (!($sth = $self->{_dbh}->do($command,undef,@params))) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $sth; +} + + +## @method lastInsertID($table,$column) +# Function to get last insert id +# +# @param table Table last entry was inserted into +# @param column Column we want the last value for +# +# @return Last inserted ID, undef on error +sub lastInsertID +{ + my ($self,$table,$column) = @_; + + + # Get last insert id + my $res; + if (!($res = $self->{_dbh}->last_insert_id(undef,undef,$table,$column))) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $res; +} + + +## @method begin +# Function to begin a transaction +# +# @return 1 on success, undef on error +sub begin +{ + my $self = shift; + + + $self->_check(); + + $self->{_in_transaction}++; + + # Don't really start transaction if we more than 1 deep + if ($self->{_in_transaction} > 1) { + return 1; + } + + # Begin + my $res; + if (!($res = $self->{_dbh}->begin_work())) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $res; +} + + +## @method commit +# Function to commit a transaction +# +# @return DBI layer result, or 1 on deep transaction commit +sub commit +{ + my $self = shift; + + + # Reduce level + $self->{_in_transaction}--; + + # If we not at top level, return success + if ($self->{_in_transaction} > 0) { + return 1; + } + + # Reset transaction depth to 0 + $self->{_in_transaction} = 0; + + # Commit + my $res; + if (!($res = $self->{_dbh}->commit())) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $res; +} + + +## @method rollback +# Function to rollback a transaction +# +# @return DBI layer result or 1 on deep transaction +sub rollback +{ + my $self = shift; + + + # If we at top level, return success + if ($self->{_in_transaction} < 1) { + return 1; + } + + $self->{_in_transaction} = 0; + + # Rollback + my $res; + if (!($res = $self->{_dbh}->rollback())) { + $self->{_error} = $self->{_dbh}->errstr; + return undef; + } + + return $res; +} + + +## @method quote($variable) +# Function to quote a database variable +# +# @param variable Variable to quote +# +# @return Quoted variable +sub quote +{ + my ($self,$variable) = @_; + + return $self->{_dbh}->quote($variable); +} + + +## @method free($sth) +# Function to cleanup DB query +# +# @param sth DBI statement handle +sub free +{ + my ($self,$sth) = @_; + + + if ($sth) { + $sth->finish(); + } +} + + +# Function to return the table prefix +sub table_prefix +{ + my $self = shift; + + return $self->{_table_prefix}; +} + + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/awitpt/awitpt/db/dblayer.pm b/ehcp/fixes/policyd/awitpt/awitpt/db/dblayer.pm new file mode 100644 index 0000000..16d7caf --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/awitpt/db/dblayer.pm @@ -0,0 +1,614 @@ +# Common database layer module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2005-2007 Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + +## @class awitpt::db::dblayer +# Database layer module which makes life a bit esier +package awitpt::db::dblayer; + +use strict; +use warnings; + + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT); +@ISA = qw(Exporter); +@EXPORT = qw( + DBConnect + DBSelect + DBDo + DBLastInsertID + DBBegin + DBCommit + DBRollback + DBQuote + DBFreeRes + + DBSelectNumResults + DBSelectSearch + + hashifyLCtoMC +); + +use POSIX qw( strftime ); +use Date::Parse; + +use awitpt::db::dbilayer; + + +# Database handle +my $dbh = undef; + +# Our current error message +my $error = ""; + +## @internal +# @fn setError($err) +# This function is used to set the last error for this class +# +# @param err Error message +sub setError +{ + my $err = shift; + my ($package,$filename,$line) = caller; + my (undef,undef,undef,$subroutine) = caller(1); + + # Set error + $error = "$subroutine($line): $err"; +} + +## @internal +# @fn Error +# Return current error message +# +# @return Last error message +sub Error +{ + my $err = $error; + + # Reset error + $error = ""; + + # Return error + return $err; +} + + + +## @fn setHandle($handle) +# Initialize database handle +# +# @param handle Set internal database handle we use +sub setHandle +{ + my $handle = shift; + + $dbh = $handle; +} + + +## @fn DBSelect($query,@params) +# Return database selection results... +# +# @param query Query to run +# +# @return DBI statement handle, undef on error +sub DBSelect +{ + my ($query,@params) = @_; + + my $table_prefix = $dbh->table_prefix(); + + # Replace table prefix macro + $query =~ s/\@TP\@/$table_prefix/g; + + # Prepare query + my $sth; + if (!($sth = $dbh->select($query,@params))) { + setError("Error executing select: ".$dbh->Error()); + return undef; + } + + return $sth; +} + + +## @fn DBDo($command) +# Perform a command +# +# @param command Command to run +# +# @return DBI statement handle, undef on error +sub DBDo +{ + my (@params) = @_; + + + my $table_prefix = $dbh->table_prefix(); + + # Check type of params we have + if (ref($params[0]) eq 'HASH') { + my $queryHash = $params[0]; + my $dbType = $dbh->type(); + + # Check DB type is defined, if not use * + if (defined($queryHash->{$dbType})) { + @params = @{$queryHash->{$dbType}}; + } elsif (defined($queryHash->{'*'})) { + @params = @{$queryHash->{'*'}}; + } else { + setError("Error executing, database type in query not fund and no '*' query found"); + return undef; + } + } + + # Grab command and data + my $command = shift(@params); + my @data = @params; + + # Replace table prefix macro + $command =~ s/\@TP\@/$table_prefix/g; + + # Prepare query + my $sth; + if (!($sth = $dbh->do($command,@data))) { + setError("Error executing command '$command': ".$dbh->Error()); + return undef; + } + + return $sth; +} + + +## @fn DBLastInsertID($table,$column) +# Function to get last insert id +# +# @param table Table to check +# @param column Column to get last insert on +# +# @return Last insert ID or undef on error +sub DBLastInsertID +{ + my ($table,$column) = @_; + + + my $res; + if (!($res = $dbh->lastInsertID(undef,undef,$table,$column))) { + setError("Error getting last inserted id: ".$dbh->Error()); + return undef; + } + + return $res; +} + + +## @fn DBBegin +# Function to begin a transaction +# +# @return 1 on success, undef on error +sub DBBegin +{ + my $res; + if (!($res = $dbh->begin())) { + setError("Error beginning transaction: ".$dbh->Error()); + return undef; + } + + return $res; +} + + +## @fn DBCommit +# Function to commit a transaction +# +# @return 1 on success, undef on error +sub DBCommit +{ + my $res; + if (!($res = $dbh->commit())) { + setError("Error committing transaction: ".$dbh->Error()); + return undef; + } + + return $res; +} + + +## @fn DBRollback +# Function to rollback a transaction +# +# @return 1 on success, undef on error +sub DBRollback +{ + my $res; + if (!($res = $dbh->rollback())) { + setError("Error rolling back transaction: ".$dbh->Error()); + return undef; + } + + return $res; +} + + +## @fn DBQuote($variable) +# Function to quote a database variable +# +# @param variable Variable to quote +# +# @return Quoted variable +sub DBQuote +{ + my $variable = shift; + + + return $dbh->quote($variable); +} + + +## @fn DBFreeRes($sth) +# Function to cleanup DB query +# +# @param sth Statement handle to cleanup +sub DBFreeRes +{ + my $sth = shift; + + + if ($sth) { + $sth->finish(); + } +} + + +# Function to get table prefix +sub DBTablePrefix +{ + return $dbh->table_prefix(); +} + + +# +# Value Added Functions +# + + +## @fn DBSelectNumResults($query) +# Return how many results came up from the specific SELECT query +# +# @param query Query to perform, minus "SELECT COUNT(*) AS num_results" +# +# @return Number of results, undef on error +sub DBSelectNumResults +{ + my $query = shift; + + + # Prepare query + my $sth; + if (!($sth = $dbh->select("SELECT COUNT(*) AS num_results $query"))) { + setError("Error executing select: ".$dbh->Error()); + return undef; + } + + # Grab row + my $row = $sth->fetchrow_hashref(); + if (!defined($row)) { + setError("Failed to get results from a select: ".$dbh->Error()); + return undef; + } + + # Pull number + my $num_results = $row->{'num_results'}; + $sth->finish(); + + return $num_results; +} + + +## @fn DBSelectSearch($query,$search,$filters,$sorts) +# Select results from database and return the total number aswell +# +# @param query Base query +# +# @param search Search hash ref +# @li Filter - Filter based on this... +# [filter] => Array ( +# [0] => Array ( +# [field] => Name +# [data] => Array ( +# [type] => string +# [value] => hi there +# ) +# ) +# ) +# { 'data' => { 'comparison' => 'gt', 'value' => '5', 'type' => 'numeric' }, 'field' => 'ID' } +# @li Start - Start item number, indexed from 0 onwards +# @li Limit - Limit number of results +# @li Sort - Sort by this item +# @li SortDirection - Sort in this direction, either ASC or DESC +# +# @param filters Filter hash ref +# Hash: 'Column' -> 'Table.DBColumn' +# +# @param sorts Hash ref of valid sort criteria, indexed by what we get, pointing to the DB column in the query +# Hash: 'Column' -> 'Table.DBColumn' +# +# @return Number of results, undef on error +sub DBSelectSearch +{ + my ($query,$search,$filters,$sorts) = @_; + + + # Stuff we need to add to the SQL query + my @where; # Where clauses + my $sqlWhere = ""; + my $sqlLimit = ""; + my $sqlOffset = ""; + my $sqlOrderBy = ""; + my $sqlOrderByDirection = ""; + + # Check if we're searching + if (defined($search) && ref($search)) { + # Check it is a hash + if (ref($search) ne "HASH") { + setError("Parameter 'search' is not a hashtable"); + return (undef,-1); + } + # Check if we need to filter + if (defined($search->{'Filter'})) { + # We need filters in order to use filtering + if (!defined($filters)) { + setError("Parameter 'search' element 'Filter' requires 'filters' to be defined"); + return (undef,-1); + } + + # Check type of Filter + if (ref($search->{'Filter'}) ne "ARRAY") { + setError("Parameter 'search' element 'Filter' is of invalid type, it must be an ARRAY'"); + return (undef,-1); + } + + # Loop with filters + foreach my $item (@{$search->{'Filter'}}) { + my $data = $item->{'data'}; # value, type, comparison + my $field = $item->{'field'}; + my $column = $filters->{$field}; + + # Check if field is in our allowed filters + if (!defined($filters->{$field})) { + setError("Parameter 'search' element 'Filter' has invalid field item '$field' according to 'filters'"); + return (undef,-1); + } + # Check data + if (!defined($data->{'type'})) { + setError("Parameter 'search' element 'Filter' requires field data element 'type' for field '$field'"); + return (undef,-1); + } + if (!defined($data->{'value'})) { + setError("Parameter 'search' element 'Filter' requires field data element 'value' for field '$field'"); + return (undef,-1); + } + + # match =, LIKE, IN ( + # matchEnd '' or ) + my $match; + my $matchEnd = ""; + # value is the DBQuote()'d value + my $value; + + # Check what type of comparison + if ($data->{'type'} eq "boolean") { + $match = '='; + $value = DBQuote($data->{'value'}); + + + } elsif ($data->{'type'} eq "date") { + + # The comparison type must be defined + if (!defined($data->{'comparison'})) { + setError("Parameter 'search' element 'Filter' requires field data element 'comparison' for date field '$field'"); + return (undef,-1); + } + + # Check comparison type + if ($data->{'comparison'} eq "gt") { + $match = ">"; + + } elsif ($data->{'comparison'} eq "lt") { + $match = "<"; + + } elsif ($data->{'comparison'} eq "eq") { + $match = "="; + + } elsif ($data->{'comparison'} eq "ge") { + $match = ">="; + + } elsif ($data->{'comparison'} eq "le") { + $match = "<="; + } + # Convert to ISO format + my $unixtime = str2time($data->{'value'}); + my @d = localtime($unixtime); + $value = DBQuote(sprintf("%4d-%02d-%02d", $d[5]+1900, $d[4]+1, $d[3])); + + + } elsif ($data->{'type'} eq "list") { + # Quote all values + my @valueList; + foreach my $i (split(/,/,$data->{'value'})) { + push(@valueList,DBQuote($i)); + } + + $match = "IN ("; + # Join up 'xx','yy','zz' + $value = join(',',@valueList); + $matchEnd = ")"; + + + } elsif ($data->{'type'} eq "numeric") { + + # The comparison type must be defined + if (!defined($data->{'comparison'})) { + setError("Parameter 'search' element 'Filter' requires field data element 'comparison' for numeric field '$field'"); + return (undef,-1); + } + + # Check comparison type + if ($data->{'comparison'} eq "gt") { + $match = ">"; + + } elsif ($data->{'comparison'} eq "lt") { + $match = "<"; + + } elsif ($data->{'comparison'} eq "eq") { + $match = "="; + + } elsif ($data->{'comparison'} eq "ge") { + $match = ">="; + + } elsif ($data->{'comparison'} eq "le") { + $match = "<="; + } + + $value = DBQuote($data->{'value'}); + + + } elsif ($data->{'type'} eq "string") { + $match = "LIKE"; + $value = DBQuote("%".$data->{'value'}."%"); + + } + + # Add to list + push(@where,"$column $match $value $matchEnd"); + } + + # Check if we have any WHERE clauses to add ... + if (@where > 0) { + # Check if we have WHERE clauses in the query + if ($query =~ /\sWHERE\s/i) { + # If so start off with AND + $sqlWhere .= "AND "; + } else { + $sqlWhere = "WHERE "; + } + $sqlWhere .= join(" AND ",@where); + } + } + + # Check if we starting at an OFFSET + if (defined($search->{'Start'})) { + # Check if Start is valid + if ($search->{'Start'} < 0) { + setError("Parameter 'search' element 'Start' invalid value '".$search->{'Start'}."'"); + return (undef,-1); + } + + $sqlOffset = sprintf("OFFSET %i",$search->{'Start'}); + } + + # Check if results will be LIMIT'd + if (defined($search->{'Limit'})) { + # Check if Limit is valid + if ($search->{'Limit'} < 1) { + setError("Parameter 'search' element 'Limit' invalid value '".$search->{'Limit'}."'"); + return (undef,-1); + } + + $sqlLimit = sprintf("LIMIT %i",$search->{'Limit'}); + } + + # Check if we going to be sorting + if (defined($search->{'Sort'})) { + # We need sorts in order to use sorting + if (!defined($sorts)) { + setError("Parameter 'search' element 'Filter' requires 'filters' to be defined"); + return (undef,-1); + } + + # Check if sort is defined + if (!defined($sorts->{$search->{'Sort'}})) { + setError("Parameter 'search' element 'Sort' invalid item '".$search->{'Sort'}."' according to 'sorts'"); + return (undef,-1); + } + + # Build ORDER By + $sqlOrderBy = "ORDER BY ".$sorts->{$search->{'Sort'}}; + + # Check for sort ORDER + if (defined($search->{'SortDirection'})) { + + # Check for valid directions + if (lc($search->{'SortDirection'}) eq "asc") { + $sqlOrderByDirection = "ASC"; + + } elsif (lc($search->{'SortDirection'}) eq "desc") { + $sqlOrderByDirection = "DESC"; + + } else { + setError("Parameter 'search' element 'SortDirection' invalid value '".$search->{'SortDirection'}."'"); + return (undef,-1); + } + } + } + } + + # Select row count, pull out "SELECT .... " as we replace this in the NumResults query + (my $queryCount = $query) =~ s/^\s*SELECT\s.*\sFROM/FROM/is; + my $numResults = DBSelectNumResults("$queryCount $sqlWhere"); + if (!defined($numResults)) { + return undef; + } + + # Add Start, Limit, Sort, Direction + my $sth = DBSelect("$query $sqlWhere $sqlOrderBy $sqlOrderByDirection $sqlLimit $sqlOffset"); + if (!defined($sth)) { + return undef; + } + + return ($sth,$numResults); +} + + +# Convert a lower case array to mixed case +sub hashifyLCtoMC +{ + my ($record,@entries) = @_; + + + # If we undefined, return + return undef if (!defined($record)); + + my $res; + + # Loop with each item, assign from lowecase database record to our result + foreach my $entry (@entries) { + $res->{$entry} = $record->{lc($entry)}; + } + + return $res; +} + + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/awitpt/awitpt/netip.pm b/ehcp/fixes/policyd/awitpt/awitpt/netip.pm new file mode 100644 index 0000000..b2a9bd2 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/awitpt/netip.pm @@ -0,0 +1,557 @@ +# Network IP Address Handling +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# * * * +# 2009-12-03: Portions of this are derived from ideas and code in Net::IP +# - Robert Anderson +# * * * + + +package awitpt::netip; + +use strict; +use warnings; + +use Math::BigInt; + +# Our current error message +my $error = ""; + + +sub setError +{ + my $err = shift; + my ($package,$filename,$line) = caller; + my (undef,undef,undef,$subroutine) = caller(1); + + # Set error + $error = "$subroutine($line): $err"; +} + + +sub Error +{ + my $err = $error; + + # Reset error + $error = ""; + + # Return error + return $err; +} + + +# Create object +sub new +{ + my ($type,$ip) = @_; + + + # Make sure IP is defined + if (!defined($ip)) { + setError("IP address not defined"); + } + + my $self = {}; + + # Check if this is an IPv4 to IPv6 mapping + if ($ip =~ /\:ffff\:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i) { + + # Grab the IP + $ip = $1; + } + + # Guess ip version + if ($ip =~ /:/) { + $self->{'ip_version'} = 6; + } elsif (($ip =~ /\./) || ($ip =~ /^\d{1,3}(\/\d{1,2})?$/)) { + $self->{'ip_version'} = 4; + } else { + setError("Failed to guess IP address version"); + return undef; + } + + $self->{'raw_ip'} = $ip; + + # Instantiate object + bless($self,$type); + + # Clean the raw IP + if (!$self->_clean_ip()) { + return undef; + } + + return $self; +} + + +# Clone an object +sub copy +{ + my $self = shift; + my %params = @_; + + my $clone = bless({ + 'ip_version' => $self->{'ip_version'}, + 'ip' => $self->{'ip'}, + 'cidr' => defined($params{'cidr'}) ? $params{'cidr'} : $self->{'cidr'} + }, ref($self)); + + return $clone; +} + + +# Convert to binary +sub to_bin +{ + my $self = shift; + + # We already have it in bin + return $self->{'ip_bin'} if ($self->{'ip_bin'}); + + # Check how to convert to bin + if ($self->{'ip_version'} == 6) { + my $cleanIP = $self->{'ip'}; + $cleanIP =~ s/://g; + $self->{'ip_bin'} = unpack('B128', pack('H32', $cleanIP)); + + } elsif ($self->{'ip_version'} == 4) { + $self->{'ip_bin'} = unpack('B32', pack('C4C4C4C4', split(/\./, $self->{'ip'}))); + } + + return $self->{'ip_bin'}; +} + + +# Convert to string +sub to_str +{ + my ($self,$bin) = @_; + + + # We can only add the cidr suffix if we are working on $self + my $suffix = ""; + + # Allow us to use a parameter as the bin to convert aswell, if none provided, use self + if (!defined($bin)) { + $bin = $self->to_bin(); + $suffix = "/".$self->{'cidr'}; + } + + # Convert to string format + my $resIP; + if (length($bin) == 32) { + $resIP = join '.', unpack('C4C4C4C4', pack('B32', $bin)); + } elsif (length($bin) == 128) { + $resIP = join(':', unpack('H4H4H4H4H4H4H4H4', pack('B128', $bin))); + } + + return $resIP.$suffix; +} + + +# Convert address to Math::BigInt +sub to_int +{ + my $self = shift; + + # $n is the increment (the numerical value of the bit we about to 'set') + my $n = Math::BigInt->new(1); + # $ret is the returned value + my $ret = Math::BigInt->new(0); + + # Reverse the bit string + foreach my $bit (reverse(split '', $self->to_bin())) { + # If the nth bit is 1, add 2**n to $ret + if ($bit) { + $ret += $n; + } + # Next bit value... + $n *= 2; + } + + return $ret; +} + + +# Get the network address +sub to_network +{ + my $self = shift; + + + if (!defined($self->{'network_bin'})) { + $self->_calc_ranges(); + } + + $self->{'ip'} = $self->to_str($self->{'network_bin'}); + $self->{'ip_bin'} = undef; + + return $self; +} + + +# Get the broadcast address +sub to_broadcast +{ + my $self = shift; + + + if (!defined($self->{'broadcast_bin'})) { + $self->_calc_ranges(); + } + + $self->{'ip'} = $self->to_str($self->{'broadcast_bin'}); + $self->{'ip_bin'} = undef; + + return $self; +} + + +# Check if ip address is inside another ip address range +sub is_within +{ + my ($self,$test) = @_; + + # We can only compare IPs of same type + if ($self->{'ip_version'} != $test->{'ip_version'}) { + return 0; + } + + my $network = $test->copy()->to_network()->to_int(); + my $broadcast = $test->copy()->to_broadcast()->to_int(); + + my $self_int = $self->to_int(); + + if ($self_int >= $network && $self_int <= $broadcast) { + return 1; + } + + return 0; +} + + +# Check for a valid ipv6/ipv4 address +sub is_valid +{ + my $ip = shift; + + + # Check if defined + if (!defined($ip)) { + return 0; + } + + # Check for valid IPv4 address + if ($ip =~ /^(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3}))?)?)?(?:\/(\d{1,2}))?$/) { + + # Check octets are within limits + foreach ($1,$2,$3,$4) { + if (defined($_)) { + if ($_ > 255 || $_ < 0) { + return 0; + } + } + } + + # Check bitmask is within limits + if (defined($5)) { + if ($5 > 32 || $5 < 1) { + return 0; + } + } + + # Check for valid IPv6 address + } elsif ($ip =~ /:/) { + + # Pull off and check bitmask + if ($ip =~ s/\/(\d{1,3})$//g) { + if ($1 > 128 || $1 < 1) { + return 0; + } + } + + # Check for illegal characters + if (!($ip =~ /^[a-f\d:]+$/i)) { + return 0; + } + + # Does the IP address have more than one '::' pattern ? + my $count = 0; + while ($ip =~ /::/g) { + $count++; + } + if ($count > 1) { + return 0; + } + + # Count octets + my $n = ($ip =~ tr/:/:/); + if (!($n > 0 and $n < 8)) { + return 0; + } + + # Check octets + foreach (split /:/, $ip) { + + # Empty octet ? + next if ($_ eq ''); + + # Normal v6 octet ? + next if (/^[a-f\d]{1,4}$/i); + + return 0; + } + + # Do not recognise + } else { + return 0; + } + + + return 1; +} + + +# Check the IP address and format accordingly +sub _clean_ip +{ + my $self = shift; + + if ($self->{'ip_version'} == 4) { + + # Pull off mask + my $mask; + if ($self->{'raw_ip'} =~ s/\/(\d{1,2})$//g) { + $mask = defined($1) ? $1 : undef; + } + + # Check for invalid chars + if (!($self->{'raw_ip'} =~ m/^[\d\.]+$/)) { + setError("IPv4 address '".$self->{'raw_ip'}."' contains invalid characters"); + return 0; + } + + # Check for leading . + if ($self->{'raw_ip'} =~ m/^\./) { + setError("IPv4 address '".$self->{'raw_ip'}."' begins with '.'"); + return 0; + } + + # Check for trailing . + if ($self->{'raw_ip'} =~ m/\.$/) { + setError("IPv4 address '".$self->{'raw_ip'}."' ends with '.'"); + return 0; + } + + # Expand address + if ($self->{'raw_ip'} =~ /^(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3}))?)?)?$/) { + + # Strip ip components from string + my ($a,$b,$c,$d) = ($1,$2,$3,$4); + + # Check for invalid octets + foreach my $octet ($a,$b,$c,$d) { + if (defined($octet) && $octet > 255) { + setError("IPv4 address '".$self->{'raw_ip'}."' contains octets which exceed 255"); + return 0; + } + } + + # Set undefined octets and mask if missing + if (!defined($b)) { + $b = 0; + $mask = 8 if !defined($mask); + } + if (!defined($c)) { + $c = 0; + $mask = 16 if !defined($mask); + } + if (!defined($d)) { + $d = 0; + $mask = 24 if !defined($mask); + } + + # Default mask + $mask = ( defined($mask) && $mask >= 0 && $mask <= 32 ) ? $mask : 32; + $self->{'cidr'} = $mask; + + # Build ip + $self->{'ip'} = "$a.$b.$c.$d"; + + # Check for full ipv4 + if (!($self->{'ip'} =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)) { + setError("IPv4 address '".$self->{'ip'}."' is not a full ipv4 address"); + return 0; + } + } else { + setError("IP address '".$self->{'raw_ip'}."' is not a supported format"); + return 0; + } + + } elsif ($self->{'ip_version'} == 6) { + + # Pull off mask + my $mask; + if ($self->{'raw_ip'} =~ s/\/(\d{1,3})$//g) { + $mask = defined($1) ? $1 : undef; + } + + # Count octets + my $n = ($self->{'raw_ip'} =~ tr/:/:/); + if (!($n > 0 and $n < 8)) { + setError("Address '".$self->{'ip'}."' is not a valid IPv6 address"); + return 0; + } + + # Number of specified octets + my $numOctets = 0; + # Number of octets specified on the left hand side + my $preOctets = 0; + + # Check octets + my $foundEmpty = 0; + foreach my $octet (split /:/, $self->{'raw_ip'}) { + + # Empty octet? + if ($octet eq '') { + $foundEmpty = 1; + next; + } + # If we not found an empty octet, we have one more octet on the left hand side (pre) + if (!$foundEmpty) { + $preOctets++; + } + + $numOctets++; + + # Normal v6 octet? + if ($octet =~ /^[a-f\d]{1,4}$/i) { + next; + } + + setError("IPv6 address component '$octet' is invalid"); + return 0; + } + + # Does the IP address have more than one '::' pattern ? + my $count = 0; + while ($self->{'raw_ip'} =~ /::/g) { + $count++; + } + if ($count > 1) { + setError("IPv6 address '".$self->{'raw_ip'}."' contains more than one ::"); + return 0; + } + + # Expand address + my $tempIP = $self->{'raw_ip'}; + if ($numOctets < 8) { + + # If there is no :: return 0 + if (!$self->{'raw_ip'} =~ /::/) { + setError("IPv6 address '".$self->{'raw_ip'}."' has missing components"); + return 0; + } + + # Set mask + if (!defined($mask) && $numOctets == $preOctets) { + $mask = 16 * $preOctets; + } + + my @missingOctets; + for (my $i = 0; $i < (8 - $numOctets); $i++) { + push(@missingOctets, '0000'); + } + my $octets = join(':', @missingOctets); + + # Replace :: + $tempIP =~ s/::/:$octets:/g; + + # Remove trailing and leading : + $tempIP =~ s/^://; + $tempIP =~ s/:$//; + } + + # Check for and add leading 0s + my @fullipv6; + foreach my $octet (split(':',$tempIP)) { + if ($octet =~ /^[a-f\d]{1}$/) { + $octet = '000'.$octet; + } + if ($octet =~ /^[a-f\d]{2}$/) { + $octet = '00'.$octet; + } + if ($octet =~ /^[a-f\d]{3}$/) { + $octet = '0'.$octet; + } + push(@fullipv6, $octet); + } + $self->{'ip'} = join(':', @fullipv6); + + # Check for full ipv6 + if (!($self->{'ip'} =~ /^[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}:[a-f\d]{4}$/i)) { + setError("IPv6 address '".$self->{'raw_ip'}."' is not a valid IPv6 address"); + return 0; + } + + # Default mask + $self->{'cidr'} = defined($mask) ? $mask : 128; + } + + return 1; +} + + +# Calculate network_bin and broadcast_bin +sub _calc_ranges +{ + my $self = shift; + + + # Grab CIDR + my $cidr = $self->{'cidr'}; + + # Grab length of this address, we don't care if its v4 or v6 + my $bitlen = length($self->to_bin); + + # Create the masks + my $NETWORK_MASK = '1' x $cidr . '0' x ($bitlen - $cidr); + my $BROADCAST_MASK = '0' x $cidr . '1' x ($bitlen - $cidr); + + # network_bin = remove bits (AND) + # broadcast_bin = add bits (OR) + my $bin = $self->to_bin(); + $self->{'network_bin'} = ''; + $self->{'broadcast_bin'} = ''; + # Loop with all bits + for (my $i = 0; $i < $bitlen; $i++) { + # Cut off the bits + my $a = substr($bin,$i,1); + my $b = substr($NETWORK_MASK,$i,1); + my $c = substr($BROADCAST_MASK,$i,1); + # Bit arithmatic ! , sneaky but quick + $self->{'network_bin'} .= ($a + $b == 2) ? 1 : 0; + $self->{'broadcast_bin'} .= ($a + $c > 0) ? 1 : 0; + } +} + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/awitpt/doxygen/Doxyfile b/ehcp/fixes/policyd/awitpt/doxygen/Doxyfile new file mode 100644 index 0000000..7b03a96 --- /dev/null +++ b/ehcp/fixes/policyd/awitpt/doxygen/Doxyfile @@ -0,0 +1,1473 @@ +# Doxyfile 1.5.7.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "AWITPT API" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.0.0 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = YES + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../awitpt + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.pm + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = doxygenfilter + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Namespace. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Virtual Folders. + +QHP_VIRTUAL_FOLDER = doc + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file . + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/ehcp/fixes/policyd/cbp/config.pm b/ehcp/fixes/policyd/cbp/config.pm new file mode 100644 index 0000000..a1c330b --- /dev/null +++ b/ehcp/fixes/policyd/cbp/config.pm @@ -0,0 +1,72 @@ +# Globals for server +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2005-2007 Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + + +package cbp::config; + +use strict; + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT); +@ISA = qw(Exporter); +@EXPORT = qw( +); + +# Our vars +my $config; + + + +# Initialize configuration +sub Init +{ + my $server = shift; + + + # Setup configuration + $config = $server->{'inifile'}; + + my $db; + $db->{'DSN'} = $config->{'database'}{'dsn'}; + $db->{'Username'} = $config->{'database'}{'username'}; + $db->{'Password'} = $config->{'database'}{'password'}; + $db->{'TablePrefix'} = $config->{'database'}{'table_prefix'}; + + # Check we have all the config we need + if (!defined($db->{'DSN'})) { + $server->log(1,"server/config: No 'DSN' defined in config file for 'database'"); + exit 1; + } + + $server->{'cbp'}{'database'} = $db; +} + + +# Return config hash +sub getConfig +{ + return $config; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/logging.pm b/ehcp/fixes/policyd/cbp/logging.pm new file mode 100644 index 0000000..7ca95eb --- /dev/null +++ b/ehcp/fixes/policyd/cbp/logging.pm @@ -0,0 +1,52 @@ +# Logging constants +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2005-2007 Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::logging; + +use strict; +use warnings; + + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( + LOG_ERR + LOG_WARN + LOG_NOTICE + LOG_INFO + LOG_DEBUG +); +@EXPORT_OK = qw( +); + + +use constant { + LOG_ERR => 0, + LOG_WARN => 1, + LOG_NOTICE => 2, + LOG_INFO => 3, + LOG_DEBUG => 4 +}; + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/AccessControl.pm b/ehcp/fixes/policyd/cbp/modules/AccessControl.pm new file mode 100644 index 0000000..530378b --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/AccessControl.pm @@ -0,0 +1,198 @@ +# Access control module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::AccessControl; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Access Control Plugin", + priority => 90, + init => \&init, + request_process => \&check, +}; + + +# Module configuration +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'accesscontrol'})) { + foreach my $key (keys %{$inifile->{'accesscontrol'}}) { + $config{$key} = $inifile->{'accesscontrol'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => AccessControl: enabled"); + $config{'enable'} = 1; + } else { + $server->log(LOG_NOTICE," => AccessControl: disabled"); + } +} + + +# Check the request +sub check { + my ($server,$sessionData) = @_; + + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'}) || $sessionData->{'ProtocolState'} ne "RCPT"); + + # Check if we have any policies matched, if not just pass + return CBP_SKIP if (!defined($sessionData->{'Policy'})); + + # Result + my $res; + + # Loop with priorities, low to high + foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Loop with policies + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + my $sth = DBSelect(' + SELECT + Verdict, Data + FROM + @TP@access_control + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Verdict Data )); + DBFreeRes($sth); + + # If no result, next + next if (!$row); + + # Setup result + if (!defined($row->{'Verdict'})) { + $server->maillog("module=AccessControl, action=none, host=%s, helo=%s, from=%s, to=%s, reason=no_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + next; # No verdict + + } elsif ($row->{'Verdict'} =~ /^hold$/i) { + $server->maillog("module=AccessControl, action=hold, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_HOLD,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^reject$/i) { + $server->maillog("module=AccessControl, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_REJECT,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^discard$/i) { + $server->maillog("module=AccessControl, action=discard, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_DISCARD,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^filter$/i) { + $server->maillog("module=AccessControl, action=filter, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_FILTER,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^redirect$/i) { + $server->maillog("module=AccessControl, action=redirect, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_REDIRECT,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^ok$/i) { + $server->maillog("module=AccessControl, action=ok, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_OK,$row->{'Data'}); + + } elsif ($row->{'Verdict'} =~ /^pass$/i) { + $server->maillog("module=AccessControl, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_PASS,$row->{'Data'}); + + } else { + $server->log(LOG_ERR,"[ACCESSCONTROL] Unknown Verdict specification in access control '".$row->{'Verdict'}."'"); + $server->maillog("module=AccessControl, action=none, host=%s, helo=%s, from=%s, to=%s, reason=invalid_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'_policy'}}) + + return CBP_CONTINUE; +} + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/Accounting.pm b/ehcp/fixes/policyd/cbp/modules/Accounting.pm new file mode 100644 index 0000000..cad79a7 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/Accounting.pm @@ -0,0 +1,818 @@ +# Accounting module +# Copyright (C) 2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::Accounting; + +use strict; +use warnings; + +use POSIX qw( ceil strftime ); + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::system; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Accounting Plugin", + priority => 10, + init => \&init, + request_process => \&check, +# cleanup => \&cleanup, +}; + + +# Module configuration +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'accounting'})) { + foreach my $key (keys %{$inifile->{'accounting'}}) { + $config{$key} = $inifile->{'accounting'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Accounting: enabled"); + $config{'enable'} = 1; + # Enable tracking, we need this to recipients for the message in END-OF-DATA + $server->{'config'}{'track_sessions'} = 1; + } else { + $server->log(LOG_NOTICE," => Accounting: disabled"); + } +} + + + + +# Do our checks +sub check { + my ($server,$sessionData) = @_; + + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT and EOM state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'})); + + # Check valid state & that we have our policy data + return CBP_SKIP if (! + ( + ($sessionData->{'ProtocolState'} eq "RCPT" && defined($sessionData->{'Policy'})) || + ($sessionData->{'ProtocolState'} eq "END-OF-MESSAGE" && defined($sessionData->{'_Recipient_To_Policy'})) + ) + ); + + # Our verdict and data + my ($verdict,$verdict_data); + + my $now = time(); + + + # + # RCPT state + # If we in this state we increase the RCPT counters for each key we have + # we only do this if we not going to reject the message. We also check if + # we have exceeded our size limit. The Size limit is updated in the EOM + # stage + # + if ($sessionData->{'ProtocolState'} eq "RCPT") { + + # Key tracking list, if hasExceeded is not undef, it will contain the msg + my %newCounters; # Indexed by AccountingID + my @trackingList; + my $hasExceeded; + my $exceededAtrack; + + # Loop with priorities, low to high +POLICY: foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Last if we've exceeded + last if ($hasExceeded); + + + # Loop with each policyID + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + # Last if we've exceeded + last if ($hasExceeded); + + # Get accounting records + my $accountings = getAccountings($server,$policyID); + # Check if we got a accountings or not + if (ref($accountings) ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with accounting records + foreach my $accounting (@{$accountings}) { + + # Last if we've exceeded + last if ($hasExceeded); + + # Grab tracking key + my $trackKey = getTrackKey($server,$accounting,$sessionData); + if (!defined($trackKey)) { + $server->log(LOG_ERR,"[ACCOUNTING] No tracking key found for accounting ID '".$accounting->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Grab period key + my $periodKey = getPeriodKey($accounting->{'AccountingPeriod'}); + if (!defined($periodKey)) { + $server->log(LOG_ERR,"[ACCOUNTING] No period key found for accounting ID '".$accounting->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Get quota tracking info + my $atrack = getTrackingInfo($server,$accounting->{'ID'},$trackKey,$periodKey); + # Check if we got tracking info or not + if (defined($atrack) && ref($atrack) ne "HASH") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Check if we have a queue tracking item + if (defined($atrack)) { + # Make sure we have initialized the counters + if (!defined($newCounters{$atrack->{'AccountingID'}})) { + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'} = 0; + $newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'} = 0; + } + + # Check for violation + if (defined($accounting->{'MessageCountLimit'}) && $accounting->{'MessageCountLimit'} ne "") { + # If its a valid message count limit + if ($accounting->{'MessageCountLimit'} =~ /^[0-9]+$/) { + # Check if we exceeded + if ($accounting->{'MessageCountLimit'} > 0 && ( + # Check current counter + $atrack->{'MessageCount'} >= $accounting->{'MessageCountLimit'} + )) { + $hasExceeded = "Policy rejection; Message count exceeded"; + } + } else { + $server->log(LOG_ERR,"[ACCOUNTING] The value for MessageCountLimit is invalid for accounting ID '".$accounting->{'ID'}."'"); + } + } + + # If we've not exceeded, check the message cumulative size + if (!$hasExceeded) { + # Bump up count + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'}++; + + # Check for cumulative size violation + if (defined($accounting->{'MessageCumulativeSizeLimit'}) && + $accounting->{'MessageCumulativeSizeLimit'} ne "") { + # If its a valid message count limit + if ($accounting->{'MessageCumulativeSizeLimit'} =~ /^[0-9]+$/) { + if ($accounting->{'MessageCumulativeSizeLimit'} > 0 && + $atrack->{'MessageCumulativeSize'} > $accounting->{'MessageCumulativeSizeLimit'}) { + $hasExceeded = "Policy rejection; Cumulative message size exceeded"; + } + } else { + $server->log(LOG_ERR,"[ACCOUNTING] The value for MessageCumulativeSizeLimit is invalid for accounting ID '".$accounting->{'ID'}."'"); + } + } + } + + } else { + $atrack->{'AccountingID'} = $accounting->{'ID'}; + $atrack->{'TrackKey'} = $trackKey; + $atrack->{'PeriodKey'} = $periodKey; + $atrack->{'MessageCount'} = 0; + $atrack->{'MessageCumulativeSize'} = 0; + + # Make sure we have initialized the counters + if (!defined($newCounters{$atrack->{'AccountingID'}})) { + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'} = $atrack->{'MessageCount'}; + $newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'} = $atrack->{'MessageCumulativeSize'}; + } + + # Bump up limit + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'}++; + } + + # Setup some stuff we need for logging + $atrack->{'DBTrackKey'} = $trackKey; + $atrack->{'DBPeriodKey'} = $periodKey; + $atrack->{'MessageCountLimit'} = $accounting->{'MessageCountLimit'}; + $atrack->{'MessageCumulativeSizeLimit'} = $accounting->{'MessageCumulativeSizeLimit'}; + $atrack->{'PolicyID'} = $policyID; + $atrack->{'Verdict'} = $accounting->{'Verdict'}; + $atrack->{'VerdictData'} = $accounting->{'Data'}; + + # If we've exceeded setup the atrack which was exceeded + if ($hasExceeded) { + $exceededAtrack = $atrack; + } + + # Save accounting tracking info + push(@trackingList,$atrack); + + # Check if this is the last accounting + if (defined($accounting->{'LastAccounting'}) && $accounting->{'LastAccounting'} eq "1") { + last POLICY; + } + } # foreach my $accounting (@{$accountings}) + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) + + # If we have not exceeded, update + if (!$hasExceeded) { + + # Loop with tracking ID's and update + foreach my $atrack (@trackingList) { + # Percent used + my $pCountUsage = "/-"; + my $pCumulativeSizeUsage = "/-"; + # If we have additional limits, add to the usage string + if (defined($atrack->{'MessageCountLimit'}) && $atrack->{'MessageCountLimit'} > 0) { + $pCountUsage = $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'} + $atrack->{'MessageCount'}; + $pCountUsage .= sprintf('/%s (%.1f%%)', + $atrack->{'MessageCountLimit'}, + ( ($newCounters{$atrack->{'AccountingID'}}->{'MessageCount'} + $atrack->{'MessageCount'}) / + $atrack->{'MessageCountLimit'} ) * 100 + ); + } + if (defined($atrack->{'MessageCumulativeSizeLimit'}) && $atrack->{'MessageCumulativeSizeLimit'} > 0) { + $pCumulativeSizeUsage = $newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'} + $atrack->{'MessageCumulativeSize'}; + $pCumulativeSizeUsage .= sprintf('/%s (%.1f%%)', + $atrack->{'MessageCumulativeSizeLimit'}, + ( ($newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'} + $atrack->{'MessageCumulativeSize'}) / + $atrack->{'MessageCumulativeSizeLimit'} ) * 100 + ); + } + + # Update database + my $sth = DBDo(' + UPDATE + @TP@accounting_tracking + SET + MessageCount = MessageCount + ?, + MessageCumulativeSize = MessageCumulativeSize + ?, + LastUpdate = ? + WHERE + AccountingID = ? + AND TrackKey = ? + AND PeriodKey = ? + ', + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'},$newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'}, + $now,$atrack->{'AccountingID'},$atrack->{'TrackKey'},$atrack->{'PeriodKey'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[ACCOUNTING] Failed to update accounting_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # If nothing updated, then insert our record + if ($sth eq "0E0") { + # Insert into database + my $sth = DBDo(' + INSERT INTO @TP@accounting_tracking + (AccountingID,TrackKey,PeriodKey,MessageCount,MessageCumulativeSize,LastUpdate) + VALUES + (?,?,?,?,?,?) + ', + $atrack->{'AccountingID'},$atrack->{'TrackKey'},$atrack->{'PeriodKey'}, + $newCounters{$atrack->{'AccountingID'}}->{'MessageCount'}, + $newCounters{$atrack->{'AccountingID'}}->{'MessageCumulativeSize'}, + $atrack->{'LastUpdate'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[ACCOUNTING] Failed to insert accounting_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Log create to mail log + $server->maillog("module=Accounting, mode=create, host=%s, helo=%s, from=%s, to=%s, reason=accounting_create, policy=%s, accounting=%s, " + ."track=%s, period=%s, count=%s, size=%s", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $atrack->{'PolicyID'}, + $atrack->{'AccountingID'}, + $atrack->{'DBTrackKey'}, + $atrack->{'DBPeriodKey'}, + $pCountUsage, + $pCumulativeSizeUsage); + + + # If we updated ... + } else { + # Log update to mail log + $server->maillog("module=Accounting, mode=update, host=%s, helo=%s, from=%s, to=%s, reason=accounting_update, policy=%s, accounting=%s, " + ."track=%s, period=%s, count=%s, size=%s", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $atrack->{'PolicyID'}, + $atrack->{'AccountingID'}, + $atrack->{'DBTrackKey'}, + $atrack->{'DBPeriodKey'}, + $pCountUsage, + $pCumulativeSizeUsage); + } + + + # Remove limit + delete($newCounters{$atrack->{'AccountingID'}}); + } + + # If we have exceeded, set verdict + } else { + # Percent used + my $pCountUsage = $newCounters{$exceededAtrack->{'AccountingID'}}->{'MessageCount'} + $exceededAtrack->{'MessageCount'}; + my $pCumulativeSizeUsage = $newCounters{$exceededAtrack->{'AccountingID'}}->{'MessageCumulativeSize'} + + $exceededAtrack->{'MessageCumulativeSize'}; + # If we have additional limits, add to the usage string + if (defined($exceededAtrack->{'MessageCountLimit'}) && $exceededAtrack->{'MessageCountLimit'} > 0) { + $pCountUsage .= sprintf('/%s (%.1f%%)', + $exceededAtrack->{'MessageCountLimit'}, + ( ($newCounters{$exceededAtrack->{'AccountingID'}}->{'MessageCount'} + + $exceededAtrack->{'MessageCount'}) / $exceededAtrack->{'MessageCountLimit'} ) * 100 + ); + } else { + $pCountUsage .= "/-"; + } + if (defined($exceededAtrack->{'MessageCumulativeSizeLimit'}) && $exceededAtrack->{'MessageCumulativeSizeLimit'} > 0) { + $pCumulativeSizeUsage .= sprintf('/%s (%.1f%%)', + $exceededAtrack->{'MessageCumulativeSizeLimit'}, + ( ($newCounters{$exceededAtrack->{'AccountingID'}}->{'MessageCumulativeSize'} + + $exceededAtrack->{'MessageCumulativeSize'}) / $exceededAtrack->{'MessageCumulativeSizeLimit'} ) * 100 + ); + } else { + $pCumulativeSizeUsage .= "/-"; + } + + # Log rejection to mail log + $server->maillog("module=Accounting, action=%s, host=%s, helo=%s, from=%s, to=%s, reason=accounting_match, policy=%s, accounting=%s, " + ."track=%s, period=%s, count=%s, size=%s", + lc($exceededAtrack->{'Verdict'}), + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $exceededAtrack->{'PolicyID'}, + $exceededAtrack->{'AccountingID'}, + $exceededAtrack->{'DBTrackKey'}, + $exceededAtrack->{'DBPeriodKey'}, + $pCountUsage, + $pCumulativeSizeUsage); + + $verdict = $exceededAtrack->{'Verdict'}; + $verdict_data = (defined($exceededAtrack->{'VerdictData'}) && $exceededAtrack->{'VerdictData'} ne "") + ? $exceededAtrack->{'VerdictData'} : $hasExceeded; + } + + # + # END-OF-MESSAGE state + # The Size accounting is updated in this state + # + } elsif ($sessionData->{'ProtocolState'} eq "END-OF-MESSAGE") { + + # Check if we have recipient to policy mappings + if (!defined($sessionData->{'_Recipient_To_Policy'})) { + return CBP_SKIP; + } + + # Loop with email addies + foreach my $emailAddy (keys %{$sessionData->{'_Recipient_To_Policy'}}) { + + # Loop with priorities, low to high +POLICY: foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}}) { + + # Loop with each policyID + foreach my $policyID (@{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}{$priority}}) { + + # Get accounting records + my $accountings = getAccountings($server,$policyID); + # Check if we got a accountings or not + if (ref($accountings) ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with accountings + foreach my $accounting (@{$accountings}) { + + # HACK: Fool getTrackKey into thinking we actually do have a recipient + $sessionData->{'Recipient'} = $emailAddy; + + # Grab tracking keys + my $trackKey = getTrackKey($server,$accounting,$sessionData); + if (!defined($trackKey)) { + $server->log(LOG_WARN,"[ACCOUNTING] No key found for accounting ID '".$accounting->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Grab period key + my $periodKey = getPeriodKey($accounting->{'AccountingPeriod'}); + if (!defined($periodKey)) { + $server->log(LOG_ERR,"[ACCOUNTING] No period key found for accounting ID '".$accounting->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Get account tracking info + my $atrack = getTrackingInfo($server,$accounting->{'ID'},$trackKey,$periodKey); + # Check if we got tracking info or not + if (ref($atrack) ne "HASH") { + next; # If not just carry on? + } + + # Update database + my $sth = DBDo(' + UPDATE + @TP@accounting_tracking + SET + MessageCumulativeSize = MessageCumulativeSize + ?, + LastUpdate = ? + WHERE + AccountingID = ? + AND TrackKey = ? + AND PeriodKey = ? + ', + $sessionData->{'Size'},$now,$atrack->{'AccountingID'},$atrack->{'TrackKey'}, + $atrack->{'PeriodKey'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[ACCOUNTING] Failed to update accounting_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Percent used + my $pCountUsage = $atrack->{'MessageCount'}; + my $pCumulativeSizeUsage = $atrack->{'MessageCumulativeSize'}; + # If we have additional limits, add to the usage string + if (defined($accounting->{'MessageCountLimit'}) && $accounting->{'MessageCountLimit'} > 0) { + $pCountUsage .= sprintf('/%s (%.1f%%)', + $accounting->{'MessageCountLimit'}, + ( $atrack->{'MessageCount'} / $accounting->{'MessageCountLimit'} ) * 100 + ); + } else { + $pCountUsage .= "/-"; + } + if (defined($accounting->{'MessageCumulativeSizeLimit'}) && $accounting->{'MessageCumulativeSizeLimit'} > 0) { + $pCumulativeSizeUsage .= sprintf('/%s (%.1f%%)', + $accounting->{'MessageCumulativeSizeLimit'}, + ( $atrack->{'MessageCumulativeSize'} / + $accounting->{'MessageCumulativeSizeLimit'} ) * 100 + ); + } else { + $pCumulativeSizeUsage .= "/-"; + } + + # Log update to mail log + $server->maillog("module=Accounting, mode=update, host=%s, helo=%s, from=%s, to=%s, reason=accounting_update, policy=%s, accounting=%s, " + ."track=%s, period=%s, count=%s, size=%s", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $emailAddy, + $policyID, + $accounting->{'ID'}, + $trackKey, + $periodKey, + $pCountUsage, + $pCumulativeSizeUsage); + # Check if this is the last accounting + if (defined($accounting->{'LastAccounting'}) && $accounting->{'LastAccounting'} eq "1") { + last POLICY; + } + } # foreach my $accounting (@{$accountings}) + } # foreach my $policyID (@{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}}) + } # foreach my $emailAddy (keys %{$sessionData->{'_Recipient_To_Policy'}}) + + + } + + # Setup result + if (!defined($verdict)) { + return CBP_CONTINUE; + } elsif ($verdict eq "") { + $server->maillog("module=Accounting, action=none, host=%s, helo=%s, from=%s, to=%s, reason=no_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return CBP_CONTINUE; + } elsif ($verdict =~ /^defer$/i) { + return $server->protocol_response(PROTO_DEFER,$verdict_data); + } elsif ($verdict =~ /^hold$/i) { + return $server->protocol_response(PROTO_HOLD,$verdict_data); + } elsif ($verdict =~ /^reject$/i) { + return $server->protocol_response(PROTO_REJECT,$verdict_data); + } elsif ($verdict =~ /^discard$/i) { + return $server->protocol_response(PROTO_DISCARD,$verdict_data); + } elsif ($verdict =~ /^filter$/i) { + return $server->protocol_response(PROTO_FILTER,$verdict_data); + } elsif ($verdict =~ /^redirect$/i) { + return $server->protocol_response(PROTO_REDIRECT,$verdict_data); + } else { + $server->log(LOG_ERR,"[ACCOUNTING] Unknown Verdict specification in access control '$verdict'"); + $server->maillog("module=Accounting, action=none, host=%s, helo=%s, from=%s, to=%s, reason=invalid_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_DATA_ERROR); + } +} + + + +# Get key from spec and SASL username +sub getSASLUsernameKey +{ + my ($spec,$username) = @_; + + my $key; + + # Very basic, for blank SASL username, just use '-' + if (!defined($username)) { + $key = "-"; + } else { + $key = $username; + } + + return $key; +} + + + +# Get key from spec and email addy +sub getEmailKey +{ + my ($spec,$addy) = @_; + + my $key; + + + # Short-circuit <> + if ($addy eq '') { + return "@"; + } + + # We need to track the sender + if ($spec eq 'user@domain') { + $key = $addy; + + } elsif ($spec eq 'user@') { + ($key) = ( $addy =~ /^([^@]+@)/ ); + + } elsif ($spec eq '@domain') { + ($key) = ( $addy =~ /^(?:[^@]+)(@.*)/ ); + } + + return $key; +} + + + +# Get accounting records from policyID +sub getAccountings +{ + my ($server,$policyID) = @_; + + + my @res; + + # Grab quota data + my $sth = DBSelect(' + SELECT + ID, + Track, + AccountingPeriod, + MessageCountLimit, + MessageCumulativeSizeLimit, + Verdict, + Data, + LastAccounting + FROM + @TP@accounting + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"Failed to get accounting data: ".awitpt::db::dblayer::Error()); + return -1; + } + while (my $quota = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( ID Track AccountingPeriod MessageCountLimit MessageCumulativeSizeLimit Verdict Data LastAccounting ) + )) { + + push(@res, $quota); + } + + return \@res; +} + + + +# Get key from session +sub getTrackKey +{ + my ($server,$accounting,$sessionData) = @_; + + + my $res; + + # Split off method and splec + my ($method,$spec) = ($accounting->{'Track'} =~ /^([^:]+)(?::(\S+))?/); + + # Lowercase method & spec + $method = lc($method); + $spec = lc($spec) if (defined($spec)); + + # Track entire policy + if ($method eq "policy") { + $res = "Policy"; + + # Check TrackSenderIP + } elsif ($method eq "senderip") { + my $key = getIPKey($spec,$sessionData->{'_ClientAddress'}); + + # Check for no key + if (defined($key)) { + $res = "SenderIP:$key"; + } else { + $server->log(LOG_WARN,"[ACCOUNTING] Unknown key specification in TrackSenderIP"); + } + + + # Check TrackSender + } elsif ($method eq "sender") { + # Check if the sender is blank (<>), it makes no sense at present to work out how its tracked, <> is <> + my $key; + if ($sessionData->{'Sender'} ne "") { + $key = getEmailKey($spec,$sessionData->{'Sender'}); + } else { + $key = "<>"; + } + + # Check for no key + if (defined($key)) { + $res = "Sender:$key"; + } else { + $server->log(LOG_WARN,"[ACCOUNTING] Unknown key specification in TrackSender"); + } + + + # Check TrackSASLUsername + } elsif ($method eq "saslusername") { + my $key = getSASLUsernameKey($spec,$sessionData->{'SASLUsername'}); + + # Check for no key + if (defined($key)) { + $res = "SASLUsername:$key"; + } else { + $server->log(LOG_WARN,"[ACCOUNTING] Unknown key specification in TrackSASLUsername"); + } + + # Check TrackRecipient + } elsif ($method eq "recipient") { + my $key = getEmailKey($spec,$sessionData->{'Recipient'}); + + # Check for no key + if (defined($key)) { + $res = "Recipient:$key"; + } else { + $server->log(LOG_WARN,"[ACCOUNTING] Unknown key specification in TrackRecipient"); + } + + # Fall-through to catch invalid specs + } else { + $server->log(LOG_WARN,"[ACCOUNTING] Invalid tracking specification '".$accounting->{'Track'}."'"); + } + + + return $res; +} + + + +# Get period key +sub getPeriodKey +{ + my $period = shift; + + + my $key; + + # Pull timestamp + my @timestamp = localtime(); + + # Track per day + if ($period eq "0") { + $key = strftime("%Y-%m-%d",@timestamp); + + # Track per week + } elsif ($period eq "1") { + $key = strftime("%Y/%V",@timestamp); + + # Track per month + } elsif ($period eq "2") { + $key = strftime("%Y-%m",@timestamp); + } + + return $key; +} + + + +# Get tracking info +sub getTrackingInfo +{ + my ($server,$accountID,$trackKey,$periodKey) = @_; + + + # Query accounting info + my $sth = DBSelect(' + SELECT + AccountingID, + TrackKey, PeriodKey, + MessageCount, MessageCumulativeSize + FROM + @TP@accounting_tracking + WHERE + AccountingID = ? + AND TrackKey = ? + AND PeriodKey = ? + ', + $accountID,$trackKey,$periodKey + ); + if (!$sth) { + $server->log(LOG_ERR,"[ACCOUNTING] Failed to query accounting_tracking: ".awitpt::db::dblayer::Error()); + return -1; + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( AccountingID TrackKey PeriodKey MessageCount MessageCumulativeSize ) + ); + DBFreeRes($sth); + + return $row; +} + + + +## Cleanup function +#sub cleanup +#{ +# my ($server) = @_; +# +# # Get 30-days ago time +# my $lastMonth = time() - 2592000; +# +# # Remove old tracking info from database +# my $sth = DBDo(' +# DELETE FROM +# @TP@accounting_tracking +# WHERE +# LastUpdate < ? +# ', +# $lastMonth +# ); +# if (!$sth) { +# $server->log(LOG_ERR,"[ACCOUNTING] Failed to remove old accounting tracking records: ".awitpt::db::dblayer::Error()); +# } +# $server->log(LOG_INFO,"[ACCOUNTING] Removed ".( $sth ne "0E0" ? $sth : 0).." records from tracking table"); +#} + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/Amavis.pm b/ehcp/fixes/policyd/cbp/modules/Amavis.pm new file mode 100644 index 0000000..0622dd0 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/Amavis.pm @@ -0,0 +1,73 @@ +# Amavis module +# Copyright (C) 2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::Amavis; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::system; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Amavis Plugin", + priority => 50, + init => \&init +}; + + +# Module configuration +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'amavis'})) { + foreach my $key (keys %{$inifile->{'amavis'}}) { + $config{$key} = $inifile->{'amavis'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Amavis: enabled"); + $config{'enable'} = 1; + # Enable tracking, we need this to pass data to the amavis plugin + $server->{'config'}{'track_sessions'} = 1; + } else { + $server->log(LOG_NOTICE," => Amavis: disabled"); + } +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/CheckHelo.pm b/ehcp/fixes/policyd/cbp/modules/CheckHelo.pm new file mode 100644 index 0000000..6feb8eb --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/CheckHelo.pm @@ -0,0 +1,726 @@ +# Helo checking module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::CheckHelo; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::cache; +use awitpt::db::dblayer; +use cbp::protocols; +use cbp::system; + +use Net::DNS::Resolver; + + +# User plugin info +our $pluginInfo = { + name => "HELO/EHLO Check Plugin", + priority => 80, + init => \&init, + request_process => \&check, + cleanup => \&cleanup, +}; + + +# Our config +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'checkhelo'})) { + foreach my $key (keys %{$inifile->{'checkhelo'}}) { + $config{$key} = $inifile->{'checkhelo'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => CheckHelo: enabled"); + $config{'enable'} = 1; + } else { + $server->log(LOG_NOTICE," => CheckHelo: disabled"); + } +} + + +# Do our check +sub check { + my ($server,$sessionData) = @_; + my $log = defined($server->{'config'}{'logging'}{'modules'}); + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'}) || $sessionData->{'ProtocolState'} ne "RCPT"); + + # We need a HELO... + return CBP_SKIP if (!defined($sessionData->{'Helo'}) || $sessionData->{'Helo'} eq ""); + + # Check if we have any policies matched, if not just pass + return CBP_SKIP if (!defined($sessionData->{'Policy'})); + + # Policy we're about to build + my %policy; + + # Loop with priorities, low to high + foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Loop with policies + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + my $sth = DBSelect(' + SELECT + UseBlacklist, BlacklistPeriod, + UseHRP, HRPPeriod, HRPLimit, + RejectInvalid, RejectIP, RejectUnresolvable + FROM + @TP@checkhelo + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKHELO] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( UseBlacklist BlacklistPeriod UseHRP HRPPeriod HRPLimit RejectInvalid RejectIP RejectUnresolvable ) + )) { + $policy{'Identifier'} .= ":$policyID"; + + # If defined, its to override + if (defined($row->{'UseBlacklist'})) { + $policy{'UseBlacklist'} = $row->{'UseBlacklist'}; + } + if (defined($row->{'BlacklistPeriod'})) { + $policy{'BlacklistPeriod'} = $row->{'BlacklistPeriod'}; + } + + if (defined($row->{'UseHRP'})) { + $policy{'UseHRP'} = $row->{'UseHRP'}; + } + if (defined($row->{'HRPPeriod'})) { + $policy{'HRPPeriod'} = $row->{'HRPPeriod'}; + } + if (defined($row->{'HRPLimit'})) { + $policy{'HRPLimit'} = $row->{'HRPLimit'}; + } + + if (defined($row->{'RejectInvalid'})) { + $policy{'RejectInvalid'} = $row->{'RejectInvalid'}; + } + if (defined($row->{'RejectIP'})) { + $policy{'RejectIP'} = $row->{'RejectIP'}; + } + if (defined($row->{'RejectUnresolvable'})) { + $policy{'RejectUnresolvable'} = $row->{'RejectUnresolvable'}; + } + } # while (my $row = $sth->fetchrow_hashref()) + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) + + # Check if we have a policy + if (!%policy) { + return CBP_CONTINUE; + } + + # + # Insert/update HELO in database + # + my $sth = DBDo({ + 'mysql' => [' + INSERT INTO @TP@checkhelo_tracking + (Address,Helo,LastUpdate) + VALUES + (?,?,?) + ON DUPLICATE KEY + UPDATE LastUpdate = ? + ', + $sessionData->{'ClientAddress'},$sessionData->{'Helo'},$sessionData->{'UnixTimestamp'}, + $sessionData->{'UnixTimestamp'}, + ], + '*' => [' + UPDATE + @TP@checkhelo_tracking + SET + LastUpdate = ? + WHERE + Address = ? + AND Helo = ? + ', + $sessionData->{'UnixTimestamp'},$sessionData->{'ClientAddress'},$sessionData->{'Helo'} + ] + }); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKHELO] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + # If we didn't update anything, insert + if ($sth eq "0E0") { + $sth = DBDo(' + INSERT INTO @TP@checkhelo_tracking + (Address,Helo,LastUpdate) + VALUES + (?,?,?) + ', + $sessionData->{'ClientAddress'},$sessionData->{'Helo'},$sessionData->{'UnixTimestamp'} + ); + if (!$sth) { + use Data::Dumper; + $server->log(LOG_ERR,"[CHECKHELO] Database query failed: ".awitpt::db::dblayer::Error().", data: ".Dumper($sessionData)); + return $server->protocol_response(PROTO_DB_ERROR); + } + $server->log(LOG_DEBUG,"[CHECKHELO] Recorded helo '".$sessionData->{'Helo'}."' from address '".$sessionData->{'ClientAddress'}."'") if ($log); + # And just a bit of debug + } else { + $server->log(LOG_DEBUG,"[CHECKHELO] Updated timestamp for helo '".$sessionData->{'Helo'}."' from address '". + $sessionData->{'ClientAddress'}."'") if ($log); + } + + + # + # Check if we whitelisted or not... + # + + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('CheckHelo/Whitelist/IP',$sessionData->{'ClientAddress'}); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + # Check if we have a cache value and if its a match + if (defined($cache)) { + + # If cache is positive, whitelist + if ($cache) { + $server->maillog("module=CheckHelo, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=whitelisted_cached", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_PASS); + } + + } else { + my $whitelistSources = getWhitelist($server); + if (!defined($whitelistSources)) { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with whitelist and calculate + foreach my $source (@{$whitelistSources}) { + # Check format is SenderIP + if ((my $raw_waddress = $source) =~ s/^SenderIP://i) { + + # Create our IP object + my $waddress = new awitpt::netip($raw_waddress); + if (!defined($waddress)) { + $server->log(LOG_WARN,"[CHECKHELO] Skipping invalid address '$raw_waddress'."); + next; + } + # Check if IP is whitelisted + if ($sessionData->{'_ClientAddress'}->is_within($waddress)) { + # Cache positive result + my $cache_res = cacheStoreKeyPair('CheckHelo/Whitelist/IP', + $sessionData->{'ClientAddress'},1); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + # Log... + $server->maillog("module=CheckHelo, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=whitelisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_PASS); + } + # Cache negative result + my $cache_res = cacheStoreKeyPair('CheckHelo/Whitelist/IP',$sessionData->{'ClientAddress'},0); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Whitelist entry '$source' is invalid."); + return $server->protocol_response(PROTO_DATA_ERROR); + } + } + } + + + # + # Check if we need to reject invalid HELO's + # + if (defined($policy{'RejectInvalid'}) && $policy{'RejectInvalid'} eq "1") { + + # Check if helo is an IPv4 or IPv6 address + if ( + $sessionData->{'Helo'} =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ || + $sessionData->{'Helo'} =~ /^(?:::(:?[a-f\d]{1,4}:){0,6}?[a-f\d]{0,4}|[a-f\d]{1,4}(?::[a-f\d]{1,4}){0,6}?::|[a-f\d]{1,4}(?::[a-f\d]{1,4}){0,6}?::(?:[a-f\d]{1,4}:){0,6}?[a-f\d]{1,4})$/i + ) { + + # Check if we must reject IP address HELO's + if (defined($policy{'RejectIP'}) && $policy{'RejectIP'} eq "1") { + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=ip_not_allowed", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; Must be a FQDN or an address literal, not '".$sessionData->{'Helo'}."'"); + } + + # Address literal is valid + } elsif ( + $sessionData->{'Helo'} =~ /^\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]$/ || + $sessionData->{'Helo'} =~ /^\[((?:::(:?[a-f\d]{1,4}:){0,6}?[a-f\d]{0,4}|[a-f\d]{1,4}(?::[a-f\d]{1,4}){0,6}?::|[a-f\d]{1,4}(?::[a-f\d]{1,4}){0,6}?::(?:[a-f\d]{1,4}:){0,6}?[a-f\d]{1,4}))\]$/i + + ) { + # Check if helo is a FQDN - Only valid characters in a domain is alnum and a - + } elsif ($sessionData->{'Helo'} =~ /^[\w-]+(\.[\w-]+)+$/) { + + # Check if we must reject unresolvable HELO's + if (defined($policy{'RejectUnresolvable'}) && $policy{'RejectUnresolvable'} eq "1") { + my $res = Net::DNS::Resolver->new; + my $query = $res->search($sessionData->{'Helo'}); + + # If the query failed + if ($query) { + + # Look for MX or A records + my $found = 0; + foreach my $rr ($query->answer) { + next unless ($rr->type eq "A" || $rr->type eq "MX"); + $found = 1; + } + + # Check if we found any valid DNS records + if (!$found) { + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=resolve_notfound", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; No A or MX records found for '".$sessionData->{'Helo'}."'"); + } + + } else { + + # Check for error + if ($res->errorstring eq "NXDOMAIN") { + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=resolve_nxdomain", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; Cannot resolve '".$sessionData->{'Helo'}."', no such domain"); + + } elsif ($res->errorstring eq "NOERROR") { + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=resolve_noerror", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; Cannot resolve '".$sessionData->{'Helo'}."', no records found"); + + } elsif ($res->errorstring eq "SERVFAIL") { + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=resolve_servfail", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; Failure while trying to resolve '".$sessionData->{'Helo'}."'"); + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Unknown error resolving '".$sessionData->{'Helo'}."': ".$res->errorstring); + return $server->protocol_response(PROTO_ERROR); + } + } # if ($query) + } # if (defined($policy{'RejectUnresolvable'}) && $policy{'RejectUnresolvable'} eq "1") { + + # Reject blatent RFC violation + } else { # elsif ($sessionData->{'Helo'} =~ /^[\w-]+(\.[\w-]+)+$/) + return $server->protocol_response(PROTO_REJECT, + "Invalid HELO/EHLO; Must be a FQDN or an address literal, not '".$sessionData->{'Helo'}."'"); + } + } # if (defined($policy{'RejectInvalid'}) && $policy{'RejectInvalid'} eq "1") + + # Check if we must use the blacklist or not + if (defined($policy{'UseBlacklist'}) && $policy{'UseBlacklist'} eq "1") { + my $start = 0; + + # Check period for blacklisting + if (defined($policy{'BlacklistPeriod'})) { + if ($policy{'BlacklistPeriod'} > 0) { + $start = $policy{'BlacklistPeriod'}; + } + } + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('CheckHelo/Blacklist/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'}); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + # Check if we have a cache value and if its a match + if (defined($cache) && $cache) { + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=blacklisted_cached", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,"Invalid HELO/EHLO; Blacklisted"); + } else { + # Get blacklist count + my $blacklistCount = getBlacklistCount($server,$sessionData->{'ClientAddress'},$start); + if (!defined($blacklistCount)) { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # If count > 0 , then its blacklisted + if ($blacklistCount > 0) { + # Cache this + $cache_res = cacheStoreKeyPair('CheckHelo/Blacklist/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'},1); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=blacklisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,"Invalid HELO/EHLO; Blacklisted"); + } + } + } + + # Check if we must use HRP + if (defined($policy{'UseHRP'}) && $policy{'UseHRP'} eq "1") { + + # Check if HRPPeriod is defined + if (defined($policy{'HRPPeriod'})) { + + # Check if HRPPeriod is valid + if ($policy{'HRPPeriod'} > 0) { + + # Check HRPLimit is defined + if (defined($policy{'HRPLimit'})) { + + # check HRPLimit is valid + if ($policy{'HRPLimit'} > 0) { + my $start = 0; + + # Check period for blacklisting + if (defined($policy{'HRPPeriod'})) { + if ($policy{'HRPPeriod'} > 0) { + $start = $policy{'HRPPeriod'}; + } + } + + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('CheckHelo/HRP/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'}); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + # Check if we have a cache value and if its a match + if (defined($cache) && $cache) { + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=hrp_blacklisted_cached", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,"Invalid HELO/EHLO; HRP limit exceeded"); + } else { + # Get HRP count + my $hrpCount = getHRPCount($server,$sessionData->{'ClientAddress'},$start); + if (!defined($hrpCount)) { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # If count > $limit , reject + if ($hrpCount > $policy{'HRPLimit'}) { + # Cache this + $cache_res = cacheStoreKeyPair('CheckHelo/HRP/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'},1); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + $server->maillog("module=CheckHelo, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=hrp_blacklisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,"Invalid HELO/EHLO; HRP limit exceeded"); + } + } + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Resolved policy UseHRP is set, HRPPeriod is set but HRPPeriod is invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Resolved policy UseHRP is set, HRPPeriod is set but HRPLimit is not defined"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Resolved policy UseHRP is set, but HRPPeriod is invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + + } else { + $server->log(LOG_ERR,"[CHECKHELO] Resolved policy UseHRP is set, but HRPPeriod is not defined"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + } + + return CBP_CONTINUE; +} + + +# Cleanup function +sub cleanup +{ + my ($server) = @_; + + # Get now + my $now = time(); + + # + # Tracking table cleanup + # + + # Get maximum periods + my $sth = DBSelect(' + SELECT + MAX(BlacklistPeriod) AS BlacklistPeriod, MAX(HRPPeriod) AS HRPPeriod + FROM + @TP@checkhelo + '); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKHELO] Failed to query maximum periods: ".awitpt::db::dblayer::Error()); + return -1; + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( BlacklistPeriod HRPPeriod )); + + # Check we have results + return if (!defined($row->{'BlacklistPeriod'}) && !defined($row->{'HRPPeriod'})); + + # Work out which one is largest + my $period; + if (defined($row->{'BlacklistPeriod'}) && defined($row->{'HRPPeriod'})) { + $period = $row->{'BlacklistPeriod'} > $row->{'HRPPeriod'} ? $row->{'BlacklistPeriod'} : $row->{'HRPPeriod'}; + } elsif (defined($row->{'BlacklistPeriod'})) { + $period = $row->{'BlacklistPeriod'}; + } else { + $period = $row->{'HRPPeriod'}; + } + + # Bork if we didn't find anything of interest + return if (!($period > 0)); + + # Get start time + $period = $now - $period; + + # Remove old tracking entries from database + $sth = DBDo(' + DELETE FROM + @TP@checkhelo_tracking + WHERE + LastUpdate < ? + ', + $period + ); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKHELO] Failed to remove old helo records: ".awitpt::db::dblayer::Error()); + return -1; + } + + $server->log(LOG_INFO,"[CHECKHELO] Removed ".( $sth ne "0E0" ? $sth : 0)." records from tracking table"); +} + + + +# Get HRP count for a specific client address +sub getHRPCount +{ + my ($server,$clientAddress,$start) = @_; + + my $sth = DBSelect(' + SELECT + Count(*) AS Count + + FROM + @TP@checkhelo_tracking + + WHERE + Address = ? + AND LastUpdate >= ? + ', + $clientAddress,$start + ); + if (!$sth) { + $server->log(LOG_ERR,"Database query failed: ".awitpt::db::dblayer::Error()); + return; + } + + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Count )); + + return $row->{'Count'}; +} + + +# Check if we've used a blacklisted HELO +sub getBlacklistCount +{ + my ($server,$clientAddress,$start) = @_; + + + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('CheckHelo/Blacklist',$clientAddress); + if ($cache_res) { + $server->log(LOG_ERR,"[CHECKHELO] Blacklist cache get failed: ".awitpt::cache::Error()); + return; + } + return $cache if ($cache); + + # Select and compare the number of tracking HELO's in the past time with the blacklisted ones + my $sth = DBSelect(' + SELECT + Count(*) AS Count + + FROM + @TP@checkhelo_tracking, @TP@checkhelo_blacklist + + WHERE + @TP@checkhelo_tracking.LastUpdate >= ? + AND @TP@checkhelo_tracking.Address = ? + AND @TP@checkhelo_tracking.Helo = @TP@checkhelo_blacklist.Helo + AND @TP@checkhelo_blacklist.Disabled = 0 + ', + $start,$clientAddress + ); + if (!$sth) { + $server->log(LOG_ERR,"Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Count )); + + # Cache this + $cache_res = cacheStoreKeyPair('CheckHelo/Blacklist',$clientAddress,$row->{'Count'}); + if ($cache_res) { + $server->log(LOG_ERR,"[CHECKHELO] Blacklist cache store failed: ".awitpt::cache::Error()); + return; + } + + return $row->{'Count'}; +} + + + +# Return checkhelo whitelist +sub getWhitelist +{ + my $server = shift; + + # Check cache + my ($cache_res,$cache) = cacheGetComplexKeyPair('CheckHelo/Whitelist','Sources'); + if ($cache_res) { + $server->log(LOG_ERR,"[CHECKHELO] Whitelist cache get failed: ".awitpt::cache::Error()); + return; + } + return $cache if ($cache); + + # Check if we whitelisted or not... + my $sth = DBSelect(' + SELECT + Source + + FROM + @TP@checkhelo_whitelist + + WHERE + Disabled = 0 + '); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKHELO] Database query failed: ".awitpt::db::dblayer::Error()); + return; + } + # Loop with whitelist and calculate + my @sources; + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Source ))) { + push(@sources,$row->{'Source'}); + } + + # Cache this + $cache_res = cacheStoreComplexKeyPair('CheckHelo/Whitelist','Sources',\@sources); + if ($cache_res) { + $server->log(LOG_ERR,"[CHECKHELO] Whitelist cache store failed: ".awitpt::cache::Error()); + return; + } + + return \@sources; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/CheckSPF.pm b/ehcp/fixes/policyd/cbp/modules/CheckSPF.pm new file mode 100644 index 0000000..7217d34 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/CheckSPF.pm @@ -0,0 +1,335 @@ +# SPF checking module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::CheckSPF; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::protocols; + +use Mail::SPF; + + +# User plugin info +our $pluginInfo = { + name => "SPF Check Plugin", + priority => 70, + init => \&init, + request_process => \&check, +}; + + +# Our config +my %config; + +# SPF server +my $spf_server; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'checkspf'})) { + foreach my $key (keys %{$inifile->{'checkspf'}}) { + $config{$key} = $inifile->{'checkspf'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => CheckSPF: enabled"); + $config{'enable'} = 1; + $spf_server = Mail::SPF::Server->new(); + } else { + $server->log(LOG_NOTICE," => CheckSPF: disabled"); + } +} + + +# Do our check +sub check { + my ($server,$sessionData) = @_; + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'}) || $sessionData->{'ProtocolState'} ne "RCPT"); + + # We cannot do SPF on <> + return CBP_SKIP if (!defined($sessionData->{'Sender'}) || $sessionData->{'Sender'} eq ""); + + # Check if we have any policies matched, if not just pass + return CBP_SKIP if (!defined($sessionData->{'Policy'})); + + # Policy we're about to build + my %policy; + + # Loop with priorities, high to low + foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Loop with policies + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + my $sth = DBSelect(' + SELECT + UseSPF, RejectFailedSPF, AddSPFHeader + + FROM + @TP@checkspf + + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"[CHECKSPF] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( UseSPF RejectFailedSPF AddSPFHeader ) + )) { + + # If defined, its to override + if (defined($row->{'UseSPF'})) { + $policy{'UseSPF'} = $row->{'UseSPF'}; + } + # If defined, its to override + if (defined($row->{'RejectFailedSPF'})) { + $policy{'RejectFailedSPF'} = $row->{'RejectFailedSPF'}; + } + # If defined, its to override + if (defined($row->{'AddSPFHeader'})) { + $policy{'AddSPFHeader'} = $row->{'AddSPFHeader'}; + } + } # while (my $row = $sth->fetchrow_hashref()) + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) + + # Check if we must use SPF + if (defined($policy{'UseSPF'}) && $policy{'UseSPF'} eq "1") { + # Create SPF request + my $rqst = Mail::SPF::Request->new( + 'scope' => 'mfrom', # or 'helo', 'pra' + 'identity' => $sessionData->{'Sender'}, + 'ip_address' => $sessionData->{'ClientAddress'}, + 'helo_identity' => $sessionData->{'Helo'}, # optional, + ); + + # Eval to catch sig ALRM + my $result; + eval { + local $SIG{'ALRM'} = sub { die "Timed Out!\n" }; + + # Give query 15s to return + alarm(15); + + # Get result + $result = $spf_server->process($rqst); + }; + + # Check results + if ($@ =~ /timed out/i) { + # We timed out, skip... + $server->log(LOG_INFO,"[CHECKSPF] Timed out!"); + return CBP_SKIP; + } + + # Check if we have a local_explanation, if not skip + if (!defined($result)) { + # No local explanation + $server->log(LOG_INFO,"[CHECKSPF] No local explanation, skipping..."); + return CBP_SKIP; + } + + $server->log(LOG_DEBUG,"[CHECKSPF] SPF result: ".$result->local_explanation); + + # Make reason more pretty + my $reason; + (my $local_reason = $result->local_explanation) =~ s/:/,/; + if ($result->can('authority_explanation')) { + $reason = $result->authority_explanation . "; $local_reason"; + } else { + $reason = $local_reason; + } + + # Intended action is accept + if ($result->code eq "pass") { + $server->maillog("module=CheckSPF, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=spf_pass", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_PASS); + + # Intended action is reject + } elsif ($result->code eq "fail") { + my $action = "none"; + + # Check if we need to reject + if (defined($policy{'RejectFailedSPF'}) && $policy{'RejectFailedSPF'} eq "1") { + $action = "reject"; + } elsif (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=spf_fail", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Check if we need to reject + if ($action eq "reject") { + return $server->protocol_response(PROTO_REJECT,"Failed SPF check; $reason"); + } elsif ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } + + # Intended action is accept and mark + } elsif ($result->code eq "softfail") { + my $action = "pass"; + + # Check if we need to add a header + if (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=spf_softfail", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Check if we need to add a header + if ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } elsif ($action eq "pass") { + return $server->protocol_response(PROTO_PASS); + } + + # Intended action is accept + } elsif ($result->code eq "neutral") { + my $action = "pass"; + + # Check if we need to add a header + if (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=spf_neutral", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Check if we need to add a header + if ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } elsif ($action eq "pass") { + return $server->protocol_response(PROTO_PASS); + } + + # Intended action is unspecified + } elsif ($result->code eq "permerror") { + my $action = "none"; + + # Check if we need to reject + if (defined($policy{'RejectFailedSPF'}) && $policy{'RejectFailedSPF'} eq "1") { + $action = "reject"; + } elsif (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=spf_permerror", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Check if we need to reject + if ($action eq "reject") { + return $server->protocol_response(PROTO_REJECT,"Failed SPF check; $reason"); + } elsif ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } + + # Intended action is either accept or reject + } elsif ($result->code eq "temperror") { + my $action = "none"; + + # Check if we need to reject + if (defined($policy{'RejectFailedSPF'}) && $policy{'RejectFailedSPF'} eq "1") { + $action = "defer"; + } elsif (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=spf_temperror", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Check if we need to defer + if ($action eq "defer") { + return $server->protocol_response(PROTO_DEFER,"Failed SPF check; $reason"); + } elsif ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } + + + # Intended action is accept, we going to bypass instead with "none" + } elsif ($result->code eq "none") { + my $action = "none"; + + if (defined($policy{'AddSPFHeader'}) && $policy{'AddSPFHeader'} eq "1") { + $action = "add_header"; + } + + $server->maillog("module=CheckSPF, action=$action, host=%s, helo=%s, from=%s, to=%s, reason=no_spf_record", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + if ($action eq "add_header") { + return $server->protocol_response(PROTO_PREPEND,$result->received_spf_header); + } + } + } + + return CBP_CONTINUE; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/Core.pm b/ehcp/fixes/policyd/cbp/modules/Core.pm new file mode 100644 index 0000000..74126c1 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/Core.pm @@ -0,0 +1,65 @@ +# Core module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::Core; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::system; + + +# User plugin info +our $pluginInfo = { + name => "Core", + priority => 100, + cleanup => \&cleanup, +}; + + +# Cleanup function +sub cleanup +{ + my ($server) = @_; + + # Get yesterday's time + my $yesterday = time() - 86400; + + # Remove old tracking info from database + my $sth = DBDo(' + DELETE FROM + @TP@session_tracking + WHERE + UnixTimestamp < ? + ', + $yesterday + ); + if (!$sth) { + $server->log(LOG_ERR,"[CORE] Failed to remove old session tracking records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[CORE] Removed ".( $sth ne "0E0" ? $sth : 0)." records from session tracking table"); +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/Greylisting.pm b/ehcp/fixes/policyd/cbp/modules/Greylisting.pm new file mode 100644 index 0000000..6e6a270 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/Greylisting.pm @@ -0,0 +1,1041 @@ +# Greylisting module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::Greylisting; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::cache; +use awitpt::db::dblayer; +use awitpt::netip; +use cbp::system; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Greylisting Plugin", + priority => 60, + init => \&init, + request_process => \&check, + cleanup => \&cleanup, +}; + + +# Our config +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 0; + $config{'training_mode'} = 0; + $config{'defer_message'} = "Greylisting in effect, please come back later"; + $config{'blacklist_message'} = "Greylisting in effect, sending server blacklisted"; + + my $moreInfo = ""; + + # Parse in config + if (defined($inifile->{'greylisting'})) { + foreach my $key (keys %{$inifile->{'greylisting'}}) { + $config{$key} = $inifile->{'greylisting'}->{$key}; + } + } + + # Check if training + if ($config{'training_mode'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Greylisting training mode: enabled"); + $config{'training_mode'} = 1; + $moreInfo .= " (TRAINING)"; + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Greylisting: enabled$moreInfo"); + $config{'enable'} = 1; + } else { + $server->log(LOG_NOTICE," => Greylisting: disabled"); + } + +} + + +# Do our check +sub check { + my ($server,$sessionData) = @_; + my $log = defined($server->{'config'}{'logging'}{'modules'}); + + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'}) || $sessionData->{'ProtocolState'} ne "RCPT"); + + # Check if we have any policies matched, if not just pass + return CBP_SKIP if (!defined($sessionData->{'Policy'})); + + # Policy we're about to build + my %policy; + + # Loop with priorities, low to high + foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Loop with policies + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + # Grab greylisting info + my $sth = DBSelect(' + SELECT + UseGreylisting, GreylistPeriod, + Track, + GreylistAuthValidity, GreylistUnAuthValidity, + + UseAutoWhitelist, AutoWhitelistPeriod, AutoWhitelistCount, AutoWhitelistPercentage, + UseAutoBlacklist, AutoBlacklistPeriod, AutoBlacklistCount, AutoBlacklistPercentage + + FROM + @TP@greylisting + + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + # Loop with rows and build end policy + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( + UseGreylisting GreylistPeriod Track GreylistAuthValidity + GreylistUnAuthValidity UseAutoWhitelist AutoWhitelistPeriod + AutoWhitelistCount AutoWhitelistPercentage UseAutoBlacklist + AutoBlacklistPeriod AutoBlacklistCount AutoBlacklistPercentage + ) + )) { + + $policy{'Identifier'} .= ":$policyID"; + + # If defined, its to override + if (defined($row->{'UseGreylisting'})) { + $policy{'UseGreylisting'} = $row->{'UseGreylisting'}; + } + if (defined($row->{'GreylistPeriod'})) { + $policy{'GreylistPeriod'} = $row->{'GreylistPeriod'}; + } + if (defined($row->{'Track'})) { + $policy{'Track'} = $row->{'Track'}; + } + if (defined($row->{'GreylistAuthValidity'})) { + $policy{'GreylistAuthValidity'} = $row->{'GreylistAuthValidity'}; + } + if (defined($row->{'GreylistUnAuthValidity'})) { + $policy{'GreylistUnAuthValidity'} = $row->{'GreylistUnAuthValidity'}; + } + + if (defined($row->{'UseAutoWhitelist'})) { + $policy{'UseAutoWhitelist'} = $row->{'UseAutoWhitelist'}; + } + if (defined($row->{'AutoWhitelistPeriod'})) { + $policy{'AutoWhitelistPeriod'} = $row->{'AutoWhitelistPeriod'}; + } + if (defined($row->{'AutoWhitelistCount'})) { + $policy{'AutoWhitelistCount'} = $row->{'AutoWhitelistCount'}; + } + if (defined($row->{'AutoWhitelistPercentage'})) { + $policy{'AutoWhitelistPercentage'} = $row->{'AutoWhitelistPercentage'}; + } + + if (defined($row->{'UseAutoBlacklist'})) { + $policy{'UseAutoBlacklist'} = $row->{'UseAutoBlacklist'}; + } + if (defined($row->{'AutoBlacklistPeriod'})) { + $policy{'AutoBlacklistPeriod'} = $row->{'AutoBlacklistPeriod'}; + } + if (defined($row->{'AutoBlacklistCount'})) { + $policy{'AutoBlacklistCount'} = $row->{'AutoBlacklistCount'}; + } + if (defined($row->{'AutoBlacklistPercentage'})) { + $policy{'AutoBlacklistPercentage'} = $row->{'AutoBlacklistPercentage'}; + } + + } # while (my $row = $sth->fetchrow_hashref()) + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) + + # Check if we have a policy + if (!%policy) { + return CBP_CONTINUE; + } + + # + # Check if we must use greylisting + # + if (defined($policy{'UseGreylisting'}) && $policy{'UseGreylisting'} ne "1") { + return CBP_SKIP; + } + + # + # Check if we're whitelisted + # + my $sth = DBSelect(' + SELECT + Source + FROM + @TP@greylisting_whitelist + WHERE + Disabled = 0 + '); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + # Loop with whitelist and calculate + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Source ))) { + + # Check format is SenderIP + if ((my $raw_waddress = $row->{'Source'}) =~ s/^SenderIP://i) { + + # Create our IP object + my $waddress = new awitpt::netip($raw_waddress); + if (!defined($waddress)) { + $server->log(LOG_WARN,"[GREYLISTING] Skipping invalid address '$raw_waddress'."); + next; + } + # Check if IP is whitelisted + if ($sessionData->{'_ClientAddress'}->is_within($waddress)) { + $server->maillog("module=Greylisting, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=whitelisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + DBFreeRes($sth); + return $server->protocol_response(PROTO_PASS); + } + + } else { + $server->log(LOG_WARN,"[GREYLISTING] Skipping invalid whitelist entry '".$row->{'Source'}."'."); + } + } + DBFreeRes($sth); + + + # + # Get tracking key used below + # + my $key = getKey($server,$policy{'Track'},$sessionData); + if (!defined($key)) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to get key from tracking spec '".$policy{'Track'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Do we have entries that we can use? + my $currentAutoBlacklistEntry; + my $currentAutoWhitelistEntry; + + # + # Check if we we must use auto-whitelisting and if we're auto-whitelisted + # + if (defined($policy{'UseAutoWhitelist'}) && $policy{'UseAutoWhitelist'} eq "1") { + + # Sanity check, no use doing the query to find out we don't have a period + if (defined($policy{'AutoWhitelistPeriod'}) && $policy{'AutoWhitelistPeriod'} > 0) { + my $sth = DBSelect(' + SELECT + ID, LastSeen + FROM + @TP@greylisting_autowhitelist + WHERE + TrackKey = ? + ', + $key + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( ID LastSeen )); + + # Pull off first row + if ($row) { + + # Check if we're within the auto-whitelisting period + if ($sessionData->{'UnixTimestamp'} - $row->{'LastSeen'} <= $policy{'AutoWhitelistPeriod'}) { + + my $sth = DBDo(' + UPDATE + @TP@greylisting_autowhitelist + SET + LastSeen = ? + WHERE + TrackKey = ? + ', + $sessionData->{'UnixTimestamp'},$key + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + $server->maillog("module=Greylisting, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=auto-whitelisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_PASS); + # We already have a auto-whitelist entry, but its old + } else { + $currentAutoWhitelistEntry = $row->{'ID'}; + } + } # if ($row) + + } else { # if (defined($policy{'AutoWhitelistPeriod'}) && $policy{'AutoWhitelistPeriod'} > 0) + $server->log(LOG_ERR,"[GREYLISTING] Resolved policy UseAutoWhitelist is set, but AutoWhitelistPeriod is not set or invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + } # if (defined($policy{'UseAutoWhitelist'}) && $policy{'UseAutoWhitelist'} eq "1") + + + # + # Check if we we must use auto-blacklisting and check if we're blacklisted + # + if (!$config{'training_mode'} && defined($policy{'UseAutoBlacklist'}) && $policy{'UseAutoBlacklist'} eq "1") { + + # Sanity check, no use doing the query to find out we don't have a period + if (defined($policy{'AutoBlacklistPeriod'}) && $policy{'AutoBlacklistPeriod'} > 0) { + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('Greylisting/Auto-Blacklist/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'}); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + # Check if we have a cache value and if its a match + if (defined($cache) && $cache) { + $server->maillog("module=Greylisting, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=auto-blacklisted_cached", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,$config{'blacklist_message'}); + + # Else lets do a query... + } else { + my $sth = DBSelect(' + SELECT + ID, Added + FROM + @TP@greylisting_autoblacklist + WHERE + TrackKey = ? + ', + $key + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( ID Added )); + + # Pull off first row + if ($row) { + + # Check if we're within the auto-blacklisting period + if ($sessionData->{'UnixTimestamp'} - $row->{'Added'} <= $policy{'AutoBlacklistPeriod'}) { + # Cache positive result + my $cache_res = cacheStoreKeyPair( + 'Greylisting/Auto-Blacklist/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'},1); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + $server->maillog("module=Greylisting, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=auto-blacklisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,$config{'blacklist_message'}); + # We already have a auto-blacklist entry, but its old + } else { + $currentAutoBlacklistEntry = $row->{'ID'}; + } + } + + } + + } else { # if (defined($policy{'AutoBlacklistPeriod'}) && $policy{'AutoBlacklistPeriod'} > 0) + $server->log(LOG_ERR,"[GREYLISTING] Resolved policy UseAutoBlacklist is set, but AutoBlacklistPeriod is not set or invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + } # if (defined($policy{'UseAutoBlacklist'}) && $policy{'UseAutoBlacklist'} eq "1") + + + # + # Update/Insert record into database + # + + # Insert/update triplet in database + $sth = DBDo(' + UPDATE + @TP@greylisting_tracking + SET + LastUpdate = ? + WHERE + TrackKey = ? + AND Sender = ? + AND Recipient = ? + ', + $sessionData->{'UnixTimestamp'},$key,$sessionData->{'Sender'},$sessionData->{'Recipient'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + # If we didn't update anything, insert + if ($sth eq "0E0") { + # + # Check if we must blacklist the host for abuse ... + # + if (!$config{'training_mode'} && defined($policy{'UseAutoBlacklist'}) && $policy{'UseAutoBlacklist'} eq "1") { + + # Only proceed if we have a period + if (defined($policy{'AutoBlacklistPeriod'}) && $policy{'AutoBlacklistPeriod'} > 0) { + + # Check if we have a count + if (defined($policy{'AutoBlacklistCount'}) && $policy{'AutoBlacklistCount'} > 0) { + + # Work out time to check from... + my $addedTime = $sessionData->{'UnixTimestamp'} - $policy{'AutoBlacklistPeriod'}; + + my $sth = DBSelect(' + SELECT + Count(*) AS TotalCount + FROM + @TP@greylisting_tracking + WHERE + TrackKey = ? + AND FirstSeen >= ? + ', + $key, + $addedTime + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( TotalCount )); + my $totalCount = defined($row->{'TotalCount'}) ? $row->{'TotalCount'} : 0; + + + # If count exceeds or equals blacklist count, nail the server + if ($totalCount > 0 && $totalCount >= $policy{'AutoBlacklistCount'}) { + # Start off as undef + my $blacklist; + + $sth = DBSelect(' + SELECT + Count(*) AS FailCount + FROM + @TP@greylisting_tracking + WHERE + TrackKey = ? + AND FirstSeen >= ? + AND Count = 0 + ', + $key,$addedTime + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( FailCount )); + my $failCount = defined($row->{'FailCount'}) ? $row->{'FailCount'} : 0; + + # Check if we should blacklist this host + if (defined($policy{'AutoBlacklistPercentage'}) && $policy{'AutoBlacklistPercentage'} > 0) { + + my $percentage = ( $failCount / $totalCount ) * 100; + + # If we meet the percentage of unauthenticated triplets, blacklist + if ($percentage >= $policy{'AutoBlacklistPercentage'} ) { + $blacklist = sprintf("Auto-blacklisted: TotalCount/Required = %s/%s, Percentage/Threshold = %s/%s", + $totalCount, $policy{'AutoBlacklistCount'}, + $percentage, $policy{'AutoBlacklistPercentage'}); + } + # This is not a percentage check + } else { + # Check if we exceed + if ($failCount >= $policy{'AutoBlacklistCount'}) { + $blacklist = sprintf("Auto-blacklisted: Count/Required = %s/%s", $failCount, + $policy{'AutoBlacklistCount'}); + } + } + + # If we are to be listed, this is our reason + if ($blacklist) { + # Check if we already have an expired autoblacklist entry, this happens if + # the cleanup has not run yet + if (defined($currentAutoBlacklistEntry)) { + # Update blacklisting to the new details + $sth = DBDo(' + UPDATE + @TP@greylisting_autoblacklist + SET + TrackKey = ?, + Added = ?, + Comment = ? + WHERE + ID = ? + ', + $key,$sessionData->{'UnixTimestamp'},$blacklist,$currentAutoBlacklistEntry + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ". + awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + # If we don't have an entry we can use, create one + } else { + # Record blacklisting + $sth = DBDo(' + INSERT INTO @TP@greylisting_autoblacklist + (TrackKey,Added,Comment) + VALUES + (?,?,?) + ', + $key,$sessionData->{'UnixTimestamp'},$blacklist + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database insert failed: ". + awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + } + + # Cache positive result + my $cache_res = cacheStoreKeyPair( + 'Greylisting/Auto-Blacklist/PolicyIdentifier-Blacklisted-IP', + $policy{'Identifier'}."/".$sessionData->{'ClientAddress'},1); + if ($cache_res) { + return $server->protocol_response(PROTO_ERROR); + } + + $server->maillog("module=Greylisting, action=reject, host=%s, helo=%s, from=%s, to=%s, reason=auto-blacklisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_REJECT,$config{'blacklist_message'}); + } + } # if ($totalCount > 0 && $totalCount >= $policy{'AutoBlacklistCount'}) + } # if (defined($policy{'AutoBlacklistCount'}) && $policy{'AutoBlacklistCount'} > 0) + + } else { # if (defined($policy{'AutoBlacklistPeriod'}) && $policy{'AutoBlacklistPeriod'} > 0) + $server->log(LOG_ERR,"[GREYLISTING] Resolved policy UseAutoWBlacklist is set, but AutoBlacklistPeriod is not set or invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + } + + # Record triplet + $sth = DBDo(' + INSERT INTO @TP@greylisting_tracking + (TrackKey,Sender,Recipient,FirstSeen,LastUpdate,Tries,Count) + VALUES + (?,?,?,?,?,1,0) + ', + $key,$sessionData->{'Sender'},$sessionData->{'Recipient'},$sessionData->{'UnixTimestamp'},$sessionData->{'UnixTimestamp'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database insert failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Make sure we're not in training mode + if (!$config{'training_mode'}) { + $server->maillog("module=Greylisting, action=defer, host=%s, helo=%s, from=%s, to=%s, reason=greylisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + # Skip to rejection, if we using greylisting 0 seconds is highly unlikely to be a greylisitng period + return $server->protocol_response(PROTO_DEFER,"451 4.7.1 ".$config{'defer_message'}); + } + + # And just a bit of debug + } else { + $server->log(LOG_DEBUG,"[GREYLISTING] Updated greylisting triplet ('$key','".$sessionData->{'Sender'}."','". + $sessionData->{'Recipient'}."') @ ".$sessionData->{'UnixTimestamp'}."") if ($log); + } + + + # + # Retrieve record from database and check time elapsed + # + + # Pull triplet and check + $sth = DBSelect(' + SELECT + FirstSeen, + LastUpdate, + Tries + + FROM + @TP@greylisting_tracking + + WHERE + TrackKey = ? + AND Sender = ? + AND Recipient = ? + ', + $key,$sessionData->{'Sender'},$sessionData->{'Recipient'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( FirstSeen LastUpdate Tries )); + if (!$row) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to find triplet in database"); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Check if we should greylist, or not + my $timeElapsed = $row->{'LastUpdate'} - $row->{'FirstSeen'}; + if (!$config{'training_mode'} && $timeElapsed < $policy{'GreylistPeriod'}) { + # Get time left, debug and return + my $timeLeft = $policy{'GreylistPeriod'} - $timeElapsed; + $server->maillog("module=Greylisting, action=defer, host=%s, helo=%s, from=%s, to=%s, reason=greylisted, tries=%s", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $row->{'Tries'} + 1); + + # Update stats + my $sth = DBDo(' + UPDATE + @TP@greylisting_tracking + SET + Tries = Tries + 1 + WHERE + TrackKey = ? + AND Sender = ? + AND Recipient = ? + ', + $key,$sessionData->{'Sender'},$sessionData->{'Recipient'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + return $server->protocol_response(PROTO_DEFER,"451 4.7.1 ".$config{'defer_message'}); + + } else { + # Insert/update triplet in database + my $sth = DBDo(' + UPDATE + @TP@greylisting_tracking + SET + Count = Count + 1 + WHERE + TrackKey = ? + AND Sender = ? + AND Recipient = ? + ', + $key,$sessionData->{'Sender'},$sessionData->{'Recipient'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # + # Check if we must whitelist the host for being good + # + if (defined($policy{'UseAutoWhitelist'}) && $policy{'UseAutoWhitelist'} eq "1") { + + # Only proceed if we have a period + if (defined($policy{'AutoWhitelistPeriod'}) && $policy{'AutoWhitelistPeriod'} > 0) { + + # Check if we have a count + if (defined($policy{'AutoWhitelistCount'}) && $policy{'AutoWhitelistCount'} > 0) { + my $addedTime = $sessionData->{'UnixTimestamp'} - $policy{'AutoWhitelistPeriod'}; + + my $sth = DBSelect(' + SELECT + Count(*) AS TotalCount + FROM + @TP@greylisting_tracking + WHERE + TrackKey = ? + AND FirstSeen >= ? + ', + $key,$addedTime + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( TotalCount )); + my $totalCount = defined($row->{'TotalCount'}) ? $row->{'TotalCount'} : 0; + + # If count exceeds or equals whitelist count, nail the server + if ($totalCount >= $policy{'AutoWhitelistCount'}) { + my $whitelist; + + $sth = DBSelect(' + SELECT + Count(*) AS PassCount + FROM + @TP@greylisting_tracking + WHERE + TrackKey = ? + AND FirstSeen >= ? + AND Count != 0 + ', + $key,$addedTime + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database query failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( PassCount )); + my $passCount = defined($row->{'PassCount'}) ? $row->{'PassCount'} : 0; + + # Check if we should whitelist this host + if (defined($policy{'AutoWhitelistPercentage'}) && $policy{'AutoWhitelistPercentage'} > 0) { + # Cannot divide by zero + my $percentage = ( $passCount / $totalCount ) * 100; + # If we meet the percentage of unauthenticated triplets, whitelist + if ($percentage >= $policy{'AutoWhitelistPercentage'} ) { + $whitelist = sprintf("Auto-whitelisted: TotalCount/Required = %s/%s, Percentage/Threshold/Required = %s/%s", + $totalCount, $policy{'AutoWhitelistCount'}, + $percentage, $policy{'AutoWhitelistPercentage'}); + } + + } else { + # Check if we exceed + if ($passCount >= $policy{'AutoWhitelistCount'}) { + $whitelist = sprintf("Auto-whitelisted: Count/Required = %s/%s", $passCount, $policy{'AutoWhitelistCount'}); + } + } + + # If we are to be listed, this is our reason + if ($whitelist) { + # Check if we already have an expired autowhitelist entry, this happens if the cleanup has not run yet + if (defined($currentAutoWhitelistEntry)) { + # Update whitelisting to the new details + $sth = DBDo(' + UPDATE + @TP@greylisting_autowhitelist + SET + TrackKey = ?, + Added = ?, + LastSeen = ?, + Comment = ? + WHERE + ID = ? + ', + $key,$sessionData->{'UnixTimestamp'},$sessionData->{'UnixTimestamp'},$whitelist,$currentAutoWhitelistEntry + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database update failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + } else { + # Update whitelisting to the new details + $sth = DBDo(' + INSERT INTO @TP@greylisting_autowhitelist + (TrackKey,Added,LastSeen,Comment) + VALUES + (?,?,?,?) + ', + $key,$sessionData->{'UnixTimestamp'},$sessionData->{'UnixTimestamp'},$whitelist + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Database insert failed: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + } + + $server->maillog("module=Greylisting, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=auto-whitelisted", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_PASS); + } + } # if ($row->{'RCount'} >= $policy{'AutoWhitelistCount'}) + } # if (defined($policy{'AutoWhitelistCount'}) && $policy{'AutoWhitelistCount'} > 0) + + } else { # if (defined($policy{'AutoWhitelistPeriod'}) && $policy{'AutoWhitelistPeriod'} > 0) + $server->log(LOG_ERR,"[GREYLISTING] Resolved policy UseAutoWWhitelist is set, but AutoWhitelistPeriod is not set or invalid"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + } + + # Depending on if we training or not, set the reason + my $reason; + if ($config{'training_mode'}) { + $reason = "training"; + } else { + $reason = "authenticated"; + } + + $server->maillog("module=Greylisting, action=pass, host=%s, helo=%s, from=%s, to=%s, reason=$reason", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + + return $server->protocol_response(PROTO_PASS); + } + + # We should never get here + return CBP_ERROR; +} + + +# Get key from session +sub getKey +{ + my ($server,$track,$sessionData) = @_; + + + my $res; + + + # Split off method and splec + my ($method,$spec) = ($track =~ /^([^:]+)(?::(\S+))?/); + + # Lowercase method & spec + $method = lc($method); + $spec = lc($spec) if (defined($spec)); + + # Check TrackSenderIP + if ($method eq "senderip") { + my $key = getIPKey($spec,$sessionData->{'_ClientAddress'}); + + # Check for no key + if (defined($key)) { + $res = "SenderIP:$key"; + } else { + $server->log(LOG_WARN,"[GREYLISTING] Unknown key specification in TrackSenderIP"); + } + + # Fall-through to catch invalid specs + } else { + $server->log(LOG_WARN,"[GREYLISTING] Invalid tracking specification '$track'"); + } + + + return $res; +} + + +# Cleanup function +sub cleanup +{ + my ($server) = @_; + + # Get now + my $now = time(); + + # + # Autowhitelist cleanups + # + + # Get maximum AutoWhitelistPeriod + my $sth = DBSelect(' + SELECT + MAX(AutoWhitelistPeriod) AS Period + FROM + @TP@greylisting + '); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to query AutoWhitelistPeriod: ".awitpt::db::dblayer::Error()); + return -1; + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Period )); + + # Check if we have something... + my $AWLPeriod; + if (($AWLPeriod = $row->{'Period'}) && $AWLPeriod > 0) { + # Get start time + $AWLPeriod = $now - $AWLPeriod; + + # Remove old whitelistings from database + $sth = DBDo(' + DELETE FROM + @TP@greylisting_autowhitelist + WHERE + LastSeen < ? + ', + $AWLPeriod + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to remove old autowhitelist records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[GREYLISTING] Removed ".( $sth ne "0E0" ? $sth : 0)." records from autowhitelist table"); + } + + + # + # Autoblacklist cleanups + # + + # Get maximum AutoBlacklistPeriod + $sth = DBSelect(' + SELECT + MAX(AutoBlacklistPeriod) AS Period + FROM + @TP@greylisting + '); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to query AutoBlacklistPeriod: ".awitpt::db::dblayer::Error()); + return -1; + } + $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Period )); + + # Check if we have something... + my $ABLPeriod; + if (($ABLPeriod = $row->{'Period'}) && $ABLPeriod > 0) { + # Get start time + $ABLPeriod = $now - $ABLPeriod; + + # Remove blacklistings from database + $sth = DBDo(' + DELETE FROM + @TP@greylisting_autoblacklist + WHERE + Added < ? + ', + $ABLPeriod + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to remove old autoblacklist records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[GREYLISTING] Removed ".( $sth ne "0E0" ? $sth : 0)." records from autoblacklist table"); + } + + # + # Authenticated record cleanups + # + + # Get maximum GreylistAuthValidity + $sth = DBSelect(' + SELECT + MAX(GreylistAuthValidity) AS Period + FROM + @TP@greylisting + '); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to query GreylistAuthValidity: ".awitpt::db::dblayer::Error()); + return -1; + } + $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Period )); + + # Check if we have something... + my $AuthPeriod; + if (($AuthPeriod = $row->{'Period'}) && $AuthPeriod > 0) { + # Get start time + $AuthPeriod = $now - $AuthPeriod; + + # Remove old authenticated records from database + $sth = DBDo(' + DELETE FROM + @TP@greylisting_tracking + WHERE + LastUpdate < ? + AND Count != 0 + ', + $AuthPeriod + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to remove old authenticated records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[GREYLISTING] Removed ".( $sth ne "0E0" ? $sth : 0)." authenticated records from greylist tracking table"); + } + + # + # UnAuthenticated record cleanups + # + + # Get maximum GreylistUnAuthValidity + $sth = DBSelect(' + SELECT + MAX(GreylistUnAuthValidity) AS Period + FROM + @TP@greylisting + '); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to query GreylistUnAuthValidity: ".awitpt::db::dblayer::Error()); + return -1; + } + $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Period )); + + # Check if we have something... + my $UnAuthPeriod; + if (($UnAuthPeriod = $row->{'Period'}) && $UnAuthPeriod > 0) { + # Get start time + $UnAuthPeriod = $now - $UnAuthPeriod; + + # Remove old un-authenticated records info from database + $sth = DBDo(' + DELETE FROM + @TP@greylisting_tracking + WHERE + LastUpdate < ? + AND Count = 0 + ', + $UnAuthPeriod + ); + if (!$sth) { + $server->log(LOG_ERR,"[GREYLISTING] Failed to remove old un-authenticated records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[GREYLISTING] Removed ".( $sth ne "0E0" ? $sth : 0)." unauthenticated records from greylist tracking table"); + } +} + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/Quotas.pm b/ehcp/fixes/policyd/cbp/modules/Quotas.pm new file mode 100644 index 0000000..ae2bc3d --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/Quotas.pm @@ -0,0 +1,764 @@ +# Quotas module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::modules::Quotas; + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::system; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Quotas Plugin", + priority => 50, + init => \&init, + request_process => \&check, + cleanup => \&cleanup, +}; + + +# Module configuration +my %config; + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 0; + + # Parse in config + if (defined($inifile->{'quotas'})) { + foreach my $key (keys %{$inifile->{'quotas'}}) { + $config{$key} = $inifile->{'quotas'}->{$key}; + } + } + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Quotas: enabled"); + $config{'enable'} = 1; + # Enable tracking, we need this to recipients for the message in END-OF-DATA + $server->{'config'}{'track_sessions'} = 1; + } else { + $server->log(LOG_NOTICE," => Quotas: disabled"); + } +} + + + + +# Do our checks +sub check { + my ($server,$sessionData) = @_; + + + # If we not enabled, don't do anything + return CBP_SKIP if (!$config{'enable'}); + + # We only valid in the RCPT and EOM state + return CBP_SKIP if (!defined($sessionData->{'ProtocolState'})); + + # Check valid state & that we have our policy data + return CBP_SKIP if (! + ( + ($sessionData->{'ProtocolState'} eq "RCPT" && defined($sessionData->{'Policy'})) || + ($sessionData->{'ProtocolState'} eq "END-OF-MESSAGE" && defined($sessionData->{'_Recipient_To_Policy'})) + ) + ); + + # Our verdict and data + my ($verdict,$verdict_data); + + my $now = time(); + + + # + # RCPT state + # If we in this state we increase the RCPT counters for each key we have + # we only do this if we not going to reject the message. We also check if + # we have exceeded our size quota. The Size quota is updated in the EOM + # stage + # + if ($sessionData->{'ProtocolState'} eq "RCPT") { + + # Key tracking list, if quotaExceeded is not undef, it will contain the msg + my %newCounters; # Indexed by QuotaLimitsID + my @trackingList; + my $hasExceeded; + my $exceededQtrack; + + # Loop with priorities, low to high +POLICY: foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) { + + # Last if we've exceeded + last if ($hasExceeded); + + + # Loop with each policyID + foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) { + + # Last if we've exceeded + last if ($hasExceeded); + + # Get quota object + my $quotas = getQuotas($server,$policyID); + # Check if we got a quota or not + if (ref $quotas ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with quotas + foreach my $quota (@{$quotas}) { + # Exceeded limit + my $exceededLimit; + + # Last if we've exceeded + last if ($hasExceeded); + + # Grab tracking keys + my $key = getKey($server,$quota,$sessionData); + if (!defined($key)) { + $server->log(LOG_ERR,"[QUOTAS] No key found for quota ID '".$quota->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Get limits + my $limits = getLimits($server,$quota->{'ID'}); + # Check if we got limits or err + if (ref $limits ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with limits + foreach my $limit (@{$limits}) { + + # Get quota tracking info + my $qtrack = getTrackingInfo($server,$limit->{'ID'},$key); + + # Check if we got tracking info or not + if (defined($qtrack) && ref $qtrack ne "HASH") { + return $server->protocol_response(PROTO_DB_ERROR); + } + # Check if we have a queue tracking item + if (defined($qtrack)) { + my $elapsedTime = defined($qtrack->{'LastUpdate'}) ? ( $now - $qtrack->{'LastUpdate'} ) : $quota->{'Period'}; + # If elapsed time is less than zero, its time diff between servers, meaning no time has elapsed + $elapsedTime = 0 if ($elapsedTime < 0); + + # Check if elapsedTime is longer than period, or negative (time diff between servers?) + my $currentCounter; + if ($elapsedTime > $quota->{'Period'}) { + $currentCounter = 0; + + # Calculate the % of the period we have, and multiply it with the counter ... this should give us a reasonably + # accurate counting + } else { + $currentCounter = ( 1 - ($elapsedTime / $quota->{'Period'}) ) * $qtrack->{'Counter'}; + } + + # Work out the difference to the DB value, we ONLY DO THIS ONCE!!! so if its defined, leave it alone! + if (!defined($newCounters{$qtrack->{'QuotasLimitsID'}})) { + $newCounters{$qtrack->{'QuotasLimitsID'}} = $currentCounter - $qtrack->{'Counter'}; + } + + # Limit type + my $limitType = lc($limit->{'Type'}); + + # Make sure its the MessageCount counter + if ($limitType eq "messagecount") { + # Check for violation + if ($currentCounter > $limit->{'CounterLimit'}) { + $hasExceeded = "Policy rejection; Message count quota exceeded"; + } + # Bump up limit + $newCounters{$qtrack->{'QuotasLimitsID'}}++; + + # Check for cumulative size violation + } elsif ($limitType eq "messagecumulativesize") { + # Check for violation + if ($currentCounter > $limit->{'CounterLimit'}) { + $hasExceeded = "Policy rejection; Cumulative message size quota exceeded"; + } + } + + } else { + $qtrack->{'QuotasLimitsID'} = $limit->{'ID'}; + $qtrack->{'TrackKey'} = $key; + $qtrack->{'Counter'} = 0; + $qtrack->{'LastUpdate'} = $now; + + # Work out the difference to the DB value, we ONLY DO THIS ONCE!!! so if its defined, leave it alone! + if (!defined($newCounters{$qtrack->{'QuotasLimitsID'}})) { + $newCounters{$qtrack->{'QuotasLimitsID'}} = $qtrack->{'Counter'}; + } + + # Check if this is a message counter + if (lc($limit->{'Type'}) eq "messagecount") { + # Bump up limit + $newCounters{$qtrack->{'QuotasLimitsID'}}++; + } + } + + # Setup some stuff we need for logging + $qtrack->{'DBKey'} = $key; + $qtrack->{'CounterLimit'} = $limit->{'CounterLimit'}; + $qtrack->{'LimitType'} = $limit->{'Type'}; + $qtrack->{'PolicyID'} = $policyID; + $qtrack->{'QuotaID'} = $quota->{'ID'}; + $qtrack->{'LimitID'} = $limit->{'ID'}; + $qtrack->{'Verdict'} = $quota->{'Verdict'}; + $qtrack->{'VerdictData'} = $quota->{'Data'}; + + # If we've exceeded setup the qtrack which was exceeded + if ($hasExceeded) { + $exceededQtrack = $qtrack; + } + + # Save quota tracking info + push(@trackingList,$qtrack); + + } # foreach my $limit (@{$limits}) + + # Check if this is the last quota + if (defined($quota->{'LastQuota'}) && $quota->{'LastQuota'} eq "1") { + last POLICY; + } + } # foreach my $quota (@{$quotas}) + } # foreach my $policyID (@{$sessionData->{'Policy'}->{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'Policy'}}) + + # If we have not exceeded, update + if (!$hasExceeded) { + + # Loop with tracking ID's and update + foreach my $qtrack (@trackingList) { + + # Percent used + my $pused = sprintf('%.1f', ( ($newCounters{$qtrack->{'QuotasLimitsID'}} + $qtrack->{'Counter'}) / $qtrack->{'CounterLimit'} ) * 100); + + # Update database + my $sth = DBDo(' + UPDATE + @TP@quotas_tracking + SET + Counter = Counter + ?, + LastUpdate = ? + WHERE + QuotasLimitsID = ? + AND TrackKey = ? + ', + $newCounters{$qtrack->{'QuotasLimitsID'}},$now,$qtrack->{'QuotasLimitsID'},$qtrack->{'TrackKey'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to update quota_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # If nothing updated, then insert our record + if ($sth eq "0E0") { + # Insert into database + my $sth = DBDo(' + INSERT INTO @TP@quotas_tracking + (QuotasLimitsID,TrackKey,LastUpdate,Counter) + VALUES + (?,?,?,?) + ', + $qtrack->{'QuotasLimitsID'},$qtrack->{'TrackKey'},$qtrack->{'LastUpdate'},$newCounters{$qtrack->{'QuotasLimitsID'}} + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to insert quota_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Log create to mail log + $server->maillog("module=Quotas, mode=create, host=%s, helo=%s, from=%s, to=%s, reason=quota_create, policy=%s, quota=%s, limit=%s, " + ."track=%s, counter=%s, quota=%s/%s (%s%%)", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $qtrack->{'PolicyID'}, + $qtrack->{'QuotaID'}, + $qtrack->{'LimitID'}, + $qtrack->{'DBKey'}, + $qtrack->{'LimitType'}, + sprintf('%.2f',$newCounters{$qtrack->{'QuotasLimitsID'}} + $qtrack->{'Counter'}), + $qtrack->{'CounterLimit'}, + $pused); + + + # If we updated ... + } else { + # Log update to mail log + $server->maillog("module=Quotas, mode=update, host=%s, helo=%s, from=%s, to=%s, reason=quota_update, policy=%s, quota=%s, limit=%s, " + ."track=%s, counter=%s, quota=%s/%s (%s%%)", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $qtrack->{'PolicyID'}, + $qtrack->{'QuotaID'}, + $qtrack->{'LimitID'}, + $qtrack->{'DBKey'}, + $qtrack->{'LimitType'}, + sprintf('%.2f',$newCounters{$qtrack->{'QuotasLimitsID'}} + $qtrack->{'Counter'}), + $qtrack->{'CounterLimit'}, + $pused); + + } + + + # Remove limit + delete($newCounters{$qtrack->{'QuotasLimitsID'}}); + } + + # If we have exceeded, set verdict + } else { + # Percent used + my $pused = sprintf('%.1f', ( ($newCounters{$exceededQtrack->{'QuotasLimitsID'}} + $exceededQtrack->{'Counter'}) / $exceededQtrack->{'CounterLimit'} ) * 100); + + # Log rejection to mail log + $server->maillog("module=Quotas, action=%s, host=%s, helo=%s, from=%s, to=%s, reason=quota_match, policy=%s, quota=%s, limit=%s, track=%s, " + ."counter=%s, quota=%s/%s (%s%%)", + lc($exceededQtrack->{'Verdict'}), + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}, + $exceededQtrack->{'PolicyID'}, + $exceededQtrack->{'QuotaID'}, + $exceededQtrack->{'LimitID'}, + $exceededQtrack->{'DBKey'}, + $exceededQtrack->{'LimitType'}, + sprintf('%.2f',$newCounters{$exceededQtrack->{'QuotasLimitsID'}} + $exceededQtrack->{'Counter'}), + $exceededQtrack->{'CounterLimit'}, + $pused); + + $verdict = $exceededQtrack->{'Verdict'}; + $verdict_data = (defined($exceededQtrack->{'VerdictData'}) && $exceededQtrack->{'VerdictData'} ne "") + ? $exceededQtrack->{'VerdictData'} : $hasExceeded; + } + + # + # END-OF-MESSAGE state + # The Size quota is updated in this state + # + } elsif ($sessionData->{'ProtocolState'} eq "END-OF-MESSAGE") { + # Check if we have recipient to policy mappings + if (!defined($sessionData->{'_Recipient_To_Policy'})) { + return CBP_SKIP; + } + + # Loop with email addies + foreach my $emailAddy (keys %{$sessionData->{'_Recipient_To_Policy'}}) { + + # Loop with priorities, low to high +POLICY: foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}}) { + + # Loop with each policyID + foreach my $policyID (@{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}{$priority}}) { + + # Check if we got a quota or not + my $quotas = getQuotas($server,$policyID); + if (ref $quotas ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with quotas + foreach my $quota (@{$quotas}) { + + # HACK: Fool getKey into thinking we actually do have a recipient + $sessionData->{'Recipient'} = $emailAddy; + + # Grab tracking keys + my $key = getKey($server,$quota,$sessionData); + if (!defined($key)) { + $server->log(LOG_WARN,"[QUOTAS] No key found for quota ID '".$quota->{'ID'}."'"); + return $server->protocol_response(PROTO_DATA_ERROR); + } + + # Get limits + my $limits = getLimits($server,$quota->{'ID'}); + # Check if we got limits or err + if (ref $limits ne "ARRAY") { + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Loop with limits + foreach my $limit (@{$limits}) { + + # Get quota tracking info + my $qtrack = getTrackingInfo($server,$limit->{'ID'},$key); + # Check if we got tracking info or not + if (ref $qtrack ne "HASH") { + next; # If not just carry on? + } + + # Check if we're working with cumulative sizes + if (lc($limit->{'Type'}) eq "messagecumulativesize") { + # Bump up counter + my $currentCounter = $qtrack->{'Counter'} + $sessionData->{'Size'}; + + # Update database + my $sth = DBDo(' + UPDATE + @TP@quotas_tracking + SET + Counter = Counter + ?, + LastUpdate = ? + WHERE + QuotasLimitsID = ? + AND TrackKey = ? + ', + $sessionData->{'Size'},$now,$qtrack->{'QuotasLimitsID'},$qtrack->{'TrackKey'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to update quota_tracking item: ".awitpt::db::dblayer::Error()); + return $server->protocol_response(PROTO_DB_ERROR); + } + + # Percent used + my $pused = sprintf('%.1f', ( $currentCounter / $limit->{'CounterLimit'} ) * 100); + + # Log update to mail log + $server->maillog("module=Quotas, mode=update, host=%s, helo=%s, from=%s, to=%s, reason=quota_update, policy=%s, " + ."quota=%s, limit=%s, track=%s, counter=%s, quota=%s/%s (%s%%)", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $emailAddy, + $policyID, + $quota->{'ID'}, + $limit->{'ID'}, + $key, + $limit->{'Type'}, + sprintf('%.2f',$currentCounter), + $limit->{'CounterLimit'}, + $pused); + } # if (lc($limit->{'Type'}) eq "messagecumulativesize") + } # foreach my $limit (@{$limits}) + + # Check if this is the last quota + if (defined($quota->{'LastQuota'}) && $quota->{'LastQuota'} eq "1") { + last POLICY; + } + } # foreach my $quota (@{$quotas}) + } # foreach my $policyID (@{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}{$priority}}) + } # foreach my $priority (sort {$a <=> $b} keys %{$sessionData->{'_Recipient_To_Policy'}{$emailAddy}}) + } # foreach my $emailAddy (keys %{$sessionData->{'_Recipient_To_Policy'}}) + + + } + + # Setup result + if (!defined($verdict)) { + return CBP_CONTINUE; + } elsif ($verdict eq "") { + $server->maillog("module=Quotas, action=none, host=%s, helo=%s, from=%s, to=%s, reason=no_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return CBP_CONTINUE; + } elsif ($verdict =~ /^defer$/i) { + return $server->protocol_response(PROTO_DEFER,$verdict_data); + } elsif ($verdict =~ /^hold$/i) { + return $server->protocol_response(PROTO_HOLD,$verdict_data); + } elsif ($verdict =~ /^reject$/i) { + return $server->protocol_response(PROTO_REJECT,$verdict_data); + } elsif ($verdict =~ /^discard$/i) { + return $server->protocol_response(PROTO_DISCARD,$verdict_data); + } elsif ($verdict =~ /^filter$/i) { + return $server->protocol_response(PROTO_FILTER,$verdict_data); + } elsif ($verdict =~ /^redirect$/i) { + return $server->protocol_response(PROTO_REDIRECT,$verdict_data); + } else { + $server->log(LOG_ERR,"[QUOTAS] Unknown Verdict specification in access control '$verdict'"); + $server->maillog("module=Quotas, action=none, host=%s, helo=%s, from=%s, to=%s, reason=invalid_verdict", + $sessionData->{'ClientAddress'}, + $sessionData->{'Helo'}, + $sessionData->{'Sender'}, + $sessionData->{'Recipient'}); + return $server->protocol_response(PROTO_DATA_ERROR); + } +} + + +# Get key from spec and SASL username +sub getSASLUsernameKey +{ + my ($spec,$username) = @_; + + my $key; + + # Very basic, for blank SASL username, just use '-' + if (!defined($username)) { + $key = "-"; + } else { + $key = $username; + } + + return $key; +} + + +# Get key from spec and email addy +sub getEmailKey +{ + my ($spec,$addy) = @_; + + my $key; + + + # Short-circuit <> + if ($addy eq '') { + return "@"; + } + + # We need to track the sender + if ($spec eq 'user@domain') { + $key = $addy; + + } elsif ($spec eq 'user@') { + ($key) = ( $addy =~ /^([^@]+@)/ ); + + } elsif ($spec eq '@domain') { + ($key) = ( $addy =~ /^(?:[^@]+)(@.*)/ ); + } + + return $key; +} + + +# Get quota from policyID +sub getQuotas +{ + my ($server,$policyID) = @_; + + + my @res; + + # Grab quota data + my $sth = DBSelect(' + SELECT + ID, + Period, Track, Verdict, Data, LastQuota + FROM + @TP@quotas + WHERE + PolicyID = ? + AND Disabled = 0 + ', + $policyID + ); + if (!$sth) { + $server->log(LOG_ERR,"Failed to get quota data: ".awitpt::db::dblayer::Error()); + return -1; + } + while (my $quota = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( ID Period Track Verdict Data LastQuota ) + )) { + + push(@res, $quota); + } + + return \@res; +} + + +# Get key from session +sub getKey +{ + my ($server,$quota,$sessionData) = @_; + + + my $res; + + + # Split off method and splec + my ($method,$spec) = ($quota->{'Track'} =~ /^([^:]+)(?::(\S+))?/); + + # Lowercase method & spec + $method = lc($method); + $spec = lc($spec) if (defined($spec)); + + # Track entire policy + if ($method eq "policy") { + $res = "Policy"; + + # Check TrackSenderIP + } elsif ($method eq "senderip") { + my $key = getIPKey($spec,$sessionData->{'_ClientAddress'}); + + # Check for no key + if (defined($key)) { + $res = "SenderIP:$key"; + } else { + $server->log(LOG_WARN,"[QUOTAS] Unknown key specification in TrackSenderIP"); + } + + + # Check TrackSender + } elsif ($method eq "sender") { + # Check if the sender is blank (<>), it makes no sense at present to work out how its tracked, <> is <> + my $key; + if ($sessionData->{'Sender'} ne "") { + $key = getEmailKey($spec,$sessionData->{'Sender'}); + } else { + $key = "<>"; + } + + # Check for no key + if (defined($key)) { + $res = "Sender:$key"; + } else { + $server->log(LOG_WARN,"[QUOTAS] Unknown key specification in TrackSender"); + } + + + # Check TrackSASLUsername + } elsif ($method eq "saslusername") { + my $key = getSASLUsernameKey($spec,$sessionData->{'SASLUsername'}); + + # Check for no key + if (defined($key)) { + $res = "SASLUsername:$key"; + } else { + $server->log(LOG_WARN,"[QUOTAS] Unknown key specification in TrackSASLUsername"); + } + + # Check TrackRecipient + } elsif ($method eq "recipient") { + my $key = getEmailKey($spec,$sessionData->{'Recipient'}); + + # Check for no key + if (defined($key)) { + $res = "Recipient:$key"; + } else { + $server->log(LOG_WARN,"[QUOTAS] Unknown key specification in TrackRecipient"); + } + + # Fall-through to catch invalid specs + } else { + $server->log(LOG_WARN,"[QUOTAS] Invalid tracking specification '".$quota->{'Track'}."'"); + } + + + return $res; +} + + +# Get tracking info +sub getTrackingInfo +{ + my ($server,$quotaID,$key) = @_; + + + # Query quota info + my $sth = DBSelect(' + SELECT + QuotasLimitsID, + TrackKey, Counter, LastUpdate + FROM + @TP@quotas_tracking + WHERE + QuotasLimitsID = ? + AND TrackKey = ? + ', + $quotaID,$key + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to query quotas_tracking: ".awitpt::db::dblayer::Error()); + return -1; + } + my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( QuotasLimitsID TrackKey Counter LastUpdate )); + DBFreeRes($sth); + + return $row; +} + + +# Get limits +sub getLimits +{ + my ($server,$quotasID) = @_; + + # Query quota info + my $sth = DBSelect(' + SELECT + ID, + Type, CounterLimit + FROM + @TP@quotas_limits + WHERE + QuotasID = ? + AND Disabled = 0 + ', + $quotasID + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to query quotas_limits: ".awitpt::db::dblayer::Error()); + return -1; + } + my $list = []; + while (my $qtrack = hashifyLCtoMC($sth->fetchrow_hashref(), qw( ID Type CounterLimit ))) { + push(@{$list}, $qtrack); + } + + return $list; +} + + +# Cleanup function +sub cleanup +{ + my ($server) = @_; + + # Get 30-days ago time + my $lastMonth = time() - 2592000; + + # Remove old tracking info from database + my $sth = DBDo(' + DELETE FROM + @TP@quotas_tracking + WHERE + LastUpdate < ? + ', + $lastMonth + ); + if (!$sth) { + $server->log(LOG_ERR,"[QUOTAS] Failed to remove old quota tracking records: ".awitpt::db::dblayer::Error()); + return -1; + } + $server->log(LOG_INFO,"[QUOTAS] Removed ".( $sth ne "0E0" ? $sth : 0).." records from tracking table"); +} + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/modules/README.txt b/ehcp/fixes/policyd/cbp/modules/README.txt new file mode 100644 index 0000000..586cb26 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/modules/README.txt @@ -0,0 +1,19 @@ +Module Priorities: +------------------ +0 - Lowest +100 - Highest + +Core - 100 + +AccessControl - 90 + +CheckHelo - 80 + +CheckSPF - 70 + +Greylisting - 60 + +Quotas - 50 + + + diff --git a/ehcp/fixes/policyd/cbp/policies.pm b/ehcp/fixes/policyd/cbp/policies.pm new file mode 100644 index 0000000..0298a16 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/policies.pm @@ -0,0 +1,683 @@ +# Policy handling functions +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::policies; + +use strict; +use warnings; + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT); +@ISA = qw(Exporter); +@EXPORT = qw( + getPolicy + encodePolicyData + decodePolicyData +); + + +use cbp::logging; +use awitpt::cache; +use awitpt::db::dblayer; +use awitpt::netip; +use cbp::system; + +use Data::Dumper; + + +# Database handle +my $dbh = undef; + +# Our current error message +my $error = ""; + +# Set current error message +# Args: error_message +sub setError +{ + my $err = shift; + my ($package,$filename,$line) = caller; + my (undef,undef,undef,$subroutine) = caller(1); + + # Set error + $error = "$subroutine($line): $err"; +} + +# Return current error message +# Args: none +sub Error +{ + my $err = $error; + + # Reset error + $error = ""; + + # Return error + return $err; +} + + +# Return a hash of policies matches +# Returns: +# Hash - indexed by policy priority, the value is an array of policy ID's +sub getPolicy +{ + my ($server,$sessionData) = @_; + my $log = defined($server->{'config'}{'logging'}{'policies'}); + + + $server->log(LOG_DEBUG,"[POLICIES] Going to resolve session data into policy: ".Dumper($sessionData)) if ($log); + + # Start with blank policy list + my %matchedPolicies = (); + + + # Grab policy members from database + my $policyMembers = getPolicyMembers($server,$log); + if (ref($policyMembers) ne "ARRAY") { + $server->log(LOG_DEBUG,"[POLICIES] Error while retriving policy members: $policyMembers"); + return \%matchedPolicies; + } + + # Process the Members + foreach my $policyMember (@{$policyMembers}) { + # Make debugging a bit easier + my $debugTxt = sprintf('[ID:%s/Name:%s]',$policyMember->{'ID'},$policyMember->{'Name'}); + + # + # Source Test + # + my $sourceMatch = 0; + + # No source or "any" + if (!defined($policyMember->{'Source'}) || lc($policyMember->{'Source'}) eq "any") { + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Source not defined or 'any', explicit match: matched=1") if ($log); + $sourceMatch = 1; + + } else { + # Split off sources + my @rawSources = split(/,/,$policyMember->{'Source'}); + + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Main policy sources '".join(',',@rawSources)."'") if ($log); + + # Default to no match + my $history = {}; # Used to track depth & loops + foreach my $item (@rawSources) { + # Process item + my $res = policySourceItemMatches($server,$debugTxt,$history,$item,$sessionData); + # Check for error + if ($res < 0) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Error while processing source item '$item', skipping..."); + $sourceMatch = 0; + last; + # Check for success + } elsif ($res == 1) { + $sourceMatch = 1; + # Check for failure, 0 and anything else + } else { + $sourceMatch = 0; + last; + } + } + } + + $server->log(LOG_INFO,"[POLICIES] $debugTxt: Source matching result: matched=$sourceMatch") if($log); + # Check if we passed the tests + next if (!$sourceMatch); + + # + # Destination Test + # + my $destinationMatch = 0; + + # No destination or "any" + if (!defined($policyMember->{'Destination'}) || lc($policyMember->{'Destination'}) eq "any") { + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Destination not defined or 'any', explicit match: matched=1") if ($log); + $destinationMatch = 1; + + } else { + # Split off destinations + my @rawDestinations = split(/,/,$policyMember->{'Destination'}); + + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Main policy destinations '".join(',',@rawDestinations)."'") if ($log); + + # Parse in group data + my $history = {}; # Used to track depth & loops + foreach my $item (@rawDestinations) { + # Process item + my $res = policyDestinationItemMatches($server,$debugTxt,$history,$item,$sessionData); + # Check for error + if ($res < 0) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Error while processing destination item '$item', skipping..."); + $destinationMatch = 0; + last; + # Check for success + } elsif ($res == 1) { + $destinationMatch = 1; + # Check for failure, 0 and anything else + } else { + $destinationMatch = 0; + last; + } + } + } + $server->log(LOG_INFO,"[POLICIES] $debugTxt: Destination matching result: matched=$destinationMatch") if ($log); + # Check if we passed the tests + next if (!$destinationMatch); + + push(@{$matchedPolicies{$policyMember->{'Priority'}}},$policyMember->{'PolicyID'}); + } + + # If we logging, display a list + if ($log) { + foreach my $prio (sort keys %matchedPolicies) { + $server->log(LOG_DEBUG,"[POLICIES] END RESULT: prio=$prio => policy ids: ".join(',',@{$matchedPolicies{$prio}})); + } + } + + return \%matchedPolicies; +} + + +# Return an array of the policy members from the database +# Returns: +# Array - array of policy members +sub getPolicyMembers +{ + my ($server,$log) = @_; + + + # Check cache +# my ($cache_res,$cache) = cacheGetComplexKeyPair('Policies','Members'); +# if ($cache_res) { +# return awitpt::cache::Error(); +# } +# return $cache if (defined($cache)); + + # Grab all the policy members + my $sth = DBSelect(' + SELECT + @TP@policies.Name, @TP@policies.Priority, @TP@policies.Disabled AS PolicyDisabled, + @TP@policy_members.ID, @TP@policy_members.PolicyID, @TP@policy_members.Source, + @TP@policy_members.Destination, @TP@policy_members.Disabled AS MemberDisabled + FROM + @TP@policies, @TP@policy_members + WHERE + @TP@policies.Disabled = 0 + AND @TP@policy_members.Disabled = 0 + AND @TP@policy_members.PolicyID = @TP@policies.ID + '); + if (!$sth) { + $server->log(LOG_DEBUG,"[POLICIES] Error while selecing policy members from database: ". + awitpt::db::dblayer::Error()); + return undef; + } + + # Loop with results + my @policyMembers; + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), + qw( Name Priority PolicyDisabled ID PolicyID Source Destination MemberDisabled ) + )) { + + # Log what we see + if ($row->{'PolicyDisabled'} eq "1") { + $server->log(LOG_DEBUG,"[POLICIES] Policy '".$row->{'Name'}."' is disabled") if ($log); + } elsif ($row->{'MemberDisabled'} eq "1") { + $server->log(LOG_DEBUG,"[POLICIES] Policy member item with ID '".$row->{'ID'}."' is disabled") if ($log); + } else { + $server->log(LOG_DEBUG,"[POLICIES] Found policy member with ID '".$row->{'ID'}."' in policy '".$row->{'Name'}."'") if ($log); + push(@policyMembers, $row); + } + } + + # Cache this +# $cache_res = cacheStoreComplexKeyPair('Policies','Members',\@policyMembers); +# if ($cache_res) { +# return awitpt::cache::Error(); +# } + + return \@policyMembers; +} + + + + +# Get group members from group name +sub getGroupMembers +{ + my $group = shift; + + + # Check cache + my ($cache_res,$cache) = cacheGetKeyPair('Policies/Groups/Name-to-Members',$group); + if ($cache_res) { + return awitpt::cache::Error(); + } + if (defined($cache)) { + my @groupMembers = split(/,/,$cache); + return \@groupMembers; + } + + # Grab group members + my $sth = DBSelect(' + SELECT + @TP@policy_group_members.Member + FROM + @TP@policy_groups, @TP@policy_group_members + WHERE + @TP@policy_groups.Name = ? + AND @TP@policy_groups.ID = @TP@policy_group_members.PolicyGroupID + AND @TP@policy_groups.Disabled = 0 + AND @TP@policy_group_members.Disabled = 0 + ', + $group + ); + if (!$sth) { + return awitpt::db::dblayer::Error(); + } + # Pull in groups + my @groupMembers; + while (my $row = hashifyLCtoMC($sth->fetchrow_hashref(), qw( Member ))) { + push(@groupMembers,$row->{'Member'}); + } + + # Cache this + $cache_res = cacheStoreKeyPair('Policies/Groups/Name-to-Members',$group,join(',',@groupMembers)); + if ($cache_res) { + return awitpt::cache::Error(); + } + + return \@groupMembers; +} + + +# Check if this source item matches, this function automagically resolves groups aswell +sub policySourceItemMatches +{ + my ($server,$debugTxt,$history,$rawItem,$sessionData) = @_; + my $log = defined($server->{'config'}{'logging'}{'policies'}); + + + # Rip out negate if we have it, and clean the item + my ($negate,$tmpItem) = ($rawItem =~ /^(!)?(.*)/); + # See if we match %, if we do its a group + my ($isGroup,$item) = ($tmpItem =~ /^(%)?(.*)/); + # IPv6 match components + my $v6c = '[a-f\d]{1,4}'; + my $v6cg = "(?:$v6c:){0,6}"; + my $v6c1 = "$v6cg?:?:?$v6cg?(?:$v6c)?"; + my $v6m = '(?:\/\d{1,3})'; + my $v6 = "$v6c1$v6m?"; + + # Check if this is a group + my $match = 0; + if ($isGroup) { + # Make sure we're not looping + if (defined($history->{$item})) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Source policy group '$item' appears to be used more than once, possible loop, aborting!"); + return -1; + } + + # We going deeper, record the depth + $history->{$item} = keys(%{$history}); + # Check if we not tooo deep + if ($history->{$item} > 5) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: This source policy is recursing too deep, aborting!"); + return -1; + } + + # Get group members + my $groupMembers = getGroupMembers($item); + if (ref $groupMembers ne "ARRAY") { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Error '$groupMembers' while retrieving group members for source group '$item'"); + return -1; + } + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Group '$item' has ".@{$groupMembers}." source(s) => ".join(',',@{$groupMembers})) if ($log); + # Check if actually have any + if (@{$groupMembers} > 0) { + foreach my $gmember (@{$groupMembers}) { + # Process this group member + my $res = policySourceItemMatches($server,"$debugTxt=>(group:$item)",$history,$gmember,$sessionData); + # Check for hard error + if ($res < 0) { + return $res; + # Check for match + } elsif ($res) { + $match = 1; + last; + } + } + } else { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: No group members for source group '$item'"); + } + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt=>(group:$item): Source group result: matched=$match") if ($log); + + # Normal member + } else { + my $res = 0; + + # Match IPv4 or IPv6 + if ( + $item =~ /^(?:\d{1,3})(?:\.(?:\d{1,3})(?:\.(?:\d{1,3})(?:\.(?:\d{1,3}))?)?)?(?:\/(\d{1,2}))?$/ || + $item =~ /^$v6$/i + ) { + # See if we get an object from + my $matchRange = new awitpt::netip($item); + if (!defined($matchRange)) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: - Resolved source '$item' to a IP/CIDR specification, but its INVALID: ".awitpt::netip::Error()); + return -1; + } + # Check if IP is within the range + $res = $sessionData->{'_ClientAddress'}->is_within($matchRange); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a IP/CIDR specification, match = $res") if ($log); + + # Match peer IPv4 or IPv6 (the server requesting the policy) + } elsif ( + $item =~ /^\[((?:\d{1,3})(?:\.(?:\d{1,3})(?:\.(?:\d{1,3})(?:\.(?:\d{1,3}))?)?)?(?:\/(\d{1,2}))?)\]$/ || + $item =~ /^\[($v6)\]$/i + ) { + # We don't want the [ and ] + my $cleanItem = $1; + + # See if we get an object from + my $matchRange = new awitpt::netip($cleanItem); + if (!defined($matchRange)) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: - Resolved source '$item' to a PEER IP/CIDR specification, but its INVALID: ".awitpt::netip::Error()); + return -1; + } + if ($server->{'server'}->{'peer_type'} eq "TCP") { + # Check if IP is within the range + $res = $sessionData->{'_PeerAddress'}->is_within($matchRange); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a PEER IP/CIDR specification, match = $res") if ($log); + } else { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: - Trying to match source '$item' to a PEER IP/CIDR specification when peer type is '".$server->{'server'}->{'peer_type'}."'") if ($log); + return -1; + } + + + # Match SASL user, must be above email addy to match SASL usernames in the same format as email addies + } elsif ($item =~ /^\$\S+$/) { + $res = saslUsernameMatches($sessionData->{'SASLUsername'},$item); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a SASL user specification, match = $res") if ($log); + + # Match blank email addy + } elsif ($item eq "@") { + $res = 1 if ($sessionData->{'Sender'} eq ""); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a email blank address specification, match = $res") if ($log); + + # Match email addy + } elsif ($item =~ /^\S*@\S+$/) { + $res = emailAddressMatches($sessionData->{'Sender'},$item); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a email address specification, match = $res") if ($log); + + # Match domain name (for reverse dns) + } elsif ($item =~ /^\.?(?:[a-z0-9\-_\*]+\.)+[a-z0-9]+$/i) { + $res = reverseDNSMatches($sessionData->{'ClientReverseName'},$item); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved source '$item' to a reverse dns specification, match = $res") if ($log); + + # Not valid + } else { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: - Source '".$item."' is not a valid specification"); + } + + $match = 1 if ($res); + } + + # Check the result, if its undefined or 0, return 0, if its 1 return 1 + # !1 == undef + return ($negate ? !$match : $match) ? 1 : 0; +} + + + +# Check if this destination item matches, this function automagically resolves groups aswell +sub policyDestinationItemMatches +{ + my ($server,$debugTxt,$history,$rawItem,$sessionData) = @_; + my $log = defined($server->{'config'}{'logging'}{'policies'}); + + + # Rip out negate if we have it, and clean the item + my ($negate,$tmpItem) = ($rawItem =~ /^(!)?(.*)/); + # See if we match %, if we do its a group + my ($isGroup,$item) = ($tmpItem =~ /^(%)?(.*)/); + + # Check if this is a group + my $match = 0; + if ($isGroup) { + # Make sure we're not looping + if (defined($history->{$item})) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Destination policy group '$item' appears to be used more than once, possible loop, aborting!"); + return -1; + } + + # We going deeper, record the depth + $history->{$item} = keys(%{$history}); + # Check if we not tooo deep + if ($history->{$item} > 5) { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: This destination policy is recursing too deep, aborting!"); + return -1; + } + + # Get group members + my $groupMembers = getGroupMembers($item); + if (ref $groupMembers ne "ARRAY") { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: Error '$groupMembers' while retrieving group members for destination group '$item'"); + return -1; + } + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: Group '$item' has ".@{$groupMembers}." destination(s) => ".join(',',@{$groupMembers})) if ($log); + # Check if actually have any + if (@{$groupMembers} > 0) { + foreach my $gmember (@{$groupMembers}) { + # Process this group member + my $res = policyDestinationItemMatches($server,"$debugTxt=>(group:$item)",$history,$gmember,$sessionData); + # Check for hard error + if ($res < 0) { + return $res; + # Check for match + } elsif ($res) { + $match = 1; + last; + } + } + } else { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: No group members for destination group '$item'"); + } + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt=>(group:$item): Destination group result: matched=$match") if ($log); + + # Normal member + } else { + my $res = 0; + + # Match email addy + if ($item =~ /^!?\S*@\S+$/) { + $res = emailAddressMatches($sessionData->{'Recipient'},$item); + $server->log(LOG_DEBUG,"[POLICIES] $debugTxt: - Resolved destination '$item' to a email address specification, match = $res") if ($log); + + } else { + $server->log(LOG_WARN,"[POLICIES] $debugTxt: - Destination '$item' is not a valid specification"); + } + + $match = 1 if ($res); + } + + # Check the result, if its undefined or 0, return 0, if its 1 return 1 + # !1 == undef + return ($negate ? !$match : $match) ? 1 : 0; +} + + + +# Check if first arg lies within the scope of second arg email/domain +sub emailAddressMatches +{ + my ($email,$template) = @_; + + + # Sender may be blank, in the case of <> + return 0 if ($email eq ""); + + my $match = 0; + + # Strip email addy + my ($email_user,$email_domain) = ($email =~ /^(\S+)@(\S+)$/); + my ($template_user,$template_domain) = ($template =~ /^(\S*)@(\S+)$/); + + # Make sure its all lowercase + $template_user = lc($template_user); + $template_domain = lc($template_domain); + + # Replace all .'s with \.'s + $template_user =~ s/\./\\./g; + $template_domain =~ s/\./\\./g; + + # Change *'s into a proper regex expression + $template_user =~ s/\*/\\S*/g; + $template_domain =~ s/\*/\\S*/g; + + # Check if we have a match + if ($email_domain =~ /^$template_domain$/) { + if (($email_user =~ /^$template_user$/) || $template_user eq "") { + $match = 1; + } + } + + return $match; +} + + +# Check if first arg lies within the scope of second arg sasl specification +sub saslUsernameMatches +{ + my ($saslUsername,$template) = @_; + + my $match = 0; + + # Decipher template + my ($template_user) = ($template =~ /^\$(\S+)$/); + + # If there is no SASL username + if (!defined($saslUsername) || $saslUsername eq "") { + # $- is a special case which allows matching against no SASL username + if ($template_user eq '-') { + $match = 1; + } + # Else regex it + } else { + # Make sure its all lowercase + $template_user = lc($template_user); + # Replace all .'s with \.'s + $template_user =~ s/\./\\./g; + # Change *'s into a proper regex expression + $template_user =~ s/\*/\\S*/g; + + if ($saslUsername =~ /^$template_user$/) { + $match = 1; + } + } + + return $match; +} + + +# Check if first arg lies within the scope of second arg reverse dns specification +sub reverseDNSMatches +{ + my ($reverseDNSMatches,$template) = @_; + + my $match = 0; + my $partial = 0; + + # Check if we have a . at the beginning of the line to match partials + if ($template =~ /^\./) { + $partial = 1; + } + + # Replace all .'s with \.'s + $template =~ s/\./\\./g; + # Change *'s into a proper regex expression + $template =~ s/\*/[a-z0-9\-_\.]*/g; + + # Check for partial match + if ($partial) { + if ($reverseDNSMatches =~ /$template$/i) { + $match = 1; + } + # Check for exact match + } else { + if ($reverseDNSMatches =~ /^$template$/i) { + $match = 1; + } + } + + return $match; +} + + +# Encode policy data into session recipient data +sub encodePolicyData +{ + my ($email,$policy) = @_; + + # Generate... #priority=policy_id,policy_id,policy_id;priority2=policy_id2,policy_id2/recipient2@... + my $ret = "<$email>#"; + foreach my $priority (keys %{$policy}) { + $ret .= sprintf('%s=%s;',$priority,join(',',@{$policy->{$priority}})); + } + + return $ret; +} + + +# Decode recipient data into policy data +sub decodePolicyData +{ + my $recipientData = shift; + + + my %recipientToPolicy = (); + # Build policy str list and recipients list + foreach my $item (split(/\//,$recipientData)) { + # Skip over first / + next if ($item eq ""); + + my ($email,$rawPolicy) = ($item =~ /<([^>]*)>#(.*)/); + + # Make sure that the recipient data in the DB is not null, ie. it may + # of been killed by the admin before it updated it + if (defined($email) && defined($rawPolicy)) { + # Loop with raw policies + foreach my $policy (split(/;/,$rawPolicy)) { + # Strip off priority and policy IDs + my ($prio,$policyIDs) = ( $policy =~ /(\d+)=(.*)/ ); + # Pull off policyID's from string + foreach my $pid (split(/,/,$policyIDs)) { + push(@{$recipientToPolicy{$email}{$prio}},$pid); + } + } + } + } + + return \%recipientToPolicy; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/protocols.pm b/ehcp/fixes/policyd/cbp/protocols.pm new file mode 100644 index 0000000..44a6eaa --- /dev/null +++ b/ehcp/fixes/policyd/cbp/protocols.pm @@ -0,0 +1,79 @@ +# Protocols, common stuff +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2007, Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::protocols; + +use strict; +use warnings; + + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( + CBP_CONTINUE + CBP_ERROR + CBP_STOP + CBP_SKIP + + PROTO_PASS + PROTO_OK + PROTO_REJECT + PROTO_DEFER + PROTO_HOLD + PROTO_REDIRECT + PROTO_DISCARD + PROTO_FILTER + PROTO_PREPEND + + PROTO_ERROR + PROTO_DB_ERROR + PROTO_DATA_ERROR +); +@EXPORT_OK = qw( +); + + +use constant { + CBP_CONTINUE => 0, + CBP_ERROR => -1, + CBP_STOP => 1, + CBP_SKIP => 2, + + PROTO_PASS => 1, + PROTO_OK => 2, + PROTO_REJECT => 3, + PROTO_DEFER => 4, + PROTO_HOLD => 5, + PROTO_REDIRECT => 6, + PROTO_DISCARD => 7, + PROTO_FILTER => 8, + PROTO_PREPEND => 9, + + # Errors + PROTO_ERROR => -1001, + PROTO_DB_ERROR => -2001, + PROTO_DATA_ERROR => -2101, +}; + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/protocols/Bizanga.pm b/ehcp/fixes/policyd/cbp/protocols/Bizanga.pm new file mode 100644 index 0000000..4feb41d --- /dev/null +++ b/ehcp/fixes/policyd/cbp/protocols/Bizanga.pm @@ -0,0 +1,294 @@ +# Bizanga protocol support module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::protocols::Bizanga; + + +use strict; +use warnings; + + +use POSIX; +use URI::Escape; + +use cbp::version; +use cbp::logging; +use awitpt::db::dblayer; +use awitpt::netip; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Bizanga Protocol Support Module", + init => \&init, + priority => 50, + protocol_init => \&protocol_init, + protocol_check => \&protocol_check, + protocol_parse => \&protocol_parse, + protocol_response => \&protocol_response, + protocol_getresponse => \&protocol_getresponse, + protocol_validate => \&protocol_validate, +}; + +# Module configuration +my %config; + + +# Response data +my ($response,$response_data); + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 1; + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Protocol(Bizanga): enabled"); + $config{'enable'} = 1; + } +} + + +# Initialize per request data... +sub protocol_init { + $response = undef; + $response_data = undef; +} + + +# Check the buffer to see if this protocol is what we want +sub protocol_check { + my ($server,$buffer) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # If we not enabled, don't do anything + return undef if (!$config{'enable'}); + + # Ignore leading blank lines + $buffer =~ s/^(?:\015?\012)+//; + + # Check we have at least one line + return 0 if (!($buffer =~ /\012/)); + + # Check for HTTP header + if ($buffer =~ /^GET [^\s]+ HTTP\/(\d+)\.(\d+)\015?\012/) { + my ($a,$b) = ($1,$2); + + $server->log(LOG_DEBUG,"[PROTOCOLS/Bizanga] Possible Bizanga (HTTP/$a.$b) protocol") if ($log); + + if ($buffer =~ /\015?\012\015?\012/) { + $server->log(LOG_INFO,"[Protocols/Bizanga] Identified Bizanga (HTTP/$a.$b) protocol") if ($log); + return 1; + } + } + + return 0; +} + + +# Process buffer into sessionData +sub protocol_parse { + my ($server,$buffer) = @_; + # Get this instance we're working with + my $serverInstance = $server->{'server'}; + # Are we going to log? + my $log = defined($server->{'config'}{'logging'}{'bizanga'}); + + my %res; + + # remove /? + $buffer =~ s/^\w+ \/\?//; + + # Loop with each line + foreach my $item (split /[& ]/, $buffer) { + # If we don't get a pair, b0rk + last unless $item =~ s/^([^=]+)=(.*)$//; + + # Clean up strings, and shove into hash + my ($param,$value) = (uri_unescape($1),uri_unescape($2)); + $res{$param} = $value; + $server->log(LOG_DEBUG,"[BIZANGA] Request parameter '$param' with value '$value'") if ($log); + } + + # We need some extra info to make everything else happy... + $res{'protocol_state'} = "RCPT" if (!defined($res{'protocol_state'})); + + $res{'_protocol_transport'} = "HTTP"; + + return \%res; +} + + +# Process response +sub protocol_response +{ + my ($server,$resp,$data) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # Check protocol responses... + if ($resp == PROTO_PASS) { + $response = "200"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_PASS with response '$response':'$response_data'") if ($log); + return CBP_CONTINUE; + + } elsif ($resp == PROTO_OK) { + $response = "200"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_OK with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_REJECT) { + if ($data =~ /^(5[0-9]{2}) (.*)/) { + $response = "403"; + $response_data = $2; + } else { + $response = "403"; + $response_data = $data; + } + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_REJECT with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DEFER) { + if ($data =~ /^(4[0-9]{2}) (.*)/) { + $response = "401"; + $response_data = $2; + } else { + $response = "401"; + $response_data = $data; + } + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_DEFER with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_HOLD) { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Unsupported return PROTO_HOLD"); + return CBP_STOP; + + } elsif ($resp == PROTO_REDIRECT) { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Unsupported return PROTO_REDIRECT"); + return CBP_STOP; + + } elsif ($resp == PROTO_DISCARD) { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Unsupported return PROTO_DISCARD"); + return CBP_STOP; + + } elsif ($resp == PROTO_FILTER) { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Unsupported return PROTO_FILTER"); + return CBP_STOP; + + } elsif ($resp == PROTO_PREPEND) { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Unsupported return PROTO_PREPEND"); + return CBP_CONTINUE; + + } elsif ($resp == PROTO_ERROR) { + $response = "503"; + $response_data = defined($data) ? $data : "Unknown error"; + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DB_ERROR) { + $response = "504"; + $response_data = defined($data) ? $data : "Database error"; + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_DB_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DATA_ERROR) { + $response = "502"; + $response_data = defined($data) ? $data : "Database record error"; + $server->log(LOG_DEBUG,"[PROTOCOL/Bizanga] Received PROTO_DATA_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + # Fallthrough + } else { + $server->log(LOG_ERR,"[PROTOCOL/Bizanga] Cannot understand response code '$resp'"); + return CBP_ERROR; + } +} + + +# Get protocol response +sub protocol_getresponse +{ + my $resp; + + + # If its undefined, set to DUNNO + if (!defined($response)) { + $response = "200"; + $response_data = "Pass"; + } + + # Check if we have any additional data + $response_data = "" if (!defined($response_data)); + + # Get timestamp + my $timestamp = strftime("%a, %d %b %Y %H:%M:%S %Z",localtime()); + + # Construct response + $resp = "HTTP/1.0 $response $response_data +Date: $timestamp +Content-Length: 0 +Content-Type: text/plain +Server: Policyd/".VERSION." (Cluebringer) +Connection: close +"; + + return "$resp\n" +} + + +# Validate protocol data +sub protocol_validate { + my ($server,$request) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # Check params + if (!awitpt::netip::is_valid($request->{'client_address'})) { + my $client_address = defined($request->{'client_address'}) ? "'".$request->{'client_address'}."'" : "undef"; + $server->log(LOG_DEBUG,"[PROTOCOLS/Bizanga] Error, parameter 'client_address' cannot be $client_address") if ($log); + return "Required parameter 'client_address' was not found or invalid format"; + } + + if (!defined($request->{'sender'}) || !($request->{'sender'} =~ /^(?:\S+@\S+|)$/) ) { + my $sender = defined($request->{'sender'}) ? "'".$request->{'sender'}."'" : "undef"; + $server->log(LOG_DEBUG,"[PROTOCOLS/Bizanga] Error, parameter 'sender' cannot be $sender") if ($log); + return "Required parameter 'sender' was not found or invalid format"; + } + + if (!defined($request->{'recipient'}) || !($request->{'recipient'} =~ /^\S+@\S+$/) ) { + my $recipient = defined($request->{'recipient'}) ? "'".$request->{'recipient'}."'" : "undef"; + $server->log(LOG_DEBUG,"[PROTOCOLS/Bizanga] Error, parameter 'recipient' cannot be $recipient") if ($log); + return "Required parameter 'recipient' was not found or invalid format"; + } +} + + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/protocols/Milter.pm b/ehcp/fixes/policyd/cbp/protocols/Milter.pm new file mode 100644 index 0000000..0c9dd51 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/protocols/Milter.pm @@ -0,0 +1,366 @@ +# Milter protocol support module +# Copyright (C) 2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::protocols::Milter; + + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Milter Protocol Suppot Module", + init => \&init, + priority => 75, + protocol_init => \&protocol_init, + protocol_check => \&protocol_check, + protocol_parse => \&protocol_parse, + protocol_response => \&protocol_response, + protocol_getresponse => \&protocol_getresponse, + protocol_validate => \&protocol_validate, +}; + + +# Milter constants (from Sendmail-PMilter) +# Protocols +use constant SMFIA_UNKNOWN => 'U'; +use constant SMFIA_UNIX => 'L'; +use constant SMFIA_INET => '4'; +use constant SMFIA_INET6 => '6'; +# Commands +use constant SMFIC_ABORT => 'A'; +use constant SMFIC_BODY => 'B'; +use constant SMFIC_CONNECT => 'C'; +use constant SMFIC_MACRO => 'D'; +use constant SMFIC_BODYEOB => 'E'; +use constant SMFIC_HELO => 'H'; +use constant SMFIC_HEADER => 'L'; +use constant SMFIC_MAIL => 'M'; +use constant SMFIC_EOH => 'N'; +use constant SMFIC_OPTNEG => 'O'; +use constant SMFIC_RCPT => 'R'; +use constant SMFIC_QUIT => 'Q'; +use constant SMFIC_DATA => 'T'; # v4 +use constant SMFIC_UNKNOWN => 'U'; # v3 +# Replies +use constant SMFIR_ADDRCPT => '+'; +use constant SMFIR_DELRCPT => '-'; +use constant SMFIR_ACCEPT => 'a'; +use constant SMFIR_REPLBODY => 'b'; +use constant SMFIR_CONTINUE => 'c'; +use constant SMFIR_DISCARD => 'd'; +use constant SMFIR_ADDHEADER => 'h'; +use constant SMFIR_INSHEADER => 'i'; # v3, or v2 and Sendmail 8.13+ +use constant SMFIR_CHGHEADER => 'm'; +use constant SMFIR_PROGRESS => 'p'; +use constant SMFIR_QUARANTINE => 'q'; +use constant SMFIR_REJECT => 'r'; +use constant SMFIR_SETSENDER => 's'; +use constant SMFIR_TEMPFAIL => 't'; +use constant SMFIR_REPLYCODE => 'y'; +# Protocol flags? +use constant SMFIP_NOCONNECT => 0x01; +use constant SMFIP_NOHELO => 0x02; +use constant SMFIP_NOMAIL => 0x04; +use constant SMFIP_NORCPT => 0x08; +use constant SMFIP_NOBODY => 0x10; +use constant SMFIP_NOHDRS => 0x20; +use constant SMFIP_NOEOH => 0x40; +use constant SMFIP_NONE => 0x7F; + +# Reply constants +use constant SMFIS_CONTINUE => 100; +use constant SMFIS_REJECT => 101; +use constant SMFIS_DISCARD => 102; +use constant SMFIS_ACCEPT => 103; +use constant SMFIS_TEMPFAIL => 104; + +use constant SMFIF_ADDHDRS => 0x01; +use constant SMFIF_CHGBODY => 0x02; +use constant SMFIF_ADDRCPT => 0x04; +use constant SMFIF_DELRCPT => 0x08; +use constant SMFIF_CHGHDRS => 0x10; +use constant SMFIF_MODBODY => SMFIF_CHGBODY; + +use constant SMFI_V1_ACTS => SMFIF_ADDHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT; +use constant SMFI_V2_ACTS => SMFI_V1_ACTS|SMFIF_CHGHDRS; +use constant SMFI_CURR_ACTS => SMFI_V2_ACTS; + + +# Module configuration +my %config; + +# Response data +my ($response,$response_data); + + +# Create a child specific context +sub init +{ + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 1; + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Protocol(Milter): enabled"); + $config{'enable'} = 1; + } +} + + + +# Initialize per request data... +sub protocol_init +{ + $response = undef; + $response_data = undef; +} + + + +# Check the buffer to see if this protocol is what we want +sub protocol_check +{ + my ($server,$buffer) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # If we not enabled, don't do anything + return undef if (!$config{'enable'}); + + # Check that we have at least 5 bytes , len = 4 , cmd = 1 + return 0 if (length($buffer) < 5); + + + # Pull off length & command + my $rawLen = substr($buffer,0,4); + my $rawCmd = substr($buffer,4,1); + + # Pull out len and see if its valid + my $len = unpack('N',$rawLen); + if ($len < 1 || $len > 131072) { + return 0; + } + + # Pull in raw data + my $rawData = substr($buffer,5, $len - 1); + + # Check if this is a protocol negotiation, if it is ... WE FOUND IT! + if ($rawCmd eq SMFIC_OPTNEG) { + # Packet MUST be 12 bytes long + if (length($rawData) == 12) { + # Process protocol + my ($ver, $sActions, $sProtocols) = unpack('NNN', $rawData); + + # Check version + if ($ver == 2) { + $server->log(LOG_INFO,"[PROTOCOLS/Milter] Identified Milter protocol version '$ver'") if ($log); + + my $protocols = SMFIP_NONE; + $protocols &= ~SMFIP_NOCONNECT; # CONNECT callback + $protocols &= ~SMFIP_NOMAIL; # MAIL FROM callback + $protocols &= ~SMFIP_NOHELO; # HELO callback + $protocols &= ~SMFIP_NORCPT; # RCPT TO callback + $protocols &= ~SMFIP_NOBODY; # BODY callback + $protocols &= ~SMFIP_NOHDRS; # HEADER callback + $protocols &= ~SMFIP_NOEOH; # EOH callback + + my $callback_flags = SMFI_V2_ACTS; + + # Reply... + send_packet(SMFIC_OPTNEG, + pack("NNN", $ver, $callback_flags & $sActions, $protocols & $sProtocols) + ); + + return 1; + } else { + $server->log(LOG_INFO,"[PROTOCOLS/Milter] Unknown Milter protocol version '$ver'") if ($log); + } + + } else { + $server->log(LOG_INFO,"[PROTOCOLS/Milter] Milter SMFIC_OPTNEG packet wrong size") if ($log); + } + + } + + + return 0; +} + + + +# Process buffer into sessionData +sub protocol_parse +{ + my ($server,$oldbuffer) = @_; + + my %res; + + + # Buffer + my $buffer = ""; + + # Create an FDSET for use in select() + my $fdset = ""; + vec($fdset, fileno(STDIN), 1) = 1; + # Loop + while (1) { + $server->log(LOG_DEBUG,"NK DEBUG: LOOP"); + + # Check for timeout.... + my $n = select($fdset,undef,undef,$server->{'server'}->{'timeout'}); + if (!$n) { + $server->log(LOG_WARN,"[PROTOCOLS/Milter] Timeout from => Peer: ".$server->{'server'}->{'peeraddr'}.":". + $server->{'server'}->{'peerport'}.", Local: ".$server->{'server'}->{'sockaddr'}.":".$server->{'server'}->{'sockport'}); + return; + } + + + # Read in 8kb + $n = sysread(STDIN,$buffer,8192,length($buffer)); + if (!$n) { + my $reason = defined($n) ? "Client closed connection" : "sysread[$!]"; + $server->log(LOG_WARN,"[CBPOLICYD/Milter] $reason => Peer: ".$server->{'server'}->{'peeraddr'}.":".$server->{'server'}->{'peerport'}. + ", Local: ".$server->{'server'}->{'sockaddr'}.":".$server->{'server'}->{'sockport'}); + return; + } + + $server->log(LOG_DEBUG,"NK DEBUG: ".unpack("H*",$buffer)); + +####################### + # Check that we have at least 5 bytes , len = 4 , cmd = 1 + next if (length($buffer) < 5); + + # Pull off length & command + my $rawLen = substr($buffer,0,4); + my $rawCmd = substr($buffer,4,1); + + # Pull out len and see if its valid + my $len = unpack('N',$rawLen); + if ($len < 1 || $len > 131072) { + return 0; + } + + # Pull in raw data + my $rawData = substr($buffer,5, $len - 1); + + $server->log(LOG_DEBUG,"NK DEBUG: Len = $len, Command = $rawCmd: $rawData"); + + use Data::Dumper; + + # Check packet type + if ($rawCmd eq SMFIC_MACRO) { + $server->log(LOG_DEBUG,"NK DEBUG: SMFIC_MACRO: ".Dumper(split_buffer($rawData))); + } + } + + + $res{'_protocol_transport'} = "Milter"; + + return \%res; +} + + + +# Process response +sub protocol_response +{ + my ($server,$resp,$data) = @_; + + # Not yet implemented + return CBP_CONTINUE; +} + + + +# Get protocol response +sub protocol_getresponse +{ + my $resp; + + + # If its undefined, set to DUNNO + if (!defined($response)) { + $response = "DUNNO"; + } + + # Build string we need + $resp = "action=$response" . ( defined($response_data) ? " $response_data" : "" ); + + return "$resp\n\n" +} + + +# Validate protocol data +sub protocol_validate +{ + my ($server,$request) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + return "protocol 'Milter' not supported at present"; +} + + + +# Function to build and send a packet +sub send_packet +{ + my ($code,$data) = @_; + + # Blank data if its undefined + $data = '' unless defined($data); + + # Encode lengh in network byte order + my $len = pack('N', length($data) + 1); + + # Write + syswrite(STDOUT,$len); + syswrite(STDOUT,$code); + syswrite(STDOUT,$data); +} + + + +# Function to split up buffer +sub split_buffer +{ + my $buffer = shift; + + # Remove trailing NUL + $buffer =~ s/\0$//; + # Split on NULL + my @results = split(/\0/, $buffer); + + return @results; +}; + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/protocols/Postfix.pm b/ehcp/fixes/policyd/cbp/protocols/Postfix.pm new file mode 100644 index 0000000..ace9b7a --- /dev/null +++ b/ehcp/fixes/policyd/cbp/protocols/Postfix.pm @@ -0,0 +1,285 @@ +# Postfix SMTP Access delegation protocol support module +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::protocols::Postfix; + + +use strict; +use warnings; + + +use cbp::logging; +use awitpt::db::dblayer; +use awitpt::netip; +use cbp::protocols; + + +# User plugin info +our $pluginInfo = { + name => "Postfix SMTP Access Delegation Protocol Suppot Module", + init => \&init, + priority => 50, + protocol_init => \&protocol_init, + protocol_check => \&protocol_check, + protocol_parse => \&protocol_parse, + protocol_response => \&protocol_response, + protocol_getresponse => \&protocol_getresponse, + protocol_validate => \&protocol_validate, +}; + + +# Module configuration +my %config; + +# Response data +my ($response,$response_data); + + +# Create a child specific context +sub init { + my $server = shift; + my $inifile = $server->{'inifile'}; + + # Defaults + $config{'enable'} = 1; + + # Check if enabled + if ($config{'enable'} =~ /^\s*(y|yes|1|on)\s*$/i) { + $server->log(LOG_NOTICE," => Protocol(Postfix): enabled"); + $config{'enable'} = 1; + } +} + + +# Initialize per request data... +sub protocol_init { + $response = undef; + $response_data = undef; +} + + +# Check the buffer to see if this protocol is what we want +sub protocol_check { + my ($server,$buffer) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # If we not enabled, don't do anything + return undef if (!$config{'enable'}); + + # Check we have at least one line + return 0 if (!($buffer =~ /\012/)); + + # Check for policy protocol + if ($buffer =~ /^\w+=[^\012]+\015?\012/) { + + $server->log(LOG_DEBUG,"[PROTOCOLS/Postfix] Possible Postfix protocol") if ($log); + + if ($buffer =~ /\015?\012\015?\012/) { + $server->log(LOG_INFO,"[PROTOCOLS/Postfix] Identified Postfix protocol") if ($log); + return 1; + } + } + + return 0; +} + + +# Process buffer into sessionData +sub protocol_parse { + my ($server,$buffer) = @_; + # Get this instance we're working with + my $serverInstance = $server->{'server'}; + + my %res; + + # Loop with each line + foreach my $line (split /\015?\012/, $buffer) { + # If we don't get a pair, b0rk + last unless $line =~ s/^([^=]+)=(.*)$//; + $res{$1} = $2; + } + + $res{'_protocol_transport'} = "Postfix"; + + return \%res; +} + + +# Process response +sub protocol_response +{ + my ($server,$resp,$data) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # Check protocol responses... + if ($resp == PROTO_PASS) { + $response = "DUNNO"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_PASS with response '$response':'$response_data'") if ($log); + return CBP_CONTINUE; + + } elsif ($resp == PROTO_OK) { + $response = "OK"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_OK with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_REJECT) { + if ($data =~ /^(5[0-9]{2}) (.*)/) { + $response = $1; + $response_data = $2; + } else { + $response = "REJECT"; + $response_data = $data; + } + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_REJECT with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DEFER) { + if ($data =~ /^(4[0-9]{2}) (.*)/) { + $response = $1; + $response_data = $2; + } else { + $response = "DEFER"; + $response_data = $data; + } + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_DEFER with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_HOLD) { + $response = "HOLD"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_HOLD with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_REDIRECT) { + $response = "REDIRECT"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_REDIRECT with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DISCARD) { + $response = "DISCARD"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_DISCARD with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_FILTER) { + $response = "FILTER"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_FILTER with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_PREPEND) { + $response = "PREPEND"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_PREPEND with response '$response':'$response_data'") if ($log); + return CBP_CONTINUE; + + } elsif ($resp == PROTO_ERROR) { + $response = "DEFER"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DB_ERROR) { + $response = "DEFER"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_DB_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + } elsif ($resp == PROTO_DATA_ERROR) { + $response = "DEFER"; + $response_data = $data; + $server->log(LOG_DEBUG,"[PROTOCOL/Postfix] Received PROTO_DATA_ERROR with response '$response':'$response_data'") if ($log); + return CBP_STOP; + + # Fallthrough + } else { + $server->log(LOG_ERR,"[PROTOCOL/Postfix] Cannot understand response code '$resp'"); + return CBP_ERROR; + } +} + + +# Get protocol response +sub protocol_getresponse +{ + my $resp; + + + # If its undefined, set to DUNNO + if (!defined($response)) { + $response = "DUNNO"; + } + + # Build string we need + $resp = "action=$response" . ( defined($response_data) ? " $response_data" : "" ); + + return "$resp\n\n" +} + + +# Validate protocol data +sub protocol_validate { + my ($server,$request) = @_; + my $log = defined($server->{'config'}{'logging'}{'protocols'}); + + + # Check params + if (!defined($request->{'protocol_state'})) { + $server->log(LOG_ERR,"[PROTOCOLS/Postfix] Error, parameter 'protocol_state' must be defined") if ($log); + return "required parameter 'protocol_state' was not found"; + } + + if (!awitpt::netip::is_valid($request->{'client_address'})) { + my $client_address = defined($request->{'client_address'}) ? "'".$request->{'client_address'}."'" : "undef"; + $server->log(LOG_ERR,"[PROTOCOLS/Postfix] Error, parameter 'client_address' cannot be $client_address") if ($log); + return "required parameter 'client_address' was not found or invalid format"; + } + + if (!defined($request->{'sender'}) || !($request->{'sender'} =~ /^(?:\S+@\S+|)$/) ) { + my $sender = defined($request->{'sender'}) ? "'".$request->{'sender'}."'" : "undef"; + $server->log(LOG_ERR,"[PROTOCOLS/Postfix] Error, parameter 'sender' cannot be $sender") if ($log); + return "required parameter 'sender' was not found or invalid format"; + } + + if ($request->{'protocol_state'} eq "RCPT") { + if (!defined($request->{'recipient'}) || !($request->{'recipient'} =~ /^\S+@\S+$/) ) { + my $recipient = defined($request->{'recipient'}) ? "'".$request->{'recipient'}."'" : "undef"; + $server->log(LOG_ERR,"[PROTOCOLS/Postfix] Error, parameter 'recipient' cannot be $recipient") if ($log); + return "required parameter 'recipient' was not found or invalid format"; + } + } + + if (!defined($request->{'instance'}) || $request->{'instance'} eq "") { + my $instance = defined($request->{'instance'}) ? "'".$request->{'instance'}."'" : "undef"; + $server->log(LOG_ERR,"[PROTOCOLS/Postfix] Error, parameter 'instance' cannot be $instance") if ($log); + return "required parameter 'instance' was not found or invalid format"; + } +} + + + + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/system.pm b/ehcp/fixes/policyd/cbp/system.pm new file mode 100644 index 0000000..512873a --- /dev/null +++ b/ehcp/fixes/policyd/cbp/system.pm @@ -0,0 +1,57 @@ +# System functions +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + +package cbp::system; + +use strict; +use warnings; + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT); +@ISA = qw(Exporter); +@EXPORT = qw( + + getIPKey + +); + + +# Get key from IP spec +sub getIPKey +{ + my ($spec,$ip) = @_; + + my $key; + + # Check if spec is ok... + if (defined($spec) && $spec =~ /^\/(\d+)$/) { + my $mask = $1; + + # Grab IP key, the clever way ;) + $key = $ip->copy('cidr' => $mask)->to_network()->to_str(); + } + + return $key; +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/tracking.pm b/ehcp/fixes/policyd/cbp/tracking.pm new file mode 100644 index 0000000..5503d58 --- /dev/null +++ b/ehcp/fixes/policyd/cbp/tracking.pm @@ -0,0 +1,405 @@ +# Message tracking functions +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::tracking; + +use strict; +use warnings; + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( + updateSessionData + getSessionDataFromRequest + getSessionDataFromQueueID +); + + +use awitpt::db::dblayer; +use awitpt::netip; +use cbp::logging; +use cbp::policies; +use POSIX qw( ceil); + +use Data::Dumper; + + +# Database handle +my $dbh = undef; + + +# Get session data from mail_id +sub getSessionDataFromQueueID +{ + my ($server,$queueID,$clientAddress,$sender) = @_; + + + $server->log(LOG_DEBUG,"[TRACKING] Retreiving session data for triplet: $queueID/$clientAddress/$sender"); + + # Pull in session data + my $sth = DBSelect(' + SELECT + Instance, QueueID, + UnixTimestamp, + ClientAddress, ClientName, ClientReverseName, + Protocol, + EncryptionProtocol, EncryptionCipher, EncryptionKeySize, + SASLMethod, SASLSender, SASLUsername, + Helo, + Sender, + Size, + RecipientData + FROM + @TP@session_tracking + WHERE + QueueID = ? + AND ClientAddress = ? + AND Sender = ? + ', + $queueID,$clientAddress,$sender + ); + if (!$sth) { + $server->log(LOG_ERR,"[TRACKING] Failed to select session tracking info: ".awitpt::db::dblayer::Error()); + return -1; + } + + # Fetch row + my $row = $sth->fetchrow_hashref(); + if (!$row) { + $server->log(LOG_ERR,"[TRACKING] No session data"); + return -1; + } + + # Cleanup database record + my $sessionData = hashifyDBSessionData($row); + + # Pull in decoded policy + $sessionData->{'_Recipient_To_Policy'} = decodePolicyData($sessionData->{'RecipientData'}); + + return $sessionData; +} + + +# Get session data +# Params: +# server, request +sub getSessionDataFromRequest +{ + my ($server,$request) = @_; + my $log = defined($server->{'config'}{'logging'}{'tracking'}); + + + # We must have protocol transport + if (!defined($request->{'_protocol_transport'})) { + $server->log(LOG_ERR,"[TRACKING] No protocol transport specified"); + return -1; + } + + # Change size to kbyte, we don't want to use bytes + my $requestSize; + if (defined($request->{'size'})) { + $requestSize = ceil($request->{'size'} / 1024); + } + + my $sessionData; + + # Requesting server address, we need this before the policy call. Only do this for TCP + if ($server->{'server'}->{'peer_type'} eq "TCP") { + $sessionData->{'PeerAddress'} = $request->{'_peer_address'}; + $sessionData->{'_PeerAddress'} = new awitpt::netip($sessionData->{'PeerAddress'}); + if (!defined($sessionData->{'_PeerAddress'})) { + $server->log(LOG_ERR,"[TRACKING] Failed to understand PeerAddress: ".awitpt::netip::Error()); + return -1; + } + } + + # Check protocol + if ($request->{'_protocol_transport'} eq "Postfix") { + my $initSessionData = 0; + + # Check if we need to track the sessions... + if ($server->{'config'}->{'track_sessions'}) { + + # Pull in session data + my $sth = DBSelect(' + SELECT + Instance, QueueID, + UnixTimestamp, + ClientAddress, ClientName, ClientReverseName, + Protocol, + EncryptionProtocol, EncryptionCipher, EncryptionKeySize, + SASLMethod, SASLSender, SASLUsername, + Helo, + Sender, + Size, + RecipientData + FROM + @TP@session_tracking + WHERE + Instance = ? + ', + $request->{'instance'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[TRACKING] Failed to select session tracking info: ".awitpt::db::dblayer::Error()); + return -1; + } + + my $row = $sth->fetchrow_hashref(); + + # If no state information, create everything we need + if (!($sessionData = hashifyDBSessionData($row))) { + + $server->log(LOG_DEBUG,"[TRACKING] No session tracking data exists for request: ".Dumper($request)) if ($log); + + # Should only track sessions from RCPT + if ($request->{'protocol_state'} eq "RCPT") { + DBBegin(); + + # Record tracking info + $sth = DBDo(' + INSERT INTO @TP@session_tracking + ( + Instance,QueueID, + UnixTimestamp, + ClientAddress, ClientName, ClientReverseName, + Protocol, + EncryptionProtocol,EncryptionCipher,EncryptionKeySize, + SASLMethod,SASLSender,SASLUsername, + Helo, + Sender, + Size + ) + VALUES + (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + ', + $request->{'instance'},$request->{'queue_id'},$request->{'_timestamp'},$request->{'client_address'}, + $request->{'client_name'},$request->{'reverse_client_name'},$request->{'protocol_name'}, + $request->{'encryption_protocol'},$request->{'encryption_cipher'},$request->{'encryption_keysize'}, + $request->{'sasl_method'},$request->{'sasl_sender'},$request->{'sasl_username'},$request->{'helo_name'}, + $request->{'sender'},$requestSize + ); + if (!$sth) { + $server->log(LOG_ERR,"[TRACKING] Failed to record session tracking info: ".awitpt::db::dblayer::Error()); + DBRollback(); + return -1; + } + $server->log(LOG_DEBUG,"[TRACKING] Added session tracking information for: ".Dumper($request)) if ($log); + + DBCommit(); + } + # Initialize session data later on, we didn't get anything from the DB + $initSessionData = 1; + } + # If we have no interest in tracking sessions, we must initialize the session data + } else { + $initSessionData = 1; + } + + # Check if we must initialize the session data from the request + if ($initSessionData) { + $sessionData->{'Instance'} = $request->{'instance'}; + $sessionData->{'QueueID'} = $request->{'queue_id'}; + $sessionData->{'ClientAddress'} = $request->{'client_address'}; + $sessionData->{'ClientName'} = $request->{'client_name'}; + $sessionData->{'ClientReverseName'} = $request->{'reverse_client_name'}; + $sessionData->{'Protocol'} = $request->{'protocol_name'}; + $sessionData->{'EncryptionProtocol'} = $request->{'encryption_protocol'}; + $sessionData->{'EncryptionCipher'} = $request->{'encryption_cipher'}; + $sessionData->{'EncryptionKeySize'} = $request->{'encryption_keysize'}; + $sessionData->{'SASLMethod'} = $request->{'sasl_method'}; + $sessionData->{'SASLSender'} = $request->{'sasl_sender'}; + $sessionData->{'SASLUsername'} = $request->{'sasl_username'}; + $sessionData->{'Helo'} = $request->{'helo_name'}; + $sessionData->{'Sender'} = $request->{'sender'}; + $sessionData->{'Size'} = $requestSize; + $sessionData->{'RecipientData'} = ""; + } + + # Set client address.. + $sessionData->{'_ClientAddress'} = new awitpt::netip($sessionData->{'ClientAddress'}); + if (!defined($sessionData->{'_ClientAddress'})) { + $server->log(LOG_ERR,"[TRACKING] Failed to understand ClientAddress: ".awitpt::netip::Error()); + return -1; + } + + # If we in rcpt, caclulate and save policy + if ($request->{'protocol_state'} eq 'RCPT') { + $server->log(LOG_DEBUG,"[TRACKING] Protocol state is 'RCPT', resolving policy...") if ($log); + + $sessionData->{'Recipient'} = $request->{'recipient'}; + + # Get policy + my $policy = getPolicy($server,$sessionData); + if (ref $policy ne "HASH") { + return -1; + } + + $server->log(LOG_DEBUG,"[TRACKING] Policy resolved into: ".Dumper($policy)) if ($log); + + $sessionData->{'Policy'} = $policy; + + # If we in end of message, load policy from data + } elsif ($request->{'protocol_state'} eq 'END-OF-MESSAGE') { + $server->log(LOG_DEBUG,"[TRACKING] Protocol state is 'END-OF-MESSAGE', decoding policy...") if ($log); + # Decode... only if we actually have session data from the DB, which means initSessionData is 0 + if (!$initSessionData) { + $sessionData->{'_Recipient_To_Policy'} = decodePolicyData($sessionData->{'RecipientData'}); + } + + $server->log(LOG_DEBUG,"[TRACKING] Decoded into: ".Dumper($sessionData->{'_Recipient_To_Policy'})) if ($log); + + # This must be updated here ... we may of got actual size + $sessionData->{'Size'} = $requestSize; + # Only get a queue id once we have gotten the message + $sessionData->{'QueueID'} = $request->{'queue_id'}; + } + + # Check for HTTP protocol transport + } elsif ($request->{'_protocol_transport'} eq "HTTP") { + + # Set client address.. + $sessionData->{'ClientAddress'} = $request->{'client_address'}; + $sessionData->{'_ClientAddress'} = new awitpt::netip($sessionData->{'ClientAddress'}); + if (!defined($sessionData->{'_ClientAddress'})) { + $server->log(LOG_ERR,"[TRACKING] Failed to understand ClientAddress: ".awitpt::netip::Error()); + return -1; + } + + $sessionData->{'ClientReverseName'} = $request->{'client_reverse_name'} if (defined($request->{'client_reverse_name'})); + $sessionData->{'Helo'} = $request->{'helo_name'} if (defined($request->{'helo_name'})); + $sessionData->{'Sender'} = $request->{'sender'}; + + # If we in RCPT state, set recipient + if ($request->{'protocol_state'} eq "RCPT") { + $server->log(LOG_DEBUG,"[TRACKING] Protocol state is 'RCPT', resolving policy...") if ($log); + + # Get policy + my $policy = getPolicy($server,$request->{'client_address'},$request->{'sender'},$request->{'recipient'},$request->{'sasl_username'}); + if (ref $policy ne "HASH") { + return -1; + } + + $server->log(LOG_DEBUG,"[TRACKING] Policy resolved into: ".Dumper($policy)) if ($log); + + $sessionData->{'Policy'} = $policy; + $sessionData->{'Recipient'} = $request->{'recipient'}; + } + } + + # Shove in various thing not stored in DB + $sessionData->{'ProtocolTransport'} = $request->{'_protocol_transport'}; + $sessionData->{'ProtocolState'} = $request->{'protocol_state'}; + $sessionData->{'UnixTimestamp'} = $request->{'_timestamp'}; + # Make sure HELO is clean... + $sessionData->{'Helo'} = defined($sessionData->{'Helo'}) ? $sessionData->{'Helo'} : ''; + + $server->log(LOG_DEBUG,"[TRACKING] Request translated into session data: ".Dumper($sessionData)) if ($log); + + return $sessionData; +} + + +# Record session data +# Args: +# $server, $sessiondata +sub updateSessionData +{ + my ($server,$sessionData) = @_; + + + # Check the protocol transport + if ($sessionData->{'ProtocolTransport'} eq "Postfix") { + + # Return if we're not in RCPT state, in this case we shouldn't update the data + if ($sessionData->{'ProtocolState'} eq 'RCPT') { + + # Get encoded policy data + my $policyData = encodePolicyData($sessionData->{'Recipient'},$sessionData->{'Policy'}); + # Make sure recipient data is set + my $recipientData = defined($sessionData->{'RecipientData'}) ? $sessionData->{'RecipientData'} : ""; + # Generate recipient data, make sure we don't use a undefined value either! + $recipientData .= "/$policyData"; + + # Record tracking info + my $sth = DBDo(' + UPDATE + @TP@session_tracking + SET + RecipientData = ? + WHERE + Instance = ? + ', + $recipientData,$sessionData->{'Instance'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[TRACKING] Failed to update recipient data in session tracking info: ".awitpt::db::dblayer::Error()); + return -1; + } + + # If we at END-OF-MESSAGE, update size + } elsif ($sessionData->{'ProtocolState'} eq 'END-OF-MESSAGE') { + # Record tracking info + my $sth = DBDo(' + UPDATE + @TP@session_tracking + SET + QueueID = ?, + Size = ? + WHERE + Instance = ? + ', + $sessionData->{'QueueID'},$sessionData->{'Size'},$sessionData->{'Instance'} + ); + if (!$sth) { + $server->log(LOG_ERR,"[TRACKING] Failed to update size in session tracking info: ".awitpt::db::dblayer::Error()); + return -1; + } + } + } + + return 0; +} + + +# Build a hash without all LC names +sub hashifyDBSessionData +{ + my $record = shift; + + + return hashifyLCtoMC($record, qw( + Instance QueueID + UnixTimestamp + ClientAddress ClientName ClientReverseName + Protocol + EncryptionProtocol EncryptionCipher EncryptionKeySize + SASLMethod SASLSender SASLUsername + Helo + Sender + Size + RecipientData + )); +} + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbp/version.pm b/ehcp/fixes/policyd/cbp/version.pm new file mode 100644 index 0000000..10c55cb --- /dev/null +++ b/ehcp/fixes/policyd/cbp/version.pm @@ -0,0 +1,41 @@ +# Cluebringer version package +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2007, Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +package cbp::version; + +use strict; +use warnings; + + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( + VERSION +); + + +use constant { + VERSION => "2.1.x-201310261831", +}; + +# vim: ts=4 +1; diff --git a/ehcp/fixes/policyd/cbpadmin b/ehcp/fixes/policyd/cbpadmin new file mode 100755 index 0000000..b6bfa47 --- /dev/null +++ b/ehcp/fixes/policyd/cbpadmin @@ -0,0 +1,275 @@ +#!/usr/bin/perl +# Cluebringer administration tool +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +use strict; +use warnings; + + +use lib('/usr/local/lib/cbpolicyd-2.1','/usr/lib/cbpolicyd-2.1','/usr/lib64/cbpolicyd-2.1','awitpt'); + +use Config::IniFiles; +use Getopt::Long; + +use cbp::logging; + +use cbp::version; + + +print("Policyd Admin Tool (ClueBringer) v".VERSION." - Copyright (c) 2007-2010 AllWorldIT\n"); + +# Fire up commandline processing... +my %opts; +GetOptions( + \%opts, + "help", + "config:s", + "cleanup", + "debug", +); + +# Check for some args +if ($opts{'help'}) { + displayHelp(); + exit 0; +} + +# Set defaults +my $cfg; +$cfg->{'config_file'} = "/etc/cbpolicyd/cluebringer.conf"; + +# Check if we must override +if (defined($opts{'config'}) && $opts{'config'} ne "") { + $cfg->{'config_file'} = $opts{'config'}; +} + +# Check config file exists +if (! -f $cfg->{'config_file'}) { + print(STDERR "ERROR: No configuration file '".$cfg->{'config_file'}."' found!\n"); + displayHelp(); + exit 1; +} + +# Use config file, ignore case +tie my %inifile, 'Config::IniFiles', ( + -file => $cfg->{'config_file'}, + -nocase => 1 +) or die "Failed to open config file '".$cfg->{'config_file'}."': $!"; +# Copy config +my %config = %inifile; +# FIXME: This now generates a warning as Config::Inifiles doesn't implement UNTIE +# untie(%inifile); + + +# Our fake server... +my $server; + + +# +# Check what to do +# + +# We must cleanup +if ($opts{'cleanup'}) { + loadModules(); + + # Loop with modules + foreach my $module ( sort { $b->{'priority'} <=> $a->{'priority'} } @{$server->{'modules'}} ) { + $server->log(LOG_INFO,"Module: " . $module->{'name'}); + # If we have a cleanup module, run it + if (defined($module->{'cleanup'})) { + $server->log(LOG_INFO," -> running cleanup..."); + $module->{'cleanup'}($server); + } + } + +# Huh, nothing todo... +} else { + print(STDERR "ERROR: Nothing to do!\n"); + displayHelp(); + exit 1; +} + + +# +# Misc functions +# + + +# Register plugin info +sub plugin_register { + my ($self,$module,$info) = @_; + + + # If no info, return + if (!defined($info)) { + $server->log(LOG_ERR,"Plugin info not found for module => $module"); + return -1; + } + + # Set real module name & save + $info->{'Module'} = $module; + push(@{$self->{'modules'}},$info); + + # If we should, init the module + if (defined($info->{'init'})) { + $info->{'init'}($self); + } + + + return 0; +} + + +# Function to load our modules +sub loadModules +{ + # Pull in module list + my $modules = $config{'server'}{'modules'}; + my @modulelist; + if (ref($config{'server'}{'modules'}) eq "ARRAY") { + foreach my $module (@{$modules}) { + $module =~ s/\s+//g; + # Skip comments + next if ($module =~ /^#/); + $module = "modules/$module"; + push(@modulelist,$module); + } + } else { + my @splitModules = split(/\s+/,$config{'server'}{'modules'}); + foreach my $module (@splitModules) { + # Skip comments + next if ($module =~ /^#/); + $module = "modules/$module"; + push(@modulelist,$module); + } + } + + # Emulate server + $server = new cbpserver; + $server->{'inifile'} = \%config; + # Init everything + $server->init(); + + # Load modules + foreach my $module (@modulelist) { + # Split off dir and mod name + $module =~ /^(\w+)\/(\w+)$/; + my ($mod_dir,$mod_name) = ($1,$2); + + # Load module + my $res = eval(" + use cbp::${mod_dir}::${mod_name}; + plugin_register(\$server,\"${mod_name}\",\$cbp::${mod_dir}::${mod_name}::pluginInfo); + "); + if ($@ || (defined($res) && $res != 0)) { + $server->log(LOG_ERR,"WARNING: Error loading plugin $module ($@)"); + } + } +} + + + + + + +# Display help +sub displayHelp { + print(< Configuration file + --debug Put into debug mode + --cleanup Cleanup database records + +EOF +} + + + + +# Server emulation +package cbpserver; + +use strict; +use warnings; + +use cbp::logging; +use cbp::config; +use awitpt::db::dbilayer; +use awitpt::db::dblayer; + +# Return oursevles +sub new +{ + my $class = shift; + + my $self = { + }; + + bless $self, $class; + return $self; +}; + +sub init +{ + my $self = shift; + + # Init config + cbp::config::Init($self); + + # Init system stuff + $self->{'client'}->{'dbh'} = awitpt::db::dbilayer::Init($self,'cbp'); + if (!defined($self->{'client'}->{'dbh'})) { + $self->log(LOG_WARN,"Failed to Initialize: ".awitpt::db::dbilayer::internalError()." ($$)"); + die; + } + if ($self->{'client'}->{'dbh'}->connect()) { + $self->log(LOG_WARN,"Failed to connect to database: ".$self->{'client'}->{'dbh'}->Error()." ($$)"); + die; + } + # Setup database handle + awitpt::db::dblayer::setHandle($self->{'client'}->{'dbh'}); +} + +sub log +{ + my ($self,$level,@msg) = @_; + + # FIXME: we shouldn't ignore $level + print(@msg, "\n"); +} + + + + + + +# Load modules we need and run cleanup() function + +# Cleanup session_tracking older than 24hr + +# Cleanup quotas_tracking +# - check last update, if its older than now - period, remove + +# CheckHelo +# - Remove checkhelo_tracking older than specified period, default to 1 month + + +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cbpolicyd b/ehcp/fixes/policyd/cbpolicyd new file mode 100755 index 0000000..7d67c35 --- /dev/null +++ b/ehcp/fixes/policyd/cbpolicyd @@ -0,0 +1,782 @@ +#!/usr/bin/perl +# Cluebringer policy daemon +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# Copyright (C) 2007, Nigel Kukard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +use strict; +use warnings; + +use lib('/usr/local/lib/cbpolicyd-2.1','/usr/lib/cbpolicyd-2.1', + '/usr/lib64/cbpolicyd-2.1','awitpt'); + +package cbp; + + +use base qw(Net::Server::PreFork); +use Config::IniFiles; +use Getopt::Long; +use Sys::Syslog; + +use cbp::version; + +use cbp::config; +use cbp::logging; +use awitpt::db::dbilayer; +use awitpt::cache; +use cbp::tracking; +use cbp::protocols; + + + + +# Override configuration +sub configure { + my $self = shift; + my $server = $self->{'server'}; + my $cfg; + my $cmdline; + my $inifile; + + + # We're being called from somewhere else, maybe a protocol? + return if (@_); + + # Set defaults + $cfg->{'config_file'} = "/etc/cbpolicyd/cluebringer.conf"; + $cfg->{'cache_file'} = '/var/run/cbpolicyd/cache'; + $cfg->{'track_sessions'} = 0; + + $server->{'timeout_idle'} = 1015; + $server->{'timeout_busy'} = 115; + $server->{'background'} = "yes"; + $server->{'pid_file'} = "/var/run/cbpolicyd/cbpolicyd.pid"; + $server->{'log_level'} = 2; + $server->{'log_file'} = "/var/log/cbpolicyd/cbpolicyd.log"; + + $server->{'proto'} = "tcp"; + $server->{'host'} = "*"; + $server->{'port'} = 10031; + + $server->{'min_servers'} = 4; + $server->{'min_spare_servers'} = 4; + $server->{'max_spare_servers'} = 12; + $server->{'max_servers'} = 25; + $server->{'max_requests'} = 1000; + + # Parse command line params + %{$cmdline} = (); + GetOptions( + \%{$cmdline}, + "help", + "config:s", + "debug", + "fg", + ); + + # Check for some args + if ($cmdline->{'help'}) { + $self->displayHelp(); + exit 0; + } + if (defined($cmdline->{'config'}) && $cmdline->{'config'} ne "") { + $cfg->{'config_file'} = $cmdline->{'config'}; + } + + # Check config file exists + if (! -f $cfg->{'config_file'}) { + print(STDERR "ERROR: No configuration file '".$cfg->{'config_file'}."' found!\n"); + exit 1; + } + + # Use config file, ignore case + tie my %inifile, 'Config::IniFiles', ( + -file => $cfg->{'config_file'}, + -nocase => 1 + ) or die "Failed to open config file '".$cfg->{'config_file'}."': ".join("\n",@Config::IniFiles::errors); + # Copy config + my %config = %inifile; + # FIXME: This now generates a warning as Config::Inifiles doesn't implement UNTIE + # untie(%inifile); + + # Pull in params for the server + my @server_params = ( + 'log_level','log_file', + 'proto', 'host', 'port', + 'cidr_allow', 'cidr_deny', + 'pid_file', + 'user', 'group', + 'timeout_idle', 'timeout_busy', + 'background', + 'min_servers', + 'min_spare_servers', + 'max_spare_servers', + 'max_servers', + 'max_requests', + ); + foreach my $param (@server_params) { + $server->{$param} = $config{'server'}{$param} if (defined($config{'server'}{$param})); + } + + # Fix up these ... + if (defined($server->{'cidr_allow'})) { + my @lst = split(/[,\s;]+/,$server->{'cidr_allow'}); + $server->{'cidr_allow'} = \@lst; + } + if (defined($server->{'cidr_deny'})) { + my @lst = split(/[,\s;]+/,$server->{'cidr_deny'}); + $server->{'cidr_deny'} = \@lst; + } + + # Split off modules + if (!defined($config{'server'}{'modules'})) { + die "Server configuration error: 'modules' not found"; + } + if (!defined($config{'server'}{'protocols'})) { + die "Server configuration error: 'protocols' not found"; + } + # Split off modules + if (ref($config{'server'}{'modules'}) eq "ARRAY") { + foreach my $module (@{$config{'server'}{'modules'}}) { + $module =~ s/\s+//g; + # Skip comments + next if ($module =~ /^#/); + $module = "modules/$module"; + push(@{$cfg->{'module_list'}},$module); + } + } else { + my @moduleList = split(/\s+/,$config{'server'}{'modules'}); + foreach my $module (@moduleList) { + # Skip comments + next if ($module =~ /^#/); + $module = "modules/$module"; + push(@{$cfg->{'module_list'}},$module); + } + } + # Split off protocols + if (ref($config{'server'}{'protocols'}) eq "ARRAY") { + foreach my $module (@{$config{'server'}{'protocols'}}) { + $module =~ s/\s+//g; + # Skip comments + next if ($module =~ /^#/); + $module = "protocols/$module"; + push(@{$cfg->{'module_list'}},$module); + } + } else { + my @protocolList = split(/\s+/,$config{'server'}{'protocols'}); + foreach my $module (@protocolList) { + # Skip comments + next if ($module =~ /^#/); + $module = "protocols/$module"; + push(@{$cfg->{'module_list'}},$module); + } + } + + # Override + if ($cmdline->{'debug'}) { + $server->{'log_level'} = 4; + $cfg->{'debug'} = 1; + } + + # If we set on commandline for foreground, keep in foreground + if ($cmdline->{'fg'} || (defined($config{'server'}{'background'}) && $config{'server'}{'background'} eq "no" )) { + $server->{'background'} = undef; + $server->{'log_file'} = undef; + } else { + $server->{'setsid'} = 1; + } + + # Loop with logging detail + if (defined($config{'server'}{'log_detail'})) { + # Lets see what we have to enable + foreach my $detail (split(/[,\s;]/,$config{'server'}{'log_detail'})) { + $cfg->{'logging'}{$detail} = 1; + } + } + + # Check log_mail + if (defined($config{'server'}{'log_mail'}) && $config{'server'}{'log_mail'} ne "main") { + # COMPATIBILITY + if ($config{'server'}{'log_mail'} eq "maillog") { + $cfg->{'log_mail'} = 'mail@syslog:native'; + } else { + $cfg->{'log_mail'} = $config{'server'}{'log_mail'}; + } + } + + # Check if the user specified a cache_file in the config + if (defined($config{'server'}{'cache_file'})) { + $cfg->{'cache_file'} = $config{'server'}{'cache_file'}; + } + + + # Save our config and stuff + $self->{'config'} = $cfg; + $self->{'cmdline'} = $cmdline; + $self->{'inifile'} = \%config; +} + + + +# Run straight after ->run +sub post_configure_hook { + my $self = shift; + my $log_mail = $self->{'config'}{'log_mail'}; + + + $self->log(LOG_NOTICE,"[CBPOLICYD] Policyd v2 / Cluebringer - v".VERSION); + + $self->log(LOG_NOTICE,"[CBPOLICYD] Initializing system modules."); + # Init config + cbp::config::Init($self); + # Init caching engine + awitpt::cache::Init($self,{ + 'cache_file' => $self->{'config'}{'cache_file'}, + 'cache_file_user' => $self->{'server'}->{'user'}, + 'cache_file_group' => $self->{'server'}->{'group'} + }); + $self->log(LOG_NOTICE,"[CBPOLICYD] System modules initialized."); + + $self->log(LOG_NOTICE,"[CBPOLICYD] Module load started..."); + # Load modules + foreach my $module (@{$self->{'config'}{'module_list'}}) { + # Split off dir and mod name + $module =~ /^(\w+)\/(\w+)$/; + my ($mod_dir,$mod_name) = ($1,$2); + + # Load module + my $res = eval(" + use cbp::${mod_dir}::${mod_name}; + plugin_register(\$self,\"${mod_name}\",\$cbp::${mod_dir}::${mod_name}::pluginInfo); + "); + if ($@ || (defined($res) && $res != 0)) { + $self->log(LOG_WARN,"[CBPOLICYD] Error loading plugin $module ($@)"); + } + } + $self->log(LOG_NOTICE,"[CBPOLICYD] Module load done."); + + # Report if session tracking is on + if ($self->{'config'}{'track_sessions'}) { + $self->log(LOG_NOTICE,"[CBPOLICYD] Session tracking is ENABLED."); + } else { + $self->log(LOG_NOTICE,"[CBPOLICYD] Session tracking is DISABLED."); + } + + # Check if we have some custom logging... + if (defined($log_mail)) { + # More flexible method to configure logging + if ($log_mail =~ /^([^@]+)(?:@([^:]+))?(?:\:(\S+))?$/) { + my $facility = $1; + my $method = defined($2) ? $2 : 'syslog'; + my $destination = $3; + + # Check method of logging + if ($method eq "syslog") { + $destination = 'native' if (!defined($destination)); + $facility = 'mail' if (!defined($facility)); + + $self->log(LOG_DEBUG,"[CBPOLICYD] Opening syslog, destination = '$destination', facility = '$facility'."); + # We may have some args to pass to setlogsock + my @syslogArgs = split(/,/,$destination); + if (!Sys::Syslog::setlogsock(@syslogArgs)) { + $self->log(LOG_ERR,"[CBPOLICYD] Failed to set log socket: $!"); + } + if (!Sys::Syslog::openlog("cbpolicyd",'pid|ndelay',$facility)) { + $self->log(LOG_ERR,"[CBPOLICYD] Failed to open syslog socket: $!"); + } + + } else { + $self->log(LOG_WARN,"[CBPOLICYD] Value of 'log_mail' not understood. Method '$method' is invalid."); + } + + } else { + $self->log(LOG_WARN,"[CBPOLICYD] Value '$log_mail' of 'log_mail' not understood."); + } + } +} + + +# Register plugin info +sub plugin_register { + my ($self,$module,$info) = @_; + + + # If no info, return + if (!defined($info)) { + $self->log(LOG_WARN,"[CBPOLICYD] Plugin info not found for module => $module"); + return -1; + } + + # Set real module name & save + $info->{'Module'} = $module; + push(@{$self->{'modules'}},$info); + + # If we should, init the module + if (defined($info->{'init'})) { + $info->{'init'}($self); + } + + return 0; +} + + +# Initialize child +sub child_init_hook +{ + my $self = shift; + + + $self->SUPER::child_init_hook(); + + $self->log(LOG_DEBUG,"[CBPOLICYD] Starting up caching engine"); + awitpt::cache::connect($self); + + # This is the database connection timestamp, if we connect, it resets to 0 + # if not its used to check if we must kill the child and try a reconnect + $self->{'client'}->{'dbh_status'} = time(); + + # Init system stuff + $self->{'client'}->{'dbh'} = awitpt::db::dbilayer::Init($self,'cbp'); + if (defined($self->{'client'}->{'dbh'})) { + # Check if we succeeded + if (!($self->{'client'}->{'dbh'}->connect())) { + # If we succeeded, record OK + $self->{'client'}->{'dbh_status'} = 0; + } else { + $self->log(LOG_WARN,"[CBPOLICYD] Failed to connect to database: ".$self->{'client'}->{'dbh'}->Error()." ($$)"); + } + } else { + $self->log(LOG_WARN,"[CBPOLICYD] Failed to Initialize: ".awitpt::db::dbilayer::internalError()." ($$)"); + } +} + + + + +# Destroy the child +sub child_finish_hook { + my $self = shift; + my $server = $self->{'server'}; + my $log_cache = defined($self->{'config'}{'logging'}{'cache'}); + + $self->SUPER::child_finish_hook(); + + $self->log(LOG_DEBUG,"[CBPOLICYD] Caching engine: hits = ".awitpt::cache::getCacheHits().", misses = ". + awitpt::cache::getCacheMisses()) if ($log_cache); + $self->log(LOG_DEBUG,"[CBPOLICYD] Shutting down caching engine ($$)"); + awitpt::cache::disconnect($self); +} + + +# Process requests we get +sub process_request { + my $self = shift; + my $server = $self->{'server'}; + my $log = defined($self->{'config'}{'logging'}{'modules'}); + + # Check for unix/tcp peer and set peer_type + my $sock = $self->{'server'}->{'client'}; + if ($sock->NS_proto eq 'UNIX') { + $server->{'peer_type'} = "UNIX"; + + # Some defaults for debugging, these are undef if UNIX + $server->{'peeraddr'} = ""; + $server->{'peerport'} = $sock->NS_unix_path; + $server->{'sockaddr'} = ""; + $server->{'sockport'} = ""; + } elsif ($sock->NS_proto eq 'TCP') { + $server->{'peer_type'} = "TCP"; + } else { + $self->log(LOG_WARN,"[CBPOLICYD] Unknown peer type, expected UNIX / TCP. Rejecting."); + return; + } + + # How many times did we pipeline... + my $policyRequests = 0; + + # + # Loop till we fill up the buffer + # + + # Beginning label, we do pipelining ... +CONN_READ: + + # Found module, set to 1 if found, 0 if otherwize + my $found = 0; + + # Buffer + my $buf = ""; + + # Create an FDSET for use in select() + my $fdset = ""; + vec($fdset, fileno(STDIN), 1) = 1; + while (1) { + # Loop with modules + foreach my $module ( sort { $b->{'priority'} <=> $a->{'priority'} } @{$self->{'modules'}} ) { + + # Skip over if we don't have a check... + next if (!defined($module->{'protocol_check'})); + + # Check protocol + my $res = $module->{'protocol_check'}($self,$buf); + if (defined($res) && $res == 1) { + $found = $module; + } + } + + # Last if found + last if ($found); + + # We need to store this cause we use it below a few times + my $bufLen = length($buf); + + # Again ... too large + if ($bufLen > 16*1024) { + $self->log(LOG_WARN,"[CBPOLICYD] Request too large from => Peer: ".$server->{'peeraddr'}.":".$server->{'peerport'}.", Local: ". + $server->{'sockaddr'}.":".$server->{'sockport'}); + return; + } + + # Setup timeout + my $timeout; + # If buffer length > 0, its a busy connection + if ($bufLen > 0) { + $timeout = $server->{'timeout_busy'}; + # Else its idle + } else { + $timeout = $server->{'timeout_idle'}; + } + + # Check for timeout.... + my $n = select($fdset,undef,undef,$timeout); + if (!$n) { + $self->log(LOG_WARN,"[CBPOLICYD] Timed out after ".$timeout."s from => Peer: ".$server->{'peeraddr'}.":". + $server->{'peerport'}.", Local: ".$server->{'sockaddr'}.":".$server->{'sockport'}); + return; + } + + # Read in 8kb + $n = sysread(STDIN,$buf,8192,$bufLen); + if (!$n) { + my $reason = defined($n) ? "Client closed connection" : "sysread[$!]"; + $self->log(LOG_WARN,"[CBPOLICYD] $reason => Peer: ".$server->{'peeraddr'}.":".$server->{'peerport'}.", Local: ". + $server->{'sockaddr'}.":".$server->{'sockport'}); + return; + } + } + # Check if a protocol handler wasn't found... + if (!$found) { + $self->log(LOG_ERR,"[CBPOLICYD] Request not understood => Peer: ".$server->{'peeraddr'}.":".$server->{'peerport'}.", Local: ". + $server->{'sockaddr'}.":".$server->{'sockport'}); + return; + } + + # Set protocol handler + $server->{'_protocol_handler'} = $found; + + # If we have a init function, call it before processing... + $server->{'_protocol_handler'}->{'protocol_init'}($self) if (defined($server->{'_protocol_handler'}->{'protocol_init'})); + + # Process buffer + my $request = $server->{'_protocol_handler'}->{'protocol_parse'}($self,$buf); + + # Check data is ok... + if ((my $res = $server->{'_protocol_handler'}->{'protocol_validate'}($self,$request))) { + $self->log(LOG_ERR,"[CBPOLICYD] Protocol data validation error, $res"); + $self->protocol_response(PROTO_ERROR); + print($self->protocol_getresponse()); + return; + } + + # Data mangling... + $request->{'sender'} = lc($request->{'sender'}); + $request->{'recipient'} = lc($request->{'recipient'}) if (defined($request->{'recipient'})); + $request->{'sasl_username'} = lc($request->{'sasl_username'}) if (defined($request->{'sasl_username'})); + + # Internal data + $request->{'_timestamp'} = time(); + + # If this is a TCP peer type then it has a peer address + if ($server->{'peer_type'} eq "TCP") { + $request->{'_peer_address'} = $server->{'peeraddr'}; + } + + + # Check if we got connected, if not ... bypass + if ($self->{'client'}->{'dbh_status'} > 0) { + my $action; + + $self->log(LOG_WARN,"[CBPOLICYD] Client in BYPASS mode due to DB connection failure!"); + # Check bypass mode + if (!defined($self->{'inifile'}{'database'}{'bypass_mode'})) { + $self->log(LOG_ERR,"[CBPOLICYD] No bypass_mode specified for failed database connections, defaulting to tempfail"); + $self->protocol_response(PROTO_DB_ERROR); + $action = "tempfail"; + # Check for "tempfail" + } elsif (lc($self->{'inifile'}{'database'}{'bypass_mode'}) eq "tempfail") { + $self->protocol_response(PROTO_DB_ERROR); + $action = "tempfail"; + # And for "bypass" + } elsif (lc($self->{'inifile'}{'database'}{'bypass_mode'}) eq "pass") { + $self->protocol_response(PROTO_PASS); + $action = "pass"; + # Lasty for invalid + } else { + $self->log(LOG_ERR,"[CBPOLICYD] bypass_mode is invalid, defaulting to tempfail"); + $self->protocol_response(PROTO_DB_ERROR); + $action = "tempfail"; + } + + $self->maillog("module=Core, action=$action, host=%s, from=%s, to=%s, reason=db_failure_bypass", + $request->{'client_address'} ? $request->{'client_address'} : "unknown", + $request->{'helo_name'} ? $request->{'helo_name'} : "", + $request->{'sender'} ? $request->{'sender'} : "unknown", + $request->{'recipient'} ? $request->{'recipient'} : "unknown"); + + print($self->protocol_getresponse()); + + # Check if we need to reconnect or not + my $timeout = $self->{'inifile'}{'database'}{'bypass_timeout'}; + if (!defined($timeout)) { + $self->log(LOG_ERR,"[CBPOLICYD] No bypass_timeout specified for failed database connections, defaulting to 120s"); + $timeout = 120; + } + # Get time left + my $timepassed = $request->{'_timestamp'} - $self->{'client'}->{'dbh_status'}; + # Then check... + if ($timepassed >= $timeout) { + $self->log(LOG_NOTICE,"[CBPOLICYD] Client BYPASS timeout exceeded, reconnecting..."); + exit 0; + } else { + $self->log(LOG_NOTICE,"[CBPOLICYD] Client still in BYPASS mode, ".( $timeout - $timepassed )."s left till next reconnect"); + return; + } + } + + # Setup database handle + awitpt::db::dblayer::setHandle($self->{'client'}->{'dbh'}); + + # Grab session data + my $sessionData = getSessionDataFromRequest($self,$request); + if (ref $sessionData ne "HASH") { + $self->log(LOG_DEBUG,"[CBPOLICYD:$$] Error getting session data"); + $self->protocol_response(PROTO_ERROR); + print($self->protocol_getresponse()); + return; + } + + # Increment counter + $policyRequests++; + + $self->log(LOG_INFO,"[CBPOLICYD] Got request #$policyRequests" . ($policyRequests > 1 ? " (pipelined)" : "")); + + # Loop with modules + foreach my $module ( sort { $b->{'priority'} <=> $a->{'priority'} } @{$self->{'modules'}} ) { + + # Skip over if we don't have a check... + next if (!defined($module->{'request_process'})); + + $self->log(LOG_DEBUG,"[CBPOLICYD] Running module: ".$module->{'name'}) if ($log); + + # Run request in eval + my $res; + eval { + $res = $module->{'request_process'}($self,$sessionData); + }; + # Check results + if ($@) { + $self->log(LOG_ERR,"[CBPOLICYD] Error running module request_process(): $@"); + $res = $self->protocol_response(PROTO_ERROR); + } + + # Check responses + if (!defined($res)) { + $res = $self->protocol_response(PROTO_ERROR); + last; + + } elsif ($res == CBP_SKIP) { + $self->log(LOG_DEBUG,"[CBPOLICYD] Module '".$module->{'name'}."' returned CBP_SKIP") if ($log); + next; + + } elsif ($res == CBP_CONTINUE) { + $self->log(LOG_DEBUG,"[CBPOLICYD] Module '".$module->{'name'}."' returned CBP_CONTINUE") if ($log); + next; + + } elsif ($res == CBP_STOP) { + $self->log(LOG_DEBUG,"[CBPOLICYD] Module '".$module->{'name'}."' returned CBP_STOP") if ($log); + last; + + } elsif ($res == CBP_ERROR) { + $self->log(LOG_ERR,"[CBPOLICYD] Error returned from module '".$module->{'name'}."'"); + last; + } + } + + $self->log(LOG_DEBUG,"[CBPOLICYD] Done with modules") if ($log); + + # Update session data + my $res = updateSessionData($self,$sessionData); + if ($res) { + $self->log(LOG_ERR,"[CBPOLICYD] Error updating session data"); + $self->protocol_response(PROTO_ERROR); + } + + # Grab and return response + my $response = $self->protocol_getresponse(); + print($response); + + # Carry on with pipelining? + goto CONN_READ; +} + + +# Initialize child +sub server_exit +{ + my $self = shift; + my $log_mail = $self->{'config'}{'log_mail'}; + + + $self->log(LOG_DEBUG,"Destroying system modules."); + # Destroy cache + awitpt::cache::Destroy($self); + $self->log(LOG_DEBUG,"System modules destroyed."); + + # Check if we using syslog + if (defined($log_mail)) { + $self->log(LOG_DEBUG,"Closing syslog."); + Sys::Syslog::closelog(); + $self->log(LOG_DEBUG,"Syslog closed."); + }; + + # Parent exit + $self->SUPER::server_exit(); +} + + + +# Slightly better logging +sub log +{ + my ($self,$level,$msg,@args) = @_; + + # Check log level and set text + my $logtxt = "UNKNOWN"; + if ($level == LOG_DEBUG) { + $logtxt = "DEBUG"; + } elsif ($level == LOG_INFO) { + $logtxt = "INFO"; + } elsif ($level == LOG_NOTICE) { + $logtxt = "NOTICE"; + } elsif ($level == LOG_WARN) { + $logtxt = "WARNING"; + } elsif ($level == LOG_ERR) { + $logtxt = "ERROR"; + } + + # Parse message nicely + if ($msg =~ /^(\[[^\]]+\]) (.*)/s) { + $msg = "$1 $logtxt: $2"; + } else { + $msg = "[CORE] $logtxt: $msg"; + } + + # If we have args, this is more than likely a format string & args + if (@args > 0) { + $msg = sprintf($msg,@args); + } + $self->SUPER::log($level,"[".$self->log_time." - $$] $msg"); +} + + +# Syslog logging +sub maillog +{ + my ($self,$msg,@args) = @_; + my $log_mail = $self->{'config'}{'log_mail'}; + + + # Log to syslog + if (defined($log_mail)) { + # If we have args use printf style + if (@args) { + Sys::Syslog::syslog('info',$msg,@args); + } else { + Sys::Syslog::syslog('info','%s',$msg); + } + + # Or log to main mechanism + } else { + $self->log(LOG_INFO,sprintf($msg,@args)); + } +} + + +# Protocol response setting... +sub protocol_response +{ + my $self = shift; + my $server = $self->{'server'}; + + # Make sure the response handler exists + if (!defined($server->{'_protocol_handler'}->{'protocol_response'})) { + $self->log(LOG_ERR,"[CBPOLICYD] No protocol response handler available"); + return -1; + } + + return $server->{'_protocol_handler'}->{'protocol_response'}($self,@_); +} + + +# Get protocol response +sub protocol_getresponse +{ + my $self = shift; + my $server = $self->{'server'}; + + # Make sure the response handler exists + if (!defined($server->{'_protocol_handler'}->{'protocol_getresponse'})) { + $self->log(LOG_ERR,"[CBPOLICYD] No protocol getresponse handler available"); + return -1; + } + + return $server->{'_protocol_handler'}->{'protocol_getresponse'}($self); +} + + +# Display help +sub displayHelp { + print(STDERR "Policyd (ClueBringer) v".VERSION." - Copyright (c) 2007-2009 AllWorldIT\n"); + + print(STDERR< Configuration file + --debug Put into debug mode + --fg Don't go into background + +EOF +} + + + +__PACKAGE__->run; + + +1; +# vim: ts=4 diff --git a/ehcp/fixes/policyd/cluebringer.conf b/ehcp/fixes/policyd/cluebringer.conf new file mode 100644 index 0000000..883c938 --- /dev/null +++ b/ehcp/fixes/policyd/cluebringer.conf @@ -0,0 +1,191 @@ +# +# Server configuration +# +[server] + +# Protocols to load +protocols=< + */ + Source TEXT, + Destination TEXT, + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + +/* Default System Policy */ +INSERT INTO policy_members (PolicyID,Source,Destination) VALUES + (1,NULL,NULL); +/* Default Outbound System Policy */ +INSERT INTO policy_members (PolicyID,Source,Destination) VALUES + (2,'%internal_ips,%internal_domains','!%internal_domains'); +/* Default Inbound System Policy */ +INSERT INTO policy_members (PolicyID,Source,Destination) VALUES + (3,'!%internal_ips,!%internal_domains','%internal_domains'); +/* Default Internal System Policy */ +INSERT INTO policy_members (PolicyID,Source,Destination) VALUES + (4,'%internal_ips,%internal_domains','%internal_domains'); +/* Test Policy */ +INSERT INTO policy_members (PolicyID,Source,Destination) VALUES + (5,'@example.net',NULL); + + + +/* Groups usable in ACL */ +CREATE TABLE policy_groups ( + ID SERIAL, + + Name VARCHAR(255) NOT NULL, + + + Disabled SMALLINT NOT NULL DEFAULT '0', + + Comment VARCHAR(1024), + + + UNIQUE (Name) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + +INSERT INTO policy_groups (Name) VALUES ('internal_ips'); +INSERT INTO policy_groups (Name) VALUES ('internal_domains'); + + + +/* Group members */ +CREATE TABLE policy_group_members ( + ID SERIAL, + + PolicyGroupID BIGINT UNSIGNED, + + /* Format of member: a.b.c.d/e = ip, @domain = domain, %xyz = xyz group, abc@domain = abc user */ + Member VARCHAR(255) NOT NULL, + + + Disabled SMALLINT NOT NULL DEFAULT '0', + Comment VARCHAR(1024), + + + FOREIGN KEY (PolicyGroupID) REFERENCES policy_groups(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + +INSERT INTO policy_group_members (PolicyGroupID,Member) VALUES (1,'10.0.0.0/8'); +INSERT INTO policy_group_members (PolicyGroupID,Member) VALUES (2,'@example.org'); +INSERT INTO policy_group_members (PolicyGroupID,Member) VALUES (2,'@example.com'); + + + +/* Message session tracking */ +CREATE TABLE session_tracking ( + Instance VARCHAR(255), + QueueID VARCHAR(255), + + UnixTimestamp BIGINT NOT NULL, + + ClientAddress VARCHAR(64), + ClientName VARCHAR(255), + ClientReverseName VARCHAR(255), + + Protocol VARCHAR(255), + + EncryptionProtocol VARCHAR(255), + EncryptionCipher VARCHAR(255), + EncryptionKeySize VARCHAR(255), + + SASLMethod VARCHAR(255), + SASLSender VARCHAR(255), + SASLUsername VARCHAR(255), + + Helo VARCHAR(255), + + Sender VARCHAR(255), + + Size BIGINT UNSIGNED, + + RecipientData TEXT, /* Policy state information */ + + UNIQUE (Instance) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +CREATE INDEX session_tracking_idx1 ON session_tracking (QueueID,ClientAddress,Sender); +CREATE INDEX session_tracking_idx2 ON session_tracking (UnixTimestamp); + + + +# AccessControl module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +/* Plain and simple access control */ + +CREATE TABLE access_control ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + Verdict VARCHAR(255), + Data TEXT, + + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + +/* INSERT INTO access_control (PolicyID,Verdict,Data) VALUES (5,'REJECT','POP,SNAPPLE,CRAK'); */ + + +# Quotas module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +/* Main quotas table, this defines the period the quota is over and how to track it */ +CREATE TABLE quotas ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + /* Tracking Options */ + Track VARCHAR(255) NOT NULL, /* Format: : + + SenderIP - This takes a bitmask to mask the IP with. A good default is /24 + + Sender & Recipient - Either "user@domain" (default), "user@" or "@domain" for the entire + email addy or email addy domain respectively. + */ + + /* Period over which this policy is valid, this is in seconds */ + Period BIGINT UNSIGNED, + + Verdict VARCHAR(255), + Data TEXT, + + LastQuota SMALLINT NOT NULL DEFAULT '0', + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict) VALUES (5,'Recipient quotas','Recipient:user@domain',3600,'REJECT'); +INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict) VALUES (5,'Quota on all /24s','SenderIP:/24',3600,'REJECT'); + + +/* Limits for the quota */ +CREATE TABLE quotas_limits ( + ID SERIAL, + + QuotasID BIGINT UNSIGNED, + + Type VARCHAR(255), /* "MessageCount" or "MessageCumulativeSize" */ + CounterLimit BIGINT UNSIGNED, + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (QuotasID) REFERENCES quotas(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +INSERT INTO quotas_limits (QuotasID,Type,CounterLimit) VALUES (1,'MessageCount',10); +INSERT INTO quotas_limits (QuotasID,Type,CounterLimit) VALUES (1,'MessageCumulativeSize',8000); +INSERT INTO quotas_limits (QuotasID,Type,CounterLimit) VALUES (2,'MessageCount',12); + + +/* This table is used for tracking the quotas */ +CREATE TABLE quotas_tracking ( + + QuotasLimitsID BIGINT UNSIGNED, + TrackKey VARCHAR(512), + + /* Last time this record was update */ + LastUpdate BIGINT UNSIGNED, /* NULL means not updated yet */ + + Counter NUMERIC(10,4), + + UNIQUE (QuotasLimitsID,TrackKey), + FOREIGN KEY (QuotasLimitsID) REFERENCES quotas_limits(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +CREATE INDEX quotas_tracking_idx1 ON quotas_tracking (LastUpdate); + +# Amavis module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +/* Amavisd-new integration for Policyd */ + +CREATE TABLE amavis_rules ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + +/* +Mode of operation (the _m columns): + + This is done with the _m column names + + 0 - Inherit + 1 - Merge (only valid for lists) + 2 - Overwrite + +*/ + + + /* Bypass options */ + bypass_virus_checks SMALLINT, + bypass_virus_checks_m SMALLINT NOT NULL DEFAULT '0', + + bypass_banned_checks SMALLINT, + bypass_banned_checks_m SMALLINT NOT NULL DEFAULT '0', + + bypass_spam_checks SMALLINT, + bypass_spam_checks_m SMALLINT NOT NULL DEFAULT '0', + + bypass_header_checks SMALLINT, + bypass_header_checks_m SMALLINT NOT NULL DEFAULT '0', + + + /* Anti-spam options: NULL = inherit */ + spam_tag_level FLOAT, + spam_tag_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_tag2_level FLOAT, + spam_tag2_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_tag3_level FLOAT, + spam_tag3_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_kill_level FLOAT, + spam_kill_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_dsn_cutoff_level FLOAT, + spam_dsn_cutoff_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_quarantine_cutoff_level FLOAT, + spam_quarantine_cutoff_level_m SMALLINT NOT NULL DEFAULT '0', + + spam_modifies_subject SMALLINT, + spam_modifies_subject_m SMALLINT NOT NULL DEFAULT '0', + + spam_tag_subject VARCHAR(255), /* _SCORE_ is the score, _REQD_ is the required score */ + spam_tag_subject_m SMALLINT NOT NULL DEFAULT '0', + + spam_tag2_subject VARCHAR(255), + spam_tag2_subject_m SMALLINT NOT NULL DEFAULT '0', + + spam_tag3_subject VARCHAR(255), + spam_tag3_subject_m SMALLINT NOT NULL DEFAULT '0', + + + /* General checks: NULL = inherit */ + max_message_size BIGINT, /* in Kbyte */ + max_message_size_m SMALLINT NOT NULL DEFAULT '0', + + banned_files TEXT, + banned_files_m SMALLINT NOT NULL DEFAULT '0', + + + /* Whitelist & blacklist */ + sender_whitelist TEXT, + sender_whitelist_m SMALLINT NOT NULL DEFAULT '0', + + sender_blacklist TEXT, + sender_blacklist_m SMALLINT NOT NULL DEFAULT '0', + + + /* Admin notifications */ + notify_admin_newvirus VARCHAR(255), + notify_admin_newvirus_m SMALLINT NOT NULL DEFAULT '0', + + notify_admin_virus VARCHAR(255), + notify_admin_virus_m SMALLINT NOT NULL DEFAULT '0', + + notify_admin_spam VARCHAR(255), + notify_admin_spam_m SMALLINT NOT NULL DEFAULT '0', + + notify_admin_banned_file VARCHAR(255), + notify_admin_banned_file_m SMALLINT NOT NULL DEFAULT '0', + + notify_admin_bad_header VARCHAR(255), + notify_admin_bad_header_m SMALLINT NOT NULL DEFAULT '0', + + + /* Quarantine options */ + quarantine_virus VARCHAR(255), + quarantine_virus_m SMALLINT NOT NULL DEFAULT '0', + + quarantine_banned_file VARCHAR(255), + quarantine_banned_file_m SMALLINT NOT NULL DEFAULT '0', + + quarantine_bad_header VARCHAR(255), + quarantine_bad_header_m SMALLINT NOT NULL DEFAULT '0', + + quarantine_spam VARCHAR(255), + quarantine_spam_m SMALLINT NOT NULL DEFAULT '0', + + + /* Interception options */ + bcc_to VARCHAR(255), + bcc_to_m SMALLINT NOT NULL DEFAULT '0', + + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + +INSERT INTO amavis_rules + ( + PolicyID, + Name, + max_message_size,max_message_size_m, + bypass_banned_checks, bypass_banned_checks_m + ) + VALUES + ( + 1, + 'Default system amavis policy', + 100000,2, + 1,2 + ); + +# CheckHelo module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +/* Helo checking */ + +/* + NULL means to inherit +*/ +CREATE TABLE checkhelo ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + + /* Blacklisting, we want to reject people impersonating us */ + UseBlacklist SMALLINT, /* Checks blacklist table */ + BlacklistPeriod BIGINT UNSIGNED, /* Period to keep the host blacklisted for, if not set or 0 + the check will be live */ + + /* Random helo prevention */ + UseHRP SMALLINT, /* Use helo randomization prevention */ + HRPPeriod BIGINT UNSIGNED, /* Period/window we check for random helo's */ + HRPLimit BIGINT UNSIGNED, /* Our limit for the number of helo's is this */ + + /* RFC compliance options */ + RejectInvalid SMALLINT, /* Reject invalid HELO */ + RejectIP SMALLINT, /* Reject if HELO is an IP */ + RejectUnresolvable SMALLINT, /* Reject unresolvable HELO */ + + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* Blacklisted HELO's */ +CREATE TABLE checkhelo_blacklist ( + ID SERIAL, + + Helo VARCHAR(255) NOT NULL, + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + UNIQUE (Helo) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + +INSERT INTO checkhelo_blacklist (Helo,Comment) VALUES + ('127.0.0.1','Blacklist hosts claiming to be 127.0.0.1'); + +INSERT INTO checkhelo_blacklist (Helo,Comment) VALUES + ('[127.0.0.1]','Blacklist hosts claiming to be [127.0.0.1]'); + +INSERT INTO checkhelo_blacklist (Helo,Comment) VALUES + ('localhost','Blacklist hosts claiming to be localhost'); + +INSERT INTO checkhelo_blacklist (Helo,Comment) VALUES + ('localhost.localdomain','Blacklist hosts claiming to be localhost.localdomain'); + + + +/* Whitelisted CIDR's */ +CREATE TABLE checkhelo_whitelist ( + ID SERIAL, + + Source VARCHAR(512) NOT NULL, /* Valid format is: SenderIP:a.b.c.d[/e] */ + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + UNIQUE (Source) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* Helo tracking table */ +CREATE TABLE checkhelo_tracking ( + Address VARCHAR(64) NOT NULL, + Helo VARCHAR(255) NOT NULL, + LastUpdate BIGINT UNSIGNED NOT NULL, + + UNIQUE (Address,Helo) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +CREATE INDEX checkhelo_tracking_idx1 ON checkhelo_tracking (LastUpdate); + +# CheckSPF module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +/* SPF checking */ + +/* + NULL means to inherit +*/ +CREATE TABLE checkspf ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + /* Do we want to use SPF? 1 or 0 */ + UseSPF SMALLINT, + /* Reject when SPF fails */ + RejectFailedSPF SMALLINT, + /* Add SPF header */ + AddSPFHeader SMALLINT, + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +# Greylisting module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +/* Greylisting */ + +/* + NULL means to inherit +*/ +CREATE TABLE greylisting ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + + /* General greylisting settings */ + UseGreylisting SMALLINT, /* Actually use greylisting */ + GreylistPeriod BIGINT UNSIGNED, /* Period in seconds to greylist for */ + + /* Record tracking */ + Track VARCHAR(255) NOT NULL, /* Format: : + SenderIP - This takes a bitmask to mask the IP with, A good default is /24 + */ + + /* Bypass greylisting: sender+recipient level */ + GreylistAuthValidity BIGINT UNSIGNED, /* Period for which last authenticated greylist entry is valid for. + This effectively bypasses greylisting for the second email a sender + sends a recipient. */ + GreylistUnAuthValidity BIGINT UNSIGNED, /* Same as above but for unauthenticated entries */ + + + /* Auto-whitelisting: sending server level */ + UseAutoWhitelist SMALLINT, /* Use auto-whitelisting */ + AutoWhitelistPeriod BIGINT UNSIGNED, /* Period to look back to find authenticated triplets */ + AutoWhitelistCount BIGINT UNSIGNED, /* Count of authenticated triplets after which we auto-whitelist */ + AutoWhitelistPercentage BIGINT UNSIGNED, /* Percentage of at least Count triplets that must be authenticated + before auto-whitelisting. This changes the behaviour or Count */ + + /* Auto-blacklisting: sending server level */ + UseAutoBlacklist SMALLINT, /* Use auto-blacklisting */ + AutoBlacklistPeriod BIGINT UNSIGNED, /* Period to look back to find unauthenticated triplets */ + AutoBlacklistCount BIGINT UNSIGNED, /* Count of authenticated triplets after which we auto-whitelist */ + AutoBlacklistPercentage BIGINT UNSIGNED, /* Percentage of at least Count triplets that must be authenticated + before auto-whitelisting. This changes the behaviour or Count */ + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + +/* Whitelisted */ +CREATE TABLE greylisting_whitelist ( + ID SERIAL, + + Source VARCHAR(255) NOT NULL, /* Either CIDR a.b.c.d, a.b.c.d/x, or reversed host*-*.whatever.com */ + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + UNIQUE (Source) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* Auto-whitelistings */ +CREATE TABLE greylisting_autowhitelist ( + ID SERIAL, + + TrackKey VARCHAR(512) NOT NULL, + + Added BIGINT UNSIGNED NOT NULL, + LastSeen BIGINT UNSIGNED NOT NULL, + + Comment VARCHAR(1024), + + UNIQUE (TrackKey) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* Auto-blacklistings */ +CREATE TABLE greylisting_autoblacklist ( + ID SERIAL, + + TrackKey VARCHAR(512) NOT NULL, + + Added BIGINT UNSIGNED NOT NULL, + + Comment VARCHAR(1024), + + UNIQUE (TrackKey) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* Greylist triplet tracking table */ +CREATE TABLE greylisting_tracking ( + + TrackKey VARCHAR(512) NOT NULL, /* The address really, masked with whatever */ + Sender VARCHAR(255) NOT NULL, + Recipient VARCHAR(255) NOT NULL, + + FirstSeen BIGINT UNSIGNED NOT NULL, + LastUpdate BIGINT UNSIGNED NOT NULL, + + Tries BIGINT UNSIGNED NOT NULL, /* Authentication tries */ + Count BIGINT UNSIGNED NOT NULL, /* Authenticated count */ + + UNIQUE(TrackKey,Sender,Recipient) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +CREATE INDEX greylisting_tracking_idx1 ON greylisting_tracking (LastUpdate,Count); + +# Accounting module schema +# Copyright (C) 2009-2011, AllWorldIT +# Copyright (C) 2008, LinuxRulz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +/* Main accounting table, this defines the period the accounting items are over and how to track it */ +CREATE TABLE accounting ( + ID SERIAL, + + PolicyID BIGINT UNSIGNED, + + Name VARCHAR(255) NOT NULL, + + /* Tracking Options */ + Track VARCHAR(255) NOT NULL, /* Format: : + + SenderIP - This takes a bitmask to mask the IP with. A good default is /24 + + Sender & Recipient - Either "user@domain" (default), "user@" or "@domain" for the entire + email addy or email addy domain respectively. + */ + + /* Period over which to account traffic */ + AccountingPeriod SMALLINT NOT NULL, /* 0 - Track by day, 1 - Track by week, 2 - Track by month */ + + /* Limits for this period */ + MessageCountLimit BIGINT UNSIGNED, /* Limit is in Kbyte, NULL means no limit */ + MessageCumulativeSizeLimit BIGINT UNSIGNED, /* LImit is in Kbyte, NULL means no limit */ + + /* Verdict if limits are exceeded */ + Verdict VARCHAR(255), /* Verdict when limit is exceeded */ + Data TEXT, /* Data sent along with verdict */ + + LastAccounting SMALLINT NOT NULL DEFAULT '0', + + Comment VARCHAR(1024), + + Disabled SMALLINT NOT NULL DEFAULT '0', + + FOREIGN KEY (PolicyID) REFERENCES policies(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; + + + +/* This table is used for tracking the accounting */ +CREATE TABLE accounting_tracking ( + + AccountingID BIGINT UNSIGNED, + TrackKey VARCHAR(512), + PeriodKey VARCHAR(512), + + /* Last time this record was update */ + LastUpdate BIGINT UNSIGNED, /* NULL means not updated yet */ + + MessageCount BIGINT UNSIGNED, + MessageCumulativeSize BIGINT UNSIGNED, /* Counter is in Kbyte */ + + UNIQUE (AccountingID,TrackKey,PeriodKey), + FOREIGN KEY (AccountingID) REFERENCES accounting(ID) +) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_bin; +CREATE INDEX accounting_tracking_idx1 ON accounting_tracking (LastUpdate); diff --git a/ehcp/fixes/policyd/policyd_agent b/ehcp/fixes/policyd/policyd_agent new file mode 100644 index 0000000..8f575a2 --- /dev/null +++ b/ehcp/fixes/policyd/policyd_agent @@ -0,0 +1,86 @@ +#!/bin/bash +# +### BEGIN INIT INFO +# Provides: policyd_agent +# Required-Start: $remote_fs $all +# Required-Stop: $remote_fs +# Should-Start: $remote_fs +# Should-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start and stop the policyd agent +# Description: Start and stop the policyd agent +### END INIT INFO +# +set -e +set -u +. /lib/lsb/init-functions +pidFile="/var/run/cbpolicyd/cbpolicyd.pid" +mkdir -p "/var/run/cbpolicyd" +chown cbpolicyd:cbpolicyd -R "/var/run/cbpolicyd" +# +# main() +# + +if [ "X`whoami`" != "Xroot" ] +then + log_failure_msg "Permission denied." + exit 1 +fi + +start() { + # Check to see if it's already running + if [ -e "$pidFile" ] + then + if [ "X$(ps -A | grep -o `cat $pidFile`)" != "X" ] + then + log_failure_msg "PolicyD Agent is already running." + return 1 + fi + fi + + # Start the process... + nohup /etc/cbpolicyd/run_policyd_async.sh >> /dev/null 2>&1 & + log_success_msg "PolicyD Agent started successfully." + + return 0 +} + +stop() { + + if [ -e "$pidFile" ] + then + if [ "X$(ps -A | grep -o `cat $pidFile`)" == "X" ] + then + log_failure_msg "PolicyD Agent not running." + else + kill `cat $pidFile` >/dev/null 2>&1 + log_success_msg "PolicyD Agent stopped successfully." + fi + else + log_failure_msg "PID file not found ($pidFile)" + fi + return 0 +} + +case "${1:-''}" in + start) + start + RETVAL=$? + ;; + stop) + stop + RETVAL=$? + ;; + restart) + stop + sleep 1 + start + RETVAL=$? + ;; + *) + echo "Usage: service policyd_agent start|stop|restart" + RETVAL=1 + ;; +esac +exit $RETVAL diff --git a/ehcp/fixes/policyd/run_policyd_async.sh b/ehcp/fixes/policyd/run_policyd_async.sh new file mode 100755 index 0000000..afac44d --- /dev/null +++ b/ehcp/fixes/policyd/run_policyd_async.sh @@ -0,0 +1,12 @@ +#!/bin/bash +if [ ! -e "/var/run/cbpolicyd" ]; then + mkdir -p "/var/run/cbpolicyd" + chown cbpolicyd:cbpolicyd -R "/var/run/cbpolicyd" +fi + +while ! mysql -u {policyDMySQLUser} -p{policyDMySQLPass} -e ";" ; do + echo -e "Can't connect to MySQL, retrying in one second." + sleep 1 +done + +/usr/local/sbin/cbpolicyd diff --git a/ehcp/fixes/policyd/webui/accesscontrol-add.php b/ehcp/fixes/policyd/webui/accesscontrol-add.php new file mode 100644 index 0000000..f957ce8 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accesscontrol-add.php @@ -0,0 +1,164 @@ + array( + "Back to access cntrl" => "accesscontrol-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
+ Verdict + + + +
+ Data + +
Comment
+ +
+ + + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+ +
Verdict cannot be empty
+prepare("INSERT INTO ${DB_TABLE_PREFIX}access_control (PolicyID,Name,Verdict,Data,Comment,Disabled) VALUES (?,?,?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['accesscontrol_policyid'], + $_POST['accesscontrol_name'], + $_POST['accesscontrol_verdict'], + $_POST['accesscontrol_data'], + $_POST['accesscontrol_comment'] + )); + + if ($res) { +?> +
Access control created
+ +
Failed to create access control
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/accesscontrol-change.php b/ehcp/fixes/policyd/webui/accesscontrol-change.php new file mode 100644 index 0000000..9e00819 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accesscontrol-change.php @@ -0,0 +1,223 @@ + array( + "Back to access cntrl" => "accesscontrol-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a access control was selected + if (isset($_POST['accesscontrol_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}access_control.ID, ${DB_TABLE_PREFIX}access_control.PolicyID, ${DB_TABLE_PREFIX}access_control.Name, + ${DB_TABLE_PREFIX}access_control.Verdict, ${DB_TABLE_PREFIX}access_control.Data, + ${DB_TABLE_PREFIX}access_control.Comment, ${DB_TABLE_PREFIX}access_control.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}access_control, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}access_control.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}access_control.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['accesscontrol_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
+ Verdict + + verdict ?> + +
+ Data + + data ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No access control selected
+ + +quote($_POST['accesscontrol_policyid'])); + } + if (!empty($_POST['accesscontrol_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['accesscontrol_name'])); + } + if (!empty($_POST['accesscontrol_verdict'])) { + array_push($updates,"Verdict = ".$db->quote($_POST['accesscontrol_verdict'])); + } + if (!empty($_POST['accesscontrol_data'])) { + array_push($updates,"Data = ".$db->quote($_POST['accesscontrol_data'])); + } + if (!empty($_POST['accesscontrol_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['accesscontrol_comment'])); + } + if (isset($_POST['accesscontrol_disabled']) && $_POST['accesscontrol_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['accesscontrol_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}access_control SET $updateStr WHERE ID = ".$db->quote($_POST['accesscontrol_id'])); + if ($res) { +?> +
Access control updated
+ +
Error updating access control!
+
errorInfo()) ?>
+ +
No changes made to access control
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/accesscontrol-delete.php b/ehcp/fixes/policyd/webui/accesscontrol-delete.php new file mode 100644 index 0000000..8af2ab0 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accesscontrol-delete.php @@ -0,0 +1,115 @@ + array( + "Back to access cntrl" => "accesscontrol-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a access control was selected + if (isset($_POST['accesscontrol_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No access control selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}access_control WHERE ID = ".$db->quote($_POST['accesscontrol_id'])); + if ($res) { +?> +
Access control deleted
+ +
Error deleting access control!
+
errorInfo()) ?>
+ +
Access control not deleted, aborted by user
+ +
Invocation error, no access control ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/accesscontrol-main.php b/ehcp/fixes/policyd/webui/accesscontrol-main.php new file mode 100644 index 0000000..59be5dd --- /dev/null +++ b/ehcp/fixes/policyd/webui/accesscontrol-main.php @@ -0,0 +1,126 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + + + +closeCursor(); +?> +
PolicyNameVerdictDataDisabled
policyname ?>name ?>verdict ?>data ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/accounting-add.php b/ehcp/fixes/policyd/webui/accounting-add.php new file mode 100644 index 0000000..8d459eb --- /dev/null +++ b/ehcp/fixes/policyd/webui/accounting-add.php @@ -0,0 +1,247 @@ + array( + "Back to accounting" => "accounting-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
Track + + +
Period + +
Message Count Limit
Message Cumulative Size LimitKbyte
+ Verdict + + +
+ Data +
Stop processing here + +
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+ +
Track cannot be empty
+ +
Stop procesing here field cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}accounting + ( + PolicyID, Name, Track, AccountingPeriod, + MessageCountLimit, MessageCumulativeSizeLimit, + Verdict, Data, + LastAccounting, + Comment, Disabled + ) + VALUES + (?,?,?,?,?,?,?,?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['accounting_policyid'], + $_POST['accounting_name'], + $accountingTrack, + $_POST['accounting_period'], + $_POST['accounting_messagecountlimit'], + $_POST['accounting_messagecumulativesize'], + $_POST['accounting_verdict'], + $_POST['accounting_data'], + $_POST['accounting_lastaccounting'], + $_POST['accounting_comment'] + )); + + if ($res) { +?> +
Accounting created
+ +
Failed to create accounting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/accounting-change.php b/ehcp/fixes/policyd/webui/accounting-change.php new file mode 100644 index 0000000..6b95fe6 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accounting-change.php @@ -0,0 +1,318 @@ + array( + "Back to accounting" => "accounting-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a accounting was selected + if (isset($_POST['accounting_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}accounting.ID, ${DB_TABLE_PREFIX}accounting.PolicyID, ${DB_TABLE_PREFIX}accounting.Name, + ${DB_TABLE_PREFIX}accounting.Track, ${DB_TABLE_PREFIX}accounting.AccountingPeriod, + ${DB_TABLE_PREFIX}accounting.MessageCountLimit, ${DB_TABLE_PREFIX}accounting.MessageCumulativeSizeLimit, + ${DB_TABLE_PREFIX}accounting.Verdict, ${DB_TABLE_PREFIX}accounting.Data, + ${DB_TABLE_PREFIX}accounting.LastAccounting, + ${DB_TABLE_PREFIX}accounting.Comment, + ${DB_TABLE_PREFIX}accounting.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}accounting, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}accounting.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}accounting.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['accounting_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + +accountingperiod == "0") { + $accountingperiod = "Daily"; + } elseif ($row->accountingperiod == "1") { + $accountingperiod = "Weekly"; + } elseif ($row->accountingperiod == "2") { + $accountingperiod = "Monthly"; + } +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Tracktrack ?> + + +
Period + +
Message Count Limitmessagecountlimit ? $row->messagecountlimit : '-none-' ?>
Message Cumulative Size Limitmessagecumulativesizelimit ? $row->messagecumulativesizelimit : '-none-' ?>Kbyte
+ Verdict + verdict ?> + +
+ Data + data ?>
Stop processing herelastaccounting ? 'yes' : 'no' ?> + +
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No accounting selected
+ + +quote($_POST['accounting_policyid'])); + } + if (!empty($_POST['accounting_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['accounting_name'])); + } + if (!empty($_POST['accounting_track'])) { + if ($_POST['accounting_track'] == "SenderIP") { + $accountingTrack = sprintf('%s:%s',$_POST['accounting_track'],$_POST['accounting_trackextra']); + } else { + $accountingTrack = $_POST['accounting_track']; + } + array_push($updates,"Track = ".$db->quote($accountingTrack)); + } + if (isset($_POST['accounting_period']) && $_POST['accounting_period'] != "") { + array_push($updates,"AccountingPeriod = ".$db->quote($_POST['accounting_period'])); + } + if (!empty($_POST['accounting_messagecountlimit'])) { + array_push($updates,"MessageCountLimit = ".$db->quote($_POST['accounting_messagecountlimit'])); + } + if (!empty($_POST['accounting_messagecumulativesizelimit'])) { + array_push($updates,"MessageCumulativeSizeLimit = ".$db->quote($_POST['accounting_messagecumulativesizelimit'])); + } + if (!empty($_POST['accounting_verdict'])) { + array_push($updates,"Verdict = ".$db->quote($_POST['accounting_verdict'])); + } + if (!empty($_POST['accounting_data'])) { + array_push($updates,"Data = ".$db->quote($_POST['accounting_data'])); + } + if (!empty($_POST['accounting_lastaccounting'])) { + array_push($updates,"LastAccounting = ".$db->quote($_POST['accounting_lastaccounting'])); + } + if (!empty($_POST['accounting_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['accounting_comment'])); + } + if (isset($_POST['accounting_disabled']) && $_POST['accounting_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['accounting_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}accounting SET $updateStr WHERE ID = ".$db->quote($_POST['accounting_id'])); + if ($res) { +?> +
Accounting updated
+ +
Error updating accounting!
+
errorInfo()) ?>
+ +
No changes made to accounting
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/accounting-delete.php b/ehcp/fixes/policyd/webui/accounting-delete.php new file mode 100644 index 0000000..b29e754 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accounting-delete.php @@ -0,0 +1,149 @@ + array( + "Back to accounting" => "accounting-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a accounting was selected + if (isset($_POST['accounting_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure you want to remove this and its associated records?
+ + +
+
+ +
No accounting selected
+ + +beginTransaction(); + + $stmt = $db->prepare(" + DELETE FROM + ${DB_TABLE_PREFIX}accounting_tracking + WHERE + AccountingID = ? + "); + $res = $stmt->execute(array($_POST['accounting_id'])); + + if ($res !== FALSE) { +?> +
Accounting tracking info deleted
+ +
Error deleting accounting tracking info!
+
errorInfo()) ?>
+rollBack(); + } + + + if ($res !== FALSE) { + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}accounting WHERE ID = ".$db->quote($_POST['accounting_id'])); + if ($res) { +?> +
Accounting deleted
+ +
Error deleting accounting!
+
errorInfo()) ?>
+rollBack(); + } + } + + # Commit if last transaction succeeded + if ($res) { + $db->commit(); + } + + } else { +?> +
Accounting not deleted, aborted by user
+ +
Invocation error, no accounting ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/accounting-main.php b/ehcp/fixes/policyd/webui/accounting-main.php new file mode 100644 index 0000000..fd27694 --- /dev/null +++ b/ehcp/fixes/policyd/webui/accounting-main.php @@ -0,0 +1,145 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { + + # Get human readable ${DB_TABLE_PREFIX}accounting period + if ($row->accountingperiod == "0") { + $accountingperiod = "Daily"; + } elseif ($row->accountingperiod == "1") { + $accountingperiod = "Weekly"; + } elseif ($row->accountingperiod == "2") { + $accountingperiod = "Monthly"; + } +?> + + + + + + + + + + + + +closeCursor(); +?> +
PolicyNameTrackPeriodCount LimitCumulative Size LimitVerdictDataDisabled
policyname ?>name ?>track ?>messagecountlimit) ? $row->messagecountlimit : '-' ?>messagecumulativesizelimit) ? $row->messagecumulativesizelimit : '-' ?>verdict ?>data ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/amavis-add.php b/ehcp/fixes/policyd/webui/amavis-add.php new file mode 100644 index 0000000..0abeb04 --- /dev/null +++ b/ehcp/fixes/policyd/webui/amavis-add.php @@ -0,0 +1,1060 @@ + array( + "Back to Amavis" => "amavis-main.php" + ), +)); + + +# Process an option +function process_post_option($option) { + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,NULL); + array_push($results,0); + # Explicit yes + } elseif ($option == 1) { + array_push($results,1); + array_push($results,2); + # Explicit no + } elseif ($option == 2) { + array_push($results,0); + array_push($results,2); + } + + return $results; +}; + + +# Process a value +function process_post_value($option,$value) { + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,NULL); + array_push($results,0); + # Override + } elseif ($option == 2) { + array_push($results,$value); + array_push($results,2); + } + + return $results; +}; + + +# Process a list of items +function process_post_list($option,$value) { + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,NULL); + array_push($results,0); + # Merge + } elseif ($option == 1) { + array_push($results,$value); + array_push($results,1); + # Override + } elseif ($option == 2) { + array_push($results,$value); + array_push($results,2); + } + + return $results; +}; + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
Bypass Checks
+ Virus + + + +
+ Banned File + + + +
+ Spam + + + +
+ Header + + + +
Anti-spam Settings
+ Tag Level + + + + +
+ Tag2 Level + + + + +
+ Tag3 Level + + + + +
+ Kill Level + + + + +
+ DSN Cutoff Level + + + + +
+ Quarantine Cutoff Level + + + + +
+ Modify Subject + + + +
+ Tag Subject + + + + +
+ Tag2 Subject + + + + +
+ Tag3 Subject + + + + +
General Checks
+ Max Message Size (in Kbyte) + + + + +
+ Banned Files + + + +
+ +
Whitelist & Blacklist
+ Sender Whitelist + + + +
+ +
+ Sender Blacklist + + + +
+ +
Admin Notifications
+ New Virus + + + + +
+ Virus + + + + +
+ Spam + + + + +
+ Banned File + + + + +
+ Bad Header + + + + +
Quarantine
+ Virus + + + + +
+ Spam + + + + +
+ Banned File + + + + +
+ Bad Header + + + + +
Interception
+ BCC To + + + + +
 
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}amavis_rules + ( + PolicyID,Name, + + bypass_virus_checks, bypass_virus_checks_m, + bypass_banned_checks, bypass_banned_checks_m, + bypass_spam_checks, bypass_spam_checks_m, + bypass_header_checks, bypass_header_checks_m, + + spam_tag_level, spam_tag_level_m, + spam_tag2_level, spam_tag2_level_m, + spam_tag3_level, spam_tag3_level_m, + spam_kill_level, spam_kill_level_m, + spam_dsn_cutoff_level, spam_dsn_cutoff_level_m, + spam_quarantine_cutoff_level, spam_quarantine_cutoff_level_m, + + spam_modifies_subject, spam_modifies_subject_m, + spam_tag_subject, spam_tag_subject_m, + spam_tag2_subject, spam_tag2_subject_m, + spam_tag3_subject, spam_tag3_subject_m, + + max_message_size, max_message_size_m, + banned_files, banned_files_m, + + sender_whitelist, sender_whitelist_m, + sender_blacklist, sender_blacklist_m, + + notify_admin_newvirus, notify_admin_newvirus_m, + notify_admin_virus, notify_admin_virus_m, + notify_admin_spam, notify_admin_spam_m, + notify_admin_banned_file, notify_admin_banned_file_m, + notify_admin_bad_header, notify_admin_bad_header_m, + + quarantine_virus, quarantine_virus_m, + quarantine_spam, quarantine_spam_m, + quarantine_banned_file, quarantine_banned_file_m, + quarantine_bad_header, quarantine_bad_header_m, + + bcc_to, bcc_to_m, + + Comment, + + Disabled + ) + VALUES + ( + ?,?, + + ?,?, + ?,?, + ?,?, + ?,?, + + ?,?, + ?,?, + ?,?, + ?,?, + ?,?, + ?,?, + + ?,?, + ?,?, + ?,?, + ?,?, + + ?,?, + ?,?, + + ?,?, + ?,?, + + ?,?, + ?,?, + ?,?, + ?,?, + ?,?, + + ?,?, + ?,?, + ?,?, + ?,?, + + ?,?, + + ?, + + 1 + )" + ); + + if (!$stmt) { + print_r( $db->errorInfo() ); + } + + $res = $stmt->execute($dbinfo); + if ($res) { +?> +
Amavis rule created
+ +
Failed to create Amavis rule
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/amavis-change.php b/ehcp/fixes/policyd/webui/amavis-change.php new file mode 100644 index 0000000..7da8cc9 --- /dev/null +++ b/ehcp/fixes/policyd/webui/amavis-change.php @@ -0,0 +1,1248 @@ + array( + "Back to Amavis" => "amavis-main.php" + ), +)); + +# Process an option +function process_post_option($name,$option) { + global $db; + + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,"$name = NULL"); + array_push($results,"${name}_m = ".$db->quote(0)); + # Explicit yes + } elseif ($option == 1) { + array_push($results,"$name = ".$db->quote(1)); + array_push($results,"${name}_m = ".$db->quote(2)); + # Explicit no + } elseif ($option == 2) { + array_push($results,"$name = ".$db->quote(0)); + array_push($results,"${name}_m = ".$db->quote(2)); + } + + return $results; +}; + + +# Process a value +function process_post_value($name,$option,$value) { + global $db; + + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,"$name = NULL"); + array_push($results,"${name}_m = ".$db->quote(0)); + # Override + } elseif ($option == 2) { + array_push($results,"$name = ".$db->quote($value)); + array_push($results,"${name}_m = ".$db->quote(2)); + } + + return $results; +}; + + +# Process a list of items +function process_post_list($name,$option,$value) { + global $db; + + $results = array(); + + # Inherit + if ($option == 0) { + array_push($results,"$name = NULL"); + array_push($results,"${name}_m = ".$db->quote(0)); + # Merge + } elseif ($option == 1) { + array_push($results,"$name = ".$db->quote($value)); + array_push($results,"${name}_m = ".$db->quote(1)); + # Override + } elseif ($option == 2) { + array_push($results,"$name = ".$db->quote($value)); + array_push($results,"${name}_m = ".$db->quote(2)); + } + + return $results; +}; + + + + +# Make a pretty db option +function decode_db_option($option,$value) +{ + $ret = "unknown"; + + if ($option == "0") { + $ret = "Inherit"; + + # Overwrite + } elseif ($option == "2") { + + # Check value + if ($value == "0") { + $ret = "No"; + + } elseif ($value == "1") { + $ret = "Yes"; + } + } + + return $ret; +} + + +# Make a pretty db value +function decode_db_value($option,$value) +{ + $ret = "unknown"; + + if ($option == "0") { + $ret = "Inherit"; + + # Merge + } elseif ($option == "1") { + $ret = "Merge: $value"; + + # Overwrite + } elseif ($option == "2") { + $ret = "Overwrite: $value"; + + } + + return $ret; +} + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a amavis rule was selected + if (isset($_POST['amavis_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}amavis_rules.ID, ${DB_TABLE_PREFIX}amavis_rules.PolicyID, ${DB_TABLE_PREFIX}amavis_rules.Name, + + ${DB_TABLE_PREFIX}amavis_rules.bypass_virus_checks, ${DB_TABLE_PREFIX}amavis_rules.bypass_virus_checks_m, + ${DB_TABLE_PREFIX}amavis_rules.bypass_banned_checks, ${DB_TABLE_PREFIX}amavis_rules.bypass_banned_checks_m, + ${DB_TABLE_PREFIX}amavis_rules.bypass_spam_checks, ${DB_TABLE_PREFIX}amavis_rules.bypass_spam_checks_m, + ${DB_TABLE_PREFIX}amavis_rules.bypass_header_checks, ${DB_TABLE_PREFIX}amavis_rules.bypass_header_checks_m, + + ${DB_TABLE_PREFIX}amavis_rules.spam_tag_level, ${DB_TABLE_PREFIX}amavis_rules.spam_tag_level_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_tag2_level, ${DB_TABLE_PREFIX}amavis_rules.spam_tag2_level_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_tag3_level, ${DB_TABLE_PREFIX}amavis_rules.spam_tag3_level_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_kill_level, ${DB_TABLE_PREFIX}amavis_rules.spam_kill_level_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_dsn_cutoff_level, ${DB_TABLE_PREFIX}amavis_rules.spam_dsn_cutoff_level_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_quarantine_cutoff_level, ${DB_TABLE_PREFIX}amavis_rules.spam_quarantine_cutoff_level_m, + + ${DB_TABLE_PREFIX}amavis_rules.spam_modifies_subject, ${DB_TABLE_PREFIX}amavis_rules.spam_modifies_subject_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_tag_subject, ${DB_TABLE_PREFIX}amavis_rules.spam_tag_subject_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_tag2_subject, ${DB_TABLE_PREFIX}amavis_rules.spam_tag2_subject_m, + ${DB_TABLE_PREFIX}amavis_rules.spam_tag3_subject, ${DB_TABLE_PREFIX}amavis_rules.spam_tag3_subject_m, + + ${DB_TABLE_PREFIX}amavis_rules.max_message_size, ${DB_TABLE_PREFIX}amavis_rules.max_message_size_m, + ${DB_TABLE_PREFIX}amavis_rules.banned_files, ${DB_TABLE_PREFIX}amavis_rules.banned_files_m, + + ${DB_TABLE_PREFIX}amavis_rules.sender_whitelist, ${DB_TABLE_PREFIX}amavis_rules.sender_whitelist_m, + ${DB_TABLE_PREFIX}amavis_rules.sender_blacklist, ${DB_TABLE_PREFIX}amavis_rules.sender_blacklist_m, + + ${DB_TABLE_PREFIX}amavis_rules.notify_admin_newvirus, ${DB_TABLE_PREFIX}amavis_rules.notify_admin_newvirus_m, + ${DB_TABLE_PREFIX}amavis_rules.notify_admin_virus, ${DB_TABLE_PREFIX}amavis_rules.notify_admin_virus_m, + ${DB_TABLE_PREFIX}amavis_rules.notify_admin_spam, ${DB_TABLE_PREFIX}amavis_rules.notify_admin_spam_m, + ${DB_TABLE_PREFIX}amavis_rules.notify_admin_banned_file, ${DB_TABLE_PREFIX}amavis_rules.notify_admin_banned_file_m, + ${DB_TABLE_PREFIX}amavis_rules.notify_admin_bad_header, ${DB_TABLE_PREFIX}amavis_rules.notify_admin_bad_header_m, + + ${DB_TABLE_PREFIX}amavis_rules.quarantine_virus, ${DB_TABLE_PREFIX}amavis_rules.quarantine_virus_m, + ${DB_TABLE_PREFIX}amavis_rules.quarantine_spam, ${DB_TABLE_PREFIX}amavis_rules.quarantine_spam_m, + ${DB_TABLE_PREFIX}amavis_rules.quarantine_banned_file, ${DB_TABLE_PREFIX}amavis_rules.quarantine_banned_file_m, + ${DB_TABLE_PREFIX}amavis_rules.quarantine_bad_header, ${DB_TABLE_PREFIX}amavis_rules.quarantine_bad_header_m, + + ${DB_TABLE_PREFIX}amavis_rules.bcc_to, ${DB_TABLE_PREFIX}amavis_rules.bcc_to_m, + + ${DB_TABLE_PREFIX}amavis_rules.Comment, + ${DB_TABLE_PREFIX}amavis_rules.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}amavis_rules, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}amavis_rules.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}amavis_rules.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['amavis_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Bypass Checks
+ Virus Checks + + bypass_virus_checks_m,$row->bypass_virus_checks) ?> + +
+ Banned File Checks + + bypass_banned_checks_m,$row->bypass_banned_checks) ?> + +
+ Spam Checks + + bypass_spam_checks_m,$row->bypass_spam_checks) ?> + +
+ Header Checks + + bypass_header_checks_m,$row->bypass_header_checks) ?> + +
Anti-spam Settings
+ Tag Level + + spam_tag_level_m,$row->spam_tag_level) ?> + + +
+ Tag2 Level + + spam_tag2_level_m,$row->spam_tag2_level) ?> + + +
+ Tag3 Level + + spam_tag3_level_m,$row->spam_tag3_level) ?> + + +
+ Kill Level + + spam_kill_level_m,$row->spam_kill_level) ?> + + +
+ DSN Cutoff Level + + spam_dsn_cutoff_level_m,$row->spam_dsn_cutoff_level) ?> + + +
+ Quarantine Cutoff Level + + spam_quarantine_cutoff_level_m,$row->spam_quarantine_cutoff_level) ?> + + +
+ Modify Subject + + spam_modifies_subject_m,$row->spam_modifies_subject) ?> + +
+ Tag Subject + + spam_tag_subject_m,$row->spam_tag_subject) ?> + + +
+ Tag2 Subject + + spam_tag2_subject_m,$row->spam_tag2_subject) ?> + + +
+ Tag3 Subject + + spam_tag3_subject_m,$row->spam_tag3_subject) ?> + + +
General Checks
+ Max Message Size (Kbyte) + + max_message_size_m,$row->max_message_size) ?> + + +
+ Banned Files + + banned_files_m,$row->banned_files) ?> + +
+ +
Whitelist & Blacklist
+ Sender Whitelist + + sender_whitelist_m,$row->sender_whitelist) ?> + +
+ +
+ Sender Blacklist + + sender_blacklist_m,$row->sender_blacklist) ?> + +
+ +
Admin Notifications
+ New Virus + + notify_admin_newvirus_m,$row->notify_admin_newvirus) ?> + + +
+ Virus + + notify_admin_virus_m,$row->notify_admin_virus) ?> + + +
+ Spam + + notify_admin_spam_m,$row->notify_admin_spam) ?> + + +
+ Banned File + + notify_admin_banned_file_m,$row->notify_admin_banned_file) ?> + + +
+ Bad Header + + notify_admin_bad_header_m,$row->notify_admin_bad_header) ?> + + +
Quarantine
+ Virus + + quarantine_virus_m,$row->quarantine_virus) ?> + + +
+ Spam + + quarantine_spam_m,$row->quarantine_spam) ?> + + +
+ Banned File + + quarantine_banned_file_m,$row->quarantine_banned_file) ?> + + +
+ Bad Header + + quarantine_bad_header_m,$row->quarantine_bad_header) ?> + + +
Interception
+ BCC To + + bcc_to_m,$row->bcc_to) ?> + + +
 
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No Amavis rule selected
+ + +quote($_POST['amavis_policyid'])); + } + if (!empty($_POST['amavis_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['amavis_name'])); + } + + # Bypass options + if (isset($_POST['amavis_bypass_virus_checks']) && $_POST['amavis_bypass_virus_checks'] != "") { + $res = process_post_option('bypass_virus_checks',$_POST['amavis_bypass_virus_checks']); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_bypass_banned_checks']) && $_POST['amavis_bypass_banned_checks'] != "") { + $res = process_post_option('bypass_banned_checks',$_POST['amavis_bypass_banned_checks']); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_bypass_spam_checks']) && $_POST['amavis_bypass_spam_checks'] != "") { + $res = process_post_option('bypass_spam_checks',$_POST['amavis_bypass_spam_checks']); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_bypass_header_checks']) && $_POST['amavis_bypass_header_checks'] != "") { + $res = process_post_option('bypass_header_checks',$_POST['amavis_bypass_header_checks']); + $updates = array_merge($updates,$res); + } + + # Antispam level + if (isset($_POST['amavis_spam_tag_level_mode']) && $_POST['amavis_spam_tag_level_mode'] != "") { + $res = process_post_value('spam_tag_level',$_POST['amavis_spam_tag_level_mode'], + isset($_POST['amavis_spam_tag_level']) ? $_POST['amavis_spam_tag_level'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_tag2_level_mode']) && $_POST['amavis_spam_tag2_level_mode'] != "") { + $res = process_post_value('spam_tag2_level',$_POST['amavis_spam_tag2_level_mode'], + isset($_POST['amavis_spam_tag2_level']) ? $_POST['amavis_spam_tag2_level'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_tag3_level_mode']) && $_POST['amavis_spam_tag3_level_mode'] != "") { + $res = process_post_value('spam_tag3_level',$_POST['amavis_spam_tag3_level_mode'], + isset($_POST['amavis_spam_tag3_level']) ? $_POST['amavis_spam_tag3_level'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_kill_level_mode']) && $_POST['amavis_spam_kill_level_mode'] != "") { + $res = process_post_value('spam_kill_level',$_POST['amavis_spam_kill_level_mode'], + isset($_POST['amavis_spam_kill_level']) ? $_POST['amavis_spam_kill_level'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_dsn_cutoff_level_mode']) && $_POST['amavis_spam_dsn_cutoff_level_mode'] != "") { + $res = process_post_value('spam_dsn_cutoff_level',$_POST['amavis_spam_dsn_cutoff_level_mode'], + isset($_POST['amavis_spam_dsn_cutoff_level']) ? $_POST['amavis_spam_dsn_cutoff_level'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_quarantine_cutoff_level_mode']) && $_POST['amavis_spam_quarantine_cutoff_level_mode'] != "") { + $res = process_post_value('spam_quarantine_cutoff_level',$_POST['amavis_spam_quarantine_cutoff_level_mode'], + isset($_POST['amavis_spam_quarantine_cutoff_level']) ? $_POST['amavis_spam_quarantine_cutoff_level'] : '' + ); + $updates = array_merge($updates,$res); + } + + if (isset($_POST['amavis_spam_modifies_subject']) && $_POST['amavis_spam_modifies_subject'] != "") { + $res = process_post_option('spam_modifies_subject',$_POST['amavis_spam_modifies_subject']); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_tag_subject_mode']) && $_POST['amavis_spam_tag_subject_mode'] != "") { + $res = process_post_value('spam_tag_subject',$_POST['amavis_spam_tag_subject_mode'], + isset($_POST['amavis_spam_tag_subject']) ? $_POST['amavis_spam_tag_subject'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_tag2_subject_mode']) && $_POST['amavis_spam_tag2_subject_mode'] != "") { + $res = process_post_value('spam_tag2_subject',$_POST['amavis_spam_tag2_subject_mode'], + isset($_POST['amavis_spam_tag2_subject']) ? $_POST['amavis_spam_tag2_subject'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_spam_tag3_subject_mode']) && $_POST['amavis_spam_tag3_subject_mode'] != "") { + $res = process_post_value('spam_tag3_subject',$_POST['amavis_spam_tag3_subject_mode'], + isset($_POST['amavis_spam_tag3_subject']) ? $_POST['amavis_spam_tag3_subject'] : '' + ); + $updates = array_merge($updates,$res); + } + + # General + if (isset($_POST['amavis_max_message_size_mode']) && $_POST['amavis_max_message_size_mode'] != "") { + $res = process_post_value('max_message_size',$_POST['amavis_max_message_size_mode'], + isset($_POST['amavis_max_message_size']) ? $_POST['amavis_max_message_size'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_banned_files_mode']) && $_POST['amavis_banned_files_mode'] != "") { + $res = process_post_list('banned_files',$_POST['amavis_banned_files_mode'], + isset($_POST['amavis_banned_files']) ? $_POST['amavis_banned_files'] : '' + ); + $updates = array_merge($updates,$res); + } + + # Whitelist & blacklist + if (isset($_POST['amavis_sender_whitelist_mode']) && $_POST['amavis_sender_whitelist_mode'] != "") { + $res = process_post_list('sender_whitelist',$_POST['amavis_sender_whitelist_mode'], + isset($_POST['amavis_sender_whitelist']) ? $_POST['amavis_sender_whitelist'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_sender_blacklist_mode']) && $_POST['amavis_sender_blacklist_mode'] != "") { + $res = process_post_list('sender_blacklist',$_POST['amavis_sender_blacklist_mode'], + isset($_POST['amavis_sender_blacklist']) ? $_POST['amavis_sender_blacklist'] : '' + ); + $updates = array_merge($updates,$res); + } + + # Notifications + if (isset($_POST['amavis_notify_admin_newvirus_mode']) && $_POST['amavis_notify_admin_newvirus_mode'] != "") { + $res = process_post_value('notify_admin_newvirus',$_POST['amavis_notify_admin_newvirus_mode'], + isset($_POST['amavis_notify_admin_newvirus']) ? $_POST['amavis_notify_admin_newvirus'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_notify_admin_virus_mode']) && $_POST['amavis_notify_admin_virus_mode'] != "") { + $res = process_post_value('notify_admin_virus',$_POST['amavis_notify_admin_virus_mode'], + isset($_POST['amavis_notify_admin_virus']) ? $_POST['amavis_notify_admin_virus'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_notify_admin_spam_mode']) && $_POST['amavis_notify_admin_spam_mode'] != "") { + $res = process_post_value('notify_admin_spam',$_POST['amavis_notify_admin_spam_mode'], + isset($_POST['amavis_notify_admin_spam']) ? $_POST['amavis_notify_admin_spam'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_notify_admin_banned_file_mode']) && $_POST['amavis_notify_admin_banned_file_mode'] != "") { + $res = process_post_value('notify_admin_banned_file',$_POST['amavis_notify_admin_banned_file_mode'], + isset($_POST['amavis_notify_admin_banned_file']) ? $_POST['amavis_notify_admin_banned_file'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_notify_admin_bad_header_mode']) && $_POST['amavis_notify_admin_bad_header_mode'] != "") { + $res = process_post_value('notify_admin_bad_header',$_POST['amavis_notify_admin_bad_header_mode'], + isset($_POST['amavis_notify_admin_bad_header']) ? $_POST['amavis_notify_admin_bad_header'] : '' + ); + $updates = array_merge($updates,$res); + } + + # Quarantine + if (isset($_POST['amavis_quarantine_virus_mode']) && $_POST['amavis_quarantine_virus_mode'] != "") { + $res = process_post_value('quarantine_virus',$_POST['amavis_quarantine_virus_mode'], + isset($_POST['amavis_quarantine_virus']) ? $_POST['amavis_quarantine_virus'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_quarantine_spam_mode']) && $_POST['amavis_quarantine_spam_mode'] != "") { + $res = process_post_value('quarantine_spam',$_POST['amavis_quarantine_spam_mode'], + isset($_POST['amavis_quarantine_spam']) ? $_POST['amavis_quarantine_spam'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_quarantine_banned_file_mode']) && $_POST['amavis_quarantine_banned_file_mode'] != "") { + $res = process_post_value('quarantine_banned_file',$_POST['amavis_quarantine_banned_file_mode'], + isset($_POST['amavis_quarantine_banned_file']) ? $_POST['amavis_quarantine_banned_file'] : '' + ); + $updates = array_merge($updates,$res); + } + if (isset($_POST['amavis_quarantine_bad_header_mode']) && $_POST['amavis_quarantine_bad_header_mode'] != "") { + $res = process_post_value('quarantine_bad_header',$_POST['amavis_quarantine_bad_header_mode'], + isset($_POST['amavis_quarantine_bad_header']) ? $_POST['amavis_quarantine_bad_header'] : '' + ); + $updates = array_merge($updates,$res); + } + + # Interception + if (isset($_POST['amavis_bcc_to_mode']) && $_POST['amavis_bcc_to_mode'] != "") { + $res = process_post_value('bcc_to',$_POST['amavis_bcc_to_mode'], + isset($_POST['amavis_bcc_to']) ? $_POST['amavis_bcc_to'] : '' + ); + $updates = array_merge($updates,$res); + } + + # Whatever is left over + if (!empty($_POST['amavis_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['amavis_comment'])); + } + if (isset($_POST['amavis_disabled']) && $_POST['amavis_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['amavis_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}amavis_rules SET $updateStr WHERE ID = ".$db->quote($_POST['amavis_id'])); + if ($res) { +?> +
Amavis rule updated
+ +
Error updating Amavis rule!
+
errorInfo()) ?>
+ +
No changes made to Amavis rule
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/amavis-delete.php b/ehcp/fixes/policyd/webui/amavis-delete.php new file mode 100644 index 0000000..b62ac55 --- /dev/null +++ b/ehcp/fixes/policyd/webui/amavis-delete.php @@ -0,0 +1,115 @@ + array( + "Back to Amavis" => "amavis-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a amavis rule was selected + if (isset($_POST['amavis_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No Amavis rule selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}amavis_rules WHERE ID = ".$db->quote($_POST['amavis_id'])); + if ($res) { +?> +
Amavis rule deleted
+ +
Error deleting Amavis rule!
+
errorInfo()) ?>
+ +
Amavis rule not deleted, aborted by user
+ +
Invocation error, no Amavis rule ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/amavis-main.php b/ehcp/fixes/policyd/webui/amavis-main.php new file mode 100644 index 0000000..e3a7088 --- /dev/null +++ b/ehcp/fixes/policyd/webui/amavis-main.php @@ -0,0 +1,120 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
PolicyNameDisabled
policyname ?>name ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-add.php b/ehcp/fixes/policyd/webui/checkhelo-add.php new file mode 100644 index 0000000..26524d7 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-add.php @@ -0,0 +1,332 @@ + array( + "Back to HELO checks" => "checkhelo-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
Blacklisting
Use Blacklist + +
+ Blacklist Period + +
Randomization Prevention
+ Use HRP + + +
+ HRP Period + +
+ HRP Limit + +
Reject (RFC non-compliance)
+ Reject Invalid + + + +
+ Reject non-literal IP + + + +
+ Reject Unresolvable + + + +
 
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}checkhelo + ( + PolicyID,Name, + UseBlacklist,BlacklistPeriod, + UseHRP,HRPPeriod,HRPLimit, + RejectInvalid,RejectIP,RejectUnresolvable, + Comment,Disabled + ) + VALUES + ( + ?,?, + ?,?, + ?,?,?, + ?,?,?, + ?,1 + ) + "); + + $res = $stmt->execute(array( + $_POST['checkhelo_policyid'], + $_POST['checkhelo_name'], + $useBlacklist,$blacklistPeriod, + $useHRP,$HRPPeriod,$HRPLimit, + $rejectInvalid,$rejectIP,$rejectUnresolvable, + $_POST['checkhelo_comment'] + )); + + if ($res) { +?> +
HELO/EHLO check created
+ +
Failed to create HELO/EHLO check
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-blacklist-add.php b/ehcp/fixes/policyd/webui/checkhelo-blacklist-add.php new file mode 100644 index 0000000..fb5f8e3 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-blacklist-add.php @@ -0,0 +1,113 @@ + array( + "Back to blacklist" => "checkhelo-blacklist-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + +
+ Helo + +
Comment
+ +
+
+ + + + + +
Helo cannot be empty
+prepare("INSERT INTO ${DB_TABLE_PREFIX}checkhelo_blacklist (Helo,Comment,Disabled) VALUES (?,?,1)"); + + $res = $stmt->execute(array( + $_POST['blacklist_helo'], + $_POST['blacklist_comment'] + )); + + if ($res) { +?> +
HELO/EHLO blacklist created
+ +
Failed to create HELO/EHLO blacklisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-blacklist-change.php b/ehcp/fixes/policyd/webui/checkhelo-blacklist-change.php new file mode 100644 index 0000000..d02e2fb --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-blacklist-change.php @@ -0,0 +1,169 @@ + array( + "Back to blacklist" => "checkhelo-blacklist-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a checkhelo blacklist was selected + if (isset($_POST['blacklist_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ID, Helo, Comment, + Disabled + + FROM + ${DB_TABLE_PREFIX}checkhelo_blacklist + + WHERE + ID = ? + "); +?> + + +
+
+ + +
+execute(array($_POST['blacklist_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
+ Helo + + helo ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No blacklisting selected
+ + +quote($_POST['blacklist_helo'])); + } + if (!empty($_POST['blacklist_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['blacklist_comment'])); + } + if (isset($_POST['blacklist_disabled']) && $_POST['blacklist_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['blacklist_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}checkhelo_blacklist SET $updateStr WHERE ID = ".$db->quote($_POST['blacklist_id'])); + if ($res) { +?> +
HELO/EHLO blacklisting updated
+ +
Error updating HELO/EHLO blacklisting!
+
errorInfo()) ?>
+ +
No changes made to HELO/EHLO blacklisting
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-blacklist-delete.php b/ehcp/fixes/policyd/webui/checkhelo-blacklist-delete.php new file mode 100644 index 0000000..7d6a17c --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-blacklist-delete.php @@ -0,0 +1,114 @@ + array( + "Back to blacklist" => "checkhelo-blacklist-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a blacklisting was selected + if (isset($_POST['blacklist_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No HELO/EHLO blacklisting selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}checkhelo_blacklist WHERE ID = ".$db->quote($_POST['blacklist_id'])); + if ($res) { +?> +
HELO/EHLO blacklist deleted
+ +
Error deleting HELO/EHLO blacklist!
+
errorInfo()) ?>
+ +
HELO/EHLO blacklist not deleted, aborted by user
+ +
Invocation error, no whitelist ID
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-blacklist-main.php b/ehcp/fixes/policyd/webui/checkhelo-blacklist-main.php new file mode 100644 index 0000000..cc54db1 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-blacklist-main.php @@ -0,0 +1,113 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + +query($sql); + while ($row = $res->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
HELO/EHLODisabled
helo ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-change.php b/ehcp/fixes/policyd/webui/checkhelo-change.php new file mode 100644 index 0000000..40b06a7 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-change.php @@ -0,0 +1,484 @@ + array( + "Back to HELO checks" => "checkhelo-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a helo check was selected + if (isset($_POST['checkhelo_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}checkhelo.ID, ${DB_TABLE_PREFIX}checkhelo.PolicyID, ${DB_TABLE_PREFIX}checkhelo.Name, + + ${DB_TABLE_PREFIX}checkhelo.UseBlacklist, ${DB_TABLE_PREFIX}checkhelo.BlacklistPeriod, + + ${DB_TABLE_PREFIX}checkhelo.UseHRP, ${DB_TABLE_PREFIX}checkhelo.HRPPeriod, ${DB_TABLE_PREFIX}checkhelo.HRPLimit, + + ${DB_TABLE_PREFIX}checkhelo.RejectInvalid, ${DB_TABLE_PREFIX}checkhelo.RejectIP, ${DB_TABLE_PREFIX}checkhelo.RejectUnresolvable, + + ${DB_TABLE_PREFIX}checkhelo.Comment, + ${DB_TABLE_PREFIX}checkhelo.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}checkhelo, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}checkhelo.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}checkhelo.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['checkhelo_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Blacklisting
Use Blacklistuseblacklist) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 0: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Blacklist Period + + blacklistperiod) ? '*inherited*' : $row->blacklistperiod ?> + + +
Randomization Prevention
+ Use HRP + usehrp) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 0: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ HRP Period + + hrpperiod) ? '*inherited*' : $row->hrpperiod ?> + + +
+ HRP Limit + + hrplimit) ? '*inherited*' : $row->hrplimit ?> + + +
Reject (RFC non-compliance)
+ Reject Invalid + + rejectinvalid) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 0: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Reject non-literal IP + + rejectip) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 0: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Reject Unresolvable + + rejectunresolvable) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 0: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
 
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No HELO/EHLO check selected
+ + +quote($_POST['checkhelo_policyid'])); + } + + if (!empty($_POST['checkhelo_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['checkhelo_name'])); + } + + if (!empty($_POST['checkhelo_useblacklist'])) { + if ($_POST['checkhelo_useblacklist'] == "1") { + $useblacklist = null; + } elseif ($_POST['checkhelo_useblacklist'] == "2") { + $useblacklist = 1; + } elseif ($_POST['checkhelo_useblacklist'] == "3") { + $useblacklist = 0; + } + array_push($updates,"UseBlacklist = ".$db->quote($useblacklist)); + } + if (!empty($_POST['checkhelo_blacklistperiod_m'])) { + if ($_POST['checkhelo_blacklistperiod_m'] == "1") { + $blacklistperiod = null; + } elseif ($_POST['checkhelo_blacklistperiod_m'] == "2") { + $blacklistperiod = $_POST['checkhelo_blacklistperiod']; + } + array_push($updates,"BlacklistPeriod = ".$db->quote($blacklistperiod)); + } + + if (!empty($_POST['checkhelo_usehrp'])) { + if ($_POST['checkhelo_usehrp'] == "1") { + $usehrp = null; + } elseif ($_POST['checkhelo_usehrp'] == "2") { + $usehrp = 1; + } elseif ($_POST['checkhelo_usehrp'] == "3") { + $usehrp = 0; + } + array_push($updates,"UseHRP = ".$db->quote($usehrp)); + } + if (!empty($_POST['checkhelo_hrpperiod_m'])) { + if ($_POST['checkhelo_hrpperiod_m'] == "1") { + $hrpperiod = null; + } elseif ($_POST['checkhelo_hrpperiod_m'] == "2") { + $hrpperiod = $_POST['checkhelo_hrpperiod']; + } + array_push($updates,"HRPPeriod = ".$db->quote($hrpperiod)); + } + if (!empty($_POST['checkhelo_hrplimit_m'])) { + if ($_POST['checkhelo_hrplimit_m'] == "1") { + $hrplimit = null; + } elseif ($_POST['checkhelo_hrplimit_m'] == "2") { + $hrplimit = $_POST['checkhelo_hrplimit']; + } + array_push($updates,"HRPLimit = ".$db->quote($hrplimit)); + } + + if (!empty($_POST['checkhelo_rejectinvalid'])) { + if ($_POST['checkhelo_rejectinvalid'] == "1") { + $rejectinvalid = null; + } elseif ($_POST['checkhelo_rejectinvalid'] == "2") { + $rejectinvalid = 1; + } elseif ($_POST['checkhelo_rejectinvalid'] == "3") { + $rejectinvalid = 0; + } + array_push($updates,"RejectInvalid = ".$db->quote($rejectinvalid)); + } + + if (!empty($_POST['checkhelo_rejectip'])) { + if ($_POST['checkhelo_rejectip'] == "1") { + $rejectip = null; + } elseif ($_POST['checkhelo_rejectip'] == "2") { + $rejectip = 1; + } elseif ($_POST['checkhelo_rejectip'] == "3") { + $rejectip = 0; + } + array_push($updates,"RejectIP = ".$db->quote($rejectip)); + } + + if (!empty($_POST['checkhelo_rejectunresolvable'])) { + if ($_POST['checkhelo_rejectunresolvable'] == "1") { + $rejectunresolvable = null; + } elseif ($_POST['checkhelo_rejectunresolvable'] == "2") { + $rejectunresolvable = 1; + } elseif ($_POST['checkhelo_rejectunresolvable'] == "3") { + $rejectunresolvable = 0; + } + array_push($updates,"RejectUnresolvable = ".$db->quote($rejectunresolvable)); + } + + if (!empty($_POST['checkhelo_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['checkhelo_comment'])); + } + if (isset($_POST['checkhelo_disabled']) && $_POST['checkhelo_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['checkhelo_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}checkhelo SET $updateStr WHERE ID = ".$db->quote($_POST['checkhelo_id'])); + if ($res) { +?> +
HELO/EHLO check updated
+ +
Error updating HELO/EHLO check!
+
errorInfo()) ?>
+ +
No changes made to HELO/EHLO check
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-delete.php b/ehcp/fixes/policyd/webui/checkhelo-delete.php new file mode 100644 index 0000000..bd9af31 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-delete.php @@ -0,0 +1,115 @@ + array( + "Back to HELO checks" => "checkhelo-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a helo/helo check was selected + if (isset($_POST['checkhelo_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No HELO/EHLO check selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}checkhelo WHERE ID = ".$db->quote($_POST['checkhelo_id'])); + if ($res) { +?> +
HELO/EHLO check deleted
+ +
Error deleting HELO/EHLO check!
+
errorInfo()) ?>
+ +
HELO/EHLO check not deleted, aborted by user
+ +
Invocation error, no HELO/EHLO ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/checkhelo-main.php b/ehcp/fixes/policyd/webui/checkhelo-main.php new file mode 100644 index 0000000..cee7b78 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-main.php @@ -0,0 +1,120 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
PolicyNameDisabled
policyname ?>name ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-whitelist-add.php b/ehcp/fixes/policyd/webui/checkhelo-whitelist-add.php new file mode 100644 index 0000000..dd95d51 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-whitelist-add.php @@ -0,0 +1,118 @@ + array( + "Back to whitelist" => "checkhelo-whitelist-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + +
+ Source + + + + +
Comment
+ +
+
+ + + + + +
Source cannot be empty
+prepare("INSERT INTO ${DB_TABLE_PREFIX}checkhelo_whitelist (Source,Comment,Disabled) VALUES (?,?,1)"); + + $res = $stmt->execute(array( + $_POST['whitelist_type'] . ":" . $_POST['whitelist_source'], + $_POST['whitelist_comment'] + )); + + if ($res) { +?> +
HELO/EHLO whitelist created
+ +
Failed to create HELO/EHLO whitelisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-whitelist-change.php b/ehcp/fixes/policyd/webui/checkhelo-whitelist-change.php new file mode 100644 index 0000000..3fe5830 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-whitelist-change.php @@ -0,0 +1,175 @@ + array( + "Back to whitelist" => "checkhelo-whitelist-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a whitelist was selected + if (isset($_POST['whitelist_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ID, Source, Comment, + Disabled + + FROM + ${DB_TABLE_PREFIX}checkhelo_whitelist + + WHERE + ID = ? + "); +?> + + +
+
+ + +
+execute(array($_POST['whitelist_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
+ Source + + source ?> + + +
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No whitelisting selected
+ + +quote($_POST['whitelist_type'].":".$_POST['whitelist_source'])); + } + if (!empty($_POST['whitelist_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['whitelist_comment'])); + } + if (isset($_POST['whitelist_disabled']) && $_POST['whitelist_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['whitelist_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}checkhelo_whitelist SET $updateStr WHERE ID = ".$db->quote($_POST['whitelist_id'])); + if ($res) { +?> +
HELO/EHLO whitelisting updated
+ +
Error updating HELO/EHLO whitelisting!
+ +
No changes made to HELO/EHLO whitelisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkhelo-whitelist-delete.php b/ehcp/fixes/policyd/webui/checkhelo-whitelist-delete.php new file mode 100644 index 0000000..3462543 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-whitelist-delete.php @@ -0,0 +1,115 @@ + array( + "Back to whitelist" => "checkhelo-whitelist-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a whitelisting was selected + if (isset($_POST['whitelist_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No HELO/EHLO whitelisting selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}checkhelo_whitelist WHERE ID = ".$db->quote($_POST['whitelist_id'])); + if ($res) { +?> +
HELO/EHLO whitelist deleted
+ +
Error deleting HELO/EHLO whitelist!
+
errorInfo()) ?>
+ +
HELO/EHLO whitelist not deleted, aborted by user
+ +
Invocation error, no whitelist ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/checkhelo-whitelist-main.php b/ehcp/fixes/policyd/webui/checkhelo-whitelist-main.php new file mode 100644 index 0000000..860a689 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkhelo-whitelist-main.php @@ -0,0 +1,113 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + +query($sql); + while ($row = $res->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
SourceDisabled
source ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/checkspf-add.php b/ehcp/fixes/policyd/webui/checkspf-add.php new file mode 100644 index 0000000..7e1e2e7 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkspf-add.php @@ -0,0 +1,215 @@ + array( + "Back to SPF checks" => "checkspf-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
Use SPF + +
+ Reject Failed SPF + + + +
+ Add SPF Header + + + +
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}checkspf + (PolicyID,Name,UseSPF,RejectFailedSPF,AddSPFHeader,Comment,Disabled) + VALUES + (?,?,?,?,?,?,1) + "); + + $res = $stmt->execute(array( + $_POST['checkspf_policyid'], + $_POST['checkspf_name'], + $useSPF, + $rejectFailed, + $addHeader, + $_POST['checkspf_comment'] + )); + + if ($res) { +?> +
SPF check created
+ +
Failed to create SPF check
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkspf-change.php b/ehcp/fixes/policyd/webui/checkspf-change.php new file mode 100644 index 0000000..0e568f5 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkspf-change.php @@ -0,0 +1,310 @@ + array( + "Back to SPF checks" => "checkspf-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a SPF check was selected + if (isset($_POST['checkspf_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}checkspf.ID, ${DB_TABLE_PREFIX}checkspf.PolicyID, ${DB_TABLE_PREFIX}checkspf.Name, + ${DB_TABLE_PREFIX}checkspf.UseSPF, ${DB_TABLE_PREFIX}checkspf.RejectFailedSPF, + ${DB_TABLE_PREFIX}checkspf.AddSPFHeader, + ${DB_TABLE_PREFIX}checkspf.Comment, ${DB_TABLE_PREFIX}checkspf.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}checkspf, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}checkspf.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}checkspf.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['checkspf_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Use SPFusespf) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 2: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Reject Failed SPF + + rejectfailedspf) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 2: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Add SPF Header + + addspfheader) { + case null: + echo "Inherit"; + break; + case 1: + echo "Yes"; + break; + case 2: + echo "No"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No access control selected
+ + +quote($_POST['checkspf_policyid'])); + } + if (!empty($_POST['checkspf_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['checkspf_name'])); + } + if (!empty($_POST['checkspf_usespf'])) { + if ($_POST['checkspf_usespf'] == "1") { + $usespf = null; + } elseif ($_POST['checkspf_usespf'] == "2") { + $usespf = 1; + } elseif ($_POST['checkspf_usespf'] == "3") { + $usespf = 2; + } + array_push($updates,"UseSPF = ".$db->quote($usespf)); + } + if (!empty($_POST['checkspf_rejectfailed'])) { + if ($_POST['checkspf_rejectfailed'] == "1") { + $rejectfailed = null; + } elseif ($_POST['checkspf_rejectfailed'] == "2") { + $rejectfailed = 1; + } elseif ($_POST['checkspf_rejectfailed'] == "3") { + $rejectfailed = 2; + } + array_push($updates,"RejectFailedSPF = ".$db->quote($rejectfailed)); + } + if (!empty($_POST['checkspf_addheader'])) { + if ($_POST['checkspf_addheader'] == "1") { + $addheader = null; + } elseif ($_POST['checkspf_addheader'] == "2") { + $addheader = 1; + } elseif ($_POST['checkspf_addheader'] == "3") { + $addheader = 2; + } + array_push($updates,"AddSPFHeader = ".$db->quote($addheader)); + } + if (!empty($_POST['checkspf_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['checkspf_comment'])); + } + if (isset($_POST['checkspf_disabled']) && $_POST['checkspf_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['checkspf_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}checkspf SET $updateStr WHERE ID = ".$db->quote($_POST['checkspf_id'])); + if ($res) { +?> +
SPF check updated
+ +
Error updating SPF check!
+
errorInfo()) ?>
+ +
No changes made to SPF check
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkspf-delete.php b/ehcp/fixes/policyd/webui/checkspf-delete.php new file mode 100644 index 0000000..e4a5cf7 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkspf-delete.php @@ -0,0 +1,114 @@ + array( + "Back to SPF checks" => "checkspf-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a SPF check was selected + if (isset($_POST['checkspf_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No SPF check selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}checkspf WHERE ID = ".$db->quote($_POST['checkspf_id'])); + if ($res) { +?> +
SPF check deleted
+ +
Error deleting SPF check!
+
errorInfo()) ?>
+ +
SPF check not deleted, aborted by user
+ +
Invocation error, no SPF check ID
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/checkspf-main.php b/ehcp/fixes/policyd/webui/checkspf-main.php new file mode 100644 index 0000000..3ac19a4 --- /dev/null +++ b/ehcp/fixes/policyd/webui/checkspf-main.php @@ -0,0 +1,120 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
PolicyNameDisabled
policyname ?>name ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/greylisting-add.php b/ehcp/fixes/policyd/webui/greylisting-add.php new file mode 100644 index 0000000..054198f --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-add.php @@ -0,0 +1,388 @@ + array( + "Back to greylisting" => "greylisting-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Link to policy + +
Greylisting
Use Greylisting + +
+ Greylist Period + +
+ Track + + + + +
+ Greylist Auth Validity + +
+ Greylist UnAuth Validity + +
Auto-Whitelisting
Use AWL + +
+ AWL For Period + +
+ AWL After Count + +
+ AWL After Percentage + + (blank = inherit, 0 = disable)
Auto-Blacklisting
Use ABL + +
+ ABL For Period + +
+ ABL After Count + +
+ ABL After Percentage + +
 
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}greylisting + ( + PolicyID,Name, + UseGreylisting,GreylistPeriod, + Track, + GreylistAuthValidity, GreylistUnAuthValidity, + + UseAutoWhitelist,AutoWhitelistPeriod,AutoWhitelistCount,AutoWhitelistPercentage, + UseAutoBlacklist,AutoBlacklistPeriod,AutoBlacklistCount,AutoBlacklistPercentage, + + Comment,Disabled + ) + VALUES + ( + ?,?, + ?,?, + ?, + ?,?, + ?,?,?,?, + ?,?,?,?, + ?,1 + ) + "); + + $res = $stmt->execute(array( + $_POST['greylisting_policyid'], + $_POST['greylisting_name'], + + $useGreylisting,$greylistPeriod, + $_POST['greylisting_track'] . ":" . $_POST['greylisting_trackextra'], + $greylistAuthValidity,$greylistUnAuthValidity, + + $useAWL,$AWLPeriod,$AWLCount,$AWLPercentage, + $useABL,$ABLPeriod,$ABLCount,$ABLPercentage, + + $_POST['greylisting_comment'] + )); + + if ($res) { +?> +
Greylisting created
+ +
Failed to create Greylisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/greylisting-change.php b/ehcp/fixes/policyd/webui/greylisting-change.php new file mode 100644 index 0000000..dd490dc --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-change.php @@ -0,0 +1,641 @@ + array( + "Back to greylisting" => "greylisting-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a ${DB_TABLE_PREFIX}greylisting was selected + if (isset($_POST['greylisting_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}greylisting.ID, ${DB_TABLE_PREFIX}greylisting.PolicyID, ${DB_TABLE_PREFIX}greylisting.Name, + + ${DB_TABLE_PREFIX}greylisting.UseGreylisting, ${DB_TABLE_PREFIX}greylisting.GreylistPeriod, + + ${DB_TABLE_PREFIX}greylisting.Track, ${DB_TABLE_PREFIX}greylisting.GreylistAuthValidity, + ${DB_TABLE_PREFIX}greylisting.GreylistUnAuthValidity, + + ${DB_TABLE_PREFIX}greylisting.useAutoWhitelist, ${DB_TABLE_PREFIX}greylisting.AutoWhitelistPeriod, + ${DB_TABLE_PREFIX}greylisting.AutoWhitelistCount, ${DB_TABLE_PREFIX}greylisting.AutoWhitelistPercentage, + + ${DB_TABLE_PREFIX}greylisting.useAutoBlacklist, ${DB_TABLE_PREFIX}greylisting.AutoBlacklistPeriod, + ${DB_TABLE_PREFIX}greylisting.AutoBlacklistCount, ${DB_TABLE_PREFIX}greylisting.AutoBlacklistPercentage, + + ${DB_TABLE_PREFIX}greylisting.Comment, + ${DB_TABLE_PREFIX}greylisting.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}greylisting, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}greylisting.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}greylisting.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['greylisting_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Greylisting
Use Greylistingusegreylisting) { + case null: + echo "Inherit"; + break; + case 0: + echo "No"; + break; + case 1: + echo "Yes"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ Greylist Period + + greylistperiod) ? '*inherited*' : $row->greylistperiod ?> + + +
+ Track + + track ?> + + +
+ Greylist Auth Validity + + greylistauthvalidity) ? '*inherited*' : $row->greylistauthvalidity ?> + + +
+ Greylist UnAuth Validity + + greylistunauthvalidity) ? '*inherited*' : $row->greylistunauthvalidity ?> + + +
Auto-Whitelisting
Use AWLuseautowhitelist) { + case null: + echo "Inherit"; + break; + case 0: + echo "No"; + break; + case 1: + echo "Yes"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ AWL Period + + autowhitelistperiod) ? '*inherited*' : $row->autowhitelistperiod ?> + + +
+ AWL After Count + + + autowhitelistcount)) { + echo '*inherited*'; + } elseif ($row->autowhitelistcount == "0") { + echo '*disabled*'; + } else { + echo $row->autowhitelistcount; + } + ?> + + + +
+ AWL After Percentage + + + autowhitelistpercentage)) { + echo '*inherited*'; + } elseif ($row->autowhitelistpercentage == "0") { + echo '*disabled*'; + } else { + echo $row->autowhitelistpercentage; + } + ?> + + + +
Auto-Blacklisting
Use ABLuseautoblacklist) { + case null: + echo "Inherit"; + break; + case 0: + echo "No"; + break; + case 1: + echo "Yes"; + break; + default: + echo "UNKNOWN"; + break; + } + ?> + +
+ ABL Period + + autoblacklistperiod) ? '*inherited*' : $row->autoblacklistperiod ?> + + +
+ ABL After Count + + + autoblacklistcount)) { + echo '*inherited*'; + } elseif ($row->autoblacklistcount == "0") { + echo '*disabled*'; + } else { + echo $row->autoblacklistcount; + } + ?> + + + +
+ ABL After Percentage + + + autoblacklistpercentage)) { + echo '*inherited*'; + } elseif ($row->autoblacklistpercentage == "0") { + echo '*disabled*'; + } else { + echo $row->autoblacklistpercentage; + } + ?> + + + +
 
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No Greylisting check selected
+ + +quote($_POST['greylisting_policyid'])); + } + + if (!empty($_POST['greylisting_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['greylisting_name'])); + } + + if (!empty($_POST['greylisting_usegreylisting'])) { + if ($_POST['greylisting_usegreylisting'] == "1") { + $usegreylisting = "NULL"; + } elseif ($_POST['greylisting_usegreylisting'] == "2") { + $usegreylisting = $db->quote(1); + } elseif ($_POST['greylisting_usegreylisting'] == "3") { + $usegreylisting = $db->quote(0); + } + array_push($updates,"UseGreylisting = $usegreylisting"); + } + + if (!empty($_POST['greylisting_period_m'])) { + if ($_POST['greylisting_period_m'] == "1") { + $period = "NULL"; + } elseif ($_POST['greylisting_period_m'] == "2") { + $period = $db->quote($_POST['greylisting_period']); + } + array_push($updates,"GreylistPeriod = $period"); + } + + if (!empty($_POST['greylisting_track'])) { + if ($_POST['greylisting_track'] == "SenderIP") { + $track = sprintf('%s:%s',$_POST['greylisting_track'],$_POST['greylisting_trackextra']); + } else { + $track = $_POST['greylisting_track']; + } + + array_push($updates,"Track = ".$db->quote($track)); + } + + if (!empty($_POST['greylisting_authvalidity_m'])) { + if ($_POST['greylisting_authvalidity_m'] == "1") { + $validity = "NULL"; + } elseif ($_POST['greylisting_authvalidity_m'] == "2") { + $validity = $db->quote($_POST['greylisting_authvalidity']); + } + array_push($updates,"GreylistAuthValidity = $validity"); + } + if (!empty($_POST['greylisting_unauthvalidity_m'])) { + if ($_POST['greylisting_unauthvalidity_m'] == "1") { + $validity = "NULL"; + } elseif ($_POST['greylisting_unauthvalidity_m'] == "2") { + $validity = $db->quote($_POST['greylisting_unauthvalidity']); + } + array_push($updates,"GreylistUnAuthValidity = $validity"); + } + + # Autowhitelist + if (!empty($_POST['greylisting_useawl'])) { + if ($_POST['greylisting_useawl'] == "1") { + $useawl = "NULL"; + } elseif ($_POST['greylisting_useawl'] == "2") { + $useawl = $db->quote(1); + } elseif ($_POST['greylisting_useawl'] == "3") { + $useawl = $db->quote(0); + } + array_push($updates,"UseAutoWhitelist = $useawl"); + } + + if (!empty($_POST['greylisting_awlperiod_m'])) { + if ($_POST['greylisting_awlperiod_m'] == "1") { + $awlperiod = "NULL"; + } elseif ($_POST['greylisting_awlperiod_m'] == "2") { + $awlperiod = $db->quote($_POST['greylisting_awlperiod']); + } + array_push($updates,"AutoWhitelistPeriod = $awlperiod"); + } + + # AWL Count + if (!empty($_POST['greylisting_awlcount_m'])) { + if ($_POST['greylisting_awlcount_m'] == "0") { + $awlcount = $db->quote(0); + } elseif ($_POST['greylisting_awlcount_m'] == "1") { + $awlcount = "NULL"; + } elseif ($_POST['greylisting_awlcount_m'] == "2") { + $awlcount = $db->quote($_POST['greylisting_awlcount']); + } + array_push($updates,"AutoWhitelistCount = $awlcount"); + } + + # AWL Percentage + if (!empty($_POST['greylisting_awlpercentage_m'])) { + if ($_POST['greylisting_awlpercentage_m'] == "0") { + $awlpercentage = $db->quote(0); + } elseif ($_POST['greylisting_awlpercentage_m'] == "1") { + $awlpercentage = "NULL"; + } elseif ($_POST['greylisting_awlpercentage_m'] == "2") { + $awlpercentage = $db->quote($_POST['greylisting_awlpercentage']); + } + array_push($updates,"AutoWhitelistPercentage = $awlpercentage"); + } + + # Autoblacklist + if (!empty($_POST['greylisting_useabl'])) { + if ($_POST['greylisting_useabl'] == "1") { + $useabl = "NULL"; + } elseif ($_POST['greylisting_useabl'] == "2") { + $useabl = $db->quote(1); + } elseif ($_POST['greylisting_useabl'] == "3") { + $useabl = $db->quote(0); + } + array_push($updates,"UseAutoBlacklist = $useabl"); + } + + if (!empty($_POST['greylisting_ablperiod_m'])) { + if ($_POST['greylisting_ablperiod_m'] == "1") { + $ablperiod = "NULL"; + } elseif ($_POST['greylisting_ablperiod_m'] == "2") { + $ablperiod = $db->quote($_POST['greylisting_ablperiod']); + } + array_push($updates,"AutoBlacklistPeriod = $ablperiod"); + } + + # ABL Count + if (!empty($_POST['greylisting_ablcount_m'])) { + if ($_POST['greylisting_ablcount_m'] == "0") { + $ablcount = $db->quote(0); + } elseif ($_POST['greylisting_ablcount_m'] == "1") { + $ablcount = "NULL"; + } elseif ($_POST['greylisting_ablcount_m'] == "2") { + $ablcount = $db->quote($_POST['greylisting_ablcount']); + } + array_push($updates,"AutoBlacklistCount = $ablcount"); + } + + # ABL Percentage + if (!empty($_POST['greylisting_ablpercentage_m'])) { + if ($_POST['greylisting_ablpercentage_m'] == "0") { + $ablpercentage = $db->quote(0); + } elseif ($_POST['greylisting_ablpercentage_m'] == "1") { + $ablpercentage = "NULL"; + } elseif ($_POST['greylisting_ablpercentage_m'] == "2") { + $ablpercentage = $db->quote($_POST['greylisting_ablpercentage']); + } + array_push($updates,"AutoBlacklistPercentage = $ablpercentage"); + } + + if (!empty($_POST['greylisting_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['greylisting_comment'])); + } + if (isset($_POST['greylisting_disabled']) && $_POST['greylisting_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['greylisting_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}greylisting SET $updateStr WHERE ID = ".$db->quote($_POST['greylisting_id'])); + if ($res) { +?> +
Greylisting updated
+ +
Error updating Greylisting!
+
errorInfo()) ?>
+ +
No changes made to Greylisting
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/greylisting-delete.php b/ehcp/fixes/policyd/webui/greylisting-delete.php new file mode 100644 index 0000000..47cc64c --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-delete.php @@ -0,0 +1,115 @@ + array( + "Back to greylisting" => "greylisting-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a greylisting was selected + if (isset($_POST['greylisting_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No Greylisting selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}greylisting WHERE ID = ".$db->quote($_POST['greylisting_id'])); + if ($res) { +?> +
Greylisting deleted
+ +
Error deleting Greylisting!
+
errorInfo()) ?>
+ +
Greylisting not deleted, aborted by user
+ +
Invocation error, no Greylisting ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/greylisting-main.php b/ehcp/fixes/policyd/webui/greylisting-main.php new file mode 100644 index 0000000..78bcc19 --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-main.php @@ -0,0 +1,130 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + # Check if we got a result + if ($res) { + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); + # Or not + } else { +?> + + + + +
PolicyNameDisabled
policyname ?>name ?>disabled ? 'yes' : 'no' ?>
errorInfo()) ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/greylisting-whitelist-add.php b/ehcp/fixes/policyd/webui/greylisting-whitelist-add.php new file mode 100644 index 0000000..755f295 --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-whitelist-add.php @@ -0,0 +1,118 @@ + array( + "Back to whitelist" => "greylisting-whitelist-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + +
+ Source + + + + +
Comment
+ +
+
+ + + + + +
Source cannot be empty
+prepare("INSERT INTO ${DB_TABLE_PREFIX}greylisting_whitelist (Source,Comment,Disabled) VALUES (?,?,1)"); + + $res = $stmt->execute(array( + $_POST['whitelist_type'] . ":" . $_POST['whitelist_source'], + $_POST['whitelist_comment'] + )); + + if ($res) { +?> +
Greylisting whitelist created
+ +
Failed to create Greylisting whitelisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/greylisting-whitelist-change.php b/ehcp/fixes/policyd/webui/greylisting-whitelist-change.php new file mode 100644 index 0000000..80cfd15 --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-whitelist-change.php @@ -0,0 +1,175 @@ + array( + "Back to whitelist" => "greylisting-whitelist-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a whitelist was selected + if (isset($_POST['whitelist_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ID, Source, Comment, + Disabled + + FROM + ${DB_TABLE_PREFIX}greylisting_whitelist + + WHERE + ID = ? + "); +?> + + +
+
+ + +
+execute(array($_POST['whitelist_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
+ Source + + source ?> + + +
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No whitelisting selected
+ + +quote($_POST['whitelist_type'].":".$_POST['whitelist_source'])); + } + if (!empty($_POST['whitelist_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['whitelist_comment'])); + } + if (isset($_POST['whitelist_disabled']) && $_POST['whitelist_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['whitelist_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}greylisting_whitelist SET $updateStr WHERE ID = ".$db->quote($_POST['whitelist_id'])); + if ($res) { +?> +
Greylisting whitelisting updated
+ +
Error updating Greylisting whitelisting!
+ +
No changes made to Greylisting whitelisting
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/greylisting-whitelist-delete.php b/ehcp/fixes/policyd/webui/greylisting-whitelist-delete.php new file mode 100644 index 0000000..8a77640 --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-whitelist-delete.php @@ -0,0 +1,115 @@ + array( + "Back to whitelist" => "greylisting-whitelist-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a whitelisting was selected + if (isset($_POST['whitelist_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No Greylisting whitelisting selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}greylisting_whitelist WHERE ID = ".$db->quote($_POST['whitelist_id'])); + if ($res) { +?> +
Greylisting whitelist deleted
+ +
Error deleting Greylisting whitelist!
+
errorInfo()) ?>
+ +
Greylisting whitelist not deleted, aborted by user
+ +
Invocation error, no whitelist ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/greylisting-whitelist-main.php b/ehcp/fixes/policyd/webui/greylisting-whitelist-main.php new file mode 100644 index 0000000..89e5c4a --- /dev/null +++ b/ehcp/fixes/policyd/webui/greylisting-whitelist-main.php @@ -0,0 +1,111 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + +query($sql); + while ($row = $res->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
SourceDisabled
source ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/images/bg.jpg b/ehcp/fixes/policyd/webui/images/bg.jpg new file mode 100644 index 0000000..59fecf0 Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/bg.jpg differ diff --git a/ehcp/fixes/policyd/webui/images/bullet.jpg b/ehcp/fixes/policyd/webui/images/bullet.jpg new file mode 100644 index 0000000..785700c Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/bullet.jpg differ diff --git a/ehcp/fixes/policyd/webui/images/help.gif b/ehcp/fixes/policyd/webui/images/help.gif new file mode 100644 index 0000000..1404a7a Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/help.gif differ diff --git a/ehcp/fixes/policyd/webui/images/menuleft.gif b/ehcp/fixes/policyd/webui/images/menuleft.gif new file mode 100644 index 0000000..f986ecf Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/menuleft.gif differ diff --git a/ehcp/fixes/policyd/webui/images/menuright.gif b/ehcp/fixes/policyd/webui/images/menuright.gif new file mode 100644 index 0000000..afdd8bd Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/menuright.gif differ diff --git a/ehcp/fixes/policyd/webui/images/specs_bottom.jpg b/ehcp/fixes/policyd/webui/images/specs_bottom.jpg new file mode 100644 index 0000000..b01e2fb Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/specs_bottom.jpg differ diff --git a/ehcp/fixes/policyd/webui/images/strips_onside.jpg b/ehcp/fixes/policyd/webui/images/strips_onside.jpg new file mode 100644 index 0000000..6fc0a3c Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/strips_onside.jpg differ diff --git a/ehcp/fixes/policyd/webui/images/top2.jpg b/ehcp/fixes/policyd/webui/images/top2.jpg new file mode 100644 index 0000000..3f2f354 Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/top2.jpg differ diff --git a/ehcp/fixes/policyd/webui/images/valid-css2.png b/ehcp/fixes/policyd/webui/images/valid-css2.png new file mode 100644 index 0000000..c04dbab Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/valid-css2.png differ diff --git a/ehcp/fixes/policyd/webui/images/valid-xhtml10.png b/ehcp/fixes/policyd/webui/images/valid-xhtml10.png new file mode 100644 index 0000000..b81de91 Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/valid-xhtml10.png differ diff --git a/ehcp/fixes/policyd/webui/images/wcag1AAA.png b/ehcp/fixes/policyd/webui/images/wcag1AAA.png new file mode 100644 index 0000000..964e105 Binary files /dev/null and b/ehcp/fixes/policyd/webui/images/wcag1AAA.png differ diff --git a/ehcp/fixes/policyd/webui/includes/config.php b/ehcp/fixes/policyd/webui/includes/config.php new file mode 100644 index 0000000..479e2f4 --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/config.php @@ -0,0 +1,24 @@ + diff --git a/ehcp/fixes/policyd/webui/includes/db.php b/ehcp/fixes/policyd/webui/includes/db.php new file mode 100644 index 0000000..f08722f --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/db.php @@ -0,0 +1,68 @@ + false + )); + + $dbh->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); + + } catch (PDOException $e) { + die("Error connecting to Policyd v2 DB: " . $e->getMessage()); + } + + return $dbh; +} + + +# Connect to postfix DB +function connect_postfix_db() +{ + global $DB_POSTFIX_DSN; + global $DB_POSTFIX_USER; + global $DB_POSTFIX_PASS; + + try { + $dbh = new PDO($DB_POSTFIX_DSN, $DB_POSTFIX_USER, $DB_POSTFIX_PASS, array( + PDO::ATTR_PERSISTENT => false + )); + + $dbh->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); + + } catch (PDOException $e) { + die("Error connecting to Postfix DB: " . $e->getMessage()); + } + + return $dbh; +} + + +# vim: ts=4 +?> diff --git a/ehcp/fixes/policyd/webui/includes/footer.php b/ehcp/fixes/policyd/webui/includes/footer.php new file mode 100644 index 0000000..d71c434 --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/footer.php @@ -0,0 +1,51 @@ + + + + + + + + + + + + Policyd - Copyright © 2008, LinuxRulz - http://www.policyd.org/v2/ + + + +
+ XHTML 1.0 Valid Logo + CSS 2.0 Valid Logo + Level Tripple-A Conformance +
+ + + + + + diff --git a/ehcp/fixes/policyd/webui/includes/header.php b/ehcp/fixes/policyd/webui/includes/header.php new file mode 100644 index 0000000..c5c415f --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/header.php @@ -0,0 +1,165 @@ +Unauthorized.  Please login to the EHCP panel and try again.

"); +} +include_once("includes/config.php"); + + + +# Print out HTML header +function printHeader($params = NULL) +{ + global $DB_POSTFIX_DSN; + + + # Pull in params + if (!is_null($params)) { + if (isset($params['Tabs'])) { + $tabs = $params['Tabs']; + } + if (isset($params['js.onLoad'])) { + $jsOnLoad = $params['js.onLoad']; + } + if (isset($params['Title'])) { + $title = $params['Title']; + } + } +?> + + + + + Policyd Web Administration + + + + + + + + > + + + + + + + + + "; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + */ + } + + // ----- Trace footer +?> + + + + + +
+ + + + + \n\n"; + break; + /* END Password generator by cs4fun.lv */ + case 'comment': + $res.="$varsayilan\n"; + break; + case 'hidden&text': + $res.="$varsayilan\n"; + break; + case 'password': + case 'text': + case 'hidden': + $res.="\n"; + break; + case 'textarea': + $res.="
\n"; + break; + case 'checkbox': + if($alan['checked']) $checked="checked=".$alan['checked']; + else $checked=''; + if($alan['disabled'] == 'disabled' || (!empty($alan['requires_admin']) && ($alan['requires_admin'] == true) && !$isAdmin)) $disabledInput="disabled"; + else $disabledInput = ''; + if($deger=='') $deger=$alanadi; + $res.="".$alan['secenekyazisi']."\n"; + break; + + case 'radio': + foreach($alan['secenekler'] as $deger2=>$yazi2) + $res.="$yazi2
"; + $res.=""; +/* + echo print_r2($alan); + echo "
(varsayilan:$varsayilan)
"; +*/ + break; + + case 'select': + $res.="\n"; + break; + + case 'fileupload': + $res.="\n\n"; + break; + + case 'submit': + $res.="\n\n"; + break; + + + default: + $res.="\n"; + } + + if($span=='' and $alantipi<>'password_with_generate') $res.=""; + + #$res.="\n"; + $res.="\n"; + return $res; +} + +if(!function_exists("tablobaslikyaz")){ +function tablobaslikyaz($alan,$baslik,$extra) {// tablolistelede kullanilmak icin yazildi. +$tr=""; +$td=""; + }; + } + else + { + for ($i=0;$i<$alansayisi;$i++) + { + $yaz=$alan[$i]; $result2.="$th$yaz"; + }; + } + for ($i=0;$i"; + + $result2.="\n "; + return $result2; +} +} +function timediffhrs($timein, $timeout){ + $timeinsec = strtotime ($timein); + $timeoutsec = strtotime ($timeout); + $timetot = $timeoutsec - $timeinsec; + $timehrs = intval($timetot/3600); + $timehrsi =(($timetot/3600)-$timehrs)*60; + $timemins = intval(($timetot/60) -$timehrs*60); + return $timehrs; +} + + +function getFirstPart($str,$splitter){ + $position = strpos($str,$splitter); + if($position===false) return $str; + else return substr($str, 0,$position); +} + + +function getLastPart($str,$splitter){ + $position = strrpos($str,$splitter); + return substr($str, $position + 1); +} + +function get_filename_from_url($url){ + $lastslashposition = strrpos($url,"/"); + $filename=substr($url, $lastslashposition + 1); + return $filename; +} + +function removeDoubleSlash($str){ + # why this function?: some directory names contain trailing slash like /example/this/, and some portions of existing codes uses that. Until fixed, new codes are written using this, to let both style work.. + # this function may be removed after all trailing slashes removed.. + return str_replace("//","/",$str); +} + +function get_filename_extension($filename) { + + $lastdotposition = strrpos($filename,"."); + + if ($lastdotposition === 0) { $extension = substr($filename, 1); } + elseif ($lastdotposition == "") { $extension = $filename; } + else { $extension = substr($filename, $lastdotposition + 1); } + + return strtolower($extension); + +} + +if(!function_exists('securefilename')){ +function securefilename($fn){ + $ret=str_replace(array("\\",'..','%','&'),array('','',''),$fn); + #$ret=escapeshellarg($ret); + return $ret; +} +} + +function passthru2($cmd,$no_remove=false,$no_escape=false){ + $cmd1=$cmd; + if(!$no_remove) $cmd=removeDoubleSlash($cmd); + if(!$no_escape) $cmd=escapeshellcmd($cmd); + echo "\nexecuting command: $cmd1 \n(escapedcmd: $cmd)\n"; + passthru($cmd); + return true; +} + +function passthru2_silent($cmd,$no_remove=false,$no_escape=false){ + $cmd1=$cmd; + if(!$no_remove) $cmd=removeDoubleSlash($cmd); + if(!$no_escape) $cmd=escapeshellcmd($cmd); + passthru($cmd); + return true; +} + +function passthru3($cmd,$source=''){ + $cmd=removeDoubleSlash($cmd); + # Echoes command and execute, does not escapeshellcmd + echo "\n$source:Executing command: ($cmd) \n"; + passthru($cmd); +} + +function date_tarih(){ + return date('Y-m-d h:i:s'); +} + +function my_shell_exec($cmd,$source=''){ + echo "\n$source: ".date_tarih()." Executing command: ($cmd)"; + echo shell_exec($cmd); +} + +function trimstrip($str){ + return trim(stripslashes($str)); +} + +function isNumericField($f){ + return (substr_count($f,'int')>0 or substr_count($f,'float')>0) ; +} + +function stripslashes_deep($value) +{ + $value = is_array($value) ? + array_map('stripslashes_deep', $value) : + stripslashes($value); + + return $value; +} + + +//function to validate ip address format in php by Roshan Bhattarai(http://roshanbh.com.np) +function validateIpAddress($ip_addr) +{ + //first of all the format of the ip address is matched + if(preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$ip_addr)) + { + //now all the intger values are separated + $parts=explode(".",$ip_addr); + //now we need to check each part can range from 0-255 + foreach($parts as $ip_parts) + { + if(intval($ip_parts)>255 || intval($ip_parts)<0) + return false; //if number is not within range of 0-255 + } + return true; + } + else + return false; //if format of ip address doesn't matches + +} + +if(!function_exists('buildoption2')) { +function buildoption2($adi,$arr,$selected) { + $res=""; + return $res; +} +} + + +if(!function_exists("debug_print_backtrace2")){ +function debug_print_backtrace2(){ + echo "
";
+	debug_print_backtrace();
+	echo "
"; +} +} + +if(!function_exists("debug_backtrace2")){ +function debug_backtrace2(){ + $ar=debug_backtrace(); + $out="
"; + array_shift($ar); # enson cagrilan zaten bu. ona gerek yok. + $ar=array_reverse($ar); + foreach($ar as $a) { + $f=$a['file']; + $f=explode("/",$f); + $f=array_pop($f); + #$nf=array(); + #$nf[]=array_pop($f); + #$nf[]=array_pop($f); + #$nf[]=array_pop($f); # son uc elemani al. cok uzun dosya adi/yolu olmasin diye + #$nf=array_reverse($nf); + #$f=implode("/",$nf); + $out.="(".$f.':'.$a['line'].':'.$a['function'].")->"; + #$out.="(".$f.'->'.$a['function'].")->"; + + } + return $out."
"; +} +} + +function textarea_to_array($area,$start=array(),$end=array()){ + $templ=array(); + $templates=explode("\n",$area); + #echo print_r2($templates); + $templates=array_merge($start,$templates,$end); + + foreach($templates as $t) { + $t=trim($t); + $templ[$t]=$t; + #echo "$t -> $t ekleniyor
"; + } + #echo print_r2($templ); + # bu çalışmadı, bug var veya anlamadım: $templ=array_merge($start,$templ,$end); + #array_push($templ,$end); # bunlar da çalışmadı. + #array_unshift($templ,$start); + #echo print_r2($templ); + return $templ; +/* +çok ilginç, yukardaki array_merge fonksiyonları, array'ın indexlerini değiştiriyor: +çıktısı: +* Array gosteriliyor: +Array +( + [4096] => 4096 + [2048] => 2048 + [256] => 256 + [512] => 512 + [1024] => 1024 + [1536] => 1536 +) +Array gosteriliyor: +Array +( + [0] => Array + ( + [0] => seç + ) + + [1] => 4096 + [2] => 2048 + [3] => 256 + [4] => 512 + [5] => 1024 + [6] => 1536 + [7] => Array + ( + ) + +) +* + * + */ + +} + +/* Ubuntu Specific Functions */ +function getUbuntuVersion(){ + exec("lsb_release -r | awk '{ print $2 }'", $version); + if(!empty($version) && is_array($version)){ + return $version[0]; + } + return false; +} + +function getUbuntuReleaseYear(){ + $version = getUbuntuVersion(); + return substr($version, 0, stripos($version, ".")); +} + +function getUbuntuReleaseMonth(){ + $version = getUbuntuVersion(); + return substr($version, stripos($version, ".") + 1); +} + +function getIsUbuntu(){ + exec("cat /etc/issue | awk '{ print $1 }'", $distro); + if(is_array($distro) && !empty($distro)){ + if(strtolower($distro[0]) == "ubuntu"){ + return true; + } + } + return false; +} + +function getIsDebian(){ + exec("cat /etc/issue | awk '{ print $1 }'", $distro); + if(is_array($distro) && !empty($distro)){ + if(strtolower($distro[0]) == "debian"){ + return true; + } + } + return false; +} +/* End Ubuntu Specific Functions */ + +/* Start OS Specific Functions */ +function sysIsUsingSystemD(){ + exec("ps -p 1 | awk '{print $4}' | tail -n 1", $sysd); + if(!empty($sysd) && is_array($sysd)){ + if(!empty($sysd[0]) && $sysd[0] == "systemd"){ + return true; + } + } + return false; +} + +function serviceExists($service){ + // Neat: http://stackoverflow.com/questions/2427913/how-can-i-grep-for-a-string-that-begins-with-a-dash-hyphen + if(isset($service) && !empty($service)){ + // Below command is too slow + // $serviceExists = shell_exec('service --status-all 2>&1 | grep -F -- "' . $service . '" | awk \'{print $4}\' | tr -d \'\n\''); + + $serviceExists = shell_exec('ls /etc/init.d 2>/dev/null | grep -F -- "' . $service . '"'); + if(isset($serviceExists) && !empty($serviceExists)){ + return true; + } + + $serviceExists = shell_exec('find /lib/systemd/system -name "*' . $service . '*" -exec basename {} .service \; 2>/dev/null'); + + if(isset($serviceExists) && !empty($serviceExists)){ + return true; + } + + $serviceExists = shell_exec('find /etc/systemd/system -name "*' . $service . '*" -exec basename {} .service \; 2>/dev/null'); + + if(isset($serviceExists) && !empty($serviceExists)){ + return true; + } + } + return false; +} + +function determinePHPFPMName(){ + // Below command takes too long + // $serviceExists = shell_exec('service --status-all 2>&1 | grep -F -- "-fpm" | awk \'{print $4}\' | grep "php" | tr -d \'\n\''); + + $serviceExists = shell_exec('ls /etc/init.d 2>/dev/null | grep -F -- "-fpm"'); + + if(isset($serviceExists) && !empty($serviceExists) && stripos($serviceExists, 'php') !== false){ + return $serviceExists; + } + + $serviceExists = shell_exec('find /lib/systemd/system -name "*-fpm*" -exec basename {} .service \; 2>/dev/null'); + + if(isset($serviceExists) && !empty($serviceExists) && stripos($serviceExists, 'php') !== false){ + return $serviceExists; + } + + $serviceExists = shell_exec('find /etc/systemd/system -name "*-fpm*" -exec basename {} .service \; 2>/dev/null'); + + if(isset($serviceExists) && !empty($serviceExists) && stripos($serviceExists, 'php') !== false){ + return $serviceExists; + } + + return false; +} + +function determineFTPUserFromCMD(){ + exec("cat /etc/passwd | grep vsftpd", $vsftpd_user_exists); + if(!empty($vsftpd_user_exists) && is_array($vsftpd_user_exists)){ + if(!empty($vsftpd_user_exists[0])){ + return "vsftpd"; + } + } + return "ftp"; +} + +function determineBindUserFromCMD(){ + $bindUser = "bind"; + // Try bind - which is standard for Ubuntu + exec('cat /etc/passwd | grep -o "^bind.*"', $bind_user_exists); + if(!empty($bind_user_exists) && is_array($bind_user_exists)){ + if(!empty($bind_user_exists[0])){ + return "bind"; + } + } + + // Unset bind user array + unset($bind_user_exists); + + // Try named which may be used for other distros + exec('cat /etc/passwd | grep -o "^named.*"', $bind_user_exists); + if(!empty($bind_user_exists) && is_array($bind_user_exists)){ + if(!empty($bind_user_exists[0])){ + return "named"; + } + } + + // Return bind9 user. + return $bindUser; +} + +/* End OS Specific Functions */ + +function startsWith($haystack, $needle) +{ + $length = strlen($needle); + return (substr($haystack, 0, $length) === $needle); +} + +function endsWith($haystack, $needle) +{ + $length = strlen($needle); + if ($length == 0) { + return true; + } + + return (substr($haystack, -$length) === $needle); +} + +function removeInvalidCharsFromDomainName($string, $regexPattern){ + $string = strtolower($string); + + if(stripos($string, "http://") !== false){ + $string = str_replace("http://", "", $string); + } + + if(stripos($string, "https://") !== false){ + $string = str_replace("https://", "", $string); + } + + if(stripos($string, "www.") !== false){ + $string = str_replace("www.", "", $string); + } + + // Need to replace invalid characters now!!!! + if(isset($regexPattern) && !empty($regexPattern)){ + $string = preg_replace($regexPattern, "", $string); + } + + // Break the domain name into parts (name and TLD) + $positionOfFirstDot = stripos($string, "."); + if($positionOfFirstDot !== false){ + $domainNameWithoutTLD = substr($string, 0, $positionOfFirstDot); + $domainTLD = substr($string, $positionOfFirstDot); + } + + // Remove hyphens from front + while(isset($domainNameWithoutTLD) && startsWith($domainNameWithoutTLD, "-")){ + $domainNameWithoutTLD = substr($domainNameWithoutTLD, 1); + } + + // Remove hyphens from front of tld + while(isset($domainTLD) && startsWith($domainTLD, "-")){ + $domainTLD = substr($domainTLD, 1); + } + + // Remove hyphens from back + while(isset($domainNameWithoutTLD) && endsWith($domainNameWithoutTLD, "-")){ + $domainNameWithoutTLD = substr($domainNameWithoutTLD, 0, strlen($domainNameWithoutTLD) - 1); + } + + // Remove hyphens from back of tld + while(isset($domainTLD) && endsWith($domainTLD, "-")){ + $domainTLD = substr($domainTLD, 0, strlen($domainTLD) - 1); + } + + if(isset($domainNameWithoutTLD) && isset($domainTLD)){ + $string = $domainNameWithoutTLD . $domainTLD; + } + + return $string; +} + +function removeAllTrailingSlashes($str){ + while(isset($str) && endsWith($str, "/")){ + $str = substr($str, 0, strlen($str) - 1); + } + return $str; +} + +function removeInvalidChars($string, $mode){ + switch($mode){ + case "directory": + $pattern = "/[^A-Za-z0-9\/_\-]/i"; + $string = preg_replace($pattern, "", $string); + break; + case "title": + $pattern = "/[^A-Za-z0-9_\-\s']/i"; + break; + case "strictTitle": + $pattern = "/[^A-Za-z0-9_\-\s]/i"; + break; + case "name": + $pattern = "/[^A-Za-z0-9_\-]/i"; + break; + case "properName": + $pattern = "/[^A-Za-z0-9_\-\s]/i"; + break; + case "email": + $pattern = "/[^A-Za-z0-9_\-@\.]/i"; + break; + case "domainname": + // Lowercase for domain names only!!! + $pattern = "/[^a-z0-9\-\.]/i"; + $string = removeInvalidCharsFromDomainName($string, $pattern); + break; + case "domainnamewithseparatorchar": + // Lowercase for domain names only!!! + $pattern = "/[^a-z0-9\-\.,=;]/i"; + $string = removeInvalidCharsFromDomainName($string, $pattern); + break; + case "domainnameport": + // Lowercase for domain names only!!! + // Allow port in the domain name for custom ports (example: ehcpforce.tk:8777) + $pattern = "/[^a-z0-9:\-\.]/i"; + $string = removeInvalidCharsFromDomainName($string, $pattern); + + // Make sure we only have one : port colon + $positionOfFirstColon = stripos($string, ":"); + if($positionOfFirstColon !== false){ + // count the colon characters + $colonSplit = explode(":", $string); + if(is_array($colonSplit)){ + array_filter($colonSplit); // Remove empty records + if(count($colonSplit) != 2){ + // Remove all colons since there is more than one + $string = str_replace(":", "", $string); + } + } + } + + break; + case "subdomainname": + // Lowercase for subdomains too + $pattern = "/[^a-z0-9\-]/i"; + $string = strtolower($string); + + if(stripos($string, "http://") !== false){ + $string = str_replace("http://", "", $string); + } + if(stripos($string, "https://") !== false){ + $string = str_replace("https://", "", $string); + } + if(stripos($string, "www.") !== false){ + $string = str_replace("www.", "", $string); + } + + // Need to replace invalid characters now!!!! + if(isset($pattern) && !empty($pattern)){ + $string = preg_replace($pattern, "", $string); + } + + // Remove hyphens from front + while(startsWith($string, "-")){ + $string = substr($string, 1); + } + + // Remove hyphens from back + while(endsWith($string, "-")){ + $string = substr($string, 0, strlen($string) - 1); + } + + break; + default: + return $string; + } + if(isset($pattern) && !empty($pattern)){ + return preg_replace($pattern, "", $string); + } + + return $string; +} + +function setOwner($file, $owner){ + if(file_exists($file)){ + if(chown($file, $owner)){ + return true; + } + } + return false; +} + +function setPermissions($file, $mode){ + if(file_exists($file)){ + if(chmod($file, $mode)){ + return true; + } + } + + return false; +} + +function domainNameValid($string, $skipRegex = false){ + $valid = true; + + if(empty($string)){ + $valid = false; + } + + if(stripos($string, "http://") !== false){ + $valid = false; + } + + if(stripos($string, "https://") !== false){ + $valid = false; + } + + if(stripos($string, "www.") !== false){ + $valid = false; + } + + // If it's still valid, run regex to see if it's a valid domain + if($valid && !$skipRegex){ + $valid = preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $string) //valid chars check + && preg_match("/^.{1,253}$/", $string) //overall length check + && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $string); + } + + // If it's still valid, make sure there is a domain ending and TLD + if($valid){ + $positionOfLastDot = strrpos($string, "."); + // Must have period in the domainname + if($positionOfLastDot === false){ + $valid = false; + }else{ + // If we have a period, make sure the length following it is greater than 2 + $remainingChars = substr($string, $positionOfLastDot); + if(strlen($remainingChars) < 3){ + $valid = false; + } + } + } + + return $valid; +} + +function inputValid($string, $mode){ + $valid = true; + switch($mode){ + case "domainname": + $valid = domainNameValid($string); + break; + case "domainnameport": + // Do normal domain name validation + $valid = domainNameValid($string, true); + + // Check colon count + $colonParts = explode(":", $string); + if(count($colonParts) > 2){ + $valid = false; + } + break; + case "certificate_key": + if(strpos($string, "PRIVATE KEY") === FALSE){ + $valid = false; + } + break; + case "certificate": + if(strpos($string, "-----BEGIN CERTIFICATE-----") === FALSE){ + $valid = false; + } + if(strpos($string, "-----END CERTIFICATE-----") === FALSE){ + $valid = false; + } + break; + case "directory_at_least_two_levels": + if(substr_count($string, '/') < 2){ + $valid = false; + } + $protectedPaths = array("/var/www/vhosts", "/var/www/new", "/var/www/php_sessions", "/var/www/webalizer", "/var/www/passivedomains"); + if(in_array($string, $protectedPaths)){ + $valid = false; + } + break; + case "email_address": + $valid = filter_var($string, FILTER_VALIDATE_EMAIL); + break; + case "url": + $valid = filter_var($string, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED); + break; + } + return $valid; +} + +function testCertificateAndPrivateKeyHashMatch($cert, $key){ + $testCertPath = "/var/www/new/ehcp/test/test.crt"; + $testCertKeyPath = "/var/www/new/ehcp/test/test.key"; + writeoutput2($testCertPath, $cert, "w+", false); + writeoutput2($testCertKeyPath, $key, "w+", false); + + // Unset our arrays if they were set at some point + if(isset($errorsWithCert)){ + unset($errorsWithCert); + } + if(isset($errorsWithCertKey)){ + unset($errorsWithCertKey); + } + if(isset($openSSLCertHash)){ + unset($openSSLCertHash); + } + if(isset($openSSLCertKeyHash)){ + unset($openSSLCertKeyHash); + } + + // Check to make sure we have a valid cert and cert key file + exec("openssl x509 -noout -modulus -in " . $testCertPath . " 2>&1 | grep -o -e error -e unable", $errorsWithCert); + exec("openssl rsa -noout -modulus -in " . $testCertKeyPath . " 2>&1 | grep -o -e error -e unable", $errorsWithCertKey); + if(is_array($errorsWithCert) && count($errorsWithCert) > 0){ + return false; + } + if(is_array($errorsWithCertKey) && count($errorsWithCertKey) > 0){ + return false; + } + + // Now that we know the keys are OK, check the hashes and make sure they match... + exec("openssl x509 -noout -modulus -in " . $testCertPath . " | openssl md5", $openSSLCertHash); + exec("openssl rsa -noout -modulus -in " . $testCertKeyPath . " | openssl md5", $openSSLCertKeyHash); + if(is_array($openSSLCertHash) && is_array($openSSLCertKeyHash)){ + if(trim($openSSLCertHash[0]) == trim($openSSLCertKeyHash[0])){ + return true; + } + } + return false; +} + +function makeSureSSLTestFileMatches($cert, $key){ + $testCertPath = "/var/www/new/ehcp/test/test.crt"; + $testCertKeyPath = "/var/www/new/ehcp/test/test.key"; + + // Make sure the files contain what has been sent in... + $inTestCrt = trim(file_get_contents($testCertPath)); + $inTestKey = trim(file_get_contents($testCertKeyPath)); + + if($cert != $inTestCrt || $key != $inTestKey){ + return false; + } + return true; +} + +function testCertificateChainValid($chain){ + // Unset variable if set before... + if(isset($openSSLResultsChainValid)){ + unset($openSSLResultsChainValid); + } + + // Check to see if the chain certificate entered is valid + $testCertChainPath = "/var/www/new/ehcp/test/chain.crt"; + writeoutput2($testCertChainPath, $chain, "w+", false); + + exec("openssl verify $testCertChainPath 2>&1 | grep OK", $openSSLResultsChainValid); + if(is_array($openSSLResultsChainValid) && count($openSSLResultsChainValid) > 0){ + if(stripos($openSSLResultsChainValid[0], "OK") !== false){ + return true; + } + } + return false; +} + +function makeSureSSLTestChainFileMatches($chain){ + $testCertChainPath = "/var/www/new/ehcp/test/chain.crt"; + $inTestChain = trim(file_get_contents($testCertChainPath)); + if($chain != $inTestChain){ + return false; + } + return true; +} + +function manageService($service, $action){ + passthru2("service $service $action", true, true); +} + +function getServiceActionStr($service, $action){ + return "service $service $action"; +} + +function getCustomApache2ListenPorts(){ + // Get the ports Apache2 is listening on + $originalBindPorts = shell_exec('cat "/etc/apache2/ports.conf" | grep "Listen"'); + + if(isset($originalBindPorts) && !empty($originalBindPorts)){ + // Split each Listen match into an array + if(stripos($originalBindPorts, "\n") != False){ + $originalBindPorts = explode("\n", $originalBindPorts); + }else{ + // Must be only one port, so add it to our array. + $originalBindPorts[] = $originalBindPorts; + } + + // Remove any empty values in our array + $originalBindPorts = array_filter($originalBindPorts); + + // We want to ignore these ports, as the replacement file will handle the correct base ports based on web server configuration + $ignorePorts = array("80", "443"); + + // Loop through each listen entry, get only the port, and add it to the list of custom ports if it's not in our ignore ports array. + foreach($originalBindPorts as $port){ + $port = preg_replace("/[^0-9]/","", $port); + if(!in_array($port, $ignorePorts)){ + $realPorts[] = $port; + } + } + + if(isset($realPorts) && is_array($realPorts)){ + return $realPorts; + } + } + + // Default return + return false; +} + +function addCustomPortsToApache($ports){ + if(is_array($ports)){ + foreach($ports as $port){ + writeoutput2("/etc/apache2/ports.conf", "Listen " . $port, "a+"); + } + } +} + +if(!function_exists("stripContentsAfterLine")){ + function stripContentsAfterLine($firstMatch, $content){ + $finalContent = ""; + + foreach(preg_split("/((\r?\n)|(\r\n?))/", $content) as $line){ + if(trim($line) == trim($firstMatch) || startsWith(trim($line), $firstMatch)){ + return $finalContent . $firstMatch . "\n"; + } + $finalContent .= $line . "\n"; + } + + return $finalContent; + } +} + +if(!function_exists("getContentsAfterLine")){ + function getContentsAfterLine($firstMatch, $content){ + $finalContent = ""; + $foundMatch = false; + + foreach(preg_split("/((\r?\n)|(\r\n?))/", $content) as $line){ + if(trim($line) == trim($firstMatch) || startsWith(trim($line), $firstMatch) || $foundMatch){ + if($foundMatch === true){ + $finalContent .= $line . "\n"; + } + $foundMatch = true; + } + } + + return $finalContent; + } +} + +/* LEFT OVERS FROM DBUTIL */ + +function selectstring($alanlar) { + //if(count($alanlar)==0) return false; + $res=$alanlar[0]; + $alansayisi=count($alanlar); + + for($i=1;$i<$alansayisi;$i++) { + if(trim($alanlar[$i])<>"")$res.=",".$alanlar[$i]; + } + return $res; +} + +function buildquery2($select,$filtre,$orderby){ // v1.0 + $res=$select; + if($filtre<>"") { + $res.=" where $filtre"; + }; + + if($sirala<>"") { + $res.=" order by $sirala"; + }; + return $res; +} + +?> diff --git a/ehcp/log/ehcp_failed_authentication.log b/ehcp/log/ehcp_failed_authentication.log new file mode 100755 index 0000000..e69de29 diff --git a/ehcp/login.php b/ehcp/login.php new file mode 100755 index 0000000..bdad683 --- /dev/null +++ b/ehcp/login.php @@ -0,0 +1,23 @@ +loginform(); +} elseif($username and $password) { + $app->dologin(); +} + +?> diff --git a/ehcp/main.cf.sample b/ehcp/main.cf.sample new file mode 100755 index 0000000..6a87f91 --- /dev/null +++ b/ehcp/main.cf.sample @@ -0,0 +1,70 @@ +# See /usr/share/postfix/main.cf.dist for a commented, more complete version + + +# Debian specific: Specifying a file name will cause the first +# line of that file to be used as the name. The Debian default +# is /etc/mailname. +#myorigin = /etc/mailname + +smtpd_banner = $myhostname ESMTP $mail_name powered by Easy Hosting Control Panel (ehcp) on Ubuntu, www.ehcp.net +biff = no + +# appending .domain is the MUA's job. +append_dot_mydomain = no + +# Uncomment the next line to generate "delayed mail" warnings +#delay_warning_time = 4h + +readme_directory = /usr/share/doc/postfix + +# TLS parameters +smtpd_tls_cert_file = /etc/postfix/smtpd.cert +smtpd_tls_key_file = /etc/postfix/smtpd.key +smtpd_use_tls = yes +smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache +smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache + +# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for +# information on enabling SSL in the smtp client. + +myhostname = ikinciserver +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases +myorigin = /etc/mailname +mydestination = localhost, 96.31.91.67 +relayhost = +mynetworks = 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/16, 10.0.0.0/8, 96.31.91.0/24 +mailbox_size_limit = 0 +recipient_delimiter = + +inet_interfaces = all +html_directory = /usr/share/doc/postfix/html +virtual_alias_domains = +virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf +virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf +virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf +virtual_mailbox_base = /home/vmail +virtual_uid_maps = static:5000 +virtual_gid_maps = static:5000 +smtpd_sasl_auth_enable = yes +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_client_access hash:/var/lib/pop-before-smtp/hosts,reject_unauth_destination +smtp_use_tls = yes +smtpd_tls_auth_only = no +smtpd_tls_CAfile = /etc/postfix/cacert.pem +smtpd_tls_loglevel = 1 +smtpd_tls_received_header = yes +smtpd_tls_session_cache_timeout = 3600s +tls_random_source = dev:/dev/urandom +virtual_create_maildirsize = yes +virtual_mailbox_extended = yes +virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf +virtual_mailbox_limit_override = yes +virtual_maildir_limit_message = "The user you are trying to reach is over quota." +virtual_overquota_bounce = yes +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $mynetworks $virtual_mailbox_limit_maps $transport_maps + +debug_peer_list = +debug_peer_level = 1 +transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf +sender_canonical_maps = diff --git a/ehcp/misc/autoreply.php b/ehcp/misc/autoreply.php new file mode 100755 index 0000000..3442851 --- /dev/null +++ b/ehcp/misc/autoreply.php @@ -0,0 +1,42 @@ +#!/usr/bin/env php +connecttodb(); + +$sender=$argv[1]; +$recipient=str_replace("@autoreply.","@",$argv[2]); + +$info=$app->query("select autoreplysubject,autoreplymessage from emailusers where email='$recipient'"); +$subject=$info[0]['autoreplysubject']; +$msg=$info[0]['autoreplymessage']."\n\n(ehcp Autoreply message from $recipient at ".date("Y-m-d H:i:s").")"; #.print_r($argv,true).print_r($info,true); + +# ** BURAYA ŞU ÖZELLİK YAPILACAK: bir alıcıya örneğin son 12 saatte bir autoreply gitmişse, tekrar tekrar gönderme. mantıklı bir istek. +# bunun için, gönderen,alıcıların,sontarih alanlarının olduğu bir tabloda tutmak ve ordan karşılaştırmak lazım. + +if($subject<>''){# user has autorespond enabled.. + syslog(LOG_NOTICE,"ehcp:".basename(__FILE__).": email sent to $sender, on behalf of $recipient (subject:$subject)"); + mail($sender,$subject,$msg,"From: $recipient"); +} else { + #syslog(LOG_NOTICE,"ehcp:".basename(__FILE__).": email autoreply is not enabled for $recipient, so, not sending autoreply "); +} + +?> diff --git a/ehcp/misc/mysqltroubleshooter.php b/ehcp/misc/mysqltroubleshooter.php new file mode 100755 index 0000000..9c7b99d --- /dev/null +++ b/ehcp/misc/mysqltroubleshooter.php @@ -0,0 +1,59 @@ + + +This implemented only help you a bit more....
+Mysql Troubleshooter Version 0.29, last modified at 18.12.2008 by bvidinli


+ + +if you get mysql error:
+ +
    if You get error: Can't connect to local MySQL server through socket
    +Try this:
    +Go to your console and run
    +sudo service mysql start
    + +
    + +
+
    +
  • +if you just installed ehcp: +
      +
    • Check your config.php for right password of mysql ehcp user, like: [$dbpass='12345';] in your ehcp dir, /var/www/vhosts/ehcp
    • +
    • Check your config.php for right password of mysql root user, like: [$dbrootpass='12345';] in your ehcp dir, /var/www/vhosts/ehcp
    • +
    • if you dont know your mysql root pass, try to learn it first.. ask me/on forum howto learn if you dont know.. or look here: mysql password recovery
    • +
    • After you learned your mysql root pass, try to re-install ehcp, because your first installation may failed because of wrong mysql root pass.
    • +
    +
  • + +
    +
  • +if you got this error after you used ehcp for some time.. (it was okey before) +
      +
    • Check your config.php for right password of mysql ehcp user, like: [$dbpass='12345';] in your ehcp dir, /var/www/vhosts/ehcp
    • +
    • Check your config.php for right password of mysql root user, like: [$dbrootpass='12345';] in your ehcp dir, /var/www/vhosts/ehcp
    • +
    • Did you recently changed your mysql pass for ehcp user, or did your re-installed mysql ? test your mysql ehcp user pass in phpmyadmin
    • +
    • Do either: + +
        +
      • reset your mysql ehcp user pass to what you defined in config.php
      • +
      • write right password to your config.php
      • +that is, (mysql pass -> pass in config.php) or (pass in config.php -> mysql pass ) + +
    • +
    +
  • + +
+ +
+Back to troubleshoot
+http://www.ehcp.net/?q=node/245, mysql password howto
+ehcp Forums +ehcp Helper +ehcp website Homepage + +Home + + + + diff --git a/ehcp/misc/redirect_index.html b/ehcp/misc/redirect_index.html new file mode 100755 index 0000000..4d0fb64 --- /dev/null +++ b/ehcp/misc/redirect_index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/ehcp/misc/serverstatus.sh b/ehcp/misc/serverstatus.sh new file mode 100755 index 0000000..eac7ab1 --- /dev/null +++ b/ehcp/misc/serverstatus.sh @@ -0,0 +1,32 @@ +#!/bin/bash +echo "" +echo "==========================================================================" +echo -n "Hostname: " +hostname +uname -srm +echo "" +echo -n "PHP version: " +/usr/bin/php -nv | grep built | cut -d " " -f2 +echo -n "MySQL version: " +/usr/bin/mysql -V | cut -d " " -f6 | cut -d "," -f1 +echo -n "Apache version: " +/usr/sbin/apache2 -v | grep version | cut -d "/" -f2 +echo "--------------------------------------------------------------------------" +echo -n "CPU number: " +cat /proc/cpuinfo | grep -c "processor" +cat /proc/cpuinfo | grep "model name" +cat /proc/cpuinfo | grep "cpu MHz" +cat /proc/cpuinfo | grep "cache size" +echo "--------------------------------------------------------------------------" +echo "Memory: used free (MB)" +free -m | grep buffers/ca | cut -d":" -f2 +echo "--------------------------------------------------------------------------" +df -h -t ext3 +echo "--------------------------------------------------------------------------" +uptime +echo -n " hosts.deny: " +cat /etc/hosts.deny | grep ALL: | wc -l +#echo -n " Failed auth attempts in the log: " +#cat /var/log/auth.log | grep "authentication failure" | wc -l +echo "==========================================================================" +echo "" diff --git a/ehcp/mod_secure/modevasive b/ehcp/mod_secure/modevasive new file mode 100755 index 0000000..d6794ab --- /dev/null +++ b/ehcp/mod_secure/modevasive @@ -0,0 +1,11 @@ + +DOSHashTableSize 3097 +DOSPageCount 30 +DOSSiteCount 250 +DOSPageInterval 1 +DOSSiteInterval 1 +DOSBlockingPeriod 30 +DOSLogDir /var/log/mod_evasive +DOSEmailNotify changeme@gmail.com +DOSWhitelist 127.0.0.1 + diff --git a/ehcp/mod_secure/modqos b/ehcp/mod_secure/modqos new file mode 100755 index 0000000..2949e14 --- /dev/null +++ b/ehcp/mod_secure/modqos @@ -0,0 +1,17 @@ +## QoS module Settings + +# handles connections from up to 100000 different IPs +QS_ClientEntries 100000 +# will allow only 50 connections per IP +QS_SrvMaxConnPerIP 50 +# maximum number of active TCP connections is limited to 256 +MaxClients 256 +# disables keep-alive when 70% of the TCP connections are occupied: +QS_SrvMaxConnClose 180 +# minimum request/response speed (deny slow clients blocking the server, +# ie. slowloris keeping connections open without requesting anything): +QS_SrvMinDataRate 150 1200 +# and limit request header and body (carefull, that limits uploads and post requests too): +# LimitRequestFields 30 +# QS_LimitRequestBody 102400 + diff --git a/ehcp/mod_secure/modsecure b/ehcp/mod_secure/modsecure new file mode 100755 index 0000000..ad45788 --- /dev/null +++ b/ehcp/mod_secure/modsecure @@ -0,0 +1,3 @@ + +Include mod_security_rules/*.conf + diff --git a/ehcp/mod_secure/qos.load b/ehcp/mod_secure/qos.load new file mode 100755 index 0000000..a7c0001 --- /dev/null +++ b/ehcp/mod_secure/qos.load @@ -0,0 +1 @@ +LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so diff --git a/ehcp/multicms/.htaccess b/ehcp/multicms/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/ehcp/multicms/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/ehcp/multicms/cmsindex.php b/ehcp/multicms/cmsindex.php new file mode 100644 index 0000000..f6b716f --- /dev/null +++ b/ehcp/multicms/cmsindex.php @@ -0,0 +1,48 @@ +""){ + $filtre="id like '%$ara%'"; + } + + + $output.="
Filtre1: $filtre
"; + + + $output.=tablolistele3_4_2("html",array(),array("id","grup","aciklama"),$filtre,"id",array("../../incele.jpg","../../edit.gif","../../edit.gif","../../delete2.jpg"),array("htmlgoster.php","htmlduzenle.php","htmlduzenle.php?eskieditor=1&","htmlduzenle.php?sil=1&"),"id"); +} else { + + if($ara<>""){ + $filtre=andle($filtre,"id like '%$ara%'"); + } + $output.="
Filtre1: $filtre
"; + + $output.=tablolistele3_5_3($tablo,$query,$baslik,array("grup"),$filtre,"",array("../../incele.jpg"),array(),"grup",$baslangic,30); +} + +$output.="

+Kod ekle
+Anasayfa
+
+Ara: + + + +"; + +?> diff --git a/ehcp/mystyles.css b/ehcp/mystyles.css new file mode 100755 index 0000000..37ec72c --- /dev/null +++ b/ehcp/mystyles.css @@ -0,0 +1,197 @@ +body{ + voice-family: betty, female; + font-family:tahoma; + font-size:10pt; + font-style:normal; + margin: 0px; + /*background-color:#005197;*/ +} +hr{ + border:1px solid #0C1163; +} +ul { + list-style-position: outside; + list-style-type:square; +} +td{ +font-family:tahoma; +font-style:normal; +font-size:10pt; +border:1px solid #ededed; + +} +tr{ +font-family:tahoma; +font-style:normal; +font-size:10pt; +} +th{ +height:5px; +} +.th3{ +height:1px; +} +.th4{ +height:3px; +width:154px; +background-color:#ff6600; +} +.thsiyah{ +height:3px; +background-color:#000000; +} +form{ + margin: 0px; +} + +.topnavigator{ + background-color:#FFFFCC; + text-align:left; +} + +select{ + border-color:#7DA5C2; + background-color:#f2f3f4; + color:#FF0000; + font-family:tahoma; + font-size:10pt; +} +.button{ + font-family:tahoma; + font-weight:bold; + width:60px; + background-color:#014DA2; + color:#ffffff; + height:20px; + border:1px solid #ffffff; + font-size:7pt; + } +.logininput{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:150px; + height:20px; + border:1px solid #CCCCCC; + color:#000000; + } +.mailtextarea{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:250px; + height:120px; + background-color:#ffffff; + border:1px solid #CCCCCC; + color:#000000; +} +.adrestextarea{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:250px; + height:60px; + background-color:#ffffff; + border:1px solid #CCCCCC; + color:#000000; +} +.mailinput{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:250px; + height:20px; + border:1px solid #CCCCCC; + color:#000000; + } +.mailmiddleinput{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:76px; + height:20px; + border:1px solid #CCCCCC; + color:#000000; + } +.mailsmallinput{ + font-family:tahoma; + font-size:10pt; + font-style:normal; + width:40px; + height:20px; + border:1px solid #CCCCCC; + color:#000000; + } +.genellink{ + font-size:10pt; + font-weight:bold; + color:#005197; + text-decoration:none; +} +genellink:hover{ + color:#FF6600; + text-decoration:underline; + +} +a { + font-size: 10pt; + color: #005197; + text-decoration: none; + font-weight:bold; +} +a:hover{ + color: #ff6600; + text-decoration: underline; +} +/*BACKGROUNDLAR*/ +.acikmavi{ + background-color:#C9D9F0; +} +.acikgri{ + background-color:#F1F2F2; +} +.turuncubg{ + background-color:#FF7700; +} +.turuncubg_beyaz_yazi{ + background-color:#FF7700; + color:#FFFFFF; + font-weight:bold; + font-size:10pt; + } +/*kenarliklar*/ +.kenarlik{ + border:1px solid #ededed; +} +.alt_kenarlik{ + border-bottom:1px solid #ededed; +} + + +input { + color:#050; + font-family:'trebuchet ms',helvetica,sans-serif; + font-size:10pt; + font-weight:bold; + background-color:#fed; + border:1px solid; + border-top-color:#696; + border-left-color:#696; + border-right-color:#363; + border-bottom-color:#363; + +} + +option { + color:#050; + font-family:'trebuchet ms',helvetica,sans-serif; + font-size:10pt; + font-weight:bold; + background-color:#fed; + border:1px solid; + border-top-color:#696; + border-left-color:#696; + border-right-color:#363; + border-bottom-color:#363; + +} diff --git a/ehcp/named_ehcp.conf b/ehcp/named_ehcp.conf new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/ehcp/named_ehcp.conf @@ -0,0 +1 @@ + diff --git a/ehcp/net2ftp/LICENSE.txt b/ehcp/net2ftp/LICENSE.txt new file mode 100644 index 0000000..e9191e6 --- /dev/null +++ b/ehcp/net2ftp/LICENSE.txt @@ -0,0 +1,968 @@ + +NET2FTP LICENSE + + +MAIN CODE +==================== + +The main code of net2ftp is released under the GNU GENERAL PUBLIC LICENSE. +This includes the following files: + +Directory / all files +Directory /includes all files except pcl*.lib.php and zip.lib.php +Directory /integration all files +Directory /languages all files +Directory /modules all files +Directory /skins all files except the images and HTML progress +Directory /temp all files + +NET2FTP ALSO USES OTHER MODULES (PHP code, Javascript code, Java applets and images). +EACH OF THESE MODULES IS RELEASED UNDER ITS OWN LICENSE. +Read on for more details. + + + +ZIP AND TAR CODE +==================== + +File: /includes/zip.lib.php +By: Eric Mueller, Denis125 and Peter Listiak +License: public domain + +File: /includes/pclzip.lib.php +Website: http://www.phpconcept.net +By: Vincent Blavet +License: GNU LESSER GENERAL PUBLIC LICENSE (see text below) +Note: This application was slightly modified for use with net2ftp + +Files: /includes/pcltar.lib.ph and pclerror.lib.php +Website: http://www.phpconcept.net +By: Vincent Blavet +License: GNU GENERAL PUBLIC LICENSE (see text below) +Note: This application was slightly modified for use with net2ftp + + + +DIFF CODE +==================== + +File: /modules/updatefile/diff.inc.php +Website: http://www.holomind.de/phpnet/diff.php +By: Daniel Unterberger +License: GPL +Note: Not yet in use by net2ftp + + + +FCKEDITOR +==================== + +Directory: /plugins/fckeditor +Website: http://www.fckeditor.net +By: Frederico Caldeira Knabben +License: GNU LESSER GENERAL PUBLIC LICENSE (see text below) +Note: This application was slightly modified for use with net2ftp + + + +LUMINOUS +==================== + +Directory: /plugins/luminous +Website: http://luminous.asgaard.co.uk +By: Mark Asgaard +License: GNU LESSER GENERAL PUBLIC LICENSE (see text below) + + + +ACE +==================== + +Directory: /plugins/ace +Website: http://ace.ajax.org/ +By: Ace team +License: BSD license + + + +HTML_PROGRESS +==================== + +Directory: /skins/blue/status and /skins/pastel/status +Website: http://pear.laurent-laville.org/HTML_Progress +By: Laurent Laville +License: PHP License 3.0 +Note: This application was slightly modified for use with net2ftp + + + +IMAGES +==================== + +The images within the /skins/*/images are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. +For more information, refer to the links below. + +Nuvola 1.0 +Website: http://www.kde-look.org/content/show.php?content=5358 +Website: http://www.icon-king.com/ +By: David Vignoni + +Noia for KDE 1.00 +Website: http://www.kde-look.org/content/show.php?content=3883 +Website: http://www.carlitus.net/ +By: Carles Carbonell Bernado + + + +JUPLOAD UPLOAD APPLET +==================== + +Website: http://www.jupload.biz/ and http://www.haller-systemservice.net/ +By: Mike Haller + +JUpload is *NOT* free software. The net2ftp development team has purchased a +Commercial Enterprise License, which allows the redistribution of JUpload and the +use of it on an unlimited number of servers. + +You DO NOT HAVE TO PURCHASE an additional license of JUpload, unless you want +to use it in another product than net2ftp. + + + +SHINRA SKIN +=========== + +Website: http://www.luiszuno.com +By: Luis Zuno +License: creative commons 3.0 (http://creativecommons.org/licenses/by/3.0/) + +The Shinra skin uses the following images, icons or other files: + +JAVASCRIPT + + jQuery http://jquery.com/ + jqueryui . Jquery ui Home page. + jQuery Easing Plugin http://gsgd.co.uk/sandbox/jquery/easing/ + Jquery tabs http://flowplayer.org/tools/tabs/ + PrettyPhoto http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/ + DD_belatedPNG http://www.dillerdesign.com/experiment/DD_belatedPNG/ + Superfish http://users.tpg.com.au/j_birch/plugins/superfish/ + Google fonts api http://fonts.googleapis.com/ + Scrollto http://flesler.blogspot.com + Nivo slider http://nivo.dev7studios.com + Poshytip http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/ + tabs http://flowplayer.org/tools/tabs/ + tweet http://tweet.seaofclouds.com/ + +IMAGES + + Social icons http://www.premiumpixels.com/ + Knobs icons http://itweek.deviantart.com/art/Knob-Buttons-Toolbar-icons-73463960 + Background images http://www.squidfingers.com/patterns/, http://backgrounds.mysitemyway.com, http://www.tutorial9.net/downloads/108-mono-icons-huge-set-of-minimal-icons/, http://www.webdesignerdepot.com + + + +STONEPHPCRYPT +=================== + +Website: http://blog.sc.tri-bit.com/archives/101 +By: John Haugeland +License: Modified BSD License + +// Copyright (c) 2006, John Haugeland +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in +// the documentation and/or other materials provided with the +// distribution. +// +// * Neither the name of John Haugeland nor the names of project +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY JOHN HAUGELAND "AS-IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + + + + +TINYMCE +==================== + +Directory: /plugins/tinymce +Website: http://tinymce.moxiecode.com +By: Moxiecode Systems AB +License: GNU LIBRARY GENERAL PUBLIC LICENSE + +UBUNTU FONT +==================== + +Directory: not included with net2ftp +Website: http://font.ubuntu.com +By: Ubuntu team +License: Ubuntu Font License (see http://font.ubuntu.com/licence) + + +------------------------------------------------------------------------------- + + + GNU GENERAL PUBLIC LICENSE + 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +------------------------------------------------------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/net2ftp/create_tables.sql b/ehcp/net2ftp/create_tables.sql new file mode 100644 index 0000000..334fa21 --- /dev/null +++ b/ehcp/net2ftp/create_tables.sql @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS `net2ftp_logAccess`; +DROP TABLE IF EXISTS `net2ftp_log_access`; +CREATE TABLE `net2ftp_log_access` (`id` int(10) unsigned NOT NULL auto_increment,`date` date NOT NULL default '0000-00-00',`time` time NOT NULL default '00:00:00',`remote_addr` text NOT NULL,`remote_port` text NOT NULL,`http_user_agent` text NOT NULL,`page` text NOT NULL,`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',`ftpserver` text NOT NULL,`username` text NOT NULL,`state` text NOT NULL,`state2` text NOT NULL,`screen` text NOT NULL,`directory` text NOT NULL,`entry` text NOT NULL,`http_referer` text NOT NULL,KEY `index1` (`id`)) TYPE=MyISAM; +DROP TABLE IF EXISTS `net2ftp_logError`; +DROP TABLE IF EXISTS `net2ftp_log_error`; +CREATE TABLE `net2ftp_log_error` (`date` date NOT NULL default '0000-00-00',`time` time NOT NULL default '00:00:00',`ftpserver` text NOT NULL,`username` text NOT NULL,`message` text NOT NULL,`backtrace` text NOT NULL,`state` text NOT NULL,`state2` text NOT NULL,`directory` text NOT NULL,`remote_addr` text NOT NULL,`remote_port` text NOT NULL,`http_user_agent` text NOT NULL,KEY `index1` (`date`,`time`,`ftpserver`(100),`username`(50))) TYPE=MyISAM; +DROP TABLE IF EXISTS `net2ftp_logConsumptionFtpserver`; +DROP TABLE IF EXISTS `net2ftp_log_consumption_ftpserver`; +CREATE TABLE `net2ftp_log_consumption_ftpserver`(`date` date NOT NULL default '0000-00-00',`ftpserver` varchar(255) NOT NULL default '0',`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',PRIMARY KEY (`date`,`ftpserver`)) TYPE=MyISAM; +DROP TABLE IF EXISTS `net2ftp_logConsumptionIpaddress`; +DROP TABLE IF EXISTS `net2ftp_log_consumption_ipaddress`; +CREATE TABLE `net2ftp_log_consumption_ipaddress`(`date` date NOT NULL default '0000-00-00',`ipaddress` varchar(15) NOT NULL default '0',`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',PRIMARY KEY (`date`,`ipaddress`)) TYPE=MyISAM; +DROP TABLE IF EXISTS `net2ftp_users`; +CREATE TABLE `net2ftp_users` (`ftpserver` varchar(255) NOT NULL default '0',`username` text NOT NULL,`homedirectory` text NOT NULL,KEY `index1` (`ftpserver`,`username`(50))) TYPE=MyISAM; \ No newline at end of file diff --git a/ehcp/net2ftp/favicon.ico b/ehcp/net2ftp/favicon.ico new file mode 100644 index 0000000..9f3d16d Binary files /dev/null and b/ehcp/net2ftp/favicon.ico differ diff --git a/ehcp/net2ftp/favicon.png b/ehcp/net2ftp/favicon.png new file mode 100644 index 0000000..be98728 Binary files /dev/null and b/ehcp/net2ftp/favicon.png differ diff --git a/ehcp/net2ftp/help.html b/ehcp/net2ftp/help.html new file mode 100644 index 0000000..51ba041 --- /dev/null +++ b/ehcp/net2ftp/help.html @@ -0,0 +1,15 @@ + + + +net2ftp help + + + + + + +<body> +Your browser can not handle frames. Please use a more recent browser to view this install guide. +</body> + + \ No newline at end of file diff --git a/ehcp/net2ftp/htaccess.txt b/ehcp/net2ftp/htaccess.txt new file mode 100644 index 0000000..36cc908 --- /dev/null +++ b/ehcp/net2ftp/htaccess.txt @@ -0,0 +1,8 @@ + +# Rename this file to .htaccess if you want to allow large file uploads +# Note that this file is not always taken into account, depending on your server configuration + +php_value max_execution_time 1200 +php_value memory_limit 200M +php_value post_max_size 200M +php_value upload_max_filesize 200M \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt.php new file mode 100644 index 0000000..1a05ffb --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt.php @@ -0,0 +1,72 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt_blockscramble.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt_blockscramble.php new file mode 100644 index 0000000..496fe1e --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt_blockscramble.php @@ -0,0 +1,92 @@ += $keysize) { $ki = 0; } // key's usually smaller than data, so bound it + $output[$di] = chr((ord($data[$di]) + ord($strongkey[$ki])) % 256); // and record the scrambled byte + } + + return $output; + + } + + + + + + function BlockDescramble(&$data, &$weakkey) { + + // Performs a simple modulo arithmetic cipher on the IV and datastream. The PHP manual + // incorrectly states that the initialization vector may safely be transmitted plaintext; + // in http://www.ciphersbyritter.com/GLOSSARY.HTM#IV it's made clear that in CBC mode, a + // man in the middle attack is possible on the very first block returned by manipulating + // the IV. However, since the IV is just a randomness salt, it carries all of the + // important characteristics of a truncated one time pad; therefore, rotated with the MD5 + // hash of the key, which is well-distributed, we have a non-attackable binary result. + // This protects CBC mode encryptions from a MITM leading block attack. + + $strongkey = md5($weakkey); + + $output = str_repeat(' ', strlen($data)); // pre-allocate output buffer to prevent reallocation thrash + $keysize = strlen($strongkey); // because calling sizeof() every ten cycles is retarded + $datasize = strlen($data); // and again + + $di = 0; // data index cursor + $bi = 0; // block index cursor +// net2ftp - added the next line to avoid a PHP Notice about an "undefined variable" + $ki = 0; + + for (; $di < $datasize; ++$di, ++$ki) { + if ($ki >= $keysize) { $ki = 0; } // key's usually smaller than data, so bound it + $work = (ord($data[$di]) - ord($strongkey[$ki])); // descramble the scrambled byte + if ($work < 0) { $work += 256; } // reorigin low-range bytes + $output[$di] = chr($work); // record the origin-normalized byte + } + + return $output; + + } + + + + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt_compressors.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt_compressors.php new file mode 100644 index 0000000..b686271 --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt_compressors.php @@ -0,0 +1,56 @@ + array( + 'encode' => array('fname' => 'gzcompress', 'args' => array(false, 9), 'data_arg' => 0), + 'decode' => array('fname' => 'gzuncompress'), + 'desc' => 'RFC 1950 ZLib compression at maximum' + ), + + 'gz_deflate' => array( + 'encode' => array('fname' => 'gzdeflate', 'args' => array(false, 9), 'data_arg' => 0), + 'decode' => array('fname' => 'gzinflate'), + 'desc' => 'RFC 1951 ZLib deflate at maximum' + ), + + 'bz' => array( + 'encode' => array('fname' => 'bzcompress', 'args' => array(false, 9, 30), 'data_arg' => 0), + 'decode' => array('fname' => 'bzdecompress'), + 'desc' => 'BZip2 compress at maximum, using work factor 30' + ), + + // add other compressors here + + ); + + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt_config.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt_config.php new file mode 100644 index 0000000..a3719dd --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt_config.php @@ -0,0 +1,133 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt_packcrypt.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt_packcrypt.php new file mode 100644 index 0000000..7b4735b --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt_packcrypt.php @@ -0,0 +1,234 @@ + false, + 'reason' => 'Incomplete pack for unknown reason; indicates horrible failure.', + 'output' => false + ); + + // load options + + if (isset($options['cipher'])) { // Check whether user specified an alternate cipher in the options + $CipherType = $options['cipher']; // if so, use it + } else { + $CipherType = DEFAULT_ENCRYPTION_METHOD; // otherwise, use the default cipher + } + + if (isset($options['mode'])) { // Check whether user specified an alternate block mode in the options + $mode = $options['mode']; // if so, use it + } else { + $mode = DEFAULT_ENCRYPTION_MODE; // otherwise, use the default block mode + } + + if (isset($options['salt'])) { // Check whether user specified an alternate md5 salt in the options + $salt = $options['salt']; // if so, use it + } else { + $salt = DEFAULT_MD5_SALT; // otherwise, use the default salt + } + + + // do preparation + + $SecretData = serialize($Data); // Convert data into a serialized string for single packing + $compressor = false; + + global $compressors; + + // handle potential compression + + if (isset($options['compressor'])) { + + if (isset($compressors[$options['compressor']])) { + + $compressor = $compressors[$options['compressor']]; + if (function_exists($compressor['encode']['fname'])) { + if (function_exists($compressor['decode']['fname'])) { + if (isset($compressor['encode']['args'])) { + if (isset($compressor['encode']['data_arg'])) { + + $largs = $compressor['encode']['args']; + $largs[$compressor['encode']['data_arg']] = $SecretData; + + $SecretData = call_user_func_array($compressor['encode']['fname'], $largs); + + } else { + + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires an argument list; however the data argument has not been specified, making call impossible.'; + return $result; + + } + } else { + $SecretData = $compressor['encode']['fname']($SecretData); + + } + } else { + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires the decode function "' . $compressor['decode']['fname'] . '", which is not present in this PHP installation.'; + return $result; + } + } else { + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires the encode function "' . $compressor['encode']['fname'] . '", which is not present in this PHP installation.'; + return $result; + } + + } else { + + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", is not configured in this script.'; + return $result; + + } + + } + + + // do work + + $td = mcrypt_module_open($CipherType, '', $mode, ''); // Open the cipher module + + $ks = mcrypt_enc_get_key_size($td); // Get required key size + $strongkey = substr(md5($salt . $WeakKey), 0, $ks); // Harden key data into safe key + + $ivsz = mcrypt_enc_get_iv_size($td); // Get the size of the appropriate local initialization vector + +// net2ftp - the 2nd argument of mcrypt_create_iv must be different on Unix and Windows +// Try first Unix, and if $iv is empty try Windows +// Use prefix @ to suppress PHP Warning messages + $iv = @mcrypt_create_iv($ivsz, MCRYPT_DEV_RANDOM); // Generate an initialization vector ** Unix ** + if ($iv == "") { + $iv = @mcrypt_create_iv($ivsz, MCRYPT_RAND); // Generate an initialization vector ** Windows ** + } + + mcrypt_generic_init($td, $strongkey, $iv); // Init encryption engine + $encrypted = mcrypt_generic($td, $SecretData); // Perform encryption + mcrypt_generic_deinit($td); // Shut down encryption engine + + mcrypt_module_close($td); // Close the cipher module + + $IvDataPack = $iv . $encrypted; // Prepend the IV onto the data stream for convenient transfer + + $result['output'] = BlockScramble($IvDataPack, $strongkey); // Return the IV prepended to the data stream, CBC tamper protected + $result['success'] = true; + $result['reason'] = 'Successful pack.'; + + return $result; + + } + + + + + + function UnpackCrypt(&$SecretData, $WeakKey, $options=array() ) {// $CipherType = 'tripledes', $mode = 'ofb') { + + $result = array( + 'success' => false, + 'reason' => 'Incomplete unpack for unknown reason; indicates horrible failure.', + 'output' => false + ); + + // load options + + if (isset($options['cipher'])) { // Check whether user specified an alternate cipher in the options + $CipherType = $options['cipher']; // if so, use it + } else { + $CipherType = DEFAULT_ENCRYPTION_METHOD; // otherwise, use the default cipher + } + + if (isset($options['mode'])) { // Check whether user specified an alternate block mode in the options + $mode = $options['mode']; // if so, use it + } else { + $mode = DEFAULT_ENCRYPTION_MODE; // otherwise, use the default block mode + } + + if (isset($options['salt'])) { // Check whether user specified an alternate md5 salt in the options + $salt = $options['salt']; // if so, use it + } else { + $salt = DEFAULT_MD5_SALT; // otherwise, use the default salt + } + + + // do work + + $td = mcrypt_module_open($CipherType, '', $mode, ''); // Open the cipher module + + $ks = mcrypt_enc_get_key_size($td); // Get required key size + $strongkey = substr(md5($salt . $WeakKey), 0, $ks); // Regenerate hardened key from weak key + + $DescrambleData = BlockDescramble($SecretData, $strongkey); // Remove leading-block CBC tampering attack protection + + $ivsz = mcrypt_enc_get_iv_size($td); // Get the size of the appropriate local initialization vector + $iv = substr($DescrambleData, 0, $ivsz); // Recover the initialization vector + $WorkData = substr($DescrambleData, $ivsz); // Recover the data block + + mcrypt_generic_init($td, $strongkey, $iv); // Init decryption engine + $decrypted = mdecrypt_generic($td, $WorkData); // Perform decryption + mcrypt_generic_deinit($td); // Shut down decryption engine + + mcrypt_module_close($td); // Close the cipher module + + + // handle potential decompression + + global $compressors; + $compressor = false; + + if (isset($options['compressor'])) { + + if (isset($compressors[$options['compressor']])) { + + $compressor = $compressors[$options['compressor']]; + if (function_exists($compressor['encode']['fname'])) { + if (function_exists($compressor['decode']['fname'])) { + if (isset($compressor['decode']['args'])) { + if (isset($compressor['decode']['data_arg'])) { + + $largs = $compressor['decode']['args']; + $largs[$compressor['decode']['data_arg']] = $decrypted; + + $decrypted = call_user_func_array($compressor['decode']['fname'], $largs); + + } else { + + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires an argument list; however the data argument has not been specified, making call impossible.'; + return $result; + + } + } else { + $decrypted = $compressor['decode']['fname']($decrypted); + } + } else { + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires the decode function "' . $compressor['decode']['fname'] . '", which is not present in this PHP installation.'; + return $result; + } + } else { + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", requires the encode function "' . $compressor['encode']['fname'] . '", which is not present in this PHP installation.'; + return $result; + } + + } else { + + $result['reason'] = 'The requested compressor, "' . $options['compressor'] . '", is not configured in this script.'; + return $result; + + } + + } + + $result['success'] = true; + $result['reason'] = 'Successful unpack.'; + $result['output'] = unserialize($decrypted); // Convert data from a serialized string and return + + return $result; + + } + + + + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/StonePhpSafeCrypt_testconfig.php b/ehcp/net2ftp/includes/StonePhpSafeCrypt_testconfig.php new file mode 100644 index 0000000..34d8732 --- /dev/null +++ b/ehcp/net2ftp/includes/StonePhpSafeCrypt_testconfig.php @@ -0,0 +1,9 @@ + false, 'Reason' => ''); + if (DEFAULT_MD5_SALT === '') { + $forcefail['Apply'] = true; + $forcefail['Reason'] = 'You must set the default MD5 salt on line 83 before this library will function.'; + } + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/authorizations.inc.php b/ehcp/net2ftp/includes/authorizations.inc.php new file mode 100644 index 0000000..427598a --- /dev/null +++ b/ehcp/net2ftp/includes/authorizations.inc.php @@ -0,0 +1,749 @@ +=$from and $ip<=$to); + } + +} // End function checkIPinNetwork + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printLoginInfo() { + +// -------------- +// This function prints the ftpserver, username and login information +// -------------- + + global $net2ftp_globals; + + echo "\n"; + echo "\n"; + echo "\n"; +// echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + +} // End function printLoginInfo + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printLoginInfo_javascript() { + +// -------------- +// This function prints the ftpserver, username and login information -- for javascript input +// -------------- + + global $net2ftp_globals; + + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; +// echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + echo " d.writeln('');\n"; + +} // End function printLoginInfo_javascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printPHP_SELF($case) { + +// -------------- +// This function prints $PHP_SELF, the name of the script itself +// -------------- + +// ------------------------------------------------------------------------- +// Global variables and settings +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings; + + $ftpserver = urlEncode2($net2ftp_globals["ftpserver"]); + $ftpserverport = urlEncode2($net2ftp_globals["ftpserverport"]); + $username = urlEncode2($net2ftp_globals["username"]); + $language = urlEncode2($net2ftp_globals["language"]); + $skin = urlEncode2($net2ftp_globals["skin"]); + $ftpmode = urlEncode2($net2ftp_globals["ftpmode"]); + $passivemode = urlEncode2($net2ftp_globals["passivemode"]); + $protocol = urlEncode2($net2ftp_globals["protocol"]); + $viewmode = urlEncode2($net2ftp_globals["viewmode"]); + $sort = urlEncode2($net2ftp_globals["sort"]); + $sortorder = urlEncode2($net2ftp_globals["sortorder"]); + $state_html = urlEncode2($net2ftp_globals["state"]); + $state2_html = urlEncode2($net2ftp_globals["state2"]); + $directory_html = urlEncode2($net2ftp_globals["directory"]); + $entry_html = urlEncode2($net2ftp_globals["entry"]); + + if (isset($_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]]) == true) { + $password_encrypted = urlEncode2($_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]]); + } + elseif (isset($net2ftp_globals["password_encrypted"]) == true) { + $password_encrypted = urlEncode2($net2ftp_globals["password_encrypted"]); + } + else { + $password_encrypted = ""; + } + +// From /includes/registerglobals.inc.php + $URL = $net2ftp_globals["action_url"]; + +// If the URL already contains parameters (?param1=value1&param2=value2...), append & +// If not, append a ? + if (strpos($URL, "?") !== false) { $URL .= "&"; } + else { $URL .= "?"; } + +// Append further parameters + if ($case == "actions") { + $URL .= "ftpserver=$ftpserver&ftpserverport=$ftpserverport&username=$username&language=$language&skin=$skin&ftpmode=$ftpmode&passivemode=$passivemode&protocol=$protocol&viewmode=$viewmode&sort=$sort&sortorder=$sortorder"; + } +// Bookmark with password: go straight to the bookmarked state + elseif ($case == "bookmark_withpw") { + $URL .= "ftpserver=$ftpserver&amp;ftpserverport=$ftpserverport&amp;username=$username&amp;password_encrypted=$password_encrypted&amp;language=$language&amp;skin=$skin&amp;ftpmode=$ftpmode&amp;passivemode=$passivemode&amp;protocol=$protocol&amp;viewmode=$viewmode&amp;sort=$sort&amp;sortorder=$sortorder&amp;state=$state_html&amp;state2=$state2_html&amp;directory=$directory_html&amp;entry=$entry_html"; + } +// Bookmark without password: go first to the login_small state to enter the password + elseif ($case == "bookmark_withoutpw") { + $URL .= "ftpserver=$ftpserver&amp;ftpserverport=$ftpserverport&amp;username=$username&amp;language=$language&amp;skin=$skin&amp;ftpmode=$ftpmode&amp;passivemode=$passivemode&amp;protocol=$protocol&amp;viewmode=$viewmode&amp;sort=$sort&amp;sortorder=$sortorder&amp;state=login_small&amp;state2=bookmark&amp;go_to_state=$state_html&amp;go_to_state2=$state2_html&amp;directory=$directory_html&amp;entry=$entry_html"; + } +// Jupload java applet: the cookie information is added to the page using javascript (/skins/blue/jupload1.template.php) + elseif ($case == "jupload") { + $URL .= "ftpserver=$ftpserver&ftpserverport=$ftpserverport&username=$username&language=$language&skin=$skin&ftpmode=$ftpmode&passivemode=$passivemode&protocol=$protocol&directory=$directory_html&state=jupload&screen=2"; + } + elseif ($case == "view") { + $URL .= "ftpserver=$ftpserver&ftpserverport=$ftpserverport&username=$username&language=$language&skin=$skin&ftpmode=$ftpmode&passivemode=$passivemode&protocol=$protocol&viewmode=$viewmode&sort=$sort&sortorder=$sortorder&state=$state_html&state2=image&directory=$directory_html&entry=$entry_html"; + } + elseif ($case == "createDirectoryTreeWindow") { + $URL = $net2ftp_globals["application_rootdir_url"] . "/index.php"; + } +// Change skin + elseif ($case == "defaultskin") { + $URL .= "ftpserver=$ftpserver&ftpserverport=$ftpserverport&username=$username&language=$language&skin=" . $net2ftp_settings["default_skin"] . "&ftpmode=$ftpmode&passivemode=$passivemode&protocol=$protocol&viewmode=$viewmode&sort=$sort&sortorder=$sortorder&state=$state_html&state2=$state2_html&directory=$directory_html&entry=$entry_html"; + } + return $URL; + +} // End function printPHP_SELF + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkAuthorization($ftpserver, $ftpserverport, $directory, $username) { + +// -------------- +// This function +// checks if the FTP server is in the list of those that may be accessed +// checks if the FTP server is in the list of those that may NOT be accessed +// checks if the IP address is in the list of banned IP addresses +// checks if the FTP server port is in the allowed range +// If all is OK, then the user may continue... +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Check if the FTP server is in the list of those that may be accessed +// ------------------------------------------------------------------------- + if ($net2ftp_settings["allowed_ftpservers"][1] != "ALL") { + $result1 = array_search($ftpserver, $net2ftp_settings["allowed_ftpservers"]); + if ($result1 == false) { + $errormessage = __("The FTP server %1\$s is not in the list of allowed FTP servers.", $ftpserver); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + +// ------------------------------------------------------------------------- +// Check if the FTP server is in the list of those that may NOT be accessed +// ------------------------------------------------------------------------- + if (isset($net2ftp_settings["banned_ftpservers"][1]) == true && $net2ftp_settings["banned_ftpservers"][1] != "NONE") { + $result2 = array_search($ftpserver, $net2ftp_settings["banned_ftpservers"]); + if ($result2 != false) { + $errormessage = __("The FTP server %1\$s is in the list of banned FTP servers.", $ftpserver); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + +// ------------------------------------------------------------------------- +// Check if the FTP server port is OK +// ------------------------------------------------------------------------- +// Do not perform this check if ALL ports are allowed + if ($net2ftp_settings["allowed_ftpserverport"] != "ALL" ) { +// Report the error if another port nr has been entered than the one which is allowed + if ($ftpserverport != $net2ftp_settings["allowed_ftpserverport"]) { + $errormessage = __("The FTP server port %1\$s may not be used.", $ftpserverport); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + +// ------------------------------------------------------------------------- +// Check if the IP address is in the list of those that may be used +// ------------------------------------------------------------------------- + if ($net2ftp_settings["allowed_addresses"][1] != "ALL") { + $result3 = false; + for ($i=1; $i<=sizeof($net2ftp_settings["allowed_addresses"]); $i++) { + if (checkIPinNetwork($net2ftp_globals["REMOTE_ADDR"], $net2ftp_settings["allowed_addresses"][$i]) == true) { $result3 = true; } + } + if ($result3 == false) { + $errormessage = __("Your IP address (%1\$s) is not in the list of allowed IP addresses.", $net2ftp_globals["REMOTE_ADDR"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + +// ------------------------------------------------------------------------- +// Check if the IP address is in the list of those that may NOT be used +// ------------------------------------------------------------------------- + if (isset($net2ftp_settings["banned_addresses"][1]) == true && $net2ftp_settings["banned_addresses"][1] != "NONE") { + $result4 = false; + for ($i=1; $i<=sizeof($net2ftp_settings["banned_addresses"]); $i++) { + if (checkIPinNetwork($net2ftp_globals["REMOTE_ADDR"], $net2ftp_settings["banned_addresses"][$i]) == true) { $result4 = true; } + } + if ($result4 != false) { + $errormessage = __("Your IP address (%1\$s) is in the list of banned IP addresses.", $net2ftp_globals["REMOTE_ADDR"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + +// ------------------------------------------------------------------------- +// Check if the directory is authorised: +// 1 - Whether the current $directory name contains a banned keyword. +// 2 - If the current $directory is a subdirectory of the homedirectory. +// The rootdirectory is first checked for the current user; if this is not set, +// the default rootdirectory is checked. +// ------------------------------------------------------------------------- + $result4 = checkAuthorizedDirectory($directory); + if ($net2ftp_result["success"] == false) { return false; } + if ($result4 == false) { + $net2ftp_globals["directory"] = $net2ftp_globals["homedirectory"]; + $net2ftp_globals["directory_html"] = htmlEncode2($net2ftp_globals["directory"]); + $net2ftp_globals["directory_js"] = javascriptEncode2($net2ftp_globals["directory"]); + if (strlen($net2ftp_globals["directory"]) > 0) { $net2ftp_globals["printdirectory"] = $net2ftp_globals["directory"]; } + else { $net2ftp_globals["printdirectory"] = "/"; } + } + + +// ------------------------------------------------------------------------- +// If everything is OK, return true +// ------------------------------------------------------------------------- + return true; + +} // end checkAuthorization + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkAuthorizedDirectory($directory) { + +// -------------- +// 1 - This function checks whether the current $directory name contains a banned +// keyword. +// 2 - It also checks if the current $directory is a subdirectory of the +// homedirectory. The rootdirectory is first checked for the current user; +// if this is not set, the default rootdirectory is checked. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + +// ------------------------------------------------------------------------- +// 1 - Check if the directory name contains a banned keyword +// ------------------------------------------------------------------------- + if (checkAuthorizedName($directory) == false) { return false; } + +// ------------------------------------------------------------------------- +// 2 - Check if the directory is a subdirectory of the homedirectory (set in the DB) +// ------------------------------------------------------------------------- + +// ---------------------------------------------- +// Initial checks +// ---------------------------------------------- + if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_homedirectory"] != "yes") { return true; } + +// ---------------------------------------------- +// Get the homedirectory from the database, then store it in a global +// variable, and from then on, don't access the database any more +// ---------------------------------------------- + $net2ftp_globals["homedirectory"] = getRootdirectory(); + +// ---------------------------------------------- +// Check if the current directory is a subdirectory of the homedirectory +// ---------------------------------------------- + if (isSubdirectory($net2ftp_globals["homedirectory"], $directory) == false) { return false; } + else { return true; } + +} // end checkAuthorizedDirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkAuthorizedName($dirfilename) { + +// -------------- +// This function checks if the directory/file/symlink name contains a forbidden keyword +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_settings; + +// ------------------------------------------------------------------------- +// Check +// ------------------------------------------------------------------------- + if (isset($net2ftp_settings["banned_keywords"][1]) == true && $net2ftp_settings["banned_keywords"][1] != "NONE") { + for ($i=1; $i<=sizeof($net2ftp_settings["banned_keywords"]); $i++) { + if (strpos($dirfilename, $net2ftp_settings["banned_keywords"][$i]) !== false) { return false; } + } + } + + return true; + +} // end checkAuthorizedName + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function getRootdirectory() { + +// -------------- +// This function gets the user's root directory from the database and +// stores it in $net2ftp_globals["homedirectory"]. +// +// If $net2ftp_globals["homedirectory"] is already filled in (cache), no connection +// is made to the DB and this value is returned. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + +// ------------------------------------------------------------------------- +// Initial checks +// ------------------------------------------------------------------------- + if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_homedirectory"] != "yes") { + $net2ftp_globals["homedirectory"] = "/"; + } + +// ------------------------------------------------------------------------- +// Get the homedirectory from the database, then store it in a global +// variable, and from then on, don't access the database any more +// ------------------------------------------------------------------------- + if (isset($net2ftp_globals["homedirectory"]) == false) { + +// ------------------------------------------------------------------------- +// Add slashes to variables which are used in a SQL query, and which are +// potentially unsafe (supplied by the user) +// ------------------------------------------------------------------------- + $net2ftp_ftpserver_safe = addslashes($net2ftp_globals["ftpserver"]); + $net2ftp_username_safe = addslashes($net2ftp_globals["username"]); + +// ------------------------------------------------------------------------- +// Connect +// ------------------------------------------------------------------------- + $mydb = connect2db(); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------------------------------------------------------- +// Get user's home directory +// ------------------------------------------------------------------------- + $sqlquery1 = "SELECT homedirectory FROM net2ftp_users WHERE ftpserver = '$net2ftp_ftpserver_safe' AND username = '$net2ftp_username_safe';"; + $result1 = mysql_query("$sqlquery1") or die("Unable to execute SQL SELECT query (isAuthorizedDirectory > sqlquery1)
$sqlquery1"); + $nrofrows1 = mysql_num_rows($result1); + + if ($nrofrows1 == 0) { + $net2ftp_globals["homedirectory"] = "/"; + } + elseif ($nrofrows1 == 1) { + $resultRow1 = mysql_fetch_row($result1); + $net2ftp_globals["homedirectory"] = $resultRow1[0]; + } + else { + setErrorVars(false, __("Table net2ftp_users contains duplicate rows."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + return $net2ftp_globals["homedirectory"]; + +} // end getRootdirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function isSubdirectory($parentdir, $childdir) { + +// -------------- +// Returns true if the childdir is a subdirectory of the parentdir +// -------------- + +// If the parentdir is empty or the root directory, then the childdir is +// a the same as or a subdirectory of the parentdir + if ($parentdir == "" || $parentdir == "/" || $parentdir == "\\") { return true; } + +// Strip the directories of leading and trailing slashes + $parentdir = stripDirectory($parentdir); + $childdir = stripDirectory($childdir); + $parentdir_length = strlen($parentdir); + +// Check if the first characters of the childdir are different from the +// parentdir. Example: +// parentdir: /home/abc +// childdir: /home/blabla ==> false +// childdir: /home/abcd ==> continue further checks +// childdir: /home/abc/xyz ==> continue further checks + $childdir_firstchars = substr($childdir, 0, $parentdir_length); + if ($childdir_firstchars != $parentdir) { return false; } + +// If the first characters of the childdir are identical to the parentdir, +// check if the first next character of the childdir name is different. +// Example: +// parentdir: /home/abc +// childdir: /home/abcd ==> false +// childdir: /home/abc/xyz ==> true + $childdir_nextchar = substr($childdir, $parentdir_length, 1); + if ($childdir_nextchar != "/" && $childdir_nextchar != "\\") { return false; } + + return true; + +} // end isSubdirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkAdminUsernamePassword() { + +// -------------- +// This function checks the Administrator username and password. +// If one of the two is not filled in or incorrect, a header() is sent +// to redirect the user to the login_small page. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + $input_admin_username = $_POST["input_admin_username"]; + $input_admin_password = $_POST["input_admin_password"]; + +// ------------------------------------------------------------------------- +// Check Admin username and password +// ------------------------------------------------------------------------- + +// Set the error message depending on the case +// Redirect the user to the login_small page + + // No username or password filled in + if ($input_admin_username == "" || $input_admin_password == "") { + $errormessage = htmlEncode2(__("You did not enter your Administrator username or password.")); + header("Location: " . $net2ftp_globals["action_url"] . "?state=login_small&state2=admin&go_to_state=" . $net2ftp_globals["state"] . "&go_to_state2=" . $net2ftp_globals["state2"] . "&errormessage=" . $errormessage); + $net2ftp_result["exit"] = true; + return false; + } + + // Wrong username or password + elseif ($input_admin_username != $net2ftp_settings["admin_username"] || + $input_admin_password != $net2ftp_settings["admin_password"]) { + $errormessage = htmlEncode2(__("Wrong username or password. Please try again.")); + header("Location: " . $net2ftp_globals["action_url"] . "?state=login_small&state2=admin&go_to_state=" . $net2ftp_globals["state"] . "&go_to_state2=" . $net2ftp_globals["state2"] . "&errormessage=" . $errormessage); + $net2ftp_result["exit"] = true; + return false; + } + + return true; + +} // end checkAdminUsernamePassword() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/before430.inc.php b/ehcp/net2ftp/includes/before430.inc.php new file mode 100644 index 0000000..196f8cc --- /dev/null +++ b/ehcp/net2ftp/includes/before430.inc.php @@ -0,0 +1,39 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/includes/browse.inc.php b/ehcp/net2ftp/includes/browse.inc.php new file mode 100644 index 0000000..a65d1d1 --- /dev/null +++ b/ehcp/net2ftp/includes/browse.inc.php @@ -0,0 +1,876 @@ + go to the user's root directory +// For all other screens ==> return error + if ($result2 == false) { + if ($net2ftp_globals["state"] == "browse") { + $rootdirectory = getRootdirectory(); + + // User's root directory is different from the current directory, so switch to it + if ($directory != $rootdirectory) { + $warnings .= __("The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead.", $directory, $rootdirectory); + $directory = $rootdirectory; + $result3 = ftp_chdir($conn_id, $directory); + } + + // The current directory *is* the user's root directory! + // We cannot display any other directory (like /), so print an error message. + else { + $errormessage = __("Your root directory %1\$s does not exist or could not be selected.", $directory); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + } + } + else { + $errormessage = __("The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist.", $directory); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + } + } // end if result2 + + } // end if result1 + + } // end if / or "" or else + + +// ------------------------------------------------------------------------- +// Step 2 - Get list of directories and files +// The -a option is used to show the hidden files as well on some FTP servers +// Some servers do not return anything when using -a, so in that case try again without the -a option +// ------------------------------------------------------------------------- + $rawlist = ftp_rawlist($conn_id, "-a"); + if (sizeof($rawlist) <= 1) { $rawlist = ftp_rawlist($conn_id, ""); } + + +// ------------------------------------------------------------------------- +// Step 3 - Parse the raw list +// ------------------------------------------------------------------------- + +// ---------------------------------------------- +// Initialize variables +// ---------------------------------------------- + $list["directories"] = array(); + $list["files"] = array(); + $list["symlinks"] = array(); + $list["unrecognized"] = array(); + $directory_index = 1; + $file_index = 1; + $symlink_index = 1; + $unrecognized_index = 1; + $list["stats"]["directories"]["total_number"] = 0; + $list["stats"]["directories"]["total_size"] = 0; + $list["stats"]["directories"]["total_skipped"] = 0; + $list["stats"]["files"]["total_number"] = 0; + $list["stats"]["files"]["total_size"] = 0; + $list["stats"]["files"]["total_skipped"] = 0; + $list["stats"]["symlinks"]["total_number"] = 0; + $list["stats"]["symlinks"]["total_size"] = 0; + $list["stats"]["symlinks"]["total_skipped"] = 0; + $list["stats"]["unrecognized"]["total_number"] = 0; + $list["stats"]["unrecognized"]["total_size"] = 0; + $list["stats"]["unrecognized"]["total_skipped"] = 0; + +// ---------------------------------------------- +// Loop over the raw list lines +// ---------------------------------------------- + $nr_entries_banned_keyword = 0; + $nr_entries_too_big = 0; + + for($i=0; $i $net2ftp_settings["max_filesize"]) { $listline["selectable"] = "too_big"; $nr_entries_too_big++; } + } + +// Form the new directory filename and encode it too + if ($listline["dirorfile"] == "d") { + $listline["newdir"] = glueDirectories($directory, $listline["dirfilename"]); + $listline["newdir_html"] = htmlEncode2($listline["newdir"]); + $listline["newdir_url"] = urlEncode2($listline["newdir"]); + $listline["newdir_js"] = javascriptEncode2($listline["newdir"]); + } + +// ---------------------------------------------- +// Depending on if the line contained a directory/file/symlink/unrecognized +// row, store the result in different variables +// ---------------------------------------------- + + if ($listline["dirorfile"] == "d") { + $list["directories"][$directory_index] = $listline; + $directory_index++; + if (isset($listline["size"]) && is_numeric($listline["size"])) { + $list["stats"]["directories"]["total_size"] = $list["stats"]["directories"]["total_size"] + $listline["size"]; + } + else { + $list["stats"]["directories"]["total_skipped"] = $list["stats"]["directories"]["total_skipped"] + 1; + } + } // end if + elseif ($listline["dirorfile"] == "-") { + $list["files"][$file_index] = $listline; + $file_index++; + if (isset($listline["size"]) && is_numeric($listline["size"])) { + $list["stats"]["files"]["total_size"] = $list["stats"]["files"]["total_size"] + $listline["size"]; + } + else { + $list["stats"]["files"]["total_skipped"] = $list["stats"]["files"]["total_skipped"] + 1; + } + } // end elseif + elseif ($listline["dirorfile"] == "l") { + $list["symlinks"][$symlink_index] = $listline; + $symlink_index++; + } // end elseif + elseif ($listline["dirorfile"] == "u") { + $list["unrecognized"][$unrecognized_index] = $listline; + $unrecognized_index++; + } // end elseif + + } // end for + +// Print a warning message if some directories, files or symlinks contain a banned keyword or if a file is +// too big to be downloaded + if ($nr_entries_banned_keyword > 0) { + $warnings .= __("Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."); + $warnings .= "
\n"; + } + if ($nr_entries_too_big > 0) { + $warnings .= __("Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."); + $warnings .= "
\n"; + } + + +// Store the warnings and new directory in $list["stats"] + if (isset($warnings) == true) { $list["stats"]["warnings"] = $warnings; } + else { $list["stats"]["warnings"] = ""; } + $list["stats"]["newdirectory"] = $directory; + +// Store the statistics + $list["stats"]["directories"]["total_size_formated"] = formatFilesize($list["stats"]["directories"]["total_size"]); + $list["stats"]["files"]["total_size_formated"] = formatFilesize($list["stats"]["files"]["total_size"]); + $list["stats"]["directories"]["total_number"] = $directory_index - 1; + $list["stats"]["files"]["total_number"] = $file_index - 1; + $list["stats"]["symlinks"]["total_number"] = $symlink_index - 1; + $list["stats"]["unrecognized"]["total_number"] = $unrecognized_index - 1; + +// Put everything together in $list["all"] + $list["all"] = $list["directories"] + $list["files"] + $list["symlinks"] + $list["unrecognized"]; + +// ------------------------------------------------------------------------- +// Step 4 - Return the result +// ------------------------------------------------------------------------- + return $list; + + + + +// ------------------------------------------------------------------------- +// Some documentation: +// 1 - Some FTP servers return a total on the first line +// 2 - Some FTP servers return . and .. in their list of directories +// ftp_scanline does not return those entries. +// ------------------------------------------------------------------------- + + +// 1 - After doing some tests on different public FTP servers, it appears that +// they reply differently to the ftp_rawlist request: +// - some FTP servers, like ftp.belnet.be, start with a line summarizing how +// many subdirectories and files there are in the current directory. The +// real list of subdirectories and files starts on the second line. +// [0] => total 15 +// [1] => drwxr-xr-x 11 BELNET Archive 512 Feb 6 2000 BELNET +// [2] => drwxr-xr-x 2 BELNET Archive 512 Oct 29 2001 FVD-SFI +// - some other FTP servers, like ftp.redhat.com/pub, start directly with the +// list of subdirectories and files. +// [0] => drwxr-xr-x 9 ftp ftp 4096 Jan 11 06:34 contrib +// [1] => drwxr-xr-x 13 ftp ftp 4096 Jan 29 21:59 redhat +// [2] => drwxrwsr-x 6 ftp ftp 4096 Jun 05 2002 up2date + + +// 2 - Some FTP servers return "." and ".." as directories. These fake entries +// have to be eliminated! +// They would cause infinite loops in the copy/move/delete functions. +// [0] => drwxr-xr-x 5 80 www 512 Apr 10 09:39 . +// [1] => drwxr-xr-x 16 80 www 512 Apr 9 08:51 .. +// [2] => -rw-r--r-- 1 80 www 5647 Apr 9 08:12 _CHANGES_v0.5 +// [3] => -rw-r--r-- 1 80 www 1239 Apr 9 08:12 _CREDITS_v0.5 + + +} // End function ftp_getlist + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** +function ftp_scanline($directory, $rawlistline) { + +// -------------- +// This function scans an ftp_rawlist line string and returns its parts (directory/file, name, size,...) using preg_match() +// +// !!! Documentation about preg_match and FTP server's outputs are now at the end of the function !!! +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_settings, $net2ftp_messages; + + +// ------------------------------------------------------------------------- +// Scanning: +// 1. first scan with strict rules +// 2. if that does not match, scan with less strict rules +// 3. if that does not match, scan with rules for specific FTP servers (AS400) +// 4. and if that does not match, return the raw line +// ------------------------------------------------------------------------- + +// ---------------------------------------------- +// 1. Strict rules +// ---------------------------------------------- + if (preg_match("/([-dl])([rwxsStT-]{9})[ ]+([0-9]+)[ ]+([^ ]+)[ ]+(.+)[ ]+([0-9]+)[ ]+([a-zA-Z]+[ ]+[0-9]+)[ ]+([0-9:]+)[ ]+(.*)/", $rawlistline, $regs) == true) { +// permissions number owner group size month day year/hour filename + $listline["scanrule"] = "rule-1"; + $listline["dirorfile"] = "$regs[1]"; // Directory ==> d, File ==> - + $listline["dirfilename"] = "$regs[9]"; // Filename + $listline["size"] = "$regs[6]"; // Size + $listline["owner"] = "$regs[4]"; // Owner + $listline["group"] = trim($regs[5]); // Group + $listline["permissions"] = "$regs[2]"; // Permissions + $listline["mtime"] = "$regs[7] $regs[8]"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + } + +// ---------------------------------------------- +// 2. Less strict rules +// ---------------------------------------------- + elseif (preg_match("/([-dl])([rwxsStT-]{9})[ ]+(.*)[ ]+([a-zA-Z0-9 ]+)[ ]+([0-9:]+)[ ]+(.*)/", $rawlistline, $regs) == true) { +// permissions number/owner/group/size +// month-day year/hour filename + $listline["scanrule"] = "rule-2"; + $listline["dirorfile"] = "$regs[1]"; // Directory ==> d, File ==> - + $listline["dirfilename"] = "$regs[6]"; // Filename + $listline["size"] = "$regs[3]"; // Number/Owner/Group/Size + $listline["permissions"] = "$regs[2]"; // Permissions + $listline["mtime"] = "$regs[4] $regs[5]"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + } + +// ---------------------------------------------- +// 3. Specific FTP server rules +// ---------------------------------------------- + +// --------------- +// 3.1 Windows +// --------------- + elseif (preg_match("/([0-9\\/-]+)[ ]+([0-9:AMP]+)[ ]+([0-9]*|)[ ]+(.*)/", $rawlistline, $regs) == true) { +// date time size filename + + $listline["scanrule"] = "rule-3.1"; + if ($regs[3] == "") { $listline["size"] = ""; } + else { $listline["size"] = "$regs[3]"; } // Size + $listline["dirfilename"] = "$regs[4]"; // Filename + $listline["owner"] = ""; // Owner + $listline["group"] = ""; // Group + $listline["permissions"] = ""; // Permissions + $listline["mtime"] = "$regs[1] $regs[2]"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + + if ($listline["size"] != "") { $listline["dirorfile"] = "-"; } + else { $listline["dirorfile"] = "d"; } + + } + +// --------------- +// 3.2 Netware +// Thanks to Danny! +// --------------- + elseif (preg_match("/([-]|[d])[ ]+(.{10})[ ]+([^ ]+)[ ]+([0-9]*)[ ]+([a-zA-Z]*[ ]+[0-9]*)[ ]+([0-9:]*)[ ]+(.*)/", $rawlistline, $regs) == true) { +// dir/file perms owner size month day hour filename + $listline["scanrule"] = "rule-3.2"; + $listline["dirorfile"] = "$regs[1]"; // Directory ==> d, File ==> - + $listline["dirfilename"] = "$regs[7]"; // Filename + $listline["size"] = "$regs[4]"; // Size + $listline["owner"] = "$regs[3]"; // Owner + $listline["group"] = ""; // Group + $listline["permissions"] = "$regs[2]"; // Permissions + $listline["mtime"] = "$regs[5] $regs6"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + } + +// --------------- +// 3.3 AS400 +// --------------- + elseif (preg_match("/([a-zA-Z0-9_-]+)[ ]+([0-9]+)[ ]+([0-9\\/-]+)[ ]+([0-9:]+)[ ]+([a-zA-Z0-9_ -\*]+)[ \\/]+([^\\/]+)/", $rawlistline, $regs) == true) { +// owner size date time type filename + + if ($regs[5] != "*STMF") { $directory_or_file = "d"; } + elseif ($regs[5] == "*STMF") { $directory_or_file = "-"; } + + $listline["scanrule"] = "rule-3.3"; + $listline["dirorfile"] = "$directory_or_file";// Directory ==> d, File ==> - + $listline["dirfilename"] = "$regs[6]"; // Filename + $listline["size"] = "$regs[2]"; // Size + $listline["owner"] = "$regs[1]"; // Owner + $listline["group"] = ""; // Group + $listline["permissions"] = ""; // Permissions + $listline["mtime"] = "$regs[3] $regs[4]"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + } + +// --------------- +// 3.4 Titan +// Owner, group are modified compared to rule 1 +// TO DO: integrate this rule in rule 1 itself +// --------------- + elseif (preg_match("/([-dl])([rwxsStT-]{9})[ ]+([0-9]+)[ ]+([a-zA-Z0-9]+)[ ]+([a-zA-Z0-9]+)[ ]+([0-9]+)[ ]+([a-zA-Z]+[ ]+[0-9]+)[ ]+([0-9:]+)[ ](.*)/", $rawlistline, $regs) == true) { +// dir/file permissions number owner group size month date time file + $listline["scanrule"] = "rule-3.4"; + $listline["dirorfile"] = "$regs[1]"; // Directory ==> d, File ==> - + $listline["dirfilename"] = "$regs[9]"; // Filename + $listline["size"] = "$regs[6]"; // Size + $listline["owner"] = "$regs[4]"; // Owner + $listline["group"] = "$regs[5]"; // Group + $listline["permissions"] = "$regs[2]"; // Permissions + $listline["mtime"] = "$regs[7] $regs[8]"; // Mtime -- format depends on what FTP server returns (year, month, day, hour, minutes... see above) + } + +// ---------------------------------------------- +// 4. If nothing matchs, return the raw line +// ---------------------------------------------- + else { + $listline["scanrule"] = "rule-4"; + $listline["dirorfile"] = "u"; + $listline["dirfilename"] = $rawlistline; + } + +// ------------------------------------------------------------------------- +// Remove the . and .. entries +// Remove the total line that some servers return +// ------------------------------------------------------------------------- + if ($listline["dirfilename"] == "." || $listline["dirfilename"] == "..") { return ""; } + elseif (substr($rawlistline,0,5) == "total") { return ""; } + +// ------------------------------------------------------------------------- +// And finally... return the nice list! +// ------------------------------------------------------------------------- + return $listline; + + + + +// ------------------------------------------------------------------------- +// Documentation +// ------------------------------------------------------------------------- + +/* + +mholdgate@wakefield.co.uk +11-Jan-2002 11:51 + +^ Start of String +$ End of string + +n* Zero or more of 'n' +n+ One or more of 'n' +n? A possible 'n' + +n{2} Exactly two of 'n' +n{2,} At least 2 or more of 'n' +n{2,4} From 2 to 4 of 'n' + +() Parenthesis to group expressions +(n|a) Either 'n' or 'a' + +. Any single character + +[1-6] A number between 1 and 6 +[c-h] A lower case character between c and h +[D-M] An upper case character between D and M +[^a-z] Absence of lower case a to z +[_a-zA-Z] An underscore or any letter of the alphabet + +^.{2}[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]{2}a+$ + +A string beginning with any two characters +Followed by either 1 or 2 lower case alphabet letters +Followed by an optional underscore +Followed by zero or more digits +Followed by either a number between 1 and 6 or a character between a and f (Lowercase) +Followed by a two characters which are not digits between 1 and 9 +Followed by one or more n characters at the end of a string + +// $regs can contain a maximum of 10 elements !! (regs[0] to regs[9]) +// To specify what you really want back from ereg, use (). Only what is within () will be returned. See below. + +*/ + +// ---------------------------------------------- +// Sample FTP server's output +// ---------------------------------------------- + +// --------------- +// 1. "Standard" FTP servers output +// --------------- +// ftp.redhat.com +//drwxr-xr-x 6 0 0 4096 Aug 21 2001 pub (one or more spaces between entries) +// +// ftp.suse.com +//drwxr-xr-x 2 root root 4096 Jan 9 2001 bin +//-rw-r--r-- 1 suse susewww 664 May 23 16:24 README.txt +// +// ftp.belnet.be +//-rw-r--r-- 1 BELNET Mirror 162 Aug 6 2000 HEADER.html +//drwxr-xr-x 53 BELNET Archive 2048 Nov 13 12:03 mirror +// +// ftp.microsoft.com +//-r-xr-xr-x 1 owner group 0 Nov 27 2000 dirmap.htm +// +// ftp.sourceforge.net +//-rw-r--r-- 1 root staff 29136068 Apr 21 22:07 ls-lR.gz +// +// ftp.nec.com +//dr-xr-xr-x 12 other 512 Apr 3 2002 pub +// +// ftp.intel.com +//drwxr-sr-x 11 root ftp 4096 Sep 23 16:36 pub + +// --------------- +// 3.1 Windows +// --------------- +//06-10-04 07:56PM 8175 garantie.html +//04-09-04 04:27PM images +//05-25-04 09:18AM 9505 index.html + +// --------------- +// 3.2 Netware +// --------------- +// total 0 +// - [RWCEAFMS] USER 12 Mar 08 10:48 check.txt +// d [RWCEAFMS] USER 512 Mar 18 17:55 latest + + +// --------------- +// 3.3 AS400 +// --------------- +// RGOVINDAN 932 03/29/01 14:59:53 *STMF /cert.txt +// QSYS 77824 12/17/01 15:33:14 *DIR /QOpenSys/ +// QDOC 24576 12/31/69 20:00:00 *FLR /QDLS/ +// QSYS 12832768 04/14/03 16:47:25 *LIB /QSYS.LIB/ +// QDFTOWN 2147483647 12/31/69 20:00:00 *DDIR /QOPT/ +// QSYS 2144 04/12/03 12:49:00 *DDIR /QFileSvr.400/ +// QDFTOWN 1136 04/12/03 12:49:01 *DDIR /QNTC/ + +// --------------- +// 3.4 Titan FTP server +// --------------- +// total 6 +// drwxrwx--- 1 owner group 512 Apr 19 11:44 . +// drwxrwx--- 1 owner group 512 Apr 19 11:44 .. +// -rw-rw---- 1 owner group 13171 Apr 15 13:50 default.asp +// drwxrwx--- 1 owner group 512 Apr 19 11:44 forum +// drwxrwx--- 1 owner group 512 Apr 15 13:32 images +// -rw-rw---- 1 owner group 764 Apr 15 11:07 styles.css + +} // End function ftp_scanline + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp2http($directory, $list_files, $htmltags) { + +// -------------- +// This function calculates the HTTP URL based on the FTP URL +// +// Given the FTP server (ftp.name.com), +// the directory and file (/directory/file.php) +// It has to return +// http://www.name.com/directory/file.php +// +// $htmltags indicates whether the url should be returned enclosed in HTML tags or not +// +// For efficiency reasons, this function processes a list of files +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals; + +// ------------------------------------------------------------------------- +// If no list is supplied, return "" +// ------------------------------------------------------------------------- + if (sizeof($list_files) == 0) { return ""; } + +// ------------------------------------------------------------------------- +// Prepare the variables +// ------------------------------------------------------------------------- + +// Directory + if ($directory == "/") { $directory = ""; } + + // Convert single quotes from ' to ' + if ($htmltags == "no") { $directory = javascriptEncode2($directory); } + else { $directory = urlEncode2($directory); } + +// Filenames + if ($htmltags == "no") { $encoding = "dirfilename_js"; } + else { $encoding = "dirfilename_url"; } + +// Username + if ($htmltags == "no") { $username = javascriptEncode2($net2ftp_globals["username"]); } + else { $username = htmlEncode2($net2ftp_globals["username"]); } + +// ------------------------------------------------------------------------- +// "ftp.t35.com" -----> "http://username" (username = username.t35.com) +// "ftp.t35.net" -----> "http://username" (username = username.t35.net) +// ------------------------------------------------------------------------- + if (strpos($net2ftp_globals["ftpserver"], "ftp.t35") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "ftp-www.earthlink.net/webdocs/directory" -----> "http://home.earthlink.net/~username/directory" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "ftp-www.earthlink.net") !== false) { + if (strlen($directory) < 8) { + for ($i=1; $i<=sizeof($list_files); $i++) { + if ($htmltags == "no") { $list_links[$i] = "javascript:alert('" . __("This file is not accessible from the web") . "');"; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + else { + // Transform directory from /webdocs/dir to /dir --> remove the first 4 characters + $directory = substr($directory, 8); + + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://home.earthlink.net/~" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } // end if else strlen + } + +// ------------------------------------------------------------------------- +// "ftpperso.free.fr" -----> "http://username.free.fr" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "ftpperso.free.fr") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://" . $username . ".free.fr" . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "ftp.membres.lycos.fr" -----> "http://membres.lycos.fr/username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"],"ftp.membres.lycos.fr") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://membres.lycos.fr/" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "home.planetinternet.be" -----> "http://home.planetinternet.be/~username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "home.planetinternet.be") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://home.planetinternet.be/~" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "home.planet.nl" -----> "http://home.planet.nl/~username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "home.planet.nl") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://home.planet.nl/~" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "users.skynet.be" -----> "http://users.skynet.be/username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "users.skynet.be") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://users.skynet.be/" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "ftp.tripod.com" -----> "http://username.tripod.com" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "ftp.tripod.com") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://" . $username . ".tripod.com" . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "ftp.wanadoo.es" -----> "http://perso.wanadoo.es/username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "ftp.wanadoo.es") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://perso.wanadoo.es/" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "perso-ftp.wanadoo.fr" -----> "http://perso.wanadoo.fr/username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "perso-ftp.wanadoo.fr") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://perso.wanadoo.fr/" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "home.wanadoo.nl" -----> "http://home.wanadoo.nl/username" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "home.wanadoo.nl") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://home.wanadoo.nl/" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// wanadoo uk +// "uploads.webspace.freeserve.net" -----> "http://www.username.freeserve.co.uk" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "uploads.webspace.freeserve.net") !== false) { + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://www." . $username . ".freeserve.co.uk" . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + +// ------------------------------------------------------------------------- +// "ftp.xs4all.nl/WWW/directory" -----> "http://www.xs4all.nl/~username/directory" +// ------------------------------------------------------------------------- + elseif (strpos($net2ftp_globals["ftpserver"], "ftp.xs4all.nl") !== false) { + if (strlen($directory) < 4) { + for ($i=1; $i<=sizeof($list_files); $i++) { + if ($htmltags == "no") { $list_links[$i] = "javascript:alert('" . __("This file is not accessible from the web") . "');"; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + else { + // Transform directory from /WWW/dir to /dir --> remove the first 4 characters + $directory = substr($directory, 4); + + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://www.xs4all.nl/~" . $username . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + } + +// ------------------------------------------------------------------------- +// "ftp.server.com/directory/file" -----> "http://www.server.com/directory/file" +// ------------------------------------------------------------------------- + elseif (preg_match("/ftp.(.+)(.{2,4})/", $net2ftp_globals["ftpserver"], $regs)) { + +// Check if the FTP directory contains "htdocs", "httpdocs" or "public_html" +// If it does, the HTTP directory root starts from there on +// Example: /srv/www/htdocs/directory1 ==> /directory1 + + $specialdirectories[1] = "htdocs"; + $specialdirectories[2] = "httpdocs"; + $specialdirectories[3] = "public_html"; + + for ($i=1; $i<=sizeof($specialdirectories); $i++) { + $pos = strpos($directory, $specialdirectories[$i]); + if ($pos !== false) { + $directory = substr($directory, $pos + strlen($specialdirectories[$i])); + break; + } + } + +// Calculate all the URLs on the Browse screen + + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://www." . $regs[1] . $regs[2] . $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + + } + +// ------------------------------------------------------------------------- +// "http://192.168.0.1/directory/file" can be determined using "192.168.0.1/directory/file": +// ------------------------------------------------------------------------- + else { + +// Check if the FTP directory contains "htdocs", "httpdocs" or "public_html" +// If it does, the HTTP directory root starts from there on +// Example: /srv/www/htdocs/directory1 ==> /directory1 + + $specialdirectories[1] = "htdocs"; + $specialdirectories[2] = "httpdocs"; + $specialdirectories[3] = "public_html"; + + for ($i=1; $i<=sizeof($specialdirectories); $i++) { + $pos = strpos($directory, $specialdirectories[$i]); + if ($pos !== false) { + $directory = substr($directory, $pos + strlen($specialdirectories[$i])); + break; + } + } + +// Calculate all the URLs on the Browse screen + for ($i=1; $i<=sizeof($list_files); $i++) { + $URL = "http://" . $net2ftp_globals["ftpserver"]. $directory . "/" . $list_files[$i][$encoding]; + if ($htmltags == "no") { $list_links[$i] = $URL; } + else { $list_links[$i] = "" . $list_files[$i][$encoding] . ""; } + } // end for + } + + return $list_links; + +} // end function ftp2http + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> diff --git a/ehcp/net2ftp/includes/consumption.inc.php b/ehcp/net2ftp/includes/consumption.inc.php new file mode 100644 index 0000000..d1bb3e5 --- /dev/null +++ b/ehcp/net2ftp/includes/consumption.inc.php @@ -0,0 +1,529 @@ + sqlquery1)
$sqlquery1"); + $nrofrows1 = mysql_num_rows($result1); + + if ($nrofrows1 == 0) { + $net2ftp_globals["consumption_ipaddress_datatransfer"] = 0; + $net2ftp_globals["consumption_ipaddress_executiontime"] = 0; + } + elseif ($nrofrows1 == 1) { + $resultRow1 = mysql_fetch_row($result1); + $net2ftp_globals["consumption_ipaddress_datatransfer"] = $resultRow1[0]; + $net2ftp_globals["consumption_ipaddress_executiontime"] = $resultRow1[1]; + } + else { + setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress contains duplicate rows."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// ------------------------------------------------------------------------- +// Get consumed data volume and execution time to the current FTP server +// ------------------------------------------------------------------------- + $sqlquery2 = "SELECT datatransfer, executiontime FROM net2ftp_log_consumption_ftpserver WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';"; + $result2 = mysql_query("$sqlquery2") or die("Unable to execute SQL SELECT query (getConsumption > sqlquery2)
$sqlquery2"); + $nrofrows2 = mysql_num_rows($result2); + + if ($nrofrows2 == 0) { + $net2ftp_globals["consumption_ftpserver_datatransfer"] = 0; + $net2ftp_globals["consumption_ftpserver_executiontime"] = 0; + } + elseif ($nrofrows2 == 1) { + $resultRow2 = mysql_fetch_row($result2); + $net2ftp_globals["consumption_ftpserver_datatransfer"] = $resultRow2[0]; + $net2ftp_globals["consumption_ftpserver_executiontime"] = $resultRow2[1]; + } + else { + setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver contains duplicate rows."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + + +// Return true + return true; + +} // End getConsumption + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function putConsumption() { + +// -------------- +// This function writes the consumption to the database. +// It is run at the end of the script. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + +// ------------------------------------------------------------------------- +// Initial checks +// ------------------------------------------------------------------------- + +// Verify if a database is used, and if consumption checking is turned on. If not: don't continue. + if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; } + +// When user is not logged in, the FTP server is not set + if ($net2ftp_globals["ftpserver"] == "") { return true; } + +// If the REMOTE_ADDR is not filled in, then there is a problem (IP spoofing), so return an error + if ($net2ftp_globals["REMOTE_ADDR"] == "") { + setErrorVars(false, __("Unable to determine your IP address."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// If the database has already been updated, don't do it a second time. +// This is to avoid updating the database twice. The putConsumption() function +// is called from index.php and from shutdown() in filesystem.inc.php. On Windows +// the shutdown() function is called after *every* script execution. + if ($net2ftp_globals["consumption_database_updated"] == 1) { return true; } + +// Add slashes to variables which are used in a SQL query, and which are +// potentially unsafe (supplied by the user). + // $date is calculated in this function + // $time is calculated in this function + $REMOTE_ADDR_safe = addslashes($net2ftp_globals["REMOTE_ADDR"]); + $net2ftp_ftpserver_safe = addslashes($net2ftp_globals["ftpserver"]); + +// ---------------------------------------------- +// Do not log accesses, errors and consumption while the logs are being rotated +// ---------------------------------------------- + $logStatus = getLogStatus(); + if ($net2ftp_result["success"] == false) { return false; } + if ($logStatus != 0) { return true; } + +// ------------------------------------------------------------------------- +// Check the input +// ------------------------------------------------------------------------- + +// if (preg_match("/^[0-9]+$/", $net2ftp_globals["consumption_ipaddress_datatransfer) == FALSE) { +// setErrorVars(false, __("The variable consumption_ipaddress_datatransfer is not numeric."), debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + +// ------------------------------------------------------------------------- +// Connect +// ------------------------------------------------------------------------- + $mydb = connect2db(); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------------------------------------------------------- +// Get date +// ------------------------------------------------------------------------- + $date = date("Y-m-d"); + + +// ------------------------------------------------------------------------- +// Put consumed data volume and execution time by the current IP address +// ------------------------------------------------------------------------- + $sqlquery1 = "SELECT * FROM net2ftp_log_consumption_ipaddress WHERE date = '$date' AND ipaddress = '$REMOTE_ADDR_safe';"; + $result1 = mysql_query("$sqlquery1"); + $nrofrows1 = mysql_num_rows($result1); + + if ($nrofrows1 == 1) { + $sqlquery2 = "UPDATE net2ftp_log_consumption_ipaddress SET datatransfer = '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "' WHERE date = '$date' AND ipaddress = '$REMOTE_ADDR_safe';"; + $result2 = mysql_query("$sqlquery2"); + $nrofrows2 = mysql_affected_rows($mydb); +// Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same, +// the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0 +// and the executiontime is the same as in the table.) +// if ($nrofrows2 != 1) { +// setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress could not be updated."), debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + } + elseif ($nrofrows1 == 0) { + $sqlquery3 = "INSERT INTO net2ftp_log_consumption_ipaddress VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "');"; + $result3 = mysql_query("$sqlquery3"); + $nrofrows3 = mysql_affected_rows($mydb); + if ($nrofrows3 != 1) { + setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress could not be updated."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + else { + setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// MySQL > 4.1.0 +// $sqlquery1 = "INSERT INTO net2ftp_log_consumption_ipaddress VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "') ON DUPLICATE KEY UPDATE datatransfer = '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "';"; + + +// ------------------------------------------------------------------------- +// Put consumed data volume and execution time to the current FTP server +// ------------------------------------------------------------------------- + $sqlquery4 = "SELECT * FROM net2ftp_log_consumption_ftpserver WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';"; + $result4 = mysql_query("$sqlquery4"); + $nrofrows4 = mysql_num_rows($result4); + + if ($nrofrows4 == 1) { + $sqlquery5 = "UPDATE net2ftp_log_consumption_ftpserver SET datatransfer = '" . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ftpserver_executiontime"]) . "' WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';"; + $result5 = mysql_query("$sqlquery5"); + $nrofrows5 = mysql_affected_rows($mydb); +// Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same, +// the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0 +// and the executiontime is the same as in the table.) +// if ($nrofrows5 != 1) { +// setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver could not be updated."), debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + } + elseif ($nrofrows4 == 0) { + $sqlquery6 = "INSERT INTO net2ftp_log_consumption_ftpserver VALUES('$date', '$net2ftp_ftpserver_safe', '" . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ftpserver_executiontime"]) . "');"; + $result6 = mysql_query("$sqlquery6"); + $nrofrows6 = mysql_affected_rows($mydb); + if ($nrofrows6 != 1) { + setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver could not be updated."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + else { + setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// ------------------------------------------------------------------------- +// Update the net2ftp_log_access record with the consumed data volume and execution time +// ------------------------------------------------------------------------- + $sqlquery7 = "SELECT * FROM net2ftp_log_access WHERE id = '" . $net2ftp_globals["log_access_id"] . "';"; + $result7 = mysql_query("$sqlquery7"); + $nrofrows7 = mysql_num_rows($result7); + + if ($nrofrows7 == 1) { + $sqlquery8 = "UPDATE net2ftp_log_access SET datatransfer = '" . $net2ftp_globals["consumption_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_executiontime"]) . "' WHERE id = '" . $net2ftp_globals["log_access_id"] . "'"; + $result8 = mysql_query("$sqlquery8"); + $nrofrows8 = mysql_affected_rows($mydb); +// Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same, +// the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0 +// and the executiontime is the same as in the table.) +// if ($nrofrows8 != 1) { +// setErrorVars(false, __("Table net2ftp_log_access could not be updated."), debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + } + elseif ($nrofrows7 == 0) { + $sqlquery9 = "INSERT INTO net2ftp_log_access VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "');"; + $result9 = mysql_query("$sqlquery9"); + $nrofrows9 = mysql_affected_rows($mydb); + if ($nrofrows9 != 1) { + setErrorVars(false, __("Table net2ftp_log_access could not be updated."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + else { + setErrorVars(false, __("Table net2ftp_log_access contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// ------------------------------------------------------------------------- +// If all 3 tables have been updated, set the flag to 1 +// ------------------------------------------------------------------------- + $net2ftp_globals["consumption_database_updated"] = 1; + +// Return true + return true; + +} // End putConsumption + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function addConsumption($data, $time) { + +// -------------- +// This function adds the $data and $time given in the argument of the function +// to the global variables +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Initial checks +// ------------------------------------------------------------------------- + +// Verify if a database is used, and if consumption checking is turned on. If not: don't continue. + if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; } + +// Initialize variables if needed + if (isset($net2ftp_globals["consumption_datatransfer"]) == false) { $net2ftp_globals["consumption_datatransfer"] = 0; } + if (isset($net2ftp_globals["consumption_executiontime"]) == false) { $net2ftp_globals["consumption_executiontime"] = 0; } + if (isset($net2ftp_globals["consumption_ipaddress_datatransfer"]) == false) { $net2ftp_globals["consumption_ipaddress_datatransfer"] = 0; } + if (isset($net2ftp_globals["consumption_ipaddress_executiontime"]) == false) { $net2ftp_globals["consumption_ipaddress_executiontime"] = 0; } + if (isset($net2ftp_globals["consumption_ftpserver_datatransfer"]) == false) { $net2ftp_globals["consumption_ftpserver_datatransfer"] = 0; } + if (isset($net2ftp_globals["consumption_ftpserver_executiontime"]) == false) { $net2ftp_globals["consumption_ftpserver_executiontime"] = 0; } + + +// ------------------------------------------------------------------------- +// Add the consumption to the global variables +// ------------------------------------------------------------------------- + if ($data != "" && $data > 0) { + $net2ftp_globals["consumption_datatransfer_changeflag"] = 1; + $net2ftp_globals["consumption_datatransfer"] = $net2ftp_globals["consumption_datatransfer"] + $data; + $net2ftp_globals["consumption_ipaddress_datatransfer"] = $net2ftp_globals["consumption_ipaddress_datatransfer"] + $data; + $net2ftp_globals["consumption_ftpserver_datatransfer"] = $net2ftp_globals["consumption_ftpserver_datatransfer"] + $data; + } + + if ($time != "" && $time > 0) { + $net2ftp_globals["consumption_executiontime"] = $net2ftp_globals["consumption_executiontime"] + $time; + $net2ftp_globals["consumption_ipaddress_executiontime"] = $net2ftp_globals["consumption_ipaddress_executiontime"] + $time; + $net2ftp_globals["consumption_ftpserver_executiontime"] = $net2ftp_globals["consumption_ftpserver_executiontime"] + $time; + } + +// Return true + return true; + +} // End addConsumption + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** + +// ** ** +// ** ** + +function printConsumption() { + +// -------------- +// This function prints the global consumption variables. +// It is only used for debugging. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Print the variables +// ------------------------------------------------------------------------- + echo "FTP server: " . $net2ftp_globals["ftpserver"] . "
\n"; + echo "Remote address: " . $net2ftp_globals["REMOTE_ADDR"] . "
\n"; + + echo "consumption_datatransfer: " . $net2ftp_globals["consumption_datatransfer"] . "
\n"; + echo "consumption_executiontime: " . $net2ftp_globals["consumption_executiontime"] . "
\n"; + + echo "consumption_ipaddress_datatransfer: " . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "
\n"; + echo "consumption_ipaddress_executiontime: " . $net2ftp_globals["consumption_ipaddress_executiontime"] . "
\n"; + + echo "consumption_ftpserver_datatransfer: " . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "
\n"; + echo "consumption_ftpserver_executiontime: " . $net2ftp_globals["consumption_ftpserver_executiontime"] . "
\n"; + + echo "consumption_datatransfer_changeflag: " . $net2ftp_globals["consumption_datatransfer_changeflag"] . "
\n"; + echo "consumption_ipaddress_executiontime: " . $net2ftp_globals["consumption_ipaddress_executiontime"] . "
\n"; + + +} // End printConsumption() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + +// ************************************************************************************** +// ************************************************************************************** + +// ** ** +// ** ** + +function checkConsumption() { + +// -------------- +// This function checks the consumption and returns an error message if +// the limit has been reached. +// It returns true if all is OK, false if the limit has been reached. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Initial checks +// ------------------------------------------------------------------------- + +// Verify if a database is used, and if consumption checking is turned on. If not: don't continue. + if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; } + + +// ------------------------------------------------------------------------- +// Check if the limit has been reached +// ------------------------------------------------------------------------- + if ($net2ftp_globals["consumption_ipaddress_datatransfer"] > $net2ftp_settings["max_consumption_ipaddress_datatransfer"]) { return false; } + if ($net2ftp_globals["consumption_ipaddress_executiontime"] > $net2ftp_settings["max_consumption_ipaddress_executiontime"]) { return false; } + if ($net2ftp_globals["consumption_ftpserver_datatransfer"] > $net2ftp_settings["max_consumption_ftpserver_datatransfer"]) { return false; } + if ($net2ftp_globals["consumption_ftpserver_executiontime"] > $net2ftp_settings["max_consumption_ftpserver_executiontime"]) { return false; } + + return true; + +} // End checkConsumption() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/database.inc.php b/ehcp/net2ftp/includes/database.inc.php new file mode 100644 index 0000000..813e51d --- /dev/null +++ b/ehcp/net2ftp/includes/database.inc.php @@ -0,0 +1,52 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/includes/errorhandling.inc.php b/ehcp/net2ftp/includes/errorhandling.inc.php new file mode 100644 index 0000000..7f4228c --- /dev/null +++ b/ehcp/net2ftp/includes/errorhandling.inc.php @@ -0,0 +1,168 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/includes/filesystem.inc.php b/ehcp/net2ftp/includes/filesystem.inc.php new file mode 100644 index 0000000..d4a72da --- /dev/null +++ b/ehcp/net2ftp/includes/filesystem.inc.php @@ -0,0 +1,4034 @@ +FTP module of PHP is not installed.

The administrator of this website should install this FTP module. Installation instructions are given on php.net
"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Decrypt password + if (isset($_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]]) == true) { + $net2ftp_password = decryptPassword($_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]]); + } + else { + $net2ftp_password = decryptPassword($net2ftp_globals["password_encrypted"]); + } + +// Check if port nr is filled in + if ($net2ftp_globals["ftpserverport"] < 1 || $net2ftp_globals["ftpserverport"] > 65535 || $net2ftp_globals["ftpserverport"] == "") { $net2ftp_globals["ftpserverport"] = 21; } + +// Set up basic connection + $ftp_connect = "ftp_connect"; + if ($net2ftp_globals["sslconnect"] == "yes" && function_exists("ftp_ssl_connect")) { $ftp_connect = "ftp_ssl_connect"; } + + $conn_id = $ftp_connect($net2ftp_globals["ftpserver"], $net2ftp_globals["ftpserverport"]); + if ($conn_id == false) { + $errormessage = __("Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
", $net2ftp_globals["ftpserver"], $net2ftp_globals["ftpserverport"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Login with username and password + $login_result = ftp_login($conn_id, $net2ftp_globals["username"], $net2ftp_password); + if ($login_result == false) { + $errormessage = __("Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
", $net2ftp_globals["ftpserver"], $net2ftp_globals["username"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Set passive mode + if ($net2ftp_globals["passivemode"] == "yes") { + $success = ftp_pasv($conn_id, TRUE); + if ($success == false) { + $errormessage = __("Unable to switch to the passive mode on FTP server %1\$s.", $net2ftp_globals["ftpserver"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + +// Get the system type +// $net2ftp_globals["systype"] = ftp_systype($conn_id); + +// Return the connection ID + return $conn_id; + +} // End function ftp_openconnection + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_openconnection2() { + +// -------------- +// This function opens an ftp connection to the secondary FTP server, to which +// files can be copied or moved. +// -------------- + +// Global variables + global $net2ftp_globals; + +// Check if the FTP module of PHP is installed + if (function_exists("ftp_connect") == false) { + $errormessage = __("The FTP module of PHP is not installed.

The administrator of this website should install this FTP module. Installation instructions are given on php.net
"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Check if port nr is correct + if ($net2ftp_globals["ftpserverport2"] < 1 || $net2ftp_globals["ftpserverport2"] > 65535 || $net2ftp_globals["ftpserverport2"] == "") { $net2ftp_globals["ftpserverport2"] = 21; } + +// Set up basic connection + $conn_id = ftp_connect($net2ftp_globals["ftpserver2"], $net2ftp_globals["ftpserverport2"]); + if ($conn_id == false) { + $errormessage = __("Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
", $net2ftp_globals["ftpserver2"], $net2ftp_globals["ftpserverport2"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Login with username and password + $login_result = ftp_login($conn_id, $net2ftp_globals["username2"], $net2ftp_globals["password2"]); + if ($login_result == false) { + $errormessage = __("Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
", $net2ftp_globals["ftpserver2"], $net2ftp_globals["username2"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Set passive mode + if ($net2ftp_globals["passivemode"] == "yes") { + $success = ftp_pasv($conn_id, TRUE); + if ($success == false) { + $errormessage = __("Unable to switch to the passive mode on the second (target) FTP server %1\$s.", $net2ftp_globals["ftpserver2"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + +// Get the system type +// $net2ftp_globals["systype2"] = ftp_systype($conn_id); + +// Return the connection ID + return $conn_id; + +} // End function ftp_openconnection2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_closeconnection($conn_id) { + +// -------------- +// This function closes an ftp connection +// -------------- + + ftp_quit($conn_id); + +} // End function ftp_closeconnection + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_rename2($conn_id, $directory, $entry, $newName) { + +// -------------- +// This function renames a directory +// -------------- + + $old = glueDirectories($directory, $entry); + $new = glueDirectories($directory, $newName); + + $ftp_rename_result = ftp_rename($conn_id, $old, $new); + if ($ftp_rename_result == false) { + $errormessage = __("Unable to rename directory or file %1\$s into %2\$s", $old, $new); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // End function ftp_rename2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_rename3($conn_id, $old, $new) { + +// -------------- +// This function renames a directory or file +// -------------- + + $ftp_rename_result = ftp_rename($conn_id, $old, $new); + if ($ftp_rename_result == false) { + $errormessage = __("Unable to rename directory or file %1\$s into %2\$s", $old, $new); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // End function ftp_rename3 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_chmod2($conn_id, $directory, $list, $divelevel) { + +// -------------- +// This function chmods a directory or file +// +// $list[$i]["dirorfile"] contains d or - which indicates if the entry is a directory or a file +// $list[$i]["dirfilename"] contains the name of the entry +// $list[$i]["chmodoctal"] contains the 3-digit nr +// +// If the entry is a directory, $list[$i]["chmod_subdirectories"] and $list[$i]["chmod_subfiles"] are "yes" if +// the subdirectories and files within the chmodded directory should also be chmodded +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result, $net2ftp_output; + +// ------------------------------------------------------------------------- +// Initialization +// ------------------------------------------------------------------------- + if ($divelevel == 0) { + $net2ftp_output["ftp_chmod2"][] = "
    "; + } + +// ------------------------------------------------------------------------- +// For all directories +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["directories"]["total_number"]; $i=$i+1) { + + + $currentdirectory = glueDirectories($directory, $list["directories"][$i]["dirfilename"]); + +// ------------------------------------ +// Determine if the directory must first be chmodded (if chmodded to 5 or 7), +// or first be traversed (if chmodded to other values) +// A problem is that we don't know if the FTP user is the owner/group/other of the file... +// ------------------------------------ + if ($list["directories"][$i]["chmodoctal"] == 555 || + $list["directories"][$i]["chmodoctal"] == 557 || + $list["directories"][$i]["chmodoctal"] == 575 || + $list["directories"][$i]["chmodoctal"] == 577 || + $list["directories"][$i]["chmodoctal"] == 755 || + $list["directories"][$i]["chmodoctal"] == 757 || + $list["directories"][$i]["chmodoctal"] == 775 || + $list["directories"][$i]["chmodoctal"] == 777) { + $first_chmod_then_traverse = true; + } + else { + $first_chmod_then_traverse = false; + } + +// ------------------------------------ +// Chmod the directory - FIRST CHMOD THEN TRAVERSE +// If the $divelevel == 0 then chmod it in any case as it is the top directory +// If the $divelevel > 0 then chmod it only if chmod_subdirectories == "yes" +// ------------------------------------ + if ($first_chmod_then_traverse == true && ($list["directories"][$i]["chmod_subdirectories"] == "yes" || $divelevel == 0)) { + $sitecommand = "chmod 0" . $list["directories"][$i]["chmodoctal"] . " $currentdirectory"; + $success1 = ftp_site($conn_id, $sitecommand); + if ($success1 == false) { + $errormessage = __("Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers.", $sitecommand); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + elseif ($success1 == true) { + $net2ftp_output["ftp_chmod2"][] = __("Directory %1\$s successfully chmodded to %2\$s", $currentdirectory, $list["directories"][$i]["chmodoctal"]); + } + } + +// ------------------------------------ +// If the subdirectories and files within the current directory also have to be chmodded... +// ------------------------------------ + if ($list["directories"][$i]["chmod_subdirectories"] == "yes" || $list["directories"][$i]["chmod_subfiles"] == "yes") { + +// Get a new list + $newlist = ftp_getlist($conn_id, $currentdirectory); + if ($net2ftp_result["success"] == false) { return false; } + +// Add information to the list + for ($j=1; $j<=$newlist["stats"]["directories"]["total_number"]; $j++) { + $newlist["directories"][$j]["chmodoctal"] = $list["directories"][$i]["chmodoctal"]; + $newlist["directories"][$j]["chmod_subdirectories"] = $list["directories"][$i]["chmod_subdirectories"]; + $newlist["directories"][$j]["chmod_subfiles"] = $list["directories"][$i]["chmod_subfiles"]; + } + for ($j=1; $j<=$newlist["stats"]["files"]["total_number"]; $j++) { + $newlist["files"][$j]["chmodoctal"] = $list["directories"][$i]["chmodoctal"]; + $newlist["files"][$j]["chmod_subdirectories"] = $list["directories"][$i]["chmod_subdirectories"]; + $newlist["files"][$j]["chmod_subfiles"] = $list["directories"][$i]["chmod_subfiles"]; + } + +// Call the function recursively + $net2ftp_output["ftp_chmod2"][] = __("Processing entries within directory %1\$s:", $currentdirectory); + $net2ftp_output["ftp_chmod2"][] = "
      "; + + $newdivelevel = $divelevel + 1; + ftp_chmod2($conn_id, $currentdirectory, $newlist, $newdivelevel); + + $net2ftp_output["ftp_chmod2"][] = "
    "; + + } // end if subdirectories and files + +// ------------------------------------ +// Chmod the directory - FIRST TRAVERSE THEN CHMOD +// If the $divelevel == 0 then chmod it in any case as it is the top directory +// If the $divelevel > 0 then chmod it only if chmod_subdirectories == "yes" +// ------------------------------------ + if ($first_chmod_then_traverse == false && ($list["directories"][$i]["chmod_subdirectories"] == "yes" || $divelevel == 0)) { + $sitecommand = "chmod 0" . $list["directories"][$i]["chmodoctal"] . " $currentdirectory"; + $success1 = ftp_site($conn_id, $sitecommand); + if ($success1 == false) { + $errormessage = __("Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers.", $sitecommand); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + elseif ($success1 == true) { + $net2ftp_output["ftp_chmod2"][] = __("Directory %1\$s successfully chmodded to %2\$s", $currentdirectory, $list["directories"][$i]["chmodoctal"]); + } + } + + } // end for list_directories + +// ------------------------------------------------------------------------- +// Process the files +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["files"]["total_number"]; $i=$i+1) { + + $currentfile = glueDirectories($directory, $list["files"][$i]["dirfilename"]); + +// Chmod the files +// If the $divelevel == 0 then chmod them in any case as they are the top files +// If the $divelevel > 0 then chmod them only if chmod_subfiles == "yes" + + if ($list["files"][$i]["chmod_subfiles"] == "yes" || $divelevel == 0) { + $sitecommand = "chmod 0" . $list["files"][$i]["chmodoctal"] . " $currentfile"; + $success2 = ftp_site($conn_id, $sitecommand); + if ($success2 == false) { + $errormessage = __("Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers.", $sitecommand); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + elseif ($success2 == true) { + $net2ftp_output["ftp_chmod2"][] = __("File %1\$s was successfully chmodded to %2\$s", $currentfile, $list["files"][$i]["chmodoctal"]); + } + } + + } // end for list_files + +// Print message + if ($divelevel == 0) { $net2ftp_output["ftp_chmod2"][] = __("All the selected directories and files have been processed."); } + +} // End function ftp_chmod2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_rmdir2($conn_id, $directory) { + +// -------------- +// This function deletes a directory +// -------------- + +// Replace \' by \\' to be able to delete directories with names containing \' + $directory = str_replace("\'", "\\\'", $directory); + +// QUICK WAY TO DELETE A DIRECTORY + $success1 = ftp_rmdir($conn_id, $directory); + +// THE FTP_RMDIR MAY NOT WORK WITH ALL FTP SERVERS, AS DESCRIBED ON THE FORUM +// http://www.net2ftp.org/forums/index.php?showtopic=658 +// Solution: to delete /dir/parent/dirtodelete +// 1. chdir to the parent directory /dir/parent +// 2. delete the subdirectory, but use only its name (dirtodelete), not the full path (/dir/parent/dirtodelete) + + if ($success1 == false) { + ftp_chdir($conn_id, upDir($directory)); + $parts = explode("/", $directory); + $lastpartnr = sizeof($parts)-1; + $success2 = ftp_rmdir($conn_id, $parts[$lastpartnr]); + if ($success2 == false) { + $errormessage = __("Unable to delete the directory %1\$s", $directory); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + +} // End function ftp_rmdir2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_delete2($conn_id, $file) { + +// -------------- +// This function deletes a file +// -------------- + +// Replace \' by \\' to be able to delete directories with names containing \' + $file = str_replace("\'", "\\\'", $file); + + $success1 = ftp_delete($conn_id, $file); + +// THE FTP_RMDIR MAY NOT WORK WITH ALL FTP SERVERS, AS DESCRIBED ON THE FORUM +// http://www.net2ftp.org/forums/index.php?showtopic=658 +// Solution: to delete /dir/parent/dirtodelete +// 1. chdir to the parent directory /dir/parent +// 2. delete the subdirectory, but use only its name (dirtodelete), not the full path (/dir/parent/dirtodelete) + + if ($success1 == false) { + ftp_chdir($conn_id, upDir($file)); + $parts = explode("/", $file); + $lastpartnr = sizeof($parts)-1; + $success2 = ftp_delete($conn_id, $parts[$lastpartnr]); + if ($success2 == false) { + $errormessage = __("Unable to delete the file %1\$s", $file); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + +} // End function ftp_delete2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_newdirectory($conn_id, $directory) { + +// -------------- +// This function creates a new remote directory +// -------------- + + $success1 = ftp_mkdir($conn_id, $directory); + if ($success1 == false) { + $errormessage = __("Unable to create the directory %1\$s", $directory); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // End function ftp_newdirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_readfile($conn_id, $directory, $file) { + +// -------------- +// This function opens a remote text file and it returns a string +// It can be used stand-alone (with conn_id = "") and then a new connection is opened +// Else it can also be used in a loop (with conn_id != false) and then the existing connection is opened +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result; + + $source = glueDirectories($directory, $file); + +// Step 1/4: Create a temporary filename + $tempfilename = tempnam($net2ftp_globals["application_tempdir"], "read__"); + if ($tempfilename == false) { + @unlink($tempfilename); + $errormessage = __("Unable to create the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("register", $tempfilename); + +// Step 2/4: Copy remote file to the temporary file +// Open connection if needed + if ($conn_id == "") { + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { + @unlink($tempfilename); + return false; + } + $leave_conn_open = "no"; + } + else { + $leave_conn_open = "yes"; + } + +// Check the consumption + if(checkConsumption() == false) { + $errormessage = __("Daily limit reached: the file %1\$s will not be transferred", $source); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Get file + $ftpmode = ftpAsciiBinary($source); + + $ftp_get_result = ftp_get($conn_id, "$tempfilename", "$source", $ftpmode); + if ($ftp_get_result == false) { + @unlink($tempfilename); + $errormessage = __("Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
    Check the permissions of the %3\$s directory.
    ", $source, $tempfilename, $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Add the filesize to the global consumption variables + addConsumption(filesize($tempfilename), 0); + +// Close connection + if ($leave_conn_open == "no") { ftp_closeconnection($conn_id); } + +// Step 3/4: Read temporary file + $string = local_readfile($tempfilename); + if ($net2ftp_result["success"] == false) { return false; } + +// Step 4/4: Delete temporary file + $unlink_result = @unlink($tempfilename); + if ($unlink_result == false) { + $errormessage = __("Unable to delete the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("unregister", $tempfilename); + +// Change CarriageReturn+LineFeed by LineFeed +// This is because some FTP servers replace LineFeed by CarriageReturn+LineFeed +// if ($ftpmode == FTP_ASCII) { +// $string = standardize_eol($string); +// } + + return $string; + +} // End function ftp_readfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_writefile($conn_id, $directory, $file, $string) { + +// -------------- +// This function writes a string to a remote text file. +// If it already existed, it will be overwritten without asking for a confirmation. +// It can be used stand-alone (with conn_id = "") and then a new connection is opened +// Else it can also be used in a loop (with conn_id != false) and then the existing connection is opened +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result; + $target = glueDirectories($directory, $file); + + $ftpmode = ftpAsciiBinary($file); + +// Change CarriageReturn+LineFeed by LineFeed +// This is because some FTP servers replace LineFeed by CarriageReturn+LineFeed +// if ($ftpmode == FTP_ASCII) { +// $string = standardize_eol($string); +// } + +// Step 1/4: Create a temporary filename + $tempfilename = tempnam($net2ftp_globals["application_tempdir"], "write__"); + if ($tempfilename == false) { + @unlink($tempfilename); + $errormessage = __("Unable to create the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("register", $tempfilename); + +// Step 2/4: Write the string to the temporary file + local_writefile($tempfilename, $string); + if ($net2ftp_result["success"] == false) { return false; } + +// Step 3/4: Copy temporary file to remote file +// Open connection if needed + if ($conn_id == "") { + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { + @unlink($tempfilename); + return false; + } + $leave_conn_open = "no"; + } + else { + $leave_conn_open = "yes"; + } + +// Add the filesize to the global consumption variables + addConsumption(filesize($tempfilename), 0); + +// Check the consumption + if(checkConsumption() == false) { + addConsumption((-1)*filesize($tempfilename), 0); + $errormessage = __("Daily limit reached: the file %1\$s will not be transferred", $target); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Put file + // The FTP mode is calculated a few lines above + //$ftpmode = ftpAsciiBinary($file); + + $success3 = ftp_put($conn_id, $target, $tempfilename, $ftpmode); + if ($success3 == false) { + @unlink($tempfilename); + $errormessage = __("Unable to put the file %1\$s on the FTP server.
    You may not have write permissions on the directory.", $target); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Close connection + if ($leave_conn_open == "no") { ftp_closeconnection($conn_id); } + +// Step 4/4: Delete temporary file + $success4 = @unlink($tempfilename); + if ($success4 == false) { + $errormessage = __("Unable to delete the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("unregister", $tempfilename); + +} // End function ftp_writefile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_copymovedelete($conn_id_source, $conn_id_target, $list, $copymovedelete, $divelevel) { + +// -------------- +// This function copies/moves/deletes directories and files from an FTP server to the same +// or another FTP server. +// +// Note there is a difference between move on the same FTP server, and move to another FTP +// server. Move on the same FTP server is done by renaming the directories and files because +// this is much faster. +// +// For copy (on same or another FTP server) and move (to another FTP server), files +// are first transferred from the source FTP server to the webserver, and then transferred +// to the target FTP server. +// +// $list[$i]["dirorfile"] contains d or - which indicates if its a directory or a file +// $list[$i]["dirfilename"] contains the entry name +// $list[$i]["sourcedirectory"] contains the source directory +// $list[$i]["targetdirectory"] contains the target directory +// $list[$i]["newname"] contains the new name if divelevel = 0; for deeper levels the newname is the entry name itself +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result, $net2ftp_output; + +// ------------------------------------------------------------------------- +// Initialization +// ------------------------------------------------------------------------- + if ($divelevel == 0) { + $net2ftp_output["ftp_copymovedelete"][] = "
      "; + } + +// Total number of directories and files on level 0 (chosen by the user) + $total_dirs_files = $list["stats"]["directories"]["total_number"] + $list["stats"]["files"]["total_number"]; + +// ------------------------------------------------------------------------- +// For all directories +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["directories"]["total_number"]; $i=$i+1) { + +// ------------------------------ +// Set the status +// ------------------------------ + $message = __("Processing entry %1\$s", javascriptEncode2($list["directories"][$i]["dirfilename"])) . " ($i/$total_dirs_files)"; + setStatus($i, $total_dirs_files, $message); + +// ------------------------------ +// Source and target +// ------------------------------ + $source = glueDirectories($list["directories"][$i]["sourcedirectory"], $list["directories"][$i]["dirfilename"]); + if ($copymovedelete == "copy" || $copymovedelete == "move") { + if ($divelevel > 0) { $target = glueDirectories($list["directories"][$i]["targetdirectory"], $list["directories"][$i]["dirfilename"]); } // Subdirectories keep their original names + else { $target = glueDirectories($list["directories"][$i]["targetdirectory"], $list["directories"][$i]["newname"]); } // First-level user-selected directories can have been renamed + } + else { + $target = ""; + } + +// ------------------------------ +// Print starting message +// ------------------------------ + $net2ftp_output["ftp_copymovedelete"][] = __("Processing directory %1\$s", $source); + $net2ftp_output["ftp_copymovedelete"][] = "
        "; + +// ------------------------------ +// Check that the targetdirectory is not a subdirectory of the sourcedirectory +// ------------------------------ + if (($conn_id_source == $conn_id_target) && ($copymovedelete != "delete") && (isSubdirectory($source, $target) == true)) { + $net2ftp_output["ftp_copymovedelete"][] = __("The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped", $target, $source); + $net2ftp_output["ftp_copymovedelete"][] = "
      "; + continue; + } + +// ------------------------------ +// Check if the directory contains a banned keyword +// ------------------------------ +// If banned keyword - copy: continue +// If banned keyword - move: abort + if ($list["directories"][$i]["selectable"] == "banned_keyword") { + if ($copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("The directory %1\$s contains a banned keyword, so this directory will be skipped", $source); + $net2ftp_output["ftp_copymovedelete"][] = "
    "; + continue; + } + elseif ($copymovedelete == "move") { + $net2ftp_output["ftp_copymovedelete"][] = __("The directory %1\$s contains a banned keyword, aborting the move", $source); + $net2ftp_output["ftp_copymovedelete"][] = "
"; + return false; + } + } + +// ------------------------------ +// For copy (to the same or another FTP server), move (to another FTP server) or delete +// ------------------------------ + if ($copymovedelete == "copy" || ($copymovedelete == "move" && $conn_id_source != $conn_id_target) || $copymovedelete == "delete") { + +// Create the targetdirectory + if ($copymovedelete == "copy" || $copymovedelete == "move") { + $success1 = ftp_mkdir($conn_id_target, $target); + if ($success1 == false) { $net2ftp_output["ftp_copymovedelete"][] = __("Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process...", $target); } + else { $net2ftp_output["ftp_copymovedelete"][] = __("Created target subdirectory %1\$s", $target); } + } + +// Get a new list + $newlist = ftp_getlist($conn_id_source, $source); + if ($net2ftp_result["success"] == false) { + $net2ftp_output["ftp_copymovedelete"][] = __("The directory %1\$s could not be selected, so this directory will be skipped", $source); + $net2ftp_output["ftp_copymovedelete"][] = ""; + setErrorVars(true, "", "", "", ""); + continue; + } + +// Add information to the list + for ($j=1; $j<=$newlist["stats"]["directories"]["total_number"]; $j++) { + $newlist["directories"][$j]["sourcedirectory"] = $source; + $newlist["directories"][$j]["targetdirectory"] = $target; + } + for ($j=1; $j<=$newlist["stats"]["files"]["total_number"]; $j++) { + $newlist["files"][$j]["sourcedirectory"] = $source; + $newlist["files"][$j]["targetdirectory"] = $target; + } + +// Call the function recursively + $newdivelevel = $divelevel + 1; + $ftp_copymovedelete_result = ftp_copymovedelete($conn_id_source, $conn_id_target, $newlist, $copymovedelete, $newdivelevel); + +// Delete the source directory +// (Only if there were no problems in the recursive call to ftp_copymovedelete() above) + if ($ftp_copymovedelete_result == true && ($copymovedelete == "move" || $copymovedelete == "delete")) { + ftp_rmdir2($conn_id_source, $source); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to delete the subdirectory %1\$s - it may not be empty", $source); + } + else { + $net2ftp_output["ftp_copymovedelete"][] = __("Deleted subdirectory %1\$s", $source); + } + } + + } // end if copy, move to another FTP server, delete + + +// ------------------------------ +// For move (to the same FTP server) +// ------------------------------ + if ($copymovedelete == "move" && $conn_id_source == $conn_id_target) { + ftp_rename3($conn_id_source, $source, $target); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to move the directory %1\$s", $source); + $net2ftp_output["ftp_copymovedelete"][] = ""; + continue; + } + else { + $net2ftp_output["ftp_copymovedelete"][] = __("Moved directory %1\$s", $source); + } + } // end if move to the same FTP server + +// ------------------------------ +// Print ending message +// ------------------------------ + $net2ftp_output["ftp_copymovedelete"][] = __("Processing of directory %1\$s completed", $source); + $net2ftp_output["ftp_copymovedelete"][] = ""; + + } // end for list_directories + + + + +// ------------------------------------------------------------------------- +// Process the files +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["files"]["total_number"]; $i=$i+1) { + +// ------------------------------ +// Set the status +// ------------------------------ + $j = $list["stats"]["directories"]["total_number"] + $i; + $message = __("Processing entry %1\$s", javascriptEncode2($list["files"][$i]["dirfilename"])) . " ($j/$total_dirs_files)"; + setStatus($j, $total_dirs_files, $message); + +// ------------------------------ +// Source and target +// ------------------------------ + $source = glueDirectories($list["files"][$i]["sourcedirectory"], $list["files"][$i]["dirfilename"]); + if ($copymovedelete == "copy" || $copymovedelete == "move") { + if (isset($list["files"][$i]["newname"])) { $target = glueDirectories($list["files"][$i]["targetdirectory"], $list["files"][$i]["newname"]); } + else { $target = glueDirectories($list["files"][$i]["targetdirectory"], $list["files"][$i]["dirfilename"]); } + } + else { + $target = ""; + } + +// ------------------------------ +// Check that the target is not the same as the source file +// ------------------------------ + if (($conn_id_source == $conn_id_target) && ($target == $source)) { + $net2ftp_output["ftp_copymovedelete"][] = __("The target for file %1\$s is the same as the source, so this file will be skipped", $source); + continue; + } + +// ------------------------------ +// Check if the file contains a banned keyword, and if it is not bigger than the limit +// ------------------------------ +// If banned keyword or too big - copy: continue with the other files +// If banned keyword or too big - move: abort + if ($list["files"][$i]["selectable"] == "banned_keyword") { + if ($copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("The file %1\$s contains a banned keyword, so this file will be skipped", $source); + continue; + } + elseif ($copymovedelete == "move") { + $net2ftp_output["ftp_copymovedelete"][] = __("The file %1\$s contains a banned keyword, aborting the move", $source); + return false; + } + } + elseif ($list["files"][$i]["selectable"] == "too_big") { + if ($copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("The file %1\$s is too big to be copied, so this file will be skipped", $source); + continue; + } + elseif ($copymovedelete == "move") { + $net2ftp_output["ftp_copymovedelete"][] = __("The file %1\$s is too big to be moved, aborting the move", $source); + return false; + } + } + +// ------------------------------------ +// For copy (to the same or another FTP server) or move (to another FTP server) +// ------------------------------------ + if ($copymovedelete == "copy" || ($copymovedelete == "move" && $conn_id_source != $conn_id_target)) { + +// Get file from remote sourcedirectory to local temp directory +// Don't delete the source file yet + $localtargetdir = $net2ftp_globals["application_tempdir"]; + $localtargetfile = $list["files"][$i]["dirfilename"] . ".txt"; + $remotesourcedir = $list["files"][$i]["sourcedirectory"]; + $remotesourcefile = $list["files"][$i]["dirfilename"]; + $ftpmode = ftpAsciiBinary($list["files"][$i]["dirfilename"]); + $copymove = "copy"; + + ftp_getfile($conn_id_source, $localtargetdir, $localtargetfile, $remotesourcedir, $remotesourcefile, $ftpmode, $copymove); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + if ($copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to copy the file %1\$s", $list["files"][$i]["dirfilename"]); + continue; + } + elseif ($copymovedelete == "move") { + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to move the file %1\$s, aborting the move", $list["files"][$i]["dirfilename"]); + return false; + } + } + +// Put file from local temp directory to remote targetdirectory +// Delete the temporary file + $localsourcedir = $net2ftp_globals["application_tempdir"]; + $localsourcefile = $list["files"][$i]["dirfilename"] . ".txt"; + $remotetargetdir = $list["files"][$i]["targetdirectory"]; + if (isset($list["files"][$i]["newname"])) { $remotetargetfile = $list["files"][$i]["newname"]; } + else { $remotetargetfile = $list["files"][$i]["dirfilename"]; } + $copymove = "move"; + + ftp_putfile($conn_id_target, $localsourcedir, $localsourcefile, $remotetargetdir, $remotetargetfile, $ftpmode, $copymove); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + if ($copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to copy the file %1\$s", $list["files"][$i]["dirfilename"]); + continue; + } + elseif ($copymovedelete == "move") { + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to move the file %1\$s, aborting the move", $list["files"][$i]["dirfilename"]); + return false; + } + } + +// Copy: if the operation is successful, print a message + elseif ($net2ftp_result["success"] == true && $copymovedelete == "copy") { + $net2ftp_output["ftp_copymovedelete"][] = __("Copied file %1\$s", $list["files"][$i]["dirfilename"]); + } + +// Move: only if the operation is successful, delete the source file + elseif ($copymovedelete == "move") { + $remotesource = glueDirectories($list["files"][$i]["sourcedirectory"], $list["files"][$i]["dirfilename"]); + + ftp_delete2($conn_id_source, $remotesource); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to move the file %1\$s", $list["files"][$i]["dirfilename"]); + } + else { + $net2ftp_output["ftp_copymovedelete"][] = __("Moved file %1\$s", $list["files"][$i]["dirfilename"]); + } + } + + } // end if copy, move to another FTP server, delete + +// ------------------------------ +// For move (to the same FTP server) +// ------------------------------ + elseif ($copymovedelete == "move" && $conn_id_source == $conn_id_target) { + ftp_rename3($conn_id_source, $source, $target); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to move the file %1\$s", $source); + } + else { + $net2ftp_output["ftp_copymovedelete"][] = __("Moved file %1\$s", $source); + } + } // end if move to the same FTP server + +// ------------------------------------ +// For delete +// ------------------------------------ + elseif ($copymovedelete == "delete") { + $remotesource = glueDirectories($list["files"][$i]["sourcedirectory"], $list["files"][$i]["dirfilename"]); + + ftp_delete2($conn_id_source, $remotesource); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["ftp_copymovedelete"][] = __("Unable to delete the file %1\$s", $list["files"][$i]["dirfilename"]); + continue; + } + else { + $net2ftp_output["ftp_copymovedelete"][] = __("Deleted file %1\$s", $list["files"][$i]["dirfilename"]); + } + + } // end delete + + } // end for list_files + + if ($divelevel == 0) { $net2ftp_output["ftp_copymovedelete"][] = ""; } + +// Print message + if ($divelevel == 0) { $net2ftp_output["ftp_copymovedelete"][] = __("All the selected directories and files have been processed."); } + + return true; + +} // End function ftp_copymovedelete + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_processfiles($dowhat, $conn_id, $directory, $list, $options, $result, $divelevel) { + +// -------------- +// This function does something with files (get size, find string, ...) +// The $list contains both directories and files. The files are simply processed; the +// directories are parsed recursively. +// +// $list[$i]["dirorfile"] contains d or - which indicates if the entry is a directory or a file +// $list[$i]["dirfilename"] contains the name of the entry +// $list[$i]["size"] contains the size of the entry +// +// OPTIONS: +// if ($dowhat == "calculatesize") then +// $options = array() doesn't contain anything +// if ($dowhat == "findstring") then +// $options["string"] a string +// $options["case_sensitive"] blank or yes +// $options["filename"] a filename with possible wildcard character * (it should match this preg_match regular expression: "/^[a-zA-Z0-9_ *-]*$/") +// $options["size_from"], $options["size_to"] a number (in Bytes) +// $options["modified_from"], $options["modified_to"] unix timestamps of the modification dates +// +// RESULT: +// if ($dowhat == "calculatesize") then +// $result["size"] +// $result["skipped"] +// if ($dowhat == "findstring") then +// $result[$k]["directory"] contains the directory +// $result[$k]["dirfilename"] contains the filename +// $result[$k]["line"] contains the line nr +// +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result; + +// ------------------------------------------------------------------------- +// Initialization +// ------------------------------------------------------------------------- + if ($divelevel == 0) { + + } + +// ------------------------------------------------------------------------- +// For all directories +// ------------------------------------------------------------------------- + + for ($i=1; $i<=$list["stats"]["directories"]["total_number"]; $i=$i+1) { + + $currentdirectory = glueDirectories($directory, $list["directories"][$i]["dirfilename"]); + +// Check if the directory contains a banned keyword + if ($list["directories"][$i]["selectable"] != "ok") { continue; } + +// Get a new list + $newlist = ftp_getlist($conn_id, $currentdirectory); + if ($net2ftp_result["success"] == false) { return false; } + +// Call the function recursively + $newdivelevel = $divelevel + 1; + $result = ftp_processfiles($dowhat, $conn_id, $currentdirectory, $newlist, $options, $result, $newdivelevel); + if ($net2ftp_result["success"] == false) { return false; } + + } // end for list_directories + +// ------------------------------------------------------------------------- +// Process the files +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["files"]["total_number"]; $i=$i+1) { + +// ------------------------------- +// Calculate size +// ------------------------------- + if ($dowhat == "calculatesize") { +// Check if the size information is entered +// Check also if the size is numeric + if (isset($list["files"][$i]["size"]) && is_numeric($list["files"][$i]["size"])) { $result["size"] = $result["size"] + $list["files"][$i]["size"]; } + else { $result["skipped"] = $result["skipped"] + 1; } + } // end if calculatesize + +// ------------------------------- +// Find string +// ------------------------------- + elseif ($dowhat == "findstring") { + +// Check that the file is smaller than the maximum file size that can be processed with net2ftp + if ($list["files"][$i]["selectable"] != "ok") { + continue; + } + +// Check that the file is within the limits indicated on the selection screen + if ($list["files"][$i]["size"] < $options["size_from"] || $list["files"][$i]["size"] > $options["size_to"]) { +// echo "File $i skipped"; + continue; + } + +// Check modification date (if that data is returned by the FTP server in the correct format) + $mtime_file = strtotime($list["files"][$i]["mtime"]); + // If strtotime cannot interprete the data returned by the FTP server it returns -1 + if (($mtime_file != -1) && (($mtime_file < $options["modified_from"]) || ($mtime_file > $options["modified_to"]))) { continue; } + +// Check the filename + $pattern = "/^" . $options["filename"] . "$/i"; // i at the end is for a case-insensitive match + if (preg_match($pattern, $list["files"][$i]["dirfilename"]) == 0) { continue; } + +// Read the file + $text = ftp_readfile("", $directory, $list["files"][$i]["dirfilename"]); + + // If the file could not be read correctly, continue to the next one + if ($net2ftp_result["success"] == false) { setErrorVars(true, "", "", "", ""); continue; } + elseif ($text == "") { continue; } + +// Split the file in an array, each element of the array containing one line of the file + $text_lines = explode_lines($text); + +// For each line, check if the string occurs + for ($line=0; $line $net2ftp_settings["max_filesize"]) { +// $errormessage = __("The file is too big to be transferred"); +// setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + +// Check the consumption + if(checkConsumption() == false) { + $errormessage = __("Daily limit reached: the file %1\$s will not be transferred", $remotesource); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Get file + $success1 = ftp_get($conn_id, $localtarget, $remotesource, $ftpmode); + if ($success1 == false) { + $errormessage = __("Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s", $remotesource, $printftpmode); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + else { registerTempfile("register", $localtarget); } + +// Add the filesize to the global consumption variables + addConsumption(filesize($localtarget), 0); + +// Copy ==> do nothing +// Move ==> delete remote source file + if ($copymove != "copy") { + $success2 = ftp_delete2($conn_id, $remotesource); + if ($success2 == false) { + $errormessage = __("Unable to delete file %1\$s", $remotesource); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + +} // End function ftp_getfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_putfile($conn_id, $localsourcedir, $localsourcefile, $remotetargetdir, $remotetargetfile, $ftpmode, $copymove) { + +// -------------- +// This function copies or moves a local file to a remote file +// $ftpmode is used to specify whether the file is to be transferred in ASCII or BINARY mode +// $copymove is used to specify whether to delete (move) or not (copy) the local source +// +// The opposite function is ftp_getfile +// -------------- + +// Global variables + global $net2ftp_settings; + +// Source and target + $localsource = glueDirectories($localsourcedir, $localsourcefile); + $remotetarget = glueDirectories($remotetargetdir, $remotetargetfile); + +// In the function ftp_put, use FTP_BINARY without the double quotes, otherwhise ftp_put assumes FTP_ASCII +// DO NOT REMOVE THIS OR THE BINARY FILES WILL BE CORRUPTED (when copying, moving, uploading,...) + if ($ftpmode == "FTP_BINARY") { $ftpmode = FTP_BINARY; } + + if ($ftpmode == FTP_ASCII) { $printftpmode = "FTP_ASCII"; } + elseif ($ftpmode == FTP_BINARY) { $printftpmode = "FTP_BINARY"; } + +// Check if the filesize is smaller than the allowed filesize + if (filesize($localsource) > $net2ftp_settings["max_filesize"]) { + $errormessage = __("The file is too big to be transferred"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Add the filesize to the global consumption variables + addConsumption(filesize($localsource), 0); + +// Check the consumption + if(checkConsumption() == false) { + addConsumption((-1)*filesize($localsource), 0); + $errormessage = __("Daily limit reached: the file %1\$s will not be transferred", $remotetarget); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Put local file to remote file +// int ftp_put (int ftp_stream, string remote_file, string local_file, int mode) + $success1 = ftp_put($conn_id, $remotetarget, $localsource, $ftpmode); + if ($success1 == false) { + $errormessage = __("Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s", $remotetarget, $printftpmode); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// If ftp_put fails, this function returns an error message and does not delete the temporary file. +// In case the file was copied, a copy exists in the source directory. +// In case the file was moved, the only copy is in the temporary directory, and so this has to be moved back to the source directory. + +// Copy ==> do nothing +// Move ==> delete local source file + if ($copymove != "copy") { + $success2 = unlink($localsource); + if ($success2 == false) { + $errormessage = __("Unable to delete the local file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + else { registerTempfile("unregister", $localsource); } + } + +} // End function ftp_putfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function getContentType($entry) { + +// -------------------- +// Content-type, for a complete list, see http://www.isi.edu/in-notes/iana/assignments/media-types/media-types +// Content-disposition: attachment. See http://www.w3.org/Protocols/HTTP/Issues/content-disposition.txt +// -------------------- + + $filename_extension = get_filename_extension($entry); + + if ($filename_extension == "ai") { $content_type = "application/postscript"; } + elseif ($filename_extension == "aif") { $content_type = "audio/x-aiff"; } + elseif ($filename_extension == "aifc") { $content_type = "audio/x-aiff"; } + elseif ($filename_extension == "aiff") { $content_type = "audio/x-aiff"; } + elseif ($filename_extension == "asc") { $content_type = "text/plain"; } + elseif ($filename_extension == "atom") { $content_type = "application/atom+xml"; } + elseif ($filename_extension == "au") { $content_type = "audio/basic"; } + elseif ($filename_extension == "avi") { $content_type = "video/x-msvideo"; } + elseif ($filename_extension == "bcpio") { $content_type = "application/x-bcpio"; } + elseif ($filename_extension == "bin") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "bmp") { $content_type = "image/bmp"; } + elseif ($filename_extension == "cdf") { $content_type = "application/x-netcdf"; } + elseif ($filename_extension == "cgm") { $content_type = "image/cgm"; } + elseif ($filename_extension == "class") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "cpio") { $content_type = "application/x-cpio"; } + elseif ($filename_extension == "cpt") { $content_type = "application/mac-compactpro"; } + elseif ($filename_extension == "csh") { $content_type = "application/x-csh"; } + elseif ($filename_extension == "css") { $content_type = "text/css"; } + elseif ($filename_extension == "dcr") { $content_type = "application/x-director"; } + elseif ($filename_extension == "dif") { $content_type = "video/x-dv"; } + elseif ($filename_extension == "dir") { $content_type = "application/x-director"; } + elseif ($filename_extension == "djv") { $content_type = "image/vnd.djvu"; } + elseif ($filename_extension == "djvu") { $content_type = "image/vnd.djvu"; } + elseif ($filename_extension == "dll") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "dmg") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "dms") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "doc") { $content_type = "application/msword"; } + elseif ($filename_extension == "dtd") { $content_type = "application/xml-dtd"; } + elseif ($filename_extension == "dv") { $content_type = "video/x-dv"; } + elseif ($filename_extension == "dvi") { $content_type = "application/x-dvi"; } + elseif ($filename_extension == "dxr") { $content_type = "application/x-director"; } + elseif ($filename_extension == "eps") { $content_type = "application/postscript"; } + elseif ($filename_extension == "etx") { $content_type = "text/x-setext"; } + elseif ($filename_extension == "exe") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "ez") { $content_type = "application/andrew-inset"; } + elseif ($filename_extension == "gif") { $content_type = "image/gif"; } + elseif ($filename_extension == "gram") { $content_type = "application/srgs"; } + elseif ($filename_extension == "grxml") { $content_type = "application/srgs+xml"; } + elseif ($filename_extension == "gtar") { $content_type = "application/x-gtar"; } + elseif ($filename_extension == "hdf") { $content_type = "application/x-hdf"; } + elseif ($filename_extension == "hqx") { $content_type = "application/mac-binhex40"; } + elseif ($filename_extension == "htm") { $content_type = "text/html"; } + elseif ($filename_extension == "html") { $content_type = "text/html"; } + elseif ($filename_extension == "ice") { $content_type = "x-conference/x-cooltalk"; } + elseif ($filename_extension == "ico") { $content_type = "image/x-icon"; } + elseif ($filename_extension == "ics") { $content_type = "text/calendar"; } + elseif ($filename_extension == "ief") { $content_type = "image/ief"; } + elseif ($filename_extension == "ifb") { $content_type = "text/calendar"; } + elseif ($filename_extension == "iges") { $content_type = "model/iges"; } + elseif ($filename_extension == "igs") { $content_type = "model/iges"; } + elseif ($filename_extension == "jnlp") { $content_type = "application/x-java-jnlp-file"; } + elseif ($filename_extension == "jp2") { $content_type = "image/jp2"; } + elseif ($filename_extension == "jpe") { $content_type = "image/jpeg"; } + elseif ($filename_extension == "jpeg") { $content_type = "image/jpeg"; } + elseif ($filename_extension == "jpg") { $content_type = "image/jpeg"; } + elseif ($filename_extension == "js") { $content_type = "application/x-javascript"; } + elseif ($filename_extension == "kar") { $content_type = "audio/midi"; } + elseif ($filename_extension == "latex") { $content_type = "application/x-latex"; } + elseif ($filename_extension == "lha") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "lzh") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "m3u") { $content_type = "audio/x-mpegurl"; } + elseif ($filename_extension == "m4a") { $content_type = "audio/mp4a-latm"; } + elseif ($filename_extension == "m4b") { $content_type = "audio/mp4a-latm"; } + elseif ($filename_extension == "m4p") { $content_type = "audio/mp4a-latm"; } + elseif ($filename_extension == "m4u") { $content_type = "video/vnd.mpegurl"; } + elseif ($filename_extension == "m4v") { $content_type = "video/x-m4v"; } + elseif ($filename_extension == "mac") { $content_type = "image/x-macpaint"; } + elseif ($filename_extension == "man") { $content_type = "application/x-troff-man"; } + elseif ($filename_extension == "mathml") { $content_type = "application/mathml+xml"; } + elseif ($filename_extension == "me") { $content_type = "application/x-troff-me"; } + elseif ($filename_extension == "mesh") { $content_type = "model/mesh"; } + elseif ($filename_extension == "mid") { $content_type = "audio/midi"; } + elseif ($filename_extension == "midi") { $content_type = "audio/midi"; } + elseif ($filename_extension == "mif") { $content_type = "application/vnd.mif"; } + elseif ($filename_extension == "mov") { $content_type = "video/quicktime"; } + elseif ($filename_extension == "movie") { $content_type = "video/x-sgi-movie"; } + elseif ($filename_extension == "mp2") { $content_type = "audio/mpeg"; } + elseif ($filename_extension == "mp3") { $content_type = "audio/mpeg"; } + elseif ($filename_extension == "mp4") { $content_type = "video/mp4"; } + elseif ($filename_extension == "mpe") { $content_type = "video/mpeg"; } + elseif ($filename_extension == "mpeg") { $content_type = "video/mpeg"; } + elseif ($filename_extension == "mpg") { $content_type = "video/mpeg"; } + elseif ($filename_extension == "mpga") { $content_type = "audio/mpeg"; } + elseif ($filename_extension == "ms") { $content_type = "application/x-troff-ms"; } + elseif ($filename_extension == "msh") { $content_type = "model/mesh"; } + elseif ($filename_extension == "mxu") { $content_type = "video/vnd.mpegurl"; } + elseif ($filename_extension == "nc") { $content_type = "application/x-netcdf"; } + elseif ($filename_extension == "oda") { $content_type = "application/oda"; } + elseif ($filename_extension == "ogg") { $content_type = "application/ogg"; } + elseif ($filename_extension == "pbm") { $content_type = "image/x-portable-bitmap"; } + elseif ($filename_extension == "pct") { $content_type = "image/pict"; } + elseif ($filename_extension == "pdb") { $content_type = "chemical/x-pdb"; } + elseif ($filename_extension == "pdf") { $content_type = "application/pdf"; } + elseif ($filename_extension == "pgm") { $content_type = "image/x-portable-graymap"; } + elseif ($filename_extension == "pgn") { $content_type = "application/x-chess-pgn"; } + elseif ($filename_extension == "pic") { $content_type = "image/pict"; } + elseif ($filename_extension == "pict") { $content_type = "image/pict"; } + elseif ($filename_extension == "png") { $content_type = "image/png"; } + elseif ($filename_extension == "pnm") { $content_type = "image/x-portable-anymap"; } + elseif ($filename_extension == "pnt") { $content_type = "image/x-macpaint"; } + elseif ($filename_extension == "pntg") { $content_type = "image/x-macpaint"; } + elseif ($filename_extension == "ppm") { $content_type = "image/x-portable-pixmap"; } + elseif ($filename_extension == "ppt") { $content_type = "application/vnd.ms-powerpoint"; } + elseif ($filename_extension == "ps") { $content_type = "application/postscript"; } + elseif ($filename_extension == "qt") { $content_type = "video/quicktime"; } + elseif ($filename_extension == "qti") { $content_type = "image/x-quicktime"; } + elseif ($filename_extension == "qtif") { $content_type = "image/x-quicktime"; } + elseif ($filename_extension == "ra") { $content_type = "audio/x-pn-realaudio"; } + elseif ($filename_extension == "ram") { $content_type = "audio/x-pn-realaudio"; } + elseif ($filename_extension == "ras") { $content_type = "image/x-cmu-raster"; } + elseif ($filename_extension == "rdf") { $content_type = "application/rdf+xml"; } + elseif ($filename_extension == "rgb") { $content_type = "image/x-rgb"; } + elseif ($filename_extension == "rm") { $content_type = "application/vnd.rn-realmedia"; } + elseif ($filename_extension == "roff") { $content_type = "application/x-troff"; } + elseif ($filename_extension == "rtf") { $content_type = "text/rtf"; } + elseif ($filename_extension == "rtx") { $content_type = "text/richtext"; } + elseif ($filename_extension == "sgm") { $content_type = "text/sgml"; } + elseif ($filename_extension == "sgml") { $content_type = "text/sgml"; } + elseif ($filename_extension == "sh") { $content_type = "application/x-sh"; } + elseif ($filename_extension == "shar") { $content_type = "application/x-shar"; } + elseif ($filename_extension == "silo") { $content_type = "model/mesh"; } + elseif ($filename_extension == "sit") { $content_type = "application/x-stuffit"; } + elseif ($filename_extension == "skd") { $content_type = "application/x-koan"; } + elseif ($filename_extension == "skm") { $content_type = "application/x-koan"; } + elseif ($filename_extension == "skp") { $content_type = "application/x-koan"; } + elseif ($filename_extension == "skt") { $content_type = "application/x-koan"; } + elseif ($filename_extension == "smi") { $content_type = "application/smil"; } + elseif ($filename_extension == "smil") { $content_type = "application/smil"; } + elseif ($filename_extension == "snd") { $content_type = "audio/basic"; } + elseif ($filename_extension == "so") { $content_type = "application/octet-stream"; } + elseif ($filename_extension == "spl") { $content_type = "application/x-futuresplash"; } + elseif ($filename_extension == "src") { $content_type = "application/x-wais-source"; } + elseif ($filename_extension == "sv4cpio") { $content_type = "application/x-sv4cpio"; } + elseif ($filename_extension == "sv4crc") { $content_type = "application/x-sv4crc"; } + elseif ($filename_extension == "svg") { $content_type = "image/svg+xml"; } + elseif ($filename_extension == "swf") { $content_type = "application/x-shockwave-flash"; } + elseif ($filename_extension == "t") { $content_type = "application/x-troff"; } + elseif ($filename_extension == "tar") { $content_type = "application/x-tar"; } + elseif ($filename_extension == "tcl") { $content_type = "application/x-tcl"; } + elseif ($filename_extension == "tex") { $content_type = "application/x-tex"; } + elseif ($filename_extension == "texi") { $content_type = "application/x-texinfo"; } + elseif ($filename_extension == "texinfo") { $content_type = "application/x-texinfo"; } + elseif ($filename_extension == "tif") { $content_type = "image/tiff"; } + elseif ($filename_extension == "tiff") { $content_type = "image/tiff"; } + elseif ($filename_extension == "tr") { $content_type = "application/x-troff"; } + elseif ($filename_extension == "tsv") { $content_type = "text/tab-separated-values"; } + elseif ($filename_extension == "txt") { $content_type = "text/plain"; } + elseif ($filename_extension == "ustar") { $content_type = "application/x-ustar"; } + elseif ($filename_extension == "vcd") { $content_type = "application/x-cdlink"; } + elseif ($filename_extension == "vrml") { $content_type = "model/vrml"; } + elseif ($filename_extension == "vxml") { $content_type = "application/voicexml+xml"; } + elseif ($filename_extension == "wav") { $content_type = "audio/x-wav"; } + elseif ($filename_extension == "wbmp") { $content_type = "image/vnd.wap.wbmp"; } + elseif ($filename_extension == "wbmxl") { $content_type = "application/vnd.wap.wbxml"; } + elseif ($filename_extension == "wml") { $content_type = "text/vnd.wap.wml"; } + elseif ($filename_extension == "wmlc") { $content_type = "application/vnd.wap.wmlc"; } + elseif ($filename_extension == "wmls") { $content_type = "text/vnd.wap.wmlscript"; } + elseif ($filename_extension == "wmlsc") { $content_type = "application/vnd.wap.wmlscriptc"; } + elseif ($filename_extension == "wrl") { $content_type = "model/vrml"; } + elseif ($filename_extension == "xbm") { $content_type = "image/x-xbitmap"; } + elseif ($filename_extension == "xht") { $content_type = "application/xhtml+xml"; } + elseif ($filename_extension == "xhtml") { $content_type = "application/xhtml+xml"; } + elseif ($filename_extension == "xls") { $content_type = "application/vnd.ms-excel"; } + elseif ($filename_extension == "xml") { $content_type = "application/xml"; } + elseif ($filename_extension == "xpm") { $content_type = "image/x-xpixmap"; } + elseif ($filename_extension == "xsl") { $content_type = "application/xml"; } + elseif ($filename_extension == "xslt") { $content_type = "application/xslt+xml"; } + elseif ($filename_extension == "xul") { $content_type = "application/vnd.mozilla.xul+xml"; } + elseif ($filename_extension == "xwd") { $content_type = "image/x-xwindowdump"; } + elseif ($filename_extension == "xyz") { $content_type = "chemical/x-xyz"; } + elseif ($filename_extension == "zip") { $content_type = "application/zip"; } + else { $content_type = "application/octet-stream"; } + + return $content_type; +} + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_downloadfile($directory, $entry) { + + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result, $net2ftp_settings; + +// ------------------------------------------------------------------------- +// Get the file from the FTP server to the web server +// ------------------------------------------------------------------------- + +// Open connection + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { return false; } + +// Check if the filesize is smaller than the allowed filesize +// $ftp_size_result = ftp_size($conn_id, "$directory/$entry"); +// if ($ftp_size_result > $net2ftp_settings["max_filesize"]) { +// $errormessage = __("The file is too big to be transferred"); +// setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + +// FTP mode + $ftpmode = ftpAsciiBinary($entry); + +// Temporary filename + $tempfilename = tempnam($net2ftp_globals["application_tempdir"], "downl__"); + if ($tempfilename == false) { + @unlink($tempfilename); + $errormessage = __("Unable to create the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("register", $tempfilename); + +// Get the file +// ftp_getfile($conn_id, $localtargetdir, $localtargetfile, $remotesourcedir, $remotesourcefile, $ftpmode, $copymove) + ftp_getfile($conn_id, "", $tempfilename, $directory, $entry, $ftpmode, "copy"); + if ($net2ftp_result["success"] == false) { + @unlink($tempfilename); + $errormessage = __("Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
", $entry, $tempfilename, $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Close connection + ftp_closeconnection($conn_id); + +// ------------------------------------------------------------------------- +// Transfer temp file to browser +// ------------------------------------------------------------------------- + +// Send the download headers - this function is in httpheaders.inc.php + sendDownloadHeaders($entry, filesize($tempfilename)); + +// -------------------- +// Open file +// -------------------- +// From the PHP manual: +// Note: The mode may contain the letter 'b'. +// This is useful only on systems which differentiate between binary and text +// files (i.e. Windows. It's useless on Unix). If not needed, this will be +// ignored. You are encouraged to include the 'b' flag in order to make your scripts +// more portable. +// Thanks to Malte for bringing this to my attention ! + registerTempfile("register", $tempfilename); + $handle = fopen($tempfilename , "rb"); + if ($handle == false) { + @unlink($tempfilename); + $errormessage = __("Unable to open the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// -------------------- +// Send file to browser +// -------------------- + +// Old method: fpassthru. Avoid using fpassthru, as it reads the entire file into memory! +// $success1 = fpassthru($handle); +// if ($success1 == false) { +// @fclose($handle); +// @unlink($tempfilename); +// $errormessage = __("Unable to send the file to the browser"); +// setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); +// return false; +// } + +// New method: read the file piece by piece and send it to the browser. + while(!feof($handle)) { + $buffer = fread($handle, 2048); + echo $buffer; + } + +// -------------------- +// Close file +// -------------------- + $success2 = @fclose($handle); + +// -------------------- +// Delete the temporary file +// -------------------- + $success3 = @unlink($tempfilename); + if ($success3 == false) { + $errormessage = __("Unable to delete the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("unregister", $tempfilename); + +} // End function ftp_downloadfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_zip($conn_id, $directory, $list, $zipactions, $zipdir, $divelevel) { + +// -------------- +// This function allows to download/save/email a zipfile which contains the selected directories and files +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result, $net2ftp_output; + +// ------------------------------------------------------------------------- +// Initialization +// ------------------------------------------------------------------------- + + if ($divelevel == 0) { + +// Create the zipfile + $net2ftp_globals["zipfile"] = new zipfile(); + $timenow = time(); + $zipdir = ""; + +// Open the connection + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { return false; } + + } + +// ------------------------------------------------------------------------- +// For all directories... +// ------------------------------------------------------------------------- + for ($i=1; $i<=$list["stats"]["directories"]["total_number"]; $i=$i+1) { + $newdir = glueDirectories($directory, $list["directories"][$i]["dirfilename"]); + $newzipdir = glueDirectories($zipdir, $list["directories"][$i]["dirfilename"]); + $newdivelevel = $divelevel + 1; + +// Check if the directory contains a banned keyword + if ($list["directories"][$i]["selectable"] == "banned_keyword") { continue; } + +// Get a new list + $newlist = ftp_getlist($conn_id, $newdir); + if ($net2ftp_result["success"] == false) { return false; } + + ftp_zip($conn_id, $newdir, $newlist, $zipactions, $newzipdir, $newdivelevel); + if ($net2ftp_result["success"] == false) { setErrorVars(true, "", "", "", ""); continue; } + + if ($divelevel == 0 && ($zipactions["save"] == "yes" || $zipactions["email"] == "yes")) { + $total = $list["stats"]["directories"]["total_number"] + $list["stats"]["files"]["total_number"]; + setStatus($i, $total, __("Processing the entries")); + } + + } // end for directories + +// ------------------------------------------------------------------------- +// For all files... +// ------------------------------------------------------------------------- + + for ($i=1; $i<=$list["stats"]["files"]["total_number"]; $i=$i+1) { + + if ($list["files"][$i]["selectable"] != "ok") { continue; } + + $text = ftp_readfile($conn_id, $directory, $list["files"][$i]["dirfilename"]); + if ($net2ftp_result["success"] == false) { setErrorVars(true, "", "", "", ""); continue; } + + $filename = stripDirectory(glueDirectories($zipdir, $list["files"][$i]["dirfilename"])); + $net2ftp_globals["zipfile"]->addFile($text, $filename); + + if ($divelevel == 0 && ($zipactions["save"] == "yes" || $zipactions["email"] == "yes")) { + $total = $list["stats"]["directories"]["total_number"] + $list["stats"]["files"]["total_number"]; + setStatus($list["stats"]["directories"]["total_number"] + $i - 1, $total, __("Processing the entries")); + } + + } // end for files + +// ------------------------------------------------------------------------- +// End +// ------------------------------------------------------------------------- + if ($divelevel == 0) { + +// ------------------------ +// Send the zipfile to the browser +// ------------------------ + if ($zipactions["download"] == "yes") { + $timenow = time(); + + $filenameToSend = "net2ftp-" . $timenow . ".zip"; + $filesizeToSend = strlen($net2ftp_globals["zipfile"]->file()); + sendDownloadHeaders($filenameToSend, $filesizeToSend); + + echo $net2ftp_globals["zipfile"]->file(); + flush(); + } + +// ------------------------ +// Save the zipfile string to a file +// ------------------------ + if ($zipactions["save"] == "yes" || $zipactions["email"] == "yes") { + $string = $net2ftp_globals["zipfile"]->file(); + + $tempfilename = tempnam($net2ftp_globals["application_tempdir"], "zip__"); + if ($tempfilename == false) { + @unlink($tempfilename); + $errormessage = __("Unable to create the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("register", $tempfilename); + + local_writefile($tempfilename, $string); + if ($net2ftp_result["success"] == false) { return false; } + } + +// ------------------------ +// Save the zip file to the FTP server +// ------------------------ + if ($zipactions["save"] == "yes") { + ftp_putfile($conn_id, "", $tempfilename, $directory, $zipactions["save_filename"], FTP_BINARY, "copy"); + if ($net2ftp_result["success"] == false) { + @unlink($tempfilename); +// $errormessage = __("Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory.", $zipactions["save_filename"]); +// setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + else { $net2ftp_output["ftp_zip"][] = __("The zip file has been saved on the FTP server as %1\$s", $zipactions["save_filename"]) . "

\n"; } + } + +// ------------------------ +// Close the connection +// ------------------------ + ftp_closeconnection($conn_id); + +// ------------------------ +// Email +// ------------------------ + if ($zipactions["email"] == "yes") { + + $FromName = "net2ftp"; + $From = $net2ftp_settings["email_feedback"]; + + $ToName = ""; + $To = $zipactions["email_to"]; + + $Subject = __("Requested files"); + +// Email message + $Text = __("Dear,") . "\n\n"; + $Text .= __("Someone has requested the files in attachment to be sent to this email account (%1\$s).", $To) . "\n"; + $Text .= __("If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment.") . "\n"; + $Text .= __("Note that if you don't open the Zip file, the files inside cannot harm your computer.") . "\n"; + $Text .= "\n\n---------------------------------------\n"; + $Text .= __("Information about the sender: ") . "\n"; + $Text .= __("IP address: ") . $REMOTE_ADDR . "\n"; + $Text .= __("Time of sending: ") . mytime() . "\n"; + $Text .= __("Sent via the net2ftp application installed on this website: ") . $HTTP_REFERER . "\n"; + $Text .= __("Webmaster's email: ") . $From . "\n"; + $Text .= "\n\n---------------------------------------\n"; + $Text .= __("Message of the sender: ") . "\n"; + $Text .= $zipactions["message"] . "\n"; + $Text .= "\n\n---------------------------------------\n"; + $Text .= __("net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com.") . "\n\n\n"; + + $AttmFiles = array($tempfilename); + + SendMail($From, $FromName, $To, $ToName, $Subject, $Text, $Html, $AttmFiles); + if ($net2ftp_result["success"] == false) { + @unlink($tempfilename); + return false; + } + $net2ftp_output["ftp_zip"][] = __("The zip file has been sent to %1\$s.", $To) . "

"; + } + +// ------------------------ +// Delete the temporary zipfile +// ------------------------ + if ($zipactions["save"] == "yes" || $zipactions["email"] == "yes") { + $success4 = @unlink($tempfilename); + if ($success4 == false) { + $errormessage = __("Unable to delete the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + registerTempfile("unregister", $tempfilename); + } + +// Set the variable to NULL to save memory + $net2ftp_globals["zipfile"] = NULL; + + } // end if $divelevel == 0 + +} // End function ftp_zip + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function acceptFiles($uploadedFilesArray) { + +// -------------- +// This PHP function takes files that were just uploaded with HTTP POST, +// verifies if the size is smaller than a certain value, and moves them +// using move_uploaded_file() from the server's temporary directory to +// net2ftp's temporary directory +// +// $uploadedFilesArray[number]["name"] and $acceptedFilesArray[number]["name"] contain the real name of the file +// $uploadedFilesArray[number]["tmp_name"] contains the temporary name of the file in the *webserver's* temporary directory (eg C:\temp) +// $acceptedFilesArray[number]["tmp_name"] contains the temporary name of the file in *net2ftp's* temporary directory (eg C:\web\net2ftp\temp) +// +// Note 1 - $acceptedFilesArray[number]["tmp_name"] may not be the same as $uploadedFilesArray[number]["tmp_name"] because +// $acceptedFilesArray[number]["tmp_name"] should be unique at the moment the file is transferred to the new directory. +// Note 2 - $acceptedFilesArray[number]["tmp_name"] +// - starts with upload (or upl on Windows, because on that platform only the first 3 letters are kept) +// - has the same filename extension as the real filename +// - ends with .txt +// The filename extension is needed by the PCL TAR library, which needs to determine if the archive is tar, tgz or gz. +// The additional .txt is to ensure that no temporary file would be executed on the web server, which could compromise it. +// +// For example: script.php is uploaded to the web server's temporary directory C:\temp\f9skpqri +// Then it is moved to net2ftp's temporary directory C:\web\net2ftp\temp\upload9oeic.php.txt +// And finally it is transferred to the FTP server as script.php in functions ftp_transferfiles() and ftp_unziptransferfiles() -- see below +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_output; + $max_filesize = $net2ftp_settings["max_filesize"]; + + $skipped = 0; // Index of the files which are too big / contain a banned keyword + $moved_ok = 0; // Index of the files that have been treated successfully + $moved_notok = 0; // Index of the files that have been treated unsuccessfully + + for ($i=1; $i<=sizeof($uploadedFilesArray); $i++) { + +// ------------------------------------------------------------------------- +// 1 -- Get the data from the filesArray (for each file, its location, name, size, ftpmode +// ------------------------------------------------------------------------- + $file_name = $uploadedFilesArray["$i"]["name"]; + $file_tmp_name = $uploadedFilesArray["$i"]["tmp_name"]; + $file_size = $uploadedFilesArray["$i"]["size"]; + + if (($file_name != "" && $file_tmp_name == "") || $file_size > $max_filesize) { +// The case ($file_name != "" && $file_tmp_name == "") occurs when the file is bigger than the directives set in php.ini +// In that case, only $uploadedFilesArray["$i"]["name"] is filled in. + $net2ftp_output["acceptFiles"][] = __("File %1\$s is too big. This file will not be uploaded.", $file_name); + $skipped = $skipped + 1; + @unlink($file_tmp_name); + continue; + } + elseif (checkAuthorizedName($file_name) == false) { + $net2ftp_output["acceptFiles"][] = __("File %1\$s is contains a banned keyword. This file will not be uploaded.", $file_name); + $skipped = $skipped + 1; + @unlink($file_tmp_name); + continue; + } + +// ------------------------------------------------------------------------- +// 3 -- upload and copy the file; if a file with the same name already exists, it is overwritten with the new file +// ------------------------------------------------------------------------- + $extension = get_filename_extension($file_name); + if (substr($file_name, -6) == "tar.gz") { $extension = "tar.gz"; } + + $tempfilename = tempnam2($net2ftp_globals["application_tempdir"], "upload__", "." . $extension . ".txt"); + if ($tempfilename == false) { + @unlink($tempfilename); + $errormessage = __("Could not generate a temporary file."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + $success2 = move_uploaded_file($file_tmp_name, $tempfilename); + if ($success2 == false) { + $net2ftp_output["acceptFiles"][] = __("File %1\$s could not be moved", $file_name); + @unlink($file_tmp_name); + @unlink($tempfilename); + $moved_notok = $moved_notok + 1; + continue; + } + +// ------------------------------------------------------------------------- +// 4 -- if everything went fine, put file in acceptedFilesArray +// ------------------------------------------------------------------------- + else { +// When uploading files, print some output +// When updating files, do not print anything + registerTempfile("register", $tempfilename); + if ($net2ftp_globals["state"] == "upload") { + $net2ftp_output["acceptFiles"][] = __("File %1\$s is OK", $file_name); + } + $moved_ok = $moved_ok + 1; + $acceptedFilesArray[$moved_ok]["name"] = $file_name; + $acceptedFilesArray[$moved_ok]["tmp_name"] = $tempfilename; + } + + } // End for + + if ($moved_notok > 0) { + $errormessage = __("Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + elseif ($moved_ok == 0 && $skipped == 0) { + $errormessage = __("You did not provide any file to upload."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + elseif ($moved_ok == 0 && $skipped > 0) { + return "all_uploaded_files_are_too_big"; + } + else { + return $acceptedFilesArray; + } + +} // End function acceptFiles + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_transferfiles($filesArray, $targetDir) { + +// -------------- +// This PHP function takes a file that was uploaded from a client computer via a browser to the web server, +// and puts it on another FTP server +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result, $net2ftp_output; + +// ------------------------------ +// Open connection +// ------------------------------ + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { + for ($i=1; $i<=sizeof($filesArray); $i++) { @unlink($filesArray[$i]["tmp_name"]); } + return false; + } + +// ------------------------------ +// For loop +// ------------------------------ + for ($i=1; $i<=sizeof($filesArray); $i++) { + +// Set status + setStatus($i, sizeof($filesArray), __("Transferring files to the FTP server")); + +// Determine which FTP mode should be used + $ftpmode = ftpAsciiBinary($filesArray[$i]["name"]); + + if ($ftpmode == FTP_ASCII) { $printftpmode = "FTP_ASCII"; } + elseif ($ftpmode == FTP_BINARY) { $printftpmode = "FTP_BINARY"; } + +// Put files + ftp_putfile($conn_id, "", $filesArray[$i]["tmp_name"], $targetDir, $filesArray[$i]["name"], $ftpmode, "move"); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + @unlink($filesArray[$i]["tmp_name"]); + $net2ftp_output["ftp_transferfiles"][] = __("File %1\$s could not be transferred to the FTP server", $filesArray[$i]["name"]); + continue; + } + $net2ftp_output["ftp_transferfiles"][] = __("File %1\$s has been transferred to the FTP server using FTP mode %2\$s", $filesArray[$i]["name"], $printftpmode); + + } // End for + +// ------------------------------ +// Close connection +// ------------------------------ + ftp_closeconnection($conn_id); + +} // End function ftp_transferfiles + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftp_unziptransferfiles($archivesArray) { + +// -------------- +// Extract the directories and files from the archive to a temporary directory on the web server, and +// then create the directories and put the files on the FTP server +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result, $net2ftp_output; + +// ------------------------------------------------------------------------- +// Open connection +// ------------------------------------------------------------------------- + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { + for ($archive_nr=1; $archive_nr<=sizeof($archivesArray); $archive_nr++) { @unlink($archivesArray[$archive_nr]["tmp_name"]); } + return false; + } + +// ------------------------------------------------------------------------- +// For each archive... +// ------------------------------------------------------------------------- + for ($archive_nr=1; $archive_nr<=sizeof($archivesArray); $archive_nr++) { + +// Set status + setStatus($archive_nr, sizeof($archivesArray), __("Decompressing archives and transferring files")); + +// ------------------------------------------------------------------------- +// Determine the type of archive depending on the filename extension +// ------------------------------------------------------------------------- + $archive_name = $archivesArray[$archive_nr]["name"]; + $archive_file = $archivesArray[$archive_nr]["tmp_name"]; + $archivename_without_dottext = substr($archivesArray[$archive_nr]["tmp_name"], 0, strlen($archive)-4); + $archive_type = get_filename_extension($archivename_without_dottext); + + $net2ftp_output["ftp_unziptransferfiles"][] = __("Processing archive nr %1\$s: %2\$s", $archive_nr, $archive_name); + $net2ftp_output["ftp_unziptransferfiles"][] = "
    "; + + if ($archive_type != "zip" && $archive_type != "tar" && $archive_type != "tgz" && $archive_type != "gz") { + $net2ftp_output["ftp_unziptransferfiles"][] = __("Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment.", $archive_name); + continue; + } + +// ------------------------------------------------------------------------- +// Extract directories and files +// ------------------------------------------------------------------------- + +// ------------------------------ +// Check list of files to see if there are any malicious filenames +// ------------------------------ + if ($archive_type == "zip") { + $zip = new PclZip($archive_file); + $list_to_check = $zip->listContent(); + } + elseif ($archive_type == "tar" || $archive_type == "tgz" || $archive_type == "gz") { + $list_to_check = PclTarList($archive_file); + } + + if ($list_to_check <= 0) { + $net2ftp_output["ftp_unziptransferfiles"][] = __("Unable to extract the files and directories from the archive"); + continue; + } + + for ($i=0; $iextract($p_path = $tempdir); + } + elseif ($archive_type == "tar" || $archive_type == "tgz" || $archive_type == "gz") { + $list = PclTarExtract($archive_file, $tempdir); + } + +// This code is not needed any more - see above: if ($list_to_check <= 0) + if ($list <= 0) { +// $net2ftp_output["ftp_unziptransferfiles"][] = __("Unable to extract the files and directories from the archive"); + continue; + } + +// ------------------------------ +// Create the directories and put the files on the FTP server +// ------------------------------ + + for ($i=0; $i%1\$s", $command); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // End function ftp_mysite + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function upDir($directory) { + +// -------------- +// This function takes a directory string and returns the parent directory string +// -------------- + + if ($directory == "" || $directory == "/" || $directory == "\\") { return "/"; } + + $parentdirectory = ""; + $directory = stripDirectory($directory); + $parts = explode("/", $directory); + + $parentdirectory = ""; + for ($i=0; $i 1 && (substr($part1, 1, 1) == ":" || substr($part1, 0, 2) == "\\\\")) { $system = "windows"; } + elseif ($part2_len > 1 && (substr($part2, 1, 1) == ":" || substr($part1, 0, 2) == "\\\\")) { $system = "windows"; } + else { $system = "unix"; } + +// Glue the 2 parts together + if ($part1_len > 0 && $part2_len > 0) { + if ($system == "windows") { return $part1 . "\\" . $part2; } + else { return "/" . $part1 . "/" . $part2; } + } + elseif (($part1_len == 0 || $part1 == "/" || $part1 == "\\") && ($part2_len > 0)) { + if ($system == "windows") { return $part2; } + else { return "/" . $part2; } + } + elseif (($part2_len == 0 || $part2 == "/" || $part2 == "\\") && ($part1_len > 0)) { + if ($system == "windows") { return $part1; } + else { return "/" . $part1; } + } + else { + return ""; + } + +} // end glueDirectories + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function get_filename_extension($filename) { + +// -------------- +// This function returns the extension of a filename: +// name.ext1.ext2.ext3 --> ext3 +// name --> name +// .name --> name +// .name.ext --> ext +// It also converts the result to lower case: +// name.ext1.EXT2 --> ext2 +// -------------- + + $lastdotposition = strrpos($filename,"."); + + if ($lastdotposition === 0) { $extension = substr($filename, 1); } + elseif ($lastdotposition == "") { $extension = $filename; } + else { $extension = substr($filename, $lastdotposition + 1); } + + return strtolower($extension); + +} // End get_filename_extension + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function get_filename_name($filename) { + +// -------------- +// This function returns the name part of a filename: +// name.ext1.ext2.ext3 --> name +// name --> name +// .name --> name +// .name.ext --> name.ext +// It also converts the result to lower case: +// NAME.ext --> name +// -------------- + + $firstdotposition = strpos($filename,"."); + + if ($firstdotposition === 0) { $name = substr($filename, 1); } + elseif ($firstdotposition == "") { $name = $filename; } + else { $name = substr($filename, 0, $firstdotposition); } + + return strtolower($name); + +} // End get_filename_name + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftpAsciiBinary($filename) { + +// -------------- +// Checks the first character of a file and its extension to see if it should be +// transferred in ASCII or Binary mode +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals; + +// ------------------------------------------------------------------------- +// If $net2ftp_globals["ftpmode"] == "binary" then return FTP_BINARY +// ------------------------------------------------------------------------- + if ($net2ftp_globals["ftpmode"] != "automatic") { return FTP_BINARY; } + +// ------------------------------------------------------------------------- +// If $net2ftp_globals["ftpmode"] == "automatic" then return return +// FTP_ASCII or FTP_BINARY +// ------------------------------------------------------------------------- + $firstcharacter = substr($filename, 0, 1); + + if ($firstcharacter == ".") { + $ftpmode = FTP_ASCII; + return $ftpmode; + } + +// ------------------------------------------------------------------------- +// If the first character is not a dot, check the extension +// ------------------------------------------------------------------------- + $last = get_filename_extension($filename); + + if ( + $last == "1st" || + $last == "asp" || + $last == "bas" || + $last == "bat" || + $last == "c" || + $last == "cfg" || + $last == "cfm" || + $last == "cgi" || + $last == "conf" || + $last == "cpp" || + $last == "css" || + $last == "csv" || + $last == "dhtml" || + $last == "diz" || + $last == "default" || + $last == "file" || + $last == "h" || + $last == "hpp" || + $last == "htaccess" || + $last == "htpasswd" || + $last == "htm" || + $last == "html" || + $last == "inc" || + $last == "ini" || + $last == "js" || + $last == "jsp" || + $last == "log" || + $last == "m3u" || + $last == "mak" || + $last == "msg" || + $last == "nfo" || + $last == "old" || + $last == "pas" || + $last == "patch" || + $last == "perl" || + $last == "php" || + $last == "php3" || + $last == "phps" || + $last == "phtml" || + $last == "pinerc" || + $last == "pl" || + + $last == "pm" || + $last == "qmail" || + $last == "readme" || + $last == "setup" || + $last == "seq" || + $last == "sh" || + $last == "sql" || + $last == "style" || + $last == "tcl" || + $last == "tex" || + $last == "threads" || + $last == "tmpl" || + $last == "tpl" || + $last == "txt" || + $last == "ubb" || + $last == "vbs" || + $last == "xml" || + strstr($last, "htm") + ) { $ftpmode = FTP_ASCII; } + else { $ftpmode = FTP_BINARY; } + + return $ftpmode; + +} // end ftpAsciiBinary + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function standardize_eol($string) { + +// -------------- +// Input: text with Windows (\r\n), Unix (\n), or weird (\r\r) end-of-line characters +// Output: text with Unix style end-of-line characters (\n) +// -------------- + + $patterns[0] = "/\\r\\r/"; // this is \r\r + $patterns[1] = "/\\r\\n/"; // this is \r\n + + $replacements[0] = "\r\n"; + $replacements[1] = "\n"; + + $string = preg_replace($patterns, $replacements, $string); + + return $string; + +} + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function explode_lines($string) { + +// -------------- +// Input: $string which may have Windows or Unix end-of-line characters +// Output: $lines array with the lines +// -------------- + +// $string = standardize_eol($string); + +// Add a \n in the beginning of the strings so that the first line of the string would +// be in the first element of the exploded array + $lines = explode("\n", "\n" . $string); + + return $lines; + +} // explode_lines + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function getFileType($filename) { + +// -------------- +// Checks the extension of a file to determine what should be done with it in the View and Edit functions +// Default: TEXT +// Exceptions (see list below): IMAGE, EXECUTABLE, OFFICE, ARCHIVE +// -------------- + + $last = get_filename_extension($filename); + + if ( + $last == "asp" || + $last == "bas" || + $last == "bat" || + $last == "c" || + $last == "cfg" || + $last == "cfm" || + $last == "cgi" || + $last == "conf" || + $last == "cpp" || + $last == "css" || + $last == "dhtml" || + $last == "diz" || + $last == "default" || + $last == "file" || + $last == "h" || + $last == "hpp" || + $last == "htaccess" || + $last == "htpasswd" || + $last == "htm" || + $last == "html" || + $last == "inc" || + $last == "ini" || + $last == "js" || + $last == "jsp" || + $last == "mak" || + $last == "msg" || + $last == "nfo" || + $last == "old" || + $last == "pas" || + $last == "patch" || + $last == "perl" || + $last == "php" || + $last == "php3" || + $last == "phps" || + $last == "phtml" || + $last == "pinerc" || + $last == "pl" || + $last == "pm" || + $last == "qmail" || + $last == "readme" || + $last == "setup" || + $last == "sh" || + $last == "shtml" || + $last == "sql" || + $last == "style" || + $last == "tcl" || + $last == "tex" || + $last == "threads" || + $last == "tmpl" || + $last == "tpl" || + $last == "txt" || + $last == "ubb" || + $last == "vbs" || + $last == "xml" || + $last == "conf" || + strstr($last, "htm")) { return "TEXT"; } + + elseif ( $last == "png" || + $last == "jpg" || + $last == "jpeg" || + $last == "gif" || + $last == "bmp" || + $last == "tif" || + $last == "tiff") { return "IMAGE"; } + + elseif ( $last == "exe" || + $last == "com") { return "EXECUTABLE"; } + + elseif ( $last == "doc" || + $last == "rtf" || + $last == "xls" || + $last == "ppt" || + $last == "mdb" || + $last == "vsd" || + $last == "mpp") { return "OFFICE"; } + + elseif ( $last == "zip" || + $last == "tar" || + $last == "gz" || + $last == "tgz" || + $last == "rar" || + $last == "arj" || + $last == "arc") { return "ARCHIVE"; } + + else { return "OTHER"; } + + +} // end getFileType + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function getSystemType() { + +// -------------- +// Gets the WEBSERVER system type on which PHP is running +// (Not the one for which is was built) +// -------------- + + $systemInfo = php_uname(); + + if (stristr($systemInfo, "Linux") != false) { + $system = "Linux"; + } + elseif (stristr($systemInfo, "BSD") != false) { + $system = "BSD"; + } + elseif (stristr($systemInfo, "Unix") != false) { + $system = "Unix"; + } + elseif (stristr($systemInfo, "Win") != false) { + $system = "Windows"; + } + + return $system; + +} // end getSystemType + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkEmailAddress($email) { + +// -------------- +// Returns true for valid email addresses, false for non-valid email addresses +// -------------- + + if (eregi( "^" . + "[a-z0-9]+([_\.-][a-z0-9]+)*" . //user + "@" . + "([a-z0-9]+([\.-][a-z0-9]+)*)+" . //domain + "\\.[a-z]{2,}" . //sld, tld + "$", $email, $regs)) { return true; } + else { return false; } + +} // end checkEmailAddress + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function checkFilename($filename) { + +// -------------- +// Returns true for valid filename +// -------------- + + if (preg_match("/^[a-zA-Z0-9_ \.-]*$/", $filename) == 0) { return false; } + else { return true; } + +} // end checkFilename + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function htmlEncode2($string) { + +// -------------- +// This function HTML-encodes a string with *htmlspecialchars* to print it on a page. +// Only some special characters are encoded, otherwise special characters (e.g. ) appear encoded (é). +// -------------- + + $isocode = __("iso-8859-1"); + if ($isocode == "MESSAGE NOT FOUND") { $isocode = "iso-8859-1"; } + $string = @htmlspecialchars($string, ENT_QUOTES, $isocode); + + return $string; + +} // end htmlEncode2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function htmlEncode3($string) { + +// -------------- +// This function HTML-encodes a string with *htmlentities* to generate the filename for downloading. +// All special characters are encoded. +// -------------- + + $string = @htmlentities($string, ENT_QUOTES, "UTF-8"); + + return $string; + +} // end htmlEncode3 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function urlEncode2($string) { + +// -------------- +// This function URL-encodes a string +// -------------- + +// $isocode = __("iso-8859-1"); +// if ($isocode == "MESSAGE NOT FOUND") { $isocode = "iso-8859-1"; } +// $string = @htmlentities($string, ENT_QUOTES, $isocode); +// $string = str_replace(" ", "%20", $string); + + $string = rawurlencode($string); + + return $string; + +} // end urlEncode2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function javascriptEncode2($string) { + +// -------------- +// Encode string characters which cause problems in Javascript +// OK

    +// OK

    +// OK

    +// OK

    +// -------------- + + $singlequote = "'"; // ' + $doublequote = "\""; // " + $backslash = "\\"; // \ + $doublequote_html = """; // " + +// Executing the 3 steps below in this order will convert: +// ' --> \' in step 2 +// " --> " in step 3 +// \' --> \\\' in step 1 and 2 +// \" --> \\\" in step 1 and 3 + $string = str_replace($backslash, "$backslash$backslash", $string); + $string = str_replace($singlequote, "$backslash$singlequote", $string); + $string = str_replace($doublequote, $doublequote_html, $string); + + return htmlEncode2($string); + +} // end javascriptEncode2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function registerTempfile($dowhat, $filename) { + +// -------------- +// This function registers and unregisters temporary files which are created and deleted +// If the script is halted, all the registered temporary files are deleted by the net2ftp_shutdown() function +// +// $dowhat can be either "register" or "unregister" +// $filename is the absolute filename (/web/net2ftp/temp/file.txt) +// -------------- + +// ------------------------------------------------------------------------- +// Global variables and settings +// ------------------------------------------------------------------------- + global $net2ftp_globals; + +// ------------------------------------------------------------------------- +// Add the current file to/from the $net2ftp_globals["tempfiles"] array +// Initialize $net2ftp_tempfiles if needed +// ------------------------------------------------------------------------- + if ($dowhat == "register") { + if (isset($net2ftp_globals["tempfiles"]) == false) { $net2ftp_globals["tempfiles"] = array(); } + @array_push($net2ftp_globals["tempfiles"], $filename); + } // end if register + +// ------------------------------------------------------------------------- +// Remove the current file to/from the $net2ftp_globals["tempfiles"] array +// ------------------------------------------------------------------------- + elseif ($dowhat == "unregister" && isset($net2ftp_globals["tempfiles"]) == true) { + $newindex = 0; + $tempfiles_new = array(); + for ($i=0; $i<=sizeof($net2ftp_globals["tempfiles"]); $i++) { + if (isset($net2ftp_globals["tempfiles"][$i]) == true && $net2ftp_globals["tempfiles"][$i] != $filename) { + $tempfiles_new[$newindex] = $net2ftp_globals["tempfiles"][$i]; + $newindex = $newindex + 1; + } + } // end for + unset($net2ftp_globals["tempfiles"]); + $net2ftp_globals["tempfiles"] = $tempfiles_new; + } // end if unregister + + return true; + +} // end registerTempfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_shutdown() { + +// -------------- +// This function is registered through register_shutdown_function, so that it would be +// executed when the script reaches the maximum execution time. +// +// The function displays a warning message, and deletes temporary files. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables and settings +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Delete the temporary files which were not deleted automatically +// ------------------------------------------------------------------------- + if (isset($net2ftp_globals["tempfiles"]) == true) { + for ($i=0; $i 0, because on some PHP configs it is -1 (more +// specifically: when PHP is run as CGI module). +// - Check the time taken versus the maximum execution time, because on Windows + Apache +// servers, the shutdown function is always called, even if the maximum execution time +// was not reached. + if (($max_execution_time > 0) && ($time_taken > $max_execution_time - 1)) { + if (isStatusbarActive() == true && function_exists("setStatus") == true) { + setStatus(10, 10, __("Script halted")); + } + + $text = ""; + $text .= "" . __("Your task was stopped") . "

    \n"; + $text .= __("The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped.", $max_execution_time) . "
    \n"; + $text .= __("This time limit guarantees the fair use of the web server for everyone.") . "

    \n"; + $text .= __("Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files.") . "

    \n"; + + if ($net2ftp_settings["net2ftpdotcom"] == "yes") { + $text .= __("If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."); + } + + if ($net2ftp_globals["state"] == "jupload") { echo $text; } + else { echo "
    $text
    \n\n"; } + } + +} // end shutdown + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function SendMail($From, $FromName, $To, $ToName, $Subject, $Text, $Html, $AttmFiles) { + +// -------------- +// This function taken from www.PHP.net. +// It was written by alex@bartl.net (29-Nov-2002 06:25) +// Alex was inspired by the function of kieran.huggins@rogers.com (06-Nov-2002 04:52) + +// Note: it has been changed slightly to fit into the net2ftp application. +// (Mainly the way error handling is done.) +// -------------- + +/* Alex's comments: +This might be some useful stuff to send out emails in either text +or html or multipart version, and attach one or more files or even +none to it. Inspired by Kieran's msg above, I thought it might be +useful to have a complete function for doing this, so it can be used +wherever it's needed. Anyway I am not too sure how this script will +behave under Windows. +{br} represent the HTML-tag for line break and should be replaced, +but I did not know how to not get the original tag parsed here. +function SendMail($From, $FromName, $To, $ToName, $Subject, $Text, $Html, $AttmFiles) +$From ... sender mail address like "my@address.com" +$FromName ... sender name like "My Name" +$To ... recipient mail address like "your@address.com" +$ToName ... recipients name like "Your Name" +$Subject ... subject of the mail like "This is my first testmail" +$Text ... text version of the mail +$Html ... html version of the mail +$AttmFiles ... array containing the filenames to attach like array("file1","file2") +*/ + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_result; + +// Initial tests +// $Html = $Html?$Html:preg_replace("/\n/","{br}",$Text) or die("neither text nor html part present."); +// $Text = $Text?$Text:"Sorry, but you need an html mailer to read this mail."; +// $From or die("sender address missing"); +// $To or die("recipient address missing"); + + if ((strlen($Html) < 1) && (strlen($Text) < 1)) { + $errormessage = __("You did not provide any text to send by email!"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + if (strlen($From) < 1) { + $errormessage = __("You did not supply a From address."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + if (strlen($To) < 1) { + $errormessage = __("You did not supply a To address."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + if (strlen($Html) < 1) { + $Html = preg_replace("/\n/","
    ",$Text); + } + +// Check if the To email address is valid + if (!eregi( "^" . + "[a-zA-Z0-9]+([_\.-][a-zA-Z0-9]+)*" . //user + "@" . + "([a-zA-Z0-9]+([\.-][a-zA-Z0-9]+)*)+" . //domain + "\\.[a-zA-Z]{2,}" . //sld, tld + "$", $To, $regs)) { + $errormessage = __("The email address you have entered (%1\$s) does not seem to be valid.
    Please enter an address in the format username@domain.com", $To); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Definition of some variables + $OB = "----=_OuterBoundary_000"; + $IB = "----=_InnerBoundery_001"; + +// Headers + $headers ="MIME-Version: 1.0\r\n"; + $headers.="From: ".$FromName." <".$From.">\n"; + $headers.="To: ".$ToName." <".$To.">\n"; + $headers.="Reply-To: ".$FromName." <".$From.">\n"; + $headers.="X-Priority: 1\n"; + $headers.="X-MSMail-Priority: High\n"; + $headers.="X-Mailer: My PHP Mailer\n"; + $headers.="Content-Type: multipart/mixed;\n\tboundary=\"".$OB."\"\n"; + +// Messages start with text/html alternatives in OB + $Msg ="This is a multi-part message in MIME format.\n"; + $Msg.="\n--".$OB."\n"; + $Msg.="Content-Type: multipart/alternative;\n\tboundary=\"".$IB."\"\n\n"; + +// Plaintext section + $Msg.="\n--".$IB."\n"; + $Msg.="Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n"; + $Msg.="Content-Transfer-Encoding: quoted-printable\n\n"; + +// Plaintext goes here + $Msg.=$Text."\n\n"; + +// Html section + $Msg.="\n--".$IB."\n"; + $Msg.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\n"; + $Msg.="Content-Transfer-Encoding: base64\n\n"; + +// Html goes here + $Msg.=chunk_split(base64_encode($Html))."\n\n"; + +// End of IB + $Msg.="\n--".$IB."--\n"; + +// Attachments + if($AttmFiles){ + foreach($AttmFiles as $AttmFile){ +// $patharray = explode ("/", $AttmFile); +// $FileName=$patharray[sizeof($patharray)-1]; + $FileName = "RequestedFile.zip"; + + $Msg.= "\n--".$OB."\n"; + $Msg.="Content-Type: application/octet-stream;\n\tname=\"".$FileName."\"\n"; + $Msg.="Content-Transfer-Encoding: base64\n"; + $Msg.="Content-Disposition: attachment;\n\tfilename=\"".$FileName."\"\n\n"; + +// File goes here + $FileContent = local_readfile($AttmFile); + if ($net2ftp_result["success"] == false) { return false; } + + $FileContent = chunk_split(base64_encode($FileContent)); + $Msg.=$FileContent; + $Msg.="\n\n"; + } // end for + } // end if + +// Message ends + $Msg.="\n--".$OB."--\n"; + +// Send mail + $success2 = mail($To, $Subject, $Msg, $headers); + if ($success2 == false) { + $errormessage = __("Due to technical problems the email to %1\$s could not be sent.", $To); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Logging + //syslog(LOG_INFO,"Mail: Message sent to $ToName <$To>"); + +} // end function SendMail + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printDirFileProperties($number, $entry, $checkbox_hidden, $onclick) { + +// -------------- +// Prints a checkbox and some hidden fields +// $onclick should be like "onclick=\"do_something_javascript();\"" +// -------------- + +// Replace ' by ' to avoid errors when using this variable in an HTML value tag +// $dirfilename_html = htmlspecialchars($dirfilename, ENT_QUOTES); + +// Print checkbox or hidden field + if (isset($entry["selectable"]) && $entry["selectable"] == "ok" && $checkbox_hidden == "checkbox") { + echo "\n"; + } + else { + echo "\n"; + } + +// Print hidden fields + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + +} // end printDirFileProperties + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function getSelectedEntries($list) { + +// -------------- +// Input = array where dirfilename is set if the entry was selected, not set if not selected: +// [1] => Array ( [dirfilename] => dir1 [dirorfile] => d [size] => 0 [selectable] => ok [permissions] => ---rw-rw- ) <-- selected +// [2] => Array ( [dirfilename] => dir2 [dirorfile] => d [size] => 0 [selectable] => ok [permissions] => ---rw-rw- ) <-- selected +// [3] => Array ( [dirfilename] => dir3 [dirorfile] => d [size] => 0 [selectable] => too_big [permissions] => ---rw-rw- ) <-- selected +// [4] => Array ( [dirorfile] => d [size] => 0 [selectable] => ok [permissions] => ---rw-rw- ) <-- not selected +// +// Output = array with only the selected entries, which are not TOO BIG or which do not contain a forbidden keyword +// [1] => Array ( [dirfilename] => dir1 [dirorfile] => d [size] => 0 [permissions] => ---rw-rw- ) +// [2] => Array ( [dirfilename] => dir2 [dirorfile] => d [size] => 0 [permissions] => ---rw-rw- ) +// -------------- + +// Global variables + global $net2ftp_globals; + + $newlist = array(); + $newlist["directories"] = array(); + $newlist["files"] = array(); + $newlist["symlinks"] = array(); + $newlist["unrecognized"] = array(); + + $directory_index = 1; + $file_index = 1; + $symlink_index = 1; + $unrecognized_index = 1; + $all_index = 1; + + for ($i=1; $i<=sizeof($list); $i=$i+1) { + if (isset($list[$i]["dirorfile"]) == true && isset($list[$i]["dirfilename"]) == true) { + + if (isset($list[$i]["selectable"]) == false || $list[$i]["selectable"] != "ok" && + ($net2ftp_globals["state"] == "downloadfile" || $net2ftp_globals["state"] == "downloadzip" || + $net2ftp_globals["state"] == "edit" || $net2ftp_globals["state"] == "findstring" || + $net2ftp_globals["state"] == "unzip" || $net2ftp_globals["state"] == "view" || + $net2ftp_globals["state"] == "zip" || + $net2ftp_globals["state2"] == "copy" || $net2ftp_globals["state2"] == "move")) { + continue; + } + + $list[$i]["dirfilename"] = validateGenericInput($list[$i]["dirfilename"]); + $list[$i]["dirfilename_html"] = htmlEncode2($list[$i]["dirfilename"]); + $list[$i]["dirfilename_js"] = javascriptEncode2($list[$i]["dirfilename"]); + if ($list[$i]["dirorfile"] == "d") { + $newlist["directories"][$directory_index] = $list[$i]; + $directory_index++; + $newlist["all"][$all_index] = $list[$i]; + $all_index++; + } + elseif ($list[$i]["dirorfile"] == "-") { + $newlist["files"][$file_index] = $list[$i]; + $file_index++; + $newlist["all"][$all_index] = $list[$i]; + $all_index++; + } + elseif ($list[$i]["dirorfile"] == "l") { + $newlist["symlinks"][$symlink_index] = $list[$i]; + $symlink_index++; + $newlist["all"][$all_index] = $list[$i]; + $all_index++; + } + elseif ($list[$i]["dirorfile"] == "u") { + $newlist["unrecognized"][$unrecognized_index] = $list[$i]; + $unrecognized_index++; + $newlist["all"][$all_index] = $list[$i]; + $all_index++; + } + } + } // end for + +// Store the statistics + $newlist["stats"]["directories"]["total_number"] = $directory_index - 1; + $newlist["stats"]["files"]["total_number"] = $file_index - 1; + $newlist["stats"]["symlinks"]["total_number"] = $symlink_index - 1; + $newlist["stats"]["unrecognized"]["total_number"] = $unrecognized_index - 1; + + return $newlist; + +} // end getSelectedEntries + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function formatFilesize($filesize) { + +// -------------- +// From php.net, code snippet submitted by sponger (10-Jun-2002 05:28) +// Edited for use in net2ftp. +// +// This may come in handy for someone. +// Returns the size of the passed file in the appropriate measurement format. +// -------------- + +// Setup some common file size measurements. + $kb = 1024; // Kilobyte + $mb = 1048576; // Megabyte + $gb = 1073741824; // Gigabyte + $tb = 1099511627776;// Terabyte + +// Check if the last character is a letter +// Example: 8M = 8 Megabyte + $lastletter1 = strtolower(substr($filesize, -1)); + $lastletter2 = strtolower(substr($filesize, -2)); + if ($lastletter1 == "k") { $filesize = substr($filesize, 0, strlen($filesize)-1) * $kb; } + elseif ($lastletter1 == "m") { $filesize = substr($filesize, 0, strlen($filesize)-1) * $mb; } + elseif ($lastletter1 == "g") { $filesize = substr($filesize, 0, strlen($filesize)-1) * $gb; } + elseif ($lastletter1 == "t") { $filesize = substr($filesize, 0, strlen($filesize)-1) * $tb; } + elseif ($lastletter2 == "kb") { $filesize = substr($filesize, 0, strlen($filesize)-2) * $kb; } + elseif ($lastletter2 == "mb") { $filesize = substr($filesize, 0, strlen($filesize)-2) * $mb; } + elseif ($lastletter2 == "gb") { $filesize = substr($filesize, 0, strlen($filesize)-2) * $gb; } + elseif ($lastletter2 == "tb") { $filesize = substr($filesize, 0, strlen($filesize)-2) * $tb; } + +// If it's less than a kb we just return the size, otherwise we keep going until +// the size is in the appropriate measurement range. + if($filesize == "") { + return "0 B"; + } + elseif($filesize < $kb) { + return $filesize . " B"; + } + elseif($filesize < $mb) { + return round($filesize/$kb,2) . " kB"; + } + elseif($filesize < $gb) { + return round($filesize/$mb,2) . " MB"; + } + elseif($filesize < $tb) { + return round($filesize/$gb,2) . " GB"; + } + else { + return round($filesize/$tb,2) . " TB"; + } + +} // end formatFilesize + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function tempnam2($dir, $prefix, $postfix) { + +// -------------- +// Contributed by anonymous on http://www.php.net on 23-Jul-2003 04:56 +// The tempnam() function will not let you specify a postfix to the filename created. +// Here is a function that will create a new filename with pre and post fix'es. +// It returns false if it can't create in the dir specified. (The function tempnam, on the contrary, creates the file in the systems temp dir.) +// -------------- + + if ($dir[strlen($dir) - 1] == '/') { $trailing_slash = ""; } + else { $trailing_slash = "/"; } + +// Check if the $dir is a directory + if (!is_dir($dir) || filetype($dir) != "dir") { return false; } + +// Check if the directory is writeable + if (!is_writable($dir)){ return false; } + +// Create the temporary filename + do { + $seed = substr(md5(microtime()), 0, 8); + $filename = $dir . $trailing_slash . $prefix . $seed . $postfix; + clearstatcache(); + $file_exists = file_exists($filename); + } while ($file_exists == true); + + $fp = fopen($filename, "wb"); + fclose($fp); + return $filename; + +} // end tempnam2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function tempdir2($dir, $prefix, $postfix) { + +// -------------- +// Same as tempnam2 but creates a directory instead of a file +// -------------- + +// Check if the parent directory $dir is a directory + if (!is_dir($dir) || filetype($dir) != "dir") { + $errormessage = __("Unable to create a temporary directory because (unvalid parent directory)"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Check if the parent directory is writeable + if (!is_writable($dir)){ + $errormessage = __("Unable to create a temporary directory because (parent directory is not writeable)"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Check if the parent directory name ends with a / + if ($dir[strlen($dir) - 1] == '/') { $trailing_slash = ""; } + else { $trailing_slash = "/"; } + +// Create the temporary directory + $result = false; + $i = 0; + do { + $seed = substr(md5(microtime()), 0, 8); + $filename = $dir . $trailing_slash . $prefix . $seed . $postfix; + $result = mkdir($filename); + $i = $i + 1; + } while ($result == false && $i < 10); + +// Return result + if ($result == true) { return $filename; } + else { + $errormessage = __("Unable to create a temporary directory (too many tries)"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // end tempdir2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function local_readfile($file) { + +// -------------- +// Open the local file $file and return its content as a string +// -------------- + + global $net2ftp_globals; + +// From the PHP manual: +// Note: The mode may contain the letter 'b'. +// This is useful only on systems which differentiate between binary and text +// files (i.e. Windows. It's useless on Unix). If not needed, this will be +// ignored. You are encouraged to include the 'b' flag in order to make your scripts +// more portable. +// Thanks to Malte for bringing this to my attention ! + + $handle = fopen($file, "rb"); // Open the file for reading only + if ($handle == false) { + $errormessage = __("Unable to open the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + clearstatcache(); // for filesize + + $filesize = filesize($file); + if ($filesize == 0) { return ""; } + + $string = fread($handle, $filesize); + if ($string == false && filesize($file)>0) { + $errormessage = __("Unable to read the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + $success3 = fclose($handle); + if ($success3 == false) { + $errormessage = __("Unable to close the handle of the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + return $string; + +} // end local_readfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function local_writefile($file, $string) { + +// -------------- +// Open the local file $file and write the $string to it +// -------------- + + global $net2ftp_globals; + + $handle = fopen($file, "wb"); + if ($handle == false) { + $errormessage = __("Unable to open the temporary file. Check the permissions of the %1\$s directory.", $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + $success1 = fwrite($handle, $string); + if ($success1 == false && strlen($string)>0) { + $errormessage = __("Unable to write the string to the temporary file %1\$s.
    Check the permissions of the %2\$s directory.", $file, $net2ftp_globals["application_tempdir"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + $success2 = fclose($handle); + if ($success2 == false) { + $errormessage = __("Unable to close the handle of the temporary file"); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +} // end local_writefile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function local_getlist($localdirectory) { + +// -------------- +// This function gets the list of subdirectories and files within a directory, +// and returns it in the same format as ftp_getlist. +// Big differences with ftp_getlist is that local_getlist: +// - does not return a warning message; +// - cannot change the $localdirectory. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_result; + +// ------------------------------------------------------------------------- +// Initialization +// ------------------------------------------------------------------------- + $handle = opendir($localdirectory); + $list = array(); + $list_directories = array(); + $list_files = array(); + $i = 0; + $j = 1; + +// ------------------------------------------------------------------------- +// While loop +// ------------------------------------------------------------------------- + while (false !== ($dirfilename = readdir($handle))) { + if ($dirfilename != "." && $dirfilename != "..") { + if (is_dir($dirfilename) == true) { + $listline["scanrule"] = "local"; + $listline["dirorfile"] = "d"; + $listline["dirfilename"] = $dirfilename; + $listline["size"] = 0; + $listline["selectable"] = "ok"; + array_push($list_directories, $listline); + } + else { + $listline["scanrule"] = "local"; + $listline["dirorfile"] = "-"; + $listline["dirfilename"] = $dirfilename; + $listline["size"] = filesize($localdirectory . "/" . $dirfilename); + + // Check if the filesize is bigger than the maximum authorized filesize + if (isset($listline["size"]) && is_numeric($listline["size"]) && $listline["size"] > $net2ftp_settings["max_filesize"]) { + $listline["selectable"] = "too_big"; + } + else { + $listline["selectable"] = "ok"; + } + + array_push($list_files, $listline); + } + } + } // end while + + for ($i=0; $i \ No newline at end of file diff --git a/ehcp/net2ftp/includes/html.inc.php b/ehcp/net2ftp/includes/html.inc.php new file mode 100644 index 0000000..021009d --- /dev/null +++ b/ehcp/net2ftp/includes/html.inc.php @@ -0,0 +1,205 @@ + diff --git a/ehcp/net2ftp/includes/list_samples.inc.php b/ehcp/net2ftp/includes/list_samples.inc.php new file mode 100644 index 0000000..e9b9be8 --- /dev/null +++ b/ehcp/net2ftp/includes/list_samples.inc.php @@ -0,0 +1,95 @@ + usr/bin"; + +$list_samples["Some listings with uncommon date/time format"][1] = "-rw-r--r-- 1 root other 531 09-26 2000 README2"; +$list_samples["Some listings with uncommon date/time format"][2] = "-rw-r--r-- 1 root other 531 09-26 13:45 README3"; +$list_samples["Some listings with uncommon date/time format"][3] = "-rw-r--r-- 1 root other 531 2005-06-07 21:22 README4"; + +$list_samples["Also produced by Microsoft's FTP servers for Windows"][1] = "---------- 1 owner group 1803128 Jul 10 10:18 ls-lR.Z"; +$list_samples["Also produced by Microsoft's FTP servers for Windows"][2] = "d--------- 1 owner group 0 May 9 19:45 Softlib"; + +$list_samples["Also WFTPD for MSDOS"][1] = "-rwxrwxrwx 1 noone nogroup 322 Aug 19 1996 message.ftp"; + +$list_samples["Also NetWare"][1] = "d [R----F--] supervisor 512 Jan 16 18:53 login"; +$list_samples["Also NetWare"][2] = "- [R----F--] rhesus 214059 Oct 20 15:27 cx.exe"; + +$list_samples["Also NetPresenz for the Mac"][1] = "-------r-- 326 1391972 1392298 Nov 22 1995 MegaPhone.sit"; +$list_samples["Also NetPresenz for the Mac"][2] = "drwxrwxr-x folder 2 May 10 1996 network"; + +$list_samples["MSDOS format"][1] = "04-27-00 09:09PM licensed"; +$list_samples["MSDOS format"][2] = "07-18-00 10:16AM pub"; +$list_samples["MSDOS format"][3] = "04-14-00 03:47PM 589 readme.htm"; + +$list_samples["Some other formats some windows servers send"][1] = "-rw-r--r-- 1 root 531 Jan 29 03:26 README5"; +$list_samples["Some other formats some windows servers send"][2] = "-rw-r--r-- 1 group domain user 531 Jan 29 03:26 README6"; + +$list_samples["EPLF directory listings"][1] = "+i8388621.48594,m825718503,r,s280,\teplf test 1.file"; +$list_samples["EPLF directory listings"][2] = "+i8388621.50690,m824255907,/,\teplf test 2.dir"; +$list_samples["EPLF directory listings"][3] = "+i8388621.48598,m824253270,r,s612,\teplf test 3.file"; + +$list_samples["MSDOS type listing used by IIS"][1] = "04-27-00 12:09PM DOS dir 1"; +$list_samples["MSDOS type listing used by IIS"][2] = "04-14-00 03:47PM 589 DOS file 1"; + +$list_samples["Another type of MSDOS style listings"][1] = "2002-09-02 18:48 DOS dir 2"; +$list_samples["Another type of MSDOS style listings"][2] = "2002-09-02 19:06 9,730 DOS file 2"; + +$list_samples["Numerical Unix style format"][1] = "0100644 500 101 12345 123456789 filename"; + +$list_samples["This one is used by SSH-2.0-VShell_2_1_2_143, this is the old VShell format"][1] = "206876 Apr 04, 2000 21:06 VShell (old)"; +$list_samples["This one is used by SSH-2.0-VShell_2_1_2_143, this is the old VShell format"][2] = "0 Dec 12, 2002 02:13 VShell (old) Dir/"; + +$list_samples["This type of directory listings is sent by some newer versions of VShell both year and time in one line is uncommon."][1] = "-rwxr-xr-x 1 user group 9 Oct 08, 2002 09:47 VShell (new)"; + +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][1] = "36611 A 04-23-103 10:57 OS2 test1.file"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][2] = " 1123 A 07-14-99 12:37 OS2 test2.file"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][3] = " 0 DIR 02-11-103 16:15 OS2 test1.dir"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][4] = " 1123 DIR A 10-05-100 23:38 OS2 test2.dir"; + +$list_samples["Some servers send localized date formats, here the German one"][1] = "dr-xr-xr-x 2 root other 2235 26. Juli, 20:10 datetest1 (ger)"; +$list_samples["Some servers send localized date formats, here the German one"][2] = "-r-xr-xr-x 2 root other 2235 2. Okt. 2003 datetest2 (ger)"; +$list_samples["Some servers send localized date formats, here the German one"][3] = "-r-xr-xr-x 2 root other 2235 1999/10/12 17:12 datetest3"; +$list_samples["Some servers send localized date formats, here the German one"][4] = "-r-xr-xr-x 2 root other 2235 24-04-2003 17:12 datetest4"; + +$list_samples["Here a Japanese one"][1] = "-rw-r--r-- 1 root sys 8473 4\x8c\x8e 18\x93\xfa 2003\x94\x4e datatest1 (jap)"; + +$list_samples["VMS style listings"][1] = "vms_dir_1.DIR;1 1 19-NOV-2001 21:41 [root,root] (RWE,RWE,RE,RE)"; +$list_samples["VMS style listings"][2] = "vms_file_3;1 155 2-JUL-2003 10:30:13.64"; + +$list_samples["VMS style listings without time"][1] = "vms_file_4;1 2/8 15-JAN-2000 [IV2_XXX] (RWED,RWED,RE,)"; +$list_samples["VMS style listings without time"][2] = "vms_file_5;1 6/8 15-JUI-2002 PRONAS (RWED,RWED,RE,)"; + +$list_samples["VMS multiline"][1] = "VMS_file_1;1\r\n170774/170775 24-APR-2003 08:16:15 [FTP_CLIENT,SCOT] (RWED,RWED,RE,)"; +$list_samples["VMS multiline"][2] = "VMS_file_2;1\r\n10 2-JUL-2003 10:30:08.59 [FTP_CLIENT,SCOT] (RWED,RWED,RE,)"; + +$list_samples["IBM AS/400 style listing"][1] = "QSYS 77824 02/23/00 15:09:55 *DIR IBM AS/400 Dir1/"; +$list_samples["IBM AS/400 style listing"][2] = "QSYS 77824 23/02/00 15:09:55 *FILE IBM AS/400 File1 strangedate"; + +$list_samples["aligned directory listing with too long size"][1] = "-r-xr-xr-x longowner longgroup123456 Feb 12 17:20 long size test1"; + +$list_samples["short directory listing with month name"][1] = "-r-xr-xr-x 2 owner group 4512 01-jun-99 shortdate with monthname"; + +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][1] = "-C--E-----FTP B BCC3I1 7670 1294495 Jan 13 07:42 ConEnt file"; +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][2] = "-C--E-----FTS B BCC3I1 7670 1294495 Jan 13 07:42 ConEnt file2"; +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][3] = "-AR--M----TCP B ceunix 17570 2313708 Mar 29 08:56 ALL_SHORT1.zip"; + +$list_samples["Nortel wfFtp router"][1] = "nortel.wfFtp 1014196 06/03/04 Thur. 10:20:03"; + +$list_samples["VxWorks based server used in Nortel routers"][1] = "2048 Feb-28-1998 05:23:30 nortel.VwWorks dir "; + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/logging.inc.php b/ehcp/net2ftp/includes/logging.inc.php new file mode 100644 index 0000000..616d279 --- /dev/null +++ b/ehcp/net2ftp/includes/logging.inc.php @@ -0,0 +1,734 @@ + 0) { + $debug_backtrace .= addslashes("function " . $net2ftp_result_original["debug_backtrace"][$i]["function"] . " (" . $net2ftp_result_original["debug_backtrace"][$i]["file"] . " on line " . $net2ftp_result_original["debug_backtrace"][$i]["line"] . ")\n"); + for ($j=0; $j sqlquery1)
    $sqlquery1"); + $nrofrows1 = mysql_num_rows($result1); + + if ($nrofrows1 == 0) { + $logStatus = 1; + } + elseif ($nrofrows1 == 1) { + $resultRow1 = mysql_fetch_row($result1); + $logStatus = $resultRow1[0]; + } + else { + setErrorVars(false, __("Table net2ftp_log_status contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Return $logStatus + return $logStatus; + +} // End getLogStatus + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function putLogStatus($logStatus) { + +// -------------- +// This function writes the log rotation status to the database. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; + +// ------------------------------------------------------------------------- +// Initial checks +// ------------------------------------------------------------------------- + +// Verify if a database is used. If not: don't continue. + if ($net2ftp_settings["use_database"] != "yes") { return true; } + +// ------------------------------------------------------------------------- +// Determine current month and last month +// ------------------------------------------------------------------------- + $currentmonth = date("Ym"); // e.g. 201207 + $lastmonth = date("Ym", mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); + $datetime = mytime(); + +// ------------------------------------------------------------------------- +// Connect to the database +// ------------------------------------------------------------------------- + $mydb = connect2db(); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------------------------------------------------------- +// Put log rotation status +// ------------------------------------------------------------------------- + $sqlquery1 = "SELECT status, changelog FROM net2ftp_log_status WHERE month = '$currentmonth';"; + $result1 = mysql_query("$sqlquery1"); + $nrofrows1 = mysql_num_rows($result1); + + if ($nrofrows1 == 1) { + $resultRow1 = mysql_fetch_row($result1); + $logStatus_old = $resultRow1[0]; + $changelog_old = $resultRow1[1]; + $changelog_new = $changelog_old . "From $logStatus_old to $logStatus on $datetime. "; + $sqlquery2 = "UPDATE net2ftp_log_status SET status = '" . $logStatus . "', changelog = '" . $changelog_new . "' WHERE month = '$currentmonth';"; + $result2 = mysql_query("$sqlquery2"); + $nrofrows2 = mysql_affected_rows($mydb); + } +// Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same, +// the $nrofrows2 is set to 0. + elseif ($nrofrows1 == 0) { + $changelog_new = "Set to $logStatus on $datetime. "; + $sqlquery3 = "INSERT INTO net2ftp_log_status VALUES('$currentmonth', '" . $logStatus . "', '" . $changelog_new . "');"; + $result3 = mysql_query("$sqlquery3"); + $nrofrows3 = mysql_affected_rows($mydb); + if ($nrofrows3 != 1) { + setErrorVars(false, __("Table net2ftp_log_status could not be updated."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + else { + setErrorVars(false, __("Table net2ftp_log_status contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// ------------------------------------------------------------------------- +// Return true +// ------------------------------------------------------------------------- + return true; + +} // End putLogStatus + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function emptyLogs($datefrom, $dateto) { + +// -------------- +// This function deletes the log records for the dates between $datefrom +// and $dateto. +// The global variable $net2ftp_output["emptyLogs"] is filled with result messages. +// The function returns true on success, false on failure. +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_result, $net2ftp_output; + + $toreturn = true; + +// ------------------------------------------------------------------------- +// Connect to the database +// ------------------------------------------------------------------------- + $mydb = connect2db(); + if ($net2ftp_result["success"] == false) { return false; } + + $tables[1] = "net2ftp_log_access"; + $tables[2] = "net2ftp_log_error"; + $tables[3] = "net2ftp_log_consumption_ftpserver"; + $tables[4] = "net2ftp_log_consumption_ipaddress"; + +// ------------------------------------------------------------------------- +// Execute the queries +// ------------------------------------------------------------------------- + for ($i=1; $i<=sizeof($tables); $i++) { + $sqlquery_empty = "DELETE FROM $tables[$i] WHERE date BETWEEN '$datefrom' AND '$dateto';"; + $result_empty[$i] = mysql_query("$sqlquery_empty"); + + $sqlquery_optimize = "OPTIMIZE TABLE `" . $tables[$i] . "`;"; + $result_optimize[$i] = mysql_query("$sqlquery_optimize"); + + if ($result_empty[$i] == true) { + $net2ftp_output["emptyLogs"][] = __("The table %1\$s was emptied successfully.", $tables[$i]); + } + else { + $toreturn = false; + $net2ftp_output["emptyLogs"][] = __("The table %1\$s could not be emptied.", $tables[$i]); + } + if ($result_optimize[$i] == true) { + $net2ftp_output["emptyLogs"][] = __("The table %1\$s was optimized successfully.", $tables[$i]); + } + else { + $toreturn = false; + $net2ftp_output["emptyLogs"][] = __("The table %1\$s could not be optimized.", $tables[$i]); + } + + } // end for + + return $toreturn; + +} // end emptyLogs() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function rotateLogs() { + +// -------------- +// Rotate the tables +// net2ftp_log_access = active table +// net2ftp_log_access_YYYYMM = archive table with information of month MM and year YYYY +// net2ftp_log_access_template = template table (empty table) +// +// To avoid that the log rotation actions would be executed multiple times at +// the end of the period, a "log rotation status" is used: +// 0 = no rotation needed +// 1 = step 1 not yet started (renaming active tables to archived tables) +// 2 = step 1 in progress +// 3 = step 2 not yet started (copying template tables to the active tables) +// 4 = step 2 in progress +// 5 = step 3 not yet started (dropping oldest archive tables) +// 6 = step 3 in progress +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_settings, $net2ftp_result, $net2ftp_output; + + $toreturn = true; + +// ------------------------------------------------------------------------- +// Verify if a database is used. If not: don't continue. +// ------------------------------------------------------------------------- + if ($net2ftp_settings["use_database"] != "yes") { return true; } + +// ------------------------------------------------------------------------- +// Check if the setting is within the allowed range; if not, set it to 12 months +// ------------------------------------------------------------------------- + if (!($net2ftp_settings["log_length_months"] > 1 && $net2ftp_settings["log_length_months"] < 99)) { + $net2ftp_settings["log_length_months"] = 12; + } + +// ------------------------------------------------------------------------- +// Current month, next month, previous month +// ------------------------------------------------------------------------- + $currentmonth = date("Ym"); // e.g. 201207 + $lastmonth = date("Ym", mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); + $nextmonth = date("Ym", mktime(0, 0, 0, date("m")+1, date("d"), date("Y"))); + $dropmonth = date("Ym", mktime(0, 0, 0, date("m")-$net2ftp_settings["log_length_months"]-1, date("d"), date("Y"))); + +// ------------------------------------------------------------------------- +// Connect to the database +// ------------------------------------------------------------------------- + $mydb = connect2db(); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------------------------------------------------------- +// Get the log rotation status +// ------------------------------------------------------------------------- + $logStatus = getLogStatus(); + if ($net2ftp_result["success"] == false) { return false; } + +// No log rotation needed + if ($logStatus === 0) { return true; } + +// ------------------------------------------------------------------------- +// Table names and SQL queries to create the tables +// ------------------------------------------------------------------------- + $tables[1]["name"] = "net2ftp_log_access"; + $tables[2]["name"] = "net2ftp_log_error"; + $tables[3]["name"] = "net2ftp_log_consumption_ftpserver"; + $tables[4]["name"] = "net2ftp_log_consumption_ipaddress"; + +// ------------------------------------------------------------------------- +// step 1 of rotation: rename active tables to archived tables +// ------------------------------------------------------------------------- + if ($logStatus == 1) { + +// Set the log status to indicate this step is in progress + putLogStatus(2); + if ($net2ftp_result["success"] == false) { return false; } + +// Execute the step + for ($i=1; $i<=sizeof($tables); $i++) { + $table = $tables[$i]["name"]; // Example: net2ftp_log_access + $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 + $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 + + $sqlquery_rename = "RENAME TABLE $table TO $table_archive"; + $result_rename[$i] = mysql_query("$sqlquery_rename"); + + if ($result_rename[$i] == true) { + $net2ftp_output["rotateLogs"][] = __("The log tables were renamed successfully."); + } + else { + $toreturn = false; + $net2ftp_output["rotateLogs"][] = __("The log tables could not be renamed."); + } + } // end for + +// Set the log status to indicate this step is in done and the next can start + putLogStatus(3); + if ($net2ftp_result["success"] == false) { return false; } + } + +// ------------------------------------------------------------------------- +// step 2 of rotation: copy template tables to the active +// ------------------------------------------------------------------------- + elseif ($logStatus == 3) { + +// Set the log status to indicate this step is in progress + putLogStatus(4); + if ($net2ftp_result["success"] == false) { return false; } + +// Execute the step + for ($i=1; $i<=sizeof($tables); $i++) { + $table = $tables[$i]["name"]; // Example: net2ftp_log_access + $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 + $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 + + $sqlquery_copy = "CREATE TABLE $table LIKE $table_archive"; + $result_copy[$i] = mysql_query("$sqlquery_copy"); + + if ($result_copy[$i] == true) { + $net2ftp_output["rotateLogs"][] = __("The log tables were copied successfully."); + } + else { + $toreturn = false; + $net2ftp_output["rotateLogs"][] = __("The log tables could not be copied."); + } + } // end for + +// Set the log status to indicate this step is in done and the next can start + putLogStatus(5); + if ($net2ftp_result["success"] == false) { return false; } + } + +// ------------------------------------------------------------------------- +// step 3 of rotation: drop oldest archive tables +// ------------------------------------------------------------------------- + elseif ($logStatus == 5) { + +// Set the log status to indicate this step is in progress + putLogStatus(6); + if ($net2ftp_result["success"] == false) { return false; } + +// Execute the step + for ($i=1; $i<=sizeof($tables); $i++) { + $table = $tables[$i]["name"]; // Example: net2ftp_log_access + $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 + $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 + + $sqlquery_drop = "DROP TABLE IF EXISTS $table_archive_drop;"; + $result_drop[$i] = mysql_query("$sqlquery_drop"); + + if ($result_drop[$i] == true) { + $net2ftp_output["rotateLogs"][] = __("The oldest log table was dropped successfully."); + } + else { + $toreturn = false; + $net2ftp_output["rotateLogs"][] = __("The oldest log table could not be dropped."); + } + } // end for + +// Set the log status to indicate this step is in done and the rotation is over + putLogStatus(0); + if ($net2ftp_result["success"] == false) { return false; } + } + + return $toreturn; + +} // end rotateLogs() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/main.inc.php b/ehcp/net2ftp/includes/main.inc.php new file mode 100644 index 0000000..bcd0e49 --- /dev/null +++ b/ehcp/net2ftp/includes/main.inc.php @@ -0,0 +1,509 @@ + Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + + if ($action == "sendHttpHeaders") { + +// 1. Libraries which are always needed + require_once($net2ftp_globals["application_includesdir"] . "/authorizations.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/consumption.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/database.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/errorhandling.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/filesystem.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/html.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/StonePhpSafeCrypt.php"); + require_once($net2ftp_globals["application_includesdir"] . "/logging.inc.php"); + require_once($net2ftp_globals["application_languagesdir"] . "/languages.inc.php"); + require_once($net2ftp_globals["application_skinsdir"] . "/skins.inc.php"); + +// 1. Define functions which are used, but which did not exist before PHP version 4.3.0 + if (version_compare(phpversion(), "4.3.0", "<")) { + require_once($net2ftp_globals["application_includesdir"] . "/before430.inc.php"); + } + +// 2. Register global variables (POST, GET, GLOBAL, ...) + require_once($net2ftp_globals["application_includesdir"] . "/registerglobals.inc.php"); + +// 3. Function libraries which are needed depending on certain variables + if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "unzip") { + require_once($net2ftp_globals["application_includesdir"] . "/pclerror.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pcltar.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pcltrace.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pclzip.lib.php"); + } + if ($net2ftp_globals["state"] == "advanced_ftpserver" || $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || $net2ftp_globals["state"] == "browse" || + $net2ftp_globals["state"] == "copymovedelete" || $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "calculatesize" || $net2ftp_globals["state"] == "downloadzip" || + $net2ftp_globals["state"] == "findstring" || $net2ftp_globals["state"] == "followsymlink" || + $net2ftp_globals["state"] == "install" || $net2ftp_globals["state"] == "zip") { + require_once($net2ftp_globals["application_includesdir"] . "/browse.inc.php"); + } + if ($net2ftp_globals["state"] == "downloadzip" || $net2ftp_globals["state"] == "zip") { + require_once($net2ftp_globals["application_includesdir"] . "/zip.lib.php"); + } + +// 4. Load the plugins + require_once($net2ftp_globals["application_pluginsdir"] . "/plugins.inc.php"); + $net2ftp_globals["activePlugins"] = getActivePlugins(); + net2ftp_plugin_includePhpFiles(); + +// 5. Load the language file + includeLanguageFile(); + + } + +// ------------------------------------------------------------------------- +// Execute function shutdown() if the script reaches the maximum execution time (usually 30 seconds) +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + register_shutdown_function("net2ftp_shutdown"); + } + +// ------------------------------------------------------------------------- +// Log access and rotate logs +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + logAccess(); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + + rotateLogs(); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Check authorizations +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders" && $net2ftp_settings["check_authorization"] == "yes" && $net2ftp_globals["ftpserver"] != "") { + checkAuthorization($net2ftp_globals["ftpserver"], $net2ftp_globals["ftpserverport"], $net2ftp_globals["directory"], $net2ftp_globals["username"]); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Get the consumption counter values from the database +// This retrieves the consumption of network and server resources for the +// current IP address and FTP server from the database, and stores these +// values in global variables. See /includes/consumption.inc.php for the details. +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + getConsumption(); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Execute the action! +// ------------------------------------------------------------------------- + +// ------------------------------------ +// For most modules, everything must be done: send headers, print body, etc +// ------------------------------------ + if ($net2ftp_globals["state"] == "admin" || + $net2ftp_globals["state"] == "admin_createtables" || + $net2ftp_globals["state"] == "admin_emptylogs" || + $net2ftp_globals["state"] == "admin_viewlogs" || + $net2ftp_globals["state"] == "advanced" || + $net2ftp_globals["state"] == "advanced_ftpserver" || + $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || + $net2ftp_globals["state"] == "bookmark" || + $net2ftp_globals["state"] == "browse" || + $net2ftp_globals["state"] == "calculatesize" || + $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "copymovedelete" || + $net2ftp_globals["state"] == "edit" || + $net2ftp_globals["state"] == "findstring" || + $net2ftp_globals["state"] == "getcookies" || + $net2ftp_globals["state"] == "install" || + ($net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 1) || + $net2ftp_globals["state"] == "login" || + $net2ftp_globals["state"] == "login_small" || + $net2ftp_globals["state"] == "logout" || + $net2ftp_globals["state"] == "newdir" || + $net2ftp_globals["state"] == "raw" || + $net2ftp_globals["state"] == "rename" || + $net2ftp_globals["state"] == "unzip" || + $net2ftp_globals["state"] == "upload" || + ($net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] == "") || + $net2ftp_globals["state"] == "zip") { + + require_once($net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"); + + if ($action == "sendHttpHeaders") { + net2ftp_module_sendHttpHeaders(); + + // If needed, exit to avoid sending non-header output (by net2ftp or other application) + // Example: if a module sends a HTTP redirect header (See /includes/authorizations.inc.php function checkAdminUsernamePassword()!) + if ($net2ftp_result["exit"] == true) { exit(); } + + } + elseif ($action == "printJavascript") { + net2ftp_module_printJavascript(); + net2ftp_plugin_printJavascript(); + net2ftp_skin_printJavascript(); + } + elseif ($action == "printCss") { + net2ftp_module_printCss(); + net2ftp_plugin_printCss(); + net2ftp_skin_printCss(); + } + elseif ($action == "printBodyOnload") { + net2ftp_module_printBodyOnload(); + net2ftp_plugin_printBodyOnload(); + } + elseif ($action == "printBody") { + // Print the status bar to be able to show the progress + if (isStatusbarActive() == true) { + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/header.template.php"); + } + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/status/status.inc.php"); + + // Do the work and meanwhile update the progress bar + net2ftp_module_printBody(); + + // Update the consumption statistics + $net2ftp_globals["endtime"] = microtime(); + $net2ftp_globals["time_taken"] = timer(); + addConsumption(0, $net2ftp_globals["time_taken"]); + putConsumption(); + + // Set the progress bar to "finished" + if (isStatusbarActive() == true) { + $statusmessage = __("Script finished in %1\$s seconds", $net2ftp_globals["time_taken"]); + setStatus(1, 1, $statusmessage); + } + } + } + +// ------------------------------------ +// For some modules, only headers must be sent +// ------------------------------------ + elseif ($net2ftp_globals["state"] == "clearcookies" || + $net2ftp_globals["state"] == "downloadfile" || + $net2ftp_globals["state"] == "downloadzip" || + $net2ftp_globals["state"] == "followsymlink" || + ($net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 2) || + ($net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] != "")) { + require_once($net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"); + if ($action == "sendHttpHeaders") { + + // Do the work - do not update the progress bar + net2ftp_module_sendHttpHeaders(); + + // Update the consumption statistics + $net2ftp_globals["endtime"] = microtime(); + $net2ftp_globals["time_taken"] = timer(); + addConsumption(0, $net2ftp_globals["time_taken"]); + putConsumption(); + + // Exit to avoid sending non-header output (by net2ftp or other application) + exit(); + + } + elseif ($action == "printJavascript") { } + elseif ($action == "printCss") { } + elseif ($action == "printBodyOnload") { } + elseif ($action == "printBody") { } + } + else { + $errormessage = __("Unexpected state string: %1\$s. Exiting.", $net2ftp_globals["state"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + logError(); + return false; + } + +// ------------------------------------------------------------------------- +// Log errors +// ------------------------------------------------------------------------- + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + +} // end function net2ftp_main + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function isStatusbarActive() { + +// -------------- +// This function returns if the status bar should be shown or not, depending +// on the state and state2 variables +// -------------- + + global $net2ftp_globals; + +// If $net2ftp_globals["isStatusbarActive"] is not yet filled, calculate its value +// and fill it in + if (isset($net2ftp_globals["isStatusbarActive"]) == false) { + if ($net2ftp_globals["skin"] == "openlaszlo") { $net2ftp_globals["isStatusbarActive"] = false; } + elseif ( + $net2ftp_globals["state"] == "admin" || + $net2ftp_globals["state"] == "admin_createtables" || + $net2ftp_globals["state"] == "admin_emptylogs" || + $net2ftp_globals["state"] == "admin_viewlogs" || + $net2ftp_globals["state"] == "advanced" || + $net2ftp_globals["state"] == "advanced_ftpserver" || + $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || + $net2ftp_globals["state"] == "bookmark" || + ($net2ftp_globals["state"] == "browse" && $net2ftp_globals["state2"] == "main") || + $net2ftp_globals["state"] == "calculatesize" || + $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "copymovedelete" || + $net2ftp_globals["state"] == "easywebsite" || + $net2ftp_globals["state"] == "findstring" || + $net2ftp_globals["state"] == "install" || + $net2ftp_globals["state"] == "jupload" || + $net2ftp_globals["state"] == "newdir" || + $net2ftp_globals["state"] == "newfile" || + $net2ftp_globals["state"] == "raw" || + $net2ftp_globals["state"] == "rename" || + $net2ftp_globals["state"] == "unzip" || + $net2ftp_globals["state"] == "updatefile" || + $net2ftp_globals["state"] == "upload" || + $net2ftp_globals["state"] == "view" || + $net2ftp_globals["state"] == "zip") { + $net2ftp_globals["isStatusbarActive"] = true; + } + else { + $net2ftp_globals["isStatusbarActive"] = false; + } + } + +// Return the value of $net2ftp_globals["isStatusbarActive"] + return $net2ftp_globals["isStatusbarActive"]; + +} // end function isStatusbarActive + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function stopwatch() { + +// -------------- +// This function prints the total time elapsed, and the time elapsed since the previous call +// -------------- + + global $net2ftp_globals; + +// Now + list($now_usec, $now_sec) = explode(' ', microtime()); + $now = ((float)$now_usec + (float)$now_sec); + +// Initialization + if (isset($net2ftp_globals["stopwatch_starttime"]) == false) { + $net2ftp_globals["stopwatch_starttime"] = $now; + } + if (isset($net2ftp_globals["stopwatch_endtime"]) == false) { + $net2ftp_globals["stopwatch_endtime"] = $now; + } + +// Total time elapsed = now - starttime + $total_elapsed = $now - $net2ftp_globals["stopwatch_starttime"]; + $total_elapsed = number_format($total_elapsed, 4); + +// Time since previous stopwatch = now - previous endtime + $delta_elapsed = $now - $net2ftp_globals["stopwatch_endtime"]; + $delta_elapsed = number_format($delta_elapsed, 4); + +// Set the new value for endtime + $net2ftp_globals["stopwatch_endtime"] = $now; + +// Print $total_elapsed and $delta_elapsed + echo $total_elapsed . " - " . $delta_elapsed . "
    \n"; + +} // End function stopwatch() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/pclerror.lib.php b/ehcp/net2ftp/includes/pclerror.lib.php new file mode 100644 index 0000000..7c8c47e --- /dev/null +++ b/ehcp/net2ftp/includes/pclerror.lib.php @@ -0,0 +1,132 @@ +"; + $v_message .= "

    PclError Library has detected a fatal error on file '$p_file', line $p_line

    "; + $v_message .= "

    $p_error_string

    "; + $v_message .= ""; + die($v_message); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorReset() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + $g_pcl_error_code = 1; + $g_pcl_error_string = ""; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorCode() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + return($g_pcl_error_code); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorString() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorString() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + return($g_pcl_error_string." [code $g_pcl_error_code]"); + } + // -------------------------------------------------------------------------------- + + +// ----- End of double include look +} +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/pcltar.lib.php b/ehcp/net2ftp/includes/pcltar.lib.php new file mode 100644 index 0000000..63611d4 --- /dev/null +++ b/ehcp/net2ftp/includes/pcltar.lib.php @@ -0,0 +1,3572 @@ +"; + // -------------------------------------------------------------------------------- + function PclTarList($p_tarname, $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarList", "tar=$p_tarname, mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = PclTarHandleExtract($p_tarname, 0, $p_list, "list", "", $p_mode, "")) != 1) + { + unset($p_list); + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtract() + // Description : + // Extract all the files present in the archive $p_tarname, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + function PclTarExtract($p_tarname, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtract", "tar='$p_tarname', path='$p_path', remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, 0, $p_list, "complete", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtractList() + // Description : + // Extract the files present in the archive $p_tarname and specified in + // $p_filelist, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a directory is spcified in the list, all the files from this directory + // will be extracted. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + function PclTarExtractList($p_tarname, $p_filelist, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtractList", "tar=$p_tarname, list, path=$p_path, remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, $p_filelist, $p_list, "partial", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) + { + // ----- Create a list with the elements from the string + $v_list = explode(" ", $p_filelist); + + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, $v_list, $p_list, "partial", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type p_filelist"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtractIndex() + // Description : + // Extract the files present in the archive $p_tarname and specified at + // the indexes in $p_index, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a directory is specified in the list, the directory only is created. All + // the file stored in this archive for this directory + // are not extracted. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + function PclTarExtractIndex($p_tarname, $p_index, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtractIndex", "tar=$p_tarname, index='$p_index', path=$p_path, remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_index is really an integer + if (is_integer($p_index)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtractByIndexList($p_tarname, "$p_index", $p_list, $p_path, $p_remove_path, $v_tar_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_index)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtractByIndexList($p_tarname, $p_index, $p_list, $p_path, $p_remove_path, $v_tar_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type $p_index"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarDelete() + // Description : + // This function deletes from the archive $p_tarname the files which are listed + // in $p_filelist. $p_filelist can be a string with file names separated by + // spaces, or an array containing the file names. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_filelist : An array or a string containing file names to remove from the + // archive. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // List of the files which are kept in the archive (same format as PclTarList()) + // -------------------------------------------------------------------------------- + function PclTarDelete($p_tarname, $p_filelist, $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarDelete", "tar='$p_tarname', list='$p_filelist', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleDelete($p_tarname, $p_filelist, $p_list, $p_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) + { + // ----- Create a list with the elements from the string + $v_list = explode(" ", $p_filelist); + + // ----- Call the extracting fct + if (($v_result = PclTarHandleDelete($p_tarname, $v_list, $p_list, $p_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type p_filelist"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarUpdate() + // Description : + // This function updates the files in $p_filelist which are already in the + // $p_tarname archive with an older last modified date. If the file does not + // exist, it is added at the end of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_filelist : An array or a string containing file names to update from the + // archive. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // List of the files contained in the archive. The field status contains + // "updated", "not_updated", "added" or "ok" for the files not concerned. + // -------------------------------------------------------------------------------- + function PclTarUpdate($p_tarname, $p_filelist, $p_mode="", $p_add_dir="", $p_remove_dir="") + { + TrFctStart(__FILE__, __LINE__, "PclTarUpdate", "tar='$p_tarname', list='$p_filelist', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleUpdate($p_tarname, $p_filelist, $p_list, $p_mode, $p_add_dir, $p_remove_dir)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) + { + // ----- Create a list with the elements from the string + $v_list = explode(" ", $p_filelist); + + // ----- Call the extracting fct + if (($v_result = PclTarHandleUpdate($p_tarname, $v_list, $p_list, $p_mode, $p_add_dir, $p_remove_dir)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type p_filelist"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : PclTarMerge() + // Description : + // This function add the content of $p_tarname_add at the end of $p_tarname. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_tarname_add : Name of an existing tar file taht will be added at the end + // of $p_tarname. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // $p_mode_add : 'tar' or 'tgz', if not set, will be determined by $p_tarname_add + // extension + // Return Values : + // List of the files contained in the archive. The field status contains + // "updated", "not_updated", "added" or "ok" for the files not concerned. + // -------------------------------------------------------------------------------- + function PclTarMerge($p_tarname, $p_tarname_add, $p_mode="", $p_mode_add="") + { + TrFctStart(__FILE__, __LINE__, "PclTarMerge", "tar='$p_tarname', tar_add='$p_tarname_add', mode='$p_mode', mode_add='$p_mode_add'"); + $v_result=1; + + // ----- Check the parameters + if (($p_tarname == "") || ($p_tarname_add == "")) + { + // ----- Error log + PclErrorLog(-3, "Invalid empty archive name"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + if (($p_mode_add == "") || (($p_mode_add!="tar") && ($p_mode_add!="tgz"))) + { + if (($p_mode_add = PclTarHandleExtension($p_tarname_add)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Clear filecache + clearstatcache(); + + // ----- Check the file size + if ((!is_file($p_tarname)) || + (((($v_size = filesize($p_tarname)) % 512) != 0) && ($p_mode=="tar"))) + { + // ----- Error log + if (!is_file($p_tarname)) + PclErrorLog(-4, "Archive '$p_tarname' does not exist"); + else + PclErrorLog(-6, "Archive '$p_tarname' has invalid size ".filesize($p_tarname)."(not a 512 block multiple)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + if ((!is_file($p_tarname_add)) || + (((($v_size_add = filesize($p_tarname_add)) % 512) != 0) && ($p_mode_add=="tar"))) + { + // ----- Error log + if (!is_file($p_tarname_add)) + PclErrorLog(-4, "Archive '$p_tarname_add' does not exist"); + else + PclErrorLog(-6, "Archive '$p_tarname_add' has invalid size ".filesize($p_tarname_add)."(not a 512 block multiple)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Look for compressed archive + if ($p_mode == "tgz") + { + // ----- Open the file in read mode + if (($p_tar = @gzopen($p_tarname, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open a temporary file in write mode + $v_temp_tarname = uniqid("pcltar-").".tmp"; + TrFctMessage(__FILE__, __LINE__, 2, "Creating temporary archive file $v_temp_tarname"); + if (($v_temp_tar = @gzopen($v_temp_tarname, "wb")) == 0) + { + // ----- Close tar file + gzclose($p_tar); + + // ----- Error log + PclErrorLog(-1, "Unable to open file '$v_temp_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the first 512 bytes block + $v_buffer = gzread($p_tar, 512); + + // ----- Read the following blocks but not the last one + if (!gzeof($p_tar)) + { + TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); + $i=1; + + // ----- Read new 512 block and write the already read + do{ + // ----- Write the already read block + $v_binary_data = pack("a512", "$v_buffer"); + gzputs($v_temp_tar, $v_binary_data); + + $i++; + TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); + + // ----- Read next block + $v_buffer = gzread($p_tar, 512); + + } while (!gzeof($p_tar)); + + TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); + } + } + + // ----- Look for uncompressed tar file + else if ($p_mode=="tar") + { + // ----- Open the tar file + if (($p_tar = fopen($p_tarname, "r+b")) == 0) + { + // ----- Error log + PclErrorLog(-1, "Unable to open file '$p_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Go to the beginning of last block + TrFctMessage(__FILE__, __LINE__, 4, "Position before :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + fseek($p_tar, $v_size-512); + TrFctMessage(__FILE__, __LINE__, 4, "Position after :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + } + + // ----- Look for unknown type + else + { + // ----- Error log + PclErrorLog(-3, "Invalid tar mode $p_mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Look for type of archive to add + if ($p_mode_add == "tgz") + { + TrFctMessage(__FILE__, __LINE__, 4, "Opening file $p_tarname_add"); + + // ----- Open the file in read mode + if (($p_tar_add = @gzopen($p_tarname_add, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname_add' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the first 512 bytes block + $v_buffer = gzread($p_tar_add, 512); + + // ----- Read the following blocks but not the last one + if (!gzeof($p_tar_add)) + { + TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); + $i=1; + + // ----- Read new 512 block and write the already read + do{ + // ----- Write the already read block + $v_binary_data = pack("a512", "$v_buffer"); + if ($p_mode=="tar") + fputs($p_tar, $v_binary_data); + else + gzputs($v_temp_tar, $v_binary_data); + + $i++; + TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); + + // ----- Read next block + $v_buffer = gzread($p_tar_add, 512); + + } while (!gzeof($p_tar_add)); + + TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); + } + + // ----- Close the files + gzclose($p_tar_add); + } + + // ----- Look for uncompressed tar file + else if ($p_mode=="tar") + { + // ----- Open the file in read mode + if (($p_tar_add = @fopen($p_tarname_add, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname_add' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the first 512 bytes block + $v_buffer = fread($p_tar_add, 512); + + // ----- Read the following blocks but not the last one + if (!feof($p_tar_add)) + { + TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); + $i=1; + + // ----- Read new 512 block and write the already read + do{ + // ----- Write the already read block + $v_binary_data = pack("a512", "$v_buffer"); + if ($p_mode=="tar") + fputs($p_tar, $v_binary_data); + else + gzputs($v_temp_tar, $v_binary_data); + + $i++; + TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); + + // ----- Read next block + $v_buffer = fread($p_tar_add, 512); + + } while (!feof($p_tar_add)); + + TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); + } + + // ----- Close the files + fclose($p_tar_add); + } + + // ----- Call the footer of the tar archive + $v_result = PclTarHandleFooter($p_tar, $p_mode); + + // ----- Look for closing compressed archive + if ($p_mode == "tgz") + { + // ----- Close the files + gzclose($p_tar); + gzclose($v_temp_tar); + + // ----- Unlink tar file + if (!@unlink($p_tarname)) + { + // ----- Error log + PclErrorLog(-11, "Error while deleting archive name $p_tarname"); + } + + // ----- Rename tar file + if (!@rename($v_temp_tarname, $p_tarname)) + { + // ----- Error log + PclErrorLog(-12, "Error while renaming temporary file $v_temp_tarname to archive name $p_tarname"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for closing uncompressed tar file + else if ($p_mode=="tar") + { + // ----- Close the tarfile + fclose($p_tar); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleCreate() + // Description : + // Parameters : + // $p_tarname : Name of the tar file + // $p_list : An array containing the file or directory names to add in the tar + // $p_mode : "tar" for normal tar archive, "tgz" for gzipped tar archive + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleCreate($p_tarname, $p_list, $p_mode, $p_add_dir="", $p_remove_dir="") + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleCreate", "tar=$p_tarname, list, mode=$p_mode, add_dir='$p_add_dir', remove_dir='$p_remove_dir'"); + $v_result=1; + $v_list_detail = array(); + + // ----- Check the parameters + if (($p_tarname == "") || (($p_mode != "tar") && ($p_mode != "tgz"))) + { + // ----- Error log + if ($p_tarname == "") + PclErrorLog(-3, "Invalid empty archive name"); + else + PclErrorLog(-3, "Unknown mode '$p_mode'"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Look for tar file + if ($p_mode == "tar") + { + // ----- Open the tar file + if (($p_tar = fopen($p_tarname, "wb")) == 0) + { + // ----- Error log + PclErrorLog(-1, "Unable to open file [$p_tarname] in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Call the adding fct inside the tar + if (($v_result = PclTarHandleAddList($p_tar, $p_list, $p_mode, $v_list_detail, $p_add_dir, $p_remove_dir)) == 1) + { + // ----- Call the footer of the tar archive + $v_result = PclTarHandleFooter($p_tar, $p_mode); + } + + // ----- Close the tarfile + fclose($p_tar); + } + // ----- Look for tgz file + else + { + // ----- Open the tar file + if (($p_tar = @gzopen($p_tarname, "wb")) == 0) + { + // ----- Error log + PclErrorLog(-1, "Unable to open file [$p_tarname] in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Call the adding fct inside the tar + if (($v_result = PclTarHandleAddList($p_tar, $p_list, $p_mode, $v_list_detail, $p_add_dir, $p_remove_dir)) == 1) + { + // ----- Call the footer of the tar archive + $v_result = PclTarHandleFooter($p_tar, $p_mode); + } + + // ----- Close the tarfile + gzclose($p_tar); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleAppend() + // Description : + // Parameters : + // $p_tarname : Name of the tar file + // $p_list : An array containing the file or directory names to add in the tar + // $p_mode : "tar" for normal tar archive, "tgz" for gzipped tar archive + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleAppend($p_tarname, $p_list, $p_mode, &$p_list_detail, $p_add_dir, $p_remove_dir) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleAppend", "tar=$p_tarname, list, mode=$p_mode"); + $v_result=1; + + // ----- Check the parameters + if ($p_tarname == "") + { + // ----- Error log + PclErrorLog(-3, "Invalid empty archive name"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + clearstatcache(); + + // ----- Check the file size + if ((!is_file($p_tarname)) || + (((($v_size = filesize($p_tarname)) % 512) != 0) && ($p_mode=="tar"))) + { + // ----- Error log + if (!is_file($p_tarname)) + PclErrorLog(-4, "Archive '$p_tarname' does not exist"); + else + PclErrorLog(-6, "Archive '$p_tarname' has invalid size ".filesize($p_tarname)."(not a 512 block multiple)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Look for compressed archive + if ($p_mode == "tgz") + { + // ----- Open the file in read mode + if (($p_tar = @gzopen($p_tarname, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open a temporary file in write mode + $v_temp_tarname = uniqid("pcltar-").".tmp"; + TrFctMessage(__FILE__, __LINE__, 2, "Creating temporary archive file $v_temp_tarname"); + if (($v_temp_tar = @gzopen($v_temp_tarname, "wb")) == 0) + { + // ----- Close tar file + gzclose($p_tar); + + // ----- Error log + PclErrorLog(-1, "Unable to open file '$v_temp_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the first 512 bytes block + $v_buffer = gzread($p_tar, 512); + + // ----- Read the following blocks but not the last one + if (!gzeof($p_tar)) + { + TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); + $i=1; + + // ----- Read new 512 block and write the already read + do{ + // ----- Write the already read block + $v_binary_data = pack("a512", "$v_buffer"); + gzputs($v_temp_tar, $v_binary_data); + + $i++; + TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); + + // ----- Read next block + $v_buffer = gzread($p_tar, 512); + + } while (!gzeof($p_tar)); + + TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); + } + + // ----- Call the adding fct inside the tar + if (($v_result = PclTarHandleAddList($v_temp_tar, $p_list, $p_mode, $p_list_detail, $p_add_dir, $p_remove_dir)) == 1) + { + // ----- Call the footer of the tar archive + $v_result = PclTarHandleFooter($v_temp_tar, $p_mode); + } + + // ----- Close the files + gzclose($p_tar); + gzclose($v_temp_tar); + + // ----- Unlink tar file + if (!@unlink($p_tarname)) + { + // ----- Error log + PclErrorLog(-11, "Error while deleting archive name $p_tarname"); + } + + // ----- Rename tar file + if (!@rename($v_temp_tarname, $p_tarname)) + { + // ----- Error log + PclErrorLog(-12, "Error while renaming temporary file $v_temp_tarname to archive name $p_tarname"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for uncompressed tar file + else if ($p_mode=="tar") + { + // ----- Open the tar file + if (($p_tar = fopen($p_tarname, "r+b")) == 0) + { + // ----- Error log + PclErrorLog(-1, "Unable to open file '$p_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Go to the beginning of last block + TrFctMessage(__FILE__, __LINE__, 4, "Position before :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + fseek($p_tar, $v_size-512); + TrFctMessage(__FILE__, __LINE__, 4, "Position after :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + + // ----- Call the adding fct inside the tar + if (($v_result = PclTarHandleAddList($p_tar, $p_list, $p_mode, $p_list_detail, $p_add_dir, $p_remove_dir)) == 1) + { + // ----- Call the footer of the tar archive + $v_result = PclTarHandleFooter($p_tar, $p_mode); + } + + // ----- Close the tarfile + fclose($p_tar); + } + + // ----- Look for unknown type + else + { + // ----- Error log + PclErrorLog(-3, "Invalid tar mode $p_mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_tar : File descriptor of the tar archive + // $p_list : An array containing the file or directory names to add in the tar + // $p_mode : "tar" for normal tar archive, "tgz" for gzipped tar archive + // $p_list_detail : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleAddList($p_tar, $p_list, $p_mode, &$p_list_detail, $p_add_dir, $p_remove_dir) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleAddList", "tar='$p_tar', list, mode='$p_mode', add_dir='$p_add_dir', remove_dir='$p_remove_dir'"); + $v_result=1; + $v_header = array(); + + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_list_detail); + + // ----- Check the parameters + if ($p_tar == 0) + { + // ----- Error log + PclErrorLog(-3, "Invalid file descriptor in file ".__FILE__.", line ".__LINE__); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Check the arguments + if (sizeof($p_list) == 0) + { + // ----- Error log + PclErrorLog(-3, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Loop on the files + for ($j=0; ($j 99) + { + // ----- Error log + PclErrorLog(-5, "File name is too long (max. 99) : '$p_filename'"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + TrFctMessage(__FILE__, __LINE__, 4, "File position before header =".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + + // ----- Add the file + if (($v_result = PclTarHandleAddFile($p_tar, $p_filename, $p_mode, $v_header, $p_add_dir, $p_remove_dir)) != 1) + { + // ----- Return status + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the file infos + $p_list_detail[$v_nb++] = $v_header; + + // ----- Look for directory + if (is_dir($p_filename)) + { + TrFctMessage(__FILE__, __LINE__, 2, "$p_filename is a directory"); + + // ----- Look for path + if ($p_filename != ".") + $v_path = $p_filename."/"; + else + $v_path = ""; + + // ----- Read the directory for files and sub-directories + $p_hdir = opendir($p_filename); + $p_hitem = readdir($p_hdir); // '.' directory + $p_hitem = readdir($p_hdir); // '..' directory + while ($p_hitem = readdir($p_hdir)) + { + // ----- Look for a file + if (is_file($v_path.$p_hitem)) + { + TrFctMessage(__FILE__, __LINE__, 4, "Add the file '".$v_path.$p_hitem."'"); + + // ----- Add the file + if (($v_result = PclTarHandleAddFile($p_tar, $v_path.$p_hitem, $p_mode, $v_header, $p_add_dir, $p_remove_dir)) != 1) + { + // ----- Return status + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the file infos + $p_list_detail[$v_nb++] = $v_header; + } + + // ----- Recursive call to PclTarHandleAddFile() + else + { + TrFctMessage(__FILE__, __LINE__, 4, "'".$v_path.$p_hitem."' is a directory"); + + // ----- Need an array as parameter + $p_temp_list[0] = $v_path.$p_hitem; + $v_result = PclTarHandleAddList($p_tar, $p_temp_list, $p_mode, $p_list_detail, $p_add_dir, $p_remove_dir); + } + } + + // ----- Free memory for the recursive loop + unset($p_temp_list); + unset($p_hdir); + unset($p_hitem); + } + else + { + TrFctMessage(__FILE__, __LINE__, 4, "File position after blocks =".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + } + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleAddFile($p_tar, $p_filename, $p_mode, &$p_header, $p_add_dir, $p_remove_dir) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleAddFile", "tar='$p_tar', filename='$p_filename', p_mode='$p_mode', add_dir='$p_add_dir', remove_dir='$p_remove_dir'"); + $v_result=1; + + // ----- Check the parameters + if ($p_tar == 0) + { + // ----- Error log + PclErrorLog(-3, "Invalid file descriptor in file ".__FILE__.", line ".__LINE__); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Skip empty file names + if ($p_filename == "") + { + // ----- Error log + PclErrorLog(-3, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + if ($p_remove_dir != "") + { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + + if ((substr($p_filename, 0, 2) == "./") || (substr($p_remove_dir, 0, 2) == "./")) + { + if ((substr($p_filename, 0, 2) == "./") && (substr($p_remove_dir, 0, 2) != "./")) + $p_remove_dir = "./".$p_remove_dir; + if ((substr($p_filename, 0, 2) != "./") && (substr($p_remove_dir, 0, 2) == "./")) + $p_remove_dir = substr($p_remove_dir, 2); + } + + if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) + { + $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); + TrFctMessage(__FILE__, __LINE__, 3, "Remove path '$p_remove_dir' in file '$p_filename' = '$v_stored_filename'"); + } + } + if ($p_add_dir != "") + { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir."/".$v_stored_filename; + TrFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'"); + } + + // ----- Check the path length + if (strlen($v_stored_filename) > 99) + { + // ----- Error log + PclErrorLog(-5, "Stored file name is too long (max. 99) : '$v_stored_filename'"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Look for a file + if (is_file($p_filename)) + { + // ----- Open the source file + if (($v_file = fopen($p_filename, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_filename' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Call the header generation + if (($v_result = PclTarHandleHeader($p_tar, $p_filename, $p_mode, $p_header, $v_stored_filename)) != 1) + { + // ----- Return status + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + TrFctMessage(__FILE__, __LINE__, 4, "File position after header =".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + + // ----- Read the file by 512 octets blocks + $i=0; + while (($v_buffer = fread($v_file, 512)) != "") + { + $v_binary_data = pack("a512", "$v_buffer"); + if ($p_mode == "tar") + fputs($p_tar, $v_binary_data); + else + gzputs($p_tar, $v_binary_data); + $i++; + } + TrFctMessage(__FILE__, __LINE__, 2, "$i 512 bytes blocks"); + + // ----- Close the file + fclose($v_file); + + TrFctMessage(__FILE__, __LINE__, 4, "File position after blocks =".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + } + + // ----- Look for a directory + else + { + // ----- Call the header generation + if (($v_result = PclTarHandleHeader($p_tar, $p_filename, $p_mode, $p_header, $v_stored_filename)) != 1) + { + // ----- Return status + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + TrFctMessage(__FILE__, __LINE__, 4, "File position after header =".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleHeader() + // Description : + // This function creates in the TAR $p_tar, the TAR header for the file + // $p_filename. + // + // 1. The informations needed to compose the header are recuperated and formatted + // 2. Two binary strings are composed for the first part of the header, before + // and after checksum field. + // 3. The checksum is calculated from the two binary strings + // 4. The header is write in the tar file (first binary string, binary string + // for checksum and last binary string). + // Parameters : + // $p_tar : a valid file descriptor, opened in write mode, + // $p_filename : The name of the file the header is for, + // $p_mode : The mode of the archive ("tar" or "tgz"). + // $p_header : A pointer to a array where will be set the file properties + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleHeader($p_tar, $p_filename, $p_mode, &$p_header, $p_stored_filename) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleHeader", "tar=$p_tar, file='$p_filename', mode='$p_mode', stored_filename='$p_stored_filename'"); + $v_result=1; + + // ----- Check the parameters + if (($p_tar == 0) || ($p_filename == "")) + { + // ----- Error log + PclErrorLog(-3, "Invalid file descriptor in file ".__FILE__.", line ".__LINE__); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Filename (reduce the path of stored name) + if ($p_stored_filename == "") + $p_stored_filename = $p_filename; + $v_reduce_filename = PclTarHandlePathReduction($p_stored_filename); + TrFctMessage(__FILE__, __LINE__, 2, "Filename (reduced) '$v_reduce_filename', strlen ".strlen($v_reduce_filename)); + + // ----- Get file info + $v_info = stat($p_filename); + $v_uid = sprintf("%6s ", DecOct($v_info[4])); + $v_gid = sprintf("%6s ", DecOct($v_info[5])); + TrFctMessage(__FILE__, __LINE__, 3, "uid=$v_uid, gid=$v_gid"); + $v_perms = sprintf("%6s ", DecOct(fileperms($p_filename))); + TrFctMessage(__FILE__, __LINE__, 3, "file permissions $v_perms"); + + // ----- File mtime + $v_mtime_data = filemtime($p_filename); + TrFctMessage(__FILE__, __LINE__, 2, "File mtime : $v_mtime_data"); + $v_mtime = sprintf("%11s", DecOct($v_mtime_data)); + + // ----- File typeflag + // '0' or '\0' is the code for regular file + // '5' is directory + if (is_dir($p_filename)) + { + $v_typeflag = "5"; + $v_size = 0; + } + else + { + $v_typeflag = ""; + + // ----- Get the file size + clearstatcache(); + $v_size = filesize($p_filename); + } + + TrFctMessage(__FILE__, __LINE__, 2, "File size : $v_size"); + $v_size = sprintf("%11s ", DecOct($v_size)); + + TrFctMessage(__FILE__, __LINE__, 2, "File typeflag : $v_typeflag"); + + // ----- Linkname + $v_linkname = ""; + + // ----- Magic + $v_magic = ""; + + // ----- Version + $v_version = ""; + + // ----- uname + $v_uname = ""; + + // ----- gname + $v_gname = ""; + + // ----- devmajor + $v_devmajor = ""; + + // ----- devminor + $v_devminor = ""; + + // ----- prefix + $v_prefix = ""; + + // ----- Compose the binary string of the header in two parts arround the checksum position + $v_binary_data_first = pack("a100a8a8a8a12A12", $v_reduce_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ""); + + // ----- Calculate the checksum + $v_checksum = 0; + // ..... First part of the header + for ($i=0; $i<148; $i++) + { + $v_checksum += ord(substr($v_binary_data_first,$i,1)); + } + // ..... Ignore the checksum value and replace it by ' ' (space) + for ($i=148; $i<156; $i++) + { + $v_checksum += ord(' '); + } + // ..... Last part of the header + for ($i=156, $j=0; $i<512; $i++, $j++) + { + $v_checksum += ord(substr($v_binary_data_last,$j,1)); + } + TrFctMessage(__FILE__, __LINE__, 3, "Calculated checksum : $v_checksum"); + + // ----- Write the first 148 bytes of the header in the archive + if ($p_mode == "tar") + fputs($p_tar, $v_binary_data_first, 148); + else + gzputs($p_tar, $v_binary_data_first, 148); + + // ----- Write the calculated checksum + $v_checksum = sprintf("%6s ", DecOct($v_checksum)); + $v_binary_data = pack("a8", $v_checksum); + if ($p_mode == "tar") + fputs($p_tar, $v_binary_data, 8); + else + gzputs($p_tar, $v_binary_data, 8); + + // ----- Write the last 356 bytes of the header in the archive + if ($p_mode == "tar") + fputs($p_tar, $v_binary_data_last, 356); + else + gzputs($p_tar, $v_binary_data_last, 356); + + // ----- Set the properties in the header "structure" + $p_header[filename] = $v_reduce_filename; + $p_header[mode] = $v_perms; + $p_header[uid] = $v_uid; + $p_header[gid] = $v_gid; + $p_header[size] = $v_size; + $p_header[mtime] = $v_mtime; + $p_header[typeflag] = $v_typeflag; + $p_header[status] = "added"; + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleFooter() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleFooter($p_tar, $p_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleFooter", "tar='$p_tar', p_mode=$p_mode"); + $v_result=1; + + // ----- Write the last 0 filled block for end of archive + $v_binary_data = pack("a512", ""); + if ($p_mode == "tar") + fputs($p_tar, $v_binary_data); + else + gzputs($p_tar, $v_binary_data); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtract() + // Description : + // Parameters : + // $p_tarname : Filename of the tar (or tgz) archive + // $p_file_list : An array which contains the list of files to extract, this + // array may be empty when $p_mode is 'complete' + // $p_list_detail : An array where will be placed the properties of each extracted/listed file + // $p_mode : 'complete' will extract all files from the archive, + // 'partial' will look for files in $p_file_list + // 'list' will only list the files from the archive without any extract + // $p_path : Path to add while writing the extracted files + // $p_tar_mode : 'tar' for GNU TAR archive, 'tgz' for compressed archive + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtract($p_tarname, $p_file_list, &$p_list_detail, $p_mode, $p_path, $p_tar_mode, $p_remove_path) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtract", "archive='$p_tarname', list, mode=$p_mode, path=$p_path, tar_mode=$p_tar_mode, remove_path='$p_remove_path'"); + $v_result=1; + $v_nb = 0; + $v_extract_all = TRUE; + $v_listing = FALSE; + + // ----- Check the path + if (($p_path == "") || ((substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../"))) +// NET2FTP +// $p_path = "./".$p_path; + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Study the mode + switch ($p_mode) { + case "complete" : + // ----- Flag extract of all files + $v_extract_all = TRUE; + $v_listing = FALSE; + break; + case "partial" : + // ----- Flag extract of specific files + $v_extract_all = FALSE; + $v_listing = FALSE; + break; + case "list" : + // ----- Flag list of all files + $v_extract_all = FALSE; + $v_listing = TRUE; + break; + default : + // ----- Error log + PclErrorLog(-3, "Invalid extract mode ($p_mode)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open the tar file + if ($p_tar_mode == "tar") + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + $v_tar = fopen($p_tarname, "rb"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in gzip binary read mode"); + $v_tar = @gzopen($p_tarname, "rb"); + } + + // ----- Check that the archive is open + if ($v_tar == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open archive '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the blocks + While (!($v_end_of_file = ($p_tar_mode == "tar"?feof($v_tar):gzeof($v_tar)))) + { + TrFctMessage(__FILE__, __LINE__, 3, "Looking for next header ..."); + + // ----- Clear cache of file infos + clearstatcache(); + + // ----- Reset extract tag + $v_extract_file = FALSE; + $v_extraction_stopped = 0; + + // ----- Read the 512 bytes header + if ($p_tar_mode == "tar") + $v_binary_data = fread($v_tar, 512); + else + $v_binary_data = gzread($v_tar, 512); + + // ----- Read the header properties + if (($v_result = PclTarHandleReadHeader($v_binary_data, $v_header)) != 1) + { + // ----- Close the archive file + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for empty blocks to skip + if ($v_header[filename] == "") + { + TrFctMessage(__FILE__, __LINE__, 2, "Empty block found. End of archive ?"); + continue; + } + + TrFctMessage(__FILE__, __LINE__, 2, "Found file '$v_header[filename]', size '$v_header[size]'"); + + // ----- Look for partial extract + if ((!$v_extract_all) && (is_array($p_file_list))) + { + TrFctMessage(__FILE__, __LINE__, 2, "Look if the file '$v_header[filename]' need to be extracted"); + + // ----- By default no unzip if the file is not found + $v_extract_file = FALSE; + + // ----- Look into the file list + for ($i=0; $i strlen($p_file_list[$i])) && (substr($v_header[filename], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) + { + // ----- The file is in the directory, so extract it + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is in directory '$p_file_list[$i]' : extract it"); + $v_extract_file = TRUE; + + // ----- End of loop + break; + } + } + + // ----- It is a file, so compare the file names + else if ($p_file_list[$i] == $v_header[filename]) + { + // ----- File found + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' should be extracted"); + $v_extract_file = TRUE; + + // ----- End of loop + break; + } + } + + // ----- Trace + if (!$v_extract_file) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' should not be extracted"); + } + } + else + { + // ----- All files need to be extracted + $v_extract_file = TRUE; + } + + // ----- Look if this file need to be extracted + if (($v_extract_file) && (!$v_listing)) + { + // ----- Look for path to remove + if (($p_remove_path != "") + && (substr($v_header[filename], 0, $p_remove_path_size) == $p_remove_path)) + { + TrFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '$v_header[filename]'"); + // ----- Remove the path + $v_header[filename] = substr($v_header[filename], $p_remove_path_size); + TrFctMessage(__FILE__, __LINE__, 3, "Reslting file is '$v_header[filename]'"); + } + + // ----- Add the path to the file + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + TrFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path)-1); + TrFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + + // ----- Add the path + if (substr($v_header[filename], 0, 1) == "/") + $v_header[filename] = $p_path.$v_header[filename]; + else + $v_header[filename] = $p_path."/".$v_header[filename]; + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '$v_header[filename]', size '$v_header[size]'"); + + // ----- Check that the file does not exists + if (file_exists($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' already exists"); + + // ----- Look if file is a directory + if (is_dir($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is a directory"); + + // ----- Change the file status + $v_header[status] = "already_a_directory"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if file is write protected + else if (!is_writeable($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is write protected"); + + // ----- Change the file status + $v_header[status] = "write_protected"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if the extracted file is older + else if (filemtime($v_header[filename]) > $v_header[mtime]) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is newer (".date("l dS of F Y h:i:s A", filemtime($v_header[filename])).") than the extracted file (".date("l dS of F Y h:i:s A", $v_header[mtime]).")"); + + // ----- Change the file status + $v_header[status] = "newer_exist"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Check the directory availability and create it if necessary + else + { + if ($v_header[typeflag]=="5") + $v_dir_to_check = $v_header[filename]; + else if (!strstr($v_header[filename], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($v_header[filename]); + + if (($v_result = PclTarHandlerDirCheck($v_dir_to_check)) != 1) + { + TrFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '$v_header[filename]'"); + + // ----- Change the file status + $v_header[status] = "path_creation_fail"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Do the extraction + if (($v_extract_file) && ($v_header[typeflag]!="5")) + { + // ----- Open the destination file in write mode + if (($v_dest_file = @fopen($v_header[filename], "wb")) == 0) + { + TrFctMessage(__FILE__, __LINE__, 2, "Error while opening '$v_header[filename]' in write binary mode"); + + // ----- Change the file status + $v_header[status] = "write_error"; + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Start extraction of '$v_header[filename]'"); + + // ----- Read data + $n = floor($v_header[size]/512); + for ($i=0; $i<$n; $i++) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read complete 512 bytes block number ".($i+1)); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, 512); + } + if (($v_header[size] % 512) != 0) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read last ".($v_header[size] % 512)." bytes in a 512 block"); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, ($v_header[size] % 512)); + } + + // ----- Close the destination file + fclose($v_dest_file); + + // ----- Change the file mode, mtime + touch($v_header[filename], $v_header[mtime]); + //chmod($v_header[filename], DecOct($v_header[mode])); + } + + // ----- Check the file size + clearstatcache(); + if (filesize($v_header[filename]) != $v_header[size]) + { + // ----- Close the archive file + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Error log + PclErrorLog(-7, "Extracted file '$v_header[filename]' does not have the correct file size '".filesize($v_filename)."' ('$v_header[size]' expected). Archive may be corrupted."); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Extraction of file '$v_header[filename]' skipped."); + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + } + + // ----- Look for file that is not to be unzipped + else + { + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Jump file '$v_header[filename]'"); + TrFctMessage(__FILE__, __LINE__, 4, "Position avant jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + + // ----- Jump to next file + if ($p_tar_mode == "tar") + fseek($v_tar, ($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + + TrFctMessage(__FILE__, __LINE__, 4, "Position aprs jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + } + + if ($p_tar_mode == "tar") + $v_end_of_file = feof($v_tar); + else + $v_end_of_file = gzeof($v_tar); + + // ----- File name and properties are logged if listing mode or file is extracted + if ($v_listing || $v_extract_file || $v_extraction_stopped) + { + TrFctMessage(__FILE__, __LINE__, 2, "Memorize info about file '$v_header[filename]'"); + + // ----- Log extracted files + if (($v_file_dir = dirname($v_header[filename])) == $v_header[filename]) + $v_file_dir = ""; + if ((substr($v_header[filename], 0, 1) == "/") && ($v_file_dir == "")) + $v_file_dir = "/"; + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + + // ----- Increment + $v_nb++; + } + } + + // ----- Close the tarfile + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtractByIndexList() + // Description : + // Extract the files which are at the indexes specified. If the 'file' at the + // index is a directory, the directory only is created, not all the files stored + // for that directory. + // Parameters : + // $p_index_string : String of indexes of files to extract. The form of the + // string is "0,4-6,8-12" with only numbers and '-' for + // for range, and ',' to separate ranges. No spaces or ';' + // are allowed. + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtractByIndexList($p_tarname, $p_index_string, &$p_list_detail, $p_path, $p_remove_path, $p_tar_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtractByIndexList", "archive='$p_tarname', index_string='$p_index_string', list, path=$p_path, remove_path='$p_remove_path', tar_mode=$p_tar_mode"); + $v_result=1; + $v_nb = 0; + + // ----- TBC : I should check the string by a regexp + + // ----- Check the path + if (($p_path == "") || ((substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../") && (substr($p_path, 0, 2) != "./"))) + $p_path = "./".$p_path; + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the tar file + if ($p_tar_mode == "tar") + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + $v_tar = @fopen($p_tarname, "rb"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in gzip binary read mode"); + $v_tar = @gzopen($p_tarname, "rb"); + } + + // ----- Check that the archive is open + if ($v_tar == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open archive '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Manipulate the index list + $v_list = explode(",", $p_index_string); + sort($v_list); + + // ----- Loop on the index list + $v_index=0; + for ($i=0; ($i $p_index_stop) + { + TrFctMessage(__FILE__, __LINE__, 2, "Stop extraction, past stop index"); + break; + } + + // ----- Clear cache of file infos + clearstatcache(); + + // ----- Reset extract tag + $v_extract_file = FALSE; + $v_extraction_stopped = 0; + + // ----- Read the 512 bytes header + if ($p_tar_mode == "tar") + $v_binary_data = fread($v_tar, 512); + else + $v_binary_data = gzread($v_tar, 512); + + // ----- Read the header properties + if (($v_result = PclTarHandleReadHeader($v_binary_data, $v_header)) != 1) + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for empty blocks to skip + if ($v_header[filename] == "") + { + TrFctMessage(__FILE__, __LINE__, 2, "Empty block found. End of archive ?"); + continue; + } + + TrFctMessage(__FILE__, __LINE__, 2, "Found file '$v_header[filename]', size '$v_header[size]'"); + + // ----- Look if file is in the range to be extracted + if (($p_index_current >= $p_index_start) && ($p_index_current <= $p_index_stop)) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is in the range to be extracted"); + $v_extract_file = TRUE; + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is out of the range"); + $v_extract_file = FALSE; + } + + // ----- Look if this file need to be extracted + if ($v_extract_file) + { + if (($v_result = PclTarHandleExtractFile($v_tar, $v_header, $p_path, $p_remove_path, $p_tar_mode)) != 1) + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + + // ----- Look for file that is not to be extracted + else + { + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Jump file '$v_header[filename]'"); + TrFctMessage(__FILE__, __LINE__, 4, "Position avant jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + + // ----- Jump to next file + if ($p_tar_mode == "tar") + fseek($v_tar, ($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + + TrFctMessage(__FILE__, __LINE__, 4, "Position aprs jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + } + + if ($p_tar_mode == "tar") + $v_end_of_file = feof($v_tar); + else + $v_end_of_file = gzeof($v_tar); + + // ----- File name and properties are logged if listing mode or file is extracted + if ($v_extract_file) + { + TrFctMessage(__FILE__, __LINE__, 2, "Memorize info about file '$v_header[filename]'"); + + // ----- Log extracted files + if (($v_file_dir = dirname($v_header[filename])) == $v_header[filename]) + $v_file_dir = ""; + if ((substr($v_header[filename], 0, 1) == "/") && ($v_file_dir == "")) + $v_file_dir = "/"; + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + + // ----- Increment + $v_nb++; + } + + // ----- Increment the current file index + $p_index_current++; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtractFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtractFile($p_tar, &$v_header, $p_path, $p_remove_path, $p_tar_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtractFile", "archive_descr='$p_tar', path=$p_path, remove_path='$p_remove_path', tar_mode=$p_tar_mode"); + $v_result=1; + + // TBC : I should replace all $v_tar by $p_tar in this function .... + $v_tar = $p_tar; + $v_extract_file = 1; + + $p_remove_path_size = strlen($p_remove_path); + + // ----- Look for path to remove + if (($p_remove_path != "") + && (substr($v_header[filename], 0, $p_remove_path_size) == $p_remove_path)) + { + TrFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '$v_header[filename]'"); + // ----- Remove the path + $v_header[filename] = substr($v_header[filename], $p_remove_path_size); + TrFctMessage(__FILE__, __LINE__, 3, "Resulting file is '$v_header[filename]'"); + } + + // ----- Add the path to the file + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + TrFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path)-1); + TrFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + + // ----- Add the path + if (substr($v_header[filename], 0, 1) == "/") + $v_header[filename] = $p_path.$v_header[filename]; + else + $v_header[filename] = $p_path."/".$v_header[filename]; + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '$v_header[filename]', size '$v_header[size]'"); + + // ----- Check that the file does not exists + if (file_exists($v_header[filename])) + { + + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' already exists"); + + // ----- Look if file is a directory + if (is_dir($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is a directory"); + + // ----- Change the file status + $v_header[status] = "already_a_directory"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if file is write protected + else if (!is_writeable($v_header[filename])) + if (!is_writeable($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is write protected"); + + // ----- Change the file status + $v_header[status] = "write_protected"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + + // ----- Look if the extracted file is older + else if (filemtime($v_header[filename]) > $v_header[mtime]) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is newer (".date("l dS of F Y h:i:s A", filemtime($v_header[filename])).") than the extracted file (".date("l dS of F Y h:i:s A", $v_header[mtime]).")"); + + // ----- Change the file status + $v_header[status] = "newer_exist"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Check the directory availability and create it if necessary + else + { + if ($v_header[typeflag]=="5") + $v_dir_to_check = $v_header[filename]; + else if (!strstr($v_header[filename], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($v_header[filename]); + + if (($v_result = PclTarHandlerDirCheck($v_dir_to_check)) != 1) + { + TrFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '$v_header[filename]'"); + + // ----- Change the file status + $v_header[status] = "path_creation_fail"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Do the real bytes extraction (if not a directory) + if (($v_extract_file) && ($v_header[typeflag]!="5")) + { + // ----- Open the destination file in write mode + if (($v_dest_file = @fopen($v_header[filename], "wb")) == 0) + { + TrFctMessage(__FILE__, __LINE__, 2, "Error while opening '$v_header[filename]' in write binary mode"); + + // ----- Change the file status + $v_header[status] = "write_error"; + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Start extraction of '$v_header[filename]'"); + + // ----- Read data + $n = floor($v_header[size]/512); + for ($i=0; $i<$n; $i++) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read complete 512 bytes block number ".($i+1)); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, 512); + } + if (($v_header[size] % 512) != 0) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read last ".($v_header[size] % 512)." bytes in a 512 block"); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, ($v_header[size] % 512)); + } + + // ----- Close the destination file + fclose($v_dest_file); + + // ----- Change the file mode, mtime + touch($v_header[filename], $v_header[mtime]); + //chmod($v_header[filename], DecOct($v_header[mode])); + } + + // ----- Check the file size + clearstatcache(); + + if (filesize($v_header[filename]) != $v_header[size]) + { + // ----- Error log + PclErrorLog(-7, "Extracted file '$v_header[filename]' does not have the correct file size '".filesize($v_filename)."' ('$v_header[size]' expected). Archive may be corrupted."); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Extraction of file '$v_header[filename]' skipped."); + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleDelete() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleDelete($p_tarname, $p_file_list, &$p_list_detail, $p_tar_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleDelete", "archive='$p_tarname', list, tar_mode=$p_tar_mode"); + $v_result=1; + $v_nb=0; + + // ----- Look for regular tar file + if ($p_tar_mode == "tar") + { + // ----- Open file + TrFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_tar = @fopen($p_tarname, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open a temporary file in write mode + $v_temp_tarname = uniqid("pcltar-").".tmp"; + TrFctMessage(__FILE__, __LINE__, 2, "Creating temporary archive file $v_temp_tarname"); + if (($v_temp_tar = @fopen($v_temp_tarname, "wb")) == 0) + { + // ----- Close tar file + fclose($v_tar); + + // ----- Error log + PclErrorLog(-1, "Unable to open file '$v_temp_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + } + + // ----- Look for compressed tar file + else + { + // ----- Open the file in read mode + TrFctMessage(__FILE__, __LINE__, 3, "Open file in gzip binary read mode"); + if (($v_tar = @gzopen($p_tarname, "rb")) == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open file '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open a temporary file in write mode + $v_temp_tarname = uniqid("pcltar-").".tmp"; + TrFctMessage(__FILE__, __LINE__, 2, "Creating temporary archive file $v_temp_tarname"); + if (($v_temp_tar = @gzopen($v_temp_tarname, "wb")) == 0) + { + // ----- Close tar file + gzclose($v_tar); + + // ----- Error log + PclErrorLog(-1, "Unable to open file '$v_temp_tarname' in binary write mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + } + + // ----- Read the blocks + While (!($v_end_of_file = ($p_tar_mode == "tar"?feof($v_tar):gzeof($v_tar)))) + { + TrFctMessage(__FILE__, __LINE__, 3, "Looking for next header ..."); + + // ----- Clear cache of file infos + clearstatcache(); + + // ----- Reset delete tag + $v_delete_file = FALSE; + + // ----- Read the first 512 block header + if ($p_tar_mode == "tar") + $v_binary_data = fread($v_tar, 512); + else + $v_binary_data = gzread($v_tar, 512); + + // ----- Read the header properties + if (($v_result = PclTarHandleReadHeader($v_binary_data, $v_header)) != 1) + { + // ----- Close the archive file + if ($p_tar_mode == "tar") + { + fclose($v_tar); + fclose($v_temp_tar); + } + else + { + gzclose($v_tar); + gzclose($v_temp_tar); + } + @unlink($v_temp_tarname); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for empty blocks to skip + if ($v_header[filename] == "") + { + TrFctMessage(__FILE__, __LINE__, 2, "Empty block found. End of archive ?"); + continue; + } + + TrFctMessage(__FILE__, __LINE__, 2, "Found file '$v_header[filename]', size '$v_header[size]'"); + + // ----- Look for filenames to delete + for ($i=0, $v_delete_file=FALSE; ($i $v_header[mtime]) + { + TrFctMessage(__FILE__, __LINE__, 3, "File '$p_file_list[$i]' need to be updated"); + $v_update_file = TRUE; + } + else + { + TrFctMessage(__FILE__, __LINE__, 3, "File '$p_file_list[$i]' does not need to be updated"); + $v_update_file = FALSE; + } + + // ----- Flag the name in order not to add the file at the end + $v_found_list[$i] = 1; + } + else + { + TrFctMessage(__FILE__, __LINE__, 4, "File '$p_file_list[$i]' is not '$v_header[filename]'"); + } + } + + // ----- Copy files that do not need to be updated + if (!$v_update_file) + { + TrFctMessage(__FILE__, __LINE__, 2, "Keep file '$v_header[filename]'"); + + // ----- Write the file header + if ($p_tar_mode == "tar") + { + fputs($v_temp_tar, $v_binary_data, 512); + } + else + { + gzputs($v_temp_tar, $v_binary_data, 512); + } + + // ----- Write the file data + $n = ceil($v_header[size]/512); + for ($j=0; $j<$n; $j++) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read complete 512 bytes block number ".($j+1)); + if ($p_tar_mode == "tar") + { + $v_content = fread($v_tar, 512); + fwrite($v_temp_tar, $v_content, 512); + } + else + { + $v_content = gzread($v_tar, 512); + gzwrite($v_temp_tar, $v_content, 512); + } + } + + // ----- File name and properties are logged if listing mode or file is extracted + TrFctMessage(__FILE__, __LINE__, 2, "Memorize info about file '$v_header[filename]'"); + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + $p_list_detail[$v_nb][status] = ($v_found_file?"not_updated":"ok"); + + // ----- Increment + $v_nb++; + } + + // ----- Look for file that need to be updated + else + { + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Start update of file '$v_current_filename'"); + + // ----- Store the old file size + $v_old_size = $v_header[size]; + + // ----- Add the file + if (($v_result = PclTarHandleAddFile($v_temp_tar, $v_current_filename, $p_tar_mode, $v_header, $p_add_dir, $p_remove_dir)) != 1) + { + // ----- Close the tarfile + if ($p_tar_mode == "tar") + { + fclose($v_tar); + fclose($v_temp_tar); + } + else + { + gzclose($v_tar); + gzclose($v_temp_tar); + } + @unlink($p_temp_tarname); + + // ----- Return status + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Skip old file '$v_header[filename]'"); + + // ----- Jump to next file + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_old_size/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_old_size/512))*512)); + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + $p_list_detail[$v_nb][status] = "updated"; + + // ----- Increment + $v_nb++; + } + + // ----- Look for end of file + if ($p_tar_mode == "tar") + $v_end_of_file = feof($v_tar); + else + $v_end_of_file = gzeof($v_tar); + } + + // ----- Look for files that does not exists in the archive and need to be added + for ($i=0; $i=0; $i--) + { + // ----- Look for current path + if ($v_list[$i] == ".") + { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") + { + // ----- Ignore it and ignore the $i-1 + $i--; + } + else if (($v_list[$i] == "") && ($i!=(sizeof($v_list)-1)) && ($i!=0)) + { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + else + { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + +// ----- End of double include look +} +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/pcltrace.lib.php b/ehcp/net2ftp/includes/pcltrace.lib.php new file mode 100644 index 0000000..acaa2b3 --- /dev/null +++ b/ehcp/net2ftp/includes/pcltrace.lib.php @@ -0,0 +1,735 @@ +"; + echo "
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
+ + + + + + "; +$td=""; +*/ +} +} + +if(!function_exists("andle")){ +function andle($s1,$s2) { //iki string'in andlenmi halini bulur. bir bosa "and" kullanlmaz. delphiden aldim..:) + if($s1=='')$s1=$s2; + elseif ($s2<>'')$s1=$s1.' and '.$s2; + return $s1; +} +} + +function to_array($ar){ # convert a variable to array if it is not already, + if(is_array($ar)) return $ar; # if array, dont do anything + if(!$ar) return array(); # bos ise, bos array dondur. + if(!is_array($ar)) return array($ar); # array olmayan bir degisken ise, arraya dondur ve return et. + return "(arraya cevirme yapilamadi.)"; # hicbiri degilse hata var zaten. +} + +function array_merge2($ar1,$ar2){ + return array_merge(to_array($ar1),to_array($ar2)); +} + + +if(!function_exists("writeoutput")){ +function writeoutput($file, $string, $mode="w",$log=true) { + + mymkdir(dirname($file)); # auto make the dir of filename + + if (!($fp = fopen($file, $mode))) { + echo "hata: dosya acilamadi: $file (writeoutput) !"; + return false; + } + if (!fputs($fp, $string . "\n")) { + fclose($fp); + echo "hata: dosyaya yazilamadi: $file (writeoutput) !"; + return false; + } + + + + fclose($fp); + if($log) echo "\n".basename(__FILE__).": file written successfully: $file, mode:$mode \n"; + return true; +} +} + +if(!function_exists("writeoutput2")){ +function writeoutput2($file, $string, $mode="w",$debug=true) { + $file=removeDoubleSlash($file); + + if ($debug){ + echo "\n".__FUNCTION__.":*** Writing to file ($file) the contents:\n\n$string\n\n"; + } + + mymkdir(dirname($file)); # auto make the dir of filename + + if (!($fp = fopen($file, $mode))) { + echo "hata: dosya acilamadi: $file (writeoutput) !"; + return false; + } + if (!fputs($fp, $string . "\n")) { + fclose($fp); + echo "hata: dosyaya yazilamadi: $file (writeoutput) !"; + return false; + } + fclose($fp); + return true; +} +} + + +if(!function_exists("alanlarial")){ +function alanlarial($db2,$tablo) { // adodb de calsyor. + foreach($db2->MetaColumnNames($tablo) as $alan) $alanlar[]=$alan; + return $alanlar; +} +} + +if(!function_exists("strop")){ +function strop($str,$bas,$son) { + return $bas.$str.$son; +} +} + +if(!function_exists("arrayop")){ +function arrayop($arr,$op) { + foreach($arr as $ar) $ret[]=$op($ar,"{","}"); + return $ret; +} +} + +if(!function_exists("executeprog2")){ +function executeprog2($prog){ // echoes output. + passthru($prog, $val); + return ($val==0); +} +} + +if(!function_exists('executeProg3')){ +function executeProg3($prog,$echooutput=False){ + # executes program and return output + if($echooutput) echo "\n".__FUNCTION__.": executing: ($prog)\n"; + exec($prog,$topcmd); + if(!is_array($topcmd)) return ""; + foreach($topcmd as $t) $topoutput.=$t."\n"; + $out=trim($topoutput); + if($echooutput and ($out<>'')) echo "\n$out\n"; + return $out; +} +} + +if(!function_exists("executeprog")){ +function executeprog($prog){ // does not echo output. only return it. + $fp = popen("$prog", 'r'); + if(!$fp){ + return "
Cannot Execute: $prog ".__FUNCTION__; + } + $read = fread($fp, 8192); + pclose($fp); + return $read; +} +} + +if(!function_exists('degiskenal')){ +function degiskenal($degiskenler) { + $alansayisi=count($degiskenler); + for ($i=0;$i<$alansayisi;$i++) { + global ${$degiskenler[$i]}; + if($_POST[$degiskenler[$i]]<>"") ${$degiskenler[$i]}=$_POST[$degiskenler[$i]]; + else ${$degiskenler[$i]}=$_GET[$degiskenler[$i]]; + $degerler[]=${$degiskenler[$i]}; + }; + return $degerler; +} +} + +if(!function_exists('replacelnieinfile')){ +function replacelineinfile($find,$replace,$where,$addifnotexists=false) { + // edit a line starting with $find, to edit especially conf files.. + + debugecho("\nreplaceline: ($find -> $replace) in ($where) \n "); + $bulundu=false; + + $filearr=@file($where); + //if($find=='$dbrootpass=') print_r($filearr); + + if(!$filearr) { + echo "cannot open file... returning...\n"; + return false; + } //else print_r($file); + + $len=strlen($find); + $newfile=array(); + + foreach($filearr as $line){ + $line=trim($line)."\n"; + $sub=substr($line,0,$len); + if($sub==$find) { + $line=$replace."\n"; + $bulundu=true; + } + $newfile[]=$line; + + } + + if($addifnotexists and !$bulundu){ + echo "Line not found, adding at end: ($replace)\n"; + $newfile[]=$replace; + } + + return arraytofile($where,$newfile); +} + +function replaceOrAddLineInFile($find,$replace,$where){ + return replacelineinfile($find,$replace,$where,true); +} + +} + + +if(!function_exists("addifnotexists")){ +function addifnotexists($what,$where) { + debugecho("\naddifnotexists: ($what) -> ($where) \n ",4); + #bekle(__FUNCTION__." basliyor.."); + $what.="\n"; + $filearr=@file($where); + if(!$filearr) { + echo "cannot open file, trying to setup: ($where)\n"; + $fp = fopen($where,'w'); + fclose($fp); + $filearr=file($where); + + } //else print_r($file); + + if(array_search($what,$filearr)===false) { + echo "dosyada bulamadı ekliyor: $where -> $what \n"; + $filearr[]=$what; + arraytofile($where,$filearr); + + } else { + //echo "buldu... sorun yok. \n"; + // already found, so, do not add + } + + #bekle(__FUNCTION__." bitti..."); + +} +} + + +if(!function_exists('getlocalip')){ +function getlocalip($interface='eth0') { + global $localip; + + $ipline=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | head -1"); + + if(!isset($ipline) || empty($ipline)){ + $ipline = "127.0.0.1"; + } + + $localip=$ipline; + + return $ipline; + +} +} + +if(!function_exists("debugecho")){ +function debugecho($str,$level=0) { + $currentlevel=4; + if($level>=$currentlevel) echo $str; + +} +} + + +if(!function_exists("arraytofile")){ +function arraytofile($file,$lines) { + $new_content = join('',$lines); + $fp = fopen($file,'w'); + $write = fwrite($fp, $new_content); + fclose($fp); +} +} + +function inputform5ForTableConfig($tableConfig,$addArray,$isAdmin=false){ + // $isAdmin can be used in combo with another parameter in an input array to determine if a field should be enabled for administrators or disabled for non-administators including resellers. + // It's an optional parameter that can be used to limit things further during form construction depending on which user submitted the request to build a form, so to speak + // You have to tell this function how to use it, as it really doesn't have any purpose other than being a value you can use should you need it. + + # written for compatibility with inputform5 general function. + # convert a table config (like in start of classapp.php, 'subdomainstable'=>array....) to an array that is acceptable by function inputform5 and call inputform5 + $fields=$tableConfig['insertfields']; + $fields2=array(); + $say=count($fields); + + for($i=0;$i<$say;$i++) { + if(is_array($fields[$i])) $newitem=$fields[$i]; # accept fields both arrays and non-arrays + else $newitem=array($fields[$i]); + if($tableConfig['insertfieldlabels'][$i]<>'') $newitem['lefttext']=$tableConfig['insertfieldlabels'][$i]; + $fields2[]=$newitem; + } + + #$out.="Say:$say,
insertFields".print_r2($fields).print_r2($fields2); + $fields2=array_merge($fields2,$addArray); + #$out.=print_r2($fields2); + return $out.inputform5($fields2,'',$isAdmin); + +} + +function inputform5($alanlar,$action='',$isAdmin = false) { + // $isAdmin can be used in combo with another parameter in an input array to determine if a field should be enabled for administrators or disabled for non-administators including resellers. + // It's an optional parameter that can be used to limit things further during form construction depending on which user submitted the request to build a form, so to speak + // You have to tell this function how to use it, as it really doesn't have any purpose other than being a value you can use should you need it. + + global $debuglevel,$output; +/* + * general purpose input form generator. examples below. + * +sadece echo yapmaz. +degistirildi. artik textarea gosterebiliyor. +$res.="alanlar:".print_r2($alan); +$res.="degerler:".print_r2($deger); + */ + if(!is_array($alanlar)) $alanlar=array($alanlar);# convert to array if not , i.e, you dont need to use an array if you only has one input element, + $alanlar[]=array('_insert','tip'=>'hidden','varsayilan'=>'1'); + $alansayisi=count($alanlar); + + $res.=" + + + ""){$res.=" action='$action'";}; + $res.=">
    + $value) { +?>
  • + + +
  • + +
+ diff --git a/ehcp/fixes/policyd/webui/includes/tooltipdata.php b/ehcp/fixes/policyd/webui/includes/tooltipdata.php new file mode 100644 index 0000000..2e252cb --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/tooltipdata.php @@ -0,0 +1,98 @@ + diff --git a/ehcp/fixes/policyd/webui/includes/tooltips.php b/ehcp/fixes/policyd/webui/includes/tooltips.php new file mode 100644 index 0000000..f8bea88 --- /dev/null +++ b/ehcp/fixes/policyd/webui/includes/tooltips.php @@ -0,0 +1,31 @@ + + Tooltip + diff --git a/ehcp/fixes/policyd/webui/index.php b/ehcp/fixes/policyd/webui/index.php new file mode 100644 index 0000000..e5c5032 --- /dev/null +++ b/ehcp/fixes/policyd/webui/index.php @@ -0,0 +1,146 @@ + + +
    +
  • Protocols + +
  • + +
  • Policies & Policy Groups + + Help + +
      +
    • Define policy groups made up of various combinations of tags.
    • +
    • Define and manage policies comprising of ACL's which can include groups.
    • +
    +
  • + +
  • Access Control + + Help + +
      +
    • Control access based on policy. eg. Rejecting mail matching a specific policy.
    • +
    +
  • + +
  • Amavis Integration + + Help + +
      +
    • Anti-virus checks.
    • +
    • Anti-spam checks.
    • +
    • Banned filename checks.
    • +
    • Email header checks.
    • +
    • Message size limits.
    • +
    • Blacklist/whitelist senders.
    • +
    • Email interception (BCC).
    • +
    +
  • + +
  • Greylisting + + Help + +
      +
    • Support for greylisting and masking sender IP addresses.
    • +
    • Support for auto-whitelisting and auto-greylisting based on count or count+percentage.
    • +
    +
  • + +
  • HELO/EHLO Checks + + Help + +
      +
    • HELO/EHLO randomization prevention
    • +
    • Blacklisting of HELO/EHLO's ... those used by your own servers
    • +
    • Whitelisting of CIDR's which are known to be braindead
    • +
    • Check sending server HELO/EHLO for validity and RFC compliance.
    • +
    +
  • + +
  • SPF Checks + + Help + +
      +
    • Check the SPF records of a domain and see if the inbound email is allowed or prohibited.
    • +
    +
  • + +
  • Quotas + + Help + +
      +
    • Define message count quotas for policies.
    • +
    • Define cumulative size quotas for policies.
    • +
    • Track these quotas based on various methods, including sender IP block, sender user/domain/email address.
    • +
    +
  • + +
  • Accounting + + Help + +
      +
    • Message count and cumulative size accounting.
    • +
    • Message count and cumulative size limits per accounting period.
    • +
    • Daily, weekly and monthly accounting periods.
    • +
    +
  • + +
  • Postfix Integration +
      +
    • Setup and create transports.
    • +
    • Create mailboxes.
    • +
    • Create mailbox aliases.
    • +
    • Manage distribution groups.
    • +
    +
  • + +
+ diff --git a/ehcp/fixes/policyd/webui/policy-add.php b/ehcp/fixes/policyd/webui/policy-add.php new file mode 100644 index 0000000..04d4277 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-add.php @@ -0,0 +1,129 @@ + array( + "Back to policies" => "policy-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + +
Name
Priority + + +
Description
+ +
+
+ + + + + +
Policy name cannot be empty
+ +
Policy priority cannot be empty
+ +
Policy description cannot be empty
+prepare("INSERT INTO ${DB_TABLE_PREFIX}policies (Name,Priority,Description,Disabled) VALUES (?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['policy_name'], + $_POST['policy_priority'], + $_POST['policy_description'] + )); + if ($res) { +?> +
Policy created
+ +
Failed to create policy
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-change.php b/ehcp/fixes/policyd/webui/policy-change.php new file mode 100644 index 0000000..d53c364 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-change.php @@ -0,0 +1,167 @@ + array( + "Back to policies" => "policy-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a policy was selected + if (isset($_POST['policy_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Name, Priority, Description, Disabled FROM ${DB_TABLE_PREFIX}policies WHERE ID = ?"); +?> + + +
+
+ + +
+execute(array($_POST['policy_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Prioritypriority ?> + + +
Descriptiondescription ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No policy selected
+ + +quote($_POST['policy_name'])); + } + if (isset($_POST['policy_priority']) && $_POST['policy_priority'] != "") { + array_push($updates,"Priority = ".$db->quote($_POST['policy_priority'])); + } + if (!empty($_POST['policy_description'])) { + array_push($updates,"Description = ".$db->quote($_POST['policy_description'])); + } + if (isset($_POST['policy_disabled']) && $_POST['policy_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['policy_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}policies SET $updateStr WHERE ID = ".$db->quote($_POST['policy_id'])); + if ($res) { +?> +
Policy updated
+ +
Error updating policy!
+
errorInfo()) ?>
+ +
No changes made to policy
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-delete.php b/ehcp/fixes/policyd/webui/policy-delete.php new file mode 100644 index 0000000..9d62ed5 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-delete.php @@ -0,0 +1,200 @@ + array( + "Back to policies" => "policy-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a policy was selected + if (isset($_POST['policy_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No policy selected
+ + +beginTransaction(); + + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}policy_members WHERE PolicyID = ".$db->quote($_POST['policy_id'])); + if ($res === FALSE) { +?> +
Error clearing policy_members!
+
errorInfo()) ?>
+exec("DELETE FROM ${DB_TABLE_PREFIX}greylisting WHERE PolicyID = ".$db->quote($_POST['policy_id'])); + if ($res === FALSE) { +?> +
Error clearing greylisting!
+
errorInfo()) ?>
+exec("DELETE FROM ${DB_TABLE_PREFIX}access_control WHERE PolicyID = ".$db->quote($_POST['policy_id'])); + if ($res === FALSE) { +?> +
Error clearing access_control
+
errorInfo()) ?>
+exec("DELETE FROM ${DB_TABLE_PREFIX}checkspf WHERE PolicyID = ".$db->quote($_POST['policy_id'])); + if ($res === FALSE) { +?> +
Error clearing checkspf!
+
errorInfo()) ?>
+exec("DELETE FROM ${DB_TABLE_PREFIX}checkhelo WHERE PolicyID = ".$db->quote($_POST['policy_id'])); + if ($res === FALSE) { +?> +
Error clearing checkhelo!
+
errorInfo()) ?>
+query("SELECT ID FROM ${DB_TABLE_PREFIX}quotas WHERE PolicyID = ".$db->quote($_POST['policy_id'])) as $row) { + array_push($quotas_to_delete, $row['id']); + } + + # Proceed if we actually have quotas + if (count($quotas_to_delete) > 0) { + $quotas_to_delete = implode(",",$quotas_to_delete); + + # Grab limits we need to delete + $limits_to_delete = array(); + foreach ($db->query("SELECT ID FROM ${DB_TABLE_PREFIX}quotas_limits WHERE QuotasID IN (".$quotas_to_delete.")") as $row) { + array_push($limits_to_delete, $row['id']); + } + + # Proceed if we actually have limits + if (count($limits_to_delete) > 0) { + $limits_to_delete = implode(",",$limits_to_delete); + + # Do delete of quotas + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}quotas_tracking WHERE QuotasLimitsID IN (".$limits_to_delete.")"); + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}quotas_limits WHERE ID IN (".$limits_to_delete.")"); + } + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}quotas WHERE ID IN (".$quotas_to_delete.")"); + } + + # Grab accounting we need to delete + $accounting_to_delete = array(); + foreach ($db->query("SELECT ID FROM ${DB_TABLE_PREFIX}accounting WHERE PolicyID = ".$db->quote($_POST['policy_id'])) as $row) { + array_push($accounting_to_delete, $row['id']); + } + + # Proceed if we actually have accounting + if (count($accounting_to_delete) > 0) { + $accounting_to_delete = implode(",",$accounting_to_delete); + + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}accounting_tracking WHERE AccountingID IN (".$accounting_to_delete.")"); + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}accounting WHERE ID IN (".$accounting_to_delete.")"); + } + + # Main policy + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}policies WHERE ID = ".$db->quote($_POST['policy_id'])); + + if ($res !== FALSE) { +?> +
Policy deleted
+commit(); + } else { +?> +
Error deleting policy!
+
errorInfo()) ?>
+rollback(); + } + } else { +?> +
Policy not deleted, aborted by user
+ +
Invocation error, no policy ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/policy-group-add.php b/ehcp/fixes/policyd/webui/policy-group-add.php new file mode 100644 index 0000000..24b29ac --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-add.php @@ -0,0 +1,105 @@ + array( + "Back to groups" => "policy-group-main.php", + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + + + + + +
Name
Comment
+ +
+
+ + + +prepare("INSERT INTO ${DB_TABLE_PREFIX}policy_groups (Name,Comment,Disabled) VALUES (?,?,1)"); + + $res = $stmt->execute(array( + $_POST['policy_group_name'], + $_POST['policy_group_comment'] + )); + if ($res) { +?> +
Policy group created
+ +
Failed to create policy group
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-group-change.php b/ehcp/fixes/policyd/webui/policy-group-change.php new file mode 100644 index 0000000..21d096c --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-change.php @@ -0,0 +1,147 @@ + array( + "Back to groups" => "policy-group-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a policy was selected + if (isset($_POST['policy_group_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Name, Disabled FROM ${DB_TABLE_PREFIX}policy_groups WHERE ID = ?"); +?> + + +
+
+ + +
+execute(array($_POST['policy_group_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No policy selected
+ + +quote($_POST['policy_group_name'])); + } + if (isset($_POST['policy_group_disabled']) && $_POST['policy_group_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['policy_group_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}policy_groups SET $updateStr WHERE ID = ".$db->quote($_POST['policy_group_id'])); + if ($res) { +?> +
Policy group updated
+ +
Error updating policy group!
+
errorInfo()) ?>
+ +
No changes made to policy group
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-group-delete.php b/ehcp/fixes/policyd/webui/policy-group-delete.php new file mode 100644 index 0000000..1ee9d15 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-delete.php @@ -0,0 +1,137 @@ + array( + "Back to groups" => "policy-group-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a policy group was selected + if (isset($_POST['policy_group_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No policy group selected
+ + +beginTransaction(); + + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}policy_group_members WHERE PolicyGroupID = ".$db->quote($_POST['policy_group_id'])); + if ($res !== FALSE) { +?> +
Policy group members deleted
+ +
Error deleting policy group members!
+
errorInfo()) ?>
+rollback(); + } + + if ($res !== FALSE) { + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}policy_groups WHERE ID = ".$db->quote($_POST['policy_group_id'])); + if ($res) { +?> +
Policy group deleted
+ +
Error deleting policy group!
+
errorInfo()) ?>
+rollback(); + } + } + + if ($res) { + $db->commit(); + } + } else { +?> +
Policy group not deleted, aborted by user
+ +
Invocation error, no policy group ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/policy-group-main.php b/ehcp/fixes/policyd/webui/policy-group-main.php new file mode 100644 index 0000000..11b7cd6 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-main.php @@ -0,0 +1,102 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
NameDisabled
name ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/policy-group-member-add.php b/ehcp/fixes/policyd/webui/policy-group-member-add.php new file mode 100644 index 0000000..1c66afc --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-member-add.php @@ -0,0 +1,111 @@ + array( + "Back to groups" => "policy-group-main.php", + "Back to members" => "policy-group-member-main.php?policy_group_id=".$_POST['policy_group_id'], + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + + + + + +
+ Member + +
Comment
+ +
+
+ + + +prepare("INSERT INTO ${DB_TABLE_PREFIX}policy_group_members (PolicyGroupID,Member,Comment,Disabled) VALUES (?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['policy_group_id'], + $_POST['policy_group_member_member'], + $_POST['policy_group_member_comment'] + )); + if ($res) { +?> +
Policy group member created
+ +
Failed to create policy group member
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-group-member-change.php b/ehcp/fixes/policyd/webui/policy-group-member-change.php new file mode 100644 index 0000000..def00d2 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-member-change.php @@ -0,0 +1,161 @@ + array( + "Back to groups" => "policy-group-main.php", + "Back to members" => "policy-group-member-main.php?policy_group_id=".$_POST['policy_group_id'], + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a policy was selected + if (isset($_POST['policy_group_member_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Member, Comment, Disabled FROM ${DB_TABLE_PREFIX}policy_group_members WHERE ID = ?"); +?> + + +
+
+ + + +
+execute(array($_POST['policy_group_member_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
+ Member + + member ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No policy selected
+ + +quote($_POST['policy_group_member_member'])); + } + if (!empty($_POST['policy_group_member_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['policy_group_member_comment'])); + } + if (isset($_POST['policy_group_member_disabled']) && $_POST['policy_group_member_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['policy_group_member_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}policy_group_members SET $updateStr WHERE ID = ".$db->quote($_POST['policy_group_member_id'])); + if ($res) { +?> +
Policy group member updated
+ +
Error updating policy group member!
+
errorInfo()) ?>
+ +
No changes made to policy group member
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-group-member-delete.php b/ehcp/fixes/policyd/webui/policy-group-member-delete.php new file mode 100644 index 0000000..a9270fe --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-member-delete.php @@ -0,0 +1,116 @@ + array( + "Back to groups" => "policy-group-main.php", + "Back to members" => "policy-group-member-main.php?policy_group_id=".$_POST['policy_group_id'], + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a policy group member was selected + if (isset($_POST['policy_group_member_id'])) { +?> + + +
+
+ + + +
+
+ Are you very sure?
+ + +
+
+ +
No policy group member selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}policy_group_members WHERE ID = ".$db->quote($_POST['policy_group_member_id'])); + if ($res) { +?> +
Policy group member deleted
+ +
Error deleting policy group member!
+
errorInfo()) ?>
+ +
Policy group member not deleted, aborted by user
+ +
Invocation error, no policy group member ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/policy-group-member-main.php b/ehcp/fixes/policyd/webui/policy-group-member-main.php new file mode 100644 index 0000000..6872714 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-group-member-main.php @@ -0,0 +1,125 @@ + array( + "Back to groups" => "policy-group-main.php" + ), +)); + + +# Check a policy group was selected +if (isset($_REQUEST['policy_group_id'])) { + +?> + + +prepare("SELECT Name FROM ${DB_TABLE_PREFIX}policy_groups WHERE ID = ?"); + $policy_group_stmt->execute(array($_REQUEST['policy_group_id'])); + $row = $policy_group_stmt->fetchObject(); + $policy_group_stmt->closeCursor(); +?> +
+
+ +
+
+
Policy Group: name ?>
+ + Action + +
+ +

+ + + + + + + +prepare("SELECT ID, Member, Disabled FROM ${DB_TABLE_PREFIX}policy_group_members WHERE PolicyGroupID = ?"); + $res = $stmt->execute(array($_REQUEST['policy_group_id'])); + + $i = 0; + + # Loop with rows + while ($row = $stmt->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
MemberDisabled
member ?>disabled ? 'yes' : 'no' ?>
+

+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-main.php b/ehcp/fixes/policyd/webui/policy-main.php new file mode 100644 index 0000000..4a3d86f --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-main.php @@ -0,0 +1,112 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + + +closeCursor(); +?> +
NamePriorityDescriptionDisabled
name ?>priority ?>description ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/policy-member-add.php b/ehcp/fixes/policyd/webui/policy-member-add.php new file mode 100644 index 0000000..c330530 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-member-add.php @@ -0,0 +1,133 @@ + array( + "Back to policies" => "policy-main.php", + "Back to members" => "policy-member-main.php?policy_id=".$_REQUEST['policy_id'], + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + + + + + + + + + +
+ Source + +
+ Destination + +
Comment
+ +
+
+ +
No policy ID, invalid invocation?
+ + + + +
A blank member is useless?
+prepare("INSERT INTO ${DB_TABLE_PREFIX}policy_members (PolicyID,Source,Destination,Comment,Disabled) VALUES (?,?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['policy_id'], + $_POST['member_source'], + $_POST['member_destination'], + $_POST['member_comment'] + )); + if ($res) { +?> +
Policy member created
+ +
Failed to create policy member
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/policy-member-change.php b/ehcp/fixes/policyd/webui/policy-member-change.php new file mode 100644 index 0000000..ee7dc9d --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-member-change.php @@ -0,0 +1,182 @@ + array( + "Back to policies" => "policy-main.php", + "Back to members" => "policy-member-main.php?policy_id=".$_REQUEST['policy_id'], + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a policy member was selected + if (isset($_POST['policy_member_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Source, Destination, Comment, Disabled FROM ${DB_TABLE_PREFIX}policy_members WHERE ID = ?"); + $res = $stmt->execute(array($_POST['policy_member_id'])); + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
+ Source + + source ?>
+ Destination + + destination ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+ +

+ +
+
+ +
No policy selected
+ + +quote($_POST['policy_member_source'])); + } + if (isset($_POST['policy_member_destination']) && $_POST['policy_member_destination'] != "") { + array_push($updates,"Destination = ".$db->quote($_POST['policy_member_destination'])); + } + if (!empty($_POST['policy_member_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['policy_member_comment'])); + } + if (isset($_POST['policy_member_disabled']) && $_POST['policy_member_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['policy_member_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}policy_members SET $updateStr WHERE ID = ".$db->quote($_POST['policy_member_id'])); + if ($res) { +?> +
Policy member updated
+ +
Error updating policy member!
+
errorInfo()) ?>
+ +
No policy member updates
+ +
No policy member data available
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/policy-member-delete.php b/ehcp/fixes/policyd/webui/policy-member-delete.php new file mode 100644 index 0000000..05f67c8 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-member-delete.php @@ -0,0 +1,117 @@ + array( + "Back to policies" => "policy-main.php", + "Back to members" => "policy-member-main.php?policy_id=".$_REQUEST['policy_id'], + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a policy was selected + if (isset($_POST['policy_member_id'])) { +?> + + +
+
+ + + +
+ +
+ Are you very sure?
+ + +
+
+ +
No policy selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}policy_members WHERE ID = ".$db->quote($_POST['policy_member_id'])); + if ($res) { +?> +
Policy member deleted
+ +
Error deleting policy member!
+
errorInfo()) ?>
+ +
Policy member not deleted, aborted by user
+ +
Invocation error, no policy member ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/policy-member-main.php b/ehcp/fixes/policyd/webui/policy-member-main.php new file mode 100644 index 0000000..53b6423 --- /dev/null +++ b/ehcp/fixes/policyd/webui/policy-member-main.php @@ -0,0 +1,127 @@ + array( + "Back to policies" => "policy-main.php" + ), +)); + + +# Check a policy was selected +if (isset($_REQUEST['policy_id'])) { + +?> + + +prepare("SELECT Name FROM ${DB_TABLE_PREFIX}policies WHERE ID = ?"); + $policy_stmt->execute(array($_REQUEST['policy_id'])); + $row = $policy_stmt->fetchObject(); + $policy_stmt->closeCursor(); +?> +
+
+ +
+
+
Policy: name ?>
+ + Action + +
+ +

+ + + + + + + + +prepare("SELECT ID, Source, Destination, Disabled FROM ${DB_TABLE_PREFIX}policy_members WHERE PolicyID = ?"); + $res = $stmt->execute(array($_REQUEST['policy_id'])); + + $i = 0; + + # Loop with rows + while ($row = $stmt->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
SourceDestinationDisabled
source) ? 'any' : $row->source ?>destination) ? 'any' : $row->destination ?>disabled ? 'yes' : 'no' ?>
+

+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-aliases-add.php b/ehcp/fixes/policyd/webui/postfix-aliases-add.php new file mode 100644 index 0000000..908f981 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-aliases-add.php @@ -0,0 +1,136 @@ + array( + "Back to Aliases" => "postfix-aliases-main.php", + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + +
+ Alias Address + + @ + +
+ Goto + +
+ +
+
+ + + +prepare("SELECT ID, DomainName, Type, Transport, Disabled FROM ${DB_TABLE_PREFIX}transports WHERE ID = ?"); + $res = $stmt->execute(array($_POST['postfix_transport_id'])); + $row = $stmt->fetchObject(); + + $mailbox = $_POST['postfix_alias_address'] . '@' . $row->domainname; + + + $stmt = $db->prepare("INSERT INTO ${DB_TABLE_PREFIX}aliases (TransportID,Address,MailAddress,Goto,Disabled) VALUES (?,?,?,?,0)"); + $res = $stmt->execute(array( + $row->id, + $_POST['postfix_alias_address'], + $mailbox, + $_POST['postfix_alias_goto'] + )); + + if ($res) { +?> +
Postfix alias created
+ +
Failed to create Postfix alias
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-aliases-change.php b/ehcp/fixes/policyd/webui/postfix-aliases-change.php new file mode 100644 index 0000000..0bf8f89 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-aliases-change.php @@ -0,0 +1,157 @@ + array( + "Back to Aliases" => "postfix-aliases-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a alias was selected + if (isset($_POST['postfix_alias_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, MailAddress, Goto, Disabled FROM ${DB_TABLE_PREFIX}aliases WHERE ID = ?"); +?> + + +
+
+ + +
+execute(array($_POST['postfix_alias_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); + +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Alias Addressmailaddress ?>
+ Goto + + goto ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No alias selected
+ + +quote($_POST['postfix_alias_goto'])); + } + if (isset($_POST['postfix_alias_disabled']) && $_POST['postfix_alias_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['postfix_alias_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}aliases SET $updateStr WHERE ID = ".$db->quote($_POST['postfix_alias_id'])); + if ($res) { +?> +
Postfix alias updated
+ +
Error updating Postfix alias!
+
errorInfo()) ?>
+ +
No changes made to Postfix alias
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-aliases-delete.php b/ehcp/fixes/policyd/webui/postfix-aliases-delete.php new file mode 100644 index 0000000..b11b324 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-aliases-delete.php @@ -0,0 +1,115 @@ + array( + "Back to Aliases" => "postfix-aliases-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a Postfix alias was selected + if (isset($_POST['postfix_alias_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No Postfix alias selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}aliases WHERE ID = ".$db->quote($_POST['postfix_alias_id'])); + if ($res) { +?> +
Postfix alias deleted
+ +
Error deleting Postfix alias!
+
errorInfo()) ?>
+ +
Postfix alias not deleted, aborted by user
+ +
Invocation error, no Postfix alias ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/postfix-aliases-main.php b/ehcp/fixes/policyd/webui/postfix-aliases-main.php new file mode 100644 index 0000000..33d5b89 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-aliases-main.php @@ -0,0 +1,101 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
AliasDestinationDisabled
mailaddress ?>goto ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-add.php b/ehcp/fixes/policyd/webui/postfix-distgroups-add.php new file mode 100644 index 0000000..d518b2b --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-add.php @@ -0,0 +1,132 @@ + array( + "Back to groups" => "postfix-distgroups-main.php", + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + + + + + +
Mail Address + @ + +
Comment
+ +
+
+ + + +prepare("SELECT ID, DomainName, Type, Transport, Disabled FROM ${DB_TABLE_PREFIX}transports WHERE ID = ?"); + $res = $stmt->execute(array($_POST['postfix_transport_id'])); + $row = $stmt->fetchObject(); + + $mailbox = $_POST['postfix_group_address'] . '@' . $row->domainname; + + + $stmt = $db->prepare("INSERT INTO ${DB_TABLE_PREFIX}distribution_groups (TransportID,Address,MailAddress,Comment,Disabled) VALUES (?,?,?,?,0)"); + + $res = $stmt->execute(array( + $row->id, + $_POST['postfix_group_address'], + $mailbox, + $_POST['postfix_group_comment'] + )); + + if ($res) { +?> +
Distribution group created
+ +
Failed to create distribution group
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-change.php b/ehcp/fixes/policyd/webui/postfix-distgroups-change.php new file mode 100644 index 0000000..f3348ee --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-change.php @@ -0,0 +1,152 @@ + array( + "Back to groups" => "postfix-distgroups-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a group was selected + if (isset($_POST['postfix_group_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, MailAddress, Comment, Disabled FROM ${DB_TABLE_PREFIX}distribution_groups WHERE ID = ?"); +?> + + +
+
+ + +
+execute(array($_POST['postfix_group_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Mail Addressmailaddress ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No distribution group selected
+ + +quote($_POST['postfix_group_comment'])); + } + if (isset($_POST['postfix_group_disabled']) && $_POST['postfix_group_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['postfix_group_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}distribution_groups SET $updateStr WHERE ID = ".$db->quote($_POST['postfix_group_id'])); + if ($res) { +?> +
Distribution group updated
+ +
Error updating distribution group!
+
errorInfo()) ?>
+ +
No changes made to distribution group
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-delete.php b/ehcp/fixes/policyd/webui/postfix-distgroups-delete.php new file mode 100644 index 0000000..4fb9b8b --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-delete.php @@ -0,0 +1,136 @@ + array( + "Back to groups" => "postfix-distgroups-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a postfix group was selected + if (isset($_POST['postfix_group_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No distribution group selected
+ + +exec(" + DELETE FROM + ${DB_TABLE_PREFIX}distribution_group_members + WHERE + DistributionGroupID = ".$db->quote($_POST['postfix_group_id']) + ); + if ($res !== FALSE) { +?> +
Distribution group members deleted
+ +
Error deleting distribution group members!
+
errorInfo()) ?>
+rollback(); + } + + if ($res !== FALSE) { + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}distribution_groups WHERE ID = ".$db->quote($_POST['postfix_group_id'])); + if ($res) { +?> +
Distribution group deleted
+ +
Error deleting distribution group!
+
errorInfo()) ?>
+ +
Distribution group not deleted, aborted by user
+ +
Invocation error, no distribution group ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-main.php b/ehcp/fixes/policyd/webui/postfix-distgroups-main.php new file mode 100644 index 0000000..0da0556 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-main.php @@ -0,0 +1,102 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
Mail AddressDisabled
mailaddress ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-member-add.php b/ehcp/fixes/policyd/webui/postfix-distgroups-member-add.php new file mode 100644 index 0000000..7861736 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-member-add.php @@ -0,0 +1,103 @@ + array( + "Back to groups" => "postfix-distgroups-main.php", + "Back to members" => "postfix-distgroups-member-main.php?postfix_group_id=".$_POST['postfix_group_id'], + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + +
Email Address
+ +
+
+ + + +prepare("INSERT INTO ${DB_TABLE_PREFIX}distribution_group_members (DistributionGroupID,Goto,Disabled) VALUES (?,?,0)"); + + $res = $stmt->execute(array( + $_POST['postfix_group_id'], + $_POST['postfix_group_member_goto'] + )); + + + if ($res) { +?> +
Distribution group member created
+ +
Failed to create distribution group member
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-member-change.php b/ehcp/fixes/policyd/webui/postfix-distgroups-member-change.php new file mode 100644 index 0000000..4274d7d --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-member-change.php @@ -0,0 +1,148 @@ + array( + "Back to groups" => "postfix-distgroups-main.php", + "Back to members" => "postfix-distgroups-member-main.php?postfix_group_id=".$_POST['postfix_group_id'], + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a postfix was selected + if (isset($_POST['postfix_group_member_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Goto, Disabled FROM ${DB_TABLE_PREFIX}distribution_group_members WHERE ID = ?"); +?> + + +
+
+ + + +
+execute(array($_POST['postfix_group_member_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + +
Old ValueNew Value
Email Addressgoto ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No distribution group selected
+ + +quote($_POST['postfix_group_member_goto'])); + } + if (isset($_POST['postfix_group_member_disabled']) && $_POST['postfix_group_member_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['postfix_group_member_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}distribution_group_members SET $updateStr WHERE ID = ".$db->quote($_POST['postfix_group_member_id'])); + if ($res) { +?> +
Distribution group member updated
+ +
Error updating distribution group member!
+ +
No changes made to distribution group member
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-member-delete.php b/ehcp/fixes/policyd/webui/postfix-distgroups-member-delete.php new file mode 100644 index 0000000..cbc5e5b --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-member-delete.php @@ -0,0 +1,117 @@ + array( + "Back to groups" => "postfix-group-main.php", + "Back to members" => "postfix-distgroups-member-main.php?postfix_group_id=".$_POST['postfix_group_id'], + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a postfix group member was selected + if (isset($_POST['postfix_group_member_id'])) { +?> + + +
+
+ + + +
+
+ Are you very sure?
+ + +
+
+ +
No distribution group member selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}distribution_group_members WHERE ID = ".$db->quote($_POST['postfix_group_member_id'])); + + if ($res) { +?> +
Distribution group member deleted
+ +
Error deleting distribution group member!
+
errorInfo()) ?>
+ +
Distribution group member not deleted, aborted by user
+ +
Invocation error, no distribution group member ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/postfix-distgroups-member-main.php b/ehcp/fixes/policyd/webui/postfix-distgroups-member-main.php new file mode 100644 index 0000000..901ee14 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-distgroups-member-main.php @@ -0,0 +1,132 @@ + array( + "Back to groups" => "postfix-distgroups-main.php" + ), +)); + + +# Check a postfix group was selected +if (isset($_REQUEST['postfix_group_id'])) { + +?> + + +prepare("SELECT MailAddress FROM ${DB_TABLE_PREFIX}distribution_groups WHERE ID = ?"); + $postfix_group_stmt->execute(array($_REQUEST['postfix_group_id'])); + $row = $postfix_group_stmt->fetchObject(); + $postfix_group_stmt->closeCursor(); +?> +
+
+ +
+
+
Distribution Group: mailaddress ?>
+ + Action + +
+ +

+ + + + + + + +prepare(" + SELECT + ID, Goto, Disabled + FROM + ${DB_TABLE_PREFIX}distribution_group_members + WHERE + DistributionGroupID = ? ORDER BY Goto + "); + $res = $stmt->execute(array($_REQUEST['postfix_group_id'])); + + $i = 0; + + # Loop with rows + while ($row = $stmt->fetchObject()) { +?> + + + + + +closeCursor(); +?> +
GotoDisabled
goto ?>disabled ? 'yes' : 'no' ?>
+

+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-mailboxes-add.php b/ehcp/fixes/policyd/webui/postfix-mailboxes-add.php new file mode 100644 index 0000000..53f315d --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-mailboxes-add.php @@ -0,0 +1,166 @@ + array( + "Back to Mailboxes" => "postfix-mailboxes-main.php", + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Email Address + @ + +
Name
Password
+ Quota (in Mbyte) + + (0 = unlimited)
+ BCC + +
Comment
+ +
+
+ + + +prepare("SELECT ID, DomainName, Type, Transport, Disabled FROM ${DB_TABLE_PREFIX}transports WHERE ID = ?"); + $res = $stmt->execute(array($_POST['postfix_transport_id'])); + $row = $stmt->fetchObject(); + + $mailbox = $_POST['postfix_mailbox_address'] . '@' . $row->domainname; + + $stmt = $db->prepare(" + INSERT INTO ${DB_TABLE_PREFIX}mailboxes + (TransportID,Address,Mailbox,Password,Quota,Name,BCC,Comment,Disabled) + VALUES + (?,?,?,?,?,?,?,?,0) + "); + + # Encrypt password + $password = "{MD5}".base64_encode(pack("H*", md5($_POST['postfix_mailbox_password']))); + + $res = $stmt->execute(array( + $_POST['postfix_transport_id'], + $_POST['postfix_mailbox_address'], + $mailbox, + $password, + $_POST['postfix_mailbox_quota'], + $_POST['postfix_mailbox_name'], + $_POST['postfix_mailbox_bcc'], + $_POST['postfix_mailbox_comment'], + )); + + + if ($res) { +?> +
Mailbox created
+ +
Failed to create mailbox
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-mailboxes-change.php b/ehcp/fixes/policyd/webui/postfix-mailboxes-change.php new file mode 100644 index 0000000..cd5ca8c --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-mailboxes-change.php @@ -0,0 +1,217 @@ + array( + "Back to Mailboxes" => "postfix-mailboxes-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a mailbox was selected + if (isset($_POST['postfix_mailbox_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ID, + Mailbox, + Quota, + Name, + BCC, + Comment, + Disabled + FROM + ${DB_TABLE_PREFIX}mailboxes + WHERE + ID = ? + "); +?> + + +
+
+ + +
+execute(array($_POST['postfix_mailbox_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Mailboxmailbox ?>
Namename ?>
Password*encrypted*
+ Quota (in Mbyte) + + quota ?> (0 = unlimited)
+ BCC + + bcc ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No mailbox selected
+ + +quote($_POST['postfix_mailbox_name'])); + } + + if (!empty($_POST['postfix_mailbox_password'])) { + # Encrypt password + $password = "{MD5}".base64_encode(pack("H*", md5($_POST['postfix_mailbox_password']))); + + array_push($updates,"Password = ".$db->quote($password)); + } + + if (isset($_POST['postfix_mailbox_quota'])) { + if (!empty($_POST['postfix_mailbox_quota'])) { + $quota = $db->quote($_POST['postfix_mailbox_quota']); + array_push($updates,"Quota = ".$quota); + } + } + + if (!empty($_POST['postfix_mailbox_bcc'])) { + array_push($updates,"BCC = ".$db->quote($_POST['postfix_mailbox_bcc'])); + } + + if (!empty($_POST['postfix_mailbox_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['postfix_mailbox_comment'])); + } + + if (isset($_POST['postfix_mailbox_disabled']) && $_POST['postfix_mailbox_disabled'] != "") { + array_push($updates,"Disabled = ".$db->quote($_POST['postfix_mailbox_disabled'])); + } + + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}mailboxes SET $updateStr WHERE ID = ".$db->quote($_POST['postfix_mailbox_id'])); + if ($res) { +?> +
Mailbox updated
+ +
Error updating mailbox!
+
errorInfo()) ?>
+ +
No changes made to Postfix mailbox
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-mailboxes-delete.php b/ehcp/fixes/policyd/webui/postfix-mailboxes-delete.php new file mode 100644 index 0000000..546002d --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-mailboxes-delete.php @@ -0,0 +1,160 @@ + array( + "Back to Mailboxes" => "postfix-mailboxes-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a Postfix mailbox was selected + if (isset($_POST['postfix_mailbox_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No mailbox selected
+ + +query(" + SELECT + Mailbox + FROM + ${DB_TABLE_PREFIX}mailboxes + WHERE + ID = ".$db->quote($_POST['postfix_mailbox_id'])." + "); + + if ($res !== FALSE) { + # Pull in limit ID's + $row = $res->fetchObject(); + $res->closeCursor(); + $mailbox = $row->mailbox; + } else { +?> +
Error selecting mailbox!
+
errorInfo()) ?>
+beginTransaction(); + + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}distribution_group_members WHERE Goto = ".$db->quote($mailbox)); + if ($res !== FALSE) { +?> +
Mailbox removed from distribution groups
+ +
Error removing mailbox from distribution groups!
+
errorInfo()) ?>
+rollBack(); + } + + if ($res !== FALSE) { + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}mailboxes WHERE ID = ".$db->quote($_POST['postfix_mailbox_id'])); + if ($res) { +?> +
Mailbox deleted
+ +
Error deleting mailbox!
+
errorInfo()) ?>
+rollBack(); + } + } + + if ($res) { + $db->commit(); + } + + } else { +?> +
Mailbox not deleted, aborted by user
+ +
Invocation error, no mailbox ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/postfix-mailboxes-main.php b/ehcp/fixes/policyd/webui/postfix-mailboxes-main.php new file mode 100644 index 0000000..07c1867 --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-mailboxes-main.php @@ -0,0 +1,102 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + + + +
MailboxQuotaNameDisabled
mailbox ?>quota ?>name ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/postfix-transports-add.php b/ehcp/fixes/policyd/webui/postfix-transports-add.php new file mode 100644 index 0000000..39a25bc --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-transports-add.php @@ -0,0 +1,142 @@ + array( + "Back to Transports" => "postfix-transports-main.php", + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + +
Domain Name
+ Type + + + +
Data
+ +
+
+ + + +prepare("INSERT INTO ${DB_TABLE_PREFIX}transports (DomainName,Type,Transport,PTransport,Disabled) VALUES (?,?,?,?,0)"); + + # virtual + if ($_POST['postfix_transport_type'] == "0") { + $transport = $_POST['postfix_transport_domainname']; + $ptransport = "virtual:$transport"; + + # smtp + } elseif ($_POST['postfix_transport_type'] == "1") { + $transport = $_POST['postfix_transport_data']; + $ptransport = "smtp:$transport"; + } + + $res = $stmt->execute(array( + $_POST['postfix_transport_domainname'], + $_POST['postfix_transport_type'], + $transport, + $ptransport + )); + if ($res) { +?> +
Postfix transport created
+ +
Failed to create Postfix transport
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-transports-change.php b/ehcp/fixes/policyd/webui/postfix-transports-change.php new file mode 100644 index 0000000..8c90c2f --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-transports-change.php @@ -0,0 +1,187 @@ + array( + "Back to Transports" => "postfix-transports-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a transport was selected + if (isset($_POST['postfix_transport_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, DomainName, Type, Transport, Disabled FROM ${DB_TABLE_PREFIX}transports WHERE ID = ?"); +?> + + +
+
+ + +
+execute(array($_POST['postfix_transport_id'])); + + $row = $stmt->fetchObject(); + +?> + + + + + + + + + + + + + + + + + + + +type == "1") { +?> + + + + + + + + + + +
Old ValueNew Value
Domain Namedomainname ?>
+ Type + + type == "0") { + echo "Virtual"; + } elseif ($row->type == "1") { + echo "SMTP"; + } + ?>
Datatransport ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No policy selected
+ + +quote($_POST['postfix_transport_type'])); + } + + if (!empty($_POST['postfix_transport_data'])) { + # smtp + $transport = $_POST['postfix_transport_data']; + $ptransport = "smtp:$transport"; + array_push($updates ,"Transport = ".$db->quote($transport)); + array_push($updates ,"PTransport = ".$db->quote($ptransport)); + } + + if (isset($_POST['postfix_transport_disabled']) && $_POST['postfix_transport_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['postfix_transport_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}transports SET $updateStr WHERE ID = ".$db->quote($_POST['postfix_transport_id'])); + if ($res) { +?> +
Postfix transport updated
+ +
Error updating Postfix transport!
+
errorInfo()) ?>
+ +
No changes made to Postfix transport
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/postfix-transports-delete.php b/ehcp/fixes/policyd/webui/postfix-transports-delete.php new file mode 100644 index 0000000..ad502ee --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-transports-delete.php @@ -0,0 +1,115 @@ + array( + "Back to Transports" => "postfix-transports-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a Postfix transport was selected + if (isset($_POST['postfix_transport_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No Postfix transport selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}transports WHERE ID = ".$db->quote($_POST['postfix_transport_id'])); + if ($res) { +?> +
Postfix transport deleted
+ +
Error deleting Postfix transport!
+
errorInfo()) ?>
+ +
Postfix transport not deleted, aborted by user
+ +
Invocation error, no Postfix transport ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/postfix-transports-main.php b/ehcp/fixes/policyd/webui/postfix-transports-main.php new file mode 100644 index 0000000..73d5fef --- /dev/null +++ b/ehcp/fixes/policyd/webui/postfix-transports-main.php @@ -0,0 +1,101 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
DomainTransportDisabled
domainname ?>ptransport ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/quotas-add.php b/ehcp/fixes/policyd/webui/quotas-add.php new file mode 100644 index 0000000..29c3208 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-add.php @@ -0,0 +1,221 @@ + array( + "Back to quotas" => "quotas-main.php" + ), +)); + + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Track + + +
Period
Link to policy + +
Verdict + +
Data
Stop processing here + +
Comment
+ +
+
+ + + + + +
Policy ID cannot be empty
+ +
Name cannot be empty
+ +
Verdict cannot be empty
+ +
Stop procesing here field cannot be empty
+prepare(" + INSERT INTO ${DB_TABLE_PREFIX}quotas + (PolicyID,Name,Track,Period,Verdict,Data,LastQuota,Comment,Disabled) + VALUES + (?,?,?,?,?,?,?,?,1) + "); + + $res = $stmt->execute(array( + $_POST['quota_policyid'], + $_POST['quota_name'], + $quotaTrack, + $_POST['quota_period'], + $_POST['quota_verdict'], + $_POST['quota_lastquota'], + $_POST['quota_data'], + $_POST['quota_comment'] + )); + + if ($res) { +?> +
Quota created
+ +
Failed to create quota
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/quotas-change.php b/ehcp/fixes/policyd/webui/quotas-change.php new file mode 100644 index 0000000..225fe0f --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-change.php @@ -0,0 +1,280 @@ + array( + "Back to quotas" => "quotas-main.php" + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a quota was selected + if (isset($_POST['quota_id'])) { + # Prepare statement + $stmt = $db->prepare(" + SELECT + ${DB_TABLE_PREFIX}quotas.ID, ${DB_TABLE_PREFIX}quotas.PolicyID, ${DB_TABLE_PREFIX}quotas.Name, + ${DB_TABLE_PREFIX}quotas.Track, ${DB_TABLE_PREFIX}quotas.Period, + ${DB_TABLE_PREFIX}quotas.Verdict, ${DB_TABLE_PREFIX}quotas.Data, + ${DB_TABLE_PREFIX}quotas.LastQuota, + ${DB_TABLE_PREFIX}quotas.Comment, ${DB_TABLE_PREFIX}quotas.Disabled, + + ${DB_TABLE_PREFIX}policies.Name AS PolicyName + + FROM + ${DB_TABLE_PREFIX}quotas, ${DB_TABLE_PREFIX}policies + + WHERE + ${DB_TABLE_PREFIX}quotas.ID = ? + AND ${DB_TABLE_PREFIX}policies.ID = ${DB_TABLE_PREFIX}quotas.PolicyID + "); +?> + + +
+
+ + +
+execute(array($_POST['quota_id'])); + + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Namename ?>
Link to policypolicyname ?> + +
Tracktrack ?> + + +
Periodperiod ?>
Verdictverdict ?> + +
Datadata ?>
Stop processing herelastquota ? 'yes' : 'no' ?> + +
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+

+ +
+
+ +
No quota selected
+ + +quote($_POST['quota_policyid'])); + } + if (!empty($_POST['quota_name'])) { + array_push($updates,"Name = ".$db->quote($_POST['quota_name'])); + } + if (!empty($_POST['quota_track'])) { + if ($_POST['quota_track'] == "SenderIP") { + $quotaTrack = sprintf('%s:%s',$_POST['quota_track'],$_POST['quota_trackextra']); + } else { + $quotaTrack = $_POST['quota_track']; + } + + array_push($updates,"Track = ".$db->quote($quotaTrack)); + } + if (!empty($_POST['quota_period'])) { + array_push($updates,"Period = ".$db->quote($_POST['quota_period'])); + } + if (!empty($_POST['quota_verdict'])) { + array_push($updates,"Verdict = ".$db->quote($_POST['quota_verdict'])); + } + if (!empty($_POST['quota_data'])) { + array_push($updates,"Data = ".$db->quote($_POST['quota_data'])); + } + if (isset($_POST['quota_lastquota']) && $_POST['quota_lastquota'] != "") { + array_push($updates,"LastQuota = ".$db->quote($_POST['quota_lastquota'])); + } + if (!empty($_POST['quota_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['quota_comment'])); + } + if (isset($_POST['quota_disabled']) && $_POST['quota_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['quota_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}quotas SET $updateStr WHERE ID = ".$db->quote($_POST['quota_id'])); + if ($res) { +?> +
Quota updated
+ +
Error updating quota!
+
errorInfo()) ?>
+ +
No changes made to quota
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/quotas-delete.php b/ehcp/fixes/policyd/webui/quotas-delete.php new file mode 100644 index 0000000..4f9fa95 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-delete.php @@ -0,0 +1,207 @@ + array( + "Back to quotas" => "quotas-main.php", + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a quota was selected + if (isset($_POST['quota_id'])) { +?> + + +
+
+ + +
+ +
+ Are you very sure?
+ + +
+
+ +
No quota selected
+ + +query(" + SELECT + ID + FROM + ${DB_TABLE_PREFIX}quotas_limits + WHERE + QuotasID = ".$db->quote($_POST['quota_id'])." + "); + + $limitIDs = array(); + + if ($res !== FALSE) { + # Pull in limit ID's + while ($row = $res->fetchObject()) { + array_push($limitIDs,$row->id); + } + $res->closeCursor(); + + } else { +?> +
Error selecting quota limit IDs!
+
errorInfo()) ?>
+beginTransaction(); + + $stmt = $db->prepare(" + DELETE FROM + ${DB_TABLE_PREFIX}quotas_tracking + WHERE + QuotasLimitsID = ? + "); + + # Loop with limit ID's, start off true + $res = true; + foreach ($limitIDs as $id) { + $res = $stmt->execute(array($id)); + } + + if ($res !== FALSE) { +?> +
Quota tracking info deleted
+ +
Error deleting quota tracking info!
+
errorInfo()) ?>
+rollBack(); + } + } + + + # Check last query succeeded, if so continue + if ($res !== FALSE) { + $stmt = $db->prepare(" + DELETE FROM + ${DB_TABLE_PREFIX}quotas_limits + WHERE + QuotasID = ?" + ); + $res = $stmt->execute(array($_POST['quota_id'])); + + if ($res !== FALSE) { +?> +
Quota limits deleted
+ +
Error deleting quota limits!
+
errorInfo()) ?>
+rollBack(); + } + } + + # Check last query succeeded, if so continue + if ($res !== FALSE) { + $res = $db->exec("DELETE FROM ${DB_TABLE_PREFIX}quotas WHERE ID = ".$db->quote($_POST['quota_id'])); + if ($res) { +?> +
Quota deleted
+ +
Error deleting quota!
+
errorInfo()) ?>
+rollBack(); + } + } + + # Commit if last transaction succeeded + if ($res) { + $db->commit(); + } + + } else { +?> +
Quota not deleted, aborted by user
+ +
Invocation error, no quota ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/quotas-limits-add.php b/ehcp/fixes/policyd/webui/quotas-limits-add.php new file mode 100644 index 0000000..1316cb2 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-limits-add.php @@ -0,0 +1,131 @@ + array( + "Back to quotas" => "quotas-main.php", + "Back to quota limits" => "quotas-limits-main.php?quota_id=".$_REQUEST['quota_id'], + ), +)); + + +if ($_POST['frmaction'] == "add") { +?> + + +
+
+ + +
+ + + + + + + + + + + + + + + + +
Type + +
Counter Limit
Comment
+ +
+
+ +
No policy ID, invalid invocation?
+ + + + +
Counter limit is required
+prepare("INSERT INTO ${DB_TABLE_PREFIX}quotas_limits (QuotasID,Type,CounterLimit,Comment,Disabled) VALUES (?,?,?,?,1)"); + + $res = $stmt->execute(array( + $_POST['quota_id'], + $_POST['limit_type'], + $_POST['limit_counterlimit'], + $_POST['limit_comment'] + )); + if ($res) { +?> +
Quota limit created
+ +
Failed to create quota limit
+
errorInfo()) ?>
+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/quotas-limits-change.php b/ehcp/fixes/policyd/webui/quotas-limits-change.php new file mode 100644 index 0000000..9df4761 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-limits-change.php @@ -0,0 +1,181 @@ + array( + "Back to quotas" => "quotas-main.php", + "Back to limits" => "quotas-limits-main.php?quota_id=".$_REQUEST['quota_id'], + ), +)); + + + +# Display change screen +if ($_POST['frmaction'] == "change") { + + # Check a limit was selected + if (isset($_POST['quota_limit_id'])) { + # Prepare statement + $stmt = $db->prepare("SELECT ID, Type, CounterLimit, Comment, Disabled FROM ${DB_TABLE_PREFIX}quotas_limits WHERE ID = ?"); + $res = $stmt->execute(array($_POST['quota_limit_id'])); + $row = $stmt->fetchObject(); + $stmt->closeCursor(); +?> + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Old ValueNew Value
Typetype ?> + +
Counter Limitcounterlimit ?>
Commentcomment ?>
Disableddisabled ? 'yes' : 'no' ?> + +
+ +

+ +

+ +
+
+ +
No quota selected
+ + +quote($_POST['limit_type'])); + } + if (!empty($_POST['limit_counterlimit'])) { + array_push($updates,"CounterLimit = ".$db->quote($_POST['limit_counterlimit'])); + } + if (!empty($_POST['limit_comment'])) { + array_push($updates,"Comment = ".$db->quote($_POST['limit_comment'])); + } + if (isset($_POST['limit_disabled']) && $_POST['limit_disabled'] != "") { + array_push($updates ,"Disabled = ".$db->quote($_POST['limit_disabled'])); + } + + # Check if we have updates + if (sizeof($updates) > 0) { + $updateStr = implode(', ',$updates); + + $res = $db->exec("UPDATE ${DB_TABLE_PREFIX}quotas_limits SET $updateStr WHERE ID = ".$db->quote($_POST['quota_limit_id'])); + if ($res) { +?> +
Quota limit updated
+ +
Error updating quota limit!
+
errorInfo()) ?>
+ +
No quota limit updates
+ +
No quota limit data available
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/quotas-limits-delete.php b/ehcp/fixes/policyd/webui/quotas-limits-delete.php new file mode 100644 index 0000000..df39216 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-limits-delete.php @@ -0,0 +1,117 @@ + array( + "Back to quotas" => "quotas-main.php", + "Back to limits" => "quotas-limits-main.php?quota_id=".$_REQUEST['quota_id'], + ), +)); + + + +# Display delete confirm screen +if ($_POST['frmaction'] == "delete") { + + # Check a quota limit was selected + if (isset($_POST['quota_limit_id'])) { +?> + + +
+
+ + + +
+ +
+ Are you very sure?
+ + +
+
+ +
No quota limit selected
+ + +exec("DELETE FROM ${DB_TABLE_PREFIX}quotas_limits WHERE ID = ".$db->quote($_POST['quota_limit_id'])); + if ($res) { +?> +
Quota limit deleted
+ +
Error deleting quota limit!
+
errorInfo()) ?>
+ +
Quota limit not deleted, aborted by user
+ +
Invocation error, no quota limit ID
+ +
Invalid invocation
+ + diff --git a/ehcp/fixes/policyd/webui/quotas-limits-main.php b/ehcp/fixes/policyd/webui/quotas-limits-main.php new file mode 100644 index 0000000..04542b8 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-limits-main.php @@ -0,0 +1,126 @@ + array( + "Back to quotas" => "quotas-main.php" + ), +)); + + +# Check a policy was selected +if (isset($_REQUEST['quota_id'])) { + + $stmt = $db->prepare("SELECT Type, CounterLimit, Disabled FROM ${DB_TABLE_PREFIX}quota_limits WHERE QuotaID = ?"); + $quota_stmt = $db->prepare("SELECT Name FROM ${DB_TABLE_PREFIX}quotas WHERE ID = ?"); + $quota_stmt->execute(array($_REQUEST['quota_id'])); + $row = $quota_stmt->fetchObject(); + $quota_stmt->closeCursor(); +?> + + +
+
+ +
+
+ +
Quota: name ?>
+ + Action + +
+ +

+ + + + + + + + +prepare("SELECT ID, Type, CounterLimit, Disabled FROM ${DB_TABLE_PREFIX}quotas_limits WHERE QuotasID = ?"); + $res = $stmt->execute(array($_REQUEST['quota_id'])); + + $i = 0; + + # Loop with rows + while ($row = $stmt->fetchObject()) { +?> + + + + + + +closeCursor(); +?> +
TypeCounter LimitDisabled
type ?>counterlimit ?>disabled ? 'yes' : 'no' ?>
+

+ +
Invalid invocation
+ diff --git a/ehcp/fixes/policyd/webui/quotas-main.php b/ehcp/fixes/policyd/webui/quotas-main.php new file mode 100644 index 0000000..1905446 --- /dev/null +++ b/ehcp/fixes/policyd/webui/quotas-main.php @@ -0,0 +1,135 @@ + + + +
+ +
+ Action + +
+ +

+ + + + + + + + + + + + +query($sql); + + while ($row = $res->fetchObject()) { +?> + + + + + + + + + + +closeCursor(); +?> +
PolicyNameTrackPeriodVerdictDataDisabled
policyname ?>name ?>track ?>period ?>verdict ?>data ?>disabled ? 'yes' : 'no' ?>
+

+ diff --git a/ehcp/fixes/policyd/webui/stylesheet.css b/ehcp/fixes/policyd/webui/stylesheet.css new file mode 100644 index 0000000..9466742 --- /dev/null +++ b/ehcp/fixes/policyd/webui/stylesheet.css @@ -0,0 +1,248 @@ +/* + * + * Web interfce stylesheet + * Copyright (C) 2009-2011, AllWorldIT + * Copyright (C) 2008, LinuxRulz + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +body{ + color:#999999; + font-family: Arial, Sans-Serif; +} + + + +/* + * Main table + */ +#maintable { + width: 100%; +} + + +/* + * Header + */ +#header{ + background: #000000 url('images/bg.jpg') bottom center repeat-x; + text-align: center; + font-size: 150%; + font-weight: bold; +} + + + +/* + * Left hand menu + */ +#menu { + background-image: url("images/strips_onside.jpg"); + background-repeat: repeat-y; + vertical-align: top; +} + +#menu img { + border: none; +} + +#menu p { + padding-right: 10px; + margin-left: 5px; + color:#888; +} + +#menu a:link, a:visited { + color:#888; + text-decoration: none; +} + +#menu a:hover, a:active { + color:#FF6666; +} + +#menu ul { + margin-top: 0px; + list-style: url(images/bullet.jpg) disc; +} + +#menu p { + font-size: 110%; + font-weight: bold; + margin-bottom: 0; + margin-top: 10px; +} + + + + +/* + * Footer + */ +#footer{ + background: #000000 url('images/bg.jpg') top center repeat-x; + text-align: center; + font-weight: bold; +} + +#footer a, a:link { + color: #999999; + text-decoration: none; +} + +#footer a:hover { + color: #A5CE77; + text-decoration: none; +} + +#footerimages { + border: none; + text-align: center; +} + + +/* + * Top Menu (tabs) + */ +#topmenu ul { + margin: 0; + padding: 0 0 0 0; + list-style: none; +} +#topmenu li { + display: inline; + margin: 0; + padding: 0; +} +#topmenu a { + float: left; + background: url(images/menuleft.gif) no-repeat left top; + margin: 0 5px 0 0; + padding: 0 0 0 4px; + text-decoration: none; +} + +#topmenu a span { + float: left; + display: block; + background: url(images/menuright.gif) no-repeat right top; + padding: 5px 15px 4px 6px; + color: #000888; +} + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +#topmenu a span { + float: none; +} +/* End IE5-Mac hack */ +#topmenu a:hover span { + color: #999999; +} +#topmenu a:hover { + background-position: 0% -42px; +} +#topmenu a:hover span { + background-position: 100% -42px; +} + + +/* + * Main content + */ +.content { + width: 100%; + vertical-align: top; +} + +/* + * Main window content + */ +.pageheader { + background-color: #999999; + color: #000000; + width: 100%; + border: 1px solid black; + text-align: center; + font-weight: bold; + font-size: 110%; +} + +/* + * Results table + */ +.results { + border: none; + margin-left: auto; + margin-right: auto; +} + +.resultstitle td { + font-weight: bolder; + border: 1px solid black; + padding-left: 5px; + padding-right: 5px; +} + +.resultsitem td { + border-bottom: 1px dashed black; +} + + +/* + * Entry tables + */ +.entry { + border: solid black 1px; + margin-left: auto; + margin-right: auto; +} + +.entrytitle { + font-weight: bolder; +} + +.oldval { + background-color: #eeeeee; +} + + +/* + * Misc + */ +.texttop { + vertical-align: top; +} + +.textcenter { + text-align: center; +} + +#noborder { + border: none; +} + +a.help img { + border: none; +} + +#tooltip { + position: absolute; + z-index: 200; +} + +/* + * vim: ts=4 + */ diff --git a/ehcp/fixes/policyd/webui/tooltips/BubbleTooltips.js b/ehcp/fixes/policyd/webui/tooltips/BubbleTooltips.js new file mode 100644 index 0000000..30a4ea6 --- /dev/null +++ b/ehcp/fixes/policyd/webui/tooltips/BubbleTooltips.js @@ -0,0 +1,95 @@ +/*Javascript for Bubble Tooltips by Alessandro Fulciniti +http://pro.html.it - http://web-graphics.com */ + +function enableTooltips(id,element){ +var links,i,h; +if (!element) element = "a"; +if(!document.getElementById || !document.getElementsByTagName) return; +AddCss(); +h=document.createElement("span"); +h.id="btc"; +h.setAttribute("id","btc"); +h.style.position="absolute"; +document.getElementsByTagName("body")[0].appendChild(h); +if(id==null) links=document.getElementsByTagName(element); +else links=document.getElementById(id).getElementsByTagName(element); +for(i=0;i28) l=l.substr(0,25)+"..."; +//b.appendChild(document.createTextNode(l)); +//b.appendChild(document.createTextNode("hello world")); +tooltip.appendChild(b); +setOpacity(tooltip); +el.tooltip=tooltip; +el.onmouseover=showTooltip; +el.onmouseout=hideTooltip; +el.onmousemove=Locate; +} + +function showTooltip(e){ +document.getElementById("btc").appendChild(this.tooltip); +Locate(e); +} + +function hideTooltip(e){ +var d=document.getElementById("btc"); +if(d.childNodes.length>0) d.removeChild(d.firstChild); +} + +function setOpacity(el){ +el.style.filter="alpha(opacity:95)"; +el.style.KHTMLOpacity="0.95"; +el.style.MozOpacity="0.95"; +el.style.opacity="0.95"; +} + +function CreateEl(t,c){ +var x=document.createElement(t); +x.className=c; +x.style.display="block"; +return(x); +} + +function AddCss(){ +var l=CreateEl("link"); +l.setAttribute("type","text/css"); +l.setAttribute("rel","stylesheet"); +l.setAttribute("href","tooltips/bt.css"); +l.setAttribute("media","screen"); +document.getElementsByTagName("head")[0].appendChild(l); +} + +function Locate(e){ +var posx=0,posy=0; +if(e==null) e=window.event; +if(e.pageX || e.pageY){ + posx=e.pageX; posy=e.pageY; + } +else if(e.clientX || e.clientY){ + if(document.documentElement.scrollTop){ + posx=e.clientX+document.documentElement.scrollLeft; + posy=e.clientY+document.documentElement.scrollTop; + } + else{ + posx=e.clientX+document.body.scrollLeft; + posy=e.clientY+document.body.scrollTop; + } + } +document.getElementById("btc").style.top=(posy+10)+"px"; +document.getElementById("btc").style.left=(posx-20)+"px"; +} diff --git a/ehcp/fixes/policyd/webui/tooltips/bt.css b/ehcp/fixes/policyd/webui/tooltips/bt.css new file mode 100644 index 0000000..6b735a3 --- /dev/null +++ b/ehcp/fixes/policyd/webui/tooltips/bt.css @@ -0,0 +1,19 @@ +.tooltip { + width: 200px; + color: #00000; + font: 11px Arial, sans-serif; + font-weight: bold; + text-decoration: none; + text-align: center +} + +.tooltip span.top { + padding: 30px 8px 0; + background: url(bt.gif) no-repeat top; +} + +.tooltip b.bottom { + padding:3px 8px 15px; + color: #548912; + background: url(bt.gif) no-repeat bottom; +} diff --git a/ehcp/fixes/policyd/webui/tooltips/bt.gif b/ehcp/fixes/policyd/webui/tooltips/bt.gif new file mode 100644 index 0000000..6ea0294 Binary files /dev/null and b/ehcp/fixes/policyd/webui/tooltips/bt.gif differ diff --git a/ehcp/fixes/pop-before-smtp/pop-before-smtp.deb b/ehcp/fixes/pop-before-smtp/pop-before-smtp.deb new file mode 100644 index 0000000..e201f41 Binary files /dev/null and b/ehcp/fixes/pop-before-smtp/pop-before-smtp.deb differ diff --git a/ehcp/fixes/pop-before-smtp/pop-before-smtp_x64.deb b/ehcp/fixes/pop-before-smtp/pop-before-smtp_x64.deb new file mode 100644 index 0000000..e201f41 Binary files /dev/null and b/ehcp/fixes/pop-before-smtp/pop-before-smtp_x64.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3.jme_amd64.deb b/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3.jme_amd64.deb new file mode 100644 index 0000000..065b3ca Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3.jme_amd64.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3ubuntu1_i386.deb b/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3ubuntu1_i386.deb new file mode 100644 index 0000000..1040521 Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3ubuntu1_i386.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb b/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb new file mode 100644 index 0000000..f6f9329 Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb b/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb new file mode 100644 index 0000000..13118b1 Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/13.04/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/14.04/vsftpd_3.0.2-1ubuntu2_amd64.deb b/ehcp/fixes/vsftpd/ubuntu/14.04/vsftpd_3.0.2-1ubuntu2_amd64.deb new file mode 100644 index 0000000..ba96385 Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/14.04/vsftpd_3.0.2-1ubuntu2_amd64.deb differ diff --git a/ehcp/fixes/vsftpd/ubuntu/14.10/vsftpd_3.0.2-14ubuntu1_amd64.deb b/ehcp/fixes/vsftpd/ubuntu/14.10/vsftpd_3.0.2-14ubuntu1_amd64.deb new file mode 100644 index 0000000..e94facd Binary files /dev/null and b/ehcp/fixes/vsftpd/ubuntu/14.10/vsftpd_3.0.2-14ubuntu1_amd64.deb differ diff --git a/ehcp/fixes/vsftpd/x64/ldap_conf_64bit_vsftpd.tar.gz b/ehcp/fixes/vsftpd/x64/ldap_conf_64bit_vsftpd.tar.gz new file mode 100644 index 0000000..0fd0ae1 Binary files /dev/null and b/ehcp/fixes/vsftpd/x64/ldap_conf_64bit_vsftpd.tar.gz differ diff --git a/ehcp/fixftp.sh b/ehcp/fixftp.sh new file mode 100755 index 0000000..c74d597 --- /dev/null +++ b/ehcp/fixftp.sh @@ -0,0 +1,475 @@ +#!/bin/bash +# ehcp - Easy Hosting Control Panel install/remove by info@ehcpforce.tk (actually, no remove yet) +# this is a very basic shell installer, real installation in install_lib.php, which is called by install_1.php, install_2.php +# +# please contact me if you made any modifications.. or you need help +# msn/email: info@ehcpforce.tk +# skype/yahoo/gtalk: bvidinli + +# Marcel +# - added initial support for yum (RedHat/CentOS) +# - some code ordering, documentation and cleanup +# + + +ehcpversion="0.34" + + +chmod -Rf a+r * + +if [ "$1" == "noapt" ] ; then + noapt="noapt" +fi + +################################################################################################ +# Function Definitions # +################################################################################################ + +# Stub function for apt-get + +function installaptget () { + echo "now let's try to install apt-get on your system." + echo "Not yet implemented" + exit +} + +# Stub function fot yum + +function installyum () { + echo "now let's try to install yum on your system." + echo "Not yet implemented" +} + +# Initial Welcome Screen + +function ehcpHeader() { + echo + echo + echo "STAGE 1" + echo "=====================================================================" + echo + echo "--------------------EHCP PRE-INSTALLER $ehcpversion -------------------------" + echo "-----Easy Hosting Control Panel for Ubuntu, Debian and alikes--------" + echo "-------------------------www.ehcp.net--------------------------------" + echo "---------------------------------------------------------------------" + echo + echo + echo "Now, ehcp pre-installer begins, a series of operations will be performed and main installer will be invoked. " + echo "if any problem occurs, refer to www.ehcpforce.tk forum section, or contact me, mail/msn: info@ehcpforce.tk" + + echo "Please be patient, press enter to continue" + read + echo + echo "Note that ehcp can only be installed automatically on Debian based Linux OS'es or Linux'es with apt-get enabled..(Ubuntu, Kubuntu, debian and so on) Do not try to install ehcp with this installer on redhat, centos and non-debian Linux's... To use ehcp on no-debian systems, you need to manually install.. " + echo "this installer is for installing onto a clean, newly installed Ubuntu/Debian. If you install it on existing system, some existing packages will be removed after prompting, if they conflict with packages that are used in ehcp, so, be careful to answer yes/no when using in non-new system" + echo "Actually, I dont like saying like, 'No warranty, I cannot be responsible for any damage.... ', But, this is just a utility.. use at your own." + echo "ehcp also sends some usage data to developer for statistical purposes" + echo "press enter to continue" + read +} + +# Check for yum + +function checkyum () { + which yum > /dev/null 2>&1 + if [ "$?" == "0" ]; then + echo "yum is available" + return 0 + else + # This should never happen + echo "Please install yum" + installyum + fi +} + +# Check for apt-get + +function checkAptget(){ + + sayi=`which apt-get | wc -w` + if [ $sayi -eq 0 ] ; then + ehco "apt-get is not found." + installaptget + fi + + echo "apt-get seems to be installed on your system." + + + sayi=`grep -v "#" /etc/apt/sources.list | wc -l` + + if [ $sayi -lt 10 ] ; then + echo + echo "WARNING ! Your /etc/apt/sources.list file contains very few sources, This may cause problems installing some packages.. see http://www.ehcp.net/?q=node/389 for an example file" + echo "This may be normal for some versions of debian" + echo "press enter to continue or Ctrl-C to cancel and fix that file" + read + fi + +} + +# Function to be called when installing packages, by Marcel + +function installPack(){ + + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get install for:$1" + return + fi + + if [ $distro == "ubuntu" ] || [ $distro == "debian" ];then + # first, try to install without any prompt, then if anything goes wrong, normal install.. + apt-get -y --no-remove --allow-unauthenticated install $1 + if [ $? -ne 0 ]; then + apt-get --allow-unauthenticated install $1 + fi + else + # Yum is nice, you don't get prompted :) + yum -y -t install $1 + fi +} + +function logToFile(){ + logfile="ehcp-apt-get-install.log" + echo "$1" >> $logfile +} + +function aptget_Update(){ + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get update" + return + fi + + apt-get update +} + +function aptgetInstall(){ + + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get install for:$1" + return + fi + + # first, try to install without any prompt, then if anything goes wrong, normal install.. + cmd="apt-get -y --no-remove --allow-unauthenticated install $1" + logToFile "$cmd" + $cmd + + if [ $? -ne 0 ]; then + cmd="apt-get --allow-unauthenticated install $1" + logToFile "$cmd" + $cmd + fi + +} + +function aptgetRemove(){ + if [ -n "$noapt" ] ; then # skip uninstall + echo "skipping apt-get remove for:$1" + return + fi + + # first, try to uninstall without any prompt, then if anything goes wrong, normal uninstall.. + cmd="apt-get -y remove $1" + logToFile "$cmd" + $cmd + + if [ $? -ne 0 ]; then + cmd="apt-get remove $1" + logToFile "$cmd" + $cmd + fi +} + +# Get distro name , by Marcel , thanks to marcel for fixing whole code syntax +# No longer works in Ubuntu 13.04 +# Fixed by Eric Martin +function checkDistro() { + # Get distro properly + if [ -e /etc/issue ]; then + distro=$( cat /etc/issue | awk '{ print $1 }' ) + fi + + if [ ! -z "$distro" ]; then + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + + if [ -z "$distro" ] || [[ "$distro" != "ubuntu" && "$distro" != "debian" ]]; then + if [ -e /etc/os-release ]; then + distro=$( cat /etc/os-release | grep -o "^NAME=.*" | grep -o "[^NAME=\"].*[^\"]" ) + fi + fi + + # Assume Ubuntu + if [ -z "$distro" ]; then + distro="ubuntu" + else + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + + # Get actual release version information + version=$( lsb_release -r | awk '{ print $2 }' ) + if [ -z "$version" ]; then + version=$( cat /etc/issue | awk '{ print $2 }' ) + fi + + # Separate year and version + if [[ "$version" == *.* ]]; then + yrelease=$( echo "$version" | cut -d. -f1 ) + mrelease=$( echo "$version" | cut -d. -f2 ) + fi + + # Get 64-bit OS or 32-bit OS [used in vsftpd fix] + if [ $( uname -m ) == 'x86_64' ]; then + OSBits=64 + else + OSBits=32 + fi + + # Another way to get the version number + # version=$(lsb_release -r | awk '{ print $2 }') + + echo "Your distro is $distro runnning version $version" + +} + +# Check if the running user is root, if not restart with sudo +function checkUser() { + if [ `whoami` != "root" ];then + echo "you are $who, you have to be root to use ehcp installation program. switching to root mode, please enter password or re-run install.sh as root" + sudo $0 # restart this with superuser-root privileges + exit + fi +} + +# Function to kill any running ehcp / php daemons +function killallEhcp() { + for i in `ps aux | grep ehcpdaemon.sh | grep -v grep | awk -F " " '{ print $2 }'`;do + kill -9 $i + done + + for i in `ps aux | grep 'php index.php' | grep -v grep | awk -F " " '{ print $2 }'`;do + kill -9 $i + done +} + + +function checkPhp(){ + which php + if [ $? -eq 0 ] ; then + echo "php seems installed. This is good.." + else + echo "PHP IS STILL NOT INSTALLED. THIS IS A SERIOUS PROBLEM. MOST PROBABLY, YOU WILL NOT BE ABLE TO CONTINUE. TRY TO INSTLL PHP yourself." + echo "if rest of install is successfull, then, this is a false alarm, just ignore" + fi +} + +function launchPanel(){ + firefox=`which firefox` + if [ -n "$firefox" ] ; then + echo "now, you should be able to navigate to your" + echo "panel admin username: admin " + echo "now will try to launch your control panel, if it is on local computer.. " + echo -e "\nwill use firefox as browser...\n\n" + $firefox "http://localhost" & + fi +} + +# Thanks a lot to earnolmartin@gmail.com for fail2ban integration & vsftpd fixes. + +function slaveDNSApparmorFix(){ # by earnolmartin@gmail.com + if [ -e /etc/apparmor.d/usr.sbin.named ]; then + echo -e "\nChanging bind apparmor rule to allow master DNS synchronization for slave setups.\n" + sed -i 's#/etc/bind/\*\* r,#/etc/bind/\*\* rw,#g' /etc/apparmor.d/usr.sbin.named + fi +} + +function libldapFix(){ # by earnolmartin@gmail.com + # install libldap, for vsftpd fix, without prompts + #Remove originally installed libpam-ldap if it exists + origDir=$(pwd) + aptgetRemove libpam-ldap + DEBIAN_FRONTEND=noninteractive apt-get -y install libpam-ldap + cd $patchDir + mkdir lib32gccfix + cd lib32gccfix + wget -O "ldap_conf.tar.gz" http://dinofly.com/files/linux/ldap_conf_64bit_vsftpd.tar.gz + tar -zxvf ldap_conf.tar.gz + cp ldap.conf /etc/ + cd $origDir +} + +function fixVSFTPConfig(){ # by earnolmartin@gmail.com + sed -i 's/chroot_local_user=NO/chroot_local_user=YES/g' /etc/vsftpd.conf + allowWriteValue=$( cat /etc/vsftpd.conf | grep -o "allow_writeable_chroot=.*" | grep -o "=.*$" | grep -o "[^=].*" ) + if [ -z "$allowWriteValue" ]; then + sh -c "echo 'allow_writeable_chroot=YES' >> /etc/vsftpd.conf" + else + sed -i 's/allow_writeable_chroot=NO/allow_writeable_chroot=YES/g' /etc/vsftpd.conf + fi + if [ $OSBits -eq "64" ]; then + #aptgetInstall libpam-ldap # this is required in buggy vsftpd installs.. ubuntu 12.04,12.10, 13.04, now... + libldapFix + aptgetInstall libgcc1 + # 64-bit 500 OOPS: priv_sock_get_cmd Fix + # seccomp_sandbox=NO + allowSandBox=$( cat /etc/vsftpd.conf | grep -o "seccomp_sandbox=.*" | grep -o "=.*$" | grep -o "[^=].*" ) + if [ -z "$allowSandBox" ]; then + sh -c "echo 'seccomp_sandbox=NO' >> /etc/vsftpd.conf" + else + sed -i 's/seccomp_sandbox=YES/seccomp_sandbox=NO/g' /etc/vsftpd.conf + fi + fi + service vsftpd restart +} + +function remove_vsftpd(){ + #Remove originally installed vsftpd + aptgetRemove vsftpd + # Just incase it's been installed already or another version has been installed using dpgk, let's remove it + dpkg --remove vsftpd +} + +function ubuntuVSFTPDFix(){ # by earnolmartin@gmail.com + # Get currently working directory + origDir=$( pwd ) + patchDir="/root/Downloads" + if [ ! -e $patchDir ]; then + mkdir $patchDir + fi + # Ubuntu VSFTPD Fixes + if [ ! -z "$yrelease" ]; then + if [ "$distro" == "ubuntu" ]; then + if [ "$yrelease" -ge "12" ] && [ "$yrelease" -lt 13 ]; then + if [ "$mrelease" == "04" ]; then + # Run 12.04 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.04\n" + add-apt-repository -y ppa:thefrontiergroup/vsftpd + aptget_Update + aptgetInstall vsftpd + fixVSFTPConfig + + elif [ "$mrelease" -eq "10" ]; then + # Run 12.10 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.10\n" + #get the code + cd $patchDir + if [ ! -e vsftpd_2.3.5-3ubuntu1.deb ]; then + if [ $OSBits -eq "32" ]; then + wget -O "vsftpd_2.3.5-3ubuntu1.deb" http://dinofly.com/files/linux/vsftpd_2.3.5-3ubuntu1_i386.deb + else + wget -O "vsftpd_2.3.5-3ubuntu1.deb" http://dinofly.com/files/linux/vsftpd_2.3.5-3.jme_amd64.deb + fi + fi + #install + dpkg -i vsftpd_2.3.5-3ubuntu1.deb + cd $origDir + fixVSFTPConfig + fi + elif [ "$yrelease" -eq "13" ]; then + if [ "$mrelease" == "04" ]; then + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 13.04\n" + cd $patchDir + if [ ! -e vsftpd_3.0.2-patched_ubuntu.deb ]; then + if [ $OSBits -eq "32" ]; then + wget -O "vsftpd_3.0.2-patched_ubuntu.deb" http://dinofly.com/files/linux/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb + else + wget -O "vsftpd_3.0.2-patched_ubuntu.deb" http://dinofly.com/files/linux/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb + fi + fi + sudo dpkg -i vsftpd_3.0.2-patched_ubuntu.deb + cd $origDir + fixVSFTPConfig + fi + fi + fi + fi +} + +function logDirFix(){ # by earnolmartin@gmail.com + chmod 755 log + chmod 744 log/ehcp_failed_authentication.log + chown vsftpd:www-data log/ehcp_failed_authentication.log +} + +function fixEHCPPerms(){ # by earnolmartin@gmail.com + chmod a+rx /var/www/new/ehcp/ + chmod -R a+r /var/www/new/ehcp/ + find ./ -type d -exec chmod a+rx {} \; + chown -R vsftpd:www-data /var/www/new/ehcp/webmail + chmod 755 -R /var/www/new/ehcp/webmail + chmod 755 /var/www/new/index.html +} + +function fixPHPConfig(){ # by earnolmartin@gmail.com + PHPConfFile="/etc/php5/cli/php.ini" + if [ -e $PHPConfFile ]; then + PHPConfCheck=$( cat $PHPConfFile | grep -o ";extension=mysql.so" ) + if [ -z "$PHPConfCheck" ]; then + sed -i "s/extension=mysql.so/;extension=mysql.so/g" $PHPConfFile + service apache2 restart + fi + fi +} + +############################################################# +# End Functions & Start Install # +############################################################# +cd /var/www/new/ehcp/ +installdir=$(pwd) +if [ ! -f $installdir/install.sh ] ; then + echo "install.sh is not in install dir. Run install.sh from within ehcp installation dir." + exit 1 +fi + + +checkUser +#ehcpHeader +service apparmor stop & > /dev/null # apparmor causes many problems.. +checkDistro +#killallEhcp + +aptget_Update + +checkPhp + +# Post Install Functions by Eric Arnol-Martin + +mv /var/www/new/ehcp/install_?.php /etc/ehcp/ # move it, to prevent later unauthorized access of installer from web +cd "/var/www/new/ehcp" +# Run VSFTPD Fix depending on version +ubuntuVSFTPDFix +# Run SlaveDNS Fix So that DNS Zones can be transfered +slaveDNSApparmorFix +# Run log chmod fix +logDirFix +# Configure Fail2Ban for EHCP if Fail2Ban is present and configured +# fail2banCheck # done in install*php files. +# Fix EHCP Permissions +fixEHCPPerms +# Fix extra mysql module getting loaded in the PHP config printing warning messages +fixPHPConfig + +# Launch firefox and the panel +############################################## +launchPanel +# you may disable following lines, these are for debug/check purposes. + +echo "now running ehcp daemon.." +cd /var/log +service ehcp restart +echo "ehcp run/restart complete.." +sleep 5 # to let ehcp log fill a little + +ps aux > debug.txt +echo "============================================" >> debug.txt +tail -100 /var/log/syslog >> debug.txt +tail -100 /var/log/ehcp.log >> debug.txt + +echo "ehcp : Finished all operations.. go to your panel at http://yourip/ now..." diff --git a/ehcp/handleCronjobs.sh b/ehcp/handleCronjobs.sh new file mode 100755 index 0000000..b62540e --- /dev/null +++ b/ehcp/handleCronjobs.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Cronjobs Builder for EHCP +# Written by Eric Arnol-Martin (earnolmartin@gmail.com) + +if [ -z "$1" ]; then + echo -e "You must send a file path containing cronjob commands" +else + ehcpCrontabFile="$1" + currentCronJobsFile="/var/www/new/ehcp/currentCronJobs.conf" + # Get current cronjobs + currentCronJobs=$(crontab -l) + + # If the EHCP Comment does not exist, add it: + ehcpComment="# EHCP Generated Entries # Place Custom Edits Above This Line Or They WILL BE LOST" + ehcpLocate=$(crontab -l | grep -i "$ehcpComment") + if [ -z "$ehcpLocate" ]; then + currentCronJobs="$currentCronJobs\n$ehcpComment" + fi + + echo -e "$currentCronJobs" > "$currentCronJobsFile" + + + + # Looks for the EHCP comment and returns all lines in the hosts file above it and resaves the host file minus ehcp entries + # Not working as expected if the file starts with the pattern: + # nonEHCPEntries=$( sed -n "1,/$ehcpComment/ p" "$currentCronJobsFile" | grep -vi "$ehcpComment") + + # Use awk instead! + # https://unix.stackexchange.com/questions/11305/grep-show-all-the-file-up-to-the-match + nonEHCPEntries=$(awk "/$ehcpComment/ {exit} {print}" "$currentCronJobsFile") + + if [ ! -z "$nonEHCPEntries" ]; then + ehcpCronJobs=$(cat "$ehcpCrontabFile") + allCronJobs="$nonEHCPEntries\n$ehcpComment\n$ehcpCronJobs" + # Add EHCP records to crontab + echo -e "$allCronJobs" > "$ehcpCrontabFile" + else + ehcpCronJobs=$(cat "$ehcpCrontabFile") + allCronJobs="$ehcpComment\n$ehcpCronJobs" + # Add EHCP records to crontab + echo -e "$allCronJobs" > "$ehcpCrontabFile" + fi + + # Remove current crontab + crontab -r + + # Set crontab to file + crontab "$ehcpCrontabFile" + +fi + + + + diff --git a/ehcp/images/DD.jpg b/ehcp/images/DD.jpg new file mode 100755 index 0000000..6227470 Binary files /dev/null and b/ehcp/images/DD.jpg differ diff --git a/ehcp/images/F1.jpg b/ehcp/images/F1.jpg new file mode 100755 index 0000000..9343052 Binary files /dev/null and b/ehcp/images/F1.jpg differ diff --git a/ehcp/images/F2.jpg b/ehcp/images/F2.jpg new file mode 100755 index 0000000..5865271 Binary files /dev/null and b/ehcp/images/F2.jpg differ diff --git a/ehcp/images/F3.jpg b/ehcp/images/F3.jpg new file mode 100755 index 0000000..14e8406 Binary files /dev/null and b/ehcp/images/F3.jpg differ diff --git a/ehcp/images/F4.jpg b/ehcp/images/F4.jpg new file mode 100755 index 0000000..3d18fec Binary files /dev/null and b/ehcp/images/F4.jpg differ diff --git a/ehcp/images/Fbanner.jpg b/ehcp/images/Fbanner.jpg new file mode 100755 index 0000000..a153a8d Binary files /dev/null and b/ehcp/images/Fbanner.jpg differ diff --git a/ehcp/images/Flinks.jpg b/ehcp/images/Flinks.jpg new file mode 100755 index 0000000..58a118a Binary files /dev/null and b/ehcp/images/Flinks.jpg differ diff --git a/ehcp/images/Fm.jpg b/ehcp/images/Fm.jpg new file mode 100755 index 0000000..b03296b Binary files /dev/null and b/ehcp/images/Fm.jpg differ diff --git a/ehcp/images/Fspace.jpg b/ehcp/images/Fspace.jpg new file mode 100755 index 0000000..62a1b7e Binary files /dev/null and b/ehcp/images/Fspace.jpg differ diff --git a/ehcp/images/H1.jpg b/ehcp/images/H1.jpg new file mode 100755 index 0000000..b9c37c9 Binary files /dev/null and b/ehcp/images/H1.jpg differ diff --git a/ehcp/images/H2.jpg b/ehcp/images/H2.jpg new file mode 100755 index 0000000..1d48c69 Binary files /dev/null and b/ehcp/images/H2.jpg differ diff --git a/ehcp/images/H3.jpg b/ehcp/images/H3.jpg new file mode 100755 index 0000000..7203639 Binary files /dev/null and b/ehcp/images/H3.jpg differ diff --git a/ehcp/images/H4.jpg b/ehcp/images/H4.jpg new file mode 100755 index 0000000..e4d0dde Binary files /dev/null and b/ehcp/images/H4.jpg differ diff --git a/ehcp/images/H6.jpg b/ehcp/images/H6.jpg new file mode 100755 index 0000000..519cd4f Binary files /dev/null and b/ehcp/images/H6.jpg differ diff --git a/ehcp/images/H7.jpg b/ehcp/images/H7.jpg new file mode 100755 index 0000000..02bddec Binary files /dev/null and b/ehcp/images/H7.jpg differ diff --git a/ehcp/images/H8.jpg b/ehcp/images/H8.jpg new file mode 100755 index 0000000..a9a92fc Binary files /dev/null and b/ehcp/images/H8.jpg differ diff --git a/ehcp/images/Hm.jpg b/ehcp/images/Hm.jpg new file mode 100755 index 0000000..d90fa58 Binary files /dev/null and b/ehcp/images/Hm.jpg differ diff --git a/ehcp/images/Sspace.jpg b/ehcp/images/Sspace.jpg new file mode 100755 index 0000000..922e7e0 Binary files /dev/null and b/ehcp/images/Sspace.jpg differ diff --git a/ehcp/images/bb.jpg b/ehcp/images/bb.jpg new file mode 100755 index 0000000..2ee919e Binary files /dev/null and b/ehcp/images/bb.jpg differ diff --git a/ehcp/images/bm.jpg b/ehcp/images/bm.jpg new file mode 100755 index 0000000..2f337d3 Binary files /dev/null and b/ehcp/images/bm.jpg differ diff --git a/ehcp/images/bt.jpg b/ehcp/images/bt.jpg new file mode 100755 index 0000000..1c90e52 Binary files /dev/null and b/ehcp/images/bt.jpg differ diff --git a/ehcp/images/database.jpg b/ehcp/images/database.jpg new file mode 100755 index 0000000..d6b5de0 Binary files /dev/null and b/ehcp/images/database.jpg differ diff --git a/ehcp/images/debug.jpg b/ehcp/images/debug.jpg new file mode 100755 index 0000000..eef2ab7 Binary files /dev/null and b/ehcp/images/debug.jpg differ diff --git a/ehcp/images/delete1.gif b/ehcp/images/delete1.gif new file mode 100755 index 0000000..7499c1a Binary files /dev/null and b/ehcp/images/delete1.gif differ diff --git a/ehcp/images/delete1.jpg b/ehcp/images/delete1.jpg new file mode 100755 index 0000000..f11b9cb Binary files /dev/null and b/ehcp/images/delete1.jpg differ diff --git a/ehcp/images/delete2.jpg b/ehcp/images/delete2.jpg new file mode 100755 index 0000000..865be74 Binary files /dev/null and b/ehcp/images/delete2.jpg differ diff --git a/ehcp/images/domain.png b/ehcp/images/domain.png new file mode 100755 index 0000000..8dcac69 Binary files /dev/null and b/ehcp/images/domain.png differ diff --git a/ehcp/images/domainadmin.png b/ehcp/images/domainadmin.png new file mode 100755 index 0000000..256fbcf Binary files /dev/null and b/ehcp/images/domainadmin.png differ diff --git a/ehcp/images/domains.jpg b/ehcp/images/domains.jpg new file mode 100755 index 0000000..e7bcee4 Binary files /dev/null and b/ehcp/images/domains.jpg differ diff --git a/ehcp/images/edit.gif b/ehcp/images/edit.gif new file mode 100755 index 0000000..cde537b Binary files /dev/null and b/ehcp/images/edit.gif differ diff --git a/ehcp/images/edit.png b/ehcp/images/edit.png new file mode 100755 index 0000000..af23f79 Binary files /dev/null and b/ehcp/images/edit.png differ diff --git a/ehcp/images/edit2.gif b/ehcp/images/edit2.gif new file mode 100755 index 0000000..cc952af Binary files /dev/null and b/ehcp/images/edit2.gif differ diff --git a/ehcp/images/ehcp.png b/ehcp/images/ehcp.png new file mode 100755 index 0000000..836f20b Binary files /dev/null and b/ehcp/images/ehcp.png differ diff --git a/ehcp/images/ehcp2.png b/ehcp/images/ehcp2.png new file mode 100755 index 0000000..fd358c7 Binary files /dev/null and b/ehcp/images/ehcp2.png differ diff --git a/ehcp/images/ehcp_logo2.png b/ehcp/images/ehcp_logo2.png new file mode 100755 index 0000000..f69327e Binary files /dev/null and b/ehcp/images/ehcp_logo2.png differ diff --git a/ehcp/images/email.jpg b/ehcp/images/email.jpg new file mode 100755 index 0000000..4b1ab59 Binary files /dev/null and b/ehcp/images/email.jpg differ diff --git a/ehcp/images/email.png b/ehcp/images/email.png new file mode 100755 index 0000000..b0db5a2 Binary files /dev/null and b/ehcp/images/email.png differ diff --git a/ehcp/images/en.jpg b/ehcp/images/en.jpg new file mode 100755 index 0000000..251af59 Binary files /dev/null and b/ehcp/images/en.jpg differ diff --git a/ehcp/images/fr.jpg b/ehcp/images/fr.jpg new file mode 100755 index 0000000..8d8b476 Binary files /dev/null and b/ehcp/images/fr.jpg differ diff --git a/ehcp/images/france.gif b/ehcp/images/france.gif new file mode 100755 index 0000000..94c5aed Binary files /dev/null and b/ehcp/images/france.gif differ diff --git a/ehcp/images/ftp.jpg b/ehcp/images/ftp.jpg new file mode 100755 index 0000000..a2e9b12 Binary files /dev/null and b/ehcp/images/ftp.jpg differ diff --git a/ehcp/images/ftp.png b/ehcp/images/ftp.png new file mode 100755 index 0000000..ea6a6ad Binary files /dev/null and b/ehcp/images/ftp.png differ diff --git a/ehcp/images/german.jpg b/ehcp/images/german.jpg new file mode 100755 index 0000000..4ec549b Binary files /dev/null and b/ehcp/images/german.jpg differ diff --git a/ehcp/images/germany.gif b/ehcp/images/germany.gif new file mode 100755 index 0000000..f49f408 Binary files /dev/null and b/ehcp/images/germany.gif differ diff --git a/ehcp/images/help.png b/ehcp/images/help.png new file mode 100755 index 0000000..7cb74c5 Binary files /dev/null and b/ehcp/images/help.png differ diff --git a/ehcp/images/incele.jpg b/ehcp/images/incele.jpg new file mode 100755 index 0000000..83b5307 Binary files /dev/null and b/ehcp/images/incele.jpg differ diff --git a/ehcp/images/info.png b/ehcp/images/info.png new file mode 100755 index 0000000..ee9427c Binary files /dev/null and b/ehcp/images/info.png differ diff --git a/ehcp/images/install.jpg b/ehcp/images/install.jpg new file mode 100755 index 0000000..3b4b2b1 Binary files /dev/null and b/ehcp/images/install.jpg differ diff --git a/ehcp/images/it.jpg b/ehcp/images/it.jpg new file mode 100755 index 0000000..38a6318 Binary files /dev/null and b/ehcp/images/it.jpg differ diff --git a/ehcp/images/keyboard.jpg b/ehcp/images/keyboard.jpg new file mode 100755 index 0000000..26f0786 Binary files /dev/null and b/ehcp/images/keyboard.jpg differ diff --git a/ehcp/images/left.jpg b/ehcp/images/left.jpg new file mode 100755 index 0000000..319832a Binary files /dev/null and b/ehcp/images/left.jpg differ diff --git a/ehcp/images/loader.gif b/ehcp/images/loader.gif new file mode 100755 index 0000000..5b44918 Binary files /dev/null and b/ehcp/images/loader.gif differ diff --git a/ehcp/images/lock.png b/ehcp/images/lock.png new file mode 100755 index 0000000..211b904 Binary files /dev/null and b/ehcp/images/lock.png differ diff --git a/ehcp/images/login-down.png b/ehcp/images/login-down.png new file mode 100755 index 0000000..d570bdb Binary files /dev/null and b/ehcp/images/login-down.png differ diff --git a/ehcp/images/login.png b/ehcp/images/login.png new file mode 100755 index 0000000..b61efcf Binary files /dev/null and b/ehcp/images/login.png differ diff --git a/ehcp/images/logo-x.png b/ehcp/images/logo-x.png new file mode 100755 index 0000000..e4b2fd7 Binary files /dev/null and b/ehcp/images/logo-x.png differ diff --git a/ehcp/images/logo.gif b/ehcp/images/logo.gif new file mode 100755 index 0000000..caf4598 Binary files /dev/null and b/ehcp/images/logo.gif differ diff --git a/ehcp/images/logo_192.gif b/ehcp/images/logo_192.gif new file mode 100755 index 0000000..4b3a375 Binary files /dev/null and b/ehcp/images/logo_192.gif differ diff --git a/ehcp/images/lv.gif b/ehcp/images/lv.gif new file mode 100755 index 0000000..2ffff12 Binary files /dev/null and b/ehcp/images/lv.gif differ diff --git a/ehcp/images/lv.jpg b/ehcp/images/lv.jpg new file mode 100755 index 0000000..2ffff12 Binary files /dev/null and b/ehcp/images/lv.jpg differ diff --git a/ehcp/images/menu01.png b/ehcp/images/menu01.png new file mode 100755 index 0000000..d021336 Binary files /dev/null and b/ehcp/images/menu01.png differ diff --git a/ehcp/images/mercek.png b/ehcp/images/mercek.png new file mode 100755 index 0000000..82048b9 Binary files /dev/null and b/ehcp/images/mercek.png differ diff --git a/ehcp/images/mysql.png b/ehcp/images/mysql.png new file mode 100755 index 0000000..f786bda Binary files /dev/null and b/ehcp/images/mysql.png differ diff --git a/ehcp/images/ok.png b/ehcp/images/ok.png new file mode 100755 index 0000000..bc31763 Binary files /dev/null and b/ehcp/images/ok.png differ diff --git a/ehcp/images/open_in_new_window.gif b/ehcp/images/open_in_new_window.gif new file mode 100755 index 0000000..def4021 Binary files /dev/null and b/ehcp/images/open_in_new_window.gif differ diff --git a/ehcp/images/openinnew.gif b/ehcp/images/openinnew.gif new file mode 100755 index 0000000..d652aad Binary files /dev/null and b/ehcp/images/openinnew.gif differ diff --git a/ehcp/images/openinnew.jpg b/ehcp/images/openinnew.jpg new file mode 100755 index 0000000..7493142 Binary files /dev/null and b/ehcp/images/openinnew.jpg differ diff --git a/ehcp/images/other.png b/ehcp/images/other.png new file mode 100755 index 0000000..430e2ba Binary files /dev/null and b/ehcp/images/other.png differ diff --git a/ehcp/images/other2.png b/ehcp/images/other2.png new file mode 100755 index 0000000..16d2a28 Binary files /dev/null and b/ehcp/images/other2.png differ diff --git a/ehcp/images/pause.gif b/ehcp/images/pause.gif new file mode 100755 index 0000000..c1c3cca Binary files /dev/null and b/ehcp/images/pause.gif differ diff --git a/ehcp/images/poweroff.gif b/ehcp/images/poweroff.gif new file mode 100755 index 0000000..096ff64 Binary files /dev/null and b/ehcp/images/poweroff.gif differ diff --git a/ehcp/images/poweron.gif b/ehcp/images/poweron.gif new file mode 100755 index 0000000..f2191a7 Binary files /dev/null and b/ehcp/images/poweron.gif differ diff --git a/ehcp/images/reseller-admin.png b/ehcp/images/reseller-admin.png new file mode 100755 index 0000000..e842aa8 Binary files /dev/null and b/ehcp/images/reseller-admin.png differ diff --git a/ehcp/images/reseller.png b/ehcp/images/reseller.png new file mode 100755 index 0000000..7517db9 Binary files /dev/null and b/ehcp/images/reseller.png differ diff --git a/ehcp/images/right.jpg b/ehcp/images/right.jpg new file mode 100755 index 0000000..505396b Binary files /dev/null and b/ehcp/images/right.jpg differ diff --git a/ehcp/images/romania.gif b/ehcp/images/romania.gif new file mode 100755 index 0000000..0303504 Binary files /dev/null and b/ehcp/images/romania.gif differ diff --git a/ehcp/images/ru.gif b/ehcp/images/ru.gif new file mode 100755 index 0000000..a95c1e2 Binary files /dev/null and b/ehcp/images/ru.gif differ diff --git a/ehcp/images/s2b.jpg b/ehcp/images/s2b.jpg new file mode 100755 index 0000000..fa992ab Binary files /dev/null and b/ehcp/images/s2b.jpg differ diff --git a/ehcp/images/s2bl.jpg b/ehcp/images/s2bl.jpg new file mode 100755 index 0000000..b0b0933 Binary files /dev/null and b/ehcp/images/s2bl.jpg differ diff --git a/ehcp/images/s2br.jpg b/ehcp/images/s2br.jpg new file mode 100755 index 0000000..1524824 Binary files /dev/null and b/ehcp/images/s2br.jpg differ diff --git a/ehcp/images/s2l.jpg b/ehcp/images/s2l.jpg new file mode 100755 index 0000000..5b6a1ce Binary files /dev/null and b/ehcp/images/s2l.jpg differ diff --git a/ehcp/images/s2r.jpg b/ehcp/images/s2r.jpg new file mode 100755 index 0000000..f2fa3ed Binary files /dev/null and b/ehcp/images/s2r.jpg differ diff --git a/ehcp/images/s2t.jpg b/ehcp/images/s2t.jpg new file mode 100755 index 0000000..142a265 Binary files /dev/null and b/ehcp/images/s2t.jpg differ diff --git a/ehcp/images/s2tl.jpg b/ehcp/images/s2tl.jpg new file mode 100755 index 0000000..bc2adb6 Binary files /dev/null and b/ehcp/images/s2tl.jpg differ diff --git a/ehcp/images/s2tr.jpg b/ehcp/images/s2tr.jpg new file mode 100755 index 0000000..a3d6e95 Binary files /dev/null and b/ehcp/images/s2tr.jpg differ diff --git a/ehcp/images/sb.jpg b/ehcp/images/sb.jpg new file mode 100755 index 0000000..12d39ba Binary files /dev/null and b/ehcp/images/sb.jpg differ diff --git a/ehcp/images/sbl.jpg b/ehcp/images/sbl.jpg new file mode 100755 index 0000000..023b4e3 Binary files /dev/null and b/ehcp/images/sbl.jpg differ diff --git a/ehcp/images/sbr.jpg b/ehcp/images/sbr.jpg new file mode 100755 index 0000000..d8800a3 Binary files /dev/null and b/ehcp/images/sbr.jpg differ diff --git a/ehcp/images/secure.png b/ehcp/images/secure.png new file mode 100755 index 0000000..7cac20a Binary files /dev/null and b/ehcp/images/secure.png differ diff --git a/ehcp/images/segment.jpg b/ehcp/images/segment.jpg new file mode 100755 index 0000000..e475b87 Binary files /dev/null and b/ehcp/images/segment.jpg differ diff --git a/ehcp/images/server.png b/ehcp/images/server.png new file mode 100755 index 0000000..3b97138 Binary files /dev/null and b/ehcp/images/server.png differ diff --git a/ehcp/images/serveradmin.png b/ehcp/images/serveradmin.png new file mode 100755 index 0000000..0a5c8b3 Binary files /dev/null and b/ehcp/images/serveradmin.png differ diff --git a/ehcp/images/servermanagement.jpg b/ehcp/images/servermanagement.jpg new file mode 100755 index 0000000..009d0f6 Binary files /dev/null and b/ehcp/images/servermanagement.jpg differ diff --git a/ehcp/images/settings.jpg b/ehcp/images/settings.jpg new file mode 100755 index 0000000..40ed902 Binary files /dev/null and b/ehcp/images/settings.jpg differ diff --git a/ehcp/images/settings.png b/ehcp/images/settings.png new file mode 100755 index 0000000..b4d6dfb Binary files /dev/null and b/ehcp/images/settings.png differ diff --git a/ehcp/images/sl.jpg b/ehcp/images/sl.jpg new file mode 100755 index 0000000..673b609 Binary files /dev/null and b/ehcp/images/sl.jpg differ diff --git a/ehcp/images/spacer.gif b/ehcp/images/spacer.gif new file mode 100755 index 0000000..d794434 Binary files /dev/null and b/ehcp/images/spacer.gif differ diff --git a/ehcp/images/spain.gif b/ehcp/images/spain.gif new file mode 100755 index 0000000..671cd7c Binary files /dev/null and b/ehcp/images/spain.gif differ diff --git a/ehcp/images/spanish.jpg b/ehcp/images/spanish.jpg new file mode 100755 index 0000000..b1d2ca7 Binary files /dev/null and b/ehcp/images/spanish.jpg differ diff --git a/ehcp/images/sr.jpg b/ehcp/images/sr.jpg new file mode 100755 index 0000000..094936b Binary files /dev/null and b/ehcp/images/sr.jpg differ diff --git a/ehcp/images/st.jpg b/ehcp/images/st.jpg new file mode 100755 index 0000000..3fc9bce Binary files /dev/null and b/ehcp/images/st.jpg differ diff --git a/ehcp/images/statistics (kopya).jpg b/ehcp/images/statistics (kopya).jpg new file mode 100755 index 0000000..09a1098 Binary files /dev/null and b/ehcp/images/statistics (kopya).jpg differ diff --git a/ehcp/images/statistics.jpg b/ehcp/images/statistics.jpg new file mode 100755 index 0000000..605bedf Binary files /dev/null and b/ehcp/images/statistics.jpg differ diff --git a/ehcp/images/status.png b/ehcp/images/status.png new file mode 100755 index 0000000..aee4b53 Binary files /dev/null and b/ehcp/images/status.png differ diff --git a/ehcp/images/stl.jpg b/ehcp/images/stl.jpg new file mode 100755 index 0000000..708f84a Binary files /dev/null and b/ehcp/images/stl.jpg differ diff --git a/ehcp/images/stop.jpg b/ehcp/images/stop.jpg new file mode 100755 index 0000000..6a7a83c Binary files /dev/null and b/ehcp/images/stop.jpg differ diff --git a/ehcp/images/stop.png b/ehcp/images/stop.png new file mode 100644 index 0000000..4ce0b1d Binary files /dev/null and b/ehcp/images/stop.png differ diff --git a/ehcp/images/str.jpg b/ehcp/images/str.jpg new file mode 100755 index 0000000..50c3cd7 Binary files /dev/null and b/ehcp/images/str.jpg differ diff --git a/ehcp/images/style.css b/ehcp/images/style.css new file mode 100755 index 0000000..32e16ae --- /dev/null +++ b/ehcp/images/style.css @@ -0,0 +1,460 @@ +FONT { + FONT-SIZE: 11px; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif +} +A:link { +FONT-SIZE: 11px; +COLOR: #4785B8; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +A:visited { +FONT-SIZE: 11px; +COLOR: #4785B8; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +A:active { +FONT-SIZE: 11px; +COLOR: #4785B8; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +A:hover { +FONT-SIZE: 11px; +COLOR: #00CCFF; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +BODY { +FONT-SIZE: 11px; +CURSOR: default; +COLOR: #294F6D; +BACKGROUND-color: #0E1B25; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} + +TEXTAREA {background:#091219; +color:#294F6D; +font:11px Arial,Helvetica,sans-serif; +BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +} +P { +FONT-SIZE: 11px; +COLOR: #294F6D; +LINE-HEIGHT: 1.4; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +TABLE { +FONT-SIZE: 11px; +COLOR: #294F6D; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +TEXT-DECORATION: none; +} +table.main, table.mainouter +{ margin: 0 auto; + font-family : Verdana, Helvetica, sans-serif; + font-size : 12px; +} +td.colhead { + font-family : Verdana, Helvetica, sans-serif; + font-size : 12px; + margin: 0 auto; +} +td.rowhead{ + margin: 0 auto; + font-family : Verdana, Helvetica, sans-serif; + font-size : 12px; +} +table.colhead, table.rowhead +{ margin: 0 auto; + font-family : Verdana, Helvetica, sans-serif; + font-size : 12px; +} + +TD.content { + +FONT-SIZE: 11px; +COLOR: #294F6D; +TEXT-DECORATION: none; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +} + +TD.extra { +background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} +TD.info1 { +color : #294F6D; +font: normal 11px Arial, Helvetica, sans-serif; +BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; +} + +hr { +border-top: 1px solid #1B3244; +border-bottom: 1px solid #000000; +height: 2px; +width: 110%; +} + +UL { + LIST-STYLE-TYPE: square +} +.center { + TEXT-ALIGN: center +} +.justify { + TEXT-ALIGN: justify +} +.right { + TEXT-ALIGN: right +} +H1 { +FONT-WEIGHT: bold; +FONT-SIZE: 11px; +COLOR: #294F6D; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +LETTER-SPACING: 0px; +TEXT-DECORATION: none; +} +.heading { +FONT-WEIGHT: bold; +FONT-SIZE: 11px; +COLOR: #294F6D; +FONT-FAMILY: Tahoma; +LETTER-SPACING: 0px; +TEXT-DECORATION: none; +} + +SELECT { +BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; +FONT-SIZE: 11px; +COLOR: #294F6D; +TEXT-DECORATION: none; +FONT-FAMILY: arial, helvetica, verdana, sans-serif; +} + +/*Only IE will show for the scroller style */ +BODY { +SCROLLBAR-FACE-COLOR: #091219; +SCROLLBAR-HIGHLIGHT-COLOR: #35353F; +SCROLLBAR-SHADOW-COLOR: #303030; +SCROLLBAR-3DLIGHT-COLOR: #4D4E53; +SCROLLBAR-ARROW-COLOR: #607CAE; +SCROLLBAR-TRACK-COLOR: #1B3244; +SCROLLBAR-DARKSHADOW-COLOR: #000000; + } + +/* This is the border line & background colour round the entire page */ +.bodyline { BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219;} +.tablein {color : #294F6D; + font: normal 11px Arial, Helvetica, sans-serif; + BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219;} +.tableout {background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid;} +/* This is the outline round the main forum tables */ +.forumline { BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219;} + + + + +/* Main table cell colours and backgrounds */ +td.row1 {background: url(../../../themes/Z3/images/row1.jpg); +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid;} +td.row2 {background: url(../../../themes/Z3/images/row1.jpg); +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid;} +td.row3 {background: url(../../../themes/Z3/images/row1.jpg); +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid;} + + +td.rowpic { + +background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} + + +th { + color: #294F6D; font-size: 11px; font-weight : bold; + height: 20px; + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; + +} + +td.cat,td.catHead,td.catSides,td.catLeft,td.catRight,td.catBottom { + + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; height: 28px; +} + + +/* + Setting additional nice inner borders for the main table cells. + The names indicate which sides the border will be on. + Don't worry if you don't understand this, just ignore it :-) +*/ +td.cat,td.catHead,td.catBottom { + height: 29px; + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} +th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR { + font-weight: bold; background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; height: 28px; } +td.row3Right,td.spaceRow { +background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid;} + +th.thHead,td.catHead { font-size: 11px; background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thSides,td.catSides,td.spaceRow { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thRight,td.catRight,td.row3Right { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thLeft,td.catLeft { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thBottom,td.catBottom { background: #091219; +BORDER-RIGHT: #0000001px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thTop { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thCornerL { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } +th.thCornerR { background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; } + + +/* The largest text used in the index page title and toptic title etc. */ +.maintitle,h1,h2 { + font-weight: bold; font-size: 22px; font-family: "Arial",Verdana, Helvetica, sans-serif; + text-decoration: none; line-height : 120%; color : #294F6D; +} + + +/* General text */ +.gen { font-size : 11px; } +.genmed { font-size : 11px; } +.gensmall { font-size : 11px; } +.gen,.genmed,.gensmall { color : #294F6D; } +a.gen,a.genmed,a.gensmall { color: #294F6D; text-decoration: none; } +a.gen:hover,a.genmed:hover,a.gensmall:hover { color: #00CCFF; text-decoration: none; } + + +/* The register, login, search etc links at the top of the page */ +.mainmenu { font-size : 11px; color : #294F6D;} +a.mainmenu { text-decoration: none; color : #294F6D;} +a.mainmenu:hover{ text-decoration: none; color : #00CCFF;} + + +/* Forum category titles */ +.cattitle { font-weight: bold; font-size: 11px ; letter-spacing: 0px; color : #294F6D} +a.cattitle { text-decoration: none; color : #294F6D; } +a.cattitle:hover{ text-decoration: none; color : #00CCFF;} + + +/* Forum title: Text and link to the forums used in: index.php */ +.forumlink { font-weight: bold; font-size: 11px; color : #294F6D; } +a.forumlink { text-decoration: none; color : #294F6D; } +a.forumlink:hover{ text-decoration: NONE; color : #00CCFF; } + + +/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */ +.nav { font-weight: bold; font-size: 11px; color : #294F6D;} +a.nav { text-decoration: none; color : #294F6D; } +a.nav:hover { text-decoration: NONE; color : #00CCFF;} + + +/* titles for the topics: could specify viewed link colour too */ +.topictitle { font-weight: bold; font-size: 11px; color : #294F6D; } +a.topictitle:link { text-decoration: none; color : #294F6D; } +a.topictitle:visited { text-decoration: none; color : #294F6D; } +a.topictitle:hover { text-decoration: NONE; color : #00CCFF; } + + +/* Name of poster in viewmsg.php and viewtopic.php and other places */ +.name { font-size : 11px; color : #294F6D;} + +/* Location, number of posts, post date etc */ +.postdetails { font-size : 11px; color : #294F6D; } + + +/* The content of the posts (body of text) */ +.postbody { font-size : 11px;} +a.postlink:link { text-decoration: none; color : #294F6D; } +a.postlink:visited { text-decoration: none; color : #294F6D; } +a.postlink:hover { text-decoration: NONE; color : #00CCFF} + +.navlink { font-size : 11px;} +a.navlink:link { text-decoration: none; color : #294F6D; } +a.navlink:visited { text-decoration: none; color : #294F6D; } +a.navlink:hover { text-decoration: NONE; color : #00CCFF;} + + +/* Quote & Code blocks */ +.code { + font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #A3A4A8; + BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; +} + +.quote { + font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #A3A4A8; + BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #0000001px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; +} + + +/* Copyright and bottom info */ +.copyright { font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #294F6D; letter-spacing: 0px;} +a.copyright { color: #294F6D; text-decoration: none;} +a.copyright:hover { color: #00CCFF; text-decoration: NONE;} + + +/* Form elements */ +input { + color : #294F6D; + font: normal 11px Arial, Helvetica, sans-serif; + BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; +} + +/* The text input fields background colour */ +input.post, textarea.post, select { + background-color : #091219; +} + +input { text-indent : 2px; } + +/* The buttons used for bbCode styling in message post */ +input.button { + color : #294F6D; + font: normal 11px Verdana, Arial, Helvetica, sans-serif; + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} + +/* The main submit button option */ +input.mainoption { + color : #294F6D; + font: normal 11px Verdana, Arial, Helvetica, sans-serif; + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} + +/* None-bold submit button */ +input.liteoption { + color : #294F6D; + font: normal 11px Verdana, Arial, Helvetica, sans-serif; + background: #091219; +BORDER-RIGHT: #000000 1px solid; +BORDER-TOP: #1B3244 1px solid; +BORDER-BOTTOM: #000000 1px solid; +BORDER-LEFT: #1B3244 1px solid; +} + +/* This is the line in the posting page which shows the rollover + help line. This is actually a text box, but if set to be the same + colour as the background no one will know ;) +*/ +.helpline { BORDER-TOP: #000000 1px solid; +BORDER-BOTTOM: #1B3244 1px solid; +BORDER-LEFT: #000000 1px solid; +BORDER-RIGHT: #1B3244 1px solid; +BACKGROUND: #091219; } \ No newline at end of file diff --git a/ehcp/images/success.png b/ehcp/images/success.png new file mode 100644 index 0000000..ced9a68 Binary files /dev/null and b/ehcp/images/success.png differ diff --git a/ehcp/images/successfull.jpg b/ehcp/images/successfull.jpg new file mode 100755 index 0000000..3d21f93 Binary files /dev/null and b/ehcp/images/successfull.jpg differ diff --git a/ehcp/images/tatil.png b/ehcp/images/tatil.png new file mode 100755 index 0000000..2d0ba87 Binary files /dev/null and b/ehcp/images/tatil.png differ diff --git a/ehcp/images/timelist.png b/ehcp/images/timelist.png new file mode 100755 index 0000000..8ac6809 Binary files /dev/null and b/ehcp/images/timelist.png differ diff --git a/ehcp/images/tr.jpg b/ehcp/images/tr.jpg new file mode 100755 index 0000000..53d1e72 Binary files /dev/null and b/ehcp/images/tr.jpg differ diff --git a/ehcp/images/trafikisiklari.png b/ehcp/images/trafikisiklari.png new file mode 100755 index 0000000..479bd1c Binary files /dev/null and b/ehcp/images/trafikisiklari.png differ diff --git a/ehcp/images/turkey.gif b/ehcp/images/turkey.gif new file mode 100755 index 0000000..502a8a1 Binary files /dev/null and b/ehcp/images/turkey.gif differ diff --git a/ehcp/images/usa.gif b/ehcp/images/usa.gif new file mode 100755 index 0000000..113fea0 Binary files /dev/null and b/ehcp/images/usa.gif differ diff --git a/ehcp/images/warning.jpg b/ehcp/images/warning.jpg new file mode 100755 index 0000000..30eced3 Binary files /dev/null and b/ehcp/images/warning.jpg differ diff --git a/ehcp/images/warning.png b/ehcp/images/warning.png new file mode 100644 index 0000000..e2c6b0a Binary files /dev/null and b/ehcp/images/warning.png differ diff --git a/ehcp/images_default_index/bg.jpg b/ehcp/images_default_index/bg.jpg new file mode 100755 index 0000000..ce71f10 Binary files /dev/null and b/ehcp/images_default_index/bg.jpg differ diff --git a/ehcp/images_default_index/contentbox.jpg b/ehcp/images_default_index/contentbox.jpg new file mode 100755 index 0000000..b4d63a8 Binary files /dev/null and b/ehcp/images_default_index/contentbox.jpg differ diff --git a/ehcp/images_default_index/header.jpg b/ehcp/images_default_index/header.jpg new file mode 100755 index 0000000..da98315 Binary files /dev/null and b/ehcp/images_default_index/header.jpg differ diff --git a/ehcp/images_default_index/logo-x.png b/ehcp/images_default_index/logo-x.png new file mode 100755 index 0000000..eeccf18 Binary files /dev/null and b/ehcp/images_default_index/logo-x.png differ diff --git a/ehcp/index.php b/ehcp/index.php new file mode 100755 index 0000000..d2bc8ea --- /dev/null +++ b/ehcp/index.php @@ -0,0 +1,46 @@ +\n"; + +$app = new Application(); +$app->cerceve="standartcerceve"; +$app->usertable="domainusers"; +$app->userfields=array("id","domainname","username","email","quota"); +$app->op=strtolower($op); +$app->run(); + + + +?> diff --git a/ehcp/indextemplate.php b/ehcp/indextemplate.php new file mode 100755 index 0000000..1ef5255 --- /dev/null +++ b/ehcp/indextemplate.php @@ -0,0 +1,4 @@ + +Under Construction
+Please upload here your content. diff --git a/ehcp/info.html b/ehcp/info.html new file mode 100755 index 0000000..c6122b3 --- /dev/null +++ b/ehcp/info.html @@ -0,0 +1,31 @@ +you may find useful information on following sites:

+ +Mainly:http://www.ehcp.net
+Additional mysql troubleshooter...
+http://www.ehcp.net/?q=node/245, mysql password howto
+ehcp Forums +ehcp Helper + +
+A great forum:http://www.ubuntuforums.org/forumdisplay.php?f=180
+ +http://freshmeat.net/projects/ehcp/
+http://www.sourceforge.net/projects/ehcp
+http://code.google.com/p/ehcp/
+http://www.howtoforge.com/instaling_ehcp_on_debian_ubuntu


+http://forum.iyibirisi.com/viewforum.php?f=3
+
+ +I need php developers, html designers, testers, hosting providers to be able to continue this project.
+if you think you may help me in one of these ways, or if you want to help and dont know how to do, please contact me..
+All kind of help is welcome.
+
+Keep in mind that, ehcp is the first and only :opensource,full php, object oriented, gpl, free hosting control panel on the earth !
+ +Other interesting sites:
+www.100tl.com +www.vidinli.com/online +www.iyibirisi.com +forum.iyibirisi.com + + diff --git a/ehcp/install.sh b/ehcp/install.sh new file mode 100755 index 0000000..374fb9e --- /dev/null +++ b/ehcp/install.sh @@ -0,0 +1,194 @@ +#!/bin/bash +# EHCP Force Edition Pre-Installer Script +# www.ehcpforce.tk +# by earnolmartin@gmail.com + +################### +#### FUNCTIONS #### +################### + +function isAptGetInUseBySomething(){ + if [ -e "/var/lib/dpkg/lock" ]; then + APTGETRunning=$(fuser /var/lib/dpkg/lock) + if [ ! -z "$APTGETRunning" ]; then + APTGETProcInfo=$(ps -ef | grep "$APTGETRunning") + clear + echo -e "Unable to run EHCP Force installation script!" + echo "" + echo -e "A system update process is currently running on your system.\n\n$APTGETProcInfo\n\nClose any update applications listed above and try running the script again. Most of these update applications finish quickly. Re-run this installer in a few minutes if you are unsure how to close any update processes." + exit + fi + fi +} + +function isValidEmail(){ + # $1 = email address + if echo "${1}" | grep '^[a-zA-Z0-9]*@[a-zA-Z0-9]*\.[a-zA-Z0-9]*$' >/dev/null; then + return 0 # 0 = true + else + return 1 # 1 = false + fi +} + +function outputInfo(){ + clear + echo "EHCP Force Edition Pre-Install Script" + echo "Version 1.0" + echo -e "By earnolmartin\n\n" + echo "This pre-installation script allows you to select your EHCP Force installation mode." + echo -e "For example, you can choose to install EHCP with extra software (Email Anti-Spam, etc).\n" +} + +function generateEHCPPreInstallFile(){ + logInfoFile="/root/ehcp_info" + if [ -e "$logInfoFile" ]; then + CurDate=$(date +%Y_%m_%d_%s) + mv "$logInfoFile" "/root/ehcp_info_$CurDate" + else + touch "$logInfoFile" + fi + + generatePassword "15" + MYSQLROOTPASS="$rPass" + + generatePassword + PHPMYADMINPASS="$rPass" + + generatePassword + RCUBEPASS="$rPass" + + generatePassword + EHCPDBPASS="$rPass" + + generatePassword "20" + EHCPADMINPASS="$rPass" + + echo -e "" > "install_silently.php" + + echo -e "\nMySQL root user password = $MYSQLROOTPASS" + echo "MySQL root user password = $MYSQLROOTPASS" >> "$logInfoFile" + echo "PHPMyAdmin MySQL user password = $PHPMYADMINPASS" + echo "PHPMyAdmin MySQL user password = $PHPMYADMINPASS" >> "$logInfoFile" + echo "Roundcube MySQL user password = $RCUBEPASS" + echo "Roundcube MySQL user password = $RCUBEPASS" >> "$logInfoFile" + echo "EHCP MySQL user password = $EHCPDBPASS" + echo "EHCP MySQL user password = $EHCPDBPASS" >> "$logInfoFile" + echo "EHCP Admin Login = admin" + echo "EHCP Admin Login = admin" >> "$logInfoFile" + echo "EHCP Admin Password = $EHCPADMINPASS" + echo "EHCP Admin Password = $EHCPADMINPASS" >> "$logInfoFile" + echo -e "\nThis information has been saved in $logInfoFile for you to reference later!" + sleep 5 +} + +function generatePassword(){ + if [ ! -z "$1" ]; then + PLENGTH="$1" + else + PLENGTH="10" + fi + + #rPass=$(date +%s | sha256sum | base64 | head -c "$PLENGTH") + rPass=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 | head -c "$PLENGTH") +} + +function checkRoot(){ + # Make sure only root can run our script + if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" 1>&2 + exit 1 + fi +} + +################### +#### Main Code #### +################### +clear + +# Check for root +checkRoot + +# Check for Apt-get availability +isAptGetInUseBySomething + +# Get parameters +for varCheck in "$@" +do + if [ "$varCheck" == "unattended" ]; then + preUnattended=1 + elif [ "$varCheck" == "debug" ]; then + debug="debug" + fi +done + +if [ ! -z "$preUnattended" ]; then + # They really want this install to be unattended, so run the installer and use default passwords of 1234 + bash install_main.sh "$@" +else + + # Echo Info + outputInfo + + # Ready to start? + echo -n "Install EHCP Force Edition in unattended mode (installs all software without prompts and generates passwords)? [y/n]: " + read unattended + unattended=$(echo "$unattended" | awk '{print tolower($0)}') + + if [ "$unattended" != "n" ]; then + generateEHCPPreInstallFile + unattendedMode="unattended" + fi + + + echo "" + echo -n "Please enter a valid global email address for the panel to use: " + read emailAddr + emailAddr=$(echo "$emailAddr" | awk '{print tolower($0)}') + if ! isValidEmail "$emailAddr"; then + emailAddr="info@ehcpforce.tk" + fi + adminEmailCFG="admin_email.php" + echo "" > "$adminEmailCFG" + + echo "" + echo -n "Install extra software in addition to EHCP Force Edition (such as Amavis, SpamAssassin, ClamAV, ModSecurity, ModEvasive, Fail2Ban)? [y/n]: " + read insMode + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + extra="extra" + FQDNCFG="fqdn_amavis.cfg" + if [ ! -e "$FQDNCFG" ]; then + # Prompt for FQDN for mail server + echo "" + echo -n "Please enter your Fully Qualified Domain Name (FQDN) for this mail server (used for Amavis): " + read FQDNName + FQDNName=$(echo "$FQDNName" | awk '{print tolower($0)}') + if [ -z "$FQDNName" ]; then + # Just replace it with ehcpforce.tk + FQDNName="ehcpforce.tk" + fi + echo -e "FQDNName=\"$FQDNName\"" > "$FQDNCFG" + fi + + insPolicyD="ins_policyd.cfg" + if [ ! -e "$insPolicyD" ]; then + # Prompt for PolicyD Installation + echo "" + echo -n "ADVANCED: Would you like to install PolicyD (Ubuntu 14.04 & Debian 8 - And Up ONLY)? [y/n]: " + read policyDI + policyDI=$(echo "$policyDI" | awk '{print tolower($0)}') + if [ "$policyDI" == "y" ]; then + # Just replace it with ehcpforce.tk + echo -e "insPolicyD=true" > "$insPolicyD" + fi + fi + else + extra="normal" + fi + + # Run the main installer + echo "bash install_main.sh $unattendedMode $extra $debug" + bash install_main.sh $unattendedMode $extra $debug + +fi diff --git a/ehcp/install2.1.php b/ehcp/install2.1.php new file mode 100755 index 0000000..e69de29 diff --git a/ehcp/install_1.php b/ehcp/install_1.php new file mode 100755 index 0000000..5d8e109 --- /dev/null +++ b/ehcp/install_1.php @@ -0,0 +1,70 @@ +1){ + + # Distro and version are always sent + + # Get distro version number + $temp = trim($argv[1]); + if(stripos($temp, ".") != FALSE){ + $version = $temp; + } + + # Distro is needed for Ubuntu only features + $distro = strtolower(trim($argv[2])); +} + +for($i=3;$i<=6;$i++){ # accept following arguments in any of position. + if($argc>$i) { + print "argc:$argc\n\n"; + switch($argv[$i]) { + case 'noapt': # for only simulating install, apt-get installs are still loged onto a file + $noapt="noapt"; + echo "apt-get install disabled due to parameter:noapt \n"; + break; + case 'unattended': # tries to suppress most user dialogs.. good for a quick testing. (tr: hizlica test etmek icin guzel..) + $unattended=True; + break; + case 'light': # the light install, non-cruical parts are omitted. good for a quick testing. (tr: hizlica test etmek icin guzel..) + $installmode='light'; + break; + case 'extra': # the extra install, means more components + $installmode='extra'; + break; + case 'debug': + $debugMode = true; + break; + default: + echo __FILE__." dosyasinda bilinmeyen arguman degeri:".$argv[$i]; + break; + } + + } +} +echo "Some install parameters for file ".__FILE__.": noapt:($noapt), unattended:".($unattended===True?"exact True":"not True")." installmode:($installmode) \n"; + +include_once('install_lib.php'); + +$phpConfDir = getPHPConfDir(); + +// Load preset installation values in install_silently.php if exists: +if(file_exists("install_silently.php")){ + require_once 'install_silently.php'; +} + +// Load preset admin email if there is one +if(file_exists('admin_email.php')){ + require_once 'admin_email.php'; +} + +initialize(); +echo "\n------\ninstallpath set as: $ehcpinstalldir \n"; +installfiles(); +installmailserver(); +passvariablestoinstall2(); + +?> diff --git a/ehcp/install_2.php b/ehcp/install_2.php new file mode 100755 index 0000000..47eb037 --- /dev/null +++ b/ehcp/install_2.php @@ -0,0 +1,116 @@ +1){ + + # Distro and version are always sent + + # Get distro version number + $temp = trim($argv[1]); + if(stripos($temp, ".") != FALSE){ + $version = $temp; + } + + # Distro is needed for Ubuntu only features + $distro = strtolower(trim($argv[2])); +} + +for($i=3;$i<=6;$i++){ # accept following arguments in any of position. + if($argc>$i) { + print "argc:$argc\n\n"; + switch($argv[$i]) { + case 'noapt': # for only simulating install, apt-get installs are still loged onto a file + $noapt="noapt"; + echo "apt-get install disabled due to parameter:noapt \n"; + break; + case 'unattended': # tries to suppress most user dialogs.. good for a quick testing. (tr: hizlica test etmek icin guzel..) + $unattended=True; + break; + case 'light': # the light install, non-cruical parts are omitted. good for a quick testing. (tr: hizlica test etmek icin guzel..) + $installmode='light'; + break; + case 'extra': # the extra install, means more components + $installmode='extra'; + break; + case 'debug': + $debugMode = true; + break; + default: + echo __FILE__." dosyasinda bilinmeyen arguman degeri:".$argv[$i]; + break; + } + + } +} +echo "Some install parameters for file ".__FILE__.": noapt:($noapt), unattended:".($unattended===True?"exact True":"not True")." installmode:($installmode) \n"; + + +include_once('install_lib.php'); + +$phpConfDir = getPHPConfDir(); + +// Load preset installation values in install_silently.php if exists: +if(file_exists("install_silently.php")){ + require_once 'install_silently.php'; +} + +// Load preset admin email if there is one +if(file_exists('admin_email.php')){ + require_once 'admin_email.php'; +} + +include_once('install2.1.php'); + +echo "System is running $version\n"; + +echo "\nincluded install2.1.php\nhere are variables transfered:\n"; +echo +" +webdizin:$webdizin +ip:$ip +user_name:$user_name +user_email:$user_email +hostname:$hostname +installextrasoftware: $installextrasoftware +"; + +/* +ehcpmysqlpass:$ehcpmysqlpass +rootpass:$rootpass +newrootpass:$newrootpass +ehcpadminpass:$ehcpadminpass +*/ + +installsql(); + +install_vsftpd_server(); + +fail2ban_install(); + +if((isset($version) && $version != "12.10" && $distro == "ubuntu") || $distro == "debian"){ + install_nginx_webserver(); +}else{ + echo "Ubuntu 12.10 is not compatible with nginx due to bugs. Installing apache2 only. Upgrade to Ubuntu 13.04 for this functionality.\n"; +} +installapacheserver(); + +# scandb(); no more need to scan db since ver. 0.29.15 +installfinish(); + +$message=''; +exec('ifconfig',$msg); +exec('ps aux ',$msg); +foreach($msg as $m) $message.=$m."\n"; +$msg="Your EHCP Force installation has completed successfully. If you have questions or need help, please visit www.ehcpforce.tk"; + +if($user_email<>'') mail($user_email,'Your EHCP Force installation completed successfully. Have fun!',$msg,'From: info@ehcpforce.tk'); + +$realip=getlocalip2(); +if(!$app->isPrivateIp($ip)) $realip.="-realip"; # change subject if this is a server with real ip... +$ip2=trim(file_get_contents("http://ehcp.net/diger/myip.php")); +$message.="\noutside Ip detected:$ip2"; +?> diff --git a/ehcp/install_lib.php b/ehcp/install_lib.php new file mode 100755 index 0000000..3c61316 --- /dev/null +++ b/ehcp/install_lib.php @@ -0,0 +1,2089 @@ +=$currentlevel) echo $str; + +} +} + +if(!function_exists("securefilename")){ +function securefilename($fn){ + $ret=trim($fn); + $ret=str_replace(array('..','%','&'),array('','',''),$fn); + #$ret=escapeshellarg($ret); + return $ret; +} +} + + +function installaptget(){ + echo "now will try to install apt-get on your system. you need internet connection for this....\n"; + echo "apt-get installation is not implemented yet \n\n"; +} + +function checkaptget(){ + $cikti=system("which apt-get | wc -w"); + if($cikti>0) { + echo "apt-get seems to be installed on your system.\n"; + } else { + echo "apt-get is not installed.. \n"; + installaptget(); + } +} + +function hasValue($varr){ + if(isset($varr) && !empty($varr)){ + return true; + }else{ + return false; + } + +} + +function log_to_file($str){ + writeoutput("install_log.txt",$str."\n",'a',false); +} + +function aptget($arr,$forceInteraction=False){ + /* this was like: + apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch + but, when one package is not found, whole apt-get install was cancelling. + to avoid this, each is installed separately. + + tr: herbirisi teker teker kuruluyor. yoksa hata verme ihtimali var. + iki tip kurulum uygulanabilir, biri hizli, tum apt ler tek seferde, digeri yavas, tek tek... ilk basta sorabilir.. + * */ + + global $noapt, $unattended; + + if($noapt<>''){ + echo "apt-get install of these skipped because of noapt parameter:"; + print_r($arr); + return true; + } + + foreach($arr as $prog) { + # + # first install try + # assumes yes, do not remove anything, allow any unauthenticated packages, + # do not remove: this is a security concern + $cmd="apt-get -y --no-remove --allow-unauthenticated install $prog"; + + # If unattended, don't show configuration options + if($unattended && $forceInteraction == FALSE){ + $cmd = "DEBIAN_FRONTEND=noninteractive " . $cmd; + } + + log_to_file($cmd); + + cizgi(); + echo "Starting apt-get install for: $prog\n(cmd: $cmd)\n\n"; + passthru($cmd,$ret); + echo "The return value for the command \"$cmd\" was $ret\n\n"; + writeoutput("ehcp-apt-get-install.log",$cmd . " command returned $ret","a",false); + writeoutput("ehcp-apt-get-install.log",$cmd,"a",false); + + if($ret==0) continue; + + # second install try, if first fails : + # usefull if first one has failed, for reason such as a package has to be removed, if first apt-get exited for any reason, this one executes apt-get with not options, so that user can decide... + # if first is successfull, this actually does nothing... only prints that those packages are already installed... + # this way a bit slower, calls apt-get twice, but most "secure and avoids user intervention" + $cmd="apt-get -y install $prog"; + echo "\nTrying second installation type for: $prog (cmd: $cmd)\n"; + passthru($cmd); + writeoutput("ehcp-apt-get-install.log",$cmd,"a",false); + } + +}//endfunc + +function bosluk() { + echo "\n\n\n"; +} + +function cizgi() { + echo "\n---------------------------------------------------------------------\n"; +} + +function bosluk2() { + bosluk(); + cizgi(); +} + +function ehcpheader() { + global $ehcpversion; + cizgi(); + echo "-----------------------EHCP Force MAIN INSTALLER---------------------------\n"; + echo "------Easy Hosting Control Panel for Ubuntu, Debian and alikes ------\n"; + echo "--------------------------www.ehcpforce.tk-------------------------------\n"; + cizgi(); + echo "ehcp version $ehcpversion \n"; + echo "ehcp installer version $ehcpversion\n"; +} + +function bekle($s='') { # wait + global $unattended; + + if(!$unattended) getInput("press enter to continue: $s\n"); +} + + +function getInput($prompt='',$default='',$allowempty=False) { + global $unattended; + if($unattended===True and $default<>'') return $default; + + if($prompt<>'') echo $prompt; + + $giris=trim(Console::GetLine()); + + if($giris=='') { + if($allowempty===True) return $giris; + else return $default; # return default, if input is empty and allowempty is not true + } else return $giris; +} + +if(!function_exists("arraytofile")){ +function arraytofile($file,$lines) { + $new_content = join('',$lines); + $fp = fopen($file,'w'); + $write = fwrite($fp, $new_content); + fclose($fp); +} +} + +if(!function_exists("addifnotexists")){ +function addifnotexists($what,$where) { + debugecho("\naddifnotexists: ($what) -> ($where) \n ",4); + #bekle(__FUNCTION__." basliyor.."); + $what.="\n"; + $filearr=@file($where); + if(!$filearr) { + echo "cannot open file, trying to setup: ($where)\n"; + $fp = fopen($where,'w'); + fclose($fp); + $filearr=file($where); + + } //else print_r($file); + + if(array_search($what,$filearr)===false) { + echo "dosyada bulamadı ekliyor: ($what) -> ($where)\n"; + $filearr[]=$what; + arraytofile($where,$filearr); + + } else { + //echo "buldu... sorun yok. \n"; + // already found, so, do not add + } + + #bekle(__FUNCTION__." bitti..."); + +} +} + +function add_if_not_exists2($what,$where,$addfile_if_not_exists=False) { + # add a string/config value onto (at the end of) a file... + # difference from addifnotexists: it uses arrays, this will use string, so, main.cf and similar config files will be handled better.. i hope.. + # the $what should include newline too.. + # may raise error if file too big for php strings.. + + # get file + $file=@file_get_contents($where); + if($file===false) { + if($addfile_if_not_exists) file_put_contents($where,''); + else { + echo __FUNCTION__.": cannot open file...($where ) \n"; + return false; + } + } + + # add if not exist: + $bul=strstr($file,$what); + if($bul===false) $file.=$what; + + #write back + $ret=file_put_contents($where,$file); + if($ret===false){ + echo __FUNCTION__.": cannot write file back: ($where) \n"; + return false; + } + + echo __FUNCTION__.": success add strings to $where \n"; + return true; +} + +function fail2ban_install(){ # thanks to earnolmartin@gmail.com + global $installmode; + + switch($installmode) { + case 'extra': + case 'normal': + + echo "Starting fail2ban install \n"; + aptget(array('fail2ban')); + fail2ban_config(); + echo "Finished fail2ban install \n"; + + break; + + case 'light': + break; + + default: echo "Unknown installmode parameter at ".__LINE__; + } + + +} + +function fail2ban_config(){ + global $ehcpinstalldir,$user_email; + copy("$ehcpinstalldir/fail2ban/ehcp.conf","/etc/fail2ban/filter.d/ehcp.conf"); + copy("$ehcpinstalldir/fail2ban/apache-dos.conf","/etc/fail2ban/filter.d/apache-dos.conf"); + $f="/etc/fail2ban/jail.local"; + if(!file_exists($f)) copy("$ehcpinstalldir/fail2ban/jail.local",$f); + + replacelineinfile("destemail","destemail = $user_email",$f, true); + + $s=file_get_contents($f); + if(strstr($s,"[ehcp]")===false){ # if not already configured, + $ehcpF2Config=" +[ehcp] +# fail2ban section for Easy Hosting Control Panel, ehcp.net +enabled = true +port = http,https +filter = ehcp +logpath = /var/www/new/ehcp/log/ehcp_failed_authentication.log +maxretry = 10"; + file_put_contents($f,$ehcpF2Config,FILE_APPEND); + #append_to_file($f,$ehcpF2Config); + } + + if(strstr($s,"[apache-dos]")===false){ # if not already configured, + $apacheDOSF2Config=" +[apache-dos] +# Apache Anti-DDoS Security Based Log Entries from Mod Evasive Apache Module +enabled = true +port = http,https +filter = apache-dos +logpath = /var/log/apache*/*error.log +maxretry = 5"; + + file_put_contents($f,$apacheDOSF2Config,FILE_APPEND); + } + + // Restart the fail2ban daemon + manageService("fail2ban", "restart"); +} + +function apache_mod_secure_install(){ # thanks to earnolmartin@gmail.com + global $version, $distro; + // Only do this for Ubuntu versions 10 and up... not sure if this will work with normal debian + if(isset($version) && !empty($version) && stripos($version, '.') != FALSE && isset($distro) && ($distro == "ubuntu" || $distro == "debian")){ + $releaseYear = substr($version, 0, stripos($version, '.')); + if(($distro == "ubuntu" && $releaseYear > 10) || ($distro == "debian" && $releaseYear >= 7)){ + // We are not using mod_qos as it has some problems... + // However, if it starts working in the future, the framework to configure it is already here! + // echo "Starting apache2 mod_security, mod_evasive, and mod_qos install! \n"; + echo "Starting apache2 mod_security and mod_evasive install! \n"; + aptget(array('libapache2-mod-evasive', 'libapache-mod-security')); + get_mod_secure_rules(); + // compile_mod_qos(); + apache_mod_secure_config(); + mod_secure_final(); + echo "Finished apache2 mod_security and mod_evasive install \n"; + } + } +} + +function restartService($service){ + manageService($service, "restart"); +} + +function is_64bit() { + $int = "9223372036854775807"; + $int = intval($int); + if ($int == 9223372036854775807) { + /* 64bit */ + return true; + } elseif ($int == 2147483647) { + /* 32bit */ + return false; + } else { + /* error */ + return "error"; + } +} + +function compile_mod_qos(){ + echo "Getting Apache2 compile utility for modules! \n"; + aptget(array('apache2-threaded-dev', 'gcc')); + $currDir = getcwd(); + passthru2("mkdir /root/Downloads", true, true); + passthru2("cd /root/Downloads", true, true); + passthru2("mkdir mod_qos", true, true); + passthru2('wget -O "mod_qos-10.15.tar.gz" "http://www.dinofly.com/files/linux/mod_qos-10.15.tar.gz"', true, true); + passthru2('tar -zxvf "mod_qos-10.15.tar.gz" -C mod_qos', true, true); + passthru2("cd mod_qos", true, true); + passthru2("cd mod_qos-10.15", true, true); + passthru2("cd apache2", true, true); + passthru2("apxs2 -i -c mod_qos.c", true, true); + passthru2("cd $currDir", true, true); +} + +function apache_mod_secure_config(){ + global $ehcpinstalldir, $user_email, $version, $distro; + + // Mod_QOS Enable Module + //$f="/etc/apache2/mods-available/qos.load"; + //if(!file_exists($f)) copy("$ehcpinstalldir/mod_secure/qos.load",$f); + + // Mod_QOS Config + //$f="/etc/apache2/conf.d/modqos"; + //if(!file_exists($f)) copy("$ehcpinstalldir/mod_secure/modqos",$f); + + // Make the directory if it does not exist + passthru2("mkdir -p /etc/apache2/conf.d"); + + // Mod_Secure Config + $f="/etc/apache2/conf.d/modsecure"; + if(!file_exists($f)) copy("$ehcpinstalldir/mod_secure/modsecure",$f); + + // Mod_Evasive Config + $f="/etc/apache2/conf.d/modevasive"; + if(!file_exists($f)) copy("$ehcpinstalldir/mod_secure/modevasive",$f); + + replacelineinfile("DOSEmailNotify","DOSEmailNotify $user_email",$f, true); + +} + +function get_mod_secure_rules(){ + global $ehcpinstalldir, $user_email, $version, $distro; + + $releaseYear = substr($version, 0, stripos($version, '.')); + $releaseMonth = substr($version, stripos($version, '.') + 1); + + if(($distro == "ubuntu" && $releaseYear > 10) || ($distro == "debian" && $releaseYear >= 7)){ + + // Pass in , true, true as arguments so there is no escaping of commands or replacement of slash characters + $currDir = getcwd(); + passthru2("mkdir /etc/apache2/mod_security_rules", true, true); + passthru2("mkdir /root/Downloads", true, true); + passthru2("cd /root/Downloads", true, true); + passthru2("mkdir mod_security_rules_latest", true, true); + + if(($distro == "ubuntu" && (($releaseYear == 13 && $releaseMonth == 10) || ($releaseYear >= 14))) || ($distro == "debian" && $releaseYear >= 8)){ + passthru2('wget -N -O "mod_security_rules.tar.gz" "http://www.dinofly.com/files/linux/mod_security_rules_13.10.tar.gz"', true, true); + }else{ + passthru2('wget -N -O "mod_security_rules.tar.gz" "http://www.dinofly.com/files/linux/mod_security_base_rules.tar.gz"', true, true); + } + passthru2('tar -zxvf "mod_security_rules.tar.gz" -C "mod_security_rules_latest"', true, true); + passthru2("mv mod_security_rules_latest/* /etc/apache2/mod_security_rules", true, true); + passthru2("chown -R root:root /etc/apache2/mod_security_rules", true, true); + passthru2("cd $currDir", true, true); + } +} + +function mod_secure_final(){ + global $ehcpinstalldir, $user_email, $version, $distro; + + $releaseYear = substr($version, 0, stripos($version, '.')); + $releaseMonth = substr($version, stripos($version, '.') + 1); + + + if(($distro == "ubuntu" && (($releaseYear == 13 && $releaseMonth == 10) || ($releaseYear > 13))) || ($distro == "debian" && $releaseYear >= 8)){ + passthru2("a2enmod evasive"); + passthru2("a2enmod security2"); + }else{ + passthru2("a2enmod mod-evasive"); + passthru2("a2enmod mod-security"); + } + // passthru2("a2enmod qos"); + // passthru2("service apache2 restart"); +} + +function replace_in_file($find,$replace,$sourcefile,$targetfile){ + # open source/sample file, find $find, replace it to $replace, write result to $target file + # especially for editing config files, like replacing {ehcppassword} to real passwords.. + + + # get file + $file=file_get_contents($sourcefile); + if($file===false) { + echo __FUNCTION__.": cannot open file...($sourcefile ) \n"; + return false; + } + + # $find->$replace + $file=str_replace($find,$replace,$file); + + #write back + $ret=file_put_contents($targetfile,$file); + if($ret===false){ + echo __FUNCTION__.": cannot write file back: ($targetfile) \n"; + return false; + } + + echo __FUNCTION__.": success replace $find in $sourcefile -> $targetfile \n"; + return true; + +} + + + +if(!function_exists('replacelineinfile')){ +function replacelineinfile($find,$replace,$where,$addifnotexists=false) { + global $debugMode; + + // edit a line starting with $find, to edit especially conf files.. + + debugecho("\nreplaceline: ($find -> $replace) in ($where) \n "); + if($debugMode){ + log_to_file("\nreplaceline: ($find -> $replace) in ($where) \n "); + } + + $filearr=@file($where); + //if($find=='$dbrootpass=') print_r($filearr); + + if(!$filearr) { + echo "cannot open file $where... returning...\n"; + if($debugMode){ + log_to_file("cannot open file $where... returning...\n"); + } + return false; + } //else print_r($file); + + $len=strlen($find); + $newfile=array(); + $found = false; + + foreach($filearr as $line){ + $line=trim($line)."\n"; + $sub=substr($line,0,$len); + if($sub==$find){ + $found = true; + $line=$replace."\n"; + } + $newfile[]=$line; + } + + if($addifnotexists && !$found){ + echo "Line not found, adding at end: ($replace)\n"; + if($debugMode){ + log_to_file("Line not found, adding at end: ($replace)\n"); + } + $newfile[]=$replace; + } + + arraytofile($where,$newfile); + +} +} + + +if(!function_exists("editlineinfile")){ +function editlineinfile($find,$replace,$where) { + // edit a line containing $find, replace it... to edit especially /etc/apt/sour/sources.list file + + debugecho("\n replaceline: ($find -> $replace) in ($where) \n "); + $filearr=@file($where); + + + if(!$filearr) { + echo "cannot open file... returning...\n"; + return false; + } //else print_r($file); + + $newfile=array(); + + foreach($filearr as $line){ + $line=trim($line)."\n"; + $line=str_replace($find,$replace,$line); + $newfile[]=$line; + } + arraytofile($where,$newfile); +} +} + + +if(!function_exists("writeoutput")){ +function writeoutput($file, $string, $mode="w",$log=true) { + if (!($fp = fopen($file, $mode))) { + echo "hata: dosya acilamadi: $file (writeoutput) !"; + return false; + } + if (!fputs($fp, $string . "\n")) { + fclose($fp); + echo "hata: dosyaya yazilamadi: $file (writeoutput) !"; + return false; + } + fclose($fp); + if($log) echo "\n(".__FILE__.") file written successfully: $file, mode:$mode \n"; + return true; +} +} + +if(!function_exists('getlocalip')){ +function getlocalip($interface='eth0') { + global $localip; + + $ipline=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | head -1"); + + if(!isset($ipline) || empty($ipline)){ + $ipline = "127.0.0.1"; + } + + $localip=$ipline; + + return $ipline; + +} +} + + +function getlocalip2($interface='eth0') { + global $localip; + + // If it's already been set, return it + if($localip<>'') return $localip; + + // Get local IP address + $ip=getlocalip($interface); + + // Set it to our global variable + $localip=$ip; + + // Return the ip address + return $ip; +} + +function dovecot_install_configuration($params){ + # use quide: http://workaround.org/articles/ispmail-etch/ + # remove all courier + # install dovecot using apt-get + # configure dovecot using mysql auth.... +} + +function copyPostFixConfig(){ + if(!file_exists('/etc/postfix/main.cf')) passthru2("cp ".$app->ehcpdir."/etc/postfix/main.cf.sample /etc/postfix/main.cf"); # on some systems, this is deleted somehow. +} + +function mailNameFix(){ + $mailname= @file_get_contents('/etc/mailname'); + if(trim($mailname)==''){ + $mailname="mail.".gethostname(); + file_put_contents('/etc/mailname', $mailname); + } +} + +function mailconfiguration($params) { + global $app,$ehcpinstalldir,$ip,$hostname,$user_email,$user_name,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass; + echo "configuring mail ... ".__FUNCTION__."\n"; + + # very similar to: https://help.ubuntu.com/community/PostfixCompleteVirtualMailSystemHowto + #print_r($params); + # echo 'var_dump($ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass);\n'; + # var_dump($ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass); + /* + + courier'e alternatif: dovecot: + * + http://www.opensourcehowto.org/how-to/mysql/mysql-users-postfixadmin-postfix-dovecot--squirrelmail-with-userprefs-stored-in-mysql.html + http://www.howtoforge.com/virtual-users-and-domains-postfix-dovecot-mysql-centos4.5 + http://workaround.org/articles/ispmail-etch/ + + Gerekli arama: /etc/dovecot-mysql.conf + + files to edit: + /etc/postfix/mysql-virtual_domains.cf + /etc/postfix/mysql-virtual_forwardings.cf + /etc/postfix/mysql-virtual_mailboxes.cf + /etc/postfix/mysql-virtual_email2email.cf + /etc/postfix/mysql-virtual_mailbox_limit_maps.cf + /etc/postfix/mysql-virtual_transports.cf + + maybe we can switch to dovecot, if i can, a good start: http://workaround.org/ispmail/etch + + */ + + + + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = domains +select_field = 'virtual' +where_field = domainname +hosts = localhost +additional_conditions = and domainname in (select DISTINCT domainname from emailusers union select domainname from forwardings union select domainname from emailusers)"; + + writeoutput("/etc/postfix/mysql-virtual_domains.cf",$filecontent,"w"); + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = forwardings +select_field = destination +where_field = source +hosts = localhost"; + writeoutput("/etc/postfix/mysql-virtual_forwardings.cf",$filecontent,"w"); + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = emailusers +select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') +where_field = email +hosts = localhost"; + writeoutput("/etc/postfix/mysql-virtual_mailboxes.cf",$filecontent,"w"); + + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = emailusers +select_field = email +where_field = email +hosts = localhost"; + writeoutput("/etc/postfix/mysql-virtual_email2email.cf",$filecontent,"w"); + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = emailusers +select_field = quota +where_field = email +hosts = localhost"; + + writeoutput("/etc/postfix/mysql-virtual_mailbox_limit_maps.cf",$filecontent,"w"); + + + # autoreply configuration: coded like: http://www.progression-asia.com/node/87 + + /* + I used ehcp's own php application, autoreply.php, instead of yaa.pl, since yaa.pl failed somehow, I wrote autoreply simply.. + + required db tables:(these will be setup in sql section) + + CREATE TABLE transport ( + domainname varchar(128) NOT NULL default '', + transport varchar(128) NOT NULL default '', + UNIQUE KEY domainname (domainname) + ) TYPE=MyISAM; + + */ + + $filecontent="user = ehcp +password = ".$params['ehcppass']." +dbname = ehcp +table = transport +select_field = transport +where_field = domainname +hosts = localhost"; + + writeoutput("/etc/postfix/mysql-virtual_transports.cf",$filecontent,"w"); + + # edit main.cf: + $add=" + # ehcp: autoresponder code: + ehcp_autoreply unix - n n - - pipe + user=vmail + argv=".$ehcpinstalldir."/misc/autoreply.php \$sender \$recipient + "; + + add_if_not_exists2($add,'/etc/postfix/master.cf'); # this function may also be used to setup spamassassin and related stuff. soon to implement spamassassin support in ehcp automatically. (manually always possible..) + replace_in_file("#submission inet n - - - - smtpd","submission inet n - - - - smtpd",'/etc/postfix/master.cf','/etc/postfix/master.cf'); + add_if_not_exists2("submission inet n - - - - smtpd",'/etc/postfix/master.cf'); # 587 kullanan yerler icin.. + + # classapp'da checktable yapılacak yenile.. + # end autoreply configuration + copyPostFixConfig(); + + replacelineinfile("bind-address","bind-address=0.0.0.0",'/etc/mysql/my.cnf', false); + replacelineinfile("bind-address","bind-address=0.0.0.0",'/etc/mysql/mariadb.conf.d/50-server.cnf', false); + replacelineinfile("skip-innodb","#skip-innodb",'/etc/mysql/mariadb.cnf', false); + + passthru3("chmod o= /etc/postfix/mysql-virtual_*.cf"); + passthru3("chgrp postfix /etc/postfix/mysql-virtual_*.cf"); + + #Now we setup a user and group called vmail with the home directory /home/vmail. This is where all mail boxes will be stored. + + passthru3("groupdel vmail"); + passthru3("userdel vmail"); + echo "----------- Other user/group with uid/gid of 5000, you need to delete them, if any -----------"; + passthru3("grep 5000 /etc/passwd "); + passthru3("grep 5000 /etc/group "); + echo "----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------"; + + + passthru3("groupadd -g 5000 vmail"); + passthru3("useradd -g vmail -u 5000 vmail -d /home/vmail -m"); + passthru3("chown -Rf vmail /home/vmail"); + passthru3("adduser postfix sasl"); + + // burda input vardi... initialize a aktarildi.. + $hostname=exec("hostname"); + + + // ipnin ilk uc rakami alinip network alınacak + $ips=explode(".",$ip); + array_pop($ips); + $ips[]="0/24"; // calculate C class net number. + $net=implode(".",$ips); + + passthru3("openssl req -new -config $ehcpinstalldir/LocalServer.cnf -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 365 -x509"); + passthru3("chmod o= /etc/postfix/smtpd.key"); + passthru3("openssl req -passout pass:$ehcpmysqlpass -new -x509 -keyout /etc/postfix/cakey.pem -out /etc/postfix/cacert.pem -days 3650 -config $ehcpinstalldir/LocalServer.cnf"); ## yeni 13.6.2009 + + + passthru3("postconf -e \"myhostname = $hostname\""); + passthru3("postconf -e \"relayhost = \""); + passthru3("postconf -e \"mydestination = localhost, $ip \""); + passthru3("postconf -e 'mynetworks = 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/16, 10.0.0.0/8, $net '"); + passthru3("postconf -e 'virtual_alias_domains ='"); + passthru3("postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf'"); + passthru3("postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'"); #autoresponder + + passthru3("postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'"); + passthru3("postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'"); + passthru3("postconf -e 'virtual_mailbox_base = /home/vmail'"); + passthru3("postconf -e 'virtual_uid_maps = static:5000'"); + passthru3("postconf -e 'virtual_gid_maps = static:5000'"); + passthru3("postconf -e 'smtpd_sasl_auth_enable = yes'"); + passthru3("postconf -e 'smtpd_sasl_security_options = noanonymous'"); + passthru3("postconf -e 'broken_sasl_auth_clients = yes'"); + + passthru3("postconf -e 'smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_client_access hash:/var/lib/pop-before-smtp/hosts,reject_unauth_destination'"); // this is used with pop-before-smtp + #passthru3("postconf -e 'smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination'"); // this is used with sasl authenticated + passthru3("postconf -e 'smtp_use_tls = yes'"); ## yeni + passthru3("postconf -e 'smtpd_use_tls = yes'"); + passthru3("postconf -e 'smtpd_tls_auth_only = no'"); ## yeni + passthru3("postconf -e 'smtpd_tls_CAfile = /etc/postfix/cacert.pem'"); ## yeni 13.6, dd.mm + passthru3("postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'"); + passthru3("postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'"); + # this is partially taken from https://help.ubuntu.com/8.04/serverguide/C/postfix.html + passthru3("postconf -e 'smtpd_tls_loglevel = 1'"); ## yeni 13.6, dd.mm + passthru3("postconf -e 'smtpd_tls_received_header = yes'"); ## yeni 13.6, dd.mm + passthru3("postconf -e 'smtpd_tls_session_cache_timeout = 3600s'"); ## yeni 13.6, dd.mm + passthru3("postconf -e 'tls_random_source = dev:/dev/urandom'"); ## yeni 13.6, dd.mm + + passthru3("postconf -e 'virtual_create_maildirsize = yes'"); + passthru3("postconf -e 'virtual_mailbox_extended = yes'"); + passthru3("postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'"); + passthru3("postconf -e 'virtual_mailbox_limit_override = yes'"); + passthru3("postconf -e 'virtual_maildir_limit_message = \"The user you are trying to reach is over quota.\"'"); + passthru3("postconf -e 'virtual_overquota_bounce = yes'"); + passthru3("postconf -e 'debug_peer_list = '"); + passthru3("postconf -e 'sender_canonical_maps = '"); + passthru3("postconf -e 'debug_peer_level = 1'"); + passthru3("postconf -e 'virtual_overquota_bounce = yes'"); + passthru3("postconf -e 'proxy_read_maps = \$local_recipient_maps \$mydestination \$virtual_alias_maps \$virtual_alias_domains \$virtual_mailbox_maps \$virtual_mailbox_domains \$relay_recipient_maps \$canonical_maps \$sender_canonical_maps \$recipient_canonical_maps \$relocated_maps \$mynetworks \$virtual_mailbox_limit_maps \$transport_maps'"); + passthru3("postconf -e 'smtpd_banner =\$myhostname ESMTP \$mail_name powered by Easy Hosting Control Panel (ehcp) on Ubuntu, www.ehcp.net'"); + + # passthru3("dpkg-statoverride --force --update --add root sasl 755 /var/run/saslauthd"); # may be required on some systems... + + echo "configuring saslauthd \n"; + passthru3("mkdir -p /var/spool/postfix/var/run/saslauthd"); + + # here, both params, options added, in case it may be changed. + $filecontent=" + NAME=\"saslauthd\" + START=yes + MECHANISMS=\"pam\" + PARAMS=\"-s 5120 -m /var/spool/postfix/var/run/saslauthd -r\" + OPTIONS=\"-s 5120 -m /var/spool/postfix/var/run/saslauthd -r\" + THREADS=2 + "; + + writeoutput("/etc/default/saslauthd",$filecontent,"w"); + replacelineinfile("PIDFILE=","PIDFILE=\"/var/spool/postfix/var/run/\${NAME}/saslauthd.pid\"",'/etc/init.d/saslauthd', true); + + configurepamsmtp(array('ehcppass'=>$ehcpmysqlpass)); + + + echo "editing: /etc/postfix/sasl/smtpd.conf\n"; + $filecontent=" + pwcheck_method: saslauthd + mech_list: plain login + allow_plaintext: true + "; + writeoutput("/etc/postfix/sasl/smtpd.conf",$filecontent,"w"); + + echo "Configuring Courier\n"; + echo "Now configuring to tell Courier that it should authenticate against our MySQL database."; + addifnotexists("authmodulelist=\"authmysql\"","/etc/courier/authdaemonrc"); + + //** tablo ismi degisirse, asagidaki emailusers da degismeli + + configureauthmysql(array('ehcppass'=>$ehcpmysqlpass)); + passthru("chown -Rvf postfix /var/lib/postfix/"); + passthru("chmod -R 755 /var/spool/postfix"); + passthru("chmod 1733 /var/spool/postfix/maildrop"); + + passthru2("newaliases"); # on some systems, aliases.db is deleted by user or somehow, this fixes that. + passthru("cp -vf pop-before-smtp.conf /etc/pop-before-smtp/"); + + # adjust roundcube: + # adjust symlink for roundcube + + // Make sure roundcube was found + $roundCubeExistsInAptRepo = shell_exec("apt-cache search --names-only 'roundcube'"); + if(!empty($roundCubeExistsInAptRepo)){ + passthru2("ln -s /usr/share/roundcube /var/www/new/ehcp/webmail"); + replacelineinfile("\$rcmail_config['default_host']","\$rcmail_config['default_host']='localhost';",'/etc/roundcube/main.inc.php',true); + }else{ + passthru2("ln -s /var/www/new/ehcp/webmail2 /var/www/new/ehcp/webmail"); + } + # end adjust roundcube + + foreach(array('pop-before-smtp','postfix','saslauthd','courier-authdaemon','courier-imap','courier-imap-ssl','courier-pop','courier-pop-ssl') as $service) + manageService($service, "restart"); + + passthru("postfix check"); + + +}# end mailconfiguration + +function configurepamsmtp($params){ + echo "editing: /etc/pam.d/smtp (".__FUNCTION__.")\n"; + + if((getIsUbuntu() && getUbuntuReleaseYear() >= "16") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + $filecontent=" +auth required pam_python.so /etc/security/pam_dbauth_smtp.py +account required pam_python.so /etc/security/pam_dbauth_smtp.py + "; + }else{ + $filecontent=" +auth required pam_mysql.so user=ehcp passwd=".$params['ehcppass']." host=127.0.0.1 db=ehcp table=emailusers usercolumn=email passwdcolumn=password crypt=1 +account sufficient pam_mysql.so user=ehcp passwd=".$params['ehcppass']." host=127.0.0.1 db=ehcp table=emailusers usercolumn=email passwdcolumn=password crypt=1 + "; + } + writeoutput("/etc/pam.d/smtp",$filecontent,"w"); +} + +function configureauthmysql($params){ + echo "(".__FUNCTION__.")\n"; + + $courierMYSQLTemplate = "etc/courier/authmysqlrc_template.conf"; + if(file_exists($courierMYSQLTemplate)){ + $filecontent = file_get_contents("etc/courier/authmysqlrc_template.conf"); + $filecontent = str_replace("{EHCP_MYSQL_PASS}", $params['ehcppass'], $filecontent); + }else{ + + $filecontent=" + # + # authmysqlrc created from authmysqlrc.dist by sysconftool + MYSQL_SERVER localhost + MYSQL_USERNAME ehcp + MYSQL_PASSWORD ".$params['ehcppass']." + MYSQL_PORT 0 + MYSQL_OPT 0 + MYSQL_DATABASE ehcp + MYSQL_USER_TABLE emailusers + MYSQL_CRYPT_PWFIELD password + #MYSQL_CLEAR_PWFIELD password + MYSQL_UID_FIELD 5000 + MYSQL_GID_FIELD 5000 + MYSQL_LOGIN_FIELD email + MYSQL_HOME_FIELD \"/home/vmail\" + MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') + #MYSQL_NAME_FIELD + MYSQL_QUOTA_FIELD quota + ##NAME: MARKER:0 + # + # Do not remove this section from this configuration file. This section + # must be present at the end of this file."; + } + + writeoutput("/etc/courier/authmysqlrc",$filecontent,"w"); +} + +# Returns just the release year of an Ubuntu distro +function getReleaseYear($ver){ #by earnolmartin@gmail.com + if(isset($ver) && !empty($ver) && stripos($ver, '.') != FALSE){ + $releaseYear = substr($ver, 0, stripos($ver, '.')); + return $releaseYear; + } +} + +function mysqldebconf($rYear){ //by earnolmartin@gmail.com + global $rootpass; + switch($rYear){ + case "10": + if(hasValue($rootpass)){ + $comms[] = "echo 'mysql-server-5.1 mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mysql-server-5.1 mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + }else{ + $comms[] = "echo 'mysql-server-5.1 mysql-server/root_password_again password 1234' | debconf-set-selections"; + $comms[] = "echo 'mysql-server-5.1 mysql-server/root_password password 1234' | debconf-set-selections"; + } + break; + case "12": + case "13": + case "14": + case "15": + case "16": + default: + if(hasValue($rootpass)){ + $comms[] = "echo 'mysql-server-5.5 mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mysql-server-5.5 mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-5.5 mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-5.5 mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-10.0 mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-10.0 mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + }else{ + $comms[] = "echo 'mysql-server-5.5 mysql-server/root_password_again password 1234' | debconf-set-selections"; + $comms[] = "echo 'mysql-server-5.5 mysql-server/root_password password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-5.5 mysql-server/root_password password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-5.5 mysql-server/root_password_again password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-10.0 mysql-server/root_password password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-10.0 mysql-server/root_password_again password 1234' | debconf-set-selections"; + } + break; + } + + // More generic + $mariadbVersionStrFromAptCache = shell_exec('bash /var/www/new/ehcp/scripts/getMariaDbMajorMinorVersion.sh'); + + // For all versions + if(hasValue($rootpass)){ + $comms[] = "echo 'mysql-server mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mysql-server mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + if(isset($mariadbVersionStrFromAptCache) && !empty($mariadbVersionStrFromAptCache)){ + $comms[] = "echo 'mariadb-server-" . $mariadbVersionStrFromAptCache . " mysql-server/root_password password " . $rootpass . "' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-" . $mariadbVersionStrFromAptCache . " mysql-server/root_password_again password " . $rootpass . "' | debconf-set-selections"; + } + }else{ + $comms[] = "echo 'mysql-server mysql-server/root_password_again password 1234' | debconf-set-selections"; + $comms[] = "echo 'mysql-server mysql-server/root_password password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server mysql-server/root_password_again password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server mysql-server/root_password password 1234' | debconf-set-selections"; + if(isset($mariadbVersionStrFromAptCache) && !empty($mariadbVersionStrFromAptCache)){ + $comms[] = "echo 'mariadb-server-" . $mariadbVersionStrFromAptCache . " mysql-server/root_password password 1234' | debconf-set-selections"; + $comms[] = "echo 'mariadb-server-" . $mariadbVersionStrFromAptCache . " mysql-server/root_password_again password 1234' | debconf-set-selections"; + } + } + + return $comms; +} + +function reloadAppArmorMySQL(){ + // Function needed to fix MySQL Socket Bug in Ubuntu? + manageService("mysql", "stop"); + passthru3("killall mysqld_safe"); + passthru3("killall mysqld"); + // Even if this fails, things should keep moving smoothly. + manageService("apparmor", "reload"); + manageService("mysql", "start"); +} + +function check_if_mysql_running(){ + $out=executeProg3("ps aux | grep mysql | grep -v grep"); + $ret=strlen($out)>20; # if running.. + if($ret) echo "ehcp: Mysql/Mariadb seems running. this is good. \n\n"; + return $ret; +} + +function installMySQLServ(){#by earnolmartin@gmail.com + global $unattended, $distro, $version, $usePrompts; + + # Get distro release year + $rYear = getReleaseYear($version); + + # Get question answers for installer package + if($distro == "ubuntu" || $distro == "debian"){ + $comms = mysqldebconf($rYear); + if(isset($comms) && is_array($comms)){ + foreach($comms as $comm){ + passthru3($comm); + } + } + } + + aptget(array('mariadb-server','mariadb-client'), $usePrompts); # We're going with MariaDB now... Oracle is evil. + + if(!serviceExists("mysql") and !check_if_mysql_running()) { + echo "Mariadb installation seems failed. Installing the normal mysql libraries instead: \n"; + # Install MySQL Server With Pre-Answered Prompts + aptget(array('mysql-server','mysql-client'),$usePrompts); + } else { + print "installing php5-mysqlnd; because, php5-mysql may not work with mariadb \n"; + # related error: mysqli_real_connect(): Headers and client library minor version mismatch. Headers:50538 Library:100010 in adodb + aptget(array("php5-mysqlnd"),$usePrompts); + } + + replacelineinfile("character-set-server","character-set-server = latin1","/etc/mysql/mariadb.conf.d/50-server.cnf", false); + replacelineinfile("character-set-server","character-set-server = latin1","/etc/mysql/mariadb.conf.d/50-client.cnf", false); + + replacelineinfile("collation-server","collation-server = latin1_swedish_ci","/etc/mysql/mariadb.conf.d/50-server.cnf", false); + replacelineinfile("collation-server","collation-server = latin1_swedish_ci","/etc/mysql/mariadb.conf.d/50-client.cnf", false); + + replacelineinfile("character-set-server","character-set-server = latin1","/etc/mysql/mysql.conf.d/mysqld.cnf", false); + replacelineinfile("collation-server","collation-server = latin1_swedish_ci","/etc/mysql/mysql.conf.d/mysqld.cnf", false); + + replacelineinfile("character-set-server","character-set-server = latin1","/etc/mysql/my.cnf", false); + replacelineinfile("collation-server","collation-server = latin1_swedish_ci","/etc/mysql/my.cnf", false); +} + +function installPHPMYAdmin(){#by earnolmartin@gmail.com + global $unattended, $usePrompts, $mysql_root_pass, $rootpass, $php_myadmin_pass; + + if($unattended){ + # Answer automatic configuration questions + # http://gercogandia.blogspot.com/2012/11/automatic-unattended-install-of.html + passthru3("echo 'phpmyadmin phpmyadmin/dbconfig-install boolean true' | debconf-set-selections"); + + if(hasValue($php_myadmin_pass)){ + passthru3("echo 'phpmyadmin phpmyadmin/app-password-confirm password " . $php_myadmin_pass . "' | debconf-set-selections"); + passthru3("echo 'phpmyadmin phpmyadmin/mysql/app-pass password " . $php_myadmin_pass . "' | debconf-set-selections"); + }else{ + passthru3("echo 'phpmyadmin phpmyadmin/app-password-confirm password 1234' | debconf-set-selections"); + passthru3("echo 'phpmyadmin phpmyadmin/mysql/app-pass password 1234' | debconf-set-selections"); + } + + if(hasValue($rootpass)){ + passthru3("echo 'phpmyadmin phpmyadmin/mysql/admin-pass password " . $rootpass . "' | debconf-set-selections"); + }else{ + passthru3("echo 'phpmyadmin phpmyadmin/mysql/admin-pass password 1234' | debconf-set-selections"); + } + + passthru3("echo 'phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2' | debconf-set-selections"); + passthru3("echo 'phpmyadmin phpmyadmin/dbconfig-reinstall boolean true' | debconf-set-selections"); + } + + # Install PHPMyAdmin With Pre-Answered Prompts + aptget(array('phpmyadmin'),$usePrompts); +} + +function installEHCPDaemon(){ + if(!file_exists("/etc/init.d/ehcp")){ + passthru("cp ./ehcp /etc/init.d/"); + passthru("systemctl daemon-reload"); + } +} + +function installRoundCube(){#by earnolmartin@gmail.com + global $unattended, $usePrompts, $mysql_root_pass, $rcube_pass, $rootpass; + + if($unattended){ + # Answer automatic configuration questions + # http://gercogandia.blogspot.com/2012/11/automatic-unattended-install-of.html + + if(hasValue($rcube_pass)){ + passthru3("echo 'roundcube-core roundcube/password-confirm password " . $rcube_pass . "' | debconf-set-selections"); + passthru3("echo 'roundcube-core roundcube/mysql/app-pass password " . $rcube_pass . "' | debconf-set-selections"); + }else{ + passthru3("echo 'roundcube-core roundcube/password-confirm password 1234' | debconf-set-selections"); + passthru3("echo 'roundcube-core roundcube/mysql/app-pass password 1234' | debconf-set-selections"); + } + + if(hasValue($rootpass)){ + passthru3("echo 'roundcube-core roundcube/mysql/admin-pass password " . $rootpass . "' | debconf-set-selections"); + }else{ + passthru3("echo 'roundcube-core roundcube/mysql/admin-pass password 1234' | debconf-set-selections"); + } + + passthru3("echo 'roundcube-core roundcube/database-type select mysql' | debconf-set-selections"); + passthru3("echo 'roundcube-core roundcube/dbconfig-install boolean true' | debconf-set-selections"); + } + + # Install Roundcube With Pre-Answered Prompts + aptget(array('roundcube', 'roundcube-mysql'),$usePrompts); +} + +function installmailserver(){ + global $app,$ehcpinstalldir,$ip,$hostname,$user_email,$user_name,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass,$installmode,$unattended; + echo "starting mail server installation (postfix and related programs)\n\n"; + + # If /etc/postfix/main.cf does not exist, it must exist before unattended install will work properly with PostFix + # See here: + # http://www.whatastruggle.com/postfix-non-interactive-install + # Added by Eric Arnol-Martin + if($unattended){ + copyPostFixConfig(); + passthru3("echo 'postfix postfix/main_mailer_type select Internet Site' | debconf-set-selections"); + passthru3("echo 'postfix postfix/mailname string $(hostname)' | debconf-set-selections"); + } + + # Install these packages and answer configuration questions if unattended + # Then install the rest of the packages + # Added by Eric Arnol-Martin + # Place these functions wherever you want in your switch statement... they are currently here for testing + + switch($installmode) { + case 'extra': + case 'normal': installRoundCube();installPHPMYAdmin(); + case 'light': aptget(array('postfix','postfix-mysql','courier-authdaemon','courier-authmysql','courier-authlib-mysql','courier-pop','courier-pop-ssl','courier-imap','courier-imap-ssl','libsasl2-2','libsasl2','libsasl2-modules','libsasl2-modules-sql','sasl2-bin','libpam-mysql','openssl','pop-before-smtp')); # changed libsasl2-2 to libsasl2 ** + break; + default: echo "Unknown installmode parameter at ".__LINE__; + } + + // Get libpam-python working if Ubuntu >= 16 or Debian >= 8 + if((getIsUbuntu() && getUbuntuReleaseYear() >= "16") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + installPythonPamMysql(); + } + + // No longer needed + // Below lines were causing problems on latest Ubuntu distros + // passthru2("killall mysqld_safe"); # because, after first install of mysql, this process somehow uses %100 of cpu, in an endless loop.. kill this and restart mysql.. + // passthru2("killall mysqld"); + sleep(10); + manageService("mysql", "restart"); + passthru2("cp -rf /usr/share/phpmyadmin /var/www/new"); + + # aptitude install postfix postfix-mysql postfix-doc mysql-client courier-authdaemon courier-authmysql courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin pop-before-smtp + + + #remove: apt-get remove postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin + bosluk2(); + # all mail configuration should be moved into this function: bvidinli, to be able to re-configure mail later + mailconfiguration(array('ehcppass'=>$ehcpmysqlpass)); + mailNameFix(); + + echo "\n\nfinished mail server,pop3,imap installation \n"; +} + +function installPythonPamMysql(){ + // libpam-mysql no longer works in Ubuntu 16.04... due to deprecated functionality in mysql... see here: https://bugs.launchpad.net/ubuntu/+source/pam-mysql/+bug/1574900 + // So, we can use this replacement :) + global $ehcpinstalldir, $ehcpmysqlpass; + + // Install prerequisites + aptget(array('libpam-python', 'python-pip', 'python-dev', 'build-essential')); + passthru2("pip install passlib"); + + // Copy our libpam-python scripts to /etc/security + passthru2("cp -vf $ehcpinstalldir/etc/pam/pam_dbauth_smtp.conf /etc/security/pam_dbauth_smtp.conf"); + passthru2("cp -vf $ehcpinstalldir/etc/pam/pam_dbauth_smtp.py /etc/security/pam_dbauth_smtp.py"); + passthru2("cp -vf $ehcpinstalldir/etc/pam/pam_dbauth_vsftpd.conf /etc/security/pam_dbauth_vsftpd.conf"); + passthru2("cp -vf $ehcpinstalldir/etc/pam/pam_dbauth_vsftpd.py /etc/security/pam_dbauth_vsftpd.py"); + + // Replace EHCP mysql password with the correct one + replacelineinfile("password=","password=" . $ehcpmysqlpass,"/etc/security/pam_dbauth_smtp.conf", true); + replacelineinfile("password=","password=" . $ehcpmysqlpass,"/etc/security/pam_dbauth_vsftpd.conf", true); +} + +function rebuild_nginx_config2($mydir){ + global $app, $phpConfDir; + + passthru3("rm -rvf /etc/nginx/sites-enabled/*"); + + #passthru2("cp $mydir/etc/nginx/nginx.conf /etc/nginx/nginx.conf"); + + $conf=file_get_contents("$mydir/etc/nginx/nginx.conf"); # replace tags with actual values from class + $conf=str_replace(array('{wwwuser}','{wwwgroup}'),array($app->wwwuser,$app->wwwgroup),$conf); + file_put_contents("/etc/nginx/nginx.conf",$conf); + + + passthru2("cp $mydir/etc/nginx/default.nginx /etc/nginx/sites-enabled/default"); + passthru2("cp $mydir/etc/nginx/apachetemplate.nginx $mydir/apachetemplate"); + passthru2("cp $mydir/etc/nginx/redirect $mydir/apachetemplate_redirect"); + passthru2("cp $mydir/etc/nginx/apachetemplate.nginx $mydir/apachetemplate_passivedomains"); + passthru2("cp $mydir/etc/nginx/apache_subdomain_template.nginx $mydir/apache_subdomain_template"); + replacelineinfile("listen =","listen = 9000","$phpConfDir/fpm/pool.d/www.conf", true); + manageService("php5-fpm", "restart"); +} + +function install_nginx_webserver(){ + global $app; + + # thanks to webmaster@securitywonks.net for encourage of nginx integration + echo "\nStarting nginx webserver install (not default)\n"; + #bekle(); + + // Stop apache if it is running so nginx will install... thanks Ubuntu + manageService("apache2", "stop"); + + // Install nginx stuff + aptget(array('nginx','php5-fpm','php-fpm','php5-cgi','php-cgi')); # apt-get install nginx php5-fpm php5-cgi + copy("$mydir/etc/nginx/mime.types","/etc/nginx/mime.types"); + + // Stop and disable services + manageService("php5-fpm", "stop"); + manageService("nginx", "stop"); + $app->disableService("php5-fpm"); + $app->disableService("nginx"); + + // Start apache2 + manageService("apache2", "start"); + + echo "\nEnd nginx install\n"; + #bekle(); +} + +function installapacheserver($apacheconf=''){ + global $app,$ehcpinstalldir; + echo "\nStarting apache2 webserver install (default webserver)\n"; + #bekle(__FUNCTION__." basliyor.."); + + aptget(array('libapache2-mod-php5','libapache2-mod-php','php5','php')); + rebuild_apache2_config2(); +} + +function rebuild_apache2_config2(){ + global $app,$ehcpinstalldir; + echo "* installpath set as: $ehcpinstalldir \n"; + + $tarih=date("YmdHis"); + passthru2("mkdir -p /root/Backup/apache"); + passthru2("cp -rvf /etc/apache2 /root/Backup/apache/apache2.backupbyehcp.$tarih"); + addifnotexists("Include $ehcpinstalldir/apachehcp_subdomains.conf ", "/etc/apache2/apache2.conf"); + addifnotexists("Include $ehcpinstalldir/apachehcp_auth.conf ", "/etc/apache2/apache2.conf"); + addifnotexists("Include $ehcpinstalldir/apachehcp_passivedomains.conf ", "/etc/apache2/apache2.conf"); + addifnotexists("Include $ehcpinstalldir/apachehcp.conf", "/etc/apache2/apache2.conf"); + addifnotexists("Include $ehcpinstalldir/apachehcp_globalpanelurls.conf", "/etc/apache2/apache2.conf"); + #replacelineinfile('NameVirtualHost','NameVirtualHost *','/etc/apache2/ports.conf'); + #editlineinfile("Options Indexes","Options -Indexes","/etc/apache2/sites-enabled/000-default"); + + addifnotexists("ServerName myserver", "/etc/apache2/apache2.conf"); + if(file_exists("/etc/apache2/envvars")) { + replacelineinfile("export APACHE_RUN_USER=","export APACHE_RUN_USER=".$app->wwwuser,"/etc/apache2/envvars", true); + replacelineinfile("export APACHE_RUN_GROUP=","export APACHE_RUN_GROUP=".$app->wwwgroup,"/etc/apache2/envvars", true); + } else { + replacelineinfile("User ","User ".$app->wwwuser,"/etc/apache2/apache2.conf", true); + replacelineinfile("User ","Group ".$app->wwwgroup,"/etc/apache2/apache2.conf", true); + } + #replacelineinfile('DocumentRoot /','DocumentRoot /var/www','/etc/apache2/sites-available/default'); + + passthru2("cp -vf /etc/apache2/sites-available/default /etc/apache2/sites-available/default.original.$tarih"); # backup original apache default conf + passthru2("cp -vf $ehcpinstalldir/etc/apache2/default /etc/apache2/sites-available/default"); # write new conf with new settings that has -Indexes and so on... may be disabled, may be incompatible with future versions of apache2 + + passthru2("cp -vf $ehcpinstalldir/etc/apache2/default /etc/apache2/sites-available/000-default"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/apachetemplate_ipbased $ehcpinstalldir/"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/apachetemplate $ehcpinstalldir/"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/apachetemplate_passivedomains $ehcpinstalldir/"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/apache_subdomain_template $ehcpinstalldir/"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/redirect $ehcpinstalldir/apachetemplate_redirect"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/apachetemplate_ehcp_panel $ehcpinstalldir/"); + + // Get any custom ports Apache is currently listening on + $customPorts = getCustomApache2ListenPorts(); + + // Replace the ports file + if((getIsUbuntu() && getUbuntuReleaseYear() >= "14") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + passthru2("cp -vf $ehcpinstalldir/etc/apache2/ports_ubu14.conf /etc/apache2/ports.conf"); + }else{ + passthru2("cp -vf $ehcpinstalldir/etc/apache2/ports.conf /etc/apache2/ports.conf"); + } + + // Re-add any custom ports + addCustomPortsToApache($customPorts); + + passthru3("rm -rvf /etc/apache2/sites-enabled/*"); + passthru2("cp -vf $ehcpinstalldir/etc/apache2/default /etc/apache2/sites-enabled/"); + + #passthru2("ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load"); + passthru2("a2enmod rewrite"); + passthru2("a2enmod php5"); + passthru2("a2enmod expires"); + passthru2("a2enmod headers"); + passthru2("cp -vf /etc/apache2/mods-available/php5.* /etc/apache2/mods-enabled/"); + + passthru("cp ./wwwindex.html /var/www/apache2-default/index.html"); + passthru("cp -rvf ./images_default_index /var/www/apache2-default/"); + + # default apache setting + passthru("cp ./wwwindex.html /var/www/index.html"); + passthru("cp -rvf ./images_default_index /var/www/"); + + # new ehcp setting since ver 0.29.15 - added at 13.11.2010 + passthru2("mkdir -p /var/www/new"); + passthru("cp ./wwwindex.html /var/www/new/index.html"); + passthru("cp -rvf ./images_default_index /var/www/new/"); + + passthru("chmod a+r /var/www/apache2-default/index.html"); + passthru("chmod a+r /var/www/index.html"); + + bosluk2(); +} + +function install_pure_ftpserver() { + global $app; + #----------------------start ftp install -------------------------------------- + # this works on ubuntu, but not on debian, so, disabled at the moment + echo "Now, going to install pureftpd to your server,"; + aptget(array('pure-ftpd-mysql')); + + passthru("groupadd -g 2001 ftpgroup"); + passthru("useradd -u 2001 -s /bin/false -d /bin/null -c \"pureftpd user\" -g ftpgroup ftpuser"); + passthru("cp -rvf pureftpd_mysql.conf /etc/pure-ftpd/db/mysql.conf"); + passthru("echo yes > /etc/pure-ftpd/conf/ChrootEveryone"); + passthru("echo yes > /etc/pure-ftpd/conf/CreateHomeDir"); + bosluk(); + echo "you should manually uninstall any other ftp server from your system... \n"; + + manageService("pure-ftpd-mysql", "start"); + echo "finished pureftpd installation. your ftp server now should be ready.\n"; + #bekle(); + bosluk2(); + #----------------------end ftp install -------------------------------------- +} + +function remove_pure_ftpserver(){ + // to be coded later, if needed. +} + +function vsftpd_configuration($params){ + global $app,$ip; #$ehcpinstalldir,$ip,$user_email,$user_name,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass; + + # this function is written to allow changing password later, after install... it also makes configuration while install... + echo "configuring vsftpd: (".__FUNCTION__.")\n"; + + # burda sorun su: mysql password( fonksiyonu, mysqlde internal kullaniliyormus, bu yuzden normal programlarda kullanilmamaliymis.. + # denedim, iki farklki mysqlde farkli sonuc uretebiliyor. bu nedenle, gercekten kullanilmamali.. + + if((getIsUbuntu() && getUbuntuReleaseYear() >= "16") || (getIsDebian() && getUbuntuReleaseYear() >= "8")){ + $filecontent="auth required pam_python.so /etc/security/pam_dbauth_vsftpd.py +account required pam_python.so /etc/security/pam_dbauth_vsftpd.py + "; + }else{ + $filecontent=" + auth required pam_mysql.so user=ehcp passwd=".$params['ehcppass']." host=localhost db=ehcp table=ftpaccounts usercolumn=ftpusername passwdcolumn=password crypt=2 + account required pam_mysql.so user=ehcp passwd=".$params['ehcppass']." host=localhost db=ehcp table=ftpaccounts usercolumn=ftpusername passwdcolumn=password crypt=2 + "; + } + + writeoutput("/etc/pam.d/vsftpd",$filecontent,"w"); + +// For PHP chmod fix +// Changed umask from 022 to 0002 +// Added file_open_mode=0775 + $filecontent=" +listen=YES +anonymous_enable=NO +local_enable=YES +write_enable=YES +local_umask=0002 +file_open_mode=0775 +dirmessage_enable=YES +xferlog_enable=YES +connect_from_port_20=YES +nopriv_user=".$app->ftpuser." +chroot_local_user=YES +secure_chroot_dir=/var/run/vsftpd +pam_service_name=vsftpd +rsa_cert_file=/etc/ssl/certs/vsftpd.pem +guest_enable=YES +guest_username=".$app->ftpuser." +local_root=".$app->conf['vhosts']."/\$USER +user_sub_token=\$USER +virtual_use_local_privs=YES +user_config_dir=/etc/vsftpd_user_conf +local_max_rate=2000000 # bytes per sec, 2Mbytes per sec +max_clients=50 # to avoid DOS attack, if you have a huge server, increase this.. +ftpd_banner=Welcome to vsFTPd Server, managed by EHCP Force Edition (Easy Hosting Control Panel, www.ehcpforce.tk ) +"; +# allow_writeable_chroot=YES : bunun uzerinde calisacagim... boyle olmuyor... bakalim... bu olabilir: http://ehcp.net/?q=comment/2905#comment-2905 + writeoutput("/etc/vsftpd.conf",$filecontent,"w"); + passthru2("usermod -g $app->ftpgroup $app->ftpuser"); + manageService("vsftpd", "restart"); +} + + +function install_vsftpd_server(){ + global $app,$ehcpinstalldir,$ip,$user_email,$user_name,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass; + passthru("apt-get remove proftpd"); + passthru("rm /etc/vsftpd.conf"); // Delete it if it exists so that the installer won't get hung up on an existing configuration + aptget(array('vsftpd')); + passthru("useradd --home ".$app->conf['vhosts']." --gid ".$app->ftpgroup." -m --shell /bin/false ".$app->ftpuser); + passthru("cp /etc/vsftpd.conf /etc/vsftpd.conf_orig"); + + vsftpd_configuration(array('ehcppass'=>$ehcpmysqlpass)); +} + +function buildconfigphp(){ +# to be filled later.. + +} + +function installsql() { + global $app,$ehcpinstalldir,$ip,$lang,$user_email,$user_name,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass,$debugMode,$mysql_root_pass,$adminEmail; + bosluk2(); + + if($newrootpass<>'') $tmprootpass=$newrootpass; + else $tmprootpass=$rootpass; + + + echo "extracting and importing sql to mysql:\n"; + + # check if ehcp db already exists... + $baglanti=@mysqli_connect("localhost", "root", $tmprootpass, "ehcp"); + + + if($baglanti){ + echo "seems to found old ehcp db..(will try to backup existing ehcp db with timestamp... )"; + echo "\nATTENTION ! EHCP DB WILL BE DROPPED IF EXISTS, EXIT NOW (by ctrl-C) if you don't want !\n\n"; + sleep(10); + + # backup any existing ehcp db, if any + #$ehcpdb="ehcpbackup".date("YmdHis"); # disabled because gives error on some systems: Fatal error: date(): Timezone database is corrupt - this should *never* happen! in ... + $ehcpdb="ehcpbackup".exec('date +%Y%m%d%H%M%S'); + passthru("cp -Rf /var/lib/mysql/ehcp /var/lib/mysql/$ehcpdb"); + passthru("chown -Rf mysql:mysql /var/lib/mysql/$ehcpdb"); + #--end backup ehcp db + } + # end check.. + + replacelineinfile('$dbrootpass=',"\$dbrootpass='$tmprootpass';",$ehcpinstalldir."/config.php", true); + $rootpass = $tmprootpass; + replacelineinfile('$dbpass=',"\$dbpass='$ehcpmysqlpass';",$ehcpinstalldir."/config.php", true); + if($lang<>'en') replacelineinfile('$defaultlanguage=',"\$defaultlanguage='$lang';",$ehcpinstalldir."/config.php", true); + + $filecontent=" + drop database if exists ehcp; + create database ehcp; + grant all privileges on ehcp.* to ehcp@'localhost' identified by '$ehcpmysqlpass' with grant option; + grant all privileges on ehcp.* to ehcp@'127.0.0.1' identified by '$ehcpmysqlpass' with grant option; + grant all privileges on ehcp.* to ehcp@'127.0.1.1' identified by '$ehcpmysqlpass' with grant option; + "; + + // Update the root password for mariadb since we can't specify what it should be during installation like we can on old mysql + if(!empty($tmprootpass)){ + $filecontent .= "SET PASSWORD FOR 'root'@'localhost'=PASSWORD('" . $tmprootpass . "');"; + $filecontent .= "use mysql;"; + $filecontent .= "update user set password=PASSWORD('" . $tmprootpass . "'), plugin='' where User='root';"; + $filecontent .= "SET PASSWORD FOR 'root'@'localhost'=PASSWORD('" . $tmprootpass . "');"; + } + + writeoutput($ehcpinstalldir."/ehcp1.sql",$filecontent,"w"); + + + // Import ehcp1.sql + echo "importing ehcp1 sql: \n"; + echo "executing: mysql -u root --password=$tmprootpass < $ehcpinstalldir/ehcp1.sql \n "; + if($debugMode){ + log_to_file("executing: mysql -u root --password=$tmprootpass < $ehcpinstalldir/ehcp1.sql \n"); + } + $importSuccess = exec("mysql -u root --password=$tmprootpass < $ehcpinstalldir/ehcp1.sql 2>&1", $outputLines); + if($debugMode){ + log_to_file("\nResults of import: " . $importSuccess . "\n\nTotal output from command: " . print_r($outputLines, true)); + unset($outputLines); + unset($importSuccess); + } + + // Import ehcp.sql + echo "importing ehcp sql: \n"; + if($debugMode){ + log_to_file("importing ehcp sql: \n\nmysql -D ehcp -u root --password=$tmprootpass < $ehcpinstalldir/ehcp.sql"); + } + $importSuccess = exec("mysql -D ehcp -u root --password=$tmprootpass < $ehcpinstalldir/ehcp.sql 2>&1", $outputLines); + if($debugMode){ + log_to_file("\nResults of import: " . $importSuccess . "\n\nTotal output from command: " . print_r($outputLines, true)); + unset($outputLines); + unset($importSuccess); + } + + + # passthru("mysql -u root --password=$tmprootpass < $ehcpinstalldir/ehcp_html.sql"); # bu niye vardı tam hatırlamıyorum. heralde html iceren sql burdaydı... + passthru("cp $ehcpinstalldir/config.php ./config.php"); + passthru("rm $ehcpinstalldir/ehcp1.sql"); # removed for security, root pass was there.. + + + $app = new Application(); + $dbConEstablished = $app->connectTodb(); + + if($debugMode){ + log_to_file("\nEstablished Connection to the Database: " . (($dbConEstablished) ? 'True' : 'False')); + } + + $app->set_ehcp_dir($ehcpinstalldir); + + // Update some config values + $configVarUpdated = $app->setConfigValue("ehcpdir",$ehcpinstalldir); + if($debugMode){ + log_to_file("\nConfiguration Variable ehcpdir Updated: " . (($configVarUpdated) ? 'True' : 'False') . " Value: " . $ehcpinstalldir); + } + + $configVarUpdated = $app->setConfigValue("dnsip",$ip); // this configures dns ip to be used by ehcp, may be changed if using another dns server + if($debugMode){ + log_to_file("\nConfiguration Variable dnsip Updated: " . (($configVarUpdated) ? 'True' : 'False') . " Value: " . $ip); + } + + $configVarUpdated = $app->setConfigValue('adminname',$user_name); + if($debugMode){ + log_to_file("\nConfiguration Variable adminname Updated: " . (($configVarUpdated) ? 'True' : 'False') . " Value: " . $user_name); + } + + $configVarUpdated = $app->setConfigValue('adminemail',$user_email); + if($debugMode){ + log_to_file("\nConfiguration Variable adminemail Updated: " . (($configVarUpdated) ? 'True' : 'False') . " Value: " . $user_email); + } + + // Override and set some initial configuration settings + $securitySet = $app->setInitialMiscConfigOptionDefaultsPostInstall(); + + // Update admin email if it has a global value (install_silently.php) + if(isset($adminEmail) && !empty($adminEmail)){ + $configVarUpdated = $app->setConfigValue('adminemail',$adminEmail); + if($debugMode){ + log_to_file("\nConfiguration Variable AdminEmail Updated: " . (($configVarUpdated) ? 'True' : 'False') . " Value: " . $adminEmail); + } + } + + if($debugMode){ + log_to_file("\nSecurity Settings Set: " . (($securitySet) ? 'True' : 'False')); + } + $adminPassUpdated = $app->executeQuery("UPDATE panelusers SET password=MD5('$ehcpadminpass'),email='$user_email' WHERE panelusername='admin'"); + if($debugMode){ + log_to_file("\nAdmin Panel User Password Updated: " . (($adminPassUpdated) ? 'True' : 'False')); + } + $app->commandline=true; +} + +function checkmysqlpass($user,$pass){ + echo "mysql root pass being checked ...\n"; + $baglanti=@mysqli_connect("localhost", $user, $pass); + if(!$baglanti){ + return false; + } else return true; +} + +function getGoodPassword(){ + # The sign '#' has special meaning in Linux, and some passwords are written to some files on Ubuntu, which is broken, when you use a # , so avoid using # , this function checks this... + # i put this control, because /etc/pam.d/vsftpd is broken if # is used in ehcp pass. + $found=true; + while($found!==false){ + $pass=getInput("\nPlease pay attention that, you cannot use sign # in your password:"); + $found=strpos($pass,'#'); + } + return $pass; +} + +function getVerifiedInput($inputname,$defaultvalue){ + # ask an input two times, to reduce possibility of error for user input + global $unattended; + if($unattended and $defaultvalue<>'') return $defaultvalue; + + $input1=''; + $input2='-'; + + while($input1<>$input2){ + $input1=getInput("Enter $inputname (default $defaultvalue):"); + + if($input1==''){ + echo "$inputname set as ($defaultvalue) (default) \n"; + $input1=$input2=$defaultvalue; + } else { + $input2=getInput("Enter $inputname AGAIN:"); + if($input1<>$input2) echo "\n\nTwo inputs are NOT THE SAME ! , Please try again \n"; + } + } + + return $input1; +} + + +function getinputs(){ + global $ehcpinstalldir,$app,$ip,$hostname,$lang,$user_email,$user_name,$yesno,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass,$installextrasoftware,$unattended,$installmode,$mysql_root_pass,$ehcp_mysql_pass,$ehcp_admin_password; + # all inputs should be here... + + echo "\n\n==========================================================================\n\n"; + echo "EHCP INSTALL - INPUTS/SETTINGS SECTION:\n + THIS SECTION IS VERY IMPORTANT FOR YOUR EHCP SECURITY AND PASSWORD SETTINGS. + PLEASE ANSWER ALL QUESTIONS CAREFULLY \n\n"; + + $user_name=getInput("Please enter your name:",'myname'); + $user_email=getInput("Please enter an already working email address that will be associated with the main admin account:",'myemail@test.com'); + + #$command="wget -q -O /dev/null --timeout=15 \"http://www.ehcp.net/diger/ehcpemailregister.php?user_email=$user_email\""; + # $url="http://www.ehcp.net/diger/ehcpemailregister.php?user_email=$user_email"; + #passthru($command); + # file_get_contents($url); + + $emptypass=checkmysqlpass('root',''); + + // Restart MySQL service in case of missing socket bug + restartMySQL(); + + if(!$unattended){ + if($emptypass){ + $rootpass="1234"; + if(hasValue($mysql_root_pass)){ + $rootpass = $mysql_root_pass; + } + } else { + echo "\n\n=======> MYSQL PASSWORD SETTINGS IS VERY IMPORTANT - YOUR EHCP MAY NOT FUNCTION IF YOU MISS SOMETHING HERE.. ehcp related information will be stored in your local mysql server ==========\n\n"; + $passtrue=false; + while(!$passtrue){ + $rootpass=getInput("\nEnter your current MYSQL ROOT PASSWORD:"); # mysql root otomatik verebilirsem, burayi da 1234 default yapmaliyim. + $passtrue=checkmysqlpass('root',$rootpass); + if(!$passtrue) echo "\n Your mysql root password is not correct ! \nIt is impossible and useless to continue without it. You need to learn it and retry here. Look at www.ehcp.net forums section (or here: http://www.ehcp.net/?q=node/245)\nYou may also try to run ./resetmysqlrootpass.sh program in this dir to reset pass, to use, Ctrl-C this and run ./resetmysqlrootpass.sh"; + } + } + }else{ + $rootpass="1234"; + + if(hasValue($mysql_root_pass)){ + $rootpass = $mysql_root_pass; + } + } + + echo "Enter NEW PASSWORD for mysql user of `ehcp` (default 1234):"; + if(!$unattended) $ehcpmysqlpass=getGoodPassword(); + + if(hasValue($ehcp_mysql_pass)){ + $ehcpmysqlpass = $ehcp_mysql_pass; + } + + if($ehcpmysqlpass==''){ + echo "ehcp mysql pass set as 1234 (default) \n"; + $ehcpmysqlpass='1234'; + } + + if(hasValue($ehcp_admin_password)){ + $ehcpadminpass = $ehcp_admin_password; + }else{ + $ehcpadminpass=getVerifiedInput("ehcp panel admin NEW PASSWORD","1234"); + } + + echo "\n\n============== MYSQL PASSWORD SETTINGS COMPLETE ... see troubleshoot if your ehcp does not work ============== \n\n"; + + # user input for ehcp installdir , skipped for now.. + #echo "\n enter web path to install ehcp or leave blank as default (such as ".$this->ehcpdir.", You should not change this usually) :"; + #$ehcpinstalldir=getInput(); + #if($ehcpinstalldir=="") + + $ehcpinstalldir="/var/www/new/ehcp"; + # If ehcpinstalldir changed, following files needs to be updated: etc/apache*/default, ehcp (flat file in this dir), ehcpdaemon.sh, ehcpdaemon2.sh, maybe others.. will see + + #echo "(installpath is $ehcpinstalldir , vhosts:".$app->conf['vhosts']." )"; + # write ehcp main config dir/file + passthru2('mkdir -p /etc/ehcp/'); + writeoutput('/etc/ehcp/ehcp.conf',"ehcpdir=$ehcpinstalldir","w"); + + $hostname=exec("hostname"); + + cizgi(); + $newhostname=getInput("Your hostname seems to be $hostname, if it is different, enter it now, leave blank if correct \n",$hostname); + + if ($newhostname <> "") { + $hostname=$newhostname; + } + echo "Hostname is set as $hostname \n"; + + //mynetworks e ip eklenecek. + $ip=getlocalip2(); + if($ip=='') { + $prompt="Your ip cannot be determined automatically, You need to enter your (server) ip manually: "; + } else { + $prompt="Your ip seems to be $ip, if it is different or you want to use a different (external) ip, enter it now, leave blank if correct \n"; + } + + $newip=getInput($prompt,$ip); + + if ($newip <> "") { + $ip=$newip; + } + + echo "ip is set as ($ip) in ehcp, (Your server's actual ip is not changed)\n"; + + + echo "\nLANGUAGE SELECTION: \n\nehcp currently supports English,Turkish,German,Spanish,French (some of these partial) except installation \n"; + $lang=getInput("enter language file you want to use (en/tr/german/spanish/nl/fr/lv [default en]):",'en'); + + if(strtolower($lang)=='en') $lang='en'; + if(strtolower($lang)=='tr') $lang='tr'; + + $installextrasoftware=getInput("\nDo you want to install some additional programs which are not essential but useful for a hosting environment, such as ffmpeg,... etc.. ? Answer no if you have small ram or you need a light/fast system (y/[n])\n",'n'); + if(strtolower($installextrasoftware)=='y') $installmode='extra'; + + + echo "\n\n INPUTS/SETTINGS/CONFIGURATION SECTION FINISHED - REST IS EHCP INSTALLATION...should be straightforward, have a cup of tea and watch.. :) \nPlease be patient... "; + echo "\n\n=====================================================================================================================================\n\n"; + + #$command="wget -q -O /dev/null --timeout=15 \"http://www.ehcp.net/diger/ehcpemailregister.php?user_email=$user_email&user_name=$user_name&ip=$ip\""; + // $url="http://www.ehcp.net/diger/ehcpemailregister.php?user_email=$user_email&user_name=$user_name&ip=$ip"; + #passthru($command);# this is sent for adding you to our emaillist and for statistical purposes... + // file_get_contents($url); + + # bekle(); + +} + +function initialize() { + global $ehcpinstalldir,$app,$ip,$user_email,$user_name,$yesno,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass,$installmode,$phpConfDir; + + +manageService("apparmor", "stop"); +passthru("mkdir -p /etc/ehcp"); +#passthru("apt-get update"); # already updated in install.sh +passthru("cp /etc/apt/sources.list /etc/apt/sources.list.bck.ehcp"); +editlineinfile(array('#deb','##deb','# deb'),array('deb','deb','deb'),'/etc/apt/sources.list'); +# passthru("apt-get update"); + + $ip=getlocalip2(); + $hostname=exec('hostname'); + if($hostname=='' or $hostname=='(none)'){ # can hostname be empty ? + echo "hostname seems empty, setting hostname as myserver"; + passthru('hostname myserver'); + } + + bosluk(); + ehcpheader(); + bosluk(); + echo "Starting EHCP Force installation. Please read prompts and questions carefully! +Some install/usage info and your name/email is sent to ehcp developpers for statistical purposes and for improvements."; + bosluk(); + bekle(); + + $app = new Application("localhost","ehcp",$ehcpmysqlpass,"ehcp"); + $app->commandline=true; + + + installmysql(); + sleep(2); + getinputs(); + + + //echo "Can we list you in the list of persons who installed ehcp ? (y/n) default y:"; + //$yesno=getInput(); + #if($yesno=='') $yesno='NA'; + echo "continuing...\n.."; + + # *** burada eksiklik var.. kodu ehcp passini sifirdan isteyecek sekilde yazacaz... burada kodda hicbir sifre birakmamam lazim... bu bir derece yapildi.. + + + //echo "named base is: ".$app->."\n"; + executeprog2("mkdir -p ".$app->conf['namedbase']); + checkaptget(); + + switch($installmode) { + case 'extra': + case 'normal': aptget(array('unrar','rar','unzip','zip','mc','lynx','nmap')); + case 'light': aptget(array('openssh-server','python-mysqldb','python-cherrypy3','apache2','bind9','php5-gd','php-gd','libapache-mod-ssl')); + break; + default: echo "Unknown installmode parameter at ".__LINE__; + } + + // bunlari ayri ayri yuklemek gerekiyor. yoksa apt-get hicbirini yuklemiyor.. bu nedenle ayri fonksiyon yazdim... ah bide su turkce problemi olmasaydi.. + + addifnotexists("extension=mysql.so","$phpConfDir/apache2/php.ini"); + addifnotexists("extension=mysql.so","$phpConfDir/cli/php.ini"); + addifnotexists("include \"".$app->conf['namedbase']."/named_ehcp.conf\";","/etc/bind/named.conf"); + replacelineinfile("listen-on {", "listen-on { any; };", "/etc/bind/named.conf.options", false); # if listen-on { 127.0.0.1; }; then, dns cannot be seen from outside.. + + echo "* installpath set as: $ehcpinstalldir \n"; + executeprog2("mkdir -p $ehcpinstalldir"); + executeprog2("mkdir -p $ehcpinstalldir/../../named/"); + +} + +function passvariablestoinstall2(){ + global $app,$ehcpinstalldir,$ip,$hostname,$lang,$user_email,$user_name,$yesno,$ehcpmysqlpass,$rootpass,$newrootpass,$ehcpadminpass,$installextrasoftware; + // install1 and install2 is separated because install2 uses php mail function, which we need to re-run php interpreter after first install + + $file=""; + writeoutput('install2.1.php',$file,"w");// dynamically setup install2.1.php, to pass some variables to install2.php + +} + +function launchpanel(){ + echo "now, you should be able to navigate to your web located at, $ehcpinstalldir \n" ; + echo "panel admin username: admin \n"; + cizgi(); + echo "now will try to launch your control panel, if it is on local computer.. \n"; + + echo "\nwill use firefox as browser...\n\n"; + #bekle(); + $browser=trim(exec("which firefox ")); + if($browser) passthru("firefox http://localhost/vhosts/ehcp &"); +} + +function net2ftp_configuration($params){ + # update net2ftp mysql conf... + echo "(".__FUNCTION__.")\n"; + replacelineinfile("\$net2ftp_settings[\"dbpassword\"]","\$net2ftp_settings[\"dbpassword\"]='".$params['ehcppass']."';",$params['ehcpinstalldir']."/net2ftp/settings.inc.php", true); + passthru2("chmod 777 ".$params['ehcpinstalldir']."/net2ftp/temp/"); +} + +function install_with_mode($params){ # complete later. + global $installmode; + if($installmode=='') $installmode='light'; + + switch($installmode) { + case 'extra':; + case 'normal':; + case 'light':; + break; + default: echo "Unknown installmode parameter at ".__LINE__; + } +} + +function installfinish() { + global $ehcpinstalldir,$ehcpmysqlpass,$app,$user_email,$user_name,$header,$installextrasoftware,$lightinstall,$installmode; + + switch($installmode) { + case 'extra': aptget(array('postgrey','ffmpeg','php5-ffmpeg','mplayer','mencoder','nmap','listadmin','aptitude','gpac','libavcodec-unstripped')); + case 'normal': aptget(array('webalizer','php-pear','phpsysinfo','mailutils','byobu')); + case 'light': aptget(array('bind9-host','php5-curl','php5-xmlrpc','php5-imap','php-curl','php-xmlrpc','php-imap')); + break; + default: echo "Unknown installmode parameter at ".__LINE__; + } + + # gpac : includes mp4box and similar multimedia required by some media websites (clipbucket) + # ekle(); + echo "finishing install...\n"; + + # to make phpsysinfo work as in /var/www + chdir('/var/www/new'); + passthru2('ln -s /usr/share/phpsysinfo phpsysinfo'); + + chdir($ehcpinstalldir); + # app already setupd in installsql function.. + + + + $app->loadConfig();// loads dns ip and other thing + $app->adjust_webmail_dirs(); + writeoutput($app->conf['namedbase']."/named_ehcp.conf","","w"); + + # $app->addDaemonOp("syncdns",'','','','sync dns'); # no need to sync, since ehvp ver 0.29.15, because before it, 0 # of domains caused ehcp to crash., now not. + # echo "syncdns finished\n"; + # $app->syncdomains($app->ehcpdir."/apachehcp.conf"); + manageService("sendmail", "stop"); + + # phpmyadmin normalde kurmasina ragmen, bidefasinda, kurmus, ama configurasyon dosyasini atamamis. bu nedenle ekledim bunu.. + if(!file_exists("/etc/apache2/conf.d/phpmyadmin.conf")) { + passthru2("mkdir -p /etc/apache2/conf.d"); + passthru2("cp ./phpmyadmin.conf /etc/apache2/conf.d/"); + } + + net2ftp_configuration(array('ehcppass'=>$ehcpmysqlpass,'ehcpinstalldir'=>$ehcpinstalldir)); + /* + $filecontent="This is default ehcp-apache index file.
click here for ehcp home on your server

+ ehcp Home"; + writeoutput("/var/www/apache2-default/index.html",$filecontent); + writeoutput("/var/www/index.html",$filecontent);*/ + + echo "\nPlease wait while services restarting...\n\n"; + manageService("apache2", "restart"); + manageService("bind9", "restart"); + manageService("postfix", "restart"); + passthru("cp /etc/apt/sources.list.bck.ehcp /etc/apt/sources.list"); + + // A better way to do this might be to insert it above the exit 0 line... + // To do... + replacelineinfile("exit 0", "service ehcp restart\nexit 0", "/etc/rc.local", true); + $add="/var/log/ehcp.log /var/log/apache_common_access_log { +}"; + add_if_not_exists2($add,'/etc/logrotate.d/ehcp',True); # adjust logrotate for ehcp logs # we need to do this for domain logs too + + sleep(2); + manageService("mysql", "restart"); + sleep(1); + passthru2("update-rc.d -f nginx remove"); + passthru2("update-rc.d apache2 defaults"); + manageService("apparmor", "stop"); + + // passthru("cd /var/www/ehcp"); + echo "now, starting panel daemon \n"; + // passthru("nohup php index.php daemon > /dev/null & "); + + #launchpanel() + + bosluk(); + cizgi(); + #echo "finished installation , bye ! \n"; # not finished yet, something is done in install.sh + bosluk(); + $msg=" +Congratulations ! +Your ehcp (Easy Hosting Control Panel) installation completed. +now, navigate to your panel located at http://yourip, whatever is your ip. + +if you need assistance, you may click troubleshoot in front page, have a look at forum section at www.ehcp.net, +or you may contact ehcp developer directly ad email/msn: info@ehcpforce.tk + +Thank you for choosing and trying ehcp ! + + +"; + if($user_email) @mail($user_email,"your ehcp install completed.",$msg,$header); +} + +function restartMySQL(){ + echo "Restarting MySQL service for best results \n please wait..."; + manageService("mysql", "restart"); +} + +function installfiles() { + global $ehcpinstalldir,$app,$debugMode; + echo "pwd is: ".getcwd().", dest dir is: $ehcpinstalldir, will just copy ehcp files \n"; + if($debugMode){ + log_to_file("pwd is: ".getcwd().", dest dir is: $ehcpinstalldir, will just copy ehcp files \n"); + } + + passthru("rm -Rf $ehcpinstalldir"); + passthru("mkdir $ehcpinstalldir"); + passthru("cp -Rf * $ehcpinstalldir"); + passthru("chmod a+r -R $ehcpinstalldir"); + + passthru("mkdir -p /var/www/new/vhosts/ehcp"); # redirect old style url to new one + passthru("cp $ehcpinstalldir/misc/redirect_index.html -p /var/www/new/vhosts/ehcp/index.html"); + + bosluk2(); + echo "Copying of files completed... dest dir: $ehcpinstalldir \n please wait..."; + if($debugMode){ + log_to_file("Copying of files completed... dest dir: $ehcpinstalldir \n please wait..."); + } + bosluk2(); + + installEHCPDaemon(); +} + + +function scandb(){ + global $app,$ehcpmysqlpass; + + $mysqlkullaniciadi="ehcp"; + $mysqlsifre=$ehcpmysqlpass; + $dbadi="ehcp"; + $baglanti=mysqli_connect("localhost", $mysqlkullaniciadi, $mysqlsifre, $dbadi); + if(!$baglanti){ + echo mysqli_error();echo "cannot connect to db: username: $mysqlkullaniciadi, pass: $mysqlsifre \n"; return; + }; + + + exec("mkdir ".$app->conf['vhosts']); + echo "checking and rebuilding domains already in database:\n + attn!: panelusername and domain main ftpusername must be same to function correctly, while rebuilding domains from db !!....\n "; + + $query="select panelusername,domainname from domains"; + $result = mysqli_query($baglanti, $query); + if ($result) { + while ($r = mysqli_fetch_assoc($result)) { + echo "domain: ".$r['domainname']." \n"; + $base1=$app->conf['vhosts'].'/'.securefilename($r['panelusername']); + $base=$base1."/".trim($r['domainname']); + exec("mkdir -p $base"); + exec("mkdir -p $base/logs"); + exec("mkdir -p $base/httpdocs"); + addifnotexists("Under Construction","$base/httpdocs/index.php"); + addifnotexists("","$base/logs/error_log"); // setup file if not exists + exec("chmod a+r $base1 -Rf"); + exec("chown -Rf " . $app->ftpuser . " $base1 "); + + } + } else { + echo "error occured:".mysqli_error(); + } + manageService("apache2", "reload"); + echo "finished db ops\n"; + cizgi(); +} + +function installmysql(){ + // Install MariaDB MySQL Server and Client + installMySQLServ(); + + // Deal with strange MySQL bug if present + mysqlKillAllHung(); +} + +function mysqlKillAllHung(){ + // Weird bug where too many mysqld daemons are running + // Kill them all and restart the service... we should then be good to go: + manageService("mysql", "stop"); + passthru("ps -ef | grep mysqld | while read mysqlProcess ; do kill -9 $(echo $mysqlProcess | awk '{ print $2 }') ; done"); + manageService("mysql", "start"); +} + + +/* +apache start etmiyor. +zira onceden bulunan ornek domainlerin dizinleri yok. +bunları kurulumda olusturmali, ya da daemon olusturmali +hem bu sayede veritabanindaki veriler otomatik olusturulmus olur. + +onu yaptim. +busefer de apache ın default sayfası yokoldu..bu da tamam. +namevirtualhost falan ayarladım. + +daemon ile sorunlar var. +install.php daemon calıstırıyor ama nerde calıstıgı belli degil. +syncdns dosya olusturamıyor. + +enson verdigi hata: + +aemon->runop success ** +
Domain list exported
+Warning: fopen(named/dene.com): failed to open stream: No such file or directory in /home/bvidinli/ehcp/config/dbutil.php on line 956 +hata: dosya acilamadi: named/dene.com (writeoutput) ! +daemon->runop failure **** : update operations set try=try+1,status='failed' where id=3 limit 1 + +daemon u php dısına cıkardım. oldu gibi, +syslog da, pure-ftpd: (?@?) [ERROR] Unable to start a standalone server: [Invalid argument] +hatası veriyor, bilen varsa beri gelsin... +vsftpd ye gectim, pureftp debiana biturlu kurulmadi, proftp de kurulmadi, +vsftpd'de de quota falan yok, ama bu debianda calisti. simdilik bunda idare edecem.. + +*/ + +function getPHPConfDir(){ + $dir = "/etc/php5"; + if(!file_exists($dir)){ + $possibleDir = "/etc/php"; + if(file_exists($possibleDir)){ + $dir=exec("ls \"/etc/php\" | head -n 1"); + $dir = $possibleDir . "/" . $dir; + } + } + return $dir; +} + +function remove_ehcp(){ + global $app; // not executed yet, left only for future purposes and to give idea.. + passthru("apt-get -y remove postfix postfix-mysql postfix-doc mysql-client mysql-server mariadb-server mariadb-client courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin pure-ftpd-mysql apache2 bind9"); + passthru("apt-get clean"); + passthru("rm -rvf ".$app->conf['vhosts']."/ehcp"); + +} + + + +?> diff --git a/ehcp/install_log.txt b/ehcp/install_log.txt new file mode 100755 index 0000000..e69de29 diff --git a/ehcp/install_main.sh b/ehcp/install_main.sh new file mode 100755 index 0000000..43d29e2 --- /dev/null +++ b/ehcp/install_main.sh @@ -0,0 +1,2551 @@ +#!/bin/bash +# EHCP Force Edition - Easy Hosting Control Panel Installation Script +# http://ehcpforce.tk +# by earnolmartin@gmail.com + +######################## +# FORK INFORMATION # +######################## +# Fork created by earnolmartin@gmail.com +# http://ehcpforce.tk +# This forked version of EHCP offers new functionality and features (custom FTP accounts, proper web user permissions so that PHP scripts work as intended, and more) +# that were not previously available in the main EHCP release. +# Also, this forked version is updated on a regular basis when a new version of Ubuntu comes out. +# You should run this fork on Ubuntu. It will work perfectly on all supported Ubuntu versions (The ones Ubuntu officially supports such as the LTS release and latested versions). +# Debian should work as well, but if it doesn't, please let me know. +# Based on Yeni EHCP Release +# Source code available via SVN so that multiple people can develop and track changes! +# Does not add a EHCP reseller account by default without your knowledge ensuring security +# Main Web Panel GUI theme is Ep-Ic V2 (theme I custom developed which links to all of the new functionality) +# Other themes may not have the latest and greatest operations available + +ehcpversion="1.0.1" + +echo +echo +#echo "Beginning EHCP FoRcE Version Installation" +echo +echo +chmod -Rf a+r * + +# Get parameters +for varCheck in "$@" +do + if [ "$varCheck" == "unattended" ]; then + unattended="unattended" + elif [ "$varCheck" == "light" ]; then + installmode="light" + elif [ "$varCheck" == "extra" ]; then + installmode="extra" + elif [ "$varCheck" == "noapt" ]; then + noapt="noapt" + elif [ "$varCheck" == "skipupdates" ] || [ "$varCheck" == "devmode" ]; then + skip_updates="yes" + elif [ "$varCheck" == "debug" ]; then + debug="debug" + fi +done + +if [ -z "$installmode" ]; then + installmode="normal" +fi + +################################################################################################ +# Function Definitions # +################################################################################################ + +# Stub function for apt-get + +function setGlobalVars(){ + FIXDIR="/var/www/new/ehcp/fixes" + serviceNameTempFile="/root/ehcp_service_name_search_temp_file" + logInfoFile="/root/ehcp_info" + patchDir="/root/Downloads" + if [ ! -e $patchDir ]; then + mkdir $patchDir + fi + FQDNCFG="fqdn_amavis.cfg" + if [ -e "$FQDNCFG" ]; then + source "$FQDNCFG" + fi + INSPDCFG="ins_policyd.cfg" + if [ -e "$INSPDCFG" ]; then + source "$INSPDCFG" + fi + installerDir=$(pwd) + initProcessStr=$(ps -p 1 | awk '{print $4}' | tail -n 1) + if [ "$initProcessStr" == "systemd" ]; then + systemdPresent=1 + fi +} + +function installaptget () { + echo "now let's try to install apt-get on your system." + echo "Not yet implemented" + exit +} + +# Stub function fot yum + +function installyum () { + echo "now let's try to install yum on your system." + echo "Not yet implemented" +} + +# Initial Welcome Screen + +function ehcpHeader() { + echo + echo + echo "STAGE 1" + echo "=====================================================================" + echo + echo "--------------------EHCP PRE-INSTALLER $ehcpversion -------------------------" + echo "-----Easy Hosting Control Panel for Ubuntu, Debian, and Alikes-------" + echo "---------------------- FoRcE Edition (a fork) -----------------------" + echo "---------------------- http://www.ehcpforce.tk ----------------------" + echo "-------------------------Non-Fork Version: www.ehcp.net-------------" + echo "---------------------------------------------------------------------" + echo + echo + echo "Now, ehcp pre-installer begins, a series of operations will be performed and main installer will be invoked. " + echo "if any problem occurs, refer to www.ehcpforce.tk forum section, or contact me, mail/msn: info@ehcpforce.tk" + + echo "Please be patient, press enter to continue" + if [ "$unattended" == "" ] ; then + read + fi + + echo + echo "Note that ehcp can only be installed automatically on Debian based Linux OS'es or Linux'es with apt-get enabled..(Ubuntu, Kubuntu, debian and so on) Do not try to install ehcp with this installer on redhat, centos and non-debian Linux's... To use ehcp on no-debian systems, you need to manually install.. " + echo "this installer is for installing onto a clean, newly installed Ubuntu/Debian. If you install it on existing system, some existing packages will be removed after prompting, if they conflict with packages that are used in ehcp, so, be careful to answer yes/no when using in non-new system" + echo "Actually, I dont like saying like, 'No warranty, I cannot be responsible for any damage.... ', But, this is just a utility.. use at your own." + echo "ehcp also sends some usage data to developer for statistical purposes" + echo "press enter to continue" + if [ "$unattended" == "" ] ; then + read + fi +} + +# Check for yum + +function checkyum () { + which yum > /dev/null 2>&1 + if [ "$?" == "0" ]; then + echo "yum is available" + return 0 + else + # This should never happen + echo "Please install yum" + installyum + fi +} + +# Check for apt-get + +function checkAptget(){ + + sayi=`which apt-get | wc -w` + if [ $sayi -eq 0 ] ; then + ehco "apt-get is not found." + installaptget + fi + + echo "apt-get seems to be installed on your system." + aptIsInstalled=1 + + sayi=`grep -v "#" /etc/apt/sources.list | wc -l` + + if [ $sayi -lt 10 ] ; then + echo + echo "WARNING ! Your /etc/apt/sources.list file contains very few sources, This may cause problems installing some packages.. see http://www.ehcp.net/?q=node/389 for an example file" + echo "This may be normal for some versions of debian" + echo "press enter to continue or Ctrl-C to cancel and fix that file" + if [ "$unattended" == "" ] ; then + read + fi + fi + +} + +# Function to be called when installing packages, by Marcel + +function installPack(){ + + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get install for:$1" + return + fi + + if [ $distro == "ubuntu" ] || [ $distro == "debian" ];then + # first, try to install without any prompt, then if anything goes wrong, normal install.. + apt-get -y --no-remove --allow-unauthenticated install $1 + if [ $? -ne 0 ]; then + apt-get -y --allow-unauthenticated install $1 + fi + else + # Yum is nice, you don't get prompted :) + yum -y -t install $1 + fi +} + +function logToFile(){ + logfile="ehcp-apt-get-install.log" + echo "$1" >> $logfile +} + +function logToInstallLogFile(){ + # Only log if debug is enabled + if [ ! -z "$debug" ]; then + loginstallfile="install_log.txt" + echo "$1" >> "$installerDir/$loginstallfile" + echo -e "\n$1" + fi +} + +function aptget_Update(){ + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get update" + return + fi + + apt-get update +} + +function aptgetInstall(){ + # Parameter $1 is a list of programs to install + # Parameter $2 is used to specify runlevel 1 in front of the command to prevent daemons from automatically starting (needed for amavisd-new) + + if [ -n "$noapt" ] ; then # skip install + echo "skipping apt-get install for:$1" + return + fi + + # first, try to install without any prompt, then if anything goes wrong, normal install.. + cmd="apt-get -y --no-remove --allow-unauthenticated install $1" + + if [ ! -z "$2" ]; then + cmd="RUNLEVEL=1 $cmd" + fi + + # Run the command + sh -c "$cmd" + + if [ $? -ne 0 ]; then + cmd="apt-get -y --allow-unauthenticated install $1" + if [ ! -z "$2" ]; then + cmd="RUNLEVEL=1 $cmd" + fi + sh -c "$cmd" + fi + + PackageFailed="$?" + +} + +function aptPackageInstallOrManualGet(){ + cd "$patchDir" + aptgetInstall "$1" + AptExitCode="$PackageFailed" + if [ "$AptExitCode" -eq "100" ]; then + PackageExists=$(echo "$AptExitCode") + else + PackageExists= + fi + + if [ ! -z "$PackageExists" ]; then + echo -e "\nPackage $1 was not found in the main Ubuntu repository. However, it is needed in EHCP. Checking EHCP fix directory for local fix.\n" + # See if the package exists locally + if [ $OSBits -eq "64" ]; then + localPackageName="$1_x64.deb" + else + localPackageName="$1.deb" + fi + localSearchResults=$(find "$FIXDIR" -name "$localPackageName") + if [ ! -z "$localSearchResults" ]; then + cp "$localSearchResults" "$1.deb" + fi + + # Clear the flag as we have found it locally... + if [ -e "$1.deb" ]; then + PackageExists= + fi + fi + + # If the package was not found locally, get it from the web + baseDLURL="http://www.dinofly.com/files/linux/" + if [ ! -z "$PackageExists" ]; then + echo -e "\nPackage $1 was not found in the main Ubuntu repository. However, it is needed in EHCP. Checking developer's server for appropriate package.\n" + + # Get proper version of package from + if [ $OSBits -eq "64" ]; then + # Check to see if package exists + fExists=$(wget --spider -v "$baseDLURL$1_x64.deb") + fExistsCheck=$(echo "$fExists" | grep "404") + if [ -z "$fExistsCheck" ]; then + echo -e "Package $1 was found on developer server. Downloading and installing now!" + wget -N -O "$1.deb" "$baseDLURL$1_x64.deb" + fi + else + fExists=$(wget --spider -v "$baseDLURL$1.deb") + fExistsCheck=$(echo "$fExists" | grep "404") + if [ -z "$fExistsCheck" ]; then + echo -e "Package $1 was found on developer server. Downloading and installing now!" + wget -N -O "$1.deb" "$baseDLURL$1.deb" + fi + fi + fi + + # Install the missing package if it exists within our repository + if [ -e "$1.deb" ]; then + gdebi --n "$1.deb" + fi +} + +function aptgetRemove(){ + if [ -n "$noapt" ] ; then # skip uninstall + echo "skipping apt-get remove for:$1" + return + fi + + # first, try to uninstall without any prompt, then if anything goes wrong, normal uninstall.. + cmd="apt-get -y remove $1" + logToFile "$cmd" + + # Run the command + sh -c "$cmd" + + if [ $? -ne 0 ]; then + cmd="apt-get remove $1" + logToFile "$cmd" + + # Run the command + sh -c "$cmd" + fi +} + +# Get distro name , by Marcel , thanks to marcel for fixing whole code syntax +# No longer works in Ubuntu 13.04 +# Fixed by Eric Martin +function checkDistro() { + # Get distro properly + if [ -e /etc/issue ]; then + distro=$( cat /etc/issue | awk '{ print $1 }' ) + fi + + if [ ! -z "$distro" ]; then + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + + if [ -z "$distro" ] || [[ "$distro" != "ubuntu" && "$distro" != "debian" ]]; then + if [ -e /etc/os-release ]; then + distro=$( cat /etc/os-release | grep -o "^NAME=.*" | grep -o "[^NAME=\"].*[^\"]" ) + fi + fi + + # Assume Ubuntu + if [ -z "$distro" ]; then + distro="ubuntu" + else + # Convert it to lowercase + distro=$( echo $distro | awk '{print tolower($0)}' ) + fi + + # Get actual release version information + version=$( lsb_release -r | awk '{ print $2 }' ) + if [ -z "$version" ]; then + version=$( cat /etc/issue | awk '{ print $2 }' ) + fi + + # Separate year and version + if [[ "$version" == *.* ]]; then + yrelease=$( echo "$version" | cut -d. -f1 ) + mrelease=$( echo "$version" | cut -d. -f2 ) + fi + + # Get 64-bit OS or 32-bit OS [used in vsftpd fix] + if [ $( uname -m ) == 'x86_64' ]; then + OSBits=64 + else + OSBits=32 + fi + + # Another way to get the version number + # version=$(lsb_release -r | awk '{ print $2 }') + + echo "Your distro is $distro runnning version $version" + +} + +# Check if the running user is root, if not restart with sudo +function checkUser() { + if [ `whoami` != "root" ];then + echo "you are $who, you have to be root to use ehcp installation program. switching to root mode, please enter password or re-run install.sh as root" + sudo $0 # restart this with superuser-root privileges + exit + fi +} + +# Function to kill any running ehcp / php daemons +function killallEhcp() { + for i in `ps aux | grep ehcpdaemon.sh | grep -v grep | awk -F " " '{ print $2 }'`;do + kill -9 $i + done + + for i in `ps aux | grep 'php index.php' | grep -v grep | awk -F " " '{ print $2 }'`;do + kill -9 $i + done +} + + +function checkPhp(){ + which php + if [ $? -eq 0 ] ; then + echo "php seems installed. This is good.." + else + echo "PHP IS STILL NOT INSTALLED. THIS IS A SERIOUS PROBLEM. MOST PROBABLY, YOU WILL NOT BE ABLE TO CONTINUE. TRY TO INSTLL PHP yourself." + echo "if rest of install is successfull, then, this is a false alarm, just ignore" + fi +} + +function launchPanel(){ + # NEVER LAUNCH FIREFOX AS THE ROOT USER. IT WILL MESS IT UP FOR THE NORMAL USER + if [ -z "$unattended" ] || [ "$unattended" == "" ] ; then + if [ ! -z "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then + echo + echo "The EHCP panel is now accessible!" + echo "Your panel administrative login is: admin" + echo "Attempting to load the control panel via web browser from the local machine." + sudo -u "$SUDO_USER" xdg-open http://localhost/ + fi + fi +} + +# Thanks a lot to earnolmartin@gmail.com for fail2ban integration & vsftpd fixes. + +function slaveDNSApparmorFix(){ # by earnolmartin@gmail.com + if [ -e /etc/apparmor.d/usr.sbin.named ]; then + echo -e "\nChanging bind apparmor rule to allow master DNS synchronization for slave setups.\n" + sed -i 's#/etc/bind/\*\* r,#/etc/bind/\*\* rw,#g' /etc/apparmor.d/usr.sbin.named + manageService "apparmor" "restart" + fi +} + +function libldapFix(){ # by earnolmartin@gmail.com + # install libldap, for vsftpd fix, without prompts + #Remove originally installed libpam-ldap if it exists + origDir=$(pwd) + aptgetRemove libpam-ldap + DEBIAN_FRONTEND=noninteractive apt-get -y install libpam-ldap + cd "$patchDir" + mkdir lib32gccfix + cd lib32gccfix + cp "$FIXDIR/vsftpd/x64/ldap_conf_64bit_vsftpd.tar.gz" "ldap_conf.tar.gz" + tar -zxvf ldap_conf.tar.gz + cp ldap.conf /etc/ + cd $origDir +} + +function fixVSFTPConfig(){ # by earnolmartin@gmail.com + # VSFTPD config file + VSFTPDCONF="/etc/vsftpd.conf" + + # Check to see if the chroot_local_user setting is present + chrootLocalCheck=$(cat "$VSFTPDCONF" | grep "chroot_local_user") + if [ -z "$chrootLocalCheck" ]; then + sh -c "echo 'chroot_local_user=YES' >> $VSFTPDCONF" + else + sed -i 's/chroot_local_user=.*/chroot_local_user=YES/g' "$VSFTPDCONF" + fi + + # Check to see if allow writeable chroot is present + allowWriteValue=$(cat "$VSFTPDCONF" | grep "allow_writeable_chroot") + if [ -z "$allowWriteValue" ]; then + sh -c "echo 'allow_writeable_chroot=YES' >> $VSFTPDCONF" + else + sed -i 's/allow_writeable_chroot=.*/allow_writeable_chroot=YES/g' "$VSFTPDCONF" + fi + + if [ $OSBits -eq "64" ]; then + #aptgetInstall libpam-ldap # this is required in buggy vsftpd installs.. ubuntu 12.04,12.10, 13.04, now... + libldapFix + aptgetInstall libgcc1 + # 64-bit 500 OOPS: priv_sock_get_cmd Fix + # seccomp_sandbox=NO + allowSandBox=$(cat "$VSFTPDCONF" | grep "seccomp_sandbox") + if [ -z "$allowSandBox" ]; then + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "13" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + sh -c "echo 'seccomp_sandbox=NO' >> $VSFTPDCONF" + fi + else + sed -i 's/seccomp_sandbox=.*/seccomp_sandbox=NO/g' "$VSFTPDCONF" + fi + fi + + # Restart the VSFTPD service + manageService "vsftpd" "restart" +} + +function remove_vsftpd(){ + # Remove the hold if any: + echo "vsftpd install" | dpkg --set-selections + # Remove originally installed vsftpd + aptgetRemove vsftpd + # Just incase it's been installed already or another version has been installed using dpgk, let's remove it + dpkg --remove vsftpd +} + +function fixApacheDefault(){ + ApacheFile="/etc/apache2/apache2.conf" + confStr="IncludeOptional sites-enabled/\*.conf" + correctConfStr="Include sites-enabled/" + if [ -e "$ApacheFile" ]; then + ConfCheck=$( cat "$ApacheFile" | grep -o "$confStr" ) + if [ ! -z "$ConfCheck" ]; then + sed -i "s#$confStr#$correctConfStr#g" "$ApacheFile" + manageService "apache2" "restart" + fi + fi +} + +function removeNameVirtualHost(){ + ApacheFile="/etc/apache2/ports.conf" + confStr="NameVirtualHost.*" + + if [ -e "$ApacheFile" ]; then + ConfCheck=$( cat "$ApacheFile" | grep -o "$confStr" ) + if [ ! -z "$ConfCheck" ]; then + sed -i "s#$confStr##g" "$ApacheFile" + manageService "apache2" "restart" + fi + fi +} + +function genUbuntuFixes(){ + # Ubuntu packages keep coming with new features that mess things up + # Thanks Ubuntu for the unneccessary headaches! + # Includes debian too... jesus christ + if [ ! -z "$yrelease" ]; then + if [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "ubuntu" && "$yrelease" -ge "14" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + fixApacheDefault + removeNameVirtualHost + addConfDFolder + getRidOfExtraPHPMyAdminAlias + fixApache2ConfigInvalidLockFileLine + fixMariaDBSkippingInnoDB + fi + fi +} + +function fixApache2ConfigInvalidLockFileLine(){ + sed -i "s/^LockFile/#LockFile/g" "/etc/apache2/apache2.conf" +} + +function addConfDFolder(){ + # If the conf.d folder doesn't exist, we must create it! + if [ ! -e "/etc/apache2/conf.d" ]; then + mkdir -p "/etc/apache2/conf.d" + fi + + # Include it in apache2 config + if [ -e "/etc/apache2/apache2.conf" ]; then + APACHECONFCONTENTS=$(cat "/etc/apache2/apache2.conf" | grep "conf.d") + if [ -z "$APACHECONFCONTENTS" ]; then + echo "Include conf.d/" >> "/etc/apache2/apache2.conf" + fi + fi +} + +function ubuntuVSFTPDFix(){ # by earnolmartin@gmail.com + # Get currently working directory + origDir=$( pwd ) + + # Install vsftpd if for some reason it wasn't installed earlier + aptgetInstall vsftpd + + # Ubuntu VSFTPD Fixes + if [ ! -z "$yrelease" ]; then + if [ "$distro" == "ubuntu" ]; then + if [ "$yrelease" == "12" ] ; then + if [ "$mrelease" == "04" ]; then + # Run 12.04 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.04\n" + add-apt-repository -y ppa:thefrontiergroup/vsftpd + aptget_Update + aptgetInstall vsftpd + + elif [ "$mrelease" == "10" ]; then + # Run 12.10 Fix + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 12.10\n" + #get the code + cd "$patchDir" + if [ ! -e vsftpd_2.3.5-3ubuntu1.deb ]; then + if [ $OSBits -eq "32" ]; then + cp "$FIXDIR/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3ubuntu1_i386.deb" "vsftpd_2.3.5-3ubuntu1.deb" + else + cp "$FIXDIR/vsftpd/ubuntu/12.10/vsftpd_2.3.5-3.jme_amd64.deb" "vsftpd_2.3.5-3ubuntu1.deb" + fi + fi + #install + dpkg -i vsftpd_2.3.5-3ubuntu1.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + cd $origDir + fi + elif [ "$yrelease" == "13" ]; then + # Ubuntu 13.04 + if [ "$mrelease" == "04" ]; then + remove_vsftpd + echo -e "\nRunning VSFTPD fix for Ubuntu 13.04\n" + cd "$patchDir" + if [ ! -e vsftpd_3.0.2-patched_ubuntu.deb ]; then + if [ $OSBits -eq "32" ]; then + cp "$FIXDIR/vsftpd/ubuntu/13.04/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb" "vsftpd_3.0.2-patched_ubuntu.deb" + else + cp "$FIXDIR/vsftpd/ubuntu/13.04/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb" "vsftpd_3.0.2-patched_ubuntu.deb" + fi + fi + dpkg -i vsftpd_3.0.2-patched_ubuntu.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + cd $origDir + fi + + # Ubuntu 13.10 + if [ "$mrelease" == "10" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 13.10\n" + fi + elif [ "$yrelease" == "14" ]; then + # Ubuntu 14.04 + if [ "$mrelease" == "04" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 14.04\n" + if [ $OSBits -eq "64" ]; then + remove_vsftpd + cp "$FIXDIR/vsftpd/ubuntu/14.04/vsftpd_3.0.2-1ubuntu2_amd64.deb" "vsftpd_3.0.2-1ubuntu2.deb" + dpkg -i vsftpd_3.0.2-1ubuntu2.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + fi + fi + + # Ubuntu 14.10 + if [ "$mrelease" == "10" ]; then + echo -e "\nRunning VSFTPD fix for Ubuntu 14.10\n" + if [ $OSBits -eq "64" ]; then + remove_vsftpd + cp "$FIXDIR/vsftpd/ubuntu/14.10/vsftpd_3.0.2-14ubuntu1_amd64.deb" "vsftpd_3.0.2-14ubuntu1.deb" + dpkg -i vsftpd_3.0.2-14ubuntu1.deb + echo "vsftpd hold" | dpkg --set-selections # Official updates to the VSFTPD package will break functionality since the package is broken OOTB + fi + fi + fi + fi + fi + + # Run our fixes to the vsftpd config file + fixVSFTPConfig +} + +function logDirFix(){ # by earnolmartin@gmail.com + chmod 755 /var/www/new/ehcp/log + chmod 744 /var/www/new/ehcp/log/ehcp_failed_authentication.log + chown ${VSFTPDUser}:www-data /var/www/new/ehcp/log/ehcp_failed_authentication.log +} + +function fixBINDPerms(){ # by earnolmartin@gmail.com + chmod -R 774 /etc/bind + + # Set correct owner on the bind directory: + if [ -e "/etc/bind" ]; then + BINDUser=$(ls -alhi /etc/bind | awk '{print $4}' | head -n2 | tail -n1) + if [ "$BINDUser" == "root" ]; then + BINDUser=$(ls -alhi /etc/bind | awk '{print $5}' | head -n2 | tail -n1) + fi + + if [ ! -z "$BINDUser" ] && [ "$BINDUser" != "root" ]; then + chown "$BINDUser":root -R /etc/bind + else + BINDUser=$(cat /etc/passwd | grep -o "^bind.*") + if [ ! -z "$BINDUser" ]; then + chown bind:root -R /etc/bind + else + BINDUser=$(cat /etc/passwd | grep -o "^named.*") + if [ ! -z "$BINDUser" ]; then + chown named:root -R /etc/bind + fi + fi + fi + fi +} + +function fixEHCPPerms(){ # by earnolmartin@gmail.com + # Make backup dir for install log file + genEHCPBackupDIR="/root/Backup/ehcpforce" + if [ ! -e "$genEHCPBackupDIR" ]; then + mkdir -p "$genEHCPBackupDIR" + fi + + # Secure ehcp files + chown -R root:root /var/www/new/ehcp + chmod -R 755 /var/www/new/ehcp/ + + # Correct net2ftp permissions + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/net2ftp + chmod -R 755 /var/www/new/ehcp/net2ftp + + # Correct permissions on test folder - used for testing some things like SSL certs + # Delete old security risk files from the directory first + if [ -e "/var/www/new/ehcp/test" ]; then + rm -r "/var/www/new/ehcp/test" + fi + mkdir -p /var/www/new/ehcp/test + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/test + chmod -R 755 /var/www/new/ehcp/test + + # Correct extplorer permissions + if [ -e "/var/www/new/ehcp/extplorer" ]; then + chown -R ${VSFTPDUser}:www-data /var/www/new/ehcp/extplorer + chmod -R 755 /var/www/new/ehcp/extplorer + fi + + # Make default index readable + chmod 755 /var/www/new/index.html + + # Set proper permissions on vhosts + chown ${VSFTPDUser}:www-data -R /var/www/vhosts/ + chmod 0755 -R /var/www/vhosts/ + + # Secure webmail + chown root:www-data -R /var/www/new/ehcp/webmail2 + chmod 754 -R /var/www/new/ehcp/webmail2 + chmod -R 774 /var/www/new/ehcp/webmail2/data + + # Fix EHCP security + if [ -e "/var/www/new/ehcp/ehcpbackup.php" ]; then + rm "/var/www/new/ehcp/ehcpbackup.php" + fi + + if [ -e "/var/www/new/ehcp/phpadmin.php" ]; then + rm "/var/www/new/ehcp/phpadmin.php" + fi + + if [ -e "/var/www/new/ehcp/install_log.txt" ]; then + rm "/var/www/new/ehcp/install_log.txt" + fi + + chmod 700 "/var/www/new/ehcp/install_1.php" + chmod 700 "/var/www/new/ehcp/install_2.php" + chmod 700 "/var/www/new/ehcp/install_lib.php" + chmod 700 "/var/www/new/ehcp/install2.1.php" + chmod 700 "/var/www/new/ehcp/ehcp_fix_apache.php" +} + +function fixPHPConfig(){ # by earnolmartin@gmail.com + PHPConfFile="$PHPCONFDir/cli/php.ini" + if [ -e $PHPConfFile ]; then + PHPConfCheck=$( cat $PHPConfFile | grep -o ";extension=mysql.so" ) + if [ -z "$PHPConfCheck" ]; then + sed -i "s/extension=mysql.so/;extension=mysql.so/g" $PHPConfFile + manageService "apache2" "restart" + fi + fi +} + +function copyNginxConf(){ # by earnolmartin@gmail.com + # Make sure to copy our modified nginx.conf over to /etc/nginx + cp -f "/var/www/new/ehcp/etc/nginx/nginx.conf" "/etc/nginx" +} + +function fixNginxSessions(){ + nginxFPMPHPConfig="$PHPCONFDir/fpm/php.ini" + if [ -e "$nginxFPMPHPConfig" ]; then + SESSIONPathConfigured=$(cat "$nginxFPMPHPConfig" | grep -o "^session.save_path.*") + if [ -z "$SESSIONPathConfigured" ]; then + echo -e "session.save_path = \"/tmp\"" >> "$nginxFPMPHPConfig" + fi + managePHPFPMService "restart" + fi +} + +function changeApacheUser(){ # by earnolmartin@gmail.com + # Apache should run as the vsftpd account so that FTP connections own the file and php scripts can own the file + # Without this fix, files uploaded by ftp could not be changed by PHP scripts... AND + # Files uploaded / created by PHP scripts could not be modified (chmod) via FTP clients + manageService "apache2" "stop" + if [ -e "/etc/apache2/envvars" ]; then + sed -i "s/export APACHE_RUN_USER=.*/export APACHE_RUN_USER=${VSFTPDUser}/g" "/etc/apache2/envvars" + if [ -e "/var/lock/apache2" ]; then + chown ${VSFTPDUser}:www-data "/var/lock/apache2" + else + mkdir "/var/lock/apache2" + chown ${VSFTPDUser}:www-data "/var/lock/apache2" + fi + manageService "apache2" "restart" + fi + + # Also change nginx user + changeNginxUser + + # Also change php-fpm user + if [ -e "$PHPCONFDir/fpm/pool.d/www.conf" ]; then + sed -i "s/user = .*/user = ${VSFTPDUser}/g" "$PHPCONFDir/fpm/pool.d/www.conf" + sed -i "s/group = .*/group = www-data/g" "$PHPCONFDir/fpm/pool.d/www.conf" + fi +} + +function changeNginxUser(){ + # Change nginx user + if [ -e "/etc/nginx/nginx.conf" ]; then + sed -i "s/^user .*/user ${VSFTPDUser} www-data;/g" "/etc/nginx/nginx.conf" + fi +} + +function nginxRateLimit(){ + if [ -e "/etc/nginx/nginx.conf" ]; then + NGINXHASRATELIMIT=$(cat "/etc/nginx/nginx.conf" | grep "limit_req_zone") + if [ -z "$NGINXHASRATELIMIT" ]; then + sed -i '/http {/a limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;' "/etc/nginx/nginx.conf" + fi + fi +} + +function updateBeforeInstall(){ # by earnolmartin@gmail.com + # Update packages before installing to avoid errors + + if [ -z "$skip_updates" ]; then + if [ "$aptIsInstalled" -eq "1" ] ; then + echo "Updating package information and downloading package updates before installation." + + # Make sure the system will update and upgrade + if [ -e "/var/lib/apt/lists/lock" ]; then + rm "/var/lib/apt/lists/lock" + fi + + # Make sure the system will update and upgrade + if [ -e "/var/cache/apt/archives/lock" ]; then + rm "/var/cache/apt/archives/lock" + fi + + # Run update commands + apt-key update + apt-get update -y --allow-unauthenticated + apt-get upgrade -y --allow-unauthenticated + fi + fi +} + +function secureApache(){ + APACHE2Conf="/etc/apache2/apache2.conf" + if [ -e "$APACHE2Conf" ]; then + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ ! -z "$containsDef" ]; then + sed -i "s/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/g" "$APACHE2Conf" + else + containsCorrectIndexs=$(cat "$APACHE2Conf" | grep "Options -Indexes +FollowSymLinks") + if [ -z "$containsCorrectIndexs" ]; then + echo "Options -Indexes +FollowSymLinks" >> "$APACHE2Conf" + fi + fi + fi +} + +function allowHTACCESSOverrides(){ + APACHE2Conf="/etc/apache2/apache2.conf" + if [ -e "$APACHE2Conf" ]; then + # This should only be done for Apache versions in latest versions of Ubuntu where they define specifically allow override perms + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ ! -z "$containsDef" ]; then + containsDef=$(cat "$APACHE2Conf" | grep "") + if [ -z "$containsDef" ]; then + echo -e "\n\tOptions -Indexes +FollowSymLinks\n\tAllowOverride All\n\tRequire all granted\n" >> "$APACHE2Conf" + fi + fi + fi +} + +function restartDaemons(){ # by earnolmartin@gmail.com + # Restart PolicyD if available + if [ "$insPolicyD" = true ]; then + manageService "policyd_agent" "stop" + manageService "policyd_agent" "start" + fi + + # Restart MySQL Service + killAllMySQLAndRestart + + # Restart apache2 daemon + manageService "apache2" "restart" + + # Restart the EHCP daemon after installation is completed + manageService "ehcp" "restart" + + # Make sure courier daemon is enabled (mainly for Ubuntu 16.04 and up) + update-rc.d courier-authdaemon enable + update-rc.d courier-authdaemon defaults + manageService "courier-authdaemon" "restart" + + # Restart postfix + manageService "postfix" "restart" +} + +# Secures BIND and prevents UDP Recursion Attacks: +# https://www.team-cymru.org/Services/Resolvers/instructions.html +# Good explanation FROM MS Forums (LOL): http://social.technet.microsoft.com/Forums/windowsserver/en-US/24ea1094-0ae4-47b5-9b74-2f77884cce15/dns-recursion?forum=winserverNIS +function disableRecursiveBIND(){ # by earnolmartin@gmail.com + # Get Resolv.conf and do not run this code if nameserver is set to 127.0.0.1 + RESOLVCOUNT=$(cat "/etc/resolv.conf" | grep -c "nameserver") + RESOLVLOCAL=$(cat "/etc/resolv.conf" | grep "nameserver 127.0.0.1") + + if [ "$RESOLVCOUNT" == "1" ] && [ ! -z "$RESOLVLOCAL" ]; then + echo -e "Skipping Bind Recursion Settings Due to 127.0.0.1 Nameserver" + else + bindOptionsFile="/etc/bind/named.conf.options" + bindBckFile="/etc/bind/named.conf.options_backup" + if [ -e "$bindOptionsFile" ]; then + + # Create a backup of the original + if [ ! -e "$bindBckFile" ]; then + cp "$bindOptionsFile" "$bindBckFile" + fi + + # Remove all blank lines at the end of the file: + # BINDNoEmptyLines=$(sed '/^ *$/d' "$bindOptionsFile") + # Better code here to strip out ending lines of empty text: http://stackoverflow.com/questions/7359527/removing-trailing-starting-newlines-with-sed-awk-tr-and-friends + # Can also do this for leading and trailing empty lines: sed -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba' file + BINDNoEmptyLines=$(sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' "$bindOptionsFile") + BINDNoEmptyLines=$(trim "$BINDNoEmptyLines") + echo "$BINDNoEmptyLines" > "$bindOptionsFile" + + # Add recursion no + RecursiveSettingCheck=$( cat "$bindOptionsFile" | grep -o "^recursion .*" | grep -o " .*$" | grep -o "[^ ].*" ) + if [ -z "$RecursiveSettingCheck" ]; then + # Put it one line before close pattern + sed -i '$i \recursion no;' "$bindOptionsFile" + else + sed -i 's/^recursion .*/recursion no;/g' "$bindOptionsFile" + fi + + # Add additional-from-cache no + RecursiveCacheCheck=$( cat "$bindOptionsFile" | grep -o "^additional-from-cache .*" | grep -o " .*$" | grep -o "[^ ].*" ) + if [ -z "$RecursiveCacheCheck" ]; then + sed -i '$i \additional-from-cache no;' "$bindOptionsFile" + else + sed -i 's/^additional-from-cache .*/additional-from-cache no;/g' "$bindOptionsFile" + fi + fi + + # Extra optional step + #if [ -e "/etc/default/bind9" ]; then + # sed -i 's/^RESOLVCONF=.*/RESOLVCONF=no/g' "/etc/default/bind9" + #fi + + manageService "bind9" "restart" + fi +} + +function killAllMySQLAndRestart(){ + # Stop service + manageService "mysql" "stop" + + # Get each PID of mysqld and kill it --- random bug occurs sometimes after install + ps -ef | grep mysqld | while read mysqlProcess ; do kill -9 $(echo $mysqlProcess | awk '{ print $2 }') ; done + + # Restart the service + manageService "mysql" "start" +} + +function removeInstallSilently(){ + if [ -e "/var/www/new/ehcp/install_silently.php" ]; then + rm "/var/www/new/ehcp/install_silently.php" + fi + + if [ -e "/var/www/new/ehcp/admin_email.php" ]; then + rm "/var/www/new/ehcp/admin_email.php" + fi +} + +function installExtras(){ + + if [ "$installmode" == "extra" ]; then + if [ -z "$unattended" ]; then + # Attended install, so ask questions + # Spam Assassin + echo "" + echo -n "Install Amavis, SpamAssassin, and ClamAV? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + installAntiSpam + fi + + echo "" + echo -n "Install fail2ban? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + echo -e "Installing Fail2Ban\n" + # Install Fail2Ban + fail2ban + fi + + echo "" + echo -n "Install Apache2 security modules (mod-security and mod-evasive)? [y/n]: " + read insMode + + insMode=$(echo "$insMode" | awk '{print tolower($0)}') + + if [ "$insMode" != "n" ]; then + echo -e "Installing Apache2 Security Modules\n" + # Install Apache2 Security Modules + apacheSecurity + fi + else + # Unattended mode... install them all by default + installAntiSpam + fail2ban + apacheSecurity + fi + fi +} + +function apacheSecurity(){ + aptgetInstall libapache2-mod-evasive + aptgetInstall libapache-mod-security + aptgetInstall libapache2-modsecurity + + # Make sure the conf.d directory exists + addConfDFolder + + # Shouldn't be running, but attempt to stop it anyways just in case + manageService "apache2" "stop" + + # Ensures that we always get the latest security rules and apply only the latest + if [ -e "/etc/apache2/mod_security_rules" ]; then + rm -R "/etc/apache2/mod_security_rules" + fi + + mkdir /etc/apache2/mod_security_rules + cd "$patchDir" + + if [ -e "mod_security_rules_latest" ]; then + rm -R "mod_security_rules_latest" + fi + + mkdir "mod_security_rules_latest" + + # Different rules based on different versions + if [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$yrelease" -ge "14" && "$distro" == "ubuntu" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "$FIXDIR/apache2/modsecurity/mod_security_rules_13.10.tar.gz" "mod_security_rules.tar.gz" + else + cp "$FIXDIR/apache2/modsecurity/mod_security_base_rules.tar.gz" "mod_security_rules.tar.gz" + fi + + tar -zxvf "mod_security_rules.tar.gz" -C "mod_security_rules_latest" + mv mod_security_rules_latest/* /etc/apache2/mod_security_rules + chown -R root:root /etc/apache2/mod_security_rules + + # Config file names + ModSecureNewConfFile="security2.conf" + ModSecureNewLoadFile="security2.load" + ModEvasiveNewConfFile="evasive.conf" + ModEvasiveNewLoadFile="evasive.load" + + ModSecureOldConfFile="mod-security.conf" + ModSecureOldLoadFile="mod-security.load" + ModEvasiveOldConfFile="mod-evasive.conf" + ModEvasiveOldLoadFile="mod-evasive.load" + + + # Cleanup mod security + if [ -e "/etc/apache2/mods-available/${ModSecureNewConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureNewConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + fi + + # Cleanup old config it exists from an OS upgrade + if [ -e "/etc/apache2/mods-available/${ModSecureOldConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureOldConfFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + + # Remove old load file as well + if [ -e "/etc/apache2/mods-available/${ModSecureOldLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureOldLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureOldLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + elif [ -e "/etc/apache2/mods-available/${ModSecureOldConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureOldConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + fi + + # Remove incorrect config file if it exists + if [ -e "/etc/apache2/mods-available/${ModSecureNewConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureNewConfFile}" + fi + + if [ -e "/etc/apache2/mods-available/${ModSecureNewLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModSecureNewLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + else + # None exist + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureNewConfFile}" + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-available/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-available/${ModSecureOldLoadFile}" + rm "/etc/apache2/mods-enabled/${ModSecureOldLoadFile}" + else + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-available/${ModSecureOldConfFile}" + cp "/var/www/new/ehcp/mod_secure/modsecure" "/etc/apache2/mods-enabled/${ModSecureOldConfFile}" + rm "/etc/apache2/mods-available/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewConfFile}" + rm "/etc/apache2/mods-available/${ModSecureNewLoadFile}" + rm "/etc/apache2/mods-enabled/${ModSecureNewLoadFile}" + fi + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modsecure" ]; then + rm "/etc/apache2/conf.d/modsecure" + fi + fi + + # Cleanup mod evasive + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + fi + + # Cleanup old config it exists from an OS upgrade + if [ -e "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + + # Remove old load file as well + if [ -e "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveOldLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + elif [ -e "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" ]; then + # Overwrite official config in use + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + + # If it's enabled file also exists, copy that too + if [ -e "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" ]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + fi + + # Remove incorrect config file if it exists + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + fi + + if [ -e "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" ]; then + rm "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" + fi + + rm "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewLoadFile}" + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + else + # None exist + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveOldLoadFile}" + rm "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-available/${ModEvasiveOldLoadFile}" + else + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-available/${ModEvasiveOldConfFile}" + cp "/var/www/new/ehcp/mod_secure/modevasive" "/etc/apache2/mods-enabled/${ModEvasiveOldConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-enabled/${ModEvasiveNewLoadFile}" + rm "/etc/apache2/mods-available/${ModEvasiveNewConfFile}" + rm "/etc/apache2/mods-available/${ModEvasiveNewLoadFile}" + fi + + # Cleanup our old version which is no longer needed since we'll use the official configuration + if [ -e "/etc/apache2/conf.d/modevasive" ]; then + rm "/etc/apache2/conf.d/modevasive" + fi + fi + + if [[ "$distro" == "ubuntu" && "$yrelease" -gt "13" ]] || [[ "$distro" == "ubuntu" && "$yrelease" == "13" && "$mrelease" == "10" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + a2enmod evasive + a2enmod security2 + else + a2enmod mod-evasive + a2enmod mod-security + fi +} + +function fail2ban(){ + aptgetInstall fail2ban + manageService "fail2ban" "stop" + + cp "/var/www/new/ehcp/fail2ban/apache-dos.conf" "/etc/fail2ban/filter.d/apache-dos.conf" + cp "/var/www/new/ehcp/fail2ban/ehcp.conf" "/etc/fail2ban/filter.d/ehcp.conf" + cp "/var/www/new/ehcp/fail2ban/postfix-sasl.conf" "/etc/fail2ban/filter.d/postfix-sasl.conf" + + if [ ! -e "/etc/fail2ban/jail.local" ]; then + cp "/var/www/new/ehcp/fail2ban/jail.local" "/etc/fail2ban/jail.local" + fi + + EHCPINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[ehcp\]") + APACHEDOSINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[apache-dos\]") + POSTFIXSASLINF2BAN=$(cat /etc/fail2ban/jail.local | grep "\[sasl\]") + + if [ -z "$EHCPINF2BAN" ]; then + echo " +[ehcp] +# fail2ban section for Easy Hosting Control Panel, ehcp.net +enabled = true +port = http,https +filter = ehcp +logpath = /var/www/new/ehcp/log/ehcp_failed_authentication.log +maxretry = 10" >> "/etc/fail2ban/jail.local" + fi + + if [ -z "$APACHEDOSINF2BAN" ]; then + echo " +[apache-dos] +# Apache Anti-DDoS Security Based Log Entries from Mod Evasive Apache Module +enabled = true +port = http,https +filter = apache-dos +logpath = /var/log/apache*/*error.log +maxretry = 5" >> "/etc/fail2ban/jail.local" + fi + + if [ -z "$POSTFIXSASLINF2BAN" ]; then + echo " +[sasl] +enabled = true +port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s +filter = postfix-sasl +# You might consider monitoring /var/log/warn.log instead +# if you are running postfix. See http://bugs.debian.org/507990 +logpath = /var/log/mail.log +maxretry = 4" >> "/etc/fail2ban/jail.local" + fi + + manageService "fail2ban" "restart" +} + +function installAntiSpam(){ + # Postfix must be installed + CURDIR=$(pwd) + ANTISPAMINSTALLED=$(which "spamassassin") + POSTFIXInstalled=$(which "postfix") + postFixUserExists=$(grep postfix /etc/passwd) + if [ ! -z "$POSTFIXInstalled" ] && [ ! -z "$postFixUserExists" ] && [ "$installmode" == "extra" ]; then + # SpamAssassin is not installed / configured + # Lets roll + # Set variables + SPConfig="/etc/default/spamassassin" + PHeadChecks="/etc/postfix/header_checks" + PostFixConf="/etc/postfix/main.cf" + PostFixMaster="/etc/postfix/master.cf" + CONTENTFILTER="/etc/amavis/conf.d/15-content_filter_mode" + SPAMASSASSCONF="/etc/spamassassin/local.cf" + AMAVISHOST="/etc/amavis/conf.d/05-node_id" + AMAVISDEBDEFAULTSCONF="/etc/amavis/conf.d/20-debian_defaults" + AMAVISDOMAINIDCONF="/etc/amavis/conf.d/05-domain_id" + CLAMAVCONFFILE="/etc/clamav/clamd.conf" + + # Install Anti-Spam Software + aptgetInstall "amavisd-new" "runlevel=1" # amavisd-new install should not start the daemon immediately after installation since we haven't configured our fully qualified domain name of the server yet + aptgetInstall "spamassassin clamav-daemon" + + # Install individually incase some packages are not found + aptgetInstall libnet-dns-perl + aptgetInstall pyzor + aptgetInstall razor + aptgetInstall arj + aptgetInstall bzip2 + aptgetInstall cabextract + aptgetInstall cpio + aptgetInstall file + aptgetInstall gzip + aptgetInstall lha + aptgetInstall nomarch + aptgetInstall pax + aptgetInstall rar + aptgetInstall unrar + aptgetInstall unzip + aptgetInstall zip + aptgetInstall zoo + aptgetInstall unzoo + aptgetInstall libdbi-perl + aptgetInstall opendkim + aptgetInstall postfix-policyd-spf-python + + # Only keep going if we have the basic packages installed + AMAVISINS=$(which amavisd-new) + SPAMASSASSINS=$(which spamassassin) + + if [ ! -z "$AMAVISINS" ] && [ ! -z "$SPAMASSASSINS" ]; then + + # Add Users + adduser clamav amavis + adduser amavis clamav + + # Enable SpamAssassin + if [ -e "$SPConfig" ]; then + sed -i "s#ENABLED=.*#ENABLED=1#g" "$SPConfig" + sed -i "s#CRON=.*#CRON=1#g" "$SPConfig" + + # More settings + if [ -e "$SPAMASSASSCONF" ]; then + # Rewrite the header + sed -i "s/#rewrite_header.*/rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*/g" "$SPAMASSASSCONF" + sed -i "s/# rewrite_header.*/rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*/g" "$SPAMASSASSCONF" + sed -i "s#rewrite_header.*#rewrite_header Subject \*\*\*\*\*SPAM\*\*\*\*\*#g" "$SPAMASSASSCONF" + + # Set the spam score + sed -i "s/#required_score.*/required_score 12.0/g" "$SPAMASSASSCONF" + sed -i "s/# required_score.*/required_score 12.0/g" "$SPAMASSASSCONF" + sed -i "s#required_score.*#required_score 12.0#g" "$SPAMASSASSCONF" + + # use bayes 1 + sed -i "s/#use_bayes.*/use_bayes 1/g" "$SPAMASSASSCONF" + sed -i "s/# use_bayes.*/use_bayes 1/g" "$SPAMASSASSCONF" + sed -i "s#use_bayes.*#use_bayes 1#g" "$SPAMASSASSCONF" + + # use bayes auto learn + sed -i "s/#bayes_auto_learn.*/bayes_auto_learn 1/g" "$SPAMASSASSCONF" + sed -i "s/# bayes_auto_learn.*/bayes_auto_learn 1/g" "$SPAMASSASSCONF" + sed -i "s#bayes_auto_learn.*#bayes_auto_learn 1#g" "$SPAMASSASSCONF" + + fi + + manageService "spamassassin" "restart" + fi + + # Integrate into postfix + postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024" + + echo "use strict; + +# You can modify this file to re-enable SPAM checking through spamassassin +# and to re-enable antivirus checking. + +# +# Default antivirus checking mode +# Uncomment the two lines below to enable it +# + +@bypass_virus_checks_maps = ( + \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); + + +# +# Default SPAM checking mode +# Uncomment the two lines below to enable it +# + +@bypass_spam_checks_maps = ( + \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); + +1; # insure a defined return" > "$CONTENTFILTER" + if [ -e "$PostFixMaster" ]; then + POSTFIXMASCHECK1=$(cat "$PostFixMaster" | grep "smtp-amavis") + if [ -z "$POSTFIXMASCHECK1" ]; then + echo " +smtp-amavis unix - - - - 2 smtp + -o smtp_data_done_timeout=1200 + -o smtp_send_xforward_command=yes + -o disable_dns_lookups=yes + -o max_use=20" >> "$PostFixMaster" + fi + + POSTFIXMASCHECK2=$(cat "$PostFixMaster" | grep "127.0.0.1:10025") + if [ -z "$POSTFIXMASCHECK2" ]; then + echo " +127.0.0.1:10025 inet n - - - - smtpd + -o content_filter= + -o local_recipient_maps= + -o relay_recipient_maps= + -o smtpd_restriction_classes= + -o smtpd_delay_reject=no + -o smtpd_client_restrictions=permit_mynetworks,reject + -o smtpd_helo_restrictions= + -o smtpd_sender_restrictions= + -o smtpd_recipient_restrictions=permit_mynetworks,reject + -o smtpd_data_restrictions=reject_unauth_pipelining + -o smtpd_end_of_data_restrictions= + -o mynetworks=127.0.0.0/8 + -o smtpd_error_sleep_time=0 + -o smtpd_soft_error_limit=1001 + -o smtpd_hard_error_limit=1000 + -o smtpd_client_connection_count_limit=0 + -o smtpd_client_connection_rate_limit=0 + -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks" >> "$PostFixMaster" + fi + + fi + + #http://stackoverflow.com/questions/11694980/using-sed-insert-a-line-below-or-above-the-pattern + POSTFIXMASCHECK3=$(cat "$PostFixMaster" | grep -A2 "pickup" | grep -v "pickup" | grep -o "\-o receive_override_options=no_header_body_checks$") + if [ -z "$POSTFIXMASCHECK3" ]; then + sed -i "/pickup.*/a\\\t-o receive_override_options=no_header_body_checks" "$PostFixMaster" + fi + + POSTFIXMASCHECK4=$(cat "$PostFixMaster" | grep -A2 'pickup' | grep -v "pickup" | grep -o "\-o content_filter=$") + if [ -z "$POSTFIXMASCHECK4" ]; then + sed -i "/pickup.*/a\\\t-o content_filter=" "$PostFixMaster" + fi + + # Use FQDN for mail server (used by Amavis) as entered by user earlier + sed -i "s/^#\$myhostname.*/\$myhostname = \"$FQDNName\";/g" "$AMAVISHOST" + sed -i "s#^\$myhostname.*#\$myhostname = \"$FQDNName\";#g" "$AMAVISHOST" + + # Change settings for amavis deb defaults + if [ -e "$AMAVISDEBDEFAULTSCONF" ]; then + # Set spam scores higher for a few levels + + # Change $sa_kill_level_deflt to 8.01 + sed -i "s/^#\$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^# \$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^\$sa_kill_level_deflt.*/\$sa_kill_level_deflt = 8.01; # triggers spam evasive actions/g" "$AMAVISDEBDEFAULTSCONF" + + # Change $sa_dsn_cutoff_level to 11 + sed -i "s/^#\$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^# \$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + sed -i "s/^\$sa_dsn_cutoff_level.*/\$sa_dsn_cutoff_level = 11; # spam level beyond which a DSN is not sent/g" "$AMAVISDEBDEFAULTSCONF" + + # Check to see if we have the rewrite subject line in the configuration file + amavisHasSubjRewrite=$(cat "$AMAVISDEBDEFAULTSCONF" | grep '$sa_spam_modifies_subj') + if [ -z "$amavisHasSubjRewrite" ]; then + sed -i "/^\$sa_spam_subject_tag.*/a\$sa_spam_modifies_subj = 1;" "$AMAVISDEBDEFAULTSCONF" + else + sed -i "s/^\$sa_spam_modifies_subj.*/\$sa_spam_modifies_subj = 1;/g" "$AMAVISDEBDEFAULTSCONF" + fi + fi + + # Allow for any domain configuration + if [ -e "$AMAVISDOMAINIDCONF" ]; then + # Check to see if we have the rewrite subject line in the configuration file + amavisHasLocalDomainMaps=$(cat "$AMAVISDOMAINIDCONF" | grep '@local_domains_maps') + if [ -z "$amavisHasLocalDomainMaps" ]; then + sed -i "/^@local_domains_acl.*/a@local_domains_maps = \( \[\"\.\"\] \);" "$AMAVISDOMAINIDCONF" + else + sed -i "s/^@local_domains_maps.*/@local_domains_maps = \( \[\"\.\"\] \);/g" "$AMAVISDOMAINIDCONF" + fi + fi + + # Needed in Ubuntu 16.04 + # Allow supplementary groups to fix permissions + if [ -e "$CLAMAVCONFFILE" ]; then + sed -i "s/^AllowSupplementaryGroups.*/AllowSupplementaryGroups true/g" "$CLAMAVCONFFILE" + fi + + # Install and configure policyd + if [ "$insPolicyD" = true ]; then + installPolicyD + fi + + # Should be good to go? + + # Restart Amavis + manageService "amavis" "restart" + + # Restart services + manageService "postfix" "restart" + + # Get lastest clamav definitions + freshclam + + # Restart clamav-daemon + manageService "clamav-daemon" "restart" + + fi + fi +} + +function fixPHPFPMListen(){ + FPMConfFile="$PHPCONFDir/fpm/pool.d/www.conf" + if [ -e "$FPMConfFile" ]; then + sed -i "s#^listen =.*#listen = 9000#g" "$FPMConfFile" + fi +} + +function removeApacheUmask(){ + APACHE2ENVVARS="/etc/apache2/envvars" + if [ -e "$APACHE2ENVVARS" ]; then + sed -i "s/^umask/#umask/g" "$APACHE2ENVVARS" + fi +} + +function securePHPMyAdminConfiguration(){ + # Variables + PHPMYADMINMAINCONFFILE="/etc/phpmyadmin/config.inc.php" + PHPMYADMINTMPDIR="/var/lib/phpmyadmin/tmp" + PHPMYADMINCONFFILE="/usr/share/phpmyadmin/config.inc.php" + PHPMYADMINROOTWL="/usr/share/phpmyadmin/rootip_whitelist.php" + PHPMYADMINROOTWLFunctions="/usr/share/phpmyadmin/rootip_whitelist_functions.php" + PHPMYADMINTEMPUPDIR="/usr/share/phpmyadmin/upload" + WHITELISTEMPLATEFILE="/var/www/new/ehcp/etc/phpmyadmin/rootip_whitelist.php" + WHITELISTEMPLATEFILEFunctions="/var/www/new/ehcp/etc/phpmyadmin/rootip_whitelist_functions.php" + DEFAULTPHPMYADMINCONFTEMPLATE="/var/www/new/ehcp/etc/phpmyadmin/phpmyadmin_default_conf" + DEFAULTPHPMYADMINMAINCONFTEMPLATE="/var/www/new/ehcp/etc/phpmyadmin/phpmyadmin_default_main_conf" + + # Fix perms on temporary directory that may be used for file uploads (importing exported sql files for example): + if [ -e "$PHPMYADMINTMPDIR" ]; then + chown -R ${VSFTPDUser}:www-data "$PHPMYADMINTMPDIR" + fi + + # See if PHPMyAdmin config.inc.php exists and secure its configuration if it does + if [ -e "$PHPMYADMINMAINCONFFILE" ]; then + phpMyAdminConfigurationTweaks "$PHPMYADMINMAINCONFFILE" + else + # Copy template over to have a valid phpmyadmin config + cp "$DEFAULTPHPMYADMINMAINCONFTEMPLATE" "$PHPMYADMINMAINCONFFILE" + fi + + if [ -e "$PHPMYADMINCONFFILE" ]; then + phpMyAdminConfigurationTweaks "$PHPMYADMINCONFFILE" + else + # Copy template over to have a valid phpmyadmin config + cp "$DEFAULTPHPMYADMINCONFTEMPLATE" "$PHPMYADMINCONFFILE" + fi + + # Copy root ip address whitelist over to phpmyadmin directory if it doesn't exist + if [ ! -e "$PHPMYADMINROOTWL" ]; then + cp "$WHITELISTEMPLATEFILE" "$PHPMYADMINROOTWL" + fi + + # Copy root ip address whitelist functions over to phpmyadmin directory if it doesn't exist + if [ ! -e "$PHPMYADMINROOTWLFunctions" ]; then + cp "$WHITELISTEMPLATEFILEFunctions" "$PHPMYADMINROOTWLFunctions" + fi + + # Create temporary upload directory for large SQL database imports + if [ ! -e "$PHPMYADMINTEMPUPDIR" ]; then + mkdir -p "$PHPMYADMINTEMPUPDIR" + fi + + # Replace rootip if the function is in it because this had to be separated to avoid errors in some configurations... + if [ -e "$PHPMYADMINROOTWL" ]; then + hasFunctionPrivateIP=$(cat "$PHPMYADMINROOTWL" | grep -o "function isPrivateIP") + if [ ! -z "$hasFunctionPrivateIP" ]; then + cp "$WHITELISTEMPLATEFILE" "$PHPMYADMINROOTWL" + fi + fi + + chown ${VSFTPDUser}:www-data -R $PHPMYADMINTEMPUPDIR + chmod 775 -R $PHPMYADMINTEMPUPDIR + + # Required in Ubuntu 16.04 and up + aptgetInstall "php-gettext" +} + +function phpMyAdminConfigurationTweaks(){ + if [ ! -z "$1" ]; then + # Config file to modify = $1 + phpmyadminCONFToModify="$1" + + # Run checks for various extra config settings + hasNoRootCheck=$(cat "$phpmyadminCONFToModify" | grep -o "$cfg\['Servers'\]\[1\]\['AllowRoot'\]") + hasTmpUploadDir=$(cat "$phpmyadminCONFToModify" | grep -o "$cfg\['UploadDir'\]") + hasIncludeApprovedIPAddressesFunction=$(cat "$phpmyadminCONFToModify" | grep -o "include_once 'rootip_whitelist_functions.php'") + hasIncludeApprovedIPAddresses=$(cat "$phpmyadminCONFToModify" | grep -o "include 'rootip_whitelist.php'") + hasPHPCloseTag=$(cat "$phpmyadminCONFToModify" | grep -o "^?>") + + # Prevent root mysql user from logging in + if [ -z "$hasNoRootCheck" ]; then + if [ -z "$hasIncludeApprovedIPAddresses" ]; then + # Put it above the close tag if it exists or at the end of the file + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/i\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;" "$phpmyadminCONFToModify" + else + echo -e "\$cfg['Servers'][1]['AllowRoot'] = FALSE;" >> "$phpmyadminCONFToModify" + fi + else + # Put it before the include white_list setting since IP addresses may set it to true + sed -i "/^include 'rootip_whitelist.php'/i\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;" "$phpmyadminCONFToModify" + fi + else + sed -i "s#^\$cfg\['Servers'\]\[1\]\['AllowRoot'\].*#\$cfg\['Servers'\]\[1\]\['AllowRoot'\] = FALSE;#g" "$phpmyadminCONFToModify" + fi + + # Add a temporary upload directory for files + if [ -z "$hasTmpUploadDir" ]; then + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/i\$cfg\['UploadDir'\] = '\./upload';" "$phpmyadminCONFToModify" + else + echo -e "\$cfg['UploadDir'] = './upload';" >> "$phpmyadminCONFToModify" + fi + else + sed -i "s#^\$cfg\['UploadDir'\].*#\$cfg\['UploadDir'\] = '\./upload';#g" "$phpmyadminCONFToModify" + fi + + # White listed IP addresses that can login to root account via PHPMyAdmin + if [ -z "$hasIncludeApprovedIPAddresses" ]; then + if [ ! -z "$hasPHPCloseTag" ]; then + sed -i "/^?>/iinclude 'rootip_whitelist.php';" "$phpmyadminCONFToModify" + else + echo -e "include 'rootip_whitelist.php';" >> "$phpmyadminCONFToModify" + fi + fi + + # Make sure rootip_whitelist functions are included + if [ -z "$hasIncludeApprovedIPAddressesFunction" ]; then + hasIncludeApprovedIPAddresses=$(cat "$phpmyadminCONFToModify" | grep -o "include 'rootip_whitelist.php'") + if [ ! -z "$hasIncludeApprovedIPAddresses" ]; then + sed -i "/^include 'rootip_whitelist.php';/iinclude_once 'rootip_whitelist_functions.php';" "$phpmyadminCONFToModify" + fi + fi + fi +} + +function fixPHPmcrypt(){ + aptgetInstall php5-mcrypt + aptgetInstall php-mcrypt + php5enmod mcrypt + phpenmod mcrypt +} + +function fixPopBeforeSMTP(){ + aptPackageInstallOrManualGet "pop-before-smtp" +} + +function generatePassword(){ + if [ ! -z "$1" ]; then + PLENGTH="$1" + else + PLENGTH="10" + fi + + #rPass=$(date +%s | sha256sum | base64 | head -c "$PLENGTH") + rPass=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 | head -c "$PLENGTH") +} + +function configurePHPIni(){ + # Variables + PHPINIFORAPACHE="$PHPCONFDir/apache2/php.ini" + PHPINIFORNGINX="$PHPCONFDir/fpm/php.ini" + + # Logging + logToInstallLogFile "Changing PHP settings in the following configuration file: $PHPINIFORAPACHE" + logToInstallLogFile "Changing PHP settings in the following configuration file: $PHPINIFORNGINX" + + ModifyPHPIniConfigForFile "$PHPINIFORAPACHE" + ModifyPHPIniConfigForFile "$PHPINIFORNGINX" + #Opcache seems to have some random php session issues. If it should be disabled in the future, run this: + #ModifyPHPIniConfigForFile "$PHPINIFORNGINX" "disableOpcache" + + # Create /var/www/php_sessions directory to store PHP session files for the default configuration file only + # All defined vhosts have their own php_sessions directory for permissions sake... + setupPHPSessionsDir +} + +function ModifyPHPIniConfigForFile(){ + # $1 is the php.ini file to modify + # $2 is additional action such as disble opcache completely + if [ ! -z "$1" ]; then + PHPINIFILE="$1" + if [ -e "$PHPINIFILE" ]; then + # Turn error displaying on + sed -i "s#^display_errors.*#display_errors = On#g" "$PHPINIFILE" + + # Set upload limit higher to 50MB (We don't live in the 90s anymore...) + sed -i "s#^upload_max_filesize.*#upload_max_filesize = 50M#g" "$PHPINIFILE" + + # Set max post size to 50MB (We don't live in the 90s anymore...) + sed -i "s#^post_max_size.*#post_max_size = 50M#g" "$PHPINIFILE" + + # And for gods sake, please set error reporting so that it doesn't annoy anyone! + sed -i "s#^error_reporting.*#error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_NOTICE \& \~E_STRICT#g" "$PHPINIFILE" + + # Set max execution time higher to 100 seconds + sed -i "s#^max_execution_time.*#max_execution_time = 100#g" "$PHPINIFILE" + + # Configure opcache "properly" for PHP 5.5.x and up + hasOpCache=$(cat "$PHPINIFILE" | grep -o "^\[opcache\]") + if [ ! -z "$hasOpCache" ]; then + # Correct opcache based on this bug report: https://bugs.php.net/bug.php?id=68869 + # Timestamps + sed -i "s#^;opcache.validate_timestamps=.*#opcache.validate_timestamps=1#g" "$PHPINIFILE" + sed -i "s#^opcache.validate_timestamps=.*#opcache.validate_timestamps=1#g" "$PHPINIFILE" + + # Revalidation frequency + sed -i "s#^;opcache.revalidate_freq=.*#opcache.revalidate_freq=0#g" "$PHPINIFILE" + sed -i "s#^opcache.revalidate_freq=.*#opcache.revalidate_freq=0#g" "$PHPINIFILE" + + if [ ! -z "$2" ] && [ "$2" == "disableOpcache" ]; then + # Disable it completely + sed -i "s#^;opcache.enable=.*#opcache.enable=0#g" "$PHPINIFILE" + sed -i "s#^opcache.enable=.*#opcache.enable=0#g" "$PHPINIFILE" + fi + fi + else + # Logging + logToInstallLogFile "$PHPINIFILE does not exist!" + fi + fi +} + +function fixSASLAUTH(){ + # Fix SASLAUTH CACHE and limit to no threads for better performance + if [ -e "/etc/default/saslauthd" ]; then + backupFile "/etc/default/saslauthd" + echo "NAME=\"saslauthd\" +START=yes +MECHANISMS=\"pam\" +PARAMS=\"-n 0 -m /var/spool/postfix/var/run/saslauthd -r\" +OPTIONS=\"-n 0 -m /var/spool/postfix/var/run/saslauthd -r\" +" > "/etc/default/saslauthd" + + # restart the service + manageService "saslauthd" "restart" + fi +} + +function backupFile(){ + # Backups up a file in the general backup directory. + # Params: + # $1 = filepath to backup + + genBackupDIR="/root/Backup/general" + if [ ! -e "$genBackupDIR" ]; then + mkdir -p "$genBackupDIR" + fi + + if [ ! -z "$1" ]; then + FileToBackup="$1" + if [ -e "$FileToBackup" ]; then + nameOfFileToBeBackedUp=$(basename "$FileToBackup") + dirOfFileToBeBackedUp=$(dirname "$FileToBackup") + # Replace "/" with underscores so that the directory where the file should + # be if the user wishes to restore the file is in the file name of the backup + fileStructure=$(echo "$dirOfFileToBeBackedUp" | tr "/" "_") + # Get first character that isn't underscore + fileStructure=$(echo "$fileStructure" | cut -c 2-) + nowDate=$(date +"%m_%d_%Y_%H%M%S") + backupFullPath="${genBackupDIR}/${fileStructure}_${nameOfFileToBeBackedUp}_${nowDate}" + cp "$FileToBackup" "$backupFullPath" + fi + fi +} + +function postInstallInformation(){ + echo "Thank you for installing the FoRcE Edition (a fork) of EHCP. + +The following ports are used by EHCP and must be open: +20,21,22,25,53,80,110,143 (tcp+udp) + +Please visit our website for updates, support, and community additions. +http://ehcpforce.tk + +Your web hosting control panel can be accessed via http://yourip/ + +Enjoy!" + + if [ -e "$logInfoFile" ]; then + echo -e "\nEHCP Various Account Credentials:\n-----------------------------------" + CREDS=$(cat "$logInfoFile") + echo -e "$CREDS" + echo -e "\nThe above information is also stored in $logInfoFile for future reference." + fi +} + +function installNeededDependencies(){ + aptgetInstall "gdebi-core" + aptgetInstall python-software-properties # for add-apt-repository + + # Work around for Ubuntu 16.04 + if [ ! -z "$unattended" ]; then + echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections + echo "postfix postfix/mailname string $HOSTNAME" | debconf-set-selections + fi + + # apt-get upgrade # may be cancelled later... this may be dangerous... server owner should do it manually... + aptgetInstall php + aptgetInstall php-mysql + aptgetInstall php-cli + aptgetInstall php5 + aptgetInstall php5-mysql + aptgetInstall php5-cli + aptgetInstall sudo + aptgetInstall wget + aptgetInstall aptitude + aptgetInstall ftp + aptgetInstall php-mail-mimedecode + aptgetInstall php7.0-zip + aptgetInstall php5-gd + aptgetInstall php7.0-gd + aptgetInstall php5-zip + + # Required for Certbot + aptgetInstall python + aptgetInstall libexpat1-dev + aptgetInstall libpython-dev + aptgetInstall libpython2.7-dev + aptgetInstall python-setuptools + aptgetInstall python2.7-dev + aptgetInstall libssl-doc + aptgetInstall openssl gcc build-essential + aptgetInstall python-pip + aptgetInstall augeas-tools + aptgetInstall libffi-dev + aptgetInstall libssl-dev + aptgetInstall python-dev + aptgetInstall python-virtualenvs + + # This is needed to provide a default answer for configuring certain packages such as mysql and phpmyadmin + if [ ! -z "$unattended" ]; then + aptgetInstall debconf-utils + fi + + # Install sshpass used for scp copying + aptgetInstall sshpass + + # Needed for Ubuntu 14 and up: + aptgetInstall apache2-utils +} + +function getRidOfExtraPHPMyAdminAlias(){ + # Remove extra phpmyadmin.conf file which may have been used for older versions + if [ -e "/etc/apache2/conf-enabled/phpmyadmin.conf" ] && [ -e "/etc/apache2/conf.d/phpmyadmin.conf" ]; then + rm "/etc/apache2/conf.d/phpmyadmin.conf" + fi +} + +function turnOffIPv6PostFix(){ + PostFixConfFile="/etc/postfix/main.cf" + if [ -e "$PostFixConfFile" ]; then + ProtocolsSetting=$(cat "$PostFixConfFile" | grep -o "^inet_protocols.*") + CurrentProtocolSetting=$(echo "$ProtocolsSetting" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$ProtocolsSetting" ]; then + sed -i 's/^inet_protocols.*/inet_protocols = ipv4/g' "$PostFixConfFile" + fi + fi +} + +function manageService(){ # by earnolmartin@gmail.com + # Linux is introducing systemd booting, so now I gotta handle craziness + # $1 is the service name + # $2 is the service action + service "$1" "$2" +} + +function getVSFTPDUser(){ + vsftpdUserExists=$(cat "/etc/passwd" | grep "vsftpd") + if [ -z "$vsftpdUserExists" ]; then + VSFTPDUser="ftp" + else + VSFTPDUser="vsftpd" + fi +} + +function setupPHPSessionsDir(){ + PHPSessDir="/var/www/php_sessions" + mkdir -p "$PHPSessDir" + chown -R ${VSFTPDUser}:www-data "$PHPSessDir" +} + +function stopServices(){ + # Stop services + manageService "ehcp" "stop" + manageService "apache2" "stop" + managePHPFPMService "stop" + manageService "nginx" "stop" +} + +function fixRoundCubeFileAttachments(){ + roundCubeConfigFile="/etc/roundcube/main.inc.php" + if [ -e "$roundCubeConfigFile" ]; then + sed -i "s/^\$rcmail_config\['temp_dir'\].*/\$rcmail_config\['temp_dir'\] = '\/tmp';/g" "$roundCubeConfigFile" + hasRCTempDirSetting=$(cat "$roundCubeConfigFile" | grep -o "\$rcmail_config\['temp_dir'\].*") + if [ -z "$hasRCTempDirSetting" ]; then + echo "\$rcmail_config['temp_dir'] = '/tmp';" >> "$roundCubeConfigFile" + fi + fi +} + +function setDefaultRoundCubeServer(){ + if [ -e "/etc/roundcube/config.inc.php" ]; then + sed -i "s/^\$config\['default_host'\].*/\$config\['default_host'\] = 'localhost';/g" "/etc/roundcube/config.inc.php" + fi +} + +function installPolicyD(){ + if [[ "$distro" == "ubuntu" && "$yrelease" -ge "14" ]] || [[ "$distro" == "debian" && "$yrelease" -ge "8" ]]; then + # Create policyd mysql database under ehcp mysql user and populate it with policyd sql + curDir=$(pwd) + + # install prereqs + aptgetInstall libconfig-inifiles-perl + aptgetInstall libcache-fastmmap-perl + + #create policyd users + policyDUserCheck=$(cat /etc/passwd | grep "cbpolicyd") + if [ -z "$policyDUserCheck" ]; then + groupadd cbpolicyd + useradd -M cbpolicyd -g cbpolicyd -s /usr/sbin/nologin + passwd -d cbpolicyd + fi + + # Create needed directories and log files: + mkdir -p "/var/log/cbpolicyd" + touch "/var/log/cbpolicyd/cbpolicyd.log" + chown cbpolicyd:cbpolicyd -R "/var/log/cbpolicyd" + mkdir -p "/var/run/cbpolicyd" + chown cbpolicyd:cbpolicyd -R "/var/run/cbpolicyd" + + # Generate password for policyd mysql user + generatePassword + policyDMySQLUser="ehcp_policyd" + policyDMySQLPass="$rPass" + + # Create the database with the username and password and populate it with the policyd mysql + cd "$patchDir" + cp "$FIXDIR/api/create_mysql_db_user.tar.gz" "create_mysql_db_user.tar.gz" + tar -zxvf "create_mysql_db_user.tar.gz" + php -f create_mysql_db_user.php "policyd" "$policyDMySQLUser" "$policyDMySQLPass" "$FIXDIR/policyd/policyd.mysql" + + # No longer used, but might be used one day for something else... so leaving here just in-case + # Crude but works... + #EHCPMySQLPass=$(cat "/var/www/new/ehcp/config.php" | grep -o "dbpass=.*" | grep -o "=.*" | grep -o "[^='].*" | grep -o ".*[^';]") + #EHCPMySQLUser=$(cat "/var/www/new/ehcp/config.php" | grep -o "dbusername=.*" | grep -o "=.*" | grep -o "[^='].*" | grep -o ".*[^';]") + + logToInstallLogFile "Replacing PolicyD MySQL Information in cluebringer.conf" + + # Copy the main config file to this directory, replace some variables, and then move it to /etc/ + cp "$FIXDIR/policyd/cluebringer.conf" ./ + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "cluebringer.conf" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "cluebringer.conf" + mkdir -p "/etc/cbpolicyd" + mv "cluebringer.conf" "/etc/cbpolicyd/cluebringer.conf" + + # Create the proper directories + mkdir -p "/usr/local/lib/cbpolicyd-2.1" + cp -r "$FIXDIR/policyd/cbp" "/usr/local/lib/cbpolicyd-2.1/" + cp -r "$FIXDIR/policyd/awitpt/awitpt" "/usr/local/lib/cbpolicyd-2.1/" + + # Copy script files for policyD + cp "$FIXDIR/policyd/cbpadmin" "/usr/local/bin/" + cp "$FIXDIR/policyd/cbpolicyd" "/usr/local/sbin/" + cp "$FIXDIR/policyd/run_policyd_async.sh" "/etc/cbpolicyd" + + # Replace vars in async script + sed -i "s/{policyDMySQLUser}/$policyDMySQLUser/g" "/etc/cbpolicyd/run_policyd_async.sh" + sed -i "s/{policyDMySQLPass}/$policyDMySQLPass/g" "/etc/cbpolicyd/run_policyd_async.sh" + + # Append configuration to main.cf postfix settings + CurRecipRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_recipient_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurRecipRestrictions" ]; then + lastCharInRestriction="${CurRecipRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurRecipRestrictions="${CurRecipRestrictions: : -1}" + fi + fi + + CurEndOfDataRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_end_of_data_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurEndOfDataRestrictions" ]; then + lastCharInRestriction="${CurEndOfDataRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurEndOfDataRestrictions="${CurEndOfDataRestrictions: : -1}" + fi + fi + + hasPolicyDRecipRestr=$(echo $CurRecipRestrictions | grep -o "check_policy_service inet:127.0.0.1:10031") + hasPolicyDEndOfData=$(echo $CurEndOfDataRestrictions | grep -o "check_policy_service inet:127.0.0.1:10031") + if [ -z "$hasPolicyDRecipRestr" ]; then + logToInstallLogFile "Adding PolicyD SMTP Recipient Restriction and then Appending Original Entries" + sed -i "s#smtpd_recipient_restrictions\( \)*=.*#smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031,$CurRecipRestrictions#g" "/etc/postfix/main.cf" + fi + if [ -z "$hasPolicyDEndOfData" ]; then + hasSMTPDEndLine=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_end_of_data_restrictions") + if [ ! -z "$hasSMTPDEndLine" ]; then + logToInstallLogFile "Adding PolicyD SMTP End of Data Restriction and then Appending Original Entries" + sed -i "s#smtpd_end_of_data_restrictions\( \)*=.*#smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031,$CurEndOfDataRestrictions#g" "/etc/postfix/main.cf" + else + logToInstallLogFile "Adding SMTP End of Data Restrictions" + echo "smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031" >> "/etc/postfix/main.cf" + fi + fi + + # Make AMAVISD work with policyD + mkdir -p "/etc/amavis/plugins" + cp "$FIXDIR/policyd/amavisd-policyd.pm" ./ + logToInstallLogFile "Updating PolicyD MySQL Information in amavisd-policyd.pm Plugin" + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "amavisd-policyd.pm" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "amavisd-policyd.pm" + cp "amavisd-policyd.pm" "/etc/amavis/plugins" + hasPolicyAmavisInclude=$(cat "/etc/amavis/conf.d/01-debian" | grep -o "include_config_files('/etc/amavis/plugins/amavisd-policyd.pm');") + if [ -z "$hasPolicyAmavisInclude" ]; then + echo "include_config_files('/etc/amavis/plugins/amavisd-policyd.pm');" >> "/etc/amavis/conf.d/01-debian" + fi + + # Copy webui to main ehcp folder + cp -R "$FIXDIR/policyd/webui" "/var/www/new/ehcp/policyd" + # Fix mysql info in webui policyd folder + logToInstallLogFile "Updating PolicyD MySQL Information in PolicyD Config.php for Web UI" + sed -i "s/{ehcpusername}/$policyDMySQLUser/g" "/var/www/new/ehcp/policyd/includes/config.php" + sed -i "s/{ehcppass}/$policyDMySQLPass/g" "/var/www/new/ehcp/policyd/includes/config.php" + + # Copy init.d script to /etc/init.d and start it + cp "$FIXDIR/policyd/policyd_agent" "/etc/init.d/" + systemctl daemon-reload + manageService "policyd_agent" "start" + + # Start the service on boot + update-rc.d policyd_agent defaults + else + echo "Failed to install policyd! This feature requires Ubuntu 14.04 and up!"; + fi +} + +function removeSystemCronJob(){ # by earnolmartin@gmail.com + # $1 is the command or script to run that needs to be deleted + # Example of what $1 should be: echo hello + + if [ ! -z "$1" ]; then + CURDIR=$(pwd) + cd "$patchDir" + + # Get the current crontab + crontab -l > mycron + if [ -s mycron ]; then + echo -e "Removing cronjob $1!" + # remove cronjob if it exists + sed -i "\\#$1.*\$#c\\" mycron + + # Install the new crontab file + crontab mycron + fi + + # Delete the crontab file + rm mycron + + cd "$CURDIR" + fi +} + +function addSystemCronJob(){ # by earnolmartin@gmail.com + # $1 is the cronjob syntax + # $2 is the command or script to run + # Example of what $1 should be: 00 09 * * 1-5 + # Example of what $2 should be: echo hello + + if [ ! -z "$1" ] && [ ! -z "$2" ]; then + CURDIR=$(pwd) + cd "$patchDir" + + # Get the current crontab + crontab -l > mycron + if [ ! -s mycron ]; then + echo -e "$1 $2\n" >> mycron + else + # check to make sure the command or script isn't already being called + scriptRunAlreadyCheck=$(cat mycron | grep "$2") + if [ -z "$scriptRunAlreadyCheck" ]; then + # Add the cronjob to the top of the file since custom EHCP admin defined cronjobs may have already been created. + sed -i "1s#^#$1 $2\n#" mycron + fi + fi + + # Install the new crontab file + crontab mycron + + # Delete the crontab file + rm mycron + + cd "$CURDIR" + fi +} + +function getPHPSessionTimeout(){ + if [ "$WebServerType" == "nginx" ]; then + nginxFPMPHPConfig="$PHPCONFDir/fpm/php.ini" + if [ -e "$nginxFPMPHPConfig" ]; then + SessionTimeoutSetting=$(cat "$nginxFPMPHPConfig" | grep -o "^session.gc_maxlifetime.*" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + SessionTimeoutSetting=$((SessionTimeoutSetting/60)) + if [ "$SessionTimeoutSetting" -le "0" ]; then + SessionTimeoutSetting=1 + fi + echo -e "Session timeout is configured to be to $SessionTimeoutSetting minutes!" + fi + fi + elif [ "$WebServerType" == "apache2" ]; then + apachePHPConfig="$PHPCONFDir/apache2/php.ini" + if [ -e "$apachePHPConfig" ]; then + SessionTimeoutSetting=$(cat "$apachePHPConfig" | grep -o "^session.gc_maxlifetime.*" | grep -o "=.*" | grep -o "[^= ].*") + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + SessionTimeoutSetting=$((SessionTimeoutSetting/60)) + if [ "$SessionTimeoutSetting" -le "0" ]; then + SessionTimeoutSetting=1 + fi + echo -e "Session timeout is configured to be to $SessionTimeoutSetting minutes!" + fi + fi + fi + + if [ ! -z "$SessionTimeoutSetting" ] && (isnum "$SessionTimeoutSetting"); then + if [ "$SessionTimeoutSetting" -ge "5" ] && [ "$SessionTimeoutSetting" -lt "60" ]; then + echo -e "Adding cronjob to clear sessions last accessed more than $SessionTimeoutSetting minutes ago." + removeSystemCronJob "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh" + addSystemCronJob "*/$SessionTimeoutSetting * * * *" "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh $SessionTimeoutSetting" + else + SessionTimeoutSetting= + fi + else + SessionTimeoutSetting= + fi +} + +function isnum(){ + # http://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash + result=$(awk -v a="$1" 'BEGIN {print (a == a + 0)}';) + if [ "$result" == "1" ]; then + # 0 = true + return 0 + else + # 1 = false + return 1 + fi +} + +function getPHPConfigPath(){ + if [ -d "/etc/php5" ]; then + PHPCONFDir="/etc/php5" + else + if [ -d "/etc/php" ]; then + PHPCONFDir=$(ls "/etc/php" | head -n 1) + PHPCONFDir="/etc/php/$PHPCONFDir" + fi + fi +} + +# http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable +function trim() { + local var="$*" + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + echo -n "$var" +} + +function addToPostFixRecipientRestrictions(){ + CurRecipRestrictions=$(cat "/etc/postfix/main.cf" | grep -o "smtpd_recipient_restrictions\( \)*=.*" | grep -o "=.*" | grep -o "[^=\( \)*].*") + if [ ! -z "$CurRecipRestrictions" ]; then + # Remove last character if it's a comma which is used as the separator + lastCharInRestriction="${CurRecipRestrictions: -1}" + if [ "$lastCharInRestriction" == "," ]; then + CurRecipRestrictions="${CurRecipRestrictions: : -1}" + fi + + hasSpamhaus=$(echo "$CurRecipRestrictions" | grep -o "zen.spamhaus.org") + hasSpamCop=$(echo "$CurRecipRestrictions" | grep -o "bl.spamcop.net") + if [ -z "$hasSpamhaus" ]; then + CurRecipRestrictions="${CurRecipRestrictions},reject_rbl_client zen.spamhaus.org" + fi + if [ -z "$hasSpamCop" ]; then + CurRecipRestrictions="${CurRecipRestrictions},reject_rbl_client bl.spamcop.net" + fi + sed -i "s#^smtpd_recipient_restrictions\( \)*=.*#smtpd_recipient_restrictions = $CurRecipRestrictions#g" "/etc/postfix/main.cf" + fi +} + +function changeSquirrelMailConfigurationUseSendmail(){ + # SquirrelMail webmail folder should be renamed to webmail2 + if [ -e "/var/www/new/ehcp/webmail2/config/config.php" ]; then + SquirrelMailConf="/var/www/new/ehcp/webmail2/config/config.php" + else + if [ -e "/var/www/new/ehcp/webmail/config/config.php" ]; then + isSquirrelMail=$(cat "/var/www/new/ehcp/webmail/config/config.php" | grep -o "squirrelmail") + if [ ! -z "$isSquirrelMail" ]; then + SquirrelMailConf="/var/www/new/ehcp/webmail/config/config.php" + fi + fi + fi + + hasSendMailSetting=$(cat "$SquirrelMailConf" | grep -o "\$useSendmail") + if [ -z "$hasSendMailSetting" ]; then + echo -e "\$useSendmail = true;" >> "$SquirrelMailConf" + else + currentSQMailSetting=$(cat "$SquirrelMailConf" | grep -o "\$useSendmail.*" | grep -o "=.*" | grep -o "[^=( )*].*") + currentSQMailSetting=${currentSQMailSetting%?} + + if [ "$currentSQMailSetting" == "false" ]; then + # Set it to true + sed -i "s#^\$useSendmail\( \)*=.*#\$useSendmail = true;#g" "$SquirrelMailConf" + fi + fi + + sed -i "s#^\$data_dir\( \)*=.*#\$data_dir = '/var/www/new/ehcp/webmail2/data/';#g" "$SquirrelMailConf" + sed -i "s#^\$attachment_dir\( \)*=.*#\$attachment_dir = '/var/www/new/ehcp/webmail2/data/';#g" "$SquirrelMailConf" +} + +function makeRoundCubeDefaultMailClient(){ + if [ -e "/var/www/new/ehcp/webmail2" ]; then + if [ ! -e "/var/www/new/ehcp/webmail2/config/config.php" ] ; then + mv "/var/www/new/ehcp/webmail2" "/var/www/new/ehcp/webmail_roundcube" + mv "/var/www/new/ehcp/webmail" "/var/www/new/ehcp/webmail2" + mv "/var/www/new/ehcp/webmail_roundcube" "/var/www/new/ehcp/webmail" + fi + fi +} + +function writeOutVersionInfo(){ + if [ ! -z "$yrelease" ] && [ ! -z "$mrelease" ]; then + echo -e "$yrelease $mrelease" > "/var/www/new/ehcp/version_during_install.txt" + fi + + if [ ! -z "$distro" ]; then + echo -e "$distro" > "/var/www/new/ehcp/distro_during_install.txt" + fi +} + +function daemonUseSystemd(){ + # Stop services + manageService "ehcp" "stop" + manageService "policyd_agent" "stop" + + # Get rid of experimental python daemon + # It was never used to begin with + if [ -e "/etc/init.d/ehcp_daemon.py" ]; then + rm "/etc/init.d/ehcp_daemon.py" + fi + + # Use systemd Service for EHCP on newer systems + if ([ "$distro" == "ubuntu" ] && [ "$yrelease" -ge "16" ]) || [ ! -z "$systemdPresent" ]; then + if [ -e "/lib/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/ehcp.service" "/lib/systemd/system" + rm -rf "/etc/init.d/ehcp" + elif [ -e "/etc/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/ehcp.service" "/etc/systemd/system" + rm -rf "/etc/init.d/ehcp" + fi + fi + + # Use systemd Service for policyd on newer systems + if ([ "$distro" == "ubuntu" ] && [ "$yrelease" -ge "16" ]) || [ ! -z "$systemdPresent" ]; then + if [ -e "/etc/cbpolicyd" ]; then + if [ -e "/lib/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/policyd_agent.service" "/lib/systemd/system" + rm "/etc/init.d/policyd_agent" + elif [ -e "/etc/systemd/system" ]; then + cp "$FIXDIR/daemon/systemd/policyd_agent.service" "/etc/systemd/system" + rm "/etc/init.d/policyd_agent" + fi + fi + fi + + # Reload systemd to pick up on the new daemon if applicable + systemctl daemon-reload + systemctl enable policyd_agent.service + systemctl enable ehcp.service +} + +function installCertBotLetsEncrypt(){ + if [ ! -e "/usr/local/bin/certbot" ]; then + curDir=$(pwd) + cd "$patchDir" + wget -N https://dl.eff.org/certbot-auto + chmod a+x certbot-auto + mv certbot-auto /usr/local/bin/certbot + /usr/local/bin/certbot --quiet + cd "$curDir" + addSystemCronJob "45 4 * * *" "/var/www/new/ehcp/scripts/certbot_renew_certs.sh" + fi +} + +function searchForServiceName(){ + # $1 is the search string... find a service that contains this string + if [ -e "${serviceNameTempFile}" ]; then + rm -rf "${serviceNameTempFile}" + fi + + if [ ! -z "$1" ]; then + serviceName=$(ls /etc/init.d 2>/dev/null | grep -F -- "${1}") + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + serviceName=$(find /lib/systemd/system -name "*${1}*" -exec basename {} .service \; 2>/dev/null) + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + serviceName=$(find /etc/systemd/system -name "*${1}*" -exec basename {} .service \; 2>/dev/null) + if [ ! -z "$serviceName" ]; then + echo "${serviceName}" > "${serviceNameTempFile}" + fi + + if [ -z "${serviceNameTempFile}" ]; then + > "${serviceNameTempFile}" + fi + fi +} + +function managePHPFPMService(){ + # $1 is the action + if [ -z "$1" ]; then + fpmAction="restart" + else + fpmAction="$1" + fi + + searchForServiceName "-fpm" + fpmService=$(cat "${serviceNameTempFile}") + if [ ! -z "$fpmService" ]; then + echo -e "${fpmAction}ing specifically detected php-fpm service ${fpmService}...\n" + manageService "${fpmService}" "${fpmAction}" + else + echo -e "Restarting php-fpm generically...\n" + manageService "php5-fpm" "${fpmAction}" + manageService "php-fpm" "${fpmAction}" + manageService "php7.0-fpm" "${fpmAction}" + manageService "php7.1-fpm" "${fpmAction}" + fi +} + +function finalCleanup(){ + if [ -e "${serviceNameTempFile}" ]; then + rm -rf "${serviceNameTempFile}" + fi +} + +function fixMariaDBSkippingInnoDB(){ + # Check to see if allow writeable chroot is present + # MariaDB Config file + mariaDBConfFile="/etc/mysql/mariadb.cnf" + if [ -e "$mariaDBConfFile" ]; then + sed -i 's/^skip-innodb/#skip-innodb/g' "$mariaDBConfFile" + fi +} + +function getImportantPreReqs(){ + aptgetInstall lsb-release +} + +############################################################# +# End Functions & Start Install # +############################################################# +installdir=$(pwd) +if [ ! -f $installdir/install.sh ] ; then + echo "install.sh is not in install dir. Run install.sh from within ehcp installation dir." + exit 1 +fi + +#echo "`date`: initializing.b" # i added these echo's because on some system, some stages are very slow. i need to investigate that. +checkUser +ehcpHeader + +# Check that we are using apt +checkAptget + +# Update the system before installation +# If your package information is out of date, MySQL and others may fail to install +updateBeforeInstall + +# Get some additional prereqs +getImportantPreReqs + +# Check distribution +checkDistro + +# Set global variables +setGlobalVars + +# Turn off apprmor +manageService "apparmor" "stop" # apparmor causes many problems... +manageService "apparmor" "teardown" # apparmor causes many problems..if anybody knows a better solution, let us know. + +# Kill all running EHCP +killallEhcp + +if [ -z "$distro" ] ; then + echo "Your system type could not be detected or detected to be ($distro), You may not install ehcp automatically on this system, anyway, to continue press enter" + read +fi + +#----------------------start some install -------------------------------------- +#echo "`date`: initializing.g" +mkdir /etc/ehcp + +# Update everything +aptget_Update + +# Install prereqs +installNeededDependencies + +# Get PHP Config Path +getPHPConfigPath + +#outside_ip=`echo "" > ip ; wget -q -O ip http://ehcp.net/diger/myip.php ; echo ip` +#rm -f ip + +echo +echo + +checkPhp +echo +echo +echo +echo "STAGE 2" +echo "=====================================================================" +echo "now running install_1.php " +php install_1.php $version $distro $noapt $unattended $installmode $debug + +echo +echo +echo "STAGE 3" +echo "=====================================================================" +echo "now running install_2.php " + +#Send version to avoid installing nginx on Ubuntu 12.10 --- there is a bug and it's not supported +#php install_2.php $noapt || php /etc/ehcp/install_2.php $noapt # start install_2.php if first install is successfull at php level. to prevent many errors. +php install_2.php $version $distro $noapt $unattended $installmode $debug + +############################################### +# Post Install Functions by Eric Arnol-Martin # +############################################### + +# Get PHP Config Path Again Just In Case +getPHPConfigPath + +mv /var/www/new/ehcp/install_?.php /etc/ehcp/ # move it, to prevent later unauthorized access of installer from web +cd "/var/www/new/ehcp" +# Stop Services While We Perform Changes +stopServices +# Get ftpuser +getVSFTPDUser +# Run VSFTPD Fix depending on version +ubuntuVSFTPDFix +# Run SlaveDNS Fix So that DNS Zones can be transfered +slaveDNSApparmorFix +# Fix EHCP Permissions +fixEHCPPerms +# Run log chmod fix +logDirFix +# Copy over nginx conf file +copyNginxConf +# Fix php-fpm to listen to port 9000 +fixPHPFPMListen +# Fix session saving for nginx +fixNginxSessions +# Change Apache user to vsftpd to ensure chmod works via PHP and through FTP Clients +changeApacheUser +# Add rate limiting option to nginx if it doesn't have it +nginxRateLimit +# Fix extra mysql module getting loaded in the PHP config printing warning messages +fixPHPConfig +# Fix /etc/bind directory permissions required for slave dns +fixBINDPerms +# Fix generic problems in Ubuntu +genUbuntuFixes +# Secure BIND9 Configuration +disableRecursiveBIND +# Make it so that strangers can't just browse folders without an index file +secureApache +# Allow .htaccess file overrides for Ubuntu 14.04 and up (hopefully versions above) +allowHTACCESSOverrides +# Remove unattended install file if exists +removeInstallSilently +# Install and enable php mcrypt module --- if not enabled already +fixPHPmcrypt +#Fix pop-before-smtp +fixPopBeforeSMTP +#Fix apache2 umask issue +#For some reason, new distros include umask 111 in apache2 envvars which really messes stuff up +removeApacheUmask +# Secure PHPMyAdmin Configuration to Prevent Root Logins Except for Local Connections +securePHPMyAdminConfiguration +#Change settings in php.ini to allow 50MB upload files, turn on displaying errors, and setting the error_reporting to something practical +configurePHPIni +# Install Fail2Ban, Apache Modules, and Antispam Depending on Install Mode +installExtras +# Fix saslauthd +fixSASLAUTH +# Turn off IPv6 support in postfix if applies (will fix email issues) +turnOffIPv6PostFix +# Fix roundcube config for file attachments +fixRoundCubeFileAttachments +# Set localhost as server to use for roundcube +setDefaultRoundCubeServer +# Make roundcube default webmail +makeRoundCubeDefaultMailClient +# Fix SquirrelMail config to use Sendmail +changeSquirrelMailConfigurationUseSendmail +# Download and install certbot (let's encrypt) +installCertBotLetsEncrypt + +# Get PHP Session Timeout and Create Cronjob to Clean Expired Sessions Up! +WebServerType="apache2" +getPHPSessionTimeout +if [ -z "$SessionTimeoutSetting" ]; then + echo -e "Adding cronjob to cleanup old php session files" + # Add cronjob to clean up old php session files + addSystemCronJob "0 2 */5 * *" "/var/www/new/ehcp/scripts/cleanup/remove_old_php_tmp_session_files.sh" +fi + +# Add blacklist email lookup to block incoming spam +addToPostFixRecipientRestrictions + +# Write out version information to version_during_install.txt... that way, if it changes later, we can reprocess it +writeOutVersionInfo + +# Use systemd services if systemd is present +daemonUseSystemd + +# Restart neccessary daemons +echo "Initializing the EHCP Daemon" +restartDaemons +# Inform installation is complete +postInstallInformation + +# Run final cleanup +finalCleanup + +# Launch firefox and the panel +############################################## +launchPanel diff --git a/ehcp/language/.htaccess b/ehcp/language/.htaccess new file mode 100755 index 0000000..03688ee --- /dev/null +++ b/ehcp/language/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/ehcp/language/en.php b/ehcp/language/en.php new file mode 100755 index 0000000..ce0d959 --- /dev/null +++ b/ehcp/language/en.php @@ -0,0 +1,30 @@ +lang['en']= +array( +'undefined_limittype'=>'Undefined limittype.', +'norecordfound'=>'Nothing/No Record Found.', +'recordcount'=>'Record Count:', +'areyousuretodelete'=>'Are you sure to delete ?
', +'error_occured'=>'Error Occured ', +'write_yourmessage_here'=>'Write Your Messsage Here', +'name_surname'=>'Name Surname', +'enter_yourcontactinfo'=>'Enter Your Contact Info Here', +'yourmessage_received'=>'Thanks. We Received Your Message.', +'search_'=>'Search', +'list_all'=>'List All', +'int_undefined_limittype'=>'internal ehcp error: undefined limittype', +'perhaps_db_error'=>'This may mean that your db settings are not correct, you cannot connect to db; or your db/html table has missing rows.
You may edit config.php for ehcp mysql user password.
Trymysql troubleshooter to solve this problem.', +'welcome to world'=>'Welcome to World...', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + + + + +?> diff --git a/ehcp/language/fr.php b/ehcp/language/fr.php new file mode 100755 index 0000000..d2a2fa7 --- /dev/null +++ b/ehcp/language/fr.php @@ -0,0 +1,30 @@ +lang['fr']= +array( + + +'undefined_limittype' => 'undefined limittype. ', +'norecordfound' => 'aucun dossier trouv. ', +'recordcount '=>' record count: ', +'areyousuretodelete' => 'voulez-vous vraiment supprimer?
', +'error_occured' => 'erreur s`est produite ', +'write_yourmessage_here' => 'ecrire votre messsage ici', +'name_surname '=>' nom prnom ', +'enter_yourcontactinfo' => 'entrez votre contact info here', +'yourmessage_received' => 'merci. nous reu votre message. ', +'search_' => 'rechercher', +'list_all' => 'todos', +'int_undefined_limittype' => 'intrieur ehcp erreur: undefined limittype', +'perhaps_db_error' => 'Cela peut signifier que votre base de rglages ne sont pas corrects, vous ne pouvez pas vous connecter au db; ou votre db / html tableau a disparues ranges.
Vous pouvez diter config.php pour ehcp passe de l"utilisateur mysql. Essayez href=misc/mysqltroubleshooter.php> mysql dpannage pour rsoudre ce problme. ', +'welcome to world'=>'Welcome to World...', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + + +?> diff --git a/ehcp/language/german.php b/ehcp/language/german.php new file mode 100755 index 0000000..2a3c5b1 --- /dev/null +++ b/ehcp/language/german.php @@ -0,0 +1,27 @@ +lang['german']= +array( + +'undefined_limittype '=>' undefined limittype.', +'norecordfound' => 'keine daten gefunden. ', +'recordcount' => 'record count:', +'areyousuretodelete' => 'sind sie sicher, dass zu lschen?
', +'error_occured' => 'fehler aufgetreten', +'write_yourmessage_here' => 'schreiben sie ihre messsage hier', +'name_surname' => 'vorname nachname', +'enter_yourcontactinfo' => 'geben sie hier ihre kontakt-info', +'yourmessage_received' => 'danke. wir received ihre nachricht. ', +'search_' => 'suchen', +'list_all' => 'alle auflisten ', +'int_undefined_limittype' => 'interne ehcp error: undefined limittype', +'perhaps_db_error' => 'Dies bedeutet, dass Ihr db-Einstellungen nicht korrekt sind, knnen Sie keine Verbindung zum db; oder Ihre db / html Tabelle hat Zeilen fehlen.
Sie knnen config.php fr ehcp mysql Benutzerkennwort.
Try
mysql Ratgeber , um dieses Problem zu lsen. ', +'welcome to world'=>'Welcome to World...', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' +); + +?> diff --git a/ehcp/language/it.php b/ehcp/language/it.php new file mode 100755 index 0000000..50f120b --- /dev/null +++ b/ehcp/language/it.php @@ -0,0 +1,30 @@ +lang['it']= +array( +'undefined_limittype'=>'Tipo di limite non definito.', +'norecordfound'=>'Niente/Nessun Record Trovato.', +'recordcount'=>'Conteggio Record:', +'areyousuretodelete'=>'Sei sicuro di voler cancellare ?
', +'error_occured'=>'E" avvenuto un errrore ', +'write_yourmessage_here'=>'Scrivi Qui il Tuo Messaggio', +'name_surname'=>'Nome Cognome', +'enter_yourcontactinfo'=>'Inserisci Qui le Tue Informazioni di Contatto', +'yourmessage_received'=>'Grazie. Abbiamo Ricevuto il Tuo Messaggio.', +'search_'=>'Ricerca', +'list_all'=>'Lista Tutto', +'int_undefined_limittype'=>'errore interno ehcp: tipo do limite indefinito', +'perhaps_db_error'=>'Questo significa che le tue impostazioni del database non sono corrette, non puoi connetterti al db; oppure la tua tabella db/html ha delle righe mancanti.
Puoi modificare config.php per la password utente ehcp di mysql.
Prova ad usare il
mysql troubleshooter per risolvere questo problema.', +'welcome to world'=>'Benvenuto nel Mondo...', +'Panel Home'=>'Pannello d" Inizio/Deselezionare', +'Domain Home'=>'Inizio Dominio', +'Domains'=>'Domini', +'Selected Domain'=>'Scegli un Dominio', +'domain_deactivated_contact_administrator'=>'Questo dominio e" stato disattivato dal propretario/amministratore. Contatta l"amministratore del tuo dominio... / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + + + + +?> diff --git a/ehcp/language/lv.php b/ehcp/language/lv.php new file mode 100755 index 0000000..ae34f50 --- /dev/null +++ b/ehcp/language/lv.php @@ -0,0 +1,27 @@ +lang['en']= +array( +'undefined_limittype'=>'Nenoteikts limita tips.', +'norecordfound'=>'Nekas netika atrasts/Nekādi ieraksti netika atrasti.', +'recordcount'=>'Ierakstu Skaits:', +'areyousuretodelete'=>'Vai tu esi pārliecināts ka vēlies dzēst ?
', +'error_occured'=>'Uzradusies Kļūme ', +'write_yourmessage_here'=>'Ieraksti savu ziņu šeit', +'name_surname'=>'Vārds Uzvārds', +'enter_yourcontactinfo'=>'Ieraksti savu kontakt informāciju šeit', +'yourmessage_received'=>'Paldies Mēs esam saņēmuši tavu ziņu.', +'search_'=>'Meklēt', +'list_all'=>'Parādīt vissus', +'int_undefined_limittype'=>'Starptautiskais ehcp hostinga paneļa kļūme: nepareizi norādīts limita tips', +'perhaps_db_error'=>' Šis uzraksts nozīmē ka tavas datubāzes norādītie dati ir nepareizi, tu nevari savienoties ar datubāzi; vai arī tavas datubāzes HTML konfigurācijai trūkst rindiņu.
Tu varētu mēģināt izlabot config.php , norādot pareizo mysql:db lietotāj vārdu , paroli , un pašu datubāzi.
Un tad mēģinātmysql problēmu meklētājā lai atrastu radušos problēmu.', +'welcome to world'=>'Esi sveicināts pasaulē', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + +?> diff --git a/ehcp/language/nl.php b/ehcp/language/nl.php new file mode 100755 index 0000000..7de33ab --- /dev/null +++ b/ehcp/language/nl.php @@ -0,0 +1,24 @@ +lang['nl']= +array( +'undefined_limittype'=>'Undefined limittype.', +'norecordfound'=>'Geen items gevonden.', +'recordcount'=>'Aantal items:', +'areyousuretodelete'=>'Weet u zeker dat u dit wilt verwijderen?
', +'error_occured'=>'Er is een error geweest ', +'write_yourmessage_here'=>'Type uw bericht hier ', +'name_surname'=>'Naam en achternaam', +'enter_yourcontactinfo'=>'Vul uw contactinformatie hier in. ', +'yourmessage_received'=>'Bedankt, uw bericht is ontvangen.', +'search_'=>'Zoek', +'list_all'=>'Toon alles', +'int_undefined_limittype'=>'Intern ehcp error: Ongedefineerd limiettype.', +'perhaps_db_error'=>'Als u dit bericht ziet is mogelijk uw database niet goed geconfigureerd of loopt de datebaseserver niet meer. Pas config.php aan net de mogelijk nieuwe configuratie.
Of ga naar de mysql troubleshooter om het probleem op te lossen', +'welcome to world'=>'Welcome to World...', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' +); +?> diff --git a/ehcp/language/spanish.php b/ehcp/language/spanish.php new file mode 100755 index 0000000..6265e0a --- /dev/null +++ b/ehcp/language/spanish.php @@ -0,0 +1,28 @@ +lang['spanish']= +array( + +'undefined_limittype' => 'limittype indefinido. ', +'norecordfound' => 'no encontrado. ', +'recordcount' => 'registro de cuenta:', +'areyousuretodelete' => 'ests seguro de borrar?
', +'error_occured' => 'error registrado ', +'write_yourmessage_here' => 'escribe tu mensaje aqu', +'name_surname' => 'nombre apellido', +'enter_yourcontactinfo' => 'introduce tu informacin de contacto aqu', +'yourmessage_received' => 'gracias. hemos recibido su mensaje. ', +'search_' => 'buscar', +'list_all' => 'todos los artculos', +'int_undefined_limittype' => 'error interno ehcp: limittype indefinido ', +'perhaps_db_error' => 'Esto significa que su base de ajustes no es correcta, no se puede conectar a la db, o su db / html tabla tiene filas desaparecidas.
Puede editar en config.php de ehcp contrasea de usuario de mysql. Pruebe
mysql de Problemas para resolver este problema.', +'welcome to world'=>'Welcome to World...', +'Panel Home'=>'Panel Home/Deselect', +'Domain Home'=>'Domain Home', +'Domains'=>'Domains', +'Selected Domain'=>'Selected Domain', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + +?> diff --git a/ehcp/language/tr.php b/ehcp/language/tr.php new file mode 100755 index 0000000..bd9c9dd --- /dev/null +++ b/ehcp/language/tr.php @@ -0,0 +1,27 @@ +lang['tr']= +array( +'undefined_limittype'=>'Tanimlanmamis limit tipi.', +'norecordfound'=>'Kayit Bulunamadi.', +'recordcount'=>'Kayit Sayisi:', +'areyousuretodelete'=>'Silmek istediginize emin misiniz ?
', +'error_occured'=>'Hata olustu... ', +'write_yourmessage_here'=>'Mesajinizi buraya yaziniz...', +'name_surname'=>'isim soyisim ', +'enter_yourcontactinfo'=>'iletisim bilginizi buraya yaziniz :', +'yourmessage_received'=>'Tesekkurler.. mesajinizi aldik...', +'search_'=>'Ara ', +'list_all'=>'Hepsini listele', +'int_undefined_limittype'=>'dahili ehcp hatasi: tanimlanmamis limit tipi ', +'perhaps_db_error'=>'Veritabani ayarlariniz yanlis olabilir, veritabanina baglanilamiyor veya db/html tablosunda eksik satirlar var..
ehcp mysql kullanicisinin sifresini config.php dosyasindan ayarlayabilirsiniz. Bu mysql sorununuzu cozmek icin
burayi deneyin.. ', +'welcome to world'=>'Dunyaya hos geldin ', +'Panel Home'=>'Panel Anasayfası', +'Domain Home'=>'Domain Anasayfası', +'Domains'=>'Domainler/Alanadları', +'Selected Domain'=>'Seçilen Alanadı', +'domain_deactivated_contact_administrator'=>'This domain is deactivated by owner/admin. Contact Your domain administrator.. / Bu domain, sahibi ya da yoneticisi tarafindan kapatilmistir. yonetici ile irtibata geciniz.' + +); + +?> diff --git a/ehcp/localutils.php b/ehcp/localutils.php new file mode 100755 index 0000000..928ba28 --- /dev/null +++ b/ehcp/localutils.php @@ -0,0 +1,1409 @@ +'.' and $dirname<>'..') { + if(!is_dir($dirname)) { + if(mkdir($dirname,777,true)) echo "\ndirectory is made: ($dirname)\n"; + else "\nerror occured while making directory: ($dirname)\n"; + } + } +} + +if(!function_exists("print_r2")){ +function print_r2($array) +{ + if (is_array($array)) return "
Array:\n".str_replace(array("\n" , " "), array('
', ' '), print_r($array, true)).'
'; + elseif ($array===null) return "(null) "; + elseif ($array==="") return "(bosluk= \"\")"; + elseif ($array===false) return "(bool-false)"; + elseif ($array===true) return "(bool-true)"; + else { + return "Array degil:
(normal gosterim:$array)
print_r:(".print_r($array,true).")
var_dump:".var_dump($array); + } +} +} + +if(!function_exists('print_r3')){ +function print_r3($ar,$header='') { +if(!$ar) return "(BOS-EMPTY)"; +if(!is_array) return "Not Array:".$ar; + +$sayi=count($ar); +$tr="
"; + +$res.=" $header"; + +foreach($ar as $key=>$val) { + $res.="$tr$td".$key."$td".$val.""; +} + +$res.="
"; +return $res; + +/* +ic ice (recursive) yapmak icin, +en basa, if(!is_array($ar)) return $ar; +$res.="
".print_r3(key($ar))."".print_r3($val)."
"; + + if($debuglevel>2) $output.=print_r2($alanlar); + + foreach($alanlar as $alan) + $res.=inputelement2($alan, $isAdmin); + + + $res.="
"; + if(strstr($res,"input type='submit' ")===false) $res.=""; + $res.=""; + + return $res; + /* this function is very flexible, cok esnek yani... ingilizce yazdik diye yanlis anlasilmasin, anadoluda yazildi bu...;) + * example usages: + * echo inputform5('name') # displays only an input form with field name + * echo inputform5(array('name','surname')) # input form with name, surname + * echo inputform5(array(array('name','varsayilan'=>'defaultname'),'surname')) # using default value + * etc... + */ + +} + +function inputelement2($alan, $isAdmin = false){ + // $isAdmin can be used in combo with another parameter in an input array to determine if a field should be enabled for administrators or disabled for non-administators including resellers. + // It's an optional parameter that can be used to limit things further during form construction depending on which user submitted the request to build a form, so to speak + // You have to tell this function how to use it, as it really doesn't have any purpose other than being a value you can use should you need it. + + if(!is_array($alan)) $alan=array($alan); # convert to array if not + + + $solyazi=$alan['solyazi'].$alan['lefttext']; + $alanadi=$alan['alanadi'].$alan['name']; + $alantipi=$alan['tip'].$alan['type']; + $sagyazi=$alan['sagyazi'].$alan['righttext']; + + // CSS Class for row + $cssclass = $alan['cssclass']; + if(!isset($cssclass) || empty($cssclass)){ + $cssclass = ""; + } + + $cols=$alan['cols']; + $rows=$alan['rows']; + $cols=($cols==""?40:$cols); + $rows=($rows==""?10:$rows); + + if(!$alantipi or $alantipi=='') $alantipi=$alan[1]; # second array element is field type + if(!$alantipi or $alantipi=='') $alantipi='text'; + + + if($alanadi=='') $alanadi=$alan[0]; # fieldname is the first element, if not defined as 'alanadi'=>'fieldname_example' + + // Left text handling + if(!$solyazi and !in_array($alantipi,array('hidden','comment','submit'))){ + $solyazi=ucwords($alanadi); + $lastCharacter = substr($solyazi, -1); + if($lastCharacter != ":"){ + // Append a Colon + $solyazi = $solyazi . ":"; + } + }else if($solyazi && !in_array($alantipi,array('hidden','comment','submit'))){ + if(strpos($solyazi, ' ') != false){ + $wordsInLeftText = explode(' ', $solyazi); + if(count($wordsInLeftText) <= 5){ + $solyazi=ucwords($solyazi); + } + } + $lastCharacter = substr($solyazi, -1); + if($lastCharacter != ":" && (!isset($alan['skip-ending-colon']) || $alan['skip-ending-colon'] != true)){ + // Append a Colon + $solyazi = $solyazi . ":"; + } + }else if(in_array($alantipi,array('hidden','comment','submit'))){ + $solyazi = ""; + } + if($alantipi=='comment') $span=" colspan=3 "; # no 3 columns for comment type + + + $varsayilan=$alan['varsayilan']; + if(!$varsayilan) $varsayilan=$alan['default']; + + if(!$varsayilan and $alan['value']<>'') $varsayilan=$alan['value']; + if(!$varsayilan and $alan['deger']<>'') $varsayilan=$alan['deger']; # ister varsayilan, ister value, ister deger de, gine de calisir.. + if($deger=='') $deger=$value=$varsayilan; + + if($alan['readonly']<>'') $readonly='readonly="yes"'; + + + $res.="
"; + if($span=='') $res.=$solyazi.""; # no need to a new td if there is a col span + + switch($alantipi) { + case 'password_with_generate': + #$alantipi='password'; + #$alantipi='text'; + /* Password generator by cs4fun.lv */ +$res.=" + +$sagyazi $sagyazi($alantipi)
"; +$th=""; + +$alansayisi=count($alan); + + $result2=" \n $tr"; + if (count($baslik)>0) + { + for ($i=0;$i<$alansayisi;$i++) + { + if($baslik[$i]<>"") {$yaz=$baslik[$i];} else {$yaz=$alan[$i];}; $result2.="$th$yaz
"; + echo "
Trace
"; + echo ""; + + // ----- Content header + echo ""; + + // ----- Display + $v_again=0; + for ($i=0; $i"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + + // ----- Content footer + echo "
"; + $n = ($g_pcl_trace_entries[$i]['index']+1)*10; + echo ""; + + echo ""; + switch ($g_pcl_trace_entries[$i]['type']) { + case 1: + echo ""; + break; + case 2: + echo ""; + break; + case 3: + case 4: + echo ""; + break; + default: + echo ""; + } + echo "
"; + + for ($j=0; $j<=$g_pcl_trace_entries[$i]['index']; $j++) + { + if ($j==$g_pcl_trace_entries[$i]['index']) + { + if (($g_pcl_trace_entries[$i]['type'] == 1) || ($g_pcl_trace_entries[$i]['type'] == 2)) + echo ""; + } + else + echo ""; + } + //echo ""; + echo "
+
|
 
".$g_pcl_trace_entries[$i]['name']."(".$g_pcl_trace_entries[$i]['param'].")".$g_pcl_trace_entries[$i]['name']."()=".$g_pcl_trace_entries[$i]['param']."
"; + echo "".$g_pcl_trace_entries[$i]['message'].""; + echo "
".$g_pcl_trace_entries[$i]['name']."(".$g_pcl_trace_entries[$i]['param'].")
".basename($g_pcl_trace_entries[$i]['file'])."".$g_pcl_trace_entries[$i]['line']."
"; + + // ----- Trace footer + echo "
"; + echo "
"; + echo "
 
"; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : TrDisplayNew() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceDisplayNew() + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Look for disabled trace + if (($g_pcl_trace_level <= 0) || ($g_pcl_trace_mode != "memory") || ($g_pcl_trace_suspend)) + return; + +?> + + + + + + + +
+
Trace
+
+
".basename($g_pcl_trace_entries[$i]['file'])."".$g_pcl_trace_entries[$i]['line']."
 
+ + +
+

+ + +

+
+ + + + + + + + + + + + + + +
+ + " + onclick="PclTraceToggleView(document.getElementById(''));"> + +
+ + + + + + + + + + + + + + +
.
+ + +
+ +".$p_entry['name']."(".$p_entry['param'].") : ".$p_entry['message']." [".$p_entry[file].", ".$p_entry[line]."]
"; + else if ($p_entry['type'] == 2) + echo "".$p_entry['name']."()=".$p_entry['param']." : ".$p_entry['message']." [".$p_entry[file].", ".$p_entry[line]."]
"; + else + echo $p_entry['message']." [".$p_entry['file'].", ".$p_entry['line']."]
"; + } + } + // -------------------------------------------------------------------------------- + +?> diff --git a/ehcp/net2ftp/includes/pclzip.lib.php b/ehcp/net2ftp/includes/pclzip.lib.php new file mode 100644 index 0000000..0eb9af5 --- /dev/null +++ b/ehcp/net2ftp/includes/pclzip.lib.php @@ -0,0 +1,5701 @@ +zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function create($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Invalid number / type of arguments"); + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + else { + } + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function add($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_ADD_COMMENT => 'optional', + PCLZIP_OPT_PREPEND_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exist and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + function listContent() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) + { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function extract() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Trace + + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, + $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + function extractByIndex($p_index) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + } + else { + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Trace + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); + $v_options_trick = array(); + $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, + array (PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function delete() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Call the delete fct + $v_list = array(); + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); + return(0); + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + function deleteByIndex($p_index) + { + + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + function properties() + { + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + return(0); + } + + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) + { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + function duplicate($p_archive) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) + { + + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); + } + + // ----- Look if the $p_archive is a string (so a filename) + else if (is_string($p_archive)) + { + + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } + else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + function merge($p_archive_to_add) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) + { + + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + } + + // ----- Look if the $p_archive_to_add is a string (so a filename) + else if (is_string($p_archive_to_add)) + { + + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); + + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorCode() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorCode()); + } + else { + return($this->error_code); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorName($p_with_code=false) + { + $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', + PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', + PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', + PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', + PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', + PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', + PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', + PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', + PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', + PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', + PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', + PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', + PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', + PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', + PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', + PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', + PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', + PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' + ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' + ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' + ); + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } + else { + $v_value = 'NoName'; + } + + if ($p_with_code) { + return($v_value.' ('.$this->error_code.')'); + } + else { + return($v_value); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorInfo($p_full=false) + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorString()); + } + else { + if ($p_full) { + return($this->errorName(true)." : ".$this->error_string); + } + else { + return($this->error_string." [code ".$this->error_code."]"); + } + } + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + function privCheckFormat($p_level=0) + { + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) + { + $v_result=1; + + // ----- Read the options + $i=0; + while ($i<$p_size) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH : + case PCLZIP_OPT_REMOVE_PATH : + case PCLZIP_OPT_ADD_PATH : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_THRESHOLD : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + // ----- Check the value + $v_value = $p_options_list[$i+1]; + if ((!is_integer($v_value)) || ($v_value<0)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Get the value (and convert it in bytes) + $v_result_list[$p_options_list[$i]] = $v_value*1048576; + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_ON : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_TEMP_FILE_OFF : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); + return PclZip::errorCode(); + } + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if ( is_string($p_options_list[$i+1]) + && ($p_options_list[$i+1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + } + else { + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG : + // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG + // to PCLZIP_OPT_BY_PREG + $p_options_list[$i] = PCLZIP_OPT_BY_PREG; + case PCLZIP_OPT_BY_PREG : + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT : + case PCLZIP_OPT_ADD_COMMENT : + case PCLZIP_OPT_PREPEND_COMMENT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i+1])) { + + // ----- Remove spaces + $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i+1]); + } + else if (is_integer($p_options_list[$i+1])) { + $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_work_list = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag=false; + $v_sort_value=0; + for ($j=0; $j= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT : + case PCLZIP_CB_POST_EXTRACT : + case PCLZIP_CB_PRE_ADD : + case PCLZIP_CB_POST_ADD : + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i+1]; + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + .$p_options_list[$i]."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + + // ----- Return + return PclZip::errorCode(); + } + } + } + } + + // ----- Look for default values + if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOptionDefaultThreshold() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privOptionDefaultThreshold(&$p_options) + { + $v_result=1; + + if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { + return $v_result; + } + + // ----- Get 'memory_limit' configuration value + $v_memory_limit = ini_get('memory_limit'); + $v_memory_limit = trim($v_memory_limit); + $last = strtolower(substr($v_memory_limit, -1)); + + if($last == 'g') + //$v_memory_limit = $v_memory_limit*1024*1024*1024; + $v_memory_limit = $v_memory_limit*1073741824; + if($last == 'm') + //$v_memory_limit = $v_memory_limit*1024*1024; + $v_memory_limit = $v_memory_limit*1048576; + if($last == 'k') + $v_memory_limit = $v_memory_limit*1024; + + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); + + + // ----- Sanity check : No threshold if value lower than 1M + if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { + unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) + { + $v_result=1; + + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + break; + + case PCLZIP_ATT_FILE_NEW_SHORT_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + // ----- Look for options that takes a string + case PCLZIP_ATT_FILE_COMMENT : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['comment'] = $v_value; + break; + + case PCLZIP_ATT_FILE_MTIME : + if (!is_integer($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['mtime'] = $v_value; + break; + + case PCLZIP_ATT_FILE_CONTENT : + $p_filedescr['content'] = $v_value; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '".$v_key."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // This method look for each item of the list to see if its a file, a folder + // or a string to be added as file. For any other type of files (link, other) + // just ignore the item. + // Then prepare the information that will be stored for that file. + // When its a folder, expand the folder with all the files that are in that + // folder (recursively). + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + $v_result=1; + + // ----- Create a result list + $v_result_list = array(); + + // ----- Look each entry + for ($i=0; $iprivCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[sizeof($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = array(); + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if (($v_descr['stored_filename'] != $v_descr['filename']) + && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { + if ($v_descr['stored_filename'] != '') { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; + } + else { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; + } + } + + $v_dirlist_nb++; + } + + @closedir($v_folder_handler); + } + else { + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + return $v_result; + } + + // ----- Concat the resulting list + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + } + else { + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) + { + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + + // ----- Return + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Create the Central Dir files header + for ($i=0, $v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privOpenFd($p_mode) + { + $v_result=1; + + // ----- Look if already open + if ($this->zip_fd != 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privCloseFd() + { + $v_result=1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- +// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Create the Central Dir files header + for ($i=0,$v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_header = array(); + + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_result_list); + + // ----- Loop on the files + for ($j=0; ($jprivAddFile($p_filedescr_list[$j], $v_header, + $p_options); + if ($v_result != 1) { + return $v_result; + } + + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for a stored different filename + /* TBC : Removed + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + } + else { + $v_stored_filename = $p_filedescr['stored_filename']; + } + */ + + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; +// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; + $p_header['stored_filename'] = $p_filedescr['stored_filename']; + $p_header['extra'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for regular file + if ($p_filedescr['type']=='file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for regular folder + else if ($p_filedescr['type']=='folder') { + $p_header['external'] = 0x00000010; + $p_header['mtime'] = filemtime($p_filename); + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for virtual file + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = strlen($p_filedescr['content']); + } + + + // ----- Look for filetime + if (isset($p_filedescr['mtime'])) { + $p_header['mtime'] = $p_filedescr['mtime']; + } + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['mtime'] = time(); + } + else { + $p_header['mtime'] = filemtime($p_filename); + } + + // ------ Look for file comment + if (isset($p_filedescr['comment'])) { + $p_header['comment_len'] = strlen($p_filedescr['comment']); + $p_header['comment'] = $p_filedescr['comment']; + } + else { + $p_header['comment_len'] = 0; + $p_header['comment'] = ''; + } + + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } + + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); + } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + + // ----- Look for a file + if ($p_filedescr['type'] == 'file') { + // ----- Look for using temporary file to zip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { + $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Use "in memory" zip algo + else { + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Close the file + @fclose($v_file); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + } + + } + + // ----- Look for a virtual file (a file from string) + else if ($p_filedescr['type'] == 'virtual_file') { + + $v_content = $p_filedescr['content']; + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + } + + // ----- Look for a directory + else if ($p_filedescr['type'] == 'folder') { + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } + + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) + { + return $v_result; + } + } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } + + // ----- Update the informations + // Nothing can be modified + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=PCLZIP_ERR_NO_ERROR; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Creates a compressed temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = filesize($p_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @gzputs($v_file_compressed, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file); + @gzclose($v_file_compressed); + + // ----- Check the minimum file size + if (filesize($v_gzip_temp_name) < 18) { + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); + return PclZip::errorCode(); + } + + // ----- Extract the compressed attributes + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the gzip file header + $v_binary_data = @fread($v_file_compressed, 10); + $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); + + // ----- Check some parameters + $v_data_header['os'] = bin2hex($v_data_header['os']); + + // ----- Read the gzip file footer + @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); + $v_binary_data = @fread($v_file_compressed, 8); + $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); + + // ----- Set the attributes + $p_header['compression'] = ord($v_data_header['cm']); + //$p_header['mtime'] = $v_data_header['mtime']; + $p_header['crc'] = $v_data_footer['crc']; + $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } + + // ----- Add the compressed data + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) + { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + fseek($v_file_compressed, 10); + $v_size = $p_header['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file_compressed, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Unlink the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCalculateStoredFilename(&$p_filedescr, &$p_options) + { + $v_result=1; + + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } + else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } + else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + else { + $p_remove_all_dir = 0; + } + + + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); + } + + // ----- Look for path and/or short name change + else { + + // ----- Look for short name change + // Its when we cahnge just the filename but not the path + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'].'/'; + } + $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; + } + else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } + + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + } + // ----- Look for partial path remove + else if ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + + if ( (substr($p_filename, 0, 2) == "./") + || (substr($p_remove_dir, 0, 2) == "./")) { + + if ( (substr($p_filename, 0, 2) == "./") + && (substr($p_remove_dir, 0, 2) != "./")) { + $p_remove_dir = "./".$p_remove_dir; + } + if ( (substr($p_filename, 0, 2) != "./") + && (substr($p_remove_dir, 0, 2) == "./")) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + + $v_compare = PclZipUtilPathInclusion($p_remove_dir, + $v_stored_filename); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + } + else { + $v_stored_filename = substr($v_stored_filename, + strlen($p_remove_dir)); + } + } + } + + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); + + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir."/".$v_stored_filename; + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteFileHeader(&$p_header) + { + $v_result=1; + + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, + $p_header['version_extracted'], $p_header['flag'], + $p_header['compression'], $v_mtime, $v_mdate, + $p_header['crc'], $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len']); + + // ----- Write the first 148 bytes of the header in the archive + fputs($this->zip_fd, $v_binary_data, 30); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralFileHeader(&$p_header) + { + $v_result=1; + + // TBC + //for(reset($p_header); $key = key($p_header); next($p_header)) { + //} + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + + // ----- Packed data + $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, + $p_header['version'], $p_header['version_extracted'], + $p_header['flag'], $p_header['compression'], + $v_mtime, $v_mdate, $p_header['crc'], + $p_header['compressed_size'], $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'], $p_header['comment_len'], + $p_header['disk'], $p_header['internal'], + $p_header['external'], $p_header['offset']); + + // ----- Write the 42 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) + { + fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) + { + $v_result=1; + + // ----- Packed data + $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, + $p_nb_entries, $p_size, + $p_offset, strlen($p_comment)); + + // ----- Write the 22 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 22); + + // ----- Write the variable fields + if (strlen($p_comment) != 0) + { + fputs($this->zip_fd, $p_comment, strlen($p_comment)); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privList(&$p_list) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of Central Dir + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + for ($i=0; $i<$v_central_dir['entries']; $i++) + { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // $p_info['crc'] = CRC of the file content. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privConvertHeader2FileInfo($p_header, &$p_info) + { + $v_result=1; + + // ----- Get the interesting attributes + $v_temp_path = PclZipUtilPathReduction($p_header['filename']); + $p_info['filename'] = $v_temp_path; + $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); + $p_info['stored_filename'] = $v_temp_path; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + $p_info['crc'] = $p_header['crc']; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path,1,2)!=":/"))) + $p_path = "./".$p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + $p_path = substr($p_path, 0, strlen($p_path)-1); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read next Central dir entry + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_extract = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_extract = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + + // ----- Look for no rule, which means extract all the archive + else { + $v_extract = true; + } + + // ----- Check compression method + if ( ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0))) { + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '".$v_header['stored_filename']."' is " + ."compressed by an unsupported compression " + ."method (".$v_header['compression'].") "); + + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + ." filename '".$v_header['stored_filename'] + ."'"); + + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + $v_result = $this->privConvertHeader2FileInfo($v_header, + $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) + { + + // ----- Go to the file position + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header['offset'])) + { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + $v_string = ''; + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, + $p_path, $p_remove_path, + $p_remove_all_path, + $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external']&0x00000010)==0x00000010) { + + $p_entry['status'] = "filtered"; + + return $v_result; + } + + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } + + // ----- Look for path to remove + else if ($p_remove_path != "") + { + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) + { + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + return $v_result; + } + + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) + { + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path."/".$p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + $v_inclusion + = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename']); + if ($v_inclusion == 0) { + + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '".$p_entry['filename']."' is " + ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) + { + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '".$p_entry['filename']."' is " + ."already used by an existing directory"); + + return PclZip::errorCode(); + } + } + // ----- Look if file is write protected + else if (!is_writeable($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "write_protected"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '".$p_entry['filename']."' exists " + ."and is write protected"); + + return PclZip::errorCode(); + } + } + + // ----- Look if the extracted file is older + else if (filemtime($p_entry['filename']) > $p_entry['mtime']) + { + // ----- Change the file status + if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { + } + else { + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '".$p_entry['filename']."' exists " + ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); + + return PclZip::errorCode(); + } + } + } + else { + } + } + + // ----- Check the directory availability and create it if necessary + else { + +// NET2FTP +// On Windows, $p_entry['filename'] starts with ./C:\dir\subdir instead of C:\dir\subdir +// This fix removes the first 2 characters +if (substr($p_entry['filename'], 0, 2) == "./") { $p_entry['filename'] = substr($p_entry['filename'], 2, strlen($p_entry['filename'])-2); } + + if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) + $v_dir_to_check = $p_entry['filename']; + else if (!strstr($p_entry['filename'], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) + { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + return $v_result; + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + + + } + else { + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); + return PclZip::errorCode(); + } + + + // ----- Look for using temporary file to unzip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { + $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Look for extract in memory + else { + + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === FALSE) { + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { +//NET2FTP +echo "p entry filename 2 is " . $p_entry['filename'] . "
\n"; + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + } + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileUsingTempFile(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Creates a temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + + // ----- Write gz file format header + $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); + @fwrite($v_dest_file, $v_binary_data, 10); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Write gz file format footer + $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); + @fwrite($v_dest_file, $v_binary_data, 8); + + // ----- Close the temporary file + @fclose($v_dest_file); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + $p_entry['status'] = "write_error"; + return $v_result; + } + + // ----- Open the temporary gz file + if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { + @fclose($v_dest_file); + $p_entry['status'] = "read_error"; + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($v_src_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + @fclose($v_dest_file); + @gzclose($v_src_file); + + // ----- Delete the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileInOutput(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + // ----- Trace + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } + else { + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) + { + $v_result=1; + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } + else { + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === FALSE) { + // TBC + } + } + + // ----- Trace + } + else { + // TBC : error : can not extract a folder in a string + } + + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Swap the content to header + $v_local_header['content'] = $p_string; + $p_string = ''; + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Swap back the content to header + $p_string = $v_local_header['content']; + unset($v_local_header['content']); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + + // ----- Get extra_fields + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } + else { + $p_header['extra'] = ''; + } + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + $p_header['compression'] = $v_data['compression']; + $p_header['size'] = $v_data['size']; + $p_header['compressed_size'] = $v_data['compressed_size']; + $p_header['crc'] = $v_data['crc']; + $p_header['flag'] = $v_data['flag']; + $p_header['filename_len'] = $v_data['filename_len']; + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadCentralFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else + $p_header['filename'] = ''; + + // ----- Get extra + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else + $p_header['extra'] = ''; + + // ----- Get comment + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else + $p_header['comment'] = ''; + + // ----- Extract properties + + // ----- Recuperate date in UNIX format + //if ($p_header['mdate'] && $p_header['mtime']) + // TBC : bug : this was ignoring time with 0/0/0 + if (1) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + } + + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + $v_result=1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + $p_local_header['size'] = $p_central_header['size']; + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + $p_local_header['crc'] = $p_central_header['crc']; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadEndCentralDir(&$p_central_dir) + { + $v_result=1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + @fseek($this->zip_fd, $v_size); + if (@ftell($this->zip_fd) != $v_size) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + @fseek($this->zip_fd, $v_size-22); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = @unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size-$v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) + { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + //$v_bytes = ($v_bytes << 8) | Ord($v_byte); + // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number + // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. + $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) + { + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + .' Some trailing bytes exists after the archive.'); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) { + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + } + else + $p_central_dir['comment'] = ''; + + $p_central_dir['entries'] = $v_data['entries']; + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + $p_central_dir['offset'] = $v_data['offset']; + $p_central_dir['size'] = $v_data['size']; + $p_central_dir['disk'] = $v_data['disk']; + $p_central_dir['disk_start'] = $v_data['disk_start']; + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + //} + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDeleteByRule(&$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + $v_header_list = array(); + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read the file header + $v_header_list[$v_nb_extracted] = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + + return $v_result; + } + + + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; + + // ----- Look for the specific extract rules + $v_found = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ + && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + } + // ----- Look for a filename + elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_found = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_found = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + else { + $v_found = true; + } + + // ----- Look for deletion + if ($v_found) + { + unset($v_header_list[$v_nb_extracted]); + } + else + { + $v_nb_extracted++; + } + } + + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); + + // ----- Open the temporary zip file in write mode + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Look which file need to be kept + for ($i=0; $izip_fd); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_local_header = array(); + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ($this->privCheckFileHeaders($v_local_header, + $v_header_list[$i]) != 1) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); + + // ----- Re-Create the Central Dir files header + for ($i=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Destroy the temporary archive + unset($v_temp_zip); + } + + // ----- Remove every files : reset the file + else if ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + + if (($v_result = $this->privOpenFd('wb')) != 1) { + return $v_result; + } + + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { + return $v_result; + } + + $this->privCloseFd(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function privDirCheck($p_dir, $p_is_dir=false) + { + $v_result = 1; + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1)=='/')) + { + $p_dir = substr($p_dir, 0, strlen($p_dir)-1); + } + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) + { + return $v_result; + } + } + } + + // ----- Create the directory + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privMerge(&$p_archive_to_add) + { + $v_result=1; + + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) + { + + // ----- Nothing to merge, so merge is a success + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Look if the archive exists + if (!is_file($this->zipname)) + { + + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Open the archive_to_add file + if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) + { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir_to_add = array(); + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + return $v_result; + } + + // ----- Go to beginning of File + @rewind($p_archive_to_add->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; + + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd)-$v_offset; + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; + + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDuplicate($p_archive_filename) + { + $v_result=1; + + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) + { + + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) + { + $this->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorLog($p_error_code=0, $p_error_string='') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } + else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } + else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDisableMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime(0); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privSwapBackMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + } + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilPathReduction($p_dir) + { + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i=sizeof($v_list)-1; $i>=0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") { + $v_skip++; + } + else if ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/".$v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + $v_skip = 0; + } + } + // ----- Last '/' i.e. indicates a directory + else if ($i == (sizeof($v_list)-1)) { + $v_result = $v_list[$i]; + } + // ----- Double '/' inside the path + else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } + else { + // ----- Look for item to skip + if ($v_skip > 0) { + $v_skip--; + } + else { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../'.$v_result; + $v_skip--; + } + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- + function PclZipUtilPathInclusion($p_dir, $p_path) + { + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( ($p_dir == '.') + || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + } + if ( ($p_path == '.') + || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = sizeof($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } + else if ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilCopyBlock() + // Description : + // Parameters : + // $p_mode : read/write compression mode + // 0 : src & dest normal + // 1 : src gzip, dest normal + // 2 : src normal, dest gzip + // 3 : src & dest gzip + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) + { + $v_result = 1; + + if ($p_mode==0) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==1) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==2) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==3) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilRename() + // Description : + // This function tries to do a simple rename() function. If it fails, it + // tries to copy the $p_src file in a new $p_dest file and then unlink the + // first one. + // Parameters : + // $p_src : Old filename + // $p_dest : New filename + // Return Values : + // 1 on success, 0 on failure. + // -------------------------------------------------------------------------------- + function PclZipUtilRename($p_src, $p_dest) + { + $v_result = 1; + + // ----- Try to rename the files + if (!@rename($p_src, $p_dest)) { + + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + $v_result = 0; + } + else if (!@unlink($p_src)) { + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- + function PclZipUtilOptionText($p_option) + { + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if (( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option)) { + return $v_key; + } + } + + $v_result = 'Unknown'; + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- + function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) + { + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position+1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; + } + // -------------------------------------------------------------------------------- + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/registerglobals.inc.php b/ehcp/net2ftp/includes/registerglobals.inc.php new file mode 100644 index 0000000..2e2b6d3 --- /dev/null +++ b/ehcp/net2ftp/includes/registerglobals.inc.php @@ -0,0 +1,1226 @@ + \", ' --> \' + // Has only to be done when getting info from get post cookie + if (get_magic_quotes_gpc() == 1) { + + if (is_array($x)) { + while (list($key,$value) = each($x)) { + if ($value) { remove_magic_quotes($x[$key],$key); } + } + } + else { + $quote = "'"; + $doublequote = "\""; + $backslash = "\\"; + + $x = str_replace("$backslash$quote", $quote, $x); + $x = str_replace("$backslash$doublequote", $doublequote, $x); + $x = str_replace("$backslash$backslash", $backslash, $x); + } + + } // end if get_magic_quotes_gpc + + return $x; + +} // end function remove_magic_quotes + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateFtpserver($ftpserver) { + +// -------------- +// Input: " ftp://something.domainname.com:123/directory/file " +// Output: "something.domainname.com" +// -------------- + +// Remove invisible characters in the beginning and at the end + $ftpserver = trim($ftpserver); + +// Remove possible "ftp://" + if (substr($ftpserver, 0, 6) == "ftp://") { + $ftpserver = substr($ftpserver, 6); + } + +// Remove a possible port nr ":123" + if (preg_match("/(.*)[:]{1}[0-9]+/", $ftpserver, $regs) == true) { + $ftpserver = $regs[1]; + } + +// Remove a possible trailing / or \ +// Remove a possible directory and file "/directory/file" + if (preg_match("/[\\/\\\\]*(.*)[\\/\\\\]{1,}.*/", $ftpserver, $regs) == true) { + // Any characters like / or \ + // Anything + // Followed by at least one / or \ + // Followed by any characters + $ftpserver = $regs[1]; + } + +// FTP server may only contain specific characters + $ftpserver = preg_replace("/[^A-Za-z0-9._-]/", "", $ftpserver); + + return $ftpserver; + +} // end validateFTPserver + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateFtpserverport($ftpserverport) { + +// -------------- +// This function validates the FTP server port +// -------------- + +// Remove invisible characters in the beginning and at the end + $ftpserverport = trim($ftpserverport); + +// FTP server port must be numeric and > 0 and < 65536, else set it to 21 + if (is_numeric($ftpserverport) != true || $ftpserverport < 0 || $ftpserverport > 65536) { + $ftpserverport = 21; + } + + return $ftpserverport; + +} // end validateFtpserverport + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateUsername($username) { + +// -------------- +// This function validates the username +// -------------- + +// Remove invisible characters in the beginning and at the end + $username = trim($username); + +// Remove XSS code +// $username = RemoveXSS($username); + + return $username; + +} // end validateUsername + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validatePasswordEncrypted($password_encrypted) { + +// -------------- +// This function validates the encrypted password +// -------------- + +// Remove invisible characters in the beginning and at the end + $password_encrypted = trim($password_encrypted); + +// Encrypted password may only contain specific characters + $password_encrypted = preg_replace("/[^A-Fa-f0-9]/", "", $password_encrypted); + + return $password_encrypted; + +} // end validatePasswordEncrypted + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validatePassword($password) { + +// -------------- +// This function validates the plain password +// -------------- + +// Remove invisible characters in the beginning and at the end + $password = trim($password); + +// Remove XSS code +// $password = RemoveXSS($password); + + return $password; + +} // end validatePassword + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateLanguage($language) { + +// -------------- +// This function validates the language +// -------------- + + global $net2ftp_settings; + $languageArray = getLanguageArray(); + if (isset($languageArray[$language]) == true) { + return $language; + } + elseif (isset($_COOKIE["net2ftpcookie_language"]) == true && isset($languageArray[$_COOKIE["net2ftpcookie_language"]]) == true) { + return $_COOKIE["net2ftpcookie_language"]; + } + elseif (isset($languageArray[$net2ftp_settings["default_language"]]) == true){ + return $net2ftp_settings["default_language"]; + } + else { + return "en"; + } + +} // end validateLanguage + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateSkin($skin) { + +// -------------- +// This function validates the skin +// -------------- + + global $net2ftp_settings; + $skinArray = getSkinArray(); + if (isset($skinArray[$skin]) == true) { + return $skin; + } + elseif (isset($_COOKIE["net2ftpcookie_skin"]) == true && isset($skinArray[$_COOKIE["net2ftpcookie_skin"]]) == true) { + return $_COOKIE["net2ftpcookie_skin"]; + } + else { + if (defined("_VALID_MOS") == true) { return "mambo"; } + elseif (defined("CACHE_PERMANENT") == true) { return "drupal"; } + elseif (defined("XOOPS_ROOT_PATH") == true) { return "xoops"; } + elseif (getBrowser("platform") == "iPhone") { return "iphone"; } + elseif (getBrowser("platform") == "Mobile") { return "mobile"; } + elseif (isset($skinArray[$net2ftp_settings["default_skin"]]) == true) { return $net2ftp_settings["default_skin"]; } + else { return "shinra"; } + } + +} // end validateSkin + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateFtpmode($ftpmode) { + +// -------------- +// This function validates the FTP mode +// -------------- + + if ($ftpmode == "ascii" || $ftpmode == "binary" || $ftpmode == "automatic") { + return $ftpmode; + } + elseif (isset($_COOKIE["net2ftpcookie_ftpmode"]) == true && ($_COOKIE["net2ftpcookie_ftpmode"] == "ascii" || $_COOKIE["net2ftpcookie_ftpmode"] == "binary" || $_COOKIE["net2ftpcookie_ftpmode"] == "automatic")) { + return $_COOKIE["net2ftpcookie_ftpmode"]; + } + else { +// Before PHP version 4.3.11, bug 27633 can cause problems in ASCII mode ==> use BINARY mode +// As from PHP version 4.3.11, bug 27633 is fixed ==> use Automatic mode + if (version_compare(phpversion(), "4.3.11", "<")) { return "binary"; } + else { return "automatic"; } + } + +} // end validateFtpmode + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validatePassivemode($passivemode) { + +// -------------- +// This function validates the passive mode +// -------------- + + if ($passivemode != "yes") { + $passivemode = "no"; + } + return $passivemode; + +} // end validatePassivemode + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateProtocol($protocol) { + +// -------------- +// This function validates the protocol +// -------------- + + if ($protocol == "FTP" || $protocol == "FTP-SSL" || $protocol == "FTP-SSH") { + return $protocol; + } + else { + return "FTP"; + } + +} // end validateProtocol + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateViewmode($viewmode) { + +// -------------- +// This function validates the view mode +// -------------- + + if ($viewmode != "icons") { + $viewmode = "list"; + } + return $viewmode; + +} // end validateViewmode + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateSort($sort) { + +// -------------- +// This function validates the sorting criteria +// -------------- + + if ( $sort != "" && + $sort != "dirfilename" && + $sort != "type" && + $sort != "size" && + $sort != "owner" && + $sort != "group" && + $sort != "permissions" && + $sort != "mtime") { + $sort = "dirfilename"; + } + return $sort; + +} // end validateSort + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateSortorder($sortorder) { + +// -------------- +// This function validates the sort order +// -------------- + + if ( $sortorder != "" && + $sortorder != "descending") { + $sortorder = "ascending"; + } + return $sortorder; + +} // end validateSortorder + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateState($state) { + +// -------------- +// This function validates the state variable +// -------------- + + $statelist[] = "admin"; + $statelist[] = "admin_createtables"; + $statelist[] = "admin_emptylogs"; + $statelist[] = "admin_viewlogs"; + $statelist[] = "advanced"; + $statelist[] = "advanced_ftpserver"; + $statelist[] = "advanced_parsing"; + $statelist[] = "advanced_webserver"; + $statelist[] = "bookmark"; + $statelist[] = "browse"; + $statelist[] = "calculatesize"; + $statelist[] = "chmod"; + $statelist[] = "clearcookies"; + $statelist[] = "copymovedelete"; + $statelist[] = "downloadfile"; + $statelist[] = "downloadzip"; + $statelist[] = "edit"; + $statelist[] = "findstring"; + $statelist[] = "followsymlink"; + $statelist[] = "getcookies"; + $statelist[] = "install"; + $statelist[] = "jupload"; + $statelist[] = "login"; + $statelist[] = "login_small"; + $statelist[] = "logout"; + $statelist[] = "newdir"; + $statelist[] = "raw"; + $statelist[] = "rename"; + $statelist[] = "unzip"; + $statelist[] = "upload"; + $statelist[] = "view"; + $statelist[] = "zip"; + + if (in_array($state, $statelist) == false) { + $state = "login"; + } + + return $state; + +} // end validateState + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateState2($state2) { + +// -------------- +// This function validates the state2 variable +// -------------- + + if ($state2 != "") { + +// State2 may only contain specific characters + $state2 = preg_replace("/[^A-Za-z0-9_-]/", "", $state2); + } + + return $state2; + +} // end validateState2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateEntry($entry) { + +// -------------- +// This function validates the entry +// Remove the following characters \/:*?"<>| +// -------------- + +// Remove XSS code +// $entry = RemoveXSS($entry); + +// Remove \ / : * ? < > | +// Do not remove / or > otherwise the module "followsymlink" does not work +// $entry = preg_replace("/[\\\\\\/\\:\\*\\?\\<\\>\\|]/", "", $entry); + + return $entry; + +} // end validateEntry + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateScreen($screen) { + +// -------------- +// This function validates the screen variable +// -------------- + + if ($screen != 1 && $screen != 2 && $screen != 3) { + $screen = 1; + } + return $screen; + +} // end validateScreen + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateDirectory($directory) { + +// -------------- +// Input: "/dir1/dir2/dir3/../../dir4/dir5" +// Output: "/dir1/dir4/dir5" +// Remove the following characters \/:*?"<>| +// -------------- + +// ------------------------------------------------------------------------- +// Nothing to do if the directory is the root directory +// ------------------------------------------------------------------------- + if ($directory == "") { return ""; } + elseif ($directory == "/") { return "/"; } + +// ------------------------------------------------------------------------- +// Remove XSS code +// ------------------------------------------------------------------------- +// $directory = RemoveXSS($directory); + +// ------------------------------------------------------------------------- +// Check if the directory contains ".." +// ------------------------------------------------------------------------- + if (strpos($directory, "..") === false) { + $directory = "/" . stripDirectory($directory); + } + else { + $directory = stripDirectory($directory); + +// Split down into parts +// directoryparts[0] contains the first part, directoryparts[1] the second,... + $directoryparts = explode("/", $directory); + +// Start from the end +// If you encounter N times a "..", do not take into account the next N parts which are not ".." +// Example: "/dir1/dir2/dir3/../../dir4/dir5" ----> "/dir1/dir4/dir5" + $doubledotcounter = 0; + $newdirectory = ""; + $sizeof_directoryparts = sizeof($directoryparts); + for ($i=$sizeof_directoryparts-1; $i>=0; $i=$i-1) { + if ($directoryparts[$i] == "..") { $doubledotcounter = $doubledotcounter + 1; } + else { + if ($doubledotcounter == 0) { $newdirectory = $directoryparts[$i] . "/" . $newdirectory; } // Add the new part in front + elseif ($doubledotcounter > 0) { $doubledotcounter = $doubledotcounter - 1; } // Don't add the part, and reduce the counter by 1 + } + } // end for + + $directory = "/" . stripDirectory($newdirectory); + + } // end if else + +// Remove : * ? " < > | +// $directory = preg_replace("/[\\:\\*\\?\\\"\\<\\>\\|]/", "", $directory); + +// Remove : * ? < > | + $directory = preg_replace("/[\\:\\*\\?\\<\\>\\|]/", "", $directory); + + return $directory; + +} // end validateDirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateGenericInput($input) { + +// -------------- +// Remove the following characters <> +// -------------- + +// Remove XSS code +// $input = RemoveXSS($input); + +// Remove < > + $input = preg_replace("/[\\<\\>]/", "", $input); + + return $input; + +} // end validateGenericInput + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateTextareaType($textareaType) { + +// -------------- +// Remove the following characters <> +// -------------- + + if ( $textareaType != "plain" && + $textareaType != "ckeditor" && + $textareaType != "tinymce" && + $textareaType != "ace") { + $textareaType = "plain"; + } + return $textareaType; + +} // end validateTextareaType + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function RemoveXSS($val) { + +// -------------- +// This function removes malicious cross-site scripting (XSS) code from user input +// From http://quickwired.com/smallprojects/php_xss_filter_function.php +// -------------- + + // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed + // this prevents some character re-spacing such as + // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs + $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val); + + // straight replacements, the user should never need these since they're normal characters + // this prevents like + $search = 'abcdefghijklmnopqrstuvwxyz'; + $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $search .= '1234567890!@#$%^&*()'; + $search .= '~`";:?+/={}[]-_|\'\\'; + + for ($i = 0; $i < strlen($search); $i++) { + // ;? matches the ;, which is optional + // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars + + // @ @ search for the hex values + $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ; + // @ @ 0{0,7} matches '0' zero to seven times + $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; + } + + // now the only remaining whitespace attacks are \t, \n, and \r + $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); + $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); + $ra = array_merge($ra1, $ra2); + + $found = true; // keep replacing as long as the previous round replaced something + while ($found == true) { + $val_before = $val; + for ($i = 0; $i < sizeof($ra); $i++) { + $pattern = '/'; + for ($j = 0; $j < strlen($ra[$i]); $j++) { + if ($j > 0) { + $pattern .= '('; + $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?'; + $pattern .= '|(�{0,8}([9][10][13]);?)?'; + $pattern .= ')?'; + } + $pattern .= $ra[$i][$j]; + } // end for + $pattern .= '/i'; + $replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // add in <> to nerf the tag + $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags + if ($val_before == $val) { + // no replacements were made, so exit the loop + $found = false; + } // end if + } // end for + } // end while + + return $val; + +} // end RemoveXSS + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/includes/zip.lib.php b/ehcp/net2ftp/includes/zip.lib.php new file mode 100644 index 0000000..7a0094f --- /dev/null +++ b/ehcp/net2ftp/includes/zip.lib.php @@ -0,0 +1,208 @@ + file + * + * @var boolean $doWrite + */ + var $doWrite = false; + + /** + * Array to store compressed data + * + * @var array $datasec + */ + var $datasec = array(); + + /** + * Central directory + * + * @var array $ctrl_dir + */ + var $ctrl_dir = array(); + + /** + * End of central directory record + * + * @var string $eof_ctrl_dir + */ + var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; + + /** + * Last offset position + * + * @var integer $old_offset + */ + var $old_offset = 0; + + + /** + * Sets member variable this -> doWrite to true + * - Should be called immediately after class instantiantion + * - If set to true, then ZIP archive are echo'ed to STDOUT as each + * file is added via this -> addfile(), and central directories are + * echoed to STDOUT on final call to this -> file(). Also, + * this -> file() returns an empty string so it is safe to issue a + * "echo $zipfile;" command + * + * @access public + * + * @return nothing + */ + function setDoWrite() + { + $this -> doWrite = true; + } // end of the 'setDoWrite()' method + + /** + * Converts an Unix timestamp to a four byte DOS date and time format (date + * in high two bytes, time in low two bytes allowing magnitude comparison). + * + * @param integer $unixtime the current Unix timestamp + * + * @return integer the current date in a four byte DOS format + * + * @access private + */ + function unix2DosTime($unixtime = 0) + { + $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); + + if ($timearray['year'] < 1980) { + $timearray['year'] = 1980; + $timearray['mon'] = 1; + $timearray['mday'] = 1; + $timearray['hours'] = 0; + $timearray['minutes'] = 0; + $timearray['seconds'] = 0; + } // end if + + return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | + ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); + } // end of the 'unix2DosTime()' method + + + /** + * Adds "file" to archive + * + * @param string $data file contents + * @param string $name name of the file in the archive (may contains the path) + * @param integer $time the current timestamp + * + * @access public + * + * @return nothing + */ + function addFile($data, $name, $time = 0) + { + $name = str_replace('\\', '/', $name); + + $dtime = substr("00000000" . dechex($this->unix2DosTime($time)), -8); + $hexdtime = '\x' . $dtime[6] . $dtime[7] + . '\x' . $dtime[4] . $dtime[5] + . '\x' . $dtime[2] . $dtime[3] + . '\x' . $dtime[0] . $dtime[1]; + eval('$hexdtime = "' . $hexdtime . '";'); + + $fr = "\x50\x4b\x03\x04"; + $fr .= "\x14\x00"; // ver needed to extract + $fr .= "\x00\x00"; // gen purpose bit flag + $fr .= "\x08\x00"; // compression method + $fr .= $hexdtime; // last mod time and date + + // "local file header" segment + $unc_len = strlen($data); + $crc = crc32($data); + $zdata = gzcompress($data); + $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug + $c_len = strlen($zdata); + $fr .= pack('V', $crc); // crc32 + $fr .= pack('V', $c_len); // compressed filesize + $fr .= pack('V', $unc_len); // uncompressed filesize + $fr .= pack('v', strlen($name)); // length of filename + $fr .= pack('v', 0); // extra field length + $fr .= $name; + + // "file data" segment + $fr .= $zdata; + + // echo this entry on the fly, ... + if ( $this -> doWrite) { + echo $fr; + } else { // ... OR add this entry to array + $this -> datasec[] = $fr; + } + + // now add to central directory record + $cdrec = "\x50\x4b\x01\x02"; + $cdrec .= "\x00\x00"; // version made by + $cdrec .= "\x14\x00"; // version needed to extract + $cdrec .= "\x00\x00"; // gen purpose bit flag + $cdrec .= "\x08\x00"; // compression method + $cdrec .= $hexdtime; // last mod time & date + $cdrec .= pack('V', $crc); // crc32 + $cdrec .= pack('V', $c_len); // compressed filesize + $cdrec .= pack('V', $unc_len); // uncompressed filesize + $cdrec .= pack('v', strlen($name)); // length of filename + $cdrec .= pack('v', 0); // extra field length + $cdrec .= pack('v', 0); // file comment length + $cdrec .= pack('v', 0); // disk number start + $cdrec .= pack('v', 0); // internal file attributes + $cdrec .= pack('V', 32); // external file attributes - 'archive' bit set + + $cdrec .= pack('V', $this -> old_offset); // relative offset of local header + $this -> old_offset += strlen($fr); + + $cdrec .= $name; + + // optional extra field, file comment goes here + // save to central directory + $this -> ctrl_dir[] = $cdrec; + } // end of the 'addFile()' method + + + /** + * Echo central dir if ->doWrite==true, else build string to return + * + * @return string if ->doWrite {empty string} else the ZIP file contents + * + * @access public + */ + function file() + { + $ctrldir = implode('', $this -> ctrl_dir); + $header = $ctrldir . + $this -> eof_ctrl_dir . + pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" + pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall + pack('V', strlen($ctrldir)) . // size of central dir + pack('V', $this -> old_offset) . // offset to start of central dir + "\x00\x00"; // .zip file comment length + + if ( $this -> doWrite ) { // Send central directory & end ctrl dir to STDOUT + echo $header; + return ""; // Return empty string + } else { // Return entire ZIP archive as string + $data = implode('', $this -> datasec); + return $data . $header; + } + } // end of the 'file()' method + +} // end of the 'zipfile' class +?> diff --git a/ehcp/net2ftp/index.php b/ehcp/net2ftp/index.php new file mode 100644 index 0000000..4f8a993 --- /dev/null +++ b/ehcp/net2ftp/index.php @@ -0,0 +1,81 @@ + + +" dir=""> + +" /> + + + + + +net2ftp - a web based FTP client + + + +"> + + + + + + + diff --git a/ehcp/net2ftp/languages/ar-utf.inc.php b/ehcp/net2ftp/languages/ar-utf.inc.php new file mode 100644 index 0000000..560e9ee --- /dev/null +++ b/ehcp/net2ftp/languages/ar-utf.inc.php @@ -0,0 +1,1314 @@ +%1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."] = "الدليل %1\$s غير موجود أو لا يمكن تحديده , لذا لا يمكن عرض الدليل %2\$s بدلاً منه ."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "الدليل الجرز root %1\$s غير موجود أو لا يمكن تحديده ."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "الدليل %1\$s لا يمكن تحديده - ربما لاتمتلك تخويل كاف لعرض هذا الدليل , أو ربما يكون غير موجود ."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "الإدخالات التي تحتوي على كلمات مفتاحية محظورة لا يمكن إدارتها بواسطة net2ftp . ذلك لحماية Paypal أو Ebay من الغش و التلاعب ."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "الملفات الكبيرة جداً لا يمكن تحميلها ، رفعها ، نسخها ، نقلها ، البحث فيها ، ضغطها ، فك ضغطها ، عرضها أو تحريرها ؛ فقط يمكن تغيير الاسم ، التصاريح أو الحذف ."; +$net2ftp_messages["Execute %1\$s in a new window"] = "تنفيذ %1\$s في نافذة جديدة"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "يرجى تحديد مجلد أو ملف واحد على الأقل !"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "سرفر FTP %1\$s غير موجود في قائمة سرفرات FTP المسموح بها ."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "السرفر FTP %1\$s موجود في قائمة سرفرات FTP المحظورة ."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "منفذ سرفر FTP %1\$s لا يمكن استخدامه ."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "عنوان IP الخاص بك (%1\$s) غير موجود في قائمة عناوين IP المسموح بها ."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "عنوان IP الخاص بك (%1\$s) موجود في قائمة عناوين IP المحظورة ."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "الجدول net2ftp_users يحتوي على صفوف مكررة ."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "لم تقم بإدخال اسم المستخدم للإدارة أو كلمة المرور !"; +$net2ftp_messages["Wrong username or password. Please try again."] = "خطأ في اسم المستخدم أو كلمة المرور . يرجى المحاولة من جديد !"; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "تعذر تحديد عنوان IP الخاص بك ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "الجدول net2ftp_log_consumption_ipaddress يحتوي على صفوف مكررة ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "الجدول net2ftp_log_consumption_ftpserver يحتوي على صفوف مكررة ."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "المتغير consumption_ipaddress_datatransfer ليس عددي ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "لا يمكن تحديث الجدول net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "الجدول net2ftp_log_consumption_ipaddress يحتوي على عناصر مكررة ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "لا يمكن تحديث الجدول net2ftp_log_consumption_ftpserver ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "الجدول net2ftp_log_consumption_ftpserver يحتوي على عناصر مكررة ."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "لا يمكن تحديث الجدول net2ftp_log_access ."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "يتضمن الجدول net2ftp_log_access مدخلات متكررة ."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "تعذر الاتصال بقاعدة البيانات MySQL . يرجى التأكد من صحة معلوماتك المدخلة في الملف settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "تعذر تحديد قاعدة البيانات MySQL . يرجى التأكد من صحة معلوماتك المدخلة في الملف settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "حدث خطأ"; +$net2ftp_messages["Go back"] = "العودة للخلف"; +$net2ftp_messages["Go to the login page"] = "الذهاب إلى صفحة الدخول"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "تعذر الاتصال بسرفر FTP %1\$s على المنفذ %2\$s.

هل أنت متأكد من صحة عنوان سرفر FTP ؟ هذا يحصل لأسباب مختلفة من سرفر HTTP (ويب) . يرجى الاتصال بمخدم ISP أو مدير النظام للمساعدة .
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "تعذر الدخول إلى سرفر FTP %1\$s بواسطة اسم المستخدم %2\$s.

هل انت متأكد من صحة اسم المستخدم و كلمة المرور ؟ يرجى الاتصال بمخدم ISP أو مدير النظام للمساعدة .
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "تعذر التبديل إلى النمط الخامل passive على سرفر FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "تعذر الاتصال بسرفر FTP الثاني (الهدف) %1\$s على المنفذ %2\$s.

هل انت متأكد من صحة عنوان سرفر FTP الثاني (الهدف) ؟ هذا يحدث لأسباب مختلفة من سرفر HTTP (ويب) . يرجى الاتصال بمخدم ISP أو مدير النظام للمساعدة .
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "تعذر الدخول إلى سرفر FTP الثاني (الهدف) %1\$s بواسطة اسم المستخدم %2\$s.

هل أنت متأكد من صحة اسم المستخدم و كلمة المرور ؟ يرجى الاتصال بمخدم ISP أو مدير النظام للمساعدة .
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "تعذر التبديل إلى النمط الخامل passive على سرفر FTP الثاني (الهدف) %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "تعذر إعادة تسمية المجلد أو الملف %1\$s إلى %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "تعذر تنفيذ أمر الموقع %1\$s. لاحظ ان أمر التصريح CHMOD متاح فقط على سرفرات Unix FTP , و غير متاح على سرفرات Windows FTP .."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "تم تغيير تصريح المجلد %1\$s إلى %2\$s بنجاح ! "; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "معالجة العناصر في المجلد %1\$s »"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "تم تغيير تصريح الملف %1\$s إلى %2\$s بنجاح !"; +$net2ftp_messages["All the selected directories and files have been processed."] = "تمت معالجة جميع الأدلة و الملفات المحددة ."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "تعذر حذف المجلد %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "تعذر حذف الملف %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "تعذر إنشاء المجلد %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "تعذر إنشاء ملف التخزين المؤقت"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "تعذر جلب الملف %1\$s من سرفر FTP و حفظه في ملف التخزين المؤقت %2\$s.
تفحص صلاحيات المجلد %3\$s .
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "تعذر فتح ملف التخزين المؤقت . تفحص صلاحيات المجلد %1\$s ."; +$net2ftp_messages["Unable to read the temporary file"] = "تعذر قراءة ملف التخزين المؤقت"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "تعذر إغلاق ملف التخزين المؤقت"; +$net2ftp_messages["Unable to delete the temporary file"] = "تعذر حذف ملف التخزين المؤقت"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "تعذر إنشاء ملف التخزين المؤقت . تفحص صلاحيات المجلد %1\$s ."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "تعذر فتح ملف التخزين المؤقت . تفحص صلاحيات المجلد %1\$s ."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "تعذر الكتابة إلى ملف التخزين المؤقت %1\$s.
تفحص صلاحيات المجلد %2\$s ."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "تعذر إغلاق ملف التخزين المؤقت"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "تعذر وضع الملف %1\$s على سرفر FTP .
ربما لا تمتلك صلاحيات الكتابة إلى هذا الدليل !"; +$net2ftp_messages["Unable to delete the temporary file"] = "تعذر حذف ملف التخزين المؤقت"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processing directory %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "الدليل الهدف %1\$s نفس المصدر أو دليل فرعي من الدليل المصدر %2\$s, لذا سيتم تخطي هذا الدليل ."; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "الدليل %1\$s يحتوي على كلمات مفتاحية محظورة ، لذا سيتم تخطي هذا الدليل"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "الدليل %1\$s يحتوي على كلمات مفتاحية محظورة ، تم إلغاء النقل"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "تعذر إنشاء الدليل الفرعي %1\$s. ربما يكون موجود من . متابعة عملية النسخ/النقل ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "إنشاء الدليل الفرعي الهدف %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "الدليل %1\$s لا يمكن تحديده . لذا سيتم تخطي هذا الدليل ."; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "تعذر حذف الدليل الفرعي %1\$s - ربما يكون فارغ"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "تم حذف الدليل الفرعي %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "تم حذف الدليل الفرعي %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "تمت معالجة الدليل %1\$s"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "الدليل الهدف للملف %1\$s يبدو أنه كالمصدر , لذا سيتم تخطي هذا الملف"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "الملف %1\$s يحتوي على كلمات مفتاحية محظورة ، لذا سيتم تخطي هذا الملف"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "الملف %1\$s يحتوي على كلمات مفتاحية محظورة ، تم إلغاء النقل"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "الملف %1\$s كبير جداً كي ينسخ ، لذا سيتم تجاوزه"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "الملف %1\$s كبير جداً كي ينقل ، تم إلغاء النقل"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "تعذر نسخ الملف %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "تم نسخ الملف %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "تعذر نقل الملف %1\$s, تم إلغاء العملية"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "تم نقل الملف %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "تعذر حذف الملف %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "تم حذف الملف %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "تمت معالجة جميع الأدلة و الملفات المحددة ."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "تعذر نسخ الملف البعيد %1\$s إلى الملف المحلي باستخدام نمط FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "تعذر حذف الملف %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "كبير جداً كي يتم ترحيله"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "الحصة اليومية المسموح بها استنفذت » الملف %1\$s لن يتم ترحيله"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "تعذر نسخ الملف المحلي إلى الملف البعيد %1\$s باستخدام نمط FTP %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "تعذر حذف الملف المحلي"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "تعذر حذف ملف التخزين المؤقت"; +$net2ftp_messages["Unable to send the file to the browser"] = "تعذر إرسال الملف إلى المستعرض"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "تعذر إنشاء ملف التخزين المؤقت"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "تم حفظ الملف المضغوط zip إلى سرفر FTP باسم %1\$s"; +$net2ftp_messages["Requested files"] = "الملفات المطلوبة"; + +$net2ftp_messages["Dear,"] = "السلام عليكم ,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "شخص ما طلب إرسال الملفات المرفقة إلى عنوان البريد الالكتروني (%1\$s) ."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "إن لم تكن تعرف شئ حول هذا , أو إن لم تكن معني بهذا الشخص , يرجى حذف الرسالة بدون فتح الملف المضغوط المرفق ."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "ملاحظة - إن لم تقم بفتح الملف المضغوط , فلن تلحق الملفات التي بداخله أي أذى بجهازك إن كنت تشك بها ."; +$net2ftp_messages["Information about the sender: "] = "معلومات حول المرسل » "; +$net2ftp_messages["IP address: "] = "عنوان IP » "; +$net2ftp_messages["Time of sending: "] = "وقت الإرسال » "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "أرسلت بواسطة برنامج net2ftp المركب على هذا الموقع » "; +$net2ftp_messages["Webmaster's email: "] = "بريد الإدارة » "; +$net2ftp_messages["Message of the sender: "] = "رسالة المرسل » "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp برنامج مجاني ، صادر تحت الترخيص GNU/GPL . للمزيد من المعلومات ، راجع http://www.net2ftp.com ."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "تم إرسال الملف المضغوط إلى %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "حجم الملف %1\$s كبير جداً . لن يتم رفع هذا الملف ."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "المف %1\$s يتضمن كلمات مفتاحية محظورة . لن يتم رفع هذا الملف ."; +$net2ftp_messages["Could not generate a temporary file."] = "تعذر إنشاء ملف التخزين المؤقت ."; +$net2ftp_messages["File %1\$s could not be moved"] = "تعذر نقل الملف %1\$s"; +$net2ftp_messages["File %1\$s is OK"] = "المف %1\$s نجاح !"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "تعذر نقل الملف المرفوع إلى مجلد temp .

يجب منح التصريح chmod 777 إلى المجلد /temp في دليل net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "لم تقم بتحديد أي ملف لرفعه !"; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "تعذر ترحيل الملف %1\$s إلى سرفر FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "تم ترحيل الملف %1\$s إلى سرفر FTP باستخدام نمط FTP %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "ترحيل الملفات إلى سرفر FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "معالجة الأرشيف رقم %1\$s » %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "تعذر معالجة الأرشيف %1\$s بسبب عدم دعم هذا النوع . فقط أنواع الأرشيف zip, tar, tgz و gz مدعومة حالياً ."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "تعذر استخراج الملفات و المجلدات من الأرشيف"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "تم إنشاء الدليل %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "تعذر إنشاء الدليل %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "تم نسخ %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "تعذر نسخ الملف %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "تعذر حذف الدليل المؤقت"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "تعذر حذف الملف المؤقت %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "تعذر تنفيذ امر الموقع %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "تم إيقاف المهمة"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "المهمة التي تريد إنجازها بواسطة net2ftp استغرقت وقت أطول من المسموح %1\$s ثانية , و لذلك تم إيقاف المهمة ."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "هذا الوقت المحدد لضمان عدالة استخدام السرفر للجميع ."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "جرب تجزئة مهمتك إلى مهمات أصغر » قلل من عدد الملفات المحددة , و احذف الملفات الأكبر ."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "إذا كنت تريد حقاً تمكين net2ftp من إنجاز المهام الكبيرة التي تستغرق وقت طويل , يمكنك التفكير في تركيب برنامج net2ftp على موقعك مباشرة ."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "لم تقدم أي نص لإرساله بواسطة البريد الالكتروني !"; +$net2ftp_messages["You did not supply a From address."] = "يرجى كتابة عنوان بريد المرسل !"; +$net2ftp_messages["You did not supply a To address."] = "يرجى كتابة عنوان بريد المتلقي !"; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "حدث خطأ تقني خلال محاولة الإرسال إلى %1\$s تعذر الإرسال ."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "تعذر تنفيذ استعلام SQL ."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "يرجى إدخال اسم المستخدم و كلمة المرور لسرفر FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "لم تقم بكتابة معلومات الدخول في نافذة البوب اب .
اضغط على \"الذهاب إلى صفحة الدخول\" بالأسفل ."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "الدخول إلى لوحة التحكم غير متاح , بسبب عدم تعيين كلمة مرور في الملف settings.inc.php . أدخل كلمة المرور في الملف , ثم أعد تحميل هذه الصفحة ."; +$net2ftp_messages["Please enter your Admin username and password"] = "يرجى إدخال اسم المستخدم و كلمة المرور الإدارية"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "لم تقم بكتابة معلومات الدخول في نافذة البوب اب .
اضغط على \"الذهاب إلى صفحة الدخول\" بالأسفل ."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "خطأ في اسم المستخدم أو كلمة المرور للوحة التحكم . اسم المستخدم و كلمة المرور يمكن تعيينها في الملف settings.inc.php ."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blue"; +$net2ftp_messages["Grey"] = "Grey"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Yellow"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "الدليل"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ملف ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "ورقة أنماط متتالية"; +$net2ftp_messages["HTML file"] = "ملف HTML"; +$net2ftp_messages["Java source file"] = "ملف مصدر Java"; +$net2ftp_messages["JavaScript file"] = "ملف JavaScript"; +$net2ftp_messages["PHP Source"] = "مصدر PHP"; +$net2ftp_messages["PHP script"] = "ملف PHP"; +$net2ftp_messages["Text file"] = "ملف نصي"; +$net2ftp_messages["Bitmap file"] = "صورة نقطية Bitmap"; +$net2ftp_messages["GIF file"] = "صورة GIF"; +$net2ftp_messages["JPEG file"] = "صورة JPEG"; +$net2ftp_messages["PNG file"] = "صورة PNG"; +$net2ftp_messages["TIF file"] = "صورة TIF"; +$net2ftp_messages["GIMP file"] = "ملف GIMP"; +$net2ftp_messages["Executable"] = "ملف تنفيذي"; +$net2ftp_messages["Shell script"] = "ملف Shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - مستند Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - جدول Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - عرض تقديمي PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - قاعدة بيانات Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - مخطط Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - ملف مشروع"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - مستند Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - قالب Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - جدول Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - قالب Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - مستند Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - قالب Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - عرض تقديمي Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - قالب Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - قالب عام Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - مستند Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - مستند StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - مستند عام StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - جدول StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - مستند StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - عرض تقديمي StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - ملف StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - مستند StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - مستند StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - ملف بريد StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = "مستند Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "أرشيف ARC"; +$net2ftp_messages["ARJ archive"] = "أرشيف ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "أرشيف GZ"; +$net2ftp_messages["TAR archive"] = "أرشيف TAR"; +$net2ftp_messages["Zip archive"] = "أرشيف Zip"; +$net2ftp_messages["MOV movie file"] = "ملف فيديو MOV"; +$net2ftp_messages["MPEG movie file"] = "ملف فيديو MPEG movie file"; +$net2ftp_messages["Real movie file"] = "ملف فيديو Real"; +$net2ftp_messages["Quicktime movie file"] = "ملف فيديو Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "ملف فلاش Shockwave"; +$net2ftp_messages["Shockwave file"] = "ملف Shockwave"; +$net2ftp_messages["WAV sound file"] = "ملف موجة صوتية"; +$net2ftp_messages["Font file"] = "ملف خط"; +$net2ftp_messages["%1\$s File"] = "ملف %1\$s"; +$net2ftp_messages["File"] = "ملف"; + +// getAction() +$net2ftp_messages["Back"] = "خطوة للخلف"; +$net2ftp_messages["Submit"] = "اعتمد البيانات"; +$net2ftp_messages["Refresh"] = "تحديث الصفحة"; +$net2ftp_messages["Details"] = "التفاصيل"; +$net2ftp_messages["Icons"] = "الرموز"; +$net2ftp_messages["List"] = "القائمة"; +$net2ftp_messages["Logout"] = "تسجيل الخروج"; +$net2ftp_messages["Help"] = "مساعدة"; +$net2ftp_messages["Bookmark"] = "أضف إلى المفضلة"; +$net2ftp_messages["Save"] = "حفظ"; +$net2ftp_messages["Default"] = "الافتراضي"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "دليل المساعدة"; +$net2ftp_messages["Forums"] = "المنتديات"; +$net2ftp_messages["License"] = "الترخيص"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "سيتم نقلك الآن إلى منتديات net2ftp . هذه المنتديات متخصصة بمواضيع برنامج net2ftp فقط - و ليس لأسئلة الاستضافة العامة ."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "الخيارات الإدارية"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "معلومات الإصدار"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "هذا الإصدار من net2ftp قابل للتحديث ."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "تعذر جلب آخر معلومات الإصدار من سرفر net2ftp . تفحص إعدادات الأمان في مستعرضك , حيث تمنع تحميل ملف صغير من سرفر net2ftp.com ."; +$net2ftp_messages["Logging"] = "الدخول"; +$net2ftp_messages["Date from:"] = "التاريخ من »"; +$net2ftp_messages["to:"] = "إلى »"; +$net2ftp_messages["Empty logs"] = "إفراغ السجل"; +$net2ftp_messages["View logs"] = "عرض السجل"; +$net2ftp_messages["Go"] = "اذهب"; +$net2ftp_messages["Setup MySQL tables"] = "إعداد جداول MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = "إنشاء جداول قاعدة البيانات MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "الخيارات الإدارية"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "اسم الملف %1\$s لا يمكن فتحه ."; +$net2ftp_messages["The file %1\$s could not be opened."] = "تعذر فتح الملف %1\$s ."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "اسم الملف %1\$s لا يمكن فتحه ."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "تعذر إعداد الاتصال إلى السرفر %1\$s . يرجى التأكد من معلومات قاعدة البيانات التي ادخلتها ."; +$net2ftp_messages["Unable to select the database %1\$s."] = "تعذر تحديد قاعدة البيانات %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "تعذر تنفيذ استعلام SQL nr %1\$s ."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "تم تنفيذ استعلام SQL nr %1\$s بنجاح ."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "يرجى إدخال إعدادات قاعدة البيانات MySQL »"; +$net2ftp_messages["MySQL username"] = "اسم المستخدم MySQL"; +$net2ftp_messages["MySQL password"] = "كلمة المرور MySQL"; +$net2ftp_messages["MySQL database"] = "قاعدة البيانات MySQL"; +$net2ftp_messages["MySQL server"] = "سرفر MySQL"; +$net2ftp_messages["This SQL query is going to be executed:"] = "استعلام SQL جاهز للتنفيذ »"; +$net2ftp_messages["Execute"] = "تنفيذ الاستعلام"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "الإعدادات المستخدمة »"; +$net2ftp_messages["MySQL password length"] = "عمق كلمة مرور MySQL"; +$net2ftp_messages["Results:"] = "النتائج »"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "الخيارات الإدارية"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "تعذر تنفيذ استعلام SQL %1\$s."; +$net2ftp_messages["No data"] = "لا يوجد بيانات"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "الخيارات الإدارية"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "تم إفراغ الجدول %1\$s بنجاح !"; +$net2ftp_messages["The table %1\$s could not be emptied."] = "تعذر إفراغ الجدول %1\$s !"; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "تم إصلاح الجدول %1\$s بنجاح !"; +$net2ftp_messages["The table %1\$s could not be optimized."] = "تعذر إصلاح الجدول %1\$s !"; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "الخيارات الإدارية"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "اذهب"; +$net2ftp_messages["Disabled"] = "معطل"; +$net2ftp_messages["Advanced FTP functions"] = "وظائف FTP المتقدمة"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "إرسال أمر FTP تحكمي إلى سرفر FTP"; +$net2ftp_messages["This function is available on PHP 5 only"] = "هذه الوظيفة متوفرة فقط على PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "وظائف تتبع الأخطاء"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "تتبع أخطاء net2ftp على سرف الويب هذا"; +$net2ftp_messages["Troubleshoot an FTP server"] = "تتبع أخطاء سرفر FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "اختبار قائمة قوانين تعابير net2ftp"; +$net2ftp_messages["Translation functions"] = "وظائف الترجمة"; +$net2ftp_messages["Introduction to the translation functions"] = "مقدمة إلى وظائف الترجمة"; +$net2ftp_messages["Extract messages to translate from code files"] = "استخراج الرسائل لترجمتها من ملفات الكود"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "التفحص عن وجود رسائل جديدة أو باطلة"; + +$net2ftp_messages["Beta functions"] = "وظائف تجريبية"; +$net2ftp_messages["Send a site command to the FTP server"] = "إرسال أمر الموقع إلة سرفر FTP"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache » حماية دليل بكلمة مرور , إنشاء صفحات أخطاء مخصصة"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL » تنفيذ استعلام SQL"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "وظائف أمرا لموقع غير متاحة على هذا الويب سرفر ."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "وظائف أباتشي غير متاحة على هذا الويب سرفر ."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "وظائف MySQL غير متاحة على هذا الويب سرفر ."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "حالة 2 غير مقبولة . موجود ."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "تتبع أخطاء سرفر FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "إعدادات الاتصال »"; +$net2ftp_messages["FTP server"] = "سرفر FTP"; +$net2ftp_messages["FTP server port"] = "منفذ سرفر FTP"; +$net2ftp_messages["Username"] = "اسم المستخدم"; +$net2ftp_messages["Password"] = "كلمة المرور"; +$net2ftp_messages["Password length"] = "طول كلمة المرور"; +$net2ftp_messages["Passive mode"] = "نمط Passive الخمول"; +$net2ftp_messages["Directory"] = "الدليل"; +$net2ftp_messages["Printing the result"] = "طباعة النتيجة"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "الاتصال بسرفر FTP » "; +$net2ftp_messages["Logging into the FTP server: "] = "الدخول إلى سرفر FTP » "; +$net2ftp_messages["Setting the passive mode: "] = "إعداد نمط passive الخمول » "; +$net2ftp_messages["Getting the FTP server system type: "] = "دخول نمط نظام سرفر FTP » "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "التغيير إلى الدليل %1\$s » "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "الدليل في سرفر FTP هو » %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "الحصول على قائمة الأدلة و الملفات » "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "محاولة ثانية للحصول على قائمة الأدلة و الملفات » "; +$net2ftp_messages["Closing the connection: "] = "إغلاق الاتصال » "; +$net2ftp_messages["Raw list of directories and files:"] = "قائمة الأدلة و الملفات »"; +$net2ftp_messages["Parsed list of directories and files:"] = "قائمة تعابير الأدلة و الملفات »"; + +$net2ftp_messages["OK"] = "نجاح"; +$net2ftp_messages["not OK"] = "فشل"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "اختبار قائمة قوانين تعابير net2ftp"; +$net2ftp_messages["Sample input"] = "اختبار الدخل"; +$net2ftp_messages["Parsed output"] = "تعبير الخرج"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "تتبع أخطاء تركيب net2ftp"; +$net2ftp_messages["Printing the result"] = "طباعة النتيجة"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "التحقق من تركيب وظيفة FTP في PHP » "; +$net2ftp_messages["yes"] = "نعم"; +$net2ftp_messages["no - please install it!"] = "لا - يرجى تركيبها !"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "التحقق من صلاحيات الدليل على سرقر الويب » سيتم كتابة ملف صغير إلى المجلد /temp ثم حذفه ."; +$net2ftp_messages["Creating filename: "] = "إنشاء اسم الملف » "; +$net2ftp_messages["OK. Filename: %1\$s"] = "نجاح . اسم الملف » %1\$s"; +$net2ftp_messages["not OK"] = "فشل"; +$net2ftp_messages["OK"] = "نجاح"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "فشل . تأكد من صلاحيات الدليل %1\$s "; +$net2ftp_messages["Opening the file in write mode: "] = "فتح الملف في نمط الكتابة » "; +$net2ftp_messages["Writing some text to the file: "] = "كتابة بعض النص في الملف » "; +$net2ftp_messages["Closing the file: "] = "إغلاق الملف » "; +$net2ftp_messages["Deleting the file: "] = "حذف الملف » "; + +$net2ftp_messages["Testing the FTP functions"] = "اختبار وظائف FTP"; +$net2ftp_messages["Connecting to a test FTP server: "] = "الاتصال لاختبار سرفر FTP » "; +$net2ftp_messages["Connecting to the FTP server: "] = "الاتصال بسرفر FTP » "; +$net2ftp_messages["Logging into the FTP server: "] = "الدخول إلى سرفر FTP » "; +$net2ftp_messages["Setting the passive mode: "] = "إعداد نمط passive الخمول » "; +$net2ftp_messages["Getting the FTP server system type: "] = "دخول نمط نظام سرفر FTP » "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "التغيير إلى الدليل %1\$s » "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "الدليل في سرفر FTP هو » %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "الحصول على قائمة الأدلة و الملفات » "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "محاولة ثانية للحصول على قائمة الأدلة و الملفات » "; +$net2ftp_messages["Closing the connection: "] = "إغلاق الاتصال » "; +$net2ftp_messages["Raw list of directories and files:"] = "قائمة الأدلة و الملفات »"; +$net2ftp_messages["Parsed list of directories and files:"] = "قائمة تعابير الأدلة و الملفات »"; +$net2ftp_messages["OK"] = "نجاح"; +$net2ftp_messages["not OK"] = "فشل"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "ملاحظة » عند استخدام الاختصار من المفضلة , سيطلب منك بواسطة نافذة بوب اب إدخال اسم المستخدم و كلمة المرور ."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "اختر دليل"; +$net2ftp_messages["Please wait..."] = "يرجى الانتظار ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "الأدلة التي تحتوي اسمائها على \' لا يمكن عرضها بشكل صحيح . يمكن فقط حذفها . يرجى العودة للخلف و اختيار دليل فرعي آخر ."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "الحصة اليومية انتهت » لا يمكنك متابعة ترحيل البيانات ."; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "لضمان استخدام السرفر ويب للجميع , تم تحديد حصة يومية لترحيل البيانات و الملفات لكل مستخدم . عند استهلاكك لهذه الحصة , تسطيع استعراض سرفر FTP و لكن لا يمكنك متابعة نقل البيانات من و إلى ."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "إذا كنت تريد استخدام هذه اخدمة بدون حدود , يمكنك تركيب net2ftp على سرفرك الخاص ."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "دليل جديد"; +$net2ftp_messages["New file"] = "ملف جديد"; +$net2ftp_messages["HTML templates"] = "قوالب HTML"; +$net2ftp_messages["Upload"] = "الرفع"; +$net2ftp_messages["Java Upload"] = "الرفع بـ Java"; +$net2ftp_messages["Flash Upload"] = "رفع بواسطة الفلاش"; +$net2ftp_messages["Install"] = "التركيب"; +$net2ftp_messages["Advanced"] = "متقدم"; +$net2ftp_messages["Copy"] = "نسخ"; +$net2ftp_messages["Move"] = "نقل"; +$net2ftp_messages["Delete"] = "حذف"; +$net2ftp_messages["Rename"] = "إعادة تسمية"; +$net2ftp_messages["Chmod"] = "تصريح"; +$net2ftp_messages["Download"] = "تحميل"; +$net2ftp_messages["Unzip"] = "استخراج"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "الحجم"; +$net2ftp_messages["Search"] = "بحث"; +$net2ftp_messages["Go to the parent directory"] = "الذهاب إلى المجلد الأصل"; +$net2ftp_messages["Go"] = "اذهب"; +$net2ftp_messages["Transform selected entries: "] = "تحويل العناصر المحددة » "; +$net2ftp_messages["Transform selected entry: "] = "تحويل العنصر المحدد » "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "إنشاء دليل فرعي جديد في الدليل %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "إنشاء ملف جديد في الدليل %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "إنشاء المواقع سهل باستخدام القوالب الجاهزة"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "رفع ملفات جديد إلى الدليل %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "رفع المجلدات و الملفات بواسطة Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "رفع الملفات بواسطة Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "تركيب حزمة البرنامج ( يتطلب سرفر PHP على الموقع )"; +$net2ftp_messages["Go to the advanced functions"] = "الذهاب إلى الوظائف المتقدمة"; +$net2ftp_messages["Copy the selected entries"] = "نسخ العناصر المحددة"; +$net2ftp_messages["Move the selected entries"] = "نقل العناصر المحددة"; +$net2ftp_messages["Delete the selected entries"] = "حذف العناصر المحددة"; +$net2ftp_messages["Rename the selected entries"] = "إعادة تسمية العناصر المحددة"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "تصريح العناصر المحددة (يعمل فقط على سرفرات Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "تحميل ملف zip يحتوي على جميع العناصر المحددة"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "فك ضغط الأراشيف المحددة على سرفر FTP"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "ضغط Zip العناصر المحددة لحفظها أو إرسالها بالبريد"; +$net2ftp_messages["Calculate the size of the selected entries"] = "حساب حجم العناصر المحددة"; +$net2ftp_messages["Find files which contain a particular word"] = "إيجاد الملفات التي تتضمن الكلمة جزئياً"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "اضغط لفرز %1\$s بترتيب تنازلي"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "اضغط لفرز %1\$s بترتيب تصاعدي"; +$net2ftp_messages["Ascending order"] = "ترتيب تصاعدي"; +$net2ftp_messages["Descending order"] = "ترتيب تنازلي"; +$net2ftp_messages["Upload files"] = "رفع الملفات"; +$net2ftp_messages["Up"] = "خطوة إلى الأعلى"; +$net2ftp_messages["Click to check or uncheck all rows"] = "اضغط لتحديد أو إلغاء تحديد جميع الصفوف"; +$net2ftp_messages["All"] = "الكل"; +$net2ftp_messages["Name"] = "الاسم"; +$net2ftp_messages["Type"] = "النوع"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "المالك"; +$net2ftp_messages["Group"] = "المجموعة"; +$net2ftp_messages["Perms"] = "الصلاحية"; +$net2ftp_messages["Mod Time"] = "نمط الوقت"; +$net2ftp_messages["Actions"] = "الإجراءات"; +$net2ftp_messages["Select the directory %1\$s"] = "حدد الدليل %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "حدد الملف %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "حدد symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "الذهاب إلى الدليل الفرعي %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "تحميل الملف %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "اتبع الرابط %1\$s"; +$net2ftp_messages["View"] = "عرض"; +$net2ftp_messages["Edit"] = "تحرير"; +$net2ftp_messages["Update"] = "تحديث"; +$net2ftp_messages["Open"] = "فتح"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "عرض كود المصدر المميز للملف %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "تحرير كود المصدر للملف %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "رفع نسخة جديدة من الملف %1\$s و دمج التعديلات"; +$net2ftp_messages["View image %1\$s"] = "عرض الصورة %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "عرض الملف %1\$s بواسطة سرفر الويب HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(ملاحظة » قد لا يعمل هذا الرابط إن لم يكن لديك دومين خاص .)"; +$net2ftp_messages["This folder is empty"] = "هذا المجلد فارغ"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "المجلدات"; +$net2ftp_messages["Files"] = "الملفات"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "خرج FTP غير معروف"; +$net2ftp_messages["Number"] = "العدد"; +$net2ftp_messages["Size"] = "الحجم"; +$net2ftp_messages["Skipped"] = "تم تخطيه"; +$net2ftp_messages["Data transferred from this IP address today"] = "البيانات التي تم ترحيلها بواسطة هذا الأي بي اليوم"; +$net2ftp_messages["Data transferred to this FTP server today"] = "البيانات التي تم ترحيلها بواسطة سفر FTP هذا اليوم"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "اللغة »"; +$net2ftp_messages["Skin:"] = "الشكل »"; +$net2ftp_messages["View mode:"] = "طريقة العرض »"; +$net2ftp_messages["Directory Tree"] = "شجرة الدليل"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "تنفيذ %1\$s في نافذة جديدة"; +$net2ftp_messages["This file is not accessible from the web"] = "لا يمكن الوصول إلى هذا الملف من الويب"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "ضغط مزذوج للذهاب إلى الدليل الفرعي"; +$net2ftp_messages["Choose"] = "اختيار"; +$net2ftp_messages["Up"] = "خطوة إلى الأعلى"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "حجم المجلدات و الملفات المحددة"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "مجموع حجم المجلدات و الملفات المحددة هو »"; +$net2ftp_messages["The number of files which were skipped is:"] = "عدد الملفات التي تم تخطيها هو »"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "تصريح المجلدات و الملفات"; +$net2ftp_messages["Set all permissions"] = "تعيين جميع الصلاحيات"; +$net2ftp_messages["Read"] = "قراءة"; +$net2ftp_messages["Write"] = "كتابة"; +$net2ftp_messages["Execute"] = "تنفيذ الاستعلام"; +$net2ftp_messages["Owner"] = "المالك"; +$net2ftp_messages["Group"] = "المجموعة"; +$net2ftp_messages["Everyone"] = "أي شخص"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "لتعيين جميع الصلاحيات إلى نفس القيمة , حدد الصلاحيات ثم اضغط زر \"تعيين جميع الصلاحيات\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "تعيين صلاحيات المجلد %1\$s إلى » "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "تعيين صلاحيات الملف %1\$s إلى » "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "تعيين صلاحيات symlink %1\$s إلى » "; +$net2ftp_messages["Chmod value"] = "قيمة التصريح"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "تطبيق التصريح على المجلدات الفرعية في هذا المجلد"; +$net2ftp_messages["Chmod also the files within this directory"] = "تطبيق التصريح على الملفات داخل هذا المجلد"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "التصريح nr %1\$s خارج نطاق 000-777. يرجى المحاولة من جديد ."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "اختر دليل"; +$net2ftp_messages["Copy directories and files"] = "نسخ المجلدات و الملفات"; +$net2ftp_messages["Move directories and files"] = "نقل المجلدات و الملفات"; +$net2ftp_messages["Delete directories and files"] = "حذف المجلدات و الملفات"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "هل انت متأكد من أنك تريد حذف هذه المجلدات و الملفات ؟"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "جميع المجلدات الفرعية و الملفات في المجلدات المحددة سوف تحذف !"; +$net2ftp_messages["Set all targetdirectories"] = "تعيين جميع الأدلة الهدف"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "لتعيين دليل هدف مشترك , أدخل الدليل الهدف في الحقل النصي السابق ثم اضغط زر \"تعيين جميع الأدلة الهدف\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "ملاحظة » الدليل الهدف يجب أن يكون موجود أولاً ."; +$net2ftp_messages["Different target FTP server:"] = "سرفر FTP الآخر الهدف »"; +$net2ftp_messages["Username"] = "اسم المستخدم"; +$net2ftp_messages["Password"] = "كلمة المرور"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "اتركه فارغ إذا كنت تريد نسخ الملفات إلى نفس سرفر FTP ."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "إذا كنت تريد نسخ الملفات إلى سرفر FTP آخر , أدخل بيانات الدخول ."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "اتركه فارغ إذا كنت تريد نقل الملفات إلى نفس سرفر FTP ."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "إذا كنت تريد نقل الملفات إلى سرفر FTP آخر , أدخل بيانات الدخول ."; +$net2ftp_messages["Copy directory %1\$s to:"] = "نسخ المجلد %1\$s إلى »"; +$net2ftp_messages["Move directory %1\$s to:"] = "نقل المجلد %1\$s إلى »"; +$net2ftp_messages["Directory %1\$s"] = "المجلد %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "نسخ الملف %1\$s إلى »"; +$net2ftp_messages["Move file %1\$s to:"] = "نقل الملف %1\$s إلى »"; +$net2ftp_messages["File %1\$s"] = "الملف %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "نسخ symlink %1\$s إلى »"; +$net2ftp_messages["Move symlink %1\$s to:"] = "نقل symlink %1\$s إلى »"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "المجلد الهدف »"; +$net2ftp_messages["Target name:"] = "اسم الهدف »"; +$net2ftp_messages["Processing the entries:"] = "معالجة العناصر »"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "إنشاء موقع في 4 خطوات سهلة"; +$net2ftp_messages["Template overview"] = "خلاصة القالب"; +$net2ftp_messages["Template details"] = "تفاصيل القالب"; +$net2ftp_messages["Files are copied"] = "تم نسخ الملفات"; +$net2ftp_messages["Edit your pages"] = "تحرير صفحاتك"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "اضغط على الصورة لعرض تفاصيل القالب ."; +$net2ftp_messages["Back to the Browse screen"] = "العودة إلى شاشة المستعرض"; +$net2ftp_messages["Template"] = "القالب"; +$net2ftp_messages["Copyright"] = "حقوق النشر"; +$net2ftp_messages["Click on the image to view the details of this template"] = "اضغط على الصورة لعرض تفاصيل القالب ."; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "سيتم نسخ ملفات القالب إلى سرفرك FTP .الملفات التي تحمل نفس الاسم سيتم الكتابة فوقها . هل ترغب بالمتابعة ؟"; +$net2ftp_messages["Install template to directory: "] = "تركيب القالب في الدليل » "; +$net2ftp_messages["Install"] = "التركيب"; +$net2ftp_messages["Size"] = "الحجم"; +$net2ftp_messages["Preview page"] = "معاينة الصفحة"; +$net2ftp_messages["opens in a new window"] = "في في نافذة جديدة"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "يرجى الانتظار بينما يتم نسخ ملفات القالب إلى سرفرك » "; +$net2ftp_messages["Done."] = "تـم ."; +$net2ftp_messages["Continue"] = "المتابعة"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "تحرير الصفحة"; +$net2ftp_messages["Browse the FTP server"] = "استعراض سرفر FTP"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "إضافة هذا الرابط إلى مفضلتك للعودة إلى هذه الصفخة فيما بعد !"; +$net2ftp_messages["Edit website at %1\$s"] = "تحرير موقع الويب في %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer » اضغط بالزر الأيمن فوق الرابط و اختر \"إضافة إلى المفضلة...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox » اضغط بالزر الأيمن فوق الرابط و اختر \"أضف هذا الرابط إلى المفضلة...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "تحذير » تعذر إنشاء الدليل الفرعي %1\$s . ربما يكون موجود من قبل . المتابعة..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "إنشاء الدليل الفرعي الهدف %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "تحذير » تعذر نسخ الملف %1\$s . المتابعة ..."; +$net2ftp_messages["Copied file %1\$s"] = "تم نسخ الملف %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "تعذر فتح ملف القالب"; +$net2ftp_messages["Unable to read the template file"] = "تعذر قراءة ملف القالب"; +$net2ftp_messages["Please specify a filename"] = "يرجى تحديد اسم الملف"; +$net2ftp_messages["Status: This file has not yet been saved"] = "الحالة » لم يتم حفظ هذا الملف بعد"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "الحالة » تم الحفظ في %1\$s باستخدام النمط %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "الحالة » تعذر حفظ هذا الملف"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "المجلد » "; +$net2ftp_messages["File: "] = "الملف » "; +$net2ftp_messages["New file name: "] = "اسم الملف الجديد » "; +$net2ftp_messages["Character encoding: "] = "صيغة الترميز » "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "ملاحظة » تغيير نوع صندوق النص سوف يحفظ هذه التعديلات"; +$net2ftp_messages["Copy up"] = "نسخ إلى"; +$net2ftp_messages["Copy down"] = "نسخ من"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "بحث في المجلدات و الملفات"; +$net2ftp_messages["Search again"] = "بحث جديد"; +$net2ftp_messages["Search results"] = "نتائج البحث"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "يرجى إدخال كلمة أو تعبير مقبول للبحث ."; +$net2ftp_messages["Please enter a valid filename."] = "يرجى إدخال اسم ملف مقبول ."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "يرجى إدخال حجم ملف مقبول في صندوق النص \"من\" , مثال 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "يرجى إدخال حجم ملف مقبول في صندوق النص \"إلى\" , مثال 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "يرجى إدخال تاريخ مقبول في الحقل \"من\" بتنسيق Y-m-d ."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "يرجى إدخال تاريخ مقبول في الحقل \"إلى\" بتنسيق Y-m-d ."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "لم يتم العثور على الكلمة %1\$s في المجلدات و الملفات المحددة ."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "تم العثور على الكلمة %1\$s في الملفات التالية »"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "بحث عن كلمة أو تعبير"; +$net2ftp_messages["Case sensitive search"] = "بحث مطابق لحالة الأحرف"; +$net2ftp_messages["Restrict the search to:"] = "اقتصار البحث على »"; +$net2ftp_messages["files with a filename like"] = "الملفات ذات اسم الملف مماثل"; +$net2ftp_messages["(wildcard character is *)"] = "(محرف تعميم البحث هو *)"; +$net2ftp_messages["files with a size"] = "الملفات ذات الحجم"; +$net2ftp_messages["files which were last modified"] = "الملفات ذات آخر تعديل كان"; +$net2ftp_messages["from"] = "من"; +$net2ftp_messages["to"] = "إلى"; + +$net2ftp_messages["Directory"] = "الدليل"; +$net2ftp_messages["File"] = "ملف"; +$net2ftp_messages["Line"] = "السطر"; +$net2ftp_messages["Action"] = "الإجراء"; +$net2ftp_messages["View"] = "عرض"; +$net2ftp_messages["Edit"] = "تحرير"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "عرض كود المصدر المميز للملف %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "تحرير كود المصدر للملف %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "تثبيت حزمة البرنامج"; +$net2ftp_messages["Unable to open the template file"] = "تعذر فتح ملف القالب"; +$net2ftp_messages["Unable to read the template file"] = "تعذر قراءة ملف القالب"; +$net2ftp_messages["Unable to get the list of packages"] = "تعذر جلب قائمة الحزمة"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "تم نسخ معالج تريكب net2ftp إلى سرفر FTP ."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "هذا المعالج يعمل على سرفر موقع و يحتاج إلى PHP ليتم تركيبه ."; +$net2ftp_messages["In order to run it, click on the link below."] = "لتشغيله ، اضغط الرابط التالي ."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "حاول net2ftp المقارنة بين سرفر FTP و سرفرل موقعك ."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "ربما لا يكون هذا الرابط صحيح ، أدخل الرابط URL في مستعرضك يدوياً ."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "رفع المجلدات و الملفات بواسطة Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "تسجيل الدخول !"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "استعراض سرفر FTP"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "التنقل من مجلد إلى مجلد و استعراض جميع المجلدات الفرعية و الملفات ."; +$net2ftp_messages["Upload files"] = "رفع الملفات"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "يوجد 3 طرق مختلفة لرفع الملفات » 1 - الطريقة العادية المعروفة . 2 - طريقة رفع ملف مضغوط ثم فك الضغط تلقائياً . 3 - طريقة الجافا أبليت ."; +$net2ftp_messages["Download files"] = "تحميل الملفات"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "اضغط على اسم الملف للتحميل الفردي السريع .
حدد ملفات متعددة ثم اضغط على تحميل , يتم تحميل الملفات المحددة ضمن ملف مضغوط zip ."; +$net2ftp_messages["Zip files"] = "ضغط Zip الملفات"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... و حفظ الملف zip على سرفر FTP , أو إرساله بواسطة البريد الالكتروني ."; +$net2ftp_messages["Unzip files"] = "استخراج الملفات"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "الصيغ المدعومة » .zip, .tar, .tgz و .gz."; +$net2ftp_messages["Install software"] = "تركيب البرنامج"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "اختر من قائمة التطبيقات الشائعة ( تتطلب PHP ) ."; +$net2ftp_messages["Copy, move and delete"] = "نسخ , نقل , و حذف"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "المجلدات و محتوياتها (المجلدات الفرعية و الملفات) ."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "نسخ أو نقل من و إلى سرفر FTP"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "استيراد الملفات إلى سرفر FTP , أو تصدير الملفات من سرفرك إلى سرفر FTP آخر ."; +$net2ftp_messages["Rename and chmod"] = "إعادة التسمية و التصاريح"; +$net2ftp_messages["Chmod handles directories recursively."] = "تغير أسماء المجلدات و الملفات و تغيير التصاريح ."; +$net2ftp_messages["View code with syntax highlighting"] = "عرض الكود مع تمييز المصدر"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "ارتباطات لوثائق وظائف PHP على php.net."; +$net2ftp_messages["Plain text editor"] = "محرر نصوص عادية"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "تحرير النص بواسطة المستعرض ."; +$net2ftp_messages["HTML editors"] = "محرر HTML"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "محرر HTML متقدم (WYSIWYG) , ما تشاهده تحصل عليه , يمكنك الاختيار بين محررين ."; +$net2ftp_messages["Code editor"] = "محرر الكود"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "تحرير كود HTML و PHP مع التمييز ."; +$net2ftp_messages["Search for words or phrases"] = "بحث عن كلمات أو تعبير برمجي"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "فلترة على أساس اسم الملف , وقت آخر تحرير و حجم الملف ."; +$net2ftp_messages["Calculate size"] = "حساب الحجم"; +$net2ftp_messages["Calculate the size of directories and files."] = "حساب حجم المجلدات و الملفات ."; + +$net2ftp_messages["FTP server"] = "سرفر FTP"; +$net2ftp_messages["Example"] = "مثال"; +$net2ftp_messages["Port"] = "المنفذ"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "اسم المستخدم"; +$net2ftp_messages["Password"] = "كلمة المرور"; +$net2ftp_messages["Anonymous"] = "Anonymous"; +$net2ftp_messages["Passive mode"] = "نمط Passive الخمول"; +$net2ftp_messages["Initial directory"] = "الدليل الأولي"; +$net2ftp_messages["Language"] = "اللغة"; +$net2ftp_messages["Skin"] = "الشكل"; +$net2ftp_messages["FTP mode"] = "نمط FTP"; +$net2ftp_messages["Automatic"] = "تلقائي"; +$net2ftp_messages["Login"] = "تسجيل الدخول"; +$net2ftp_messages["Clear cookies"] = "مسح الكوكيز"; +$net2ftp_messages["Admin"] = "الإدارة"; +$net2ftp_messages["Please enter an FTP server."] = "يرجى إدخال سرفر FTP."; +$net2ftp_messages["Please enter a username."] = "يرجى إدخال اسم المستخدم ."; +$net2ftp_messages["Please enter a password."] = "يرجى إدخال كلمة المرور ."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "يرجى إدخال اسم المستخدم و كلمة المرور الخاصة بالإدارة ."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "يرجى إدخال اسم المستخدم و كلمة المرور لسرفر FTP %1\$s ."; +$net2ftp_messages["Username"] = "اسم المستخدم"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "انتهت مدة جلسة العمل ، يرجى إعادة كتابة اسم المستخدم و كلمة المرور لسرفر FTP %1\$s للمتابعة ."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "تم تغيير عنوان IP الخاص بك ، يرجى إعادة كتابة كلمة المرور لسرفر FTP %1\$s للمتعابعة ."; +$net2ftp_messages["Password"] = "كلمة المرور"; +$net2ftp_messages["Login"] = "تسجيل الدخول"; +$net2ftp_messages["Continue"] = "المتابعة"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "صفحة الدخول"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "تم تسجيل خروجك من سرفر FTP . لتسجيل الدخول من جديد , اتبع الرابط التالي."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "ملاحظة » يمكن لأي مستخدم آخر لهذا الجهاز أن يضغط زر للخلف في المستعرض و الوصول إلى سرفر FTP ."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "لمنع حصول ذلك , يتوجب عليك إغلاق جميع صفحات المستعرض الآن ."; +$net2ftp_messages["Close"] = "إغلاق"; +$net2ftp_messages["Click here to close this window"] = "اضغط هنا لإغلاق هذه النافذة"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "إنشاء مجلدات جديدة"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "المجلدات الجديدة سيتم إنشائها في %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "تم إنشاء المجلد %1\$s بنجاح !"; +$net2ftp_messages["Directory %1\$s could not be created."] = "تعذر إنشاء المجلد %1\$s !"; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "إرسال أمر FTP تحكمي"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "قائمة الأوامر »"; +$net2ftp_messages["FTP server response:"] = "إجابة سرفر FTP »"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "إعادة تسمية المجلدات و الملفات"; +$net2ftp_messages["Old name: "] = "الاسم القديم » "; +$net2ftp_messages["New name: "] = "الاسم الجديد » "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "الاسم الجديد يجب أن لا يتضمن نقاط . لم تتم إعادة تسمية هذا العنصر إلى %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "الاسم الجديد لا يمكن أن يتضمن كلمات مفتاحية محظورة . لم تتتم إعادة التسمية إلى %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "تم إعادة تسمية %1\$s إلى %2\$s بنجاح !"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "تعذر إعادة تسمية %1\$s إلى %2\$s !"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "استخراج الكل"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "جلب أرشيف %1\$s من %2\$s من سرفر FTP"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "تعذر جلب الأرشيف %1\$s من سرفر FTP"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "تعيين جميع الأدلة الهدف"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "لتعيين دليل هدف مشترك , أدخل الدليل الهدف في الحقل النصي السابق ثم اضغط زر \"تعيين جميع الأدلة الهدف\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "ملاحظة » الدليل الهدف يجب أن يكون موجود أولاً ."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "فك الأرشيف %1\$s إلى »"; +$net2ftp_messages["Target directory:"] = "المجلد الهدف »"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "استخدام نفس أسماء المجلدات (إنشاء المجلدات الفرعية تلقائياً)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "رفع إلى الدليل »"; +$net2ftp_messages["Files"] = "الملفات"; +$net2ftp_messages["Archives"] = "الأراشيف"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "الملفات التي تضاف هنا سترحل إلى سرفر FTP ."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "الأراشيف التي تضاف هنا يتم فك ضغطها و ترحيل الملفات التي بداخلها إلى سرفر FTP ."; +$net2ftp_messages["Add another"] = "إضافة آخر"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "استخدام نفس أسماء المجلدات (إنشاء المجلدات الفرعية تلقائياً)"; + +$net2ftp_messages["Choose a directory"] = "اختر دليل"; +$net2ftp_messages["Please wait..."] = "يرجى الانتظار ..."; +$net2ftp_messages["Uploading... please wait..."] = "جار الرفع ... يرجى الانتظار ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "إذا استغرق الرفع وقت أطول من المسموح %1\$s ثانية<\/b> , ستحاتج إلى إعادة المحاولة مع عدد ملفات أقل / أصغر ."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "هذه النافذة ستغلق تلقائياً خلال ثوان قليلة ."; +$net2ftp_messages["Close window now"] = "إغلاق النافذة الآن"; + +$net2ftp_messages["Upload files and archives"] = "رفع الملفات و الأراشيف"; +$net2ftp_messages["Upload results"] = "نتائج الرفع"; +$net2ftp_messages["Checking files:"] = "تفحص الملفات »"; +$net2ftp_messages["Transferring files to the FTP server:"] = "ترحيل الملفات إلى السرفر FTP »"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "فك الضغط و ترحيل الملفات إلى سرفر FTP »"; +$net2ftp_messages["Upload more files and archives"] = "رفع المزيد من الملفات و الأراشيف"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "التحديد »"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "الحجم الأقصى للملف الواحد محدد بواسطة البرنامج إلى %1\$s و بواسطة PHP إلى %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "مدة التنفيذ القصوى هي %1\$s ثانية"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "نمط ترحيل FTP إن كان (ASCII أو BINARY) يتم تحديده تلقائياً , بالأعتماد على لاحقة اسم الملف"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "إذا كان الملف الوجهة موجود , سيتم استبداله"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "عرض الملف %1\$s"; +$net2ftp_messages["View image %1\$s"] = "عرض الصورة %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "عرض Macromedia ShockWave فلم فلاش %1\$s"; +$net2ftp_messages["Image"] = "الصورة"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "لحفظ الصورة , اضغط بالزر الأيمن فوقها و اختر 'حفظ الصورة باسم...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "عناصر Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "حفظ ملف zip على سرفر FTP كـ »"; +$net2ftp_messages["Email the zip file in attachment to:"] = "إرسال ملف zip بالبريد كمرفق إلى »"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "لاحظ ان إرسال الملفات لا يتجاهل » عنوانك IP مثل إضافة وقت الإرسال إلى الرسالة ."; +$net2ftp_messages["Some additional comments to add in the email:"] = "إضافة بعض التعليقات الإضافية إلى الرسالة »"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "لم تدخل اسم الملف zip . ارجع للخلف و أدخل الاسم ."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "عنوان البريد الالكتروني الذي أدخلته (%1\$s) غير مقبول .
يرجى إدخال عنوان البريد الالكتروني بالتنسيق username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/ar.inc.php b/ehcp/net2ftp/languages/ar.inc.php new file mode 100644 index 0000000..968b506 --- /dev/null +++ b/ehcp/net2ftp/languages/ar.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = " %1\$s , %2\$s ."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = " root %1\$s ."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = " %1\$s - , ."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = " net2ftp . Paypal Ebay ."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = " ."; +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s "; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = " !"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = " FTP %1\$s FTP ."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = " FTP %1\$s FTP ."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = " FTP %1\$s ."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = " IP (%1\$s) IP ."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = " IP (%1\$s) IP ."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = " net2ftp_users ."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = " !"; +$net2ftp_messages["Wrong username or password. Please try again."] = " . !"; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = " IP ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = " net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = " net2ftp_log_consumption_ftpserver ."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = " consumption_ipaddress_datatransfer ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = " net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = " net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = " net2ftp_log_consumption_ftpserver ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = " net2ftp_log_consumption_ftpserver ."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = " net2ftp_log_access ."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = " net2ftp_log_access ."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = " MySQL . settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = " MySQL . settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = " "; +$net2ftp_messages["Go back"] = " "; +$net2ftp_messages["Go to the login page"] = " "; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " FTP %1\$s %2\$s.

FTP HTTP () . ISP .
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " FTP %1\$s %2\$s.

ISP .
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = " passive FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " FTP () %1\$s %2\$s.

FTP () HTTP () . ISP .
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " FTP () %1\$s %2\$s.

ISP .
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = " passive FTP () %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = " %1\$s %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = " %1\$s. CHMOD Unix FTP , Windows FTP .."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = " %1\$s %2\$s ! "; +$net2ftp_messages["Processing entries within directory %1\$s:"] = " %1\$s "; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = " %1\$s %2\$s !"; +$net2ftp_messages["All the selected directories and files have been processed."] = " ."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = " %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = " %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = " %1\$s FTP %2\$s.
%3\$s .
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s ."; +$net2ftp_messages["Unable to read the temporary file"] = " "; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s ."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s ."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = " %1\$s.
%2\$s ."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = " %1\$s FTP .
!"; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processing directory %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = " %1\$s %2\$s, ."; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = " %1\$s "; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = " %1\$s "; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = " %1\$s. . / ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = " %1\$s . ."; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = " %1\$s - "; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = " %1\$s"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = " %1\$s , "; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = " %1\$s "; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = " %1\$s "; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = " %1\$s "; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = " %1\$s "; +$net2ftp_messages["Unable to copy the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = " %1\$s, "; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = " %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = " ."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = " %1\$s FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = " %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = " "; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = " %1\$s "; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = " %1\$s FTP %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = " "; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = " "; +$net2ftp_messages["Unable to send the file to the browser"] = " "; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = " zip FTP %1\$s"; +$net2ftp_messages["Requested files"] = " "; + +$net2ftp_messages["Dear,"] = " ,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = " (%1\$s) ."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = " , , ."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = " - , ."; +$net2ftp_messages["Information about the sender: "] = " "; +$net2ftp_messages["IP address: "] = " IP "; +$net2ftp_messages["Time of sending: "] = " "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = " net2ftp "; +$net2ftp_messages["Webmaster's email: "] = " "; +$net2ftp_messages["Message of the sender: "] = " "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp GNU/GPL . http://www.net2ftp.com ."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = " %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = " %1\$s . ."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = " %1\$s . ."; +$net2ftp_messages["Could not generate a temporary file."] = " ."; +$net2ftp_messages["File %1\$s could not be moved"] = " %1\$s"; +$net2ftp_messages["File %1\$s is OK"] = " %1\$s !"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = " temp .

chmod 777 /temp net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = " !"; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = " %1\$s FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = " %1\$s FTP FTP %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = " FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = " %1\$s %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = " %1\$s . zip, tar, tgz gz ."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = " "; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = " %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = " "; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = " %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = " %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = " "; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = " net2ftp %1\$s , ."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = " ."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = " , ."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = " net2ftp , net2ftp ."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = " !"; +$net2ftp_messages["You did not supply a From address."] = " !"; +$net2ftp_messages["You did not supply a To address."] = " !"; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = " %1\$s ."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = " SQL ."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = " FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" \" ."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = " , settings.inc.php . , ."; +$net2ftp_messages["Please enter your Admin username and password"] = " "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" \" ."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = " . settings.inc.php ."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blue"; +$net2ftp_messages["Grey"] = "Grey"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Yellow"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = " ASP"; +$net2ftp_messages["Cascading Style Sheet"] = " "; +$net2ftp_messages["HTML file"] = " HTML"; +$net2ftp_messages["Java source file"] = " Java"; +$net2ftp_messages["JavaScript file"] = " JavaScript"; +$net2ftp_messages["PHP Source"] = " PHP"; +$net2ftp_messages["PHP script"] = " PHP"; +$net2ftp_messages["Text file"] = " "; +$net2ftp_messages["Bitmap file"] = " Bitmap"; +$net2ftp_messages["GIF file"] = " GIF"; +$net2ftp_messages["JPEG file"] = " JPEG"; +$net2ftp_messages["PNG file"] = " PNG"; +$net2ftp_messages["TIF file"] = " TIF"; +$net2ftp_messages["GIMP file"] = " GIMP"; +$net2ftp_messages["Executable"] = " "; +$net2ftp_messages["Shell script"] = " Shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - "; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = " Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = " ARC"; +$net2ftp_messages["ARJ archive"] = " ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = " GZ"; +$net2ftp_messages["TAR archive"] = " TAR"; +$net2ftp_messages["Zip archive"] = " Zip"; +$net2ftp_messages["MOV movie file"] = " MOV"; +$net2ftp_messages["MPEG movie file"] = " MPEG movie file"; +$net2ftp_messages["Real movie file"] = " Real"; +$net2ftp_messages["Quicktime movie file"] = " Quicktime"; +$net2ftp_messages["Shockwave flash file"] = " Shockwave"; +$net2ftp_messages["Shockwave file"] = " Shockwave"; +$net2ftp_messages["WAV sound file"] = " "; +$net2ftp_messages["Font file"] = " "; +$net2ftp_messages["%1\$s File"] = " %1\$s"; +$net2ftp_messages["File"] = ""; + +// getAction() +$net2ftp_messages["Back"] = " "; +$net2ftp_messages["Submit"] = " "; +$net2ftp_messages["Refresh"] = " "; +$net2ftp_messages["Details"] = ""; +$net2ftp_messages["Icons"] = ""; +$net2ftp_messages["List"] = ""; +$net2ftp_messages["Logout"] = " "; +$net2ftp_messages["Help"] = ""; +$net2ftp_messages["Bookmark"] = " "; +$net2ftp_messages["Save"] = ""; +$net2ftp_messages["Default"] = ""; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = " "; +$net2ftp_messages["Forums"] = ""; +$net2ftp_messages["License"] = ""; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = " net2ftp . net2ftp - ."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = " "; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = " "; +$net2ftp_messages["This version of net2ftp is up-to-date."] = " net2ftp ."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = " net2ftp . , net2ftp.com ."; +$net2ftp_messages["Logging"] = ""; +$net2ftp_messages["Date from:"] = " "; +$net2ftp_messages["to:"] = " "; +$net2ftp_messages["Empty logs"] = " "; +$net2ftp_messages["View logs"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Setup MySQL tables"] = " MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = " MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = " %1\$s ."; +$net2ftp_messages["The file %1\$s could not be opened."] = " %1\$s ."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = " %1\$s ."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = " %1\$s . ."; +$net2ftp_messages["Unable to select the database %1\$s."] = " %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = " SQL nr %1\$s ."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = " SQL nr %1\$s ."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = " MySQL "; +$net2ftp_messages["MySQL username"] = " MySQL"; +$net2ftp_messages["MySQL password"] = " MySQL"; +$net2ftp_messages["MySQL database"] = " MySQL"; +$net2ftp_messages["MySQL server"] = " MySQL"; +$net2ftp_messages["This SQL query is going to be executed:"] = " SQL "; +$net2ftp_messages["Execute"] = " "; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = " "; +$net2ftp_messages["MySQL password length"] = " MySQL"; +$net2ftp_messages["Results:"] = " "; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = " SQL %1\$s."; +$net2ftp_messages["No data"] = " "; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The table %1\$s was emptied successfully."] = " %1\$s !"; +$net2ftp_messages["The table %1\$s could not be emptied."] = " %1\$s !"; +$net2ftp_messages["The table %1\$s was optimized successfully."] = " %1\$s !"; +$net2ftp_messages["The table %1\$s could not be optimized."] = " %1\$s !"; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = " "; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Disabled"] = ""; +$net2ftp_messages["Advanced FTP functions"] = " FTP "; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = " FTP FTP"; +$net2ftp_messages["This function is available on PHP 5 only"] = " PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = " "; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = " net2ftp "; +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Translation functions"] = " "; +$net2ftp_messages["Introduction to the translation functions"] = " "; +$net2ftp_messages["Extract messages to translate from code files"] = " "; +$net2ftp_messages["Check if there are new or obsolete messages"] = " "; + +$net2ftp_messages["Beta functions"] = " "; +$net2ftp_messages["Send a site command to the FTP server"] = " FTP"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache , "; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL SQL"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = " ."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = " ."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = " MySQL ."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = " 2 . ."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = " "; +$net2ftp_messages["FTP server"] = " FTP"; +$net2ftp_messages["FTP server port"] = " FTP"; +$net2ftp_messages["Username"] = " "; +$net2ftp_messages["Password"] = " "; +$net2ftp_messages["Password length"] = " "; +$net2ftp_messages["Passive mode"] = " Passive "; +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Printing the result"] = " "; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = " FTP "; +$net2ftp_messages["Logging into the FTP server: "] = " FTP "; +$net2ftp_messages["Setting the passive mode: "] = " passive "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " "; +$net2ftp_messages["Closing the connection: "] = " "; +$net2ftp_messages["Raw list of directories and files:"] = " "; +$net2ftp_messages["Parsed list of directories and files:"] = " "; + +$net2ftp_messages["OK"] = ""; +$net2ftp_messages["not OK"] = ""; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Sample input"] = " "; +$net2ftp_messages["Parsed output"] = " "; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = " net2ftp"; +$net2ftp_messages["Printing the result"] = " "; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = " FTP PHP "; +$net2ftp_messages["yes"] = ""; +$net2ftp_messages["no - please install it!"] = " - !"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = " /temp ."; +$net2ftp_messages["Creating filename: "] = " "; +$net2ftp_messages["OK. Filename: %1\$s"] = " . %1\$s"; +$net2ftp_messages["not OK"] = ""; +$net2ftp_messages["OK"] = ""; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = " . %1\$s "; +$net2ftp_messages["Opening the file in write mode: "] = " "; +$net2ftp_messages["Writing some text to the file: "] = " "; +$net2ftp_messages["Closing the file: "] = " "; +$net2ftp_messages["Deleting the file: "] = " "; + +$net2ftp_messages["Testing the FTP functions"] = " FTP"; +$net2ftp_messages["Connecting to a test FTP server: "] = " FTP "; +$net2ftp_messages["Connecting to the FTP server: "] = " FTP "; +$net2ftp_messages["Logging into the FTP server: "] = " FTP "; +$net2ftp_messages["Setting the passive mode: "] = " passive "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " "; +$net2ftp_messages["Closing the connection: "] = " "; +$net2ftp_messages["Raw list of directories and files:"] = " "; +$net2ftp_messages["Parsed list of directories and files:"] = " "; +$net2ftp_messages["OK"] = ""; +$net2ftp_messages["not OK"] = ""; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = " , ."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Please wait..."] = " ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = " \' . . ."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = " ."; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = " , . , FTP ."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = " , net2ftp ."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = " "; +$net2ftp_messages["New file"] = " "; +$net2ftp_messages["HTML templates"] = " HTML"; +$net2ftp_messages["Upload"] = ""; +$net2ftp_messages["Java Upload"] = " Java"; +$net2ftp_messages["Flash Upload"] = " "; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Advanced"] = ""; +$net2ftp_messages["Copy"] = ""; +$net2ftp_messages["Move"] = ""; +$net2ftp_messages["Delete"] = ""; +$net2ftp_messages["Rename"] = " "; +$net2ftp_messages["Chmod"] = ""; +$net2ftp_messages["Download"] = ""; +$net2ftp_messages["Unzip"] = ""; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Search"] = ""; +$net2ftp_messages["Go to the parent directory"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Transform selected entries: "] = " "; +$net2ftp_messages["Transform selected entry: "] = " "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = " "; +$net2ftp_messages["Upload new files in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = " Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = " Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = " ( PHP )"; +$net2ftp_messages["Go to the advanced functions"] = " "; +$net2ftp_messages["Copy the selected entries"] = " "; +$net2ftp_messages["Move the selected entries"] = " "; +$net2ftp_messages["Delete the selected entries"] = " "; +$net2ftp_messages["Rename the selected entries"] = " "; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = " ( Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = " zip "; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = " FTP"; +$net2ftp_messages["Zip the selected entries to save or email them"] = " Zip "; +$net2ftp_messages["Calculate the size of the selected entries"] = " "; +$net2ftp_messages["Find files which contain a particular word"] = " "; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = " %1\$s "; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = " %1\$s "; +$net2ftp_messages["Ascending order"] = " "; +$net2ftp_messages["Descending order"] = " "; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["Up"] = " "; +$net2ftp_messages["Click to check or uncheck all rows"] = " "; +$net2ftp_messages["All"] = ""; +$net2ftp_messages["Name"] = ""; +$net2ftp_messages["Type"] = ""; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Perms"] = ""; +$net2ftp_messages["Mod Time"] = " "; +$net2ftp_messages["Actions"] = ""; +$net2ftp_messages["Select the directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = " symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = " %1\$s"; +$net2ftp_messages["View"] = ""; +$net2ftp_messages["Edit"] = ""; +$net2ftp_messages["Update"] = ""; +$net2ftp_messages["Open"] = ""; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = " %1\$s "; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = " %1\$s HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "( .)"; +$net2ftp_messages["This folder is empty"] = " "; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = ""; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = " FTP "; +$net2ftp_messages["Number"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Skipped"] = " "; +$net2ftp_messages["Data transferred from this IP address today"] = " "; +$net2ftp_messages["Data transferred to this FTP server today"] = " FTP "; + +// printLocationActions() +$net2ftp_messages["Language:"] = " "; +$net2ftp_messages["Skin:"] = " "; +$net2ftp_messages["View mode:"] = " "; +$net2ftp_messages["Directory Tree"] = " "; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s "; +$net2ftp_messages["This file is not accessible from the web"] = " "; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = " "; +$net2ftp_messages["Choose"] = ""; +$net2ftp_messages["Up"] = " "; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = " "; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = " "; +$net2ftp_messages["The number of files which were skipped is:"] = " "; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = " "; +$net2ftp_messages["Set all permissions"] = " "; +$net2ftp_messages["Read"] = ""; +$net2ftp_messages["Write"] = ""; +$net2ftp_messages["Execute"] = " "; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Everyone"] = " "; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = " , \" \""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = " %1\$s "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = " %1\$s "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = " symlink %1\$s "; +$net2ftp_messages["Chmod value"] = " "; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = " "; +$net2ftp_messages["Chmod also the files within this directory"] = " "; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = " nr %1\$s 000-777. ."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Copy directories and files"] = " "; +$net2ftp_messages["Move directories and files"] = " "; +$net2ftp_messages["Delete directories and files"] = " "; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = " "; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = " !"; +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = " ."; +$net2ftp_messages["Different target FTP server:"] = " FTP "; +$net2ftp_messages["Username"] = " "; +$net2ftp_messages["Password"] = " "; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = " FTP ."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = " FTP , ."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = " FTP ."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = " FTP , ."; +$net2ftp_messages["Copy directory %1\$s to:"] = " %1\$s "; +$net2ftp_messages["Move directory %1\$s to:"] = " %1\$s "; +$net2ftp_messages["Directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = " %1\$s "; +$net2ftp_messages["Move file %1\$s to:"] = " %1\$s "; +$net2ftp_messages["File %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = " symlink %1\$s "; +$net2ftp_messages["Move symlink %1\$s to:"] = " symlink %1\$s "; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = " "; +$net2ftp_messages["Target name:"] = " "; +$net2ftp_messages["Processing the entries:"] = " "; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = " 4 "; +$net2ftp_messages["Template overview"] = " "; +$net2ftp_messages["Template details"] = " "; +$net2ftp_messages["Files are copied"] = " "; +$net2ftp_messages["Edit your pages"] = " "; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = " ."; +$net2ftp_messages["Back to the Browse screen"] = " "; +$net2ftp_messages["Template"] = ""; +$net2ftp_messages["Copyright"] = " "; +$net2ftp_messages["Click on the image to view the details of this template"] = " ."; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = " FTP . . "; +$net2ftp_messages["Install template to directory: "] = " "; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Preview page"] = " "; +$net2ftp_messages["opens in a new window"] = " "; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = " "; +$net2ftp_messages["Done."] = " ."; +$net2ftp_messages["Continue"] = ""; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = " "; +$net2ftp_messages["Browse the FTP server"] = " FTP"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = " !"; +$net2ftp_messages["Edit website at %1\$s"] = " %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer \" ...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox \" ...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = " %1\$s . . ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = " %1\$s . ..."; +$net2ftp_messages["Copied file %1\$s"] = " %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = " "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Please specify a filename"] = " "; +$net2ftp_messages["Status: This file has not yet been saved"] = " "; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = " %1\$s %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = " "; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = " "; +$net2ftp_messages["File: "] = " "; +$net2ftp_messages["New file name: "] = " "; +$net2ftp_messages["Character encoding: "] = " "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = " "; +$net2ftp_messages["Copy up"] = " "; +$net2ftp_messages["Copy down"] = " "; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = " "; +$net2ftp_messages["Search again"] = " "; +$net2ftp_messages["Search results"] = " "; +$net2ftp_messages["Please enter a valid search word or phrase."] = " ."; +$net2ftp_messages["Please enter a valid filename."] = " ."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = " \"\" , 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = " \"\" , 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = " \"\" Y-m-d ."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = " \"\" Y-m-d ."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = " %1\$s ."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = " %1\$s "; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = " "; +$net2ftp_messages["Case sensitive search"] = " "; +$net2ftp_messages["Restrict the search to:"] = " "; +$net2ftp_messages["files with a filename like"] = " "; +$net2ftp_messages["(wildcard character is *)"] = "( *)"; +$net2ftp_messages["files with a size"] = " "; +$net2ftp_messages["files which were last modified"] = " "; +$net2ftp_messages["from"] = ""; +$net2ftp_messages["to"] = ""; + +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["File"] = ""; +$net2ftp_messages["Line"] = ""; +$net2ftp_messages["Action"] = ""; +$net2ftp_messages["View"] = ""; +$net2ftp_messages["Edit"] = ""; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = " "; +$net2ftp_messages["Unable to open the template file"] = " "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Unable to get the list of packages"] = " "; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = " net2ftp FTP ."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = " PHP ."; +$net2ftp_messages["In order to run it, click on the link below."] = " ."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = " net2ftp FTP ."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = " URL ."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = " Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = " !"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = " FTP"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = " ."; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = " 3 1 - . 2 - . 3 - ."; +$net2ftp_messages["Download files"] = " "; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = " .
, zip ."; +$net2ftp_messages["Zip files"] = " Zip "; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... zip FTP , ."; +$net2ftp_messages["Unzip files"] = " "; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = " .zip, .tar, .tgz .gz."; +$net2ftp_messages["Install software"] = " "; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = " ( PHP ) ."; +$net2ftp_messages["Copy, move and delete"] = " , , "; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = " ( ) ."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = " FTP"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = " FTP , FTP ."; +$net2ftp_messages["Rename and chmod"] = " "; +$net2ftp_messages["Chmod handles directories recursively."] = " ."; +$net2ftp_messages["View code with syntax highlighting"] = " "; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = " PHP php.net."; +$net2ftp_messages["Plain text editor"] = " "; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = " ."; +$net2ftp_messages["HTML editors"] = " HTML"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = " HTML (WYSIWYG) , , ."; +$net2ftp_messages["Code editor"] = " "; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = " HTML PHP ."; +$net2ftp_messages["Search for words or phrases"] = " "; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = " , ."; +$net2ftp_messages["Calculate size"] = " "; +$net2ftp_messages["Calculate the size of directories and files."] = " ."; + +$net2ftp_messages["FTP server"] = " FTP"; +$net2ftp_messages["Example"] = ""; +$net2ftp_messages["Port"] = ""; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = " "; +$net2ftp_messages["Password"] = " "; +$net2ftp_messages["Anonymous"] = "Anonymous"; +$net2ftp_messages["Passive mode"] = " Passive "; +$net2ftp_messages["Initial directory"] = " "; +$net2ftp_messages["Language"] = ""; +$net2ftp_messages["Skin"] = ""; +$net2ftp_messages["FTP mode"] = " FTP"; +$net2ftp_messages["Automatic"] = ""; +$net2ftp_messages["Login"] = " "; +$net2ftp_messages["Clear cookies"] = " "; +$net2ftp_messages["Admin"] = ""; +$net2ftp_messages["Please enter an FTP server."] = " FTP."; +$net2ftp_messages["Please enter a username."] = " ."; +$net2ftp_messages["Please enter a password."] = " ."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = " ."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = " FTP %1\$s ."; +$net2ftp_messages["Username"] = " "; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = " FTP %1\$s ."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = " IP FTP %1\$s ."; +$net2ftp_messages["Password"] = " "; +$net2ftp_messages["Login"] = " "; +$net2ftp_messages["Continue"] = ""; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = " "; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = " FTP . , ."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = " FTP ."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = " , ."; +$net2ftp_messages["Close"] = ""; +$net2ftp_messages["Click here to close this window"] = " "; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = " "; +$net2ftp_messages["The new directories will be created in %1\$s."] = " %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = " %1\$s !"; +$net2ftp_messages["Directory %1\$s could not be created."] = " %1\$s !"; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = " FTP "; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = " "; +$net2ftp_messages["FTP server response:"] = " FTP "; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = " "; +$net2ftp_messages["Old name: "] = " "; +$net2ftp_messages["New name: "] = " "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = " . %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = " . %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = " %1\$s %2\$s !"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = " %1\$s %2\$s !"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = " "; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = " %1\$s %2\$s FTP"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = " %1\$s FTP"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = " ."; +$net2ftp_messages["Unzip archive %1\$s to:"] = " %1\$s "; +$net2ftp_messages["Target directory:"] = " "; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = " "; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Archives"] = ""; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = " FTP ."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = " FTP ."; +$net2ftp_messages["Add another"] = " "; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Please wait..."] = " ..."; +$net2ftp_messages["Uploading... please wait..."] = " ... ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = " %1\$s <\/b> , / ."; +$net2ftp_messages["This window will close automatically in a few seconds."] = " ."; +$net2ftp_messages["Close window now"] = " "; + +$net2ftp_messages["Upload files and archives"] = " "; +$net2ftp_messages["Upload results"] = " "; +$net2ftp_messages["Checking files:"] = " "; +$net2ftp_messages["Transferring files to the FTP server:"] = " FTP "; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = " FTP "; +$net2ftp_messages["Upload more files and archives"] = " "; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = " "; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = " %1\$s PHP %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = " %1\$s "; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = " FTP (ASCII BINARY) , "; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = " , "; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = " %1\$s"; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = " Macromedia ShockWave %1\$s"; +$net2ftp_messages["Image"] = ""; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = " , ' ...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = " Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = " zip FTP "; +$net2ftp_messages["Email the zip file in attachment to:"] = " zip "; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = " IP ."; +$net2ftp_messages["Some additional comments to add in the email:"] = " "; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = " zip . ."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = " (%1\$s) .
username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/cs.inc.php b/ehcp/net2ftp/languages/cs.inc.php new file mode 100644 index 0000000..5dd58f7 --- /dev/null +++ b/ehcp/net2ftp/languages/cs.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Spustit %1\$s v novm okn"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Vyberte prosm alespo jeden adres nebo soubor!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP server %1\$s nen na seznamu povolench server."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP server %1\$s je na seznamu zakzanch server."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Port %1\$s FTP serveru neme bt pouit."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Vae IP adresa (%1\$s) je na seznamu zakzanch adres."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Nepodailo se zjistit vai IP adresu."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tabulka net2ftp_log_consumption_ipaddress obsahuje duplicitn zznamy."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tabulka net2ftp_log_consumption_ftpserver obsahuje duplicitn zznamy."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Promnn consumption_ipaddress_datatransfer nen seln."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tabulka net2ftp_log_consumption_ipaddress nemohla bt aktualizovna."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tabulka net2ftp_log_consumption_ipaddress obsahuje duplicitn zznamy."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tabulka net2ftp_log_consumption_ftpserver nemohla bt aktualizovna."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tabulka net2ftp_log_consumption_ftpserver obsahuje duplicitn zznamy."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Dolo k chyb"; +$net2ftp_messages["Go back"] = "Pejt zpt"; +$net2ftp_messages["Go to the login page"] = "Pejt na pihlaovac strnku"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nepodailo se pipojit k FTP serveru %1\$s na portu %2\$s.

Vte jist, e se jedn o adresu FTP serveru? Ta se asto li od adresy HTTP (webovho) serveru. Pro zskn pomoci prosm kontaktujte odbornou pomoc svho ISP nebo systmovho administrtora.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nepodailo se pihlsit k FTP serveru %1\$s pod uivatelskm jmnem %2\$s.

Jste si jist, e je uivatelsk jmno a heslo sprvn? Pro zskn pomoci prosm kontaktujte odbornou pomoc svho ISP nebo systmovho administrtora.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Nepodailo se pepnout do pasivnho reimu na FTP serveru %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nepodailo se pipojit ke druhmu (clovmu) FTP serveru %1\$s na portu %2\$s.

.Vte urit, e se jedn o adresu druhho (clovho) FTP serveru? Ta se asto li od adresy HTTP (webovho) serveru. Pro zskn pomoci prosm kontaktujte odbornou pomoc svho ISP nebo systmovho administrtora.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nepodailo se pihlsit ke druhmu (clovmu) FTP serveru %1\$s pod uivatelskm jmnem %2\$s.

. Jste si jisti, e zadan uivatelsk jmno a heslo jsou sprvn? Pro zskn pomoci prosm kontaktujte odbornou pomoc svho ISP nebo systmovho administrtora.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Nepodailo se pepnout do pasivnho reimu na druhm (clovm) FTP serveru %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Nepodailo se pejmenovat adres nebo soubor %1\$s na %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Nepodailo se vykonat serverov pkaz %1\$s. Vezmte prosm na vdom, e pkaz CHMOD je k dispozici pouze na Unixovch FTP serverech a ne na FTP serverech pod Windows."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Prva adrese %1\$s byla v podku zmnna na %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Prva souboru %1\$s byla v podku zmnna na %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Vechny oznaen adrese a soubory byly zpracovny."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Nepodailo se smazat adres %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nepodailo se smazat soubor %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Nepodailo se vytvoit adres %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Nepodailo se vytvoit doasn soubor"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Nepodailo se zskat soubor %1\$s z FTP serveru a uloit ho do doasnho souboru %2\$s.
Zkontrolujte oprvnn adrese %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nepodailo se otevt doasn soubor. Zkontrolujte oprvnn adrese %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Nepodailo se pest doasn soubor"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nepodailo se uzavt doasn soubor"; +$net2ftp_messages["Unable to delete the temporary file"] = "Nepodailo se smazat doasn soubor"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Nepodailo se vytvoit doasn soubor. Zkontrolujte oprvnn adrese %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nepodailo se otevt doasn soubor. Zkontrolujte oprvnn adrese %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Nepodailo se zapsat etzec do doasnho souboru %1\$s.
Zkontrolujte oprvnn adrese %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nepodailo se uzavt doasn soubor"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Nepodailo se nahrt soubor %1\$s na FTP server.
Mon nemte prva zpisu do danho adrese."; +$net2ftp_messages["Unable to delete the temporary file"] = "Nepodailo se smazat doasn soubor"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Zpracovn adrese %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Clov adres %1\$s je stejn jako zdrojov adres %2\$s nebo je jeho podadresem, tento adres proto bude peskoen"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Nepodailo se vytvoit podadres %1\$s. Mon u existuje. Pokrauje se v koprovn/pesouvn..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Nepodailo se smazat podadres %1\$s - mon nen przdn"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Podadres %1\$s byl smazn"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Podadres %1\$s byl smazn"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Zpracovn adrese %1\$s bylo dokoneno"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Clov umstn souboru %1\$s je stejn jako zdrojov, proto bude tento soubor peskoen"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Nepodailo se zkoprovat soubor %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Soubor %1\$s byl pesunut"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nepodailo se smazat soubor %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Soubor %1\$s byl smazn"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Vechny oznaen adrese a soubory byly zpracovny."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Nepodailo se zkoprovat vzdlen soubor %1\$s do mstnho v FTP reimu %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Nepodailo se smazat soubor %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Denn limit dosaen: soubor %1\$s nebude penesen"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Nepodailo se zkoprovat mstn soubor do vzdlenho souboru %1\$s v FTP reimu %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Nepodailo se smazat mstn soubor"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Nepodailo se smazat doasn soubor"; +$net2ftp_messages["Unable to send the file to the browser"] = "Nepodailo se odeslat soubor prohlei"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Nepodailo se vytvoit doasn soubor"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Soubor ZIP byl na FTP server uloen jako %1\$s"; +$net2ftp_messages["Requested files"] = "Poadovan soubory"; + +$net2ftp_messages["Dear,"] = "Ven,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Nkdo podal o posln soubor v ploze na vai e-mailovou adresu (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Pokud o tom nic nevte nebo dotyn osob nedvujete, tak prosm tento e-mail smate, ani byste Zip soubor v ploze otevrali."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Pokud Zip soubor neotevete, nemohou soubory uvnit pokodit v pota."; +$net2ftp_messages["Information about the sender: "] = "Informace o odeslateli: "; +$net2ftp_messages["IP address: "] = "IP adresa: "; +$net2ftp_messages["Time of sending: "] = "as odesln: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Poslno aplikac net2ftp nainstalovanou na tomto webovm serveru: "; +$net2ftp_messages["Webmaster's email: "] = "E-mail webmastera: "; +$net2ftp_messages["Message of the sender: "] = "Zprva odeslatele: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp je voln software, uvolnn pod licenc GNU/GPL. Pro vce informac navtivte http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Soubor ZIP byl odesln na adresu %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Soubor %1\$s je moc velk. Tento soubor nebude nahrn."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Nepodailo se vytvoit doasn soubor."; +$net2ftp_messages["File %1\$s could not be moved"] = "Soubor %1\$s neme bt pesunut"; +$net2ftp_messages["File %1\$s is OK"] = "Soubor %1\$s je v podku"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Nepodailo se pesunout nahran soubor do doasnho adrese.

Administrtor tohoto webovho serveru mus na adres net2ftp /temp provst chmod 777."; +$net2ftp_messages["You did not provide any file to upload."] = "Neposkytl jste dn soubor, kter se m nahrt"; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Soubor %1\$s nemohl bt penesen na FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Soubor %1\$s byl na FTP server penesen v reimu %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Penen soubor na FTP server"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Zpracovn archivu . %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archiv %1\$s nebyl zpracovn, protoe pponu jeho souboru se nepodailo rozpoznat. Momentln jsou podporovny pouze archivy zip, tar, tgz a gz."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Nepodailo se vykonat pkaz serveru %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Vae loha byla zastavena"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "loha, kterou jste chtli pomoc net2ftp provst, trvala vce ne povolench %1\$s sekund, a proto byla zastavena."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Tento asov limit zaruuje spravedliv vyuit webovho serveru vemi uivateli."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Pokuste se vae lohy rozdlit na men sti: omezte vbr soubor a vynechejte ty nejvt."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Pokud opravdu potebujete, aby net2ftp dokzalo zpracovat nron dlouhotrvajc lohy, zvate instalaci net2ftp na vlastnm serveru."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Neuvedl jste dn text, kter by se ml poslat e-mailem!"; +$net2ftp_messages["You did not supply a From address."] = "Neuvedl jste adresu odeslatele."; +$net2ftp_messages["You did not supply a To address."] = "Neuvedl jste adresu pjemce."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Kvli technickm problmm nebylo mon odeslat e-mail na adresu %1\$s."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Prosm zadejte sv pihlaovac jmno a heslo k FTP serveru "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Nevyplnili jste pihlaovac informace do vyskakovacho oknka.
Ne kliknte na \"Pejt na pihlaovac strnku\"."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Pstup k Administranmu panelu net2ftp je zakzan, protoe v souboru settings.inc.php nebylo nastaveno dn heslo. Vlote heslo do tohoto souboru a aktualizujte tuto strnku."; +$net2ftp_messages["Please enter your Admin username and password"] = "Zadejte prosm sv administrtorsk uivatelsk jmno a heslo"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Nevyplnili jste pihlaovac informace do vyskakovacho oknka.
Ne kliknte na \"Pejt na pihlaovac strnku\"."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "ptan uivatelsk jmno nebo heslo pro Administran panel net2ftp. Uivatelsk jmno a heslo me bt nastaveno v souboru settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Modr"; +$net2ftp_messages["Grey"] = "ed"; +$net2ftp_messages["Black"] = "ern"; +$net2ftp_messages["Yellow"] = "lut"; +$net2ftp_messages["Pastel"] = "Pastelov"; + +// getMime() +$net2ftp_messages["Directory"] = "Adres"; +$net2ftp_messages["Symlink"] = "Symlink" ; +$net2ftp_messages["ASP script"] = "ASP skript"; +$net2ftp_messages["Cascading Style Sheet"] = "Kaskdov styl"; +$net2ftp_messages["HTML file"] = "HTML soubor"; +$net2ftp_messages["Java source file"] = "Zdrojov soubor Java"; +$net2ftp_messages["JavaScript file"] = "soubor JavaScript"; +$net2ftp_messages["PHP Source"] = "PHP zdrojov kd"; +$net2ftp_messages["PHP script"] = "PHP skript"; +$net2ftp_messages["Text file"] = "Textov soubor"; +$net2ftp_messages["Bitmap file"] = "Bitmapa"; +$net2ftp_messages["GIF file"] = "Obrzek GIF"; +$net2ftp_messages["JPEG file"] = "Obrzek JPEG"; +$net2ftp_messages["PNG file"] = "Obrzek PNG"; +$net2ftp_messages["TIF file"] = "Obrzek TIF"; +$net2ftp_messages["GIMP file"] = "Obrzek GIMP"; +$net2ftp_messages["Executable"] = "Spustiteln soubor"; +$net2ftp_messages["Shell script"] = "Shellovsk skript"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - dokument Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - tabulka Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - prezentace PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - databze Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - kresba Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - projekt aplikace Project"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - dokument Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - ablona Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - tabulka Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - ablona Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - dokument Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - ablona Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - prezentace Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - ablona Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - globln dokument Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - dokument Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - dokument StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - globln dokument StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - tabulka StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - dokument StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - prezentace StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - soubor StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - dokument StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - dokument StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - soubor poty StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = "dokument Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "Archiv ARC"; +$net2ftp_messages["ARJ archive"] = "Archiv ARJ"; +$net2ftp_messages["RPM"] = "RPM" ; +$net2ftp_messages["GZ archive"] = "Archiv GZ"; +$net2ftp_messages["TAR archive"] = "Archiv TAR"; +$net2ftp_messages["Zip archive"] = "Archiv Zip"; +$net2ftp_messages["MOV movie file"] = "Video MOV"; +$net2ftp_messages["MPEG movie file"] = "Video MPEG"; +$net2ftp_messages["Real movie file"] = "Video Real"; +$net2ftp_messages["Quicktime movie file"] = "Video Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave Flash"; +$net2ftp_messages["Shockwave file"] = "Soubor Shockwave"; +$net2ftp_messages["WAV sound file"] = "Zvuk WAV"; +$net2ftp_messages["Font file"] = "Soubor fontu"; +$net2ftp_messages["%1\$s File"] = "Soubor %1\$s"; +$net2ftp_messages["File"] = "Soubor"; + +// getAction() +$net2ftp_messages["Back"] = "Zpt"; +$net2ftp_messages["Submit"] = "Odeslat"; +$net2ftp_messages["Refresh"] = "Obnovit"; +$net2ftp_messages["Details"] = "Detaily"; +$net2ftp_messages["Icons"] = "Ikony"; +$net2ftp_messages["List"] = "Seznam"; +$net2ftp_messages["Logout"] = "Odhlsit"; +$net2ftp_messages["Help"] = "Npovda"; +$net2ftp_messages["Bookmark"] = "Oblben"; +$net2ftp_messages["Save"] = "Uloit"; +$net2ftp_messages["Default"] = "Vchoz"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licence"; +$net2ftp_messages["Powered by"] = "B dky"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Administrtorsk funkce"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Informace o verzi"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Zznamy"; +$net2ftp_messages["Date from:"] = "Datum od:"; +$net2ftp_messages["to:"] = "do:"; +$net2ftp_messages["Empty logs"] = "Vyprzdnit zznamy"; +$net2ftp_messages["View logs"] = "Zobrazit zznamy"; +$net2ftp_messages["Go"] = "OK"; +$net2ftp_messages["Setup MySQL tables"] = "Nastavit MySQL tabulky"; +$net2ftp_messages["Create the MySQL database tables"] = "Vytvoit databzov MySQL tabulky"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Administrtorsk funkce"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL uivatelsk jmno"; +$net2ftp_messages["MySQL password"] = "MySQL heslo"; +$net2ftp_messages["MySQL database"] = "MySQL databze"; +$net2ftp_messages["MySQL server"] = "MySQL server" ; +$net2ftp_messages["This SQL query is going to be executed:"] = "Vykon se tento SQL dotaz:"; +$net2ftp_messages["Execute"] = "Sputn"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Pouit nastaven:"; +$net2ftp_messages["MySQL password length"] = "Dlka MySQL hesla"; +$net2ftp_messages["Results:"] = "Vsledky:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrtorsk funkce"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "dn data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrtorsk funkce"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Tabulka %1\$s byla spn vyprzdnna."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Nepodailo se vyprzdnit tabulku %1\$s."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Pokroil funkce"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "OK"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Funkce pro odstraovn problm"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "een problm net2ftp na tomto webovm serveru"; +$net2ftp_messages["Troubleshoot an FTP server"] = "een problm FTP serveru"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Pekladatelsk funkce"; +$net2ftp_messages["Introduction to the translation functions"] = "vod k pekladatelskm funkcm"; +$net2ftp_messages["Extract messages to translate from code files"] = "Zskat zprvy k peklady ze zdrojovch soubor"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Zkontrolovat ptomnost novch nebo zastaralch zprv"; + +$net2ftp_messages["Beta functions"] = "Beta funkce"; +$net2ftp_messages["Send a site command to the FTP server"] = "Poslat serverov pkaz FTP serveru"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: chrnit adres heslem, vytvoit vlastn chybov strnky"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: spustit SQL dotaz"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Funkce ovldn serveru nejsou na tomto webovm serveru k dispozici."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Funkce Apache nejsou na tomto webovm serveru k dispozici."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Funkce MySQL nejsou na tomto webovm serveru k dispozici."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Neoekvan stavov etzec 2. Konm."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "een problm FTP serveru"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Nastaven pipojen:"; +$net2ftp_messages["FTP server"] = "FTP server" ; +$net2ftp_messages["FTP server port"] = "Port FTP serveru"; +$net2ftp_messages["Username"] = "Uivatelsk jmno"; +$net2ftp_messages["Password"] = "Heslo"; +$net2ftp_messages["Password length"] = "Dlka hesla"; +$net2ftp_messages["Passive mode"] = "Pasivn reim"; +$net2ftp_messages["Directory"] = "Adres"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Pipojovn k FTP serveru: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logovn na FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Nastavovn pasivnho reimu: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Zskvn typu systmu FTP serveru: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Zmna adrese na %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Adres z FTP serveru je: %1\$s"; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Zskvn syrovho seznamu adres a soubor: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Druh pokus zskn syrovho seznamu adres a soubor: "; +$net2ftp_messages["Closing the connection: "] = "Zavrn pipojen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Syrov seznam adres a soubor:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Zpracovan seznam adres a soubor:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "een problm va instalace net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Kontrolovn ptomnosti FTP modulu PHP: "; +$net2ftp_messages["yes"] = "ano"; +$net2ftp_messages["no - please install it!"] = "ne - prosm nainstalujte ho"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Kontrolovn prv adrese na webovm serveru: do /temp bude zapsn a nsledn smazn mal soubor."; +$net2ftp_messages["Creating filename: "] = "Vytven souboru: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Soubor: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "nen OK. Zkontrolujte oprvnn adrese %1\$s."; +$net2ftp_messages["Opening the file in write mode: "] = "Otevrn souboru v reimu zpisu: "; +$net2ftp_messages["Writing some text to the file: "] = "Zapisovn njakho textu do souboru: "; +$net2ftp_messages["Closing the file: "] = "Zavrn souboru: "; +$net2ftp_messages["Deleting the file: "] = "Mazn souboru: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Pipojovn k FTP serveru: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logovn na FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Nastavovn pasivnho reimu: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Zskvn typu systmu FTP serveru: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Zmna adrese na %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Adres z FTP serveru je: %1\$s"; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Zskvn syrovho seznamu adres a soubor: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Druh pokus zskn syrovho seznamu adres a soubor: "; +$net2ftp_messages["Closing the connection: "] = "Zavrn pipojen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Syrov seznam adres a soubor:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Zpracovan seznam adres a soubor:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Poznmka: Kdy pouijete tento odkaz, zept se vs vyskakovac oknko na uivatelsk jmno a heslo."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Vyberte adres"; +$net2ftp_messages["Please wait..."] = "Prosm ekejte..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Adrese, jejich jmno obsahuje \', nemohou bt korektn zobrazeny. Mohou bt pouze smazny. Prosm vrate se zpt a vyberte jin jin podadres."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Denn limit byl dosaen: nebudete moci penet data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Pro zajitn spravedlivho uvn webovho serveru kmkoliv je objem peneench dat a asu sputn skript omezen pro kadou dvojici uivatel - den. Jakmile je tento limit dosaen, mete prochzet FTP server, ale u na nj ani z nj nemete penet data."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Pokud potebujete neomezen pouit, tak prosm net2ftp nainstalujte na vlastn webov server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nov adres"; +$net2ftp_messages["New file"] = "Nov soubor"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Nahrt"; +$net2ftp_messages["Java Upload"] = "Java Nahrt"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Pokroil"; +$net2ftp_messages["Copy"] = "Koprovat"; +$net2ftp_messages["Move"] = "Pesunout"; +$net2ftp_messages["Delete"] = "Smazat"; +$net2ftp_messages["Rename"] = "Pejmenovat"; +$net2ftp_messages["Chmod"] = "Prva"; +$net2ftp_messages["Download"] = "Sthnout"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip" ; +$net2ftp_messages["Size"] = "Velikost"; +$net2ftp_messages["Search"] = "Vyhledat"; +$net2ftp_messages["Go to the parent directory"] = "Pejt do nadazenho adrese"; +$net2ftp_messages["Go"] = "OK"; +$net2ftp_messages["Transform selected entries: "] = "Zmnit vybran poloky: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Vytvoit nov podadres v adresi %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Vytvoit nov soubor v adresi %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Nahrt nov soubory do adrese %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Pejt na pokroil funkce"; +$net2ftp_messages["Copy the selected entries"] = "Zkoprovat vybran poloky"; +$net2ftp_messages["Move the selected entries"] = "Pesunout vybran poloky"; +$net2ftp_messages["Delete the selected entries"] = "Smazat vybran poloky"; +$net2ftp_messages["Rename the selected entries"] = "Pejmenovat vybran poloky"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Zmnit prva u vybranch poloek (funguje pouze na serverech Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Sthnout ZIP soubor obsahujc vechny vybran poloky"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zazipovat vybran poloky a uloit nebo poslat e-mailem"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Spotat velikost vybranch poloek"; +$net2ftp_messages["Find files which contain a particular word"] = "Najt soubory obsahujc zadan slovo"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Kliknte pro sestupn setdn podle sloupce %1\$s."; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Kliknte pro vzestupn setdn podle sloupce %1\$s."; +$net2ftp_messages["Ascending order"] = "Vzestupn tdn"; +$net2ftp_messages["Descending order"] = "Sestupn tdn"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Ve"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Pepnout zakrtnut vech dek"; +$net2ftp_messages["All"] = "Ve"; +$net2ftp_messages["Name"] = "Nzev"; +$net2ftp_messages["Type"] = "Typ"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Vlastnk"; +$net2ftp_messages["Group"] = "Skupina"; +$net2ftp_messages["Perms"] = "Prva"; +$net2ftp_messages["Mod Time"] = "as zmny"; +$net2ftp_messages["Actions"] = "Akce"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Sthnout soubor %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Zobrazit"; +$net2ftp_messages["Edit"] = "Upravit"; +$net2ftp_messages["Update"] = "Aktualizovat"; +$net2ftp_messages["Open"] = "Otevt"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Zobrazit zvraznn zdrojov kd souboru %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Upravit zdrojov kd souboru %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Nahrt novou verzi souboru %1\$s a slouit zmny"; +$net2ftp_messages["View image %1\$s"] = "Zobrazit obrzek %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Zobrazit soubor %1\$s z vaeho HTTP webovho serveru"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Poznmka: tento odkaz nemus fungovat, pokud nemte vlastn domnu.)"; +$net2ftp_messages["This folder is empty"] = "Tento adres je przdn"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Adrese"; +$net2ftp_messages["Files"] = "Soubory"; +$net2ftp_messages["Symlinks"] = "Symlinky"; +$net2ftp_messages["Unrecognized FTP output"] = "Nerozpoznan FTP vstup"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Velikost"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Jazyk:"; +$net2ftp_messages["Skin:"] = "Motiv:"; +$net2ftp_messages["View mode:"] = "Reim zobrazen:"; +$net2ftp_messages["Directory Tree"] = "Strom adres"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Spustit %1\$s v novm okn"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Poklepejte pro pechod do podadrese:"; +$net2ftp_messages["Choose"] = "Vybrat"; +$net2ftp_messages["Up"] = "Ve"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Velikost vybranch adres a soubor"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Celkov velikost vybranch adres a soubor je:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Zmnit prva adresm a souborm"; +$net2ftp_messages["Set all permissions"] = "Nastavit vechna prva"; +$net2ftp_messages["Read"] = "ten"; +$net2ftp_messages["Write"] = "Zpis"; +$net2ftp_messages["Execute"] = "Sputn"; +$net2ftp_messages["Owner"] = "Vlastnk"; +$net2ftp_messages["Group"] = "Skupina"; +$net2ftp_messages["Everyone"] = "Kdokoliv"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Pokud chcete nastavit vechna prva na stejnou hodnotu, zadejte tato prva ve a stisknte tlatko \"Nastavit vechna prva\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Nastavit prva adrese %1\$s na: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Nastavit prva souboru %1\$s na: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Nastavit prva symlinku %1\$s na: "; +$net2ftp_messages["Chmod value"] = "Hodnota pro chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Zmnit prva tak vem podadresm v tomto adresi"; +$net2ftp_messages["Chmod also the files within this directory"] = "Zmnit prva tak vem souborm v tomto adresi"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "slo pro chmod %1\$s je mimo rozsah 000-777. Zkuste to prosm znovu."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Vyberte adres"; +$net2ftp_messages["Copy directories and files"] = "Koprovat adrese a soubory"; +$net2ftp_messages["Move directories and files"] = "Pesunout adrese a soubory"; +$net2ftp_messages["Delete directories and files"] = "Smazat adrese a soubory"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Jste si jist, e chcete smazat tyto adrese a soubory?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Ve vybranch adresch budou smazny tak vechny podadrese a soubory!"; +$net2ftp_messages["Set all targetdirectories"] = "Nastavit vechny clov adrese"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Pokud chcete nastavit obvykl clov adres, zadejte ho do textovho polka ve a stisknte tlatko \"Nastavit vechny clov adrese\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Poznmka: clov adres mus existovat dve, ne do nj bude cokoliv zkoprovno."; +$net2ftp_messages["Different target FTP server:"] = "Jin clov FTP server:"; +$net2ftp_messages["Username"] = "Uivatelsk jmno"; +$net2ftp_messages["Password"] = "Heslo"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Nechte przdn, pokud chcete soubory zkoprovat na stejn FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Pokud chcete soubory zkoprovat na jin FTP server, zadejte vae pihlaovac daje."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Nechte przdn, pokud chcete soubory pesunout na stejn FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Pokud chcete soubory pesunout na jin FTP server, zadejte vae pihlaovac daje."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Zkoprovat adres %1\$s do:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Pesunout adres %1\$s do:"; +$net2ftp_messages["Directory %1\$s"] = "Adres %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Zkoprovat soubor %1\$s do:"; +$net2ftp_messages["Move file %1\$s to:"] = "Pesunout soubor %1\$s do:"; +$net2ftp_messages["File %1\$s"] = "Soubor %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Zkoprovat symlink %1\$s do:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Pesunout symlink %1\$s do:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s" ; +$net2ftp_messages["Target directory:"] = "Clov adres:"; +$net2ftp_messages["Target name:"] = "Clov jmno:"; +$net2ftp_messages["Processing the entries:"] = "Zpracovn poloek:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Velikost"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: kliknte na odkaz pravm tlatkem myi a vyberte \"Pidat k oblbenm polokm...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Nepodailo se otevt soubor se ablonami"; +$net2ftp_messages["Unable to read the template file"] = "Nepodailo se nast soubor se ablonami"; +$net2ftp_messages["Please specify a filename"] = "Vyberte prosm soubor"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Stav: Tento soubor jet nebyl uloen"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Stav: Uloen %1\$s v mdu %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Stav: Tento soubor neme bt uloen"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Adres: "; +$net2ftp_messages["File: "] = "Soubor: "; +$net2ftp_messages["New file name: "] = "Nov nzev souboru: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Poznmka: zmnn textovho pole ulo zmny"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Prohledat adrese a soubory"; +$net2ftp_messages["Search again"] = "Hledat znovu"; +$net2ftp_messages["Search results"] = "Vsledky vyhledvn"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Zadejte prosm platn slovo nebo slovn spojen pro vyhledvn."; +$net2ftp_messages["Please enter a valid filename."] = "Zadejte prosm platn jmno souboru."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Zadejte prosm platnou velikost souboru do textovho pole \"od\", napklad 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Zadejte prosm platnou velikost souboru do textovho pole \"do\", napklad 50000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Zadejte prosm platn datum ve formtu Y-m-d do textovho pole \"od\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Zadejte prosm platn datum ve formtu Y-m-d do textovho pole \"do\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Slovo %1\$s nebylo ve vybranch adresch a souborech nalezeno."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Slovo %1\$s bylo nalezeno v tchto souborech:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Hledat slovo nebo slovn spojen"; +$net2ftp_messages["Case sensitive search"] = "Rozliovat velikost psmen"; +$net2ftp_messages["Restrict the search to:"] = "Omezit vyhledvn na:"; +$net2ftp_messages["files with a filename like"] = "soubory se jmnem vyhovujcmu"; +$net2ftp_messages["(wildcard character is *)"] = "(zstupn znak je *)"; +$net2ftp_messages["files with a size"] = "soubory s velikost"; +$net2ftp_messages["files which were last modified"] = "soubory, kter byly naposledy zmnny"; +$net2ftp_messages["from"] = "od"; +$net2ftp_messages["to"] = "do"; + +$net2ftp_messages["Directory"] = "Adres"; +$net2ftp_messages["File"] = "Soubor"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Zobrazit"; +$net2ftp_messages["Edit"] = "Upravit"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Zobrazit zvraznn zdrojov kd souboru %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Upravit zdrojov kd souboru %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Nepodailo se otevt soubor se ablonami"; +$net2ftp_messages["Unable to read the template file"] = "Nepodailo se nast soubor se ablonami"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP server" ; +$net2ftp_messages["Example"] = "Pklad"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Uivatelsk jmno"; +$net2ftp_messages["Password"] = "Heslo"; +$net2ftp_messages["Anonymous"] = "Anonymn"; +$net2ftp_messages["Passive mode"] = "Pasivn reim"; +$net2ftp_messages["Initial directory"] = "Vchoz adres"; +$net2ftp_messages["Language"] = "Jazyk"; +$net2ftp_messages["Skin"] = "Motiv"; +$net2ftp_messages["FTP mode"] = "FTP md"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Pihlsit"; +$net2ftp_messages["Clear cookies"] = "Vymazat cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Uivatelsk jmno"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Heslo"; +$net2ftp_messages["Login"] = "Pihlsit"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Vytvoit nov adrese"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Nov adrese budou vytvoen v %1\$s."; +$net2ftp_messages["New directory name:"] = "Jmno novho adrese:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Adres %1\$s byl v podku vytvoen."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Pejmenovat adrese nebo soubory"; +$net2ftp_messages["Old name: "] = "Star jmno: "; +$net2ftp_messages["New name: "] = "Nov jmno: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Nov jmno nesm obsahovat dn teky. Tato poloka byla pejmenovna na %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s byl spn pejmenovn na %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s nemohl bt pejmenovn na %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Nastavit vechny clov adrese"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Pokud chcete nastavit obvykl clov adres, zadejte ho do textovho polka ve a stisknte tlatko \"Nastavit vechny clov adrese\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Poznmka: clov adres mus existovat dve, ne do nj bude cokoliv zkoprovno."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Clov adres:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Pout jmna adres (automaticky vytvoit podadrese)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Nahrt do adrese:"; +$net2ftp_messages["Files"] = "Soubory"; +$net2ftp_messages["Archives"] = "Archiv"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Zde zadan soubory budou penesen na FTP server."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Zde zadan archivy budou rozbaleny a soubory uvnit budou peneseny na FTP server."; +$net2ftp_messages["Add another"] = "Pidat dal"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Pout jmna adres (automaticky vytvoit podadrese)"; + +$net2ftp_messages["Choose a directory"] = "Vyberte adres"; +$net2ftp_messages["Please wait..."] = "Prosm ekejte..."; +$net2ftp_messages["Uploading... please wait..."] = "Nahrvm... prosm ekejte..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Pokud nahrn bude trvat dle ne povolench %1\$s sekund<\/b>, muste to zkusit znovu s mn nebo menmi soubory."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Toto okno se za nkolik vtein automaticky zave."; +$net2ftp_messages["Close window now"] = "Zavt okno hned"; + +$net2ftp_messages["Upload files and archives"] = "Nahrt soubory a archivy"; +$net2ftp_messages["Upload results"] = "Vsledky nahrn"; +$net2ftp_messages["Checking files:"] = "Kontroluji soubory:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Penen soubor na FTP server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Rozbalovn archiv a penen soubor na FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Nahrt vce soubor a archiv"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Omezen:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Maximln velikost jednoho souboru je v net2ftp omezena na %1\$s a v PHP na %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Maximln as provdn je %1\$s sekund"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "Reim FTP penosu (ASCII nebo BINARY) bude automaticky nastaven podle koncovky"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Pokud clov soubor existuje, bude pepsn"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Zobrazit soubor %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Zobrazit obrzek %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Prohldnout si klip Macromedia ShockWave Flash %1\$s"; +$net2ftp_messages["Image"] = "Obrzek"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Pokud chcete uloit obrzek, tak na nj kliknte pravm tlatkem myi a zvolte 'Uloit obrzek jako...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zazipovat poloky"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Uloit zip na FTP serveru jako:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Poslat zip v ploze e-mailem na:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Vezmte prosm na vdom, e penen soubor nen anonymn: do e-mailu bude pidna vae IP adresa a as odesln."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Dal koment, kter chcete pipojit k e-mailu:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Nezadali jste jmno zip souboru. Vrate se zpt a zadejte jmno souboru."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Zd se, e e-mailov adresa, kterou jste zadal (%1\$s), nen platn.
Zadejte prosm adresu ve formtu uzivatel@domena.cz"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/da-utf.inc.php b/ehcp/net2ftp/languages/da-utf.inc.php new file mode 100644 index 0000000..fe78aab --- /dev/null +++ b/ehcp/net2ftp/languages/da-utf.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Mappen %1\$s findes enten ikke, eller kunne ikke hentes, mappen %2\$s vises i stedet for."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Rodmappen %1\$s findes enten ikke eller kunne ikke hentes."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Mappen %1\$s kunne ikke hentes - du har måske ikke tilstrækkelige rettigheder for at se denne mappe, eller også findes mappen ikke."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Mapper og filer der indeholder blokkerede nøgleord kan ikke håndteres i net2ftp. Dette er for at undgå misbrug med bl.a. Paypal eller Ebay."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Filer som er for store kan ikke downloades, uploades, kopieres, flyttes, gennemsøges, komprimeres, udpakkes, vises eller redigeres. De kan kun omdøbes, slettes eller du kan rette filens chmod-rettigheder."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Kør %1\$s i et nyt vindue"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Vælg mindst en mappe eller fil!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP serveren %1\$s er ikke på listen over tilladte FTP servere."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP serveren %1\$s er på listen over blokerede FTP servere."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP serverporten: %1\$s kan ikke benyttes."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Din IP adresse (%1\$s) er ikke på listen over tilladte IP adresser."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Din IP adresse (%1\$s) er på listen over blokerede IP adresser."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Tabellen net2ftp_users Indeholder dubletter."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Du fik ikke indtastet dit brugernavn eller din adgangskode."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Forkert brugernavn eller adgangskode. Prøv igen."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Kan ikke afgøre din IP adresses ophav."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tabellen net2ftp_log_consumption_ipaddress indeholder dubletter."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tabellen net2ftp_log_consumption_ftpserver indeholder dubletter."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Variablen consumption_ipaddress_datatransfer er ikke nummerisk."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tabellen net2ftp_log_consumption_ipaddress kunne ikke opdateres."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tabellen net2ftp_log_consumption_ipaddress indeholder dubletter."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tabellen net2ftp_log_consumption_ftpserver kunne ikke opdateres."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tabellen net2ftp_log_consumption_ftpserver indeholder dubletter."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Tabellen net2ftp_log_access kunne ikke opdateres."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Tabellen net2ftp_log_access indeholder dubletter."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kan ikke få forbindelse til MySQL databasen. Kontrollér dine MySQL indstillinger i net2ftp's konfigurationsfil settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kan ikke vælge MySQL databasen. Kontrollér dine MySQL indstillinger i net2ftp's konfigurationsfil settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "En fejl er opstået"; +$net2ftp_messages["Go back"] = "Tilbage"; +$net2ftp_messages["Go to the login page"] = "Gå til login siden"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Kan ikke få forbindelse til FTP serveren %1\$s via port %2\$s.

Kontroller at dette er den rigtige adresse til FTP serveren. Denne er ofte forskellig fra HTTP (web) serveren. Kontakt din udbyders helpdesk eller administrator for yderligere hjælp.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Kan ikke logge på FTP serveren %1\$s med brugernavnet %2\$s.

Kontroller om brugernavn og adgangskode er korrekt indtastet. Kontakt din udbyders helpdesk eller administrator for yderligere hjælp.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Kan ikke skifte til passiv modus på FTP serveren %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Kan ikke skabe forbindelse til FTP serveren %1\$s via port %2\$s.

Kontrollér adressen for FTP serveren? Denne er ofte forskellig fra HTTP (web) serveren. Kontakt din udbyders helpdesk eller administrator for yderligere hjælp.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Kan ikke logge på FTP serveren %1\$s med brugernavnet %2\$s.

Kontrollér at dette er det rigtige brugernavn og adgangskode for denne server. Kontakt din udbyders helpdesk eller administrator for yderligere hjælp.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Kan ikke skifte til passiv modus på FTP serveren %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Kan ikke omdøbe mappen eller filen %1\$s til %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Kan ikke udføre site command %1\$s. Bemærk at CHMOD kommandoen kun er tilgængelig på Unix FTP servere, ikke på Windows FTP servere."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Mappen %1\$s blev chmodded til %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Filen %1\$s blev chmodded til %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle de valgte mapper og filer er bearbejdet."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Kan ikke slette mappen %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Kan ikke slette filen %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Kan ikke oprette mappen %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Kan ikke oprette den midlertidige fil"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Kan ikke hente filen %1\$s fra FTP serveren og gemme den som den midlertidig fil %2\$s.
Kontrollér rettighederne for mappen %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Kan ikke åbne den midlertidige fil. Kontrollér rettighederne for mappen %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Kan ikke læse den midlertidige fil"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Kan ikke lukke den midlertidige fils handle"; +$net2ftp_messages["Unable to delete the temporary file"] = "Kan ikke slette den midlertidige fil"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Kan ikke oprette den midlertidige fil. Kontrollér rettighederne for mappen %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Kan ikke åbne den midlertidige fil. Kontrollér rettighederne for mappen %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Kan ikke skrive strengen til den midlertidige fil %1\$s.
Kontrollér rettighederne for mappen %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Kan ikke lukke den midlertidige fils handle"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Kan ikke sende filen %1\$s til FTP serveren.
Du har muligvis ikke skriverettigheder for denne mappe."; +$net2ftp_messages["Unable to delete the temporary file"] = "Kan ikke slette den midlertidige fil"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Behandler mappen %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Destinationen %1\$s er den samme mappe eller en undermappe til den oprindelige mappe %2\$s, denne mappe springes over"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "Mappen %1\$s indeholder et blokeret nøgleord. Denne mappe springes over"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "Mappen %1\$s indeholder et blokeret nøgleord. Afbryder flytning"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Kan ikke oprette undermappen %1\$s. Den findes måske allerede. Fortsætter kopiering/flytning..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Oprettede undermappen %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Mappen %1\$s kunne ikke vælges. Denne mappe springes over"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Kan ikke slette undermappen %1\$s - den er måske ikke tom"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Slettede undermappen %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Slettede undermappen %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Behandling af mappen %1\$s færdig"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Destinationen for filen %1\$s er den samme som den oprindelige mappe. Denne fil springes over"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Filen %1\$s indeholder et blokeret nøgleord. Denne fil springes over"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Filen %1\$s indeholder et blokeret nøgleord. Afbryder flytning"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Filen %1\$s er for stor til at blive kopieret. Denne fil springes over"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Filen %1\$s er for stor til at blive flyttet. Afbryder flytning"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Kan ikke kopiere filen %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Kopierede filen %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Kan ikke flytte filen %1\$s. Afbryder flytning"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Flyttede filen %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Kan ikke slette filen %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Slettede filen %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle de valgte mapper og filer er bearbejdet."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Kan ikke kopiere den fjerne fil %1\$s til den lokale fil via FTP modus %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Unable to delete file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Filen er for stor til at blive sendt"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daglig grænse nået: filen %1\$s bliver ikke overført"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Kan ikke kopiere den lokale fil til den fjerne fil %1\$s via FTP modus %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Kan ikke slette den lokale fil"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Kan ikke slette den midlertidige fil"; +$net2ftp_messages["Unable to send the file to the browser"] = "Kan ikke sende filen til browseren"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Kan ikke oprette den midlertidige fil"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Arkivet er gemt på FTP serveren med navnet %1\$s"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Kære,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Nogen har bedt om at de vedhæftede filer i denne mail skulle sendes til denne e-mail adresse (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Hvis du ikke kender til dette eller hvis du ikke har tillid til afsenderen så slet denne e-mail og lad være med at åbne det vedhæftede arkiv."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Bemærk: Hvis du ikke åbner arkiverne så kan filerne i arkivet ikke skade din computer."; +$net2ftp_messages["Information about the sender: "] = "Information om afsenderen: "; +$net2ftp_messages["IP address: "] = "IP addresse: "; +$net2ftp_messages["Time of sending: "] = "Afsendelsestidspunkt: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sendt via net2ftp programmet installeret på dette website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmasterens e-mail: "; +$net2ftp_messages["Message of the sender: "] = "Afsenderens meddelelse: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp er gratis software der er udgivet under GNU/GPL licensen. For yderligere information, gå til http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Arkivet er blevet sendt til %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Filen %1\$s er for stor. Denne fil bliver ikke uploadet."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Filen %1\$s indeholder blokerede nøgleord. Denne fil bliver ikke uploadet."; +$net2ftp_messages["Could not generate a temporary file."] = "Kan ikke oprette en midlertidig fil."; +$net2ftp_messages["File %1\$s could not be moved"] = "Filen %1\$s kunne ikke flyttes"; +$net2ftp_messages["File %1\$s is OK"] = "Filen %1\$s er OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Kan ikke flytte den uploadede fil til den midlertidige mappe.

Administratoren af denne webside skal sætte rettighederne for /temp mappen i net2ftp tilchmod 777."; +$net2ftp_messages["You did not provide any file to upload."] = "Du skal vælge de filer der skal uploades."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Filen %1\$s kunne ikke overføres til FTP serveren"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Filen %1\$s blev overført til FTP servern via FTP modus %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Overfører filer til FTP serveren"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Behandler arkiv nr. %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Arkivet %1\$s blev ikke behandlet fordi filtypen ikke blev genkendt. Kun zip, tar, tgz og gz arkiver understøttes i øjeblikket."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Kan ikke udpakke filer og mapper fra arkivet"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Arkiv indeholder filnavne med ../ eller ..\\ - afbryder udpakning"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Oprettede mappen %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Kan ikke oprette mappen %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Kopierede fil %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Kan ikke kopiere filen %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Kan ikke slette den midlertidige mappe"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Kan ikke slette den midlertidige fil %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Kan ikke udføre site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Handlingen blev afbrudt"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Handlingen du var i gang med at udføre på net2ftp tog længere tid end de tilladte %1\$s sekunder og blev derfor stoppet."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Denne tidsbegrænsning sikrer at fair forbrug af serverens ressourcer for alle brugere."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Prøv at dele din handling op i mindre handlinger: begræns dit udvalg af filer og undgå de største filer."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Hvis du har behov for at net2ftp skal udføre handlinger der tager længere tid burde du overveje at installere net2ftp på din egen server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Du har ikke angivet noget tekst der skal sendes via e-mail!"; +$net2ftp_messages["You did not supply a From address."] = "Du har ikke angivet en Fra adresse."; +$net2ftp_messages["You did not supply a To address."] = "Du har ikke angivet en Til adresse."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Tekniske problemer forhindrede afsendelsen af e-mailen %1\$s."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Kan ikke udføre SQL forespørgsel."; +$net2ftp_messages["Unable to open the system log."] = "Kan ikke åbne system loggen."; +$net2ftp_messages["Unable to write a message to the system log."] = "Kan ikke skrive i system loggen."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Indtast dit brugernavn og adgangskode til FTP serveren "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Du fik ikke udfyldt login informationerne i popup vinduet.
Klik på \"Gå til login siden\" herunder."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Adgang til net2ftp administrationspanelet er deaktiveret fordi ingen adgangskode er sat i filen settings.inc.php. Indtast en adgangskode i den fil og opdater denne side."; +$net2ftp_messages["Please enter your Admin username and password"] = "Indtast dit administrationsbrugernavn og adgangskode"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Du fik ikke udfyldt login informationerne i popup vinduet.
Klik på \"Gå til login siden\" herunder."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Forkert brugernavn eller adgangskode til net2ftp administrationspanelet. Brugernavn og adgangskode kan angives i filen settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blåt"; +$net2ftp_messages["Grey"] = "Gråt"; +$net2ftp_messages["Black"] = "Sort"; +$net2ftp_messages["Yellow"] = "Gult"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Mappe"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML fil"; +$net2ftp_messages["Java source file"] = "Java source fil"; +$net2ftp_messages["JavaScript file"] = "JavaScript fil"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Tekstfil"; +$net2ftp_messages["Bitmap file"] = "Bitmap fil"; +$net2ftp_messages["GIF file"] = "GIF fil"; +$net2ftp_messages["JPEG file"] = "JPEG fil"; +$net2ftp_messages["PNG file"] = "PNG fil"; +$net2ftp_messages["TIF file"] = "TIF fil"; +$net2ftp_messages["GIMP file"] = "GIMP fil"; +$net2ftp_messages["Executable"] = "Program"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word dokument"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel regneark"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint præsentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio tegning"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project fil"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 dokument"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 skabelon"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 regneark"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 skabelon"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 dokument"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 skabelon"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 præsentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 skabelon"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 globalt dokument"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x globalt dokument"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x regneark"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x dokument"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x præsentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress pakket 5.x fil"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x dokument"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x dokument"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail fil"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat dokument"; +$net2ftp_messages["ARC archive"] = "ARC arkiv"; +$net2ftp_messages["ARJ archive"] = "ARJ arkiv"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ arkiv"; +$net2ftp_messages["TAR archive"] = "TAR arkiv"; +$net2ftp_messages["Zip archive"] = "Zip arkiv"; +$net2ftp_messages["MOV movie file"] = "MOV film"; +$net2ftp_messages["MPEG movie file"] = "MPEG film"; +$net2ftp_messages["Real movie file"] = "Real film"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime film"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash fil"; +$net2ftp_messages["Shockwave file"] = "Shockwave fil"; +$net2ftp_messages["WAV sound file"] = "WAV lydfil"; +$net2ftp_messages["Font file"] = "Font fil"; +$net2ftp_messages["%1\$s File"] = "%1\$s Fil"; +$net2ftp_messages["File"] = "Fil"; + +// getAction() +$net2ftp_messages["Back"] = "Tilbage"; +$net2ftp_messages["Submit"] = "Udfør"; +$net2ftp_messages["Refresh"] = "Opdater"; +$net2ftp_messages["Details"] = "Detalier"; +$net2ftp_messages["Icons"] = "Ikoner"; +$net2ftp_messages["List"] = "Liste"; +$net2ftp_messages["Logout"] = "Log ud"; +$net2ftp_messages["Help"] = "Hjælp"; +$net2ftp_messages["Bookmark"] = "Gem som favorit/bogmærke"; +$net2ftp_messages["Save"] = "Gem"; +$net2ftp_messages["Default"] = "Standard"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Hjælp"; +$net2ftp_messages["Forums"] = "Forum"; +$net2ftp_messages["License"] = "Licens"; +$net2ftp_messages["Powered by"] = "Styres via"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Du sendes videre til net2ftp forummet. Dette forum er kun for net2ftp relatede emner - det er IKKE for generelle spørgsmål om webhosting."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktioner"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Denne version af net2ftp er opdateret."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Information om den nyeste version kunne ikke hentes fra net2ftps server. Kontrollér sikkerhedsindstillingerne for din browser da disse kan forhindre indlæsningen fra net2ftp.com serveren."; +$net2ftp_messages["Logging"] = "Logger"; +$net2ftp_messages["Date from:"] = "Fra dato:"; +$net2ftp_messages["to:"] = "til:"; +$net2ftp_messages["Empty logs"] = "Tøm logs"; +$net2ftp_messages["View logs"] = "Se logs"; +$net2ftp_messages["Go"] = "Udfør"; +$net2ftp_messages["Setup MySQL tables"] = "Opsæt MySQL tabeller"; +$net2ftp_messages["Create the MySQL database tables"] = "Opret MySQL databasetabellerne"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktioner"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "Handle for filen %1\$s kunne ikke åbnes."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Filen %1\$s kunne ikke åbnes."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "Handle for filen %1\$s kunne ikke lukkes."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Forbindelse til serveren %1\$s kunne ikke etableres. Kontrollér de angivne oplysninger for databasen."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Kan ikke finde databasen %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL forespørgslen nr. %1\$s kunne ikke udføres."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL forespørgslen nr. %1\$s er udført."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Indtast dine MySQL indstillinger:"; +$net2ftp_messages["MySQL username"] = "MySQL brugernavn"; +$net2ftp_messages["MySQL password"] = "MySQL adgangskode"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Denne SQL forespørgsel bliver kørt:"; +$net2ftp_messages["Execute"] = "Kør"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Anvendte indstillinger:"; +$net2ftp_messages["MySQL password length"] = "Længde af MySQL adgangskode"; +$net2ftp_messages["Results:"] = "Resultater:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktioner"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Kan ikke udføre SQL forespørgslen %1\$s."; +$net2ftp_messages["No data"] = "Ingen data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktioner"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Tabellen %1\$s er tømt."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Tabellen %1\$s kunne ikke tømmes."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Tabellen %1\$s er optimeret."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Tabellen %1\$s kunne ikke optimeres."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Avancerede funktioner"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Udfør"; +$net2ftp_messages["Disabled"] = "Deaktiveret"; +$net2ftp_messages["Advanced FTP functions"] = "Avancerede FTP funktioner"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrære FTP kommandoer til FTP serveren"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Denne funktion er kun tilgængelig i PHP 5 eller nyere"; +$net2ftp_messages["Troubleshooting functions"] = "Fejlsøgningsfunktioner"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Fejlsøg net2ftp på denne server"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Fejsøg en FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test net2ftp udskriftsregler"; +$net2ftp_messages["Translation functions"] = "Oversættelsesfunktioner"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduktion til oversættelsesfunktionerne"; +$net2ftp_messages["Extract messages to translate from code files"] = "Præcise meddelelse der skal oversættes fra kode filen"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Undersøg om der er nye eller overflødige meddelelser"; + +$net2ftp_messages["Beta functions"] = "Beta funktioner"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send et site command til FTP serveren"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: sikre mapper vha. adgangskoder, lav egne fejlsider"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: udfør en SQL forespørgsel"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Site command funktionerne er ikke tilgængelige på denne webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Apache funktionerne er ikke tilgængelige på denne webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "MySQL funktionerne er ikke tilgængelige på denne webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Uventet state2 streng. Afslutter."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Fejsøg en FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Forbindelsesindstillinger:"; +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "Brugernavn"; +$net2ftp_messages["Password"] = "Adgangskode"; +$net2ftp_messages["Password length"] = "Længde på adgangskode"; +$net2ftp_messages["Passive mode"] = "Passiv modus"; +$net2ftp_messages["Directory"] = "Mappe"; +$net2ftp_messages["Printing the result"] = "Udskriver resultatet"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Forbinder til FTP serveren: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logger på FTP serveren: "; +$net2ftp_messages["Setting the passive mode: "] = "Sætter passiv modus: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Henter FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Skifter til mappen %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Mappen fra FTP serveren er: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Henter rå data om mapper og filer: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Prøver påny at hente rå data om mapper og filer: "; +$net2ftp_messages["Closing the connection: "] = "Lukker forbindelsen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rå data over mapper og filer:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Udskrevet liste over mapper og filer:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "ej OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test net2ftp udskriftsregler"; +$net2ftp_messages["Sample input"] = "Testinput"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Test din net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Udskriver resultatet"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Kontrollerer om PHP-FTP modulet er installeret: "; +$net2ftp_messages["yes"] = "Ja"; +$net2ftp_messages["no - please install it!"] = "nej - installer dette modul!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Kontrollerer mappetilladelser på webserveren: en lille fil bliver oprettet i /temp mappen og derefter slettet."; +$net2ftp_messages["Creating filename: "] = "Opretter filnavn: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filnavn: %1\$s"; +$net2ftp_messages["not OK"] = "ej OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "ej OK. Kontroller tilladelserne for mappen %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Åbner filen i skrivningsmodus: "; +$net2ftp_messages["Writing some text to the file: "] = "Skriver noget tekst i filen: "; +$net2ftp_messages["Closing the file: "] = "Lukker filen: "; +$net2ftp_messages["Deleting the file: "] = "Sletter filen: "; + +$net2ftp_messages["Testing the FTP functions"] = "Tester FTP funktionerne"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Forbinder til en test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Forbinder til FTP serveren: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logger på FTP serveren: "; +$net2ftp_messages["Setting the passive mode: "] = "Sætter passiv modus: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Henter FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Skifter til mappen %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Mappen fra FTP serveren er: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Henter rå data om mapper og filer: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Prøver påny at hente rå data om mapper og filer: "; +$net2ftp_messages["Closing the connection: "] = "Lukker forbindelsen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rå data over mapper og filer:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Udskrevet liste over mapper og filer:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "ej OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Bemærk: Når du benytter dette bogmærke bliver du spurgt om dit brugernavn og adgangskode"; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Vælg en mappe"; +$net2ftp_messages["Please wait..."] = "Vent venligst..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Mapper der indeholder tegnet \' kan ikke vises korrekt. De kan kun slettes. Gå tilbage og vælg en anden mappe."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daglig datagrænse nået: Du kan ikke overføre mere data i dag"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "For at håndhæve et fair forbrug af vores webserver er der sat begrænsninger på hvor meget data hver bruger kan overføre pr. dag. Når grænsen er nået kan du stadig bruge net2ftp, men du kan ikke overføre data til eller fra serveren."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Har du behov for ubegrænset forbrug så kan du installere net2ftp på din egen server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Ny mappe"; +$net2ftp_messages["New file"] = "Ny fil"; +$net2ftp_messages["HTML templates"] = "HTML skabeloner"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Upload via Java"; +$net2ftp_messages["Flash Upload"] = "Upload via Flash"; +$net2ftp_messages["Install"] = "net2ftp Installer"; +$net2ftp_messages["Advanced"] = "Avanceret"; +$net2ftp_messages["Copy"] = "Kopiér"; +$net2ftp_messages["Move"] = "Flyt"; +$net2ftp_messages["Delete"] = "Slet"; +$net2ftp_messages["Rename"] = "Omdøb"; +$net2ftp_messages["Chmod"] = "Rettigheder"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Udpak"; +$net2ftp_messages["Zip"] = "Komprimér"; +$net2ftp_messages["Size"] = "Størrelse"; +$net2ftp_messages["Search"] = "Søg"; +$net2ftp_messages["Go to the parent directory"] = "Gå til øvre mappe"; +$net2ftp_messages["Go"] = "Udfør"; +$net2ftp_messages["Transform selected entries: "] = "Bearbejdt valgte: "; +$net2ftp_messages["Transform selected entry: "] = "Bearbejdt den valgte: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Lav en undermappe i mappen: %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Lav en ny fil i mappen: %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Lav hurtigt en webside via eksisterende skabeloner"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload nye filer til mappen: %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload mapper og filer via et Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload filer via et Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Installér software pakker (kræver PHP installeret på denne server)"; +$net2ftp_messages["Go to the advanced functions"] = "Gå til de udvidede indstillinger"; +$net2ftp_messages["Copy the selected entries"] = "Kopiér valgte"; +$net2ftp_messages["Move the selected entries"] = "Flyt valgte"; +$net2ftp_messages["Delete the selected entries"] = "Slet valgte"; +$net2ftp_messages["Rename the selected entries"] = "Omdøb valgte"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Ret rettigheder (Chmod) for de valgte mapper og filer (virker kun på Unix/Linux/BSD servere)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download en zip fil med alle filer og mapper"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Udpak det valgte arkiv på FTP serveren"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Komprimer de valgte filer og mapper og enten gem eller email dem"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Udregn størrelsen på det valgte"; +$net2ftp_messages["Find files which contain a particular word"] = "Find filer som indeholder et bestemt ord"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Klik for at sortere via %1\$s i faldende orden"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Klik for at sortere via %1\$s i stigende orden"; +$net2ftp_messages["Ascending order"] = "Stigende orden"; +$net2ftp_messages["Descending order"] = "Faldende orden"; +$net2ftp_messages["Upload files"] = "Upload filer"; +$net2ftp_messages["Up"] = "Op"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Markér alle, eller fjern alle markeringer"; +$net2ftp_messages["All"] = "Alle"; +$net2ftp_messages["Name"] = "Navn"; +$net2ftp_messages["Type"] = "Type"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Ejer"; +$net2ftp_messages["Group"] = "Gruppe"; +$net2ftp_messages["Perms"] = "Rettigheder"; +$net2ftp_messages["Mod Time"] = "Sidst ændret"; +$net2ftp_messages["Actions"] = "Handlinger"; +$net2ftp_messages["Select the directory %1\$s"] = "Vælg mappen: %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Vælg filen: %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Vælg symlinket: %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Gå til mappen: %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download filen: %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Følg symlinket: %1\$s"; +$net2ftp_messages["View"] = "Vis kildekode"; +$net2ftp_messages["Edit"] = "Redigér"; +$net2ftp_messages["Update"] = "Opdatér"; +$net2ftp_messages["Open"] = "Åben"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Se den fremhævede kildekode for filen: %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Rediger kildekoden for filen: %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Upload en ny version af filen: %1\$s og sammenflet ændringerne med den nuværende fil"; +$net2ftp_messages["View image %1\$s"] = "Se billedet: %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Se filen: %1\$s fra din HTTP web server"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Bemærk: Dette link virker måske ikke hvis du ikke har dit eget internetdomæne.)"; +$net2ftp_messages["This folder is empty"] = "Denne mappe er tom"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Mapper"; +$net2ftp_messages["Files"] = "Filer"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Ukendt FTP output"; +$net2ftp_messages["Number"] = "Nummer"; +$net2ftp_messages["Size"] = "Størrelse"; +$net2ftp_messages["Skipped"] = "Spring over"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data overført fra denne IP adresse i dag"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data overført til denne FTP server i dag"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Sprog:"; +$net2ftp_messages["Skin:"] = "Tema:"; +$net2ftp_messages["View mode:"] = "Se modus:"; +$net2ftp_messages["Directory Tree"] = "Mappeoversigt"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Kør %1\$s i et nyt vindue"; +$net2ftp_messages["This file is not accessible from the web"] = "Denne fil kan ikke bruges på nettet"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Dobbeltklik for at gå til en mappe:"; +$net2ftp_messages["Choose"] = "Vælg"; +$net2ftp_messages["Up"] = "Op"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Størrelse på valgte filer og mapper"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Den samlede størrelse på de valgte filer og mapper er:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Antal filer der ikke blev regnet med:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Ret rettigheder (Chmod) for filer og mapper"; +$net2ftp_messages["Set all permissions"] = "Sæt alt til dette"; +$net2ftp_messages["Read"] = "Læs"; +$net2ftp_messages["Write"] = "Skriv"; +$net2ftp_messages["Execute"] = "Kør"; +$net2ftp_messages["Owner"] = "Ejer"; +$net2ftp_messages["Group"] = "Gruppe"; +$net2ftp_messages["Everyone"] = "Alle"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Sæt rettigheder for filen: %1\$s til: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Sæt rettigheder for symlinket: %1\$s til: "; +$net2ftp_messages["Chmod value"] = "Chmod værdi"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Ret også undermapper i denne mappe"; +$net2ftp_messages["Chmod also the files within this directory"] = "Ret også filer i denne mappe"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Indtastningen: %1\$s Er ugyldig. (fra 000 til 777). Prøv igen."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Vælg en mappe"; +$net2ftp_messages["Copy directories and files"] = "Kopiér mapper og filer"; +$net2ftp_messages["Move directories and files"] = "Flyt mapper og filer"; +$net2ftp_messages["Delete directories and files"] = "Slet mapper og filer"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Er du sikker på du vil slette disse mapper og filer?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Alle undermapper og filer vil også blive slettet!"; +$net2ftp_messages["Set all targetdirectories"] = "Ret alles nye placering"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "For at rette alles nye placering så indtast placeringen i feltet herover og klik på \"Ret alles nye placering\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Bemærk: placeringen skal være oprettet i forvejen før du kan kopiere noget dertil."; +$net2ftp_messages["Different target FTP server:"] = "Anden FTP server:"; +$net2ftp_messages["Username"] = "Brugernavn"; +$net2ftp_messages["Password"] = "Adgangskode"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Efterlad disse felter blanke hvis du ikke vil kopiere noget til andre FTP servere."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Hvis du vil kopiere filerne til en anden FTP server skal du angive FTP serverens login oplysninger."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Efterlad disse felter blanke hvis du ikke vil flytte noget til andre FTP servere."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Hvis du vil flytte filerne til en anden FTP server skal du angive FTP serverens login oplysninger."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopiér mappen: %1\$s til:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Flyt mappen: %1\$s til:"; +$net2ftp_messages["Directory %1\$s"] = "Mappe: %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopiér fil %1\$s til:"; +$net2ftp_messages["Move file %1\$s to:"] = "Flyt fil %1\$s til:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopiér symlink %1\$s til:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Flyt symlink %1\$s til:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Placering:"; +$net2ftp_messages["Target name:"] = "Navn:"; +$net2ftp_messages["Processing the entries:"] = "Behandler opgave:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Lav en webside med 4 nemme trin"; +$net2ftp_messages["Template overview"] = "Skabelonoversigt"; +$net2ftp_messages["Template details"] = "Skabelon detaljer"; +$net2ftp_messages["Files are copied"] = "Filerne bliver kopieret"; +$net2ftp_messages["Edit your pages"] = "Rediger dine sider"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Klik på billedet for at se detaljer for en skabelon."; +$net2ftp_messages["Back to the Browse screen"] = "Tilbage til oversigten"; +$net2ftp_messages["Template"] = "Skabelon"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Klik på billedet for at se detaljer for skabelonen"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Skabelonfilerne bliver kopieret til din FTP server. Eksisterende filer med det samme filnavn bliver overskrevet. Vil du fortsætte?"; +$net2ftp_messages["Install template to directory: "] = "Installer skabelon til mappen: "; +$net2ftp_messages["Install"] = "net2ftp Installer"; +$net2ftp_messages["Size"] = "Størrelse"; +$net2ftp_messages["Preview page"] = "Gennemse side"; +$net2ftp_messages["opens in a new window"] = "åbner i et nyt vindue"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Vent venligst mens skabelon filerne bliver overført til din server: "; +$net2ftp_messages["Done."] = "Færdig."; +$net2ftp_messages["Continue"] = "Fortsæt"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Rediger side"; +$net2ftp_messages["Browse the FTP server"] = "Gennemse FTP serveren"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Tilføj denne side til dine favoritter for at vende tilbage senere!"; +$net2ftp_messages["Edit website at %1\$s"] = "Rediger side hos %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: højreklik på linket og vælg \"Føj til favoritter...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: højreklik på linket og vælg \"Bogmærk dette link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "ADVARSEL: kunne ikke skabe mappen %1\$s. Den eksisterer måske i forvejen. Fortsætter..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Oprettede undermappen %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "ADVARSEL: Kan ikke kopiere filen %1\$s. Fortsætter..."; +$net2ftp_messages["Copied file %1\$s"] = "Kopierede filen %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Kan ikke åbne skabelon filen"; +$net2ftp_messages["Unable to read the template file"] = "Kan ikke læse skabelon filen"; +$net2ftp_messages["Please specify a filename"] = "Indtast et filnavn"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: Denne fil er ikke blevet gemt endnu"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Gemt d. %1\$s via %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Denne fil kunne ikke gemmes"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Mappe: "; +$net2ftp_messages["File: "] = "Fil: "; +$net2ftp_messages["New file name: "] = "Nyt filnavn: "; +$net2ftp_messages["Character encoding: "] = "Tegnsæt: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Bemærk: ved at ændre textarea typen bliver filen automatisk gemt"; +$net2ftp_messages["Copy up"] = "Kopier op"; +$net2ftp_messages["Copy down"] = "Kopier ned"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Søg i mapper og filer"; +$net2ftp_messages["Search again"] = "Søg igen"; +$net2ftp_messages["Search results"] = "Søgeresultater"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Indtast et ord eller en sætning."; +$net2ftp_messages["Please enter a valid filename."] = "Indtast et gyldigt filnavn."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Indtast en gyldig filstørrelse i \"fra\" tekstfeltet, f.eks. 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Indtast en gyldig filstørrelse i \"til\" tekstfeltet, f.eks. 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Indtast en gyldig dato i formatet ÅÅÅÅ-M-D i \"fra\" tekstfeltet."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Indtast en gyldig dato i formatet ÅÅÅÅ-M-D i \"til\" tekstfeltet."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Ordet %1\$s blev ikke fundet iblandt de valgte mapper og filer."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Ordet %1\$s blev fundet i følgende mapper og filer:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Søg efter et ord eller en sætning"; +$net2ftp_messages["Case sensitive search"] = "Forskel på store og små bogstaver"; +$net2ftp_messages["Restrict the search to:"] = "Begræns søgningen til"; +$net2ftp_messages["files with a filename like"] = "filer med et filnavn som"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard tegnet er *)"; +$net2ftp_messages["files with a size"] = "filer med en størrelse"; +$net2ftp_messages["files which were last modified"] = "filer der senest blev ændret"; +$net2ftp_messages["from"] = "fra"; +$net2ftp_messages["to"] = "til"; + +$net2ftp_messages["Directory"] = "Mappe"; +$net2ftp_messages["File"] = "Fil"; +$net2ftp_messages["Line"] = "Linje"; +$net2ftp_messages["Action"] = "Handling"; +$net2ftp_messages["View"] = "Vis kildekode"; +$net2ftp_messages["Edit"] = "Redigér"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Se den fremhævede kildekode for filen: %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Rediger kildekoden for filen: %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Installer software pakker"; +$net2ftp_messages["Unable to open the template file"] = "Kan ikke åbne skabelon filen"; +$net2ftp_messages["Unable to read the template file"] = "Kan ikke læse skabelon filen"; +$net2ftp_messages["Unable to get the list of packages"] = "Ude af stand til at hente listen over pakker"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "Net2ftp installer scriptet er kopieret til FTP serveren."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Dette script kører via din web server og kræver at PHP er installeret."; +$net2ftp_messages["In order to run it, click on the link below."] = "For at køre scriptet skal du klikke på linket herunder."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "Net2ftp prøvede at afgøre mappestrukturen mellem FTP serveren og web serveren."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Hvis dette link ikke er korrekt skal du manuelt indtaste URL adressen i din web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload mapper og filer via et Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Log ind!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Når du er logget på kan du:"; +$net2ftp_messages["Navigate the FTP server"] = "Nagivere i din FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Når du er logget på kan du navigere igennem dine mapper og se alle dine filer."; +$net2ftp_messages["Upload files"] = "Upload filer"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Der er tre måder at uploade filer på: den normale upload form, upload en komprimeret fil og udpak filer og mapper, og via et Java Applet."; +$net2ftp_messages["Download files"] = "Downloade filer"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Klik på et filnavn for at downloade den fil.
Vælg flere filer og klik på Download; de valge filer bliver downloadet i et komprimeret format."; +$net2ftp_messages["Zip files"] = "Komprimér filer"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... og gem den komprimerede fil på FTP serveren, eller mail den til en eller anden."; +$net2ftp_messages["Unzip files"] = "Udpak arkiver"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Flere formater understøttes: .zip, .tar, .tgz og .gz."; +$net2ftp_messages["Install software"] = "Installér software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Vælg fra en liste over populære produkter (PHP påkræves)."; +$net2ftp_messages["Copy, move and delete"] = "Kopiér, flyt og slet"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Mappers indhold (undermapper og filer) inkluderes også når du kopierer, flytter eller sletter mapper."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Kopiér eller flyt til en anden FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Brugbart for at importere filer til din FTP server, eller for at eksportere filer fra din server til en anden FTP server."; +$net2ftp_messages["Rename and chmod"] = "Omdøb og rediger rettigheder (chmod)"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod af mapper påvirker også mappers indhold."; +$net2ftp_messages["View code with syntax highlighting"] = "Se kildekode med farvefremhævet syntax"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP funktioner linkes til php.net for hurigt at finde en beskrivelse."; +$net2ftp_messages["Plain text editor"] = "Normal tekstredigering"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Ret tekst direkte i din browser, hver gang du gemmer dine ændringer bliver filen opdateret på din FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editorer"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Ret HTML i en What-You-See-Is-What-You-Get (WYSIWYG) editor; Der er to forskellige editorer at vælge imellem."; +$net2ftp_messages["Code editor"] = "Kode editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Ret HTML og PHP i en editor med farvefremhævning af syntax."; +$net2ftp_messages["Search for words or phrases"] = "Søg efter ord eller sætninger"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtrér filer via filnavn, filstørrelse og hvornår de sidst er ændret."; +$net2ftp_messages["Calculate size"] = "Udregn størrelse"; +$net2ftp_messages["Calculate the size of directories and files."] = "Udregn samlet størrelse på flere filer og mapper."; + +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["Example"] = "Eksempel"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Brugernavn"; +$net2ftp_messages["Password"] = "Adgangskode"; +$net2ftp_messages["Anonymous"] = "Log på som anonym"; +$net2ftp_messages["Passive mode"] = "Passiv modus"; +$net2ftp_messages["Initial directory"] = "Mappe"; +$net2ftp_messages["Language"] = "Sprog"; +$net2ftp_messages["Skin"] = "Tema"; +$net2ftp_messages["FTP mode"] = "FTP modus"; +$net2ftp_messages["Automatic"] = "Automatisk"; +$net2ftp_messages["Login"] = "Log ind"; +$net2ftp_messages["Clear cookies"] = "Ryd cookies"; +$net2ftp_messages["Admin"] = "Administrator"; +$net2ftp_messages["Please enter an FTP server."] = "Indtast en FTP server."; +$net2ftp_messages["Please enter a username."] = "Indtast et brugernavn."; +$net2ftp_messages["Please enter a password."] = "Indtast en adganskode."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Indtast enten dit brugernavn eller din adgangskode."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Indtast dit brugernavn og adgangskode for FTP serveren: %1\$s."; +$net2ftp_messages["Username"] = "Brugernavn"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Dit login er udløbet. Log ind igen for at fortsætte dit arbejde på FTP serveren: %1\$s."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Din IP adresse er ændret; log ind igen for at fortsætte dit arbejde på FTP serveren: %1\$s."; +$net2ftp_messages["Password"] = "Adgangskode"; +$net2ftp_messages["Login"] = "Log ind"; +$net2ftp_messages["Continue"] = "Fortsæt"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login side"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "Du er logget ud af din FTP server. Log på igen."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Bemærk: andre brugere af denne computer kan klikke på tilbageknappen i browseren og få adgang til FTP serveren."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "For at undgå dette, så luk alle browservinduer."; +$net2ftp_messages["Close"] = "Luk"; +$net2ftp_messages["Click here to close this window"] = "Luk dette vindue"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Opret en ny mappe"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Den nye mappe bliver oprettet i: %1\$s."; +$net2ftp_messages["New directory name:"] = "Mappenavn:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Mappen: %1\$s er oprettet."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Mappen: %1\$s kunne ikke oprettes."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrær FTP kommando"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "liste over kommandoer:"; +$net2ftp_messages["FTP server response:"] = "FTP server svar:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Omdøb mapper og filer"; +$net2ftp_messages["Old name: "] = "Gammelt navn: "; +$net2ftp_messages["New name: "] = "Nyt navn: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Det nye navn må ikke indeholde punktummer. Denne mappe eller fil kunne ikke omdøbes til %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "Det nye navn må ikke indeholde blokerede nøgleord. Denne mappe eller fil kunne ikke omdøbes til %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s blev omdøbt til %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s kunne ikke omdøbes til %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Udpak arkiver"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Henter %1\$s ud af %2\$s arkiver fra FTP serveren"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Kan ikke hente arkivet: %1\$s fra FTP serveren"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Ret alles nye placering"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "For at rette alles nye placering så indtast placeringen i feltet herover og klik på \"Ret alles nye placering\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Bemærk: placeringen skal være oprettet i forvejen før du kan kopiere noget dertil."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Udpakker arkiv: %1\$s til:"; +$net2ftp_messages["Target directory:"] = "Placering:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Brug undermapper (opretter undermapper automatisk)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload til mappe:"; +$net2ftp_messages["Files"] = "Filer"; +$net2ftp_messages["Archives"] = "Arkiver"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Valgte filer bliver overført til FTP serveren."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Valgte arkiver bliver automatisk udpakket og filerne overføres til FTP serveren."; +$net2ftp_messages["Add another"] = "Tilføj flere"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Brug undermapper (opretter undermapper automatisk)"; + +$net2ftp_messages["Choose a directory"] = "Vælg en mappe"; +$net2ftp_messages["Please wait..."] = "Vent venligst..."; +$net2ftp_messages["Uploading... please wait..."] = "Uploader... vent venligst..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Hvis det tager mere end %1\$s sekunder<\/b> for at uploade filen må du prøve igen med færre eller mindre filer."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Dette vindue lukker automatisk om få sekunder."; +$net2ftp_messages["Close window now"] = "Luk vindue"; + +$net2ftp_messages["Upload files and archives"] = "Upload filer og mapper"; +$net2ftp_messages["Upload results"] = "Upload resultater"; +$net2ftp_messages["Checking files:"] = "Kontrollerer filer:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Overfører filer til FTP serveren:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Dekomprimerer arkiver og overfører filer til FTP serveren:"; +$net2ftp_messages["Upload more files and archives"] = "Upload flere filer og mapper"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Begrænsninger:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Den maksimale filstørrelse er sat af net2ftp til at være %1\$s og af PHP til at være %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Upload af filer må højst vare %1\$s sekunder"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTP overførselsmodus (ASCII eller BINARY) vil automatisk blive besluttet ud fra filernes endelser"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Hvis destinationen findes i forvejen bliver indholdet erstattet"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Se fil %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Se billedet: %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Se Macromedia ShockWave Flash film %1\$s"; +$net2ftp_messages["Image"] = "Billede"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax fremhævning styres via Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "For at gemme billedet, højreklik og vælg 'Gem billede som...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Komprimerede filer"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Gem den komprimerede fil på FTP serveren som:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Mail den komprimerede fil som en vedhæftning til:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Bemærk det ikke er anonymt at sende filer: din IP adresse og afsendelsestidspunktet bliver noteret i mailen."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Tilføj yderligere kommentarer til mailen:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Du angav ikke et filnavn for den komprimerede fil. Gå tilbage og angiv et filnavn."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Den valgte mailadresse (%1\$s) bestod ikke valideringen.
Indtast en mail i formatet eksempel@domæne.dk"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/de.inc.php b/ehcp/net2ftp/languages/de.inc.php new file mode 100644 index 0000000..df16ee4 --- /dev/null +++ b/ehcp/net2ftp/languages/de.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Das Verzeichnis %1\$s existiert nicht oder kann nicht ausgewählt werden, deshalb wird das Verzeichnis %2\$s stattdessen angezeigt."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Ihr Root-Verzeichnis %1\$s existiert nicht oder kann nicht ausgewählt werden."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Das Verzeichnis %1\$s kann nicht ausgewählt werden - entweder Sie haben nicht die entsprechenden Rechte, um das Verzeichnis anzuzeigen, oder es existiert nicht."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Einträge mit verbotenen Schlüsselwörtern können nicht mit net2ftp verwaltet werden. Dies dient dazu, um zu verhindern, dass Paypal or Ebay scams mit net2ftp hochgeladen werden."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Dateien, die zu groß sind, können nicht herunterladen, hochgeladen, kopiert, verschoben, gesucht, gepackt, entpackt, betrachtet oder bearbeitet werden; sie können nur umbenannt, gelöscht oder die Zugriffsrechte geändert werden."; +$net2ftp_messages["Execute %1\$s in a new window"] = "In einem neuen Fenster %1\$s ausführen"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Bitte mindestens eine Datei oder ein Verzeichniss auswählen!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Der FTP Server %1\$s ist nicht in der Liste der erlaubten FTP Server."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Der FTP Server %1\$s ist in der Liste der verbotenen FTP Server."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Der FTP Server Port %1\$s darf nicht genutzt werden."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Ihre IP-Adresse (%1\$s) is nicht in der Liste der erlaubten IP-Adressen"; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Ihre IP-Adresse (%1\$s) ist in der Liste der verbotenen IP Addressen."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Die Tabelle net2ftp_users enthält doppelte Zeilen."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Sie haben ihren Administrator-Benutzername oder das Passwort nicht eingegeben"; +$net2ftp_messages["Wrong username or password. Please try again."] = "Falscher Benutzername oder Passwort. Bitte versuchen Sie es erneut."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Kann Ihre IP-Adresse nicht auflösen."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tabelle net2ftp_log_consumption_ipaddress enthält doppelte Einträge."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tabelle net2ftp_log_consumption_ftpserver enthält doppelte Einträge."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Die Variable consumption_ipaddress_datatransfer ist nicht numerisch."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tabelle net2ftp_log_consumption_ipaddress konnte nicht aktualisiert werden."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tabelle net2ftp_log_consumption_ipaddress enthält doppelte Einträge."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tabelle net2ftp_log_consumption_ftpserver konnte nicht aktualisiert werden."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tabelle net2ftp_log_consumption_ftpserver enthält doppelte Einträge."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Tabelle net2ftp_log_access konnte nicht aktualisiert werden."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Tabelle net2ftp_log_access enthält doppelte Einträge."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Die Verbindung zur MySQL Datenbank konnte nicht hergestellt werden. Bitte prüfen Sie die MySQL Datenbankeinstellungen in net2ftp's Konfigurationsdatei settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Die MySQL Datenbank konnte nicht ausgewählt werden. Bitte prüfen Sie die MySQL Datenbankeinstellungen in net2ftp's Konfigurationsdatei settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Ein Fehler ist aufgetreten"; +$net2ftp_messages["Go back"] = "Zurück"; +$net2ftp_messages["Go to the login page"] = "Zurück zur Anmeldeseite"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Konnte keine Verbindung zum FTP Server %1\$s auf Port %2\$s herstellen.

Bitte prüfen Sie die Adresse des FTP-Servers - diese unterscheidet sich oft von der Adresse des HTTP (Web) Servers. Bitte kontaktieren Sie die Hotline Ihres Providers oder Ihren Systemadministrator.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Anmeldung am FTP Server %1\$s mit Benutzername %2\$s fehlgeschlagen.

Bitte prüfen Sie Ihren Benutzernamen und das Kennwort. Kontaktieren Sie die Hotline Ihres Providers oder Fragen Sie Ihren Systemadministrator.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Konnte nicht in den passiven Modus auf dem FTP-Server %1\$s wechseln."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Konnte nicht zum zweiten (Ziel-) FTP-Server %1\$s auf Port %2\$s verbinden.

Bitte prüfen Sie die Adresse des FTP-Servers - diese unterscheidet sich oft von der Adresse des HTTP (Web) Servers. Bitte kontaktieren Sie die Hotline Ihres Providers oder Ihren Systemadministrator.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Anmeldung am zweiten (Ziel-) FTP Server %1\$s mit Benutzername %2\$s fehlgeschlagen.

Bitte prüfen Sie Ihren Benutzernamen und das Kennwort. Kontaktieren Sie die Hotline Ihres Providers oder Fragen Sie Ihren Systemadministrator.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Konnte nicht in den passiven Modus auf dem zweiten (Ziel-) FTP-Server %1\$s wechseln."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Umbenennen der Datei oder des Verzeichnisses %1\$s in %2\$s fehlgeschlagen"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Ausführung des SITE-Kommandos %1\$s fehlgeschlagen. Hinweis: Das CHMOD Kommando ist nur auf Unix-FTP-Servern verfügbar, nicht auf Windows-FTP-Servern."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Zugriffsrechte des Verzeichnisses %1\$s erfolgreich in %2\$s geändert"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Verabeiten der Einträge im Verzeichnis %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Zugriffsrechte der Datei %1\$s erfolgreich in %2\$s geändert"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle ausgewählten Verzeichnisse und Dateien wurden verarbeitet."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Löschen des Verzeichnisses %1\$s fehlgeschlagen"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Löschen der Datei %1\$s fehlgeschlagen"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Der neue Ordner %1\$s kann nicht angelegt werden"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Die temporäre Datei kann nicht erstellt werden"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Laden der Datei %1\$s vom FTP Server und Zwischenspeichern als %2\$s fehlgeschlagen.
Bitte prüfen Sie die Zugriffsrechte des Ordners %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Öffnen der zwischengespeicherten Datei fehlgeschlagen. Bitte prüfen Sie die Zugriffsrechte des Ordners %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Lesen der temporären Datei fehlgeschlagen."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Die Verarbeitung der temporären Datei konnte nicht beendet werden"; +$net2ftp_messages["Unable to delete the temporary file"] = "Die temporäre Datei kann nicht gelöscht werden"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Die temporäre Datei kann nicht erstellt werden. Bitte Berechtigung des Verzeichnisses %1\$s überprüfen."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Öffnen der zwischengespeicherten Datei fehlgeschlagen. Bitte prüfen Sie die Zugriffsrechte des Ordners %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Speichern der Zeichenkette in die temporäre Datei %1\$s fehlgeschlagen.
Bitte prüfen Sie die Zugriffsrechte des Ordners %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Die Verarbeitung der temporären Datei konnte nicht beendet werden"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Konnte Datei %1\$s nicht auf dem FTP Server ablegen.
Bitte prüfen Sie Ihre Schreibrechte in diesem Verzeichnis."; +$net2ftp_messages["Unable to delete the temporary file"] = "Die temporäre Datei kann nicht gelöscht werden"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Verarbeiten des Ordners %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Das Ziel-Verzeichnis %1\$s ist das Gleiche als der Quellordner %2\$s, oder ein Unterordner davon, Ordner wird übersprungen"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "Das Verzeichnis %1\$s enthält ein verbotenes Schlüsselwort, dieses Verzeichnis wird übersprungen"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "Das Verzeichnis %1\$s enthält ein verbotenes Schlüsselwort, Abbruch des Verschiebens"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Unmöglich das Unterverzeichnis %1\$s zu erstellen. Evtl. besteht es bereits. Setze das Kopieren/Verschieben fort..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Zielunterverzeichnis %1\$s erstellt"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Das Verzeichnis %1\$s kann nicht ausgewält werden, dieses Verzeichnis wird übersprungen"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Das Unterverzeichniss %1\$s konnte nicht gelöscht werden - es ist nicht leer"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Verzeichniss %1\$s gelöscht"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Verzeichniss %1\$s gelöscht"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Das Verzeichnis %1\$s konnte nicht verschoben werden."; +$net2ftp_messages["Moved directory %1\$s"] = "Verzeichnis %1\$s wurde verschoben"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Verarbeitung des Verzeichnisses %1\$s beendet"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Das Ziel für die Datei %1\$s ist die Selbe wie die Quelle, diese Datei wird übersprungen"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Die Datei %1\$s enthält ein verbotenes Schlüsselwort, diese Datei wird übersprungen"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Die Datei %1\$s enthält ein verbotenes Schlüsselwort, Abbruch des Verschiebens"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Die Datei %1\$s ist zum Kopieren zu groß, diese Datei wird übersprungen"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Die Datei %1\$s ist zum Verschieben zu groß, Abbruch des Verschiebens"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Die Datei %1\$s kann nicht kopiert werden"; +$net2ftp_messages["Copied file %1\$s"] = "Datei %1\$s kopiert"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Verschieben der Datei %1\$s unmöglich, verschieben wird abgebrochen"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Datei %1\$s verschoben"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Löschen der Datei %1\$s fehlgeschlagen"; +$net2ftp_messages["Deleted file %1\$s"] = "Gelöschte Datei %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle ausgewählten Verzeichnisse und Dateien wurden verarbeitet."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Die entfernte Datei %1\$s konnte nicht lokal per FTP Modus %2\$s kopiert werden"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Die Datei %1\$s kann nicht gelöscht werden"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Die Datei ist zu groß, um übertragen zu werden"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Tages-Beschränkung erreicht: die Datei %1\$s wird nicht transferiert"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Unmöglich die lokale Datei zur entfernten Datei %1\$s unter Verwendung des FTP-Modus %2\$s zu kopieren"; +$net2ftp_messages["Unable to delete the local file"] = "Lokale Datei kann nicht gelöscht werden"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Die temporäre Datei kann nicht gelöscht werden"; +$net2ftp_messages["Unable to send the file to the browser"] = "Die Datei konnte nicht an den Browser gesendet werden"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Die temporäre Datei kann nicht erstellt werden"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Das ZIP-Archiv wurde auf dem FTP-Server als %1\$s gespeichert"; +$net2ftp_messages["Requested files"] = "Angeforderte Dateien"; + +$net2ftp_messages["Dear,"] = "Sehr geehrte(r),"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Jemand hat veranlasst, dass diese Datei an Ihre E-Mail Adresse (%1\$s) gesendet wird."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Wenn Sie nichts davon wissen oder der Person nicht trauen, löschen Sie bitte diese E-Mail und den Anhang, ohne Sie zu öffnen."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Beachten Sie bitte, dass die Dateien im Anhang Ihrem Computer nicht schaden können, wenn Sie die Datei nicht öffnen."; +$net2ftp_messages["Information about the sender: "] = "Informationen über den Absender: "; +$net2ftp_messages["IP address: "] = "IP Addresse: "; +$net2ftp_messages["Time of sending: "] = "Gesendet: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Versendet durch den net2ftp Dienst der Webseite: "; +$net2ftp_messages["Webmaster's email: "] = "E-Mail Adresse des Webmaster: "; +$net2ftp_messages["Message of the sender: "] = "Nachricht des Absenders: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp ist freie Software, freigegeben unter der GNU/GPL Lizenz. Für weitere Informationen, gehen Sie bitte auf http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Die Zip Datei wurde versand an %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Datei %1\$s ist zu groß. Diese Datei wird nicht hochgeladen."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Die Datei %1\$s enthält ein verbotenes Schlüsselwort. Die Datei wird nicht hochgeladen."; +$net2ftp_messages["Could not generate a temporary file."] = "Temporäre Datei kann nicht erstellt werden."; +$net2ftp_messages["File %1\$s could not be moved"] = "Datei %1\$s konnte nicht verschoben werden"; +$net2ftp_messages["File %1\$s is OK"] = "Datei %1\$s ist OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Es war nicht möglich, die hochgeladene Datei ins temporäre Verzeichnis zu verschieben.

Der Administrator dieser Seite muss die Zugriffsrechte des net2ftp - /tmp-Verzeichnisses auf 0777 (chmod) setzen."; +$net2ftp_messages["You did not provide any file to upload."] = "Sie haben keine Datei zum Upload ausgewählt."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Datei %1\$s konnte nicht auf den FTP-Server geladen werden"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Datei %1\$s wurde erfolgreich auf den FTP-Server im Modus %2\$s übertragen"; +$net2ftp_messages["Transferring files to the FTP server"] = "Dateien werden zum FTP-Server geschickt"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Verarbeitung von Archiv Nr. %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archiv %1\$s wurde nicht verarbeitet, das Format ist unbekannt. Zur Zeit unterstützte Archiv-Formate: zip, tar, tgz (tar-gzip), gz (gzip)."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Die Dateien und die Verzeichnisse vom Archiv zu extrahieren war nicht möglich"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Das Archiv enthält Dateinamen mit ../ oder ..\\ - auspacken abgebrochen"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Der Eintrag %1\$s konnte nicht entpackt werden (Fehlercode: %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Verzeichnis %1\$s wurde erstellt"; +$net2ftp_messages["Could not create directory %1\$s"] = "Konnte Verzeichnis %1\$s nicht erstellen"; +$net2ftp_messages["Copied file %1\$s"] = "Datei %1\$s wurde kopiert"; +$net2ftp_messages["Could not copy file %1\$s"] = "Konnte Datei %1\$s nicht kopieren"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Das tempor&aauml;re Verzeichnis konnte nicht gelöscht werden"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Die temporäre Datei %1\$s konnte nicht gelöscht werden"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "SITE-Kommando %1\$s fehlgeschlagen"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Ihr Auftrag wurde angehalten"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Ihr Arbeitsauftrag den Sie mit net2ftp ausführen wollten, hat mehr Zeit als die erlaubten %1\$s Sekunden in Anspruch genommen, und wurde deswegen abgebrochen."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Diese Zeitbeschränkung gewährleistet den Betrieb des Webservers für andere Nutzer."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Versuchen Sie, Ihren Auftrag in kleinere Schritte aufzutrennen: schränken Sie die Auswahl an Dateien ein, und/oder überspringen sie die größten Dateien."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Sollten Sie net2ftp benötigen, um größere Arbeitsaufträge auszuführen, können Sie net2ftp auf Ihrem eigenen Webserver installieren."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Sie haben keinen Text für den EMail-Versand angegeben!"; +$net2ftp_messages["You did not supply a From address."] = "Sie haben keine Absenderadresse eingegeben."; +$net2ftp_messages["You did not supply a To address."] = "Sie haben keine Empfängeradresse eingegeben."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Aus technischen Gründen konnte die EMail an %1\$s nicht versendet werden."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Es konnte kein temporäres Verzeichnis angelegt werden (ungültiges Verzeichnis)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Es konnte kein temporäres Verzeichnis angelegt werden (Verzeichnis ist nicht beschreibbar)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Es konnte kein temporäres Verzeichnis angelegt werden (zu viele Versuche)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Kann die SQL-Abfrage nicht ausführen."; +$net2ftp_messages["Unable to open the system log."] = "Kann system log nicht öffnen."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unmöglich eine Nachricht ins system.log zu schreiben."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Die Tabelle net2ftp_log_status enthält doppelte Einträge."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Die Tabelle net2ftp_log_status konnte nicht aktualisiert werden."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "Die Log Tabellen wurden erfolgreich umbenannt."; +$net2ftp_messages["The log tables could not be renamed."] = "Die Log Tabellen konnten nicht umbenannt werden."; +$net2ftp_messages["The log tables were copied successfully."] = "Die Log Tabellen wurden erfolgreich kopiert."; +$net2ftp_messages["The log tables could not be copied."] = "Die Log Tabellen konnten nicht kopiert werden."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "Die älteste Log Tabelle wurde erfolgreich gelöscht."; +$net2ftp_messages["The oldest log table could not be dropped."] = "Die älteste Log Tabelle konnte nicht gelöscht werden."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Bitte geben Sie Ihren Benutzernamen und das Kennwort ein, für den FTP Server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Sie haben keine Zugangsdaten im Popup-Fenster ausgefü:llt.
Klicken Sie unten auf \"Go to the login page\"."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Der Zugang zum net2ftp Administrationsbereich wurde deaktiviert, da kein Kennwort in der Datei settings.inc.php eingetragen wurde. Tragen Sie dort ein Kennwort ein, und laden diese Seite neu."; +$net2ftp_messages["Please enter your Admin username and password"] = "Bitte geben Sie Ihren Administrations-Benutzernamen und das entsprechende Kennwort ein"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Sie haben keine Zugangsdaten im Popup-Fenster ausgefü:llt.
Klicken Sie unten auf \"Go to the login page\"."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Falscher Benutzername oder falsches Kennwort für net2ftp Administrationsbereich. Bitte prüfen Sie Ihre Eingabe bzw. die Einstellungen in der Datei settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blau"; +$net2ftp_messages["Grey"] = "Grau"; +$net2ftp_messages["Black"] = "Schwarz"; +$net2ftp_messages["Yellow"] = "Gelb"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Verzeichnis"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP Skript"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML Datei"; +$net2ftp_messages["Java source file"] = "Java source Datei"; +$net2ftp_messages["JavaScript file"] = "JavaScript Datei"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP Skript"; +$net2ftp_messages["Text file"] = "Text Datei"; +$net2ftp_messages["Bitmap file"] = "Bitmap Datei"; +$net2ftp_messages["GIF file"] = "GIF Datei"; +$net2ftp_messages["JPEG file"] = "JPEG Datei"; +$net2ftp_messages["PNG file"] = "PNG Datei"; +$net2ftp_messages["TIF file"] = "TIF Datei"; +$net2ftp_messages["GIMP file"] = "GIMP Datei"; +$net2ftp_messages["Executable"] = "Ausführbare Datei"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word Dokument"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel Tabellendokument"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint Präsentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access Datenbank"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio Zeichnung"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project Datei"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 Dokument"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 Vorlage"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 Tabellemndokument"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 Vorlage"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 Dokument"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 Vorlage"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 Präsentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 Vorlage"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 Globaldokument"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 Dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x Dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global Dokument"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x Tabellendokument"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x Dokument"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x Präsentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress gepackte 5.x Datei"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x Dokument"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x Dokument"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x Maildatei"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat Dokument"; +$net2ftp_messages["ARC archive"] = "ARC Archiv"; +$net2ftp_messages["ARJ archive"] = "ARJ Archiv"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ Archiv"; +$net2ftp_messages["TAR archive"] = "TAR Archiv"; +$net2ftp_messages["Zip archive"] = "Zip Archiv"; +$net2ftp_messages["MOV movie file"] = "MOV Videodatei"; +$net2ftp_messages["MPEG movie file"] = "MPEG Videodatei"; +$net2ftp_messages["Real movie file"] = "Real Videodatei"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime Datei"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave Flash Datei"; +$net2ftp_messages["Shockwave file"] = "Shockwave Datei"; +$net2ftp_messages["WAV sound file"] = "WAV Audiodatei"; +$net2ftp_messages["Font file"] = "Font Datei"; +$net2ftp_messages["%1\$s File"] = "%1\$s Datei"; +$net2ftp_messages["File"] = "Datei"; + +// getAction() +$net2ftp_messages["Back"] = "Zurück"; +$net2ftp_messages["Submit"] = "Senden"; +$net2ftp_messages["Refresh"] = "Aktualisieren"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Icons"; +$net2ftp_messages["List"] = "List"; +$net2ftp_messages["Logout"] = "Abmelden"; +$net2ftp_messages["Help"] = "Hilfe"; +$net2ftp_messages["Bookmark"] = "Lesezeichen"; +$net2ftp_messages["Save"] = "Speichern"; +$net2ftp_messages["Default"] = "Standard"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Hilfe/Anleitung"; +$net2ftp_messages["Forums"] = "Foren"; +$net2ftp_messages["License"] = "Lizenz"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Sie werden nun zu den net2ftp Foren weitergeleitet. Diese Foren sind nur für Themen, die mit net2ftp im Zusammenhang stehen - nicht für allgemeine Fragen zum Webhosting."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktionen"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Versionsinformationen"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Diese Version von net2ftp ist aktuell."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Die aktuelle Versionsinformation konnte vom net2ftp.com Server nicht empfangen werden. Überprüfen Sie die Sicherheitseinstellungen Ihres Browsers, sie verhindern eventuell das Laden einer kleinen Datei vom net2ftp.com Server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Datum ab:"; +$net2ftp_messages["to:"] = "bis:"; +$net2ftp_messages["Empty logs"] = "Löschen"; +$net2ftp_messages["View logs"] = "Anzeigen"; +$net2ftp_messages["Go"] = "Weiter"; +$net2ftp_messages["Setup MySQL tables"] = "MySQL-Tabellen einrichten"; +$net2ftp_messages["Create the MySQL database tables"] = "Anlegen der MySQL-Datenbanktabellen"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktionen"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Die Datei %1\$s konnte nicht geöffnet werden."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Die Verbindung zum Server %1\$s konnte nicht hergestellt werden. Bitte überprüfen Sie die Datenbankeinstellungen."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Die Datenbank konnte nicht ausgewählt werden %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "Die SQL-Abfrage Nr. %1\$s konnte nicht ausgeführt werden.."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "Die SQL-Abfrage Nr. %1\$s wurde erfolgreich ausgeführt."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Bitte geben Sie Ihre MySQL-Einstellungen ein:"; +$net2ftp_messages["MySQL username"] = "MySQL Benutzername"; +$net2ftp_messages["MySQL password"] = "MySQL Kennwort"; +$net2ftp_messages["MySQL database"] = "MySQL Datenbankname"; +$net2ftp_messages["MySQL server"] = "MySQL Server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Folgende SQL-Anfrage wird ausgeführt:"; +$net2ftp_messages["Execute"] = "Ausführen"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Verwendete Einstellungen:"; +$net2ftp_messages["MySQL password length"] = "MySQL Kennwortlänge"; +$net2ftp_messages["Results:"] = "Ergebnisse:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktionen"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Die SQL-Abfrage %1\$s konnte nicht ausgeführt werden."; +$net2ftp_messages["No data"] = "Keine Daten"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Administrationsfunktionen"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Die Tabelle %1\$s wurde erfolgreich geleert."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Die Tabelle %1\$s konnte nicht geleert werden."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Die Tabelle %1\$s wurde erfolgreich optimiert."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Die Tabelle %1\$s konnte nicht optimiert werden."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Erweiterte Funktionen"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Weiter"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Erweiterte FTP Funktionen"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Sende benutzerdefinierte FTP-Kommandos zum FTP-Server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Diese Funktion ist nur mit PHP5 verfügbar"; +$net2ftp_messages["Troubleshooting functions"] = "Fehlersuchfunktionen"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Fehlersuche bei net2ftp auf diesem Webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Fehlersuche bei einem FTP Server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Teste die net2ftp Listensatzgliederungsregeln"; +$net2ftp_messages["Translation functions"] = "Übersetzungsfunktionen"; +$net2ftp_messages["Introduction to the translation functions"] = "Einführung in die Übersetzungsfunktionen"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extrahiere zu übersetzende Zeichenketten aus dem Quelltext"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Suche nach neuen oder veralteten Zeichenketten"; + +$net2ftp_messages["Beta functions"] = "Betafunktionen"; +$net2ftp_messages["Send a site command to the FTP server"] = "Ein SITE-Kommando auf dem FTP Server absetzen"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: Verzeichnis passwortschützen, eine eigene Error-Seite anlegen"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: eine SQL-Anfrage ausführen"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Die Navigations Funktionen sind auf diesem Webserver nicht verfügbar."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Die Apache Funktionen sind auf diesem Webserver nicht verfügbar."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Die MySQL Funktionen sind auf diesem Webserver nicht verfügbar."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Unerwartete state2-Zeichenkette. Beende."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Fehlersuche bei einem FTP Server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Verbindungseigenschaften:"; +$net2ftp_messages["FTP server"] = "FTP Server"; +$net2ftp_messages["FTP server port"] = "FTP Server Port"; +$net2ftp_messages["Username"] = "Benutzername"; +$net2ftp_messages["Password"] = "Passwort"; +$net2ftp_messages["Password length"] = "Passwortlänge"; +$net2ftp_messages["Passive mode"] = "Passiver Modus"; +$net2ftp_messages["Directory"] = "Verzeichnis"; +$net2ftp_messages["Printing the result"] = "Drucke das Ergebnis"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Verbinden mit dem FTP Server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Anmelden am FTP Server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setzen des passiven Modus:"; +$net2ftp_messages["Getting the FTP server system type: "] = "Prüfe Systemtyp des FTP-Servers: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Wechseln in das Verzeichniss %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Das Verzeichniss des FTP Server ist: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Empfang einer Rohliste der Dateien und Ordnern: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Erneuter Empfangsversuch einer Rohliste der Dateien und Ordnern: "; +$net2ftp_messages["Closing the connection: "] = "Verbindung wird geschlossen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rohliste der Dateien und Ordner:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Gegliederte Liste der Dateien und Ordner:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Teste die net2ftp Listensatzgliederungsregeln"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Fehlersuche bei der net2ftp Installation"; +$net2ftp_messages["Printing the result"] = "Drucke das Ergebnis"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Überprüfen ob das FTP Modul von PHP installiert ist"; +$net2ftp_messages["yes"] = "Ja"; +$net2ftp_messages["no - please install it!"] = "Nein - bitte installieren!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Überprüfung der Berechtigungen des Verzeichnisses auf dem Webserver: eine kleine Datei wird in den /temp Ordner geschrieben und anschließend gelöscht."; +$net2ftp_messages["Creating filename: "] = "Dateiname wird erstellt: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Dateiname: %tempfilename"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "nicht OK. Bitte die Berechtigung des Ordners %1\$s überprüfen"; +$net2ftp_messages["Opening the file in write mode: "] = "Öffnen der Datei im Schreib-Modus: "; +$net2ftp_messages["Writing some text to the file: "] = "Schreiben von Text in die Datei: "; +$net2ftp_messages["Closing the file: "] = "Schließen der Datei: "; +$net2ftp_messages["Deleting the file: "] = "Löschen der Datei: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Verbinden mit dem FTP Server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Anmelden am FTP Server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setzen des passiven Modus:"; +$net2ftp_messages["Getting the FTP server system type: "] = "Prüfe Systemtyp des FTP-Servers: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Wechseln in das Verzeichniss %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Das Verzeichniss des FTP Server ist: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Empfang einer Rohliste der Dateien und Ordnern: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Erneuter Empfangsversuch einer Rohliste der Dateien und Ordnern: "; +$net2ftp_messages["Closing the connection: "] = "Verbindung wird geschlossen: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rohliste der Dateien und Ordner:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Gegliederte Liste der Dateien und Ordner:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Klicken und ziehen Sie einen der Links in Ihre Lesezeichen- oder Favoritenleiste"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Rechtsklick auf einen der Links und \"Zu Favoriten hinzufügen ...\" auswählen"; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Rechtsklick auf einen der Links und \"Add Link to Bookmarks...\" auswählen"; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Rechtsklick auf einen der Links und \"Bookmark link...\" auswählen"; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Rechtsklick auf einen der Links und \"Lesezeichen für diesen Link hinzufügen...\" auswählen"; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "1-Klick Zugang (net2ftp fragt nicht nach Ihrem Passwort - unsicher)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "2-Klick Zugang (net2ftp wird nach Ihrem Passwort fragen - sicher)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Achtung: Wenn Sie dieses Lesezeichen benutzen, werden Sie in einem Popup Fenster nach dem Usernamen und Passwort gefragt."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Verzeichniss auswählen"; +$net2ftp_messages["Please wait..."] = "Bitte warten..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Verzeichnisse, die \' enthalten, können nicht korrekt dargestellt werden. Diese können nur gelöscht werden. Bitte gehen Sie zurück und wählen Sie ein anderes Verzeichniss."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Tages-Beschränkung erreicht: Sie können keine Daten mehr transferieren."; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Um die faire Nutzung des Webservers für alle Nutzer zu gewährleisten, ist das Transfervolumen und die Laufzeit von Skripten pro Nutzer und Tag beschränkt. Wird die Beschränkung erreicht, können Sie immernoch den FTP Server durchsuchen, allerdings können keine Daten mehr hoch- oder runtergeladen werden."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Wenn Sie unbeschränkten Zugang benötigen, installieren Sie net2ftp bitte auf Ihrem eigenen Webserver."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Neuer Ordner"; +$net2ftp_messages["New file"] = "Neue Text-Datei"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Erweitert"; +$net2ftp_messages["Copy"] = "Kopieren"; +$net2ftp_messages["Move"] = "Verschieben"; +$net2ftp_messages["Delete"] = "Löschen"; +$net2ftp_messages["Rename"] = "Umbenennen"; +$net2ftp_messages["Chmod"] = "Zugriffsrechte"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Größe"; +$net2ftp_messages["Search"] = "Suchen"; +$net2ftp_messages["Go to the parent directory"] = "Übergeordneter Ordner"; +$net2ftp_messages["Go"] = "Weiter"; +$net2ftp_messages["Transform selected entries: "] = "Ausgewählte Einträge: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Erstellen eines neuen Unterverzeichnisses im Ordner %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Erstellen einer neuen Datein im Ordner %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Erstellen einer neuen Webseite mir vorgefertigeten Templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload neuer Dateien in Verzeichniss %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload von Ordnern und Dateien mit einem Java Applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload Dateien mit einem Flash Applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Installieren von Software-Paketen (benötigt PHP auf dem Webserver)"; +$net2ftp_messages["Go to the advanced functions"] = "Wechseln zu erweiterten Funktionen"; +$net2ftp_messages["Copy the selected entries"] = "Kopieren der ausgewählten Einträge"; +$net2ftp_messages["Move the selected entries"] = "Verschieben der ausgewählten Einträge"; +$net2ftp_messages["Delete the selected entries"] = "Löschen der ausgewählten Einträge"; +$net2ftp_messages["Rename the selected entries"] = "Umbenennen der ausgewählten Einträge"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Zugriffsrechte der ausgewählten Einträge ändern (funktioniert nur auf Unix/Linux/BSD Servern)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download eine ZIP Datei mit allen ausgewählten Elementen"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Entpacke das ausgewählte Archiv auf dem FTP-Server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zippen der ausgewälten Elemente zum speichern oder versenden per Mail"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Kalkulieren der Größe ausgewählter Einträge"; +$net2ftp_messages["Find files which contain a particular word"] = "Suchen nach Dateien mit einem bestimmten Wort im Text"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Absteigend nach %1\$s sortieren"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Aufsteigend nach %1\$s sortieren"; +$net2ftp_messages["Ascending order"] = "Aufsteigend"; +$net2ftp_messages["Descending order"] = "Absteigend"; +$net2ftp_messages["Upload files"] = "Upload Dateien"; +$net2ftp_messages["Up"] = "Aufwärts"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Alle Zeilen an- bzw. abwählen"; +$net2ftp_messages["All"] = "Alle"; +$net2ftp_messages["Name"] = "Name"; +$net2ftp_messages["Type"] = "Typ"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Besitzer"; +$net2ftp_messages["Group"] = "Gruppe"; +$net2ftp_messages["Perms"] = "Berechtigungen"; +$net2ftp_messages["Mod Time"] = "Änderungs-Datum/Zeit"; +$net2ftp_messages["Actions"] = "Aktionen"; +$net2ftp_messages["Select the directory %1\$s"] = "Wähle Verzeichnis %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Wähle Datei %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Wähle das Alias/Symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Gehe zum Unterverzeichnis %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Datei %1\$s herunterladen"; +$net2ftp_messages["Follow symlink %1\$s"] = "Folge Alias/Symlink %1\$s"; +$net2ftp_messages["View"] = "Anzeigen"; +$net2ftp_messages["Edit"] = "Bearbeiten"; +$net2ftp_messages["Update"] = "Aktualisieren"; +$net2ftp_messages["Open"] = "Öffnen"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Den Quellcode der Datei %1\$s ansehen"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Den Quellcode der Datei %1\$s bearbeiten"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Hochladen einer neuen Version der Datei %1\$s und zusammenfügen der Änderungen"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Die Datei %1\$s von Ihrem Webserver ansehen"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Achtung: Dieser Link wird nicht funktionieren, wenn Sie keinen eigene Domäne haben.)"; +$net2ftp_messages["This folder is empty"] = "Dieser Ordner ist leer"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Ordner"; +$net2ftp_messages["Files"] = "Dateien"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Unerkannter FTP Output"; +$net2ftp_messages["Number"] = "Nummer"; +$net2ftp_messages["Size"] = "Größe"; +$net2ftp_messages["Skipped"] = "Ausgelassen"; +$net2ftp_messages["Data transferred from this IP address today"] = "Heute übertragene Daten von IP-Adresse"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Heute übertragene Daten vom FTP-Server"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Sprache:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "Ansichts-Modus:"; +$net2ftp_messages["Directory Tree"] = "Verzeichnissbaum"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "In einem neuen Fenster %1\$s ausführen"; +$net2ftp_messages["This file is not accessible from the web"] = "Auf diese Datei kann aus dem Web nicht zugegriffen werden"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Doppleklick um in ein Unterverzeichniss zu wechseln:"; +$net2ftp_messages["Choose"] = "Auswahl"; +$net2ftp_messages["Up"] = "Aufwärts"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Größe der ausgewählten Ordner und Dateien"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Die verbrauchte Gesamtgröße der ausgewählten Ordner und Dateien ist:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Anzahl der Dateien, die ausgelassen wurden:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Berechtigungen von Ordnern und Dateien ändern"; +$net2ftp_messages["Set all permissions"] = "Setzen aller Berechtigungen"; +$net2ftp_messages["Read"] = "Lesen"; +$net2ftp_messages["Write"] = "Schreiben"; +$net2ftp_messages["Execute"] = "Ausführen"; +$net2ftp_messages["Owner"] = "Besitzer"; +$net2ftp_messages["Group"] = "Gruppe"; +$net2ftp_messages["Everyone"] = "Jeder"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Setze Zugriffsrechte des Ordners %1\$s auf: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Setze Zugriffsrechte der Datei%1\$s auf: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Setze Zugriffsrechte des Alias/Symlinks %1\$s auf: "; +$net2ftp_messages["Chmod value"] = "Zugriffsrecht"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Zugriffsrechte auch in Unterordnern dieses Ordners setzen"; +$net2ftp_messages["Chmod also the files within this directory"] = "Zugriffsrechte auch für Dateien in diesem Ordner setzen"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Das Zugriffsrecht %1\$s ist nicht innerhalb des erlaubten Bereichs 000-777. Bitte versuchen Sie es erneut."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Verzeichniss auswählen"; +$net2ftp_messages["Copy directories and files"] = "Dateien und Verzeichnisse kopieren"; +$net2ftp_messages["Move directories and files"] = "Dateien und Verzeichnisse verschieben"; +$net2ftp_messages["Delete directories and files"] = "Dateien und Verzeichnisse löschen"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Sind Sie sicher, dass Sie diese Dateien und Verzeichnisse löschen wollen?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Alle Unterordner und Dateien der ausgewählten Verzeichnisse werden ebenfalls gelöscht!"; +$net2ftp_messages["Set all targetdirectories"] = "Setzen als Zielverzeichniss für alle"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Um einen gemeinsamen Zielordner anzugeben, tragen Sie das Zielverzeichnis in das obere Eingabefeld ein, und klicken auf \"Set all targetdirectories\" bzw \"Alle Zielordner setzen\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Hinweis: der Zielordner muss bereits existieren, bevor Dateien hineinkopiert werden können."; +$net2ftp_messages["Different target FTP server:"] = "Anderer Ziel FTP Server:"; +$net2ftp_messages["Username"] = "Benutzername"; +$net2ftp_messages["Password"] = "Passwort"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leer lassen, um Dateien auf den gleichen FTP Server zu übertragen"; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Um Dateien auf einen anderen FTP-Server zu übertragen, geben Sie Ihre Login-Daten ein."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leer lassen, um Dateien auf dem gleichen FTP-Server zu verschieben."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Um Dateien auf einen anderen FTP-Server zu verschieben, geben Sie Ihre Login-Daten ein."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopiere Verzeichniss %1\$s nach:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Verschiebe Verzeichniss %1\$s nach:"; +$net2ftp_messages["Directory %1\$s"] = "Verzeichniss %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopiere Datei %1\$s nach:"; +$net2ftp_messages["Move file %1\$s to:"] = "Verschiebe Datei %1\$s nach:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopiere Symlink %1\$s nach:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Verschiebe Symlink %1\$s nach:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Ziel Verzeichniss:"; +$net2ftp_messages["Target name:"] = "Ziel Name:"; +$net2ftp_messages["Processing the entries:"] = "Verarbeiten der Einträge:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Erstellen einer Webseite i 4 einfachen Schritten"; +$net2ftp_messages["Template overview"] = "Template &Uml;bersicht"; +$net2ftp_messages["Template details"] = "Template Details"; +$net2ftp_messages["Files are copied"] = "Dateien wurden kopiert"; +$net2ftp_messages["Edit your pages"] = "Bearbeiten Sie Ihre Seiten"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Klicken Sie auf das Bild, um die Details eines Templates zu sehen."; +$net2ftp_messages["Back to the Browse screen"] = "Zurück zum Browse-Fenster"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Klicken Sie auf das Bild, um die Details des Templates zu sehen."; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Die Template-Datei wird auf den FTP-Server kopiert. Existierende Dateien mit gleichen Dateinamen werden überschrieben! Möchten Sie fortfahren?"; +$net2ftp_messages["Install template to directory: "] = "Installiere Template in Verzeichnis: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Größe"; +$net2ftp_messages["Preview page"] = "Seitenvorschau"; +$net2ftp_messages["opens in a new window"] = "öffnen in einem neuen Fenster"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Bitte warten Sie einen Moment, die Template-Dateien werden auf Ihren FTP-Server übertragen: "; +$net2ftp_messages["Done."] = "Fertig!"; +$net2ftp_messages["Continue"] = "Fortsetzen"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Seite bearbeiten"; +$net2ftp_messages["Browse the FTP server"] = "Diesen FTP-Server durchsuchen"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Fügen Sie diesen Link zu Ihren Favoriten hinzu, um die Seite erneut zu besuchen!"; +$net2ftp_messages["Edit website at %1\$s"] = "Bearbeite Webseite auf %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: Rechtsklick auf den Link und \"Zu Favoriten hinzufgen ...\" auswhlen"; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: Rechtsklick auf den Link und \"Bookmark This Link...\" auswhlen"; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNUNG: Unmöglich das Unterverzeichnis %1\$s zu erstellen. Vielleicht existiert es bereits. Setze fort..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Zielunterverzeichnis %1\$s erstellt"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNUNG: Konnte Datei %1\$s nicht kopieren. Setze fort..."; +$net2ftp_messages["Copied file %1\$s"] = "Datei %1\$s kopiert"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Die Vorlage kann nicht geöffnet werden"; +$net2ftp_messages["Unable to read the template file"] = "Die Vorlage kann nicht gelesen werden"; +$net2ftp_messages["Please specify a filename"] = "Bitte geben Sie einen Dateinamen an"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: Diese Datei wurde noch nicht gespeichert"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Speichern auf %1\$s im Modus %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Die Datei konnte nicht gespeichert werden"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Verzeichniss: "; +$net2ftp_messages["File: "] = "Datei: "; +$net2ftp_messages["New file name: "] = "Dateiname: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Hinweis: Ändern des Textarea-Typs speichert die Änderungen"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Suche Ordner und Dateien"; +$net2ftp_messages["Search again"] = "Erneute Suche"; +$net2ftp_messages["Search results"] = "Suchergebnisse"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Bitte geben Sie ein gültiges Suchwort oder Satzteil ein."; +$net2ftp_messages["Please enter a valid filename."] = "Bitte geben Sie einen gültigen Dateinamen an."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Bitte geben Sie eine gültige Dateigröße im \"von\" Textfeld ein, zum Beispiel 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Bitte geben Sie eine gültige Dateigröße im \"bis\" Textfeld ein, zum Beispiel 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Bitte geben Sie ein gültiges Datum in der Form J-m-t in das \"von\" Textfeld ein."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Bitte geben Sie ein gültiges Datum in der Form J-m-t in das \"bis\" Textfeld ein."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Das Suchwort %1\$s konnte in den ausgewählten Dateien und Ordnern nicht gefunden werden."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Das Suchwort %1\$s wurde in folgenden Dateien gefunden:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Suche nach einem Wort oder Satzteil"; +$net2ftp_messages["Case sensitive search"] = "Groß- und Kleinschreibung bei Suche beachten"; +$net2ftp_messages["Restrict the search to:"] = "Einschränken der Suche nach:"; +$net2ftp_messages["files with a filename like"] = "Dateien mit einem Namen wie"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "Dateien mit einer Größe"; +$net2ftp_messages["files which were last modified"] = "Dateien die zuletzt geändert wurden am"; +$net2ftp_messages["from"] = "von"; +$net2ftp_messages["to"] = "bis"; + +$net2ftp_messages["Directory"] = "Verzeichnis"; +$net2ftp_messages["File"] = "Datei"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Aktion"; +$net2ftp_messages["View"] = "Anzeigen"; +$net2ftp_messages["Edit"] = "Bearbeiten"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Den Quellcode der Datei %1\$s ansehen"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Den Quellcode der Datei %1\$s bearbeiten"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Installiere Software Pakete"; +$net2ftp_messages["Unable to open the template file"] = "Die Vorlage kann nicht geöffnet werden"; +$net2ftp_messages["Unable to read the template file"] = "Die Vorlage kann nicht gelesen werden"; +$net2ftp_messages["Unable to get the list of packages"] = "Die Paketliste konnte nicht geholt werden"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "Das net2ftp Installationsskript wurde auf den FTP-Server kopiert."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Dieses Skript läuft auf Ihrem Webserver und benötigt PHP."; +$net2ftp_messages["In order to run it, click on the link below."] = "Um es laufen zu lassen, klicken Sie auf den Link unten."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp hat versucht, die Verzeichnis-Abbildung zwischen FTP- und Webserver zu bestimmen."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Sollte der Link nicht korrekt sein, geben Sie URL manuell in Ihren Webbrowser ein."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload von Ordnern und Dateien mit einem Java Applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Ihr Browser unterstützt keine Java-Anwendungen oder Sie haben diese explizit in den Einstellungen deaktiviert."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "Um diese Funktion nutzen zu können benötigen Sie die neueste Java Version. Bitte gehen Sie auf java.com und installieren oder aktivieren Sie die neueste Version für Ihren Browser."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "Sie benötigen mindestens die JRE (Java Runtime Environment) Variante. Wenden Sie sich an Ihren Systemadministrator wenn Sie Probleme haben."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternativ können Sie auch die normale Upload oder Flash-Upload (erfordert das Flash-Plugin) Funktion nutzen."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Sobald Sie sich angemeldet haben, können Sie:"; +$net2ftp_messages["Navigate the FTP server"] = "Steuerung des FTP-Servers"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Durchsuchen der Verzeichnisse, dabei sehen Sie alle Dateien und Unterverzeichnisse."; +$net2ftp_messages["Upload files"] = "Upload Dateien"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Es gibt 3 verschiedene Möglichkeiten, um Dateien hochzuladen: das Standardformular, die hochladen und auspacken Funktion und das Java-Applet."; +$net2ftp_messages["Download files"] = "Dateien herunterladen"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Klicken Sie auf einen Dateinamen, um eine Datei schnell herunterzuladen.
Wählen Sie mehrere Dateien aus und klicken Sie auf Herunterladen; die ausgewählten Dateien werden als ZIP-Archiv herunter geladen."; +$net2ftp_messages["Zip files"] = "Erstellung von Zip-Archiven"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... sichern Sie das ZIP-Archiv auf dem FTP-Server oder versenden Sie es einfach per E-Mail."; +$net2ftp_messages["Unzip files"] = "Auspacken von kompimierten Dateien"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Diese Formate werden unterstützt: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Software installieren"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Wählen Sie aus einer Liste beliebter Anwendungen (PHP wird benötigt)."; +$net2ftp_messages["Copy, move and delete"] = "Kopieren, verschieben und löschen"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Verzeichnisse werde rekursiv behandelt, das heisst, dass ihr Inhalt (Unterverzeichnisse und Dateien) auch mit kopiert, verschoben oder gelöscht werden."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Kopieren oder Verschieben zu einem 2ten FTP-Server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Nützlich um Dateien auf Ihrem FTP-Server zu importieren oder um Dateien zu einem anderen FTP-Server zu exportieren."; +$net2ftp_messages["Rename and chmod"] = "Umbenennen and ändern der Berechtigungen (chmod)"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod behandelt Verzeichnisse rekursiv."; +$net2ftp_messages["View code with syntax highlighting"] = "Betrachten sie den Quellcode mit hervorgehobener Syntax."; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP-Funktionen sind direkt zu php.net verlinkt."; +$net2ftp_messages["Plain text editor"] = "Plain-Text-Editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Bearbeiten Sie Text in Ihrem Browser; immer wenn Sie Änderungen abspeichern, wird die Datei automatisch auf den FTP-Server übertragen."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Bearbeiten Sie HTML mit einem What-You-See-Is-What-You-Get (WYSIWYG) Editor; sie können zwischen 2 Editoren wählen."; +$net2ftp_messages["Code editor"] = "Code-Editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Bearbeiten Sie HTML and PHP in einem Editor mit Syntaxhighlighting (Hervorhebung der Syntax)."; +$net2ftp_messages["Search for words or phrases"] = "Suche nach Worten und Phrasen"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtern Sie Dateien nach Namen, dem Datum der letzter Bearbeitung und der Dateigröße."; +$net2ftp_messages["Calculate size"] = "Berechnung der Größe"; +$net2ftp_messages["Calculate the size of directories and files."] = "Berechnen Sie die Größe von Verzeichnissen und Dateien."; + +$net2ftp_messages["FTP server"] = "FTP Server"; +$net2ftp_messages["Example"] = "Beispiel"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Benutzername"; +$net2ftp_messages["Password"] = "Passwort"; +$net2ftp_messages["Anonymous"] = "Anonym"; +$net2ftp_messages["Passive mode"] = "Passiver Modus"; +$net2ftp_messages["Initial directory"] = "Anfangsverzeichniss"; +$net2ftp_messages["Language"] = "Sprache"; +$net2ftp_messages["Skin"] = "Skin"; +$net2ftp_messages["FTP mode"] = "FTP-Modus"; +$net2ftp_messages["Automatic"] = "Automatisch"; +$net2ftp_messages["Login"] = "Anmeldung"; +$net2ftp_messages["Clear cookies"] = "Cookies löschen"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Bitte geben Sie einen FTP-Server ein."; +$net2ftp_messages["Please enter a username."] = "Bitte tragen Sie einen Benutzernamen ein."; +$net2ftp_messages["Please enter a password."] = "Bitte geben Sie das Passwort ein."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Bitte geben Sie den Administrator-Benutzernamen und Passwort ein."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Bitte geben Sie den Benutzernamen und das Passwort für den FTP-Server %1\$s ein."; +$net2ftp_messages["Username"] = "Benutzername"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Ihre Sitzung ist abgelaufen, bitte geben Sie zum Fortsetzen das Passwort für Ihren FTP-Server %1\$s ein."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Ihre IP-Adresse hat sich geändert, bitte geben Sie zum Fortsetzen das Passwort für Ihren FTP-Server %1\$s ein."; +$net2ftp_messages["Password"] = "Passwort"; +$net2ftp_messages["Login"] = "Anmeldung"; +$net2ftp_messages["Continue"] = "Fortsetzen"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Startseite"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "Sie haben sie sich abgemeldet. Um sich wieder anzumelden, folgen Sie diesem Link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Achtung: Andere Benutzer dieses Computers können über den Zurück-Button Ihres Browsers auf Ihren FTP-Server zugreifen!"; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Um das zu verhindern, müssen Sie alle Browserfenster schließen."; +$net2ftp_messages["Close"] = "Schließen"; +$net2ftp_messages["Click here to close this window"] = "Klicken Sie hier, um dieses Fenster zu schließen"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Erstellen neuer Verzeichnisse"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Die neuen Verzeichnisse werden erstellt in %1\$s."; +$net2ftp_messages["New directory name:"] = "Neuer Verzeichnisname:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Verzeichnis %1\$s wurde erfolgreich angelegt."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Verzeichnis %1\$s kann nicht erstellt werden."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Senden von benutzerdefinierten FTP-Befehlen"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Liste der Befehle:"; +$net2ftp_messages["FTP server response:"] = "Antwort vom FTP-Server:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Umbenennen von Ordnern und Dateien"; +$net2ftp_messages["Old name: "] = "Alter Name: "; +$net2ftp_messages["New name: "] = "Neuer Name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Der neue Name darf kein Punkte beinhalten. Dieser Eintrag wurde nicht umbenannt in %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "Der neue Name darf keine verbotenen Schlüsselworte enthalten. Dieser Eintrag wurde nicht umbenannt in %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s wurde erfolgreich umbenannt in %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s konnte nicht in %2\$s umbenannt werden"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Entpacke Archive"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Übertrage Archiv %1\$s von %2\$s vom FTP-Server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Archiv %1\$s konnte nicht vom FTP-Server geholt werden"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Setzen als Zielverzeichniss für alle"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Um einen gemeinsamen Zielordner anzugeben, tragen Sie das Zielverzeichnis in das obere Eingabefeld ein, und klicken auf \"Set all targetdirectories\" bzw \"Alle Zielordner setzen\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Hinweis: der Zielordner muss bereits existieren, bevor Dateien hineinkopiert werden können."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Ziel Verzeichniss:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Benutze Ordner Namen (Erstellt Unterordner automatisch)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "In Ordner hochladen:"; +$net2ftp_messages["Files"] = "Dateien"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Hier angegebene Dateien werden zum FTP Server übertragen."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Hier angegebene Archive werden dekomprimiert und die Dateien werden an den FTP Server übermittelt."; +$net2ftp_messages["Add another"] = "Weitere hinzufügen"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Benutze Ordner Namen (Erstellt Unterordner automatisch)"; + +$net2ftp_messages["Choose a directory"] = "Verzeichniss auswählen"; +$net2ftp_messages["Please wait..."] = "Bitte warten..."; +$net2ftp_messages["Uploading... please wait..."] = "Upload... Bitte warten..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Wenn der Upload als die erlaubten %1\$s<\/b> dauert, sollten Sie es noch mal mit weniger/kleineren Dateien probieren."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Dieses Fenster schließt sich in wenigen Sekunden automatisch."; +$net2ftp_messages["Close window now"] = "Alle Fenster schließen"; + +$net2ftp_messages["Upload files and archives"] = "Dateien und Archive hochladen"; +$net2ftp_messages["Upload results"] = "Ergebnisse des Hochladens"; +$net2ftp_messages["Checking files:"] = "Überprüfe Dateien:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Übertragen der Dateien an den FTP-Server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Entpacke Archiv und übertrage Dateien auf den FTP-Server:"; +$net2ftp_messages["Upload more files and archives"] = "Weitere Dateien und Ordner hochladen"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Einschränkungen:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Die maximale Größe einer Datei ist von net2ftp auf %1\$s und von PHP auf %2\$s begrenzt"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Die maximale Zeit zum ausführen ist %1\$s Sekunden"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "Der FTP Transfer Modus (ASCII oder BINARY) wird automatisch gewählt, basierend auf der Dateierweiterung"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Wenn die Zieldatei bereits existiert wird sie überschrieben"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Datei %1\$s anzeigen"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Macromedia ShockWave Flash Film %1\$s betrachten"; +$net2ftp_messages["Image"] = "Bild"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax-Hervorhebung powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Um Bilder abzuspeichern, klicken Sie mit der rechten Maustaste darauf und wählen 'Bild speichern unter ...' im Kontextmenü"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip Einträge"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Datei als ZIP-Datei auf dem FTP-Server speichern als:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "ZIP-Archiv im E-Mail-Anhang versenden an:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Hinweis: Das Versenden von Dateien ist nicht anonym: Ihre IP-Addresse und die aktuelle Zeit werden an die E-Mail angehängt."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Weitere Kommentare an die EMail anhängen::"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Sie haben keinen Dateinamen für das ZIP-Archiv spezifiziert. Gehen Sie zurück und geben Sie einen Dateinamen an."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Die von Ihnen eingegebene EMail-Adresse (%1\$s) scheint ungültig zu sein.
Bitte geben Sie die Adresse in der Form benutzername@domain.tld (.de,.com usw.) ein"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/en-utf.inc.php b/ehcp/net2ftp/languages/en-utf.inc.php new file mode 100644 index 0000000..d8c3600 --- /dev/null +++ b/ehcp/net2ftp/languages/en-utf.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Please select at least one directory or file!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "The FTP server %1\$s is not in the list of allowed FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "The FTP server %1\$s is in the list of banned FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "The FTP server port %1\$s may not be used."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Your IP address (%1\$s) is in the list of banned IP addresses."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "An error has occured"; +$net2ftp_messages["Go back"] = "Go back"; +$net2ftp_messages["Go to the login page"] = "Go to the login page"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Unable to switch to the passive mode on FTP server %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Unable to switch to the passive mode on the second (target) FTP server %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Unable to rename directory or file %1\$s into %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Directory %1\$s successfully chmodded to %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "File %1\$s was successfully chmodded to %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Unable to delete the directory %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Unable to create the directory %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to read the temporary file"] = "Unable to read the temporary file"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Unable to create the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processing directory %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Unable to delete the subdirectory %1\$s - it may not be empty"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Processing of directory %1\$s completed"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "The target for file %1\$s is the same as the source, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Unable to copy the file %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Moved file %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Deleted file %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Unable to delete file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Unable to delete the local file"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "The zip file has been saved on the FTP server as %1\$s"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "The zip file has been sent to %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "File %1\$s is too big. This file will not be uploaded."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Could not generate a temporary file."; +$net2ftp_messages["File %1\$s could not be moved"] = "File %1\$s could not be moved"; +$net2ftp_messages["File %1\$s is OK"] = "File %1\$s is OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "You did not provide any file to upload."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "File %1\$s could not be transferred to the FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "File %1\$s has been transferred to the FTP server using FTP mode %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Transferring files to the FTP server"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Processing archive nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Unable to execute site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Your task was stopped"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "This time limit guarantees the fair use of the web server for everyone."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "You did not provide any text to send by email!"; +$net2ftp_messages["You did not supply a From address."] = "You did not supply a From address."; +$net2ftp_messages["You did not supply a To address."] = "You did not supply a To address."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Due to technical problems the email to %1\$s could not be sent."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blue"; +$net2ftp_messages["Grey"] = "Grey"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Yellow"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML file"; +$net2ftp_messages["Java source file"] = "Java source file"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Text file"; +$net2ftp_messages["Bitmap file"] = "Bitmap file"; +$net2ftp_messages["GIF file"] = "GIF file"; +$net2ftp_messages["JPEG file"] = "JPEG file"; +$net2ftp_messages["PNG file"] = "PNG file"; +$net2ftp_messages["TIF file"] = "TIF file"; +$net2ftp_messages["GIMP file"] = "GIMP file"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project file"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "ARC archive"; +$net2ftp_messages["ARJ archive"] = "ARJ archive"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archive"; +$net2ftp_messages["TAR archive"] = "TAR archive"; +$net2ftp_messages["Zip archive"] = "Zip archive"; +$net2ftp_messages["MOV movie file"] = "MOV movie file"; +$net2ftp_messages["MPEG movie file"] = "MPEG movie file"; +$net2ftp_messages["Real movie file"] = "Real movie file"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime movie file"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash file"; +$net2ftp_messages["Shockwave file"] = "Shockwave file"; +$net2ftp_messages["WAV sound file"] = "WAV sound file"; +$net2ftp_messages["Font file"] = "Font file"; +$net2ftp_messages["%1\$s File"] = "%1\$s File"; +$net2ftp_messages["File"] = "File"; + +// getAction() +$net2ftp_messages["Back"] = "Back"; +$net2ftp_messages["Submit"] = "Submit"; +$net2ftp_messages["Refresh"] = "Refresh"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Icons"; +$net2ftp_messages["List"] = "List"; +$net2ftp_messages["Logout"] = "Logout"; +$net2ftp_messages["Help"] = "Help"; +$net2ftp_messages["Bookmark"] = "Bookmark"; +$net2ftp_messages["Save"] = "Save"; +$net2ftp_messages["Default"] = "Default"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "License"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty logs"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Execute"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Advanced functions"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Troubleshoot net2ftp on this webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "The site command functions are not available on this webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "The Apache functions are not available on this webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "The MySQL functions are not available on this webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Unexpected state2 string. Exiting."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Connection settings:"; +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Password length"] = "Password length"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Troubleshoot your net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Checking if the FTP module of PHP is installed: "; +$net2ftp_messages["yes"] = "yes"; +$net2ftp_messages["no - please install it!"] = "no - please install it!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."; +$net2ftp_messages["Creating filename: "] = "Creating filename: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filename: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "not OK. Check the permissions of the %1\$s directory"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Writing some text to the file: "; +$net2ftp_messages["Closing the file: "] = "Closing the file: "; +$net2ftp_messages["Deleting the file: "] = "Deleting the file: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Note: when you will use this bookmark, a popup window will ask you for your username and password."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "New dir"; +$net2ftp_messages["New file"] = "New file"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Advanced"; +$net2ftp_messages["Copy"] = "Copy"; +$net2ftp_messages["Move"] = "Move"; +$net2ftp_messages["Delete"] = "Delete"; +$net2ftp_messages["Rename"] = "Rename"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Search"] = "Search"; +$net2ftp_messages["Go to the parent directory"] = "Go to the parent directory"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transform selected entries: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Make a new subdirectory in directory %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Create a new file in directory %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload new files in directory %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Go to the advanced functions"; +$net2ftp_messages["Copy the selected entries"] = "Copy the selected entries"; +$net2ftp_messages["Move the selected entries"] = "Move the selected entries"; +$net2ftp_messages["Delete the selected entries"] = "Delete the selected entries"; +$net2ftp_messages["Rename the selected entries"] = "Rename the selected entries"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod the selected entries (only works on Unix/Linux/BSD servers)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download a zip file containing all selected entries"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip the selected entries to save or email them"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calculate the size of the selected entries"; +$net2ftp_messages["Find files which contain a particular word"] = "Find files which contain a particular word"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Click to sort by %1\$s in descending order"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Click to sort by %1\$s in ascending order"; +$net2ftp_messages["Ascending order"] = "Ascending order"; +$net2ftp_messages["Descending order"] = "Descending order"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Up"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Click to check or uncheck all rows"; +$net2ftp_messages["All"] = "All"; +$net2ftp_messages["Name"] = "Name"; +$net2ftp_messages["Type"] = "Type"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Owner"; +$net2ftp_messages["Group"] = "Group"; +$net2ftp_messages["Perms"] = "Perms"; +$net2ftp_messages["Mod Time"] = "Mod Time"; +$net2ftp_messages["Actions"] = "Actions"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download the file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["Update"] = "Update"; +$net2ftp_messages["Open"] = "Open"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Upload a new version of the file %1\$s and merge the changes"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "View the file %1\$s from your HTTP web server"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Note: This link may not work if you don't have your own domain name.)"; +$net2ftp_messages["This folder is empty"] = "This folder is empty"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Directories"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Unrecognized FTP output"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Language:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "View mode:"; +$net2ftp_messages["Directory Tree"] = "Directory Tree"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Double-click to go to a subdirectory:"; +$net2ftp_messages["Choose"] = "Choose"; +$net2ftp_messages["Up"] = "Up"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Size of selected directories and files"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "The total size taken by the selected directories and files is:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod directories and files"; +$net2ftp_messages["Set all permissions"] = "Set all permissions"; +$net2ftp_messages["Read"] = "Read"; +$net2ftp_messages["Write"] = "Write"; +$net2ftp_messages["Execute"] = "Execute"; +$net2ftp_messages["Owner"] = "Owner"; +$net2ftp_messages["Group"] = "Group"; +$net2ftp_messages["Everyone"] = "Everyone"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions above and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Set the permissions of file %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Set the permissions of symlink %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Chmod value"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod also the subdirectories within this directory"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod also the files within this directory"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Copy directories and files"] = "Copy directories and files"; +$net2ftp_messages["Move directories and files"] = "Move directories and files"; +$net2ftp_messages["Delete directories and files"] = "Delete directories and files"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Are you sure you want to delete these directories and files?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "All the subdirectories and files of the selected directories will also be deleted!"; +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Different target FTP server:"] = "Different target FTP server:"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leave empty if you want to copy the files to the same FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "If you want to copy the files to another FTP server, enter your login data."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leave empty if you want to move the files to the same FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "If you want to move the files to another FTP server, enter your login data."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copy directory %1\$s to:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Move directory %1\$s to:"; +$net2ftp_messages["Directory %1\$s"] = "Directory %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copy file %1\$s to:"; +$net2ftp_messages["Move file %1\$s to:"] = "Move file %1\$s to:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Target name:"] = "Target name:"; +$net2ftp_messages["Processing the entries:"] = "Processing the entries:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: right-click on the link and choose \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: This file has not yet been saved"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Saved on %1\$s using mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: This file could not be saved"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directory: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "New file name: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Search for a word or phrase"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Restrict the search to:"; +$net2ftp_messages["files with a filename like"] = "files with a filename like"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "files with a size"; +$net2ftp_messages["files which were last modified"] = "files which were last modified"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["File"] = "File"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["Example"] = "Example"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Anonymous"] = "Anonymous"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Initial directory"] = "Initial directory"; +$net2ftp_messages["Language"] = "Language"; +$net2ftp_messages["Skin"] = "Skin"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Clear cookies"] = "Clear cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Create new directories"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "The new directories will be created in %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Directory %1\$s was successfully created."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rename directories and files"; +$net2ftp_messages["Old name: "] = "Old name: "; +$net2ftp_messages["New name: "] = "New name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "The new name may not contain any dots. This entry was not renamed to %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s was successfully renamed to %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload to directory:"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Files entered here will be transferred to the FTP server."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."; +$net2ftp_messages["Add another"] = "Add another"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; +$net2ftp_messages["Uploading... please wait..."] = "Uploading... please wait..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "Close window now"; + +$net2ftp_messages["Upload files and archives"] = "Upload files and archives"; +$net2ftp_messages["Upload results"] = "Upload results"; +$net2ftp_messages["Checking files:"] = "Checking files:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transferring files to the FTP server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decompressing archives and transferring files to the FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Upload more files and archives"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "The maximum execution time is %1\$s seconds"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "If the destination file already exists, it will be overwritten"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Save the zip file on the FTP server as:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email the zip file in attachment to:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Some additional comments to add in the email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "You did not enter a filename for the zipfile. Go back and enter a filename."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/en.inc.php b/ehcp/net2ftp/languages/en.inc.php new file mode 100644 index 0000000..3e93367 --- /dev/null +++ b/ehcp/net2ftp/languages/en.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Please select at least one directory or file!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "The FTP server %1\$s is not in the list of allowed FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "The FTP server %1\$s is in the list of banned FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "The FTP server port %1\$s may not be used."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Your IP address (%1\$s) is in the list of banned IP addresses."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "An error has occured"; +$net2ftp_messages["Go back"] = "Go back"; +$net2ftp_messages["Go to the login page"] = "Go to the login page"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Unable to switch to the passive mode on FTP server %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Unable to switch to the passive mode on the second (target) FTP server %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Unable to rename directory or file %1\$s into %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Directory %1\$s successfully chmodded to %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "File %1\$s was successfully chmodded to %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Unable to delete the directory %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Unable to create the directory %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to read the temporary file"] = "Unable to read the temporary file"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Unable to create the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processing directory %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Unable to delete the subdirectory %1\$s - it may not be empty"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Processing of directory %1\$s completed"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "The target for file %1\$s is the same as the source, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Unable to copy the file %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Moved file %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Deleted file %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Unable to delete file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Unable to delete the local file"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "The zip file has been saved on the FTP server as %1\$s"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "The zip file has been sent to %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "File %1\$s is too big. This file will not be uploaded."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Could not generate a temporary file."; +$net2ftp_messages["File %1\$s could not be moved"] = "File %1\$s could not be moved"; +$net2ftp_messages["File %1\$s is OK"] = "File %1\$s is OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "You did not provide any file to upload."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "File %1\$s could not be transferred to the FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "File %1\$s has been transferred to the FTP server using FTP mode %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Transferring files to the FTP server"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Processing archive nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Unable to execute site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Your task was stopped"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "This time limit guarantees the fair use of the web server for everyone."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "You did not provide any text to send by email!"; +$net2ftp_messages["You did not supply a From address."] = "You did not supply a From address."; +$net2ftp_messages["You did not supply a To address."] = "You did not supply a To address."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Due to technical problems the email to %1\$s could not be sent."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blue"; +$net2ftp_messages["Grey"] = "Grey"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Yellow"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML file"; +$net2ftp_messages["Java source file"] = "Java source file"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Text file"; +$net2ftp_messages["Bitmap file"] = "Bitmap file"; +$net2ftp_messages["GIF file"] = "GIF file"; +$net2ftp_messages["JPEG file"] = "JPEG file"; +$net2ftp_messages["PNG file"] = "PNG file"; +$net2ftp_messages["TIF file"] = "TIF file"; +$net2ftp_messages["GIMP file"] = "GIMP file"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project file"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "ARC archive"; +$net2ftp_messages["ARJ archive"] = "ARJ archive"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archive"; +$net2ftp_messages["TAR archive"] = "TAR archive"; +$net2ftp_messages["Zip archive"] = "Zip archive"; +$net2ftp_messages["MOV movie file"] = "MOV movie file"; +$net2ftp_messages["MPEG movie file"] = "MPEG movie file"; +$net2ftp_messages["Real movie file"] = "Real movie file"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime movie file"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash file"; +$net2ftp_messages["Shockwave file"] = "Shockwave file"; +$net2ftp_messages["WAV sound file"] = "WAV sound file"; +$net2ftp_messages["Font file"] = "Font file"; +$net2ftp_messages["%1\$s File"] = "%1\$s File"; +$net2ftp_messages["File"] = "File"; + +// getAction() +$net2ftp_messages["Back"] = "Back"; +$net2ftp_messages["Submit"] = "Submit"; +$net2ftp_messages["Refresh"] = "Refresh"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Icons"; +$net2ftp_messages["List"] = "List"; +$net2ftp_messages["Logout"] = "Logout"; +$net2ftp_messages["Help"] = "Help"; +$net2ftp_messages["Bookmark"] = "Bookmark"; +$net2ftp_messages["Save"] = "Save"; +$net2ftp_messages["Default"] = "Default"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "License"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty logs"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Execute"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Advanced functions"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Troubleshoot net2ftp on this webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "The site command functions are not available on this webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "The Apache functions are not available on this webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "The MySQL functions are not available on this webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Unexpected state2 string. Exiting."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Connection settings:"; +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Password length"] = "Password length"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Troubleshoot your net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Checking if the FTP module of PHP is installed: "; +$net2ftp_messages["yes"] = "yes"; +$net2ftp_messages["no - please install it!"] = "no - please install it!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."; +$net2ftp_messages["Creating filename: "] = "Creating filename: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filename: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "not OK. Check the permissions of the %1\$s directory"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Writing some text to the file: "; +$net2ftp_messages["Closing the file: "] = "Closing the file: "; +$net2ftp_messages["Deleting the file: "] = "Deleting the file: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Note: when you will use this bookmark, a popup window will ask you for your username and password."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "New dir"; +$net2ftp_messages["New file"] = "New file"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Advanced"; +$net2ftp_messages["Copy"] = "Copy"; +$net2ftp_messages["Move"] = "Move"; +$net2ftp_messages["Delete"] = "Delete"; +$net2ftp_messages["Rename"] = "Rename"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Search"] = "Search"; +$net2ftp_messages["Go to the parent directory"] = "Go to the parent directory"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transform selected entries: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Make a new subdirectory in directory %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Create a new file in directory %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload new files in directory %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Go to the advanced functions"; +$net2ftp_messages["Copy the selected entries"] = "Copy the selected entries"; +$net2ftp_messages["Move the selected entries"] = "Move the selected entries"; +$net2ftp_messages["Delete the selected entries"] = "Delete the selected entries"; +$net2ftp_messages["Rename the selected entries"] = "Rename the selected entries"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod the selected entries (only works on Unix/Linux/BSD servers)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download a zip file containing all selected entries"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip the selected entries to save or email them"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calculate the size of the selected entries"; +$net2ftp_messages["Find files which contain a particular word"] = "Find files which contain a particular word"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Click to sort by %1\$s in descending order"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Click to sort by %1\$s in ascending order"; +$net2ftp_messages["Ascending order"] = "Ascending order"; +$net2ftp_messages["Descending order"] = "Descending order"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Up"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Click to check or uncheck all rows"; +$net2ftp_messages["All"] = "All"; +$net2ftp_messages["Name"] = "Name"; +$net2ftp_messages["Type"] = "Type"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Owner"; +$net2ftp_messages["Group"] = "Group"; +$net2ftp_messages["Perms"] = "Perms"; +$net2ftp_messages["Mod Time"] = "Mod Time"; +$net2ftp_messages["Actions"] = "Actions"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download the file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["Update"] = "Update"; +$net2ftp_messages["Open"] = "Open"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Upload a new version of the file %1\$s and merge the changes"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "View the file %1\$s from your HTTP web server"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Note: This link may not work if you don't have your own domain name.)"; +$net2ftp_messages["This folder is empty"] = "This folder is empty"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Directories"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Unrecognized FTP output"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Language:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "View mode:"; +$net2ftp_messages["Directory Tree"] = "Directory Tree"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Double-click to go to a subdirectory:"; +$net2ftp_messages["Choose"] = "Choose"; +$net2ftp_messages["Up"] = "Up"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Size of selected directories and files"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "The total size taken by the selected directories and files is:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod directories and files"; +$net2ftp_messages["Set all permissions"] = "Set all permissions"; +$net2ftp_messages["Read"] = "Read"; +$net2ftp_messages["Write"] = "Write"; +$net2ftp_messages["Execute"] = "Execute"; +$net2ftp_messages["Owner"] = "Owner"; +$net2ftp_messages["Group"] = "Group"; +$net2ftp_messages["Everyone"] = "Everyone"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Set the permissions of file %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Set the permissions of symlink %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Chmod value"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod also the subdirectories within this directory"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod also the files within this directory"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Copy directories and files"] = "Copy directories and files"; +$net2ftp_messages["Move directories and files"] = "Move directories and files"; +$net2ftp_messages["Delete directories and files"] = "Delete directories and files"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Are you sure you want to delete these directories and files?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "All the subdirectories and files of the selected directories will also be deleted!"; +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Different target FTP server:"] = "Different target FTP server:"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leave empty if you want to copy the files to the same FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "If you want to copy the files to another FTP server, enter your login data."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leave empty if you want to move the files to the same FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "If you want to move the files to another FTP server, enter your login data."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copy directory %1\$s to:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Move directory %1\$s to:"; +$net2ftp_messages["Directory %1\$s"] = "Directory %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copy file %1\$s to:"; +$net2ftp_messages["Move file %1\$s to:"] = "Move file %1\$s to:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Target name:"] = "Target name:"; +$net2ftp_messages["Processing the entries:"] = "Processing the entries:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: right-click on the link and choose \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: This file has not yet been saved"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Saved on %1\$s using mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: This file could not be saved"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directory: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "New file name: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Search for a word or phrase"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Restrict the search to:"; +$net2ftp_messages["files with a filename like"] = "files with a filename like"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "files with a size"; +$net2ftp_messages["files which were last modified"] = "files which were last modified"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "Directory"; +$net2ftp_messages["File"] = "File"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["Example"] = "Example"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Anonymous"] = "Anonymous"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Initial directory"] = "Initial directory"; +$net2ftp_messages["Language"] = "Language"; +$net2ftp_messages["Skin"] = "Skin"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Clear cookies"] = "Clear cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Create new directories"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "The new directories will be created in %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Directory %1\$s was successfully created."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rename directories and files"; +$net2ftp_messages["Old name: "] = "Old name: "; +$net2ftp_messages["New name: "] = "New name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "The new name may not contain any dots. This entry was not renamed to %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s was successfully renamed to %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload to directory:"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Files entered here will be transferred to the FTP server."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."; +$net2ftp_messages["Add another"] = "Add another"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; +$net2ftp_messages["Uploading... please wait..."] = "Uploading... please wait..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "Close window now"; + +$net2ftp_messages["Upload files and archives"] = "Upload files and archives"; +$net2ftp_messages["Upload results"] = "Upload results"; +$net2ftp_messages["Checking files:"] = "Checking files:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transferring files to the FTP server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decompressing archives and transferring files to the FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Upload more files and archives"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "The maximum execution time is %1\$s seconds"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "If the destination file already exists, it will be overwritten"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Save the zip file on the FTP server as:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email the zip file in attachment to:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Some additional comments to add in the email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "You did not enter a filename for the zipfile. Go back and enter a filename."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/es.inc.php b/ehcp/net2ftp/languages/es.inc.php new file mode 100644 index 0000000..ba2d7df --- /dev/null +++ b/ehcp/net2ftp/languages/es.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Tu directorio root %1\$s no existe o no a sido seleccionado."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "El directorio %1\$s No ha sido seleccionado - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Ejecutar %1\$s en una ventana nueva"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Por favor selecciona por lo menos un archivo o directorio!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "El servidor FTP %1\$s no esta en la lista de servidores permitidos."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "El servidor FTP %1\$s esta en la lista de servidores no permitidos."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "El puerto %1\$s del servidor FTP no puede ser utilizado."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Tu direccin IP (%1\$s) esta en la lista de IPS no permitidas."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Se ha producido un error"; +$net2ftp_messages["Go back"] = "Volver"; +$net2ftp_messages["Go to the login page"] = "Volver a iniciar sesin"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Imposible conectarse al servidor FTP %1\$s en el puerto %2\$s.

Estas seguro que esta es la direccin correcta del servidor FTP? Normalmente esta direccin es distinta a la direccin para acceder por web. Por favor comuncate con tu proveedor de Internet o tu administrador de sistemas para solicitar ayuda.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Imposible iniciar sesin en el servidor FTP %1\$s utilizando el nombre de usuario %2\$s.

Estas seguro que tu nombre de usuario y contrasea son correctos?
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Imposible cambiar a modo pasivo en el servidor %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Imposible conectar al segundo servidor FTP %1\$s en el puerto %2\$s.

Estas seguro que esta es la direccin correcta del servidor FTP? Normalmente esta direccin es distinta a la direccin para acceder por HTTP. Por favor comuncate con tu proveedor de Internet o tu administrador de sistemas para solicitar ayuda.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Imposible iniciar sesin en el segundo servidor FTP %1\$s utilizando el nombre de usuario %2\$s.

Estas seguro que tu nombre de usuario y contrasea son correctos? Por favor comuncate con tu proveedor de Internet o tu administrador de sistemas para solicitar ayuda.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Imposible cambiar a modo pasivo de transferencia en el segundo servidor FTP %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Imposible renombrar el archivo o directorio %1\$s a %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Imposible ejecutar el comando %1\$s. El comando CHMOD solo esta disponible en servidores Unix, no en servidores Windows."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Se cambiaron los permisos del directorio %1\$s a %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Se cambiaron los permisos del archivo %1\$s a %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Todos los directorios y archivos seleccionados fueron procesados exitosamente."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Unable to delete the directory %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Imposible crear el directorio %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Imposible crear el archivo temporal"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Imposible descargar el archivo %1\$s del servidor FTP y guardarlo temporalmente como %2\$s.
Revisa los permisos del directorio %3\$s .
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Imposible abrir el archivo temporal. Revisa los permisos del directorio %1\$s ."; +$net2ftp_messages["Unable to read the temporary file"] = "Imposible leer el archivo temporal"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Imposible cerrar el archivo temporal"; +$net2ftp_messages["Unable to delete the temporary file"] = "Imposible eliminar el archivo temporal"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Imposible crear el archivo temporal. Revisa los permisos del directorio %1\$s ."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Imposible abrir el archivo temporal. Revisa los permisos del directorio %1\$s ."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Imposible escribir en el archivo temporal %1\$s.
Revisa los permisos del directorio %1\$s ."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Imposible cerrar el archivo temporal"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Imposible transferir el archivo %1\$s al servidor FTP.
Es posible que no tengas los permisos adecuados."; +$net2ftp_messages["Unable to delete the temporary file"] = "Imposible eliminar el archivo temporal"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Procesando el directorio %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "El directorio %1\$s es el mismo que el subdirectorio%2\$s, este directorio sera omitido."; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Imposible crear el directorio %1\$s. Puede que ya exista. Continuando con el proceso de copiar y mover..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Imposible eliminar el subdirectorio %1\$s - es posible que no este vaci"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Subdirectorio eliminado %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Subdirectorio eliminado %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Procesamiento del directorio %1\$s completado"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "El destino del archivo %1\$s es el mismo que su origen, este archivo sera omitido"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Imposible copiar el archivo %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "El archivo %1\$s fue movido"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "El archivo %1\$s fue eliminado"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Todos los directorios y archivos seleccionados fueron procesados exitosamente."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Imposible copiar el archivo remoto %1\$s al directorio local utilizando %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Imposible eliminar el archivo %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Imposible copiar el archivo local %1\$s al servidor remoto utilizando %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Imposible eliminar el archivo local"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Imposible eliminar el archivo temporal"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Imposible crear el archivo temporal"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "El archivo comprimido fue guardado en el servidor como %1\$s"; +$net2ftp_messages["Requested files"] = "Archivos solicitados"; + +$net2ftp_messages["Dear,"] = "Estimado/a,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Alguien ah solicitado que los archivos adjuntos en este correo electrnico fueran enviados a esta direccin (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Si no sabes de que se trata, o no confas en esta persona, por favor elimina este correo sin abrir los archivos adjuntos."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Si no abres los archivos adjuntos, tu ordenador no puede sufrir ningn tipo de dao."; +$net2ftp_messages["Information about the sender: "] = "Informacion del remitente: "; +$net2ftp_messages["IP address: "] = "Direccion IP: "; +$net2ftp_messages["Time of sending: "] = "Hora en la que fue enviado: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Enviado por medio del programa net2ftp en este servidor: "; +$net2ftp_messages["Webmaster's email: "] = "Correo electrnico del encargado: "; +$net2ftp_messages["Message of the sender: "] = "Mensaje: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp es software gratuito, distribuido bajo la licencia GNU/GPL. Para mas informacin, visita http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "El archivo comprimido ha sido enviado a %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "El archivo %1\$s es demasiado grande. Este archivo no ser subido al servidor."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Imposible generar el archivo temporal."; +$net2ftp_messages["File %1\$s could not be moved"] = "El archivo %1\$s no pudo ser movido."; +$net2ftp_messages["File %1\$s is OK"] = "El archivo %1\$s es correcto"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Imposible mover el archivo transferido al directorio temporal.

El administrador de este servidor debe dar permisos con chmod 777 el directorio /temp que utiliza net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "No has seleccionado ningn archivo para ser subido."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "El archivo %1\$s no pudo ser transferido al servidor FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "El archivo %1\$s ha sido transferido al servidor utilizando %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Transfiriendo archivos al servidor FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Procesando el archivo %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "El archivo %1\$s no fue procesado porque su extensin no es reconocida. Por el momento net2ftp solo soporta archivos comprimidos zip, tar, tgz o gz."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Imposible ejecutar el comando %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Tu proceso fue detenido"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "El proceso que ejecutaste con net2ftp tard mas de %1\$s segundos, y por lo tanto fue detenido."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Este tiempo limite garantiza una distribucin equitativa para todos los usuarios."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Intenta dividir tu proceso: intenta transferir menos archivos, intenta transferir los archivos mas grandes por separado."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Si en verdad necesitas que net2ftp ejecute procesos tan grandes, considera instalar net2ftp en tu propio servidor."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "No escribiste nada para ser enviado por correo electrnico!"; +$net2ftp_messages["You did not supply a From address."] = "No especificaste la direccin del remitente."; +$net2ftp_messages["You did not supply a To address."] = "No especificaste la direccin del destinatario."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Debido a problemas tcnicos el correo electronico a %1\$s no pudo ser enviado."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Azul"; +$net2ftp_messages["Grey"] = "Gris"; +$net2ftp_messages["Black"] = "Negro"; +$net2ftp_messages["Yellow"] = "Amarillo"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Directorio"; +$net2ftp_messages["Symlink"] = "Enlace"; +$net2ftp_messages["ASP script"] = "Script ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "Hoja de estilos"; +$net2ftp_messages["HTML file"] = "Archivo HTML"; +$net2ftp_messages["Java source file"] = "Archivo de codigo JAVA"; +$net2ftp_messages["JavaScript file"] = "Archivo JavaScript"; +$net2ftp_messages["PHP Source"] = "Codigo PHP"; +$net2ftp_messages["PHP script"] = "Script PHP"; +$net2ftp_messages["Text file"] = "Archivo de texto"; +$net2ftp_messages["Bitmap file"] = "Imagen Bitmap"; +$net2ftp_messages["GIF file"] = "Imagen GIF"; +$net2ftp_messages["JPEG file"] = "Imagen JPEG"; +$net2ftp_messages["PNG file"] = "Imagen PNG"; +$net2ftp_messages["TIF file"] = "Imagen TIF"; +$net2ftp_messages["GIMP file"] = "Imagen GIMP"; +$net2ftp_messages["Executable"] = "Ejecutable"; +$net2ftp_messages["Shell script"] = "Script de shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Documento Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Tabla Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - Presentacion PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Base de datos Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Imagen Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Archivo de proyecto"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Documento Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Plantilla Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Tabla Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Plantilla Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Docuemento Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Plantilla Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Presentacion Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Plantilla Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Documento global Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Documento Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - Documento StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - Documento global StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - Tabla StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - Documento StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - Presentacion StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - Archivo StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - Documento StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - Documento StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - Archivo de correo StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = "Documento Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "Archivo ARC"; +$net2ftp_messages["ARJ archive"] = "Archivo ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "Archivo GZ"; +$net2ftp_messages["TAR archive"] = "Archivo TAR"; +$net2ftp_messages["Zip archive"] = "Archivo Zip"; +$net2ftp_messages["MOV movie file"] = "Pelicula MOV"; +$net2ftp_messages["MPEG movie file"] = "Pelicula MPEG"; +$net2ftp_messages["Real movie file"] = "Pelicula Real"; +$net2ftp_messages["Quicktime movie file"] = "Pelicula Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "Pelicula Flash Shockwave"; +$net2ftp_messages["Shockwave file"] = "Archivo Shockwave"; +$net2ftp_messages["WAV sound file"] = "Archivo de sonido WAV"; +$net2ftp_messages["Font file"] = "Archivo de fuente"; +$net2ftp_messages["%1\$s File"] = "Archivo %1\$s"; +$net2ftp_messages["File"] = "Archivo"; + +// getAction() +$net2ftp_messages["Back"] = "Volver"; +$net2ftp_messages["Submit"] = "Aceptar"; +$net2ftp_messages["Refresh"] = "Actualizar"; +$net2ftp_messages["Details"] = "Detalles"; +$net2ftp_messages["Icons"] = "Iconos"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Cerrar sesin"; +$net2ftp_messages["Help"] = "Ayuda"; +$net2ftp_messages["Bookmark"] = "Favorito"; +$net2ftp_messages["Save"] = "Salvar"; +$net2ftp_messages["Default"] = "Defecto"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licencia"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Ejecutar"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Funciones avanzadas"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Depurar net2ftp en este servidor"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Depurar un servidor FTP externo"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Las funciones de comando de sitio no estn disponibles en este servidor."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Las funciones integradas de Apache no estn disponibles en este servidor."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Las funciones integradas de MySQL no estn disponibles en este servidor."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Cadena de estado dos inesperada. Terminando."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Depurar un servidor FTP externo"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Configuracion de la conexion:"; +$net2ftp_messages["FTP server"] = "Servidor FTP"; +$net2ftp_messages["FTP server port"] = "Puerto del servidor FTP"; +$net2ftp_messages["Username"] = "Nombre de Usuario"; +$net2ftp_messages["Password"] = "Contrasea"; +$net2ftp_messages["Password length"] = "Tamao de la contrasea"; +$net2ftp_messages["Passive mode"] = "Modo pasivo"; +$net2ftp_messages["Directory"] = "Directorio"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Conectando al servidor FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Iniciando sesin en el servidor FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Iniciando modo pasivo de transferencia: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Cambiando al directorio %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "El directorio en el servidor FTP es: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Obteniendo la lista de archivos y directorios: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Intentando por segunda vez obtener la lista de directorios y archivos: "; +$net2ftp_messages["Closing the connection: "] = "Cerrando la conexion: "; +$net2ftp_messages["Raw list of directories and files:"] = "Lista de directorios y archivos:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Lista organizada de directorios y archivos:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Depurar tu instalacion de net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Revisando si el modulo FTP de PHP esta activado"; +$net2ftp_messages["yes"] = "si"; +$net2ftp_messages["no - please install it!"] = "no - por favor instalalo!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Revisando los permisos del directorio en el Servidor: un pequeo archivo ser colocado en tu directorio /temp y despus ser eliminado."; +$net2ftp_messages["Creating filename: "] = "Creando el archivo llamado: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Nombre de archivo: %tempfilename"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "Error. Revisa los permisos del directorio %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Escribiendo texto en el archivo: "; +$net2ftp_messages["Closing the file: "] = "Cerrando el archivo: "; +$net2ftp_messages["Deleting the file: "] = "Eliminando el archivo: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Conectando al servidor FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Iniciando sesin en el servidor FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Iniciando modo pasivo de transferencia: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Cambiando al directorio %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "El directorio en el servidor FTP es: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Obteniendo la lista de archivos y directorios: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Intentando por segunda vez obtener la lista de directorios y archivos: "; +$net2ftp_messages["Closing the connection: "] = "Cerrando la conexion: "; +$net2ftp_messages["Raw list of directories and files:"] = "Lista de directorios y archivos:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Lista organizada de directorios y archivos:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Nota: cuando uses este Favorito, aparecer una ventana pidindote nombre de usuario y contrasea."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Selecciona un directorio"; +$net2ftp_messages["Please wait..."] = "Por favor espera..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Los directorios que contienen el carcter \' no pueden ser vistos correctamente. Solo pueden ser eliminados. Por favor vuelve atrs y elige otro subdirectorio."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nuevo directorio"; +$net2ftp_messages["New file"] = "Nuevo archivo"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Subir archivo"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Avanzado"; +$net2ftp_messages["Copy"] = "Copiar"; +$net2ftp_messages["Move"] = "Mover"; +$net2ftp_messages["Delete"] = "Eliminar"; +$net2ftp_messages["Rename"] = "Renombrar"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Descargar"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Comprimir"; +$net2ftp_messages["Size"] = "Tamao"; +$net2ftp_messages["Search"] = "Buscar"; +$net2ftp_messages["Go to the parent directory"] = "Go to the parent directory"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transformar los elementos seleccionados: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Crear un nuevo subdirectorio en el directorio %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Crear nuevo archivo en el directorio %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Transferir un archivo al directorio %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Ir a las funciones avanzadas"; +$net2ftp_messages["Copy the selected entries"] = "Copiar los elementos seleccionados"; +$net2ftp_messages["Move the selected entries"] = "Mover los elementos seleccionados"; +$net2ftp_messages["Delete the selected entries"] = "Eliminar los elementos seleccionados"; +$net2ftp_messages["Rename the selected entries"] = "Renombrar los elementos seleccionados"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Configurar permisos de los elementos seleccionados (solo funciona en servidor Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Descargar un archivo comprimido con todos los elementos"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Comprimir los elementos seleccionados para guardarlos o mandarlos por correo electrnico"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calcular el tamao de los elementos seleccionados"; +$net2ftp_messages["Find files which contain a particular word"] = "Buscar archivos que contengan una palabra"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Haz click para organizar los %1\$s en orden descendente"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Haz click para organizar los %1\$s en orden ascendente"; +$net2ftp_messages["Ascending order"] = "Orden ascendente"; +$net2ftp_messages["Descending order"] = "Orden descendente"; +$net2ftp_messages["Upload files"] = "Subir tus archivos"; +$net2ftp_messages["Up"] = "Arriba"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Click to check or uncheck all rows"; +$net2ftp_messages["All"] = "All"; +$net2ftp_messages["Name"] = "Nombre"; +$net2ftp_messages["Type"] = "Tipo"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Propietario"; +$net2ftp_messages["Group"] = "Grupo"; +$net2ftp_messages["Perms"] = "Permisos"; +$net2ftp_messages["Mod Time"] = "Hora de mod."; +$net2ftp_messages["Actions"] = "Acciones"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download the file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Ver"; +$net2ftp_messages["Edit"] = "Editar"; +$net2ftp_messages["Update"] = "Actualizar"; +$net2ftp_messages["Open"] = "Abrir"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Ver el codigo seleccionado del archivo %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Editar el codigo del archivo %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Subir una nueva version del archivo %1\$s y actualiza los cambios"; +$net2ftp_messages["View image %1\$s"] = "Ver imagen %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Ver los archivos %1\$s desde tu servidor web"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Nota: Este link puede que no funcione si no tienes tu propio nombre de dominio.)"; +$net2ftp_messages["This folder is empty"] = "El directorio esta vacio"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Directorios"; +$net2ftp_messages["Files"] = "Archivos"; +$net2ftp_messages["Symlinks"] = "Enlaces"; +$net2ftp_messages["Unrecognized FTP output"] = "Respuesta FTP no reconocida"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Tamao"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Idioma:"; +$net2ftp_messages["Skin:"] = "Plantilla:"; +$net2ftp_messages["View mode:"] = "Modo de vista:"; +$net2ftp_messages["Directory Tree"] = "Arbol de directorios"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Ejecutar %1\$s en una ventana nueva"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Haz doble click para ir al subdirectorio:"; +$net2ftp_messages["Choose"] = "Elegir"; +$net2ftp_messages["Up"] = "Arriba"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Tamao de los directorios y archivos seleccionados"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "El tamao total de los archivos y directorios seleccionados es de:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Cambiar permisos de directorios y archivos"; +$net2ftp_messages["Set all permissions"] = "Cambiar todos los permidos"; +$net2ftp_messages["Read"] = "Leer"; +$net2ftp_messages["Write"] = "Escribir"; +$net2ftp_messages["Execute"] = "Ejecutar"; +$net2ftp_messages["Owner"] = "Propietario"; +$net2ftp_messages["Group"] = "Grupo"; +$net2ftp_messages["Everyone"] = "Todos"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Para dar permisos a todos de igual manera, elige los permisos y haz click en \"Dar permisos a todos\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Dar permisos al directorio %1\$s como: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Dar permisos al archivo %1\$s como: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Dar permisos al enlace %1\$s como: "; +$net2ftp_messages["Chmod value"] = "Valor Chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Dar permisos tambien los subdirectorios dentro de este directorio"; +$net2ftp_messages["Chmod also the files within this directory"] = "Dar permisos tambien los archivos dentro de este directorio"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "El cdigo de permiso %1\$s esta fuera del rango 000-777. Porfavor intenta de nuevo."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Selecciona un directorio"; +$net2ftp_messages["Copy directories and files"] = "Copiar directorios y archivos"; +$net2ftp_messages["Move directories and files"] = "Mover directorios y archivos"; +$net2ftp_messages["Delete directories and files"] = "Eliminar directorios y archivos"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Estas seguro que quieres eliminar estos directorios y archivos?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Todos los archivos y subdirectorios dentro de los directorios seleccionados sern eliminados!"; +$net2ftp_messages["Set all targetdirectories"] = "Especificar el directorio destino"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Para especificar un directorio destino comn, escribe el nombre del directorio en el campo que esta arriba y haz clic en \"Especificar directorio destino comun\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: El directorio destino debe existir antes de poder copiar archivos dentro de el."; +$net2ftp_messages["Different target FTP server:"] = "Servidor FTP de destino:"; +$net2ftp_messages["Username"] = "Nombre de Usuario"; +$net2ftp_messages["Password"] = "Contrasea"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Deja en blanco si quieres copiar los archivos al mismo servidor FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Si quieres copiar los archivos a un servidor FTP distingo, escribe tu nombre de usuario, contrasea y otros datos."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Deja en blanco si quieres mover los archivos al mismo servidor FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Si quieres mover los archivos a un servidor FTP distingo, escribe tu nombre de usuario, contrasea y otros datos."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copiar directorio %1\$s to:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Mover directorio %1\$s to:"; +$net2ftp_messages["Directory %1\$s"] = "Directorio %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copiar archivo %1\$s to:"; +$net2ftp_messages["Move file %1\$s to:"] = "Mover archivo %1\$s to:"; +$net2ftp_messages["File %1\$s"] = "Archivo %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copiar enlace %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Mover enlace %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Enlace %1\$s"; +$net2ftp_messages["Target directory:"] = "Directorio destino:"; +$net2ftp_messages["Target name:"] = "Nombre de destino:"; +$net2ftp_messages["Processing the entries:"] = "Procesando los elementos:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Tamao"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: haz clic derecho en el link y elige \"Agregar a Favoritos...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla y Firefox: haz clic derecho en el link y elige \"Agregar a Favoritos...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Error al abrir la plantilla"; +$net2ftp_messages["Unable to read the template file"] = "Error al leer la plantilla"; +$net2ftp_messages["Please specify a filename"] = "Por favor espicifique un nombre de archivo"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Estado: Este archivo no ha sido guardado"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Estado: Guardado %1\$s mediante modo %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Estado: Este archivo no pudo ser guardado"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directorio: "; +$net2ftp_messages["File: "] = "Archivo: "; +$net2ftp_messages["New file name: "] = "Nuevo nombre de archivo: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Nota: Al cambiar el tipo de texto se guardaran los cambios"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Buscar directorios y archivos"; +$net2ftp_messages["Search again"] = "Buscar de nuevo"; +$net2ftp_messages["Search results"] = "Resultados de la bsqueda"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Por favor escribe una palabra o frase valida de bsqueda."; +$net2ftp_messages["Please enter a valid filename."] = "Por favor escribe un nombre de archivo valido."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Por favor escribe un tamao de archivo valido en el cuadro de texto \"De\", por ejemplo: 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Por favor escribe un tamao de archivo valido en la caja de texto \"A\", por ejemplo: 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Por favor escribe un fecha valida en formato A-m-d en la caja de texto \"De\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Por favor escribe un fecha valida en formato A-m-d en la caja de texto \"A\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "La palabra %1\$s no fue encontrada en los archivos y directorios seleccionados."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "La palabra %1\$s fue encontrada en los siguientes archivos:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Buscar frase o palabra"; +$net2ftp_messages["Case sensitive search"] = "Buscar frase o palabra exacta incluyendo minsculas y maysculas"; +$net2ftp_messages["Restrict the search to:"] = "Restringir la busqueda a:"; +$net2ftp_messages["files with a filename like"] = "archivos con un nombre como"; +$net2ftp_messages["(wildcard character is *)"] = "(el caracter comodin es *)"; +$net2ftp_messages["files with a size"] = "archivos del tamao"; +$net2ftp_messages["files which were last modified"] = "archivos que fueron modificados por ultima vez"; +$net2ftp_messages["from"] = "De"; +$net2ftp_messages["to"] = "A"; + +$net2ftp_messages["Directory"] = "Directorio"; +$net2ftp_messages["File"] = "Archivo"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Ver"; +$net2ftp_messages["Edit"] = "Editar"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Ver el codigo seleccionado del archivo %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Editar el codigo del archivo %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Error al abrir la plantilla"; +$net2ftp_messages["Unable to read the template file"] = "Error al leer la plantilla"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Una vez iniciada la sesion, podras ..."; +$net2ftp_messages["Navigate the FTP server"] = "Navegar en el FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Si has iniciado una sesion podras ver tus directorios y archivos."; +$net2ftp_messages["Upload files"] = "Subir tus archivos"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Hay tres formas diferentes de subir archivos: la estandar, subir y compimir, and mediante un java applet."; +$net2ftp_messages["Download files"] = "Descargar archivos"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Hacer click en el nombre de archivo para su descarga instantanea.
Seleccionar varios archivos a la vez y pulsar en el boton de descarga; Los archivos seleccionados seran descargados en un archivo .zip."; +$net2ftp_messages["Zip files"] = "Archivos zip"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... y guardar el archivo zip en el servidor FTP, o mandarlo de la misma manera por correo."; +$net2ftp_messages["Unzip files"] = "Descomprimir archivos"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Diferentes formatos soportados: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = ""; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Elegir en una lista de aplicaciones (requerido PHP)."; +$net2ftp_messages["Copy, move and delete"] = "Copiar, mover y borrar"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "El contenido de los subdirectories y los archivos tambin ser copiado, movido o suprimido."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copiar o mover directorios a un segundo FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Puedes exportar tus archivos de un servidor FTP a otro."; +$net2ftp_messages["Rename and chmod"] = "renombrar y cambiar permisos"; +$net2ftp_messages["Chmod handles directories recursively."] = "Manejar permisos (chmod) en subdirectorios y archivos de carpetas las cuales manejas."; +$net2ftp_messages["View code with syntax highlighting"] = "Ver el codigo destacando las sintaxis."; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "las funciones PHP estan vincualadas a la documentacion en php.net."; +$net2ftp_messages["Plain text editor"] = "Editor de texto plano"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Editar el texto desde tu explorador; siempre que guardes los cambios se transferiran al servidor FTP."; +$net2ftp_messages["HTML editors"] = "Editores de HTML"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Puedes elegir entre dos editores de HTML."; +$net2ftp_messages["Code editor"] = "Editor de codigor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Editar HTML y PHP usando un editor editor destacando la sintaxis."; +$net2ftp_messages["Search for words or phrases"] = "Bsqueda para las palabras o las frases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtrar los listados archivos basandose en el nombre de fichero, la vez pasada de la modificacin y filesize."; +$net2ftp_messages["Calculate size"] = "Calcular tamao"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calcular el tamao de directorios y archivos."; + +$net2ftp_messages["FTP server"] = "Servidor FTP"; +$net2ftp_messages["Example"] = "Ejemplo"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Nombre de Usuario"; +$net2ftp_messages["Password"] = "Contrasea"; +$net2ftp_messages["Anonymous"] = "Anonimo"; +$net2ftp_messages["Passive mode"] = "Modo pasivo"; +$net2ftp_messages["Initial directory"] = "Directorio inicial"; +$net2ftp_messages["Language"] = "Idioma"; +$net2ftp_messages["Skin"] = "Plantilla"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Iniciar"; +$net2ftp_messages["Clear cookies"] = "Borrar cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Porfavor introduzca un servidor FTP."; +$net2ftp_messages["Please enter a username."] = "Porfavor, introduczca un nombre de usuario."; +$net2ftp_messages["Please enter a password."] = "Porfavor, introduczca una contrasea."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Porfavor introduzca su nombre de usuario y contrasea de administrador."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Porfqavor introduce tu usuario y contrasea para %1\$s."; +$net2ftp_messages["Username"] = "Nombre de Usuario"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Tu sesion a sido cancelada; porfavor introduce tu contrasea para el servidor FTP %1\$s y continua."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Tu direccion IP a cambiado; Porfavor introduzca su contrasea para el servidor FTP %1\$s para continuar."; +$net2ftp_messages["Password"] = "Contrasea"; +$net2ftp_messages["Login"] = "Iniciar"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Pagina de login"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "Has cerrado tu sesion en el servidor FTP. Para entrar de nuevo a la pagina de inicio de sesion, Click aqui."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = ""; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Para cerrar el explorador pulsa Cerrar."; +$net2ftp_messages["Close"] = "Cerrar"; +$net2ftp_messages["Click here to close this window"] = "Click aqui para cerrar la ventana"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Crear nuevo directorio"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "El nuevo directorio ser creado dentro de %1\$s."; +$net2ftp_messages["New directory name:"] = "Nombre del directorio nuevo:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "El directorio %1\$s fue creado."; +$net2ftp_messages["Directory %1\$s could not be created."] = "El directorio %1\$s no puedo ser creado."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Enviar los comandos arbitrarios del ftp"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Lista de comandos:"; +$net2ftp_messages["FTP server response:"] = "Respuesta del ftp server:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Renombrar directorios y archivos"; +$net2ftp_messages["Old name: "] = "Nombre antiguo: "; +$net2ftp_messages["New name: "] = "Nombre nuevo: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "El nombre nuevo no puede contener puntos. El elemento no fue renombrado a %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "El nuevo nombre no puede contener ninguna de las palabras clave prohibidas.%1\$s no fue renombrado"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s fue renombrado a %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s no pudo ser renombrado a %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Obteniendo archivos %1\$s de %2\$s desde sitio FTP"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Incapaz de conseguir el archivo %1\$s del servidor FTP"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Especificar el directorio destino"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Para especificar un directorio destino comn, escribe el nombre del directorio en el campo que esta arriba y haz clic en \"Especificar directorio destino comun\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: El directorio destino debe existir antes de poder copiar archivos dentro de el."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Descomprimiendo archivo %1\$s a:"; +$net2ftp_messages["Target directory:"] = "Directorio destino:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Conservar estructura del directorio (los subdirectorios sern creados automticamente)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Transferir al directorio:"; +$net2ftp_messages["Files"] = "Archivos"; +$net2ftp_messages["Archives"] = "Archivos"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Los archivos seleccionados seran transferidos al servidor FTP."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Los archivos seleccionados sern descomprimidos y transferidos al servidor FTP."; +$net2ftp_messages["Add another"] = "Agregar nuevo"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Conservar estructura del directorio (los subdirectorios sern creados automticamente)"; + +$net2ftp_messages["Choose a directory"] = "Selecciona un directorio"; +$net2ftp_messages["Please wait..."] = "Por favor espera..."; +$net2ftp_messages["Uploading... please wait..."] = "Subiendo al servidor... por favor espera..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Si la transferencia dura mas de %1\$s segundos<\/b>, tendrs que volver a intentarlo con menos archivos."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Esta ventana se cerrara automticamente en unos segundos."; +$net2ftp_messages["Close window now"] = "Cerrar ventana"; + +$net2ftp_messages["Upload files and archives"] = "Subir archivos"; +$net2ftp_messages["Upload results"] = "Subir resultados"; +$net2ftp_messages["Checking files:"] = "Revisando archivos:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transfiriendo archivos al servidor FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Descomprimiendo y transfiriendo los archivos al servidor FTP:"; +$net2ftp_messages["Upload more files and archives"] = "Subir mas archivos al servidor"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restricciones:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "El tamao maximo de un archivo esta restringido por net2ftp a %1\$s y por PHP a %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "El tiempo maximo de ejecucion es de %1\$s segundos"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "El modo de transferencia FTP (ASCII or BINARY) sera elegido automaticamente, basandose en la extencion del archivo"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Si el archivo ya existe, sera sobreescrito"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Ver archivo %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Ver imagen %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Ver pelicula flash de tipo Macromedia ShockWave %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Para guardar la imagen, click-derecho y escoge 'guardar como...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Archivos comprimidos"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Salvar el archivo comprimido en el servidor como:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Enviar el archivo comprimido por correo electronico a:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Enviar archivos de esta manera no es annimo: Tu direccin IP y la hora de envi sern visibles en el correo electrnico."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Comentarios adicionales:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "No especificaste un nombre para el archivo comprimido. Por favor vuelve y especifica un nombre."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "La direccion de correo electronico (%1\$s) no es valida.
Porfavor especifica una direccion con el formato usuario@dominio.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/fi.inc.php b/ehcp/net2ftp/languages/fi.inc.php new file mode 100644 index 0000000..416ab50 --- /dev/null +++ b/ehcp/net2ftp/languages/fi.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Hakemistoa %1\$s ei ole olemassa tai sit ei voida valita, joten hakemisto %2\$s nytetn sen sijaan."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Phakemistoa %1\$s ei ole olemassa tai sit ei voida valita."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Hakemistoa %1\$s ei voida valita - sinulla ei ole ehk tarpeeksi oikeuksia hakemiston nyttmiseen tai sit ei ehk ole olemassa."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Kohteita, jotka sisltvt kiellettyj sanoja, ei voida hallita net2ftp:t kyttmll. Tll pyritn vlttmn, ettei Paypalia tai Ebayta voitaisi huijata net2ftp:t kyttmll."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Tiedostoja, jotka ovat liian isoja, ei voida ladata, ladata palvelimelle, kopioida, siirt, hakea, pakata, purkaa, nytt tai muokata; niit voidaan vain uudelleennimet, asettaa oikeuksia tai poistaa."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Suorita %1\$s uudessa ikkunassa"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Valitse vhintn yksi kansio tai tiedosto!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP-palvelin %1\$s ei ole sallittujen FTP-palvelimien listalla."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP-palvelin %1\$s on estettyjen FTP-palvelimien listalla."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP-palvelinporttia %1\$s ei voi kytt."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "IP-osoitteesi (%1\$s) ei ole sallittujen IP-osoitteiden listalla."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "IP-osoitteesi (%1\$s) on estettyjen IP-osoitteiden listalla."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Taulu net2ftp_users sislt rivej, jotka ovat tysin samanlaisia."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Et syttnyt jrjestelmnvalvojan kyttjtunnusta tai salasanaa."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Vr kyttjtunnus tai salasana. Yrit uudelleen."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "IP-osoitettasi ei voida selvitt."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Taulu net2ftp_log_consumption_ipaddress sislt rivej, jotka ovat tysin samanlaisia."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Taulu net2ftp_log_consumption_ftpserver sislt rivej, jotka ovat tysin samanlaisia."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Muuttujan consumption_ipaddress_datatransfer arvo ei ole numero."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Taulua net2ftp_log_consumption_ipaddress ei voida pivitt."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Taulu net2ftp_log_consumption_ipaddress sislt rivej, jotka ovat tysin samanlaisia.."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Taulua net2ftp_log_consumption_ftpserver ei voida pivitt."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Taulu net2ftp_log_consumption_ftpserver sislt rivej, jotka ovat tysin samanlaisia.."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Taulua net2ftp_log_access ei voida pivitt."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Taulu net2ftp_log_access sislt rivej, jotka ovat tysin samanlaisia.."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "MySQL-tietokantaan ei voida yhdist. Tarkista MySQL-tietokanta-asetukset net2ftp:n asetustiedostossa settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "MYSQL-tietokantaa ei voida valita. Tarkista MySQL-tietokanta-asetukset net2ftp:n asetustiedostossa settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Virhe ilmaantui"; +$net2ftp_messages["Go back"] = "Palaa takaisin"; +$net2ftp_messages["Go to the login page"] = "Siirry kirjautumissivulle"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "FTP-palvelimelle %1\$s porttiin %2\$s ei voida yhdist.

Oletko varma, ett FTP-palvelimen osoite on oikein? Yleens se on eri osoite kuin palvelimen HTTP-osoite (verkko-osoite). Ota yhteytt Internet-yhteytesi palveluntarjoajaan tai jrjestelmn yllpitjn saadaksesi ohjeita.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Passiivitilaan ei voida vaihtaa FTP-palvelimella %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Ei voida yhdist toiseen (kohde-) FTP-palvelimeen %1\$s portissa %2\$s.

Oletko varma, ett tm on toisen (kohde-) FTP-palvelimen osoite? Yleens se on eri osoite kuin palvelimen HTTP-osoite (verkko-osoite). Ota yhteytt Internet-yhteytesi palveluntarjoajaan tai jrjestelmn yllpitjn saadaksesi ohjeita.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Ei voida kirjautua sisn toiselle (kohde-) FTP-palvelimelle %1\$s kyttjtunnuksella %2\$s.

Oletko varma, ett kyttjtunnus ja salasana ovat oikein? Ota yhteytt Internet-yhteytesi palveluntarjoajaan tai jrjestelmn yllpitjn saadaksesi ohjeita.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Unable to switch to the passive mode on the second (target) FTP server %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Hakemistoa tai tiedostoa %1\$s ei voida uudelleennimet nimell %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Sivustokomentoa %1\$s ei voida suorittaa. Huomaathan, ett CHMOD-komento on saatavilla vain Unix-FTP-palvelimilla, ei Windows FTP-palvelimilla."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Hakemiston %1\$s oikeudet on asetettu oikeuksiksi %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Hakemiston %1\$s kohteita ksitelln:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Tiedoston %1\$s oikeudet on asetettu oikeuksiksi %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Kaikki valitut kansiot ja tiedostot on ksitelty."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Hakemistoa %1\$s ei voida poistaa."; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Tiedostoa %1\$s ei voida poistaa."; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Hakemistoa %1\$s ei voida luoda."; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Vliaikaista tiedostoa ei voida luoda"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Tiedostoa %1\$s ei voida hakea FTP-palvelimelta ja tallentaa sit vliaikaiseen tiedostoon %2\$s.
Tarkista hakemiston %3\$s oikeudet.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Vliaikaista tiedostoa ei voida avata. Tarkista hakemiston %1\$s oikeudet."; +$net2ftp_messages["Unable to read the temporary file"] = "Vliaikaista tiedostoa ei voida lukea"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Vliaikaisen tiedoston ksittely ei voida lopettaa"; +$net2ftp_messages["Unable to delete the temporary file"] = "Vliaikaista tiedostoa ei voida poistaa"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Vliaikaista tiedostoa ei voida luoda. Tarkista hakemiston %1\$s oikeudet."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Vliaikaista tiedostoa ei voida avata. Tarkista hakemiston %1\$s oikeudet."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Merkkijonoa ei voida kirjoittaa vliaikaiseen tiedostoon %1\$s.
Tarkista hakemiston %2\$s oikeudet."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Vliaikaisen tiedoston ksittely ei voida lopettaa"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Tiedostoa %1\$s ei voida siirt FTP-palvelimelle.
Sinulla ei ehk ole kirjoitusoikeuksia hakemistoon."; +$net2ftp_messages["Unable to delete the temporary file"] = "Vliaikaista tiedostoa ei voida poistaa"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Ksitelln hakemistoa %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Kohdehakemisto %1\$s on sama tai lhdehakemiston alihakemisto %2\$s, joten tm hakemisto ohitetaan."; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "Hakemisto %1\$s sislt estetyn sanan, joten hakemisto ohitetaan"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "Hakemisto %1\$s sislt estetyn sanan, siirto hyltn"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Alihakemistoa %1\$s ei voida luoda. Se on ehk jo olemassa. Jatketaan kopiointi/siirto -prosessia..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Kohde-alihakemisto %1\$s luotu"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Hakemistoa %1\$s ei voida valita, joten tm hakemisto ohitetaan"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Alihakemistoa %1\$s ei voida poistaa - se ei ehk ole tyhj"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Alihakemisto %1\$s poistettu"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Alihakemisto %1\$s poistettu"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Hakemiston %1\$s ksittely valmis"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Kohde tiedostolle %1\$s on sama kuin lhde, tiedosto ohitetaan"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Tiedosto %1\$s sislt estetyn sanan, joten tiedosto ohitetaan"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Tiedosto %1\$s sislt estetyn sanan, siirto ohitetaan"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Tiedosto %1\$s on liian iso kopioitavaksi, joten tiedosto ohitetaan"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Tiedosto %1\$s on liian iso siirrettvksi, siirto ohitetaan"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Tiedostoa %1\$s ei voida kopioida"; +$net2ftp_messages["Copied file %1\$s"] = "Tiedosto %1\$s kopioitu"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Tiedostoa %1\$s ei voida siirt, siirto ohitetaan"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Tiedosto %1\$s siirretty"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Tiedostoa %1\$s ei voida poistaa."; +$net2ftp_messages["Deleted file %1\$s"] = "Tiedosto %1\$s poistettu"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Kaikki valitut kansiot ja tiedostot on ksitelty."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Ulkoista tiedostoa %1\$s ei voida kopioida paikalliseen tiedostoon kytten FTP-tilaa %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Tiedostoa %1\$s ei voida poistaa"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Tiedosto on liian iso siirrettvksi"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Pivittinen raja saavutettu: tiedostoa %1\$s ei voida siirt"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Paikallista tiedostoa ei voida kopioida ulkoiseen tiedostoon %1\$s kytten FTP-tilaa %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Paikallista tiedostoa ei voida poistaa"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Vliaikaista tiedostoa ei voida poistaa"; +$net2ftp_messages["Unable to send the file to the browser"] = "Tiedostoa ei voida lhett selaimelle"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Vliaikaista tiedostoa ei voida luoda"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "ZIP-tiedosto on tallennettu FTP-palvelimelle nimell %1\$s"; +$net2ftp_messages["Requested files"] = "Pyydetyt tiedostot"; + +$net2ftp_messages["Dear,"] = "Hyv"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Joku on pyytnyt, ett tiedostot liitteess lhetetn tlle shkpostitilille (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Jos et tied mitn tst tai jos et luota thn henkiln, poista tm shkpostiviesti ilman ZIP-tiedoston, joka on liitteess, avaamista."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Huomaathan, ett jos et avaa ZIP-tiedostoa, tiedostot sen sisll eivt voi vahingoittaa tietokonettasi."; +$net2ftp_messages["Information about the sender: "] = "Tietoja lhettjst: "; +$net2ftp_messages["IP address: "] = "IP-osoite: "; +$net2ftp_messages["Time of sending: "] = "Lhetysaika: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Lhetetty net2ftp -ohjelman kautta, joka on asennettu verkkosivustolle: "; +$net2ftp_messages["Webmaster's email: "] = "Yllpitjn (webmasterin) shkpostiosoite: "; +$net2ftp_messages["Message of the sender: "] = "Lhettjn viesti: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp on ilmainen ohjelmisto, julkaistu GNU/GPL -lisenssin alaisena. Saadaksesi listietoja, ky osoitteessa http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "ZIP-tiedosto on lhetetty osoitteeseen %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Tiedosto %1\$s on liian iso. Tiedostoa ei ladattu palvelimelle."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Tiedosto %1\$s sislt estetyn sanan. Tt tiedostoa ei ladattu palvelimelle."; +$net2ftp_messages["Could not generate a temporary file."] = "Vliaikaista tiedostoa ei voida luoda."; +$net2ftp_messages["File %1\$s could not be moved"] = "Tiedostoa %1\$s ei voida siirt"; +$net2ftp_messages["File %1\$s is OK"] = "Tiedosto %1\$s on kunnossa"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Ladattua tiedostoa ei voida siirt vliaikaishakemistoon.

Verkkosivuston yllpitjn pit asettaa oikeudet 777 hakemistolle /temp."; +$net2ftp_messages["You did not provide any file to upload."] = "Et antanut mitn tiedostoa, jonka voisi ladata palvelimelle."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Tiedostoa %1\$s ei voida siirt FTP-palvelimelle"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Tiedosto %1\$s on siirretty FTP-palvelimelle kytten FTP-tilaa %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Siirretn tiedostoja FTP-palvelimelle"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Ksitelln pakettia numero %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Pakettia %1\$s ei ksitelty koska sen tiedostotyyppi ei tunnistettu. Vain zip, tar, tgz ja gz -paketit ovat tuettuja tll hetkell."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Hakemistoja ja tiedostoja ei voida purkaa paketista"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Paketti sislt tiedostoja, joiden nimet sisltvt ../ tai ..\\ - purkaminen hyltn"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Hakemisto %1\$s luotu"; +$net2ftp_messages["Could not create directory %1\$s"] = "Hakemistoa %1\$s ei voida luoda"; +$net2ftp_messages["Copied file %1\$s"] = "Tiedosto %1\$s kopioitu"; +$net2ftp_messages["Could not copy file %1\$s"] = "Tiedostoa %1\$s ei voida kopioida"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Vliaikaista hakemistoa ei voida poistaa"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Vliaikaista tiedostoa %1\$s ei voida poistaa"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Sivustokomentoa %1\$s ei voida suorittaa"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Tehtvsi lopetettiin"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Tehtv, jonka halusit suorittaa net2ftp:ll, kytti enemmn aikaa kuin sallittu %1\$s sekuntia. Tmn takia tehtv lopetettiin."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Tm aikaraja takaa web-palvelimen reilun kytn kaikille."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Yrit pilkkoa tehtvsi pienempiin osiin: pienenn tiedostojen valintaasi, ja jt suurimmat tiedostot pois."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Jos todella tarvitset net2ftp:t isojen tehtvien ksittelyyn, jotka vaativat pitkn odotusajan, harkitse net2ftp:n asentamista omalle palvelimellesi."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Et antanut mitn teksti shkpostitse lhetettvksi!"; +$net2ftp_messages["You did not supply a From address."] = "Et antanut kenelt-osoitetta."; +$net2ftp_messages["You did not supply a To address."] = "Et antanut kenelle-osoitetta."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Teknisist ongelmista johtuen shkpostia osoitteeseen %1\$s ei voitu lhett."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "SQL-kysely ei voida suorittaa."; +$net2ftp_messages["Unable to open the system log."] = "Jrjestelmlokia ei voida avata."; +$net2ftp_messages["Unable to write a message to the system log."] = "Viesti ei voida kirjoittaa jrjestelmlokiin."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Syt kyttjtunnuksesi ja salasanasi FTP-palvelinta varten "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Et tyttnyt kirjautumistietojasi uudessa ikkunassa.
Klikkaa allaolevaa \"Siirry kirjautumissivulle\" -linkki."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "net2ftp:n hallintapaneeliin psy estettiin, koska tiedostossa settings.inc.php ei ole asetettu salasanaa. Syt salasana thn tiedostoon, ja pivit tm sivu."; +$net2ftp_messages["Please enter your Admin username and password"] = "Syt yllpitjn kyttjtunnus ja salasana"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Et tyttnyt kirjautumistietojasi uudessa ikkunassa.
Klikkaa allaolevaa \"Siirry kirjautumissivulle\" -linkki."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Vr kyttjtunnus tai salasana net2ftp:n hallintapaneeliin. Kyttjtunnus ja salasana voidaan asettaa tiedostossa settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Sininen"; +$net2ftp_messages["Grey"] = "Harmaa"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Keltainen"; +$net2ftp_messages["Pastel"] = "Pastelli"; + +// getMime() +$net2ftp_messages["Directory"] = "Hakemisto"; +$net2ftp_messages["Symlink"] = "Symbolinen linkki"; +$net2ftp_messages["ASP script"] = "ASP-komentosarja"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML-tiedosto"; +$net2ftp_messages["Java source file"] = "Java-lhdekooditiedosto"; +$net2ftp_messages["JavaScript file"] = "JavaScript-tiedosto"; +$net2ftp_messages["PHP Source"] = "PHP-lhdekoodi"; +$net2ftp_messages["PHP script"] = "PHP-komentosarja"; +$net2ftp_messages["Text file"] = "Tekstitiedosto"; +$net2ftp_messages["Bitmap file"] = "Bittikarttatiedosto"; +$net2ftp_messages["GIF file"] = "GIF-tiedosto"; +$net2ftp_messages["JPEG file"] = "JPEG-tiedosto"; +$net2ftp_messages["PNG file"] = "PNG-tiedosto"; +$net2ftp_messages["TIF file"] = "TIF-tiedosto"; +$net2ftp_messages["GIMP file"] = "GIMP-tiedosto"; +$net2ftp_messages["Executable"] = "Ohjelmatiedosto"; +$net2ftp_messages["Shell script"] = "Shell-komentosarja"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word-asiakirja"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel-taulukkolaskenta"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint-esitys"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access-tietokanta"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio-piirros"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Projektitiedosto"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0-asiakirja"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0-malli"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0-taulukkolaskenta"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0-malli"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0-asiakirja"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0-malli"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0-esitys"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0-malli"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0-globaali asiakirja"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0-asiakirja"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x-asiakirja"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x-globaali asiakirja"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x-taulukkolaskenta"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x-asiakirja"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x-esitys"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x-tiedosto"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x-asiakirja"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x-asiakirja"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x-shkpostitiedosto"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat-asiakirja"; +$net2ftp_messages["ARC archive"] = "ARC-paketti"; +$net2ftp_messages["ARJ archive"] = "ARJ-paketti"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ-paketti"; +$net2ftp_messages["TAR archive"] = "TAR-paketti"; +$net2ftp_messages["Zip archive"] = "ZIP-paketti"; +$net2ftp_messages["MOV movie file"] = "MOV-elokuvatiedosto"; +$net2ftp_messages["MPEG movie file"] = "MPEG-elokuvatiedosto"; +$net2ftp_messages["Real movie file"] = "Real-elokuvatiedosto"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime-elokuvatiedosto"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave Flash -tiedosto"; +$net2ftp_messages["Shockwave file"] = "Shockwave-tiedosto"; +$net2ftp_messages["WAV sound file"] = "WAV-nitiedosto"; +$net2ftp_messages["Font file"] = "Kirjasintiedosto"; +$net2ftp_messages["%1\$s File"] = "%1\$s -tiedosto"; +$net2ftp_messages["File"] = "Tiedosto"; + +// getAction() +$net2ftp_messages["Back"] = "Takaisin"; +$net2ftp_messages["Submit"] = "Lhet"; +$net2ftp_messages["Refresh"] = "Pivit"; +$net2ftp_messages["Details"] = "Tiedot"; +$net2ftp_messages["Icons"] = "Kuvakkeet"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Kirjaudu ulos"; +$net2ftp_messages["Help"] = "Ohje"; +$net2ftp_messages["Bookmark"] = "Kirjanmerkki"; +$net2ftp_messages["Save"] = "Tallenna"; +$net2ftp_messages["Default"] = "Oletus"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Ohje"; +$net2ftp_messages["Forums"] = "Keskustelualueet"; +$net2ftp_messages["License"] = "Lisenssi"; +$net2ftp_messages["Powered by"] = "Toteutettu ohjelmistolla"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Olet siirtymss net2ftp:n keskustelualueelle. Nit keskustelualueita saa kytt vain net2ftp-aiheisiin keskusteluihin - ei yleisiin sivutilakysymyksiin."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Yllpidon toiminnot"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Versiotiedot"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Tm net2ftp-versio on ajantasainen."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Versiotietoja ei voida hakea net2ftp.com:n palvelimelta. Tarkista selaimesi tietoturva-asetukset, jotka saattavat est pienen tiedoston lataamisen net2ftp.com -palvelimelta."; +$net2ftp_messages["Logging"] = "Kirjaus"; +$net2ftp_messages["Date from:"] = "Pivys mist:"; +$net2ftp_messages["to:"] = "mihin:"; +$net2ftp_messages["Empty logs"] = "Tyhjenn lokit"; +$net2ftp_messages["View logs"] = "Nyt lokit"; +$net2ftp_messages["Go"] = "Siirry"; +$net2ftp_messages["Setup MySQL tables"] = "Asenna MySQL-taulut"; +$net2ftp_messages["Create the MySQL database tables"] = "Luo MySQL-tietokantataulut"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Yllpidon toiminnot"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "Tiedostoa %1\$s ei voida avata ksiteltvksi."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Tiedostoa %1\$s ei voida avata."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "Tiedoston %1\$s ksittely ei voida lopettaa."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Yhteytt palvelimelle %1\$s ei voida asettaa. Tarkista syttmsi tietokanta-asetukset."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Tietokantaa %1\$s ei voida valita."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL-kysely numero %1\$s ei voida suorittaa."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL-kysely numero %1\$s suoritettiin onnistuneesti."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Syt MySQL-asetuksesi:"; +$net2ftp_messages["MySQL username"] = "MySQL-kyttjtunnus"; +$net2ftp_messages["MySQL password"] = "MySQL-salasana"; +$net2ftp_messages["MySQL database"] = "MySQL-tietokanta"; +$net2ftp_messages["MySQL server"] = "MySQL-palvelin"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Tm SQL-kysely suoritetaan:"; +$net2ftp_messages["Execute"] = "Suorita"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Kytetyt asetukset:"; +$net2ftp_messages["MySQL password length"] = "MySQL-salasanan pituus"; +$net2ftp_messages["Results:"] = "Tulokset:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Yllpidon toiminnot"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "SQL-kysely %1\$s ei voida suorittaa."; +$net2ftp_messages["No data"] = "Ei tietoja"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Yllpidon toiminnot"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Taulu %1\$s tyhjennettiin onnistuneesti."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Taulua %1\$s ei voitu tyhjent."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Taulu %1\$s optimoitiin onnistuneesti."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Taulua %1\$s ei voitu optimoida."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Kehittyneet toiminnot"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Siirry"; +$net2ftp_messages["Disabled"] = "Poistettu kytst"; +$net2ftp_messages["Advanced FTP functions"] = "Kehittyneet FTP-toiminnot"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Lhet omavalintaiset FTP-komennot FTP-komennot"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Tm toiminto on saatavilla vain PHP 5:ss"; +$net2ftp_messages["Troubleshooting functions"] = "Vianratkaisutoiminnot"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Etsi vikoja net2ftp:st tll verkkopalvelimella"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Etsi vikoja FTP-palvelimesta"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Testaa net2ftp:n listanjsennyssnnt"; +$net2ftp_messages["Translation functions"] = "Knnstoiminnot"; +$net2ftp_messages["Introduction to the translation functions"] = "Knnstoimintojen esittely"; +$net2ftp_messages["Extract messages to translate from code files"] = "Pura tekstit knnettvksi kooditiedostoista"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Tarkista, onko tiedostossa uusia tai vanhentuneita tekstej"; + +$net2ftp_messages["Beta functions"] = "Kokeelliset toiminnot"; +$net2ftp_messages["Send a site command to the FTP server"] = "Lhet sivustokomento FTP-palvelimelle"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: salasanasuojaa hakemisto, luo mukautettuja virhesivuja"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: suorita SQL-kysely"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Sivustokomentotoiminnot eivt ole saatavilla tll web-palvelimella."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Apache-toiminnot eivt ole saatavilla tll web-palvelimella."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "MySQL-toiminnot eivt ole saatavilla tll web-palvelimella."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Mrittmtn state2 -merkkijono. Poistutaan."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Etsi vikoja FTP-palvelimesta"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Yhteysasetukset:"; +$net2ftp_messages["FTP server"] = "FTP-palvelin"; +$net2ftp_messages["FTP server port"] = "FTP-palvelinportti"; +$net2ftp_messages["Username"] = "Kyttjtunnus"; +$net2ftp_messages["Password"] = "Salasana"; +$net2ftp_messages["Password length"] = "Salasanan pituus"; +$net2ftp_messages["Passive mode"] = "Passiivitila"; +$net2ftp_messages["Directory"] = "Hakemisto"; +$net2ftp_messages["Printing the result"] = "Tulostetaan tulos"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Yhdistetn FTP-palvelimelle: "; +$net2ftp_messages["Logging into the FTP server: "] = "Kirjaudutaan sisn FTP-palvelimelle: "; +$net2ftp_messages["Setting the passive mode: "] = "Asetetaan passiivitilaan: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Haetaan FTP-palvelimen jrjestelmtyyppi: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Vaihdetaan hakemistoksi %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Hakemisto FTP-palvelimelta on: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Haetaan tekstimuotoista listaa tiedostoista ja hakemistoista: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Yritetn uudelleen tekstimuotoisen listan hakua tiedostoista ja hakemistoista: "; +$net2ftp_messages["Closing the connection: "] = "Suljetaan yhteytt: "; +$net2ftp_messages["Raw list of directories and files:"] = "Tekstimuotoinen lista tiedostoista ja hakemistoista:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Jsennetty lista tiedostoista ja hakemistoista:"; + +$net2ftp_messages["OK"] = "kunnossa"; +$net2ftp_messages["not OK"] = "ei kunnossa"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Testaa net2ftp:n listanjsennyssnnt"; +$net2ftp_messages["Sample input"] = "Esimerkkisytt"; +$net2ftp_messages["Parsed output"] = "Jsennetty ulostulo"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Etsi vikoja net2ftp-ohjelmistostasi"; +$net2ftp_messages["Printing the result"] = "Tulostetaan tulos"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Tarkistetaan PHP:n FTP-moduulin asennusta: "; +$net2ftp_messages["yes"] = "Asennettu"; +$net2ftp_messages["no - please install it!"] = "Ei asennettu - asenna se!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Haetaan hakemiston oikeuksia: pieni tiedosto luodaan /temp -kansioon. Se poistetaan prosessin jlkeen."; +$net2ftp_messages["Creating filename: "] = "Luodaan tiedostoa: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "Kunnossa. Tiedostonimi: %1\$s"; +$net2ftp_messages["not OK"] = "ei kunnossa"; +$net2ftp_messages["OK"] = "kunnossa"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "Ei kunnossa. Tarkista hakemiston %1\$s oikeudet."; +$net2ftp_messages["Opening the file in write mode: "] = "Avataan tiedosto kirjoitustilassa: "; +$net2ftp_messages["Writing some text to the file: "] = "Kirjoitetaan teksti tiedostoon: "; +$net2ftp_messages["Closing the file: "] = "Suljetaan tiedosto: "; +$net2ftp_messages["Deleting the file: "] = "Poistetaan tiedosto: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testataan FTP-toimintoja"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Yhdistetn testi-FTP-palvelimelle: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Yhdistetn FTP-palvelimelle: "; +$net2ftp_messages["Logging into the FTP server: "] = "Kirjaudutaan sisn FTP-palvelimelle: "; +$net2ftp_messages["Setting the passive mode: "] = "Asetetaan passiivitilaan: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Haetaan FTP-palvelimen jrjestelmtyyppi: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Vaihdetaan hakemistoksi %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Hakemisto FTP-palvelimelta on: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Haetaan tekstimuotoista listaa tiedostoista ja hakemistoista: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Yritetn uudelleen tekstimuotoisen listan hakua tiedostoista ja hakemistoista: "; +$net2ftp_messages["Closing the connection: "] = "Suljetaan yhteytt: "; +$net2ftp_messages["Raw list of directories and files:"] = "Tekstimuotoinen lista tiedostoista ja hakemistoista:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Jsennetty lista tiedostoista ja hakemistoista:"; +$net2ftp_messages["OK"] = "kunnossa"; +$net2ftp_messages["not OK"] = "ei kunnossa"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Huomautus: kun kytt kirjanmerkki, uusi ikkuna kysyy kyttjtunnustasi ja salasanaasi."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Valitse hakemisto"; +$net2ftp_messages["Please wait..."] = "Odota..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Hakemistoja, joiden nimet sisltvt merkin \', ei voida nytt oikein. Ne voidaan vain poistaa. Palaa takaisin ja valitse toinen alihakemisto."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Pivittinen raja saavutettu: et voi siirt tietoja"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Jotta voisimme taata reilun web-palvelinkytn jokaiselle, tiedostonsiirto- ja skriptin suoritusaikamaksimi on rajoitettu jokaiselle kyttjlle per piv. Kun tm raja on saavutettu, voit edelleen selata FTP-palvelinta, mutta et voi siirt tietoja pois sielt/sinne."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Jos tarvitset rajoittamattoman kytn, asenna net2ftp omalle web-palvelimellesi."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Uusi hak."; +$net2ftp_messages["New file"] = "Uusi tied."; +$net2ftp_messages["HTML templates"] = "HTML-mallit"; +$net2ftp_messages["Upload"] = "Lataa palvelimelle"; +$net2ftp_messages["Java Upload"] = "Java-lataus"; +$net2ftp_messages["Flash Upload"] = "Flash-lataus"; +$net2ftp_messages["Install"] = "Asenna"; +$net2ftp_messages["Advanced"] = "Kehittynyt"; +$net2ftp_messages["Copy"] = "Kopioi"; +$net2ftp_messages["Move"] = "Siirr"; +$net2ftp_messages["Delete"] = "Poista"; +$net2ftp_messages["Rename"] = "Nime uud."; +$net2ftp_messages["Chmod"] = "Aseta oik."; +$net2ftp_messages["Download"] = "Lataa"; +$net2ftp_messages["Unzip"] = "Pura"; +$net2ftp_messages["Zip"] = "Pakkaa"; +$net2ftp_messages["Size"] = "Koko"; +$net2ftp_messages["Search"] = "Haku"; +$net2ftp_messages["Go to the parent directory"] = "Siirry ylempn hakemistoon"; +$net2ftp_messages["Go"] = "Siirry"; +$net2ftp_messages["Transform selected entries: "] = "Muuta valitut kohteet: "; +$net2ftp_messages["Transform selected entry: "] = "Muuta valittu kohde: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Luo uusi alihakemisto hakemistoon %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Tee uusi tiedosto hakemistoon %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Tee verkkosivusto helposti kytten valmiita malleja"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Lataa uudet tiedostot hakemistoon %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Lataa tiedostot ja hakemistot kytten Java-sovelmaa"; +$net2ftp_messages["Upload files using a Flash applet"] = "Lataa tiedostot kytten Flash-sovelmaa"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Asenna ohjelmistopaketteja (vaatii PHP:n web-palvelimelta)"; +$net2ftp_messages["Go to the advanced functions"] = "Siirry kehittyneisiin toimintoihin"; +$net2ftp_messages["Copy the selected entries"] = "Kopioi valitut kohteet"; +$net2ftp_messages["Move the selected entries"] = "Siirr valitut kohteet"; +$net2ftp_messages["Delete the selected entries"] = "Poista valitut kohteet"; +$net2ftp_messages["Rename the selected entries"] = "Nime valitut kohteet uudelleen"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Aseta oikeudet valituille kohteille (toimii vain Unix/Linux/BSD-palvelimilla)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Lataa ZIP, joka sislt kaikki valitut kohteet"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Pura valitut paketit FTP-palvelimelle"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Pakkaa valitut kohteet tallentaaksesi ne tai lhettksesi ne shkpostilla"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Laske valittujen kohteiden koko"; +$net2ftp_messages["Find files which contain a particular word"] = "Etsi tiedostot, jotka sisltvt tietyn sanan"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Klikkaa jrjestksesi kohteen %1\$s mukaan laskevassa jrjestyksess"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Klikkaa jrjestksesi kohteen %1\$s mukaan nousevassa jrjestyksess"; +$net2ftp_messages["Ascending order"] = "Nouseva jrjestys"; +$net2ftp_messages["Descending order"] = "Laskeva jrjestys"; +$net2ftp_messages["Upload files"] = "Lataa tiedostoja palvelimelle"; +$net2ftp_messages["Up"] = "Yls"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Klikkaa valitaksesi kaikki rivit tai poistaaksesi kaikkien rivien valinnat"; +$net2ftp_messages["All"] = "Kaikki"; +$net2ftp_messages["Name"] = "Nimi"; +$net2ftp_messages["Type"] = "Tyyppi"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Omistaja"; +$net2ftp_messages["Group"] = "Ryhm"; +$net2ftp_messages["Perms"] = "Oik."; +$net2ftp_messages["Mod Time"] = "Muut. aika"; +$net2ftp_messages["Actions"] = "Toiminnot"; +$net2ftp_messages["Select the directory %1\$s"] = "Valitse hakemisto %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Valitse tiedosto %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Valitse symbolinen linkki %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Siirry alihakemistoon %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Lataa tiedosto %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Seuraa symbolista linkki %1\$s"; +$net2ftp_messages["View"] = "Nyt"; +$net2ftp_messages["Edit"] = "Muokkaa"; +$net2ftp_messages["Update"] = "Pivit"; +$net2ftp_messages["Open"] = "Avaa"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Nyt tiedoston %1\$s vritetty lhdekoodi"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Muokkaa tiedoston %1\$s lhdekoodia"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Lataa uusi versio tiedostosta %1\$s ja yhdenn muutokset"; +$net2ftp_messages["View image %1\$s"] = "Nyt kuva %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Nyt tiedosto %1\$s HTTP-web-palvelimeltasi"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Huomautus: Tm linkki ei vlttmtt toimi jos sinulla ei ole omaa verkkotunnusta.)"; +$net2ftp_messages["This folder is empty"] = "Tm hakemisto on tyhj"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Hakemistot"; +$net2ftp_messages["Files"] = "Tiedostot"; +$net2ftp_messages["Symlinks"] = "Symboliset linkit"; +$net2ftp_messages["Unrecognized FTP output"] = "Tunnistamaton FTP-ulostulo"; +$net2ftp_messages["Number"] = "Numero"; +$net2ftp_messages["Size"] = "Koko"; +$net2ftp_messages["Skipped"] = "Ohitettu"; +$net2ftp_messages["Data transferred from this IP address today"] = "Tll IP-osoitteella on siirretty tietoja tnn"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Tlle FTP-palvelimelle on siirretty tietoja tnn"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Kieli:"; +$net2ftp_messages["Skin:"] = "Ulkoasu:"; +$net2ftp_messages["View mode:"] = "Nytttila:"; +$net2ftp_messages["Directory Tree"] = "Hakemistopuu"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Suorita %1\$s uudessa ikkunassa"; +$net2ftp_messages["This file is not accessible from the web"] = "Tt tiedostoa ei voi kytt verkosta"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Kaksoisklikkaa siirtyksesi alihakemistoon:"; +$net2ftp_messages["Choose"] = "Valitse"; +$net2ftp_messages["Up"] = "Yls"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Valittujen tiedostojen ja hakemistojen koko"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Valittujen tiedostojen ja hakemistojen yhteiskoko on:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Ohitettuja tiedostoja:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Anna oikeuksia tiedostoille ja hakemistoille"; +$net2ftp_messages["Set all permissions"] = "Aseta kaikki oikeudet"; +$net2ftp_messages["Read"] = "Luku"; +$net2ftp_messages["Write"] = "Kirjoitus"; +$net2ftp_messages["Execute"] = "Suorita"; +$net2ftp_messages["Owner"] = "Omistaja"; +$net2ftp_messages["Group"] = "Ryhm"; +$net2ftp_messages["Everyone"] = "Jokainen"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Aseta hakemiston %1\$s oikeudet: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Aseta tiedoston %1\$s oikeudet: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Aseta symbolisen linkin %1\$s oikeudet: "; +$net2ftp_messages["Chmod value"] = "Oikeusarvo"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Anna oikeudet mys hakemiston alihakemistoille"; +$net2ftp_messages["Chmod also the files within this directory"] = "Anna oikeudet mys hakemiston tiedoille"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Oikeusnumero %1\$s on arvojen 000-777 ulkopuolella. Yrit uudelleen."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Valitse hakemisto"; +$net2ftp_messages["Copy directories and files"] = "Kopioi tiedostoja ja hakemistoja"; +$net2ftp_messages["Move directories and files"] = "Siirr tiedostoja ja hakemistoja"; +$net2ftp_messages["Delete directories and files"] = "Poista tiedostoja ja hakemistoja"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Oletko varma, ett haluat poistaa nm tiedostot ja hakemistot?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Valittujen hakemistojen tiedostot ja alihakemistot poistetaan mys!"; +$net2ftp_messages["Set all targetdirectories"] = "Aseta kaikki kohdehakemistot"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Asettaaksesi yleisen kohdehakemiston, syt kohdehakemisto yllolevaan tekstikenttn ja klikkaa \"Aseta kaikki kohdehakemistot\" -painiketta."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Huomautus: kohdehakemisto pit olla olemassa ennen kuin mitn voidaan kopioida siihen."; +$net2ftp_messages["Different target FTP server:"] = "Toinen kohde-FTP-palvelin:"; +$net2ftp_messages["Username"] = "Kyttjtunnus"; +$net2ftp_messages["Password"] = "Salasana"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Jt tyhjksi, jos haluat kopioida tiedostot samalle FTP-palvelimelle."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Jos haluat kopioida tiedostot toiselle FTP-palvelimelle, syt kirjautumistietosi."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Jt tyhjksi, jos haluat siirt tiedostot samalle FTP-palvelimelle."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Jos haluat siirt tiedostot toiselle FTP-palvelimelle, syt kirjautumistietosi."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopioi hakemisto %1\$s kohteeseen:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Siirr hakemisto %1\$s kohteeseen:"; +$net2ftp_messages["Directory %1\$s"] = "Hakemisto %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopioi tiedosto %1\$s kohteeseen:"; +$net2ftp_messages["Move file %1\$s to:"] = "Siirr tiedosto %1\$s kohteeseen:"; +$net2ftp_messages["File %1\$s"] = "Tiedosto %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopioi symbolinen linkki %1\$s kohteeseen:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Siirr symbolinen linkki %1\$s kohteeseen:"; +$net2ftp_messages["Symlink %1\$s"] = "Symbolinen linkki %1\$s"; +$net2ftp_messages["Target directory:"] = "Kohdehakemisto:"; +$net2ftp_messages["Target name:"] = "Kohdenimi:"; +$net2ftp_messages["Processing the entries:"] = "Ksitelln kohteita:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Luo verkkosivusto neljn helpon vaiheen avulla"; +$net2ftp_messages["Template overview"] = "Ulkoasun yleiskatsaus"; +$net2ftp_messages["Template details"] = "Ulkoasun tiedot"; +$net2ftp_messages["Files are copied"] = "Tiedostot on kopioitu"; +$net2ftp_messages["Edit your pages"] = "Muokkaa sivustoasi"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Klikkaa kuvaa nhdksesi ulkoasun tiedot."; +$net2ftp_messages["Back to the Browse screen"] = "Palaa takaisin Selaa -ruutuun"; +$net2ftp_messages["Template"] = "Ulkoasu"; +$net2ftp_messages["Copyright"] = "Tekijnoikeudet"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Klikkaa kuvaa nhdksesi tmn ulkoasun tiedot"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Ulkoasutiedostot kopioidaan FTP-palvelimellesi. Jos FTP-palvelimellasi on samannimisi tiedostoja, mit ulkoasussa, FTP-palvelimellasi olevat tiedostot pllekirjoitetaan. Haluatko jatkaa?"; +$net2ftp_messages["Install template to directory: "] = "Asenna ulkoasu hakemistoon: "; +$net2ftp_messages["Install"] = "Asenna"; +$net2ftp_messages["Size"] = "Koko"; +$net2ftp_messages["Preview page"] = "Esikatselusivu"; +$net2ftp_messages["opens in a new window"] = "Aukeaa uuteen ikkunaan"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Odota. Ulkoasutiedostoja siirretn palvelimellesi: "; +$net2ftp_messages["Done."] = "Valmis."; +$net2ftp_messages["Continue"] = "Jatka"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Muokkaa sivustoa"; +$net2ftp_messages["Browse the FTP server"] = "Selaa FTP-palvelinta"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Lis tm linkki kirjanmerkkeihisi palataksesi myhemmin takaisin!"; +$net2ftp_messages["Edit website at %1\$s"] = "Muokkaa verkkosivustoa palvelimella %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: klikkaa linkki hiiren oikealla nppimell ja valitse \"Lis Suosikit-kansioon...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla ja Firefox: klikkaa linkki hiiren oikealla nppimell ja valitse \"Lis kohde kirjanmerkkeihin\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "VAROITUS: Alihakemistoa %1\$s ei voida luoda. Se on ehk jo olemassa. Jatketaan..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Kohde-alihakemisto %1\$s luotu"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "VAROITUS: Tiedostoa %1\$s ei voida kopioida. Jatketaan..."; +$net2ftp_messages["Copied file %1\$s"] = "Tiedosto %1\$s kopioitu"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Ulkoasutiedostoa ei voida avata"; +$net2ftp_messages["Unable to read the template file"] = "Ulkoasutiedostoa ei voida lukea"; +$net2ftp_messages["Please specify a filename"] = "Anna tiedostonimi"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Tila: Tt tiedostoa ei ole viel tallennettu"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Tila: Tallennettu %1\$s kytten tilaa %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Tila: Tt tiedostoa ei voitu tallentaa"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Hakemisto: "; +$net2ftp_messages["File: "] = "Tiedosto: "; +$net2ftp_messages["New file name: "] = "Tiedoston uusi nimi: "; +$net2ftp_messages["Character encoding: "] = "Merkist: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Huomautus: tekstialueen tyypin vaihtaminen tallentaa muutokset"; +$net2ftp_messages["Copy up"] = "Kopioi yls"; +$net2ftp_messages["Copy down"] = "Kopioi alas"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Etsi hakemistoja ja tiedostoja"; +$net2ftp_messages["Search again"] = "Etsi uudelleen"; +$net2ftp_messages["Search results"] = "Haun tulokset"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Anna kelvollinen hakusana tai -lause."; +$net2ftp_messages["Please enter a valid filename."] = "Anna kelvollinen tiedostonimi."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Syt kelvollinen tiedostokoko \"mist\" -tekstikenttn, esimerkiksi 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Syt kelvollinen tiedostokoko \"mihin\" -tekstikenttn, esimerkiksi 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Syt kelvollinen pivmr muodossa VVVV-KK-PP \"mist\" -tekstikenttn."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Syt kelvollinen pivmr muodossa VVVV-KK-PP \"mihin\" -tekstikenttn."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Sanaa %1\$s ei lytynyt valituista tiedostoista tai hakemistoista."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Sana %1\$s lytyi seuraavista tiedostoista:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Etsi sanaa tai lausetta"; +$net2ftp_messages["Case sensitive search"] = "Sama kirjainkoko"; +$net2ftp_messages["Restrict the search to:"] = "Rajoita haku:"; +$net2ftp_messages["files with a filename like"] = "tiedostoihin, joiden nimi on"; +$net2ftp_messages["(wildcard character is *)"] = "(jokerimerkki on *)"; +$net2ftp_messages["files with a size"] = "tiedostoihin, joiden koko on"; +$net2ftp_messages["files which were last modified"] = "tiedostoihin, joita on viimeksi muutettu"; +$net2ftp_messages["from"] = "mist"; +$net2ftp_messages["to"] = "mihin"; + +$net2ftp_messages["Directory"] = "Hakemisto"; +$net2ftp_messages["File"] = "Tiedosto"; +$net2ftp_messages["Line"] = "Rivi"; +$net2ftp_messages["Action"] = "Toiminnot"; +$net2ftp_messages["View"] = "Nyt"; +$net2ftp_messages["Edit"] = "Muokkaa"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Nyt tiedoston %1\$s vritetty lhdekoodi"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Muokkaa tiedoston %1\$s lhdekoodia"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Asenna ohjelmistopaketteja"; +$net2ftp_messages["Unable to open the template file"] = "Ulkoasutiedostoa ei voida avata"; +$net2ftp_messages["Unable to read the template file"] = "Ulkoasutiedostoa ei voida lukea"; +$net2ftp_messages["Unable to get the list of packages"] = "Pakettien listaa ei voida hakea"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "net2ftp -asennusskripti on kopioitu FTP-palvelimelle."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Tm skripti suoritetaan omalla web-palvelimellasi ja sen asentaminen vaatii PHP:n."; +$net2ftp_messages["In order to run it, click on the link below."] = "Jos haluat suorittaa sen, klikkaa allaolevaa linkki."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp yritti selvitt hakemistokartoitusta FTP-palvelimen ja web-palvelimen vlill."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Jos tm linkki ei ole oikein, syt URL-osoite manuaalisesti web-selaimeesi."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Lataa tiedostot ja hakemistot kytten Java-sovelmaa"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Kirjaudu sisn!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Kun olet kirjautunut sisn, voit:"; +$net2ftp_messages["Navigate the FTP server"] = "Liikkua FTP-palvelimella"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Kun olet kirjautunut sisn, voit siirty hakemistosta hakemistoon ja nhd kaikki tiedostot ja alihakemistot."; +$net2ftp_messages["Upload files"] = "Lataa tiedostoja palvelimelle"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Sinulla on kolme eri lataustapaa: tavallinen latauslomake, lataa-ja-pura -toiminto ja Java-sovelma."; +$net2ftp_messages["Download files"] = "Ladata tiedostoja"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Klikkaa tiedostonime ladataksesi yhden tiedoston nopeasti.
Valitse useita tiedostoja ja klikkaa Lataa; voit ladata valitsemasi tiedostot ZIP-paketissa."; +$net2ftp_messages["Zip files"] = "ZIP-tiedostot"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... ja sst ZIP-paketti FTP-palvelimella tai lhet se jollekulle."; +$net2ftp_messages["Unzip files"] = "Pura tiedostoja"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Useat muodot ovat tuettuja: .zip, .tar, .tgz ja .gz."; +$net2ftp_messages["Install software"] = "Asenna ohjelmistoja"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Valitse yleisten ohjelmistojen listalta (PHP vaaditaan)."; +$net2ftp_messages["Copy, move and delete"] = "Kopioi, siirr ja poista"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Hakemistot ksitelln rekursiivisesti, joka tarkoittaa, ett mys niiden sisllt (alihakemistot ja tiedostot) kopioidaan, siirretn ja poistetaan."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Kopioi tai siirr toiselle FTP-palvelimelle"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Tuo tiedostoja ktevsti FTP-palvelimellesi, tai vie tiedostoja FTP-palvelimeltasi toiselle FTP-palvelimelle."; +$net2ftp_messages["Rename and chmod"] = "Nime uudelleen ja aseta oikeuksia"; +$net2ftp_messages["Chmod handles directories recursively."] = "Oikeuksien asetus ksittelee hakemistot rekursiivisesti."; +$net2ftp_messages["View code with syntax highlighting"] = "Nyt koodia syntaksin vrityksell"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP-funktiot linkitetn php.netin dokumentaatioon."; +$net2ftp_messages["Plain text editor"] = "Pelkn tekstin muokkain"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Muokkaa teksti suoraan selaimestasi; joka kerta, kun tallennat muutokset, uusi tiedosto siirretn FTP-palvelimelle."; +$net2ftp_messages["HTML editors"] = "HTML-muokkaimet"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Muokkaa HTML: What-You-See-Is-What-You-Get (WYSIWYG) (mit net, sit saat) -lomakkeella; voit valita kahdesta eri muokkaimesta."; +$net2ftp_messages["Code editor"] = "Koodin muokkain"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Muokkaa HTML: ja PHP:t syntaksin vrikoodauksella varustetulla muokkaimella."; +$net2ftp_messages["Search for words or phrases"] = "Etsi sanoja tai lauseita"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Erottele tiedostoja tiedostonimeen, viimeisimpn muutosaikaan ja tiedostokokoon perustuen."; +$net2ftp_messages["Calculate size"] = "Laske koko"; +$net2ftp_messages["Calculate the size of directories and files."] = "Laske hakemistojen ja tiedostojen koko."; + +$net2ftp_messages["FTP server"] = "FTP-palvelin"; +$net2ftp_messages["Example"] = "Esimerkki"; +$net2ftp_messages["Port"] = "Portti"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Kyttjtunnus"; +$net2ftp_messages["Password"] = "Salasana"; +$net2ftp_messages["Anonymous"] = "Nimetn (anonyymi)"; +$net2ftp_messages["Passive mode"] = "Passiivitila"; +$net2ftp_messages["Initial directory"] = "Oletushakemisto"; +$net2ftp_messages["Language"] = "Kieli"; +$net2ftp_messages["Skin"] = "Ulkoasu"; +$net2ftp_messages["FTP mode"] = "FTP-tila"; +$net2ftp_messages["Automatic"] = "Automaattinen"; +$net2ftp_messages["Login"] = "Kirjaudu sisn"; +$net2ftp_messages["Clear cookies"] = "Tyhjenn evsteet"; +$net2ftp_messages["Admin"] = "Yllpito"; +$net2ftp_messages["Please enter an FTP server."] = "Syt FTP-palvelin."; +$net2ftp_messages["Please enter a username."] = "Syt kyttjtunnus."; +$net2ftp_messages["Please enter a password."] = "Syt salasana."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Syt yllpitjn kyttjtunnus ja salasana."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Syt kyttjtunnus ja salasana FTP-palvelinta %1\$s varten."; +$net2ftp_messages["Username"] = "Kyttjtunnus"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Istuntosi on vanhentunut; syt salasanasi FTP-palvelimelle %1\$s jatkaaksesi."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "IP-osoitteesi on muuttunut; syt salasanasi FTP-palvelimelle %1\$s jatkaaksesi."; +$net2ftp_messages["Password"] = "Salasana"; +$net2ftp_messages["Login"] = "Kirjaudu sisn"; +$net2ftp_messages["Continue"] = "Jatka"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Kirjautumissivu"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "Kirjauduit ulos FTP-palvelimelta. Kirjautuaksesi takaisin sisn, klikkaa tst."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Huomautus: tmn tietokoneen muut kyttjt voivat klikata selaimen Edellinen -painiketta ja kytt FTP-palvelinta."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Estksesi tmn, sinun tytyy sulkea kaikki selainikkunat."; +$net2ftp_messages["Close"] = "Sulje"; +$net2ftp_messages["Click here to close this window"] = "Klikkaa tst sulkeaksesi tmn ikkunan"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Luo uusia hakemistoja"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Uudet hakemistot luodaan kohteeseen %1\$s."; +$net2ftp_messages["New directory name:"] = "Uuden hakemiston nimi:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Hakemisto %1\$s luotiin onnistuneesti."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Hakemistoa %1\$s ei voitu luoda."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Lhet omavalintaisia FTP-komentoja"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Lista komennoista:"; +$net2ftp_messages["FTP server response:"] = "FTP-palvelimen vastaus:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Nime tiedostoja ja hakemistoja uudelleen"; +$net2ftp_messages["Old name: "] = "Vanha nimi: "; +$net2ftp_messages["New name: "] = "Uusi nimi: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Uusi nimi ei saa sislt pisteit. Tt kohdetta ei nimetty nimell %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "Uusi nimi ei saa sislt estettyj sanoja. Tt kohdetta ei nimetty nimell %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s nimettiin uudella nimell %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s ei voitu nimet uudella nimell %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Pura paketteja"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Haetaan pakettia %1\$s/%2\$s FTP-palvelimelta"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Pakettia %1\$s ei voitu hakea FTP-palvelimelta"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Aseta kaikki kohdehakemistot"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Asettaaksesi yleisen kohdehakemiston, syt kohdehakemisto yllolevaan tekstikenttn ja klikkaa \"Aseta kaikki kohdehakemistot\" -painiketta."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Huomautus: kohdehakemisto pit olla olemassa ennen kuin mitn voidaan kopioida siihen."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Pura paketti %1\$s kohteeseen:"; +$net2ftp_messages["Target directory:"] = "Kohdehakemisto:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Kyt hakemistojen nimi (luo alihakemistot automaattisesti)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Lataa palvelimelle hakemistoon:"; +$net2ftp_messages["Files"] = "Tiedostot"; +$net2ftp_messages["Archives"] = "Paketit"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Thn sytetyt tiedostot siirretn FTP-palvelimelle."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Thn sytetyt paketit puretaan ja sen sisll olevat tiedostot siirretn FTP-palvelimelle."; +$net2ftp_messages["Add another"] = "Lis toinen"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Kyt hakemistojen nimi (luo alihakemistot automaattisesti)"; + +$net2ftp_messages["Choose a directory"] = "Valitse hakemisto"; +$net2ftp_messages["Please wait..."] = "Odota..."; +$net2ftp_messages["Uploading... please wait..."] = "Ladataan palvelimelle... odota..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Jos palvelimelle lataaminen kest enemmn kuin sallittu %1\$s sekuntia<\/b>, sinun tytyy yritt uudelleen kytten vhemmn tiedostoja tai pienempi tiedostoja."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Tm ikkuna suljetaan automaattisesti muutaman sekunnin kuluttua."; +$net2ftp_messages["Close window now"] = "Sulje ikkuna nyt"; + +$net2ftp_messages["Upload files and archives"] = "Lataa tiedostoja ja paketteja palvelimelle"; +$net2ftp_messages["Upload results"] = "Latauksen tulokset"; +$net2ftp_messages["Checking files:"] = "Tarkistetaan tiedostoja:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Siirretn tiedostoja FTP-palvelimelle:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Puretaan paketteja ja siirretn tiedostoja FTP-palvelimelle:"; +$net2ftp_messages["Upload more files and archives"] = "Lataa lis tiedostoja tai paketteja palvelimelle"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Rajoitukset:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "net2ftp on asettanut yhden tiedoston maksimikoon %1\$s ja PHP:ll %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Maksimisuoritusaika on %1\$s sekuntia"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTP:n siirtotila (ASCII tai BINRI) tunnistetaan automaattisesti tiedostoptteest"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Jos kohdetiedosto on jo olemassa, se pllekirjoitetaan"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Nyt tiedosto %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Nyt kuva %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Katso Macromedia ShockWave Flash -elokuva %1\$s"; +$net2ftp_messages["Image"] = "Kuva"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntaksin vritys on toteutettu Luminous:ll"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Tallentaaksesi kuvan, klikkaa sit hiiren oikealla nppimell ja valitse 'Tallenna kuva nimell...'."; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "ZIP-kohteet"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Tallenna ZIP-tiedosto FTP-palvelimelle nimell:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Lhet ZIP-tiedosto shkpostin liitteen kohteelle:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Huomaathan, ett tiedostojen lhettminen ei ole nimetnt: IP-osoitteesi, kuten mys lhetysaika, listn shkpostiin."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Kirjoita kommentteja listtvksi shkpostiin:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Et antanut ZIP-tiedoston tiedostonime. Palaa takaisin ja syt tiedostonimi."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Syttmsi shkpostiosoite (%1\$s) ei ole kelvollinen.
Syt osoite muodossa kayttaja@osoite.fi"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/fr.inc.php b/ehcp/net2ftp/languages/fr.inc.php new file mode 100644 index 0000000..04b1259 --- /dev/null +++ b/ehcp/net2ftp/languages/fr.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Le rpertoire %1\$s n'existe pas ou ne peux pas tre affich. Le rpertoire %2\$s est donc affich la place."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Le rpertoire racine %1\$s n'existe pas, ou ne peux pas tre affich."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Le rpertoire %1\$s ne peux tre affich - Il est possible que vous n'ayez pas de droits d'accs ce rpertoire, ou bien de rpertoire n'existe pas."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Une entre contient des mots clef bannis, ceci pour eviter les risque phishing"; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Les fichiers trop gros ne pourrons tre tlchargs, uploads, copis, dplacs, vus ou dits; Ils ne pourrons qu'tre renomms ou effacs."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Excuter %1\$s dans une nouvelle fentre"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Veuillez slectioner au moins un rpertoire ou un fichier !"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Le serveur FTP %1\$s ne fait pas partie des serveur FTP autoriss."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Le serveur FTP %1\$s fait partie des serveurs FTP bannis."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Le port %1\$s du seveur FTP ne peut pas tre utilis."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Votre adresse IP (%1\$s) n'est pas dans la liste des IP autorises."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Votre adresse IP (%1\$s) a t bannie de ce serveur FTP."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "La table net2ftp_users contient des entres en double."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Vous devez saisir un identifiant et un mot de passe Administrateur."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Identifiant ou mot de passe invalide. Veuillez ressayer."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Impossible de dterminer votre adresse IP."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "La table net2ftp_log_consumption_ipaddress contient des doubles records."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "La table net2ftp_log_consumption_ftpserver contient des doubles records."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "La variable consumption_ipaddress_datatransfer n'est pas numrique."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "La table net2ftp_log_consumption_ipaddress n'a pas pu tre mise jour."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "La table net2ftp_log_consumption_ipaddress contient des lments en doubles."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "La table net2ftp_log_consumption_ftpserver n'a pas pu tre mise jour."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "La table net2ftp_log_consumption_ftpserver contient des lments en doubles."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "La table net2ftp_log_access ne peut pas tre mise jour."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "La table net2ftp_log_access contient des lments en doubles."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Impossible de se connecter a la base MySQL. Vrifiez vos prfrences de base MySQL dans le fichier de configuration de net2ftp settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Impossible de selectionner la base MySQL. Vrifiez vos prfrences de base MySQL dans le fichier de configuration de net2ftp settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Une erreur s'est produite"; +$net2ftp_messages["Go back"] = "Revenir en arrire"; +$net2ftp_messages["Go to the login page"] = "Aller la page de connexion"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Impossible de se connecter au serveur FTP %1\$s sur le port %2\$s.

tes-vous sr que c'est la bonne adresse du serveur FTP ? Cette adresse est souvent diffrente de celle du serveur HTTP (web). Veuillez contacter votre fournisseur internet ou l'administrateur du systme pour obtenir de l'aide.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Impossible de se connecter au serveur FTP %1\$s avec le nom d'utilisateur %2\$s.

tes-vous sr que votre nom d'utilisateur et mot de passe sont corrects? Veuillez contacter votre fournisseur internet ou l'administrateur du systme pour obtenir de l'aide.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Impossible de se mettre en mode passif sur le serveur FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Impossible de se connecter au deuxime serveur FTP %1\$s sur le port %2\$s.

tes-vous sr que c'est la bonne adresse du serveur FTP ? Cette adresse est souvent diffrente de celle du serveur HTTP (web). Veuillez contacter votre fournisseur internet ou l'administrateur du systme pour obtenir de l'aide.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Impossible de se connecter au deuxime serveur FTP %1\$s sur le port %2\$s.

tes-vous sr que c'est la bonne adresse du serveur FTP ? Cette adresse est souvent diffrente de celle du serveur HTTP (web). Veuillez contacter votre fournisseur internet ou l'administrateur du systme pour obtenir de l'aide.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Impossible de se mettre en mode passif sur le deuxime serveur FTP %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Impossible de renommer le rpertoire/fichier %1\$s en %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Impossible d'excuter la commande %1\$s. Remarque : les commandes CHMOD sont uniquement possibles sur les serveurs FTP Unix, non sur les serveurs FTP Windows."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Le CHMOD du rpertoire %1\$s a t chang avec succs pour %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Analyse des lments du rpertoire %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Le CHMOD du fichier %1\$s a t chang avec succs pour %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tous les rpertoires et fichiers slectionns ont t traits avec succs."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Impossible de supprimer le rpertoire %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Impossible de supprimer le fichier %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Impossible de crer le rpertoire %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Impossible de crer le fichier temporaire"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Impossible d'accder au fichier %1\$s sur le serveur FTP et de le sauvegarder comme le fichier temporaire %2\$s.
Vrifiez les permissions du rpertoire %3\$s .
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Impossible d'ouvrir le fichier temporaire. Verifiez les permissions du rpertoire %1\$s ."; +$net2ftp_messages["Unable to read the temporary file"] = "Impossible de lire le fichier temporaire"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Impossible de fermer le pointeur du fichier temporaire."; +$net2ftp_messages["Unable to delete the temporary file"] = "Impossible de supprimer le fichier temporaire"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Impossible de crer le fichier temporaire. Vrifiez les permissions du rpertoire %1\$s ."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Impossible d'ouvrir le fichier temporaire. Verifiez les permissions du rpertoire %1\$s ."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Impossible d'crire la chane de caractres dans le fichier temporaire %1\$s.
Vrifiez les permissions du rpertoire %2\$s ."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Impossible de fermer le pointeur du fichier temporaire."; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Impossible de mettre le fichier %1\$s sur le serveur FTP.
Il est possible que vous ne puissiez pas d'crire dans ce rpertoire."; +$net2ftp_messages["Unable to delete the temporary file"] = "Impossible de supprimer le fichier temporaire"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Traitement du rpetoire %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Le rpertoire de destination %1\$s est identique ou est un sous-rpertoire du rpertoire source %2\$s, et donc ce rpertoire va tre omis"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Impossible de crer le sous-rpertoire %1\$s. Il existe peut-tre dj. Le processus de copie/dplacement continue..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Sous-rpertoire cible cr %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Le rpertoire %1\$s ne peut pas tre lu, il sera donc omis"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Impossible de supprimer le sous-rpertoire %1\$s - il n'est peut-tre pas vide"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Sous-rpertoire %1\$s effac"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Sous-rpertoire %1\$s effac"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Traitement du rpertoire %1\$s achev"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "La destination du fichier %1\$s est la mme que la source, donc ce fichier sera omis"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Le fichier %1\$s contient un mot clef interdit, ce fichier sera omis"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Le fichier %1\$s contient un mot clef interdit, dplacement avort"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Le fichier %1\$s est trop gros pour tre copi, il sera omis"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Le fichier %1\$s est trop gros pour tre dplac, dplacement avort"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Impossible de copier le fichier %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Fichier %1\$s copi"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Impossible de dplacer le fichier %1\$s, dplacement avort"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Fichier %1\$s dplac"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Impossible de supprimer le fichier %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Fichier %1\$s supprim"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tous les rpertoires et fichiers slectionns ont t traits avec succs."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Impossible de copier le fichier distant %1\$s vers le fichier local en utilisant le mode FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Impossible de supprimer le fichier %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Le fichier est trop gros pour tre transfer"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Limite journalire atteinte: le fichier %1\$s ne sera pas transfr"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Impossible de copier le fichier local vers le fichier distant %1\$s en utilisant le mode FTP%2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Impossible de supprimer le fichier local"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Impossible de supprimer le fichier temporaire"; +$net2ftp_messages["Unable to send the file to the browser"] = "Impossible d'envoyer le fichier au navigateur"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Impossible de crer le fichier temporaire"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Le fichier zip a t sauvegard sur le serveur FTP en tant que %1\$s"; +$net2ftp_messages["Requested files"] = "Fichiers demands"; + +$net2ftp_messages["Dear,"] = "Cher,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Quelqu'un a demand que les fichiers joints soient envoys cette adresse lectronique (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Si vous n'avez aucune ide de ce que c'est ou vous ne faites pas confiance cette personne, veuillez supprimer ce courriel sans ouvrir le fichier zip attach."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Notez que si nous n'ouvrez pas le fichier zip, les fichiers l'intrieur de celui-ci ne peuvent pas endommager votre ordinateur."; +$net2ftp_messages["Information about the sender: "] = "Informations propos de l'expditeur: "; +$net2ftp_messages["IP address: "] = "Adresse IP: "; +$net2ftp_messages["Time of sending: "] = "Heure de l'envoi: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Envoy via le programme net2ftp install sur ce serveur: "; +$net2ftp_messages["Webmaster's email: "] = "Adresse email du Webmaster: "; +$net2ftp_messages["Message of the sender: "] = "Message de l'expditeur: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp est un logiciel libre, publi sous la licence GNU/GPL. Pour plus d'informations, veuillez visiter http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Le fichier zip a bien t envoy %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Le fichier %1\$s est trop gros : il n'a donc pas t upload"; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Le fichier %1\$s contient un mot clef interdit. Ce fichier ne sera pas upload."; +$net2ftp_messages["Could not generate a temporary file."] = "Impossible de gnrer le fichier temporaire."; +$net2ftp_messages["File %1\$s could not be moved"] = "Le fichier %1\$s ne peut tre dplac"; +$net2ftp_messages["File %1\$s is OK"] = "Le fichier %1\$s est correct"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Impossible de dplacer le fichier upload vers le rpertoire /temp.

L'administrateur de ce site doit mettre le chmod du rpertoire /temp de net2ftp 777."; +$net2ftp_messages["You did not provide any file to upload."] = "Vous n'avez fourni aucun fichier uploader."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Le fichier %1\$s n'a pu tre transfr vers le serveur FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Le fichier %1\$s a t transfr vers le serveur FTP en utilisant le mode FTP %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Transfert des fichiers sur le serveur FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Traitement de l'archive numro %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "L'archive %1\$s n'a pas t traite parce que son extension n'a pas t reconnue. Seulement les archives zip, tar, tgz et gz sont supportes pour le moment."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Impossible d'extraire les fichiers et rpertoire de cette archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "L'archive contient des noms de fichier avec ../ or ..\\ - extraction avort"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Rpertoire %1\$s cr"; +$net2ftp_messages["Could not create directory %1\$s"] = "Ne peut crer le rpertoire %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Fichier %1\$s copi"; +$net2ftp_messages["Could not copy file %1\$s"] = "Ne peut copier le fichier %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Impossible d'effacer le rpertoire temporaire"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Impossible d'effacer le fichier temporaire %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Impossible d'excuter la commande de site %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Votre tche a t interrompue"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "La tche que vous avez tent d'excuter avec net2ftp a pris plus de temps que les %1\$s secondes permises, ce pourquoi cette tche a t interrompue."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Cette limite de temps garantit un usage adquat du serveur pour tout le monde."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Essayez de sparer votre tche en tches plus petites: restreignez votre slection de fichiers et dslectionnez les plus gros."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Si vous avez vraiment besoin que netftp puisse grer des tches plus lourdes, veuillez considrez d'installer net2ftp sur votre propre serveur."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Vous n'avez spcifi aucun texte envoyer par courriel!"; +$net2ftp_messages["You did not supply a From address."] = "Vous n'avez pas spcifi une adresse d'expditeur."; +$net2ftp_messages["You did not supply a To address."] = "Vous n'avez pas spcifi une adresse de destinataire."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "D des problmes techniques, le courriel destin %1\$s n'a pu tre envoy."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Impossible d'excuter la requte SQL."; +$net2ftp_messages["Unable to open the system log."] = "Impossible d'ouvrir le journal systme."; +$net2ftp_messages["Unable to write a message to the system log."] = "Impossible d'crire dans le journal systme."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Veuillez saisir votre nom d'utilisateur et votre mot de passe du serveur FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Vous n'avez pas entr correctement vos information de connexion dans la fentre pop-up.
Cliquez sur \"Aller la page de connexion\" ci-dessous."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "L'accs au panneau d'administration a t dsactiv parce qu'aucun mot de passe n'a t prcis dans le fichier settings.inc.php. Prcisez un mot de passe dans ce fichier, et rechargez cette page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Veuillez saisir votre nom d'utilisateur et votre mot de passe administrateur"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Vous n'avez pas entr correctement vos information de connexion dans la fentre pop-up.
Cliquez sur \"Aller la page de connexion\" ci-dessous."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Mauvais nom d'utilisateur ou mot de passe pour le panneau d'administration de net2ftp. Le nom d'utilisateur et le mot de passe peuvent tre configurs dans le fichier settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Bleu"; +$net2ftp_messages["Grey"] = "Gris"; +$net2ftp_messages["Black"] = "Noir"; +$net2ftp_messages["Yellow"] = "Jaune"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Rpertoire"; +$net2ftp_messages["Symlink"] = "Lien symbolique"; +$net2ftp_messages["ASP script"] = "Script ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "Feuille de style CSS"; +$net2ftp_messages["HTML file"] = "Fichier HTML"; +$net2ftp_messages["Java source file"] = "Fichier source Java"; +$net2ftp_messages["JavaScript file"] = "Fichier JavaScript"; +$net2ftp_messages["PHP Source"] = "Source PHP"; +$net2ftp_messages["PHP script"] = "Script PHP"; +$net2ftp_messages["Text file"] = "Fichier Texte"; +$net2ftp_messages["Bitmap file"] = "Image bitmap"; +$net2ftp_messages["GIF file"] = "Image GIF"; +$net2ftp_messages["JPEG file"] = "Image JPEG"; +$net2ftp_messages["PNG file"] = "Image PNG"; +$net2ftp_messages["TIF file"] = "Image TIFF"; +$net2ftp_messages["GIMP file"] = "Fichier GIMP"; +$net2ftp_messages["Executable"] = "Excutable"; +$net2ftp_messages["Shell script"] = "Script shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Document Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Tableur Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - Prsentation PowerPoint "; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Base de donnes Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Document Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Fichier de projet"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Document Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Fichier de description Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Tableur Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Fichier de description Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Document Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Fichier de description Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Prsentation Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Fichier de description Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Document global Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Document Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - Document StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - Document global StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - Tableur StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - Document StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - Prsentation StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - Fichier StarImpress 5.x paquet"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - Document StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - Document StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - Fichier mail StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = "Document Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "Archive ARC"; +$net2ftp_messages["ARJ archive"] = "Archive ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "Archive GZ"; +$net2ftp_messages["TAR archive"] = "Archive TAR"; +$net2ftp_messages["Zip archive"] = "Archive ZIP"; +$net2ftp_messages["MOV movie file"] = "Fichier film MOV"; +$net2ftp_messages["MPEG movie file"] = "Fichier film MPEG"; +$net2ftp_messages["Real movie file"] = "Fichier film Real"; +$net2ftp_messages["Quicktime movie file"] = "Fichier film Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "Fichier shockwave flash"; +$net2ftp_messages["Shockwave file"] = "Fichier shockwave"; +$net2ftp_messages["WAV sound file"] = "Fichier son WAV"; +$net2ftp_messages["Font file"] = "Fichier de police"; +$net2ftp_messages["%1\$s File"] = "Fichier %1\$s"; +$net2ftp_messages["File"] = "Fichier"; + +// getAction() +$net2ftp_messages["Back"] = "Retour"; +$net2ftp_messages["Submit"] = "Soumettre"; +$net2ftp_messages["Refresh"] = "Actualiser"; +$net2ftp_messages["Details"] = "Dtails"; +$net2ftp_messages["Icons"] = "Icnes"; +$net2ftp_messages["List"] = "Liste"; +$net2ftp_messages["Logout"] = "Dconnexion"; +$net2ftp_messages["Help"] = "Aide"; +$net2ftp_messages["Bookmark"] = "Favoris"; +$net2ftp_messages["Save"] = "Sauvegarder"; +$net2ftp_messages["Default"] = "Dfaut"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Aide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licence"; +$net2ftp_messages["Powered by"] = "Soutenu par"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Vous allez tre redirig sur le forum de net2ftp. Ce forum est ddi aux sujets concernant net2ftp, et pas pour des problmes d\\'hbergement web."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Fonctions administratives"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Informations sur la version"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Cette version de net2ftp est jour."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Les informations de mise--jour n'ont pas pu tre rcupres. Veuillez vrifier les paramtres de scurit de votre navigateur, qui pourrait empcher le tlchargement d'un petit fichier depuis le serveur net2ftp.com."; +$net2ftp_messages["Logging"] = "Archivage"; +$net2ftp_messages["Date from:"] = "A partir de la date : "; +$net2ftp_messages["to:"] = "jusqu' : "; +$net2ftp_messages["Empty logs"] = "Archives vides"; +$net2ftp_messages["View logs"] = "Visualiser les archives"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Configurer les tables MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = "Crer les tables de la base de donnes MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Fonctions administratives"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "Le pointeur sur le fichier %1\$s n'a pas pu tre ouvert."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Le fichier %1\$s n'a pas pu tre ouvert."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "Le pointeur sur le fichier %1\$s n'a pas pu tre ferm."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "La connexion au serveur %1\$s a choue. Veuillez vrifier les paramtres d'accs la base de donnes."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Impossible de slectionner la base %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "La requte SQL n %1\$s n'a pas pu tre excute."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "La requte SQL n %1\$s a t excute avec succs."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Veuillez saisir vos paramtres MySQL : "; +$net2ftp_messages["MySQL username"] = "Utilisateur MySQL"; +$net2ftp_messages["MySQL password"] = "Mot de passe MySQL"; +$net2ftp_messages["MySQL database"] = "Nom de la base de donnes MySQL"; +$net2ftp_messages["MySQL server"] = "Serveur MySQL"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Cette requte SQL va tre excute : "; +$net2ftp_messages["Execute"] = "Excuter"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Paramtres utiliss : "; +$net2ftp_messages["MySQL password length"] = "Longueur du mot de passe MySQL"; +$net2ftp_messages["Results:"] = "Rsultats : "; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Fonctions administratives"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Impossible d'excuter la requte SQL %1\$s."; +$net2ftp_messages["No data"] = "Aucune donnes"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Fonctions administratives"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "La table %1\$s a t vide avec succs."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "La table %1\$s n'a pu tre vide."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "La table %1\$s a t optimise."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "La table %1\$s n'a pas pu tre optimise."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Options avances"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Dsactiv"; +$net2ftp_messages["Advanced FTP functions"] = "Fonctions FTP avances"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Envoyer des commandes FTP arbitraires au serveur FTP"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Cette fonctionnalit n'est disponible qu'avec PHP5"; +$net2ftp_messages["Troubleshooting functions"] = "Fonctions de dpannage"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Dpanner net2ftp sur ce serveur"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Dpanner un serveur FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Tester les rgles d'analyse de listes de net2ftp"; +$net2ftp_messages["Translation functions"] = "Fonctions de traduction"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction aux fonctions de traduction"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extraire les messages pour traduire partir des fichiers de code"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Vrifier s'il y a de nouveaux ou dsuets messages"; + +$net2ftp_messages["Beta functions"] = "Fonctions Beta"; +$net2ftp_messages["Send a site command to the FTP server"] = "Envoyer une commande site au serveur FTP"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache : protger un rpertoire par mot de passe, crer des pages d'erreur personnalises"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL : excuter une requte SQL"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Les fonctions de commande ne sont pas disponibles sur ce serveur."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Les fonctions d'Apache ne sont pas disponibles sur ce serveur."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Les fonctions de MySQL ne sont pas disponibles sur ce serveur."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Chaine de caracteres inattendue. Quitter."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Dpanner un serveur FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Paramtres de connexion :"; +$net2ftp_messages["FTP server"] = "Serveur FTP"; +$net2ftp_messages["FTP server port"] = "Port du serveur FTP"; +$net2ftp_messages["Username"] = "Nom d'utilisateur"; +$net2ftp_messages["Password"] = "Mot de passe"; +$net2ftp_messages["Password length"] = "Longueur du mot de passe"; +$net2ftp_messages["Passive mode"] = "Mode passif"; +$net2ftp_messages["Directory"] = "Rpertoire"; +$net2ftp_messages["Printing the result"] = "Impression du rsultat"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connexion au serveur FTP : "; +$net2ftp_messages["Logging into the FTP server: "] = "Identification sur le serveur FTP : "; +$net2ftp_messages["Setting the passive mode: "] = "Rglage du mode passif : "; +$net2ftp_messages["Getting the FTP server system type: "] = "Obtention du type de systme du serveur FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changement pour le rpertoire %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Le rpertoire du serveur FTP est: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Obtention de la liste des rpertoires et fichiers: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Seconde tentative d'obtention de la liste des rpertoires et fichiers: "; +$net2ftp_messages["Closing the connection: "] = "Fermeture de la connexion : "; +$net2ftp_messages["Raw list of directories and files:"] = "Liste des rpertoires et fichiers : "; +$net2ftp_messages["Parsed list of directories and files:"] = "Liste des rpertoires et fichiers analyss : "; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "pas OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Tester les rgles d'analyse de listes de net2ftp"; +$net2ftp_messages["Sample input"] = "Entre de test"; +$net2ftp_messages["Parsed output"] = "Sortie analyse"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Dpanner votre installation net2ftp"; +$net2ftp_messages["Printing the result"] = "Impression du rsultat"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Vrifier si le module PHP est prsent sur ce FTP: "; +$net2ftp_messages["yes"] = "oui"; +$net2ftp_messages["no - please install it!"] = "non - installez-le svp!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Contrle des permissions du rpertoire sur le serveur : un petit fichiers va tre cr dans le rpertoire /temp puis effac."; +$net2ftp_messages["Creating filename: "] = "Nom du fichier: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "Ok. Nom du fichier: %1\$s"; +$net2ftp_messages["not OK"] = "pas OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "Incorrect. Vrifiez les permissions du rpertoire %1\$s "; +$net2ftp_messages["Opening the file in write mode: "] = "Ouvrir le fichier en mode criture : "; +$net2ftp_messages["Writing some text to the file: "] = "crire du texte dans le fichier : "; +$net2ftp_messages["Closing the file: "] = "Fermeture du fichier : "; +$net2ftp_messages["Deleting the file: "] = "Suppression du fichier : "; + +$net2ftp_messages["Testing the FTP functions"] = "Test des fonctions FTP"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connexion un serveur FTP de test : "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connexion au serveur FTP : "; +$net2ftp_messages["Logging into the FTP server: "] = "Identification sur le serveur FTP : "; +$net2ftp_messages["Setting the passive mode: "] = "Rglage du mode passif : "; +$net2ftp_messages["Getting the FTP server system type: "] = "Obtention du type de systme du serveur FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changement pour le rpertoire %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Le rpertoire du serveur FTP est: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Obtention de la liste des rpertoires et fichiers: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Seconde tentative d'obtention de la liste des rpertoires et fichiers: "; +$net2ftp_messages["Closing the connection: "] = "Fermeture de la connexion : "; +$net2ftp_messages["Raw list of directories and files:"] = "Liste des rpertoires et fichiers : "; +$net2ftp_messages["Parsed list of directories and files:"] = "Liste des rpertoires et fichiers analyss : "; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "pas OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Remarque : quand vous cliquerez ce lien, une fentre pop-up vous demandera votre nom d'utilisateur et votre mot de passe."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Choisir un rpertoire"; +$net2ftp_messages["Please wait..."] = "Merci de patienter..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Les rpertoires dont le nom contient \' ne peuvent pas tre affichs correctement. Ils ne peuvent qu'tre effacs , revenez en arriere et choisissez un autre sous-rpertoire."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Limite journalire atteinte : vous ne pourrez plus transfrer des donnes"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Afin de garantir un usage quitable du serveur web pour tout le monde, le volume de transfert de donnes ainsi que le temps d'excution du script sont limits par utilisateur, et par jour. Une fois cette limite atteinte, vous pouvez toujours naviguer le serveur FTP mais plus transfrer de donnes."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Si vous avez besoin d'un accs illimit, veuillez installer net2ftp sur votre propre serveur web."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nouveau rpertoire"; +$net2ftp_messages["New file"] = "Nouveau fichier"; +$net2ftp_messages["HTML templates"] = "Modles HTML"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Upload Java"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Avanc"; +$net2ftp_messages["Copy"] = "Copier"; +$net2ftp_messages["Move"] = "Dplacer"; +$net2ftp_messages["Delete"] = "Effacer"; +$net2ftp_messages["Rename"] = "Renommer"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Tlcharger"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Taille"; +$net2ftp_messages["Search"] = "Rechercher"; +$net2ftp_messages["Go to the parent directory"] = "Aller dans le rpertoire superieur"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transformer les entres selectionnes: "; +$net2ftp_messages["Transform selected entry: "] = "Transformer l'entre selectionne: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Crer un nouveau sous-rpertoire dans le rpertoire %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Crer un nouveau fichier dans le rpertoire %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Crer facilement un site web en utilisant un modle prt--l'emploi"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload d'un nouveau fichier dans le rpertoire %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload de rpertoires et de fichiers travers une applet Java"; +$net2ftp_messages["Upload files using a Flash applet"] = "Uploader des fichiers avec une applet Flash"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Intalle des applications web (requiert PHP sur le serveur Web)"; +$net2ftp_messages["Go to the advanced functions"] = "Aller dans les fonctions avances"; +$net2ftp_messages["Copy the selected entries"] = "Copier les lments selectionns"; +$net2ftp_messages["Move the selected entries"] = "Dplacer les lments selectionns"; +$net2ftp_messages["Delete the selected entries"] = "Effacer les lments selectionns"; +$net2ftp_messages["Rename the selected entries"] = "Renommer les lments selectionns"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Rgler le CHMOD des lments selectionns (fonctionne uniquement sur les serveurs Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Tlcharger un fichier .ZIP contenant tous les lments slectionns"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Dzipper les archives slectionnes sur le serveur FTP"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Crer un fichier .ZIP pour sauvegarder les lments selectionns ou les envoyer par courriel"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calculer la taille des lments selectionns"; +$net2ftp_messages["Find files which contain a particular word"] = "Trouver les fichiers qui contiennent un mot en particulier"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Cliquer pour classer par %1\$s en ordre dcroissant"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Cliquer pour classer par %1\$s en ordre croissant"; +$net2ftp_messages["Ascending order"] = "Ordre croissant"; +$net2ftp_messages["Descending order"] = "Ordre dcroissant"; +$net2ftp_messages["Upload files"] = "Uploader des fichiers"; +$net2ftp_messages["Up"] = "Remonter"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Cliquer pour cocher ou decocher tous les lments"; +$net2ftp_messages["All"] = "Tous"; +$net2ftp_messages["Name"] = "Nom"; +$net2ftp_messages["Type"] = "Type"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Propritaire"; +$net2ftp_messages["Group"] = "Groupe"; +$net2ftp_messages["Perms"] = "Permissions"; +$net2ftp_messages["Mod Time"] = "Modifi le"; +$net2ftp_messages["Actions"] = "Actions"; +$net2ftp_messages["Select the directory %1\$s"] = "Slectionner le rpertoire %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Slectionner le fichier %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Aller dans le sous-rpertoire %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Tlcharger le fichier %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Voir"; +$net2ftp_messages["Edit"] = "diter"; +$net2ftp_messages["Update"] = "Mettre jour"; +$net2ftp_messages["Open"] = "Ouvrir"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Voir le code source surlign du fichier %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "diter le code source du fichier %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Uploader une nouvelle version du fichier %1\$s et fusionner les changements"; +$net2ftp_messages["View image %1\$s"] = "Voir l'image %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Voir le fichier %1\$s partir de votre serveur HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Note: Ce lien peut ne pas fonctionner si vous n'avez pas votre propre nom de domaine.)"; +$net2ftp_messages["This folder is empty"] = "Ce rpertoire est vide"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Rpertoires"; +$net2ftp_messages["Files"] = "Fichiers"; +$net2ftp_messages["Symlinks"] = "Liens symboliques"; +$net2ftp_messages["Unrecognized FTP output"] = "Sortie FTP non reconnue"; +$net2ftp_messages["Number"] = "Numro"; +$net2ftp_messages["Size"] = "Taille"; +$net2ftp_messages["Skipped"] = "Omis"; +$net2ftp_messages["Data transferred from this IP address today"] = "Donnes transferr depuis cette IP aujourd'hui"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Donnes transferr sur ce serveur FTP aujourd'hui"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Langue : "; +$net2ftp_messages["Skin:"] = "Habillement : "; +$net2ftp_messages["View mode:"] = "Mode d'affichage : "; +$net2ftp_messages["Directory Tree"] = "Chemin actuel"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Excuter %1\$s dans une nouvelle fentre"; +$net2ftp_messages["This file is not accessible from the web"] = "Ce fichier n'est pas accessible depuis le web."; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Double-cliquer pour accder un sous-rpertoire:"; +$net2ftp_messages["Choose"] = "Choisir"; +$net2ftp_messages["Up"] = "Remonter"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Taille des rpertoires et fichiers slectionns"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "La taille totale des rpertoires et fichiers slectionns est de : "; +$net2ftp_messages["The number of files which were skipped is:"] = "Le nombre de fichiers omis est de : "; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Changer le chmod des rpertoires et des fichiers"; +$net2ftp_messages["Set all permissions"] = "tablir toutes les permissions"; +$net2ftp_messages["Read"] = "Lire"; +$net2ftp_messages["Write"] = "crire"; +$net2ftp_messages["Execute"] = "Excuter"; +$net2ftp_messages["Owner"] = "Propritaire"; +$net2ftp_messages["Group"] = "Groupe"; +$net2ftp_messages["Everyone"] = "Tout le monde"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Pour rgler toutes les permissions aux mmes valeurs, entrez ces permissions et cliquez sur le bouton \"tablir toutes les permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "tablir les permissions du rpertoire %1\$s : "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "tablir les permissions du fichier %1\$s : "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "tablir les permissions du symlink %1\$s : "; +$net2ftp_messages["Chmod value"] = "Valeur chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "tablir le chmod sur les sous-rpertoires dans ce rpertoire galement"; +$net2ftp_messages["Chmod also the files within this directory"] = "tablir le chmod sur les fichiers dans ce rpertoire galement"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Le chmod %1\$s est l'extrieur de l'intervalle 000-777. Veuillez essayer nouveau."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Choisir un rpertoire"; +$net2ftp_messages["Copy directories and files"] = "Copier les rpertoires et les fichiers"; +$net2ftp_messages["Move directories and files"] = "Dplacer les rpertoires et les fichiers"; +$net2ftp_messages["Delete directories and files"] = "Supprimer les rpertoires et les fichiers"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "tes-vous sur de vouloir supprimer ces rpertoires et fichiers?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Tous les sous-rpertoires et fichiers des rpertoires slectionns vont aussi tre supprims"; +$net2ftp_messages["Set all targetdirectories"] = "tablir tous les rpertoires cible"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Pour tablir un rpertoire cible commun, saisissez le rpertoire cible dans la bote de texte ci-dessus et cliquez sur \"tablir tous les rpertoires cible\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Remarque : le rpertoire cible doit dja exister avant que quelque chose y soit copi."; +$net2ftp_messages["Different target FTP server:"] = "Diffrent serveur FTP comme cible:"; +$net2ftp_messages["Username"] = "Nom d'utilisateur"; +$net2ftp_messages["Password"] = "Mot de passe"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Laisser vide si vous copiez les fichiers vers le mme serveur FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Si vous voulez copier les fichiers vers un autre serveur FTP, veuillez saisir vos informations de connexion."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Laissez ce champ vide si vous voulez dplacer des fichiers sur le mme serveur FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Si vous voulez dplacer ces ficheirs sur un autre serveur FTP, veuillez saisir vos identifiants."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copier le rpertoire %1\$s vers : "; +$net2ftp_messages["Move directory %1\$s to:"] = "Dplacer le rpertoire %1\$s vers : "; +$net2ftp_messages["Directory %1\$s"] = "Rpertoire %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copier le fichier %1\$s vers : "; +$net2ftp_messages["Move file %1\$s to:"] = "Dplacer le fichier %1\$s vers : "; +$net2ftp_messages["File %1\$s"] = "Fichier %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copier le lien symbolique %1\$s vers : "; +$net2ftp_messages["Move symlink %1\$s to:"] = "Dplacer le lien symbolique %1\$s vers : "; +$net2ftp_messages["Symlink %1\$s"] = "Lien symbolique %1\$s"; +$net2ftp_messages["Target directory:"] = "Rpertoire cible : "; +$net2ftp_messages["Target name:"] = "Nom de la cible : "; +$net2ftp_messages["Processing the entries:"] = "Traitement des lments : "; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Crez un site web en 4 pas"; +$net2ftp_messages["Template overview"] = "Aperu"; +$net2ftp_messages["Template details"] = "Dtails"; +$net2ftp_messages["Files are copied"] = "Fichiers sont copis"; +$net2ftp_messages["Edit your pages"] = "Editez vos pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Cliquer sur l'image pour voir les dtails d'un modle."; +$net2ftp_messages["Back to the Browse screen"] = "Revenir la page de navigation"; +$net2ftp_messages["Template"] = "Modle"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Cliquer sur l'image pour voir les dtails de ce modle."; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Les fichiers du modle vont tre copis sur votre serveur FTP. Les fichiers existants ayant le mme nom seront dtruits. Voulez-vous continuer ?"; +$net2ftp_messages["Install template to directory: "] = "Installer le modle dans le rpertoire : "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Taille"; +$net2ftp_messages["Preview page"] = "Afficher l'aperu de la page"; +$net2ftp_messages["opens in a new window"] = "ouvre dans une nouvelle fentre"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Veuillez patienter pendant que les fichiers du modle sont transfrs sur le serveur: "; +$net2ftp_messages["Done."] = "Fini."; +$net2ftp_messages["Continue"] = "Continuer"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "diter la page"; +$net2ftp_messages["Browse the FTP server"] = "Naviguer sur le serveur FTP"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Ajouter ce lien vos favoris pour revenir plus tard sur cette page ! "; +$net2ftp_messages["Edit website at %1\$s"] = "diter le site Web %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer : clic droit sur le lien et choisir \"Ajouter aux favoris...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox : clic droit sur le lien et choisir \"Marque-page sur ce lien\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "ATTENTION : Impossible de crer le sous-rpertoire %1\$s. Il est possible qu'il existe dj. On continue..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Sous-rpertoire cible cr %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "ATTENTION : impossible de copier le fichier %1\$s. On continue..."; +$net2ftp_messages["Copied file %1\$s"] = "Fichier %1\$s copi"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Impossible d'ouvrir le fichier de description"; +$net2ftp_messages["Unable to read the template file"] = "Impossible de lire le fichier de description"; +$net2ftp_messages["Please specify a filename"] = "Veuillez spcifier un nom de fichier"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Statut : Ce fichier n'a pas encore t sauvegard"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Statut : Sauvegard dans %1\$s en utilisant le mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Statut : Ce fichier n'a pas pu tre sauvegard"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Rpertoire : "; +$net2ftp_messages["File: "] = "Fichier : "; +$net2ftp_messages["New file name: "] = "Nom du nouveau fichier : "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Remarque : changer le type de la zone de texte sauvegardera les changements"; +$net2ftp_messages["Copy up"] = "Copier vers le haut"; +$net2ftp_messages["Copy down"] = "Copier vers le bas"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Rechercher dans des rpertoires et fichiers"; +$net2ftp_messages["Search again"] = "Rpter la recherche"; +$net2ftp_messages["Search results"] = "Rsultats de la recherche"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Veuillez saisir un mot ou une phrase de recherche valide."; +$net2ftp_messages["Please enter a valid filename."] = "Veuillez saisir un nom de fichier valide."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Veuillez saisir une taille de fichier valide dans le champ de saisie \"de\", comme par exemple 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Veuillez saisir une taille de fichier valide dans le champ de saisie \"\", comme par exemple 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Veuillez saisir la date en utilisant le format A-m-j dans le champ de saisie \"de\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Veuillez saisir la date en utilisant le format A-m-j dans le champ de saisie \"\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Le mot %1\$s n'a pas t trouv dans les rpertoires et fichiers slectionns."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Le mot %1\$s a t trouv dans les fichiers suivants:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Rechercher un mot ou une phrase"; +$net2ftp_messages["Case sensitive search"] = "Recherche sensible la casse"; +$net2ftp_messages["Restrict the search to:"] = "Restreindre la recherche :"; +$net2ftp_messages["files with a filename like"] = "fichiers avec un nom de fichier comme"; +$net2ftp_messages["(wildcard character is *)"] = "(caractre joker est *)"; +$net2ftp_messages["files with a size"] = "fichiers avec une taille"; +$net2ftp_messages["files which were last modified"] = "fichiers rcemments modifis"; +$net2ftp_messages["from"] = "de"; +$net2ftp_messages["to"] = ""; + +$net2ftp_messages["Directory"] = "Rpertoire"; +$net2ftp_messages["File"] = "Fichier"; +$net2ftp_messages["Line"] = "Ligne"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Voir"; +$net2ftp_messages["Edit"] = "diter"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Voir le code source surlign du fichier %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "diter le code source du fichier %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Impossible d'ouvrir le fichier de description"; +$net2ftp_messages["Unable to read the template file"] = "Impossible de lire le fichier de description"; +$net2ftp_messages["Unable to get the list of packages"] = "Impossible de rcuprer la liste des paquets"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "Le script d'installation net2ftp a t copi sur le serveur FTP."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Ce script est lanc sur votre serveur web et requiert que PHP soit install."; +$net2ftp_messages["In order to run it, click on the link below."] = "Pour le lancer, cliquer sur le lien ci-dessous."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp a essay de determiner la correspondance entre le serveur FTP et votre serveur web."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Si ce lien n'est pas correct, entrer l'URL manuellement dans votre navigateur web."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload de rpertoires et de fichiers travers une applet Java"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Une fois que vous vous serez identifi, vous pourrez:"; +$net2ftp_messages["Navigate the FTP server"] = "Naviguer sur le serveur FTP"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Une fois identifi, vous pourrez naviguer de rpertoire en rpertoire, voir tous les sous-rpertoires ainsi que les fichiers."; +$net2ftp_messages["Upload files"] = "Uploader des fichiers"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Il existe 3 manires diffrentes d'uploader des fichiers. Le formulaire standard, le mode upload & unzip et l'applet Java"; +$net2ftp_messages["Download files"] = "Tlcharger des fichiers"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Cliquer sur un fichier pour le tlcharger directement.
En slectionnant plusieurs fichiers, cliquer sur \"Tlcharger\" vous permettra de tlcharger tous les fichiers dans une seule archive Zip"; +$net2ftp_messages["Zip files"] = "Compresser des fichiers au format Zip"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... et sauvegarder cette archive zip sur le serveur FTP, ou bien l'envoyer par courriel"; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Differents formats sont supports: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choisissez parmi une liste d'applications (PHP requit)."; +$net2ftp_messages["Copy, move and delete"] = "Copier, dplacer ou supprimer"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Les rpertoires sont traits rcursivement. Tout leur contenu (sous-rpertoires et fichiers) sera galement copi, dplac ou supprim."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copier ou dplacer sur un deuxime serveur FTP"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Il est facile d'importer des fichiers sur votre serveur FTP, ou bien d'exporter des fichiers depuis votre serveur FTP sur un autre serveur FTP"; +$net2ftp_messages["Rename and chmod"] = "Renommer et modifier les permissions (chmod)"; +$net2ftp_messages["Chmod handles directories recursively."] = "Modifier les permissions se fait de manire rcursive sur les rpertoires."; +$net2ftp_messages["View code with syntax highlighting"] = "Afficher du code avec de la coloration syntaxique"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "Les fonctions PHP pointent sur la documentation disponible sur php.net."; +$net2ftp_messages["Plain text editor"] = "diteur de texte brut"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "diter du texte depuis votre navigateur. Chaque fois que vous sauvegardez les changements, le fichier est automatiquement transfr sur le serveur FTP."; +$net2ftp_messages["HTML editors"] = "diteurs HTML"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Editer le HTML avec un formulaire WYSIWYG; vous avez le choix entre deux diteurs"; +$net2ftp_messages["Code editor"] = "diteur de code"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "diter du code HTML et PHP avec de la coloration syntaxique."; +$net2ftp_messages["Search for words or phrases"] = "Rechercher des mots ou des expressions"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtrer les fichiers par leur nom, leur date de dernire modification ou leur taille."; +$net2ftp_messages["Calculate size"] = "Calculer la taille"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculer la taille des rpertoire et des fichiers."; + +$net2ftp_messages["FTP server"] = "Serveur FTP"; +$net2ftp_messages["Example"] = "Exemple"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Nom d'utilisateur"; +$net2ftp_messages["Password"] = "Mot de passe"; +$net2ftp_messages["Anonymous"] = "Anonyme"; +$net2ftp_messages["Passive mode"] = "Mode passif"; +$net2ftp_messages["Initial directory"] = "Rpertoire de dpart"; +$net2ftp_messages["Language"] = "Langue"; +$net2ftp_messages["Skin"] = "Habillement"; +$net2ftp_messages["FTP mode"] = "Mode FTP"; +$net2ftp_messages["Automatic"] = "Automatique"; +$net2ftp_messages["Login"] = "Soumettre"; +$net2ftp_messages["Clear cookies"] = "Effacer les cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Veuillez saisir un serveur FTP."; +$net2ftp_messages["Please enter a username."] = "Veuillez saisir un nom d'utilisateur."; +$net2ftp_messages["Please enter a password."] = "Veuillez saisir un mot de passe."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Veuillez saisir votre identifiant et votre mot de passe Administrateur."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Veuillez entrer votre identifiant et mot de passe pour le serveur FTP %1\$s."; +$net2ftp_messages["Username"] = "Nom d'utilisateur"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Votre session a expire, veuillez entrer votre mot de passe pour le serveur FTP %1\$s pour continuer."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Votre IP a chang, veuillez entrer votre mot de passe pour le serveur FTP %1\$s pour continuer."; +$net2ftp_messages["Password"] = "Mot de passe"; +$net2ftp_messages["Login"] = "Soumettre"; +$net2ftp_messages["Continue"] = "Continuer"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Page de connexion"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "Vous vous tes dconnect du serveur FTP. Pour vous reconnecter, suivez ce lien."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Remarque : les autres utilisateurs de cet ordinateur peuvent encore cliquez sur le bouton \"Prcdent\" du navigateur et accder au serveur FTP."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Pour viter ceci, il faut fermer toutes les fentres du navigateur."; +$net2ftp_messages["Close"] = "Fermer"; +$net2ftp_messages["Click here to close this window"] = "Cliquer ici pour fermer cette fentre"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Crer des nouveaux rpertoires"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Les nouveaux rpertoires seront crs dans %1\$s."; +$net2ftp_messages["New directory name:"] = "Nom du nouveau rpertoire:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Le rpertoire %1\$s a t cr avec succs."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Le rpertoire %1\$s n'a pas pu tre cr."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Envoyer des commandes FTP arbitraires"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Liste des commandes : "; +$net2ftp_messages["FTP server response:"] = "Rponse du serveur FTP : "; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Renommer des rpertoires et des fichiers"; +$net2ftp_messages["Old name: "] = "Ancien nom : "; +$net2ftp_messages["New name: "] = "Nouveau nom : "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Le nouveau nom ne doit contenir aucun point. Cette entre n'a pas t renomme en %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "Le nouveau nom ne peut pas contenir de mot clef interdis. cette entre n'a pas t renomme %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s a t renomm avec succs en %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s n'a pu tre renomm en %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Dzipper les archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Rcupration de l'archive %1\$s sur %2\$s depuis le serveur FTP"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Impossible de rcuprer l'archive %1\$s depuis le serveur FTP"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "tablir tous les rpertoires cible"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Pour tablir un rpertoire cible commun, saisissez le rpertoire cible dans la bote de texte ci-dessus et cliquez sur \"tablir tous les rpertoires cible\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Remarque : le rpertoire cible doit dja exister avant que quelque chose y soit copi."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Rpertoire cible : "; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Utiliser les noms des rpertoires (crer les sous-rpertoires automatiquement)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Uploader vers le rpertoire:"; +$net2ftp_messages["Files"] = "Fichiers"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Les fichiers entrs ici seront transfrs vers le serveur FTP."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Les archives entres ici vont tre dcompresses et les fichiers l'intrieur de celles-ci vont tre transfrs vers le serveur FTP."; +$net2ftp_messages["Add another"] = "Ajouter un autre"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Utiliser les noms des rpertoires (crer les sous-rpertoires automatiquement)"; + +$net2ftp_messages["Choose a directory"] = "Choisir un rpertoire"; +$net2ftp_messages["Please wait..."] = "Merci de patienter..."; +$net2ftp_messages["Uploading... please wait..."] = "Upload en cours... Merci de patienter..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Si l\'upload prend plus que les %1\$s secondes<\/b> permises, vous devrez reessayer avec moins de fichiers ou avec des fichiers plus petits."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Cette fentre se fermera automatiquement dans quelques secondes."; +$net2ftp_messages["Close window now"] = "Fermer la fentre maintenant"; + +$net2ftp_messages["Upload files and archives"] = "Uploader des fichiers et des archives"; +$net2ftp_messages["Upload results"] = "Rsultats de l'upload"; +$net2ftp_messages["Checking files:"] = "Vrification des fichiers:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transfer des fichiers vers le serveur FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decompression des archives et transfer des fichiers vers le serveur FTP:"; +$net2ftp_messages["Upload more files and archives"] = "Uploader plus de fichiers et d'archives"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions : "; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "La taille maximale d'un fichier est restreinte %1\$s par net2ftp et %2\$s par PHP"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Le temps d'excution maximum est de %1\$s secondes"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "Le mode de transfert FTP (ASCII ou BINARY) sera automatiquement dtermin selon l'extension du fichier"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Si le fichier de destination existe dja il sera remplac par celui-ci"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Visualiser le fichier %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Voir l'image %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Visualiser le film Macromedia ShockWave Flash %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "La coloration syntaxique est ralis par Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Pour sauvegarder l'image, faites un click droit sur l'image et choisissez 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Entres zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Sauvegarder le fichier zip sur le serveur comme : "; +$net2ftp_messages["Email the zip file in attachment to:"] = "Envoyer le fichier zip comme attachement par courriel :"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Remarquez qu'envoyer des fichiers n'est pas anonyme : votre adresse IP ainsi que le temps et la date d'envoie seront ajouts au courriel."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Quelques commentaires additionnels ajouter au courriel : "; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Vous n'avez pas entr un nom de fichier pour le fichier zip. Retournez en arrire et entrez un nom de fichier."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "L'adresse de courriel que vous avez saisie (%1\$s) ne semble pas tre valide.
Veuillez saisir une adresse du type utilisateur@domaine.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/he-utf.inc.php b/ehcp/net2ftp/languages/he-utf.inc.php new file mode 100644 index 0000000..09b63d6 --- /dev/null +++ b/ehcp/net2ftp/languages/he-utf.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Please select at least one directory or file!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "The FTP server %1\$s is not in the list of allowed FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "The FTP server %1\$s is in the list of banned FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "The FTP server port %1\$s may not be used."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Your IP address (%1\$s) is in the list of banned IP addresses."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "התרחשה תקלה"; +$net2ftp_messages["Go back"] = "חזור דף אחרוה"; +$net2ftp_messages["Go to the login page"] = "עבור לעמוד כניסה"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Unable to switch to the passive mode on FTP server %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Unable to switch to the passive mode on the second (target) FTP server %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Unable to rename directory or file %1\$s into %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Directory %1\$s successfully chmodded to %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "File %1\$s was successfully chmodded to %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Unable to delete the directory %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Unable to create the directory %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to read the temporary file"] = "Unable to read the temporary file"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Unable to create the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processing directory %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Unable to delete the subdirectory %1\$s - it may not be empty"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Deleted subdirectory %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Processing of directory %1\$s completed"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "The target for file %1\$s is the same as the source, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Unable to copy the file %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Moved file %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Deleted file %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Unable to delete file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Unable to delete the local file"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "The zip file has been saved on the FTP server as %1\$s"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "The zip file has been sent to %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "File %1\$s is too big. This file will not be uploaded."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Could not generate a temporary file."; +$net2ftp_messages["File %1\$s could not be moved"] = "File %1\$s could not be moved"; +$net2ftp_messages["File %1\$s is OK"] = "קובץ %1\$s תקין"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "You did not provide any file to upload."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "File %1\$s could not be transferred to the FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "הקובץ %1\$s הועלה לשרת"; +$net2ftp_messages["Transferring files to the FTP server"] = "מעלה קבצים לשרת"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Processing archive nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Unable to execute site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Your task was stopped"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "This time limit guarantees the fair use of the web server for everyone."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "You did not provide any text to send by email!"; +$net2ftp_messages["You did not supply a From address."] = "You did not supply a From address."; +$net2ftp_messages["You did not supply a To address."] = "You did not supply a To address."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Due to technical problems the email to %1\$s could not be sent."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "כחול"; +$net2ftp_messages["Grey"] = "אפור"; +$net2ftp_messages["Black"] = "שחור"; +$net2ftp_messages["Yellow"] = "צהוב"; +$net2ftp_messages["Pastel"] = "פסטל"; + +// getMime() +$net2ftp_messages["Directory"] = "ספריה"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML file"; +$net2ftp_messages["Java source file"] = "Java source file"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Text file"; +$net2ftp_messages["Bitmap file"] = "Bitmap file"; +$net2ftp_messages["GIF file"] = "GIF file"; +$net2ftp_messages["JPEG file"] = "JPEG file"; +$net2ftp_messages["PNG file"] = "PNG file"; +$net2ftp_messages["TIF file"] = "TIF file"; +$net2ftp_messages["GIMP file"] = "GIMP file"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project file"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "ARC archive"; +$net2ftp_messages["ARJ archive"] = "ARJ archive"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archive"; +$net2ftp_messages["TAR archive"] = "TAR archive"; +$net2ftp_messages["Zip archive"] = "Zip archive"; +$net2ftp_messages["MOV movie file"] = "MOV movie file"; +$net2ftp_messages["MPEG movie file"] = "MPEG movie file"; +$net2ftp_messages["Real movie file"] = "Real movie file"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime movie file"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash file"; +$net2ftp_messages["Shockwave file"] = "Shockwave file"; +$net2ftp_messages["WAV sound file"] = "WAV sound file"; +$net2ftp_messages["Font file"] = "קובץ פונט"; +$net2ftp_messages["%1\$s File"] = "%1\$s קובץ"; +$net2ftp_messages["File"] = "קובץ"; + +// getAction() +$net2ftp_messages["Back"] = "חזרה"; +$net2ftp_messages["Submit"] = "שלח"; +$net2ftp_messages["Refresh"] = "רענן"; +$net2ftp_messages["Details"] = "פרטים"; +$net2ftp_messages["Icons"] = "Icons"; +$net2ftp_messages["List"] = "רשימה"; +$net2ftp_messages["Logout"] = "התנתק"; +$net2ftp_messages["Help"] = "עזרה"; +$net2ftp_messages["Bookmark"] = "הוסף לספר כתובות"; +$net2ftp_messages["Save"] = "שמור"; +$net2ftp_messages["Default"] = "ברירת מחדל"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "עזרה"; +$net2ftp_messages["Forums"] = "פורום תמיכה"; +$net2ftp_messages["License"] = "רשיון שימוש"; +$net2ftp_messages["Powered by"] = "מבוסס על"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty logs"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Execute"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Advanced functions"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Troubleshoot net2ftp on this webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "The site command functions are not available on this webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "The Apache functions are not available on this webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "The MySQL functions are not available on this webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Unexpected state2 string. Exiting."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Connection settings:"; +$net2ftp_messages["FTP server"] = "שרת FTP"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "שם משתמש"; +$net2ftp_messages["Password"] = "סיסמא"; +$net2ftp_messages["Password length"] = "אורך סיסמא"; +$net2ftp_messages["Passive mode"] = "מצב העברה פסיבי"; +$net2ftp_messages["Directory"] = "ספריה"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Troubleshoot your net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Checking if the FTP module of PHP is installed: "; +$net2ftp_messages["yes"] = "yes"; +$net2ftp_messages["no - please install it!"] = "no - please install it!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."; +$net2ftp_messages["Creating filename: "] = "Creating filename: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filename: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "not OK. Check the permissions of the %1\$s directory"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Writing some text to the file: "; +$net2ftp_messages["Closing the file: "] = "Closing the file: "; +$net2ftp_messages["Deleting the file: "] = "Deleting the file: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Note: when you will use this bookmark, a popup window will ask you for your username and password."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "צור ספריה"; +$net2ftp_messages["New file"] = "צור קובץ"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "העלה קובץ"; +$net2ftp_messages["Java Upload"] = "ממשק JAVA"; +$net2ftp_messages["Flash Upload"] = "ממשק FLASH"; +$net2ftp_messages["Install"] = "התקן מערכת"; +$net2ftp_messages["Advanced"] = "מתקדם"; +$net2ftp_messages["Copy"] = "העתק"; +$net2ftp_messages["Move"] = "העבר"; +$net2ftp_messages["Delete"] = "מחק"; +$net2ftp_messages["Rename"] = "שנה שם"; +$net2ftp_messages["Chmod"] = "הרשאות"; +$net2ftp_messages["Download"] = "כווץ והורד"; +$net2ftp_messages["Unzip"] = "פתח כיווץ"; +$net2ftp_messages["Zip"] = "כווץ"; +$net2ftp_messages["Size"] = "גודל"; +$net2ftp_messages["Search"] = "חיפוש"; +$net2ftp_messages["Go to the parent directory"] = "עבור ספריה אחת למעלה"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "העבר קבצים נבחרים: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Make a new subdirectory in directory %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Create a new file in directory %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload new files in directory %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Go to the advanced functions"; +$net2ftp_messages["Copy the selected entries"] = "Copy the selected entries"; +$net2ftp_messages["Move the selected entries"] = "Move the selected entries"; +$net2ftp_messages["Delete the selected entries"] = "Delete the selected entries"; +$net2ftp_messages["Rename the selected entries"] = "Rename the selected entries"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod the selected entries (only works on Unix/Linux/BSD servers)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download a zip file containing all selected entries"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip the selected entries to save or email them"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calculate the size of the selected entries"; +$net2ftp_messages["Find files which contain a particular word"] = "Find files which contain a particular word"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Click to sort by %1\$s in descending order"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Click to sort by %1\$s in ascending order"; +$net2ftp_messages["Ascending order"] = "Ascending order"; +$net2ftp_messages["Descending order"] = "Descending order"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Up"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Click to check or uncheck all rows"; +$net2ftp_messages["All"] = "הכל"; +$net2ftp_messages["Name"] = "שם"; +$net2ftp_messages["Type"] = "סוג"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "יוצר"; +$net2ftp_messages["Group"] = "קבוצה"; +$net2ftp_messages["Perms"] = "הרשאות"; +$net2ftp_messages["Mod Time"] = "שונה בתאריך"; +$net2ftp_messages["Actions"] = "פעולות"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download the file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["Update"] = "Update"; +$net2ftp_messages["Open"] = "Open"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Upload a new version of the file %1\$s and merge the changes"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "View the file %1\$s from your HTTP web server"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Note: This link may not work if you don't have your own domain name.)"; +$net2ftp_messages["This folder is empty"] = "הספריה ריקה"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "ספריות"; +$net2ftp_messages["Files"] = "קבצים"; +$net2ftp_messages["Symlinks"] = "קישורים"; +$net2ftp_messages["Unrecognized FTP output"] = "פעולות FTP לא מזוהות"; +$net2ftp_messages["Number"] = "מספר"; +$net2ftp_messages["Size"] = "גודל"; +$net2ftp_messages["Skipped"] = "דולג"; +$net2ftp_messages["Data transferred from this IP address today"] = "כמות המידע שהועברה מכתובתך היום"; +$net2ftp_messages["Data transferred to this FTP server today"] = "כמות המידע שהועברה לשרת היום"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "שפה:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "מצב צפייה:"; +$net2ftp_messages["Directory Tree"] = "עץ ספריות"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Double-click to go to a subdirectory:"; +$net2ftp_messages["Choose"] = "בחר"; +$net2ftp_messages["Up"] = "Up"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "גודל הקבצים והספריות שנבחרו"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "גודל הספריות והקבצים שנבחרו הינו "; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod directories and files"; +$net2ftp_messages["Set all permissions"] = "Set all permissions"; +$net2ftp_messages["Read"] = "Read"; +$net2ftp_messages["Write"] = "Write"; +$net2ftp_messages["Execute"] = "Execute"; +$net2ftp_messages["Owner"] = "יוצר"; +$net2ftp_messages["Group"] = "קבוצה"; +$net2ftp_messages["Everyone"] = "Everyone"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Set the permissions of file %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Set the permissions of symlink %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Chmod value"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod also the subdirectories within this directory"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod also the files within this directory"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Copy directories and files"] = "העתק קבצים וספריות"; +$net2ftp_messages["Move directories and files"] = "העבר קבצים וספריות"; +$net2ftp_messages["Delete directories and files"] = "מחק קבצים וספריות"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "האם את/ה בטוח/ה שאת/ה רוצה למחוק את הקבצים והספריות?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "כל הקצבים והספריות שנבחרו יימחקו !"; +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Different target FTP server:"] = "Different target FTP server:"; +$net2ftp_messages["Username"] = "שם משתמש"; +$net2ftp_messages["Password"] = "סיסמא"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leave empty if you want to copy the files to the same FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "If you want to copy the files to another FTP server, enter your login data."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leave empty if you want to move the files to the same FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "If you want to move the files to another FTP server, enter your login data."; +$net2ftp_messages["Copy directory %1\$s to:"] = "העתק ספריה %1\$s אל:"; +$net2ftp_messages["Move directory %1\$s to:"] = "העבר ספריה %1\$s אל:"; +$net2ftp_messages["Directory %1\$s"] = "הספריה %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "העתק קובץ %1\$s אל:"; +$net2ftp_messages["Move file %1\$s to:"] = "העבר קובץ %1\$s אל:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "ספריית יעד:"; +$net2ftp_messages["Target name:"] = "שם יעד:"; +$net2ftp_messages["Processing the entries:"] = "מעבד בקשות:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "התקן מערכת"; +$net2ftp_messages["Size"] = "גודל"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: right-click on the link and choose \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: This file has not yet been saved"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Saved on %1\$s using mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: This file could not be saved"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directory: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "New file name: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Search for a word or phrase"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Restrict the search to:"; +$net2ftp_messages["files with a filename like"] = "files with a filename like"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "files with a size"; +$net2ftp_messages["files which were last modified"] = "files which were last modified"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "ספריה"; +$net2ftp_messages["File"] = "קובץ"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "View"; +$net2ftp_messages["Edit"] = "Edit"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "כדי להשתמש במערכת,עלייך קודם להתחבר"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "שרת FTP"; +$net2ftp_messages["Example"] = "Example"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "שם משתמש"; +$net2ftp_messages["Password"] = "סיסמא"; +$net2ftp_messages["Anonymous"] = "אנונימי"; +$net2ftp_messages["Passive mode"] = "מצב העברה פסיבי"; +$net2ftp_messages["Initial directory"] = "ספרייה התחלתית"; +$net2ftp_messages["Language"] = "שפה"; +$net2ftp_messages["Skin"] = "סוג ממשק"; +$net2ftp_messages["FTP mode"] = "צורת העברת קבצים"; +$net2ftp_messages["Automatic"] = "אוטומטי"; +$net2ftp_messages["Login"] = "התחבר"; +$net2ftp_messages["Clear cookies"] = "נקה קוקי'ז"; +$net2ftp_messages["Admin"] = "ממשק ניהול"; +$net2ftp_messages["Please enter an FTP server."] = "הכנס כתובת שרת FTP, בבקשה"; +$net2ftp_messages["Please enter a username."] = "הכנס שם משתמש, בבקשה"; +$net2ftp_messages["Please enter a password."] = "הכנס סיסמא, בבקשה"; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "שם משתמש"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "סיסמא"; +$net2ftp_messages["Login"] = "התחבר"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "התנתקת מהשרת. לחץ , כאן על מנת להתחבר שוב."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = ""; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "להשלמת תהליך ההתנתקות מהשרות, מומלץ לסגור את החלון הנוכחי."; +$net2ftp_messages["Close"] = "סגור חלון"; +$net2ftp_messages["Click here to close this window"] = "לחץ כאן כדי לסגור את החלון הנוכחי"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Create new directories"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "The new directories will be created in %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Directory %1\$s was successfully created."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rename directories and files"; +$net2ftp_messages["Old name: "] = "Old name: "; +$net2ftp_messages["New name: "] = "New name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "The new name may not contain any dots. This entry was not renamed to %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s was successfully renamed to %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "ספריית יעד:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "העלה קבצים לספריה:"; +$net2ftp_messages["Files"] = "קבצים"; +$net2ftp_messages["Archives"] = "קבצים מכווצים"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "בחר קבצים להעלות לשרת."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "תוכן הקבצים המכווצים ישוחזר, והקבצים המשוחזרים יועלו לשרת."; +$net2ftp_messages["Add another"] = "הוסף"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +$net2ftp_messages["Choose a directory"] = "Choose a directory"; +$net2ftp_messages["Please wait..."] = "Please wait..."; +$net2ftp_messages["Uploading... please wait..."] = "מעלה... המתן בבקשה..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "אם העלאת הקבצים לוקחת יותר מהמותר, %1\$s שניות<\/b>, אנא, נסה/י שנית, עם פחות קבצים."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "סגור את החלון"; + +$net2ftp_messages["Upload files and archives"] = "העלה קבצים"; +$net2ftp_messages["Upload results"] = "תוצאות תהליך העלאה"; +$net2ftp_messages["Checking files:"] = "בודק קבצים:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "מעלה קבצים לשרת FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "משחזר את תוכן הקבצים, ומעלה אותם לשרת:"; +$net2ftp_messages["Upload more files and archives"] = "העלה עוד קבצים"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "The maximum execution time is %1\$s seconds"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "If the destination file already exists, it will be overwritten"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "View image %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "שמור את הקבצים מכווצים תחת השם:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "שלח את הקבצים אל:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = ""; +$net2ftp_messages["Some additional comments to add in the email:"] = "הוסף הערות לאימייל שיישלח:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "לא נתת שם לשמירה. אנא חזור, ותן שם לשמירה."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "כתובת האימייל שהכנסת (%1\$s) נראית לא חוקית.
אנא הכנס כתובת אימייל, בצורת username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/hu-utf.inc.php b/ehcp/net2ftp/languages/hu-utf.inc.php new file mode 100644 index 0000000..09d7b17 --- /dev/null +++ b/ehcp/net2ftp/languages/hu-utf.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "A könyvtár %1\$s nem létezik, vagy nem lehet kiválasztani, ezért a könyvtár %2\$s jelenik meg helyette."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "A gyökér könyvtárban %1\$s nem létezik, vagy nem lehet kiválasztani."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "A könyvtár %1\$s nem lehet kiválasztani - lehet, hogy nem rendelkezik megfelelõ jogokkal, hogy megtekinthesse ezt a könyvtárat, vagy nem is létezik."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Bejegyzéseket tartalmazó tiltott kulcsszavak nem lehet felhasználásával net2ftp. Ennek célja, hogy elkerüljék, vagy Ebay Paypal csalások attól, hogy feltöltött keresztül net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Fájlok, amelyek túl nagy, nem lehet letölteni, feltöltött, másolhatók, mozgathatók, kereshetõ, tömörített, cipzárat kinyitni, megtekintett vagy szerkesztett, csak akkor lehet átnevezni, chmodded vagy törölni."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Végrehajtaja %1\$s egy új ablakban"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Kérjük, válasszon legalább egy könyvtárat vagy fájl!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Az FTP szerver %1\$s nem szerepel a listán engedélyezett FTP szervereken."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Az FTP szerver %1\$s van a tilalmi listán szereplõ FTP-szervereket."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Az FTP szerver portja %1\$s nem lehet felhasználni."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Az Ön IP címe (%1\$s) nem szerepel a listán az engedélyezett IP-címek."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Az Ön IP címe (%1\$s) van a tilalmi listán szereplõ IP-címek."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Táblázat tartalmazza net2ftp_users ismétlõdõ sorokban."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Nem adta meg a rendszergazda felhasználói név vagy jelszó."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Nem vagy bejelentkezve. Kérjük, próbálja újra."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Nem sikerült meghatározni az IP címet."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Táblázat tartalmazza net2ftp_log_consumption_ipaddress ismétlõdõ sorokban."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Táblázat tartalmazza net2ftp_log_consumption_ftpserver ismétlõdõ sorokban."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "A változó consumption_ipaddress_datatransfer nem számérték."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Táblázat net2ftp_log_consumption_ipaddress nem lehet frissíteni."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Táblázat tartalmazza net2ftp_log_consumption_ipaddress ismétlõdõ bejegyzéseket."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Táblázat net2ftp_log_consumption_ftpserver nem lehet frissíteni."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tképes net2ftp_log_consumption_ftpserver ismétlõdõ bejegyzéseket tartalmaz."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Táblázat net2ftp_log_access nem lehet frissíteni."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Táblázat tartalmazza net2ftp_log_access ismétlõdõ bejegyzéseket."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Nem sikerült csatlakozni a MySQL adatbázishoz. Kérjük, ellenõrizze a MySQL adatbázis beállításait net2ftp konfigurációs fájl settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Nem választhatja a MySQL adatbázisban. Kérjük, ellenõrizze a MySQL adatbázis beállításait net2ftp konfigurációs fájl settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Egy hiba lépett fel"; +$net2ftp_messages["Go back"] = "Menj vissza"; +$net2ftp_messages["Go to the login page"] = "Menjen a bejelentkezõ oldalra"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nem lehet kapcsolódni az FTP szerverre %1\$s a port %2\$s.

Biztos vagy benne, hogy ez a cím az FTP szerver? Ez gyakran eltér a HTTP (web) szervert. Kérjük, lépjen kapcsolatba az ISP helpdesk vagy a rendszergazda segítségét.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerült bejelentkezni az FTP-kiszolgáló %1\$s a felhasználóneveddel %2\$s.

Biztos vagy benne, hogy a felhasználónév és jelszó helyes? Kérjük, lépjen kapcsolatba az ISP helpdesk vagy a rendszergazda segítségét.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Nem sikerült váltani a passzív módban az FTP szerveren %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerült kapcsolódni a második (cél) FTP szerver %1\$s a port %2\$s.

Biztos vagy benne, hogy ez a címe a második (cél) FTP szerver? Ez gyakran eltér a HTTP (web) szervert. Kérjük, lépjen kapcsolatba az ISP helpdesk vagy a rendszergazda segítségét.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerült bejelentkezni a második (cél) FTP szerver %1\$s a felhasználóneveddel %2\$s.

Biztos vagy benne, hogy a felhasználónév és jelszó helyes? Kérjük, lépjen kapcsolatba az ISP helpdesk vagy a rendszergazda segítségét.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Nem sikerült váltani a passzív módban a második (cél) FTP szerver %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Nem sikerült átnevezni könyvtár vagy fájl %1\$s ba %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Nem lehet végrehajtani a parancsot site %1\$s. Ne feledje, hogy a chmod parancs csak Unix FTP szerverek, nem pedig a Windows FTP szervereken."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Könyvtár %1\$s sikeresen chmodded a %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Feldolgozás bejegyzések belül könyvtárban %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Fájl %1\$s sikeresen chmodded, hogy %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Az összes kiválasztott könyvtárak és fájlok kerültek feldolgozásra."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Nem sikerült törölni a könyvtárat %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nem sikerült törölni a fájlt%1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Nem sikerült létrehozni a könyvtárat %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Nem sikerült létrehozni az ideiglenes fájlt"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Nem sikerült beolvasni a fájlt %1\$s Az FTP-kiszolgáló, és mentse el az ideiglenes fájlt %2\$s.
Ellenõrizze a jogosultságait a %3\$s könyvtárat.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerült megnyitni az ideiglenes fájlt. Ellenõrizze a jogosultságait a %1\$s könyvtárat."; +$net2ftp_messages["Unable to read the temporary file"] = "Nem sikerült beolvasni az ideiglenes fájlt"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nem sikerült bezárni a kilincset az ideiglenes fájl"; +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerült törölni az ideiglenes fájlt"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerült létrehozni az ideiglenes fájlt. Ellenõrizze a jogosultságait a%1\$s könyvtárat."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerült megnyitni az ideiglenes fájlt. Ellenõrizze a jogosultságait a %1\$s könyvtárat."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Nem lehet írni a húr az ideiglenes fájl %1\$s.
Ellenõrizze a jogosultságait a %2\$s könyvtárat."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nem sikerült bezárni a kilincset az ideiglenes fájl"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Nem sikerült tenni a fájlt %1\$saz FTP-kiszolgálóra.
Lehet, hogy nincs írási jogosultsága a könyvtárban."; +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerült törölni az ideiglenes fájlt"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Feldolgozás könyvtár %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "A cél könyvtár %1\$s megegyezik, vagy egy alkönyvtár a forrás könyvtár%2\$s, így ez a könyvtár kimarad"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "A könyvtár %1\$s tartalmaz egy tiltott kulcsszót, így ez a könyvtár kimarad"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "A könyvtár %1\$s tartalmaz egy tiltott kulcsszót, megszakítva a lépés"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Nem sikerült létrehozni a alkönyvtárba %1\$s. Talán már léteznek. Folytatva a másolás / áthelyezés folyamata..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created cél alkönyvtár %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "A könyvtár %1\$s nem lehet kiválasztani, így ez a könyvtár kimarad"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Nem sikerült törölni a alkönyvtárba %1\$s - ez nem lehet üres"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Törölt alkönyvtár %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Törölt alkönyvtár %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Törölt alkönyvtár %1\$s befejezve"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "A cél az, fájl %1\$s ugyanaz, mint a forrás, ezért ez a fájl kihagyásra"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "A fájl %1\$s tartalmaz egy tiltott kulcsszót, így ez a fájl kihagyásra"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "A fájl %1\$s tartalmaz egy tiltott kulcsszót, megszakítva a lépés"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "A fájl %1\$s túl nagy ahhoz, hogy másolható, így ez a fájl kihagyásra"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "A fájl %1\$s túl nagy ahhoz, hogy mozgatni, megszakítva a lépés"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Nem lehet másolni a fájlt %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Másolhatók fájlt %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Nem sikerült áthelyezni a fájlt %1\$s, megszakítva a lépés"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Áthelyzett fájl %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nem sikerült törölni a fájlt%1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Törölt fájl %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Az összes kiválasztott könyvtárak és fájlok kerültek feldolgozásra."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Nem lehet másolni a távoli fájl %1\$s a helyi fájl FTP-módban %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Nem sikerült törölni a fájlt %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "A fájl túl nagy ahhoz, hogy át"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Napi Elérte: a fájl %1\$s nem kerülnek át"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Nem lehet másolni a helyi fájlt a távoli fájl %1\$s az FTP mód %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Nem sikerült törölni a helyi fájl"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerült törölni az ideiglenes fájlt"; +$net2ftp_messages["Unable to send the file to the browser"] = "Nem sikerült elküldeni a fájlt a böngészõ"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Nem sikerült létrehozni az ideiglenes fájlt"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "A zip fájl mentett az FTP szerverre %1\$s"; +$net2ftp_messages["Requested files"] = "Kért fájlok"; + +$net2ftp_messages["Dear,"] = "Kedves,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Valaki azt kérte a csatolt fájlokat küldeni az e-mail fiók (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Ha nem tudsz semmit errõl, vagy ha nem bízol a személy, törölje az e-mail megnyitása nélkül a zip fájlt mellékletként."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Ne feledjük, hogy ha nem tudja megnyitni a zip fájlt, a fájlok belsejében ne károsítsa a számítógépet."; +$net2ftp_messages["Information about the sender: "] = "Információ a feladónak: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Küldés idõpontja: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Keresztül küldött net2ftp alkalmazás telepítve van ezen a honlapon: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster e-mail címe: "; +$net2ftp_messages["Message of the sender: "] = "Üzenet a feladónak: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp szabad szoftver, megjelent a GNU / GPL licensz érvényes. További információkért látogasson el ahttp://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "A zip fájl nem érkezett %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Fájl %1\$s túl nagy. Ez a fájl nem lesz feltöltve."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Fájl %1\$s nem tartalmaz egy tiltott kulcsszót. Ez a fájl nem lesz feltöltve."; +$net2ftp_messages["Could not generate a temporary file."] = "Nem sikerült létrehozni egy ideiglenes fájlt."; +$net2ftp_messages["File %1\$s could not be moved"] = "Fájl %1\$s volna nem lehet mozgatni"; +$net2ftp_messages["File %1\$s is OK"] = "Fájl %1\$s rendben van"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Nem tud mozogni a feltöltött fájlt a Temp könyvtárba.

A rendszergazda ezen a honlapon, hogy chmod 777 a / temp címjegyzéke net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "Ön nem adott ki a feltöltendõ fájlt."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Fájl %1\$s nem lehetett át az FTP szerver"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Fájl %1\$s átkerült az FTP szerver az FTP mód %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Fájlok átvitele az FTP szerverre"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Feldolgozás archívum nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Arhív %1\$s nem volt feldolgozni, mert a fájl kiterjesztése nem volt ismert. Csak a zip, tar, tgz, és gz archívum támogatott abban a pillanatban."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Képtelen-hoz kivonat a fájlokat és könyvtárakat az archívumból"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archívum fájlnevek a ../ vagy ..\\ - megszakítva a kitermelési"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Könyvtár létrehozása %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Nem sikerült létrehozni a könyvtárat %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Másolhatók fájlt %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Nem lehet másolni file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Nem sikerült törölni az ideiglenes könyvtár"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Nem sikerült törölni az ideiglenes fájlt %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Nem lehet végrehajtani a parancsot site %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Az Ön feladata az volt, abbahagyta"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "A feladat akartál végrehajtható net2ftp több idõt, mint a megengedett %1\$s másodperc, és ennek feladata az volt, hogy megállt."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Ez a határidõ garantálja a tisztességes felhasználása a webszerver mindenki számára."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Próbálja meg osztott a feladatot kisebb feladatok: korlátozzák a kijelölt fájlok, és ki lehet hagyni a legnagyobb fájl."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Ha tényleg szükség van net2ftp, hogy képes legyen kezelni a nagy feladatokat, amelyek hosszú idõt vesz igénybe, helyezzen üzembe net2ftp saját szerveren."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Ön nem adott szöveget küldeni e-mailben!"; +$net2ftp_messages["You did not supply a From address."] = "Ön nem a szolgáltatás Feladó cím."; +$net2ftp_messages["You did not supply a To address."] = "Te nem a szolgáltatás foglalkozzanak."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Mûszaki problémák miatt az e-mail %1\$s nem lehet elküldeni."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Nem lehet végrehajtani az SQL lekérdezést."; +$net2ftp_messages["Unable to open the system log."] = "Nem sikerült megnyitni a rendszer naplót."; +$net2ftp_messages["Unable to write a message to the system log."] = "Nem lehet írni egy üzenetet a rendszer naplót."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Kérjük, adja meg felhasználónevét és jelszavát az FTP-kiszolgáló "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Ön nem adja meg a személyes bejelentkezési adatait a felugró ablakban.
Kattintson \"Menjen a bejelentkezõ oldalra\"lent."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Hozzáférés a net2ftp Admin panel le van tiltva, mert nincs jelszó állapítottak meg a fájlban settings.inc.php. Írja be a jelszót az adott fájlt, és újra tölteni az oldalt."; +$net2ftp_messages["Please enter your Admin username and password"] = "Kérjük, adja meg az Adminisztrátor felhasználónevét és jelszavát "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Ön nem adja meg a személyes bejelentkezési adatait a felugró ablakban.
Kattintson \"Menjen a bejelentkezõ oldalra\"lent."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Hibás a felhasználó név, vagy jelszó a net2ftp Admin panel. A felhasználónév és a jelszó lehet beállítani a fájl settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Kék"; +$net2ftp_messages["Grey"] = "Szürke"; +$net2ftp_messages["Black"] = "Feket"; +$net2ftp_messages["Yellow"] = "Sárga"; +$net2ftp_messages["Pastel"] = "Pasztell"; + +// getMime() +$net2ftp_messages["Directory"] = "Könyvtár"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML fájl"; +$net2ftp_messages["Java source file"] = "Java forrásfájl"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Szöveges fájl"; +$net2ftp_messages["Bitmap file"] = "Bitmap fájl"; +$net2ftp_messages["GIF file"] = "GIF fájl"; +$net2ftp_messages["JPEG file"] = "JPEG fájl"; +$net2ftp_messages["PNG file"] = "PNG fájl"; +$net2ftp_messages["TIF file"] = "TIF fájl"; +$net2ftp_messages["GIMP file"] = "GIMP fájl"; +$net2ftp_messages["Executable"] = "Kivihetõ"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word dokumentum"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel táblázat"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint prezentáció"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access adatbázis"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio rajz"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project fájl"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 dokumentum"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 sablon"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 táblázat"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 sablon"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 dokumentum"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 sablon"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 prezentáció"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 sablon"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 nemzetközi dokumentum"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 dokumentum"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x dokumentum"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x nemzetközi dokumentum"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x táblázat"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x nemzetközi dokumentum"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x prezentáció"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x fájl"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x nemzetközi dokumentum"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x nemzetközi dokumentum"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x e-mail fájl"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat dokumentum"; +$net2ftp_messages["ARC archive"] = "ARC archívuma"; +$net2ftp_messages["ARJ archive"] = "ARJ archívuma"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archívuma"; +$net2ftp_messages["TAR archive"] = "TAR archívuma"; +$net2ftp_messages["Zip archive"] = "Zip archívuma"; +$net2ftp_messages["MOV movie file"] = "MOV filmfájlt"; +$net2ftp_messages["MPEG movie file"] = "MPEG filmfájlt"; +$net2ftp_messages["Real movie file"] = "Real filmfájlt"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime filmfájlt"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash fájl"; +$net2ftp_messages["Shockwave file"] = "Shockwave fájl"; +$net2ftp_messages["WAV sound file"] = "WAV hangfájlra"; +$net2ftp_messages["Font file"] = "Font fájl"; +$net2ftp_messages["%1\$s File"] = "%1\$s Fájl"; +$net2ftp_messages["File"] = "Fájl"; + +// getAction() +$net2ftp_messages["Back"] = "Vissza"; +$net2ftp_messages["Submit"] = "Tovább"; +$net2ftp_messages["Refresh"] = "Frissítés"; +$net2ftp_messages["Details"] = "Részletek"; +$net2ftp_messages["Icons"] = "Ikonok"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Kilépés"; +$net2ftp_messages["Help"] = "Súgó"; +$net2ftp_messages["Bookmark"] = "Könyvjelzõ"; +$net2ftp_messages["Save"] = "Mentés"; +$net2ftp_messages["Default"] = "Alapértelmezett"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Segítség Útmutató "; +$net2ftp_messages["Forums"] = "Fórumok"; +$net2ftp_messages["License"] = "Engedély"; +$net2ftp_messages["Powered by"] = "Készített"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Ön most már bevitték a net2ftp fórumokon. E fórumok számára net2ftp kapcsolatos témák csak - nem a generikus webhosting kérdések."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkciók"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Verzió információ"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Ez a változat a net2ftp naprakész."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Ez a változat a net2ftp is up-to-date."; +$net2ftp_messages["Logging"] = "Naplózás"; +$net2ftp_messages["Date from:"] = "Idõpontot:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Üres naplók"; +$net2ftp_messages["View logs"] = "Naplók megtekintése"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL táblák"; +$net2ftp_messages["Create the MySQL database tables"] = "Létre a MySQL adatbázis-táblák"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkciók"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "A fájl megfogva %1\$s nem lehet megnyitni."; +$net2ftp_messages["The file %1\$s could not be opened."] = "A fájl %1\$s nem lehet megnyitni."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "A fájl megfogva %1\$s nem lehet bezárni."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "A kapcsolat a kiszolgálóval %1\$s nem lehetett létrehozni. Kérjük, ellenõrizze az adatbázis beállításokat lépett."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Nem választhatja az adatbázis %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "Az SQL lekérdezés nr %1\$s is nem hajtható végre."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "Az SQL lekérdezésnr %1\$s hajtották végre sikeresen."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Kérjük, adja meg a MySQL beállítások:"; +$net2ftp_messages["MySQL username"] = "MySQL felhasználónevét"; +$net2ftp_messages["MySQL password"] = "MySQL jelszavát"; +$net2ftp_messages["MySQL database"] = "MySQL adatbázis"; +$net2ftp_messages["MySQL server"] = "MySQL szerver"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Ez az SQL-lekérdezés lesz végre:"; +$net2ftp_messages["Execute"] = "Végrehajt"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Beállítások:"; +$net2ftp_messages["MySQL password length"] = "A MySQL jelszó hossza"; +$net2ftp_messages["Results:"] = "Eredmény:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkciók"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Nem lehet végrehajtani az SQL lekérdezést %1\$s."; +$net2ftp_messages["No data"] = "Nincs adat"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkciók"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "A táblázat %1\$s kiürült sikeresen."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "A táblázat %1\$s nem kell üríteni."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "A táblázat %1\$s sikeres volt optimalizálva."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "A táblázat %1\$s nem lehetne optimalizálni."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Haladó funkciók"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Tiltva"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP függvények"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Küldjön tetszõleges FTP-parancsok az FTP-kiszolgáló"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Ez a funkció csak a PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "Hibaelhárítási feladatok"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Elhárítása net2ftp ezen a webszerveren"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Elhárítása az FTP szerver"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Próbálja ki a net2ftp lista parsing szabályok"; +$net2ftp_messages["Translation functions"] = "Fordítási feladatok"; +$net2ftp_messages["Introduction to the translation functions"] = "Bevezetés a fordítási feladatok"; +$net2ftp_messages["Extract messages to translate from code files"] = "Kivonat üzenetek lefordítani a kódot kép"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Ellenõrizze, hogy vannak új üzenetek vagy elavult"; + +$net2ftp_messages["Beta functions"] = "Béta funkciók"; +$net2ftp_messages["Send a site command to the FTP server"] = "Küldje el egy webhely parancsot az FTP szerver"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: jelszóval védeni egy könyvtárat, hozzon létre egyéni lapokat"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: kivégez egy SQL lekérdezés"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "A weboldal irányító funkciók nem állnak rendelkezésre ezen a webszerveren."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Az Apache funkciók nem érhetõk el ezen a webszerveren."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "A MySQL függvények nem érhetõk el ezen a webszerveren."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Váratlan state2 string. Kilépett."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Elhárítása az FTP szerver"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Kapcsolat beállításai:"; +$net2ftp_messages["FTP server"] = "FTP szerver"; +$net2ftp_messages["FTP server port"] = "FTP szerver port"; +$net2ftp_messages["Username"] = "Felhasználónév"; +$net2ftp_messages["Password"] = "Jelszó"; +$net2ftp_messages["Password length"] = "Jelszó hossza"; +$net2ftp_messages["Passive mode"] = "Passzív mód"; +$net2ftp_messages["Directory"] = "Könyvtár"; +$net2ftp_messages["Printing the result"] = "Nyomtatás eredménye"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Kapcsolódás az FTP szerver: "; +$net2ftp_messages["Logging into the FTP server: "] = "Bejelentkezik az FTP szerver: "; +$net2ftp_messages["Setting the passive mode: "] = "A passzív mód beállítása: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Megismeri az FTP-kiszolgáló rendszer típusát: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Megváltoztatása a könyvtár %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "A könyvtárat az FTP szerver: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Hogyan lehet a nyers listája könyvtárakat és fájlokat: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Kipróbálás második alkalommal kap a nyers listát könyvtárakat és fájlokat: "; +$net2ftp_messages["Closing the connection: "] = "A kapcsolat bezárása: "; +$net2ftp_messages["Raw list of directories and files:"] = "Nyers listája könyvtárakat és fájlokat:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed listája könyvtárakat és fájlokat:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "nem OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Próbálja ki a net2ftp lista parsing szabályok"; +$net2ftp_messages["Sample input"] = "Minta bemenet"; +$net2ftp_messages["Parsed output"] = "Átvizsgált bemenet"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Elhárítása a telepítõ net2ftp"; +$net2ftp_messages["Printing the result"] = "Nyomtatás eredménye"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Ellenõrzése, ha az FTP modul a PHP telepítését: "; +$net2ftp_messages["yes"] = "igen"; +$net2ftp_messages["no - please install it!"] = "nem - Kérjük, telepítse azt!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Ellenõrzi a jogosultságait a könyvtárat a webszerveren: egy kis fájlt kell írni a / temp mappát, majd el kell hagyni."; +$net2ftp_messages["Creating filename: "] = "Fájlnév létrehozása: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Fájlneve: %1\$s"; +$net2ftp_messages["not OK"] = "nem OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "nem OK. Ellenõrizze a jogosultságait a %1\$s könyvtárat"; +$net2ftp_messages["Opening the file in write mode: "] = "A fájl írásra használni: "; +$net2ftp_messages["Writing some text to the file: "] = "Írás néhány szöveget a fájlba: "; +$net2ftp_messages["Closing the file: "] = "A fájl bezárása: "; +$net2ftp_messages["Deleting the file: "] = "Törli a fájlt: "; + +$net2ftp_messages["Testing the FTP functions"] = "Tesztelés az FTP függvények"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Csatlakozás teszt FTP szerver: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Kapcsolódás az FTP szerver: "; +$net2ftp_messages["Logging into the FTP server: "] = "Bejelentkezik az FTP szerver: "; +$net2ftp_messages["Setting the passive mode: "] = "A passzív mód beállítása: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Megismeri az FTP-kiszolgáló rendszer típusát: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Megváltoztatása a könyvtár %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "A könyvtárat az FTP szerver: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Hogyan lehet a nyers listája könyvtárakat és fájlokat: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Kipróbálás második alkalommal kap a nyers listát könyvtárakat és fájlokat: "; +$net2ftp_messages["Closing the connection: "] = "A kapcsolat bezárása: "; +$net2ftp_messages["Raw list of directories and files:"] = "Nyers listája könyvtárakat és fájlokat:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed listája könyvtárakat és fájlokat:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "nem OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Megjegyzés:: mikor fogja használni ezt a könyvjelzõt, egy felugró ablak fogja kérni a felhasználónevét és jelszavát."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Válassza ki a könyvtárat"; +$net2ftp_messages["Please wait..."] = "Kérem várjon..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Könyvtárak neveit tartalmazó \' nem jeleníthetõ meg helyesen. Csak akkor lehet hagyni. Kérjük, lépjen vissza és válasszon másik alkönyvtár."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Napi Elérte: nem lesz képes adatátvitelre"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Annak érdekében, hogy biztosítsa a tisztességes felhasználása a webszerver mindenki számára, az adatátvitel volumene és szkript végrehajtási idejét korlátozzák egy felhasználó, vagy naponta. Amint elérik a limitet, akkor is böngészni az FTP szerver, de nem adja át az adatokat / tõle."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Ha szükség van korlátlan használata, kérjük telepítse net2ftp saját webszerveren."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Új könyvtár"; +$net2ftp_messages["New file"] = "Új fájl"; +$net2ftp_messages["HTML templates"] = "HTML sablon"; +$net2ftp_messages["Upload"] = "Feltöltés"; +$net2ftp_messages["Java Upload"] = "Java feltöltés"; +$net2ftp_messages["Flash Upload"] = "Flash feltöltés"; +$net2ftp_messages["Install"] = "Installáció"; +$net2ftp_messages["Advanced"] = "Speciális"; +$net2ftp_messages["Copy"] = "Másol"; +$net2ftp_messages["Move"] = "Mozgat"; +$net2ftp_messages["Delete"] = "Törlés"; +$net2ftp_messages["Rename"] = "Átnevezés"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Letöltés"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Méret"; +$net2ftp_messages["Search"] = "Keresés"; +$net2ftp_messages["Go to the parent directory"] = "Menj a szülõ könyvtár"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transform kiválasztott bejegyzések: "; +$net2ftp_messages["Transform selected entry: "] = "Transform kijelölt bejegyzést: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Készíts egy új alkönyvtár a könyvtárban %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Hozzon létre egy új fájlt a könyvtárban %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Hozzon létre egy weboldal segítségével könnyen kész sablonok"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Feltöltés új fájlokat a könyvtárban %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload könyvtárakat és fájlokat használ Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Feltölteni fájlokat Flash kisalkalmazás"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Telepítéséhez szoftvercsomagok (requires PHP webszerver)"; +$net2ftp_messages["Go to the advanced functions"] = "Menj a speciális funkciókat"; +$net2ftp_messages["Copy the selected entries"] = "A kijelölt tételek másolása"; +$net2ftp_messages["Move the selected entries"] = "A kijelölt tételek mozgatása"; +$net2ftp_messages["Delete the selected entries"] = "A kijelölt tételek törlése"; +$net2ftp_messages["Rename the selected entries"] = "A kijelölt tételek átnevezése"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod a kiválasztott pont (csak akkor mûködik, Unix / Linux / BSD szerverek)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Le egy zip fájl tartalmazza az összes kiválasztott pont"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip a kiválasztott archívumokat az FTP szerveren"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip a kiválasztott pont menteni, vagy elküldheti e-mailben"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Ki kell számítani a mérete a kiválasztott pont"; +$net2ftp_messages["Find files which contain a particular word"] = "Keresse meg a fájlokat, amelyek tartalmazzák az adott szót"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Kattintson ide a rendezéshez %1\$s a csökkenõ sorrendben"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Kattintson ide a rendezéshez %1\$s a növekvõ sorrendben"; +$net2ftp_messages["Ascending order"] = "Növekvõ sorrendben"; +$net2ftp_messages["Descending order"] = "Csökkenõ sorrendben"; +$net2ftp_messages["Upload files"] = "Feltölt fájlokat"; +$net2ftp_messages["Up"] = "Fel"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Jelölje be vagy törölje az összes sorok"; +$net2ftp_messages["All"] = "Összes"; +$net2ftp_messages["Name"] = "Név"; +$net2ftp_messages["Type"] = "Típus"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Tulajdonos"; +$net2ftp_messages["Group"] = "Csoport"; +$net2ftp_messages["Perms"] = "Perms"; +$net2ftp_messages["Mod Time"] = "Mód. idõ"; +$net2ftp_messages["Actions"] = "Akció"; +$net2ftp_messages["Select the directory %1\$s"] = "Válassza ki a könyvtárat %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Válassza ki a fájlt %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Válassza ki a symlink - %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Menj a alkönyvtárba %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "A fájl letöltéséhez %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Symlinket kövesse %1\$s"; +$net2ftp_messages["View"] = "Nézet"; +$net2ftp_messages["Edit"] = "Szerkeszt"; +$net2ftp_messages["Update"] = "Frissítés"; +$net2ftp_messages["Open"] = "Megnyitás"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Tekintse meg a kijelölt fájl forráskódját %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Szerkessze a forráskód fájl %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "A fájl újabb verzióját a fájl %1\$s és egyesítése a változások"; +$net2ftp_messages["View image %1\$s"] = "Kép megtekintése %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Nézzem meg, hogy a fájl %1\$s az Ön HTTP webszerverén van"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Megjegyzés: Ez a kapcsolat nem mûködik, ha Ön nem rendelkezik saját domain név.)"; +$net2ftp_messages["This folder is empty"] = "Ez a mappa üres"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Directories"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Unrecognized FTP output"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Méret"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Nyelv:"; +$net2ftp_messages["Skin:"] = "Felület:"; +$net2ftp_messages["View mode:"] = "Nézetmód:"; +$net2ftp_messages["Directory Tree"] = "Könyvtárfa"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Végrehajtaja %1\$s egy új ablakban"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Kattintson duplán az alkönyvtárba lépéshez:"; +$net2ftp_messages["Choose"] = "Választás"; +$net2ftp_messages["Up"] = "Fel"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Size of selected directories and files"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "The total size taken by the selected directories and files is:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod könyvtárak és fájlok"; +$net2ftp_messages["Set all permissions"] = "Minden engedély beállítása"; +$net2ftp_messages["Read"] = "Olvasás"; +$net2ftp_messages["Write"] = "Írás"; +$net2ftp_messages["Execute"] = "Végrehajt"; +$net2ftp_messages["Owner"] = "Tulajdonos"; +$net2ftp_messages["Group"] = "Csoport"; +$net2ftp_messages["Everyone"] = "Mindenki"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "A minden engedély beállítása érvényesítéséhez írja be a fent említett engedélyeket és kattintson a gombra \"Minden engedély beállítása\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Set the permissions of file %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Set the permissions of symlink %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Chmod érték"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod also the subdirectories within this directory"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod also the files within this directory"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Válassza ki a könyvtárat"; +$net2ftp_messages["Copy directories and files"] = "Copy directories and files"; +$net2ftp_messages["Move directories and files"] = "Move directories and files"; +$net2ftp_messages["Delete directories and files"] = "Delete directories and files"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Are you sure you want to delete these directories and files?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "All the subdirectories and files of the selected directories will also be deleted!"; +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Different target FTP server:"] = "Different target FTP server:"; +$net2ftp_messages["Username"] = "Felhasználónév"; +$net2ftp_messages["Password"] = "Jelszó"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leave empty if you want to copy the files to the same FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "If you want to copy the files to another FTP server, enter your login data."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leave empty if you want to move the files to the same FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "If you want to move the files to another FTP server, enter your login data."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copy directory %1\$s to:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Move directory %1\$s to:"; +$net2ftp_messages["Directory %1\$s"] = "Directory %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copy file %1\$s to:"; +$net2ftp_messages["Move file %1\$s to:"] = "Move file %1\$s to:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Target name:"] = "Target name:"; +$net2ftp_messages["Processing the entries:"] = "Processing the entries:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Installáció"; +$net2ftp_messages["Size"] = "Méret"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: jobb gombbal a hivatkozásra, és válassza a \"Add a kedvencekhez...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Linket adja a Könyvjelzõhöz ...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created cél alkönyvtár %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Másolhatók fájlt %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: This file has not yet been saved"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Saved on %1\$s using mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: This file could not be saved"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directory: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "New file name: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Search for a word or phrase"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Restrict the search to:"; +$net2ftp_messages["files with a filename like"] = "files with a filename like"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "files with a size"; +$net2ftp_messages["files which were last modified"] = "files which were last modified"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "Könyvtár"; +$net2ftp_messages["File"] = "Fájl"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Nézet"; +$net2ftp_messages["Edit"] = "Szerkeszt"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Tekintse meg a kijelölt fájl forráskódját %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Szerkessze a forráskód fájl %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload könyvtárakat és fájlokat használ Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Belépés!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Miután bejelentkezett, Ön képes lesz:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigálni az FTP szerveren"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Ha már bejelentkezett, akkor böngészhetünk a könyvtárból könyvtárba, és látni az alkönyvtárakat és fájlokat."; +$net2ftp_messages["Upload files"] = "Feltölt fájlokat"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Jelenleg 3 különbözõ módon lehet feltölteni fájlokat: a szabványos feltöltési ûrlapon, a feltöltés-és unzip funkció, és a Java kisalkalmazással."; +$net2ftp_messages["Download files"] = "Fájlok letöltése"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Kattintson egy fájlnevévre gyorsan letölt egy fájlt.
Válasszon ki több fájlt, és kattintson a Downloadra, a kiválasztott fájlok letöltését a zip archívumban."; +$net2ftp_messages["Zip files"] = "Zip fájlok"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip fájl"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Szoftver Installálás"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP szerver"; +$net2ftp_messages["Example"] = "Példa"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Felhasználónév"; +$net2ftp_messages["Password"] = "Jelszó"; +$net2ftp_messages["Anonymous"] = "Névtelen"; +$net2ftp_messages["Passive mode"] = "Passzív mód"; +$net2ftp_messages["Initial directory"] = "Kezdõ könyvtár"; +$net2ftp_messages["Language"] = "Nyelv"; +$net2ftp_messages["Skin"] = "Felület"; +$net2ftp_messages["FTP mode"] = "FTP mód"; +$net2ftp_messages["Automatic"] = "Automatikus"; +$net2ftp_messages["Login"] = "Belépés"; +$net2ftp_messages["Clear cookies"] = "Sütik törlése"; +$net2ftp_messages["Admin"] = "Adminisztrátor"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Kérem adja meg a felhasználói nevét."; +$net2ftp_messages["Please enter a password."] = "Kérem adja meg a jelszót."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Kérem adja meg az Adminisztrátor felhasználói nevét és jelszavát."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Kérjük, adja meg felhasználónevét és jelszavát az FTP-kiszolgálóhoz %1\$s."; +$net2ftp_messages["Username"] = "Felhasználónév"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Mûveleti ideje lejárt, kérjük adja meg a jelszót az FTP-kiszolgáló %1\$s folytatásához."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Az Ön IP címe megváltozott; Kérjük, adja meg a jelszavát az FTP-kiszolgáló %1\$s folytatásához."; +$net2ftp_messages["Password"] = "Jelszó"; +$net2ftp_messages["Login"] = "Belépés"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Create new directories"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "The new directories will be created in %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Directory %1\$s was successfully created."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rename directories and files"; +$net2ftp_messages["Old name: "] = "Old name: "; +$net2ftp_messages["New name: "] = "New name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "The new name may not contain any dots. This entry was not renamed to %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s was successfully renamed to %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Arhív kinyerése %1\$s közül %2\$s az FTP szerveren"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload to directory:"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Files entered here will be transferred to the FTP server."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."; +$net2ftp_messages["Add another"] = "Add another"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +$net2ftp_messages["Choose a directory"] = "Válassza ki a könyvtárat"; +$net2ftp_messages["Please wait..."] = "Kérem várjon..."; +$net2ftp_messages["Uploading... please wait..."] = "Uploading... please wait..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "Close window now"; + +$net2ftp_messages["Upload files and archives"] = "Upload files and archives"; +$net2ftp_messages["Upload results"] = "Upload results"; +$net2ftp_messages["Checking files:"] = "Checking files:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transferring files to the FTP server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decompressing archives and transferring files to the FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Upload more files and archives"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "The maximum execution time is %1\$s seconds"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "If the destination file already exists, it will be overwritten"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Kép megtekintése %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Save the zip file on the FTP server as:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email the zip file in attachment to:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Some additional comments to add in the email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "You did not enter a filename for the zipfile. Go back and enter a filename."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/hu.inc.php b/ehcp/net2ftp/languages/hu.inc.php new file mode 100644 index 0000000..660bee4 --- /dev/null +++ b/ehcp/net2ftp/languages/hu.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "A knyvtr %1\$s nem ltezik, vagy nem lehet kivlasztani, ezrt a knyvtr %2\$s jelenik meg helyette."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "A gykr knyvtrban %1\$s nem ltezik, vagy nem lehet kivlasztani."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "A knyvtr %1\$s nem lehet kivlasztani - lehet, hogy nem rendelkezik megfelel jogokkal, hogy megtekinthesse ezt a knyvtrat, vagy nem is ltezik."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Bejegyzseket tartalmaz tiltott kulcsszavak nem lehet felhasznlsval net2ftp. Ennek clja, hogy elkerljk, vagy Ebay Paypal csalsok attl, hogy feltlttt keresztl net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Fjlok, amelyek tl nagy, nem lehet letlteni, feltlttt, msolhatk, mozgathatk, kereshet, tmrtett, cipzrat kinyitni, megtekintett vagy szerkesztett, csak akkor lehet tnevezni, chmodded vagy trlni."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Vgrehajtaja %1\$s egy j ablakban"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Krjk, vlasszon legalbb egy knyvtrat vagy fjl!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Az FTP szerver %1\$s nem szerepel a listn engedlyezett FTP szervereken."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Az FTP szerver %1\$s van a tilalmi listn szerepl FTP-szervereket."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Az FTP szerver portja %1\$s nem lehet felhasznlni."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Az n IP cme (%1\$s) nem szerepel a listn az engedlyezett IP-cmek."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Az n IP cme (%1\$s) van a tilalmi listn szerepl IP-cmek."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Tblzat tartalmazza net2ftp_users ismtld sorokban."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Nem adta meg a rendszergazda felhasznli nv vagy jelsz."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Nem vagy bejelentkezve. Krjk, prblja jra."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Nem sikerlt meghatrozni az IP cmet."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tblzat tartalmazza net2ftp_log_consumption_ipaddress ismtld sorokban."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tblzat tartalmazza net2ftp_log_consumption_ftpserver ismtld sorokban."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "A vltoz consumption_ipaddress_datatransfer nem szmrtk."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tblzat net2ftp_log_consumption_ipaddress nem lehet frissteni."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tblzat tartalmazza net2ftp_log_consumption_ipaddress ismtld bejegyzseket."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tblzat net2ftp_log_consumption_ftpserver nem lehet frissteni."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tkpes net2ftp_log_consumption_ftpserver ismtld bejegyzseket tartalmaz."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Tblzat net2ftp_log_access nem lehet frissteni."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Tblzat tartalmazza net2ftp_log_access ismtld bejegyzseket."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Nem sikerlt csatlakozni a MySQL adatbzishoz. Krjk, ellenrizze a MySQL adatbzis belltsait net2ftp konfigurcis fjl settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Nem vlaszthatja a MySQL adatbzisban. Krjk, ellenrizze a MySQL adatbzis belltsait net2ftp konfigurcis fjl settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Egy hiba lpett fel"; +$net2ftp_messages["Go back"] = "Menj vissza"; +$net2ftp_messages["Go to the login page"] = "Menjen a bejelentkez oldalra"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nem lehet kapcsoldni az FTP szerverre %1\$s a port %2\$s.

Biztos vagy benne, hogy ez a cm az FTP szerver? Ez gyakran eltr a HTTP (web) szervert. Krjk, lpjen kapcsolatba az ISP helpdesk vagy a rendszergazda segtsgt.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerlt bejelentkezni az FTP-kiszolgl %1\$s a felhasznlneveddel %2\$s.

Biztos vagy benne, hogy a felhasznlnv s jelsz helyes? Krjk, lpjen kapcsolatba az ISP helpdesk vagy a rendszergazda segtsgt.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Nem sikerlt vltani a passzv mdban az FTP szerveren %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerlt kapcsoldni a msodik (cl) FTP szerver %1\$s a port %2\$s.

Biztos vagy benne, hogy ez a cme a msodik (cl) FTP szerver? Ez gyakran eltr a HTTP (web) szervert. Krjk, lpjen kapcsolatba az ISP helpdesk vagy a rendszergazda segtsgt.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nem sikerlt bejelentkezni a msodik (cl) FTP szerver %1\$s a felhasznlneveddel %2\$s.

Biztos vagy benne, hogy a felhasznlnv s jelsz helyes? Krjk, lpjen kapcsolatba az ISP helpdesk vagy a rendszergazda segtsgt.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Nem sikerlt vltani a passzv mdban a msodik (cl) FTP szerver %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Nem sikerlt tnevezni knyvtr vagy fjl %1\$s ba %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Nem lehet vgrehajtani a parancsot site %1\$s. Ne feledje, hogy a chmod parancs csak Unix FTP szerverek, nem pedig a Windows FTP szervereken."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Knyvtr %1\$s sikeresen chmodded a %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Feldolgozs bejegyzsek bell knyvtrban %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Fjl %1\$s sikeresen chmodded, hogy %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Az sszes kivlasztott knyvtrak s fjlok kerltek feldolgozsra."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Nem sikerlt trlni a knyvtrat %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nem sikerlt trlni a fjlt%1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Nem sikerlt ltrehozni a knyvtrat %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Nem sikerlt ltrehozni az ideiglenes fjlt"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Nem sikerlt beolvasni a fjlt %1\$s Az FTP-kiszolgl, s mentse el az ideiglenes fjlt %2\$s.
Ellenrizze a jogosultsgait a %3\$s knyvtrat.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerlt megnyitni az ideiglenes fjlt. Ellenrizze a jogosultsgait a %1\$s knyvtrat."; +$net2ftp_messages["Unable to read the temporary file"] = "Nem sikerlt beolvasni az ideiglenes fjlt"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nem sikerlt bezrni a kilincset az ideiglenes fjl"; +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerlt trlni az ideiglenes fjlt"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerlt ltrehozni az ideiglenes fjlt. Ellenrizze a jogosultsgait a%1\$s knyvtrat."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nem sikerlt megnyitni az ideiglenes fjlt. Ellenrizze a jogosultsgait a %1\$s knyvtrat."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Nem lehet rni a hr az ideiglenes fjl %1\$s.
Ellenrizze a jogosultsgait a %2\$s knyvtrat."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nem sikerlt bezrni a kilincset az ideiglenes fjl"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Nem sikerlt tenni a fjlt %1\$saz FTP-kiszolglra.
Lehet, hogy nincs rsi jogosultsga a knyvtrban."; +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerlt trlni az ideiglenes fjlt"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Feldolgozs knyvtr %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "A cl knyvtr %1\$s megegyezik, vagy egy alknyvtr a forrs knyvtr%2\$s, gy ez a knyvtr kimarad"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "A knyvtr %1\$s tartalmaz egy tiltott kulcsszt, gy ez a knyvtr kimarad"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "A knyvtr %1\$s tartalmaz egy tiltott kulcsszt, megszaktva a lps"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Nem sikerlt ltrehozni a alknyvtrba %1\$s. Taln mr lteznek. Folytatva a msols / thelyezs folyamata..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created cl alknyvtr %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "A knyvtr %1\$s nem lehet kivlasztani, gy ez a knyvtr kimarad"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Nem sikerlt trlni a alknyvtrba %1\$s - ez nem lehet res"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Trlt alknyvtr %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Trlt alknyvtr %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Trlt alknyvtr %1\$s befejezve"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "A cl az, fjl %1\$s ugyanaz, mint a forrs, ezrt ez a fjl kihagysra"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "A fjl %1\$s tartalmaz egy tiltott kulcsszt, gy ez a fjl kihagysra"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "A fjl %1\$s tartalmaz egy tiltott kulcsszt, megszaktva a lps"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "A fjl %1\$s tl nagy ahhoz, hogy msolhat, gy ez a fjl kihagysra"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "A fjl %1\$s tl nagy ahhoz, hogy mozgatni, megszaktva a lps"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Nem lehet msolni a fjlt %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Msolhatk fjlt %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Nem sikerlt thelyezni a fjlt %1\$s, megszaktva a lps"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "thelyzett fjl %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nem sikerlt trlni a fjlt%1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Trlt fjl %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Az sszes kivlasztott knyvtrak s fjlok kerltek feldolgozsra."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Nem lehet msolni a tvoli fjl %1\$s a helyi fjl FTP-mdban %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Nem sikerlt trlni a fjlt %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "A fjl tl nagy ahhoz, hogy t"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Napi Elrte: a fjl %1\$s nem kerlnek t"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Nem lehet msolni a helyi fjlt a tvoli fjl %1\$s az FTP md %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Nem sikerlt trlni a helyi fjl"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Nem sikerlt trlni az ideiglenes fjlt"; +$net2ftp_messages["Unable to send the file to the browser"] = "Nem sikerlt elkldeni a fjlt a bngsz"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Nem sikerlt ltrehozni az ideiglenes fjlt"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "A zip fjl mentett az FTP szerverre %1\$s"; +$net2ftp_messages["Requested files"] = "Krt fjlok"; + +$net2ftp_messages["Dear,"] = "Kedves,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Valaki azt krte a csatolt fjlokat kldeni az e-mail fik (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Ha nem tudsz semmit errl, vagy ha nem bzol a szemly, trlje az e-mail megnyitsa nlkl a zip fjlt mellkletknt."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Ne feledjk, hogy ha nem tudja megnyitni a zip fjlt, a fjlok belsejben ne krostsa a szmtgpet."; +$net2ftp_messages["Information about the sender: "] = "Informci a feladnak: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Klds idpontja: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Keresztl kldtt net2ftp alkalmazs teleptve van ezen a honlapon: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster e-mail cme: "; +$net2ftp_messages["Message of the sender: "] = "zenet a feladnak: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp szabad szoftver, megjelent a GNU / GPL licensz rvnyes. Tovbbi informcikrt ltogasson el ahttp://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "A zip fjl nem rkezett %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Fjl %1\$s tl nagy. Ez a fjl nem lesz feltltve."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Fjl %1\$s nem tartalmaz egy tiltott kulcsszt. Ez a fjl nem lesz feltltve."; +$net2ftp_messages["Could not generate a temporary file."] = "Nem sikerlt ltrehozni egy ideiglenes fjlt."; +$net2ftp_messages["File %1\$s could not be moved"] = "Fjl %1\$s volna nem lehet mozgatni"; +$net2ftp_messages["File %1\$s is OK"] = "Fjl %1\$s rendben van"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Nem tud mozogni a feltlttt fjlt a Temp knyvtrba.

A rendszergazda ezen a honlapon, hogy chmod 777 a / temp cmjegyzke net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "n nem adott ki a feltltend fjlt."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Fjl %1\$s nem lehetett t az FTP szerver"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Fjl %1\$s tkerlt az FTP szerver az FTP md %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Fjlok tvitele az FTP szerverre"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Feldolgozs archvum nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Arhv %1\$s nem volt feldolgozni, mert a fjl kiterjesztse nem volt ismert. Csak a zip, tar, tgz, s gz archvum tmogatott abban a pillanatban."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Kptelen-hoz kivonat a fjlokat s knyvtrakat az archvumbl"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archvum fjlnevek a ../ vagy ..\\ - megszaktva a kitermelsi"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Knyvtr ltrehozsa %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Nem sikerlt ltrehozni a knyvtrat %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Msolhatk fjlt %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Nem lehet msolni file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Nem sikerlt trlni az ideiglenes knyvtr"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Nem sikerlt trlni az ideiglenes fjlt %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Nem lehet vgrehajtani a parancsot site %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Az n feladata az volt, abbahagyta"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "A feladat akartl vgrehajthat net2ftp tbb idt, mint a megengedett %1\$s msodperc, s ennek feladata az volt, hogy megllt."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Ez a hatrid garantlja a tisztessges felhasznlsa a webszerver mindenki szmra."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Prblja meg osztott a feladatot kisebb feladatok: korltozzk a kijellt fjlok, s ki lehet hagyni a legnagyobb fjl."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Ha tnyleg szksg van net2ftp, hogy kpes legyen kezelni a nagy feladatokat, amelyek hossz idt vesz ignybe, helyezzen zembe net2ftp sajt szerveren."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "n nem adott szveget kldeni e-mailben!"; +$net2ftp_messages["You did not supply a From address."] = "n nem a szolgltats Felad cm."; +$net2ftp_messages["You did not supply a To address."] = "Te nem a szolgltats foglalkozzanak."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Mszaki problmk miatt az e-mail %1\$s nem lehet elkldeni."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Nem lehet vgrehajtani az SQL lekrdezst."; +$net2ftp_messages["Unable to open the system log."] = "Nem sikerlt megnyitni a rendszer naplt."; +$net2ftp_messages["Unable to write a message to the system log."] = "Nem lehet rni egy zenetet a rendszer naplt."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Krjk, adja meg felhasznlnevt s jelszavt az FTP-kiszolgl "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "n nem adja meg a szemlyes bejelentkezsi adatait a felugr ablakban.
Kattintson \"Menjen a bejelentkez oldalra\"lent."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Hozzfrs a net2ftp Admin panel le van tiltva, mert nincs jelsz llaptottak meg a fjlban settings.inc.php. rja be a jelszt az adott fjlt, s jra tlteni az oldalt."; +$net2ftp_messages["Please enter your Admin username and password"] = "Krjk, adja meg az Adminisztrtor felhasznlnevt s jelszavt "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "n nem adja meg a szemlyes bejelentkezsi adatait a felugr ablakban.
Kattintson \"Menjen a bejelentkez oldalra\"lent."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Hibs a felhasznl nv, vagy jelsz a net2ftp Admin panel. A felhasznlnv s a jelsz lehet belltani a fjl settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Kk"; +$net2ftp_messages["Grey"] = "Szrke"; +$net2ftp_messages["Black"] = "Feket"; +$net2ftp_messages["Yellow"] = "Srga"; +$net2ftp_messages["Pastel"] = "Pasztell"; + +// getMime() +$net2ftp_messages["Directory"] = "Knyvtr"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML fjl"; +$net2ftp_messages["Java source file"] = "Java forrsfjl"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Szveges fjl"; +$net2ftp_messages["Bitmap file"] = "Bitmap fjl"; +$net2ftp_messages["GIF file"] = "GIF fjl"; +$net2ftp_messages["JPEG file"] = "JPEG fjl"; +$net2ftp_messages["PNG file"] = "PNG fjl"; +$net2ftp_messages["TIF file"] = "TIF fjl"; +$net2ftp_messages["GIMP file"] = "GIMP fjl"; +$net2ftp_messages["Executable"] = "Kivihet"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word dokumentum"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel tblzat"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint prezentci"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access adatbzis"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio rajz"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project fjl"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 dokumentum"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 sablon"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 tblzat"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 sablon"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 dokumentum"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 sablon"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 prezentci"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 sablon"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 nemzetkzi dokumentum"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 dokumentum"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x dokumentum"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x nemzetkzi dokumentum"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x tblzat"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x nemzetkzi dokumentum"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x prezentci"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x fjl"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x nemzetkzi dokumentum"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x nemzetkzi dokumentum"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x e-mail fjl"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat dokumentum"; +$net2ftp_messages["ARC archive"] = "ARC archvuma"; +$net2ftp_messages["ARJ archive"] = "ARJ archvuma"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archvuma"; +$net2ftp_messages["TAR archive"] = "TAR archvuma"; +$net2ftp_messages["Zip archive"] = "Zip archvuma"; +$net2ftp_messages["MOV movie file"] = "MOV filmfjlt"; +$net2ftp_messages["MPEG movie file"] = "MPEG filmfjlt"; +$net2ftp_messages["Real movie file"] = "Real filmfjlt"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime filmfjlt"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash fjl"; +$net2ftp_messages["Shockwave file"] = "Shockwave fjl"; +$net2ftp_messages["WAV sound file"] = "WAV hangfjlra"; +$net2ftp_messages["Font file"] = "Font fjl"; +$net2ftp_messages["%1\$s File"] = "%1\$s Fjl"; +$net2ftp_messages["File"] = "Fjl"; + +// getAction() +$net2ftp_messages["Back"] = "Vissza"; +$net2ftp_messages["Submit"] = "Tovbb"; +$net2ftp_messages["Refresh"] = "Frissts"; +$net2ftp_messages["Details"] = "Rszletek"; +$net2ftp_messages["Icons"] = "Ikonok"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Kilps"; +$net2ftp_messages["Help"] = "Sg"; +$net2ftp_messages["Bookmark"] = "Knyvjelz"; +$net2ftp_messages["Save"] = "Ments"; +$net2ftp_messages["Default"] = "Alaprtelmezett"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Segtsg tmutat "; +$net2ftp_messages["Forums"] = "Frumok"; +$net2ftp_messages["License"] = "Engedly"; +$net2ftp_messages["Powered by"] = "Ksztett"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "n most mr bevittk a net2ftp frumokon. E frumok szmra net2ftp kapcsolatos tmk csak - nem a generikus webhosting krdsek."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkcik"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Verzi informci"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Ez a vltozat a net2ftp napraksz."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Ez a vltozat a net2ftp is up-to-date."; +$net2ftp_messages["Logging"] = "Naplzs"; +$net2ftp_messages["Date from:"] = "Idpontot:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "res naplk"; +$net2ftp_messages["View logs"] = "Naplk megtekintse"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tblk"; +$net2ftp_messages["Create the MySQL database tables"] = "Ltre a MySQL adatbzis-tblk"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkcik"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "A fjl megfogva %1\$s nem lehet megnyitni."; +$net2ftp_messages["The file %1\$s could not be opened."] = "A fjl %1\$s nem lehet megnyitni."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "A fjl megfogva %1\$s nem lehet bezrni."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "A kapcsolat a kiszolglval %1\$s nem lehetett ltrehozni. Krjk, ellenrizze az adatbzis belltsokat lpett."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Nem vlaszthatja az adatbzis %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "Az SQL lekrdezs nr %1\$s is nem hajthat vgre."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "Az SQL lekrdezsnr %1\$s hajtottk vgre sikeresen."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Krjk, adja meg a MySQL belltsok:"; +$net2ftp_messages["MySQL username"] = "MySQL felhasznlnevt"; +$net2ftp_messages["MySQL password"] = "MySQL jelszavt"; +$net2ftp_messages["MySQL database"] = "MySQL adatbzis"; +$net2ftp_messages["MySQL server"] = "MySQL szerver"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Ez az SQL-lekrdezs lesz vgre:"; +$net2ftp_messages["Execute"] = "Vgrehajt"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Belltsok:"; +$net2ftp_messages["MySQL password length"] = "A MySQL jelsz hossza"; +$net2ftp_messages["Results:"] = "Eredmny:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkcik"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Nem lehet vgrehajtani az SQL lekrdezst %1\$s."; +$net2ftp_messages["No data"] = "Nincs adat"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funkcik"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "A tblzat %1\$s kirlt sikeresen."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "A tblzat %1\$s nem kell rteni."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "A tblzat %1\$s sikeres volt optimalizlva."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "A tblzat %1\$s nem lehetne optimalizlni."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Halad funkcik"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Tiltva"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP fggvnyek"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Kldjn tetszleges FTP-parancsok az FTP-kiszolgl"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Ez a funkci csak a PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "Hibaelhrtsi feladatok"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Elhrtsa net2ftp ezen a webszerveren"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Elhrtsa az FTP szerver"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Prblja ki a net2ftp lista parsing szablyok"; +$net2ftp_messages["Translation functions"] = "Fordtsi feladatok"; +$net2ftp_messages["Introduction to the translation functions"] = "Bevezets a fordtsi feladatok"; +$net2ftp_messages["Extract messages to translate from code files"] = "Kivonat zenetek lefordtani a kdot kp"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Ellenrizze, hogy vannak j zenetek vagy elavult"; + +$net2ftp_messages["Beta functions"] = "Bta funkcik"; +$net2ftp_messages["Send a site command to the FTP server"] = "Kldje el egy webhely parancsot az FTP szerver"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: jelszval vdeni egy knyvtrat, hozzon ltre egyni lapokat"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: kivgez egy SQL lekrdezs"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "A weboldal irnyt funkcik nem llnak rendelkezsre ezen a webszerveren."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Az Apache funkcik nem rhetk el ezen a webszerveren."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "A MySQL fggvnyek nem rhetk el ezen a webszerveren."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Vratlan state2 string. Kilpett."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Elhrtsa az FTP szerver"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Kapcsolat belltsai:"; +$net2ftp_messages["FTP server"] = "FTP szerver"; +$net2ftp_messages["FTP server port"] = "FTP szerver port"; +$net2ftp_messages["Username"] = "Felhasznlnv"; +$net2ftp_messages["Password"] = "Jelsz"; +$net2ftp_messages["Password length"] = "Jelsz hossza"; +$net2ftp_messages["Passive mode"] = "Passzv md"; +$net2ftp_messages["Directory"] = "Knyvtr"; +$net2ftp_messages["Printing the result"] = "Nyomtats eredmnye"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Kapcsolds az FTP szerver: "; +$net2ftp_messages["Logging into the FTP server: "] = "Bejelentkezik az FTP szerver: "; +$net2ftp_messages["Setting the passive mode: "] = "A passzv md belltsa: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Megismeri az FTP-kiszolgl rendszer tpust: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Megvltoztatsa a knyvtr %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "A knyvtrat az FTP szerver: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Hogyan lehet a nyers listja knyvtrakat s fjlokat: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Kiprbls msodik alkalommal kap a nyers listt knyvtrakat s fjlokat: "; +$net2ftp_messages["Closing the connection: "] = "A kapcsolat bezrsa: "; +$net2ftp_messages["Raw list of directories and files:"] = "Nyers listja knyvtrakat s fjlokat:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed listja knyvtrakat s fjlokat:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "nem OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Prblja ki a net2ftp lista parsing szablyok"; +$net2ftp_messages["Sample input"] = "Minta bemenet"; +$net2ftp_messages["Parsed output"] = "tvizsglt bemenet"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Elhrtsa a telept net2ftp"; +$net2ftp_messages["Printing the result"] = "Nyomtats eredmnye"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Ellenrzse, ha az FTP modul a PHP teleptst: "; +$net2ftp_messages["yes"] = "igen"; +$net2ftp_messages["no - please install it!"] = "nem - Krjk, teleptse azt!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Ellenrzi a jogosultsgait a knyvtrat a webszerveren: egy kis fjlt kell rni a / temp mappt, majd el kell hagyni."; +$net2ftp_messages["Creating filename: "] = "Fjlnv ltrehozsa: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Fjlneve: %1\$s"; +$net2ftp_messages["not OK"] = "nem OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "nem OK. Ellenrizze a jogosultsgait a %1\$s knyvtrat"; +$net2ftp_messages["Opening the file in write mode: "] = "A fjl rsra hasznlni: "; +$net2ftp_messages["Writing some text to the file: "] = "rs nhny szveget a fjlba: "; +$net2ftp_messages["Closing the file: "] = "A fjl bezrsa: "; +$net2ftp_messages["Deleting the file: "] = "Trli a fjlt: "; + +$net2ftp_messages["Testing the FTP functions"] = "Tesztels az FTP fggvnyek"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Csatlakozs teszt FTP szerver: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Kapcsolds az FTP szerver: "; +$net2ftp_messages["Logging into the FTP server: "] = "Bejelentkezik az FTP szerver: "; +$net2ftp_messages["Setting the passive mode: "] = "A passzv md belltsa: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Megismeri az FTP-kiszolgl rendszer tpust: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Megvltoztatsa a knyvtr %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "A knyvtrat az FTP szerver: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Hogyan lehet a nyers listja knyvtrakat s fjlokat: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Kiprbls msodik alkalommal kap a nyers listt knyvtrakat s fjlokat: "; +$net2ftp_messages["Closing the connection: "] = "A kapcsolat bezrsa: "; +$net2ftp_messages["Raw list of directories and files:"] = "Nyers listja knyvtrakat s fjlokat:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed listja knyvtrakat s fjlokat:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "nem OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Megjegyzs:: mikor fogja hasznlni ezt a knyvjelzt, egy felugr ablak fogja krni a felhasznlnevt s jelszavt."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Vlassza ki a knyvtrat"; +$net2ftp_messages["Please wait..."] = "Krem vrjon..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Knyvtrak neveit tartalmaz \' nem jelenthet meg helyesen. Csak akkor lehet hagyni. Krjk, lpjen vissza s vlasszon msik alknyvtr."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Napi Elrte: nem lesz kpes adattvitelre"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Annak rdekben, hogy biztostsa a tisztessges felhasznlsa a webszerver mindenki szmra, az adattvitel volumene s szkript vgrehajtsi idejt korltozzk egy felhasznl, vagy naponta. Amint elrik a limitet, akkor is bngszni az FTP szerver, de nem adja t az adatokat / tle."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Ha szksg van korltlan hasznlata, krjk teleptse net2ftp sajt webszerveren."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "j knyvtr"; +$net2ftp_messages["New file"] = "j fjl"; +$net2ftp_messages["HTML templates"] = "HTML sablon"; +$net2ftp_messages["Upload"] = "Feltlts"; +$net2ftp_messages["Java Upload"] = "Java feltlts"; +$net2ftp_messages["Flash Upload"] = "Flash feltlts"; +$net2ftp_messages["Install"] = "Installci"; +$net2ftp_messages["Advanced"] = "Specilis"; +$net2ftp_messages["Copy"] = "Msol"; +$net2ftp_messages["Move"] = "Mozgat"; +$net2ftp_messages["Delete"] = "Trls"; +$net2ftp_messages["Rename"] = "tnevezs"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Letlts"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Mret"; +$net2ftp_messages["Search"] = "Keress"; +$net2ftp_messages["Go to the parent directory"] = "Menj a szl knyvtr"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Transform kivlasztott bejegyzsek: "; +$net2ftp_messages["Transform selected entry: "] = "Transform kijellt bejegyzst: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Kszts egy j alknyvtr a knyvtrban %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Hozzon ltre egy j fjlt a knyvtrban %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Hozzon ltre egy weboldal segtsgvel knnyen ksz sablonok"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Feltlts j fjlokat a knyvtrban %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload knyvtrakat s fjlokat hasznl Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Feltlteni fjlokat Flash kisalkalmazs"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Teleptshez szoftvercsomagok (requires PHP webszerver)"; +$net2ftp_messages["Go to the advanced functions"] = "Menj a specilis funkcikat"; +$net2ftp_messages["Copy the selected entries"] = "A kijellt ttelek msolsa"; +$net2ftp_messages["Move the selected entries"] = "A kijellt ttelek mozgatsa"; +$net2ftp_messages["Delete the selected entries"] = "A kijellt ttelek trlse"; +$net2ftp_messages["Rename the selected entries"] = "A kijellt ttelek tnevezse"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod a kivlasztott pont (csak akkor mkdik, Unix / Linux / BSD szerverek)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Le egy zip fjl tartalmazza az sszes kivlasztott pont"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip a kivlasztott archvumokat az FTP szerveren"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip a kivlasztott pont menteni, vagy elkldheti e-mailben"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Ki kell szmtani a mrete a kivlasztott pont"; +$net2ftp_messages["Find files which contain a particular word"] = "Keresse meg a fjlokat, amelyek tartalmazzk az adott szt"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Kattintson ide a rendezshez %1\$s a cskken sorrendben"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Kattintson ide a rendezshez %1\$s a nvekv sorrendben"; +$net2ftp_messages["Ascending order"] = "Nvekv sorrendben"; +$net2ftp_messages["Descending order"] = "Cskken sorrendben"; +$net2ftp_messages["Upload files"] = "Feltlt fjlokat"; +$net2ftp_messages["Up"] = "Fel"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Jellje be vagy trlje az sszes sorok"; +$net2ftp_messages["All"] = "sszes"; +$net2ftp_messages["Name"] = "Nv"; +$net2ftp_messages["Type"] = "Tpus"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Tulajdonos"; +$net2ftp_messages["Group"] = "Csoport"; +$net2ftp_messages["Perms"] = "Perms"; +$net2ftp_messages["Mod Time"] = "Md. id"; +$net2ftp_messages["Actions"] = "Akci"; +$net2ftp_messages["Select the directory %1\$s"] = "Vlassza ki a knyvtrat %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Vlassza ki a fjlt %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Vlassza ki a symlink - %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Menj a alknyvtrba %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "A fjl letltshez %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Symlinket kvesse %1\$s"; +$net2ftp_messages["View"] = "Nzet"; +$net2ftp_messages["Edit"] = "Szerkeszt"; +$net2ftp_messages["Update"] = "Frissts"; +$net2ftp_messages["Open"] = "Megnyits"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Tekintse meg a kijellt fjl forrskdjt %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Szerkessze a forrskd fjl %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "A fjl jabb verzijt a fjl %1\$s s egyestse a vltozsok"; +$net2ftp_messages["View image %1\$s"] = "Kp megtekintse %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Nzzem meg, hogy a fjl %1\$s az n HTTP webszervern van"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Megjegyzs: Ez a kapcsolat nem mkdik, ha n nem rendelkezik sajt domain nv.)"; +$net2ftp_messages["This folder is empty"] = "Ez a mappa res"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Directories"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Unrecognized FTP output"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Mret"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Nyelv:"; +$net2ftp_messages["Skin:"] = "Fellet:"; +$net2ftp_messages["View mode:"] = "Nzetmd:"; +$net2ftp_messages["Directory Tree"] = "Knyvtrfa"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Vgrehajtaja %1\$s egy j ablakban"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Kattintson dupln az alknyvtrba lpshez:"; +$net2ftp_messages["Choose"] = "Vlaszts"; +$net2ftp_messages["Up"] = "Fel"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Size of selected directories and files"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "The total size taken by the selected directories and files is:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod knyvtrak s fjlok"; +$net2ftp_messages["Set all permissions"] = "Minden engedly belltsa"; +$net2ftp_messages["Read"] = "Olvass"; +$net2ftp_messages["Write"] = "rs"; +$net2ftp_messages["Execute"] = "Vgrehajt"; +$net2ftp_messages["Owner"] = "Tulajdonos"; +$net2ftp_messages["Group"] = "Csoport"; +$net2ftp_messages["Everyone"] = "Mindenki"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "A minden engedly belltsa rvnyestshez rja be a fent emltett engedlyeket s kattintson a gombra \"Minden engedly belltsa\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Set the permissions of directory %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Set the permissions of file %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Set the permissions of symlink %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Chmod rtk"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod also the subdirectories within this directory"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod also the files within this directory"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Vlassza ki a knyvtrat"; +$net2ftp_messages["Copy directories and files"] = "Copy directories and files"; +$net2ftp_messages["Move directories and files"] = "Move directories and files"; +$net2ftp_messages["Delete directories and files"] = "Delete directories and files"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Are you sure you want to delete these directories and files?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "All the subdirectories and files of the selected directories will also be deleted!"; +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Different target FTP server:"] = "Different target FTP server:"; +$net2ftp_messages["Username"] = "Felhasznlnv"; +$net2ftp_messages["Password"] = "Jelsz"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Leave empty if you want to copy the files to the same FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "If you want to copy the files to another FTP server, enter your login data."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Leave empty if you want to move the files to the same FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "If you want to move the files to another FTP server, enter your login data."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copy directory %1\$s to:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Move directory %1\$s to:"; +$net2ftp_messages["Directory %1\$s"] = "Directory %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copy file %1\$s to:"; +$net2ftp_messages["Move file %1\$s to:"] = "Move file %1\$s to:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s to:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s to:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Target name:"] = "Target name:"; +$net2ftp_messages["Processing the entries:"] = "Processing the entries:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Installci"; +$net2ftp_messages["Size"] = "Mret"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: jobb gombbal a hivatkozsra, s vlassza a \"Add a kedvencekhez...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Linket adja a Knyvjelzhz ...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created cl alknyvtr %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Msolhatk fjlt %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: This file has not yet been saved"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Saved on %1\$s using mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: This file could not be saved"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Directory: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "New file name: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Search for a word or phrase"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Restrict the search to:"; +$net2ftp_messages["files with a filename like"] = "files with a filename like"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard character is *)"; +$net2ftp_messages["files with a size"] = "files with a size"; +$net2ftp_messages["files which were last modified"] = "files which were last modified"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "Knyvtr"; +$net2ftp_messages["File"] = "Fjl"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Nzet"; +$net2ftp_messages["Edit"] = "Szerkeszt"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Tekintse meg a kijellt fjl forrskdjt %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Szerkessze a forrskd fjl %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload knyvtrakat s fjlokat hasznl Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Miutn bejelentkezett, n kpes lesz:"; +$net2ftp_messages["Navigate the FTP server"] = "Naviglni az FTP szerveren"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Ha mr bejelentkezett, akkor bngszhetnk a knyvtrbl knyvtrba, s ltni az alknyvtrakat s fjlokat."; +$net2ftp_messages["Upload files"] = "Feltlt fjlokat"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Jelenleg 3 klnbz mdon lehet feltlteni fjlokat: a szabvnyos feltltsi rlapon, a feltlts-s unzip funkci, s a Java kisalkalmazssal."; +$net2ftp_messages["Download files"] = "Fjlok letltse"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Kattintson egy fjlnevvre gyorsan letlt egy fjlt.
Vlasszon ki tbb fjlt, s kattintson a Downloadra, a kivlasztott fjlok letltst a zip archvumban."; +$net2ftp_messages["Zip files"] = "Zip fjlok"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP szerver"; +$net2ftp_messages["Example"] = "Plda"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Felhasznlnv"; +$net2ftp_messages["Password"] = "Jelsz"; +$net2ftp_messages["Anonymous"] = "Nvtelen"; +$net2ftp_messages["Passive mode"] = "Passzv md"; +$net2ftp_messages["Initial directory"] = "Kezd knyvtr"; +$net2ftp_messages["Language"] = "Nyelv"; +$net2ftp_messages["Skin"] = "Fellet"; +$net2ftp_messages["FTP mode"] = "FTP md"; +$net2ftp_messages["Automatic"] = "Automatikus"; +$net2ftp_messages["Login"] = "Belps"; +$net2ftp_messages["Clear cookies"] = "Stik trlse"; +$net2ftp_messages["Admin"] = "Adminisztrtor"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Krem adja meg a felhasznli nevt."; +$net2ftp_messages["Please enter a password."] = "Krem adja meg a jelszt."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Krem adja meg az Adminisztrtor felhasznli nevt s jelszavt."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Krjk, adja meg felhasznlnevt s jelszavt az FTP-kiszolglhoz %1\$s."; +$net2ftp_messages["Username"] = "Felhasznlnv"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Mveleti ideje lejrt, krjk adja meg a jelszt az FTP-kiszolgl %1\$s folytatshoz."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Az n IP cme megvltozott; Krjk, adja meg a jelszavt az FTP-kiszolgl %1\$s folytatshoz."; +$net2ftp_messages["Password"] = "Jelsz"; +$net2ftp_messages["Login"] = "Belps"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Create new directories"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "The new directories will be created in %1\$s."; +$net2ftp_messages["New directory name:"] = "New directory name:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Directory %1\$s was successfully created."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rename directories and files"; +$net2ftp_messages["Old name: "] = "Old name: "; +$net2ftp_messages["New name: "] = "New name: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "The new name may not contain any dots. This entry was not renamed to %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s was successfully renamed to %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Arhv kinyerse %1\$s kzl %2\$s az FTP szerveren"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Set all targetdirectories"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Note: the target directory must already exist before anything can be copied into it."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Target directory:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload to directory:"; +$net2ftp_messages["Files"] = "Files"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Files entered here will be transferred to the FTP server."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."; +$net2ftp_messages["Add another"] = "Add another"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use folder names (creates subdirectories automatically)"; + +$net2ftp_messages["Choose a directory"] = "Vlassza ki a knyvtrat"; +$net2ftp_messages["Please wait..."] = "Krem vrjon..."; +$net2ftp_messages["Uploading... please wait..."] = "Uploading... please wait..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "Close window now"; + +$net2ftp_messages["Upload files and archives"] = "Upload files and archives"; +$net2ftp_messages["Upload results"] = "Upload results"; +$net2ftp_messages["Checking files:"] = "Checking files:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transferring files to the FTP server:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decompressing archives and transferring files to the FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Upload more files and archives"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrictions:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "The maximum execution time is %1\$s seconds"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "If the destination file already exists, it will be overwritten"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Kp megtekintse %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Save the zip file on the FTP server as:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email the zip file in attachment to:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Some additional comments to add in the email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "You did not enter a filename for the zipfile. Go back and enter a filename."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/it.inc.php b/ehcp/net2ftp/languages/it.inc.php new file mode 100644 index 0000000..01bbd19 --- /dev/null +++ b/ehcp/net2ftp/languages/it.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Esegui %1\$s in una nuova finestra"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Per favore seleziona almeno una cartella o file!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Il server FTP %1\$s non e´ nell´elenco dei server FTP permessi."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Il server FTP %1\$s e´ nell´elenco dei server FTP proibiti."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "La porta %1\$s del server FTP non puo´ essere usata."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Il tuo indirizzo IP (%1\$s) e´ nell´elenco degli indirizzi IP banditi."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Non riesco a determinare il tuo indirizzo IP."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "La tabella net2ftp_log_consumption_ipaddress contiene una riga doppia."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "La tabella net2ftp_log_consumption_ftpserver contiene una riga doppia."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "La variabile consumption_ipaddress_datatransfer non numerica."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "La tabella net2ftp_log_consumption_ipaddress non puo´ essere aggiornata."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "La tabella net2ftp_log_consumption_ipaddress contiene dati doppi."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "La tabella net2ftp_log_consumption_ftpserver non puo´ essere aggiornata."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "La tabella net2ftp_log_consumption_ftpserver contiente dati doppi."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Si e´ verificato un errore"; +$net2ftp_messages["Go back"] = "Torna indietro"; +$net2ftp_messages["Go to the login page"] = "Torna alla pagina di accesso"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Non e´ possibile connettersi al server FTP %1\$s sulla porta %2\$s.

Sei sicuro che questo sia l´indirizzo del server FTP? Spesso tale indirizzo e´ diverso da quello del server web HTTP. Per favore contatta il tuo provider ISP o l´amministratore di sistema per aiuto.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Non e´ possibile effettuare l´accesso al server FTP %1\$s con username %2\$s.

Sei sicuro che il tuo username e la password sono corrette? Per favore contatta il tuo provider ISP o l´amministratore di sistema per aiuto.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Non e´ possibile passare in modalita´ -passive mode- sul server FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Non e´ possibile connettersi al server FTP di destinazione %1\$s sulla porta %2\$s.

Sei sicuro che dell´indirizzo del server FTP di destinazione? Spesso tale indirizzo e´ diverso da quello del server web HTTP. Per favore contatta il tuo provider ISP o l´amministratore di sistema per aiuto.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Non e´ possibile effettuare l´accesso al server FTP di destinazione %1\$s con username %2\$s.

Sei sicuro che il tuo username e la password sono corrette? Per favore contatta il tuo provider ISP o l´amministratore di sistema per aiuto.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Non e´ possibile passare in modalita´ passive mode sul server FTP di destinazione %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Non e´ possibile rinominare la cartella o il file %1\$s in %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Non e´ possibile i comandi del sito %1\$s. Nota che il comando CHMOD e´ disponibile solo su server FTP Unix/Linux, non su server FTP Windows."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "E´ stato eseguito con successo un CHMOD %2\$s sulla cartella %1\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "E´ stato eseguito con successo un CHMOD %2\$s sul file %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "I file e le cartelle selezionati sono stati elaborati."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Non e´ possibile eliminare la cartella %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Non e´ possibile eliminare il file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Non e´ possibile creare la cartella %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Non e´ possibile creare il file temporaneo"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Non e´ possibile ottenere il file %1\$s dal server FTP e salvarlo come file temporaneo %2\$s.
Controlla i permessi della cartella %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Non e´ possibile aprire il file temporaneo. Controlla i permessi della cartella %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Non e´ possibile leggere i file temporanei"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Non e´ possibile chiudere il file temporaneo"; +$net2ftp_messages["Unable to delete the temporary file"] = "Non e´ possibile eliminare il file temporaneo"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Non e´ possibile creare il file temporaneo. Controlla i permessi della cartella %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Non e´ possibile aprire il file temporaneo. Controlla i permessi della cartella %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Non e´ possibile ascrivere la stringa nel file temporaneo %1\$s.
Controlla i permessi della cartella %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Non e´ possibile chiudere il file temporaneo"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Non e´ possibile inserire il file %1\$s sul server FTP.
Forse non hai permessi in scrittura su quella cartella."; +$net2ftp_messages["Unable to delete the temporary file"] = "Non e´ possibile eliminare il file temporaneo"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Sto elaborando la cartella%1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "La cartella di destinazione %1\$s e´ identica o e´ una sotto-cartella della cartella di origine %2\$s, quindi questa cartella verra´ saltata"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Non e´ possibile creare la sotto-cartella %1\$s. Forse esiste gia´. Continuo l´esecuzione di copia/spostamento..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Non e´ possibile eliminare la sotto-cartella %1\$s - forse non e´ vuota"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "E´ stata eliminata la sotto-cartella %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "E´ stata eliminata la sotto-cartella %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Completata l´analisi della cartella %1\$s"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "La destinazione per il file %1\$s e´ identica all´origine, quindi questo file verra´ saltato"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Non e´ possibile copiare il file %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Spostato il file %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Non e´ possibile eliminare il file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "E´ stato eliminato il file %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "I file e le cartelle selezionati sono stati elaborati."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Non e´ possibile copiare il file remoto %1\$s in un file locale usando la modalita´ FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Non e´ possibile eliminare il file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Limite giornaliero raggiunto: il file %1\$s non sara´ trasferito"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Non e´ possibile copiare il file locale nel file remoto %1\$s usando la modalita´ FTP %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Non riesco a eliminare il file locale"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Non e´ possibile eliminare il file temporaneo"; +$net2ftp_messages["Unable to send the file to the browser"] = "Non e´ possibile inviare il file al browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Non e´ possibile creare il file temporaneo"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Il file zip e´ stato salvato sul server FTP come %1\$s"; +$net2ftp_messages["Requested files"] = "Files richiesti"; + +$net2ftp_messages["Dear,"] = "Gentile,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Qualcuno ha pensato che i file allegati a questo messaggio siano mandati al suo account e-mail (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Se non sai nulla di cio´ o non ti fidi di questa persona, per favore elimina questa e-mail senza aprire il file zip in allegato."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Nota che se non apri il file zip, i files al suo interno non possono danneggiare il tuo computer."; +$net2ftp_messages["Information about the sender: "] = "Informationi sul mittente: "; +$net2ftp_messages["IP address: "] = "Indirizzo IP: "; +$net2ftp_messages["Time of sending: "] = "Ora dell´invio: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Inviato tramite il programma net2ftp installato sul sito web: "; +$net2ftp_messages["Webmaster's email: "] = "Email del webmaster: "; +$net2ftp_messages["Message of the sender: "] = "Messaggio dal mittente: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp e´ software gratuito, rilasciato sotto la licenza GNU/GPL. Per ulteriori informazioni, vai al sito http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Il file zip e´ stato inviato a %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Il file %1\$s e´ troppo grande. Questo file non sara´ caricato sul sito."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Non e´ possibile generare un file temporaneo."; +$net2ftp_messages["File %1\$s could not be moved"] = "Il file %1\$s non puo´ esser spostato"; +$net2ftp_messages["File %1\$s is OK"] = "Il file %1\$s e´ OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Non e´ possibile spostare nella cartella temporanea il file caricato.

L´amministratore di questo sito web deve cambiare il permesso della cartella /temp di net2ftp con chmod 777."; +$net2ftp_messages["You did not provide any file to upload."] = "Non hai specificato nessun file da caricare."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Il file %1\$s non puo´ esser trasferito al server FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Il file %1\$s e´ stato trasferito al server FTP usando la modalita´ FTP %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Trasferimento dei file verso il server FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Sto elaborando l´archivio numero %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "L´archivio %1\$s non e´ stato elaborato perche´ la sua estensione di filename non e´ stata riconosciuta. Al momento sono supportati solo archivio zip, tar, tgz e gz."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Non e´ possibile eseguire il comando del sito %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "La tua richiesta e´ stata annullata"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Il compito che hai chiesto di fare con net2ftp richiede piu´ tempo dei %1\$s secondi permessi, e quindi la tua richiesta e´ stata fermata."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Questo limite sul tempo di esecuzione garantisce un uso corretto del server web per tutti."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Cerca di dividere il tuo compito in passi piu´ piccoli: restringi la tua selezione di files ed ometti i files piu´ grandi."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Se davvero hai bisogno di net2ftp per risolvere compiti che richiedono un lungo tempo, condiera la possibilita´ di installare net2ftp sul tuo server personale."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Non hai inserito alcun messaggio da mandare via e-mail!"; +$net2ftp_messages["You did not supply a From address."] = "Non hai inserito l´indirizzo From."; +$net2ftp_messages["You did not supply a To address."] = "Non hai inserito l´indirizzo To."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "A causa di problemi tecnici il messaggio e-mail a %1\$s non e´ stato inviato."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Inserire username e password per il server FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Non sono stati inseriti i dati di accesso nella finestra popup.
Clicca su \"Vai alla pagina di accesso\" sopra."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "L´accesso al pannello di amministrazione net2ftp e´ disabilitato, perche´ non e´ stata specificata la password nel file settings.inc.php. Inserire una password in quel file e riprovare."; +$net2ftp_messages["Please enter your Admin username and password"] = "Inserire username e password di amministrazione"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Non sono stati inseriti i dati di accesso nella finestra popup.
Clicca su \"Vai alla pagina di accesso\" sopra."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Username e password di amministrazione errati. Username e password possono essere impostati nel file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blu"; +$net2ftp_messages["Grey"] = "Grigio"; +$net2ftp_messages["Black"] = "Nero"; +$net2ftp_messages["Yellow"] = "Giallo"; +$net2ftp_messages["Pastel"] = "Pastello"; + +// getMime() +$net2ftp_messages["Directory"] = "Cartella"; +$net2ftp_messages["Symlink"] = "Link simbolico"; +$net2ftp_messages["ASP script"] = "Script ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "File HTML"; +$net2ftp_messages["Java source file"] = "File sorgente Java"; +$net2ftp_messages["JavaScript file"] = "File JavaScript"; +$net2ftp_messages["PHP Source"] = "Sorgente PHP"; +$net2ftp_messages["PHP script"] = "Script PHP"; +$net2ftp_messages["Text file"] = "File di testo"; +$net2ftp_messages["Bitmap file"] = "File bitmap"; +$net2ftp_messages["GIF file"] = "File GIF"; +$net2ftp_messages["JPEG file"] = "File JPEG"; +$net2ftp_messages["PNG file"] = "File PNG"; +$net2ftp_messages["TIF file"] = "File TIF"; +$net2ftp_messages["GIMP file"] = "File GIMP"; +$net2ftp_messages["Executable"] = "Eseguibile"; +$net2ftp_messages["Shell script"] = "Script shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - documento Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - presentatione PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - database Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - disegno Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - file di Project"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 documento"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 documento"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentatione"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 documento globale"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 documento"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x documento"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x documento globale"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x documento"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentatione"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x documento"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x documento"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x file di mail"; +$net2ftp_messages["Adobe Acrobat document"] = "Documento Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "Archivio ARC"; +$net2ftp_messages["ARJ archive"] = "Archivio ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "Archivio GZ"; +$net2ftp_messages["TAR archive"] = "Archivio TAR"; +$net2ftp_messages["Zip archive"] = "Archivio Zip"; +$net2ftp_messages["MOV movie file"] = "Filmato MOV"; +$net2ftp_messages["MPEG movie file"] = "Filmato MPEG"; +$net2ftp_messages["Real movie file"] = "Filmato Real"; +$net2ftp_messages["Quicktime movie file"] = "Filmato Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "File Shockwave flash"; +$net2ftp_messages["Shockwave file"] = "File Shockwave"; +$net2ftp_messages["WAV sound file"] = "File di suono WAV"; +$net2ftp_messages["Font file"] = "File di Font"; +$net2ftp_messages["%1\$s File"] = "%1\$s File"; +$net2ftp_messages["File"] = "File"; + +// getAction() +$net2ftp_messages["Back"] = "Indietro"; +$net2ftp_messages["Submit"] = "Invia"; +$net2ftp_messages["Refresh"] = "Aggiorna"; +$net2ftp_messages["Details"] = "Dettagli"; +$net2ftp_messages["Icons"] = "Icone"; +$net2ftp_messages["List"] = "Elenco"; +$net2ftp_messages["Logout"] = "Uscita"; +$net2ftp_messages["Help"] = "Aiuto"; +$net2ftp_messages["Bookmark"] = "Preferiti"; +$net2ftp_messages["Save"] = "Salva"; +$net2ftp_messages["Default"] = "Default"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licenza"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Funzioni di amministrazione"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Info versione"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Accesso in corso"; +$net2ftp_messages["Date from:"] = "Dal :"; +$net2ftp_messages["to:"] = "al:"; +$net2ftp_messages["Empty logs"] = "Vuoto"; +$net2ftp_messages["View logs"] = "Vedi log"; +$net2ftp_messages["Go"] = "Esegui"; +$net2ftp_messages["Setup MySQL tables"] = "Imposta tabelle MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = "Crea le tabelle MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Funzioni di amministrazione"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Verra´ eseguita questa query SQL:"; +$net2ftp_messages["Execute"] = "Esegui"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Impostazioni utilizzate:"; +$net2ftp_messages["MySQL password length"] = "Lunghezza password MySQL"; +$net2ftp_messages["Results:"] = "Risultati:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Funzioni di amministrazione"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "Nessun dato"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Funzioni di amministrazione"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "La tabella %1\$s e´ stata svuotata correttamente."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "La tabella %1\$s non puo´ essere svuotata."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Funzioni Avanzate"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Esegui"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Funzioni di controllo"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Controlla net2ftp su questo server web"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Controlla un server FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Funzioni di traduzione"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduzione alle funzionalita´ di traduzione"; +$net2ftp_messages["Extract messages to translate from code files"] = "Estrai i messaggi da tradurre dai file sorgente"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Controlla se ci sono vecchi o nuovi messaggi"; + +$net2ftp_messages["Beta functions"] = "Funzioni BETA"; +$net2ftp_messages["Send a site command to the FTP server"] = "Invia un comando FTP al server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: proteggi una cartella, crea pagine di errore personali"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: esegui una query SQL"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Le funzioni di comando del sito non sono disponibili su questo server web."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Le funzioni Apache non sono disponibili su questo server web."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Le funzioni MySQL non sono disponibili su questo server web."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Stringa di stato2 inattesa. Interrompo l´esecuzione."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Controlla un server FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Settaggi di connessione:"; +$net2ftp_messages["FTP server"] = "Server FTP"; +$net2ftp_messages["FTP server port"] = "Porta del server FTP"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Password length"] = "Lunghezza della password"; +$net2ftp_messages["Passive mode"] = "Modo passivo"; +$net2ftp_messages["Directory"] = "Cartella"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connessione al server FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Accesso al server FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Setto la modalita´ passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Tipo di server FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Cambio alla cartella %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "La cartella del server FTP e´: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Rilevamento dell´elenco cartelle e file: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Secondo tentativo di rilevamento dell´elenco cartelle e file: "; +$net2ftp_messages["Closing the connection: "] = "Chiusura della connessione: "; +$net2ftp_messages["Raw list of directories and files:"] = "Elenco delle cartelle e dei file:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Elenco ordinato delle cartelle e dei file:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Controlla la tua installazione di net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Controlla se il modulo FTP di PHP e´ installato: "; +$net2ftp_messages["yes"] = "si"; +$net2ftp_messages["no - please install it!"] = "no - per favore installalo!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Controlla i permessi della cartella sul server web: un piccolo file di prova verra´ scritto nella cartella /temp e poi verra´ eliminato."; +$net2ftp_messages["Creating filename: "] = "Crea il file: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Nome del file: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "non va bene. Controlla i permessi della cartella %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Apre il file in scrittura: "; +$net2ftp_messages["Writing some text to the file: "] = "Inserimento di testo nel file: "; +$net2ftp_messages["Closing the file: "] = "Chiusura del file: "; +$net2ftp_messages["Deleting the file: "] = "Eliminazione del file: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connessione al server FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Accesso al server FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Setto la modalita´ passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Tipo di server FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Cambio alla cartella %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "La cartella del server FTP e´: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Rilevamento dell´elenco cartelle e file: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Secondo tentativo di rilevamento dell´elenco cartelle e file: "; +$net2ftp_messages["Closing the connection: "] = "Chiusura della connessione: "; +$net2ftp_messages["Raw list of directories and files:"] = "Elenco delle cartelle e dei file:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Elenco ordinato delle cartelle e dei file:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Nota: quando userai questo bookmark, una finestra popup ti chiedera´ il tuo username e la tua password."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Scegli una cartella"; +$net2ftp_messages["Please wait..."] = "Per favore attendi..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Le cartelle con i nomi che contengono \' non possono essere mostrate correttamente. Possono solo essere eliminate. Per favore torna indietro e seleziona una sotto-cartella diversa."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Limite giornaliero raggiunto: non e´ possibile trasferire ulteriori file"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Per garantire a tutti un uso efficente del sistema net2ftp, sono impostati un limite di trasferimento e un timeout di esecuzione per ugni utente. A limite raggiunto sara´ possibile effettuare solo un browse dei file senza nessun tipo di trasferimento."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Se desideri un utilizzo senza limiti, installa net2ftp nel tuo proprio sito web."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nuova cartella"; +$net2ftp_messages["New file"] = "Nuovo file"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Carica"; +$net2ftp_messages["Java Upload"] = "Carica Java"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Funzioni avanzate"; +$net2ftp_messages["Copy"] = "Copia"; +$net2ftp_messages["Move"] = "Sposta"; +$net2ftp_messages["Delete"] = "Elimina"; +$net2ftp_messages["Rename"] = "Rinomina"; +$net2ftp_messages["Chmod"] = "CHMOD"; +$net2ftp_messages["Download"] = "Scarica"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Dimensione"; +$net2ftp_messages["Search"] = "Cerca"; +$net2ftp_messages["Go to the parent directory"] = "Vai alla cartella di livello superiore"; +$net2ftp_messages["Go"] = "Esegui"; +$net2ftp_messages["Transform selected entries: "] = "Trasforma gli elementi selezionati: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Crea una nuova sotto-cartella nella cartella %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Crea un nuovo file nella cartella %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Caricamento nuovi file nella cartella %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Vai alle funzioni avanzate"; +$net2ftp_messages["Copy the selected entries"] = "Copia gli elementi selezionati"; +$net2ftp_messages["Move the selected entries"] = "Sposta gli elementi selezionati"; +$net2ftp_messages["Delete the selected entries"] = "Elimina gli elementi selezionati"; +$net2ftp_messages["Rename the selected entries"] = "Renonima gli elementi selezionati"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "CHMOD sugli elementi selezionati (solo per servers Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Scarica un archivio zip che contiene gli elementi selezionati"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Crea un archivio zip con gli elementi selezionati da salvare o mandare via e-mail"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calcola le dimensioni degli elementi selezionati"; +$net2ftp_messages["Find files which contain a particular word"] = "Trova i file che contengono una determinata parola"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Clicca per ordinare per %1\$s in ordine descrescente"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Clicca per ordinare per %1\$s in ordine crescente"; +$net2ftp_messages["Ascending order"] = "Ordine crescente"; +$net2ftp_messages["Descending order"] = "Ordine descrescente"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Su"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Clicca per selezionare/deselezionare tutte le righe"; +$net2ftp_messages["All"] = "Tutto"; +$net2ftp_messages["Name"] = "Nome"; +$net2ftp_messages["Type"] = "Tipo"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Utente"; +$net2ftp_messages["Group"] = "Gruppo"; +$net2ftp_messages["Perms"] = "Permessi"; +$net2ftp_messages["Mod Time"] = "Ora modifica"; +$net2ftp_messages["Actions"] = "Azioni"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Scarica il file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Vedi"; +$net2ftp_messages["Edit"] = "Modifica"; +$net2ftp_messages["Update"] = "Aggiorna"; +$net2ftp_messages["Open"] = "Apri"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Vedi il codice sorgente selezionato del file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Modifica il codice sorgente del file %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Carica una nuova versione del file %1\$s e sincronizza i cambiamenti"; +$net2ftp_messages["View image %1\$s"] = "Guarda l´immagine %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Guarda il file %1\$s dal tuo web server HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Nota: Questo link puo´ non funzionare se non hai un tuo dominio personale.)"; +$net2ftp_messages["This folder is empty"] = "Questa cartella e´ vuota"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Cartelle"; +$net2ftp_messages["Files"] = "File"; +$net2ftp_messages["Symlinks"] = "Link simbolici"; +$net2ftp_messages["Unrecognized FTP output"] = "Risultato FTP non riconosciuto"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Dimensione"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Lingua:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "Modalita´ visione:"; +$net2ftp_messages["Directory Tree"] = "Struttura cartelle"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Esegui %1\$s in una nuova finestra"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Clicca due volte per andare in una sotto-cartella:"; +$net2ftp_messages["Choose"] = "Scegli"; +$net2ftp_messages["Up"] = "Su"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Dimensione delle cartelle e dei files selezionati"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "La dimensione totale occupata dalle cartelle e files selezionati e´:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "CHMOD cartelle e file"; +$net2ftp_messages["Set all permissions"] = "Imposta a tutti i permessi"; +$net2ftp_messages["Read"] = "Leggi"; +$net2ftp_messages["Write"] = "Scrivi"; +$net2ftp_messages["Execute"] = "Esegui"; +$net2ftp_messages["Owner"] = "Utente"; +$net2ftp_messages["Group"] = "Gruppo"; +$net2ftp_messages["Everyone"] = "Qualsiasi"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Per settare tutti i permessi, inserisci i permessi indicati su e clicca sul tasto \"Imposta a tutti i permessi\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Setta i permessi per la cartella %1\$s: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Setta i permessi per il file %1\$s: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Setta i permessi per il link simblico %1\$s to: "; +$net2ftp_messages["Chmod value"] = "Valore CHMOD"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Esegui CHMOD anche sulle sotto-cartelle all´interno di questa cartella"; +$net2ftp_messages["Chmod also the files within this directory"] = "Esegui CHMOD anche sui files all´interno di questa cartella"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Il valore CHMOD %1\$s non e´ nell´intervallo consentito 000-777. Per favore riprova."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Scegli una cartella"; +$net2ftp_messages["Copy directories and files"] = "Copia cartelle e file"; +$net2ftp_messages["Move directories and files"] = "Sposta cartelle e file"; +$net2ftp_messages["Delete directories and files"] = "Elimina cartelle e file"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Sei sicuro di voler eliminare queste cartelle e file?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Tutte le sotto-cartelle delle cartelle selezionate e i relativi file saranno eliminati!"; +$net2ftp_messages["Set all targetdirectories"] = "Imposta a tutti come cartella di destinazione"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Per selezionare una cartella destinazione comune, inserisci quella cartella destinazione nella casella di testo su e clicca sul tasto \"Imposta a tutti come cartella di destinazione\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: la cartella di destinazione deve essere esistente prima che qualunque cosa possa essere copiata al suo interno."; +$net2ftp_messages["Different target FTP server:"] = "Server FTP di destinazione esterno:"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Lascia vuoto se vuoi copiare i files nello stesso server FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Se vuoi copiare i files su un altro server FTP, inserisci i relativi dati di accesso."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Lascia vuoto se vuoi spostare i files sullo stesso server FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Se vuoi spostare i fiels su un altro server FTP, inserisi i relativi dati di accesso."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copia cartella %1\$s in:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Sposta cartella %1\$s in:"; +$net2ftp_messages["Directory %1\$s"] = "cartella %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copia file %1\$s in:"; +$net2ftp_messages["Move file %1\$s to:"] = "Sposta file %1\$s in:"; +$net2ftp_messages["File %1\$s"] = "File %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copia link simbolico %1\$s in:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Sposta link simbolico %1\$s in:"; +$net2ftp_messages["Symlink %1\$s"] = "Link simbolico %1\$s"; +$net2ftp_messages["Target directory:"] = "Cartella di destinazione:"; +$net2ftp_messages["Target name:"] = "Nome destinazione:"; +$net2ftp_messages["Processing the entries:"] = "Elaborazione dati:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Dimensione"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: clicca col tasto destro sul link e scegli \"Aggiungi ai Favoriti...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: clicca col tasto destro sul link e scegli \"Metti questo link nei Bookmark...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Non e´ possibile aprire il file template"; +$net2ftp_messages["Unable to read the template file"] = "Non e´ possibile leggere il file template"; +$net2ftp_messages["Please specify a filename"] = "Per favore specifica un nome per il file"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Stato: Questo file non e´ stato ancora salvato"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Stato: Salvato il %1\$s usando la modalita´ %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Stato: Questo file non puo´ essere salvato"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Cartella: "; +$net2ftp_messages["File: "] = "File: "; +$net2ftp_messages["New file name: "] = "Nuovo nome per il file: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Nota: cambiando il tipo di area testuale salvera´ le modifiche fatte finora"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Cerca cartelle e file"; +$net2ftp_messages["Search again"] = "Cerca ancora"; +$net2ftp_messages["Search results"] = "Cerca fra i risultati"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Per favore inserisci una valida parola o frase da ricercare."; +$net2ftp_messages["Please enter a valid filename."] = "Per favore inserisci un nome file valido."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Per favore inserisci una dimensione file valida nella casella \"da\", per esempio 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Per favore inserisci una dimensione file valida nella casella \"a\", per esempio 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Per favore inserisci una data valida nel formato Anno-mese-giorno nella casella \"da\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Per favore inserisci una data valida nel formato Anno-mese-giorno nella casella \"a\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "La parola %1\$s non e´ stata trovata nelle cartelle e file selezionati."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "La parola %1\$s e´ stata trovata nei seguenti files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Cerca una parola o frase"; +$net2ftp_messages["Case sensitive search"] = "Ricerca Case sensitive"; +$net2ftp_messages["Restrict the search to:"] = "Restringi la ricerca a:"; +$net2ftp_messages["files with a filename like"] = "files con un nome tipo"; +$net2ftp_messages["(wildcard character is *)"] = "(il carattere jolly e´ *)"; +$net2ftp_messages["files with a size"] = "files con una dimensione"; +$net2ftp_messages["files which were last modified"] = "files modificati per l´ultima volta"; +$net2ftp_messages["from"] = "da"; +$net2ftp_messages["to"] = "a"; + +$net2ftp_messages["Directory"] = "Cartella"; +$net2ftp_messages["File"] = "File"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Vedi"; +$net2ftp_messages["Edit"] = "Modifica"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Vedi il codice sorgente selezionato del file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Modifica il codice sorgente del file %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Non e´ possibile aprire il file template"; +$net2ftp_messages["Unable to read the template file"] = "Non e´ possibile leggere il file template"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "Server FTP"; +$net2ftp_messages["Example"] = "Esempio"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Anonymous"] = "Anonimo"; +$net2ftp_messages["Passive mode"] = "Modo passivo"; +$net2ftp_messages["Initial directory"] = "Cartella iniziale"; +$net2ftp_messages["Language"] = "Lingua"; +$net2ftp_messages["Skin"] = "Skin"; +$net2ftp_messages["FTP mode"] = "modalita´ FTP"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Accesso"; +$net2ftp_messages["Clear cookies"] = "Elimina i cookie"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Username"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Password"; +$net2ftp_messages["Login"] = "Accesso"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Crea nuove cartelle"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Le nuove cartelle saranno create in %1\$s."; +$net2ftp_messages["New directory name:"] = "Nome della nuova cartella:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "La cartella %1\$s e´ stata creata con successo."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Rinonima cartelle e file"; +$net2ftp_messages["Old name: "] = "Vecchio nome: "; +$net2ftp_messages["New name: "] = "Nuovo nome: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Il nuovo nome non puo´ contenere alcun punto. Questa selezione non e´ stata rinominata in %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s e´ stato rinominato con successo in %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s non puo´ essere rinominato in %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Imposta a tutti come cartella di destinazione"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Per selezionare una cartella destinazione comune, inserisci quella cartella destinazione nella casella di testo su e clicca sul tasto \"Imposta a tutti come cartella di destinazione\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: la cartella di destinazione deve essere esistente prima che qualunque cosa possa essere copiata al suo interno."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Cartella di destinazione:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Usa i nomi delle cartelle (crea le sotto-cartelle automaticamente)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Carica nella cartella:"; +$net2ftp_messages["Files"] = "File"; +$net2ftp_messages["Archives"] = "Archivi"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "I file inseriti qui saranno trasferiti sul server FTP."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Gli archivi inseriti qui saranno decompressi, e i file al loro interno saranno trasferiti sul server FTP."; +$net2ftp_messages["Add another"] = "Aggiungi un altro"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Usa i nomi delle cartelle (crea le sotto-cartelle automaticamente)"; + +$net2ftp_messages["Choose a directory"] = "Scegli una cartella"; +$net2ftp_messages["Please wait..."] = "Per favore attendi..."; +$net2ftp_messages["Uploading... please wait..."] = "Sto caricando dei file... per favore attendi..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Se il caricamento supera i %1\$s secondi<\/b> permessi, dovrai riprovare con meno files alla volta o file piu´ piccoli."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Questa finestra si chiudera´ automaticamente fra pochi secondi."; +$net2ftp_messages["Close window now"] = "Chiudi la finestra ora"; + +$net2ftp_messages["Upload files and archives"] = "Carica file e archivi"; +$net2ftp_messages["Upload results"] = "Risultati del caricamento"; +$net2ftp_messages["Checking files:"] = "Controllo file:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Trasferimento dei file sul server FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Estrazione file dagli archivi e trasferimento dei file sul server FTP:"; +$net2ftp_messages["Upload more files and archives"] = "Carica altri file e archivi"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restrizioni:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "La massima dimensione di un file e´ settata da net2ftp a %1\$s e dal PHP a %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Il tempo di esecuzione massimo e´ di %1\$s secondi"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "La modalita´ di trasferimento FTP (ASCII o BINARY) sara´ determinata automaticamente, basandosi sull´estensione del file"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Se la destinazione esiste gia´, sara´ sovrascritta"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Visualizza file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Guarda l´immagine %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Visualizza filmato Macromedia ShockWave %1\$s"; +$net2ftp_messages["Image"] = "Immagine"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Per salvare l´immagine, click con tasto destro e scegliere \"Salva immagine come...\""; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Archivi Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Salva il file zip sul server FTP come:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Manda il file zip in e-mail come allegato a:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Nota che mandare i files non e´ anonimo: il tuo indirizzo IP cosi´ come l´ora di invio saranno aggiunti al messaggio e-mail."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Qualche commento aggiuntivo da inserire nell´e-mail:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Non hai inserito un nome del file per l´archivio zip. Torna indietro ed inserisci un nome."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "L´indirizzo e-mail che hai inserito (%1\$s) non sembra esser valido.
Per favore inserisci un indirizzo nel formato username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/ja.inc.php b/ehcp/net2ftp/languages/ja.inc.php new file mode 100644 index 0000000..1acb6f7 --- /dev/null +++ b/ehcp/net2ftp/languages/ja.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "ǥ쥯ȥ %1\$s ¸ߤʤ򤹤뤳ȤǤޤ󡣥ǥ쥯ȥ %2\$s ɽޤ"; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "ʤΥ롼ȥǥ쥯ȥ %1\$s ¸ߤʤ򤹤뤳ȤǤޤ"; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "ǥ쥯ȥ %1\$s 򤹤뤳ȤǤޤ - ʤˤϤΥǥ쥯ȥ뽽ʬʻʤʤޤϥǥ쥯ȥ꤬¸ߤޤ"; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "%1\$s 򿷤ɥǼ¹"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "1İʾΥǥ쥯ȥϥե򤷤Ʋ!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP %1\$s ϡĤ줿FTPФΥꥹȤäƤޤ"; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP%1\$sϡ ػߤ줿FTPФΥꥹȤäƤޤ"; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTPХݡ %1\$s ϻѤǤޤ"; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "ʤIPɥ쥹(%1\$s)ϡػߤ줿IPɥ쥹ΥꥹȤäƤޤ"; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "ơ֥ net2ftp_users ˽ʣԤޤޤƤޤ"; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "ԤΥ桼̾ѥɤϤƤޤ"; +$net2ftp_messages["Wrong username or password. Please try again."] = "ä桼̾ѥɤǤľƤ"; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "ʤ IPɥ쥹Ƚ̤뤳ȤǤޤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "ơ֥ net2ftp_log_consumption_ipaddress ˽ʣԤޤޤƤޤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "ơ֥ net2ftp_log_consumption_ftpserver ˽ʣԤޤޤƤޤ"; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "ѿ consumption_ipaddress_datatransfer ϿͤǤϤޤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "ơ֥ net2ftp_log_consumption_ipaddress ϹԲĤǤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "ơ֥ net2ftp_log_consumption_ipaddress ˽ʣȥ꤬ޤޤƤޤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "ơ֥ net2ftp_log_consumption_ftpserver ϹԲĤǤ"; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "ơ֥ net2ftp_log_consumption_ftpserver ˽ʣȥ꤬ޤޤƤޤ"; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "顼Ǥ"; +$net2ftp_messages["Go back"] = ""; +$net2ftp_messages["Go to the login page"] = "ڡ"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "FTP %1\$s Υݡ %2\$s ³뤳ȤǤޤ

Υɥ쥹 FTP ΤΤǤ? HTTP (web) ФΤΤȤϰۤʤäƤޤʤ ISPΥݡȥǥ ޤ ƥ 䤤碌Ƥ
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "FTP %1\$s ˥桼̾ %2\$s ǥ󤹤뤳ȤǤޤ

ʤΥ桼̾ȥѥɤǤ? ʤ ISPΥݡȥǥ ޤ ƥ 䤤碌Ƥ
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "FTP %1\$s Υѥå֥⡼ɤڤؤ뤳ȤǤޤ"; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "2 (о) FTP %1\$s Υݡ %2\$s ³뤳ȤǤޤ

Υɥ쥹 2 (о) FTP ΤΤǤ? HTTP (web) ФΤΤȤϰۤʤäƤޤʤ ISPΥݡȥǥ ޤ ƥ 䤤碌Ƥ
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "2 (о) FTP %1\$s ˥桼̾ %2\$s ǥ󤹤뤳ȤǤޤ

ʤΥ桼̾ȥѥɤǤ? ʤ ISPΥݡȥǥ ޤ ƥ 䤤碌Ƥ
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "2 (о) FTP %1\$s Υѥå֥⡼ɤڤؤ뤳ȤǤޤ"; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "ǥ쥯ȥʤޤϥեˤ̾ %1\$s %2\$s ѹǤޤ"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "ȥޥ%1\$s ϼ¹ԤǤޤCHMOD ޥɤ Windows FTPФǤϤʤ Unix FTPФǤΤͭǤ뤳ȤդƤ"; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "ǥ쥯ȥ %1\$s εľ %2\$s ѹޤ"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "ǥ쥯ȥ %1\$s ΥȥƤޤ:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "ե %1\$s εľ %2\$s ѹޤ"; +$net2ftp_messages["All the selected directories and files have been processed."] = "򤵤줿٤ƤΥǥ쥯ȥꡢեνλޤ"; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "ǥ쥯ȥ %1\$s ϺǤޤ"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "ե %1\$s ϺǤޤ"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "ǥ쥯ȥ %1\$s κϤǤޤ"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "ƥݥեκԤޤ"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "FTP ե %1\$s ե %2\$s Ȥ¸뤳ȤǤޤ
ǥ쥯ȥ %3\$s εľǧƤ
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "ƥݥե򳫤ȤǤޤ󡣥ǥ쥯ȥ %1\$s εľǧƤ"; +$net2ftp_messages["Unable to read the temporary file"] = "ƥݥեɤ߹ळȤǤޤ"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "ƥݥեĤ뤳ȤǤޤ"; +$net2ftp_messages["Unable to delete the temporary file"] = "ƥݥե뤳ȤǤޤ"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "ƥݥեκԤޤ󡣥ǥ쥯ȥ %1\$s εľǧƤ"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "ƥݥե򳫤ȤǤޤ󡣥ǥ쥯ȥ %1\$s εľǧƤ"; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "ƥݥե %1\$s ˽񤭹ळȤǤޤ
ǥ쥯ȥ %2\$s εľǧƤ"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "ƥݥեĤ뤳ȤǤޤ"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "FTPо˥ե %1\$s ֤ȤǤޤ
ǥ쥯ȥؤν񤭹ߵĤޤ"; +$net2ftp_messages["Unable to delete the temporary file"] = "ƥݥե뤳ȤǤޤ"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "ǥ쥯ȥ %1\$s ν"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "оݤΥǥ쥯ȥ %1\$s ϸΥǥ쥯ȥ %2\$s Υ֥ǥ쥯ȥ꤫ޤƱǥ쥯ȥǤΥǥ쥯ȥν򥹥åפޤ"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "֥ǥ쥯ȥ %1\$s ϤǤ¸ߤ뤿ᡢ뤳ȤǤޤ󡣥ԡư³ޤ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "оݤΥ֥ǥ쥯ȥ %1\$s "; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "ǥ쥯ȥ %1\$s 򤹤뤳ȤǤޤ󡣤Υǥ쥯ȥϥåפޤ"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "֥ǥ쥯ȥ %1\$s 뤳ȤǤޤ - Υǥ쥯ȥ϶ǤϤޤ"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "֥ǥ쥯ȥ %1\$s "; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "֥ǥ쥯ȥ %1\$s "; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "ǥ쥯ȥ %1\$s νλ"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "оݤΥե %1\$s ϸΥեƱ̾ǤΥեν򥹥åפޤ"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "ե %1\$s 򥳥ԡ뤳ȤǤޤ"; +$net2ftp_messages["Copied file %1\$s"] = "ե %1\$s 򥳥ԡ"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "ե %1\$s ư"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "ե %1\$s ϺǤޤ"; +$net2ftp_messages["Deleted file %1\$s"] = "ե %1\$s "; +$net2ftp_messages["All the selected directories and files have been processed."] = "򤵤줿٤ƤΥǥ쥯ȥꡢեνλޤ"; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "FTP⡼ %2\$s Ѥƥ⡼ȥե %1\$s ե˥ԡ뤳ȤǤޤ"; +$net2ftp_messages["Unable to delete file %1\$s"] = "ե %1\$s 뤳ȤǤޤ"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "1¤ã: ե %1\$s žޤ"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "FTP⡼ %2\$s Ѥƥե⡼ȥե %1\$s ˥ԡ뤳ȤǤޤ"; +$net2ftp_messages["Unable to delete the local file"] = "ե뤳ȤǤޤ"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "ƥݥե뤳ȤǤޤ"; +$net2ftp_messages["Unable to send the file to the browser"] = "ե֥饦뤳ȤǤޤ"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "ƥݥեκԤޤ"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "̥եϤǤFTPо %1\$s Ȥ¸Ƥޤ"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "̥ե %1\$s ޤ"; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "ե %1\$s 礭ޤΥեϥåץɤޤ"; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "ե뤳ȤǤޤ"; +$net2ftp_messages["File %1\$s could not be moved"] = "ե %1\$s ϰưǤޤ"; +$net2ftp_messages["File %1\$s is OK"] = "ե %1\$s OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "åץɤեƥݥǥ쥯ȥذư뤳ȤǤޤ

ΥȤδԤ net2ftp /temp ǥ쥯ȥεľ 777 ꤹɬפޤ"; +$net2ftp_messages["You did not provide any file to upload."] = "åץɤե뤬ꤵƤޤ"; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "ե %1\$s FTPФž뤳ȤǤޤǤ"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "ե %1\$s FTP⡼ %2\$s Ѥ FTPФžޤ"; +$net2ftp_messages["Transferring files to the FTP server"] = "ե FTPФžƤޤ"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "̥եν顼 %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "եĥҤȽǽʤᡢ̥ե %1\$s ϽޤǤߥݡȤƤ밵̥ե zip, tar, tgz, gz Ǥ"; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "ȥޥ %1\$s ¹Ԥ뤳ȤǤޤ"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Ȥߤޤ"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "ʤ net2ftpǼ¹Ԥ褦ȤȤϡƻ֤ %1\$s äĹ֤ɬפǤäơȤߤޤ"; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "λ¤ϡͤʿ webФѤǤ褦ݾ㤹ΤǤ"; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Ȥ꾮ʺȤʬ䤷ƤߤƲ: ե¤礭ʥեʤƤ"; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "⤷ɤƤ net2ftpȤäĹ礭ʺȤ򤹤ɬפϡʬΥФ net2ftpƳ뤳ȤƤƲ"; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Żҥ᡼åޤ!"; +$net2ftp_messages["You did not supply a From address."] = "пͥɥ쥹̤ϤǤ"; +$net2ftp_messages["You did not supply a To address."] = "襢ɥ쥹̤ϤǤ"; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Ū %1\$s ؤ Żҥ᡼ޤǤ"; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "SQL¹Ԥ뤳ȤǤޤ"; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "FTPоΤʤΥ桼̾ȥѥɤϤƲ"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "ݥåץåץɥˤʤΥϤƤޤ
\"ڡذư\" 򥯥åƤ"; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "ե settings.inc.php ˥ѥɤꤵƤʤᡢnet2ftp ѥѥͥؤΥ̵Ǥե˥ѥɤϤΥڡɤƲ"; +$net2ftp_messages["Please enter your Admin username and password"] = "ԤΥ桼̾ȥѥɤϤƲ"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "ݥåץåץɥˤʤΥϤƤޤ
\"ڡذư\" 򥯥åƤ"; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "net2ftp ѥѥͥΥ桼̾ѥɤְäƤޤ桼̾ȥѥɤϥե settings.inc.php ꤹ뤳ȤǤޤ"; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Ŀ"; +$net2ftp_messages["Grey"] = ""; +$net2ftp_messages["Black"] = ""; +$net2ftp_messages["Yellow"] = ""; +$net2ftp_messages["Pastel"] = "ø"; + +// getMime() +$net2ftp_messages["Directory"] = "ե"; +$net2ftp_messages["Symlink"] = "ܥå"; +$net2ftp_messages["ASP script"] = "ASP ץ"; +$net2ftp_messages["Cascading Style Sheet"] = "CSS 륷"; +$net2ftp_messages["HTML file"] = "HTML ɥ"; +$net2ftp_messages["Java source file"] = "Java ե"; +$net2ftp_messages["JavaScript file"] = "JavaScript ե"; +$net2ftp_messages["PHP Source"] = "PHP "; +$net2ftp_messages["PHP script"] = "PHP ץ"; +$net2ftp_messages["Text file"] = "ץ졼ƥ ɥ"; +$net2ftp_messages["Bitmap file"] = "BMP ᡼"; +$net2ftp_messages["GIF file"] = "GIF ᡼"; +$net2ftp_messages["JPEG file"] = "JPEG ᡼"; +$net2ftp_messages["PNG file"] = "PNG ᡼"; +$net2ftp_messages["TIF file"] = "TIFF ᡼"; +$net2ftp_messages["GIMP file"] = "GIMP ͥƥ֥᡼եޥå"; +$net2ftp_messages["Executable"] = "¹Բǽե"; +$net2ftp_messages["Shell script"] = "륹ץ"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word ɥ"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel "; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint ץ쥼ơ"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access ǡ١"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio ɥ"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project ե"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 ƥȥɥ"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 ƥץ졼"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 ץåɥ"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 ƥץ졼"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 ɥ"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 ƥץ졼"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 ץ쥼ơ"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 ƥץ졼"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 ޥɥ"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 "; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x ƥȥɥ"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x ޥɥ"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x ץåɥ"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x ɥ"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x ץ쥼ơ"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x ե"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x "; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x ɥ"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail ե"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat ɥ"; +$net2ftp_messages["ARC archive"] = "ARC "; +$net2ftp_messages["ARJ archive"] = "ARJ "; +$net2ftp_messages["RPM"] = "RPM ѥåե"; +$net2ftp_messages["GZ archive"] = "Gzip ե"; +$net2ftp_messages["TAR archive"] = "TAR "; +$net2ftp_messages["Zip archive"] = "Zip "; +$net2ftp_messages["MOV movie file"] = "MOV ӥǥ"; +$net2ftp_messages["MPEG movie file"] = "MPEG ӥǥ"; +$net2ftp_messages["Real movie file"] = "ꥢӥǥ ե"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime ӥǥ"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash ǥ"; +$net2ftp_messages["Shockwave file"] = "Shockwave ե"; +$net2ftp_messages["WAV sound file"] = "WAV ǥ"; +$net2ftp_messages["Font file"] = "եȥե"; +$net2ftp_messages["%1\$s File"] = "%1\$s ե"; +$net2ftp_messages["File"] = "ե"; + +// getAction() +$net2ftp_messages["Back"] = ""; +$net2ftp_messages["Submit"] = ""; +$net2ftp_messages["Refresh"] = ""; +$net2ftp_messages["Details"] = "ܺ"; +$net2ftp_messages["Icons"] = ""; +$net2ftp_messages["List"] = "ꥹ"; +$net2ftp_messages["Logout"] = ""; +$net2ftp_messages["Help"] = "إ"; +$net2ftp_messages["Bookmark"] = "֥åޡ"; +$net2ftp_messages["Save"] = "¸"; +$net2ftp_messages["Default"] = "ǥե"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "إץ"; +$net2ftp_messages["Forums"] = "ե"; +$net2ftp_messages["License"] = "饤"; +$net2ftp_messages["Powered by"] = "븵"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "ʤ net2ftp եعԤȤƤޤΥե net2ftp ˴ϢΤΤǤ - Ūʥ֥ۥƥ󥰤ˤĤƤμϤƲ"; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "ѵǽ"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "С"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "ΥС net2ftp ϺǿΤΤǤ"; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "ǿС net2ftp.com Ф鸡ޤǤѤΥ֥饦 net2ftp.com Ф龮ե뤬ɤ߹ޤΤɻߤƤ붲줬ޤ֥饦ΥƥǧƲ"; +$net2ftp_messages["Logging"] = "Ͽ"; +$net2ftp_messages["Date from:"] = ":"; +$net2ftp_messages["to:"] = ":"; +$net2ftp_messages["Empty logs"] = "ξõ"; +$net2ftp_messages["View logs"] = "ɽ"; +$net2ftp_messages["Go"] = "ư"; +$net2ftp_messages["Setup MySQL tables"] = "MySQL ơ֥"; +$net2ftp_messages["Create the MySQL database tables"] = "MySQL ǡ١ơ֥κ"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "ѵǽ"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "ե %1\$s Υϥɥ򳫤ȤǤޤǤ"; +$net2ftp_messages["The file %1\$s could not be opened."] = "ե %1\$s 򳫤ȤǤޤǤ"; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "ե %1\$s ΥϥɥĤ뤳ȤǤޤǤ"; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = " %1\$s ؤ³ꤵޤǤʤϤǡ١ͤǧƤ"; +$net2ftp_messages["Unable to select the database %1\$s."] = "ǡ١ %1\$s 򤹤뤳ȤǤޤ"; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQLꥨ顼 %1\$s ¹Ԥ뤳ȤǤޤǤ"; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL %1\$s ˼¹Ԥޤ"; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "ʤ MySQL ͤϤƤ:"; +$net2ftp_messages["MySQL username"] = "MySQL 桼̾"; +$net2ftp_messages["MySQL password"] = "MySQL ѥ"; +$net2ftp_messages["MySQL database"] = "MySQL ǡ١"; +$net2ftp_messages["MySQL server"] = "MySQL "; +$net2ftp_messages["This SQL query is going to be executed:"] = " SQL꤬¹Ԥ褦ȤƤޤ:"; +$net2ftp_messages["Execute"] = "¹"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Ѥ:"; +$net2ftp_messages["MySQL password length"] = "MySQL ѥĹ"; +$net2ftp_messages["Results:"] = ":"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "ѵǽ"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "SQL %1\$s ¹Ԥ뤳ȤǤޤ"; +$net2ftp_messages["No data"] = "ǡ̵"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "ѵǽ"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "ơ֥ %1\$s ˶ˤʤޤ"; +$net2ftp_messages["The table %1\$s could not be emptied."] = "ơ֥ %1\$s ˤ뤳ȤǤޤǤ"; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "ơ֥ %1\$s ˺Ŭޤ"; +$net2ftp_messages["The table %1\$s could not be optimized."] = "ơ֥ %1\$s Ŭ뤳ȤǤޤǤ"; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "ĥǽ"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "ư"; +$net2ftp_messages["Disabled"] = "̵"; +$net2ftp_messages["Advanced FTP functions"] = "ĥ FTP ǽ"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "FTPФǤդ FTPޥɤ"; +$net2ftp_messages["This function is available on PHP 5 only"] = "εǽ PHP 5 ǤΤͭǤ"; +$net2ftp_messages["Troubleshooting functions"] = "ȥ֥륷塼ƥ󥰵ǽ"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "webФ net2ftp Υȥ֥륷塼"; +$net2ftp_messages["Troubleshoot an FTP server"] = "FTPФΥȥ֥륷塼"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "net2ftp ΥꥹȲϥ롼ƥ"; +$net2ftp_messages["Translation functions"] = "ǽ"; +$net2ftp_messages["Introduction to the translation functions"] = "ǽμ"; +$net2ftp_messages["Extract messages to translate from code files"] = "ɥե뤿åФ"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "åΤ켰ΤΤĴ٤"; + +$net2ftp_messages["Beta functions"] = "ȯεǽ"; +$net2ftp_messages["Send a site command to the FTP server"] = "FTPФإȥޥɤ"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: ǥ쥯ȥΥѥݸ२顼ڡκ"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: SQL¹"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "webФǤϡȥޥɵǽѤǤޤ"; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "webФǤϡ ApacheǽѤǤޤ"; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "webФǤϡ MySQLǽѤǤޤ"; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "ͽʤ state2 ȥ󥰤ǤλƤޤ"; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "FTPФΥȥ֥륷塼"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "³:"; +$net2ftp_messages["FTP server"] = "FTP "; +$net2ftp_messages["FTP server port"] = "FTPХݡ"; +$net2ftp_messages["Username"] = "桼̾"; +$net2ftp_messages["Password"] = "ѥ"; +$net2ftp_messages["Password length"] = "ѥĹ"; +$net2ftp_messages["Passive mode"] = "Passive ⡼"; +$net2ftp_messages["Directory"] = "ե"; +$net2ftp_messages["Printing the result"] = "̤ϤƤޤ"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "FTPФ³: "; +$net2ftp_messages["Logging into the FTP server: "] = "FTPФ˥: "; +$net2ftp_messages["Setting the passive mode: "] = "ѥå֥⡼ɤ: "; +$net2ftp_messages["Getting the FTP server system type: "] = "FTPФΥƥ̤: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ǥ쥯ȥ %1\$s ѹ: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTPФΥǥ쥯ȥ: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "ǥ쥯ȥȥեꥹȤ: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "ǥ쥯ȥȥեꥹȤƼ: "; +$net2ftp_messages["Closing the connection: "] = "³: "; +$net2ftp_messages["Raw list of directories and files:"] = "ǥ쥯ȥȥեꥹ:"; +$net2ftp_messages["Parsed list of directories and files:"] = "ǥ쥯ȥȥեβϺѤߥꥹ:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = ""; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "net2ftp ΥꥹȲϥ롼ƥ"; +$net2ftp_messages["Sample input"] = "ץ"; +$net2ftp_messages["Parsed output"] = "ϸν"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "ʤ net2ftp Ƴȥ֥륷塼"; +$net2ftp_messages["Printing the result"] = "̤ϤƤޤ"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "PHP FTP⥸塼뤬󥹥ȡ뤵Ƥ뤫Ĵ٤Ƥޤ: "; +$net2ftp_messages["yes"] = "Ϥ"; +$net2ftp_messages["no - please install it!"] = " - 󥹥ȡ뤷Ƥ!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "webоΥǥ쥯ȥεľĴ٤Ƥޤ: /temp ե˾ʥե뤬ޤǺޤ"; +$net2ftp_messages["Creating filename: "] = "ե̾: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. ե̾: %1\$s"; +$net2ftp_messages["not OK"] = ""; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "ԡǥ쥯ȥ %1\$s εľǧƤ"; +$net2ftp_messages["Opening the file in write mode: "] = "ե񤭹ߥ⡼ɤdzƤޤ: "; +$net2ftp_messages["Writing some text to the file: "] = "ե˥ƥȤ񤭹Ǥޤ: "; +$net2ftp_messages["Closing the file: "] = "եĤƤޤ: "; +$net2ftp_messages["Deleting the file: "] = "եƤޤ: "; + +$net2ftp_messages["Testing the FTP functions"] = "FTPǽƥȤƤޤ"; +$net2ftp_messages["Connecting to a test FTP server: "] = "ƥFTPФ³: "; +$net2ftp_messages["Connecting to the FTP server: "] = "FTPФ³: "; +$net2ftp_messages["Logging into the FTP server: "] = "FTPФ˥: "; +$net2ftp_messages["Setting the passive mode: "] = "ѥå֥⡼ɤ: "; +$net2ftp_messages["Getting the FTP server system type: "] = "FTPФΥƥ̤: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ǥ쥯ȥ %1\$s ѹ: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTPФΥǥ쥯ȥ: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "ǥ쥯ȥȥեꥹȤ: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "ǥ쥯ȥȥեꥹȤƼ: "; +$net2ftp_messages["Closing the connection: "] = "³: "; +$net2ftp_messages["Raw list of directories and files:"] = "ǥ쥯ȥȥեꥹ:"; +$net2ftp_messages["Parsed list of directories and files:"] = "ǥ쥯ȥȥեβϺѤߥꥹ:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = ""; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = ": Υ֥åޡѤȡݥåץåץɥǥ桼̾ȥѥɤϤޤ"; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "ǥ쥯ȥ"; +$net2ftp_messages["Please wait..."] = "Ф餯Ԥ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "̾ \' ޤǥ쥯ȥɽޤ󡣺Ƥޤޤä̤Υ֥ǥ쥯ȥ򤷤Ƥ"; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "1ž¤ã: ǡž뤳ȤϤǤޤ"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "webФͤǸʿѤ뤳Ȥݾ㤹뤿ᡢǡž̤ȥץȤμ¹Ի֤ϥ桼Ȥ1ñ̤¤Ƥޤ¤ã FTPФɽ뤳ȤϤǤޤǡϤǤޤ"; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "̵¤˻Ѥϡʬ webФ net2ftp 򥤥󥹥ȡ뤷Ʋ"; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "ǥ쥯ȥ"; +$net2ftp_messages["New file"] = "ե"; +$net2ftp_messages["HTML templates"] = "HTML ƥץ졼"; +$net2ftp_messages["Upload"] = "åץ"; +$net2ftp_messages["Java Upload"] = "Java åץ"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "ĥǽ"; +$net2ftp_messages["Copy"] = "ԡ"; +$net2ftp_messages["Move"] = "ư"; +$net2ftp_messages["Delete"] = ""; +$net2ftp_messages["Rename"] = "̾ѹ"; +$net2ftp_messages["Chmod"] = "ľѹ"; +$net2ftp_messages["Download"] = ""; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Search"] = ""; +$net2ftp_messages["Go to the parent directory"] = "ҤȤľذư"; +$net2ftp_messages["Go"] = "ư"; +$net2ftp_messages["Transform selected entries: "] = "򤵤줿ȥ: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "ǥ쥯ȥ %1\$s β˥֥ǥ쥯ȥ"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "ǥ쥯ȥ %1\$s ˿ե"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Υƥץ졼ȤѤƴñ webȤ"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "ǥ쥯ȥ %1\$s ˿ե򥢥åץ"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "JavaץåȤѤƥǥ쥯ȥȥե򥢥åץ"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "ĥǽβ̤򳫤"; +$net2ftp_messages["Copy the selected entries"] = "򤵤줿ȥ򥳥ԡ"; +$net2ftp_messages["Move the selected entries"] = "򤵤줿ȥư"; +$net2ftp_messages["Delete the selected entries"] = "򤵤줿ȥ"; +$net2ftp_messages["Rename the selected entries"] = "򤵤줿ȥ̾ѹ"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "򤵤줿ȥεľѹUnix/Linux/BSD ФΤͭ"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "򤵤줿ȥ򤹤٤ƴޤవ̥ե"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "򤵤줿ȥ򰵽"; +$net2ftp_messages["Calculate the size of the selected entries"] = "򤵤줿ȥΥե륵׻"; +$net2ftp_messages["Find files which contain a particular word"] = "ʸޤե򸡺"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "å %1\$s ǹ߽祽"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "å %1\$s Ǿ祽"; +$net2ftp_messages["Ascending order"] = ""; +$net2ftp_messages["Descending order"] = "߽"; +$net2ftp_messages["Upload files"] = "եΥåץ"; +$net2ftp_messages["Up"] = ""; +$net2ftp_messages["Click to check or uncheck all rows"] = "åܤڤؤ"; +$net2ftp_messages["All"] = ""; +$net2ftp_messages["Name"] = "̾"; +$net2ftp_messages["Type"] = ""; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "ͭ"; +$net2ftp_messages["Group"] = "롼"; +$net2ftp_messages["Perms"] = "ľ"; +$net2ftp_messages["Mod Time"] = ""; +$net2ftp_messages["Actions"] = ""; +$net2ftp_messages["Select the directory %1\$s"] = "ǥ쥯ȥ %1\$s "; +$net2ftp_messages["Select the file %1\$s"] = "ե %1\$s "; +$net2ftp_messages["Select the symlink %1\$s"] = "ܥå %1\$s "; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "֥ǥ쥯ȥ %1\$s ذư"; +$net2ftp_messages["Download the file %1\$s"] = "ե %1\$s Υ"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = ""; +$net2ftp_messages["Edit"] = "Խ"; +$net2ftp_messages["Update"] = ""; +$net2ftp_messages["Open"] = ""; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "ե %1\$s Υɤդɽ"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "ե %1\$s ΥɤԽ"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "СΥե %1\$s 򥢥åץɤѹʬʻ"; +$net2ftp_messages["View image %1\$s"] = " %1\$s ɽ"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "ե %1\$s 򤢤ʤ HTTP webФɽ"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(: ʬΥɥᥤͭƤʤˤϡΥ󥯤ϵǽޤ)"; +$net2ftp_messages["This folder is empty"] = "Υե϶Ǥ"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "ǥ쥯ȥ"; +$net2ftp_messages["Files"] = "ե"; +$net2ftp_messages["Symlinks"] = "ܥå"; +$net2ftp_messages["Unrecognized FTP output"] = " FTP "; +$net2ftp_messages["Number"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Skipped"] = "ά"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = ":"; +$net2ftp_messages["Skin:"] = "ơ:"; +$net2ftp_messages["View mode:"] = "ɽ⡼:"; +$net2ftp_messages["Directory Tree"] = "ĥ꡼ɽ"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "%1\$s 򿷤ɥǼ¹"; +$net2ftp_messages["This file is not accessible from the web"] = "Υե web夫饢Ǥޤ"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "֥륯åǥ֥ǥ쥯ȥذư:"; +$net2ftp_messages["Choose"] = ""; +$net2ftp_messages["Up"] = ""; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "򤵤줿ǥ쥯ȥȥեΥ"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "򤵤줿ǥ쥯ȥȥեιץ:"; +$net2ftp_messages["The number of files which were skipped is:"] = "ά줿եθĿ:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "ǥ쥯ȥȥեεľѹ"; +$net2ftp_messages["Set all permissions"] = ""; +$net2ftp_messages["Read"] = "ɤ߼"; +$net2ftp_messages["Write"] = "񤭹"; +$net2ftp_messages["Execute"] = "¹"; +$net2ftp_messages["Owner"] = "ͭ"; +$net2ftp_messages["Group"] = "롼"; +$net2ftp_messages["Everyone"] = ""; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "ƤεľƱͤˤˤϡǵľϤ \"\" ܥ򥯥åƤ"; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "ǥ쥯ȥ %1\$s εľѹ: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "ե %1\$s εľѹ: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "ܥå %1\$s εľѹ: "; +$net2ftp_messages["Chmod value"] = ""; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Υǥ쥯ȥΥ֥ǥ쥯ȥѹ"; +$net2ftp_messages["Chmod also the files within this directory"] = "Υǥ쥯ȥΥեѹ"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "ͥ顼: %1\$s 000 777 ͤǤϤޤ󡣺ꤷƲ"; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "ǥ쥯ȥ"; +$net2ftp_messages["Copy directories and files"] = "ǥ쥯ȥȥեΥԡ"; +$net2ftp_messages["Move directories and files"] = "ǥ쥯ȥȥեΰư"; +$net2ftp_messages["Delete directories and files"] = "ǥ쥯ȥȥեκ"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "ΥեƤǤ?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "򤵤줿ǥ쥯ȥΥ֥ǥ쥯ȥȥեޤ!"; +$net2ftp_messages["Set all targetdirectories"] = "Ƥоݥǥ쥯ȥ"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "̤оݥǥ쥯ȥꤹˤϡΥƥȥܥåоݥǥ쥯ȥϤ \"Ƥоݥǥ쥯ȥ\" ܥ򥯥åƲ"; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ԡˡоݥǥ쥯ȥ꤬¸ߤƤʤФʤޤ"; +$net2ftp_messages["Different target FTP server:"] = "̤о FTP :"; +$net2ftp_messages["Username"] = "桼̾"; +$net2ftp_messages["Password"] = "ѥ"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Ʊ FTP Ф˥ե򥳥ԡȤϡϤʤDz"; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "̤ FTP Ф˥ե򥳥ԡȤϡʤΥϤƲ"; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Ʊ FTP Ф˥եưȤϡϤʤDz"; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "̤ FTP Ф˥եưȤϡʤΥϤƲ"; +$net2ftp_messages["Copy directory %1\$s to:"] = "ǥ쥯ȥ %1\$s Υԡ:"; +$net2ftp_messages["Move directory %1\$s to:"] = "ǥ쥯ȥ %1\$s ΰư:"; +$net2ftp_messages["Directory %1\$s"] = "ǥ쥯ȥ %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "ե %1\$s Υԡ:"; +$net2ftp_messages["Move file %1\$s to:"] = "ե %1\$s ΰư:"; +$net2ftp_messages["File %1\$s"] = "ե %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "ܥå %1\$s Υԡ:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "ܥå %1\$s ΰư:"; +$net2ftp_messages["Symlink %1\$s"] = "ܥå %1\$s"; +$net2ftp_messages["Target directory:"] = "оݥǥ쥯ȥ:"; +$net2ftp_messages["Target name:"] = "о̾:"; +$net2ftp_messages["Processing the entries:"] = "ȥƤޤ:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "webȤñ4ĤΥƥåפǺ"; +$net2ftp_messages["Template overview"] = "ƥץ졼Ȱ"; +$net2ftp_messages["Template details"] = "ƥץ졼Ⱦܺ"; +$net2ftp_messages["Files are copied"] = "ԡե"; +$net2ftp_messages["Edit your pages"] = "ڡԽ"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "򥯥åȥƥץ졼Ȥξܺ٤ɽޤ"; +$net2ftp_messages["Back to the Browse screen"] = "֥饦̤"; +$net2ftp_messages["Template"] = "ƥץ졼"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "򥯥åȤΥƥץ졼Ȥξܺ٤ɽޤ"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "ƥץ졼ȥե뤬ʤ FTPФ˥ԡޤƱ̾Υե뤬¸ߤȾ񤭤ޤ³ޤ"; +$net2ftp_messages["Install template to directory: "] = "ƥץ졼Ȥǥ쥯ȥ˥󥹥ȡ: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Preview page"] = "ץӥ塼"; +$net2ftp_messages["opens in a new window"] = "ɥdz"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "ƥץ졼ȥե뤬ʤΥФžޤФ餯Ԥ: "; +$net2ftp_messages["Done."] = "λ"; +$net2ftp_messages["Continue"] = "³"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "ڡԽ"; +$net2ftp_messages["Browse the FTP server"] = "FTPФ"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "󥯤򤪵ɲäơǤޤΥڡ褦ˤ!"; +$net2ftp_messages["Edit website at %1\$s"] = "web %1\$s Խ"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: 󥯤򱦥å\"ɲ...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: 󥯤򱦥å\"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "ٹ: ֥ǥ쥯ȥ %1\$s 뤳ȤǤޤ󡣤⤦Ǥ¸ߤƤޤ³Ԥޤ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "оݤΥ֥ǥ쥯ȥ %1\$s "; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "ٹ: ե %1\$s 򥳥ԡ뤳ȤǤޤ³Ԥޤ..."; +$net2ftp_messages["Copied file %1\$s"] = "ե %1\$s 򥳥ԡ"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "ƥץ졼ȥե뤬ޤ"; +$net2ftp_messages["Unable to read the template file"] = "ƥץ졼ȥե뤬ɤ߹ޤ"; +$net2ftp_messages["Please specify a filename"] = "ե̾ꤷƤ"; +$net2ftp_messages["Status: This file has not yet been saved"] = "ơ: ΥեϤޤ¸Ƥޤ"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "ơ: %2\$s ⡼ɤ %1\$s ¸ޤ"; +$net2ftp_messages["Status: This file could not be saved"] = "ơ: Υե¸Ǥޤ"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "ǥ쥯ȥ: "; +$net2ftp_messages["File: "] = "ե: "; +$net2ftp_messages["New file name: "] = "ե̾: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = ": ƥȥꥢפѹȡѹս¸뤳Ȥˤʤޤ"; +$net2ftp_messages["Copy up"] = "˥ԡ"; +$net2ftp_messages["Copy down"] = "˥ԡ"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "եȥǥ쥯ȥ򸡺"; +$net2ftp_messages["Search again"] = "Ƹ"; +$net2ftp_messages["Search results"] = ""; +$net2ftp_messages["Please enter a valid search word or phrase."] = "ͭñޤϸϤƤ"; +$net2ftp_messages["Please enter a valid filename."] = "ͭʥե̾ϤƤ"; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "ͭʥե륵 \"from\" ƥȥܥåϤƲ(: 0)"; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "ͭʥե륵 \"to\" ƥȥܥåϤƲ(: 500000)"; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Y-m-d ͭդ \"from\" ƥȥܥåϤƲ"; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Y-m-d ͭդ \"to\" ƥȥܥåϤƲ"; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "ʸ %1\$s 򤵤줿ǥ쥯ȥȥեˤϸĤޤǤ"; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "ʸ %1\$s ϼΥե˸Ĥޤ:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "ʸθ"; +$net2ftp_messages["Case sensitive search"] = "ܺٸ"; +$net2ftp_messages["Restrict the search to:"] = ":"; +$net2ftp_messages["files with a filename like"] = "ե̾"; +$net2ftp_messages["(wildcard character is *)"] = "(磻ɥ: *)"; +$net2ftp_messages["files with a size"] = "ե륵"; +$net2ftp_messages["files which were last modified"] = "եκǽǻ"; +$net2ftp_messages["from"] = "from"; +$net2ftp_messages["to"] = "to"; + +$net2ftp_messages["Directory"] = "ե"; +$net2ftp_messages["File"] = "ե"; +$net2ftp_messages["Line"] = ""; +$net2ftp_messages["Action"] = ""; +$net2ftp_messages["View"] = ""; +$net2ftp_messages["Edit"] = "Խ"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "ե %1\$s Υɤդɽ"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "ե %1\$s ΥɤԽ"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "ƥץ졼ȥե뤬ޤ"; +$net2ftp_messages["Unable to read the template file"] = "ƥץ졼ȥե뤬ɤ߹ޤ"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "JavaץåȤѤƥǥ쥯ȥȥե򥢥åץ"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "󤷤褦!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "FTP Ф"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "٥󤹤Сǥ쥯ȥȥǥ쥯ȥΥ֥ǥ쥯ȥꡢեƤ뤳ȤǤޤ"; +$net2ftp_messages["Upload files"] = "եΥåץ"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "3ˡǥե򥢥åץɤǤޤ: ɸΥåץɡåץɸ弫ưൡǽJavaץåȤˤ륢åץɡ"; +$net2ftp_messages["Download files"] = "եΥ"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "ե̾򥯥åƤΥե¨¤˥ɤ뤳ȤǤޤ
ʣΥե򥯥åƥɤȡ1Ĥΰ̥եˤƥɤޤ"; +$net2ftp_messages["Zip files"] = "եΰ"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "ե򰵽̤ FTPо¸ꡢŻҥ᡼뤳ȤǤޤ"; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "ԡư"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "ǥ쥯ȥ򷫤֤ǤޤΥƥġʥ֥ǥ쥯ȥȥեˤ⥳ԡưǤޤ"; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "̤FTPФؤΥԡư"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "ñˤʤ FTPФ˥ե򥤥ݡȤꡢʤ FTPФ̤ FTPФإե򥨥ݡȤ뤳ȤǤޤ"; +$net2ftp_messages["Rename and chmod"] = "ե̾ѹȵľѹ"; +$net2ftp_messages["Chmod handles directories recursively."] = "ǥ쥯ȥεľѹ򷫤֤Ǥޤ"; +$net2ftp_messages["View code with syntax highlighting"] = "դǥɽ"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHPǽ php.net ΥɥȤȥ󥯤Ƥޤ"; +$net2ftp_messages["Plain text editor"] = "ץ졼ƥȥǥ"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "֥饦ǥƥȤΤԽǤޤѹ¸ե FTPФžޤ"; +$net2ftp_messages["HTML editors"] = "HTMLǥ"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "ɥǥ"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "HTML PHP դɽԽǤޤ"; +$net2ftp_messages["Search for words or phrases"] = "ʸθ"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "ɽեե̾ǽѹե륵ǥե륿󥰤Ǥޤ"; +$net2ftp_messages["Calculate size"] = "η׻"; +$net2ftp_messages["Calculate the size of directories and files."] = "ǥ쥯ȥȥեΥ׻Ǥޤ"; + +$net2ftp_messages["FTP server"] = "FTP "; +$net2ftp_messages["Example"] = ""; +$net2ftp_messages["Port"] = "ݡ"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "桼̾"; +$net2ftp_messages["Password"] = "ѥ"; +$net2ftp_messages["Anonymous"] = "ƿ̾"; +$net2ftp_messages["Passive mode"] = "Passive ⡼"; +$net2ftp_messages["Initial directory"] = "ǥ쥯ȥ"; +$net2ftp_messages["Language"] = ""; +$net2ftp_messages["Skin"] = "ơ"; +$net2ftp_messages["FTP mode"] = "FTP⡼"; +$net2ftp_messages["Automatic"] = "ư"; +$net2ftp_messages["Login"] = ""; +$net2ftp_messages["Clear cookies"] = "åκ"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "FTPФϤƲ"; +$net2ftp_messages["Please enter a username."] = "桼̾ϤƲ"; +$net2ftp_messages["Please enter a password."] = "ѥɤϤƲ"; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "ԤΥ桼̾ȥѥɤϤƲ"; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "桼̾"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "ѥ"; +$net2ftp_messages["Login"] = ""; +$net2ftp_messages["Continue"] = "³"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "ڡ"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = ": ֥饦ܥ򥯥åȡΥԥ塼¾Υ桼 FTPФ˥뤳ȤǤƤޤޤ"; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "ɤˤϡƤΥ֥饦ΥɥĤɬפޤ"; +$net2ftp_messages["Close"] = "Ĥ"; +$net2ftp_messages["Click here to close this window"] = "򥯥åȤΥɥĤޤ"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "ǥ쥯ȥκ"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "ǥ쥯ȥ %1\$s ˺ޤ"; +$net2ftp_messages["New directory name:"] = "ǥ쥯ȥ̾:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "ǥ쥯ȥ %1\$s ޤ"; +$net2ftp_messages["Directory %1\$s could not be created."] = "ǥ쥯ȥ %1\$s 뤳ȤǤޤǤ"; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Ǥդ FTPޥɤ"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "ޥɤΥꥹ:"; +$net2ftp_messages["FTP server response:"] = "FTPФα:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "ǥ쥯ȥ̾ȥե̾ѹ"; +$net2ftp_messages["Old name: "] = "̾: "; +$net2ftp_messages["New name: "] = "̾: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "ե̾˥ɥå(.)ޤळȤϤǤޤ󡣤Υȥ %1\$s ˲̾ޤǤ"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s %2\$s ˲̾ޤ"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s %2\$s ˲̾뤳ȤϤǤޤ"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Ƥоݥǥ쥯ȥ"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "̤оݥǥ쥯ȥꤹˤϡΥƥȥܥåоݥǥ쥯ȥϤ \"Ƥоݥǥ쥯ȥ\" ܥ򥯥åƲ"; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ԡˡоݥǥ쥯ȥ꤬¸ߤƤʤФʤޤ"; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "оݥǥ쥯ȥ:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "ե̾ (֥ǥ쥯ȥμư)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "åץΥǥ쥯ȥ:"; +$net2ftp_messages["Files"] = "ե"; +$net2ftp_messages["Archives"] = "̥ե"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Ϥե뤬 FTP Фžޤ"; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Ϥ̥ե뤬व졢Υե뤬 FTP Фžޤ"; +$net2ftp_messages["Add another"] = "ɲ"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "ե̾ (֥ǥ쥯ȥμư)"; + +$net2ftp_messages["Choose a directory"] = "ǥ쥯ȥ"; +$net2ftp_messages["Please wait..."] = "Ф餯Ԥ..."; +$net2ftp_messages["Uploading... please wait..."] = "åץ... Ф餯Ԥ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "åץɤƻ %1\$s <\/b>Ķ褦ʤС꾮/ʤեǤľɬפޤ"; +$net2ftp_messages["This window will close automatically in a few seconds."] = "ΥɥϿø˼ưĤޤ"; +$net2ftp_messages["Close window now"] = "Ĥ"; + +$net2ftp_messages["Upload files and archives"] = "եȰ̥եΥåץ"; +$net2ftp_messages["Upload results"] = "åץɷ"; +$net2ftp_messages["Checking files:"] = "եΥå:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "ե FTP Фž:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "̥եषե FTP Фž:"; +$net2ftp_messages["Upload more files and archives"] = "¾ΥեȰ̥ե⥢åץɤ"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = ":"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "1ĤΥեξ¥ net2ftp %1\$s ޤǡ PHP %2\$s ޤǤ¤Ƥޤ"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "֤ξ¤ %1\$s Ǥ"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTP ž⡼ (ASCII ޤ Хʥ) ϥե̾γĥҤˤäƼưŪ˷ꤵޤ"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "žƱ̾Υե뤬Ǥ¸ߤϾ񤭤ޤ"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "ե %1\$s ɽ"; +$net2ftp_messages["View image %1\$s"] = " %1\$s ɽ"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Macromedia ShockWave Flash ࡼӡ %1\$s ɽ"; +$net2ftp_messages["Image"] = ""; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "դɽ Luminous 鶡뤵Ƥޤ"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "¸ˤϡξDZå '̾դƲ¸...' 򤷤Ƥ"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "̥ե륨ȥ"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "FTP оǼΥե򰵽:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email ˰̥եź:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = ": եƿ̾Ǥޤ󡣤ʤ IP ɥ쥹 email ɲäޤ"; +$net2ftp_messages["Some additional comments to add in the email:"] = "email ɲä륳:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "̥եΥե̾ϤƤޤ򥯥åƥե̾ϤƲ"; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Ϥ줿 email ɥ쥹 (%1\$s) ͭǤϤޤ
ν񼰤§äɥ쥹ϤƲ username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/languages.inc.php b/ehcp/net2ftp/languages/languages.inc.php new file mode 100644 index 0000000..bf0b41c --- /dev/null +++ b/ehcp/net2ftp/languages/languages.inc.php @@ -0,0 +1,245 @@ +\n"; + + while (list($key,$value) = each($languageArray)) { + // $key loops over "en", "fr", "nl", ... + // $value will be an array like $value["name"] = "English" and $value["file"] = "en.inc.php" + if ($key == $currentlanguage) { $selected = "selected=\"selected\""; } + else { $selected = ""; } + echo "\n"; + } // end while + + echo "\n"; + +} // End function printLanguageSelect + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function includeLanguageFile() { + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_messages; + $languageArray = getLanguageArray(); + +// If language exists, include the language file + if (array_key_exists($net2ftp_globals["language"], $languageArray) == true) { + $languageFile = glueDirectories($net2ftp_globals["application_languagesdir"], $languageArray[$net2ftp_globals["language"]]["file"]); + require_once($languageFile); + } + +// If it does not exist, use the default language nr "en" (English) + else { + $net2ftp_globals["language"] = "en"; + $languageFile = glueDirectories($net2ftp_globals["application_languagesdir"], $languageArray[$net2ftp_globals["language"]]["file"]); + require_once($languageFile); + } + +} // end function includeLanguageFile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function __() { + +// -------------- +// This function returns a translated message; the core standard function used is sprintf (see manual) +// Input: - from function argument: message name $args[0] and variable parts in the message $args[1], $args[2],... +// (there is a variable nr of variable parts) +// - from globals: the array of messages $message +// Output: string in the language indicated in $net2ftp_language +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals, $net2ftp_messages; + + +// ------------------------------------------------------------------------- +// Get the arguments of this function +// $args[0] contains the messagename +// $args[1], $args[2], ... contain the variables in the message +// ------------------------------------------------------------------------- + $numargs = func_num_args(); + $args = func_get_args(); + $messagename = $args[0]; + +// ------------------------------------------------------------------------- +// Create the argument for the sprintf function +// Aim is to have something like: sprintf($string_with_percents, $args[1], $args[2], ...); +// As there is a variable nr of arguments in the function __, there is also a variable +// nr of arguments in sprintf, and this must be constructed with a loop +// ------------------------------------------------------------------------- + +// Check if the message with that $messagename exists + if (@array_key_exists($messagename, $net2ftp_messages)) { $string_with_percents = $net2ftp_messages[$messagename]; } + else { return "MESSAGE NOT FOUND"; } + + $sprintf_argument = "\$translated_string = sprintf(\$string_with_percents"; + + for ($i=1; $i<$numargs; $i++) { + $sprintf_argument .= ", @htmlentities(\$args[$i], ENT_QUOTES)"; + } // end for + + $sprintf_argument .= ");"; + +// ------------------------------------------------------------------------- +// Run the sprintf function +// ------------------------------------------------------------------------- + eval($sprintf_argument); + + return $translated_string; + +} // end function __ + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/nl.inc.php b/ehcp/net2ftp/languages/nl.inc.php new file mode 100644 index 0000000..78a2bc7 --- /dev/null +++ b/ehcp/net2ftp/languages/nl.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "De map %1\$s bestaat niet of kon niet worden geselecteerd, hierom is de map %2\$s weergegeven."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Uw hoofd map %1\$s bestaat niet of kon niet worden geselecteerd."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "De map %1\$s kon niet worden geselecteerd - wellicht heeft u onvoldoende rechten om deze in te zien, of het bestaat niet."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Regels welke verboden termen bevatten kunnen niet worden beheerd via net2ftp. Dit is om te voorkomen dat PayPal of Ebay scams geupload worden met net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Bestanden die te groot zijn kunnen niet worden gedownload, geupload, gekopieerd, verplaatst, ingepakt, uitgepakt of bewerkt worden. Ze kunnen alleen hernoemd, gewijzigd qua rechten of verwijderd worden."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Voer %1\$s uit in een nieuw venster"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Kies minimaal n map of bestand!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "De FTP server %1\$s staat niet in de lijst met toegestane FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "De FTP server %1\$s staat in de lijst met verboden FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "De FTP server poort %1\$s mag niet worden gebruikt."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Uw IP adres (%1\$s) staat niet in de lijst met toegestane IP adressen"; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Uw IP adres (%1\$s) staat in de lijst met verboden IP adressen."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "De tabel net2ftp_users bevat dubbele rijen."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "U heeft geen beheerders gebruikersnaam of wachtwoord opgegeven."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Verkeerde gebruikersnaam of wachtwoord ingevoerd, probeer het nogmaals."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Het achterhalen van uw IP adres is mislukt."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tabel net2ftp_log_consumption_ipaddress bevat gelijke rijen."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tabel net2ftp_log_consumption_ftpserver bevat gelijke rijen."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "De variabele consumption_ipaddress_datatransfer is geen cijfer."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tabel net2ftp_log_consumption_ipaddress kan niet worden vernieuwd."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tabel net2ftp_log_consumption_ipaddress bevat gelijke gegevens."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tabel net2ftp_log_consumption_ftpserver kan niet worden vernieuwd."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tabel net2ftp_log_consumption_ftpserver bevat gelijke gegevens."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Tabel net2ftp_log_access kon niet worden geupdate."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Tabel net2ftp_log_access bevat dubbele rijen."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kan geen verbinding maken met de MySQL database. Controleer uw MySQL database instellingen in net2ftp's configuratie bestand settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kan de MySQL database niet selecteren. Controleer uw MySQL database instellingen in net2ftp's configuratie bestand settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Er heeft zich een fout voorgedaan"; +$net2ftp_messages["Go back"] = "Ga terug"; +$net2ftp_messages["Go to the login page"] = "Ga naar de login pagina"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Verbinding maken met de FTP server %1\$s op poort %2\$s is mislukt.

Weet u zeker dat dit het correcte adres is van de FTP server? Deze is vaak verschillend van de HTTP (web) server. Neem a.u.b. contact op met uw ISP helpdesk of systeembeheerder voor hulp.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Inloggen op FTP server %1\$s met gebruikersnaam %2\$s is mislukt.

Weet u zeker dat uw gebruikersnaam en wachtwoord correct zijn? Neem a.u.b. contact op met uw ISP helpdesk of systeembeheerder voor hulp.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Het overschakelen naar passieve mode op de FTP server %1\$s is mislukt."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Verbinding met de tweede (doel) FTP server %1\$s op poort %2\$s is mislukt.

Weet u zeker dat dit het correcte adres is van de FTP server? Deze is vaak verschillend van de HTTP (web) server. Neem a.u.b. contact op met uw ISP helpdesk of systeembeheerder voor hulp.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Inloggen op tweede (doel) FTP server %1\$s met gebruikersnaam %2\$s is mislukt.

Weet u zeker dat uw gebruikersnaam en wachtwoord correct zijn? Neem a.u.b. contact op met uw ISP helpdesk of systeembeheerder voor hulp.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Het overschakelen naar passieve mode op de tweede (doel) FTP server %1\$s is mislukt."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Het hernoemen van de map of bestand %1\$s in %2\$s is mislukt"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Het uitvoeren van het commando %1\$s is mislukt. Let op dat het CHMOD commando alleen beschikbaar is op Unix FTP servers, niet op Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Map %1\$s is successvol ge-chmod naar %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Bezig met verwerken van regels in map %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Bestand %1\$s is successvol ge-chmod naar %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle geselecteerde mappen en bestanden zijn verwerkt."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Het verwijderen van de map %1\$s is mislukt."; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Het verwijderen van het bestand %1\$s is mislukt"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Het creren van de map %1\$s is mislukt"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Het creren van het tijdelijke bestand is mislukt"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Het openen van bestand %1\$s van de FTP server, en op te slaan als tijdelijk bestand %2\$s is mislukt.
Controleer de rechten van de map %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Het openen van het tijdelijke bestand is mislukt. Controleer de rechten van de map %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Het lezen van het tijdelijke bestand is mislukt"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Het sluiten van het tijdelijke bestand is mislukt"; +$net2ftp_messages["Unable to delete the temporary file"] = "Het verwijderen van het tijdelijke bestand is mislukt"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Het creren van het tijdelijke bestand is mislukt. Controleer de rechten van de map %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Het openen van het tijdelijke bestand is mislukt. Controleer de rechten van de map %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Het schrijven van de regel naar het bestand %1\$s is mislukt.
Controleer de rechten van de map %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Het sluiten van het tijdelijke bestand is mislukt"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Het opslaan van de bestand %1\$s op de FTP server is mislukt.
U heeft mogelijk geen schrijf rechten in deze map."; +$net2ftp_messages["Unable to delete the temporary file"] = "Het verwijderen van het tijdelijke bestand is mislukt"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Map %1\$s wordt verwerkt"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "De doel map %1\$s is de zelfde als, of is een onderliggende map van de bron map %2\$s, daarom wordt deze map overgeslagen"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "De map %1\$s bevat een verboden term, de map zal worden overgeslagen"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "De map %1\$s bevat een verboden term, de verplaatsing wordt afgebroken"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Het aanmaken van de map %1\$s is mislukt. Deze bestaat mogelijk al. De kopiren/verplaatsen procedure wordt voortgezet..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Doelmap %1\$s is aangemaakt"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "De map %1\$s kon niet worden geselecteerd, de map wordt overgeslagen"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Het verwijderen van de onderliggende map %1\$s is mislukt - deze is mogelijk niet leeg"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Onderliggende map %1\$s verwijderd"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Onderliggende map %1\$s verwijderd"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Verwerken van map %1\$s voltooid"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Het doel van het bestand %1\$s is het zelfde als de bron, daarom wordt dit bestand overgeslagen"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Het bestand %1\$s bevat een verboden term en zal worden overgeslagen"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Het bestand %1\$s bevat een verboden term en zal niet verplaatst worden"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Het bestand %1\$s is te groot om gekopieerd te worden en wordt overgeslagen"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Het bestand %1\$s is te groot om verplaatst te worden en wordt overgeslagen"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Het kopiren van het bestand %1\$s is mislukt"; +$net2ftp_messages["Copied file %1\$s"] = "Bestand %1\$s gekopieerd"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Kan het bestand %1\$s niet verplaatsen"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Bestand %1\$s verplaatst"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Het verwijderen van het bestand %1\$s is mislukt"; +$net2ftp_messages["Deleted file %1\$s"] = "Bestand %1\$s verwijderd"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alle geselecteerde mappen en bestanden zijn verwerkt."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Het kopiren van het externe bestand %1\$s naar het locale bestand via FTP mode %2\$s is mislukt"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Het verwijderen van het bestand %1\$s is mislukt"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Het bestand is te groot om verstuurd te worden."; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Dagelijkse limiet bereikt: het bestand %1\$s wordt niet verstuurd"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Het kopiren van het locale bestand naar het externe bestand %1\$s via FTP mode %2\$s is mislukt"; +$net2ftp_messages["Unable to delete the local file"] = "Het verwijderen van het locale bestand is mislukt"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Het verwijderen van het tijdelijke bestand is mislukt"; +$net2ftp_messages["Unable to send the file to the browser"] = "Het verzenden van het bestand naar de browser is mislukt"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Het creren van het tijdelijke bestand is mislukt"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Het zip bestand is opgeslagen op de FTP server als %1\$s"; +$net2ftp_messages["Requested files"] = "Aangevraagde bestanden"; + +$net2ftp_messages["Dear,"] = "Geachte,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Iemand heeft gevraagd om het bestand dat als bijlage is toegevoegd dit email adres (%1\$s) te versturen."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Als u hier niks van af weet, of als u de afzender niet vertrouwt, verwijder dan a.u.b. deze email zonder de bijlage te openen."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Als u de bijlage niet opent, kan uw computer niet worden beschadigd."; +$net2ftp_messages["Information about the sender: "] = "Informatie over de afzender: "; +$net2ftp_messages["IP address: "] = "IP adres: "; +$net2ftp_messages["Time of sending: "] = "Tijdstip van verzending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Verstuurd met het net2ftp programma vanaf de website: "; +$net2ftp_messages["Webmaster's email: "] = "Email van de webmaster: "; +$net2ftp_messages["Message of the sender: "] = "Bericht van de afzender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is vrije software, uitgebracht onder de GNU/GPL licentie. Ga voor meer informatie naar http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Het zip bestand is verzonden naar %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Het bestand %1\$s is te groot. Dit bestand zal niet worden geupload."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Het bestand %1\$s bevat een verboden term. Dit bestand zal niet worden geupload."; +$net2ftp_messages["Could not generate a temporary file."] = "Het creren van het tijdelijke bestand is mislukt."; +$net2ftp_messages["File %1\$s could not be moved"] = "Het bestand %1\$s kon niet worden verplaatst"; +$net2ftp_messages["File %1\$s is OK"] = "Het bestand %1\$s is OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Het verplaatsen van het geuploade bestand naar de tijdelijke map is mislukt.

De systeembeheerder van deze website moet de /temp map van net2ftp chmod-den naar 777."; +$net2ftp_messages["You did not provide any file to upload."] = "U heeft geen bestand opgegeven dat moet worden geupload."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Het bestand %1\$s kon niet worden verzonden naar de FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Het bestand %1\$s is verzonden naar de FTP server via FTP mode %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Bestanden worden naar de FTP server verzonden"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Het archief nummer %1\$s: %2\$s wordt verwerkt"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archief %1\$s is niet verwerkt omdat de extensie niet is herkent. Op dit moment worden alleen zip, tar, tgz and gz archieven ondersteund."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Het is niet mogeljk bestanden en mappen uit het archief te halen."; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Het archief bevat bestandsnamen met ../ of ..\\ - niet toegestaan"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Map %1\$s aangemaakt"; +$net2ftp_messages["Could not create directory %1\$s"] = "Kan de map %1\$s niet aanmaken"; +$net2ftp_messages["Copied file %1\$s"] = "Bestand %1\$s verstuurd"; +$net2ftp_messages["Could not copy file %1\$s"] = "Kon bestand %1\$s niet versturen"; +$net2ftp_messages["Unable to delete the temporary directory"] = "De tijdelijke map kon niet verwijderd worden"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Het tijdelijke bestand %1\$s kon niet verwijderd worden"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Het uitvoeren van het commando %1\$s is mislukt"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Uw opdracht is gestopt"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "De opdracht die u probeerde uit te voeren met net2ftp duurde langer dan de toegestane %1\$s seconden, en is daarom gestopt."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Deze tijd limiet garandeert een eerlijk gebruik van de web server voor iedereen."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Probeer uw opdracht op te splitsen in lichtere opdrachten: kies een kleiner aantal bestanden, en laat de grotere bestanden weg."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Indien het voor u echt nodig is dat net2ftp zware opdrachten kan uitvoeren die veel tijd nemen, overweeg dan om net2ftp op uw eigen server te installeren."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "U heeft geen tekst opgegeven om te worden verzonden met de email!"; +$net2ftp_messages["You did not supply a From address."] = "U heeft geen afzender adres opgegeven."; +$net2ftp_messages["You did not supply a To address."] = "U heeft geen ontvangst adres opgegeven."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "In verband met technische problemen kon de email naar %1\$s niet worden verzonden."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Kan SQL query niet uitvoeren."; +$net2ftp_messages["Unable to open the system log."] = "Kan het systeemlogboekbestand niet openen."; +$net2ftp_messages["Unable to write a message to the system log."] = "Kan geen regel wegschrijven in het systeemlogboekbestand."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Geef uw gebruikersnaam en wachtwoord op voor FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "U heeft geen inlog gegevens opgegeven.
Klik hieronder op \"Ga naar de login pagina\" om in te loggen."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "De toegang tot de net2ftp Admin panel is uitgeschakeld, omdat er geen wachtwoord is opgegeven in het bestand settings.inc.php. Voeg een wachtwoord toe in dat bestand, en vernieuw deze pagina."; +$net2ftp_messages["Please enter your Admin username and password"] = "Geef a.u.b. uw Admin gebruikersnaam en wachtwoord op"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "U heeft geen inlog gegevens opgegeven.
Klik hieronder op \"Ga naar de login pagina\" om in te loggen."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "De gebruikersnaam en wachtwoord voor de Admin panel is ongeldig. De gebruikersnaam en wachtwoord kan worden ingesteld in het bestand settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blauw"; +$net2ftp_messages["Grey"] = "Grijs"; +$net2ftp_messages["Black"] = "Zwart"; +$net2ftp_messages["Yellow"] = "Geel"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Map"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML bestand"; +$net2ftp_messages["Java source file"] = "Java source bestand"; +$net2ftp_messages["JavaScript file"] = "JavaScript bestand"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Tekst bestand"; +$net2ftp_messages["Bitmap file"] = "Bitmap bestand"; +$net2ftp_messages["GIF file"] = "GIF bestand"; +$net2ftp_messages["JPEG file"] = "JPEG bestand"; +$net2ftp_messages["PNG file"] = "PNG bestand"; +$net2ftp_messages["TIF file"] = "TIF bestand"; +$net2ftp_messages["GIMP file"] = "GIMP bestand"; +$net2ftp_messages["Executable"] = "Uitvoerbaar bestand"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentatie"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio afbeelding"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project bestand"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentatie"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentatie"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x bestand"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail bestand"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "ARC archief"; +$net2ftp_messages["ARJ archive"] = "ARJ archief"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archief"; +$net2ftp_messages["TAR archive"] = "TAR archief"; +$net2ftp_messages["Zip archive"] = "Zip archief"; +$net2ftp_messages["MOV movie file"] = "MOV film bestand"; +$net2ftp_messages["MPEG movie file"] = "MPEG film bestand"; +$net2ftp_messages["Real movie file"] = "Real film bestand"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime film bestand"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash bestand"; +$net2ftp_messages["Shockwave file"] = "Shockwave bestand"; +$net2ftp_messages["WAV sound file"] = "WAV geluids bestand"; +$net2ftp_messages["Font file"] = "Font bestand"; +$net2ftp_messages["%1\$s File"] = "%1\$s Bestand"; +$net2ftp_messages["File"] = "Bestand"; + +// getAction() +$net2ftp_messages["Back"] = "Terug"; +$net2ftp_messages["Submit"] = "Verzenden"; +$net2ftp_messages["Refresh"] = "Vernieuwen"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Iconen"; +$net2ftp_messages["List"] = "Lijst"; +$net2ftp_messages["Logout"] = "Uitloggen"; +$net2ftp_messages["Help"] = "Help"; +$net2ftp_messages["Bookmark"] = "Favoriet"; +$net2ftp_messages["Save"] = "Opslaan"; +$net2ftp_messages["Default"] = "Standaard"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licentie"; +$net2ftp_messages["Powered by"] = "Aangedreven door"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "U wordt nu doorgestuurd naar de forums van net2ftp. Deze forums zijn alleen voor net2ftp gerelateerde onderwerpen. Niet bedoeld voor algemene webhosting vragen."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functies"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Versie informatie"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Deze versie van net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "De laatste versie informatie kon niet worden opgehaald van de net2ftp server. Controleer de beveiligingsinstellingen van uw browser. Deze kunnen voorkomen dat een klein bestand van de net2ftp server geladen wordt."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Datum van:"; +$net2ftp_messages["to:"] = "tot:"; +$net2ftp_messages["Empty logs"] = "Leeg logs"; +$net2ftp_messages["View logs"] = "Bekijk logs"; +$net2ftp_messages["Go"] = "Ga"; +$net2ftp_messages["Setup MySQL tables"] = "Stel de MySQL tabellen in"; +$net2ftp_messages["Create the MySQL database tables"] = "Maak de MySQL tabellen aan"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functies"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "De handle van bestand %1\$s kon niet worden geopend."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Het bestand %1\$s kon niet worden geopend."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "De handle van bestand %1\$s kon niet worden gesloten."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "De verbinding naar de server %1\$s kon niet opgezet worden. Controleer uw database instellingen."; +$net2ftp_messages["Unable to select the database %1\$s."] = "De database %1\$s kon niet worden geselecteerd."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "De SQL query nr %1\$s kon niet worden uitgevoerd."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "De SQL query nr %1\$s is succesvol uitgevoerd."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Vul aub uw MySQL instellingen in:"; +$net2ftp_messages["MySQL username"] = "MySQL gebruikersnaam"; +$net2ftp_messages["MySQL password"] = "MySQL wachtwoord"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Deze SQL query zal worden uitgevoerd:"; +$net2ftp_messages["Execute"] = "Uitvoeren"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Gebruikte instellingen:"; +$net2ftp_messages["MySQL password length"] = "MySQL wachtwoord lengte"; +$net2ftp_messages["Results:"] = "Resultaten:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functies"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "De SQL query %1\$s kon niet worden uitgevoerd."; +$net2ftp_messages["No data"] = "Geen data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functies"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "De tabel %1\$s werd succesvol geleegd."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "De tabel %1\$s kon niet worden geleegd."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "De tabel %1\$s is succesvol geoptimaliseerd."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "De tabel %1\$s kon niet worden geoptimaliseerd."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Geavanceerde functies"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Ga"; +$net2ftp_messages["Disabled"] = "Uitgeschakeld"; +$net2ftp_messages["Advanced FTP functions"] = "Geavanceerde FTP functies"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Verstuur ruwe FTP commandos naar de FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Deze functie is alleen beschikbaar onder PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "Probleemoplossing functies"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Test de installatie van net2ftp op deze webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Test net2ftp op een FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test de net2ftp regel interpretatie regels"; +$net2ftp_messages["Translation functions"] = "Vertaal functies"; +$net2ftp_messages["Introduction to the translation functions"] = "Inleiding tot de vertaal functies"; +$net2ftp_messages["Extract messages to translate from code files"] = "Verkrijg de te vertalen berichten uit de code bestanden"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Kijk na of er nieuwe of verouderde berichten zijn"; + +$net2ftp_messages["Beta functions"] = "Beta functies"; +$net2ftp_messages["Send a site command to the FTP server"] = "Verstuur een site commando naar de FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: bescherm een map met een wachtwoord, maak speciale foutpagina's aan"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: voer een SQL query uit"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "De site commando functies zijn niet beschikbaar op deze webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "De Apache functies zijn niet beschikbaar op deze webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "De MySQL functies zijn niet beschikbaar op deze webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Onverwachte state2 string. De applicatie wordt onderbroken."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Test net2ftp op een FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Verbindings instellingen:"; +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["FTP server port"] = "FTP server poort"; +$net2ftp_messages["Username"] = "Gebruikersnaam"; +$net2ftp_messages["Password"] = "Wachtwoord"; +$net2ftp_messages["Password length"] = "Wachtwoord lengte"; +$net2ftp_messages["Passive mode"] = "Passieve mode"; +$net2ftp_messages["Directory"] = "Map"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Verbinding met de FTP server wordt aangemaakt: "; +$net2ftp_messages["Logging into the FTP server: "] = "Aan het inloggen: "; +$net2ftp_messages["Setting the passive mode: "] = "De passieve mode wordt gekozen: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Het FTP server system type wordt opgevraagd: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Huidige map wordt veranderd naar %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "De map van de FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Ruwe lijst van mappen en bestanden wordt aangevraagd: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Er wordt een tweede keer geprobeerd om een ruwe lijst van mappen en bestanden te krijgen: "; +$net2ftp_messages["Closing the connection: "] = "Verbinding wordt gesloten: "; +$net2ftp_messages["Raw list of directories and files:"] = "Ruwe lijst van mappen en bestanden:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Verkregen lijst van mappen en bestanden:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "niet OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test de net2ftp regel interpretatie regels"; +$net2ftp_messages["Sample input"] = "Voorbeeld invoer"; +$net2ftp_messages["Parsed output"] = "Verwerkte uitvoer"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Test de installatie van net2ftp op deze webserver"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Er wordt gecontroleerd of de FTP module van PHP is genstalleerd: "; +$net2ftp_messages["yes"] = "ja"; +$net2ftp_messages["no - please install it!"] = "nee - installeer de module!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "De rechten van de map op de webserver zullen worden nagekeken: een klein bestand zal worden weggeschreven naar de /temp directory en zal daarna worden verwijderd."; +$net2ftp_messages["Creating filename: "] = "Bestand wordt aangemaakt met naam: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Naam van het bestand: %1\$s"; +$net2ftp_messages["not OK"] = "niet OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "niet OK. Controleer de rechten van de map %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Bestand wordt in schrijf-mode geopend: "; +$net2ftp_messages["Writing some text to the file: "] = "Er wordt wat tekst weggeschreven naar het bestand: "; +$net2ftp_messages["Closing the file: "] = "Bestand wordt gesloten: "; +$net2ftp_messages["Deleting the file: "] = "Bestand wordt verwijderd: "; + +$net2ftp_messages["Testing the FTP functions"] = "Bezig met het testen van de FTP functies"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Bezig met aanmelden op een test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Verbinding met de FTP server wordt aangemaakt: "; +$net2ftp_messages["Logging into the FTP server: "] = "Aan het inloggen: "; +$net2ftp_messages["Setting the passive mode: "] = "De passieve mode wordt gekozen: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Het FTP server system type wordt opgevraagd: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Huidige map wordt veranderd naar %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "De map van de FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Ruwe lijst van mappen en bestanden wordt aangevraagd: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Er wordt een tweede keer geprobeerd om een ruwe lijst van mappen en bestanden te krijgen: "; +$net2ftp_messages["Closing the connection: "] = "Verbinding wordt gesloten: "; +$net2ftp_messages["Raw list of directories and files:"] = "Ruwe lijst van mappen en bestanden:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Verkregen lijst van mappen en bestanden:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "niet OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Opmerking: als u deze link gebruikt, vraagt een extra venster naar uw gebruikersnaam en wachtwoord."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Kies een map"; +$net2ftp_messages["Please wait..."] = "Even wachten..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Mappen die het teken \' in hun naam hebben kunnen niet correct worden afgebeeld. Ze kunnen alleen worden verwijderd. Kiest u a.u.b. een andere map."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "De dagelijkse limiet is bereikt: hierdoor kunt u geen gegevens meer versturen"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Om iedereen een eerlijk gebruik van deze webserver te garanderen, zijn de hoeveelheid data en script verwerkingstijd dagelijks beperkt. Zodra deze limiet is bereikt, kunt u nog wel door de FTP server bladeren, maar er geen bestanden vanaf/naartoe sturen."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Als u onbeperkt gebruik wil, neem dan contact op met de administrator."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nieuwe map"; +$net2ftp_messages["New file"] = "Nieuw bestand"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Geavanceerd"; +$net2ftp_messages["Copy"] = "Kopiren"; +$net2ftp_messages["Move"] = "Verplaatsen"; +$net2ftp_messages["Delete"] = "Verwijderen"; +$net2ftp_messages["Rename"] = "Hernoemen"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Inpakken"; +$net2ftp_messages["Size"] = "Grootte"; +$net2ftp_messages["Search"] = "Zoeken"; +$net2ftp_messages["Go to the parent directory"] = "Ga naar de bovenliggende map"; +$net2ftp_messages["Go"] = "Ga"; +$net2ftp_messages["Transform selected entries: "] = "Verwerk de geselecteerde reeks: "; +$net2ftp_messages["Transform selected entry: "] = "Verwerk het geselecteerde document: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Maak een nieuwe onderliggende map aan in de map %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Maak een nieuw bestand aan in de map %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Creeer gemakkelijk een website met behulp van kant en klare sjablonen"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Upload een nieuw bestand in de map %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload mappen en bestanden met een Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Installeer software pakketten (vereist PHP op de web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Ga naar de geavanceerde functies"; +$net2ftp_messages["Copy the selected entries"] = "Kopieer de geselecteerde reeksen"; +$net2ftp_messages["Move the selected entries"] = "Verplaats de geselecteerde reeksen"; +$net2ftp_messages["Delete the selected entries"] = "Verwijder de geselecteerde reeksen"; +$net2ftp_messages["Rename the selected entries"] = "Hernoem de geselecteerde reeksen"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod de geselecteerde reeks (werkt alleen op Unix/Linux/BSD servers)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Download een zip bestand die alle geselecteerde reeksen bevat"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip het geselecteerde archief op de FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip de geselecteerde reeks en sla deze op, of email deze"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Bereken de grootte van de geselecteerde reeks"; +$net2ftp_messages["Find files which contain a particular word"] = "Vind bestanden die een bepaald woord bevatten"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Klik om op %1\$s te sorteren in omgekeerde volgorde"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Klik om op %1\$s te sorteren in alfabetische volgorde"; +$net2ftp_messages["Ascending order"] = "Alfabetische volgorde"; +$net2ftp_messages["Descending order"] = "Omgekeerde volgorde"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Omhoog"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Klik hier om alle rijen te selecteren of deselecteren"; +$net2ftp_messages["All"] = "Alles"; +$net2ftp_messages["Name"] = "Naam"; +$net2ftp_messages["Type"] = "Type"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Eigenaar"; +$net2ftp_messages["Group"] = "Groep"; +$net2ftp_messages["Perms"] = "Rechten"; +$net2ftp_messages["Mod Time"] = "Gewijzigd Op"; +$net2ftp_messages["Actions"] = "Acties"; +$net2ftp_messages["Select the directory %1\$s"] = "Selecteer de map %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Selecteer het bestand %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Selecteer de symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Ga naar de map %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download het bestand %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Volg symlink %1\$s"; +$net2ftp_messages["View"] = "Bekijk"; +$net2ftp_messages["Edit"] = "Bewerk"; +$net2ftp_messages["Update"] = "Vernieuw"; +$net2ftp_messages["Open"] = "Open"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Bekijk de geaccentueerde bron van het bestand %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Bewerk de bron van het bestand %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Upload een nieuwere versie van het bestand %1\$s en voeg de wijzigingen samen"; +$net2ftp_messages["View image %1\$s"] = "Bekijk afbeelding %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Bekijk het bestand %1\$s vanaf uw HTTP web server"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Opmerking: Deze link werkt mogelijk niet als u geen eigen domeinnaam heeft.)"; +$net2ftp_messages["This folder is empty"] = "Deze map is leeg"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Mappen"; +$net2ftp_messages["Files"] = "Bestanden"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Niet herkende FTP uitvoer"; +$net2ftp_messages["Number"] = "Aantal"; +$net2ftp_messages["Size"] = "Grootte"; +$net2ftp_messages["Skipped"] = "Overgeslagen"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data verzonden vanaf dit IP adres vandaag"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data verzonden naar deze FTP server vandaag"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Taal:"; +$net2ftp_messages["Skin:"] = "Uiterlijk:"; +$net2ftp_messages["View mode:"] = "Bekijk mode:"; +$net2ftp_messages["Directory Tree"] = "Mappen volgorde"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Voer %1\$s uit in een nieuw venster"; +$net2ftp_messages["This file is not accessible from the web"] = "Dit bestand is niet via het web toegankelijk"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Dubbel klik om naar een onderliggende map te gaan:"; +$net2ftp_messages["Choose"] = "Kies"; +$net2ftp_messages["Up"] = "Omhoog"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Grootte van de geselecteerde mappen en bestanden"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "De totale grootte van de geselecteerde mappen en bestanden is:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Het aantal overgeslagen bestanden is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod mappen en bestanden"; +$net2ftp_messages["Set all permissions"] = "Wijzig alle rechten"; +$net2ftp_messages["Read"] = "Lezen"; +$net2ftp_messages["Write"] = "Schrijven"; +$net2ftp_messages["Execute"] = "Uitvoeren"; +$net2ftp_messages["Owner"] = "Eigenaar"; +$net2ftp_messages["Group"] = "Groep"; +$net2ftp_messages["Everyone"] = "Iedereen"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Om alle rechten gelijk te maken, specificeer deze rechten en klik op de knop \"Wijzig alle rechten\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Stel de rechten van me map %1\$s in op: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Stel de rechten van het bestand %1\$s in op: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Stel de rechten van de symlink %1\$s in op: "; +$net2ftp_messages["Chmod value"] = "Chmod waarde"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod ook de onderliggende mappen van deze map"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod ook alle bestanden in deze map"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Het chmod nummer %1\$s is buiten het limiet van 000-777. Probeert u het a.u.b. opnieuw."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Kies een map"; +$net2ftp_messages["Copy directories and files"] = "Kopieer mappen en bestanden"; +$net2ftp_messages["Move directories and files"] = "Verplaats mappen en bestanden"; +$net2ftp_messages["Delete directories and files"] = "Verwijder mappen en bestanden"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Weet u zeker dat u deze mappen en bestanden wilt verwijderen?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Alle onderliggende mappen zullen ook worden verwijderd!"; +$net2ftp_messages["Set all targetdirectories"] = "Stel alle doel mappen in"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Om een gemeenschappelijke doel map op te geven, voer die doel map in in de bovenstaande textbox, en klik op de knop \"Stel alle doel mappen in\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Opmerking: deze doel map moet reeds bestaan voordat er iets naar toe kan worden gekopieerd."; +$net2ftp_messages["Different target FTP server:"] = "Andere doel FTP server:"; +$net2ftp_messages["Username"] = "Gebruikersnaam"; +$net2ftp_messages["Password"] = "Wachtwoord"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Laat leeg als u de bestanden naar de zelfde FTP server wilt kopiren."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Als u de bestanden naar een andere FTP server wilt kopiren, voert u dan de login gegevens in."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Laat leeg als u de bestanden naar de zelfde FTP server wilt kopiren."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Als u de bestanden naar een andere FTP server wilt kopiren, voert u dan de login gegevens in."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopieer map %1\$s naar:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Verplaats map %1\$s naar:"; +$net2ftp_messages["Directory %1\$s"] = "Map %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopieer bestand %1\$s naar:"; +$net2ftp_messages["Move file %1\$s to:"] = "Verplaats bestand %1\$s naar:"; +$net2ftp_messages["File %1\$s"] = "Bestand %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopieer symlink %1\$s naar:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Verplaats symlink %1\$s naar:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Doel map:"; +$net2ftp_messages["Target name:"] = "Doel naam:"; +$net2ftp_messages["Processing the entries:"] = "Verwerk de reeks:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Creeer een website in 4 makkelijke stappen"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Bestanden worden gekopieerd"; +$net2ftp_messages["Edit your pages"] = "Bewerk uw paginas"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Klik op de afbeelding om de details te bekijken van een template."; +$net2ftp_messages["Back to the Browse screen"] = "Terug naar het Browse scherm"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Klik op deze afbeelding om de details te bekijken van deze template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "De template bestanden zullen worden gecopieerd naar de FTP server. Bestaande bestanden met dezelfde naam zullen worden overschreven. Wil u verdergaan?"; +$net2ftp_messages["Install template to directory: "] = "Installeer template naar map: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Grootte"; +$net2ftp_messages["Preview page"] = "Bekijk pagina"; +$net2ftp_messages["opens in a new window"] = "wordt in een nieuw venster geopend"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Een ogenblikje geduld; de template bestanden worden getransfereerd naar uw server: "; +$net2ftp_messages["Done."] = "Klaar."; +$net2ftp_messages["Continue"] = "Ga verder"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Bewerk pagina"; +$net2ftp_messages["Browse the FTP server"] = "Blader doorheen de FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Voeg deze link toe aan uw Favorieten om terug te kunnen komen naar deze pagina!"; +$net2ftp_messages["Edit website at %1\$s"] = "Bewerk website op %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: rechter muisklik op de link, en kies \"Toevoegen aan Favorieten...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: rechter muisklik op de link, en kies \"Bladwijzer van deze pagina maken...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WAARSCHUWING: Het aanmaken van de map %1\$s is mislukt. Deze bestaat mogelijk al. Het programma wordt voortgezet..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Doelmap %1\$s is aangemaakt"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WAARSCHUWING: Het kopiren van het bestand %1\$s is mislukt. Het programma wordt voortgezet..."; +$net2ftp_messages["Copied file %1\$s"] = "Bestand %1\$s gekopieerd"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Het openen van het template bestand is mislukt"; +$net2ftp_messages["Unable to read the template file"] = "Het lezen van het template bestand is mislukt"; +$net2ftp_messages["Please specify a filename"] = "Kiest u a.u.b. een bestandsnaam"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: Dit bestand is nog niet opgeslagen"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Opgeslagen om %1\$s met de mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Dit bestand kon niet worden opgeslagen"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Map: "; +$net2ftp_messages["File: "] = "Bestand: "; +$net2ftp_messages["New file name: "] = "Nieuwe bestandsnaam: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Opmerking: als u verandert van textarea worden de wijzigingen opgeslagen"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Doorzoek mappen en bestanden"; +$net2ftp_messages["Search again"] = "Zoek opnieuw"; +$net2ftp_messages["Search results"] = "Zoek resultaten"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Kies a.u.b. een geldig zoek woord of uitdrukking."; +$net2ftp_messages["Please enter a valid filename."] = "Kies a.u.b. een geldig bestandsnaam."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Kies a.u.b. een geldig bestands grootte in de \"van\" textbox, bijvoorbeeld 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Kies a.u.b. een geldig bestands grootte in de \"tot\" textbox, bijvoorbeeld 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Kies a.u.b. een geldige datum in het Y-m-d formaat in de \"van\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Kies a.u.b. een geldige datum in het Y-m-d formaat in de \"tot\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Het woord %1\$s is niet gevonden in de geselecteerde mappen en bestanden."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Het woord %1\$s is gevonden in de volgende bestanden:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Zoek naar een woord of uitdrukking"; +$net2ftp_messages["Case sensitive search"] = "Zoek hoofdletter gevoelig"; +$net2ftp_messages["Restrict the search to:"] = "Beperk het zoeken tot:"; +$net2ftp_messages["files with a filename like"] = "bestanden met een bestandsnaam die lijken op"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard karakter is *)"; +$net2ftp_messages["files with a size"] = "bestand met een grootte"; +$net2ftp_messages["files which were last modified"] = "bestanden die als laatst zijn gewijzigd"; +$net2ftp_messages["from"] = "van"; +$net2ftp_messages["to"] = "tot"; + +$net2ftp_messages["Directory"] = "Map"; +$net2ftp_messages["File"] = "Bestand"; +$net2ftp_messages["Line"] = "Regel"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Bekijk"; +$net2ftp_messages["Edit"] = "Bewerk"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Bekijk de geaccentueerde bron van het bestand %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Bewerk de bron van het bestand %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Installeer software pakketten"; +$net2ftp_messages["Unable to open the template file"] = "Het openen van het template bestand is mislukt"; +$net2ftp_messages["Unable to read the template file"] = "Het lezen van het template bestand is mislukt"; +$net2ftp_messages["Unable to get the list of packages"] = "Lijst van pakketten kon niet worden opgehaald"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "Het net2ftp installatie script is gekopieerd naar de FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Dit script draait op uw webserver en vereist dat PHP geinstalleerd is."; +$net2ftp_messages["In order to run it, click on the link below."] = "Klik op onderstaande link om het uit te voeren."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp heeft geprobeerd de mapping tussen de FTP server en de Webserver te bepalen."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Indien dit onjuist is, voer dan handmatig de URL in in uw webbrowser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload mappen en bestanden met een Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Eenmaal ingelogd kunt u:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigeer op de FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Eenmaal ingelogd, kunt u van map naar map navigeren en alle submappen en inhoud zien."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Er zijn 3 verschillende manieren op bestanden te uploaden: via het standaard upload formulier, de upload-and-unzip functionaliteit, en via de Java Applet."; +$net2ftp_messages["Download files"] = "Download bestanden"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Klik op een bestandsnaam om snel 1 bestand te downloaden.
Selecteer meerdere bestanden en klik op Download; De geselecteerde bestanden worden automatisch in een zip bestand verstuurd."; +$net2ftp_messages["Zip files"] = "Zip bestanden"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... en sla het zip archief op op de server, of email het naar iemand."; +$net2ftp_messages["Unzip files"] = "Unzip bestanden"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Verschillende formaten worden ondersteund: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Installeer software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Kies van een lijst met populaire applicaties (PHP vereist)."; +$net2ftp_messages["Copy, move and delete"] = "Kopieer, verplaats en verwijder"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Kopieer of verplaats naar een 2e FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handig om bestanden van je FTP server te importeren of exporteren naar een andere FTP server."; +$net2ftp_messages["Rename and chmod"] = "Hernoem en wijzig rechten"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod verwerkt mappen recursief."; +$net2ftp_messages["View code with syntax highlighting"] = "Bekijk code met syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functies zijn gelinkt aan de documentatie op php.net."; +$net2ftp_messages["Plain text editor"] = "Normale text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Wijzig text vanuit je browser; Iedere keer dat je wijzigingen opslaat is het nieuwe bestand geupload naar de server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Wijzig HTML via een What-You-See-Is-What-You-Get (WYSIWYG) formulier; Er zijn 2 verschillende editors om uit te kiezen."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Wijzig HTML en PHP in een editor met syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Zoek naar woorden of termen."; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtereer bestanden gebaseerd op bestandsnaam, laatst aangepast datum en/of bestandsgrootte."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Bereken de totale grootte van de mappen en bestanden."; + +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["Example"] = "Voorbeeld"; +$net2ftp_messages["Port"] = "Poort"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Gebruikersnaam"; +$net2ftp_messages["Password"] = "Wachtwoord"; +$net2ftp_messages["Anonymous"] = "Anoniem"; +$net2ftp_messages["Passive mode"] = "Passieve mode"; +$net2ftp_messages["Initial directory"] = "Begin map"; +$net2ftp_messages["Language"] = "Taal"; +$net2ftp_messages["Skin"] = "Uiterlijk"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatisch"; +$net2ftp_messages["Login"] = "Inloggen"; +$net2ftp_messages["Clear cookies"] = "Verwijder cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Gelieve een FTP server in te vullen."; +$net2ftp_messages["Please enter a username."] = "Gelieve een gebruikersnaam in te vullen."; +$net2ftp_messages["Please enter a password."] = "Gelieve een paswoord in te vullen."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Gelieve uw beheerders gebruikersnaam en wachtwoord in te vullen."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Gelieve uw gebruikersnaam en wachtwoord voor de FTP server in te vullen %1\$s."; +$net2ftp_messages["Username"] = "Gebruikersnaam"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Uw sessie is verlopen; vul nogmaals uw gebruikersnaam en wachtwoord in voor FTP server %1\$s om door te gaan."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Uw IP adres is veranderd; vul nogmaals uw gebruikersnaam en wachtwoord in voor FTP server %1\$s om door te gaan."; +$net2ftp_messages["Password"] = "Wachtwoord"; +$net2ftp_messages["Login"] = "Inloggen"; +$net2ftp_messages["Continue"] = "Ga verder"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "U bent afgemeld van de FTP server. Om u opnieuw aan te melden, klikt u hier."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Let op: andere gebruikers van deze computer kunnen de 'back' knop van uw browser gebruiken om in te loggen op de FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Om dit te voorkomen moet u alle browser vensters sluiten."; +$net2ftp_messages["Close"] = "Sluiten"; +$net2ftp_messages["Click here to close this window"] = "Klik hier om dit venster te sluiten"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Creer nieuwe map"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "De nieuwe map wordt gecreerd in %1\$s."; +$net2ftp_messages["New directory name:"] = "Nieuwe map naam:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "De map %1\$s is succesvol gecreerd."; +$net2ftp_messages["Directory %1\$s could not be created."] = "De map %1\$s kon niet worden aangemaakt."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Verstuur ruwe FTP commandos"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Lijst van commandos:"; +$net2ftp_messages["FTP server response:"] = "FTP server antwoord:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Hernoem mappen en bestanden"; +$net2ftp_messages["Old name: "] = "Oude naam: "; +$net2ftp_messages["New name: "] = "Nieuwe naam: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "De nieuwe naam mag geen punten bevatten. Deze reeks is niet hernoemt naar %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "De niewe naam mag geen verboden termen bevatten. Het bestand is niet hernoemd naar: %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s is succesvol hernoemd naar %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s is niet hernoemd naar %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archieven"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Bezig met ophalen archief %1\$s van %2\$s van de FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Kon archief %1\$s niet ophalen van de FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Stel alle doel mappen in"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Om een gemeenschappelijke doel map op te geven, voer die doel map in in de bovenstaande textbox, en klik op de knop \"Stel alle doel mappen in\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Opmerking: deze doel map moet reeds bestaan voordat er iets naar toe kan worden gekopieerd."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archief %1\$s naar:"; +$net2ftp_messages["Target directory:"] = "Doel map:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Gebruik map structuur (creert onderliggende mappen automatisch)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Upload naar map:"; +$net2ftp_messages["Files"] = "Bestanden"; +$net2ftp_messages["Archives"] = "Archieven"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Deze opgegeven bestanden worden naar de FTP server verzonden."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Deze opgegeven archieven zullen worden uitgepakt, en de inhoud zal naar de FTP server worden verzonden"; +$net2ftp_messages["Add another"] = "Voeg nog een toe"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Gebruik map structuur (creert onderliggende mappen automatisch)"; + +$net2ftp_messages["Choose a directory"] = "Kies een map"; +$net2ftp_messages["Please wait..."] = "Even wachten..."; +$net2ftp_messages["Uploading... please wait..."] = "Aan het uploaden... even wachten..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Als het uploaden langer duurt dan de toegestane %1\$s<\/b> seconden, moet u het opnieuw proberen met minder/kleinere bestanden."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Dit venster wordt automatisch gesloten in enkele seconden."; +$net2ftp_messages["Close window now"] = "Sluit dit venster"; + +$net2ftp_messages["Upload files and archives"] = "Upload bestanden en archieven"; +$net2ftp_messages["Upload results"] = "Upload resultaten"; +$net2ftp_messages["Checking files:"] = "Controleren van bestanden:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Bestanden worden naar de FTP server verzonden:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Archieven worden uitgepakt en verzonden naar de FTP server:"; +$net2ftp_messages["Upload more files and archives"] = "Upload meer bestanden en archieven"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Beperkingen:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "De maximale grootte van de bestanden zijn beperkt door net2ftp tot %1\$s en door PHP tot %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "De maximale uitvoeringstijd is %1\$s seconden"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "De FTP verzend mode (ASCII of BINARY) wordt automatisch gedetecteerd, afhankelijk van de bestandsnaam extensie"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Als het doel bestand al bestaat, wordt deze overschreven"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Bekijk bestand %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Bekijk afbeelding %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Bekijk Macromedia ShockWave Flash video %1\$s"; +$net2ftp_messages["Image"] = "Foto"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting aangedreven door Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Voor het opslaan van deze afbeelding: rechter muisklik op de afbeelding, en kies 'Afbeelding opslaan als...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip reeks"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Sla het zip bestand op de FTP server op als:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email het zip bestand als bijlage naar:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Let op dat dit niet anoniem gebeurd: uw IP adres, en de tijd waarop deze is verzonden wordt toegevoegd aan de email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Voeg een opmerking toe aan deze email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "U heeft geen bestandsnaam opgegeven voor het zip bestand. Ga terug, en geef deze op."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Het door u opgegeven email adres (%1\$s) is ongeldig.
Gebruik het formaat gebruikersnaam@domein.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/pl.inc.php b/ehcp/net2ftp/languages/pl.inc.php new file mode 100644 index 0000000..44c37f7 --- /dev/null +++ b/ehcp/net2ftp/languages/pl.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Uruchom %1\$s w nowym oknie"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Wybierz przynajmniej jeden plik lub katalog!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Serwer %1\$s Nie znajduje si na licie dozwolonych serwerw."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Serwer %1\$s jest na czarnej licie."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Port %1\$s nie moe by uyty."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Twj adres IP (%1\$s) jest na czarnej licie."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Bd"; +$net2ftp_messages["Go back"] = "Wstecz"; +$net2ftp_messages["Go to the login page"] = "Przejd do strony logowania"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nie mona poczy si z serwerem FTP %1\$s na porcie %2\$s.

Czy jeste pewny e jest to adres serwera FTP? Czsto serwer FTP ma inny adres ni serwer HTTP. Skontaktuj si z dostawc internetu bd administratorem.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nie mona zalogowa si na serwer FTP%1\$s uytkownik %2\$s.

czy jeste pewien e nazwa uytkownika i haso s poprawne? Skontaktuj si z dostawc internetu bd administratorem.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Nie mona przeczy si w tryb pasywny na serwerze FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Nie mona poczy si z drugim serwerem FTP %1\$s na porcie %2\$s.

Czy jeste pewny e jest to adres drugiego serwera FTP? Czsto serwer FTP ma inny adres ni serwer HTTP. Skontaktuj si z dostawc internetu bd administratorem.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Nie mona zalogowa si na drugi serwer FTP%1\$s uytkownik %2\$s.

czy jeste pewien e nazwa uytkownika i haso s poprawne? Skontaktuj si z dostawc internetu bd administratorem.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "ie mona przeczy si w tryb pasywny na drugim serwerze FTP %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Nie mona zmieni nazwy katalogu lub pliku %1\$s na %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Zmieniono atrybuty katalogu %1\$s na %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Zmieniono atrybuty pliku %1\$s na %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Wszystkie zaznaczone pliki i katalogi zostay przetworzone."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Nie mona usun katalogu %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nie mona skasowa pliku %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Nie mona utworzy katalogu %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Nie mona utworzy pliku tymczasowego"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Nie mona pobra pliku %1\$s z serwera FTP i zapisa go jako plik tymczasowy %2\$s.
Sprawd uprawnienia dla katalogu %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nie mona otworzy pliku tymczasowego. Sprawd uprawnienia dla katalogu %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Nie mona czyta pliku tymczasowego"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nie mona zamkn pliku tymczasowego"; +$net2ftp_messages["Unable to delete the temporary file"] = "Nie mona skasowa pliku tymczasowego"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Nie mona utworzy pliku tymczasowego. Sprawd uprawnienia dla katalogu %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Nie mona otworzy pliku tymczasowego. Sprawd uprawnienia dla katalogu %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Nie mona zapisa tekstu w pliku tymczasowym %1\$s.
Sprawd uprawnienia dla katalogu %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Nie mona zamkn pliku tymczasowego"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Nie mona umieci pliku %1\$s na serwerze FTP.
Moesz nie mie uprawnie do tego katalogu."; +$net2ftp_messages["Unable to delete the temporary file"] = "Nie mona skasowa pliku tymczasowego"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Przetwarzanie katalogu %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Nie mona utworzy podkatalogu %1\$s. Moe ju istnie. Kontynuuj proces kopiowania/przenoszenia..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Nie mona usun podkatalogu %1\$s - moe nie jest pusty"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Usunito podkatalog %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Usunito podkatalog %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Przetwarzanie katalogu %1\$s zakoczone"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Plik docelowy %1\$s jest taki sam jak plik rdowy, wic zostanie pominity"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Nie mona skopiowa pliku %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Przesunito plik %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Nie mona skasowa pliku %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Skasowano plik %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Wszystkie zaznaczone pliki i katalogi zostay przetworzone."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Nie mona skopiowa pliku ze zdalego systemu %1\$s do pliku lokalnego przy uyciu trybu FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Nie mona skasowa pliku %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Nie mona skopiowa pliku lokalnego do pliku zdalnego %1\$s przy uyciu trybu FTP %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Nie mona usun lokalnego pliku"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Nie mona skasowa pliku tymczasowego"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Nie mona utworzy pliku tymczasowego"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Plik zip zosta zapisany na serwerze FTP jako %1\$s"; +$net2ftp_messages["Requested files"] = "dane pliki"; + +$net2ftp_messages["Dear,"] = "Witaj,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Kto zada by pliki z zacznika zostay przesane na ten email (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Jeli nic o tym nie wiesz lub nie znasz tej osoby, skasuj pliki z zacznika bez ich przegldania."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Jeli nie otworzysz plikw zip, nic nie moe si sta Twojemu komputerowi."; +$net2ftp_messages["Information about the sender: "] = "Informacje o nadawcy: "; +$net2ftp_messages["IP address: "] = "Adres IP: "; +$net2ftp_messages["Time of sending: "] = "Czas wysania: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Wysane przez net2ftp zainstalowane na tym serwerze: "; +$net2ftp_messages["Webmaster's email: "] = "Adres webmastera: "; +$net2ftp_messages["Message of the sender: "] = "Wiadomo nadawcy: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp jest darmowym oprogramowaniem, na licencji GNU/GPL. Wicej informacji http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Plik zip zosta wysany do %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Plik %1\$s jest zbyt duy. Ten plik nie moe by pobrany."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Nie mona wygenerowa pliku tymczasowego."; +$net2ftp_messages["File %1\$s could not be moved"] = "Plik %1\$s nie moe by przeniesiony"; +$net2ftp_messages["File %1\$s is OK"] = "Plik %1\$s jest OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "Nie wybrano adnych plikw do pobrania."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Plik %1\$s nie moe by preniesiony na serwer FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Plik %1\$s zosta przeniesiony na serwer FTP w trybie %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Przesyanie plikw na serwer FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Przetwarzanie archiwum nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Archiwum %1\$s nie zostao przetworzone gdy jego rozszeenie nie zostao rozpoznane. Obecnie tylko archiwa zip, tar, tgz i gz s obsugiwane."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Nie mona wykona lokalnego polecenia %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Twoje zadanie zostao zatrzymane"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Zadanie, ktre chciae wykona w net2ftp zajo wicej czasu ni dozwolone %1\$s sekund, dlatego zostao zatrzymane."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Taki limit czasu umoliwia sprawiedliwe wykorzystanie serwera przez wszytkich uytkownikw."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Sprbuj podzieli zadanie na mniejsze czi: Wybierz mniej plikw, pomi najwiksze pliki."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Jeli naprawd potrzebujesz by net2frt wykonywa rozbudowane zadania, rozwa instalacj net2ftp na swoim serwerze."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Nie wprowadzono adnego tekstu do wysania emailem"; +$net2ftp_messages["You did not supply a From address."] = "Nie wprowadzono pola OD"; +$net2ftp_messages["You did not supply a To address."] = "Nie wprowadzono pol DO."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "W zwizku z problemami technicznymi email do %1\$s nie mg by wysany."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Niebieska"; +$net2ftp_messages["Grey"] = "Szara"; +$net2ftp_messages["Black"] = "Czarna"; +$net2ftp_messages["Yellow"] = "ta"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Katalog"; +$net2ftp_messages["Symlink"] = "Link symboliczny"; +$net2ftp_messages["ASP script"] = "Sktypt ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "Styl CSS"; +$net2ftp_messages["HTML file"] = "Plik HTML"; +$net2ftp_messages["Java source file"] = "Plik rdowy Java"; +$net2ftp_messages["JavaScript file"] = "Plik JavaScript"; +$net2ftp_messages["PHP Source"] = "Plik rdowy PHP"; +$net2ftp_messages["PHP script"] = "Skrypt PHP"; +$net2ftp_messages["Text file"] = "Plik tekstowy"; +$net2ftp_messages["Bitmap file"] = "Bitmapa"; +$net2ftp_messages["GIF file"] = "GIF"; +$net2ftp_messages["JPEG file"] = "JPEG"; +$net2ftp_messages["PNG file"] = "PNG"; +$net2ftp_messages["TIF file"] = "TIF"; +$net2ftp_messages["GIMP file"] = "GIMP"; +$net2ftp_messages["Executable"] = "Wykonywalny"; +$net2ftp_messages["Shell script"] = "Skrypt Shella"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - dokument Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - dokument Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - prezentacja PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - baza Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - rysunek Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - plik Projecta"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - dokument Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - szablon Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - dokument Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - szablon Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - dokument Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - szablon Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - prezentacja Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - szablon Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - dokument Writer 6.0 global"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - dokument Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - dokument StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - dokument StarWriter 5.x global"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - dokument StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - dokument StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - prezentacja StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - plik StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - dokument StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - dokument StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - plik poczty StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = "dokument Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "archiwum ARC"; +$net2ftp_messages["ARJ archive"] = "archiwum ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "archiwum GZ"; +$net2ftp_messages["TAR archive"] = "archiwum TAR"; +$net2ftp_messages["Zip archive"] = "archiwum Zip"; +$net2ftp_messages["MOV movie file"] = "film MOV"; +$net2ftp_messages["MPEG movie file"] = "film MPEG"; +$net2ftp_messages["Real movie file"] = "film Real"; +$net2ftp_messages["Quicktime movie file"] = "film Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "animacja Shockwave flash"; +$net2ftp_messages["Shockwave file"] = "plik Shockwave"; +$net2ftp_messages["WAV sound file"] = "dwik WAV"; +$net2ftp_messages["Font file"] = "Czcionka"; +$net2ftp_messages["%1\$s File"] = "plik %1\$s"; +$net2ftp_messages["File"] = "Plik"; + +// getAction() +$net2ftp_messages["Back"] = "Wstecz"; +$net2ftp_messages["Submit"] = "Wylij"; +$net2ftp_messages["Refresh"] = "Odwie"; +$net2ftp_messages["Details"] = "Szczegy"; +$net2ftp_messages["Icons"] = "Ikony"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Wyloguj"; +$net2ftp_messages["Help"] = "Pomoc"; +$net2ftp_messages["Bookmark"] = "Zakadki"; +$net2ftp_messages["Save"] = "Zapisz"; +$net2ftp_messages["Default"] = "Domylnie"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "Licencja"; +$net2ftp_messages["Powered by"] = "Obsugiwane przez"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Wykonywanie"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Zaawansowane funkcje"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Status net2ftp na tym serwerze"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Status serwera FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Tumaczenie"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Lokalne polecenia nie s dostpne na tym serwerze."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Funkcje Apacha nie s dostpne na tym serwerze."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Funkcje MySQL nie s dostpne na tym serwerze."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Nieznana wartos zmiennej state2. Koczenie dziaania."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Status serwera FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Connection settings:"; +$net2ftp_messages["FTP server"] = "Serwer FTP"; +$net2ftp_messages["FTP server port"] = "Port serwera FTP"; +$net2ftp_messages["Username"] = "Uytkownik"; +$net2ftp_messages["Password"] = "Haso"; +$net2ftp_messages["Password length"] = "Password length"; +$net2ftp_messages["Passive mode"] = "Tryb pasywny"; +$net2ftp_messages["Directory"] = "Katalog"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "czenie z serwerem FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logowanie na serwer FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Ustawianie trybu pasywnego: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Zmiana na katalog %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Katalog na serwerze FTP: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Pobieranie listy plikw i katalogw: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Ponowna prba pobrania listy plik i katalogw: "; +$net2ftp_messages["Closing the connection: "] = "Zamykanie poczenia: "; +$net2ftp_messages["Raw list of directories and files:"] = "Lista plikw i katalogw:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Przetworzona plikw i katalogw:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Status obecnej instalacji net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Sprawdzanie czy modu FTP jest zaninstalowany w PHP: "; +$net2ftp_messages["yes"] = "tak"; +$net2ftp_messages["no - please install it!"] = "nie - konieczna jest jego instalacja!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Sprawdzanie uprawnie katalogw na serwerze: w katalogu /temp zostanie utworzony a nastpnie skasowany may plik."; +$net2ftp_messages["Creating filename: "] = "Tworzenie pliku: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Plik: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "Bd. Sprawd uprawnienia katalogu %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Zapisywanie przykadowego tekstu do pliku: "; +$net2ftp_messages["Closing the file: "] = "Zamykanie pliku: "; +$net2ftp_messages["Deleting the file: "] = "Kasowanie pliku: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "czenie z serwerem FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logowanie na serwer FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Ustawianie trybu pasywnego: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Zmiana na katalog %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Katalog na serwerze FTP: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Pobieranie listy plikw i katalogw: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Ponowna prba pobrania listy plik i katalogw: "; +$net2ftp_messages["Closing the connection: "] = "Zamykanie poczenia: "; +$net2ftp_messages["Raw list of directories and files:"] = "Lista plikw i katalogw:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Przetworzona plikw i katalogw:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Uwaga: jeli uyjesz zapamitanej zakadki, pojawi si okno pytajce o nazw uytkownika i haso."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Wybierz katalog"; +$net2ftp_messages["Please wait..."] = "Prosz czeka..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Katalogi zawierajce w nazwie \' nie mog by poprawnie wywietlane. Mog zosta jedynie skasowane. Cofnij si i wybie inny podkatalog."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nowy katalog"; +$net2ftp_messages["New file"] = "Nowy plik"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Przylij"; +$net2ftp_messages["Java Upload"] = "Przylij Java"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Zaawansowane"; +$net2ftp_messages["Copy"] = "Kopiuj"; +$net2ftp_messages["Move"] = "Przenie"; +$net2ftp_messages["Delete"] = "Kasuj"; +$net2ftp_messages["Rename"] = "Zmie nazw"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Pobierz"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Rozmiar"; +$net2ftp_messages["Search"] = "Szukaj"; +$net2ftp_messages["Go to the parent directory"] = "Przejd do katalogu macierzystego"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Zmie zaznaczone pozycje: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Utwrz nowy katalog w katalogu %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Utwrz nowy plik w katalogu %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Przylij nowe pliki do katalogu %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Poka zaawansowane funkcje"; +$net2ftp_messages["Copy the selected entries"] = "Kopiuj zaznaczone pozycjom"; +$net2ftp_messages["Move the selected entries"] = "Przenie zaznaczone pozycjom"; +$net2ftp_messages["Delete the selected entries"] = "Kasuj zaznaczone pozycjom"; +$net2ftp_messages["Rename the selected entries"] = "Zmie nazwy zaznaczonym pozycjom"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod zaznaczonym pozycjom (dziaa jedynie na serwerach Unix/Linux/BSD)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Pobierz plik zip zawierajcy wszytkie zaznaczone pozycje"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zipuj zaznaczone pozycje i przelij mailem"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Oblicz rozmiar zaznaczonych pozycji"; +$net2ftp_messages["Find files which contain a particular word"] = "Szukaj plikw zawierajcych podan fraz"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Kliknij by sortowa po %1\$s w porzdku malejcym"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Kliknij by sortowa po %1\$s w porzdku rosncym"; +$net2ftp_messages["Ascending order"] = "Rosnco"; +$net2ftp_messages["Descending order"] = "Malejco"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Do gry"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Kliknij by zaznaczy/odznaczy wszytkie pozycje"; +$net2ftp_messages["All"] = "+/-"; +$net2ftp_messages["Name"] = "Nazwa"; +$net2ftp_messages["Type"] = "Typ"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Waciciel"; +$net2ftp_messages["Group"] = "Grupa"; +$net2ftp_messages["Perms"] = "Atrybuty"; +$net2ftp_messages["Mod Time"] = "Czas mod."; +$net2ftp_messages["Actions"] = "Dziaania"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Pobierz plik %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Podgld"; +$net2ftp_messages["Edit"] = "Edycja"; +$net2ftp_messages["Update"] = "Aktualizuj"; +$net2ftp_messages["Open"] = "Otwrz"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Poka kolorowany kod rdowy pliku %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edytuj kod rdowy pliku %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Przelij now wersj pliku %1\$s i scal zmiany"; +$net2ftp_messages["View image %1\$s"] = "Poka obraz %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Poka plik %1\$s z Twojego swrwera HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Uwaga: Ten link moe nie dziaa jeli nie posiadasz wasnej nazwy domeny.)"; +$net2ftp_messages["This folder is empty"] = "Ten katalog jest pusty"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Katalogi"; +$net2ftp_messages["Files"] = "Pliki"; +$net2ftp_messages["Symlinks"] = "Linki symboliczne"; +$net2ftp_messages["Unrecognized FTP output"] = "Nie rozpoznane wyjcie FTP"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Rozmiar"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Jzyk:"; +$net2ftp_messages["Skin:"] = "Skrka:"; +$net2ftp_messages["View mode:"] = "Tryb podgldu:"; +$net2ftp_messages["Directory Tree"] = "Drzewo katalogw"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Uruchom %1\$s w nowym oknie"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Kliknij dwukrotnie by przej do podkatalogu:"; +$net2ftp_messages["Choose"] = "Wybierz"; +$net2ftp_messages["Up"] = "Do gry"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Rozmiar zaznaczonych plikw i katalogw"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Cakowity rozmiar zaznaczonych plikw i katalogw:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Zmiana atrybutw plikw i katalogw"; +$net2ftp_messages["Set all permissions"] = "Ustaw wszytkim"; +$net2ftp_messages["Read"] = "Czytanie"; +$net2ftp_messages["Write"] = "Pisanie"; +$net2ftp_messages["Execute"] = "Wykonywanie"; +$net2ftp_messages["Owner"] = "Waciciel"; +$net2ftp_messages["Group"] = "Grupa"; +$net2ftp_messages["Everyone"] = "Wszyscy"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Aby zmieni wszytkie uprawnienia na takie same wartoci, wprowad te uprawnienia i nacinij przycisk \"Ustaw wszytkie uprawnienia\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Zmieniono uprawnienia katalogowi %1\$s to: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Zmieniono uprawnienia plikowi %1\$s to: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Zmieniono uprawnienia linkowi symbolicznemu %1\$s to: "; +$net2ftp_messages["Chmod value"] = "warto Chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Zmien uprawnienia rwnie podkatalogom tego katalogu"; +$net2ftp_messages["Chmod also the files within this directory"] = "Zmien uprawnienia rwnie wszytkim plikom w tym katalogu"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Chmod nr %1\$s nie jest z zakresu 000-777. Sprbuj jeszcze raz."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Wybierz katalog"; +$net2ftp_messages["Copy directories and files"] = "Kopiowanie plikw i katalogw"; +$net2ftp_messages["Move directories and files"] = "Przenoszenie plikw i katalogw"; +$net2ftp_messages["Delete directories and files"] = "Kasowanie plikw i katalogw"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Czy napewno chcesz usun te pliki i katalogi?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Wszytkie podkatalogi i pliki wybrane katalogu zostan usunite!"; +$net2ftp_messages["Set all targetdirectories"] = "Ustaw dla wszytkich"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Aby wybra standardow czynno dla katalogu, wprowad nazw katalogu w powyszym oknie i nacinij przycisk \"Ustaw dla wszytkich wybranych katalogw\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Uwaga: Katalog docelowy musi istnie zanim bedzie mozna do niego kopiowa pliki."; +$net2ftp_messages["Different target FTP server:"] = "Adres innego docelowego serwera FTP:"; +$net2ftp_messages["Username"] = "Uytkownik"; +$net2ftp_messages["Password"] = "Haso"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Pozostaw puste, jeli chesz kopiowa pliki na ten sam serwer FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Jeli chcesz kopiowa pliki na inny serwer wprowad jego adres, swoj nazw uytkownika oraz haso."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Pozostaw puste jeli chcesz przenosi plik na tym samym serwerze FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Jeli chcesz przenosi pliki na inny serwer FTP wprowad jego adres, swoj nazw uytkownika oraz haso."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopiowanie katalogu %1\$s do:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Przenoszenie katalogu %1\$s do:"; +$net2ftp_messages["Directory %1\$s"] = "Katalog %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopiowanie pliku %1\$s do:"; +$net2ftp_messages["Move file %1\$s to:"] = "Przenoszenie pliku %1\$s do:"; +$net2ftp_messages["File %1\$s"] = "Plik %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopiowanie linku symbolicznego %1\$s do:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Przenoszenie linku symbolicznego %1\$s do:"; +$net2ftp_messages["Symlink %1\$s"] = "Link symboliczny %1\$s"; +$net2ftp_messages["Target directory:"] = "Katalog docelowy:"; +$net2ftp_messages["Target name:"] = "Nazwa docelowa:"; +$net2ftp_messages["Processing the entries:"] = "Przetwarzanie pozycji:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Rozmiar"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: kliknij prawym przycikiem na linku i wybierz \"Dodaj do ulubionych...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: kliknij prawym przycikiem na link i wybierz \"Dodaj stron do zakadek\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Nie mona otworzy pliku z szablonem"; +$net2ftp_messages["Unable to read the template file"] = "Nie mona odczyta pliku z szablonem"; +$net2ftp_messages["Please specify a filename"] = "Podaj nazw pliku"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: Ten plik nie zosta jeszcze zapisany"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Zapisany %1\$s w trybie %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Nie mona zapisa tego pliku"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Katalog: "; +$net2ftp_messages["File: "] = "plik: "; +$net2ftp_messages["New file name: "] = "Nowa nazwa pliku: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Uwaga: zmiany w tekcie zostan zapisane"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Szukaj katalogw i plikw"; +$net2ftp_messages["Search again"] = "Nowe szukanie"; +$net2ftp_messages["Search results"] = "Wyniki wyszukiwania"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Wprowad prawidow fraz lub sowo do wyszukania."; +$net2ftp_messages["Please enter a valid filename."] = "Wprowad prawidow nazw plikw."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Wprowad prawidowy rozmiar pliku w polu \"od\" , np. 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Wprowad prawidowy rozmiar pliku w polu \"do\" , np. 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Wprowad prawidow dat w formacie Y-m-d w polu \"od\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Wprowad prawidow dat w formacie Y-m-d w polu \"do\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Sowo %1\$s nie zostao znalezione w zaznaczonych katalogach i plikach."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Sowo %1\$s znaleziono w nastpujcych plikach:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Szukaj sowa lub frazy"; +$net2ftp_messages["Case sensitive search"] = "Wana wielko liter"; +$net2ftp_messages["Restrict the search to:"] = "Ogranicz szukanie do:"; +$net2ftp_messages["files with a filename like"] = "nazw plikw typu"; +$net2ftp_messages["(wildcard character is *)"] = "(maska = *)"; +$net2ftp_messages["files with a size"] = "plikw o rozmiarze"; +$net2ftp_messages["files which were last modified"] = "plikw ostatnio modyfikowanych"; +$net2ftp_messages["from"] = "od"; +$net2ftp_messages["to"] = "do"; + +$net2ftp_messages["Directory"] = "Katalog"; +$net2ftp_messages["File"] = "Plik"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Podgld"; +$net2ftp_messages["Edit"] = "Edycja"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Poka kolorowany kod rdowy pliku %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edytuj kod rdowy pliku %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Nie mona otworzy pliku z szablonem"; +$net2ftp_messages["Unable to read the template file"] = "Nie mona odczyta pliku z szablonem"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "Serwer FTP"; +$net2ftp_messages["Example"] = "Przykad"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Uytkownik"; +$net2ftp_messages["Password"] = "Haso"; +$net2ftp_messages["Anonymous"] = "Anonimowo"; +$net2ftp_messages["Passive mode"] = "Tryb pasywny"; +$net2ftp_messages["Initial directory"] = "Katalog startowy"; +$net2ftp_messages["Language"] = "Jzyk"; +$net2ftp_messages["Skin"] = "Skrka"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Logowanie"; +$net2ftp_messages["Clear cookies"] = "Usu ciasteczka"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Uytkownik"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Haso"; +$net2ftp_messages["Login"] = "Logowanie"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Tworzenie nowych katalogw"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Nowe katalogi bd utworzone w %1\$s."; +$net2ftp_messages["New directory name:"] = "Nazwa nowego katalogu:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Katalog %1\$s zosta utworzony."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Przemianowywanie plikw i katalogw"; +$net2ftp_messages["Old name: "] = "Stara nazwa: "; +$net2ftp_messages["New name: "] = "Nowa nazwa: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Nowa nazwa nie moe zawiera zadnych kropek. Ta pozycja nie zostaa przemianowana na %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s zostaa przemianowana na %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Ustaw dla wszytkich"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Aby wybra standardow czynno dla katalogu, wprowad nazw katalogu w powyszym oknie i nacinij przycisk \"Ustaw dla wszytkich wybranych katalogw\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Uwaga: Katalog docelowy musi istnie zanim bedzie mozna do niego kopiowa pliki."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Katalog docelowy:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Uyj nazw katalogw (automatycznie tworzy podkatalogi)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Wylij do katalogu:"; +$net2ftp_messages["Files"] = "Pliki"; +$net2ftp_messages["Archives"] = "Archiwa"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Wpisane tu pliki bd wysane na serwer FTP."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Wpisane tu archiwa bd wysne na serwer FTP."; +$net2ftp_messages["Add another"] = "Dodaj nastpne"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Uyj nazw katalogw (automatycznie tworzy podkatalogi)"; + +$net2ftp_messages["Choose a directory"] = "Wybierz katalog"; +$net2ftp_messages["Please wait..."] = "Prosz czeka..."; +$net2ftp_messages["Uploading... please wait..."] = "Wysyanie... prosz czeka..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "To okno zamknie si automatycznie w cigu kilku sekund."; +$net2ftp_messages["Close window now"] = "Zamknij okno"; + +$net2ftp_messages["Upload files and archives"] = "Wysyanie plikw i archiww"; +$net2ftp_messages["Upload results"] = "Wyniki wysyania"; +$net2ftp_messages["Checking files:"] = "Sprawdzanie plikw:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transfer plikw na serwer FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Dekompresja plikw i transfer na serwer FTP:"; +$net2ftp_messages["Upload more files and archives"] = "Wylij wicej plikw i archiww"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Ograniczenia:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Maksymalny rozmiar pliku ustawiony w net2ftp to %1\$s i w PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Maksymalny czas wykonywania skryptu %1\$s sekund"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "Tryb transferu FTP (ASCII or BINARY) bdzie ustawiony automatycznie na podstawie rozszerzenia"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Jeli plik docelowy istnieje, zostanie nadpisany"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Poka obraz %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Aby zapisa obraz, kliknij na obrazie przwym przyciskiem i wybierz 'Zapisz obraz jako...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zipowanie wybranych pozycji"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Zapisz plik zip na serwerze FTP jako:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Wylij plik zip poczt do:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Wysyanie plikw nie jest anonimowe: Twj adres IP i czas wysania bdzie dodany do emaila."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Dodatkowe komentarze do emaila:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Nie podano nazwy pliku zip. Cofnij i wprowad nazw pliku."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Adres, ktry wprowadzono (%1\$s) nie jest prawidowym adresem email.
Wprowad adres w formacie username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/pt.inc.php b/ehcp/net2ftp/languages/pt.inc.php new file mode 100644 index 0000000..7f9ef3d --- /dev/null +++ b/ehcp/net2ftp/languages/pt.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Selecione pelo menos um arquivo ou pasta!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "The FTP server %1\$s is not in the list of allowed FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "The FTP server %1\$s is in the list of banned FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "The FTP server port %1\$s may not be used."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Your IP address (%1\$s) is in the list of banned IP addresses."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Ocorreu um erro"; +$net2ftp_messages["Go back"] = "Voltar"; +$net2ftp_messages["Go to the login page"] = "Voltar para o login"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Unable to switch to the passive mode on FTP server %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Unable to switch to the passive mode on the second (target) FTP server %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Unable to rename directory or file %1\$s into %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Directory %1\$s successfully chmodded to %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "File %1\$s was successfully chmodded to %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Unable to delete the directory %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Unable to create the directory %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to read the temporary file"] = "Unable to read the temporary file"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Unable to create the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Unable to open the temporary file. Check the permissions of the %1\$s directory."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Unable to close the handle of the temporary file"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."; +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Processando pasta %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "A pasta destino %1\$s a mesma ou a sub-pasta est na mesma pasta de origem %2\$s. Esta pasta ser desconsiderada."; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "No pde criar a sub-pasta %1\$s. Pode j existir. Continuando processo de copiar/mover .."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "No pde apagar a sub-pasta %1\$s - pode no estar vazia"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Apagando subpasta %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Apagando subpasta %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Processando a pasta %1\$s completo"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "The target for file %1\$s is the same as the source, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "No pde copiar o arquivo %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Arquivo movido %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Arquivo apagado %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "All the selected directories and files have been processed."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Unable to delete file %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Unable to delete the local file"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Unable to delete the temporary file"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Unable to create the temporary file"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "O arquivo compactado foi salvo no servidor FPT como %1\$s"; +$net2ftp_messages["Requested files"] = "Requested files"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "O arquivo compactado foi enviado para %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "File %1\$s is too big. This file will not be uploaded."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Could not generate a temporary file."; +$net2ftp_messages["File %1\$s could not be moved"] = "File %1\$s could not be moved"; +$net2ftp_messages["File %1\$s is OK"] = "File %1\$s is OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "You did not provide any file to upload."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "File %1\$s could not be transferred to the FTP server"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "File %1\$s has been transferred to the FTP server using FTP mode %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Transferindo arquivos para o servidor"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Processando arquivo n %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Arquivo %1\$s no pde ser processado porque a extenso desconhecida. Somente zip, tar, tgz and gz so suportados."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Unable to execute site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Your task was stopped"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "This time limit guarantees the fair use of the web server for everyone."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "You did not provide any text to send by email!"; +$net2ftp_messages["You did not supply a From address."] = "You did not supply a From address."; +$net2ftp_messages["You did not supply a To address."] = "You did not supply a To address."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Due to technical problems the email to %1\$s could not be sent."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Blue"; +$net2ftp_messages["Grey"] = "Grey"; +$net2ftp_messages["Black"] = "Black"; +$net2ftp_messages["Yellow"] = "Yellow"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Pasta"; +$net2ftp_messages["Symlink"] = "Link simblico"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "Arquivo HTML"; +$net2ftp_messages["Java source file"] = "Java source file"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Arquivo texto"; +$net2ftp_messages["Bitmap file"] = "Arquivo Bitmap"; +$net2ftp_messages["GIF file"] = "Arquivo GIF"; +$net2ftp_messages["JPEG file"] = "Arquivo JPEG"; +$net2ftp_messages["PNG file"] = "Arquivo PNG"; +$net2ftp_messages["TIF file"] = "Arquivo TIF"; +$net2ftp_messages["GIMP file"] = "Arquivo GIMP"; +$net2ftp_messages["Executable"] = "Executvel"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project file"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "Arquivo ARC"; +$net2ftp_messages["ARJ archive"] = "Arquivo ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "Arquivo GZ"; +$net2ftp_messages["TAR archive"] = "Arquivo TAR"; +$net2ftp_messages["Zip archive"] = "Arquivo Zip"; +$net2ftp_messages["MOV movie file"] = "Arquivo MOV movie file"; +$net2ftp_messages["MPEG movie file"] = "Arquivo MPEG movie file"; +$net2ftp_messages["Real movie file"] = "Real movie file"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime movie file"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash file"; +$net2ftp_messages["Shockwave file"] = "Shockwave file"; +$net2ftp_messages["WAV sound file"] = "WAV sound file"; +$net2ftp_messages["Font file"] = "Font file"; +$net2ftp_messages["%1\$s File"] = "%1\$s File"; +$net2ftp_messages["File"] = "Arquivo"; + +// getAction() +$net2ftp_messages["Back"] = "Voltar"; +$net2ftp_messages["Submit"] = "Submeter"; +$net2ftp_messages["Refresh"] = "Atualizar"; +$net2ftp_messages["Details"] = "Detalhes"; +$net2ftp_messages["Icons"] = "cones"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Logout"; +$net2ftp_messages["Help"] = "Ajuda"; +$net2ftp_messages["Bookmark"] = "Favoritos"; +$net2ftp_messages["Save"] = "Salvar"; +$net2ftp_messages["Default"] = "Padro"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "License"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Funes administrativas"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Informao da verso"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Funes administrativas"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = "Execute"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Funes administrativas"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Funes administrativas"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Advanced functions"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Troubleshoot net2ftp on this webserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "The site command functions are not available on this webserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "The Apache functions are not available on this webserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "The MySQL functions are not available on this webserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Unexpected state2 string. Exiting."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Troubleshoot an FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Connection settings:"; +$net2ftp_messages["FTP server"] = "Servidor FTP"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "Usurio"; +$net2ftp_messages["Password"] = "Senha"; +$net2ftp_messages["Password length"] = "Password length"; +$net2ftp_messages["Passive mode"] = "Modo passivo"; +$net2ftp_messages["Directory"] = "Pasta"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Troubleshoot your net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Checking if the FTP module of PHP is installed: "; +$net2ftp_messages["yes"] = "yes"; +$net2ftp_messages["no - please install it!"] = "no - please install it!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."; +$net2ftp_messages["Creating filename: "] = "Creating filename: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filename: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "not OK. Check the permissions of the %1\$s directory"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "Writing some text to the file: "; +$net2ftp_messages["Closing the file: "] = "Closing the file: "; +$net2ftp_messages["Deleting the file: "] = "Deleting the file: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Connecting to the FTP server: "; +$net2ftp_messages["Logging into the FTP server: "] = "Logging into the FTP server: "; +$net2ftp_messages["Setting the passive mode: "] = "Setting the passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Changing to the directory %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "The directory from the FTP server is: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Getting the raw list of directories and files: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Trying a second time to get the raw list of directories and files: "; +$net2ftp_messages["Closing the connection: "] = "Closing the connection: "; +$net2ftp_messages["Raw list of directories and files:"] = "Raw list of directories and files:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Parsed list of directories and files:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Note: when you will use this bookmark, a popup window will ask you for your username and password."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Escolha um diretrio"; +$net2ftp_messages["Please wait..."] = "Aguarde ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nova pasta"; +$net2ftp_messages["New file"] = "Novo arquivo"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Enviar"; +$net2ftp_messages["Java Upload"] = "Java Enviar"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Avanado"; +$net2ftp_messages["Copy"] = "Copiar"; +$net2ftp_messages["Move"] = "Mover"; +$net2ftp_messages["Delete"] = "Apagar"; +$net2ftp_messages["Rename"] = "Renomear"; +$net2ftp_messages["Chmod"] = "Permisses"; +$net2ftp_messages["Download"] = "Baixar"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Compactar"; +$net2ftp_messages["Size"] = "Tamanho"; +$net2ftp_messages["Search"] = "Busca"; +$net2ftp_messages["Go to the parent directory"] = "Ir para pasta inicial"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "Aes possveis para as entradas selecionadas: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Criar nova sub-pasta na pasta %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Criar novo arquivo na pasta %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Enviar novo arquivo na pasta %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Ir para funes avanadas"; +$net2ftp_messages["Copy the selected entries"] = "Copiar entradas selecionadas"; +$net2ftp_messages["Move the selected entries"] = "Mover entradas selecionadas"; +$net2ftp_messages["Delete the selected entries"] = "Deletar entradas selecionadas"; +$net2ftp_messages["Rename the selected entries"] = "Renomear entradas selecionadas"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Mudar permisses das entradas selecionadas"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Compactar todos os selecionados e baixar"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Compactar todos os selecionados e envi-lo por e-mail"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Calcular o tamanho das entradas selecionadas"; +$net2ftp_messages["Find files which contain a particular word"] = "Buscar arquivos que contenham uma palavra"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Clique para classificar por %1\$s - descendente"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Clique para classificar por %1\$s - ascendente"; +$net2ftp_messages["Ascending order"] = "Ordem crescente"; +$net2ftp_messages["Descending order"] = "Ordem decrescente"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Acima"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Clique para ligar ou desligar todas as linhas"; +$net2ftp_messages["All"] = "Todas"; +$net2ftp_messages["Name"] = "Nome"; +$net2ftp_messages["Type"] = "Tipo"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Dono"; +$net2ftp_messages["Group"] = "Grupo"; +$net2ftp_messages["Perms"] = "Perm."; +$net2ftp_messages["Mod Time"] = "Mod Time"; +$net2ftp_messages["Actions"] = "Aes"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Baixar o arquivo %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Ver"; +$net2ftp_messages["Edit"] = "Editar"; +$net2ftp_messages["Update"] = "Atualizar"; +$net2ftp_messages["Open"] = "Abrir"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Enviar nova verso do arquivo %1\$s e mesclar mudanas"; +$net2ftp_messages["View image %1\$s"] = "Ver imagem %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Ver o arquivo %1\$s do seu servidor HTTP"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Nota: Este link pode no funcionar se voc tiver seu prprio domnio.)"; +$net2ftp_messages["This folder is empty"] = "Pasta vazia"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Pastas"; +$net2ftp_messages["Files"] = "Arquivos"; +$net2ftp_messages["Symlinks"] = "Link simblico"; +$net2ftp_messages["Unrecognized FTP output"] = "Saida FPT desconhecida"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "Tamanho"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Lngua:"; +$net2ftp_messages["Skin:"] = "Tema:"; +$net2ftp_messages["View mode:"] = "Modo de viso:"; +$net2ftp_messages["Directory Tree"] = "rvore de pastas"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Execute %1\$s in a new window"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Duplo clique para ir para uma sub-pasta:"; +$net2ftp_messages["Choose"] = "Escolha"; +$net2ftp_messages["Up"] = "Acima"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Tamanho das pastas e arquivos selecionados"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "O tamanho total das pastas e arquivos selecionados :"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod pastas e arquivos"; +$net2ftp_messages["Set all permissions"] = "Selecione todas"; +$net2ftp_messages["Read"] = "Ler"; +$net2ftp_messages["Write"] = "Gravar"; +$net2ftp_messages["Execute"] = "Execute"; +$net2ftp_messages["Owner"] = "Dono"; +$net2ftp_messages["Group"] = "Grupo"; +$net2ftp_messages["Everyone"] = "Todos"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Para ajustar todas as permisses aos mesmos valores, clique no boto \"Selecione todas\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Ajustar permisses para a pasta %1\$s para: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Ajustar permisses do arquivo %1\$s para: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Ajustar permisses para link simblico %1\$s para: "; +$net2ftp_messages["Chmod value"] = "Valor"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Mude permisses das sub-pastas desta pasta"; +$net2ftp_messages["Chmod also the files within this directory"] = "Mude permisses dos arquivos desta pasta"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "The chmod nr %1\$s is out of the range 000-777. Please try again."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Escolha um diretrio"; +$net2ftp_messages["Copy directories and files"] = "Copiar pastas e arquivos"; +$net2ftp_messages["Move directories and files"] = "Mover pastas e arquivos"; +$net2ftp_messages["Delete directories and files"] = "Apagar pastas e arquivos"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Voc tem certeza que deseja apagar estas pastas e arquivos?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Todas as sub-pastas e arquivos da pasta selecionada sero apagados!"; +$net2ftp_messages["Set all targetdirectories"] = "Selecione como destino"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Para escolher uma pasta de destino, selecione a pasta desejada e pressione o boto \"Selecione como destino\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: a pasta destino dever existir antes de iniciar a cpia para ela."; +$net2ftp_messages["Different target FTP server:"] = "Servidor FTP diferente:"; +$net2ftp_messages["Username"] = "Usurio"; +$net2ftp_messages["Password"] = "Senha"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Deixe vazio se desejar copiar para o mesmo servidor FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Se desejar copiar para outro servidor FTP, entre com seus dados de login."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Deixe vazio se desejar copiar para o mesmo servidor FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Se desejar mover para outro servidor FTP, entre com seus dados de login."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Copiar pasta %1\$s para:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Mover pasta %1\$s para:"; +$net2ftp_messages["Directory %1\$s"] = "Pasta %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Copiar arquivo %1\$s para:"; +$net2ftp_messages["Move file %1\$s to:"] = "Mover arquivo %1\$s para:"; +$net2ftp_messages["File %1\$s"] = "Arquivo %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Copy symlink %1\$s para:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Move symlink %1\$s para:"; +$net2ftp_messages["Symlink %1\$s"] = "Link simblico %1\$s"; +$net2ftp_messages["Target directory:"] = "Pasta destino:"; +$net2ftp_messages["Target name:"] = "Nome destino:"; +$net2ftp_messages["Processing the entries:"] = "Processando a entrada:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Tamanho"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: right-click on the link and choose \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Please specify a filename"] = "Please specify a filename"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: O arquivo ainda no foi salvo"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Salvo como %1\$s usando modo %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Este arquivo no pde ser salvo"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Pasta: "; +$net2ftp_messages["File: "] = "Arquivo: "; +$net2ftp_messages["New file name: "] = "Nome do novo arquivo: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Nota: mudando o tipo da rea de texto, as mudanas sero preservadas"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Search directories and files"; +$net2ftp_messages["Search again"] = "Search again"; +$net2ftp_messages["Search results"] = "Search results"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Please enter a valid search word or phrase."; +$net2ftp_messages["Please enter a valid filename."] = "Please enter a valid filename."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Please enter a valid file size in the \"from\" textbox, for example 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Please enter a valid file size in the \"to\" textbox, for example 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Please enter a valid date in Y-m-d format in the \"from\" textbox."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Please enter a valid date in Y-m-d format in the \"to\" textbox."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "The word %1\$s was not found in the selected directories and files."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "The word %1\$s was found in the following files:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Procurar uma palavra ou frase"; +$net2ftp_messages["Case sensitive search"] = "Diferenciar maisculas de minsculas"; +$net2ftp_messages["Restrict the search to:"] = "Restringir busca para:"; +$net2ftp_messages["files with a filename like"] = "arquivos cujo nome seja"; +$net2ftp_messages["(wildcard character is *)"] = "(o caracter coringa o *)"; +$net2ftp_messages["files with a size"] = "arquivos com tamanho"; +$net2ftp_messages["files which were last modified"] = "arquivos com a ltima modificao"; +$net2ftp_messages["from"] = "de"; +$net2ftp_messages["to"] = "at"; + +$net2ftp_messages["Directory"] = "Pasta"; +$net2ftp_messages["File"] = "Arquivo"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "Ver"; +$net2ftp_messages["Edit"] = "Editar"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "View the highlighted source code of file %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Edit the source code of file %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Unable to open the template file"; +$net2ftp_messages["Unable to read the template file"] = "Unable to read the template file"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "Servidor FTP"; +$net2ftp_messages["Example"] = "Exemplo"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Usurio"; +$net2ftp_messages["Password"] = "Senha"; +$net2ftp_messages["Anonymous"] = "Annimo"; +$net2ftp_messages["Passive mode"] = "Modo passivo"; +$net2ftp_messages["Initial directory"] = "Directrio inicial"; +$net2ftp_messages["Language"] = "Lngua"; +$net2ftp_messages["Skin"] = "Tema"; +$net2ftp_messages["FTP mode"] = "Modo FTP"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Clear cookies"] = "Apagar cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Usurio"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Senha"; +$net2ftp_messages["Login"] = "Login"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Criar nova pasta"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "A nova pasta ser criada em %1\$s."; +$net2ftp_messages["New directory name:"] = "Nome da nova pasta:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Pasta %1\$s criada com sucesso."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Renomear pastas e arquivos"; +$net2ftp_messages["Old name: "] = "Nome antigo: "; +$net2ftp_messages["New name: "] = "Novo nome: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "O novo nome no pode conter pontos. Esta entrada no ser renomeada para %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s renomeado com sucesso para %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s no pde ser renomeado para %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Selecione como destino"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Para escolher uma pasta de destino, selecione a pasta desejada e pressione o boto \"Selecione como destino\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Nota: a pasta destino dever existir antes de iniciar a cpia para ela."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Pasta destino:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use os nomes das pastas (cria subpastas automaticamente)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Enviar para a pasta:"; +$net2ftp_messages["Files"] = "Arquivos"; +$net2ftp_messages["Archives"] = "Arquivos"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Os arquivos selecionados aqui, sero enviados para o servidor."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Os arquivos selecionados aqui, sero descompactados e enviado para o servidor."; +$net2ftp_messages["Add another"] = "Adicionar outro"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Use os nomes das pastas (cria subpastas automaticamente)"; + +$net2ftp_messages["Choose a directory"] = "Escolha um diretrio"; +$net2ftp_messages["Please wait..."] = "Aguarde ..."; +$net2ftp_messages["Uploading... please wait..."] = "Enviando... aguarde ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "This window will close automatically in a few seconds."; +$net2ftp_messages["Close window now"] = "Close window now"; + +$net2ftp_messages["Upload files and archives"] = "Enviando arquivos"; +$net2ftp_messages["Upload results"] = "Resultado do envio"; +$net2ftp_messages["Checking files:"] = "Checando arquivos:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Transferindo arquivos para o servidor:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Decomprimindo arquivos e transferindo para o servidor:"; +$net2ftp_messages["Upload more files and archives"] = "Enviar mais arquivos"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Restries:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "O tamanho mximo de arquivo limitado pelo net2ftp %1\$s e pelo PHP %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "O tempo mximo de execuo %1\$s segundos"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "O modo de transferncia (ASCII ou BINARY) ser automaticamente determinado, baseado na extenso do arquivo"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Se os arquivos j existirem no destino, sero sobre-escritos"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Ver imagem %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Arquivos ou pastas compactadas"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Salvar o arquivo compactado no servidor FTP como:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Enviar o arquivo compactado como anexo para:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Note que enviar um e-mail no anonimo: seu IP ser colocado no cabealho do e-mail ao ser enviado."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Comentrios adicionais a serem inseridos no e-mail:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Voc no forneu um nome para o arquivo compactado. Volte e fornea um nome."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "O e-mail informado (%1\$s) no parece ser vlido.
Informe um e-mail no formato usurio@dominio.com.br"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/ru.inc.php b/ehcp/net2ftp/languages/ru.inc.php new file mode 100644 index 0000000..5f124c0 --- /dev/null +++ b/ehcp/net2ftp/languages/ru.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = " %1\$s , %2\$s ."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = " %1\$s ."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = " %1\$s - ."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = " net2ftp , . PayPal Ebay."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = " , , , , , , ; , ."; +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s "; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = " ."; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP- %1\$s FTP-."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP- %1\$s FTP-."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = " FTP- %1\$s ."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = " IP- (%1\$s) ."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = " IP- (%1\$s) IP-."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = " net2ftp_users ."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = " ."; +$net2ftp_messages["Wrong username or password. Please try again."] = " . , ."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = " ip ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = " net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = " net2ftp_log_consumption_ftpserver ."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = " consumption_ipaddress_datatransfer ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = " net2ftp_log_consumption_ipaddress."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = " net2ftp_log_consumption_ipaddress ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = " net2ftp_log_consumption_ftpserver."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = " net2ftp_log_access."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = " net2ftp_log_access ."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = " MySQL. settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = " "; +$net2ftp_messages["Go back"] = ""; +$net2ftp_messages["Go to the login page"] = " "; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " FTP- %1\$s %2\$s.

FTP-? HTTP-. , ISP .
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " FTP- %1\$s %2\$s.

? , ISP .
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = " FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " FTP- %1\$s %2\$s.

FTP-? HTTP-. , ISP .
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " FTP- %1\$s %2\$s.

? ISP .
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = " FTP %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = " %1\$s %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = " %1\$s. CHMOD Unix-."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = " %1\$s chmodded %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = " %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = " %1\$s chmodded %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = " ."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = " %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = " %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = " %1\$s FTP- %2\$s.
%3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = " "; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " . %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = " %1\$s.
%2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = " %1\$s FTP-.
, ."; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = " %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = " %1\$s %2\$s, "; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = " %1\$s , "; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = " %1\$s , "; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = " %1\$s. . ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = " %1\$s , "; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = " %1\$s - "; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = " %1\$s "; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = " %1\$s , "; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = " %1\$s , "; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = " %1\$s , "; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = " %1\$s , "; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = " %1\$s , "; +$net2ftp_messages["Unable to copy the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = " %1\$s, ."; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = " %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = " ."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = " %1\$s , FTP-ht;bv %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = " %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = " ."; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = " : %1\$s "; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = " %1\$s , %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = " "; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = " "; +$net2ftp_messages["Unable to send the file to the browser"] = " "; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Zip- FTP- %1\$s"; +$net2ftp_messages["Requested files"] = " "; + +$net2ftp_messages["Dear,"] = ","; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "- ( ) , , (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = " , , , , , ."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = " zip-, , , ."; +$net2ftp_messages["Information about the sender: "] = " : "; +$net2ftp_messages["IP address: "] = "IP-: "; +$net2ftp_messages["Time of sending: "] = " : "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = " net2ftp "; +$net2ftp_messages["Webmaster's email: "] = " -: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp , GNU/GPL. http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Zip- %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = " %1\$s . ."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = " %1\$s . ."; +$net2ftp_messages["Could not generate a temporary file."] = " ."; +$net2ftp_messages["File %1\$s could not be moved"] = " %1\$s "; +$net2ftp_messages["File %1\$s is OK"] = " %1\$s Ok"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = " .

chmod 777 /temp."; +$net2ftp_messages["You did not provide any file to upload."] = " ."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = " %1\$s FTP-"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = " %1\$s FTP-, FTP- %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = " FTP-"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = " nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = " %1\$s , . zip, tar, tgz gz ."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = " "; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = " %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = " %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = " "; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = " %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = " %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = " "; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = ", net2ftp %1\$s . ."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = " ."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = " : , ."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = " net2ftp, net2ftp ."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = " !"; +$net2ftp_messages["You did not supply a From address."] = " ."; +$net2ftp_messages["You did not supply a To address."] = " ."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = " email %1\$s ."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = " SQL ."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = ", FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" \" ."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = " net2ftp , settings.inc.php . ."; +$net2ftp_messages["Please enter your Admin username and password"] = ", ."; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" \" ."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = " net2ftp. settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = ""; +$net2ftp_messages["Grey"] = ""; +$net2ftp_messages["Black"] = ""; +$net2ftp_messages["Yellow"] = ""; +$net2ftp_messages["Pastel"] = ""; + +// getMime() +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Symlink"] = ""; +$net2ftp_messages["ASP script"] = " ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "CSS"; +$net2ftp_messages["HTML file"] = " HTML"; +$net2ftp_messages["Java source file"] = " Java"; +$net2ftp_messages["JavaScript file"] = " JavaScript"; +$net2ftp_messages["PHP Source"] = "PHP "; +$net2ftp_messages["PHP script"] = " PHP"; +$net2ftp_messages["Text file"] = ""; +$net2ftp_messages["Bitmap file"] = ""; +$net2ftp_messages["GIF file"] = "GIF"; +$net2ftp_messages["JPEG file"] = "JPEG"; +$net2ftp_messages["PNG file"] = "PNG"; +$net2ftp_messages["TIF file"] = "TIF"; +$net2ftp_messages["GIMP file"] = " GIMP"; +$net2ftp_messages["Executable"] = ""; +$net2ftp_messages["Shell script"] = " shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - "; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = " Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "ARC-"; +$net2ftp_messages["ARJ archive"] = "ARJ-"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ-"; +$net2ftp_messages["TAR archive"] = "TAR-"; +$net2ftp_messages["Zip archive"] = "Zip-"; +$net2ftp_messages["MOV movie file"] = " MOV"; +$net2ftp_messages["MPEG movie file"] = " MPEG"; +$net2ftp_messages["Real movie file"] = " Real"; +$net2ftp_messages["Quicktime movie file"] = " Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash"; +$net2ftp_messages["Shockwave file"] = " Shockwave"; +$net2ftp_messages["WAV sound file"] = " WAV"; +$net2ftp_messages["Font file"] = " "; +$net2ftp_messages["%1\$s File"] = "%1\$s "; +$net2ftp_messages["File"] = ""; + +// getAction() +$net2ftp_messages["Back"] = ""; +$net2ftp_messages["Submit"] = ""; +$net2ftp_messages["Refresh"] = ""; +$net2ftp_messages["Details"] = ""; +$net2ftp_messages["Icons"] = ""; +$net2ftp_messages["List"] = ""; +$net2ftp_messages["Logout"] = ""; +$net2ftp_messages["Help"] = ""; +$net2ftp_messages["Bookmark"] = ""; +$net2ftp_messages["Save"] = ""; +$net2ftp_messages["Default"] = " "; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = ""; +$net2ftp_messages["Forums"] = ""; +$net2ftp_messages["License"] = ""; +$net2ftp_messages["Powered by"] = " "; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = " net2ftp. net2ftp, ."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = " "; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = " "; +$net2ftp_messages["This version of net2ftp is up-to-date."] = " net2ftp."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = " net2ftp.com. , net2ftp.com."; +$net2ftp_messages["Logging"] = " "; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = " "; +$net2ftp_messages["View logs"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Setup MySQL tables"] = " MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = " MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = " %1\$s"; +$net2ftp_messages["The file %1\$s could not be opened."] = " %1\$s ."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = " %1\$s"; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = " %1\$s. , ."; +$net2ftp_messages["Unable to select the database %1\$s."] = " %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL- %1\$s ."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL- %1\$s ."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = ", MySQL:"; +$net2ftp_messages["MySQL username"] = " MySQL"; +$net2ftp_messages["MySQL password"] = " MySQL"; +$net2ftp_messages["MySQL database"] = " MySQL"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = " SQL-:"; +$net2ftp_messages["Execute"] = ""; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = " :"; +$net2ftp_messages["MySQL password length"] = " MySQL"; +$net2ftp_messages["Results:"] = ":"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = " SQL %1\$s."; +$net2ftp_messages["No data"] = " "; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The table %1\$s was emptied successfully."] = " %1\$s ."; +$net2ftp_messages["The table %1\$s could not be emptied."] = " %1\$s ."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = " %1\$s ."; +$net2ftp_messages["The table %1\$s could not be optimized."] = " %1\$s ."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = " "; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Disabled"] = ""; +$net2ftp_messages["Advanced FTP functions"] = " FTP "; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = " PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = " "; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = " net2ftp -"; +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP-"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Translation functions"] = " "; +$net2ftp_messages["Introduction to the translation functions"] = " "; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = " "; + +$net2ftp_messages["Beta functions"] = "-"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: , "; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: SQL-"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = " -."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = " Apache -."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = " MySQL -."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = " 2. ."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP-"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = " :"; +$net2ftp_messages["FTP server"] = "FTP-"; +$net2ftp_messages["FTP server port"] = " FTP-"; +$net2ftp_messages["Username"] = ""; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Password length"] = " "; +$net2ftp_messages["Passive mode"] = " "; +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = " FTP-: "; +$net2ftp_messages["Logging into the FTP server: "] = " FTP-: "; +$net2ftp_messages["Setting the passive mode: "] = " : "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP-: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP-: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " : "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " : "; +$net2ftp_messages["Closing the connection: "] = " : "; +$net2ftp_messages["Raw list of directories and files:"] = " :"; +$net2ftp_messages["Parsed list of directories and files:"] = " :"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Sample input"] = " "; +$net2ftp_messages["Parsed output"] = " "; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = " net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = " FTP PHP: "; +$net2ftp_messages["yes"] = ""; +$net2ftp_messages["no - please install it!"] = " - , !"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = " -: /temp ."; +$net2ftp_messages["Creating filename: "] = " : "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. : %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = " OK. %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = " : "; +$net2ftp_messages["Writing some text to the file: "] = " : "; +$net2ftp_messages["Closing the file: "] = " : "; +$net2ftp_messages["Deleting the file: "] = " : "; + +$net2ftp_messages["Testing the FTP functions"] = " FTP"; +$net2ftp_messages["Connecting to a test FTP server: "] = " FTP : "; +$net2ftp_messages["Connecting to the FTP server: "] = " FTP-: "; +$net2ftp_messages["Logging into the FTP server: "] = " FTP-: "; +$net2ftp_messages["Setting the passive mode: "] = " : "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP-: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP-: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " : "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " : "; +$net2ftp_messages["Closing the connection: "] = " : "; +$net2ftp_messages["Raw list of directories and files:"] = " :"; +$net2ftp_messages["Parsed list of directories and files:"] = " :"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = ": , ."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Please wait..."] = ", ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = " , \' . . , ."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = " : "; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = " , . , , ."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = " , net2ftp ftp ."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = " "; +$net2ftp_messages["New file"] = " "; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = ""; +$net2ftp_messages["Java Upload"] = " Java"; +$net2ftp_messages["Flash Upload"] = " Flash"; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Advanced"] = ""; +$net2ftp_messages["Copy"] = "."; +$net2ftp_messages["Move"] = "."; +$net2ftp_messages["Delete"] = ""; +$net2ftp_messages["Rename"] = "."; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = ""; +$net2ftp_messages["Unzip"] = ""; +$net2ftp_messages["Zip"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Search"] = ""; +$net2ftp_messages["Go to the parent directory"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Transform selected entries: "] = " : "; +$net2ftp_messages["Transform selected entry: "] = " : "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = " Java "; +$net2ftp_messages["Upload files using a Flash applet"] = " , Flash "; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = " ( PHP -)"; +$net2ftp_messages["Go to the advanced functions"] = " . "; +$net2ftp_messages["Copy the selected entries"] = " "; +$net2ftp_messages["Move the selected entries"] = " "; +$net2ftp_messages["Delete the selected entries"] = " "; +$net2ftp_messages["Rename the selected entries"] = " "; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod ( Unix/Linux/BSD )"; +$net2ftp_messages["Download a zip file containing all selected entries"] = " zip-, "; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = " FTP "; +$net2ftp_messages["Zip the selected entries to save or email them"] = " email"; +$net2ftp_messages["Calculate the size of the selected entries"] = " "; +$net2ftp_messages["Find files which contain a particular word"] = " , "; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = " %1\$s "; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = " %1\$s "; +$net2ftp_messages["Ascending order"] = ""; +$net2ftp_messages["Descending order"] = ""; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["Up"] = ""; +$net2ftp_messages["Click to check or uncheck all rows"] = " "; +$net2ftp_messages["All"] = ""; +$net2ftp_messages["Name"] = ""; +$net2ftp_messages["Type"] = ""; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Perms"] = ""; +$net2ftp_messages["Mod Time"] = ""; +$net2ftp_messages["Actions"] = ""; +$net2ftp_messages["Select the directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = " symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = " symlink' %1\$s"; +$net2ftp_messages["View"] = "."; +$net2ftp_messages["Edit"] = "."; +$net2ftp_messages["Update"] = ""; +$net2ftp_messages["Open"] = ""; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = " 1\$s "; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = " %1\$s HTTP-"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(: , .)"; +$net2ftp_messages["This folder is empty"] = " "; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = ""; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Symlinks"] = ""; +$net2ftp_messages["Unrecognized FTP output"] = " FTP"; +$net2ftp_messages["Number"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Skipped"] = ""; +$net2ftp_messages["Data transferred from this IP address today"] = " , IP "; +$net2ftp_messages["Data transferred to this FTP server today"] = " FTP "; + +// printLocationActions() +$net2ftp_messages["Language:"] = ":"; +$net2ftp_messages["Skin:"] = ":"; +$net2ftp_messages["View mode:"] = " :"; +$net2ftp_messages["Directory Tree"] = " "; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s "; +$net2ftp_messages["This file is not accessible from the web"] = " web-"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = " :"; +$net2ftp_messages["Choose"] = ""; +$net2ftp_messages["Up"] = ""; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = " "; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = " :"; +$net2ftp_messages["The number of files which were skipped is:"] = " , :"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod "; +$net2ftp_messages["Set all permissions"] = " "; +$net2ftp_messages["Read"] = ""; +$net2ftp_messages["Write"] = ""; +$net2ftp_messages["Execute"] = ""; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Everyone"] = ""; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = " , \" \""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Chmod value"] = "Chmod value"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod "; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod "; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Chmod %1\$s 000-777. ."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Copy directories and files"] = " "; +$net2ftp_messages["Move directories and files"] = " "; +$net2ftp_messages["Delete directories and files"] = " "; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = " ?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = " !"; +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ."; +$net2ftp_messages["Different target FTP server:"] = " FTP-:"; +$net2ftp_messages["Username"] = ""; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = " , FTP-."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = " FTP-, ."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = " , FTP-."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = " FTP-, ."; +$net2ftp_messages["Copy directory %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move directory %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move file %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["File %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move symlink %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Symlink %1\$s"] = " %1\$s"; +$net2ftp_messages["Target directory:"] = " :"; +$net2ftp_messages["Target name:"] = " :"; +$net2ftp_messages["Processing the entries:"] = " :"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "C 4 "; +$net2ftp_messages["Template overview"] = " "; +$net2ftp_messages["Template details"] = " "; +$net2ftp_messages["Files are copied"] = " "; +$net2ftp_messages["Edit your pages"] = " "; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = " ."; +$net2ftp_messages["Back to the Browse screen"] = ", "; +$net2ftp_messages["Template"] = ""; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = " "; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = " FTP-. . ?"; +$net2ftp_messages["Install template to directory: "] = " : "; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Preview page"] = " "; +$net2ftp_messages["opens in a new window"] = " "; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = ", : "; +$net2ftp_messages["Done."] = "."; +$net2ftp_messages["Continue"] = ""; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = ""; +$net2ftp_messages["Browse the FTP server"] = " FTP "; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = " !"; +$net2ftp_messages["Edit website at %1\$s"] = " %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: \" ...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = ": %1\$s. , . ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = ": %1\$s. ..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = " "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Please specify a filename"] = " "; +$net2ftp_messages["Status: This file has not yet been saved"] = ": "; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = ": %1\$s %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = ": "; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = ": "; +$net2ftp_messages["File: "] = ": "; +$net2ftp_messages["New file name: "] = " : "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = ": "; +$net2ftp_messages["Copy up"] = " "; +$net2ftp_messages["Copy down"] = " "; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = " "; +$net2ftp_messages["Search again"] = " "; +$net2ftp_messages["Search results"] = " "; +$net2ftp_messages["Please enter a valid search word or phrase."] = " ."; +$net2ftp_messages["Please enter a valid filename."] = " ."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = ", \"\", , 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = ", \"\", , 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = ", -- \"\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = ", -- \"\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = " %1\$s ."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = " %1\$s :"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = " "; +$net2ftp_messages["Case sensitive search"] = " "; +$net2ftp_messages["Restrict the search to:"] = " :"; +$net2ftp_messages["files with a filename like"] = " "; +$net2ftp_messages["(wildcard character is *)"] = "( *)"; +$net2ftp_messages["files with a size"] = " "; +$net2ftp_messages["files which were last modified"] = ", "; +$net2ftp_messages["from"] = ""; +$net2ftp_messages["to"] = ""; + +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["File"] = ""; +$net2ftp_messages["Line"] = ""; +$net2ftp_messages["Action"] = ""; +$net2ftp_messages["View"] = "."; +$net2ftp_messages["Edit"] = "."; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = " "; +$net2ftp_messages["Unable to open the template file"] = " "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Unable to get the list of packages"] = " "; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = " net2ftp FTP ."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = " PHP."; +$net2ftp_messages["In order to run it, click on the link below."] = " "; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp FTP- -."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = " Java "; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = " , :"; +$net2ftp_messages["Navigate the FTP server"] = " FTP-"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = " , ."; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = " 3 : , upload-and-unzip ( ) Java-."; +$net2ftp_messages["Download files"] = " "; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = " .
- zip-."; +$net2ftp_messages["Zip files"] = " "; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... ."; +$net2ftp_messages["Unzip files"] = " "; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = " : .zip, .tar, .tgz .gz."; +$net2ftp_messages["Install software"] = " "; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = " ( PHP)."; +$net2ftp_messages["Copy, move and delete"] = ", "; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = " , , , ."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = " FTP-"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = " , FTP- FTP- FTP-."; +$net2ftp_messages["Rename and chmod"] = " "; +$net2ftp_messages["Chmod handles directories recursively."] = " chmod ."; +$net2ftp_messages["View code with syntax highlighting"] = " "; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = " "; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = " . , , FTP-."; +$net2ftp_messages["HTML editors"] = "HTML "; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = " HTML WYSIWYG. ."; +$net2ftp_messages["Code editor"] = " "; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = " HTML PHP ."; +$net2ftp_messages["Search for words or phrases"] = " "; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = " , ."; +$net2ftp_messages["Calculate size"] = " "; +$net2ftp_messages["Calculate the size of directories and files."] = " ."; + +$net2ftp_messages["FTP server"] = "FTP-"; +$net2ftp_messages["Example"] = ""; +$net2ftp_messages["Port"] = ""; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = ""; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Anonymous"] = ""; +$net2ftp_messages["Passive mode"] = " "; +$net2ftp_messages["Initial directory"] = ""; +$net2ftp_messages["Language"] = ""; +$net2ftp_messages["Skin"] = ""; +$net2ftp_messages["FTP mode"] = " FTP"; +$net2ftp_messages["Automatic"] = ""; +$net2ftp_messages["Login"] = ""; +$net2ftp_messages["Clear cookies"] = " "; +$net2ftp_messages["Admin"] = ""; +$net2ftp_messages["Please enter an FTP server."] = ", FTP ."; +$net2ftp_messages["Please enter a username."] = ", ."; +$net2ftp_messages["Please enter a password."] = ", ."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = ", ."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = ", FTP %1\$s."; +$net2ftp_messages["Username"] = ""; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = " ; , FTP %1\$s ."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = " IP ; , FTP %1\$s ."; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Login"] = ""; +$net2ftp_messages["Continue"] = ""; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = " "; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = " FTP . , ."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = ": \"\" FTP ."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = " , ."; +$net2ftp_messages["Close"] = ""; +$net2ftp_messages["Click here to close this window"] = " , "; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = " "; +$net2ftp_messages["The new directories will be created in %1\$s."] = " %1\$s."; +$net2ftp_messages["New directory name:"] = " :"; +$net2ftp_messages["Directory %1\$s was successfully created."] = " %1\$s ."; +$net2ftp_messages["Directory %1\$s could not be created."] = " %1\$s ."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = " FTP "; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = " :"; +$net2ftp_messages["FTP server response:"] = " FTP :"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = " "; +$net2ftp_messages["Old name: "] = " : "; +$net2ftp_messages["New name: "] = " : "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = " . %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = " . %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = " "; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = " %1\$s of %2\$s FTP "; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = " %1\$s FTP "; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ."; +$net2ftp_messages["Unzip archive %1\$s to:"] = " %1\$s to:"; +$net2ftp_messages["Target directory:"] = " :"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = " :"; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Archives"] = ""; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = ", FTP-."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = " FTP-."; +$net2ftp_messages["Add another"] = " "; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +$net2ftp_messages["Choose a directory"] = " "; +$net2ftp_messages["Please wait..."] = ", ..."; +$net2ftp_messages["Uploading... please wait..."] = "... ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = " %1\$s <\/b>, ."; +$net2ftp_messages["This window will close automatically in a few seconds."] = " ."; +$net2ftp_messages["Close window now"] = " "; + +$net2ftp_messages["Upload files and archives"] = " "; +$net2ftp_messages["Upload results"] = " "; +$net2ftp_messages["Checking files:"] = " :"; +$net2ftp_messages["Transferring files to the FTP server:"] = " FTP-:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = " :"; +$net2ftp_messages["Upload more files and archives"] = " "; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = ":"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = " net2ftp %1\$s PHP %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = " %1\$s "; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = " FTP (ASCII BINARY) , "; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = " , "; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = " %1\$s"; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = " Macromedia ShockWave Flash %1\$s"; +$net2ftp_messages["Image"] = ""; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = " Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = " 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = " Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = " zip- FTP- :"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email zip- :"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = ", : IP- email."; +$net2ftp_messages["Some additional comments to add in the email:"] = " email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = " zip. ."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Email , (%1\$s) .
, _@.ru"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/sv.inc.php b/ehcp/net2ftp/languages/sv.inc.php new file mode 100644 index 0000000..e8d3262 --- /dev/null +++ b/ehcp/net2ftp/languages/sv.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Biblioteket %1\$s existerar inte eller kunde inte vljas, s biblioteket %2\$s visas istllet."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Ditt root bibliotek %1\$s existerar inte eller kunde inte vljas."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Biblioteket %1\$s kunde inte vljas - du kanske inte har rttigheter att se detta bibliotek, eller s existerar det inte."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Utfr %1\$s i ett nytt fnster"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Vlj minst ett bibliotek eller fil!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP servern %1\$s finns inte i listan med tilltna FTP servers."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP servern %1\$s finns i listan med bannlysta FTP servers."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP server porten %1\$s fr inte anvndas."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Din IP address (%1\$s) finns i listan med bannlysta IP addresser."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Tabellen net2ftp_users innehller dubblettrader."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Du skrev inte in ditt Administratrs anvndarnamn eller lsenord."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Fel anvndarnamn eller lsenord. Frsk igen."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Kunde inte faststlla din IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Tabell net2ftp_log_consumption_ipaddress inehller dubblettrader."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Tabell net2ftp_log_consumption_ftpserver inehller dubblettrader."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Variabeln consumption_ipaddress_datatransfer r inte numerisk."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Tabell net2ftp_log_consumption_ipaddress kunde inte uppdateras."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Tabell net2ftp_log_consumption_ipaddress inehller dubblettinmatningar."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Tabell net2ftp_log_consumption_ftpserver kunde inte uppdateras."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Tabell net2ftp_log_consumption_ftpserver inehller dubblettinmatningar."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kunde inte ansluta till MySQL databasen. Kontrollera dina MySQL databas instllningar i net2ftp's konfigurationsfil settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Kunde inte vlja MySQL databas. Kontrollera dina MySQL databas instllningar i net2ftp's konfigurationsfil settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Ett fel har uppsttt"; +$net2ftp_messages["Go back"] = "Go back"; +$net2ftp_messages["Go to the login page"] = "G till login sidan"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Kunde inte ansluta till FTP server %1\$s p port %2\$s.

r du sker att det r rtt adress till FTP servern? Denna r ofta annorlunda n den till HTTP (web) servern. Kontakta din ISPs support eller systemadministratr fr hjlp.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Kunde inte logga in p FTP servern %1\$s med anvndarnamn %2\$s.

r du sker att ditt anvndarnamn och lsenord r korrekt? Kontakta din ISPs support eller systemadministratr fr hjlp.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Kunde inte vlja passive mode p FTP servern %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Kunde inte ansluta till den andra (target) FTP servern %1\$s p port %2\$s.

r du sker att detta r adressen till den andra (target) FTP servern? Denna r ofta annorlunda n den till HTTP (web) servern. Kontakta din ISPs support eller systemadministratr fr hjlp.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Kunde inte logga in p den andra (target) FTP servern %1\$s med anvndarnamn %2\$s.

r du sker att ditt anvndarnamn och lsenord r korrekt? Kontakta din ISPs support eller systemadministratr fr hjlp.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Kunde inte vlja passive mode p den andra (target) FTP servern %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Kunde inte dpa om bibliotek eller fil %1\$s till %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Kunde inte utfra site command %1\$s. Notera att CHMOD command bara r tillgngligt p Unix FTP servrar, inte p Windows FTP servrar."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Bibliotek %1\$s framgngsrikt chmodded till %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Bearbetar inmatningar i biblioteket %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Fil %1\$s framgngsrikt chmodded till %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alla valda bibliotek och filer har bearbetats."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Kunde inte radera biblioteket %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Kunde inte radera filen %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Kunde inte skapa biblioteket %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Kunde inte skapa tillfllig fil"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Kunde inte ladda filen %1\$s frn FTP servern och spara den som temporr fil %2\$s.
Kontrollera rttigheter fr %3\$s biblioteket.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Kunde inte ppna den temporra filen. Kontrollera rttigheter fr %1\$s biblioteket."; +$net2ftp_messages["Unable to read the temporary file"] = "Kunde inte lsa den temporra filen"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Kunde inte avsluta hanteringen av den temporra filen"; +$net2ftp_messages["Unable to delete the temporary file"] = "Kunde inte radera den temporra filen"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Kunde inte skapa den temporra filen. Kontrollera rttigheter fr %1\$s biblioteket."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Kunde inte ppna den temporra filen. Kontrollera rttigheter fr %1\$s biblioteket."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Kunde inte skriva raden till den temporra filen %1\$s.
Kontrollera rttigheter fr %2\$s biblioteket."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Kunde inte avsluta hanteringen av den temporra filen"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Kunde inte placera filen %1\$s p FTP servern.
Du kanske inte har rttigheter att skriva till biblioteket."; +$net2ftp_messages["Unable to delete the temporary file"] = "Kunde inte radera den temporra filen"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Bearbetar bibliotek %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Mlbibliotek %1\$s r samma som eller ett underbibliotek till kllbiblioteket %2\$s, s detta bibliotek skapas inte"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Kunde inte skapa underbibliotek %1\$s. Det kanske redan finns. Fortstter kopiera/flytta processen..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Skapat mlunderbibliotek %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Biblioteket %1\$s kunde inte vljas, s detta bibliotek skapas inte"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Kunde inte radera underbiblioteket %1\$s - det kan innehlla filer"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Raderat underbibliotek %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Raderat underbibliotek %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Bearbetande av bibliotek %1\$s frdigt"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Mlet fr filen %1\$s r samma som kllan, s denna fil skapas inte"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Filen %1\$s r fr stor fr att kopieras, s denna fil skapas inte"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Filen %1\$s r fr stor fr att flyttas, avbryter flytt"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Unable to copy the file %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Flyttade fil %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Kunde inte radera filen %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Raderade filen %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Alla valda bibliotek och filer har bearbetats."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Kunde inte kopiera fjrrfilen %1\$s till den lokala filen med FTP mode %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Kunde inte radera filen %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daglig grns uppndd: filen %1\$s kommer inte verfras"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Kunde inte kopiera den lokala filen till fjrrfilen %1\$s med FTP mode %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Kunde inte radera den lokala filen"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Kunde inte radera den temporra filen"; +$net2ftp_messages["Unable to send the file to the browser"] = "Kunde inte skicka filen till webblsaren"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Kunde inte skapa tillfllig fil"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Zip filen har sparats p FTP servern som %1\$s"; +$net2ftp_messages["Requested files"] = "Begrd fil"; + +$net2ftp_messages["Dear,"] = "Kra,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Ngon har begrt att filen i bilagan skickas till denna emailadress (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Om du inte knner till detta eller litar p den personen, radera detta email utan att ppna bifogad Zip fil."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Kom ihg att om du inte ppnar Zip filen, kan inte filer inuti ziparkivet skada din dator."; +$net2ftp_messages["Information about the sender: "] = "Information om avsndaren: "; +$net2ftp_messages["IP address: "] = "IP adress: "; +$net2ftp_messages["Time of sending: "] = "Skickat den: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Skickat via net2ftp applikationen installerad p denna webbsida: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Meddelande frn avsndaren: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp r fri programvara, slppt under GNU/GPL licens. Fr mer information, http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Zip fil skickad till %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Filen %1\$s r fr stor. Denna fil kommer inte att laddas upp."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Kunde inte skapa temporr fil."; +$net2ftp_messages["File %1\$s could not be moved"] = "Filen %1\$s kunde inte flyttas"; +$net2ftp_messages["File %1\$s is OK"] = "Filen %1\$s r OK"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Kunde inte flytta den uppladdade filen till temporrt bibliotek.

Administratren fr denna webbsida mste chmod 777 /temp biblioteket av net2ftp."; +$net2ftp_messages["You did not provide any file to upload."] = "Du valde ingen fil att ladda upp."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Filen %1\$s kunde inte verfras till FTP servern"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Filen %1\$s har verfrts till FTP servern med FTP mode %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "verfr filer till FTP server"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Bearbetar arkiv nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Arkiv %1\$s ej bearbetat, filnamnsfrlngning inte igenknt. Bara zip, tar, tgz och gz arkiv stdjs fr tillfllet."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Kunde inte extrahera filer och bibliotek frn arkivet"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Skapade bibliotek %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Kunde inte skapa bibliotek %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Kopierade fil %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Kunde inte kopiera fil %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Kunde inte radera det temporra biblioteket"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Kunde inte radera den temporra filen %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Kunde inte utfra site command %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Din uppgift stoppades"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Den uppgift du ville utfra med net2ftp tog lngre tid n tilltna %1\$s sekunder, drfr stoppades uppgiften."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Denna tidsgrns garanterar rttvist utnyttjande av webbservern fr alla."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Frsk dela upp din uppgift i mindre bitar: begrnsa ditt val av filer och uteslut de strsta filerna."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Om du verkligen vill att net2ftp ska kunna hantera stora uppgifter som tar lngre tid, vervg att installera net2ftp p din egen server."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Du skrev ingen text att snda via email!"; +$net2ftp_messages["You did not supply a From address."] = "Du skrev ingen Frn adress."; +$net2ftp_messages["You did not supply a To address."] = "Du skrev ingen Till adress."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Pga tekniska problem kunde inte email till %1\$s skickas."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Kunde inte utfra SQL frga."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Fyll i anvndarnamn och lsenord fr FTP servern "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Du fyllde inte i dina inloggningsuppgifter i popup fnstret.
Klicka p \"G till login sida\" nedan."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "tkomst av net2ftp Admin panel r avstngd, drfr inget lsenord angivits i file settings.inc.php. Fyll i lsenord i den filen och ladda om den hr sidan."; +$net2ftp_messages["Please enter your Admin username and password"] = "Fyll i ditt Admin anvndarnamn och lsenord"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Du fyllde inte i dina inloggningsuppgifter i popup fnstret.
Klicka p \"G till login sida\" nedan."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Fel anvndarnamn eller lsenord fr net2ftp Admin panel. Anvndarnamn och lsenord anges i file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Bl"; +$net2ftp_messages["Grey"] = "Gr"; +$net2ftp_messages["Black"] = "Svart"; +$net2ftp_messages["Yellow"] = "Gul"; +$net2ftp_messages["Pastel"] = "Pastell"; + +// getMime() +$net2ftp_messages["Directory"] = "Bibliotek"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML fil"; +$net2ftp_messages["Java source file"] = "Java source fil"; +$net2ftp_messages["JavaScript file"] = "JavaScript fil"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Text fil"; +$net2ftp_messages["Bitmap file"] = "Bitmap fil"; +$net2ftp_messages["GIF file"] = "GIF fil"; +$net2ftp_messages["JPEG file"] = "JPEG fil"; +$net2ftp_messages["PNG file"] = "PNG fil"; +$net2ftp_messages["TIF file"] = "TIF fil"; +$net2ftp_messages["GIMP file"] = "GIMP fil"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word dokument"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel kalkylblad"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access databas"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Projekt fil"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 dokument"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 mall"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 kalkylblad"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 mall"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 dokument"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 mall"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 mall"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global dokument"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x dokument"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global dokument"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x kalkylblad"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x dokument"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x fil"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x dokument"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x dokument"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail fil"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat dokument"; +$net2ftp_messages["ARC archive"] = "ARC arkiv"; +$net2ftp_messages["ARJ archive"] = "ARJ arkiv"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ arkiv"; +$net2ftp_messages["TAR archive"] = "TAR arkiv"; +$net2ftp_messages["Zip archive"] = "Zip arkiv"; +$net2ftp_messages["MOV movie file"] = "MOV film fil"; +$net2ftp_messages["MPEG movie file"] = "MPEG film fil"; +$net2ftp_messages["Real movie file"] = "Real film fil"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime film fil"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash fil"; +$net2ftp_messages["Shockwave file"] = "Shockwave fil"; +$net2ftp_messages["WAV sound file"] = "WAV sound fil"; +$net2ftp_messages["Font file"] = "Font fil"; +$net2ftp_messages["%1\$s File"] = "%1\$s Fil"; +$net2ftp_messages["File"] = "Fil"; + +// getAction() +$net2ftp_messages["Back"] = "Bakt"; +$net2ftp_messages["Submit"] = "Skicka in"; +$net2ftp_messages["Refresh"] = "Uppdatera"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Ikoner"; +$net2ftp_messages["List"] = "Lista"; +$net2ftp_messages["Logout"] = "Logga ut"; +$net2ftp_messages["Help"] = "Hjlp"; +$net2ftp_messages["Bookmark"] = "Bokmrke"; +$net2ftp_messages["Save"] = "Spara"; +$net2ftp_messages["Default"] = "Frvalt"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Hjlp Guide"; +$net2ftp_messages["Forums"] = "Forum"; +$net2ftp_messages["License"] = "Licens"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "Du skickas nu till net2ftp forum. Dessa forum r endast till fr net2ftp relaterade mnen - inte fr allmnna webhotellsfrgor."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin funktioner"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Versions information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Denna version av net2ftp r up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Information om senaste version kunde inte laddas ner frn net2ftp.coms server. Kontrollera skerhetsinstllningarna i din webblsare, dessa kan hindra nedladdning av en liten fil frn net2ftp.coms server."; +$net2ftp_messages["Logging"] = "Loggar"; +$net2ftp_messages["Date from:"] = "Datum frn:"; +$net2ftp_messages["to:"] = "till:"; +$net2ftp_messages["Empty logs"] = "Tm logg"; +$net2ftp_messages["View logs"] = "Visa logg"; +$net2ftp_messages["Go"] = "Kr"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tabell"; +$net2ftp_messages["Create the MySQL database tables"] = "Skapa MySQL databastabell"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin funktioner"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "Hanteringen av filen %1\$s kunde inte startas."; +$net2ftp_messages["The file %1\$s could not be opened."] = "Filen %1\$s kunde inte ppnas."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "Hanteringen av filen %1\$s kunde inte avslutas."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Anslutningen till servern %1\$s kunde inte upprttas. kontrollera databasinstllningarna du angett."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Kunde inte vlja databasen %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL frga nr %1\$s kunde inte utfras."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL frga nr %1\$s utfrd framgngsrikt."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Fyll i dina MySQL instllningar:"; +$net2ftp_messages["MySQL username"] = "MySQL anvndarnamn"; +$net2ftp_messages["MySQL password"] = "MySQL lsenord"; +$net2ftp_messages["MySQL database"] = "MySQL databas"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Denna SQL frga kommer utfras:"; +$net2ftp_messages["Execute"] = "Utfr"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Anvnda instllningar:"; +$net2ftp_messages["MySQL password length"] = "MySQL lsenord lngd"; +$net2ftp_messages["Results:"] = "Resultat:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funktioner"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Kunde inte utfra SQL frga %1\$s."; +$net2ftp_messages["No data"] = "Inga data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin funktioner"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Tabellen %1\$s tmdes."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Tabellen %1\$s kunde inte tmmas."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Tabellen %1\$s optimerades."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Tabellen %1\$s kunde inte optimeras."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Avancerade funktioner"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Kr"; +$net2ftp_messages["Disabled"] = "Avstngd"; +$net2ftp_messages["Advanced FTP functions"] = "Avancerade FTP funktioner"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Skicka godtyckligt FTP kommando till FTP servern"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Denna funktion r endast tillgnglig med PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "Felskningsfunktioner"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Felsk net2ftp p denna webbserver"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Felsk en FTP server"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Testa net2ftp listanalysregler"; +$net2ftp_messages["Translation functions"] = "versttningsfunktioner"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduktion till versttningsfunktioner"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extrhera meddelande fr att verstta frn kodade filer"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Sk nya och gamla meddelanden"; + +$net2ftp_messages["Beta functions"] = "Beta funktioner"; +$net2ftp_messages["Send a site command to the FTP server"] = "Skicka site command till FTP servern"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: lsenordsskydda ett bibliotek, skapa egna felsidor"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: utfr en SQL frga"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Site command funktioner inte tillgngliga p denna webbserver."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Apache funktioner inte tillgngliga p denna webbserver."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "MySQL funktioner inte tillgngliga p denna webbserver."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Ovntad state2 rad. Avslutar."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Felsk en FTP server"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Anslutningsinstllningar:"; +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["FTP server port"] = "FTP server port"; +$net2ftp_messages["Username"] = "Anvndarnamn"; +$net2ftp_messages["Password"] = "Lsenord"; +$net2ftp_messages["Password length"] = "Lsenord lngd"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Directory"] = "Bibliotek"; +$net2ftp_messages["Printing the result"] = "Skriver ut resultat"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Ansluter till FTP servern: "; +$net2ftp_messages["Logging into the FTP server: "] = "Loggar in p FTP servern: "; +$net2ftp_messages["Setting the passive mode: "] = "Stller in passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Mottar FTP server system typ: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ndrar till bibliotek %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Biblioteket frn FTP servern r: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Mottar rlista med bibliotek och filer: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Frsker en andra gng att motta rlistan med bibliotek och filer: "; +$net2ftp_messages["Closing the connection: "] = "Stnger anslutning: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rlista med bibliotek och filer:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Analyserad lista med bibliotek och filer:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "inte OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Testa net2ftp listanalysregler"; +$net2ftp_messages["Sample input"] = "Exempelinmatning"; +$net2ftp_messages["Parsed output"] = "Analyserat resultat"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Felsk din net2ftp installation"; +$net2ftp_messages["Printing the result"] = "Skriver ut resultat"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Kontrollerar om FTP modul i PHP r installerad: "; +$net2ftp_messages["yes"] = "ja"; +$net2ftp_messages["no - please install it!"] = "nej - installera den!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Kontrollerar rttigheter fr biblioteket p webbservern: en liten fil kommer skrivas till /temp mappen och sen raderas."; +$net2ftp_messages["Creating filename: "] = "Skapar filenamn: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. Filnamn: %1\$s"; +$net2ftp_messages["not OK"] = "inte OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "inte OK. Kontrollera rttigheter fr %1\$s biblioteket"; +$net2ftp_messages["Opening the file in write mode: "] = "ppnar filen i skrivlge: "; +$net2ftp_messages["Writing some text to the file: "] = "Skriver text till filen: "; +$net2ftp_messages["Closing the file: "] = "Stnger filen: "; +$net2ftp_messages["Deleting the file: "] = "Raderar filen: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testar FTP funktioner"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Ansluter till en test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Ansluter till FTP servern: "; +$net2ftp_messages["Logging into the FTP server: "] = "Loggar in p FTP servern: "; +$net2ftp_messages["Setting the passive mode: "] = "Stller in passive mode: "; +$net2ftp_messages["Getting the FTP server system type: "] = "Mottar FTP server system typ: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ndrar till bibliotek %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Biblioteket frn FTP servern r: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Mottar rlista med bibliotek och filer: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Frsker en andra gng att motta rlistan med bibliotek och filer: "; +$net2ftp_messages["Closing the connection: "] = "Stnger anslutning: "; +$net2ftp_messages["Raw list of directories and files:"] = "Rlista med bibliotek och filer:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Analyserad lista med bibliotek och filer:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "inte OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Anmrkning: nr du anvnder detta bokmrke, kommer ett popup fnster ppnas och frga efter anvndarnamn och lsenord."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Vlj bibliotek"; +$net2ftp_messages["Please wait..."] = "Vnta..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Bibliotek med namn som innehller \' kan inte visas korrekt. De kan bara raderas. Backa och vlj ett annat underbibliotek."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daglig grns uppndd: du kommer inte kunna verfra data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Fr att garantera rttvist anvndande av webbservern fr alla, r dataverfringsvolymer och scriptkrningar begrnsade fr alla anvndare och per dag. Vid uppndd grns kan du fortfarande navigera p FTP servern men inte verfra data till/frn den."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Behver du obegrnsat anvndande, Installera net2ftp p din egen webbserver."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Nytt dir"; +$net2ftp_messages["New file"] = "Ny fil"; +$net2ftp_messages["HTML templates"] = "HTML mallar"; +$net2ftp_messages["Upload"] = "Upload"; +$net2ftp_messages["Java Upload"] = "Java Upload"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Avancerat"; +$net2ftp_messages["Copy"] = "Kopiera"; +$net2ftp_messages["Move"] = "Flytta"; +$net2ftp_messages["Delete"] = "Radera"; +$net2ftp_messages["Rename"] = "Byt namn"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "Download"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Storlek"; +$net2ftp_messages["Search"] = "Sk"; +$net2ftp_messages["Go to the parent directory"] = "G till huvudbibliotek"; +$net2ftp_messages["Go"] = "Kr"; +$net2ftp_messages["Transform selected entries: "] = "Omvandla valda inmatningar: "; +$net2ftp_messages["Transform selected entry: "] = "Omvandla vald inmatning: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Skapa nytt underbibliotek i bibliotek %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Skapa ny fil i bibliotek %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Skapa webbsida ltt med frdiga mallar"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Ladda upp nya filer i bibliotek %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Ladda upp bibliotek och filer med en Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Installera mjukvarupaket (krver PHP p webbservern)"; +$net2ftp_messages["Go to the advanced functions"] = "G till avancerade funktioner"; +$net2ftp_messages["Copy the selected entries"] = "Kopiera valda inmatningar"; +$net2ftp_messages["Move the selected entries"] = "Flytta valda inmatningar"; +$net2ftp_messages["Delete the selected entries"] = "Radera valda inmatningar"; +$net2ftp_messages["Rename the selected entries"] = "Dp om valda inmatningar"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod valda inmatningar (fungerar endast p Unix/Linux/BSD serverar)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Ladda ner en zip fil innehllande alla valda inmatningar"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip valda arkiv p FTP servern"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zippa valda inmatningar fr att spara eller skicka med email"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Berkna storlek p valda inmatningar"; +$net2ftp_messages["Find files which contain a particular word"] = "Hitta filer som innehller ett srskillt ord"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Klicka fr att sortera efter %1\$s i fallande ordning"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Klicka fr att sortera efter %1\$s i stigande ordning"; +$net2ftp_messages["Ascending order"] = "Stigande ordning"; +$net2ftp_messages["Descending order"] = "Fallande ordning"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "Upp"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Klicka fr att markera eller avmarkera alla rader"; +$net2ftp_messages["All"] = "Alla"; +$net2ftp_messages["Name"] = "Namn"; +$net2ftp_messages["Type"] = "Typ"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "gare"; +$net2ftp_messages["Group"] = "Grupp"; +$net2ftp_messages["Perms"] = "Rttigh"; +$net2ftp_messages["Mod Time"] = "Mod Tid"; +$net2ftp_messages["Actions"] = "Funktion"; +$net2ftp_messages["Select the directory %1\$s"] = "Vlj bibliotek %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Vlj filen %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Vlj symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "G till underbibliotek %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Ladda ner filen %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Flj symlink %1\$s"; +$net2ftp_messages["View"] = "Visa"; +$net2ftp_messages["Edit"] = "ndra"; +$net2ftp_messages["Update"] = "Upddatera"; +$net2ftp_messages["Open"] = "ppna"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Visa markerad kllkod fr fil %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "ndra kllkod fr fil %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Ladda upp ny version av filen %1\$s och frena ndringar"; +$net2ftp_messages["View image %1\$s"] = "Visa bild %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Visa filen %1\$s frn din HTTP webbserver"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Notering: Denna lnk kanske inte fungerar om du inte har eget domnnamn.)"; +$net2ftp_messages["This folder is empty"] = "Denna mapp r tom"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Bibliotek"; +$net2ftp_messages["Files"] = "Filer"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Oknd FTP utdata"; +$net2ftp_messages["Number"] = "Nummer"; +$net2ftp_messages["Size"] = "Storlek"; +$net2ftp_messages["Skipped"] = "Hoppa ver"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Sprk:"; +$net2ftp_messages["Skin:"] = "Skin:"; +$net2ftp_messages["View mode:"] = "Visa mode:"; +$net2ftp_messages["Directory Tree"] = "Bibliotek"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Utfr %1\$s i ett nytt fnster"; +$net2ftp_messages["This file is not accessible from the web"] = "Ingen tkomst av denna fil frn webben"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Dubbel-klicka fr attg till underbibliotek:"; +$net2ftp_messages["Choose"] = "Vlj"; +$net2ftp_messages["Up"] = "Upp"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Storlek av valda bibliotek och filer"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Total storlek av valda bibliotek och filer r:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Antal filer som hoppades ver r:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod bibliotek och filer"; +$net2ftp_messages["Set all permissions"] = "Stll in alla behrigheter"; +$net2ftp_messages["Read"] = "Ls"; +$net2ftp_messages["Write"] = "Skriv"; +$net2ftp_messages["Execute"] = "Utfr"; +$net2ftp_messages["Owner"] = "gare"; +$net2ftp_messages["Group"] = "Grupp"; +$net2ftp_messages["Everyone"] = "Alla"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Fr att stlla in samma vrde p alla behrigheter, Skriv i behrigheter ovanfr och klicka p knappen \"Stll in alla behrigheter\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Stll in behrigheter fr bibliotek %1\$s till: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Stll in behrigheter fr fil %1\$s till: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Stll in behrigheter fr symlink %1\$s till: "; +$net2ftp_messages["Chmod value"] = "Chmod vrde"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod ven underbibliotek i detta bibliotek"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod ven filer i detta bibliotek"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Chmod nr %1\$s r utanfr intervallet 000-777. Frsk igen."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Vlj bibliotek"; +$net2ftp_messages["Copy directories and files"] = "Kopiera bibliotek och filer"; +$net2ftp_messages["Move directories and files"] = "Flytta bibliotek och filer"; +$net2ftp_messages["Delete directories and files"] = "Radera bibliotek och filer"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "r du sker du vill radera dessa bibliotek och filer?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Alla underbibliotek och filer i de valda biblioteken kommer ocks raderas!"; +$net2ftp_messages["Set all targetdirectories"] = "Ange mlbibliotek"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Fr att stlla in ett vanligt mlbibliotek, ange det mlbiblioteket i textfltet ovan och klicka p knappen \"Ange alla mlbibliotek\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Notering: mlbiblioteket mste vara skapat innan ngot kan kopieras in i det."; +$net2ftp_messages["Different target FTP server:"] = "Annan mlFTP server:"; +$net2ftp_messages["Username"] = "Anvndarnamn"; +$net2ftp_messages["Password"] = "Lsenord"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Lmna tomt om du vill kopiera filerna till samma FTP server."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Om du vill kopiera filerna till en annan FTP server, ange dina inloggningsuppgifter."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Lmna tomt om du vill flytta filer till samma FTP server."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Om du vill flytta filer till en annan FTP server, ange dina inloggningsuppgifter."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Kopiera bibliotek %1\$s till:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Flytta bibliotek %1\$s till:"; +$net2ftp_messages["Directory %1\$s"] = "Bibliotek %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Kopiera fil %1\$s till:"; +$net2ftp_messages["Move file %1\$s to:"] = "Flytta fil %1\$s till:"; +$net2ftp_messages["File %1\$s"] = "Fil %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Kopiera symlink %1\$s till:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Flytta symlink %1\$s till:"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Mlbibliotek:"; +$net2ftp_messages["Target name:"] = "Mlnamn:"; +$net2ftp_messages["Processing the entries:"] = "Bearbetar inmatningarna:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Skapa webbsite i 4 enkla steg"; +$net2ftp_messages["Template overview"] = "Mallversikt"; +$net2ftp_messages["Template details"] = "Mallegenskaper"; +$net2ftp_messages["Files are copied"] = "Filer r kopierade"; +$net2ftp_messages["Edit your pages"] = "ndra dina sidor"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Klicka p bilden fr att visa mallegenskaper."; +$net2ftp_messages["Back to the Browse screen"] = "Tillbaka till blddringsskrm"; +$net2ftp_messages["Template"] = "Mall"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Klick p bilden fr att visa egenskaper fr denna mall"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Mallfiler kommer att kopieras till din FTP server. Existerande filer med samma namn kommer att skrivas ver. Vill du fortstta?"; +$net2ftp_messages["Install template to directory: "] = "Installera mall i bibliotek: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Storlek"; +$net2ftp_messages["Preview page"] = "versiktssida"; +$net2ftp_messages["opens in a new window"] = "ppnas i nytt fnster"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Vnta medans mallfiler verfrs till din server: "; +$net2ftp_messages["Done."] = "Frdig."; +$net2ftp_messages["Continue"] = "Fortstt"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "ndra sida"; +$net2ftp_messages["Browse the FTP server"] = "Blddra i FTP servern"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Lgg till denna lnk i dina favoriter fr att tervnda till denna sida senare!"; +$net2ftp_messages["Edit website at %1\$s"] = "ndra website hos %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: hger-klicka p lnken och vlj \"Lgg till i Favoriter...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: hger-klicka p lnken och vlj \"Lgg till bokmrke...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "VARNING: Kunde inte skapa underbibliotek %1\$s. Det kan redan finnas. Fortstter..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Skapat mlunderbibliotek %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Kunde inte ppna mallfilen"; +$net2ftp_messages["Unable to read the template file"] = "kunde inte lsa mallfilen"; +$net2ftp_messages["Please specify a filename"] = "Specificera filnamn"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Status: Denna fil r inte sparad"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Status: Sparad p %1\$s med mode %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Status: Denna fil kunde inte sparas"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Bibliotek: "; +$net2ftp_messages["File: "] = "Fil: "; +$net2ftp_messages["New file name: "] = "Nytt filnamn: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Notering: frndring av textareatyp kommer sparas"; +$net2ftp_messages["Copy up"] = "Kopiera upp"; +$net2ftp_messages["Copy down"] = "Kopiera ner"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Sk bibliotek och filer"; +$net2ftp_messages["Search again"] = "Sk igen"; +$net2ftp_messages["Search results"] = "Skresultat"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Skriv in giltigt skord eller fras."; +$net2ftp_messages["Please enter a valid filename."] = "Skriv in giltigt filnamn."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Skriv in giltig storlek i \"frn\" textruta, till exempel 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Skriv in giltig storlek i \"till\" textruta, till exempel 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Skriv in giltigt datum i -m-d format i \"frn\" textruta."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Skriv in giltigt datum i -m-d format i \"till\" textruta."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Ordet %1\$s hittades inte i de valda biblioteken och filerna."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Ordet %1\$s hittades i fljande filer:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Sk ord eller fras"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive skning"; +$net2ftp_messages["Restrict the search to:"] = "Begrnsa skningen till:"; +$net2ftp_messages["files with a filename like"] = "filer med filnamn som"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard tecken r *)"; +$net2ftp_messages["files with a size"] = "filer med storlek"; +$net2ftp_messages["files which were last modified"] = "filer som var senast ndrade"; +$net2ftp_messages["from"] = "frn"; +$net2ftp_messages["to"] = "till"; + +$net2ftp_messages["Directory"] = "Bibliotek"; +$net2ftp_messages["File"] = "Fil"; +$net2ftp_messages["Line"] = "Rad"; +$net2ftp_messages["Action"] = "Funktion"; +$net2ftp_messages["View"] = "Visa"; +$net2ftp_messages["Edit"] = "ndra"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Visa markerad kllkod fr fil %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "ndra kllkod fr fil %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Installera mjukvarupaket"; +$net2ftp_messages["Unable to open the template file"] = "Kunde inte ppna mallfilen"; +$net2ftp_messages["Unable to read the template file"] = "kunde inte lsa mallfilen"; +$net2ftp_messages["Unable to get the list of packages"] = "Kunde inte motta lisa med paket"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "net2ftp installationsscript har kopierats till FTP servern."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Detta script krs p din webbserver och krver att PHP installeras."; +$net2ftp_messages["In order to run it, click on the link below."] = "Fr att kra det, klicka p lnken nedan."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp har frskt bestmma bibliotekskopplingar mellan FTP server och webbserver."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "r denna lnk fel, skriv URL manuellt i din webblsare."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Ladda upp bibliotek och filer med en Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Nr du loggat in, kan du:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigera p FTP servern"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Nr du loggat in,kan du blddra frn bibliotek till bibliotek och se alla underbibliotek och filer."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Det finns 3 olika stt att ladda upp filer: standard uppladdningsformulr, uppladdnings-och-unzip funktionen, och en Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Klicka p ett filnamn fr att snabbt ladda ner en fil.
Vlj flera filer och klicka p Ladda ner; valda filer laddas ner i ett zip arkiv."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... och spara zip arkivet p FTP servern, eller emaila det till ngon."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Bibliotek hanteras enhetligt, allt innehll (underbibliotek och filer) kommer ocks kopieras, flyttas eller raderas."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Enkelt at importera filer till din FTP server, eller att exportera filer frn din FTP server till en annan FTP server."; +$net2ftp_messages["Rename and chmod"] = "Byt namn och chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod hanterar bibliotek enhetligt."; +$net2ftp_messages["View code with syntax highlighting"] = "Visa kod med syntaxmarkering"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP funktioner r lnkade till dokumentationen av php.net."; +$net2ftp_messages["Plain text editor"] = "Enkel texteditor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "ndra text direkt frn din webblsare; varje gng du sparar frs den nya filen ver till FTP servern."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "ndra HTML och PHP i en editor med syntaxmarkering."; +$net2ftp_messages["Search for words or phrases"] = "Sk efter ord eller fraser"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filtrera ut filer baserat p filnamnet, tid fr senast modifierat och filstorlek."; +$net2ftp_messages["Calculate size"] = "Berkna storlek"; +$net2ftp_messages["Calculate the size of directories and files."] = "Berkna storlek p bibliotek och filer."; + +$net2ftp_messages["FTP server"] = "FTP server"; +$net2ftp_messages["Example"] = "Exempel"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Anvndarnamn"; +$net2ftp_messages["Password"] = "Lsenord"; +$net2ftp_messages["Anonymous"] = "Anonym"; +$net2ftp_messages["Passive mode"] = "Passive mode"; +$net2ftp_messages["Initial directory"] = "Initialt bibliotek"; +$net2ftp_messages["Language"] = "Sprk"; +$net2ftp_messages["Skin"] = "Skin"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatiskt"; +$net2ftp_messages["Login"] = "Logga in"; +$net2ftp_messages["Clear cookies"] = "Rensa cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Skriv in FTP server."; +$net2ftp_messages["Please enter a username."] = "Skriv in anvndarnamn."; +$net2ftp_messages["Please enter a password."] = "Skriv in lsenord."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Skriv in ditt Administratrs anvndarnamn och lsenord."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Anvndarnamn"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Lsenord"; +$net2ftp_messages["Login"] = "Logga in"; +$net2ftp_messages["Continue"] = "Fortstt"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login sida"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Notering: andra anvndare p denna dator kan anvnda webblsarens baktknapp och komma in p FTP servern."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Fr att hindra detta mste du stnga alla ppna webblsarfnster."; +$net2ftp_messages["Close"] = "Stng"; +$net2ftp_messages["Click here to close this window"] = "Klicka hr fr att stnga detta fnster"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Skapa nya bibliotek"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "De nya biblioteken kommer skapas i %1\$s."; +$net2ftp_messages["New directory name:"] = "Nytt biblioteks namn:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Bibliotek %1\$s skapades framgngsrikt."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Bibliotek %1\$s kunde inte skapas."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Skicka slumpmssig FTP kommando"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Lista med kommandon:"; +$net2ftp_messages["FTP server response:"] = "FTP server svar:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Byt namn p bibliotek och filer"; +$net2ftp_messages["Old name: "] = "Gammalt namn: "; +$net2ftp_messages["New name: "] = "Nytt namn: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Det nya namnet fr inte innehlla punkter. Denna inmatning dptes om till %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s dptes framgngsrikt om till %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s kunde inte dpas om till %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip arkive"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Mottar arkiv %1\$s av %2\$s frn FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Kunde inte ladda ner arkivet %1\$s frn FTP servern"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Ange mlbibliotek"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Fr att stlla in ett vanligt mlbibliotek, ange det mlbiblioteket i textfltet ovan och klicka p knappen \"Ange alla mlbibliotek\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Notering: mlbiblioteket mste vara skapat innan ngot kan kopieras in i det."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip arkiv %1\$s till:"; +$net2ftp_messages["Target directory:"] = "Mlbibliotek:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Anvnd mappnamn (skapar underbibliotek automatiskt)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Ladda upp till bibliotek:"; +$net2ftp_messages["Files"] = "Filer"; +$net2ftp_messages["Archives"] = "Arkive"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Filer inmatade hr kommer verfras till FTP servern."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Arkive inmatade hr kommer dekomprimeras och filer inuti verfras till FTP servern."; +$net2ftp_messages["Add another"] = "Lgg till nsta"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Anvnd mappnamn (skapar underbibliotek automatiskt)"; + +$net2ftp_messages["Choose a directory"] = "Vlj bibliotek"; +$net2ftp_messages["Please wait..."] = "Vnta..."; +$net2ftp_messages["Uploading... please wait..."] = "Laddar upp... vnta..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Om uppladdning tar mer n tilltna %1\$s sekunder<\/b>, fr du frska igen med frre/mindre filer."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Detta fnster stngs automatiskt om ngra sekunder."; +$net2ftp_messages["Close window now"] = "Stng fnster nu"; + +$net2ftp_messages["Upload files and archives"] = "Ladda upp filer och arkiv"; +$net2ftp_messages["Upload results"] = "Uppladdningsresultat"; +$net2ftp_messages["Checking files:"] = "Kontrollerar filer:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "verfr filer till FTP servern:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Dekomprimerar arkiv och verfr filer till FTP servern:"; +$net2ftp_messages["Upload more files and archives"] = "Ladda upp fler filer och arkiv"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Begrnsningar:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Maximal storlek fr en fil r begrnsad av net2ftp till %1\$s och av PHP till %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Maximal exekveringstid r %1\$s sekunder"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTP transfer mode (ASCII eller BINARY) kommer automatiskt bestmmas, baserat p filenamnsndelse"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Om destinationsfil redan finns, kommer den skrivas ver"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Visa fil %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Visa bild %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Visa Macromedia ShockWave Flash film %1\$s"; +$net2ftp_messages["Image"] = "Bild"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax markerad powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Fr att spara bild, hger-klicka p den och vlj 'Spara bild som...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip entries"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Spara zip fil p FTP servern som:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email zip fil som bilaga till:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Notera att skicka filer ej r anonymt: din IP adress och tid vid avsndande lggs till i e-mailet."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Lgg till vriga kommentarer i email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Du angav inget filnamn fr zipfilen. Backa och ange filnamn."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Email adressen du angav (%1\$s) verkar inte vara giltig.
Ange en adress i formatet anvndarnamn@domn.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/tc.inc.php b/ehcp/net2ftp/languages/tc.inc.php new file mode 100644 index 0000000..189dae1 --- /dev/null +++ b/ehcp/net2ftp/languages/tc.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "bs} %1\$s"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "п̤֤ܳ@ӸƧɮ!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP A %1\$s b\suC."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP A %1\$s bQTsuC."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP As %1\$s iॼϥ."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "A IP (%1\$s) bQTsuC."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Unable to determine your IP address."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress contains duplicate rows."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Table net2ftp_log_consumption_ftpserver contains duplicate rows."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "The variable consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Table net2ftp_log_consumption_ipaddress could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Table net2ftp_log_consumption_ipaddress contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Table net2ftp_log_consumption_ftpserver could not be updated."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "~"; +$net2ftp_messages["Go back"] = "^"; +$net2ftp_messages["Go to the login page"] = "nJ"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "s FTP A %1\$s, s %2\$s.

нTw FTP Aa}T. jP HTTP (web) AP. pA޲zoԲӸ.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "nJ FTP A %1\$s ΤW %2\$s i~.

нTwΤW٤αKXT. pA޲zoԲӸ.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "LkϥγQʳsu覡(PASV MODE)s %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "sؼ FTP A %1\$s, s %2\$s.

нTwؼ FTP Aa}T. jP HTTP (web) AP. pA޲zoԲӸ.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "nJؼ FTP A %1\$s ΤW %2\$s i~.

нTwΤW٤αKXT. pA޲zoԲӸ.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "LkϥγQʳsu覡(PASV MODE)s %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "LkbƧ %2\$s Ƨ %1\$s W"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "LkRO %1\$s. `N: ݩ(CHMOD) OuAΩ Unix FTP A, AΩ WINDOWS FTP A."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Ƨ %1\$s \ݩʨ %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "ɮ %1\$s \ݩʨ %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "ƧɮפwgBz."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "LkRƧ %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Lkإ߸Ƨ %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Lkإ߼Ȧsɮ"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Lkq FTP Aoɮ %1\$s xsȦsɮ %2\$s.
ˬdƧ %3\$s ݩ .
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Lk}ҼȦsɮ. ˬdƧ %1\$s ݩ."; +$net2ftp_messages["Unable to read the temporary file"] = "LkŪȦsɮ"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "LkȦsɮתBz"; +$net2ftp_messages["Unable to delete the temporary file"] = "LkRȦsɮ"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Lkإ߼Ȧsɮ. ˬdƧ %1\$s ݩ."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Lk}ҼȦsɮ. ˬdƧ %1\$s ݩ."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "LkgJrȦsɮ %1\$s.
ˬdƧ %2\$s ݩ."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "LkȦsɮתBz"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "LkWɮרƧ %1\$s.
AiSv."; +$net2ftp_messages["Unable to delete the temporary file"] = "LkRȦsɮ"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "BzƧ %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "ؼиƧ %1\$s MlƧέƧ %2\$s @, ҥHN|L"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Lkإ߸Ƨ %1\$s. iwsb. ~ƻs/ʾާ@..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "LkRƧ %1\$s - iƧ"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "wRƧ %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "wRƧ %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Ƨ %1\$s ާ@"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "ؼиƧ %1\$s MƧ@, ɮױNL"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Lkƻsɮ %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "wɮ %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Unable to delete the file %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "wRɮ %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "ƧɮפwgBz."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Lkϥ FTP Ҧ %2\$s ƻsɮ %1\$s 쥻aɮ"; +$net2ftp_messages["Unable to delete file %1\$s"] = "LkRɮ %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Daily limit reached: the file %1\$s will not be transferred"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Lkϥ FTP Ҧ %2\$s ƻsaɮ %1\$s 컷ɮ"; +$net2ftp_messages["Unable to delete the local file"] = "LkRaɮ"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "LkRȦsɮ"; +$net2ftp_messages["Unable to send the file to the browser"] = "Unable to send the file to the browser"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Lkإ߼Ȧsɮ"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Yɮ %1\$s wgb FTP Aإ"; +$net2ftp_messages["Requested files"] = "QШDɮ"; + +$net2ftp_messages["Dear,"] = "˷R,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "HnDɮ׶ǰe email b (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "pGA۫HoӤHΤDɮפe, n}ҪɤΥߧYRl."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "`N: pGAS}Ҫ, AqOSl`."; +$net2ftp_messages["Information about the sender: "] = "ǰe̸: "; +$net2ftp_messages["IP address: "] = "IP a}: "; +$net2ftp_messages["Time of sending: "] = "ǰeɶ: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "g net2ftp {ǰe: "; +$net2ftp_messages["Webmaster's email: "] = "ql: "; +$net2ftp_messages["Message of the sender: "] = "ǰe̪[T: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Yɮפwgǰe %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "ɮ %1\$s Ӥj. N|QW."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "LkͼȦsɮ."; +$net2ftp_messages["File %1\$s could not be moved"] = "ɮ %1\$s Lk"; +$net2ftp_messages["File %1\$s is OK"] = "ɮ %1\$s SD"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "LkʤWǪɮרȦsƧ.

޲zݭn chmod 777 net2ftp Ƨ /temp."; +$net2ftp_messages["You did not provide any file to upload."] = "ASѥWǪɮ."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "ɮ %1\$s Lkǰe FTP A"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "ɮ %1\$s wg\ϥ FTP mode %2\$s WǨ FTP A. "; +$net2ftp_messages["Transferring files to the FTP server"] = "ǰe FTP A..."; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "BzYɮ nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "ѩɦW, Yɮ %1\$s Bz. {qu zip, tar, tgz and gz 榡."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "LkRO %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "u@"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "u@ɶWLFw %1\$s , ҥHu@."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "@UϥΪ̪h."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "էu@pu@: ֿɮ, άٲnjɮ."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "pGAƱ net2ftp iBzju@, i net2ftp w˨Aq."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "ASb email ѥr!"; +$net2ftp_messages["You did not supply a From address."] = "AS From a}."; +$net2ftp_messages["You did not supply a To address."] = "AS To a}."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "ѩ޳NʰD, ql %1\$s LkeX."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Please enter your username and password for FTP server "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."; +$net2ftp_messages["Please enter your Admin username and password"] = "Please enter your Admin username and password"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "ŦҪ"; +$net2ftp_messages["Grey"] = "ǦҪ"; +$net2ftp_messages["Black"] = "¦Ҫ"; +$net2ftp_messages["Yellow"] = "Ҫ"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Ƨ"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP ɮ"; +$net2ftp_messages["Cascading Style Sheet"] = "CSS dɮ"; +$net2ftp_messages["HTML file"] = "HTML ɮ"; +$net2ftp_messages["Java source file"] = "Java source ɮ"; +$net2ftp_messages["JavaScript file"] = "JavaScript ɮ"; +$net2ftp_messages["PHP Source"] = "PHP source ɮ"; +$net2ftp_messages["PHP script"] = "PHP script ɮ"; +$net2ftp_messages["Text file"] = "rɮ"; +$net2ftp_messages["Bitmap file"] = "Bitmap Ϥ"; +$net2ftp_messages["GIF file"] = "GIF Ϥ"; +$net2ftp_messages["JPEG file"] = "JPEG Ϥ"; +$net2ftp_messages["PNG file"] = "PNG Ϥ"; +$net2ftp_messages["TIF file"] = "TIF Ϥ"; +$net2ftp_messages["GIMP file"] = "GIMP Ϥ"; +$net2ftp_messages["Executable"] = "iɮ"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word "; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel "; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint "; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access ƾڮw"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project "; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 "; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 Ҫ"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 "; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 Ҫ"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 "; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 Ҫ"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 "; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 Ҫ"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global "; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 "; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x "; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global "; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x "; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x "; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x "; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x ɮ"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x "; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x "; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail ɮ"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat "; +$net2ftp_messages["ARC archive"] = "ARC Y"; +$net2ftp_messages["ARJ archive"] = "ARJ Y"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ Y"; +$net2ftp_messages["TAR archive"] = "TAR Y"; +$net2ftp_messages["Zip archive"] = "Zip Y"; +$net2ftp_messages["MOV movie file"] = "MOV v"; +$net2ftp_messages["MPEG movie file"] = "MPEG v"; +$net2ftp_messages["Real movie file"] = "Real v"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime v"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash ɮ"; +$net2ftp_messages["Shockwave file"] = "Shockwave ɮ"; +$net2ftp_messages["WAV sound file"] = "WAV "; +$net2ftp_messages["Font file"] = "Font ɮ"; +$net2ftp_messages["%1\$s File"] = "%1\$s ɮ"; +$net2ftp_messages["File"] = "ɮ"; + +// getAction() +$net2ftp_messages["Back"] = "Back"; +$net2ftp_messages["Submit"] = "Submit"; +$net2ftp_messages["Refresh"] = "Refresh"; +$net2ftp_messages["Details"] = "Details"; +$net2ftp_messages["Icons"] = "Icons"; +$net2ftp_messages["List"] = "List"; +$net2ftp_messages["Logout"] = "Logout"; +$net2ftp_messages["Help"] = "Help"; +$net2ftp_messages["Bookmark"] = "Bookmark"; +$net2ftp_messages["Save"] = "Save"; +$net2ftp_messages["Default"] = "Default"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "License"; +$net2ftp_messages["Powered by"] = "Powered by"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Version information"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "Logging"; +$net2ftp_messages["Date from:"] = "Date from:"; +$net2ftp_messages["to:"] = "to:"; +$net2ftp_messages["Empty logs"] = "Empty"; +$net2ftp_messages["View logs"] = "View logs"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Setup MySQL tables"] = "Setup MySQL tables"; +$net2ftp_messages["Create the MySQL database tables"] = "Create the MySQL database tables"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL username"; +$net2ftp_messages["MySQL password"] = "MySQL password"; +$net2ftp_messages["MySQL database"] = "MySQL database"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = "This SQL query is going to be executed:"; +$net2ftp_messages["Execute"] = ""; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Settings used:"; +$net2ftp_messages["MySQL password length"] = "MySQL password length"; +$net2ftp_messages["Results:"] = "Results:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "No data"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Admin functions"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "The table %1\$s was emptied successfully."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "The table %1\$s could not be emptied."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "The table %1\$s was optimized successfully."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "The table %1\$s could not be optimized."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "i\"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "Troubleshooting functions"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "A net2ftp Ƹ"; +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP AƸ"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "Translation functions"; +$net2ftp_messages["Introduction to the translation functions"] = "Introduction to the translation functions"; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Beta functions"; +$net2ftp_messages["Send a site command to the FTP server"] = "Send a site command to the FTP server"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: password-protect a directory, create custom error pages"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: execute an SQL query"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "A䴩B\."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "A䴩 Apache \."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "A䴩 MYSQL \."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "iwpA 2 r. {..."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP AƸ"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "su]w:"; +$net2ftp_messages["FTP server"] = "FTP A"; +$net2ftp_messages["FTP server port"] = "FTP As"; +$net2ftp_messages["Username"] = "ΤW"; +$net2ftp_messages["Password"] = "ΤKX"; +$net2ftp_messages["Password length"] = "KX"; +$net2ftp_messages["Passive mode"] = "Qʳsu(Passive mode)"; +$net2ftp_messages["Directory"] = "Ƨ"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "s FTP A: "; +$net2ftp_messages["Logging into the FTP server: "] = "nJ FTP A: "; +$net2ftp_messages["Setting the passive mode: "] = "]wQʳsҦ(PASV):"; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ܧƧ %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP AƧO: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "olƧɮצC: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "ըolƧɮצC: "; +$net2ftp_messages["Closing the connection: "] = "su: "; +$net2ftp_messages["Raw list of directories and files:"] = "lƧɮצC:"; +$net2ftp_messages["Parsed list of directories and files:"] = "RƧɮצC:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "net2ftp w˵{Ƹ"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "ˬdO_TwˤF PHP FTP Ҳ: "; +$net2ftp_messages["yes"] = "O"; +$net2ftp_messages["no - please install it!"] = "_ - Хw!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "ˬdƧݩ: @Ӥpɮ׷|gJ /TEMP ƧMR."; +$net2ftp_messages["Creating filename: "] = "إɮצW: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "\\. ɮצW: %tempfilename"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = ". ˬd %1\$s Ƨݩ"; +$net2ftp_messages["Opening the file in write mode: "] = "Opening the file in write mode: "; +$net2ftp_messages["Writing some text to the file: "] = "gJr: "; +$net2ftp_messages["Closing the file: "] = "ɮ: "; +$net2ftp_messages["Deleting the file: "] = "Rɮ: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "s FTP A: "; +$net2ftp_messages["Logging into the FTP server: "] = "nJ FTP A: "; +$net2ftp_messages["Setting the passive mode: "] = "]wQʳsҦ(PASV):"; +$net2ftp_messages["Getting the FTP server system type: "] = "Getting the FTP server system type: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "ܧƧ %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP AƧO: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "olƧɮצC: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "ըolƧɮצC: "; +$net2ftp_messages["Closing the connection: "] = "su: "; +$net2ftp_messages["Raw list of directories and files:"] = "lƧɮצC:"; +$net2ftp_messages["Parsed list of directories and files:"] = "RƧɮצC:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "`N: AϥΦҮ, N|@ӼuX߰ݧAKX."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "пܸƧ"; +$net2ftp_messages["Please wait..."] = "еyJ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "ƧW٥]t \' NLkT. uiR. Ъ^t@ӤlƧ."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "[JsƧ"; +$net2ftp_messages["New file"] = "[Jsɮ"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "Wɮ"; +$net2ftp_messages["Java Upload"] = "Java Wɮ"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "iﶵ"; +$net2ftp_messages["Copy"] = "ƻs"; +$net2ftp_messages["Move"] = ""; +$net2ftp_messages["Delete"] = "R"; +$net2ftp_messages["Rename"] = "sRW"; +$net2ftp_messages["Chmod"] = "ݩ(CHOMD)"; +$net2ftp_messages["Download"] = "U"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Y"; +$net2ftp_messages["Size"] = "pjp"; +$net2ftp_messages["Search"] = "j"; +$net2ftp_messages["Go to the parent directory"] = "Go to the parent directory"; +$net2ftp_messages["Go"] = "Go"; +$net2ftp_messages["Transform selected entries: "] = "ާ@ﶵ: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "b %1\$s إߤ@ӷslƧ"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "b %1\$s Ƨإߤ@ӷsɮ"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "b %1\$s ƧWǷsɮ"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "ϥζi\"; +$net2ftp_messages["Copy the selected entries"] = "ƻsƧɮ"; +$net2ftp_messages["Move the selected entries"] = "ʿƧɮ"; +$net2ftp_messages["Delete the selected entries"] = "RƧɮ"; +$net2ftp_messages["Rename the selected entries"] = "sRWƧɮ"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "ܿƧɮתݩ (uAΩ Unix/Linux/BSD A)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "YUƧɮ"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "YƧɮק@xsζǰel"; +$net2ftp_messages["Calculate the size of the selected entries"] = "pƧɮתjp"; +$net2ftp_messages["Find files which contain a particular word"] = "ϥrjɮ"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "%1\$s DZƦC"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "%1\$s ɧDZƦC"; +$net2ftp_messages["Ascending order"] = "ɧDZƦC"; +$net2ftp_messages["Descending order"] = "DZƦC"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "WŸƧ"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Click to check or uncheck all rows"; +$net2ftp_messages["All"] = "All"; +$net2ftp_messages["Name"] = "W"; +$net2ftp_messages["Type"] = ""; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "֦"; +$net2ftp_messages["Group"] = "s"; +$net2ftp_messages["Perms"] = "ݩ"; +$net2ftp_messages["Mod Time"] = "̫קɶ"; +$net2ftp_messages["Actions"] = "ʧ@"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Download the file %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "d"; +$net2ftp_messages["Edit"] = "s"; +$net2ftp_messages["Update"] = "s"; +$net2ftp_messages["Open"] = "}"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "G %1\$s ɮתlX"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "s %1\$s ɮתlX"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Wǧs %1\$s ΦX֧"; +$net2ftp_messages["View image %1\$s"] = "dݹϤ %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "q HTTP Adɮ %1\$s"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(`N: pGASۤvW, si~.)"; +$net2ftp_messages["This folder is empty"] = "ƧOŪ"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Ƨ"; +$net2ftp_messages["Files"] = "ɮ"; +$net2ftp_messages["Symlinks"] = "s"; +$net2ftp_messages["Unrecognized FTP output"] = "LkT{ FTP X"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "pjp"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "y:"; +$net2ftp_messages["Skin:"] = "Ҫ:"; +$net2ftp_messages["View mode:"] = "Ҧ:"; +$net2ftp_messages["Directory Tree"] = "Ƨm"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "bs} %1\$s"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "ƹiJlƧ:"; +$net2ftp_messages["Choose"] = ""; +$net2ftp_messages["Up"] = "WŸƧ"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Ƨɮתjp"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Ƨɮת`jp:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Ƨɮתݩ"; +$net2ftp_messages["Set all permissions"] = "Ҧv"; +$net2ftp_messages["Read"] = "Ū"; +$net2ftp_messages["Write"] = "gJ"; +$net2ftp_messages["Execute"] = ""; +$net2ftp_messages["Owner"] = "֦"; +$net2ftp_messages["Group"] = "s"; +$net2ftp_messages["Everyone"] = "ҦH"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "pn]wҦv@, bWJvÿ \"Ҧv\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "]wƧ %1\$s ݩʬ: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "]wɮ %1\$s ݩʬ: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "]w symlink %1\$s ݩʬ: "; +$net2ftp_messages["Chmod value"] = "Chmod ƭ"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "ó]wƧtҦlƧ"; +$net2ftp_messages["Chmod also the files within this directory"] = "ó]wƧtҦɮ"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "ݩʼƭ %1\$s b 0-777 ."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "пܸƧ"; +$net2ftp_messages["Copy directories and files"] = "ƻsƧɮ"; +$net2ftp_messages["Move directories and files"] = "ʸƧɮ"; +$net2ftp_messages["Delete directories and files"] = "RƧɮ"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "O_TwnRƧɮ?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "ҦtlƧɮ׳|@֧R!"; +$net2ftp_messages["Set all targetdirectories"] = "]w@PؼиƧ"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "]w@PؼиƧ, ЦbWrضgؼиƧW٨ë \"]w@PؼиƧ\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "`N: ƻsɮ׫e, нTwؼиƧsb."; +$net2ftp_messages["Different target FTP server:"] = "ؼ FTP A:"; +$net2ftp_messages["Username"] = "ΤW"; +$net2ftp_messages["Password"] = "ΤKX"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "pGƻs쥻 FTP A, ζg."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "pGAƱƻsɮרt@ FTP A, жgnJ."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "pGʨ쥻 FTP A, ζg."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "pGAƱ沾ɮרt@ FTP A, жgnJ."; +$net2ftp_messages["Copy directory %1\$s to:"] = "ƻsƧ %1\$s :"; +$net2ftp_messages["Move directory %1\$s to:"] = "ʸƧ %1\$s :"; +$net2ftp_messages["Directory %1\$s"] = "Ƨ %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "ƻsɮ %1\$s :"; +$net2ftp_messages["Move file %1\$s to:"] = "ɮ %1\$s :"; +$net2ftp_messages["File %1\$s"] = "ɮ %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "ƻs symlink %1\$s :"; +$net2ftp_messages["Move symlink %1\$s to:"] = " symlink %1\$s :"; +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "ؼиƧ:"; +$net2ftp_messages["Target name:"] = "ؼЦW:"; +$net2ftp_messages["Processing the entries:"] = "Bz:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "pjp"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: bsWƹkÿ \"[ڪ̷R...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: bsWƹkÿ \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Lk}ҼҪɮ"; +$net2ftp_messages["Unable to read the template file"] = "LkŪҪɮ"; +$net2ftp_messages["Please specify a filename"] = "ЫwɮצW"; +$net2ftp_messages["Status: This file has not yet been saved"] = "A: ɮרåxs"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "A: %1\$s ϥ %2\$s Ҧxs"; +$net2ftp_messages["Status: This file could not be saved"] = "A: ɮ׵Lkxs"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Ƨ: "; +$net2ftp_messages["File: "] = "ɮצW: "; +$net2ftp_messages["New file name: "] = "sɮצW: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "`N: ܤr|xs"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "jƧɮ"; +$net2ftp_messages["Search again"] = "sj"; +$net2ftp_messages["Search results"] = "jG"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "пJTrε."; +$net2ftp_messages["Please enter a valid filename."] = "пJTɮצW."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Цb \"from\" rؿJTɮפjp, Ҧp 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Цb \"to\" rؿJTɮפjp, Ҧp 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Цb \"from\" rؿJT榡 Y-m-d."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Цb \"to\" rؿJT榡 Y-m-d."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "bƧɮ׸, r %1\$s S쪺ɮ."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "r %1\$s Qb:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "jrε"; +$net2ftp_messages["Case sensitive search"] = "Ϥjpgj"; +$net2ftp_messages["Restrict the search to:"] = "j:"; +$net2ftp_messages["files with a filename like"] = "ɮצWٹ"; +$net2ftp_messages["(wildcard character is *)"] = "(wildcard rO *)"; +$net2ftp_messages["files with a size"] = "ɮפjp"; +$net2ftp_messages["files which were last modified"] = "̫ק諸ɮ"; +$net2ftp_messages["from"] = "q"; +$net2ftp_messages["to"] = ""; + +$net2ftp_messages["Directory"] = "Ƨ"; +$net2ftp_messages["File"] = "ɮ"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "d"; +$net2ftp_messages["Edit"] = "s"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "G %1\$s ɮתlX"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "s %1\$s ɮתlX"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Lk}ҼҪɮ"; +$net2ftp_messages["Unable to read the template file"] = "LkŪҪɮ"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP A"; +$net2ftp_messages["Example"] = "d"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "ΤW"; +$net2ftp_messages["Password"] = "ΤKX"; +$net2ftp_messages["Anonymous"] = "Anonymous"; +$net2ftp_messages["Passive mode"] = "Qʳsu(Passive mode)"; +$net2ftp_messages["Initial directory"] = "iJƧ"; +$net2ftp_messages["Language"] = "y"; +$net2ftp_messages["Skin"] = "Ҫ"; +$net2ftp_messages["FTP mode"] = "FTP mode"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "nJ"; +$net2ftp_messages["Clear cookies"] = "M Cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "ΤW"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "ΤKX"; +$net2ftp_messages["Login"] = "nJ"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "إ߷sƧ"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "sƧN|إߦb %1\$s."; +$net2ftp_messages["New directory name:"] = "sƧW:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Ƨ %1\$s wg\إ."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "sRWƧɮ"; +$net2ftp_messages["Old name: "] = "¦W: "; +$net2ftp_messages["New name: "] = "sW: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "sW٤i]t \".\"r JLksRW %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s wg\sRW %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s could not be renamed to %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "]w@PؼиƧ"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "]w@PؼиƧ, ЦbWrضgؼиƧW٨ë \"]w@PؼиƧ\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "`N: ƻsɮ׫e, нTwؼиƧsb."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "ؼиƧ:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "ϥθƧW (۰ʫإߤlƧ)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "WǨƧ:"; +$net2ftp_messages["Files"] = "ɮ"; +$net2ftp_messages["Archives"] = "Archives"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "bo̿JɮױN|ǰe FTP A."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "bo̿JYɮױN|QåB⤺tɮ׶ǰe FTP A."; +$net2ftp_messages["Add another"] = "[JL"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "ϥθƧW (۰ʫإߤlƧ)"; + +$net2ftp_messages["Choose a directory"] = "пܸƧ"; +$net2ftp_messages["Please wait..."] = "еyJ..."; +$net2ftp_messages["Uploading... please wait..."] = "WǤ... еyJ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "pGWǮɶWL %1\$s <\/b>, Aݭn֤Wɮ׼ƶqΤWn֪ɮ."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "NƬ۰."; +$net2ftp_messages["Close window now"] = "ߧY"; + +$net2ftp_messages["Upload files and archives"] = "WɮפYɮ"; +$net2ftp_messages["Upload results"] = "WǵG"; +$net2ftp_messages["Checking files:"] = "ˬdɮ:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "ǰe FTP Aɮ:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "öǰe FTP Aɮ:"; +$net2ftp_messages["Upload more files and archives"] = "WǧhɮשYɮ"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = ":"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "net2ftp e\̤jɮתn %1\$s, PHP e\̤jɮתn %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "̤je\ާ@ɶ %1\$s "; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTPǰeҦ (ASCII BINARY) N|ھڰɦW۰ʤ"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "pGؼɮצsb, N|Qл\\"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "View file %1\$s"; +$net2ftp_messages["View image %1\$s"] = "dݹϤ %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "View Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Image"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "To save the image, right-click on it and choose 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Y"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "b FTP AWxsYɮ׬:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "qlYɮ׬ɨ:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "`N: ǰeɮ׷|OA IP a}MɶçoǸƤ@ְeX."; +$net2ftp_messages["Some additional comments to add in the email:"] = "ǰeql[T:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "ASJYɮתW. Ъ^ÿJ."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "qla} (%1\$s) 榡T.
ШϥΦ榡 username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/tr.inc.php b/ehcp/net2ftp/languages/tr.inc.php new file mode 100644 index 0000000..ba71eee --- /dev/null +++ b/ehcp/net2ftp/languages/tr.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Dizin %1\$s yok veya seilemiyor, bu yzden yerine %2\$s dizini gsteriliyor."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Ana dizininiz %1\$s yok veya seilemiyor."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "Dizin %1\$s seilemiyor - bu dizini grntleyebilmek iin yeterli haklara sahip olmayabilirsiniz veya o, var deil."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Yasakl anahtar kelimeleri ieren giriler net2ftp kullanlarak ynetilemez. Bu, net2ftp yoluyla Paypal veya Ebay dolandrclnn yklenmesini nlemek iindir."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "ok byk olan dosyalar, indirilemez, yklenemez, kopyalanamaz, tanamaz, aranamaz, ariv paketine eklenemez, ariv paketinden kartlamaz, grntlemez veya dzenlemez; sadece yeniden adlandrlabilir, izinleri deitirilebilir veya silinebilir."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Yeni pencerede %1\$s gerekletir"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Ltfen en azndan bir dizin veya dosya sein!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP sunucusu %1\$s izin verilen FTP sunucular listesinde deil."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP sunucusu %1\$s yasakl FTP sunucular listesinde."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP sunucusu portu %1\$s kullanlmayabilir."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "IP adresiniz (%1\$s) yasakl IP adresleri listesinde."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "net2ftp_users tablosu ift dizeler ieriyor."; //dublicate: ? + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Ynetici kullanc adnz veya ifrenizi girmediniz."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Yanl kullanc ad veya ifre. Ltfen tekrar deneyin."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "IP adresinizi belirleyemiyor."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "net2ftp_log_consumption_ipaddress tablosu ift dizeler ieriyor."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "net2ftp_log_consumption_ftpserver tablosu ift dizeler ieriyor."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "consumption_ipaddress_datatransfer deikeni saysal deil."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "net2ftp_log_consumption_ipaddress tablosu gncellenemiyor."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "net2ftp_log_consumption_ipaddress tablosu contains ift giriler ieriyor."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "net2ftp_log_consumption_ftpserver tablosu gncellenemiyor."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "net2ftp_log_consumption_ftpserver tablosu ift giriler ieriyor."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "MySQL veritabanna balanamyor. Ltfen MySQL veritaban ayarlarnz net2ftp'nin ayar dosyas settings.inc.php de denetleyin."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "MySQL veritabann seemiyor. Ltfen MySQL veritaban ayarlarnz net2ftp'nin ayar dosyas settings.inc.php de denetleyin."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Bir hata olutu"; +$net2ftp_messages["Go back"] = "Geri dn"; +$net2ftp_messages["Go to the login page"] = "Giri sayfasna git"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "FTP sunucusuna %1\$s portunda %2\$s balanamyor.

FTP sunucusunun adresinin bu olduundan emin misiniz? Bu sklkla HTTP (web) sunucusununkinden farkldr. Ltfen yardm iin ISS yardm masanzla ya da sistem yneticinizle iletiim kurun.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "FTP sunucusuna %1\$s kullanc adyla %2\$s giri yapamyor.

Kullanc adnzn ve ifrenizin doru olduundan emin misiniz? Ltfen yardm iin ISS yardm masanzla ya da sistem yneticinizle iletiim kurun.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "FTP sunucusunda %1\$s pasif moda geemiyor."; //switch: ? + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "kinci (hedef) FTP sunucusuna %1\$s portunda %2\$s balanamyor.

kinci (hedef) FTP sunucusunun adresinin bu olduundan emin misiniz? Bu sklkla HTTP (web) sunucusununkinden farkldr. Ltfen yardm iin ISS yardm masanzla ya da sistem yneticinizle iletiim kurun.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "kinci (hedef) FTP sunucusuna %1\$s kullanc adyla %2\$s giri yapamyor.

Kullanc adnzn ve ifrenizin doru olduundan emin misiniz? Ltfen yardm iin ISS yardm masanzla ya da sistem yneticinizle iletiim kurun.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "kinci (hedef) FTP sunucusunda %1\$s pasif moda geemiyor."; //switch: ? + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "%1\$s dosya ya da dizinini %2\$se yeniden adlandramyor"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Site komutunu %1\$s gerekletiremiyor. CHMOD komutunun, Windows FTP sunucularnda deil de sadece Unix FTP sunucularnda mmkn olduuna dikkat edin."; //note: ? +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Dizin %1\$s baarl bir ekilde %2\$s e chmod yapld."; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "%1\$s dizin ierisindeki girileri ileme alyor:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "%1\$s Dosya baarl bir ekilde %2\$se chmod yapld"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tm seili dosya ve dizinler ileme alnd."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "%1\$s dizini silemiyor"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "%1\$s dosyay silemiyor"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "%1\$s dizini oluturamyor"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Geici dosya oluturamyor"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "FTP sunucusundan %1\$s dosyasn alamyor ve %2\$s geici dosya olarak kaydedemiyor.
%3\$s dizininin izinlerini denetleyin.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Geici dosyay aamyor. %1\$s dizininin izinlerini denetleyin."; +$net2ftp_messages["Unable to read the temporary file"] = "Geici dosyay okuyamyor"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Geici dosyann idaresini kapatamyor"; //handle: ? +$net2ftp_messages["Unable to delete the temporary file"] = "Geici dosyay silemiyor"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Geici dosya oluturamyor. %1\$s dizininin izinlerini denetleyin."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Geici dosyay aamyor. %1\$s dizininin izinlerini denetleyin."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "%1\$s geici dosyaya diziyi yazamyor.
%1\$s dizininin izinlerini denetleyin."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Geici dosyann idaresini kapatamyor"; //handle: ? +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "FTP sunucusuna %1\$s dosyasn yerletiremiyor.
Dizinde yazma iznine sahip olamayabilirsiniz."; +$net2ftp_messages["Unable to delete the temporary file"] = "Geici dosyay silemiyor"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "%1\$s dizinini ileme alyor"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "%1\$s hedef dizini %2\$s kaynak dizininin ayns veya bir alt dizini , bu yzden bu dizin atlanlacak"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword,bu yzden bu dizin atlanlacak"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "%1\$s dizini yasakl bir anahtar kelime ieriyor, tamay iptal ediyor"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "%1\$s alt dizini oluturamyor. nceden var olabilir. Kopyalama/tama ilemine devam ediyor..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Hedef alt dizin %1\$s oluturuldu"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "Dizin %1\$s seilemiyor,bu yzden bu dizin atlanlacak"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Alt dizini %1\$s silemiyor - bo olmayabilir"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Alt dizin %1\$s silindi"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Alt dizin %1\$s silindi"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Dizinin %1\$s ileme alnmas tamamland"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Dosya iin hedef %1\$s kaynan ayns, bu yzden bu dosya atlanlacak"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "Dosya %1\$s yasakl anahtar szck ieriyor, bu yzden bu dosya atlanlacak"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "Dosya %1\$s yasakl anahtar szck ieriyor, tamay iptal ediyor"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "Dosya %1\$s kopyalayabilmek iin ok byk, bu yzden bu dosya atlanlacak"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "Dosya %1\$s tamak iin ok byk, tamay iptal ediyor"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Dosyay %1\$s kopyalayamyor"; +$net2ftp_messages["Copied file %1\$s"] = "Dosyay %1\$s kopyalad"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Dosyay %1\$s tayamyor, tamay iptal ediyor"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Dosya %1\$s tand"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "%1\$s dosyay silemiyor"; +$net2ftp_messages["Deleted file %1\$s"] = "Dosyay %1\$s sildi"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tm seili dosya ve dizinler ileme alnd."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Uzaktaki dosyay %1\$s yerel dosyaya FTP %2\$s modunu kullanarak kopyalayamyor"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Dosyay %1\$s silemiyor"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "Dosya aktarabilmek iin ok byk"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Gnlk snra ulat: dosya %1\$s aktarlamayacak"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Yerel dosyay, uzaktaki dosyaya %1\$s FTP %2\$s modunu kullanarak kopyalayamyor"; +$net2ftp_messages["Unable to delete the local file"] = "Yerel dosyay silemiyor"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Geici dosyay silemiyor"; +$net2ftp_messages["Unable to send the file to the browser"] = "Taraycya dosyay gnderemiyor"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Geici dosya oluturamyor"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Zip ariv paketi dosyas, FTP sunucusuna %1\$s olarak kaydedildi"; +$net2ftp_messages["Requested files"] = "stenilen dosyalar"; + +$net2ftp_messages["Dear,"] = "Sayn,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Birisi bu e-posta hesabna (%1\$s) ekteki dosyann gnderilemsini istedi."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Eer bunun hakknda hibir ey bilmiyorsanz ya da bu kiiye gvenmiyorsanz, ltfen ekteki zip ariv paketi dosyasn amadan bu e-postay silin."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Zip ariv paketi dosyasn amazsanz, ierisindeki dosyalarn bilgisayarnza zarar veremeyeceine dikkat edin."; //note: ? +$net2ftp_messages["Information about the sender: "] = "Gnderen hakknda bilgiler: "; +$net2ftp_messages["IP address: "] = "IP adres: "; +$net2ftp_messages["Time of sending: "] = "Gnderme zaman: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Bu websitesine yklenen net2ftp uygulamas yoluyla gnderildi: "; +$net2ftp_messages["Webmaster's email: "] = "Web sahibi'nin e-postas: "; +$net2ftp_messages["Message of the sender: "] = "Gnderenin iletisi: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp GNU/GPL lisans altnda piyasaya srlen bedava bir yazlmdr. Daha fazla bilgi iin, http://www.net2ftp.com ye gidin."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Zip arivi paketi, %1\$se gnderildi."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Dosya %1\$s ok byk. Bu dosya yklenilmeyecek."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "Dosya %1\$s yasakl anahtar szck ieriyor. Bu dosya yklenilmeyecek."; +$net2ftp_messages["Could not generate a temporary file."] = "Geici bir dosya oluturamyor."; +$net2ftp_messages["File %1\$s could not be moved"] = "Dosya %1\$s tanamyor"; +$net2ftp_messages["File %1\$s is OK"] = "Dosya %1\$s TAMAM"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Yklenen dosyay temp dizinine tayamyor.

Bu websitesinin yneticisi net2ftp nin temp dizinini 777 chmod yapmal."; +$net2ftp_messages["You did not provide any file to upload."] = "Yklemek iin herhangi bir dosya salamadnz."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Dosya %1\$s FTP sunucusuna aktarlamyor"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Dosya %1\$s FTP sunucusuna, FTP %2\$s modu kullanarak aktarld"; +$net2ftp_messages["Transferring files to the FTP server"] = "FTP sunucusuna dosyalari aktariyor"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Ariv paketini %1\$s ileme alyor: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Ariv paketi %1\$s ileme alnmad nk dosya uzants tannmad. u an sadece zip, tar, tgz ve gz ariv paketleri destekleniyor."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Ariv paketinden dosya ve dizinleri kartamyor"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Dizini %1\$s oluturuldu"; +$net2ftp_messages["Could not create directory %1\$s"] = "Dizini %1\$s oluturamyor"; +$net2ftp_messages["Copied file %1\$s"] = "Dosyay %1\$s kopyalad"; +$net2ftp_messages["Could not copy file %1\$s"] = "Dosyay %1\$s kopyalayamyor"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Geici dizini silemiyor"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Geici dosyay %1\$s silemiyor"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Site komutunu %1\$s gerekletiremiyor"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "leminiz durduruldu"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Net2ftp ile gerekletirmek istediiniz ilem izin verilen %1\$s saniyeden daha fazla srd ve bu nedenle ilem durduruldu."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Bu sre snr, web sunucusunu herkes tarafndan adil kullanmn garantiler."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "leminizi daha kk ilemlere blmeye aln: dosyalarnzn seimini kstlayn ve en byk dosyalar atlayn."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Eer gerekten net2ftp nin daha uzun sre alan byk ilemleri ele alabilmesi iin, net2ftp yi kendi sunucunuza yklemeyi dnn."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "E-postayla gndermek iin herhangi bir metin salamadnz!"; +$net2ftp_messages["You did not supply a From address."] = "Kimden adresi salamadnz."; +$net2ftp_messages["You did not supply a To address."] = "Kime adresi salamdnz."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Teknik problemler yznden e-posta %1\$sa gnderilemiyor."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "SQL sorgusunu gerekletiremiyor."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Ltfen FTP sunucusu iin kullanc adnz ve ifrenizi girin "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Pop alan pencereye giri bilginizi doldurmadnz.
Aadaki \"Giri sayfasna git\" zerine tklayn."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Net2ftp Ynetici paneline giri kapatld, nk settings.inc.php dosyasnda ifre ayarlanmad. O dosyaya ifre girin ve bu sayfay tekrar ykleyin."; +$net2ftp_messages["Please enter your Admin username and password"] = "Ltfen Ynetici kullanc adnz ve ifrenizi girin"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Pop alan pencereye giri bilginizi doldurmadnz.
Aadaki \"Giri sayfasna git\" zerine tklayn."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Net2ftp Ynetici paneli iin yanl kullanc ad veya ifre. Kullanc ad veya ifre, settings.inc.php dosyasnda ayarlanabilir."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Mavi"; +$net2ftp_messages["Grey"] = "Gri"; +$net2ftp_messages["Black"] = "Siyah"; +$net2ftp_messages["Yellow"] = "Sar"; +$net2ftp_messages["Pastel"] = "Pastel"; + +// getMime() +$net2ftp_messages["Directory"] = "Dizin"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP yazlm"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML dosyas"; +$net2ftp_messages["Java source file"] = "Java kaynak dosyas"; +$net2ftp_messages["JavaScript file"] = "JavaScript dosyas"; +$net2ftp_messages["PHP Source"] = "PHP Kaynak"; +$net2ftp_messages["PHP script"] = "PHP yazlm"; +$net2ftp_messages["Text file"] = "Metin dosyas"; +$net2ftp_messages["Bitmap file"] = "Bitmap dosyas"; +$net2ftp_messages["GIF file"] = "GIF dosyas"; +$net2ftp_messages["JPEG file"] = "JPEG dosyas"; +$net2ftp_messages["PNG file"] = "PNG dosyas"; +$net2ftp_messages["TIF file"] = "TIF dosyas"; +$net2ftp_messages["GIMP file"] = "GIMP dosyas"; +$net2ftp_messages["Executable"] = "Uygulama"; +$net2ftp_messages["Shell script"] = "Shell yazlm"; +$net2ftp_messages["MS Office - Word document"] = "MS Ofis - Word belgesi"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Ofis - Excel izelgesi"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Ofis - PowerPoint sunumu"; +$net2ftp_messages["MS Office - Access database"] = "MS Ofis - Access veritaban"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Ofis - Visio izimi"; +$net2ftp_messages["MS Office - Project file"] = "MS Ofis - Project dosyas"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 belgesi"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 ablonu"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 izelgesi"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 ablonu"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 belgesi"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 ablonu"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 sunumu"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 ablonu"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 evrensel belge"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 belgesi"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x belgesi"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x evrensel belge"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x zm"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x belgesi"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x sunumu"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x dosyas"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x belgesi"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x belgesi"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x posta dosyas"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat belgesi"; +$net2ftp_messages["ARC archive"] = "ARC ariv paketi"; +$net2ftp_messages["ARJ archive"] = "ARJ ariv paketi"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ ariv paketi"; +$net2ftp_messages["TAR archive"] = "TAR ariv paketi"; +$net2ftp_messages["Zip archive"] = "Zip ariv paketi"; +$net2ftp_messages["MOV movie file"] = "MOV film dosyas"; +$net2ftp_messages["MPEG movie file"] = "MPEG film dosyas"; +$net2ftp_messages["Real movie file"] = "Real film dosyas"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime film dosyas"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave fla dosyas"; +$net2ftp_messages["Shockwave file"] = "Shockwave dosyas"; +$net2ftp_messages["WAV sound file"] = "WAV ses dosyas"; +$net2ftp_messages["Font file"] = "Font dosyas"; +$net2ftp_messages["%1\$s File"] = "%1\$s Dosyas"; +$net2ftp_messages["File"] = "Dosya"; + +// getAction() +$net2ftp_messages["Back"] = "Geri"; +$net2ftp_messages["Submit"] = "Gnder"; +$net2ftp_messages["Refresh"] = "Yenile"; +$net2ftp_messages["Details"] = "Detaylar"; +$net2ftp_messages["Icons"] = "Ikonlar"; +$net2ftp_messages["List"] = "Liste"; +$net2ftp_messages["Logout"] = "k"; +$net2ftp_messages["Help"] = "Yardm"; +$net2ftp_messages["Bookmark"] = "Sk Kullanlanlar"; +$net2ftp_messages["Save"] = "Kaydet"; +$net2ftp_messages["Default"] = "Varsaylan"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Yardm Rehberi"; +$net2ftp_messages["Forums"] = "Forumlar"; +$net2ftp_messages["License"] = "Lisans"; +$net2ftp_messages["Powered by"] = "Katklaryla"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "imdi net2ftp forumlarna gtrlyorsunuz. Bu forumlar, sadece net2ftp alakal konular iindir - genel web barndrma sorular iin deil."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Ynetici ilevleri"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Srm bilgisi"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Net2ftp nin bu srm gncel."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "En son srm bilgisi, net2ftp.com sunucusundan alnamyor. Taraycnzn net2ftp.com sunucusundan kk bir dosya yklemesini engelleyebilen gvenlik ayarlarn denetleyin."; //retrieved: ? +$net2ftp_messages["Logging"] = "Giriyor"; +$net2ftp_messages["Date from:"] = "Tarih den:"; +$net2ftp_messages["to:"] = "e:"; +$net2ftp_messages["Empty logs"] = "Bo kaytlar"; +$net2ftp_messages["View logs"] = "Kaytlar grntle"; +$net2ftp_messages["Go"] = "Git"; +$net2ftp_messages["Setup MySQL tables"] = "MySQL tablolarn kur"; +$net2ftp_messages["Create the MySQL database tables"] = "MySQL veritaban tablolar olutur"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Ynetici ilevleri"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "Dosyann idaresi %1\$s alamyor."; //handle: ? +$net2ftp_messages["The file %1\$s could not be opened."] = "Dosya %1\$s alamyor."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "Dosyann idaresi %1\$s kapatlamyor."; //handle: ? +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Sunucuya %1\$s balant kurulamyor. Ltfen girdiiniz veritaban ayarlarn denetleyin."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Veritaban %1\$s seemiyor."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL sorgu says %1\$s gerekletirilemiyor."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL sorgu says %1\$s baarl bir ekilde gerekletirildi."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Ltfen MySQL ayarlarnz girin:"; +$net2ftp_messages["MySQL username"] = "MySQL kullanc ad"; +$net2ftp_messages["MySQL password"] = "MySQL ifresi"; +$net2ftp_messages["MySQL database"] = "MySQL veritaban"; +$net2ftp_messages["MySQL server"] = "MySQL sunucusu"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Bu SQL sorgusu gerekletirilecek:"; +$net2ftp_messages["Execute"] = "Gerekletir"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Kullanlan ayarlar:"; +$net2ftp_messages["MySQL password length"] = "MySQL ifre uzunluu"; +$net2ftp_messages["Results:"] = "Sonular:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Ynetici ilevleri"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "SQL sorgusunu %1\$s gerekletiremiyor."; +$net2ftp_messages["No data"] = "Bilgi yok"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Ynetici ilevleri"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Tablo %1\$s baarl bir ekilde boaltld."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Tablo %1\$s boaltlamyor."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Tablo %1\$s baarl bir ekilde onarld."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Tablo %1\$s onarlamyor."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Gelimi ilevler"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Git"; +$net2ftp_messages["Disabled"] = "Kapatld"; //disabled: ? +$net2ftp_messages["Advanced FTP functions"] = "Gelimi FTP ilevleri"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "FTP sunucusuna rastgele FTP komutlar gnder"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Bu ilev sadece PHP 5 de mmkn"; +$net2ftp_messages["Troubleshooting functions"] = "levlerin sorunlarn gider"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Bu websunucusunda net2ftp nin sorunlarn gider"; +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP sunucusunun sorunlarn gider"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Net2ftp liste zmleme kurallarn test et"; +$net2ftp_messages["Translation functions"] = "eviri ilevleri"; +$net2ftp_messages["Introduction to the translation functions"] = "eviri ilevlerine giri"; +$net2ftp_messages["Extract messages to translate from code files"] = "Kod dosyalarndan evrilecek metin kart"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Yeni ya da eskimi ileti olup olmadn denetle"; + +$net2ftp_messages["Beta functions"] = "Beta ilevleri"; +$net2ftp_messages["Send a site command to the FTP server"] = "FTP sunucusuna bir site komutu gnder"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: ifre-korumal dizin, tasarlanm hata sayfalar olutur"; //custom: ? +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: SQL sorgusu gerekletir"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Site komut ilevleri bu web sunucusunda mmkn deil."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Apache ilevleri bu web sunucusunda mmkn deil."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "MySQL ilevleri bu web sunucusunda mmkn deil."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Beklenmedik state2 dizisi. kyor."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP sunucusunun sorunlarn gider"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Balant ayarlar:"; +$net2ftp_messages["FTP server"] = "FTP sunucusu"; +$net2ftp_messages["FTP server port"] = "FTP sunucu port"; +$net2ftp_messages["Username"] = "Kullanc ad"; +$net2ftp_messages["Password"] = "ifre"; +$net2ftp_messages["Password length"] = "ifre uzunluu"; +$net2ftp_messages["Passive mode"] = "Pasif mod"; +$net2ftp_messages["Directory"] = "Dizin"; +$net2ftp_messages["Printing the result"] = "Sonular yazdryor"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "FTP sunucusuna balanyor: "; +$net2ftp_messages["Logging into the FTP server: "] = "FTP sunucusuna giri yapyor: "; +$net2ftp_messages["Setting the passive mode: "] = "Pasif moda geiyor: "; +$net2ftp_messages["Getting the FTP server system type: "] = "FTP sunucusu sistem trn alyor: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Dizini %1\$s deitiriyor: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP sunucusundan dizin: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Dosya ve dizinlerin ham listesini alyor: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Dosya ve dizinlerin ham listesini almak iin ikince bir defa deniyor: "; +$net2ftp_messages["Closing the connection: "] = "Balanty kapatyor: "; +$net2ftp_messages["Raw list of directories and files:"] = "Dosya ve dizinlerin ham listesi:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Dosya ve dizinlerin zmlenmi listesi:"; //parsed: ? + +$net2ftp_messages["OK"] = "TAMAM"; +$net2ftp_messages["not OK"] = "TAMAM deil"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Net2ftp liste zmleme kurallarn test et"; +$net2ftp_messages["Sample input"] = "rnek girdi"; +$net2ftp_messages["Parsed output"] = "zmlenmi sonu"; //parsed: ? + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Net2ftp yklemenizin sorunu zn"; +$net2ftp_messages["Printing the result"] = "Sonular yazdryor"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Checking if the FTP module of PHP is installed: "; +$net2ftp_messages["yes"] = "evet"; +$net2ftp_messages["no - please install it!"] = "hayr - ltfen onu ykle!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Web sunucunuzdaki dizinin iznini denetliyor: kk bir dosya /temp klasrne yazlacak ve sonra silinecek."; +$net2ftp_messages["Creating filename: "] = "Dosya ad oluturuyor: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "TAMAM. Dosya ad: %1\$s"; +$net2ftp_messages["not OK"] = "TAMAM deil"; +$net2ftp_messages["OK"] = "TAMAM"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "TAMAM deil. %1\$s dizinin iznini denetliyor"; +$net2ftp_messages["Opening the file in write mode: "] = "Dosyay yazma modunda ayor: "; +$net2ftp_messages["Writing some text to the file: "] = "Dosyaya herhangi bir metin yazor : "; +$net2ftp_messages["Closing the file: "] = "Dosyay kapator: "; +$net2ftp_messages["Deleting the file: "] = "Dosyay siliyor: "; + +$net2ftp_messages["Testing the FTP functions"] = "FTP ilevlerini test ediyor"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Test FTP sunucusuna balanyor: "; +$net2ftp_messages["Connecting to the FTP server: "] = "FTP sunucusuna balanyor: "; +$net2ftp_messages["Logging into the FTP server: "] = "FTP sunucusuna giri yapyor: "; +$net2ftp_messages["Setting the passive mode: "] = "Pasif moda geiyor: "; +$net2ftp_messages["Getting the FTP server system type: "] = "FTP sunucusu sistem trn alyor: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Dizini %1\$s deitiriyor: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP sunucusundan dizin: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Dosya ve dizinlerin ham listesini alyor: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Dosya ve dizinlerin ham listesini almak iin ikince bir defa deniyor: "; +$net2ftp_messages["Closing the connection: "] = "Balanty kapatyor: "; +$net2ftp_messages["Raw list of directories and files:"] = "Dosya ve dizinlerin ham listesi:"; +$net2ftp_messages["Parsed list of directories and files:"] = "Dosya ve dizinlerin zmlenmi listesi:"; //parsed: ? +$net2ftp_messages["OK"] = "TAMAM"; +$net2ftp_messages["not OK"] = "TAMAM deil"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Not: bu sk kullanlanlar kullandnz zaman, pop alan pencere size kullanc adnz ve ifrenizi soracak."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Dizin se"; +$net2ftp_messages["Please wait..."] = "Ltfen bekleyin..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = " \' adn ieren dizinler doru bir ekilde gsterilemez. sadece silinebilir. Ltfen geri dnn ve bir baka alt dizin sein."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Gnlk snr at: bilgi aktaramayacaksnz"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Herkesin web sunucusunu adil bir ekilde kullanmn garanti etmek iin, bilgi aktarm hacmi ve yazlm uygulama sresi, kullanc bana ve gnlk olarak snrlandrlmtr. Bir kez bu snra ulaldnda, FTP sunucusunu hala gezebilir fakat ondan/ona bilgi aktaramazsnz."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Eer snrsz kullanma ihtiya duyuyorsanz, ltfen net2ftpyi kendi web sunucunuza ykleyin."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Yeni Dizin"; +$net2ftp_messages["New file"] = "Yeni Dosya"; +$net2ftp_messages["HTML templates"] = "HTML ablonlar"; +$net2ftp_messages["Upload"] = "Ykle"; +$net2ftp_messages["Java Upload"] = "Java ile Ykle"; +$net2ftp_messages["Flash Upload"] = "Flash ile Ykle"; +$net2ftp_messages["Install"] = "Kur"; +$net2ftp_messages["Advanced"] = "Gelimi"; +$net2ftp_messages["Copy"] = "Kopyala"; +$net2ftp_messages["Move"] = "Ta"; +$net2ftp_messages["Delete"] = "Sil"; +$net2ftp_messages["Rename"] = "Yeniden Adlandr"; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = "ndir"; +$net2ftp_messages["Unzip"] = "Ariv a"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "Boyut"; +$net2ftp_messages["Search"] = "Arama"; +$net2ftp_messages["Go to the parent directory"] = "Ana dizine git"; +$net2ftp_messages["Go"] = "Git"; +$net2ftp_messages["Transform selected entries: "] = "Seili girileri dntr: "; +$net2ftp_messages["Transform selected entry: "] = "Seili girii dntr: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "%1\$s dizininde yeni bir alt dizin yap"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "%1\$s dizininde yeni bir dosya olutur"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Hazr-yaplm ablon kullanarak kolayca bir websitesi oluturun"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "%1\$s dizinine yeni dosya ykle"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Java aplet kullanarak dizin ve dosyalar ykle"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Yazlm paketlerini ykle (web sunucusunda PHP gerektirir)"; +$net2ftp_messages["Go to the advanced functions"] = "Gelimi ilevlere git"; +$net2ftp_messages["Copy the selected entries"] = "Seili girileri kopyala"; +$net2ftp_messages["Move the selected entries"] = "Seili girileri ta"; +$net2ftp_messages["Delete the selected entries"] = "Seili girileri sil"; +$net2ftp_messages["Rename the selected entries"] = "Seili girileri yeniden adlandr"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Seili girileri chmod (sadece Unix/Linux/BSD sunucularnda alyor)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Tm seili girileri ieren bir zip dosyas indir"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "FTP sunucusundaki seili ariv paketlerini a"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Kaydedebilmek veya e-posta ile gnderebilmek iin, seili girileri ziple"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Seili girilerin boyutunu hesapla"; +$net2ftp_messages["Find files which contain a particular word"] = "Belirli bir szc ieren dosyalar bul"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Alalan srada %1\$s ile sralamak iin tklayn"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Ykselen srada %1\$s ile sralamak iin tklayn"; +$net2ftp_messages["Ascending order"] = "Ykselen sralama"; +$net2ftp_messages["Descending order"] = "Alalan sralama"; +$net2ftp_messages["Upload files"] = "Dosyalar ykle"; +$net2ftp_messages["Up"] = "Yukar"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Tm dizileri iaretlemek ya da iareti kaldrmak iin tklayn"; +$net2ftp_messages["All"] = "Tm"; +$net2ftp_messages["Name"] = "Ad"; +$net2ftp_messages["Type"] = "Tr"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "sahip"; +$net2ftp_messages["Group"] = "Grup"; +$net2ftp_messages["Perms"] = "zinler"; +$net2ftp_messages["Mod Time"] = "Mod Zaman"; +$net2ftp_messages["Actions"] = "Eylemler"; +$net2ftp_messages["Select the directory %1\$s"] = "Dizini %1\$s se"; +$net2ftp_messages["Select the file %1\$s"] = "Dosyay %1\$s se"; +$net2ftp_messages["Select the symlink %1\$s"] = "Symlink %1\$s se"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Alt dizine %1\$s git"; +$net2ftp_messages["Download the file %1\$s"] = "Dosyay %1\$s indir"; +$net2ftp_messages["Follow symlink %1\$s"] = "Symlink %1\$s takip et"; +$net2ftp_messages["View"] = "Grntle"; +$net2ftp_messages["Edit"] = "Dzenle"; +$net2ftp_messages["Update"] = "Gncelle"; +$net2ftp_messages["Open"] = "A"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Dosyann %1\$s vurgulanm kaynak kodunu grntle"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Dosyann %1\$s kaynak kodunu dzenle"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Dosyann %1\$s yeni srmn ykle ve deiiklikleri birletir"; //mere: ? +$net2ftp_messages["View image %1\$s"] = "Resmi %1\$s grntle"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "HTTP web sunucunuzdan %1\$s dosyay grntle"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Not: Eer kendi alan adnza sahip deilseniz, bu balant almayabilir.)"; +$net2ftp_messages["This folder is empty"] = "Bu klasr bo"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Dizinler"; +$net2ftp_messages["Files"] = "Dosyalar"; +$net2ftp_messages["Symlinks"] = "Symlinks"; +$net2ftp_messages["Unrecognized FTP output"] = "Tannmayan FTP sonucu"; +$net2ftp_messages["Number"] = "Say"; +$net2ftp_messages["Size"] = "Boyut"; +$net2ftp_messages["Skipped"] = "Atlanlan"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Dil:"; +$net2ftp_messages["Skin:"] = "Kaplama:"; +$net2ftp_messages["View mode:"] = "Grntleme modu:"; +$net2ftp_messages["Directory Tree"] = "Dizin aac"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Yeni pencerede %1\$s gerekletir"; +$net2ftp_messages["This file is not accessible from the web"] = "Bu sayfaya webten ulalabilir deil"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Alt dizine gitmek iin ift tklayn:"; +$net2ftp_messages["Choose"] = "Se"; +$net2ftp_messages["Up"] = "Yukar"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Seili dizin ve dosyalarn boyutu"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Seili dizin ve dosyalarn ald toplam boyut:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Atlanlan dosyalarn says:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Dizin ve dosyalar chmod"; +$net2ftp_messages["Set all permissions"] = "Tm izinleri ayarla"; +$net2ftp_messages["Read"] = "Oku"; +$net2ftp_messages["Write"] = "Yaz"; +$net2ftp_messages["Execute"] = "Gerekletir"; +$net2ftp_messages["Owner"] = "sahip"; +$net2ftp_messages["Group"] = "Grup"; +$net2ftp_messages["Everyone"] = "Herkes"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Tm izinleri ayn deere ayarlamak iin, yukardaki o izinleri girin ve \"Tm izinleri ayarla\" dmesine tklayn"; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Diznin %1\$s izinlerini una ayarla: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Dosyann %1\$s izinlerini una ayarla: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "symlink %1\$s izinlerini una ayarla: "; //smlink: ? +$net2ftp_messages["Chmod value"] = "Chmod deeri"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Bu dizin ierisindeki alt dizinleri de chmod"; +$net2ftp_messages["Chmod also the files within this directory"] = "Bu dizin ierisindeki dosyalar da chmod"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "chmod says %1\$s 000-777 aralnn dndadr. Ltfen tekrar deneyin."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Dizin se"; +$net2ftp_messages["Copy directories and files"] = "Dizin ve dosyalar kopyala"; +$net2ftp_messages["Move directories and files"] = "Dizin ve dosyalar ta"; +$net2ftp_messages["Delete directories and files"] = "Dizin ve dosyalar sil"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Bu dizin ve dosyalar silmek istediinizden emin misiniz?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Seili dizinlerin tm dosyalar ve alt dizinleri ayrca silinecek!"; +$net2ftp_messages["Set all targetdirectories"] = "Tm hedef dizinleri ayarla"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Sradan bir hedef dizin ayarlamak iin, yukardaki metin kutusuna hedef dizini girin ve \"Tm hedef dizinleri ayarla\"dmesine tklayn."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Not: ierisine herhangi bir ey kopyalanmadan nce, hedef dizin nceden var olmal."; +$net2ftp_messages["Different target FTP server:"] = "Farkl hedef FTP sunucusu:"; +$net2ftp_messages["Username"] = "Kullanc ad"; +$net2ftp_messages["Password"] = "ifre"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Eer dosyalar, ayn FTP sunucusuna kopyalamak istiyorsanz, bo brakn."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Eer dosyalar bir baka FTP sunucusuna kopyalamak istiyorsanz, giri bilginizi girin."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Eer dosyalar, ayn FTP sunucusuna tamak istiyorsanz, bo brakn."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Eer dosyalar bir baka FTP sunucusuna tamak istiyorsanz, giri bilginizi girin."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Dizini %1\$s una kopyala:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Dizini %1\$s una ta:"; +$net2ftp_messages["Directory %1\$s"] = "Dizin %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Dosyay %1\$s una kopyala:"; +$net2ftp_messages["Move file %1\$s to:"] = "Dosyay %1\$s una ta:"; +$net2ftp_messages["File %1\$s"] = "Dosya %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "symlink %1\$s una kopyala:"; //symlink: ? +$net2ftp_messages["Move symlink %1\$s to:"] = "symlink %1\$s una ta:"; //symlink: ? +$net2ftp_messages["Symlink %1\$s"] = "Symlink %1\$s"; +$net2ftp_messages["Target directory:"] = "Hedef dizin:"; +$net2ftp_messages["Target name:"] = "Hedef ad:"; +$net2ftp_messages["Processing the entries:"] = "Girii ileme alyor:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "4 kolay admda bir websitesi olutur"; +$net2ftp_messages["Template overview"] = "ablon nizleme"; +$net2ftp_messages["Template details"] = "ablon detaylar"; +$net2ftp_messages["Files are copied"] = "Dosyalar kopyaland"; +$net2ftp_messages["Edit your pages"] = "Sayfalarn dzenle"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Bir ablonun detaylarn grntlemek iin resme tklayn."; +$net2ftp_messages["Back to the Browse screen"] = "Tarama ekranna geri dn"; +$net2ftp_messages["Template"] = "ablon"; +$net2ftp_messages["Copyright"] = "Telif hakk"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Bu ablonun detaylarn grntlemek iin resme tklayn"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "ablon dosyalar, FTP sunucunuza kopyalanacak. Ayn isimle var olan dosyalar zerine yazlacak. Devam etmek istiyor musunuz?"; +$net2ftp_messages["Install template to directory: "] = "ablonu dizine ykle: "; +$net2ftp_messages["Install"] = "Kur"; +$net2ftp_messages["Size"] = "Boyut"; +$net2ftp_messages["Preview page"] = "nizleme sayfas"; +$net2ftp_messages["opens in a new window"] = "yeni pencerede aar"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "ablon dosyalar sunucunuza aktarlrken ltfen bekleyin: "; +$net2ftp_messages["Done."] = "Bitti."; +$net2ftp_messages["Continue"] = "Devam"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Sayfay dzenle"; +$net2ftp_messages["Browse the FTP server"] = "FTP sunucusunu gez"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Daha sonra bu sayfaya geri dnebilmek iin bu balanty sk kullanlanlarnza ekleyin!"; +$net2ftp_messages["Edit website at %1\$s"] = "%1\$s de websiteni dzenle"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: balanta sa tklayn ve \"Sk Kullanlanlara Ekle...\"sein "; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: balantya sa tklayn ve \"Yer imlerine ekle...\"sein"; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "UYARI: %1\$s alt dizinini oluturamyor. nceden var olabilir. Devam ediyor..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Hedef alt dizin %1\$s oluturuldu"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "UYARI: %1\$s dosyasn kopyalayamyor. Devam ediyor..."; +$net2ftp_messages["Copied file %1\$s"] = "Dosyay %1\$s kopyalad"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "ablon dosyasn aamyor"; +$net2ftp_messages["Unable to read the template file"] = "ablon dosyasn okuyamyor"; +$net2ftp_messages["Please specify a filename"] = "Ltfen bir dosya ad belirtin"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Durum: Bu sayfa henz kaydedilmedi"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Durum: %1\$sde %2\$s modu kullanlarak kaydedildi"; +$net2ftp_messages["Status: This file could not be saved"] = "Durum: Bu sayfa kaydedilemiyor"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Dizin: "; +$net2ftp_messages["File: "] = "Dosya: "; +$net2ftp_messages["New file name: "] = "Yeni dosya ad: "; +$net2ftp_messages["Character encoding: "] = "Karakter kodlamas: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Not: metin alan trn deitirmek, deiiklikleri kaydedecektir"; +$net2ftp_messages["Copy up"] = "Yukary kopyala"; //copy up: ? +$net2ftp_messages["Copy down"] = "Aay kopyala"; //copy down: ? + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Dosya ve dizinleri ara"; +$net2ftp_messages["Search again"] = "Tekrar ara"; +$net2ftp_messages["Search results"] = "Arama sonular"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Ltfen geerli bir arama szc ya da sz bei girin."; +$net2ftp_messages["Please enter a valid filename."] = "Ltfen geerli bir dosya ad girin."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Ltfen \"kimden\" metin kutusuna geerli bir dosya boyutu girin, rnein 0."; //from: ? +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Ltfen \"kime\" metin kutusuna geerli bir dosya boyutu girin, rnein 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Ltfen \"kimden\" metin kutusuna yl-ay-gn biiminde geerli bir tarih girin."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Ltfen \"kime\" metin kutusuna yl-ay-gn biiminde geerli bir tarih girin."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Szck %1\$s, seili alt dizinlerde ve dosyalarda bulunamad."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Szck %1\$s, aadaki dosyalarda bulundu:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Kelime ya da sz bei ara"; +$net2ftp_messages["Case sensitive search"] = "Byk/kk harf hassas arama"; +$net2ftp_messages["Restrict the search to:"] = "Aramay una kstla:"; +$net2ftp_messages["files with a filename like"] = "Benzer adl dosyalar"; +$net2ftp_messages["(wildcard character is *)"] = "(joker karakter: *)"; //wildcard: ? +$net2ftp_messages["files with a size"] = "boyutlu dosyalar"; +$net2ftp_messages["files which were last modified"] = "son deitirilen dosyalar"; +$net2ftp_messages["from"] = "kimden"; +$net2ftp_messages["to"] = "kime"; + +$net2ftp_messages["Directory"] = "Dizin"; +$net2ftp_messages["File"] = "Dosya"; +$net2ftp_messages["Line"] = "Satr"; +$net2ftp_messages["Action"] = "Eylem"; +$net2ftp_messages["View"] = "Grntle"; +$net2ftp_messages["Edit"] = "Dzenle"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Dosyann %1\$s vurgulanm kaynak kodunu grntle"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Dosyann %1\$s kaynak kodunu dzenle"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Yazlm paketlerini ykle"; +$net2ftp_messages["Unable to open the template file"] = "ablon dosyasn aamyor"; +$net2ftp_messages["Unable to read the template file"] = "ablon dosyasn okuyamyor"; +$net2ftp_messages["Unable to get the list of packages"] = "Paketlerin listesini alamyor"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "Net2ftp ykleyici yazlm FTP sunucusuna kopyaland."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "Bu yazlm, web sunucunuzda alr ve yklenebilmesi iin PHP gerektirir."; +$net2ftp_messages["In order to run it, click on the link below."] = "altrmak iin, aadaki balantya tklayn."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp, FTP sunucusu ile web sunucusu arasnda dizin haritas belirlemeyi denedi ."; //mapping: ? +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Eer bu balant doru deilse, URL yi web taraycnza elinizle girin."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Java aplet kullanarak dizin ve dosyalar ykle"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Giri!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Bir kez giri yaptnz zaman, unu yapabileceksiniz:"; +$net2ftp_messages["Navigate the FTP server"] = "FTP sunucusunu ynlendirme"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Bir kez giri yaptnz zaman, dizinden dizine tarama yapabilir ve tm alt dizinleri ve dosyalar grebilirsiniz."; +$net2ftp_messages["Upload files"] = "Dosyalar ykle"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Dosyalar yklemek iin 3 farkl yol var: standard ykleme formu, ykle-ve-a ilevsellii, ve Java Apleti."; //Applet: ? +$net2ftp_messages["Download files"] = "Dosyalar indir"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Bir dosyay hzlca indirmek iin dosya adna tklayn.
oklu dosya sein ve ndir e tklayn; seili dosyalar, zip ariv paketi olarak indirilecektir."; +$net2ftp_messages["Zip files"] = "Zip dosyalar"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... ve zip ariv paketini FTP sunucusunda kaydet, veya birisine e-posta ile gnder."; +$net2ftp_messages["Unzip files"] = "Dosyalar kart"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Farkl biimler destekleniyor: .zip, .tar, .tgz ve .gz."; +$net2ftp_messages["Install software"] = "Yazlm ykle"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Sevilen uygulamalarn listesinden sein(PHP gerekli)."; +$net2ftp_messages["Copy, move and delete"] = "Kopyala, ta ve sil"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Dizinler akc bir ekilde ele alnr, yani ierii (alt dizinler ve dosyalar) ayrca kopyalancak, tancak veya silinecek."; //recursively: ? +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "2. FTP sunucusuna kopyala veya ta"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "FTP sunucunuza dosya aktarmak veya FTP sunucunuzdan bir baka FTP sunucusuna dosya aktarmak iin kullanldr."; +$net2ftp_messages["Rename and chmod"] = "Yenidenn adlandr ve chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod dizinleri akc bir ekilde ele alr."; //recursively: ? +$net2ftp_messages["View code with syntax highlighting"] = "Szdizim vurgulamas ile kodu grntle"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP ilevleri, php.net deki destek belgelerine baldr."; +$net2ftp_messages["Plain text editor"] = "Basit metin editr"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Taraycnzdan metni dzenleyin; her ne zaman deiiklikleri kaydederseniz, yeni dosya FTP sunucusuna aktarlacaktr."; +$net2ftp_messages["HTML editors"] = "HTML editrleri"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Ne-Grdn-Ne-Elde-Ettiindir (WYSIWYG) formunda HTML yi dzenle; seebileceiniz 2 farkl editr var."; +$net2ftp_messages["Code editor"] = "Kod editr"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Szdizim vurgulamal bir editrde HTML ve PHP dzenle."; +$net2ftp_messages["Search for words or phrases"] = "Szck ya da sz bei arayn"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Dosyalar adna,son deitirme zamanna ve boyutuna dayal olarak filtrele."; +$net2ftp_messages["Calculate size"] = "Boyutu hesapla"; +$net2ftp_messages["Calculate the size of directories and files."] = "Dosya ve dizinlerin boyutunu hesapla."; + +$net2ftp_messages["FTP server"] = "FTP sunucusu"; +$net2ftp_messages["Example"] = "rnek"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Kullanc ad"; +$net2ftp_messages["Password"] = "ifre"; +$net2ftp_messages["Anonymous"] = "Anonim"; +$net2ftp_messages["Passive mode"] = "Pasif mod"; +$net2ftp_messages["Initial directory"] = "lk dizin"; +$net2ftp_messages["Language"] = "Dil"; +$net2ftp_messages["Skin"] = "Kaplama"; +$net2ftp_messages["FTP mode"] = "FTP modu"; +$net2ftp_messages["Automatic"] = "Otomatik"; +$net2ftp_messages["Login"] = "Giri"; +$net2ftp_messages["Clear cookies"] = "erezleri temizle"; +$net2ftp_messages["Admin"] = "Ynetici"; +$net2ftp_messages["Please enter an FTP server."] = "Ltfen bir FTP sunucusu girin."; +$net2ftp_messages["Please enter a username."] = "Ltfen bir kullanc ad girin."; +$net2ftp_messages["Please enter a password."] = "Ltfen bir ifre girin."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Ltfen ynetici kullanc adnz ve ifrenizi girin."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Ltfen FTP sunucusu iin kullanc adnz ve ifrenizi girin%1\$s."; +$net2ftp_messages["Username"] = "Kullanc ad"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Oturumunuz sona erdi; ltfen %1\$s devam etmek iin,FTP sunucusu iin ifrenizi girin."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "IP adresiniz deiti; ltfen %1\$s devam etmek iin,FTP sunucusu iin ifrenizi girin."; +$net2ftp_messages["Password"] = "ifre"; +$net2ftp_messages["Login"] = "Giri"; +$net2ftp_messages["Continue"] = "Devam"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Giri sayfas"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "FTP sunucusundan k yaptnz. Geri giri yapmak iin, bu balanty takip edin."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Not: bu bilgisayarn dier kullanclar,taraycnn Geri dmesine tklayabilir ve FTP sunucusuna ulaabilir."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Bunu nlemek iin, tm tarayc pencerelerini kapatmalsnz."; +$net2ftp_messages["Close"] = "Kapat"; +$net2ftp_messages["Click here to close this window"] = "Bu pencereyi kapatmak iin buraya tklaynz"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Yeni dizinler olutur"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Yeni dizinler, %1\$sde oluturulacaktr."; +$net2ftp_messages["New directory name:"] = "Yeni dizin ad:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Dizin %1\$s baarl bir ekilde oluturuldu."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Dizin %1\$s oluturamyor."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Rastgele FTP komutlar gnder"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Komutlarn listesi:"; +$net2ftp_messages["FTP server response:"] = "FTP sunucusu cevab:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Dosya ve dizileri yeniden adlandr"; +$net2ftp_messages["Old name: "] = "Eski ad: "; +$net2ftp_messages["New name: "] = "Yeni ad: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Yeni ad nokta ieremez. Bu giri, %1\$se yeniden adlandrlmad"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "Yeni ad yasakl anahtar kelime ieremez. Bu giri, %1\$se yeniden adlandrlmad"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s baarl bir ekilde %2\$se yeniden adlandrld"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s ,%2\$se yeniden adlandrlamyor"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Ariv paketlerini a"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "FTP sunucusundan arsiv paketini aliyor %1\$s - %2\$s"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "FTP sunucusundan ariv paketini alamyor %1\$s"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Tm hedef dizinleri ayarla"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Sradan bir hedef dizin ayarlamak iin, yukardaki metin kutusuna hedef dizini girin ve \"Tm hedef dizinleri ayarla\"dmesine tklayn."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Not: ierisine herhangi bir ey kopyalanmadan nce, hedef dizin nceden var olmal."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Ariv paketlerini %1\$s una a:"; +$net2ftp_messages["Target directory:"] = "Hedef dizin:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Klasr adlarn kullan (otomatik alt dizinler oluturur)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Dizine ykle:"; //dizine: klasre +$net2ftp_messages["Files"] = "Dosyalar"; +$net2ftp_messages["Archives"] = "Ariv paketleri"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Buraya girilen dosyalar FTP sunucusuna aktarlacaktr."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Buraya girilen ariv paketleri alacaktr ve ierisindeki dosyalar FTP sunucusuna aktarlacaktr."; +$net2ftp_messages["Add another"] = "Bir bakasn ekle"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Klasr adlarn kullan (otomatik alt dizinler oluturur)"; + +$net2ftp_messages["Choose a directory"] = "Dizin se"; +$net2ftp_messages["Please wait..."] = "Ltfen bekleyin..."; +$net2ftp_messages["Uploading... please wait..."] = "Yklyor... ltfen bekleyin..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Eer ykleme izin verilen %1\$s saniye<\/b>den daha fazla srerse, daha az/daha kk dosyalar ile tekrar denemek zorunda kalacaksnz."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Bu pencere birka saniye iinde otomatik olarak kapancaktr."; +$net2ftp_messages["Close window now"] = "Pencereyi imdi kapat"; + +$net2ftp_messages["Upload files and archives"] = "Dosyalar ve ariv paketlerini ykle"; +$net2ftp_messages["Upload results"] = "Ykleme sonular"; +$net2ftp_messages["Checking files:"] = "Dosyalar denetliyor:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Dosyalar FTP sunucusuna aktaryor:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Ariv paketlerini ayor ve FTP sunucusuna aktaryor:"; +$net2ftp_messages["Upload more files and archives"] = "Daha fazla ariv paketi ve dosya ykle"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Kstlamalar:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Maksimum uygulama sresi %1\$s saniyedir"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "FTP aktarm modu (ASCII veya BINARY) dosya uzantsna bal olarak ,otomatik belirlenecektir"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Eer hedef dosya zaten varsa, zerine yazlacaktr"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Dosyay gster %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Resmi %1\$s grntle"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Macromedia ShockWave Fla filmini gster %1\$s"; +$net2ftp_messages["Image"] = "Resim"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Szdizim vurgulama Luminous ile glendirilmitir"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Resmi kaydetmek iin, zerine sa tklayn ve 'Resmi Farkl Kaydet...'i sein"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip girileri"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "FTP sunucusunda zip dosyas olarak kaydet:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Zip dosyasn ek eklinde birisine, e-posta ile gnder:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Dosya gndermenin anonim olmadna dikkat edin: Gnderme zamannza ek olarak, IP adresiniz e-postaya eklenecek."; +$net2ftp_messages["Some additional comments to add in the email:"] = "E-postaya eklenecek baz ek yorumlar:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Zip dosyas iin bir dosya ad girmediniz. Geri dnn ve bir dosya ad girin."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Girdiiniz e-posta adresi (%1\$s) geerli gzkmyor.
Ltfen kullancad@alanad.com biiminde bir adres girin"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/ua.inc.php b/ehcp/net2ftp/languages/ua.inc.php new file mode 100644 index 0000000..96a6c98 --- /dev/null +++ b/ehcp/net2ftp/languages/ua.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "i %1\$s i , i %2\$s ."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = " i %1\$s i ."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "i %1\$s - i i."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = " net2ftp , i i i . i i i PayPal Ebay."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = " i , i, i, i, , ; , i ."; +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s ii"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "i ."; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP- %1\$s FTP-i."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP- %1\$s FTP-i."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = " FTP- %1\$s ."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = " IP- (%1\$s) ."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = " IP- (%1\$s) IP-."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = " net2ftp_users i i ."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = " i' ii."; +$net2ftp_messages["Wrong username or password. Please try again."] = " i' . , ."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = " i ip ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = " net2ftp_log_consumption_ipaddress i i ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = " net2ftp_log_consumption_ftpserver i i ."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "i consumption_ipaddress_datatransfer ."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = " net2ftp_log_consumption_ipaddress."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = " net2ftp_log_consumption_ipaddress i i ."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = " net2ftp_log_consumption_ftpserver."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Table net2ftp_log_consumption_ftpserver contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = " net2ftp_log_access."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = " net2ftp_log_access i i ."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = " ' MySQL. i i i settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = " "; +$net2ftp_messages["Go back"] = ""; +$net2ftp_messages["Go to the login page"] = " i "; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " ' FTP- %1\$s %2\$s.

FTP-? ii i HTTP-. , 'i i ISP i.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " i FTP- %1\$s i %2\$s.

i i ? , 'i i ISP i.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = " FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = " ' FTP- %1\$s %2\$s.

FTP-? ii i HTTP-. , 'i i ISP i.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = " ' FTP- %1\$s i %2\$s.

i i' ? , 'i i ISP i.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = " FTP %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = " %1\$s %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = " %1\$s. CHMOD i Unix-."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = " %1\$s i chmodded %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = " i i %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = " %1\$s i chmodded %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "i i ii."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = " %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = " %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = " %1\$s FTP- %2\$s.
i %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " i . i %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = " "; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = " . i %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = " i . i %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = " %1\$s.
i %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = " "; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = " %1\$s FTP-.
, ."; +$net2ftp_messages["Unable to delete the temporary file"] = " "; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "i %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = " %1\$s i i %2\$s, "; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "i %1\$s i , i "; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "i %1\$s i , i "; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = " %1\$s. i. ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = " i %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "i %1\$s , "; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = " %1\$s - "; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "i %1\$s i"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = " %1\$s i i , i "; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = " %1\$s i i , "; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = " %1\$s i i , i"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = " %1\$s i, i "; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = " %1\$s i, i "; +$net2ftp_messages["Unable to copy the file %1\$s"] = " i %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = " i %1\$s, i ."; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "i %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = " %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "i i ii."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = " i %1\$s ', FTP-ht;bv %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = " %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = " i."; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = " ii: %1\$s "; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = " i %1\$s ', %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = " "; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = " "; +$net2ftp_messages["Unable to send the file to the browser"] = " "; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = " "; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Zip- FTP-i %1\$s"; +$net2ftp_messages["Requested files"] = "i "; + +$net2ftp_messages["Dear,"] = ","; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = " ( ) i , i i, (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = " , , i ii, , , i ."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = " i zip-, , , 'i."; +$net2ftp_messages["Information about the sender: "] = "Ii i: "; +$net2ftp_messages["IP address: "] = "IP-: "; +$net2ftp_messages["Time of sending: "] = " i: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "i net2ftp "; +$net2ftp_messages["Webmaster's email: "] = " -: "; +$net2ftp_messages["Message of the sender: "] = " : "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp , i ii GNU/GPL. i ii http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Zip- %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = " %1\$s . ."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = " %1\$s i i . ."; +$net2ftp_messages["Could not generate a temporary file."] = " ."; +$net2ftp_messages["File %1\$s could not be moved"] = " %1\$s i"; +$net2ftp_messages["File %1\$s is OK"] = " %1\$s Ok"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = " i .

chmod 777 /temp."; +$net2ftp_messages["You did not provide any file to upload."] = " ."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = " %1\$s FTP-"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = " %1\$s FTP-, FTP- %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "i i FTP-"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "i i nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = " %1\$s , . ҳ zp, tar, tgz gz ."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = " i"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = " ../ or ..\\ - . ."; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = " %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = " i %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = " i"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = " %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = " %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = " "; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = ", net2ftp %1\$s . ."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = " ."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = " : , ."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = " net2ftp, net2ftp ."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = " !"; +$net2ftp_messages["You did not supply a From address."] = " ."; +$net2ftp_messages["You did not supply a To address."] = " ."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = " ' emal %1\$s ."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = " SQL ."; +$net2ftp_messages["Unable to open the system log."] = " i ."; +$net2ftp_messages["Unable to write a message to the system log."] = " i ."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = " , i i i FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" i\" ."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = " ii net2ftp , i settings.inc.php . ."; +$net2ftp_messages["Please enter your Admin username and password"] = " , i i ii."; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = " .
\" i\" ."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = " ii net2ftp. settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "i"; +$net2ftp_messages["Grey"] = "i"; +$net2ftp_messages["Black"] = ""; +$net2ftp_messages["Yellow"] = ""; +$net2ftp_messages["Pastel"] = ""; + +// getMime() +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Symlink"] = ""; +$net2ftp_messages["ASP script"] = " ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "CSS"; +$net2ftp_messages["HTML file"] = " HTML"; +$net2ftp_messages["Java source file"] = " Java"; +$net2ftp_messages["JavaScript file"] = " JavaScript"; +$net2ftp_messages["PHP Source"] = "PHP "; +$net2ftp_messages["PHP script"] = " PHP"; +$net2ftp_messages["Text file"] = ""; +$net2ftp_messages["Bitmap file"] = ""; +$net2ftp_messages["GIF file"] = "GIF"; +$net2ftp_messages["JPEG file"] = "JPEG"; +$net2ftp_messages["PNG file"] = "PNG"; +$net2ftp_messages["TIF file"] = "TIF"; +$net2ftp_messages["GIMP file"] = " GIMP"; +$net2ftp_messages["Executable"] = ""; +$net2ftp_messages["Shell script"] = " shell"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - i PowerPoint"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - "; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - i Impress 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - i StarImpress 5.x"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x"; +$net2ftp_messages["Adobe Acrobat document"] = " Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "ARC-i"; +$net2ftp_messages["ARJ archive"] = "ARJ-i"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ-i"; +$net2ftp_messages["TAR archive"] = "TAR-i"; +$net2ftp_messages["Zip archive"] = "Zip-i"; +$net2ftp_messages["MOV movie file"] = "i MOV"; +$net2ftp_messages["MPEG movie file"] = "i MPEG"; +$net2ftp_messages["Real movie file"] = "i i Real"; +$net2ftp_messages["Quicktime movie file"] = "i Quicktime"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash"; +$net2ftp_messages["Shockwave file"] = " Shockwave"; +$net2ftp_messages["WAV sound file"] = " WAV"; +$net2ftp_messages["Font file"] = " "; +$net2ftp_messages["%1\$s File"] = "%1\$s "; +$net2ftp_messages["File"] = ""; + +// getAction() +$net2ftp_messages["Back"] = ""; +$net2ftp_messages["Submit"] = "i"; +$net2ftp_messages["Refresh"] = ""; +$net2ftp_messages["Details"] = "i"; +$net2ftp_messages["Icons"] = ""; +$net2ftp_messages["List"] = ""; +$net2ftp_messages["Logout"] = "i"; +$net2ftp_messages["Help"] = ""; +$net2ftp_messages["Bookmark"] = ""; +$net2ftp_messages["Save"] = ""; +$net2ftp_messages["Default"] = " "; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = ""; +$net2ftp_messages["Forums"] = ""; +$net2ftp_messages["License"] = "˳"; +$net2ftp_messages["Powered by"] = " "; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = " net2ftp. net2ftp, ."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = " "; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Ii "; +$net2ftp_messages["This version of net2ftp is up-to-date."] = " net2ftp."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = " net2ftp.com. i , net2ftp.com."; +$net2ftp_messages["Logging"] = " "; +$net2ftp_messages["Date from:"] = " :"; +$net2ftp_messages["to:"] = ":"; +$net2ftp_messages["Empty logs"] = " "; +$net2ftp_messages["View logs"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Setup MySQL tables"] = " MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = " MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = " i %1\$s"; +$net2ftp_messages["The file %1\$s could not be opened."] = " %1\$s ."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = " %1\$s"; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = " ' %1\$s. , '."; +$net2ftp_messages["Unable to select the database %1\$s."] = " %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "SQL- %1\$s ."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "SQL- %1\$s i ."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = " , MySQL:"; +$net2ftp_messages["MySQL username"] = "' MySQL"; +$net2ftp_messages["MySQL password"] = " MySQL"; +$net2ftp_messages["MySQL database"] = " MySQL"; +$net2ftp_messages["MySQL server"] = "MySQL server"; +$net2ftp_messages["This SQL query is going to be executed:"] = " SQL-:"; +$net2ftp_messages["Execute"] = ""; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = " :"; +$net2ftp_messages["MySQL password length"] = " MySQL"; +$net2ftp_messages["Results:"] = ":"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = " SQL %1\$s."; +$net2ftp_messages["No data"] = " "; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = " "; +$net2ftp_messages["The table %1\$s was emptied successfully."] = " %1\$s i ."; +$net2ftp_messages["The table %1\$s could not be emptied."] = " %1\$s ."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = " %1\$s i ."; +$net2ftp_messages["The table %1\$s could not be optimized."] = " %1\$s ."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = " "; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Disabled"] = "³"; +$net2ftp_messages["Advanced FTP functions"] = " FTP "; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "³ FTP FTP "; +$net2ftp_messages["This function is available on PHP 5 only"] = " i i PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = " "; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = " net2ftp -i"; +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP-"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Translation functions"] = " "; +$net2ftp_messages["Introduction to the translation functions"] = " "; +$net2ftp_messages["Extract messages to translate from code files"] = "Extract messages to translate from code files"; +$net2ftp_messages["Check if there are new or obsolete messages"] = " "; + +$net2ftp_messages["Beta functions"] = "-"; +$net2ftp_messages["Send a site command to the FTP server"] = "³ FTP "; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: , "; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: SQL-"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = " -i."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = " Apache -i."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = " MySQL -i."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = " 2. ."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = " FTP-"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = " ':"; +$net2ftp_messages["FTP server"] = "FTP-"; +$net2ftp_messages["FTP server port"] = " FTP-"; +$net2ftp_messages["Username"] = "i"; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Password length"] = " "; +$net2ftp_messages["Passive mode"] = " "; +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "' FTP-: "; +$net2ftp_messages["Logging into the FTP server: "] = "i FTP-: "; +$net2ftp_messages["Setting the passive mode: "] = " : "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP-: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP-: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " i: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " : "; +$net2ftp_messages["Closing the connection: "] = " ': "; +$net2ftp_messages["Raw list of directories and files:"] = " i:"; +$net2ftp_messages["Parsed list of directories and files:"] = " i:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = " OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = " net2ftp"; +$net2ftp_messages["Sample input"] = " "; +$net2ftp_messages["Parsed output"] = " "; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = " net2ftp"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "i FTP i PHP: "; +$net2ftp_messages["yes"] = ""; +$net2ftp_messages["no - please install it!"] = " - , !"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = " -: /temp ."; +$net2ftp_messages["Creating filename: "] = "' : "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. ' : %1\$s"; +$net2ftp_messages["not OK"] = " OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = " OK. i %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "³ : "; +$net2ftp_messages["Writing some text to the file: "] = " : "; +$net2ftp_messages["Closing the file: "] = " : "; +$net2ftp_messages["Deleting the file: "] = " : "; + +$net2ftp_messages["Testing the FTP functions"] = " FTP"; +$net2ftp_messages["Connecting to a test FTP server: "] = "ϳ FTP : "; +$net2ftp_messages["Connecting to the FTP server: "] = "' FTP-: "; +$net2ftp_messages["Logging into the FTP server: "] = "i FTP-: "; +$net2ftp_messages["Setting the passive mode: "] = " : "; +$net2ftp_messages["Getting the FTP server system type: "] = " FTP-: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = " %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = " FTP-: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = " i: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = " : "; +$net2ftp_messages["Closing the connection: "] = " ': "; +$net2ftp_messages["Raw list of directories and files:"] = " i:"; +$net2ftp_messages["Parsed list of directories and files:"] = " i:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = " OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = ": , ' ."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "i "; +$net2ftp_messages["Please wait..."] = " , ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = " , \' . . , ."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = " : "; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = " , . , , ."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = " , net2ftp ftp ."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = " "; +$net2ftp_messages["New file"] = " "; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = " "; +$net2ftp_messages["Java Upload"] = " Java"; +$net2ftp_messages["Flash Upload"] = " Flash"; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Advanced"] = ""; +$net2ftp_messages["Copy"] = "."; +$net2ftp_messages["Move"] = "."; +$net2ftp_messages["Delete"] = ""; +$net2ftp_messages["Rename"] = "."; +$net2ftp_messages["Chmod"] = "Chmod"; +$net2ftp_messages["Download"] = " "; +$net2ftp_messages["Unzip"] = ""; +$net2ftp_messages["Zip"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Search"] = ""; +$net2ftp_messages["Go to the parent directory"] = " "; +$net2ftp_messages["Go"] = ""; +$net2ftp_messages["Transform selected entries: "] = " : "; +$net2ftp_messages["Transform selected entry: "] = " : "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = " "; +$net2ftp_messages["Upload new files in directory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = " i Java "; +$net2ftp_messages["Upload files using a Flash applet"] = " , Flash "; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = " ( PHP -i)"; +$net2ftp_messages["Go to the advanced functions"] = " . "; +$net2ftp_messages["Copy the selected entries"] = " i "; +$net2ftp_messages["Move the selected entries"] = " i "; +$net2ftp_messages["Delete the selected entries"] = " i "; +$net2ftp_messages["Rename the selected entries"] = " "; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod ( Unix/Linux/BSD )"; +$net2ftp_messages["Download a zip file containing all selected entries"] = " zip-, i "; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = " i FTP "; +$net2ftp_messages["Zip the selected entries to save or email them"] = " email"; +$net2ftp_messages["Calculate the size of the selected entries"] = " "; +$net2ftp_messages["Find files which contain a particular word"] = " , "; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = " %1\$s "; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = " %1\$s "; +$net2ftp_messages["Ascending order"] = ""; +$net2ftp_messages["Descending order"] = ""; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["Up"] = ""; +$net2ftp_messages["Click to check or uncheck all rows"] = " "; +$net2ftp_messages["All"] = "i"; +$net2ftp_messages["Name"] = "'"; +$net2ftp_messages["Type"] = ""; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Perms"] = ""; +$net2ftp_messages["Mod Time"] = ""; +$net2ftp_messages["Actions"] = "ij"; +$net2ftp_messages["Select the directory %1\$s"] = " i %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = " symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = " %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = " %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = " symlink' %1\$s"; +$net2ftp_messages["View"] = "."; +$net2ftp_messages["Edit"] = "."; +$net2ftp_messages["Update"] = ""; +$net2ftp_messages["Open"] = "³"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = " 1\$s "; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = " %1\$s HTTP-"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(: , .)"; +$net2ftp_messages["This folder is empty"] = " "; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = ""; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Symlinks"] = ""; +$net2ftp_messages["Unrecognized FTP output"] = " FTP"; +$net2ftp_messages["Number"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Skipped"] = ""; +$net2ftp_messages["Data transferred from this IP address today"] = "' , P "; +$net2ftp_messages["Data transferred to this FTP server today"] = "' FTP "; + +// printLocationActions() +$net2ftp_messages["Language:"] = ":"; +$net2ftp_messages["Skin:"] = ":"; +$net2ftp_messages["View mode:"] = " :"; +$net2ftp_messages["Directory Tree"] = " "; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = " %1\$s ii"; +$net2ftp_messages["This file is not accessible from the web"] = " web-"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = " :"; +$net2ftp_messages["Choose"] = ""; +$net2ftp_messages["Up"] = ""; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = " i"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = " i :"; +$net2ftp_messages["The number of files which were skipped is:"] = "ʳ i, :"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod "; +$net2ftp_messages["Set all permissions"] = " "; +$net2ftp_messages["Read"] = ""; +$net2ftp_messages["Write"] = ""; +$net2ftp_messages["Execute"] = ""; +$net2ftp_messages["Owner"] = ""; +$net2ftp_messages["Group"] = ""; +$net2ftp_messages["Everyone"] = "i"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = " , \" \""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = " %1\$s: "; +$net2ftp_messages["Chmod value"] = " Chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod "; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod "; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Chmod %1\$s 000-777. ."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "i "; +$net2ftp_messages["Copy directories and files"] = " "; +$net2ftp_messages["Move directories and files"] = " "; +$net2ftp_messages["Delete directories and files"] = " "; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = " ?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "i !"; +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ."; +$net2ftp_messages["Different target FTP server:"] = " FTP-:"; +$net2ftp_messages["Username"] = "i"; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = " , FTP-."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = " FTP-, ."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = " , FTP-."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = " FTP-, ."; +$net2ftp_messages["Copy directory %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move directory %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Directory %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move file %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["File %1\$s"] = " %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Move symlink %1\$s to:"] = " %1\$s :"; +$net2ftp_messages["Symlink %1\$s"] = "ѳ %1\$s"; +$net2ftp_messages["Target directory:"] = " :"; +$net2ftp_messages["Target name:"] = "' :"; +$net2ftp_messages["Processing the entries:"] = " :"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "C 4 "; +$net2ftp_messages["Template overview"] = " "; +$net2ftp_messages["Template details"] = "i "; +$net2ftp_messages["Files are copied"] = " "; +$net2ftp_messages["Edit your pages"] = " "; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = " ."; +$net2ftp_messages["Back to the Browse screen"] = ", "; +$net2ftp_messages["Template"] = ""; +$net2ftp_messages["Copyright"] = " "; +$net2ftp_messages["Click on the image to view the details of this template"] = " "; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = " FTP-. . ?"; +$net2ftp_messages["Install template to directory: "] = " i: "; +$net2ftp_messages["Install"] = ""; +$net2ftp_messages["Size"] = ""; +$net2ftp_messages["Preview page"] = " "; +$net2ftp_messages["opens in a new window"] = " "; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = " , : "; +$net2ftp_messages["Done."] = "."; +$net2ftp_messages["Continue"] = ""; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = ""; +$net2ftp_messages["Browse the FTP server"] = " FTP "; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = " !"; +$net2ftp_messages["Edit website at %1\$s"] = " %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: \" ...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = ": %1\$s. , i. ..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = " i %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = ": i %1\$s. ..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = " i "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Please specify a filename"] = " i' "; +$net2ftp_messages["Status: This file has not yet been saved"] = ": "; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = ": %1\$s %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = ": "; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = ": "; +$net2ftp_messages["File: "] = ": "; +$net2ftp_messages["New file name: "] = " i' : "; +$net2ftp_messages["Character encoding: "] = " : "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = ": "; +$net2ftp_messages["Copy up"] = " "; +$net2ftp_messages["Copy down"] = " "; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = " i"; +$net2ftp_messages["Search again"] = " "; +$net2ftp_messages["Search results"] = " "; +$net2ftp_messages["Please enter a valid search word or phrase."] = " ."; +$net2ftp_messages["Please enter a valid filename."] = " i' ."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = " , i \"\", , 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = " , i \"\", , 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = " , i i -- \"\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = " , i i -- \"\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = " %1\$s ."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = " %1\$s :"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = " "; +$net2ftp_messages["Case sensitive search"] = "³ "; +$net2ftp_messages["Restrict the search to:"] = " :"; +$net2ftp_messages["files with a filename like"] = "i' "; +$net2ftp_messages["(wildcard character is *)"] = "( *)"; +$net2ftp_messages["files with a size"] = " "; +$net2ftp_messages["files which were last modified"] = ", "; +$net2ftp_messages["from"] = "i"; +$net2ftp_messages["to"] = ""; + +$net2ftp_messages["Directory"] = ""; +$net2ftp_messages["File"] = ""; +$net2ftp_messages["Line"] = ""; +$net2ftp_messages["Action"] = "ij"; +$net2ftp_messages["View"] = "."; +$net2ftp_messages["Edit"] = "."; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = " %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = " %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = " "; +$net2ftp_messages["Unable to open the template file"] = " i "; +$net2ftp_messages["Unable to read the template file"] = " "; +$net2ftp_messages["Unable to get the list of packages"] = " "; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = " net2ftp FTP ."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = " PHP."; +$net2ftp_messages["In order to run it, click on the link below."] = " "; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp ' FTP -."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = " i Java "; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = " , :"; +$net2ftp_messages["Navigate the FTP server"] = " FTP-"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = " , ."; +$net2ftp_messages["Upload files"] = " "; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = " 3 : , upload-and-unzp ( ) Java-."; +$net2ftp_messages["Download files"] = " "; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = " '
- zp-."; +$net2ftp_messages["Zip files"] = " "; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... ."; +$net2ftp_messages["Unzip files"] = " "; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "ϳ : .zip, .tar, .tgz .gz."; +$net2ftp_messages["Install software"] = " "; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = " ( PHP)."; +$net2ftp_messages["Copy, move and delete"] = ", "; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = " , , , ."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = " FTP-"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = " , FTP- FTP- FTP-."; +$net2ftp_messages["Rename and chmod"] = " "; +$net2ftp_messages["Chmod handles directories recursively."] = " chmod ."; +$net2ftp_messages["View code with syntax highlighting"] = " "; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP php.net."; +$net2ftp_messages["Plain text editor"] = " "; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = " . , , FTP-."; +$net2ftp_messages["HTML editors"] = "HTML "; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = " HTML WYSWYG. ."; +$net2ftp_messages["Code editor"] = " "; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = " HTML PHP ."; +$net2ftp_messages["Search for words or phrases"] = " "; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Գ , ."; +$net2ftp_messages["Calculate size"] = "ϳ "; +$net2ftp_messages["Calculate the size of directories and files."] = "ϳ ."; + +$net2ftp_messages["FTP server"] = "FTP-"; +$net2ftp_messages["Example"] = ""; +$net2ftp_messages["Port"] = ""; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "i"; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Anonymous"] = ""; +$net2ftp_messages["Passive mode"] = " "; +$net2ftp_messages["Initial directory"] = ""; +$net2ftp_messages["Language"] = ""; +$net2ftp_messages["Skin"] = ""; +$net2ftp_messages["FTP mode"] = " FTP"; +$net2ftp_messages["Automatic"] = ""; +$net2ftp_messages["Login"] = "i"; +$net2ftp_messages["Clear cookies"] = " "; +$net2ftp_messages["Admin"] = "ii"; +$net2ftp_messages["Please enter an FTP server."] = " , i FTP ."; +$net2ftp_messages["Please enter a username."] = " , i i' ."; +$net2ftp_messages["Please enter a password."] = " , i ."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = " , i i ."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = " , i i FTP %1\$s."; +$net2ftp_messages["Username"] = "i"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = " 䳿 ; , FTP %1\$s ."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = " IP ; , i i FTP %1\$s ."; +$net2ftp_messages["Password"] = ""; +$net2ftp_messages["Login"] = "i"; +$net2ftp_messages["Continue"] = ""; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "i "; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = " FTP . , ."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = ": ' \"\" FTP ."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = " , ."; +$net2ftp_messages["Close"] = ""; +$net2ftp_messages["Click here to close this window"] = " , "; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = " i "; +$net2ftp_messages["The new directories will be created in %1\$s."] = " %1\$s."; +$net2ftp_messages["New directory name:"] = " i' :"; +$net2ftp_messages["Directory %1\$s was successfully created."] = " %1\$s i ."; +$net2ftp_messages["Directory %1\$s could not be created."] = "i %1\$s ."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "i FTP "; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = " :"; +$net2ftp_messages["FTP server response:"] = "³ FTP :"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = " "; +$net2ftp_messages["Old name: "] = " i': "; +$net2ftp_messages["New name: "] = " i': "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "' . %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "' . %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s i %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = " "; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = " i %1\$s of %2\$s FTP "; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = " i %1\$s FTP "; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = " "; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = " , \" \"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = ": ."; +$net2ftp_messages["Unzip archive %1\$s to:"] = " i %1\$s to:"; +$net2ftp_messages["Target directory:"] = " :"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = " :"; +$net2ftp_messages["Files"] = ""; +$net2ftp_messages["Archives"] = "i"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = ", FTP-."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = " FTP-."; +$net2ftp_messages["Add another"] = " "; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = " ( )"; + +$net2ftp_messages["Choose a directory"] = "i "; +$net2ftp_messages["Please wait..."] = " , ..."; +$net2ftp_messages["Uploading... please wait..."] = "... ..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = " %1\$s <\/b>, ."; +$net2ftp_messages["This window will close automatically in a few seconds."] = " ."; +$net2ftp_messages["Close window now"] = " "; + +$net2ftp_messages["Upload files and archives"] = " "; +$net2ftp_messages["Upload results"] = " "; +$net2ftp_messages["Checking files:"] = "i i:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "i i FTP-:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = " i :"; +$net2ftp_messages["Upload more files and archives"] = " "; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = ":"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = " net2ftp %1\$s PHP %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = " %1\$s "; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = " FTP (ASC BNARY) , "; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = " i, i "; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = " %1\$s"; +$net2ftp_messages["View image %1\$s"] = " %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = " Macromedia ShockWave Flash %1\$s"; +$net2ftp_messages["Image"] = ""; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "ϳ Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = " 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "i Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = " zip- FTP-i :"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Email zip- :"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = ", i : IP- email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "i email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = " i' zip. i i i' ."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Email , (%1\$s) .
, i i i'_@.u"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/vi.inc.php b/ehcp/net2ftp/languages/vi.inc.php new file mode 100644 index 0000000..955f19e --- /dev/null +++ b/ehcp/net2ftp/languages/vi.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "Thư mục %1\$s không tồn tại hoặc không được lựa chọn, vì vậy thư mục %2\$s được hiển thị để thay vào."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Thư mục chủ của bạn %1\$s không tồn tại hoặc không được lựa chọn."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "Thực hiện %1\$s trong một của sổ mới"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "Xin vui lòng lựa chọn ít nhất một thư mục hoặc một tệp!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "Máy chủ FTP %1\$s không có ở trong danh sách được chấp nhận của."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "Máy chủ FTP %1\$s nằm trong danh sách các máy chủ bị cấm của."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "Cổng máy chủ FTP %1\$s có thể không sử dụng được."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "Địa chỉ IP của bạn (%1\$s) đã nằm trong danh sách bị cấm của."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Bảng net2ftp_users chứa đụng các hàng giống nhau."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "Ban chua nhap ten dung hoac mat khau."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Sai ten dung hoac mat khau. Xin vui long kiem tra va thuc hien lai."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "Không thể xác định rõ địa chỉ IP của bạn."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Bảng net2ftp_log_consumption_ipaddress chứa đụng các hàng giống nhau."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "Bảng net2ftp_log_consumption_ftpserver chứa đụng các hàng giống nhau."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "Vật hay thay đổi consumption_ipaddress_datatransfer is not numeric."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "Bảng net2ftp_log_consumption_ipaddress có thể không được cập nhật."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "Bảng net2ftp_log_consumption_ipaddress chứa đụng các mục giống nhau."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "Bảng net2ftp_log_consumption_ftpserver có thể không được cập nhật."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "Bảng net2ftp_log_consumption_ftpserver chứa đụng các mục giống nhau."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "Có lỗi xảy ra"; +$net2ftp_messages["Go back"] = "Quay lại"; +$net2ftp_messages["Go to the login page"] = "Tới trang đăng nhập"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Không thể kết nối tới máy chủ FTP %1\$s với cổng %2\$s.

Bạn có chắc chắn đây là địa chỉ của máy chủ FTP ?. Hãy liên hệ với nhà cung cấp dịch vụ của bạn hoặc quản trị của hệ thống để được giúp đỡ.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Không thể đăng nhập vào máy chủ FTP %1\$s với tên dùng %2\$s.

Bạn có chắc chắn là mình nhập đúng thông tin. Hãy liên hệ với nhà cung cấp dịch vụ của bạn hoặc quản trị của hệ thống để được giúp đỡ.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "Không thể chuyển đổi kiểu thụ động trên máy chủ FTP %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "Không thể kết nối với máy chủ FTP thứ hai (máy chủ đến) %1\$s với cổng %2\$s.

Bạn có chắc chắn đây là địa chỉ của máy chủ FTP thứ hai (máy chủ đến)? . Hãy liên hệ với nhà cung cấp dịch vụ của bạn hoặc quản trị của hệ thống để được giúp đỡ.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "Không thể đăng nhập vào máy chủ FTP thứ hai (máy chủ đến) %1\$s với tên dùng %2\$s.

Bạn có chắc chắn là tên dùng là mật khẩu đều đúng? Hãy liên hệ với nhà cung cấp dịch vụ của bạn hoặc quản trị của hệ thống để được giúp đỡ.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "Không thể chuyển đổi kiểu thụ động trên máy chủ FTP thứ hai (máy chủ đến) %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "Không thể đổi thư mục hay tên tệp %1\$s thành %2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "Không thể thực hiện câu lệnh %1\$s. Hãy chú ý là lệnh CHMOD chỉ sử dụng được trên máy chủ FTP Unix, không sử dụng được trên máy chủ FTP Windows."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "Thư mục %1\$s đã thay đổi kiểu thành công thành %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Đang trong quá trình với thư mục %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "Tệp %1\$s đã thay đổi kiểu thành công thành %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tất cả các thư mục và tệp đã lựa chọn dang trong quá trình thực hiện."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "Không thể xoá thư mục %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "Không thể xoá tệp %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "Không thể tạo thư mục %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "Không thể tạo tệp tạm thời"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "Không thể tải tệp %1\$s từ máy chủ FTP và lưu nó lại như tệp tạm thời %2\$s.
Hãy kiểm tra sự cho phép của thư mục %3\$s.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Không thể mở tệp tạm thời. Hãy kiểm tra sự cho phép của thư mục %1\$s."; +$net2ftp_messages["Unable to read the temporary file"] = "Không thể đọc tệp tạm thời"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Không thể đóng điều khiển của tệp tạm thời"; +$net2ftp_messages["Unable to delete the temporary file"] = "Không thể xóa tệp tạm thời"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "Không thể tạo tệp tạm thời. Hãy kiểm tra sự cho phép của thư mục %1\$s."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "Không thể mở tệp tạm thời. Hãy kiểm tra sự cho phép của thư mục %1\$s."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "Không thể ghi lên tệp tạm thời %1\$s.
Hãy kiểm tra sự cho phép của thư mục %2\$s."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "Không thể đóng điều khiển của tệp tạm thời"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "Không thể đặt tệp %1\$s lên máy chủ FTP.
Bạn có thể không được phép ghi lên thư mục này."; +$net2ftp_messages["Unable to delete the temporary file"] = "Không thể xóa tệp tạm thời"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "Đang thực hiện quá trình với thư mục %1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "Thư mục đến %1\$s giống như hoặc là một thư mục con của thư mục nguồn %2\$s. Vì vậy, thư mục này sẽ bị bỏ qua"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "Không thể tạo thư mục con %1\$s. Nó có thể đã tồn tại. Tiếp tục với quá trình sao chép hoặc di chuyển..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Đã tạo thư mục con đến %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "Không thể xóa thư mục con %1\$s - nó có thể đã bị làm rỗng"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Đã xóa thư mục con %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "Đã xóa thư mục con %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "Quá trình của thư mục %1\$s đã hoàn thành"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "Đích tới của tệp %1\$s giống như tệp nguồn. Vì vậy, tệp này sẽ bị bỏ qua"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "Không thể sao chép tệp %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Đã sao chép tệp %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "Đã di chuyển tệp %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "Không thể xoá tệp %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "Đã xóa tệp %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "Tất cả các thư mục và tệp đã lựa chọn dang trong quá trình thực hiện."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "Không thể sao chép tệp xa %1\$s tới tệp nội vùng, sử dụng kiểu FTP %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "Không thể xóa tệp %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "Tới hạn hàng ngày: tệp %1\$s sẽ không được chuyển"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "Không thể sao chép tệp nội vùng tới tệp xa %1\$s, sử dụng kiểu FTP %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "Không thể xóa tệp nội vùng"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "Không thể xóa tệp tạm thời"; +$net2ftp_messages["Unable to send the file to the browser"] = "Không thể gửi tệp tới trình duyệt"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "Không thể tạo tệp tạm thời"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "Tệp zip đã được lưu trên máy chủ FTP tại %1\$s"; +$net2ftp_messages["Requested files"] = "Những tệp đã yêu cầu"; + +$net2ftp_messages["Dear,"] = "Xin chào,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Một ai đó đã gửi cho bạn những tệp dạng nén (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "Nếu bạn không biết cái này hoặc bạn không tin cậy vào nhân vật đã gửi nó vui lòng xóa bức thư này."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Hãy chú ý là nếu bạn không giải nén tệp lưu trữ thì những tệp trong đó sẽ không làm hại máy tính của bạn."; +$net2ftp_messages["Information about the sender: "] = "Thông tin về người gửi: "; +$net2ftp_messages["IP address: "] = "Địa chỉ IP: "; +$net2ftp_messages["Time of sending: "] = "Thời gian gửi: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Được gửi bằng đường được cài đặt trên máy chủ: "; +$net2ftp_messages["Webmaster's email: "] = "Địa chỉ email của trưởng web: "; +$net2ftp_messages["Message of the sender: "] = "Tin nhắn của người gửi: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "Bức thư này được gửi tự động từ http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "Tệp nén đã được gửi tới %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "Tệp %1\$s quá lớn, nó sẽ không thể đưa lên được."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "Không thể tạo ra một tệp tạm thời."; +$net2ftp_messages["File %1\$s could not be moved"] = "Tệp %1\$s có thể không được di chuyển"; +$net2ftp_messages["File %1\$s is OK"] = "Đã %1\$s đã xong"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "Không thể di chuyển tệp đã đưa lên tới thư mục tạm thời.

Quản trị của trang web này đã chmod 777 thư mục /temp trên."; +$net2ftp_messages["You did not provide any file to upload."] = "Bạn không cung cấp bất kỳ tệp gì để đưa lên."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "Tệp %1\$s có thể không được chuyển tới máy chủ FTP"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "Tệp %1\$s đã được chuyển tới máy chủ FTP, sử dụng kiểu FTP %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "Đang chuyển các tệp tới máy chủ FTP"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "Đang mở lưu trữ nr %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "Lưu trữ %1\$s không thể giải nén bởi vì loại tệp này không được chấp nhận. Chỉ có những lưu trữ dạng zip, tar, tgz và gz được hỗ trợ tại thời điểm này."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "Không thể thực hiện câu lệnh của site %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Công việc của bạn đã dừng lại"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "Công việc mà bạn muốn thực hiện với net2ftp tiêu tốn nhiều thời gian hơn thời gian cho phép là %1\$s giây, bởi vậy công việc bị dừng lại."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "Thời gian tối đa bảo đảm tuyệt đối cho việc sử dụng máy chủ web tới tất cả mọi ngưới."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Hãy thử chia công việc của bạn thành nhiều công viêc nhỏ hơn: giới hạn những lựa chọn của các tệp, và bỏ đi những tệp lớn."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "Nếu bạn cần sử dụng trong một thời gian dài, hãy cài đặt nó trên máy chủ của bạn."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "Bạn đã không cung cấp bất kỳ văn bản nào để gửi bằng email!"; +$net2ftp_messages["You did not supply a From address."] = "Bạn đã không cung cấp địa chỉ đi."; +$net2ftp_messages["You did not supply a To address."] = "Bạn đã không cung cấp địa chỉ tới."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "Có lỗi xảy ra khi gửi email tới %1\$s đã không thể gửi."; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Không thể thực hiện SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "Xin vui lòng điền tên sử dụng và mật khẩu cho máy chủ FTP "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Bạn đã không nhập đầy đủ thông tin đăng nhập của bạn vào cửa sổ mới.
Hãy hấp chuột vào đường dẫn \"Đi tới trang đăng nhập\"."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "Đường dẫn tới trang quản trị đã bị khóa, bởi vì không có mật khẩu nào được lập trong tệp settings.inc.php. Xin vui lòng nhập mật khẩu vào tệp này và tải lại trang này."; +$net2ftp_messages["Please enter your Admin username and password"] = "Xin vui lòng nhập vào tên sử dụng và mật khẩu của quản trị"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "Bạn đã không nhập đầy đủ thông tin đăng nhập của bạn vào cửa sổ mới.
Hãy hấp chuột vào đường dẫn \"Đi tới trang đăng nhập\"."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "Sai tên sử dụng hoặc mật khẩu của quản trị. Hãy kiểm tra lại nó trong tệp settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "Xanh dương"; +$net2ftp_messages["Grey"] = "Xám"; +$net2ftp_messages["Black"] = "Đen"; +$net2ftp_messages["Yellow"] = "Vàng"; +$net2ftp_messages["Pastel"] = "Vàng nhạt"; + +// getMime() +$net2ftp_messages["Directory"] = "Thư mục"; +$net2ftp_messages["Symlink"] = "Đường dẫn tượng trưng"; +$net2ftp_messages["ASP script"] = "Ngôn ngữ ASP"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "Tệp HTML"; +$net2ftp_messages["Java source file"] = "Tệp mã nguồn Java"; +$net2ftp_messages["JavaScript file"] = "Tệp mã nguồn JavaScript"; +$net2ftp_messages["PHP Source"] = "Mã nguồn PHP"; +$net2ftp_messages["PHP script"] = "Ngôn ngữ PHP"; +$net2ftp_messages["Text file"] = "Tệp văn bản"; +$net2ftp_messages["Bitmap file"] = "Tệp Bitmap"; +$net2ftp_messages["GIF file"] = "Tệp GIF"; +$net2ftp_messages["JPEG file"] = "Tệp JPEG"; +$net2ftp_messages["PNG file"] = "Tệp PNG"; +$net2ftp_messages["TIF file"] = "Tệp TIF"; +$net2ftp_messages["GIMP file"] = "Tệp GIMP"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Ngôn ngữ Shell"; +$net2ftp_messages["MS Office - Word document"] = "Tài liệu MS Office - Word"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "Cơ sở dữ liệu MS Office - Access"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "Tệp MS Office - Project"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "Tài liệu OpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = " Giao diệnOpenOffice - Writer 6.0"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "Giao diện OpenOffice - Calc 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "Tài liệu OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "Giao diện OpenOffice - Draw 6.0"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "Giao diện OpenOffice - Impress 6.0"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "Tài liệu OpenOffice - Writer 6.0 global"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "Tài liệu OpenOffice - Math 6.0"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "Tài liệu StarOffice - StarWriter 5.x"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "Tài liệu StarOffice - StarWriter 5.x global"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "Tài liệu StarOffice - StarDraw 5.x"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "Tài liệu StarOffice - StarMath 5.x"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "Tài liệu StarOffice - StarChart 5.x"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Tài liệu Adobe Acrobat"; +$net2ftp_messages["ARC archive"] = "Lưu trữ dạng ARC"; +$net2ftp_messages["ARJ archive"] = "Lưu trữ dạng ARJ"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "Lưu trữ dạng GZ"; +$net2ftp_messages["TAR archive"] = "Lưu trữ dạng TAR"; +$net2ftp_messages["Zip archive"] = "Lưu trữ dạng Zip"; +$net2ftp_messages["MOV movie file"] = "Tệp MOV movie"; +$net2ftp_messages["MPEG movie file"] = "Tệp MPEG movie"; +$net2ftp_messages["Real movie file"] = "Tệp Real movie"; +$net2ftp_messages["Quicktime movie file"] = "Tệp Quicktime movie"; +$net2ftp_messages["Shockwave flash file"] = "Tệp Shockwave Flash"; +$net2ftp_messages["Shockwave file"] = "Tệp Shockwave"; +$net2ftp_messages["WAV sound file"] = "Tệp âm thanh WAV"; +$net2ftp_messages["Font file"] = "Tệp Font"; +$net2ftp_messages["%1\$s File"] = "Tệp %1\$s"; +$net2ftp_messages["File"] = "Tệp"; + +// getAction() +$net2ftp_messages["Back"] = "Quay lại"; +$net2ftp_messages["Submit"] = "Thực hiện"; +$net2ftp_messages["Refresh"] = "Làm tươi"; +$net2ftp_messages["Details"] = "Chi tiết"; +$net2ftp_messages["Icons"] = "Biểu tượng"; +$net2ftp_messages["List"] = "Danh sách"; +$net2ftp_messages["Logout"] = "Đăng xuất"; +$net2ftp_messages["Help"] = "Trợ giúp"; +$net2ftp_messages["Bookmark"] = "Mục ưa thích"; +$net2ftp_messages["Save"] = "Lưu"; +$net2ftp_messages["Default"] = "Mặc định"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Hướng dẫn"; +$net2ftp_messages["Forums"] = "Diễn đàn"; +$net2ftp_messages["License"] = "Đăng ký"; +$net2ftp_messages["Powered by"] = "Mã nguồn được cung cấp bởi"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "Chức năng quản trị"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "Thông tin phiên bản"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "Phiên bản này của đã được cập nhật."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "Phiên bản mới nhất đã không thể được cập nhật từ máy chủ net2ftp.com. Hãy kiểm tra cấu hình bảo mật của trình duyệt của bạn, cái mà có thể cản trở việc cập nhật phiên bản mới nhất từ máy chủ net2ftp.com."; +$net2ftp_messages["Logging"] = "Đang đăng nhập"; +$net2ftp_messages["Date from:"] = "Từ ngày:"; +$net2ftp_messages["to:"] = "tới:"; +$net2ftp_messages["Empty logs"] = "Làm rỗng nhật ký"; +$net2ftp_messages["View logs"] = "Xem nhật ký"; +$net2ftp_messages["Go"] = "Đi"; +$net2ftp_messages["Setup MySQL tables"] = "Cài đặt các bảng MySQL"; +$net2ftp_messages["Create the MySQL database tables"] = "Tạo các bảng MySQL"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "Chức năng quản trị"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "Không thể két nối với máy chủ %1\$s. Hãy kiểm tra lại cấu hình cơ sở dữ liệu mà bạn đã nhập vào."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Không thể lựa chọn cơ sở dữ liệu %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "Câu lệnh SQL nr %1\$s đã không thể thực hiện được."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "Câu lệnh SQL nr %1\$s đã thực hiện thành công."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Xin vui lòng nhập cấu hình của MySQL:"; +$net2ftp_messages["MySQL username"] = "Tên dùng"; +$net2ftp_messages["MySQL password"] = "Mật khẩu"; +$net2ftp_messages["MySQL database"] = "Tên cơ sở dữ liệu"; +$net2ftp_messages["MySQL server"] = "Máy chủ MySQL"; +$net2ftp_messages["This SQL query is going to be executed:"] = "Lệnh SQL sẽ được thực hiện:"; +$net2ftp_messages["Execute"] = "Thực hiện"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "Cấu hình sử dụng:"; +$net2ftp_messages["MySQL password length"] = "Độ dài của mật khẩu MySQL"; +$net2ftp_messages["Results:"] = "Kết quả:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "Chức năng quản trị"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Không thể thực hiện lệnh SQL %1\$s."; +$net2ftp_messages["No data"] = "Không có dữ liệu"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "Chức năng quản trị"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "Bảng %1\$s đã làm rỗng thành công."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "Bảng %1\$s đã không thể làm rỗng."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "Bảng %1\$s đã tối ưu hóa thành công."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "Bảng %1\$s đã không thể tối ưu hóa."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "Chức năng quản trị"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "Đi"; +$net2ftp_messages["Disabled"] = "Ngừng hiệu lực"; +$net2ftp_messages["Advanced FTP functions"] = "Những chức năng FTP nâng cao"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Tự động gửi lệnh FTP tới máy chủ FTP"; +$net2ftp_messages["This function is available on PHP 5 only"] = "Chức năng này chỉ có hiệu lực với PHP 5"; +$net2ftp_messages["Troubleshooting functions"] = "Những chức năng chỉnh đón"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "Chỉnh đốn net2ftp trên máy chủ web này"; +$net2ftp_messages["Troubleshoot an FTP server"] = "Chỉnh đốn lại một máy chủ FTP"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Kiểm tra danh sách quy luật phân tích của net2ftp"; +$net2ftp_messages["Translation functions"] = "Chức năng dịch thuật"; +$net2ftp_messages["Introduction to the translation functions"] = "Chỉ dẫn sử dụng chức năng dịch thuật"; +$net2ftp_messages["Extract messages to translate from code files"] = "Thông điệp thu được từ việc dịch thuật những tệp mã nguồn"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "Check if there are new or obsolete messages"; + +$net2ftp_messages["Beta functions"] = "Những chức năng thử nghiệm"; +$net2ftp_messages["Send a site command to the FTP server"] = "Gủi một câu lệnh tới máy chủ FTP"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: mật khẩu bảo vệ một thư mục, tạo trang báo lỗi"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: thực hiên một câu lệnh SQL"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "Chức năng lệnh này không có hiệu lực trên máy chủ web này."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Chức năng Apache không có hiệu lực trên máy chủ web này."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "Chức năng MySQL không có hiệu lực trên máy chủ web này."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "Đã không thể chờ đợi. Đang thoát."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "Chỉnh đốn lại một máy chủ FTP"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "Nhữg cấu hình kết nối:"; +$net2ftp_messages["FTP server"] = "Máy chủ FTP"; +$net2ftp_messages["FTP server port"] = "Cổng"; +$net2ftp_messages["Username"] = "Tên đùng"; +$net2ftp_messages["Password"] = "Mật khẩu"; +$net2ftp_messages["Password length"] = "Độ dài của mật khẩu"; +$net2ftp_messages["Passive mode"] = "Kiểu thụ động"; +$net2ftp_messages["Directory"] = "Thư mục"; +$net2ftp_messages["Printing the result"] = "Đang in kết quả"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "Đang kết nối với máy chủ FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Đang đăng nhập vào máy chủ FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Cấu hình kiểu thụ động:"; +$net2ftp_messages["Getting the FTP server system type: "] = "Đang lập kiểu hệ thống của máy chủ FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Đang chuyển tới thư mục %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Thư mục từ máy chủ FTP là: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Đang lập danh sách của các tệp và các thư mục: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Đang thử lập danh sách của các tệp và các thư mục lần thứ hai: "; +$net2ftp_messages["Closing the connection: "] = "Đang đóng kết nối: "; +$net2ftp_messages["Raw list of directories and files:"] = "Sắp xếp danh sách các thư mục và các tệp: "; +$net2ftp_messages["Parsed list of directories and files:"] = "Danh sách các thư mục và các tệp đã phân tích: "; + +$net2ftp_messages["OK"] = "Thành công"; +$net2ftp_messages["not OK"] = "Không thành công"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Kiểm tra danh sách quy luật phân tích của net2ftp"; +$net2ftp_messages["Sample input"] = "Dữ liệu vào đơn giản"; +$net2ftp_messages["Parsed output"] = "Dữ liệu phân tích ra"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "Chỉnh đốn lại sự cài đặt net2ftp của bạn"; +$net2ftp_messages["Printing the result"] = "Đang in kết quả"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "Đánh dấu nếu module FTP của PHP đã được cài đặt: "; +$net2ftp_messages["yes"] = "có"; +$net2ftp_messages["no - please install it!"] = "Không - Xin vui lòng cài đặt nó!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "Kiểm tra sự cho phép của thư mục trên máy chủ: một tệp nhỏ sẽ được ghi thử để kiểm tra rồi sau đó sẽ bị xóa."; +$net2ftp_messages["Creating filename: "] = "Đang tạo tệp có tên: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "Thành công. Tên tệp là: %1\$s"; +$net2ftp_messages["not OK"] = "Không thành công"; +$net2ftp_messages["OK"] = "Thành công"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "không thành công. Hãy kiểm tra sự cho phép của thư mục %1\$s"; +$net2ftp_messages["Opening the file in write mode: "] = "Đang mở tệp trong chế đọ ghi: "; +$net2ftp_messages["Writing some text to the file: "] = "Đang ghi một vài từ lên tệp: "; +$net2ftp_messages["Closing the file: "] = "Đang đóng tệp: "; +$net2ftp_messages["Deleting the file: "] = "Đang xóa tệp: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "Đang kết nối với máy chủ FTP: "; +$net2ftp_messages["Logging into the FTP server: "] = "Đang đăng nhập vào máy chủ FTP: "; +$net2ftp_messages["Setting the passive mode: "] = "Cấu hình kiểu thụ động:"; +$net2ftp_messages["Getting the FTP server system type: "] = "Đang lập kiểu hệ thống của máy chủ FTP: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "Đang chuyển tới thư mục %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "Thư mục từ máy chủ FTP là: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "Đang lập danh sách của các tệp và các thư mục: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "Đang thử lập danh sách của các tệp và các thư mục lần thứ hai: "; +$net2ftp_messages["Closing the connection: "] = "Đang đóng kết nối: "; +$net2ftp_messages["Raw list of directories and files:"] = "Sắp xếp danh sách các thư mục và các tệp: "; +$net2ftp_messages["Parsed list of directories and files:"] = "Danh sách các thư mục và các tệp đã phân tích: "; +$net2ftp_messages["OK"] = "Thành công"; +$net2ftp_messages["not OK"] = "Không thành công"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "Chú ý: khi bạn sử dụng chức năng này, một cửa sổ mới sẽ hiện lên và yêu cầu bạn nhập tên sử dụng và mật khẩu."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "Chọn một thư mục"; +$net2ftp_messages["Please wait..."] = "Xin vui lòng chờ..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "Những thư mục với tên chứa đựng \' có thể không hiển thị đúng. Chúng có thể bị xóa. Xin vui lòng quay lại và lựa chon thư mục con khác."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Tới hạn: bạn sẽ không thể không truyền tải được dữ liệu"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "Trong nội quy, để bảo đảm sự công bằng tới tất cả mọi người, băng thông truyền tải và thời gian sử dụng sẽ giới hạn đối với 1 người dùng, và một ngày. Một khi tới giới hạn, bạn vẫn còn trình duyệt FTP, nhưng không thể sử dụng nó."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "Nếu bạn cần sử dụng nhiều lần và thường xuyên, hãy cài đặt nó lên máy chủ của bạn."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "Thư mục mới"; +$net2ftp_messages["New file"] = "Tệp mới"; +$net2ftp_messages["HTML templates"] = "Giao diện HTML"; +$net2ftp_messages["Upload"] = "Đưa lên"; +$net2ftp_messages["Java Upload"] = "Đưa lên bằng Java"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "Nâng cao"; +$net2ftp_messages["Copy"] = "Sao chép"; +$net2ftp_messages["Move"] = "Di chuyển"; +$net2ftp_messages["Delete"] = "Xóa"; +$net2ftp_messages["Rename"] = "Đổi tên"; +$net2ftp_messages["Chmod"] = "Thay đổi kiểu"; +$net2ftp_messages["Download"] = "Tải phần mềm"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Nén"; +$net2ftp_messages["Size"] = "Kích thước"; +$net2ftp_messages["Search"] = "Tìm kiếm"; +$net2ftp_messages["Go to the parent directory"] = "Tới thư mục chủ"; +$net2ftp_messages["Go"] = "Đi"; +$net2ftp_messages["Transform selected entries: "] = "Thay đổi các kết quả đã lựa chọn: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "Tạo một thư mục con trong thư mục %1\$s"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "Tạo một tệp mới trong thư mục %1\$s"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Tạo một trang web mới dễ dàng với các giao diện HTML đã có sẵn"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "Đưa lên những tệp mới vào thư mục %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Đưa lên các thư mục và các tệp sử dụng Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "Đi tới những chức năng nâng cao"; +$net2ftp_messages["Copy the selected entries"] = "Sao chép kết quả đã lựa chọn"; +$net2ftp_messages["Move the selected entries"] = "Di chuyển kết quả đã lựa chọn"; +$net2ftp_messages["Delete the selected entries"] = "Xóa kết quả đã lựa chọn"; +$net2ftp_messages["Rename the selected entries"] = "Đổi tên kết quả đã lựa chọn"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "Chmod các kết quả đã lựa chọn (chỉ làm viêc trên máy chủ Unix/Linux )"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "Tải xuống một tệp nén chứa tất cả các kết quả đã lựa chọn"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Nén kết quả đã lựa chọn rồi sau đó lưu lại hoặc gửi qua email"; +$net2ftp_messages["Calculate the size of the selected entries"] = "Tính toán kích thước của các kết quả đã lựa chọn"; +$net2ftp_messages["Find files which contain a particular word"] = "Tìm kiếm các tệp có chứa đựng khóa"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "Hãy nhấp chuột để sắp xếp %1\$s theo sự giảm dần của thứ tự"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "Hãy nhấp chuột để sắp xếp %1\$s theo sự tăng dần của thứ tự"; +$net2ftp_messages["Ascending order"] = "Tăng lên theo thứ tự"; +$net2ftp_messages["Descending order"] = "Giảm dần theo thứ tự"; +$net2ftp_messages["Upload files"] = "Đưa tệp lên máy chủ"; +$net2ftp_messages["Up"] = "Lên trên"; +$net2ftp_messages["Click to check or uncheck all rows"] = "Hãy nhấp chuột để đánh dấu hoặc không đánh dấu các hàng ngang"; +$net2ftp_messages["All"] = "Tất cả"; +$net2ftp_messages["Name"] = "Tên"; +$net2ftp_messages["Type"] = "Kiểu"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "Người tạo nên"; +$net2ftp_messages["Group"] = "Nhóm"; +$net2ftp_messages["Perms"] = "Vị trí"; +$net2ftp_messages["Mod Time"] = "Kiểu thời gian"; +$net2ftp_messages["Actions"] = "Các hành động"; +$net2ftp_messages["Select the directory %1\$s"] = "Lựa chọn thư mục %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Lựa chọn tệp %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Lựa chọn lối tắt %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Đi tới thư mục %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "Tải tệp %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "Xem"; +$net2ftp_messages["Edit"] = "Sửa đổi"; +$net2ftp_messages["Update"] = "Cập nhật"; +$net2ftp_messages["Open"] = "Mở"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Xem mã nguồn của tệp %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Sửa đổi mã nguồn của tệp %1\$s"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "Đưa lên một phiên bản mới của tệp %1\$s và hòa vào những thay đổi"; +$net2ftp_messages["View image %1\$s"] = "Xem ảnh %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "Xem tệp %1\$s từ máy chủ web của bạn"; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(Chý ý: đường dẫn này có thể không làm việc nếu như bạn không có một tên miền.)"; +$net2ftp_messages["This folder is empty"] = "Thư mục này trống rỗng"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "Các thư mục"; +$net2ftp_messages["Files"] = "Các tệp"; +$net2ftp_messages["Symlinks"] = "Các lối tắt"; +$net2ftp_messages["Unrecognized FTP output"] = "Không thể thấy rõ đường ra FTP"; +$net2ftp_messages["Number"] = "Số"; +$net2ftp_messages["Size"] = "Kích thước"; +$net2ftp_messages["Skipped"] = "Đã bỏ qua"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "Ngôn ngữ:"; +$net2ftp_messages["Skin:"] = "Giao diện:"; +$net2ftp_messages["View mode:"] = "Xem kiểu:"; +$net2ftp_messages["Directory Tree"] = "Cây thư mục"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "Thực hiện %1\$s trong một của sổ mới"; +$net2ftp_messages["This file is not accessible from the web"] = "Tệp này không có sẵn từ web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "Nháy chuột để tới một thư mục con:"; +$net2ftp_messages["Choose"] = "Lựa chọn"; +$net2ftp_messages["Up"] = "Lên trên"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "Kích thước của các thư mục và tệp đã lựa chọn"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "Kích thước tổng cộng của các thư mục và tệp đã lựa chọn là:"; +$net2ftp_messages["The number of files which were skipped is:"] = "Số tệp bị bỏ qua là:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "Chmod thư mục và tệp"; +$net2ftp_messages["Set all permissions"] = "Lập tất cả sự cho phép"; +$net2ftp_messages["Read"] = "Đọc"; +$net2ftp_messages["Write"] = "Ghi"; +$net2ftp_messages["Execute"] = "Thực hiện"; +$net2ftp_messages["Owner"] = "Người tạo nên"; +$net2ftp_messages["Group"] = "Nhóm"; +$net2ftp_messages["Everyone"] = "Mọi người"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "Để lập tất cả sự cho phép nhanh chóng, chọn tất cả sự cho phép ở trên và ấn nút \"Lập tất cả sự cho phép\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "Đã thay đổi sự cho phép của thư mục %1\$s thành: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "Đã thay đổi sự cho phép của tệp %1\$s thành: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "Đã thay đổi sự cho phép của lố tắt %1\$s thành: "; +$net2ftp_messages["Chmod value"] = "Kết quả Chmod"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "Chmod tất cả các thư mục con của thư mục này"; +$net2ftp_messages["Chmod also the files within this directory"] = "Chmod tất cả các tệp thuộc thư mục này"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "Lệnh Chmod nr %1\$s đã ra khỏi phạm vi 000-777. Xin vui lòng làm lại."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "Chọn một thư mục"; +$net2ftp_messages["Copy directories and files"] = "Sao chép các thư mục và các tệp"; +$net2ftp_messages["Move directories and files"] = "Di chuyển các thư mục và các tệp"; +$net2ftp_messages["Delete directories and files"] = "Xóa các thư mục và các tệp"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "Bạn có chắc chắn muốn xoá các thư mục và các tệp này?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "Tất cả thư mục và tệp con của thư mục đã lựa chọn cũng sẽ bị xóa!"; +$net2ftp_messages["Set all targetdirectories"] = "Lập tất cả các thư mục tới"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Để lập một thư mục tới thông thường, hãy nhập thư mục tới vào bên giới và nhấp vào nút\"Lập tất cả các thư mục tới\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Chú ý: đích đến phải tồn tại trước khi bất kỳ thứ gì có thể được sao chép tới nó."; +$net2ftp_messages["Different target FTP server:"] = "Đến một máy chủ FTP khác:"; +$net2ftp_messages["Username"] = "Tên đùng"; +$net2ftp_messages["Password"] = "Mật khẩu"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "Để trống nếubạn muốn sao chép các tệp tới cùng một tài khoản trên máy chủ FTP."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "Nếu bạn muốn sao chép các tệp tới một máy chủ FTP khác, hãy nhập vào dữ liệu đăng nhập."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "Để trống nếu bạn muốn di chuyển các tệp tới cùng một tài khoản trên máy chủ FTP."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "Nếu bạn muốn di chuyển các tệp tới một máy chủ FTP khác, hãy nhập vào dữ liệu đăng nhập."; +$net2ftp_messages["Copy directory %1\$s to:"] = "Sao chép thư mục %1\$s tới:"; +$net2ftp_messages["Move directory %1\$s to:"] = "Di chuyển thư mục %1\$s tới:"; +$net2ftp_messages["Directory %1\$s"] = "Thư mục %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "Sao chép tệp %1\$s tới:"; +$net2ftp_messages["Move file %1\$s to:"] = "Di chuyển tệp %1\$s tới:"; +$net2ftp_messages["File %1\$s"] = "Tệp %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "Sao chép lối tắt %1\$s tới:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "Di chuyển lối tắt %1\$s tới:"; +$net2ftp_messages["Symlink %1\$s"] = "Lối tắt %1\$s"; +$net2ftp_messages["Target directory:"] = "Thư mục đến:"; +$net2ftp_messages["Target name:"] = "Tên đến:"; +$net2ftp_messages["Processing the entries:"] = "Đang trong quá trình:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Tạo một trang web đễ dàng với 4 bước"; +$net2ftp_messages["Template overview"] = "Tổng quan giao diện"; +$net2ftp_messages["Template details"] = "Chi tiết giao diện"; +$net2ftp_messages["Files are copied"] = "Các tệp đã sao chép"; +$net2ftp_messages["Edit your pages"] = "Sửa đổi các trang của bạn"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Nhấp chuột vào hình ảnh để xem chi tiết của giao diện."; +$net2ftp_messages["Back to the Browse screen"] = "Quay lại trang lựa chọn"; +$net2ftp_messages["Template"] = "Giao diện"; +$net2ftp_messages["Copyright"] = "Bản quyền"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Nhấp chuột vào hình ảnh để xem chi tiết của giao diện này"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "Những tệp giao diện này sẽ được sao chép tới máy chủ FTP. Những tệp đã tồn tại như tệp này sẽ bị ghi đè lên. Bạn có muốn tiếp tục?"; +$net2ftp_messages["Install template to directory: "] = "Cài đặt tới thư mục: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "Kích thước"; +$net2ftp_messages["Preview page"] = "Xem trang"; +$net2ftp_messages["opens in a new window"] = "mở ra một cửa sổ mới"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Xin vui lòng chờ đợi trong khi tệp giao diện đang được chuyển tới máy chủ của bạn: "; +$net2ftp_messages["Done."] = "Đã thực hiện."; +$net2ftp_messages["Continue"] = "Tiếp tục"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Sửa đổi trang"; +$net2ftp_messages["Browse the FTP server"] = "Duyệt máy chủ FTP"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Thêm đường dẫn này vào mục ưa thích để có thể trở lại trang này sau!"; +$net2ftp_messages["Edit website at %1\$s"] = "Sửa đổi trang web tại %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: nhấp chuột phải lên đường dẫn này và chọn \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: nhấp chuột phải lên đường dẫn này và chọn \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "Thông báo: không thể tạo thư mục con %1\$s. Nó có thể đã tồn tại. Đang làm tiếp..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Đã tạo thư mục con đến %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "Thông báo: không thể sao chép tệp %1\$s. Đang làm tiếp..."; +$net2ftp_messages["Copied file %1\$s"] = "Đã sao chép tệp %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "Không thể mở tệp giao diện"; +$net2ftp_messages["Unable to read the template file"] = "Không thể đọc tệp giao diện"; +$net2ftp_messages["Please specify a filename"] = "Xin vui lòng xác định một tên tệp"; +$net2ftp_messages["Status: This file has not yet been saved"] = "Thông báo: tệp không được lưu lại"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "Thông báo: đã lưu %1\$s sử dụng kiểu %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "Thông báo: Tệp này đã không thể lưu lại được"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "Thư mục: "; +$net2ftp_messages["File: "] = "Tệp: "; +$net2ftp_messages["New file name: "] = "Tên tệp mới: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "Note: changing the textarea type will save the changes"; +$net2ftp_messages["Copy up"] = "Sao chép lên"; +$net2ftp_messages["Copy down"] = "Sao chép xuống"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "Tìm kiếm các thư mục và tệp"; +$net2ftp_messages["Search again"] = "Tìm kiếm lại"; +$net2ftp_messages["Search results"] = "Kết quả tìm kiếm"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "Xin vui lòng điền đúng từ khoá hay câu tìm kiếm."; +$net2ftp_messages["Please enter a valid filename."] = "Xin vui lòng điền đúng tên tệp."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "Xin vui lòng điền đúng kích thước tệp vào ô trống \"từ\" , ví dụ: 0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "Xin vui lòng điền đúng kích thước tệp vào ô trống \"đến\", ví dụ: 500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "Xin vui lòng điền đúng định dạng năm-tháng-ngày vào ô trống \"từ\"."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "Xin vui lòng điền đúng định dạng năm-tháng-ngày vào ô trống \"đến\"."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "Từ khoá %1\$s không tìm thấy trong các tệp hay thư mục đã lựa chọn."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "Từ khoá %1\$s đã được tìm thấy trong các tệp:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "Tìm kiếm một từ hoặc một câu"; +$net2ftp_messages["Case sensitive search"] = "Case sensitive search"; +$net2ftp_messages["Restrict the search to:"] = "Tìm kiếm lại một các kỹ lưỡng tới:"; +$net2ftp_messages["files with a filename like"] = "những tệp có tên giống nhau"; +$net2ftp_messages["(wildcard character is *)"] = "(ký tự liên kết là *)"; +$net2ftp_messages["files with a size"] = "những tệp có cùng kích thước"; +$net2ftp_messages["files which were last modified"] = "Những tệp được sửa đổi sau cùng"; +$net2ftp_messages["from"] = "từ"; +$net2ftp_messages["to"] = "đến"; + +$net2ftp_messages["Directory"] = "Thư mục"; +$net2ftp_messages["File"] = "Tệp"; +$net2ftp_messages["Line"] = "Đường thẳng"; +$net2ftp_messages["Action"] = "Hành động"; +$net2ftp_messages["View"] = "Xem"; +$net2ftp_messages["Edit"] = "Sửa đổi"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "Xem mã nguồn của tệp %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "Sửa đổi mã nguồn của tệp %1\$s"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "Không thể mở tệp giao diện"; +$net2ftp_messages["Unable to read the template file"] = "Không thể đọc tệp giao diện"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Đưa lên các thư mục và các tệp sử dụng Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Đăng nhập!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Định hướng máy chủ FTP"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Sau khi đăng nhập bạn có thể duyệt thư mục tới thư mục và xem tất cả các thư mục con và tệp con."; +$net2ftp_messages["Upload files"] = "Đưa tệp lên máy chủ"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "Có ba cách khác nhau để đưa các tệp lên máy chủ: cách chuẩn, đưa tệp nén (.zip) lên và sau đó giải nén nó, và sử dụng Java Applet."; +$net2ftp_messages["Download files"] = "Tải tệp"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Nhấp chuột vào tên tệp để tải nhanh nó.
Chọn nhiều tệp cùng một lúc và tải xuống. Tất cả cá tệp đó sẽ đựoc gom lại vào một tệp có dạng nén."; +$net2ftp_messages["Zip files"] = "Nén tệp"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "...và lưu trên máy chủ FTP hoặc gửi tới cho một ai đó."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Sao chép, di chuyển và xoá"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Bạn có thể sao chép, di chuyển, hoặc xoá một tệp, nhiều tệp, một thư mục hay nhiều thư mục."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Sao chép, di chuyển giữa 2 máy chủ FTP"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Sao chép hoặc di chuyển tệp hoặc thư mục giữa 2 máy chủ FTP."; +$net2ftp_messages["Rename and chmod"] = "Đổi tên hoặc Chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Đổi tên hoặc Chmod tệp hoặc thư mục."; +$net2ftp_messages["View code with syntax highlighting"] = "Hiển thị mã của tệp"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "Các chứ năng PHP được liên kết tới tài liệu tại Php.net."; +$net2ftp_messages["Plain text editor"] = "Sửa đổi văn bản"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Sửa đổi văn bản ngay trên trình duyệt của bạn. Bất kỳ lúc nào bạn cũng có thể lưu lại nó trên máy chủ FTP."; +$net2ftp_messages["HTML editors"] = "Sửa đổi tệp HTML"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Sửa đổi mã nguồn"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Sửa đổi HTML và PHP với một công cụ sửa đổi hoàn chỉnh."; +$net2ftp_messages["Search for words or phrases"] = "Tìm kiếm từ hoặc câu"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Tìm theo tên tệp, kích thước tệp hoặc sự sửa đổi sau cùng."; +$net2ftp_messages["Calculate size"] = "Tính toán kích thước"; +$net2ftp_messages["Calculate the size of directories and files."] = "Tính toán kích thước của tệp hoặc thư mục."; + +$net2ftp_messages["FTP server"] = "Máy chủ FTP"; +$net2ftp_messages["Example"] = "Ví dụ"; +$net2ftp_messages["Port"] = "Cổng"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "Tên đùng"; +$net2ftp_messages["Password"] = "Mật khẩu"; +$net2ftp_messages["Anonymous"] = "Vô danh"; +$net2ftp_messages["Passive mode"] = "Kiểu thụ động"; +$net2ftp_messages["Initial directory"] = "Thư mục tới"; +$net2ftp_messages["Language"] = "Ngôn ngữ"; +$net2ftp_messages["Skin"] = "Giao diện"; +$net2ftp_messages["FTP mode"] = "Kiểu FTP"; +$net2ftp_messages["Automatic"] = "Tự động"; +$net2ftp_messages["Login"] = "Đăng nhập"; +$net2ftp_messages["Clear cookies"] = "Xóa cookies"; +$net2ftp_messages["Admin"] = "Quản trị"; +$net2ftp_messages["Please enter an FTP server."] = "Xin vui lo`nng nhap mot may chu FTP."; +$net2ftp_messages["Please enter a username."] = "Xin vui lo`nng nhap ten dung."; +$net2ftp_messages["Please enter a password."] = "Xin vui lo`nng nhap mat khau."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Xin vui lòng nhập tên dùng và mật khẩu của người quản trị"; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "Tên đùng"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "Mật khẩu"; +$net2ftp_messages["Login"] = "Đăng nhập"; +$net2ftp_messages["Continue"] = "Tiếp tục"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Trang đăng nhập"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Chú ý: một người dùng khác sử dụng chiếc máy tính này có thể ấn vào nút Back trên trình duyệt và có thể trở lại máy chủ FTP."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "Để chắc chắn bạn phải đóng trình duyệt."; +$net2ftp_messages["Close"] = "Đóng"; +$net2ftp_messages["Click here to close this window"] = "Nhấp vào đây để đóng trình duyệt"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "Tạo thư mục mới"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "Thư mục mới sẽ được tạo trong %1\$s."; +$net2ftp_messages["New directory name:"] = "Tên thư mục mới:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "Thư mục %1\$s đã đươc tạo thành công."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Thư mục %1\$s đã không thể tạo."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Tự động gửi các lệnh FTP"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "Danh sách các lệnh:"; +$net2ftp_messages["FTP server response:"] = "Máy chủ FTP trả lời:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "Đổi tên các thư mục và các tệp"; +$net2ftp_messages["Old name: "] = "Tên cũ: "; +$net2ftp_messages["New name: "] = "Tên mới: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "Tên mới có thể chứa dấu chấm. Không thể đổi tên thành %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s đã đổi tên thành công thành %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s không thể đổi tên thành %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "Lập tất cả các thư mục tới"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "Để lập một thư mục tới thông thường, hãy nhập thư mục tới vào bên giới và nhấp vào nút\"Lập tất cả các thư mục tới\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "Chú ý: đích đến phải tồn tại trước khi bất kỳ thứ gì có thể được sao chép tới nó."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "Thư mục đến:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Sử dụng tên thư mục (tự động tạo thư mục con)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "Đưa lên tới thư mục:"; +$net2ftp_messages["Files"] = "Các tệp"; +$net2ftp_messages["Archives"] = "Các lưu trữ"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "Những tệp vừa nhập vào sẽ đươc chuyển tới máy chủ FTP."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "Những lưu trữ này sẽ được giải nén, và các tệp trong đó sẽ đươc chuyển tới máy chủ FTP."; +$net2ftp_messages["Add another"] = "Thêm vào cái khác"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "Sử dụng tên thư mục (tự động tạo thư mục con)"; + +$net2ftp_messages["Choose a directory"] = "Chọn một thư mục"; +$net2ftp_messages["Please wait..."] = "Xin vui lòng chờ..."; +$net2ftp_messages["Uploading... please wait..."] = "Đang đưa lên... xin vui lòng chờ trong giây lát......"; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "Nếu thời gian đưa lên vượt quá thòi gian quy định là %1\$s giây<\/b>, bạn sẽ phải thực hiện lại với ít tệp hơn hoặc kích thước nhỏ hơn."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "Cửa sổ này sẽ tự động đóng lại trong một vài giây nữa."; +$net2ftp_messages["Close window now"] = "Đóng cửa sổ ngay bây giờ"; + +$net2ftp_messages["Upload files and archives"] = "Đưa lên các tệp và các lưu trữ"; +$net2ftp_messages["Upload results"] = "Kết quả đưa lên"; +$net2ftp_messages["Checking files:"] = "Đang kiểm tra các tệp:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "Đang chuyển các tệp tới máy chủ FTP:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "Đang giải nén các lưu trữ và chuyển tới máy chủ FTP:"; +$net2ftp_messages["Upload more files and archives"] = "Đưa lên thêm các tệp và lưu trữ"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "Những giới hạn:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "Kích thước lớn nhất của một tệp giới hạn bởi net2ftp tới %1\$s và bởi PHP từ %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "Thời gian thực hiên lớn nhất là %1\$s giây"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "Kiểu truyển tải của FTP (ASCII hay BINARY) sẽ được xác định một cách tự động"; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "Nếu đã tồn tại một tệp tương tự trên máy chủ FTP, nó sẽ bị ghi đè lên"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "Xem tệp %1\$s"; +$net2ftp_messages["View image %1\$s"] = "Xem ảnh %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "Xem tệp Macromedia ShockWave Flash movie %1\$s"; +$net2ftp_messages["Image"] = "Ảnh"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting cung cấp bởi Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "Để lưu ảnh, nhấp chuột phải lên nó và chọn 'Save picture as...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Kết quả Zip"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "Lưu tệp nén trên máy chủ FTP tại:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "Gửi tệp nén này tới:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "Hãy chú ý là email không nặc danh: địa chỉ IP của bạn cũng như thời gian gửi sẽ được thêm vào email."; +$net2ftp_messages["Some additional comments to add in the email:"] = "Thêm tin nhắn vào email:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "Bạn đã không nhập tên vào cho tệp nén. Hãy trở lại và điền vào một cái tên."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "Địa chỉ email mà bạn vừa nhập vào (%1\$s) không đúng.
Xin vui lòng nhập lại theo định dạng: têndùng@tênmiền.ect
"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/languages/zh.inc.php b/ehcp/net2ftp/languages/zh.inc.php new file mode 100644 index 0000000..abf9679 --- /dev/null +++ b/ehcp/net2ftp/languages/zh.inc.php @@ -0,0 +1,1314 @@ +%1\$s
does not exist or could not be selected, so the directory %2\$s is shown instead."] = "The directory %1\$s does not exist or could not be selected, so the directory %2\$s is shown instead."; +$net2ftp_messages["Your root directory %1\$s does not exist or could not be selected."] = "Your root directory %1\$s does not exist or could not be selected."; +$net2ftp_messages["The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."] = "The directory %1\$s could not be selected - you may not have sufficient rights to view this directory, or it may not exist."; +$net2ftp_messages["Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."] = "Entries which contain banned keywords can't be managed using net2ftp. This is to avoid Paypal or Ebay scams from being uploaded through net2ftp."; +$net2ftp_messages["Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."] = "Files which are too big can't be downloaded, uploaded, copied, moved, searched, zipped, unzipped, viewed or edited; they can only be renamed, chmodded or deleted."; +$net2ftp_messages["Execute %1\$s in a new window"] = "执行 %1\$s 于新打开的窗口"; + + +// ------------------------------------------------------------------------- +// /includes/main.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please select at least one directory or file!"] = "请选择至少的一个目录或者文件!"; + + +// ------------------------------------------------------------------------- +// /includes/authorizations.inc.php +// ------------------------------------------------------------------------- + +// checkAuthorization() +$net2ftp_messages["The FTP server %1\$s is not in the list of allowed FTP servers."] = "FTP服务器 %1\$s 不在被允许的FTP 服务器列表中."; +$net2ftp_messages["The FTP server %1\$s is in the list of banned FTP servers."] = "FTP服务器 %1\$s 在被禁的FTP服务器中."; +$net2ftp_messages["The FTP server port %1\$s may not be used."] = "FTP 服务端口 %1\$s 可能无法被使用."; +$net2ftp_messages["Your IP address (%1\$s) is not in the list of allowed IP addresses."] = "Your IP address (%1\$s) is not in the list of allowed IP addresses."; +$net2ftp_messages["Your IP address (%1\$s) is in the list of banned IP addresses."] = "你的IP 地址 (%1\$s) 在被禁的IP地址列表里."; + +// isAuthorizedDirectory() +$net2ftp_messages["Table net2ftp_users contains duplicate rows."] = "Table net2ftp_users contains duplicate rows."; + +// checkAdminUsernamePassword() +$net2ftp_messages["You did not enter your Administrator username or password."] = "You did not enter your Administrator username or password."; +$net2ftp_messages["Wrong username or password. Please try again."] = "Wrong username or password. Please try again."; + +// ------------------------------------------------------------------------- +// /includes/consumption.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to determine your IP address."] = "无法确认你的 IP地址."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate rows."] = "Table net2ftp_log_consumption_ipaddress 含有重复列."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate rows."] = "表格 net2ftp_log_consumption_ftpserver 含有重复列."; +$net2ftp_messages["The variable consumption_ipaddress_datatransfer is not numeric."] = "函数 consumption_ipaddress_datatransfer 不是数值型."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress could not be updated."] = "表格 net2ftp_log_consumption_ipaddress 无法被更新."; +$net2ftp_messages["Table net2ftp_log_consumption_ipaddress contains duplicate entries."] = "表格 net2ftp_log_consumption_ipaddress 含有重复内容."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver could not be updated."] = "表格 net2ftp_log_consumption_ftpserver 无法被更新."; +$net2ftp_messages["Table net2ftp_log_consumption_ftpserver contains duplicate entries."] = "表格 net2ftp_log_consumption_ftpserver 含有重复内容."; +$net2ftp_messages["Table net2ftp_log_access could not be updated."] = "Table net2ftp_log_access could not be updated."; +$net2ftp_messages["Table net2ftp_log_access contains duplicate entries."] = "Table net2ftp_log_access contains duplicate entries."; + + +// ------------------------------------------------------------------------- +// /includes/database.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to connect to the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; +$net2ftp_messages["Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."] = "Unable to select the MySQL database. Please check your MySQL database settings in net2ftp's configuration file settings.inc.php."; + + +// ------------------------------------------------------------------------- +// /includes/errorhandling.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["An error has occured"] = "发生一个错误"; +$net2ftp_messages["Go back"] = "退回"; +$net2ftp_messages["Go to the login page"] = "登陆"; + + +// ------------------------------------------------------------------------- +// /includes/filesystem.inc.php +// ------------------------------------------------------------------------- + +// ftp_openconnection() +$net2ftp_messages["The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The FTP module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"] = "The FTP and/or OpenSSL modules of PHP is not installed.

The administrator of this website should install these modules. Installation instructions are given on php.net: here for FTP, and here for OpenSSL
"; +$net2ftp_messages["The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"] = "The SSH2 module of PHP is not installed.

The administrator of this website should install this module. Installation instructions are given on php.net
"; +$net2ftp_messages["Unable to connect to FTP server %1\$s on port %2\$s.

Are you sure this is the address of the FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "无法链接到 FTP 服务器 %1\$s 在端口 %2\$s.

确定此FTP服务器地址没有错? 和 HTTP (web) 服务器不同. 请联系你的ISP 服务商或者系统管理员获取帮助.
"; +$net2ftp_messages["Unable to login to FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "无法登入到你的FTP 服务器 %1\$s ,使用用户名 %2\$s.

你的用户名和密码正确否? 请联系你的ISP 服务商或者系统管理员获取帮助.
"; +$net2ftp_messages["Unable to switch to the passive mode on FTP server %1\$s."] = "无法在FTP服务器上转到passive 模式 %1\$s."; + +// ftp_openconnection2() +$net2ftp_messages["Unable to connect to the second (target) FTP server %1\$s on port %2\$s.

Are you sure this is the address of the second (target) FTP server? This is often different from that of the HTTP (web) server. Please contact your ISP helpdesk or system administrator for help.
"] = "无法链接到第二台 (target) FTP 服务器 %1\$s 在端口 %2\$s.

确认此地址是否正确? 和 HTTP (web) 服务器不同. 请联系你的ISP 服务商或者系统管理员获取帮助.
"; +$net2ftp_messages["Unable to login to the second (target) FTP server %1\$s with username %2\$s.

Are you sure your username and password are correct? Please contact your ISP helpdesk or system administrator for help.
"] = "无法链接到第二台 (target) FTP 服务器 %1\$s ,使用用户名 %2\$s.

你的用户名和密码正确否? 请联系你的ISP 服务商或者系统管理员获取帮助.
"; +$net2ftp_messages["Unable to switch to the passive mode on the second (target) FTP server %1\$s."] = "无法转到passive 模式,在第二台 (target) FTP 服务器 %1\$s."; + +// ftp_myrename() +$net2ftp_messages["Unable to rename directory or file %1\$s into %2\$s"] = "无法重命名目录和文件 %1\$s%2\$s"; + +// ftp_mychmod() +$net2ftp_messages["Unable to execute site command %1\$s. Note that the CHMOD command is only available on Unix FTP servers, not on Windows FTP servers."] = "无法执行站点命令 %1\$s. 注意CHMOD 命令只适用于 Unix FTP 服务器, 而不是Windows FTP 服务器."; +$net2ftp_messages["Directory %1\$s successfully chmodded to %2\$s"] = "目录 %1\$s 被成功修改权限为 %2\$s"; +$net2ftp_messages["Processing entries within directory %1\$s:"] = "Processing entries within directory %1\$s:"; +$net2ftp_messages["File %1\$s was successfully chmodded to %2\$s"] = "文件 %1\$s 被成功修改权限为 %2\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "所有选定的目录和文件被处理."; + +// ftp_rmdir2() +$net2ftp_messages["Unable to delete the directory %1\$s"] = "无法删除目录 %1\$s"; + +// ftp_delete2() +$net2ftp_messages["Unable to delete the file %1\$s"] = "无法删除文件 %1\$s"; + +// ftp_newdirectory() +$net2ftp_messages["Unable to create the directory %1\$s"] = "无法创建目录 %1\$s"; + +// ftp_readfile() +$net2ftp_messages["Unable to create the temporary file"] = "无法创建暂时文件"; +$net2ftp_messages["Unable to get the file %1\$s from the FTP server and to save it as temporary file %2\$s.
Check the permissions of the %3\$s directory.
"] = "无法从FTP服务器上获取文件 %1\$s , 并保存为暂时文件 %2\$s.
查看目录 %3\$s 的权限设置.
"; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "无法打开暂时文件. 查看目录 %1\$s 的权限设置."; +$net2ftp_messages["Unable to read the temporary file"] = "无法读取暂时文件"; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "无法关闭对暂时文件的处理"; +$net2ftp_messages["Unable to delete the temporary file"] = "无法删除暂时文件"; + +// ftp_writefile() +$net2ftp_messages["Unable to create the temporary file. Check the permissions of the %1\$s directory."] = "无法创建暂时文件. 查看目录 %1\$s 的权限设置."; +$net2ftp_messages["Unable to open the temporary file. Check the permissions of the %1\$s directory."] = "无法打开暂时文件. 查看目录 %1\$s 的权限设置."; +$net2ftp_messages["Unable to write the string to the temporary file %1\$s.
Check the permissions of the %2\$s directory."] = "无法写入语句到暂时文件 %1\$s.
查看目录 %2\$s 的权限设置."; +$net2ftp_messages["Unable to close the handle of the temporary file"] = "无法关闭对暂时文件的处理"; +$net2ftp_messages["Unable to put the file %1\$s on the FTP server.
You may not have write permissions on the directory."] = "无法放置文件 %1\$s 到FTP 服务器上.
你也许对该目录没有写入的权限."; +$net2ftp_messages["Unable to delete the temporary file"] = "无法删除暂时文件"; + +// ftp_copymovedelete() +$net2ftp_messages["Processing directory %1\$s"] = "处理目录%1\$s"; +$net2ftp_messages["The target directory %1\$s is the same as or a subdirectory of the source directory %2\$s, so this directory will be skipped"] = "目标目录 %1\$s 和源目录%2\$s相同或者是源目录%2\$s的子目录 , 所以此目录被跳过"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, so this directory will be skipped"] = "The directory %1\$s contains a banned keyword, so this directory will be skipped"; +$net2ftp_messages["The directory %1\$s contains a banned keyword, aborting the move"] = "The directory %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["Unable to create the subdirectory %1\$s. It may already exist. Continuing the copy/move process..."] = "无法创建子目录 %1\$s. 可能它已经存在. 继续 复制/移动 的处理..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["The directory %1\$s could not be selected, so this directory will be skipped"] = "The directory %1\$s could not be selected, so this directory will be skipped"; +$net2ftp_messages["Unable to delete the subdirectory %1\$s - it may not be empty"] = "无法删除子目录 %1\$s - 它可能不为空"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "被删除的子目录 %1\$s"; +$net2ftp_messages["Deleted subdirectory %1\$s"] = "被删除的子目录 %1\$s"; +$net2ftp_messages["Unable to move the directory %1\$s"] = "Unable to move the directory %1\$s"; +$net2ftp_messages["Moved directory %1\$s"] = "Moved directory %1\$s"; +$net2ftp_messages["Processing of directory %1\$s completed"] = "对目录 %1\$s 的处理已经完成"; +$net2ftp_messages["The target for file %1\$s is the same as the source, so this file will be skipped"] = "目标文件 %1\$s 和源文件相同, 所以此文件被跳过"; +$net2ftp_messages["The file %1\$s contains a banned keyword, so this file will be skipped"] = "The file %1\$s contains a banned keyword, so this file will be skipped"; +$net2ftp_messages["The file %1\$s contains a banned keyword, aborting the move"] = "The file %1\$s contains a banned keyword, aborting the move"; +$net2ftp_messages["The file %1\$s is too big to be copied, so this file will be skipped"] = "The file %1\$s is too big to be copied, so this file will be skipped"; +$net2ftp_messages["The file %1\$s is too big to be moved, aborting the move"] = "The file %1\$s is too big to be moved, aborting the move"; +$net2ftp_messages["Unable to copy the file %1\$s"] = "无法复制文件 %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Unable to move the file %1\$s, aborting the move"] = "Unable to move the file %1\$s, aborting the move"; +$net2ftp_messages["Unable to move the file %1\$s"] = "Unable to move the file %1\$s"; +$net2ftp_messages["Moved file %1\$s"] = "移动文件 %1\$s"; +$net2ftp_messages["Unable to delete the file %1\$s"] = "无法删除文件 %1\$s"; +$net2ftp_messages["Deleted file %1\$s"] = "删除文件 %1\$s"; +$net2ftp_messages["All the selected directories and files have been processed."] = "所有选定的目录和文件被处理."; + +// ftp_processfiles() + +// ftp_getfile() +$net2ftp_messages["Unable to copy the remote file %1\$s to the local file using FTP mode %2\$s"] = "无法复制远端文件 %1\$s 到当前文件,使用FTP模式 %2\$s"; +$net2ftp_messages["Unable to delete file %1\$s"] = "无法删除文件 %1\$s"; + +// ftp_putfile() +$net2ftp_messages["The file is too big to be transferred"] = "The file is too big to be transferred"; +$net2ftp_messages["Daily limit reached: the file %1\$s will not be transferred"] = "已经达到每日限制: 文件 %1\$s 无法被传送"; +$net2ftp_messages["Unable to copy the local file to the remote file %1\$s using FTP mode %2\$s"] = "无法复制本地文件到远端文件 %1\$s ,使用FTP模式 %2\$s"; +$net2ftp_messages["Unable to delete the local file"] = "无法删除本地文件"; + +// ftp_downloadfile() +$net2ftp_messages["Unable to delete the temporary file"] = "无法删除暂时文件"; +$net2ftp_messages["Unable to send the file to the browser"] = "无法发送文件到浏览器"; + +// ftp_zip() +$net2ftp_messages["Unable to create the temporary file"] = "无法创建暂时文件"; +$net2ftp_messages["The zip file has been saved on the FTP server as %1\$s"] = "zip文件已经保存到FTP服务器,为 %1\$s"; +$net2ftp_messages["Requested files"] = "被请求的文件"; + +$net2ftp_messages["Dear,"] = "Dear,"; +$net2ftp_messages["Someone has requested the files in attachment to be sent to this email account (%1\$s)."] = "Someone has requested the files in attachment to be sent to this email account (%1\$s)."; +$net2ftp_messages["If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."] = "If you know nothing about this or if you don't trust that person, please delete this email without opening the Zip file in attachment."; +$net2ftp_messages["Note that if you don't open the Zip file, the files inside cannot harm your computer."] = "Note that if you don't open the Zip file, the files inside cannot harm your computer."; +$net2ftp_messages["Information about the sender: "] = "Information about the sender: "; +$net2ftp_messages["IP address: "] = "IP address: "; +$net2ftp_messages["Time of sending: "] = "Time of sending: "; +$net2ftp_messages["Sent via the net2ftp application installed on this website: "] = "Sent via the net2ftp application installed on this website: "; +$net2ftp_messages["Webmaster's email: "] = "Webmaster's email: "; +$net2ftp_messages["Message of the sender: "] = "Message of the sender: "; +$net2ftp_messages["net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."] = "net2ftp is free software, released under the GNU/GPL license. For more information, go to http://www.net2ftp.com."; + +$net2ftp_messages["The zip file has been sent to %1\$s."] = "zip文件已经发送到 %1\$s."; + +// acceptFiles() +$net2ftp_messages["File %1\$s is too big. This file will not be uploaded."] = "文件 %1\$s 太大. 无法上传该文件."; +$net2ftp_messages["File %1\$s is contains a banned keyword. This file will not be uploaded."] = "File %1\$s is contains a banned keyword. This file will not be uploaded."; +$net2ftp_messages["Could not generate a temporary file."] = "无法创建暂时文件."; +$net2ftp_messages["File %1\$s could not be moved"] = "文件 %1\$s 无法移动"; +$net2ftp_messages["File %1\$s is OK"] = "文件 %1\$s 是ok的"; +$net2ftp_messages["Unable to move the uploaded file to the temp directory.

The administrator of this website has to chmod 777 the /temp directory of net2ftp."] = "无法移动要上传的文件到temp目录.

系统管理员必须将net2ftp的 /temp目录的权限设置为 777 ."; +$net2ftp_messages["You did not provide any file to upload."] = "你没有提供要上传的文件."; + +// ftp_transferfiles() +$net2ftp_messages["File %1\$s could not be transferred to the FTP server"] = "文件 %1\$s 无法传送到FTP服务器上"; +$net2ftp_messages["File %1\$s has been transferred to the FTP server using FTP mode %2\$s"] = "文件%1\$s 传送到FTP服务器上,使用的FTP模式为 %2\$s"; +$net2ftp_messages["Transferring files to the FTP server"] = "正传送文件到FTP服务器上"; + +// ftp_unziptransferfiles() +$net2ftp_messages["Processing archive nr %1\$s: %2\$s"] = "正在处理压缩文档 %1\$s: %2\$s"; +$net2ftp_messages["Archive %1\$s was not processed because its filename extension was not recognized. Only zip, tar, tgz and gz archives are supported at the moment."] = "文档 %1\$s 没有被处理,因为无法识别它的扩展名. 当前只有 zip, tar, tgz and gz 文档被支持."; +$net2ftp_messages["Unable to extract the files and directories from the archive"] = "Unable to extract the files and directories from the archive"; +$net2ftp_messages["Archive contains filenames with ../ or ..\\ - aborting the extraction"] = "Archive contains filenames with ../ or ..\\ - aborting the extraction"; +$net2ftp_messages["Could not unzip entry %1\$s (error code %2\$s)"] = "Could not unzip entry %1\$s (error code %2\$s)"; +$net2ftp_messages["Created directory %1\$s"] = "Created directory %1\$s"; +$net2ftp_messages["Could not create directory %1\$s"] = "Could not create directory %1\$s"; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +$net2ftp_messages["Could not copy file %1\$s"] = "Could not copy file %1\$s"; +$net2ftp_messages["Unable to delete the temporary directory"] = "Unable to delete the temporary directory"; +$net2ftp_messages["Unable to delete the temporary file %1\$s"] = "Unable to delete the temporary file %1\$s"; + +// ftp_mysite() +$net2ftp_messages["Unable to execute site command %1\$s"] = "无法执行命令 %1\$s"; + +// shutdown() +$net2ftp_messages["Your task was stopped"] = "Your task was stopped"; +$net2ftp_messages["The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."] = "The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped."; +$net2ftp_messages["This time limit guarantees the fair use of the web server for everyone."] = "This time limit guarantees the fair use of the web server for everyone."; +$net2ftp_messages["Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."] = "Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files."; +$net2ftp_messages["If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."] = "如果确实需要net2ftp 来处理耗时长的任务, 请考虑安装net2ftp 到你自己的服务器上."; + +// SendMail() +$net2ftp_messages["You did not provide any text to send by email!"] = "没有输入要电邮的文字!"; +$net2ftp_messages["You did not supply a From address."] = "没有输入寄信人邮件地址."; +$net2ftp_messages["You did not supply a To address."] = "没有输入收信人邮件地址."; +$net2ftp_messages["Due to technical problems the email to %1\$s could not be sent."] = "由于技术原因,发送到地址 %1\$s 的邮件无法被邮寄出。"; + +// tempdir2() +$net2ftp_messages["Unable to create a temporary directory because (unvalid parent directory)"] = "Unable to create a temporary directory because (unvalid parent directory)"; +$net2ftp_messages["Unable to create a temporary directory because (parent directory is not writeable)"] = "Unable to create a temporary directory because (parent directory is not writeable)"; +$net2ftp_messages["Unable to create a temporary directory (too many tries)"] = "Unable to create a temporary directory (too many tries)"; + +// ------------------------------------------------------------------------- +// /includes/logging.inc.php +// ------------------------------------------------------------------------- +// logAccess(), logLogin(), logError() +$net2ftp_messages["Unable to execute the SQL query."] = "Unable to execute the SQL query."; +$net2ftp_messages["Unable to open the system log."] = "Unable to open the system log."; +$net2ftp_messages["Unable to write a message to the system log."] = "Unable to write a message to the system log."; + +// getLogStatus(), putLogStatus() +$net2ftp_messages["Table net2ftp_log_status contains duplicate entries."] = "Table net2ftp_log_status contains duplicate entries."; +$net2ftp_messages["Table net2ftp_log_status could not be updated."] = "Table net2ftp_log_status could not be updated."; + +// rotateLogs() +$net2ftp_messages["The log tables were renamed successfully."] = "The log tables were renamed successfully."; +$net2ftp_messages["The log tables could not be renamed."] = "The log tables could not be renamed."; +$net2ftp_messages["The log tables were copied successfully."] = "The log tables were copied successfully."; +$net2ftp_messages["The log tables could not be copied."] = "The log tables could not be copied."; +$net2ftp_messages["The oldest log table was dropped successfully."] = "The oldest log table was dropped successfully."; +$net2ftp_messages["The oldest log table could not be dropped."] = "The oldest log table could not be dropped."; + + +// ------------------------------------------------------------------------- +// /includes/registerglobals.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Please enter your username and password for FTP server "] = "请输入用户名和密码 "; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "弹出窗口里的登陆信息未填全.
点击下面的 \"登陆\" ."; +$net2ftp_messages["Access to the net2ftp Admin panel is disabled, because no password has been set in the file settings.inc.php. Enter a password in that file, and reload this page."] = "使用net2ftp 系统管理台被禁用, 因为在settings.inc.php文件中没有设置管理员密码. 请在该文件中输入密码, 然后重新刷新此页面."; +$net2ftp_messages["Please enter your Admin username and password"] = "请输入系统管理员用户名和密码"; +$net2ftp_messages["You did not fill in your login information in the popup window.
Click on \"Go to the login page\" below."] = "弹出窗口里的登陆信息未填全.
点击下面的 \"登陆\" ."; +$net2ftp_messages["Wrong username or password for the net2ftp Admin panel. The username and password can be set in the file settings.inc.php."] = "错误的系统管理员用户名和密码. 用户名和密码设置在settings.inc.php里."; + + +// ------------------------------------------------------------------------- +// /skins/skins.inc.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Blue"] = "蓝色"; +$net2ftp_messages["Grey"] = "灰色"; +$net2ftp_messages["Black"] = "黑色"; +$net2ftp_messages["Yellow"] = "黄色"; +$net2ftp_messages["Pastel"] = "浅色"; + +// getMime() +$net2ftp_messages["Directory"] = "目录"; +$net2ftp_messages["Symlink"] = "Symlink"; +$net2ftp_messages["ASP script"] = "ASP script"; +$net2ftp_messages["Cascading Style Sheet"] = "Cascading Style Sheet"; +$net2ftp_messages["HTML file"] = "HTML file"; +$net2ftp_messages["Java source file"] = "Java source file"; +$net2ftp_messages["JavaScript file"] = "JavaScript file"; +$net2ftp_messages["PHP Source"] = "PHP Source"; +$net2ftp_messages["PHP script"] = "PHP script"; +$net2ftp_messages["Text file"] = "Text file"; +$net2ftp_messages["Bitmap file"] = "Bitmap file"; +$net2ftp_messages["GIF file"] = "GIF file"; +$net2ftp_messages["JPEG file"] = "JPEG file"; +$net2ftp_messages["PNG file"] = "PNG file"; +$net2ftp_messages["TIF file"] = "TIF file"; +$net2ftp_messages["GIMP file"] = "GIMP file"; +$net2ftp_messages["Executable"] = "Executable"; +$net2ftp_messages["Shell script"] = "Shell script"; +$net2ftp_messages["MS Office - Word document"] = "MS Office - Word document"; +$net2ftp_messages["MS Office - Excel spreadsheet"] = "MS Office - Excel spreadsheet"; +$net2ftp_messages["MS Office - PowerPoint presentation"] = "MS Office - PowerPoint presentation"; +$net2ftp_messages["MS Office - Access database"] = "MS Office - Access database"; +$net2ftp_messages["MS Office - Visio drawing"] = "MS Office - Visio drawing"; +$net2ftp_messages["MS Office - Project file"] = "MS Office - Project file"; +$net2ftp_messages["OpenOffice - Writer 6.0 document"] = "OpenOffice - Writer 6.0 document"; +$net2ftp_messages["OpenOffice - Writer 6.0 template"] = "OpenOffice - Writer 6.0 template"; +$net2ftp_messages["OpenOffice - Calc 6.0 spreadsheet"] = "OpenOffice - Calc 6.0 spreadsheet"; +$net2ftp_messages["OpenOffice - Calc 6.0 template"] = "OpenOffice - Calc 6.0 template"; +$net2ftp_messages["OpenOffice - Draw 6.0 document"] = "OpenOffice - Draw 6.0 document"; +$net2ftp_messages["OpenOffice - Draw 6.0 template"] = "OpenOffice - Draw 6.0 template"; +$net2ftp_messages["OpenOffice - Impress 6.0 presentation"] = "OpenOffice - Impress 6.0 presentation"; +$net2ftp_messages["OpenOffice - Impress 6.0 template"] = "OpenOffice - Impress 6.0 template"; +$net2ftp_messages["OpenOffice - Writer 6.0 global document"] = "OpenOffice - Writer 6.0 global document"; +$net2ftp_messages["OpenOffice - Math 6.0 document"] = "OpenOffice - Math 6.0 document"; +$net2ftp_messages["StarOffice - StarWriter 5.x document"] = "StarOffice - StarWriter 5.x document"; +$net2ftp_messages["StarOffice - StarWriter 5.x global document"] = "StarOffice - StarWriter 5.x global document"; +$net2ftp_messages["StarOffice - StarCalc 5.x spreadsheet"] = "StarOffice - StarCalc 5.x spreadsheet"; +$net2ftp_messages["StarOffice - StarDraw 5.x document"] = "StarOffice - StarDraw 5.x document"; +$net2ftp_messages["StarOffice - StarImpress 5.x presentation"] = "StarOffice - StarImpress 5.x presentation"; +$net2ftp_messages["StarOffice - StarImpress Packed 5.x file"] = "StarOffice - StarImpress Packed 5.x file"; +$net2ftp_messages["StarOffice - StarMath 5.x document"] = "StarOffice - StarMath 5.x document"; +$net2ftp_messages["StarOffice - StarChart 5.x document"] = "StarOffice - StarChart 5.x document"; +$net2ftp_messages["StarOffice - StarMail 5.x mail file"] = "StarOffice - StarMail 5.x mail file"; +$net2ftp_messages["Adobe Acrobat document"] = "Adobe Acrobat document"; +$net2ftp_messages["ARC archive"] = "ARC archive"; +$net2ftp_messages["ARJ archive"] = "ARJ archive"; +$net2ftp_messages["RPM"] = "RPM"; +$net2ftp_messages["GZ archive"] = "GZ archive"; +$net2ftp_messages["TAR archive"] = "TAR archive"; +$net2ftp_messages["Zip archive"] = "Zip archive"; +$net2ftp_messages["MOV movie file"] = "MOV movie file"; +$net2ftp_messages["MPEG movie file"] = "MPEG movie file"; +$net2ftp_messages["Real movie file"] = "Real movie file"; +$net2ftp_messages["Quicktime movie file"] = "Quicktime movie file"; +$net2ftp_messages["Shockwave flash file"] = "Shockwave flash file"; +$net2ftp_messages["Shockwave file"] = "Shockwave file"; +$net2ftp_messages["WAV sound file"] = "WAV sound file"; +$net2ftp_messages["Font file"] = "Font file"; +$net2ftp_messages["%1\$s File"] = "%1\$s File"; +$net2ftp_messages["File"] = "文件"; + +// getAction() +$net2ftp_messages["Back"] = "退回"; +$net2ftp_messages["Submit"] = "提交"; +$net2ftp_messages["Refresh"] = "刷新"; +$net2ftp_messages["Details"] = "详细资料"; +$net2ftp_messages["Icons"] = "图标"; +$net2ftp_messages["List"] = "浏览"; +$net2ftp_messages["Logout"] = "登出"; +$net2ftp_messages["Help"] = "帮助"; +$net2ftp_messages["Bookmark"] = "书签"; +$net2ftp_messages["Save"] = "保存"; +$net2ftp_messages["Default"] = "缺省"; + + +// ------------------------------------------------------------------------- +// /skins/[skin]/header.template.php and footer.template.php +// ------------------------------------------------------------------------- +$net2ftp_messages["Help Guide"] = "Help Guide"; +$net2ftp_messages["Forums"] = "Forums"; +$net2ftp_messages["License"] = "协议"; +$net2ftp_messages["Powered by"] = "使用"; +$net2ftp_messages["You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."] = "You are now taken to the net2ftp forums. These forums are for net2ftp related topics only - not for generic webhosting questions."; +$net2ftp_messages["Standard"] = "Standard"; +$net2ftp_messages["Mobile"] = "Mobile"; + +// ------------------------------------------------------------------------- +// Admin module +if ($net2ftp_globals["state"] == "admin") { +// ------------------------------------------------------------------------- + +// /modules/admin/admin.inc.php +$net2ftp_messages["Admin functions"] = "系统管理功能"; + +// /skins/[skin]/admin1.template.php +$net2ftp_messages["Version information"] = "版本信息"; +$net2ftp_messages["This version of net2ftp is up-to-date."] = "This version of net2ftp is up-to-date."; +$net2ftp_messages["The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."] = "The latest version information could not be retrieved from the net2ftp.com server. Check the security settings of your browser, which may prevent the loading of a small file from the net2ftp.com server."; +$net2ftp_messages["Logging"] = "登入中"; +$net2ftp_messages["Date from:"] = "日期从:"; +$net2ftp_messages["to:"] = "到:"; +$net2ftp_messages["Empty logs"] = "为空"; +$net2ftp_messages["View logs"] = "查看登陆信息"; +$net2ftp_messages["Go"] = "前往"; +$net2ftp_messages["Setup MySQL tables"] = "安装 MySQL 数据表"; +$net2ftp_messages["Create the MySQL database tables"] = "创建MySQL 数据表"; + +} // end admin + +// ------------------------------------------------------------------------- +// Admin_createtables module +if ($net2ftp_globals["state"] == "admin_createtables") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_createtables.inc.php +$net2ftp_messages["Admin functions"] = "系统管理功能"; +$net2ftp_messages["The handle of file %1\$s could not be opened."] = "The handle of file %1\$s could not be opened."; +$net2ftp_messages["The file %1\$s could not be opened."] = "The file %1\$s could not be opened."; +$net2ftp_messages["The handle of file %1\$s could not be closed."] = "The handle of file %1\$s could not be closed."; +$net2ftp_messages["The connection to the server %1\$s could not be set up. Please check the database settings you've entered."] = "The connection to the server %1\$s could not be set up. Please check the database settings you've entered."; +$net2ftp_messages["Unable to select the database %1\$s."] = "Unable to select the database %1\$s."; +$net2ftp_messages["The SQL query nr %1\$s could not be executed."] = "The SQL query nr %1\$s could not be executed."; +$net2ftp_messages["The SQL query nr %1\$s was executed successfully."] = "The SQL query nr %1\$s was executed successfully."; + +// /skins/[skin]/admin_createtables1.template.php +$net2ftp_messages["Please enter your MySQL settings:"] = "Please enter your MySQL settings:"; +$net2ftp_messages["MySQL username"] = "MySQL 用户名"; +$net2ftp_messages["MySQL password"] = "MySQL 用户密码"; +$net2ftp_messages["MySQL database"] = "MySQL 数据库名"; +$net2ftp_messages["MySQL server"] = "MySQL 服务器名"; +$net2ftp_messages["This SQL query is going to be executed:"] = "以下SQL语句将要被执行:"; +$net2ftp_messages["Execute"] = "执行"; + +// /skins/[skin]/admin_createtables2.template.php +$net2ftp_messages["Settings used:"] = "使用以下设置:"; +$net2ftp_messages["MySQL password length"] = "MySQL 密码长度"; +$net2ftp_messages["Results:"] = "结果:"; + +} // end admin_createtables + + +// ------------------------------------------------------------------------- +// Admin_viewlogs module +if ($net2ftp_globals["state"] == "admin_viewlogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_viewlogs.inc.php +$net2ftp_messages["Admin functions"] = "系统管理功能"; +$net2ftp_messages["Unable to execute the SQL query %1\$s."] = "Unable to execute the SQL query %1\$s."; +$net2ftp_messages["No data"] = "无数据"; + +} // end admin_viewlogs + + +// ------------------------------------------------------------------------- +// Admin_emptylogs module +if ($net2ftp_globals["state"] == "admin_emptylogs") { +// ------------------------------------------------------------------------- + +// /modules/admin_createtables/admin_emptylogs.inc.php +$net2ftp_messages["Admin functions"] = "系统管理功能"; +$net2ftp_messages["The table %1\$s was emptied successfully."] = "数据表 %1\$s 被成功清空."; +$net2ftp_messages["The table %1\$s could not be emptied."] = "数据表 %1\$s 无法被清空."; +$net2ftp_messages["The table %1\$s was optimized successfully."] = "数据表 %1\$s 优化成功."; +$net2ftp_messages["The table %1\$s could not be optimized."] = "数据表 %1\$s 无法被优化."; + +} // end admin_emptylogs + + +// ------------------------------------------------------------------------- +// Advanced module +if ($net2ftp_globals["state"] == "advanced") { +// ------------------------------------------------------------------------- + +// /modules/advanced/advanced.inc.php +$net2ftp_messages["Advanced functions"] = "高级功能"; + +// /skins/[skin]/advanced1.template.php +$net2ftp_messages["Go"] = "前往"; +$net2ftp_messages["Disabled"] = "Disabled"; +$net2ftp_messages["Advanced FTP functions"] = "Advanced FTP functions"; +$net2ftp_messages["Send arbitrary FTP commands to the FTP server"] = "Send arbitrary FTP commands to the FTP server"; +$net2ftp_messages["This function is available on PHP 5 only"] = "This function is available on PHP 5 only"; +$net2ftp_messages["Troubleshooting functions"] = "错误诊断功能"; +$net2ftp_messages["Troubleshoot net2ftp on this webserver"] = "此web服务器上的net2ftp 错误诊断"; +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP服务器上的错误诊断"; +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Translation functions"] = "错误诊断功能"; +$net2ftp_messages["Introduction to the translation functions"] = "翻译功能的介绍"; +$net2ftp_messages["Extract messages to translate from code files"] = "从代码文件中抽取信息翻译"; +$net2ftp_messages["Check if there are new or obsolete messages"] = "查看是否有新语句"; + +$net2ftp_messages["Beta functions"] = "Beta 功能"; +$net2ftp_messages["Send a site command to the FTP server"] = "发送站点命令到FTP服务器"; +$net2ftp_messages["Apache: password-protect a directory, create custom error pages"] = "Apache: 密码保护目录, 创建自定义的错误页面"; +$net2ftp_messages["MySQL: execute an SQL query"] = "MySQL: 执行SQL语句"; + + +// advanced() +$net2ftp_messages["The site command functions are not available on this webserver."] = "站点命令功能无法在此web服务器上使用."; +$net2ftp_messages["The Apache functions are not available on this webserver."] = "Apache功能无法在此服务器上使用."; +$net2ftp_messages["The MySQL functions are not available on this webserver."] = "MySQL功能无法在此服务器上使用."; +$net2ftp_messages["Unexpected state2 string. Exiting."] = "非预知的state2 语句. 结束."; + +} // end advanced + + +// ------------------------------------------------------------------------- +// Advanced_ftpserver module +if ($net2ftp_globals["state"] == "advanced_ftpserver") { +// ------------------------------------------------------------------------- + +// /modules/advanced_ftpserver/advanced_ftpserver.inc.php +$net2ftp_messages["Troubleshoot an FTP server"] = "FTP服务器上的错误诊断"; + +// /skins/[skin]/advanced_ftpserver1.template.php +$net2ftp_messages["Connection settings:"] = "连接语句:"; +$net2ftp_messages["FTP server"] = "FTP 服务器"; +$net2ftp_messages["FTP server port"] = "FTP 服务器端口"; +$net2ftp_messages["Username"] = "用户名"; +$net2ftp_messages["Password"] = "密码"; +$net2ftp_messages["Password length"] = "密码长度"; +$net2ftp_messages["Passive mode"] = "Passive 模式"; +$net2ftp_messages["Directory"] = "目录"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +// /skins/[skin]/advanced_ftpserver2.template.php +$net2ftp_messages["Connecting to the FTP server: "] = "正链接到FTP服务器: "; +$net2ftp_messages["Logging into the FTP server: "] = "正登入到FTP服务器: "; +$net2ftp_messages["Setting the passive mode: "] = "设置passive 模式: "; +$net2ftp_messages["Getting the FTP server system type: "] = "正获取FTP 服务器系统类型: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "正改变目录到 %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP服务器上的目录为: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "正获取原始目录和文件: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "再一次尝试获取原始目录和文件: "; +$net2ftp_messages["Closing the connection: "] = "正关闭链接: "; +$net2ftp_messages["Raw list of directories and files:"] = "原始目录和文件列表:"; +$net2ftp_messages["Parsed list of directories and files:"] = "传过来的目录和文件列表:"; + +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_ftpserver + + +// ------------------------------------------------------------------------- +// Advanced_parsing module +if ($net2ftp_globals["state"] == "advanced_parsing") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Test the net2ftp list parsing rules"] = "Test the net2ftp list parsing rules"; +$net2ftp_messages["Sample input"] = "Sample input"; +$net2ftp_messages["Parsed output"] = "Parsed output"; + +} // end advanced_parsing + + +// ------------------------------------------------------------------------- +// Advanced_webserver module +if ($net2ftp_globals["state"] == "advanced_webserver") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Troubleshoot your net2ftp installation"] = "诊断你的net2ftp 安装"; +$net2ftp_messages["Printing the result"] = "Printing the result"; + +$net2ftp_messages["Checking if the FTP module of PHP is installed: "] = "查看PHP的FTP模块是否已经安装: "; +$net2ftp_messages["yes"] = "是"; +$net2ftp_messages["no - please install it!"] = "否 - 请安装!"; + +$net2ftp_messages["Checking the permissions of the directory on the web server: a small file will be written to the /temp folder and then deleted."] = "查看web服务器上的目录权限: 一个文件将会写入到 /temp 目录然后会被删除."; +$net2ftp_messages["Creating filename: "] = "创建文件名: "; +$net2ftp_messages["OK. Filename: %1\$s"] = "OK. 文件名: %1\$s"; +$net2ftp_messages["not OK"] = "not OK"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK. Check the permissions of the %1\$s directory"] = "不OK. 查看 %1\$s 目录的权限"; +$net2ftp_messages["Opening the file in write mode: "] = "在写入模式下打开文件: "; +$net2ftp_messages["Writing some text to the file: "] = "给此文件写入些文字: "; +$net2ftp_messages["Closing the file: "] = "关闭文件: "; +$net2ftp_messages["Deleting the file: "] = "删除文件: "; + +$net2ftp_messages["Testing the FTP functions"] = "Testing the FTP functions"; +$net2ftp_messages["Connecting to a test FTP server: "] = "Connecting to a test FTP server: "; +$net2ftp_messages["Connecting to the FTP server: "] = "正链接到FTP服务器: "; +$net2ftp_messages["Logging into the FTP server: "] = "正登入到FTP服务器: "; +$net2ftp_messages["Setting the passive mode: "] = "设置passive 模式: "; +$net2ftp_messages["Getting the FTP server system type: "] = "正获取FTP 服务器系统类型: "; +$net2ftp_messages["Changing to the directory %1\$s: "] = "正改变目录到 %1\$s: "; +$net2ftp_messages["The directory from the FTP server is: %1\$s "] = "FTP服务器上的目录为: %1\$s "; +$net2ftp_messages["Getting the raw list of directories and files: "] = "正获取原始目录和文件: "; +$net2ftp_messages["Trying a second time to get the raw list of directories and files: "] = "再一次尝试获取原始目录和文件: "; +$net2ftp_messages["Closing the connection: "] = "正关闭链接: "; +$net2ftp_messages["Raw list of directories and files:"] = "原始目录和文件列表:"; +$net2ftp_messages["Parsed list of directories and files:"] = "传过来的目录和文件列表:"; +$net2ftp_messages["OK"] = "OK"; +$net2ftp_messages["not OK"] = "not OK"; + +} // end advanced_webserver + + +// ------------------------------------------------------------------------- +// Bookmark module +if ($net2ftp_globals["state"] == "bookmark") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Drag and drop one of the links below to the bookmarks bar"] = "Drag and drop one of the links below to the bookmarks bar"; +$net2ftp_messages["Right-click on one of the links below and choose \"Add to Favorites...\""] = "Right-click on one of the links below and choose \"Add to Favorites...\""; +$net2ftp_messages["Right-click on one the links below and choose \"Add Link to Bookmarks...\""] = "Right-click on one the links below and choose \"Add Link to Bookmarks...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark link...\""] = "Right-click on one of the links below and choose \"Bookmark link...\""; +$net2ftp_messages["Right-click on one of the links below and choose \"Bookmark This Link...\""] = "Right-click on one of the links below and choose \"Bookmark This Link...\""; +$net2ftp_messages["One click access (net2ftp won't ask for a password - less safe)"] = "One click access (net2ftp won't ask for a password - less safe)"; +$net2ftp_messages["Two click access (net2ftp will ask for a password - safer)"] = "Two click access (net2ftp will ask for a password - safer)"; +$net2ftp_messages["Note: when you will use this bookmark, a popup window will ask you for your username and password."] = "注意: 当你使用此书签, 会弹出一个窗口,要求你的用户名和密码."; + +} // end bookmark + + +// ------------------------------------------------------------------------- +// Browse module +if ($net2ftp_globals["state"] == "browse") { +// ------------------------------------------------------------------------- + +// /modules/browse/browse.inc.php +$net2ftp_messages["Choose a directory"] = "选择一个目录"; +$net2ftp_messages["Please wait..."] = "请稍候..."; + +// browse() +$net2ftp_messages["Directories with names containing \' cannot be displayed correctly. They can only be deleted. Please go back and select another subdirectory."] = "目录名含有字符 \' 无法被正常显示. 只能删除它们. 请退回然后选择其它的子目录."; + +$net2ftp_messages["Daily limit reached: you will not be able to transfer data"] = "Daily limit reached: you will not be able to transfer data"; +$net2ftp_messages["In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."] = "In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it."; +$net2ftp_messages["If you need unlimited usage, please install net2ftp on your own web server."] = "If you need unlimited usage, please install net2ftp on your own web server."; + +// printdirfilelist() +// Keep this short, it must fit in a small button! +$net2ftp_messages["New dir"] = "新目录"; +$net2ftp_messages["New file"] = "新文件"; +$net2ftp_messages["HTML templates"] = "HTML templates"; +$net2ftp_messages["Upload"] = "上"; +$net2ftp_messages["Java Upload"] = "Java 上"; +$net2ftp_messages["Flash Upload"] = "Flash Upload"; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Advanced"] = "高级"; +$net2ftp_messages["Copy"] = "复制"; +$net2ftp_messages["Move"] = "移到"; +$net2ftp_messages["Delete"] = "删除"; +$net2ftp_messages["Rename"] = "重命名"; +$net2ftp_messages["Chmod"] = "修改权限"; +$net2ftp_messages["Download"] = "下载"; +$net2ftp_messages["Unzip"] = "Unzip"; +$net2ftp_messages["Zip"] = "Zip"; +$net2ftp_messages["Size"] = "大小"; +$net2ftp_messages["Search"] = "搜索"; +$net2ftp_messages["Go to the parent directory"] = "上级目录"; +$net2ftp_messages["Go"] = "前往"; +$net2ftp_messages["Transform selected entries: "] = "传送所选的: "; +$net2ftp_messages["Transform selected entry: "] = "Transform selected entry: "; +$net2ftp_messages["Make a new subdirectory in directory %1\$s"] = "在目录 %1\$s 里创建子目录"; +$net2ftp_messages["Create a new file in directory %1\$s"] = "在目录 %1\$s 里创建新文件"; +$net2ftp_messages["Create a website easily using ready-made templates"] = "Create a website easily using ready-made templates"; +$net2ftp_messages["Upload new files in directory %1\$s"] = "上传新文件到目录 %1\$s"; +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Upload files using a Flash applet"] = "Upload files using a Flash applet"; +$net2ftp_messages["Install software packages (requires PHP on web server)"] = "Install software packages (requires PHP on web server)"; +$net2ftp_messages["Go to the advanced functions"] = "前往高级功能"; +$net2ftp_messages["Copy the selected entries"] = "复制所选"; +$net2ftp_messages["Move the selected entries"] = "移动所选"; +$net2ftp_messages["Delete the selected entries"] = "删除所选"; +$net2ftp_messages["Rename the selected entries"] = "重命名所选"; +$net2ftp_messages["Chmod the selected entries (only works on Unix/Linux/BSD servers)"] = "修改所选的权限 (只可用于 Unix/Linux/BSD 服务器)"; +$net2ftp_messages["Download a zip file containing all selected entries"] = "下载一个zip 文件含有所有选定的内容"; +$net2ftp_messages["Unzip the selected archives on the FTP server"] = "Unzip the selected archives on the FTP server"; +$net2ftp_messages["Zip the selected entries to save or email them"] = "Zip 压缩所选的内容来保存或者电邮"; +$net2ftp_messages["Calculate the size of the selected entries"] = "计算所选的内容的大小"; +$net2ftp_messages["Find files which contain a particular word"] = "搜索含有特定单词的文件"; +$net2ftp_messages["Click to sort by %1\$s in descending order"] = "点击按 %1\$s 分类并降序排列"; +$net2ftp_messages["Click to sort by %1\$s in ascending order"] = "点击按 %1\$s 分类并升序排列"; +$net2ftp_messages["Ascending order"] = "升序排列"; +$net2ftp_messages["Descending order"] = "降序排列"; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["Up"] = "向上"; +$net2ftp_messages["Click to check or uncheck all rows"] = "点击对所有列复选或者取消复选"; +$net2ftp_messages["All"] = "全部"; +$net2ftp_messages["Name"] = "名称"; +$net2ftp_messages["Type"] = "类型"; +//$net2ftp_messages["Size"] = "Size"; +$net2ftp_messages["Owner"] = "拥有者"; +$net2ftp_messages["Group"] = "组"; +$net2ftp_messages["Perms"] = "权限"; +$net2ftp_messages["Mod Time"] = "修改时间"; +$net2ftp_messages["Actions"] = "操作"; +$net2ftp_messages["Select the directory %1\$s"] = "Select the directory %1\$s"; +$net2ftp_messages["Select the file %1\$s"] = "Select the file %1\$s"; +$net2ftp_messages["Select the symlink %1\$s"] = "Select the symlink %1\$s"; +$net2ftp_messages["Go to the subdirectory %1\$s"] = "Go to the subdirectory %1\$s"; +$net2ftp_messages["Download the file %1\$s"] = "下载文件 %1\$s"; +$net2ftp_messages["Follow symlink %1\$s"] = "Follow symlink %1\$s"; +$net2ftp_messages["View"] = "查看"; +$net2ftp_messages["Edit"] = "编辑"; +$net2ftp_messages["Update"] = "更新"; +$net2ftp_messages["Open"] = "打开"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "查看有语法高亮显示的文件 %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "编辑文件 %1\$s 的源代码"; +$net2ftp_messages["Upload a new version of the file %1\$s and merge the changes"] = "上传文件 %1\$s 的新版本"; +$net2ftp_messages["View image %1\$s"] = "查看图像 %1\$s"; +$net2ftp_messages["View the file %1\$s from your HTTP web server"] = "从你的WEB服务器上查看文件 %1\$s "; +$net2ftp_messages["(Note: This link may not work if you don't have your own domain name.)"] = "(注意: 如果你没有域名,此链接可能无法使用.)"; +$net2ftp_messages["This folder is empty"] = "此目录为空"; + +// printSeparatorRow() +$net2ftp_messages["Directories"] = "目录"; +$net2ftp_messages["Files"] = "文件"; +$net2ftp_messages["Symlinks"] = "链接"; +$net2ftp_messages["Unrecognized FTP output"] = "无法识别FTP输出"; +$net2ftp_messages["Number"] = "Number"; +$net2ftp_messages["Size"] = "大小"; +$net2ftp_messages["Skipped"] = "Skipped"; +$net2ftp_messages["Data transferred from this IP address today"] = "Data transferred from this IP address today"; +$net2ftp_messages["Data transferred to this FTP server today"] = "Data transferred to this FTP server today"; + +// printLocationActions() +$net2ftp_messages["Language:"] = "语言:"; +$net2ftp_messages["Skin:"] = "皮肤:"; +$net2ftp_messages["View mode:"] = "浏览模式:"; +$net2ftp_messages["Directory Tree"] = "目录树"; + +// ftp2http() +$net2ftp_messages["Execute %1\$s in a new window"] = "执行 %1\$s 于新打开的窗口"; +$net2ftp_messages["This file is not accessible from the web"] = "This file is not accessible from the web"; + +// printDirectorySelect() +$net2ftp_messages["Double-click to go to a subdirectory:"] = "双击打开下级目录:"; +$net2ftp_messages["Choose"] = "选择"; +$net2ftp_messages["Up"] = "向上"; + +} // end browse + + +// ------------------------------------------------------------------------- +// Calculate size module +if ($net2ftp_globals["state"] == "calculatesize") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Size of selected directories and files"] = "所选的目录和文件容量大小"; +$net2ftp_messages["The total size taken by the selected directories and files is:"] = "所选的目录和文件所占的容量大小:"; +$net2ftp_messages["The number of files which were skipped is:"] = "The number of files which were skipped is:"; + +} // end calculatesize + + +// ------------------------------------------------------------------------- +// Chmod module +if ($net2ftp_globals["state"] == "chmod") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Chmod directories and files"] = "修改目录和文件权限"; +$net2ftp_messages["Set all permissions"] = "设置所有权限"; +$net2ftp_messages["Read"] = "读取"; +$net2ftp_messages["Write"] = "写入"; +$net2ftp_messages["Execute"] = "执行"; +$net2ftp_messages["Owner"] = "拥有者"; +$net2ftp_messages["Group"] = "组"; +$net2ftp_messages["Everyone"] = "任何人"; +$net2ftp_messages["To set all permissions to the same values, enter those permissions and click on the button \"Set all permissions\""] = "设置所有的权限为相同值, 在上面中输入需要的权限,然后点击按钮 \"设置所有权限\""; +$net2ftp_messages["Set the permissions of directory %1\$s to: "] = "设置目录 %1\$s 的权限为: "; +$net2ftp_messages["Set the permissions of file %1\$s to: "] = "设置文件 %1\$s 的权限为: "; +$net2ftp_messages["Set the permissions of symlink %1\$s to: "] = "设置链接 %1\$s 的权限为: "; +$net2ftp_messages["Chmod value"] = "权限值"; +$net2ftp_messages["Chmod also the subdirectories within this directory"] = "也设置此目录里的子目录的权限"; +$net2ftp_messages["Chmod also the files within this directory"] = "也设置此目录里的文件的权限"; +$net2ftp_messages["The chmod nr %1\$s is out of the range 000-777. Please try again."] = "输入的权限值 %1\$s 超出可用的范围 000-777. 请重试."; + +} // end chmod + + +// ------------------------------------------------------------------------- +// Clear cookies module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// Copy/Move/Delete module +if ($net2ftp_globals["state"] == "copymovedelete") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Choose a directory"] = "选择一个目录"; +$net2ftp_messages["Copy directories and files"] = "复制目录和文件"; +$net2ftp_messages["Move directories and files"] = "移动目录和文件"; +$net2ftp_messages["Delete directories and files"] = "删除目录和文件"; +$net2ftp_messages["Are you sure you want to delete these directories and files?"] = "确定要删除这些目录和文件?"; +$net2ftp_messages["All the subdirectories and files of the selected directories will also be deleted!"] = "所有所选的目录里的子目录和文件的内容也都将被删除!"; +$net2ftp_messages["Set all targetdirectories"] = "设置所有的目标目录"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "设置一个一般的目录, 在上面的输入框中输入目标目录的名称,然后点击按钮 \"设置所有的目标目录\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "注意: 在复制任何内容之前,必须保证目标目录已经存在."; +$net2ftp_messages["Different target FTP server:"] = "不同的目标FTP服务器:"; +$net2ftp_messages["Username"] = "用户名"; +$net2ftp_messages["Password"] = "密码"; +$net2ftp_messages["Leave empty if you want to copy the files to the same FTP server."] = "如果你要复制到相同的FTP服务器上,请留空."; +$net2ftp_messages["If you want to copy the files to another FTP server, enter your login data."] = "如果你要复制这些文件到其他其他FTP服务器, 请输入你的登入信息."; +$net2ftp_messages["Leave empty if you want to move the files to the same FTP server."] = "如果你要移动到相同的FTP服务器上,请留空."; +$net2ftp_messages["If you want to move the files to another FTP server, enter your login data."] = "如果你要移动这些文件到其他FTP服务器,请输入你的登入信息."; +$net2ftp_messages["Copy directory %1\$s to:"] = "复制目录 %1\$s 到:"; +$net2ftp_messages["Move directory %1\$s to:"] = "移动目录 %1\$s 到:"; +$net2ftp_messages["Directory %1\$s"] = "目录 %1\$s"; +$net2ftp_messages["Copy file %1\$s to:"] = "复制文件 %1\$s 到:"; +$net2ftp_messages["Move file %1\$s to:"] = "移动文件 %1\$s 到:"; +$net2ftp_messages["File %1\$s"] = "文件 %1\$s"; +$net2ftp_messages["Copy symlink %1\$s to:"] = "复制链接 %1\$s 到:"; +$net2ftp_messages["Move symlink %1\$s to:"] = "移动链接 %1\$s 到:"; +$net2ftp_messages["Symlink %1\$s"] = "链接 %1\$s"; +$net2ftp_messages["Target directory:"] = "目标目录:"; +$net2ftp_messages["Target name:"] = "目标名称:"; +$net2ftp_messages["Processing the entries:"] = "处理以下输入:"; + +} // end copymovedelete + + +// ------------------------------------------------------------------------- +// Download file module +// ------------------------------------------------------------------------- +// No messages + + +// ------------------------------------------------------------------------- +// EasyWebsite module +if ($net2ftp_globals["state"] == "easyWebsite") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create a website in 4 easy steps"] = "Create a website in 4 easy steps"; +$net2ftp_messages["Template overview"] = "Template overview"; +$net2ftp_messages["Template details"] = "Template details"; +$net2ftp_messages["Files are copied"] = "Files are copied"; +$net2ftp_messages["Edit your pages"] = "Edit your pages"; + +// Screen 1 - printTemplateOverview +$net2ftp_messages["Click on the image to view the details of a template."] = "Click on the image to view the details of a template."; +$net2ftp_messages["Back to the Browse screen"] = "Back to the Browse screen"; +$net2ftp_messages["Template"] = "Template"; +$net2ftp_messages["Copyright"] = "Copyright"; +$net2ftp_messages["Click on the image to view the details of this template"] = "Click on the image to view the details of this template"; + +// Screen 2 - printTemplateDetails +$net2ftp_messages["The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"] = "The template files will be copied to your FTP server. Existing files with the same filename will be overwritten. Do you want to continue?"; +$net2ftp_messages["Install template to directory: "] = "Install template to directory: "; +$net2ftp_messages["Install"] = "Install"; +$net2ftp_messages["Size"] = "大小"; +$net2ftp_messages["Preview page"] = "Preview page"; +$net2ftp_messages["opens in a new window"] = "opens in a new window"; + +// Screen 3 +$net2ftp_messages["Please wait while the template files are being transferred to your server: "] = "Please wait while the template files are being transferred to your server: "; +$net2ftp_messages["Done."] = "Done."; +$net2ftp_messages["Continue"] = "Continue"; + +// Screen 4 - printEasyAdminPanel +$net2ftp_messages["Edit page"] = "Edit page"; +$net2ftp_messages["Browse the FTP server"] = "Browse the FTP server"; +$net2ftp_messages["Add this link to your favorites to return to this page later on!"] = "Add this link to your favorites to return to this page later on!"; +$net2ftp_messages["Edit website at %1\$s"] = "Edit website at %1\$s"; +$net2ftp_messages["Internet Explorer: right-click on the link and choose \"Add to Favorites...\""] = "Internet Explorer: 右键点击链接,然后选择 \"Add to Favorites...\""; +$net2ftp_messages["Netscape, Mozilla, Firefox: right-click on the link and choose \"Bookmark This Link...\""] = "Netscape, Mozilla, Firefox: 右键点击链接,然后选择 \"Bookmark This Link...\""; + +// ftp_copy_local2ftp +$net2ftp_messages["WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."] = "WARNING: Unable to create the subdirectory %1\$s. It may already exist. Continuing..."; +$net2ftp_messages["Created target subdirectory %1\$s"] = "Created target subdirectory %1\$s"; +$net2ftp_messages["WARNING: Unable to copy the file %1\$s. Continuing..."] = "WARNING: Unable to copy the file %1\$s. Continuing..."; +$net2ftp_messages["Copied file %1\$s"] = "Copied file %1\$s"; +} + + +// ------------------------------------------------------------------------- +// Edit module +if ($net2ftp_globals["state"] == "edit") { +// ------------------------------------------------------------------------- + +// /modules/edit/edit.inc.php +$net2ftp_messages["Unable to open the template file"] = "无法打开暂存文件"; +$net2ftp_messages["Unable to read the template file"] = "无法读取暂存文件"; +$net2ftp_messages["Please specify a filename"] = "请确认一个文件名"; +$net2ftp_messages["Status: This file has not yet been saved"] = "状态: 此文件未保存"; +$net2ftp_messages["Status: Saved on %1\$s using mode %2\$s"] = "状态: 保存在 %1\$s 使用模式 %2\$s"; +$net2ftp_messages["Status: This file could not be saved"] = "状态: 此文件无法被保存"; +$net2ftp_messages["Not yet saved"] = "Not yet saved"; +$net2ftp_messages["Could not be saved"] = "Could not be saved"; +$net2ftp_messages["Saved at %1\$s"] = "Saved at %1\$s"; + +// /skins/[skin]/edit.template.php +$net2ftp_messages["Directory: "] = "目录: "; +$net2ftp_messages["File: "] = "文件: "; +$net2ftp_messages["New file name: "] = "新文件名: "; +$net2ftp_messages["Character encoding: "] = "Character encoding: "; +$net2ftp_messages["Note: changing the textarea type will save the changes"] = "注意: 改变文本输入类型将会保存改动"; +$net2ftp_messages["Copy up"] = "Copy up"; +$net2ftp_messages["Copy down"] = "Copy down"; + +} // end if edit + + +// ------------------------------------------------------------------------- +// Find string module +if ($net2ftp_globals["state"] == "findstring") { +// ------------------------------------------------------------------------- + +// /modules/findstring/findstring.inc.php +$net2ftp_messages["Search directories and files"] = "搜索目录和文件"; +$net2ftp_messages["Search again"] = "重新搜索"; +$net2ftp_messages["Search results"] = "搜索结果为"; +$net2ftp_messages["Please enter a valid search word or phrase."] = "请输入正确的词汇或者词组."; +$net2ftp_messages["Please enter a valid filename."] = "请输入正确的文件名称."; +$net2ftp_messages["Please enter a valid file size in the \"from\" textbox, for example 0."] = "请输入正确的文件大小在 \"从\" 输入框, 如0."; +$net2ftp_messages["Please enter a valid file size in the \"to\" textbox, for example 500000."] = "请输入正确的文件大小在 \"到\" 输入框, 如500000."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"from\" textbox."] = "请输入正确的日期 Y-m-d 格式在 \"从\" 输入框."; +$net2ftp_messages["Please enter a valid date in Y-m-d format in the \"to\" textbox."] = "请输入正确的日期 Y-m-d 格式在 \"到\" 输入框."; +$net2ftp_messages["The word %1\$s was not found in the selected directories and files."] = "词汇%1\$s 没有在所选的目录和文件中找到."; +$net2ftp_messages["The word %1\$s was found in the following files:"] = "词汇 %1\$s 出现在以下文件中:"; + +// /skins/[skin]/findstring1.template.php +$net2ftp_messages["Search for a word or phrase"] = "查找词汇或者词组"; +$net2ftp_messages["Case sensitive search"] = "大小写字母有区别"; +$net2ftp_messages["Restrict the search to:"] = "限制查询范围为:"; +$net2ftp_messages["files with a filename like"] = "文件名称类似"; +$net2ftp_messages["(wildcard character is *)"] = "(取代 字符是 *)"; +$net2ftp_messages["files with a size"] = "文件大小"; +$net2ftp_messages["files which were last modified"] = "文件被最新修改"; +$net2ftp_messages["from"] = "从"; +$net2ftp_messages["to"] = "到"; + +$net2ftp_messages["Directory"] = "目录"; +$net2ftp_messages["File"] = "文件"; +$net2ftp_messages["Line"] = "Line"; +$net2ftp_messages["Action"] = "Action"; +$net2ftp_messages["View"] = "查看"; +$net2ftp_messages["Edit"] = "编辑"; +$net2ftp_messages["View the highlighted source code of file %1\$s"] = "查看有语法高亮显示的文件 %1\$s"; +$net2ftp_messages["Edit the source code of file %1\$s"] = "编辑文件 %1\$s 的源代码"; + +} // end findstring + + +// ------------------------------------------------------------------------- +// Help module +// ------------------------------------------------------------------------- +// No messages yet + + +// ------------------------------------------------------------------------- +// Install size module +if ($net2ftp_globals["state"] == "install") { +// ------------------------------------------------------------------------- + +// /modules/install/install.inc.php +$net2ftp_messages["Install software packages"] = "Install software packages"; +$net2ftp_messages["Unable to open the template file"] = "无法打开暂存文件"; +$net2ftp_messages["Unable to read the template file"] = "无法读取暂存文件"; +$net2ftp_messages["Unable to get the list of packages"] = "Unable to get the list of packages"; + +// /skins/blue/install1.template.php +$net2ftp_messages["The net2ftp installer script has been copied to the FTP server."] = "The net2ftp installer script has been copied to the FTP server."; +$net2ftp_messages["This script runs on your web server and requires PHP to be installed."] = "This script runs on your web server and requires PHP to be installed."; +$net2ftp_messages["In order to run it, click on the link below."] = "In order to run it, click on the link below."; +$net2ftp_messages["net2ftp has tried to determine the directory mapping between the FTP server and the web server."] = "net2ftp has tried to determine the directory mapping between the FTP server and the web server."; +$net2ftp_messages["Should this link not be correct, enter the URL manually in your web browser."] = "Should this link not be correct, enter the URL manually in your web browser."; + +} // end install + + +// ------------------------------------------------------------------------- +// Java upload module +if ($net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload directories and files using a Java applet"] = "Upload directories and files using a Java applet"; +$net2ftp_messages["Your browser does not support applets, or you have disabled applets in your browser settings."] = "Your browser does not support applets, or you have disabled applets in your browser settings."; +$net2ftp_messages["To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."] = "To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now."; +$net2ftp_messages["The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."] = "The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment)."; +$net2ftp_messages["Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."] = "Alternatively, use net2ftp's normal upload or upload-and-unzip functionality."; + +} // end jupload + + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Login!"] = "Login!"; +$net2ftp_messages["Once you are logged in, you will be able to:"] = "Once you are logged in, you will be able to:"; +$net2ftp_messages["Navigate the FTP server"] = "Navigate the FTP server"; +$net2ftp_messages["Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."] = "Once you have logged in, you can browse from directory to directory and see all the subdirectories and files."; +$net2ftp_messages["Upload files"] = "Upload files"; +$net2ftp_messages["There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."] = "There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet."; +$net2ftp_messages["Download files"] = "Download files"; +$net2ftp_messages["Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."] = "Click on a filename to quickly download one file.
Select multiple files and click on Download; the selected files will be downloaded in a zip archive."; +$net2ftp_messages["Zip files"] = "Zip files"; +$net2ftp_messages["... and save the zip archive on the FTP server, or email it to someone."] = "... and save the zip archive on the FTP server, or email it to someone."; +$net2ftp_messages["Unzip files"] = "Unzip files"; +$net2ftp_messages["Different formats are supported: .zip, .tar, .tgz and .gz."] = "Different formats are supported: .zip, .tar, .tgz and .gz."; +$net2ftp_messages["Install software"] = "Install software"; +$net2ftp_messages["Choose from a list of popular applications (PHP required)."] = "Choose from a list of popular applications (PHP required)."; +$net2ftp_messages["Copy, move and delete"] = "Copy, move and delete"; +$net2ftp_messages["Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."] = "Directories are handled recursively, meaning that their content (subdirectories and files) will also be copied, moved or deleted."; +$net2ftp_messages["Copy or move to a 2nd FTP server"] = "Copy or move to a 2nd FTP server"; +$net2ftp_messages["Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."] = "Handy to import files to your FTP server, or to export files from your FTP server to another FTP server."; +$net2ftp_messages["Rename and chmod"] = "Rename and chmod"; +$net2ftp_messages["Chmod handles directories recursively."] = "Chmod handles directories recursively."; +$net2ftp_messages["View code with syntax highlighting"] = "View code with syntax highlighting"; +$net2ftp_messages["PHP functions are linked to the documentation on php.net."] = "PHP functions are linked to the documentation on php.net."; +$net2ftp_messages["Plain text editor"] = "Plain text editor"; +$net2ftp_messages["Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."] = "Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server."; +$net2ftp_messages["HTML editors"] = "HTML editors"; +$net2ftp_messages["Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."] = "Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from."; +$net2ftp_messages["Code editor"] = "Code editor"; +$net2ftp_messages["Edit HTML and PHP in an editor with syntax highlighting."] = "Edit HTML and PHP in an editor with syntax highlighting."; +$net2ftp_messages["Search for words or phrases"] = "Search for words or phrases"; +$net2ftp_messages["Filter out files based on the filename, last modification time and filesize."] = "Filter out files based on the filename, last modification time and filesize."; +$net2ftp_messages["Calculate size"] = "Calculate size"; +$net2ftp_messages["Calculate the size of directories and files."] = "Calculate the size of directories and files."; + +$net2ftp_messages["FTP server"] = "FTP 服务器"; +$net2ftp_messages["Example"] = "例子"; +$net2ftp_messages["Port"] = "Port"; +$net2ftp_messages["Protocol"] = "Protocol"; +$net2ftp_messages["Username"] = "用户名"; +$net2ftp_messages["Password"] = "密码"; +$net2ftp_messages["Anonymous"] = "匿名"; +$net2ftp_messages["Passive mode"] = "Passive 模式"; +$net2ftp_messages["Initial directory"] = "初始目录"; +$net2ftp_messages["Language"] = "语言"; +$net2ftp_messages["Skin"] = "皮肤"; +$net2ftp_messages["FTP mode"] = "FTP 模式"; +$net2ftp_messages["Automatic"] = "Automatic"; +$net2ftp_messages["Login"] = "登入"; +$net2ftp_messages["Clear cookies"] = "清除cookies"; +$net2ftp_messages["Admin"] = "Admin"; +$net2ftp_messages["Please enter an FTP server."] = "Please enter an FTP server."; +$net2ftp_messages["Please enter a username."] = "Please enter a username."; +$net2ftp_messages["Please enter a password."] = "Please enter a password."; + +} // end login + + +// ------------------------------------------------------------------------- +// Login module +if ($net2ftp_globals["state"] == "login_small") { +// ------------------------------------------------------------------------- + +$net2ftp_messages["Please enter your Administrator username and password."] = "Please enter your Administrator username and password."; +$net2ftp_messages["Please enter your username and password for FTP server %1\$s."] = "Please enter your username and password for FTP server %1\$s."; +$net2ftp_messages["Username"] = "用户名"; +$net2ftp_messages["Your session has expired; please enter your password for FTP server %1\$s to continue."] = "Your session has expired; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Your IP address has changed; please enter your password for FTP server %1\$s to continue."] = "Your IP address has changed; please enter your password for FTP server %1\$s to continue."; +$net2ftp_messages["Password"] = "密码"; +$net2ftp_messages["Login"] = "登入"; +$net2ftp_messages["Continue"] = "Continue"; + +} // end login_small + + +// ------------------------------------------------------------------------- +// Logout module +if ($net2ftp_globals["state"] == "logout") { +// ------------------------------------------------------------------------- + +// logout.inc.php +$net2ftp_messages["Login page"] = "Login page"; + +// logout.template.php +$net2ftp_messages["You have logged out from the FTP server. To log back in, follow this link."] = "You have logged out from the FTP server. To log back in, follow this link."; +$net2ftp_messages["Note: other users of this computer could click on the browser's Back button and access the FTP server."] = "Note: other users of this computer could click on the browser's Back button and access the FTP server."; +$net2ftp_messages["To prevent this, you must close all browser windows."] = "To prevent this, you must close all browser windows."; +$net2ftp_messages["Close"] = "Close"; +$net2ftp_messages["Click here to close this window"] = "Click here to close this window"; + +} // end logout + + +// ------------------------------------------------------------------------- +// New directory module +if ($net2ftp_globals["state"] == "newdir") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Create new directories"] = "新建目录"; +$net2ftp_messages["The new directories will be created in %1\$s."] = "新目录将创建在 %1\$s."; +$net2ftp_messages["New directory name:"] = "新目录名称:"; +$net2ftp_messages["Directory %1\$s was successfully created."] = "目录 %1\$s 被成功创建."; +$net2ftp_messages["Directory %1\$s could not be created."] = "Directory %1\$s could not be created."; + +} // end newdir + + +// ------------------------------------------------------------------------- +// Raw module +if ($net2ftp_globals["state"] == "raw") { +// ------------------------------------------------------------------------- + +// /modules/raw/raw.inc.php +$net2ftp_messages["Send arbitrary FTP commands"] = "Send arbitrary FTP commands"; + + +// /skins/[skin]/raw1.template.php +$net2ftp_messages["List of commands:"] = "List of commands:"; +$net2ftp_messages["FTP server response:"] = "FTP server response:"; + +} // end raw + + +// ------------------------------------------------------------------------- +// Rename module +if ($net2ftp_globals["state"] == "rename") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Rename directories and files"] = "重命名目录和文件"; +$net2ftp_messages["Old name: "] = "旧名称: "; +$net2ftp_messages["New name: "] = "新名称: "; +$net2ftp_messages["The new name may not contain any dots. This entry was not renamed to %1\$s"] = "新名称不能含有点号. 无法被重命名为 %1\$s"; +$net2ftp_messages["The new name may not contain any banned keywords. This entry was not renamed to %1\$s"] = "The new name may not contain any banned keywords. This entry was not renamed to %1\$s"; +$net2ftp_messages["%1\$s was successfully renamed to %2\$s"] = "%1\$s 被成功重命名为 %2\$s"; +$net2ftp_messages["%1\$s could not be renamed to %2\$s"] = "%1\$s 无法被重命名为 %2\$s"; + +} // end rename + + +// ------------------------------------------------------------------------- +// Unzip module +if ($net2ftp_globals["state"] == "unzip") { +// ------------------------------------------------------------------------- + +// /modules/unzip/unzip.inc.php +$net2ftp_messages["Unzip archives"] = "Unzip archives"; +$net2ftp_messages["Getting archive %1\$s of %2\$s from the FTP server"] = "Getting archive %1\$s of %2\$s from the FTP server"; +$net2ftp_messages["Unable to get the archive %1\$s from the FTP server"] = "Unable to get the archive %1\$s from the FTP server"; + +// /skins/[skin]/unzip1.template.php +$net2ftp_messages["Set all targetdirectories"] = "设置所有的目标目录"; +$net2ftp_messages["To set a common target directory, enter that target directory in the textbox above and click on the button \"Set all targetdirectories\"."] = "设置一个一般的目录, 在上面的输入框中输入目标目录的名称,然后点击按钮 \"设置所有的目标目录\"."; +$net2ftp_messages["Note: the target directory must already exist before anything can be copied into it."] = "注意: 在复制任何内容之前,必须保证目标目录已经存在."; +$net2ftp_messages["Unzip archive %1\$s to:"] = "Unzip archive %1\$s to:"; +$net2ftp_messages["Target directory:"] = "目标目录:"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "使用的目录名 (子目录自动被创建)"; + +} // end unzip + + +// ------------------------------------------------------------------------- +// Upload module +if ($net2ftp_globals["state"] == "upload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Upload to directory:"] = "上传到目录:"; +$net2ftp_messages["Files"] = "文件"; +$net2ftp_messages["Archives"] = "压缩文件"; +$net2ftp_messages["Files entered here will be transferred to the FTP server."] = "在这里输入的文件将被传送到FTP服务器."; +$net2ftp_messages["Archives entered here will be decompressed, and the files inside will be transferred to the FTP server."] = "在这里输入的压缩文件将被解压缩, 文档里的文件将被上传到FTP服务器."; +$net2ftp_messages["Add another"] = "Add another"; +$net2ftp_messages["Use folder names (creates subdirectories automatically)"] = "使用的目录名 (子目录自动被创建)"; + +$net2ftp_messages["Choose a directory"] = "选择一个目录"; +$net2ftp_messages["Please wait..."] = "请稍候..."; +$net2ftp_messages["Uploading... please wait..."] = "上传中... 请稍候..."; +$net2ftp_messages["If the upload takes more than the allowed %1\$s seconds<\/b>, you will have to try again with less/smaller files."] = "如果上传的时间超过允许的时间 %1\$s 秒<\/b>, 你可以把文件减小后再试一试."; +$net2ftp_messages["This window will close automatically in a few seconds."] = "此窗口将在几秒钟后自动关闭."; +$net2ftp_messages["Close window now"] = "现在关闭窗口"; + +$net2ftp_messages["Upload files and archives"] = "上传文件和压缩文档"; +$net2ftp_messages["Upload results"] = "上传的结果"; +$net2ftp_messages["Checking files:"] = "查看文件:"; +$net2ftp_messages["Transferring files to the FTP server:"] = "正将文件传送到服务器中:"; +$net2ftp_messages["Decompressing archives and transferring files to the FTP server:"] = "解压缩文件并传送到FTP服务器上:"; +$net2ftp_messages["Upload more files and archives"] = "上传更多的文件和压缩文档"; + +} // end upload + + +// ------------------------------------------------------------------------- +// Messages which are shared by upload and jupload +if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "jupload") { +// ------------------------------------------------------------------------- +$net2ftp_messages["Restrictions:"] = "限制:"; +$net2ftp_messages["The maximum size of one file is restricted by net2ftp to %1\$s and by PHP to %2\$s"] = "文件的最大容量受net2ftp 限制为 %1\$s 和受PHP限制为 %2\$s"; +$net2ftp_messages["The maximum execution time is %1\$s seconds"] = "最长的执行时间为 %1\$s 秒"; +$net2ftp_messages["The FTP transfer mode (ASCII or BINARY) will be automatically determined, based on the filename extension"] = "根据文件扩展名,将自动选择FTP模式 (ASCII 或者 BINARY) "; +$net2ftp_messages["If the destination file already exists, it will be overwritten"] = "如果目标文件已经存在,它将被覆盖"; + +} // end upload or jupload + + +// ------------------------------------------------------------------------- +// View module +if ($net2ftp_globals["state"] == "view") { +// ------------------------------------------------------------------------- + +// /modules/view/view.inc.php +$net2ftp_messages["View file %1\$s"] = "查看文件 %1\$s"; +$net2ftp_messages["View image %1\$s"] = "查看图像 %1\$s"; +$net2ftp_messages["View Macromedia ShockWave Flash movie %1\$s"] = "查看Macromedia ShockWave Flash 影片 %1\$s"; +$net2ftp_messages["Image"] = "图像"; + +// /skins/[skin]/view1.template.php +$net2ftp_messages["Syntax highlighting powered by Luminous"] = "Syntax highlighting powered by Luminous"; +$net2ftp_messages["To save the image, right-click on it and choose 'Save picture as...'"] = "保存图像, 右键点击它, 选择 '保存图像为...'"; + +} // end view + + +// ------------------------------------------------------------------------- +// Zip module +if ($net2ftp_globals["state"] == "zip") { +// ------------------------------------------------------------------------- + +// /modules/zip/zip.inc.php +$net2ftp_messages["Zip entries"] = "Zip 输入"; + +// /skins/[skin]/zip1.template.php +$net2ftp_messages["Save the zip file on the FTP server as:"] = "保存zip文件到FTP服务器中为:"; +$net2ftp_messages["Email the zip file in attachment to:"] = "把zip文件作为邮件附件发送到:"; +$net2ftp_messages["Note that sending files is not anonymous: your IP address as well as the time of the sending will be added to the email."] = "注意发送文件不是匿名发送: 你的IP地址和发送日期将会自动加入到邮件里."; +$net2ftp_messages["Some additional comments to add in the email:"] = "添加到电子邮件里的一些说明:"; + +$net2ftp_messages["You did not enter a filename for the zipfile. Go back and enter a filename."] = "没有为zip文件命名. 退回并命名."; +$net2ftp_messages["The email address you have entered (%1\$s) does not seem to be valid.
Please enter an address in the format username@domain.com"] = "你输入的邮件地址 (%1\$s) 格式不正确.
请输入类似以下格式的邮件地址 username@domain.com"; + +} // end zip + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/main.inc.php b/ehcp/net2ftp/main.inc.php new file mode 100644 index 0000000..bacefed --- /dev/null +++ b/ehcp/net2ftp/main.inc.php @@ -0,0 +1,493 @@ + Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + + if ($action == "sendHttpHeaders") { + +// 1. Libraries which are always needed + require_once($net2ftp_globals["application_includesdir"] . "/authorizations.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/consumption.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/database.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/errorhandling.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/filesystem.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/html.inc.php"); + require_once($net2ftp_globals["application_includesdir"] . "/StonePhpSafeCrypt.php"); + require_once($net2ftp_globals["application_languagesdir"] . "/languages.inc.php"); + require_once($net2ftp_globals["application_skinsdir"] . "/skins.inc.php"); + +// 1. Define functions which are used, but which did not exist before PHP version 4.3.0 + if (version_compare(phpversion(), "4.3.0", "<")) { + require_once($net2ftp_globals["application_includesdir"] . "/before430.inc.php"); + } + +// 2. Register global variables (POST, GET, GLOBAL, ...) + require_once($net2ftp_globals["application_includesdir"] . "/registerglobals.inc.php"); + +// 3. Function libraries which are needed depending on certain variables + if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "unzip") { + require_once($net2ftp_globals["application_includesdir"] . "/pclerror.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pcltar.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pcltrace.lib.php"); + require_once($net2ftp_globals["application_includesdir"] . "/pclzip.lib.php"); + } + if ($net2ftp_globals["state"] == "advanced_ftpserver" || $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || $net2ftp_globals["state"] == "browse" || + $net2ftp_globals["state"] == "copymovedelete" || $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "calculatesize" || $net2ftp_globals["state"] == "downloadzip" || + $net2ftp_globals["state"] == "findstring" || $net2ftp_globals["state"] == "followsymlink" || + $net2ftp_globals["state"] == "install" || $net2ftp_globals["state"] == "zip") { + require_once($net2ftp_globals["application_includesdir"] . "/browse.inc.php"); + } + if ($net2ftp_globals["state"] == "downloadzip" || $net2ftp_globals["state"] == "zip") { + require_once($net2ftp_globals["application_includesdir"] . "/zip.lib.php"); + } + +// 4. Load the plugins + require_once($net2ftp_globals["application_pluginsdir"] . "/plugins.inc.php"); + $net2ftp_globals["activePlugins"] = getActivePlugins(); + net2ftp_plugin_includePhpFiles(); + +// 5. Load the language file + includeLanguageFile(); + + } + +// ------------------------------------------------------------------------- +// Execute function shutdown() if the script reaches the maximum execution time (usually 30 seconds) +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + register_shutdown_function("net2ftp_shutdown"); + } + +// ------------------------------------------------------------------------- +// Log access +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + logAccess(); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Check authorizations +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders" && $net2ftp_settings["check_authorization"] == "yes" && $net2ftp_globals["ftpserver"] != "") { + checkAuthorization($net2ftp_globals["ftpserver"], $net2ftp_globals["ftpserverport"], $net2ftp_globals["directory"], $net2ftp_globals["username"]); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Get the consumption counter values from the database +// This retrieves the consumption of network and server resources for the +// current IP address and FTP server from the database, and stores these +// values in global variables. See /includes/consumption.inc.php for the details. +// --> Do this only once, when $action == "sendHttpHeaders" +// ------------------------------------------------------------------------- + if ($action == "sendHttpHeaders") { + getConsumption(); + if ($net2ftp_result["success"] == false) { + logError(); + return false; + } + } + +// ------------------------------------------------------------------------- +// Execute the action! +// ------------------------------------------------------------------------- + +// ------------------------------------ +// For most modules, everything must be done: send headers, print body, etc +// ------------------------------------ + if ($net2ftp_globals["state"] == "admin" || + $net2ftp_globals["state"] == "admin_createtables" || + $net2ftp_globals["state"] == "admin_emptylogs" || + $net2ftp_globals["state"] == "admin_viewlogs" || + $net2ftp_globals["state"] == "advanced" || + $net2ftp_globals["state"] == "advanced_ftpserver" || + $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || + $net2ftp_globals["state"] == "bookmark" || + $net2ftp_globals["state"] == "browse" || + $net2ftp_globals["state"] == "calculatesize" || + $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "copymovedelete" || + $net2ftp_globals["state"] == "edit" || + $net2ftp_globals["state"] == "findstring" || + $net2ftp_globals["state"] == "install" || + ($net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 1) || + $net2ftp_globals["state"] == "login" || + $net2ftp_globals["state"] == "login_small" || + $net2ftp_globals["state"] == "logout" || + $net2ftp_globals["state"] == "newdir" || + $net2ftp_globals["state"] == "raw" || + $net2ftp_globals["state"] == "rename" || + $net2ftp_globals["state"] == "unzip" || + $net2ftp_globals["state"] == "upload" || + ($net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] == "") || + $net2ftp_globals["state"] == "zip") { + + require_once($net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"); + + if ($action == "sendHttpHeaders") { + net2ftp_module_sendHttpHeaders(); + + // If needed, exit to avoid sending non-header output (by net2ftp or other application) + // Example: if a module sends a HTTP redirect header (See /includes/authorizations.inc.php function checkAdminUsernamePassword()!) + if ($net2ftp_result["exit"] == true) { exit(); } + + } + elseif ($action == "printJavascript") { + net2ftp_module_printJavascript(); + net2ftp_plugin_printJavascript(); + } + elseif ($action == "printCss") { + net2ftp_module_printCss(); + net2ftp_plugin_printCss(); + } + elseif ($action == "printBodyOnload") { + net2ftp_module_printBodyOnload(); + net2ftp_plugin_printBodyOnload(); + } + elseif ($action == "printBody") { + + // Print the status bar to be able to show the progress + if (isStatusbarActive() == true) { + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/statusbar.template.php"); + } + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/status/status.inc.php"); + + // Do the work and meanwhile update the progress bar + net2ftp_module_printBody(); + + // Update the consumption statistics + $net2ftp_globals["endtime"] = microtime(); + $net2ftp_globals["time_taken"] = timer(); + addConsumption(0, $net2ftp_globals["time_taken"]); + putConsumption(); + + // Set the progress bar to "finished" + if (isStatusbarActive() == true) { + $statusmessage = __("Script finished in %1\$s seconds", $net2ftp_globals["time_taken"]); + setStatus(1, 1, $statusmessage); + } + } + } + +// ------------------------------------ +// For some modules, only headers must be sent +// ------------------------------------ + elseif ($net2ftp_globals["state"] == "clearcookies" || + $net2ftp_globals["state"] == "downloadfile" || + $net2ftp_globals["state"] == "downloadzip" || + $net2ftp_globals["state"] == "followsymlink" || + ($net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 2) || + ($net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] != "")) { + require_once($net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"); + if ($action == "sendHttpHeaders") { + + // Do the work - do not update the progress bar + net2ftp_module_sendHttpHeaders(); + + // Update the consumption statistics + $net2ftp_globals["endtime"] = microtime(); + $net2ftp_globals["time_taken"] = timer(); + addConsumption(0, $net2ftp_globals["time_taken"]); + putConsumption(); + + // Exit to avoid sending non-header output (by net2ftp or other application) + exit(); + + } + elseif ($action == "printJavascript") { } + elseif ($action == "printCss") { } + elseif ($action == "printBodyOnload") { } + elseif ($action == "printBody") { } + } + elseif ($net2ftp_globals["state"] == "error") { + logError(); + return false; + } + else { + $errormessage = __("Unexpected state string: %1\$s. Exiting.", $net2ftp_globals["state"]); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + logError(); + return false; + } + +} // end function net2ftp_main + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function isStatusbarActive() { + +// -------------- +// This function returns if the status bar should be shown or not, depending +// on the state and state2 variables +// -------------- + + global $net2ftp_globals; + +// If $net2ftp_globals["isStatusbarActive"] is not yet filled, calculate its value +// and fill it in + if (isset($net2ftp_globals["isStatusbarActive"]) == false) { + if ($net2ftp_globals["skin"] == "openlaszlo") { $net2ftp_globals["isStatusbarActive"] = false; } + elseif ( + $net2ftp_globals["state"] == "admin" || + $net2ftp_globals["state"] == "admin_createtables" || + $net2ftp_globals["state"] == "admin_emptylogs" || + $net2ftp_globals["state"] == "admin_viewlogs" || + $net2ftp_globals["state"] == "advanced" || + $net2ftp_globals["state"] == "advanced_ftpserver" || + $net2ftp_globals["state"] == "advanced_parsing" || + $net2ftp_globals["state"] == "advanced_webserver" || + $net2ftp_globals["state"] == "bookmark" || + ($net2ftp_globals["state"] == "browse" && $net2ftp_globals["state2"] == "main") || + $net2ftp_globals["state"] == "calculatesize" || + $net2ftp_globals["state"] == "chmod" || + $net2ftp_globals["state"] == "copymovedelete" || + $net2ftp_globals["state"] == "easywebsite" || + $net2ftp_globals["state"] == "findstring" || + $net2ftp_globals["state"] == "install" || + $net2ftp_globals["state"] == "jupload" || + $net2ftp_globals["state"] == "newdir" || + $net2ftp_globals["state"] == "newfile" || + $net2ftp_globals["state"] == "raw" || + $net2ftp_globals["state"] == "rename" || + $net2ftp_globals["state"] == "unzip" || + $net2ftp_globals["state"] == "updatefile" || + $net2ftp_globals["state"] == "upload" || + $net2ftp_globals["state"] == "view" || + $net2ftp_globals["state"] == "zip") { + $net2ftp_globals["isStatusbarActive"] = true; + } + else { + $net2ftp_globals["isStatusbarActive"] = false; + } + } + +// Return the value of $net2ftp_globals["isStatusbarActive"] + return $net2ftp_globals["isStatusbarActive"]; + +} // end function isStatusbarActive + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function stopwatch() { + +// -------------- +// This function prints the total time elapsed, and the time elapsed since the previous call +// -------------- + + global $net2ftp_globals; + +// Now + list($now_usec, $now_sec) = explode(' ', microtime()); + $now = ((float)$now_usec + (float)$now_sec); + +// Initialization + if (isset($net2ftp_globals["stopwatch_starttime"]) == false) { + $net2ftp_globals["stopwatch_starttime"] = $now; + } + if (isset($net2ftp_globals["stopwatch_endtime"]) == false) { + $net2ftp_globals["stopwatch_endtime"] = $now; + } + +// Total time elapsed = now - starttime + $total_elapsed = $now - $net2ftp_globals["stopwatch_starttime"]; + $total_elapsed = number_format($total_elapsed, 4); + +// Time since previous stopwatch = now - previous endtime + $delta_elapsed = $now - $net2ftp_globals["stopwatch_endtime"]; + $delta_elapsed = number_format($delta_elapsed, 4); + +// Set the new value for endtime + $net2ftp_globals["stopwatch_endtime"] = $now; + +// Print $total_elapsed and $delta_elapsed + echo $total_elapsed . " - " . $delta_elapsed . "
\n"; + +} // End function stopwatch() + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/admin/admin.inc.php b/ehcp/net2ftp/modules/admin/admin.inc.php new file mode 100644 index 0000000..afab136 --- /dev/null +++ b/ehcp/net2ftp/modules/admin/admin.inc.php @@ -0,0 +1,189 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/admin_createtables/admin_createtables.inc.php b/ehcp/net2ftp/modules/admin_createtables/admin_createtables.inc.php new file mode 100644 index 0000000..5733346 --- /dev/null +++ b/ehcp/net2ftp/modules/admin_createtables/admin_createtables.inc.php @@ -0,0 +1,264 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s
could not be set up. Please check the database settings you've entered.", $dbserver2_html) . "\n"; } + +// ------------------------------------ +// Select +// ------------------------------------ + if ($mydb != false) { + $mysql_select_db_result = mysql_select_db($dbname2); + if ($mysql_select_db_result == false) { $net2ftp_output["admin_createtables"][] = __("Unable to select the database %1\$s.", $dbserver2_html) . "\n"; } + } + +// ------------------------------------ +// Query +// ------------------------------------ + if ($mydb != false && $mysql_select_db_result != false) { + for ($i=0; $i%1\$s
could not be executed.", $i+1) . "\n"; } + else { $net2ftp_output["admin_createtables"][] = __("The SQL query nr %1\$s was executed successfully.", $i+1) . "\n"; } + } + } + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/admin_createtables/create_tables.sql b/ehcp/net2ftp/modules/admin_createtables/create_tables.sql new file mode 100644 index 0000000..7dcf41b --- /dev/null +++ b/ehcp/net2ftp/modules/admin_createtables/create_tables.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS `net2ftp_log_access`; +CREATE TABLE `net2ftp_log_access` (`id` int(10) unsigned NOT NULL auto_increment,`date` date NOT NULL default '0000-00-00',`time` time NOT NULL default '00:00:00',`remote_addr` text NOT NULL,`remote_port` text NOT NULL,`http_user_agent` text NOT NULL,`page` text NOT NULL,`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',`ftpserver` text NOT NULL,`username` text NOT NULL,`state` text NOT NULL,`state2` text NOT NULL,`screen` text NOT NULL,`directory` text NOT NULL,`entry` text NOT NULL,`http_referer` text NOT NULL,KEY `index1` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `net2ftp_log_error`; +CREATE TABLE `net2ftp_log_error` (`date` date NOT NULL default '0000-00-00',`time` time NOT NULL default '00:00:00',`ftpserver` text NOT NULL,`username` text NOT NULL,`message` text NOT NULL,`backtrace` text NOT NULL,`state` text NOT NULL,`state2` text NOT NULL,`directory` text NOT NULL,`remote_addr` text NOT NULL,`remote_port` text NOT NULL,`http_user_agent` text NOT NULL,KEY `index1` (`date`,`time`,`ftpserver`(100),`username`(50))) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `net2ftp_log_consumption_ftpserver`; +CREATE TABLE `net2ftp_log_consumption_ftpserver`(`date` date NOT NULL default '0000-00-00',`ftpserver` varchar(255) NOT NULL default '0',`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',PRIMARY KEY (`date`,`ftpserver`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `net2ftp_log_consumption_ipaddress`; +CREATE TABLE `net2ftp_log_consumption_ipaddress`(`date` date NOT NULL default '0000-00-00',`ipaddress` varchar(15) NOT NULL default '0',`datatransfer` int(10) unsigned default '0',`executiontime` mediumint(8) unsigned default '0',PRIMARY KEY (`date`,`ipaddress`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `net2ftp_users`; +CREATE TABLE `net2ftp_users` (`ftpserver` varchar(255) NOT NULL default '0',`username` text NOT NULL,`homedirectory` text NOT NULL,KEY `index1` (`ftpserver`,`username`(50))) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `net2ftp_log_status`; +CREATE TABLE `net2ftp_log_status` (`month` varchar(6) NOT NULL, `status` int(3) NOT NULL, `changelog` text NOT NULL, PRIMARY KEY (`month`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/ehcp/net2ftp/modules/admin_emptylogs/admin_emptylogs.inc.php b/ehcp/net2ftp/modules/admin_emptylogs/admin_emptylogs.inc.php new file mode 100644 index 0000000..4316e13 --- /dev/null +++ b/ehcp/net2ftp/modules/admin_emptylogs/admin_emptylogs.inc.php @@ -0,0 +1,207 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/admin_viewlogs/admin_viewlogs.inc.php b/ehcp/net2ftp/modules/admin_viewlogs/admin_viewlogs.inc.php new file mode 100644 index 0000000..9beee0b --- /dev/null +++ b/ehcp/net2ftp/modules/admin_viewlogs/admin_viewlogs.inc.php @@ -0,0 +1,303 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s
.", $sqlquery); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + $nrofrows = mysql_num_rows($result); + $nrofcolumns_withindex = mysql_num_fields($result) + 1; + + +// ------------------------------------------------------------------------- +// Print the table +// ------------------------------------------------------------------------- + +// Table begin + $output = "\n"; + +// First row: SQL query + $output .= "\n"; + + + if ($nrofrows != 0) { +// Second row: header + $row = mysql_fetch_array($result, MYSQL_ASSOC); + $output .= "\n"; + $output .= "\n"; + while(list($fieldname, $fieldvalue) = each($row) ) { $output .= "\n"; } + $output .= "\n"; + mysql_data_seek($result, 0); // reset row pointer to the first row + +// 3rd and next rows: data + $rowcounter = 1; + while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { + $output .= "\n"; + $output .= "\n"; + while(list($fieldname, $fieldvalue) = each($row) ) { $output .= "\n"; } + $output .= "\n"; + $rowcounter++; + } + } + +// If there is no data + else { + $output .= ""; + } + +// Table end + $output .= "
$sqlquery
Index$fieldname
$rowcounter" . htmlEncode2($fieldvalue) . "
" . __("No data") . "
\n"; + +// ------------------------------------------------------------------------- +// Free the $result +// ------------------------------------------------------------------------- + mysql_free_result($result); + + return $output; + +} // End printTable + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/advanced/advanced.inc.php b/ehcp/net2ftp/modules/advanced/advanced.inc.php new file mode 100644 index 0000000..89fc96d --- /dev/null +++ b/ehcp/net2ftp/modules/advanced/advanced.inc.php @@ -0,0 +1,168 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/advanced_ftpserver/advanced_ftpserver.inc.php b/ehcp/net2ftp/modules/advanced_ftpserver/advanced_ftpserver.inc.php new file mode 100644 index 0000000..1f3a4e9 --- /dev/null +++ b/ehcp/net2ftp/modules/advanced_ftpserver/advanced_ftpserver.inc.php @@ -0,0 +1,257 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/advanced_parsing/advanced_parsing.inc.php b/ehcp/net2ftp/modules/advanced_parsing/advanced_parsing.inc.php new file mode 100644 index 0000000..89bf516 --- /dev/null +++ b/ehcp/net2ftp/modules/advanced_parsing/advanced_parsing.inc.php @@ -0,0 +1,203 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the " . $sampleName . "
\n"; +// ------------------------------------ +// Input +// ------------------------------------ + $net2ftp_output["advanced_parsing"][] = "Sample input:
\n"; + for ($i=1; $i<=sizeof($sampleLines); $i++) { + $net2ftp_output["advanced_parsing"][] = "Line $i: " . htmlEncode2($sampleLines[$i]) . "
\n"; + } + $net2ftp_output["advanced_parsing"][] = "
\n"; + +// ------------------------------------ +// Output +// ------------------------------------ + $net2ftp_output["advanced_parsing"][] = "Parsed output:
\n"; + for ($i=1; $i<=sizeof($sampleLines); $i++) { + +// Scan the sample + $outputArray = ftp_scanline("", $sampleLines[$i]); + while(list($fieldName, $fieldValue) = each($outputArray)) { + $net2ftp_output["advanced_parsing"][] = "Line $i: " . $fieldName . ": " . htmlEncode2($fieldValue) . "
\n"; + } // end while + $net2ftp_output["advanced_parsing"][] = "
\n"; + } + $net2ftp_output["advanced_parsing"][] = "

\n"; + } + + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/advanced_parsing/list_samples.inc.php b/ehcp/net2ftp/modules/advanced_parsing/list_samples.inc.php new file mode 100644 index 0000000..e9b9be8 --- /dev/null +++ b/ehcp/net2ftp/modules/advanced_parsing/list_samples.inc.php @@ -0,0 +1,95 @@ + usr/bin"; + +$list_samples["Some listings with uncommon date/time format"][1] = "-rw-r--r-- 1 root other 531 09-26 2000 README2"; +$list_samples["Some listings with uncommon date/time format"][2] = "-rw-r--r-- 1 root other 531 09-26 13:45 README3"; +$list_samples["Some listings with uncommon date/time format"][3] = "-rw-r--r-- 1 root other 531 2005-06-07 21:22 README4"; + +$list_samples["Also produced by Microsoft's FTP servers for Windows"][1] = "---------- 1 owner group 1803128 Jul 10 10:18 ls-lR.Z"; +$list_samples["Also produced by Microsoft's FTP servers for Windows"][2] = "d--------- 1 owner group 0 May 9 19:45 Softlib"; + +$list_samples["Also WFTPD for MSDOS"][1] = "-rwxrwxrwx 1 noone nogroup 322 Aug 19 1996 message.ftp"; + +$list_samples["Also NetWare"][1] = "d [R----F--] supervisor 512 Jan 16 18:53 login"; +$list_samples["Also NetWare"][2] = "- [R----F--] rhesus 214059 Oct 20 15:27 cx.exe"; + +$list_samples["Also NetPresenz for the Mac"][1] = "-------r-- 326 1391972 1392298 Nov 22 1995 MegaPhone.sit"; +$list_samples["Also NetPresenz for the Mac"][2] = "drwxrwxr-x folder 2 May 10 1996 network"; + +$list_samples["MSDOS format"][1] = "04-27-00 09:09PM licensed"; +$list_samples["MSDOS format"][2] = "07-18-00 10:16AM pub"; +$list_samples["MSDOS format"][3] = "04-14-00 03:47PM 589 readme.htm"; + +$list_samples["Some other formats some windows servers send"][1] = "-rw-r--r-- 1 root 531 Jan 29 03:26 README5"; +$list_samples["Some other formats some windows servers send"][2] = "-rw-r--r-- 1 group domain user 531 Jan 29 03:26 README6"; + +$list_samples["EPLF directory listings"][1] = "+i8388621.48594,m825718503,r,s280,\teplf test 1.file"; +$list_samples["EPLF directory listings"][2] = "+i8388621.50690,m824255907,/,\teplf test 2.dir"; +$list_samples["EPLF directory listings"][3] = "+i8388621.48598,m824253270,r,s612,\teplf test 3.file"; + +$list_samples["MSDOS type listing used by IIS"][1] = "04-27-00 12:09PM DOS dir 1"; +$list_samples["MSDOS type listing used by IIS"][2] = "04-14-00 03:47PM 589 DOS file 1"; + +$list_samples["Another type of MSDOS style listings"][1] = "2002-09-02 18:48 DOS dir 2"; +$list_samples["Another type of MSDOS style listings"][2] = "2002-09-02 19:06 9,730 DOS file 2"; + +$list_samples["Numerical Unix style format"][1] = "0100644 500 101 12345 123456789 filename"; + +$list_samples["This one is used by SSH-2.0-VShell_2_1_2_143, this is the old VShell format"][1] = "206876 Apr 04, 2000 21:06 VShell (old)"; +$list_samples["This one is used by SSH-2.0-VShell_2_1_2_143, this is the old VShell format"][2] = "0 Dec 12, 2002 02:13 VShell (old) Dir/"; + +$list_samples["This type of directory listings is sent by some newer versions of VShell both year and time in one line is uncommon."][1] = "-rwxr-xr-x 1 user group 9 Oct 08, 2002 09:47 VShell (new)"; + +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][1] = "36611 A 04-23-103 10:57 OS2 test1.file"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][2] = " 1123 A 07-14-99 12:37 OS2 test2.file"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][3] = " 0 DIR 02-11-103 16:15 OS2 test1.dir"; +$list_samples["Next ones come from an OS/2 server. The server obviously isn't Y2K aware"][4] = " 1123 DIR A 10-05-100 23:38 OS2 test2.dir"; + +$list_samples["Some servers send localized date formats, here the German one"][1] = "dr-xr-xr-x 2 root other 2235 26. Juli, 20:10 datetest1 (ger)"; +$list_samples["Some servers send localized date formats, here the German one"][2] = "-r-xr-xr-x 2 root other 2235 2. Okt. 2003 datetest2 (ger)"; +$list_samples["Some servers send localized date formats, here the German one"][3] = "-r-xr-xr-x 2 root other 2235 1999/10/12 17:12 datetest3"; +$list_samples["Some servers send localized date formats, here the German one"][4] = "-r-xr-xr-x 2 root other 2235 24-04-2003 17:12 datetest4"; + +$list_samples["Here a Japanese one"][1] = "-rw-r--r-- 1 root sys 8473 4\x8c\x8e 18\x93\xfa 2003\x94\x4e datatest1 (jap)"; + +$list_samples["VMS style listings"][1] = "vms_dir_1.DIR;1 1 19-NOV-2001 21:41 [root,root] (RWE,RWE,RE,RE)"; +$list_samples["VMS style listings"][2] = "vms_file_3;1 155 2-JUL-2003 10:30:13.64"; + +$list_samples["VMS style listings without time"][1] = "vms_file_4;1 2/8 15-JAN-2000 [IV2_XXX] (RWED,RWED,RE,)"; +$list_samples["VMS style listings without time"][2] = "vms_file_5;1 6/8 15-JUI-2002 PRONAS (RWED,RWED,RE,)"; + +$list_samples["VMS multiline"][1] = "VMS_file_1;1\r\n170774/170775 24-APR-2003 08:16:15 [FTP_CLIENT,SCOT] (RWED,RWED,RE,)"; +$list_samples["VMS multiline"][2] = "VMS_file_2;1\r\n10 2-JUL-2003 10:30:08.59 [FTP_CLIENT,SCOT] (RWED,RWED,RE,)"; + +$list_samples["IBM AS/400 style listing"][1] = "QSYS 77824 02/23/00 15:09:55 *DIR IBM AS/400 Dir1/"; +$list_samples["IBM AS/400 style listing"][2] = "QSYS 77824 23/02/00 15:09:55 *FILE IBM AS/400 File1 strangedate"; + +$list_samples["aligned directory listing with too long size"][1] = "-r-xr-xr-x longowner longgroup123456 Feb 12 17:20 long size test1"; + +$list_samples["short directory listing with month name"][1] = "-r-xr-xr-x 2 owner group 4512 01-jun-99 shortdate with monthname"; + +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][1] = "-C--E-----FTP B BCC3I1 7670 1294495 Jan 13 07:42 ConEnt file"; +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][2] = "-C--E-----FTS B BCC3I1 7670 1294495 Jan 13 07:42 ConEnt file2"; +$list_samples["the following format is sent by the Connect:Enterprise server by Sterling Commerce"][3] = "-AR--M----TCP B ceunix 17570 2313708 Mar 29 08:56 ALL_SHORT1.zip"; + +$list_samples["Nortel wfFtp router"][1] = "nortel.wfFtp 1014196 06/03/04 Thur. 10:20:03"; + +$list_samples["VxWorks based server used in Nortel routers"][1] = "2048 Feb-28-1998 05:23:30 nortel.VwWorks dir "; + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/advanced_webserver/advanced_webserver.inc.php b/ehcp/net2ftp/modules/advanced_webserver/advanced_webserver.inc.php new file mode 100644 index 0000000..18c9765 --- /dev/null +++ b/ehcp/net2ftp/modules/advanced_webserver/advanced_webserver.inc.php @@ -0,0 +1,257 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/bookmark/bookmark.inc.php b/ehcp/net2ftp/modules/bookmark/bookmark.inc.php new file mode 100644 index 0000000..12d278f --- /dev/null +++ b/ehcp/net2ftp/modules/bookmark/bookmark.inc.php @@ -0,0 +1,181 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/browse/browse.inc.php b/ehcp/net2ftp/modules/browse/browse.inc.php new file mode 100644 index 0000000..2777c54 --- /dev/null +++ b/ehcp/net2ftp/modules/browse/browse.inc.php @@ -0,0 +1,569 @@ +\n"; + } + +// ------------------------------------------------------------------------- +// For the other skins, do print more Javascript functions +// ------------------------------------------------------------------------- + else { +// ------------------------------------ +// Code +// ------------------------------------ + echo "\n"; +// ------------------------------------ +// Include +// ------------------------------------ + if ($net2ftp_globals["state2"] == "main") { + echo "\n"; + } + + if ($net2ftp_globals["state2"] == "popup") { + echo "\n"; + } + + } + +} // end function net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + + echo "\n"; + +// ------------------------------------------------------------------------- +// Do not print anything for Mobile skins +// ------------------------------------------------------------------------- + if ($net2ftp_globals["skin"] == "mobile" || $net2ftp_globals["skin"] == "iphone") { + } + +// ------------------------------------------------------------------------- +// For the other skins, do print more Javascript functions +// ------------------------------------------------------------------------- + else { + } + +} // end function net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the

\n"; + $warning_consumption .= __("In order to guarantee the fair use of the web server for everyone, the data transfer volume and script execution time are limited per user, and per day. Once this limit is reached, you can still browse the FTP server but not transfer data to/from it.") . "

\n"; + $warning_consumption .= __("If you need unlimited usage, please install net2ftp on your own web server.") . "
\n"; + } + +// ------------------------------------ +// Browse message +// ------------------------------------ + if ($net2ftp_settings["message_browse"] != "" && $net2ftp_settings["message_browse"] != "Setting message_browse does not exist") { + $warning_message = $net2ftp_settings["message_browse"]; + } + +// ------------------------------------ +// Directory tree +// ------------------------------------ + $directory_exploded = explode("/", stripDirectory($directory)); + + if ($directory != "/" && checkAuthorizedDirectory("/") == true) { $directory_tree = "root "; } + else { $directory_tree = "root "; } + + $directory_goto = ""; + for ($i=0; $i" . htmlEncode2($directory_exploded[$i]) . " "; } + else { $directory_tree .= "/" . $directory_exploded[$i] . " "; } + } + + $directory_tree .= "/" . $directory_exploded[sizeof($directory_exploded)-1]; + +// ------------------------------------ +// Language +// ------------------------------------ + $language_onchange = "document.BrowseForm.language.value=document.forms['BrowseForm'].language2.options[document.forms['BrowseForm'].language2.selectedIndex].value; submitBrowseForm('$directory_js', '', 'browse', 'main');"; + +// ------------------------------------ +// Skin +// ------------------------------------ + $skin_onchange = "document.BrowseForm.skin.value=document.forms['BrowseForm'].skin2.options[document.forms['BrowseForm'].skin2.selectedIndex].value; submitBrowseForm('$directory_js', '', 'browse', 'main');"; + +// ------------------------------------ +// $rowcounter counts the total nr of rows +// ------------------------------------ + $rowcounter = 0; + +// ------------------------------------ +// Column spans +// ------------------------------------ + $action_colspan = 1; + if ($net2ftp_settings["functionuse_view"] == "yes") { $action_colspan++; } + if ($net2ftp_settings["functionuse_edit"] == "yes") { $action_colspan++; } + if ($net2ftp_settings["functionuse_update"] == "yes") { $action_colspan++; } + +// Total nr of columns + $total_colspan = $action_colspan + 9; + +// ------------------------------------ +// Name, Type, Size, ... +// Determine the sort criteria and direction (ascending/descending) +// ------------------------------------ + $sortArray["dirfilename"]["text"] = __("Name"); + $sortArray["type"]["text"] = __("Type"); + $sortArray["size"]["text"] = __("Size"); + $sortArray["owner"]["text"] = __("Owner"); + $sortArray["group"]["text"] = __("Group"); + $sortArray["permissions"]["text"] = __("Perms"); + $sortArray["mtime"]["text"] = __("Mod Time"); + + $icon_directory = $net2ftp_globals["application_rootdir_url"] . "/skins/" . $net2ftp_globals["skin"] . "/images/mime"; + +// Loop over all the sort possibilities + while(list($key, $value) = each($sortArray)) { + +// The list is sorted by the current $key +// Print the icon representing the current sortorder +// Print the link to sort using the other sortorder + if ($net2ftp_globals["sort"] == $key) { + // Ascending + if ($net2ftp_globals["sortorder"] == "ascending") { + $sortArray[$key]["title"] = __("Click to sort by %1\$s in descending order", $value["text"]); + $sortArray[$key]["onclick"] = "do_sort('" . $key . "','descending');"; + $icon = "ascend.png"; + $alt = __("Ascending order"); + } + // Descending + else { + $sortArray[$key]["title"] = __("Click to sort by %1\$s in ascending order", $value["text"]); + $sortArray[$key]["onclick"] = "do_sort('" . $key . "','ascending');"; + $icon = "descend.png"; + $alt = __("Descending order"); + } + } +// The list is not sorted by the current $key +// Do not print an icon +// Print the link to sort ascending + else { + $sortArray[$key]["title"] = __("Click to sort by %1\$s in ascending order", $value["text"]); + $sortArray[$key]["onclick"] = "do_sort('" . $key . "','ascending');"; + $icon = ""; + $alt = ""; + } + +// The icon to be printed is determined above +// Now, print the full HTML depending on the browser agent, version and platform + if ($icon != "") { + if ($net2ftp_globals["browser_agent"] == "IE" && ($net2ftp_globals["browser_version"] == "5.5" || $net2ftp_globals["browser_version"] == "6") && $net2ftp_globals["browser_platform"] == "Win") { + $sortArray[$key]["icon"] = "\"$alt\"\n"; + } + else { + $sortArray[$key]["icon"] = "\"$alt\"\n"; + } + } + else { + $sortArray[$key]["icon"] = ""; + } + } + +// ------------------------------------ +// popup - FormAndFieldname +// ------------------------------------ + if (isset($_POST["FormAndFieldName"]) == true) { $FormAndFieldName = validateGenericInput($_POST["FormAndFieldName"]); } + else { $FormAndFieldName = ""; } + +// ------------------------------------ +// Action URL +// Used for Up, Subdirectories, Files (download + actions) +// ------------------------------------ + $action_url = printPHP_SELF("actions"); + +// ------------------------------------ +// Data transfer statistics +// Print this only if the consumption statistics are available (logging must be on, using a MySQL database) +// ------------------------------------ + if (isset($net2ftp_globals["consumption_ipaddress_datatransfer"]) == true || isset($net2ftp_globals["consumption_ftpserver_datatransfer"]) == true) { + $print_consumption = true; + $consumption_ipaddress_datatransfer = formatFilesize($net2ftp_globals["consumption_ipaddress_datatransfer"]); + $consumption_ftpserver_datatransfer = formatFilesize($net2ftp_globals["consumption_ftpserver_datatransfer"]); + } + else { + $print_consumption = false; + } + +// ------------------------------------ +// HTTP URL +// ------------------------------------ + $list_files_tmp[1]["dirfilename_url"] = ""; + $httplink = ftp2http($directory, $list_files_tmp, "no"); + +// ------------------------------------------------------------------------- +// Print the output - part 2 +// ------------------------------------------------------------------------- + if ($net2ftp_globals["state2"] == "main") { + setStatus(6, 10, __("Printing the list of directories and files")); + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/browse_main.template.php"); + } + elseif ($net2ftp_globals["state2"] == "popup") { + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/browse_popup.template.php"); + } + +} // end function net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** + +function sort_list($list) { + +// -------------- +// This function sorts the list of directories and files +// Written by Slynderdale +// -------------- + +// ------------------------------------------------------------------------- +// Global variables and settings +// ------------------------------------------------------------------------- + global $net2ftp_globals; + + +// ------------------------------------------------------------------------- +// If the list is empty, return immediately +// ------------------------------------------------------------------------- + if ($net2ftp_globals["sort"] == "" || is_array($list) == false || sizeof($list) <= 1) { return $list; } + + +// ------------------------------------------------------------------------- +// Default values +// ------------------------------------------------------------------------- + +// Sort flags + if ($net2ftp_globals["sort"] == "size") { $sortflag = SORT_NUMERIC; } + else { $sortflag = SORT_REGULAR; } + +// Sort ascending or descending + if ($net2ftp_globals["sortorder"] == "ascending") { $sortfunction = "asort"; } + else { $sortfunction = "arsort"; } + +// ------------------------------------------------------------------------- +// Create a temporary array $temp which contains only the key $i and the value based on which the sorting is done +// ------------------------------------------------------------------------- + +// ------------------------------------ +// Sorting according to name, size, owner, group, permissions +// ------------------------------------ + if ($net2ftp_globals["sort"] != "mtime" && $net2ftp_globals["sort"] != "type") { + for($i=1; $i<=sizeof($list); $i++) { + $temp[$i] = strtolower($list[$i][$net2ftp_globals["sort"]]); + } + } + +// ------------------------------------ +// When sorting according to the modification time, do not sort alphabetically (April, February, January, March), +// but according to the corresponding Unix timestamp +// ------------------------------------ + elseif ($net2ftp_globals["sort"] == "mtime") { + for($i=1; $i<=sizeof($list); $i++) { + +// Some FTP servers return the date and time in a non-standard format +// For example: "Apr 06 12:57". Transform this to "06 April 2005 12:57" + if (preg_match("/([a-zA-Z]{3})[ ]+([0-9]{1,2})[ ]+([0-9]{1,2}:[0-9]{2})/", $list[$i]["mtime"], $regs) == true) { + $month = $regs[1]; + $day = $regs[2]; + $hour = $regs[3]; + $year = date("Y"); + if ($month == "Jan") { $month = "January"; } + elseif ($month == "Feb") { $month = "February"; } + elseif ($month == "Mar") { $month = "March"; } + elseif ($month == "Apr") { $month = "April"; } + elseif ($month == "May") { $month = "May"; } + elseif ($month == "Jun") { $month = "June"; } + elseif ($month == "Jul") { $month = "July"; } + elseif ($month == "Aug") { $month = "August"; } + elseif ($month == "Sep") { $month = "September"; } + elseif ($month == "Oct") { $month = "October"; } + elseif ($month == "Nov") { $month = "November"; } + elseif ($month == "Dec") { $month = "December"; } + $mtime_correct = "$day $month $year $hour"; + $temp[$i] = strtotime($mtime_correct); + } + else { + $temp[$i] = strtotime($list[$i]["mtime"]); + } + } // end for + } + +// ------------------------------------ +// When sorting according to the file type, get the mime type for each entry +// ------------------------------------ + elseif ($net2ftp_globals["sort"] == "type") { + for($i=1; $i<=sizeof($list); $i++) { + $mime = getMime($list[$i]); + $temp[$i] = $mime["mime_type"]; + } // end for + } + +// ------------------------------------------------------------------------- +// Execute the sorting on the $temp array +// ------------------------------------------------------------------------- + $sortfunction($temp, $sortflag); + +// ------------------------------------------------------------------------- +// Fill the $return array +// ------------------------------------------------------------------------- + $i=1; + while(list($tname, $tvalue) = each($temp)) { + $return[$i] = $list[$tname]; + $i++; + } + +// ------------------------------------------------------------------------- +// Return the result +// ------------------------------------------------------------------------- + return $return; + +} // end function sort_list + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/browse/browse_main.js.php b/ehcp/net2ftp/modules/browse/browse_main.js.php new file mode 100644 index 0000000..69d6bff --- /dev/null +++ b/ehcp/net2ftp/modules/browse/browse_main.js.php @@ -0,0 +1,102 @@ + + +function submitBrowseForm(directory, entry, state, state2) { + +// Check that at least 1 checkbox is checked + var nr_checkboxes_checked = 0; + if (state == 'calculatesize' || state == 'chmod' || state == 'copymovedelete' || state == 'downloadzip' || + state == 'findstring' || state == 'rename' || state == 'unzip' || state == 'zip' ) { + for (var i = 0; i < document.forms['BrowseForm'].elements.length; i++) { + if (document.forms['BrowseForm'].elements[i].type == 'checkbox') { + if (document.forms['BrowseForm'].elements[i].checked == true) { nr_checkboxes_checked++; break; } + } + } + if (nr_checkboxes_checked == 0) { + alert('Please select at least one directory or file.'); + return false; + } + } + +// For the skins with a drop-down box on top, determine the value of the +// 'entry' variable based on the first selected entry + if (entry == '' && (state == 'view' || state == 'edit' || state == 'update')) { + for (var i = 0; i < document.forms['BrowseForm'].elements.length; i++) { + if (document.forms['BrowseForm'].elements[i].type == 'checkbox') { + if (document.forms['BrowseForm'].elements[i].checked == true) { entry = document.forms['BrowseForm'].elements[i].value; break; } + } + } + } + +// Set BrowseForm values + document.forms['BrowseForm'].state.value=state; + document.forms['BrowseForm'].state2.value=state2; + document.forms['BrowseForm'].directory.value=directory; + document.forms['BrowseForm'].entry.value=entry; + +// Set the select back to the first entry + for (var i = 0; i < document.forms['BrowseForm'].elements.length; i++) { + if (document.forms['BrowseForm'].elements[i].name == 'BrowseSelect') { document.forms['BrowseForm'].BrowseSelect.selectedIndex = 0; } + } + +// Submit + document.forms['BrowseForm'].submit(); +} \ No newline at end of file diff --git a/ehcp/net2ftp/modules/browse/browse_popup.js b/ehcp/net2ftp/modules/browse/browse_popup.js new file mode 100644 index 0000000..8950cae --- /dev/null +++ b/ehcp/net2ftp/modules/browse/browse_popup.js @@ -0,0 +1,21 @@ +function submitDirectoryTreeForm(last_directory_index) { + if (document.forms['DirectoryTreeForm'].DirectoryTreeSelect.selectedIndex <= last_directory_index) { + if (document.forms['DirectoryTreeForm'].DirectoryTreeSelect.options[document.forms['DirectoryTreeForm'].DirectoryTreeSelect.selectedIndex].value != 'up') { + if (document.forms['DirectoryTreeForm'].directory.value == '/') { + document.forms['DirectoryTreeForm'].directory.value = '/' + document.forms['DirectoryTreeForm'].DirectoryTreeSelect.options[document.forms['DirectoryTreeForm'].DirectoryTreeSelect.selectedIndex].value; + } + else { + document.forms['DirectoryTreeForm'].directory.value = document.forms['DirectoryTreeForm'].directory.value + '/' + document.forms['DirectoryTreeForm'].DirectoryTreeSelect.options[document.forms['DirectoryTreeForm'].DirectoryTreeSelect.selectedIndex].value; + } + } + else { + document.forms['DirectoryTreeForm'].directory.value = document.forms['DirectoryTreeForm'].updirectory.value; + } + } + else { + document.forms['DirectoryTreeForm'].state.value = 'followsymlink'; + document.forms['DirectoryTreeForm'].state2.value = 'popup'; + document.forms['DirectoryTreeForm'].entry.value = document.forms['DirectoryTreeForm'].DirectoryTreeSelect.options[document.forms['DirectoryTreeForm'].DirectoryTreeSelect.selectedIndex].value; + } + document.forms['DirectoryTreeForm'].submit(); +} \ No newline at end of file diff --git a/ehcp/net2ftp/modules/calculatesize/calculatesize.inc.php b/ehcp/net2ftp/modules/calculatesize/calculatesize.inc.php new file mode 100644 index 0000000..a645fef --- /dev/null +++ b/ehcp/net2ftp/modules/calculatesize/calculatesize.inc.php @@ -0,0 +1,190 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the " . formatFilesize($result['size']) . " (" . $result['size'] . " Bytes)"; + + if ($result['skipped'] > 0) { + $net2ftp_output["calculatesize"][] = __("The number of files which were skipped is:") . " " . $result['skipped'] . ""; + } + + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/chmod/chmod.inc.php b/ehcp/net2ftp/modules/chmod/chmod.inc.php new file mode 100644 index 0000000..8ae291c --- /dev/null +++ b/ehcp/net2ftp/modules/chmod/chmod.inc.php @@ -0,0 +1,280 @@ +\n"; + +// Include + echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s to: ", $list["all"][$i]["dirfilename"]) . "
\n"; } + elseif ($list["all"][$i]["dirorfile"] == "-") { $list["all"][$i]["message"] = __("Set the permissions of file %1\$s to: ", $list["all"][$i]["dirfilename"]) . "
\n"; } + elseif ($list["all"][$i]["dirorfile"] == "l") { $list["all"][$i]["message"] = __("Set the permissions of symlink %1\$s to: ", $list["all"][$i]["dirfilename"]) . "
\n"; } + + $owner_chmod = 0; + if (substr($list["all"][$i]["permissions"], 0, 1) == "r") { $owner_chmod+=4; $list["all"][$i]["owner_read"] = "checked=\"checked\""; } + else { $list["all"][$i]["owner_read"] = ""; } + if (substr($list["all"][$i]["permissions"], 1, 1) == "w") { $owner_chmod+=2; $list["all"][$i]["owner_write"] = "checked=\"checked\""; } + else { $list["all"][$i]["owner_write"] = ""; } + if (substr($list["all"][$i]["permissions"], 2, 1) == "x") { $owner_chmod+=1; $list["all"][$i]["owner_execute"] = "checked=\"checked\""; } + else { $list["all"][$i]["owner_execute"] = ""; } + + $group_chmod = 0; + if (substr($list["all"][$i]["permissions"], 3, 1) == "r") { $group_chmod+=4; $list["all"][$i]["group_read"] = "checked=\"checked\""; } + else { $list["all"][$i]["group_read"] = ""; } + if (substr($list["all"][$i]["permissions"], 4, 1) == "w") { $group_chmod+=2; $list["all"][$i]["group_write"] = "checked=\"checked\""; } + else { $list["all"][$i]["group_write"] = ""; } + if (substr($list["all"][$i]["permissions"], 5, 1) == "x") { $group_chmod+=1; $list["all"][$i]["group_execute"] = "checked=\"checked\""; } + else { $list["all"][$i]["group_execute"] = ""; } + + $other_chmod = 0; + if (substr($list["all"][$i]["permissions"], 6, 1) == "r") { $other_chmod+=4; $list["all"][$i]["other_read"] = "checked=\"checked\""; } + else { $list["all"][$i]["other_read"] = ""; } + if (substr($list["all"][$i]["permissions"], 7, 1) == "w") { $other_chmod+=2; $list["all"][$i]["other_write"] = "checked=\"checked\""; } + else { $list["all"][$i]["other_write"] = ""; } + if (substr($list["all"][$i]["permissions"], 8, 1) == "x") { $other_chmod+=1; $list["all"][$i]["other_execute"] = "checked=\"checked\""; } + else { $list["all"][$i]["other_execute"] = ""; } + + $list["all"][$i]["chmodvalue"] = $owner_chmod.$group_chmod.$other_chmod; + if ($list["all"][$i]["dirorfile"] == "d") { $list["directories"][$directory_index]["chmodvalue"] = $list["all"][$i]["chmodvalue"]; $directory_index++; } + elseif ($list["all"][$i]["dirorfile"] == "-") { $list["files"][$file_index]["chmodvalue"] = $list["all"][$i]["chmodvalue"]; $file_index++; } + elseif ($list["all"][$i]["dirorfile"] == "l") { $list["symlinks"][$symlink_index]["chmodvalue"] = $list["all"][$i]["chmodvalue"]; $symlink_index++; } + + } // end for + + } // end if + + +// ------------------------------------------------------------------------- +// Variables for screen 2 +// ------------------------------------------------------------------------- + elseif ($net2ftp_globals["screen"] == 2) { + +// Initialize variables + $directory_index = 1; + $file_index = 1; + $symlink_index = 1; + +// Calculate the chmod octal + for ($i=1; $i<=count($list["all"]); $i++) { + if (isset($list["all"][$i]["owner_read"]) == false) { $list["all"][$i]["owner_read"] = 0; } + if (isset($list["all"][$i]["owner_write"]) == false) { $list["all"][$i]["owner_write"] = 0; } + if (isset($list["all"][$i]["owner_execute"]) == false) { $list["all"][$i]["owner_execute"] = 0; } + if (isset($list["all"][$i]["group_read"]) == false) { $list["all"][$i]["group_read"] = 0; } + if (isset($list["all"][$i]["group_write"]) == false) { $list["all"][$i]["group_write"] = 0; } + if (isset($list["all"][$i]["group_execute"]) == false) { $list["all"][$i]["group_execute"] = 0; } + if (isset($list["all"][$i]["other_read"]) == false) { $list["all"][$i]["other_read"] = 0; } + if (isset($list["all"][$i]["other_write"]) == false) { $list["all"][$i]["other_write"] = 0; } + if (isset($list["all"][$i]["other_execute"]) == false) { $list["all"][$i]["other_execute"] = 0; } + + $ownerOctal = $list["all"][$i]["owner_read"] + $list["all"][$i]["owner_write"] + $list["all"][$i]["owner_execute"]; + $groupOctal = $list["all"][$i]["group_read"] + $list["all"][$i]["group_write"] + $list["all"][$i]["group_execute"]; + $otherOctal = $list["all"][$i]["other_read"] + $list["all"][$i]["other_write"] + $list["all"][$i]["other_execute"]; + + $chmodOctal = $ownerOctal . $groupOctal . $otherOctal; + + if ($chmodOctal > 777 || $chmodOctal < 0) { + $errormessage = __("The chmod nr %1\$s is out of the range 000-777. Please try again.", $chmodOctal); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + else { + $list["all"][$i]["chmodoctal"] = $chmodOctal; + if ($list["all"][$i]["dirorfile"] == "d") { $list["directories"][$directory_index]["chmodoctal"] = $list["all"][$i]["chmodoctal"]; $directory_index++; } + elseif ($list["all"][$i]["dirorfile"] == "-") { $list["files"][$file_index]["chmodoctal"] = $list["all"][$i]["chmodoctal"]; $file_index++; } + elseif ($list["all"][$i]["dirorfile"] == "l") { $list["symlinks"][$symlink_index]["chmodoctal"] = $list["all"][$i]["chmodoctal"]; $symlink_index++; } + } + + } // End for + +// Open connection + setStatus(2, 10, __("Connecting to the FTP server")); + $conn_id = ftp_openconnection(); + if ($conn_id == false) { return false; } + +// Chmod the entries + setStatus(4, 10, __("Processing the entries")); + ftp_chmod2($conn_id, $net2ftp_globals["directory"], $list, 0); + if ($net2ftp_result["success"] == false) { return false; } + +// Close connection + ftp_closeconnection($conn_id); + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/chmod/chmod.js b/ehcp/net2ftp/modules/chmod/chmod.js new file mode 100644 index 0000000..782ecde --- /dev/null +++ b/ehcp/net2ftp/modules/chmod/chmod.js @@ -0,0 +1,127 @@ +function update_field(id,text) { + if (document.getElementById) { + document.getElementById(id).value = text; + } + else if (document.all) { + document.all[id].value = text; + } +} + +function get_field(id) { + if (document.getElementById) { + var value = document.getElementById(id).value; + } + else if (document.all) { + var value = document.all[id].value; + } + return value; +} + +function update_input(num) { + var myform = document.forms['ChmodForm']; + var myfield = 'chmod'; + var regexp = /list\[([0-9]+)\]\[(owner|group|other)_(read|write|execute)\]/i; + var myArray = new Array(); + var maxfields = 0; + for (var i = 0; i < myform.elements.length; i++) { + if (regexp.test(myform.elements[i].name)) { + var ar = regexp.exec(myform.elements[i].name); + var checked = myform.elements[i].checked; + if (maxfields0 && (num==0 || num==id)) { + var field = get_field(myfield+id); + var o = field.substr(0,1); + var g = field.substr(1,1); + var e = field.substr(2,1); + if (field.length==3 && o>=0 && o<=7 && g>=0 && g<=7 && e>=0 && e<=7) { + for (var j = 0; j < myform.elements.length; j++) { + if (regexp.test(myform.elements[j].name)) { + var ar = regexp.exec(myform.elements[j].name); + if (ar[1]==id) { + var check = false; + if (ar[2]=='owner') { + if (ar[3]=='read' && (o==4 || o==5 || o==6 || o==7)) + check = true; + if (ar[3]=='write' && (o==2 || o==3 || o==6 || o==7)) + check = true; + if (ar[3]=='execute' && (o==1 || o==3 || o==5 || o==7)) + check = true; + } + else if (ar[2]=='group') { + if (ar[3]=='read' && (g==4 || g==5 || g==6 || g==7)) + check = true; + if (ar[3]=='write' && (g==2 || g==3 || g==6 || g==7)) + check = true; + if (ar[3]=='execute' && (g==1 || g==3 || g==5 || g==7)) + check = true; + } + else if (ar[2]=='other') { + if (ar[3]=='read' && (e==4 || e==5 || e==6 || e==7)) + check = true; + if (ar[3]=='write' && (e==2 || e==3 || e==6 || e==7)) + check = true; + if (ar[3]=='execute' && (e==1 || e==3 || e==5 || e==7)) + check = true; + } + if (check==true) myform.elements[j].checked = 1; + else myform.elements[j].checked = 0; + } + } + } + } + else { + update_input(id); + } + } + } + } +} + +function CopyCheckboxToAll(myform, mysourcefieldname, mytargetfieldname) { + for (var i = 0; i < myform.elements.length; i++) { + if (myform.elements[i].name.indexOf(mysourcefieldname) >= 0) { + for (var j = 0; j < myform.elements.length; j++) { + if (myform.elements[j].name.indexOf(mytargetfieldname) >= 0) { + myform.elements[j].checked = myform.elements[i].checked; + } + } + } + } +} diff --git a/ehcp/net2ftp/modules/clearcookies/clearcookies.inc.php b/ehcp/net2ftp/modules/clearcookies/clearcookies.inc.php new file mode 100644 index 0000000..d335d3a --- /dev/null +++ b/ehcp/net2ftp/modules/clearcookies/clearcookies.inc.php @@ -0,0 +1,52 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/copymovedelete/copymovedelete.inc.php b/ehcp/net2ftp/modules/copymovedelete/copymovedelete.inc.php new file mode 100644 index 0000000..948d29b --- /dev/null +++ b/ehcp/net2ftp/modules/copymovedelete/copymovedelete.inc.php @@ -0,0 +1,290 @@ +\n"; + } + +// ------------------------------------------------------------------------- +// Other skins +// ------------------------------------------------------------------------- + else { + echo "\n"; + } + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/downloadfile/downloadfile.inc.php b/ehcp/net2ftp/modules/downloadfile/downloadfile.inc.php new file mode 100644 index 0000000..2c2b107 --- /dev/null +++ b/ehcp/net2ftp/modules/downloadfile/downloadfile.inc.php @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/downloadzip/downloadzip.inc.php b/ehcp/net2ftp/modules/downloadzip/downloadzip.inc.php new file mode 100644 index 0000000..1d81b1d --- /dev/null +++ b/ehcp/net2ftp/modules/downloadzip/downloadzip.inc.php @@ -0,0 +1,55 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/edit/edit.inc.php b/ehcp/net2ftp/modules/edit/edit.inc.php new file mode 100644 index 0000000..4b3e2de --- /dev/null +++ b/ehcp/net2ftp/modules/edit/edit.inc.php @@ -0,0 +1,763 @@ +\n"; + } + +// Include + echo "\n"; + + } + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the "\r\n", "CR" => "\r", "LF" => "\n"); + if(isset($break_map[$line_break_new]) == true) { + $text_file = preg_replace('/(\\r\\n)|\\r|\\n/', $break_map[$line_break_new], $text_file); + } + if($text_encoding_new != "" && strcasecmp($text_encoding_new, $net2ftp_messages["iso-8859-1"]) != 0) { + $text_file = mb_convert_encoding($text_file, $text_encoding_new, $net2ftp_messages["iso-8859-1"]); + } + $text_encoding_selected = $text_encoding_new; + $line_break_selected = $line_break_new; + } + +// Write the string to the FTP server +// Note: this function also replaces CarriageReturn+LineFeed by LineFeed + ftp_writefile("", $net2ftp_globals["directory"], $net2ftp_globals["entry"], $text_file); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); // Continue anyway and print warning message + $savestatus = __("Status: This file could not be saved"); + $savestatus_short = __("Could not be saved"); + } + else { + $mytime = mytime(); + $mytime_short = mytime_short(); + $ftpmode = ftpAsciiBinary($net2ftp_globals["entry"]); + if ($ftpmode == FTP_ASCII) { $printftpmode = "FTP_ASCII"; } + elseif ($ftpmode == FTP_BINARY) { $printftpmode = "FTP_BINARY"; } + $savestatus = __("Status: Saved on %1\$s using mode %2\$s", $mytime, $printftpmode); + $savestatus_short = __("Saved at %1\$s", $mytime_short); + } + + } + + +// ------------------------------------------------------------------------- +// Convert special characters to HTML entities +// ------------------------------------------------------------------------- + +// Plain textarea + if ($textareaType == "" || $textareaType == "plain") { + $text = htmlspecialchars($text, ENT_QUOTES); + } + +// CKEditor + elseif ($textareaType == "ckeditor") { + $text_splitted["top"] = htmlspecialchars($text_splitted["top"], ENT_QUOTES); + $text_splitted["bottom"] = htmlspecialchars($text_splitted["bottom"], ENT_QUOTES); +// Do not encode the middle part, this is done by CKEditor itself +// $text_splitted["middle"] = htmlspecialchars($text_splitted["middle"], ENT_QUOTES); + } + +// TinyMCE + elseif ($textareaType == "tinymce") { + $text_splitted["top"] = htmlspecialchars($text_splitted["top"], ENT_QUOTES); + $text_splitted["middle"] = htmlspecialchars($text_splitted["middle"], ENT_QUOTES); + $text_splitted["bottom"] = htmlspecialchars($text_splitted["bottom"], ENT_QUOTES); + } + +// Ace + elseif ($textareaType == "ace") { + $text = htmlspecialchars($text, ENT_QUOTES); + $ace_onclick = "document.forms['" . $formname . "'].text.value=editor.getValue();"; + } + + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/edit.template.php"); + + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printTextareaSelect($onchange) { + +// -------------- +// This function prints a select with the available textareas +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_globals; + $pluginProperties = getPluginProperties(); + if (isset($_POST["textareaType"]) == true) { $textareaType = validateTextareaType($_POST["textareaType"]); } + else { $textareaType = ""; } + + $filename_extension = get_filename_extension($net2ftp_globals["entry"]); + +// Convert *htm* to html + if (strpos($filename_extension, "htm") !== false) { $filename_extension = "html"; } + + echo "\n"; + +} // End function printTextareaSelect + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printEncodingSelect($text_encoding) { + +// -------------- +// This function prints a select with the available encodings +// -------------- + + global $net2ftp_globals, $net2ftp_messages; + + if (($net2ftp_globals["language"] == "ja" || $net2ftp_globals["language"] == "tc" || $net2ftp_messages["iso-8859-1"] == "UTF-8") && function_exists("mb_detect_encoding") == true) { + + $textarea_encodings = getTextareaEncodingsArray(); + + echo "\n"; + + } + +} // End function printEncodingSelect + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function printLineBreakSelect($line_break) { + +// -------------- +// This function prints a select with the available line-break sequences. +// -------------- + + global $net2ftp_messages, $net2ftp_globals; + + if (($net2ftp_globals["language"] == "ja" || $net2ftp_globals["language"] == "tc" || $net2ftp_messages["iso-8859-1"] == "UTF-8") && function_exists("mb_detect_encoding") == true) { + + echo "\n"; + + } + +} // End function printLineBreakSelect + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** +function getTextareaEncodingsArray() { + +// -------------- +// This function returns an array which contains the possible character encodings +// See the "Supported Character Encodings" section at http://www.php.net/manual/en/ref.mbstring.php +// -------------- + + global $net2ftp_globals; + + if ($net2ftp_globals["language"] == "ja") { + $textarea_encodings[] = "UTF-8"; + $textarea_encodings[] = "EUC-JP"; + $textarea_encodings[] = "SJIS"; + } + elseif ($net2ftp_globals["language"] == "tc" || $net2ftp_globals["language"] == "zh") { + $textarea_encodings[] = "UTF-8"; + $textarea_encodings[] = "BIG-5"; + } + else { +// BIG-5 must be before SJIS, otherwise BIG-5 text is incorrectly identified as SJIS + $textarea_encodings[] = "UTF-8"; + $textarea_encodings[] = "ISO-8859-1"; + } + +/* + $textarea_encodings[] = "ISO-8859-1"; + $textarea_encodings[] = "UCS-4"; + $textarea_encodings[] = "UCS-4BE"; + $textarea_encodings[] = "UCS-4LE"; + $textarea_encodings[] = "UCS-2"; + $textarea_encodings[] = "UCS-2BE"; + $textarea_encodings[] = "UCS-2LE"; + $textarea_encodings[] = "UTF-32"; + $textarea_encodings[] = "UTF-32BE"; + $textarea_encodings[] = "UTF-32LE"; + $textarea_encodings[] = "UTF-16"; + $textarea_encodings[] = "UTF-16BE"; + $textarea_encodings[] = "UTF-16LE"; + $textarea_encodings[] = "UTF-7"; + $textarea_encodings[] = "UTF7-IMAP"; + $textarea_encodings[] = "UTF-8"; + $textarea_encodings[] = "ASCII"; + $textarea_encodings[] = "EUC-JP"; + $textarea_encodings[] = "SJIS"; + $textarea_encodings[] = "eucJP-win"; + $textarea_encodings[] = "SJIS-win"; + $textarea_encodings[] = "ISO-2022-JP"; + $textarea_encodings[] = "JIS"; + $textarea_encodings[] = "ISO-8859-2"; + $textarea_encodings[] = "ISO-8859-3"; + $textarea_encodings[] = "ISO-8859-4"; + $textarea_encodings[] = "ISO-8859-5"; + $textarea_encodings[] = "ISO-8859-6"; + $textarea_encodings[] = "ISO-8859-7"; + $textarea_encodings[] = "ISO-8859-8"; + $textarea_encodings[] = "ISO-8859-9"; + $textarea_encodings[] = "ISO-8859-10"; + $textarea_encodings[] = "ISO-8859-13"; + $textarea_encodings[] = "ISO-8859-14"; + $textarea_encodings[] = "ISO-8859-15"; + $textarea_encodings[] = "byte2be"; + $textarea_encodings[] = "byte2le"; + $textarea_encodings[] = "byte4be"; + $textarea_encodings[] = "byte4le"; + $textarea_encodings[] = "BASE64"; + $textarea_encodings[] = "HTML-ENTITIES"; + $textarea_encodings[] = "7bit"; + $textarea_encodings[] = "8bit"; + $textarea_encodings[] = "EUC-CN"; + $textarea_encodings[] = "CP936"; + $textarea_encodings[] = "HZ"; + $textarea_encodings[] = "EUC-TW"; + $textarea_encodings[] = "CP950"; + $textarea_encodings[] = "EUC-KR"; + $textarea_encodings[] = "UHC (CP949)"; + $textarea_encodings[] = "ISO-2022-KR"; + $textarea_encodings[] = "Windows-1251 (CP1251)"; + $textarea_encodings[] = "Windows-1252 (CP1252)"; + $textarea_encodings[] = "CP866 (IBM866)"; + $textarea_encodings[] = "KOI8-R"; +*/ + + return $textarea_encodings; + +} // End function getTextareaEncodingsArray + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function syntaxTextareaEncode($string) { + +// -------------- +// Replace tabs, line-feeds and carriage-returns by \t and \n respectively. +// -------------- + + $tab = chr(9); + $lf = chr(10); + $cr = chr(13); + + $newstring = $string; + +// Replace \' and ' + $newstring = str_replace("\'", "\\\'", $newstring); + $newstring = str_replace("'", "\'", $newstring); + +// Replace $cr$lf by $lf + $newstring = str_replace("$cr$lf", "$lf", $newstring); + +// Replace $lf and $tab + $newstring = str_replace($lf, "\\n", $newstring); + $newstring = str_replace($tab, "\\t", $newstring); + + return $newstring; + +} // end syntaxTextareaEncode + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function splitHtml($text, $textareaType) { + +// -------------- +// This function reads an HTML file, and returns the head and the body parts. +// -------------- + + $pattern = "/(.*?)]*)\\>(.*)\\<\\/body\\>(.*)/is"; +// Everything before the {1} +// Start of the body tag {2} +// Body contents ==> {3} +// tag +// Stuff after the tag ==> {4} + + $preg_match_result = preg_match($pattern, $text, $matches); + if ($preg_match_result != 0) { + $text_splitted["top"] = $matches[1]; + $text_splitted["top"] .= ""; + $text_splitted["middle"] = $matches[3]; + $text_splitted["bottom"] = "" . $matches[4]; + } + else { + $text_splitted["top"] = ""; + $text_splitted["middle"] = $text; + $text_splitted["bottom"] = ""; + } + + return $text_splitted; + +} // end splitHtml + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/edit/edit.js b/ehcp/net2ftp/modules/edit/edit.js new file mode 100644 index 0000000..c3fd78d --- /dev/null +++ b/ehcp/net2ftp/modules/edit/edit.js @@ -0,0 +1,22 @@ +function toggleTextarea(name) { + var name_shown = name + '_shown'; + var name_hidden = name + '_hidden'; + + if (document.getElementById) { + var element_shown = document.getElementById(name_shown); + var element_hidden = document.getElementById(name_hidden); + } + else if (document.all) { + var element_shown = document.all[name_shown]; + var element_hidden = document.all[name_hidden]; + } + + if(element_shown.style.display == "none" || element_shown.style.display == false) { + element_shown.style.display = "block"; + element_hidden.style.display = "none"; + } + else if(element_shown.style.display == "block") { + element_shown.style.display = "none"; + element_hidden.style.display = "block"; + } +} \ No newline at end of file diff --git a/ehcp/net2ftp/modules/edit/template.txt b/ehcp/net2ftp/modules/edit/template.txt new file mode 100644 index 0000000..4bb2206 --- /dev/null +++ b/ehcp/net2ftp/modules/edit/template.txt @@ -0,0 +1,3 @@ + +[Enter code here] + diff --git a/ehcp/net2ftp/modules/findstring/findstring.inc.php b/ehcp/net2ftp/modules/findstring/findstring.inc.php new file mode 100644 index 0000000..b3f3dcc --- /dev/null +++ b/ehcp/net2ftp/modules/findstring/findstring.inc.php @@ -0,0 +1,280 @@ +\n"; + +// Include + echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s was not found in the selected directories and files.", $searchoptions["string"]); + } + else { + $net2ftp_output["findstring"][] = __("The word %1\$s was found in the following files:", $searchoptions["string"]); + for ($i=0; $i \ No newline at end of file diff --git a/ehcp/net2ftp/modules/findstring/findstring.js b/ehcp/net2ftp/modules/findstring/findstring.js new file mode 100644 index 0000000..a9482b4 --- /dev/null +++ b/ehcp/net2ftp/modules/findstring/findstring.js @@ -0,0 +1,9 @@ + +function submitFindstringForm(directory, entry, state, state2, screen) { + document.forms['FindstringForm'].directory.value=directory; + document.forms['FindstringForm'].entry.value=entry; + document.forms['FindstringForm'].state.value=state; + document.forms['FindstringForm'].state2.value=state2; + document.forms['FindstringForm'].screen.value=screen; + document.forms['FindstringForm'].submit(); +} \ No newline at end of file diff --git a/ehcp/net2ftp/modules/followsymlink/followsymlink.inc.php b/ehcp/net2ftp/modules/followsymlink/followsymlink.inc.php new file mode 100644 index 0000000..3f2742c --- /dev/null +++ b/ehcp/net2ftp/modules/followsymlink/followsymlink.inc.php @@ -0,0 +1,120 @@ + mirror/ftp.freebsd.org/pub/FreeBSD +// Get the 1st part before the "->" (this is what we need to access, not the 2nd part) + $pos = strpos($net2ftp_globals["entry"], " -> "); + $entry_part1 = substr($net2ftp_globals["entry"], 0, $pos); + +// Glue the current directory with the symlink +// and resolve the .. which it may contain (this is done by validateDirectory) + $symlinktarget = validateDirectory(glueDirectories($net2ftp_globals["directory"], $entry_part1)); + +// ------------------------------------------------------------------------- +// Check if the symlink points to a directory +// ------------------------------------------------------------------------- + +// ------------------------------------ +// Open connection +// ------------------------------------ + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------------------ +// Get raw list of directories and files +// ------------------------------------ + $list = ftp_getlist($conn_id, $symlinktarget); + if ($net2ftp_result["success"] == false) { + $is_directory = false; + setErrorVars(true, "", "", "", ""); + } + else { + $is_directory = true; + } + +// ------------------------------------ +// Close connection +// ------------------------------------ + ftp_closeconnection($conn_id); + + +// ------------------------------------------------------------------------- +// Directory (main or popup): redirect to Browse page +// ------------------------------------------------------------------------- + if ($is_directory == true) { + $action_url = printPHP_SELF("actions"); + $action_url = str_replace("&", "&", $action_url); + header("Location: " . $action_url . "&state=browse&state2=" . $net2ftp_globals["state2"] . "&directory=" . $symlinktarget); + } + +// ------------------------------------------------------------------------- +// File (popup): redirect to Browse page of same directory +// ------------------------------------------------------------------------- + elseif ($net2ftp_globals["state2"] == "popup") { + $action_url = printPHP_SELF("actions"); + $action_url = str_replace("&", "&", $action_url); + header("Location: " . $action_url . "&state=browse&state2=" . $net2ftp_globals["state2"] . "&directory=" . $net2ftp_globals["directory"]); + } + +// ------------------------------------------------------------------------- +// File (main): download the file +// ------------------------------------------------------------------------- + elseif ($net2ftp_globals["state2"] == "main") { + if ($net2ftp_settings["functionuse_downloadfile"] == "yes") { + $newdirectory = dirname($symlinktarget); + $newfile = basename($symlinktarget); + ftp_downloadfile($newdirectory, $newfile); + } + else { + $errormessage = __("This function has been disabled by the Administrator of this website."); + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + } + + + +} // end net2ftp_sendHttpHeaders + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/getcookies/getcookies.inc.php b/ehcp/net2ftp/modules/getcookies/getcookies.inc.php new file mode 100644 index 0000000..6061176 --- /dev/null +++ b/ehcp/net2ftp/modules/getcookies/getcookies.inc.php @@ -0,0 +1,136 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/01-welcome.html b/ehcp/net2ftp/modules/help/01-welcome.html new file mode 100644 index 0000000..d5ef6df --- /dev/null +++ b/ehcp/net2ftp/modules/help/01-welcome.html @@ -0,0 +1,129 @@ + + + +net2ftp help + + + + + +
+Welcome! The purpose of these pages is to provide help for the 3 kinds of people using net2ftp: +
    +
  • Users - how to upload files, how to copy a directory
  • +
  • Administrators - how to install net2ftp on your own web server
  • +
  • Developers - how the code is structured
  • +
+
+ +
+ +Follow the links above to go to the section that you're interested in, or continue to read below for a brief explanation of what is net2ftp. + +

+ +
+ + +
+ +
+ +
What is net2ftp?
+net2ftp is a web-based FTP client written in PHP. +Lets explain this in detail. +Web-based means that net2ftp runs on a web server, and that you use a browser (for example Internet Explorer or Mozilla). +FTP is the communication method to access files on a remote computer. You need it to access your files on the account given by your provider to host your homepage. FTP is different from HTTP in that it was made specially to transfer (big) files. If a transfer is interrupted, with FTP you can resume it where it broke off, whereas with HTTP you can not. +PHP is a programming language that is used to make dynamic websites. + +

+ +You can use net2ftp at http://www.net2ftp.com, or you can install it on your own web server and use it from there. + +

+ +
User features
+
    +
  • Navigate the FTP server
    +Once you have logged in, you can browse from directory to directory and see all the subdirectories and files.
  • +
  • Upload files
    +There are 3 different ways to upload files: the standard upload form, the upload-and-unzip functionality, and the Java Applet.
  • +
  • Download files
    +Click on a filename to quickly download one file.
    +Select multiple files and click on Download; the selected files will be downloaded in a zip archive.
  • +
  • Zip files
    +... and save the zip archive on the FTP server, or email it to someone.
  • +
  • Unzip files
    +Different formats are supported: .zip, .tar, .tgz and .gz.
  • +
  • Install software
    +Choose from a list of popular applications (PHP required on the target server).
  • +
  • Copy, move and delete
    +Directories are handled recursively, meaning that their content +(subdirectories and files) will also be copied, moved or deleted.
  • +
  • Copy or move to a 2nd FTP server
    +Handy to import files to your FTP server, or to export files from your FTP server to another FTP server.
  • +
  • Rename and chmod
    +Chmod handles directories recursively.
  • +
  • View code with syntax highlighting
    +PHP functions are linked to the documentation on php.net.
  • +
  • Plain text editor
    +Edit text right from your browser; every time you save the changes the new file is transferred to the FTP server.
  • +
  • HTML editors
    +Edit HTML a What-You-See-Is-What-You-Get (WYSIWYG) form; there are 2 different editors to choose from (FCKEditor and TinyMCE).
  • +
  • Code editor
    +Edit HTML and PHP in an editor with syntax highlighting (CodePress).
  • +
  • Search for words or phrases
    +Filter out files based on the filename, last modification time and filesize.
  • +
  • Calculate size
    +Calculate the size of directories and files.
  • +
+ +
+ +
Administrator features
+
    +
  • Safe Mode
    +net2ftp works perfectly under safemode.
  • +
  • MySQL database
    +... is optional. A MySQL database is only needed for logging, and for the Daily Limit (see below).
  • +
  • Authorizations
    +Allow the users to connect to all FTP servers, or to only a predefined list of FTP servers.
    +The input box on the login page will change accordingly.
  • +
  • Logging
    +Activate or deactivate 3 kinds of logging: pages requested, logins and errors.
  • +
  • Daily Limit
    +Restrict each user's daily data transfer volume and script execution +time. Once a user reaches the daily consumption limit, he will still be +able to browse FTP servers, but the transfer of data to/from the server +will be blocked.
  • +
  • Large File Limit
    +Files bigger than this limit can't be downloaded/uploaded/copied/etc +but can still be renamed/deleted/chmodded.
  • +
  • Banned keywords
    +Directories and files containing banned keywords can't be processed. +This is to avoid net2ftp being used to upload Paypal and Ebay scams.
  • +
  • Templates
    +Change the layout of net2ftp as you want using the template files.
  • +
  • Integration in other PHP applications
    +net2ftp can easily be integrated in other PHP applications. +Modules for Mambo, Drupal and Xoops are provided in the zip file.
  • +
+ +



+ + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/02-user.html b/ehcp/net2ftp/modules/help/02-user.html new file mode 100644 index 0000000..607349c --- /dev/null +++ b/ehcp/net2ftp/modules/help/02-user.html @@ -0,0 +1,259 @@ + + + +net2ftp help + + + + + +
What is FTP?
+You want to build a website, so you start creating web pages on your computer.

+ +Next, you need to publish them: you need to put those pages on a web server so that everyone would be able to view them.

+ +To transfer the files from your computer to that web server, a special protocol (transfer method) is used: FTP - the File Transfer Protocol. +This protocol was designed to be able to handle big files; it can for example resume a transfer if it was interrupted in the middle. + +

+ +
+ + +
+ +
+ +
What is net2ftp?
+The normal way to connect to your FTP server is to use an FTP client and to communicate via the FTP protocol. This is however not always possible: +
    +
  • you may be behind a corporate firewall at work, which may block the FTP communications;
  • +
  • you may be on holiday and connecting to the internet via a CyberCafe, where you may not be allowed to install an FTP client.
  • +

+When you use net2ftp these problems are solved: you connect to net2ftp using a regular web browser, and net2ftp translates your requests and takes care of the FTP communication.

+net2ftp also provides additional features, on top of the regular FTP features: the possibility to edit code using your web browser, to view the code with syntax highlighting, to upload-and-unzip archives, and to search for words on the FTP server.

+ + +

+ +
Icons used
+net2ftp uses the beautiful icons made by David Vignoni for KDE.

+ +Their meaning should be pretty straight-forward, but just in case, here are the conventions used:

+ +Icon Cancel and go back
+Icon Execute the action
+Icon Save the file
+Icon Bookmark the page
+Icon Refresh the page
+Icon Logout

+ +All icons will also display a tooltip with additional information if you keep your mouse pointer on the button for a second, without clicking on it.
+Try with this icon: Bookmark this page + +

+ +
+Note: these PNG icons have transparent regions which are not displayed correctly on Internet Explorer on this Help page: the transparent regions appear as grey. +This is a bug specific to Internet Explorer; refer to the Microsoft website for more details. +In net2ftp itself however, a fix has been applied which corrects this. +
+ +

+ +
Logging in
+Enter your FTP server, username and password. +The FTP server name can be "ftp.my-domain.com" if you have your own domain name. +If you don't have your own domain name, then it depends on your web hosting company. +It can be for example "ftp.geocities.com" or "ftp-www.earthlink.net". + +

+ +If you don't know your FTP server, username or password, then check out the support pages of your hosting company or contact their helpdesk.
+ +

+ +
Browsing the FTP server
+The first time you log in, you will see the contents of the root directory "/". +To go to a subdirectory, simply click on the subdirectory's name. +To go up to the parent directory, click on the top row with the label Up. + +

+ +If you know the name of the subdirectory you want to go to, you can also enter that name directly in the textbox on top of the page, and press ENTER.
+If you don't know the name exactly, click on Icon. +A window will pop up, which allows you to browse the FTP server and choose a directory. +Double-click on a subdirectory to go to that subdirectory. To go up, double-click on "..". +Once you are in the subdirectory you wanted to find, click on Choose. +The subdirectory name will be copied from the popup to the main window. + +

+ +It can happen that the FTP server returns the list of directories and files in an uncommon format. +In that case net2ftp shows you the lines bottom of the screen, under the heading "FTP server's output which is not recognized is shown below". + +

+ +If you want this fixed please contact the net2ftp developers. +They will analyse the output of your FTP server and improve the way net2ftp scans it. + +

+ +
Upload files, upload-and-unzip archives
+On the Browse Screen, click on the Upload button to go to the Upload Screen.

+There is one column on the left to upload files, and there can also be a right column to upload-and-unzip archives.

+Click on the Browse button to specify which file on your computer you want to upload or upload-and-unzip to the FTP server.

+ +Once you are ready to start the upload, click on Icon.

+ +The result screen will tell you if the upload was successful or not.
+To upload a file, you need write permissions on that directory of the FTP server.
+The file should also not be too big, as on most web servers the execution time of a script may be limited to 30 seconds.
+ +

+ +
Upload files using a Java applet (JUpload)
+On the Browse Screen, click on the Java Upload button.

+ +Click on the Add button to add directories and files to the upload queue (top left).
+When you select a directory, all the files inside will be transferred, and subdirectories will be created automatically.

+ +Once you are ready to start the upload, click on the Upload button.

+ +The results of the upload are printed just below the upload queue (bottom left).
+Two upload progress bars are displayed on the right: one indicating the progress of the current file, and the other indicating the total progress.

+ +As for the normal upload, the maximum filesize and maximum execution time is limited; by default this is 2 MB and 30 seconds.
+If the total size of the files in the upload queue is larger than a certain limit, the Java Applet will split the request in several smaller parts.
+ +

+ +
Downloading and zipping
+To download a file, simply click on its filename.

+ +To zip-and-download files and directories, select them on the Browse Screen and click on Download.
+The directories and their contents will be retrieved and zipped.
+A popup window will ask you where you would like to save the Zip file on your computer.

+ +Note that if the files inside are too big, the script will timeout and you won't be able to download anything.
+If this happens, try again with less directories and omit those which contain big files.

+ +You can also zip files and email them in attachment, or save them on the FTP server.
+On the Browse Screen, select the directories and files and click on Zip.
+ +

+ +
View code with syntax highlighting
+On the Browse Screen, click on the View link on the same line as the filename.
+ +

+ +
Edit text
+On the Browse Screen, click on the Edit link on the same line as the filename.
+Edit the text and press Icon to save the changes (you'll need write permissions for that).

+ +Depending on the type of file you're editing, alternative textareas can be used:
+ +
    +
  • For HTML files, there are 2 WYSIWYG (What-You-See-Is-What-You-Get) textareas: FCKEditor and TinyMCE.
  • +
  • To edit code with syntax highlighting use CodePress; it can highlight PHP, Javascript, Java and HTML code.
  • +
+ +

+ +
Copy, move, delete
+Select some files or directories and click on the Copy, Move or Delete button.

+ +If you copy or move, then choose the target directory. +This can be different for each directory or file that you selected. +To set all target directories to the same value, enter the target directory in the top textbox and click on the button "Set all targetdirectories".

+ +If you don't know the exact name of the target directory, click on Icon. A window will pop up, which allows you to browse the FTP server and choose a directory. Double-click on a subdirectory to go to that subdirectory. To go up, double-click on "..". Once you are in the subdirectory you wanted to find, click on Choose. The subdirectory name will be copied from the popup to the main window.
+ +To copy or move files to a second FTP server, enter the FTP server name, username and password on top.
+You need write permissions to be able to copy or move files to a directory.

+ +Once you are ready, click on Icon.

+ +The result screen will tell you if the action was successful or not. +If the files were too big, the script will run until the timeout is reached. +On most web servers the execution time of a script is limited to 30 seconds. + +

+ +
Rename
+ +Select directories or files and click on Rename on the Browse Screen.
+The next screen will ask for the new names.
+Fill these in and click on Icon. + +

+ +
Chmod
+ +Select directories or files and click on Chmod on the Browse Screen.
+The next screen show the current permissions; select or unselect the checkboxes which represent a permission.
+Click on Icon.

+ +Note that for the moment directories are not chmodded recursively -- subdirectories and files will remain unaffected. In the future, recursive chmodding will be added to net2ftp.
+ +

+ +
Update a file (beta function)
+This function is still in development, use it at your own risk. It can be activated or deactivated by the administrator in settings.inc.php.

+ +The purpose of this function is to merge a new version of a text file with an older version stored on the FTP server.

+ +On the Browse Screen, click on Update link on the same line as the filename.
+
    +
  • First, upload the new file.
  • +
  • net2ftp will compare the old file stored on the FTP server with the new file that was uploaded, and a the code will be printed the changes highlighted in red and green. + There are only 2 kinds of changes: a line can be deleted or added -- more complex changes such as move or edit are not foreseen, they're handled as a delete + an add. + Select the changes and indicate if you accept or reject them. By default all changes are marked as accepted.
  • +
  • Once you're done, submit the page, and the merged text will be shown in the Edit Screen. + At this point, nothing is saved yet, the original file is not yet overwritten. Once you've reviewed the changes, save them.
  • +
+ +

+ +
Access keys
+ +Since version 0.81, most actions can be executed with the keyboard.
+On Windows, use ALT + a letter. On Apple computers, use CTRL + a letter.
+On Internet Explorer, ALT + a letter will only focus on the page element; press ENTER to execute the action.

+ +Which letter can be used is shown in the tooltip.
+For example: to go back, the tooltip is "Back (accesskey b)".
+To display a tooltip, leave your mouse cursor for a few seconds over an icon or link without clicking it.

+ +Internet Explorer, Netscape and Mozilla browsers support Access Keys, but Opera doesn't. + +

+ +
Daily consumption limit
+ +Since version 0.81, the Administrator can choose to restrict each user's daily data transfer volume and script execution time.
+By default the data transfer volume is set to 50 MB per day and the script execution time to 2500 seconds per day - but this may be changed by the Administrator.
+Both figures are logged per IP address, and per FTP server.

+ +Once the daily consumption limit is reached, you will still be able to browse FTP servers, but the transfer of data to/from the server will be blocked.
+If you need unrestricted access to net2ftp, contact your net2ftp Administrator or install net2ftp on your own web server.
+ +



+ + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/03-administrator.html b/ehcp/net2ftp/modules/help/03-administrator.html new file mode 100644 index 0000000..c08321f --- /dev/null +++ b/ehcp/net2ftp/modules/help/03-administrator.html @@ -0,0 +1,179 @@ + + + +net2ftp help + + + + + +
Web server requirements
+
    +
  • Web server: any web server which can run PHP. The most popular one is Apache.
  • +
  • PHP: at least version 4.2.3. net2ftp works under Safe Mode. One advanced feature requires PHP 5 (send raw FTP command).
  • +
  • Disk space: 7.5 MB for net2ftp (less if you remove the plugins), and a few MB for the temporary files.
  • +
+ +
+ +
+ + +
+ +
+ +
Installation procedure
+
+1 - Unzip all the files on your computer, and upload them to your server.

+2 - The /temp directory should be chmodded to 777 (you can use net2ftp.com to do this).

+3 - Set your settings in the settings.inc.php file; read "Next steps" below for more details.

+4 - A database is only required if you want to log the actions of the users. To create the tables, execute the SQL queries below (also in the "create_tables.sql" file). This can be done easily in PhpMyAdmin, the popular front-end to MySQL.
+
+
+ +

+ +
Next steps
+
    +
  • Important settings in settings.inc.php: +
      +
    • Enter an Admin panel password. If no password is entered, the Admin panel is not accessible.
    • +
    • Turn logging on or off (requires a MySQL database).
    • +
    • Choose if you want to set a daily consumption limit (requires a MySQL database). + Since version 0.81, it is possible to restrict each user's daily data transfer volume and script execution time. + By default the data transfer volume is set to 50 MB per day and the script execution time to 1000 seconds per day - but this may be changed. + Both figures are logged per IP address, and per FTP server. + Once the daily consumption limit is reached, you will still be able to browse FTP servers, but the transfer of data to/from the server will be blocked. + If you need unrestricted access to net2ftp, contact your net2ftp Administrator or install net2ftp on your own web server.
    • +
    +
  • +
  • Set authorizations in settings_authorizations.inc.php: +
      +
    • Allow the users to connect to any FTP server, or only to a restricted list of FTP servers
    • +
    • Ban certain FTP servers
    • +
    • Ban certain IP addresses; users connecting from these addresses will not be able to use the website
    • +
    • Allow the users to connect to any FTP server port, or only to one port
    • +
    • Set the user home directories in the table net2ftp_users. + This will direct a user to his home directory when he logs in, and also restrict the browsing to this directory. + The other actions (rename, copy, ...) are not protected!! + If you need tighter security, set the user permissions directly on the FTP server. +
    • +
    +
  • +
  • To allow large file uploads and transfers, you may have to change these settings: +
      +
    • in the file php.ini (directory C:\windows or /etc): upload_max_filesize, post_max_size, max_execution_time, memory_limit
    • +
    • in the file php.conf (directory /etc/httpd/conf.d): LimitRequestBody
    • +
    +
  • +
  • Protect the /temp directory. If you use the Apache web server, the .htaccess file which is provided already does this.
  • +
  • In your php.ini file, register_globals can be set to "off" (this is more secure), but the application will off course also work if it is set to "on".
  • +
  • The files are transmitted using the BINARY mode by default. There is a list of file extensions (txt, php, ...) which are transmitted in ASCII mode. Edit this list if needed, it is located in /includes/filesystem.inc.php. Look for function ftpAsciiBinary.
  • +
+ +

+ +
Integration of net2ftp in an existing website
+ +
General tips and tricks
+ +The overall architecture of net2ftp has been completely reviewed in version 0.90, to allow easy integration of net2ftp in other web-based PHP applications. +The index.php file is a school example of how to integrate net2ftp:

+
    +
  • Set the constants NET2FTP_APPLICATION_ROOTDIR and NET2FTP_APPLICATION_ROOTDIR_URL
  • +
  • Include the net2ftp file main.inc.php
  • +
  • Execute 5 net2ftp() calls to send the HTTP headers, print the Javascript code, etc.
  • +
  • Check if an error occured to print out an error message.
  • +
+ +

+ +
Linking directly to a particular net2ftp page
+ +It is possible to direct users to a particular net2ftp page (browse a particular directory, upload page, ...). +Log in, go to the page you want to link to, and click on the Bookmark button: Icon. +The next page will show you the link to use; this link does not contain any login information (username or password). +When the users click on the link, they will be prompted for their login information by a popup window. + +

+ +
Mambo, Drupal and Xoops modules
+Ready-made net2ftp modules for Mambo, Drupal and Xoops are provided with net2ftp version 0.90! +Detailed installation instructions are given in the readme.txt file in the respective directories. +In all cases you'll first need to install the standalone version of net2ftp, and then install the Mambo, Drupal or Xoops module. +Read the instructions carefully, as each step is important. + +

+ +
Web-based control panels
+net2ftp has been integrated in the following control panels: + + +

+ +
Known bugs and limitations
+ +
PHP bugs
+ +
    + +
  • There is a bug in the PHP FTP function ftp_get() which causes end-of-line characters to be wrongly translated. +As a result, \r\n becomes \r on Windows when using the ASCII mode. +There is a workaround: on the net2ftp login screen, the BINARY mode is chosen by default. +Refer to http://bugs.php.net/bug.php?id=27633 for more details. +
    UPDATE 2004-12-13: A patch has been posted for this bug on the PHP internals mailing list. +
    UPDATE 2005-04-08: This bug is fixed in PHP version 4.3.11 and 5.0.4. +
  • + +
+ +
If your web server runs on Windows
+If you can log in but you cannot see any directory or file in the Browse Screen, then it is probably caused by a filesystem permission problem on your web server.

+ +Quote from the PHP bug report database:
+ +ftp_rawlist requires write permissions to the system's tempoarary directory.
+IIS's default installation does not include this in the permissions for IUSR.
+The bug is in system configuration, not PHP.
+

+ +This was discussed in the following PHP bug reports:
+http://bugs.php.net/bug.php?id=8874
+http://bugs.php.net/bug.php?id=13720
+http://bugs.php.net/bug.php?id=16057

+ +
If your FTP server is the IIS FTP server
+In the FTP server's configuration, set it for UNIX style directory listings rather than MSDOS style listings. + +

+ + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/04-developer.html b/ehcp/net2ftp/modules/help/04-developer.html new file mode 100644 index 0000000..82c5084 --- /dev/null +++ b/ehcp/net2ftp/modules/help/04-developer.html @@ -0,0 +1,26 @@ + + + +net2ftp help + + + + + +
Participate in the development!
+ +There is no real "development team"; net2ftp is mainly developed by David, while other people occasionally send in bug reports, patches and new language files. +It's up to you to decide which part you want to work on, depending on your skills and what you feel is most important. + +

+ +Experience in web development with PHP, HTML and MySQL is required to work on net2ftp itself. +However, there are lots of other things to do even if you have little experience: testing beta releases of net2ftp, translating net2ftp in a new language or maintaining existing translations or completing these Help pages. + +

+ +Before you start any major development, please post a message on the forum or mail David (david at net2ftp dot com - put "net2ftp" in the subject of your email) to check if no-one else is working on the same topic and to discuss integration aspects. +Same if you need help to locate something in the code - feel free to ask. + + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/help-user.html b/ehcp/net2ftp/modules/help/help-user.html new file mode 100644 index 0000000..9cba6a6 --- /dev/null +++ b/ehcp/net2ftp/modules/help/help-user.html @@ -0,0 +1,409 @@ + + + + + + + + + +net2ftp - a web based FTP client + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + +
+ Help for users + +
+ + + +
+ + +
+

What is FTP?

+
+

+You want to build a website, so you start creating web pages on your computer.

+ +Next, you need to publish them: you need to put those pages on a web server so that everyone would be able to view them.

+ +To transfer the files from your computer to that web server, a special protocol (transfer method) is used: FTP - the File Transfer Protocol. +This protocol was designed to be able to handle big files; it can for example resume a transfer if it was interrupted in the middle. +

+
+
+ + + +
+

What is net2ftp?

+
+

+The normal way to connect to your FTP server is to use an FTP client and to communicate via the FTP protocol. This is however not always possible: +

+
    +
  • you may be behind a corporate firewall at work, which may block the FTP communications;
  • +
  • you may be on holiday and connecting to the internet via a CyberCafe, where you may not be allowed to install an FTP client.
  • +
+
+When you use net2ftp these problems are solved: you connect to net2ftp using a regular web browser, and net2ftp translates your requests and takes care of the FTP communication.

+net2ftp also provides additional features, on top of the regular FTP features: the possibility to edit code using your web browser, to view the code with syntax highlighting, to upload-and-unzip archives, and to search for words on the FTP server. +

+
+
+ + + +
+

Icons used

+
+

+net2ftp uses the beautiful icons made by David Vignoni for KDE.

+ +Their meaning should be pretty straight-forward, but just in case, here are the conventions used:

+ +Icon Cancel and go back
+Icon Execute the action
+Icon Save the file
+Icon Bookmark the page
+Icon Refresh the page
+Icon Logout

+ +All icons will also display a tooltip with additional information if you keep your mouse pointer on the button for a second, without clicking on it.
+Try with this icon: Bookmark this page +

+
+
+ + + +
+

Logging in

+
+

+Enter your FTP server, username and password. +The FTP server name can be "ftp.my-domain.com" if you have your own domain name. +If you don't have your own domain name, then it depends on your web hosting company. +It can be for example "ftp.geocities.com" or "ftp-www.earthlink.net". + +

+ +If you don't know your FTP server, username or password, then check out the support pages of your hosting company or contact their helpdesk. +

+
+
+ + + +
+

Browsing the FTP server

+
+

+The first time you log in, you will see the contents of the root directory "/". +To go to a subdirectory, simply click on the subdirectory's name. +To go up to the parent directory, click on the top row with the label Up. + +

+ +If you know the name of the subdirectory you want to go to, you can also enter that name directly in the textbox on top of the page, and press ENTER.
+If you don't know the name exactly, click on Icon. +A window will pop up, which allows you to browse the FTP server and choose a directory. +Double-click on a subdirectory to go to that subdirectory. To go up, double-click on "..". +Once you are in the subdirectory you wanted to find, click on Choose. +The subdirectory name will be copied from the popup to the main window. + +

+ +It can happen that the FTP server returns the list of directories and files in an uncommon format. +In that case net2ftp shows you the lines bottom of the screen, under the heading "FTP server's output which is not recognized is shown below". + +

+ +If you want this fixed please contact the net2ftp developers. +They will analyse the output of your FTP server and improve the way net2ftp scans it. +

+
+
+ + + +
+

Upload files, upload-and-unzip archives

+
+

+On the Browse Screen, click on the Upload button to go to the Upload Screen.

+There is one column on the left to upload files, and there can also be a right column to upload-and-unzip archives.

+Click on the Browse button to specify which file on your computer you want to upload or upload-and-unzip to the FTP server.

+ +Once you are ready to start the upload, click on Icon.

+ +The result screen will tell you if the upload was successful or not.
+To upload a file, you need write permissions on that directory of the FTP server.
+The file should also not be too big, as on most web servers the execution time of a script may be limited to 30 seconds. +

+
+
+ + + +
+

Upload files using a Java applet (JUpload)

+
+

+On the Browse Screen, click on the Java Upload button.

+ +Click on the Add button to add directories and files to the upload queue (top left).
+When you select a directory, all the files inside will be transferred, and subdirectories will be created automatically.

+ +Once you are ready to start the upload, click on the Upload button.

+ +The results of the upload are printed just below the upload queue (bottom left).
+Two upload progress bars are displayed on the right: one indicating the progress of the current file, and the other indicating the total progress.

+ +As for the normal upload, the maximum filesize and maximum execution time is limited; by default this is 2 MB and 30 seconds.
+If the total size of the files in the upload queue is larger than a certain limit, the Java Applet will split the request in several smaller parts. +

+
+
+ + + +
+

Downloading and zipping

+
+

+To download a file, simply click on its filename.

+ +To zip-and-download files and directories, select them on the Browse Screen and click on Download.
+The directories and their contents will be retrieved and zipped.
+A popup window will ask you where you would like to save the Zip file on your computer.

+ +Note that if the files inside are too big, the script will timeout and you won't be able to download anything.
+If this happens, try again with less directories and omit those which contain big files.

+ +You can also zip files and email them in attachment, or save them on the FTP server.
+On the Browse Screen, select the directories and files and click on Zip. +

+
+
+ + + +
+

View code with syntax highlighting

+
+

+On the Browse Screen, click on the View link on the same line as the filename. +

+
+
+ + + +
+

Edit text

+
+

+On the Browse Screen, click on the Edit link on the same line as the filename.
+Edit the text and press Icon to save the changes (you'll need write permissions for that).

+ +Depending on the type of file you're editing, alternative textareas can be used:
+ +

+
    +
  • For HTML files, there are 2 WYSIWYG (What-You-See-Is-What-You-Get) textareas: FCKEditor and TinyMCE.
  • +
  • To edit code with syntax highlighting use Ace; it can highlight PHP, Javascript, Java and HTML code.
  • +
+
+

+
+
+ + + +
+

Copy, move, delete

+
+

+Select some files or directories and click on the Copy, Move or Delete button.

+ +If you copy or move, then choose the target directory. +This can be different for each directory or file that you selected. +To set all target directories to the same value, enter the target directory in the top textbox and click on the button "Set all targetdirectories".

+ +If you don't know the exact name of the target directory, click on Icon. A window will pop up, which allows you to browse the FTP server and choose a directory. Double-click on a subdirectory to go to that subdirectory. To go up, double-click on "..". Once you are in the subdirectory you wanted to find, click on Choose. The subdirectory name will be copied from the popup to the main window.
+ +To copy or move files to a second FTP server, enter the FTP server name, username and password on top.
+You need write permissions to be able to copy or move files to a directory.

+ +Once you are ready, click on Icon.

+ +The result screen will tell you if the action was successful or not. +If the files were too big, the script will run until the timeout is reached. +On most web servers the execution time of a script is limited to 30 seconds. +

+
+
+ + + +
+

Rename

+
+

+Select directories or files and click on Rename on the Browse Screen.
+The next screen will ask for the new names.
+Fill these in and click on Icon. +

+
+
+ + + +
+

Chmod

+
+

+Select directories or files and click on Chmod on the Browse Screen.
+The next screen show the current permissions; select or unselect the checkboxes which represent a permission.
+Click on Icon.

+ +Note that for the moment directories are not chmodded recursively -- subdirectories and files will remain unaffected. In the future, recursive chmodding will be added to net2ftp. +

+
+
+ + + +
+

Access keys

+
+

+Since version 0.81, most actions can be executed with the keyboard.
+On Windows, use ALT + a letter. On Apple computers, use CTRL + a letter.
+On Internet Explorer, ALT + a letter will only focus on the page element; press ENTER to execute the action.

+ +Which letter can be used is shown in the tooltip.
+For example: to go back, the tooltip is "Back (accesskey b)".
+To display a tooltip, leave your mouse cursor for a few seconds over an icon or link without clicking it.

+ +Internet Explorer, Netscape and Mozilla browsers support Access Keys, but Opera doesn't. +

+
+
+ + + +
+

Daily consumption limit

+
+

+Since version 0.81, the Administrator can choose to restrict each user's daily data transfer volume and script execution time.
+By default the data transfer volume is set to 50 MB per day and the script execution time to 2500 seconds per day - but this may be changed by the Administrator.
+Both figures are logged per IP address, and per FTP server.

+ +Once the daily consumption limit is reached, you will still be able to browse FTP servers, but the transfer of data to/from the server will be blocked.
+If you need unrestricted access to net2ftp, contact your net2ftp Administrator or install net2ftp on your own web server. +

+
+
+ + +
+ + + + + + + +
+ + +
+ + + + + + +
+ + + + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/help/main.css.php b/ehcp/net2ftp/modules/help/main.css.php new file mode 100644 index 0000000..7d9e915 --- /dev/null +++ b/ehcp/net2ftp/modules/help/main.css.php @@ -0,0 +1,376 @@ + + +/*------------------------------------------------------------------------ + General settings +------------------------------------------------------------------------*/ + +body { + background-color : #FFFFFF; + color: #000000; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-weight: normal; + line-height: normal; + margin-top: 3px; + margin-bottom: 3px; + margin-: 3px; + margin-: 3px; +} + +A:link { + color: #0000FF; + text-decoration: underline; +} + +A:visited { + color: #0000FF; + text-decoration: underline; +} + +A:hover { +} + +li { + margin-top: 5px; +} + +h1, h2, h3, p, form { + margin: 0; +} + +.menu_header { + background-color: #3333DD; + color: #FFFFFF; + font-size: 110%; + font-weight: bold; + padding-: 10px; + padding-: 10px; + padding-top: 3px; + padding-bottom: 3px; +} + +.menu_item { + line-height: 130%; + padding-top: 3px; + padding-bottom: 3px; + padding-: 10px; + padding-: 10px; + padding-bottom: 30px; +} + +/*------------------------------------------------------------------------ + Header level 1-3 +------------------------------------------------------------------------*/ + +.header_table { + background-color: #3333DD; + color: #FFFFFF; + width: 100%; +} + +.header11 { + background-color: #3333DD; + color: #FFFFFF; + border: 3px; + border-style: solid; + border-color: #CCCCCC; + margin-: auto; + margin-: auto; + margin-top: 10px; + margin-bottom: 10px; + width: 200px; + padding-bottom : 8px; + padding-top : 8px; + padding- : 12px; + padding- : 12px; + font-family: arial black, monaco, chicago; + font-size: 180%; + letter-spacing: 4px; + line-height: 30px; + text-align: center; +} + +.header21 { + color: #3333DD; + font-size: 150%; + font-weight: bold; + margin-top: 10px; + margin-bottom: 10px; + padding-top : 5px; +} + +.header31 { + color: #3333DD; + font-size: 110%; + font-weight: bold; + text-decoration: underline; +} + +/*------------------------------------------------------------------------ + Form objects: textboxes, buttons,... +------------------------------------------------------------------------*/ + +.input { + background-color: #FFFFFF; + color: #000000; + border-color: #330066; + border-width: 1px; +} + +.longinput { + background-color: #FFFFFF; + color: #000000; + border-color: #330066; + border-width: 1px; + width: 300px; +} + +.textarea { + background-color: #FFFFFF; + border-color: black; + border-width: 1px; +} + +.microbutton { + background-color: #DEDEDE; + color: #000000; + height: 17px; + font-size: 8px; +} + +.smallbutton { + background-color: #DEDEDE; + color: #000000; + height: 20px; + font-size: 10px; +} + +.smalllongbutton { + background-color: #DEDEDE; + color: #000000; + height: 20px; + font-size: 10px; +} + +.button { + background-color: #DEDEDE; + color: #000000; + height: 25px; +} + +.longbutton { + background-color: #DEDEDE; + color: #000000; + height: 25px; + width: 120px; +} + +.extralongbutton { + background-color: #DEDEDE; + color: #000000; + height: 25px; +} + +.uploadinputbutton { + background-color: #FFFFFF; + height: 20px; +} + + +/*------------------------------------------------------------------------ + Browse +------------------------------------------------------------------------*/ + +.browse_table { + margin-top: 0px; + width: 100%; + border: 2px solid #CCCCFF; +} + +.browse_rows_heading { + color: #000000; + background-color: #CCCCFF; + font-size: 110%; + font-weight: bold; +} + +.browse_rows_actions { + color: #000000; + background-color: #CCCCFF; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_odd { + color: #000000; + background-color: #FFFFFF; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_even { + color: #000000; + background-color: #EFEFEF; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_separator { + color: #000000; + background-color: #CCCCFF; + font-size: 80%; + text-align: center; +} + +/*------------------------------------------------------------------------ + View +------------------------------------------------------------------------*/ + +.view { + border: 1px; + border-style: solid; + border-color: #000066; + background-color: #FFFFFF; + font-family: Courier; + font-size: 90%; + margin-: 10px; + margin-: 10px; + margin-bottom: 10px; + margin-top: 10px; + padding: 10px; +} + +/*------------------------------------------------------------------------ + Edit +------------------------------------------------------------------------*/ + +.edit { + font-size: 11px; + font-family: Courier; +} + +/*------------------------------------------------------------------------ + Error +------------------------------------------------------------------------*/ + +.error-table { + border: 2px; + border-style: solid; + border-color: #FF0000; + margin: 10px; + padding: 0px; + width: 750px; +} + +.error-header { + background-color: #FF0000; + color: #FFFFFF; + text-decoration: underline; + font-size: 120%; + font-weight: bold; + line-height: 25px; + padding-: 10px; + padding-: 10px; + padding-top: 5px; + padding-bottom: 5px; +} + +.error-text { + color: #FF0000; + font-size: 100%; + text-align: ; + padding: 10px; +} + +.warning-box { + background-color: #FFDD00; + color: #000000; + border: 2px; + border-style: solid; + border-color: #FFCC33; + margin-: auto; + margin-: auto; + width: 90%; + +} + +.warning-text { + padding-bottom : 5px; + padding-top : 5px; + padding- : 10px; + padding- : 10px; +} + +/*------------------------------------------------------------------------ + Admin +------------------------------------------------------------------------*/ + +.tdheader1 { + font-size: 80%; + font-weight: bold; + text-align: center; +} + +.tditem1 { + font-size: 65%; + font-weight: normal; + text-align: ; +} + +/*------------------------------------------------------------------------ + Process bar +From the PHP Pear package HTML_Progress +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php +------------------------------------------------------------------------*/ + +.p_561b57 .progressBar { + background-color: #FFFFFF; + width: 172px; + height: 24px; + position: relative; + : 0px; + top: 0px; +} +.p_561b57 .progressBarBorder { + background-color: #FFFFFF; + width: 172px; + height: 24px; + position: relative; + : 0px; + top: 0px; + border-width: 0px; + border-style: solid; + border-color: #000000; +} +.p_561b57 .installationProgress { + width: 300px; + text-align: ; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; + background-color: #FFFFFF; +} +.p_561b57 .cellI { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 8px; + float: ; + background-color: #CCCCCC; +} +.p_561b57 .cellA { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 8px; + float: ; + background-color: #006600; + visibility: hidden; +} + diff --git a/ehcp/net2ftp/modules/help/top.html b/ehcp/net2ftp/modules/help/top.html new file mode 100644 index 0000000..e51fb34 --- /dev/null +++ b/ehcp/net2ftp/modules/help/top.html @@ -0,0 +1,23 @@ + + + +net2ftp help + + + + + + + + + + + +
net2ftp help
+ Welcome! | + User | + Administrator | + Developer +
+ + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/install/install.inc.php b/ehcp/net2ftp/modules/install/install.inc.php new file mode 100644 index 0000000..20d88e2 --- /dev/null +++ b/ehcp/net2ftp/modules/install/install.inc.php @@ -0,0 +1,308 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/install/net2ftp_installer.txt b/ehcp/net2ftp/modules/install/net2ftp_installer.txt new file mode 100644 index 0000000..73561a6 --- /dev/null +++ b/ehcp/net2ftp/modules/install/net2ftp_installer.txt @@ -0,0 +1,5734 @@ + | +// -------------- + + $directory = preg_replace("/[\\*\\?\\<\\>\\|]/", "", $directory); + + return $directory; + +} // end validateDirectory + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function validateGenericInput($input) { + +// -------------- +// Remove the following characters <> +// -------------- + + $input = preg_replace("/\\<\\>]/", "", $input); + return $input; + +} // end validateGenericInput + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function get_filename_extension($filename) { + +// -------------- +// This function returns the extension of a filename: +// name.ext1.ext2.ext3 --> ext3 +// name --> name +// .name --> name +// .name.ext --> ext +// It also converts the result to lower case: +// name.ext1.EXT2 --> ext2 +// -------------- + + $lastdotposition = strrpos($filename,"."); + + if ($lastdotposition === 0) { $extension = substr($filename, 1); } + elseif ($lastdotposition == "") { $extension = $filename; } + else { $extension = substr($filename, $lastdotposition + 1); } + + return strtolower($extension); + +} // End get_filename_extension + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function delete_dirorfile($dirorfile, $mode) { + +// -------------- +// This function deletes a local directory recursively +// Credit goes to itportal at gmail dot com, 17-Jul-2006 05:29 +// -------------- + + if ($mode != "execute") { $mode = "simulate"; } + + if (is_dir($dirorfile)) { + $directory = $dirorfile; + if(substr($dir, -1, 1) == "/"){ + $directory = substr($directory, 0, strlen($directory) - 1); + } + if ($handle = opendir("$directory")) { + while (false !== ($item = readdir($handle))) { + if ($item != "." && $item != "..") { + if (is_dir("$directory/$item")) { + if ($mode == "execute") { echo "Processing directory $directory/$item
\n"; } + delete_dirorfile("$directory/$item", $mode); + } else { + if ($mode == "execute") { + unlink("$directory/$item"); + echo "Removed file $directory/$item
\n"; + } + elseif ($mode == "simulate") { + echo "File $directory/$item
\n"; + } + } + } + } + closedir($handle); + if ($mode == "execute") { + rmdir($directory); + echo "Removed directory $directory
\n"; + } + elseif ($mode == "simulate") { + echo "Directory $directory
\n"; + } + } + } + elseif (is_file($dirorfile)) { + $file = $dirorfile; + if ($mode == "execute") { + unlink($file); + echo "Removed file $file
\n"; + } + elseif ($mode == "simulate") { + echo "File $file
\n"; + } + } + else { + if ($mode == "execute") { + echo "Could not remove $dirorfile
\n."; + } + elseif ($mode == "simulate") { + echo "Entry $dirorfile can't be removed.
\n"; + } + } + +} // End delete_dirorfile + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function ftpAsciiBinary($filename) { + +// -------------- +// Checks the first character of a file and its extension to see if it should be +// transferred in ASCII or Binary mode +// -------------- + + $firstcharacter = substr($filename, 0, 1); + + if ($firstcharacter == ".") { + $ftpmode = FTP_ASCII; + return $ftpmode; + } + + $last = get_filename_extension($filename); + + if ( + $last == "1st" || + $last == "asp" || + $last == "bas" || + $last == "bat" || + $last == "c" || + $last == "cfg" || + $last == "cfm" || + $last == "cgi" || + $last == "conf" || + $last == "cpp" || + $last == "css" || + $last == "csv" || + $last == "dhtml" || + $last == "diz" || + $last == "default" || + $last == "file" || + $last == "h" || + $last == "hpp" || + $last == "htaccess" || + $last == "htpasswd" || + $last == "htm" || + $last == "html" || + $last == "inc" || + $last == "ini" || + $last == "js" || + $last == "jsp" || + $last == "log" || + $last == "m3u" || + $last == "mak" || + $last == "msg" || + $last == "nfo" || + $last == "old" || + $last == "pas" || + $last == "patch" || + $last == "perl" || + $last == "php" || + $last == "php3" || + $last == "phps" || + $last == "phtml" || + $last == "pinerc" || + $last == "pl" || + $last == "pm" || + $last == "qmail" || + $last == "readme" || + $last == "setup" || + $last == "seq" || + $last == "sh" || + $last == "sql" || + $last == "style" || + $last == "tcl" || + $last == "tex" || + $last == "threads" || + $last == "tmpl" || + $last == "tpl" || + $last == "txt" || + $last == "ubb" || + $last == "vbs" || + $last == "xml" || + strstr($last, "htm") + ) { $ftpmode = FTP_ASCII; } + else { $ftpmode = FTP_BINARY; } + + return $ftpmode; + +} // end ftpAsciiBinary + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------------------------------------------------- +// PhpConcept Library - Zip Module 2.5 +// -------------------------------------------------------------------------------- +// License GNU/LGPL - Vincent Blavet - March 2006 +// http://www.phpconcept.net +// -------------------------------------------------------------------------------- +// +// Presentation : +// PclZip is a PHP library that manage ZIP archives. +// So far tests show that archives generated by PclZip are readable by +// WinZip application and other tools. +// +// Description : +// See readme.txt and http://www.phpconcept.net +// +// Warning : +// This library and the associated files are non commercial, non professional +// work. +// It should not have unexpected results. However if any damage is caused by +// this software the author can not be responsible. +// The use of this software is at the risk of the user. +// +// -------------------------------------------------------------------------------- +// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $ +// -------------------------------------------------------------------------------- + + // ----- Constants + define( 'PCLZIP_READ_BLOCK_SIZE', 2048 ); + + // ----- File list separator + // In version 1.x of PclZip, the separator for file list is a space + // (which is not a very smart choice, specifically for windows paths !). + // A better separator should be a comma (,). This constant gives you the + // abilty to change that. + // However notice that changing this value, may have impact on existing + // scripts, using space separated filenames. + // Recommanded values for compatibility with older versions : + //define( 'PCLZIP_SEPARATOR', ' ' ); + // Recommanded values for smart separation of filenames. + define( 'PCLZIP_SEPARATOR', ',' ); + + // ----- Error configuration + // 0 : PclZip Class integrated error handling + // 1 : PclError external library error handling. By enabling this + // you must ensure that you have included PclError library. + // [2,...] : reserved for futur use + define( 'PCLZIP_ERROR_EXTERNAL', 0 ); + + // ----- Optional static temporary directory + // By default temporary files are generated in the script current + // path. + // If defined : + // - MUST BE terminated by a '/'. + // - MUST be a valid, already created directory + // Samples : + // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' ); + // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' ); + define( 'PCLZIP_TEMPORARY_DIR', '' ); + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED ***** +// -------------------------------------------------------------------------------- + + // ----- Global variables + $g_pclzip_version = "2.5"; + + // ----- Error codes + // -1 : Unable to open file in binary write mode + // -2 : Unable to open file in binary read mode + // -3 : Invalid parameters + // -4 : File does not exist + // -5 : Filename is too long (max. 255) + // -6 : Not a valid zip file + // -7 : Invalid extracted file size + // -8 : Unable to create directory + // -9 : Invalid archive extension + // -10 : Invalid archive format + // -11 : Unable to delete file (unlink) + // -12 : Unable to rename file (rename) + // -13 : Invalid header checksum + // -14 : Invalid archive size + define( 'PCLZIP_ERR_USER_ABORTED', 2 ); + define( 'PCLZIP_ERR_NO_ERROR', 0 ); + define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 ); + define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 ); + define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 ); + define( 'PCLZIP_ERR_MISSING_FILE', -4 ); + define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 ); + define( 'PCLZIP_ERR_INVALID_ZIP', -6 ); + define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 ); + define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 ); + define( 'PCLZIP_ERR_BAD_EXTENSION', -9 ); + define( 'PCLZIP_ERR_BAD_FORMAT', -10 ); + define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 ); + define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 ); + define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 ); + define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 ); + define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 ); + define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 ); + define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 ); + define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 ); + define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 ); + define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 ); + define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 ); + + // ----- Options values + define( 'PCLZIP_OPT_PATH', 77001 ); + define( 'PCLZIP_OPT_ADD_PATH', 77002 ); + define( 'PCLZIP_OPT_REMOVE_PATH', 77003 ); + define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 ); + define( 'PCLZIP_OPT_SET_CHMOD', 77005 ); + define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 ); + define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 ); + define( 'PCLZIP_OPT_BY_NAME', 77008 ); + define( 'PCLZIP_OPT_BY_INDEX', 77009 ); + define( 'PCLZIP_OPT_BY_EREG', 77010 ); + define( 'PCLZIP_OPT_BY_PREG', 77011 ); + define( 'PCLZIP_OPT_COMMENT', 77012 ); + define( 'PCLZIP_OPT_ADD_COMMENT', 77013 ); + define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 ); + define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 ); + define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 ); + define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 ); + // Having big trouble with crypt. Need to multiply 2 long int + // which is not correctly supported by PHP ... + //define( 'PCLZIP_OPT_CRYPT', 77018 ); + define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 ); + + // ----- File description attributes + define( 'PCLZIP_ATT_FILE_NAME', 79001 ); + define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 ); + define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 ); + + // ----- Call backs values + define( 'PCLZIP_CB_PRE_EXTRACT', 78001 ); + define( 'PCLZIP_CB_POST_EXTRACT', 78002 ); + define( 'PCLZIP_CB_PRE_ADD', 78003 ); + define( 'PCLZIP_CB_POST_ADD', 78004 ); + /* For futur use + define( 'PCLZIP_CB_PRE_LIST', 78005 ); + define( 'PCLZIP_CB_POST_LIST', 78006 ); + define( 'PCLZIP_CB_PRE_DELETE', 78007 ); + define( 'PCLZIP_CB_POST_DELETE', 78008 ); + */ + + // -------------------------------------------------------------------------------- + // Class : PclZip + // Description : + // PclZip is the class that represent a Zip archive. + // The public methods allow the manipulation of the archive. + // Attributes : + // Attributes must not be accessed directly. + // Methods : + // PclZip() : Object creator + // create() : Creates the Zip archive + // listContent() : List the content of the Zip archive + // extract() : Extract the content of the archive + // properties() : List the properties of the archive + // -------------------------------------------------------------------------------- + class PclZip + { + // ----- Filename of the zip file + var $zipname = ''; + + // ----- File descriptor of the zip file + var $zip_fd = 0; + + // ----- Internal error handling + var $error_code = 1; + var $error_string = ''; + + // ----- Current status of the magic_quotes_runtime + // This value store the php configuration for magic_quotes + // The class can then disable the magic_quotes and reset it after + var $magic_quotes_status; + + // -------------------------------------------------------------------------------- + // Function : PclZip() + // Description : + // Creates a PclZip object and set the name of the associated Zip archive + // filename. + // Note that no real action is taken, if the archive does not exist it is not + // created. Use create() for that. + // -------------------------------------------------------------------------------- + function PclZip($p_zipname) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname"); + + // ----- Tests the zlib + if (!function_exists('gzopen')) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing"); + die('Abort '.basename(__FILE__).' : Missing zlib extensions'); + } + + // ----- Set the attributes + $this->zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1); + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exists and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + function listContent() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', ""); + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) + { + unset($p_list); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function extract() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", ""); + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options"); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional' + )); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis"); + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return 0; + } + } + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'"); + + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, + $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + function properties() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", ""); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) + { + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0); + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop); + return $v_prop; + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + function privCheckFormat($p_level=0) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", ""); + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo()); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo()); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", ""); + $v_result=1; + + // ----- Read the options + $i=0; + while ($i<$p_size) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'"); + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH : + case PCLZIP_OPT_REMOVE_PATH : + case PCLZIP_OPT_ADD_PATH : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if ( is_string($p_options_list[$i+1]) + && ($p_options_list[$i+1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored."); + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG : + case PCLZIP_OPT_BY_PREG : + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT : + case PCLZIP_OPT_ADD_COMMENT : + case PCLZIP_OPT_PREPEND_COMMENT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i+1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'"); + + // ----- Remove spaces + $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i+1]); + } + else if (is_integer($p_options_list[$i+1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'"); + $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array"); + $v_work_list = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag=false; + $v_sort_value=0; + for ($j=0; $j= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT : + case PCLZIP_CB_POST_EXTRACT : + case PCLZIP_CB_PRE_ADD : + case PCLZIP_CB_POST_ADD : + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i+1]; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'"); + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + .$p_options_list[$i]."'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")"); + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privOpenFd($p_mode) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privOpenFd", 'mode='.$p_mode); + $v_result=1; + + // ----- Look if already open + if ($this->zip_fd != 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode'); + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privCloseFd() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCloseFd", ""); + $v_result=1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privList(&$p_list) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privList", "list"); + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of Central Dir + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Offset : ".$v_central_dir['offset']."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + + // ----- Read each entry + for ($i=0; $i<$v_central_dir['entries']; $i++) + { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privConvertHeader2FileInfo($p_header, &$p_info) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privConvertHeader2FileInfo", "Filename='".$p_header['filename']."'"); + $v_result=1; + + // ----- Get the interesting attributes + $p_info['filename'] = $p_header['filename']; + $p_info['stored_filename'] = $p_header['stored_filename']; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privExtractByRule", "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'"); + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path,1,2)!=":/"))) +// net2ftp +// $p_path = "./".$p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path)-1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('rb')) != 1) + { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry : '$i'"); + + // ----- Read next Central dir entry + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'"); + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path"); + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one."); + $v_extract = true; + } + } + } + + // ----- Look for extract by ereg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'"); + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_extract = true; + } + } + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'"); + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_extract = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'"); + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range"); + $v_extract = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop"); + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop"); + break; + } + } + } + + // ----- Look for no rule, which means extract all the archive + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with no rule (extract all)"); + $v_extract = true; + } + + // ----- Check compression method + if ( ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0))) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported compression method (".$v_header['compression'].")"); + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '".$v_header['stored_filename']."' is " + ."compressed by an unsupported compression " + ."method (".$v_header['compression'].") "); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported file encryption"); + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + ." filename '".$v_header['stored_filename'] + ."'"); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "No need for extract"); + $v_result = $this->privConvertHeader2FileInfo($v_header, + $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file '".$v_header['filename']."', index '$i'"); + + // ----- Go to the file position + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_header['offset'])) + { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, + $p_path, $p_remove_path, + $p_remove_all_path, + $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'"); + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external']&0x00000010)==0x00000010) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The entry is a folder : need to be filtered"); + + $p_entry['status'] = "filtered"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "All path is removed"); + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } + + // ----- Look for path to remove + else if ($p_remove_path != "") + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look for some path to remove"); + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The folder is the same as the removed path '".$p_entry['filename']."'"); + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '".$p_entry['filename']."'"); + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Resulting file is '".$p_entry['filename']."'"); + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path."/".$p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Check the extract directory restriction"); + $v_inclusion + = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename']); + if ($v_inclusion == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction"); + + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '".$p_entry['filename']."' is " + ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'"); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_entry['filename']."' already exists"); + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is a directory"); + + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '".$p_entry['filename']."' is " + ."already used by an existing directory"); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + // ----- Look if file is write protected + else if (!is_writeable($p_entry['filename'])) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is write protected"); + + // ----- Change the file status + $p_entry['status'] = "write_protected"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '".$p_entry['filename']."' exists " + ."and is write protected"); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Look if the extracted file is older + else if (filemtime($p_entry['filename']) > $p_entry['mtime']) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is newer (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")"); + // ----- Change the file status + if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced"); + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be replaced"); + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '".$p_entry['filename']."' exists " + ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is older than the extrated one - will be replaced by the extracted one (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")"); + } + } + + // ----- Check the directory availability and create it if necessary + else { + if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) + $v_dir_to_check = $p_entry['filename']; + else if (!strstr($p_entry['filename'], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '".$p_entry['filename']."'"); + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode"); + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read '".$p_entry['size']."' bytes"); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read $v_read_size bytes"); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + + + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (Compression method ".$p_entry['compression'].")"); + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File is encrypted"); + /* + // ----- Read the encryption header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read 12 encryption header bytes"); + $v_encryption_header = @fread($this->zip_fd, 12); + + // ----- Read the encrypted & compressed file in a buffer + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".($p_entry['compressed_size']-12)."' compressed & encrypted bytes"); + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']-12); + + // ----- Decrypt the buffer + $this->privDecrypt($v_encryption_header, $v_buffer, + $p_entry['compressed_size']-12, $p_entry['crc']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Buffer is '".$v_buffer."'"); + */ + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".$p_entry['compressed_size']."' compressed bytes"); + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + } + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === FALSE) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to inflate compressed file"); + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode"); + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "chmod option activated '".$p_options[PCLZIP_OPT_SET_CHMOD]."'"); + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileInOutput(&$p_entry, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', ""); + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'"); + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes"); + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Reading '".$p_entry['size']."' bytes"); + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileAsString(&$p_entry, &$p_string) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', "p_entry['filename']='".$p_entry['filename']."'"); + $v_result=1; + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file in string (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file +// if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes"); + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (compression method '".$p_entry['compression']."')"); + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === FALSE) { + // TBC + } + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + else { + // TBC : error : can not extract a folder in a string + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadFileHeader", ""); + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid File header"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header : '".$v_binary_data."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header (Hex) : '".bin2hex($v_binary_data)."'"); + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "File name length : ".$v_data['filename_len']); + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\''); + + // ----- Get extra_fields + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extra field length : ".$v_data['extra_len']); + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } + else { + $p_header['extra'] = ''; + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\''); + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\''); + $p_header['compression'] = $v_data['compression']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\''); + $p_header['size'] = $v_data['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\''); + $p_header['compressed_size'] = $v_data['compressed_size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\''); + $p_header['crc'] = $v_data['crc']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\''); + $p_header['flag'] = $v_data['flag']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\''); + $p_header['filename_len'] = $v_data['filename_len']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\''); + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + else + { + $p_header['mtime'] = time(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Attribut[$key] = ".$v_data[$key]); + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadCentralFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", ""); + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'"); + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']); + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else + $p_header['filename'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\''); + + // ----- Get extra + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']); + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else + $p_header['extra'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\''); + + // ----- Get comment + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']); + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else + $p_header['comment'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\''); + + // ----- Extract properties + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\''); + + // ----- Recuperate date in UNIX format + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + else + { + $p_header['mtime'] = time(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')'); + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\''); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFileHeaders", ""); + $v_result=1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename" : TBC To Be Completed'); + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "version_extracted" : TBC To Be Completed'); + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "flag" : TBC To Be Completed'); + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "compression" : TBC To Be Completed'); + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "mtime" : TBC To Be Completed'); + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename_len" : TBC To Be Completed'); + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !'); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header'); + $p_local_header['size'] = $p_central_header['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\''); + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\''); + $p_local_header['crc'] = $p_central_header['crc']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_local_header['crc']).'\''); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadEndCentralDir(&$p_central_dir) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadEndCentralDir", ""); + $v_result=1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size of the file :$v_size"); + @fseek($this->zip_fd, $v_size); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this->zip_fd).'\''); + if (@ftell($this->zip_fd) != $v_size) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment'); + @fseek($this->zip_fd, $v_size-22); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this->zip_fd).'\''); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = @unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found central dir at the default position."); + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir'); + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size-$v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this->zip_fd).'\''); + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) + { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + $v_bytes = ($v_bytes << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this->zip_fd).'\''); + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to find End of Central Dir Record signature"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) + { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record : '".$v_binary_data."'"); + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record (Hex) : '".bin2hex($v_binary_data)."'"); + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Comment length : ".$v_data['comment_size']); + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The central dir is not at the end of the archive. Some trailing bytes exists after the archive."); + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + .' Some trailing bytes exists after the archive.'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + else + $p_central_dir['comment'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\''); + + $p_central_dir['entries'] = $v_data['entries']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\''); + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\''); + $p_central_dir['offset'] = $v_data['offset']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\''); + $p_central_dir['size'] = $v_data['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\''); + $p_central_dir['disk'] = $v_data['disk']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\''); + $p_central_dir['disk_start'] = $v_data['disk_start']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\''); + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "central_dir[$key] = ".$p_central_dir[$key]); + //} + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function privDirCheck($p_dir, $p_is_dir=false) + { + $v_result = 1; + + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDirCheck", "entry='$p_dir', is_dir='".($p_is_dir?"true":"false")."'"); + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1)=='/')) + { + $p_dir = substr($p_dir, 0, strlen($p_dir)-1); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for entry '$p_dir'"); + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory"); + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'"); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) + { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + } + + // ----- Create the directory + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'"); + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created"); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorLog($p_error_code=0, $p_error_string='') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } + else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } + else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDecrypt() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDecrypt($p_encryption_header, &$p_buffer, $p_size, $p_crc) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', "size=".$p_size.""); + $v_result=1; + + // ----- To Be Modified ;-) + $v_pwd = "test"; + + $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header, + $p_crc, $v_pwd); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDisableMagicQuotes() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', ""); + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote already disabled"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Current magic_quotes_runtime status is '".($this->magic_quotes_status==0?'disable':'enable')."'"); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Disable magic_quotes"); + @set_magic_quotes_runtime(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privSwapBackMagicQuotes() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', ""); + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote not modified"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Enable back magic_quotes"); + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + } + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- + function PclZipUtilPathInclusion($p_dir, $p_path) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathInclusion", "dir='$p_dir', path='$p_path'"); + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( ($p_dir == '.') + || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_dir '".$p_dir."'"); + } + if ( ($p_path == '.') + || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_path '".$p_path."'"); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = sizeof($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Working on dir($i)='".$v_list_dir[$i]."' and path($j)='".$v_list_path[$j]."'"); + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Items ($i,$j) are different"); + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Look for tie break"); + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Looking on dir($i)='".($i < $v_list_dir_size?$v_list_dir[$i]:'')."' and path($j)='".($j < $v_list_path_size?$v_list_path[$j]:'')."'"); + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } + else if ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- + function PclZipUtilOptionText($p_option) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilOptionText", "option='".$p_option."'"); + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if (( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option)) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key); + return $v_key; + } + } + + $v_result = 'Unknown'; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- + function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) + { + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position+1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; + } + // -------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------------------------------------------------- +// PhpConcept Library - Tar Module 1.3 +// -------------------------------------------------------------------------------- +// License GNU/GPL - Vincent Blavet - August 2001 +// http://www.phpconcept.net +// -------------------------------------------------------------------------------- +// +// Presentation : +// PclTar is a library that allow you to create a GNU TAR + GNU ZIP archive, +// to add files or directories, to extract all the archive or a part of it. +// So far tests show that the files generated by PclTar are readable by +// gzip tools and WinZip application. +// +// Description : +// See readme.txt (English & Franais) and http://www.phpconcept.net +// +// Warning : +// This library and the associated files are non commercial, non professional +// work. +// It should not have unexpected results. However if any damage is caused by +// this software the author can not be responsible. +// The use of this software is at the risk of the user. +// +// -------------------------------------------------------------------------------- + +// ----- Look for double include +if (!defined("PCL_TAR")) +{ + define( "PCL_TAR", 1 ); + + // ----- Configuration variable + // Theses values may be changed by the user of PclTar library + if (!isset($g_pcltar_lib_dir)) + $g_pcltar_lib_dir = "lib"; + + // ----- Error codes + // -1 : Unable to open file in binary write mode + // -2 : Unable to open file in binary read mode + // -3 : Invalid parameters + // -4 : File does not exist + // -5 : Filename is too long (max. 99) + // -6 : Not a valid tar file + // -7 : Invalid extracted file size + // -8 : Unable to create directory + // -9 : Invalid archive extension + // -10 : Invalid archive format + // -11 : Unable to delete file (unlink) + // -12 : Unable to rename file (rename) + // -13 : Invalid header checksum + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED ***** +// -------------------------------------------------------------------------------- + + // ----- Global variables + $g_pcltar_version = "1.3"; + + // ----- Extract extension type (.php3/.php/...) + $g_pcltar_extension = substr(strrchr(basename($PATH_TRANSLATED), '.'), 1); + + // ----- Include other libraries + // This library should be called by each script before the include of PhpZip + // Library in order to limit the potential 'lib' directory path problem. +// NET2FTP +// Do not include the 2 other libraries again, they are already included below +// if (!defined("PCLERROR_LIB")) +// { +// include($g_pcltar_lib_dir."/pclerror.lib.".$g_pcltar_extension); +// } +// if (!defined("PCLTRACE_LIB")) +// { +// include($g_pcltar_lib_dir."/pcltrace.lib.".$g_pcltar_extension); +// } + + // -------------------------------------------------------------------------------- + // Function : PclTarList() + // Description : + // Gives the list of all the files present in the tar archive $p_tarname. + // The list is the function result, it will be 0 on error. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // 0 on error (Use PclErrorCode() and PclErrorString() for more info) + // or + // An array containing file properties. Each file properties is an array of + // properties. + // The properties (array field names) are : + // filename, size, mode, uid, gid, mtime, typeflag, status + // Exemple : $v_list = PclTarList("my.tar"); + // for ($i=0; $i"; + // -------------------------------------------------------------------------------- + function PclTarList($p_tarname, $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarList", "tar=$p_tarname, mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = PclTarHandleExtract($p_tarname, 0, $p_list, "list", "", $p_mode, "")) != 1) + { + unset($p_list); + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtract() + // Description : + // Extract all the files present in the archive $p_tarname, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + + function PclTarExtract($p_tarname, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtract", "tar='$p_tarname', path='$p_path', remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, 0, $p_list, "complete", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtractList() + // Description : + // Extract the files present in the archive $p_tarname and specified in + // $p_filelist, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a directory is spcified in the list, all the files from this directory + // will be extracted. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + function PclTarExtractList($p_tarname, $p_filelist, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtractList", "tar=$p_tarname, list, path=$p_path, remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, $p_filelist, $p_list, "partial", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) + { + // ----- Create a list with the elements from the string + $v_list = explode(" ", $p_filelist); + + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtract($p_tarname, $v_list, $p_list, "partial", $p_path, $v_tar_mode, $p_remove_path)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type p_filelist"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarExtractIndex() + // Description : + // Extract the files present in the archive $p_tarname and specified at + // the indexes in $p_index, in the directory + // $p_path. The relative path of the archived files are keep and become + // relative to $p_path. + // If a directory is specified in the list, the directory only is created. All + // the file stored in this archive for this directory + // are not extracted. + // If a file with the same name already exists it will be replaced. + // If the path to the file does not exist, it will be created. + // Depending on the $p_tarname extension (.tar, .tar.gz or .tgz) the + // function will determine the type of the archive. + // Parameters : + // $p_tarname : Name of an existing tar file + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files will be extracted. The files will use + // their memorized path from $p_path. + // If $p_path is "", files will be extracted in "./". + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_path and $p_remove_path are commulative. + // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension + // Return Values : + // Same as PclTarList() + // -------------------------------------------------------------------------------- + function PclTarExtractIndex($p_tarname, $p_index, $p_path="./", $p_remove_path="", $p_mode="") + { + TrFctStart(__FILE__, __LINE__, "PclTarExtractIndex", "tar=$p_tarname, index='$p_index', path=$p_path, remove_path='$p_remove_path', mode='$p_mode'"); + $v_result=1; + + // ----- Extract the tar format from the extension + if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) + { + if (($p_mode = PclTarHandleExtension($p_tarname)) == "") + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + } + + // ----- Look if the $p_index is really an integer + if (is_integer($p_index)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtractByIndexList($p_tarname, "$p_index", $p_list, $p_path, $p_remove_path, $v_tar_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_index)) + { + // ----- Call the extracting fct + if (($v_result = PclTarHandleExtractByIndexList($p_tarname, $p_index, $p_list, $p_path, $p_remove_path, $v_tar_mode)) != 1) + { + TrFctEnd(__FILE__, __LINE__, 0, PclErrorString()); + return(0); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclErrorLog(-3, "Invalid variable type $p_index"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return 0; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtract() + // Description : + // Parameters : + // $p_tarname : Filename of the tar (or tgz) archive + // $p_file_list : An array which contains the list of files to extract, this + // array may be empty when $p_mode is 'complete' + // $p_list_detail : An array where will be placed the properties of each extracted/listed file + // $p_mode : 'complete' will extract all files from the archive, + // 'partial' will look for files in $p_file_list + // 'list' will only list the files from the archive without any extract + // $p_path : Path to add while writing the extracted files + // $p_tar_mode : 'tar' for GNU TAR archive, 'tgz' for compressed archive + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtract($p_tarname, $p_file_list, &$p_list_detail, $p_mode, $p_path, $p_tar_mode, $p_remove_path) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtract", "archive='$p_tarname', list, mode=$p_mode, path=$p_path, tar_mode=$p_tar_mode, remove_path='$p_remove_path'"); + $v_result=1; + $v_nb = 0; + $v_extract_all = TRUE; + $v_listing = FALSE; + + // ----- Check the path + if (($p_path == "") || ((substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../"))) + $p_path = "./".$p_path; + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Study the mode + switch ($p_mode) { + case "complete" : + // ----- Flag extract of all files + $v_extract_all = TRUE; + $v_listing = FALSE; + break; + case "partial" : + // ----- Flag extract of specific files + $v_extract_all = FALSE; + $v_listing = FALSE; + break; + case "list" : + // ----- Flag list of all files + $v_extract_all = FALSE; + $v_listing = TRUE; + break; + default : + // ----- Error log + PclErrorLog(-3, "Invalid extract mode ($p_mode)"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Open the tar file + if ($p_tar_mode == "tar") + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + $v_tar = fopen($p_tarname, "rb"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in gzip binary read mode"); + $v_tar = @gzopen($p_tarname, "rb"); + } + + // ----- Check that the archive is open + if ($v_tar == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open archive '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Read the blocks + While (!($v_end_of_file = ($p_tar_mode == "tar"?feof($v_tar):gzeof($v_tar)))) + { + TrFctMessage(__FILE__, __LINE__, 3, "Looking for next header ..."); + + // ----- Clear cache of file infos + clearstatcache(); + + // ----- Reset extract tag + $v_extract_file = FALSE; + $v_extraction_stopped = 0; + + // ----- Read the 512 bytes header + if ($p_tar_mode == "tar") + $v_binary_data = fread($v_tar, 512); + else + $v_binary_data = gzread($v_tar, 512); + + // ----- Read the header properties + if (($v_result = PclTarHandleReadHeader($v_binary_data, $v_header)) != 1) + { + // ----- Close the archive file + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for empty blocks to skip + if ($v_header[filename] == "") + { + TrFctMessage(__FILE__, __LINE__, 2, "Empty block found. End of archive ?"); + continue; + } + + TrFctMessage(__FILE__, __LINE__, 2, "Found file '$v_header[filename]', size '$v_header[size]'"); + + // ----- Look for partial extract + if ((!$v_extract_all) && (is_array($p_file_list))) + { + TrFctMessage(__FILE__, __LINE__, 2, "Look if the file '$v_header[filename]' need to be extracted"); + + // ----- By default no unzip if the file is not found + $v_extract_file = FALSE; + + // ----- Look into the file list + for ($i=0; $i strlen($p_file_list[$i])) && (substr($v_header[filename], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) + { + // ----- The file is in the directory, so extract it + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is in directory '$p_file_list[$i]' : extract it"); + $v_extract_file = TRUE; + + // ----- End of loop + break; + } + } + + // ----- It is a file, so compare the file names + else if ($p_file_list[$i] == $v_header[filename]) + { + // ----- File found + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' should be extracted"); + $v_extract_file = TRUE; + + // ----- End of loop + break; + } + } + + // ----- Trace + if (!$v_extract_file) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' should not be extracted"); + } + } + else + { + // ----- All files need to be extracted + $v_extract_file = TRUE; + } + + // ----- Look if this file need to be extracted + if (($v_extract_file) && (!$v_listing)) + { + // ----- Look for path to remove + if (($p_remove_path != "") + && (substr($v_header[filename], 0, $p_remove_path_size) == $p_remove_path)) + { + TrFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '$v_header[filename]'"); + // ----- Remove the path + $v_header[filename] = substr($v_header[filename], $p_remove_path_size); + TrFctMessage(__FILE__, __LINE__, 3, "Reslting file is '$v_header[filename]'"); + } + + // ----- Add the path to the file + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + TrFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path)-1); + TrFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + + // ----- Add the path + if (substr($v_header[filename], 0, 1) == "/") + $v_header[filename] = $p_path.$v_header[filename]; + else + $v_header[filename] = $p_path."/".$v_header[filename]; + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '$v_header[filename]', size '$v_header[size]'"); + + // ----- Check that the file does not exists + if (file_exists($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' already exists"); + + // ----- Look if file is a directory + if (is_dir($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is a directory"); + + // ----- Change the file status + $v_header[status] = "already_a_directory"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if file is write protected + else if (!is_writeable($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is write protected"); + + // ----- Change the file status + $v_header[status] = "write_protected"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if the extracted file is older + else if (filemtime($v_header[filename]) > $v_header[mtime]) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is newer (".date("l dS of F Y h:i:s A", filemtime($v_header[filename])).") than the extracted file (".date("l dS of F Y h:i:s A", $v_header[mtime]).")"); + + // ----- Change the file status + $v_header[status] = "newer_exist"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Check the directory availability and create it if necessary + else + { + if ($v_header[typeflag]=="5") + $v_dir_to_check = $v_header[filename]; + else if (!strstr($v_header[filename], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($v_header[filename]); + + if (($v_result = PclTarHandlerDirCheck($v_dir_to_check)) != 1) + { + TrFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '$v_header[filename]'"); + + // ----- Change the file status + $v_header[status] = "path_creation_fail"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Do the extraction + if (($v_extract_file) && ($v_header[typeflag]!="5")) + { + // ----- Open the destination file in write mode + if (($v_dest_file = @fopen($v_header[filename], "wb")) == 0) + { + TrFctMessage(__FILE__, __LINE__, 2, "Error while opening '$v_header[filename]' in write binary mode"); + + // ----- Change the file status + $v_header[status] = "write_error"; + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Start extraction of '$v_header[filename]'"); + + // ----- Read data + $n = floor($v_header[size]/512); + for ($i=0; $i<$n; $i++) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read complete 512 bytes block number ".($i+1)); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, 512); + } + if (($v_header[size] % 512) != 0) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read last ".($v_header[size] % 512)." bytes in a 512 block"); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, ($v_header[size] % 512)); + } + + // ----- Close the destination file + fclose($v_dest_file); + + // ----- Change the file mode, mtime + touch($v_header[filename], $v_header[mtime]); + //chmod($v_header[filename], DecOct($v_header[mode])); + } + + // ----- Check the file size + clearstatcache(); + if (filesize($v_header[filename]) != $v_header[size]) + { + // ----- Close the archive file + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Error log + PclErrorLog(-7, "Extracted file '$v_header[filename]' does not have the correct file size '".filesize($v_filename)."' ('$v_header[size]' expected). Archive may be corrupted."); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Extraction of file '$v_header[filename]' skipped."); + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + } + + // ----- Look for file that is not to be unzipped + else + { + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Jump file '$v_header[filename]'"); + TrFctMessage(__FILE__, __LINE__, 4, "Position avant jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + + // ----- Jump to next file + if ($p_tar_mode == "tar") + fseek($v_tar, ($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + + TrFctMessage(__FILE__, __LINE__, 4, "Position aprs jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + } + + if ($p_tar_mode == "tar") + $v_end_of_file = feof($v_tar); + else + $v_end_of_file = gzeof($v_tar); + + // ----- File name and properties are logged if listing mode or file is extracted + if ($v_listing || $v_extract_file || $v_extraction_stopped) + { + TrFctMessage(__FILE__, __LINE__, 2, "Memorize info about file '$v_header[filename]'"); + + // ----- Log extracted files + if (($v_file_dir = dirname($v_header[filename])) == $v_header[filename]) + $v_file_dir = ""; + if ((substr($v_header[filename], 0, 1) == "/") && ($v_file_dir == "")) + $v_file_dir = "/"; + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + + // ----- Increment + $v_nb++; + } + } + + // ----- Close the tarfile + if ($p_tar_mode == "tar") + fclose($v_tar); + else + gzclose($v_tar); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtractByIndexList() + // Description : + // Extract the files which are at the indexes specified. If the 'file' at the + // index is a directory, the directory only is created, not all the files stored + // for that directory. + // Parameters : + // $p_index_string : String of indexes of files to extract. The form of the + // string is "0,4-6,8-12" with only numbers and '-' for + // for range, and ',' to separate ranges. No spaces or ';' + // are allowed. + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtractByIndexList($p_tarname, $p_index_string, &$p_list_detail, $p_path, $p_remove_path, $p_tar_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtractByIndexList", "archive='$p_tarname', index_string='$p_index_string', list, path=$p_path, remove_path='$p_remove_path', tar_mode=$p_tar_mode"); + $v_result=1; + $v_nb = 0; + + // ----- TBC : I should check the string by a regexp + + // ----- Check the path + if (($p_path == "") || ((substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../") && (substr($p_path, 0, 2) != "./"))) + $p_path = "./".$p_path; + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the tar file + if ($p_tar_mode == "tar") + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + $v_tar = @fopen($p_tarname, "rb"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 3, "Open file in gzip binary read mode"); + $v_tar = @gzopen($p_tarname, "rb"); + } + + // ----- Check that the archive is open + if ($v_tar == 0) + { + // ----- Error log + PclErrorLog(-2, "Unable to open archive '$p_tarname' in binary read mode"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Manipulate the index list + $v_list = explode(",", $p_index_string); + sort($v_list); + + // ----- Loop on the index list + $v_index=0; + for ($i=0; ($i $p_index_stop) + { + TrFctMessage(__FILE__, __LINE__, 2, "Stop extraction, past stop index"); + break; + } + + // ----- Clear cache of file infos + clearstatcache(); + + // ----- Reset extract tag + $v_extract_file = FALSE; + $v_extraction_stopped = 0; + + // ----- Read the 512 bytes header + if ($p_tar_mode == "tar") + $v_binary_data = fread($v_tar, 512); + else + $v_binary_data = gzread($v_tar, 512); + + // ----- Read the header properties + if (($v_result = PclTarHandleReadHeader($v_binary_data, $v_header)) != 1) + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for empty blocks to skip + if ($v_header[filename] == "") + { + TrFctMessage(__FILE__, __LINE__, 2, "Empty block found. End of archive ?"); + continue; + } + + TrFctMessage(__FILE__, __LINE__, 2, "Found file '$v_header[filename]', size '$v_header[size]'"); + + // ----- Look if file is in the range to be extracted + if (($p_index_current >= $p_index_start) && ($p_index_current <= $p_index_stop)) + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is in the range to be extracted"); + $v_extract_file = TRUE; + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' is out of the range"); + $v_extract_file = FALSE; + } + + // ----- Look if this file need to be extracted + if ($v_extract_file) + { + if (($v_result = PclTarHandleExtractFile($v_tar, $v_header, $p_path, $p_remove_path, $p_tar_mode)) != 1) + { + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + + // ----- Look for file that is not to be extracted + else + { + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Jump file '$v_header[filename]'"); + TrFctMessage(__FILE__, __LINE__, 4, "Position avant jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + + // ----- Jump to next file + if ($p_tar_mode == "tar") + fseek($v_tar, ($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + + TrFctMessage(__FILE__, __LINE__, 4, "Position aprs jump [".($p_tar_mode=="tar"?ftell($v_tar):gztell($v_tar))."]"); + } + + if ($p_tar_mode == "tar") + $v_end_of_file = feof($v_tar); + else + $v_end_of_file = gzeof($v_tar); + + // ----- File name and properties are logged if listing mode or file is extracted + if ($v_extract_file) + { + TrFctMessage(__FILE__, __LINE__, 2, "Memorize info about file '$v_header[filename]'"); + + // ----- Log extracted files + if (($v_file_dir = dirname($v_header[filename])) == $v_header[filename]) + $v_file_dir = ""; + if ((substr($v_header[filename], 0, 1) == "/") && ($v_file_dir == "")) + $v_file_dir = "/"; + + // ----- Add the array describing the file into the list + $p_list_detail[$v_nb] = $v_header; + + // ----- Increment + $v_nb++; + } + + // ----- Increment the current file index + $p_index_current++; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtractFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtractFile($p_tar, &$v_header, $p_path, $p_remove_path, $p_tar_mode) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtractFile", "archive_descr='$p_tar', path=$p_path, remove_path='$p_remove_path', tar_mode=$p_tar_mode"); + $v_result=1; + + // TBC : I should replace all $v_tar by $p_tar in this function .... + $v_tar = $p_tar; + $v_extract_file = 1; + + $p_remove_path_size = strlen($p_remove_path); + + // ----- Look for path to remove + if (($p_remove_path != "") + && (substr($v_header[filename], 0, $p_remove_path_size) == $p_remove_path)) + { + TrFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '$v_header[filename]'"); + // ----- Remove the path + $v_header[filename] = substr($v_header[filename], $p_remove_path_size); + TrFctMessage(__FILE__, __LINE__, 3, "Resulting file is '$v_header[filename]'"); + } + + // ----- Add the path to the file + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + TrFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path)-1); + TrFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + + // ----- Add the path + if (substr($v_header[filename], 0, 1) == "/") + $v_header[filename] = $p_path.$v_header[filename]; + else + $v_header[filename] = $p_path."/".$v_header[filename]; + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '$v_header[filename]', size '$v_header[size]'"); + + // ----- Check that the file does not exists + if (file_exists($v_header[filename])) + { + + TrFctMessage(__FILE__, __LINE__, 2, "File '$v_header[filename]' already exists"); + + // ----- Look if file is a directory + if (is_dir($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is a directory"); + + // ----- Change the file status + $v_header[status] = "already_a_directory"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + // ----- Look if file is write protected + else if (!is_writeable($v_header[filename])) + if (!is_writeable($v_header[filename])) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is write protected"); + + // ----- Change the file status + $v_header[status] = "write_protected"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + + // ----- Look if the extracted file is older + else if (filemtime($v_header[filename]) > $v_header[mtime]) + { + TrFctMessage(__FILE__, __LINE__, 2, "Existing file '$v_header[filename]' is newer (".date("l dS of F Y h:i:s A", filemtime($v_header[filename])).") than the extracted file (".date("l dS of F Y h:i:s A", $v_header[mtime]).")"); + + // ----- Change the file status + $v_header[status] = "newer_exist"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Check the directory availability and create it if necessary + else + { + if ($v_header[typeflag]=="5") + $v_dir_to_check = $v_header[filename]; + else if (!strstr($v_header[filename], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($v_header[filename]); + + if (($v_result = PclTarHandlerDirCheck($v_dir_to_check)) != 1) + { + TrFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '$v_header[filename]'"); + + // ----- Change the file status + $v_header[status] = "path_creation_fail"; + + // ----- Skip the extract + $v_extraction_stopped = 1; + $v_extract_file = 0; + } + } + + // ----- Do the real bytes extraction (if not a directory) + if (($v_extract_file) && ($v_header[typeflag]!="5")) + { + // ----- Open the destination file in write mode + if (($v_dest_file = @fopen($v_header[filename], "wb")) == 0) + { + TrFctMessage(__FILE__, __LINE__, 2, "Error while opening '$v_header[filename]' in write binary mode"); + + // ----- Change the file status + $v_header[status] = "write_error"; + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Start extraction of '$v_header[filename]'"); + + // ----- Read data + $n = floor($v_header[size]/512); + for ($i=0; $i<$n; $i++) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read complete 512 bytes block number ".($i+1)); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, 512); + } + if (($v_header[size] % 512) != 0) + { + TrFctMessage(__FILE__, __LINE__, 3, "Read last ".($v_header[size] % 512)." bytes in a 512 block"); + if ($p_tar_mode == "tar") + $v_content = fread($v_tar, 512); + else + $v_content = gzread($v_tar, 512); + fwrite($v_dest_file, $v_content, ($v_header[size] % 512)); + } + + // ----- Close the destination file + fclose($v_dest_file); + + // ----- Change the file mode, mtime + touch($v_header[filename], $v_header[mtime]); + //chmod($v_header[filename], DecOct($v_header[mode])); + } + + // ----- Check the file size + clearstatcache(); + + if (filesize($v_header[filename]) != $v_header[size]) + { + // ----- Error log + PclErrorLog(-7, "Extracted file '$v_header[filename]' does not have the correct file size '".filesize($v_filename)."' ('$v_header[size]' expected). Archive may be corrupted."); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Trace + TrFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + else + { + TrFctMessage(__FILE__, __LINE__, 2, "Extraction of file '$v_header[filename]' skipped."); + + // ----- Jump to next file + TrFctMessage(__FILE__, __LINE__, 2, "Jump to next file"); + if ($p_tar_mode == "tar") + fseek($v_tar, ftell($v_tar)+(ceil(($v_header[size]/512))*512)); + else + gzseek($v_tar, gztell($v_tar)+(ceil(($v_header[size]/512))*512)); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleReadHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleReadHeader($v_binary_data, &$v_header) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleReadHeader", ""); + $v_result=1; + + // ----- Read the 512 bytes header + /* + if ($p_tar_mode == "tar") + $v_binary_data = fread($p_tar, 512); + else + $v_binary_data = gzread($p_tar, 512); + */ + + // ----- Look for no more block + if (strlen($v_binary_data)==0) + { + $v_header[filename] = ""; + $v_header[status] = "empty"; + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result, "End of archive found"); + return $v_result; + } + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 512) + { + $v_header[filename] = ""; + $v_header[status] = "invalid_header"; + TrFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Error log + PclErrorLog(-10, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Calculate the checksum + $v_checksum = 0; + // ..... First part of the header + for ($i=0; $i<148; $i++) + { + $v_checksum+=ord(substr($v_binary_data,$i,1)); + } + // ..... Ignore the checksum value and replace it by ' ' (space) + for ($i=148; $i<156; $i++) + { + $v_checksum += ord(' '); + } + // ..... Last part of the header + for ($i=156; $i<512; $i++) + { + $v_checksum+=ord(substr($v_binary_data,$i,1)); + } + TrFctMessage(__FILE__, __LINE__, 3, "Calculated checksum : $v_checksum"); + + // ----- Extract the values + TrFctMessage(__FILE__, __LINE__, 2, "Header : '$v_binary_data'"); + $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data); + + // ----- Extract the checksum for check + $v_header[checksum] = OctDec(trim($v_data[checksum])); + TrFctMessage(__FILE__, __LINE__, 3, "File checksum : $v_header[checksum]"); + if ($v_header[checksum] != $v_checksum) + { + TrFctMessage(__FILE__, __LINE__, 2, "File checksum is invalid : $v_checksum calculated, $v_header[checksum] expected"); + + $v_header[filename] = ""; + $v_header[status] = "invalid_header"; + + // ----- Look for last block (empty block) + if (($v_checksum == 256) && ($v_header[checksum] == 0)) + { + $v_header[status] = "empty"; + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result, "End of archive found"); + return $v_result; + } + + // ----- Error log + PclErrorLog(-13, "Invalid checksum : $v_checksum calculated, $v_header[checksum] expected"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + TrFctMessage(__FILE__, __LINE__, 2, "File checksum is valid ($v_checksum)"); + + // ----- Extract the properties + $v_header[filename] = trim($v_data[filename]); + TrFctMessage(__FILE__, __LINE__, 2, "Name : '$v_header[filename]'"); + $v_header[mode] = OctDec(trim($v_data[mode])); + TrFctMessage(__FILE__, __LINE__, 2, "Mode : '".DecOct($v_header[mode])."'"); + $v_header[uid] = OctDec(trim($v_data[uid])); + TrFctMessage(__FILE__, __LINE__, 2, "Uid : '$v_header[uid]'"); + $v_header[gid] = OctDec(trim($v_data[gid])); + TrFctMessage(__FILE__, __LINE__, 2, "Gid : '$v_header[gid]'"); + $v_header[size] = OctDec(trim($v_data[size])); + TrFctMessage(__FILE__, __LINE__, 2, "Size : '$v_header[size]'"); + $v_header[mtime] = OctDec(trim($v_data[mtime])); + TrFctMessage(__FILE__, __LINE__, 2, "Date : ".date("l dS of F Y h:i:s A", $v_header[mtime])); + if (($v_header[typeflag] = $v_data[typeflag]) == "5") + { + $v_header[size] = 0; + TrFctMessage(__FILE__, __LINE__, 2, "Size (folder) : '$v_header[size]'"); + } + TrFctMessage(__FILE__, __LINE__, 2, "File typeflag : $v_header[typeflag]"); + /* ----- All these fields are removed form the header because they do not carry interesting info + $v_header[link] = trim($v_data[link]); + TrFctMessage(__FILE__, __LINE__, 2, "Linkname : $v_header[linkname]"); + $v_header[magic] = trim($v_data[magic]); + TrFctMessage(__FILE__, __LINE__, 2, "Magic : $v_header[magic]"); + $v_header[version] = trim($v_data[version]); + TrFctMessage(__FILE__, __LINE__, 2, "Version : $v_header[version]"); + $v_header[uname] = trim($v_data[uname]); + TrFctMessage(__FILE__, __LINE__, 2, "Uname : $v_header[uname]"); + $v_header[gname] = trim($v_data[gname]); + TrFctMessage(__FILE__, __LINE__, 2, "Gname : $v_header[gname]"); + $v_header[devmajor] = trim($v_data[devmajor]); + TrFctMessage(__FILE__, __LINE__, 2, "Devmajor : $v_header[devmajor]"); + $v_header[devminor] = trim($v_data[devminor]); + TrFctMessage(__FILE__, __LINE__, 2, "Devminor : $v_header[devminor]"); + */ + + // ----- Set the status field + $v_header[status] = "ok"; + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandlerDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check (without / at the end). + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function PclTarHandlerDirCheck($p_dir) + { + $v_result = 1; + + TrFctStart(__FILE__, __LINE__, "PclTarHandlerDirCheck", "$p_dir"); + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + TrFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory"); + return 1; + } + + // ----- Look for file alone + /* + if (!strstr("$p_dir", "/")) + { + TrFctEnd(__FILE__, __LINE__, "'$p_dir' is a file with no directory"); + return 1; + } + */ + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + TrFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'"); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = PclTarHandlerDirCheck($p_parent_dir)) != 1) + { + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + } + + // ----- Create the directory + TrFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'"); + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclErrorLog(-8, "Unable to create directory '$p_dir'"); + + // ----- Return + TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + return PclErrorCode(); + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created"); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTarHandleExtension() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandleExtension($p_tarname) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandleExtension", "tar=$p_tarname"); + + // ----- Look for file extension + + if ((substr($p_tarname, -7) == ".tar.gz") || (substr($p_tarname, -4) == ".tgz")) + { + TrFctMessage(__FILE__, __LINE__, 2, "Archive is a gzip tar"); + $v_tar_mode = "tgz"; + } + else if (substr($p_tarname, -4) == ".tar") + { + TrFctMessage(__FILE__, __LINE__, 2, "Archive is a tar"); + $v_tar_mode = "tar"; + } + else + { + // ----- Error log + PclErrorLog(-9, "Invalid archive extension"); + + TrFctMessage(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); + + $v_tar_mode = ""; + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_tar_mode); + return $v_tar_mode; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : PclTarHandlePathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclTarHandlePathReduction($p_dir) + { + TrFctStart(__FILE__, __LINE__, "PclTarHandlePathReduction", "dir='$p_dir'"); + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") + { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + for ($i=sizeof($v_list)-1; $i>=0; $i--) + { + // ----- Look for current path + if ($v_list[$i] == ".") + { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") + { + // ----- Ignore it and ignore the $i-1 + $i--; + } + else if (($v_list[$i] == "") && ($i!=(sizeof($v_list)-1)) && ($i!=0)) + { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + else + { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Return + TrFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + +// ----- End of double include look +} + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------------------------------------------------- +// PhpConcept Library (PCL) Error 1.0 +// -------------------------------------------------------------------------------- +// License GNU/GPL - Vincent Blavet - Mars 2001 +// http://www.phpconcept.net & http://phpconcept.free.fr +// -------------------------------------------------------------------------------- +// Franais : +// La description de l'usage de la librairie PCL Error 1.0 n'est pas encore +// disponible. Celle-ci n'est pour le moment distribue qu'avec les +// dveloppements applicatifs de PhpConcept. +// Une version indpendante sera bientot disponible sur http://www.phpconcept.net +// +// English : +// The PCL Error 1.0 library description is not available yet. This library is +// released only with PhpConcept application and libraries. +// An independant release will be soon available on http://www.phpconcept.net +// +// -------------------------------------------------------------------------------- +// +// * Avertissement : +// +// Cette librairie a t cre de faon non professionnelle. +// Son usage est au risque et pril de celui qui l'utilise, en aucun cas l'auteur +// de ce code ne pourra tre tenu pour responsable des ventuels dgats qu'il pourrait +// engendrer. +// Il est entendu cependant que l'auteur a ralis ce code par plaisir et n'y a +// cach aucun virus, ni malveillance. +// Cette libairie est distribue sous la license GNU/GPL (http://www.gnu.org) +// +// * Auteur : +// +// Ce code a t crit par Vincent Blavet (vincent@blavet.net) sur son temps +// de loisir. +// +// -------------------------------------------------------------------------------- + +// ----- Look for double include +if (!defined("PCLERROR_LIB")) +{ + define( "PCLERROR_LIB", 1 ); + + // ----- Version + $g_pcl_error_version = "1.0"; + + // ----- Internal variables + // These values must only be change by PclError library functions + $g_pcl_error_string = ""; + $g_pcl_error_code = 1; + + + // -------------------------------------------------------------------------------- + // Function : PclErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorLog($p_error_code=0, $p_error_string="") + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + $g_pcl_error_code = $p_error_code; + $g_pcl_error_string = $p_error_string; + + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorFatal() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorFatal($p_file, $p_line, $p_error_string="") + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + $v_message = ""; + $v_message .= "

PclError Library has detected a fatal error on file '$p_file', line $p_line

"; + $v_message .= "

$p_error_string

"; + $v_message .= ""; + die($v_message); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorReset() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + $g_pcl_error_code = 1; + $g_pcl_error_string = ""; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorCode() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + return($g_pcl_error_code); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclErrorString() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclErrorString() + { + global $g_pcl_error_string; + global $g_pcl_error_code; + + return($g_pcl_error_string." [code $g_pcl_error_code]"); + } + // -------------------------------------------------------------------------------- + + +// ----- End of double include look +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------------------------------------------------- +// PhpConcept Library (PCL) Trace 2.0-beta1 +// -------------------------------------------------------------------------------- +// License GNU/GPL - Vincent Blavet - August 2003 +// http://www.phpconcept.net +// -------------------------------------------------------------------------------- +// +// The PCL Trace library description is not available yet. +// This library was first released only with PclZip library. +// An independant release will be soon available on http://www.phpconcept.net +// +// -------------------------------------------------------------------------------- +// +// Warning : +// This library and the associated files are non commercial, non professional +// work. +// It should not have unexpected results. However if any damage is caused by +// this software the author can not be responsible. +// The use of this software is at the risk of the user. +// +// -------------------------------------------------------------------------------- + + // ----- Version + $g_pcltrace_version = "2.0-beta1"; + + // ----- Internal variables + // These values must be change by PclTrace library functions + $g_pcl_trace_mode = "memory"; + $g_pcl_trace_filename = "trace.txt"; + $g_pcl_trace_name = array(); + $g_pcl_trace_index = 0; + $g_pcl_trace_level = 0; + $g_pcl_trace_suspend = false; + //$g_pcl_trace_entries = array(); + + + // ----- For compatibility reason + define ('PCLTRACE_LIB', 1); + + // -------------------------------------------------------------------------------- + // Function : TrOn($p_level, $p_mode, $p_filename) + // Description : + // Parameters : + // $p_level : Trace level + // $p_mode : Mode of trace displaying : + // 'normal' : messages are displayed at function call + // 'memory' : messages are memorized in a table and can be display by + // TrDisplay() function. (default) + // 'log' : messages are writed in the file $p_filename + // -------------------------------------------------------------------------------- + function PclTraceOn($p_level=1, $p_mode="memory", $p_filename="trace.txt") + { + TrOn($p_level, $p_mode, $p_filename); + } + function TrOn($p_level=1, $p_mode="memory", $p_filename="trace.txt") + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Enable trace mode + $g_pcl_trace_level = $p_level; + + // ----- Memorize mode and filename + switch ($p_mode) { + case "normal" : + case "memory" : + case "log" : + $g_pcl_trace_mode = $p_mode; + break; + default : + $g_pcl_trace_mode = "logged"; + } + + // ----- Memorize filename + $g_pcl_trace_filename = $p_filename; + + $g_pcl_trace_suspend = false; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : IsTrOn() + // Description : + // Return value : + // The trace level (0 for disable). + // -------------------------------------------------------------------------------- + function PclTraceIsOn() + { + return IsTrOn(); + } + function IsTrOn() + { + global $g_pcl_trace_level; + + return($g_pcl_trace_level); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : TrOff() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceOff() + { + TrOff(); + } + function TrOff() + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + + // ----- Clean + $g_pcl_trace_mode = "memory"; + unset($g_pcl_trace_entries); + unset($g_pcl_trace_name); + unset($g_pcl_trace_index); + + // ----- Switch off trace + $g_pcl_trace_level = 0; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTraceSuspend() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceSuspend() + { + global $g_pcl_trace_suspend; + + + $g_pcl_trace_suspend = true; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : PclTraceResume() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceResume() + { + global $g_pcl_trace_suspend; + + + $g_pcl_trace_suspend = false; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : TrFctStart() + // Description : + // Just a trace function for debbugging purpose before I use a better tool !!!! + // Start and stop of this function is by $g_pcl_trace_level global variable. + // Parameters : + // $p_level : Level of trace required. + // -------------------------------------------------------------------------------- + function PclTraceFctStart($p_file, $p_line, $p_name, $p_param="", $p_message="") + { + TrFctStart($p_file, $p_line, $p_name, $p_param, $p_message); + } + function TrFctStart($p_file, $p_line, $p_name, $p_param="", $p_message="") + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Look for disabled trace + if (($g_pcl_trace_level < 1) || ($g_pcl_trace_suspend)) + return; + + // ----- Add the function name in the list + if (!isset($g_pcl_trace_name)) + $g_pcl_trace_name = $p_name; + else + $g_pcl_trace_name .= ",".$p_name; + + // ----- Update the function entry + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = $p_name; + $g_pcl_trace_entries[$i]['param'] = $p_param; + $g_pcl_trace_entries[$i]['message'] = ""; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "1"; // means start of function + + // ----- Update the message entry + if ($p_message != "") + { + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = ""; + $g_pcl_trace_entries[$i]['param'] = ""; + $g_pcl_trace_entries[$i]['message'] = $p_message; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "3"; // means message + } + + // ----- Action depending on mode + PclTraceAction($g_pcl_trace_entries[$i]); + + // ----- Increment the index + $g_pcl_trace_index++; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : TrFctEnd() + // Description : + // Just a trace function for debbugging purpose before I use a better tool !!!! + // Start and stop of this function is by $g_pcl_trace_level global variable. + // Parameters : + // $p_level : Level of trace required. + // -------------------------------------------------------------------------------- + function PclTraceFctEnd($p_file, $p_line, $p_return=1, $p_message="") + { + TrFctEnd($p_file, $p_line, $p_return, $p_message); + } + function TrFctEnd($p_file, $p_line, $p_return=1, $p_message="") + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Look for disabled trace + if (($g_pcl_trace_level < 1) || ($g_pcl_trace_suspend)) + return; + + // ----- Extract the function name in the list + // ----- Remove the function name in the list + if (!($v_name = strrchr($g_pcl_trace_name, ","))) + { + $v_name = $g_pcl_trace_name; + $g_pcl_trace_name = ""; + } + else + { + $g_pcl_trace_name = substr($g_pcl_trace_name, 0, strlen($g_pcl_trace_name)-strlen($v_name)); + $v_name = substr($v_name, -strlen($v_name)+1); + } + + // ----- Decrement the index + $g_pcl_trace_index--; + + // ----- Update the message entry + if ($p_message != "") + { + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = ""; + $g_pcl_trace_entries[$i]['param'] = ""; + $g_pcl_trace_entries[$i]['message'] = $p_message; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "3"; // means message + } + + // ----- Update the function entry + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = $v_name; + $g_pcl_trace_entries[$i]['param'] = $p_return; + $g_pcl_trace_entries[$i]['message'] = ""; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "2"; // means end of function + + // ----- Action depending on mode + PclTraceAction($g_pcl_trace_entries[$i]); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : TrFctMessage() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceFctMessage($p_file, $p_line, $p_level, $p_message="") + { + TrFctMessage($p_file, $p_line, $p_level, $p_message); + } + function TrFctMessage($p_file, $p_line, $p_level, $p_message="") + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Look for disabled trace + if (($g_pcl_trace_level < $p_level) || ($g_pcl_trace_suspend)) + return; + + // ----- Update the entry + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = ""; + $g_pcl_trace_entries[$i]['param'] = ""; + $g_pcl_trace_entries[$i]['message'] = $p_message; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "3"; // means message of function + + // ----- Action depending on mode + PclTraceAction($g_pcl_trace_entries[$i]); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : TrMessage() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceMessage($p_file, $p_line, $p_level, $p_message="") + { + TrMessage($p_file, $p_line, $p_level, $p_message); + } + function TrMessage($p_file, $p_line, $p_level, $p_message="") + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + global $g_pcl_trace_suspend; + + // ----- Look for disabled trace + if (($g_pcl_trace_level < $p_level) || ($g_pcl_trace_suspend)) + return; + + // ----- Update the entry + $i = sizeof($g_pcl_trace_entries); + $g_pcl_trace_entries[$i]['name'] = ""; + $g_pcl_trace_entries[$i]['param'] = ""; + $g_pcl_trace_entries[$i]['message'] = $p_message; + $g_pcl_trace_entries[$i]['file'] = $p_file; + $g_pcl_trace_entries[$i]['line'] = $p_line; + $g_pcl_trace_entries[$i]['index'] = $g_pcl_trace_index; + $g_pcl_trace_entries[$i]['type'] = "4"; // means simple message + + // ----- Action depending on mode + PclTraceAction($g_pcl_trace_entries[$i]); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclTraceAction() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function PclTraceAction($p_entry) + { + global $g_pcl_trace_level; + global $g_pcl_trace_mode; + global $g_pcl_trace_filename; + global $g_pcl_trace_name; + global $g_pcl_trace_index; + global $g_pcl_trace_entries; + + if ($g_pcl_trace_mode == "normal") + { + for ($i=0; $i<$p_entry['index']; $i++) + echo "---"; + if ($p_entry['type'] == 1) + echo "".$p_entry['name']."(".$p_entry['param'].") : ".$p_entry['message']." [".$p_entry[file].", ".$p_entry[line]."]
"; + else if ($p_entry['type'] == 2) + echo "".$p_entry['name']."()=".$p_entry['param']." : ".$p_entry['message']." [".$p_entry[file].", ".$p_entry[line]."]
"; + else + echo $p_entry['message']." [".$p_entry['file'].", ".$p_entry['line']."]
"; + } + } + // -------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------------------------------------------------- +// Register global variables and validate user input +// -------------------------------------------------------------------------------- +if (isset($_POST["package_url"]) == true) { $package_url = validateGenericInput($_POST["package_url"]); } +if (isset($_POST["ftpserver"]) == true) { $ftpserver = validateGenericInput($_POST["ftpserver"]); } +if (isset($_POST["ftpserverport"]) == true) { $ftpserverport = validateGenericInput($_POST["ftpserverport"]); } +if (isset($_POST["username"]) == true) { $username = validateGenericInput($_POST["username"]); } +if (isset($_POST["password"]) == true) { $password = validateGenericInput($_POST["password"]); } +if (isset($_POST["passivemode"]) == true) { $passivemode = validateGenericInput($_POST["passivemode"]); } +if (isset($_POST["targetdirectory"]) == true) { $targetdirectory = validateDirectory($_POST["targetdirectory"]); } +if (isset($_POST["screen"]) == true) { $screen = validateGenericInput($_POST["screen"]); } +if (isset($_SERVER["SCRIPT_NAME"]) == true) { $php_self = $_SERVER["SCRIPT_NAME"]; } +elseif (isset($_SERVER["PHP_SELF"]) == true) { $php_self = $_SERVER["PHP_SELF"]; } +$tempdir = dirname(__FILE__) . "/net2ftp_temp_NET2FTP_TEMPDIR_EXTENSION"; + + + +// -------------------------------------------------------------------------------- +// HTML start +// -------------------------------------------------------------------------------- + +?> + + + + + + + +net2ftp - a web based FTP client + + + +
net2ftp installation script

+ +
+ +Package
+
+

+ + + + + + + +
FTP server port
Username
Password
Passive mode
Installation directory
+ + or + +
+ +\n"; + flush(); + +// Open handle + $handle = fopen($package_url, "rb"); + if ($handle == false) { echo "Could not open the package file $package_url.
If you see a PHP warning message above regarding \"php_network_getaddresses: getaddrinfo failed\", check whether allow_url_fopen is set to On in php.ini, and try to restart your web server."; exit(); } + +// Read contents - PHP 4 vs PHP 5 + $contents = ""; + if (version_compare(phpversion(), "5", "<")) { + while (!feof($handle)) { $contents .= @fread($handle, 8192); } + } + else { + $contents = @stream_get_contents($handle); + } + if ($contents == "") { echo "Could not read the package file $package_url."; exit(); } + +// Close handle + @fclose($handle); + +// ---------------------------------------------- +// Write the archive to a file +// ---------------------------------------------- + +// Print comment + echo "Putting the package on the FTP server...
\n"; + flush(); + +// Target + $archive_file = $tempdir . "/" . basename($package_url); + +// Open handle + $handle = @fopen($archive_file, "wb"); + if ($handle == false) { echo "Could not open the file $archive_file."; exit(); } + +// Write contents + $fwrite_result = @fwrite($handle, $contents); + if ($fwrite_result == false && @filesize($source) > 0) { echo "Could not write the file $archive_file."; exit(); } + +// Close handle + fclose($handle); + +// ---------------------------------------------- +// Unzip the archive +// ---------------------------------------------- + +// Print comment + echo "Extracting the directories and files from the package...
\n"; + flush(); + + $list = ""; + $archive_type = get_filename_extension($archive_file); + +// Extract zip + if ($archive_type == "zip") { + $zip = new PclZip($archive_file); + $list = $zip->extract($p_path = $tempdir); + } +// Extract tar, tgz and gz + elseif ($archive_type == "tar" || $archive_type == "tgz" || $archive_type == "gz") { + $list = PclTarExtract($archive_file, $tempdir); + } + +// Check result + if ($list <= 0) { echo "Could not extract the archive."; exit(); } + +// ---------------------------------------------- +// Unzip the archive +// ---------------------------------------------- + +// Print comment + echo "Copying the directories and files via FTP...
\n"; + flush(); + +?> +
+
+ + or + +
+
+\n"; exit(); } + +// Login with username and password + $login_result = @ftp_login($conn_id, $username, $password); + if ($login_result == false) { echo "Unable to login into the FTP server $ftpserver with username $username
\n"; exit(); } + +// Set passive mode + if ($passivemode == "yes") { $ftp_pasv_result = @ftp_pasv($conn_id, TRUE); } + +// Create directories and put files + + for ($i=0; $i\n"; } + } +// File entry in the archive: put the file +// If this fails, create the required directories and try again + elseif (is_file($source) == true) { + $ftpmode = ftpAsciiBinary($source); + $ftp_put_result = @ftp_put($conn_id, $target, $source, $ftpmode); + if ($ftp_put_result == true) { echo "Copied file $target
\n"; } + else { + $target_relative_parts = explode("/", str_replace("\\", "/", dirname($target_relative))); + $directory_to_create = $targetdirectory; + for ($j=0; $j\n"; } + } // end if + } // end for + $ftp_put_result = @ftp_put($conn_id, $target, $source, $ftpmode); + if ($ftp_put_result == true) { echo "Copied file $target
\n"; } + else { echo "Could not copy file $target
\n"; } + } + } + } + + +// Close connection + ftp_quit($conn_id); + +// Print comment + echo "Done.\n"; + flush(); + +} +// -------------------------------------------------------------------------------- +// Screen 3 +// Delete the installation script +// -------------------------------------------------------------------------------- + +elseif ($screen == 3) { + echo "Deleting the temporary files and the install script...
\n"; + flush(); + +?> +
+
+ +
+
+ +Done. +
+ + + \ No newline at end of file diff --git a/ehcp/net2ftp/modules/install/package_list.txt b/ehcp/net2ftp/modules/install/package_list.txt new file mode 100644 index 0000000..84a34a4 --- /dev/null +++ b/ehcp/net2ftp/modules/install/package_list.txt @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/modules/jupload/jupload.inc.php b/ehcp/net2ftp/modules/jupload/jupload.inc.php new file mode 100644 index 0000000..f3af550 --- /dev/null +++ b/ehcp/net2ftp/modules/jupload/jupload.inc.php @@ -0,0 +1,399 @@ +$object) { +// if ($object['name'] != "") { +// $file_counter = $file_counter + 1; +// $uploadedFilesArray["$file_counter"]["name"] = $object['name']; +// $uploadedFilesArray["$file_counter"]["tmp_name"] = $object['tmp_name']; +// $uploadedFilesArray["$file_counter"]["size"] = $object['size']; +// $uploadedFilesArray["$file_counter"]["error"] = $object['error']; +// // Look for special encoded jupload files +// $contentType = $object['type']; +// if (substr($contentType,0,7) == "jupload") { +// $base64_encoded_path = substr($contentType,8); +// $base64_decoded_path = base64_decode($base64_encoded_path); +// $uploadedFilesArray["$file_counter"]["absolute_directory"] = $base64_decoded_path; +// } // end if +// } // end if +// } // end foreach + +// Code for new file jupload applet (jupload version 5.0.8) + $file_counter = 0; + foreach($_FILES as $tagname=>$object) { + if ($object['name'] != "") { + $file_counter = $file_counter + 1; + $uploadedFilesArray["$file_counter"]["name"] = $object['name']; + $uploadedFilesArray["$file_counter"]["type"] = $object['type']; + $uploadedFilesArray["$file_counter"]["tmp_name"] = $object['tmp_name']; + $uploadedFilesArray["$file_counter"]["error"] = $object['error']; + $uploadedFilesArray["$file_counter"]["size"] = $object['size']; + $uploadedFilesArray["$file_counter"]["mime"] = validateEntry($_POST["mimetype".$file_counter]); + $uploadedFilesArray["$file_counter"]["relative_directory"] = validateDirectory($_POST["relpathinfo".$file_counter]); + $uploadedFilesArray["$file_counter"]["mtime"] = validateEntry($_POST["filemodificationdate".$file_counter]); + } // end if + } // end foreach + + echo "Please wait, the files are being transferred to the FTP server...
\n"; + flush(); + +// ------------------------------------ +// 2. POST METHOD: Move files from the *webserver's* temporary directory to *net2ftp's* +// temporary directory (move_uploaded_files). +// ------------------------------------ + if ($_SERVER["REQUEST_METHOD"] == "POST" && sizeof($uploadedFilesArray) > 0) { + + $moved_counter = 0; + for ($j=1; $j<=sizeof($uploadedFilesArray); $j++) { + $file_name = $uploadedFilesArray["$j"]["name"]; + $file_tmp_name = $uploadedFilesArray["$j"]["tmp_name"]; + $file_size = $uploadedFilesArray["$j"]["size"]; + $file_error = $uploadedFilesArray["$j"]["error"]; + $file_relative_directory = $uploadedFilesArray["$j"]["relative_directory"]; + + if (($file_name != "" && $file_tmp_name == "") || $file_size > $net2ftp_settings["max_filesize"]) { +// The case ($file_name != "" && $file_tmp_name == "") occurs when the file is bigger than the directives set in php.ini +// In that case, only $uploadedFilesArray["$j"]["name"] is filled in. + echo "WARNING: File $file_name skipped: this file is too big.
\n"; + @unlink($file_tmp_name); + continue; + } + elseif (checkAuthorizedName($file_name) == false || checkAuthorizedName($file_relative_directory) == false) { + echo "WARNING: File $file_relative_directory skipped: it contains a banned keyword.
\n"; + $skipped = $skipped + 1; + @unlink($file_tmp_name); + continue; + } + +// Create the temporary filename as follows: (from left to right) +// - Use prefix "upload__", to be able to identify from where this temporary file comes from +// - Create a random filename +// - Add the original filename extension, to be able to identify the filetype +// - Add suffix ".txt" to avoid that the file would be executed on the webserver + $extension = get_filename_extension($file_name); + if (substr($file_name, -6) == "tar.gz") { $extension = "tar.gz"; } + $tempfilename = tempnam2($net2ftp_globals["application_tempdir"], "upload__", "." . $extension . ".txt"); + if ($tempfilename == false) { + // If you get this warning message, you've probably forgotten to chmod 777 the /temp directory + echo "WARNING: File $file_name skipped: unable to create a temporary file on the webserver.
\n"; + @unlink($file_tmp_name); + continue; + } + +// Move the uploaded file + $move_uploaded_file_result = move_uploaded_file($uploadedFilesArray["$j"]["tmp_name"], $tempfilename); + if ($move_uploaded_file_result == false) { + echo "WARNING: File $file_name skipped: unable to move the uploaded file to the webserver's temporary directory.
\n"; + @unlink($file_tmp_name); + @unlink($tempfilename); + continue; + } + else { + $moved_counter = $moved_counter + 1; + $acceptedFilesArray["$moved_counter"] = $uploadedFilesArray["$j"]; // Copy all parameters for this file from the $uploadedFilesArray to the $acceptedFilesArray + $acceptedFilesArray["$moved_counter"]["tmp_name"] = $tempfilename; // Overwrite the old temporary name by the new one + } + + } // end for j + + flush(); + + } // end if elseif + + +// ------------------------------------ +// 3. Move the files from net2ftp's temporary directory to the FTP server. +// ------------------------------------ + if (sizeof($acceptedFilesArray) == 0 && sizeof($uploadedFilesArray) != 0) { echo "WARNING: No files were accepted (see messages above), so nothing will be transferred to the FTP server.
\n"; } + elseif (sizeof($acceptedFilesArray) > 0) { + +// ------------------------------ +// 3.1 Open connection +// ------------------------------ + +// Open connection + echo __("Connecting to the FTP server") . "
\n"; + $conn_id = ftp_openconnection(); + if ($net2ftp_result["success"] == false) { + echo "ERROR: " . $net2ftp_result["errormessage"] . "
\n"; + return false; + } + +// ------------------------------ +// For loop (loop over all the files) +// ------------------------------ + for ($k=1; $k<=sizeof($acceptedFilesArray); $k++) { + $file_name = $acceptedFilesArray["$k"]["name"]; + $file_tmp_name = $acceptedFilesArray["$k"]["tmp_name"]; + $file_size = $acceptedFilesArray["$k"]["size"]; + $file_error = $acceptedFilesArray["$k"]["error"]; + $file_relative_directory = $acceptedFilesArray["$k"]["relative_directory"]; + + $ftpmode = ftpAsciiBinary($file_name); + if ($ftpmode == FTP_ASCII) { $printftpmode = "FTP_ASCII"; } + elseif ($ftpmode == FTP_BINARY) { $printftpmode = "FTP_BINARY"; } + +// ------------------------------ +// 3.2 Within the for loop: create the subdirectory if needed +// ------------------------------ +// Replace Windows-style backslashes \ by Unix-style slashes / + $file_relative_directory = str_replace("\\", "/", trim($file_relative_directory)); + +// Get the names of the subdirectories by splitting the string using slashes / + $file_subdirectories = explode("/", $file_relative_directory); + +// $targetdirectory contains the successive directories to be created + $targetdirectory = $net2ftp_globals["directory"]; + +// Loop over sizeof()-1 because the last part is the filename itself: + for ($m=0; $m$targetdirectory. The script will try to continue...
\n"; + continue; + } + echo "Directory $targetdirectory created.
\n"; + } // end if + flush(); + } // end if + } // end for m + +// Store the $targetdirectory in the $acceptedFilesArray + if ($targetdirectory != "" && $targetdirectory != "/") { + $acceptedFilesArray["$k"]["targetdirectory"] = $targetdirectory; + } + +// ------------------------------ +// 3.3 Within the for loop: put local file to remote file +// ------------------------------ + ftp_putfile($conn_id, "", $acceptedFilesArray["$k"]["tmp_name"], $acceptedFilesArray["$k"]["targetdirectory"], $acceptedFilesArray["$k"]["name"], $ftpmode, "move"); + if ($net2ftp_result["success"] == false) { + echo "ERROR: File $file_name skipped. Message: " . $net2ftp_result["errormessage"] . "
\n"; + setErrorVars(true, "", "", "", ""); + continue; + } // end if + else { echo "The file $file_name was transferred to the FTP server successfully.
\n"; } + + flush(); + + } // End for k + +// Note: the java applet is looking for the word "SUCCESS" to determine if the upload result is OK or not (see applet parameter stringUploadSuccess) +// The applet doesn't seem to recognize the words "SUCCESS", "WARNING" or "ERROR" when they are issued by the code above + echo "SUCCESS"; + +// ------------------------------ +// 3.4 Close connection +// ------------------------------ + ftp_quit($conn_id); + + } // end if + + } // end if $screen == 2 + +} // end net2ftp_module_sendHttpHeaders + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printJavascript() { + +// -------------- +// This function prints Javascript code and includes +// -------------- + +// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; + +// Code +// echo "\n"; + +// Include +// echo "\n"; + +} // end net2ftp_module_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_module_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/login/login.inc.php b/ehcp/net2ftp/modules/login/login.inc.php new file mode 100644 index 0000000..b2492c8 --- /dev/null +++ b/ehcp/net2ftp/modules/login/login.inc.php @@ -0,0 +1,407 @@ +\n"; + } + +// ------------------------------------------------------------------------- +// For the other skins, do print more Javascript functions +// ------------------------------------------------------------------------- + else { + +// Check if the user did enter an FTP server and username + echo "\n"; + + } // end if else + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the 1) { + // Input type is drop-down box + $ftpserver["inputType"] = "select"; + + // List of allowed FTP servers + $ftpserver["list"] = $net2ftp_settings["allowed_ftpservers"]; + + // Preselect the right FTP server + // ... using the previous input value + $array_search_result1 = array_search($net2ftp_globals["ftpserver"], $ftpserver); + if (is_numeric($array_search_result1) == true) { $ftpserver["list"][$array_search_result1]["selected"] = "selected=\"selected\""; } + + // ... using the cookie value + else { + $array_search_result2 = array_search($net2ftp_globals["cookie_ftpserver"], $ftpserver); + if (is_numeric($array_search_result2) == true) { $ftpserver["list"][$array_search_result2]["selected"] = "selected=\"selected\""; } + } + } + +// Only 1 FTP server is allowed + elseif (sizeof($net2ftp_settings["allowed_ftpservers"]) == 1) { + $ftpserver["inputType"] = "hidden"; + $ftpserver["list"][1] = $net2ftp_settings["allowed_ftpservers"][1]; + } + +// Else, there is an error! + else { + $errormessage = "There is an error in the net2ftp configuration file settings_authorizations.inc.php: variable \$net2ftp_allowed_ftpservers does not follow the expected format."; + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + + +// ------------------------------------ +// FTP server port +// $ftpserverport["inputType"] can be "text" or "hidden" +// $ftpserverport is "21" +// ------------------------------------ + + if ($net2ftp_settings["allowed_ftpserverport"] == "ALL") { + // Input type is textbox + $ftpserverport["inputType"] = "text"; + + // Prefill with the previous input value + if ($net2ftp_globals["ftpserverport"] != "") { $ftpserverport["value"] = htmlEncode2($net2ftp_globals["ftpserverport"]); } + + // Prefill with the cookie value - only if it is different from empty + elseif ($net2ftp_globals["cookie_ftpserverport"] != "") { + $ftpserverport["value"] = htmlEncode2($net2ftp_globals["cookie_ftpserverport"]); + } + + // Else, fill in 21, which is the default FTP port + else { + $ftpserverport["value"] = 21; + } + } + + else { + $ftpserverport["inputType"] = "hidden"; + $ftpserverport["value"] = $net2ftp_settings["allowed_ftpserverport"]; + } + + +// ------------------------------------ +// Username +// ------------------------------------ + + // Prefill with the previous input value + if ($net2ftp_globals["username"] != "") { $username = htmlEncode2($net2ftp_globals["username"]); } + + // Prefill with the cookie value + else { $username = htmlEncode2($net2ftp_globals["cookie_username"]); } + + +// ------------------------------------ +// Password +// ------------------------------------ + + // Do not prefill this field + $password = ""; + +// ------------------------------------ +// Passive mode +// ------------------------------------ + + if ($net2ftp_globals["passivemode"] == "yes") { $passivemode["checked"] = "checked=\"checked\""; } + elseif ($net2ftp_globals["cookie_passivemode"] == "yes") { $passivemode["checked"] = "checked=\"checked\""; } + else { $passivemode["checked"] = ""; } + + +// ------------------------------------ +// Initial directory +// ------------------------------------ + + if (strlen($net2ftp_globals["directory"]) > 1) { $directory = $net2ftp_globals["directory_html"]; } + elseif (strlen($net2ftp_globals["cookie_directory"]) > 1) { $directory = htmlEncode2($net2ftp_globals["cookie_directory"]); } + else { $directory = ""; } + +// ------------------------------------ +// Protocol +// ------------------------------------ + + $protocol["inputType"] = "hidden"; + $protocol["list"][1] = "FTP"; + if (function_exists("ssh2_connect") == true) { $protocol["list"][2] = "FTP over SSH2"; $protocol["inputType"] = "select"; } + if (function_exists("ftp_ssl_connect") == true) { $protocol["list"][3] = "FTP with SSL"; $protocol["inputType"] = "select"; } + +// ------------------------------------ +// Language +// ------------------------------------ + + $language_onchange = "document.forms['LoginForm'].state.value='login'; document.forms['LoginForm'].submit();"; + +// ------------------------------------ +// Skin +// ------------------------------------ + + $skin_onchange = ""; + +// ------------------------------------ +// FTP mode +// ------------------------------------ + +// Determine the FTP mode + if ($net2ftp_globals["ftpmode"] != "") { $ftpmode["type"] = htmlEncode2($net2ftp_globals["ftpmode"]); } + elseif ($net2ftp_globals["cookie_ftpmode"] != "") { $ftpmode["type"] = htmlEncode2($net2ftp_globals["cookie_ftpmode"]); } + else { + // Before PHP version 4.3.11, bug 27633 can cause problems in ASCII mode ==> use BINARY mode + if (version_compare(phpversion(), "4.3.11", "<")) { $ftpmode["type"] = "binary"; } + // As from PHP version 4.3.11, bug 27633 is fixed ==> use Automatic mode + else { $ftpmode["type"] = "automatic"; } + } + +// Fill the values that will be used in the template + if ($ftpmode["type"] == "automatic") { + $ftpmode["automatic"] = "checked=\"checked\""; + $ftpmode["binary"] = ""; + } + elseif ($ftpmode["type"] == "binary") { + $ftpmode["automatic"] = ""; + $ftpmode["binary"] = "checked=\"checked\""; + } + +// ------------------------------------ +// FTP mode +// ------------------------------------ + + $admin_url = $net2ftp_globals["action_url"] . "?state=login_small&state2=admin&go_to_state=admin"; + +// ------------------------------------ +// Focus +// ------------------------------------ + if ($net2ftp_settings["allowed_ftpservers"][1] == "ALL") { $focus = "ftpserver"; } + else { $focus = "username"; } + + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/login.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/login_small/login_small.inc.php b/ehcp/net2ftp/modules/login_small/login_small.inc.php new file mode 100644 index 0000000..33869e2 --- /dev/null +++ b/ehcp/net2ftp/modules/login_small/login_small.inc.php @@ -0,0 +1,268 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s.", htmlEncode2($net2ftp_globals["ftpserver"])); + $button_text = __("Login"); + $username_fieldname = "username"; + $password_fieldname = "password"; + if (isset($net2ftp_globals["username"]) == true) { + $username_value = htmlEncode2($net2ftp_globals["username"]); + $focus = $password_fieldname; + } + else { + $username_value = ""; + $focus = $username_fieldname; + } + $password_value = ""; + } + elseif ($net2ftp_globals["state2"] == "session_expired") { + $message = __("Your session has expired; please enter your password for FTP server %1\$s to continue.", htmlEncode2($net2ftp_globals["ftpserver"])); + $button_text = __("Continue"); + $username_fieldname = "username"; + $password_fieldname = "password"; + if (isset($net2ftp_globals["username"]) == true) { + $username_value = htmlEncode2($net2ftp_globals["username"]); + $focus = $password_fieldname; + } + else { + $username_value = ""; + $focus = $username_fieldname; + } + $password_value = ""; + } + elseif ($net2ftp_globals["state2"] == "session_ipchange") { + $message = __("Your IP address has changed; please enter your password for FTP server %1\$s to continue.", htmlEncode2($net2ftp_globals["ftpserver"])); + $button_text = __("Continue"); + $username_fieldname = "username"; + $password_fieldname = "password"; + if (isset($net2ftp_globals["username"]) == true) { + $username_value = htmlEncode2($net2ftp_globals["username"]); + $focus = $password_fieldname; + } + else { + $username_value = ""; + $focus = $username_fieldname; + } + $password_value = ""; + } + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/login_small.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/logout/logout.inc.php b/ehcp/net2ftp/modules/logout/logout.inc.php new file mode 100644 index 0000000..8c1f5ae --- /dev/null +++ b/ehcp/net2ftp/modules/logout/logout.inc.php @@ -0,0 +1,174 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the $max_age_seconds) { @unlink($dirfile); } + } + } + closedir($handle); + } + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/logout.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/newdir/newdir.inc.php b/ehcp/net2ftp/modules/newdir/newdir.inc.php new file mode 100644 index 0000000..2bfc997 --- /dev/null +++ b/ehcp/net2ftp/modules/newdir/newdir.inc.php @@ -0,0 +1,211 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the 0) { + $newsubdir = glueDirectories($net2ftp_globals["directory"], $newNames[$k]); + ftp_newdirectory($conn_id, $newsubdir); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); // Continue anyway + $net2ftp_output["newdir"][] = __("Directory %1\$s could not be created.", htmlEncode2($newNames[$k])); + } + else { + $net2ftp_output["newdir"][] = __("Directory %1\$s was successfully created.", htmlEncode2($newNames[$k])); + } + } // End if + } // End for + +// Close connection + ftp_closeconnection($conn_id); + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/raw/raw.inc.php b/ehcp/net2ftp/modules/raw/raw.inc.php new file mode 100644 index 0000000..1a60ebe --- /dev/null +++ b/ehcp/net2ftp/modules/raw/raw.inc.php @@ -0,0 +1,203 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the \ No newline at end of file diff --git a/ehcp/net2ftp/modules/rename/rename.inc.php b/ehcp/net2ftp/modules/rename/rename.inc.php new file mode 100644 index 0000000..428ae00 --- /dev/null +++ b/ehcp/net2ftp/modules/rename/rename.inc.php @@ -0,0 +1,219 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s", htmlEncode2($newNames[$i])) . ".
"; + continue; + } + if (checkAuthorizedName($newNames[$i]) == false) { + $net2ftp_output["rename"][] = __("The new name may not contain any banned keywords. This entry was not renamed to %1\$s", htmlEncode2($newNames[$i])) . "
"; + continue; + } + ftp_rename2($conn_id, $net2ftp_globals["directory"], $list["all"][$i]["dirfilename"], $newNames[$i]); + if ($net2ftp_result["success"] == false) { + setErrorVars(true, "", "", "", ""); + $net2ftp_output["rename"][] = __("%1\$s could not be renamed to %2\$s", htmlEncode2($list["all"][$i]["dirfilename"]), htmlEncode2($newNames[$i])); + continue; + } + else { + $net2ftp_output["rename"][] = __("%1\$s was successfully renamed to %2\$s", htmlEncode2($list["all"][$i]["dirfilename"]), htmlEncode2($newNames[$i])); + } + } // End for + +// Close connection + ftp_closeconnection($conn_id); + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/unzip/unzip.inc.php b/ehcp/net2ftp/modules/unzip/unzip.inc.php new file mode 100644 index 0000000..6ff190d --- /dev/null +++ b/ehcp/net2ftp/modules/unzip/unzip.inc.php @@ -0,0 +1,284 @@ +\n"; + +// Include +// echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the %1\$s from the FTP server", htmlEncode2($list["files"][$i]["dirfilename"])); + $moved_notok = $moved_notok + 1; + continue; + } + +// Register the temporary file + registerTempfile("register", glueDirectories($localtargetdir, $localtargetfile)); + +// Enter the temporary filename and the real filename in the array + $moved_ok = $moved_ok + 1; + $acceptedArchivesArray[$moved_ok]["name"] = $list["files"][$i]["dirfilename"]; + $acceptedArchivesArray[$moved_ok]["tmp_name"] = glueDirectories($localtargetdir, $localtargetfile); + $acceptedArchivesArray[$moved_ok]["targetdirectory"] = $list["files"][$i]["targetdirectory"]; + $acceptedArchivesArray[$moved_ok]["use_folder_names"] = $list["files"][$i]["use_folder_names"]; + + } // end for + +// --------------------------------------- +// Unzip archives and transfer the files (create subdirectories if needed) +// --------------------------------------- + if (isset($acceptedArchivesArray) == true && sizeof($acceptedArchivesArray) > 0) { + ftp_unziptransferfiles($acceptedArchivesArray); + $net2ftp_output["unzip"] = $net2ftp_output["unzip"] + $net2ftp_output["ftp_unziptransferfiles"]; + if ($net2ftp_result["success"] == false) { return false; } + } + +// --------------------------------------- +// Close the connection to the FTP server +// --------------------------------------- + ftp_closeconnection($conn_id); + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/upload/upload.inc.php b/ehcp/net2ftp/modules/upload/upload.inc.php new file mode 100644 index 0000000..7d724aa --- /dev/null +++ b/ehcp/net2ftp/modules/upload/upload.inc.php @@ -0,0 +1,297 @@ +\n"; + +// Include + echo "\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the $val) { + if ($val != "") { + $file_counter = $file_counter + 1; + $uploadedFilesArray["$file_counter"]["name"] = validateEntry($val); + $uploadedFilesArray["$file_counter"]["tmp_name"] = $_FILES["file"]["tmp_name"][$key]; + $uploadedFilesArray["$file_counter"]["size"] = $_FILES["file"]["size"][$key]; + } // end if + } // end foreach + } + + if (isset($_FILES["archive"]) == true && is_array($_FILES["archive"]) == true) { + foreach ($_FILES["archive"]["name"] as $key => $val) { + if ($val != "") { + $archive_counter = $archive_counter + 1; + $uploadedArchivesArray["$archive_counter"]["name"] = validateEntry($val); + $uploadedArchivesArray["$archive_counter"]["tmp_name"] = $_FILES["archive"]["tmp_name"][$key]; + $uploadedArchivesArray["$archive_counter"]["size"] = $_FILES["archive"]["size"][$key]; + } // end if + } // end foreach + } + +// Upload via the OpenLaszlo skin + if (isset($_FILES["Filedata"]) == true && is_array($_FILES["Filedata"]) == true) { + $file_counter = $file_counter + 1; + $uploadedFilesArray["$file_counter"]["name"] = $_FILES["Filedata"]["name"]; + $uploadedFilesArray["$file_counter"]["tmp_name"] = $_FILES["Filedata"]["tmp_name"]; + $uploadedFilesArray["$file_counter"]["size"] = $_FILES["Filedata"]["size"]; + } + +// ------------------------------------------------------------------------- +// Variables for all screens +// ------------------------------------------------------------------------- + +// Title +// The title is different for screen 1 and screen 2 - see below + +// Form name, back and forward buttons + $formname = "UploadForm"; + $back_onclick = "document.forms['" . $formname . "'].state.value='browse';document.forms['" . $formname . "'].state2.value='main';document.forms['" . $formname . "'].submit();"; + $forward_onclick = "document.forms['" . $formname . "'].submit();"; + +// Encoding type + $enctype = "enctype=\"multipart/form-data\""; + +// Next screen + $nextscreen = 2; + +// Maxima + $max_filesize = formatFilesize($net2ftp_settings["max_filesize"]); + $max_upload_filesize_php = formatFilesize(@ini_get("upload_max_filesize")); + $max_execution_time = @ini_get("max_execution_time"); + + +// ------------------------------------------------------------------------- +// Variables for screen 1 +// ------------------------------------------------------------------------- + if ($net2ftp_globals["screen"] == 1) { + +// Title + $title = __("Upload files and archives"); + + } // end if + + +// ------------------------------------------------------------------------- +// Variables for screen 2 +// ------------------------------------------------------------------------- + elseif ($net2ftp_globals["screen"] == 2) { + +// Title + $title = __("Upload more files and archives"); + +// --------------------------------------- +// Check the files and move them to the net2ftp temp directory +// The .txt extension is added +// --------------------------------------- + if (sizeof($uploadedFilesArray) > 0 || sizeof($uploadedArchivesArray) > 0) { + setStatus(1, 10, __("Checking files")); + if (isset($uploadedFilesArray) == true) { + $acceptedFilesArray = acceptFiles($uploadedFilesArray); + if ($net2ftp_result["success"] == false) { return false; } + } + if (isset($uploadedArchivesArray) == true) { + $acceptedArchivesArray = acceptFiles($uploadedArchivesArray); + if ($net2ftp_result["success"] == false) { return false; } + } + } + +// --------------------------------------- +// Transfer files +// --------------------------------------- + if (isset($acceptedFilesArray) == true && $acceptedFilesArray != "all_uploaded_files_are_too_big" && sizeof($acceptedFilesArray) > 0) { + setStatus(0, 10, __("Transferring files to the FTP server")); + ftp_transferfiles($acceptedFilesArray, $net2ftp_globals["directory"]); + if ($net2ftp_result["success"] == false) { return false; } + } + +// --------------------------------------- +// Unzip archives and transfer the files (create subdirectories if needed) +// --------------------------------------- + if (isset($acceptedArchivesArray) == true && $acceptedArchivesArray != "all_uploaded_files_are_too_big" && sizeof($acceptedArchivesArray) > 0) { + +// Set the status + setStatus(0, 10, __("Decompressing archives and transferring files")); + +// Add information to $acceptedArchivesArray + for ($i=1; $i<=sizeof($acceptedArchivesArray); $i=$i+1) { + $acceptedArchivesArray[$i]["targetdirectory"] = $net2ftp_globals["directory"]; + } + +// Unzip the archive and transfer the files + ftp_unziptransferfiles($acceptedArchivesArray); + if ($net2ftp_result["success"] == false) { return false; } + } + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/upload/upload.js b/ehcp/net2ftp/modules/upload/upload.js new file mode 100644 index 0000000..f539c7e --- /dev/null +++ b/ehcp/net2ftp/modules/upload/upload.js @@ -0,0 +1,28 @@ + +function add_file(id, i) { + if (document.getElementById(id + '_' + i).innerHTML.search('uploadinputbutton') == -1) { + document.getElementById(id + '_' + i).innerHTML = '
<\/span>\n'; + } +} + +function createUploadWindow() { + uploadWindow = window.open("","uploadWindow","height=170,width=400,resizable=yes,scrollbars=yes"); + var d = uploadWindow.document; + d.writeln(''); + d.writeln(''); + d.writeln('Uploading... please wait...<\/title>'); + d.writeln('<\/head>'); + d.writeln('<body>'); + d.writeln('Uploading... please wait...<br /><br />'); + d.writeln('If the upload takes more than the allowed <b>60 seconds<\/b>, you will have to try again with less/smaller files.<br /><br />'); + d.writeln('<scr' + 'ipt lan' + 'guage="jav' + 'ascript">'); + d.writeln('setTimeout("self.close()",8000);'); + d.writeln('<\/scr' + 'ipt>'); + d.writeln('<form><span style="font-size: 100%;">'); + d.writeln('This window will close automatically in a few seconds.<br />'); + d.writeln('<a href="jav' + 'ascript:self.close();">Close window now<\/a>'); + d.writeln('<\/span><\/form>'); + d.writeln('<\/body>'); + d.writeln('<\/html>'); + d.close(); +} diff --git a/ehcp/net2ftp/modules/view/view.inc.php b/ehcp/net2ftp/modules/view/view.inc.php new file mode 100644 index 0000000..2e10373 --- /dev/null +++ b/ehcp/net2ftp/modules/view/view.inc.php @@ -0,0 +1,288 @@ +<?php + +// ------------------------------------------------------------------------------- +// | net2ftp: a web based FTP client | +// | Copyright (c) 2003-2013 by David Gartner | +// | | +// | This program is free software; you can redistribute it and/or | +// | modify it under the terms of the GNU General Public License | +// | as published by the Free Software Foundation; either version 2 | +// | of the License, or (at your option) any later version. | +// | | +// ------------------------------------------------------------------------------- + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_sendHttpHeaders() { + +// -------------- +// This function sends HTTP headers +// -------------- + + global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; + + if ($net2ftp_globals["state2"] != "") { + +// Get file + $text = ftp_readfile("", $net2ftp_globals["directory"], $net2ftp_globals["entry"]); + if ($net2ftp_result["success"] == false) { return false; } + +// Send headers + header("Content-Type: " . getContentType($net2ftp_globals["entry"])); + header("Content-Disposition: inline; filename=\"" . $net2ftp_globals["entry"] . "\""); + +// Send file + echo $text; + flush(); + +// Close the connection + header("Connection: close"); + + } + +} // end net2ftp_sendHttpHeaders + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printJavascript() { + +// -------------- +// This function prints Javascript code and includes +// -------------- + +// global $net2ftp_settings, $net2ftp_globals; + +// Code +// echo "<script type=\"text/javascript\"><!--\n"; +// echo "//--></script>\n"; + +// Include +// echo "<script type=\"text/javascript\" src=\"". $net2ftp_globals["application_rootdir_url"] . "/modules/view/view.js\"></script>\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"". $net2ftp_globals["application_rootdir_url"] . "/skins/" . $net2ftp_globals["skin"] . "/css/main.css.php?ltr=" . __("ltr") . "&image_url=" . urlEncode2($net2ftp_globals["image_url"]) . "\" />\n"; + +// CSS for Luminous syntax highlighter + $filename_extension = get_filename_extension($net2ftp_globals["entry"]); + if (getFileType($net2ftp_globals["entry"]) == "IMAGE") { $filetype = "image"; } + elseif ($filename_extension == "swf") { $filetype = "flash"; } + else { $filetype = "text"; } + if ($filetype == "text") { + luminous::set("cache", FALSE); + luminous::set("format", "html"); + luminous::set("line-numbers", TRUE); + luminous::set("relative-root", $net2ftp_globals["application_rootdir_url"] . "/plugins/luminous/"); +// luminous::set("theme", "luminous_dark"); + echo luminous::head_html(); + } + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the <body onload="" actions +// -------------- + +// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; +// echo ""; + +} // end net2ftp_printBodyOnload + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBody() { + +// -------------- +// This function prints the login screen +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; + + +// ------------------------------------------------------------------------- +// Variables +// ------------------------------------------------------------------------- + + $filename_extension = get_filename_extension($net2ftp_globals["entry"]); + +// ------------------------ +// Set the state2 variable depending on the file extension !!!!! +// ------------------------ + if (getFileType($net2ftp_globals["entry"]) == "IMAGE") { $filetype = "image"; } + elseif ($filename_extension == "swf") { $filetype = "flash"; } + else { $filetype = "text"; } + +// Form name, back and forward buttons + $formname = "ViewForm"; + $back_onclick = "document.forms['" . $formname . "'].state.value='browse';document.forms['" . $formname . "'].state2.value='main';document.forms['" . $formname . "'].submit();"; + +// Next screen + $nextscreen = 2; + +// ------------------------------------------------------------------------- +// Text +// ------------------------------------------------------------------------- + if ($filetype == "text") { + +// Title + $title = __("View file %1\$s", $net2ftp_globals["entry"]); + +// ------------------------ +// luminous_text +// ------------------------ + setStatus(2, 10, __("Reading the file")); + $luminous_text = ftp_readfile("", $net2ftp_globals["directory"], $net2ftp_globals["entry"]); + if ($net2ftp_result["success"] == false) { return false; } + +// ------------------------ +// luminous_language +// ------------------------ + $luminous_language = ""; + + $list_language_extensions = array( +// List the most popular languages first for speed reasons + 'html' => array('html', 'htm'), + 'javascript' => array('js'), + 'css' => array('css'), + 'php' => array('php', 'php5', 'phtml', 'phps'), + 'perl' => array('pl', 'pm', 'cgi'), + 'sql' => array('sql'), + 'java' => array('java'), +// Other languages in alphabetic order + 'ada' => array('a', 'ada', 'adb', 'ads'), + 'as' => array('as'), + 'asp' => array('asp'), + 'cpp' => array('cpp'), + 'csharp' => array('csharp'), + 'diff' => array('diff'), + 'go' => array('go'), + 'latex' => array('latex'), + 'matlab' => array('matlab'), + 'python' => array('py'), + 'rails' => array('rails'), + 'ruby' => array('ruby'), + 'sql' => array('sql'), + 'vb' => array('bas'), + 'vim' => array('vim'), + 'xml' => array('xml') + ); + + while(list($language, $extensions) = each($list_language_extensions)) { + if (in_array($filename_extension, $extensions)) { + $luminous_language = $language; + break; + } + } + +// ------------------------ +// Call luminous +// ------------------------ + setStatus(4, 10, __("Parsing the file")); + + $luminous_text = luminous::highlight($luminous_language, $luminous_text, FALSE); + } + +// ------------------------------------------------------------------------- +// Image +// ------------------------------------------------------------------------- + elseif ($filetype == "image") { + $title = __("View image %1\$s", htmlEncode2($net2ftp_globals["entry"])); + $image_url = printPHP_SELF("view"); + $image_alt = __("Image") . $net2ftp_globals["entry"]; + } + +// ------------------------------------------------------------------------- +// Flash movie +// ------------------------------------------------------------------------- + elseif ($filetype == "flash") { + $title = __("View Macromedia ShockWave Flash movie %1\$s", htmlEncode2($net2ftp_globals["entry"])); + $flash_url = printPHP_SELF("view"); + } + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/modules/zip/zip.inc.php b/ehcp/net2ftp/modules/zip/zip.inc.php new file mode 100644 index 0000000..b08a8d7 --- /dev/null +++ b/ehcp/net2ftp/modules/zip/zip.inc.php @@ -0,0 +1,220 @@ +<?php + +// ------------------------------------------------------------------------------- +// | net2ftp: a web based FTP client | +// | Copyright (c) 2003-2013 by David Gartner | +// | | +// | This program is free software; you can redistribute it and/or | +// | modify it under the terms of the GNU General Public License | +// | as published by the Free Software Foundation; either version 2 | +// | of the License, or (at your option) any later version. | +// | | +// ------------------------------------------------------------------------------- + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_sendHttpHeaders() { + +// -------------- +// This function sends HTTP headers +// -------------- + +// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; + +} // end net2ftp_sendHttpHeaders + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printJavascript() { + +// -------------- +// This function prints Javascript code and includes +// -------------- + +// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; + +// Code +// echo "<script type=\"text/javascript\"><!--\n"; +// echo "//--></script>\n"; + +// Include +// echo "<script type=\"text/javascript\" src=\"". $net2ftp_globals["application_rootdir_url"] . "/modules/login/login.js\"></script>\n"; + +} // end net2ftp_printJavascript + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printCss() { + +// -------------- +// This function prints CSS code and includes +// -------------- + + global $net2ftp_settings, $net2ftp_globals; + +// Include + echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"". $net2ftp_globals["application_rootdir_url"] . "/skins/" . $net2ftp_globals["skin"] . "/css/main.css.php?ltr=" . __("ltr") . "&image_url=" . urlEncode2($net2ftp_globals["image_url"]) . "\" />\n"; + +} // end net2ftp_printCssInclude + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBodyOnload() { + +// -------------- +// This function prints the <body onload="" actions +// -------------- + +// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result; +// echo ""; + +} // end net2ftp_printBodyOnload + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_module_printBody() { + +// -------------- +// This function prints the zip screen +// -------------- + +// ------------------------------------------------------------------------- +// Global variables +// ------------------------------------------------------------------------- + global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result, $net2ftp_output; + + if (isset($_POST["list"]) == true) { $list = getSelectedEntries($_POST["list"]); } + else { $list = ""; } + if (isset($_POST["zipactions"]) == true) { $zipactions = $_POST["zipactions"]; } + else { $zipactions = ""; } + + +// ------------------------------------------------------------------------- +// Variables for all screens +// ------------------------------------------------------------------------- + +// Title + $title = __("Zip entries"); + +// Form name, back and forward buttons + $formname = "ZipForm"; + $back_onclick = "document.forms['" . $formname . "'].state.value='browse';document.forms['" . $formname . "'].state2.value='main';document.forms['" . $formname . "'].submit();"; + $forward_onclick = "document.forms['" . $formname . "'].submit();"; + + +// ------------------------------------------------------------------------- +// Variables for screen 1 +// ------------------------------------------------------------------------- + if ($net2ftp_globals["screen"] == 1) { + +// Next screen + $nextscreen = 2; + +// Default filename of the zip file + $zipfilename = get_filename_name($list["files"][1]["dirfilename"]) . ".zip"; + + } // end if + + +// ------------------------------------------------------------------------- +// Variables for screen 2 +// ------------------------------------------------------------------------- + elseif ($net2ftp_globals["screen"] == 2) { + +// -------------------- +// Check the input data +// -------------------- +// Filename + if ($zipactions["save"] == "yes" && $zipactions["save"]["filename"] == "") { + $errormessage = __("You did not enter a filename for the zipfile. Go back and enter a filename.") . "<br />"; + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// Email address + if ($zipactions["email"] == "yes" && checkEmailAddress($zipactions["email_to"]) == false) { + $errormessage = __("The email address you have entered (%1\$s) does not seem to be valid.<br />Please enter an address in the format <b>username@domain.com</b>", $zipactions["email_to"]) . "<br />"; + setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); + return false; + } + +// -------------------- +// Execute the function +// -------------------- + setStatus(4, 10, __("Processing the entries")); + $zipactions["download"] == "no"; + ftp_zip("", $net2ftp_globals["directory"], $list, $zipactions, "", 0); + if ($net2ftp_result["success"] == false) { + return false; + } + + } // end elseif + +// ------------------------------------------------------------------------- +// Print the output +// ------------------------------------------------------------------------- + require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php"); + +} // End net2ftp_printBody + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/package_list.txt b/ehcp/net2ftp/package_list.txt new file mode 100644 index 0000000..66e9d24 --- /dev/null +++ b/ehcp/net2ftp/package_list.txt @@ -0,0 +1,70 @@ +<option value="" style="font-weight: bold; text-decoration: underline;">Blogs</option> +<option value="http://downloads.sourceforge.net/project/evocms/b2evolution/b2evo%204.1.4-stable/b2evolution-4.1.4-stable-2012-04-03.zip?r=&ts=1342768182&use_mirror=netcologne">b2evolution 4.1.4</option> +<option value="http://downloads.sourceforge.net/project/nucleuscms/1.%20Nucleus%20Core/Nucleus%20v3.64/nucleus3.64.zip?r=&ts=1342768260&use_mirror=kent">Nucleus 3.64 English</option> +<option value="http://wordpress.org/latest.zip">WordPress (latest version)</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Content management</option> +<option value="http://ftp.drupal.org/files/projects/drupal-7.14.tar.gz">Drupal 7.14</option> +<option value="http://share.ez.no/content/download/129487/701286/version/1/file/ezpublish_community_project-2012.6-with_ezc.tar.gz">eZ Publish 2012.6</option> +<option value="http://www.geeklog.net/filemgmt/visit.php/1071">Geeklog 1.8.1</option> +<option value="http://joomlacode.org/gf/download/frsrelease/17173/74758/Joomla_2.5.6-Stable-Full_Package.zip">Joomla 2.5.6</option> +<option value="http://mambo-code.org/gf/download/frsrelease/388/791/MamboV4.6.5.zip">Mambo 4.6.5</option> +<option value="http://download.moodle.org/download.php/stable23/moodle-latest-23.tgz">Moodle 2.3.1</option> +<option value="http://phpwcms.googlecode.com/files/phpwcms-1.5.4.1.zip">phpWCMS 1.5.4.1</option> +<option value="http://downloads.sourceforge.net/project/phpwebsite/phpWebSite%201.x%20%28stable%29/phpwebsite_1_7_2.tar.gz?r=&ts=1342771981&use_mirror=heanet">phpWebSite 1.7.2</option> +<option value="http://downloads.sourceforge.net/project/typo3/TYPO3%20Source%20and%20Dummy/TYPO3%204.7.2/typo3_src-4.7.2.zip?r=&ts=1342772207&use_mirror=freefr">TYPO3 4.7.2 source</option> +<option value="http://downloads.sourceforge.net/project/typo3/TYPO3%20Source%20and%20Dummy/TYPO3%204.7.2/dummy-4.7.2.zip?r=&ts=1342772143&use_mirror=kentz">TYPO3 4.7.2 dummy</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Customer relationship</option> +<option value="http://www.craftysyntax.com/craftysyntax3.3.6.zip">Crafty Syntax Live Help 3.3.6</option> +<option value="http://www.helpcenterlive.com/downloads/hcl-2.1.7.zip">Help Center Live 2.1.7</option> +<option value="http://osticket.com/dl/osticket_1.6.0.tar.gz">OS Ticket 1.6.0</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Development</option> +<option value="http://www.net2ftp.com/download/net2ftp_v1.0.zip">net2ftp 1.0 full version</option> +<option value="http://www.net2ftp.com/download/net2ftp_v1.0_light.zip">net2ftp 1.0 light version</option> +<option value="http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.5.2/phpMyAdmin-3.5.2-english.zip?r=&ts=1342708242&use_mirror=dfn">phpMyAdmin 3.5.2</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Discussion boards</option> +<option value="http://www.phpbb.com/files/release/phpBB-3.0.10.zip">phpBB 3.0.10</option> +<option value="http://punbb.informer.com/download/punbb-1.4.2.zip">punBB 1.4.2</option> +<option value="http://download.simplemachines.org/index.php?thanks;filename=smf_2-0-2_install.zip">Simple Machines Forum 2.0.2</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">E-Commerce</option> +<option value="http://www.oscommerce.com/get/10">OS Commerce 2.3.2</option> +<option value="http://downloads.sourceforge.net/project/zencart/CURRENT%20-%20Zen%20Cart%201.5.x%20Series/zen-cart-v150-full-release-12302011.zip?r=&ts=1342772444&use_mirror=dfn">Zen Cart 1.5.0</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">FAQ</option> +<option value="http://www.lethalpenguin.net/design/faqmasterflex.php?download=true">FAQMasterFlex 1.2</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Hosting billing</option> +<option value="https://www.phpcoin.com/coin_modules/downloads/dload.php?id=185">phpCOIN 1.6.5</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Image galleries</option> +<option value="http://downloads.sourceforge.net/project/eenemeenemuu.u/cpg1.5.20.zip?r=&ts=1342773320&use_mirror=freefr">Coppermine Photo Gallery 1.5.20</option> +<option value="http://downloads.sourceforge.net/project/gallery/gallery3/3.0.4/gallery-3.0.4.zip?r=&ts=1342773363&use_mirror=freefr">Gallery 3.0.4</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Mailing lists</option> +<option value="http://downloads.sourceforge.net/project/phplist/phplist/2.10.18/phplist-2.10.18.zip?r=&ts=1342773405&use_mirror=garr">PHPlist 2.10.18</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Polls and surveys</option> +<option value="http://downloads.sourceforge.net/project/phpesp/phpesp/2.1.4/phpESP-2.1.4.tgz?r=&ts=1342773452&use_mirror=garr">phpESP 2.1.4</option> +<option value="http://www.limesurvey.org/en/stable-release/finish/25-latest-stable-release/505-limesurvey192plus-build120718zip">LimeSurvey 1.92+</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Project management</option> +<option value="http://www.phprojekt.com/download.php?version=latest">PHProjekt 6.1.3</option> +<option value="http://downloads.sourceforge.net/project/tutos/php/1.8.20111223/TUTOS-php-1.8.20111223.zip?r=&ts=1342773623&use_mirror=ignum">Tutos 1.8.20111223</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Webmail</option> +<option value="http://pear.horde.org/get/Horde_Core-1.9.2.tgz">Horde Core 1.9.2</option> +<option value="http://pear.horde.org/get/groupware-4.0.8.tgz">Horde Groupware 4.0.8 (requires Horde Core)</option> +<option value="http://pear.horde.org/get/imp-5.0.22.tgz">Horde IMP Webmail 5.0.22 (requires Horde Core)</option> +<option value="http://downloads.sourceforge.net/project/squirrelmail/stable/1.4.22/squirrelmail-webmail-1.4.22.tar.gz?r=&ts=1342775456&use_mirror=switch">Squirrelmail 1.4.22</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Wiki</option> +<option value="http://downloads.sourceforge.net/project/phpwiki/PhpWiki%201.4%20%28current%29/phpwiki-1.4.0rc1.zip?r=&ts=1342775566&use_mirror=netcologne">PhpWiki 1.4.0RC1</option> +<option value="http://downloads.sourceforge.net/project/tikiwiki/Tiki_9.x_Herbig_Haro/9.0/tiki-9.0.zip?r=&ts=1342775648&use_mirror=switch">TikiWiki 9.0</option> + +<option value="" style="font-weight: bold; text-decoration: underline;">Other scripts</option> +<option value="http://www.open-realty.org/release/open-realty2.5.8.zip">Open-Realty 2.5.8</option> +<option value="http://downloads.sourceforge.net/project/webcalendar/webcalendar%201.2/1.2.5/WebCalendar-1.2.5.zip?r=&ts=1342775874&use_mirror=dfn">WebCalendar 1.2.5</option> diff --git a/ehcp/net2ftp/plugins/ace/ace.js b/ehcp/net2ftp/plugins/ace/ace.js new file mode 100644 index 0000000..520b8fc --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/ace.js @@ -0,0 +1,11 @@ +(function(){function o(e){var i=function(e,t){return r("",e,t)},s=t;e&&(t[e]||(t[e]={}),s=t[e]);if(!s.define||!s.define.packaged)n.original=s.define,s.define=n,s.define.packaged=!0;if(!s.require||!s.require.packaged)r.original=s.require,s.require=i,s.require.packaged=!0}var e="ace",t=function(){return this}();if(!e&&typeof requirejs!="undefined")return;var n=function(e,t,r){if(typeof e!="string"){n.original?n.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=t),n.modules||(n.modules={}),n.modules[e]=r},r=function(e,t,n){if(Object.prototype.toString.call(t)==="[object Array]"){var i=[];for(var o=0,u=t.length;o<u;++o){var a=s(e,t[o]);if(!a&&r.original)return r.original.apply(window,arguments);i.push(a)}n&&n.apply(null,i)}else{if(typeof t=="string"){var f=s(e,t);return!f&&r.original?r.original.apply(window,arguments):(n&&n(),f)}if(r.original)return r.original.apply(window,arguments)}},i=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return i(e,n[0])+"!"+i(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/");t=r+"/"+t;while(t.indexOf(".")!==-1&&s!=t){var s=t;t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return t},s=function(e,t){t=i(e,t);var s=n.modules[t];if(!s)return null;if(typeof s=="function"){var o={},u={id:t,uri:"",exports:o,packaged:!0},a=function(e,n){return r(t,e,n)},f=s(a,o,u);return o=f||u.exports,n.modules[t]=o,o}return s};o(e)})(),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/multi_select","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/mode/folding/fold_mode","ace/config"],function(e,t,n){e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./editor").Editor,o=e("./edit_session").EditSession,u=e("./undomanager").UndoManager,a=e("./virtual_renderer").VirtualRenderer,f=e("./multi_select").MultiSelect;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./mode/folding/fold_mode"),t.config=e("./config"),t.require=e,t.edit=function(e){if(typeof e=="string"){var n=e,e=document.getElementById(n);if(!e)throw"ace.edit can't find div #"+n}if(e.env&&e.env.editor instanceof s)return e.env.editor;var o=t.createEditSession(r.getInnerText(e));e.innerHTML="";var u=new s(new a(e));new f(u),u.setSession(o);var l={document:o,editor:u,onResize:u.resize.bind(u)};return i.addListener(window,"resize",l.onResize),e.env=u.env=l,u},t.createEditSession=function(e,t){var n=new o(e,n);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u}),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),ace.define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),ace.define("ace/lib/dom",["require","exports","module"],function(e,t,n){var r="http://www.w3.org/1999/xhtml";t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||r,e):document.createElement(e)},t.setText=function(e,t){e.innerText!==undefined&&(e.innerText=t),e.textContent!==undefined&&(e.textContent=t)},t.hasCssClass=function(e,t){var n=e.className.split(/\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=" "+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(" ")},t.toggleCssClass=function(e,t){var n=e.className.split(/\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(" "),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(t.createStyleSheet&&(r=t.styleSheets)){while(n<r.length)if(r[n++].owningElement.id===e)return!0}else if(r=t.getElementsByTagName("style"))while(n<r.length)if(r[n++].id===e)return!0;return!1},t.importCssString=function(n,i,s){s=s||document;if(i&&t.hasCssString(i,s))return null;var o;if(s.createStyleSheet)o=s.createStyleSheet(),o.cssText=n,i&&(o.owningElement.id=i);else{o=s.createElementNS?s.createElementNS(r,"style"):s.createElement("style"),o.appendChild(s.createTextNode(n)),i&&(o.id=i);var u=s.getElementsByTagName("head")[0]||s.documentElement;u.appendChild(o)}},t.importCssStylsheet=function(e,n){if(n.createStyleSheet)n.createStyleSheet(e);else{var r=t.createElement("link");r.rel="stylesheet",r.href=e;var i=n.getElementsByTagName("head")[0]||n.documentElement;i.appendChild(r)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,"paddingLeft"),10)+parseInt(t.computedStyle(e,"paddingRight"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,"paddingTop"),10)+parseInt(t.computedStyle(e,"paddingBottom"),10)+e.clientHeight},window.pageYOffset!==undefined?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,"")||{})[t]||"":window.getComputedStyle(e,"")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.scrollbarWidth=function(e){var n=t.createElement("p");n.style.width="100%",n.style.minWidth="0px",n.style.height="200px";var r=t.createElement("div"),i=r.style;i.position="absolute",i.left="-10000px",i.overflow="hidden",i.width="200px",i.minWidth="0px",i.height="150px",r.appendChild(n);var s=e.body||e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow="scroll";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u},t.setInnerHtml=function(e,t){var n=e.cloneNode(!1);return n.innerHTML=t,e.parentNode.replaceChild(n,e),n},t.setInnerText=function(e,t){var n=e.ownerDocument;n.body&&"textContent"in n.body?e.textContent=t:e.innerText=t},t.getInnerText=function(e){var t=e.ownerDocument;return t.body&&"textContent"in t.body?e.textContent:e.innerText||e.textContent||""},t.getParentWindow=function(e){return e.defaultView||e.parentWindow}}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent","ace/lib/dom"],function(e,t,n){function o(e,t,n){var s=0;!i.isOpera||"KeyboardEvent"in window||!i.isMac?s=0|(t.ctrlKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.metaKey?8:0):s=0|(t.metaKey?1:0)|(t.altKey?2:0)|(t.shiftKey?4:0)|(t.ctrlKey?8:0);if(n in r.MODIFIER_KEYS){switch(r.MODIFIER_KEYS[n]){case"Alt":s=2;break;case"Shift":s=4;break;case"Ctrl":s=1;break;default:s=8}n=0}return s&8&&(n==91||n==93)&&(n=0),!!s||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,s,n):!1}var r=e("./keys"),i=e("./useragent"),s=e("./dom");t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n(window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||e.ctrlKey&&i.isMac?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},document.documentElement.setCapture?t.capture=function(e,n,r){function s(o){n(o),i||(i=!0,r(o)),t.removeListener(e,"mousemove",n),t.removeListener(e,"mouseup",s),t.removeListener(e,"losecapture",s),e.releaseCapture()}var i=!1;t.addListener(e,"mousemove",n),t.addListener(e,"mouseup",s),t.addListener(e,"losecapture",s),e.setCapture()}:t.capture=function(e,t,n){function r(e){t&&t(e),n&&n(e),document.removeEventListener("mousemove",t,!0),document.removeEventListener("mouseup",r,!0),e.stopPropagation()}document.addEventListener("mousemove",t,!0),document.addEventListener("mouseup",r,!0)},t.addMouseWheelListener=function(e,n){var r=8,i=function(e){e.wheelDelta!==undefined?e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/r,e.wheelY=-e.wheelDeltaY/r):(e.wheelX=0,e.wheelY=-e.wheelDelta/r):e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)};t.addListener(e,"DOMMouseScroll",i),t.addListener(e,"mousewheel",i)},t.addMultiMouseDownListener=function(e,n,r,s){var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};t.addListener(e,"mousedown",function(e){if(t.getButton(e)!=0)o=0;else{var i=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||i)o=0;o+=1,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600)}o==1&&(u=e.clientX,a=e.clientY),r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}),i.isOldIE&&t.addListener(e,"dblclick",function(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)})},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var s=null;r(e,"keydown",function(e){s=e.keyCode}),r(e,"keypress",function(e){return o(n,e,s)})}else{var u=null;r(e,"keydown",function(e){return u=e.keyIdentifier||e.keyCode,o(n,e,e.keyCode)})}};if(window.postMessage&&!i.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+u;t.addListener(n,"message",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())}),n.postMessage(r,"*")}}t.nextFrame=window.requestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame,t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(e,t,n){var r=e("./oop"),i=function(){var e={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,meta:8,command:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",188:",",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}};for(var t in e.FUNCTION_KEYS){var n=e.FUNCTION_KEYS[t].toLowerCase();e[n]=parseInt(t,10)}return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e["return"],e.escape=e.esc,e.del=e["delete"],e[173]="-",e}();r.mixin(t,i),t.keyCodeToString=function(e){return(i[e]||String.fromCharCode(e)).toLowerCase()}}),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/lib/useragent",["require","exports","module"],function(e,t,n){t.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!="object")return;var r=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r=="win",t.isMac=r=="mac",t.isLinux=r=="linux",t.isIE=navigator.appName=="Microsoft Internet Explorer"&&parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=window.controllers&&window.navigator.product==="Gecko",t.isOldGecko=t.isGecko&&parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0}),ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands"],function(e,t,n){e("./lib/fixoldbrowsers");var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/useragent"),o=e("./keyboard/textinput").TextInput,u=e("./mouse/mouse_handler").MouseHandler,a=e("./mouse/fold_handler").FoldHandler,f=e("./keyboard/keybinding").KeyBinding,l=e("./edit_session").EditSession,c=e("./search").Search,h=e("./range").Range,p=e("./lib/event_emitter").EventEmitter,d=e("./commands/command_manager").CommandManager,v=e("./commands/default_commands").commands,m=function(e,t){var n=e.getContainerElement();this.container=n,this.renderer=e,this.commands=new d(s.isMac?"mac":"win",v),this.textInput=new o(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.keyBinding=new f(this),this.$mouseHandler=new u(this),new a(this),this.$blockScrolling=0,this.$search=(new c).set({wrap:!0}),this.setSession(t||new l(""))};(function(){r.implement(this,p),this.setKeyboardHandler=function(e){this.keyBinding.setKeyboardHandler(e)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;if(this.session){var t=this.session;this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeLeftTop",this.$onScrollLeftChange);var n=this.session.getSelection();n.removeEventListener("changeCursor",this.$onCursorChange),n.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=e,this.$onDocumentChange=this.onDocumentChange.bind(this),e.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull(),this._emit("changeSession",{session:e,oldSession:t})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e){this.renderer.setTheme(e)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.setFontSize=function(e){this.container.style.fontSize=e,this.renderer.updateFontSize()},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session.findMatchingBracket(e.getCursorPosition());if(t){var n=new h(t.row,t.column,t.row,t.column+1);e.session.$bracketHighlight=e.session.addMarker(n,"ace_bracket","text")}},50)},this.focus=function(){var e=this;setTimeout(function(){e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus")},this.onBlur=function(){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur")},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=e.data,n=t.range,r;n.start.row==n.end.row&&t.action!="insertLines"&&t.action!="removeLines"?r=n.end.row:r=Infinity,this.renderer.updateLines(n.start.row,r),this._emit("change",e),this.$cursorChange()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.$highlightBrackets(),this.$updateHighlightActiveLine(),this._emit("changeSelection")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;this.$highlightActiveLine&&(this.$selectionStyle!="line"||!this.selection.isMultiLine())&&(t=this.getCursorPosition()),e.$highlightLineMarker&&!t?(e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null):!e.$highlightLineMarker&&t?e.$highlightLineMarker=e.highlightLines(t.row,t.row,"ace_active-line"):t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e._emit("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._emit("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\w\d]/.test(o)||r<=s&&/[\w\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\w\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(){this.renderer.updateText()},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getCopyText=function(){var e="";return this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange())),this._emit("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e){if(this.$readOnly)return;this._emit("paste",e),this.insert(e)},this.execCommand=function(e,t){this.commands.exec(e,this,t)},this.insert=function(e){var t=this.session,n=t.getMode(),r=this.getCursorPosition();if(this.getBehavioursEnabled()){var i=n.transformAction(t.getState(r.row),"insertion",this,t,e);i&&(e=i.text)}e=e.replace(" ",this.session.getTabString());if(!this.selection.isEmpty())r=this.session.remove(this.getSelectionRange()),this.clearSelection();else if(this.session.getOverwrite()){var s=new h.fromPoints(r,r);s.end.column+=e.length,this.session.remove(s)}this.clearSelection();var o=r.column,u=t.getState(r.row),a=t.getLine(r.row),f=n.checkOutdent(u,a,e),l=t.insert(r,e);i&&i.selection&&(i.selection.length==2?this.selection.setSelectionRange(new h(r.row,o+i.selection[0],r.row,o+i.selection[1])):this.selection.setSelectionRange(new h(r.row+i.selection[0],i.selection[1],r.row+i.selection[2],i.selection[3])));if(t.getDocument().isNewLine(e)){var c=n.getNextLineIndent(u,a.slice(0,r.column),t.getTabString());this.moveCursorTo(r.row+1,0);var p=t.getTabSize(),d=Number.MAX_VALUE;for(var v=r.row+1;v<=l.row;++v){var m=0;a=t.getLine(v);for(var g=0;g<a.length;++g)if(a.charAt(g)==" ")m+=p;else{if(a.charAt(g)!=" ")break;m+=1}/[^\s]/.test(a)&&(d=Math.min(m,d))}for(var v=r.row+1;v<=l.row;++v){var y=d;a=t.getLine(v);for(var g=0;g<a.length&&y>0;++g)a.charAt(g)==" "?y-=p:a.charAt(g)==" "&&(y-=1);t.remove(new h(v,0,v,g))}t.indentRows(r.row+1,l.row,c)}f&&n.autoOutdent(u,t,r.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.$mouseHandler.setScrollSpeed(e)},this.getScrollSpeed=function(){return this.$mouseHandler.getScrollSpeed()},this.setDragDelay=function(e){this.$mouseHandler.setDragDelay(e)},this.getDragDelay=function(){return this.$mouseHandler.getDragDelay()},this.$selectionStyle="line",this.setSelectionStyle=function(e){if(this.$selectionStyle==e)return;this.$selectionStyle=e,this.onSelectionChange(),this._emit("changeSelectionStyle",{data:e})},this.getSelectionStyle=function(){return this.$selectionStyle},this.$highlightActiveLine=!0,this.setHighlightActiveLine=function(e){if(this.$highlightActiveLine==e)return;this.$highlightActiveLine=e,this.$updateHighlightActiveLine()},this.getHighlightActiveLine=function(){return this.$highlightActiveLine},this.$highlightGutterLine=!0,this.setHighlightGutterLine=function(e){if(this.$highlightGutterLine==e)return;this.renderer.setHighlightGutterLine(e),this.$highlightGutterLine=e},this.getHighlightGutterLine=function(){return this.$highlightGutterLine},this.$highlightSelectedWord=!0,this.setHighlightSelectedWord=function(e){if(this.$highlightSelectedWord==e)return;this.$highlightSelectedWord=e,this.$onSelectionChange()},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.$readOnly=!1,this.setReadOnly=function(e){this.$readOnly=e},this.getReadOnly=function(){return this.$readOnly},this.$modeBehaviours=!0,this.setBehavioursEnabled=function(e){this.$modeBehaviours=e},this.getBehavioursEnabled=function(){return this.$modeBehaviours},this.$modeWrapBehaviours=!0,this.setWrapBehavioursEnabled=function(e){this.$modeWrapBehaviours=e},this.getWrapBehavioursEnabled=function(){return this.$modeWrapBehaviours},this.setShowFoldWidgets=function(e){var t=this.renderer.$gutterLayer;if(t.getShowFoldWidgets()==e)return;this.renderer.$gutterLayer.setShowFoldWidgets(e),this.$showFoldWidgets=e,this.renderer.updateFull()},this.getShowFoldWidgets=function(){return this.renderer.$gutterLayer.getShowFoldWidgets()},this.setFadeFoldWidgets=function(e){this.renderer.setFadeFoldWidgets(e)},this.getFadeFoldWidgets=function(){return this.renderer.getFadeFoldWidgets()},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new h(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new h(e.row,t-2,e.row,t)),this.session.replace(i,r)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row||t.start.column<t.end.column)){var r;if(this.session.getUseSoftTabs()){var s=e.getTabSize(),o=this.getCursorPosition(),u=e.documentToScreenColumn(o.row,o.column),a=s-u%s;r=i.stringRepeat(" ",a)}else r=" ";return this.insert(r)}var n=this.$getSelectedRows();e.indentRows(n.first,n.last," ")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(i=e.first;i<=e.last;i++)n.push(t.getLine(i));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var r=new h(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t-1){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new h(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new h(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows(),t;e.first===0||e.last+1<this.session.getLength()?t=new h(e.first,0,e.last+1,0):t=new h(e.first-1,this.session.getLine(e.first-1).length,e.last,this.session.getLine(e.last).length),this.session.remove(t),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange();if(n.isEmpty()){var r=n.start.row;t.duplicateLines(r,r)}else{var i=e.isBackwards(),s=e.isBackwards()?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,i)}},this.moveLinesDown=function(){this.$moveLines(function(e,t){return this.session.moveLinesDown(e,t)})},this.moveLinesUp=function(){this.$moveLines(function(e,t){return this.session.moveLinesUp(e,t)})},this.moveText=function(e,t){return this.$readOnly?null:this.session.moveText(e,t)},this.copyLinesUp=function(){this.$moveLines(function(e,t){return this.session.duplicateLines(e,t),0})},this.copyLinesDown=function(){this.$moveLines(function(e,t){return this.session.duplicateLines(e,t)})},this.$moveLines=function(e){var t=this.$getSelectedRows(),n=this.selection;if(!n.isMultiLine())var r=n.getRange(),i=n.isBackwards();var s=e.call(this,t.first,t.last);r?(r.start.row+=s,r.end.row+=s,n.setSelectionRange(r,i)):(n.setSelectionAnchor(t.last+s+1,0),n.$moveSelection(function(){n.moveCursorTo(t.first+s,0)}))},this.$getSelectedRows=function(){var e=this.getSelectionRange().collapseRows();return{first:e.start.row,last:e.end.row}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t==1?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t==0&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e){var t=this.getCursorPosition(),n=this.session.getBracketRange(t);if(!n){n=this.find({needle:/[{}()\[\]]/g,preventScroll:!0,start:{row:t.row,column:t.column-1}});if(!n)return;var r=n.start;r.row==t.row&&Math.abs(r.column-t.column)<2&&(n=this.session.getBracketRange(r))}r=n&&n.cursor||r,r&&(e?n&&n.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(r.row,r.column):(this.clearSelection(),this.moveCursorTo(r.row,r.column)))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.navigateUp=function(e){this.selection.clearSelection(),e=e||1,this.selection.moveCursorBy(-e,0)},this.navigateDown=function(e){this.selection.clearSelection(),e=e||1,this.selection.moveCursorBy(e,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){var e=this.renderer.scrollTop;this.selection.moveCursorFileEnd(),this.clearSelection(),this.renderer.animateScrolling(e)},this.navigateFileStart=function(){var e=this.renderer.scrollTop;this.selection.moveCursorFileStart(),this.clearSelection(),this.renderer.animateScrolling(e)},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),n!==null&&(this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;this.$blockScrolling+=1;var i=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!=0&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy()}}).call(m.prototype),t.Editor=m}),ace.define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang"],function(e,t,n){var r=e("../lib/event"),i=e("../lib/useragent"),s=e("../lib/dom"),o=e("../lib/lang"),u=function(e,t){function g(e){if(c)return;var t=e?2:1,r=2;try{n.setSelectionRange(t,r)}catch(i){}}function y(){if(c)return;n.value=u,i.isWebKit&&m.schedule()}function D(){setTimeout(function(){h&&(n.style.cssText=h,h=""),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},0)}var n=s.createElement("textarea");n.className="ace_text-input",i.isTouchPad&&n.setAttribute("x-palm-disable-auto-cap",!0),n.wrap="off",n.autocorrect="off",n.autocapitalize="off",n.spellcheck=!1,n.style.top="-2em",e.insertBefore(n,e.firstChild);var u="",a=!1,f=!1,l=!1,c=!1,h="",p=!0,d=document.activeElement===n;r.addListener(n,"blur",function(){t.onBlur(),d=!1}),r.addListener(n,"focus",function(){d=!0,t.onFocus(),g()}),this.focus=function(){n.focus()},this.blur=function(){n.blur()},this.isFocused=function(){return d};var v=o.delayedCall(function(){d&&g(p)}),m=o.delayedCall(function(){c||(n.value=u,d&&g())});i.isWebKit||t.addEventListener("changeSelection",function(){t.selection.isEmpty()!=p&&(p=!p,v.schedule())}),y(),d&&t.onFocus();var b=function(e){return e.selectionStart===0&&e.selectionEnd===e.value.length};!n.setSelectionRange&&n.createTextRange&&(n.setSelectionRange=function(e,t){var n=this.createTextRange();n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",t),n.select()},b=function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return!t||t.parentElement()!=e?!1:t.text==e.value});if(i.isOldIE){var w=!1,E=function(e){if(w)return;var t=n.value;if(c||!t||t==u)return;if(e&&t==u[0])return S.schedule();N(t),w=!0,y(),w=!1},S=o.delayedCall(E);r.addListener(n,"propertychange",E);var x={13:1,27:1};r.addListener(n,"keyup",function(e){c&&(!n.value||x[e.keyCode])&&setTimeout(_,0);if((n.value.charCodeAt(0)||0)<129)return;c?M():O()})}var T=function(e){if(a){a=!1;return}if(f){f=!1;return}b(n)&&(t.selectAll(),g())},N=function(e){l?(g(),e&&t.onPaste(e),l=!1):e==u[0]?t.execCommand("del",{source:"ace"}):(e.substring(0,2)==u?e=e.substr(2):e[0]==u[0]?e=e.substr(1):e[e.length-1]==u[0]&&(e=e.slice(0,-1)),e[e.length-1]==u[0]&&(e=e.slice(0,-1)),e&&t.onTextInput(e))},C=function(e){if(c)return;var t=n.value;y(),N(t)},k=function(e){var i=t.getCopyText();if(!i){r.preventDefault(e);return}var s=e.clipboardData||window.clipboardData;if(s){var o=s.setData("Text",i);o&&(t.onCut(),r.preventDefault(e))}o||(a=!0,n.value=i,n.select(),setTimeout(function(){a=!1,y(),g(),t.onCut()}))},L=function(e){var i=t.getCopyText();if(!i){r.preventDefault(e);return}var s=e.clipboardData||window.clipboardData;if(s){var o=s.setData("Text",i);o&&(t.onCopy(),r.preventDefault(e))}o||(f=!0,n.value=i,n.select(),setTimeout(function(){f=!1,y(),g(),t.onCopy()}))},A=function(e){var s=e.clipboardData||window.clipboardData;if(s){var o=s.getData("Text");o&&t.onPaste(o),i.isIE&&setTimeout(g),r.preventDefault(e)}else n.value="",l=!0};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,"select",T),r.addListener(n,"input",C),r.addListener(n,"cut",k),r.addListener(n,"copy",L),r.addListener(n,"paste",A),(!("oncut"in n)||!("oncopy"in n)||!("onpaste"in n))&&r.addListener(e,"keydown",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:L(e);break;case 86:A(e);break;case 88:k(e)}});var O=function(e){c=!0,t.onCompositionStart(),setTimeout(M,0)},M=function(){if(!c)return;t.onCompositionUpdate(n.value)},_=function(e){c=!1,t.onCompositionEnd()};r.addListener(n,"compositionstart",O),i.isGecko?r.addListener(n,"text",M):r.addListener(n,"keyup",M),r.addListener(n,"compositionend",_),this.getElement=function(){return n},this.onContextMenu=function(e){h||(h=n.style.cssText),n.style.cssText="z-index:100000;"+(i.isIE?"opacity:0.1;":""),g(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t});var s=t.container.getBoundingClientRect(),o=function(e){n.style.left=e.clientX-s.left-2+"px",n.style.top=e.clientY-s.top-2+"px"};o(e);if(e.type!="mousedown")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),i.isWin&&r.capture(t.container,o,D)},this.onContextMenuClose=D,i.isGecko||r.addListener(n,"contextmenu",function(e){t.textInput.onContextMenu(e),D()})};t.TextInput=u}),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop"],function(e,t,n){var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop").DragdropHandler,f=function(e){this.editor=e,new s(this),new o(this),new a(this),r.addListener(e.container,"mousedown",function(t){return e.focus(),r.preventDefault(t)});var t=e.renderer.getMouseEventTarget();r.addListener(t,"click",this.onMouseEvent.bind(this,"click")),r.addListener(t,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener(t,[300,300,250],this,"onMouseEvent"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel"));var n=e.renderer.$gutter;r.addListener(n,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(n,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(n,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(n,"mousemove",this.onMouseEvent.bind(this,"guttermousemove"))};(function(){this.$scrollSpeed=1,this.setScrollSpeed=function(e){this.$scrollSpeed=e},this.getScrollSpeed=function(){return this.$scrollSpeed},this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.$dragDelay=250,this.setDragDelay=function(e){this.$dragDelay=e},this.getDragDelay=function(){return this.$dragDelay},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){t&&this.setState(t),this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){s.x=e.clientX,s.y=e.clientY},u=function(e){clearInterval(f),s[s.state+"End"]&&s[s.state+"End"](e),s.$clickSelection=null,n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1},a=function(){s[s.state]&&s[s.state]()};if(i.isOldIE&&e.domEvent.type=="dblclick"){setTimeout(function(){a(),u(e.domEvent)});return}r.capture(this.editor.container,o,u);var f=setInterval(a,20)}}).call(f.prototype),t.MouseHandler=f}),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/useragent"],function(e,t,n){function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e));var n=["select","startSelect","drag","dragEnd","dragWait","dragWaitEnd","startDrag","focusWait"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange"),e.$focusWaitTimout=250}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e("../lib/dom"),i=e("../lib/useragent"),s=5;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,i=e.getButton();if(i!==0){var s=r.getSelectionRange(),o=s.isEmpty();o&&(r.moveCursorToPosition(n),r.selection.clearSelection()),r.textInput.onContextMenu(e.domEvent);return}if(t&&!r.isFocused()){r.focus();if(this.$focusWaitTimout&&!this.$clickSelection)return this.setState("focusWait"),this.captureMouse(e),e.preventDefault()}return!t||this.$clickSelection||e.getShiftKey()?this.startSelect(n):t&&(this.mousedownEvent.time=(new Date).getTime(),this.setState("dragWait")),this.captureMouse(e),e.preventDefault()},this.startSelect=function(e){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y),this.mousedownEvent.getShiftKey()?this.editor.selection.selectToPosition(e):this.$clickSelection||(this.editor.moveCursorToPosition(e),this.editor.selection.clearSelection()),this.setState("select")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.startDrag=function(){var e=this.editor;this.setState("drag"),this.dragRange=e.getSelectionRange();var t=e.getSelectionStyle();this.dragSelectionMarker=e.session.addMarker(this.dragRange,"ace_selection",t),e.clearSelection(),r.addCssClass(e.container,"ace_dragging"),this.$dragKeybinding||(this.$dragKeybinding={handleKeyboard:function(e,t,n,r){if(n=="esc")return{command:this.command}},command:{exec:function(e){var t=e.$mouseHandler;t.dragCursor=null,t.dragEnd(),t.startSelect()}}}),e.keyBinding.addKeyboardHandler(this.$dragKeybinding)},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=(new Date).getTime();(e>s||t-this.mousedownEvent.time>this.$focusWaitTimout)&&this.startSelect()},this.dragWait=function(e){var t=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),n=(new Date).getTime(),r=this.editor;t>s?this.startSelect(this.mousedownEvent.getDocumentPosition()):n-this.mousedownEvent.time>r.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(e){this.mousedownEvent.domEvent=e,this.startSelect()},this.drag=function(){var e=this.editor;this.dragCursor=e.renderer.screenToTextCoordinates(this.x,this.y),e.moveCursorToPosition(this.dragCursor),e.renderer.scrollCursorIntoView()},this.dragEnd=function(e){var t=this.editor,n=this.dragCursor,i=this.dragRange;r.removeCssClass(t.container,"ace_dragging"),t.session.removeMarker(this.dragSelectionMarker),t.keyBinding.removeKeyboardHandler(this.$dragKeybinding);if(!n)return;t.clearSelection();if(e&&(e.ctrlKey||e.altKey)){var s=t.session,o=i;o.end=s.insert(n,s.getTextRange(i)),o.start=n}else{if(i.contains(n.row,n.column))return;var o=t.moveText(i,n)}if(!o)return;t.selection.setSelectionRange(o)},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);if(i){i.isEmpty()&&(i.start.column--,i.end.column++),this.$clickSelection=i,this.setState("select");return}this.$clickSelection=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines"),this.$clickSelection=n.selection.getLineRange(t.row)},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("null")},this.onMouseWheel=function(e){if(e.getShiftKey()||e.getAccelKey())return;var t=this.editor,n=t.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(n)this.$passScrollEvent=!1;else{if(this.$passScrollEvent)return;if(!this.$scrollStopTimeout){var r=this;this.$scrollStopTimeout=setTimeout(function(){r.$passScrollEvent=!0,r.$scrollStopTimeout=null},200)}}return t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.preventDefault()}}).call(o.prototype),t.DefaultHandlers=o}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/event"],function(e,t,n){function s(e){function f(){u=r.createElement("div"),u.className="ace_gutter-tooltip",u.style.maxWidth="500px",u.style.display="none",t.container.appendChild(u)}function l(){u||f();var e=o.getDocumentPosition().row,r=n.$annotations[e];if(!r)return c();var i=t.session.getLength();if(e==i){var s=t.renderer.pixelToScreenCoordinates(0,o.y).row,l=o.$pos;if(s>t.session.documentToScreenRow(l.row,l.column))return c()}if(a==r)return;a=r.text.join("<br/>"),u.style.display="block",u.innerHTML=a,t.on("mousewheel",c),h(o)}function c(){s&&(s=clearTimeout(s)),a&&(u.style.display="none",a=null,t.removeEventListener("mousewheel",c))}function h(e){var n=t.renderer.$gutter.getBoundingClientRect();u.style.left=e.x-n.left+15+"px",e.y+3*t.renderer.lineHeight+15<n.bottom?(u.style.bottom="",u.style.top=e.y-n.top+15+"px"):(u.style.top="",u.style.bottom=n.bottom-e.y+5+"px")}var t=e.editor,n=t.renderer.$gutterLayer;e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused())return;var i=n.getRegion(r);if(i)return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.captureMouse(r,"selectByLines"),r.preventDefault()});var s,o,u,a;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();a&&h(t),o=t;if(s)return;s=setTimeout(function(){s=null,o&&!e.isMousePressed?l():c()},50)}),i.addListener(t.renderer.$gutter,"mouseout",function(e){o=null;if(!a||s)return;s=setTimeout(function(){s=null,c()},50)})}var r=e("../lib/dom"),i=e("../lib/event");t.GutterHandler=s}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor;if(e.getReadOnly())this.$inSelection=!1;else{var t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop",["require","exports","module","ace/lib/event"],function(e,t,n){var r=e("../lib/event"),i=function(e){var t=e.editor,n,i,s,o,u,a,f,l=0,c=t.container;r.addListener(c,"dragenter",function(e){l++;if(!n){u=t.getSelectionRange(),a=t.selection.isBackwards();var i=t.getSelectionStyle();n=t.session.addMarker(u,"ace_selection",i),t.clearSelection(),clearInterval(o),o=setInterval(h,20)}return r.preventDefault(e)}),r.addListener(c,"dragover",function(e){return i=e.clientX,s=e.clientY,r.preventDefault(e)});var h=function(){f=t.renderer.screenToTextCoordinates(i,s),t.moveCursorToPosition(f),t.renderer.scrollCursorIntoView()};r.addListener(c,"dragleave",function(e){l--;if(l>0)return;return console.log(e.type,l,e.target),clearInterval(o),t.session.removeMarker(n),n=null,t.selection.setSelectionRange(u,a),r.preventDefault(e)}),r.addListener(c,"drop",function(e){return console.log(e.type,l,e.target),l=0,clearInterval(o),t.session.removeMarker(n),n=null,u.end=t.session.insert(f,e.dataTransfer.getData("Text")),u.start=f,t.focus(),t.selection.setSelectionRange(u),r.preventDefault(e)})};t.DragdropHandler=i}),ace.define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,n){function r(e){e.on("click",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on("guttermousedown",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.foldWidgets;if(!s||s[r])return;var o=r-1,u;while(o>=0){var a=s[o];a==null&&(a=s[o]=i.getFoldWidget());if(a=="start"){var f=i.getFoldWidgetRange(o);u||(u=f);if(f&&f.end.row>=r)break}o--}o==-1&&(f=u);if(f){var r=f.start.row,l=i.getFoldAt(r,i.getLine(r).length,1);l?i.removeFold(l):(i.addFold("...",f),e.renderer.scrollCursorIntoView({row:f.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0),this.$data={editor:this.$editor}},this.setKeyboardHandler=function(e){if(this.$handlers[this.$handlers.length-1]==e)return;while(this.$handlers[1])this.removeKeyboardHandler(this.$handlers[1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.$callKeyboardHandlers=function(e,t,n,r){var s;for(var o=this.$handlers.length;o--;){s=this.$handlers[o].handleKeyboard(this.$data,e,t,n,r);if(s&&s.command)break}if(!s||!s.command)return!1;var u=!1,a=this.$editor.commands;return s.command!="null"?u=a.exec(s.command,this.$editor,s.args,r):u=s.passEvent!=1,u&&r&&e!=-1&&i.stopEvent(r),u},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){var t=this.$callKeyboardHandlers(-1,e);t||this.$editor.commands.exec("insertstring",this.$editor,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define("ace/edit_session",["require","exports","module","ace/config","ace/lib/oop","ace/lib/lang","ace/lib/net","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"],function(e,t,n){var r=e("./config"),i=e("./lib/oop"),s=e("./lib/lang"),o=e("./lib/net"),u=e("./lib/event_emitter").EventEmitter,a=e("./selection").Selection,f=e("./mode/text").Mode,l=e("./range").Range,c=e("./document").Document,h=e("./background_tokenizer").BackgroundTokenizer,p=e("./search_highlight").SearchHighlight,d=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.$foldData.toString=function(){var e="";return this.forEach(function(t){e+="\n"+t.toString()}),e},this.on("changeFold",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!="object"||!e.getLine)e=new c(e);this.setDocument(e),this.selection=new a(this),this.setMode(t)};(function(){function y(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}i.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$getRowCacheIndex(this.$docRowCache,e)+1,n=this.$docRowCache.length;this.$docRowCache.splice(t,n),this.$screenRowCache.splice(t,n)},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){var t=e.data;this.$modified=!0,this.$resetRowCache(t.range.start.row);var n=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&!t.ignore&&(this.$deltasDoc.push(t),n&&n.length!=0&&this.$deltasFold.push({action:"removeFolds",folds:n}),this.$informUndoManager.schedule()),this.bgTokenizer.$updateOnChange(t),this._emit("change",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveCursorTo(0,0),this.selection.clearSelection(),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null)s=n.length-1,i=this.getLine(e).length;else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t]}),t.$deltas=[]},this.$informUndoManager=s.deferredCall(this.$syncInformUndoManager)}},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?s.stringRepeat(" ",this.getTabSize()):" "},this.$useSoftTabs=!0,this.setUseSoftTabs=function(e){if(this.$useSoftTabs===e)return;this.$useSoftTabs=e},this.getUseSoftTabs=function(){return this.$useSoftTabs},this.$tabSize=4,this.setTabSize=function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._emit("changeTabSize")},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(e){if(this.$overwrite==e)return;this.$overwrite=e,this._emit("changeOverwrite")},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._emit("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._emit("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]="ace_breakpoint";this._emit("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._emit("changeBreakpoint",{})},this.setBreakpoint=function(e,t){t===undefined&&(t="ace_breakpoint"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._emit("changeBreakpoint",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._emit("changeBreakpoint",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||"line",renderer:typeof n=="function"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._emit("changeFrontMarker")):(this.$backMarkers[i]=s,this._emit("changeBackMarker")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._emit("changeFrontMarker")):(this.$backMarkers[n]=e,this._emit("changeBackMarker")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete n[e],this._emit(t.inFront?"changeFrontMarker":"changeBackMarker"))},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new p(null,"ace_selected-word","text");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!="number"&&(n=t,t=e),n||(n="ace_step");var i=new l(e,0,t,Infinity),s=this.addMarker(i,n,"fullLine",r);return i.id=s,i},this.setAnnotations=function(e){this.$annotations=e,this._emit("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.$annotations={},this._emit("changeAnnotation",{})},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r?\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new l(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.$useWorker=!0,this.setUseWorker=function(e){if(this.$useWorker==e)return;this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._emit("tokenizerUpdate",e)},this.$modes={},this._loadMode=function(t,n){function a(e){if(i.$modes[t])return n(i.$modes[t]);i.$modes[t]=new e.Mode,i.$modes[t].$id=t,i._emit("loadmode",{name:t,mode:i.$modes[t]}),n(i.$modes[t])}function l(e,t){if(!r.get("packaged"))return t();o.loadScript(r.moduleUrl(e,"mode"),t)}this.$modes["null"]||(this.$modes["null"]=this.$modes["ace/mode/text"]=new f);if(this.$modes[t])return n(this.$modes[t]);var i=this,s;try{s=e(t)}catch(u){}if(s&&s.Mode)return a(s);this.$mode||this.$setModePlaceholder(),l(t,function(){e([t],a)})},this.$setModePlaceholder=function(){this.$mode=this.$modes["null"];var e=this.$mode.getTokenizer();if(!this.bgTokenizer){this.bgTokenizer=new h(e);var t=this;this.bgTokenizer.addEventListener("update",function(e){t._emit("tokenizerUpdate",e)})}else this.bgTokenizer.setTokenizer(e);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=this.$mode.tokenRe,this.nonTokenRe=this.$mode.nonTokenRe},this.$mode=null,this.$modeId=null,this.setMode=function(e){e=e||"null";if(typeof e=="string"){if(this.$modeId==e)return;this.$modeId=e;var t=this;this._loadMode(e,function(n){if(t.$modeId!==e)return;t.setMode(n)});return}if(this.$mode===e)return;this.$mode=e,this.$modeId=e.$id,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener("update",r)}if(!this.bgTokenizer){this.bgTokenizer=new h(n);var t=this;this.bgTokenizer.addEventListener("update",function(e){t._emit("tokenizerUpdate",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,this.$setFolding(e.foldingRules),this._emit("changeMode")},this.$stopWorker=function(){this.$worker&&this.$worker.terminate(),this.$worker=null},this.$startWorker=function(){if(typeof Worker!="undefined"&&!e.noWorker)try{this.$worker=this.$mode.createWorker(this)}catch(t){console.log("Could not load worker"),console.log(t),this.$worker=null}else this.$worker=null},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){e=Math.round(Math.max(0,e));if(this.$scrollTop===e)return;this.$scrollTop=e,this._emit("changeScrollTop",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){e=Math.round(Math.max(0,e));if(this.$scrollLeft===e)return;this.$scrollLeft=e,this._emit("changeScrollLeft",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.screenWidth},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group=="doc"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;r<e.length;r++){var i=e[r];i.group=="doc"&&(this.doc.applyDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!1,n))}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,n){function r(e){var n=e.action=="insertText"||e.action=="insertLines";return t?!n:n}var i=e[0],s,o,u=!1;r(i)?(s=i.range.clone(),u=!0):(s=l.fromPoints(i.range.start,i.range.start),u=!1);for(var a=1;a<e.length;a++)i=e[a],r(i)?(o=i.range.start,s.compare(o.row,o.column)==-1&&s.setStart(i.range.start),o=i.range.end,s.compare(o.row,o.column)==1&&s.setEnd(i.range.end),u=!0):(o=i.range.start,s.compare(o.row,o.column)==-1&&(s=l.fromPoints(i.range.start,i.range.start)),u=!1);if(n!=null){var f=n.compareRange(s);f==1?s.setStart(n.start):f==-1&&s.setEnd(n.end)}return s},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t){var n=this.getTextRange(e);this.remove(e);var r=t.row,i=t.column;!e.isMultiLine()&&e.start.row==r&&e.end.column<i&&(i-=n.length);if(e.isMultiLine()&&e.end.row<r){var s=this.doc.$split(n);r-=s.length-1}var o=r+e.end.row-e.start.row,u=e.isMultiLine()?e.end.column:i+e.end.column-e.start.column,a=new l(r,i,o,u);return this.insert(a.start,n),a},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.insert({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=" ")break;o<r&&s.charAt(o)==" "?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.moveLinesUp=function(e,t){if(e<=0)return 0;var n=this.doc.removeLines(e,t);return this.doc.insertLines(e-1,n),-1},this.moveLinesDown=function(e,t){if(t>=this.doc.getLength()-1)return 0;var n=this.doc.removeLines(e,t);return this.doc.insertLines(e+1,n),1},this.duplicateLines=function(e,t){var e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t),n=this.getLines(e,t);this.doc.insertLines(e,n);var r=t-e+1;return r},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=[];for(var n=0;n<t;n++)this.$wrapData.push([]);this.$updateWrapData(0,t-1)}this._emit("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange.min=e,this.$wrapLimitRange.max=t,this.$modified=!0,this._emit("changeWrapMode")},this.adjustWrapLimit=function(e){var t=this.$constrainWrapLimit(e);return t!=this.$wrapLimit&&t>0?(this.$wrapLimit=t,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._emit("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e){var t=this.$wrapLimitRange.min;t&&(e=Math.max(t,e));var n=this.$wrapLimitRange.max;return n&&(e=Math.min(n,e)),Math.max(1,e)},this.getWrapLimit=function(){return this.$wrapLimit},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n,r=e.data.action,i=e.data.range.start.row,s=e.data.range.end.row,o=e.data.range.start,u=e.data.range.end,a=null;r.indexOf("Lines")!=-1?(r=="insertLines"?s=i+e.data.lines.length:s=i,n=e.data.lines?e.data.lines.length:s-i):n=s-i;if(n!=0)if(r.indexOf("remove")!=-1){this[t?"$wrapData":"$rowLengthCache"].splice(i,n);var f=this.$foldData;a=this.getFoldsInRange(e.data.range),this.removeFolds(a);var l=this.getFoldLine(u.row),c=0;if(l){l.addRemoveChars(u.row,u.column,o.column-u.column),l.shiftRow(-n);var h=this.getFoldLine(i);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=u.row&&l.shiftRow(-n)}s=i}else{var p;if(t){p=[i,0];for(var d=0;d<n;d++)p.push([]);this.$wrapData.splice.apply(this.$wrapData,p)}else p=Array(n),p.unshift(i,0),this.$rowLengthCache.splice.apply(this.$rowLengthCache,p);var f=this.$foldData,l=this.getFoldLine(i),c=0;if(l){var v=l.range.compareInside(o.row,o.column);v==0?(l=l.split(o.row,o.column),l.shiftRow(n),l.addRemoveChars(s,0,u.column-o.column)):v==-1&&(l.addRemoveChars(i,0,u.column-o.column),l.shiftRow(n)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i&&l.shiftRow(n)}}else{n=Math.abs(e.data.range.start.column-e.data.range.end.column),r.indexOf("remove")!=-1&&(a=this.getFoldsInRange(e.data.range),this.removeFolds(a),n=-n);var l=this.getFoldLine(i);l&&l.addRemoveChars(i,o.column,n)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),t?this.$updateWrapData(i,s):this.$updateRowLengthCache(i,s),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var n=this.doc.getAllLines(),r=this.getTabSize(),i=this.$wrapData,o=this.$wrapLimit,u,f,l=e;t=Math.min(t,n.length-1);while(l<=t){f=this.getFoldLine(l,f);if(!f)u=this.$getDisplayTokens(s.stringTrimRight(n[l])),i[l]=this.$computeWrapSplits(u,o,r),l++;else{u=[],f.walk(function(e,t,r,i){var s;if(e!=null){s=this.$getDisplayTokens(e,u.length),s[0]=a;for(var o=1;o<s.length;o++)s[o]=c}else s=this.$getDisplayTokens(n[t].substring(i,r),u.length);u=u.concat(s)}.bind(this),f.end.row,n[f.end.row].length+1);while(u.length!=0&&u[u.length-1]>=v)u.pop();i[f.start.row]=this.$computeWrapSplits(u,o,r),l=f.end.row+1}}};var t=1,n=2,a=3,c=4,d=9,v=10,m=11,g=12;this.$computeWrapSplits=function(e,t){function o(t){var r=e.slice(i,t),o=r.length;r.join("").replace(/12/g,function(){o-=1}).replace(/2/g,function(){o-=1}),s+=o,n.push(s),i=t}if(e.length==0)return[];var n=[],r=e.length,i=0,s=0;while(r-i>t){var u=i+t;if(e[u]>=v){while(e[u]>=v)u++;o(u);continue}if(e[u]==a||e[u]==c){for(u;u!=i-1;u--)if(e[u]==a)break;if(u>i){o(u);continue}u=i+t;for(u;u<e.length;u++)if(e[u]!=c)break;if(u==e.length)break;o(u);continue}var f=Math.max(u-10,i-1);while(u>f&&e[u]<a)u--;while(u>f&&e[u]==d)u--;if(u>f){o(++u);continue}u=i+t,o(u)}return n},this.$getDisplayTokens=function(e,r){var i=[],s;r=r||0;for(var o=0;o<e.length;o++){var u=e.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(m);for(var a=1;a<s;a++)i.push(g)}else u==32?i.push(v):u>39&&u<48||u>57&&u<64?i.push(d):u>=4352&&y(u)?i.push(t,n):i.push(t)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&y(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.getRowLength=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var n,r=0,i=0,s,o=0,u=0,a=this.$screenRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u-1>=e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}if(this.$useWrapMode){var v=this.$wrapData[r];v&&(s=v[e-o],e>o&&v.length&&(i=v[e-o-1]||v[v.length-1],n=n.substring(i)))}return i+=this.$getStringScreenWidth(n,t)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);if(this.$useWrapMode){var v=this.$wrapData[i],m=0;while(d.length>=v[m])r++,m++;d=d.substring(v[m-1]||0,d.length)}return{row:r,column:this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i)e+=this.$wrapData[s].length+1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}return e}}).call(d.prototype),e("./edit_session/folding").Folding.call(d.prototype),e("./edit_session/bracket_match").BracketMatch.call(d.prototype),t.EditSession=d}),ace.define("ace/config",["require","exports","module","ace/lib/lang"],function(e,t,n){"no use strict";function o(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e("./lib/lang"),i=function(){return this}(),s={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:"",suffix:".js",$moduleUrls:{}};t.get=function(e){if(!s.hasOwnProperty(e))throw new Error("Unknown config key: "+e);return s[e]},t.set=function(e,t){if(!s.hasOwnProperty(e))throw new Error("Unknown config key: "+e);s[e]=t},t.all=function(){return r.copyObject(s)},t.moduleUrl=function(e,t){if(s.$moduleUrls[e])return s.$moduleUrls[e];var n=e.split("/");t=t||n[n.length-2]||"";var r=n[n.length-1].replace(t,"").replace(/(^[\-_])|([\-_]$)/,"");!r&&n.length>1&&(r=n[n.length-2]);var i=s[t+"Path"];return i==null&&(i=s.basePath),i&&i.slice(-1)!="/"&&(i+="/"),i+t+"-"+r+this.get("suffix")},t.setModuleUrl=function(e,t){return s.$moduleUrls[e]=t},t.init=function(){s.packaged=e.packaged||n.packaged||i.define&&define.packaged;if(!i.document)return"";var r={},u="",a=document.getElementsByTagName("script");for(var f=0;f<a.length;f++){var l=a[f],c=l.src||l.getAttribute("src");if(!c)continue;var h=l.attributes;for(var p=0,d=h.length;p<d;p++){var v=h[p];v.name.indexOf("data-ace-")===0&&(r[o(v.name.replace(/^data-ace-/,""))]=v.value)}var m=c.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);m&&(u=m[1])}u&&(r.base=r.base||u,r.packaged=!0),r.workerPath=r.workerPath||r.base,r.modePath=r.modePath||r.base,r.themePath=r.themePath||r.base,delete r.base;for(var g in r)typeof r[g]!="undefined"&&t.set(g,r[g])}}),ace.define("ace/lib/net",["require","exports","module","ace/lib/useragent"],function(e,t,n){var r=e("./useragent");t.get=function(e,n){var r=t.createXhr();r.open("GET",e,!0),r.onreadystatechange=function(e){r.readyState===4&&n(r.responseText)},r.send(null)};var i=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];t.createXhr=function(){var e,t,n;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;for(t=0;t<3;t++){n=i[t];try{e=new ActiveXObject(n)}catch(r){}if(e){i=[n];break}}if(!e)throw new Error("createXhr(): XMLHttpRequest not available");return e},t.loadScript=function(e,t){var n=document.getElementsByTagName("head")[0],i=document.createElement("script");i.src=e,n.appendChild(i),r.isOldIE?i.onreadystatechange=function(){this.readyState=="loaded"&&t()}:i.onload=t}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on("change",function(e){t._emit("changeCursor"),t.$isEmpty||t._emit("changeSelection"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.selectionAnchor.on("change",function(){t.$isEmpty||t._emit("changeSelection")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty){this.moveCursorTo(this.lead.row,this.lead.column+e);return}var t=this.getSelectionAnchor(),n=this.getSelectionLead(),r=this.isBackwards();(!r||t.column!==0)&&this.setSelectionAnchor(t.row,t.column+e),(r||n.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(n.row,n.column+e)})},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column==0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column,e.column+n).split(" ").length-1==n?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\s*/);s[0].length==t?this.moveCursorTo(r.row,r.column):this.moveCursorTo(r.row,r.column+s[0].length)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(i=this.session.tokenRe.exec(r))t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r),o;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(o=this.session.nonTokenRe.exec(s))t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<=1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\s*$/.test(r));/^\s+/.test(r)||(r=""),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t==0){do e--,r=this.doc.getLine(e);while(e>0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e}}).call(u.prototype),t.Selection=u}),ace.define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode"],function(e,t,n){var r=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour").Behaviour,o=e("../unicode"),u=function(){this.$tokenizer=new r((new i).getRules()),this.$behaviour=new s};(function(){this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|s])+","g"),this.getTokenizer=function(){return this.$tokenizer},this.toggleCommentLines=function(e,t,n,r){},this.getNextLineIndent=function(e,t,n){return""},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""},this.createWorker=function(e){return null},this.createModeDelegates=function(e){if(!this.$embeds)return;this.$modes={};for(var t=0;t<this.$embeds.length;t++)e[this.$embeds[t]]&&(this.$modes[this.$embeds[t]]=new e[this.$embeds[t]]);var n=["toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction"];for(var t=0;t<n.length;t++)(function(e){var r=n[t],i=e[r];e[n[t]]=function(){return this.$delegator(r,arguments,i)}})(this)},this.$delegator=function(e,t,n){var r=t[0];for(var i=0;i<this.$embeds.length;i++){if(!this.$modes[this.$embeds[i]])continue;var s=r.split(this.$embeds[i]);if(!s[0]&&s[1]){t[0]=s[1];var o=this.$modes[this.$embeds[i]];return o[e].apply(o,t)}}var u=n.apply(this,t);return n?u:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}}}).call(u.prototype),t.Mode=u}),ace.define("ace/tokenizer",["require","exports","module"],function(e,t,n){var r=function(e,t){t=t?"g"+t:"g",this.rules=e,this.regExps={},this.matchMappings={};for(var n in this.rules){var r=this.rules[n],i=r,s=[],o=0,u=this.matchMappings[n]={};for(var a=0;a<i.length;a++){i[a].regex instanceof RegExp&&(i[a].regex=i[a].regex.toString().slice(1,-1));var f=(new RegExp("(?:("+i[a].regex+")|(.))")).exec("a").length-2,l=i[a].regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+o+1)});if(f>1&&i[a].token.length!==f-1)throw new Error("For "+i[a].regex+" the matching groups ("+(f-1)+") and length of the token array ("+i[a].token.length+") don't match (rule #"+a+" of state "+n+")");u[o]={rule:a,len:f},o+=f,s.push(l)}this.regExps[n]=new RegExp("(?:("+s.join(")|(")+")|(.))",t)}};(function(){this.getLineTokens=function(e,t){var n=t||"start",r=this.rules[n],i=this.matchMappings[n],s=this.regExps[n];s.lastIndex=0;var o,u=[],a=0,f={type:null,value:""};while(o=s.exec(e)){var l="text",c=null,h=[o[0]];for(var p=0;p<o.length-2;p++){if(o[p+1]===undefined)continue;c=r[i[p].rule],i[p].len>1&&(h=o.slice(p+2,p+1+i[p].len)),typeof c.token=="function"?l=c.token.apply(this,h):l=c.token;if(c.next){n=c.next,r=this.rules[n],i=this.matchMappings[n],a=s.lastIndex,s=this.regExps[n];if(s===undefined)throw new Error("You indicated a state of "+c.next+" to go to, but it doesn't exist!");s.lastIndex=a}break}if(h[0]){typeof l=="string"&&(h=[h.join("")],l=[l]);for(var p=0;p<h.length;p++){if(!h[p])continue;(!c||c.merge||l[p]==="text")&&f.type===l[p]?f.value+=h[p]:(f.type&&u.push(f),f={type:l[p],value:h[p]})}}if(a==e.length)break;a=s.lastIndex}return f.type&&u.push(f),{tokens:u,state:n}}}).call(r.prototype),t.Tokenizer=r}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"text",regex:".+"}]}};(function(){this.addRules=function(e,t){for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];s.next&&(s.next=t+s.next)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=(new e).getRules();if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);var f=Array.prototype[s?"push":"unshift"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n));this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||"|");for(var u=o.length;u--;)i[o[u]]=t}),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),ace.define("ace/mode/behaviour",["require","exports","module"],function(e,t,n){var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e=="function")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),ace.define("ace/unicode",["require","exports","module"],function(e,t,n){function r(e){var n=/\w{4}/g;for(var r in e)t.packages[r]=e[r].replace(n,"\\u$&")}t.packages={},r({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=5e3,o=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=n.doc,i=0,s=r.getLength();while(n.currentLine<s){n.$tokenizeRow(n.currentLine);while(n.lines[n.currentLine])n.currentLine++;i++;if(i%5==0&&new Date-e>20){n.fireUpdateEvent(t,n.currentLine-1),n.running=setTimeout(n.$worker,20);return}}n.running=!1,n.fireUpdateEvent(t,s-1)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._emit("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.$updateOnChange=function(e){var t=e.range,n=t.start.row,r=t.end.row-n;if(r===0)this.lines[n]=null;else if(e.action=="removeText"||e.action=="removeLines")this.lines.splice(n,r+1,null),this.states.splice(n,r+1,null);else{var i=Array(r+1);i.unshift(n,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(n,this.currentLine,this.doc.getLength()),this.stop(),this.running=setTimeout(this.$worker,700)},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1];if(t.length>s){var r={value:t.substr(s),type:"text"};t=t.slice(0,s)}var i=this.tokenizer.getLineTokens(t,n);return r&&(i.tokens.push(r),i.state="start"),this.states[e]!==i.state?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(o.prototype),t.BackgroundTokenizer=o}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i,null,this.type)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],function(e,t,n){function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){e=e.clone();var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return i},this.getAllFolds=function(){function n(t){e.push(t);if(!t.subFolds)return;for(var r=0;r<t.subFolds.length;r++)n(t.subFolds[r])}var e=[],t=this.$foldData;for(var r=0;r<t.length;r++)for(var i=0;i<t[r].folds.length;i++)n(t[r].folds[i]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:o=new s(t,e),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u==f&&l-a<2)throw"The range has to be at least 2 characters width";var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);if(c&&!c.range.isStart(u,a)||h&&!h.range.isEnd(f,l))throw"A fold can't intersect already existing fold"+o.range+c.range;var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),o.subFolds=p);for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._emit("changeFold",{data:o}),o},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r),this.$modified=!0,this._emit("changeFold",{data:e})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(e){this.addFold(e)},this),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?n=new r(0,0,this.getLength(),0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRange(n);if(t)this.removeFolds(i);else while(i.length)this.expandFolds(i),i=this.getFoldsInRange(n)},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row,i=0),t==null&&(t=e.end.row,n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)}.bind(this),t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u="...";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+".."}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken();if(s&&/^comment|string/.test(s.type)){var u=new r,a=new RegExp(s.type.replace(/\..*/,"\\."));if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}u.start.row=i.getCurrentTokenRow(),u.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){do s=i.stepForward();while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return u.end.row=i.getCurrentTokenRow(),u.end.column=i.getCurrentTokenColumn()+s.value.length-2,u}},this.foldAll=function(e,t){var n=this.foldWidgets;t=t||this.getLength();for(var r=e||0;r<t;r++){n[r]==null&&(n[r]=this.getFoldWidget(r));if(n[r]!="start")continue;var i=this.getFoldWidgetRange(r);if(i&&i.end.row<=t)try{this.addFold("...",i)}catch(s){}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.removeListener("change",this.$updateFoldWidgets),this._emit("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets)},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n=this.getFoldWidget(e),r=this.getLine(e),i=t.shiftKey,s=i||t.ctrlKey||t.altKey||t.metaKey,o;n=="end"?o=this.getFoldAt(e,0,-1):o=this.getFoldAt(e,r.length,1);if(o){s?this.removeFold(o):this.expandFold(o);return}var u=this.getFoldWidgetRange(e);if(u){if(!u.isMultiLine()){o=this.getFoldAt(u.start.row,u.start.column,1);if(o&&u.isEqual(o.range)){this.removeFold(o);return}}i||this.addFold("...",u),s&&this.foldAll(u.start.row+1,u.end.row)}else s&&this.foldAll(e+1,this.getLength()),(t.target||t.srcElement).className+=" ace_invalid"},this.updateFoldWidgets=function(e){var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i===0)this.foldWidgets[r]=null;else if(t.action=="removeText"||t.action=="removeLines")this.foldWidgets.splice(r,i+1,null);else{var s=Array(i+1);s.unshift(r,1),this.foldWidgets.splice.apply(this.foldWidgets,s)}}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw"Can't add a fold to this FoldLine as it has no connection";this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw"Trying to add fold to FoldRow that doesn't have a matching row";this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o==0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:"after"};if(r==0)return{fold:n,kind:"inside"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind=="inside"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o==0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t).fold,r=this.folds,s=this.foldData;if(!n)return null;var o=r.indexOf(n),u=r[o-1];this.end.row=u.end.row,this.end.column=u.end.column,r=r.splice(o,r.length-o);var a=new i(s,r);return s.splice(s.indexOf(this)+1,0,a),a},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+": ["];return this.folds.forEach(function(t){e.push(" "+t.toString())}),e.push("]"),e.join("\n")},this.idxToPosition=function(e){var t=0,n;for(var r=0;r<this.folds.length;r++){var n=this.folds[r];e-=n.start.column-t;if(e<0)return{row:n.start.row,column:n.start.column+e};e-=n.placeholder.length;if(e<0)return n.start;t=n.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),ace.define("ace/edit_session/fold",["require","exports","module"],function(e,t,n){var r=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=[]};(function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new r(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t},this.addSubFold=function(e){if(this.range.isEqual(e))return this;if(!this.range.containsRange(e))throw"A fold can't intersect already existing fold"+e.range+this.range;var t=e.range.start.row,n=e.range.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw"A fold can't intersect already existing fold"+e.range+this.range;var a=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e}}).call(r.prototype)}),ace.define("ace/token_iterator",["require","exports","module"],function(e,t,n){var r=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e=this.$session.getLength();this.$tokenIndex+=1;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1;if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n}}).call(r.prototype),t.TokenIterator=r}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e("../token_iterator").TokenIterator,i=e("../range").Range;t.BracketMatch=s}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$matchIterator(e,this.$options);if(!t)return!1;var n=null;return t.forEach(function(e,t,r){if(!e.start){var i=e.offset+(r||0);n=new s(t,i,t,i+e.length)}else n=e;return!0}),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a;for(var l=u.offset||0;l<=f;l++){for(var c=0;c<a;c++)if(i[l+c].search(u[c])==-1)break;var h=i[l],p=i[l+a-1],d=h.match(u[0])[0].length,v=p.match(u[a-1])[0].length;o.push(new s(l,h.length-d,l+a-1,v))}}else for(var m=0;m<i.length;m++){var g=r.getMatchOffsets(i[m],u);for(var c=0;c<g.length;c++){var y=g[c];o.push(new s(m,y.offset,m,y.offset+y.length))}}if(n){var b=n.start.column,w=n.start.column,m=0,c=o.length-1;while(m<c&&o[m].start.column<b&&o[m].start.row==n.start.row)m++;while(m<c&&o[c].end.column>w&&o[c].end.row==n.end.row)c--;return o.slice(m,c+1)}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split("");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join("")}return t},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var i=this,o,u=t.backwards;if(t.$isMultiLine)var a=n.length,f=function(t,r,i){var u=t.search(n[0]);if(u==-1)return;for(var f=1;f<a;f++){t=e.getLine(r+f);if(t.search(n[f])==-1)return}var l=t.match(n[a-1])[0].length,c=new s(r,u,r+a-1,l);n.offset==1?(c.start.row--,c.start.column=Number.MAX_VALUE):i&&(c.start.column+=i);if(o(c))return!0};else if(u)var f=function(e,t,i){var s=r.getMatchOffsets(e,n);for(var u=s.length-1;u>=0;u--)if(o(s[u],t,i))return!0};else var f=function(e,t,i){var s=r.getMatchOffsets(e,n);for(var u=0;u<s.length;u++)if(o(s[u],t,i))return!0};return{forEach:function(n){o=n,i.$lineIterator(e,t).forEach(f)}}},this.$assembleRegExp=function(e){if(e.needle instanceof RegExp)return e.re=e.needle;var t=e.needle;if(!e.needle)return e.re=!1;e.regExp||(t=r.escapeRegExp(t)),e.wholeWord&&(t="\\b"+t+"\\b");var n=e.caseSensitive?"g":"gi";e.$isMultiLine=/[\n\r]/.test(t);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(t,n);try{var i=new RegExp(t,n)}catch(s){i=!1}return e.re=i},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\r\n|\r|\n/g,"$\n^").split("\n"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return n[0]==""?(r.shift(),r.offset=1):r.offset=0,r},this.$lineIterator=function(e,t){var n=t.backwards==1,r=t.skipCurrent!=0,i=t.range,s=t.start;s||(s=i?i[n?"end":"start"]:e.selection.getRange()),s.start&&(s=s[r!=n?"end":"start"]);var o=i?i.start.row:0,u=i?i.end.row:e.getLength()-1,a=n?function(n){var r=s.row,i=e.getLine(r).substring(0,s.column);if(n(i,r))return;for(r--;r>=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../keyboard/hash_handler").HashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){this.platform=e,this.commands=this.byName={},this.commmandKeyBinding={},this.addCommands(t),this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var r=this._emit("exec",{editor:t,command:e,args:n});return r===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys"],function(e,t,n){function i(e,t){this.platform=t,this.commands={},this.commmandKeyBinding={},this.addCommands(e)}var r=e("../lib/keys");(function(){this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e){var t=typeof e=="string"?e:e.name;e=this.commands[t],delete this.commands[t];var n=this.commmandKeyBinding;for(var r in n)for(var i in n[r])n[r][i]==e&&delete n[r][i]},this.bindKey=function(e,t){if(!e)return;if(typeof t=="function"){this.addCommand({exec:t,bindKey:e,name:e});return}var n=this.commmandKeyBinding;e.split("|").forEach(function(e){var r=this.parseKeys(e,t),i=r.hashId;(n[i]||(n[i]={}))[r.key]=t},this)},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n}),n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){var t=e.bindKey;if(!t)return;var n=typeof t=="string"?t:t[this.platform];this.bindKey(n,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)throw"invalid modifier "+t[o]+" in "+e;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=this.commmandKeyBinding;return r[t]&&r[t][n]},this.handleKeyboard=function(e,t,n,r){return{command:this.findKeyCommand(t,n)}}}).call(i.prototype),t.HashHandler=i}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang"],function(e,t,n){function i(e,t){return{win:e,mac:t}}var r=e("../lib/lang");t.commands=[{name:"selectall",bindKey:i("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:i(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:i("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:i("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},readOnly:!0},{name:"unfold",bindKey:i("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},readOnly:!0},{name:"foldall",bindKey:i("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll()},readOnly:!0},{name:"unfoldall",bindKey:i("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},readOnly:!0},{name:"findnext",bindKey:i("Ctrl-K","Command-G"),exec:function(e){e.findNext()},readOnly:!0},{name:"findprevious",bindKey:i("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},readOnly:!0},{name:"find",bindKey:i("Ctrl-F","Command-F"),exec:function(e){var t=prompt("Find:",e.getCopyText());e.find(t)},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:i("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0},{name:"gotostart",bindKey:i("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectup",bindKey:i("Shift-Up","Shift-Up"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",readOnly:!0},{name:"golineup",bindKey:i("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selecttoend",bindKey:i("Ctrl-Shift-End","Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoend",bindKey:i("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectdown",bindKey:i("Shift-Down","Shift-Down"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",readOnly:!0},{name:"golinedown",bindKey:i("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordleft",bindKey:i("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordleft",bindKey:i("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolinestart",bindKey:i("Alt-Shift-Left","Command-Shift-Left"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolinestart",bindKey:i("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectleft",bindKey:i("Shift-Left","Shift-Left"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoleft",bindKey:i("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordright",bindKey:i("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordright",bindKey:i("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolineend",bindKey:i("Alt-Shift-Right","Command-Shift-Right"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolineend",bindKey:i("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectright",bindKey:i("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoright",bindKey:i("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:i(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:i("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:i(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:i("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:i("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"togglerecording",bindKey:i("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:i("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:i("Ctrl-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttomatching",bindKey:i("Ctrl-Shift-P",null),exec:function(e){e.jumpToMatching(!0)},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},multiSelectAction:"forEach"},{name:"removeline",bindKey:i("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},multiSelectAction:"forEach"},{name:"duplicateSelection",bindKey:i("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},multiSelectAction:"forEach"},{name:"sortlines",bindKey:i("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},multiSelectAction:"forEach"},{name:"togglecomment",bindKey:i("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEach"},{name:"modifyNumberUp",bindKey:i("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:i("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},multiSelectAction:"forEach"},{name:"replace",bindKey:i("Ctrl-R","Command-Option-F"),exec:function(e){var t=prompt("Find:",e.getCopyText());if(!t)return;var n=prompt("Replacement:");if(!n)return;e.replace(n,{needle:t})}},{name:"replaceall",bindKey:i("Ctrl-Shift-R","Command-Shift-Option-F"),exec:function(e){var t=prompt("Find:");if(!t)return;var n=prompt("Replacement:");if(!n)return;e.replaceAll(n,{needle:t})}},{name:"undo",bindKey:i("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:i("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:i("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()}},{name:"movelinesup",bindKey:i("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()}},{name:"copylinesdown",bindKey:i("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()}},{name:"movelinesdown",bindKey:i("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()}},{name:"del",bindKey:i("Delete","Delete|Ctrl-D"),exec:function(e){e.remove("right")},multiSelectAction:"forEach"},{name:"backspace",bindKey:i("Command-Backspace|Option-Backspace|Shift-Backspace|Backspace","Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach"},{name:"removetolinestart",bindKey:i("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach"},{name:"removetolineend",bindKey:i("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach"},{name:"removewordleft",bindKey:i("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach"},{name:"removewordright",bindKey:i("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach"},{name:"outdent",bindKey:i("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach"},{name:"indent",bindKey:i("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach"},{name:"inserttext",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach"},{name:"splitline",bindKey:i(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach"},{name:"transposeletters",bindKey:i("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)}},{name:"touppercase",bindKey:i("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach"},{name:"tolowercase",bindKey:i("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach"}]}),ace.define("ace/undomanager",["require","exports","module"],function(e,t,n){var r=function(){this.reset()};(function(){this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],this.$undoStack.push(t),this.$redoStack=[]},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t)),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(t,e),this.$undoStack.push(t)),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[]},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0}}).call(r.prototype),t.UndoManager=r}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/useragent","ace/config","ace/lib/net","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/renderloop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/useragent"),u=e("./config"),a=e("./lib/net"),f=e("./layer/gutter").Gutter,l=e("./layer/marker").Marker,c=e("./layer/text").Text,h=e("./layer/cursor").Cursor,p=e("./scrollbar").ScrollBar,d=e("./renderloop").RenderLoop,v=e("./lib/event_emitter").EventEmitter,m=".ace_editor {position: absolute;overflow: hidden;font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;font-size: 12px;}.ace_scroller {position: absolute;overflow: hidden;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: text;}.ace_gutter {position: absolute;overflow : hidden;height: 100%;width: auto;cursor: default;z-index: 4;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTQ4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTU4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBMjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBMzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkgXxbAAAAJbSURBVHjapFNNaBNBFH4zs5vdZLP5sQmNpT82QY209heh1ioWisaDRcSKF0WKJ0GQnrzrxasHsR6EnlrwD0TagxJabaVEpFYxLWlLSS822tr87m66ccfd2GKyVhA6MMybgfe97/vmPUQphd0sZjto9XIn9OOsvlu2nkqRzVU+6vvlzPf8W6bk8dxQ0NPbxAALgCgg2JkaQuhzQau/El0zbmUA7U0Es8v2CiYmKQJHGO1QICCLoqilMhkmurDAyapKgqItezi/USRdJqEYY4D5jCy03ht2yMkkvL91jTTX10qzyyu2hruPRN7jgbH+EOsXcMLgYiThEgAMhABW85oqy1DXdRIdvP1AHJ2acQXvDIrVHcdQNrEKNYSVMSZGMjEzIIAwDXIo+6G/FxcGnzkC3T2oMhLjre49sBB+RRcHLqdafK6sYdE/GGBwU1VpFNj0aN8pJbe+BkZyevUrvLl6Xmm0W9IuTc0DxrDNAJd5oEvI/KRsNC3bQyNjPO9yQ1YHcfj2QvfQc/5TUhJTBc2iM0U7AWDQtc1nJHvD/cfO2s7jaGkiTEfa/Ep8coLu7zmNmh8+dc5lZDuUeFAGUNA/OY6JVaypQ0vjr7XYjUvJM37vt+j1vuTK5DgVfVUoTjVe+y3/LxMxY2GgU+CSLy4cpfsYorRXuXIOi0Vt40h67uZFTdIo6nLaZcwUJWAzwNS0tBnqqKzQDnjdG/iPyZxo46HaKUpbvYkj8qYRTZsBhge+JHhZyh0x9b95JqjVJkT084kZIPwu/mPWqPgfQ5jXh2+92Ay7HedfAgwA6KDWafb4w3cAAAAASUVORK5CYII=\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTg4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTk4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBNjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBNzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pgd7PfIAAAGmSURBVHjaYvr//z8DJZiJgUIANoCRkREb9gLiSVAaQx4OQM7AAkwd7XU2/v++/rOttdYGEB9dASEvOMydGKfH8Gv/p4XTkvRBfLxeQAP+1cUhXopyvzhP7P/IoSj7g7Mw09cNKO6J1QQ0L4gICPIv/veg/8W+JdFvQNLHVsW9/nmn9zk7B+cCkDwhL7gt6knSZnx9/LuCEOcvkIAMP+cvto9nfqyZmmUAksfnBUtbM60gX/3/kgyv3/xSFOL5DZT+L8vP+Yfh5cvfPvp/xUHyQHXGyAYwgpwBjZYFT3Y1OEl/OfCH4ffv3wzc4iwMvNIsDJ+f/mH4+vIPAxsb631WW0Yln6ZpQLXdMK/DXGDflh+sIv37EivD5x//Gb7+YWT4y86sl7BCCkSD+Z++/1dkvsFRl+HnD1Rvje4F8whjMXmGj58YGf5zsDMwcnAwfPvKcml62DsQDeaDxN+/Y0qwlpEHqrdB94IRNIDUgfgfKJChGK4OikEW3gTiXUB950ASLFAF54AC94A0G9QAfOnmF9DCDzABFqS08IHYDIScdijOjQABBgC+/9awBH96jwAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRTk5MTVGREIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRTk5MTVGRUIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZFOTkxNUZCQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZFOTkxNUZDQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SIDkjAAAAJ1JREFUeNpi/P//PwMlgImBQkB7A6qrq/+DMC55FkIGKCoq4pVnpFkgTp069f/+/fv/r1u37r+tre1/kg0A+ptn9uzZYLaRkRHpLvjw4cNXWVlZhufPnzOcO3eOdAO0tbVPAjHDmzdvGA4fPsxIsgGSkpJmv379Ynj37h2DjIyMCMkG3LhxQ/T27dsMampqDHZ2dq/pH41DxwCAAAMAFdc68dUsFZgAAAAASUVORK5CYII=\");}.ace_scrollbar {position: absolute;overflow-x: hidden;overflow-y: scroll;right: 0;}.ace_scrollbar-inner {position: absolute;width: 1px;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;}.ace_text-input.ace_composition {background: #fff;color: #000;z-index: 1000;opacity: 1;border: solid lightgray 1px;margin: -1px}.ace_layer {z-index: 1;position: absolute;overflow: hidden;white-space: nowrap;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;/* setting pointer-events: auto; on node under the mouse, which changesduring scroll, will break mouse wheel scrolling in Safari */pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {color: black;font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-moz-transition: opacity 0.18s;-webkit-transition: opacity 0.18s;-o-transition: opacity 0.18s;-ms-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_cursor[style*=\"opacity: 0\"]{-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_line {white-space: nowrap;}.ace_marker-layer .ace_step {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;}.ace_editor.ace_dragging .ace_content {cursor: move;}.ace_gutter-tooltip {background-color: #FFFFD5;border: 1px solid gray;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);color: black;display: inline-block;padding: 4px;position: absolute;z-index: 300;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre-line;word-wrap: break-word;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: inline-block;width: 11px;vertical-align: top;background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;}.ace_fold-widget.ace_end {background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}/*** Dark version for fold widgets*/.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-moz-transition: opacity 0.4s ease 0.05s;-webkit-transition: opacity 0.4s ease 0.05s;-o-transition: opacity 0.4s ease 0.05s;-ms-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-moz-transition: opacity 0.05s ease 0.05s;-webkit-transition: opacity 0.05s ease 0.05s;-o-transition: opacity 0.05s ease 0.05s;-ms-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}";i.importCssString(m,"ace_editor");var g=function(e,t){var n=this;this.container=e,this.$keepTextAreaAtCursor=!o.isIE,i.addCssClass(e,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.setHighlightGutterLine(!0),this.$gutterLayer=new f(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var r=this.$textLayer=new c(this.content);this.canvas=r.element,this.$markerFront=new l(this.content),this.$cursorLayer=new h(this.content),this.$horizScroll=!1,this.$horizScrollAlwaysVisible=!1,this.$animatedScroll=!1,this.scrollBar=new p(e),this.scrollBar.addEventListener("scroll",function(e){n.$inScrollAnimation||n.session.setScrollTop(e.data)}),this.scrollTop=0,this.scrollLeft=0,s.addListener(this.scroller,"scroll",function(){var e=n.scroller.scrollLeft;n.scrollLeft=e,n.session.setScrollLeft(e)}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharacterSize",function(){n.updateCharacterSize(),n.onResize(!0)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:1,characterWidth:1,minHeight:1,maxHeight:1,offset:0,height:1},this.$loop=new d(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4)};(function(){this.showGutter=!0,this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.characterWidth=this.$textLayer.getCharacterWidth(),this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session=e,this.scroller.className="ace_scroller",this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),this.$loop.schedule(this.CHANGE_FULL)},this.updateLines=function(e,t){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.firstRow>this.layerConfig.lastRow||this.$changedLines.lastRow<this.layerConfig.firstRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.onResize=function(e,t,n,r){var s=this.CHANGE_SIZE,o=this.$size;if(this.resizing>2)return;this.resizing>1?this.resizing++:this.resizing=e?1:0,r||(r=i.getInnerHeight(this.container));if(e||o.height!=r)o.height=r,this.scroller.style.height=r+"px",o.scrollerHeight=this.scroller.clientHeight,this.scrollBar.setHeight(o.scrollerHeight),this.session&&(this.session.setScrollTop(this.getScrollTop()),s|=this.CHANGE_FULL);n||(n=i.getInnerWidth(this.container));if(e||this.resizing>1||o.width!=n){o.width=n;var t=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,n-t-this.scrollBar.getWidth()),this.scroller.style.right=this.scrollBar.getWidth()+"px";if(this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}e?this.$renderChanges(s,!0):this.$loop.schedule(s),e&&delete this.resizing},this.onGutterResize=function(){var e=this.$size.width,t=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=t+"px",this.$size.scrollerWidth=Math.max(0,e-t-this.scrollBar.getWidth()),this.session.getUseWrapMode()&&this.adjustWrapLimit()&&this.$loop.schedule(this.CHANGE_FULL)},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t)},this.setAnimatedScroll=function(e){this.$animatedScroll=e},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},this.getShowInvisibles=function(){return this.$textLayer.showInvisibles},this.getDisplayIndentGuides=function(){return this.$textLayer.displayIndentGuides},this.setDisplayIndentGuides=function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},this.$showPrintMargin=!0,this.setShowPrintMargin=function(e){this.$showPrintMargin=e,this.$updatePrintMargin()},this.getShowPrintMargin=function(){return this.$showPrintMargin},this.$printMarginColumn=80,this.setPrintMarginColumn=function(e){this.$printMarginColumn=e,this.$updatePrintMargin()},this.getPrintMarginColumn=function(){return this.$printMarginColumn},this.getShowGutter=function(){return this.showGutter},this.setShowGutter=function(e){if(this.showGutter===e)return;this.$gutter.style.display=e?"block":"none",this.showGutter=e,this.onResize(!0)},this.getFadeFoldWidgets=function(){return i.hasCssClass(this.$gutter,"ace_fade-fold-widgets")},this.setFadeFoldWidgets=function(e){e?i.addCssClass(this.$gutter,"ace_fade-fold-widgets"):i.removeCssClass(this.$gutter,"ace_fade-fold-widgets")},this.$highlightGutterLine=!1,this.setHighlightGutterLine=function(e){if(this.$highlightGutterLine==e)return;this.$highlightGutterLine=e;if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},this.getHighlightGutterLine=function(){return this.$highlightGutterLine},this.$updateGutterLineHighlight=function(){this.$gutterLineHighlight.style.top=this.$cursorLayer.$pixelPos.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=this.layerConfig.lineHeight+"px"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden"},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.$cursorLayer.$pixelPos.top,t=this.$cursorLayer.$pixelPos.left;e-=this.layerConfig.offset;if(e<0||e>this.layerConfig.height-this.lineHeight)return;var n=this.characterWidth;this.$composition&&(n+=this.textarea.scrollWidth),t-=this.scrollLeft,t>this.$size.scrollerWidth-n&&(t=this.$size.scrollerWidth-n),this.showGutter&&(t+=this.$gutterLayer.gutterWidth),this.textarea.style.height=this.lineHeight+"px",this.textarea.style.width=n+"px",this.textarea.style.left=t+"px",this.textarea.style.top=e-1+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.getHScrollBarAlwaysVisible=function(){return this.$horizScrollAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.$horizScrollAlwaysVisible!=e&&(this.$horizScrollAlwaysVisible=e,(!this.$horizScrollAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL))},this.$updateScrollBar=function(){this.scrollBar.setInnerHeight(this.layerConfig.maxHeight),this.scrollBar.setScrollTop(this.scrollTop)},this.$renderChanges=function(e,t){if(!t&&(!e||!this.session||!this.container.offsetWidth))return;(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL)&&this.$computeLayerConfig();if(e&this.CHANGE_H_SCROLL){this.scroller.scrollLeft=this.scrollLeft;var n=this.scroller.scrollLeft;this.scrollLeft=n,this.session.setScrollLeft(n),this.scroller.className=this.scrollLeft==0?"ace_scroller":"ace_scroller ace_scroll-left"}if(e&this.CHANGE_FULL){this.$textLayer.checkForSizeChanges(),this.$updateScrollBar(),this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();return}if(e&this.CHANGE_SCROLL){this.$updateScrollBar(),e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(this.layerConfig):this.$textLayer.scrollLines(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();return}e&this.CHANGE_TEXT?(this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.showGutter)&&this.$gutterLayer.update(this.layerConfig):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.showGutter&&this.$gutterLayer.update(this.layerConfig),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(this.layerConfig),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(this.layerConfig),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(this.layerConfig),e&this.CHANGE_SIZE&&this.$updateScrollBar()},this.$computeLayerConfig=function(){var e=this.session,t=this.scrollTop%this.lineHeight,n=this.$size.scrollerHeight+this.lineHeight,r=this.$getLongestLine(),i=this.$horizScrollAlwaysVisible||this.$size.scrollerWidth-r<0,s=this.$horizScroll!==i;this.$horizScroll=i,s&&(this.scroller.style.overflowX=i?"scroll":"hidden",i||this.session.setScrollLeft(0));var o=this.session.getScreenLength()*this.lineHeight;this.session.setScrollTop(Math.max(0,Math.min(this.scrollTop,o-this.$size.scrollerHeight)));var u=Math.ceil(n/this.lineHeight)-1,a=Math.max(0,Math.round((this.scrollTop-t)/this.lineHeight)),f=a+u,l,c,h=this.lineHeight;a=e.screenToDocumentRow(a,0);var p=e.getFoldLine(a);p&&(a=p.start.row),l=e.documentToScreenRow(a,0),c=e.getRowLength(a)*h,f=Math.min(e.screenToDocumentRow(f,0),e.getLength()-1),n=this.$size.scrollerHeight+e.getRowLength(f)*h+c,t=this.scrollTop-l*h,this.layerConfig={width:r,padding:this.$padding,firstRow:a,firstRowScreen:l,lastRow:f,lineHeight:h,characterWidth:this.characterWidth,minHeight:n,maxHeight:o,offset:t,height:this.$size.scrollerHeight},this.$gutterLayer.element.style.marginTop=-t+"px",this.content.style.marginTop=-t+"px",this.content.style.width=r+2*this.$padding+"px",this.content.style.height=n+"px",s&&this.onResize(!0)},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.$textLayer.showInvisibles&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t){if(this.$size.scrollerHeight===0)return;var n=this.$cursorLayer.getPixelPosition(e),r=n.left,i=n.top;this.scrollTop>i?(t&&(i-=t*this.$size.scrollerHeight),this.session.setScrollTop(i)):this.scrollTop+this.$size.scrollerHeight<i+this.lineHeight&&(t&&(i+=t*this.$size.scrollerHeight),this.session.setScrollTop(i+this.lineHeight-this.$size.scrollerHeight));var s=this.scrollLeft;s>r?(r<this.$padding+2*this.layerConfig.characterWidth&&(r=0),this.session.setScrollLeft(r)):s+this.$size.scrollerWidth<r+this.characterWidth&&this.session.setScrollLeft(Math.round(r+this.characterWidth-this.$size.scrollerWidth))},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e=="number"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(this.$animatedScroll&&Math.abs(e-n)<1e5){var r=this,i=r.$calcSteps(e,n);this.$inScrollAnimation=!0,clearInterval(this.$timer),r.session.setScrollTop(i.shift()),this.$timer=setInterval(function(){i.length?(r.session.setScrollTop(i.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$inScrollAnimation=!1,t&&t())},10)}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){e<0&&(e=0),this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>0)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight<this.layerConfig.maxHeight)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this._loadTheme=function(e,t){if(!u.get("packaged"))return t();a.loadScript(u.moduleUrl(e,"theme"),t)},this.setTheme=function(t){function u(e){i.importCssString(e.cssText,e.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass),n.$theme=e.cssClass,n.theme=e,i.addCssClass(n.container,e.cssClass),i.setCssClass(n.container,"ace_dark",e.isDark);var t=e.padding||4;n.$padding&&t!=n.$padding&&n.setPadding(t),n.$size&&(n.$size.width=0,n.onResize()),n._dispatchEvent("themeLoaded",{theme:e})}var n=this;this.$themeValue=t,n._dispatchEvent("themeChange",{theme:t});if(!t||typeof t=="string"){var r=t||"ace/theme/textmate",s;try{s=e(r)}catch(o){}if(s)return u(s);n._loadTheme(r,function(){e([r],function(e){if(n.$themeValue!==t)return;u(e)})})}else u(t)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(t,n){i.setCssClass(this.container,t,n!=0)},this.unsetStyle=function(t){i.removeCssClass(this.container,t)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),t.VirtualRenderer=g}),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,u=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this)};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];var t,n;for(var r=0;r<e.length;r++){var i=e[r],n=i.row,t=this.$annotations[n];t||(t=this.$annotations[n]={text:[]});var o=i.text;o=o?s.escapeHTML(o):i.html||"",t.text.indexOf(o)===-1&&t.text.push(o);var u=i.type;u=="error"?t.className=" ace_error":u=="warning"&&t.className!=" ace_error"?t.className=" ace_warning":u=="info"&&!t.className&&(t.className=" ace_info")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i!==0)if(t.action=="removeText"||t.action=="removeLines")this.$annotations.splice(r,i+1,null);else{var s=Array(i+1);s.unshift(r,1),this.$annotations.splice.apply(this.$annotations,s)}},this.update=function(e){var t={className:""},n=[],i=e.firstRow,s=e.lastRow,o=this.session.getNextFoldLine(i),u=o?o.start.row:Infinity,a=this.$showFoldWidgets&&this.session.foldWidgets,f=this.session.$breakpoints,l=this.session.$decorations,c=0;for(;;){i>u&&(i=o.end.row+1,o=this.session.getNextFoldLine(i,o),u=o?o.start.row:Infinity);if(i>s)break;var h=this.$annotations[i]||t;n.push("<div class='ace_gutter-cell ",f[i]||"",l[i]||"",h.className,"' style='height:",this.session.getRowLength(i)*e.lineHeight,"px;'>",c=i+1);if(a){var p=a[i];p==null&&(p=a[i]=this.session.getFoldWidget(i)),p&&n.push("<span class='ace_fold-widget ace_",p,p=="start"&&i==u&&i<o.end.row?" ace_closed":" ace_open","' style='height:",e.lineHeight,"px","'></span>")}n.push("</div>"),i++}this.element=r.setInnerHtml(this.element,n.join("")),this.element.style.height=e.minHeight+"px",this.session.$useWrapMode&&(c=this.session.getLength());var d=(""+c).length*e.characterWidth,v=this.$padding||this.$computePadding();d+=v.left+v.right,d!==this.gutterWidth&&(this.gutterWidth=d,this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._emit("changeGutterWidth",d))},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,"ace_folding-enabled"):r.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1,this.$padding.right=parseInt(e.paddingRight),this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return"markers";if(this.$showFoldWidgets&&e.x>n.right-t.right)return"foldWidgets"}}).call(u.prototype),t.Gutter=u}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var s=r.range.clipRows(e.firstRow,e.lastRow);if(s.isEmpty())continue;s=s.toScreenRange(this.session);if(r.renderer){var o=this.$getTop(s.start.row,e),u=this.$padding+s.start.column*e.characterWidth;r.renderer(t,s,u,o,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,s,r.clazz,e):s.isMultiLine()?r.type=="text"?this.drawTextMarker(t,s,r.clazz,e):this.drawMultiLineMarker(t,s,r.clazz,e):this.drawSingleLineMarker(t,s,r.clazz+" ace_start",e)}this.element=i.setInnerHtml(this.element,t.join(""))},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,i){var s=t.start.row,o=new r(s,t.start.column,s,this.session.getScreenLastRowColumn(s));this.drawSingleLineMarker(e,o,n+" ace_start",i,1,"text"),s=t.end.row,o=new r(s,0,s,t.end.column),this.drawSingleLineMarker(e,o,n,i,0,"text");for(s=t.start.row+1;s<t.end.row;s++)o.start.row=s,o.end.row=s,o.end.column=this.session.getScreenLastRowColumn(s),this.drawSingleLineMarker(e,o,n,i,1,"text")},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;e.push("<div class='",n," ace_start' style='","height:",o,"px;","right:0;","top:",u,"px;","left:",a,"px;'></div>"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push("<div class='",n,"' style='","height:",o,"px;","width:",f,"px;","top:",u,"px;","left:",s,"px;'></div>"),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<0)return;u=this.$getTop(t.start.row+1,r),e.push("<div class='",n,"' style='","height:",o,"px;","right:0;","top:",u,"px;","left:",s,"px;'></div>")},this.drawSingleLineMarker=function(e,t,n,r,i){var s=r.lineHeight,o=(t.end.column+(i||0)-t.start.column)*r.characterWidth,u=this.$getTop(t.start.row,r),a=this.$padding+t.start.column*r.characterWidth;e.push("<div class='",n,"' style='","height:",s,"px;","width:",o,"px;","top:",u,"px;","left:",a,"px;'></div>")},this.drawFullLineMarker=function(e,t,n,r){var i=this.$getTop(t.start.row,r),s=r.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,r)-i),e.push("<div class='",n,"' style='","height:",s,"px;","top:",i,"px;","left:0;right:0;'></div>")}}).call(s.prototype),t.Marker=s}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$characterSize={width:0,height:0},this.checkForSizeChanges(),this.$pollSizeChanges()};(function(){r.implement(this,u),this.EOF_CHAR="¶",this.EOL_CHAR="¬",this.TAB_CHAR="→",this.SPACE_CHAR="·",this.$padding=0,this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$characterSize.height||1},this.getCharacterWidth=function(){return this.$characterSize.width||1},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){var e=this;this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.$fontStyles={fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},this.$measureSizes=o.isIE||o.isOldGecko?function(){var e=1e3;if(!this.$measureNode){var t=this.$measureNode=i.createElement("div"),n=t.style;n.width=n.height="auto",n.left=n.top=-e*40+"px",n.visibility="hidden",n.position="fixed",n.overflow="visible",n.whiteSpace="nowrap",t.innerHTML=s.stringRepeat("Xy",e);if(this.element.ownerDocument.body)this.element.ownerDocument.body.appendChild(t);else{var r=this.element.parentNode;while(!i.hasCssClass(r,"ace_editor"))r=r.parentNode;r.appendChild(t)}}if(!this.element.offsetWidth)return null;var n=this.$measureNode.style,o=i.computedStyle(this.element);for(var u in this.$fontStyles)n[u]=o[u];var a={height:this.$measureNode.offsetHeight,width:this.$measureNode.offsetWidth/(e*2)};return a.width==0||a.height==0?null:a}:function(){if(!this.$measureNode){var e=this.$measureNode=i.createElement("div"),t=e.style;t.width=t.height="auto",t.left=t.top="-100px",t.visibility="hidden",t.position="fixed",t.overflow="visible",t.whiteSpace="nowrap",e.innerHTML="X";var n=this.element.parentNode;while(n&&!i.hasCssClass(n,"ace_editor"))n=n.parentNode;if(!n)return this.$measureNode=null;n.appendChild(e)}var r=this.$measureNode.getBoundingClientRect(),s={height:r.height,width:r.width};return s.width==0||s.height==0?null:s},this.setSession=function(e){this.session=e,this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)this.showInvisibles?t.push("<span class='ace_invisible'>"+this.TAB_CHAR+Array(n).join(" ")+"</span>"):t.push((new Array(n+1)).join(" "));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var r="ace_indent-guide",i=Array(this.tabSize+1).join(" "),s=i;this.showInvisibles&&(r+=" ace_invisible",s=this.TAB_CHAR+i.substr(6)),this.$tabStrings[" "]="<span class='"+r+"'>"+i+"</span>",this.$tabStrings[" "]="<span class='"+r+"'>"+s+"</span>"}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),s=Math.min(n,e.lastRow),o=this.element.childNodes,u=0;for(var a=e.firstRow;a<r;a++){var f=this.session.getFoldLine(a);if(f){if(f.containsRow(r)){r=f.start.row;break}a=f.end.row}u++}var a=r,f=this.session.getNextFoldLine(a),l=f?f.start.row:Infinity;for(;;){a>l&&(a=f.end.row+1,f=this.session.getNextFoldLine(a,f),l=f?f.start.row:Infinity);if(a>s)break;var c=o[u++];if(c){var h=[];this.$renderLine(h,a,!this.$useLineGroups(),a==l?f:!1),i.setInnerHtml(c,h.join(""))}a++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var n=this.element;if(t.firstRow<e.firstRow)for(var r=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);r>0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRow<t.firstRow){var i=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i)}if(e.lastRow>t.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement("div"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join("");if(this.$useLineGroups())a.className="ace_line_group",r.appendChild(a);else{var l=a.childNodes;while(l.length)r.appendChild(l[0])}s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,s=n,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>r)break;this.$useLineGroups()&&t.push("<div class='ace_line_group'>"),this.$renderLine(t,s,!1,s==u?o:!1),this.$useLineGroups()&&t.push("</div>"),s++}this.element=i.setInnerHtml(this.element,t.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,s=/\t|&|<|( +)|([\x00-\x1f\x80-\xa0\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,o=function(e,n,r,s,o){if(n)return(new Array(e.length+1)).join(" ");if(e=="&")return"&";if(e=="<")return"<";if(e==" "){var u=i.session.getScreenTabSize(t+s);return t+=u-1,i.$tabStrings[u]}if(e==" "){var a=i.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",f=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,"<span class='"+a+"' style='width:"+i.config.characterWidth*2+"px'>"+f+"</span>"}return r?"<span class='ace_invisible ace_invalid'>"+i.SPACE_CHAR+"</span>":(t+=1,"<span class='ace_cjk' style='width:"+i.config.characterWidth*2+"px'>"+e+"</span>")},u=r.replace(s,o);if(!this.$textToken[n.type]){var a="ace_"+n.type.replace(/\./g," ace_"),f="";n.type=="fold"&&(f=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("<span class='",a,"'",f,">",u,"</span>")}else e.push(u);return t+r.length},this.renderIndentGuide=function(e,t){var n=t.search(this.$indentGuideRe);return n<=0?t:t[0]==" "?(n-=n%this.tabSize,e.push(Array(n/this.tabSize+1).join(this.$tabStrings[" "])),t.substr(n)):t[0]==" "?(e.push(Array(n+1).join(this.$tabStrings[" "])),t.substr(n)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,s=0,o=n[0],u=0;for(var a=0;a<t.length;a++){var f=t[a],l=f.value;if(a==0&&this.displayIndentGuides){i=l.length,l=this.renderIndentGuide(e,l);if(!l)continue;i-=l.length}if(i+l.length<o)u=this.$renderToken(e,u,f,l),i+=l.length;else{while(i+l.length>=o)u=this.$renderToken(e,u,f,l.substring(0,o-i)),l=l.substring(o-i),i=o,r||e.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px'>"),s++,u=0,o=n[s]||Number.MAX_VALUE;l.length!=0&&(i+=l.length,u=this.$renderToken(e,u,f,l))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++)r=t[s],i=r.value,n=this.$renderToken(e,n,r,i)},this.$renderLine=function(e,t,n,r){!r&&r!=0&&(r=this.session.getFoldLine(t));if(r)var i=this.$getFoldLineTokens(t,r);else var i=this.session.getTokens(t);n||e.push("<div class='ace_line' style='height:",this.config.lineHeight,"px'>");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push("<span class='ace_invisible'>",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"</span>")),n||e.push("</div>")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){var r=e("../lib/dom"),i=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors")};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,e?r.addCssClass(this.element,"ace_smooth-blinking"):r.removeCssClass(this.element,"ace_smooth-blinking"),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking");for(var e=this.cursors.length;e--;)this.cursors[e].style.opacity="";if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){for(var e=this.cursors.length;e--;)this.cursors[e].style.opacity=0}.bind(this),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){for(var e=this.cursors.length;e--;)this.cursors[e].style.opacity="";t()}.bind(this),this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=t.length;n--;){var i=this.getPixelPosition(t[n].cursor,!0);if((i.top>e.height+e.offset||i.top<-e.offset)&&n>1)continue;var s=(this.cursors[r++]||this.addCursor()).style;s.left=i.left+"px",s.top=i.top+"px",s.width=e.characterWidth+"px",s.height=e.lineHeight+"px"}while(this.cursors.length>r)this.removeCursor();var o=this.session.getOverwrite();this.$setOverwrite(o),this.$pixelPos=i,this.restartTimer()},this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar",this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.width=i.scrollbarWidth(e.ownerDocument),this.element.style.width=(this.width||15)+5+"px",s.addListener(this.element,"scroll",this.onScroll.bind(this))};(function(){r.implement(this,o),this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.width},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=function(e){this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}).call(u.prototype),t.ScrollBar=u}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),t.onSessionChange.call(e,e),e.on("changeSession",t.onSessionChange.bind(e)),e.on("mousedown",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function i(){n&&(r.style.cursor="",n=!1)}var t=e.textInput.getElement(),n=!1,r=e.renderer.content;u.addListener(t,"keydown",function(e){e.keyCode==18&&!(e.ctrlKey||e.shiftKey||e.metaKey)?n||(r.style.cursor="crosshair",n=!0):n&&(r.style.cursor="")}),u.addListener(t,"keyup",i),u.addListener(t,"blur",i)}var r=e("./range_list").RangeList,i=e("./range").Range,s=e("./selection").Selection,o=e("./mouse/multi_select_handler").onMouseDown,u=e("./lib/event"),a=e("./lib/lang"),f=e("./commands/multi_select_commands");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e("./search").Search,c=new l,p=e("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount==0){var n=this.toOrientedRange();if(e.intersects(n))return t||this.fromOrientedRange(e);this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._emit("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._emit("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._emit("removeRange",{ranges:e}),this.rangeCount==0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._emit("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeList.ranges.concat()},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column;else var o=t.column,u=e.column;var a=e.row<t.row;if(a)var f=e.row,l=t.row;else var f=t.row,l=e.row;o<0&&(o=0),f<0&&(f=0),f==l&&(n=!0);for(var c=f;c<=l;c++){var h=i.fromPoints(this.session.screenToDocumentPosition(c,o),this.session.screenToDocumentPosition(c,u));if(h.isEmpty()){if(p&&v(h.end,p))break;var p=h.end}h.cursor=s?h.start:h.end,r.push(h)}a&&r.reverse();if(!n){var d=r.length-1;while(r[d].isEmpty()&&d>0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.on("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeEventListener("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;t.multiSelectAction?t.multiSelectAction=="forEach"?n.forEachSelection(t,e.args):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),t.exec(n,e.args||{})):t.multiSelectAction(n,e.args||{}):(t.exec(n,e.args||{}),n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()),e.preventDefault()},this.forEachSelection=function(e,t){if(this.inVirtualSelectionMode)return;var n=this.session,r=this.selection,i=r.rangeList,o=r._eventRegistry;r._eventRegistry={};var u=new s(n);this.inVirtualSelectionMode=!0;for(var a=i.ranges.length;a--;)u.fromOrientedRange(i.ranges[a]),this.selection=n.selection=u,e.exec(this,t||{}),u.toOrientedRange(i.ranges[a]);u.detach(),this.selection=n.selection=r,this.inVirtualSelectionMode=!1,r._eventRegistry=o,r.mergeOverlappingRanges(),this.onCursorChange(),this.onSelectionChange()},this.exitMultiSelectMode=function(){if(this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getCopyText=function(){var e="";if(this.inMultiSelectMode){var t=this.multiSelect.rangeList.ranges;e=[];for(var n=0;n<t.length;n++)e.push(this.session.getTextRange(t[n]));e=e.join(this.session.getDocument().getNewLineCharacter())}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.onPaste=function(e){if(this.$readOnly)return;this._emit("paste",e);if(!this.inMultiSelectMode)return this.insert(e);var t=e.split(/\r\n|\r|\n/),n=this.selection.rangeList.ranges;if(t.length>n.length||t.length<=2||!t[1])return this.commands.exec("insertstring",this,e);for(var r=n.length;r--;){var i=n[r];i.isEmpty()||this.session.remove(i),this.session.insert(i.start,t[r])}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle,this.$search.set(t);var r=this.$search.findAll(this.session);if(!r.length)return 0;this.$blockScrolling+=1;var i=this.multiSelect;n||i.toSingleRange(r[0]);for(var s=r.length;s--;)i.addRange(r[s],!0);return this.$blockScrolling-=1,r.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}},this.selectMore=function(e,t){var n=this.session,r=n.multiSelect,i=r.toOrientedRange();if(i.isEmpty()){var i=n.getWordRange(i.start.row,i.start.column);i.cursor=i.end,this.multiSelect.addRange(i)}var s=n.getTextRange(i),o=h(n,s,e);o&&(o.cursor=e==-1?o.start:o.end,this.multiSelect.addRange(o)),t&&this.multiSelect.substractPoint(i.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges;if(!n.length){var r=this.selection.getRange(),s=r.start.row,o=r.end.row,u=this.session.doc.removeLines(s,o);u=this.$reAlignText(u),this.session.doc.insertLines(s,u),r.start.column=0,r.end.column=u[u.length-1].length,this.selection.setRange(r)}else{var f=-1,l=n.filter(function(e){if(e.cursor.row==f)return!0;f=e.cursor.row});t.$onRemoveRange(l);var c=0,h=Infinity,p=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>c&&(c=n.column),i<h&&(h=i),i});n.forEach(function(t,n){var r=t.cursor,s=c-r.column,o=p[n]-h;s>o?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=c,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e){function o(e,t){return Array(e+1).join(t)}function u(e){return e[2]?o(r," ")+e[2]+o(i-e[2].length+s," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function a(e){return e[2]?o(r+i-e[2].length," ")+e[2]+o(s," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function f(e){return e[2]?o(r," ")+e[2]+o(s," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var t=!0,n=!0,r,i,s;return e.map(function(e){var o=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return o?r==null?(r=o[1].length,i=o[2].length,s=o[3].length,o):(r+i+s!=o[1].length+o[2].length+o[3].length&&(n=!1),r!=o[1].length&&(t=!1),r>o[1].length&&(r=o[1].length),i<o[2].length&&(i=o[2].length),s>o[3].length&&(s=o[3].length),o):[e]}).map(t?n?a:u:f)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t.multiSelect||(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t.multiSelect;var n=e.oldSession;n&&(n.multiSelect&&n.multiSelect.editor==this&&(n.multiSelect.editor=null),t.multiSelect.removeEventListener("addRange",this.$onAddRange),t.multiSelect.removeEventListener("removeRange",this.$onRemoveRange),t.multiSelect.removeEventListener("multiSelect",this.$onMultiSelect),t.multiSelect.removeEventListener("singleSelect",this.$onSingleSelect)),t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m}),ace.define("ace/range_list",["require","exports","module"],function(e,t,n){var r=function(){this.ranges=[]};(function(){this.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},this.pointIndex=function(e,t){var n=this.ranges;for(var r=t||0;r<n.length;r++){var i=n[r],s=this.comparePoints(e,i.end);if(s>0)continue;return s==0?r:(s=this.comparePoints(e,i.start),s>=0?r:-r-1)}return-r-1},this.add=function(e){var t=this.pointIndex(e.start);t<0&&(t=-t-1);var n=this.pointIndex(e.end,t);return n<0?n=-n-1:n++,this.ranges.splice(t,n-t,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.call(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges,n=t[0],r;for(var i=1;i<t.length;i++){r=n,n=t[i];var s=this.comparePoints(r.end,n.start);if(s<0)continue;if(s==0&&!r.isEmpty()&&!n.isEmpty())continue;this.comparePoints(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(i,1),e.push(n),n=r,i--}return e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on("change",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener("change",this.onChange),this.session=null},this.$onChange=function(e){var t=e.data.range;if(e.data.action[0]=="i")var n=t.start,r=t.end;else var r=t.start,n=t.end;var i=n.row,s=r.row,o=s-i,u=-n.column+r.column,a=this.ranges;for(var f=0,l=a.length;f<l;f++){var c=a[f];if(c.end.row<i)continue;if(c.start.row>i)break;c.start.row==i&&c.start.column>=n.column&&(c.start.column+=u,c.start.row+=o),c.end.row==i&&c.end.column>=n.column&&(c.end.column+=u,c.end.row+=o)}if(o!=0&&f<l)for(;f<l;f++){var c=a[f];c.start.row+=o,c.end.row+=o}}}).call(r.prototype),t.RangeList=r}),ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event"],function(e,t,n){function i(e,t){return e.row==t.row&&e.column==t.column}function s(e){var t=e.domEvent,n=t.altKey,s=t.shiftKey,o=e.getAccelKey(),u=e.getButton();if(e.editor.inMultiSelectMode&&u==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!o&&!n){u==0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}var a=e.editor,f=a.selection,l=a.inMultiSelectMode,c=e.getDocumentPosition(),h=f.getCursor(),p=e.inSelection()||f.isEmpty()&&i(c,h),d=e.x,v=e.y,m=function(e){d=e.clientX,v=e.clientY},g=function(){var e=a.renderer.pixelToScreenCoordinates(d,v),t=y.screenToDocumentPosition(e.row,e.column);if(i(w,e)&&i(t,f.selectionLead))return;w=e,a.selection.moveCursorToPosition(t),a.selection.clearSelection(),a.renderer.scrollCursorIntoView(),a.removeSelectionMarkers(x),x=f.rectangularRangeBlock(w,b),x.forEach(a.addSelectionMarker,a),a.updateSelectionMarkers()},y=a.session,b=a.renderer.pixelToScreenCoordinates(d,v),w=b;if(o&&!s&&!n&&u==0){if(!l&&p)return;if(!l){var E=f.toOrientedRange();a.addSelectionMarker(E)}var S=f.rangeList.rangeAtPoint(c);r.capture(a.container,function(){},function(){var e=f.toOrientedRange();S&&e.isEmpty()&&i(S.cursor,e.cursor)?f.substractPoint(e.cursor):(E&&(a.removeSelectionMarker(E),f.addRange(E)),f.addRange(e))})}else if(!s&&n&&u==0){e.stop(),l&&!o?f.toSingleRange():!l&&o&&f.addRange(),f.moveCursorToPosition(c),f.clearSelection();var x=[],T=function(e){clearInterval(C),a.removeSelectionMarkers(x);for(var t=0;t<x.length;t++)f.addRange(x[t])},N=g;r.capture(a.container,m,T);var C=setInterval(function(){N()},20);return e.preventDefault()}}var r=e("../lib/event");t.onMouseDown=s}),ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"],function(e,t,n){t.defaultCommands=[{name:"addCursorAbove",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:"Ctrl-Alt-Up",mac:"Ctrl-Alt-Up"},readonly:!0},{name:"addCursorBelow",exec:function(e){e.selectMoreLines(1)},bindKey:{win:"Ctrl-Alt-Down",mac:"Ctrl-Alt-Down"},readonly:!0},{name:"addCursorAboveSkipCurrent",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Up",mac:"Ctrl-Alt-Shift-Up"},readonly:!0},{name:"addCursorBelowSkipCurrent",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Down",mac:"Ctrl-Alt-Shift-Down"},readonly:!0},{name:"selectMoreBefore",exec:function(e){e.selectMore(-1)},bindKey:{win:"Ctrl-Alt-Left",mac:"Ctrl-Alt-Left"},readonly:!0},{name:"selectMoreAfter",exec:function(e){e.selectMore(1)},bindKey:{win:"Ctrl-Alt-Right",mac:"Ctrl-Alt-Right"},readonly:!0},{name:"selectNextBefore",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Left",mac:"Ctrl-Alt-Shift-Left"},readonly:!0},{name:"selectNextAfter",exec:function(e){e.selectMore(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Right",mac:"Ctrl-Alt-Shift-Right"},readonly:!0},{name:"splitIntoLines",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Alt-L",mac:"Ctrl-Alt-L"},readonly:!0},{name:"alignCursors",exec:function(e){e.alignCursors()},bindKey:{win:"Ctrl-Alt-A",mac:"Ctrl-Alt-A"}}],t.multiSelectCommands=[{name:"singleSelection",bindKey:"esc",exec:function(e){e.exitMultiSelectMode()},readonly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e("../keyboard/hash_handler").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/config"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/event_emitter").EventEmitter,s=e("../config"),o=function(t,n,r){this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),this.onError=this.onError.bind(this);var i;if(s.get("packaged"))i=s.moduleUrl(n,"worker");else{var o=this.$normalizePath;typeof e.supports!="undefined"&&e.supports.indexOf("ucjs2-pinf-0")>=0?i=e.nameToUrl("ace/worker/worker_sourcemint"):(e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),i=o(e.toUrl("ace/worker/worker",null,"_")));var u={};t.forEach(function(t){u[t]=o(e.toUrl(t,null,"_").replace(/.js(\?.*)?$/,""))})}this.$worker=new Worker(i),this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onerror=this.onError,this.$worker.onmessage=this.onMessage};(function(){r.implement(this,i),this.onError=function(e){throw window.console&&console.log&&console.log(e),e},this.onMessage=function(e){var t=e.data;switch(t.type){case"log":window.console&&console.log&&console.log.apply(console,t.data);break;case"event":this._emit(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id])}},this.$normalizePath=function(e){return location.host?(e=e.replace(/^[a-z]+:\/\/[^\/]+/,""),e=location.protocol+"//"+location.host+(e.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+e.replace(/^[\/]+/,""),e):e},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){e.range={start:e.data.range.start,end:e.data.range.end},this.emit("change",e)}}).call(o.prototype);var u=function(t,n,r){this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var s=null,o=Object.create(i),u=this;this.$worker={},this.$worker.postMessage=function(e){u.messageBuffer.push(e),s&&setTimeout(a)};var a=function(){var e=u.messageBuffer.shift();e.command?s[e.command].apply(s,e.args):e.event&&o._emit(e.event,e.data)};o.postMessage=function(e){u.onMessage({data:e})},o.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},o.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},e([n],function(e){s=new e[r](o);while(u.messageBuffer.length)a()})};u.prototype=o.prototype,t.UIWorkerClient=u,t.WorkerClient=o}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session,i=this.$pos;this.pos=t.createAnchor(i.row,i.column),this.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.pos.on("change",function(t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new r(t.value.row,t.value.column,t.value.row,t.value.column+e.length),e.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1),n.on("change",function(i){e.removeMarker(n.markerId),n.markerId=e.addMarker(new r(i.value.row,i.value.column,i.value.row,i.value.column+t.length),t.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){var t=e.data,n=t.range;if(n.start.row!==n.end.row)return;if(n.start.row!==this.pos.row)return;if(this.$updating)return;this.$updating=!0;var i=t.action==="insertText"?n.end.column-n.start.column:n.start.column-n.end.column;if(n.start.column>=this.pos.column&&n.start.column<=this.pos.column+this.length+1){var s=n.start.column-this.pos.column;this.length+=i;if(!this.session.$fromUndo){if(t.action==="insertText")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column<u.column&&(a.column+=i),this.doc.insert(a,t.text)}else if(t.action==="removeText")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column<u.column&&(a.column+=i),this.doc.remove(new r(a.row,a.column,a.row,a.column-i))}n.start.column===this.pos.column&&t.action==="insertText"?setTimeout(function(){this.pos.setPosition(this.pos.row,this.pos.column-i);for(var e=0;e<this.others.length;e++){var t=this.others[e],r={row:t.row,column:t.column-i};t.row===n.start.row&&n.start.column<t.column&&(r.column+=i),t.setPosition(r.row,r.column)}}.bind(this),0):n.start.column===this.pos.column&&t.action==="removeText"&&setTimeout(function(){for(var e=0;e<this.others.length;e++){var t=this.others[e];t.row===n.start.row&&n.start.column<t.column&&t.setPosition(t.row,t.column-i)}}.bind(this),0)}this.pos._emit("change",{value:this.pos});for(var o=0;o<this.others.length;o++)this.others[o]._emit("change",{value:this.others[o]})}this.$updating=!1},this.onCursorChange=function(e){if(this.$updating)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var e=0;e<this.others.length;e++)this.others[e].detach();this.session.setUndoSelect(!0)},this.cancel=function(){if(this.$undoStackDepth===-1)throw Error("Canceling placeholders only supported with undo manager attached to session.");var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(!0)}}).call(o.prototype),t.PlaceHolder=o}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=this.getFoldWidget(e,u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}); + (function() { + ace.require(["ace/ace"], function(a) { + a && a.config.init(); + if (!window.ace) + window.ace = {}; + for (var key in a) if (a.hasOwnProperty(key)) + ace[key] = a[key]; + }); + })(); + \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/ext-static_highlight.js b/ehcp/net2ftp/plugins/ace/ext-static_highlight.js new file mode 100644 index 0000000..b154ef2 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/ext-static_highlight.js @@ -0,0 +1 @@ +ace.define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text"],function(e,t,n){var r=e("../edit_session").EditSession,i=e("../layer/text").Text,s=".ace_editor {font-family: 'Monaco', 'Menlo', 'Droid Sans Mono', 'Courier New', monospace;font-size: 12px;}.ace_editor .ace_gutter { width: 25px !important;display: block;float: left;text-align: right; padding: 0 3px 0 0; margin-right: 3px;}.ace_line { clear: both; }*.ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;}";t.render=function(e,t,n,o,u){o=parseInt(o||1,10);var a=new r("");a.setMode(t),a.setUseWorker(!1);var f=new i(document.createElement("div"));f.setSession(a),f.config={characterWidth:10,lineHeight:20},a.setValue(e);var l=[],c=a.getLength();for(var h=0;h<c;h++)l.push("<div class='ace_line'>"),u||l.push("<span class='ace_gutter ace_gutter-cell' unselectable='on'>"+(h+o)+"</span>"),f.$renderLine(l,h,!0,!1),l.push("</div>");var p="<div class=':cssClass'> <div class='ace_editor ace_scroller ace_text-layer'> :code </div> </div>".replace(/:cssClass/,n.cssClass).replace(/:code/,l.join(""));return f.destroy(),{css:s+n.cssText,html:p}}}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/ext-textarea.js b/ehcp/net2ftp/plugins/ace/ext-textarea.js new file mode 100644 index 0000000..0f86aab --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/ext-textarea.js @@ -0,0 +1 @@ +ace.define("ace/ext/textarea",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/net","ace/ace","ace/theme/textmate","ace/mode/text"],function(e,t,n){function a(e,t){for(var n in t)e.style[n]=t[n]}function f(e,t){if(e.type!="textarea")throw"Textarea required!";var n=e.parentNode,i=document.createElement("div"),s=function(){var t="position:relative;";["margin-top","margin-left","margin-right","margin-bottom"].forEach(function(n){t+=n+":"+u(e,i,n)+";"});var n=u(e,i,"width")||e.clientWidth+"px",r=u(e,i,"height")||e.clientHeight+"px";t+="height:"+r+";width:"+n+";",t+="display:inline-block;",i.setAttribute("style",t)};r.addListener(window,"resize",s),s(),e.nextSibling?n.insertBefore(i,e.nextSibling):n.appendChild(i);while(n!==document){if(n.tagName.toUpperCase()==="FORM"){var o=n.onsubmit;n.onsubmit=function(n){e.innerHTML=t(),e.value=t(),o&&o.call(this,n)};break}n=n.parentNode}return i}function l(t,n,r){s.loadScript(t,function(){e([n],r)})}function c(n,r,i,s,o,u){function c(e){return e=="true"}var a=n.getSession(),f=n.renderer;u=u||l,n.setDisplaySettings=function(e){e==null&&(e=i.style.display=="none"),i.style.display=e?"block":"none"},n.setOption=function(t,i){if(o[t]==i)return;switch(t){case"gutter":f.setShowGutter(c(i));break;case"mode":i!="text"?u("mode-"+i+".js","ace/mode/"+i,function(){var t=e("../mode/"+i).Mode;a.setMode(new t)}):a.setMode(new(e("../mode/text").Mode));break;case"theme":i!="textmate"?u("theme-"+i+".js","ace/theme/"+i,function(){n.setTheme("ace/theme/"+i)}):n.setTheme("ace/theme/textmate");break;case"fontSize":r.style.fontSize=i;break;case"softWrap":switch(i){case"off":a.setUseWrapMode(!1),f.setPrintMarginColumn(80);break;case"40":a.setUseWrapMode(!0),a.setWrapLimitRange(40,40),f.setPrintMarginColumn(40);break;case"80":a.setUseWrapMode(!0),a.setWrapLimitRange(80,80),f.setPrintMarginColumn(80);break;case"free":a.setUseWrapMode(!0),a.setWrapLimitRange(null,null),f.setPrintMarginColumn(80)}break;case"useSoftTabs":a.setUseSoftTabs(c(i));break;case"showPrintMargin":f.setShowPrintMargin(c(i));break;case"showInvisibles":n.setShowInvisibles(c(i))}o[t]=i},n.getOption=function(e){return o[e]},n.getOptions=function(){return o};for(var h in t.options)n.setOption(h,t.options[h]);return n}function h(e,t,n,i){function f(e,t,n,r){e.push("<select title='"+t+"'>");for(var i in n)e.push("<option value='"+i+"' "),r==i&&e.push(" selected "),e.push(">",n[i],"</option>");e.push("</select>")}var s={"true":!0,"false":!1},o={mode:"Mode:",gutter:"Display Gutter:",theme:"Theme:",fontSize:"Font Size:",softWrap:"Soft Wrap:",showPrintMargin:"Show Print Margin:",useSoftTabs:"Use Soft Tabs:",showInvisibles:"Show Invisibles"},u={mode:{text:"Plain",javascript:"JavaScript",xml:"XML",html:"HTML",css:"CSS",scss:"SCSS",python:"Python",php:"PHP",java:"Java",ruby:"Ruby",c_cpp:"C/C++",coffee:"CoffeeScript",json:"json",perl:"Perl",clojure:"Clojure",ocaml:"OCaml",csharp:"C#",haxe:"haXe",svg:"SVG",textile:"Textile",groovy:"Groovy",liquid:"Liquid",Scala:"Scala"},theme:{clouds:"Clouds",clouds_midnight:"Clouds Midnight",cobalt:"Cobalt",crimson_editor:"Crimson Editor",dawn:"Dawn",eclipse:"Eclipse",idle_fingers:"Idle Fingers",kr_theme:"Kr Theme",merbivore:"Merbivore",merbivore_soft:"Merbivore Soft",mono_industrial:"Mono Industrial",monokai:"Monokai",pastel_on_dark:"Pastel On Dark",solarized_dark:"Solarized Dark",solarized_light:"Solarized Light",textmate:"Textmate",twilight:"Twilight",vibrant_ink:"Vibrant Ink"},gutter:s,fontSize:{"10px":"10px","11px":"11px","12px":"12px","14px":"14px","16px":"16px"},softWrap:{off:"Off",40:"40",80:"80",free:"Free"},showPrintMargin:s,useSoftTabs:s,showInvisibles:s},a=[];a.push("<table><tr><th>Setting</th><th>Value</th></tr>");for(var l in i)a.push("<tr><td>",o[l],"</td>"),a.push("<td>"),f(a,l,u[l],i[l]),a.push("</td></tr>");a.push("</table>"),e.innerHTML=a.join("");var c=e.getElementsByTagName("select");for(var h=0;h<c.length;h++){var p=function(){var e=c[h];return function(){var t=e.title,r=e.value;n.setOption(t,r)}}();c[h].onchange=p}var d=document.createElement("input");d.type="button",d.value="Hide",r.addListener(d,"click",function(){n.setDisplaySettings(!1)}),e.appendChild(d)}var r=e("../lib/event"),i=e("../lib/useragent"),s=e("../lib/net"),o=e("../ace");e("../theme/textmate"),n.exports=t=o;var u=function(e,t,n){var r=e.style[n];r||(window.getComputedStyle?r=window.getComputedStyle(e,"").getPropertyValue(n):r=e.currentStyle[n]);if(!r||r=="auto"||r=="intrinsic")r=t.style[n];return r};t.transformTextarea=function(e,t){var n,s=f(e,function(){return n.getValue()});e.style.display="none",s.style.background="white";var u=document.createElement("div");a(u,{top:"0px",left:"0px",right:"0px",bottom:"0px",border:"1px solid gray"}),s.appendChild(u);var l=document.createElement("div");a(l,{position:"absolute",right:"0px",bottom:"0px",background:"red",cursor:"nw-resize",borderStyle:"solid",borderWidth:"9px 8px 10px 9px",width:"2px",borderColor:"lightblue gray gray lightblue",zIndex:101});var p=document.createElement("div"),d={top:"0px",left:"0px",right:"0px",bottom:"0px",position:"absolute",padding:"5px",zIndex:100,color:"white",display:"none",overflow:"auto",fontSize:"14px"};i.isOldIE?d.backgroundColor="#333":d.backgroundColor="rgba(0, 0, 0, 0.6)",a(p,d),s.appendChild(p);var v={},m=o.edit(u);n=m.getSession(),n.setValue(e.value||e.innerHTML),m.focus(),u.appendChild(l),c(m,u,p,o,v,t),h(p,l,m,v);var g="";return r.addListener(l,"mousemove",function(e){var t=this.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n+r<(t.width+t.height)/2?(this.style.cursor="pointer",g="toggle"):(g="resize",this.style.cursor="nw-resize")}),r.addListener(l,"mousedown",function(e){if(g=="toggle"){m.setDisplaySettings();return}s.style.zIndex=1e5;var t=s.getBoundingClientRect(),n=t.width+t.left-e.clientX,i=t.height+t.top-e.clientY;r.capture(l,function(e){s.style.width=e.clientX-t.left+n+"px",s.style.height=e.clientY-t.top+i+"px",m.resize()},function(){})}),m},t.options={mode:"text",theme:"textmate",gutter:"false",fontSize:"12px",softWrap:"off",showPrintMargin:"false",useSoftTabs:"true",showInvisibles:"true"}}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm .ace_scroller {background-color: #FFFFFF;}.ace-tm .ace_cursor {border-left: 2px solid black;}.ace-tm .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_markup.ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_markup.ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/keybinding-emacs.js b/ehcp/net2ftp/plugins/ace/keybinding-emacs.js new file mode 100644 index 0000000..819655d --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/keybinding-emacs.js @@ -0,0 +1 @@ +ace.define("ace/keyboard/emacs",["require","exports","module","ace/lib/dom","ace/keyboard/hash_handler","ace/lib/keys"],function(e,t,n){var r=e("../lib/dom"),i=function(e,t){var n=this.scroller.getBoundingClientRect(),i=Math.floor((e+this.scrollLeft-n.left-this.$padding-r.getPageScrollLeft())/this.characterWidth),s=Math.floor((t+this.scrollTop-n.top-r.getPageScrollTop())/this.lineHeight);return this.session.screenToDocumentPosition(s,i)},s=e("./hash_handler").HashHandler;t.handler=new s;var o=!1;t.handler.attach=function(e){o||(o=!0,r.importCssString(" .emacs-mode .ace_cursor{ border: 2px rgba(50,250,50,0.8) solid!important; -moz-box-sizing: border-box!important; -webkit-box-sizing: border-box!important; box-sizing: border-box!important; background-color: rgba(0,250,0,0.9); opacity: 0.5; } .emacs-mode .ace_cursor.ace_hidden{ opacity: 1; background-color: transparent; } .emacs-mode .ace_overwrite-cursors .ace_cursor { opacity: 1; background-color: transparent; border-width: 0 0 2px 2px !important; } .emacs-mode .ace_text-layer { z-index: 4 } .emacs-mode .ace_cursor-layer { z-index: 2 }","emacsMode")),e.renderer.screenToTextCoordinates=i,e.setStyle("emacs-mode")},t.handler.detach=function(e){delete e.renderer.screenToTextCoordinates,e.unsetStyle("emacs-mode")};var u=e("../lib/keys").KEY_MODS,a={C:"ctrl",S:"shift",M:"alt"};["S-C-M","S-C","S-M","C-M","S","C","M"].forEach(function(e){var t=0;e.split("-").forEach(function(e){t|=u[a[e]]}),a[t]=e.toLowerCase()+"-"}),t.handler.bindKey=function(e,t){if(!e)return;var n=this.commmandKeyBinding;e.split("|").forEach(function(e){e=e.toLowerCase(),n[e]=t,e=e.split(" ")[0],n[e]||(n[e]="null")},this)},t.handler.handleKeyboard=function(e,t,n,r){if(t==-1&&e.count){var i=Array(e.count+1).join(n);return e.count=null,{command:"insertstring",args:i}}if(n=="\0")return;var s=a[t];if(s=="c-"||e.universalArgument){var o=parseInt(n[n.length-1]);if(o)return e.count=o,{command:"null"}}e.universalArgument=!1,s&&(n=s+n),e.keyChain&&(n=e.keyChain+=" "+n);var u=this.commmandKeyBinding[n];e.keyChain=u=="null"?n:"";if(!u)return;if(u=="null")return{command:"null"};if(u=="universalArgument")return e.universalArgument=!0,{command:"null"};if(typeof u!="string"){var f=u.args;u=u.command}typeof u=="string"&&(u=this.commands[u]||e.editor.commands.commands[u]),!u.readonly&&!u.isYank&&(e.lastCommand=null);if(e.count){var o=e.count;return e.count=0,{args:f,command:{exec:function(e,t){for(var n=0;n<o;n++)u.exec(e,t)}}}}return{command:u,args:f}},t.emacsKeys={"Up|C-p":"golineup","Down|C-n":"golinedown","Left|C-b":"gotoleft","Right|C-f":"gotoright","C-Left|M-b":"gotowordleft","C-Right|M-f":"gotowordright","Home|C-a":"gotolinestart","End|C-e":"gotolineend","C-Home|S-M-,":"gotostart","C-End|S-M-.":"gotoend","S-Up|S-C-p":"selectup","S-Down|S-C-n":"selectdown","S-Left|S-C-b":"selectleft","S-Right|S-C-f":"selectright","S-C-Left|S-M-b":"selectwordleft","S-C-Right|S-M-f":"selectwordright","S-Home|S-C-a":"selecttolinestart","S-End|S-C-e":"selecttolineend","S-C-Home":"selecttostart","S-C-End":"selecttoend","C-l":"recenterTopBottom","M-s":"centerselection","M-g":"gotoline","C-x C-p":"selectall","C-Down":"gotopagedown","C-Up":"gotopageup","PageDown|C-v":"gotopagedown","PageUp|M-v":"gotopageup","S-C-Down":"selectpagedown","S-C-Up":"selectpageup","C-s":"findnext","C-r":"findprevious","M-C-s":"findnext","M-C-r":"findprevious","S-M-5":"replace",Backspace:"backspace","Delete|C-d":"del","Return|C-m":{command:"insertstring",args:"\n"},"C-o":"splitline","M-d|C-Delete":{command:"killWord",args:"right"},"C-Backspace|M-Backspace|M-Delete":{command:"killWord",args:"left"},"C-k":"killLine","C-y|S-Delete":"yank","M-y":"yankRotate","C-g":"keyboardQuit","C-w":"killRegion","M-w":"killRingSave","C-Space":"setMark","C-x C-x":"exchangePointAndMark","C-t":"transposeletters","M-u":"touppercase","M-l":"tolowercase","M-/":"autocomplete","C-u":"universalArgument","M-;":"togglecomment","C-/|C-x u|S-C--|C-z":"undo","S-C-/|S-C-x u|C--|S-C-z":"redo","C-x r":"selectRectangularRegion"},t.handler.bindKeys(t.emacsKeys),t.handler.addCommands({recenterTopBottom:function(e){var t=e.renderer,n=t.$cursorLayer.getPixelPosition(),r=t.$size.scrollerHeight-t.lineHeight,i=t.scrollTop;Math.abs(n.top-i)<2?i=n.top-r:Math.abs(n.top-i-r*.5)<2?i=n.top:i=n.top-r*.5,e.session.setScrollTop(i)},selectRectangularRegion:function(e){e.multiSelect.toggleBlockSelection()},setMark:function(){},exchangePointAndMark:{exec:function(e){var t=e.selection.getRange();e.selection.setSelectionRange(t,!e.selection.isBackwards())},readonly:!0,multiselectAction:"forEach"},killWord:{exec:function(e,n){e.clearSelection(),n=="left"?e.selection.selectWordLeft():e.selection.selectWordRight();var r=e.getSelectionRange(),i=e.session.getTextRange(r);t.killRing.add(i),e.session.remove(r),e.clearSelection()},multiselectAction:"forEach"},killLine:function(e){e.selection.selectLine();var n=e.getSelectionRange(),r=e.session.getTextRange(n);t.killRing.add(r),e.session.remove(n),e.clearSelection()},yank:function(e){e.onPaste(t.killRing.get()),e.keyBinding.$data.lastCommand="yank"},yankRotate:function(e){if(e.keyBinding.$data.lastCommand!="yank")return;e.undo(),e.onPaste(t.killRing.rotate()),e.keyBinding.$data.lastCommand="yank"},killRegion:function(e){t.killRing.add(e.getCopyText()),e.commands.byName.cut.exec(e)},killRingSave:function(e){t.killRing.add(e.getCopyText())}});var f=t.handler.commands;f.yank.isYank=!0,f.yankRotate.isYank=!0,t.killRing={$data:[],add:function(e){e&&this.$data.push(e),this.$data.length>30&&this.$data.shift()},get:function(){return this.$data[this.$data.length-1]||""},pop:function(){return this.$data.length>1&&this.$data.pop(),this.get()},rotate:function(){return this.$data.unshift(this.$data.pop()),this.get()}}}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/keybinding-vim.js b/ehcp/net2ftp/plugins/ace/keybinding-vim.js new file mode 100644 index 0000000..74bfe68 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/keybinding-vim.js @@ -0,0 +1 @@ +ace.define("ace/keyboard/vim",["require","exports","module","ace/keyboard/vim/commands","ace/keyboard/vim/maps/util","ace/lib/useragent"],function(e,t,n){var r=e("./vim/commands"),i=r.coreCommands,s=e("./vim/maps/util"),o=e("../lib/useragent"),u={i:{command:i.start},I:{command:i.startBeginning},a:{command:i.append},A:{command:i.appendEnd},"ctrl-f":{command:"gotopagedown"},"ctrl-b":{command:"gotopageup"}};t.handler={handleMacRepeat:function(e,t,n){if(t==-1)e.inputChar=n,e.lastEvent="input";else if(e.inputChar&&e.$lastHash==t&&e.$lastKey==n){if(e.lastEvent=="input")e.lastEvent="input1";else if(e.lastEvent=="input1")return!0}else e.$lastHash=t,e.$lastKey=n,e.lastEvent="keypress"},handleKeyboard:function(e,t,n,s,a){if(t!=0&&(n==""||n=="\0"))return null;t==1&&(n="ctrl-"+n);if(n=="esc"&&t==0||n=="ctrl-[")return{command:i.stop};if(e.state=="start"){o.isMac&&this.handleMacRepeat(e,t,n)&&(t=-1,n=e.inputChar);if(t==-1||t==1)return r.inputBuffer.idle&&u[n]?u[n]:{command:{exec:function(e){r.inputBuffer.push(e,n)}}};if(n.length==1&&(t==0||t==4))return{command:"null",passEvent:!0};if(n=="esc"&&t==0)return{command:i.stop}}else if(n=="ctrl-w")return{command:"removewordleft"}},attach:function(e){e.on("click",t.onCursorMove),s.currentMode!=="insert"&&r.coreCommands.stop.exec(e),e.$vimModeHandler=this},detach:function(e){e.removeListener("click",t.onCursorMove),s.noMode(e),s.currentMode="normal"},actions:r.actions,getStatusText:function(){return s.currentMode=="insert"?"INSERT":s.onVisualMode?(s.onVisualLineMode?"VISUAL LINE ":"VISUAL ")+r.inputBuffer.status:r.inputBuffer.status}},t.onCursorMove=function(e){r.onCursorMove(e.editor,e),t.onCursorMove.scheduled=!1}}),ace.define("ace/keyboard/vim/commands",["require","exports","module","ace/keyboard/vim/maps/util","ace/keyboard/vim/maps/motions","ace/keyboard/vim/maps/operators","ace/keyboard/vim/maps/aliases","ace/keyboard/vim/registers"],function(e,t,n){"never use strict";function g(e){m.previous={action:{action:{fn:e}}}}var r=e("./maps/util"),i=e("./maps/motions"),s=e("./maps/operators"),o=e("./maps/aliases"),u=e("./registers"),a=1,f=2,l=3,c=4,h=8,p=function(t,n,r){while(0<n--)t.apply(this,r)},d=function(e){var t=e.renderer,n=t.$cursorLayer.getPixelPosition(),r=n.top,i=h*t.layerConfig.lineHeight;2*i>t.$size.scrollerHeight&&(i=t.$size.scrollerHeight/2),t.scrollTop>r-i&&t.session.setScrollTop(r-i),t.scrollTop+t.$size.scrollerHeight<r+i+t.lineHeight&&t.session.setScrollTop(r+i+t.lineHeight-t.$size.scrollerHeight)},v=t.actions={z:{param:!0,fn:function(e,t,n,r){switch(r){case"z":e.renderer.alignCursor(null,.5);break;case"t":e.renderer.alignCursor(null,0);break;case"b":e.renderer.alignCursor(null,1)}}},r:{param:!0,fn:function(e,t,n,r){r&&r.length&&(p(function(){e.insert(r)},n||1),e.navigateLeft())}},R:{fn:function(e,t,n,i){r.insertMode(e),e.setOverwrite(!0)}},"~":{fn:function(e,t,n){p(function(){var t=e.selection.getRange();t.isEmpty()&&t.end.column++;var n=e.session.getTextRange(t),r=n.toUpperCase();r==n?e.navigateRight():e.session.replace(t,r)},n||1)}},"*":{fn:function(e,t,n,r){e.selection.selectWord(),e.findNext(),d(e);var i=e.selection.getRange();e.selection.setSelectionRange(i,!0)}},"#":{fn:function(e,t,n,r){e.selection.selectWord(),e.findPrevious(),d(e);var i=e.selection.getRange();e.selection.setSelectionRange(i,!0)}},n:{fn:function(e,t,n,r){var i=e.getLastSearchOptions();i.backwards=!1,e.selection.moveCursorRight(),e.selection.clearSelection(),e.findNext(i),d(e);var s=e.selection.getRange();s.end.row=s.start.row,s.end.column=s.start.column,e.selection.setSelectionRange(s,!0)}},N:{fn:function(e,t,n,r){var i=e.getLastSearchOptions();i.backwards=!0,e.findPrevious(i),d(e);var s=e.selection.getRange();s.end.row=s.start.row,s.end.column=s.start.column,e.selection.setSelectionRange(s,!0)}},v:{fn:function(e,t,n,i){e.selection.selectRight(),r.visualMode(e,!1)},acceptsMotion:!0},V:{fn:function(e,t,n,i){var s=e.getCursorPosition().row;e.selection.clearSelection(),e.selection.moveCursorTo(s,0),e.selection.selectLineEnd(),e.selection.visualLineStart=s,r.visualMode(e,!0)},acceptsMotion:!0},Y:{fn:function(e,t,n,i){r.copyLine(e)}},p:{fn:function(e,t,n,r){var i=u._default;e.setOverwrite(!1);if(i.isLine){var s=e.getCursorPosition(),o=i.text.split("\n");e.session.getDocument().insertLines(s.row+1,o),e.moveCursorTo(s.row+1,0)}else e.navigateRight(),e.insert(i.text),e.navigateLeft();e.setOverwrite(!0),e.selection.clearSelection()}},P:{fn:function(e,t,n,r){var i=u._default;e.setOverwrite(!1);if(i.isLine){var s=e.getCursorPosition(),o=i.text.split("\n");e.session.getDocument().insertLines(s.row,o),e.moveCursorTo(s.row,0)}else e.insert(i.text);e.setOverwrite(!0),e.selection.clearSelection()}},J:{fn:function(e,t,n,r){var i=e.session;t=e.getSelectionRange();var s={row:t.start.row,column:t.start.column};n=n||t.end.row-t.start.row;var o=Math.min(s.row+(n||1),i.getLength()-1);t.start.column=i.getLine(s.row).length,t.end.column=i.getLine(o).length,t.end.row=o;var u="";for(var a=s.row;a<o;a++){var f=i.getLine(a+1);u+=" "+/^\s*(.*)$/.exec(f)[1]||""}i.replace(t,u),e.moveCursorTo(s.row,s.column)}},u:{fn:function(e,t,n,r){n=parseInt(n||1,10);for(var i=0;i<n;i++)e.undo();e.selection.clearSelection()}},"ctrl-r":{fn:function(e,t,n,r){n=parseInt(n||1,10);for(var i=0;i<n;i++)e.redo();e.selection.clearSelection()}},":":{fn:function(e,t,n,r){}},"/":{fn:function(e,t,n,r){}},"?":{fn:function(e,t,n,r){}},".":{fn:function(e,t,n,i){r.onInsertReplaySequence=m.lastInsertCommands;var s=m.previous;s&&m.exec(e,s.action,s.param)}}},m=t.inputBuffer={accepting:[a,f,l,c],currentCmd:null,currentCount:"",status:"",operator:null,motion:null,lastInsertCommands:[],push:function(e,t,n){this.idle=!1;var r=this.waitingForParam;if(r)this.exec(e,r,t);else if(t==="0"&&!this.currentCount.length||!t.match(/^\d+$/)||!this.isAccepting(a))if(!this.operator&&this.isAccepting(f)&&s[t])this.operator={ch:t,count:this.getCount()},this.currentCmd=f,this.accepting=[a,l,c],this.exec(e,{operator:this.operator});else if(i[t]&&this.isAccepting(l)){this.currentCmd=l;var u={operator:this.operator,motion:{ch:t,count:this.getCount()}};i[t].param?this.waitForParam(u):this.exec(e,u)}else if(o[t]&&this.isAccepting(l))o[t].operator.count=this.getCount(),this.exec(e,o[t]);else if(v[t]&&this.isAccepting(c)){var h={action:{fn:v[t].fn,count:this.getCount()}};v[t].param?this.waitForParam(h):this.exec(e,h),v[t].acceptsMotion&&(this.idle=!1)}else this.operator?this.exec(e,{operator:this.operator},t):this.reset();else this.currentCount+=t,this.currentCmd=a,this.accepting=[a,f,l,c];if(this.waitingForParam||this.motion||this.operator)this.status+=t;else if(this.currentCount)this.status=this.currentCount;else{if(!this.status)return;this.status=""}e._emit("changeStatus")},waitForParam:function(e){this.waitingForParam=e},getCount:function(){var e=this.currentCount;return this.currentCount="",e&&parseInt(e,10)},exec:function(e,t,n){var o=t.motion,u=t.operator,a=t.action;n||(n=t.param),u&&(this.previous={action:t,param:n});if(u&&!e.selection.isEmpty()){s[u.ch].selFn&&(s[u.ch].selFn(e,e.getSelectionRange(),u.count,n),this.reset());return}if(!o&&!a&&u&&n)s[u.ch].fn(e,null,u.count,n),this.reset();else if(o){var f=function(t){t&&typeof t=="function"&&(o.count&&!l.handlesCount?p(t,o.count,[e,null,o.count,n]):t(e,null,o.count,n))},l=i[o.ch],c=l.sel;u?c&&p(function(){f(l.sel),s[u.ch].fn(e,e.getSelectionRange(),u.count,n)},u.count||1):(r.onVisualMode||r.onVisualLineMode)&&c?f(l.sel):f(l.nav),this.reset()}else a&&(a.fn(e,e.getSelectionRange(),a.count,n),this.reset());y(e)},isAccepting:function(e){return this.accepting.indexOf(e)!==-1},reset:function(){this.operator=null,this.motion=null,this.currentCount="",this.status="",this.accepting=[a,f,l,c],this.idle=!0,this.waitingForParam=null}};t.coreCommands={start:{exec:function b(e){r.insertMode(e),g(b)}},startBeginning:{exec:function w(e){e.navigateLineStart(),r.insertMode(e),g(w)}},stop:{exec:function(t){m.reset(),r.onVisualMode=!1,r.onVisualLineMode=!1,m.lastInsertCommands=r.normalMode(t)}},append:{exec:function E(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row).length;n&&e.navigateRight(),r.insertMode(e),g(E)}},appendEnd:{exec:function S(e){e.navigateLineEnd(),r.insertMode(e),g(S)}}};var y=t.onCursorMove=function(e,t){if(r.currentMode==="insert"||y.running)return;if(!e.selection.isEmpty()){y.running=!0;if(r.onVisualLineMode){var n=e.selection.visualLineStart,i=e.getCursorPosition().row;if(n<=i){var s=e.session.getLine(i);e.selection.clearSelection(),e.selection.moveCursorTo(n,0),e.selection.selectTo(i,s.length)}else{var s=e.session.getLine(n);e.selection.clearSelection(),e.selection.moveCursorTo(n,s.length),e.selection.selectTo(i,0)}}y.running=!1;return}t&&(r.onVisualLineMode||r.onVisualMode)&&(e.selection.clearSelection(),r.normalMode(e)),y.running=!0;var o=e.getCursorPosition(),u=e.session.getLine(o.row).length;u&&o.column===u&&e.navigateLeft(),y.running=!1}}),ace.define("ace/keyboard/vim/maps/util",["require","exports","module","ace/keyboard/vim/registers","ace/lib/dom"],function(e,t,n){var r=e("../registers"),i=e("../../../lib/dom");i.importCssString(".insert-mode .ace_cursor{ border-left: 2px solid #333333;}.ace_dark.insert-mode .ace_cursor{ border-left: 2px solid #eeeeee;}.normal-mode .ace_cursor{ border: 0!important; background-color: red; opacity: 0.5;}","vimMode"),n.exports={onVisualMode:!1,onVisualLineMode:!1,currentMode:"normal",noMode:function(e){e.unsetStyle("insert-mode"),e.unsetStyle("normal-mode"),e.commands.recording&&e.commands.toggleRecording(e),e.setOverwrite(!1)},insertMode:function(e){this.currentMode="insert",e.setStyle("insert-mode"),e.unsetStyle("normal-mode"),e.setOverwrite(!1),e.keyBinding.$data.buffer="",e.keyBinding.$data.state="insertMode",this.onVisualMode=!1,this.onVisualLineMode=!1,this.onInsertReplaySequence?(e.commands.macro=this.onInsertReplaySequence,e.commands.replay(e),this.onInsertReplaySequence=null,this.normalMode(e)):(e._emit("changeStatus"),e.commands.recording||e.commands.toggleRecording(e))},normalMode:function(e){this.currentMode="normal",e.unsetStyle("insert-mode"),e.setStyle("normal-mode"),e.clearSelection();var t;return e.getOverwrite()||(t=e.getCursorPosition(),t.column>0&&e.navigateLeft()),e.setOverwrite(!0),e.keyBinding.$data.buffer="",e.keyBinding.$data.state="start",this.onVisualMode=!1,this.onVisualLineMode=!1,e._emit("changeStatus"),e.commands.recording?(e.commands.toggleRecording(e),e.commands.macro):[]},visualMode:function(e,t){if(this.onVisualLineMode&&t||this.onVisualMode&&!t){this.normalMode(e);return}e.setStyle("insert-mode"),e.unsetStyle("normal-mode"),e._emit("changeStatus"),t?this.onVisualLineMode=!0:(this.onVisualMode=!0,this.onVisualLineMode=!1)},getRightNthChar:function(e,t,n,r){var i=e.getSession().getLine(t.row),s=i.substr(t.column+1).split(n);return r<s.length?s.slice(0,r).join(n).length:null},getLeftNthChar:function(e,t,n,r){var i=e.getSession().getLine(t.row),s=i.substr(0,t.column).split(n);return r<s.length?s.slice(-1*r).join(n).length:null},toRealChar:function(e){return e.length===1?e:/^shift-./.test(e)?e[e.length-1].toUpperCase():""},copyLine:function(e){var t=e.getCursorPosition();e.selection.clearSelection(),e.moveCursorTo(t.row,t.column),e.selection.selectLine(),r._default.isLine=!0,r._default.text=e.getCopyText().replace(/\n$/,""),e.selection.clearSelection(),e.moveCursorTo(t.row,t.column)}}}),ace.define("ace/keyboard/vim/registers",["require","exports","module"],function(e,t,n){"never use strict";n.exports={_default:{text:"",isLine:!1}}}),ace.define("ace/keyboard/vim/maps/motions",["require","exports","module","ace/keyboard/vim/maps/util","ace/search","ace/range"],function(e,t,n){function s(e){if(typeof e=="function"){var t=e;e=this}else var t=e.getPos;return e.nav=function(e,n,r,i){var s=t(e,n,r,i,!1);if(!s)return;e.clearSelection(),e.moveCursorTo(s.row,s.column)},e.sel=function(e,n,r,i){var s=t(e,n,r,i,!0);if(!s)return;e.selection.selectTo(s.row,s.column)},e}function h(e,t,n){return c.$options.needle=t,c.$options.backwards=n==-1,c.find(e.session)}var r=e("./util"),i=function(e,t){var n=e.renderer.getScrollTopRow(),r=e.getCursorPosition().row,i=r-n;t&&t.call(e),e.renderer.scrollToRow(e.getCursorPosition().row-i)},o=/[\s.\/\\()\"'-:,.;<>~!@#$%^&*|+=\[\]{}`~?]/,u=/[.\/\\()\"'-:,.;<>~!@#$%^&*|+=\[\]{}`~?]/,a=/\s/,f=function(e,t){var n=e.selection;this.range=n.getRange(),t=t||n.selectionLead,this.row=t.row,this.col=t.column;var r=e.session.getLine(this.row),i=e.session.getLength();this.ch=r[this.col]||"\n",this.skippedLines=0,this.next=function(){return this.ch=r[++this.col]||this.handleNewLine(1),this.ch},this.prev=function(){return this.ch=r[--this.col]||this.handleNewLine(-1),this.ch},this.peek=function(t){var n=r[this.col+t];return n?n:t==-1?"\n":this.col==r.length-1?"\n":e.session.getLine(this.row+1)[0]||"\n"},this.handleNewLine=function(t){if(t==1)return this.col==r.length?"\n":this.row==i-1?"":(this.col=0,this.row++,r=e.session.getLine(this.row),this.skippedLines++,r[0]||"\n");if(t==-1)return this.row===0?"":(this.row--,r=e.session.getLine(this.row),this.col=r.length,this.skippedLines--,"\n")},this.debug=function(){console.log(r.substring(0,this.col)+"|"+this.ch+"'"+this.col+"'"+r.substr(this.col+1))}},l=e("../../../search").Search,c=new l,p=e("../../../range").Range;n.exports={w:new s(function(e){var t=new f(e);if(t.ch&&u.test(t.ch))while(t.ch&&u.test(t.ch))t.next();else while(t.ch&&!o.test(t.ch))t.next();while(t.ch&&a.test(t.ch)&&t.skippedLines<2)t.next();return t.skippedLines==2&&t.prev(),{column:t.col,row:t.row}}),W:new s(function(e){var t=new f(e);while(t.ch&&(!a.test(t.ch)||!!a.test(t.peek(1)))&&t.skippedLines<2)t.next();return t.skippedLines==2?t.prev():t.next(),{column:t.col,row:t.row}}),b:new s(function(e){var t=new f(e);t.prev();while(t.ch&&a.test(t.ch)&&t.skippedLines>-2)t.prev();if(t.ch&&u.test(t.ch))while(t.ch&&u.test(t.ch))t.prev();else while(t.ch&&!o.test(t.ch))t.prev();return t.ch&&t.next(),{column:t.col,row:t.row}}),B:new s(function(e){var t=new f(e);t.prev();while(t.ch&&(!!a.test(t.ch)||!a.test(t.peek(-1)))&&t.skippedLines>-2)t.prev();return t.skippedLines==-2&&t.next(),{column:t.col,row:t.row}}),e:new s(function(e){var t=new f(e);t.next();while(t.ch&&a.test(t.ch))t.next();if(t.ch&&u.test(t.ch))while(t.ch&&u.test(t.ch))t.next();else while(t.ch&&!o.test(t.ch))t.next();return t.ch&&t.prev(),{column:t.col,row:t.row}}),E:new s(function(e){var t=new f(e);t.next();while(t.ch&&(!!a.test(t.ch)||!a.test(t.peek(1))))t.next();return{column:t.col,row:t.row}}),l:{nav:function(e){e.navigateRight()},sel:function(e){var t=e.getCursorPosition(),n=t.column,r=e.session.getLine(t.row).length;r&&n!==r&&e.selection.selectRight()}},h:{nav:function(e){var t=e.getCursorPosition();t.column>0&&e.navigateLeft()},sel:function(e){var t=e.getCursorPosition();t.column>0&&e.selection.selectLeft()}},H:{nav:function(e){var t=e.renderer.getScrollTopRow();e.moveCursorTo(t)},sel:function(e){var t=e.renderer.getScrollTopRow();e.selection.selectTo(t)}},M:{nav:function(e){var t=e.renderer.getScrollTopRow(),n=e.renderer.getScrollBottomRow(),r=t+(n-t)/2;e.moveCursorTo(r)},sel:function(e){var t=e.renderer.getScrollTopRow(),n=e.renderer.getScrollBottomRow(),r=t+(n-t)/2;e.selection.selectTo(r)}},L:{nav:function(e){var t=e.renderer.getScrollBottomRow();e.moveCursorTo(t)},sel:function(e){var t=e.renderer.getScrollBottomRow();e.selection.selectTo(t)}},k:{nav:function(e){e.navigateUp()},sel:function(e){e.selection.selectUp()}},j:{nav:function(e){e.navigateDown()},sel:function(e){e.selection.selectDown()}},i:{param:!0,sel:function(e,t,n,r){switch(r){case"w":e.selection.selectWord();break;case"W":e.selection.selectAWord();break;case"(":case"{":case"[":var i=e.getCursorPosition(),s=e.session.$findClosingBracket(r,i,/paren/);if(!s)return;var o=e.session.$findOpeningBracket(e.session.$brackets[r],i,/paren/);if(!o)return;o.column++,e.selection.setSelectionRange(p.fromPoints(o,s));break;case"'":case'"':case"/":var s=h(e,r,1);if(!s)return;var o=h(e,r,-1);if(!o)return;e.selection.setSelectionRange(p.fromPoints(o.end,s.start))}}},a:{param:!0,sel:function(e,t,n,r){switch(r){case"w":e.selection.selectAWord();break;case"W":e.selection.selectAWord();break;case"(":case"{":case"[":var i=e.getCursorPosition(),s=e.session.$findClosingBracket(r,i,/paren/);if(!s)return;var o=e.session.$findOpeningBracket(e.session.$brackets[r],i,/paren/);if(!o)return;s.column++,e.selection.setSelectionRange(p.fromPoints(o,s));break;case"'":case'"':case"/":var s=h(e,r,1);if(!s)return;var o=h(e,r,-1);if(!o)return;s.column++,e.selection.setSelectionRange(p.fromPoints(o.start,s.end))}}},f:new s({param:!0,handlesCount:!0,getPos:function(e,t,n,i,s){var o=e.getCursorPosition(),u=r.getRightNthChar(e,o,i,n||1);if(typeof u=="number")return o.column+=u+(s?2:1),o}}),F:new s({param:!0,handlesCount:!0,getPos:function(e,t,n,i,s){var o=e.getCursorPosition(),u=r.getLeftNthChar(e,o,i,n||1);if(typeof u=="number")return o.column-=u+1,o}}),t:new s({param:!0,handlesCount:!0,getPos:function(e,t,n,i,s){var o=e.getCursorPosition(),u=r.getRightNthChar(e,o,i,n||1);if(typeof u=="number")return o.column+=u+(s?1:0),o}}),T:new s({param:!0,handlesCount:!0,getPos:function(e,t,n,i,s){var o=e.getCursorPosition(),u=r.getLeftNthChar(e,o,i,n||1);if(typeof u=="number")return o.column-=u,o}}),"^":{nav:function(e){e.navigateLineStart()},sel:function(e){e.selection.selectLineStart()}},$:{nav:function(e){e.navigateLineEnd()},sel:function(e){e.selection.selectLineEnd()}},0:new s(function(e){return{row:e.selection.lead.row,column:0}}),G:{nav:function(e,t,n,r){!n&&n!==0&&(n=e.session.getLength()),e.gotoLine(n)},sel:function(e,t,n,r){!n&&n!==0&&(n=e.session.getLength()),e.selection.selectTo(n,0)}},g:{param:!0,nav:function(e,t,n,r){switch(r){case"m":console.log("Middle line");break;case"e":console.log("End of prev word");break;case"g":e.gotoLine(n||0);case"u":e.gotoLine(n||0);case"U":e.gotoLine(n||0)}},sel:function(e,t,n,r){switch(r){case"m":console.log("Middle line");break;case"e":console.log("End of prev word");break;case"g":e.selection.selectTo(n||0,0)}}},o:{nav:function(e,t,n,i){n=n||1;var s="";while(0<n--)s+="\n";s.length&&(e.navigateLineEnd(),e.insert(s),r.insertMode(e))}},O:{nav:function(e,t,n,i){var s=e.getCursorPosition().row;n=n||1;var o="";while(0<n--)o+="\n";o.length&&(s>0?(e.navigateUp(),e.navigateLineEnd(),e.insert(o)):(e.session.insert({row:0,column:0},o),e.navigateUp()),r.insertMode(e))}},"%":new s(function(e){var t=/[\[\]{}()]/g,n=e.getCursorPosition(),r=e.session.getLine(n.row)[n.column];if(!t.test(r)){var i=h(e,t);if(!i)return;n=i.start}var s=e.session.findMatchingBracket({row:n.row,column:n.column+1});return s}),"{":new s(function(e){var t=e.session,n=t.selection.lead.row;while(n>0&&!/\S/.test(t.getLine(n)))n--;while(/\S/.test(t.getLine(n)))n--;return{column:0,row:n}}),"}":new s(function(e){var t=e.session,n=t.getLength(),r=t.selection.lead.row;while(r<n&&!/\S/.test(t.getLine(r)))r++;while(/\S/.test(t.getLine(r)))r++;return{column:0,row:r}}),"ctrl-d":{nav:function(e,t,n,r){e.selection.clearSelection(),i(e,e.gotoPageDown)},sel:function(e,t,n,r){i(e,e.selectPageDown)}},"ctrl-u":{nav:function(e,t,n,r){e.selection.clearSelection(),i(e,e.gotoPageUp)},sel:function(e,t,n,r){i(e,e.selectPageUp)}}},n.exports.backspace=n.exports.left=n.exports.h,n.exports.right=n.exports.l,n.exports.up=n.exports.k,n.exports.down=n.exports.j,n.exports.pagedown=n.exports["ctrl-d"],n.exports.pageup=n.exports["ctrl-u"]}),ace.define("ace/keyboard/vim/maps/operators",["require","exports","module","ace/keyboard/vim/maps/util","ace/keyboard/vim/registers"],function(e,t,n){"never use strict";var r=e("./util"),i=e("../registers");n.exports={d:{selFn:function(e,t,n,s){i._default.text=e.getCopyText(),i._default.isLine=r.onVisualLineMode,r.onVisualLineMode?e.removeLines():e.session.remove(t),r.normalMode(e)},fn:function(e,t,n,r){n=n||1;switch(r){case"d":i._default.text="",i._default.isLine=!0;for(var s=0;s<n;s++){e.selection.selectLine(),i._default.text+=e.getCopyText();var o=e.getSelectionRange();if(!o.isMultiLine()){lastLineReached=!0;var u=o.start.row-1,a=e.session.getLine(u).length;o.setStart(u,a),e.session.remove(o),e.selection.clearSelection();break}e.session.remove(o),e.selection.clearSelection()}i._default.text=i._default.text.replace(/\n$/,"");break;default:t&&(e.selection.setSelectionRange(t),i._default.text=e.getCopyText(),i._default.isLine=!1,e.session.remove(t),e.selection.clearSelection())}}},c:{selFn:function(e,t,n,i){e.session.remove(t),r.insertMode(e)},fn:function(e,t,n,i){n=n||1;switch(i){case"c":for(var s=0;s<n;s++)e.removeLines(),r.insertMode(e);break;default:t&&(e.session.remove(t),r.insertMode(e))}}},y:{selFn:function(e,t,n,s){i._default.text=e.getCopyText(),i._default.isLine=r.onVisualLineMode,e.selection.clearSelection(),r.normalMode(e)},fn:function(e,t,n,r){n=n||1;switch(r){case"y":var s=e.getCursorPosition();e.selection.selectLine();for(var o=0;o<n-1;o++)e.selection.moveCursorDown();i._default.text=e.getCopyText().replace(/\n$/,""),e.selection.clearSelection(),i._default.isLine=!0,e.moveCursorToPosition(s);break;default:if(t){var s=e.getCursorPosition();e.selection.setSelectionRange(t),i._default.text=e.getCopyText(),i._default.isLine=!1,e.selection.clearSelection(),e.moveCursorTo(s.row,s.column)}}}},">":{selFn:function(e,t,n,i){n=n||1;for(var s=0;s<n;s++)e.indent();r.normalMode(e)},fn:function(e,t,n,r){n=parseInt(n||1,10);switch(r){case">":var i=e.getCursorPosition();e.selection.selectLine();for(var s=0;s<n-1;s++)e.selection.moveCursorDown();e.indent(),e.selection.clearSelection(),e.moveCursorToPosition(i),e.navigateLineEnd(),e.navigateLineStart()}}},"<":{selFn:function(e,t,n,i){n=n||1;for(var s=0;s<n;s++)e.blockOutdent();r.normalMode(e)},fn:function(e,t,n,r){n=n||1;switch(r){case"<":var i=e.getCursorPosition();e.selection.selectLine();for(var s=0;s<n-1;s++)e.selection.moveCursorDown();e.blockOutdent(),e.selection.clearSelection(),e.moveCursorToPosition(i),e.navigateLineEnd(),e.navigateLineStart()}}}}}),"use strict",ace.define("ace/keyboard/vim/maps/aliases",["require","exports","module"],function(e,t,n){n.exports={x:{operator:{ch:"d",count:1},motion:{ch:"l",count:1}},X:{operator:{ch:"d",count:1},motion:{ch:"h",count:1}},D:{operator:{ch:"d",count:1},motion:{ch:"$",count:1}},C:{operator:{ch:"c",count:1},motion:{ch:"$",count:1}},s:{operator:{ch:"c",count:1},motion:{ch:"l",count:1}},S:{operator:{ch:"c",count:1},param:"c"}}}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-abap.js b/ehcp/net2ftp/plugins/ace/mode-abap.js new file mode 100644 index 0000000..01589e2 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-abap.js @@ -0,0 +1 @@ +ace.define("ace/mode/abap",["require","exports","module","ace/tokenizer","ace/mode/abap_highlight_rules","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/lib/oop"],function(e,t,n){function f(){this.$tokenizer=new r((new i).getRules(),"i"),this.foldingRules=new s}var r=e("../tokenizer").Tokenizer,i=e("./abap_highlight_rules").AbapHighlightRules,s=e("./folding/coffee").FoldMode,o=e("../range").Range,u=e("./text").Mode,a=e("../lib/oop");a.inherits(f,u),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.toggleCommentLines=function(e,t,n,r){var i=new o(0,0,0,0);for(var s=n;s<=r;++s){var u=t.getLine(s);if(hereComment.test(u))continue;commentLine.test(u)?u=u.replace(commentLine,"$1"):u=u.replace(indentation,"$&#"),i.end.row=i.start.row=s,i.end.column=u.length+1,t.replace(i,u)}}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/abap_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT BACK CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT FETCH FIELDS FORM FORMAT FREE FROM FUNCTION GENERATE GET HIDE IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION LEAVE LIKE LINE LOAD LOCAL LOOP MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY ON OVERLAY OPTIONAL OTHERS PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES UNASSIGN ULINE UNPACK UPDATE WHEN WHILE WINDOW WRITE OCCURS STRUCTURE OBJECT PROPERTY CASTING APPEND RAISING VALUE COLOR CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT ID NUMBER FOR TITLE OUTPUT WITH EXIT USING INTO WHERE GROUP BY HAVING ORDER BY SINGLE APPENDING CORRESPONDING FIELDS OF TABLE LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN","constant.language":"TRUE FALSE NULL SPACE","support.type":"c n i p f d t x string xstring decfloat16 decfloat34","keyword.operator":"abs sign ceil floor trunc frac acos asin atan cos sin tan abapOperator cosh sinh tanh exp log log10 sqrt strlen xstrlen charlen numofchar dbmaxlen lines"},"text",!0," "),t="WITH\\W+(?:HEADER\\W+LINE|FRAME|KEY)|NO\\W+STANDARD\\W+PAGE\\W+HEADING|EXIT\\W+FROM\\W+STEP\\W+LOOP|BEGIN\\W+OF\\W+(?:BLOCK|LINE)|BEGIN\\W+OF|END\\W+OF\\W+(?:BLOCK|LINE)|END\\W+OF|NO\\W+INTERVALS|RESPECTING\\W+BLANKS|SEPARATED\\W+BY|USING\\W+(?:EDIT\\W+MASK)|WHERE\\W+(?:LINE)|RADIOBUTTON\\W+GROUP|REF\\W+TO|(?:PUBLIC|PRIVATE|PROTECTED)(?:\\W+SECTION)?|DELETING\\W+(?:TRAILING|LEADING)(?:ALL\\W+OCCURRENCES)|(?:FIRST|LAST)\\W+OCCURRENCE|INHERITING\\W+FROM|LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|IS\\W+(?:NOT\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)";this.$rules={start:[{token:"string",regex:"`",next:"string"},{token:"string",regex:"'",next:"qstring"},{token:"doc.comment",regex:/^\*.+/},{token:"comment",regex:/".+$/},{token:"invalid",regex:"\\.{2,}"},{token:"keyword.operator",regex:/\W[\-+\%=<>*]\W|\*\*|[~:,\.&$]|->*?|=>/},{token:"paren.lparen",regex:"[\\[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"constant.numeric",regex:"[+-]?\\d+\\b"},{token:"variable.parameter",regex:/sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/},{token:"keyword",regex:t},{token:"variable.parameter",regex:/\w+-\w+(?:-\w+)*/},{token:e,regex:"\\w+\\b"}],qstring:[{token:"constant.language.escape",regex:"''"},{token:"string",regex:"'",next:"start",merge:!0},{token:"string",regex:".|w+",merge:!0}],string:[{token:"constant.language.escape",regex:"``"},{token:"string",regex:"`",next:"start",merge:!0},{token:"string",regex:".|w+",merge:!0}]}};r.inherits(s,i),t.AbapHighlightRules=s}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-asciidoc.js b/ehcp/net2ftp/plugins/ace/mode-asciidoc.js new file mode 100644 index 0000000..4e8a244 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-asciidoc.js @@ -0,0 +1 @@ +ace.define("ace/mode/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/asciidoc_highlight_rules","ace/mode/folding/asciidoc"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./asciidoc_highlight_rules").AsciidocHighlightRules,u=e("./folding/asciidoc").FoldMode,a=function(){var e=new o;this.$tokenizer=new s(e.getRules()),this.foldingRules=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){if(e=="listblock"){var r=/^((?:.+)?)([-+*][ ]+)/.exec(t);return r?(new Array(r[1].length+1)).join(" ")+r[2]:""}return this.$getIndent(t)}}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/asciidoc_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){function t(e){var t=/\w/.test(e)?"\\b":"(?:\\B|^)";return t+e+"[^"+e+"].*?"+e+"(?![\\w*])"}var e="[a-zA-Z¡-￿]+\\b";this.$rules={start:[{token:"empty",regex:/$/},{token:"literal",regex:/^\.{4,}\s*$/,next:"listingBlock"},{token:"literal",regex:/^-{4,}\s*$/,next:"literalBlock"},{token:"string",regex:/^\+{4,}\s*$/,next:"passthroughBlock"},{token:"keyword",regex:/^={4,}\s*$/},{token:"text",regex:/^\s*$/},{token:"empty",regex:"",next:"dissallowDelimitedBlock"}],dissallowDelimitedBlock:[{include:"paragraphEnd"},{token:"comment",regex:"^//.+$"},{token:"keyword",regex:"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):"},{include:"listStart"},{token:"literal",regex:/^\s+.+$/,next:"indentedBlock"},{token:"empty",regex:"",next:"text"}],paragraphEnd:[{token:"doc.comment",regex:/^\/{4,}\s*$/,next:"commentBlock"},{token:"tableBlock",regex:/^\s*[|!]=+\s*$/,next:"tableBlock"},{token:"keyword",regex:/^(?:--|''')\s*$/,next:"start"},{token:"option",regex:/^\[.*\]\s*$/,next:"start"},{token:"pageBreak",regex:/^>{3,}$/,next:"start"},{token:"literal",regex:/^\.{4,}\s*$/,next:"listingBlock"},{token:"titleUnderline",regex:/^(?:={2,}|-{2,}|~{2,}|\^{2,}|\+{2,})\s*$/,next:"start"},{token:"singleLineTitle",regex:/^={1,5}\s+\S.*$/,next:"start"},{token:"otherBlock",regex:/^(?:\*{2,}|_{2,})\s*$/,next:"start"},{token:"optionalTitle",regex:/^\.[^.\s].+$/,next:"start"}],listStart:[{token:"keyword",regex:/^\s*(?:\d+\.|[a-zA-Z]\.|[ixvmIXVM]+\)|\*{1,5}|-|\.{1,5})\s/,next:"listText"},{token:"meta.tag",regex:/^.+(?::{2,4}|;;)(?: |$)/,next:"listText"},{token:"support.function.list.callout",regex:/^(?:<\d+>|\d+>|>) /,next:"text"},{token:"keyword",regex:/^\+\s*$/,next:"start"}],text:[{token:["link","variable.language"],regex:/((?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+)(\[.*?\])/},{token:"link",regex:/(?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+/},{token:"link",regex:/\b[\w\.\/\-]+@[\w\.\/\-]+\b/},{include:"macros"},{include:"paragraphEnd"},{token:"literal",regex:/\+{3,}/,next:"smallPassthrough"},{token:"escape",regex:/\((?:C|TM|R)\)|\.{3}|->|<-|=>|<=|&#(?:\d+|x[a-fA-F\d]+);|(?: |^)--(?=\s+\S)/},{token:"escape",regex:/\\[_*'`+#]|\\{2}[_*'`+#]{2}/},{token:"keyword",regex:/\s\+$/},{token:"text",regex:e},{token:["keyword","string","keyword"],regex:/(<<[\w\d\-$]+,)(.*?)(>>|$)/,merge:!0},{token:"keyword",regex:/<<[\w\d\-$]+,?|>>/,merge:!0},{token:"constant.character",regex:/\({2,3}.*?\){2,3}/,merge:!0},{token:"keyword",regex:/\[\[.+?\]\]/},{token:"support",regex:/^\[{3}[\w\d =\-]+\]{3}/},{include:"quotes"},{token:"empty",regex:/^\s*$/,next:"start"}],listText:[{include:"listStart"},{include:"text"}],indentedBlock:[{token:"literal",regex:/^[\s\w].+$/,next:"indentedBlock"},{token:"literal",regex:"",next:"start"}],listingBlock:[{token:"literal",regex:/^\.{4,}\s*$/,next:"dissallowDelimitedBlock"},{token:"constant.numeric",regex:"<\\d+>"},{token:"literal",regex:"[^<]+",merge:!0},{token:"literal",regex:"<",merge:!0}],literalBlock:[{token:"literal",regex:/^-{4,}\s*$/,next:"dissallowDelimitedBlock"},{token:"constant.numeric",regex:"<\\d+>"},{token:"literal",regex:"[^<]+",merge:!0},{token:"literal",regex:"<",merge:!0}],passthroughBlock:[{token:"literal",regex:/^\+{4,}\s*$/,next:"dissallowDelimitedBlock"},{token:"literal",regex:e+"|\\d+",merge:!0},{include:"macros"},{token:"literal",regex:".",merge:!0}],smallPassthrough:[{token:"literal",regex:/[+]{3,}/,next:"dissallowDelimitedBlock"},{token:"literal",regex:/^\s*$/,next:"dissallowDelimitedBlock",merge:!0},{token:"literal",regex:e+"|\\d+",merge:!0},{include:"macros"}],commentBlock:[{token:"doc.comment",regex:/^\/{4,}\s*$/,next:"dissallowDelimitedBlock"},{token:"doc.comment",regex:"^.*$"}],tableBlock:[{token:"tableBlock",regex:/^\s*\|={3,}\s*$/,next:"dissallowDelimitedBlock"},{token:"tableBlock",regex:/^\s*!={3,}\s*$/,next:"innerTableBlock"},{token:"tableBlock",regex:/\|/},{include:"text",noEscape:!0}],innerTableBlock:[{token:"tableBlock",regex:/^\s*!={3,}\s*$/,next:"tableBlock"},{token:"tableBlock",regex:/^\s*|={3,}\s*$/,next:"dissallowDelimitedBlock"},{token:"tableBlock",regex:/\!/}],macros:[{token:"macro",regex:/{[\w\-$]+}/},{token:["text","string","text","constant.character","text"],regex:/({)([\w\-$]+)(:)?(.+)?(})/},{token:["text","markup.list.macro","keyword","string"],regex:/(\w+)(footnote(?:ref)?::?)([^\s\[]+)?(\[.*?\])?/},{token:["markup.list.macro","keyword","string"],regex:/([a-zA-Z\-][\w\.\/\-]*::?)([^\s\[]+)(\[.*?\])?/},{token:["markup.list.macro","keyword"],regex:/([a-zA-Z\-][\w\.\/\-]+::?)(\[.*?\])/},{token:"keyword",regex:/^:.+?:(?= |$)/}],quotes:[{token:"string.italic",regex:/__[^_\s].*?__/},{token:"string.italic",regex:t("_")},{token:"keyword.bold",regex:/\*\*[^*\s].*?\*\*/},{token:"keyword.bold",regex:t("\\*")},{token:"literal",regex:t("\\+")},{token:"literal",regex:/\+\+[^+\s].*?\+\+/},{token:"literal",regex:/\$\$.+?\$\$/},{token:"literal",regex:t("`")},{token:"keyword",regex:t("^")},{token:"keyword",regex:t("~")},{token:"keyword",regex:/##?/},{token:"keyword",regex:/(?:\B|^)``|\b''/}]};var n={macro:"constant.character",tableBlock:"doc.comment",titleUnderline:"markup.heading",singleLineTitle:"markup.heading",pageBreak:"string",option:"string.regexp",otherBlock:"markup.list",literal:"support.function",optionalTitle:"constant.numeric",escape:"constant.language.escape",link:"markup.underline.list"};for(var r in this.$rules){var i=this.$rules[r];for(var s=i.length;s--;){var o=i[s];if(o.include||typeof o=="string"){var u=[s,1].concat(this.$rules[o.include||o]);o.noEscape&&(u=u.filter(function(e){return!e.next})),i.splice.apply(i,u)}else o.token in n&&(o.token=n[o.token])}}};r.inherits(s,i),t.AsciidocHighlightRules=s}),ace.define("ace/mode/folding/asciidoc",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:\|={10,}|[\.\/=\-~^+]{4,}\s*$|={1,5} )/,this.singleLineHeadingRe=/^={1,5}(?=\s+\S)/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]=="="?this.singleLineHeadingRe.test(r)?"start":e.getLine(n-1).length!=e.getLine(n).length?"":"start":e.bgTokenizer.getState(n)=="dissallowDelimitedBlock"?"end":"start":""},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type}function d(){var t=f.value.match(p);if(t)return t[0].length;var r=c.indexOf(f.value[0])+1;return r==1&&e.getLine(n-1).length!=e.getLine(n).length?Infinity:r}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;var f,c=["=","-","~","^","+"],h="markup.heading",p=this.singleLineHeadingRe;if(l(n)==h){var v=d();while(++n<o){if(l(n)!=h)continue;var m=d();if(m<=v)break}var g=f&&f.value.match(this.singleLineHeadingRe);a=g?n-1:n-2;if(a>u)while(a>u&&(!l(a)||f.value[0]=="["))a--;if(a>u){var y=e.getLine(a).length;return new s(u,i,a,y)}}else{var b=e.bgTokenizer.getState(n);if(b=="dissallowDelimitedBlock"){while(n-->0)if(e.bgTokenizer.getState(n).lastIndexOf("Block")==-1)break;a=n+1;if(a<u){var y=e.getLine(n).length;return new s(a,5,u,i-5)}}else{while(++n<o)if(e.bgTokenizer.getState(n)=="dissallowDelimitedBlock")break;a=n;if(a>u){var y=e.getLine(n).length;return new s(u,5,a,y-5)}}}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-c9search.js b/ehcp/net2ftp/plugins/ace/mode-c9search.js new file mode 100644 index 0000000..cd0a3e3 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-c9search.js @@ -0,0 +1 @@ +ace.define("ace/mode/c9search",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/c9search_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/c9search"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./c9search_highlight_rules").C9SearchHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./folding/c9search").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/c9search_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:["c9searchresults.constant.numeric","c9searchresults.text","c9searchresults.text"],regex:"(^\\s+[0-9]+)(:\\s*)(.+)"},{token:["string","text"],regex:"(.+)(:$)"}]}};r.inherits(s,i),t.C9SearchHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/c9search",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^(\S.*\:|Searching for.*)$/,this.foldingStopMarker=/^(\s+|Found.*)$/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getAllLines(n),s=r[n],o=/^(Found.*|Searching for.*)$/,u=/^(\S.*\:|\s*)$/,a=o.test(s)?o:u;if(this.foldingStartMarker.test(s)){for(var f=n+1,l=e.getLength();f<l;f++)if(a.test(r[f]))break;return new i(n,s.length,f,0)}if(this.foldingStopMarker.test(s)){for(var f=n-1;f>=0;f--){s=r[f];if(a.test(s))break}return new i(f,s.length,n,0)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-c_cpp.js b/ehcp/net2ftp/plugins/ace/mode-c_cpp.js new file mode 100644 index 0000000..6fa40d0 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-c_cpp.js @@ -0,0 +1 @@ +ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./c_cpp_highlight_rules").c_cppHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\s*\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\b",u=function(){var e="break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using",t="asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template",n="const|extern|register|restrict|static|volatile|inline|private:|protected:|public:|friend|explicit|virtual|export|mutable|typename",r="and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace",s="NULL|true|false|TRUE|FALSE",u=this.$keywords=this.createKeywordMapper({"keyword.control":e,"storage.type":t,"storage.modifier":n,"keyword.operator":r,"variable.language":"this","constant.language":s},"identifier"),a="[a-zA-Z\\$_¡-￿][a-zA-Zd\\$_¡-￿]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#import|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:"support.function.C99.c",regex:o},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-clojure.js b/ehcp/net2ftp/plugins/ace/mode-clojure.js new file mode 100644 index 0000000..bfc7ff0 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-clojure.js @@ -0,0 +1 @@ +ace.define("ace/mode/clojure",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./clojure_highlight_rules").ClojureHighlightRules,u=e("./matching_parens_outdent").MatchingParensOutdent,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u};r.inherits(f,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,";")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/[\(\[]/);o&&(r+=" "),o=t.match(/[\)]/),o&&(r="")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/clojure_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> ->> .. / < <= = == > > >= >= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap",t="throw try var def do fn if let loop monitor-enter monitor-exit new quote recur set!",n="true false nil",r=this.createKeywordMapper({keyword:t,"constant.language":n,"support.function":e},"identifier",!1," ");this.$rules={start:[{token:"comment",regex:";.*$"},{token:"comment",regex:"^=begin$",next:"comment"},{token:"keyword",regex:"[\\(|\\)]"},{token:"keyword",regex:"[\\'\\(]"},{token:"keyword",regex:"[\\[|\\]]"},{token:"keyword",regex:"[\\{|\\}|\\#\\{|\\#\\}]"},{token:"keyword",regex:"[\\&]"},{token:"keyword",regex:"[\\#\\^\\{]"},{token:"keyword",regex:"[\\%]"},{token:"keyword",regex:"[@]"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"},{token:"string",regex:'"',next:"string"},{token:"string",regex:/:[\w*+!\-_?:\/]+/},{token:"string.regexp",regex:'/#"(?:\\.|(?:\\")|[^""\n])*"/g'}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",merge:!0,regex:".+"}],string:[{token:"constant.language.escape",merge:!0,regex:"\\\\.|\\\\$"},{token:"string",merge:!0,regex:'[^"\\\\]+'},{token:"string",regex:'"',next:"start"}]}};r.inherits(s,i),t.ClojureHighlightRules=s}),ace.define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingParensOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-coffee.js b/ehcp/net2ftp/plugins/ace/mode-coffee.js new file mode 100644 index 0000000..e210e46 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-coffee.js @@ -0,0 +1 @@ +ace.define("ace/mode/coffee",["require","exports","module","ace/tokenizer","ace/mode/coffee_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee","ace/range","ace/mode/text","ace/worker/worker_client","ace/lib/oop"],function(e,t,n){function c(){this.$tokenizer=new r((new i).getRules()),this.$outdent=new s,this.foldingRules=new o}var r=e("../tokenizer").Tokenizer,i=e("./coffee_highlight_rules").CoffeeHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,o=e("./folding/coffee").FoldMode,u=e("../range").Range,a=e("./text").Mode,f=e("../worker/worker_client").WorkerClient,l=e("../lib/oop");l.inherits(c,a),function(){var e=/(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/,t=/^(\s*)#/,n=/^\s*###(?!#)/,r=/^\s*/;this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.$tokenizer.getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!=="comment")&&t==="start"&&e.test(n)&&(i+=r),i},this.toggleCommentLines=function(e,i,s,o){console.log("toggle");var a=new u(0,0,0,0);for(var f=s;f<=o;++f){var l=i.getLine(f);if(n.test(l))continue;t.test(l)?l=l.replace(t,"$1"):l=l.replace(r,"$&#"),a.end.row=a.start.row=f,a.end.column=l.length+1,i.replace(a,l)}},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/coffee_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations([t.data])}),t.on("ok",function(t){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/coffee_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){function s(){var e="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",t={token:"string",merge:!0,regex:".+"},n="this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes",r="true|false|null|undefined|NaN|Infinity",i="case|const|default|function|var|void|with|enum|export|implements|interface|let|package|private|protected|public|static|yield|__hasProp|slice|bind|indexOf",s="Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray",o="Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|",u="window|arguments|prototype|document",a=this.createKeywordMapper({keyword:n,"constant.language":r,"invalid.illegal":i,"language.support.class":s,"language.support.function":o,"variable.language":u},"identifier"),f={"({args})->":{token:["paren.lparen","text","paren.lparen","text","variable.parameter","text","paren.rparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\{)(\\s*)([$@A-Za-z_\\x7f-\\uffff][$@\\w\\s,\\x7f-\\uffff]*)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"},"({})->":{token:["paren.lparen","text","paren.lparen","text","paren.rparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\{)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"},"(args)->":{token:["paren.lparen","text","variable.parameter","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)([$@A-Za-z_\\x7f-\\uffff][\\s\\x21-\\uffff]*)(\\s*)(\\))(\\s*)([\\-=]>)"},"()->":{token:["paren.lparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\))(\\s*)([\\-=]>)"}};this.$rules={start:[{token:"constant.numeric",regex:"(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"},{token:"string",merge:!0,regex:"'''",next:"qdoc"},{token:"string",merge:!0,regex:'"""',next:"qqdoc"},{token:"string",merge:!0,regex:"'",next:"qstring"},{token:"string",merge:!0,regex:'"',next:"qqstring"},{token:"string",merge:!0,regex:"`",next:"js"},{token:"string.regex",merge:!0,regex:"///",next:"heregex"},{token:"string.regex",regex:/(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/},{token:"comment",merge:!0,regex:"###(?!#)",next:"comment"},{token:"comment",regex:"#.*"},{token:["punctuation.operator","identifier"],regex:"(\\.)("+i+")"},{token:"punctuation.operator",regex:"\\."},{token:["keyword","text","language.support.class","text","keyword","text","language.support.class"],regex:"(class)(\\s+)("+e+")(\\s+)(extends)(\\s+)("+e+")"},{token:["keyword","text","language.support.class"],regex:"(class)(\\s+)("+e+")"},{token:["entity.name.function","text","keyword.operator","text"].concat(f["({args})->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["({args})->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["({args})->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["({args})->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["({})->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["({})->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["({})->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["({})->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["(args)->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["(args)->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["(args)->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["(args)->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["()->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["()->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["()->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["()->"].regex},{token:["entity.name.function","text","keyword.operator","text","storage.type"],regex:"("+e+")(\\s*)(=)(\\s*)([\\-=]>)"},{token:["entity.name.function","text","punctuation.operator","text","storage.type"],regex:"("+e+")(\\s*)(:)(\\s*)([\\-=]>)"},f["({args})->"],f["({})->"],f["(args)->"],f["()->"],{token:"identifier",regex:"(?:(?:\\.|::)\\s*)"+e},{token:"variable",regex:"@(?:"+e+")?"},{token:a,regex:e},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\."},{token:"storage.type",regex:"[\\-=]>"},{token:"keyword.operator",regex:"(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])"},{token:"paren.lparen",regex:"[({[]"},{token:"paren.rparen",regex:"[\\]})]"},{token:"text",regex:"\\s+"}],qdoc:[{token:"string",regex:".*?'''",next:"start"},t],qqdoc:[{token:"string",regex:'.*?"""',next:"start"},t],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",merge:!0,next:"start"},t],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',merge:!0,next:"start"},t],js:[{token:"string",merge:!0,regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"start"},t],heregex:[{token:"string.regex",regex:".*?///[imgy]{0,4}",next:"start"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",merge:!0,regex:"\\S+"}],comment:[{token:"comment",regex:".*?###",next:"start"},{token:"comment",merge:!0,regex:".+"}]}}var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-coldfusion.js b/ehcp/net2ftp/plugins/ace/mode-coldfusion.js new file mode 100644 index 0000000..3d3469d --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-coldfusion.js @@ -0,0 +1 @@ +ace.define("ace/mode/coldfusion",["require","exports","module","ace/lib/oop","ace/mode/xml","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/coldfusion_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml").Mode,s=e("./javascript").Mode,o=e("./css").Mode,u=e("../tokenizer").Tokenizer,a=e("./coldfusion_highlight_rules").ColdfusionHighlightRules,f=function(){i.call(this);var e=new a;this.$tokenizer=new u(e.getRules()),this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"css-":o})};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules()),this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml_util"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},i.tag(this.$rules,"tag","start")};r.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/coldfusion_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/text_highlight_rules","ace/mode/xml_util"],function(e,t,n){var r=e("../lib/oop"),i=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./xml_util"),a=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<(?=script)",next:"script"},{token:"meta.tag",regex:"<(?=style)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start"),u.tag(this.$rules,"style","css-start"),u.tag(this.$rules,"script","js-start"),this.embedRules(s,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(i,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(a,o),t.ColdfusionHighlightRules=a}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-csharp.js b/ehcp/net2ftp/plugins/ace/mode-csharp.js new file mode 100644 index 0000000..5464654 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-csharp.js @@ -0,0 +1 @@ +ace.define("ace/mode/csharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./csharp_highlight_rules").CSharpHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/csharp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic","constant.language":"null|true|false"},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.CSharpHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-css.js b/ehcp/net2ftp/plugins/ace/mode-css.js new file mode 100644 index 0000000..2015555 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-css.js @@ -0,0 +1 @@ +ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-dart.js b/ehcp/net2ftp/plugins/ace/mode-dart.js new file mode 100644 index 0000000..6eaa672 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-dart.js @@ -0,0 +1 @@ +ace.define("ace/mode/dart",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/dart_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./dart_highlight_rules").DartHighlightRules,u=e("./folding/cstyle").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/dart_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="true|false|null",t="this|super",n="try|catch|finally|throw|break|case|continue|default|do|else|for|if|in|return|switch|while|new",r="abstract|class|extends|external|factory|implements|interface|get|native|operator|set|typedef",i="static|final|const",s="void|bool|num|int|double|Dynamic|var|String",o=this.createKeywordMapper({"constant.language.dart":e,"variable.language.dart":t,"keyword.control.dart":n,"keyword.declaration.dart":r,"storage.modifier.dart":i,"storage.type.primitive.dart":s},"identifier"),u={token:"string",merge:!0,regex:".+"};this.$rules={start:[{token:"comment",regex:/\/\/.*$/},{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:["meta.preprocessor.script.dart"],regex:"^(#!.*)$"},{token:["keyword.other.import.dart","meta.declaration.dart"],regex:"#(?:\\b)(?:library|import|source|resource)(?:\\b)"},{token:["keyword.other.import.dart","text"],regex:"(?:\\b)(prefix)(\\s*:)"},{regex:"\\bas\\b",token:"keyword.cast.dart"},{regex:"\\?|:",token:"keyword.control.ternary.dart"},{regex:"(?:\\b)(is\\!?)(?:\\b)",token:["keyword.operator.dart"]},{regex:"(<<|>>>?|~|\\^|\\||&)",token:["keyword.operator.bitwise.dart"]},{regex:"((?:&|\\^|\\||<<|>>>?)=)",token:["keyword.operator.assignment.bitwise.dart"]},{regex:"(===?|!==?|<=?|>=?)",token:["keyword.operator.comparison.dart"]},{regex:"((?:[+*/%-]|\\~)=)",token:["keyword.operator.assignment.arithmetic.dart"]},{regex:"=",token:"keyword.operator.assignment.dart"},{token:"string",merge:!0,regex:"'''",next:"qdoc"},{token:"string",merge:!0,regex:'"""',next:"qqdoc"},{token:"string",merge:!0,regex:"'",next:"qstring"},{token:"string",merge:!0,regex:'"',next:"qqstring"},{regex:"(\\-\\-|\\+\\+)",token:["keyword.operator.increment-decrement.dart"]},{regex:"(\\-|\\+|\\*|\\/|\\~\\/|%)",token:["keyword.operator.arithmetic.dart"]},{regex:"(!|&&|\\|\\|)",token:["keyword.operator.logical.dart"]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:o,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qdoc:[{token:"string",regex:".*?'''",next:"start"},u],qqdoc:[{token:"string",regex:'.*?"""',next:"start"},u],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",merge:!0,next:"start"},u],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',merge:!0,next:"start"},u]}};r.inherits(s,i),t.DartHighlightRules=s}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-diff.js b/ehcp/net2ftp/plugins/ace/mode-diff.js new file mode 100644 index 0000000..6426656 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-diff.js @@ -0,0 +1 @@ +ace.define("ace/mode/diff",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/diff_highlight_rules","ace/mode/folding/diff"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./diff_highlight_rules").DiffHighlightRules,u=e("./folding/diff").FoldMode,a=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.foldingRules=new u(["diff","index","\\+{3}","@@|\\*{5}"],"i")};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/diff_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{regex:"^(?:\\*{15}|={67}|-{3}|\\+{3})$",token:"punctuation.definition.separator.diff",name:"keyword"},{regex:"^(@@)(\\s*.+?\\s*)(@@)(.*)$",token:["constant","constant.numeric","constant","comment.doc.tag"]},{regex:"^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$",token:["constant.numeric","punctuation.definition.range.diff","constant.function","constant.numeric","punctuation.definition.range.diff","invalid"],name:"meta."},{regex:"^(?:(\\-{3}|\\+{3}|\\*{3})( .+))$",token:["constant.numeric","meta.tag"]},{regex:"^([!+>])(.*?)(\\s*)$",token:["support.constant","text","invalid"]},{regex:"^([<\\-])(.*?)(\\s*)$",token:["support.function","string","invalid"]},{regex:"^(diff)(\\s+--\\w+)?(.+?)( .+)?$",token:["variable","variable","keyword","variable"]},{regex:"^Index.+$",token:"variable"},{regex:"^(.*?)(\\s*)$",token:["invisible","invalid"]}]}};r.inherits(s,i),t.DiffHighlightRules=s}),ace.define("ace/mode/folding/diff",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(e,t){this.regExpList=e,this.flag=t,this.foldingStartMarker=RegExp("^("+e.join("|")+")",this.flag)};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i={row:n,column:r.length},o=this.regExpList;for(var u=1;u<=o.length;u++){var a=RegExp("^("+o.slice(0,u).join("|")+")",this.flag);if(a.test(r))break}for(var f=e.getLength();++n<f;){r=e.getLine(n);if(a.test(r))break}if(n==i.row+1)return;return s.fromPoints(i,{row:n-1,column:r.length})}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-dot.js b/ehcp/net2ftp/plugins/ace/mode-dot.js new file mode 100644 index 0000000..d519e19 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-dot.js @@ -0,0 +1 @@ +ace.define("ace/mode/dot",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/matching_brace_outdent","ace/mode/dot_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./dot_highlight_rules").DotHighlightRules,a=e("./folding/cstyle").FoldMode,f=function(){var e=new u;this.$outdent=new o,this.foldingRules=new a,this.$tokenizer=new s(e.getRules())};r.inherits(f,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new Range(0,0,0,0);for(var o=n;o<=r;o++){var a=t.getLine(o),f=a.match(s);u.start.row=o,u.end.row=o,u.end.column=f[0].length,t.replace(u,f[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/dot_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/doc_comment_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=e("./doc_comment_highlight_rules").DocCommentHighlightRules,u=function(){var e=i.arrayToMap("strict|node|edge|graph|digraph|subgraph".split("|")),t=i.arrayToMap("damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z".split("|"));this.$rules={start:[{token:"comment",regex:/\/\/.*$/},{token:"comment",regex:/#.*$/},{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/[+\-]?\d+(?:(?:\.\d*)?(?:[eE][+\-]?\d+)?)?\b/},{token:"keyword.operator",regex:/\+|=|\->/},{token:"punctuation.operator",regex:/,|;/},{token:"paren.lparen",regex:/[\[{]/},{token:"paren.rparen",regex:/[\]}]/},{token:"comment",regex:/^#!.*$/},{token:function(n){return e.hasOwnProperty(n.toLowerCase())?"keyword":t.hasOwnProperty(n.toLowerCase())?"variable":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]}};r.inherits(u,s),t.DotHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-glsl.js b/ehcp/net2ftp/plugins/ace/mode-glsl.js new file mode 100644 index 0000000..147b2e6 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-glsl.js @@ -0,0 +1 @@ +ace.define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/tokenizer","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./c_cpp").Mode,s=e("../tokenizer").Tokenizer,o=e("./glsl_highlight_rules").glslHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),t.Mode=c}),ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./c_cpp_highlight_rules").c_cppHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\s*\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\b",u=function(){var e="break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using",t="asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template",n="const|extern|register|restrict|static|volatile|inline|private:|protected:|public:|friend|explicit|virtual|export|mutable|typename",r="and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace",s="NULL|true|false|TRUE|FALSE",u=this.$keywords=this.createKeywordMapper({"keyword.control":e,"storage.type":t,"storage.modifier":n,"keyword.operator":r,"variable.language":"this","constant.language":s},"identifier"),a="[a-zA-Z\\$_¡-￿][a-zA-Zd\\$_¡-￿]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#import|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:"support.function.C99.c",regex:o},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./c_cpp_highlight_rules").c_cppHighlightRules,s=function(){var e="attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct",t="radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData",n=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t},"identifier");this.$rules=(new i).$rules,this.$rules.start.forEach(function(e){typeof e.token=="function"&&(e.token=n)})};r.inherits(s,i),t.glslHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-golang.js b/ehcp/net2ftp/plugins/ace/mode-golang.js new file mode 100644 index 0000000..e5fb1db --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-golang.js @@ -0,0 +1 @@ +ace.define("ace/mode/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./golang_highlight_rules").GolangHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.foldingRules=new f};r.inherits(l,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new Range(0,0,0,0);for(var o=n;o<=r;o++){var a=t.getLine(o),f=a.match(s);u.start.row=o,u.end.row=o,u.end.column=f[0].length,t.replace(u,f[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/golang_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="true|else|false|break|case|return|goto|if|const|continue|struct|default|switch|for|func|import|package|chan|defer|fallthrough|go|interface|map|rangeselect|type|var",t="nil|true|false|iota",n=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:n,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.GolangHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-groovy.js b/ehcp/net2ftp/plugins/ace/mode-groovy.js new file mode 100644 index 0000000..d12ed3e --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-groovy.js @@ -0,0 +1 @@ +ace.define("ace/mode/groovy",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/groovy_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("../tokenizer").Tokenizer,o=e("./groovy_highlight_rules").GroovyHighlightRules,u=function(){i.call(this),this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),function(){this.createWorker=function(e){return null}}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/groovy_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"support.function":n,"constant.language":t},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'"""',next:"qqstring"},{token:"string",regex:"'''",next:"qstring"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\?:|\\?\\.|\\*\\.|<=>|=~|==~|\\.@|\\*\\.@|\\.&|as|in|is|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:/\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:"constant.language.escape",regex:/\$[\w\d]+/},{token:"constant.language.escape",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"{3,5}',next:"start"},{token:"string",regex:".+?"}],qstring:[{token:"constant.language.escape",regex:/\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:"string",regex:"'{3,5}",next:"start"},{token:"string",regex:".+?"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.GroovyHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-haml.js b/ehcp/net2ftp/plugins/ace/mode-haml.js new file mode 100644 index 0000000..169d903 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-haml.js @@ -0,0 +1 @@ +ace.define("ace/mode/haml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/haml_highlight_rules","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./haml_highlight_rules").HamlHighlightRules,u=e("./folding/coffee").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/haml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/ruby_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./ruby_highlight_rules"),o=s.RubyHighlightRules,u=function(){this.$rules={start:[{token:"punctuation.section.comment",regex:/^\s*\/.*/},{token:"punctuation.section.comment",regex:/^\s*#.*/},{token:"string.quoted.double",regex:"==.+?=="},{token:"keyword.other.doctype",regex:"^!!!\\s*(?:[a-zA-Z0-9-_]+)?"},s.qString,s.qqString,s.tString,{token:["entity.name.tag.haml"],regex:/^\s*%[\w:]+/,next:"tag_single"},{token:["meta.escape.haml"],regex:"^\\s*\\\\."},s.constantNumericHex,s.constantNumericFloat,s.constantOtherSymbol,{token:"text",regex:"=|-|~",next:"embedded_ruby"}],tag_single:[{token:"entity.other.attribute-name.class.haml",regex:"\\.[\\w-]+"},{token:"entity.other.attribute-name.id.haml",regex:"#[\\w-]+"},{token:"punctuation.section",regex:"\\{",next:"section"},s.constantOtherSymbol,{token:"text",regex:/\s/,next:"start"},{token:["text","punctuation"],regex:"($)|((?!\\.|#|\\{|\\[|=|-|~|\\/))",next:"start"}],section:[s.constantOtherSymbol,s.qString,s.qqString,s.tString,s.constantNumericHex,s.constantNumericFloat,{token:"punctuation.section",regex:"\\}",next:"start"}],embedded_ruby:[s.constantNumericHex,s.constantNumericFloat,{token:"support.class",regex:"[A-Z][a-zA-Z_\\d]+"},{token:(new o).getKeywords(),regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:["keyword","text","text"],regex:"(?:do|\\{)(?: \\|[^|]+\\|)?$",next:"start"},{token:["text"],regex:"^$",next:"start"},{token:["text"],regex:"^(?!.*\\|\\s*$)",next:"start"}]}};r.inherits(u,i),t.HamlHighlightRules=u}),ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.constantOtherSymbol={token:"constant.other.symbol.ruby",regex:"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"},o=t.qString={token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},u=t.qqString={token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},a=t.tString={token:"string",regex:"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"},f=t.constantNumericHex={token:"constant.numeric",regex:"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"},l=t.constantNumericFloat={token:"constant.numeric",regex:"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"},c=function(){var e="abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|h|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|t|l|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many",t="alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield",n="true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING",r="$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self",i=this.$keywords=this.createKeywordMapper({keyword:t,"constant.language":n,"variable.language":r,"support.function":e,"invalid.deprecated":"debugger"},"identifier");this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment",merge:!0,regex:"^=begin\\s",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},o,u,a,{token:"text",regex:"::"},{token:"variable.instance",regex:"@{1,2}[a-zA-Z_\\d]+"},{token:"support.class",regex:"[A-Z][a-zA-Z_\\d]+"},s,f,l,{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"punctuation.separator.key-value",regex:"=>"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end\\s.*$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-haxe.js b/ehcp/net2ftp/plugins/ace/mode-haxe.js new file mode 100644 index 0000000..a79eafa --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-haxe.js @@ -0,0 +1 @@ +ace.define("ace/mode/haxe",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/haxe_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./haxe_highlight_rules").HaxeHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/haxe_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std",t="null|true|false",n=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:n,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({<]"},{token:"paren.rparen",regex:"[\\])}>]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.HaxeHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-html.js b/ehcp/net2ftp/plugins/ace/mode-html.js new file mode 100644 index 0000000..8d7cf91 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-html.js @@ -0,0 +1 @@ +ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/html","ace/mode/folding/html"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./css").Mode,u=e("../tokenizer").Tokenizer,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/html").HtmlBehaviour,l=e("./folding/html").FoldMode,c=function(){var e=new a;this.$tokenizer=new u(e.getRules()),this.$behaviour=new f,this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"css-":o}),this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){return 0},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/html",["require","exports","module","ace/lib/oop","ace/mode/behaviour/xml","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour/xml").XmlBehaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],f=function(){this.inherit(i),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),f=new o(r,s.row,s.column),l=f.getCurrentToken(),c=!1;if(!l||!a(l,"meta.tag")&&(!a(l,"text")||!l.value.match("/"))){do l=f.stepBackward();while(l&&(a(l,"string")||a(l,"keyword.operator")||a(l,"entity.attribute-name")||a(l,"text")))}else c=!0;if(!l||!a(l,"meta.tag-name")||f.stepBackward().value.match("/"))return;var h=l.value;if(c)var h=h.substring(0,s.column-l.start);if(u.indexOf(h)!==-1)return;return{text:"></"+h+">",selection:[1,1]}}})};r.inherits(f,i),t.HtmlBehaviour=f}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(){i.call(this,new s({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-jade.js b/ehcp/net2ftp/plugins/ace/mode-jade.js new file mode 100644 index 0000000..1eeb2ed --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-jade.js @@ -0,0 +1 @@ +ace.define("ace/mode/jade",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/jade_highlight_rules","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./jade_highlight_rules").JadeHighlightRules,u=e("./folding/coffee").FoldMode,a=function(){var e=new o;this.$tokenizer=new s(e.getRules()),this.foldingRules=new u};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/jade_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/markdown_highlight_rules","ace/mode/scss_highlight_rules","ace/mode/less_highlight_rules","ace/mode/coffee_highlight_rules","ace/mode/javascript_highlight_rules"],function(e,t,n){function l(e,t){return{token:"entity.name.function.jade",regex:"^\\s*\\:"+e,next:t+"start"}}var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./markdown_highlight_rules").MarkdownHighlightRules,o=e("./scss_highlight_rules").ScssHighlightRules,u=e("./less_highlight_rules").LessHighlightRules,a=e("./coffee_highlight_rules").CoffeeHighlightRules,f=e("./javascript_highlight_rules").JavaScriptHighlightRules,c=function(){var e="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"keyword.control.import.include.jade",regex:"\\s*\\binclude\\b"},{token:"keyword.other.doctype.jade",regex:"^!!!\\s*(?:[a-zA-Z0-9-_]+)?"},{token:"punctuation.section.comment",regex:"^\\s*//(?:\\s*[^-\\s]|\\s+\\S)(?:.*$)"},{token:function(e,t){return"punctuation.section.comment"},regex:"^((\\s*)//)(?:\\s*$)",next:"comment_block"},l("markdown","markdown-"),l("sass","sass-"),l("less","less-"),l("coffee","coffee-"),{token:["storage.type.function.jade","entity.name.function.jade","punctuation.definition.parameters.begin.jade","variable.parameter.function.jade","punctuation.definition.parameters.end.jade"],regex:"^(\\s*mixin)( [\\w\\-]+)(\\s*\\()(.*?)(\\))"},{token:["storage.type.function.jade","entity.name.function.jade"],regex:"^(\\s*mixin)( [\\w\\-]+)"},{token:"source.js.embedded.jade",regex:"^\\s*(?:-|=|!=)",next:"js-start"},{token:"string.interpolated.jade",regex:"[#!]\\{[^\\}]+\\}"},{token:["meta.tag.any.jade","entity.variable.tag.jade"],regex:/^\s*(?!\w+\:)(?:[\w]+|(?=\.|#)])/,next:"tag_single"},{token:"suport.type.attribute.id.jade",regex:"#\\w+"},{token:"suport.type.attribute.class.jade",regex:"\\.\\w+"},{token:"punctuation",regex:"\\s*(?:\\()",next:"tag_attributes"}],comment_block:[{token:function(e){return"text"},regex:"^(\\1\\S|$)",captures:"1",next:"start"},{token:"comment.block.jade",merge:!0,regex:".+"}],tag_single:[{token:"entity.other.attribute-name.class.jade",regex:"\\.[\\w-]+"},{token:"entity.other.attribute-name.id.jade",regex:"#[\\w-]+"},{token:["text","punctuation"],regex:"($)|((?!\\.|#|=|-))",next:"start"}],tag_attributes:[{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"entity.other.attribute-name.jade",regex:"\\b[a-zA-Z\\-:]+"},{token:["entity.other.attribute-name.jade","punctuation"],regex:"\\b([a-zA-Z:\\.-]+)(=)",next:"attribute_strings"},{token:"punctuation",regex:"\\)",next:"start"}],attribute_strings:[{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"}],qqstring:[{token:"constant.language.escape",regex:e},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"tag_attributes",merge:!0}],qstring:[{token:"constant.language.escape",regex:e},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"tag_attributes",merge:!0}]},this.embedRules(f,"js-",[{token:"text",regex:".$",next:"start"}])};r.inherits(c,i),t.JadeHighlightRules=c}),ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){function f(e,t){return{token:"support.function",regex:"^```"+e+"\\s*$",next:t+"start"}}var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=e("./css_highlight_rules").CssHighlightRules,l=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:["support.function","support.function","support.function"],regex:"(`+)([^\\r]*?[^`])(\\1)"},{token:"support.function",regex:"^[ ]{4}.+"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.2",regex:"^\\-+(?=\\s*$)"},{token:function(e){return"markup.heading."+e.search(/[^#]/)},regex:"^#{1,6}(?:[^ #].*| +.*(?:[^ #].*|[^ ]+.* +#+ *))$"},f("(?:javascript|js)","js-"),f("xml","xml-"),f("html","html-"),f("css","css-"),{token:"support.function",regex:"^```[a-zA-Z]*\\s*$",next:"githubblock"},{token:"string",regex:"^>[ ].+$",next:"blockquote"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?(\\s*))$'},{token:["text","string","text","constant","text"],regex:"(\\[)((?:[[^\\]]*\\]|[^\\[\\]])*)(\\][ ]?(?:\\n[ ]*)?\\[)(.*?)(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:'(\\[)(\\[[^\\]]*\\]|[^\\[\\]]*)(\\]\\([ \\t]*)(<?(?:(?:[^\\(]*?\\([^\\)]*?\\)\\S*?)|(?:.*?))>?)((?:[ ]*"(?:.*?)"[ \\t]*)?)(\\))'},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\*[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\-[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\_[ ]?){3,}\\s*$"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock"},{token:["string","string","string"],regex:"([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["string","string","string"],regex:"([*]|[_](?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"},{token:"text",regex:"[^\\*_%$`\\[#<>]+"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:".+"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string",regex:".+"}],githubblock:[{token:"support.function",regex:"^```",next:"start"},{token:"support.function",regex:".+"}]},this.embedRules(s,"js-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(u,"html-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(a,"css-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(o,"xml-",[{token:"support.function",regex:"^```",next:"start"}])};r.inherits(l,i),t.MarkdownHighlightRules=l}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml_util"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},i.tag(this.$rules,"tag","start")};r.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),n=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),r=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),s=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),o=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),u="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:u+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:u},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":s.hasOwnProperty(i)?"keyword":n.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":r.hasOwnProperty(i.toLowerCase())?"support.constant.color":o.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|hue|saturation|lightness|alpha|round|ceil|floor|percentage|color|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem".split("|")),n=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),r=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),s=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare|when|not|and".split("|")),o=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),u="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:u+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:u},{token:function(e){return s.hasOwnProperty(e)?"keyword":"variable"},regex:"@[a-z0-9_\\-@]*\\b"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":s.hasOwnProperty(i)?"keyword":n.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":r.hasOwnProperty(i.toLowerCase())?"support.constant.color":o.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define("ace/mode/coffee_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){function s(){var e="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",t={token:"string",merge:!0,regex:".+"},n="this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes",r="true|false|null|undefined|NaN|Infinity",i="case|const|default|function|var|void|with|enum|export|implements|interface|let|package|private|protected|public|static|yield|__hasProp|slice|bind|indexOf",s="Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray",o="Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|",u="window|arguments|prototype|document",a=this.createKeywordMapper({keyword:n,"constant.language":r,"invalid.illegal":i,"language.support.class":s,"language.support.function":o,"variable.language":u},"identifier"),f={"({args})->":{token:["paren.lparen","text","paren.lparen","text","variable.parameter","text","paren.rparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\{)(\\s*)([$@A-Za-z_\\x7f-\\uffff][$@\\w\\s,\\x7f-\\uffff]*)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"},"({})->":{token:["paren.lparen","text","paren.lparen","text","paren.rparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\{)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"},"(args)->":{token:["paren.lparen","text","variable.parameter","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)([$@A-Za-z_\\x7f-\\uffff][\\s\\x21-\\uffff]*)(\\s*)(\\))(\\s*)([\\-=]>)"},"()->":{token:["paren.lparen","text","paren.rparen","text","storage.type"],regex:"(\\()(\\s*)(\\))(\\s*)([\\-=]>)"}};this.$rules={start:[{token:"constant.numeric",regex:"(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"},{token:"string",merge:!0,regex:"'''",next:"qdoc"},{token:"string",merge:!0,regex:'"""',next:"qqdoc"},{token:"string",merge:!0,regex:"'",next:"qstring"},{token:"string",merge:!0,regex:'"',next:"qqstring"},{token:"string",merge:!0,regex:"`",next:"js"},{token:"string.regex",merge:!0,regex:"///",next:"heregex"},{token:"string.regex",regex:/(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/},{token:"comment",merge:!0,regex:"###(?!#)",next:"comment"},{token:"comment",regex:"#.*"},{token:["punctuation.operator","identifier"],regex:"(\\.)("+i+")"},{token:"punctuation.operator",regex:"\\."},{token:["keyword","text","language.support.class","text","keyword","text","language.support.class"],regex:"(class)(\\s+)("+e+")(\\s+)(extends)(\\s+)("+e+")"},{token:["keyword","text","language.support.class"],regex:"(class)(\\s+)("+e+")"},{token:["entity.name.function","text","keyword.operator","text"].concat(f["({args})->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["({args})->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["({args})->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["({args})->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["({})->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["({})->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["({})->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["({})->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["(args)->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["(args)->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["(args)->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["(args)->"].regex},{token:["entity.name.function","text","keyword.operator","text"].concat(f["()->"].token),regex:"("+e+")(\\s*)(=)(\\s*)"+f["()->"].regex},{token:["entity.name.function","text","punctuation.operator","text"].concat(f["()->"].token),regex:"("+e+")(\\s*)(:)(\\s*)"+f["()->"].regex},{token:["entity.name.function","text","keyword.operator","text","storage.type"],regex:"("+e+")(\\s*)(=)(\\s*)([\\-=]>)"},{token:["entity.name.function","text","punctuation.operator","text","storage.type"],regex:"("+e+")(\\s*)(:)(\\s*)([\\-=]>)"},f["({args})->"],f["({})->"],f["(args)->"],f["()->"],{token:"identifier",regex:"(?:(?:\\.|::)\\s*)"+e},{token:"variable",regex:"@(?:"+e+")?"},{token:a,regex:e},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\."},{token:"storage.type",regex:"[\\-=]>"},{token:"keyword.operator",regex:"(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])"},{token:"paren.lparen",regex:"[({[]"},{token:"paren.rparen",regex:"[\\]})]"},{token:"text",regex:"\\s+"}],qdoc:[{token:"string",regex:".*?'''",next:"start"},t],qqdoc:[{token:"string",regex:'.*?"""',next:"start"},t],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",merge:!0,next:"start"},t],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',merge:!0,next:"start"},t],js:[{token:"string",merge:!0,regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"start"},t],heregex:[{token:"string.regex",regex:".*?///[imgy]{0,4}",next:"start"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",merge:!0,regex:"\\S+"}],comment:[{token:"comment",regex:".*?###",next:"start"},{token:"comment",merge:!0,regex:".+"}]}}var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-java.js b/ehcp/net2ftp/plugins/ace/mode-java.js new file mode 100644 index 0000000..1ed0dc8 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-java.js @@ -0,0 +1 @@ +ace.define("ace/mode/java",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/java_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("../tokenizer").Tokenizer,o=e("./java_highlight_rules").JavaHighlightRules,u=function(){i.call(this),this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),function(){this.createWorker=function(e){return null}}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-javascript.js b/ehcp/net2ftp/plugins/ace/mode-javascript.js new file mode 100644 index 0000000..2960f75 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-javascript.js @@ -0,0 +1 @@ +ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-json.js b/ehcp/net2ftp/plugins/ace/mode-json.js new file mode 100644 index 0000000..8052ec5 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-json.js @@ -0,0 +1 @@ +ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./json_highlight_rules").JsonHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=e("../worker/worker_client").WorkerClient,c=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f};r.inherits(c,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new l(["ace"],"ace/mode/json_worker","JsonWorker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations([t.data])}),t.on("ok",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"invalid.illegal",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"invalid.illegal",regex:"\\/\\/.*$"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:'"',next:"start",merge:!0},{token:"string",regex:"",next:"start",merge:!0}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-jsp.js b/ehcp/net2ftp/plugins/ace/mode-jsp.js new file mode 100644 index 0000000..19a71a1 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-jsp.js @@ -0,0 +1 @@ +ace.define("ace/mode/jsp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/jsp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./jsp_highlight_rules").JspHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){var e=new o;this.$tokenizer=new s(e.getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/jsp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/java_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./html_highlight_rules").HtmlHighlightRules,s=e("./java_highlight_rules").JavaHighlightRules,o=function(){i.call(this);for(var e in this.$rules)this.$rules[e].unshift({token:"meta.tag",regex:"<%@?|<%=?|<jsp:[^>]+>",next:"jsp-start"});var t="request|response|out|session|application|config|pageContext|page|Exception",n="page|include|taglib";this.embedRules(s,"jsp-"),this.$rules.start.unshift({token:"comment",merge:!0,regex:"<%--",next:"comment"}),this.$rules["jsp-start"].unshift({token:"meta.tag",regex:"%>|<\\/jsp:[^>]+>",next:"start"},{token:"variable.language",regex:t},{token:"keyword",regex:n}),this.$rules.comment.unshift({token:"comment",regex:".*?--%>",next:"start"})};r.inherits(o,i),t.JspHighlightRules=o}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-jsx.js b/ehcp/net2ftp/plugins/ace/mode-jsx.js new file mode 100644 index 0000000..63a6d40 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-jsx.js @@ -0,0 +1 @@ +ace.define("ace/mode/jsx",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/jsx_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){function l(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f}var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./jsx_highlight_rules").JsxHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode;r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/jsx_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){var e=i.arrayToMap("break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|if|throw|delete|in|try|class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|number|int|string|boolean|variant|log|assert".split("|")),t=i.arrayToMap("null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined".split("|")),n=i.arrayToMap("debugger|with|const|export|let|private|public|yield|protected|extern|native|as|operator|__fake__|__readonly__".split("|")),r="[a-zA-Z_][a-zA-Z0-9_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},s.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:["storage.type","text","entity.name.function"],regex:"(function)(\\s+)("+r+")"},{token:function(r){return r=="this"?"variable.language":r=="function"?"storage.type":e.hasOwnProperty(r)||n.hasOwnProperty(r)?"keyword":t.hasOwnProperty(r)?"constant.language":/^_?[A-Z][a-zA-Z0-9_]*$/.test(r)?"language.support.class":"identifier"},regex:r},{token:"keyword.operator",regex:"!|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({<]"},{token:"paren.rparen",regex:"[\\])}>]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(u,o),t.JsxHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-latex.js b/ehcp/net2ftp/plugins/ace/mode-latex.js new file mode 100644 index 0000000..ddc27b4 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-latex.js @@ -0,0 +1 @@ +ace.define("ace/mode/latex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/latex_highlight_rules","ace/mode/folding/latex","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./latex_highlight_rules").LatexHighlightRules,u=e("./folding/latex").FoldMode,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.foldingRules=new u};r.inherits(f,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\%/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"%")},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/latex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"keyword",regex:"\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"string",regex:"\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"},{token:"comment",regex:"%.*$"}]}};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define("ace/mode/folding/latex",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=e("ace/token_iterator").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/^\s*\\(begin)|(section|subsection)\b|{\s*$/,this.foldingStopMarker=/^\s*\\(end)\b|^\s*}/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):i[2]?this.latexSection(e,n,i[0].length-1):this.openingBracketBlock(e,"{",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):this.closingBracketBlock(e,"}",n,i.index+i[0].length)},this.latexBlock=function(e,t,n){var r={"\\begin":1,"\\end":-1},i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=="keyword")return;var a=u.value,f=r[a],l=function(){var e=i.stepForward(),t=e.type=="lparen"?i.stepForward().value:"";return f===-1&&(i.stepBackward(),t&&i.stepBackward()),t},c=[l()],h=f===-1?i.getCurrentTokenColumn():e.getLine(t).length,p=t;i.step=f===-1?i.stepBackward:i.stepForward;while(u=i.step()){if(u.type!=="keyword")continue;var d=r[u.value];if(!d)continue;var v=l();if(d===f)c.unshift(v);else if(c.shift()!==v||!c.length)break}if(c.length)return;var t=i.getCurrentTokenRow();return f===-1?new s(t,e.getLine(t).length,p,h):new s(p,h,t,i.getCurrentTokenColumn())},this.latexSection=function(e,t,n){var r=["\\subsection","\\section","\\begin","\\end"],i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!="keyword")return;var a=r.indexOf(u.value),f=0,l=t;while(u=i.stepForward()){if(u.type!=="keyword")continue;var c=r.indexOf(u.value);if(c>=2){f||(l=i.getCurrentTokenRow()-1),f+=c==2?1:-1;if(f<0)break}else if(c>=a)break}f||(l=i.getCurrentTokenRow()-1);while(l>t&&!/\S/.test(e.getLine(l)))l--;return new s(t,e.getLine(t).length,l,e.getLine(l).length)}}.call(u.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-less.js b/ehcp/net2ftp/plugins/ace/mode-less.js new file mode 100644 index 0000000..68b4ca7 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-less.js @@ -0,0 +1 @@ +ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./less_highlight_rules").LessHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./folding/cstyle").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|hue|saturation|lightness|alpha|round|ceil|floor|percentage|color|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem".split("|")),n=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),r=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),s=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare|when|not|and".split("|")),o=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),u="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:u+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:u},{token:function(e){return s.hasOwnProperty(e)?"keyword":"variable"},regex:"@[a-z0-9_\\-@]*\\b"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":s.hasOwnProperty(i)?"keyword":n.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":r.hasOwnProperty(i.toLowerCase())?"support.constant.color":o.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-liquid.js b/ehcp/net2ftp/plugins/ace/mode-liquid.js new file mode 100644 index 0000000..e795a08 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-liquid.js @@ -0,0 +1 @@ +ace.define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./liquid_highlight_rules").LiquidHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u};r.inherits(f,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=[],o=/^(\s*)#/;for(var u=n;u<=r;u++)if(!o.test(t.getLine(u))){i=!1;break}if(i){var f=new a(0,0,0,0);for(var u=n;u<=r;u++){var l=t.getLine(u),c=l.match(o);f.start.row=u,f.end.row=u,f.end.column=c[0].length,t.replace(f,c[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/liquid_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./xml_util"),u=e("./text_highlight_rules").TextHighlightRules,a=function(){var e="date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split",t="capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow",n="forloop|tablerowloop",r="assign",u=this.createKeywordMapper({"variable.language":n,keyword:t,"support.function":e,"keyword.definition":r},"identifier");this.$rules={start:[{token:"variable",regex:"{%",next:"liquid_start"},{token:"variable",regex:"{{",next:"liquid_start"},{token:"meta.tag",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<(?=\\s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=\\s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}],liquid_start:[{token:"variable",regex:"}}",next:"start"},{token:"variable",regex:"%}",next:"start"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"/|\\*|\\-|\\+|=|!=|\\?\\:"},{token:"paren.lparen",regex:/[\[\({]/},{token:"paren.rparen",regex:/[\])}]/},{token:"text",regex:"\\s+"}]},o.tag(this.$rules,"tag","start"),o.tag(this.$rules,"style","css-start"),o.tag(this.$rules,"script","js-start"),this.embedRules(s,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(i,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(a,u),t.LiquidHighlightRules=a}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-lisp.js b/ehcp/net2ftp/plugins/ace/mode-lisp.js new file mode 100644 index 0000000..a27f236 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-lisp.js @@ -0,0 +1 @@ +ace.define("ace/mode/lisp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lisp_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lisp_highlight_rules").LispHighlightRules,u=function(){var e=new o;this.$tokenizer=new s(e.getRules())};r.inherits(u,i),function(){}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/lisp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="case|do|let|loop|if|else|when",t="eq|neq|and|or",n="null|nil",r="cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn",i=this.createKeywordMapper({"keyword.control":e,"keyword.operator":t,"constant.language":n,"support.function":r},"identifier",!0);this.$rules={start:[{token:"comment",regex:";.*$"},{token:["storage.type.function-type.lisp","text","entity.name.function.lisp"],regex:"(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"},{token:["punctuation.definition.constant.character.lisp","constant.character.lisp"],regex:"(#)((?:\\w|[\\\\+-=<>'\"&#])+)"},{token:["punctuation.definition.variable.lisp","variable.other.global.lisp","punctuation.definition.variable.lisp"],regex:"(\\*)(\\S*)(\\*)"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:'"(?=.)',next:"qqstring"}],qqstring:[{token:"constant.character.escape.lisp",regex:"\\\\."},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}]}};r.inherits(s,i),t.LispHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-lua.js b/ehcp/net2ftp/plugins/ace/mode-lua.js new file mode 100644 index 0000000..d8d8f40 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-lua.js @@ -0,0 +1 @@ +ace.define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lua_highlight_rules").LuaHighlightRules,u=e("./folding/lua").FoldMode,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.foldingRules=new u};r.inherits(f,i),function(){function n(t){var n=0;for(var r in t){var i=t[r];i.type=="keyword"?i.value in e&&(n+=e[i.value]):i.type=="paren.lparen"?n++:i.type=="paren.rparen"&&n--}return n<0?-1:n>0?1:0}var e={"function":1,then:1,"do":1,"else":1,elseif:1,repeat:1,end:-1,until:-1},t=["else","elseif","end","until"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.$tokenizer.getLineTokens(t,e),u=o.tokens;return e=="start"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,"\n")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!="\n"&&r!="\r"&&r!="\r\n")return!1;if(n.match(/^\s*[\)\}\]]$/))return!0;var i=this.$tokenizer.getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type=="keyword"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.$tokenizer.getLineTokens(i,"start").tokens,u=t.getTabString().length,f=s+u*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<f)return;t.outdentRows(new a(r,0,r+2,0))}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not",t="true|false|nil|_G|_VERSION",n="string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber",r="string|package|os|io|math|debug|table|coroutine",i="",s="setn|foreach|foreachi|gcinfo|log10|maxn",o=this.createKeywordMapper({keyword:e,"support.function":n,"invalid.deprecated":s,"constant.library":r,"constant.language":t,"invalid.illegal":i,"variable.language":"this"},"identifier"),u="",a="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[xX][\\dA-Fa-f]+)",l="(?:"+a+"|"+f+")",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:"+p+")",v=[];this.$rules={start:[{token:"comment",regex:u+"\\-\\-\\[\\[.*\\]\\]"},{token:"comment",regex:u+"\\-\\-\\[\\=\\[.*\\]\\=\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"comment",regex:u+"\\-\\-\\[\\[.*$",merge:!0,next:"qcomment"},{token:"comment",regex:u+"\\-\\-\\[\\=\\[.*$",merge:!0,next:"qcomment1"},{token:"comment",regex:u+"\\-\\-\\[\\={2}\\[.*$",merge:!0,next:"qcomment2"},{token:"comment",regex:u+"\\-\\-\\[\\={3}\\[.*$",merge:!0,next:"qcomment3"},{token:"comment",regex:u+"\\-\\-\\[\\={4}\\[.*$",merge:!0,next:"qcomment4"},{token:function(e){var t=/\-\-\[(\=+)\[/,n;return(n=t.exec(e))!=null&&(n=n[1])!=undefined&&v.push(n.length),"comment"},regex:u+"\\-\\-\\[\\={5}\\=*\\[.*$",merge:!0,next:"qcomment5"},{token:"comment",regex:"\\-\\-.*$"},{token:"string",regex:u+"\\[\\[.*\\]\\]"},{token:"string",regex:u+"\\[\\=\\[.*\\]\\=\\]"},{token:"string",regex:u+"\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"string",regex:u+"\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"string",regex:u+"\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"string",regex:u+"\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"string",regex:u+"\\[\\[.*$",merge:!0,next:"qstring"},{token:"string",regex:u+"\\[\\=\\[.*$",merge:!0,next:"qstring1"},{token:"string",regex:u+"\\[\\={2}\\[.*$",merge:!0,next:"qstring2"},{token:"string",regex:u+"\\[\\={3}\\[.*$",merge:!0,next:"qstring3"},{token:"string",regex:u+"\\[\\={4}\\[.*$",merge:!0,next:"qstring4"},{token:function(e){var t=/\[(\=+)\[/,n;return(n=t.exec(e))!=null&&(n=n[1])!=undefined&&v.push(n.length),"string"},regex:u+"\\[\\={5}\\=*\\[.*$",merge:!0,next:"qstring5"},{token:"string",regex:u+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:u+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:d},{token:"constant.numeric",regex:l+"\\b"},{token:o,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qcomment:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment1:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment2:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment3:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment4:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment5:[{token:function(e){var t=/\](\=+)\]/,n=this.rules.qcomment5[0],r;n.next="start";if((r=t.exec(e))!=null&&(r=r[1])!=undefined){var i=r.length,s;(s=v.pop())!=i&&(v.push(s),n.next="qcomment5")}return"comment"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring1:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring2:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring3:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring4:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring5:[{token:function(e){var t=/\](\=+)\]/,n=this.rules.qstring5[0],r;n.next="start";if((r=t.exec(e))!=null&&(r=r[1])!=undefined){var i=r.length,s;(s=v.pop())!=i&&(v.push(s),n.next="qstring5")}return"string"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=e("ace/token_iterator").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/,this.foldingStopMarker=/\bend\b|^\s*}|\]=*\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]=="then"&&/\belseif\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type==="keyword")return"start"}else{if(!o[2])return"start";var u=e.bgTokenizer.getState(n)||"";if(u.indexOf("comment")!=-1||u.indexOf("string")!=-1)return"start"}}if(t!="markbeginend"||!s||i&&s)return"";var o=r.match(this.foldingStopMarker);if(o[0]==="end"){if(e.getTokenAt(n,o.index+1).type==="keyword")return"end"}else{if(o[0][0]!=="]")return"end";var u=e.bgTokenizer.getState(n-1)||"";if(u.indexOf("comment")!=-1||u.indexOf("string")!=-1)return"end"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,"{",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]==="end"&&e.getTokenAt(n,i.index+1).type==="keyword"?this.luaBlock(e,n,i.index+1):i[0][0]==="]"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,"}",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={"function":1,"do":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!="keyword")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!=="keyword")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!="elseif")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-luahtml.js b/ehcp/net2ftp/plugins/ace/mode-luahtml.js new file mode 100644 index 0000000..9245fc4 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-luahtml.js @@ -0,0 +1 @@ +ace.define("ace/mode/luahtml",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/lua","ace/tokenizer","ace/mode/luahtml_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("./html").Mode,f=a("./lua").Mode,g=a("../tokenizer").Tokenizer,h=a("./luahtml_highlight_rules").LuaHtmlHighlightRules,i=function(){var a=new h;this.$tokenizer=new g((new h).getRules()),this.$embeds=a.getEmbeds(),this.createModeDelegates({"lua-":f})};d.inherits(i,e),b.Mode=i}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("./javascript").Mode,g=a("./css").Mode,h=a("../tokenizer").Tokenizer,i=a("./html_highlight_rules").HtmlHighlightRules,j=a("./behaviour/xml").XmlBehaviour,k=a("./folding/html").FoldMode,l=function(){var a=new i;this.$tokenizer=new h(a.getRules()),this.$behaviour=new j,this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"css-":g}),this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){return 0},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)},this.checkOutdent=function(a,b,c){return!1}}.call(l.prototype),b.Mode=l}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b",l="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},g.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+k+")(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+k+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"storage.type":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[g.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("../range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row),m=0,n,o=-1;for(var p=0;p<l.length;p++){n=l[p],n.type=="string"?o=-1:o<0&&(o=n.value.indexOf(f));if(n.value.length+m>g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&(f=='"'||f=="'")){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){var d=a("../../range").Range,e=b.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e,f,g){var h={row:c,column:e+1},i=a.$findClosingBracket(b,h,f,g);if(!i)return;var j=a.foldWidgets[i.row];return j==null&&(j=this.getFoldWidget(a,i.row)),j=="start"&&(i.row--,i.column=a.getLine(i.row).length),d.fromPoints(h,i)}}).call(e.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/folding/cstyle"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./css_highlight_rules").CssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../worker/worker_client").WorkerClient,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new i(["ace"],"worker-css.js","ace/mode/css_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)}),b}}.call(k.prototype),b.Mode=k}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f=e.arrayToMap("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("./css_highlight_rules").CssHighlightRules,f=a("./javascript_highlight_rules").JavaScriptHighlightRules,g=a("./xml_util"),h=a("./text_highlight_rules").TextHighlightRules,i=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},g.tag(this.$rules,"tag","start"),g.tag(this.$rules,"style","css-start"),g.tag(this.$rules,"script","js-start"),this.embedRules(f,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(e,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};d.inherits(i,h),b.HtmlHighlightRules=i}),ace.define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"_qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:]+",next:b+"_embed_attribute_list"},{token:"empty",regex:"",next:b+"_embed_attribute_list"}],a[b+"_qstring"]=h("'",b+"_embed_attribute_list"),a[b+"_qqstring"]=h('"',b+"_embed_attribute_list"),a[b+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(a,b,c){var d=a("../../lib/oop"),e=a("./mixed").FoldMode,f=a("./xml").FoldMode,g=a("./cstyle").FoldMode,h=b.FoldMode=function(){e.call(this,new f({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new g,"css-":new g})};d.inherits(h,e)}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a,b){this.defaultMode=a,this.subModes=b};d.inherits(f,e),function(){this.$getMode=function(a){for(var b in this.subModes)if(a.indexOf(b)===0)return this.subModes[b];return null},this.$tryMode=function(a,b,c,d){var e=this.$getMode(a);return e?e.getFoldWidget(b,c,d):""},this.getFoldWidget=function(a,b,c){return this.$tryMode(a.getState(c-1),a,b,c)||this.$tryMode(a.getState(c),a,b,c)||this.defaultMode.getFoldWidget(a,b,c)},this.getFoldWidgetRange=function(a,b,c){var d=this.$getMode(a.getState(c-1));if(!d||!d.getFoldWidget(a,b,c))d=this.$getMode(a.getState(c));if(!d||!d.getFoldWidget(a,b,c))d=this.defaultMode;return d.getFoldWidgetRange(a,b,c)}}.call(f.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b),d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),ace.define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lua_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./lua_highlight_rules").LuaHighlightRules,h=function(){this.$tokenizer=new f((new g).getRules())};d.inherits(h,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=["function","then","do","repeat"];if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);if(h)d+=c;else for(var i in f){var j=f[i];if(j.type!="keyword")continue;var k=g.indexOf(j.value);if(k!=-1){d+=c;break}}}return d}}.call(h.prototype),b.Mode=h}),ace.define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not".split("|")),b=e.arrayToMap("true|false|nil|_G|_VERSION".split("|")),c=e.arrayToMap("string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running".split("|")),d=e.arrayToMap("string|package|os|io|math|debug|table|coroutine".split("|")),f=e.arrayToMap("__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber".split("|")),g=e.arrayToMap("".split("|")),h=e.arrayToMap("setn|foreach|foreachi|gcinfo|log10|maxn".split("|")),i="",j="(?:(?:[1-9]\\d*)|(?:0))",k="(?:0[xX][\\dA-Fa-f]+)",l="(?:"+j+"|"+k+")",m="(?:\\.\\d+)",n="(?:\\d+)",o="(?:(?:"+n+"?"+m+")|(?:"+n+"\\.))",p="(?:"+o+")",q=[];this.$rules={start:[{token:"comment",regex:i+"\\-\\-\\[\\[.*\\]\\]"},{token:"comment",regex:i+"\\-\\-\\[\\=\\[.*\\]\\=\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"comment",regex:i+"\\-\\-\\[\\[.*$",merge:!0,next:"qcomment"},{token:"comment",regex:i+"\\-\\-\\[\\=\\[.*$",merge:!0,next:"qcomment1"},{token:"comment",regex:i+"\\-\\-\\[\\={2}\\[.*$",merge:!0,next:"qcomment2"},{token:"comment",regex:i+"\\-\\-\\[\\={3}\\[.*$",merge:!0,next:"qcomment3"},{token:"comment",regex:i+"\\-\\-\\[\\={4}\\[.*$",merge:!0,next:"qcomment4"},{token:function(a){var b=/\-\-\[(\=+)\[/,c;return(c=b.exec(a))!=null&&(c=c[1])!=undefined&&q.push(c.length),"comment"},regex:i+"\\-\\-\\[\\={5}\\=*\\[.*$",merge:!0,next:"qcomment5"},{token:"comment",regex:"\\-\\-.*$"},{token:"string",regex:i+"\\[\\[.*\\]\\]"},{token:"string",regex:i+"\\[\\=\\[.*\\]\\=\\]"},{token:"string",regex:i+"\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"string",regex:i+"\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"string",regex:i+"\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"string",regex:i+"\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"string",regex:i+"\\[\\[.*$",merge:!0,next:"qstring"},{token:"string",regex:i+"\\[\\=\\[.*$",merge:!0,next:"qstring1"},{token:"string",regex:i+"\\[\\={2}\\[.*$",merge:!0,next:"qstring2"},{token:"string",regex:i+"\\[\\={3}\\[.*$",merge:!0,next:"qstring3"},{token:"string",regex:i+"\\[\\={4}\\[.*$",merge:!0,next:"qstring4"},{token:function(a){var b=/\[(\=+)\[/,c;return(c=b.exec(a))!=null&&(c=c[1])!=undefined&&q.push(c.length),"string"},regex:i+"\\[\\={5}\\=*\\[.*$",merge:!0,next:"qstring5"},{token:"string",regex:i+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:i+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:p},{token:"constant.numeric",regex:l+"\\b"},{token:function(e){return a.hasOwnProperty(e)?"keyword":b.hasOwnProperty(e)?"constant.language":g.hasOwnProperty(e)?"invalid.illegal":d.hasOwnProperty(e)?"constant.library":h.hasOwnProperty(e)?"invalid.deprecated":c.hasOwnProperty(e)?"support.function":f.hasOwnProperty(e)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qcomment:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment1:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment2:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment3:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment4:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qcomment5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=q.pop())!=e&&(q.push(f),c.next="qcomment5")}return"comment"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring1:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring2:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring3:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring4:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qstring5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=q.pop())!=e&&(q.push(f),c.next="qstring5")}return"string"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.LuaHighlightRules=g}),ace.define("ace/mode/luahtml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/lua_highlight_rules"],function(a,b,c){var d=a("../lib/oop"),e=a("./html_highlight_rules").HtmlHighlightRules,f=a("./lua_highlight_rules").LuaHighlightRules,g=function(){this.$rules=(new e).getRules();for(var a in this.$rules)this.$rules[a].unshift({token:"luatag-percent",regex:"<\\%",next:"lua-start"},{token:"luatag-lua",regex:"<\\?lua",next:"lua-start"});this.embedRules(f,"lua-",[{token:"keyword1",regex:"\\%>",next:"start"},{token:"keyword2",regex:"\\?>",next:"start"}])};d.inherits(g,e),b.LuaHtmlHighlightRules=g}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-luapage.js b/ehcp/net2ftp/plugins/ace/mode-luapage.js new file mode 100644 index 0000000..7b2aba9 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-luapage.js @@ -0,0 +1 @@ +ace.define("ace/mode/luapage",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/lua","ace/tokenizer","ace/mode/luapage_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./html").Mode,s=e("./lua").Mode,o=e("../tokenizer").Tokenizer,u=e("./luapage_highlight_rules").LuaPageHighlightRules,a=function(){var e=new u;this.$tokenizer=new o((new u).getRules()),this.$embeds=e.getEmbeds(),this.createModeDelegates({"lua-":s})};r.inherits(a,i),t.Mode=a}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/html","ace/mode/folding/html"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./css").Mode,u=e("../tokenizer").Tokenizer,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/html").HtmlBehaviour,l=e("./folding/html").FoldMode,c=function(){var e=new a;this.$tokenizer=new u(e.getRules()),this.$behaviour=new f,this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"css-":o}),this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){return 0},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/html",["require","exports","module","ace/lib/oop","ace/mode/behaviour/xml","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour/xml").XmlBehaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],f=function(){this.inherit(i),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),f=new o(r,s.row,s.column),l=f.getCurrentToken(),c=!1;if(!l||!a(l,"meta.tag")&&(!a(l,"text")||!l.value.match("/"))){do l=f.stepBackward();while(l&&(a(l,"string")||a(l,"keyword.operator")||a(l,"entity.attribute-name")||a(l,"text")))}else c=!0;if(!l||!a(l,"meta.tag-name")||f.stepBackward().value.match("/"))return;var h=l.value;if(c)var h=h.substring(0,s.column-l.start);if(u.indexOf(h)!==-1)return;return{text:"></"+h+">",selection:[1,1]}}})};r.inherits(f,i),t.HtmlBehaviour=f}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(){i.call(this,new s({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}),ace.define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lua_highlight_rules").LuaHighlightRules,u=e("./folding/lua").FoldMode,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.foldingRules=new u};r.inherits(f,i),function(){function n(t){var n=0;for(var r in t){var i=t[r];i.type=="keyword"?i.value in e&&(n+=e[i.value]):i.type=="paren.lparen"?n++:i.type=="paren.rparen"&&n--}return n<0?-1:n>0?1:0}var e={"function":1,then:1,"do":1,"else":1,elseif:1,repeat:1,end:-1,until:-1},t=["else","elseif","end","until"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.$tokenizer.getLineTokens(t,e),u=o.tokens;return e=="start"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,"\n")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!="\n"&&r!="\r"&&r!="\r\n")return!1;if(n.match(/^\s*[\)\}\]]$/))return!0;var i=this.$tokenizer.getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type=="keyword"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.$tokenizer.getLineTokens(i,"start").tokens,u=t.getTabString().length,f=s+u*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<f)return;t.outdentRows(new a(r,0,r+2,0))}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not",t="true|false|nil|_G|_VERSION",n="string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber",r="string|package|os|io|math|debug|table|coroutine",i="",s="setn|foreach|foreachi|gcinfo|log10|maxn",o=this.createKeywordMapper({keyword:e,"support.function":n,"invalid.deprecated":s,"constant.library":r,"constant.language":t,"invalid.illegal":i,"variable.language":"this"},"identifier"),u="",a="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[xX][\\dA-Fa-f]+)",l="(?:"+a+"|"+f+")",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:"+p+")",v=[];this.$rules={start:[{token:"comment",regex:u+"\\-\\-\\[\\[.*\\]\\]"},{token:"comment",regex:u+"\\-\\-\\[\\=\\[.*\\]\\=\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"comment",regex:u+"\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"comment",regex:u+"\\-\\-\\[\\[.*$",merge:!0,next:"qcomment"},{token:"comment",regex:u+"\\-\\-\\[\\=\\[.*$",merge:!0,next:"qcomment1"},{token:"comment",regex:u+"\\-\\-\\[\\={2}\\[.*$",merge:!0,next:"qcomment2"},{token:"comment",regex:u+"\\-\\-\\[\\={3}\\[.*$",merge:!0,next:"qcomment3"},{token:"comment",regex:u+"\\-\\-\\[\\={4}\\[.*$",merge:!0,next:"qcomment4"},{token:function(e){var t=/\-\-\[(\=+)\[/,n;return(n=t.exec(e))!=null&&(n=n[1])!=undefined&&v.push(n.length),"comment"},regex:u+"\\-\\-\\[\\={5}\\=*\\[.*$",merge:!0,next:"qcomment5"},{token:"comment",regex:"\\-\\-.*$"},{token:"string",regex:u+"\\[\\[.*\\]\\]"},{token:"string",regex:u+"\\[\\=\\[.*\\]\\=\\]"},{token:"string",regex:u+"\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"string",regex:u+"\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"string",regex:u+"\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"string",regex:u+"\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"string",regex:u+"\\[\\[.*$",merge:!0,next:"qstring"},{token:"string",regex:u+"\\[\\=\\[.*$",merge:!0,next:"qstring1"},{token:"string",regex:u+"\\[\\={2}\\[.*$",merge:!0,next:"qstring2"},{token:"string",regex:u+"\\[\\={3}\\[.*$",merge:!0,next:"qstring3"},{token:"string",regex:u+"\\[\\={4}\\[.*$",merge:!0,next:"qstring4"},{token:function(e){var t=/\[(\=+)\[/,n;return(n=t.exec(e))!=null&&(n=n[1])!=undefined&&v.push(n.length),"string"},regex:u+"\\[\\={5}\\=*\\[.*$",merge:!0,next:"qstring5"},{token:"string",regex:u+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:u+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:d},{token:"constant.numeric",regex:l+"\\b"},{token:o,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qcomment:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment1:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment2:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment3:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment4:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment5:[{token:function(e){var t=/\](\=+)\]/,n=this.rules.qcomment5[0],r;n.next="start";if((r=t.exec(e))!=null&&(r=r[1])!=undefined){var i=r.length,s;(s=v.pop())!=i&&(v.push(s),n.next="qcomment5")}return"comment"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring1:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring2:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring3:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring4:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring5:[{token:function(e){var t=/\](\=+)\]/,n=this.rules.qstring5[0],r;n.next="start";if((r=t.exec(e))!=null&&(r=r[1])!=undefined){var i=r.length,s;(s=v.pop())!=i&&(v.push(s),n.next="qstring5")}return"string"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=e("ace/token_iterator").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/,this.foldingStopMarker=/\bend\b|^\s*}|\]=*\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]=="then"&&/\belseif\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type==="keyword")return"start"}else{if(!o[2])return"start";var u=e.bgTokenizer.getState(n)||"";if(u.indexOf("comment")!=-1||u.indexOf("string")!=-1)return"start"}}if(t!="markbeginend"||!s||i&&s)return"";var o=r.match(this.foldingStopMarker);if(o[0]==="end"){if(e.getTokenAt(n,o.index+1).type==="keyword")return"end"}else{if(o[0][0]!=="]")return"end";var u=e.bgTokenizer.getState(n-1)||"";if(u.indexOf("comment")!=-1||u.indexOf("string")!=-1)return"end"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,"{",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]==="end"&&e.getTokenAt(n,i.index+1).type==="keyword"?this.luaBlock(e,n,i.index+1):i[0][0]==="]"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,"}",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={"function":1,"do":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!="keyword")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!=="keyword")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!="elseif")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),ace.define("ace/mode/luapage_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/lua_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./html_highlight_rules").HtmlHighlightRules,s=e("./lua_highlight_rules").LuaHighlightRules,o=function(){this.$rules=(new i).getRules();for(var e in this.$rules)this.$rules[e].unshift({token:"keyword",regex:"<\\%\\=?",next:"lua-start"},{token:"keyword",regex:"<\\?lua\\=?",next:"lua-start"});this.embedRules(s,"lua-",[{token:"keyword",regex:"\\%>",next:"start"},{token:"keyword",regex:"\\?>",next:"start"}])};r.inherits(o,i),t.LuaPageHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-lucene.js b/ehcp/net2ftp/plugins/ace/mode-lucene.js new file mode 100644 index 0000000..f95c0af --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-lucene.js @@ -0,0 +1 @@ +ace.define("ace/mode/lucene",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lucene_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lucene_highlight_rules").LuceneHighlightRules,u=function(){this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),t.Mode=u}),ace.define("ace/mode/lucene_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"constant.character.negation",regex:"[\\-]"},{token:"constant.character.interro",regex:"[\\?]"},{token:"constant.character.asterisk",regex:"[\\*]"},{token:"constant.character.proximity",regex:"~[0-9]+\\b"},{token:"keyword.operator",regex:"(?:AND|OR|NOT)\\b"},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"keyword",regex:"[\\S]+:"},{token:"string",regex:'".*?"'},{token:"text",regex:"\\s+"}]}};r.inherits(o,s),t.LuceneHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-makefile.js b/ehcp/net2ftp/plugins/ace/mode-makefile.js new file mode 100644 index 0000000..c567fd9 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-makefile.js @@ -0,0 +1 @@ +ace.define("ace/mode/makefile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/makefile_highlight_rules","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./makefile_highlight_rules").MakefileHighlightRules,u=e("./folding/coffee").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/makefile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/sh_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./sh_highlight_rules"),o=function(){var e=this.createKeywordMapper({keyword:s.reservedKeywords,"support.function.builtin":s.languageConstructs,"invalid.deprecated":"debugger"},"string");this.$rules={start:[{token:"string.interpolated.backtick.makefile",regex:"`",next:"shell-start"},{token:"punctuation.definition.comment.makefile",regex:/#(?=.)/,next:"comment"},{token:["keyword.control.makefile"],regex:"^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"},{token:["entity.name.function.makefile","text"],regex:"^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"}],comment:[{token:"punctuation.definition.comment.makefile",regex:/.+\\/},{token:"punctuation.definition.comment.makefile",regex:".+",next:"start"}],"shell-start":[{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:"\\w+"},{token:"string.interpolated.backtick.makefile",regex:"`",next:"start"}]}};r.inherits(o,i),t.MakefileHighlightRules=o}),ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z][a-zA-Z0-9_]*",c="(?:(?:\\$"+l+")|(?:"+l+"=))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'"(?:[^\\\\]|\\\\.)*?"'},{token:"variable.language",regex:h},{token:"variable",regex:c},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",regex:"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}]}};r.inherits(u,i),t.ShHighlightRules=u}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-markdown.js b/ehcp/net2ftp/plugins/ace/mode-markdown.js new file mode 100644 index 0000000..fda021a --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-markdown.js @@ -0,0 +1 @@ +ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/tokenizer","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./xml").Mode,u=e("./html").Mode,a=e("../tokenizer").Tokenizer,f=e("./markdown_highlight_rules").MarkdownHighlightRules,l=e("./folding/markdown").FoldMode,c=function(){var e=new f;this.$tokenizer=new a(e.getRules()),this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"xml-":o,"html-":u}),this.foldingRules=new l};r.inherits(c,i),function(){this.getNextLineIndent=function(e,t,n){if(e=="listblock"){var r=/^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(t);if(!r)return"";var i=r[2];return i||(i=parseInt(r[3],10)+1+"."),r[1]+i+r[4]}return this.$getIndent(t)}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules()),this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml_util"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},i.tag(this.$rules,"tag","start")};r.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/html","ace/mode/folding/html"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./css").Mode,u=e("../tokenizer").Tokenizer,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/html").HtmlBehaviour,l=e("./folding/html").FoldMode,c=function(){var e=new a;this.$tokenizer=new u(e.getRules()),this.$behaviour=new f,this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"css-":o}),this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){return 0},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/behaviour/html",["require","exports","module","ace/lib/oop","ace/mode/behaviour/xml","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour/xml").XmlBehaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],f=function(){this.inherit(i),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),f=new o(r,s.row,s.column),l=f.getCurrentToken(),c=!1;if(!l||!a(l,"meta.tag")&&(!a(l,"text")||!l.value.match("/"))){do l=f.stepBackward();while(l&&(a(l,"string")||a(l,"keyword.operator")||a(l,"entity.attribute-name")||a(l,"text")))}else c=!0;if(!l||!a(l,"meta.tag-name")||f.stepBackward().value.match("/"))return;var h=l.value;if(c)var h=h.substring(0,s.column-l.start);if(u.indexOf(h)!==-1)return;return{text:"></"+h+">",selection:[1,1]}}})};r.inherits(f,i),t.HtmlBehaviour=f}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(){i.call(this,new s({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){function f(e,t){return{token:"support.function",regex:"^```"+e+"\\s*$",next:t+"start"}}var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=e("./css_highlight_rules").CssHighlightRules,l=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:["support.function","support.function","support.function"],regex:"(`+)([^\\r]*?[^`])(\\1)"},{token:"support.function",regex:"^[ ]{4}.+"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.2",regex:"^\\-+(?=\\s*$)"},{token:function(e){return"markup.heading."+e.search(/[^#]/)},regex:"^#{1,6}(?:[^ #].*| +.*(?:[^ #].*|[^ ]+.* +#+ *))$"},f("(?:javascript|js)","js-"),f("xml","xml-"),f("html","html-"),f("css","css-"),{token:"support.function",regex:"^```[a-zA-Z]*\\s*$",next:"githubblock"},{token:"string",regex:"^>[ ].+$",next:"blockquote"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?(\\s*))$'},{token:["text","string","text","constant","text"],regex:"(\\[)((?:[[^\\]]*\\]|[^\\[\\]])*)(\\][ ]?(?:\\n[ ]*)?\\[)(.*?)(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:'(\\[)(\\[[^\\]]*\\]|[^\\[\\]]*)(\\]\\([ \\t]*)(<?(?:(?:[^\\(]*?\\([^\\)]*?\\)\\S*?)|(?:.*?))>?)((?:[ ]*"(?:.*?)"[ \\t]*)?)(\\))'},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\*[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\-[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\_[ ]?){3,}\\s*$"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock"},{token:["string","string","string"],regex:"([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["string","string","string"],regex:"([*]|[_](?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"},{token:"text",regex:"[^\\*_%$`\\[#<>]+"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:".+"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string",regex:".+"}],githubblock:[{token:"support.function",regex:"^```",next:"start"},{token:"support.function",regex:".+"}]},this.embedRules(s,"js-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(u,"html-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(a,"css-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(o,"xml-",[{token:"support.function",regex:"^```",next:"start"}])};r.inherits(l,i),t.MarkdownHighlightRules=l}),ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]=="`"?e.bgTokenizer.getState(n)=="start"?"end":"start":"start":""},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e=="="?6:e=="-"?5:7-f.value.search(/[^#]/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]=="`"){if(e.bgTokenizer.getState(n)!=="start"){while(++n<o){r=e.getLine(n);if(r[0]=="`"&r.substring(0,3)=="```")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]=="`"&r.substring(0,3)=="```")break}return new s(n,r.length,u,0)}var f,c="markup.heading";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||["=","-"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-objectivec.js b/ehcp/net2ftp/plugins/ace/mode-objectivec.js new file mode 100644 index 0000000..09b2506 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-objectivec.js @@ -0,0 +1 @@ +ace.define("ace/mode/objectivec",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/objectivec_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./objectivec_highlight_rules").ObjectiveCHighlightRules,u=e("./folding/cstyle").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/objectivec_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/c_cpp_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./c_cpp_highlight_rules"),o=s.c_cppHighlightRules,u=function(){var e="\\\\(?:[abefnrtv'\"?\\\\]|[0-3]\\d{1,2}|[4-7]\\d?|222|x[a-zA-Z0-9]+)",t=[{regex:"\\b_cmd\\b",token:"variable.other.selector.objc"},{regex:"\\b(?:self|super)\\b",token:"variable.language.objc"}],n=new o,r=n.getRules();this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:["storage.type.objc","punctuation.definition.storage.type.objc","entity.name.type.objc","text","entity.other.inherited-class.objc"],regex:"(@)(interface|protocol)(?!.+;)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*:\\s*)([A-Za-z]+)"},{token:["storage.type.objc"],regex:"(@end)"},{token:["storage.type.objc","entity.name.type.objc","entity.other.inherited-class.objc"],regex:"(@implementation)(\\s+[A-Za-z_][A-Za-z0-9_]*)(\\s*?::\\s*(?:[A-Za-z][A-Za-z0-9]*))?"},{token:"string.begin.objc",regex:'@"',next:"constant_NSString"},{token:"storage.type.objc",regex:"\\bid\\s*<",next:"protocol_list"},{token:"keyword.control.macro.objc",regex:"\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\b"},{token:["punctuation.definition.keyword.objc","keyword.control.exception.objc"],regex:"(@)(try|catch|finally|throw)\\b"},{token:["punctuation.definition.keyword.objc","keyword.other.objc"],regex:"(@)(defs|encode)\\b"},{token:["storage.type.id.objc","text"],regex:"(\\bid\\b)(\\s|\\n)?"},{token:"storage.type.objc",regex:"\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\b"},{token:["punctuation.definition.storage.type.objc","storage.type.objc"],regex:"(@)(class|protocol)\\b"},{token:["punctuation.definition.storage.type.objc","punctuation.definition.storage.type.objc","punctuation"],regex:"(@)(selector)(\\s*\\()",next:"selectors"},{token:["punctuation.definition.storage.modifier.objc","storage.modifier.objc"],regex:"(@)(synchronized|public|private|protected|package)\\b"},{token:"constant.language.objc",regex:"\\bYES|NO|Nil|nil\\b"},{token:"support.variable.foundation",regex:"\\bNSApp\\b"},{token:["support.function.cocoa.leopard"],regex:"(?:\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\b)"},{token:["support.function.cocoa"],regex:"(?:\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\b)"},{token:["support.class.cocoa.leopard"],regex:"(?:\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\b)"},{token:["support.class.cocoa"],regex:"(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)"},{token:["support.type.cocoa.leopard"],regex:"(?:\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\b)"},{token:["support.class.quartz"],regex:"(?:\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\b)"},{token:["support.type.quartz"],regex:"(?:\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\b)"},{token:["support.type.cocoa"],regex:"(?:\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\b)"},{token:["support.constant.cocoa"],regex:"(?:\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\b)"},{token:["support.constant.notification.cocoa.leopard"],regex:"(?:\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\b)"},{token:["support.constant.notification.cocoa"],regex:"(?:\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\b)"},{token:["support.constant.cocoa.leopard"],regex:"(?:\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\b)"},{token:["support.constant.cocoa"],regex:"(?:\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\b)"},{token:"support.function.C99.c",regex:s.cFunctions},{token:n.getKeywords(),regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"punctuation.section.scope.begin.objc",regex:"\\[",next:"bracketed_content"},{token:"meta.function.objc",regex:"^(?:-|\\+)\\s*"}],constant_NSString:[{token:"constant.character.escape.objc",regex:e},{token:"invalid.illegal.unknown-escape.objc",regex:"\\\\."},{token:"string",regex:'[^"\\\\]+'},{token:"punctuation.definition.string.end",regex:'"',next:"start"}],protocol_list:[{token:"punctuation.section.scope.end.objc",regex:">",next:"start"},{token:"support.other.protocol.objc",regex:"\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\b"}],selectors:[{token:"support.function.any-method.name-of-parameter.objc",regex:"\\b(?:[a-zA-Z_:][\\w]*)+"},{token:"punctuation",regex:"\\)",next:"start"}],bracketed_content:[{token:"punctuation.section.scope.end.objc",regex:"]",next:"start"},{token:["support.function.any-method.objc"],regex:"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)",next:"start"},{token:["support.function.any-method.objc","punctuation.separator.arguments.objc"],regex:"\\w+(?::|(?=]))",next:"start"}],bracketed_strings:[{token:"punctuation.section.scope.end.objc",regex:"]",next:"start"},{token:"keyword.operator.logical.predicate.cocoa",regex:"\\b(?:AND|OR|NOT|IN)\\b"},{token:["invalid.illegal.unknown-method.objc","punctuation.separator.arguments.objc"],regex:"\\b(w+)(:)"},{regex:"\\b(?:ALL|ANY|SOME|NONE)\\b",token:"constant.language.predicate.cocoa"},{regex:"\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\b",token:"constant.language.predicate.cocoa"},{regex:"\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\b",token:"keyword.operator.comparison.predicate.cocoa"},{regex:"\\bC(?:ASEINSENSITIVE|I)\\b",token:"keyword.other.modifier.predicate.cocoa"},{regex:"\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\b",token:"keyword.other.predicate.cocoa"},{regex:e,token:"constant.character.escape.objc"},{regex:"\\\\.",token:"invalid.illegal.unknown-escape.objc"},{token:"string",regex:'[^"\\\\]'},{token:"punctuation.definition.string.end.objc",regex:'"',next:"predicates"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],methods:[{token:"meta.function.objc",regex:"(?=\\{|#)|;",next:"start"}]};for(var u in r)if(u=="start")for(var a in r[u])this.$rules.start.push(r[u][a]);else this.$rules[u]=r[u];var f=this.$rules.start;for(var l in f)this.$rules.bracketed_content.push(f[l]);for(var l in t)this.$rules.bracketed_content.push(t[l]);this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(u,o),t.ObjectiveCHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\s*\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\b",u=function(){var e="break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using",t="asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template",n="const|extern|register|restrict|static|volatile|inline|private:|protected:|public:|friend|explicit|virtual|export|mutable|typename",r="and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace",s="NULL|true|false|TRUE|FALSE",u=this.$keywords=this.createKeywordMapper({"keyword.control":e,"storage.type":t,"storage.modifier":n,"keyword.operator":r,"variable.language":"this","constant.language":s},"identifier"),a="[a-zA-Z\\$_¡-￿][a-zA-Zd\\$_¡-￿]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#import|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:"support.function.C99.c",regex:o},{token:u,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-ocaml.js b/ehcp/net2ftp/plugins/ace/mode-ocaml.js new file mode 100644 index 0000000..eec1d4b --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-ocaml.js @@ -0,0 +1 @@ +ace.define("ace/mode/ocaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/ocaml_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./ocaml_highlight_rules").OcamlHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u};r.inherits(f,i);var l=/(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/;(function(){this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\s*\(\*(.*)\*\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:"(*"+s+"*)")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;return(!i.length||i[i.length-1].type!=="comment")&&e==="start"&&l.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}).call(f.prototype),t.Mode=f}),ace.define("ace/mode/ocaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with",t="true|false",n="abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier"),i="(?:(?:[1-9]\\d*)|(?:0))",s="(?:0[oO]?[0-7]+)",o="(?:0[xX][\\dA-Fa-f]+)",u="(?:0[bB][01]+)",a="(?:"+i+"|"+s+"|"+o+"|"+u+")",f="(?:[eE][+-]?\\d+)",l="(?:\\.\\d+)",c="(?:\\d+)",h="(?:(?:"+c+"?"+l+")|(?:"+c+"\\.))",p="(?:(?:"+h+"|"+c+")"+f+")",d="(?:"+p+"|"+h+")";this.$rules={start:[{token:"comment",regex:"\\(\\*.*?\\*\\)\\s*?$"},{token:"comment",merge:!0,regex:"\\(\\*.*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"'.'"},{token:"string",merge:!0,regex:'"',next:"qstring"},{token:"constant.numeric",regex:"(?:"+d+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:d},{token:"constant.numeric",regex:a+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|="},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\)",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:'"',next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.OcamlHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-perl.js b/ehcp/net2ftp/plugins/ace/mode-perl.js new file mode 100644 index 0000000..75f7d82 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-perl.js @@ -0,0 +1 @@ +ace.define("ace/mode/perl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/perl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./perl_highlight_rules").PerlHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.foldingRules=new f};r.inherits(l,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars",t="ARGV|ENV|INC|SIG",n="getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do",r=this.createKeywordMapper({keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-pgsql.js b/ehcp/net2ftp/plugins/ace/mode-pgsql.js new file mode 100644 index 0000000..0eddbf2 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-pgsql.js @@ -0,0 +1 @@ +ace.define("ace/mode/pgsql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/pgsql_highlight_rules","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("../mode/text").Mode,s=e("../tokenizer").Tokenizer,o=e("./pgsql_highlight_rules").PgsqlHighlightRules,u=e("../range").Range,a=function(){this.$tokenizer=new s((new o).getRules())};r.inherits(a,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)--/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var a=new u(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);a.start.row=o,a.end.row=o,a.end.column=l[0].length,t.replace(a,l[1])}}else t.indentRows(n,r,"--")},this.getNextLineIndent=function(e,t,n){return e=="start"||e=="keyword.statementEnd"?"":this.$getIndent(t)}}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/pgsql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/perl_highlight_rules","ace/mode/python_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./perl_highlight_rules").PerlHighlightRules,a=e("./python_highlight_rules").PythonHighlightRules,f=function(){var e="abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone",t="RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists",n=this.createKeywordMapper({"support.function":t,keyword:e},"identifier",!0),r=[{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"variable.language",regex:'".*?"'},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:n,regex:"[a-zA-Z_][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\*"},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}];this.$rules={start:[{token:"comment",regex:"--.*$"},s.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"keyword.statementBegin",regex:"^[a-zA-Z]+",next:"statement"},{token:"support.buildin",regex:"^\\\\[\\S]+.*$"}],statement:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentStatement"},{token:"statementEnd",regex:";",next:"start"},{token:"string",regex:"\\$perl\\$",next:"perl-start"},{token:"string",regex:"\\$python\\$",next:"python-start"},{token:"string",regex:"\\$[\\w_0-9]*\\$$",next:"dollarSql"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarStatementString"}].concat(r),dollarSql:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentDollarSql"},{token:"string",regex:"^\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarSqlString"}].concat(r),comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],commentStatement:[{token:"comment",regex:".*?\\*\\/",next:"statement"},{token:"comment",merge:!0,regex:".+"}],commentDollarSql:[{token:"comment",regex:".*?\\*\\/",next:"dollarSql"},{token:"comment",merge:!0,regex:".+"}],dollarStatementString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",merge:!0,regex:".+"}],dollarSqlString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"dollarSql"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(s,"doc-",[s.getEndRule("start")]),this.embedRules(u,"perl-",[{token:"string",regex:"\\$perl\\$",next:"statement"}]),this.embedRules(a,"python-",[{token:"string",regex:"\\$python\\$",next:"statement"}])};r.inherits(f,o),t.PgsqlHighlightRules=f}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars",t="ARGV|ENV|INC|SIG",n="getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do",r=this.createKeywordMapper({keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}(?:[^\\\\]|\\\\.)*?"{3}'},{token:"string",merge:!0,regex:i+'"{3}.*$',next:"qqstring"},{token:"string",regex:i+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:i+"'{3}(?:[^\\\\]|\\\\.)*?'{3}"},{token:"string",merge:!0,regex:i+"'{3}.*$",next:"qstring"},{token:"string",regex:i+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:[^\\\\]|\\\\.)*?"{3}',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?'{3}",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.PythonHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-php.js b/ehcp/net2ftp/plugins/ace/mode-php.js new file mode 100644 index 0000000..3da6f57 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-php.js @@ -0,0 +1 @@ +ace.define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./php_highlight_rules").PhpHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=e("../unicode"),h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(h,i),function(){this.tokenRe=new RegExp("^["+c.packages.L+c.packages.Mn+c.packages.Mc+c.packages.Nd+c.packages.Pc+"_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+c.packages.L+c.packages.Mn+c.packages.Mc+c.packages.Nd+c.packages.Pc+"_]|s])+","g"),this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="php-start"){var u=t.match(/^.*[\{\(\[\:]\s*$/);u&&(r+=n)}else if(e=="php-doc-start"){if(o!="php-doc-start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=e("./html_highlight_rules").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),n=i.arrayToMap("abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|public|static|switch|throw|try|use|var|while|xor".split("|")),r=i.arrayToMap("die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),o=i.arrayToMap("true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__".split("|")),u=i.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),a=i.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),f=i.arrayToMap("cfunction|old_function".split("|")),l=i.arrayToMap([]);this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"#.*$"},e.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"'",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){return n.hasOwnProperty(e)?"keyword":o.hasOwnProperty(e)?"constant.language":u.hasOwnProperty(e)?"variable.language":l.hasOwnProperty(e)?"invalid.illegal":t.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":e.match(/^(\$[a-zA-Z][a-zA-Z0-9_]*|self|parent)$/)?"variable":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:"constant.language.escape",regex:/\$[\w\d]+(?:\[[\w\d]+\])?/},{token:"constant.language.escape",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"',next:"start"},{token:"string",regex:".+?"}],qstring:[{token:"constant.language.escape",regex:"\\\\['\\\\]"},{token:"string",regex:"'",next:"start"},{token:"string",regex:".+?"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(a,o);var f=function(){u.call(this);for(var e in this.$rules)this.$rules[e].unshift({token:"support.php_tag",regex:"<\\?(?:php|\\=)?",next:"php-start"});this.embedRules(a,"php-"),this.$rules["php-start"].unshift({token:"support.php_tag",regex:"\\?>",next:"start"})};r.inherits(f,u),t.PhpHighlightRules=f}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-powershell.js b/ehcp/net2ftp/plugins/ace/mode-powershell.js new file mode 100644 index 0000000..c36185a --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-powershell.js @@ -0,0 +1 @@ +ace.define("ace/mode/powershell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/powershell_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./powershell_highlight_rules").PowershellHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/powershell_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="function|if|else|elseif|switch|while|default|for|do|until|break|continue|foreach|return|filter|in|trap|throw|param|begin|process|end",t="Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption",n=this.createKeywordMapper({"support.function":t,keyword:e},"identifier"),r="eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|is|isnot|as|and|or|band|bor|not";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment.start",regex:"<#",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"[$](?:[Tt]rue|[Ff]alse)\\b"},{token:"constant.language",regex:"[$][Nn]ull\\b"},{token:"variable.instance",regex:"[$][a-zA-Z][a-zA-Z0-9_]*\\b"},{token:n,regex:"[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"},{token:"keyword.operator",regex:"\\-(?:"+r+")"},{token:"keyword.operator",regex:"&|\\*|\\+|\\-|\\=|\\+=|\\-="},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment.end",regex:"#>",next:"start"},{token:"doc.comment.tag",merge:!0,regex:"^\\.\\w+"},{token:"comment",merge:!0,regex:"\\w+"},{token:"comment",merge:!0,regex:"."}]}};r.inherits(s,i),t.PowershellHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-python.js b/ehcp/net2ftp/plugins/ace/mode-python.js new file mode 100644 index 0000000..2d5b475 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-python.js @@ -0,0 +1 @@ +ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./python_highlight_rules").PythonHighlightRules,u=e("./folding/pythonic").FoldMode,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.foldingRules=new u("\\:")};r.inherits(f,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.$tokenizer.getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new a(n,r.length-i.length,n,r.length))}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}(?:[^\\\\]|\\\\.)*?"{3}'},{token:"string",merge:!0,regex:i+'"{3}.*$',next:"qqstring"},{token:"string",regex:i+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:i+"'{3}(?:[^\\\\]|\\\\.)*?'{3}"},{token:"string",merge:!0,regex:i+"'{3}.*$",next:"qstring"},{token:"string",regex:i+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:[^\\\\]|\\\\.)*?"{3}',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?'{3}",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-r.js b/ehcp/net2ftp/plugins/ace/mode-r.js new file mode 100644 index 0000000..1a910f5 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-r.js @@ -0,0 +1 @@ +ace.define("ace/mode/r",["require","exports","module","ace/editor","ace/edit_session","ace/range","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/r_highlight_rules","ace/mode/matching_brace_outdent","ace/unicode"],function(e,t,n){var r=e("ace/editor").Editor,i=e("ace/edit_session").EditSession,s=e("ace/range").Range,o=e("ace/lib/oop"),u=e("ace/mode/text").Mode,a=e("ace/tokenizer").Tokenizer,f=e("ace/mode/text_highlight_rules").TextHighlightRules,l=e("./r_highlight_rules").RHighlightRules,c=e("ace/mode/matching_brace_outdent").MatchingBraceOutdent,h=e("ace/unicode"),p=function(){this.$tokenizer=new a((new l).getRules()),this.$outdent=new c};o.inherits(p,u),function(){this.tokenRe=new RegExp("^["+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+"._]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+"._]|s])+","g"),this.$complements={"(":")","[":"]",'"':'"',"'":"'","{":"}"},this.$reOpen=/^[(["'{]$/,this.$reClose=/^[)\]"'}]$/,this.getNextLineIndent=function(e,t,n,r,i){return this.codeModel.getNextLineIndent(i,t,e,n,r)},this.allowAutoInsert=this.smartAllowAutoInsert,this.checkOutdent=function(e,t,n){return/^\s+$/.test(t)?/^\s*[\{\}\)]/.test(n):!1},this.getIndentForOpenBrace=function(e){return this.codeModel.getIndentForOpenBrace(e)},this.autoOutdent=function(e,t,n){if(n==0)return 0;var r=t.getLine(n),i=r.match(/^(\s*[\}\)])/);if(i){var o=i[1].length,u=t.findMatchingBracket({row:n,column:o});if(!u||u.row==n)return 0;var a=this.codeModel.getIndentForOpenBrace(u);t.replace(new s(n,0,n,o-1),a)}i=r.match(/^(\s*\{)/);if(i){var o=i[1].length,a=this.codeModel.getBraceIndent(n-1);t.replace(new s(n,0,n,o-1),a)}},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""},this.transformAction=function(e,t,n,r,i){if(t==="insertion"&&i==="\n"){var s=n.getSelectionRange().start,o=/^((\s*#+')\s*)/.exec(r.doc.getLine(s.row));if(o&&n.getSelectionRange().start.column>=o[2].length)return{text:"\n"+o[1]}}return!1}}.call(p.prototype),t.Mode=p}),ace.define("ace/mode/r_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("ace/mode/text_highlight_rules").TextHighlightRules,o=e("./tex_highlight_rules").TexHighlightRules,u=function(){var e=i.arrayToMap("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass".split("|")),t=i.arrayToMap("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_".split("|"));this.$rules={start:[{token:"comment.sectionhead",regex:"#+(?!').*(?:----|====|####)\\s*$"},{token:"comment",regex:"#+'",next:"rd-start"},{token:"comment",regex:"#.*$"},{token:"string",regex:'["]',next:"qqstring"},{token:"string",regex:"[']",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+[Li]?\\b"},{token:"constant.numeric",regex:"\\d+L\\b"},{token:"constant.numeric",regex:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.numeric",regex:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.language.boolean",regex:"(?:TRUE|FALSE|T|F)\\b"},{token:"identifier",regex:"`.*?`"},{token:function(n){return e[n]?"keyword":t[n]?"constant.language":n=="..."||n.match(/^\.\.\d+$/)?"variable.language":"identifier"},regex:"[a-zA-Z.][a-zA-Z0-9._]*\\b"},{token:"keyword.operator",regex:"%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:"},{token:"keyword.operator",regex:"%.*?%"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]};var n=(new o("comment")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=".virtual-comment";this.addRules(n,"rd-"),this.$rules["rd-start"].unshift({token:"text",regex:"^",next:"start"}),this.$rules["rd-start"].unshift({token:"keyword",regex:"@(?!@)[^ ]*"}),this.$rules["rd-start"].unshift({token:"comment",regex:"@@"}),this.$rules["rd-start"].push({token:"comment",regex:"[^%\\\\[({\\])}]+"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(e){e||(e="text"),this.$rules={start:[{token:"comment",regex:"%.*$"},{token:e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",next:"nospell"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:e,regex:"\\s+"}],nospell:[{token:"comment",regex:"%.*$",next:"start"},{token:"nospell."+e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",next:"start"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])]"},{token:"paren.keyword.operator",regex:"}",next:"start"},{token:"nospell."+e,regex:"\\s+"},{token:"nospell."+e,regex:"\\w+"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-rdoc.js b/ehcp/net2ftp/plugins/ace/mode-rdoc.js new file mode 100644 index 0000000..4318a2d --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-rdoc.js @@ -0,0 +1 @@ +ace.define("ace/mode/rdoc",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/rdoc_highlight_rules","ace/mode/matching_brace_outdent"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/mode/text").Mode,s=e("ace/tokenizer").Tokenizer,o=e("ace/mode/text_highlight_rules").TextHighlightRules,u=e("./rdoc_highlight_rules").RDocHighlightRules,a=e("ace/mode/matching_brace_outdent").MatchingBraceOutdent,f=function(e){this.$tokenizer=new s((new u).getRules()),this.$outdent=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/rdoc_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/latex_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=e("./latex_highlight_rules"),u=function(){this.$rules={start:[{token:"comment",regex:"%.*$"},{token:"text",regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b",next:"nospell"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],nospell:[{token:"comment",regex:"%.*$",next:"start"},{token:"nospell.text",regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",next:"start"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])]"},{token:"paren.keyword.operator",regex:"}",next:"start"},{token:"nospell.text",regex:"\\s+"},{token:"nospell.text",regex:"\\w+"}]}};r.inherits(u,s),t.RDocHighlightRules=u}),ace.define("ace/mode/latex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"keyword",regex:"\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"string",regex:"\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"},{token:"comment",regex:"%.*$"}]}};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-rhtml.js b/ehcp/net2ftp/plugins/ace/mode-rhtml.js new file mode 100644 index 0000000..5cecd23 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-rhtml.js @@ -0,0 +1 @@ +ace.define("ace/mode/rhtml",["require","exports","module","ace/lib/oop","ace/mode/html","ace/tokenizer","ace/mode/rhtml_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/mode/html").Mode,s=e("ace/tokenizer").Tokenizer,o=e("./rhtml_highlight_rules").RHtmlHighlightRules,u=function(e,t){this.$session=t,this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),function(){this.insertChunkInfo={value:"<!--begin.rcode\n\nend.rcode-->\n",position:{row:0,column:15}},this.getLanguageMode=function(e){return this.$session.getState(e.row).match(/^r-/)?"R":"HTML"},this.getNextLineIndent=function(e,t,n,r,i){return this.codeModel.getNextLineIndent(i,t,e,n,r)}}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/html","ace/mode/folding/html"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript").Mode,o=e("./css").Mode,u=e("../tokenizer").Tokenizer,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/html").HtmlBehaviour,l=e("./folding/html").FoldMode,c=function(){var e=new a;this.$tokenizer=new u(e.getRules()),this.$behaviour=new f,this.$embeds=e.getEmbeds(),this.createModeDelegates({"js-":s,"css-":o}),this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){return 0},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./css_highlight_rules").CssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_util"),a=e("./text_highlight_rules").TextHighlightRules,f=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),l=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},u.tag(this.$rules,"tag","start",f),u.tag(this.$rules,"style","css-start",f),u.tag(this.$rules,"script","js-start",f),this.embedRules(o,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(s,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};r.inherits(l,a),t.HtmlHighlightRules=l}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/html",["require","exports","module","ace/lib/oop","ace/mode/behaviour/xml","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function a(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour/xml").XmlBehaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],f=function(){this.inherit(i),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),f=new o(r,s.row,s.column),l=f.getCurrentToken(),c=!1;if(!l||!a(l,"meta.tag")&&(!a(l,"text")||!l.value.match("/"))){do l=f.stepBackward();while(l&&(a(l,"string")||a(l,"keyword.operator")||a(l,"entity.attribute-name")||a(l,"text")))}else c=!0;if(!l||!a(l,"meta.tag-name")||f.stepBackward().value.match("/"))return;var h=l.value;if(c)var h=h.substring(0,s.column-l.start);if(u.indexOf(h)!==-1)return;return{text:"></"+h+">",selection:[1,1]}}})};r.inherits(f,i),t.HtmlBehaviour=f}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../../lib/oop"),i=e("./mixed").FoldMode,s=e("./xml").FoldMode,o=e("./cstyle").FoldMode,u=t.FoldMode=function(){i.call(this,new s({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new o,"css-":new o})};r.inherits(u,i)}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}),ace.define("ace/mode/rhtml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/r_highlight_rules","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("./r_highlight_rules").RHighlightRules,s=e("./html_highlight_rules").HtmlHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){this.$rules=(new s).getRules(),this.$rules.start.unshift({token:"support.function.codebegin",regex:"^<!--\\s*begin.rcode\\s*(?:.*)",next:"r-start"});var e=(new i).getRules();this.addRules(e,"r-"),this.$rules["r-start"].unshift({token:"support.function.codeend",regex:"^\\s*end.rcode\\s*-->",next:"start"})};r.inherits(u,o),t.RHtmlHighlightRules=u}),ace.define("ace/mode/r_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("ace/mode/text_highlight_rules").TextHighlightRules,o=e("./tex_highlight_rules").TexHighlightRules,u=function(){var e=i.arrayToMap("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass".split("|")),t=i.arrayToMap("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_".split("|"));this.$rules={start:[{token:"comment.sectionhead",regex:"#+(?!').*(?:----|====|####)\\s*$"},{token:"comment",regex:"#+'",next:"rd-start"},{token:"comment",regex:"#.*$"},{token:"string",regex:'["]',next:"qqstring"},{token:"string",regex:"[']",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+[Li]?\\b"},{token:"constant.numeric",regex:"\\d+L\\b"},{token:"constant.numeric",regex:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.numeric",regex:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b"},{token:"constant.language.boolean",regex:"(?:TRUE|FALSE|T|F)\\b"},{token:"identifier",regex:"`.*?`"},{token:function(n){return e[n]?"keyword":t[n]?"constant.language":n=="..."||n.match(/^\.\.\d+$/)?"variable.language":"identifier"},regex:"[a-zA-Z.][a-zA-Z0-9._]*\\b"},{token:"keyword.operator",regex:"%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:"},{token:"keyword.operator",regex:"%.*?%"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]};var n=(new o("comment")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=".virtual-comment";this.addRules(n,"rd-"),this.$rules["rd-start"].unshift({token:"text",regex:"^",next:"start"}),this.$rules["rd-start"].unshift({token:"keyword",regex:"@(?!@)[^ ]*"}),this.$rules["rd-start"].unshift({token:"comment",regex:"@@"}),this.$rules["rd-start"].push({token:"comment",regex:"[^%\\\\[({\\])}]+"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(e){e||(e="text"),this.$rules={start:[{token:"comment",regex:"%.*$"},{token:e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",next:"nospell"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:e,regex:"\\s+"}],nospell:[{token:"comment",regex:"%.*$",next:"start"},{token:"nospell."+e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",next:"start"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])]"},{token:"paren.keyword.operator",regex:"}",next:"start"},{token:"nospell."+e,regex:"\\s+"},{token:"nospell."+e,regex:"\\w+"}]}};r.inherits(o,s),t.TexHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-ruby.js b/ehcp/net2ftp/plugins/ace/mode-ruby.js new file mode 100644 index 0000000..987550a --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-ruby.js @@ -0,0 +1 @@ +ace.define("ace/mode/ruby",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./ruby_highlight_rules").RubyHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./folding/coffee").FoldMode,l=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.foldingRules=new f};r.inherits(l,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.constantOtherSymbol={token:"constant.other.symbol.ruby",regex:"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"},o=t.qString={token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},u=t.qqString={token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},a=t.tString={token:"string",regex:"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"},f=t.constantNumericHex={token:"constant.numeric",regex:"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"},l=t.constantNumericFloat={token:"constant.numeric",regex:"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"},c=function(){var e="abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|h|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|t|l|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many",t="alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield",n="true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING",r="$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self",i=this.$keywords=this.createKeywordMapper({keyword:t,"constant.language":n,"variable.language":r,"support.function":e,"invalid.deprecated":"debugger"},"identifier");this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment",merge:!0,regex:"^=begin\\s",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},o,u,a,{token:"text",regex:"::"},{token:"variable.instance",regex:"@{1,2}[a-zA-Z_\\d]+"},{token:"support.class",regex:"[A-Z][a-zA-Z_\\d]+"},s,f,l,{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"punctuation.separator.key-value",regex:"=>"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end\\s.*$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-sass.js b/ehcp/net2ftp/plugins/ace/mode-sass.js new file mode 100644 index 0000000..ba5bfe9 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-sass.js @@ -0,0 +1 @@ +ace.define("ace/mode/sass",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sass_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./sass_highlight_rules").SASSHighlightRules,u=function(){var e=new o;this.$tokenizer=new s(e.getRules())};r.inherits(u,i),function(){}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:["keyword.control.untitled","keyword.control.untitled"],regex:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b"},{token:["keyword.control.at-rule.sass","keyword.control.at-rule.sass"],regex:"@(import|mixin|include|charset|import|media|page|font-face|namespace) [\\/\\.\\w-]*\\b"},{token:[null,"string.quoted.double.sass"],regex:'"',next:"state_3"},{token:["entity.other.attribute-name.class.sass","entity.other.attribute-name.class.sass"],regex:"\\.[a-zA-Z0-9_-]+"},{token:["constant.other.rgb-value.sass","constant.other.rgb-value.sass"],regex:"(#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\\b"},{token:["entity.other.attribute-name.id.sass","entity.other.attribute-name.id.sass"],regex:"#[a-zA-Z0-9_-]+"},{token:["variable.parameter.sass","variable.parameter.sass"],regex:"[!\\$][a-zA-Z0-9_-]+"},{token:[null,"comment.block.sass"],regex:"/\\*",next:"state_8"},{token:[null,"comment.line.double-slash.sass"],regex:"//",next:"state_9"},{token:["entity.other.attribute-name.tag.pseudo-class","entity.other.attribute-name.tag.pseudo-class"],regex:"\\+[-\\w]+"},{token:["constant.numeric.sass","constant.numeric.sass"],regex:"(-|\\+)?\\s*[0-9]+(\\.[0-9]+)?"},{token:["constant.string.sass","constant.string.sass"],regex:"(left|right|true|false|top|bottom)(?!:)"},{token:["constant.other.unit.sass","constant.other.unit.sass"],regex:"(?<=[\\d])(px|pt|cm|mm|in|em|ex|pc)\\b|%"},{token:[null,"variable.parameter.url"],regex:"url",next:"state_14"},{token:["keyword.control.untitled","keyword.control.untitled"],regex:"&"},{token:["entity.other.attribute-name.tag.pseudo-class","entity.other.attribute-name.tag.pseudo-class"],regex:":(before|after|first-child|last-child|first-line|first-letter|link|focus|lang|hover|active|visited)"},{token:["support.type.property-name.sass","support.type.property-name.sass"],regex:"\\b(azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|orphans|outline-color|outline-style|outline-width|outline|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index)\\b"},{token:["support.constant.property-value.sass","support.constant.property-value.sass"],regex:"\\b(absolute|all-scroll|always|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|col-resize|collapse|crosshair|dashed|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|groove|hand|help|hidden|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace)\\b"},{token:["support.constant.font-name.sass","support.constant.font-name.sass"],regex:"(\\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\\b)"}],state_3:[{token:"constant.character.escaped.sass",regex:"\\\\."},{token:"TODO",regex:'"',next:"start"}],state_8:[{token:"TODO",regex:"\\*/|$",next:"start"},{token:"TODO",regex:".+",next:"state_8"}],state_9:[{token:"TODO",regex:"$\\n?",next:"start"},{token:"TODO",regex:".+",next:"state_9"}],state_14:[{token:"TODO",regex:"\\)",next:"start"},{token:"TODO",regex:".+",next:"state_14"}]}};r.inherits(s,i),t.SASSHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-scad.js b/ehcp/net2ftp/plugins/ace/mode-scad.js new file mode 100644 index 0000000..d6b5386 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-scad.js @@ -0,0 +1 @@ +ace.define("ace/mode/scad",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/scad_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./scad_highlight_rules").scadHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var u=t.match(/^.*[\{\(\[]\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/scad_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,u=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"module|if|else|for","constant.language":"NULL"},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},s.getStartRule("start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:use|include)"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(s,"doc-",[s.getEndRule("start")])};r.inherits(u,o),t.scadHighlightRules=u}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-scala.js b/ehcp/net2ftp/plugins/ace/mode-scala.js new file mode 100644 index 0000000..86616e5 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-scala.js @@ -0,0 +1 @@ +ace.define("ace/mode/scala",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/scala_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("../tokenizer").Tokenizer,o=e("./scala_highlight_rules").ScalaHighlightRules,u=function(){i.call(this),this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),function(){this.createWorker=function(e){return null}}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/scala_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|override|package|private|protected|sealed|super|this|trait|type|val|var|with",t="true|false",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Short|Int|Long|Nothing",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"support.function":n,"constant.language":t},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'"""',next:"tstring"},{token:"string",regex:'"(?=.)',next:"string"},{token:"symbol.constant",regex:"'[\\w\\d_]+"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],string:[{token:"escape",regex:'\\\\"'},{token:"string",merge:!0,regex:'"',next:"start"},{token:"string.invalid",regex:'[^"\\\\]*$',next:"start"},{token:"string",regex:'[^"\\\\]+',merge:!0}],tstring:[{token:"string",regex:'"{3,5}',next:"start"},{token:"string",merge:!0,regex:".+?"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.ScalaHighlightRules=o}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-scss.js b/ehcp/net2ftp/plugins/ace/mode-scss.js new file mode 100644 index 0000000..eca0160 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-scss.js @@ -0,0 +1 @@ +ace.define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./scss_highlight_rules").ScssHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./folding/cstyle").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules(),"i"),this.$outdent=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),n=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),r=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),s=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),o=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),u="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:u+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:u},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":s.hasOwnProperty(i)?"keyword":n.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":r.hasOwnProperty(i.toLowerCase())?"support.constant.color":o.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-sh.js b/ehcp/net2ftp/plugins/ace/mode-sh.js new file mode 100644 index 0000000..1debff2 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-sh.js @@ -0,0 +1 @@ +ace.define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sh_highlight_rules","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./sh_highlight_rules").ShHighlightRules,u=e("../range").Range,a=function(){this.$tokenizer=new s((new o).getRules())};r.inherits(a,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var a=new u(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);a.start.row=o,a.end.row=o,a.end.column=l[0].length,t.replace(a,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.$tokenizer.getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))}}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.reservedKeywords="!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set",o=t.languageConstructs="[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait",u=function(){var e=this.createKeywordMapper({keyword:s,"support.function.builtin":o,"invalid.deprecated":"debugger"},"identifier"),t="(?:(?:[1-9]\\d*)|(?:0))",n="(?:\\.\\d+)",r="(?:\\d+)",i="(?:(?:"+r+"?"+n+")|(?:"+r+"\\.))",u="(?:(?:"+i+"|"+r+")"+")",a="(?:"+u+"|"+i+")",f="(?:&"+r+")",l="[a-zA-Z][a-zA-Z0-9_]*",c="(?:(?:\\$"+l+")|(?:"+l+"=))",h="(?:\\$(?:SHLVL|\\$|\\!|\\?))",p="(?:"+l+"\\s*\\(\\))";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'"(?:[^\\\\]|\\\\.)*?"'},{token:"variable.language",regex:h},{token:"variable",regex:c},{token:"support.function",regex:p},{token:"support.function",regex:f},{token:"string",regex:"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:a},{token:"constant.numeric",regex:t+"\\b"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}]}};r.inherits(u,i),t.ShHighlightRules=u}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-sql.js b/ehcp/net2ftp/plugins/ace/mode-sql.js new file mode 100644 index 0000000..a3f6ec8 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-sql.js @@ -0,0 +1 @@ +ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sql_highlight_rules","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./sql_highlight_rules").SqlHighlightRules,u=e("../range").Range,a=function(){this.$tokenizer=new s((new o).getRules())};r.inherits(a,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=[],o=/^(\s*)--/;for(var a=n;a<=r;a++)if(!o.test(t.getLine(a))){i=!1;break}if(i){var f=new u(0,0,0,0);for(var a=n;a<=r;a++){var l=t.getLine(a),c=l.match(o);f.start.row=a,f.end.row=a,f.end.column=c[0].length,t.replace(f,c[1])}}else t.indentRows(n,r,"--")}}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|else|end|type|left|right|join|on|outer|desc|asc",t="true|false|null",n="count|min|max|avg|sum|rank|now|coalesce",r=this.createKeywordMapper({"support.function":n,keyword:e,"constant.language":t},"identifier",!0);this.$rules={start:[{token:"comment",regex:"--.*$"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}]}};r.inherits(s,i),t.SqlHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-stylus.js b/ehcp/net2ftp/plugins/ace/mode-stylus.js new file mode 100644 index 0000000..e7ffc8a --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-stylus.js @@ -0,0 +1 @@ +ace.define("ace/mode/stylus",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/stylus_highlight_rules","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./stylus_highlight_rules").StylusHighlightRules,u=e("./folding/coffee").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/stylus_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=e("./css_highlight_rules"),o=function(){var e=this.createKeywordMapper({"support.type":s.supportType,"support.function":s.supportFunction,"support.constant":s.supportConstant,"support.constant.color":s.supportConstantColor,"support.constant.fonts":s.supportConstantFonts},"text",!0);this.$rules={start:[{token:"comment",regex:/\/\/.*$/},{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:["entity.name.function.stylus","text"],regex:"^([-a-zA-Z_][-\\w]*)?(\\()"},{token:["entity.other.attribute-name.class.stylus"],regex:"\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*"},{token:["entity.language.stylus"],regex:"^ *&"},{token:["variable.language.stylus"],regex:"(arguments)"},{token:["keyword.stylus"],regex:"@[-\\w]+"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:s.pseudoElements},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:s.pseudoClasses},{token:["entity.name.tag.stylus"],regex:"(?:\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\b)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation.definition.entity.stylus","entity.other.attribute-name.id.stylus"],regex:"(#)([a-zA-Z][a-zA-Z0-9_-]*)"},{token:"meta.vendor-prefix.stylus",regex:"-webkit-|-moz\\-|-ms-|-o-"},{token:["keyword.control.stylus"],regex:"(?:\\b|\\s)(!important|for|in|return|true|false|null|if|else|unless|return)(?:\\b)"},{token:["keyword.operator.stylus"],regex:"((?:!|~|\\+|-|(?:\\*)?\\*|\\/|%|(?:\\.)\\.\\.|<|>|(?:=|:|\\?|\\+|-|\\*|\\/|%|<|>)?=|!=))"},{token:["keyword.operator.stylus"],regex:"(?:\\b)(in|is(?:nt)?|not)(?:\\b)"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:s.numRe},{token:["keyword"],regex:"(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]}};r.inherits(o,i),t.StylusHighlightRules=o}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0),t=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],n=i.copyArray(t);n.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var r=i.copyArray(t);r.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var s=[{token:"comment",merge:!0,regex:".+"}],d=i.copyArray(s);d.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var v=i.copyArray(s);v.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=i.copyArray(s);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:d,ruleset:n,ruleset_comment:m,media_ruleset:r,media_comment:v}};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-svg.js b/ehcp/net2ftp/plugins/ace/mode-svg.js new file mode 100644 index 0000000..3b7fd21 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-svg.js @@ -0,0 +1 @@ +ace.define("ace/mode/svg",["require","exports","module","ace/lib/oop","ace/mode/xml","ace/mode/javascript","ace/tokenizer","ace/mode/svg_highlight_rules","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml").Mode,s=e("./javascript").Mode,o=e("../tokenizer").Tokenizer,u=e("./svg_highlight_rules").SvgHighlightRules,a=e("./folding/mixed").FoldMode,f=e("./folding/xml").FoldMode,l=e("./folding/cstyle").FoldMode,c=function(){i.call(this),this.highlighter=new u,this.$tokenizer=new o(this.highlighter.getRules()),this.$embeds=this.highlighter.getEmbeds(),this.createModeDelegates({"js-":s}),this.foldingRules=new a(new f({}),{"js-":new l})};r.inherits(c,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules()),this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml_util"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},i.tag(this.$rules,"tag","start")};r.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/svg_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/xml_util"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./xml_highlight_rules").XmlHighlightRules,o=e("./xml_util"),u=function(){s.call(this),this.$rules.start.splice(3,0,{token:"meta.tag",regex:"<(?=script)",next:"script"}),o.tag(this.$rules,"script","js-start"),this.embedRules(i,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}])};r.inherits(u,s),t.SvgHighlightRules=u}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):""},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-tcl.js b/ehcp/net2ftp/plugins/ace/mode-tcl.js new file mode 100644 index 0000000..f8fe2f4 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-tcl.js @@ -0,0 +1 @@ +ace.define("ace/mode/tcl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/folding/cstyle","ace/mode/tcl_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./folding/cstyle").FoldMode,u=e("./tcl_highlight_rules").TclHighlightRules,a=e("./matching_brace_outdent").MatchingBraceOutdent,f=e("../range").Range,l=function(){this.$tokenizer=new s((new u).getRules()),this.$outdent=new a,this.foldingRules=new o};r.inherits(l,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)#/;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new f(0,0,0,0);for(var o=n;o<=r;o++){var a=t.getLine(o),l=a.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"#")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[]\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/tcl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment",merge:!0,regex:"#.*\\\\$",next:"commentfollow"},{token:"comment",regex:"#.*$"},{token:"support.function",regex:"[\\\\]$",next:"splitlineStart"},{token:"text",regex:'[\\\\](?:["]|[{]|[}]|[[]|[]]|[$]|[])'},{token:"text",regex:"^|[^{][;][^}]|[/\r/]",next:"commandItem"},{token:"string",regex:'[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'[ ]*["]',next:"qqstring"},{token:"variable.instancce",merge:!0,regex:"[$]",next:"variable"},{token:"support.function",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"},{token:"identifier",regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"paren.lparen",regex:"[[{]",next:"commandItem"},{token:"paren.lparen",regex:"[(]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],commandItem:[{token:"comment",merge:!0,regex:"#.*\\\\$",next:"commentfollow"},{token:"comment",regex:"#.*$",next:"start"},{token:"string",regex:'[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"variable.instancce",merge:!0,regex:"[$]",next:"variable"},{token:"support.function",regex:"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])",next:"commandItem"},{token:"support.function",regex:"[a-zA-Z0-9_/]+(?:[:][:])",next:"commandItem"},{token:"support.function",regex:"(?:[:][:])",next:"commandItem"},{token:"support.function",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"},{token:"keyword",regex:"[a-zA-Z0-9_/]+",next:"start"}],commentfollow:[{token:"comment",regex:".*\\\\$",next:"commentfollow"},{token:"comment",merge:!0,regex:".+",next:"start"}],splitlineStart:[{token:"text",regex:"^.",next:"start"}],variable:[{token:"variable.instance",regex:"(?:[:][:])?[a-zA-Z_\\d]+(?:(?:[:][:])?[a-zA-Z_\\d]+)?(?:[(][a-zA-Z_\\d]+[)])?",next:"start"},{token:"variable.instance",regex:"[a-zA-Z_\\d]+(?:[(][a-zA-Z_\\d]+[)])?",next:"start"},{token:"variable.instance",regex:"{?[a-zA-Z_\\d]+}?",next:"start"}],qqstring:[{token:"string",regex:'(?:[^\\\\]|\\\\.)*?["]',next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.TclHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-tex.js b/ehcp/net2ftp/plugins/ace/mode-tex.js new file mode 100644 index 0000000..4811f06 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-tex.js @@ -0,0 +1 @@ +ace.define("ace/mode/tex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/tex_highlight_rules","ace/mode/matching_brace_outdent"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/mode/text").Mode,s=e("ace/tokenizer").Tokenizer,o=e("./text_highlight_rules").TextHighlightRules,u=e("./tex_highlight_rules").TexHighlightRules,a=e("./matching_brace_outdent").MatchingBraceOutdent,f=function(e){e?this.$tokenizer=new s((new o).getRules()):this.$tokenizer=new s((new u).getRules()),this.$outdent=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.allowAutoInsert=function(){return!1}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/tex_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("ace/lib/oop"),i=e("ace/lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(e){e||(e="text"),this.$rules={start:[{token:"comment",regex:"%.*$"},{token:e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",next:"nospell"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])}]"},{token:e,regex:"\\s+"}],nospell:[{token:"comment",regex:"%.*$",next:"start"},{token:"nospell."+e,regex:"\\\\[$&%#\\{\\}]"},{token:"keyword",regex:"\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"},{token:"keyword",regex:"\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",next:"start"},{token:"paren.keyword.operator",regex:"[[({]"},{token:"paren.keyword.operator",regex:"[\\])]"},{token:"paren.keyword.operator",regex:"}",next:"start"},{token:"nospell."+e,regex:"\\s+"},{token:"nospell."+e,regex:"\\w+"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-text.js b/ehcp/net2ftp/plugins/ace/mode-text.js new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/plugins/ace/mode-textile.js b/ehcp/net2ftp/plugins/ace/mode-textile.js new file mode 100644 index 0000000..0cd1228 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-textile.js @@ -0,0 +1 @@ +ace.define("ace/mode/textile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/textile_highlight_rules","ace/mode/matching_brace_outdent"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./textile_highlight_rules").TextileHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){return e=="intag"?n:""},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/textile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:function(e){return e.charAt(0)=="h"?"markup.heading."+e.charAt(1):"markup.heading"},regex:"h1|h2|h3|h4|h5|h6|bq|p|bc|pre",next:"blocktag"},{token:"keyword",regex:"[\\*]+|[#]+"},{token:"text",regex:".+"}],blocktag:[{token:"keyword",regex:"\\. ",next:"start"},{token:"keyword",regex:"\\(",next:"blocktagproperties"}],blocktagproperties:[{token:"keyword",regex:"\\)",next:"blocktag"},{token:"string",regex:"[a-zA-Z0-9\\-_]+"},{token:"keyword",regex:"#"}]}};r.inherits(s,i),t.TextileHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-typescript.js b/ehcp/net2ftp/plugins/ace/mode-typescript.js new file mode 100644 index 0000000..6da2bfd --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-typescript.js @@ -0,0 +1 @@ +ace.define("ace/mode/typescript",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/typescript_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/mode/matching_brace_outdent"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("../tokenizer").Tokenizer,o=e("./typescript_highlight_rules").TypeScriptHighlightRules,u=e("./behaviour/cstyle").CstyleBehaviour,a=e("./folding/cstyle").FoldMode,f=e("./matching_brace_outdent").MatchingBraceOutdent,l=function(){var e=new o;this.$tokenizer=new s(e.getRules()),this.$outdent=new f,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.createWorker=function(e){return null}}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../range").Range,f=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(h,i),function(){this.toggleCommentLines=function(e,t,n,r){var i=!0,s=/^(\s*)\/\//;for(var o=n;o<=r;o++)if(!s.test(t.getLine(o))){i=!1;break}if(i){var u=new a(0,0,0,0);for(var o=n;o<=r;o++){var f=t.getLine(o),l=f.match(s);u.start.row=o,u.end.row=o,u.end.column=l[0].length,t.replace(u,l[1])}}else t.indentRows(n,r,"//")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="regex_allowed"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||e=="regex_allowed")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}}.call(h.prototype),t.Mode=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",n="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+t+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=|\b(?:in|instanceof|new|delete|typeof|void)/,next:"regex_allowed"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"regex_allowed"},{token:"paren.lparen",regex:/[\[({]/,next:"regex_allowed"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"regex_allowed"},{token:"comment",regex:/^#!.*$/},{token:"text",regex:/\s+/}],regex_allowed:[i.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"invalid",regex:/\{\d+,?(?:\d+)?}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/},{token:"string.regexp",regex:/{|[^{\[\/\\(|)$^+*?]+/,merge:!0},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex",merge:!0},{token:"constant.language.escape",regex:"-"},{token:"string.regexp.charachterclass",regex:/[^\]\-\\]+/,merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}),ace.define("ace/mode/typescript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=function(){var e=[{token:["keyword.operator.ts","text","variable.parameter.function.ts","text"],regex:"\\b(module)(\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*\\{)"},{token:["storage.type.variable.ts","text","keyword.other.ts","text"],regex:"(super)(\\s*\\()([a-zA-Z0-9,_?.$\\s]+\\s*)(\\))"},{token:["entity.name.function.ts","paren.lparen","paren.rparen"],regex:"([a-zA-Z_?.$][\\w?.$]*)(\\()(\\))"},{token:["variable.parameter.function.ts","text","variable.parameter.function.ts"],regex:"([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*:\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)"},{token:["keyword.operator.ts"],regex:"(?:\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\b)"},{token:["storage.type.variable.ts"],regex:"(?:\\b(this\\.|string\\b|bool\\b|number)\\b)"},{token:["keyword.operator.ts","storage.type.variable.ts","keyword.operator.ts","storage.type.variable.ts"],regex:"(class)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)(extends)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)?"},{token:"keyword",regex:"(?:super|export|class|extends|import)\\b"}],t=(new i).getRules();t.start=e.concat(t.start),this.$rules=t};r.inherits(s,i),t.TypeScriptHighlightRules=s}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-xml.js b/ehcp/net2ftp/plugins/ace/mode-xml.js new file mode 100644 index 0000000..538a4dd --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-xml.js @@ -0,0 +1 @@ +ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./xml_highlight_rules").XmlHighlightRules,u=e("./behaviour/xml").XmlBehaviour,a=e("./folding/xml").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules()),this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./xml_util"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"xml-pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},i.tag(this.$rules,"tag","start")};r.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/xml_util",["require","exports","module"],function(e,t,n){function r(e){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:e+"_qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:e+"_qstring"}]}function i(e,t){return[{token:"string",merge:!0,regex:".*?"+e,next:t},{token:"string",merge:!0,regex:".+"}]}t.tag=function(e,t,n,s){e[t]=[{token:"text",regex:"\\s+"},{token:s?function(e){return s[e]?"meta.tag.tag-name."+s[e]:"meta.tag.tag-name"}:"meta.tag.tag-name",merge:!0,regex:"[-_a-zA-Z0-9:]+",next:t+"_embed_attribute_list"},{token:"empty",regex:"",next:t+"_embed_attribute_list"}],e[t+"_qstring"]=i("'",t+"_embed_attribute_list"),e[t+"_qqstring"]=i('"',t+"_embed_attribute_list"),e[t+"_embed_attribute_list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:n},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(r(t))}}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){function u(e,t){var n=!0,r=e.type.split("."),i=t.split(".");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,a=function(){this.inherit(s,["string_dquotes"]),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var s=n.getCursorPosition(),a=new o(r,s.row,s.column),f=a.getCurrentToken(),l=!1;if(!f||!u(f,"meta.tag")&&(!u(f,"text")||!f.value.match("/"))){do f=a.stepBackward();while(f&&(u(f,"string")||u(f,"keyword.operator")||u(f,"entity.attribute-name")||u(f,"text")))}else l=!0;if(!f||!u(f,"meta.tag-name")||a.stepBackward().value.match("/"))return;var c=f.value;if(l)var c=c.substring(0,s.column-f.start);return{text:"></"+c+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+2);if(u=="</"){var a=this.$getIndent(r.doc.getLine(s.row))+r.getTabString(),f=this.$getIndent(r.doc.getLine(s.row));return{text:"\n"+a+"\n"+f,selection:[1,a.length,1,a.length]}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e){o.call(this),this.voidElements=e||{}};r.inherits(a,o),function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r.closing?t=="markbeginend"?"end":"":!r.tagName||this.voidElements[r.tagName.toLowerCase()]?"":r.selfClosing?"":r.value.indexOf("/"+r.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r="";for(var s=0;s<n.length;s++){var o=n[s];o.type.indexOf("meta.tag")===0?r+=o.value:r+=i.stringRepeat(" ",o.value.length)}return this._parseTag(r)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(e){var t=this.tagRe.exec(e),n=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:e,match:t?t[2]:"",closing:t?!!t[3]:!1,selfClosing:t?!!t[5]||t[2]=="/>":!1,tagName:t?t[4]:"",column:t[1]?n+t[1].length:n}},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){if(!r)var r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()};n+=t.value;if(n.indexOf(">")!==-1){var i=this._parseTag(n);return i.start=r,i.end={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length},e.stepForward(),i}}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n="",r;do if(t.type.indexOf("meta.tag")===0){r||(r={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()+t.value.length}),n=t.value+n;if(n.indexOf("<")!==-1){var i=this._parseTag(n);return i.end=r,i.start={row:e.getCurrentTokenRow(),column:e.getCurrentTokenColumn()},e.stepBackward(),i}}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.voidElements[t.tagName])return;if(this.voidElements[n.tagName]){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r.match)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.column),l={row:n,column:r.column+r.tagName.length+2};while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.column+r.match.length),c={row:n,column:r.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,s.fromPoints(a.start,c)}else o.push(a)}}}}.call(a.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-xquery.js b/ehcp/net2ftp/plugins/ace/mode-xquery.js new file mode 100644 index 0000000..aabd691 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-xquery.js @@ -0,0 +1 @@ +ace.define("ace/mode/xquery",["require","exports","module","ace/worker/worker_client","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xquery_highlight_rules","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../worker/worker_client").WorkerClient,i=e("../lib/oop"),s=e("./text").Mode,o=e("../tokenizer").Tokenizer,u=e("./xquery_highlight_rules").XQueryHighlightRules,a=e("../range").Range,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(e){this.$tokenizer=new o((new u).getRules()),this.$behaviour=new f(e),this.foldingRules=new l};i.inherits(c,s),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\s+$/.test(t)?/^\s*[\}\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\s*[\}\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\s*\(:(.*):\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:"(:"+s+":)")},this.createWorker=function(e){this.$deltas=[];var t=new r(["ace"],"ace/mode/xquery_worker","XQueryWorker"),n=this;return e.getDocument().on("change",function(e){n.$deltas.push(e.data)}),t.attachToDocument(e.getDocument()),t.on("start",function(e){n.$deltas=[]}),t.on("error",function(t){e.setAnnotations([t.data])}),t.on("ok",function(t){e.clearAnnotations()}),t.on("highlight",function(t){var r=0,i=e.getLength()-1,s=t.data.lines,o=t.data.states;for(var u=0;u<n.$deltas.length;u++){var a=n.$deltas[u];if(a.action==="insertLines"){var f=a.lines.length;for(var u=0;u<f;u++)s.splice(a.range.start.row+u,0,undefined),o.splice(a.range.start.row+u,0,undefined)}else if(a.action==="insertText")e.getDocument().isNewLine(a.text)?(s.splice(a.range.end.row,0,undefined),o.splice(a.range.end.row,0,undefined)):(s[a.range.start.row]=undefined,o[a.range.start.row]=undefined);else if(a.action==="removeLines"){var l=a.lines.length;s.splice(a.range.start.row,l),o.splice(a.range.start.row,l)}else a.action==="removeText"&&(e.getDocument().isNewLine(a.text)?(s[a.range.start.row]=undefined,s.splice(a.range.end.row,1),o[a.range.start.row]=undefined,o.splice(a.range.end.row,1)):(s[a.range.start.row]=undefined,o[a.range.start.row]=undefined))}e.bgTokenizer.lines=s,e.bgTokenizer.states=o,e.bgTokenizer.fireUpdateEvent(r,i)}),t}}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/xquery_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e=this.createKeywordMapper({keyword:"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position"},"identifier");this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml-pe",regex:"<\\?.*?\\?>"},{token:"comment",regex:"<\\!--",next:"comment"},{token:"comment",regex:"\\(:",next:"comment"},{token:"text",regex:"<\\/?",next:"tag"},{token:"constant",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"variable",regex:"\\$[a-zA-Z_][a-zA-Z0-9_\\-:]*\\b"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"text",regex:"\\s+"},{token:"support.function",regex:"\\w[\\w+_\\-:]+(?=\\()"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\*|=|<|>|\\-|\\+"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"}],tag:[{token:"text",regex:">",next:"start"},{token:"meta.tag",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"}],cdata:[{token:"comment",regex:"\\]\\]>",next:"start"},{token:"comment",regex:"\\s+"},{token:"comment",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",regex:".*:\\)",next:"start"},{token:"comment",regex:".+"}]}};r.inherits(s,i),t.XQueryHighlightRules=s}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f=0,l=-1,c="",h=0,p=-1,d="",v="",m=function(){m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,c[0])||(f=0),l=r.row,c=n+i.substr(r.column),f++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(h=0),p=r.row,d=i.substr(0,r.column)+n,v=i.substr(r.column),h++},m.isAutoInsertedClosing=function(e,t,n){return f>0&&e.row===l&&n===c[0]&&t.substr(e.column)===c},m.isMaybeInsertedClosing=function(e,t){return h>0&&e.row===p&&t.substr(e.column)===v&&t.substr(0,e.column)==d},m.popAutoInsertedClosing=function(){c=c.substr(1),f--},m.clearMaybeInsertedClosing=function(){h=0,p=-1},this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){var a=n.getSelectionRange(),f=r.doc.getTextRange(a);if(f!==""&&f!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+f+"}",selection:!1};if(m.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])?(m.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){var l=u.substring(s.column,s.column+1);if(l=="}"){var c=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(c!==null&&m.isAutoInsertedClosing(s,u,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(i=="\n"||i=="\r\n"){var p="";m.isMaybeInsertedClosing(s,u)&&(p=o.stringRepeat("}",h),m.clearMaybeInsertedClosing());var l=u.substring(s.column,s.column+1);if(l=="}"||p!==""){var d=r.findMatchingBracket({row:s.row,column:s.column},"}");if(!d)return null;var v=this.getNextLineIndent(e,u.substring(0,s.column),r.getTabString()),g=this.$getIndent(u);return{text:"\n"+v+"\n"+g+p,selection:[1,v.length,1,v.length]}}}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;h--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(m.isSaneInsertion(n,r))return m.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&m.isAutoInsertedClosing(u,a,i))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var c=r.getTokens(o.start.row),h=0,p,d=-1;for(var v=0;v<c.length;v++){p=c[v],p.type=="string"?d=-1:d<0&&(d=p.value.indexOf(s));if(p.value.length+h>o.start.column)break;h+=c[v].value.length}if(!p||d<0&&p.type!=="comment"&&(p.type!=="string"||o.start.column!==p.value.length+h-1&&p.value.lastIndexOf(s)===p.value.length-1)){if(!m.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(p&&p.type==="string"){var g=f.substring(a.column,a.column+1);if(g==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=='"')return i.end.column++,i}})};r.inherits(m,i),t.CstyleBehaviour=m}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/mode-yaml.js b/ehcp/net2ftp/plugins/ace/mode-yaml.js new file mode 100644 index 0000000..fec195b --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/mode-yaml.js @@ -0,0 +1 @@ +ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./yaml_highlight_rules").YamlHighlightRules,u=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./folding/coffee").FoldMode,f=function(){this.$tokenizer=new s((new o).getRules()),this.$outdent=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)}}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"list.markup",regex:/^(?:-{3}|\.{3})\s*(?=#|$)/},{token:"list.markup",regex:/^\s*[\-?](?:$|\s)/},{token:"constant",regex:"!![\\w//]+"},{token:"constant.language",regex:"[&\\*][a-zA-Z0-9-_]+"},{token:["meta.tag","keyword"],regex:/^(\s*\w.*?)(\:(?:\s+|$))/},{token:["meta.tag","keyword"],regex:/(\w+?)(\s*\:(?:\s+|$))/},{token:"keyword.operator",regex:"<<\\w*:\\w*"},{token:"keyword.operator",regex:"-\\s*(?=[{])"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:"[\\|>]\\w*",next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/[+\-]?[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?\b/},{token:"constant.numeric",regex:/[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/},{token:"constant.language.boolean",regex:"(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"},{token:"invalid.illegal",regex:"\\/\\/.*$"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{token:"text",regex:"\\w+"}],qqstring:[{token:"string",regex:"(?=(?:(?:\\\\.)|(?:[^:]))*?:)",next:"start"},{token:"string",merge:!0,regex:".+"}]}};r.inherits(s,i),t.YamlHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\s+)/);return t?t[1]:""}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!="#")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/theme-eclipse.js b/ehcp/net2ftp/plugins/ace/theme-eclipse.js new file mode 100644 index 0000000..b66a150 --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/theme-eclipse.js @@ -0,0 +1 @@ +ace.define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse .ace_scroller {background-color: #FFFFFF;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_text-layer {}.ace-eclipse .ace_cursor {border-left: 2px solid black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(63, 127, 95);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {}.ace-eclipse .ace_tag {color: rgb(63, 127, 127);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(63, 127, 127);}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.cssClass="ace-eclipse";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/worker-coffee.js b/ehcp/net2ftp/plugins/ace/worker-coffee.js new file mode 100644 index 0000000..7cc7d0e --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/worker-coffee.js @@ -0,0 +1 @@ +"no use strict";function initBaseUrls(e){require.tlns=e}function initSender(){var e=require(null,"ace/lib/event_emitter").EventEmitter,t=require(null,"ace/lib/oop"),n=function(){};return function(){t.implement(this,e),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(n.prototype),new n}if(typeof window!="undefined"&&window.document)throw"atempt to load ace worker into main window instead of webWorker";var console={log:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},error:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})}},window={console:console},normalizeModule=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return normalizeModule(e,n[0])+"!"+normalizeModule(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/"),t=r+"/"+t;while(t.indexOf(".")!==-1&&i!=t)var i=t,t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},require=function(e,t){if(!t.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");var t=normalizeModule(e,t),n=require.modules[t];if(n)return n.initialized||(n.initialized=!0,n.exports=n.factory().exports),n.exports;var r=t.split("/");r[0]=require.tlns[r[0]]||r[0];var i=r.join("/")+".js";return require.id=t,importScripts(i),require(e,t)};require.modules={},require.tlns={};var define=function(e,t,n){arguments.length==2?(n=t,typeof e!="string"&&(t=e,e=require.id)):arguments.length==1&&(n=e,e=require.id);if(e.indexOf("text!")===0)return;var r=function(t,n){return require(e,t,n)};require.modules[e]={factory:function(){var e={exports:{}},t=n(r,e.exports,e);return t&&(e.exports=t),e}}},main,sender;onmessage=function(e){var t=e.data;if(t.command){if(!main[t.command])throw new Error("Unknown command:"+t.command);main[t.command].apply(main,t.args)}else if(t.init){initBaseUrls(t.tlns),require(null,"ace/lib/fixoldbrowsers"),sender=initSender();var n=require(null,t.module)[t.classname];main=new n(sender)}else t.event&&sender&&sender._emit(t.event,t.data)},define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/mode/coffee_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/coffee/coffee-script"],function(e,t,n){var r=e("../lib/oop"),i=e("../worker/mirror").Mirror,s=e("../mode/coffee/coffee-script");window.addEventListener=function(){};var o=t.Worker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue();try{s.parse(e)}catch(t){var n=t.message.match(/Parse error on line (\d+): (.*)/);if(n){this.sender.emit("error",{row:parseInt(n[1],10)-1,column:null,text:n[2],type:"error"});return}if(t instanceof SyntaxError){var n=t.message.match(/ on line (\d+)/);n&&this.sender.emit("error",{row:parseInt(n[1],10)-1,column:null,text:t.message.replace(n[0],""),type:"error"})}return}this.sender.emit("ok")}}.call(o.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.deferredCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas([e.data]),n.schedule(s.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/mode/coffee/coffee-script",["require","exports","module","ace/mode/coffee/lexer","ace/mode/coffee/parser","ace/mode/coffee/nodes"],function(e,t,n){var r=e("./lexer").Lexer,i=e("./parser"),s=new r;i.lexer={lex:function(){var e,t;return t=this.tokens[this.pos++]||[""],e=t[0],this.yytext=t[1],this.yylineno=t[2],e},setInput:function(e){return this.tokens=e,this.pos=0},upcomingInput:function(){return""}},i.yy=e("./nodes"),t.parse=function(e){return i.parse(s.tokenize(e))}}),define("ace/mode/coffee/lexer",["require","exports","module","ace/mode/coffee/rewriter","ace/mode/coffee/helpers"],function(e,t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1};K=e("./rewriter"),j=K.Rewriter,b=K.INVERSES,Q=e("./helpers"),X=Q.count,J=Q.starts,W=Q.compact,$=Q.last,t.Lexer=C=function(){function e(){}return e.prototype.tokenize=function(e,t){var n,r;t==null&&(t={}),z.test(e)&&(e="\n"+e),e=e.replace(/\r/g,"").replace(R,""),this.code=e,this.line=t.line||0,this.indent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],n=0;while(this.chunk=e.slice(n))n+=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken();return this.closeIndentation(),(r=this.ends.pop())&&this.error("missing "+r),t.rewrite===!1?this.tokens:(new j).rewrite(this.tokens)},e.prototype.identifierToken=function(){var e,t,n,r,i,s,f,l,c;return(i=g.exec(this.chunk))?(r=i[0],n=i[1],e=i[2],n==="own"&&this.tag()==="FOR"?(this.token("OWN",n),n.length):(t=e||(s=$(this.tokens))&&((l=s[0])==="."||l==="?."||l==="::"||!s.spaced&&s[0]==="@"),f="IDENTIFIER",!t&&(G.call(S,n)>=0||G.call(a,n)>=0)&&(f=n.toUpperCase(),f==="WHEN"&&(c=this.tag(),G.call(x,c)>=0)?f="LEADING_WHEN":f==="FOR"?this.seenFor=!0:f==="UNLESS"?f="IF":G.call(U,f)>=0?f="UNARY":G.call(H,f)>=0&&(f!=="INSTANCEOF"&&this.seenFor?(f="FOR"+f,this.seenFor=!1):(f="RELATION",this.value()==="!"&&(this.tokens.pop(),n="!"+n)))),G.call(E,n)>=0&&(t?(f="IDENTIFIER",n=new String(n),n.reserved=!0):G.call(B,n)>=0&&this.error('reserved word "'+n+'"')),t||(G.call(o,n)>=0&&(n=u[n]),f=function(){switch(n){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return f}}()),this.token(f,n),e&&this.token(":",":"),r.length)):0},e.prototype.numberToken=function(){var e,t,n,r,i;if(!(n=_.exec(this.chunk)))return 0;r=n[0],/^0[BOX]/.test(r)?this.error("radix prefix '"+r+"' must be lowercase"):/E/.test(r)&&!/^0x/.test(r)?this.error("exponential notation '"+r+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(r)?this.error("decimal literal '"+r+"' must not be prefixed with '0'"):/^0\d+/.test(r)&&this.error("octal literal '"+r+"' must be prefixed with '0o'"),t=r.length;if(i=/^0o([0-7]+)/.exec(r))r="0x"+parseInt(i[1],8).toString(16);if(e=/^0b([01]+)/.exec(r))r="0x"+parseInt(e[1],2).toString(16);return this.token("NUMBER",r),t},e.prototype.stringToken=function(){var e,t,n;switch(this.chunk.charAt(0)){case"'":if(!(e=I.exec(this.chunk)))return 0;this.token("STRING",(n=e[0]).replace(L,"\\\n"));break;case'"':if(!(n=this.balancedString(this.chunk,'"')))return 0;0<n.indexOf("#{",1)?this.interpolateString(n.slice(1,-1)):this.token("STRING",this.escapeLines(n));break;default:return 0}return(t=/^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(n))&&this.error("octal escape sequences "+n+" are not allowed"),this.line+=X(n,"\n"),n.length},e.prototype.heredocToken=function(){var e,t,n,r;return(n=h.exec(this.chunk))?(t=n[0],r=t.charAt(0),e=this.sanitizeHeredoc(n[2],{quote:r,indent:null}),r==='"'&&0<=e.indexOf("#{")?this.interpolateString(e,{heredoc:!0}):this.token("STRING",this.makeString(e,r,!0)),this.line+=X(t,"\n"),t.length):0},e.prototype.commentToken=function(){var e,t,n;return(n=this.chunk.match(f))?(e=n[0],t=n[1],t&&this.token("HERECOMMENT",this.sanitizeHeredoc(t,{herecomment:!0,indent:Array(this.indent+1).join(" ")})),this.line+=X(e,"\n"),e.length):0},e.prototype.jsToken=function(){var e,t;return this.chunk.charAt(0)!=="`"||!(e=w.exec(this.chunk))?0:(this.token("JS",(t=e[0]).slice(1,-1)),this.line+=X(t,"\n"),t.length)},e.prototype.regexToken=function(){var e,t,n,r,i,s,o;return this.chunk.charAt(0)!=="/"?0:(n=v.exec(this.chunk))?(t=this.heregexToken(n),this.line+=X(n[0],"\n"),t):(r=$(this.tokens),r&&(s=r[0],G.call(r.spaced?O:M,s)>=0)?0:(n=P.exec(this.chunk))?(o=n,n=o[0],i=o[1],e=o[2],i.slice(0,2)==="/*"&&this.error("regular expressions cannot begin with `*`"),i==="//"&&(i="/(?:)/"),this.token("REGEX",""+i+e),n.length):0)},e.prototype.heregexToken=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p;r=e[0],t=e[1],n=e[2];if(0>t.indexOf("#{"))return i=t.replace(m,"").replace(/\//g,"\\/"),i.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(i||"(?:)")+"/"+n),r.length;this.token("IDENTIFIER","RegExp"),this.tokens.push(["CALL_START","("]),o=[],l=this.interpolateString(t,{regex:!0});for(a=0,f=l.length;a<f;a++){c=l[a],s=c[0],u=c[1];if(s==="TOKENS")o.push.apply(o,u);else{if(!(u=u.replace(m,"")))continue;u=u.replace(/\\/g,"\\\\"),o.push(["STRING",this.makeString(u,'"',!0)])}o.push(["+","+"])}return o.pop(),((h=o[0])!=null?h[0]:void 0)!=="STRING"&&this.tokens.push(["STRING",'""'],["+","+"]),(p=this.tokens).push.apply(p,o),n&&this.tokens.push([",",","],["STRING",'"'+n+'"']),this.token(")",")"),r.length},e.prototype.lineToken=function(){var e,t,n,r,i;if(!(n=A.exec(this.chunk)))return 0;t=n[0],this.line+=X(t,"\n"),this.seenFor=!1,i=t.length-1-t.lastIndexOf("\n"),r=this.unfinished();if(i-this.indebt===this.indent)return r?this.suppressNewlines():this.newlineToken(),t.length;if(i>this.indent){if(r)return this.indebt=i-this.indent,this.suppressNewlines(),t.length;e=i-this.indent+this.outdebt,this.token("INDENT",e),this.indents.push(e),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-i,r);return this.indent=i,t.length},e.prototype.outdentToken=function(e,t){var n,r;while(e>0)r=this.indents.length-1,this.indents[r]===void 0?e=0:this.indents[r]===this.outdebt?(e-=this.outdebt,this.outdebt=0):this.indents[r]<this.outdebt?(this.outdebt-=this.indents[r],e-=this.indents[r]):(n=this.indents.pop()-this.outdebt,e-=n,this.outdebt=0,this.pair("OUTDENT"),this.token("OUTDENT",n));n&&(this.outdebt-=e);while(this.value()===";")this.tokens.pop();return this.tag()!=="TERMINATOR"&&!t&&this.token("TERMINATOR","\n"),this},e.prototype.whitespaceToken=function(){var e,t,n;return!(e=z.exec(this.chunk))&&!(t=this.chunk.charAt(0)==="\n")?0:(n=$(this.tokens),n&&(n[e?"spaced":"newLine"]=!0),e?e[0].length:0)},e.prototype.newlineToken=function(){while(this.value()===";")this.tokens.pop();return this.tag()!=="TERMINATOR"&&this.token("TERMINATOR","\n"),this},e.prototype.suppressNewlines=function(){return this.value()==="\\"&&this.tokens.pop(),this},e.prototype.literalToken=function(){var e,t,n,r,o,u,a,f;(e=D.exec(this.chunk))?(r=e[0],s.test(r)&&this.tagParameters()):r=this.chunk.charAt(0),n=r,t=$(this.tokens);if(r==="="&&t){!t[1].reserved&&(o=t[1],G.call(E,o)>=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned");if((u=t[1])==="||"||u==="&&")return t[0]="COMPOUND_ASSIGN",t[1]+="=",r.length}if(r===";")this.seenFor=!1,n="TERMINATOR";else if(G.call(k,r)>=0)n="MATH";else if(G.call(l,r)>=0)n="COMPARE";else if(G.call(c,r)>=0)n="COMPOUND_ASSIGN";else if(G.call(U,r)>=0)n="UNARY";else if(G.call(F,r)>=0)n="SHIFT";else if(G.call(N,r)>=0||r==="?"&&(t!=null?t.spaced:void 0))n="LOGIC";else if(t&&!t.spaced)if(r==="("&&(a=t[0],G.call(i,a)>=0))t[0]==="?"&&(t[0]="FUNC_EXIST"),n="CALL_START";else if(r==="["&&(f=t[0],G.call(y,f)>=0)){n="INDEX_START";switch(t[0]){case"?":t[0]="INDEX_SOAK"}}switch(r){case"(":case"{":case"[":this.ends.push(b[r]);break;case")":case"}":case"]":this.pair(r)}return this.token(n,r),r.length},e.prototype.sanitizeHeredoc=function(e,t){var n,r,i,s,o;i=t.indent,r=t.herecomment;if(r){p.test(e)&&this.error('block comment cannot contain "*/", starting');if(e.indexOf("\n")<=0)return e}else while(s=d.exec(e)){n=s[1];if(i===null||0<(o=n.length)&&o<i.length)i=n}return i&&(e=e.replace(RegExp("\\n"+i,"g"),"\n")),r||(e=e.replace(/^\n/,"")),e},e.prototype.tagParameters=function(){var e,t,n,r;if(this.tag()!==")")return this;t=[],r=this.tokens,e=r.length,r[--e][0]="PARAM_END";while(n=r[--e])switch(n[0]){case")":t.push(n);break;case"(":case"CALL_START":if(!t.length)return n[0]==="("?(n[0]="PARAM_START",this):this;t.pop()}return this},e.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},e.prototype.balancedString=function(e,t){var n,r,i,s,o,u,a,f;n=0,u=[t];for(r=a=1,f=e.length;1<=f?a<f:a>f;r=1<=f?++a:--a){if(n){--n;continue}switch(i=e.charAt(r)){case"\\":++n;continue;case t:u.pop();if(!u.length)return e.slice(0,+r+1||9e9);t=u[u.length-1];continue}t!=="}"||i!=='"'&&i!=="'"?t==="}"&&i==="/"&&(s=v.exec(e.slice(r))||P.exec(e.slice(r)))?n+=s[0].length-1:t==="}"&&i==="{"?u.push(t="}"):t==='"'&&o==="#"&&i==="{"&&u.push(t="}"):u.push(t=i),o=i}return this.error("missing "+u.pop()+", starting")},e.prototype.interpolateString=function(t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w;n==null&&(n={}),i=n.heredoc,h=n.regex,d=[],c=0,s=-1;while(f=t.charAt(s+=1)){if(f==="\\"){s+=1;continue}if(f!=="#"||t.charAt(s+1)!=="{"||!(r=this.balancedString(t.slice(s+1),"}")))continue;c<s&&d.push(["NEOSTRING",t.slice(c,s)]),o=r.slice(1,-1);if(o.length){l=(new e).tokenize(o,{line:this.line,rewrite:!1}),l.pop(),((y=l[0])!=null?y[0]:void 0)==="TERMINATOR"&&l.shift();if(a=l.length)a>1&&(l.unshift(["(","(",this.line]),l.push([")",")",this.line])),d.push(["TOKENS",l])}s+=r.length,c=s+1}s>c&&c<t.length&&d.push(["NEOSTRING",t.slice(c)]);if(h)return d;if(!d.length)return this.token("STRING",'""');d[0][0]!=="NEOSTRING"&&d.unshift(["",""]),(u=d.length>1)&&this.token("(","(");for(s=m=0,g=d.length;m<g;s=++m)b=d[s],p=b[0],v=b[1],s&&this.token("+","+"),p==="TOKENS"?(w=this.tokens).push.apply(w,v):this.token("STRING",this.makeString(v,'"',i));return u&&this.token(")",")"),d},e.prototype.pair=function(e){var t,n;return e!==(n=$(this.ends))?("OUTDENT"!==n&&this.error("unmatched "+e),this.indent-=t=$(this.indents),this.outdentToken(t,!0),this.pair(e)):this.ends.pop()},e.prototype.token=function(e,t){return this.tokens.push([e,t,this.line])},e.prototype.tag=function(e,t){var n;return(n=$(this.tokens,e))&&(t?n[0]=t:n[0])},e.prototype.value=function(e,t){var n;return(n=$(this.tokens,e))&&(t?n[1]=t:n[1])},e.prototype.unfinished=function(){var e;return T.test(this.chunk)||(e=this.tag())==="\\"||e==="."||e==="?."||e==="UNARY"||e==="MATH"||e==="+"||e==="-"||e==="SHIFT"||e==="RELATION"||e==="COMPARE"||e==="LOGIC"||e==="THROW"||e==="EXTENDS"},e.prototype.escapeLines=function(e,t){return e.replace(L,t?"\\n":"")},e.prototype.makeString=function(e,t,n){return e?(e=e.replace(/\\([\s\S])/g,function(e,n){return n==="\n"||n===t?n:e}),e=e.replace(RegExp(""+t,"g"),"\\$&"),t+this.escapeLines(e,n)+t):t+t},e.prototype.error=function(e){throw SyntaxError(""+e+" on line "+(this.line+1))},e}(),S=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],a=["undefined","then","unless","until","loop","of","by","when"],u={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},o=function(){var e;e=[];for(V in u)e.push(V);return e}(),a=a.concat(o),B=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf","implements","interface","package","private","protected","public","static","yield"],q=["arguments","eval"],E=S.concat(B).concat(q),t.RESERVED=B.concat(S).concat(a).concat(q),t.STRICT_PROSCRIBED=q,g=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,_=/^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i,h=/^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/,D=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,z=/^[^\n\S]+/,f=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/,s=/^[-=]>/,A=/^(?:\n[^\n\S]*)+/,I=/^'[^\\']*(?:\\.[^\\']*)*'/,w=/^`[^\\`]*(?:\\.[^\\`]*)*`/,P=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,v=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,m=/\s+(?:#.*)?/g,L=/\n/g,d=/\n+([^\n\S]*)/g,p=/\*\//,T=/^\s*(?:,|\??\.(?![.\d])|::)/,R=/\s+$/,c=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],U=["!","~","NEW","TYPEOF","DELETE","DO"],N=["&&","||","&","|","^"],F=["<<",">>",">>>"],l=["==","!=","<",">","<=",">="],k=["*","/","%"],H=["IN","OF","INSTANCEOF"],r=["TRUE","FALSE"],O=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--","]"],M=O.concat(")","}","THIS","IDENTIFIER","STRING"),i=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],y=i.concat("NUMBER","BOOL","NULL","UNDEFINED"),x=["INDENT","OUTDENT","TERMINATOR"]}),define("ace/mode/coffee/rewriter",["require","exports","module"],function(e,t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1},S=[].slice;t.Rewriter=function(){function e(){}return e.prototype.rewrite=function(e){return this.tokens=e,this.removeLeadingNewlines(),this.removeMidExpressionNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.addImplicitIndentation(),this.tagPostfixConditionals(),this.addImplicitBraces(),this.addImplicitParentheses(),this.tokens},e.prototype.scanTokens=function(e){var t,n,r;r=this.tokens,t=0;while(n=r[t])t+=e.call(this,n,t,r);return!0},e.prototype.detectEnd=function(e,t,n){var r,i,u,a,f;u=this.tokens,r=0;while(i=u[e]){if(r===0&&t.call(this,i,e))return n.call(this,i,e);if(!i||r<0)return n.call(this,i,e-1);if(a=i[0],E.call(o,a)>=0)r+=1;else if(f=i[0],E.call(s,f)>=0)r-=1;e+=1}return e-1},e.prototype.removeLeadingNewlines=function(){var e,t,n,r,i;i=this.tokens;for(e=n=0,r=i.length;n<r;e=++n){t=i[e][0];if(t!=="TERMINATOR")break}if(e)return this.tokens.splice(0,e)},e.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(e,t,n){var r;return e[0]==="TERMINATOR"&&(r=this.tag(t+1),E.call(i,r)>=0)?(n.splice(t,1),0):1})},e.prototype.closeOpenCalls=function(){var e,t;return t=function(e,t){var n;return(n=e[0])===")"||n==="CALL_END"||e[0]==="OUTDENT"&&this.tag(t-1)===")"},e=function(e,t){return this.tokens[e[0]==="OUTDENT"?t-1:t][0]="CALL_END"},this.scanTokens(function(n,r){return n[0]==="CALL_START"&&this.detectEnd(r+1,t,e),1})},e.prototype.closeOpenIndexes=function(){var e,t;return t=function(e,t){var n;return(n=e[0])==="]"||n==="INDEX_END"},e=function(e,t){return e[0]="INDEX_END"},this.scanTokens(function(n,r){return n[0]==="INDEX_START"&&this.detectEnd(r+1,t,e),1})},e.prototype.addImplicitBraces=function(){var e,t,n,r,i,u,a,l;return r=[],i=null,l=null,n=!0,u=0,a=0,t=function(e,t){var r,i,s,o,u,c;return u=this.tokens.slice(t+1,+(t+3)+1||9e9),r=u[0],o=u[1],s=u[2],"HERECOMMENT"===(r!=null?r[0]:void 0)?!1:(i=e[0],E.call(p,i)>=0&&(n=!1),(i==="TERMINATOR"||i==="OUTDENT"||E.call(f,i)>=0&&n&&t-a!==1)&&(!l&&this.tag(t-1)!==","||(o!=null?o[0]:void 0)!==":"&&((r!=null?r[0]:void 0)!=="@"||(s!=null?s[0]:void 0)!==":"))||i===","&&r&&(c=r[0])!=="IDENTIFIER"&&c!=="NUMBER"&&c!=="STRING"&&c!=="@"&&c!=="TERMINATOR"&&c!=="OUTDENT")},e=function(e,t){var n;return n=this.generate("}","}",e[2]),this.tokens.splice(t,0,n)},this.scanTokens(function(u,f,c){var h,d,v,m,g,y,b,w;if(b=m=u[0],E.call(o,b)>=0)return r.push([m==="INDENT"&&this.tag(f-1)==="{"?"{":m,f]),1;if(E.call(s,m)>=0)return i=r.pop(),1;if(m!==":"||(h=this.tag(f-2))!==":"&&((w=r[r.length-1])!=null?w[0]:void 0)==="{")return 1;n=!0,a=f+1,r.push(["{"]),d=h==="@"?f-2:f-1;while(this.tag(d-2)==="HERECOMMENT")d-=2;return v=this.tag(d-1),l=!v||E.call(p,v)>=0,y=new String("{"),y.generated=!0,g=this.generate("{",y,u[2]),c.splice(d,0,g),this.detectEnd(f+2,t,e),2})},e.prototype.addImplicitParentheses=function(){var e,t,n,r,i;return n=i=r=!1,t=function(e,t){var n,s,o,a;s=e[0];if(!i&&e.fromThen)return!0;if(s==="IF"||s==="ELSE"||s==="CATCH"||s==="->"||s==="=>"||s==="CLASS")i=!0;if(s==="IF"||s==="ELSE"||s==="SWITCH"||s==="TRY"||s==="=")r=!0;return s!=="."&&s!=="?."&&s!=="::"||this.tag(t-1)!=="OUTDENT"?!e.generated&&this.tag(t-1)!==","&&(E.call(f,s)>=0||s==="INDENT"&&!r)&&(s!=="INDENT"||(o=this.tag(t-2))!=="CLASS"&&o!=="EXTENDS"&&(a=this.tag(t-1),E.call(u,a)<0)&&(!(n=this.tokens[t+1])||!n.generated||n[0]!=="{")):!0},e=function(e,t){return this.tokens.splice(t,0,this.generate("CALL_END",")",e[2]))},this.scanTokens(function(s,o,u){var f,h,d,v,m,g,y,b;m=s[0];if(m==="CLASS"||m==="IF"||m==="FOR"||m==="WHILE")n=!0;return g=u.slice(o-1,+(o+1)+1||9e9),v=g[0],h=g[1],d=g[2],f=!n&&m==="INDENT"&&d&&d.generated&&d[0]==="{"&&v&&(y=v[0],E.call(l,y)>=0),i=!1,r=!1,E.call(p,m)>=0&&(n=!1),v&&!v.spaced&&m==="?"&&(s.call=!0),s.fromThen?1:f||(v!=null?v.spaced:void 0)&&(v.call||(b=v[0],E.call(l,b)>=0))&&(E.call(a,m)>=0||!s.spaced&&!s.newLine&&E.call(c,m)>=0)?(u.splice(o,0,this.generate("CALL_START","(",s[2])),this.detectEnd(o+1,t,e),v[0]==="?"&&(v[0]="FUNC_EXIST"),2):1})},e.prototype.addImplicitIndentation=function(){var e,t,n,r,i;return i=n=r=null,t=function(e,t){var n;return e[1]!==";"&&(n=e[0],E.call(d,n)>=0)&&(e[0]!=="ELSE"||i==="IF"||i==="THEN")},e=function(e,t){return this.tokens.splice(this.tag(t-1)===","?t-1:t,0,r)},this.scanTokens(function(s,o,u){var a,f,l;return a=s[0],a==="TERMINATOR"&&this.tag(o+1)==="THEN"?(u.splice(o,1),0):a==="ELSE"&&this.tag(o-1)!=="OUTDENT"?(u.splice.apply(u,[o,0].concat(S.call(this.indentation(s)))),2):a!=="CATCH"||(f=this.tag(o+2))!=="OUTDENT"&&f!=="TERMINATOR"&&f!=="FINALLY"?E.call(v,a)>=0&&this.tag(o+1)!=="INDENT"&&(a!=="ELSE"||this.tag(o+1)!=="IF")?(i=a,l=this.indentation(s,!0),n=l[0],r=l[1],i==="THEN"&&(n.fromThen=!0),u.splice(o+1,0,n),this.detectEnd(o+2,t,e),a==="THEN"&&u.splice(o,1),1):1:(u.splice.apply(u,[o+2,0].concat(S.call(this.indentation(s)))),4)})},e.prototype.tagPostfixConditionals=function(){var e,t,n;return n=null,t=function(e,t){var n;return(n=e[0])==="TERMINATOR"||n==="INDENT"},e=function(e,t){if(e[0]!=="INDENT"||e.generated&&!e.fromThen)return n[0]="POST_"+n[0]},this.scanTokens(function(r,i){return r[0]!=="IF"?1:(n=r,this.detectEnd(i+1,t,e),1)})},e.prototype.indentation=function(e,t){var n,r;return t==null&&(t=!1),n=["INDENT",2,e[2]],r=["OUTDENT",2,e[2]],t&&(n.generated=r.generated=!0),[n,r]},e.prototype.generate=function(e,t,n){var r;return r=[e,t,n],r.generated=!0,r},e.prototype.tag=function(e){var t;return(t=this.tokens[e])!=null?t[0]:void 0},e}(),r=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],t.INVERSES=h={},o=[],s=[];for(y=0,b=r.length;y<b;y++)w=r[y],m=w[0],g=w[1],o.push(h[g]=m),s.push(h[m]=g);i=["CATCH","WHEN","ELSE","FINALLY"].concat(s),l=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"],a=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","TRY","SWITCH","THIS","BOOL","NULL","UNDEFINED","UNARY","SUPER","@","->","=>","[","(","{","--","++"],c=["+","-"],u=["->","=>","{","[",","],f=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],v=["ELSE","->","=>","TRY","FINALLY","THEN"],d=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],p=["TERMINATOR","INDENT","OUTDENT"]}),define("ace/mode/coffee/helpers",["require","exports","module"],function(e,t,n){var r,i,s;t.starts=function(e,t,n){return t===e.substr(n,t.length)},t.ends=function(e,t,n){var r;return r=t.length,t===e.substr(e.length-r-(n||0),r)},t.compact=function(e){var t,n,r,i;i=[];for(n=0,r=e.length;n<r;n++)t=e[n],t&&i.push(t);return i},t.count=function(e,t){var n,r;n=r=0;if(!t.length)return 1/0;while(r=1+e.indexOf(t,r))n++;return n},t.merge=function(e,t){return r(r({},e),t)},r=t.extend=function(e,t){var n,r;for(n in t)r=t[n],e[n]=r;return e},t.flatten=i=function(e){var t,n,r,s;n=[];for(r=0,s=e.length;r<s;r++)t=e[r],t instanceof Array?n=n.concat(i(t)):n.push(t);return n},t.del=function(e,t){var n;return n=e[t],delete e[t],n},t.last=function(e,t){return e[e.length-(t||0)-1]},t.some=(s=Array.prototype.some)!=null?s:function(e){var t,n,r;for(n=0,r=this.length;n<r;n++){t=this[n];if(e(t))return!0}return!1}}),define("ace/mode/coffee/parser",["require","exports","module"],function(e,t,n){var r={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,Index:69,INDEX_START:70,IndexValue:71,INDEX_END:72,INDEX_SOAK:73,Slice:74,"{":75,AssignList:76,"}":77,CLASS:78,EXTENDS:79,OptFuncExist:80,Arguments:81,SUPER:82,FUNC_EXIST:83,CALL_START:84,CALL_END:85,ArgList:86,THIS:87,"@":88,"[":89,"]":90,RangeDots:91,"..":92,Arg:93,SimpleArgs:94,TRY:95,Catch:96,FINALLY:97,CATCH:98,THROW:99,"(":100,")":101,WhileSource:102,WHILE:103,WHEN:104,UNTIL:105,Loop:106,LOOP:107,ForBody:108,FOR:109,ForStart:110,ForSource:111,ForVariables:112,OWN:113,ForValue:114,FORIN:115,FOROF:116,BY:117,SWITCH:118,Whens:119,ELSE:120,When:121,LEADING_WHEN:122,IfBlock:123,IF:124,POST_IF:125,UNARY:126,"-":127,"+":128,"--":129,"++":130,"?":131,MATH:132,SHIFT:133,COMPARE:134,LOGIC:135,RELATION:136,COMPOUND_ASSIGN:137,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],performAction:function(t,n,r,i,s,o,u){var a=o.length-1;switch(s){case 1:return this.$=new i.Block;case 2:return this.$=o[a];case 3:return this.$=o[a-1];case 4:this.$=i.Block.wrap([o[a]]);break;case 5:this.$=o[a-2].push(o[a]);break;case 6:this.$=o[a-1];break;case 7:this.$=o[a];break;case 8:this.$=o[a];break;case 9:this.$=o[a];break;case 10:this.$=o[a];break;case 11:this.$=new i.Literal(o[a]);break;case 12:this.$=o[a];break;case 13:this.$=o[a];break;case 14:this.$=o[a];break;case 15:this.$=o[a];break;case 16:this.$=o[a];break;case 17:this.$=o[a];break;case 18:this.$=o[a];break;case 19:this.$=o[a];break;case 20:this.$=o[a];break;case 21:this.$=o[a];break;case 22:this.$=o[a];break;case 23:this.$=o[a];break;case 24:this.$=new i.Block;break;case 25:this.$=o[a-1];break;case 26:this.$=new i.Literal(o[a]);break;case 27:this.$=new i.Literal(o[a]);break;case 28:this.$=new i.Literal(o[a]);break;case 29:this.$=o[a];break;case 30:this.$=new i.Literal(o[a]);break;case 31:this.$=new i.Literal(o[a]);break;case 32:this.$=new i.Literal(o[a]);break;case 33:this.$=new i.Undefined;break;case 34:this.$=new i.Null;break;case 35:this.$=new i.Bool(o[a]);break;case 36:this.$=new i.Assign(o[a-2],o[a]);break;case 37:this.$=new i.Assign(o[a-3],o[a]);break;case 38:this.$=new i.Assign(o[a-4],o[a-1]);break;case 39:this.$=new i.Value(o[a]);break;case 40:this.$=new i.Assign(new i.Value(o[a-2]),o[a],"object");break;case 41:this.$=new i.Assign(new i.Value(o[a-4]),o[a-1],"object");break;case 42:this.$=o[a];break;case 43:this.$=o[a];break;case 44:this.$=o[a];break;case 45:this.$=o[a];break;case 46:this.$=new i.Return(o[a]);break;case 47:this.$=new i.Return;break;case 48:this.$=new i.Comment(o[a]);break;case 49:this.$=new i.Code(o[a-3],o[a],o[a-1]);break;case 50:this.$=new i.Code([],o[a],o[a-1]);break;case 51:this.$="func";break;case 52:this.$="boundfunc";break;case 53:this.$=o[a];break;case 54:this.$=o[a];break;case 55:this.$=[];break;case 56:this.$=[o[a]];break;case 57:this.$=o[a-2].concat(o[a]);break;case 58:this.$=o[a-3].concat(o[a]);break;case 59:this.$=o[a-5].concat(o[a-2]);break;case 60:this.$=new i.Param(o[a]);break;case 61:this.$=new i.Param(o[a-1],null,!0);break;case 62:this.$=new i.Param(o[a-2],o[a]);break;case 63:this.$=o[a];break;case 64:this.$=o[a];break;case 65:this.$=o[a];break;case 66:this.$=o[a];break;case 67:this.$=new i.Splat(o[a-1]);break;case 68:this.$=new i.Value(o[a]);break;case 69:this.$=o[a-1].add(o[a]);break;case 70:this.$=new i.Value(o[a-1],[].concat(o[a]));break;case 71:this.$=o[a];break;case 72:this.$=o[a];break;case 73:this.$=new i.Value(o[a]);break;case 74:this.$=new i.Value(o[a]);break;case 75:this.$=o[a];break;case 76:this.$=new i.Value(o[a]);break;case 77:this.$=new i.Value(o[a]);break;case 78:this.$=new i.Value(o[a]);break;case 79:this.$=o[a];break;case 80:this.$=new i.Access(o[a]);break;case 81:this.$=new i.Access(o[a],"soak");break;case 82:this.$=[new i.Access(new i.Literal("prototype")),new i.Access(o[a])];break;case 83:this.$=new i.Access(new i.Literal("prototype"));break;case 84:this.$=o[a];break;case 85:this.$=o[a-1];break;case 86:this.$=i.extend(o[a],{soak:!0});break;case 87:this.$=new i.Index(o[a]);break;case 88:this.$=new i.Slice(o[a]);break;case 89:this.$=new i.Obj(o[a-2],o[a-3].generated);break;case 90:this.$=[];break;case 91:this.$=[o[a]];break;case 92:this.$=o[a-2].concat(o[a]);break;case 93:this.$=o[a-3].concat(o[a]);break;case 94:this.$=o[a-5].concat(o[a-2]);break;case 95:this.$=new i.Class;break;case 96:this.$=new i.Class(null,null,o[a]);break;case 97:this.$=new i.Class(null,o[a]);break;case 98:this.$=new i.Class(null,o[a-1],o[a]);break;case 99:this.$=new i.Class(o[a]);break;case 100:this.$=new i.Class(o[a-1],null,o[a]);break;case 101:this.$=new i.Class(o[a-2],o[a]);break;case 102:this.$=new i.Class(o[a-3],o[a-1],o[a]);break;case 103:this.$=new i.Call(o[a-2],o[a],o[a-1]);break;case 104:this.$=new i.Call(o[a-2],o[a],o[a-1]);break;case 105:this.$=new i.Call("super",[new i.Splat(new i.Literal("arguments"))]);break;case 106:this.$=new i.Call("super",o[a]);break;case 107:this.$=!1;break;case 108:this.$=!0;break;case 109:this.$=[];break;case 110:this.$=o[a-2];break;case 111:this.$=new i.Value(new i.Literal("this"));break;case 112:this.$=new i.Value(new i.Literal("this"));break;case 113:this.$=new i.Value(new i.Literal("this"),[new i.Access(o[a])],"this");break;case 114:this.$=new i.Arr([]);break;case 115:this.$=new i.Arr(o[a-2]);break;case 116:this.$="inclusive";break;case 117:this.$="exclusive";break;case 118:this.$=new i.Range(o[a-3],o[a-1],o[a-2]);break;case 119:this.$=new i.Range(o[a-2],o[a],o[a-1]);break;case 120:this.$=new i.Range(o[a-1],null,o[a]);break;case 121:this.$=new i.Range(null,o[a],o[a-1]);break;case 122:this.$=new i.Range(null,null,o[a]);break;case 123:this.$=[o[a]];break;case 124:this.$=o[a-2].concat(o[a]);break;case 125:this.$=o[a-3].concat(o[a]);break;case 126:this.$=o[a-2];break;case 127:this.$=o[a-5].concat(o[a-2]);break;case 128:this.$=o[a];break;case 129:this.$=o[a];break;case 130:this.$=o[a];break;case 131:this.$=[].concat(o[a-2],o[a]);break;case 132:this.$=new i.Try(o[a]);break;case 133:this.$=new i.Try(o[a-1],o[a][0],o[a][1]);break;case 134:this.$=new i.Try(o[a-2],null,null,o[a]);break;case 135:this.$=new i.Try(o[a-3],o[a-2][0],o[a-2][1],o[a]);break;case 136:this.$=[o[a-1],o[a]];break;case 137:this.$=new i.Throw(o[a]);break;case 138:this.$=new i.Parens(o[a-1]);break;case 139:this.$=new i.Parens(o[a-2]);break;case 140:this.$=new i.While(o[a]);break;case 141:this.$=new i.While(o[a-2],{guard:o[a]});break;case 142:this.$=new i.While(o[a],{invert:!0});break;case 143:this.$=new i.While(o[a-2],{invert:!0,guard:o[a]});break;case 144:this.$=o[a-1].addBody(o[a]);break;case 145:this.$=o[a].addBody(i.Block.wrap([o[a-1]]));break;case 146:this.$=o[a].addBody(i.Block.wrap([o[a-1]]));break;case 147:this.$=o[a];break;case 148:this.$=(new i.While(new i.Literal("true"))).addBody(o[a]);break;case 149:this.$=(new i.While(new i.Literal("true"))).addBody(i.Block.wrap([o[a]]));break;case 150:this.$=new i.For(o[a-1],o[a]);break;case 151:this.$=new i.For(o[a-1],o[a]);break;case 152:this.$=new i.For(o[a],o[a-1]);break;case 153:this.$={source:new i.Value(o[a])};break;case 154:this.$=function(){return o[a].own=o[a-1].own,o[a].name=o[a-1][0],o[a].index=o[a-1][1],o[a]}();break;case 155:this.$=o[a];break;case 156:this.$=function(){return o[a].own=!0,o[a]}();break;case 157:this.$=o[a];break;case 158:this.$=o[a];break;case 159:this.$=new i.Value(o[a]);break;case 160:this.$=new i.Value(o[a]);break;case 161:this.$=[o[a]];break;case 162:this.$=[o[a-2],o[a]];break;case 163:this.$={source:o[a]};break;case 164:this.$={source:o[a],object:!0};break;case 165:this.$={source:o[a-2],guard:o[a]};break;case 166:this.$={source:o[a-2],guard:o[a],object:!0};break;case 167:this.$={source:o[a-2],step:o[a]};break;case 168:this.$={source:o[a-4],guard:o[a-2],step:o[a]};break;case 169:this.$={source:o[a-4],step:o[a-2],guard:o[a]};break;case 170:this.$=new i.Switch(o[a-3],o[a-1]);break;case 171:this.$=new i.Switch(o[a-5],o[a-3],o[a-1]);break;case 172:this.$=new i.Switch(null,o[a-1]);break;case 173:this.$=new i.Switch(null,o[a-3],o[a-1]);break;case 174:this.$=o[a];break;case 175:this.$=o[a-1].concat(o[a]);break;case 176:this.$=[[o[a-1],o[a]]];break;case 177:this.$=[[o[a-2],o[a-1]]];break;case 178:this.$=new i.If(o[a-1],o[a],{type:o[a-2]});break;case 179:this.$=o[a-4].addElse(new i.If(o[a-1],o[a],{type:o[a-2]}));break;case 180:this.$=o[a];break;case 181:this.$=o[a-2].addElse(o[a]);break;case 182:this.$=new i.If(o[a],i.Block.wrap([o[a-2]]),{type:o[a-1],statement:!0});break;case 183:this.$=new i.If(o[a],i.Block.wrap([o[a-2]]),{type:o[a-1],statement:!0});break;case 184:this.$=new i.Op(o[a-1],o[a]);break;case 185:this.$=new i.Op("-",o[a]);break;case 186:this.$=new i.Op("+",o[a]);break;case 187:this.$=new i.Op("--",o[a]);break;case 188:this.$=new i.Op("++",o[a]);break;case 189:this.$=new i.Op("--",o[a-1],null,!0);break;case 190:this.$=new i.Op("++",o[a-1],null,!0);break;case 191:this.$=new i.Existence(o[a-1]);break;case 192:this.$=new i.Op("+",o[a-2],o[a]);break;case 193:this.$=new i.Op("-",o[a-2],o[a]);break;case 194:this.$=new i.Op(o[a-1],o[a-2],o[a]);break;case 195:this.$=new i.Op(o[a-1],o[a-2],o[a]);break;case 196:this.$=new i.Op(o[a-1],o[a-2],o[a]);break;case 197:this.$=new i.Op(o[a-1],o[a-2],o[a]);break;case 198:this.$=function(){return o[a-1].charAt(0)==="!"?(new i.Op(o[a-1].slice(1),o[a-2],o[a])).invert():new i.Op(o[a-1],o[a-2],o[a])}();break;case 199:this.$=new i.Assign(o[a-2],o[a],o[a-1]);break;case 200:this.$=new i.Assign(o[a-4],o[a-1],o[a-3]);break;case 201:this.$=new i.Extends(o[a-2],o[a])}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},parseError:function(t,n){throw new Error(t)},parse:function(t){function d(e){r.length=r.length-2*e,i.length=i.length-e,s.length=s.length-e}function v(){var e;return e=n.lexer.lex()||1,typeof e!="number"&&(e=n.symbols_[e]||e),e}var n=this,r=[0],i=[null],s=[],o=this.table,u="",a=0,f=0,l=0,c=2,h=1;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var p=this.lexer.yylloc;s.push(p),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var m,g,y,b,w,E,S={},x,T,N,C;for(;;){y=r[r.length-1],this.defaultActions[y]?b=this.defaultActions[y]:(m==null&&(m=v()),b=o[y]&&o[y][m]);if(typeof b=="undefined"||!b.length||!b[0]){if(!l){C=[];for(x in o[y])this.terminals_[x]&&x>2&&C.push("'"+this.terminals_[x]+"'");var k="";this.lexer.showPosition?k="Parse error on line "+(a+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+C.join(", ")+", got '"+this.terminals_[m]+"'":k="Parse error on line "+(a+1)+": Unexpected "+(m==1?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(k,{text:this.lexer.match,token:this.terminals_[m]||m,line:this.lexer.yylineno,loc:p,expected:C})}if(l==3){if(m==h)throw new Error(k||"Parsing halted.");f=this.lexer.yyleng,u=this.lexer.yytext,a=this.lexer.yylineno,p=this.lexer.yylloc,m=v()}for(;;){if(c.toString()in o[y])break;if(y==0)throw new Error(k||"Parsing halted.");d(1),y=r[r.length-1]}g=m,m=c,y=r[r.length-1],b=o[y]&&o[y][c],l=3}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+m);switch(b[0]){case 1:r.push(m),i.push(this.lexer.yytext),s.push(this.lexer.yylloc),r.push(b[1]),m=null,g?(m=g,g=null):(f=this.lexer.yyleng,u=this.lexer.yytext,a=this.lexer.yylineno,p=this.lexer.yylloc,l>0&&l--);break;case 2:T=this.productions_[b[1]][1],S.$=i[i.length-T],S._$={first_line:s[s.length-(T||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(T||1)].first_column,last_column:s[s.length-1].last_column},E=this.performAction.call(S,u,f,a,this.yy,b[1],i,s);if(typeof E!="undefined")return E;T&&(r=r.slice(0,-1*T*2),i=i.slice(0,-1*T),s=s.slice(0,-1*T)),r.push(this.productions_[b[1]][0]),i.push(S.$),s.push(S._$),N=o[r[r.length-2]][r[r.length-1]],r.push(N);break;case 3:return!0}}return!0}};undefined,n.exports=r}),define("ace/mode/coffee/nodes",["require","exports","module","ace/mode/coffee/scope","ace/mode/coffee/lexer","ace/mode/coffee/helpers"],function(e,t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt={}.hasOwnProperty,dt=function(e,t){function r(){this.constructor=e}for(var n in t)pt.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e},vt=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1};R=e("./scope").Scope,ct=e("./lexer"),B=ct.RESERVED,q=ct.STRICT_PROSCRIBED,ht=e("./helpers"),Z=ht.compact,rt=ht.flatten,nt=ht.extend,st=ht.merge,et=ht.del,at=ht.starts,tt=ht.ends,it=ht.last,ut=ht.some,t.extend=nt,Y=function(){return!0},M=function(){return!1},V=function(){return this},O=function(){return this.negated=!this.negated,this},t.Base=o=function(){function e(){}return e.prototype.compile=function(e,t){var n;return e=nt({},e),t&&(e.level=t),n=this.unfoldSoak(e)||this,n.tab=e.indent,e.level===k||!n.isStatement(e)?n.compileNode(e):n.compileClosure(e)},e.prototype.compileClosure=function(e){if(this.jumps())throw SyntaxError("cannot use a pure statement in an expression.");return e.sharedScope=!0,l.wrap(this).compileNode(e)},e.prototype.cache=function(e,t,n){var r,i;return this.isComplex()?(r=new L(n||e.scope.freeVariable("ref")),i=new s(r,this),t?[i.compile(e,t),r.value]:[i,r]):(r=t?this.compile(e,t):this,[r,r])},e.prototype.compileLoopReference=function(e,t){var n,r;return n=r=this.compile(e,T),-Infinity<+n&&+n<Infinity||m.test(n)&&e.scope.check(n,!0)||(n=""+(r=e.scope.freeVariable(t))+" = "+n),[n,r]},e.prototype.makeReturn=function(e){var t;return t=this.unwrapAll(),e?new a(new L(""+e+".push"),[t]):new F(t)},e.prototype.contains=function(e){var t;return t=!1,this.traverseChildren(!1,function(n){if(e(n))return t=!0,!1}),t},e.prototype.containsType=function(e){return this instanceof e||this.contains(function(t){return t instanceof e})},e.prototype.lastNonComment=function(e){var t;t=e.length;while(t--)if(!(e[t]instanceof h))return e[t];return null},e.prototype.toString=function(e,t){var n;return e==null&&(e=""),t==null&&(t=this.constructor.name),n="\n"+e+t,this.soak&&(n+="?"),this.eachChild(function(t){return n+=t.toString(e+X)}),n},e.prototype.eachChild=function(e){var t,n,r,i,s,o,u,a;if(!this.children)return this;u=this.children;for(r=0,s=u.length;r<s;r++){t=u[r];if(this[t]){a=rt([this[t]]);for(i=0,o=a.length;i<o;i++){n=a[i];if(e(n)===!1)return this}}}return this},e.prototype.traverseChildren=function(e,t){return this.eachChild(function(n){return t(n)===!1?!1:n.traverseChildren(e,t)})},e.prototype.invert=function(){return new D("!",this)},e.prototype.unwrapAll=function(){var e;e=this;while(e!==(e=e.unwrap()))continue;return e},e.prototype.children=[],e.prototype.isStatement=M,e.prototype.jumps=M,e.prototype.isComplex=Y,e.prototype.isChainable=M,e.prototype.isAssignable=M,e.prototype.unwrap=V,e.prototype.unfoldSoak=M,e.prototype.assigns=M,e}(),t.Block=u=function(e){function t(e){this.expressions=Z(rt(e||[]))}return dt(t,e),t.prototype.children=["expressions"],t.prototype.push=function(e){return this.expressions.push(e),this},t.prototype.pop=function(){return this.expressions.pop()},t.prototype.unshift=function(e){return this.expressions.unshift(e),this},t.prototype.unwrap=function(){return this.expressions.length===1?this.expressions[0]:this},t.prototype.isEmpty=function(){return!this.expressions.length},t.prototype.isStatement=function(e){var t,n,r,i;i=this.expressions;for(n=0,r=i.length;n<r;n++){t=i[n];if(t.isStatement(e))return!0}return!1},t.prototype.jumps=function(e){var t,n,r,i;i=this.expressions;for(n=0,r=i.length;n<r;n++){t=i[n];if(t.jumps(e))return t}},t.prototype.makeReturn=function(e){var t,n;n=this.expressions.length;while(n--){t=this.expressions[n];if(!(t instanceof h)){this.expressions[n]=t.makeReturn(e),t instanceof F&&!t.expression&&this.expressions.splice(n,1);break}}return this},t.prototype.compile=function(e,n){return e==null&&(e={}),e.scope?t.__super__.compile.call(this,e,n):this.compileRoot(e)},t.prototype.compileNode=function(e){var n,r,i,s,o,u,a;this.tab=e.indent,s=e.level===k,r=[],a=this.expressions;for(o=0,u=a.length;o<u;o++)i=a[o],i=i.unwrapAll(),i=i.unfoldSoak(e)||i,i instanceof t?r.push(i.compileNode(e)):s?(i.front=!0,n=i.compile(e),i.isStatement(e)||(n=""+this.tab+n+";",i instanceof L&&(n=""+n+"\n")),r.push(n)):r.push(i.compile(e,T));return s?this.spaced?"\n"+r.join("\n\n")+"\n":r.join("\n"):(n=r.join(", ")||"void 0",r.length>1&&e.level>=T?"("+n+")":n)},t.prototype.compileRoot=function(e){var t,n,r,i,s,o;return e.indent=e.bare?"":X,e.scope=new R(null,this,null),e.level=k,this.spaced=!0,i="",e.bare||(s=function(){var e,t,i,s;i=this.expressions,s=[];for(r=e=0,t=i.length;e<t;r=++e){n=i[r];if(!(n.unwrap()instanceof h))break;s.push(n)}return s}.call(this),o=this.expressions.slice(s.length),this.expressions=s,s.length&&(i=""+this.compileNode(st(e,{indent:""}))+"\n"),this.expressions=o),t=this.compileWithDeclarations(e),e.bare?t:""+i+"(function() {\n"+t+"\n}).call(this);\n"},t.prototype.compileWithDeclarations=function(e){var t,n,r,i,s,o,u,a,f,l,c,p,d,v;n=o="",p=this.expressions;for(s=l=0,c=p.length;l<c;s=++l){i=p[s],i=i.unwrap();if(!(i instanceof h||i instanceof L))break}e=st(e,{level:k}),s&&(u=this.expressions.splice(s,9e9),d=[this.spaced,!1],f=d[0],this.spaced=d[1],v=[this.compileNode(e),f],n=v[0],this.spaced=v[1],this.expressions=u),o=this.compileNode(e),a=e.scope;if(a.expressions===this){r=e.scope.hasDeclarations(),t=a.hasAssignments;if(r||t)s&&(n+="\n"),n+=""+this.tab+"var ",r&&(n+=a.declaredVariables().join(", ")),t&&(r&&(n+=",\n"+(this.tab+X)),n+=a.assignedVariables().join(",\n"+(this.tab+X))),n+=";\n"}return n+o},t.wrap=function(e){return e.length===1&&e[0]instanceof t?e[0]:new t(e)},t}(o),t.Literal=L=function(e){function t(e){this.value=e}return dt(t,e),t.prototype.makeReturn=function(){return this.isStatement()?this:t.__super__.makeReturn.apply(this,arguments)},t.prototype.isAssignable=function(){return m.test(this.value)},t.prototype.isStatement=function(){var e;return(e=this.value)==="break"||e==="continue"||e==="debugger"},t.prototype.isComplex=M,t.prototype.assigns=function(e){return e===this.value},t.prototype.jumps=function(e){if(this.value==="break"&&!((e!=null?e.loop:void 0)||(e!=null?e.block:void 0)))return this;if(this.value==="continue"&&(e!=null?!e.loop:!void 0))return this},t.prototype.compileNode=function(e){var t,n;return t=this.value==="this"?((n=e.scope.method)!=null?n.bound:void 0)?e.scope.method.context:this.value:this.value.reserved?'"'+this.value+'"':this.value,this.isStatement()?""+this.tab+t+";":t},t.prototype.toString=function(){return' "'+this.value+'"'},t}(o),t.Undefined=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return dt(t,e),t.prototype.isAssignable=M,t.prototype.isComplex=M,t.prototype.compileNode=function(e){return e.level>=S?"(void 0)":"void 0"},t}(o),t.Null=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return dt(t,e),t.prototype.isAssignable=M,t.prototype.isComplex=M,t.prototype.compileNode=function(){return"null"},t}(o),t.Bool=function(e){function t(e){this.val=e}return dt(t,e),t.prototype.isAssignable=M,t.prototype.isComplex=M,t.prototype.compileNode=function(){return this.val},t}(o),t.Return=F=function(e){function t(e){e&&!e.unwrap().isUndefined&&(this.expression=e)}return dt(t,e),t.prototype.children=["expression"],t.prototype.isStatement=Y,t.prototype.makeReturn=V,t.prototype.jumps=V,t.prototype.compile=function(e,n){var r,i;return r=(i=this.expression)!=null?i.makeReturn():void 0,!r||r instanceof t?t.__super__.compile.call(this,e,n):r.compile(e,n)},t.prototype.compileNode=function(e){return this.tab+("return"+[this.expression?" "+this.expression.compile(e,C):void 0]+";")},t}(o),t.Value=Q=function(e){function t(e,n,r){return!n&&e instanceof t?e:(this.base=e,this.properties=n||[],r&&(this[r]=!0),this)}return dt(t,e),t.prototype.children=["base","properties"],t.prototype.add=function(e){return this.properties=this.properties.concat(e),this},t.prototype.hasProperties=function(){return!!this.properties.length},t.prototype.isArray=function(){return!this.properties.length&&this.base instanceof i},t.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},t.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},t.prototype.isSimpleNumber=function(){return this.base instanceof L&&I.test(this.base.value)},t.prototype.isString=function(){return this.base instanceof L&&y.test(this.base.value)},t.prototype.isAtomic=function(){var e,t,n,r;r=this.properties.concat(this.base);for(t=0,n=r.length;t<n;t++){e=r[t];if(e.soak||e instanceof a)return!1}return!0},t.prototype.isStatement=function(e){return!this.properties.length&&this.base.isStatement(e)},t.prototype.assigns=function(e){return!this.properties.length&&this.base.assigns(e)},t.prototype.jumps=function(e){return!this.properties.length&&this.base.jumps(e)},t.prototype.isObject=function(e){return this.properties.length?!1:this.base instanceof _&&(!e||this.base.generated)},t.prototype.isSplice=function(){return it(this.properties)instanceof U},t.prototype.unwrap=function(){return this.properties.length?this:this.base},t.prototype.cacheReference=function(e){var n,r,i,o;return i=it(this.properties),this.properties.length<2&&!this.base.isComplex()&&(i!=null?!i.isComplex():!void 0)?[this,this]:(n=new t(this.base,this.properties.slice(0,-1)),n.isComplex()&&(r=new L(e.scope.freeVariable("base")),n=new t(new H(new s(r,n)))),i?(i.isComplex()&&(o=new L(e.scope.freeVariable("name")),i=new E(new s(o,i.index)),o=new E(o)),[n.add(i),new t(r||n.base,[o||i])]):[n,r])},t.prototype.compileNode=function(e){var t,n,r,i,s;this.base.front=this.front,r=this.properties,t=this.base.compile(e,r.length?S:null),(this.base instanceof H||r.length)&&I.test(t)&&(t=""+t+".");for(i=0,s=r.length;i<s;i++)n=r[i],t+=n.compile(e);return t},t.prototype.unfoldSoak=function(e){var n,r=this;return this.unfoldedSoak!=null?this.unfoldedSoak:(n=function(){var n,i,o,u,a,f,l,c,h;if(o=r.base.unfoldSoak(e))return Array.prototype.push.apply(o.body.properties,r.properties),o;h=r.properties;for(i=l=0,c=h.length;l<c;i=++l){u=h[i];if(!u.soak)continue;return u.soak=!1,n=new t(r.base,r.properties.slice(0,i)),f=new t(r.base,r.properties.slice(i)),n.isComplex()&&(a=new L(e.scope.freeVariable("ref")),n=new H(new s(a,n)),f.base=a),new b(new p(n),f,{soak:!0})}return null}(),this.unfoldedSoak=n||!1)},t}(o),t.Comment=h=function(e){function t(e){this.comment=e}return dt(t,e),t.prototype.isStatement=Y,t.prototype.makeReturn=V,t.prototype.compileNode=function(e,t){var n;return n="/*"+ot(this.comment,this.tab)+("\n"+this.tab+"*/\n"),(t||e.level)===k&&(n=e.indent+n),n},t}(o),t.Call=a=function(e){function t(e,t,n){this.args=t!=null?t:[],this.soak=n,this.isNew=!1,this.isSuper=e==="super",this.variable=this.isSuper?null:e}return dt(t,e),t.prototype.children=["variable","args"],t.prototype.newInstance=function(){var e,n;return e=((n=this.variable)!=null?n.base:void 0)||this.variable,e instanceof t&&!e.isNew?e.newInstance():this.isNew=!0,this},t.prototype.superReference=function(e){var t,n,i;n=e.scope.namedMethod();if(!n)throw SyntaxError("cannot call super outside of a function.");i=n.name;if(i==null)throw SyntaxError("cannot call super on an anonymous function.");return n.klass?(t=[new r(new L("__super__"))],n["static"]&&t.push(new r(new L("constructor"))),t.push(new r(new L(i))),(new Q(new L(n.klass),t)).compile(e)):""+i+".__super__.constructor"},t.prototype.superThis=function(e){var t;return t=e.scope.method,t&&!t.klass&&t.context||"this"},t.prototype.unfoldSoak=function(e){var n,r,i,s,o,u,a,f,l;if(this.soak){if(this.variable){if(r=ft(e,this,"variable"))return r;f=(new Q(this.variable)).cacheReference(e),i=f[0],o=f[1]}else i=new L(this.superReference(e)),o=new Q(i);return o=new t(o,this.args),o.isNew=this.isNew,i=new L("typeof "+i.compile(e)+' === "function"'),new b(i,new Q(o),{soak:!0})}n=this,s=[];for(;;){if(n.variable instanceof t){s.push(n),n=n.variable;continue}if(!(n.variable instanceof Q))break;s.push(n);if(!((n=n.variable.base)instanceof t))break}l=s.reverse();for(u=0,a=l.length;u<a;u++)n=l[u],r&&(n.variable instanceof t?n.variable=r:n.variable.base=r),r=ft(e,n,"variable");return r},t.prototype.filterImplicitObjects=function(e){var t,n,r,i,o,u,a,f,l,c;n=[];for(u=0,f=e.length;u<f;u++){t=e[u];if(!((typeof t.isObject=="function"?t.isObject():void 0)&&t.base.generated)){n.push(t);continue}r=null,c=t.base.properties;for(a=0,l=c.length;a<l;a++)i=c[a],i instanceof s||i instanceof h?(r||n.push(r=new _(o=[],!0)),o.push(i)):(n.push(i),r=null)}return n},t.prototype.compileNode=function(e){var t,n,r,i;return(i=this.variable)!=null&&(i.front=this.front),(r=z.compileSplattedArray(e,this.args,!0))?this.compileSplat(e,r):(n=this.filterImplicitObjects(this.args),n=function(){var r,i,s;s=[];for(r=0,i=n.length;r<i;r++)t=n[r],s.push(t.compile(e,T));return s}().join(", "),this.isSuper?this.superReference(e)+(".call("+this.superThis(e)+(n&&", "+n)+")"):(this.isNew?"new ":"")+this.variable.compile(e,S)+("("+n+")"))},t.prototype.compileSuper=function(e,t){return""+this.superReference(t)+".call("+this.superThis(t)+(e.length?", ":"")+e+")"},t.prototype.compileSplat=function(e,t){var n,r,i,s,o;return this.isSuper?""+this.superReference(e)+".apply("+this.superThis(e)+", "+t+")":this.isNew?(i=this.tab+X,"(function(func, args, ctor) {\n"+i+"ctor.prototype = func.prototype;\n"+i+"var child = new ctor, result = func.apply(child, args), t = typeof result;\n"+i+'return t == "object" || t == "function" ? result || child : child;\n'+this.tab+"})("+this.variable.compile(e,T)+", "+t+", function(){})"):(n=new Q(this.variable),(s=n.properties.pop())&&n.isComplex()?(o=e.scope.freeVariable("ref"),r="("+o+" = "+n.compile(e,T)+")"+s.compile(e)):(r=n.compile(e,S),I.test(r)&&(r="("+r+")"),s?(o=r,r+=s.compile(e)):o="null"),""+r+".apply("+o+", "+t+")")},t}(o),t.Extends=d=function(e){function t(e,t){this.child=e,this.parent=t}return dt(t,e),t.prototype.children=["child","parent"],t.prototype.compile=function(e){return(new a(new Q(new L(lt("extends"))),[this.child,this.parent])).compile(e)},t}(o),t.Access=r=function(e){function t(e,t){this.name=e,this.name.asKey=!0,this.soak=t==="soak"}return dt(t,e),t.prototype.children=["name"],t.prototype.compile=function(e){var t;return t=this.name.compile(e),m.test(t)?"."+t:"["+t+"]"},t.prototype.isComplex=M,t}(o),t.Index=E=function(e){function t(e){this.index=e}return dt(t,e),t.prototype.children=["index"],t.prototype.compile=function(e){return"["+this.index.compile(e,C)+"]"},t.prototype.isComplex=function(){return this.index.isComplex()},t}(o),t.Range=j=function(e){function t(e,t,n){this.from=e,this.to=t,this.exclusive=n==="exclusive",this.equals=this.exclusive?"":"="}return dt(t,e),t.prototype.children=["from","to"],t.prototype.compileVariables=function(e){var t,n,r,i,s;e=st(e,{top:!0}),n=this.from.cache(e,T),this.fromC=n[0],this.fromVar=n[1],r=this.to.cache(e,T),this.toC=r[0],this.toVar=r[1];if(t=et(e,"step"))i=t.cache(e,T),this.step=i[0],this.stepVar=i[1];s=[this.fromVar.match(I),this.toVar.match(I)],this.fromNum=s[0],this.toNum=s[1];if(this.stepVar)return this.stepNum=this.stepVar.match(I)},t.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d;return this.fromVar||this.compileVariables(e),e.index?(u=this.fromNum&&this.toNum,s=et(e,"index"),o=et(e,"name"),f=o&&o!==s,h=""+s+" = "+this.fromC,this.toC!==this.toVar&&(h+=", "+this.toC),this.step!==this.stepVar&&(h+=", "+this.step),p=[""+s+" <"+this.equals,""+s+" >"+this.equals],a=p[0],i=p[1],n=this.stepNum?+this.stepNum>0?""+a+" "+this.toVar:""+i+" "+this.toVar:u?(d=[+this.fromNum,+this.toNum],r=d[0],c=d[1],d,r<=c?""+a+" "+c:""+i+" "+c):(t=""+this.fromVar+" <= "+this.toVar,""+t+" ? "+a+" "+this.toVar+" : "+i+" "+this.toVar),l=this.stepVar?""+s+" += "+this.stepVar:u?f?r<=c?"++"+s:"--"+s:r<=c?""+s+"++":""+s+"--":f?""+t+" ? ++"+s+" : --"+s:""+t+" ? "+s+"++ : "+s+"--",f&&(h=""+o+" = "+h),f&&(l=""+o+" = "+l),""+h+"; "+n+"; "+l):this.compileArray(e)},t.prototype.compileArray=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v;if(this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20)return f=function(){v=[];for(var e=p=+this.fromNum,t=+this.toNum;p<=t?e<=t:e>=t;p<=t?e++:e--)v.push(e);return v}.apply(this),this.exclusive&&f.pop(),"["+f.join(", ")+"]";o=this.tab+X,s=e.scope.freeVariable("i"),l=e.scope.freeVariable("results"),a="\n"+o+l+" = [];",this.fromNum&&this.toNum?(e.index=s,n=this.compileNode(e)):(c=""+s+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),r=""+this.fromVar+" <= "+this.toVar,n="var "+c+"; "+r+" ? "+s+" <"+this.equals+" "+this.toVar+" : "+s+" >"+this.equals+" "+this.toVar+"; "+r+" ? "+s+"++ : "+s+"--"),u="{ "+l+".push("+s+"); }\n"+o+"return "+l+";\n"+e.indent,i=function(e){return e!=null?e.contains(function(e){return e instanceof L&&e.value==="arguments"&&!e.asKey}):void 0};if(i(this.from)||i(this.to))t=", arguments";return"(function() {"+a+"\n"+o+"for ("+n+")"+u+"}).apply(this"+(t!=null?t:"")+")"},t}(o),t.Slice=U=function(e){function t(e){this.range=e,t.__super__.constructor.call(this)}return dt(t,e),t.prototype.children=["range"],t.prototype.compileNode=function(e){var t,n,r,i,s,o;return o=this.range,i=o.to,n=o.from,r=n&&n.compile(e,C)||"0",t=i&&i.compile(e,C),i&&(!!this.range.exclusive||+t!==-1)&&(s=", "+(this.range.exclusive?t:I.test(t)?""+(+t+1):(t=i.compile(e,S),"+"+t+" + 1 || 9e9"))),".slice("+r+(s||"")+")"},t}(o),t.Obj=_=function(e){function t(e,t){this.generated=t!=null?t:!1,this.objects=this.properties=e||[]}return dt(t,e),t.prototype.children=["properties"],t.prototype.compileNode=function(e){var t,n,r,i,o,u,a,f,l,c,p;l=this.properties;if(!l.length)return this.front?"({})":"{}";if(this.generated)for(c=0,p=l.length;c<p;c++){u=l[c];if(u instanceof Q)throw new Error("cannot have an implicit value in an implicit object")}return n=e.indent+=X,o=this.lastNonComment(this.properties),l=function(){var u,a,c;c=[];for(t=u=0,a=l.length;u<a;t=++u)f=l[t],i=t===l.length-1?"":f===o||f instanceof h?"\n":",\n",r=f instanceof h?"":n,f instanceof Q&&f["this"]&&(f=new s(f.properties[0].name,f,"object")),f instanceof h||(f instanceof s||(f=new s(f,f,"object")),(f.variable.base||f.variable).asKey=!0),c.push(r+f.compile(e,k)+i);return c}(),l=l.join(""),a="{"+(l&&"\n"+l+"\n"+this.tab)+"}",this.front?"("+a+")":a},t.prototype.assigns=function(e){var t,n,r,i;i=this.properties;for(n=0,r=i.length;n<r;n++){t=i[n];if(t.assigns(e))return!0}return!1},t}(o),t.Arr=i=function(e){function t(e){this.objects=e||[]}return dt(t,e),t.prototype.children=["objects"],t.prototype.filterImplicitObjects=a.prototype.filterImplicitObjects,t.prototype.compileNode=function(e){var t,n,r;return this.objects.length?(e.indent+=X,r=this.filterImplicitObjects(this.objects),(t=z.compileSplattedArray(e,r))?t:(t=function(){var t,i,s;s=[];for(t=0,i=r.length;t<i;t++)n=r[t],s.push(n.compile(e,T));return s}().join(", "),t.indexOf("\n")>=0?"[\n"+e.indent+t+"\n"+this.tab+"]":"["+t+"]")):"[]"},t.prototype.assigns=function(e){var t,n,r,i;i=this.objects;for(n=0,r=i.length;n<r;n++){t=i[n];if(t.assigns(e))return!0}return!1},t}(o),t.Class=f=function(e){function t(e,t,n){this.variable=e,this.parent=t,this.body=n!=null?n:new u,this.boundFuncs=[],this.body.classBody=!0}return dt(t,e),t.prototype.children=["variable","parent","body"],t.prototype.determineName=function(){var e,t;if(!this.variable)return null;e=(t=it(this.variable.properties))?t instanceof r&&t.name.value:this.variable.base.value;if(vt.call(q,e)>=0)throw SyntaxError("variable name may not be "+e);return e&&(e=m.test(e)&&e)},t.prototype.setContext=function(e){return this.body.traverseChildren(!1,function(t){if(t.classBody)return!1;if(t instanceof L&&t.value==="this")return t.value=e;if(t instanceof c){t.klass=e;if(t.bound)return t.context=e}})},t.prototype.addBoundFunctions=function(e){var t,n,i,s,o,u;if(this.boundFuncs.length){o=this.boundFuncs,u=[];for(i=0,s=o.length;i<s;i++)t=o[i],n=(new Q(new L("this"),[new r(t)])).compile(e),u.push(this.ctor.body.unshift(new L(""+n+" = "+lt("bind")+"("+n+", this)")));return u}},t.prototype.addProperties=function(e,t,n){var i,o,u,a,f;return f=e.base.properties.slice(0),u=function(){var e;e=[];while(i=f.shift()){if(i instanceof s){o=i.variable.base,delete i.context,a=i.value;if(o.value==="constructor"){if(this.ctor)throw new Error("cannot define more than one constructor in a class");if(a.bound)throw new Error("cannot define a constructor as a bound function");a instanceof c?i=this.ctor=a:(this.externalCtor=n.scope.freeVariable("class"),i=new s(new L(this.externalCtor),a))}else i.variable["this"]?(a["static"]=!0,a.bound&&(a.context=t)):(i.variable=new Q(new L(t),[new r(new L("prototype")),new r(o)]),a instanceof c&&a.bound&&(this.boundFuncs.push(o),a.bound=!1))}e.push(i)}return e}.call(this),Z(u)},t.prototype.walkBody=function(e,n){var r=this;return this.traverseChildren(!1,function(i){var s,o,a,f,l,c;if(i instanceof t)return!1;if(i instanceof u){c=s=i.expressions;for(o=f=0,l=c.length;f<l;o=++f)a=c[o],a instanceof Q&&a.isObject(!0)&&(s[o]=r.addProperties(a,e,n));return i.expressions=s=rt(s)}})},t.prototype.hoistDirectivePrologue=function(){var e,t,n;t=0,e=this.body.expressions;while((n=e[t])&&n instanceof h||n instanceof Q&&n.isString())++t;return this.directives=e.splice(0,t)},t.prototype.ensureConstructor=function(e){return this.ctor||(this.ctor=new c,this.parent&&this.ctor.body.push(new L(""+e+".__super__.constructor.apply(this, arguments)")),this.externalCtor&&this.ctor.body.push(new L(""+this.externalCtor+".apply(this, arguments)")),this.ctor.body.makeReturn(),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=e,this.ctor.klass=null,this.ctor.noReturn=!0},t.prototype.compileNode=function(e){var t,n,r,i,o,u,a;return n=this.determineName(),o=n||"_Class",o.reserved&&(o="_"+o),i=new L(o),this.hoistDirectivePrologue(),this.setContext(o),this.walkBody(o,e),this.ensureConstructor(o),this.body.spaced=!0,this.ctor instanceof c||this.body.expressions.unshift(this.ctor),this.body.expressions.push(i),(a=this.body.expressions).unshift.apply(a,this.directives),this.addBoundFunctions(e),t=l.wrap(this.body),this.parent&&(this.superClass=new L(e.scope.freeVariable("super",!1)),this.body.expressions.unshift(new d(i,this.superClass)),t.args.push(this.parent),u=t.variable.params||t.variable.base.params,u.push(new P(this.superClass))),r=new H(t,!0),this.variable&&(r=new s(this.variable,r)),r.compile(e)},t}(o),t.Assign=s=function(e){function t(e,t,n,r){var i,s,o;this.variable=e,this.value=t,this.context=n,this.param=r&&r.param,this.subpattern=r&&r.subpattern,i=(o=s=this.variable.unwrapAll().value,vt.call(q,o)>=0);if(i&&this.context!=="object")throw SyntaxError('variable name may not be "'+s+'"')}return dt(t,e),t.prototype.children=["variable","value"],t.prototype.isStatement=function(e){return(e!=null?e.level:void 0)===k&&this.context!=null&&vt.call(this.context,"?")>=0},t.prototype.assigns=function(e){return this[this.context==="object"?"value":"variable"].assigns(e)},t.prototype.unfoldSoak=function(e){return ft(e,this,"variable")},t.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f;if(t=this.variable instanceof Q){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(e);if(this.variable.isSplice())return this.compileSplice(e);if((o=this.context)==="||="||o==="&&="||o==="?=")return this.compileConditional(e)}r=this.variable.compile(e,T);if(!this.context){if(!(s=this.variable.unwrapAll()).isAssignable())throw SyntaxError('"'+this.variable.compile(e)+'" cannot be assigned.');if(typeof s.hasProperties=="function"?!s.hasProperties():!void 0)this.param?e.scope.add(r,"var"):e.scope.find(r)}return this.value instanceof c&&(n=A.exec(r))&&(n[1]&&(this.value.klass=n[1]),this.value.name=(u=(a=(f=n[2])!=null?f:n[3])!=null?a:n[4])!=null?u:n[5]),i=this.value.compile(e,T),this.context==="object"?""+r+": "+i:(i=r+(" "+(this.context||"=")+" ")+i,e.level<=T?i:"("+i+")")},t.prototype.compilePatternMatch=function(e){var n,i,s,o,u,a,f,l,c,h,p,d,v,g,y,b,w,S,x,C,A,O,M,_,D,P,j;y=e.level===k,w=this.value,h=this.variable.base.objects;if(!(p=h.length))return s=w.compile(e),e.level>=N?"("+s+")":s;a=this.variable.isObject();if(y&&p===1&&!((c=h[0])instanceof z)){c instanceof t?(A=c,O=A.variable,u=O.base,c=A.value):c.base instanceof H?(M=(new Q(c.unwrapAll())).cacheReference(e),c=M[0],u=M[1]):u=a?c["this"]?c.properties[0].name:c:new L(0),n=m.test(u.unwrap().value||0),w=new Q(w),w.properties.push(new(n?r:E)(u));if(_=c.unwrap().value,vt.call(B,_)>=0)throw new SyntaxError("assignment to a reserved word: "+c.compile(e)+" = "+w.compile(e));return(new t(c,w,null,{param:this.param})).compile(e,k)}S=w.compile(e,T),i=[],g=!1;if(!m.test(S)||this.variable.assigns(S))i.push(""+(d=e.scope.freeVariable("ref"))+" = "+S),S=d;for(o=x=0,C=h.length;x<C;o=++x){c=h[o],u=o,a&&(c instanceof t?(D=c,P=D.variable,u=P.base,c=D.value):c.base instanceof H?(j=(new Q(c.unwrapAll())).cacheReference(e),c=j[0],u=j[1]):u=c["this"]?c.properties[0].name:c);if(!g&&c instanceof z)l=c.name.unwrap().value,c=c.unwrap(),b=""+p+" <= "+S+".length ? "+lt("slice")+".call("+S+", "+o,(v=p-o-1)?(f=e.scope.freeVariable("i"),b+=", "+f+" = "+S+".length - "+v+") : ("+f+" = "+o+", [])"):b+=") : []",b=new L(b),g=""+f+"++";else{l=c.unwrap().value;if(c instanceof z)throw c=c.name.compile(e),new SyntaxError("multiple splats are disallowed in an assignment: "+c+"...");typeof u=="number"?(u=new L(g||u),n=!1):n=a&&m.test(u.unwrap().value||0),b=new Q(new L(S),[new(n?r:E)(u)])}if(l!=null&&vt.call(B,l)>=0)throw new SyntaxError("assignment to a reserved word: "+c.compile(e)+" = "+b.compile(e));i.push((new t(c,b,null,{param:this.param,subpattern:!0})).compile(e,T))}return!y&&!this.subpattern&&i.push(S),s=i.join(", "),e.level<T?s:"("+s+")"},t.prototype.compileConditional=function(e){var n,r,i;i=this.variable.cacheReference(e),n=i[0],r=i[1];if(!n.properties.length&&n.base instanceof L&&n.base.value!=="this"&&!e.scope.check(n.base.value))throw new Error('the variable "'+n.base.value+"\" can't be assigned with "+this.context+" because it has not been defined.");return vt.call(this.context,"?")>=0&&(e.isExistentialEquals=!0),(new D(this.context.slice(0,-1),n,new t(r,this.value,"="))).compile(e)},t.prototype.compileSplice=function(e){var t,n,r,i,s,o,u,a,f,l,c,h;return l=this.variable.properties.pop().range,r=l.from,u=l.to,n=l.exclusive,o=this.variable.compile(e),c=(r!=null?r.cache(e,N):void 0)||["0","0"],i=c[0],s=c[1],u?(r!=null?r.isSimpleNumber():void 0)&&u.isSimpleNumber()?(u=+u.compile(e)- +s,n||(u+=1)):(u=u.compile(e,S)+" - "+s,n||(u+=" + 1")):u="9e9",h=this.value.cache(e,T),a=h[0],f=h[1],t="[].splice.apply("+o+", ["+i+", "+u+"].concat("+a+")), "+f,e.level>k?"("+t+")":t},t}(o),t.Code=c=function(e){function t(e,t,n){this.params=e||[],this.body=t||new u,this.bound=n==="boundfunc",this.bound&&(this.context="_this")}return dt(t,e),t.prototype.children=["params","body"],t.prototype.isStatement=function(){return!!this.ctor},t.prototype.jumps=M,t.prototype.compileNode=function(e){var t,n,r,o,u,a,f,l,c,h,p,d,v,m,g,y,w,E,x,T,N,C,k,A,O,M,_,P,H,B,j,F,I;e.scope=new R(e.scope,this.body,this),e.scope.shared=et(e,"sharedScope"),e.indent+=X,delete e.bare,delete e.isExistentialEquals,c=[],n=[],_=this.paramNames();for(g=0,x=_.length;g<x;g++)a=_[g],e.scope.check(a)||e.scope.parameter(a);P=this.params;for(y=0,T=P.length;y<T;y++){l=P[y];if(!l.splat)continue;H=this.params;for(w=0,N=H.length;w<N;w++)f=H[w].name,f["this"]&&(f=f.properties[0].name),f.value&&e.scope.add(f.value,"var",!0);p=new s(new Q(new i(function(){var t,n,r,i;r=this.params,i=[];for(t=0,n=r.length;t<n;t++)f=r[t],i.push(f.asReference(e));return i}.call(this))),new Q(new L("arguments")));break}B=this.params;for(E=0,C=B.length;E<C;E++)l=B[E],l.isComplex()?(v=h=l.asReference(e),l.value&&(v=new D("?",h,l.value)),n.push(new s(new Q(l.name),v,"=",{param:!0}))):(h=l,l.value&&(u=new L(h.name.value+" == null"),v=new s(new Q(l.name),l.value,"="),n.push(new b(u,v)))),p||c.push(h);m=this.body.isEmpty(),p&&n.unshift(p),n.length&&(j=this.body.expressions).unshift.apply(j,n);for(r=O=0,k=c.length;O<k;r=++O)f=c[r],e.scope.parameter(c[r]=f.compile(e));d=[],F=this.paramNames();for(M=0,A=F.length;M<A;M++){a=F[M];if(vt.call(d,a)>=0)throw SyntaxError("multiple parameters named '"+a+"'");d.push(a)}return!m&&!this.noReturn&&this.body.makeReturn(),this.bound&&(((I=e.scope.parent.method)!=null?I.bound:void 0)?this.bound=this.context=e.scope.parent.method.context:this["static"]||e.scope.parent.assign("_this","this")),o=e.indent,t="function",this.ctor&&(t+=" "+this.name),t+="("+c.join(", ")+") {",this.body.isEmpty()||(t+="\n"+this.body.compileWithDeclarations(e)+"\n"+this.tab),t+="}",this.ctor?this.tab+t:this.front||e.level>=S?"("+t+")":t},t.prototype.paramNames=function(){var e,t,n,r,i;e=[],i=this.params;for(n=0,r=i.length;n<r;n++)t=i[n],e.push.apply(e,t.names());return e},t.prototype.traverseChildren=function(e,n){if(e)return t.__super__.traverseChildren.call(this,e,n)},t}(o),t.Param=P=function(e){function t(e,t,n){var r;this.name=e,this.value=t,this.splat=n;if(r=e=this.name.unwrapAll().value,vt.call(q,r)>=0)throw SyntaxError('parameter name "'+e+'" is not allowed')}return dt(t,e),t.prototype.children=["name","value"],t.prototype.compile=function(e){return this.name.compile(e,T)},t.prototype.asReference=function(e){var t;return this.reference?this.reference:(t=this.name,t["this"]?(t=t.properties[0].name,t.value.reserved&&(t=new L(e.scope.freeVariable(t.value)))):t.isComplex()&&(t=new L(e.scope.freeVariable("arg"))),t=new Q(t),this.splat&&(t=new z(t)),this.reference=t)},t.prototype.isComplex=function(){return this.name.isComplex()},t.prototype.names=function(e){var t,n,r,i,o,u;e==null&&(e=this.name),t=function(e){var t;return t=e.properties[0].name.value,t.reserved?[]:[t]};if(e instanceof L)return[e.value];if(e instanceof Q)return t(e);n=[],u=e.objects;for(i=0,o=u.length;i<o;i++){r=u[i];if(r instanceof s)n.push(r.value.unwrap().value);else if(r instanceof z)n.push(r.name.unwrap().value);else{if(!(r instanceof Q))throw SyntaxError("illegal parameter "+r.compile());r.isArray()||r.isObject()?n.push.apply(n,this.names(r.base)):r["this"]?n.push.apply(n,t(r)):n.push(r.base.value)}}return n},t}(o),t.Splat=z=function(e){function t(e){this.name=e.compile?e:new L(e)}return dt(t,e),t.prototype.children=["name"],t.prototype.isAssignable=Y,t.prototype.assigns=function(e){return this.name.assigns(e)},t.prototype.compile=function(e){return this.index!=null?this.compileParam(e):this.name.compile(e)},t.prototype.unwrap=function(){return this.name},t.compileSplattedArray=function(e,n,r){var i,s,o,u,a,f,l,c;a=-1;while((f=n[++a])&&!(f instanceof t))continue;if(a>=n.length)return"";if(n.length===1)return o=n[0].compile(e,T),r?o:""+lt("slice")+".call("+o+")";i=n.slice(a);for(u=l=0,c=i.length;l<c;u=++l)f=i[u],o=f.compile(e,T),i[u]=f instanceof t?""+lt("slice")+".call("+o+")":"["+o+"]";return a===0?i[0]+(".concat("+i.slice(1).join(", ")+")"):(s=function(){var t,r,i,s;i=n.slice(0,a),s=[];for(t=0,r=i.length;t<r;t++)f=i[t],s.push(f.compile(e,T));return s}(),"["+s.join(", ")+"].concat("+i.join(", ")+")")},t}(o),t.While=G=function(e){function t(e,t){this.condition=(t!=null?t.invert:void 0)?e.invert():e,this.guard=t!=null?t.guard:void 0}return dt(t,e),t.prototype.children=["condition","guard","body"],t.prototype.isStatement=Y,t.prototype.makeReturn=function(e){return e?t.__super__.makeReturn.apply(this,arguments):(this.returns=!this.jumps({loop:!0}),this)},t.prototype.addBody=function(e){return this.body=e,this},t.prototype.jumps=function(){var e,t,n,r;e=this.body.expressions;if(!e.length)return!1;for(n=0,r=e.length;n<r;n++){t=e[n];if(t.jumps({loop:!0}))return t}return!1},t.prototype.compileNode=function(e){var t,n,r,i;return e.indent+=X,i="",t=this.body,t.isEmpty()?t="":(this.returns&&(t.makeReturn(r=e.scope.freeVariable("results")),i=""+this.tab+r+" = [];\n"),this.guard&&(t.expressions.length>1?t.expressions.unshift(new b((new H(this.guard)).invert(),new L("continue"))):this.guard&&(t=u.wrap([new b(this.guard,t)]))),t="\n"+t.compile(e,k)+"\n"+this.tab),n=i+this.tab+("while ("+this.condition.compile(e,C)+") {"+t+"}"),this.returns&&(n+="\n"+this.tab+"return "+r+";"),n},t}(o),t.Op=D=function(e){function r(e,n,r,i){if(e==="in")return new w(n,r);if(e==="do")return this.generateDo(n);if(e==="new"){if(n instanceof a&&!n["do"]&&!n.isNew)return n.newInstance();if(n instanceof c&&n.bound||n["do"])n=new H(n)}return this.operator=t[e]||e,this.first=n,this.second=r,this.flip=!!i,this}var t,n;return dt(r,e),t={"==":"===","!=":"!==",of:"in"},n={"!==":"===","===":"!=="},r.prototype.children=["first","second"],r.prototype.isSimpleNumber=M,r.prototype.isUnary=function(){return!this.second},r.prototype.isComplex=function(){var e;return!this.isUnary()||(e=this.operator)!=="+"&&e!=="-"||this.first.isComplex()},r.prototype.isChainable=function(){var e;return(e=this.operator)==="<"||e===">"||e===">="||e==="<="||e==="==="||e==="!=="},r.prototype.invert=function(){var e,t,i,s,o;if(this.isChainable()&&this.first.isChainable()){e=!0,t=this;while(t&&t.operator)e&&(e=t.operator in n),t=t.first;if(!e)return(new H(this)).invert();t=this;while(t&&t.operator)t.invert=!t.invert,t.operator=n[t.operator],t=t.first;return this}return(s=n[this.operator])?(this.operator=s,this.first.unwrap()instanceof r&&this.first.invert(),this):this.second?(new H(this)).invert():this.operator==="!"&&(i=this.first.unwrap())instanceof r&&((o=i.operator)==="!"||o==="in"||o==="instanceof")?i:new r("!",this)},r.prototype.unfoldSoak=function(e){var t;return((t=this.operator)==="++"||t==="--"||t==="delete")&&ft(e,this,"first")},r.prototype.generateDo=function(e){var t,n,r,i,o,u,f,l;i=[],n=e instanceof s&&(o=e.value.unwrap())instanceof c?o:e,l=n.params||[];for(u=0,f=l.length;u<f;u++)r=l[u],r.value?(i.push(r.value),delete r.value):i.push(r);return t=new a(e,i),t["do"]=!0,t},r.prototype.compileNode=function(e){var t,n,r,i;n=this.isChainable()&&this.first.isChainable(),n||(this.first.front=this.front);if(this.operator==="delete"&&e.scope.check(this.first.unwrapAll().value))throw SyntaxError("delete operand may not be argument or var");if(((r=this.operator)==="--"||r==="++")&&(i=this.first.unwrapAll().value,vt.call(q,i)>=0))throw SyntaxError("prefix increment/decrement may not have eval or arguments operand");return this.isUnary()?this.compileUnary(e):n?this.compileChain(e):this.operator==="?"?this.compileExistence(e):(t=this.first.compile(e,N)+" "+this.operator+" "+this.second.compile(e,N),e.level<=N?t:"("+t+")")},r.prototype.compileChain=function(e){var t,n,r,i;return i=this.first.second.cache(e),this.first.second=i[0],r=i[1],n=this.first.compile(e,N),t=""+n+" "+(this.invert?"&&":"||")+" "+r.compile(e)+" "+this.operator+" "+this.second.compile(e,N),"("+t+")"},r.prototype.compileExistence=function(e){var t,n;return this.first.isComplex()?(n=new L(e.scope.freeVariable("ref")),t=new H(new s(n,this.first))):(t=this.first,n=t),(new b(new p(t),n,{type:"if"})).addElse(this.second).compile(e)},r.prototype.compileUnary=function(e){var t,n,i;if(e.level>=S)return(new H(this)).compile(e);n=[t=this.operator],i=t==="+"||t==="-",(t==="new"||t==="typeof"||t==="delete"||i&&this.first instanceof r&&this.first.operator===t)&&n.push(" ");if(i&&this.first instanceof r||t==="new"&&this.first.isStatement(e))this.first=new H(this.first);return n.push(this.first.compile(e,N)),this.flip&&n.reverse(),n.join("")},r.prototype.toString=function(e){return r.__super__.toString.call(this,e,this.constructor.name+" "+this.operator)},r}(o),t.In=w=function(e){function t(e,t){this.object=e,this.array=t}return dt(t,e),t.prototype.children=["object","array"],t.prototype.invert=O,t.prototype.compileNode=function(e){var t,n,r,i,s;if(this.array instanceof Q&&this.array.isArray()){s=this.array.base.objects;for(r=0,i=s.length;r<i;r++){n=s[r];if(n instanceof z){t=!0;break}continue}if(!t)return this.compileOrTest(e)}return this.compileLoopTest(e)},t.prototype.compileOrTest=function(e){var t,n,r,i,s,o,u,a,f;return this.array.base.objects.length===0?""+!!this.negated:(a=this.object.cache(e,N),o=a[0],s=a[1],f=this.negated?[" !== "," && "]:[" === "," || "],t=f[0],n=f[1],u=function(){var n,u,a,f;a=this.array.base.objects,f=[];for(r=n=0,u=a.length;n<u;r=++n)i=a[r],f.push((r?s:o)+t+i.compile(e,S));return f}.call(this),u=u.join(n),e.level<N?u:"("+u+")")},t.prototype.compileLoopTest=function(e){var t,n,r,i;return i=this.object.cache(e,T),r=i[0],n=i[1],t=lt("indexOf")+(".call("+this.array.compile(e,T)+", "+n+") ")+(this.negated?"< 0":">= 0"),r===n?t:(t=r+", "+t,e.level<T?t:"("+t+")")},t.prototype.toString=function(e){return t.__super__.toString.call(this,e,this.constructor.name+(this.negated?"!":""))},t}(o),t.Try=J=function(e){function t(e,t,n,r){this.attempt=e,this.error=t,this.recovery=n,this.ensure=r}return dt(t,e),t.prototype.children=["attempt","recovery","ensure"],t.prototype.isStatement=Y,t.prototype.jumps=function(e){var t;return this.attempt.jumps(e)||((t=this.recovery)!=null?t.jumps(e):void 0)},t.prototype.makeReturn=function(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this},t.prototype.compileNode=function(e){var t,n,r,i;return e.indent+=X,r=this.error?" ("+this.error.compile(e)+") ":" ",i=this.attempt.compile(e,k),t=function(){var t;if(this.recovery){if(t=this.error.value,vt.call(q,t)>=0)throw SyntaxError('catch variable may not be "'+this.error.value+'"');return e.scope.check(this.error.value)||e.scope.add(this.error.value,"param")," catch"+r+"{\n"+this.recovery.compile(e,k)+"\n"+this.tab+"}"}if(!this.ensure&&!this.recovery)return" catch (_error) {}"}.call(this),n=this.ensure?" finally {\n"+this.ensure.compile(e,k)+"\n"+this.tab+"}":"",""+this.tab+"try {\n"+i+"\n"+this.tab+"}"+(t||"")+n},t}(o),t.Throw=$=function(e){function t(e){this.expression=e}return dt(t,e),t.prototype.children=["expression"],t.prototype.isStatement=Y,t.prototype.jumps=M,t.prototype.makeReturn=V,t.prototype.compileNode=function(e){return this.tab+("throw "+this.expression.compile(e)+";")},t}(o),t.Existence=p=function(e){function t(e){this.expression=e}return dt(t,e),t.prototype.children=["expression"],t.prototype.invert=O,t.prototype.compileNode=function(e){var t,n,r,i;return this.expression.front=this.front,r=this.expression.compile(e,N),m.test(r)&&!e.scope.check(r)?(i=this.negated?["===","||"]:["!==","&&"],t=i[0],n=i[1],r="typeof "+r+" "+t+' "undefined" '+n+" "+r+" "+t+" null"):r=""+r+" "+(this.negated?"==":"!=")+" null",e.level<=x?r:"("+r+")"},t}(o),t.Parens=H=function(e){function t(e){this.body=e}return dt(t,e),t.prototype.children=["body"],t.prototype.unwrap=function(){return this.body},t.prototype.isComplex=function(){return this.body.isComplex()},t.prototype.compileNode=function(e){var t,n,r;return r=this.body.unwrap(),r instanceof Q&&r.isAtomic()?(r.front=this.front,r.compile(e)):(n=r.compile(e,C),t=e.level<N&&(r instanceof D||r instanceof a||r instanceof v&&r.returns),t?n:"("+n+")")},t}(o),t.For=v=function(e){function t(e,t){var n;this.source=t.source,this.guard=t.guard,this.step=t.step,this.name=t.name,this.index=t.index,this.body=u.wrap([e]),this.own=!!t.own,this.object=!!t.object,this.object&&(n=[this.index,this.name],this.name=n[0],this.index=n[1]);if(this.index instanceof Q)throw SyntaxError("index cannot be a pattern matching expression");this.range=this.source instanceof Q&&this.source.base instanceof j&&!this.source.properties.length,this.pattern=this.name instanceof Q;if(this.range&&this.index)throw SyntaxError("indexes do not apply to range loops");if(this.range&&this.pattern)throw SyntaxError("cannot pattern match over range loops");this.returns=!1}return dt(t,e),t.prototype.children=["body","source","guard","step"],t.prototype.compileNode=function(e){var t,n,r,i,o,a,f,l,c,h,p,d,v,g,y,w,E,S,x,C,A,O,M,_,D;return t=u.wrap([this.body]),p=(D=it(t.expressions))!=null?D.jumps():void 0,p&&p instanceof F&&(this.returns=!1),C=this.range?this.source.base:this.source,x=e.scope,v=this.name&&this.name.compile(e,T),f=this.index&&this.index.compile(e,T),v&&!this.pattern&&x.find(v),f&&x.find(f),this.returns&&(S=x.freeVariable("results")),l=this.object&&f||x.freeVariable("i"),c=this.range&&v||f||l,h=c!==l?""+c+" = ":"",this.step&&!this.range&&(O=x.freeVariable("step")),this.pattern&&(v=l),_="",o="",n="",a=this.tab+X,this.range?r=C.compile(st(e,{index:l,name:v,step:this.step})):(M=this.source.compile(e,T),(v||this.own)&&!m.test(M)&&(n=""+this.tab+(y=x.freeVariable("ref"))+" = "+M+";\n",M=y),v&&!this.pattern&&(g=""+v+" = "+M+"["+c+"]"),this.object||(d=x.freeVariable("len"),i=""+h+l+" = 0, "+d+" = "+M+".length",this.step&&(i+=", "+O+" = "+this.step.compile(e,N)),A=""+h+(this.step?""+l+" += "+O:c!==l?"++"+l:""+l+"++"),r=""+i+"; "+l+" < "+d+"; "+A)),this.returns&&(w=""+this.tab+S+" = [];\n",E="\n"+this.tab+"return "+S+";",t.makeReturn(S)),this.guard&&(t.expressions.length>1?t.expressions.unshift(new b((new H(this.guard)).invert(),new L("continue"))):this.guard&&(t=u.wrap([new b(this.guard,t)]))),this.pattern&&t.expressions.unshift(new s(this.name,new L(""+M+"["+c+"]"))),n+=this.pluckDirectCall(e,t),g&&(_="\n"+a+g+";"),this.object&&(r=""+c+" in "+M,this.own&&(o="\n"+a+"if (!"+lt("hasProp")+".call("+M+", "+c+")) continue;")),t=t.compile(st(e,{indent:a}),k),t&&(t="\n"+t+"\n"),""+n+(w||"")+this.tab+"for ("+r+") {"+o+_+t+this.tab+"}"+(E||"")},t.prototype.pluckDirectCall=function(e,t){var n,r,i,o,u,f,l,h,p,d,v,m,g,y,b;r="",d=t.expressions;for(u=h=0,p=d.length;h<p;u=++h){i=d[u],i=i.unwrapAll();if(!(i instanceof a))continue;l=i.variable.unwrapAll();if(!(l instanceof c||l instanceof Q&&((v=l.base)!=null?v.unwrapAll():void 0)instanceof c&&l.properties.length===1&&((m=(g=l.properties[0].name)!=null?g.value:void 0)==="call"||m==="apply")))continue;o=((y=l.base)!=null?y.unwrapAll():void 0)||l,f=new L(e.scope.freeVariable("fn")),n=new Q(f),l.base&&(b=[n,l],l.base=b[0],n=b[1]),t.expressions[u]=new a(n,i.args),r+=this.tab+(new s(f,o)).compile(e,k)+";\n"}return r},t}(G),t.Switch=W=function(e){function t(e,t,n){this.subject=e,this.cases=t,this.otherwise=n}return dt(t,e),t.prototype.children=["subject","cases","otherwise"],t.prototype.isStatement=Y,t.prototype.jumps=function(e){var t,n,r,i,s,o,u;e==null&&(e={block:!0}),s=this.cases;for(r=0,i=s.length;r<i;r++){o=s[r],n=o[0],t=o[1];if(t.jumps(e))return t}return(u=this.otherwise)!=null?u.jumps(e):void 0},t.prototype.makeReturn=function(e){var t,n,r,i,s;i=this.cases;for(n=0,r=i.length;n<r;n++)t=i[n],t[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new u([new L("void 0")]))),(s=this.otherwise)!=null&&s.makeReturn(e),this},t.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g;a=e.indent+X,f=e.indent=a+X,r=this.tab+("switch ("+(((d=this.subject)!=null?d.compile(e,C):void 0)||!1)+") {\n"),v=this.cases;for(u=l=0,h=v.length;l<h;u=++l){m=v[u],s=m[0],t=m[1],g=rt([s]);for(c=0,p=g.length;c<p;c++)i=g[c],this.subject||(i=i.invert()),r+=a+("case "+i.compile(e,C)+":\n");if(n=t.compile(e,k))r+=n+"\n";if(u===this.cases.length-1&&!this.otherwise)break;o=this.lastNonComment(t.expressions);if(o instanceof F||o instanceof L&&o.jumps()&&o.value!=="debugger")continue;r+=f+"break;\n"}return this.otherwise&&this.otherwise.expressions.length&&(r+=a+("default:\n"+this.otherwise.compile(e,k)+"\n")),r+this.tab+"}"},t}(o),t.If=b=function(e){function t(e,t,n){this.body=t,n==null&&(n={}),this.condition=n.type==="unless"?e.invert():e,this.elseBody=null,this.isChain=!1,this.soak=n.soak}return dt(t,e),t.prototype.children=["condition","body","elseBody"],t.prototype.bodyNode=function(){var e;return(e=this.body)!=null?e.unwrap():void 0},t.prototype.elseBodyNode=function(){var e;return(e=this.elseBody)!=null?e.unwrap():void 0},t.prototype.addElse=function(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof t,this.elseBody=this.ensureBlock(e)),this},t.prototype.isStatement=function(e){var t;return(e!=null?e.level:void 0)===k||this.bodyNode().isStatement(e)||((t=this.elseBodyNode())!=null?t.isStatement(e):void 0)},t.prototype.jumps=function(e){var t;return this.body.jumps(e)||((t=this.elseBody)!=null?t.jumps(e):void 0)},t.prototype.compileNode=function(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)},t.prototype.makeReturn=function(e){return e&&(this.elseBody||(this.elseBody=new u([new L("void 0")]))),this.body&&(this.body=new u([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new u([this.elseBody.makeReturn(e)])),this},t.prototype.ensureBlock=function(e){return e instanceof u?e:new u([e])},t.prototype.compileStatement=function(e){var n,r,i,s,o;return r=et(e,"chainChild"),s=et(e,"isExistentialEquals"),s?(new t(this.condition.invert(),this.elseBodyNode(),{type:"if"})).compile(e):(i=this.condition.compile(e,C),e.indent+=X,n=this.ensureBlock(this.body),o="if ("+i+") {\n"+n.compile(e)+"\n"+this.tab+"}",r||(o=this.tab+o),this.elseBody?o+" else "+(this.isChain?(e.indent=this.tab,e.chainChild=!0,this.elseBody.unwrap().compile(e,k)):"{\n"+this.elseBody.compile(e,k)+"\n"+this.tab+"}"):o)},t.prototype.compileExpression=function(e){var t,n,r,i;return i=this.condition.compile(e,x),n=this.bodyNode().compile(e,T),t=this.elseBodyNode()?this.elseBodyNode().compile(e,T):"void 0",r=""+i+" ? "+n+" : "+t,e.level>=x?"("+r+")":r},t.prototype.unfoldSoak=function(){return this.soak&&this},t}(o),l={wrap:function(e,t,n){var i,s,o,f,l;if(e.jumps())return e;o=new c([],u.wrap([e])),i=[];if((f=e.contains(this.literalArgs))||e.contains(this.literalThis))l=new L(f?"apply":"call"),i=[new L("this")],f&&i.push(new L("arguments")),o=new Q(o,[new r(l)]);return o.noReturn=n,s=new a(o,i),t?u.wrap([s]):s},literalArgs:function(e){return e instanceof L&&e.value==="arguments"&&!e.asKey},literalThis:function(e){return e instanceof L&&e.value==="this"&&!e.asKey||e instanceof c&&e.bound||e instanceof a&&e.isSuper}},ft=function(e,t,n){var r;if(!(r=t[n].unfoldSoak(e)))return;return t[n]=r.body,r.body=new Q(t),r},K={"extends":function(){return"function(child, parent) { for (var key in parent) { if ("+lt("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},k=1,C=2,T=3,x=4,N=5,S=6,X=" ",g="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",m=RegExp("^"+g+"$"),I=/^[+-]?\d+$/,A=RegExp("^(?:("+g+")\\.prototype(?:\\.("+g+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|("+g+")$"),y=/^['"]/,lt=function(e){var t;return t="__"+e,R.root.assign(t,K[e]()),t},ot=function(e,t){return e=e.replace(/\n/g,"$&"+t),e.replace(/\s+$/,"")}}),define("ace/mode/coffee/scope",["require","exports","module","ace/mode/coffee/helpers"],function(e,t,n){var r,i,s,o;o=e("./helpers"),i=o.extend,s=o.last,t.Scope=r=function(){function e(t,n,r){this.parent=t,this.expressions=n,this.method=r,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(e.root=this)}return e.root=null,e.prototype.add=function(e,t,n){return this.shared&&!n?this.parent.add(e,t,n):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=t:this.positions[e]=this.variables.push({name:e,type:t})-1},e.prototype.namedMethod=function(){return this.method.name||!this.parent?this.method:this.parent.namedMethod()},e.prototype.find=function(e){return this.check(e)?!0:(this.add(e,"var"),!1)},e.prototype.parameter=function(e){if(this.shared&&this.parent.check(e,!0))return;return this.add(e,"param")},e.prototype.check=function(e){var t;return!!(this.type(e)||((t=this.parent)!=null?t.check(e):void 0))},e.prototype.temporary=function(e,t){return e.length>1?"_"+e+(t>1?t-1:""):"_"+(t+parseInt(e,36)).toString(36).replace(/\d/g,"a")},e.prototype.type=function(e){var t,n,r,i;i=this.variables;for(n=0,r=i.length;n<r;n++){t=i[n];if(t.name===e)return t.type}return null},e.prototype.freeVariable=function(e,t){var n,r;t==null&&(t=!0),n=0;while(this.check(r=this.temporary(e,n)))n++;return t&&this.add(r,"var",!0),r},e.prototype.assign=function(e,t){return this.add(e,{value:t,assigned:!0},!0),this.hasAssignments=!0},e.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},e.prototype.declaredVariables=function(){var e,t,n,r,i,s;e=[],t=[],s=this.variables;for(r=0,i=s.length;r<i;r++)n=s[r],n.type==="var"&&(n.name.charAt(0)==="_"?t:e).push(n.name);return e.sort().concat(t.sort())},e.prototype.assignedVariables=function(){var e,t,n,r,i;r=this.variables,i=[];for(t=0,n=r.length;t<n;t++)e=r[t],e.type.assigned&&i.push(""+e.name+" = "+e.type.value);return i},e}()}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/worker-css.js b/ehcp/net2ftp/plugins/ace/worker-css.js new file mode 100644 index 0000000..59ceeaf --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/worker-css.js @@ -0,0 +1 @@ +"no use strict";function initBaseUrls(e){require.tlns=e}function initSender(){var e=require(null,"ace/lib/event_emitter").EventEmitter,t=require(null,"ace/lib/oop"),n=function(){};return function(){t.implement(this,e),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(n.prototype),new n}if(typeof window!="undefined"&&window.document)throw"atempt to load ace worker into main window instead of webWorker";var console={log:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},error:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})}},window={console:console},normalizeModule=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return normalizeModule(e,n[0])+"!"+normalizeModule(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/"),t=r+"/"+t;while(t.indexOf(".")!==-1&&i!=t)var i=t,t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},require=function(e,t){if(!t.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");var t=normalizeModule(e,t),n=require.modules[t];if(n)return n.initialized||(n.initialized=!0,n.exports=n.factory().exports),n.exports;var r=t.split("/");r[0]=require.tlns[r[0]]||r[0];var i=r.join("/")+".js";return require.id=t,importScripts(i),require(e,t)};require.modules={},require.tlns={};var define=function(e,t,n){arguments.length==2?(n=t,typeof e!="string"&&(t=e,e=require.id)):arguments.length==1&&(n=e,e=require.id);if(e.indexOf("text!")===0)return;var r=function(t,n){return require(e,t,n)};require.modules[e]={factory:function(){var e={exports:{}},t=n(r,e.exports,e);return t&&(e.exports=t),e}}},main,sender;onmessage=function(e){var t=e.data;if(t.command){if(!main[t.command])throw new Error("Unknown command:"+t.command);main[t.command].apply(main,t.args)}else if(t.init){initBaseUrls(t.tlns),require(null,"ace/lib/fixoldbrowsers"),sender=initSender();var n=require(null,t.module)[t.classname];main=new n(sender)}else t.event&&sender&&sender._emit(t.event,t.data)},define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/mode/css_worker",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/worker/mirror","ace/mode/css/csslint"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("../worker/mirror").Mirror,o=e("./css/csslint").CSSLint,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.ruleset=null,this.setDisabledRules("ids"),this.setInfoRules("adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none")};r.inherits(u,s),function(){this.setInfoRules=function(e){typeof e=="string"&&(e=e.split("|")),this.infoRules=i.arrayToMap(e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.setDisabledRules=function(e){if(!e)this.ruleset=null;else{typeof e=="string"&&(e=e.split("|"));var t={};o.getRules().forEach(function(e){t[e.id]=!0}),e.forEach(function(e){delete t[e]}),console.log(t),this.ruleset=t}this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.onUpdate=function(){var e=this.doc.getValue(),t=this.infoRules,n=o.verify(e,this.ruleset);this.sender.emit("csslint",n.messages.map(function(e){return{row:e.line-1,column:e.col-1,text:e.message,type:t[e.rule.id]?"info":e.type}}))}}.call(u.prototype)}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.deferredCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas([e.data]),n.schedule(s.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/mode/css/csslint",["require","exports","module"],function(require,exports,module){function Reporter(e,t){this.messages=[],this.stats=[],this.lines=e,this.ruleset=t}var parserlib={};(function(){function e(){this._listeners={}}function t(e){this._input=e.replace(/\n\r?/g,"\n"),this._line=1,this._col=1,this._cursor=0}function n(e,t,n){this.col=n,this.line=t,this.message=e}function r(e,t,n,r){this.col=n,this.line=t,this.text=e,this.type=r}function i(e,n){this._reader=e?new t(e.toString()):null,this._token=null,this._tokenData=n,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}e.prototype={constructor:e,addListener:function(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)},fire:function(e){typeof e=="string"&&(e={type:e}),typeof e.target!="undefined"&&(e.target=this);if(typeof e.type=="undefined")throw new Error("Event object missing 'type' property.");if(this._listeners[e.type]){var t=this._listeners[e.type].concat();for(var n=0,r=t.length;n<r;n++)t[n].call(this,e)}},removeListener:function(e,t){if(this._listeners[e]){var n=this._listeners[e];for(var r=0,i=n.length;r<i;r++)if(n[r]===t){n.splice(r,1);break}}}},t.prototype={constructor:t,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(e){var t=null;return e=typeof e=="undefined"?1:e,this._cursor<this._input.length&&(t=this._input.charAt(this._cursor+e-1)),t},read:function(){var e=null;return this._cursor<this._input.length&&(this._input.charAt(this._cursor)=="\n"?(this._line++,this._col=1):this._col++,e=this._input.charAt(this._cursor++)),e},mark:function(){this._bookmark={cursor:this._cursor,line:this._line,col:this._col}},reset:function(){this._bookmark&&(this._cursor=this._bookmark.cursor,this._line=this._bookmark.line,this._col=this._bookmark.col,delete this._bookmark)},readTo:function(e){var t="",n;while(t.length<e.length||t.lastIndexOf(e)!=t.length-e.length){n=this.read();if(!n)throw new Error('Expected "'+e+'" at line '+this._line+", col "+this._col+".");t+=n}return t},readWhile:function(e){var t="",n=this.read();while(n!==null&&e(n))t+=n,n=this.read();return t},readMatch:function(e){var t=this._input.substring(this._cursor),n=null;return typeof e=="string"?t.indexOf(e)===0&&(n=this.readCount(e.length)):e instanceof RegExp&&e.test(t)&&(n=this.readCount(RegExp.lastMatch.length)),n},readCount:function(e){var t="";while(e--)t+=this.read();return t}},n.prototype=new Error,r.fromToken=function(e){return new r(e.value,e.startLine,e.startCol)},r.prototype={constructor:r,valueOf:function(){return this.toString()},toString:function(){return this.text}},i.createTokenData=function(e){var t=[],n={},r=e.concat([]),i=0,s=r.length+1;r.UNKNOWN=-1,r.unshift({name:"EOF"});for(;i<s;i++)t.push(r[i].name),r[r[i].name]=i,r[i].text&&(n[r[i].text]=i);return r.name=function(e){return t[e]},r.type=function(e){return n[e]},r},i.prototype={constructor:i,match:function(e,t){e instanceof Array||(e=[e]);var n=this.get(t),r=0,i=e.length;while(r<i)if(n==e[r++])return!0;return this.unget(),!1},mustMatch:function(e,t){var r;e instanceof Array||(e=[e]);if(!this.match.apply(this,arguments))throw r=this.LT(1),new n("Expected "+this._tokenData[e[0]].name+" at line "+r.startLine+", col "+r.startCol+".",r.startLine,r.startCol)},advance:function(e,t){while(this.LA(0)!==0&&!this.match(e,t))this.get();return this.LA(0)},get:function(e){var t=this._tokenData,n=this._reader,r,i=0,s=t.length,o=!1,u,a;if(this._lt.length&&this._ltIndex>=0&&this._ltIndex<this._lt.length){i++,this._token=this._lt[this._ltIndex++],a=t[this._token.type];while(a.channel!==undefined&&e!==a.channel&&this._ltIndex<this._lt.length)this._token=this._lt[this._ltIndex++],a=t[this._token.type],i++;if((a.channel===undefined||e===a.channel)&&this._ltIndex<=this._lt.length)return this._ltIndexCache.push(i),this._token.type}return u=this._getToken(),u.type>-1&&!t[u.type].hide&&(u.channel=t[u.type].channel,this._token=u,this._lt.push(u),this._ltIndexCache.push(this._lt.length-this._ltIndex+i),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),a=t[u.type],a&&(a.hide||a.channel!==undefined&&e!==a.channel)?this.get(e):u.type},LA:function(e){var t=e,n;if(e>0){if(e>5)throw new Error("Too much lookahead.");while(t)n=this.get(),t--;while(t<e)this.unget(),t++}else if(e<0){if(!this._lt[this._ltIndex+e])throw new Error("Too much lookbehind.");n=this._lt[this._ltIndex+e].type}else n=this._token.type;return n},LT:function(e){return this.LA(e),this._lt[this._ltIndex+e-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(e){return e<0||e>this._tokenData.length?"UNKNOWN_TOKEN":this._tokenData[e].name},tokenType:function(e){return this._tokenData[e]||-1},unget:function(){if(!this._ltIndexCache.length)throw new Error("Too much lookahead.");this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1]}},parserlib.util={StringReader:t,SyntaxError:n,SyntaxUnit:r,EventTarget:e,TokenStreamBase:i}})(),function(){function Combinator(e,t,n){SyntaxUnit.call(this,e,t,n,Parser.COMBINATOR_TYPE),this.type="unknown",/^\s+$/.test(e)?this.type="descendant":e==">"?this.type="child":e=="+"?this.type="adjacent-sibling":e=="~"&&(this.type="sibling")}function MediaFeature(e,t){SyntaxUnit.call(this,"("+e+(t!==null?":"+t:"")+")",e.startLine,e.startCol,Parser.MEDIA_FEATURE_TYPE),this.name=e,this.value=t}function MediaQuery(e,t,n,r,i){SyntaxUnit.call(this,(e?e+" ":"")+(t?t+" ":"")+n.join(" and "),r,i,Parser.MEDIA_QUERY_TYPE),this.modifier=e,this.mediaType=t,this.features=n}function Parser(e){EventTarget.call(this),this.options=e||{},this._tokenStream=null}function PropertyName(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.PROPERTY_NAME_TYPE),this.hack=t}function PropertyValue(e,t,n){SyntaxUnit.call(this,e.join(" "),t,n,Parser.PROPERTY_VALUE_TYPE),this.parts=e}function PropertyValueIterator(e){this._i=0,this._parts=e.parts,this._marks=[],this.value=e}function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_VALUE_PART_TYPE),this.type="unknown";var temp;if(/^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)){this.type="dimension",this.value=+RegExp.$1,this.units=RegExp.$2;switch(this.units.toLowerCase()){case"em":case"rem":case"ex":case"px":case"cm":case"mm":case"in":case"pt":case"pc":case"ch":this.type="length";break;case"deg":case"rad":case"grad":this.type="angle";break;case"ms":case"s":this.type="time";break;case"hz":case"khz":this.type="frequency";break;case"dpi":case"dpcm":this.type="resolution"}}else/^([+\-]?[\d\.]+)%$/i.test(text)?(this.type="percentage",this.value=+RegExp.$1):/^([+\-]?[\d\.]+)%$/i.test(text)?(this.type="percentage",this.value=+RegExp.$1):/^([+\-]?\d+)$/i.test(text)?(this.type="integer",this.value=+RegExp.$1):/^([+\-]?[\d\.]+)$/i.test(text)?(this.type="number",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type="color",temp=RegExp.$1,temp.length==3?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100):/^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d\.]+)\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3,this.alpha=+RegExp.$4):/^rgba\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100,this.alpha=+RegExp.$4):/^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)?(this.type="color",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100):/^hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text)?(this.type="color",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100,this.alpha=+RegExp.$4):/^url\(["']?([^\)"']+)["']?\)/i.test(text)?(this.type="uri",this.uri=RegExp.$1):/^([^\(]+)\(/i.test(text)?(this.type="function",this.name=RegExp.$1,this.value=text):/^["'][^"']*["']/.test(text)?(this.type="string",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type="color",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\,\/]$/.test(text)?(this.type="operator",this.value=text):/^[a-z\-\u0080-\uFFFF][a-z0-9\-\u0080-\uFFFF]*$/i.test(text)&&(this.type="identifier",this.value=text)}function Selector(e,t,n){SyntaxUnit.call(this,e.join(" "),t,n,Parser.SELECTOR_TYPE),this.parts=e,this.specificity=Specificity.calculate(this)}function SelectorPart(e,t,n,r,i){SyntaxUnit.call(this,n,r,i,Parser.SELECTOR_PART_TYPE),this.elementName=e,this.modifiers=t}function SelectorSubPart(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.SELECTOR_SUB_PART_TYPE),this.type=t,this.args=[]}function Specificity(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function isHexDigit(e){return e!==null&&h.test(e)}function isDigit(e){return e!==null&&/\d/.test(e)}function isWhitespace(e){return e!==null&&/\s/.test(e)}function isNewLine(e){return e!==null&&nl.test(e)}function isNameStart(e){return e!==null&&/[a-z_\u0080-\uFFFF\\]/i.test(e)}function isNameChar(e){return e!==null&&(isNameStart(e)||/[0-9\-\\]/.test(e))}function isIdentStart(e){return e!==null&&(isNameStart(e)||/\-\\/.test(e))}function mix(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function TokenStream(e){TokenStreamBase.call(this,e,Tokens)}function ValidationError(e,t,n){this.col=n,this.line=t,this.message=e}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator,MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.DEFAULT_TYPE=0,Parser.COMBINATOR_TYPE=1,Parser.MEDIA_FEATURE_TYPE=2,Parser.MEDIA_QUERY_TYPE=3,Parser.PROPERTY_NAME_TYPE=4,Parser.PROPERTY_VALUE_TYPE=5,Parser.PROPERTY_VALUE_PART_TYPE=6,Parser.SELECTOR_TYPE=7,Parser.SELECTOR_PART_TYPE=8,Parser.SELECTOR_SUB_PART_TYPE=9,Parser.prototype=function(){var e=new EventTarget,t,n={constructor:Parser,DEFAULT_TYPE:0,COMBINATOR_TYPE:1,MEDIA_FEATURE_TYPE:2,MEDIA_QUERY_TYPE:3,PROPERTY_NAME_TYPE:4,PROPERTY_VALUE_TYPE:5,PROPERTY_VALUE_PART_TYPE:6,SELECTOR_TYPE:7,SELECTOR_PART_TYPE:8,SELECTOR_SUB_PART_TYPE:9,_stylesheet:function(){var e=this._tokenStream,t=null,n,r,i;this.fire("startstylesheet"),this._charset(),this._skipCruft();while(e.peek()==Tokens.IMPORT_SYM)this._import(),this._skipCruft();while(e.peek()==Tokens.NAMESPACE_SYM)this._namespace(),this._skipCruft();i=e.peek();while(i>Tokens.EOF){try{switch(i){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.UNKNOWN_SYM:e.get();if(!!this.options.strict)throw new SyntaxError("Unknown @ rule.",e.LT(0).startLine,e.LT(0).startCol);this.fire({type:"error",error:null,message:"Unknown @ rule: "+e.LT(0).value+".",line:e.LT(0).startLine,col:e.LT(0).startCol}),n=0;while(e.advance([Tokens.LBRACE,Tokens.RBRACE])==Tokens.LBRACE)n++;while(n)e.advance([Tokens.RBRACE]),n--;break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(i){case Tokens.CHARSET_SYM:throw r=e.LT(1),this._charset(!1),new SyntaxError("@charset not allowed here.",r.startLine,r.startCol);case Tokens.IMPORT_SYM:throw r=e.LT(1),this._import(!1),new SyntaxError("@import not allowed here.",r.startLine,r.startCol);case Tokens.NAMESPACE_SYM:throw r=e.LT(1),this._namespace(!1),new SyntaxError("@namespace not allowed here.",r.startLine,r.startCol);default:e.get(),this._unexpectedToken(e.token())}}}catch(s){if(!(s instanceof SyntaxError&&!this.options.strict))throw s;this.fire({type:"error",error:s,message:s.message,line:s.line,col:s.col})}i=e.peek()}i!=Tokens.EOF&&this._unexpectedToken(e.token()),this.fire("endstylesheet")},_charset:function(e){var t=this._tokenStream,n,r,i,s;t.match(Tokens.CHARSET_SYM)&&(i=t.token().startLine,s=t.token().startCol,this._readWhitespace(),t.mustMatch(Tokens.STRING),r=t.token(),n=r.value,this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),e!==!1&&this.fire({type:"charset",charset:n,line:i,col:s}))},_import:function(e){var t=this._tokenStream,n,r,i,s=[];t.mustMatch(Tokens.IMPORT_SYM),i=t.token(),this._readWhitespace(),t.mustMatch([Tokens.STRING,Tokens.URI]),r=t.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/,"$1"),this._readWhitespace(),s=this._media_query_list(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:"import",uri:r,media:s,line:i.startLine,col:i.startCol})},_namespace:function(e){var t=this._tokenStream,n,r,i,s;t.mustMatch(Tokens.NAMESPACE_SYM),n=t.token().startLine,r=t.token().startCol,this._readWhitespace(),t.match(Tokens.IDENT)&&(i=t.token().value,this._readWhitespace()),t.mustMatch([Tokens.STRING,Tokens.URI]),s=t.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/,"$1"),this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:"namespace",prefix:i,uri:s,line:n,col:r})},_media:function(){var e=this._tokenStream,t,n,r;e.mustMatch(Tokens.MEDIA_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),r=this._media_query_list(),e.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:"startmedia",media:r,line:t,col:n});for(;;)if(e.peek()==Tokens.PAGE_SYM)this._page();else if(!this._ruleset())break;e.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:"endmedia",media:r,line:t,col:n})},_media_query_list:function(){var e=this._tokenStream,t=[];this._readWhitespace(),(e.peek()==Tokens.IDENT||e.peek()==Tokens.LPAREN)&&t.push(this._media_query());while(e.match(Tokens.COMMA))this._readWhitespace(),t.push(this._media_query());return t},_media_query:function(){var e=this._tokenStream,t=null,n=null,r=null,i=[];e.match(Tokens.IDENT)&&(n=e.token().value.toLowerCase(),n!="only"&&n!="not"?(e.unget(),n=null):r=e.token()),this._readWhitespace(),e.peek()==Tokens.IDENT?(t=this._media_type(),r===null&&(r=e.token())):e.peek()==Tokens.LPAREN&&(r===null&&(r=e.LT(1)),i.push(this._media_expression()));if(t===null&&i.length===0)return null;this._readWhitespace();while(e.match(Tokens.IDENT))e.token().value.toLowerCase()!="and"&&this._unexpectedToken(e.token()),this._readWhitespace(),i.push(this._media_expression());return new MediaQuery(n,t,i,r.startLine,r.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var e=this._tokenStream,t=null,n,r=null;return e.mustMatch(Tokens.LPAREN),t=this._media_feature(),this._readWhitespace(),e.match(Tokens.COLON)&&(this._readWhitespace(),n=e.LT(1),r=this._expression()),e.mustMatch(Tokens.RPAREN),this._readWhitespace(),new MediaFeature(t,r?new SyntaxUnit(r,n.startLine,n.startCol):null)},_media_feature:function(){var e=this._tokenStream;return e.mustMatch(Tokens.IDENT),SyntaxUnit.fromToken(e.token())},_page:function(){var e=this._tokenStream,t,n,r=null,i=null;e.mustMatch(Tokens.PAGE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),e.match(Tokens.IDENT)&&(r=e.token().value,r.toLowerCase()==="auto"&&this._unexpectedToken(e.token())),e.peek()==Tokens.COLON&&(i=this._pseudo_page()),this._readWhitespace(),this.fire({type:"startpage",id:r,pseudo:i,line:t,col:n}),this._readDeclarations(!0,!0),this.fire({type:"endpage",id:r,pseudo:i,line:t,col:n})},_margin:function(){var e=this._tokenStream,t,n,r=this._margin_sym();return r?(t=e.token().startLine,n=e.token().startCol,this.fire({type:"startpagemargin",margin:r,line:t,col:n}),this._readDeclarations(!0),this.fire({type:"endpagemargin",margin:r,line:t,col:n}),!0):!1},_margin_sym:function(){var e=this._tokenStream;return e.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(e.token()):null},_pseudo_page:function(){var e=this._tokenStream;return e.mustMatch(Tokens.COLON),e.mustMatch(Tokens.IDENT),e.token().value},_font_face:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.FONT_FACE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:"startfontface",line:t,col:n}),this._readDeclarations(!0),this.fire({type:"endfontface",line:t,col:n})},_operator:function(){var e=this._tokenStream,t=null;return e.match([Tokens.SLASH,Tokens.COMMA])&&(t=e.token(),this._readWhitespace()),t?PropertyValuePart.fromToken(t):null},_combinator:function(){var e=this._tokenStream,t=null,n;return e.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(n=e.token(),t=new Combinator(n.value,n.startLine,n.startCol),this._readWhitespace()),t},_unary_operator:function(){var e=this._tokenStream;return e.match([Tokens.MINUS,Tokens.PLUS])?e.token().value:null},_property:function(){var e=this._tokenStream,t=null,n=null,r,i,s,o;return e.peek()==Tokens.STAR&&this.options.starHack&&(e.get(),i=e.token(),n=i.value,s=i.startLine,o=i.startCol),e.match(Tokens.IDENT)&&(i=e.token(),r=i.value,r.charAt(0)=="_"&&this.options.underscoreHack&&(n="_",r=r.substring(1)),t=new PropertyName(r,n,s||i.startLine,o||i.startCol),this._readWhitespace()),t},_ruleset:function(){var e=this._tokenStream,t,n;try{n=this._selectors_group()}catch(r){if(r instanceof SyntaxError&&!this.options.strict){this.fire({type:"error",error:r,message:r.message,line:r.line,col:r.col}),t=e.advance([Tokens.RBRACE]);if(t!=Tokens.RBRACE)throw r;return!0}throw r}return n&&(this.fire({type:"startrule",selectors:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:"endrule",selectors:n,line:n[0].line,col:n[0].col})),n},_selectors_group:function(){var e=this._tokenStream,t=[],n;n=this._selector();if(n!==null){t.push(n);while(e.match(Tokens.COMMA))this._readWhitespace(),n=this._selector(),n!==null?t.push(n):this._unexpectedToken(e.LT(1))}return t.length?t:null},_selector:function(){var e=this._tokenStream,t=[],n=null,r=null,i=null;n=this._simple_selector_sequence();if(n===null)return null;t.push(n);do{r=this._combinator();if(r!==null)t.push(r),n=this._simple_selector_sequence(),n===null?this._unexpectedToken(e.LT(1)):t.push(n);else{if(!this._readWhitespace())break;i=new Combinator(e.token().value,e.token().startLine,e.token().startCol),r=this._combinator(),n=this._simple_selector_sequence(),n===null?r!==null&&this._unexpectedToken(e.LT(1)):(r!==null?t.push(r):t.push(i),t.push(n))}}while(!0);return new Selector(t,t[0].line,t[0].col)},_simple_selector_sequence:function(){var e=this._tokenStream,t=null,n=[],r="",i=[function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,"id",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],s=0,o=i.length,u=null,a=!1,f,l;f=e.LT(1).startLine,l=e.LT(1).startCol,t=this._type_selector(),t||(t=this._universal()),t!==null&&(r+=t);for(;;){if(e.peek()===Tokens.S)break;while(s<o&&u===null)u=i[s++].call(this);if(u===null){if(r==="")return null;break}s=0,n.push(u),r+=u.toString(),u=null}return r!==""?new SelectorPart(t,n,r,f,l):null},_type_selector:function(){var e=this._tokenStream,t=this._namespace_prefix(),n=this._element_name();return n?(t&&(n.text=t+n.text,n.col-=t.length),n):(t&&(e.unget(),t.length>1&&e.unget()),null)},_class:function(){var e=this._tokenStream,t;return e.match(Tokens.DOT)?(e.mustMatch(Tokens.IDENT),t=e.token(),new SelectorSubPart("."+t.value,"class",t.startLine,t.startCol-1)):null},_element_name:function(){var e=this._tokenStream,t;return e.match(Tokens.IDENT)?(t=e.token(),new SelectorSubPart(t.value,"elementName",t.startLine,t.startCol)):null},_namespace_prefix:function(){var e=this._tokenStream,t="";if(e.LA(1)===Tokens.PIPE||e.LA(2)===Tokens.PIPE)e.match([Tokens.IDENT,Tokens.STAR])&&(t+=e.token().value),e.mustMatch(Tokens.PIPE),t+="|";return t.length?t:null},_universal:function(){var e=this._tokenStream,t="",n;return n=this._namespace_prefix(),n&&(t+=n),e.match(Tokens.STAR)&&(t+="*"),t.length?t:null},_attrib:function(){var e=this._tokenStream,t=null,n,r;return e.match(Tokens.LBRACKET)?(r=e.token(),t=r.value,t+=this._readWhitespace(),n=this._namespace_prefix(),n&&(t+=n),e.mustMatch(Tokens.IDENT),t+=e.token().value,t+=this._readWhitespace(),e.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(t+=e.token().value,t+=this._readWhitespace(),e.mustMatch([Tokens.IDENT,Tokens.STRING]),t+=e.token().value,t+=this._readWhitespace()),e.mustMatch(Tokens.RBRACKET),new SelectorSubPart(t+"]","attribute",r.startLine,r.startCol)):null},_pseudo:function(){var e=this._tokenStream,t=null,n=":",r,i;return e.match(Tokens.COLON)&&(e.match(Tokens.COLON)&&(n+=":"),e.match(Tokens.IDENT)?(t=e.token().value,r=e.token().startLine,i=e.token().startCol-n.length):e.peek()==Tokens.FUNCTION&&(r=e.LT(1).startLine,i=e.LT(1).startCol-n.length,t=this._functional_pseudo()),t&&(t=new SelectorSubPart(n+t,"pseudo",r,i))),t},_functional_pseudo:function(){var e=this._tokenStream,t=null;return e.match(Tokens.FUNCTION)&&(t=e.token().value,t+=this._readWhitespace(),t+=this._expression(),e.mustMatch(Tokens.RPAREN),t+=")"),t},_expression:function(){var e=this._tokenStream,t="";while(e.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION]))t+=e.token().value,t+=this._readWhitespace();return t.length?t:null},_negation:function(){var e=this._tokenStream,t,n,r="",i,s=null;return e.match(Tokens.NOT)&&(r=e.token().value,t=e.token().startLine,n=e.token().startCol,r+=this._readWhitespace(),i=this._negation_arg(),r+=i,r+=this._readWhitespace(),e.match(Tokens.RPAREN),r+=e.token().value,s=new SelectorSubPart(r,"not",t,n),s.args.push(i)),s},_negation_arg:function(){var e=this._tokenStream,t=[this._type_selector,this._universal,function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,"id",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo],n=null,r=0,i=t.length,s,o,u,a;o=e.LT(1).startLine,u=e.LT(1).startCol;while(r<i&&n===null)n=t[r].call(this),r++;return n===null&&this._unexpectedToken(e.LT(1)),n.type=="elementName"?a=new SelectorPart(n,[],n.toString(),o,u):a=new SelectorPart(null,[n],n.toString(),o,u),a},_declaration:function(){var e=this._tokenStream,t=null,n=null,r=null,i=null,s=null,o="";t=this._property();if(t!==null){e.mustMatch(Tokens.COLON),this._readWhitespace(),n=this._expr(),(!n||n.length===0)&&this._unexpectedToken(e.LT(1)),r=this._prio(),o=t.toString();if(this.options.starHack&&t.hack=="*"||this.options.underscoreHack&&t.hack=="_")o=t.text;try{this._validateProperty(o,n)}catch(u){s=u}return this.fire({type:"property",property:t,value:n,important:r,line:t.line,col:t.col,invalid:s}),!0}return!1},_prio:function(){var e=this._tokenStream,t=e.match(Tokens.IMPORTANT_SYM);return this._readWhitespace(),t},_expr:function(){var e=this._tokenStream,t=[],n=null,r=null;n=this._term();if(n!==null){t.push(n);do{r=this._operator(),r&&t.push(r),n=this._term();if(n===null)break;t.push(n)}while(!0)}return t.length>0?new PropertyValue(t,t[0].line,t[0].col):null},_term:function(){var e=this._tokenStream,t=null,n=null,r,i,s;return t=this._unary_operator(),t!==null&&(i=e.token().startLine,s=e.token().startCol),e.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(n=this._ie_function(),t===null&&(i=e.token().startLine,s=e.token().startCol)):e.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(n=e.token().value,t===null&&(i=e.token().startLine,s=e.token().startCol),this._readWhitespace()):(r=this._hexcolor(),r===null?(t===null&&(i=e.LT(1).startLine,s=e.LT(1).startCol),n===null&&(e.LA(3)==Tokens.EQUALS&&this.options.ieFilters?n=this._ie_function():n=this._function())):(n=r.value,t===null&&(i=r.startLine,s=r.startCol))),n!==null?new PropertyValuePart(t!==null?t+n:n,i,s):null},_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match(Tokens.FUNCTION)){t=e.token().value,this._readWhitespace(),n=this._expr(),t+=n;if(this.options.ieFilters&&e.peek()==Tokens.EQUALS)do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=")",this._readWhitespace()}return t},_ie_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){t=e.token().value;do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=")",this._readWhitespace()}return t},_hexcolor:function(){var e=this._tokenStream,t=null,n;if(e.match(Tokens.HASH)){t=e.token(),n=t.value;if(!/#[a-f0-9]{3,6}/i.test(n))throw new SyntaxError("Expected a hex color but found '"+n+"' at line "+t.startLine+", col "+t.startCol+".",t.startLine,t.startCol);this._readWhitespace()}return t},_keyframes:function(){var e=this._tokenStream,t,n,r,i="";e.mustMatch(Tokens.KEYFRAMES_SYM),t=e.token(),/^@\-([^\-]+)\-/.test(t.value)&&(i=RegExp.$1),this._readWhitespace(),r=this._keyframe_name(),this._readWhitespace(),e.mustMatch(Tokens.LBRACE),this.fire({type:"startkeyframes",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),n=e.peek();while(n==Tokens.IDENT||n==Tokens.PERCENTAGE)this._keyframe_rule(),this._readWhitespace(),n=e.peek();this.fire({type:"endkeyframes",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),e.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var e=this._tokenStream,t;return e.mustMatch([Tokens.IDENT,Tokens.STRING]),SyntaxUnit.fromToken(e.token())},_keyframe_rule:function(){var e=this._tokenStream,t,n=this._key_list();this.fire({type:"startkeyframerule",keys:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:"endkeyframerule",keys:n,line:n[0].line,col:n[0].col})},_key_list:function(){var e=this._tokenStream,t,n,r=[];r.push(this._key()),this._readWhitespace();while(e.match(Tokens.COMMA))this._readWhitespace(),r.push(this._key()),this._readWhitespace();return r},_key:function(){var e=this._tokenStream,t;if(e.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(e.token());if(e.match(Tokens.IDENT)){t=e.token();if(/from|to/i.test(t.value))return SyntaxUnit.fromToken(t);e.unget()}this._unexpectedToken(e.LT(1))},_skipCruft:function(){while(this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]));},_readDeclarations:function(e,t){var n=this._tokenStream,r;this._readWhitespace(),e&&n.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(!(n.match(Tokens.SEMICOLON)||t&&this._margin())){if(!this._declaration())break;if(!n.match(Tokens.SEMICOLON))break}this._readWhitespace()}n.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(i){if(!(i instanceof SyntaxError&&!this.options.strict))throw i;this.fire({type:"error",error:i,message:i.message,line:i.line,col:i.col}),r=n.advance([Tokens.SEMICOLON,Tokens.RBRACE]);if(r==Tokens.SEMICOLON)this._readDeclarations(!1,t);else if(r!=Tokens.RBRACE)throw i}},_readWhitespace:function(){var e=this._tokenStream,t="";while(e.match(Tokens.S))t+=e.token().value;return t},_unexpectedToken:function(e){throw new SyntaxError("Unexpected token '"+e.value+"' at line "+e.startLine+", col "+e.startCol+".",e.startLine,e.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},_validateProperty:function(e,t){Validation.validate(e,t)},parse:function(e){this._tokenStream=new TokenStream(e,Tokens),this._stylesheet()},parseStyleSheet:function(e){return this.parse(e)},parseMediaQuery:function(e){this._tokenStream=new TokenStream(e,Tokens);var t=this._media_query();return this._verifyEnd(),t},parsePropertyValue:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._expr();return this._readWhitespace(),this._verifyEnd(),t},parseRule:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._ruleset();return this._readWhitespace(),this._verifyEnd(),t},parseSelector:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._selector();return this._readWhitespace(),this._verifyEnd(),t},parseStyleAttribute:function(e){e+="}",this._tokenStream=new TokenStream(e,Tokens),this._readDeclarations()}};for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}();var Properties={"alignment-adjust":"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>","alignment-baseline":"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical",animation:1,"animation-delay":{multi:"<time>",comma:!0},"animation-direction":{multi:"normal | alternate",comma:!0},"animation-duration":{multi:"<time>",comma:!0},"animation-iteration-count":{multi:"<number> | infinite",comma:!0},"animation-name":{multi:"none | <ident>",comma:!0},"animation-play-state":{multi:"running | paused",comma:!0},"animation-timing-function":1,"-moz-animation-delay":{multi:"<time>",comma:!0},"-moz-animation-direction":{multi:"normal | alternate",comma:!0},"-moz-animation-duration":{multi:"<time>",comma:!0},"-moz-animation-iteration-count":{multi:"<number> | infinite",comma:!0},"-moz-animation-name":{multi:"none | <ident>",comma:!0},"-moz-animation-play-state":{multi:"running | paused",comma:!0},"-ms-animation-delay":{multi:"<time>",comma:!0},"-ms-animation-direction":{multi:"normal | alternate",comma:!0},"-ms-animation-duration":{multi:"<time>",comma:!0},"-ms-animation-iteration-count":{multi:"<number> | infinite",comma:!0},"-ms-animation-name":{multi:"none | <ident>",comma:!0},"-ms-animation-play-state":{multi:"running | paused",comma:!0},"-webkit-animation-delay":{multi:"<time>",comma:!0},"-webkit-animation-direction":{multi:"normal | alternate",comma:!0},"-webkit-animation-duration":{multi:"<time>",comma:!0},"-webkit-animation-iteration-count":{multi:"<number> | infinite",comma:!0},"-webkit-animation-name":{multi:"none | <ident>",comma:!0},"-webkit-animation-play-state":{multi:"running | paused",comma:!0},"-o-animation-delay":{multi:"<time>",comma:!0},"-o-animation-direction":{multi:"normal | alternate",comma:!0},"-o-animation-duration":{multi:"<time>",comma:!0},"-o-animation-iteration-count":{multi:"<number> | infinite",comma:!0},"-o-animation-name":{multi:"none | <ident>",comma:!0},"-o-animation-play-state":{multi:"running | paused",comma:!0},appearance:"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | inherit",azimuth:function(e){var t="<angle> | leftwards | rightwards | inherit",n="left-side | far-left | left | center-left | center | center-right | right | far-right | right-side",r=!1,i=!1,s;ValidationTypes.isAny(e,t)||(ValidationTypes.isAny(e,"behind")&&(r=!0,i=!0),ValidationTypes.isAny(e,n)&&(i=!0,r||ValidationTypes.isAny(e,"behind")));if(e.hasNext())throw s=e.next(),i?new ValidationError("Expected end of value but found '"+s+"'.",s.line,s.col):new ValidationError("Expected (<'azimuth'>) but found '"+s+"'.",s.line,s.col)},"backface-visibility":"visible | hidden",background:1,"background-attachment":{multi:"<attachment>",comma:!0},"background-clip":{multi:"<box>",comma:!0},"background-color":"<color> | inherit","background-image":{multi:"<bg-image>",comma:!0},"background-origin":{multi:"<box>",comma:!0},"background-position":{multi:"<bg-position>",comma:!0},"background-repeat":{multi:"<repeat-style>"},"background-size":{multi:"<bg-size>",comma:!0},"baseline-shift":"baseline | sub | super | <percentage> | <length>",behavior:1,binding:1,bleed:"<length>","bookmark-label":"<content> | <attr> | <string>","bookmark-level":"none | <integer>","bookmark-state":"open | closed","bookmark-target":"none | <uri> | <attr>",border:"<border-width> || <border-style> || <color>","border-bottom":"<border-width> || <border-style> || <color>","border-bottom-color":"<color>","border-bottom-left-radius":"<x-one-radius>","border-bottom-right-radius":"<x-one-radius>","border-bottom-style":"<border-style>","border-bottom-width":"<border-width>","border-collapse":"collapse | separate | inherit","border-color":{multi:"<color> | inherit",max:4},"border-image":1,"border-image-outset":{multi:"<length> | <number>",max:4},"border-image-repeat":{multi:"stretch | repeat | round",max:2},"border-image-slice":function(e){var t=!1,n="<number> | <percentage>",r=!1,i=0,s=4,o;ValidationTypes.isAny(e,"fill")&&(r=!0,t=!0);while(e.hasNext()&&i<s){t=ValidationTypes.isAny(e,n);if(!t)break;i++}r?t=!0:ValidationTypes.isAny(e,"fill");if(e.hasNext())throw o=e.next(),t?new ValidationError("Expected end of value but found '"+o+"'.",o.line,o.col):new ValidationError("Expected ([<number> | <percentage>]{1,4} && fill?) but found '"+o+"'.",o.line,o.col)},"border-image-source":"<image> | none","border-image-width":{multi:"<length> | <percentage> | <number> | auto",max:4},"border-left":"<border-width> || <border-style> || <color>","border-left-color":"<color> | inherit","border-left-style":"<border-style>","border-left-width":"<border-width>","border-radius":function(e){var t=!1,n="<length> | <percentage>",r=!1,i=!1,s=0,o=8,u;while(e.hasNext()&&s<o){t=ValidationTypes.isAny(e,n);if(!t){if(!(e.peek()=="/"&&s>1&&!r))break;r=!0,o=s+5,e.next()}s++}if(e.hasNext())throw u=e.next(),t?new ValidationError("Expected end of value but found '"+u+"'.",u.line,u.col):new ValidationError("Expected (<'border-radius'>) but found '"+u+"'.",u.line,u.col)},"border-right":"<border-width> || <border-style> || <color>","border-right-color":"<color> | inherit","border-right-style":"<border-style>","border-right-width":"<border-width>","border-spacing":{multi:"<length> | inherit",max:2},"border-style":{multi:"<border-style>",max:4},"border-top":"<border-width> || <border-style> || <color>","border-top-color":"<color> | inherit","border-top-left-radius":"<x-one-radius>","border-top-right-radius":"<x-one-radius>","border-top-style":"<border-style>","border-top-width":"<border-width>","border-width":{multi:"<border-width>",max:4},bottom:"<margin-width> | inherit","box-align":"start | end | center | baseline | stretch","box-decoration-break":"slice |clone","box-direction":"normal | reverse | inherit","box-flex":"<number>","box-flex-group":"<integer>","box-lines":"single | multiple","box-ordinal-group":"<integer>","box-orient":"horizontal | vertical | inline-axis | block-axis | inherit","box-pack":"start | end | center | justify","box-shadow":function(e){var t=!1,n;if(!ValidationTypes.isAny(e,"none"))Validation.multiProperty("<shadow>",e,!0,Infinity);else if(e.hasNext())throw n=e.next(),new ValidationError("Expected end of value but found '"+n+"'.",n.line,n.col)},"box-sizing":"content-box | border-box | inherit","break-after":"auto | always | avoid | left | right | page | column | avoid-page | avoid-column","break-before":"auto | always | avoid | left | right | page | column | avoid-page | avoid-column","break-inside":"auto | avoid | avoid-page | avoid-column","caption-side":"top | bottom | inherit",clear:"none | right | left | both | inherit",clip:1,color:"<color> | inherit","color-profile":1,"column-count":"<integer> | auto","column-fill":"auto | balance","column-gap":"<length> | normal","column-rule":"<border-width> || <border-style> || <color>","column-rule-color":"<color>","column-rule-style":"<border-style>","column-rule-width":"<border-width>","column-span":"none | all","column-width":"<length> | auto",columns:1,content:1,"counter-increment":1,"counter-reset":1,crop:"<shape> | auto",cue:"cue-after | cue-before | inherit","cue-after":1,"cue-before":1,cursor:1,direction:"ltr | rtl | inherit",display:"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | box | inline-box | grid | inline-grid | none | inherit","dominant-baseline":1,"drop-initial-after-adjust":"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>","drop-initial-after-align":"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical","drop-initial-before-adjust":"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>","drop-initial-before-align":"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical","drop-initial-size":"auto | line | <length> | <percentage>","drop-initial-value":"initial | <integer>",elevation:"<angle> | below | level | above | higher | lower | inherit","empty-cells":"show | hide | inherit",filter:1,fit:"fill | hidden | meet | slice","fit-position":1,"float":"left | right | none | inherit","float-offset":1,font:1,"font-family":1,"font-size":"<absolute-size> | <relative-size> | <length> | <percentage> | inherit","font-size-adjust":"<number> | none | inherit","font-stretch":"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit","font-style":"normal | italic | oblique | inherit","font-variant":"normal | small-caps | inherit","font-weight":"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit","grid-cell-stacking":"columns | rows | layer","grid-column":1,"grid-columns":1,"grid-column-align":"start | end | center | stretch","grid-column-sizing":1,"grid-column-span":"<integer>","grid-flow":"none | rows | columns","grid-layer":"<integer>","grid-row":1,"grid-rows":1,"grid-row-align":"start | end | center | stretch","grid-row-span":"<integer>","grid-row-sizing":1,"hanging-punctuation":1,height:"<margin-width> | inherit","hyphenate-after":"<integer> | auto","hyphenate-before":"<integer> | auto","hyphenate-character":"<string> | auto","hyphenate-lines":"no-limit | <integer>","hyphenate-resource":1,hyphens:"none | manual | auto",icon:1,"image-orientation":"angle | auto","image-rendering":1,"image-resolution":1,"inline-box-align":"initial | last | <integer>",left:"<margin-width> | inherit","letter-spacing":"<length> | normal | inherit","line-height":"<number> | <length> | <percentage> | normal | inherit","line-break":"auto | loose | normal | strict","line-stacking":1,"line-stacking-ruby":"exclude-ruby | include-ruby","line-stacking-shift":"consider-shifts | disregard-shifts","line-stacking-strategy":"inline-line-height | block-line-height | max-height | grid-height","list-style":1,"list-style-image":"<uri> | none | inherit","list-style-position":"inside | outside | inherit","list-style-type":"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit",margin:{multi:"<margin-width> | inherit",max:4},"margin-bottom":"<margin-width> | inherit","margin-left":"<margin-width> | inherit","margin-right":"<margin-width> | inherit","margin-top":"<margin-width> | inherit",mark:1,"mark-after":1,"mark-before":1,marks:1,"marquee-direction":1,"marquee-play-count":1,"marquee-speed":1,"marquee-style":1,"max-height":"<length> | <percentage> | none | inherit","max-width":"<length> | <percentage> | none | inherit","min-height":"<length> | <percentage> | inherit","min-width":"<length> | <percentage> | inherit","move-to":1,"nav-down":1,"nav-index":1,"nav-left":1,"nav-right":1,"nav-up":1,opacity:"<number> | inherit",orphans:"<integer> | inherit",outline:1,"outline-color":"<color> | invert | inherit","outline-offset":1,"outline-style":"<border-style> | inherit","outline-width":"<border-width> | inherit",overflow:"visible | hidden | scroll | auto | inherit","overflow-style":1,"overflow-x":1,"overflow-y":1,padding:{multi:"<padding-width> | inherit",max:4},"padding-bottom":"<padding-width> | inherit","padding-left":"<padding-width> | inherit","padding-right":"<padding-width> | inherit","padding-top":"<padding-width> | inherit",page:1,"page-break-after":"auto | always | avoid | left | right | inherit","page-break-before":"auto | always | avoid | left | right | inherit","page-break-inside":"auto | avoid | inherit","page-policy":1,pause:1,"pause-after":1,"pause-before":1,perspective:1,"perspective-origin":1,phonemes:1,pitch:1,"pitch-range":1,"play-during":1,"pointer-events":"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit",position:"static | relative | absolute | fixed | inherit","presentation-level":1,"punctuation-trim":1,quotes:1,"rendering-intent":1,resize:1,rest:1,"rest-after":1,"rest-before":1,richness:1,right:"<margin-width> | inherit",rotation:1,"rotation-point":1,"ruby-align":1,"ruby-overhang":1,"ruby-position":1,"ruby-span":1,size:1,speak:"normal | none | spell-out | inherit","speak-header":"once | always | inherit","speak-numeral":"digits | continuous | inherit","speak-punctuation":"code | none | inherit","speech-rate":1,src:1,stress:1,"string-set":1,"table-layout":"auto | fixed | inherit","tab-size":"<integer> | <length>",target:1,"target-name":1,"target-new":1,"target-position":1,"text-align":"left | right | center | justify | inherit","text-align-last":1,"text-decoration":1,"text-emphasis":1,"text-height":1,"text-indent":"<length> | <percentage> | inherit","text-justify":"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida","text-outline":1,"text-overflow":1,"text-rendering":"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit","text-shadow":1,"text-transform":"capitalize | uppercase | lowercase | none | inherit","text-wrap":"normal | none | avoid",top:"<margin-width> | inherit",transform:1,"transform-origin":1,"transform-style":1,transition:1,"transition-delay":1,"transition-duration":1,"transition-property":1,"transition-timing-function":1,"unicode-bidi":"normal | embed | bidi-override | inherit","user-modify":"read-only | read-write | write-only | inherit","user-select":"none | text | toggle | element | elements | all | inherit","vertical-align":"<percentage> | <length> | baseline | sub | super | top | text-top | middle | bottom | text-bottom | inherit",visibility:"visible | hidden | collapse | inherit","voice-balance":1,"voice-duration":1,"voice-family":1,"voice-pitch":1,"voice-pitch-range":1,"voice-rate":1,"voice-stress":1,"voice-volume":1,volume:1,"white-space":"normal | pre | nowrap | pre-wrap | pre-line | inherit","white-space-collapse":1,widows:"<integer> | inherit",width:"<length> | <percentage> | auto | inherit","word-break":"normal | keep-all | break-all","word-spacing":"<length> | normal | inherit","word-wrap":1,"z-index":"<integer> | auto | inherit",zoom:"<number> | <percentage> | normal"};PropertyName.prototype=new SyntaxUnit,PropertyName.prototype.constructor=PropertyName,PropertyName.prototype.toString=function(){return(this.hack?this.hack:"")+this.text},PropertyValue.prototype=new SyntaxUnit,PropertyValue.prototype.constructor=PropertyValue,PropertyValueIterator.prototype.count=function(){return this._parts.length},PropertyValueIterator.prototype.isFirst=function(){return this._i===0},PropertyValueIterator.prototype.hasNext=function(){return this._i<this._parts.length},PropertyValueIterator.prototype.mark=function(){this._marks.push(this._i)},PropertyValueIterator.prototype.peek=function(e){return this.hasNext()?this._parts[this._i+(e||0)]:null},PropertyValueIterator.prototype.next=function(){return this.hasNext()?this._parts[this._i++]:null},PropertyValueIterator.prototype.previous=function(){return this._i>0?this._parts[--this._i]:null},PropertyValueIterator.prototype.restore=function(){this._marks.length&&(this._i=this._marks.pop())},PropertyValuePart.prototype=new SyntaxUnit,PropertyValuePart.prototype.constructor=PropertyValuePart,PropertyValuePart.fromToken=function(e){return new PropertyValuePart(e.value,e.startLine,e.startCol)};var Pseudos={":first-letter":1,":first-line":1,":before":1,":after":1};Pseudos.ELEMENT=1,Pseudos.CLASS=2,Pseudos.isElement=function(e){return e.indexOf("::")===0||Pseudos[e.toLowerCase()]==Pseudos.ELEMENT},Selector.prototype=new SyntaxUnit,Selector.prototype.constructor=Selector,SelectorPart.prototype=new SyntaxUnit,SelectorPart.prototype.constructor=SelectorPart,SelectorSubPart.prototype=new SyntaxUnit,SelectorSubPart.prototype.constructor=SelectorSubPart,Specificity.prototype={constructor:Specificity,compare:function(e){var t=["a","b","c","d"],n,r;for(n=0,r=t.length;n<r;n++){if(this[t[n]]<e[t[n]])return-1;if(this[t[n]]>e[t[n]])return 1}return 0},valueOf:function(){return this.a*1e3+this.b*100+this.c*10+this.d},toString:function(){return this.a+","+this.b+","+this.c+","+this.d}},Specificity.calculate=function(e){function u(e){var t,n,r,a,f=e.elementName?e.elementName.text:"",l;f&&f.charAt(f.length-1)!="*"&&o++;for(t=0,r=e.modifiers.length;t<r;t++){l=e.modifiers[t];switch(l.type){case"class":case"attribute":s++;break;case"id":i++;break;case"pseudo":Pseudos.isElement(l.text)?o++:s++;break;case"not":for(n=0,a=l.args.length;n<a;n++)u(l.args[n])}}}var t,n,r,i=0,s=0,o=0;for(t=0,n=e.parts.length;t<n;t++)r=e.parts[t],r instanceof SelectorPart&&u(r);return new Specificity(0,i,s,o)};var h=/^[0-9a-fA-F]$/,nonascii=/^[\u0080-\uFFFF]$/,nl=/\n|\r\n|\r|\f/;TokenStream.prototype=mix(new TokenStreamBase,{_getToken:function(e){var t,n=this._reader,r=null,i=n.getLine(),s=n.getCol();t=n.read();while(t){switch(t){case"/":n.peek()=="*"?r=this.commentToken(t,i,s):r=this.charToken(t,i,s);break;case"|":case"~":case"^":case"$":case"*":n.peek()=="="?r=this.comparisonToken(t,i,s):r=this.charToken(t,i,s);break;case'"':case"'":r=this.stringToken(t,i,s);break;case"#":isNameChar(n.peek())?r=this.hashToken(t,i,s):r=this.charToken(t,i,s);break;case".":isDigit(n.peek())?r=this.numberToken(t,i,s):r=this.charToken(t,i,s);break;case"-":n.peek()=="-"?r=this.htmlCommentEndToken(t,i,s):isNameStart(n.peek())?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s);break;case"!":r=this.importantToken(t,i,s);break;case"@":r=this.atRuleToken(t,i,s);break;case":":r=this.notToken(t,i,s);break;case"<":r=this.htmlCommentStartToken(t,i,s);break;case"U":case"u":if(n.peek()=="+"){r=this.unicodeRangeToken(t,i,s);break};default:isDigit(t)?r=this.numberToken(t,i,s):isWhitespace(t)?r=this.whitespaceToken(t,i,s):isIdentStart(t)?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s)}break}return!r&&t===null&&(r=this.createToken(Tokens.EOF,null,i,s)),r},createToken:function(e,t,n,r,i){var s=this._reader;return i=i||{},{value:t,type:e,channel:i.channel,hide:i.hide||!1,startLine:n,startCol:r,endLine:s.getLine(),endCol:s.getCol()}},atRuleToken:function(e,t,n){var r=e,i=this._reader,s=Tokens.CHAR,o=!1,u,a;i.mark(),u=this.readName(),r=e+u,s=Tokens.type(r.toLowerCase());if(s==Tokens.CHAR||s==Tokens.UNKNOWN)r.length>1?s=Tokens.UNKNOWN_SYM:(s=Tokens.CHAR,r=e,i.reset());return this.createToken(s,r,t,n)},charToken:function(e,t,n){var r=Tokens.type(e);return r==-1&&(r=Tokens.CHAR),this.createToken(r,e,t,n)},commentToken:function(e,t,n){var r=this._reader,i=this.readComment(e);return this.createToken(Tokens.COMMENT,i,t,n)},comparisonToken:function(e,t,n){var r=this._reader,i=e+r.read(),s=Tokens.type(i)||Tokens.CHAR;return this.createToken(s,i,t,n)},hashToken:function(e,t,n){var r=this._reader,i=this.readName(e);return this.createToken(Tokens.HASH,i,t,n)},htmlCommentStartToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(3),i=="<!--"?this.createToken(Tokens.CDO,i,t,n):(r.reset(),this.charToken(e,t,n))},htmlCommentEndToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(2),i=="-->"?this.createToken(Tokens.CDC,i,t,n):(r.reset(),this.charToken(e,t,n))},identOrFunctionToken:function(e,t,n){var r=this._reader,i=this.readName(e),s=Tokens.IDENT;return r.peek()=="("?(i+=r.read(),i.toLowerCase()=="url("?(s=Tokens.URI,i=this.readURI(i),i.toLowerCase()=="url("&&(s=Tokens.FUNCTION)):s=Tokens.FUNCTION):r.peek()==":"&&i.toLowerCase()=="progid"&&(i+=r.readTo("("),s=Tokens.IE_FUNCTION),this.createToken(s,i,t,n)},importantToken:function(e,t,n){var r=this._reader,i=e,s=Tokens.CHAR,o,u;r.mark(),u=r.read();while(u){if(u=="/"){if(r.peek()!="*")break;o=this.readComment(u);if(o==="")break}else{if(!isWhitespace(u)){if(/i/i.test(u)){o=r.readCount(8),/mportant/i.test(o)&&(i+=u+o,s=Tokens.IMPORTANT_SYM);break}break}i+=u+this.readWhitespace()}u=r.read()}return s==Tokens.CHAR?(r.reset(),this.charToken(e,t,n)):this.createToken(s,i,t,n)},notToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(4),i.toLowerCase()==":not("?this.createToken(Tokens.NOT,i,t,n):(r.reset(),this.charToken(e,t,n))},numberToken:function(e,t,n){var r=this._reader,i=this.readNumber(e),s,o=Tokens.NUMBER,u=r.peek();return isIdentStart(u)?(s=this.readName(r.read()),i+=s,/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vm$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(s)?o=Tokens.LENGTH:/^deg|^rad$|^grad$/i.test(s)?o=Tokens.ANGLE:/^ms$|^s$/i.test(s)?o=Tokens.TIME:/^hz$|^khz$/i.test(s)?o=Tokens.FREQ:/^dpi$|^dpcm$/i.test(s)?o=Tokens.RESOLUTION:o=Tokens.DIMENSION):u=="%"&&(i+=r.read(),o=Tokens.PERCENTAGE),this.createToken(o,i,t,n)},stringToken:function(e,t,n){var r=e,i=e,s=this._reader,o=e,u=Tokens.STRING,a=s.read();while(a){i+=a;if(a==r&&o!="\\")break;if(isNewLine(s.peek())&&a!="\\"){u=Tokens.INVALID;break}o=a,a=s.read()}return a===null&&(u=Tokens.INVALID),this.createToken(u,i,t,n)},unicodeRangeToken:function(e,t,n){var r=this._reader,i=e,s,o=Tokens.CHAR;return r.peek()=="+"&&(r.mark(),i+=r.read(),i+=this.readUnicodeRangePart(!0),i.length==2?r.reset():(o=Tokens.UNICODE_RANGE,i.indexOf("?")==-1&&r.peek()=="-"&&(r.mark(),s=r.read(),s+=this.readUnicodeRangePart(!1),s.length==1?r.reset():i+=s))),this.createToken(o,i,t,n)},whitespaceToken:function(e,t,n){var r=this._reader,i=e+this.readWhitespace();return this.createToken(Tokens.S,i,t,n)},readUnicodeRangePart:function(e){var t=this._reader,n="",r=t.peek();while(isHexDigit(r)&&n.length<6)t.read(),n+=r,r=t.peek();if(e)while(r=="?"&&n.length<6)t.read(),n+=r,r=t.peek();return n},readWhitespace:function(){var e=this._reader,t="",n=e.peek();while(isWhitespace(n))e.read(),t+=n,n=e.peek();return t},readNumber:function(e){var t=this._reader,n=e,r=e==".",i=t.peek();while(i){if(isDigit(i))n+=t.read();else{if(i!=".")break;if(r)break;r=!0,n+=t.read()}i=t.peek()}return n},readString:function(){var e=this._reader,t=e.read(),n=t,r=t,i=e.peek();while(i){i=e.read(),n+=i;if(i==t&&r!="\\")break;if(isNewLine(e.peek())&&i!="\\"){n="";break}r=i,i=e.peek()}return i===null&&(n=""),n},readURI:function(e){var t=this._reader,n=e,r="",i=t.peek();t.mark();while(i&&isWhitespace(i))t.read(),i=t.peek();i=="'"||i=='"'?r=this.readString():r=this.readURL(),i=t.peek();while(i&&isWhitespace(i))t.read(),i=t.peek();return r===""||i!=")"?(n=e,t.reset()):n+=r+t.read(),n},readURL:function(){var e=this._reader,t="",n=e.peek();while(/^[!#$%&\\*-~]$/.test(n))t+=e.read(),n=e.peek();return t},readName:function(e){var t=this._reader,n=e||"",r=t.peek();for(;;)if(r=="\\")n+=this.readEscape(t.read()),r=t.peek();else{if(!r||!isNameChar(r))break;n+=t.read(),r=t.peek()}return n},readEscape:function(e){var t=this._reader,n=e||"",r=0,i=t.peek();if(isHexDigit(i))do n+=t.read(),i=t.peek();while(i&&isHexDigit(i)&&++r<6);return n.length==3&&/\s/.test(i)||n.length==7||n.length==1?t.read():i="",n+i},readComment:function(e){var t=this._reader,n=e||"",r=t.read();if(r=="*"){while(r){n+=r;if(n.length>2&&r=="*"&&t.peek()=="/"){n+=t.read();break}r=t.read()}return n}return""}});var Tokens=[{name:"CDO"},{name:"CDC"},{name:"S",whitespace:!0},{name:"COMMENT",comment:!0,hide:!0,channel:"comment"},{name:"INCLUDES",text:"~="},{name:"DASHMATCH",text:"|="},{name:"PREFIXMATCH",text:"^="},{name:"SUFFIXMATCH",text:"$="},{name:"SUBSTRINGMATCH",text:"*="},{name:"STRING"},{name:"IDENT"},{name:"HASH"},{name:"IMPORT_SYM",text:"@import"},{name:"PAGE_SYM",text:"@page"},{name:"MEDIA_SYM",text:"@media"},{name:"FONT_FACE_SYM",text:"@font-face"},{name:"CHARSET_SYM",text:"@charset"},{name:"NAMESPACE_SYM",text:"@namespace"},{name:"UNKNOWN_SYM"},{name:"KEYFRAMES_SYM",text:["@keyframes","@-webkit-keyframes","@-moz-keyframes","@-o-keyframes"]},{name:"IMPORTANT_SYM"},{name:"LENGTH"},{name:"ANGLE"},{name:"TIME"},{name:"FREQ"},{name:"DIMENSION"},{name:"PERCENTAGE"},{name:"NUMBER"},{name:"URI"},{name:"FUNCTION"},{name:"UNICODE_RANGE"},{name:"INVALID"},{name:"PLUS",text:"+"},{name:"GREATER",text:">"},{name:"COMMA",text:","},{name:"TILDE",text:"~"},{name:"NOT"},{name:"TOPLEFTCORNER_SYM",text:"@top-left-corner"},{name:"TOPLEFT_SYM",text:"@top-left"},{name:"TOPCENTER_SYM",text:"@top-center"},{name:"TOPRIGHT_SYM",text:"@top-right"},{name:"TOPRIGHTCORNER_SYM",text:"@top-right-corner"},{name:"BOTTOMLEFTCORNER_SYM",text:"@bottom-left-corner"},{name:"BOTTOMLEFT_SYM",text:"@bottom-left"},{name:"BOTTOMCENTER_SYM",text:"@bottom-center"},{name:"BOTTOMRIGHT_SYM",text:"@bottom-right"},{name:"BOTTOMRIGHTCORNER_SYM",text:"@bottom-right-corner"},{name:"LEFTTOP_SYM",text:"@left-top"},{name:"LEFTMIDDLE_SYM",text:"@left-middle"},{name:"LEFTBOTTOM_SYM",text:"@left-bottom"},{name:"RIGHTTOP_SYM",text:"@right-top"},{name:"RIGHTMIDDLE_SYM",text:"@right-middle"},{name:"RIGHTBOTTOM_SYM",text:"@right-bottom"},{name:"RESOLUTION",state:"media"},{name:"IE_FUNCTION"},{name:"CHAR"},{name:"PIPE",text:"|"},{name:"SLASH",text:"/"},{name:"MINUS",text:"-"},{name:"STAR",text:"*"},{name:"LBRACE",text:"{"},{name:"RBRACE",text:"}"},{name:"LBRACKET",text:"["},{name:"RBRACKET",text:"]"},{name:"EQUALS",text:"="},{name:"COLON",text:":"},{name:"SEMICOLON",text:";"},{name:"LPAREN",text:"("},{name:"RPAREN",text:")"},{name:"DOT",text:"."}];(function(){var e=[],t={};Tokens.UNKNOWN=-1,Tokens.unshift({name:"EOF"});for(var n=0,r=Tokens.length;n<r;n++){e.push(Tokens[n].name),Tokens[Tokens[n].name]=n;if(Tokens[n].text)if(Tokens[n].text instanceof Array)for(var i=0;i<Tokens[n].text.length;i++)t[Tokens[n].text[i]]=n;else t[Tokens[n].text]=n}Tokens.name=function(t){return e[t]},Tokens.type=function(e){return t[e]||-1}})();var Validation={validate:function(e,t){var n=e.toString().toLowerCase(),r=t.parts,i=new PropertyValueIterator(t),s=Properties[n],o,u,a,f,l,c,h,p,d,v,m;if(!s){if(n.indexOf("-")!==0)throw new ValidationError("Unknown property '"+e+"'.",e.line,e.col)}else typeof s!="number"&&(typeof s=="string"?s.indexOf("||")>-1?this.groupProperty(s,i):this.singleProperty(s,i,1):s.multi?this.multiProperty(s.multi,i,s.comma,s.max||Infinity):typeof s=="function"&&s(i))},singleProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u;while(t.hasNext()&&o<n){i=ValidationTypes.isAny(t,e);if(!i)break;o++}if(!i)throw t.hasNext()&&!t.isFirst()?(u=t.peek(),new ValidationError("Expected end of value but found '"+u+"'.",u.line,u.col)):new ValidationError("Expected ("+e+") but found '"+s+"'.",s.line,s.col);if(t.hasNext())throw u=t.next(),new ValidationError("Expected end of value but found '"+u+"'.",u.line,u.col)},multiProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u=!1,a;while(t.hasNext()&&!i&&o<r){if(!ValidationTypes.isAny(t,e))break;o++;if(!t.hasNext())i=!0;else if(n){if(t.peek()!=",")break;a=t.next()}}if(!i)throw t.hasNext()&&!t.isFirst()?(a=t.peek(),new ValidationError("Expected end of value but found '"+a+"'.",a.line,a.col)):(a=t.previous(),n&&a==","?new ValidationError("Expected end of value but found '"+a+"'.",a.line,a.col):new ValidationError("Expected ("+e+") but found '"+s+"'.",s.line,s.col));if(t.hasNext())throw a=t.next(),new ValidationError("Expected end of value but found '"+a+"'.",a.line,a.col)},groupProperty:function(e,t,n){var r=!1,i=t.value,s=e.split("||").length,o={count:0},u=!1,a,f;while(t.hasNext()&&!r){a=ValidationTypes.isAnyOfGroup(t,e);if(!a)break;if(o[a])break;o[a]=1,o.count++,u=!0;if(o.count==s||!t.hasNext())r=!0}if(!r)throw u&&t.hasNext()?(f=t.peek(),new ValidationError("Expected end of value but found '"+f+"'.",f.line,f.col)):new ValidationError("Expected ("+e+") but found '"+i+"'.",i.line,i.col);if(t.hasNext())throw f=t.next(),new ValidationError("Expected end of value but found '"+f+"'.",f.line,f.col)}};ValidationError.prototype=new Error;var ValidationTypes={isLiteral:function(e,t){var n=e.text.toString().toLowerCase(),r=t.split(" | "),i,s,o=!1;for(i=0,s=r.length;i<s&&!o;i++)n==r[i].toLowerCase()&&(o=!0);return o},isSimple:function(e){return!!this.simple[e]},isComplex:function(e){return!!this.complex[e]},isAny:function(e,t){var n=t.split(" | "),r,i,s=!1;for(r=0,i=n.length;r<i&&!s&&e.hasNext();r++)s=this.isType(e,n[r]);return s},isAnyOfGroup:function(e,t){var n=t.split(" || "),r,i,s=!1;for(r=0,i=n.length;r<i&&!s;r++)s=this.isType(e,n[r]);return s?n[r-1]:!1},isType:function(e,t){var n=e.peek(),r=!1;return t.charAt(0)!="<"?(r=this.isLiteral(n,t),r&&e.next()):this.simple[t]?(r=this.simple[t](n),r&&e.next()):r=this.complex[t](e),r},simple:{"<absolute-size>":function(e){return ValidationTypes.isLiteral(e,"xx-small | x-small | small | medium | large | x-large | xx-large")},"<attachment>":function(e){return ValidationTypes.isLiteral(e,"scroll | fixed | local")},"<attr>":function(e){return e.type=="function"&&e.name=="attr"},"<bg-image>":function(e){return this["<image>"](e)||this["<gradient>"](e)||e=="none"},"<gradient>":function(e){return e.type=="function"&&/^(?:\-(?:ms|moz|o|webkit)\-)?(?:repeating\-)?(?:radial\-|linear\-)?gradient/i.test(e)},"<box>":function(e){return ValidationTypes.isLiteral(e,"padding-box | border-box | content-box")},"<content>":function(e){return e.type=="function"&&e.name=="content"},"<relative-size>":function(e){return ValidationTypes.isLiteral(e,"smaller | larger")},"<ident>":function(e){return e.type=="identifier"},"<length>":function(e){return e.type=="length"||e.type=="number"||e.type=="integer"||e=="0"},"<color>":function(e){return e.type=="color"||e=="transparent"},"<number>":function(e){return e.type=="number"||this["<integer>"](e)},"<integer>":function(e){return e.type=="integer"},"<line>":function(e){return e.type=="integer"},"<angle>":function(e){return e.type=="angle"},"<uri>":function(e){return e.type=="uri"},"<image>":function(e){return this["<uri>"](e)},"<percentage>":function(e){return e.type=="percentage"||e=="0"},"<border-width>":function(e){return this["<length>"](e)||ValidationTypes.isLiteral(e,"thin | medium | thick")},"<border-style>":function(e){return ValidationTypes.isLiteral(e,"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset")},"<margin-width>":function(e){return this["<length>"](e)||this["<percentage>"](e)||ValidationTypes.isLiteral(e,"auto")},"<padding-width>":function(e){return this["<length>"](e)||this["<percentage>"](e)},"<shape>":function(e){return e.type=="function"&&(e.name=="rect"||e.name=="inset-rect")},"<time>":function(e){return e.type=="time"}},complex:{"<bg-position>":function(e){var t=this,n=!1,r="<percentage> | <length>",i="left | center | right",s="top | center | bottom",o,u,a;return ValidationTypes.isAny(e,"top | bottom")?n=!0:ValidationTypes.isAny(e,r)?e.hasNext()&&(n=ValidationTypes.isAny(e,r+" | "+s)):ValidationTypes.isAny(e,i)&&e.hasNext()&&(ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,s)&&ValidationTypes.isAny(e,r),n=!0)),n},"<bg-size>":function(e){var t=this,n=!1,r="<percentage> | <length> | auto",i,s,o;return ValidationTypes.isAny(e,"cover | contain")?n=!0:ValidationTypes.isAny(e,r)&&(n=!0,ValidationTypes.isAny(e,r)),n},"<repeat-style>":function(e){var t=!1,n="repeat | space | round | no-repeat",r;return e.hasNext()&&(r=e.next(),ValidationTypes.isLiteral(r,"repeat-x | repeat-y")?t=!0:ValidationTypes.isLiteral(r,n)&&(t=!0,e.hasNext()&&ValidationTypes.isLiteral(e.peek(),n)&&e.next())),t},"<shadow>":function(e){var t=!1,n=0,r=!1,i=!1,s;if(e.hasNext()){ValidationTypes.isAny(e,"inset")&&(r=!0),ValidationTypes.isAny(e,"<color>")&&(i=!0);while(ValidationTypes.isAny(e,"<length>")&&n<4)n++;e.hasNext()&&(i||ValidationTypes.isAny(e,"<color>"),r||ValidationTypes.isAny(e,"inset")),t=n>=2&&n<=4}return t},"<x-one-radius>":function(e){var t=!1,n=0,r="<length> | <percentage>",i;return ValidationTypes.isAny(e,r)&&(t=!0,ValidationTypes.isAny(e,r)),t}}};parserlib.css={Colors:Colors,Combinator:Combinator,Parser:Parser,PropertyName:PropertyName,PropertyValue:PropertyValue,PropertyValuePart:PropertyValuePart,MediaFeature:MediaFeature,MediaQuery:MediaQuery,Selector:Selector,SelectorPart:SelectorPart,SelectorSubPart:SelectorSubPart,Specificity:Specificity,TokenStream:TokenStream,Tokens:Tokens,ValidationError:ValidationError}}();var CSSLint=function(){var e=[],t=[],n=new parserlib.util.EventTarget;return n.version="0.9.9",n.addRule=function(t){e.push(t),e[t.id]=t},n.clearRules=function(){e=[]},n.getRules=function(){return[].concat(e).sort(function(e,t){return e.id>t.id?1:0})},n.getRuleset=function(){var t={},n=0,r=e.length;while(n<r)t[e[n++].id]=1;return t},n.addFormatter=function(e){t[e.id]=e},n.getFormatter=function(e){return t[e]},n.format=function(e,t,n,r){var i=this.getFormatter(n),s=null;return i&&(s=i.startFormat(),s+=i.formatResults(e,t,r||{}),s+=i.endFormat()),s},n.hasFormat=function(e){return t.hasOwnProperty(e)},n.verify=function(t,n){var r=0,i=e.length,s,o,u,a=new parserlib.css.Parser({starHack:!0,ieFilters:!0,underscoreHack:!0,strict:!1});o=t.replace(/\n\r?/g,"$split$").split("$split$"),n||(n=this.getRuleset()),s=new Reporter(o,n),n.errors=2;for(r in n)n.hasOwnProperty(r)&&e[r]&&e[r].init(a,s);try{a.parse(t)}catch(f){s.error("Fatal error, cannot continue: "+f.message,f.line,f.col,{})}return u={messages:s.messages,stats:s.stats},u.messages.sort(function(e,t){return e.rollup&&!t.rollup?1:!e.rollup&&t.rollup?-1:e.line-t.line}),u},n}();Reporter.prototype={constructor:Reporter,error:function(e,t,n,r){this.messages.push({type:"error",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r||{}})},warn:function(e,t,n,r){this.report(e,t,n,r)},report:function(e,t,n,r){this.messages.push({type:this.ruleset[r.id]==2?"error":"warning",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},info:function(e,t,n,r){this.messages.push({type:"info",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},rollupError:function(e,t){this.messages.push({type:"error",rollup:!0,message:e,rule:t})},rollupWarn:function(e,t){this.messages.push({type:"warning",rollup:!0,message:e,rule:t})},stat:function(e,t){this.stats[e]=t}},CSSLint._Reporter=Reporter,CSSLint.Util={mix:function(e,t){var n;for(n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return n},indexOf:function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t){if(e.forEach)return e.forEach(t);for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)}},CSSLint.addRule({id:"adjoining-classes",name:"Disallow adjoining classes",desc:"Don't use adjoining classes.",browsers:"IE6",init:function(e,t){var n=this;e.addListener("startrule",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f];for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type==e.SELECTOR_PART_TYPE){a=0;for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type=="class"&&a++,a>1&&t.report("Don't use adjoining classes.",o.line,o.col,n)}}}})}}),CSSLint.addRule({id:"box-model",name:"Beware of broken box size",desc:"Don't use width or height when using padding or border.",browsers:"All",init:function(e,t){function u(){s={},o=!1}function a(){var e,u;if(!o){if(s.height)for(e in i)i.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!="padding"||u.parts.length!==2||u.parts[0].value!==0)&&t.report("Using height with "+e+" can sometimes make elements larger than you expect.",s[e].line,s[e].col,n));if(s.width)for(e in r)r.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!="padding"||u.parts.length!==2||u.parts[1].value!==0)&&t.report("Using width with "+e+" can sometimes make elements larger than you expect.",s[e].line,s[e].col,n))}}var n=this,r={border:1,"border-left":1,"border-right":1,padding:1,"padding-left":1,"padding-right":1},i={border:1,"border-bottom":1,"border-top":1,padding:1,"padding-bottom":1,"padding-top":1},s,o=!1;e.addListener("startrule",u),e.addListener("startfontface",u),e.addListener("startpage",u),e.addListener("startpagemargin",u),e.addListener("startkeyframerule",u),e.addListener("property",function(e){var t=e.property.text.toLowerCase();i[t]||r[t]?!/^0\S*$/.test(e.value)&&(t!="border"||e.value!="none")&&(s[t]={line:e.property.line,col:e.property.col,value:e.value}):/^(width|height)/i.test(t)&&/^(length|percentage)/.test(e.value.parts[0].type)?s[t]=1:t=="box-sizing"&&(o=!0)}),e.addListener("endrule",a),e.addListener("endfontface",a),e.addListener("endpage",a),e.addListener("endpagemargin",a),e.addListener("endkeyframerule",a)}}),CSSLint.addRule({id:"box-sizing",name:"Disallow use of box-sizing",desc:"The box-sizing properties isn't supported in IE6 and IE7.",browsers:"IE6, IE7",tags:["Compatibility"],init:function(e,t){var n=this;e.addListener("property",function(e){var r=e.property.text.toLowerCase();r=="box-sizing"&&t.report("The box-sizing property isn't supported in IE6 and IE7.",e.line,e.col,n)})}}),CSSLint.addRule({id:"compatible-vendor-prefixes",name:"Require compatible vendor prefixes",desc:"Include all compatible vendor prefixes to reach a wider range of users.",browsers:"All",init:function(e,t){var n=this,r,i,s,o,u,a,f,l=!1,c=Array.prototype.push,h=[];r={animation:"webkit moz","animation-delay":"webkit moz","animation-direction":"webkit moz","animation-duration":"webkit moz","animation-fill-mode":"webkit moz","animation-iteration-count":"webkit moz","animation-name":"webkit moz","animation-play-state":"webkit moz","animation-timing-function":"webkit moz",appearance:"webkit moz","border-end":"webkit moz","border-end-color":"webkit moz","border-end-style":"webkit moz","border-end-width":"webkit moz","border-image":"webkit moz o","border-radius":"webkit moz","border-start":"webkit moz","border-start-color":"webkit moz","border-start-style":"webkit moz","border-start-width":"webkit moz","box-align":"webkit moz ms","box-direction":"webkit moz ms","box-flex":"webkit moz ms","box-lines":"webkit ms","box-ordinal-group":"webkit moz ms","box-orient":"webkit moz ms","box-pack":"webkit moz ms","box-sizing":"webkit moz","box-shadow":"webkit moz","column-count":"webkit moz ms","column-gap":"webkit moz ms","column-rule":"webkit moz ms","column-rule-color":"webkit moz ms","column-rule-style":"webkit moz ms","column-rule-width":"webkit moz ms","column-width":"webkit moz ms",hyphens:"epub moz","line-break":"webkit ms","margin-end":"webkit moz","margin-start":"webkit moz","marquee-speed":"webkit wap","marquee-style":"webkit wap","padding-end":"webkit moz","padding-start":"webkit moz","tab-size":"moz o","text-size-adjust":"webkit ms",transform:"webkit moz ms o","transform-origin":"webkit moz ms o",transition:"webkit moz o","transition-delay":"webkit moz o","transition-duration":"webkit moz o","transition-property":"webkit moz o","transition-timing-function":"webkit moz o","user-modify":"webkit moz","user-select":"webkit moz ms","word-break":"epub ms","writing-mode":"epub ms"};for(s in r)if(r.hasOwnProperty(s)){o=[],u=r[s].split(" ");for(a=0,f=u.length;a<f;a++)o.push("-"+u[a]+"-"+s);r[s]=o,c.apply(h,o)}e.addListener("startrule",function(){i=[]}),e.addListener("startkeyframes",function(e){l=e.prefix||!0}),e.addListener("endkeyframes",function(e){l=!1}),e.addListener("property",function(e){var t=e.property;CSSLint.Util.indexOf(h,t.text)>-1&&(!l||typeof l!="string"||t.text.indexOf("-"+l+"-")!==0)&&i.push(t)}),e.addListener("endrule",function(e){if(!i.length)return;var s={},o,u,a,f,l,c,h,p,d,v;for(o=0,u=i.length;o<u;o++){a=i[o];for(f in r)r.hasOwnProperty(f)&&(l=r[f],CSSLint.Util.indexOf(l,a.text)>-1&&(s[f]||(s[f]={full:l.slice(0),actual:[],actualNodes:[]}),CSSLint.Util.indexOf(s[f].actual,a.text)===-1&&(s[f].actual.push(a.text),s[f].actualNodes.push(a))))}for(f in s)if(s.hasOwnProperty(f)){c=s[f],h=c.full,p=c.actual;if(h.length>p.length)for(o=0,u=h.length;o<u;o++)d=h[o],CSSLint.Util.indexOf(p,d)===-1&&(v=p.length===1?p[0]:p.length==2?p.join(" and "):p.join(", "),t.report("The property "+d+" is compatible with "+v+" and should be included as well.",c.actualNodes[0].line,c.actualNodes[0].col,n))}})}}),CSSLint.addRule({id:"display-property-grouping",name:"Require properties appropriate for display",desc:"Certain properties shouldn't be used with certain display property values.",browsers:"All",init:function(e,t){function s(e,s,o){i[e]&&(typeof r[e]!="string"||i[e].value.toLowerCase()!=r[e])&&t.report(o||e+" can't be used with display: "+s+".",i[e].line,i[e].col,n)}function o(){i={}}function u(){var e=i.display?i.display.value:null;if(e)switch(e){case"inline":s("height",e),s("width",e),s("margin",e),s("margin-top",e),s("margin-bottom",e),s("float",e,"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).");break;case"block":s("vertical-align",e);break;case"inline-block":s("float",e);break;default:e.indexOf("table-")===0&&(s("margin",e),s("margin-left",e),s("margin-right",e),s("margin-top",e),s("margin-bottom",e),s("float",e))}}var n=this,r={display:1,"float":"none",height:1,width:1,margin:1,"margin-left":1,"margin-right":1,"margin-bottom":1,"margin-top":1,padding:1,"padding-left":1,"padding-right":1,"padding-bottom":1,"padding-top":1,"vertical-align":1},i;e.addListener("startrule",o),e.addListener("startfontface",o),e.addListener("startkeyframerule",o),e.addListener("startpagemargin",o),e.addListener("startpage",o),e.addListener("property",function(e){var t=e.property.text.toLowerCase();r[t]&&(i[t]={value:e.value.text,line:e.property.line,col:e.property.col})}),e.addListener("endrule",u),e.addListener("endfontface",u),e.addListener("endkeyframerule",u),e.addListener("endpagemargin",u),e.addListener("endpage",u)}}),CSSLint.addRule({id:"duplicate-background-images",name:"Disallow duplicate background images",desc:"Every background-image should be unique. Use a common class for e.g. sprites.",browsers:"All",init:function(e,t){var n=this,r={};e.addListener("property",function(e){var i=e.property.text,s=e.value,o,u;if(i.match(/background/i))for(o=0,u=s.parts.length;o<u;o++)s.parts[o].type=="uri"&&(typeof r[s.parts[o].uri]=="undefined"?r[s.parts[o].uri]=e:t.report("Background image '"+s.parts[o].uri+"' was used multiple times, first declared at line "+r[s.parts[o].uri].line+", col "+r[s.parts[o].uri].col+".",e.line,e.col,n))})}}),CSSLint.addRule({id:"duplicate-properties",name:"Disallow duplicate properties",desc:"Duplicate properties must appear one after the other.",browsers:"All",init:function(e,t){function s(e){r={}}var n=this,r,i;e.addListener("startrule",s),e.addListener("startfontface",s),e.addListener("startpage",s),e.addListener("startpagemargin",s),e.addListener("startkeyframerule",s),e.addListener("property",function(e){var s=e.property,o=s.text.toLowerCase();r[o]&&(i!=o||r[o]==e.value.text)&&t.report("Duplicate property '"+e.property+"' found.",e.line,e.col,n),r[o]=e.value.text,i=o})}}),CSSLint.addRule({id:"empty-rules",name:"Disallow empty rules",desc:"Rules without any properties specified should be removed.",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("startrule",function(){r=0}),e.addListener("property",function(){r++}),e.addListener("endrule",function(e){var i=e.selectors;r===0&&t.report("Rule is empty.",i[0].line,i[0].col,n)})}}),CSSLint.addRule({id:"errors",name:"Parsing Errors",desc:"This rule looks for recoverable syntax errors.",browsers:"All",init:function(e,t){var n=this;e.addListener("error",function(e){t.error(e.message,e.line,e.col,n)})}}),CSSLint.addRule({id:"fallback-colors",name:"Require fallback colors",desc:"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.",browsers:"IE6,IE7,IE8",init:function(e,t){function o(e){s={},r=null}var n=this,r,i={color:1,background:1,"background-color":1},s;e.addListener("startrule",o),e.addListener("startfontface",o),e.addListener("startpage",o),e.addListener("startpagemargin",o),e.addListener("startkeyframerule",o),e.addListener("property",function(e){var s=e.property,o=s.text.toLowerCase(),u=e.value.parts,a=0,f="",l=u.length;if(i[o])while(a<l)u[a].type=="color"&&("alpha"in u[a]||"hue"in u[a]?(/([^\)]+)\(/.test(u[a])&&(f=RegExp.$1.toUpperCase()),(!r||r.property.text.toLowerCase()!=o||r.colorType!="compat")&&t.report("Fallback "+o+" (hex or RGB) should precede "+f+" "+o+".",e.line,e.col,n)):e.colorType="compat"),a++;r=e})}}),CSSLint.addRule({id:"floats",name:"Disallow too many floats",desc:"This rule tests if the float property is used too many times",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("property",function(e){e.property.text.toLowerCase()=="float"&&e.value.text.toLowerCase()!="none"&&r++}),e.addListener("endstylesheet",function(){t.stat("floats",r),r>=10&&t.rollupWarn("Too many floats ("+r+"), you're probably using them for layout. Consider using a grid system instead.",n)})}}),CSSLint.addRule({id:"font-faces",name:"Don't use too many web fonts",desc:"Too many different web fonts in the same stylesheet.",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("startfontface",function(){r++}),e.addListener("endstylesheet",function(){r>5&&t.rollupWarn("Too many @font-face declarations ("+r+").",n)})}}),CSSLint.addRule({id:"font-sizes",name:"Disallow too many font sizes",desc:"Checks the number of font-size declarations.",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("property",function(e){e.property=="font-size"&&r++}),e.addListener("endstylesheet",function(){t.stat("font-sizes",r),r>=10&&t.rollupWarn("Too many font-size declarations ("+r+"), abstraction needed.",n)})}}),CSSLint.addRule({id:"gradients",name:"Require all gradient definitions",desc:"When using a vendor-prefixed gradient, make sure to use them all.",browsers:"All",init:function(e,t){var n=this,r;e.addListener("startrule",function(){r={moz:0,webkit:0,oldWebkit:0,ms:0,o:0}}),e.addListener("property",function(e){/\-(moz|ms|o|webkit)(?:\-(?:linear|radial))\-gradient/i.test(e.value)?r[RegExp.$1]=1:/\-webkit\-gradient/i.test(e.value)&&(r.oldWebkit=1)}),e.addListener("endrule",function(e){var i=[];r.moz||i.push("Firefox 3.6+"),r.webkit||i.push("Webkit (Safari 5+, Chrome)"),r.oldWebkit||i.push("Old Webkit (Safari 4+, Chrome)"),r.ms||i.push("Internet Explorer 10+"),r.o||i.push("Opera 11.1+"),i.length&&i.length<5&&t.report("Missing vendor-prefixed CSS gradients for "+i.join(", ")+".",e.selectors[0].line,e.selectors[0].col,n)})}}),CSSLint.addRule({id:"ids",name:"Disallow IDs in selectors",desc:"Selectors should not contain IDs.",browsers:"All",init:function(e,t){var n=this;e.addListener("startrule",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f],a=0;for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type==e.SELECTOR_PART_TYPE)for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type=="id"&&a++}a==1?t.report("Don't use IDs in selectors.",s.line,s.col,n):a>1&&t.report(a+" IDs in the selector, really?",s.line,s.col,n)}})}}),CSSLint.addRule({id:"import",name:"Disallow @import",desc:"Don't use @import, use <link> instead.",browsers:"All",init:function(e,t){var n=this;e.addListener("import",function(e){t.report("@import prevents parallel downloads, use <link> instead.",e.line,e.col,n)})}}),CSSLint.addRule({id:"important",name:"Disallow !important",desc:"Be careful when using !important declaration",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("property",function(e){e.important===!0&&(r++,t.report("Use of !important",e.line,e.col,n))}),e.addListener("endstylesheet",function(){t.stat("important",r),r>=10&&t.rollupWarn("Too many !important declarations ("+r+"), try to use less than 10 to avoid specificity issues.",n)})}}),CSSLint.addRule({id:"known-properties",name:"Require use of known properties",desc:"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.",browsers:"All",init:function(e,t){var n=this;e.addListener("property",function(e){var r=e.property.text.toLowerCase();e.invalid&&t.report(e.invalid.message,e.line,e.col,n)})}}),CSSLint.addRule({id:"outline-none",name:"Disallow outline: none",desc:"Use of outline: none or outline: 0 should be limited to :focus rules.",browsers:"All",tags:["Accessibility"],init:function(e,t){function i(e){e.selectors?r={line:e.line,col:e.col,selectors:e.selectors,propCount:0,outline:!1}:r=null}function s(e){r&&r.outline&&(r.selectors.toString().toLowerCase().indexOf(":focus")==-1?t.report("Outlines should only be modified using :focus.",r.line,r.col,n):r.propCount==1&&t.report("Outlines shouldn't be hidden unless other visual changes are made.",r.line,r.col,n))}var n=this,r;e.addListener("startrule",i),e.addListener("startfontface",i),e.addListener("startpage",i),e.addListener("startpagemargin",i),e.addListener("startkeyframerule",i),e.addListener("property",function(e){var t=e.property.text.toLowerCase(),n=e.value;r&&(r.propCount++,t=="outline"&&(n=="none"||n=="0")&&(r.outline=!0))}),e.addListener("endrule",s),e.addListener("endfontface",s),e.addListener("endpage",s),e.addListener("endpagemargin",s),e.addListener("endkeyframerule",s)}}),CSSLint.addRule({id:"overqualified-elements",name:"Disallow overqualified elements",desc:"Don't use classes or IDs with elements (a.foo or a#foo).",browsers:"All",init:function(e,t){var n=this,r={};e.addListener("startrule",function(i){var s=i.selectors,o,u,a,f,l,c;for(f=0;f<s.length;f++){o=s[f];for(l=0;l<o.parts.length;l++){u=o.parts[l];if(u.type==e.SELECTOR_PART_TYPE)for(c=0;c<u.modifiers.length;c++)a=u.modifiers[c],u.elementName&&a.type=="id"?t.report("Element ("+u+") is overqualified, just use "+a+" without element name.",u.line,u.col,n):a.type=="class"&&(r[a]||(r[a]=[]),r[a].push({modifier:a,part:u}))}}}),e.addListener("endstylesheet",function(){var e;for(e in r)r.hasOwnProperty(e)&&r[e].length==1&&r[e][0].part.elementName&&t.report("Element ("+r[e][0].part+") is overqualified, just use "+r[e][0].modifier+" without element name.",r[e][0].part.line,r[e][0].part.col,n)})}}),CSSLint.addRule({id:"qualified-headings",name:"Disallow qualified headings",desc:"Headings should not be qualified (namespaced).",browsers:"All",init:function(e,t){var n=this;e.addListener("startrule",function(r){var i=r.selectors,s,o,u,a;for(u=0;u<i.length;u++){s=i[u];for(a=0;a<s.parts.length;a++)o=s.parts[a],o.type==e.SELECTOR_PART_TYPE&&o.elementName&&/h[1-6]/.test(o.elementName.toString())&&a>0&&t.report("Heading ("+o.elementName+") should not be qualified.",o.line,o.col,n)}})}}),CSSLint.addRule({id:"regex-selectors",name:"Disallow selectors that look like regexs",desc:"Selectors that look like regular expressions are slow and should be avoided.",browsers:"All",init:function(e,t){var n=this;e.addListener("startrule",function(r){var i=r.selectors,s,o,u,a,f,l;for(a=0;a<i.length;a++){s=i[a];for(f=0;f<s.parts.length;f++){o=s.parts[f];if(o.type==e.SELECTOR_PART_TYPE)for(l=0;l<o.modifiers.length;l++)u=o.modifiers[l],u.type=="attribute"&&/([\~\|\^\$\*]=)/.test(u)&&t.report("Attribute selectors with "+RegExp.$1+" are slow!",u.line,u.col,n)}}})}}),CSSLint.addRule({id:"rules-count",name:"Rules Count",desc:"Track how many rules there are.",browsers:"All",init:function(e,t){var n=this,r=0;e.addListener("startrule",function(){r++}),e.addListener("endstylesheet",function(){t.stat("rule-count",r)})}}),CSSLint.addRule({id:"shorthand",name:"Require shorthand properties",desc:"Use shorthand properties where possible.",browsers:"All",init:function(e,t){function f(e){u={}}function l(e){var r,i,s,o;for(r in a)if(a.hasOwnProperty(r)){o=0;for(i=0,s=a[r].length;i<s;i++)o+=u[a[r][i]]?1:0;o==a[r].length&&t.report("The properties "+a[r].join(", ")+" can be replaced by "+r+".",e.line,e.col,n)}}var n=this,r,i,s,o={},u,a={margin:["margin-top","margin-bottom","margin-left","margin-right"],padding:["padding-top","padding-bottom","padding-left","padding-right"]};for(r in a)if(a.hasOwnProperty(r))for(i=0,s=a[r].length;i<s;i++)o[a[r][i]]=r;e.addListener("startrule",f),e.addListener("startfontface",f),e.addListener("property",function(e){var t=e.property.toString().toLowerCase(),n=e.value.parts[0].value;o[t]&&(u[t]=1)}),e.addListener("endrule",l),e.addListener("endfontface",l)}}),CSSLint.addRule({id:"star-property-hack",name:"Disallow properties with a star prefix",desc:"Checks for the star property hack (targets IE6/7)",browsers:"All",init:function(e,t){var n=this;e.addListener("property",function(e){var r=e.property;r.hack=="*"&&t.report("Property with star prefix found.",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:"text-indent",name:"Disallow negative text-indent",desc:"Checks for text indent less than -99px",browsers:"All",init:function(e,t){function s(e){r=!1,i="inherit"}function o(e){r&&i!="ltr"&&t.report("Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.",r.line,r.col,n)}var n=this,r,i;e.addListener("startrule",s),e.addListener("startfontface",s),e.addListener("property",function(e){var t=e.property.toString().toLowerCase(),n=e.value;t=="text-indent"&&n.parts[0].value<-99?r=e.property:t=="direction"&&n=="ltr"&&(i="ltr")}),e.addListener("endrule",o),e.addListener("endfontface",o)}}),CSSLint.addRule({id:"underscore-property-hack",name:"Disallow properties with an underscore prefix",desc:"Checks for the underscore property hack (targets IE6)",browsers:"All",init:function(e,t){var n=this;e.addListener("property",function(e){var r=e.property;r.hack=="_"&&t.report("Property with underscore prefix found.",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:"unique-headings",name:"Headings should only be defined once",desc:"Headings should be defined only once.",browsers:"All",init:function(e,t){var n=this,r={h1:0,h2:0,h3:0,h4:0,h5:0,h6:0};e.addListener("startrule",function(e){var i=e.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.elementName&&/(h[1-6])/i.test(o.elementName.toString())){for(f=0;f<o.modifiers.length;f++)if(o.modifiers[f].type=="pseudo"){u=!0;break}u||(r[RegExp.$1]++,r[RegExp.$1]>1&&t.report("Heading ("+o.elementName+") has already been defined.",o.line,o.col,n))}}}),e.addListener("endstylesheet",function(e){var i,s=[];for(i in r)r.hasOwnProperty(i)&&r[i]>1&&s.push(r[i]+" "+i+"s");s.length&&t.rollupWarn("You have "+s.join(", ")+" defined in this stylesheet.",n)})}}),CSSLint.addRule({id:"universal-selector",name:"Disallow universal selector",desc:"The universal selector (*) is known to be slow.",browsers:"All",init:function(e,t){var n=this;e.addListener("startrule",function(e){var r=e.selectors,i,s,o,u,a,f;for(u=0;u<r.length;u++)i=r[u],s=i.parts[i.parts.length-1],s.elementName=="*"&&t.report(n.desc,s.line,s.col,n)})}}),CSSLint.addRule({id:"unqualified-attributes",name:"Disallow unqualified attribute selectors",desc:"Unqualified attribute selectors are known to be slow.",browsers:"All",init:function(e,t){var n=this;e.addListener("startrule",function(r){var i=r.selectors,s,o,u,a,f,l;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.type==e.SELECTOR_PART_TYPE)for(l=0;l<o.modifiers.length;l++)u=o.modifiers[l],u.type=="attribute"&&(!o.elementName||o.elementName=="*")&&t.report(n.desc,o.line,o.col,n)}})}}),CSSLint.addRule({id:"vendor-prefix",name:"Require standard property with vendor prefix",desc:"When using a vendor-prefixed property, make sure to include the standard one.",browsers:"All",init:function(e,t){function o(){r={},i=1}function u(e){var i,o,u,a,f,l,c=[];for(i in r)s[i]&&c.push({actual:i,needed:s[i]});for(o=0,u=c.length;o<u;o++)f=c[o].needed,l=c[o].actual,r[f]?r[f][0].pos<r[l][0].pos&&t.report("Standard property '"+f+"' should come after vendor-prefixed property '"+l+"'.",r[l][0].name.line,r[l][0].name.col,n):t.report("Missing standard property '"+f+"' to go along with '"+l+"'.",r[l][0].name.line,r[l][0].name.col,n)}var n=this,r,i,s={"-webkit-border-radius":"border-radius","-webkit-border-top-left-radius":"border-top-left-radius","-webkit-border-top-right-radius":"border-top-right-radius","-webkit-border-bottom-left-radius":"border-bottom-left-radius","-webkit-border-bottom-right-radius":"border-bottom-right-radius","-o-border-radius":"border-radius","-o-border-top-left-radius":"border-top-left-radius","-o-border-top-right-radius":"border-top-right-radius","-o-border-bottom-left-radius":"border-bottom-left-radius","-o-border-bottom-right-radius":"border-bottom-right-radius","-moz-border-radius":"border-radius","-moz-border-radius-topleft":"border-top-left-radius","-moz-border-radius-topright":"border-top-right-radius","-moz-border-radius-bottomleft":"border-bottom-left-radius","-moz-border-radius-bottomright":"border-bottom-right-radius","-moz-column-count":"column-count","-webkit-column-count":"column-count","-moz-column-gap":"column-gap","-webkit-column-gap":"column-gap","-moz-column-rule":"column-rule","-webkit-column-rule":"column-rule","-moz-column-rule-style":"column-rule-style","-webkit-column-rule-style":"column-rule-style","-moz-column-rule-color":"column-rule-color","-webkit-column-rule-color":"column-rule-color","-moz-column-rule-width":"column-rule-width","-webkit-column-rule-width":"column-rule-width","-moz-column-width":"column-width","-webkit-column-width":"column-width","-webkit-column-span":"column-span","-webkit-columns":"columns","-moz-box-shadow":"box-shadow","-webkit-box-shadow":"box-shadow","-moz-transform":"transform","-webkit-transform":"transform","-o-transform":"transform","-ms-transform":"transform","-moz-transform-origin":"transform-origin","-webkit-transform-origin":"transform-origin","-o-transform-origin":"transform-origin","-ms-transform-origin":"transform-origin","-moz-box-sizing":"box-sizing","-webkit-box-sizing":"box-sizing","-moz-user-select":"user-select","-khtml-user-select":"user-select","-webkit-user-select":"user-select"};e.addListener("startrule",o),e.addListener("startfontface",o),e.addListener("startpage",o),e.addListener("startpagemargin",o),e.addListener("startkeyframerule",o),e.addListener("property",function(e){var t=e.property.text.toLowerCase();r[t]||(r[t]=[]),r[t].push({name:e.property,value:e.value,pos:i++})}),e.addListener("endrule",u),e.addListener("endfontface",u),e.addListener("endpage",u),e.addListener("endpagemargin",u),e.addListener("endkeyframerule",u)}}),CSSLint.addRule({id:"zero-units",name:"Disallow units for 0 values",desc:"You don't need to specify units when a value is 0.",browsers:"All",init:function(e,t){var n=this;e.addListener("property",function(e){var r=e.value.parts,i=0,s=r.length;while(i<s)(r[i].units||r[i].type=="percentage")&&r[i].value===0&&r[i].type!="time"&&t.report("Values of 0 shouldn't have units specified.",r[i].line,r[i].col,n),i++})}}),exports.CSSLint=CSSLint}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/worker-javascript.js b/ehcp/net2ftp/plugins/ace/worker-javascript.js new file mode 100644 index 0000000..4fd9f1b --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/worker-javascript.js @@ -0,0 +1 @@ +"no use strict";function initBaseUrls(e){require.tlns=e}function initSender(){var e=require(null,"ace/lib/event_emitter").EventEmitter,t=require(null,"ace/lib/oop"),n=function(){};return function(){t.implement(this,e),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(n.prototype),new n}if(typeof window!="undefined"&&window.document)throw"atempt to load ace worker into main window instead of webWorker";var console={log:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},error:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})}},window={console:console},normalizeModule=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return normalizeModule(e,n[0])+"!"+normalizeModule(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/"),t=r+"/"+t;while(t.indexOf(".")!==-1&&i!=t)var i=t,t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},require=function(e,t){if(!t.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");var t=normalizeModule(e,t),n=require.modules[t];if(n)return n.initialized||(n.initialized=!0,n.exports=n.factory().exports),n.exports;var r=t.split("/");r[0]=require.tlns[r[0]]||r[0];var i=r.join("/")+".js";return require.id=t,importScripts(i),require(e,t)};require.modules={},require.tlns={};var define=function(e,t,n){arguments.length==2?(n=t,typeof e!="string"&&(t=e,e=require.id)):arguments.length==1&&(n=e,e=require.id);if(e.indexOf("text!")===0)return;var r=function(t,n){return require(e,t,n)};require.modules[e]={factory:function(){var e={exports:{}},t=n(r,e.exports,e);return t&&(e.exports=t),e}}},main,sender;onmessage=function(e){var t=e.data;if(t.command){if(!main[t.command])throw new Error("Unknown command:"+t.command);main[t.command].apply(main,t.args)}else if(t.init){initBaseUrls(t.tlns),require(null,"ace/lib/fixoldbrowsers"),sender=initSender();var n=require(null,t.module)[t.classname];main=new n(sender)}else t.event&&sender&&sender._emit(t.event,t.data)},define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(require,exports,module){function startRegex(e){return RegExp("^("+e.join("|")+")")}var oop=require("../lib/oop"),Mirror=require("../worker/mirror").Mirror,lint=require("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable '(.+)'.",'Missing "use strict"']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\{a\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\['{a}'\\] is better written in dot notation.","'{a}' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{es5:!0,esnext:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\n/,"\n");if(!e){this.sender.emit("jslint",[]);return}var t=[],n=this.isValidJS(e)?"warning":"error";lint(e,this.options);var r=lint.errors,i=!1;for(var s=0;s<r.length;s++){var o=r[s];if(!o)continue;var u=o.raw,a="warning";if(u=="Missing semicolon."){var f=o.evidence.substr(o.character);f=f.charAt(f.search(/\S/)),n=="error"&&f&&/[\w\d{(['"]/.test(f)?(o.reason='Missing ";" before statement',a="error"):a="info"}else{if(disabledWarningsRe.test(u))continue;infoRe.test(u)?a="info":errorsRe.test(u)?(i=!0,a=n):u=="'{a}' is not defined."?a="warning":u=="'{a}' is defined but never used."&&(a="info")}t.push({row:o.line-1,column:o.character-1,text:o.reason,type:a,raw:u}),i}this.sender.emit("jslint",t)}}.call(JavaScriptWorker.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.deferredCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas([e.data]),n.schedule(s.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/mode/javascript/jshint",["require","exports","module"],function(e,t,n){var r=function(){function ot(){}function ut(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function at(e,t){i[e]===undefined&&n[e]===undefined&&bt("Bad option: '"+e+"'.",t)}function ft(e){return Object.prototype.toString.call(e)==="[object String]"}function lt(e){return e>="a"&&e<="z￿"||e>="A"&&e<="Z￿"}function ct(e){return e>="0"&&e<="9"}function ht(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function pt(e,t){return e.replace(/\{([^{}]*)\}/g,function(e,n){var r=t[n];return typeof r=="string"||typeof r=="number"?r:e})}function dt(e,t){var n;for(n in t)ut(t,n)&&!ut(r.blacklist,n)&&(e[n]=t[n])}function vt(){Object.keys(r.blacklist).forEach(function(e){delete O[e]})}function mt(){A.couch&&dt(O,a),A.rhino&&dt(O,H),A.prototypejs&&dt(O,D),A.node&&(dt(O,k),A.globalstrict=!0),A.devel&&dt(O,l),A.dojo&&dt(O,c),A.browser&&dt(O,u),A.nonstandard&&dt(O,I),A.jquery&&dt(O,w),A.mootools&&dt(O,N),A.worker&&dt(O,J),A.wsh&&dt(O,K),A.esnext&&V(),A.globalstrict&&A.strict!==!1&&(A.strict=!0),A.yui&&dt(O,Q)}function gt(e,t,n){var r=Math.floor(t/E.length*100);throw{name:"JSHintError",line:t,character:n,message:e+" ("+r+"% scanned).",raw:e}}function yt(e,t,n,i){return r.undefs.push([e,t,n,i])}function bt(e,t,n,i,s,o){var u,a,f;return t=t||C,t.id==="(end)"&&(t=z),a=t.line||0,u=t.from||0,f={id:"(error)",raw:e,evidence:E[a-1]||"",line:a,character:u,scope:r.scope,a:n,b:i,c:s,d:o},f.reason=pt(e,f),r.errors.push(f),A.passfail&>("Stopping. ",a,u),$+=1,$>=A.maxerr&>("Too many errors.",a,u),f}function wt(e,t,n,r,i,s,o){return bt(e,{line:t,from:n},r,i,s,o)}function Et(e,t,n,r,i,s){bt(e,t,n,r,i,s)}function St(e,t,n,r,i,s,o){return Et(e,{line:t,from:n},r,i,s,o)}function xt(e,t){var n;return n={id:"(internal)",elem:e,value:t},r.internals.push(n),n}function Nt(e,t,n){e==="hasOwnProperty"&&bt("'hasOwnProperty' is a really bad name."),t==="exception"&&ut(h["(context)"],e)&&h[e]!==!0&&!A.node&&bt("Value of '{a}' may be overwritten in IE.",C,e),ut(h,e)&&!h["(global)"]&&(h[e]===!0?A.latedef&&bt("'{a}' was used before it was defined.",C,e):!A.shadow&&t!=="exception"&&bt("'{a}' is already defined.",C,e)),h[e]=t,n&&(h["(tokens)"][e]=n),h["(global)"]?(v[e]=h,ut(m,e)&&(A.latedef&&bt("'{a}' was used before it was defined.",C,e),delete m[e])):B[e]=h}function Ct(){var e=C,t=e.value,i=A.quotmark,u={},a,l,c,p,d,v,m;switch(t){case"*/":Et("Unbegun comment.");break;case"/*members":case"/*member":t="/*members",T||(T={}),l=T,A.quotmark=!1;break;case"/*jshint":case"/*jslint":l=A,c=n;break;case"/*global":l=u;break;default:Et("What?")}p=Tt.token();e:for(;;){m=!1;for(;;){if(p.type==="special"&&p.value==="*/")break e;if(p.id!=="(endline)"&&p.id!==",")break;p=Tt.token()}t==="/*global"&&p.value==="-"&&(m=!0,p=Tt.token()),p.type!=="(string)"&&p.type!=="(identifier)"&&t!=="/*members"&&Et("Bad option.",p),v=Tt.token();if(v.id===":"){v=Tt.token(),l===T&&Et("Expected '{a}' and instead saw '{b}'.",p,"*/",":"),t==="/*jshint"&&at(p.value,p);var g=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];if(g.indexOf(p.value)>-1&&(t==="/*jshint"||t==="/*jslint"))a=+v.value,(typeof a!="number"||!isFinite(a)||a<=0||Math.floor(a)!==a)&&Et("Expected a small integer and instead saw '{a}'.",v,v.value),p.value==="indent"&&(l.white=!0),l[p.value]=a;else if(p.value==="validthis")h["(global)"]?Et("Option 'validthis' can't be used in a global scope."):v.value==="true"||v.value==="false"?l[p.value]=v.value==="true":Et("Bad option value.",v);else if(p.value==="quotmark"&&t==="/*jshint")switch(v.value){case"true":l.quotmark=!0;break;case"false":l.quotmark=!1;break;case"double":case"single":l.quotmark=v.value;break;default:Et("Bad option value.",v)}else v.value==="true"||v.value==="false"?(t==="/*jslint"?(d=o[p.value]||p.value,l[d]=v.value==="true",s[d]!==undefined&&(l[d]=!l[d])):l[p.value]=v.value==="true",p.value==="newcap"&&(l["(explicitNewcap)"]=!0)):Et("Bad option value.",v);p=Tt.token()}else(t==="/*jshint"||t==="/*jslint")&&Et("Missing option value.",p),l[p.value]=!1,t==="/*global"&&m===!0&&(r.blacklist[p.value]=p.value,vt()),p=v}t==="/*members"&&(A.quotmark=i),dt(O,u);for(var y in u)ut(u,y)&&(f[y]=e);c&&mt()}function kt(e){var t=e||0,n=0,r;while(n<=t)r=S[n],r||(r=S[n]=Tt.token()),n+=1;return r}function Lt(t,n){switch(z.id){case"(number)":C.id==="."&&bt("A dot following a number can be confused with a decimal point.",z);break;case"-":(C.id==="-"||C.id==="--")&&bt("Confusing minusses.");break;case"+":(C.id==="+"||C.id==="++")&&bt("Confusing plusses.")}if(z.type==="(string)"||z.identifier)e=z.value;t&&C.id!==t&&(n?C.id==="(end)"?bt("Unmatched '{a}'.",n,n.id):bt("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",C,t,n.id,n.line,C.value):(C.type!=="(identifier)"||C.value!==t)&&bt("Expected '{a}' and instead saw '{b}'.",C,t,C.value)),_=z,z=C;for(;;){C=S.shift()||Tt.token();if(C.id==="(end)"||C.id==="(error)")return;if(C.type==="special")Ct();else if(C.id!=="(endline)")break}}function At(t,n){var r,i=!1,s=!1;C.id==="(end)"&&Et("Unexpected early end of program.",z),Lt(),n&&(e="anonymous",h["(verb)"]=z.value);if(n===!0&&z.fud)r=z.fud();else{if(z.nud)r=z.nud();else{if(C.type==="(number)"&&z.id===".")return bt("A leading decimal point can be confused with a dot: '.{a}'.",z,C.value),Lt(),z;Et("Expected an identifier and instead saw '{a}'.",z,z.id)}while(t<C.lbp)i=z.value==="Array",s=z.value==="Object",r&&(r.value||r.first&&r.first.value)&&(r.value!=="new"||r.first&&r.first.value&&r.first.value===".")&&(i=!1,r.value!==z.value&&(s=!1)),Lt(),i&&z.id==="("&&C.id===")"&&bt("Use the array literal notation [].",z),s&&z.id==="("&&C.id===")"&&bt("Use the object literal notation {}.",z),z.led?r=z.led(r):Et("Expected an operator and instead saw '{a}'.",z,z.id)}return r}function Ot(e,t){e=e||z,t=t||C,A.white&&e.character!==t.from&&e.line===t.line&&(e.from+=e.character-e.from,bt("Unexpected space after '{a}'.",e,e.value))}function Mt(e,t){e=e||z,t=t||C,A.white&&(e.character!==t.from||e.line!==t.line)&&bt("Unexpected space before '{a}'.",t,t.value)}function _t(e,t){e=e||z,t=t||C,A.white&&!e.comment&&e.line===t.line&&Ot(e,t)}function Dt(e,t){if(A.white){e=e||z,t=t||C;if(e.value===";"&&t.value===";")return;e.line===t.line&&e.character===t.from&&(e.from+=e.character-e.from,bt("Missing space after '{a}'.",e,e.value))}}function Pt(e,t){e=e||z,t=t||C,!A.laxbreak&&e.line!==t.line?bt("Bad line breaking before '{a}'.",t,t.id):A.white&&(e=e||z,t=t||C,e.character===t.from&&(e.from+=e.character-e.from,bt("Missing space after '{a}'.",e,e.value)))}function Ht(e){var t;A.white&&C.id!=="(end)"&&(t=y+(e||0),C.from!==t&&bt("Expected '{a}' to have an indentation at {b} instead at {c}.",C,C.value,t,C.from))}function Bt(e){e=e||z,e.line!==C.line&&bt("Line breaking error '{a}'.",e,e.value)}function jt(){z.line!==C.line?A.laxcomma||(jt.first&&(bt("Comma warnings can be turned off with 'laxcomma'"),jt.first=!1),bt("Bad line breaking before '{a}'.",z,C.id)):!z.comment&&z.character!==C.from&&A.white&&(z.from+=z.character-z.from,bt("Unexpected space after '{a}'.",z,z.value)),Lt(","),Dt(z,C)}function Ft(e,t){var n=R[e];if(!n||typeof n!="object")R[e]=n={id:e,lbp:t,value:e};return n}function It(e){return Ft(e,0)}function qt(e,t){var n=It(e);return n.identifier=n.reserved=!0,n.fud=t,n}function Rt(e,t){var n=qt(e,t);return n.block=!0,n}function Ut(e){var t=e.id.charAt(0);if(t>="a"&&t<="z"||t>="A"&&t<="Z")e.identifier=e.reserved=!0;return e}function zt(e,t){var n=Ft(e,150);return Ut(n),n.nud=typeof t=="function"?t:function(){this.right=At(150),this.arity="unary";if(this.id==="++"||this.id==="--")A.plusplus?bt("Unexpected use of '{a}'.",this,this.id):(!this.right.identifier||this.right.reserved)&&this.right.id!=="."&&this.right.id!=="["&&bt("Bad operand.",this);return this},n}function Wt(e,t){var n=It(e);return n.type=e,n.nud=t,n}function Xt(e,t){var n=Wt(e,t);return n.identifier=n.reserved=!0,n}function Vt(e,t){return Xt(e,function(){return typeof t=="function"&&t(this),this})}function $t(e,t,n,r){var i=Ft(e,n);return Ut(i),i.led=function(i){return r||(Pt(_,z),Dt(z,C)),e==="in"&&i.id==="!"&&bt("Confusing use of '{a}'.",i,"!"),typeof t=="function"?t(i,this):(this.left=i,this.right=At(n),this)},i}function Jt(e,t){var n=Ft(e,100);return n.led=function(e){Pt(_,z),Dt(z,C);var n=At(100);return ht(e,"NaN")||ht(n,"NaN")?bt("Use the isNaN function to compare with NaN.",this):t&&t.apply(this,[e,n]),e.id==="!"&&bt("Confusing use of '{a}'.",e,"!"),n.id==="!"&&bt("Confusing use of '{a}'.",n,"!"),this.left=e,this.right=n,this},n}function Kt(e){return e&&(e.type==="(number)"&&+e.value===0||e.type==="(string)"&&e.value===""||e.type==="null"&&!A.eqnull||e.type==="true"||e.type==="false"||e.type==="undefined")}function Qt(e){return Ft(e,20).exps=!0,$t(e,function(e,t){t.left=e,O[e.value]===!1&&B[e.value]["(global)"]===!0?bt("Read only.",e):e["function"]&&bt("'{a}' is a function.",e,e.value);if(e){A.esnext&&h[e.value]==="const"&&bt("Attempting to override '{a}' which is a constant",e,e.value);if(e.id==="."||e.id==="[")return(!e.left||e.left.value==="arguments")&&bt("Bad assignment.",t),t.right=At(19),t;if(e.identifier&&!e.reserved)return h[e.value]==="exception"&&bt("Do not assign to the exception parameter.",e),t.right=At(19),t;e===R["function"]&&bt("Expected an identifier in an assignment and instead saw a function invocation.",z)}Et("Bad assignment.",t)},20)}function Gt(e,t,n){var r=Ft(e,n);return Ut(r),r.led=typeof t=="function"?t:function(e){return A.bitwise&&bt("Unexpected use of '{a}'.",this,this.id),this.left=e,this.right=At(n),this},r}function Yt(e){return Ft(e,20).exps=!0,$t(e,function(e,t){A.bitwise&&bt("Unexpected use of '{a}'.",t,t.id),Dt(_,z),Dt(z,C);if(e)return e.id==="."||e.id==="["||e.identifier&&!e.reserved?(At(19),t):(e===R["function"]&&bt("Expected an identifier in an assignment, and instead saw a function invocation.",z),t);Et("Bad assignment.",t)},20)}function Zt(e){var t=Ft(e,150);return t.led=function(e){return A.plusplus?bt("Unexpected use of '{a}'.",this,this.id):(!e.identifier||e.reserved)&&e.id!=="."&&e.id!=="["&&bt("Bad operand.",this),this.left=e,this},t}function en(e){if(C.identifier)return Lt(),z.reserved&&!A.es5&&(!e||z.value!=="undefined")&&bt("Expected an identifier and instead saw '{a}' (a reserved word).",z,z.id),z.value}function tn(e){var t=en(e);if(t)return t;z.id==="function"&&C.id==="("?bt("Missing name in function declaration."):Et("Expected an identifier and instead saw '{a}'.",C,C.value)}function nn(e){var t=0,n;if(C.id!==";"||L)return;for(;;){n=kt(t);if(n.reach)return;if(n.id!=="(endline)"){if(n.id==="function"){if(!A.latedef)break;bt("Inner functions should be listed at the top of the outer function.",n);break}bt("Unreachable '{a}' after '{b}'.",n,n.value,e);break}t+=1}}function rn(e){var t=y,n,r=B,i=C;if(i.id===";"){Lt(";");return}i.identifier&&!i.reserved&&kt().id===":"&&(Lt(),Lt(":"),B=Object.create(r),Nt(i.value,"label"),!C.labelled&&C.value!=="{"&&bt("Label '{a}' on {b} statement.",C,i.value,C.value),it.test(i.value+":")&&bt("Label '{a}' looks like a javascript url.",i,i.value),C.label=i.value,i=C);if(i.id==="{"){un(!0,!0);return}e||Ht(),n=At(0,!0);if(!i.block){!A.expr&&(!n||!n.exps)?bt("Expected an assignment or function call and instead saw an expression.",z):A.nonew&&n.id==="("&&n.left.id==="new"&&bt("Do not use 'new' for side effects.",i);if(C.id===",")return jt();C.id!==";"?A.asi||(!A.lastsemic||C.id!=="}"||C.line!==z.line)&&wt("Missing semicolon.",z.line,z.character):(Ot(z,C),Lt(";"),Dt(z,C))}return y=t,B=r,n}function sn(e){var t=[],n;while(!C.reach&&C.id!=="(end)")C.id===";"?(n=kt(),(!n||n.id!=="(")&&bt("Unnecessary semicolon."),Lt(";")):t.push(rn(e===C.line));return t}function on(){var e,t,n;for(;;){if(C.id==="(string)"){t=kt(0);if(t.id==="(endline)"){e=1;do n=kt(e),e+=1;while(n.id==="(endline)");if(n.id!==";"){if(n.id!=="(string)"&&n.id!=="(number)"&&n.id!=="(regexp)"&&n.identifier!==!0&&n.id!=="}")break;bt("Missing semicolon.",C)}else t=n}else if(t.id==="}")bt("Missing semicolon.",t);else if(t.id!==";")break;Ht(),Lt(),q[z.value]&&bt('Unnecessary directive "{a}".',z,z.value),z.value==="use strict"&&(A["(explicitNewcap)"]||(A.newcap=!0),A.undef=!0),q[z.value]=!0,t.id===";"&&Lt(";");continue}break}}function un(e,t,n){var r,i=g,s=y,o,u=B,a,f,l;g=e;if(!e||!A.funcscope)B=Object.create(B);Dt(z,C),a=C;var c=h["(metrics)"];c.nestedBlockDepth+=1,c.verifyMaxNestedBlockDepthPerFunction();if(C.id==="{"){Lt("{"),f=z.line;if(C.id!=="}"){y+=A.indent;while(!e&&C.from>y)y+=A.indent;if(n){o={};for(l in q)ut(q,l)&&(o[l]=q[l]);on(),A.strict&&h["(context)"]["(global)"]&&!o["use strict"]&&!q["use strict"]&&bt('Missing "use strict" statement.')}r=sn(f),c.statementCount+=r.length,n&&(q=o),y-=A.indent,f!==C.line&&Ht()}else f!==C.line&&Ht();Lt("}",a),y=s}else e?((!t||A.curly)&&bt("Expected '{a}' and instead saw '{b}'.",C,"{",C.value),L=!0,y+=A.indent,r=[rn(C.line===z.line)],y-=A.indent,L=!1):Et("Expected '{a}' and instead saw '{b}'.",C,"{",C.value);h["(verb)"]=null;if(!e||!A.funcscope)B=u;return g=i,e&&A.noempty&&(!r||r.length===0)&&bt("Empty block."),c.nestedBlockDepth-=1,r}function an(e){T&&typeof T[e]!="boolean"&&bt("Unexpected /*member '{a}'.",z,e),typeof x[e]=="number"?x[e]+=1:x[e]=1}function fn(e){var t=e.value,n=e.line,r=m[t];typeof r=="function"&&(r=!1),r?r[r.length-1]!==n&&r.push(n):(r=[n],m[t]=r)}function ln(){var e=en(!0);return e||(C.id==="(string)"?(e=C.value,Lt()):C.id==="(number)"&&(e=C.value.toString(),Lt())),e}function cn(){var e=C,t=[],n;Lt("("),_t();if(C.id===")"){Lt(")");return}for(;;){n=tn(!0),t.push(n),Nt(n,"unused",z);if(C.id!==",")return Lt(")",e),_t(_,z),t;jt()}}function hn(t,n){var r,i=A,s=B;return A=Object.create(A),B=Object.create(B),h={"(name)":t||'"'+e+'"',"(line)":C.line,"(character)":C.character,"(context)":h,"(breakage)":0,"(loopage)":0,"(metrics)":pn(C),"(scope)":B,"(statement)":n,"(tokens)":{}},r=h,z.funct=h,d.push(h),t&&Nt(t,"function"),h["(params)"]=cn(),h["(metrics)"].verifyMaxParametersPerFunction(h["(params)"]),un(!1,!1,!0),h["(metrics)"].verifyMaxStatementsPerFunction(),h["(metrics)"].verifyMaxComplexityPerFunction(),B=s,A=i,h["(last)"]=z.line,h["(lastcharacter)"]=z.character,h=h["(context)"],r}function pn(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,verifyMaxStatementsPerFunction:function(){if(A.maxstatements&&this.statementCount>A.maxstatements){var t="Too many statements per function ("+this.statementCount+").";bt(t,e)}},verifyMaxParametersPerFunction:function(t){t=t||[];if(A.maxparams&&t.length>A.maxparams){var n="Too many parameters per function ("+t.length+").";bt(n,e)}},verifyMaxNestedBlockDepthPerFunction:function(){if(A.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===A.maxdepth+1){var e="Blocks are nested too deeply ("+this.nestedBlockDepth+").";bt(e)}},verifyMaxComplexityPerFunction:function(){var t=A.maxcomplexity,n=this.ComplexityCount;if(t&&n>t){var r="Cyclomatic complexity is too high per function ("+n+").";bt(r,e)}}}}function dn(){h["(metrics)"].ComplexityCount+=1}function mn(){function e(){var e={},t=C;Lt("{");if(C.id!=="}")for(;;){if(C.id==="(end)")Et("Missing '}' to match '{' from line {a}.",C,t.line);else{if(C.id==="}"){bt("Unexpected comma.",z);break}C.id===","?Et("Unexpected comma.",C):C.id!=="(string)"&&bt("Expected a string and instead saw {a}.",C,C.value)}e[C.value]===!0?bt("Duplicate key '{a}'.",C,C.value):C.value==="__proto__"&&!A.proto||C.value==="__iterator__"&&!A.iterator?bt("The '{a}' key may produce unexpected results.",C,C.value):e[C.value]=!0,Lt(),Lt(":"),mn();if(C.id!==",")break;Lt(",")}Lt("}")}function t(){var e=C;Lt("[");if(C.id!=="]")for(;;){if(C.id==="(end)")Et("Missing ']' to match '[' from line {a}.",C,e.line);else{if(C.id==="]"){bt("Unexpected comma.",z);break}C.id===","&&Et("Unexpected comma.",C)}mn();if(C.id!==",")break;Lt(",")}Lt("]")}switch(C.id){case"{":e();break;case"[":t();break;case"true":case"false":case"null":case"(number)":case"(string)":Lt();break;case"-":Lt("-"),z.character!==C.from&&bt("Unexpected space after '-'.",z),Ot(z,C),Lt("(number)");break;default:Et("Expected a JSON value.",C)}}var e,t={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},n={asi:!0,bitwise:!0,boss:!0,browser:!0,camelcase:!0,couch:!0,curly:!0,debug:!0,devel:!0,dojo:!0,eqeqeq:!0,eqnull:!0,es5:!0,esnext:!0,evil:!0,expr:!0,forin:!0,funcscope:!0,globalstrict:!0,immed:!0,iterator:!0,jquery:!0,lastsemic:!0,latedef:!0,laxbreak:!0,laxcomma:!0,loopfunc:!0,mootools:!0,multistr:!0,newcap:!0,noarg:!0,node:!0,noempty:!0,nonew:!0,nonstandard:!0,nomen:!0,onevar:!0,onecase:!0,passfail:!0,plusplus:!0,proto:!0,prototypejs:!0,regexdash:!0,regexp:!0,rhino:!0,undef:!0,unused:!0,scripturl:!0,shadow:!0,smarttabs:!0,strict:!0,sub:!0,supernew:!0,trailing:!0,validthis:!0,withstmt:!0,white:!0,worker:!0,wsh:!0,yui:!0},i={maxlen:!1,indent:!1,maxerr:!1,predef:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1},s={bitwise:!0,forin:!0,newcap:!0,nomen:!0,plusplus:!0,regexp:!0,undef:!0,white:!0,eqeqeq:!0,onevar:!0},o={eqeq:"eqeqeq",vars:"onevar",windows:"wsh"},u={ArrayBuffer:!1,ArrayBufferView:!1,Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,DataView:!1,DOMParser:!1,defaultStatus:!1,document:!1,event:!1,FileReader:!1,Float32Array:!1,Float64Array:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Image:!1,length:!1,localStorage:!1,location:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,print:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,top:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,WebSocket:!1,window:!1,Worker:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},a={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},f,l={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},c={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},h,p=["closure","exception","global","label","outer","unused","var"],d,v,m,g,y,b,w={$:!1,jQuery:!1},E,S,x,T,N={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,Iframe:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},C,k={__filename:!1,__dirname:!1,Buffer:!1,console:!1,exports:!0,GLOBAL:!1,global:!1,module:!1,process:!1,require:!1,setTimeout:!1,clearTimeout:!1,setInterval:!1,clearInterval:!1},L,A,O,M,_,D={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},P,H={defineClass:!1,deserialize:!1,gc:!1,help:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},B,j,F={Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,Set:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1,WeakMap:!1},I={escape:!1,unescape:!1},q,R={},U,z,W,X,V,$,J={importScripts:!0,postMessage:!0,self:!0},K={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},Q={YUI:!1,Y:!1,YUI_config:!1},G,Y,Z,et,tt,nt,rt,it,st;(function(){G=/@cc|<\/?|script|\]\s*\]|<\s*!|</i,Y=/[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,Z=/^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/,et=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,tt=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,nt=/\*\//,rt=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,it=/^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i,st=/^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/})(),typeof Array.isArray!="function"&&(Array.isArray=function(e){return Object.prototype.toString.apply(e)==="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n=this.length;for(var r=0;r<n;r++)e.call(t||this,this[r],r,this)}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(this===null||this===undefined)throw new TypeError;var t=new Object(this),n=t.length>>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:r!==0&&r!=Infinity&&r!=-Infinity&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i<n;i++)if(i in t&&t[i]===e)return i;return-1}),typeof Object.create!="function"&&(Object.create=function(e){return ot.prototype=e,new ot}),typeof Object.keys!="function"&&(Object.keys=function(e){var t=[],n;for(n in e)ut(e,n)&&t.push(n);return t});var Tt=function(){function s(){var e,n,s;return r>=E.length?!1:(t=1,i=E[r],r+=1,A.smarttabs?(n=i.match(/(\/\/)? \t/),e=n&&!n[1]?0:-1):e=i.search(/ \t|\t [^\*]/),e>=0&&wt("Mixed spaces and tabs.",r,e+1),i=i.replace(/\t/g,U),e=i.search(Y),e>=0&&wt("Unsafe character.",r,e),A.maxlen&&A.maxlen<i.length&&wt("Line too long.",r,i.length),s=A.trailing&&i.match(/^(.*?)\s+$/),s&&!/^\s+$/.test(i)&&wt("Trailing whitespace.",r,s[1].length+1),!0)}function o(e,i){function u(e){if(!A.proto&&e==="__proto__"){wt("The '{a}' property is deprecated.",r,n,e);return}if(!A.iterator&&e==="__iterator__"){wt("'{a}' is only available in JavaScript 1.7.",r,n,e);return}var t=/^(_+.*|.*_+)$/.test(e);if(A.nomen&&t&&e!=="_"){if(A.node&&z.id!=="."&&/^(__dirname|__filename)$/.test(e))return;wt("Unexpected {a} in '{b}'.",r,n,"dangling '_'",e);return}A.camelcase&&e.replace(/^_+/,"").indexOf("_")>-1&&!e.match(/^[A-Z0-9_]*$/)&&wt("Identifier '{a}' is not in camel case.",r,n,i)}var s,o;return e==="(color)"||e==="(range)"?o={type:e}:e==="(punctuator)"||e==="(identifier)"&&ut(R,i)?o=R[i]||R["(error)"]:o=R[e],o=Object.create(o),(e==="(string)"||e==="(range)")&&!A.scripturl&&it.test(i)&&wt("Script URL.",r,n),e==="(identifier)"&&(o.identifier=!0,u(i)),o.value=i,o.line=r,o.character=t,o.from=n,s=o.id,s!=="(endline)"&&(M=s&&("(,=:[!&|?{};".indexOf(s.charAt(s.length-1))>=0||s==="return"||s==="case")),o}var t,n,r,i;return{init:function(e){typeof e=="string"?E=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n"):E=e,E[0]&&E[0].substr(0,2)==="#!"&&(E[0]=""),r=0,s(),n=1},range:function(e,s){var u,a="";n=t,i.charAt(0)!==e&&St("Expected '{a}' and instead saw '{b}'.",r,t,e,i.charAt(0));for(;;){i=i.slice(1),t+=1,u=i.charAt(0);switch(u){case"":St("Missing '{a}'.",r,t,u);break;case s:return i=i.slice(1),t+=1,o("(range)",a);case"\\":wt("Unexpected '{a}'.",r,t,u)}a+=u}},token:function(){function E(e){var r=e.exec(i),s;if(r)return p=r[0].length,s=r[1],u=s.charAt(0),i=i.substr(p),n=t+p-s.length,t+=p,s}function S(e){function c(e){var n=parseInt(i.substr(a+1,e),16);a+=e,n>=32&&n<=126&&n!==34&&n!==92&&n!==39&&wt("Unnecessary escapement.",r,t),t+=e,u=String.fromCharCode(n)}var u,a,f="",l=!1;b&&e!=='"'&&wt("Strings must use doublequote.",r,t),A.quotmark&&(A.quotmark==="single"&&e!=="'"?wt("Strings must use singlequote.",r,t):A.quotmark==="double"&&e!=='"'?wt("Strings must use doublequote.",r,t):A.quotmark===!0&&(P=P||e,P!==e&&wt("Mixed double and single quotes.",r,t))),a=0;e:for(;;){while(a>=i.length){a=0;var h=r,p=n;if(!s()){St("Unclosed string.",h,p);break e}l?l=!1:wt("Unclosed string.",h,p)}u=i.charAt(a);if(u===e)return t+=1,i=i.substr(a+1),o("(string)",f,e);if(u<" "){if(u==="\n"||u==="\r")break;wt("Control character in string: {a}.",r,t+a,i.slice(0,a))}else if(u==="\\"){a+=1,t+=1,u=i.charAt(a),w=i.charAt(a+1);switch(u){case"\\":case'"':case"/":break;case"'":b&&wt("Avoid \\'.",r,t);break;case"b":u="\b";break;case"f":u="\f";break;case"n":u="\n";break;case"r":u="\r";break;case"t":u=" ";break;case"0":u="\0",w>=0&&w<=7&&q["use strict"]&&wt("Octal literals are not allowed in strict mode.",r,t);break;case"u":c(4);break;case"v":b&&wt("Avoid \\v.",r,t),u=" ";break;case"x":b&&wt("Avoid \\x-.",r,t),c(2);break;case"":l=!0;if(A.multistr){b&&wt("Avoid EOL escapement.",r,t),u="",t-=1;break}wt("Bad escapement of EOL. Use option multistr if needed.",r,t);break;case"!":if(i.charAt(a-2)==="<")break;default:wt("Bad escapement.",r,t)}}f+=u,t+=1,a+=1}}var e,u,a,f,l,c,h,p,d,v,m,g,y,w;for(;;){if(!i)return o(s()?"(endline)":"(end)","");m=E(Z);if(!m){m="",u="";while(i&&i<"!")i=i.substr(1);i&&(St("Unexpected '{a}'.",r,t,i.substr(0,1)),i="")}else{if(lt(u)||u==="_"||u==="$")return o("(identifier)",m);if(ct(u))return isFinite(Number(m))||wt("Bad number '{a}'.",r,t,m),lt(i.substr(0,1))&&wt("Missing space after '{a}'.",r,t,m),u==="0"&&(f=m.substr(1,1),ct(f)?z.id!=="."&&wt("Don't use extra leading zeros '{a}'.",r,t,m):b&&(f==="x"||f==="X")&&wt("Avoid 0x-. '{a}'.",r,t,m)),m.substr(m.length-1)==="."&&wt("A trailing decimal point can be confused with a dot '{a}'.",r,t,m),o("(number)",m);switch(m){case'"':case"'":return S(m);case"//":i="",z.comment=!0;break;case"/*":for(;;){h=i.search(nt);if(h>=0)break;s()||St("Unclosed comment.",r,t)}i=i.substr(h+2),z.comment=!0;break;case"/*members":case"/*member":case"/*jshint":case"/*jslint":case"/*global":case"*/":return{value:m,type:"special",line:r,character:t,from:n};case"":break;case"/":i.charAt(0)==="="&&St("A regular expression literal can be confused with '/='.",r,n);if(M){l=0,a=0,p=0;for(;;){e=!0,u=i.charAt(p),p+=1;switch(u){case"":return St("Unclosed regular expression.",r,n),gt("Stopping.",r,n);case"/":l>0&&wt("{a} unterminated regular expression group(s).",r,n+p,l),u=i.substr(0,p-1),v={g:!0,i:!0,m:!0};while(v[i.charAt(p)]===!0)v[i.charAt(p)]=!1,p+=1;return t+=p,i=i.substr(p),v=i.charAt(0),(v==="/"||v==="*")&&St("Confusing regular expression.",r,n),o("(regexp)",u);case"\\":u=i.charAt(p),u<" "?wt("Unexpected control character in regular expression.",r,n+p):u==="<"&&wt("Unexpected escaped character '{a}' in regular expression.",r,n+p,u),p+=1;break;case"(":l+=1,e=!1;if(i.charAt(p)==="?"){p+=1;switch(i.charAt(p)){case":":case"=":case"!":p+=1;break;default:wt("Expected '{a}' and instead saw '{b}'.",r,n+p,":",i.charAt(p))}}else a+=1;break;case"|":e=!1;break;case")":l===0?wt("Unescaped '{a}'.",r,n+p,")"):l-=1;break;case" ":v=1;while(i.charAt(p)===" ")p+=1,v+=1;v>1&&wt("Spaces are hard to count. Use {{a}}.",r,n+p,v);break;case"[":u=i.charAt(p),u==="^"&&(p+=1,i.charAt(p)==="]"&&St("Unescaped '{a}'.",r,n+p,"^")),u==="]"&&wt("Empty class.",r,n+p-1),g=!1,y=!1;e:do{u=i.charAt(p),p+=1;switch(u){case"[":case"^":wt("Unescaped '{a}'.",r,n+p,u),y?y=!1:g=!0;break;case"-":g&&!y?(g=!1,y=!0):y?y=!1:i.charAt(p)==="]"?y=!0:(A.regexdash!==(p===2||p===3&&i.charAt(1)==="^")&&wt("Unescaped '{a}'.",r,n+p-1,"-"),g=!0);break;case"]":y&&!A.regexdash&&wt("Unescaped '{a}'.",r,n+p-1,"-");break e;case"\\":u=i.charAt(p),u<" "?wt("Unexpected control character in regular expression.",r,n+p):u==="<"&&wt("Unexpected escaped character '{a}' in regular expression.",r,n+p,u),p+=1,/[wsd]/i.test(u)?(y&&(wt("Unescaped '{a}'.",r,n+p,"-"),y=!1),g=!1):y?y=!1:g=!0;break;case"/":wt("Unescaped '{a}'.",r,n+p-1,"/"),y?y=!1:g=!0;break;case"<":y?y=!1:g=!0;break;default:y?y=!1:g=!0}}while(u);break;case".":A.regexp&&wt("Insecure '{a}'.",r,n+p,u);break;case"]":case"?":case"{":case"}":case"+":case"*":wt("Unescaped '{a}'.",r,n+p,u)}if(e)switch(i.charAt(p)){case"?":case"+":case"*":p+=1,i.charAt(p)==="?"&&(p+=1);break;case"{":p+=1,u=i.charAt(p);if(u<"0"||u>"9"){wt("Expected a number and instead saw '{a}'.",r,n+p,u);break}p+=1,d=+u;for(;;){u=i.charAt(p);if(u<"0"||u>"9")break;p+=1,d=+u+d*10}c=d;if(u===","){p+=1,c=Infinity,u=i.charAt(p);if(u>="0"&&u<="9"){p+=1,c=+u;for(;;){u=i.charAt(p);if(u<"0"||u>"9")break;p+=1,c=+u+c*10}}}i.charAt(p)!=="}"?wt("Expected '{a}' and instead saw '{b}'.",r,n+p,"}",u):p+=1,i.charAt(p)==="?"&&(p+=1),d>c&&wt("'{a}' should not be greater than '{b}'.",r,n+p,d,c)}}return u=i.substr(0,p-1),t+=p,i=i.substr(p),o("(regexp)",u)}return o("(punctuator)",m);case"#":return o("(punctuator)",m);default:return o("(punctuator)",m)}}}}}}();Wt("(number)",function(){return this}),Wt("(string)",function(){return this}),R["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var t=this.value,n=B[t],r;typeof n=="function"?n=undefined:typeof n=="boolean"&&(r=h,h=d[0],Nt(t,"var"),n=h,h=r);if(h===n)switch(h[t]){case"unused":h[t]="var";break;case"unction":h[t]="function",this["function"]=!0;break;case"function":this["function"]=!0;break;case"label":bt("'{a}' is a statement label.",z,t)}else if(h["(global)"])A.undef&&typeof O[t]!="boolean"&&(e!=="typeof"&&e!=="delete"||C&&(C.value==="."||C.value==="["))&&yt(h,"'{a}' is not defined.",z,t),fn(z);else switch(h[t]){case"closure":case"function":case"var":case"unused":bt("'{a}' used out of scope.",z,t);break;case"label":bt("'{a}' is a statement label.",z,t);break;case"outer":case"global":break;default:if(n===!0)h[t]=!0;else if(n===null)bt("'{a}' is not allowed.",z,t),fn(z);else if(typeof n!="object")A.undef&&(e!=="typeof"&&e!=="delete"||C&&(C.value==="."||C.value==="["))&&yt(h,"'{a}' is not defined.",z,t),h[t]=!0,fn(z);else switch(n[t]){case"function":case"unction":this["function"]=!0,n[t]="closure",h[t]=n["(global)"]?"global":"outer";break;case"var":case"unused":n[t]="closure",h[t]=n["(global)"]?"global":"outer";break;case"closure":h[t]=n["(global)"]?"global":"outer";break;case"label":bt("'{a}' is a statement label.",z,t)}}return this},led:function(){Et("Expected an operator and instead saw '{a}'.",C,C.value)}},Wt("(regexp)",function(){return this}),It("(endline)"),It("(begin)"),It("(end)").reach=!0,It("</").reach=!0,It("<!"),It("<!--"),It("-->"),It("(error)").reach=!0,It("}").reach=!0,It(")"),It("]"),It('"').reach=!0,It("'").reach=!0,It(";"),It(":").reach=!0,It(","),It("#"),It("@"),Xt("else"),Xt("case").reach=!0,Xt("catch"),Xt("default").reach=!0,Xt("finally"),Vt("arguments",function(e){q["use strict"]&&h["(global)"]&&bt("Strict violation.",e)}),Vt("eval"),Vt("false"),Vt("Infinity"),Vt("null"),Vt("this",function(e){q["use strict"]&&!A.validthis&&(h["(statement)"]&&h["(name)"].charAt(0)>"Z"||h["(global)"])&&bt("Possible strict violation.",e)}),Vt("true"),Vt("undefined"),Qt("=","assign",20),Qt("+=","assignadd",20),Qt("-=","assignsub",20),Qt("*=","assignmult",20),Qt("/=","assigndiv",20).nud=function(){Et("A regular expression literal can be confused with '/='.")},Qt("%=","assignmod",20),Yt("&=","assignbitand",20),Yt("|=","assignbitor",20),Yt("^=","assignbitxor",20),Yt("<<=","assignshiftleft",20),Yt(">>=","assignshiftright",20),Yt(">>>=","assignshiftrightunsigned",20),$t("?",function(e,t){return t.left=e,t.right=At(10),Lt(":"),t["else"]=At(10),t},30),$t("||","or",40),$t("&&","and",50),Gt("|","bitor",70),Gt("^","bitxor",80),Gt("&","bitand",90),Jt("==",function(e,t){var n=A.eqnull&&(e.value==="null"||t.value==="null");return!n&&A.eqeqeq?bt("Expected '{a}' and instead saw '{b}'.",this,"===","=="):Kt(e)?bt("Use '{a}' to compare with '{b}'.",this,"===",e.value):Kt(t)&&bt("Use '{a}' to compare with '{b}'.",this,"===",t.value),this}),Jt("==="),Jt("!=",function(e,t){var n=A.eqnull&&(e.value==="null"||t.value==="null");return!n&&A.eqeqeq?bt("Expected '{a}' and instead saw '{b}'.",this,"!==","!="):Kt(e)?bt("Use '{a}' to compare with '{b}'.",this,"!==",e.value):Kt(t)&&bt("Use '{a}' to compare with '{b}'.",this,"!==",t.value),this}),Jt("!=="),Jt("<"),Jt(">"),Jt("<="),Jt(">="),Gt("<<","shiftleft",120),Gt(">>","shiftright",120),Gt(">>>","shiftrightunsigned",120),$t("in","in",120),$t("instanceof","instanceof",120),$t("+",function(e,t){var n=At(130);return e&&n&&e.id==="(string)"&&n.id==="(string)"?(e.value+=n.value,e.character=n.character,!A.scripturl&&it.test(e.value)&&bt("JavaScript URL.",e),e):(t.left=e,t.right=n,t)},130),zt("+","num"),zt("+++",function(){return bt("Confusing pluses."),this.right=At(150),this.arity="unary",this}),$t("+++",function(e){return bt("Confusing pluses."),this.left=e,this.right=At(130),this},130),$t("-","sub",130),zt("-","neg"),zt("---",function(){return bt("Confusing minuses."),this.right=At(150),this.arity="unary",this}),$t("---",function(e){return bt("Confusing minuses."),this.left=e,this.right=At(130),this},130),$t("*","mult",140),$t("/","div",140),$t("%","mod",140),Zt("++","postinc"),zt("++","preinc"),R["++"].exps=!0,Zt("--","postdec"),zt("--","predec"),R["--"].exps=!0,zt("delete",function(){var e=At(0);return(!e||e.id!=="."&&e.id!=="[")&&bt("Variables should not be deleted."),this.first=e,this}).exps=!0,zt("~",function(){return A.bitwise&&bt("Unexpected '{a}'.",this,"~"),At(150),this}),zt("!",function(){return this.right=At(150),this.arity="unary",t[this.right.id]===!0&&bt("Confusing use of '{a}'.",this,"!"),this}),zt("typeof","typeof"),zt("new",function(){var e=At(155),t;if(e&&e.id!=="function")if(e.identifier){e["new"]=!0;switch(e.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":bt("Do not use {a} as a constructor.",_,e.value);break;case"Function":A.evil||bt("The Function constructor is eval.");break;case"Date":case"RegExp":break;default:e.id!=="function"&&(t=e.value.substr(0,1),A.newcap&&(t<"A"||t>"Z")&&!ut(v,e.value)&&bt("A constructor name should start with an uppercase letter.",z))}}else e.id!=="."&&e.id!=="["&&e.id!=="("&&bt("Bad constructor.",z);else A.supernew||bt("Weird construction. Delete 'new'.",this);return Ot(z,C),C.id!=="("&&!A.supernew&&bt("Missing '()' invoking a constructor.",z,z.value),this.first=e,this}),R["new"].exps=!0,zt("void").exps=!0,$t(".",function(e,t){Ot(_,z),Mt();var n=tn();return typeof n=="string"&&an(n),t.left=e,t.right=n,!e||e.value!=="arguments"||n!=="callee"&&n!=="caller"?!A.evil&&e&&e.value==="document"&&(n==="write"||n==="writeln")&&bt("document.write can be a form of eval.",e):A.noarg?bt("Avoid arguments.{a}.",e,n):q["use strict"]&&Et("Strict violation."),!A.evil&&(n==="eval"||n==="execScript")&&bt("eval is evil."),t},160,!0),$t("(",function(e,t){_.id!=="}"&&_.id!==")"&&Mt(_,z),_t(),A.immed&&!e.immed&&e.id==="function"&&bt("Wrap an immediate function invocation in parentheses to assist the reader in understanding that the expression is the result of a function, and not the function itself.");var n=0,r=[];e&&e.type==="(identifier)"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&"Number String Boolean Date Object".indexOf(e.value)===-1&&(e.value==="Math"?bt("Math is not a function.",e):A.newcap&&bt("Missing 'new' prefix when invoking a constructor.",e));if(C.id!==")")for(;;){r[r.length]=At(10),n+=1;if(C.id!==",")break;jt()}return Lt(")"),_t(_,z),typeof e=="object"&&(e.value==="parseInt"&&n===1&&bt("Missing radix parameter.",z),A.evil||(e.value==="eval"||e.value==="Function"||e.value==="execScript"?(bt("eval is evil.",e),r[0]&&[0].id==="(string)"&&xt(e,r[0].value)):!r[0]||r[0].id!=="(string)"||e.value!=="setTimeout"&&e.value!=="setInterval"?r[0]&&r[0].id==="(string)"&&e.value==="."&&e.left.value==="window"&&(e.right==="setTimeout"||e.right==="setInterval")&&(bt("Implied eval is evil. Pass a function instead of a string.",e),xt(e,r[0].value)):(bt("Implied eval is evil. Pass a function instead of a string.",e),xt(e,r[0].value))),!e.identifier&&e.id!=="."&&e.id!=="["&&e.id!=="("&&e.id!=="&&"&&e.id!=="||"&&e.id!=="?"&&bt("Bad invocation.",e)),t.left=e,t},155,!0).exps=!0,zt("(",function(){_t(),C.id==="function"&&(C.immed=!0);var e=At(0);return Lt(")",this),_t(_,z),A.immed&&e.id==="function"&&C.id!=="("&&(C.id!=="."||kt().value!=="call"&&kt().value!=="apply")&&bt("Do not wrap function literals in parens unless they are to be immediately invoked.",this),e}),$t("[",function(e,t){Mt(_,z),_t();var n=At(0),r;return n&&n.type==="(string)"&&(!A.evil&&(n.value==="eval"||n.value==="execScript")&&bt("eval is evil.",t),an(n.value),!A.sub&&rt.test(n.value)&&(r=R[n.value],(!r||!r.reserved)&&bt("['{a}'] is better written in dot notation.",_,n.value))),Lt("]",t),_t(_,z),t.left=e,t.right=n,t},160,!0),zt("[",function(){var e=z.line!==C.line;this.first=[],e&&(y+=A.indent,C.from===y+A.indent&&(y+=A.indent));while(C.id!=="(end)"){while(C.id===",")A.es5||bt("Extra comma."),Lt(",");if(C.id==="]")break;e&&z.line!==C.line&&Ht(),this.first.push(At(10));if(C.id!==",")break;jt();if(C.id==="]"&&!A.es5){bt("Extra comma.",z);break}}return e&&(y-=A.indent,Ht()),Lt("]",this),this},160),function(e){e.nud=function(){function o(e,t){s[e]&&ut(s,e)?bt("Duplicate member '{a}'.",C,n):s[e]={},s[e].basic=!0,s[e].basicToken=t}function u(e,t){s[e]&&ut(s,e)?(s[e].basic||s[e].setter)&&bt("Duplicate member '{a}'.",C,n):s[e]={},s[e].setter=!0,s[e].setterToken=t}function a(e){s[e]&&ut(s,e)?(s[e].basic||s[e].getter)&&bt("Duplicate member '{a}'.",C,n):s[e]={},s[e].getter=!0,s[e].getterToken=z}var e,t,n,r,i,s={};e=z.line!==C.line,e&&(y+=A.indent,C.from===y+A.indent&&(y+=A.indent));for(;;){if(C.id==="}")break;e&&Ht();if(C.value==="get"&&kt().id!==":")Lt("get"),A.es5||Et("get/set are ES5 features."),n=ln(),n||Et("Missing property name."),a(n),i=C,Ot(z,C),t=hn(),r=t["(params)"],r&&bt("Unexpected parameter '{a}' in get {b} function.",i,r[0],n),Ot(z,C);else if(C.value==="set"&&kt().id!==":")Lt("set"),A.es5||Et("get/set are ES5 features."),n=ln(),n||Et("Missing property name."),u(n,C),i=C,Ot(z,C),t=hn(),r=t["(params)"],(!r||r.length!==1)&&bt("Expected a single parameter in set {a} function.",i,n);else{n=ln(),o(n,C);if(typeof n!="string")break;Lt(":"),Dt(z,C),At(10)}an(n);if(C.id!==",")break;jt(),C.id===","?bt("Extra comma.",z):C.id==="}"&&!A.es5&&bt("Extra comma.",z)}e&&(y-=A.indent,Ht()),Lt("}",this);if(A.es5)for(var f in s)ut(s,f)&&s[f].setter&&!s[f].getter&&bt("Setter is defined without getter.",s[f].setterToken);return this},e.fud=function(){Et("Expected to see a statement and instead saw a block.",z)}}(It("{")),V=function(){var e=qt("const",function(e){var t,n,r;this.first=[];for(;;){Dt(z,C),t=tn(),h[t]==="const"&&bt("const '"+t+"' has already been declared"),h["(global)"]&&O[t]===!1&&bt("Redefinition of '{a}'.",z,t),Nt(t,"const");if(e)break;n=z,this.first.push(z),C.id!=="="&&bt("const '{a}' is initialized to 'undefined'.",z,t),C.id==="="&&(Dt(z,C),Lt("="),Dt(z,C),C.id==="undefined"&&bt("It is not necessary to initialize '{a}' to 'undefined'.",z,t),kt(0).id==="="&&C.identifier&&Et("Constant {a} was not declared correctly.",C,C.value),r=At(0),n.first=r);if(C.id!==",")break;jt()}return this});e.exps=!0};var vn=qt("var",function(e){var t,n,r;h["(onevar)"]&&A.onevar?bt("Too many var statements."):h["(global)"]||(h["(onevar)"]=!0),this.first=[];for(;;){Dt(z,C),t=tn(),A.esnext&&h[t]==="const"&&bt("const '"+t+"' has already been declared"),h["(global)"]&&O[t]===!1&&bt("Redefinition of '{a}'.",z,t),Nt(t,"unused",z);if(e)break;n=z,this.first.push(z),C.id==="="&&(Dt(z,C),Lt("="),Dt(z,C),C.id==="undefined"&&bt("It is not necessary to initialize '{a}' to 'undefined'.",z,t),kt(0).id==="="&&C.identifier&&Et("Variable {a} was not declared correctly.",C,C.value),r=At(0),n.first=r);if(C.id!==",")break;jt()}return this});vn.exps=!0,Rt("function",function(){g&&bt("Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.",z);var e=tn();return A.esnext&&h[e]==="const"&&bt("const '"+e+"' has already been declared"),Ot(z,C),Nt(e,"unction",z),hn(e,{statement:!0}),C.id==="("&&C.line===z.line&&Et("Function declarations are not invocable. Wrap the whole function invocation in parens."),this}),zt("function",function(){var e=en();return e?Ot(z,C):Dt(z,C),hn(e),!A.loopfunc&&h["(loopage)"]&&bt("Don't make functions within a loop."),this}),Rt("if",function(){var e=C;return dn(),Lt("("),Dt(this,e),_t(),At(20),C.id==="="&&(A.boss||bt("Assignment in conditional expression"),Lt("="),At(20)),Lt(")",e),_t(_,z),un(!0,!0),C.id==="else"&&(Dt(z,C),Lt("else"),C.id==="if"||C.id==="switch"?rn(!0):un(!0,!0)),this}),Rt("try",function(){function t(){var e=B,t;Lt("catch"),Dt(z,C),Lt("("),B=Object.create(e),t=C.value,C.type!=="(identifier)"&&(t=null,bt("Expected an identifier and instead saw '{a}'.",C,t)),Lt(),Lt(")"),h={"(name)":"(catch)","(line)":C.line,"(character)":C.character,"(context)":h,"(breakage)":h["(breakage)"],"(loopage)":h["(loopage)"],"(scope)":B,"(statement)":!1,"(metrics)":pn(C),"(catch)":!0,"(tokens)":{}},t&&Nt(t,"exception"),z.funct=h,d.push(h),un(!1),B=e,h["(last)"]=z.line,h["(lastcharacter)"]=z.character,h=h["(context)"]}var e;un(!1),C.id==="catch"&&(dn(),t(),e=!0);if(C.id==="finally"){Lt("finally"),un(!1);return}return e||Et("Expected '{a}' and instead saw '{b}'.",C,"catch",C.value),this}),Rt("while",function(){var e=C;return h["(breakage)"]+=1,h["(loopage)"]+=1,dn(),Lt("("),Dt(this,e),_t(),At(20),C.id==="="&&(A.boss||bt("Assignment in conditional expression"),Lt("="),At(20)),Lt(")",e),_t(_,z),un(!0,!0),h["(breakage)"]-=1,h["(loopage)"]-=1,this}).labelled=!0,Rt("with",function(){var e=C;return q["use strict"]?Et("'with' is not allowed in strict mode.",z):A.withstmt||bt("Don't use 'with'.",z),Lt("("),Dt(this,e),_t(),At(0),Lt(")",e),_t(_,z),un(!0,!0),this}),Rt("switch",function(){var e=C,t=!1;h["(breakage)"]+=1,Lt("("),Dt(this,e),_t(),this.condition=At(20),Lt(")",e),_t(_,z),Dt(z,C),e=C,Lt("{"),Dt(z,C),y+=A.indent,this.cases=[];for(;;)switch(C.id){case"case":switch(h["(verb)"]){case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:st.test(E[C.line-2])||bt("Expected a 'break' statement before 'case'.",z)}Ht(-A.indent),Lt("case"),this.cases.push(At(20)),dn(),t=!0,Lt(":"),h["(verb)"]="case";break;case"default":switch(h["(verb)"]){case"break":case"continue":case"return":case"throw":break;default:st.test(E[C.line-2])||bt("Expected a 'break' statement before 'default'.",z)}Ht(-A.indent),Lt("default"),t=!0,Lt(":");break;case"}":y-=A.indent,Ht(),Lt("}",e);if(this.cases.length===1||this.condition.id==="true"||this.condition.id==="false")A.onecase||bt("This 'switch' should be an 'if'.",this);h["(breakage)"]-=1,h["(verb)"]=undefined;return;case"(end)":Et("Missing '{a}'.",C,"}");return;default:if(t)switch(z.id){case",":Et("Each value should have its own case label.");return;case":":t=!1,sn();break;default:Et("Missing ':' on a case clause.",z);return}else{if(z.id!==":"){Et("Expected '{a}' and instead saw '{b}'.",C,"case",C.value);return}Lt(":"),Et("Unexpected '{a}'.",z,":"),sn()}}}).labelled=!0,qt("debugger",function(){return A.debug||bt("All 'debugger' statements should be removed."),this}).exps=!0,function(){var e=qt("do",function(){h["(breakage)"]+=1,h["(loopage)"]+=1,dn(),this.first=un(!0),Lt("while");var e=C;return Dt(z,e),Lt("("),_t(),At(20),C.id==="="&&(A.boss||bt("Assignment in conditional expression"),Lt("="),At(20)),Lt(")",e),_t(_,z),h["(breakage)"]-=1,h["(loopage)"]-=1,this});e.labelled=!0,e.exps=!0}(),Rt("for",function(){var e,t=C;h["(breakage)"]+=1,h["(loopage)"]+=1,dn(),Lt("("),Dt(this,t),_t();if(kt(C.id==="var"?1:0).id==="in"){if(C.id==="var")Lt("var"),vn.fud.call(vn,!0);else{switch(h[C.value]){case"unused":h[C.value]="var";break;case"var":break;default:bt("Bad for in variable '{a}'.",C,C.value)}Lt()}return Lt("in"),At(20),Lt(")",t),e=un(!0,!0),A.forin&&e&&(e.length>1||typeof e[0]!="object"||e[0].value!=="if")&&bt("The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.",this),h["(breakage)"]-=1,h["(loopage)"]-=1,this}if(C.id!==";")if(C.id==="var")Lt("var"),vn.fud.call(vn);else for(;;){At(0,"for");if(C.id!==",")break;jt()}Bt(z),Lt(";"),C.id!==";"&&(At(20),C.id==="="&&(A.boss||bt("Assignment in conditional expression"),Lt("="),At(20))),Bt(z),Lt(";"),C.id===";"&&Et("Expected '{a}' and instead saw '{b}'.",C,")",";");if(C.id!==")")for(;;){At(0,"for");if(C.id!==",")break;jt()}return Lt(")",t),_t(_,z),un(!0,!0),h["(breakage)"]-=1,h["(loopage)"]-=1,this}).labelled=!0,qt("break",function(){var e=C.value;return h["(breakage)"]===0&&bt("Unexpected '{a}'.",C,this.value),A.asi||Bt(this),C.id!==";"&&z.line===C.line&&(h[e]!=="label"?bt("'{a}' is not a statement label.",C,e):B[e]!==h&&bt("'{a}' is out of scope.",C,e),this.first=C,Lt()),nn("break"),this}).exps=!0,qt("continue",function(){var e=C.value;return h["(breakage)"]===0&&bt("Unexpected '{a}'.",C,this.value),A.asi||Bt(this),C.id!==";"?z.line===C.line&&(h[e]!=="label"?bt("'{a}' is not a statement label.",C,e):B[e]!==h&&bt("'{a}' is out of scope.",C,e),this.first=C,Lt()):h["(loopage)"]||bt("Unexpected '{a}'.",C,this.value),nn("continue"),this}).exps=!0,qt("return",function(){return this.line===C.line?(C.id==="(regexp)"&&bt("Wrap the /regexp/ literal in parens to disambiguate the slash operator."),C.id!==";"&&!C.reach&&(Dt(z,C),kt().value==="="&&!A.boss&&wt("Did you mean to return a conditional instead of an assignment?",z.line,z.character+1),this.first=At(0))):A.asi||Bt(this),nn("return"),this}).exps=!0,qt("throw",function(){return Bt(this),Dt(z,C),this.first=At(20),nn("throw"),this}).exps=!0,Xt("class"),Xt("const"),Xt("enum"),Xt("export"),Xt("extends"),Xt("import"),Xt("super"),Xt("let"),Xt("yield"),Xt("implements"),Xt("interface"),Xt("package"),Xt("private"),Xt("protected"),Xt("public"),Xt("static");var gn=function(e,t,n){var i,s,o,u,a,l={};t&&t.scope?r.scope=t.scope:(r.errors=[],r.undefs=[],r.internals=[],r.blacklist={},r.scope="(main)"),O=Object.create(F),f=Object.create(null),dt(O,n||{});if(t){i=t.predef,i&&(!Array.isArray(i)&&typeof i=="object"&&(i=Object.keys(i)),i.forEach(function(e){var t;e[0]==="-"?(t=e.slice(1),r.blacklist[t]=t):O[e]=!0})),a=Object.keys(t);for(u=0;u<a.length;u++)l[a[u]]=t[a[u]],a[u]==="newcap"&&t[a[u]]===!1&&(l["(explicitNewcap)"]=!0),a[u]==="indent"&&(l.white=!0)}A=l,A.indent=A.indent||4,A.maxerr=A.maxerr||50,U="";for(s=0;s<A.indent;s+=1)U+=" ";y=1,v=Object.create(O),B=v,h={"(global)":!0,"(name)":"(global)","(scope)":B,"(breakage)":0,"(loopage)":0,"(tokens)":{},"(metrics)":pn(C)},d=[h],X=[],j=null,x={},T=null,m={},g=!1,S=[],b=!1,$=0,E=[],W=[];if(!ft(e)&&!Array.isArray(e))return St("Input is neither a string nor an array of strings.",0),!1;if(ft(e)&&/^\s*$/g.test(e))return St("Input is an empty string.",0),!1;if(e.length===0)return St("Input is an empty array.",0),!1;Tt.init(e),M=!0,q={},_=z=C=R["(begin)"];for(var c in t)ut(t,c)&&at(c,z);mt(),dt(O,n||{}),jt.first=!0,P=undefined;try{Lt();switch(C.id){case"{":case"[":A.laxbreak=!0,b=!0,mn();break;default:on(),q["use strict"]&&!A.globalstrict&&bt('Use the function form of "use strict".',_),sn()}Lt(C&&C.value!=="."?"(end)":undefined);var p=function(e,t){do{if(typeof t[e]=="string")return t[e]==="unused"?t[e]="var":t[e]==="unction"&&(t[e]="closure"),!0;t=t["(context)"]}while(t);return!1},w=function(e,t){if(!m[e])return;var n=[];for(var r=0;r<m[e].length;r+=1)m[e][r]!==t&&n.push(m[e][r]);n.length===0?delete m[e]:m[e]=n},N=function(e,t){var n=t.line,r=t.character;A.unused&&wt("'{a}' is defined but never used.",n,r,e),W.push({name:e,line:n,character:r})},k=function(e,t){var n=e[t],r=e["(tokens)"][t];if(t.charAt(0)==="(")return;if(n!=="unused"&&n!=="unction")return;if(e["(params)"]&&e["(params)"].indexOf(t)!==-1)return;N(t,r)};for(s=0;s<r.undefs.length;s+=1)o=r.undefs[s].slice(0),p(o[2].value,o[0])?w(o[2].value,o[2].line):bt.apply(bt,o.slice(1));d.forEach(function(e){for(var t in e)ut(e,t)&&k(e,t);if(!e["(params)"])return;var n=e["(params)"].slice(),r=n.pop(),i;while(r){i=e[r];if(r==="undefined")return;if(i!=="unused"&&i!=="unction")return;N(r,e["(tokens)"][r]),r=n.pop()}});for(var L in f)ut(f,L)&&!ut(v,L)&&N(L,f[L])}catch(D){if(D){var H=C||{};r.errors.push({raw:D.raw,reason:D.message,line:D.line||H.line,character:D.character||H.from},null)}}if(r.scope==="(main)"){t=t||{};for(s=0;s<r.internals.length;s+=1)o=r.internals[s],t.scope=o.elem,gn(o.value,t,n)}return r.errors.length===0};return gn.data=function(){var e={functions:[],options:A},t=[],n=[],r,i,s,o,u,a;gn.errors.length&&(e.errors=gn.errors),b&&(e.json=!0);for(u in m)ut(m,u)&&t.push({name:u,line:m[u]});t.length>0&&(e.implieds=t),X.length>0&&(e.urls=X),a=Object.keys(B),a.length>0&&(e.globals=a);for(s=1;s<d.length;s+=1){i=d[s],r={};for(o=0;o<p.length;o+=1)r[p[o]]=[];for(o=0;o<p.length;o+=1)r[p[o]].length===0&&delete r[p[o]];r.name=i["(name)"],r.param=i["(params)"],r.line=i["(line)"],r.character=i["(character)"],r.last=i["(last)"],r.lastcharacter=i["(lastcharacter)"],e.functions.push(r)}W.length>0&&(e.unused=W),n=[];for(u in x)if(typeof x[u]=="number"){e.member=x;break}return e},gn.jshint=gn,gn}();typeof t=="object"&&t&&(t.JSHINT=r)}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/worker-json.js b/ehcp/net2ftp/plugins/ace/worker-json.js new file mode 100644 index 0000000..146773b --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/worker-json.js @@ -0,0 +1 @@ +"no use strict";function initBaseUrls(e){require.tlns=e}function initSender(){var e=require(null,"ace/lib/event_emitter").EventEmitter,t=require(null,"ace/lib/oop"),n=function(){};return function(){t.implement(this,e),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(n.prototype),new n}if(typeof window!="undefined"&&window.document)throw"atempt to load ace worker into main window instead of webWorker";var console={log:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},error:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})}},window={console:console},normalizeModule=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return normalizeModule(e,n[0])+"!"+normalizeModule(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/"),t=r+"/"+t;while(t.indexOf(".")!==-1&&i!=t)var i=t,t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},require=function(e,t){if(!t.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");var t=normalizeModule(e,t),n=require.modules[t];if(n)return n.initialized||(n.initialized=!0,n.exports=n.factory().exports),n.exports;var r=t.split("/");r[0]=require.tlns[r[0]]||r[0];var i=r.join("/")+".js";return require.id=t,importScripts(i),require(e,t)};require.modules={},require.tlns={};var define=function(e,t,n){arguments.length==2?(n=t,typeof e!="string"&&(t=e,e=require.id)):arguments.length==1&&(n=e,e=require.id);if(e.indexOf("text!")===0)return;var r=function(t,n){return require(e,t,n)};require.modules[e]={factory:function(){var e={exports:{}},t=n(r,e.exports,e);return t&&(e.exports=t),e}}},main,sender;onmessage=function(e){var t=e.data;if(t.command){if(!main[t.command])throw new Error("Unknown command:"+t.command);main[t.command].apply(main,t.args)}else if(t.init){initBaseUrls(t.tlns),require(null,"ace/lib/fixoldbrowsers"),sender=initSender();var n=require(null,t.module)[t.classname];main=new n(sender)}else t.event&&sender&&sender._emit(t.event,t.data)},define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/mode/json_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/json/json_parse"],function(e,t,n){var r=e("../lib/oop"),i=e("../worker/mirror").Mirror,s=e("./json/json_parse"),o=t.JsonWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue();try{var t=s(e)}catch(n){var r=this.charToDocumentPosition(n.at-1);this.sender.emit("error",{row:r.row,column:r.column,text:n.message,type:"error"});return}this.sender.emit("ok")},this.charToDocumentPosition=function(e){var t=0,n=this.doc.getLength(),r=this.doc.getNewLineCharacter().length;if(!n)return{row:0,column:0};var i=0;while(t<n){var s=this.doc.getLine(t),o=s.length+r;if(i+o>e)return{row:t,column:e-i};i+=o,t+=1}return{row:t-1,column:s.length}}}.call(o.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.deferredCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas([e.data]),n.schedule(s.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/mode/json/json_parse",["require","exports","module"],function(e,t,n){var r,i,s={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:" "},o,u=function(e){throw{name:"SyntaxError",message:e,at:r,text:o}},a=function(e){return e&&e!==i&&u("Expected '"+e+"' instead of '"+i+"'"),i=o.charAt(r),r+=1,i},f=function(){var e,t="";i==="-"&&(t="-",a("-"));while(i>="0"&&i<="9")t+=i,a();if(i==="."){t+=".";while(a()&&i>="0"&&i<="9")t+=i}if(i==="e"||i==="E"){t+=i,a();if(i==="-"||i==="+")t+=i,a();while(i>="0"&&i<="9")t+=i,a()}e=+t;if(!isNaN(e))return e;u("Bad number")},l=function(){var e,t,n="",r;if(i==='"')while(a()){if(i==='"')return a(),n;if(i==="\\"){a();if(i==="u"){r=0;for(t=0;t<4;t+=1){e=parseInt(a(),16);if(!isFinite(e))break;r=r*16+e}n+=String.fromCharCode(r)}else{if(typeof s[i]!="string")break;n+=s[i]}}else n+=i}u("Bad string")},c=function(){while(i&&i<=" ")a()},h=function(){switch(i){case"t":return a("t"),a("r"),a("u"),a("e"),!0;case"f":return a("f"),a("a"),a("l"),a("s"),a("e"),!1;case"n":return a("n"),a("u"),a("l"),a("l"),null}u("Unexpected '"+i+"'")},p,d=function(){var e=[];if(i==="["){a("["),c();if(i==="]")return a("]"),e;while(i){e.push(p()),c();if(i==="]")return a("]"),e;a(","),c()}}u("Bad array")},v=function(){var e,t={};if(i==="{"){a("{"),c();if(i==="}")return a("}"),t;while(i){e=l(),c(),a(":"),Object.hasOwnProperty.call(t,e)&&u('Duplicate key "'+e+'"'),t[e]=p(),c();if(i==="}")return a("}"),t;a(","),c()}}u("Bad object")};return p=function(){c();switch(i){case"{":return v();case"[":return d();case'"':return l();case"-":return f();default:return i>="0"&&i<="9"?f():h()}},function(e,t){var n;return o=e,r=0,i=" ",n=p(),c(),i&&u("Syntax error"),typeof t=="function"?function s(e,n){var r,i,o=e[n];if(o&&typeof o=="object")for(r in o)Object.hasOwnProperty.call(o,r)&&(i=s(o,r),i!==undefined?o[r]=i:delete o[r]);return t.call(e,n,o)}({"":n},""):n}}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ace/worker-xquery.js b/ehcp/net2ftp/plugins/ace/worker-xquery.js new file mode 100644 index 0000000..a8255dd --- /dev/null +++ b/ehcp/net2ftp/plugins/ace/worker-xquery.js @@ -0,0 +1 @@ +"no use strict";function initBaseUrls(e){require.tlns=e}function initSender(){var e=require(null,"ace/lib/event_emitter").EventEmitter,t=require(null,"ace/lib/oop"),n=function(){};return function(){t.implement(this,e),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(n.prototype),new n}if(typeof window!="undefined"&&window.document)throw"atempt to load ace worker into main window instead of webWorker";var console={log:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},error:function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})}},window={console:console},normalizeModule=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return normalizeModule(e,n[0])+"!"+normalizeModule(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/"),t=r+"/"+t;while(t.indexOf(".")!==-1&&i!=t)var i=t,t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},require=function(e,t){if(!t.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");var t=normalizeModule(e,t),n=require.modules[t];if(n)return n.initialized||(n.initialized=!0,n.exports=n.factory().exports),n.exports;var r=t.split("/");r[0]=require.tlns[r[0]]||r[0];var i=r.join("/")+".js";return require.id=t,importScripts(i),require(e,t)};require.modules={},require.tlns={};var define=function(e,t,n){arguments.length==2?(n=t,typeof e!="string"&&(t=e,e=require.id)):arguments.length==1&&(n=e,e=require.id);if(e.indexOf("text!")===0)return;var r=function(t,n){return require(e,t,n)};require.modules[e]={factory:function(){var e={exports:{}},t=n(r,e.exports,e);return t&&(e.exports=t),e}}},main,sender;onmessage=function(e){var t=e.data;if(t.command){if(!main[t.command])throw new Error("Unknown command:"+t.command);main[t.command].apply(main,t.args)}else if(t.init){initBaseUrls(t.tlns),require(null,"ace/lib/fixoldbrowsers"),sender=initSender();var n=require(null,t.module)[t.classname];main=new n(sender)}else t.event&&sender&&sender._emit(t.event,t.data)},define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,n){e("./regexp"),e("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(e,t,n){function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function m(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=o.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,u=n.apply(s,r.concat(o.call(arguments)));return u!==null&&Object(u)===u?u:s}return n.apply(t,r.concat(o.call(arguments)))};return i});var r=Function.prototype.call,i=Array.prototype,s=Object.prototype,o=i.slice,u=r.bind(s.toString),a=r.bind(s.hasOwnProperty),f,l,c,h,p;if(p=a(s,"__defineGetter__"))f=r.bind(s.__defineGetter__),l=r.bind(s.__defineSetter__),c=r.bind(s.__lookupGetter__),h=r.bind(s.__lookupSetter__);Array.isArray||(Array.isArray=function(t){return u(t)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=D(this),r=arguments[1],i=0,s=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;while(i<s)i in n&&t.call(r,n[i],i,n),i++}),Array.prototype.map||(Array.prototype.map=function(t){var n=D(this),r=n.length>>>0,i=Array(r),s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&(i[o]=t.call(s,n[o],o,n));return i}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=D(this),r=n.length>>>0,i=[],s=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var o=0;o<r;o++)o in n&&t.call(s,n[o],o,n)&&i.push(n[o]);return i}),Array.prototype.every||(Array.prototype.every=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&!t.call(i,n[s],s,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=D(this),r=n.length>>>0,i=arguments[1];if(u(t)!="[object Function]")throw new TypeError;for(var s=0;s<r;s++)if(s in n&&t.call(i,n[s],s,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i=0,s;if(arguments.length>=2)s=arguments[1];else do{if(i in n){s=n[i++];break}if(++i>=r)throw new TypeError}while(!0);for(;i<r;i++)i in n&&(s=t.call(void 0,s,n[i],i,n));return s}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=D(this),r=n.length>>>0;if(u(t)!="[object Function]")throw new TypeError;if(!r&&arguments.length==1)throw new TypeError;var i,s=r-1;if(arguments.length>=2)i=arguments[1];else do{if(s in n){i=n[s--];break}if(--s<0)throw new TypeError}while(!0);do s in this&&(i=t.call(void 0,i,n[s],s,n));while(s--);return i}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=M(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){var n=D(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,M(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:s)});if(!Object.getOwnPropertyDescriptor){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(d+t);if(!a(t,n))return;var r,i,o;r={enumerable:!0,configurable:!0};if(p){var u=t.__proto__;t.__proto__=s;var i=c(t,n),o=h(t,n);t.__proto__=u;if(i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var v;Object.prototype.__proto__===null?v=function(){return{__proto__:null}}:v=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=v();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var g=m({}),y=typeof document=="undefined"||m(document.createElement("div"));if(!g||!y)var b=Object.defineProperty}if(!Object.defineProperty||b){var w="Property description must be an object: ",E="Object.defineProperty called on non-object: ",S="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(E+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(w+r);if(b)try{return b.call(Object,t,n,r)}catch(i){}if(a(r,"value"))if(p&&(c(t,n)||h(t,n))){var o=t.__proto__;t.__proto__=s,delete t[n],t[n]=r.value,t.__proto__=o}else t[n]=r.value;else{if(!p)throw new TypeError(S);a(r,"get")&&f(t,n,r.get),a(r,"set")&&l(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)a(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(x){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(a(t,n))n+="?";t[n]=!0;var r=a(t,n);return delete t[n],r});if(!Object.keys){var T=!0,N=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],C=N.length;for(var k in{toString:null})T=!1;Object.keys=function P(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var P=[];for(var t in e)a(e,t)&&P.push(t);if(T)for(var n=0,r=C;n<r;n++){var i=N[n];a(e,i)&&P.push(i)}return P}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var t,n,r,i;if(!isFinite(this))throw new RangeError;t=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],i=this.getUTCFullYear(),i=(i<0?"-":i>9999?"+":"")+("00000"+Math.abs(i)).slice(0<=i&&i<=9999?-4:-6),n=t.length;while(n--)r=t[n],r<10&&(t[n]="0"+r);return i+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(t){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(e){var t=function i(t,n,r,s,o,u,a){var f=arguments.length;if(this instanceof e){var l=f==1&&String(t)===t?new e(i.parse(t)):f>=7?new e(t,n,r,s,o,u,a):f>=6?new e(t,n,r,s,o,u):f>=5?new e(t,n,r,s,o):f>=4?new e(t,n,r,s):f>=3?new e(t,n,r):f>=2?new e(t,n):f>=1?new e(t):new e;return l.constructor=i,l}return e.apply(this,arguments)},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var r in e)t[r]=e[r];return t.now=e.now,t.UTC=e.UTC,t.prototype=e.prototype,t.prototype.constructor=t,t.parse=function(r){var i=n.exec(r);if(i){i.shift();for(var s=1;s<7;s++)i[s]=+(i[s]||(s<3?1:0)),s==1&&i[s]--;var o=+i.pop(),u=+i.pop(),a=i.pop(),f=0;if(a){if(u>23||o>59)return NaN;f=(u*60+o)*6e4*(a=="+"?-1:1)}var l=+i[0];return 0<=l&&l<=99?(i[0]=l+400,e.UTC.apply(this,i)+f-126227808e5):e.UTC.apply(this,i)+f}return e.parse.apply(this,arguments)},t}(Date));var L=" \n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||L.trim()){L="["+L+"]";var A=new RegExp("^"+L+L+"*"),O=new RegExp(L+L+"*$");String.prototype.trim=function(){return String(this).replace(A,"").replace(O,"")}}var M=function(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},_="a"[0]!="a",D=function(e){if(e==null)throw new TypeError;return _&&typeof e=="string"&&e?e.split(""):Object(e)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){var r={};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=function(){this.propagationStopped=!0}),t.preventDefault||(t.preventDefault=function(){this.defaultPrevented=!0});for(var i=0;i<n.length;i++){n[i](t);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t)},r.setDefaultHandler=function(e,t){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[e])throw new Error("The default handler for '"+e+"' is already set");this._defaultHandlers[e]=t},r.on=r.addEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];n||(n=this._eventRegistry[e]=[]),n.indexOf(t)==-1&&n.push(t)},r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/lib/oop",["require","exports","module"],function(e,t,n){t.inherits=function(){var e=function(){};return function(t,n){e.prototype=n.prototype,t.super_=n.prototype,t.prototype=new e,t.prototype.constructor=t}}(),t.mixin=function(e,t){for(var n in t)e[n]=t[n]},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/mode/xquery_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/xquery/JSONParseTreeHandler","ace/mode/xquery/XQueryParser","ace/mode/xquery/visitors/SyntaxHighlighter"],function(e,t,n){var r=e("../lib/oop"),i=e("../worker/mirror").Mirror,s=e("./xquery/JSONParseTreeHandler").JSONParseTreeHandler,o=e("./xquery/XQueryParser").XQueryParser,u=e("../mode/xquery/visitors/SyntaxHighlighter").SyntaxHighlighter,a=t.XQueryWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(a,i),function(){this.onUpdate=function(){this.sender.emit("start");var e=this.doc.getValue(),t=new s,n=new o(e,t);try{n.parse_XQuery();var r=t.getParseTree();this.sender.emit("ok");var i=new u(e,r),a=i.getTokens();this.sender.emit("highlight",a)}catch(f){var l=e.substring(0,f.getBegin()),c=l.split("\n").length,h=f.getBegin()-l.lastIndexOf("\n"),p=n.getErrorMessage(f);this.sender.emit("error",{row:c-1,column:h,text:p,type:"error"})}}}.call(a.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.deferredCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas([e.data]),n.schedule(s.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length==0?this.$lines=[""]:Array.isArray(e)?this.insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length==0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.$lines[e.start.row].substring(e.start.column,e.end.column);var t=this.getLines(e.start.row+1,e.end.row-1);return t.unshift((this.$lines[e.start.row]||"").substring(e.start.column)),t.push((this.$lines[e.end.row]||"").substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t&&(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this.insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){if(t.length==0)return{row:e,column:0};if(t.length>65535){var n=this.insertLines(e,t.slice(65535));t=t.slice(0,65535)}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._emit("change",{data:o}),n||i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._emit("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._emit("change",{data:i}),r},this.remove=function(e){e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this.removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._emit("change",{data:a}),r.start},this.removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._emit("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._emit("change",{data:o})},this.replace=function(e,t){if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this.insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}}}).call(u.prototype),t.Document=u}),define("ace/range",["require","exports","module"],function(e,t,n){var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row==e.start.row&&this.end.row==e.end.row&&this.start.column==e.start.column&&this.end.column==e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};if(this.start.row>t)var i={row:t+1,column:0};if(this.start.row<e)var i={row:e,column:0};if(this.end.row<e)var n={row:e,column:0};return r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var i={row:e,column:t};else var s={row:e,column:t};return r.fromPoints(i||this.start,s||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},t.Range=r}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.document=e,typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n),this.$onChange=this.onChange.bind(this),e.on("change",this.$onChange)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column;t.action==="insertText"?n.start.row===r&&n.start.column<=i?n.start.row===n.end.row?i+=n.end.column-n.start.column:(i-=n.start.column,r+=n.end.row-n.start.row):n.start.row!==n.end.row&&n.start.row<r&&(r+=n.end.row-n.start.row):t.action==="insertLines"?n.start.row<=r&&(r+=n.end.row-n.start.row):t.action=="removeText"?n.start.row==r&&n.start.column<i?n.end.column>=i?i=n.start.column:i=Math.max(0,i-(n.end.column-n.start.column)):n.start.row!==n.end.row&&n.start.row<r?(n.end.row==r&&(i=Math.max(0,i-n.end.column)+n.start.column),r-=n.end.row-n.start.row):n.end.row==r&&(r-=n.end.row-n.start.row,i=Math.max(0,i-n.end.column)+n.start.column):t.action=="removeLines"&&n.start.row<=r&&(n.end.row<=r?r-=n.end.row-n.start.row:(r=n.start.row,i=0)),this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._emit("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){return(new Array(t+1)).join(e)};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object")return e;var t=e.constructor();for(var n in e)typeof e[n]=="object"?t[n]=this.deepCopy(e[n]):t[n]=e[n];return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)};return i.delay=i,i.schedule=function(e){n==null&&(n=setTimeout(r,e||0))},i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/mode/xquery/JSONParseTreeHandler",["require","exports","module"],function(e,t,n){var r=t.JSONParseTreeHandler=function(){function n(e){return{name:e,children:[],getParent:null}}function r(r,i){var s=n(r);s.begin=i,e===null?(e=s,t=s):(s.getParent=t,t.children.push(s),t=t.children[t.children.length-1])}function i(e,n){t.end=n;if(t.getParent!==null){t=t.getParent;for(var r in t.children)delete t.children[r].getParent}else delete t.getParent}var e=null,t=null;this.getParseTree=function(){return e},this.reset=function(e){},this.startNonterminal=function(e,t){r(e,t)},this.endNonterminal=function(e,t){i(e,t)},this.terminal=function(e,t,n){var e=e.substring(0,1)==="'"&&e.substring(e.length-1)==="'"?"TOKEN":e;r(e,t),i(e,n)},this.whitespace=function(e,t){var n="WS";r(n,e),i(n,t)}}}),define("ace/mode/xquery/XQueryParser",["require","exports","module"],function(e,t,n){var r=t.XQueryParser=function i(e,t){function n(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?"lexical analysis failed":"syntax error"}}function r(e,t){Cl=t,Il=e,ql=e.length,s(0,0,0)}function s(e,t,n){hl=t,pl=t,dl=e,vl=t,ml=n,gl=0,Ul=n,El=-1,Nl=new Object,Cl.reset(Il)}function o(){Cl.startNonterminal("Module",pl);switch(dl){case 274:Bl(199);break;default:cl=dl}(cl==64274||cl==134930)&&u(),Hl(267);switch(dl){case 182:Bl(194);break;default:cl=dl}switch(cl){case 94390:Dl(),a();break;default:Dl(),Ha()}Cl.endNonterminal("Module",pl)}function u(){Cl.startNonterminal("VersionDecl",pl),Ol(274),Hl(116);switch(dl){case 125:Ol(125),Hl(17),Ol(11);break;default:Ol(263),Hl(17),Ol(11),Hl(109),dl==125&&(Ol(125),Hl(17),Ol(11))}Hl(28),Dl(),c(),Cl.endNonterminal("VersionDecl",pl)}function a(){Cl.startNonterminal("LibraryModule",pl),f(),Hl(138),Dl(),l(),Cl.endNonterminal("LibraryModule",pl)}function f(){Cl.startNonterminal("ModuleDecl",pl),Ol(182),Hl(61),Ol(184),Hl(250),Dl(),Da(),Hl(29),Ol(60),Hl(15),Ol(7),Hl(28),Dl(),c(),Cl.endNonterminal("ModuleDecl",pl)}function l(){Cl.startNonterminal("Prolog",pl);for(;;){Hl(267);switch(dl){case 108:Bl(213);break;case 153:Bl(201);break;default:cl=dl}if(cl!=42604&&cl!=43628&&cl!=50284&&cl!=53356&&cl!=54380&&cl!=55916&&cl!=72300&&cl!=93337&&cl!=94316&&cl!=104044&&cl!=113772&&cl!=115353)break;switch(dl){case 108:Bl(179);break;default:cl=dl}if(cl==55916){cl=Ll(0,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{_(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(0,pl,cl)}}switch(cl){case-1:Dl(),M();break;case 94316:Dl(),O();break;case 153:Dl(),C();break;case 72300:Dl(),D();break;default:Dl(),h()}Hl(28),Dl(),c()}for(;;){Hl(267);switch(dl){case 108:Bl(210);break;default:cl=dl}if(cl!=16492&&cl!=48748&&cl!=51820&&cl!=74348&&cl!=79468&&cl!=82540&&cl!=101996&&cl!=131692&&cl!=134252)break;switch(dl){case 108:Bl(175);break;default:cl=dl}switch(cl){case 51820:Dl(),R();break;case 101996:Dl(),Q();break;default:Dl(),P()}Hl(28),Dl(),c()}Cl.endNonterminal("Prolog",pl)}function c(){Cl.startNonterminal("Separator",pl),Ol(53),Cl.endNonterminal("Separator",pl)}function h(){Cl.startNonterminal("Setter",pl);switch(dl){case 108:Bl(172);break;default:cl=dl}if(cl==55916){cl=Ll(1,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{v(),cl=-2}catch(a){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),w(),cl=-6}catch(f){cl=-9}}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(1,pl,cl)}}switch(cl){case 43628:p();break;case-2:d();break;case 42604:m();break;case 50284:g();break;case 104044:y();break;case-6:b();break;case 113772:xo();break;case 53356:E();break;default:T()}Cl.endNonterminal("Setter",pl)}function p(){Cl.startNonterminal("BoundarySpaceDecl",pl),Ol(108),Hl(33),Ol(85),Hl(133);switch(dl){case 214:Ol(214);break;default:Ol(241)}Cl.endNonterminal("BoundarySpaceDecl",pl)}function d(){Cl.startNonterminal("DefaultCollationDecl",pl),Ol(108),Hl(46),Ol(109),Hl(38),Ol(94),Hl(15),Ol(7),Cl.endNonterminal("DefaultCollationDecl",pl)}function v(){Ml(108),Hl(46),Ml(109),Hl(38),Ml(94),Hl(15),Ml(7)}function m(){Cl.startNonterminal("BaseURIDecl",pl),Ol(108),Hl(32),Ol(83),Hl(15),Ol(7),Cl.endNonterminal("BaseURIDecl",pl)}function g(){Cl.startNonterminal("ConstructionDecl",pl),Ol(108),Hl(41),Ol(98),Hl(133);switch(dl){case 241:Ol(241);break;default:Ol(214)}Cl.endNonterminal("ConstructionDecl",pl)}function y(){Cl.startNonterminal("OrderingModeDecl",pl),Ol(108),Hl(68),Ol(203),Hl(131);switch(dl){case 202:Ol(202);break;default:Ol(256)}Cl.endNonterminal("OrderingModeDecl",pl)}function b(){Cl.startNonterminal("EmptyOrderDecl",pl),Ol(108),Hl(46),Ol(109),Hl(67),Ol(201),Hl(49),Ol(123),Hl(121);switch(dl){case 147:Ol(147);break;default:Ol(173)}Cl.endNonterminal("EmptyOrderDecl",pl)}function w(){Ml(108),Hl(46),Ml(109),Hl(67),Ml(201),Hl(49),Ml(123),Hl(121);switch(dl){case 147:Ml(147);break;default:Ml(173)}}function E(){Cl.startNonterminal("CopyNamespacesDecl",pl),Ol(108),Hl(44),Ol(104),Hl(128),Dl(),S(),Hl(25),Ol(41),Hl(123),Dl(),x(),Cl.endNonterminal("CopyNamespacesDecl",pl)}function S(){Cl.startNonterminal("PreserveMode",pl);switch(dl){case 214:Ol(214);break;default:Ol(190)}Cl.endNonterminal("PreserveMode",pl)}function x(){Cl.startNonterminal("InheritMode",pl);switch(dl){case 157:Ol(157);break;default:Ol(189)}Cl.endNonterminal("InheritMode",pl)}function T(){Cl.startNonterminal("DecimalFormatDecl",pl),Ol(108),Hl(114);switch(dl){case 106:Ol(106),Hl(249),Dl(),Aa();break;default:Ol(109),Hl(45),Ol(106)}for(;;){Hl(181);if(dl==53)break;Dl(),N(),Hl(29),Ol(60),Hl(17),Ol(11)}Cl.endNonterminal("DecimalFormatDecl",pl)}function N(){Cl.startNonterminal("DFPropertyName",pl);switch(dl){case 107:Ol(107);break;case 149:Ol(149);break;case 156:Ol(156);break;case 179:Ol(179);break;case 67:Ol(67);break;case 209:Ol(209);break;case 208:Ol(208);break;case 275:Ol(275);break;case 116:Ol(116);break;default:Ol(207)}Cl.endNonterminal("DFPropertyName",pl)}function C(){Cl.startNonterminal("Import",pl);switch(dl){case 153:Bl(126);break;default:cl=dl}switch(cl){case 115353:k();break;default:A()}Cl.endNonterminal("Import",pl)}function k(){Cl.startNonterminal("SchemaImport",pl),Ol(153),Hl(73),Ol(225),Hl(137),dl!=7&&(Dl(),L()),Hl(15),Ol(7),Hl(108);if(dl==81){Ol(81),Hl(15),Ol(7);for(;;){Hl(103);if(dl!=41)break;Ol(41),Hl(15),Ol(7)}}Cl.endNonterminal("SchemaImport",pl)}function L(){Cl.startNonterminal("SchemaPrefix",pl);switch(dl){case 184:Ol(184),Hl(250),Dl(),Da(),Hl(29),Ol(60);break;default:Ol(109),Hl(47),Ol(121),Hl(61),Ol(184)}Cl.endNonterminal("SchemaPrefix",pl)}function A(){Cl.startNonterminal("ModuleImport",pl),Ol(153),Hl(60),Ol(182),Hl(90),dl==184&&(Ol(184),Hl(250),Dl(),Da(),Hl(29),Ol(60)),Hl(15),Ol(7),Hl(108);if(dl==81){Ol(81),Hl(15),Ol(7);for(;;){Hl(103);if(dl!=41)break;Ol(41),Hl(15),Ol(7)}}Cl.endNonterminal("ModuleImport",pl)}function O(){Cl.startNonterminal("NamespaceDecl",pl),Ol(108),Hl(61),Ol(184),Hl(250),Dl(),Da(),Hl(29),Ol(60),Hl(15),Ol(7),Cl.endNonterminal("NamespaceDecl",pl)}function M(){Cl.startNonterminal("DefaultNamespaceDecl",pl),Ol(108),Hl(46),Ol(109),Hl(115);switch(dl){case 121:Ol(121);break;default:Ol(145)}Hl(61),Ol(184),Hl(15),Ol(7),Cl.endNonterminal("DefaultNamespaceDecl",pl)}function _(){Ml(108),Hl(46),Ml(109),Hl(115);switch(dl){case 121:Ml(121);break;default:Ml(145)}Hl(61),Ml(184),Hl(15),Ml(7)}function D(){Cl.startNonterminal("FTOptionDecl",pl),Ol(108),Hl(52),Ol(141),Hl(81),Dl(),_u(),Cl.endNonterminal("FTOptionDecl",pl)}function P(){Cl.startNonterminal("AnnotatedDecl",pl),Ol(108);for(;;){Hl(170);if(dl!=32&&dl!=257)break;switch(dl){case 257:Dl(),H();break;default:Dl(),B()}}switch(dl){case 262:Dl(),F();break;case 145:Dl(),ll();break;case 95:Dl(),aa();break;case 155:Dl(),ga();break;default:Dl(),ya()}Cl.endNonterminal("AnnotatedDecl",pl)}function H(){Cl.startNonterminal("CompatibilityAnnotation",pl),Ol(257),Cl.endNonterminal("CompatibilityAnnotation",pl)}function B(){Cl.startNonterminal("Annotation",pl),Ol(32),Hl(249),Dl(),Aa(),Hl(171);if(dl==34){Ol(34),Hl(154),Dl(),ni();for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(154),Dl(),ni()}Ol(37)}Cl.endNonterminal("Annotation",pl)}function j(){Ml(32),Hl(249),Oa(),Hl(171);if(dl==34){Ml(34),Hl(154),ri();for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(154),ri()}Ml(37)}}function F(){Cl.startNonterminal("VarDecl",pl),Ol(262),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(147),dl==79&&(Dl(),ls()),Hl(106);switch(dl){case 52:Ol(52),Hl(266),Dl(),I();break;default:Ol(133),Hl(104),dl==52&&(Ol(52),Hl(266),Dl(),q())}Cl.endNonterminal("VarDecl",pl)}function I(){Cl.startNonterminal("VarValue",pl),Tf(),Cl.endNonterminal("VarValue",pl)}function q(){Cl.startNonterminal("VarDefaultValue",pl),Tf(),Cl.endNonterminal("VarDefaultValue",pl)}function R(){Cl.startNonterminal("ContextItemDecl",pl),Ol(108),Hl(43),Ol(101),Hl(55),Ol(165),Hl(147),dl==79&&(Ol(79),Hl(259),Dl(),ms()),Hl(106);switch(dl){case 52:Ol(52),Hl(266),Dl(),I();break;default:Ol(133),Hl(104),dl==52&&(Ol(52),Hl(266),Dl(),q())}Cl.endNonterminal("ContextItemDecl",pl)}function U(){Cl.startNonterminal("ParamList",pl),W();for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(21),Dl(),W()}Cl.endNonterminal("ParamList",pl)}function z(){X();for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(21),X()}}function W(){Cl.startNonterminal("Param",pl),Ol(31),Hl(249),Dl(),Aa(),Hl(143),dl==79&&(Dl(),ls()),Cl.endNonterminal("Param",pl)}function X(){Ml(31),Hl(249),Oa(),Hl(143),dl==79&&cs()}function V(){Cl.startNonterminal("FunctionBody",pl),J(),Cl.endNonterminal("FunctionBody",pl)}function $(){K()}function J(){Cl.startNonterminal("EnclosedExpr",pl),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("EnclosedExpr",pl)}function K(){Ml(276),Hl(266),Y(),Ml(282)}function Q(){Cl.startNonterminal("OptionDecl",pl),Ol(108),Hl(66),Ol(199),Hl(249),Dl(),Aa(),Hl(17),Ol(11),Cl.endNonterminal("OptionDecl",pl)}function G(){Cl.startNonterminal("Expr",pl),Tf();for(;;){if(dl!=41)break;Ol(41),Hl(266),Dl(),Tf()}Cl.endNonterminal("Expr",pl)}function Y(){Nf();for(;;){if(dl!=41)break;Ml(41),Hl(266),Nf()}}function Z(){Cl.startNonterminal("FLWORExpr",pl),tt();for(;;){Hl(173);if(dl==220)break;Dl(),rt()}Dl(),tn(),Cl.endNonterminal("FLWORExpr",pl)}function et(){nt();for(;;){Hl(173);if(dl==220)break;it()}nn()}function tt(){Cl.startNonterminal("InitialClause",pl);switch(dl){case 137:Bl(141);break;default:cl=dl}switch(cl){case 16009:st();break;case 174:vt();break;default:bt()}Cl.endNonterminal("InitialClause",pl)}function nt(){switch(dl){case 137:Bl(141);break;default:cl=dl}switch(cl){case 16009:ot();break;case 174:mt();break;default:wt()}}function rt(){Cl.startNonterminal("IntermediateClause",pl);switch(dl){case 137:case 174:tt();break;case 266:It();break;case 148:Rt();break;case 105:jt();break;default:$t()}Cl.endNonterminal("IntermediateClause",pl)}function it(){switch(dl){case 137:case 174:nt();break;case 266:qt();break;case 148:Ut();break;case 105:Ft();break;default:Jt()}}function st(){Cl.startNonterminal("ForClause",pl),Ol(137),Hl(21),Dl(),ut();for(;;){if(dl!=41)break;Ol(41),Hl(21),Dl(),ut()}Cl.endNonterminal("ForClause",pl)}function ot(){Ml(137),Hl(21),at();for(;;){if(dl!=41)break;Ml(41),Hl(21),at()}}function ut(){Cl.startNonterminal("ForBinding",pl),Ol(31),Hl(249),Dl(),ai(),Hl(164),dl==79&&(Dl(),ls()),Hl(158),dl==72&&(Dl(),ft()),Hl(150),dl==81&&(Dl(),ct()),Hl(122),dl==228&&(Dl(),pt()),Hl(53),Ol(154),Hl(266),Dl(),Tf(),Cl.endNonterminal("ForBinding",pl)}function at(){Ml(31),Hl(249),fi(),Hl(164),dl==79&&cs(),Hl(158),dl==72&<(),Hl(150),dl==81&&ht(),Hl(122),dl==228&&dt(),Hl(53),Ml(154),Hl(266),Nf()}function ft(){Cl.startNonterminal("AllowingEmpty",pl),Ol(72),Hl(49),Ol(123),Cl.endNonterminal("AllowingEmpty",pl)}function lt(){Ml(72),Hl(49),Ml(123)}function ct(){Cl.startNonterminal("PositionalVar",pl),Ol(81),Hl(21),Ol(31),Hl(249),Dl(),ai(),Cl.endNonterminal("PositionalVar",pl)}function ht(){Ml(81),Hl(21),Ml(31),Hl(249),fi()}function pt(){Cl.startNonterminal("FTScoreVar",pl),Ol(228),Hl(21),Ol(31),Hl(249),Dl(),ai(),Cl.endNonterminal("FTScoreVar",pl)}function dt(){Ml(228),Hl(21),Ml(31),Hl(249),fi()}function vt(){Cl.startNonterminal("LetClause",pl),Ol(174),Hl(96),Dl(),gt();for(;;){if(dl!=41)break;Ol(41),Hl(96),Dl(),gt()}Cl.endNonterminal("LetClause",pl)}function mt(){Ml(174),Hl(96),yt();for(;;){if(dl!=41)break;Ml(41),Hl(96),yt()}}function gt(){Cl.startNonterminal("LetBinding",pl);switch(dl){case 31:Ol(31),Hl(249),Dl(),ai(),Hl(105),dl==79&&(Dl(),ls());break;default:pt()}Hl(27),Ol(52),Hl(266),Dl(),Tf(),Cl.endNonterminal("LetBinding",pl)}function yt(){switch(dl){case 31:Ml(31),Hl(249),fi(),Hl(105),dl==79&&cs();break;default:dt()}Hl(27),Ml(52),Hl(266),Nf()}function bt(){Cl.startNonterminal("WindowClause",pl),Ol(137),Hl(135);switch(dl){case 251:Dl(),Et();break;default:Dl(),xt()}Cl.endNonterminal("WindowClause",pl)}function wt(){Ml(137),Hl(135);switch(dl){case 251:St();break;default:Tt()}}function Et(){Cl.startNonterminal("TumblingWindowClause",pl),Ol(251),Hl(85),Ol(269),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(110),dl==79&&(Dl(),ls()),Hl(53),Ol(154),Hl(266),Dl(),Tf(),Dl(),Nt();if(dl==126||dl==198)Dl(),kt();Cl.endNonterminal("TumblingWindowClause",pl)}function St(){Ml(251),Hl(85),Ml(269),Hl(21),Ml(31),Hl(249),fi(),Hl(110),dl==79&&cs(),Hl(53),Ml(154),Hl(266),Nf(),Ct(),(dl==126||dl==198)&&Lt()}function xt(){Cl.startNonterminal("SlidingWindowClause",pl),Ol(234),Hl(85),Ol(269),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(110),dl==79&&(Dl(),ls()),Hl(53),Ol(154),Hl(266),Dl(),Tf(),Dl(),Nt(),Dl(),kt(),Cl.endNonterminal("SlidingWindowClause",pl)}function Tt(){Ml(234),Hl(85),Ml(269),Hl(21),Ml(31),Hl(249),fi(),Hl(110),dl==79&&cs(),Hl(53),Ml(154),Hl(266),Nf(),Ct(),Lt()}function Nt(){Cl.startNonterminal("WindowStartCondition",pl),Ol(237),Hl(163),Dl(),At(),Hl(83),Ol(265),Hl(266),Dl(),Tf(),Cl.endNonterminal("WindowStartCondition",pl)}function Ct(){Ml(237),Hl(163),Ot(),Hl(83),Ml(265),Hl(266),Nf()}function kt(){Cl.startNonterminal("WindowEndCondition",pl),dl==198&&Ol(198),Hl(50),Ol(126),Hl(163),Dl(),At(),Hl(83),Ol(265),Hl(266),Dl(),Tf(),Cl.endNonterminal("WindowEndCondition",pl)}function Lt(){dl==198&&Ml(198),Hl(50),Ml(126),Hl(163),Ot(),Hl(83),Ml(265),Hl(266),Nf()}function At(){Cl.startNonterminal("WindowVars",pl),dl==31&&(Ol(31),Hl(249),Dl(),Mt()),Hl(159),dl==81&&(Dl(),ct()),Hl(153),dl==215&&(Ol(215),Hl(21),Ol(31),Hl(249),Dl(),Dt()),Hl(127),dl==187&&(Ol(187),Hl(21),Ol(31),Hl(249),Dl(),Ht()),Cl.endNonterminal("WindowVars",pl)}function Ot(){dl==31&&(Ml(31),Hl(249),_t()),Hl(159),dl==81&&ht(),Hl(153),dl==215&&(Ml(215),Hl(21),Ml(31),Hl(249),Pt()),Hl(127),dl==187&&(Ml(187),Hl(21),Ml(31),Hl(249),Bt())}function Mt(){Cl.startNonterminal("CurrentItem",pl),Aa(),Cl.endNonterminal("CurrentItem",pl)}function _t(){Oa()}function Dt(){Cl.startNonterminal("PreviousItem",pl),Aa(),Cl.endNonterminal("PreviousItem",pl)}function Pt(){Oa()}function Ht(){Cl.startNonterminal("NextItem",pl),Aa(),Cl.endNonterminal("NextItem",pl)}function Bt(){Oa()}function jt(){Cl.startNonterminal("CountClause",pl),Ol(105),Hl(21),Ol(31),Hl(249),Dl(),ai(),Cl.endNonterminal("CountClause",pl)}function Ft(){Ml(105),Hl(21),Ml(31),Hl(249),fi()}function It(){Cl.startNonterminal("WhereClause",pl),Ol(266),Hl(266),Dl(),Tf(),Cl.endNonterminal("WhereClause",pl)}function qt(){Ml(266),Hl(266),Nf()}function Rt(){Cl.startNonterminal("GroupByClause",pl),Ol(148),Hl(34),Ol(87),Hl(21),Dl(),zt(),Cl.endNonterminal("GroupByClause",pl)}function Ut(){Ml(148),Hl(34),Ml(87),Hl(21),Wt()}function zt(){Cl.startNonterminal("GroupingSpecList",pl),Xt();for(;;){Hl(176);if(dl!=41)break;Ol(41),Hl(21),Dl(),Xt()}Cl.endNonterminal("GroupingSpecList",pl)}function Wt(){Vt();for(;;){Hl(176);if(dl!=41)break;Ml(41),Hl(21),Vt()}}function Xt(){Cl.startNonterminal("GroupingSpec",pl),Ol(31),Hl(249),Dl(),ai(),Hl(183);if(dl==52||dl==79)dl==79&&(Dl(),ls()),Hl(27),Ol(52),Hl(266),Dl(),Tf();dl==94&&(Ol(94),Hl(15),Ol(7)),Cl.endNonterminal("GroupingSpec",pl)}function Vt(){Ml(31),Hl(249),fi(),Hl(183);if(dl==52||dl==79)dl==79&&cs(),Hl(27),Ml(52),Hl(266),Nf();dl==94&&(Ml(94),Hl(15),Ml(7))}function $t(){Cl.startNonterminal("OrderByClause",pl);switch(dl){case 201:Ol(201),Hl(34),Ol(87);break;default:Ol(236),Hl(67),Ol(201),Hl(34),Ol(87)}Hl(266),Dl(),Kt(),Cl.endNonterminal("OrderByClause",pl)}function Jt(){switch(dl){case 201:Ml(201),Hl(34),Ml(87);break;default:Ml(236),Hl(67),Ml(201),Hl(34),Ml(87)}Hl(266),Qt()}function Kt(){Cl.startNonterminal("OrderSpecList",pl),Gt();for(;;){Hl(176);if(dl!=41)break;Ol(41),Hl(266),Dl(),Gt()}Cl.endNonterminal("OrderSpecList",pl)}function Qt(){Yt();for(;;){Hl(176);if(dl!=41)break;Ml(41),Hl(266),Yt()}}function Gt(){Cl.startNonterminal("OrderSpec",pl),Tf(),Dl(),Zt(),Cl.endNonterminal("OrderSpec",pl)}function Yt(){Nf(),en()}function Zt(){Cl.startNonterminal("OrderModifier",pl);if(dl==80||dl==113)switch(dl){case 80:Ol(80);break;default:Ol(113)}Hl(180);if(dl==123){Ol(123),Hl(121);switch(dl){case 147:Ol(147);break;default:Ol(173)}}Hl(177),dl==94&&(Ol(94),Hl(15),Ol(7)),Cl.endNonterminal("OrderModifier",pl)}function en(){if(dl==80||dl==113)switch(dl){case 80:Ml(80);break;default:Ml(113)}Hl(180);if(dl==123){Ml(123),Hl(121);switch(dl){case 147:Ml(147);break;default:Ml(173)}}Hl(177),dl==94&&(Ml(94),Hl(15),Ml(7))}function tn(){Cl.startNonterminal("ReturnClause",pl),Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("ReturnClause",pl)}function nn(){Ml(220),Hl(266),Nf()}function rn(){Cl.startNonterminal("QuantifiedExpr",pl);switch(dl){case 235:Ol(235);break;default:Ol(129)}Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(110),dl==79&&(Dl(),ls()),Hl(53),Ol(154),Hl(266),Dl(),Tf();for(;;){if(dl!=41)break;Ol(41),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(110),dl==79&&(Dl(),ls()),Hl(53),Ol(154),Hl(266),Dl(),Tf()}Ol(224),Hl(266),Dl(),Tf(),Cl.endNonterminal("QuantifiedExpr",pl)}function sn(){switch(dl){case 235:Ml(235);break;default:Ml(129)}Hl(21),Ml(31),Hl(249),fi(),Hl(110),dl==79&&cs(),Hl(53),Ml(154),Hl(266),Nf();for(;;){if(dl!=41)break;Ml(41),Hl(21),Ml(31),Hl(249),fi(),Hl(110),dl==79&&cs(),Hl(53),Ml(154),Hl(266),Nf()}Ml(224),Hl(266),Nf()}function on(){Cl.startNonterminal("SwitchExpr",pl),Ol(243),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37);for(;;){Hl(35),Dl(),an();if(dl!=88)break}Ol(109),Hl(70),Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("SwitchExpr",pl)}function un(){Ml(243),Hl(22),Ml(34),Hl(266),Y(),Ml(37);for(;;){Hl(35),fn();if(dl!=88)break}Ml(109),Hl(70),Ml(220),Hl(266),Nf()}function an(){Cl.startNonterminal("SwitchCaseClause",pl);for(;;){Ol(88),Hl(266),Dl(),ln();if(dl!=88)break}Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("SwitchCaseClause",pl)}function fn(){for(;;){Ml(88),Hl(266),cn();if(dl!=88)break}Ml(220),Hl(266),Nf()}function ln(){Cl.startNonterminal("SwitchCaseOperand",pl),Tf(),Cl.endNonterminal("SwitchCaseOperand",pl)}function cn(){Nf()}function hn(){Cl.startNonterminal("TypeswitchExpr",pl),Ol(253),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37);for(;;){Hl(35),Dl(),dn();if(dl!=88)break}Ol(109),Hl(95),dl==31&&(Ol(31),Hl(249),Dl(),ai()),Hl(70),Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("TypeswitchExpr",pl)}function pn(){Ml(253),Hl(22),Ml(34),Hl(266),Y(),Ml(37);for(;;){Hl(35),vn();if(dl!=88)break}Ml(109),Hl(95),dl==31&&(Ml(31),Hl(249),fi()),Hl(70),Ml(220),Hl(266),Nf()}function dn(){Cl.startNonterminal("CaseClause",pl),Ol(88),Hl(260),dl==31&&(Ol(31),Hl(249),Dl(),ai(),Hl(30),Ol(79)),Hl(259),Dl(),mn(),Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("CaseClause",pl)}function vn(){Ml(88),Hl(260),dl==31&&(Ml(31),Hl(249),fi(),Hl(30),Ml(79)),Hl(259),gn(),Ml(220),Hl(266),Nf()}function mn(){Cl.startNonterminal("SequenceTypeUnion",pl),hs();for(;;){Hl(134);if(dl!=279)break;Ol(279),Hl(259),Dl(),hs()}Cl.endNonterminal("SequenceTypeUnion",pl)}function gn(){ps();for(;;){Hl(134);if(dl!=279)break;Ml(279),Hl(259),ps()}}function yn(){Cl.startNonterminal("IfExpr",pl),Ol(152),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37),Hl(77),Ol(245),Hl(266),Dl(),Tf(),Ol(122),Hl(266),Dl(),Tf(),Cl.endNonterminal("IfExpr",pl)}function bn(){Ml(152),Hl(22),Ml(34),Hl(266),Y(),Ml(37),Hl(77),Ml(245),Hl(266),Nf(),Ml(122),Hl(266),Nf()}function wn(){Cl.startNonterminal("TryCatchExpr",pl),Sn();for(;;){Hl(36),Dl(),Cn(),Hl(184);if(dl!=91)break}Cl.endNonterminal("TryCatchExpr",pl)}function En(){xn();for(;;){Hl(36),kn(),Hl(184);if(dl!=91)break}}function Sn(){Cl.startNonterminal("TryClause",pl),Ol(250),Hl(87),Ol(276),Hl(266),Dl(),Tn(),Ol(282),Cl.endNonterminal("TryClause",pl)}function xn(){Ml(250),Hl(87),Ml(276),Hl(266),Nn(),Ml(282)}function Tn(){Cl.startNonterminal("TryTargetExpr",pl),G(),Cl.endNonterminal("TryTargetExpr",pl)}function Nn(){Y()}function Cn(){Cl.startNonterminal("CatchClause",pl),Ol(91),Hl(251),Dl(),Ln(),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("CatchClause",pl)}function kn(){Ml(91),Hl(251),An(),Ml(276),Hl(266),Y(),Ml(282)}function Ln(){Cl.startNonterminal("CatchErrorList",pl),Vr();for(;;){Hl(136);if(dl!=279)break;Ol(279),Hl(251),Dl(),Vr()}Cl.endNonterminal("CatchErrorList",pl)}function An(){$r();for(;;){Hl(136);if(dl!=279)break;Ml(279),Hl(251),$r()}}function On(){Cl.startNonterminal("OrExpr",pl),_n();for(;;){if(dl!=200)break;Ol(200),Hl(265),Dl(),_n()}Cl.endNonterminal("OrExpr",pl)}function Mn(){Dn();for(;;){if(dl!=200)break;Ml(200),Hl(265),Dn()}}function _n(){Cl.startNonterminal("AndExpr",pl),Pn();for(;;){if(dl!=75)break;Ol(75),Hl(265),Dl(),Pn()}Cl.endNonterminal("AndExpr",pl)}function Dn(){Hn();for(;;){if(dl!=75)break;Ml(75),Hl(265),Hn()}}function Pn(){Cl.startNonterminal("ComparisonExpr",pl),Bn();if(dl==27||dl==54||dl==57||dl==58||dl==60||dl==61||dl==62||dl==63||dl==128||dl==146||dl==150||dl==164||dl==172||dl==178||dl==186){switch(dl){case 128:case 146:case 150:case 172:case 178:case 186:Dl(),hr();break;case 57:case 63:case 164:Dl(),dr();break;default:Dl(),lr()}Hl(265),Dl(),Bn()}Cl.endNonterminal("ComparisonExpr",pl)}function Hn(){jn();if(dl==27||dl==54||dl==57||dl==58||dl==60||dl==61||dl==62||dl==63||dl==128||dl==146||dl==150||dl==164||dl==172||dl==178||dl==186){switch(dl){case 128:case 146:case 150:case 172:case 178:case 186:pr();break;case 57:case 63:case 164:vr();break;default:cr()}Hl(265),jn()}}function Bn(){Cl.startNonterminal("FTContainsExpr",pl),Fn(),dl==99&&(Ol(99),Hl(76),Ol(244),Hl(162),Dl(),Uo(),dl==271&&(Dl(),oa())),Cl.endNonterminal("FTContainsExpr",pl)}function jn(){In(),dl==99&&(Ml(99),Hl(76),Ml(244),Hl(162),zo(),dl==271&&ua())}function Fn(){Cl.startNonterminal("StringConcatExpr",pl),qn();for(;;){if(dl!=280)break;Ol(280),Hl(265),Dl(),qn()}Cl.endNonterminal("StringConcatExpr",pl)}function In(){Rn();for(;;){if(dl!=280)break;Ml(280),Hl(265),Rn()}}function qn(){Cl.startNonterminal("RangeExpr",pl),Un(),dl==248&&(Ol(248),Hl(265),Dl(),Un()),Cl.endNonterminal("RangeExpr",pl)}function Rn(){zn(),dl==248&&(Ml(248),Hl(265),zn())}function Un(){Cl.startNonterminal("AdditiveExpr",pl),Wn();for(;;){if(dl!=40&&dl!=42)break;switch(dl){case 40:Ol(40);break;default:Ol(42)}Hl(265),Dl(),Wn()}Cl.endNonterminal("AdditiveExpr",pl)}function zn(){Xn();for(;;){if(dl!=40&&dl!=42)break;switch(dl){case 40:Ml(40);break;default:Ml(42)}Hl(265),Xn()}}function Wn(){Cl.startNonterminal("MultiplicativeExpr",pl),Vn();for(;;){if(dl!=38&&dl!=118&&dl!=151&&dl!=180)break;switch(dl){case 38:Ol(38);break;case 118:Ol(118);break;case 151:Ol(151);break;default:Ol(180)}Hl(265),Dl(),Vn()}Cl.endNonterminal("MultiplicativeExpr",pl)}function Xn(){$n();for(;;){if(dl!=38&&dl!=118&&dl!=151&&dl!=180)break;switch(dl){case 38:Ml(38);break;case 118:Ml(118);break;case 151:Ml(151);break;default:Ml(180)}Hl(265),$n()}}function Vn(){Cl.startNonterminal("UnionExpr",pl),Jn();for(;;){if(dl!=254&&dl!=279)break;switch(dl){case 254:Ol(254);break;default:Ol(279)}Hl(265),Dl(),Jn()}Cl.endNonterminal("UnionExpr",pl)}function $n(){Kn();for(;;){if(dl!=254&&dl!=279)break;switch(dl){case 254:Ml(254);break;default:Ml(279)}Hl(265),Kn()}}function Jn(){Cl.startNonterminal("IntersectExceptExpr",pl),Qn();for(;;){Hl(222);if(dl!=131&&dl!=162)break;switch(dl){case 162:Ol(162);break;default:Ol(131)}Hl(265),Dl(),Qn()}Cl.endNonterminal("IntersectExceptExpr",pl)}function Kn(){Gn();for(;;){Hl(222);if(dl!=131&&dl!=162)break;switch(dl){case 162:Ml(162);break;default:Ml(131)}Hl(265),Gn()}}function Qn(){Cl.startNonterminal("InstanceofExpr",pl),Yn(),Hl(223),dl==160&&(Ol(160),Hl(64),Ol(196),Hl(259),Dl(),hs()),Cl.endNonterminal("InstanceofExpr",pl)}function Gn(){Zn(),Hl(223),dl==160&&(Ml(160),Hl(64),Ml(196),Hl(259),ps())}function Yn(){Cl.startNonterminal("TreatExpr",pl),er(),Hl(224),dl==249&&(Ol(249),Hl(30),Ol(79),Hl(259),Dl(),hs()),Cl.endNonterminal("TreatExpr",pl)}function Zn(){tr(),Hl(224),dl==249&&(Ml(249),Hl(30),Ml(79),Hl(259),ps())}function er(){Cl.startNonterminal("CastableExpr",pl),nr(),Hl(225),dl==90&&(Ol(90),Hl(30),Ol(79),Hl(249),Dl(),as()),Cl.endNonterminal("CastableExpr",pl)}function tr(){rr(),Hl(225),dl==90&&(Ml(90),Hl(30),Ml(79),Hl(249),fs())}function nr(){Cl.startNonterminal("CastExpr",pl),ir(),Hl(227),dl==89&&(Ol(89),Hl(30),Ol(79),Hl(249),Dl(),as()),Cl.endNonterminal("CastExpr",pl)}function rr(){sr(),Hl(227),dl==89&&(Ml(89),Hl(30),Ml(79),Hl(249),fs())}function ir(){Cl.startNonterminal("UnaryExpr",pl);for(;;){Hl(265);if(dl!=40&&dl!=42)break;switch(dl){case 42:Ol(42);break;default:Ol(40)}}Dl(),or(),Cl.endNonterminal("UnaryExpr",pl)}function sr(){for(;;){Hl(265);if(dl!=40&&dl!=42)break;switch(dl){case 42:Ml(42);break;default:Ml(40)}}ur()}function or(){Cl.startNonterminal("ValueExpr",pl);switch(dl){case 260:Bl(246);break;default:cl=dl}switch(cl){case 87812:case 123140:case 129284:case 141572:mr();break;case 35:wr();break;default:ar()}Cl.endNonterminal("ValueExpr",pl)}function ur(){switch(dl){case 260:Bl(246);break;default:cl=dl}switch(cl){case 87812:case 123140:case 129284:case 141572:gr();break;case 35:Er();break;default:fr()}}function ar(){Cl.startNonterminal("SimpleMapExpr",pl),Tr();for(;;){if(dl!=26)break;Ol(26),Hl(264),Dl(),Tr()}Cl.endNonterminal("SimpleMapExpr",pl)}function fr(){Nr();for(;;){if(dl!=26)break;Ml(26),Hl(264),Nr()}}function lr(){Cl.startNonterminal("GeneralComp",pl);switch(dl){case 60:Ol(60);break;case 27:Ol(27);break;case 54:Ol(54);break;case 58:Ol(58);break;case 61:Ol(61);break;default:Ol(62)}Cl.endNonterminal("GeneralComp",pl)}function cr(){switch(dl){case 60:Ml(60);break;case 27:Ml(27);break;case 54:Ml(54);break;case 58:Ml(58);break;case 61:Ml(61);break;default:Ml(62)}}function hr(){Cl.startNonterminal("ValueComp",pl);switch(dl){case 128:Ol(128);break;case 186:Ol(186);break;case 178:Ol(178);break;case 172:Ol(172);break;case 150:Ol(150);break;default:Ol(146)}Cl.endNonterminal("ValueComp",pl)}function pr(){switch(dl){case 128:Ml(128);break;case 186:Ml(186);break;case 178:Ml(178);break;case 172:Ml(172);break;case 150:Ml(150);break;default:Ml(146)}}function dr(){Cl.startNonterminal("NodeComp",pl);switch(dl){case 164:Ol(164);break;case 57:Ol(57);break;default:Ol(63)}Cl.endNonterminal("NodeComp",pl)}function vr(){switch(dl){case 164:Ml(164);break;case 57:Ml(57);break;default:Ml(63)}}function mr(){Cl.startNonterminal("ValidateExpr",pl),Ol(260),Hl(160);if(dl!=276)switch(dl){case 252:Ol(252),Hl(249),Dl(),ho();break;default:Dl(),yr()}Hl(87),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("ValidateExpr",pl)}function gr(){Ml(260),Hl(160);if(dl!=276)switch(dl){case 252:Ml(252),Hl(249),po();break;default:br()}Hl(87),Ml(276),Hl(266),Y(),Ml(282)}function yr(){Cl.startNonterminal("ValidationMode",pl);switch(dl){case 171:Ol(171);break;default:Ol(240)}Cl.endNonterminal("ValidationMode",pl)}function br(){switch(dl){case 171:Ml(171);break;default:Ml(240)}}function wr(){Cl.startNonterminal("ExtensionExpr",pl);for(;;){Dl(),Sr(),Hl(100);if(dl!=35)break}Ol(276),Hl(272),dl!=282&&(Dl(),G()),Ol(282),Cl.endNonterminal("ExtensionExpr",pl)}function Er(){for(;;){xr(),Hl(100);if(dl!=35)break}Ml(276),Hl(272),dl!=282&&Y(),Ml(282)}function Sr(){Cl.startNonterminal("Pragma",pl),Ol(35),jl(248),dl==21&&Ol(21),Aa(),jl(10),dl==21&&(Ol(21),jl(0),Ol(1)),jl(5),Ol(30),Cl.endNonterminal("Pragma",pl)}function xr(){Ml(35),jl(248),dl==21&&Ml(21),Oa(),jl(10),dl==21&&(Ml(21),jl(0),Ml(1)),jl(5),Ml(30)}function Tr(){Cl.startNonterminal("PathExpr",pl);switch(dl){case 46:Ol(46),Hl(283);switch(dl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Dl(),Cr()}break;case 47:Ol(47),Hl(263),Dl(),Cr();break;default:Cr()}Cl.endNonterminal("PathExpr",pl)}function Nr(){switch(dl){case 46:Ml(46),Hl(283);switch(dl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:kr()}break;case 47:Ml(47),Hl(263),kr();break;default:kr()}}function Cr(){Cl.startNonterminal("RelativePathExpr",pl),Lr();for(;;){switch(dl){case 26:Bl(264);break;default:cl=dl}if(cl!=25&&cl!=27&&cl!=37&&cl!=38&&cl!=40&&cl!=41&&cl!=42&&cl!=46&&cl!=47&&cl!=49&&cl!=53&&cl!=54&&cl!=57&&cl!=58&&cl!=60&&cl!=61&&cl!=62&&cl!=63&&cl!=69&&cl!=70&&cl!=75&&cl!=79&&cl!=80&&cl!=81&&cl!=84&&cl!=87&&cl!=88&&cl!=89&&cl!=90&&cl!=94&&cl!=99&&cl!=105&&cl!=109&&cl!=113&&cl!=118&&cl!=122&&cl!=123&&cl!=126&&cl!=128&&cl!=131&&cl!=137&&cl!=146&&cl!=148&&cl!=150&&cl!=151&&cl!=160&&cl!=162&&cl!=163&&cl!=164&&cl!=172&&cl!=174&&cl!=178&&cl!=180&&cl!=181&&cl!=186&&cl!=198&&cl!=200&&cl!=201&&cl!=205&&cl!=220&&cl!=224&&cl!=232&&cl!=236&&cl!=237&&cl!=247&&cl!=248&&cl!=249&&cl!=254&&cl!=266&&cl!=270&&cl!=273&&cl!=279&&cl!=280&&cl!=281&&cl!=282&&cl!=23578&&cl!=24090){cl=Ll(2,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{switch(dl){case 46:Ml(46);break;case 47:Ml(47);break;default:Ml(26)}Hl(263),Ar(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(2,pl,cl)}}if(cl!=-1&&cl!=46&&cl!=47)break;switch(dl){case 46:Ol(46);break;case 47:Ol(47);break;default:Ol(26)}Hl(263),Dl(),Lr()}Cl.endNonterminal("RelativePathExpr",pl)}function kr(){Ar();for(;;){switch(dl){case 26:Bl(264);break;default:cl=dl}if(cl!=25&&cl!=27&&cl!=37&&cl!=38&&cl!=40&&cl!=41&&cl!=42&&cl!=46&&cl!=47&&cl!=49&&cl!=53&&cl!=54&&cl!=57&&cl!=58&&cl!=60&&cl!=61&&cl!=62&&cl!=63&&cl!=69&&cl!=70&&cl!=75&&cl!=79&&cl!=80&&cl!=81&&cl!=84&&cl!=87&&cl!=88&&cl!=89&&cl!=90&&cl!=94&&cl!=99&&cl!=105&&cl!=109&&cl!=113&&cl!=118&&cl!=122&&cl!=123&&cl!=126&&cl!=128&&cl!=131&&cl!=137&&cl!=146&&cl!=148&&cl!=150&&cl!=151&&cl!=160&&cl!=162&&cl!=163&&cl!=164&&cl!=172&&cl!=174&&cl!=178&&cl!=180&&cl!=181&&cl!=186&&cl!=198&&cl!=200&&cl!=201&&cl!=205&&cl!=220&&cl!=224&&cl!=232&&cl!=236&&cl!=237&&cl!=247&&cl!=248&&cl!=249&&cl!=254&&cl!=266&&cl!=270&&cl!=273&&cl!=279&&cl!=280&&cl!=281&&cl!=282&&cl!=23578&&cl!=24090){cl=Ll(2,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{switch(dl){case 46:Ml(46);break;case 47:Ml(47);break;default:Ml(26)}Hl(263),Ar(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(2,pl,cl)}}if(cl!=-1&&cl!=46&&cl!=47)break;switch(dl){case 46:Ml(46);break;case 47:Ml(47);break;default:Ml(26)}Hl(263),Ar()}}function Lr(){Cl.startNonterminal("StepExpr",pl);switch(dl){case 82:Bl(282);break;case 121:Bl(279);break;case 184:case 216:Bl(280);break;case 96:case 119:case 202:case 244:case 256:Bl(245);break;case 124:case 152:case 165:case 243:case 253:Bl(238);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Bl(244);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Bl(242);break;default:cl=dl}if(cl==35922||cl==35961||cl==36024||cl==36056||cl==38482||cl==38521||cl==38584||cl==38616||cl==40530||cl==40569||cl==40632||cl==40664||cl==41042||cl==41081||cl==41144||cl==41176||cl==41554||cl==41593||cl==41656||cl==41688||cl==43090||cl==43129||cl==43192||cl==43224||cl==45138||cl==45177||cl==45240||cl==45272||cl==45650||cl==45689||cl==45752||cl==45784||cl==46162||cl==46201||cl==46264||cl==46296||cl==48210||cl==48249||cl==48312||cl==48344||cl==53842||cl==53881||cl==53944||cl==53976||cl==55890||cl==55929||cl==55992||cl==56024||cl==57938||cl==57977||cl==58040||cl==58072||cl==60498||cl==60537||cl==60600||cl==60632||cl==62546||cl==62585||cl==62648||cl==62680||cl==63058||cl==63097||cl==63160||cl==63192||cl==64594||cl==64633||cl==64696||cl==64728||cl==65618||cl==65657||cl==65720||cl==65752||cl==67154||cl==67193||cl==67256||cl==67288||cl==70226||cl==70265||cl==70328||cl==70360||cl==74834||cl==74873||cl==74936||cl==74968||cl==75858||cl==75897||cl==75960||cl==75992||cl==76882||cl==76921||cl==76984||cl==77016||cl==77394||cl==77433||cl==77496||cl==77528||cl==82002||cl==82041||cl==82104||cl==82136||cl==83026||cl==83065||cl==83128||cl==83160||cl==83538||cl==83577||cl==83640||cl==83672||cl==84050||cl==84089||cl==84152||cl==84184||cl==88146||cl==88185||cl==88248||cl==88280||cl==89170||cl==89209||cl==89272||cl==89304||cl==91218||cl==91257||cl==91320||cl==91352||cl==92242||cl==92281||cl==92344||cl==92376||cl==92754||cl==92793||cl==92856||cl==92888||cl==95314||cl==95353||cl==95416||cl==95448||cl==101458||cl==101497||cl==101560||cl==101592||cl==102482||cl==102521||cl==102584||cl==102616||cl==102994||cl==103033||cl==103096||cl==103128||cl==112722||cl==112761||cl==112824||cl==112856||cl==114770||cl==114809||cl==114872||cl==114904||cl==120914||cl==120953||cl==121016||cl==121048||cl==121426||cl==121465||cl==121528||cl==121560||cl==127058||cl==127097||cl==127160||cl==127192||cl==127570||cl==127609||cl==127672||cl==127704||cl==130130||cl==130169||cl==130232||cl==130264||cl==136274||cl==136313||cl==136376||cl==136408||cl==138322||cl==138361||cl==138424||cl==138456){cl=Ll(3,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Kr(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(3,pl,cl)}}switch(cl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Jr();break;default:Or()}Cl.endNonterminal("StepExpr",pl)}function Ar(){switch(dl){case 82:Bl(282);break;case 121:Bl(279);break;case 184:case 216:Bl(280);break;case 96:case 119:case 202:case 244:case 256:Bl(245);break;case 124:case 152:case 165:case 243:case 253:Bl(238);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Bl(244);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Bl(242);break;default:cl=dl}if(cl==35922||cl==35961||cl==36024||cl==36056||cl==38482||cl==38521||cl==38584||cl==38616||cl==40530||cl==40569||cl==40632||cl==40664||cl==41042||cl==41081||cl==41144||cl==41176||cl==41554||cl==41593||cl==41656||cl==41688||cl==43090||cl==43129||cl==43192||cl==43224||cl==45138||cl==45177||cl==45240||cl==45272||cl==45650||cl==45689||cl==45752||cl==45784||cl==46162||cl==46201||cl==46264||cl==46296||cl==48210||cl==48249||cl==48312||cl==48344||cl==53842||cl==53881||cl==53944||cl==53976||cl==55890||cl==55929||cl==55992||cl==56024||cl==57938||cl==57977||cl==58040||cl==58072||cl==60498||cl==60537||cl==60600||cl==60632||cl==62546||cl==62585||cl==62648||cl==62680||cl==63058||cl==63097||cl==63160||cl==63192||cl==64594||cl==64633||cl==64696||cl==64728||cl==65618||cl==65657||cl==65720||cl==65752||cl==67154||cl==67193||cl==67256||cl==67288||cl==70226||cl==70265||cl==70328||cl==70360||cl==74834||cl==74873||cl==74936||cl==74968||cl==75858||cl==75897||cl==75960||cl==75992||cl==76882||cl==76921||cl==76984||cl==77016||cl==77394||cl==77433||cl==77496||cl==77528||cl==82002||cl==82041||cl==82104||cl==82136||cl==83026||cl==83065||cl==83128||cl==83160||cl==83538||cl==83577||cl==83640||cl==83672||cl==84050||cl==84089||cl==84152||cl==84184||cl==88146||cl==88185||cl==88248||cl==88280||cl==89170||cl==89209||cl==89272||cl==89304||cl==91218||cl==91257||cl==91320||cl==91352||cl==92242||cl==92281||cl==92344||cl==92376||cl==92754||cl==92793||cl==92856||cl==92888||cl==95314||cl==95353||cl==95416||cl==95448||cl==101458||cl==101497||cl==101560||cl==101592||cl==102482||cl==102521||cl==102584||cl==102616||cl==102994||cl==103033||cl==103096||cl==103128||cl==112722||cl==112761||cl==112824||cl==112856||cl==114770||cl==114809||cl==114872||cl==114904||cl==120914||cl==120953||cl==121016||cl==121048||cl==121426||cl==121465||cl==121528||cl==121560||cl==127058||cl==127097||cl==127160||cl==127192||cl==127570||cl==127609||cl==127672||cl==127704||cl==130130||cl==130169||cl==130232||cl==130264||cl==136274||cl==136313||cl==136376||cl==136408||cl==138322||cl==138361||cl==138424||cl==138456){cl=Ll(3,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Kr(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(3,pl,cl)}}switch(cl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Kr();break;default:Mr()}}function Or(){Cl.startNonterminal("AxisStep",pl);switch(dl){case 73:case 74:case 206:case 212:case 213:Bl(240);break;default:cl=dl}switch(cl){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:Fr();break;default:_r()}Hl(236),Dl(),Yr(),Cl.endNonterminal("AxisStep",pl)}function Mr(){switch(dl){case 73:case 74:case 206:case 212:case 213:Bl(240);break;default:cl=dl}switch(cl){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:Ir();break;default:Dr()}Hl(236),Zr()}function _r(){Cl.startNonterminal("ForwardStep",pl);switch(dl){case 82:Bl(243);break;case 93:case 111:case 112:case 135:case 136:case 229:Bl(240);break;default:cl=dl}switch(cl){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Pr(),Hl(251),Dl(),Wr();break;default:Br()}Cl.endNonterminal("ForwardStep",pl)}function Dr(){switch(dl){case 82:Bl(243);break;case 93:case 111:case 112:case 135:case 136:case 229:Bl(240);break;default:cl=dl}switch(cl){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Hr(),Hl(251),Xr();break;default:jr()}}function Pr(){Cl.startNonterminal("ForwardAxis",pl);switch(dl){case 93:Ol(93),Hl(26),Ol(51);break;case 111:Ol(111),Hl(26),Ol(51);break;case 82:Ol(82),Hl(26),Ol(51);break;case 229:Ol(229),Hl(26),Ol(51);break;case 112:Ol(112),Hl(26),Ol(51);break;case 136:Ol(136),Hl(26),Ol(51);break;default:Ol(135),Hl(26),Ol(51)}Cl.endNonterminal("ForwardAxis",pl)}function Hr(){switch(dl){case 93:Ml(93),Hl(26),Ml(51);break;case 111:Ml(111),Hl(26),Ml(51);break;case 82:Ml(82),Hl(26),Ml(51);break;case 229:Ml(229),Hl(26),Ml(51);break;case 112:Ml(112),Hl(26),Ml(51);break;case 136:Ml(136),Hl(26),Ml(51);break;default:Ml(135),Hl(26),Ml(51)}}function Br(){Cl.startNonterminal("AbbrevForwardStep",pl),dl==66&&Ol(66),Hl(251),Dl(),Wr(),Cl.endNonterminal("AbbrevForwardStep",pl)}function jr(){dl==66&&Ml(66),Hl(251),Xr()}function Fr(){Cl.startNonterminal("ReverseStep",pl);switch(dl){case 45:Ur();break;default:qr(),Hl(251),Dl(),Wr()}Cl.endNonterminal("ReverseStep",pl)}function Ir(){switch(dl){case 45:zr();break;default:Rr(),Hl(251),Xr()}}function qr(){Cl.startNonterminal("ReverseAxis",pl);switch(dl){case 206:Ol(206),Hl(26),Ol(51);break;case 73:Ol(73),Hl(26),Ol(51);break;case 213:Ol(213),Hl(26),Ol(51);break;case 212:Ol(212),Hl(26),Ol(51);break;default:Ol(74),Hl(26),Ol(51)}Cl.endNonterminal("ReverseAxis",pl)}function Rr(){switch(dl){case 206:Ml(206),Hl(26),Ml(51);break;case 73:Ml(73),Hl(26),Ml(51);break;case 213:Ml(213),Hl(26),Ml(51);break;case 212:Ml(212),Hl(26),Ml(51);break;default:Ml(74),Hl(26),Ml(51)}}function Ur(){Cl.startNonterminal("AbbrevReverseStep",pl),Ol(45),Cl.endNonterminal("AbbrevReverseStep",pl)}function zr(){Ml(45)}function Wr(){Cl.startNonterminal("NodeTest",pl);switch(dl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Bl(239);break;default:cl=dl}switch(cl){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Os();break;default:Vr()}Cl.endNonterminal("NodeTest",pl)}function Xr(){switch(dl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Bl(239);break;default:cl=dl}switch(cl){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ms();break;default:$r()}}function Vr(){Cl.startNonterminal("NameTest",pl);switch(dl){case 5:Ol(5);break;default:Aa()}Cl.endNonterminal("NameTest",pl)}function $r(){switch(dl){case 5:Ml(5);break;default:Oa()}}function Jr(){Cl.startNonterminal("PostfixExpr",pl),Yf();for(;;){Hl(239);if(dl!=34&&dl!=68)break;switch(dl){case 68:Dl(),ei();break;default:Dl(),Qr()}}Cl.endNonterminal("PostfixExpr",pl)}function Kr(){Zf();for(;;){Hl(239);if(dl!=34&&dl!=68)break;switch(dl){case 68:ti();break;default:Gr()}}}function Qr(){Cl.startNonterminal("ArgumentList",pl),Ol(34),Hl(274);if(dl!=37){Dl(),wi();for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(269),Dl(),wi()}}Ol(37),Cl.endNonterminal("ArgumentList",pl)}function Gr(){Ml(34),Hl(274);if(dl!=37){Ei();for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(269),Ei()}}Ml(37)}function Yr(){Cl.startNonterminal("PredicateList",pl);for(;;){Hl(236);if(dl!=68)break;Dl(),ei()}Cl.endNonterminal("PredicateList",pl)}function Zr(){for(;;){Hl(236);if(dl!=68)break;ti()}}function ei(){Cl.startNonterminal("Predicate",pl),Ol(68),Hl(266),Dl(),G(),Ol(69),Cl.endNonterminal("Predicate",pl)}function ti(){Ml(68),Hl(266),Y(),Ml(69)}function ni(){Cl.startNonterminal("Literal",pl);switch(dl){case 11:Ol(11);break;default:ii()}Cl.endNonterminal("Literal",pl)}function ri(){switch(dl){case 11:Ml(11);break;default:si()}}function ii(){Cl.startNonterminal("NumericLiteral",pl);switch(dl){case 8:Ol(8);break;case 9:Ol(9);break;default:Ol(10)}Cl.endNonterminal("NumericLiteral",pl)}function si(){switch(dl){case 8:Ml(8);break;case 9:Ml(9);break;default:Ml(10)}}function oi(){Cl.startNonterminal("VarRef",pl),Ol(31),Hl(249),Dl(),ai(),Cl.endNonterminal("VarRef",pl)}function ui(){Ml(31),Hl(249),fi()}function ai(){Cl.startNonterminal("VarName",pl),Aa(),Cl.endNonterminal("VarName",pl)}function fi(){Oa()}function li(){Cl.startNonterminal("ParenthesizedExpr",pl),Ol(34),Hl(268),dl!=37&&(Dl(),G()),Ol(37),Cl.endNonterminal("ParenthesizedExpr",pl)}function ci(){Ml(34),Hl(268),dl!=37&&Y(),Ml(37)}function hi(){Cl.startNonterminal("ContextItemExpr",pl),Ol(44),Cl.endNonterminal("ContextItemExpr",pl)}function pi(){Ml(44)}function di(){Cl.startNonterminal("OrderedExpr",pl),Ol(202),Hl(87),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("OrderedExpr",pl)}function vi(){Ml(202),Hl(87),Ml(276),Hl(266),Y(),Ml(282)}function mi(){Cl.startNonterminal("UnorderedExpr",pl),Ol(256),Hl(87),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("UnorderedExpr",pl)}function gi(){Ml(256),Hl(87),Ml(276),Hl(266),Y(),Ml(282)}function yi(){Cl.startNonterminal("FunctionCall",pl),Ma(),Hl(22),Dl(),Qr(),Cl.endNonterminal("FunctionCall",pl)}function bi(){_a(),Hl(22),Gr()}function wi(){Cl.startNonterminal("Argument",pl);switch(dl){case 64:Si();break;default:Tf()}Cl.endNonterminal("Argument",pl)}function Ei(){switch(dl){case 64:xi();break;default:Nf()}}function Si(){Cl.startNonterminal("ArgumentPlaceholder",pl),Ol(64),Cl.endNonterminal("ArgumentPlaceholder",pl)}function xi(){Ml(64)}function Ti(){Cl.startNonterminal("Constructor",pl);switch(dl){case 54:case 55:case 59:Ci();break;default:Wi()}Cl.endNonterminal("Constructor",pl)}function Ni(){switch(dl){case 54:case 55:case 59:ki();break;default:Xi()}}function Ci(){Cl.startNonterminal("DirectConstructor",pl);switch(dl){case 54:Li();break;case 55:qi();break;default:Ui()}Cl.endNonterminal("DirectConstructor",pl)}function ki(){switch(dl){case 54:Ai();break;case 55:Ri();break;default:zi()}}function Li(){Cl.startNonterminal("DirElemConstructor",pl),Ol(54),jl(4),Ol(20),Oi();switch(dl){case 48:Ol(48);break;default:Ol(61);for(;;){jl(174);if(dl==56)break;Fi()}Ol(56),jl(4),Ol(20),jl(12),dl==21&&Ol(21),jl(8),Ol(61)}Cl.endNonterminal("DirElemConstructor",pl)}function Ai(){Ml(54),jl(4),Ml(20),Mi();switch(dl){case 48:Ml(48);break;default:Ml(61);for(;;){jl(174);if(dl==56)break;Ii()}Ml(56),jl(4),Ml(20),jl(12),dl==21&&Ml(21),jl(8),Ml(61)}}function Oi(){Cl.startNonterminal("DirAttributeList",pl);for(;;){jl(19);if(dl!=21)break;Ol(21),jl(91),dl==20&&(Ol(20),jl(11),dl==21&&Ol(21),jl(7),Ol(60),jl(18),dl==21&&Ol(21),_i())}Cl.endNonterminal("DirAttributeList",pl)}function Mi(){for(;;){jl(19);if(dl!=21)break;Ml(21),jl(91),dl==20&&(Ml(20),jl(11),dl==21&&Ml(21),jl(7),Ml(60),jl(18),dl==21&&Ml(21),Di())}}function _i(){Cl.startNonterminal("DirAttributeValue",pl),jl(14);switch(dl){case 28:Ol(28);for(;;){jl(167);if(dl==28)break;switch(dl){case 13:Ol(13);break;default:Pi()}}Ol(28);break;default:Ol(33);for(;;){jl(168);if(dl==33)break;switch(dl){case 14:Ol(14);break;default:Bi()}}Ol(33)}Cl.endNonterminal("DirAttributeValue",pl)}function Di(){jl(14);switch(dl){case 28:Ml(28);for(;;){jl(167);if(dl==28)break;switch(dl){case 13:Ml(13);break;default:Hi()}}Ml(28);break;default:Ml(33);for(;;){jl(168);if(dl==33)break;switch(dl){case 14:Ml(14);break;default:ji()}}Ml(33)}}function Pi(){Cl.startNonterminal("QuotAttrValueContent",pl);switch(dl){case 16:Ol(16);break;default:Ff()}Cl.endNonterminal("QuotAttrValueContent",pl)}function Hi(){switch(dl){case 16:Ml(16);break;default:If()}}function Bi(){Cl.startNonterminal("AposAttrValueContent",pl);switch(dl){case 17:Ol(17);break;default:Ff()}Cl.endNonterminal("AposAttrValueContent",pl)}function ji(){switch(dl){case 17:Ml(17);break;default:If()}}function Fi(){Cl.startNonterminal("DirElemContent",pl);switch(dl){case 54:case 55:case 59:Ci();break;case 4:Ol(4);break;case 15:Ol(15);break;default:Ff()}Cl.endNonterminal("DirElemContent",pl)}function Ii(){switch(dl){case 54:case 55:case 59:ki();break;case 4:Ml(4);break;case 15:Ml(15);break;default:If()}}function qi(){Cl.startNonterminal("DirCommentConstructor",pl),Ol(55),jl(1),Ol(2),jl(6),Ol(43),Cl.endNonterminal("DirCommentConstructor",pl)}function Ri(){Ml(55),jl(1),Ml(2),jl(6),Ml(43)}function Ui(){Cl.startNonterminal("DirPIConstructor",pl),Ol(59),jl(3),Ol(18),jl(13),dl==21&&(Ol(21),jl(2),Ol(3)),jl(9),Ol(65),Cl.endNonterminal("DirPIConstructor",pl)}function zi(){Ml(59),jl(3),Ml(18),jl(13),dl==21&&(Ml(21),jl(2),Ml(3)),jl(9),Ml(65)}function Wi(){Cl.startNonterminal("ComputedConstructor",pl);switch(dl){case 119:Uf();break;case 121:Vi();break;case 82:Wf();break;case 184:Ji();break;case 244:Qf();break;case 96:Jf();break;default:Vf()}Cl.endNonterminal("ComputedConstructor",pl)}function Xi(){switch(dl){case 119:zf();break;case 121:$i();break;case 82:Xf();break;case 184:Ki();break;case 244:Gf();break;case 96:Kf();break;default:$f()}}function Vi(){Cl.startNonterminal("CompElemConstructor",pl),Ol(121),Hl(252);switch(dl){case 276:Ol(276),Hl(266),Dl(),G(),Ol(282);break;default:Dl(),Aa()}Hl(87),Ol(276),Hl(272),dl!=282&&(Dl(),qf()),Ol(282),Cl.endNonterminal("CompElemConstructor",pl)}function $i(){Ml(121),Hl(252);switch(dl){case 276:Ml(276),Hl(266),Y(),Ml(282);break;default:Oa()}Hl(87),Ml(276),Hl(272),dl!=282&&Rf(),Ml(282)}function Ji(){Cl.startNonterminal("CompNamespaceConstructor",pl),Ol(184),Hl(253);switch(dl){case 276:Ol(276),Hl(266),Dl(),Yi(),Ol(282);break;default:Dl(),Qi()}Hl(87),Ol(276),Hl(266),Dl(),es(),Ol(282),Cl.endNonterminal("CompNamespaceConstructor",pl)}function Ki(){Ml(184),Hl(253);switch(dl){case 276:Ml(276),Hl(266),Zi(),Ml(282);break;default:Gi()}Hl(87),Ml(276),Hl(266),ts(),Ml(282)}function Qi(){Cl.startNonterminal("Prefix",pl),Da(),Cl.endNonterminal("Prefix",pl)}function Gi(){Pa()}function Yi(){Cl.startNonterminal("PrefixExpr",pl),G(),Cl.endNonterminal("PrefixExpr",pl)}function Zi(){Y()}function es(){Cl.startNonterminal("URIExpr",pl),G(),Cl.endNonterminal("URIExpr",pl)}function ts(){Y()}function ns(){Cl.startNonterminal("FunctionItemExpr",pl);switch(dl){case 145:Bl(92);break;default:cl=dl}switch(cl){case 32:case 17553:os();break;default:is()}Cl.endNonterminal("FunctionItemExpr",pl)}function rs(){switch(dl){case 145:Bl(92);break;default:cl=dl}switch(cl){case 32:case 17553:us();break;default:ss()}}function is(){Cl.startNonterminal("NamedFunctionRef",pl),Aa(),Hl(20),Ol(29),Hl(16),Ol(8),Cl.endNonterminal("NamedFunctionRef",pl)}function ss(){Oa(),Hl(20),Ml(29),Hl(16),Ml(8)}function os(){Cl.startNonterminal("InlineFunctionExpr",pl);for(;;){Hl(97);if(dl!=32)break;Dl(),B()}Ol(145),Hl(22),Ol(34),Hl(94),dl==31&&(Dl(),U()),Ol(37),Hl(111),dl==79&&(Ol(79),Hl(259),Dl(),hs()),Hl(87),Dl(),V(),Cl.endNonterminal("InlineFunctionExpr",pl)}function us(){for(;;){Hl(97);if(dl!=32)break;j()}Ml(145),Hl(22),Ml(34),Hl(94),dl==31&&z(),Ml(37),Hl(111),dl==79&&(Ml(79),Hl(259),ps()),Hl(87),$()}function as(){Cl.startNonterminal("SingleType",pl),lo(),Hl(226),dl==64&&Ol(64),Cl.endNonterminal("SingleType",pl)}function fs(){co(),Hl(226),dl==64&&Ml(64)}function ls(){Cl.startNonterminal("TypeDeclaration",pl),Ol(79),Hl(259),Dl(),hs(),Cl.endNonterminal("TypeDeclaration",pl)}function cs(){Ml(79),Hl(259),ps()}function hs(){Cl.startNonterminal("SequenceType",pl);switch(dl){case 124:Bl(241);break;default:cl=dl}switch(cl){case 17532:Ol(124),Hl(22),Ol(34),Hl(23),Ol(37);break;default:ms(),Hl(237);switch(dl){case 39:case 40:case 64:Dl(),ds();break;default:}}Cl.endNonterminal("SequenceType",pl)}function ps(){switch(dl){case 124:Bl(241);break;default:cl=dl}switch(cl){case 17532:Ml(124),Hl(22),Ml(34),Hl(23),Ml(37);break;default:gs(),Hl(237);switch(dl){case 39:case 40:case 64:vs();break;default:}}}function ds(){Cl.startNonterminal("OccurrenceIndicator",pl);switch(dl){case 64:Ol(64);break;case 39:Ol(39);break;default:Ol(40)}Cl.endNonterminal("OccurrenceIndicator",pl)}function vs(){switch(dl){case 64:Ml(64);break;case 39:Ml(39);break;default:Ml(40)}}function ms(){Cl.startNonterminal("ItemType",pl);switch(dl){case 82:case 96:case 120:case 121:case 145:case 165:case 185:case 191:case 216:case 226:case 227:case 244:Bl(241);break;default:cl=dl}switch(cl){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Os();break;case 17573:Ol(165),Hl(22),Ol(34),Hl(23),Ol(37);break;case 32:case 17553:vo();break;case 34:Eo();break;case 78:case 167:case 194:ys();break;case 242:ws();break;default:Ls()}Cl.endNonterminal("ItemType",pl)}function gs(){switch(dl){case 82:case 96:case 120:case 121:case 145:case 165:case 185:case 191:case 216:case 226:case 227:case 244:Bl(241);break;default:cl=dl}switch(cl){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ms();break;case 17573:Ml(165),Hl(22),Ml(34),Hl(23),Ml(37);break;case 32:case 17553:mo();break;case 34:So();break;case 78:case 167:case 194:bs();break;case 242:Es();break;default:As()}}function ys(){Cl.startNonterminal("JSONTest",pl);switch(dl){case 167:Ss();break;case 194:Ts();break;default:Cs()}Cl.endNonterminal("JSONTest",pl)}function bs(){switch(dl){case 167:xs();break;case 194:Ns();break;default:ks()}}function ws(){Cl.startNonterminal("StructuredItemTest",pl),Ol(242),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("StructuredItemTest",pl)}function Es(){Ml(242),Hl(22),Ml(34),Hl(23),Ml(37)}function Ss(){Cl.startNonterminal("JSONItemTest",pl),Ol(167),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("JSONItemTest",pl)}function xs(){Ml(167),Hl(22),Ml(34),Hl(23),Ml(37)}function Ts(){Cl.startNonterminal("JSONObjectTest",pl),Ol(194),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("JSONObjectTest",pl)}function Ns(){Ml(194),Hl(22),Ml(34),Hl(23),Ml(37)}function Cs(){Cl.startNonterminal("JSONArrayTest",pl),Ol(78),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("JSONArrayTest",pl)}function ks(){Ml(78),Hl(22),Ml(34),Hl(23),Ml(37)}function Ls(){Cl.startNonterminal("AtomicOrUnionType",pl),Aa(),Cl.endNonterminal("AtomicOrUnionType",pl)}function As(){Oa()}function Os(){Cl.startNonterminal("KindTest",pl);switch(dl){case 120:Ps();break;case 121:Ys();break;case 82:Ws();break;case 227:no();break;case 226:Js();break;case 216:Us();break;case 96:Fs();break;case 244:Bs();break;case 185:qs();break;default:_s()}Cl.endNonterminal("KindTest",pl)}function Ms(){switch(dl){case 120:Hs();break;case 121:Zs();break;case 82:Xs();break;case 227:ro();break;case 226:Ks();break;case 216:zs();break;case 96:Is();break;case 244:js();break;case 185:Rs();break;default:Ds()}}function _s(){Cl.startNonterminal("AnyKindTest",pl),Ol(191),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("AnyKindTest",pl)}function Ds(){Ml(191),Hl(22),Ml(34),Hl(23),Ml(37)}function Ps(){Cl.startNonterminal("DocumentTest",pl),Ol(120),Hl(22),Ol(34),Hl(144);if(dl!=37)switch(dl){case 121:Dl(),Ys();break;default:Dl(),no()}Hl(23),Ol(37),Cl.endNonterminal("DocumentTest",pl)}function Hs(){Ml(120),Hl(22),Ml(34),Hl(144);if(dl!=37)switch(dl){case 121:Zs();break;default:ro()}Hl(23),Ml(37)}function Bs(){Cl.startNonterminal("TextTest",pl),Ol(244),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("TextTest",pl)}function js(){Ml(244),Hl(22),Ml(34),Hl(23),Ml(37)}function Fs(){Cl.startNonterminal("CommentTest",pl),Ol(96),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("CommentTest",pl)}function Is(){Ml(96),Hl(22),Ml(34),Hl(23),Ml(37)}function qs(){Cl.startNonterminal("NamespaceNodeTest",pl),Ol(185),Hl(22),Ol(34),Hl(23),Ol(37),Cl.endNonterminal("NamespaceNodeTest",pl)}function Rs(){Ml(185),Hl(22),Ml(34),Hl(23),Ml(37)}function Us(){Cl.startNonterminal("PITest",pl),Ol(216),Hl(22),Ol(34),Hl(256);if(dl!=37)switch(dl){case 11:Ol(11);break;default:Dl(),Da()}Hl(23),Ol(37),Cl.endNonterminal("PITest",pl)}function zs(){Ml(216),Hl(22),Ml(34),Hl(256);if(dl!=37)switch(dl){case 11:Ml(11);break;default:Pa()}Hl(23),Ml(37)}function Ws(){Cl.startNonterminal("AttributeTest",pl),Ol(82),Hl(22),Ol(34),Hl(255),dl!=37&&(Dl(),Vs(),Hl(101),dl==41&&(Ol(41),Hl(249),Dl(),ho())),Hl(23),Ol(37),Cl.endNonterminal("AttributeTest",pl)}function Xs(){Ml(82),Hl(22),Ml(34),Hl(255),dl!=37&&($s(),Hl(101),dl==41&&(Ml(41),Hl(249),po())),Hl(23),Ml(37)}function Vs(){Cl.startNonterminal("AttribNameOrWildcard",pl);switch(dl){case 38:Ol(38);break;default:oo()}Cl.endNonterminal("AttribNameOrWildcard",pl)}function $s(){switch(dl){case 38:Ml(38);break;default:uo()}}function Js(){Cl.startNonterminal("SchemaAttributeTest",pl),Ol(226),Hl(22),Ol(34),Hl(249),Dl(),Qs(),Hl(23),Ol(37),Cl.endNonterminal("SchemaAttributeTest",pl)}function Ks(){Ml(226),Hl(22),Ml(34),Hl(249),Gs(),Hl(23),Ml(37)}function Qs(){Cl.startNonterminal("AttributeDeclaration",pl),oo(),Cl.endNonterminal("AttributeDeclaration",pl)}function Gs(){uo()}function Ys(){Cl.startNonterminal("ElementTest",pl),Ol(121),Hl(22),Ol(34),Hl(255),dl!=37&&(Dl(),eo(),Hl(101),dl==41&&(Ol(41),Hl(249),Dl(),ho(),Hl(102),dl==64&&Ol(64))),Hl(23),Ol(37),Cl.endNonterminal("ElementTest",pl)}function Zs(){Ml(121),Hl(22),Ml(34),Hl(255),dl!=37&&(to(),Hl(101),dl==41&&(Ml(41),Hl(249),po(),Hl(102),dl==64&&Ml(64))),Hl(23),Ml(37)}function eo(){Cl.startNonterminal("ElementNameOrWildcard",pl);switch(dl){case 38:Ol(38);break;default:ao()}Cl.endNonterminal("ElementNameOrWildcard",pl)}function to(){switch(dl){case 38:Ml(38);break;default:fo()}}function no(){Cl.startNonterminal("SchemaElementTest",pl),Ol(227),Hl(22),Ol(34),Hl(249),Dl(),io(),Hl(23),Ol(37),Cl.endNonterminal("SchemaElementTest",pl)}function ro(){Ml(227),Hl(22),Ml(34),Hl(249),so(),Hl(23),Ml(37)}function io(){Cl.startNonterminal("ElementDeclaration",pl),ao(),Cl.endNonterminal("ElementDeclaration",pl)}function so(){fo()}function oo(){Cl.startNonterminal("AttributeName",pl),Aa(),Cl.endNonterminal("AttributeName",pl)}function uo(){Oa()}function ao(){Cl.startNonterminal("ElementName",pl),Aa(),Cl.endNonterminal("ElementName",pl)}function fo(){Oa()}function lo(){Cl.startNonterminal("SimpleTypeName",pl),ho(),Cl.endNonterminal("SimpleTypeName",pl)}function co(){po()}function ho(){Cl.startNonterminal("TypeName",pl),Aa(),Cl.endNonterminal("TypeName",pl)}function po(){Oa()}function vo(){Cl.startNonterminal("FunctionTest",pl);for(;;){Hl(97);if(dl!=32)break;Dl(),B()}switch(dl){case 145:Bl(22);break;default:cl=dl}cl=Ll(4,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{yo(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(4,pl,cl)}switch(cl){case-1:Dl(),go();break;default:Dl(),bo()}Cl.endNonterminal("FunctionTest",pl)}function mo(){for(;;){Hl(97);if(dl!=32)break;j()}switch(dl){case 145:Bl(22);break;default:cl=dl}cl=Ll(4,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{yo(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(4,pl,cl)}switch(cl){case-1:yo();break;default:wo()}}function go(){Cl.startNonterminal("AnyFunctionTest",pl),Ol(145),Hl(22),Ol(34),Hl(24),Ol(38),Hl(23),Ol(37),Cl.endNonterminal("AnyFunctionTest",pl)}function yo(){Ml(145),Hl(22),Ml(34),Hl(24),Ml(38),Hl(23),Ml(37)}function bo(){Cl.startNonterminal("TypedFunctionTest",pl),Ol(145),Hl(22),Ol(34),Hl(261);if(dl!=37){Dl(),hs();for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(259),Dl(),hs()}}Ol(37),Hl(30),Ol(79),Hl(259),Dl(),hs(),Cl.endNonterminal("TypedFunctionTest",pl)}function wo(){Ml(145),Hl(22),Ml(34),Hl(261);if(dl!=37){ps();for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(259),ps()}}Ml(37),Hl(30),Ml(79),Hl(259),ps()}function Eo(){Cl.startNonterminal("ParenthesizedItemType",pl),Ol(34),Hl(259),Dl(),ms(),Hl(23),Ol(37),Cl.endNonterminal("ParenthesizedItemType",pl)}function So(){Ml(34),Hl(259),gs(),Hl(23),Ml(37)}function xo(){Cl.startNonterminal("RevalidationDecl",pl),Ol(108),Hl(72),Ol(222),Hl(152);switch(dl){case 240:Ol(240);break;case 171:Ol(171);break;default:Ol(233)}Cl.endNonterminal("RevalidationDecl",pl)}function To(){Cl.startNonterminal("InsertExprTargetChoice",pl);switch(dl){case 70:Ol(70);break;case 84:Ol(84);break;default:if(dl==79){Ol(79),Hl(119);switch(dl){case 134:Ol(134);break;default:Ol(170)}}Hl(54),Ol(163)}Cl.endNonterminal("InsertExprTargetChoice",pl)}function No(){switch(dl){case 70:Ml(70);break;case 84:Ml(84);break;default:if(dl==79){Ml(79),Hl(119);switch(dl){case 134:Ml(134);break;default:Ml(170)}}Hl(54),Ml(163)}}function Co(){Cl.startNonterminal("InsertExpr",pl),Ol(159),Hl(129);switch(dl){case 191:Ol(191);break;default:Ol(192)}Hl(266),Dl(),Po(),Dl(),To(),Hl(266),Dl(),Bo(),Cl.endNonterminal("InsertExpr",pl)}function ko(){Ml(159),Hl(129);switch(dl){case 191:Ml(191);break;default:Ml(192)}Hl(266),Ho(),No(),Hl(266),jo()}function Lo(){Cl.startNonterminal("DeleteExpr",pl),Ol(110),Hl(129);switch(dl){case 191:Ol(191);break;default:Ol(192)}Hl(266),Dl(),Bo(),Cl.endNonterminal("DeleteExpr",pl)}function Ao(){Ml(110),Hl(129);switch(dl){case 191:Ml(191);break;default:Ml(192)}Hl(266),jo()}function Oo(){Cl.startNonterminal("ReplaceExpr",pl),Ol(219),Hl(130),dl==261&&(Ol(261),Hl(64),Ol(196)),Hl(62),Ol(191),Hl(266),Dl(),Bo(),Ol(270),Hl(266),Dl(),Tf(),Cl.endNonterminal("ReplaceExpr",pl)}function Mo(){Ml(219),Hl(130),dl==261&&(Ml(261),Hl(64),Ml(196)),Hl(62),Ml(191),Hl(266),jo(),Ml(270),Hl(266),Nf()}function _o(){Cl.startNonterminal("RenameExpr",pl),Ol(218),Hl(62),Ol(191),Hl(266),Dl(),Bo(),Ol(79),Hl(266),Dl(),Fo(),Cl.endNonterminal("RenameExpr",pl)}function Do(){Ml(218),Hl(62),Ml(191),Hl(266),jo(),Ml(79),Hl(266),Io()}function Po(){Cl.startNonterminal("SourceExpr",pl),Tf(),Cl.endNonterminal("SourceExpr",pl)}function Ho(){Nf()}function Bo(){Cl.startNonterminal("TargetExpr",pl),Tf(),Cl.endNonterminal("TargetExpr",pl)}function jo(){Nf()}function Fo(){Cl.startNonterminal("NewNameExpr",pl),Tf(),Cl.endNonterminal("NewNameExpr",pl)}function Io(){Nf()}function qo(){Cl.startNonterminal("TransformExpr",pl),Ol(103),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(27),Ol(52),Hl(266),Dl(),Tf();for(;;){if(dl!=41)break;Ol(41),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(27),Ol(52),Hl(266),Dl(),Tf()}Ol(181),Hl(266),Dl(),Tf(),Ol(220),Hl(266),Dl(),Tf(),Cl.endNonterminal("TransformExpr",pl)}function Ro(){Ml(103),Hl(21),Ml(31),Hl(249),fi(),Hl(27),Ml(52),Hl(266),Nf();for(;;){if(dl!=41)break;Ml(41),Hl(21),Ml(31),Hl(249),fi(),Hl(27),Ml(52),Hl(266),Nf()}Ml(181),Hl(266),Nf(),Ml(220),Hl(266),Nf()}function Uo(){Cl.startNonterminal("FTSelection",pl),Vo();for(;;){Hl(211);switch(dl){case 81:Bl(151);break;default:cl=dl}if(cl!=115&&cl!=117&&cl!=127&&cl!=202&&cl!=223&&cl!=269&&cl!=64593&&cl!=121425)break;Dl(),mu()}Cl.endNonterminal("FTSelection",pl)}function zo(){$o();for(;;){Hl(211);switch(dl){case 81:Bl(151);break;default:cl=dl}if(cl!=115&&cl!=117&&cl!=127&&cl!=202&&cl!=223&&cl!=269&&cl!=64593&&cl!=121425)break;gu()}}function Wo(){Cl.startNonterminal("FTWeight",pl),Ol(264),Hl(87),Ol(276),Hl(266),Dl(),G(),Ol(282),Cl.endNonterminal("FTWeight",pl)}function Xo(){Ml(264),Hl(87),Ml(276),Hl(266),Y(),Ml(282)}function Vo(){Cl.startNonterminal("FTOr",pl),Jo();for(;;){if(dl!=144)break;Ol(144),Hl(162),Dl(),Jo()}Cl.endNonterminal("FTOr",pl)}function $o(){Ko();for(;;){if(dl!=144)break;Ml(144),Hl(162),Ko()}}function Jo(){Cl.startNonterminal("FTAnd",pl),Qo();for(;;){if(dl!=142)break;Ol(142),Hl(162),Dl(),Qo()}Cl.endNonterminal("FTAnd",pl)}function Ko(){Go();for(;;){if(dl!=142)break;Ml(142),Hl(162),Go()}}function Qo(){Cl.startNonterminal("FTMildNot",pl),Yo();for(;;){Hl(212);if(dl!=193)break;Ol(193),Hl(53),Ol(154),Hl(162),Dl(),Yo()}Cl.endNonterminal("FTMildNot",pl)}function Go(){Zo();for(;;){Hl(212);if(dl!=193)break;Ml(193),Hl(53),Ml(154),Hl(162),Zo()}}function Yo(){Cl.startNonterminal("FTUnaryNot",pl),dl==143&&Ol(143),Hl(155),Dl(),eu(),Cl.endNonterminal("FTUnaryNot",pl)}function Zo(){dl==143&&Ml(143),Hl(155),tu()}function eu(){Cl.startNonterminal("FTPrimaryWithOptions",pl),nu(),Hl(214),dl==259&&(Dl(),_u()),dl==264&&(Dl(),Wo()),Cl.endNonterminal("FTPrimaryWithOptions",pl)}function tu(){ru(),Hl(214),dl==259&&Du(),dl==264&&Xo()}function nu(){Cl.startNonterminal("FTPrimary",pl);switch(dl){case 34:Ol(34),Hl(162),Dl(),Uo(),Ol(37);break;case 35:au();break;default:iu(),Hl(215),dl==195&&(Dl(),hu())}Cl.endNonterminal("FTPrimary",pl)}function ru(){switch(dl){case 34:Ml(34),Hl(162),zo(),Ml(37);break;case 35:fu();break;default:su(),Hl(215),dl==195&&pu()}}function iu(){Cl.startNonterminal("FTWords",pl),ou(),Hl(221);if(dl==71||dl==76||dl==210)Dl(),lu();Cl.endNonterminal("FTWords",pl)}function su(){uu(),Hl(221),(dl==71||dl==76||dl==210)&&cu()}function ou(){Cl.startNonterminal("FTWordsValue",pl);switch(dl){case 11:Ol(11);break;default:Ol(276),Hl(266),Dl(),G(),Ol(282)}Cl.endNonterminal("FTWordsValue",pl)}function uu(){switch(dl){case 11:Ml(11);break;default:Ml(276),Hl(266),Y(),Ml(282)}}function au(){Cl.startNonterminal("FTExtensionSelection",pl);for(;;){Dl(),Sr(),Hl(100);if(dl!=35)break}Ol(276),Hl(166),dl!=282&&(Dl(),Uo()),Ol(282),Cl.endNonterminal("FTExtensionSelection",pl)}function fu(){for(;;){xr(),Hl(100);if(dl!=35)break}Ml(276),Hl(166),dl!=282&&zo(),Ml(282)}function lu(){Cl.startNonterminal("FTAnyallOption",pl);switch(dl){case 76:Ol(76),Hl(218),dl==272&&Ol(272);break;case 71:Ol(71),Hl(219),dl==273&&Ol(273);break;default:Ol(210)}Cl.endNonterminal("FTAnyallOption",pl)}function cu(){switch(dl){case 76:Ml(76),Hl(218),dl==272&&Ml(272);break;case 71:Ml(71),Hl(219),dl==273&&Ml(273);break;default:Ml(210)}}function hu(){Cl.startNonterminal("FTTimes",pl),Ol(195),Hl(149),Dl(),du(),Ol(247),Cl.endNonterminal("FTTimes",pl)}function pu(){Ml(195),Hl(149),vu(),Ml(247)}function du(){Cl.startNonterminal("FTRange",pl);switch(dl){case 130:Ol(130),Hl(265),Dl(),Un();break;case 81:Ol(81),Hl(125);switch(dl){case 173:Ol(173),Hl(265),Dl(),Un();break;default:Ol(183),Hl(265),Dl(),Un()}break;default:Ol(140),Hl(265),Dl(),Un(),Ol(248),Hl(265),Dl(),Un()}Cl.endNonterminal("FTRange",pl)}function vu(){switch(dl){case 130:Ml(130),Hl(265),zn();break;case 81:Ml(81),Hl(125);switch(dl){case 173:Ml(173),Hl(265),zn();break;default:Ml(183),Hl(265),zn()}break;default:Ml(140),Hl(265),zn(),Ml(248),Hl(265),zn()}}function mu(){Cl.startNonterminal("FTPosFilter",pl);switch(dl){case 202:yu();break;case 269:wu();break;case 117:Su();break;case 115:case 223:Cu();break;default:Ou()}Cl.endNonterminal("FTPosFilter",pl)}function gu(){switch(dl){case 202:bu();break;case 269:Eu();break;case 117:xu();break;case 115:case 223:ku();break;default:Mu()}}function yu(){Cl.startNonterminal("FTOrder",pl),Ol(202),Cl.endNonterminal("FTOrder",pl)}function bu(){Ml(202)}function wu(){Cl.startNonterminal("FTWindow",pl),Ol(269),Hl(265),Dl(),Un(),Dl(),Tu(),Cl.endNonterminal("FTWindow",pl)}function Eu(){Ml(269),Hl(265),zn(),Nu()}function Su(){Cl.startNonterminal("FTDistance",pl),Ol(117),Hl(149),Dl(),du(),Dl(),Tu(),Cl.endNonterminal("FTDistance",pl)}function xu(){Ml(117),Hl(149),vu(),Nu()}function Tu(){Cl.startNonterminal("FTUnit",pl);switch(dl){case 273:Ol(273);break;case 232:Ol(232);break;default:Ol(205)}Cl.endNonterminal("FTUnit",pl)}function Nu(){switch(dl){case 273:Ml(273);break;case 232:Ml(232);break;default:Ml(205)}}function Cu(){Cl.startNonterminal("FTScope",pl);switch(dl){case 223:Ol(223);break;default:Ol(115)}Hl(132),Dl(),Lu(),Cl.endNonterminal("FTScope",pl)}function ku(){switch(dl){case 223:Ml(223);break;default:Ml(115)}Hl(132),Au()}function Lu(){Cl.startNonterminal("FTBigUnit",pl);switch(dl){case 231:Ol(231);break;default:Ol(204)}Cl.endNonterminal("FTBigUnit",pl)}function Au(){switch(dl){case 231:Ml(231);break;default:Ml(204)}}function Ou(){Cl.startNonterminal("FTContent",pl);switch(dl){case 81:Ol(81),Hl(117);switch(dl){case 237:Ol(237);break;default:Ol(126)}break;default:Ol(127),Hl(42),Ol(100)}Cl.endNonterminal("FTContent",pl)}function Mu(){switch(dl){case 81:Ml(81),Hl(117);switch(dl){case 237:Ml(237);break;default:Ml(126)}break;default:Ml(127),Hl(42),Ml(100)}}function _u(){Cl.startNonterminal("FTMatchOptions",pl);for(;;){Ol(259),Hl(182),Dl(),Pu(),Hl(214);if(dl!=259)break}Cl.endNonterminal("FTMatchOptions",pl)}function Du(){for(;;){Ml(259),Hl(182),Hu(),Hl(214);if(dl!=259)break}}function Pu(){Cl.startNonterminal("FTMatchOption",pl);switch(dl){case 188:Bl(161);break;default:cl=dl}switch(cl){case 169:ea();break;case 268:case 137404:na();break;case 246:case 126140:Uu();break;case 238:case 122044:qu();break;case 114:Fu();break;case 239:case 122556:Ju();break;case 199:ia();break;default:Bu()}Cl.endNonterminal("FTMatchOption",pl)}function Hu(){switch(dl){case 188:Bl(161);break;default:cl=dl}switch(cl){case 169:ta();break;case 268:case 137404:ra();break;case 246:case 126140:zu();break;case 238:case 122044:Ru();break;case 114:Iu();break;case 239:case 122556:Ku();break;case 199:sa();break;default:ju()}}function Bu(){Cl.startNonterminal("FTCaseOption",pl);switch(dl){case 88:Ol(88),Hl(124);switch(dl){case 158:Ol(158);break;default:Ol(230)}break;case 177:Ol(177);break;default:Ol(258)}Cl.endNonterminal("FTCaseOption",pl)}function ju(){switch(dl){case 88:Ml(88),Hl(124);switch(dl){case 158:Ml(158);break;default:Ml(230)}break;case 177:Ml(177);break;default:Ml(258)}}function Fu(){Cl.startNonterminal("FTDiacriticsOption",pl),Ol(114),Hl(124);switch(dl){case 158:Ol(158);break;default:Ol(230)}Cl.endNonterminal("FTDiacriticsOption",pl)}function Iu(){Ml(114),Hl(124);switch(dl){case 158:Ml(158);break;default:Ml(230)}}function qu(){Cl.startNonterminal("FTStemOption",pl);switch(dl){case 238:Ol(238);break;default:Ol(188),Hl(74),Ol(238)}Cl.endNonterminal("FTStemOption",pl)}function Ru(){switch(dl){case 238:Ml(238);break;default:Ml(188),Hl(74),Ml(238)}}function Uu(){Cl.startNonterminal("FTThesaurusOption",pl);switch(dl){case 246:Ol(246),Hl(142);switch(dl){case 81:Dl(),Wu();break;case 109:Ol(109);break;default:Ol(34),Hl(112);switch(dl){case 81:Dl(),Wu();break;default:Ol(109)}for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(31),Dl(),Wu()}Ol(37)}break;default:Ol(188),Hl(78),Ol(246)}Cl.endNonterminal("FTThesaurusOption",pl)}function zu(){switch(dl){case 246:Ml(246),Hl(142);switch(dl){case 81:Xu();break;case 109:Ml(109);break;default:Ml(34),Hl(112);switch(dl){case 81:Xu();break;default:Ml(109)}for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(31),Xu()}Ml(37)}break;default:Ml(188),Hl(78),Ml(246)}}function Wu(){Cl.startNonterminal("FTThesaurusID",pl),Ol(81),Hl(15),Ol(7),Hl(220),dl==217&&(Ol(217),Hl(17),Ol(11)),Hl(216);switch(dl){case 81:Bl(165);break;default:cl=dl}if(cl==130||cl==140||cl==88657||cl==93777)Dl(),Vu(),Hl(58),Ol(175);Cl.endNonterminal("FTThesaurusID",pl)}function Xu(){Ml(81),Hl(15),Ml(7),Hl(220),dl==217&&(Ml(217),Hl(17),Ml(11)),Hl(216);switch(dl){case 81:Bl(165);break;default:cl=dl}if(cl==130||cl==140||cl==88657||cl==93777)$u(),Hl(58),Ml(175)}function Vu(){Cl.startNonterminal("FTLiteralRange",pl);switch(dl){case 130:Ol(130),Hl(16),Ol(8);break;case 81:Ol(81),Hl(125);switch(dl){case 173:Ol(173),Hl(16),Ol(8);break;default:Ol(183),Hl(16),Ol(8)}break;default:Ol(140),Hl(16),Ol(8),Hl(79),Ol(248),Hl(16),Ol(8)}Cl.endNonterminal("FTLiteralRange",pl)}function $u(){switch(dl){case 130:Ml(130),Hl(16),Ml(8);break;case 81:Ml(81),Hl(125);switch(dl){case 173:Ml(173),Hl(16),Ml(8);break;default:Ml(183),Hl(16),Ml(8)}break;default:Ml(140),Hl(16),Ml(8),Hl(79),Ml(248),Hl(16),Ml(8)}}function Ju(){Cl.startNonterminal("FTStopWordOption",pl);switch(dl){case 239:Ol(239),Hl(86),Ol(273),Hl(142);switch(dl){case 109:Ol(109);for(;;){Hl(217);if(dl!=131&&dl!=254)break;Dl(),Yu()}break;default:Dl(),Qu();for(;;){Hl(217);if(dl!=131&&dl!=254)break;Dl(),Yu()}}break;default:Ol(188),Hl(75),Ol(239),Hl(86),Ol(273)}Cl.endNonterminal("FTStopWordOption",pl)}function Ku(){switch(dl){case 239:Ml(239),Hl(86),Ml(273),Hl(142);switch(dl){case 109:Ml(109);for(;;){Hl(217);if(dl!=131&&dl!=254)break;Zu()}break;default:Gu();for(;;){Hl(217);if(dl!=131&&dl!=254)break;Zu()}}break;default:Ml(188),Hl(75),Ml(239),Hl(86),Ml(273)}}function Qu(){Cl.startNonterminal("FTStopWords",pl);switch(dl){case 81:Ol(81),Hl(15),Ol(7);break;default:Ol(34),Hl(17),Ol(11);for(;;){Hl(101);if(dl!=41)break;Ol(41),Hl(17),Ol(11)}Ol(37)}Cl.endNonterminal("FTStopWords",pl)}function Gu(){switch(dl){case 81:Ml(81),Hl(15),Ml(7);break;default:Ml(34),Hl(17),Ml(11);for(;;){Hl(101);if(dl!=41)break;Ml(41),Hl(17),Ml(11)}Ml(37)}}function Yu(){Cl.startNonterminal("FTStopWordsInclExcl",pl);switch(dl){case 254:Ol(254);break;default:Ol(131)}Hl(99),Dl(),Qu(),Cl.endNonterminal("FTStopWordsInclExcl",pl)}function Zu(){switch(dl){case 254:Ml(254);break;default:Ml(131)}Hl(99),Gu()}function ea(){Cl.startNonterminal("FTLanguageOption",pl),Ol(169),Hl(17),Ol(11),Cl.endNonterminal("FTLanguageOption",pl)}function ta(){Ml(169),Hl(17),Ml(11)}function na(){Cl.startNonterminal("FTWildCardOption",pl);switch(dl){case 268:Ol(268);break;default:Ol(188),Hl(84),Ol(268)}Cl.endNonterminal("FTWildCardOption",pl)}function ra(){switch(dl){case 268:Ml(268);break;default:Ml(188),Hl(84),Ml(268)}}function ia(){Cl.startNonterminal("FTExtensionOption",pl),Ol(199),Hl(249),Dl(),Aa(),Hl(17),Ol(11),Cl.endNonterminal("FTExtensionOption",pl)}function sa(){Ml(199),Hl(249),Oa(),Hl(17),Ml(11)}function oa(){Cl.startNonterminal("FTIgnoreOption",pl),Ol(271),Hl(42),Ol(100),Hl(265),Dl(),Vn(),Cl.endNonterminal("FTIgnoreOption",pl)}function ua(){Ml(271),Hl(42),Ml(100),Hl(265),$n()}function aa(){Cl.startNonterminal("CollectionDecl",pl),Ol(95),Hl(249),Dl(),Aa(),Hl(107),dl==79&&(Dl(),fa()),Cl.endNonterminal("CollectionDecl",pl)}function fa(){Cl.startNonterminal("CollectionTypeDecl",pl),Ol(79),Hl(178),Dl(),Os(),Hl(156),dl!=53&&(Dl(),ds()),Cl.endNonterminal("CollectionTypeDecl",pl)}function la(){Cl.startNonterminal("IndexName",pl),Aa(),Cl.endNonterminal("IndexName",pl)}function ca(){Cl.startNonterminal("IndexDomainExpr",pl),Tr(),Cl.endNonterminal("IndexDomainExpr",pl)}function ha(){Cl.startNonterminal("IndexKeySpec",pl),pa(),dl==79&&(Dl(),da()),Hl(146),dl==94&&(Dl(),ma()),Cl.endNonterminal("IndexKeySpec",pl)}function pa(){Cl.startNonterminal("IndexKeyExpr",pl),Tr(),Cl.endNonterminal("IndexKeyExpr",pl)}function da(){Cl.startNonterminal("IndexKeyTypeDecl",pl),Ol(79),Hl(249),Dl(),va(),Hl(169);if(dl==39||dl==40||dl==64)Dl(),ds();Cl.endNonterminal("IndexKeyTypeDecl",pl)}function va(){Cl.startNonterminal("AtomicType",pl),Aa(),Cl.endNonterminal("AtomicType",pl)}function ma(){Cl.startNonterminal("IndexKeyCollation",pl),Ol(94),Hl(15),Ol(7),Cl.endNonterminal("IndexKeyCollation",pl)}function ga(){Cl.startNonterminal("IndexDecl",pl),Ol(155),Hl(249),Dl(),la(),Hl(65),Ol(197),Hl(63),Ol(192),Hl(264),Dl(),ca(),Ol(87),Hl(264),Dl(),ha();for(;;){Hl(103);if(dl!=41)break;Ol(41),Hl(264),Dl(),ha()}Cl.endNonterminal("IndexDecl",pl)}function ya(){Cl.startNonterminal("ICDecl",pl),Ol(161),Hl(40),Ol(97),Hl(249),Dl(),Aa(),Hl(120);switch(dl){case 197:Dl(),ba();break;default:Dl(),xa()}Cl.endNonterminal("ICDecl",pl)}function ba(){Cl.startNonterminal("ICCollection",pl),Ol(197),Hl(39),Ol(95),Hl(249),Dl(),Aa(),Hl(140);switch(dl){case 31:Dl(),wa();break;case 191:Dl(),Ea();break;default:Dl(),Sa()}Cl.endNonterminal("ICCollection",pl)}function wa(){Cl.startNonterminal("ICCollSequence",pl),oi(),Hl(37),Ol(92),Hl(266),Dl(),Tf(),Cl.endNonterminal("ICCollSequence",pl)}function Ea(){Cl.startNonterminal("ICCollSequenceUnique",pl),Ol(191),Hl(21),Dl(),oi(),Hl(37),Ol(92),Hl(80),Ol(255),Hl(57),Ol(168),Hl(264),Dl(),Tr(),Cl.endNonterminal("ICCollSequenceUnique",pl)}function Sa(){Cl.startNonterminal("ICCollNode",pl),Ol(138),Hl(62),Ol(191),Hl(21),Dl(),oi(),Hl(37),Ol(92),Hl(266),Dl(),Tf(),Cl.endNonterminal("ICCollNode",pl)}function xa(){Cl.startNonterminal("ICForeignKey",pl),Ol(139),Hl(57),Ol(168),Hl(51),Dl(),Ta(),Dl(),Na(),Cl.endNonterminal("ICForeignKey",pl)}function Ta(){Cl.startNonterminal("ICForeignKeySource",pl),Ol(140),Hl(39),Dl(),Ca(),Cl.endNonterminal("ICForeignKeySource",pl)}function Na(){Cl.startNonterminal("ICForeignKeyTarget",pl),Ol(248),Hl(39),Dl(),Ca(),Cl.endNonterminal("ICForeignKeyTarget",pl)}function Ca(){Cl.startNonterminal("ICForeignKeyValues",pl),Ol(95),Hl(249),Dl(),Aa(),Hl(62),Ol(191),Hl(21),Dl(),oi(),Hl(57),Ol(168),Hl(264),Dl(),Tr(),Cl.endNonterminal("ICForeignKeyValues",pl)}function ka(){Ml(36);for(;;){jl(89);if(dl==50)break;switch(dl){case 24:Ml(24);break;default:ka()}}Ml(50)}function La(){switch(dl){case 22:Ml(22);break;default:ka()}}function Aa(){Cl.startNonterminal("EQName",pl),jl(247);switch(dl){case 82:Ol(82);break;case 96:Ol(96);break;case 120:Ol(120);break;case 121:Ol(121);break;case 124:Ol(124);break;case 145:Ol(145);break;case 152:Ol(152);break;case 165:Ol(165);break;case 185:Ol(185);break;case 191:Ol(191);break;case 216:Ol(216);break;case 226:Ol(226);break;case 227:Ol(227);break;case 243:Ol(243);break;case 244:Ol(244);break;case 253:Ol(253);break;default:Ma()}Cl.endNonterminal("EQName",pl)}function Oa(){jl(247);switch(dl){case 82:Ml(82);break;case 96:Ml(96);break;case 120:Ml(120);break;case 121:Ml(121);break;case 124:Ml(124);break;case 145:Ml(145);break;case 152:Ml(152);break;case 165:Ml(165);break;case 185:Ml(185);break;case 191:Ml(191);break;case 216:Ml(216);break;case 226:Ml(226);break;case 227:Ml(227);break;case 243:Ml(243);break;case 244:Ml(244);break;case 253:Ml(253);break;default:_a()}}function Ma(){Cl.startNonterminal("FunctionName",pl);switch(dl){case 6:Ol(6);break;case 70:Ol(70);break;case 73:Ol(73);break;case 74:Ol(74);break;case 75:Ol(75);break;case 79:Ol(79);break;case 80:Ol(80);break;case 84:Ol(84);break;case 88:Ol(88);break;case 89:Ol(89);break;case 90:Ol(90);break;case 93:Ol(93);break;case 94:Ol(94);break;case 103:Ol(103);break;case 105:Ol(105);break;case 108:Ol(108);break;case 109:Ol(109);break;case 110:Ol(110);break;case 111:Ol(111);break;case 112:Ol(112);break;case 113:Ol(113);break;case 118:Ol(118);break;case 119:Ol(119);break;case 122:Ol(122);break;case 123:Ol(123);break;case 126:Ol(126);break;case 128:Ol(128);break;case 129:Ol(129);break;case 131:Ol(131);break;case 134:Ol(134);break;case 135:Ol(135);break;case 136:Ol(136);break;case 137:Ol(137);break;case 146:Ol(146);break;case 148:Ol(148);break;case 150:Ol(150);break;case 151:Ol(151);break;case 153:Ol(153);break;case 159:Ol(159);break;case 160:Ol(160);break;case 162:Ol(162);break;case 163:Ol(163);break;case 164:Ol(164);break;case 170:Ol(170);break;case 172:Ol(172);break;case 174:Ol(174);break;case 178:Ol(178);break;case 180:Ol(180);break;case 181:Ol(181);break;case 182:Ol(182);break;case 184:Ol(184);break;case 186:Ol(186);break;case 198:Ol(198);break;case 200:Ol(200);break;case 201:Ol(201);break;case 202:Ol(202);break;case 206:Ol(206);break;case 212:Ol(212);break;case 213:Ol(213);break;case 218:Ol(218);break;case 219:Ol(219);break;case 220:Ol(220);break;case 224:Ol(224);break;case 229:Ol(229);break;case 235:Ol(235);break;case 236:Ol(236);break;case 237:Ol(237);break;case 248:Ol(248);break;case 249:Ol(249);break;case 250:Ol(250);break;case 254:Ol(254);break;case 256:Ol(256);break;case 260:Ol(260);break;case 266:Ol(266);break;case 270:Ol(270);break;case 274:Ol(274);break;case 72:Ol(72);break;case 81:Ol(81);break;case 83:Ol(83);break;case 85:Ol(85);break;case 86:Ol(86);break;case 91:Ol(91);break;case 98:Ol(98);break;case 101:Ol(101);break;case 102:Ol(102);break;case 104:Ol(104);break;case 106:Ol(106);break;case 125:Ol(125);break;case 132:Ol(132);break;case 133:Ol(133);break;case 141:Ol(141);break;case 154:Ol(154);break;case 155:Ol(155);break;case 161:Ol(161);break;case 171:Ol(171);break;case 192:Ol(192);break;case 199:Ol(199);break;case 203:Ol(203);break;case 222:Ol(222);break;case 225:Ol(225);break;case 228:Ol(228);break;case 234:Ol(234);break;case 240:Ol(240);break;case 251:Ol(251);break;case 252:Ol(252);break;case 257:Ol(257);break;case 261:Ol(261);break;case 262:Ol(262);break;case 263:Ol(263);break;case 267:Ol(267);break;case 97:Ol(97);break;case 176:Ol(176);break;default:Ol(221)}Cl.endNonterminal("FunctionName",pl)}function _a(){switch(dl){case 6:Ml(6);break;case 70:Ml(70);break;case 73:Ml(73);break;case 74:Ml(74);break;case 75:Ml(75);break;case 79:Ml(79);break;case 80:Ml(80);break;case 84:Ml(84);break;case 88:Ml(88);break;case 89:Ml(89);break;case 90:Ml(90);break;case 93:Ml(93);break;case 94:Ml(94);break;case 103:Ml(103);break;case 105:Ml(105);break;case 108:Ml(108);break;case 109:Ml(109);break;case 110:Ml(110);break;case 111:Ml(111);break;case 112:Ml(112);break;case 113:Ml(113);break;case 118:Ml(118);break;case 119:Ml(119);break;case 122:Ml(122);break;case 123:Ml(123);break;case 126:Ml(126);break;case 128:Ml(128);break;case 129:Ml(129);break;case 131:Ml(131);break;case 134:Ml(134);break;case 135:Ml(135);break;case 136:Ml(136);break;case 137:Ml(137);break;case 146:Ml(146);break;case 148:Ml(148);break;case 150:Ml(150);break;case 151:Ml(151);break;case 153:Ml(153);break;case 159:Ml(159);break;case 160:Ml(160);break;case 162:Ml(162);break;case 163:Ml(163);break;case 164:Ml(164);break;case 170:Ml(170);break;case 172:Ml(172);break;case 174:Ml(174);break;case 178:Ml(178);break;case 180:Ml(180);break;case 181:Ml(181);break;case 182:Ml(182);break;case 184:Ml(184);break;case 186:Ml(186);break;case 198:Ml(198);break;case 200:Ml(200);break;case 201:Ml(201);break;case 202:Ml(202);break;case 206:Ml(206);break;case 212:Ml(212);break;case 213:Ml(213);break;case 218:Ml(218);break;case 219:Ml(219);break;case 220:Ml(220);break;case 224:Ml(224);break;case 229:Ml(229);break;case 235:Ml(235);break;case 236:Ml(236);break;case 237:Ml(237);break;case 248:Ml(248);break;case 249:Ml(249);break;case 250:Ml(250);break;case 254:Ml(254);break;case 256:Ml(256);break;case 260:Ml(260);break;case 266:Ml(266);break;case 270:Ml(270);break;case 274:Ml(274);break;case 72:Ml(72);break;case 81:Ml(81);break;case 83:Ml(83);break;case 85:Ml(85);break;case 86:Ml(86);break;case 91:Ml(91);break;case 98:Ml(98);break;case 101:Ml(101);break;case 102:Ml(102);break;case 104:Ml(104);break;case 106:Ml(106);break;case 125:Ml(125);break;case 132:Ml(132);break;case 133:Ml(133);break;case 141:Ml(141);break;case 154:Ml(154);break;case 155:Ml(155);break;case 161:Ml(161);break;case 171:Ml(171);break;case 192:Ml(192);break;case 199:Ml(199);break;case 203:Ml(203);break;case 222:Ml(222);break;case 225:Ml(225);break;case 228:Ml(228);break;case 234:Ml(234);break;case 240:Ml(240);break;case 251:Ml(251);break;case 252:Ml(252);break;case 257:Ml(257);break;case 261:Ml(261);break;case 262:Ml(262);break;case 263:Ml(263);break;case 267:Ml(267);break;case 97:Ml(97);break;case 176:Ml(176);break;default:Ml(221)}}function Da(){Cl.startNonterminal("NCName",pl);switch(dl){case 19:Ol(19);break;case 70:Ol(70);break;case 75:Ol(75);break;case 79:Ol(79);break;case 80:Ol(80);break;case 84:Ol(84);break;case 88:Ol(88);break;case 89:Ol(89);break;case 90:Ol(90);break;case 94:Ol(94);break;case 105:Ol(105);break;case 109:Ol(109);break;case 113:Ol(113);break;case 118:Ol(118);break;case 122:Ol(122);break;case 123:Ol(123);break;case 126:Ol(126);break;case 128:Ol(128);break;case 131:Ol(131);break;case 137:Ol(137);break;case 146:Ol(146);break;case 148:Ol(148);break;case 150:Ol(150);break;case 151:Ol(151);break;case 160:Ol(160);break;case 162:Ol(162);break;case 163:Ol(163);break;case 164:Ol(164);break;case 172:Ol(172);break;case 174:Ol(174);break;case 178:Ol(178);break;case 180:Ol(180);break;case 181:Ol(181);break;case 186:Ol(186);break;case 198:Ol(198);break;case 200:Ol(200);break;case 201:Ol(201);break;case 220:Ol(220);break;case 224:Ol(224);break;case 236:Ol(236);break;case 237:Ol(237);break;case 248:Ol(248);break;case 249:Ol(249);break;case 254:Ol(254);break;case 266:Ol(266);break;case 270:Ol(270);break;case 73:Ol(73);break;case 74:Ol(74);break;case 82:Ol(82);break;case 93:Ol(93);break;case 96:Ol(96);break;case 103:Ol(103);break;case 108:Ol(108);break;case 110:Ol(110);break;case 111:Ol(111);break;case 112:Ol(112);break;case 119:Ol(119);break;case 120:Ol(120);break;case 121:Ol(121);break;case 124:Ol(124);break;case 129:Ol(129);break;case 134:Ol(134);break;case 135:Ol(135);break;case 136:Ol(136);break;case 145:Ol(145);break;case 152:Ol(152);break;case 153:Ol(153);break;case 159:Ol(159);break;case 165:Ol(165);break;case 170:Ol(170);break;case 182:Ol(182);break;case 184:Ol(184);break;case 185:Ol(185);break;case 191:Ol(191);break;case 202:Ol(202);break;case 206:Ol(206);break;case 212:Ol(212);break;case 213:Ol(213);break;case 216:Ol(216);break;case 218:Ol(218);break;case 219:Ol(219);break;case 226:Ol(226);break;case 227:Ol(227);break;case 229:Ol(229);break;case 235:Ol(235);break;case 243:Ol(243);break;case 244:Ol(244);break;case 250:Ol(250);break;case 253:Ol(253);break;case 256:Ol(256);break;case 260:Ol(260);break;case 262:Ol(262);break;case 274:Ol(274);break;case 72:Ol(72);break;case 81:Ol(81);break;case 83:Ol(83);break;case 85:Ol(85);break;case 86:Ol(86);break;case 91:Ol(91);break;case 98:Ol(98);break;case 101:Ol(101);break;case 102:Ol(102);break;case 104:Ol(104);break;case 106:Ol(106);break;case 125:Ol(125);break;case 132:Ol(132);break;case 133:Ol(133);break;case 141:Ol(141);break;case 154:Ol(154);break;case 155:Ol(155);break;case 161:Ol(161);break;case 171:Ol(171);break;case 192:Ol(192);break;case 199:Ol(199);break;case 203:Ol(203);break;case 222:Ol(222);break;case 225:Ol(225);break;case 228:Ol(228);break;case 234:Ol(234);break;case 240:Ol(240);break;case 251:Ol(251);break;case 252:Ol(252);break;case 257:Ol(257);break;case 261:Ol(261);break;case 263:Ol(263);break;case 267:Ol(267);break;case 97:Ol(97);break;case 176:Ol(176);break;default:Ol(221)}Cl.endNonterminal("NCName",pl)}function Pa(){switch(dl){case 19:Ml(19);break;case 70:Ml(70);break;case 75:Ml(75);break;case 79:Ml(79);break;case 80:Ml(80);break;case 84:Ml(84);break;case 88:Ml(88);break;case 89:Ml(89);break;case 90:Ml(90);break;case 94:Ml(94);break;case 105:Ml(105);break;case 109:Ml(109);break;case 113:Ml(113);break;case 118:Ml(118);break;case 122:Ml(122);break;case 123:Ml(123);break;case 126:Ml(126);break;case 128:Ml(128);break;case 131:Ml(131);break;case 137:Ml(137);break;case 146:Ml(146);break;case 148:Ml(148);break;case 150:Ml(150);break;case 151:Ml(151);break;case 160:Ml(160);break;case 162:Ml(162);break;case 163:Ml(163);break;case 164:Ml(164);break;case 172:Ml(172);break;case 174:Ml(174);break;case 178:Ml(178);break;case 180:Ml(180);break;case 181:Ml(181);break;case 186:Ml(186);break;case 198:Ml(198);break;case 200:Ml(200);break;case 201:Ml(201);break;case 220:Ml(220);break;case 224:Ml(224);break;case 236:Ml(236);break;case 237:Ml(237);break;case 248:Ml(248);break;case 249:Ml(249);break;case 254:Ml(254);break;case 266:Ml(266);break;case 270:Ml(270);break;case 73:Ml(73);break;case 74:Ml(74);break;case 82:Ml(82);break;case 93:Ml(93);break;case 96:Ml(96);break;case 103:Ml(103);break;case 108:Ml(108);break;case 110:Ml(110);break;case 111:Ml(111);break;case 112:Ml(112);break;case 119:Ml(119);break;case 120:Ml(120);break;case 121:Ml(121);break;case 124:Ml(124);break;case 129:Ml(129);break;case 134:Ml(134);break;case 135:Ml(135);break;case 136:Ml(136);break;case 145:Ml(145);break;case 152:Ml(152);break;case 153:Ml(153);break;case 159:Ml(159);break;case 165:Ml(165);break;case 170:Ml(170);break;case 182:Ml(182);break;case 184:Ml(184);break;case 185:Ml(185);break;case 191:Ml(191);break;case 202:Ml(202);break;case 206:Ml(206);break;case 212:Ml(212);break;case 213:Ml(213);break;case 216:Ml(216);break;case 218:Ml(218);break;case 219:Ml(219);break;case 226:Ml(226);break;case 227:Ml(227);break;case 229:Ml(229);break;case 235:Ml(235);break;case 243:Ml(243);break;case 244:Ml(244);break;case 250:Ml(250);break;case 253:Ml(253);break;case 256:Ml(256);break;case 260:Ml(260);break;case 262:Ml(262);break;case 274:Ml(274);break;case 72:Ml(72);break;case 81:Ml(81);break;case 83:Ml(83);break;case 85:Ml(85);break;case 86:Ml(86);break;case 91:Ml(91);break;case 98:Ml(98);break;case 101:Ml(101);break;case 102:Ml(102);break;case 104:Ml(104);break;case 106:Ml(106);break;case 125:Ml(125);break;case 132:Ml(132);break;case 133:Ml(133);break;case 141:Ml(141);break;case 154:Ml(154);break;case 155:Ml(155);break;case 161:Ml(161);break;case 171:Ml(171);break;case 192:Ml(192);break;case 199:Ml(199);break;case 203:Ml(203);break;case 222:Ml(222);break;case 225:Ml(225);break;case 228:Ml(228);break;case 234:Ml(234);break;case 240:Ml(240);break;case 251:Ml(251);break;case 252:Ml(252);break;case 257:Ml(257);break;case 261:Ml(261);break;case 263:Ml(263);break;case 267:Ml(267);break;case 97:Ml(97);break;case 176:Ml(176);break;default:Ml(221)}}function Ha(){Cl.startNonterminal("MainModule",pl),l(),Dl(),Ba(),Cl.endNonterminal("MainModule",pl)}function Ba(){Cl.startNonterminal("Program",pl),Ra(),Cl.endNonterminal("Program",pl)}function ja(){Cl.startNonterminal("Statements",pl);for(;;){Hl(273);switch(dl){case 34:Bl(268);break;case 35:Fl(248);break;case 46:Bl(281);break;case 47:Bl(263);break;case 54:Fl(4);break;case 55:Fl(1);break;case 59:Fl(3);break;case 66:Bl(251);break;case 68:Bl(270);break;case 77:Bl(56);break;case 82:Bl(278);break;case 121:Bl(276);break;case 132:Bl(202);break;case 137:Bl(206);break;case 174:Bl(204);break;case 218:Bl(205);break;case 219:Bl(208);break;case 260:Bl(209);break;case 276:Bl(272);break;case 278:Bl(271);break;case 5:case 45:Bl(186);break;case 31:case 32:Bl(249);break;case 40:case 42:Bl(265);break;case 86:case 102:Bl(200);break;case 110:case 159:Bl(207);break;case 124:case 165:Bl(191);break;case 184:case 216:Bl(277);break;case 103:case 129:case 235:case 262:Bl(197);break;case 8:case 9:case 10:case 11:case 44:Bl(192);break;case 96:case 119:case 202:case 244:case 250:case 256:Bl(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Bl(198);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Bl(195);break;default:cl=dl}if(cl!=25&&cl!=282&&cl!=12805&&cl!=12806&&cl!=12808&&cl!=12809&&cl!=12810&&cl!=12811&&cl!=12844&&cl!=12845&&cl!=12846&&cl!=12870&&cl!=12872&&cl!=12873&&cl!=12874&&cl!=12875&&cl!=12879&&cl!=12880&&cl!=12881&&cl!=12882&&cl!=12883&&cl!=12884&&cl!=12885&&cl!=12886&&cl!=12888&&cl!=12889&&cl!=12890&&cl!=12891&&cl!=12893&&cl!=12894&&cl!=12896&&cl!=12897&&cl!=12898&&cl!=12901&&cl!=12902&&cl!=12903&&cl!=12904&&cl!=12905&&cl!=12906&&cl!=12908&&cl!=12909&&cl!=12910&&cl!=12911&&cl!=12912&&cl!=12913&&cl!=12918&&cl!=12919&&cl!=12920&&cl!=12921&&cl!=12922&&cl!=12923&&cl!=12924&&cl!=12925&&cl!=12926&&cl!=12928&&cl!=12929&&cl!=12931&&cl!=12932&&cl!=12933&&cl!=12934&&cl!=12935&&cl!=12936&&cl!=12937&&cl!=12941&&cl!=12945&&cl!=12946&&cl!=12948&&cl!=12950&&cl!=12951&&cl!=12952&&cl!=12953&&cl!=12954&&cl!=12955&&cl!=12959&&cl!=12960&&cl!=12961&&cl!=12962&&cl!=12963&&cl!=12964&&cl!=12965&&cl!=12970&&cl!=12971&&cl!=12972&&cl!=12974&&cl!=12976&&cl!=12978&&cl!=12980&&cl!=12981&&cl!=12982&&cl!=12984&&cl!=12985&&cl!=12986&&cl!=12991&&cl!=12992&&cl!=12998&&cl!=12999&&cl!=13e3&&cl!=13001&&cl!=13002&&cl!=13003&&cl!=13006&&cl!=13012&&cl!=13013&&cl!=13016&&cl!=13018&&cl!=13019&&cl!=13020&&cl!=13021&&cl!=13022&&cl!=13024&&cl!=13025&&cl!=13026&&cl!=13027&&cl!=13028&&cl!=13029&&cl!=13034&&cl!=13035&&cl!=13036&&cl!=13037&&cl!=13040&&cl!=13043&&cl!=13044&&cl!=13048&&cl!=13049&&cl!=13050&&cl!=13051&&cl!=13052&&cl!=13053&&cl!=13054&&cl!=13056&&cl!=13057&&cl!=13060&&cl!=13061&&cl!=13062&&cl!=13063&&cl!=13066&&cl!=13067&&cl!=13070&&cl!=13074&&cl!=16134&&cl!=20997&&cl!=20998&&cl!=21e3&&cl!=21001&&cl!=21002&&cl!=21003&&cl!=21036&&cl!=21037&&cl!=21038&&cl!=21062&&cl!=21064&&cl!=21065&&cl!=21066&&cl!=21067&&cl!=21071&&cl!=21072&&cl!=21073&&cl!=21074&&cl!=21075&&cl!=21076&&cl!=21077&&cl!=21078&&cl!=21080&&cl!=21081&&cl!=21082&&cl!=21083&&cl!=21085&&cl!=21086&&cl!=21088&&cl!=21089&&cl!=21090&&cl!=21093&&cl!=21094&&cl!=21095&&cl!=21096&&cl!=21097&&cl!=21098&&cl!=21100&&cl!=21101&&cl!=21102&&cl!=21103&&cl!=21104&&cl!=21105&&cl!=21110&&cl!=21111&&cl!=21112&&cl!=21113&&cl!=21114&&cl!=21115&&cl!=21116&&cl!=21117&&cl!=21118&&cl!=21120&&cl!=21121&&cl!=21123&&cl!=21124&&cl!=21125&&cl!=21126&&cl!=21127&&cl!=21128&&cl!=21129&&cl!=21133&&cl!=21137&&cl!=21138&&cl!=21140&&cl!=21142&&cl!=21143&&cl!=21144&&cl!=21145&&cl!=21146&&cl!=21147&&cl!=21151&&cl!=21152&&cl!=21153&&cl!=21154&&cl!=21155&&cl!=21156&&cl!=21157&&cl!=21162&&cl!=21163&&cl!=21164&&cl!=21166&&cl!=21168&&cl!=21170&&cl!=21172&&cl!=21173&&cl!=21174&&cl!=21176&&cl!=21177&&cl!=21178&&cl!=21183&&cl!=21184&&cl!=21190&&cl!=21191&&cl!=21192&&cl!=21193&&cl!=21194&&cl!=21195&&cl!=21198&&cl!=21204&&cl!=21205&&cl!=21208&&cl!=21210&&cl!=21211&&cl!=21212&&cl!=21213&&cl!=21214&&cl!=21216&&cl!=21217&&cl!=21218&&cl!=21219&&cl!=21220&&cl!=21221&&cl!=21226&&cl!=21227&&cl!=21228&&cl!=21229&&cl!=21232&&cl!=21235&&cl!=21236&&cl!=21240&&cl!=21241&&cl!=21242&&cl!=21243&&cl!=21244&&cl!=21245&&cl!=21246&&cl!=21248&&cl!=21249&&cl!=21252&&cl!=21253&&cl!=21254&&cl!=21255&&cl!=21258&&cl!=21259&&cl!=21262&&cl!=21266&&cl!=27141&&cl!=27142&&cl!=27144&&cl!=27145&&cl!=27146&&cl!=27147&&cl!=27180&&cl!=27181&&cl!=27182&&cl!=27206&&cl!=27208&&cl!=27209&&cl!=27210&&cl!=27211&&cl!=27215&&cl!=27216&&cl!=27217&&cl!=27218&&cl!=27219&&cl!=27220&&cl!=27221&&cl!=27222&&cl!=27224&&cl!=27225&&cl!=27226&&cl!=27227&&cl!=27229&&cl!=27230&&cl!=27232&&cl!=27233&&cl!=27234&&cl!=27237&&cl!=27238&&cl!=27239&&cl!=27240&&cl!=27241&&cl!=27242&&cl!=27244&&cl!=27245&&cl!=27246&&cl!=27247&&cl!=27248&&cl!=27249&&cl!=27254&&cl!=27255&&cl!=27256&&cl!=27257&&cl!=27258&&cl!=27259&&cl!=27260&&cl!=27261&&cl!=27262&&cl!=27264&&cl!=27265&&cl!=27267&&cl!=27268&&cl!=27269&&cl!=27270&&cl!=27271&&cl!=27272&&cl!=27273&&cl!=27277&&cl!=27281&&cl!=27282&&cl!=27284&&cl!=27286&&cl!=27287&&cl!=27288&&cl!=27289&&cl!=27290&&cl!=27291&&cl!=27295&&cl!=27296&&cl!=27297&&cl!=27298&&cl!=27299&&cl!=27300&&cl!=27301&&cl!=27306&&cl!=27307&&cl!=27308&&cl!=27310&&cl!=27312&&cl!=27314&&cl!=27316&&cl!=27317&&cl!=27318&&cl!=27320&&cl!=27321&&cl!=27322&&cl!=27327&&cl!=27328&&cl!=27334&&cl!=27335&&cl!=27336&&cl!=27337&&cl!=27338&&cl!=27339&&cl!=27342&&cl!=27348&&cl!=27349&&cl!=27352&&cl!=27354&&cl!=27355&&cl!=27356&&cl!=27357&&cl!=27358&&cl!=27360&&cl!=27361&&cl!=27362&&cl!=27363&&cl!=27364&&cl!=27365&&cl!=27370&&cl!=27371&&cl!=27372&&cl!=27373&&cl!=27376&&cl!=27379&&cl!=27380&&cl!=27384&&cl!=27385&&cl!=27386&&cl!=27387&&cl!=27388&&cl!=27389&&cl!=27390&&cl!=27392&&cl!=27393&&cl!=27396&&cl!=27397&&cl!=27398&&cl!=27399&&cl!=27402&&cl!=27403&&cl!=27406&&cl!=27410&&cl!=90198&&cl!=90214&&cl!=113284&&cl!=144389&&cl!=144390&&cl!=144392&&cl!=144393&&cl!=144394&&cl!=144395&&cl!=144428&&cl!=144429&&cl!=144430&&cl!=144454&&cl!=144456&&cl!=144457&&cl!=144458&&cl!=144459&&cl!=144463&&cl!=144464&&cl!=144465&&cl!=144466&&cl!=144467&&cl!=144468&&cl!=144469&&cl!=144470&&cl!=144472&&cl!=144473&&cl!=144474&&cl!=144475&&cl!=144477&&cl!=144478&&cl!=144480&&cl!=144481&&cl!=144482&&cl!=144485&&cl!=144486&&cl!=144487&&cl!=144488&&cl!=144489&&cl!=144490&&cl!=144492&&cl!=144493&&cl!=144494&&cl!=144495&&cl!=144496&&cl!=144497&&cl!=144502&&cl!=144503&&cl!=144504&&cl!=144505&&cl!=144506&&cl!=144507&&cl!=144508&&cl!=144509&&cl!=144510&&cl!=144512&&cl!=144513&&cl!=144515&&cl!=144516&&cl!=144517&&cl!=144518&&cl!=144519&&cl!=144520&&cl!=144521&&cl!=144525&&cl!=144529&&cl!=144530&&cl!=144532&&cl!=144534&&cl!=144535&&cl!=144536&&cl!=144537&&cl!=144538&&cl!=144539&&cl!=144543&&cl!=144544&&cl!=144545&&cl!=144546&&cl!=144547&&cl!=144548&&cl!=144549&&cl!=144554&&cl!=144555&&cl!=144556&&cl!=144558&&cl!=144560&&cl!=144562&&cl!=144564&&cl!=144565&&cl!=144566&&cl!=144568&&cl!=144569&&cl!=144570&&cl!=144575&&cl!=144576&&cl!=144582&&cl!=144583&&cl!=144584&&cl!=144585&&cl!=144586&&cl!=144587&&cl!=144590&&cl!=144596&&cl!=144597&&cl!=144600&&cl!=144602&&cl!=144603&&cl!=144604&&cl!=144605&&cl!=144606&&cl!=144608&&cl!=144609&&cl!=144610&&cl!=144611&&cl!=144612&&cl!=144613&&cl!=144618&&cl!=144619&&cl!=144620&&cl!=144621&&cl!=144624&&cl!=144627&&cl!=144628&&cl!=144632&&cl!=144633&&cl!=144634&&cl!=144635&&cl!=144636&&cl!=144637&&cl!=144638&&cl!=144640&&cl!=144641&&cl!=144644&&cl!=144645&&cl!=144646&&cl!=144647&&cl!=144650&&cl!=144651&&cl!=144654&&cl!=144658){cl=Ll(5,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Wa(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(5,pl,cl)}}if(cl!=-1&&cl!=16134&&cl!=27141&&cl!=27142&&cl!=27144&&cl!=27145&&cl!=27146&&cl!=27147&&cl!=27180&&cl!=27181&&cl!=27182&&cl!=27206&&cl!=27208&&cl!=27209&&cl!=27210&&cl!=27211&&cl!=27215&&cl!=27216&&cl!=27217&&cl!=27218&&cl!=27219&&cl!=27220&&cl!=27221&&cl!=27222&&cl!=27224&&cl!=27225&&cl!=27226&&cl!=27227&&cl!=27229&&cl!=27230&&cl!=27232&&cl!=27233&&cl!=27234&&cl!=27237&&cl!=27238&&cl!=27239&&cl!=27240&&cl!=27241&&cl!=27242&&cl!=27244&&cl!=27245&&cl!=27246&&cl!=27247&&cl!=27248&&cl!=27249&&cl!=27254&&cl!=27255&&cl!=27256&&cl!=27257&&cl!=27258&&cl!=27259&&cl!=27260&&cl!=27261&&cl!=27262&&cl!=27264&&cl!=27265&&cl!=27267&&cl!=27268&&cl!=27269&&cl!=27270&&cl!=27271&&cl!=27272&&cl!=27273&&cl!=27277&&cl!=27281&&cl!=27282&&cl!=27284&&cl!=27286&&cl!=27287&&cl!=27288&&cl!=27289&&cl!=27290&&cl!=27291&&cl!=27295&&cl!=27296&&cl!=27297&&cl!=27298&&cl!=27299&&cl!=27300&&cl!=27301&&cl!=27306&&cl!=27307&&cl!=27308&&cl!=27310&&cl!=27312&&cl!=27314&&cl!=27316&&cl!=27317&&cl!=27318&&cl!=27320&&cl!=27321&&cl!=27322&&cl!=27327&&cl!=27328&&cl!=27334&&cl!=27335&&cl!=27336&&cl!=27337&&cl!=27338&&cl!=27339&&cl!=27342&&cl!=27348&&cl!=27349&&cl!=27352&&cl!=27354&&cl!=27355&&cl!=27356&&cl!=27357&&cl!=27358&&cl!=27360&&cl!=27361&&cl!=27362&&cl!=27363&&cl!=27364&&cl!=27365&&cl!=27370&&cl!=27371&&cl!=27372&&cl!=27373&&cl!=27376&&cl!=27379&&cl!=27380&&cl!=27384&&cl!=27385&&cl!=27386&&cl!=27387&&cl!=27388&&cl!=27389&&cl!=27390&&cl!=27392&&cl!=27393&&cl!=27396&&cl!=27397&&cl!=27398&&cl!=27399&&cl!=27402&&cl!=27403&&cl!=27406&&cl!=27410&&cl!=90198&&cl!=90214&&cl!=113284)break;Dl(),za()}Cl.endNonterminal("Statements",pl)}function Fa(){for(;;){Hl(273);switch(dl){case 34:Bl(268);break;case 35:Fl(248);break;case 46:Bl(281);break;case 47:Bl(263);break;case 54:Fl(4);break;case 55:Fl(1);break;case 59:Fl(3);break;case 66:Bl(251);break;case 68:Bl(270);break;case 77:Bl(56);break;case 82:Bl(278);break;case 121:Bl(276);break;case 132:Bl(202);break;case 137:Bl(206);break;case 174:Bl(204);break;case 218:Bl(205);break;case 219:Bl(208);break;case 260:Bl(209);break;case 276:Bl(272);break;case 278:Bl(271);break;case 5:case 45:Bl(186);break;case 31:case 32:Bl(249);break;case 40:case 42:Bl(265);break;case 86:case 102:Bl(200);break;case 110:case 159:Bl(207);break;case 124:case 165:Bl(191);break;case 184:case 216:Bl(277);break;case 103:case 129:case 235:case 262:Bl(197);break;case 8:case 9:case 10:case 11:case 44:Bl(192);break;case 96:case 119:case 202:case 244:case 250:case 256:Bl(203);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Bl(198);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Bl(195);break;default:cl=dl}if(cl!=25&&cl!=282&&cl!=12805&&cl!=12806&&cl!=12808&&cl!=12809&&cl!=12810&&cl!=12811&&cl!=12844&&cl!=12845&&cl!=12846&&cl!=12870&&cl!=12872&&cl!=12873&&cl!=12874&&cl!=12875&&cl!=12879&&cl!=12880&&cl!=12881&&cl!=12882&&cl!=12883&&cl!=12884&&cl!=12885&&cl!=12886&&cl!=12888&&cl!=12889&&cl!=12890&&cl!=12891&&cl!=12893&&cl!=12894&&cl!=12896&&cl!=12897&&cl!=12898&&cl!=12901&&cl!=12902&&cl!=12903&&cl!=12904&&cl!=12905&&cl!=12906&&cl!=12908&&cl!=12909&&cl!=12910&&cl!=12911&&cl!=12912&&cl!=12913&&cl!=12918&&cl!=12919&&cl!=12920&&cl!=12921&&cl!=12922&&cl!=12923&&cl!=12924&&cl!=12925&&cl!=12926&&cl!=12928&&cl!=12929&&cl!=12931&&cl!=12932&&cl!=12933&&cl!=12934&&cl!=12935&&cl!=12936&&cl!=12937&&cl!=12941&&cl!=12945&&cl!=12946&&cl!=12948&&cl!=12950&&cl!=12951&&cl!=12952&&cl!=12953&&cl!=12954&&cl!=12955&&cl!=12959&&cl!=12960&&cl!=12961&&cl!=12962&&cl!=12963&&cl!=12964&&cl!=12965&&cl!=12970&&cl!=12971&&cl!=12972&&cl!=12974&&cl!=12976&&cl!=12978&&cl!=12980&&cl!=12981&&cl!=12982&&cl!=12984&&cl!=12985&&cl!=12986&&cl!=12991&&cl!=12992&&cl!=12998&&cl!=12999&&cl!=13e3&&cl!=13001&&cl!=13002&&cl!=13003&&cl!=13006&&cl!=13012&&cl!=13013&&cl!=13016&&cl!=13018&&cl!=13019&&cl!=13020&&cl!=13021&&cl!=13022&&cl!=13024&&cl!=13025&&cl!=13026&&cl!=13027&&cl!=13028&&cl!=13029&&cl!=13034&&cl!=13035&&cl!=13036&&cl!=13037&&cl!=13040&&cl!=13043&&cl!=13044&&cl!=13048&&cl!=13049&&cl!=13050&&cl!=13051&&cl!=13052&&cl!=13053&&cl!=13054&&cl!=13056&&cl!=13057&&cl!=13060&&cl!=13061&&cl!=13062&&cl!=13063&&cl!=13066&&cl!=13067&&cl!=13070&&cl!=13074&&cl!=16134&&cl!=20997&&cl!=20998&&cl!=21e3&&cl!=21001&&cl!=21002&&cl!=21003&&cl!=21036&&cl!=21037&&cl!=21038&&cl!=21062&&cl!=21064&&cl!=21065&&cl!=21066&&cl!=21067&&cl!=21071&&cl!=21072&&cl!=21073&&cl!=21074&&cl!=21075&&cl!=21076&&cl!=21077&&cl!=21078&&cl!=21080&&cl!=21081&&cl!=21082&&cl!=21083&&cl!=21085&&cl!=21086&&cl!=21088&&cl!=21089&&cl!=21090&&cl!=21093&&cl!=21094&&cl!=21095&&cl!=21096&&cl!=21097&&cl!=21098&&cl!=21100&&cl!=21101&&cl!=21102&&cl!=21103&&cl!=21104&&cl!=21105&&cl!=21110&&cl!=21111&&cl!=21112&&cl!=21113&&cl!=21114&&cl!=21115&&cl!=21116&&cl!=21117&&cl!=21118&&cl!=21120&&cl!=21121&&cl!=21123&&cl!=21124&&cl!=21125&&cl!=21126&&cl!=21127&&cl!=21128&&cl!=21129&&cl!=21133&&cl!=21137&&cl!=21138&&cl!=21140&&cl!=21142&&cl!=21143&&cl!=21144&&cl!=21145&&cl!=21146&&cl!=21147&&cl!=21151&&cl!=21152&&cl!=21153&&cl!=21154&&cl!=21155&&cl!=21156&&cl!=21157&&cl!=21162&&cl!=21163&&cl!=21164&&cl!=21166&&cl!=21168&&cl!=21170&&cl!=21172&&cl!=21173&&cl!=21174&&cl!=21176&&cl!=21177&&cl!=21178&&cl!=21183&&cl!=21184&&cl!=21190&&cl!=21191&&cl!=21192&&cl!=21193&&cl!=21194&&cl!=21195&&cl!=21198&&cl!=21204&&cl!=21205&&cl!=21208&&cl!=21210&&cl!=21211&&cl!=21212&&cl!=21213&&cl!=21214&&cl!=21216&&cl!=21217&&cl!=21218&&cl!=21219&&cl!=21220&&cl!=21221&&cl!=21226&&cl!=21227&&cl!=21228&&cl!=21229&&cl!=21232&&cl!=21235&&cl!=21236&&cl!=21240&&cl!=21241&&cl!=21242&&cl!=21243&&cl!=21244&&cl!=21245&&cl!=21246&&cl!=21248&&cl!=21249&&cl!=21252&&cl!=21253&&cl!=21254&&cl!=21255&&cl!=21258&&cl!=21259&&cl!=21262&&cl!=21266&&cl!=27141&&cl!=27142&&cl!=27144&&cl!=27145&&cl!=27146&&cl!=27147&&cl!=27180&&cl!=27181&&cl!=27182&&cl!=27206&&cl!=27208&&cl!=27209&&cl!=27210&&cl!=27211&&cl!=27215&&cl!=27216&&cl!=27217&&cl!=27218&&cl!=27219&&cl!=27220&&cl!=27221&&cl!=27222&&cl!=27224&&cl!=27225&&cl!=27226&&cl!=27227&&cl!=27229&&cl!=27230&&cl!=27232&&cl!=27233&&cl!=27234&&cl!=27237&&cl!=27238&&cl!=27239&&cl!=27240&&cl!=27241&&cl!=27242&&cl!=27244&&cl!=27245&&cl!=27246&&cl!=27247&&cl!=27248&&cl!=27249&&cl!=27254&&cl!=27255&&cl!=27256&&cl!=27257&&cl!=27258&&cl!=27259&&cl!=27260&&cl!=27261&&cl!=27262&&cl!=27264&&cl!=27265&&cl!=27267&&cl!=27268&&cl!=27269&&cl!=27270&&cl!=27271&&cl!=27272&&cl!=27273&&cl!=27277&&cl!=27281&&cl!=27282&&cl!=27284&&cl!=27286&&cl!=27287&&cl!=27288&&cl!=27289&&cl!=27290&&cl!=27291&&cl!=27295&&cl!=27296&&cl!=27297&&cl!=27298&&cl!=27299&&cl!=27300&&cl!=27301&&cl!=27306&&cl!=27307&&cl!=27308&&cl!=27310&&cl!=27312&&cl!=27314&&cl!=27316&&cl!=27317&&cl!=27318&&cl!=27320&&cl!=27321&&cl!=27322&&cl!=27327&&cl!=27328&&cl!=27334&&cl!=27335&&cl!=27336&&cl!=27337&&cl!=27338&&cl!=27339&&cl!=27342&&cl!=27348&&cl!=27349&&cl!=27352&&cl!=27354&&cl!=27355&&cl!=27356&&cl!=27357&&cl!=27358&&cl!=27360&&cl!=27361&&cl!=27362&&cl!=27363&&cl!=27364&&cl!=27365&&cl!=27370&&cl!=27371&&cl!=27372&&cl!=27373&&cl!=27376&&cl!=27379&&cl!=27380&&cl!=27384&&cl!=27385&&cl!=27386&&cl!=27387&&cl!=27388&&cl!=27389&&cl!=27390&&cl!=27392&&cl!=27393&&cl!=27396&&cl!=27397&&cl!=27398&&cl!=27399&&cl!=27402&&cl!=27403&&cl!=27406&&cl!=27410&&cl!=90198&&cl!=90214&&cl!=113284&&cl!=144389&&cl!=144390&&cl!=144392&&cl!=144393&&cl!=144394&&cl!=144395&&cl!=144428&&cl!=144429&&cl!=144430&&cl!=144454&&cl!=144456&&cl!=144457&&cl!=144458&&cl!=144459&&cl!=144463&&cl!=144464&&cl!=144465&&cl!=144466&&cl!=144467&&cl!=144468&&cl!=144469&&cl!=144470&&cl!=144472&&cl!=144473&&cl!=144474&&cl!=144475&&cl!=144477&&cl!=144478&&cl!=144480&&cl!=144481&&cl!=144482&&cl!=144485&&cl!=144486&&cl!=144487&&cl!=144488&&cl!=144489&&cl!=144490&&cl!=144492&&cl!=144493&&cl!=144494&&cl!=144495&&cl!=144496&&cl!=144497&&cl!=144502&&cl!=144503&&cl!=144504&&cl!=144505&&cl!=144506&&cl!=144507&&cl!=144508&&cl!=144509&&cl!=144510&&cl!=144512&&cl!=144513&&cl!=144515&&cl!=144516&&cl!=144517&&cl!=144518&&cl!=144519&&cl!=144520&&cl!=144521&&cl!=144525&&cl!=144529&&cl!=144530&&cl!=144532&&cl!=144534&&cl!=144535&&cl!=144536&&cl!=144537&&cl!=144538&&cl!=144539&&cl!=144543&&cl!=144544&&cl!=144545&&cl!=144546&&cl!=144547&&cl!=144548&&cl!=144549&&cl!=144554&&cl!=144555&&cl!=144556&&cl!=144558&&cl!=144560&&cl!=144562&&cl!=144564&&cl!=144565&&cl!=144566&&cl!=144568&&cl!=144569&&cl!=144570&&cl!=144575&&cl!=144576&&cl!=144582&&cl!=144583&&cl!=144584&&cl!=144585&&cl!=144586&&cl!=144587&&cl!=144590&&cl!=144596&&cl!=144597&&cl!=144600&&cl!=144602&&cl!=144603&&cl!=144604&&cl!=144605&&cl!=144606&&cl!=144608&&cl!=144609&&cl!=144610&&cl!=144611&&cl!=144612&&cl!=144613&&cl!=144618&&cl!=144619&&cl!=144620&&cl!=144621&&cl!=144624&&cl!=144627&&cl!=144628&&cl!=144632&&cl!=144633&&cl!=144634&&cl!=144635&&cl!=144636&&cl!=144637&&cl!=144638&&cl!=144640&&cl!=144641&&cl!=144644&&cl!=144645&&cl!=144646&&cl!=144647&&cl!=144650&&cl!=144651&&cl!=144654&&cl!=144658){cl=Ll(5,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Wa(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(5,pl,cl)}}if(cl!=-1&&cl!=16134&&cl!=27141&&cl!=27142&&cl!=27144&&cl!=27145&&cl!=27146&&cl!=27147&&cl!=27180&&cl!=27181&&cl!=27182&&cl!=27206&&cl!=27208&&cl!=27209&&cl!=27210&&cl!=27211&&cl!=27215&&cl!=27216&&cl!=27217&&cl!=27218&&cl!=27219&&cl!=27220&&cl!=27221&&cl!=27222&&cl!=27224&&cl!=27225&&cl!=27226&&cl!=27227&&cl!=27229&&cl!=27230&&cl!=27232&&cl!=27233&&cl!=27234&&cl!=27237&&cl!=27238&&cl!=27239&&cl!=27240&&cl!=27241&&cl!=27242&&cl!=27244&&cl!=27245&&cl!=27246&&cl!=27247&&cl!=27248&&cl!=27249&&cl!=27254&&cl!=27255&&cl!=27256&&cl!=27257&&cl!=27258&&cl!=27259&&cl!=27260&&cl!=27261&&cl!=27262&&cl!=27264&&cl!=27265&&cl!=27267&&cl!=27268&&cl!=27269&&cl!=27270&&cl!=27271&&cl!=27272&&cl!=27273&&cl!=27277&&cl!=27281&&cl!=27282&&cl!=27284&&cl!=27286&&cl!=27287&&cl!=27288&&cl!=27289&&cl!=27290&&cl!=27291&&cl!=27295&&cl!=27296&&cl!=27297&&cl!=27298&&cl!=27299&&cl!=27300&&cl!=27301&&cl!=27306&&cl!=27307&&cl!=27308&&cl!=27310&&cl!=27312&&cl!=27314&&cl!=27316&&cl!=27317&&cl!=27318&&cl!=27320&&cl!=27321&&cl!=27322&&cl!=27327&&cl!=27328&&cl!=27334&&cl!=27335&&cl!=27336&&cl!=27337&&cl!=27338&&cl!=27339&&cl!=27342&&cl!=27348&&cl!=27349&&cl!=27352&&cl!=27354&&cl!=27355&&cl!=27356&&cl!=27357&&cl!=27358&&cl!=27360&&cl!=27361&&cl!=27362&&cl!=27363&&cl!=27364&&cl!=27365&&cl!=27370&&cl!=27371&&cl!=27372&&cl!=27373&&cl!=27376&&cl!=27379&&cl!=27380&&cl!=27384&&cl!=27385&&cl!=27386&&cl!=27387&&cl!=27388&&cl!=27389&&cl!=27390&&cl!=27392&&cl!=27393&&cl!=27396&&cl!=27397&&cl!=27398&&cl!=27399&&cl!=27402&&cl!=27403&&cl!=27406&&cl!=27410&&cl!=90198&&cl!=90214&&cl!=113284)break;Wa()}}function Ia(){Cl.startNonterminal("StatementsAndExpr",pl),ja(),Dl(),G(),Cl.endNonterminal("StatementsAndExpr",pl)}function qa(){Fa(),Y()}function Ra(){Cl.startNonterminal("StatementsAndOptionalExpr",pl),ja(),dl!=25&&dl!=282&&(Dl(),G()),Cl.endNonterminal("StatementsAndOptionalExpr",pl)}function Ua(){Fa(),dl!=25&&dl!=282&&Y()}function za(){Cl.startNonterminal("Statement",pl);switch(dl){case 132:Bl(189);break;case 137:Bl(196);break;case 174:Bl(193);break;case 250:Bl(190);break;case 262:Bl(187);break;case 276:Bl(272);break;case 31:case 32:Bl(249);break;case 86:case 102:Bl(188);break;case 152:case 243:case 253:case 267:Bl(185);break;default:cl=dl}if(cl==2836||cl==3103||cl==3104||cl==3348||cl==4372||cl==4884||cl==5396||cl==5908||cl==16148||cl==16660||cl==17675||cl==17684||cl==18196||cl==20756||cl==21780||cl==22804||cl==23316||cl==23828||cl==24340||cl==27924||cl==28436||cl==30484||cl==34068||cl==35092||cl==35871||cl==35872||cl==36116||cl==36895||cl==36896||cl==37140||cl==37407||cl==37408||cl==37652||cl==37919||cl==37920||cl==38164||cl==38431||cl==38432||cl==38676||cl==39700||cl==40479||cl==40480||cl==40724||cl==40991||cl==40992||cl==41236||cl==41503||cl==41504||cl==41748||cl==42015||cl==42016||cl==42260||cl==42527||cl==42528||cl==42772||cl==43039||cl==43040||cl==43284||cl==43551||cl==43552||cl==43796||cl==44063||cl==44064||cl==44308||cl==45087||cl==45088||cl==45332||cl==45599||cl==45600||cl==45844||cl==46111||cl==46112||cl==46356||cl==46623||cl==46624||cl==46868||cl==47647||cl==47648||cl==47892||cl==48159||cl==48160||cl==48404||cl==49183||cl==49184||cl==49428||cl==49695||cl==49696||cl==49940||cl==50207||cl==50208||cl==50452||cl==51743||cl==51744||cl==51988||cl==52255||cl==52256||cl==52500||cl==52767||cl==52768||cl==53012||cl==53279||cl==53280||cl==53524||cl==53791||cl==53792||cl==54036||cl==54303||cl==54304||cl==54548||cl==55327||cl==55328||cl==55572||cl==55839||cl==55840||cl==56084||cl==56351||cl==56352||cl==56596||cl==56863||cl==56864||cl==57108||cl==57375||cl==57376||cl==57620||cl==57887||cl==57888||cl==58132||cl==60447||cl==60448||cl==60692||cl==60959||cl==60960||cl==61204||cl==61471||cl==61472||cl==61716||cl==61983||cl==61984||cl==62228||cl==62495||cl==62496||cl==62740||cl==63007||cl==63008||cl==63252||cl==63519||cl==63520||cl==63764||cl==64031||cl==64032||cl==64276||cl==64543||cl==64544||cl==64788||cl==65567||cl==65568||cl==65812||cl==66079||cl==66080||cl==66324||cl==67103||cl==67104||cl==67348||cl==67615||cl==67616||cl==67860||cl==68127||cl==68128||cl==68372||cl==68639||cl==68640||cl==68884||cl==69151||cl==69152||cl==69396||cl==69663||cl==69664||cl==69908||cl==70175||cl==70176||cl==70420||cl==72223||cl==72224||cl==72468||cl==74271||cl==74272||cl==74516||cl==74783||cl==74784||cl==75028||cl==75807||cl==75808||cl==76052||cl==76831||cl==76832||cl==77076||cl==77343||cl==77344||cl==77588||cl==77855||cl==77856||cl==78100||cl==78367||cl==78368||cl==78612||cl==78879||cl==78880||cl==79124||cl==79391||cl==79392||cl==79636||cl==81439||cl==81440||cl==81684||cl==81951||cl==81952||cl==82196||cl==82463||cl==82464||cl==82708||cl==82975||cl==82976||cl==83220||cl==83487||cl==83488||cl==83732||cl==83999||cl==84e3||cl==84244||cl==84511||cl==84512||cl==84756||cl==87071||cl==87072||cl==87316||cl==87583||cl==87584||cl==87828||cl==88095||cl==88096||cl==88340||cl==89119||cl==89120||cl==89364||cl==90143||cl==90144||cl==90388||cl==91167||cl==91168||cl==91412||cl==92191||cl==92192||cl==92436||cl==92703||cl==92704||cl==92948||cl==93215||cl==93216||cl==93460||cl==94239||cl==94240||cl==94484||cl==94751||cl==94752||cl==94996||cl==95263||cl==95264||cl==95508||cl==97823||cl==97824||cl==98068||cl==98335||cl==98336||cl==98580||cl==101407||cl==101408||cl==101652||cl==101919||cl==101920||cl==102164||cl==102431||cl==102432||cl==102676||cl==102943||cl==102944||cl==103188||cl==103455||cl==103456||cl==103700||cl==103967||cl==103968||cl==104212||cl==105503||cl==105504||cl==105748||cl==108575||cl==108576||cl==108820||cl==109087||cl==109088||cl==109332||cl==110623||cl==110624||cl==110868||cl==111647||cl==111648||cl==111892||cl==112159||cl==112160||cl==112404||cl==112671||cl==112672||cl==112916||cl==113183||cl==113184||cl==113428||cl==113695||cl==113696||cl==113940||cl==114719||cl==114720||cl==114964||cl==115231||cl==115232||cl==115476||cl==115743||cl==115744||cl==115988||cl==116255||cl==116256||cl==116500||cl==116767||cl==116768||cl==117012||cl==117279||cl==117280||cl==117524||cl==119839||cl==119840||cl==120084||cl==120351||cl==120352||cl==120596||cl==120863||cl==120864||cl==121108||cl==121375||cl==121376||cl==121620||cl==122911||cl==122912||cl==123156||cl==124447||cl==124448||cl==124692||cl==124959||cl==124960||cl==125204||cl==127007||cl==127008||cl==127252||cl==127519||cl==127520||cl==127764||cl==128031||cl==128032||cl==128276||cl==128543||cl==128544||cl==128788||cl==129055||cl==129056||cl==129300||cl==129567||cl==129568||cl==129812||cl==130079||cl==130080||cl==130324||cl==131103||cl==131104||cl==131348||cl==131615||cl==131616||cl==131860||cl==133151||cl==133152||cl==133396||cl==133663||cl==133664||cl==133908||cl==134175||cl==134176||cl==134420||cl==134687||cl==134688||cl==134932||cl==136223||cl==136224||cl==136468||cl==136735||cl==136736||cl==136980||cl==138271||cl==138272||cl==138516||cl==140319||cl==140320||cl==140564||cl==141588||cl==142612||cl==144660){cl=Ll(6,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Va(),cl=-1}catch(a){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Ja(),cl=-2}catch(f){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Qa(),cl=-3}catch(l){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Ef(),cl=-12}catch(c){cl=-13}}}}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(6,pl,cl)}}switch(cl){case-2:$a();break;case-3:Ka();break;case 90198:Ga();break;case 90214:Za();break;case 113284:tf();break;case 16009:case 16046:case 116910:case 119945:case 128649:rf();break;case 17560:af();break;case 17651:lf();break;case 141562:df();break;case 17661:mf();break;case-12:case 16134:wf();break;case-13:Sf();break;default:Xa()}Cl.endNonterminal("Statement",pl)}function Wa(){switch(dl){case 132:Bl(189);break;case 137:Bl(196);break;case 174:Bl(193);break;case 250:Bl(190);break;case 262:Bl(187);break;case 276:Bl(272);break;case 31:case 32:Bl(249);break;case 86:case 102:Bl(188);break;case 152:case 243:case 253:case 267:Bl(185);break;default:cl=dl}if(cl==2836||cl==3103||cl==3104||cl==3348||cl==4372||cl==4884||cl==5396||cl==5908||cl==16148||cl==16660||cl==17675||cl==17684||cl==18196||cl==20756||cl==21780||cl==22804||cl==23316||cl==23828||cl==24340||cl==27924||cl==28436||cl==30484||cl==34068||cl==35092||cl==35871||cl==35872||cl==36116||cl==36895||cl==36896||cl==37140||cl==37407||cl==37408||cl==37652||cl==37919||cl==37920||cl==38164||cl==38431||cl==38432||cl==38676||cl==39700||cl==40479||cl==40480||cl==40724||cl==40991||cl==40992||cl==41236||cl==41503||cl==41504||cl==41748||cl==42015||cl==42016||cl==42260||cl==42527||cl==42528||cl==42772||cl==43039||cl==43040||cl==43284||cl==43551||cl==43552||cl==43796||cl==44063||cl==44064||cl==44308||cl==45087||cl==45088||cl==45332||cl==45599||cl==45600||cl==45844||cl==46111||cl==46112||cl==46356||cl==46623||cl==46624||cl==46868||cl==47647||cl==47648||cl==47892||cl==48159||cl==48160||cl==48404||cl==49183||cl==49184||cl==49428||cl==49695||cl==49696||cl==49940||cl==50207||cl==50208||cl==50452||cl==51743||cl==51744||cl==51988||cl==52255||cl==52256||cl==52500||cl==52767||cl==52768||cl==53012||cl==53279||cl==53280||cl==53524||cl==53791||cl==53792||cl==54036||cl==54303||cl==54304||cl==54548||cl==55327||cl==55328||cl==55572||cl==55839||cl==55840||cl==56084||cl==56351||cl==56352||cl==56596||cl==56863||cl==56864||cl==57108||cl==57375||cl==57376||cl==57620||cl==57887||cl==57888||cl==58132||cl==60447||cl==60448||cl==60692||cl==60959||cl==60960||cl==61204||cl==61471||cl==61472||cl==61716||cl==61983||cl==61984||cl==62228||cl==62495||cl==62496||cl==62740||cl==63007||cl==63008||cl==63252||cl==63519||cl==63520||cl==63764||cl==64031||cl==64032||cl==64276||cl==64543||cl==64544||cl==64788||cl==65567||cl==65568||cl==65812||cl==66079||cl==66080||cl==66324||cl==67103||cl==67104||cl==67348||cl==67615||cl==67616||cl==67860||cl==68127||cl==68128||cl==68372||cl==68639||cl==68640||cl==68884||cl==69151||cl==69152||cl==69396||cl==69663||cl==69664||cl==69908||cl==70175||cl==70176||cl==70420||cl==72223||cl==72224||cl==72468||cl==74271||cl==74272||cl==74516||cl==74783||cl==74784||cl==75028||cl==75807||cl==75808||cl==76052||cl==76831||cl==76832||cl==77076||cl==77343||cl==77344||cl==77588||cl==77855||cl==77856||cl==78100||cl==78367||cl==78368||cl==78612||cl==78879||cl==78880||cl==79124||cl==79391||cl==79392||cl==79636||cl==81439||cl==81440||cl==81684||cl==81951||cl==81952||cl==82196||cl==82463||cl==82464||cl==82708||cl==82975||cl==82976||cl==83220||cl==83487||cl==83488||cl==83732||cl==83999||cl==84e3||cl==84244||cl==84511||cl==84512||cl==84756||cl==87071||cl==87072||cl==87316||cl==87583||cl==87584||cl==87828||cl==88095||cl==88096||cl==88340||cl==89119||cl==89120||cl==89364||cl==90143||cl==90144||cl==90388||cl==91167||cl==91168||cl==91412||cl==92191||cl==92192||cl==92436||cl==92703||cl==92704||cl==92948||cl==93215||cl==93216||cl==93460||cl==94239||cl==94240||cl==94484||cl==94751||cl==94752||cl==94996||cl==95263||cl==95264||cl==95508||cl==97823||cl==97824||cl==98068||cl==98335||cl==98336||cl==98580||cl==101407||cl==101408||cl==101652||cl==101919||cl==101920||cl==102164||cl==102431||cl==102432||cl==102676||cl==102943||cl==102944||cl==103188||cl==103455||cl==103456||cl==103700||cl==103967||cl==103968||cl==104212||cl==105503||cl==105504||cl==105748||cl==108575||cl==108576||cl==108820||cl==109087||cl==109088||cl==109332||cl==110623||cl==110624||cl==110868||cl==111647||cl==111648||cl==111892||cl==112159||cl==112160||cl==112404||cl==112671||cl==112672||cl==112916||cl==113183||cl==113184||cl==113428||cl==113695||cl==113696||cl==113940||cl==114719||cl==114720||cl==114964||cl==115231||cl==115232||cl==115476||cl==115743||cl==115744||cl==115988||cl==116255||cl==116256||cl==116500||cl==116767||cl==116768||cl==117012||cl==117279||cl==117280||cl==117524||cl==119839||cl==119840||cl==120084||cl==120351||cl==120352||cl==120596||cl==120863||cl==120864||cl==121108||cl==121375||cl==121376||cl==121620||cl==122911||cl==122912||cl==123156||cl==124447||cl==124448||cl==124692||cl==124959||cl==124960||cl==125204||cl==127007||cl==127008||cl==127252||cl==127519||cl==127520||cl==127764||cl==128031||cl==128032||cl==128276||cl==128543||cl==128544||cl==128788||cl==129055||cl==129056||cl==129300||cl==129567||cl==129568||cl==129812||cl==130079||cl==130080||cl==130324||cl==131103||cl==131104||cl==131348||cl==131615||cl==131616||cl==131860||cl==133151||cl==133152||cl==133396||cl==133663||cl==133664||cl==133908||cl==134175||cl==134176||cl==134420||cl==134687||cl==134688||cl==134932||cl==136223||cl==136224||cl==136468||cl==136735||cl==136736||cl==136980||cl==138271||cl==138272||cl==138516||cl==140319||cl==140320||cl==140564||cl==141588||cl==142612||cl==144660){cl=Ll(6,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Va(),cl=-1}catch(a){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Ja(),cl=-2}catch(f){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Qa(),cl=-3}catch(l){try{hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),Ef(),cl=-12}catch(c){cl=-13}}}}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(6,pl,cl)}}switch(cl){case-2:Ja();break;case-3:Qa();break;case 90198:Ya();break;case 90214:ef();break;case 113284:nf();break;case 16009:case 16046:case 116910:case 119945:case 128649:sf();break;case 17560:ff();break;case 17651:cf();break;case 141562:vf();break;case 17661:gf();break;case-12:case 16134:Ef();break;case-13:xf();break;default:Va()}}function Xa(){Cl.startNonterminal("ApplyStatement",pl),Cf(),Ol(53),Cl.endNonterminal("ApplyStatement",pl)}function Va(){kf(),Ml(53)}function $a(){Cl.startNonterminal("AssignStatement",pl),Ol(31),Hl(249),Dl(),ai(),Hl(27),Ol(52),Hl(266),Dl(),Tf(),Ol(53),Cl.endNonterminal("AssignStatement",pl)}function Ja(){Ml(31),Hl(249),fi(),Hl(27),Ml(52),Hl(266),Nf(),Ml(53)}function Ka(){Cl.startNonterminal("BlockStatement",pl),Ol(276),Hl(272),Dl(),ja(),Ol(282),Cl.endNonterminal("BlockStatement",pl)}function Qa(){Ml(276),Hl(272),Fa(),Ml(282)}function Ga(){Cl.startNonterminal("BreakStatement",pl),Ol(86),Hl(59),Ol(176),Hl(28),Ol(53),Cl.endNonterminal("BreakStatement",pl)}function Ya(){Ml(86),Hl(59),Ml(176),Hl(28),Ml(53)}function Za(){Cl.startNonterminal("ContinueStatement",pl),Ol(102),Hl(59),Ol(176),Hl(28),Ol(53),Cl.endNonterminal("ContinueStatement",pl)}function ef(){Ml(102),Hl(59),Ml(176),Hl(28),Ml(53)}function tf(){Cl.startNonterminal("ExitStatement",pl),Ol(132),Hl(71),Ol(221),Hl(266),Dl(),Tf(),Ol(53),Cl.endNonterminal("ExitStatement",pl)}function nf(){Ml(132),Hl(71),Ml(221),Hl(266),Nf(),Ml(53)}function rf(){Cl.startNonterminal("FLWORStatement",pl),tt();for(;;){Hl(173);if(dl==220)break;Dl(),rt()}Dl(),of(),Cl.endNonterminal("FLWORStatement",pl)}function sf(){nt();for(;;){Hl(173);if(dl==220)break;it()}uf()}function of(){Cl.startNonterminal("ReturnStatement",pl),Ol(220),Hl(266),Dl(),za(),Cl.endNonterminal("ReturnStatement",pl)}function uf(){Ml(220),Hl(266),Wa()}function af(){Cl.startNonterminal("IfStatement",pl),Ol(152),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37),Hl(77),Ol(245),Hl(266),Dl(),za(),Hl(48),Ol(122),Hl(266),Dl(),za(),Cl.endNonterminal("IfStatement",pl)}function ff(){Ml(152),Hl(22),Ml(34),Hl(266),Y(),Ml(37),Hl(77),Ml(245),Hl(266),Wa(),Hl(48),Ml(122),Hl(266),Wa()}function lf(){Cl.startNonterminal("SwitchStatement",pl),Ol(243),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37);for(;;){Hl(35),Dl(),hf(),Hl(113);if(dl!=88)break}Ol(109),Hl(70),Ol(220),Hl(266),Dl(),za(),Cl.endNonterminal("SwitchStatement",pl)}function cf(){Ml(243),Hl(22),Ml(34),Hl(266),Y(),Ml(37);for(;;){Hl(35),pf(),Hl(113);if(dl!=88)break}Ml(109),Hl(70),Ml(220),Hl(266),Wa()}function hf(){Cl.startNonterminal("SwitchCaseStatement",pl);for(;;){Ol(88),Hl(266),Dl(),ln();if(dl!=88)break}Ol(220),Hl(266),Dl(),za(),Cl.endNonterminal("SwitchCaseStatement",pl)}function pf(){for(;;){Ml(88),Hl(266),cn();if(dl!=88)break}Ml(220),Hl(266),Wa()}function df(){Cl.startNonterminal("TryCatchStatement",pl),Ol(250),Hl(87),Dl(),Ka();for(;;){Hl(36),Ol(91),Hl(251),Dl(),Ln(),Dl(),Ka(),Hl(273);switch(dl){case 91:Bl(275);break;default:cl=dl}if(cl==38491||cl==45659||cl==46171||cl==60507||cl==65627||cl==67163||cl==74843||cl==76891||cl==77403||cl==82011||cl==83035||cl==84059||cl==88155||cl==91227||cl==92251||cl==95323||cl==102491||cl==127067||cl==127579||cl==130139){cl=Ll(7,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Hl(36),Ml(91),Hl(251),An(),Qa(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(7,pl,cl)}}if(cl!=-1&&cl!=2651&&cl!=3163&&cl!=35931&&cl!=36955&&cl!=37467&&cl!=37979&&cl!=40539&&cl!=41051&&cl!=41563&&cl!=42075&&cl!=42587&&cl!=43099&&cl!=43611&&cl!=44123&&cl!=45147&&cl!=46683&&cl!=47707&&cl!=48219&&cl!=49243&&cl!=49755&&cl!=50267&&cl!=51803&&cl!=52315&&cl!=52827&&cl!=53339&&cl!=53851&&cl!=54363&&cl!=55387&&cl!=55899&&cl!=56411&&cl!=56923&&cl!=57435&&cl!=57947&&cl!=61019&&cl!=61531&&cl!=62043&&cl!=62555&&cl!=63067&&cl!=63579&&cl!=64091&&cl!=64603&&cl!=66139&&cl!=67675&&cl!=68187&&cl!=68699&&cl!=69211&&cl!=69723&&cl!=70235&&cl!=72283&&cl!=74331&&cl!=75867&&cl!=77915&&cl!=78427&&cl!=78939&&cl!=79451&&cl!=81499&&cl!=82523&&cl!=83547&&cl!=84571&&cl!=87131&&cl!=87643&&cl!=89179&&cl!=90203&&cl!=92763&&cl!=93275&&cl!=94299&&cl!=94811&&cl!=97883&&cl!=98395&&cl!=101467&&cl!=101979&&cl!=103003&&cl!=103515&&cl!=104027&&cl!=105563&&cl!=108635&&cl!=109147&&cl!=110683&&cl!=111707&&cl!=112219&&cl!=112731&&cl!=113243&&cl!=113755&&cl!=114779&&cl!=115291&&cl!=115803&&cl!=116315&&cl!=116827&&cl!=117339&&cl!=119899&&cl!=120411&&cl!=120923&&cl!=121435&&cl!=122971&&cl!=124507&&cl!=125019&&cl!=128091&&cl!=128603&&cl!=129115&&cl!=129627&&cl!=131163&&cl!=131675&&cl!=133211&&cl!=133723&&cl!=134235&&cl!=134747&&cl!=136283&&cl!=136795&&cl!=138331&&cl!=140379)break}Cl.endNonterminal("TryCatchStatement",pl)}function vf(){Ml(250),Hl(87),Qa();for(;;){Hl(36),Ml(91),Hl(251),An(),Qa(),Hl(273);switch(dl){case 91:Bl(275);break;default:cl=dl}if(cl==38491||cl==45659||cl==46171||cl==60507||cl==65627||cl==67163||cl==74843||cl==76891||cl==77403||cl==82011||cl==83035||cl==84059||cl==88155||cl==91227||cl==92251||cl==95323||cl==102491||cl==127067||cl==127579||cl==130139){cl=Ll(7,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Hl(36),Ml(91),Hl(251),An(),Qa(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(7,pl,cl)}}if(cl!=-1&&cl!=2651&&cl!=3163&&cl!=35931&&cl!=36955&&cl!=37467&&cl!=37979&&cl!=40539&&cl!=41051&&cl!=41563&&cl!=42075&&cl!=42587&&cl!=43099&&cl!=43611&&cl!=44123&&cl!=45147&&cl!=46683&&cl!=47707&&cl!=48219&&cl!=49243&&cl!=49755&&cl!=50267&&cl!=51803&&cl!=52315&&cl!=52827&&cl!=53339&&cl!=53851&&cl!=54363&&cl!=55387&&cl!=55899&&cl!=56411&&cl!=56923&&cl!=57435&&cl!=57947&&cl!=61019&&cl!=61531&&cl!=62043&&cl!=62555&&cl!=63067&&cl!=63579&&cl!=64091&&cl!=64603&&cl!=66139&&cl!=67675&&cl!=68187&&cl!=68699&&cl!=69211&&cl!=69723&&cl!=70235&&cl!=72283&&cl!=74331&&cl!=75867&&cl!=77915&&cl!=78427&&cl!=78939&&cl!=79451&&cl!=81499&&cl!=82523&&cl!=83547&&cl!=84571&&cl!=87131&&cl!=87643&&cl!=89179&&cl!=90203&&cl!=92763&&cl!=93275&&cl!=94299&&cl!=94811&&cl!=97883&&cl!=98395&&cl!=101467&&cl!=101979&&cl!=103003&&cl!=103515&&cl!=104027&&cl!=105563&&cl!=108635&&cl!=109147&&cl!=110683&&cl!=111707&&cl!=112219&&cl!=112731&&cl!=113243&&cl!=113755&&cl!=114779&&cl!=115291&&cl!=115803&&cl!=116315&&cl!=116827&&cl!=117339&&cl!=119899&&cl!=120411&&cl!=120923&&cl!=121435&&cl!=122971&&cl!=124507&&cl!=125019&&cl!=128091&&cl!=128603&&cl!=129115&&cl!=129627&&cl!=131163&&cl!=131675&&cl!=133211&&cl!=133723&&cl!=134235&&cl!=134747&&cl!=136283&&cl!=136795&&cl!=138331&&cl!=140379)break}}function mf(){Cl.startNonterminal("TypeswitchStatement",pl),Ol(253),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37);for(;;){Hl(35),Dl(),yf(),Hl(113);if(dl!=88)break}Ol(109),Hl(95),dl==31&&(Ol(31),Hl(249),Dl(),ai()),Hl(70),Ol(220),Hl(266),Dl(),za(),Cl.endNonterminal("TypeswitchStatement",pl)}function gf(){Ml(253),Hl(22),Ml(34),Hl(266),Y(),Ml(37);for(;;){Hl(35),bf(),Hl(113);if(dl!=88)break}Ml(109),Hl(95),dl==31&&(Ml(31),Hl(249),fi()),Hl(70),Ml(220),Hl(266),Wa()}function yf(){Cl.startNonterminal("CaseStatement",pl),Ol(88),Hl(260),dl==31&&(Ol(31),Hl(249),Dl(),ai(),Hl(30),Ol(79)),Hl(259),Dl(),hs(),Hl(70),Ol(220),Hl(266),Dl(),za(),Cl.endNonterminal("CaseStatement",pl)}function bf(){Ml(88),Hl(260),dl==31&&(Ml(31),Hl(249),fi(),Hl(30),Ml(79)),Hl(259),ps(),Hl(70),Ml(220),Hl(266),Wa()}function wf(){Cl.startNonterminal("VarDeclStatement",pl);for(;;){Hl(98);if(dl!=32)break;Dl(),B()}Ol(262),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(157),dl==79&&(Dl(),ls()),Hl(145),dl==52&&(Ol(52),Hl(266),Dl(),Tf());for(;;){if(dl!=41)break;Ol(41),Hl(21),Ol(31),Hl(249),Dl(),ai(),Hl(157),dl==79&&(Dl(),ls()),Hl(145),dl==52&&(Ol(52),Hl(266),Dl(),Tf())}Ol(53),Cl.endNonterminal("VarDeclStatement",pl)}function Ef(){for(;;){Hl(98);if(dl!=32)break;j()}Ml(262),Hl(21),Ml(31),Hl(249),fi(),Hl(157),dl==79&&cs(),Hl(145),dl==52&&(Ml(52),Hl(266),Nf());for(;;){if(dl!=41)break;Ml(41),Hl(21),Ml(31),Hl(249),fi(),Hl(157),dl==79&&cs(),Hl(145),dl==52&&(Ml(52),Hl(266),Nf())}Ml(53)}function Sf(){Cl.startNonterminal("WhileStatement",pl),Ol(267),Hl(22),Ol(34),Hl(266),Dl(),G(),Ol(37),Hl(266),Dl(),za(),Cl.endNonterminal("WhileStatement",pl)}function xf(){Ml(267),Hl(22),Ml(34),Hl(266),Y(),Ml(37),Hl(266),Wa()}function Tf(){Cl.startNonterminal("ExprSingle",pl);switch(dl){case 137:Bl(233);break;case 174:Bl(231);break;case 250:Bl(230);break;case 152:case 243:case 253:Bl(228);break;default:cl=dl}switch(cl){case 16009:case 16046:case 116910:case 119945:case 128649:Z();break;case 17560:yn();break;case 17651:on();break;case 141562:wn();break;case 17661:hn();break;default:Cf()}Cl.endNonterminal("ExprSingle",pl)}function Nf(){switch(dl){case 137:Bl(233);break;case 174:Bl(231);break;case 250:Bl(230);break;case 152:case 243:case 253:Bl(228);break;default:cl=dl}switch(cl){case 16009:case 16046:case 116910:case 119945:case 128649:et();break;case 17560:bn();break;case 17651:un();break;case 141562:En();break;case 17661:pn();break;default:kf()}}function Cf(){Cl.startNonterminal("ExprSimple",pl);switch(dl){case 218:Bl(232);break;case 219:Bl(235);break;case 110:case 159:Bl(234);break;case 103:case 129:case 235:Bl(229);break;default:cl=dl}switch(cl){case 16001:case 16107:rn();break;case 97951:case 98463:Co();break;case 97902:case 98414:Lo();break;case 98010:_o();break;case 98011:case 133851:Oo();break;case 15975:qo();break;case 85102:Lf();break;case 85151:Of();break;case 85210:_f();break;case 85211:Pf();break;case 77:Bf();break;default:On()}Cl.endNonterminal("ExprSimple",pl)}function kf(){switch(dl){case 218:Bl(232);break;case 219:Bl(235);break;case 110:case 159:Bl(234);break;case 103:case 129:case 235:Bl(229);break;default:cl=dl}switch(cl){case 16001:case 16107:sn();break;case 97951:case 98463:ko();break;case 97902:case 98414:Ao();break;case 98010:Do();break;case 98011:case 133851:Mo();break;case 15975:Ro();break;case 85102:Af();break;case 85151:Mf();break;case 85210:Df();break;case 85211:Hf();break;case 77:jf();break;default:Mn()}}function Lf(){Cl.startNonterminal("JSONDeleteExpr",pl),Ol(110),Hl(56),Ol(166),Hl(262),Dl(),Jr(),Cl.endNonterminal("JSONDeleteExpr",pl)}function Af(){Ml(110),Hl(56),Ml(166),Hl(262),Kr()}function Of(){Cl.startNonterminal("JSONInsertExpr",pl),Ol(159),Hl(56),Ol(166),Hl(266),Dl(),Tf(),Ol(163),Hl(266),Dl(),Tf();switch(dl){case 81:Bl(69);break;default:cl=dl}if(cl==108113){cl=Ll(8,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(81),Hl(69),Ml(211),Hl(266),Nf(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(8,pl,cl)}}cl==-1&&(Ol(81),Hl(69),Ol(211),Hl(266),Dl(),Tf()),Cl.endNonterminal("JSONInsertExpr",pl)}function Mf(){Ml(159),Hl(56),Ml(166),Hl(266),Nf(),Ml(163),Hl(266),Nf();switch(dl){case 81:Bl(69);break;default:cl=dl}if(cl==108113){cl=Ll(8,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(81),Hl(69),Ml(211),Hl(266),Nf(),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(8,pl,cl)}}cl==-1&&(Ml(81),Hl(69),Ml(211),Hl(266),Nf())}function _f(){Cl.startNonterminal("JSONRenameExpr",pl),Ol(218),Hl(56),Ol(166),Hl(262),Dl(),Jr(),Ol(79),Hl(266),Dl(),Tf(),Cl.endNonterminal("JSONRenameExpr",pl)}function Df(){Ml(218),Hl(56),Ml(166),Hl(262),Kr(),Ml(79),Hl(266),Nf()}function Pf(){Cl.startNonterminal("JSONReplaceExpr",pl),Ol(219),Hl(56),Ol(166),Hl(82),Ol(261),Hl(64),Ol(196),Hl(262),Dl(),Jr(),Ol(270),Hl(266),Dl(),Tf(),Cl.endNonterminal("JSONReplaceExpr",pl)}function Hf(){Ml(219),Hl(56),Ml(166),Hl(82),Ml(261),Hl(64),Ml(196),Hl(262),Kr(),Ml(270),Hl(266),Nf()}function Bf(){Cl.startNonterminal("JSONAppendExpr",pl),Ol(77),Hl(56),Ol(166),Hl(266),Dl(),Tf(),Ol(163),Hl(266),Dl(),Tf(),Cl.endNonterminal("JSONAppendExpr",pl)}function jf(){Ml(77),Hl(56),Ml(166),Hl(266),Nf(),Ml(163),Hl(266),Nf()}function Ff(){Cl.startNonterminal("CommonContent",pl);switch(dl){case 12:Ol(12);break;case 23:Ol(23);break;case 277:Ol(277);break;case 283:Ol(283);break;default:al()}Cl.endNonterminal("CommonContent",pl)}function If(){switch(dl){case 12:Ml(12);break;case 23:Ml(23);break;case 277:Ml(277);break;case 283:Ml(283);break;default:fl()}}function qf(){Cl.startNonterminal("ContentExpr",pl),Ia(),Cl.endNonterminal("ContentExpr",pl)}function Rf(){qa()}function Uf(){Cl.startNonterminal("CompDocConstructor",pl),Ol(119),Hl(87),Dl(),al(),Cl.endNonterminal("CompDocConstructor",pl)}function zf(){Ml(119),Hl(87),fl()}function Wf(){Cl.startNonterminal("CompAttrConstructor",pl),Ol(82),Hl(252);switch(dl){case 276:Ol(276),Hl(266),Dl(),G(),Ol(282);break;default:Dl(),Aa()}Hl(87);switch(dl){case 276:Bl(272);break;default:cl=dl}if(cl==144660){cl=Ll(9,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(276),Hl(88),Ml(282),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(9,pl,cl)}}switch(cl){case-1:Ol(276),Hl(88),Ol(282);break;default:Dl(),al()}Cl.endNonterminal("CompAttrConstructor",pl)}function Xf(){Ml(82),Hl(252);switch(dl){case 276:Ml(276),Hl(266),Y(),Ml(282);break;default:Oa()}Hl(87);switch(dl){case 276:Bl(272);break;default:cl=dl}if(cl==144660){cl=Ll(9,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(276),Hl(88),Ml(282),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(9,pl,cl)}}switch(cl){case-1:Ml(276),Hl(88),Ml(282);break;default:fl()}}function Vf(){Cl.startNonterminal("CompPIConstructor",pl),Ol(216),Hl(253);switch(dl){case 276:Ol(276),Hl(266),Dl(),G(),Ol(282);break;default:Dl(),Da()}Hl(87);switch(dl){case 276:Bl(272);break;default:cl=dl}if(cl==144660){cl=Ll(10,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(276),Hl(88),Ml(282),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(10,pl,cl)}}switch(cl){case-1:Ol(276),Hl(88),Ol(282);break;default:Dl(),al()}Cl.endNonterminal("CompPIConstructor",pl)}function $f(){Ml(216),Hl(253);switch(dl){case 276:Ml(276),Hl(266),Y(),Ml(282);break;default:Pa()}Hl(87);switch(dl){case 276:Bl(272);break;default:cl=dl}if(cl==144660){cl=Ll(10,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{Ml(276),Hl(88),Ml(282),cl=-1}catch(a){cl=-2}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(10,pl,cl)}}switch(cl){case-1:Ml(276),Hl(88),Ml(282);break;default:fl()}}function Jf(){Cl.startNonterminal("CompCommentConstructor",pl),Ol(96),Hl(87),Dl(),al(),Cl.endNonterminal("CompCommentConstructor",pl)}function Kf(){Ml(96),Hl(87),fl()}function Qf(){Cl.startNonterminal("CompTextConstructor",pl),Ol(244),Hl(87),Dl(),al(),Cl.endNonterminal("CompTextConstructor",pl)}function Gf(){Ml(244),Hl(87),fl()}function Yf(){Cl.startNonterminal("PrimaryExpr",pl);switch(dl){case 184:Bl(258);break;case 216:Bl(257);break;case 276:Bl(272);break;case 82:case 121:Bl(254);break;case 96:case 244:Bl(93);break;case 119:case 202:case 256:Bl(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Bl(92);break;default:cl=dl}if(cl==2836||cl==3348||cl==4372||cl==4884||cl==5396||cl==5908||cl==16148||cl==16660||cl==17684||cl==18196||cl==20756||cl==21780||cl==22804||cl==23316||cl==23828||cl==24340||cl==27924||cl==28436||cl==30484||cl==34068||cl==35092||cl==36116||cl==37140||cl==37652||cl==38164||cl==38676||cl==39700||cl==40724||cl==41236||cl==41748||cl==42260||cl==42772||cl==43284||cl==43796||cl==44308||cl==45332||cl==45844||cl==46356||cl==46868||cl==47892||cl==48404||cl==49428||cl==49940||cl==50452||cl==51988||cl==52500||cl==53012||cl==53524||cl==54036||cl==54548||cl==55572||cl==56084||cl==56596||cl==57108||cl==57620||cl==58132||cl==60692||cl==61204||cl==61716||cl==62228||cl==62740||cl==63252||cl==63764||cl==64276||cl==64788||cl==65812||cl==66324||cl==67348||cl==67860||cl==68372||cl==68884||cl==69396||cl==69908||cl==70420||cl==72468||cl==74516||cl==75028||cl==76052||cl==77076||cl==77588||cl==78100||cl==78612||cl==79124||cl==79636||cl==81684||cl==82196||cl==82708||cl==83220||cl==83732||cl==84244||cl==84756||cl==87316||cl==87828||cl==88340||cl==89364||cl==90388||cl==91412||cl==92436||cl==92948||cl==93460||cl==94484||cl==94996||cl==95508||cl==98068||cl==98580||cl==101652||cl==102164||cl==102676||cl==103188||cl==103700||cl==104212||cl==105748||cl==108820||cl==109332||cl==110868||cl==111892||cl==112404||cl==112916||cl==113428||cl==113940||cl==114964||cl==115476||cl==115988||cl==116500||cl==117012||cl==117524||cl==120084||cl==120596||cl==121108||cl==121620||cl==123156||cl==124692||cl==125204||cl==127252||cl==127764||cl==128276||cl==128788||cl==129300||cl==129812||cl==130324||cl==131348||cl==131860||cl==133396||cl==133908||cl==134420||cl==134932||cl==136468||cl==136980||cl==138516||cl==140564||cl==141588||cl==142612||cl==144660){cl=Ll(11,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{fl(),cl=-10}catch(a){cl=-11}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(11,pl,cl)}}switch(cl){case 8:case 9:case 10:case 11:ni();break;case 31:oi();break;case 34:li();break;case 44:hi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:yi();break;case 141514:di();break;case 141568:mi();break;case 32:case 120:case 124:case 145:case 152:case 165:case 185:case 191:case 226:case 227:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:ns();break;case-10:al();break;case-11:nl();break;case 68:ol();break;case 278:el();break;default:Ti()}Cl.endNonterminal("PrimaryExpr",pl)}function Zf(){switch(dl){case 184:Bl(258);break;case 216:Bl(257);break;case 276:Bl(272);break;case 82:case 121:Bl(254);break;case 96:case 244:Bl(93);break;case 119:case 202:case 256:Bl(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Bl(92);break;default:cl=dl}if(cl==2836||cl==3348||cl==4372||cl==4884||cl==5396||cl==5908||cl==16148||cl==16660||cl==17684||cl==18196||cl==20756||cl==21780||cl==22804||cl==23316||cl==23828||cl==24340||cl==27924||cl==28436||cl==30484||cl==34068||cl==35092||cl==36116||cl==37140||cl==37652||cl==38164||cl==38676||cl==39700||cl==40724||cl==41236||cl==41748||cl==42260||cl==42772||cl==43284||cl==43796||cl==44308||cl==45332||cl==45844||cl==46356||cl==46868||cl==47892||cl==48404||cl==49428||cl==49940||cl==50452||cl==51988||cl==52500||cl==53012||cl==53524||cl==54036||cl==54548||cl==55572||cl==56084||cl==56596||cl==57108||cl==57620||cl==58132||cl==60692||cl==61204||cl==61716||cl==62228||cl==62740||cl==63252||cl==63764||cl==64276||cl==64788||cl==65812||cl==66324||cl==67348||cl==67860||cl==68372||cl==68884||cl==69396||cl==69908||cl==70420||cl==72468||cl==74516||cl==75028||cl==76052||cl==77076||cl==77588||cl==78100||cl==78612||cl==79124||cl==79636||cl==81684||cl==82196||cl==82708||cl==83220||cl==83732||cl==84244||cl==84756||cl==87316||cl==87828||cl==88340||cl==89364||cl==90388||cl==91412||cl==92436||cl==92948||cl==93460||cl==94484||cl==94996||cl==95508||cl==98068||cl==98580||cl==101652||cl==102164||cl==102676||cl==103188||cl==103700||cl==104212||cl==105748||cl==108820||cl==109332||cl==110868||cl==111892||cl==112404||cl==112916||cl==113428||cl==113940||cl==114964||cl==115476||cl==115988||cl==116500||cl==117012||cl==117524||cl==120084||cl==120596||cl==121108||cl==121620||cl==123156||cl==124692||cl==125204||cl==127252||cl==127764||cl==128276||cl==128788||cl==129300||cl==129812||cl==130324||cl==131348||cl==131860||cl==133396||cl==133908||cl==134420||cl==134932||cl==136468||cl==136980||cl==138516||cl==140564||cl==141588||cl==142612||cl==144660){cl=Ll(11,pl);if(cl==0){var e=hl,t=pl,n=dl,r=vl,i=ml,s=gl,o=yl,u=bl;try{fl(),cl=-10}catch(a){cl=-11}hl=e,pl=t,dl=n,dl==0?Ul=t:(vl=r,ml=i,gl=s,gl==0?Ul=i:(yl=o,bl=u,Ul=u)),kl(11,pl,cl)}}switch(cl){case 8:case 9:case 10:case 11:ri();break;case 31:ui();break;case 34:ci();break;case 44:pi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:bi();break;case 141514:vi();break;case 141568:gi();break;case 32:case 120:case 124:case 145:case 152:case 165:case 185:case 191:case 226:case 227:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:rs();break;case-10:fl();break;case-11:rl();break;case 68:ul();break;case 278:tl();break;default:Ni()}}function el(){Cl.startNonterminal("JSONSimpleObjectUnion",pl),Ol(278),Hl(271),dl!=281&&(Dl(),G()),Ol(281),Cl.endNonterminal("JSONSimpleObjectUnion",pl)}function tl(){Ml(278),Hl(271),dl!=281&&Y(),Ml(281)}function nl(){Cl.startNonterminal("ObjectConstructor",pl),Ol(276),Hl(272);if(dl!=282){Dl(),il();for(;;){if(dl!=41)break;Ol(41),Hl(266),Dl(),il()}}Ol(282),Cl.endNonterminal("ObjectConstructor",pl)}function rl(){Ml(276),Hl(272);if(dl!=282){sl();for(;;){if(dl!=41)break;Ml(41),Hl(266),sl()}}Ml(282)}function il(){Cl.startNonterminal("PairConstructor",pl),Tf(),Ol(49),Hl(266),Dl(),Tf(),Cl.endNonterminal("PairConstructor",pl)}function sl(){Nf(),Ml(49),Hl(266),Nf()}function ol(){Cl.startNonterminal("ArrayConstructor",pl),Ol(68),Hl(270),dl!=69&&(Dl(),G()),Ol(69),Cl.endNonterminal("ArrayConstructor",pl)}function ul(){Ml(68),Hl(270),dl!=69&&Y(),Ml(69)}function al(){Cl.startNonterminal("BlockExpr",pl),Ol(276),Hl(272),Dl(),Ra(),Ol(282),Cl.endNonterminal("BlockExpr",pl)}function fl(){Ml(276),Hl(272),Ua(),Ml(282)}function ll(){Cl.startNonterminal("FunctionDecl",pl),Ol(145),Hl(249),Dl(),Aa(),Hl(22),Ol(34),Hl(94),dl==31&&(Dl(),U()),Ol(37),Hl(148),dl==79&&(Ol(79),Hl(259),Dl(),hs()),Hl(118);switch(dl){case 276:Ol(276),Hl(272),Dl(),Ra(),Ol(282);break;default:Ol(133)}Cl.endNonterminal("FunctionDecl",pl)}function kl(e,t,n){Nl[(t<<4)+e]=n}function Ll(e,t){var n=Nl[(t<<4)+e];return typeof n!="undefined"?n:0}function Al(e,t,r,i,s){throw t>El&&(wl=e,El=t,Sl=r,xl=i,Tl=s),new n(wl,El,Sl,xl,Tl)}function Ol(e){dl==e?(Dl(),Cl.terminal(i.TOKEN[dl],vl,ml>ql?ql:ml),hl=vl,pl=ml,dl=gl,dl!=0&&(vl=yl,ml=bl,gl=0)):Al(vl,ml,0,dl,e)}function Ml(e){dl==e?(hl=vl,pl=ml,dl=gl,dl!=0&&(vl=yl,ml=bl,gl=0)):Al(vl,ml,0,dl,e)}function _l(e){var t=hl,n=pl,r=dl,i=vl,s=ml;dl=e,vl=Rl,ml=Ul,gl=0,La(),hl=t,pl=n,dl=r,dl!=0&&(vl=i,ml=s)}function Dl(){pl!=vl&&(hl=pl,pl=vl,Cl.whitespace(hl,pl))}function Pl(e){var t;for(;;){t=Wl(e);if(t!=22){if(t!=36)break;_l(t)}}return t}function Hl(e){dl==0&&(dl=Pl(e),vl=Rl,ml=Ul)}function Bl(e){gl==0&&(gl=Pl(e),yl=Rl,bl=Ul),cl=gl<<9|dl}function jl(e){dl==0&&(dl=Wl(e),vl=Rl,ml=Ul)}function Fl(e){gl==0&&(gl=Wl(e),yl=Rl,bl=Ul),cl=gl<<9|dl}function Wl(e){var t=!1;Rl=Ul;var n=Ul,r=i.INITIAL[e];for(var s=r&4095;s!=0;){var o,u=n<ql?Il.charCodeAt(n):0;++n;if(u<128)o=i.MAP0[u];else if(u<55296){var a=u>>4,f=a>>5;o=i.MAP1[(u&15)+i.MAP1[(a&31)+i.MAP1[f]]]}else{if(u<56320){var a=n<ql?Il.charCodeAt(n):0;a>=56320&&a<57344&&(++n,u=((u&1023)<<10)+(a&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>u)c=h-1;else{if(!(i.MAP2[6+h]<u)){o=i.MAP2[12+h];break}l=h+1}if(l>c){o=0;break}}}zl=s;var p=(o<<12)+s-1,d=p>>4;s=i.TRANSITION[(p&15)+i.TRANSITION[d]],s>4095&&(r=s,s&=4095,Ul=n)}r>>=12;if(r==0){Ul=n-1;var a=Ul<ql?Il.charCodeAt(Ul):0;a>=56320&&a<57344&&--Ul,Al(Rl,Ul,zl,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--Ul;var a=Ul<ql?Il.charCodeAt(Ul):0;a>=56320&&a<57344&&--Ul}else Ul-=r>>9;return(r&511)-1}function Xl(e){var t=new Array;if(e>0)for(var n=0;n<284;n+=32){var r=n;for(var s=Vl(n>>>5,e);s!=0;s>>>=1,++r)(s&1)!=0&&(t[t.length]=i.TOKEN[r])}return t}function Vl(e,t){var n=e*3121+t-1,r=n>>1,s=r>>2,o=s>>2;return i.EXPECTED[(n&1)+i.EXPECTED[(r&3)+i.EXPECTED[(s&3)+i.EXPECTED[o]]]]}r(e,t),this.getInput=function(){return Il},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=Xl(e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=Il.substring(0,e.getBegin()),i=r.split("\n"),s=i.length,o=e.getBegin()-i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?"":", found "+n)+"\nwhile expecting "+(t.length==1?t[0]:"["+t.join(", ")+"]")+"\n"+(u==0?"":"after successfully scanning "+u+" characters beginning ")+"at line "+s+", column "+o+":\n..."+Il.substring(e.getBegin(),Math.min(Il.length,e.getBegin()+64))+"..."},this.parse_XQuery=function(){Cl.startNonterminal("XQuery",pl),Hl(267),Dl(),o(),Ol(25),Cl.endNonterminal("XQuery",pl)};var cl,hl,pl,dl,vl,ml,gl,yl,bl,wl,El,Sl,xl,Tl,Nl,Cl,Il,ql,Rl,Ul,zl};r.MAP0=[70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38,38,38,38,38,38,38,38,38,38,38,30,30,38,38,38,38,38,38,38,69,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,38,30,38,30,30,38],r.INITIAL=[1,12290,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284],r.TRANSITION=[19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19001,18176,18196,18196,18196,18203,18196,18196,18196,18196,18228,18196,18196,18196,18196,18219,18196,18180,45874,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,45726,18265,18278,18290,18302,19964,45732,28425,19964,19964,19964,21659,19964,19964,19964,45156,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21127,19964,18325,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18777,18342,19964,19964,19964,21208,19964,19964,18309,18473,18361,19964,19964,19964,19964,19964,18398,18411,29735,19964,19964,19964,21659,19964,19964,45481,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,27311,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18551,18499,19964,19964,19964,34351,19964,19964,37600,19964,31351,46136,18442,18467,18458,18489,18520,18539,28425,19964,19964,19964,21891,19964,19964,20611,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,36458,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18578,19964,19964,19964,19964,19964,19964,19964,19964,19964,18597,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,46372,19964,19964,19964,20465,46377,19964,41089,19964,18616,38671,18647,19964,18654,19964,18670,18683,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,18711,19964,19964,19964,31011,19964,19964,18730,19964,19964,18752,18765,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,34247,19964,19964,19964,19964,19964,19964,19586,29775,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,27304,19964,19964,19964,19964,19964,19964,21693,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18824,18793,19964,19964,19964,38821,19964,19964,20128,18736,21058,19964,19964,19964,19964,19964,19122,18812,33767,19964,19964,19964,21659,19964,19964,40887,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20125,45886,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18695,18855,18930,18930,18930,18862,18925,18930,18935,18897,18840,18960,18878,18891,18913,18951,18976,18989,28425,19964,19964,19964,25695,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19017,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19068,19964,19964,19964,20208,46487,19964,32563,46493,31351,19067,19964,19038,19044,19060,19084,19094,19110,19964,19964,19964,22936,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19582,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,45342,19964,19964,19964,19576,19964,19964,19964,41222,43119,31656,19167,19153,19170,19138,37787,19186,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,40483,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,42610,43332,46180,19227,19247,19227,19261,46180,19231,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,33222,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19318,19964,19964,19964,19576,19284,19964,36109,19314,43835,19334,19394,19399,19399,19415,19964,19346,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19438,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,34760,19461,19481,19461,19495,34760,19465,19518,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,19569,19964,19602,19964,18244,19623,33222,24460,19964,19964,19964,19964,21509,38487,19689,19689,35856,25105,31245,19840,22099,38220,22099,35266,29320,21370,19964,19964,19964,19964,19964,19964,20458,19648,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,33491,38998,19964,19964,19964,19964,32536,19964,19964,41799,19688,19689,19689,24898,24115,31245,31245,31245,30352,42412,22099,22099,22099,32147,28013,19964,19964,19964,19964,19706,19964,24619,35625,19689,19689,31245,19725,31245,22445,22098,39548,22099,24525,29188,19964,19964,19747,19964,34033,19689,19689,19763,31245,46092,41840,22099,29852,41849,41022,19964,39646,19781,38245,19689,23346,19798,31246,45980,22099,41851,19820,45624,40465,29413,42651,19837,41008,24524,29192,19856,33899,37333,41452,26125,19875,27999,19921,19950,44584,26552,35261,31427,28114,24594,31424,27393,19981,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,24196,31351,19964,19964,19964,19964,19964,20354,20367,20020,19964,19964,19964,21659,19964,19964,20056,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,20076,19569,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,21509,19689,19689,19689,35856,31245,31245,19840,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,20121,19964,19964,19964,20510,19964,19964,19964,19964,31351,44933,20144,20167,20189,20201,44934,20151,28425,19964,19964,19964,21659,19964,19964,19964,46401,19964,27585,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,20224,19964,19964,19964,19576,19964,19964,19964,45386,31351,19964,19964,19964,19964,19964,44638,44651,20241,19964,19964,19964,21659,19964,19964,20277,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,20297,19569,19964,19964,19964,18244,19964,36130,20322,19964,19964,19964,19964,21509,19689,19689,19689,35856,31245,31245,19840,22099,22099,22099,46221,29320,20340,19964,19964,19964,19964,19964,45613,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,27760,20400,19964,19964,19964,19964,24238,19964,19964,37831,19689,19689,19689,19689,23345,31245,31245,31245,31245,27708,22099,22099,22099,22099,29314,38958,19964,19964,19964,19964,19964,24848,20426,19689,19689,19689,31245,31245,31245,41537,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,20173,19964,19964,19964,23706,26163,19964,19964,20444,31351,30193,34344,20481,20487,20503,19964,34441,20526,19964,19964,19964,25957,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,22290,41429,19964,20563,20568,20916,20584,19964,19964,19964,20606,19964,19964,19964,19964,19964,19964,19964,21426,41428,41428,41428,20925,19964,19964,20680,20857,20857,20857,20568,20633,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,41425,41428,41428,41428,41428,20925,19964,19964,19964,19964,20854,20857,20857,20857,20857,20627,20649,19964,19964,19964,19964,19964,19964,19964,19964,19964,41428,41428,41428,41428,21433,19964,19964,19964,19964,35582,20857,20857,20857,20857,20627,20649,19964,19964,19964,19964,19964,19964,22294,41428,41428,41428,19964,19964,19964,19964,20856,20857,20857,20715,20671,19964,19964,19964,19964,20774,41428,41428,21434,19964,19964,35581,20857,20857,20696,20678,19964,19964,19964,41425,41428,21434,19964,20225,20857,20857,20698,19964,19964,20773,41428,21436,19964,20855,20714,20675,20771,41428,19964,20855,20731,41419,21435,35583,20758,22293,20922,20853,20793,20821,35581,20790,20820,35581,20809,20847,20837,20873,20903,20889,20679,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,43187,19964,19964,19964,19576,20948,19964,19964,20943,42771,20964,20972,20972,20972,20988,19964,21011,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,36571,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,32413,21048,19964,19964,19964,19964,21074,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,34295,19964,19964,19964,19964,19964,29197,38974,19964,19964,19964,19964,19964,19964,25279,19964,19964,19964,19964,19964,19964,19964,19964,19964,24951,19964,19964,19964,19964,19964,41032,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,40905,46341,21094,21094,21094,21103,27774,27787,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,46434,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21126,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19358,37044,19964,19964,19964,19576,19964,19964,19964,19964,31351,19292,21143,21143,21143,21152,19964,19298,28480,19964,19964,19964,21659,19964,19964,19964,19964,19964,37776,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21175,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19198,19207,19964,19964,19964,21159,19964,19964,19964,19964,31351,26133,21192,21192,21192,21201,19964,26139,21224,19964,19964,19964,21659,19964,19964,19964,19964,19964,45503,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,26197,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,34881,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21288,19964,19964,19964,19964,19576,21238,19964,19964,37291,44678,19964,19964,19964,21242,21258,37290,21276,28425,19964,19964,19964,21659,19964,19964,19964,20261,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,36778,19964,21304,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,19964,19964,19964,19964,19964,45431,21321,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,25067,21387,19964,19964,19964,19964,24238,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,19964,19964,42019,19964,19964,20426,19689,19689,19689,31245,31245,31245,25364,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,38814,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,25067,21387,19964,19964,19964,19964,24238,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,19964,19964,19964,19964,19964,20426,19689,19689,19689,31245,31245,31245,25364,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,37683,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,25067,21387,19964,19964,19964,19964,24238,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,19964,19964,19964,19964,19964,20426,19689,19689,19689,31245,31245,31245,25364,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,25067,21387,19964,19964,19964,19964,21413,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,19964,19964,19964,19964,19964,20426,19689,19689,19689,31245,31245,31245,25364,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,21452,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19653,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,25067,21387,19964,19964,19964,19964,24238,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,19964,19964,19964,19964,19964,20426,19689,19689,19689,31245,31245,31245,25364,22098,22099,22099,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21472,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,21496,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,37019,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19370,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,44228,25495,25507,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,40080,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21532,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,20739,21553,21573,21595,21607,20742,21557,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,24969,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19958,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,19964,19964,19964,19964,19964,19964,19586,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,45827,19964,21630,21636,21652,41655,24553,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21675,19964,19964,19964,19964,21692,19964,19964,34862,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,20324,19964,19964,19964,20995,21709,21740,20927,21725,21757,21788,21797,21813,21827,21839,21855,21868,20020,21884,46494,19964,21907,42177,42133,20384,21938,21954,21970,34413,21999,21981,22036,22051,43532,22081,22116,22132,22169,22199,19964,19964,19964,22215,22252,43778,34267,19964,22270,19964,22310,22327,19689,19689,30586,35856,31245,31245,22350,22099,22099,35881,24398,29320,21370,28400,19964,22366,28382,36712,37450,22386,19964,31106,31720,22405,35473,19689,27661,22978,37716,22440,31245,22461,22487,26113,44104,22099,43606,35358,22530,39585,21387,22586,29834,22605,37501,24238,19964,35424,22626,23509,32060,24086,22643,43241,22662,31245,22692,33957,26610,22728,25562,39101,33049,31963,39991,41288,22756,19964,22781,41944,19964,22797,39201,19689,22834,22863,31245,25446,27506,22913,22099,33202,43366,43808,22929,22952,29578,43453,26881,40666,23022,23346,23046,23105,41141,23127,39749,23649,23181,19964,34316,19964,20428,23197,23214,23239,23262,39666,39686,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,42522,23300,41831,32910,26701,23326,31825,30394,23342,24594,27382,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,23362,19964,19964,20995,19964,19964,19964,19964,38138,23381,19964,23415,23421,23437,23453,23465,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,24442,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,35603,37450,23481,19964,23484,19964,19669,19689,19689,19689,23502,35856,31245,31245,31245,23525,22096,22099,22099,22099,23547,29314,25067,21387,19964,19964,19964,19964,24238,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,38958,19964,33531,19964,36058,19964,23570,23587,19689,19689,44035,23616,31245,31245,30694,23640,22099,22099,37412,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,30952,27958,23665,23699,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,23722,19964,19964,20995,19964,23758,19964,23776,41116,23795,23804,23820,23835,23847,23863,23876,20020,19964,19964,19022,43785,19964,18796,19964,19964,23892,19964,19964,19964,20033,19782,41063,21516,28932,28302,31854,23910,23940,19709,19964,19964,23964,19964,23991,19964,24010,26964,24035,24054,24075,43990,19689,19689,32159,24109,31245,24505,24131,24170,22099,46221,29320,21370,24190,19964,19964,24212,19964,24231,36150,24258,19964,19964,24295,42248,36087,40367,19689,20306,45796,24351,24371,31245,22545,23081,24393,34568,22099,29314,25067,21387,19964,22311,19964,22627,24238,19964,19964,19964,19689,19689,19689,32632,23345,31245,31245,31245,24414,26610,22099,22099,22099,24437,43752,38958,24458,19964,31472,19964,24279,19964,20426,19689,40777,19689,31245,31245,25343,25364,22098,22099,44833,24525,29188,19964,40043,19964,19964,24476,19689,43864,23346,31245,24502,41141,22099,24521,41150,24541,19964,40591,29794,24877,38361,23346,24569,24588,35051,42368,41851,19964,19964,24612,19689,25030,31245,24635,46001,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,26746,24653,24694,31424,28113,24594,35369,23220,39288,31314,27830,24710,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,18426,19964,19964,20995,19964,24734,19268,19964,33345,24753,24762,24778,24792,24801,24817,24829,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,24847,24845,19964,24864,24871,24893,43274,43065,46221,19547,21363,19964,24914,24967,18244,42103,19964,26075,19964,35004,24985,19632,42641,35209,25017,27881,31975,25053,25097,22471,25121,25140,25180,24335,29320,21370,19964,19964,32194,25202,28705,37450,19964,19964,19964,23390,19669,19689,19689,39703,19689,35856,31245,31245,33940,31245,22096,22099,22099,22100,22099,35790,25219,25258,19964,19964,34406,25274,24238,19964,19964,25295,32029,45193,19689,19689,25316,25337,25359,31245,42792,29287,25380,25400,22099,38452,29314,38958,19964,19964,19964,19964,36503,19964,25419,19689,36002,19689,25443,31245,36954,25364,25462,22099,36035,24174,29188,42851,41965,19964,29708,39358,37166,34813,23346,43305,25482,41141,39242,30939,41849,29195,25523,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,25542,34032,19689,29098,31245,25560,40849,29192,34030,19689,31245,35879,25578,20101,19764,24596,35531,35375,25321,23273,26276,22818,25602,25625,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19965,25644,19964,20995,21579,25663,19964,25687,26463,25711,25720,25736,25750,25762,25778,25790,20020,45887,25806,30253,21659,25842,44217,21452,45149,25858,25887,25903,43696,25919,25949,25871,25973,26028,26044,26060,26098,26155,21772,22283,21397,18244,26179,33167,23779,19964,19964,35574,19964,40140,40558,19890,40674,34637,26213,24421,26247,32918,26263,26004,26302,29320,21370,26344,26364,26380,26401,26417,26433,26449,42067,33745,26479,26494,43722,26523,26539,26574,26598,26633,39867,26649,26665,26688,35696,26717,26733,26768,26792,26823,21387,26859,44851,26907,26926,26949,26986,27013,36672,32064,22989,29540,27029,39857,29131,27053,26672,27072,27106,39273,27130,34522,40869,27147,35561,44457,31455,27163,29383,44248,25164,27188,42239,40568,30621,27215,27237,27257,27291,27327,27350,27371,27420,29188,19964,33676,27451,19964,27469,42687,27199,23346,38852,27495,41141,42986,27522,41849,29195,27549,27565,27601,27617,27652,27677,27693,35763,27731,27803,27846,38063,25081,27862,27897,23310,40420,31414,27932,31575,27985,33550,31245,28033,28051,28105,28130,23223,41176,24618,41532,28146,28166,29350,28203,30121,28258,28274,28322,23220,28218,28344,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,28377,19964,20995,28398,28416,21078,26837,28441,28471,19964,28457,28496,28505,28521,28533,20020,19964,19964,28549,21659,19964,19964,19964,19964,22389,19964,19964,21026,22388,19964,28568,28603,28624,44532,30755,28648,21363,23760,19964,19964,28673,19964,19964,19964,25300,33758,26385,19964,41518,44031,19689,19689,27404,31245,31245,24505,37956,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,37450,19964,19964,24737,19964,19669,19689,19689,38157,19689,35856,31245,31245,30910,31245,22096,22099,22099,31369,22099,29314,25067,21387,19964,19964,19964,19964,24238,19964,28700,19964,19689,19689,26582,19689,23345,31245,31245,28721,31245,26610,22099,22099,28740,22099,29314,38958,19964,19964,19964,19964,32176,19964,20426,19689,19689,28757,31245,31245,28724,25364,22098,22099,28035,24525,29188,19964,19964,19964,19964,39358,19689,19689,23346,31245,31245,41141,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,42880,19964,34032,27631,28950,31245,31553,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,27746,28776,44555,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,20040,19964,19964,36739,28804,28813,28829,28835,28851,28867,28879,20020,19964,19964,19964,21659,19964,19964,21537,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,28895,19964,19964,19964,18244,19964,19964,19964,34103,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,33867,19964,34096,28911,19689,19689,19689,19689,35856,31245,31245,31245,31245,26228,22099,22099,22099,22099,29314,28013,19964,19964,40502,19964,35082,34997,19964,39125,29632,19689,19689,43159,19689,23345,31245,31245,28930,31245,26610,22099,28741,22099,22099,32766,39785,19964,30448,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,37621,19964,39419,34033,19689,19689,28948,31245,45959,41840,22099,26231,41849,39789,28966,28989,29034,29053,29073,29121,43282,29165,32231,43581,29181,23948,33510,29213,22424,29250,29275,39489,29303,29192,29336,29086,38944,32499,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,35939,30048,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,40290,19964,21371,29371,19964,19964,19964,25671,19964,18376,19964,22254,18631,25670,22020,38305,29437,29469,34575,29456,29495,19964,19964,23735,18244,29519,24944,19964,25819,19964,19964,19964,39389,19689,19689,29538,35856,31245,24355,24505,22099,22099,25186,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,29556,29575,19669,19689,19689,19689,19689,29594,31245,31245,31245,35858,22096,22099,22099,22099,22099,29612,28013,19964,29648,19964,19964,19964,19964,19964,19964,36452,40719,19689,19689,19689,23345,29665,31245,31245,31245,26610,29686,22099,22099,22099,29314,28013,19964,19964,29705,19964,19964,19964,24619,19689,19689,31910,31245,31245,31245,29724,22098,22099,22099,29751,29188,19964,19964,29791,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,29810,45364,19689,19765,31245,35879,25124,29829,39924,43012,31245,29850,29868,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,29003,19964,20995,21260,20590,26970,36307,36317,38537,38546,29892,29907,29919,29935,29947,20020,19964,19964,19964,42047,42097,19964,19964,19964,29963,21336,19964,25242,21347,29997,22236,30034,30076,30098,27334,30137,30153,19964,19964,30273,18244,19964,30184,19964,19964,19964,30245,30269,39389,30289,30323,19905,20085,30340,32839,30368,39755,30384,25384,30410,29320,21370,23994,24038,30447,30464,30891,30501,33185,30521,30558,19964,19669,32592,19672,30574,30608,35856,30655,27056,30675,30710,22096,30750,24637,30771,30810,39977,28013,19964,19964,19964,39040,30846,30871,19964,19964,19964,38760,19689,19689,27037,44001,25037,31245,31245,30907,30926,32671,22099,22099,30985,37379,28013,29649,31027,31057,31099,31122,31146,45187,35230,31182,31216,31244,31262,31301,31340,31367,28242,39895,31385,31443,37673,41702,42582,43213,32116,31488,31507,42964,31523,31539,31591,31619,31635,31672,31713,19964,22153,31736,31324,31761,39442,31796,31819,31841,22712,41851,29813,19964,31870,19689,19765,31245,35879,24524,44902,34030,31887,31934,33626,31996,32020,19764,24596,33841,32045,32080,32096,32112,28114,24594,31424,28113,24594,23284,32132,39288,31314,38032,23142,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,31463,19964,20995,19964,19964,19964,19964,31351,19964,18345,31471,33875,23975,38186,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,27355,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19422,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,32175,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,32192,19964,19964,19964,19964,19964,19964,19964,39170,19689,19689,19689,23345,32210,31245,31245,31245,26610,32230,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,20655,19964,20995,19964,31745,19964,29503,32247,32287,32300,32316,32322,32338,32354,32366,20020,19964,32382,19964,21659,19964,42590,32401,19964,19964,29018,19964,29011,38785,29017,32429,44591,32445,44728,32708,32485,32515,22228,19964,23894,32531,19964,23365,21176,32562,20547,26933,32552,43150,32579,30592,32613,43545,22506,32648,38860,32695,22891,32724,43092,32752,21370,30010,19964,19964,19964,24215,19964,19964,19964,19964,19964,32782,33267,32798,42256,42289,43036,32817,32837,29141,37184,26807,32855,32876,42994,27131,29314,28013,19964,34671,29981,19964,35125,45660,19964,19964,19964,19689,19689,40374,37913,23345,31245,31245,32895,32934,26610,22099,22099,32959,32988,29314,28013,44748,19964,19964,33011,19964,19964,24619,44138,19689,19689,31245,33029,31245,22445,22098,33046,22099,24525,29188,33065,19964,19964,33081,34033,33097,19689,33106,33122,31245,33145,43634,22099,42469,29195,33161,19964,33183,20428,32627,23346,45059,31246,22099,33201,41851,19964,33218,34032,19689,27911,40812,35879,23554,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,27479,33238,33254,33288,39288,36835,33322,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,20281,19964,20995,19964,18581,19964,19964,36880,28080,28089,33361,33375,33384,33400,33412,21496,19964,30166,19964,21659,19964,19607,19964,19964,19964,30168,19964,30161,32271,30167,33428,33444,33465,44189,46221,19547,21363,19964,26348,19964,18244,19964,33489,33507,33526,19964,27453,21676,39389,33547,29421,31900,41374,31245,33566,33582,32860,22099,33598,33648,33699,33730,21741,33783,30479,19964,19964,19964,25826,19964,19964,19964,19669,33805,30969,19689,19689,27916,28632,45121,31245,31245,22096,33831,46113,22099,22099,29314,28013,19964,34708,39606,19964,25647,23571,33857,19964,28552,19689,33891,19689,33915,23345,34948,33938,41352,33956,42404,22897,22099,34001,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,19995,19964,19964,19964,41069,19689,23346,33973,31246,39555,22099,41851,19964,19964,34032,19689,19765,31245,35879,37203,29192,34030,19689,31245,35879,22740,20101,45757,33994,34017,38913,39947,32460,31427,28114,24594,31424,28113,24594,35369,23220,34049,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,18523,19964,21614,19964,18504,34083,26082,34119,34150,34189,34175,34194,34159,34210,34222,20020,19964,34238,34263,34283,34377,34311,19821,19964,20541,34332,34367,34393,19531,34429,34457,34473,34501,34538,34591,34628,21363,30018,19964,19964,34701,24929,19964,34653,34901,34669,34687,34724,39389,34776,23198,19689,30639,45803,19804,24505,37125,36027,42376,46221,34829,21370,34859,39599,30229,19964,19964,19964,34878,19964,19964,34897,34917,27877,19689,19689,19689,40445,34944,31245,31245,31245,23061,34964,22099,22099,22099,31400,28013,19964,19964,19964,37734,19964,19964,35118,34984,19964,31776,19689,28760,19689,35020,31245,31245,45765,45541,30722,22099,22099,38445,36619,43913,28013,35067,35105,36279,43933,36866,35141,35834,35178,40548,35225,33129,35246,35282,22445,27715,35298,35314,35343,29766,38009,35391,35411,35440,35461,36092,30307,35495,27221,30686,35521,38227,43358,35547,28017,35599,19964,18562,35619,23600,28587,44812,35641,35665,35684,41851,35712,36353,38907,35736,29355,35752,42483,35779,29625,35806,31193,27275,31686,26125,35830,35850,35874,35897,35814,35926,35955,35983,39063,36018,36051,28113,24594,35369,23220,27435,36074,38032,24718,36108,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,36125,20995,19964,40298,36146,19964,26328,36166,36175,36191,36205,36214,36230,36242,20020,36258,18714,36384,36295,40165,36333,19964,36369,18382,36408,36437,36474,36490,36549,22765,36587,36635,43671,36651,36688,36704,19964,36728,35720,36755,30505,21305,30485,26317,19964,19964,36777,39389,19690,36928,36794,35856,19731,36822,44413,22099,23089,42326,36851,29320,21370,19964,36896,19964,30536,33013,31083,19964,33663,37523,38111,36918,31780,27947,19689,25427,25986,38417,36944,31245,27267,24668,25466,36978,22099,32679,29314,22676,37005,19964,37041,37060,19964,19964,19964,19964,37077,19689,45703,37311,19689,23345,31245,29105,37097,31245,26610,22099,35043,37120,22099,29314,28013,19964,39827,19964,37141,19964,19964,37161,19689,19689,31491,31245,31245,31245,34067,26230,22099,22099,44791,29188,44075,19964,19964,19964,38747,19689,41483,28361,31245,37182,32943,22099,37200,41849,22559,19964,19964,19964,43502,30300,23346,37219,31246,37405,37268,41851,37287,19964,34032,19689,19765,31245,35879,24524,33334,35910,37307,37327,41912,30734,37349,26507,37365,37428,28328,19553,31949,31427,28114,24594,31424,28113,24594,35369,23220,27818,37232,38032,24154,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,30885,20995,19964,19964,37444,30855,37466,37517,19964,18600,37539,37551,37567,37579,20020,19964,19964,37595,21659,19964,19964,19964,37620,21456,19964,19964,37616,37595,19964,24615,33815,29670,37637,37658,37707,21363,22370,37732,19964,18244,19964,37750,37803,19964,37827,19964,37808,39389,37847,37871,35479,43249,37887,26558,37929,37642,37945,26012,37972,38025,38048,19964,30220,24272,19964,38079,38099,19964,19964,19964,19964,19669,19689,29057,19689,19689,35856,31245,38507,31245,31245,22096,22099,27090,22099,22099,29314,23924,38127,25526,19964,19964,42059,19378,35156,39323,29037,19689,41487,38154,19689,23345,31245,38173,31245,31245,43573,22099,38209,22099,22099,29314,28013,29522,19964,19964,38632,19964,19964,38243,19689,43167,19689,31245,31245,38261,31980,22098,22099,38281,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,40316,19964,19964,38302,19689,23346,31245,31246,22099,22099,27533,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,30783,38321,37855,35649,33841,38355,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,22610,19964,19964,42556,40756,40759,36515,38377,38396,45924,38412,38433,44110,19547,38468,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,30542,19964,19964,19964,19964,19964,19964,19964,38484,19689,19689,19689,19689,35856,31245,31245,31245,31245,27087,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,31918,19765,38503,25609,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,40281,21110,19964,19964,39351,19964,22570,38523,37025,38562,38575,38584,38600,38612,20020,19964,37495,40073,21659,31130,38628,38648,45654,38666,38687,38707,38734,38776,38801,32004,38837,38876,43899,38892,38929,38990,19964,19964,19964,39014,22589,39030,21480,25544,19964,19964,28066,39056,32597,40948,31228,35856,44358,36962,39079,22099,39095,31285,32736,33714,21370,19964,19964,19964,39117,29973,19964,32262,19964,39123,39141,39162,41331,19689,44502,39186,34060,30659,31245,32214,39221,23157,25403,22099,29689,39258,29314,28013,19964,19964,39315,34739,39339,19964,37145,39374,39412,39435,39205,34791,35998,33922,39458,35505,39475,31245,39505,22099,39520,39536,22099,39571,28013,39622,19964,36421,36666,39642,37481,20105,38334,40020,19689,24377,39459,31245,22445,26617,39662,39682,24525,31e3,38691,39626,19964,19964,31871,39702,19689,22065,31245,31245,39719,22099,22099,39771,29195,44437,19964,19964,30964,19689,37252,31245,31246,39805,22099,33299,19964,39825,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,25152,39843,34928,39883,39911,24618,35853,35877,19934,39940,39963,29479,28113,24594,35369,23220,28289,40007,27969,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19445,20995,40041,31041,40059,40096,40125,40156,40109,40181,40195,40207,40223,40235,20020,40251,26843,19964,40269,19964,19964,37691,19964,37811,19964,40314,40332,21032,40339,40355,40390,40412,45318,46044,40436,21363,40461,40481,40499,40518,40584,19964,19964,19964,20410,40607,19964,40653,40690,40713,19689,39299,40735,31245,24505,42496,38286,22099,46221,29320,21370,36392,19964,23742,31070,40751,19964,19964,19964,19964,30425,19669,40775,40793,19689,45906,35856,40811,40828,31245,32821,22096,40845,40865,22099,32879,33612,28013,19964,19964,40885,40903,19964,38106,40921,36273,40929,40945,19689,44144,42212,28608,31245,31245,40964,31803,31274,22099,22099,40980,36611,43960,41049,41676,19964,41085,29559,19964,41105,24619,19689,22847,19689,31245,31245,41132,22445,22098,22099,41166,24525,29188,19964,41192,40253,41218,30431,32801,38339,23346,38265,46203,25995,34968,30830,41849,29195,19964,41238,37987,20428,19689,23346,31245,31246,22099,22099,31564,41986,35445,22966,19689,41257,29440,35879,23165,41278,41312,41328,41347,39235,44740,20101,41368,41390,41406,24618,35853,35877,25628,43869,23246,42438,24486,41445,41468,34485,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,24242,20995,19964,19964,20004,19964,41503,41553,41565,41581,41597,41609,41625,41637,20020,41653,37999,19211,21659,41671,42011,41692,43478,38380,41730,41746,41771,41762,45218,41787,41821,41867,46074,32972,41898,41936,41960,21922,41981,42002,19964,19964,42035,42083,42119,42149,42165,42200,42228,42272,42288,42305,42342,42392,33978,42428,42454,42512,38193,29320,42538,36761,42554,31158,41296,42572,19964,19964,42606,42626,34134,42667,42703,22334,19689,28181,28657,42719,22514,31245,42787,22878,42808,32995,22099,42824,34843,43927,19964,42845,34606,42867,38650,42903,42928,42933,41202,22646,42949,43010,28187,43028,33473,44366,31245,43052,42317,35967,30111,22099,43081,29314,28013,43108,19964,43135,43183,19964,43203,26286,27636,43229,28580,43265,42734,43298,43321,43348,41920,23072,43382,23683,43419,43447,39146,43469,43494,43518,19689,30632,43561,31245,43597,43622,22099,43657,29195,26871,43687,19964,28354,43712,24309,41882,30082,43738,43397,43801,43824,45099,29395,43851,43885,44343,32662,43949,43765,43976,44017,44051,35034,44067,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,42760,28788,44091,44126,44160,44176,31314,38032,24146,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,44205,19964,19964,44244,19964,38718,40619,40628,44264,40628,40637,44280,44292,20020,19964,19964,19964,42184,19964,35089,19964,19964,19964,19964,35088,19964,44308,19964,24615,44328,44382,24322,31697,44398,44429,44453,19964,19964,18244,19964,19964,44473,44481,19964,19964,33789,40533,44499,19689,19689,44518,31245,31245,27241,32469,22099,22099,33632,44548,44571,44607,28973,44625,19964,19964,19964,44667,44694,19964,36525,19669,23030,36806,24093,33272,35856,22497,44714,29149,23531,22096,27114,34553,43641,42829,40994,28013,19964,35162,37081,19964,19964,19964,26910,19964,25203,19689,37245,19689,19689,23345,45942,31245,31245,31245,34513,28150,22099,22099,22099,29314,22183,19964,36346,19964,19964,19964,31166,44874,19689,19689,19689,44764,31245,31245,22445,44785,22099,22099,24525,33306,19964,19964,37765,19964,19859,42680,19689,40697,44807,31245,29259,44828,22099,23674,29195,44849,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,35201,23624,37393,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,24678,26891,36602,44867,23220,39288,37900,44890,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,44950,45009,41714,44984,19964,30794,19964,41711,45006,18249,26997,45025,45037,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,26752,40795,45053,42356,46221,19547,21363,19964,33683,22147,18244,19964,19964,19964,19964,19964,45075,19964,39389,29227,30324,19689,41262,31245,23111,24505,35668,22099,26776,46221,29320,21370,19964,19964,19964,19964,19964,45093,19964,19964,22013,19964,19669,19689,22417,19689,19689,35856,31245,45115,31245,31245,22096,22099,30823,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,34612,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,44990,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,30060,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,45137,19964,18326,19964,19502,45172,45209,19964,45234,45248,45260,45276,45288,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,39396,29596,28302,35327,45304,45334,19964,19964,19964,18244,19964,19964,19964,19964,45358,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,45380,19964,19964,19964,45402,19689,19689,19689,33449,31245,31245,31245,31245,42976,22099,22099,22099,22099,29314,28013,19964,25586,19964,19964,19964,19964,24619,28914,19689,31200,31245,37104,31245,45420,22098,43403,22099,39734,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,21532,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,28684,45447,45459,20020,19964,19964,19964,21659,45475,21983,19964,19964,19964,23486,24059,19964,42912,45497,45519,40795,45535,42748,46221,19547,21363,19964,19964,42887,18244,26189,27577,45557,19964,19964,19964,19964,39389,19689,34805,22998,35856,40829,31245,45582,22099,37271,22099,45598,29320,45640,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,45676,19964,19964,38083,19689,19689,35192,19689,23345,31245,24572,31245,31245,28233,22099,39809,22099,22099,29314,28013,36564,19964,19964,19964,19964,19964,24619,45702,19689,19689,44769,31245,31245,22445,28306,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,19964,19964,19964,19964,23975,22705,31603,20020,45719,19964,19964,21659,19964,19964,44962,19964,19964,19964,19964,44968,19964,19964,45748,41805,33030,28302,36989,45781,45819,19964,30211,19964,18244,19964,19964,19964,19964,19964,19964,30202,39389,19689,19689,23006,35856,31245,31245,45843,22099,22099,22099,45859,29320,21370,35395,19964,19964,19964,19964,19964,19964,37061,19964,19964,19669,45903,19689,45922,19689,35856,45940,31245,45958,31245,22096,45975,22099,45996,22099,29314,28013,19964,44312,19964,19964,19964,19964,19964,19964,19964,19689,29234,19689,19689,23345,31245,46017,31245,31245,26610,22099,46039,22099,22099,46060,28013,19964,19964,19964,19964,44609,19964,24619,19689,22809,45404,31245,31245,46090,46023,22098,22099,46108,46157,29188,19964,19964,46129,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,31649,19964,44483,19964,29404,19689,40396,31245,31246,46152,22099,41851,19964,46173,34032,40025,19765,46196,35879,46219,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,20379,19964,19964,19964,19964,20995,19964,19964,19964,19964,31351,34753,19964,19964,19964,23975,22705,31603,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,21363,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,39389,19689,19689,19689,35856,31245,31245,24505,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,44914,43431,43429,23399,25001,46251,45077,43424,44926,24999,46237,46267,46280,28425,19964,19964,19964,21659,19964,19964,44698,19964,19964,19964,19964,19964,19964,19964,24950,19964,19964,41033,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,25233,19964,31351,29876,46296,46309,46325,46334,46378,46357,28425,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,45566,19964,19964,45563,19964,19964,19964,19964,19964,46394,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,38971,19964,19964,19964,19964,19964,19964,20680,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,27172,19964,19964,19964,19964,25933,24019,46417,46450,46456,46427,19964,46472,28425,19964,19964,19964,21659,19964,19964,41241,19964,19964,45686,19964,19964,19964,45682,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,20254,19964,19964,19964,19964,19964,19964,20225,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19963,19964,19964,19964,19964,19963,19964,19964,32385,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,18423,19964,19964,19964,19964,19576,19964,19964,19964,19964,31351,19964,19964,19964,19964,19964,19964,20060,20020,19964,19964,19964,21659,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,24615,40795,31245,28302,46221,19547,19569,19964,19964,19964,18244,19964,19964,19964,19964,19964,19964,19964,21509,19689,19689,19689,35856,31245,31245,19840,22099,22099,22099,46221,29320,21370,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19669,19689,19689,19689,19689,35856,31245,31245,31245,31245,22096,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,19964,19964,19964,19689,19689,19689,19689,23345,31245,31245,31245,31245,26610,22099,22099,22099,22099,29314,28013,19964,19964,19964,19964,19964,19964,24619,19689,19689,19689,31245,31245,31245,22445,22098,22099,22099,24525,29188,19964,19964,19964,19964,34033,19689,19689,23346,31245,31245,41840,22099,22099,41849,29195,19964,19964,19964,20428,19689,23346,31245,31246,22099,22099,41851,19964,19964,34032,19689,19765,31245,35879,24524,29192,34030,19689,31245,35879,26125,20101,19764,24596,33841,24618,35853,35877,31427,28114,24594,31424,28113,24594,35369,23220,39288,31314,38032,24714,29196,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,36902,19964,19964,36533,46510,46515,46515,46536,36901,46531,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,19964,94503,94503,90406,90406,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,1,12290,3,0,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,362,94503,90406,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,94503,0,90406,94503,94503,94503,94503,94503,94503,94503,69632,73728,94503,94503,94503,94503,94503,65536,94503,0,0,0,362,362,0,0,0,0,0,0,0,0,0,0,0,357,0,0,0,0,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,111048,456,456,111048,456,456,456,456,456,456,456,456,456,456,111048,111048,111048,111048,111048,111048,111048,111048,111048,456,111048,111048,111048,111048,111048,0,0,0,0,0,0,0,0,0,296,0,0,0,0,0,0,1008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,300,118784,0,0,0,0,0,0,0,0,0,0,0,0,0,331,0,331,0,0,300,0,0,0,300,119195,73728,0,0,0,0,0,65536,0,0,0,0,0,750,0,0,0,0,0,0,0,0,0,0,771,774144,0,0,0,753,300,0,0,0,0,0,300,300,300,300,300,300,300,300,300,300,0,0,0,0,0,0,300,0,300,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,0,320,321,0,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,0,0,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,0,0,300,300,0,0,0,0,0,0,122880,0,122880,122880,122880,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,380,0,0,0,384,0,122880,122880,0,0,0,0,0,0,0,0,0,0,0,0,0,336,337,338,0,0,0,122880,122880,122880,122880,122880,122880,0,122880,0,2105629,12290,3,0,0,291,0,0,0,0,291,0,0,0,0,0,0,0,2629,0,0,0,0,0,0,2633,0,0,0,1613,0,0,0,0,0,0,0,0,0,0,0,0,0,383,335,0,0,0,1765,0,0,0,0,0,0,0,0,0,0,0,0,0,512,519,519,0,0,0,131072,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,750,0,0,0,0,0,750,750,0,0,810,0,131072,0,0,131072,131072,0,0,0,0,0,0,131072,0,131072,0,131072,0,0,0,0,0,0,0,0,0,0,131072,0,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,0,0,0,0,0,0,131072,0,131072,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,298,0,135168,135168,0,0,0,0,0,0,0,0,0,0,0,0,0,667,668,0,0,0,135168,0,0,135168,0,0,0,0,0,0,0,0,0,0,301,301,0,0,0,0,0,0,0,135168,135168,135168,135168,135168,135168,135168,135168,135168,135168,135168,135168,135168,0,0,0,0,0,0,135168,0,135168,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,118784,296,0,301,139264,0,0,0,0,0,0,0,0,0,0,0,0,0,726,0,0,301,301,301,0,0,0,0,0,0,301,0,301,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,139264,297,298,298,143728,298,298,298,143728,69632,73728,298,298,143658,298,298,65536,298,298,0,0,298,298,143658,298,298,298,298,298,298,298,298,298,363,298,0,143658,298,298,298,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,143658,298,298,143658,298,298,298,298,298,298,298,298,298,298,298,143728,298,298,298,298,298,298,298,298,143658,143658,143658,143658,143658,143658,143658,143658,298,298,298,143658,368,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,143658,298,298,143658,298,298,143658,143658,143658,143658,143658,143658,0,0,298,298,298,298,298,298,298,298,298,143658,298,143658,143658,143658,143658,298,298,298,143658,143658,143658,143658,143658,143658,143658,143728,143728,143728,143728,143728,143728,143728,143658,143658,143658,143658,143658,143658,143658,143658,143658,1,12290,3,0,0,0,0,0,0,0,90406,90406,90406,90406,0,94503,0,0,0,2200244,362,0,0,0,0,0,0,0,0,0,0,0,679,0,0,0,0,0,0,0,155648,155648,0,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,0,0,0,0,0,0,0,0,155648,0,0,0,0,0,0,0,0,155648,0,0,0,0,155648,0,0,0,0,0,0,155648,0,0,0,0,155648,155648,0,155648,155648,0,12290,3,0,0,0,126976,0,0,0,0,296,297,0,0,300,301,0,0,0,0,0,301,301,301,301,301,301,301,301,301,301,159744,163840,159744,159744,159744,159744,159744,0,0,0,0,25157,0,0,0,159744,159744,159744,0,0,159744,0,0,0,0,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,159744,159744,25157,25157,25157,25157,159744,159744,159744,159744,159744,25157,159744,25157,1,12290,3,0,0,0,0,0,253952,0,0,0,253952,0,0,0,0,0,0,0,0,0,0,0,0,680,681,0,0,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,1,12290,3,0,167936,167936,167936,0,0,167936,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,0,0,0,0,0,0,0,0,0,321,395,0,0,0,321,0,0,0,0,0,0,172032,0,172032,0,0,0,0,0,0,0,0,0,249856,249856,249856,249856,249856,249856,249856,249856,249856,1,12290,3,0,0,172032,172032,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,0,0,0,172032,172032,0,0,172032,0,0,172032,172032,0,172032,0,0,0,0,172032,172032,172032,172032,172032,172032,172032,172032,172032,1,12290,3,0,0,0,0,249856,0,0,0,249856,0,0,0,0,0,0,0,278528,0,0,0,0,0,0,0,0,0,610304,0,0,0,0,0,0,172032,0,172032,172032,0,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,0,0,0,0,0,0,0,0,0,332,0,0,0,0,0,0,1,286,3,0,0,0,292,0,0,0,0,0,0,0,0,0,348,349,350,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,1,0,3,78112,176128,176128,176128,0,0,176128,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,0,0,0,0,0,0,0,0,0,358,0,0,0,0,0,358,78112,86306,0,633,0,0,0,296,297,0,0,300,301,0,0,0,0,0,0,779,797,0,797,792,0,0,0,809,0,0,0,29254,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,84881,82480,82480,82480,84885,82480,0,29254,29254,29254,29254,29254,78112,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,1,12290,3,0,0,0,0,0,1060,0,0,0,0,0,0,0,0,0,0,0,724,0,0,0,0,0,0,0,1103,0,0,0,0,1108,0,0,0,0,0,0,0,0,311296,0,0,0,742543,0,0,0,0,0,0,0,1578,0,0,0,0,0,0,0,0,0,0,0,733,0,0,0,0,0,29874,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30329,29210,30659,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29910,0,0,2228,0,0,0,0,0,0,0,0,0,0,0,0,0,1054,0,0,82480,82480,82480,82480,82480,84237,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83237,82480,82480,82480,82480,82480,0,0,0,2434,0,0,0,0,0,0,0,0,0,0,0,2444,31171,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,2623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,694,82480,82480,82480,82480,82480,84592,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83255,82480,82480,82480,82480,82480,2726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,742,82480,82480,84697,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,0,0,944,2737,0,2819,0,0,0,0,0,0,0,0,0,0,0,29210,29210,29210,31143,29210,2737,0,0,2881,0,0,0,0,0,29210,29210,29210,29210,29210,31564,29210,29210,29210,29916,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29926,29210,29210,29210,29936,29210,29210,29940,29210,29210,29210,29210,29945,29210,29210,29210,29952,82480,82480,82480,84833,82480,82480,82480,29254,29254,29254,29254,29254,31594,29254,29254,29254,29210,0,0,0,0,0,0,0,0,2991,0,2993,29210,29254,29254,31600,29254,29254,29254,31604,0,0,0,0,0,0,2737,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,322,82480,84966,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,31725,29254,29254,0,0,0,0,0,0,2598,0,0,0,0,0,0,0,394,0,0,0,0,0,394,0,0,78112,86306,0,0,0,0,0,296,297,0,0,300,301,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,377,0,0,0,0,0,0,0,0,0,41692,0,0,0,0,0,0,0,0,0,0,0,0,1,12290,3,78112,0,188416,29254,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83214,82480,82480,82480,2737,0,0,0,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30933,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,297,0,0,0,0,0,0,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,192969,0,192969,0,1,12290,3,0,192969,192969,192969,0,0,192969,0,0,0,0,0,0,0,0,0,0,303,304,0,0,0,0,0,0,0,0,192969,192969,192969,192969,192969,192969,192969,192969,192969,0,192969,192969,192969,192969,192969,0,0,0,0,0,0,0,0,0,362,0,0,0,0,155648,0,37163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,943,78112,86306,0,0,0,0,0,296,297,0,37163,300,301,0,0,0,0,0,0,822,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,0,0,0,0,41692,37268,0,0,0,0,0,0,0,0,0,0,0,0,335,0,0,0,0,41692,29254,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83621,82480,82480,82480,0,1130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,306,87041,1463,0,0,0,1469,0,0,0,1475,0,0,0,1481,0,0,0,0,0,0,184723,184930,184930,184930,184930,184930,184930,184930,184930,184930,0,0,0,0,0,0,184930,0,184930,1,12290,3,78112,86306,0,0,0,0,0,0,0,0,0,0,0,739,0,0,0,0,0,0,1475,1867,0,0,0,0,1481,1869,0,0,0,0,0,0,0,1044,1166,0,0,0,0,0,0,1172,2250,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,0,304,0,304,0,0,0,0,0,0,0,0,0,304,0,0,0,0,0,0,229376,0,0,0,0,0,0,0,0,0,362,0,0,0,0,131072,131072,0,0,0,204800,204800,0,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,205104,204800,204800,205103,205104,204800,205103,205103,204800,204800,0,0,0,0,0,0,0,0,0,362,0,302,0,0,0,0,0,632,0,0,0,0,0,296,297,151552,0,300,301,0,212992,0,0,0,0,0,764,0,0,0,0,0,0,0,0,0,0,1168,0,0,0,0,0,0,0,0,0,942,943,943,943,943,943,943,943,943,943,943,943,822,822,822,822,0,0,943,943,943,943,943,0,0,0,0,0,0,0,0,0,0,328,379,381,0,0,0,0,0,0,0,2200245,0,0,0,0,0,0,0,0,0,0,0,738,0,0,0,0,943,943,822,822,822,822,943,943,822,0,822,822,822,822,0,0,0,0,943,943,943,943,0,0,943,943,943,943,0,0,0,0,0,0,0,0,0,0,333,334,0,0,0,0,943,822,0,822,822,0,0,943,943,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,944,943,943,943,943,943,943,943,822,822,943,822,0,822,822,0,0,943,943,943,943,943,943,943,943,943,943,943,943,943,943,943,822,822,822,943,943,943,943,943,822,822,0,943,0,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,943,943,943,943,943,943,822,0,0,0,0,0,0,2737,0,0,0,0,0,0,0,0,0,0,0,0,0,822,822,822,822,822,943,943,943,943,943,943,822,0,0,0,0,0,0,0,0,0,0,0,822,943,943,943,943,943,822,0,0,0,0,0,0,822,822,822,822,822,822,822,822,822,822,822,822,0,0,0,0,943,822,0,0,0,0,0,822,822,822,822,822,822,0,0,0,0,0,0,0,943,943,943,943,943,943,943,943,943,943,943,943,943,943,943,943,0,0,0,943,943,943,943,943,943,0,0,0,0,822,822,822,943,0,822,0,943,0,822,0,943,0,822,0,943,0,822,0,0,0,0,943,943,943,943,0,0,822,822,0,0,943,943,822,0,822,822,822,822,822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,305,0,221184,221184,0,0,0,0,0,0,0,0,0,221184,221184,0,0,221184,221184,221184,0,0,0,0,0,0,0,221184,0,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,0,0,0,0,0,0,0,0,0,362,0,86306,0,0,0,0,0,0,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,1,12290,3,0,0,0,0,0,773,0,0,0,0,0,0,0,0,0,0,686,0,0,0,328454,0,297,0,300,0,0,0,300,0,301,0,0,0,301,0,0,0,301,69632,139679,0,0,0,0,0,65536,0,0,0,0,98304,0,0,0,0,0,0,0,0,0,0,0,0,397,0,0,0,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,225738,0,0,0,0,0,0,0,0,0,362,0,86306,0,0,0,345,237568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1008,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,0,0,0,0,0,0,0,0,0,362,0,253952,0,0,0,0,241664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1048,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,254411,0,0,0,0,0,0,0,0,0,362,296,0,0,0,0,0,0,0,0,0,270336,0,0,296,297,0,0,300,301,200704,0,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,328,0,0,0,266240,0,0,0,0,0,0,0,0,0,1,12290,2113823,0,0,0,0,0,0,293,0,0,0,293,0,0,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1079,274432,274432,274432,0,0,0,0,0,0,274432,0,274432,1,12290,3,0,0,0,0,0,782,0,0,0,0,0,0,0,786,0,0,800,0,0,0,0,0,800,800,0,0,0,0,29254,29254,29254,29254,29254,78112,87041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,683,0,0,0,1867,0,0,0,0,0,1869,0,0,0,0,0,0,0,1078,0,0,1081,1082,0,0,0,1086,0,0,0,1556,0,0,0,0,0,0,0,0,1929,0,0,0,0,0,0,823,822,822,822,822,822,822,822,822,822,822,0,0,0,0,0,0,0,0,0,0,0,0,733,0,0,0,0,0,0,0,0,0,0,0,0,772,0,0,0,0,29254,29254,29254,29254,29254,288,87041,0,0,0,0,0,0,0,0,0,565248,0,0,0,0,0,0,78455,86306,0,0,0,0,0,296,297,0,0,300,301,0,0,0,0,0,0,823,29210,29210,29210,29210,29210,29210,29210,29210,29210,29538,29210,29210,29210,29210,29210,82480,1,12290,3,78113,86306,0,0,0,0,0,0,0,0,0,0,0,740,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,1,12290,3,0,282624,282624,282624,0,0,282624,0,0,0,0,0,0,0,0,0,0,369,0,0,370,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,282624,282624,282624,282624,282624,0,0,0,0,0,0,0,0,0,362,336,86306,0,0,0,0,0,0,0,286720,286720,0,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,0,0,0,0,0,0,0,0,0,362,362,362,0,0,0,0,2817,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1199,2878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1363,0,0,0,306,0,0,0,0,0,305,0,305,306,0,305,305,0,0,0,305,305,306,306,0,0,0,0,0,0,305,405,306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1500,0,0,0,306,410,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1046,0,0,0,0,0,0,0,0,0,1056,0,0,429,0,0,0,0,305,446,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,486,486,460,486,486,486,486,486,486,486,511,486,486,486,486,486,486,486,486,486,486,486,486,486,531,486,486,486,486,486,29212,29212,29212,82481,29256,29212,82481,29212,29212,82481,82481,82481,29276,29276,29276,29212,29256,29256,29256,29283,29283,29283,29283,29283,29283,29256,29212,82481,29212,29212,82481,29256,29212,29256,1,12290,3,78112,0,0,642,0,0,644,645,0,0,0,0,0,0,0,0,0,362,362,362,0,0,0,147456,0,0,0,0,687,0,0,0,0,362,362,362,0,0,696,0,0,0,0,0,1061,0,0,0,0,0,0,0,0,0,1070,0,642,0,0,0,0,0,0,0,0,0,0,0,0,0,757,0,0,760,0,0,0,0,766,0,0,770,0,0,0,0,776,0,0,0,0,780,0,0,0,0,0,0,0,784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,727,0,0,784,0,0,0,0,644,0,0,0,0,0,0,799,0,0,0,0,0,0,622592,0,0,0,0,0,0,0,0,0,29210,29210,29210,29210,29506,29210,29210,644,0,0,0,0,0,814,780,0,0,0,0,0,818,819,780,0,0,0,0,780,728,780,0,29210,29210,29210,29501,29505,29210,29210,29210,29210,31174,29210,29210,29210,29210,82480,82480,82480,82480,84430,84431,82480,82480,82808,82812,82480,82480,82480,82480,82480,82832,82480,82836,82480,82841,82480,82844,82480,25938,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30497,82480,82857,82480,82480,0,29254,29254,29254,29622,29626,29254,29254,29254,29254,29254,29646,29254,29650,29254,29655,29254,29658,29254,29254,29671,29254,29254,29210,29210,29210,29537,0,0,0,0,0,1076,0,0,0,0,0,0,0,0,0,0,2618,0,0,0,0,2622,0,0,29254,29626,29505,82812,29501,29685,29537,29210,29210,82808,82937,82844,82480,82480,29254,29254,29254,29254,0,0,0,0,0,0,0,0,2170,0,0,29622,29693,29658,29254,29254,78112,87041,0,0,1027,1031,0,0,1035,1039,0,0,0,362,362,0,0,0,0,0,0,0,1096,0,0,0,0,0,0,1047,1048,0,0,0,0,0,0,0,0,816,29210,29210,29210,29210,29210,29509,29210,0,1101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,750,0,1159,0,0,0,0,0,0,0,0,0,0,0,1170,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,822,822,822,822,822,822,822,822,822,822,822,1188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1897,0,0,0,0,1170,29874,823,29210,29210,29210,29210,29210,29210,29210,29210,29210,30327,29210,29210,700954,29210,29210,29210,83265,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,0,0,0,1513,0,0,0,0,0,0,0,0,0,0,0,0,1053,0,0,0,0,1560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,0,29874,1614,29210,29210,29210,29210,29210,29210,29210,29210,30297,29210,29210,29210,29210,29210,29210,623130,29210,29210,29210,29210,29210,29210,29210,29210,29210,559817,29210,29210,29210,29210,875211,29210,82480,82480,82480,82480,83631,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,0,0,0,0,0,82480,82480,82480,82480,82480,82480,83660,82480,82480,83663,82480,82480,82480,82480,82480,82480,82480,83274,82480,82480,82480,82480,82480,25938,29874,944,82480,82480,82480,82480,83672,82480,82480,82480,82480,83677,82480,82480,82480,82480,82480,82480,82480,83634,82480,82480,82480,82480,82480,82480,82480,82480,83234,82480,82480,82480,82480,82480,82480,82480,82480,83649,82480,82480,700976,82480,82480,82480,82480,29254,29254,30515,29210,29210,29210,29254,29254,29210,82480,30523,29210,29210,29210,83775,82480,25938,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30451,29254,29254,0,0,2594,0,0,0,0,0,2600,0,0,0,0,0,0,0,69632,73728,0,0,0,347,345,65536,0,0,0,1873,0,0,0,0,0,0,0,0,0,0,0,0,0,1113,0,1115,0,0,0,0,1900,0,0,0,0,0,0,0,0,0,0,0,741,0,0,0,0,1959,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1923,29210,29210,30688,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30656,29210,82480,82480,82480,83960,82480,82480,83961,82480,82480,82480,82480,82480,82480,83968,82480,82480,29254,29254,29254,29254,0,0,0,1864,0,1028,0,0,0,1866,83983,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83995,82480,82480,82480,29210,29210,29210,29210,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31382,29254,29254,29254,29254,29254,29254,30777,29254,29254,30778,29254,29254,29254,29254,29254,29254,30785,29254,29254,29254,29254,29210,29210,82480,29254,0,0,0,0,0,0,0,2877,0,0,0,0,925696,0,0,0,2190,0,0,0,0,0,0,0,0,1019904,29210,29210,29210,29503,29507,29510,29210,2212,0,0,0,0,0,0,0,0,0,0,0,0,0,2224,2225,2250,0,0,0,0,29210,29210,29210,29210,29210,29210,30929,29210,29210,29210,29210,29210,29210,746010,29210,29210,29210,29210,29210,29210,29210,29210,29210,31673,29210,29210,29210,29210,82480,82480,82480,82480,29210,29210,29210,927985,29210,29210,29210,29210,29210,29210,29210,29210,30967,29210,29210,29210,29210,29210,30951,29210,29210,29210,29210,29210,29210,29210,30956,29210,29210,82480,82480,82480,82480,82480,82480,84223,82480,82480,82480,82480,82480,82480,82480,84231,82480,25938,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,370418,29254,29254,29254,29254,29254,30067,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30784,29254,29254,29254,29254,30789,0,29254,29254,29254,29254,29254,29254,31023,29254,29254,29254,29254,29254,29254,29254,31031,0,2409,0,0,0,0,2412,0,0,0,0,0,0,0,0,0,362,362,208896,0,0,0,0,2422,0,0,0,0,0,0,0,0,0,0,0,0,2431,0,0,0,0,0,0,921600,0,0,2749,0,954368,29210,29210,29210,29210,29210,30350,29210,29210,29210,29210,30355,29210,29210,29210,29210,29210,29210,30664,29210,30666,29210,29210,29210,29210,29210,29210,29210,29941,29210,29210,29210,29210,29210,29210,29210,29210,1028634,29210,29210,29210,29210,29210,29210,29210,31157,29210,29210,29210,29210,29210,29210,31164,29210,29210,29210,29210,29210,29210,29210,29210,30312,29210,29210,29210,29210,29210,29210,29210,82480,82480,84434,82480,82480,84437,82480,82480,82480,82480,82480,82480,82480,82480,84443,82480,25938,0,29254,29254,29254,29254,29254,29254,29254,30448,29254,29254,29254,29254,29254,29254,29254,848454,29254,29254,29254,29254,29254,29254,29254,29254,30463,29254,29254,29254,29254,29254,29254,29254,29254,30070,29254,29254,29254,29254,29254,29254,30078,82480,82480,82480,82480,82480,84450,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83258,82480,82480,82480,82480,82480,29254,29254,31224,29254,29254,31227,29254,29254,29254,29254,29254,29254,29254,29254,31233,29254,0,29210,82480,29254,3114,31787,85036,31789,0,29210,82480,29254,0,29210,82480,25938,0,29254,29254,29254,29254,30445,29254,29254,29254,29254,29254,29254,29254,29254,922182,29254,29254,29254,29254,29210,29210,29210,31263,29254,0,0,0,0,0,0,0,0,0,0,0,0,0,2603,31318,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29928,31330,29210,31332,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,29254,31596,29254,82480,82480,82480,82480,82480,82480,84593,82480,82480,82480,82480,82480,82480,82480,82480,82480,31690,29254,29254,29254,29254,29254,29254,82480,82480,82480,82480,82480,82480,84605,82480,84607,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,31647,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,29210,29210,29210,31738,0,0,2941,0,2943,0,29210,31617,29210,31618,29210,29210,29210,29210,29210,29210,29210,82480,82480,340528,82480,82480,82480,82480,84693,82480,29210,29210,31669,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,84929,3036,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,307,308,309,0,0,0,0,0,0,0,0,0,0,0,0,0,1127,0,0,0,0,0,418,0,0,0,0,447,0,0,0,0,0,0,0,0,1118208,0,0,0,0,0,0,0,0,1134592,0,0,1134592,0,0,0,0,0,0,0,447,447,418,447,447,447,447,447,447,447,447,447,447,447,447,530,447,530,530,530,447,530,530,530,530,447,29213,29213,29213,82482,29257,29213,82482,29213,29213,82482,82482,82482,29213,29213,29213,29213,29257,29257,29257,29257,29257,29257,29257,29257,29257,29213,82482,29213,29287,82540,29257,29287,29298,1,12290,3,78112,0,0,0,0,1563,0,0,0,0,0,0,0,0,0,0,0,0,0,0,787,0,29210,30346,29210,29210,29210,29210,30351,29210,29210,29210,29210,29210,29210,29210,29210,29210,30653,29210,29210,30654,29210,29210,29210,83668,82480,82480,82480,82480,83673,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83679,82480,82480,82480,82480,82480,29254,30498,29254,29254,29254,29254,30503,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31475,29254,29254,29210,29210,29210,2240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1932,2250,0,0,0,0,29210,29210,29210,30927,29210,29210,29210,30930,29210,29210,29210,29210,29210,31322,29210,598554,29210,29210,29210,29210,29210,31327,29210,31329,82480,82480,82480,84221,82480,82480,82480,84224,82480,82480,82480,82480,82480,82480,82480,82480,82480,84768,82480,82480,82480,82480,82480,82480,0,29254,29254,29254,31021,29254,29254,29254,31024,29254,29254,29254,29254,29254,29254,29254,29210,29210,29254,29210,82480,31259,29210,84509,82480,82480,82480,82480,84932,82480,84934,82480,84936,82480,29254,29254,29254,29254,29254,29254,29254,29210,31255,29254,29210,82480,29210,29210,82480,82480,29254,29254,0,0,0,2406,0,0,413696,31696,29254,31698,29254,31700,29254,29210,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,310,311,312,313,314,315,316,317,318,319,0,0,0,0,0,0,1077,0,0,0,0,0,0,0,0,0,1516,0,0,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1055,0,0,0,313,0,0,0,0,0,0,0,0,0,0,0,0,0,1142,0,0,420,428,430,419,428,0,310,428,448,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,482,487,487,498,487,487,487,487,487,487,487,487,513,513,526,526,527,527,527,527,527,527,527,527,527,527,513,527,527,527,527,527,29214,29214,29214,82483,29258,29214,82483,29214,29214,82483,82483,82483,29214,29214,29214,29214,29258,29258,29258,29258,29258,29258,29258,29258,29258,29284,29285,82534,29285,29285,82534,29284,29285,29284,1,12290,3,78112,0,759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1085,0,0,0,29254,29254,29210,82480,29210,29210,29538,29210,29210,82480,82480,82845,82480,82480,29254,29254,29254,29254,0,0,1467,0,0,0,0,0,1473,0,0,29254,29254,29659,29254,29254,78112,87041,0,0,0,0,0,0,0,0,0,909312,0,0,0,0,0,0,0,0,0,362,362,0,0,0,0,1094,1054,0,0,0,0,0,0,0,29210,29210,29210,82480,29254,29210,82480,29210,29210,0,0,1118,0,0,0,0,0,0,0,0,0,0,0,0,0,1498,0,0,0,0,0,1147,0,0,0,0,1151,0,0,0,0,0,0,0,0,1159168,0,1159168,0,0,0,0,1159168,0,0,1174,0,0,0,0,0,0,0,0,0,0,0,0,0,1507,0,0,0,0,0,0,1192,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,1174,0,29874,823,29210,29210,29878,29879,29210,29210,29210,29210,29210,29210,30676,29210,29210,29210,29210,29210,29210,29210,29210,29210,30340,29210,29210,29210,29210,29210,29210,83224,82480,82480,83228,82480,83230,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83966,82480,82480,82480,82480,82480,29254,29254,30038,30039,29254,29254,29254,29254,29254,29254,29254,29254,30053,29254,30057,29254,3110,31783,85032,31785,0,29210,82480,29254,0,29210,82480,29254,0,29210,82480,29254,3118,31791,85040,31793,0,29210,82480,29254,30061,29254,30063,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,320070,0,0,0,0,1489,1490,0,0,0,0,0,0,0,0,0,0,403,0,0,0,0,0,0,0,1524,0,0,0,0,0,0,0,0,0,0,0,0,0,1547,0,0,0,1551,0,0,0,0,0,0,0,0,1556,0,0,0,0,0,0,0,0,0,0,0,0,351,352,353,354,0,0,0,0,1579,0,1581,0,0,0,0,0,0,1588,0,0,0,0,0,0,983040,0,0,0,0,0,0,0,0,0,2235,2236,0,0,0,0,0,0,29874,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30299,29210,29210,29210,29210,31334,29210,29210,29210,29210,82480,82480,82480,84586,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29254,29640,29254,29254,29254,29254,29254,30107,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,82480,82480,82480,83644,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83260,82480,82480,82480,82480,82480,82480,82480,83658,83659,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84227,82480,82480,82480,82480,84232,29254,29254,29254,29254,30474,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29938,0,82480,82480,82480,82480,82480,84002,84003,82480,82480,82480,82480,82480,82480,82480,82480,82480,83253,82480,82480,82480,82480,82480,82480,29254,29254,29254,30819,30820,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29678,29210,0,0,2173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1143,0,0,2461,0,0,2464,0,0,0,2467,2250,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,31714,29210,29210,82480,82480,82480,82480,82480,84447,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,29254,29254,31237,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29254,29254,31264,0,0,0,0,0,2597,0,0,0,2601,0,0,0,0,0,0,0,286720,286720,0,286720,286720,1,12290,3,0,82480,82480,84590,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,639536,82480,84600,84601,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,0,2747,0,0,0,0,0,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,84706,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30481,29254,31667,31668,29210,29210,29210,31671,29210,29210,29210,29210,29210,29210,82480,84927,84928,82480,25938,0,29254,30442,29254,29254,29254,29254,30447,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,3033,0,0,82480,82480,84931,82480,82480,82480,82480,82480,82480,29254,31691,31692,29254,29254,29254,31695,31781,0,29210,82480,29254,0,29210,82480,29254,0,29210,82480,29254,0,29210,82480,29254,0,29210,82480,29254,888832,889370,889392,321,321,371,0,0,0,0,0,0,0,0,0,0,0,0,0,1600,0,0,0,0,431,371,0,436,442,0,449,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,488,488,499,488,488,488,488,488,488,488,488,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,29215,29215,29215,82484,29259,29215,82484,29215,29215,82484,82484,82484,29215,29215,29215,29215,29259,29259,29259,29259,29259,29259,29259,29259,29259,29215,82484,29215,29215,82484,29259,29215,29259,1,12290,3,78112,0,0,788,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1968,0,0,0,788,0,0,0,0,0,0,0,788,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,31315,29210,29210,29210,29210,29210,29521,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,83957,0,0,520192,0,0,0,0,0,0,0,0,1066,0,1068,1069,0,0,0,0,0,1105,0,0,0,0,0,0,0,0,1114,0,0,0,0,0,1121,0,0,0,0,0,0,0,0,0,0,823,0,0,0,0,0,0,1071,1072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1144,0,0,0,0,0,0,741376,0,0,742442,0,1136,0,520192,1185,0,0,0,0,0,0,1134592,0,0,0,0,0,0,1134592,0,0,0,0,29210,29210,29913,29210,29210,29210,29210,742623,29210,29921,29210,29210,29924,29210,29210,29210,29210,29210,31440,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,83965,82480,82480,82480,82480,82480,82480,82480,82480,82480,520752,82480,82480,82480,82480,82480,82480,82480,82480,82480,83240,82480,82480,29254,29254,29254,29254,0,1863,0,0,0,0,0,1865,0,0,0,0,0,0,339968,0,2739,0,0,0,0,0,0,856064,82480,82480,742702,82480,83248,82480,82480,83251,82480,82480,82480,82480,82480,82480,82480,82480,83235,82480,82480,82480,82480,82480,82480,82480,29254,29254,311878,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,31478,29254,520774,29254,29254,29254,29254,29254,29254,29254,29254,29254,30073,29254,29254,29254,29254,29210,29210,82480,29254,0,0,0,2875,0,0,0,0,0,0,0,524288,0,0,0,0,864256,0,0,0,742783,29254,30081,29254,29254,30084,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30093,29254,29254,29254,29254,29254,1522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1973,82480,83778,29254,29254,29254,30534,0,1863,0,0,0,0,0,1865,0,0,0,0,0,0,1146880,0,1146880,0,0,0,0,0,0,0,796,0,0,0,0,0,0,800,0,0,0,0,1867,0,0,0,0,0,1869,0,0,0,0,0,1872,0,0,0,0,1913,0,0,0,0,0,0,0,0,0,0,0,944,0,0,0,944,0,0,0,0,585728,0,0,0,0,0,0,0,0,0,0,0,1154,0,0,0,0,29210,30699,29210,30701,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,84882,82480,82480,82480,82480,82480,83959,82480,82480,82480,385584,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84251,82480,82480,82480,82480,82480,82480,82480,82480,82480,83975,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,0,2344,0,0,0,29254,29254,29254,385606,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30096,29254,29254,30100,29254,29254,30792,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30468,29254,29254,2250,0,0,0,0,29210,29210,30926,29210,29210,29210,29210,29210,29210,29210,29210,30353,29210,29210,29210,29210,29210,29210,29210,82480,82480,84220,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,928031,82480,0,29254,29254,31020,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30467,29254,29254,29254,82480,82480,82480,82480,82480,82480,832048,82480,82480,82480,82480,82480,84455,82480,82480,82480,29211,29211,29211,29211,29255,29255,29255,29255,29255,29255,29255,29255,29255,29211,82480,29211,29211,82480,29255,29211,29255,1,12290,3,78112,0,0,2605,0,0,0,0,0,0,0,0,0,0,0,0,0,1883,0,0,0,1052672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1157,1158,82480,1053232,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30800,29254,29254,29254,29254,29254,31543,29210,82480,29254,0,0,0,0,0,0,0,0,0,1105920,0,0,0,0,0,0,82480,82480,82480,82480,84933,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31468,29254,29254,31697,29254,29254,29254,29254,29210,0,0,0,0,0,0,0,0,0,0,0,31666,323,324,325,0,0,0,0,0,0,0,0,0,0,0,0,0,1921,0,0,0,0,0,322,370,325,369,0,0,0,0,0,0,0,0,0,750,0,0,0,0,0,0,0,322,0,0,369,369,399,0,325,0,0,0,0,0,0,0,0,0,2200244,2200244,362,0,0,0,0,0,0,322,0,324,0,0,0,450,463,463,463,463,463,463,463,476,463,463,463,463,463,463,463,463,463,463,463,489,489,463,489,489,504,506,489,489,504,489,515,515,515,515,515,515,515,515,515,515,515,515,515,532,515,515,515,515,515,29216,29216,29216,82485,29260,29216,82485,29216,29216,82485,82485,82485,29216,29216,29216,29216,29260,29260,29260,29260,29260,29260,29260,29260,29260,29216,82485,29216,29216,82485,29260,29216,29260,1,12290,3,78112,655,0,0,0,0,0,0,0,0,0,0,665,666,0,0,0,0,0,0,1150,0,0,0,0,0,0,0,0,0,1567,0,0,0,0,0,0,0,0,699,700,0,0,0,0,0,706,0,0,0,710,0,712,0,0,0,761,0,0,0,767,768,0,0,0,0,0,775,0,0,0,815,709356,815,0,29210,29210,29210,29502,29210,29508,29210,777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,602112,0,708608,0,765952,0,0,0,0,708608,765952,0,0,0,765952,765952,708608,765952,0,699,0,0,804,0,0,0,0,0,804,804,807,0,0,0,0,0,0,1159168,414,414,0,0,0,0,0,414,0,0,777,0,0,0,0,0,815,0,0,0,0,0,0,0,0,0,2200245,151552,2200245,0,0,0,151552,29210,602650,29210,709462,29210,766490,29210,29210,29536,29539,29544,29210,29551,29210,29210,82480,83612,82480,82480,82480,82480,83617,82480,82480,82480,82480,82480,82480,82480,0,2096,29254,29254,29254,29254,29254,29254,29254,30086,29254,29254,29254,29254,29254,29254,29254,29254,30089,29254,29254,29254,29254,29254,29254,29254,82480,82809,82480,82815,82480,82480,602672,82480,709521,82480,766512,82480,82480,82843,82846,82851,82480,82858,82480,82480,0,29254,29254,29254,29623,29254,29629,29254,29254,602694,29254,709583,29254,766534,29254,29254,29657,29660,29665,29254,29672,29254,29254,29210,29210,29210,29539,0,0,0,0,0,1136,1138,0,0,0,0,0,0,0,0,0,384,0,0,0,0,0,384,0,0,29254,29254,29210,82480,29502,29210,29686,29544,29210,82809,82480,82938,82851,82480,25938,1766,29254,29254,29254,29254,29254,29254,29254,29254,30449,29254,29254,29254,29254,29210,29210,82480,29254,0,0,0,0,0,0,0,0,0,254411,254411,254411,254411,254411,254411,254411,254411,254411,1,12290,0,0,0,29623,29254,29694,29665,29254,78112,87041,0,0,0,0,0,0,0,0,304,304,304,0,0,0,0,0,1100,0,0,0,0,0,0,0,0,1109,0,0,0,0,0,0,0,1107,0,0,0,0,0,0,0,0,180224,0,0,0,0,0,0,0,82480,83225,82480,82480,83229,82480,82480,82480,82480,82480,82480,82480,82480,82480,83243,82480,25938,1767,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,963142,82480,82480,82480,83269,82480,82480,82480,82480,82480,82480,83278,82480,82480,25938,29874,944,29254,29254,30062,29254,29254,29254,29254,29254,29254,29254,29254,29254,30076,29254,29254,29254,29210,0,0,0,0,0,2988,0,0,0,0,0,29210,30925,29210,29210,29210,29210,29210,29210,30931,29210,29210,29254,30102,29254,29254,29254,29254,29254,29254,30111,29254,29254,29210,29210,29210,29210,0,0,0,0,0,1149,0,0,0,0,1153,0,0,0,0,0,0,0,69632,73728,0,0,0,343,342,65536,341,0,1487,0,364544,0,0,0,0,0,0,0,0,0,0,0,0,1067,0,0,0,503808,0,0,0,0,0,0,1503,0,0,1505,786432,1506,0,1508,1509,0,0,0,0,1514,0,0,0,0,0,0,0,0,0,0,0,1182,0,0,0,0,0,0,0,0,1526,0,0,0,0,0,1531,0,0,1534,0,1536,0,0,0,0,0,787938,1540,0,0,0,0,0,0,0,0,1549,1550,0,0,0,0,0,0,1036288,0,0,1556,0,0,0,0,1558,1559,0,0,0,0,0,0,0,0,0,0,1569,0,1571,0,0,0,0,0,325,0,69632,73728,0,0,0,0,0,65536,0,1603,917504,0,0,0,0,0,0,0,0,0,1595,0,0,1612,364544,29874,0,30289,29210,30291,30292,29210,30294,29210,29210,29210,365082,29210,29210,29210,29210,29210,31571,29210,29210,82480,82480,84824,82480,82480,82480,84828,82480,30318,29210,29210,29210,29210,29210,29210,29210,30325,30326,30328,29210,29210,29210,29210,30331,788092,29210,29210,30334,30335,29210,29210,29210,29210,29210,29210,29210,30343,29210,29210,29210,29210,29210,84877,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83256,82480,82480,82480,82480,82480,967194,29210,29210,29210,29210,29210,29210,1037968,29210,29210,29210,29210,29210,29210,29210,29210,30679,29210,29210,29210,29210,29210,29210,29210,29210,30362,83611,82480,83613,83614,82480,83616,82480,82480,82480,365104,82480,82480,82480,82480,0,0,0,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31027,29254,29254,29254,29254,82480,82480,82480,82480,82480,83632,82480,82480,82480,504368,82480,82480,82480,83639,82480,83640,82480,82480,83656,83657,82480,82480,82480,82480,82480,82480,82480,83665,82480,82480,82480,967216,82480,82480,82480,82480,82480,82480,1038042,82480,82480,82480,82480,82480,82480,82480,82480,82480,83992,83993,82480,82480,82480,82480,82480,83684,25938,0,30441,29254,30443,30444,29254,30446,29254,29254,29254,365126,29254,29254,29254,29210,0,0,2986,0,0,0,0,0,0,2992,0,29210,30470,29254,29254,29254,29254,29254,29254,29254,30477,30478,30480,29254,29254,29254,29254,30483,788244,29254,29254,30486,30487,29254,29254,29254,29254,29254,29254,29254,30495,29254,29254,29254,29210,2984,2985,0,0,0,0,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29514,967238,29254,29254,29254,29254,29254,29254,1038120,29254,29254,29254,29254,29254,29254,29254,29254,30091,29254,29254,29254,29254,29254,29254,29254,29254,30514,29210,29210,30517,29210,30519,29254,29210,82480,30335,29210,30525,29210,83657,82480,25938,1767,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30452,30453,83777,82480,30487,29254,30533,29254,0,1863,0,0,0,0,0,1865,0,0,0,0,0,326,0,0,0,0,0,0,0,0,0,0,664,0,0,0,0,0,0,0,0,1874,0,0,1877,1878,0,0,0,1882,0,0,0,0,0,0,0,606208,0,2607,0,0,0,0,0,0,0,2466,0,2250,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31715,29210,82480,82480,82480,0,0,937984,0,0,0,0,0,0,0,0,0,0,0,0,0,1945,0,0,0,0,1911,0,0,0,1915,0,0,0,0,0,0,0,0,0,1048,0,0,0,0,0,0,0,0,0,1556,0,0,0,0,0,0,0,1093632,0,0,1931,0,0,0,0,0,1164,0,0,0,0,0,0,0,0,0,0,396,0,0,0,0,0,0,1934,0,0,0,0,0,0,1940,0,1942,0,0,0,0,0,0,0,29229,29229,29229,82498,29273,29229,82498,29229,29229,0,0,0,1950,0,0,0,0,0,0,0,0,0,1878,0,1958,30686,29210,29210,29210,29210,29210,29210,938522,29210,29210,29210,29210,29210,29210,29210,29210,30693,29210,29210,29210,29210,29210,29210,29210,83971,82480,83973,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83651,82480,82480,82480,938544,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,1073712,82480,25938,1768,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,725574,29254,29254,82480,1094192,1098288,82480,0,0,0,0,29254,29254,29254,29254,29254,29254,29254,29254,30464,29254,29254,29254,29254,29254,29254,29254,30790,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30513,1098310,29254,29210,29210,29210,29210,29254,30781,30657,83964,29210,30837,29210,29210,82480,84087,2197,0,0,0,0,2202,0,2204,2205,0,0,0,0,0,0,0,0,1159168,362,0,0,0,0,0,0,2250,0,0,0,0,29210,29210,29210,29210,29210,348698,29210,29210,29210,29210,29210,29210,31163,29210,29210,29210,29210,29210,901658,29210,29210,29210,82480,82480,82480,82480,82480,348720,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84440,82480,82480,84442,82480,82480,82480,455216,82480,84235,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83281,25938,29874,944,82480,82480,750128,82480,82480,84247,82480,82480,82480,897584,82480,82480,82480,82480,82480,82480,82480,83675,82480,82480,82480,82480,82480,82480,82480,82480,84767,82480,82480,82480,82480,82480,82480,82480,971312,82480,82480,82480,82480,84259,82480,82480,82480,82480,82480,0,2344,0,0,0,0,0,0,1203,0,0,0,0,0,0,0,0,0,296,0,0,0,300,0,0,0,29254,29254,29254,29254,29254,348742,29254,29254,29254,29254,29254,29254,29254,29254,29254,29674,29254,29210,29210,29210,29210,0,29254,29254,455238,29254,31035,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,30117,29210,0,29254,29254,29254,750150,29254,29254,31047,29254,29254,29254,897606,29254,29254,29254,29254,29254,29210,0,0,0,0,3062,0,29210,29210,29210,29210,31711,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,83209,82480,82480,82480,82480,82480,83221,82480,29254,971334,29254,29254,29254,29254,31059,29254,29254,29254,29254,29254,29210,29210,29210,29254,29210,0,0,0,0,0,29210,29210,31759,31760,29210,29210,82480,82480,85011,0,446464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1186,0,0,0,2462,2463,0,0,0,0,0,2250,0,29210,29210,29210,29210,29210,29210,31712,29210,31713,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,84449,82480,82480,82480,82480,82480,901680,82480,82480,82480,82480,82480,82480,82480,84261,82480,82480,82480,0,2344,0,0,0,29254,29254,29254,29254,31239,29254,29254,29254,29254,29254,901702,29254,29254,29254,29254,29254,29210,29210,29254,29210,82480,31392,29210,84642,82480,31396,29254,0,0,0,0,1077248,0,0,0,0,0,0,2609,880640,2610,0,950272,0,2612,0,0,0,0,0,0,0,0,0,2612,0,0,0,0,0,0,0,704512,0,0,0,0,0,0,0,0,196608,0,0,0,0,0,0,0,0,0,0,0,696320,0,0,0,0,2631,372736,0,659456,0,0,483328,0,0,2636,29210,29210,29210,29210,29210,29210,373274,29210,29210,29210,422426,29210,29210,29210,29210,31428,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,541210,29210,29210,30947,29210,29210,31321,29210,29210,29210,29210,29210,659994,29210,29210,29210,29210,29210,29210,29210,30338,29210,29210,30341,29210,29210,29210,29210,29210,29210,31331,31333,29210,29210,31335,29210,1069594,1077786,82480,82480,82480,82480,82480,82480,373296,82480,82480,82480,422448,82480,82480,82480,82480,84596,82480,82480,82480,82480,82480,660016,82480,82480,82480,82480,2092,0,0,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,31026,29254,29254,31029,31030,29254,29254,29254,29254,29254,29254,373318,29254,29254,29254,422470,29254,29254,29254,29254,31375,29254,29210,0,0,0,0,0,307738,29210,29210,29210,29210,29210,307760,82480,82480,29254,29254,29254,29254,1463,1863,0,0,0,0,1469,1865,0,0,0,0,0,0,225888,225888,225888,225888,225888,225888,225888,225888,225888,225888,225738,225738,225738,225738,225738,225738,225905,225738,225905,1,12290,3,0,29254,29254,29254,29254,660038,29254,29254,29254,29254,29254,29254,29254,29254,31385,31387,29254,29210,0,0,3083,0,3085,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,29254,29254,29254,29254,3106,0,29210,31779,82480,85028,29254,29254,31389,29254,1069638,1077830,31390,29210,29254,29210,82480,29210,31393,82480,84643,29254,31397,0,0,729088,1060864,0,0,0,0,0,0,0,0,29210,29210,340506,29210,29210,29210,30306,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29947,29210,29210,29210,29210,29210,29210,31427,29210,29210,29210,29210,29210,29210,29210,29210,29210,760522,29210,29210,29210,29210,31439,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83624,29254,29254,29254,760558,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,31477,29210,29210,29210,30321,29210,29210,29210,30324,29210,29210,672282,29210,29210,29210,29210,29210,29210,31672,29210,31674,29210,31676,29210,82480,82480,82480,82480,29254,29254,29254,29254,0,614400,29210,29210,82480,82480,29254,2737,0,0,0,0,2822,0,0,2824,0,0,0,0,0,29210,29210,29210,29210,31570,29210,29210,29210,82480,82480,82480,82480,82480,84827,82480,82480,29254,29254,29254,29254,0,0,0,0,0,0,0,0,0,0,0,868352,2602,0,84775,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31054,29254,29254,29254,31542,29254,29210,29210,82480,29254,0,0,0,0,0,651264,782336,0,0,0,0,0,1193,0,0,0,1195,0,0,0,1197,0,0,0,0,0,439,0,0,451,467,467,467,467,467,467,467,467,467,477,467,467,467,467,467,467,2737,0,0,0,0,0,2884,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,31566,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,84829,82480,82480,82480,84889,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30786,29254,29254,29254,29254,29254,31654,29210,0,0,0,0,495616,0,0,0,0,0,0,29210,29210,29210,30349,1004058,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,975386,29210,29210,1024538,29210,29210,82480,496176,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,29254,496198,29254,29210,0,929792,0,0,0,29210,31758,29210,29210,29210,930330,82480,85010,82480,82480,82480,82480,2093,0,0,0,29254,29254,29254,29254,29254,29254,29254,29254,31038,29254,29254,29254,29254,31042,29254,29254,29254,0,31709,352794,31710,29210,29210,512538,29210,762394,29210,29210,29210,29210,84964,352816,84965,82480,82480,512560,82480,762416,82480,82480,82480,82480,31723,352838,31724,29254,29254,512582,29254,29210,3082,0,0,0,0,29210,29210,29210,29210,31761,29210,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31028,29254,29254,29254,762438,29254,29254,29254,29254,31730,0,0,0,0,0,0,29210,29210,29210,29210,29210,31620,29210,29210,29210,31624,82480,82480,930352,29254,31766,29254,29254,29254,930374,0,0,0,0,29210,29210,29210,31311,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,84427,82480,82480,82480,82480,82480,0,0,0,326,327,0,0,0,0,0,0,0,0,0,0,0,1532,0,0,0,0,0,366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1499,0,0,0,0,366,0,0,0,374,376,0,0,0,0,0,0,0,296,297,0,0,300,301,0,0,0,0,0,409,0,0,0,409,69632,73728,0,366,366,0,421,65536,366,0,0,366,421,496,500,496,496,505,496,496,496,505,496,421,421,0,327,421,0,0,421,421,0,0,0,0,0,0,0,296,297,0,0,300,301,0,0,217088,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,29217,29217,29217,82486,29261,29217,82486,29217,29217,82486,82486,82486,29217,29217,29217,29217,29261,29261,29261,29261,29261,29261,29261,29261,29261,29217,82486,29217,29217,82486,29261,29217,29261,1,12290,3,78112,0,0,806912,0,0,0,0,0,0,0,0,0,0,0,0,0,1970,0,0,0,0,773,0,0,0,0,0,0,29210,29210,29496,29210,29210,29210,29210,29210,29210,987674,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,84585,82480,82480,82480,82480,29210,29210,627226,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,83954,82480,82480,82480,82803,82480,82480,82480,82480,82480,82480,627248,82480,82480,82480,82480,82480,82480,82480,82480,83635,82480,82480,82480,82480,82480,82480,82480,0,0,29617,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,370340,82480,82480,82480,82480,0,0,0,362,362,0,0,0,0,0,1055,0,0,0,0,0,0,0,29231,29231,29231,82500,29275,29231,82500,29231,29231,0,0,0,0,1951,0,0,0,0,0,0,0,0,0,0,0,1545,0,0,0,0,82480,82480,83986,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84254,82480,82480,30803,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30801,29210,29210,30960,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30684,29210,82480,82480,82480,307782,29254,29254,29254,29254,29254,0,0,0,0,29210,29210,29210,438810,29210,29210,29210,29210,29210,29210,29210,934426,82480,82480,82480,422,422,0,0,422,437,0,422,422,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,490,490,464,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,29218,29218,29218,82487,29262,29218,82487,29218,29218,82487,82487,82487,29218,29218,29218,29218,29262,29262,29262,29262,29262,29262,29262,29262,29262,29218,82487,29218,29218,82487,29262,29218,29262,1,12290,3,78112,0,29254,29254,29254,29254,29254,78112,87041,0,0,1028,1032,0,0,1036,1040,0,29874,1615,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30946,29210,82480,83984,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82845,82480,29210,963098,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,84694,978944,0,0,0,0,0,516096,0,0,0,0,0,0,0,0,0,1504,0,0,0,0,0,0,1032192,0,0,299008,0,1056768,0,0,0,0,0,0,0,2621,0,0,0,0,0,328,329,330,0,0,0,0,0,0,0,0,657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2625,0,0,0,0,0,0,0,0,0,0,0,0,0,1971,0,0,0,0,0,299546,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,725530,29210,29210,29210,29210,29210,516634,29210,29210,29210,29210,29210,29210,29210,29210,836122,29210,29210,29210,29210,29210,467482,29210,29210,29210,29210,29210,31509,29210,29210,29210,29210,29210,29210,1053210,82480,82480,82480,82480,82480,82480,82480,82480,82480,83978,82480,82480,82480,82480,82480,82480,29210,29210,29210,1032730,29210,29210,1057306,29210,29210,299568,82480,82480,82480,82480,82480,82480,82480,83962,82480,83964,82480,82480,82480,82480,82480,82480,82480,83661,82480,82480,82480,82480,82480,82480,82480,82480,83662,82480,82480,82480,82480,82480,82480,82480,82480,82480,836144,82480,82480,82480,82480,82480,82480,1032752,82480,82480,1057328,82480,82480,299590,29254,29254,1057350,29254,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,29254,29254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,823,0,0,0,0,331776,0,0,0,0,0,0,0,29210,332314,29210,29210,29210,29210,487962,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,509899,29210,533018,29210,29210,29210,29210,909850,29210,29210,29210,29210,29210,29210,82480,332336,82480,82480,82480,82480,82480,82480,82480,0,0,29254,29254,29254,31219,29254,29254,29254,82480,82480,82480,82480,559835,82480,82480,82480,82480,875229,82480,909872,82480,82480,82480,82480,0,0,0,0,29254,29254,29254,29254,29254,29254,29254,30776,29254,29254,29254,29254,875247,29254,909894,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,82480,82480,29254,29254,29254,29254,2737,0,0,2820,0,0,0,0,0,0,0,466944,0,0,29210,29210,29210,29210,496154,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,389680,84691,82480,82480,82480,684,0,0,0,0,688,0,0,0,362,362,362,0,0,0,0,0,0,0,970752,0,0,0,2221,0,0,0,0,0,0,0,667648,475136,0,0,0,29210,29210,29210,29210,29210,31312,29210,29210,29210,29210,29210,29210,29210,31431,29210,29210,29210,29210,29210,29210,29210,29210,29920,29210,29210,29210,29210,29210,29210,29210,82480,82480,82813,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,922160,82480,82480,0,0,29254,29627,29506,82813,29210,29210,29210,29210,29552,82480,82480,82480,82480,82859,82480,0,29254,29254,29254,29254,29627,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,0,0,3035,0,29254,29254,29254,29254,29673,78112,87041,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,1102,0,0,0,0,0,0,0,0,0,0,0,0,0,2183,0,0,29210,29933,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30685,0,0,1110016,0,0,0,0,0,0,0,0,0,0,0,0,0,2223,0,0,0,0,1111620,0,0,0,0,0,0,0,0,0,0,0,0,0,2442,0,0,1110554,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82850,82480,1110598,29254,29210,29210,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,29254,29254,0,393216,0,0,0,0,0,0,0,0,0,1966,0,0,0,0,0,0,376832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,82480,82480,82480,82480,377392,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82839,82480,82480,82480,82480,29254,29254,377414,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30496,29254,29254,0,0,2199,0,0,0,0,0,0,0,0,0,0,0,0,0,2457,0,0,82480,82480,999984,82480,82480,82480,82480,82480,82480,82480,82480,0,0,0,0,0,0,0,33402,297,0,0,49790,301,0,0,0,29254,29254,29254,1000006,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29254,29210,82480,29210,31070,82480,84320,29254,31074,0,0,0,0,0,0,0,635,636,0,0,639,640,0,0,0,0,0,569344,0,0,0,0,0,0,0,0,0,0,0,0,0,2632,0,0,0,0,839680,0,0,0,0,0,0,0,0,0,0,0,0,0,2733,2734,0,29210,84727,82480,31480,29254,0,0,0,0,0,0,0,0,0,0,0,1895,0,0,0,0,82480,1040944,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31247,29254,29254,29254,29254,1040966,29210,29210,82480,29254,0,0,0,0,0,0,0,0,455,1147352,1147352,1147352,1147352,1147352,1147352,1147352,465,465,483,491,491,483,491,491,491,491,491,491,491,491,516,524,524,524,524,524,524,524,524,524,524,524,524,524,533,524,524,524,524,524,29219,29219,29219,82488,29263,29219,82488,29219,29219,82488,82488,82488,29219,29219,29219,29219,29263,29263,29263,29263,29263,29263,29263,29263,29263,29219,82488,29219,29219,82488,29263,29219,29263,1,12290,3,78112,0,0,0,762,0,0,765,0,0,769,0,0,0,0,0,0,0,1541,0,0,0,0,0,0,0,0,1892,0,0,0,0,0,0,0,0,786,0,0,0,0,0,0,816,782,0,0,816,0,0,0,0,0,0,1491,1492,0,0,0,0,0,0,0,0,1049,1050,1051,1052,0,0,0,0,29516,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29553,29210,82480,561712,877104,82480,29254,561734,877126,29254,0,0,29210,29210,82480,82480,29254,29254,0,0,0,0,0,0,0,0,2814,2815,0,82480,82480,82480,82816,82480,82823,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84609,82480,82480,82480,82480,29254,82480,82480,82860,82480,0,29254,29254,29254,29254,29254,29630,29254,29637,29254,29254,29254,29254,29254,29254,553542,29254,29254,30797,29254,29254,29254,29254,29254,29254,29210,352256,3031,0,0,761856,0,0,0,0,0,0,29254,29254,29210,82480,29210,29210,29210,29687,29553,82480,82480,82480,82939,82860,0,29254,29254,29254,29695,29674,78112,87041,0,0,0,0,0,0,0,0,658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1116,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,304,204800,0,0,0,0,0,0,0,0,315392,0,0,0,0,0,0,0,0,692224,0,0,0,0,0,0,0,0,724992,0,0,0,0,0,0,0,0,1007616,0,0,1518,0,1089536,0,0,0,0,0,1175,0,0,0,1179,0,0,0,0,0,0,0,0,676,677,678,0,0,0,682,0,0,0,0,1191,0,0,0,0,0,0,0,0,0,0,0,0,1083,1084,0,0,29210,29887,29210,29210,29210,29210,29210,29210,29210,29210,29904,29210,29210,29210,29210,29210,29210,31323,29210,29210,29210,29210,29210,29210,29210,29210,29210,31165,29210,29210,29210,29210,29210,29210,29911,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29931,82480,82480,82480,82480,82480,83231,82480,82480,82480,82480,82480,83238,82480,82480,82480,82480,0,0,0,0,29254,29254,29254,29254,29254,30774,29254,29254,82480,83267,82480,82480,82480,82480,83272,82480,82480,82480,83279,82480,82480,25938,29874,944,29254,29254,29254,30064,29254,29254,29254,29254,29254,30071,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,0,3034,0,29254,29254,29254,29254,30105,29254,29254,29254,30112,29254,29254,29210,29210,29210,29210,0,0,0,0,0,1494,0,0,0,0,0,0,0,0,0,0,1972,29210,29210,29210,29210,29210,1510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2196,0,0,0,1525,0,0,0,0,0,0,0,0,0,0,1535,0,0,0,0,0,1515,0,0,0,0,0,0,0,0,0,0,1140,0,0,0,0,0,0,0,0,1552,0,0,0,0,0,0,0,0,0,0,0,0,1112,0,0,0,0,1575,0,0,0,0,0,0,0,0,0,0,0,0,1589,0,0,0,0,0,1527,0,0,0,0,0,0,0,0,0,0,1517,0,0,0,0,0,1590,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1602,29210,29210,30333,29210,29210,29210,29210,29210,29210,29210,29210,30342,29210,29210,29210,29210,29210,29938,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29922,29210,29210,29210,29210,29210,29210,29210,30348,29210,29210,29210,29210,29210,29210,29210,29210,30356,30358,29210,29210,29210,29210,29210,971290,29210,29210,29210,29210,30965,29210,29210,29210,29210,29210,29210,31176,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83217,82480,82480,82480,82480,82480,83629,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83638,82480,82480,82480,82480,83655,82480,82480,82480,82480,82480,82480,82480,82480,83664,82480,82480,82480,82480,82480,82480,82480,84451,82480,82480,82480,82480,82480,82480,82480,82480,84262,82480,82480,0,2344,0,0,0,82480,83670,82480,82480,82480,82480,82480,82480,82480,82480,83678,83680,82480,82480,82480,82480,0,0,0,0,29254,29254,29254,30772,29254,29254,29254,29254,29210,29210,82480,29254,0,2873,0,0,2876,0,0,0,29254,29254,29254,29254,30459,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29496,29210,29210,29210,0,29254,29254,30485,29254,29254,29254,29254,29254,29254,29254,29254,30494,29254,29254,29254,29254,29210,29210,82480,29254,2872,0,2874,0,0,0,0,0,0,0,69632,73728,0,367,367,0,0,65536,367,29254,29254,30500,29254,29254,29254,29254,29254,29254,29254,29254,30508,30510,29254,29254,29254,29254,29254,29254,623174,29254,29254,29254,29254,29254,29254,29254,29254,29254,31243,29254,29254,29254,29254,29254,29254,1909,0,0,0,0,0,0,0,1916,0,0,0,0,0,0,0,344,0,402,0,0,0,0,0,402,1924,0,0,0,0,0,0,0,0,0,0,0,0,1930,0,0,0,0,0,344,0,0,0,0,0,0,0,0,0,0,1544,0,0,0,0,0,82480,82480,84e3,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,942640,82480,82480,84010,82480,82480,82480,0,0,0,0,29254,29254,29254,29254,30773,29254,29254,29254,29254,29254,29254,832070,29254,29254,29254,29254,29254,31245,29254,29254,29254,29210,0,0,0,0,0,0,0,2990,0,0,0,29210,305741,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,680474,29210,29210,29210,29210,30817,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30827,29254,29210,82480,31069,29210,84319,82480,31073,29254,2403,2404,0,0,0,0,0,0,0,69632,73728,0,135168,135168,0,0,65536,135168,2185,0,0,2187,0,2188,0,0,0,0,2191,0,0,2194,0,0,0,0,0,373,0,0,0,0,365,0,382,0,348,0,0,2198,0,0,0,0,0,0,0,0,0,0,2209,0,0,0,0,0,0,1528,0,1530,0,0,0,1533,0,0,0,0,0,0,1554,0,1555,0,0,0,1557,0,740,0,0,0,0,0,2215,0,2217,0,0,0,0,0,0,0,0,0,1596,0,0,0,0,0,0,2226,2227,0,0,2230,0,0,2233,0,0,0,0,0,0,0,0,705,0,0,0,0,0,0,0,0,2241,0,0,0,0,0,0,0,0,0,2247,0,0,0,0,0,0,0,1003520,0,0,0,0,0,0,0,0,2246,0,0,0,0,0,0,0,30948,29210,29210,29210,29210,29210,29210,29210,29210,29210,30954,29210,29210,29210,29210,29210,29210,31504,29210,29210,29210,29210,29210,29210,29210,29210,29210,30964,29210,29210,29210,29210,29210,29210,29210,30959,29210,29210,29210,29210,29210,29210,30963,29210,29210,30966,29210,29210,29210,29210,29210,29939,29210,29210,29210,29210,29210,29210,29210,29949,29950,29210,84218,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,29254,82480,82480,82480,82480,82480,82480,84238,82480,82480,82480,82480,84242,82480,82480,82480,82480,0,0,0,0,29254,29254,30771,29254,29254,29254,29254,29254,29254,30085,29254,29254,29254,29254,29254,29254,29254,30099,29254,82480,82480,82480,82480,82480,84248,82480,82480,82480,82480,82480,82480,84253,82480,82480,82480,29254,29254,29254,29254,29254,29254,0,0,0,0,29210,29210,29210,29210,344602,29210,29210,29210,31314,29210,29210,29210,29210,82480,82480,82480,84257,82480,82480,84260,82480,82480,82480,82480,0,0,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,31018,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,942662,29254,29254,29254,29254,29254,31057,29254,29254,31060,29254,29254,29254,29254,31064,29210,29210,29254,29254,29210,30516,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,29254,29254,340550,29254,29254,29254,29254,31463,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,0,0,0,0,0,29210,31066,31067,84316,29210,29210,82480,82480,29254,29254,0,0,2405,0,0,0,0,0,0,0,1048576,0,0,0,0,0,0,0,0,331,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2211,29210,29210,31147,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30969,29210,29210,31158,31159,29210,29210,31162,29210,29210,29210,29210,31166,29210,29210,31168,29210,31170,84433,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84444,84445,82480,82480,84448,82480,82480,82480,82480,84452,82480,82480,84454,82480,84456,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,31464,29254,29254,29254,29254,29254,29210,29210,410182,410138,410160,29210,29210,82480,82480,29254,29254,0,0,0,0,0,0,0,0,0,0,2816,82480,84459,82480,82480,82480,82480,82480,0,0,29254,29254,31218,29254,29254,29254,29254,29210,82480,29210,29210,82480,29254,29210,29254,1,12290,3,78112,31223,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31234,31235,29254,29254,31238,29254,29254,29254,29254,31242,29254,29254,31244,29254,31246,29254,29254,0,2593,0,0,0,0,0,0,0,0,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,29254,31249,29254,29254,29254,29254,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,31534,29254,29254,29254,29254,29254,29254,29667,29254,29254,29254,29254,29210,29210,29210,29210,0,29254,29254,344064,0,0,2595,2596,0,0,0,0,0,0,0,0,0,1608,1609,0,1610,0,0,0,0,0,0,2626,0,0,0,0,2630,0,0,0,0,0,0,0,375,0,378,0,0,0,378,0,0,31319,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31328,29210,29210,29210,30648,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30315,29210,29210,29210,82480,84589,82480,82480,82480,82480,84594,82480,82480,82480,82480,82480,82480,82480,82480,82480,84005,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84603,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,31693,29254,29254,29254,29254,29254,29254,344646,29254,29254,29254,31368,29254,29254,29254,29254,31373,29254,29254,29254,29254,29254,29659,29254,29254,29254,29254,29254,29210,29210,29210,29538,0,2746,0,0,0,0,0,0,0,0,0,0,0,29210,29210,29210,29210,31144,29210,31500,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31510,29210,29210,29210,29210,29937,29210,29210,29210,29210,29943,29210,29210,29210,29210,29210,29210,29210,999962,29210,29210,29210,29210,29210,29210,29210,29210,31432,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,84763,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84773,82480,82480,82480,82480,29254,29254,29254,29254,29254,31646,29254,29254,29254,31650,29254,29254,29210,29210,29210,29210,29254,30833,30834,84083,29210,29210,29210,29210,82480,82480,311856,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,0,0,2096,0,0,31540,29254,29254,29254,29210,29210,82480,29254,0,0,0,0,0,0,0,0,791,29210,29210,29210,29504,29210,29210,29210,2737,0,0,0,0,0,0,0,2886,29210,29210,29210,29210,29210,29210,29210,30652,29210,29210,29210,385562,29210,29210,29210,29210,2939,2940,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,31623,29210,29210,29210,30661,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30655,29210,30657,31625,31626,29210,31627,29210,82480,82480,82480,82480,82480,82480,82480,82480,84884,82480,84886,84887,82480,84888,82480,29254,29254,29254,29254,29254,29254,29254,29254,31649,29254,31651,31652,29254,31653,29254,31655,0,0,0,0,0,0,0,0,0,0,0,29210,29210,31142,29210,29210,31739,29210,29210,82480,82480,82480,84992,84993,82480,82480,29254,29254,29254,31750,31751,29254,29254,29210,30829,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,83205,83206,82480,82480,82480,82480,82480,82480,82480,82480,83220,82480,729,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2239,0,380928,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1520,1521,82480,82480,356912,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83666,82480,82480,82480,356934,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,516678,400,0,0,0,0,378,0,69632,73728,0,0,0,0,423,65536,0,0,0,0,0,1564,0,0,1566,0,0,0,0,0,0,0,658,0,658,0,0,0,0,0,0,423,423,0,0,423,0,443,423,423,466,466,466,473,466,466,466,466,466,466,466,466,473,466,466,466,466,466,466,466,466,480,466,492,492,466,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,535,29220,29220,29220,82489,29264,29220,82489,29220,29220,82489,82489,82489,29220,29220,29220,29220,29264,29264,29264,29264,29264,29264,29264,29264,29264,29220,82489,29220,29220,82489,29264,29220,29264,1,12290,3,78112,0,656,657,0,0,0,0,0,0,0,0,0,0,0,0,0,2737,0,0,0,0,0,0,734,0,0,0,0,734,0,740,0,0,0,0,0,0,296,0,0,0,296,0,297,0,0,0,721,0,734,657,0,0,0,0,0,29210,29210,29497,29210,29210,29210,29511,82804,82480,82480,82480,82818,82480,82480,82480,82480,82480,82480,82480,82480,82480,82847,82480,82480,82480,82480,29254,29254,29254,29254,31645,29254,29254,29254,29254,29254,29254,29254,30043,29254,29254,29254,30052,29254,29254,29254,29254,0,0,29618,29254,29210,82480,29210,29210,29540,29210,29210,82480,82480,82847,82480,82480,29254,29254,29254,29254,29254,29254,29254,467526,29254,29254,29254,29254,29254,31539,0,29254,29254,29661,29254,29254,288,87041,0,0,1028,1032,0,0,1036,1040,1087,0,0,362,362,0,0,0,0,0,0,0,0,0,0,0,1943,0,0,0,0,0,0,1048,0,0,0,1194,294912,0,0,1047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155648,29210,29210,29888,29895,29210,29210,29210,29210,29210,29210,29210,29210,29907,29210,29210,29210,29210,30307,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29906,565786,29210,29210,29210,29210,29210,29935,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29948,29210,29210,29210,29210,549402,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30695,30696,29210,29210,29210,82480,82480,82480,82480,82480,83249,82480,82480,82480,82480,82480,82480,82480,83262,82480,82480,29254,29254,29254,29254,29254,29254,31462,29254,29254,29254,29254,29254,29254,29254,30782,29254,29254,29254,29254,29254,29254,29254,29254,30505,29254,29254,29254,29254,29254,29254,29254,29254,30037,29254,29254,29254,29254,29254,29254,29254,29254,29254,30048,30055,29254,29254,29254,29254,29254,29661,29254,29254,29254,29254,29254,29497,29210,29210,29540,0,29254,29254,29254,30082,29254,29254,29254,29254,29254,29254,29254,30095,29254,29254,29254,29254,29254,29254,30109,30110,29254,29254,29254,30115,29210,29210,30118,0,29254,30048,29888,83215,29210,29935,29210,29210,82480,83262,82480,82480,29254,30095,29254,29254,29210,29210,29210,29210,29254,29254,29210,82480,30836,29210,29210,29210,84086,82480,0,29874,1615,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30300,30301,29210,29210,30320,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31155,29210,82480,82480,82480,83630,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83681,82480,82480,82480,82480,83642,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83263,82480,29254,29254,29254,29254,30460,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30049,29254,29254,29254,29254,29254,29254,30472,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30511,29254,29254,82480,82480,82480,83987,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83997,82480,82480,82480,82480,29254,31643,29254,31644,29254,29254,29254,29254,29254,29254,29254,29254,30044,29254,29254,29254,29254,29254,29254,30058,82480,82480,82480,84001,82480,82480,82480,82480,84004,82480,82480,82480,82480,82480,82480,82480,0,0,29254,31217,29254,29254,29254,29254,29254,29254,30804,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30814,29254,29254,29254,29254,29254,29663,29254,29254,29254,29254,29254,336700,29210,29210,29679,0,29254,30818,29254,29254,29254,29254,30821,29254,29254,29254,29254,29254,29254,29254,29254,29254,30479,29254,29254,700998,29254,29254,29254,0,2213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1548,0,84233,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82854,29254,31033,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30826,29254,29254,0,0,2410,0,0,0,0,0,0,0,0,0,0,0,0,2421,2445,0,0,0,0,2450,0,0,0,0,0,0,0,0,0,2459,29210,31146,29210,29210,29210,29210,29210,29210,31152,29210,29210,29210,29210,29210,29210,29210,31177,29210,82480,82480,82480,82480,82480,82480,84432,82480,82480,82480,82480,82480,82480,84438,82480,82480,82480,82480,82480,82480,82480,82480,82480,84226,82480,82480,84229,84230,82480,82480,82480,82480,82480,82480,82480,84463,82480,0,0,29254,29254,29254,29254,29254,29254,31222,0,0,0,0,0,548864,0,0,0,0,0,0,0,0,0,0,1125,733,0,0,0,1078,0,2624,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1572,1573,549446,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,928079,0,0,0,2736,0,0,0,0,0,0,0,0,0,0,0,0,1126,0,0,0,82480,82480,82480,84967,82480,84968,82480,82480,82480,29254,29254,29254,29254,29254,29254,31726,29254,31727,29254,29254,29254,29210,0,0,0,0,0,0,31736,29210,29210,29210,29210,30308,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30357,29210,29210,29210,29210,29210,29210,29210,84990,82480,82480,82480,82480,82480,82480,31748,29254,29254,29254,29254,29254,29210,31391,29254,29210,82480,29210,29210,82480,82480,29254,29254,0,0,0,0,0,2408,0,29210,85022,82480,82480,82480,31776,29254,29254,29254,0,0,29210,29210,82480,82480,29254,29254,0,0,0,0,0,2812,0,0,0,0,0,0,0,69632,73728,0,0,0,371,0,65536,0,467,467,467,451,451,467,451,451,451,451,451,451,451,451,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,29221,29221,29221,82490,29265,29221,82490,29221,29221,82490,82490,82490,29221,29221,29221,29221,29265,29265,29265,29265,29265,29265,29265,29265,29265,29221,82490,29221,29221,82490,29265,29221,29265,1,12290,3,78112,0,0,0,658,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29512,29210,29210,29522,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,83953,82480,82480,82480,82480,82480,82480,82480,82480,82819,82480,82480,82829,82480,82480,82480,82480,82480,82480,82480,82480,83963,82480,82480,434736,82480,82480,82480,83970,0,1117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1871,0,0,0,1132,0,0,0,0,0,0,0,0,0,0,0,0,0,2744,0,0,0,0,1146,0,1148,0,0,0,0,0,0,0,0,0,0,0,2192,0,0,0,0,29210,29210,29889,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31512,29210,82480,82480,82480,83247,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83264,82480,82480,82480,82480,83270,82480,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,29254,30080,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30097,29254,29254,29210,29210,29210,29210,29254,30455,30303,83625,29210,29210,29210,29210,82480,82480,29254,29254,29254,31530,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30114,29210,29210,29210,29210,0,29254,29254,30103,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,0,0,0,0,1580,0,0,0,0,0,0,1587,0,0,0,0,0,0,2425,0,0,0,0,0,0,0,0,0,1064,0,0,0,0,0,0,29254,30049,29889,83216,29210,29210,30125,29210,82480,82480,83377,82480,29254,29254,30133,29254,29254,29210,82480,30123,29210,29210,30126,83375,82480,82480,83378,30131,29254,29254,30134,87041,0,1465,0,0,0,1471,0,0,0,1477,0,0,0,1483,0,0,0,0,0,1593,0,0,1595,0,0,0,1599,0,0,0,0,0,0,1165,0,1055,0,0,0,0,0,0,0,296,33405,0,0,300,49793,0,0,0,0,0,577536,0,0,679936,0,0,0,0,0,0,0,0,0,0,1139,0,0,0,0,0,30302,29210,29210,29210,29210,29210,29210,29210,29210,30313,29210,29210,29210,29210,29210,29210,29532,29210,29210,29210,29210,29549,29210,29210,29210,82480,30454,29254,29254,29254,29254,29254,29254,29254,29254,30465,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,2737,0,0,0,0,1935,1936,0,0,0,0,0,1941,0,0,0,0,0,0,0,1582,0,0,0,0,0,0,0,0,331,0,331,331,0,0,0,0,29210,29210,30660,29210,29210,29210,29210,30665,29210,29210,29210,29210,29210,29210,29210,29210,31506,31507,31508,29210,29210,29210,29210,29210,29210,30687,29210,29210,29210,29210,30692,29210,29210,29210,29210,29210,29210,29210,29210,29210,30704,291376,82480,82480,82480,82480,82480,82480,83972,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83667,82480,83999,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84009,82480,82480,82480,82480,84591,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83280,82480,25938,29874,944,82480,82480,82480,82480,82480,82480,84836,29254,29254,29254,29254,29254,29254,29254,29254,29254,30811,29254,29254,29254,29254,30816,29254,29254,29254,29254,29254,29254,31603,29210,0,0,0,2935,0,0,2737,0,0,0,0,0,0,0,0,0,0,0,0,0,29210,29210,29210,29210,29210,29254,995866,0,0,0,0,0,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,83615,82480,82480,82480,82480,82480,82480,82480,82480,82480,84263,82480,0,0,0,2345,0,385,387,337,0,0,0,0,0,0,336,0,0,337,0,0,0,0,0,0,1606,0,0,0,0,0,0,0,0,0,1152,0,0,0,0,0,0,0,0,0,384,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1598,0,0,0,0,0,0,0,1611,0,1591,0,0,432,336,0,0,444,0,0,468,468,468,468,468,468,468,29222,29222,29222,82491,29266,29222,82491,29222,29222,478,468,468,468,497,474,497,497,497,497,497,497,497,497,468,468,474,468,468,468,468,468,468,468,468,468,468,478,468,479,478,468,468,468,468,82491,82491,82491,29222,29222,29222,29222,29266,29266,29266,29266,29266,29266,29266,29266,29266,29222,82491,29222,29222,82491,29266,29222,29266,1,12290,3,78112,0,0,0,0,659,0,0,634880,662,0,0,0,0,0,0,0,412,412,0,0,0,0,0,412,0,0,0,0,811008,0,0,0,0,0,0,0,0,0,0,0,0,1141,0,0,0,0,0,685,0,0,0,0,0,0,362,362,362,0,0,0,0,0,0,296,0,297,0,300,0,301,0,0,0,0,0,0,0,717,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,0,0,0,659,0,779,0,0,0,0,0,0,0,783,0,0,0,0,0,0,303,0,0,0,0,0,0,0,0,0,362,0,0,122880,122880,0,0,789,0,0,0,0,0,792,0,0,0,0,698,0,0,0,0,0,0,0,0,707,0,709,0,0,0,0,0,795,0,792,783,0,0,797,0,662,0,779,0,0,0,0,0,0,1902,0,0,0,0,0,0,0,0,0,669,0,0,0,0,0,728,0,0,659,812,0,779,0,0,0,0,0,817,0,0,0,0,0,0,303,204800,204800,0,205103,204800,1,12290,3,0,0,0,783,659,635697,0,0,0,0,29210,29210,29498,29210,29210,29210,29513,29210,29210,635731,29210,29210,29210,29531,29210,29210,29210,29210,29548,29210,29210,29210,82480,430640,84991,82480,82480,82480,82480,29254,430662,31749,29254,29254,29254,82805,82480,82480,82480,82820,82480,82480,635790,82480,82480,82480,82838,82480,82480,82480,82480,0,0,0,2097,29254,29254,29254,29254,29254,29254,29254,29254,30809,30810,29254,29254,29254,29254,29254,29254,938566,82855,82480,82480,82480,0,29254,29254,29619,29254,29254,29254,29634,29254,29254,635852,29254,29254,29254,29254,29254,30475,29254,29254,29254,29254,29254,29254,29254,29254,30482,29254,29254,29254,29254,29254,30488,30489,29254,29254,29254,29254,29254,29254,29254,29254,29254,29673,29254,29210,29210,29210,29210,0,29254,29254,29652,29254,29254,29254,29254,29669,29254,29254,29254,29498,29210,29531,29210,0,0,0,0,0,1889,0,0,0,0,0,0,0,0,0,0,2429,0,0,0,0,0,0,0,29619,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,83211,82480,82480,82480,82480,82480,1129,0,0,0,0,0,0,1050,0,0,0,0,0,0,0,1052,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1884,1885,1173,0,0,0,0,0,0,0,0,1180,0,0,0,0,0,1088,0,362,362,0,1091,0,0,0,0,0,0,0,0,0,1880,0,0,0,0,0,0,0,0,1190,0,0,0,0,0,0,0,1173,0,0,0,1198,0,0,0,0,0,1901,0,0,0,0,0,0,0,1906,0,0,0,0,0,441,0,0,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,29210,29210,29890,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29909,29210,29210,29210,30674,29210,30675,29210,30678,29210,29210,29210,29210,29210,829403,29210,29210,29210,29210,705050,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,832026,29210,29210,29210,29210,29210,31169,29210,29254,30120,30121,83370,29210,30124,29210,29210,82480,83376,82480,82480,29254,30132,29254,29254,29210,29210,29210,29210,29254,30520,30521,83770,29210,30524,29210,29210,82480,83776,0,0,1488,0,0,0,0,0,0,0,0,0,0,0,0,0,2878,0,0,0,0,1561,0,0,0,0,0,0,0,0,0,0,0,0,0,20480,0,0,0,0,0,1605,0,0,0,0,0,0,0,0,0,0,0,0,1155,0,0,0,0,29874,0,29210,29210,29210,29210,29210,29210,29210,30296,29210,29210,29210,29210,29210,29210,31572,29210,84822,82480,82480,82480,84826,82480,82480,82480,82480,82480,83628,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83967,82480,82480,82480,29254,29254,29254,30458,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31231,29254,29254,29254,0,1948,0,0,0,0,0,0,0,0,0,0,1044480,0,0,0,0,0,0,1926,0,0,0,0,0,0,0,0,0,1167,0,0,0,0,311296,0,1045018,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,83955,82480,82480,29254,29254,401990,29254,29254,29254,461613,29254,29254,29254,29254,29254,29254,29254,30795,29254,29254,29254,29254,29254,29254,29254,29254,31369,29254,29254,29254,29254,29254,29254,29254,0,0,0,0,2176,0,2178,0,0,2181,0,0,0,0,819200,0,0,0,0,0,1914,0,0,0,0,0,0,0,0,0,0,722,0,0,0,0,0,0,0,905216,2186,0,0,0,0,0,0,0,0,0,2193,0,0,0,0,0,0,1938,0,0,0,0,0,0,0,0,0,1917,0,0,0,0,0,0,0,0,0,2242,0,0,2245,0,0,0,0,0,0,0,2249,0,0,0,0,0,1937,0,0,0,0,0,0,0,0,0,0,1881,0,0,0,0,0,29210,30935,30936,29210,29210,29210,29210,30940,29210,30942,29210,29210,29210,30945,29210,29210,29210,29210,639514,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31505,29210,29210,29210,29210,29210,29210,29210,29210,520730,29210,29210,29210,29210,29210,29210,29210,907502,29210,29210,29210,30962,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30944,29210,29210,29210,29210,82480,82480,84234,82480,84236,82480,82480,82480,84239,82480,82480,82480,82480,82480,84243,82480,82480,82480,82480,31642,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,1143,82480,82480,82480,82480,819760,82480,82480,82480,82480,82480,82480,907548,82480,82480,82480,84256,29254,29254,29254,31034,29254,31036,29254,29254,29254,31039,29254,29254,29254,29254,29254,31043,29254,29254,29254,29254,29254,819782,29254,29254,29254,29254,29254,29254,907596,29254,29254,29254,29254,29254,29664,29254,29254,29254,29254,29254,29210,29210,29210,29543,0,31056,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29254,29254,29254,29254,29254,30502,29254,29254,29254,29254,30507,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,29210,29210,29210,29210,29210,29210,31621,29210,29210,29210,0,2423,1081344,573440,0,0,0,0,0,0,0,0,0,0,0,0,1497,0,0,0,2433,0,0,0,0,0,2436,0,2438,0,0,0,2441,0,0,0,0,0,0,1953,1954,0,1956,0,0,0,1954,0,0,0,2446,0,0,2449,0,0,0,0,0,0,0,0,0,0,0,2742,0,0,2745,0,2460,0,0,0,0,0,0,0,0,0,0,31140,29210,29210,29210,29210,29210,30309,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29944,29210,29210,29210,29210,29210,29210,29210,31172,29210,29210,31175,29210,29210,1081882,84426,82480,82480,82480,82480,82480,82480,82480,83977,82480,82480,82480,82480,82480,83981,82480,83982,84458,82480,82480,84461,82480,82480,1081904,0,0,31216,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,0,2737,2937,0,31248,29254,29254,31251,29254,29254,1081926,29210,29210,31256,31257,84506,29210,29210,82480,82480,29254,30841,29254,29254,1863,0,1865,0,1867,0,1869,0,0,0,0,0,0,1178,0,0,0,0,0,0,0,0,0,943,943,943,943,943,943,943,943,943,0,0,0,598016,0,0,0,0,0,0,0,0,0,0,0,0,1546,0,0,0,2634,0,0,29210,29210,31310,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30943,29210,29210,29210,29210,29210,82480,82480,82480,84602,82480,84604,82480,82480,82480,82480,82480,82480,82480,82480,82480,29254,31590,29254,31592,29254,29254,29254,29254,29254,29254,31364,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,488006,29254,29254,29254,31376,29254,598598,29254,29254,29254,29254,29254,31381,29254,31383,29254,29254,29254,29254,29254,29254,30462,29254,29254,29254,504390,29254,29254,29254,30469,29254,0,389120,0,2728,0,0,0,581632,0,0,0,0,0,0,0,0,1079,0,0,0,0,0,0,0,389658,31425,29210,29210,29210,31429,31430,29210,29210,29210,582170,29210,29210,29210,29210,31436,84695,84696,82480,82480,82480,582192,82480,82480,82480,82480,84702,82480,82480,82480,82480,82480,82480,82480,84606,84608,82480,82480,84610,82480,1069616,1077808,29254,582214,29254,29254,29254,29254,31472,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,29254,29254,29210,82480,29210,29210,29210,30526,82480,82480,2737,2818,0,0,0,0,0,737280,0,0,0,0,0,0,29210,29210,406042,29210,29210,29210,29210,31622,29210,29210,2737,0,2880,0,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,30932,29210,29210,29210,31568,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,1110576,82480,84831,82480,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30098,29254,31598,29254,29254,29254,29254,29254,29210,0,405504,0,0,913408,0,2737,0,0,0,0,0,0,0,0,0,0,0,0,0,31498,29210,29210,29210,913946,29210,29210,82480,82480,406064,82480,82480,82480,82480,84883,82480,82480,82480,29254,29254,29254,29254,29254,29254,0,0,0,0,29210,561690,877082,82480,913968,82480,82480,29254,29254,406086,29254,29254,29254,29254,31648,29254,29254,29254,29254,29254,29254,30780,29254,29254,434758,29254,29254,29254,30787,29254,29254,913990,29254,29254,29210,0,0,0,2987,0,0,2989,0,0,0,0,29210,29210,29210,30689,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30955,29210,29210,29210,82480,82480,82480,82480,82480,82480,84935,82480,84937,29254,29254,29254,29254,29254,29254,29254,30069,29254,29254,29254,29254,29254,29254,29254,29254,31049,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31699,29254,31701,29210,0,0,0,0,0,0,0,0,0,2219,0,0,0,0,0,0,85012,82480,82480,29254,29254,31767,31768,29254,29254,0,0,0,0,29210,29210,29210,29210,30322,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31154,29210,29210,31156,889414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172032,339,340,341,342,343,0,0,0,0,0,0,0,0,0,0,0,41692,46182,0,0,0,0,0,0,388,0,0,0,0,0,0,0,0,0,0,0,0,1570,0,0,0,342,342,0,343,342,0,341,342,452,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,484,493,493,501,493,503,493,493,503,503,493,503,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,29223,29223,29223,82492,29267,29223,82492,29223,29223,82492,82492,82492,29278,29278,29278,29223,29267,29267,29267,29267,29267,29267,29267,29267,29267,29223,82492,29223,29223,82492,29267,29223,29267,1,12290,3,78112,0,0,0,643,0,0,0,0,647,648,649,650,651,652,653,0,0,0,0,0,1952,0,0,0,0,0,0,0,0,0,0,2207,2208,0,0,0,0,0,1019904,0,0,0,0,0,0,691,362,362,362,0,0,0,0,0,0,328,0,0,0,0,0,0,0,328,0,0,69632,73728,0,416,416,0,0,65536,416,713,0,715,0,0,0,0,0,0,0,0,0,725,0,0,0,0,0,0,2189,0,0,0,0,0,0,0,0,0,2740,0,0,0,0,0,0,0,643,744,745,746,0,0,0,0,0,752,753,0,755,756,670,671,0,0,0,0,0,675,0,0,0,0,0,0,0,0,1493,1494,0,0,0,0,0,0,0,0,778,0,0,0,0,0,0,0,0,0,785,0,0,0,0,0,0,2203,0,0,2206,0,0,0,2210,0,0,0,0,790,0,0,1019904,0,0,667,0,1019904,0,793,670,715,0,0,0,0,0,1962,0,0,0,0,0,0,0,0,0,0,1026,1030,0,0,1034,1038,1019904,794,0,0,0,0,753,0,0,0,0,0,0,0,0,746,802,803,0,0,0,0,0,0,746,0,0,806,691,0,0,0,0,0,0,2232,0,0,0,0,2237,0,0,0,0,0,0,0,528384,0,528384,0,0,0,0,0,0,0,1607,0,0,0,0,0,0,0,0,106496,0,106496,0,0,0,0,106496,811,0,0,0,813,0,0,0,1019904,691,0,0,1019904,811,811,0,0,0,0,0,2177,0,0,0,0,0,0,0,0,0,0,98304,0,0,0,53248,0,0,29517,29210,29210,29527,29528,29530,29210,29210,29210,29541,1020442,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,84970,82480,29254,29254,29254,29254,29254,29254,29254,30822,29254,29254,29254,29254,29254,29254,29254,29254,1045062,29254,29254,29254,29254,29254,29254,29254,82480,82810,82814,82817,82480,82824,82480,82480,82834,82835,82837,82480,82480,82480,82848,1020464,29649,29651,29254,29254,29254,29662,1020486,29254,29254,29254,29254,29210,29210,29210,29541,0,0,0,0,0,2216,0,0,0,0,0,0,0,0,0,0,1967,0,0,0,0,0,0,0,29254,29682,29683,82932,29503,29210,29541,1020442,29688,82810,82480,82848,1020464,82940,0,29624,29254,29662,1020486,29696,78112,87041,0,0,0,0,0,0,0,0,1542,0,0,0,0,0,0,0,0,0,0,1059,0,0,0,1063,0,0,1065,0,0,0,0,0,0,0,69632,73728,0,0,0,0,422,65536,0,0,0,0,362,362,1090,0,0,0,0,0,0,0,0,0,0,1495,1496,0,0,0,0,1189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245760,29210,29934,29210,29210,29210,29210,29210,29210,29210,29210,29210,29946,29210,29210,29210,29210,29210,30323,29210,29210,29210,29210,29210,29210,29210,29210,30330,29210,82480,83245,82480,82480,82480,82480,82480,82480,82480,83254,82480,82480,83261,82480,82480,82480,29254,29254,29254,29254,29254,29254,0,0,0,0,31772,29210,29210,29254,29254,29254,29254,30106,29254,29254,29254,29254,29254,29254,29210,30116,29210,29210,0,0,0,0,0,2231,0,0,0,0,0,0,0,2238,0,0,0,0,0,383,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,1502,671744,0,0,0,0,0,0,0,0,0,0,0,106496,0,0,0,0,0,0,29874,0,29210,30290,29210,29210,29210,29210,30295,29210,29210,29210,29210,29210,29210,29918,29210,29210,29210,29210,29210,29210,29210,29927,29210,82480,82480,83643,82480,82480,82480,83646,82480,82480,672304,82480,82480,82480,82480,82480,82480,82480,84249,82480,82480,82480,82480,82480,82480,82480,82480,83252,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,30473,29254,29254,29254,30476,29254,29254,672326,29254,29254,29254,29254,29254,29254,29668,29254,29254,29254,29254,29210,29210,29210,29210,0,0,1032,0,0,0,1868,0,1036,0,0,0,1870,0,1040,0,0,0,0,0,435,0,0,0,0,0,0,0,0,0,0,346,0,0,0,0,0,0,0,1887,0,0,0,0,0,0,0,0,0,0,0,0,0,249856,0,0,1898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,815104,0,0,0,1961,0,0,0,0,0,0,0,0,0,0,0,0,1896,0,0,0,82480,82480,82480,82480,82480,82480,83989,82480,82480,82480,82480,82480,82480,82480,82480,82480,84240,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,30806,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30050,29254,29254,29254,29254,0,0,0,2214,0,0,0,0,0,0,0,0,0,0,0,0,1944,0,1946,1947,0,0,2251,0,1615,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31153,29210,29210,29210,29210,82480,84446,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83683,82480,29254,31236,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,688666,29210,29210,84588,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84598,82480,82480,82480,29254,29254,29254,29254,29254,29254,0,0,3099,0,29210,29210,29210,29210,30662,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,305768,82480,82480,82480,82480,82480,29254,29254,31377,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,705094,29254,29254,0,0,2727,0,0,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,29210,29210,29210,31502,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30682,29210,29210,29210,84761,82480,82480,82480,82480,84765,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84769,84770,84771,82480,82480,82480,2737,2879,0,0,0,0,0,0,0,29210,29210,31561,29210,29210,29210,31565,82480,82480,82480,82480,84834,82480,82480,29254,29254,31591,29254,29254,29254,31595,29254,29254,29210,29210,29210,29210,29254,30782,30658,83965,29210,29210,29210,29210,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,31535,29254,29254,29254,29254,29254,29254,31367,29254,29254,29254,29254,29254,29254,29254,29254,29254,31062,29254,29254,29210,29210,29210,29254,29254,29254,29254,31601,29254,29254,29210,0,0,0,0,0,0,2737,0,2938,386,0,0,0,390,386,0,0,0,0,0,0,0,0,0,0,1556,0,0,0,0,0,0,0,0,402,0,344,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2244,0,0,0,0,0,0,0,2248,0,0,0,0,0,660,0,0,0,0,0,0,0,0,0,0,1918,0,1920,0,0,0,0,0,433,0,0,440,0,0,0,0,0,0,0,0,0,0,1597,0,0,0,0,0,519,519,519,519,0,0,0,0,0,0,0,0,519,519,519,519,519,519,519,29224,29224,29224,82493,29268,29224,82493,29224,29224,82493,82493,82493,29224,29224,29224,29224,29268,29268,29268,29268,29268,29268,29268,29268,29268,29224,82493,29224,29288,82541,29268,29288,29299,1,12290,3,78112,0,0,0,0,672,0,0,0,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,672,743,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,962560,82856,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30051,29254,29254,29254,29254,29254,29254,29653,29254,29254,29254,29254,29670,29254,29254,29254,29210,29210,29532,29210,0,0,0,0,0,2411,0,0,0,2415,0,0,0,0,0,0,0,1565,0,0,0,0,0,0,0,0,0,327680,0,0,0,0,0,0,0,0,29681,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,83619,82480,82480,82480,82480,82480,0,1058,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1907,1908,0,0,0,1119,0,0,0,0,0,0,0,0,0,0,1128,0,0,0,0,0,2435,0,0,0,0,2440,0,0,0,0,0,0,0,114688,0,241664,258048,0,0,0,0,0,0,0,25157,25157,25157,25157,25157,25157,25157,25157,25157,0,0,1133,0,0,0,0,1053,0,0,0,0,0,0,0,0,0,0,0,0,0,328454,0,0,0,0,0,1162,0,0,0,0,0,0,0,0,0,0,0,0,1968,0,0,0,29210,29210,29891,29210,29210,29210,29210,29900,29210,29210,29210,29210,29210,29210,29210,29210,82480,84823,82480,84825,82480,82480,82480,82480,29210,29912,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29929,82480,82480,83227,82480,82480,82480,82480,82480,82480,82480,82480,82480,83239,82480,82480,82480,29254,29254,29254,29254,29254,29254,3098,0,0,0,29210,29210,29210,29210,30690,29210,29210,29210,29210,30694,29210,29210,29210,29210,30697,29210,82480,82480,82480,82480,82480,83271,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,30060,29254,29254,29254,29254,29254,29254,29254,29254,29254,30072,29254,29254,29254,29254,29254,29254,30042,29254,29254,29254,29254,29254,30054,29254,29254,29254,29254,29254,29254,30104,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,0,0,0,0,2627,2628,0,0,0,0,409600,0,0,0,0,0,0,661,0,0,663,0,0,0,0,0,0,0,2413,0,0,0,2417,0,0,0,0,30119,30051,29891,83218,29210,29210,29210,29210,82480,82480,82480,82480,29254,29254,29254,29254,0,0,29210,29210,82480,82480,29254,87041,0,1466,0,0,0,1472,0,0,0,1478,0,0,0,1484,0,0,0,0,0,2730,0,0,757760,0,0,0,0,0,0,946176,0,0,0,1538,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,958464,0,0,0,0,0,0,0,0,1134,0,0,0,0,0,0,0,0,0,0,0,671744,0,0,0,0,0,0,0,0,1479,0,0,0,0,0,1485,0,0,0,0,0,0,0,69632,73728,0,0,0,418,0,65536,0,30672,29210,610842,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,942618,29210,82480,82480,82480,82480,82480,82480,83976,82480,82480,82480,83979,82480,610864,82480,82480,82480,29277,29277,29277,29210,29254,29254,29254,29254,29254,29254,29254,29254,29254,30113,29254,29210,29210,29210,29210,0,29254,29254,29254,29254,30793,29254,29254,29254,30796,29254,610886,29254,29254,29254,29254,29254,29254,30068,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31230,29254,29254,31232,29254,29254,0,1972,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31317,82480,82480,82480,84246,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84441,82480,82480,82480,29254,29254,29254,29254,31046,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30074,29254,30077,29254,29254,0,2635,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29552,29210,82480,2737,0,0,0,0,2883,0,2885,0,29210,31560,29210,31562,29210,29210,29210,29210,30938,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31167,29210,29210,29210,29210,0,0,0,2942,0,892928,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31325,31326,29210,29210,29210,29210,0,0,528384,0,0,0,0,0,0,0,0,0,0,0,0,0,335872,0,0,0,0,0,528384,0,0,0,0,0,29210,29210,29210,29210,29210,29210,528922,82480,82480,82480,82480,528944,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83637,82480,82480,82480,82480,82480,82480,82480,82861,0,29254,29254,29254,29254,29254,29254,528966,29254,29254,29254,29254,29254,29254,30808,29254,29254,29254,29254,29254,29254,29254,29254,29254,30823,29254,30825,29254,29254,29254,29254,0,29254,29254,29254,29254,29254,78112,87041,0,0,1029,1033,0,0,1037,1041,0,29874,1616,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29908,29210,29210,82480,82480,82480,84698,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,725552,82480,82480,82480,345,345,0,347,345,0,0,345,345,0,0,0,0,346,0,0,0,0,0,438,0,0,329,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,0,0,0,345,345,347,345,345,345,345,345,345,510,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,29225,29225,29225,82494,29269,29225,82494,29225,29225,82494,82494,82494,29225,29225,29225,29225,29269,29269,29269,29269,29269,29269,29269,29269,29269,29225,82494,29225,29225,82494,29269,29225,29269,1,12290,3,78112,0,714,0,716,0,0,0,0,0,0,0,0,0,0,0,0,2222,0,0,0,0,731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1922,0,758,0,0,0,763,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,2418,2419,0,0,0,0,0,0,823296,791,0,0,0,0,791,0,0,0,0,0,0,0,69632,73728,0,417,417,0,0,65536,417,791,0,0,823296,0,0,0,0,0,747,0,0,824094,0,0,0,0,0,0,2465,0,0,0,0,29210,31141,29210,29210,29210,29210,30649,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30658,0,0,0,0,823970,0,824094,0,660,0,0,0,0,0,0,0,657,0,657,0,0,0,0,808,0,0,0,0,0,0,823969,0,0,0,0,0,0,791,0,0,0,0,0,0,2614,0,0,0,0,0,0,0,0,0,362,297,0,0,0,0,0,29210,29520,29210,29210,29210,29210,824157,29535,29210,29210,29545,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,447024,82480,82480,82480,82480,82480,82480,82480,82480,83275,82480,82480,82480,82480,25938,29874,944,82480,82811,82480,82480,82480,82480,82827,82480,82480,82480,82480,824216,82842,82480,82480,82852,29254,29254,824278,29656,29254,29254,29666,29254,29254,29254,29254,29676,29210,824157,29210,0,0,0,0,0,2748,0,0,0,0,0,0,29210,29210,29210,29210,31619,29210,29210,29210,29210,29210,0,0,29254,29254,29210,82480,29504,29535,29210,29545,29210,82811,82842,82480,82852,82480,82480,82480,82480,82480,82480,82480,467504,82480,82480,82480,82480,82480,84772,82480,82480,29254,29254,29254,29254,1863,0,1865,0,1867,0,1869,0,0,0,0,0,0,823,0,0,0,0,0,0,0,0,0,0,0,0,0,29625,29656,29254,29666,29254,78112,87041,0,0,0,0,0,0,0,0,1879,0,0,0,0,0,0,0,0,0,1089,362,362,0,0,1092,0,0,0,1095,0,1097,0,1099,0,0,0,0,1120,0,0,0,0,1124,0,0,0,0,0,0,0,1903,0,0,1904,0,0,0,0,0,0,0,0,0,1124,29874,823,29210,29210,29210,29210,29210,29210,29210,29210,29210,31675,29210,31677,82480,82480,82480,82480,83266,82480,82480,82480,82480,82480,82480,82480,83276,83277,82480,82480,82480,25938,29874,944,29254,29254,29254,29254,30066,565830,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30812,29254,29254,29254,29254,29254,0,1523,0,0,0,0,0,1529,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1926,0,0,0,0,0,593920,0,0,0,0,0,0,0,0,0,0,0,397312,0,0,0,0,0,29874,0,29210,29210,29210,29210,30293,29210,29210,29210,29210,29210,29210,29210,29210,356890,29210,29210,29210,29210,29210,29210,29210,29210,30347,29210,29210,29210,29210,29210,29210,29210,30354,29210,29210,29210,29210,30360,29210,29210,29210,30937,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30670,29210,29210,83669,82480,82480,82480,82480,82480,82480,82480,83676,82480,82480,82480,82480,83682,82480,82480,29254,31529,29254,29254,31531,29254,29254,29254,29254,29254,29254,29254,29254,29254,31229,29254,29254,29254,29254,29254,29254,29254,30499,29254,29254,29254,29254,29254,29254,29254,30506,29254,29254,29254,29254,30512,29254,29254,29254,29254,29254,30779,29254,30781,29254,29254,29254,29254,29254,29254,30788,29254,29210,0,0,0,0,0,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,83208,82480,82480,82480,83212,82480,82480,83223,82480,0,0,0,827392,1888,0,1890,1891,0,0,0,0,0,0,0,0,1955,0,0,0,0,0,0,0,0,1910,0,1912,0,0,0,0,0,0,0,1919,0,0,0,0,0,0,345,0,0,0,0,0,0,0,0,0,2250,0,29210,29210,29210,29210,29210,290816,0,1949,0,0,0,0,0,0,0,1957,0,0,0,1957,0,0,0,0,0,29874,823,29210,29210,29210,29210,29210,29210,29210,29210,29210,29543,29210,29210,29210,29210,29210,82480,0,1960,829304,0,0,0,1963,0,0,0,0,0,0,0,0,0,2453,0,0,0,0,0,0,291354,29210,29210,29210,29210,29210,30651,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,344624,82480,82480,83958,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84244,82480,83985,82480,82480,82480,82480,82480,829462,82480,82480,82480,82480,82480,83996,82480,82480,29254,332358,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,559853,82480,82480,82480,84011,0,0,0,0,291398,29254,29254,29254,29254,29254,30775,29254,29254,29254,29254,29254,30794,29254,29254,29254,29254,29254,30798,29254,30799,29254,30802,29254,29254,29254,29254,29254,829527,29254,29254,29254,29254,29254,30813,29254,29254,29254,29254,29254,29254,31037,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31370,29254,29254,29254,29254,29254,29254,30828,29210,29210,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,30531,29254,29254,29254,0,1863,0,0,0,0,0,1865,0,0,0,0,0,0,684032,0,0,0,0,0,0,0,0,0,1893,1894,0,0,0,0,0,0,0,2174,2175,0,0,0,0,0,0,0,0,0,0,0,0,2430,0,0,0,0,0,0,2229,0,0,0,0,0,0,0,0,0,0,0,0,2620,0,0,0,31032,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31372,29254,29254,29254,31044,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31384,29254,31386,29254,31145,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30345,82480,82480,84460,82480,82480,82480,82480,0,0,29254,29254,29254,29254,31220,31221,29254,29254,29254,29254,29254,31058,29254,29254,29254,29254,29254,29254,29210,29210,29210,29254,29254,29254,29254,29254,31240,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30047,29254,29254,29254,29254,29254,29254,29254,31250,29254,29254,29254,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,30840,29254,29254,29254,0,0,0,0,0,0,0,0,0,0,835584,0,0,0,305795,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,639558,29254,29254,29254,2735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2195,0,2737,0,0,0,2882,0,0,0,0,31559,29210,29210,29210,31563,29210,29210,29210,29210,1073690,29210,29210,1094170,1098266,29210,82480,82480,82480,82480,82480,82480,82480,83647,83648,83650,82480,82480,82480,82480,83653,788166,82480,82480,82480,82480,82480,84835,82480,31589,29254,29254,29254,31593,29254,29254,29254,29254,29254,29254,31048,29254,29254,29254,29254,29254,29254,31053,29254,29254,29254,29254,29254,29254,31602,29254,29210,0,0,0,0,0,0,2737,0,0,0,0,0,0,0,0,0,0,0,2825,0,29210,29210,29210,29210,29210,31670,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,84880,82480,82480,82480,82480,82480,82480,84930,82480,82480,82480,82480,82480,82480,82480,82480,29254,29254,29254,29254,31694,29254,29254,29210,29210,29210,30348,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,29254,29254,29254,29254,1863,0,1865,0,1867,0,1869,0,0,2171,82480,85013,82480,29254,29254,29254,29254,31769,29254,0,442368,0,851968,29210,29210,29210,29210,30950,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,664090,29210,29210,29210,29210,365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2432,0,0,0,0,0,391,392,0,393,0,0,0,0,0,393,0,0,0,0,0,673,674,0,0,0,0,0,0,0,0,0,2439,0,0,0,0,0,0,398,0,0,0,0,0,365,373,401,0,0,0,0,0,365,0,0,393,0,0,0,0,348,0,0,365,0,393,0,406,408,0,0,365,373,0,69632,73728,0,0,0,0,424,65536,0,0,0,0,0,29874,823,29210,29210,29210,29210,29210,29210,29210,29210,29884,424,424,434,0,424,0,408,424,453,0,0,0,0,0,0,0,704,0,0,0,708,0,0,711,0,0,406,0,494,494,0,494,494,494,494,494,494,494,494,520,520,520,520,453,453,453,528,453,529,453,453,520,534,520,520,520,520,536,29226,29226,29226,82495,29270,29226,82495,29226,29226,82495,82495,82495,29279,29279,29279,29226,29270,29270,29270,29270,29270,29270,29270,29270,29270,29226,82495,29226,29289,82542,29270,29289,29300,1,12290,3,78112,327680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2443,0,0,0,0,686,0,0,0,0,0,362,362,362,0,0,0,0,0,0,345,346,347,0,0,0,0,0,0,0,646,0,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,675840,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2611,0,0,0,675840,0,0,328454,0,0,0,0,675840,0,0,0,0,0,0,0,675840,0,0,0,0,0,0,328454,0,675840,0,0,0,0,29210,29210,328507,29210,29210,29210,29210,29210,30336,30337,29210,29210,29210,29210,29210,29210,29210,29210,29210,30680,29210,29210,29210,29210,29210,29210,29210,29210,676378,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,84587,82480,328566,82480,82480,82480,82480,82480,82480,676400,82480,82480,82480,82480,82480,82480,82480,82480,760540,82480,82480,82480,82480,82480,82480,82480,0,0,328628,29254,29210,82480,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,83618,82480,82480,82480,82480,82480,82480,0,1042,0,1044,0,0,0,0,0,0,0,0,0,0,0,0,31423,29210,29210,31424,1057,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24576,944,0,0,1073,0,0,0,0,0,0,0,0,0,0,0,0,0,1064960,0,0,0,0,0,362,362,0,0,0,0,0,0,0,0,0,1098,0,0,0,0,0,29874,823,29210,29210,29210,29210,29210,29210,29210,29883,29210,29210,29210,30949,29210,29210,29210,29210,29210,819738,29210,29210,29210,29210,29210,29210,29898,29210,29210,29902,29210,29210,29210,29210,29210,29210,29210,750106,29210,29210,30953,29210,29210,29210,897562,29210,0,0,0,0,1104,0,1106,0,0,0,0,0,0,0,0,0,2617,0,0,0,0,0,0,0,0,0,0,1176,0,0,0,0,0,1176,1183,0,0,0,0,0,0,445,0,0,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,29228,29228,29228,82497,29272,29228,82497,29228,29228,1176,1200,1201,0,0,29874,823,29210,29210,29210,29210,29210,29881,29210,29210,29210,29210,31148,29210,29210,31151,29210,29210,29210,29210,29210,29210,29210,29210,29942,29210,29210,29210,29210,29210,29210,29951,29885,29210,29210,29896,29210,29210,29899,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,84429,82480,82480,82480,29210,29210,29914,29210,29917,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,377370,29210,29210,29210,29210,29210,82480,83226,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83241,82480,83244,1537,0,0,0,1539,0,0,0,0,0,0,0,0,0,0,0,528384,0,0,0,0,0,0,0,29210,30303,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30957,29210,30319,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,82480,83625,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84705,83641,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,705072,29254,30455,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,1053254,29210,29210,29210,29254,30471,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,1073734,29254,29254,1094214,1886,790528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61440,0,0,1122304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225706,0,1933,0,0,0,0,0,0,1939,0,0,0,0,0,0,0,0,1965,0,0,1015808,0,0,0,0,29210,29210,30647,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29925,29210,29210,82480,82480,82480,82480,83988,791088,82480,82480,82480,82480,82480,82480,82480,82480,82480,83998,29254,29254,30805,791110,29254,29254,29254,29254,29254,29254,29254,29254,29254,30815,29254,29254,29210,29210,29210,30518,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,31459,29254,29254,31460,29254,29254,29254,29254,29254,29254,29254,31467,29254,29254,0,0,0,0,0,0,0,2599,0,0,0,0,0,0,0,944,0,0,0,0,0,0,0,0,0,1016368,1122864,29254,29254,1016390,1122886,0,1467,0,1473,0,1479,0,1485,0,0,0,0,0,694,0,0,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,31316,29210,0,0,0,2200,0,0,0,0,0,0,0,0,0,0,0,0,131072,131072,0,0,0,0,0,0,2243,0,0,0,0,0,802816,0,0,0,0,0,0,0,69632,73728,313,314,314,419,420,65536,427,84245,82480,82480,82480,82480,82480,82480,82480,84250,82480,82480,82480,82480,82480,82480,82480,2344,0,29254,29254,29254,29254,29254,29254,29254,29210,29210,29254,29210,82480,29210,31260,82480,84510,29254,31045,29254,29254,29254,29254,29254,29254,29254,31050,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,2936,2737,0,0,0,0,0,0,2424,0,0,0,0,2428,0,0,0,0,0,0,0,1964,0,0,0,0,0,0,1972,0,0,0,0,2448,0,0,0,0,0,0,0,0,0,0,0,0,163840,0,0,0,0,0,884736,0,0,0,0,0,0,0,0,0,0,0,0,0,1163264,0,0,29210,29210,922138,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,487984,954906,82480,954928,29254,954950,2809,0,0,0,2811,0,0,0,0,0,0,0,2179,0,0,0,0,0,0,0,0,0,700416,0,0,0,0,0,0,2737,0,0,0,0,0,2823,0,0,0,471040,0,0,843776,29210,31499,29210,29210,31501,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30316,29210,29210,82480,84762,82480,82480,84764,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83994,82480,82480,82480,82480,29210,31567,29210,31569,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83216,82480,82480,84830,82480,84832,82480,82480,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,31597,29254,31599,29254,29254,29254,29254,29210,0,0,0,0,0,0,2737,0,0,0,0,0,0,0,0,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,0,82480,82480,82480,82480,82480,82480,84969,82480,82480,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31536,31537,31538,29254,29254,29254,31728,29254,29254,29210,430080,0,0,0,0,0,29210,430618,31737,29210,29210,29210,31160,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30669,29210,29210,29210,407,353,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,29874,823,29210,29210,29210,29210,29210,29210,29882,29210,29210,29210,29210,31628,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,2092,2344,0,0,0,0,0,351,0,0,0,353,0,0,470,470,470,470,470,470,470,475,470,470,470,470,470,470,470,470,470,475,470,470,481,470,0,0,470,0,0,0,0,0,0,0,0,521,521,525,525,525,525,470,470,470,470,470,475,470,470,525,521,525,525,525,525,537,29227,29227,29227,82496,29271,29227,82496,29227,29227,82496,82496,82496,29227,29227,29227,29227,29271,29271,29271,29271,29271,29271,29271,29271,29271,29227,82496,29227,29290,82543,29271,29290,29301,1,12290,3,78112,0,335872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,286720,0,0,0,0,0,701,0,0,0,0,0,0,0,0,0,0,0,720896,0,0,0,0,730,0,0,0,335872,730,0,736,737,335872,0,0,0,0,0,0,0,2426,2427,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,0,0,0,618496,0,733184,0,0,0,0,0,0,733184,0,0,0,0,0,0,733184,0,0,0,661,0,0,0,0,801,0,0,0,0,0,335872,0,0,0,618496,0,733184,0,781,0,801,781,0,335872,0,0,781,733184,821,0,29210,29210,336700,29210,29210,29210,29210,29210,30650,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29547,29210,29210,29210,29210,82480,29518,619034,29524,733722,29210,29210,29210,29210,29210,29542,29210,29210,29210,29210,29210,82480,84878,82480,84879,82480,82480,82480,82480,82480,82480,82480,0,0,29254,29254,29254,29254,29254,29254,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,29254,29254,336759,82480,82480,82480,82480,82825,619056,82831,733744,82480,82480,82480,82480,82480,82849,82480,82480,82480,82480,82480,82480,82480,494195,82480,82480,82480,82480,82480,82480,82480,84599,0,0,336821,29254,29210,82480,29210,29210,29542,29210,29210,82480,82480,82849,82480,82480,31528,29254,29254,29254,29254,31532,29254,29254,29254,29254,29254,29254,29254,29254,541254,29254,29254,31041,29254,631366,655942,29254,0,29254,29254,29663,29254,29254,78112,87041,0,0,0,0,0,0,0,0,2234,0,0,0,0,0,0,0,0,0,0,0,1045,0,0,0,0,0,0,0,0,0,0,0,831488,0,0,0,0,0,0,0,1074,1075,0,0,0,0,0,0,0,0,0,0,0,1011712,1101824,0,0,0,0,0,0,362,362,0,0,0,1093,0,0,0,0,0,0,0,720,0,0,0,0,0,0,0,0,2218,0,0,0,0,0,0,0,0,0,0,1134,0,1137,0,0,0,0,0,716800,0,0,0,0,0,0,689,690,0,362,362,362,0,0,0,0,0,0,0,991232,0,0,0,0,0,0,0,0,1583,1584,1585,1586,0,0,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,1156,0,0,0,0,0,702,0,0,0,0,0,0,0,0,0,0,1110,1111,0,0,0,0,0,0,0,0,1163,0,0,1045,0,0,0,1169,0,1171,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,728,0,0,0,0,1177,0,0,0,0,0,1181,0,1184,0,1169,1187,0,794624,0,0,0,0,1074,0,0,0,0,1196,0,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,362,362,362,0,695,0,0,1196,0,0,1093,0,29874,823,29876,29210,29210,29210,29880,29210,29210,29210,29210,29210,30691,29210,29210,29210,29210,29210,29210,29210,29210,29210,30698,29886,29210,29210,29210,29210,29210,29210,29210,29210,29210,29905,29210,29210,29210,29210,29210,29210,455194,29210,30941,29210,29210,29210,29210,29210,29210,29210,30311,29210,29210,29210,29210,29210,29210,29210,29210,30339,29210,29210,29210,29210,29210,29210,29210,29210,29210,29915,29210,29210,717338,29210,29210,29210,29210,29210,29923,29210,29210,29210,29930,29932,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30361,29953,29210,83203,82480,82480,82480,83207,82480,82480,82480,82480,83213,82480,82480,82480,82480,0,0,2096,0,29254,29254,29254,29254,29254,29254,29254,29254,30087,29254,29254,30094,29254,29254,29254,29254,29254,82480,82480,82480,82480,82480,83232,82480,82480,82480,82480,82480,82480,82480,83242,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29635,29254,29254,29254,29254,29254,29254,31379,31380,29254,29254,29254,29254,29254,29254,29254,29254,30088,29254,29254,29254,29254,29254,29254,29254,717360,82480,82480,82480,82480,82480,83250,82480,82480,82480,83257,83259,82480,82480,82480,82480,0,2094,0,0,29254,29254,29254,29254,29254,29254,29254,29254,30783,29254,29254,29254,29254,29254,29254,29254,30036,29254,29254,29254,30040,29254,29254,29254,29254,30046,29254,29254,29254,29254,29254,29254,29210,0,0,0,0,0,3032,0,0,0,29254,29254,29254,30065,29254,29254,29254,29254,29254,29254,29254,30075,29254,29254,717382,29254,29254,29254,29254,29254,31253,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,29254,29254,29254,29254,389702,31461,29254,29254,29254,31465,31466,29254,29254,29254,29254,29254,30041,29254,29254,29254,30045,29254,29254,30056,29254,29254,30059,29254,29254,29254,29254,30083,29254,29254,29254,30090,30092,29254,29254,29254,29254,29254,29254,29210,2933,0,2934,0,0,0,2737,0,0,87041,0,0,1467,0,0,0,1473,0,0,0,1479,0,0,0,1485,0,1501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,528384,0,0,753664,770048,0,0,0,0,0,0,1543,0,0,0,0,0,0,0,2437,0,0,0,0,0,0,0,0,721,0,0,0,0,0,0,0,0,0,0,1577,0,0,0,0,0,0,0,0,0,0,0,0,167936,0,0,0,0,0,0,370231,1592,0,0,1594,0,0,0,1598,0,0,1601,0,0,0,0,0,29874,823,29210,29210,311834,29210,29210,29210,29210,29210,29210,29210,84689,82480,82480,84690,82480,82480,82480,82480,82480,370231,29874,0,29210,29210,29210,29210,29210,29210,29210,29210,29210,370266,29210,29210,29210,29210,31149,29210,31150,29210,29210,29210,29210,29210,29210,29210,29210,29210,447002,29210,29210,29210,29210,29210,29210,29210,30304,29210,29210,29210,29210,29210,29210,29210,29210,29210,30314,29210,29210,29210,545306,83626,82480,82480,82480,82480,82480,82480,82480,82480,82480,83636,82480,82480,82480,545328,82480,82480,82480,82480,82480,82480,82480,541232,82480,82480,84241,82480,631344,655920,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29636,29254,29254,29254,29254,29254,29254,31702,0,0,438272,933888,0,0,0,0,0,0,0,69632,73728,221184,0,0,0,0,65536,0,82480,82480,83671,1004080,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84006,82480,84008,82480,82480,29254,30456,29254,29254,29254,29254,29254,29254,29254,29254,29254,30466,29254,29254,29254,545350,29254,29254,29254,30501,1004102,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,30509,29254,29254,29254,29254,0,0,0,0,1875,1876,0,0,0,0,0,0,0,0,0,0,2416,0,0,0,0,0,0,0,0,1899,0,0,0,0,974848,552960,0,1905,712704,0,0,0,0,0,0,2731,0,0,0,0,0,0,0,0,0,1080,0,0,0,0,0,0,0,0,589824,0,0,0,0,1927,434176,0,0,0,0,0,0,0,727,0,787,0,0,0,0,0,0,0,0,0,0,479232,0,0,0,0,0,0,0,0,0,0,0,1024e3,0,0,0,0,29210,434714,29210,29210,29210,30663,29210,29210,29210,29210,29210,29210,29210,29210,553498,29210,29210,29210,31173,29210,29210,29210,29210,29210,82480,82480,84428,82480,82480,82480,82480,0,0,0,0,29254,30770,29254,29254,29254,29254,29254,29254,29254,447046,29254,29254,29254,29254,29254,29254,29254,29254,30491,29254,29254,29254,29254,29254,29254,29254,29210,30673,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,1040922,29210,29210,30700,29210,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83622,83623,82480,82480,82480,82480,82480,975408,82480,82480,1024560,82480,82480,82480,82480,84007,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29254,29254,29254,29642,29254,29254,29254,975430,29254,29254,1024582,29254,29254,29254,29254,30824,29254,29254,29254,29254,29254,29254,30108,29254,29254,29254,29254,29210,29210,29210,29210,0,2172,0,0,0,0,0,0,0,0,0,2182,0,0,0,0,0,0,0,69632,73728,163840,0,0,0,0,65536,0,0,0,0,0,2201,0,0,0,0,0,0,0,0,0,630784,0,0,0,0,0,29874,823,29210,29877,29210,29210,29210,29210,29210,29210,29210,30677,29210,29210,29210,29210,29210,29210,29210,29210,30952,29210,29210,29210,29210,29210,29210,29210,0,0,987136,0,0,0,0,0,0,0,0,0,0,0,0,0,221184,0,0,0,0,0,540672,0,0,0,0,0,0,1085440,0,0,0,0,0,0,0,2451,0,0,0,0,2456,0,2458,0,29210,631322,655898,29210,29210,29210,29210,29210,29210,29210,29210,848410,29210,29210,29210,29210,29210,30702,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83218,82480,82480,82480,84219,82480,82480,82480,82480,82480,82480,84225,82480,82480,82480,82480,82480,82480,82480,82828,82480,82480,82480,82480,82480,82480,82480,82480,82480,516656,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,848432,82480,82480,82480,82480,82480,82480,82480,82480,82480,84439,82480,82480,82480,82480,82480,82480,82480,987696,82480,82480,82480,82480,82480,82480,82480,82480,82480,0,0,0,0,0,0,0,69632,73728,167936,0,0,0,0,65536,0,0,29254,31019,29254,29254,29254,29254,29254,29254,31025,29254,29254,29254,29254,29254,29254,29254,31241,29254,29254,29254,29254,29254,29254,29254,29254,31061,29254,29254,29254,29210,29210,29210,29254,29254,29254,987718,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,799258,31065,29254,29254,29254,29254,29254,31378,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31040,29254,29254,29254,29254,29254,417792,0,0,450560,499712,0,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,647168,0,0,0,0,0,0,0,0,0,0,2454,2455,0,0,0,0,0,0,2447,0,0,0,860160,0,2452,0,0,0,0,0,0,0,749,0,0,0,0,754,0,0,0,0,0,0,0,0,1114112,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29210,31313,29210,29210,29210,29210,29210,29210,29210,29210,397850,29210,418330,29210,29210,29210,29210,451098,29210,29210,500250,29210,29210,29210,29525,29210,29529,29210,29534,29210,29537,29210,29210,29550,29210,29210,82480,83204,82480,82480,82480,82480,82480,82480,82480,82480,82480,83215,83222,82480,82480,397872,82480,418352,82480,82480,82480,82480,451120,82480,82480,500272,82480,82480,82480,82480,0,2095,0,0,29254,29254,29254,29254,29254,29254,29254,29254,836166,29254,29254,29254,29254,29254,29254,1032774,82480,82480,82480,82480,84462,82480,82480,0,0,29254,29254,29254,29254,29254,29254,29254,30490,29254,29254,30493,29254,29254,29254,29254,29254,29254,397894,29254,418374,29254,29254,29254,29254,451142,29254,29254,500294,29254,29254,29254,29254,29254,29254,31228,29254,29254,29254,29254,29254,29254,29254,29254,29254,30492,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31252,29254,29254,31254,29210,29254,29210,82480,29210,29210,82480,82480,82480,82480,0,29254,29254,29254,29624,29628,29631,29254,29638,29254,29254,29648,0,0,0,0,2613,0,0,2615,2616,0,0,0,0,0,0,0,777,0,602112,0,709356,0,0,0,0,29210,494168,29210,29210,29210,29210,29210,29210,29210,31324,29210,29210,29210,29210,29210,29210,30310,29210,29210,29210,504346,29210,29210,29210,30317,29210,29254,29254,31365,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,494222,29254,29254,29210,29210,30830,30831,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,29254,29254,0,0,401408,0,0,0,0,778240,0,0,0,0,0,0,1122,0,0,0,0,0,0,0,0,0,362,362,362,694,0,0,0,31388,29254,29254,29254,29254,29210,29210,29254,29210,82480,29210,29210,82480,82480,29254,29254,0,0,0,0,2407,0,0,0,0,0,0,2729,0,0,0,0,0,2732,0,0,0,0,0,0,0,69632,73728,172032,0,0,0,0,65536,0,29210,29210,31426,29210,29210,29210,29210,29210,29210,29210,29210,29210,668186,29210,29210,29210,29210,31161,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,84926,82480,82480,82480,29210,31437,29210,31438,29210,29210,29210,82480,82480,82480,82480,82480,82480,84692,82480,82480,82480,82480,0,29254,29254,29254,29625,29254,29254,29254,29254,29641,29254,29254,29210,29210,29210,29210,30832,29254,29210,82480,29210,29210,29210,29210,82480,82480,29254,30532,29254,29254,0,0,0,0,0,0,0,0,0,0,2220,0,0,0,0,0,29254,29254,668230,29254,29254,29254,29254,31473,29254,31474,29254,29254,29254,29210,29210,29210,29210,29254,29254,29210,82480,29210,29210,1016346,1122842,82480,82480,2737,0,0,0,2821,0,0,0,0,1130496,0,0,0,0,29210,29210,29210,29893,29210,29897,29210,29210,29901,29210,29903,29210,29210,29210,29210,29210,29210,30703,29210,29210,29210,82480,82480,82480,82480,83956,82480,401946,29210,29210,29210,461583,29210,29210,29210,29210,29210,29210,29210,29210,31511,29210,29210,29210,29894,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30968,29210,29210,82480,82480,401968,82480,82480,82480,461598,82480,82480,82480,82480,82480,82480,82480,82480,84774,29254,31541,29254,29254,29210,29210,82480,29254,0,0,0,0,0,0,0,0,2414,0,0,0,0,0,2420,0,438832,82480,82480,82480,82480,82480,82480,82480,934448,29254,29254,29254,438854,29254,29254,29254,29254,29254,30461,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29675,29210,29210,29210,29210,0,29254,29254,29254,29254,934470,29210,0,3059,3060,3061,0,3063,29210,29210,29210,29210,29210,30939,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30681,791066,29210,29210,29210,29210,29210,31740,31741,82480,82480,82480,82480,82480,84994,84995,29254,29254,29254,29254,29254,31752,31753,29210,0,0,0,3084,0,29210,29210,29210,29210,29210,29210,82480,82480,82480,82480,0,29254,29254,29254,29254,29254,29254,29633,29254,29254,29643,29254,355,356,0,0,0,0,0,0,0,362,0,86306,0,0,0,0,0,0,719,0,0,0,723,0,0,0,0,0,0,0,29211,29211,29211,82480,29255,29211,82480,29211,29211,0,0,0,389,0,0,0,0,0,0,0,0,0,0,0,0,348160,0,0,0,471,471,485,0,0,485,356,356,356,507,356,356,356,356,471,471,82497,82497,82497,29228,29228,29228,29228,29272,29272,29272,29272,29272,29272,29272,29272,29272,29228,82497,29228,29228,82497,29272,29228,29272,1,12290,3,78112,0,0,0,695,0,0,0,0,0,0,0,0,0,0,0,0,507904,0,0,0,29519,29210,29210,29210,29210,29210,29210,29210,29210,29210,29546,29210,29210,29210,29210,82480,82480,82480,82480,82480,82480,82480,668208,82480,82480,82480,82480,84703,82480,84704,82480,82480,82480,82480,82480,82480,83233,565808,82480,82480,82480,82480,82480,82480,82480,82480,553520,82480,82480,83980,82480,82480,82480,82480,82480,82480,82480,82480,82480,82826,82480,82480,82480,82480,82480,82480,82480,82480,82480,82853,0,0,29254,29254,29210,82480,29210,29210,29210,29546,29210,82480,82480,82480,82853,82480,82480,82480,82480,82480,82480,83273,82480,82480,82480,82480,82480,82480,25938,29874,944,0,29254,29254,29254,29667,29254,78112,87041,0,0,0,0,0,0,0,0,2606,0,0,0,0,0,0,0,0,0,1043,0,0,0,0,0,0,0,0,0,0,0,0,0,749568,0,0,0,0,0,0,0,1135,0,0,0,1139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,643072,0,29210,29210,29892,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30344,29210,29210,29210,29954,82480,82480,82480,82480,82480,82480,82480,83210,82480,82480,82480,83219,82480,82480,82480,82480,0,29254,29254,29617,29254,29254,29254,29254,29254,29254,627270,29254,29254,30052,29892,83219,29210,29210,29210,29210,82480,82480,82480,82480,29254,29254,29254,29254,0,0,463386,29210,463408,82480,463430,87041,0,0,0,1468,0,0,0,1474,0,0,0,1480,0,0,0,0,0,0,31616,29210,29210,29210,29210,29210,29210,29210,29210,29210,29540,29210,29210,29210,29210,29210,82480,1486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,745472,0,0,1511,1512,0,0,0,0,0,0,0,0,0,1519,0,0,0,0,0,0,37268,37268,37268,37268,37268,37268,37268,37268,37268,37268,0,0,0,0,0,0,37268,0,37268,1,12290,3,78112,0,0,0,1562,0,0,0,0,0,0,1568,0,0,0,0,0,0,0,69632,73728,266240,0,0,0,0,65536,0,1574,0,1576,0,0,0,0,0,0,0,0,0,0,0,0,0,1138688,0,0,0,82480,82480,82480,82480,83645,82480,82480,82480,82480,82480,82480,82480,82480,83652,82480,82480,82480,82480,0,29254,29254,29618,29254,29254,29254,29632,29254,29254,29254,29254,29210,844314,844336,844358,0,0,0,0,0,0,0,0,2180,0,0,0,0,0,0,0,82480,82480,82480,82480,84222,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84228,82480,82480,82480,82480,0,29254,29254,29254,29254,31022,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31063,29254,29210,29210,29210,29254,82480,82480,84435,82480,84436,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84597,82480,598576,82480,82480,29254,29254,31225,29254,31226,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31051,29254,29254,29254,29254,0,2604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073152,0,29254,29254,29254,31729,29254,29210,0,0,0,0,0,0,29210,29210,29210,29210,30928,29210,29210,29210,29210,29210,29210,31773,82480,82480,82480,85023,29254,29254,29254,31777,0,0,29210,29210,82480,82480,29254,29254,0,0,0,2810,0,0,2813,0,0,0,0,0,0,0,1134592,0,362,0,0,0,1134592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192969,192969,192969,192969,192969,192969,192969,192969,0,0,357,0,0,0,0,0,0,362,0,86306,0,0,0,0,0,0,735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,357,0,0,0,0,0,0,0,0,0,0,0,0,0,2608,0,0,0,0,0,357,0,367,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,82498,82498,82498,29229,29229,29229,29229,29273,29273,29273,29273,29273,29273,29273,29273,29273,29229,82498,29229,29229,82498,29273,29229,29273,1,12290,3,78112,82480,82480,82480,82480,82821,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,549424,82480,82480,82480,82480,82480,0,487424,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,1553,0,0,0,0,0,0,0,0,0,0,0,2741,0,0,0,0,0,82480,82480,82480,82480,82480,623152,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,680496,82480,82480,82480,82480,82480,0,0,0,358,359,360,361,0,0,362,0,86306,0,0,0,0,0,0,748,0,0,0,0,0,0,0,0,0,751,0,0,0,0,0,0,0,359,0,358,0,0,0,69632,73728,0,0,0,0,425,65536,0,0,0,0,0,30924,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30668,29210,29210,29210,29210,29210,425,425,0,0,425,0,359,425,454,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,781,0,0,0,495,495,0,502,502,502,502,508,509,502,502,522,522,522,522,454,454,454,454,454,454,454,454,522,522,522,522,522,522,522,29230,29230,29230,82499,29274,29230,82499,29230,29230,82499,82499,82499,29230,29230,29230,29230,29274,29274,29274,29274,29274,29274,29274,29274,29274,29230,82499,29230,29291,82544,29274,29291,29302,1,12290,3,78112,0,0,29254,29254,29210,82480,29210,29210,29543,29210,29210,82480,82480,82850,82480,82480,82480,82480,0,29254,29254,328628,29254,29254,29254,29254,29254,29254,676422,29254,0,29254,29254,29664,29254,29254,78112,87041,0,0,0,0,0,0,0,0,159744,0,0,0,0,0,0,0,0,0,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,2750,0,29210,29210,29210,29210,0,1925,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37268,0,0,0,0,0,29210,30646,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,1126938,82480,82480,82480,82480,84258,82480,82480,82480,82480,82480,82480,0,0,0,0,0,0,0,274432,274432,274432,274432,274432,274432,274432,274432,274432,82500,82500,82500,29231,29231,29231,29231,29275,29275,29275,29275,29275,29275,29275,29275,29275,29231,82500,29231,29231,82500,29275,29231,29275,1,12290,3,78112,697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57344,0,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,820,0,0,0,0,0,29210,29210,29210,29210,29210,29210,29515,82480,82480,82480,82480,82822,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,1045040,82480,82480,82480,82480,82480,0,1131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1150976,0,0,0,0,0,0,0,0,82480,82480,83268,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,30101,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,0,0,0,0,46182,0,0,0,1130,1556,0,0,0,0,0,0,0,2738,0,0,0,0,2743,0,0,0,87041,1464,0,0,0,1470,0,0,0,1476,0,0,0,1482,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,1928,0,0,0,0,0,0,0,0,0,0,638976,0,0,0,0,0,0,0,0,0,0,1155072,0,0,0,0,0,0,0,0,0,30934,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30671,0,0,0,0,360448,0,0,0,0,0,0,0,0,0,0,0,111048,111048,111048,111048,111048,111048,111048,111048,111048,1,12290,3,0,0,360448,0,0,0,0,0,0,735,29210,29210,29210,29210,29210,29210,29210,31573,82480,82480,82480,82480,82480,82480,82480,82480,83991,82480,82480,82480,82480,82480,82480,82480,0,0,29254,29254,29210,82480,360986,29210,29210,29547,29210,361008,82480,82480,82854,82480,82480,82480,82480,82480,82480,83633,82480,82480,82480,82480,82480,82480,82480,82480,82480,83236,82480,82480,82480,82480,82480,82480,0,361030,29254,29254,29668,29254,78112,87041,0,0,0,0,0,0,0,0,286720,0,0,0,0,0,0,0,82480,82480,82480,1028656,82480,82480,82480,82480,82480,82480,82480,82480,82480,25938,29874,944,29254,1028678,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,0,0,0,0,90406,94503,296,297,0,0,300,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,654,29210,29210,427617,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,30359,29210,29210,29210,815642,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29210,29554,82480,82480,427691,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,83969,82480,815664,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,963120,29254,29254,427769,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31371,29254,29254,29254,29254,29254,815686,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,31476,29254,29210,29210,29210,82480,82480,82480,509958,82480,533040,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,1126960,0,0,0,0,0,29254,510023,29254,533062,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,328507,29677,29210,29210,0,29254,29254,324122,29210,29210,29210,29254,29254,29210,82480,29210,29210,29210,29210,82480,82480,82480,82480,0,29254,29254,336821,29254,29254,29254,29254,29639,619078,29645,733766,82480,746032,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,82480,84457,82480,29254,29254,746054,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,680518,29254,29254,29254,29254,0,0,0,0,536576,0,0,0,0,0,0,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,29254,29254,29254,29254,31366,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,1126982,29210,29210,29210,29254,0,0,0,0,663552,0,0,0,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,82480,82480,82480,82480,82480,82480,664112,82480,82480,82480,82480,82480,82480,82480,82480,82480,84453,82480,82480,82480,82480,82480,82480,29254,664134,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29254,29210,29210,29210,29210,0,0,1134592,0,0,0,1134592,1134592,0,0,0,0,0,1134592,1134592,1134592,0,1134592,0,0,0,1134592,1135005,1135005,0,0,0,0,0,1135005,0,0,1134592,1134592,0,0,0,1135201,1135201,1135201,1135201,1135201,1135201,1135201,1135201,1135201,1135201,0,1134592,1134592,1134592,1134592,1134592,1135201,1134592,1135201,1,12290,3,0,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,1147352,455,455,1147352,455,455,455,455,455,455,455,455,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,1147403,0,0,0,0,0,0,0,0,0,225738,225738,225738,225738,225738,225738,225738,0,0,0,1147352,1147352,1147352,1147352,1147403,1147403,1147352,1147403,1147403,1,12290,3,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,455,1142784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233472,0,0,0,0,0,0,1159168,0,0,1159168,0,1159168,1159168,0,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,0,0,0,0,0,0,0,0,237568,0,0,0,0,0,0,1159168,1159168,0,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1,12290,3,0,0,0,0,0,155648,155648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,669,106496,0,106496,106496,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,106496,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,0,0,0,0,0,0,0],r.EXPECTED=[878,886,887,885,881,891,895,899,903,907,1832,950,2776,2367,913,1832,1202,918,924,930,942,975,1833,934,1832,1400,989,991,920,1014,969,926,940,1832,1832,947,1832,1203,989,989,956,920,958,969,969,1034,962,1832,964,1832,2110,989,990,920,920,968,969,1032,973,1832,2675,1361,989,1363,920,1030,969,979,1832,2367,1204,2112,920,996,1016,983,935,988,2114,995,1e3,2636,2110,919,1004,1008,1363,1020,1027,1038,1011,1042,1049,1055,1051,1059,1063,1067,1071,1073,1078,1074,1082,1086,1090,1094,1098,1102,943,1107,984,1103,1832,1832,1832,1832,1167,1112,1832,1832,2665,1832,1832,1832,1832,1832,1832,1832,1832,1118,1832,1832,1832,2018,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,2121,1123,1832,1129,1330,1141,1145,1149,1153,1157,1832,1832,1766,1161,1165,1171,1178,1459,1182,1186,1328,1832,1692,1394,1193,1197,1201,2410,1832,2420,1832,1884,1326,1832,1832,2133,2672,1426,2500,1832,1208,1832,2397,2500,1832,2784,1638,1832,2229,2724,2752,1832,2097,1224,1832,2753,1832,2782,2798,1832,1952,1230,1832,1490,1832,2223,1832,2302,1832,1437,1234,2222,1241,1239,1832,1246,1251,1235,1239,2440,1832,1255,1440,1457,1259,2309,1265,1272,1292,1477,1856,1276,1290,1479,1859,1296,1219,1832,1226,1300,1832,1305,1309,1313,1317,1320,1324,1410,1832,1467,2454,1334,1338,1342,1352,1367,1920,1226,1300,1466,1609,1371,1375,1114,1832,2248,1832,2263,1832,1379,1407,1420,2369,1384,1388,1845,1832,1832,1392,1832,1845,1832,1220,1832,1398,1606,1547,1404,1826,1832,1301,1419,1832,1827,1832,1616,1424,1983,1430,909,1832,1782,1832,1023,1832,1434,1447,1451,1463,1979,2583,1981,1914,1590,1471,1483,1488,1279,1939,1708,1494,1512,1501,1505,1509,1516,1520,1524,1741,1738,1528,1532,1536,1540,1544,1832,1624,1832,1551,2443,1555,1559,1563,1567,1832,2210,2526,1595,1571,2716,1575,1579,1583,1587,1832,2212,2171,1594,1599,2157,1603,1613,1832,1946,1832,1622,1832,1832,1628,1633,1642,1682,1649,2740,1832,1832,1655,1832,2740,1832,1832,1832,1661,1665,2734,1669,1496,1832,1687,1675,1832,1497,1832,914,2266,1680,1686,1618,1832,2332,1832,2269,1832,2082,1862,1832,1691,2662,1832,2664,1443,2733,1247,1242,1696,1691,2063,1701,1877,1671,2044,1949,2132,2046,1705,1712,2541,1718,1724,1720,1727,1731,1832,1832,1735,2660,2710,1745,1749,1753,1757,1761,2092,1770,2075,1775,1779,1786,1790,1794,2272,1798,1832,2207,2074,1804,1808,2246,1812,1818,1832,1824,1832,1831,1837,1771,2310,1843,1849,1853,1871,2297,1832,1108,1876,1832,2297,2584,1832,2465,2569,1211,1881,1832,1413,1832,1125,1832,1832,1414,2335,2512,1891,1895,1832,1865,1832,1899,1832,1905,1800,2544,1911,1380,1832,1918,1839,1636,1924,1214,1345,1867,1380,1645,1928,1901,2130,1474,1932,2677,1936,1943,1956,1958,1962,1968,1966,1972,1832,1832,1832,1832,1977,1987,1991,1995,1999,2003,2007,2011,2691,1225,2016,1907,2344,2024,2028,1764,2034,2038,1832,2042,2651,2053,2057,2079,1838,2086,1415,2091,2337,2139,2096,1657,1973,2101,2107,2118,1832,2127,1832,952,1832,1832,2127,2770,1832,2137,2767,2143,2731,1832,2150,1832,2648,1832,1872,2151,2155,2161,2186,2746,1676,2165,2012,2170,2087,2175,2060,2179,2300,2183,2217,2192,2190,2197,2204,2216,2221,2227,2233,2239,2243,2252,2235,2256,2260,2278,2282,2286,2290,2294,2321,2306,2314,2318,2325,2329,1832,1832,2341,1268,2348,2352,2356,2360,2364,1832,2792,2373,2383,2200,2387,2391,2395,2401,1887,2408,2489,2414,2376,2418,2424,2431,2697,2170,2379,1832,2404,2437,1832,2447,1045,1454,2451,2458,1832,2463,1832,2427,1832,1832,2469,2567,1832,2473,2477,2481,2488,1813,2493,1832,2498,1832,1814,2565,2193,1189,2505,2048,1119,2583,1261,1832,2786,2510,2516,2520,1832,2524,1820,1832,2530,2534,2538,2494,2459,2550,2556,2573,1714,2552,2703,2590,2580,2588,2146,1137,1132,2596,1135,2602,2654,2606,1832,1832,1832,936,2610,2614,2618,2622,2626,2630,2634,1832,1282,2640,2645,2658,2546,2669,2103,2681,2685,1832,2123,1285,1217,2764,2689,1832,2030,1832,2066,1832,1348,2695,1832,2701,2166,1174,2707,1832,1832,2714,1832,2484,1832,1832,2720,1832,2274,1286,2728,2738,1832,2019,2744,1832,2750,1832,2020,2722,2559,2757,2598,1832,2562,1832,1355,1832,2069,2592,2761,2774,1484,2336,2072,1629,2049,2576,1832,1358,2433,1697,1651,2780,2506,2790,2641,2796,1832,1832,1832,1832,1832,1832,1832,1832,1832,1832,2501,2869,4383,2802,2810,2814,2810,2817,2809,2810,2810,2810,2810,4356,2805,2821,2810,2825,2829,2832,2836,2839,2841,2845,2847,2851,2855,2859,2863,2867,2910,5238,4528,4528,2877,3761,4762,4528,4528,4528,3014,3388,3389,3393,3393,3393,3393,2889,2934,2934,3034,2900,2945,2899,3391,2907,4125,2922,3210,4528,4528,4528,3190,2950,4127,5087,4528,4528,4528,3172,3852,2955,4524,4528,2873,4528,4528,2918,4664,2903,3393,3393,3393,2933,2934,2966,4128,4528,4528,2970,3211,2945,2934,2934,2934,2934,2946,2982,4528,4528,2974,4528,2934,3029,3009,3013,2892,4528,4528,4528,3194,3386,3388,3388,3388,3388,2903,3393,3393,3394,2934,2934,2934,2934,2934,3019,3023,3027,2934,2934,3033,3011,4528,2993,4188,3388,3390,3393,2931,2934,2934,2935,3022,3027,2934,2962,4528,2875,2879,3763,2993,3387,3388,3393,3050,2934,2934,2959,2901,2946,2951,3394,2934,3052,4525,2945,2934,2937,3384,4528,4936,5116,3388,2902,3393,3051,2936,4189,3052,4528,3387,3390,3391,3027,2938,3390,3050,3038,3049,3042,3046,3046,3056,3068,3078,3082,3157,3157,3157,3157,3100,3157,3092,3086,3096,3089,3104,3108,3112,3116,3120,3124,3128,3131,3135,3139,3142,3146,3156,3161,3165,3168,3149,5085,3212,3879,4528,4528,4528,3201,3186,4528,4528,4528,3230,3216,3059,4528,4528,3152,3660,4097,4528,4528,4528,3311,3295,3791,4528,4528,3196,3179,4540,3221,3228,4528,2895,4528,4176,2893,4528,4105,5101,4008,3238,3242,4274,3246,3248,3248,3250,3254,3258,3261,3265,3269,3271,3275,3279,3283,3001,4528,3294,3790,3307,4896,3061,4943,3317,5076,4528,4528,3208,4528,3323,3336,3327,4528,2926,4109,4844,3335,5253,3341,5020,4528,5022,4528,5041,4676,3362,3363,4528,2940,5099,3914,4597,3378,3383,3398,3355,3404,3417,3424,3430,4528,4528,4528,3387,3388,3388,4720,3453,3500,4528,2996,4588,4262,4860,4417,4528,3001,3852,4528,4528,4528,3696,3457,3500,4528,4528,4528,3467,3511,4528,4184,3462,4288,4986,3498,4528,4528,4528,4987,3499,4528,4528,4528,3561,4912,4528,4528,4528,3564,4185,4113,4528,3510,3518,4528,4528,4532,5058,3500,4528,4528,3358,5004,4002,4528,4001,4528,3015,4784,5268,4e3,4528,4528,5251,3999,4528,3880,4528,3182,3825,4528,3189,5182,5190,4528,5089,4528,2994,3555,3999,4528,3554,4528,4001,3852,4308,4528,3854,3608,4528,4528,4528,3727,3692,3500,4528,5231,3559,4389,4528,3527,3572,3576,3578,3584,3580,3588,3592,3593,3597,3598,3598,3599,3603,4528,4528,3367,3791,4528,4528,3234,3224,3612,4530,3616,3187,4428,3831,3319,4894,4419,3623,3632,4528,3203,3756,4528,3286,3290,4539,3640,4528,5033,4528,3329,5295,4528,3329,5303,4528,3384,3388,3388,3393,3393,3074,4528,4528,5031,3656,3877,4112,4035,4426,4150,3494,4872,3766,4528,4528,4528,3754,3567,3646,3878,4113,4702,3318,3721,3680,3685,3689,4528,4528,3371,5102,2994,3711,4528,4528,3385,3388,3400,3062,3720,4528,3467,3674,4528,3466,3607,4528,3197,4528,4528,4528,4637,3771,4528,4528,4528,3764,3466,3742,4528,4528,3449,3426,5086,4531,3750,3721,4938,4528,3782,4528,3483,4528,3909,5057,3526,4528,3014,4539,4170,3832,4528,3514,3645,3058,4112,3786,4528,3503,4304,4528,3531,4528,4528,3349,4528,3927,3800,3763,4528,3546,4528,4528,3502,4529,4541,3812,3180,3756,3815,4528,3555,4528,4194,3554,3851,3823,4528,4528,4528,3818,3181,3824,4528,4528,3471,3499,3344,3861,4528,2994,4155,4160,4528,3862,4528,4528,3345,5054,4204,3374,3849,3373,3848,2994,3847,4528,4528,3858,4528,5241,5054,5240,3885,5316,3869,5177,3862,5317,2978,4135,3884,3505,3869,3889,3904,3908,3906,3505,3908,4202,4985,4982,3842,3913,5224,3057,3919,3921,3925,4528,3568,3303,4110,4540,3064,3932,3939,3949,3957,3961,3971,3974,3974,3975,3979,3983,3984,3988,3991,3993,3993,3993,3993,4015,4021,4528,4026,3723,5198,4033,4336,4022,4299,3337,4042,4625,4528,4528,4048,4528,5103,4627,4528,3715,4528,2977,5215,3500,4587,4007,3900,3900,4055,4528,3777,5283,4528,3796,4528,3715,4528,3502,4528,4528,3650,4528,4916,4059,4528,3732,4528,4528,3409,4528,4615,4064,4528,4528,3501,3998,4076,4528,4528,4528,3819,3400,4438,4074,4528,3814,4528,4528,3789,4528,4080,3900,4091,4528,3815,4528,3897,4027,3926,4528,4528,3514,5308,4119,4132,4528,4528,3522,4596,4183,4528,4539,4140,4074,4587,4144,4092,4528,4845,4528,4528,3550,4528,4159,4528,4528,4528,4114,4080,4528,3778,4528,4528,4096,3060,4528,4528,4528,4154,3562,4528,4528,4528,4184,3565,4528,4528,4528,4340,5252,4528,4528,3549,3793,4528,4186,4528,3836,4530,3840,4043,4528,3794,4528,4528,5045,4194,3794,4184,4528,4186,3880,3793,4528,4193,4186,3794,4187,4200,4186,5012,5247,5249,4528,4704,4259,4528,3875,3506,3850,5178,4528,4136,3399,3843,4906,4208,4548,4216,4223,4219,4227,4231,4234,4236,4240,4243,4245,4249,4245,4245,4253,4528,3892,4528,4528,4003,3299,4258,4528,4528,4528,4353,5085,4528,3002,4029,4087,3746,3870,4528,3928,3770,3776,4017,4278,4282,4098,4286,4528,4528,4293,4298,4312,3379,4718,4716,4528,5191,4528,4528,3898,4528,5085,4528,3003,4845,3560,4458,3880,4333,4528,4528,4528,4409,5e3,4862,4344,4528,4528,3702,3764,4348,4366,4528,4528,3728,3772,4528,4349,4528,4528,4528,4528,2914,5191,4528,4528,4528,4533,3755,4360,3492,4528,4528,3738,2881,2995,4528,3744,4459,4193,4398,4375,4528,4002,3851,5252,3554,4528,4307,4008,3871,4528,3177,4528,4528,3753,4528,4306,4528,4528,4528,4559,4371,4528,4528,4528,4614,4460,4397,4374,4528,4028,3442,4528,2985,5064,3681,3863,4389,4528,3003,4590,4858,4193,4407,3204,3756,4528,4528,3755,4528,3175,3179,4528,4528,3757,3540,2999,4413,4507,4528,4037,4528,3805,4533,3755,4528,4528,3765,3644,5056,3864,3500,2997,4423,3071,4433,3352,4442,4262,4528,5304,2999,4528,4446,4528,4038,3180,3830,4587,4528,5304,4528,4063,4068,4528,3793,4528,3792,4112,4528,5225,4588,4528,2998,4528,4589,4528,2999,5304,4528,2998,3e3,4588,4528,3560,5304,4528,4588,4528,4528,4528,4650,4736,4513,4528,4528,3928,3801,3764,4528,2924,3301,3735,4528,4528,3064,4376,4450,4528,4591,4300,4457,4464,4468,4475,4477,4472,4481,4485,4494,4491,4487,4500,4498,4500,4502,4506,4528,4528,4528,4686,4294,4517,4299,4528,4528,4528,3331,5273,5089,4538,4545,4552,4564,4573,4528,4528,3967,5229,4579,4528,4533,3894,5083,3486,4585,4586,3521,4595,4528,4528,4075,5251,4185,4528,4528,4528,5301,4097,4528,4528,3898,4603,4528,5303,4528,4178,3500,4528,4182,4389,4528,3817,3289,4528,3817,5289,4528,3819,4528,4528,4787,4271,4528,4608,5070,4182,4528,4183,5048,5052,4619,4528,4528,4528,4694,3895,4528,4528,4528,4703,4644,4528,4528,4528,4720,4528,5095,4528,4528,4083,4528,5055,4604,2939,4528,4189,3388,3388,3388,3392,3393,3393,4289,5035,4654,4528,4210,4528,4528,3188,5212,4646,4560,3500,4528,4212,4528,4528,3795,4528,4531,4533,4513,4528,4528,4108,4642,3896,4195,4861,4528,4267,4528,2894,4559,4690,4528,4528,4265,4575,3209,4528,4528,4161,4429,5291,4596,4528,4629,4696,4528,4528,4528,4786,4690,4528,4528,4528,4794,4666,4528,4108,3964,4631,4301,5054,4700,4528,4846,4708,4528,4302,3898,4680,4528,4847,4709,4528,4528,4528,4797,4931,4528,4713,4528,4306,4528,4856,4622,4097,4403,4528,4318,4322,4528,3997,4528,4528,3501,3209,4009,4528,4528,4528,4847,4725,4528,4528,4528,4987,3464,4528,4726,4528,4528,4186,4110,4528,4746,4727,4528,4528,4970,4932,3863,3500,2972,4196,4587,3209,4528,4329,4528,4528,3669,4528,4969,4528,4528,4254,4975,4183,4075,3899,4011,4528,4757,4528,4367,3670,4528,3400,5050,4528,3407,3411,4528,3413,4528,4528,3652,4122,4756,4528,4755,4731,4389,4740,4528,4744,4528,4757,4043,4745,5053,4750,4069,3500,4044,4528,4755,4528,4408,4364,4528,4010,4528,4528,4183,3479,4528,4761,4766,4043,3722,4528,4528,4307,5056,5014,4043,2976,4754,5013,4070,4767,4069,4528,5014,4771,4772,3951,3953,4776,4779,4780,4528,4453,4165,4528,3816,4528,4528,4528,4638,4852,4528,4524,4528,4523,4528,3794,3534,3420,3433,4791,3915,4801,4807,4805,4811,4815,4819,4823,4827,4829,4836,4833,4836,4837,4841,4528,4527,4528,4528,2924,4528,4526,4182,5183,4115,4891,4900,4528,4528,4924,3474,3676,3445,4528,3513,4528,5297,4866,4870,5109,4528,4075,4887,4876,3619,4528,4528,4314,3426,2987,4528,5310,4528,4528,4925,3475,4880,4881,4528,4528,4324,3437,4885,3211,4182,5183,3503,3662,4528,4528,4325,3438,4904,3489,4534,4528,4528,4955,4959,4656,4910,4528,4528,4339,4528,3707,3626,3628,4528,4528,4988,3500,5304,3807,3943,4528,5025,4886,4929,4533,4942,4993,4528,4528,5204,3808,3635,4528,4528,4528,4994,4947,4951,4528,4528,4380,4528,4947,4951,4528,3699,4967,4974,3384,4115,4979,4528,3504,3664,4528,5089,4992,4528,4528,5261,4532,4658,4528,4528,4528,5024,5e3,4528,4528,4528,5039,4408,4999,4596,4528,4528,4528,3399,3662,4528,5088,4528,4528,4111,5009,4528,4528,4402,4528,5018,3384,5097,3062,4303,4528,4534,4184,4994,3705,4528,4528,4436,5215,3702,3826,4050,3795,4027,4428,2941,3063,4305,4528,5029,4187,4528,3795,4528,3865,4528,3002,3665,4668,5005,4528,4528,4528,4508,4528,4995,4111,4051,4528,4528,5277,4528,4528,5287,4528,4530,4963,3636,4528,4528,4387,4528,4567,3062,4109,4534,2995,4528,4263,4391,4528,2893,3764,4528,4528,4528,3816,4528,5062,3060,4108,4528,4528,4519,3815,4528,5068,4265,4528,5281,4528,3537,4528,2895,2893,4266,5074,4108,5315,5080,4569,3716,3945,3566,5093,5107,4581,5113,5120,5124,5128,5132,5136,5140,5144,5147,5150,5154,5156,5160,5164,5167,5171,5175,4528,4528,4528,4525,4528,4528,5089,4528,4528,4528,2989,3004,2916,4528,4558,4689,4528,4294,4517,4528,4173,4528,4109,4264,4660,4528,3896,4528,4528,3563,4528,4528,4528,4299,5187,4528,5196,4528,4598,3543,4528,2993,4528,4528,3e3,4528,4528,5202,4528,3005,4085,4428,5208,4682,4166,5222,4528,4528,4533,4512,3934,4528,4528,4528,4533,4920,3189,5235,4528,4533,4393,5011,4528,5245,3926,4528,4633,5218,3757,5257,5229,4528,4528,4555,3217,5257,5229,4540,3935,4528,4528,4599,3512,3853,4528,2927,4528,4672,4528,4528,4148,4528,3061,4528,5265,4528,4528,4611,4102,5273,4528,4528,4528,4674,4528,3330,5272,4528,4528,4721,3458,4528,5029,3001,4528,4261,5089,4528,3004,2925,4108,4028,4528,4631,5192,4528,4265,4643,4645,4108,4752,4528,4528,4734,2885,4528,5314,4528,4528,4843,3209,4528,4528,3309,3313,4528,5308,4528,4528,4851,4260,3841,4528,4528,4528,4914,4528,5357,5843,5368,5994,5358,5994,5371,5360,5994,5994,5994,5994,5881,5366,5359,5994,5370,5994,5994,5373,5994,5994,5383,5397,5430,5398,5399,5430,5425,5431,5425,5425,5401,5401,5425,5426,5428,5427,5427,5427,5427,5400,5400,5400,5425,5433,5429,5425,5402,5435,5437,5436,5439,5441,5442,5444,5446,5447,5448,5447,5447,5448,5450,5452,5455,5453,5456,5997,5321,5339,5323,6092,6093,5323,5323,5324,5344,5421,5572,5682,5491,5901,6298,5323,5580,5323,5683,5676,5676,5379,5564,5323,5323,5323,5335,5323,5323,5816,5564,5911,5403,5403,5676,5676,5676,5563,5564,5564,5561,5342,5884,5374,5323,5816,5385,5323,5323,5323,5324,5406,5989,5894,5573,5323,5323,5323,5780,5323,5334,5676,5676,5677,5564,5564,5564,5564,5405,5323,5323,5420,5323,5323,6221,5676,5676,5564,5564,5407,5928,5407,5407,5407,5407,5989,5810,5894,5573,5564,5403,5403,5564,5564,5403,5804,5407,5480,5480,5480,5323,5989,5573,5323,5323,6092,6028,5323,6092,5323,5801,5323,5407,5480,5480,5323,5323,5978,5342,5323,5323,5701,5323,5353,5323,5323,5323,5326,5323,5323,6106,5323,5323,5323,5327,5323,5323,5323,5328,5405,5932,5911,5804,5380,5323,5323,5323,5333,5323,5564,5564,5405,5404,5911,5403,5676,5564,5676,5564,5564,5564,5403,5404,5564,5564,5405,5403,6038,5380,5323,5420,5403,5380,5420,5911,5804,5380,5911,5380,5911,5676,5804,5564,5564,5564,6038,5380,5323,5323,5801,5323,5323,5323,5336,5323,5323,5323,5345,5799,5323,5799,5326,5323,6105,5323,5323,5991,5774,6040,6034,5460,6041,5503,5518,5469,5486,6040,5516,5500,5502,5510,5506,6040,5496,5499,5461,5511,5505,5508,5470,6040,6040,6042,6041,6040,6040,6044,5513,6040,6043,6040,6043,5326,5515,5377,5497,5517,5488,5487,5470,5520,5522,5525,5525,5523,5526,5524,5552,5527,5527,5527,5527,5528,5530,5529,5530,5530,5530,5531,5532,5532,5533,5539,5539,5534,5536,5540,5538,5555,5539,5554,5557,5323,5323,5991,5993,5323,6040,6040,6040,6040,6282,6041,5542,5544,5546,5548,5549,5548,5549,5551,5552,5323,6039,5322,5323,5323,5996,6017,5969,5323,5323,5323,5997,5421,5490,5387,5323,5323,5323,5350,6014,5895,5927,5323,5578,5323,5323,5324,5821,5969,5672,5665,5323,5323,5324,5997,5845,5582,5333,5323,5323,5323,5353,5323,5675,6227,5323,5323,5323,5354,5325,5672,5672,5466,5323,5323,5586,5673,6081,5323,5323,5324,6013,5477,5323,5925,5926,5595,5323,6080,5671,5323,5597,6e3,5906,5603,5605,5606,5606,5606,5606,5608,5609,5611,5611,5611,5612,5611,5614,5616,5618,5618,5618,5625,5624,5625,5624,5624,5619,5620,5620,5620,5621,5622,5632,5633,5628,5629,5627,5628,5630,5631,5635,5636,5638,5323,5323,5996,6284,6007,5322,5323,5323,5323,5926,5704,5875,5719,5323,5670,5323,5323,5324,6028,5323,5808,5323,5905,5323,5323,5324,6216,5559,5868,5800,5323,5643,5323,5323,5323,5394,5323,5323,6002,5323,6290,5323,6002,5323,5323,5324,6300,6037,5571,5648,5645,5323,5323,5323,5395,5653,6078,5656,5323,5323,5997,5566,5323,5323,5764,5766,5323,5323,5998,5323,5323,6001,5323,5323,6010,5572,6087,5323,6086,5323,5323,5323,5780,5885,5719,5999,5699,5323,5323,5326,5830,5475,5662,5323,5323,5323,5415,5664,5323,5323,5323,5420,5403,5403,5403,5403,5911,5676,5676,5676,5676,5804,5323,5999,5323,5323,5323,5466,5570,5667,5342,5323,5323,6036,5934,5590,6001,5323,5323,5416,5418,5323,6139,6213,5323,5323,6039,5935,5420,5831,5560,5781,5845,5718,5845,5693,5342,5323,5323,6039,6279,5803,5797,5692,5924,5323,5323,5698,5728,5323,5323,6049,6174,6139,6213,5420,5575,5803,5797,6212,5923,5803,5797,6296,5923,5342,5725,5803,5797,5902,5323,5323,5326,6033,5391,5323,5575,5560,5781,5922,6131,5323,5323,5323,5780,5840,6001,5392,5323,5322,5323,5323,6103,5323,5323,6105,5342,6001,5323,5323,5483,5323,5803,5705,5342,5323,5323,5323,5558,5323,5323,5323,5566,5726,6167,5323,6095,5323,5323,5323,5573,5323,5323,5840,6001,5323,5323,6109,5685,6112,5700,5342,5323,5323,5583,5813,5560,5840,5323,5323,6138,5350,5323,5998,5323,5323,6141,5323,5323,6165,5323,5323,6083,5323,5323,6096,5333,5323,5323,5813,5349,5323,5323,5579,6105,5323,5323,5323,5678,5465,5323,5323,5323,5684,5323,5323,5409,6014,5732,5584,5734,5736,5739,5739,5739,5739,5740,5743,5739,5738,5739,5739,5742,5743,5743,5743,5744,5745,5745,5745,5745,5745,5747,5747,5747,5747,5749,5749,5749,5749,5750,5391,5892,5901,5869,5323,5753,5323,5323,5758,5323,6015,5770,5323,5323,6185,6189,5323,5762,5762,5323,5323,6199,5323,6199,5323,5323,5689,5769,5323,5323,6206,5323,5323,5690,5323,5323,5770,5779,5323,5323,5323,5753,5323,5323,5890,5323,5323,5350,6294,5323,6014,5324,6028,5921,5975,5323,5323,5362,5323,5323,5323,6275,5992,5918,5974,5976,5323,5892,5901,5707,5323,5336,5646,5785,5323,5323,5323,5786,5323,5791,5679,5681,5833,5493,6297,5800,5579,5897,5730,5323,5794,5795,5323,5323,6208,5323,5323,6218,6197,5800,5323,5323,5771,5323,6033,5391,5892,6129,5806,5323,5323,5323,5796,5394,5704,6001,5323,5323,5323,5582,5323,5820,5565,5891,5895,5323,5823,5824,5323,5323,6276,5323,5324,5792,5680,5391,5892,6106,5323,5323,5780,5323,5657,5466,5323,5336,5323,5324,5997,6289,5323,5323,5323,6028,5682,5491,6136,5800,5323,5323,5323,5778,5779,5566,5895,5833,5493,6298,5323,5799,5323,5323,5323,5798,5323,5997,5378,5566,5865,5466,5350,5323,5704,5719,5340,5323,5323,5323,5392,5323,5323,5323,5393,6037,5566,5895,5491,6136,5326,5830,5385,5323,5323,5390,5409,5780,5349,5323,5323,5375,5323,5323,5323,5996,5471,5375,5421,5490,6181,5800,5323,5323,6107,5566,5323,5323,5323,5800,5323,5323,6028,5323,5569,5466,5780,5323,5323,5323,5801,5707,5830,5475,6081,5877,5323,5323,5323,5813,5323,5323,5813,5323,5997,5566,5476,5876,5323,5323,5323,5806,5323,5342,5726,5877,5323,5323,5884,5877,5566,6092,5323,5801,5562,5323,5323,5323,5349,5574,5814,5876,5323,5323,5323,5574,5385,5323,5324,6100,6102,5323,5323,5323,6092,5323,5323,5688,5323,5801,5323,5323,5566,6049,5323,5323,5323,5815,5323,6167,5323,5323,5573,5558,5815,5323,5815,5323,5323,5815,5815,5815,5323,5323,5323,5820,6037,5323,6095,5323,6080,5323,6080,5323,5323,6037,5703,6124,5837,6095,5323,5323,5375,5562,5323,6095,5323,5688,5884,6028,5884,6093,6095,5688,5323,6187,5825,6186,5826,5579,5579,5579,5323,5324,6281,6110,5842,5825,5827,5828,5828,5828,5828,5848,5854,5853,5850,5853,5852,5856,5856,5856,5856,5860,5856,5860,5856,5857,5858,5858,5858,5858,5558,5835,5323,5323,5323,5839,5323,5323,5323,5640,5385,5998,5323,5323,5323,5864,5323,5323,5323,6175,5323,5323,5376,5972,5862,5323,5323,5323,5874,5798,5323,5323,5323,5878,5323,5323,5323,5654,5323,5767,5323,5323,5351,5336,5323,5883,5323,5323,5323,5884,5727,5411,5413,5323,5323,5392,5392,5392,6175,5323,5684,5562,5464,5927,5900,5592,5909,5463,5465,5809,5591,5591,5323,5323,5323,5885,5323,5806,5599,5323,5323,5323,5895,5323,5866,5334,5323,5328,5330,5322,5323,5323,5888,5323,5323,6175,5323,5796,5323,5350,5990,5323,5323,5323,5386,5927,5900,6176,5323,5334,5321,5323,5334,5323,5323,5323,6107,5323,5323,5323,5570,5474,6035,5378,5933,5465,5323,6038,5570,5407,5929,5480,5480,5480,5323,5809,6129,6001,5323,5334,5566,5726,5877,5390,5323,5420,5703,5385,5998,5323,5688,5884,5877,5323,5323,5394,5696,5326,6036,5933,5465,5863,5863,6176,5323,5323,5323,5899,5494,5323,5323,5323,5907,5390,5780,5599,5323,5335,5322,5334,5336,5323,5323,5801,5915,5323,5579,5323,5323,5323,5574,5323,5323,5323,5403,5403,5323,5884,5323,5323,5323,5674,5323,5884,5323,5574,5323,5569,5323,6107,5466,5707,5937,5323,5326,5323,5326,6019,5323,5886,5943,6008,5946,5946,5947,5945,5947,5946,5946,5951,5946,5950,5949,5953,5956,5955,5956,5956,5957,5959,5959,5960,5960,5961,5959,5959,5959,5962,5966,5966,5966,5966,5964,5965,5966,5966,5967,5323,5323,5323,5938,6025,5880,5723,5323,5323,5323,5912,5323,5998,5323,5323,5334,5336,5800,5989,5869,5999,5599,5695,5600,6095,5323,5759,6140,5986,5981,5983,5381,5988,5323,6123,5323,5323,5323,5576,6004,5323,5323,5323,5968,5389,5323,5323,5323,5989,5323,5323,5323,5363,5323,5323,5323,5385,5323,5388,5751,5323,5323,5420,5575,5323,6036,5421,5674,6027,6001,5323,5323,5421,6286,5803,5337,5562,5986,5346,6219,5323,5364,5323,5337,5873,5323,5324,6300,6038,5323,6006,5879,6288,6001,5323,6030,6007,6287,6170,5350,6037,5674,6027,5721,5367,5359,5579,5806,5323,6200,6196,6168,6170,5323,5323,5323,5992,5814,6169,6001,5323,5343,5323,5323,5323,5995,5323,5672,6027,5323,5348,5844,5720,5579,5806,5323,5342,5323,5323,5335,5800,6107,5574,5884,5323,5323,6032,5323,6026,6028,5323,5323,5674,6032,5323,5323,5323,6010,5489,5912,5323,5323,5589,5324,5998,5323,5323,5484,5323,5323,5800,5599,5323,5350,5361,5323,5323,5323,5707,5323,5912,5323,6080,5323,5345,5323,6038,5703,5806,5599,5323,6105,5323,5599,5323,6105,5813,6295,5877,5323,5350,5678,5465,5989,5780,5323,5323,5589,5323,5323,5323,5755,5570,6022,5754,5756,6021,6024,6047,5422,5423,5422,6046,5422,5422,5422,5422,6097,6051,6054,6053,6055,6057,6059,6059,6060,6061,6065,6059,6059,6059,6066,6066,6066,6062,6063,6061,6061,6061,6061,6068,6069,6071,5323,5323,5323,6032,6223,5378,5408,5703,5799,5342,6073,5558,5323,5323,5558,5420,5913,5323,5323,5323,6039,5323,5323,5323,5323,5322,5323,5323,5323,5324,5323,6096,5323,5323,5323,6080,5323,5336,5323,6075,5323,5327,5683,5940,5887,5323,6077,6085,5323,5355,5990,5323,5324,6285,6126,6094,6130,5323,6090,6107,5323,5361,5323,6038,5562,5323,5323,5818,5333,5323,5333,5323,6099,6101,5323,5323,5562,5323,5323,6104,5323,5323,5323,6105,5323,5323,5780,5989,6112,5924,5323,5323,5323,5472,5562,5323,5323,5672,6114,5323,5323,5323,5816,6001,5326,5352,6037,5934,5323,5323,5323,5909,5406,5832,6120,5323,5361,5573,5323,5410,5412,5414,5323,5323,5384,5558,5323,5323,5385,5333,5323,6117,6285,6119,6102,5323,6122,5323,6122,5323,5323,5323,6117,5323,5995,5385,5573,5322,5333,5323,5323,5574,5990,5323,5323,5593,6106,5832,5722,5706,6131,5323,5323,5641,5323,5817,5323,6128,5332,5323,5323,5659,5660,5672,5473,5323,5323,5668,5323,5323,6110,6126,6094,6130,5342,5323,5323,5323,5570,6007,5722,5706,6131,5323,5674,5466,5323,5323,5350,6037,6025,5722,5923,5342,5323,5323,5323,5703,5924,5323,5415,5417,5419,5323,5323,5421,5725,5803,5323,6133,6082,5342,5323,5323,5323,5579,5896,5323,5458,5323,5323,5324,5378,6092,5323,5672,6106,5884,5727,5323,5323,5323,6133,5323,6135,5323,5323,5672,5323,5323,5885,5342,5323,5323,5885,5323,5323,5323,6175,5323,6028,5323,5688,5323,5885,5323,5323,5885,6092,5323,6028,6028,6093,6093,6093,6093,6028,6039,5420,5326,5323,5813,5323,5333,5985,6039,5333,5323,5466,5345,5323,5326,6211,6001,5783,5558,5984,5811,6145,6150,6146,6146,6146,6146,6143,6144,6150,6146,6149,5709,6147,5709,6152,5709,5710,5711,5715,5712,5713,6154,6156,5714,6158,5715,5716,6162,6162,6160,6161,6162,6162,6162,6162,6172,6163,6164,5323,5323,5683,5323,5323,5323,5568,5722,5323,5940,5587,5845,5723,5323,5708,5323,5323,5684,5466,5323,5323,5323,6029,6209,5323,5323,6178,5323,5599,5323,5323,5689,5323,5323,6115,5323,6183,5788,5323,5787,5323,5323,5797,5846,5323,5323,5323,6180,5707,5323,5336,5684,5761,5323,5323,5341,5322,5815,5323,6276,6174,5323,6191,5323,5323,5702,5323,5323,5649,5323,5323,5704,5340,5323,5323,5326,5910,6195,5568,5931,5973,5323,6194,6196,5930,5781,5353,5323,5323,5333,5333,5333,5323,6202,6197,5323,5350,5351,5323,5482,5323,5323,5323,6214,5323,6010,5378,5568,6192,5781,6129,6131,5324,6011,6196,5481,5675,5863,6130,5342,5323,6206,5323,6206,5940,5846,5323,5323,5722,5924,5323,6039,5323,5323,5579,5579,5707,5323,5336,5815,5323,5323,6048,5323,5323,5574,5725,5803,5705,5323,6204,5323,5323,5323,6218,5923,5489,5895,5675,6129,5924,5675,5923,5323,5323,5323,5323,5574,5574,5574,5323,5323,5884,6028,5323,5323,6211,5323,5323,5763,5765,5323,5323,5326,5687,5797,5325,5323,5323,5323,5773,5775,5323,5323,5350,6105,6218,5923,5323,5323,5776,5323,5324,5335,5800,5323,5466,5345,5801,5915,5599,5323,5323,6028,5323,5323,5323,5814,5700,5335,5694,5323,5323,5789,5323,5335,5322,5323,5336,6091,6107,5322,5998,5323,5323,5801,6166,6095,5323,5796,5323,5467,5323,5323,5569,5323,5323,5323,5325,5323,5323,6031,5323,5990,5323,5323,5570,6197,5323,5350,5323,5323,5323,5410,6079,5796,5323,5323,5812,5323,5684,5796,5323,5684,5815,5323,5877,5782,5588,5323,6225,6226,6230,5813,6229,5567,5323,5867,5838,6232,5920,5492,6234,5920,5919,5919,6235,5920,6238,6237,6237,6240,6242,6243,6245,6247,6245,6249,6249,6257,6256,6257,6258,6250,6249,6250,6251,6252,6252,6260,6254,6253,6254,6252,6262,6262,6262,6263,6265,6267,6269,6270,6271,6273,5323,5323,5830,5814,5876,5466,5323,5323,6038,5323,5323,5601,6278,5323,5570,5323,5323,5323,5990,6088,6289,5323,5323,5871,5323,5329,5331,5323,5323,5889,5409,5323,5669,5323,5668,5895,5466,5323,5420,5801,5912,5800,5917,5869,6e3,5323,5574,6167,5323,5323,6167,5562,5941,5323,5323,5323,5893,5323,5466,5420,5323,5375,5479,5569,5323,5323,5830,5385,5323,6174,5323,5392,5323,5392,5323,5349,5323,5323,5323,5651,5324,6292,5406,5568,5996,5462,5571,5686,5323,5672,5574,5323,5570,5466,6138,5571,5802,5323,5323,5323,5895,5420,5323,5375,5478,5323,5323,5323,5904,5323,5323,5996,5471,6302,5323,5323,5929,6112,5406,5322,5323,5323,5970,5323,5323,5573,6038,5323,5323,5323,6106,5324,5323,5323,5323,5977,5979,5912,5334,5323,5323,5334,5566,5323,8,262144,0,0,1,0,2,0,3,240,19456,262144,8192,0,4,8,0,5,1048576,1073741824,2147483648,1073741824,0,6,32,0,7,1075838976,2097152,0,8,8,16,0,9,4456448,4194560,4196352,-2143289344,-2143289344,4194304,0,12,0,13,37748736,541065216,541065216,-2143289344,4198144,4196352,276901888,8540160,4194304,128,0,21,16,32,96,0,23,8425488,4194304,1024,0,24,0,29,0,32,256,0,40,0,41,37748736,742391808,742391808,775946240,-1371537408,775946240,64,64,96,64,128,128,512,0,59,140224,5505024,-1887436800,0,63,351232,7340032,-2030043136,0,64,256,256,257,775946240,775946240,171966464,171966464,775946240,239075328,-1405091840,-1371537408,239075328,171966464,2097216,4194368,4718592,4194400,541065280,4194368,4720640,541589504,4194368,-2143289280,4194368,-2143285440,-2143285408,-2143285408,-2109730976,-2143285408,775946336,775946304,776470528,-1908404384,775946304,775946304,-1908404384,1536,1792,536936448,16,48,64,896,8192,131072,0,4036,1048592,2097168,16,64,65536,131072,1024,98304,131072,32768,256,2048,2048,12288,0,300,4203520,268435472,16,528,16,1024,229376,25165824,25165824,33554432,2147483648,262160,16,163577856,536936448,20,24,560,48,80,1048592,1048592,16,2097168,2097168,3146256,2097680,3145744,3146256,16,2098064,17,17,528,524304,1049104,2228784,-161430188,-161429680,-161429676,-161430188,-161430188,-161429676,-161429676,-161429675,-161349072,-161349072,-161347728,-161347728,-161298572,-161298576,-160299088,-161298576,-160299084,-161298572,-161298572,-160774288,21,21,53,146804757,146812949,146862101,146863389,146863389,146863421,-161429740,-161429676,-160905388,-18860267,-160774284,-160774284,-18729163,0,4096,65536,262144,1048576,0,96,96,256,1024,1024,2048,0,128,1024,4096,0,256,1536,2147483648,159383552,0,8192,8392704,142606336,0,9476,134218240,1,32768,1048576,512,131072,33554432,-2013265920,0,17408,131328,131072,0,1073741825,0,1073741824,8,124160,16777216,1073774592,1226014816,100665360,100665360,-2046818288,1091799136,-2044196848,1091799136,1091799136,1091803360,1091799136,1158908e3,1158908001,1192462432,1192462448,1192462448,1870630720,1870630720,1870647104,1870647104,1200851056,1200851056,1091799393,1870638964,1870638932,1870638932,1870638933,1870630736,1870630736,1870630740,1870630740,1870630736,1879019376,1870630740,1879019376,1879019380,131328,0,58624,1048576,1224736768,1090519040,0,66048,235712,0,77824,0,1157627904,1191182336,0,82432,231744,0,131584,503616,1862270976,1862270976,1048576,150994944,2048,100663296,-1073741824,6144,0,150528,0,164096,0,32768,32768,65536,524288,524288,32,384,512,5120,8192,16384,0,512,2048,16384,32768,0,520,520,4194304,251658240,536870912,262144,2621440,-1073741824,8192,1073741824,262144,2097152,134217728,2048,524288,2097152,67108864,134217728,0,12289,12289,1098920193,1132474625,1124085761,1124085761,1132474625,1132474625,1400975617,117440512,134217728,268435456,4194432,3145728,16777216,2147483648,1536,65536,16777216,1073741824,1073741824,33554432,536870912,512,50331649,1050624,262144,512,1275208192,541065224,4194312,4194312,4194344,4203820,-869654016,-869654016,1279402504,1279402504,2143549415,2143549415,2143549423,2143549423,0,284672,1,16777216,1073743872,268435968,229376,1050624,0,331776,2760704,-872415232,0,495424,7864320,1862270976,0,139264,4333568,1275068416,0,339968,999,29619200,2113929216,0,511808,1007,1007,0,524288,1048576,4096,1048588,44,0,605503,1066401792,0,867391,1,102,384,110,110,0,1048576,2097152,268435456,536870912,0,2048,262144,524288,96,0,536870912,2048,1048576,8388608,4096,12289,0,1024,65536,0,1536,0,832,1,6,2097152,104,104,0,1049088,1049088,12845065,12845065,4,256,3584,16384,229376,8192,67108864,32,4100,1024,2097152,1073741824,1049088,270532608,2097152,2097152,4194304,2147483648,147193865,5505537,5591557,5587465,5591557,5587457,5587457,147202057,13894153,13894153,-1881791493,-1881791493,13894153,81003049,512,1048576,33554432,8192,33554432,1024,524288,134217728,1073741824,1,5505024,86528,9,8388608,16777216,268435456,0,16384,65536,4194304,4194432,75497472,0,2097152,16777216,16384,-2113929216,0,260,512,1024,8192,4096,4096,8192,8192,9216,8,8388608,33554432,67108864,1073741824,81920,0,2621440,0,57344,2,56,64,524288,0,576,524288,536870912,8396800,4194304,25165824,92274688,25165824,100663296,134217728,536870912,1073741824,32768,131072,1048576,128,2048,77824,524288,64,384,8192,66048,8396800,0,3145728,2,16384,262144,524288,268567040,72618005,68423701,68423701,68489237,-2079059883,-2079059883,68423701,85200917,68425749,68423703,85200919,69488664,69488664,70537244,70537245,70537245,-2076946339,70537245,70539293,-2022351681,-2022351681,-2022351809,-2022351809,0,4194304,50331648,1073741824,266240,1048576,100663296,402653184,1610612736,0,605247,1058013184,1073741824,-2080374784,-2080374784,268288,0,4243456,0,5242880,282624,0,8388608,0,999,259072,4194304,4194304,1,2,4,0,2147483648,2147483648,0,-2046820352,28,3145728,32,3072,16384,2113544,1,14,16,14,32,512,139264,4,2097152,4,50331648,128,268435968,268435968,268436032,256,32768,4194304,16777216,0,15,32,1,4,16,2,8,32,64,0,16,16,20,16,28,2097552,256,536871168,256,65536,268435456,-1879046334,1073744256,-1879046334,-1879046334,-1879046326,-1879046326,-1845491902,-1878784182,268444480,268444480,2100318145,2100318145,2100318149,2100318149,268436289,268436288,268436288,2100318145,2100326337,2100318145,2100326337,2100326337,1,1024,1856,2147483648,2432,0,9437184,0,131072,16777216,536870912,9216,1864,0,16252928,0,148480,0,301989888,0,16777216,16777216,67108864,0,384,-1879046336,1,4032,19939328,2080374784,0,19947520,0,33554432,0,262144,1,128,3072,524288,268435456,196608,0,58720256,1,64,16384,19922944,2080374784,24576,0,67108864,536870912,16384,3145728,8,33554432,134217728,805306368,1073741824,2048,3145728,32768,33554432,268435456,134218752,0,83886080,0,229376,1124073474,1124073472,1124073488,1124073472,1124073472,12289,1392574464,1124073472,1258292224,1073754113,12289,1124085777,1124085761,1258304513,1124085761,1098920209,1132474625,2132622399,2132622399,2132360255,2132360255,2140749119,0,100663296,0,65536,6291456,50331648,2147483648,2140749119,2140749119,49152,0,134217728,2147483648,0,318767104,12545,25165824,268435456,12305,13313,12561,0,134348800,134348800,78081,327155712,1,12288,65536,1,30,32,1024,134217728,288,8388608,134217728,128,131072,33554432,1073741824,256,8388608,327680,0,184549376,16384,4194304,117440512,0,229440,14,1024,1,12,3145728,128,134217728,8,536870912,68157440,137363456,0,243269632,137363456,66,66,100680704,25165824,26214400,92274688,25165952,92274688,92274688,93323264,92274720,93323264,25165890,100721664,25165890,100721928,100721928,100787464,100853e3,125977600,125977600,127026176,281843,281843,1330419,281843,126895104,125846528,125846528,125846560,1330419,1330419,5524723,5524723,39079155,72633587,72633587,5524723,92556531,93605107,93605107,127290611,97799411,127290611,131484915,58368,0,268435456,189696,0,268500992,2,112,48,112,128,3584,65536,7340032,50331648,0,231488,2,48,32,4096,4194304,67108864,402653184,536870912,2,16,128,262144],r.TOKEN=["(0)","PragmaContents","DirCommentContents","DirPIContents","CDataSection","Wildcard","EQName","URILiteral","IntegerLiteral","DecimalLiteral","DoubleLiteral","StringLiteral","PredefinedEntityRef","'\"\"'","EscapeApos","ElementContentChar","QuotAttrContentChar","AposAttrContentChar","PITarget","NCName","QName","S","S","CharRef","CommentContents","EOF","'!'","'!='","'\"'","'#'","'#)'","'$'","'%'","''''","'('","'(#'","'(:'","')'","'*'","'*'","'+'","','","'-'","'-->'","'.'","'..'","'/'","'//'","'/>'","':'","':)'","'::'","':='","';'","'<'","'<!--'","'</'","'<<'","'<='","'<?'","'='","'>'","'>='","'>>'","'?'","'?>'","'@'","'NaN'","'['","']'","'after'","'all'","'allowing'","'ancestor'","'ancestor-or-self'","'and'","'any'","'append'","'array'","'as'","'ascending'","'at'","'attribute'","'base-uri'","'before'","'boundary-space'","'break'","'by'","'case'","'cast'","'castable'","'catch'","'check'","'child'","'collation'","'collection'","'comment'","'constraint'","'construction'","'contains'","'content'","'context'","'continue'","'copy'","'copy-namespaces'","'count'","'decimal-format'","'decimal-separator'","'declare'","'default'","'delete'","'descendant'","'descendant-or-self'","'descending'","'diacritics'","'different'","'digit'","'distance'","'div'","'document'","'document-node'","'element'","'else'","'empty'","'empty-sequence'","'encoding'","'end'","'entire'","'eq'","'every'","'exactly'","'except'","'exit'","'external'","'first'","'following'","'following-sibling'","'for'","'foreach'","'foreign'","'from'","'ft-option'","'ftand'","'ftnot'","'ftor'","'function'","'ge'","'greatest'","'group'","'grouping-separator'","'gt'","'idiv'","'if'","'import'","'in'","'index'","'infinity'","'inherit'","'insensitive'","'insert'","'instance'","'integrity'","'intersect'","'into'","'is'","'item'","'json'","'json-item'","'key'","'language'","'last'","'lax'","'le'","'least'","'let'","'levels'","'loop'","'lowercase'","'lt'","'minus-sign'","'mod'","'modify'","'module'","'most'","'namespace'","'namespace-node'","'ne'","'next'","'no'","'no-inherit'","'no-preserve'","'node'","'nodes'","'not'","'object'","'occurs'","'of'","'on'","'only'","'option'","'or'","'order'","'ordered'","'ordering'","'paragraph'","'paragraphs'","'parent'","'pattern-separator'","'per-mille'","'percent'","'phrase'","'position'","'preceding'","'preceding-sibling'","'preserve'","'previous'","'processing-instruction'","'relationship'","'rename'","'replace'","'return'","'returning'","'revalidation'","'same'","'satisfies'","'schema'","'schema-attribute'","'schema-element'","'score'","'self'","'sensitive'","'sentence'","'sentences'","'skip'","'sliding'","'some'","'stable'","'start'","'stemming'","'stop'","'strict'","'strip'","'structured-item'","'switch'","'text'","'then'","'thesaurus'","'times'","'to'","'treat'","'try'","'tumbling'","'type'","'typeswitch'","'union'","'unique'","'unordered'","'updating'","'uppercase'","'using'","'validate'","'value'","'variable'","'version'","'weight'","'when'","'where'","'while'","'wildcards'","'window'","'with'","'without'","'word'","'words'","'xquery'","'zero-digit'","'{'","'{{'","'{|'","'|'","'||'","'|}'","'}'","'}}'"]}),define("ace/mode/xquery/visitors/SyntaxHighlighter",["require","exports","module"],function(e,t,n){var r=t.SyntaxHighlighter=function(e,t){var n=["after","ancestor","ancestor-or-self","and","as","ascending","attribute","before","case","cast","castable","child","collation","comment","copy","count","declare","default","delete","descendant","descendant-or-self","descending","div","document","document-node","element","else","empty","empty-sequence","end","eq","every","except","first","following","following-sibling","for","function","ge","group","gt","idiv","if","then","import","insert","instance","intersect","into","is","item","last","le","let","lt","mod","modify","module","namespace","namespace-node","ne","node","only","or","order","ordered","parent","preceding","preceding-sibling","processing-instruction","rename","replace","return","satisfies","schema-attribute","schema-element","self","some","stable","start","switch","text","to","treat","try","typeswitch","union","unordered","validate","where","with","xquery","contains","paragraphs","sentences","times","words","by","collection","allowing","at","base-uri","boundary-space","break","catch","construction","context","continue","copy-namespaces","decimal-format","encoding","exit","external","ft-option","in","index","integrity","lax","nodes","option","ordering","revalidation","schema","score","sliding","strict","tumbling","type","updating","value","variable","version","while","constraint","loop","returning","append","array","json-item","object","structured-item","when","next","previous","window"],r=["cdata","comment","tag"],i={lines:[[]],states:[]};this.getTokens=function(){return this.visit(t),i},this.addTokens=function(e,t){var n=e.split("\n"),s="start";for(var o in n){o>0&&(i.lines.push([]),i.states.push(s));var e=n[o],u=i.lines.length-1,a=i.lines[u];a.push({value:e,type:t}),s=r.indexOf(t)!=-1?t:"start"}},this.getNodeValue=function(t){return e.substring(t.begin,t.end)},this.DirPIConstructor=function(e){var t=this.getNodeValue(e);return this.addTokens(t,"xml_pe"),!0},this.DirElemConstructor=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"||n.name==="QName"){var r=this.getNodeValue(n);this.addTokens(r,"meta.tag")}else this.visit(n)}return!0},this.DirAttributeList=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="QName"){var r=this.getNodeValue(n);this.addTokens(r,"meta.tag")}else this.visit(n)}return!0},this.DirAttributeValue=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"string")}else this.visit(n)}return!0},this.QuotAttrContentChar=function(e){var t=this.getNodeValue(e);return this.addTokens(t,"string"),!0},this.StringConcatExpr=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"keyword.operator")}else this.visit(n)}return!0},this.AdditiveExpr=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"keyword.operator")}else this.visit(n)}return!0},this.MultiplicativeExpr=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"keyword.operator")}else this.visit(n)}return!0},this.UnaryExpr=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"keyword.operator")}else this.visit(n)}return!0},this.GeneralComp=function(e){for(var t in e.children){var n=e.children[t];if(n.name==="TOKEN"){var r=this.getNodeValue(n);this.addTokens(r,"keyword.operator")}else this.visit(n)}return!0},this.NumericLiteral=function(e){for(var t in e.children){var n=e.children[t];if(n.name!="TEXT"){var r=this.getNodeValue(n);this.addTokens(r,"constant")}else this.visit(n)}return!0},this.DirCommentConstructor=function(e){for(var t in e.children){var n=e.children[t];if(n.name!="TEXT"){var r=this.getNodeValue(n);this.addTokens(r,"comment")}else this.visit(n)}return!0},this.Comment=function(e){return!0},this.URILiteral=function(e){var t=this.getNodeValue(e);return this.addTokens(t,"string"),!0},this.StringLiteral=function(e){var t=this.getNodeValue(e);return this.addTokens(t,"string"),!0},this.EQName=function(e){var t=this.getNodeValue(e);return this.addTokens(t,"support.function"),!0},this.TOKEN=function(e){var t=this.getNodeValue(e);return n.indexOf(t)>-1?this.addTokens(t,"keyword"):t!=="$"&&this.addTokens(t,"text"),!0},this.WS=function(e){var t=this.getNodeValue(e),n=t.indexOf("(:");while(n>-1){var r=t.substring(0,n);this.addTokens(r,"text");var i=t.substring(n).indexOf(":)")+3,s=t.substring(n,i);this.addTokens(s,"comment"),t=t.substring(i),n=t.indexOf("(:")}this.addTokens(t,"text")},this.EverythingElse=function(e){if(e.children.length===0){var t=this.getNodeValue(e);return this.addTokens(t,"text"),!0}return!1},this.visit=function(e){var t=e.name,n=!1;typeof this[t]=="function"?n=this[t](e)===!0?!0:!1:n=this.EverythingElse(e)===!0?!0:!1;if(!n&&typeof e.children=="object"){var r=!1;for(var i=0;i<e.children.length;i++){var s=e.children[i],o=this.getNodeValue(s);s.name==="TOKEN"&&o==="$"?r=!0:r?(this.addTokens("$"+o,"variable"),r=!1):this.visit(s)}}}}}) \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/CHANGES.md b/ehcp/net2ftp/plugins/ckeditor/CHANGES.md new file mode 100644 index 0000000..27722e8 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/CHANGES.md @@ -0,0 +1,56 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.0.1 + +Fixed issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in new Moono skin. +* Accessibility issues (mainly on inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* Magic-line: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic-line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic-line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic-line doesn't disappear on `mouseout` in the specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [Webkit] Cut & paste simple unformatted text generates inline wrapper in Webkits. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS-Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Context menu open destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates JS error in inline mode when editor attached to header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div based editor puts editing area under bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page's `box-sizing` style shouldn't influence editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): Forms plugin adds context menu listeners only on supported input types. Added support for `tel, email, search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog doesn't populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in nested table removes outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Can't edit dialog fields on editor initialized in jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialogs do not show completely in small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a div stay permanently even after user exists editing the div. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing format combo by clicking on its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected image. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>`. +* [#9709](http://dev.ckeditor.com/ticket/9709): PasteFromWord should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed color dialog dependency from table tools. +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly on Accessibility Instructions dialog. +* [#9771](http://dev.ckeditor.com/ticket/9771): [Webkit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] onChange isn't fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When we open toolbar menu for the first time & press down arrow key, focus goes to next toolbar button instead of menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): Elements path shouldn't be initialized on inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): `Editor#addRemoveFormatFilter` is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of `pasteFromWordCleanupFile` config is now taken from instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "live preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes"" diff --git a/ehcp/net2ftp/plugins/ckeditor/LICENSE.md b/ehcp/net2ftp/plugins/ckeditor/LICENSE.md new file mode 100644 index 0000000..d447c67 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/ehcp/net2ftp/plugins/ckeditor/README.md b/ehcp/net2ftp/plugins/ckeditor/README.md new file mode 100644 index 0000000..68f930b --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/ehcp/net2ftp/plugins/ckeditor/build-config.js b/ehcp/net2ftp/plugins/ckeditor/build-config.js new file mode 100644 index 0000000..70165bc --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/build-config.js @@ -0,0 +1,138 @@ + +/** + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time at http://ckeditor.com/builder to build CKEditor again. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'moono', + preset: 'standard', + ignore: [ + 'dev', + '.gitignore', + '.gitattributes', + 'README.md', + '.mailmap' + ], + plugins : { + 'about' : 1, + 'a11yhelp' : 1, + 'basicstyles' : 1, + 'blockquote' : 1, + 'clipboard' : 1, + 'contextmenu' : 1, + 'resize' : 1, + 'toolbar' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'filebrowser' : 1, + 'floatingspace' : 1, + 'format' : 1, + 'htmlwriter' : 1, + 'horizontalrule' : 1, + 'wysiwygarea' : 1, + 'image' : 1, + 'indent' : 1, + 'link' : 1, + 'list' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'pastetext' : 1, + 'pastefromword' : 1, + 'removeformat' : 1, + 'sourcearea' : 1, + 'specialchar' : 1, + 'scayt' : 1, + 'stylescombo' : 1, + 'tab' : 1, + 'table' : 1, + 'tabletools' : 1, + 'undo' : 1, + 'wsc' : 1, + 'dialog' : 1, + 'dialogui' : 1, + 'menu' : 1, + 'floatpanel' : 1, + 'panel' : 1, + 'button' : 1, + 'popup' : 1, + 'richcombo' : 1, + 'listblock' : 1, + 'fakeobjects' : 1, + 'menubutton' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'eu' : 1, + 'bn' : 1, + 'bs' : 1, + 'bg' : 1, + 'ca' : 1, + 'zh-cn' : 1, + 'zh' : 1, + 'hr' : 1, + 'cs' : 1, + 'da' : 1, + 'nl' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'et' : 1, + 'fo' : 1, + 'fi' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'ka' : 1, + 'de' : 1, + 'el' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hu' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lv' : 1, + 'lt' : 1, + 'mk' : 1, + 'ms' : 1, + 'mn' : 1, + 'no' : 1, + 'nb' : 1, + 'fa' : 1, + 'pl' : 1, + 'pt-br' : 1, + 'pt' : 1, + 'ro' : 1, + 'ru' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sk' : 1, + 'sl' : 1, + 'es' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'cy' : 1, + } +}; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/ckeditor.js b/ehcp/net2ftp/plugins/ckeditor/ckeditor.js new file mode 100644 index 0000000..7b0306c --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/ckeditor.js @@ -0,0 +1,809 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var b={timestamp:"D08E",version:"4.0.1",revision:"d02739be4b",rnd:Math.floor(900*Math.random())+100,_:{pending:[]},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var b=document.getElementsByTagName("script"),d=0;d<b.length;d++){var c=b[d].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(c){a=c[1];break}}-1==a.indexOf(":/")&&(a=0===a.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+a:location.href.match(/^[^\?]*\/(?:)/)[0]+ +a);if(!a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return a}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a, +!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),b())}catch(d){}}function b(){for(var a;a=d.shift();)a()}var d=[];return function(b){d.push(b);"complete"===document.readyState&&setTimeout(a,1);if(1==d.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b= +!window.frameElement}catch(e){}if(document.documentElement.doScroll&&b){var c=function(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(c,1);return}a()};c()}}}}()},c=window.CKEDITOR_GETURL;if(c){var a=b.url;b.url=function(f){return c.call(b,f)||a.call(b,f)}}return b}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(b){var c=CKEDITOR.event.prototype,a;for(a in c)b[a]==void 0&&(b[a]=c[a])},CKEDITOR.event.prototype=function(){function b(f){var b=c(this);return b[f]||(b[f]=new a(f))}var c=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},a=function(a){this.name=a;this.listeners=[]};a.prototype={getListenerIndex:function(a){for(var b=0,d=this.listeners;b<d.length;b++)if(d[b].fn==a)return b;return-1}}; +return{define:function(a,e){var d=b.call(this,a);CKEDITOR.tools.extend(d,e,true)},on:function(a,e,d,c,k){function h(b,l,o,n){b={name:a,sender:this,editor:b,data:l,listenerData:c,stop:o,cancel:n,removeListener:m};return e.call(d,b)===false?false:b.data}function m(){o.removeListener(a,e)}var n=b.call(this,a);if(n.getListenerIndex(e)<0){n=n.listeners;d||(d=this);isNaN(k)&&(k=10);var o=this;h.fn=e;h.priority=k;for(var l=n.length-1;l>=0;l--)if(n[l].priority<=k){n.splice(l+1,0,h);return{removeListener:m}}n.unshift(h)}return{removeListener:m}}, +once:function(){var a=arguments[1];arguments[1]=function(b){b.removeListener();return a.apply(this,arguments)};return this.on.apply(this,arguments)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},d=0,g=function(){d=1};return function(k,h,m){var n=c(this)[k],k=a,o=d;a=d=0;if(n){var l=n.listeners;if(l.length)for(var l=l.slice(0),j,q=0;q<l.length;q++){if(n.errorProof)try{j=l[q].call(this, +m,h,b,g)}catch(y){}else j=l[q].call(this,m,h,b,g);j===false?d=1:typeof j!="undefined"&&(h=j);if(a||d)break}}h=d?false:typeof h=="undefined"?true:h;a=k;d=o;return h}}(),fireOnce:function(a,b,d){b=this.fire(a,b,d);delete c(this)[a];return b},removeListener:function(a,b){var d=c(this)[a];if(d){var g=d.getListenerIndex(b);g>=0&&d.listeners.splice(g,1)}},removeAllListeners:function(){var a=c(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=c(this)[a])&&a.listeners.length>0}}}()); +CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(b,c){b in{instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fire.call(this,b,c,this)},CKEDITOR.editor.prototype.fireOnce=function(b,c){b in{instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fireOnce.call(this,b,c,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,a={ie:eval("/*@cc_on!@*/false"),opera:!!c&&c.version,webkit:b.indexOf(" applewebkit/")>-1,air:b.indexOf(" adobeair/")>-1,mac:b.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat",mobile:b.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(b),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,b=window.location.hostname;return a!=b&&a!="["+b+"]"},secure:location.protocol== +"https:"};a.gecko=navigator.product=="Gecko"&&!a.webkit&&!a.opera;if(a.webkit)b.indexOf("chrome")>-1?a.chrome=true:a.safari=true;var f=0;if(a.ie){f=a.quirks||!document.documentMode?parseFloat(b.match(/msie (\d+)/)[1]):document.documentMode;a.ie9Compat=f==9;a.ie8Compat=f==8;a.ie7Compat=f==7;a.ie6Compat=f<7||a.quirks}if(a.gecko){var e=b.match(/rv:([\d\.]+)/);if(e){e=e[1].split(".");f=e[0]*1E4+(e[1]||0)*100+(e[2]||0)*1}}a.opera&&(f=parseFloat(c.version()));a.air&&(f=parseFloat(b.match(/ adobeair\/(\d+)/)[1])); +a.webkit&&(f=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]));a.version=f;a.isCompatible=a.iOS&&f>=534||!a.mobile&&(a.ie&&f>6||a.gecko&&f>=10801||a.opera&&f>=9.5||a.air&&f>=1||a.webkit&&f>=522||false);a.cssClass="cke_browser_"+(a.ie?"ie":a.gecko?"gecko":a.opera?"opera":a.webkit?"webkit":"unknown");if(a.quirks)a.cssClass=a.cssClass+" cke_browser_quirks";if(a.ie){a.cssClass=a.cssClass+(" cke_browser_ie"+(a.quirks||a.version<7?"6":a.version));if(a.quirks)a.cssClass=a.cssClass+" cke_browser_iequirks"}if(a.gecko)if(f< +10900)a.cssClass=a.cssClass+" cke_browser_gecko18";else if(f<=11E3)a.cssClass=a.cssClass+" cke_browser_gecko19";if(a.air)a.cssClass=a.cssClass+" cke_browser_air";return a}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var b=document.createElement("script");b.type="text/javascript";b.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(b)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(b){(this._.pending||(this._.pending=[])).push(b)};(function(){CKEDITOR.domReady(function(){var b= +CKEDITOR.loadFullCore,c=CKEDITOR.loadFullCoreTimeout;if(b){CKEDITOR.status="basic_ready";b&&b._load?b():c&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},c*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var b=[],c=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.opera?"-o-":CKEDITOR.env.ie?"-ms-":"";CKEDITOR.on("reset",function(){b=[]});CKEDITOR.tools={arrayCompare:function(a,b){if(!a&&!b)return true;if(!a||!b||a.length!=b.length)return false;for(var e=0;e<a.length;e++)if(a[e]!=b[e])return false;return true},clone:function(a){var b;if(a&&a instanceof Array){b=[];for(var e=0;e<a.length;e++)b[e]=this.clone(a[e]);return b}if(a===null||typeof a!="object"||a instanceof +String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp)return a;b=new a.constructor;for(e in a)b[e]=this.clone(a[e]);return b},capitalize:function(a){return a.charAt(0).toUpperCase()+a.substring(1).toLowerCase()},extend:function(a){var b=arguments.length,e,d;if(typeof(e=arguments[b-1])=="boolean")b--;else if(typeof(e=arguments[b-2])=="boolean"){d=arguments[b-1];b=b-2}for(var c=1;c<b;c++){var k=arguments[c],h;for(h in k)if(e===true||a[h]==void 0)if(!d||h in d)a[h]= +k[h]}return a},prototypedCopy:function(a){var b=function(){};b.prototype=a;return new b},isArray:function(a){return!!a&&a instanceof Array},isEmpty:function(a){for(var b in a)if(a.hasOwnProperty(b))return false;return true},cssVendorPrefix:function(a,b,e){if(e)return c+a+":"+b+";"+a+":"+b;e={};e[a]=b;e[c+a]=b;return e},cssStyleToDomStyle:function(){var a=document.createElement("div").style,b=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a== +"float"?b:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),b,e=[],c=0;c<a.length;c++)if(b=a[c])/@import|[{}]/.test(b)?e.push("<style>"+b+"</style>"):e.push('<link type="text/css" rel=stylesheet href="'+b+'">');return e.join("")},htmlEncode:function(a){return(""+a).replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<")},htmlEncodeAttr:function(a){return a.replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},getNextNumber:function(){var a= +0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,b){var e=b(a);e.prototype=a.prototype;return e},setTimeout:function(a,b,e,c,g){g||(g=window);e||(e=g);return g.setTimeout(function(){c?a.apply(e,[].concat(c)):a.apply(e)},b||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g; +return function(b){return b.replace(a,"")}}(),indexOf:function(a,b){if(typeof b=="function")for(var c=0,d=a.length;c<d;c++){if(b(a[c]))return c}else{if(a.indexOf)return a.indexOf(b);c=0;for(d=a.length;c<d;c++)if(a[c]===b)return c}return-1},search:function(a,b){var c=CKEDITOR.tools.indexOf(a,b);return c>=0?a[c]:null},bind:function(a,b){return function(){return a.apply(b,arguments)}},createClass:function(a){var b=a.$,c=a.base,d=a.privates||a._,g=a.proto,a=a.statics;!b&&(b=function(){c&&this.base.apply(this, +arguments)});if(d)var k=b,b=function(){var a=this._||(this._={}),b;for(b in d){var f=d[b];a[b]=typeof f=="function"?CKEDITOR.tools.bind(f,this):f}k.apply(this,arguments)};if(c){b.prototype=this.prototypedCopy(c.prototype);b.prototype.constructor=b;b.base=c;b.baseProto=c.prototype;b.prototype.base=function(){this.base=c.prototype.base;c.apply(this,arguments);this.base=arguments.callee}}g&&this.extend(b.prototype,g,true);a&&this.extend(b,a,true);return b},addFunction:function(a,f){return b.push(function(){return a.apply(f|| +this,arguments)})-1},removeFunction:function(a){b[a]=null},callFunction:function(a){var f=b[a];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+"")+"px";return a.test(b)?b:c||""}}(),convertToPx:function(){var a;return function(b){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document); +CKEDITOR.document.getBody().append(a)}if(!/%$/.test(b)){a.setStyle("width",b);return a.$.clientWidth}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b<c;b++){var d=arguments[b];try{a=d();break}catch(g){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var b=arguments,c=this;window.setTimeout(function(){a.apply(c,b)},0)}},normalizeCssText:function(a,b){var c=[], +d,g=CKEDITOR.tools.parseCssText(a,true,b);for(d in g)c.push(d+":"+g[d]);c.sort();return c.length?c.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,b,c,g){a=[b,c,g];for(b=0;b<3;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,b,c){var d={};if(c){c=new CKEDITOR.dom.element("span");c.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(c.getAttribute("style")||"")}if(!a|| +a==";")return d;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){if(b){c=c.toLowerCase();c=="font-family"&&(e=e.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));e=CKEDITOR.tools.trim(e)}d[c]=e});return d}}})(); +CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,c=function(a,b){for(var f=CKEDITOR.tools.clone(a),l=1;l<arguments.length;l++){var b=arguments[l],j;for(j in b)delete f[j]}return f},a={},f={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},g={},k={"#":1},h={center:1,dir:1,noframes:1}; +b(a,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(f,e,a,h);c={a:c(a,{a:1,button:1}),abbr:a,address:f, +area:g,article:b({style:1},f),aside:b({style:1},f),audio:b({source:1,track:1},f),b:a,base:g,bdi:a,bdo:a,blockquote:f,body:f,br:g,button:c(a,{a:1,button:1}),canvas:a,caption:f,cite:a,code:a,col:g,colgroup:{col:1},command:g,datalist:b({option:1},a),dd:f,del:a,details:b({summary:1},f),dfn:a,div:b({style:1},f),dl:{dt:1,dd:1},dt:f,em:a,embed:g,fieldset:b({legend:1},f),figcaption:f,figure:b({figcaption:1},f),footer:f,form:f,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,head:b({title:1,base:1},d),header:f,hgroup:{h1:1, +h2:1,h3:1,h4:1,h5:1,h6:1},hr:g,html:b({head:1,body:1},f,d),i:a,iframe:k,img:g,input:g,ins:a,kbd:a,keygen:g,label:a,legend:a,li:f,link:g,map:f,mark:a,menu:b({li:1},f),meta:g,meter:c(a,{meter:1}),nav:f,noscript:b({link:1,meta:1,style:1},a),object:b({param:1},a),ol:{li:1},optgroup:{option:1},option:k,output:a,p:a,param:g,pre:a,progress:c(a,{progress:1}),q:a,rp:a,rt:a,ruby:b({rp:1,rt:1},a),s:a,samp:a,script:k,section:b({style:1},f),select:{optgroup:1,option:1},small:a,source:g,span:a,strong:a,style:k, +sub:a,summary:a,sup:a,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:f,textarea:k,tfoot:{tr:1},th:f,thead:{tr:1},time:c(a,{time:1}),title:k,tr:{th:1,td:1},track:g,u:a,ul:{li:1},"var":a,video:b({source:1,track:1},f),wbr:g,acronym:a,applet:b({param:1},f),basefont:g,big:a,center:f,dialog:g,dir:{li:1},font:a,isindex:g,noframes:f,strike:a,tt:a};b(c,{$block:b({audio:1,dd:1,dt:1,li:1,video:1},e,h),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1, +fieldset:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:a,$list:{dl:1,ol:1, +ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:b({body:1,head:1,html:1},c.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1, +sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return c}();CKEDITOR.dom.event=function(b){this.$=b}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var b=this.getKey();if(this.$.ctrlKey||this.$.metaKey)b=b+CKEDITOR.CTRL;this.$.shiftKey&&(b=b+CKEDITOR.SHIFT);this.$.altKey&&(b=b+CKEDITOR.ALT);return b},preventDefault:function(b){var c=this.$;c.preventDefault?c.preventDefault():c.returnValue=false;b&&this.stopPropagation()},stopPropagation:function(){var b=this.$;b.stopPropagation?b.stopPropagation():b.cancelBubble=true},getTarget:function(){var b= +this.$.target||this.$.srcElement;return b?new CKEDITOR.dom.node(b):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var b=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(b.documentElement.scrollLeft||b.body.scrollLeft),y:this.$.pageY||this.$.clientY+(b.documentElement.scrollTop||b.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(b){if(b)this.$=b}; +CKEDITOR.dom.domObject.prototype=function(){var b=function(b,a){return function(f){typeof CKEDITOR!="undefined"&&b.fire(a,new CKEDITOR.dom.event(f))}};return{getPrivate:function(){var b;if(!(b=this.getCustomData("_")))this.setCustomData("_",b={});return b},on:function(c){var a=this.getCustomData("_cke_nativeListeners");if(!a){a={};this.setCustomData("_cke_nativeListeners",a)}if(!a[c]){a=a[c]=b(this,c);this.$.addEventListener?this.$.addEventListener(c,a,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+c,a)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(b){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(b)){var a=this.getCustomData("_cke_nativeListeners"),f=a&&a[b];if(f){this.$.removeEventListener?this.$.removeEventListener(b,f,false):this.$.detachEvent&&this.$.detachEvent("on"+b,f);delete a[b]}}},removeAllListeners:function(){var b=this.getCustomData("_cke_nativeListeners"),a;for(a in b){var f=b[a];this.$.detachEvent? +this.$.detachEvent("on"+a,f):this.$.removeEventListener&&this.$.removeEventListener(a,f,false);delete b[a]}}}}(); +(function(b){var c={};CKEDITOR.on("reset",function(){c={}});b.equals=function(a){try{return a&&a.$===this.$}catch(b){return false}};b.setCustomData=function(a,b){var e=this.getUniqueId();(c[e]||(c[e]={}))[a]=b;return this};b.getCustomData=function(a){var b=this.$["data-cke-expando"];return(b=b&&c[b])&&a in b?b[a]:null};b.removeCustomData=function(a){var b=this.$["data-cke-expando"],b=b&&c[b],e,d;if(b){e=b[a];d=a in b;delete b[a]}return d?e:null};b.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete c[a]};b.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(b)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(b){return b?new CKEDITOR.dom[b.nodeType==CKEDITOR.NODE_DOCUMENT?"document":b.nodeType==CKEDITOR.NODE_ELEMENT?"element":b.nodeType==CKEDITOR.NODE_TEXT?"text":b.nodeType==CKEDITOR.NODE_COMMENT?"comment":b.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](b):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(b,c){b.append(this,c);return b},clone:function(b,c){var a=this.$.cloneNode(b),f=function(a){a["data-cke-expando"]&&(a["data-cke-expando"]=false);if(a.nodeType==CKEDITOR.NODE_ELEMENT){c||a.removeAttribute("id",false);if(b)for(var a=a.childNodes,d=0;d<a.length;d++)f(a[d])}};f(a);return new CKEDITOR.dom.node(a)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(b){b.$.parentNode.insertBefore(this.$, +b.$.nextSibling);return b},insertBefore:function(b){b.$.parentNode.insertBefore(this.$,b.$);return b},insertBeforeMe:function(b){this.$.parentNode.insertBefore(b.$,this.$);return b},getAddress:function(b){for(var c=[],a=this.getDocument().$.documentElement,f=this.$;f&&f!=a;){var e=f.parentNode;e&&c.unshift(this.getIndex.call({$:f},b));f=e}return c},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){var c=this.$,a=-1, +f;if(!this.$.parentNode)return a;do if(!b||!(c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(f||!c.nodeValue))){a++;f=c.nodeType==CKEDITOR.NODE_TEXT}while(c=c.previousSibling);return a},getNextSourceNode:function(b,c,a){if(a&&!a.call)var f=a,a=function(a){return!a.equals(f)};var b=!b&&this.getFirst&&this.getFirst(),e;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&a&&a(this,true)===false)return null;b=this.getNext()}for(;!b&&(e=(e||this).getParent());){if(a&&a(e,true)===false)return null;b=e.getNext()}return!b|| +a&&a(b)===false?null:c&&c!=b.type?b.getNextSourceNode(false,c,a):b},getPreviousSourceNode:function(b,c,a){if(a&&!a.call)var f=a,a=function(a){return!a.equals(f)};var b=!b&&this.getLast&&this.getLast(),e;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&a&&a(this,true)===false)return null;b=this.getPrevious()}for(;!b&&(e=(e||this).getParent());){if(a&&a(e,true)===false)return null;b=e.getPrevious()}return!b||a&&a(b)===false?null:c&&b.type!=c?b.getPreviousSourceNode(false,c,a):b},getPrevious:function(b){var c= +this.$,a;do a=(c=c.previousSibling)&&c.nodeType!=10&&new CKEDITOR.dom.node(c);while(a&&b&&!b(a));return a},getNext:function(b){var c=this.$,a;do a=(c=c.nextSibling)&&new CKEDITOR.dom.node(c);while(a&&b&&!b(a));return a},getParent:function(b){var c=this.$.parentNode;return c&&(c.nodeType==CKEDITOR.NODE_ELEMENT||b&&c.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(c):null},getParents:function(b){var c=this,a=[];do a[b?"push":"unshift"](c);while(c=c.getParent());return a},getCommonAncestor:function(b){if(b.equals(this))return this; +if(b.contains&&b.contains(this))return b;var c=this.contains?this:this.getParent();do if(c.contains(b))return c;while(c=c.getParent());return null},getPosition:function(b){var c=this.$,a=b.$;if(c.compareDocumentPosition)return c.compareDocumentPosition(a);if(c==a)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&b.type==CKEDITOR.NODE_ELEMENT){if(c.contains){if(c.contains(a))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(a.contains(c))return CKEDITOR.POSITION_IS_CONTAINED+ +CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in c)return c.sourceIndex<0||a.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:c.sourceIndex<a.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var c=this.getAddress(),b=b.getAddress(),a=Math.min(c.length,b.length),f=0;f<=a-1;f++)if(c[f]!=b[f]){if(f<a)return c[f]<b[f]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return c.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+ +CKEDITOR.POSITION_FOLLOWING},getAscendant:function(b,c){var a=this.$,f;if(!c)a=a.parentNode;for(;a;){if(a.nodeName&&(f=a.nodeName.toLowerCase(),typeof b=="string"?f==b:f in b))return new CKEDITOR.dom.node(a);a=a.parentNode}return null},hasAscendant:function(b,c){var a=this.$;if(!c)a=a.parentNode;for(;a;){if(a.nodeName&&a.nodeName.toLowerCase()==b)return true;a=a.parentNode}return false},move:function(b,c){b.append(this.remove(),c)},remove:function(b){var c=this.$,a=c.parentNode;if(a){if(b)for(;b= +c.firstChild;)a.insertBefore(c.removeChild(b),c);a.removeChild(c)}return this},replace:function(b){this.insertBefore(b);b.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var b;this.getFirst&&(b=this.getFirst());){if(b.type==CKEDITOR.NODE_TEXT){var c=CKEDITOR.tools.ltrim(b.getText()),a=b.getLength();if(c){if(c.length<a){b.split(a-c.length);this.$.removeChild(this.$.firstChild)}}else{b.remove();continue}}break}},rtrim:function(){for(var b;this.getLast&&(b=this.getLast());){if(b.type== +CKEDITOR.NODE_TEXT){var c=CKEDITOR.tools.rtrim(b.getText()),a=b.getLength();if(c){if(c.length<a){b.split(c.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{b.remove();continue}}break}if(!CKEDITOR.env.ie&&!CKEDITOR.env.opera)(b=this.$.lastChild)&&(b.type==1&&b.nodeName.toLowerCase()=="br")&&b.parentNode.removeChild(b)},isReadOnly:function(){var b=this;this.type!=CKEDITOR.NODE_ELEMENT&&(b=this.getParent());if(b&&typeof b.$.isContentEditable!="undefined")return!(b.$.isContentEditable|| +b.data("cke-editable"));for(;b;){if(b.data("cke-editable"))break;if(b.getAttribute("contentEditable")=="false")return true;if(b.getAttribute("contentEditable")=="true")break;b=b.getParent()}return!b}});CKEDITOR.dom.window=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var b=this.$.document,c=b.compatMode=="CSS1Compat";return{width:(c?b.documentElement.clientWidth:b.body.clientWidth)||0,height:(c?b.documentElement.clientHeight:b.body.clientHeight)||0}},getScrollPosition:function(){var b=this.$;if("pageXOffset"in b)return{x:b.pageXOffset||0,y:b.pageYOffset||0};b=b.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop|| +b.body.scrollTop||0}},getFrame:function(){var b=this.$.frameElement;return b?new CKEDITOR.dom.element.get(b):null}});CKEDITOR.dom.document=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(b){if(this.$.createStyleSheet)this.$.createStyleSheet(b);else{var c=new CKEDITOR.dom.element("link");c.setAttributes({rel:"stylesheet",type:"text/css",href:b});this.getHead().append(c)}},appendStyleText:function(b){if(this.$.createStyleSheet){var c=this.$.createStyleSheet("");c.cssText=b}else{var a=new CKEDITOR.dom.element("style",this);a.append(new CKEDITOR.dom.text(b,this));this.getHead().append(a)}return c|| +a.$.sheet},createElement:function(b,c){var a=new CKEDITOR.dom.element(b,this);if(c){c.attributes&&a.setAttributes(c.attributes);c.styles&&a.setStyles(c.styles)}return a},createText:function(b){return new CKEDITOR.dom.text(b,this)},focus:function(){this.getWindow().focus()},getActive:function(){return new CKEDITOR.dom.element(this.$.activeElement)},getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):null},getByAddress:function(b,c){for(var a=this.$.documentElement,f= +0;a&&f<b.length;f++){var e=b[f];if(c)for(var d=-1,g=0;g<a.childNodes.length;g++){var k=a.childNodes[g];if(!(c===true&&k.nodeType==3&&k.previousSibling&&k.previousSibling.nodeType==3)){d++;if(d==e){a=k;break}}}else a=a.childNodes[e]}return a?new CKEDITOR.dom.node(a):null},getElementsByTag:function(b,c){if((!CKEDITOR.env.ie||document.documentMode>8)&&c)b=c+":"+b;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(b))},getHead:function(){var b=this.$.getElementsByTagName("head")[0];return b= +b?new CKEDITOR.dom.element(b):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){var b=new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return b})()},write:function(b){this.$.open("text/html","replace");CKEDITOR.env.isCustomDomain()&&(this.$.domain=document.domain); +this.$.write(b);this.$.close()}});CKEDITOR.dom.nodeList=function(b){this.$=b};CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(b){if(b<0||b>=this.$.length)return null;return(b=this.$[b])?new CKEDITOR.dom.node(b):null}};CKEDITOR.dom.element=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createElement(b));CKEDITOR.dom.domObject.call(this,b)}; +CKEDITOR.dom.element.get=function(b){return(b=typeof b=="string"?document.getElementById(b)||document.getElementsByName(b)[0]:b)&&(b.$?b:new CKEDITOR.dom.element(b))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(b,c){var a=new CKEDITOR.dom.element("div",c);a.setHtml(b);return a.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(b,c,a,f){var e=c.getCustomData("list_marker_id")||c.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=c.getCustomData("list_marker_names")||c.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");b[e]=c;d[a]=1;return c.setCustomData(a,f)};CKEDITOR.dom.element.clearAllMarkers=function(b){for(var c in b)CKEDITOR.dom.element.clearMarkers(b,b[c],1)}; +CKEDITOR.dom.element.clearMarkers=function(b,c,a){var f=c.getCustomData("list_marker_names"),e=c.getCustomData("list_marker_id"),d;for(d in f)c.removeCustomData(d);c.removeCustomData("list_marker_names");if(a){c.removeCustomData("list_marker_id");delete b[e]}}; +(function(){function b(a){for(var b=0,e=0,d=c[a].length;e<d;e++)b=b+(parseInt(this.getComputedStyle(c[a][e])||0,10)||0);return b}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var b=this.$.className;b&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)","").test(b)||(b=b+(" "+a)));this.$.className=b||a},removeClass:function(a){var b=this.getAttribute("class");if(b){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(b))(b=b.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class", +b):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,b){typeof a=="string"&&(a=this.getDocument().createElement(a));b?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var b=new CKEDITOR.dom.element("div",this.getDocument());b.setHtml(a);b.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!= +void 0?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(){for(var a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=CKEDITOR.env.opera?this.getDocument().createText(""):this.getDocument().createElement("br");CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}},breakParent:function(a){var b=new CKEDITOR.dom.range(this.getDocument());b.setStartAfter(this);b.setEndAfter(a); +a=b.extractContents();b.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):b!=a.$&&b.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(a){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g, +""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:function(){var a=function(a){return this.$.innerHTML=a};return CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{return this.$.innerHTML= +a}catch(b){this.$.innerHTML="";var c=new CKEDITOR.dom.element("body",this.getDocument());c.$.innerHTML=a;for(c=c.getChildren();c.count();)this.append(c.getItem(0));return a}}:a}(),setText:function(a){CKEDITOR.dom.element.prototype.setText=this.$.innerText!=void 0?function(a){return this.$.innerText=a}:function(a){return this.$.textContent=a};return this.setText(a)},getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)? +function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified? +this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){var b=this.getWindow().$.getComputedStyle(this.$,null);return b?b.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag, +getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a==void 0){a=parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id|| +null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&!(document.documentMode>8)){var b=this.$.scopeName;b!="HTML"&&(a=b.toLowerCase()+":"+a)}return(this.getName=function(){return a})()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&& +(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var b=0;b<arguments.length;b++)if(arguments[b]==a)return true;return false},isEditable:function(a){var b=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[b]||CKEDITOR.dtd.$empty[b]||this.is("a")&& +(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[b]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var b=this.clone(0,1),a=a.clone(0,1);b.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(b.$.isEqualNode){b.$.style.cssText=CKEDITOR.tools.normalizeCssText(b.$.style.cssText); +a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return b.$.isEqualNode(a.$)}b=b.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var c=this.getParent();if(c.type==CKEDITOR.NODE_ELEMENT){c=c.clone();c.setHtml(b);b=c.getHtml();c.setHtml(a);a=c.getHtml()}}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",b,c;if(a&&(CKEDITOR.env.webkit||CKEDITOR.env.opera)){b= +this.getWindow();if(!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement))a=(new CKEDITOR.dom.element(c)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),b=0,c=a.count();b<c;b++){var d=a.getItem(b);if(!(d.type==CKEDITOR.NODE_ELEMENT&&d.data("cke-bookmark"))&&(d.type==CKEDITOR.NODE_ELEMENT&&!d.isEmptyInlineRemoveable()||d.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(d.getText())))return false}return true}, +hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(){for(var a=this.$.attributes,b=0;b<a.length;b++){var c=a[b];switch(c.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(c.specified)return true}}return false}:function(){var a=this.$.attributes,b=a.length,c={"data-cke-expando":1,_moz_dirty:1};return b>0&&(b>2||!c[a[0].nodeName]||b==2&&!c[a[1].nodeName])},hasAttribute:function(){function a(a){a=this.$.attributes.getNamedItem(a); +return!(!a||!a.specified)}return CKEDITOR.env.ie&&CKEDITOR.env.version<8?function(b){return b=="name"?!!this.$.name:a.call(this,b)}:a}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$,a=a.$;if(c!=a){var d;if(b)for(;d=c.lastChild;)a.insertBefore(c.removeChild(d),a.firstChild);else for(;d=c.firstChild;)a.appendChild(c.removeChild(d))}},mergeSiblings:function(){function a(a,b,c){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var g=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){g.push(b); +b=c?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(a.isIdentical(b)){for(var k=c?a.getLast():a.getFirst();g.length;)g.shift().move(a,!c);b.moveChildren(a,!c);b.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&&k.mergeSiblings()}}}return function(b){if(b===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a, +b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(b,c){b=="class"?this.$.className=c:b=="style"?this.$.style.cssText=c:b=="tabindex"?this.$.tabIndex=c:b=="checked"?this.$.checked=c:b=="contenteditable"?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if(b=="src"&&c.match(/^http:\/\//))try{a.apply(this,arguments)}catch(d){}else a.apply(this,arguments); +return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b< +a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],d;a=="border"&&(d=["color","style","width"]);for(var b=[],g=0;g<c.length;g++)if(d)for(var k=0;k<d.length;k++)b.push([a,c[g],d[k]].join("-"));else b.push([a,c[g]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a): +b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie||CKEDITOR.env.opera){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,d=b.count();c<d;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,d=this.getDocument(),g=d.getBody(),k=d.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var h= +this.$.getBoundingClientRect(),m=d.$.documentElement,n=m.clientTop||g.$.clientTop||0,o=m.clientLeft||g.$.clientLeft||0,l=true;if(CKEDITOR.env.ie){l=d.getDocumentElement().contains(this);d=d.getBody().contains(this);l=k&&d||!k&&l}if(l){b=h.left+(!k&&m.scrollLeft||g.$.scrollLeft);b=b-o;c=h.top+(!k&&m.scrollTop||g.$.scrollTop);c=c-n}}else{g=this;for(d=null;g&&!(g.getName()=="body"||g.getName()=="html");){b=b+(g.$.offsetLeft-g.$.scrollLeft);c=c+(g.$.offsetTop-g.$.scrollTop);if(!g.equals(this)){b=b+(g.$.clientLeft|| +0);c=c+(g.$.clientTop||0)}for(;d&&!d.equals(g);){b=b-d.$.scrollLeft;c=c-d.$.scrollTop;d=d.getParent()}d=g;g=(h=g.$.offsetParent)?new CKEDITOR.dom.element(h):null}}if(a){g=this.getWindow();d=a.getWindow();if(!g.equals(d)&&g.$.frameElement){a=(new CKEDITOR.dom.element(g.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!k){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b= +this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var d=c.$.frameElement;d&&(b=new CKEDITOR.dom.element(d))}catch(g){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var d,g,k,h;function m(b,l){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,l);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+l}} +function n(a,b){var o={x:0,y:0};if(!a.is(l?"body":"html")){var j=a.$.getBoundingClientRect();o.x=j.left;o.y=j.top}j=a.getWindow();if(!j.equals(b)){j=n(CKEDITOR.dom.element.get(j.$.frameElement),b);o.x=o.x+j.x;o.y=o.y+j.y}return o}function o(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());k=a.getDocument();var l=k.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=l?k.getBody():k.getDocumentElement());k=a.getWindow();g=n(this,k);var j=n(a,k),q=this.$.offsetHeight; +d=this.$.offsetWidth;var y=a.$.clientHeight,z=a.$.clientWidth;k=g.x-o(this,"left")-j.x||0;h=g.y-o(this,"top")-j.y||0;d=g.x+d+o(this,"right")-(j.x+z)||0;g=g.y+q+o(this,"bottom")-(j.y+y)||0;if(h<0||g>0)m(0,b===true?h:b===false?g:h<0?h:g);if(c&&(k<0||d>0))m(k<0?k:d,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); +break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)}, +copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},d=0;d<c.length;d++){var g=c[d],k=g.nodeName.toLowerCase(),h;if(!(k in b))if(k=="checked"&&(h=this.getAttribute(k)))a.setAttribute(k,h);else if(g.specified||CKEDITOR.env.ie&&g.nodeValue&&k=="value"){h=this.getAttribute(k);if(h===null)h=g.nodeValue;a.setAttribute(k,h)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a, +b);this.copyAttributes(a);this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$}},getChild:function(){function a(a,b){var c=a.childNodes;if(b>=0&&b<c.length)return c[b]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu", +function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances, +b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null}});var c={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a, +c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})();CKEDITOR.dom.documentFragment=function(b){b=b||CKEDITOR.document;this.$=b.type==CKEDITOR.NODE_DOCUMENT?b.$.createDocumentFragment():b}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(b){b=b.$;b.parentNode.insertBefore(this.$,b.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function b(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,n=c.startContainer;d=c.endContainer;var o=c.startOffset,l=c.endOffset,j,q=this.guard,f=this.type,e=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var i=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),s=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(l):d.getNext();this._.guardLTR=function(a,b){return(!b||!i.equals(a))&&(!s|| +!a.equals(s))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var A=n.type==CKEDITOR.NODE_ELEMENT?n:n.getParent(),B=n.type==CKEDITOR.NODE_ELEMENT?o?n.getChild(o-1):null:n.getPrevious();this._.guardRTL=function(a,b){return(!b||!A.equals(a))&&(!B||!a.equals(B))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var p=a?this._.guardRTL:this._.guardLTR;j=q?function(a,b){return p(a,b)===false?false:q(a,b)}:p;if(this.current)d=this.current[e](false,f,j);else{if(a)d.type== +CKEDITOR.NODE_ELEMENT&&(d=l>0?d.getChild(l-1):j(d,true)===false?null:d.getPreviousSourceNode(true,f,j));else{d=n;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(o)))d=j(n,true)===false?null:n.getNextSourceNode(true,f,j)}d&&j(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[e](false,f,j)}this.end();return this.current=null}function c(a){for(var c,d=null;c=b.call(this,a);)d=c;return d} +CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return b.call(this)},previous:function(){return b.call(this,1)},checkForward:function(){return b.call(this,0,1)!==false},checkBackward:function(){return b.call(this,1,1)!==false},lastForward:function(){return c.call(this)},lastBackward:function(){return c.call(this,1)},reset:function(){delete this.current;this._={}}}});var a={block:1,"list-item":1,table:1,"table-row-group":1, +"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(b){b=b?CKEDITOR.tools.extend({},CKEDITOR.dtd.$block,b||{}):CKEDITOR.dtd.$block;return this.getComputedStyle("float")=="none"&&a[this.getComputedStyle("display")]||b[this.getName()]};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary= +function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var n,o;n=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(o=d.getParent())&&c(o);n=a?n:n||c(d);return!!(b^n)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible= +function(a){var b=CKEDITOR.dom.walker.whitespaces();return function(c){if(b(c))c=1;else{c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());c=!c.$.offsetHeight}return!!(a^c)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!e(a)&&!d(a)}return function(c){var d=!CKEDITOR.env.ie?c.is&&c.is("br"):c.getText&&f.test(c.getText());if(d){d=c.getParent();c=c.getNext(b);d=d.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&& +c.isBlockBoundary())}return!!(a^d)}};var f=/^[\t\r\n ]*(?: |\xa0)$/,e=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark();CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(d(a)||e(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty));return a&&(!CKEDITOR.env.ie?a.is&&a.is("br"):a.getText&&f.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var c=b instanceof CKEDITOR.dom.document;this.document=c?b:b.getDocument();this.root=c?b.getBody():b}; +(function(){function b(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(true),c=CKEDITOR.dom.walker.bogus();return function(q){if(l(q)||b(q))return true;if(c(q)&&!a)return a=true;return q.type==CKEDITOR.NODE_TEXT&&(q.hasAscendant("pre")||CKEDITOR.tools.trim(q.getText()).length)||q.type==CKEDITOR.NODE_ELEMENT&&!q.is(d)?false:true}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(1);return function(c){return l(c)||b(c)?true:!a&&g(c)|| +c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$removeEmpty)}}function a(a){return!k(a)&&!h(a)}var f=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},e=function(a,b,l,c){a.optimizeBookmark();var d=a.startContainer,g=a.endContainer,f=a.startOffset,i=a.endOffset,e,k;if(g.type==CKEDITOR.NODE_TEXT)g=g.split(i);else if(g.getChildCount()>0)if(i>=g.getChildCount()){g=g.append(a.document.createText(""));k=true}else g=g.getChild(i); +if(d.type==CKEDITOR.NODE_TEXT){d.split(f);d.equals(g)&&(g=d.getNext())}else if(f)if(f>=d.getChildCount()){d=d.append(a.document.createText(""));e=true}else d=d.getChild(f).getPrevious();else{d=d.append(a.document.createText(""),1);e=true}var f=d.getParents(),i=g.getParents(),h,p,m;for(h=0;h<f.length;h++){p=f[h];m=i[h];if(!p.equals(m))break}for(var u=l,r,D,v,t=h;t<f.length;t++){r=f[t];u&&!r.equals(d)&&(D=u.append(r.clone()));for(r=r.getNext();r;){if(r.equals(i[t])||r.equals(g))break;v=r.getNext(); +if(b==2)u.append(r.clone(true));else{r.remove();b==1&&u.append(r)}r=v}u&&(u=D)}u=l;for(l=h;l<i.length;l++){r=i[l];b>0&&!r.equals(g)&&(D=u.append(r.clone()));if(!f[l]||r.$.parentNode!=f[l].$.parentNode)for(r=r.getPrevious();r;){if(r.equals(f[l])||r.equals(d))break;v=r.getPrevious();if(b==2)u.$.insertBefore(r.$.cloneNode(true),u.$.firstChild);else{r.remove();b==1&&u.$.insertBefore(r.$,u.$.firstChild)}r=v}u&&(u=D)}if(b==2){p=a.startContainer;if(p.type==CKEDITOR.NODE_TEXT){p.$.data=p.$.data+p.$.nextSibling.data; +p.$.parentNode.removeChild(p.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(p&&m&&(d.$.parentNode!=p.$.parentNode||g.$.parentNode!=m.$.parentNode)){b=m.getIndex();e&&m.$.parentNode==d.$.parentNode&&b--;if(c&&p.type==CKEDITOR.NODE_ELEMENT){c=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>',a.document);c.insertAfter(p);p.mergeSiblings(false); +a.moveToBookmark({startNode:c})}else a.setStart(m.getParent(),b)}a.collapse(true)}e&&d.remove();k&&g.$.parentNode&&g.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},g=CKEDITOR.dom.walker.bogus(),k=new CKEDITOR.dom.walker.whitespaces,h=new CKEDITOR.dom.walker.bookmark,m=/^[\t\r\n ]*(?: |\xa0)$/;CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root); +a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,2,a);return a},deleteContents:function(a){this.collapsed|| +e(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,b,a);return b},createBookmark:function(a){var b,l,c,d,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){c="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",c+(g?"C":"S"))}if(!g){l=b.clone();l.setHtml(" ");a&&l.setAttribute("id",c+"E");d=this.clone();d.collapse();d.insertNode(l)}d= +this.clone();d.collapse(true);d.insertNode(b);if(l){this.setStartAfter(b);this.setEndBefore(l)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?c+(g?"C":"S"):b,endNode:a?c+"E":l,serializable:a,collapsed:g}},createBookmark2:function(a){var b=this.startContainer,l=this.endContainer,c=this.startOffset,d=this.endOffset,g=this.collapsed,f,i;if(!b||!l)return{start:0,end:0};if(a){if(b.type==CKEDITOR.NODE_ELEMENT){if((f=b.getChild(c))&&f.type==CKEDITOR.NODE_TEXT&&c>0&&f.getPrevious().type== +CKEDITOR.NODE_TEXT){b=f;c=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(c=f.getIndex(1))}for(;b.type==CKEDITOR.NODE_TEXT&&(i=b.getPrevious())&&i.type==CKEDITOR.NODE_TEXT;){b=i;c=c+i.getLength()}if(!g){if(l.type==CKEDITOR.NODE_ELEMENT){if((f=l.getChild(d))&&f.type==CKEDITOR.NODE_TEXT&&d>0&&f.getPrevious().type==CKEDITOR.NODE_TEXT){l=f;d=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(d=f.getIndex(1))}for(;l.type==CKEDITOR.NODE_TEXT&&(i=l.getPrevious())&&i.type==CKEDITOR.NODE_TEXT;){l=i;d=d+i.getLength()}}}return{start:b.getAddress(a), +end:g?null:l.getAddress(a),startOffset:c,endOffset:d,normalized:a,collapsed:g,is2:true}},moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),l=a.startOffset,c=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,l);c?this.setEnd(c,a):this.collapse(true)}else{b=(l=a.serializable)?this.document.getById(a.startNode):a.startNode;a=l?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a); +a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,l=this.startOffset,c=this.endOffset,d;if(a.type==CKEDITOR.NODE_ELEMENT){d=a.getChildCount();if(d>l)a=a.getChild(l);else if(d<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){d=b.getChildCount();if(d>c)b=b.getChild(c).getPreviousSourceNode(true);else if(d<1)b=b.getPreviousSourceNode(); +else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var l=this.startContainer,c=this.endContainer,l=l.equals(c)?a&&l.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?l.getChild(this.startOffset):l:l.getCommonAncestor(c);return b&&!l.is?l.getParent():l},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>= +a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer, +j=this.startOffset,d=this.collapsed;if((!a||d)&&c&&c.type==CKEDITOR.NODE_TEXT){if(j)if(j>=c.getLength()){j=c.getIndex()+1;c=c.getParent()}else{var g=c.split(j),j=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(g,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{j=c.getIndex();c=c.getParent()}this.setStart(c,j);if(d){this.collapse(true);return}}c=this.endContainer;j=this.endOffset;if(!b&&!d&&c&&c.type== +CKEDITOR.NODE_TEXT){if(j){j>=c.getLength()||c.split(j);j=c.getIndex()+1}else j=c.getIndex();c=c.getParent();this.setEnd(c,j)}},enlarge:function(a,b){switch(a){case CKEDITOR.ENLARGE_INLINE:var c=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var j=this.getCommonAncestor(),d=this.root,g,f,i,e,h,k=false,p,m;p=this.startContainer;m=this.startOffset;if(p.type==CKEDITOR.NODE_TEXT){if(m){p=!CKEDITOR.tools.trim(p.substring(0,m)).length&&p;k=!!p}if(p&&!(e=p.getPrevious()))i=p.getParent()}else{m&& +(e=p.getChild(m-1)||p.getLast());e||(i=p)}for(;i||e;){if(i&&!e){!h&&i.equals(j)&&(h=true);if(c?i.isBlockBoundary():!d.contains(i))break;if(!k||i.getComputedStyle("display")!="inline"){k=false;h?g=i:this.setStartBefore(i)}e=i.getPrevious()}for(;e;){p=false;if(e.type==CKEDITOR.NODE_COMMENT)e=e.getPrevious();else{if(e.type==CKEDITOR.NODE_TEXT){m=e.getText();/[^\s\ufeff]/.test(m)&&(e=null);p=/[\s\ufeff]$/.test(m)}else if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[e.getName()]){m= +e.getText();if(/[^\s\ufeff]/.test(m))e=null;else for(var u=e.$.getElementsByTagName("*"),r=0,D;D=u[r++];)if(!CKEDITOR.dtd.$removeEmpty[D.nodeName.toLowerCase()]){e=null;break}e&&(p=!!m.length)}else e=null;p&&(k?h?g=i:i&&this.setStartBefore(i):k=true);if(e){p=e.getPrevious();if(!i&&!p){i=e;e=null;break}e=p}else i=null}}i&&(i=i.getParent())}p=this.endContainer;m=this.endOffset;i=e=null;h=k=false;if(p.type==CKEDITOR.NODE_TEXT){p=!CKEDITOR.tools.trim(p.substring(m)).length&&p;k=!(p&&p.getLength());if(p&& +!(e=p.getNext()))i=p.getParent()}else(e=p.getChild(m))||(i=p);for(;i||e;){if(i&&!e){!h&&i.equals(j)&&(h=true);if(c?i.isBlockBoundary():!d.contains(i))break;if(!k||i.getComputedStyle("display")!="inline"){k=false;h?f=i:i&&this.setEndAfter(i)}e=i.getNext()}for(;e;){p=false;if(e.type==CKEDITOR.NODE_TEXT){m=e.getText();/[^\s\ufeff]/.test(m)&&(e=null);p=/^[\s\ufeff]/.test(m)}else if(e.type==CKEDITOR.NODE_ELEMENT){if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[e.getName()]){m= +e.getText();if(/[^\s\ufeff]/.test(m))e=null;else{u=e.$.getElementsByTagName("*");for(r=0;D=u[r++];)if(!CKEDITOR.dtd.$removeEmpty[D.nodeName.toLowerCase()]){e=null;break}}e&&(p=!!m.length)}else e=null}else p=1;p&&k&&(h?f=i:this.setEndAfter(i));if(e){p=e.getNext();if(!i&&!p){i=e;e=null;break}e=p}else i=null}i&&(i=i.getParent())}if(g&&f){j=g.contains(f)?f:g;this.setStartBefore(j);this.setEndAfter(j)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:i=new CKEDITOR.dom.range(this.root); +d=this.root;i.setStartAt(d,CKEDITOR.POSITION_AFTER_START);i.setEnd(this.startContainer,this.startOffset);i=new CKEDITOR.dom.walker(i);var v,t,w=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),I=function(a){var b=w(a);b||(v=a);return b},c=function(a){var b=I(a);!b&&(a.is&&a.is("br"))&&(t=a);return b};i.guard=I;i=i.lastBackward();v=v||d;this.setStartAt(v,!v.is("br")&&(!i&&this.checkStartOfBlock()||i&&v.contains(i))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END); +if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){i=this.clone();i=new CKEDITOR.dom.walker(i);var G=CKEDITOR.dom.walker.whitespaces(),C=CKEDITOR.dom.walker.bookmark();i.evaluator=function(a){return!G(a)&&!C(a)};if((i=i.previous())&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("br"))break}i=this.clone();i.collapse();i.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);i=new CKEDITOR.dom.walker(i);i.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?c:I;v=null;i=i.lastForward();v=v||d;this.setEndAt(v,!i&&this.checkEndOfBlock()||i&& +v.contains(i)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);t&&this.setEndAfter(t)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,j=this.clone(),d=this.startContainer,g=this.endContainer,f=this.startOffset,e=this.endOffset,k=1,h=1;if(d&&d.type==CKEDITOR.NODE_TEXT)if(f)if(f>=d.getLength())j.setStartAfter(d);else{j.setStartBefore(d);k=0}else j.setStartBefore(d);if(g&&g.type==CKEDITOR.NODE_TEXT)if(e)if(e>=g.getLength())j.setEndAfter(g);else{j.setEndAfter(g); +h=0}else j.setEndBefore(g);var j=new CKEDITOR.dom.walker(j),m=CKEDITOR.dom.walker.bookmark();j.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var p;j.guard=function(b,j){if(m(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||j&&b.equals(p)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary())return false;!j&&b.type==CKEDITOR.NODE_ELEMENT&&(p=b);return true};if(k)(d=j[a==CKEDITOR.SHRINK_ELEMENT?"lastForward": +"next"]())&&this.setStartAt(d,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(h){j.reset();(j=j[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(j,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!k&&!h)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)}, +moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer= +a;this.endOffset=b}f(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}f(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(), +a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}f(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type== +CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}f(this)},fixBlock:function(a,b){var c=this.createBookmark(),j=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(j);j.trim();CKEDITOR.env.ie||j.appendBogus();this.insertNode(j);this.moveToBookmark(c);return j},splitBlock:function(a){var b= +new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),j=b.block,d=c.block,g=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!j){j=this.fixBlock(true,a);d=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}d||(d=this.fixBlock(false,a))}a=j&&this.checkStartOfBlock();b=d&&this.checkEndOfBlock();this.deleteContents();if(j&&j.equals(d))if(b){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root); +this.moveToPosition(d,CKEDITOR.POSITION_AFTER_END);d=null}else if(a){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(j,CKEDITOR.POSITION_BEFORE_START);j=null}else{d=this.splitElement(j);!CKEDITOR.env.ie&&!j.is("ul","ol")&&j.appendBogus()}return{previousBlock:j,nextBlock:d,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:g}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false); +b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(j){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||j.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),l=this[b?"endPath":"startPath"](),d=l.block||l.blockLimit,o;d&&!d.equals(l.root)&&!d.getFirst(a(d));){o= +d.getParent();this[b?"setEndAt":"setStartAt"](d,CKEDITOR.POSITION_AFTER_END);d.remove(1);d=o}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var l=b==CKEDITOR.START,d=this.clone();d.collapse(l);d[l?"setStartAt":"setEndAt"](a,l?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d); +d.evaluator=c(l);return d[l?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.ltrim(a.substring(0,c));m.test(a)&&this.trim(0,1)}this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a= +this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.rtrim(a.substring(c));m.test(a)&&this.trim(1,0)}this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START); +c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b= +b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(b,c){if(b.type==CKEDITOR.NODE_ELEMENT&&!b.isEditable(false)){this.moveToPosition(b,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var l=0;b;){if(b.type==CKEDITOR.NODE_TEXT){c&&this.checkEndOfBlock()&&m.test(b.getText())?this.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(b,c?CKEDITOR.POSITION_AFTER_END: +CKEDITOR.POSITION_BEFORE_START);l=1;break}if(b.type==CKEDITOR.NODE_ELEMENT)if(b.isEditable()){this.moveToPosition(b,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);l=1}else c&&(b.is("br")&&this.checkEndOfBlock())&&this.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);var d=b,g=l,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[c?"getLast":"getFirst"](a));!g&&!f&&(f=d[c?"getPrevious":"getNext"](a));b=f}return!!l},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, +moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a= +this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),b,c,d,g=this.clone();g.optimize();if(d=g.startContainer.type==CKEDITOR.NODE_TEXT){c=g.startContainer.getText();b=g.startContainer.split(g.startOffset); +a.insertAfter(g.startContainer)}else g.insertNode(a);a.scrollIntoView();if(d){g.startContainer.setText(c);b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2; +(function(){function b(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function c(a,b,c){for(a=a.getNextSourceNode(b,null,c);!f(a);)a=a.getNextSourceNode(b,null,c);return a}var a=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(false,true),e=CKEDITOR.dom.walker.whitespaces(true),d=function(a){return f(a)&&e(a)};b.prototype={getNextParagraph:function(b){b=b||"p";if(!CKEDITOR.dtd[this.range.root.getName()][b])return null;var e, +h,m,n,o,l;if(!this._.started){h=this.range.clone();h.shrink(CKEDITOR.NODE_ELEMENT,true);n=h.endContainer.hasAscendant("pre",true)||h.startContainer.hasAscendant("pre",true);h.enlarge(this.forceBrBreak&&!n||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!h.collapsed){n=new CKEDITOR.dom.walker(h.clone());var j=CKEDITOR.dom.walker.bookmark(true,true);n.evaluator=j;this._.nextNode=n.next();n=new CKEDITOR.dom.walker(h.clone());n.evaluator=j;n=n.previous();this._.lastNode= +n.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){j=this.range.clone();j.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(j.checkEndOfBlock()){j=new CKEDITOR.dom.elementPath(j.endContainer,j.root);this._.lastNode=(j.block||j.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode){this._.lastNode=this._.docEndMarker=h.document.createText("");this._.lastNode.insertAfter(n)}h= +null}this._.started=1}j=this._.nextNode;n=this._.lastNode;for(this._.nextNode=null;j;){var q=0,y=j.hasAscendant("pre"),z=j.type!=CKEDITOR.NODE_ELEMENT,i=0;if(z)j.type==CKEDITOR.NODE_TEXT&&a.test(j.getText())&&(z=0);else{var s=j.getName();if(j.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){if(s=="br")z=1;else if(!h&&!j.getChildCount()&&s!="hr"){e=j;m=j.equals(n);break}if(h){h.setEndAt(j,CKEDITOR.POSITION_BEFORE_START);if(s!="br")this._.nextNode=j}q=1}else{if(j.getFirst()){if(!h){h=this.range.clone(); +h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}j=j.getFirst();continue}z=1}}if(z&&!h){h=this.range.clone();h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}m=(!q||z)&&j.equals(n);if(h&&!q)for(;!j.getNext(d)&&!m;){s=j.getParent();if(s.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){q=1;z=0;m||s.equals(n);h.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);break}j=s;z=1;m=j.equals(n);i=1}z&&h.setEndAt(j,CKEDITOR.POSITION_AFTER_END);j=c(j,i,n);if((m=!j)||q&&h)break}if(!e){if(!h){this._.docEndMarker&&this._.docEndMarker.remove(); +return this._.nextNode=null}e=new CKEDITOR.dom.elementPath(h.startContainer,h.root);j=e.blockLimit;q={div:1,th:1,td:1};e=e.block;if(!e&&j&&!this.enforceRealBlocks&&q[j.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!j.equals(h.root))e=j;else if(!e||this.enforceRealBlocks&&e.getName()=="li"){e=this.range.document.createElement(b);h.extractContents().appendTo(e);e.trim();h.insertNode(e);o=l=true}else if(e.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){e=e.clone(false);h.extractContents().appendTo(e); +e.trim();l=h.splitBlock();o=!l.wasStartOfBlock;l=!l.wasEndOfBlock;h.insertNode(e)}}else if(!m)this._.nextNode=e.equals(n)?null:c(h.getBoundaryNodes().endNode,1,n)}if(o)(h=e.getPrevious())&&h.type==CKEDITOR.NODE_ELEMENT&&(h.getName()=="br"?h.remove():h.getLast()&&h.getLast().$.nodeName.toLowerCase()=="br"&&h.getLast().remove());if(l)(h=e.getLast())&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()=="br"&&(CKEDITOR.env.ie||h.getPrevious(f)||h.getNext(f))&&h.remove();if(!this._.nextNode)this._.nextNode=m|| +e.equals(n)||!n?null:c(e,1,n);return e}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}})(); +CKEDITOR.command=function(b,c){this.uiItems=[];this.exec=function(a){if(this.state==CKEDITOR.TRISTATE_DISABLED)return false;this.editorFocus&&b.focus();return this.fire("exec")===false?true:c.exec.call(this,b,a)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}this.enable();return this.fire("refresh",{editor:a,path:b})===false?true:c.refresh&&c.refresh.apply(this,arguments)!==false};CKEDITOR.tools.extend(this, +c,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!c.context,state:CKEDITOR.TRISTATE_OFF});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(b){if(this.state==b)return false;this.previousState=this.state;this.state=b;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&& +this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(){this._.timer&&clearTimeout(this._.timer);if(!this.hasFocus&&!this._.locked){var b=CKEDITOR.currentInstance;b&&b.focusManager.blur(1);this.hasFocus=true;(b=this._.editor.container)&&b.addClass("cke_focus");this._.editor.fire("focus")}},lock:function(){this._.locked= +1},unlock:function(){delete this._.locked},blur:function(b){function c(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var a=CKEDITOR.focusManager._.blurDelay;b||!a?c.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;c.call(this)},a,this)}},add:function(b,c){var a=b.getCustomData("focusmanager");if(!a||a!=this){a&&a.remove(b);var a= +"focus",f="blur";if(c)if(CKEDITOR.env.ie){a="focusin";f="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){b.equals(this.currentActive)&&this.blur()},focus:function(){this.currentActive=b;this.focus()}};b.on(a,e.focus,this);b.on(f,e.blur,this);if(c)CKEDITOR.event.useCapture=0;b.setCustomData("focusmanager",this);b.setCustomData("focusmanager_handlers",e)}},remove:function(b){b.removeCustomData("focusmanager");var c=b.removeCustomData("focusmanager_handlers");b.removeListener("blur", +c.blur);b.removeListener("focus",c.focus)}}})();CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler)return b.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this}; +(function(){var b,c=function(a){var a=a.data,c=a.getKeystroke(),d=this.keystrokes[c],g=this._.editor;b=g.fire("key",{keyCode:c})===false;if(!b){d&&(b=g.execCommand(d,{from:"keystrokeHandler"})!==false);b||(b=!!this.blockedKeystrokes[c])}b&&a.preventDefault(true);return!b},a=function(a){if(b){b=false;a.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(b){b.on("keydown",c,this);if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)b.on("keypress",a,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,sk:1,sl:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,"zh-cn":1,zh:1},load:function(b,c,a){if(!b||!CKEDITOR.lang.languages[b])b=this.detect(c,b);this[b]?a(b,this[b]):CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+ +b+".js"),function(){a(b,this[b])},this)},detect:function(b,c){var a=this.languages,c=c||navigator.userLanguage||navigator.language||b,f=c.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=f[1],f=f[2];a[e+"-"+f]?e=e+"-"+f:a[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||b}}})(); +CKEDITOR.scriptLoader=function(){var b={},c={};return{load:function(a,f,e,d){var g=typeof a=="string";g&&(a=[a]);e||(e=CKEDITOR);var k=a.length,h=[],m=[],n=function(a){f&&(g?f.call(e,a):f.call(e,h,m))};if(k===0)n(true);else{var o=function(a,b){(b?h:m).push(a);if(--k<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");n(b)}},l=function(a,l){b[a]=1;var d=c[a];delete c[a];for(var j=0;j<d.length;j++)d[j](a,l)},j=function(a){if(b[a])o(a,true);else{var d=c[a]||(c[a]=[]);d.push(o);if(!(d.length> +1)){var j=new CKEDITOR.dom.element("script");j.setAttributes({type:"text/javascript",src:a});if(f)if(CKEDITOR.env.ie)j.$.onreadystatechange=function(){if(j.$.readyState=="loaded"||j.$.readyState=="complete"){j.$.onreadystatechange=null;l(a,true)}};else{j.$.onload=function(){setTimeout(function(){l(a,true)},0)};j.$.onerror=function(){l(a,false)}}j.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var q=0;q<k;q++)j(a[q])}}}}(); +CKEDITOR.resourceManager=function(b,c){this.basePath=b;this.fileName=c;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(b,c){if(this.registered[b])throw'[CKEDITOR.resourceManager.add] The resource name "'+b+'" is already registered.';var a=this.registered[b]=c||{};a.name=b;a.path=this.getPath(b);CKEDITOR.fire(b+CKEDITOR.tools.capitalize(this.fileName)+"Ready",a);return this.get(b)},get:function(b){return this.registered[b]||null},getPath:function(b){var c=this.externals[b];return CKEDITOR.getUrl(c&&c.dir||this.basePath+b+"/")},getFilePath:function(b){var c=this.externals[b]; +return CKEDITOR.getUrl(this.getPath(b)+(c&&typeof c.file=="string"?c.file:this.fileName+".js"))},addExternal:function(b,c,a){for(var b=b.split(","),f=0;f<b.length;f++)this.externals[b[f]]={dir:c,file:a}},load:function(b,c,a){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var f=this.loaded,e=this.registered,d=[],g={},k={},h=0;h<b.length;h++){var m=b[h];if(m)if(!f[m]&&!e[m]){var n=this.getFilePath(m);d.push(n);n in g||(g[n]=[]);g[n].push(m)}else k[m]=this.get(m)}CKEDITOR.scriptLoader.load(d,function(b, +l){if(l.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+g[l[0]].join(",")+'" was not found at "'+l[0]+'".';for(var d=0;d<b.length;d++)for(var e=g[b[d]],h=0;h<e.length;h++){var m=e[h];k[m]=this.get(m);f[m]=1}c.call(a,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var c={};return function(a,f,e){var d={},g=function(a){b.call(this,a,function(a){CKEDITOR.tools.extend(d,a);var b=[],k;for(k in a){var o=a[k],l=o&&o.requires;if(!c[k]){if(o.icons)for(var j=o.icons.split(","),q=0;q<j.length;q++)CKEDITOR.skin.addIcon(j[q],o.path+"icons/"+j[q]+".png");c[k]=1}if(l){l.split&&(l=l.split(","));for(o=0;o<l.length;o++)d[l[o]]||b.push(l[o])}}if(b.length)g.call(this,b);else{for(k in d){o=d[k];if(o.onLoad&& +!o.onLoad._called){o.onLoad()===false&&delete d[k];o.onLoad._called=1}}f&&f.call(e||window,d)}},this)};g.call(this,a)}});CKEDITOR.plugins.setLang=function(b,c,a){var f=this.get(b),b=f.langEntries||(f.langEntries={}),f=f.lang||(f.lang=[]);f.split&&(f=f.split(","));CKEDITOR.tools.indexOf(f,c)==-1&&f.push(c);b[c]=a};CKEDITOR.ui=function(b){if(b.ui)return b.ui;this.items={};this.instances={};this.editor=b;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(b,c,a){a.name=b.toLowerCase();var f=this.items[b]={type:c,command:a.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(f,a)},get:function(b){return this.instances[b]},create:function(b){var c=this.items[b],a=c&&this._.handlers[c.type],f=c&&c.command&&this.editor.getCommand(c.command),a=a&&a.create.apply(this,c.args);this.instances[b]=a;f&&f.uiItems.push(a);if(a&&!a.type)a.type=c.type;return a},addHandler:function(b,c){this._.handlers[b]= +c},space:function(b){return CKEDITOR.document.getById(this.spaceId(b))},spaceId:function(b){return this.editor.id+"_"+b}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function b(b,j,o){CKEDITOR.event.call(this);b=b&&CKEDITOR.tools.clone(b);if(j!==void 0){if(j instanceof CKEDITOR.dom.element){if(!o)throw Error("One of the element mode must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&o==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(o==CKEDITOR.ELEMENT_MODE_INLINE&&!j.is(CKEDITOR.dtd.$editable)||o==CKEDITOR.ELEMENT_MODE_REPLACE&& +j.is(CKEDITOR.dtd.$nonBodyContent))throw Error('The specified element mode is not supported on element: "'+j.getName()+'".');this.element=j;this.elementMode=o;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(j.getId()||j.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||c();this.id=CKEDITOR.tools.getNextId();this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager= +new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("mode",a);this.on("readOnly",a);this.on("selectionChange",f);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){d(this,b)},0,this)}function c(){do var a="editor"+ ++n;while(CKEDITOR.instances[a]);return a}function a(){var a,b=this.commands,c=this.mode;if(c)for(var d in b){a=b[d]; +a[a.startDisabled?"disable":this.readOnly&&!a.readOnly?"disable":a.modes[c]?"enable":"disable"]()}}function f(a){var b=this.commands,c=a.editor,d=a.data.path,o;for(o in b){a=b[o];a.contextSensitive&&a.refresh(c,d)}}function e(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=o[b]||(o[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b||!e(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.load(b,function(){c.fn=CKEDITOR.editorConfig? +CKEDITOR.editorConfig:function(){};e(a)});return true}function d(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}a.readOnly=!(!a.config.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.getAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!CKEDITOR.dtd[a.element.getName()].p;a.tabIndex= +a.config.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;if(a.config.skin)CKEDITOR.skinName=a.config.skin;a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);g(a)});if(b&&b.customConfig!=void 0)a.config.customConfig=b.customConfig;e(a)||a.fireOnce("customConfigLoaded")}function g(a){CKEDITOR.skin.loadPart("editor",function(){k(a)})}function k(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c); +if(CKEDITOR.env.gecko&&CKEDITOR.env.version<10900&&a.lang.dir=="rtl")a.lang.dir="ltr";if(!a.config.contentsLangDirection)a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");h(a)})}function h(a){var b=a.config,c=b.plugins,d=b.extraPlugins,o=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(o)var g=RegExp("(?:^|,)(?:"+o.replace(/\s*,\s*/g,"|")+")(?=,|$)", +"g"),c=c.replace(g,"");CKEDITOR.env.air&&(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],o=[],e=[];a.plugins=c;for(var f in c){var i=c[f],h=i.lang,q=null,t=i.requires,k;CKEDITOR.tools.isArray(t)&&(t=t.join(","));if(t&&(k=t.match(g)))for(;t=k.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[t,f]);if(h&&!a.lang[f]){h.split&&(h=h.split(",")); +if(CKEDITOR.tools.indexOf(h,a.langCode)>=0)q=a.langCode;else{q=a.langCode.replace(/-.*/,"");q=q!=a.langCode&&CKEDITOR.tools.indexOf(h,q)>=0?q:CKEDITOR.tools.indexOf(h,"en")>=0?"en":h[0]}if(!i.langEntries||!i.langEntries[q])e.push(CKEDITOR.getUrl(i.path+"lang/"+q+".js"));else{a.lang[f]=i.langEntries[q];q=null}}o.push(q);d.push(i)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var g=0;g<d.length;g++){var f=d[g];e===0&&(o[g]&&f.lang&&f.langEntries)&& +(a.lang[f.name]=f.langEntries[o[g]]);if(f[c[e]])f[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(g=0;g<a.config.blockedKeystrokes.length;g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]]=1;a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function m(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")? +a.setValue(b):a.setHtml(b);return true}return false}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var n=0,o={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){return this.commands[a]=new CKEDITOR.command(this,b)},destroy:function(a){this.fire("beforeDestroy");!a&&m.call(this);this.editable(null);this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){return(a=a||this.getSelection().getStartElement())? +new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==true){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec",d)!==true)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&& +this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)}, +setData:function(a,b,c){if(b)this.on("dataReady",function(a){a.removeListener();b.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==void 0||a;if(this.readOnly!=a){this.readOnly=a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement", +a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return m.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,o=b.length;o--;){c=b[o];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}}})})(); +CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}}; +(function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,c={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(a){for(var f,e,d=0,g;f=this._.htmlPartsRegex.exec(a);){e=f.index;if(e>d){d=a.substring(d,e);if(g)g.push(d);else this.onText(d)}d= +this._.htmlPartsRegex.lastIndex;if(e=f[1]){e=e.toLowerCase();if(g&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(g.join(""));g=null}if(!g){this.onTagClose(e);continue}}if(g)g.push(f[0]);else if(e=f[3]){e=e.toLowerCase();if(!/="/.test(e)){var k={},h;f=f[4];var m=!!(f&&f.charAt(f.length-1)=="/");if(f)for(;h=b.exec(f);){var n=h[1].toLowerCase();h=h[2]||h[3]||h[4]||"";k[n]=!h&&c[n]?n:h}this.onTagOpen(e,k,m);!g&&CKEDITOR.dtd.$cdata[e]&&(g=[])}}else if(e=f[2])this.onComment(e)}if(a.length>d)this.onText(a.substring(d, +a.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("<",b)},openTagClose:function(b,c){c?this._.output.push(" />"):this._.output.push(">")},attribute:function(b,c){typeof c=="string"&&(c=CKEDITOR.tools.htmlEncodeAttr(c));this._.output.push(" ",b,'="',c,'"')},closeTag:function(b){this._.output.push("</",b,">")},text:function(b){this._.output.push(b)},comment:function(b){this._.output.push("<\!--",b,"--\>")},write:function(b){this._.output.push(b)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(b){var c=this._.output.join("");b&&this.reset();return c}}});CKEDITOR.htmlParser.comment=function(b){this.value=b;this._={isBlockLike:false}};CKEDITOR.htmlParser.comment.prototype={type:CKEDITOR.NODE_COMMENT,writeHtml:function(b,c){var a=this.value;if(c){if(!(a=c.onComment(a,this)))return;if(typeof a!="string"){a.parent=this.parent;a.writeHtml(b,c);return}}b.comment(a)}}; +(function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype={type:CKEDITOR.NODE_TEXT,writeHtml:function(b,c){var a=this.value;(!c||(a=c.onText(a,this)))&&b.text(a)}}})();(function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b};CKEDITOR.htmlParser.cdata.prototype={type:CKEDITOR.NODE_TEXT,writeHtml:function(b){b.write(this.value)}}})(); +CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function b(a){return a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var c=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),a={ol:1,ul:1},f=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1});CKEDITOR.htmlParser.fragment.fromHtml=function(e,d,g){function k(a){var b;if(y.length>0)for(var c=0;c<y.length;c++){var d=y[c],l=d.name,o=CKEDITOR.dtd[l],j=i.name&& +CKEDITOR.dtd[i.name];if((!j||j[l])&&(!a||!o||o[a]||!CKEDITOR.dtd[a])){if(!b){h();b=1}d=d.clone();d.parent=i;i=d;y.splice(c,1);c--}else if(l==i.name){n(i,i.parent,1);c--}}}function h(){for(;z.length;)n(z.shift(),i)}function m(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))?c.value=d:a.children.length=b-1}}function n(a,c,d){var c=c||i||q,l=i;if(a.previous===void 0){if(o(c,a)){i=c; +j.onTagOpen(g,{});a.returnPoint=c=i}m(a);(!b(a)||a.children.length)&&c.add(a);a.name=="pre"&&(A=false);a.name=="textarea"&&(s=false)}if(a.returnPoint){i=a.returnPoint;delete a.returnPoint}else i=d?c:l}function o(a,b){if((a==q||a.name=="body")&&g&&(!a.name||CKEDITOR.dtd[a.name][g])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function l(a,b){return a in CKEDITOR.dtd.$listItem|| +a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var j=new CKEDITOR.htmlParser,q=d instanceof CKEDITOR.htmlParser.element?d:typeof d=="string"?new CKEDITOR.htmlParser.element(d):new CKEDITOR.htmlParser.fragment,y=[],z=[],i=q,s=q.name=="textarea",A=q.name=="pre";j.onTagOpen=function(d,o,g,e){o=new CKEDITOR.htmlParser.element(d,o);if(o.isUnknown&&g)o.isEmpty=true;o.isOptionalClose=e;if(b(o))y.push(o);else{if(d=="pre")A=true;else{if(d=="br"&&A){i.add(new CKEDITOR.htmlParser.text("\n")); +return}d=="textarea"&&(s=true)}if(d=="br")z.push(o);else{for(;;){e=(g=i.name)?CKEDITOR.dtd[g]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!o.isUnknown&&!i.isUnknown&&!e[d])if(i.isOptionalClose)j.onTagClose(g);else if(d in a&&g in a){g=i.children;(g=g[g.length-1])&&g.name=="li"||n(g=new CKEDITOR.htmlParser.element("li"),i);!o.returnPoint&&(o.returnPoint=i);i=g}else if(d in CKEDITOR.dtd.$listItem&&!l(d,g))j.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(g in c&&!l(d,g)){!o.returnPoint&& +(o.returnPoint=i);i=i.parent}else{g in CKEDITOR.dtd.$inline&&y.unshift(i);if(i.parent)n(i,i.parent,1);else{o.isOrphan=1;break}}else break}k(d);h();o.parent=i;o.isEmpty?n(o):i=o}}};j.onTagClose=function(a){for(var b=y.length-1;b>=0;b--)if(a==y[b].name){y.splice(b,1);return}for(var c=[],d=[],o=i;o!=q&&o.name!=a;){o._.isBlockLike||d.unshift(o);c.push(o);o=o.returnPoint||o.parent}if(o!=q){for(b=0;b<c.length;b++){var l=c[b];n(l,l.parent)}i=o;o._.isBlockLike&&h();n(o,o.parent);if(o==i)i=i.parent;y=y.concat(d)}a== +"body"&&(g=false)};j.onText=function(b){if((!i._.hasInlineStarted||z.length)&&!A&&!s){b=CKEDITOR.tools.ltrim(b);if(b.length===0)return}var d=i.name,l=d?CKEDITOR.dtd[d]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!s&&!l["#"]&&d in c){j.onTagOpen(d in a?"li":d=="dl"?"dd":d=="table"?"tr":d=="tr"?"td":"");j.onText(b)}else{h();k();!A&&!s&&(b=b.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));b=new CKEDITOR.htmlParser.text(b);if(o(i,b))this.onTagOpen(g,{},0,1);i.add(b)}};j.onCDATA=function(a){i.add(new CKEDITOR.htmlParser.cdata(a))}; +j.onComment=function(a){h();k();i.add(new CKEDITOR.htmlParser.comment(a))};j.parse(e);for(h(!CKEDITOR.env.ie&&1);i!=q;)n(i,i.parent,1);m(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this; +this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},writeHtml:function(a,b){var c;this.filterChildren=function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml.call(this,a,b);a=a.getHtml();this.children=(new CKEDITOR.htmlParser.fragment.fromHtml(a)).children;c=1};b&&b.onRoot(this);this.writeChildrenHtml(a,c?null:b)},writeChildrenHtml:function(a,b,c){if(c&&!this.parent&&b)b.onRoot(this); +for(c=0;c<this.children.length;c++)this.children[c].writeHtml(a,b)}}})(); +(function(){function b(a,b){for(var c=0;a&&c<b.length;c++)var e=b[c],a=a.replace(e[0],e[1]);return a}function c(a,b,c){typeof b=="function"&&(b=[b]);var e,f;f=a.length;var n=b&&b.length;if(n){for(e=0;e<f&&a[e].pri<c;e++);for(f=n-1;f>=0;f--)if(n=b[f]){n.pri=c;a.splice(e,0,n)}}}function a(a,b,c){if(b)for(var e in b){var m=a[e];a[e]=f(m,b[e],c);m||a.$length++}}function f(a,b,f){if(b){b.pri=f;if(a){if(a.splice)c(a,b,f);else{a=a.pri>f?[b,a]:[a,b];a.filter=e}return a}return b.filter=b}}function e(a){for(var b= +a.type||a instanceof CKEDITOR.htmlParser.fragment,c=0;c<this.length;c++){if(b)var e=a.type,f=a.name;var n=this[c].apply(window,arguments);if(n===false)return n;if(b){if(n&&(n.name!=f||n.type!=e))return n}else if(typeof n!="string")return n;n!=void 0&&(a=n)}return a}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(a){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};a&&this.addRules(a,10)},proto:{addRules:function(b,e){typeof e!="number"&&(e=10); +c(this._.elementNames,b.elementNames,e);c(this._.attributeNames,b.attributeNames,e);a(this._.elements,b.elements,e);a(this._.attributes,b.attributes,e);this._.text=f(this._.text,b.text,e)||this._.text;this._.comment=f(this._.comment,b.comment,e)||this._.comment;this._.root=f(this._.root,b.root,e)||this._.root},onElementName:function(a){return b(a,this._.elementNames)},onAttributeName:function(a){return b(a,this._.attributeNames)},onText:function(a){var b=this._.text;return b?b.filter(a):a},onComment:function(a, +b){var c=this._.comment;return c?c.filter(a,b):a},onRoot:function(a){var b=this._.root;return b?b.filter(a):a},onElement:function(a){for(var b=[this._.elements["^"],this._.elements[a.name],this._.elements.$],c,e=0;e<3;e++)if(c=b[e]){c=c.filter(a,this);if(c===false)return null;if(c&&c!=a)return this.onNode(c);if(a.parent&&!a.name)break}return a},onNode:function(a){var b=a.type;return b==CKEDITOR.NODE_ELEMENT?this.onElement(a):b==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a.value)): +b==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a.value)):null},onAttribute:function(a,b,c){if(b=this._.attributes[b]){a=b.filter(c,a,this);if(a===false)return false;if(typeof a!="undefined")return a}return c}}})})(); +(function(){function b(b,c){function o(a){return a||CKEDITOR.env.ie?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function l(b,c){return function(l){if(l.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],g=a(l),i,K;if(g)for(j(g,1)&&e.push(g);g;){if(d(g)&&(i=f(g))&&j(i))if((K=f(i))&&!d(K))e.push(i);else{var h=i,q=o(t),m=h.parent.children,y=CKEDITOR.tools.indexOf(m,h);m.splice(y+1,0,q);m=h.next;h.next=q;q.previous=h;q.parent=h.parent;q.next=m;k(i)}g=g.previous}for(g= +0;g<e.length;g++)k(e[g]);if(e=CKEDITOR.env.opera&&!b||(typeof c=="function"?c(l)!==false:c))if(!t&&CKEDITOR.env.ie&&l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)e=false;else if(!t&&CKEDITOR.env.ie&&(document.documentMode>7||l.name in CKEDITOR.dtd.tr||l.name in CKEDITOR.dtd.$listItem))e=false;else{e=a(l);e=!e||l.name=="form"&&e.name=="input"}e&&l.add(o(b))}}}function j(a,b){if((!t||!CKEDITOR.env.ie)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type== +CKEDITOR.NODE_TEXT&&(c=a.value.match(s))){if(c.index){g(a,new CKEDITOR.htmlParser.text(a.value.substring(0,c.index)));a.value=c[0]}if(CKEDITOR.env.ie&&t&&(!b||a.parent.name in h))return true;if(!t)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var i={elements:{}},t=c=="html",h=CKEDITOR.tools.extend({},E),q;for(q in h)"#"in B[q]||delete h[q];for(q in h)i.elements[q]=l(t,b.config.fillEmptyBlocks!==false);i.root=l(t);i.elements.br=function(a){return function(b){if(b.parent.type!= +CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=b.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=b.next;c&&e(c);)c=c.next;var l=f(b);if(!c&&d(b.parent)){b=b.parent;c=o(a);l=b.children[b.children.length-1];b.children.push(c);c.parent=b;if(l){l.next=c;c.previous=l}}else d(c)&&(l&&!d(l))&&g(c,o(a))}}}}(t);return i}function c(a){return a.enterMode!=CKEDITOR.ENTER_BR&&a.autoParagraph!==false?a.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false}function a(a){for(a=a.children[a.children.length- +1];a&&e(a);)a=a.previous;return a}function f(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in E||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function g(a,b){var c=a.parent.children,d=CKEDITOR.tools.indexOf(c,a);c.splice(d,0,b);c=a.previous;a.previous=b;b.next=a;b.parent=a.parent;if(c){b.previous= +c;c.next=b}}function k(a){var b=a.parent.children,c=CKEDITOR.tools.indexOf(b,a),d=a.previous,a=a.next;d&&(d.next=a);a&&(a.previous=d);b.splice(c,1)}function h(a){var b=a.parent;return b?CKEDITOR.tools.indexOf(b.children,a):-1}function m(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function n(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function o(a){return a.replace(v, +function(a,b,c){return"<"+b+c.replace(t,function(a,b){return!/^on/.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function l(a){return a.replace(w,function(a){return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function j(a){return a.replace(I,function(a,b){return decodeURIComponent(b)})}function q(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(a){return"<\!--"+A+"{C}"+encodeURIComponent(a).replace(/--/g, +"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function z(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function i(a,b){for(var c=[],d=b.config.protectedSource,o=b._.dataStore||(b._.dataStore={id:1}),l=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi, +/<noscript[\s\S]*?<\/noscript>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),j=0;j<d.length;j++)a=a.replace(d[j],function(a){a=a.replace(l,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(l,function(a,b,d){return"<\!--"+A+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\>"});return a.replace(/(['"]).*?\1/g,function(a){return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g, +function(a,b){o[o.id]=decodeURIComponent(b);return"{cke_protected_"+o.id++ +"}"})})}CKEDITOR.htmlDataProcessor=function(a){var c,d;this.editor=a;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(u);c.addRules(b(a,"data"));d.addRules(r);d.addRules(b(a,"html"))};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,d){var a=i(a,this.editor),a=o(a),a=l(a),a=a.replace(G,"$1cke:$2"),a=a.replace(Q, +"<cke:$1$2></cke:$1>"),a=CKEDITOR.env.opera?a:a.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),e=this.editor.editable(),f;!b&&b!==null&&(b=e.getName());e=b||e.getName();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&e=="pre"){e="div";a="<pre>"+a+"</pre>";f=1}e=this.editor.document.createElement(e);e.setHtml("a"+a);a=e.getHtml().substr(1);a=a.replace(RegExp(" data-cke-"+CKEDITOR.rnd+"-","ig")," ");f&&(a=a.replace(/^<pre>|<\/pre>$/gi,""));a=a.replace(C,"$1$2");a=j(a);a=y(a);a=CKEDITOR.htmlParser.fragment.fromHtml(a, +b,d===false?false:c(this.editor.config));b=new CKEDITOR.htmlParser.basicWriter;a.writeChildrenHtml(b,this.dataFilter,1);a=b.getHtml(true);return a=q(a)},toDataFormat:function(a){var b=this.editor.editable(),d=this.writer,a=CKEDITOR.htmlParser.fragment.fromHtml(a,b.getName(),c(this.editor.config));d.reset();a.writeChildrenHtml(d,this.htmlFilter,1);d=d.getHtml(true);d=y(d);return d=z(d,this.editor)}};var s=/(?: |\xa0)$/,A="{cke_protected}",B=CKEDITOR.dtd,p=["caption","colgroup","col","thead","tfoot", +"tbody"],E=CKEDITOR.tools.extend({},B.$blockLimit,B.$block),u={elements:{},attributeNames:[[/^on/,"data-cke-pa-on"]]},r={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,o=0;o<c.length;o++){d="data-cke-saved-"+c[o];d in b&&delete b[c[o]]}}return a},table:function(a){a.children.slice(0).sort(function(a, +b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(p,a.name);d=CKEDITOR.tools.indexOf(p,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=h(a);d=h(b)}return c>d?1:-1})},embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},param:function(a){a.children=[];a.isEmpty=true;return a},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}, +span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];b&&(b.value=a.attributes["data-cke-title"]||"")}},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, +""))||false}}};if(CKEDITOR.env.ie)r.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};for(var D in{input:1,textarea:1}){u.elements[D]=m;r.elements[D]=n}var v=/<(a|area|img|input|source)\b([^>]*)>/gi,t=/\b(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,w=/(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,I=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,G=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, +C=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,Q=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})(); +CKEDITOR.htmlParser.element=function(b,c){this.name=b;this.attributes=c||{};this.children=[];var a=b||"",f=a.match(/^cke:(.*)/);f&&(a=f[1]);a=!(!CKEDITOR.dtd.$nonBodyContent[a]&&!CKEDITOR.dtd.$block[a]&&!CKEDITOR.dtd.$listItem[a]&&!CKEDITOR.dtd.$tableContent[a]&&!(CKEDITOR.dtd.$nonEditable[a]||a=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:a,hasInlineStarted:this.isEmpty||!a}}; +CKEDITOR.htmlParser.cssStyle=function(b){var c={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,b,e){b=="font-family"&&(e=e.replace(/["']/g,""));c[b.toLowerCase()]=e});return{rules:c,populate:function(a){var b=this.toString();if(b)a instanceof CKEDITOR.dom.element?a.setAttribute("style",b):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=b:a.style=b},toString:function(){var a=[],b; +for(b in c)c[b]&&a.push(b,":",c[b],";");return a.join("")}}}; +(function(){var b=function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0};CKEDITOR.htmlParser.element.prototype={type:CKEDITOR.NODE_ELEMENT,add:CKEDITOR.htmlParser.fragment.prototype.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},writeHtml:function(c,a){var f=this.attributes,e=this,d=e.name,g,k,h,m;e.filterChildren=function(){if(!m){var b=new CKEDITOR.htmlParser.basicWriter;CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.call(e,b,a);e.children=(new CKEDITOR.htmlParser.fragment.fromHtml(b.getHtml(), +e.clone(),0)).children;m=1}};if(a){if(!this.parent)a.onRoot(this);for(;;){if(!(d=a.onElementName(d)))return;e.name=d;if(!(e=a.onElement(e)))return;e.parent=this.parent;if(e.name==d)break;if(e.type!=CKEDITOR.NODE_ELEMENT){e.writeHtml(c,a);return}d=e.name;if(!d){for(var d=0,n=this.children.length;d<n;d++)this.children[d].parent=e.parent;this.writeChildrenHtml.call(e,c,m?null:a);return}}f=e.attributes}c.openTag(d,f);for(var n=[],o=0;o<2;o++)for(g in f){k=g;h=f[g];if(o==1)n.push([g,h]);else if(a){for(;;)if(k= +a.onAttributeName(g))if(k!=g){delete f[g];g=k}else break;else{delete f[g];break}k&&((h=a.onAttribute(e,k,h))===false?delete f[k]:f[k]=h)}}c.sortAttributes&&n.sort(b);f=n.length;for(o=0;o<f;o++){g=n[o];c.attribute(g[0],g[1])}c.openTagClose(d,e.isEmpty);if(!e.isEmpty){this.writeChildrenHtml.call(e,c,m?null:a);c.closeTag(d)}},writeChildrenHtml:function(b,a){CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.apply(this,arguments)}}})(); +(function(){var b={};CKEDITOR.template=function(c){if(b[c])this.output=b[c];else{var a=c.replace(/'/g,"\\'").replace(/{([^}]+)}/g,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=b[c]=Function("data","buffer","return buffer?buffer.push('"+a+"'):['"+a+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(b){CKEDITOR.instances[b.name]=b;b.on("focus",function(){if(CKEDITOR.currentInstance!=b){CKEDITOR.currentInstance=b;CKEDITOR.fire("currentInstance")}});b.on("blur",function(){if(CKEDITOR.currentInstance==b){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,b)};CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]}; +(function(){var b={};CKEDITOR.addTemplate=function(c,a){var f=b[c];if(f)return f;f={name:c,source:a};CKEDITOR.fire("template",f);return b[c]=new CKEDITOR.template(f.source)};CKEDITOR.getTemplate=function(c){return b[c]}})();(function(){var b=[];CKEDITOR.addCss=function(c){b.push(c)};CKEDITOR.getCss=function(){return b.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(b,c){if(!CKEDITOR.env.isCompatible)return null;b=CKEDITOR.dom.element.get(b);if(b.getEditor())throw'The editor instance "'+b.getEditor().name+'" is already attached to the provided element.';var a=new CKEDITOR.editor(c,b,CKEDITOR.ELEMENT_MODE_INLINE);a.setData(b.getHtml(),null,true);a.on("loaded",function(){a.fire("uiReady");a.editable(b);a.container=b;a.setData(a.getData(1));a.fire("contentDom");a.mode="wysiwyg";a.fire("mode");a.fireOnce("instanceReady");CKEDITOR.fire("instanceReady", +null,a);a.resetDirty()},null,null,1E4);a.on("destroy",function(){a.element.clearCustomData();delete a.element});return a};CKEDITOR.inlineAll=function(){var b,c,a;for(a in CKEDITOR.dtd.$editable)for(var f=CKEDITOR.document.getElementsByTag(a),e=0,d=f.count();e<d;e++){b=f.getItem(e);if(b.getAttribute("contenteditable")=="true"){c={element:b,config:{}};CKEDITOR.fire("inline",c)!==false&&CKEDITOR.inline(b,c.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})(); +CKEDITOR.replaceClass="ckeditor"; +(function(){function b(b,e,k,h){if(!CKEDITOR.env.isCompatible)return null;b=CKEDITOR.dom.element.get(b);if(b.getEditor())throw'The editor instance "'+b.getEditor().name+'" is already attached to the provided element.';var m=new CKEDITOR.editor(e,b,h);h==CKEDITOR.ELEMENT_MODE_REPLACE&&b.setStyle("visibility","hidden");k&&m.setData(k,null,true);m.on("loaded",function(){a(m);h==CKEDITOR.ELEMENT_MODE_REPLACE&&m.config.autoUpdateElement&&f(m);m.setMode(m.config.startupMode,function(){m.fireOnce("instanceReady"); +CKEDITOR.fire("instanceReady",null,m);m.resetDirty()})});m.on("destroy",c);return m}function c(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&b.show();delete this.element}}function a(a){var b=a.name,c=a.element,f=a.elementMode,m=a.fire("uiSpace",{space:"top",html:""}).html,n=a.fireOnce("uiSpace",{space:"bottom",html:""}).html;e||(e=CKEDITOR.addTemplate("maincontainer",'<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+ +CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'));b=CKEDITOR.dom.element.createFromHtml(e.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.lang.editor, +topHtml:m?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+m+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:n?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+n+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(f==CKEDITOR.ELEMENT_MODE_REPLACE){c.hide();b.insertAfter(c)}else c.append(b);a.container=b;m&&a.ui.space("top").unselectable();n&&a.ui.space("bottom").unselectable();c= +a.config.width;f=a.config.height;c&&b.setStyle("width",CKEDITOR.tools.cssLength(c));f&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(f));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}function f(a){var b=a.element;if(a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&b.is("textarea")){var c=b.$.form&&new CKEDITOR.dom.element(b.$.form);if(c){var e=function(){a.updateElement()};c.on("submit",e);if(!c.$.submit.nodeName&&!c.$.submit.length)c.$.submit= +CKEDITOR.tools.override(c.$.submit,function(b){return function(){a.updateElement();b.apply?b.apply(this,arguments):b()}});a.on("destroy",function(){c.removeListener("submit",e)})}}}CKEDITOR.replace=function(a,c){return b(a,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(a,c,e){return b(a,c,e,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var c=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]== +"string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){c={};if(arguments[0](e,c)===false)continue}this.replace(e,c)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var c=this,e=this._.modes;if(!(a==c.mode||!e||!e[a])){c.fire("beforeSetMode",a);if(c.mode){var f=c.checkDirty();c._.previousMode=c.mode;c.fire("beforeModeUnload");c.editable(0); +c.ui.space("contents").setHtml("");c.mode=""}this._.modes[a](function(){c.mode=a;if(f!==void 0){c.mayBeDirty=true;!f&&c.resetDirty()}setTimeout(function(){c.fire("mode");b&&b.call(c)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,c,e){var f=this.container,n=this.ui.space("contents"),o=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?f.getChild(1):f;e.setSize("width",a,true);o&&(o.style.width="1%");n.setStyle("height",Math.max(b-(c?0:(e.$.offsetHeight||0)-(n.$.clientHeight|| +0)),0)+"px");o&&(o.style.width="100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};var e;CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){function b(b){var c=b.editor,d=c.editable(),e=b.data.path,f=e.blockLimit,g=b.data.selection.getRanges()[0],i=c.config.enterMode;if(CKEDITOR.env.gecko){var h=e.block||e.blockLimit||e.root,m=h&&h.getLast(a);h&&(h.isBlockBoundary()&&(!m||!(m.type==CKEDITOR.NODE_ELEMENT&&m.isBlockBoundary()))&&!h.is("pre")&&!h.getBogus())&&h.appendBogus()}if(c.config.autoParagraph!==false&&i!=CKEDITOR.ENTER_BR&&g.collapsed&&d.equals(f)&&!e.block){d=g.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);e=new CKEDITOR.dom.walker(d); +e.guard=function(b){return!a(b)||b.type==CKEDITOR.NODE_COMMENT||b.isReadOnly()};if(!e.checkForward()||d.checkStartOfBlock()&&d.checkEndOfBlock()){c=g.fixBlock(true,c.config.enterMode==CKEDITOR.ENTER_DIV?"div":"p");if(CKEDITOR.env.ie)(c=c.getFirst(a))&&(c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?: |\xa0)$/))&&c.remove();g.select();b.cancel()}}}function c(a){var b=a.data.getTarget();if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}} +function a(a){return h(a)&&m(a)}function f(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function e(b){var c,d=b.getRanges()[0],b=b.root,e=d.startPath(),f={table:1,ul:1,ol:1,dl:1},g=CKEDITOR.dom.walker.bogus();if(e.contains(f)){var i=d.clone();i.collapse(1);i.setStartAt(b,CKEDITOR.POSITION_AFTER_START);i=new CKEDITOR.dom.walker(i);e=function(b,d){return function(b,o){o&&(b.type== +CKEDITOR.NODE_ELEMENT&&b.is(f))&&(c=b);if(a(b)&&!o&&(!d||!g(b)))return false}};i.guard=e(i);i.checkBackward();if(c){i=d.clone();i.collapse();i.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);i=new CKEDITOR.dom.walker(i);i.guard=e(i,1);c=0;i.checkForward();return c}}return null}function d(a){a.editor.focus();a.editor.fire("saveSnapshot")}function g(a,b){var c=a.editor;!b&&c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element, +$:function(a,b){this.base(b.$||b);this.editor=a;this.hasFocus=false;this.setup()},proto:{focus:function(){this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]();CKEDITOR.env.safari&&!this.isInline()&&(CKEDITOR.document.getActive().equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a=a=="focus"?"focusin":"focusout";b=f(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this, +c)},attachListener:function(a,b,c,d,e,f){!this._.listeners&&(this._.listeners=[]);var g=Array.prototype.slice.call(arguments,1);this._.listeners.push(a.on.apply(a,g))},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c,b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&& +(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){d(this);n(this,b=="text"?"text":"html",a)},insertText:function(a){d(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre",true)?CKEDITOR.ENTER_BR:b.config.enterMode,b=c==CKEDITOR.ENTER_BR,e=CKEDITOR.tools, +a=e.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"    "),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var f=/\n{2}/g;if(f.test(a))var g="<"+c+">",i="</"+c+">",a=g+a.replace(f,function(){return i+g})+i}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return e.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g," ");n(this,"text",a)},insertElement:function(b){d(this);for(var c= +this.editor,e=c.config.enterMode,f=c.getSelection(),h=f.getRanges(),m=b.getName(),i=CKEDITOR.dtd.$block[m],n,k,B,p=h.length-1;p>=0;p--){n=h[p];if(!n.checkReadOnly()){n.deleteContents(1);k=!p&&b||b.clone(1);var E,u;if(i)for(;(E=n.getCommonAncestor(0,1))&&(u=CKEDITOR.dtd[E.getName()])&&(!u||!u[m]);)if(E.getName()in CKEDITOR.dtd.span)n.splitElement(E);else if(n.checkStartOfBlock()&&n.checkEndOfBlock()){n.setStartBefore(E);n.collapse(true);E.remove()}else n.splitBlock(e==CKEDITOR.ENTER_DIV?"div":"p", +c.editable());n.insertNode(k);B||(B=k)}}if(B){n.moveToPosition(B,CKEDITOR.POSITION_AFTER_END);if(i)if((b=B.getNext(a))&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(CKEDITOR.dtd.$block))b.getDtd()["#"]?n.moveToElementEditStart(b):n.moveToElementEditEnd(B);else if(!b&&e!=CKEDITOR.ENTER_BR){b=n.fixBlock(true,e==CKEDITOR.ENTER_DIV?"div":"p");n.moveToElementEditStart(b)}}f.selectRanges([n]);g(this,CKEDITOR.env.opera)},setData:function(a,b){!b&&this.editor.dataProcessor&&(a=this.editor.dataProcessor.toHtml(a)); +this.setHtml(a);this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();!a&&this.editor.dataProcessor&&(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData", +function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(k,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"|| +this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO? +"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(a){CKEDITOR.env.opera&&CKEDITOR.document.getActive().equals(this.isInline()?this:this.getWindow().getFrame())?a.cancel():this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus= +true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var d=a.config.contentsLangDirection;this.getDirection(1)!=d&&this.changeAttr("dir",d);var f=CKEDITOR.getCss();if(f){d=b.getHead();if(!d.getCustomData("stylesheet")){f=b.appendStyleText(f);f=new CKEDITOR.dom.element(f.ownerNode|| +f.owningElement);d.setCustomData("stylesheet",f);f.data("cke-temp",1)}}d=b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",d+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=a.getTarget();b.is("a")&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.keyCode,d;if(c in{8:1,46:1}){var l=a.getSelection(),b=l.getRanges()[0], +f=b.startPath(),j,g,m,c=c==8;if(l=e(l)){a.fire("saveSnapshot");b.moveToPosition(l,CKEDITOR.POSITION_BEFORE_START);l.remove();b.select();a.fire("saveSnapshot");d=1}else if(b.collapsed)if((j=f.block)&&b[c?"checkStartOfBlock":"checkEndOfBlock"]()&&(m=j[c?"getPrevious":"getNext"](h))&&m.is("table")){a.fire("saveSnapshot");b[c?"checkEndOfBlock":"checkStartOfBlock"]()&&j.remove();b["moveToElementEdit"+(c?"End":"Start")](m);b.select();a.fire("saveSnapshot");d=1}else if(f.blockLimit&&f.blockLimit.is("td")&& +(g=f.blockLimit.getAscendant("table"))&&b.checkBoundaryOfElement(g,c?CKEDITOR.START:CKEDITOR.END)&&(m=g[c?"getPrevious":"getNext"](h))){a.fire("saveSnapshot");b["moveToElementEdit"+(c?"End":"Start")](m);b.checkStartOfBlock()&&b.checkEndOfBlock()?m.remove():b.select();a.fire("saveSnapshot");d=1}else if((g=f.contains(["td","th","caption"]))&&b.checkBoundaryOfElement(g,c?CKEDITOR.START:CKEDITOR.END))if((m=g[c?"getPreviousSourceNode":"getNextSourceNode"](1,CKEDITOR.NODE_ELEMENT))&&!m.isReadOnly()&&b.root.contains(m)){b[c? +"moveToElementEditEnd":"moveToElementEditStart"](m);b.select();d=1}}return!d});CKEDITOR.env.ie&&this.attachListener(this,"click",c);!CKEDITOR.env.ie&&!CKEDITOR.env.opera&&this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget(); +if(!b.getOuterHtml().replace(k,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop()); +a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var k=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, +h=CKEDITOR.dom.walker.whitespaces(true),m=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(a){var c=a.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(a){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty(); +c.fire("lockSnapshot");b(a);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=this.lang.editor+", "+this.name;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);a.changeAttr("title",c);if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var d=CKEDITOR.tools.getNextId(),e=CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+ +this.lang.common.editorHelp+"</span>");c.append(e);a.changeAttr("aria-describedby",d)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function b(a){return a.type==CKEDITOR.NODE_ELEMENT}function c(a,d){var e,f,j,g,t=[],h=d.range.startContainer;e=d.range.startPath();for(var h=i[h.getName()],m=0,n=a.getChildren(),q=n.count(),k=-1,z=-1,y=0,s=e.contains(i.$list);m<q;++m){e=n.getItem(m);if(b(e)){j=e.getName(); +if(s&&j in CKEDITOR.dtd.$list)t=t.concat(c(e,d));else{g=!!h[j];if(j=="br"&&e.data("cke-eol")&&(!m||m==q-1)){y=(f=m?t[m-1].node:n.getItem(m+1))&&(!b(f)||!f.is("br"));f=f&&b(f)&&i.$block[f.getName()]}k==-1&&!g&&(k=m);g||(z=m);t.push({isElement:1,isLineBreak:y,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:j,allowed:g});f=y=0}}else t.push({isElement:0,node:e,allowed:1})}if(k>-1)t[k].firstNotAllowed=1;if(z>-1)t[z].lastNotAllowed=1;return t}function d(a,c){var e=[],f=a.getChildren(),l=f.count(), +g,t=0,h=i[c],m=!a.is(i.$inline)||a.is("br");for(m&&e.push(" ");t<l;t++){g=f.getItem(t);b(g)&&!g.is(h)?e=e.concat(d(g,c)):e.push(g)}m&&e.push(" ");return e}function e(a){return a&&b(a)&&(a.is(i.$removeEmpty)||a.is("a")&&!a.isBlockBoundary())}function f(a,c,d,e){var l=a.clone(),j,g;l.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((j=(new CKEDITOR.dom.walker(l)).next())&&b(j)&&m[j.getName()]&&(g=j.getPrevious())&&b(g)&&!g.getParent().equals(a.startContainer)&&d.contains(g)&&e.contains(j)&&j.isIdentical(g)){j.moveChildren(g); +j.remove();f(a,c,d,e)}}function h(a,c){function d(a,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&b(a)&&a.is("br")){a.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,a[a.length-1]);if(f&&d(f,a[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var i=CKEDITOR.dtd,m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},n={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},k=CKEDITOR.tools.extend({},i.$inline);delete k.br; +return function(m,s,u){var r=m.editor;m.getDocument();var D=r.getSelection().getRanges()[0];if(!D.checkReadOnly()){var v=(new CKEDITOR.dom.elementPath(D.startContainer,D.root)).blockLimit||D.root,s={type:s,editable:m,editor:r,range:D,blockLimit:v,mergeCandidates:[],zombies:[]},r=s.range,v=s.mergeCandidates,t,w,I,G,C;if(s.type=="text"&&r.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){w=CKEDITOR.dom.element.createFromHtml("<span> </span>",r.document);r.insertNode(w);r.setStartAfter(w)}I=new CKEDITOR.dom.elementPath(r.startContainer); +s.endPath=G=new CKEDITOR.dom.elementPath(r.endContainer);if(!r.collapsed){t=G.block||G.blockLimit;var Q=r.getCommonAncestor();t&&(!t.equals(Q)&&!t.contains(Q)&&r.checkEndOfBlock())&&s.zombies.push(t);r.deleteContents()}for(;(C=b(r.startContainer)&&r.startContainer.getChild(r.startOffset-1))&&b(C)&&C.isBlockBoundary()&&I.contains(C);)r.moveToPosition(C,CKEDITOR.POSITION_BEFORE_END);f(r,s.blockLimit,I,G);if(w){r.setEndBefore(w);r.collapse();w.remove()}w=r.startPath();if(t=w.contains(e,false,1)){r.splitElement(t); +s.inlineStylesRoot=t;s.inlineStylesPeak=w.lastElement}w=r.createBookmark();(t=w.startNode.getPrevious(a))&&b(t)&&e(t)&&v.push(t);(t=w.startNode.getNext(a))&&b(t)&&e(t)&&v.push(t);for(t=w.startNode;(t=t.getParent())&&e(t);)v.push(t);r.moveToBookmark(w);if(u){C=u;u=s.range;if(s.type=="text"&&s.inlineStylesRoot){w=C;C=s.inlineStylesPeak;r=C.getDocument().createText("{cke-peak}");for(v=s.inlineStylesRoot.getParent();!C.equals(v);){r=r.appendTo(C.clone());C=C.getParent()}C=r.getOuterHtml().replace("{cke-peak}", +w)}w=s.blockLimit.getName();if(/^\s+|\s+$/.test(C)&&"span"in CKEDITOR.dtd[w]){var K='<span data-cke-marker="1"> </span>';C=K+C+K}C=s.editor.dataProcessor.toHtml(C,null,false);w=u.document.createElement("body");w.setHtml(C);if(K){w.getFirst().remove();w.getLast().remove()}if((K=u.startPath().block)&&!(K.getChildCount()==1&&K.getBogus()))a:{var F;if(w.getChildCount()==1&&b(F=w.getFirst())&&F.is(n)){K=F.getElementsByTag("*");u=0;for(r=K.count();u<r;u++){C=K.getItem(u);if(!C.is(k))break a}F.moveChildren(F.getParent(1)); +F.remove()}}s.dataWrapper=w;F=s.range;var K=F.document,x,u=s.blockLimit;w=0;var J;C=[];var H,N,v=r=0,L,O;I=F.startContainer;t=s.endPath.elements[0];var P;G=t.getPosition(I);Q=!!t.getCommonAncestor(I)&&G!=CKEDITOR.POSITION_IDENTICAL&&!(G&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);I=c(s.dataWrapper,s);for(h(I,F);w<I.length;w++){G=I[w];if(x=G.isLineBreak){x=F;L=u;var M=void 0,R=void 0;if(G.hasBlockSibling)x=1;else{M=x.startContainer.getAscendant(i.$block,1);if(!M||!M.is({div:1,p:1}))x= +0;else{R=M.getPosition(L);if(R==CKEDITOR.POSITION_IDENTICAL||R==CKEDITOR.POSITION_CONTAINS)x=0;else{L=x.splitElement(M);x.moveToPosition(L,CKEDITOR.POSITION_AFTER_START);x=1}}}}if(x)v=w>0;else{x=F.startPath();if(!G.isBlock&&(N=s.editor.config.enterMode!=CKEDITOR.ENTER_BR&&s.editor.config.autoParagraph!==false?s.editor.config.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false)&&!x.block&&x.blockLimit&&x.blockLimit.equals(F.root)){N=K.createElement(N);!CKEDITOR.env.ie&&N.appendBogus();F.insertNode(N);!CKEDITOR.env.ie&& +(J=N.getBogus())&&J.remove();F.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}if((x=F.startPath().block)&&!x.equals(H)){if(J=x.getBogus()){J.remove();C.push(x)}H=x}G.firstNotAllowed&&(r=1);if(r&&G.isElement){x=F.startContainer;for(L=null;x&&!i[x.getName()][G.name];){if(x.equals(u)){x=null;break}L=x;x=x.getParent()}if(x){if(L){O=F.splitElement(L);s.zombies.push(O);s.zombies.push(L)}}else{L=u.getName();P=!w;x=w==I.length-1;L=d(G.node,L);for(var M=[],R=L.length,T=0,U=void 0,V=0,W=-1;T<R;T++){U=L[T]; +if(U==" "){if(!V&&(!P||T)){M.push(new CKEDITOR.dom.text(" "));W=M.length}V=1}else{M.push(U);V=0}}x&&W==M.length&&M.pop();P=M}}if(P){for(;x=P.pop();)F.insertNode(x);P=0}else F.insertNode(G.node);if(G.lastNotAllowed&&w<I.length-1){(O=Q?t:O)&&F.setEndAt(O,CKEDITOR.POSITION_AFTER_START);r=0}F.collapse()}}s.dontMoveCaret=v;s.bogusNeededBlocks=C}J=s.range;var S;O=s.bogusNeededBlocks;for(P=J.createBookmark();H=s.zombies.pop();)if(H.getParent()){N=J.clone();N.moveToElementEditStart(H);N.removeEmptyBlocksAtEnd()}if(O)for(;H= +O.pop();)H.append(CKEDITOR.env.ie?J.document.createText(" "):J.document.createElement("br"));for(;H=s.mergeCandidates.pop();)H.mergeSiblings();J.moveToBookmark(P);if(!s.dontMoveCaret){for(H=b(J.startContainer)&&J.startContainer.getChild(J.startOffset-1);H&&b(H)&&!H.is(i.$empty);){if(H.isBlockBoundary())J.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);else{if(e(H)&&H.getHtml().match(/(\s| )$/g)){S=null;break}S=J.clone();S.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END)}H=H.getLast(a)}S&&J.moveToRange(S)}D.select(); +g(m)}}}()})(); +(function(){function b(){var a=this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){this.fire("selectionCheck",a);var b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}}function c(){k=true;if(!g){a.call(this);g=CKEDITOR.tools.setTimeout(a,200,this)}}function a(){g=null;if(k){CKEDITOR.tools.setTimeout(b,0,this);k=false}}function f(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false: +a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,d=a.getPreviousNode(h,null,c),e=a.getNextNode(h,null,c);return b(d)||b(e,1)||!d&&!e&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function e(a){return a.getCustomData("cke-fillingChar")}function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&& +e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var g;f=e;if(!f.isCollapsed){g=f.getRangeAt(0);g.setStart(f.anchorNode,f.anchorOffset);g.setEnd(f.focusNode,f.focusOffset);g=g.collapsed}g&&d.unshift(d.pop())}}c.setText(c.getText().replace(/\u200B/g,""));if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}} +var g,k,h=CKEDITOR.dom.walker.invisible(1);CKEDITOR.on("instanceCreated",function(a){function e(){var a=f.getSelection();a&&a.removeAllRanges()}var f=a.editor;f.define("selectionChange",{errorProof:1});f.on("contentDom",function(){var a=f.document,e=CKEDITOR.document,l=f.editable(),g=a.getBody(),o=a.getDocumentElement(),h=l.isInline();if(CKEDITOR.env.ie||CKEDITOR.env.opera||h){var n;l.attachListener(l,"focus",function(){f.unlockSelection(n);n=0},null,null,-1);var k,E=function(){k=f.getSelection(1); +k.lock()};m?l.attachListener(l,"beforedeactivate",E,null,null,-1):l.attachListener(f,"selectionCheck",E,null,null,-1);l.attachListener(l,"blur",function(){f.lockSelection(k);n=1},null,null,-1);l.attachListener(l,"mousedown",function(){n=0})}if(CKEDITOR.env.ie&&!h){var u;l.attachListener(l,"mousedown",function(a){a.data.$.button==2&&f.document.$.selection.type=="None"&&(u=f.window.getScrollPosition())});l.attachListener(l,"mouseup",function(a){if(a.data.$.button==2&&u){f.document.$.documentElement.scrollLeft= +u.x;f.document.$.documentElement.scrollTop=u.y}u=null});if(a.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)o.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=g.$.createTextRange();try{c.moveToPoint(a.x,a.y)}catch(e){}d.setEndPoint(l.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){o.removeListener("mousemove",b);e.removeListener("mouseup",c);o.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&& +a.$.y<o.$.clientHeight&&a.$.x<o.$.clientWidth){var d=g.$.createTextRange();try{d.moveToPoint(a.$.x,a.$.y)}catch(f){}var l=d.duplicate();o.on("mousemove",b);e.on("mouseup",c);o.on("mouseup",c)}});if(CKEDITOR.env.version>7){o.on("mousedown",function(a){if(a.data.getTarget().is("html")){e.on("mouseup",r);o.on("mouseup",r)}});var r=function(){e.removeListener("mouseup",r);o.removeListener("mouseup",r);var b=CKEDITOR.document.$.selection,c=b.createRange();b.type!="None"&&c.parentElement().ownerDocument== +a.$&&c.select()}}}}l.attachListener(l,"selectionchange",b,f);l.attachListener(l,"keyup",c,f);l.attachListener(l,"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(l.isInline()?CKEDITOR.env.webkit||CKEDITOR.env.gecko:CKEDITOR.env.opera){var D;l.attachListener(l,"mousedown",function(){D=1});l.attachListener(a.getDocumentElement(),"mouseup",function(){D&&c.call(f);D=0})}else l.attachListener(l,"mouseup",c,f);if(CKEDITOR.env.webkit)a.on("keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(f.editable())}}, +null,null,-1)});f.on("contentDomUnload",f.forceNextSelectionCheck,f);f.on("dataReady",function(){f.selectionChange(1)});CKEDITOR.env.ie9Compat&&f.on("beforeDestroy",e,null,null,9);CKEDITOR.env.webkit&&f.on("setData",e);f.on("contentDomUnload",function(){f.unlockSelection()})});CKEDITOR.on("instanceReady",function(a){var b=a.editor,c=b.editable();if(CKEDITOR.env.webkit){b.on("selectionChange",function(){var a=e(c);a&&(a.getCustomData("ready")?d(c):a.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode", +function(){d(c)},null,null,-1);var f,g,a=function(){var a=b.document,d=e(c);if(d){a=a.$.defaultView.getSelection();a.type=="Caret"&&a.anchorNode==d.$&&(g=1);f=d.getText();d.setText(f.replace(/\u200B/g,""))}},h=function(){var a=b.document,d=e(c);if(d){d.setText(f);if(g){a.$.defaultView.getSelection().setPosition(d.$,d.getLength());g=0}}};b.on("beforeUndoImage",a);b.on("afterUndoImage",h);b.on("beforeGetData",a,null,null,0);b.on("getData",h)}});CKEDITOR.editor.prototype.selectionChange=function(a){(a? +b:c).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if(this._.savedSelection&&!a)return this._.savedSelection;return(a=this.editable())?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection; +return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var m= +typeof window.getSelection!="function";CKEDITOR.dom.selection=function(a){var b=a instanceof CKEDITOR.dom.element;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=b?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(CKEDITOR.env.webkit){a=this.document.getWindow().$.getSelection();if(a.type=="None"&&this.document.getActive().equals(this.root)||a.type=="Caret"&&a.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT){var c=new CKEDITOR.dom.range(this.root);c.moveToPosition(this.root, +CKEDITOR.POSITION_AFTER_START);b=this.document.$.createRange();b.setStart(c.startContainer.$,c.startOffset);b.collapse(1);a.addRange(b)}}var a=this.getNative(),d;if(a)if(a.getRangeAt)d=(c=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(c.commonAncestorContainer);else{try{c=a.createRange()}catch(e){}d=c&&CKEDITOR.dom.element.get(c.item&&c.item(0)||c.parentElement())}if(!d||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement= +null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var n={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=m?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:m?function(){var a=this._.cache;if(a.type)return a.type; +var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset- +c.startOffset==1&&n[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=m?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement(),e=d.ownerDocument;if(!d.hasChildNodes())return{container:d,offset:0};for(var f=d.children,g,j,h=b.duplicate(),o=0,m=f.length-1,n=-1,k,v;o<=m;){n=Math.floor((o+m)/2);g=f[n];h.moveToElementText(g);k=h.compareEndPoints("StartToStart", +b);if(k>0)m=n-1;else if(k<0)o=n+1;else{if(CKEDITOR.env.ie9Compat&&g.tagName=="BR"){f=e.defaultView.getSelection();return{container:f[c?"anchorNode":"focusNode"],offset:f[c?"anchorOffset":"focusOffset"]}}return{container:d,offset:a(g)}}}if(n==-1||n==f.length-1&&k<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);e=h.text.replace(/(\r\n|\r)/g,"\n").length;f=d.childNodes;if(!e){g=f[f.length-1];return g.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:f.length}:{container:g,offset:g.nodeValue.length}}for(d= +f.length;e>0&&d>0;){j=f[--d];if(j.nodeType==CKEDITOR.NODE_TEXT){v=j;e=e-j.nodeValue.length}}return{container:v,offset:-e}}h.collapse(k>0?true:false);h.setEndPoint(k>0?"StartToStart":"EndToStart",b);e=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!e)return{container:d,offset:a(g)+(k>0?0:1)};for(;e>0;)try{j=g[k>0?"previousSibling":"nextSibling"];if(j.nodeType==CKEDITOR.NODE_TEXT){e=e-j.nodeValue.length;v=j}g=j}catch(t){return{container:d,offset:a(g)}}return{container:v,offset:k>0?-e:v.nodeValue.length+ +e}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f= +c.item(e),g=f.parentNode,l=0,a=new CKEDITOR.dom.range(this.root);l<g.childNodes.length&&g.childNodes[l]!=f;l++);a.setStart(new CKEDITOR.dom.node(g),l);a.setEnd(new CKEDITOR.dom.node(g),l+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a}; +return function(b){var c=this._.cache;if(c.ranges&&!b)return c.ranges;if(!c.ranges)c.ranges=new CKEDITOR.dom.rangeList(a.call(this));if(b)for(var d=c.ranges,e=0;e<d.length;e++){var f=d[e];f.getCommonAncestor().isReadOnly()&&d.splice(e,1);if(!f.collapsed){if(f.startContainer.isReadOnly())for(var b=f.startContainer,g;b;){if((g=b.type==CKEDITOR.NODE_ELEMENT)&&b.is("body")||!b.isReadOnly())break;g&&b.getAttribute("contentEditable")=="false"&&f.setStartAfter(b);b=b.getParent()}b=f.startContainer;g=f.endContainer; +var h=f.startOffset,m=f.endOffset,n=f.clone();b&&b.type==CKEDITOR.NODE_TEXT&&(h>=b.getLength()?n.setStartAfter(b):n.setStartBefore(b));g&&g.type==CKEDITOR.NODE_TEXT&&(m?n.setEndAfter(g):n.setEndBefore(g));b=new CKEDITOR.dom.walker(n);b.evaluator=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.isReadOnly()){var b=f.clone();f.setEndBefore(a);f.collapsed&&d.splice(e--,1);if(!(a.getPosition(n.endContainer)&CKEDITOR.POSITION_CONTAINS)){b.setStartAfter(a);b.collapsed||d.splice(e+1,0,b)}return true}return false}; +b.next()}}return c.ranges}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b); +else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)}, +function(){for(var a=b.getRanges()[0],c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&n[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=m?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement(); +this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges();this.isLocked=0;this.reset();if(a)(a=b||c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={}},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){if(a.length)if(this.isLocked){var b= +CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();!b.equals(this.root)&&b.focus()}else{if(m){var c=CKEDITOR.dom.walker.whitespaces(true),e=/\ufeff|\u00a0/,g={table:1,tbody:1,tr:1};if(a.length>1){b=a[a.length-1];a[0].setEnd(b.endContainer,b.endOffset)}var b=a[0],a=b.collapsed,h,i,k,A=b.getEnclosedNode();if(A&&A.type==CKEDITOR.NODE_ELEMENT&&A.getName()in n&&(!A.is("a")||!A.getText()))try{k=A.$.createControlRange();k.addElement(A.$);k.select();return}catch(B){}(b.startContainer.type== +CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in g||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in g)&&b.shrink(CKEDITOR.NODE_ELEMENT,true);k=b.createBookmark();var g=k.startNode,p;if(!a)p=k.endNode;k=b.document.$.body.createTextRange();k.moveToElementText(g.$);k.moveStart("character",1);if(p){e=b.document.$.body.createTextRange();e.moveToElementText(p.$);k.setEndPoint("EndToEnd",e);k.moveEnd("character",-1)}else{h=g.getNext(c);i=g.hasAscendant("pre");h=!(h&&h.getText&& +h.getText().match(e))&&(i||!g.hasPrevious()||g.getPrevious().is&&g.getPrevious().is("br"));i=b.document.createElement("span");i.setHtml("");i.insertBefore(g);h&&b.document.createText("").insertBefore(g)}b.setStartBefore(g);g.remove();if(a){if(h){k.moveStart("character",-1);k.select();b.document.$.selection.clear()}else k.select();b.moveToPosition(i,CKEDITOR.POSITION_BEFORE_START);i.remove()}else{b.setEndBefore(p);p.remove();k.select()}}else{p=this.getNative();if(!p)return;if(CKEDITOR.env.opera){b= +this.document.$.createRange();b.selectNodeContents(this.root.$);p.addRange(b)}this.removeAllRanges();for(e=0;e<a.length;e++){if(e<a.length-1){b=a[e];k=a[e+1];i=b.clone();i.setStart(b.endContainer,b.endOffset);i.setEnd(k.startContainer,k.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);h=i.getCommonAncestor();i=i.getEnclosedNode();if(h.isReadOnly()||i&&i.isReadOnly()){k.setStart(b.startContainer,b.startOffset);a.splice(e--,1);continue}}}b=a[e];k=this.document.$.createRange();h=b.startContainer; +if(CKEDITOR.env.opera&&b.collapsed&&h.type==CKEDITOR.NODE_ELEMENT){i=h.getChild(b.startOffset-1);c=h.getChild(b.startOffset);if(!i&&!c&&h.is(CKEDITOR.dtd.$removeEmpty)||i&&i.type==CKEDITOR.NODE_ELEMENT||c&&c.type==CKEDITOR.NODE_ELEMENT){b.insertNode(this.document.createText(""));b.collapse(1)}}if(b.collapsed&&CKEDITOR.env.webkit&&f(b)){h=this.root;d(h,false);i=h.getDocument().createText("​");h.setCustomData("cke-fillingChar",i);b.insertNode(i);if((h=i.getNext())&&!i.getPrevious()&&h.type==CKEDITOR.NODE_ELEMENT&& +h.getName()=="br"){d(this.root);b.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START)}else b.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}k.setStart(b.startContainer.$,b.startOffset);try{k.setEnd(b.endContainer.$,b.endOffset)}catch(E){if(E.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){b.collapse(1);k.setEnd(b.endContainer.$,b.endOffset)}else throw E;}p.addRange(k)}}this.reset();this.root.fire("selectionchange")}},createBookmarks:function(a){return this.getRanges().createBookmarks(a)},createBookmarks2:function(a){return this.getRanges().createBookmarks2(a)}, +selectBookmarks:function(a){for(var b=[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){var a=this.getNative();try{a&&a[m?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}})(); +CKEDITOR.editor.prototype.attachStyleStateChange=function(b,c){var a=this._.styleStateChangeCallbacks;if(!a){a=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(b){for(var c=0;c<a.length;c++){var d=a[c],g=d.style.checkActive(b.data.path)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,g)}})}a.push({style:b,fn:c})};CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function b(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function c(a){var c=a.document;if(a.collapsed){c=y(this,c);a.insertNode(c);a.moveToPosition(c,CKEDITOR.POSITION_BEFORE_END)}else{var d=this.element,e=this._.definition,f,g=e.ignoreReadonly,h=g||e.includeReadonly;h==void 0&&(h=a.root.getCustomData("cke_includeReadonly"));var j=CKEDITOR.dtd[d]|| +(f=true,CKEDITOR.dtd.span);a.enlarge(CKEDITOR.ENLARGE_INLINE,1);a.trim();var m=a.createBookmark(),i=m.startNode,n=m.endNode,k=i,o;if(!g){var q=a.getCommonAncestor(),g=b(i,q),q=b(n,q);g&&(k=g.getNextSourceNode(true));q&&(n=q)}for(k.getPosition(n)==CKEDITOR.POSITION_FOLLOWING&&(k=0);k;){g=false;if(k.equals(n)){k=null;g=true}else{var p=k.type,r=p==CKEDITOR.NODE_ELEMENT?k.getName():null,q=r&&k.getAttribute("contentEditable")=="false",s=r&&k.getAttribute("data-nostyle");if(r&&k.data("cke-bookmark")){k= +k.getNextSourceNode(true);continue}if(!r||j[r]&&!s&&(!q||h)&&(k.getPosition(n)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED&&(!e.childRule||e.childRule(k))){var u=k.getParent();if(u&&((u.getDtd()||CKEDITOR.dtd.span)[d]||f)&&(!e.parentRule||e.parentRule(u))){if(!o&&(!r||!CKEDITOR.dtd.$removeEmpty[r]||(k.getPosition(n)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL| +CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED)){o=a.clone();o.setStartBefore(k)}if(p==CKEDITOR.NODE_TEXT||q||p==CKEDITOR.NODE_ELEMENT&&!k.getChildCount()){for(var p=k,v;(g=!p.getNext(D))&&(v=p.getParent(),j[v.getName()])&&(v.getPosition(i)|CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_FOLLOWING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED&&(!e.childRule|| +e.childRule(v));)p=v;o.setEndAfter(p)}}else g=true}else g=true;k=k.getNextSourceNode(s||q&&!h)}if(g&&o&&!o.collapsed){for(var g=y(this,c),q=g.hasAttributes(),s=o.getCommonAncestor(),p={},r={},u={},z={},A,B,E;g&&s;){if(s.getName()==d){for(A in e.attributes)if(!z[A]&&(E=s.getAttribute(B)))g.getAttribute(A)==E?r[A]=1:z[A]=1;for(B in e.styles)if(!u[B]&&(E=s.getStyle(B)))g.getStyle(B)==E?p[B]=1:u[B]=1}s=s.getParent()}for(A in r)g.removeAttribute(A);for(B in p)g.removeStyle(B);q&&!g.hasAttributes()&&(g= +null);if(g){o.extractContents().appendTo(g);l.call(this,g);o.insertNode(g);g.mergeSiblings();CKEDITOR.env.ie||g.$.normalize()}else{g=new CKEDITOR.dom.element("span");o.extractContents().appendTo(g);o.insertNode(g);l.call(this,g);g.remove(true)}o=null}}a.moveToBookmark(m);a.shrink(CKEDITOR.SHRINK_TEXT)}}function a(a){a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var b=a.createBookmark(),c=b.startNode;if(a.collapsed){for(var d=new CKEDITOR.dom.elementPath(c.getParent(),a.root),e,f=0,g;f<d.elements.length&&(g= +d.elements[f]);f++){if(g==d.block||g==d.blockLimit)break;if(this.checkElementRemovable(g)){var h;if(a.collapsed&&(a.checkBoundaryOfElement(g,CKEDITOR.END)||(h=a.checkBoundaryOfElement(g,CKEDITOR.START)))){e=g;e.match=h?"start":"end"}else{g.mergeSiblings();g.getName()==this.element?o.call(this,g):j(g,s(this)[g.getName()])}}}if(e){g=c;for(f=0;;f++){h=d.elements[f];if(h.equals(e))break;else if(h.match)continue;else h=h.clone();h.append(g);g=h}g[e.match=="start"?"insertBefore":"insertAfter"](e)}}else{var m= +b.endNode,l=this,d=function(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),b=new CKEDITOR.dom.elementPath(m.getParent()),d=null,e=null,f=0;f<a.elements.length;f++){var g=a.elements[f];if(g==a.block||g==a.blockLimit)break;l.checkElementRemovable(g)&&(d=g)}for(f=0;f<b.elements.length;f++){g=b.elements[f];if(g==b.block||g==b.blockLimit)break;l.checkElementRemovable(g)&&(e=g)}e&&m.breakParent(e);d&&c.breakParent(d)};d();for(e=c;!e.equals(m);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&& +this.checkElementRemovable(e)){e.getName()==this.element?o.call(this,e):j(e,s(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)){d();f=c.getNext()}}e=f}}a.moveToBookmark(b)}function f(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&z(a,this)}function e(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition, +c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&a.removeStyle(e)}}function d(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document;d=c.getNextParagraph();)if(!d.isReadOnly()){var f=y(this,e,d);k(d,f)}a.moveToBookmark(b)}function g(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr= +this._.enterMode!=CKEDITOR.ENTER_BR;for(var d;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){var e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div");e&&d.copyAttributes(e);k(d,e)}else o.call(this,d);a.moveToBookmark(b)}function k(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=m(f, +/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g," ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=n(c?[a.getHtml()]:h(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,j;if((j=c.getPrevious(v))&&j.is&&j.is("pre")){d=m(j.getHtml(),/\n$/,"")+ +"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);j.remove()}}else c&&q(b)}function h(a){a.getName();var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a, +b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function n(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=m(e,/^[ \t]*\n/,""),e=m(e,/\n$/,""),e=m(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?" ":b?" "+CKEDITOR.tools.repeat(" ",a.length-1):CKEDITOR.tools.repeat(" ",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ", +a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function o(a){var b=this._.definition,c=b.attributes,b=b.styles,d=s(this)[a.getName()],e=CKEDITOR.tools.isEmpty(c)&&CKEDITOR.tools.isEmpty(b),f;for(f in c)if(!((f=="class"||this._.definition.fullMatch)&&a.getAttribute(f)!=A(f,c[f]))){e=a.hasAttribute(f);a.removeAttribute(f)}for(var g in b)if(!(this._.definition.fullMatch&&a.getStyle(g)!=A(g,b[g],true))){e=e||!!a.getStyle(g);a.removeStyle(g)}j(a,d,p[a.getName()]); +e&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function l(a){for(var b=s(this),c=a.getElementsByTag(this.element),d=c.count();--d>=0;)o.call(this,c.getItem(d));for(var e in b)if(e!=this.element){c=a.getElementsByTag(e);for(d=c.count()-1;d>=0;d--){var f=c.getItem(d);j(f,b[e])}}}function j(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e= +b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null||g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||q(a)}function q(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(v),d=a.getNext(v);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&& +c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&&d.mergeSiblings()}}}function y(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=z(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function z(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c); +return a}function i(a,b){for(var c in a)a[c]=a[c].replace(r,function(a,c){return b[c]})}function s(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function A(a, +b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a,b);return d[c?"getStyle":"getAttribute"](a)}function B(a,b){for(var c=a.document,d=a.getRanges(),e=b?this.removeFromRange:this.applyToRange,f,g=d.createIterator();f=g.getNextRange();)e.call(this,f);a.selectRanges(d);c.removeCustomData("doc_processing_style")}var p={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1, +keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},E={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},u=/\s*(?:;\s*|$)/,r=/#\((.+?)\)/g,D=CKEDITOR.dom.walker.bookmark(0,1),v=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);i(a.attributes,b);i(a.styles, +b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(p[c]?CKEDITOR.STYLE_BLOCK:E[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.editor.prototype.applyStyle=function(a){B.call(a,this.getSelection())};CKEDITOR.editor.prototype.removeStyle=function(a){B.call(a,this.getSelection(),1)};CKEDITOR.style.prototype={apply:function(a){B.call(this,a.getSelection())}, +remove:function(a){B.call(this,a.getSelection(),1)},applyToRange:function(a){return(this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?f:null).call(this,a)},removeFromRange:function(b){return(this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?a:this.type==CKEDITOR.STYLE_BLOCK?g:this.type==CKEDITOR.STYLE_OBJECT?e:null).call(this,b)},applyToObject:function(a){z(a,this)},checkActive:function(a){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block|| +a.blockLimit,true);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var b=a.elements,c=0,d;c<b.length;c++){d=b[c];if(!(this.type==CKEDITOR.STYLE_INLINE&&(d==a.block||d==a.blockLimit))){if(this.type==CKEDITOR.STYLE_OBJECT){var e=d.getName();if(!(typeof this.element=="string"?e==this.element:e in this.element))continue}if(this.checkElementRemovable(d,true))return true}}}return false},checkApplicable:function(a){switch(this.type){case CKEDITOR.STYLE_OBJECT:return a.contains(this.element)}return true}, +checkElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d== +"string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e=="string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b){if(this.checkElementMatch(a,b))return true;var c=s(this)[a.getName()];if(c){var d;if(!(c=c.attributes))return true;for(var e=0;e<c.length;e++){d= +c[e][0];if(d=a.getAttribute(d)){var f=c[e][1];if(f===null||typeof f=="string"&&d==f||f.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style|| +"",d="";c.length&&(c=c.replace(u,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(u,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d}})();CKEDITOR.styleCommand=function(b){this.style=b};CKEDITOR.styleCommand.prototype.exec=function(b){b.focus();this.state==CKEDITOR.TRISTATE_OFF?b.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&b.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"); +CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(b,c,a){CKEDITOR.stylesSet.addExternal(b,c,"");CKEDITOR.stylesSet.load(b,a)}; +CKEDITOR.editor.prototype.getStylesSet=function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions);else{var c=this,a=c.config.stylesCombo_stylesSet||c.config.stylesSet||"default";if(a instanceof Array){c._.stylesDefinitions=a;b(a)}else{var a=a.split(":"),f=a[0];CKEDITOR.stylesSet.addExternal(f,a[1]?a.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(a){c._.stylesDefinitions=a[f];b(c._.stylesDefinitions)})}}}; +CKEDITOR.dom.comment=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createComment(b));CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}}); +(function(){var b={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(b[c]=1);var a={};for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(a[c]=1);CKEDITOR.dom.elementPath=function(c,e){var d=null,g=null,k=[],e=e||c.getDocument().getBody(),h=c;do if(h.type==CKEDITOR.NODE_ELEMENT){k.push(h);if(!this.lastElement){this.lastElement=h;if(h.is(CKEDITOR.dtd.$object))continue}var m=h.getName();if(!g){!d&&a[m]&&(d=h);if(b[m]){var n;if(n=!d){if(m=m=="div"){a:{m= +h.getChildren();n=0;for(var o=m.count();n<o;n++){var l=m.getItem(n);if(l.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[l.getName()]){m=true;break a}}m=false}m=!m&&!h.equals(e)}n=m}n?d=h:g=h}}if(h.equals(e))break}while(h=h.getParent());this.block=d;this.blockLimit=g;this.root=e;this.elements=k}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(b){var c=this.elements,b=b&&b.elements;if(!b||c.length!=b.length)return false;for(var a=0;a<c.length;a++)if(!c[a].equals(b[a]))return false;return true},contains:function(b,c,a){var f;typeof b=="string"&&(f=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?f=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?f=function(a){return CKEDITOR.tools.indexOf(b,a.getName())>-1}:typeof b=="function"?f=b:typeof b=="object"&&(f= +function(a){return a.getName()in b});var e=this.elements,d=e.length;c&&d--;if(a){e=Array.prototype.slice.call(e,0);e.reverse()}for(c=0;c<d;c++)if(f(e[c]))return e[c];return null},isContextFor:function(b){var c;if(b in CKEDITOR.dtd.$block){c=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!c.getDtd()[b]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createTextNode(b));this.$=b};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(b){this.$.nodeValue=b},split:function(b){var c=this.$.parentNode,a=c.childNodes.length,f=this.getLength(),e=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(b),e);if(c.childNodes.length==a)if(b>=f){d=e.createText("");d.insertAfter(this)}else{b=e.createText("");b.insertAfter(d);b.remove()}return d},substring:function(b, +c){return typeof c!="number"?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,c)}}); +(function(){function b(a,b,c){var d=a.serializable,g=b[c?"endContainer":"startContainer"],k=c?"endOffset":"startOffset",h=d?b.document.getById(a.startNode):a.startNode,a=d?b.document.getById(a.endNode):a.endNode;if(g.equals(h.getPrevious())){b.startOffset=b.startOffset-g.getLength()-a.getPrevious().getLength();g=a.getNext()}else if(g.equals(a.getPrevious())){b.startOffset=b.startOffset-g.getLength();g=a.getNext()}g.equals(h.getParent())&&b[k]++;g.equals(a.getParent())&&b[k]++;b[c?"endContainer":"startContainer"]= +g;return b}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,c)};var c={createIterator:function(){var a=this,b=CKEDITOR.dom.walker.bookmark(),c=[],d;return{getNextRange:function(g){d=d==void 0?0:d+1;var k=a[d];if(k&&a.length>1){if(!d)for(var h=a.length-1;h>=0;h--)c.unshift(a[h].createBookmark(true));if(g)for(var m=0;a[d+m+1];){for(var n=k.document,g=0,h=n.getById(c[m].endNode),n=n.getById(c[m+ +1].startNode);;){h=h.getNextSourceNode(false);if(n.equals(h))g=1;else if(b(h)||h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary())continue;break}if(!g)break;m++}for(k.moveToBookmark(c.shift());m--;){h=a[++d];h.moveToBookmark(c.shift());k.setEnd(h.endContainer,h.endOffset)}}return k}}},createBookmarks:function(a){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(a,true));for(var g=d+1;g<this.length;g++){this[g]=b(e,this[g]);this[g]=b(e,this[g],true)}}return c},createBookmarks2:function(a){for(var b= +[],c=0;c<this.length;c++)b.push(this[c].createBookmark2(a));return b},moveToBookmarks:function(a){for(var b=0;b<this.length;b++)this[b].moveToBookmark(a[b])}}})(); +(function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function c(a){var c=CKEDITOR.skin["ua_"+a],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){a=a+("_"+c[e]);break}}return CKEDITOR.getUrl(b()+a+".css")}function a(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(c(a));d[a]=1}b&&b()} +function f(a){var b=a.getById(g);if(!b){b=a.getHead().append("style");b.setAttribute("id",g);b.setAttribute("type","text/css")}return b}function e(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var g=0;g<a.length;g++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[g].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie? +a[g].$.styleSheet.cssText=a[g].$.styleSheet.cssText+f:a[g].$.innerHTML=a[g].$.innerHTML+f}}var d={};CKEDITOR.skin={path:b,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){a(c,d)}):a(c,d)},getPath:function(a){return CKEDITOR.getUrl(c(a))},icons:{},addIcon:function(a,b,c){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0})},getIconStyle:function(a,b,c,d){var e;if(a){a=a.toLowerCase();b&& +(e=this.icons[a+"-rtl"]);e||(e=this.icons[a])}a=c||e&&e.path||"";d=d||e&&e.offset;return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=f(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[h,a]];this.uiColor=a;e([b],c(this,"editor"),d);e(k,c(this,"panel"),d)}).call(this,a)}});var g="cke_ui_color",k=[],h=/\$color/g; +CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=f(a);k.push(a);var c=b.getUiColor();c&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[h,c]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var b=CKEDITOR.dom.element.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{CKEDITOR.env.hc=b.getComputedStyle("border-top-color")==b.getComputedStyle("border-right-color")}catch(c){CKEDITOR.env.hc=false}b.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); +CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending){delete CKEDITOR._.pending;for(var a=0;a<b.length;a++){CKEDITOR.editor.prototype.constructor.apply(b[a][0],b[a][1]);CKEDITOR.add(b[a][0])}}})();/* + Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8,opera"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,e){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,{role:"presentation"},function(){var f=[],d=a.required?" cke_required":"";"horizontal"!= +a.labelLayout?f.push('<label class="cke_dialog_ui_labeled_label'+d+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+' role="presentation">',e.call(this,b,a),"</div>"):(d={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+d+'" id="'+c.labelId+'" for="'+c.inputId+'"'+ +(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+e.call(this,b,a)+"</span>"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,d,f));return f.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+a.type,id:e,type:a.type}; +a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var f=this,i=!1;b.on("load",function(){f.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(i=true)});f.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&i){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);i=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b= +['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var f in c)b.push(f+'="'+c[f]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",f={};a.validate&&(this.validate=a.validate);f.rows=a.rows||5;f.cols= +a.cols||20;"undefined"!=typeof a.inputStyle&&(f.style=a.inputStyle);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f["aria-labelledby"]=this._.labelId;this._.required&&(f["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="',c,'" '],b;for(b in f)a.push(b+'="'+CKEDITOR.tools.htmlEncode(f[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(e._["default"]),"</textarea></div>");return a.join("")})}}, +checkbox:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),f=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked="checked";if(typeof c.inputStyle!= +"undefined")c.style=c.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,f,"input",null,g);f.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return f.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var e=[],c=this;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var f= +[],d=[],g=a.id?a.id+"_radio":CKEDITOR.tools.getNextId()+"_radio",j=0;j<a.items.length;j++){var k=a.items[j],h=k[2]!==void 0?k[2]:k[0],l=k[1]!==void 0?k[1]:k[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]==l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style= +m.inputStyle;e.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},k[0]);f.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,e,f,d);return d.join("")});this._.children=e}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click", +e.click,e);a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var f=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button","aria-labelledby":f},'<span id="'+f+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}}, +select:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a);a.validate&&(this.validate=a.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],i=[],g={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};d.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&d.push('style="width:'+ +a.width+'" ');d.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var j=0,k;j<a.items.length&&(k=a.items[j]);j++)i.push('<option value="',CKEDITOR.tools.htmlEncode(k[1]!==void 0?k[1]:k[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(k[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;e.select=new CKEDITOR.ui.dialog.uiElement(b,c,d,"select",null,g,i.join(""));d.push("</div>");return d.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0=== +a["default"]&&(a["default"]="");var e=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=CKEDITOR.env.isCustomDomain(),d=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', +e.frameId,'" title="',a.label,'" src="javascript:void('];d.push(b?"(function(){document.open();document.domain='"+document.domain+"';document.close();})()":"0");d.push(')"></iframe>');return d.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),f=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=a["for"];if(!f||f.call(this,c)!==false){b.getContentElement(d[0], +d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,c,f){if(!(3>arguments.length)){var i=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var j=c.focus;j&&(this.focus=function(){this.selectParentTab();"function"==typeof j&&j.call(this);this.fire("focus")},c.isFocusable&& +(this.isFocusable=this.isFocusable),this.keyboardFocusable=!0);CKEDITOR.ui.dialog.uiElement.call(this,e,c,i,"span",null,null,"");i=i.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);f.push([g[1]," ",i[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,e,c){var f=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,e,"fieldset",null,null,function(){var a=[];f&&a.push("<legend"+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+f+"</legend>"); +for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()? +"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled}, +eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var b=this.selectParentTab(); +setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, +{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;e.$.text=b;e.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(e.$):c.add(e.$,null):c.add(e.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0<b.length;)b.remove(0);return this},keyboardFocusable:!0}, +n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this,arguments);b.on("load", +function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,e,c=0;c<d.length&&(e=d[c]);c++)e.getElement().$.checked=e.getValue()==b;!a&&this.fire("change",{value:b})},getValue:function(){for(var b= +this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&& +b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); +return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,e=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):e(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();CKEDITOR.env.isCustomDomain()&&(d.$.domain=document.domain);var b="";e.size&& +(b=e.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input";d.$.write(['<html dir="'+g+'" lang="'+j+'"><head><title>','
'," + +

+ diff --git a/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..88e1afe --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.css b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..e163948 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.js b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..6b39b00 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| +f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", +"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='', +l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='

'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"

");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", +"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", +{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); +CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000..f922b63 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000..15eb199 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie7.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000..64965e1 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie8.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000..d34c919 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_iequirks.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000..8ede95d --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_opera.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_opera.css new file mode 100644 index 0000000..34ab2c7 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/dialog_opera.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000..d2424f7 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_gecko.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000..f33f56c --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000..461e63d --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie7.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000..b4c2975 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie8.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000..41044b4 --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_iequirks.css b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000..e274b5c --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/icons.png b/ehcp/net2ftp/plugins/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000..b1b35b7 Binary files /dev/null and b/ehcp/net2ftp/plugins/ckeditor/skins/moono/icons.png differ diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/arrow.png b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/arrow.png new file mode 100644 index 0000000..0d1eb39 Binary files /dev/null and b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/arrow.png differ diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/close.png b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000..a795fd5 Binary files /dev/null and b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/close.png differ diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/mini.png b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/mini.png new file mode 100644 index 0000000..3e65bd5 Binary files /dev/null and b/ehcp/net2ftp/plugins/ckeditor/skins/moono/images/mini.png differ diff --git a/ehcp/net2ftp/plugins/ckeditor/skins/moono/readme.md b/ehcp/net2ftp/plugins/ckeditor/skins/moono/readme.md new file mode 100644 index 0000000..0fa4c1a --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/ehcp/net2ftp/plugins/ckeditor/styles.js b/ehcp/net2ftp/plugins/ckeditor/styles.js new file mode 100644 index 0000000..e4feb3e --- /dev/null +++ b/ehcp/net2ftp/plugins/ckeditor/styles.js @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker: Yellow', element: 'span', styles: { 'background-color': 'Yellow' } }, + { name: 'Marker: Green', element: 'span', styles: { 'background-color': 'Lime' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +]); + diff --git a/ehcp/net2ftp/plugins/codepress/codepress.css b/ehcp/net2ftp/plugins/codepress/codepress.css new file mode 100644 index 0000000..2186820 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/codepress.css @@ -0,0 +1,21 @@ +body { + margin-top:13px; + _margin-top:14px; + background:white; + margin-left:32px; + font-family:monospace; + font-size:13px; + white-space:pre; + background-image:url("images/line-numbers.png"); + background-repeat:repeat-y; + background-position:0 3px; + line-height:16px; + height:100%; +} +pre {margin:0;} +html>body{background-position:0 2px;} +P {margin:0;padding:0;border:0;outline:0;display:block;white-space:pre;} +b, i, s, u, a, em, tt, ins, big, cite, strong, var, dfn {text-decoration:none;font-weight:normal;font-style:normal;font-size:13px;} + +body.hide-line-numbers {background:white;margin-left:16px;} +body.show-line-numbers {background-image:url("images/line-numbers.png");margin-left:32px;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/codepress.html b/ehcp/net2ftp/plugins/codepress/codepress.html new file mode 100644 index 0000000..20270fe --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/codepress.html @@ -0,0 +1,35 @@ + + + + CodePress - Real Time Syntax Highlighting Editor written in JavaScript + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/codepress/codepress.js b/ehcp/net2ftp/plugins/codepress/codepress.js new file mode 100644 index 0000000..96ea2e3 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/codepress.js @@ -0,0 +1,138 @@ +/* + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ + * + * Copyright (C) 2006 Fernando M.A.d.S. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation. + * + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php + */ + +CodePress = function(obj) { + var self = document.createElement('iframe'); + self.textarea = obj; + self.textarea.disabled = true; + self.textarea.style.overflow = 'hidden'; + self.style.height = self.textarea.clientHeight +'px'; + self.style.width = self.textarea.clientWidth +'px'; + self.textarea.style.overflow = 'auto'; + self.style.border = '1px solid gray'; + self.frameBorder = 0; // remove IE internal iframe border + self.style.visibility = 'hidden'; + self.style.position = 'absolute'; + self.options = self.textarea.className; + + self.initialize = function() { + self.editor = self.contentWindow.CodePress; + self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0]; + self.editor.setCode(self.textarea.value); + self.setOptions(); + self.editor.syntaxHighlight('init'); + self.textarea.style.display = 'none'; + self.style.position = 'static'; + self.style.visibility = 'visible'; + self.style.display = 'inline'; + } + + // obj can by a textarea id or a string (code) + self.edit = function(obj,language) { + if(obj) self.textarea.value = document.getElementById(obj) ? document.getElementById(obj).value : obj; + if(!self.textarea.disabled) return; + self.language = language ? language : self.getLanguage(); + self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime(); + if(self.attachEvent) self.attachEvent('onload',self.initialize); + else self.addEventListener('load',self.initialize,false); + } + + self.getLanguage = function() { + for (language in CodePress.languages) + if(self.options.match('\\b'+language+'\\b')) + return CodePress.languages[language] ? language : 'generic'; + } + + self.setOptions = function() { + if(self.options.match('autocomplete-off')) self.toggleAutoComplete(); + if(self.options.match('readonly-on')) self.toggleReadOnly(); + if(self.options.match('linenumbers-off')) self.toggleLineNumbers(); + } + + self.getCode = function() { + return self.textarea.disabled ? self.editor.getCode() : self.textarea.value; + } + + self.setCode = function(code) { + self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code; + } + + self.toggleAutoComplete = function() { + self.editor.autocomplete = (self.editor.autocomplete) ? false : true; + } + + self.toggleReadOnly = function() { + self.textarea.readOnly = (self.textarea.readOnly) ? false : true; + if(self.style.display != 'none') // prevent exception on FF + iframe with display:none + self.editor.readOnly(self.textarea.readOnly ? true : false); + } + + self.toggleLineNumbers = function() { + var cn = self.editor.body.className; + self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers'; + } + + self.toggleEditor = function() { + if(self.textarea.disabled) { + self.textarea.value = self.getCode(); + self.textarea.disabled = false; + self.style.display = 'none'; + self.textarea.style.display = 'inline'; + } + else { + self.textarea.disabled = true; + self.setCode(self.textarea.value); + self.editor.syntaxHighlight('init'); + self.style.display = 'inline'; + self.textarea.style.display = 'none'; + } + } + + self.edit(); + return self; +} + +CodePress.languages = { + csharp : 'C#', + css : 'CSS', + generic : 'Generic', + html : 'HTML', + java : 'Java', + javascript : 'JavaScript', + perl : 'Perl', + ruby : 'Ruby', + php : 'PHP', + text : 'Text', + sql : 'SQL', + vbscript : 'VBScript' +} + + +CodePress.run = function() { + s = document.getElementsByTagName('script'); + for(var i=0,n=s.length;i + * + * Developers: + * Fernando M.A.d.S. + * Michael Hurni + * Contributors: + * Martin D. Kirk + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation. + * + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php + */ + +CodePress = { + scrolling : false, + autocomplete : true, + + // set initial vars and start sh + initialize : function() { + if(typeof(editor)=='undefined' && !arguments[0]) return; + body = document.getElementsByTagName('body')[0]; + body.innerHTML = body.innerHTML.replace(/\n/g,""); + chars = '|32|46|62|8|'; // charcodes that trigger syntax highlighting + cc = '\u2009'; // carret char + editor = document.getElementsByTagName('pre')[0]; + document.designMode = 'on'; + document.addEventListener('keypress', this.keyHandler, true); + window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false); + completeChars = this.getCompleteChars(); + completeEndingChars = this.getCompleteEndingChars(); + }, + + // treat key bindings + keyHandler : function(evt) { + keyCode = evt.keyCode; + charCode = evt.charCode; + fromChar = String.fromCharCode(charCode); + + if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) + CodePress.shortcuts(charCode?charCode:keyCode); + } + else if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1) && CodePress.autocomplete) { // auto complete + if(!CodePress.completeEnding(fromChar)) + CodePress.complete(fromChar); + } + else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting + top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100); + } + else if(keyCode==9 || evt.tabKey) { // snippets activation (tab) + CodePress.snippets(evt); + } + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; + } + else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo + (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); + evt.preventDefault(); + } + else if(charCode==118 && evt.ctrlKey) { // handle paste + top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100); + } + else if(charCode==99 && evt.ctrlKey) { // handle cut + //alert(window.getSelection().getRangeAt(0).toString().replace(/\t/g,'FFF')); + } + + }, + + // put cursor back to its original position after every parsing + findString : function() { + if(self.find(cc)) + window.getSelection().getRangeAt(0).deleteContents(); + }, + + // split big files, highlighting parts of it + split : function(code,flag) { + if(flag=='scroll') { + this.scrolling = true; + return code; + } + else { + this.scrolling = false; + mid = code.indexOf(cc); + if(mid-2000<0) {ini=0;end=4000;} + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} + else {ini=mid-2000;end=mid+2000;} + code = code.substring(ini,end); + return code; + } + }, + + getEditor : function() { + if(!document.getElementsByTagName('pre')[0]) { + body = document.getElementsByTagName('body')[0]; + if(!body.innerHTML) return body; + if(body.innerHTML=="
") body.innerHTML = "
 
"; + else body.innerHTML = "
"+body.innerHTML+"
"; + } + return document.getElementsByTagName('pre')[0]; + }, + + // syntax highlighting parser + syntaxHighlight : function(flag) { + //if(document.designMode=='off') document.designMode='on' + if(flag != 'init') { window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));} + editor = CodePress.getEditor(); + o = editor.innerHTML; + o = o.replace(/
/g,'\n'); + o = o.replace(/<.*?>/g,''); + x = z = this.split(o,flag); + x = x.replace(/\n/g,'
'); + + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); + + for(i=0;i/g,'>'); + if(content.indexOf('$0')<0) content += cc; + else content = content.replace(/\$0/,cc); + content = content.replace(/\n/g,'
'); + var pattern = new RegExp(trigger+cc,'gi'); + evt.preventDefault(); // prevent the tab key from being added + this.syntaxHighlight('snippets',pattern,content); + } + } + }, + + readOnly : function() { + document.designMode = (arguments[0]) ? 'off' : 'on'; + }, + + complete : function(trigger) { + window.getSelection().getRangeAt(0).deleteContents(); + var complete = Language.complete; + for (var i=0; i/g,'\n'); + code = code.replace(/\u2009/g,''); + code = code.replace(/<.*?>/g,''); + code = code.replace(/</g,'<'); + code = code.replace(/>/g,'>'); + code = code.replace(/&/gi,'&'); + return code; + }, + + // put code inside editor + setCode : function() { + var code = arguments[0]; + code = code.replace(/\u2009/gi,''); + code = code.replace(/&/gi,'&'); + code = code.replace(//g,'>'); + editor.innerHTML = code; + if (code == '') + document.getElementsByTagName('body')[0].innerHTML = ''; + }, + + // undo and redo methods + actions : { + pos : -1, // actual history position + history : [], // history vector + + undo : function() { + editor = CodePress.getEditor(); + if(editor.innerHTML.indexOf(cc)==-1){ + if(editor.innerHTML != " ") + window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc)); + this.history[this.pos] = editor.innerHTML; + } + this.pos --; + if(typeof(this.history[this.pos])=='undefined') this.pos ++; + editor.innerHTML = this.history[this.pos]; + if(editor.innerHTML.indexOf(cc)>-1) editor.innerHTML+=cc; + CodePress.findString(); + }, + + redo : function() { + // editor = CodePress.getEditor(); + this.pos++; + if(typeof(this.history[this.pos])=='undefined') this.pos--; + editor.innerHTML = this.history[this.pos]; + CodePress.findString(); + }, + + next : function() { // get next vector position and clean old ones + if(this.pos>20) this.history[this.pos-21] = undefined; + return ++this.pos; + } + } +} + +Language={}; +window.addEventListener('load', function() { CodePress.initialize('new'); }, true); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/engines/khtml.js b/ehcp/net2ftp/plugins/codepress/engines/khtml.js new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/plugins/codepress/engines/msie.js b/ehcp/net2ftp/plugins/codepress/engines/msie.js new file mode 100644 index 0000000..fd609b2 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/engines/msie.js @@ -0,0 +1,304 @@ +/* + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ + * + * Copyright (C) 2007 Fernando M.A.d.S. + * + * Developers: + * Fernando M.A.d.S. + * Michael Hurni + * Contributors: + * Martin D. Kirk + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation. + * + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php + */ + +CodePress = { + scrolling : false, + autocomplete : true, + + // set initial vars and start sh + initialize : function() { + if(typeof(editor)=='undefined' && !arguments[0]) return; + chars = '|32|46|62|'; // charcodes that trigger syntax highlighting + cc = '\u2009'; // carret char + editor = document.getElementsByTagName('pre')[0]; + editor.contentEditable = 'true'; + document.getElementsByTagName('body')[0].onfocus = function() {editor.focus();} + document.attachEvent('onkeydown', this.metaHandler); + document.attachEvent('onkeypress', this.keyHandler); + window.attachEvent('onscroll', function() { if(!CodePress.scrolling) setTimeout(function(){CodePress.syntaxHighlight('scroll')},1)}); + completeChars = this.getCompleteChars(); + completeEndingChars = this.getCompleteEndingChars(); + setTimeout(function() { window.scroll(0,0) },50); // scroll IE to top + }, + + // treat key bindings + keyHandler : function(evt) { + charCode = evt.keyCode; + fromChar = String.fromCharCode(charCode); + + if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1 )&& CodePress.autocomplete) { // auto complete + if(!CodePress.completeEnding(fromChar)) + CodePress.complete(fromChar); + } + else if(chars.indexOf('|'+charCode+'|')!=-1||charCode==13) { // syntax highlighting + CodePress.syntaxHighlight('generic'); + } + }, + + metaHandler : function(evt) { + keyCode = evt.keyCode; + + if(keyCode==9 || evt.tabKey) { + CodePress.snippets(); + } + else if((keyCode==122||keyCode==121||keyCode==90) && evt.ctrlKey) { // undo and redo + (keyCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); + evt.returnValue = false; + } + else if(keyCode==34||keyCode==33) { // handle page up/down for IE + self.scrollBy(0, (keyCode==34) ? 200 : -200); + evt.returnValue = false; + } + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; + } + else if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && keyCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) + CodePress.shortcuts(keyCode); + evt.returnValue = false; + } + else if(keyCode==86 && evt.ctrlKey) { // handle paste + window.clipboardData.setData('Text',window.clipboardData.getData('Text').replace(/\t/g,'\u2008')); + top.setTimeout(function(){CodePress.syntaxHighlight('paste');},10); + } + else if(keyCode==67 && evt.ctrlKey) { // handle cut + // window.clipboardData.setData('Text',x[0]); + // code = window.clipboardData.getData('Text'); + } + }, + + // put cursor back to its original position after every parsing + + + findString : function() { + range = self.document.body.createTextRange(); + if(range.findText(cc)){ + range.select(); + range.text = ''; + } + }, + + // split big files, highlighting parts of it + split : function(code,flag) { + if(flag=='scroll') { + this.scrolling = true; + return code; + } + else { + this.scrolling = false; + mid = code.indexOf(cc); + if(mid-2000<0) {ini=0;end=4000;} + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} + else {ini=mid-2000;end=mid+2000;} + code = code.substring(ini,end); + return code.substring(code.indexOf('

'),code.lastIndexOf('

')+4); + } + }, + + // syntax highlighting parser + syntaxHighlight : function(flag) { + if(flag!='init') document.selection.createRange().text = cc; + o = editor.innerHTML; + if(flag=='paste') { // fix pasted text + o = o.replace(/
/g,'\r\n'); + o = o.replace(/\u2008/g,'\t'); + } + o = o.replace(/

/g,'\n'); + o = o.replace(/<\/P>/g,'\r'); + o = o.replace(/<.*?>/g,''); + o = o.replace(/ /g,''); + o = '

'+o+'

'; + o = o.replace(/\n\r/g,'

'); + o = o.replace(/\n/g,'

'); + o = o.replace(/\r/g,'<\/P>'); + o = o.replace(/

(

)+/,'

'); + o = o.replace(/<\/P>(<\/P>)+/,'

'); + o = o.replace(/

<\/P>/g,'


'); + x = z = this.split(o,flag); + + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); + + for(i=0;i/g,'>'); + if(content.indexOf('$0')<0) content += cc; + else content = content.replace(/\$0/,cc); + content = content.replace(/\n/g,'

'); + var pattern = new RegExp(trigger+cc,"gi"); + this.syntaxHighlight('snippets',pattern,content); + } + } + }, + + readOnly : function() { + editor.contentEditable = (arguments[0]) ? 'false' : 'true'; + }, + + complete : function(trigger) { + var complete = Language.complete; + for (var i=0; i/g,'\n'); + code = code.replace(/<\/p>/gi,'\r'); + code = code.replace(/

/i,''); // IE first line fix + code = code.replace(/

/gi,'\n'); + code = code.replace(/ /gi,''); + code = code.replace(/\u2009/g,''); + code = code.replace(/<.*?>/g,''); + code = code.replace(/</g,'<'); + code = code.replace(/>/g,'>'); + code = code.replace(/&/gi,'&'); + return code; + }, + + // put code inside editor + setCode : function() { + var code = arguments[0]; + code = code.replace(/\u2009/gi,''); + code = code.replace(/&/gi,'&'); + code = code.replace(//g,'>'); + editor.innerHTML = '

'+code+'
'; + }, + + + // undo and redo methods + actions : { + pos : -1, // actual history position + history : [], // history vector + + undo : function() { + if(editor.innerHTML.indexOf(cc)==-1){ + document.selection.createRange().text = cc; + this.history[this.pos] = editor.innerHTML; + } + this.pos--; + if(typeof(this.history[this.pos])=='undefined') this.pos++; + editor.innerHTML = this.history[this.pos]; + CodePress.findString(); + }, + + redo : function() { + this.pos++; + if(typeof(this.history[this.pos])=='undefined') this.pos--; + editor.innerHTML = this.history[this.pos]; + CodePress.findString(); + }, + + next : function() { // get next vector position and clean old ones + if(this.pos>20) this.history[this.pos-21] = undefined; + return ++this.pos; + } + } +} + +Language={}; +window.attachEvent('onload', function() { CodePress.initialize('new');}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/engines/older.js b/ehcp/net2ftp/plugins/codepress/engines/older.js new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/plugins/codepress/engines/opera.js b/ehcp/net2ftp/plugins/codepress/engines/opera.js new file mode 100644 index 0000000..152c763 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/engines/opera.js @@ -0,0 +1,260 @@ +/* + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ + * + * Copyright (C) 2007 Fernando M.A.d.S. + * + * Contributors : + * + * Michael Hurni + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU Lesser General Public License as published by the Free Software Foundation. + * + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php + */ + + +CodePress = { + scrolling : false, + autocomplete : true, + + // set initial vars and start sh + initialize : function() { + if(typeof(editor)=='undefined' && !arguments[0]) return; + chars = '|32|46|62|'; // charcodes that trigger syntax highlighting + cc = '\u2009'; // control char + editor = document.getElementsByTagName('body')[0]; + document.designMode = 'on'; + document.addEventListener('keyup', this.keyHandler, true); + window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false); + completeChars = this.getCompleteChars(); +// CodePress.syntaxHighlight('init'); + }, + + // treat key bindings + keyHandler : function(evt) { + keyCode = evt.keyCode; + charCode = evt.charCode; + + if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) + CodePress.shortcuts(charCode?charCode:keyCode); + } + else if(completeChars.indexOf('|'+String.fromCharCode(charCode)+'|')!=-1 && CodePress.autocomplete) { // auto complete + CodePress.complete(String.fromCharCode(charCode)); + } + else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting + CodePress.syntaxHighlight('generic'); + } + else if(keyCode==9 || evt.tabKey) { // snippets activation (tab) + CodePress.snippets(evt); + } + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; + } + else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo + (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); + evt.preventDefault(); + } + else if(keyCode==86 && evt.ctrlKey) { // paste + // TODO: pasted text should be parsed and highlighted + } + }, + + // put cursor back to its original position after every parsing + findString : function() { + var sel = window.getSelection(); + var range = window.document.createRange(); + var span = window.document.getElementsByTagName('span')[0]; + + range.selectNode(span); + sel.removeAllRanges(); + sel.addRange(range); + span.parentNode.removeChild(span); + //if(self.find(cc)) + //window.getSelection().getRangeAt(0).deleteContents(); + }, + + // split big files, highlighting parts of it + split : function(code,flag) { + if(flag=='scroll') { + this.scrolling = true; + return code; + } + else { + this.scrolling = false; + mid = code.indexOf(''); + if(mid-2000<0) {ini=0;end=4000;} + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} + else {ini=mid-2000;end=mid+2000;} + code = code.substring(ini,end); + return code; + } + }, + + // syntax highlighting parser + syntaxHighlight : function(flag) { + //if(document.designMode=='off') document.designMode='on' + if(flag!='init') { + var span = document.createElement('span'); + window.getSelection().getRangeAt(0).insertNode(span); + } + + o = editor.innerHTML; +// o = o.replace(/
/g,'\r\n'); +// o = o.replace(/<(b|i|s|u|a|em|tt|ins|big|cite|strong)?>/g,''); + //alert(o) + o = o.replace(/<(?!span|\/span|br).*?>/gi,''); +// alert(o) +// x = o; + x = z = this.split(o,flag); + //alert(z) +// x = x.replace(/\r\n/g,'
'); + x = x.replace(/\t/g, ' '); + + + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); + + for(i=0;i/g,'>'); + if(content.indexOf('$0')<0) content += cc; + else content = content.replace(/\$0/,cc); + content = content.replace(/\n/g,'
'); + var pattern = new RegExp(trigger+cc,'gi'); + evt.preventDefault(); // prevent the tab key from being added + this.syntaxHighlight('snippets',pattern,content); + } + } + }, + + readOnly : function() { + document.designMode = (arguments[0]) ? 'off' : 'on'; + }, + + complete : function(trigger) { + window.getSelection().getRangeAt(0).deleteContents(); + var complete = Language.complete; + for (var i=0; i/g,'\n'); + code = code.replace(/\u2009/g,''); + code = code.replace(/<.*?>/g,''); + code = code.replace(/</g,'<'); + code = code.replace(/>/g,'>'); + code = code.replace(/&/gi,'&'); + return code; + }, + + // put code inside editor + setCode : function() { + var code = arguments[0]; + code = code.replace(/\u2009/gi,''); + code = code.replace(/&/gi,'&'); + code = code.replace(//g,'>'); + editor.innerHTML = code; + }, + + // undo and redo methods + actions : { + pos : -1, // actual history position + history : [], // history vector + + undo : function() { + if(editor.innerHTML.indexOf(cc)==-1){ + window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc)); + this.history[this.pos] = editor.innerHTML; + } + this.pos--; + if(typeof(this.history[this.pos])=='undefined') this.pos++; + editor.innerHTML = this.history[this.pos]; + CodePress.findString(); + }, + + redo : function() { + this.pos++; + if(typeof(this.history[this.pos])=='undefined') this.pos--; + editor.innerHTML = this.history[this.pos]; + CodePress.findString(); + }, + + next : function() { // get next vector position and clean old ones + if(this.pos>20) this.history[this.pos-21] = undefined; + return ++this.pos; + } + } +} + +Language={}; +window.addEventListener('load', function() { CodePress.initialize('new'); }, true); diff --git a/ehcp/net2ftp/plugins/codepress/images/line-numbers.png b/ehcp/net2ftp/plugins/codepress/images/line-numbers.png new file mode 100644 index 0000000..ffea4e6 Binary files /dev/null and b/ehcp/net2ftp/plugins/codepress/images/line-numbers.png differ diff --git a/ehcp/net2ftp/plugins/codepress/index.html b/ehcp/net2ftp/plugins/codepress/index.html new file mode 100644 index 0000000..703cec2 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/index.html @@ -0,0 +1,443 @@ + + + + + CodePress - Real Time Syntax Highlighting Editor written in JavaScript + + + + + + +
+ + + +
+ + + + + + + + + + +

+ CodePress is web-based source code editor with syntax highlighting written in JavaScript that colors text in real time while it's being typed in the browser. +

+ +

+ Go to http://codepress.org/ for updates. +

+ +

Demo

+
+ choose example in: + + + + + + + +
+ + + +

+ + + +

+ + + + + +

+ + + +

Installation

+
    +
  1. +

    + Download and uncompress CodePress under a directory inside your webserver.
    + Example: http://yourserver/codepress/
    + Since CodePress is pure JavaScript and HTML, you can also test it without a webserver. +

    +
  2. +
  3. +

    + Insert CodePress script somewhere in your page inside the <head> or above the </body> tag. +

    + +

    + <script src="/codepress/codepress.js" type="text/javascript"></script> +

    +
  4. + +
  5. +

    + Add the <textarea> tag to the place on your page you want CodePress to appear. CodePress will inherit the width and height of your textarea. + When the page loads, it will automatically replace your textarea with a CodePress window. +

    +

    + <textarea id="myCpWindow" class="codepress javascript linenumbers-off">
    +    // your code here
    + </textarea> +

    +
      +
    • + The javascript portion of the class="" means that the language being edited is JavaScript. +
    • +
    • + The codepress portion of the class="" is mandatory and indicates a textarea to be replaced for a CodePress window. +
    • +
    • + Other class options are linenumbers-off, autocomplete-off and readonly-on. +
    • +
    • + Careful not to use the same id for two different CodePress windows (<textarea id="xx"...>) +
    • +
    + +
  6. +
+ +

You also can...

+
    +
  1. + Open/edit code from a different textarea.
    + Example: textarea_id.edit('other_textarea_id','language')
    +
  2. +
  3. + Get code from CodePress window.
    + Example: textarea_id.getCode()
    +
  4. +
  5. + Turn on/off CodePress editor and return to the regular textarea.
    + Example: textarea_id.toggleEditor()
    +
  6. +
  7. + Turn on/off line numbers.
    + Example: textarea_id.toggleLineNumbers()
    +
  8. +
  9. + Turn on/off read only.
    + Example: textarea_id.toggleReadOnly()
    +
  10. +
  11. + Turn on/off auto-complete.
    + Example: textarea_id.toggleAutoComplete()
    +
  12. + +
+ + + +

License

+

+ CodePress is distributed under the LGPL. If your software is compatible with this licence or it is under Creative Commons, you can use it as you want. Just keep the credits somewhere around. +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/codepress/languages/asp.css b/ehcp/net2ftp/plugins/codepress/languages/asp.css new file mode 100644 index 0000000..87af390 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/asp.css @@ -0,0 +1,71 @@ +/* + * CodePress color styles for ASP-VB syntax highlighting + * By Martin D. Kirk + */ +/* tags */ + +b { + color:#000080; +} +/* comments */ +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u { + color:gray; + font-weight:normal; +} +/* ASP comments */ +strong dfn, strong dfn a,strong dfn var, strong dfn a u, strong dfn u{ + color:gray; + font-weight:normal; +} + /* attributes */ +s, s b, span s u, span s cite, strong span s { + color:#5656fa ; + font-weight:normal; +} + /* strings */ +strong s,strong s b, strong s u, strong s cite { + color:#009900; + font-weight:normal; +} +strong ins{ + color:#000000; + font-weight:bold; +} + /* Syntax */ +strong a, strong a u { + color:#0000FF; + font-weight:; +} + /* Native Keywords */ +strong u { + color:#990099; + font-weight:bold; +} +/* Numbers */ +strong var{ + color:#FF0000; +} +/* ASP Language */ +span{ + color:#990000; + font-weight:bold; +} +strong i,strong a i, strong u i { + color:#009999; +} +/* style */ +em { + color:#800080; + font-style:normal; +} + /* script */ +ins { + color:#800000; + font-weight:bold; +} + +/* */ +cite, s cite { + color:red; + font-weight:bold; +} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/asp.js b/ehcp/net2ftp/plugins/codepress/languages/asp.js new file mode 100644 index 0000000..7439539 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/asp.js @@ -0,0 +1,117 @@ +/* + * CodePress regular expressions for ASP-vbscript syntax highlighting + */ + +// ASP VBScript +Language.syntax = [ +// all tags + { input : /(<[^!%|!%@]*?>)/g, output : '$1' }, +// style tags + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '$1$2$3' }, +// script tags + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '$1$2$3' }, +// strings "" and attributes + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, +// ASP Comment + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2'}, +// <%.* + { input : /(<%)/g, output : '$1' }, +// .*%> + { input : /(%>)/g, output : '$1' }, +// <%@...%> + { input : /(<%@)(.+?)(%>)/gi, output : '$1$2$3' }, +//Numbers + { input : /\b([\d]+)\b/g, output : '$1' }, +// Reserved Words 1 (Blue) + { input : /\b(And|As|ByRef|ByVal|Call|Case|Class|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Exit|False|For|Function)\b/gi, output : '$1' }, + { input : /\b(Get|GoTo|If|Imp|In|Is|Let|Loop|Me|Mod|Enum|New|Next|Not|Nothing|Null|On|Option|Or|Private|Public|ReDim|Rem)\b/gi, output : '$1' }, + { input : /\b(Resume|Select|Set|Stop|Sub|Then|To|True|Until|Wend|While|With|Xor|Execute|Randomize|Erase|ExecuteGlobal|Explicit|step)\b/gi, output : '$1' }, +// Reserved Words 2 (Purple) + { input : /\b(Abandon|Abs|AbsolutePage|AbsolutePosition|ActiveCommand|ActiveConnection|ActualSize|AddHeader|AddNew|AppendChunk)\b/gi, output : '$1' }, + { input : /\b(AppendToLog|Application|Array|Asc|Atn|Attributes|BeginTrans|BinaryRead|BinaryWrite|BOF|Bookmark|Boolean|Buffer|Byte)\b/gi, output : '$1' }, + { input : /\b(CacheControl|CacheSize|Cancel|CancelBatch|CancelUpdate|CBool|CByte|CCur|CDate|CDbl|Charset|Chr|CInt|Clear)\b/gi, output : '$1' }, + { input : /\b(ClientCertificate|CLng|Clone|Close|CodePage|CommandText|CommandType|CommandTimeout|CommitTrans|CompareBookmarks|ConnectionString|ConnectionTimeout)\b/gi, output : '$1' }, + { input : /\b(Contents|ContentType|Cookies|Cos|CreateObject|CreateParameter|CSng|CStr|CursorLocation|CursorType|DataMember|DataSource|Date|DateAdd|DateDiff)\b/gi, output : '$1' }, + { input : /\b(DatePart|DateSerial|DateValue|Day|DefaultDatabase|DefinedSize|Delete|Description|Double|EditMode|Eof|EOF|err|Error)\b/gi, output : '$1' }, + { input : /\b(Exp|Expires|ExpiresAbsolute|Filter|Find|Fix|Flush|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent)\b/gi, output : '$1' }, + { input : /\b(GetChunk|GetLastError|GetRows|GetString|Global|HelpContext|HelpFile|Hex|Hour|HTMLEncode|IgnoreCase|Index|InStr|InStrRev)\b/gi, output : '$1' }, + { input : /\b(Int|Integer|IsArray|IsClientConnected|IsDate|IsolationLevel|Join|LBound|LCase|LCID|Left|Len|Lock|LockType|Log|Long|LTrim)\b/gi, output : '$1' }, + { input : /\b(MapPath|MarshalOptions|MaxRecords|Mid|Minute|Mode|Month|MonthName|Move|MoveFirst|MoveLast|MoveNext|MovePrevious|Name|NextRecordset)\b/gi, output : '$1' }, + { input : /\b(Now|Number|NumericScale|ObjectContext|Oct|Open|OpenSchema|OriginalValue|PageCount|PageSize|Pattern|PICS|Precision|Prepared|Property)\b/gi, output : '$1' }, + { input : /\b(Provider|QueryString|RecordCount|Redirect|RegExp|Remove|RemoveAll|Replace|Requery|Request|Response|Resync|Right|Rnd)\b/gi, output : '$1' }, + { input : /\b(RollbackTrans|RTrim|Save|ScriptTimeout|Second|Seek|Server|ServerVariables|Session|SessionID|SetAbort|SetComplete|Sgn)\b/gi, output : '$1' }, + { input : /\b(Sin|Size|Sort|Source|Space|Split|Sqr|State|StaticObjects|Status|StayInSync|StrComp|String|StrReverse|Supports|Tan|Time)\b/gi, output : '$1' }, + { input : /\b(Timeout|Timer|TimeSerial|TimeValue|TotalBytes|Transfer|Trim|Type|Type|UBound|UCase|UnderlyingValue|UnLock|Update|UpdateBatch)\b/gi, output : '$1' }, + { input : /\b(URLEncode|Value|Value|Version|Weekday|WeekdayName|Write|Year)\b/gi, output : '$1' }, +// Reserved Words 3 (Turquis) + { input : /\b(vbBlack|vbRed|vbGreen|vbYellow|vbBlue|vbMagenta|vbCyan|vbWhite|vbBinaryCompare|vbTextCompare)\b/gi, output : '$1' }, + { input : /\b(vbSunday|vbMonday|vbTuesday|vbWednesday|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek)\b/gi, output : '$1' }, + { input : /\b(vbFirstJan1|vbFirstFourDays|vbFirstFullWeek|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime)\b/gi, output : '$1' }, + { input : /\b(vbObjectError|vbCr|VbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString|vbTab|vbVerticalTab|vbUseDefault|vbTrue)\b/gi, output : '$1' }, + { input : /\b(vbFalse|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant)\b/gi, output : '$1' }, + { input : /\b(vbDataObject|vbDecimal|vbByte|vbArray)\b/gi, output : '$1' }, +// html comments + { input : /(<!--.*?-->.)/g, output : '$1' } +] + +Language.Functions = [ + // Output at index 0, must be the desired tagname surrounding a $1 + // Name is the index from the regex that marks the functionname + {input : /(function|sub)([ ]*?)(\w+)([ ]*?\()/gi , output : '$1', name : '$3'} +] + +Language.snippets = [ +//Conditional + { input : 'if', output : 'If $0 Then\n\t\nEnd If' }, + { input : 'ifelse', output : 'If $0 Then\n\t\n\nElse\n\t\nEnd If' }, + { input : 'case', output : 'Select Case $0\n\tCase ?\n\tCase Else\nEnd Select'}, +//Response + { input : 'rw', output : 'Response.Write( $0 )' }, + { input : 'resc', output : 'Response.Cookies( $0 )' }, + { input : 'resb', output : 'Response.Buffer'}, + { input : 'resflu', output : 'Response.Flush()'}, + { input : 'resend', output : 'Response.End'}, +//Request + { input : 'reqc', output : 'Request.Cookies( $0 )' }, + { input : 'rq', output : 'Request.Querystring("$0")' }, + { input : 'rf', output : 'Request.Form("$0")' }, +//FSO + { input : 'fso', output : 'Set fso = Server.CreateObject("Scripting.FileSystemObject")\n$0' }, + { input : 'setfo', output : 'Set fo = fso.getFolder($0)' }, + { input : 'setfi', output : 'Set fi = fso.getFile($0)' }, + { input : 'twr', output : 'Set f = fso.CreateTextFile($0,true)\'overwrite\nf.WriteLine()\nf.Close'}, + { input : 'tre', output : 'Set f = fso.OpenTextFile($0, 1)\nf.ReadAll\nf.Close'}, +//Server + { input : 'mapp', output : 'Server.Mappath($0)' }, +//Loops + { input : 'foreach', output : 'For Each $0 in ?\n\t\nNext' }, + { input : 'for', output : 'For $0 to ? step ?\n\t\nNext' }, + { input : 'do', output : 'Do While($0)\n\t\nLoop' }, + { input : 'untilrs', output : 'do until rs.eof\n\t\nrs.movenext\nloop' }, +//ADO + { input : 'adorec', output : 'Set rs = Server.CreateObject("ADODB.Recordset")' }, + { input : 'adocon', output : 'Set Conn = Server.CreateObject("ADODB.Connection")' }, + { input : 'adostr', output : 'Set oStr = Server.CreateObject("ADODB.Stream")' }, +//Http Request + { input : 'xmlhttp', output : 'Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")\nxmlHttp.open("GET", $0, false)\nxmlHttp.send()\n?=xmlHttp.responseText' }, + { input : 'xmldoc', output : 'Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")\nxmldoc.async=false\nxmldoc.load(request)'}, +//Functions + { input : 'func', output : 'Function $0()\n\t\n\nEnd Function'}, + { input : 'sub', output : 'Sub $0()\n\t\nEnd Sub'} + +] + +Language.complete = [ + //{ input : '\'', output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [ + { input : '[space]', output : ' ' }, + { input : '[enter]', output : '
' } , + { input : '[j]', output : 'testing' }, + { input : '[7]', output : '&' } +] \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/autoit.css b/ehcp/net2ftp/plugins/codepress/languages/autoit.css new file mode 100644 index 0000000..953ed86 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/autoit.css @@ -0,0 +1,13 @@ +/** + * CodePress color styles for AutoIt syntax highlighting + */ + +u {font-style:normal;color:#000090;font-weight:bold;font-family:Monospace;} +var {color:#AA0000;font-weight:bold;font-style:normal;} +em {color:#FF33FF;} +ins {color:#AC00A9;} +i {color:#F000FF;} +b {color:#FF0000;} +a {color:#0080FF;font-weight:bold;} +s, s u, s b {color:#9999CC;font-weight:normal;} +cite, cite *{color:#009933;font-weight:normal;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/autoit.js b/ehcp/net2ftp/plugins/codepress/languages/autoit.js new file mode 100644 index 0000000..c34ecc6 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/autoit.js @@ -0,0 +1,32 @@ +/** + * CodePress regular expressions for AutoIt syntax highlighting + * @author: James Brooks, Michael HURNI + */ + +// AutoIt +Language.syntax = [ + { input : /({|}|\(|\))/g, output : '$1' }, // Brackets + { input : /(\*|\+|-)/g, output : '$1' }, // Operator + { input : /\"(.*?)(\"|
|<\/P>)/g, output : "\"$1$2" }, // strings double + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single + { input : /\b([\d]+)\b/g, output : '$1' }, // Numbers + { input : /#(.*?)(
|<\/P>)/g, output : '#$1$2' }, // Directives and Includes + { input : /(\$[\w\.]*)/g, output : '$1' }, // vars + { input : /(_[\w\.]*)/g, output : '$1' }, // underscored word + { input : /(\@[\w\.]*)/g, output : '$1' }, // Macros + { input : /\b(Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitSHIFT|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCall|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFS|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GuiCreate|GuiCtrlCreateAvi|GuiCtrlCreateButton|GuiCtrlCreateCheckbox|GuiCtrlCreateCombo|GuiCtrlCreateContextMenu|GuiCtrlCreateDate|GuiCtrlCreateDummy|GuiCtrlCreateEdit|GuiCtrlCreateGraphic|GuiCtrlCreateGroup|GuiCtrlCreateIcon|GuiCtrlCreateInput|GuiCtrlCreateLabel|GuiCtrlCreateList|GuiCtrlCreateListView|GuiCtrlCreateListViewItem|GuiCtrlCreateMenu|GuiCtrlCreateMenuItem|GuiCtrlCreateMonthCal|GuiCtrlCreateObj|GuiCtrlCreatePic|GuiCtrlCreateProgress|GuiCtrlCreateRadio|GuiCtrlCreateSlider|GuiCtrlCreateTab|GuiCtrlCreateTabItem|GuiCtrlCreateUpdown|GuiCtrlDelete|GuiCtrlGetHandle|GuiCtrlGetState|GuiCtrlRead|GuiCtrlRecvMsg|GuiCtrlSentMsg|GuiCtrlSendToDummy|GuiCtrlSetBkColor|GuiCtrlSetColor|GuiCtrlSetCursor|GuiCtrlSetData|GuiCtrlSetFont|GuiCtrlSetGraphic|GuiCtrlSetImage|GuiCtrlSetLimit|GuiCtrlSetOnEvent|GuiCtrlSetPos|GuiCtrlResizing|GuiCtrlSetState|GuiCtrlSetTip|GuiDelete|GuiGetCursorInfo|GuiGetMsg|GuiGetStyle|GuiRegisterMsg|GuiSetBkColor|GuiSetCoord|GuiSetCursor|GuiSetFont|GuiSetHelp|GuiSetIcon|GuiSetOnEvent|GuiSetStat|GuiSetStyle|GuiStartGroup|GuiSwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Ping|PixelCheckSum|PixelGetColor|PixelSearch|ProcessClose|ProcessExists|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProcessOn|ProgressSet|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAsSet|RunWait|Send|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPrecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/g, output : '$1' } ,// reserved words + { input : /\B;(.*?)(
|<\/P>)/g, output : ';$1$2' }, // comments + { input : /#CS(.*?)#CE/g, output : '#CS$1#CE' } // Block Comments +] + +Language.snippets = [] + +Language.complete = [ +{ input : '\'',output : '\'$0\'' }, +{ input : '"', output : '"$0"' }, +{ input : '(', output : '\($0\)' }, +{ input : '[', output : '\[$0\]' }, +{ input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/csharp.css b/ehcp/net2ftp/plugins/codepress/languages/csharp.css new file mode 100644 index 0000000..6415d65 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/csharp.css @@ -0,0 +1,9 @@ +/* + * CodePress color styles for Java syntax highlighting + * By Edwin de Jonge + */ + +b {color:#7F0055;font-weight:bold;font-style:normal;} /* reserved words */ +a {color:#2A0088;font-weight:bold;font-style:normal;} /* types */ +i, i b, i s {color:#3F7F5F;font-weight:bold;} /* comments */ +s, s b {color:#2A00FF;font-weight:normal;} /* strings */ \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/csharp.js b/ehcp/net2ftp/plugins/codepress/languages/csharp.js new file mode 100644 index 0000000..20fdd91 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/csharp.js @@ -0,0 +1,25 @@ +/* + * CodePress regular expressions for C# syntax highlighting + * By Edwin de Jonge + */ + +Language.syntax = [ // C# + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single quote + { input : /\b(abstract|as|base|break|case|catch|checked|continue|default|delegate|do|else|event|explicit|extern|false|finally|fixed|for|foreach|get|goto|if|implicit|in|interface|internal|is|lock|namespace|new|null|object|operator|out|override|params|partial|private|protected|public|readonly|ref|return|set|sealed|sizeof|static|stackalloc|switch|this|throw|true|try|typeof|unchecked|unsafe|using|value|virtual|while)\b/g, output : '$1' }, // reserved words + { input : /\b(bool|byte|char|class|double|float|int|interface|long|string|struct|void)\b/g, output : '$1' }, // types + { input : /([^:]|^)\/\/(.*?)(//$2$3' }, // comments // + { input : /\/\*(.*?)\*\//g, output : '/*$1*/' } // comments /* */ +]; + +Language.snippets = []; + +Language.complete = [ // Auto complete only for 1 character + {input : '\'',output : '\'$0\'' }, + {input : '"', output : '"$0"' }, + {input : '(', output : '\($0\)' }, + {input : '[', output : '\[$0\]' }, + {input : '{', output : '{\n\t$0\n}' } +]; + +Language.shortcuts = []; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/css.css b/ehcp/net2ftp/plugins/codepress/languages/css.css new file mode 100644 index 0000000..64778d2 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/css.css @@ -0,0 +1,10 @@ +/* + * CodePress color styles for CSS syntax highlighting + */ + +b, b a, b u {color:#000080;} /* tags, ids, classes */ +i, i b, i s, i a, i u {color:gray;} /* comments */ +s, s b {color:#a0a0dd;} /* parameters */ +a {color:#0000ff;} /* keys */ +u {color:red;} /* values */ + diff --git a/ehcp/net2ftp/plugins/codepress/languages/css.js b/ehcp/net2ftp/plugins/codepress/languages/css.js new file mode 100644 index 0000000..00dcce0 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/css.js @@ -0,0 +1,23 @@ +/* + * CodePress regular expressions for CSS syntax highlighting + */ + +// CSS +Language.syntax = [ + { input : /(.*?){(.*?)}/g,output : '$1{$2}' }, // tags, ids, classes, values + { input : /([\w-]*?):([^\/])/g,output : '$1:$2' }, // keys + { input : /\((.*?)\)/g,output : '($1)' }, // parameters + { input : /\/\*(.*?)\*\//g,output : '/*$1*/'} // comments +] + +Language.snippets = [] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/generic.css b/ehcp/net2ftp/plugins/codepress/languages/generic.css new file mode 100644 index 0000000..3d52b6b --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/generic.css @@ -0,0 +1,9 @@ +/* + * CodePress color styles for generic syntax highlighting + */ + +b {color:#7F0055;font-weight:bold;} /* reserved words */ +u {color:darkblue;font-weight:bold;} /* special words */ +i, i b, i s, i u, i em {color:green;font-weight:normal;} /* comments */ +s, s b, s em {color:#2A00FF;font-weight:normal;} /* strings */ +em {font-weight:bold;} /* special chars */ \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/generic.js b/ehcp/net2ftp/plugins/codepress/languages/generic.js new file mode 100644 index 0000000..8289da0 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/generic.js @@ -0,0 +1,25 @@ +/* + * CodePress regular expressions for generic syntax highlighting + */ + +// generic languages +Language.syntax = [ + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single quote + { input : /\b(abstract|continue|for|new|switch|default|goto|boolean|do|if|private|this|break|double|protected|throw|byte|else|import|public|throws|case|return|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|const|float|while|function|label)\b/g, output : '$1' }, // reserved words + { input : /([\(\){}])/g, output : '$1' }, // special chars; + { input : /([^:]|^)\/\/(.*?)(//$2$3' }, // comments // + { input : /\/\*(.*?)\*\//g, output : '/*$1*/' } // comments /* */ +] + +Language.snippets = [] + +Language.complete = [ + { input : '\'', output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/html.css b/ehcp/net2ftp/plugins/codepress/languages/html.css new file mode 100644 index 0000000..35617cb --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/html.css @@ -0,0 +1,13 @@ +/* + * CodePress color styles for HTML syntax highlighting + */ + +b {color:#000080;} /* tags */ +ins, ins b, ins s, ins em {color:gray;} /* comments */ +s, s b {color:#7777e4;} /* attribute values */ +a {color:green;} /* links */ +u {color:#E67300;} /* forms */ +big {color:#db0000;} /* images */ +em, em b {color:#800080;} /* style */ +strong {color:#800000;} /* script */ +tt i {color:darkblue;font-weight:bold;} /* script reserved words */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/html.js b/ehcp/net2ftp/plugins/codepress/languages/html.js new file mode 100644 index 0000000..94469b4 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/html.js @@ -0,0 +1,59 @@ +/* + * CodePress regular expressions for HTML syntax highlighting + */ + +// HTML +Language.syntax = [ + { input : /(<[^!]*?>)/g, output : '$1' }, // all tags + { input : /(<a .*?>|<\/a>)/g, output : '$1' }, // links + { input : /(<img .*?>)/g, output : '$1' }, // images + { input : /(<\/?(button|textarea|form|input|select|option|label).*?>)/g, output : '$1' }, // forms + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '$1$2$3' }, // style tags + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '$1$2$3' }, // script tags + { input : /=(".*?")/g, output : '=$1' }, // atributes double quote + { input : /=('.*?')/g, output : '=$1' }, // atributes single quote + { input : /(<!--.*?-->.)/g, output : '$1' }, // comments + { input : /\b(alert|window|document|break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, output : '$1' } // script reserved words +] + +Language.snippets = [ + { input : 'aref', output : '' }, + { input : 'h1', output : '

$0

' }, + { input : 'h2', output : '

$0

' }, + { input : 'h3', output : '

$0

' }, + { input : 'h4', output : '

$0

' }, + { input : 'h5', output : '
$0
' }, + { input : 'h6', output : '
$0
' }, + { input : 'html', output : '\n\t$0\n' }, + { input : 'head', output : '\n\t\n\t$0\n\t\n' }, + { input : 'img', output : '' }, + { input : 'input', output : '' }, + { input : 'label', output : '' }, + { input : 'legend', output : '\n\t$0\n' }, + { input : 'link', output : '' }, + { input : 'base', output : '' }, + { input : 'body', output : '\n\t$0\n' }, + { input : 'css', output : '' }, + { input : 'div', output : '
\n\t$0\n
' }, + { input : 'divid', output : '
\n\t\n
' }, + { input : 'dl', output : '
\n\t
\n\t\t$0\n\t
\n\t
\n
' }, + { input : 'fieldset', output : '
\n\t$0\n
' }, + { input : 'form', output : '
\n\t\n
' }, + { input : 'meta', output : '' }, + { input : 'p', output : '

$0

' }, + { input : 'script', output : '' }, + { input : 'scriptsrc', output : '' }, + { input : 'span', output : '$0' }, + { input : 'table', output : '\n\t\n\t\n
' }, + { input : 'style', output : '' } +] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/java.css b/ehcp/net2ftp/plugins/codepress/languages/java.css new file mode 100644 index 0000000..2339ded --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/java.css @@ -0,0 +1,7 @@ +/* + * CodePress color styles for Java syntax highlighting + */ + +b {color:#7F0055;font-weight:bold;font-style:normal;} /* reserved words */ +i, i b, i s {color:#3F7F5F;font-weight:bold;} /* comments */ +s, s b {color:#2A00FF;font-weight:normal;} /* strings */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/java.js b/ehcp/net2ftp/plugins/codepress/languages/java.js new file mode 100644 index 0000000..61e9a06 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/java.js @@ -0,0 +1,24 @@ +/* + * CodePress regular expressions for Java syntax highlighting + */ + +// Java +Language.syntax = [ + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2'}, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2'}, // strings single quote + { input : /\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/g, output : '$1'}, // reserved words + { input : /([^:]|^)\/\/(.*?)(//$2$3'}, // comments // + { input : /\/\*(.*?)\*\//g, output : '/*$1*/' }// comments /* */ +] + +Language.snippets = [] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/javascript.css b/ehcp/net2ftp/plugins/codepress/languages/javascript.css new file mode 100644 index 0000000..8cb9092 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/javascript.css @@ -0,0 +1,8 @@ +/* + * CodePress color styles for JavaScript syntax highlighting + */ + +b {color:#7F0055;font-weight:bold;} /* reserved words */ +u {color:darkblue;font-weight:bold;} /* special words */ +i, i b, i s, i u {color:green;font-weight:normal;} /* comments */ +s, s b, s u {color:#2A00FF;font-weight:normal;} /* strings */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/javascript.js b/ehcp/net2ftp/plugins/codepress/languages/javascript.js new file mode 100644 index 0000000..08cdea4 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/javascript.js @@ -0,0 +1,30 @@ +/* + * CodePress regular expressions for JavaScript syntax highlighting + */ + +// JavaScript +Language.syntax = [ + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single quote + { input : /\b(break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, output : '$1' }, // reserved words + { input : /\b(alert|isNaN|parent|Array|parseFloat|parseInt|blur|clearTimeout|prompt|prototype|close|confirm|length|Date|location|Math|document|element|name|self|elements|setTimeout|navigator|status|String|escape|Number|submit|eval|Object|event|onblur|focus|onerror|onfocus|onclick|top|onload|toString|onunload|unescape|open|valueOf|window|onmouseover)\b/g, output : '$1' }, // special words + { input : /([^:]|^)\/\/(.*?)(//$2$3' }, // comments // + { input : /\/\*(.*?)\*\//g, output : '/*$1*/' } // comments /* */ +] + +Language.snippets = [ + { input : 'dw', output : 'document.write(\'$0\');' }, + { input : 'getid', output : 'document.getElementById(\'$0\')' }, + { input : 'fun', output : 'function $0(){\n\t\n}' }, + { input : 'func', output : 'function $0(){\n\t\n}' } +] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/perl.css b/ehcp/net2ftp/plugins/codepress/languages/perl.css new file mode 100644 index 0000000..d9bce85 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/perl.css @@ -0,0 +1,11 @@ +/* + * CodePress color styles for Perl syntax highlighting + * By J. Nick Koston + */ + +b {color:#7F0055;font-weight:bold;} /* reserved words */ +i, i b, i s, i em, i a, i u {color:gray;font-weight:normal;} /* comments */ +s, s b, s a, s em, s u {color:#2A00FF;font-weight:normal;} /* strings */ +a {color:#006700;font-weight:bold;} /* variables */ +em {color:darkblue;font-weight:bold;} /* functions */ +u {font-weight:bold;} /* special chars */ \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/perl.js b/ehcp/net2ftp/plugins/codepress/languages/perl.js new file mode 100644 index 0000000..5026e5d --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/perl.js @@ -0,0 +1,27 @@ +/* + * CodePress regular expressions for Perl syntax highlighting + * By J. Nick Koston + */ + +// Perl +Language.syntax = [ + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single quote + { input : /([\$\@\%][\w\.]*)/g, output : '$1' }, // vars + { input : /(sub\s+)([\w\.]*)/g, output : '$1$2' }, // functions + { input : /\b(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|dump|each|else|elsif|endgrent|endhostent|endnetent|endprotoent|endpwent|eof|eval|exec|exists|exit|fcntl|fileno|find|flock|for|foreach|fork|format|formlinegetc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyaddr|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|goto|grep|hex|hostname|if|import|index|int|ioctl|join|keys|kill|last|lc|lcfirst|length|link|listen|LoadExternals|local|localtime|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ordpack|package|pipe|pop|pos|print|printf|push|pwd|qq|quotemeta|qw|rand|read|readdir|readlink|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|scalar|seek|seekdir|select|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|stty|study|sub|substr|symlink|syscall|sysopen|sysread|system|syswritetell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unless|unlink|until|unpack|unshift|untie|use|utime|values|vec|waitpid|wantarray|warn|while|write)\b/g, output : '$1' }, // reserved words + { input : /([\(\){}])/g, output : '$1' }, // special chars + { input : /#(.*?)(
|<\/P>)/g, output : '#$1$2' } // comments +] + +Language.snippets = [] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/php.css b/ehcp/net2ftp/plugins/codepress/languages/php.css new file mode 100644 index 0000000..b20a35c --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/php.css @@ -0,0 +1,12 @@ +/* + * CodePress color styles for PHP syntax highlighting + */ + +b {color:#000080;} /* tags */ +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u {color:gray;font-weight:normal;} /* comments */ +s, s b, strong s u, strong s cite {color:#5656fa;font-weight:normal;} /* attributes and strings */ +strong a, strong a u {color:#006700;font-weight:bold;} /* variables */ +em {color:#800080;font-style:normal;} /* style */ +ins {color:#800000;} /* script */ +strong u {color:#7F0055;font-weight:bold;} /* reserved words */ +cite, s cite {color:red;font-weight:bold;} /* */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/php.js b/ehcp/net2ftp/plugins/codepress/languages/php.js new file mode 100644 index 0000000..c7640ba --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/php.js @@ -0,0 +1,61 @@ +/* + * CodePress regular expressions for PHP syntax highlighting + */ + +// PHP +Language.syntax = [ + { input : /(<[^!\?]*?>)/g, output : '$1' }, // all tags + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '$1$2$3' }, // style tags + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '$1$2$3' }, // script tags + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2'}, // strings single quote + { input : /(<\?)/g, output : '$1' }, // ' }, // .*?> + { input : /(<\?php|<\?=|<\?|\?>)/g, output : '$1' }, // php tags + { input : /(\$[\w\.]*)/g, output : '$1' }, // vars + { input : /\b(false|true|and|or|xor|__FILE__|exception|__LINE__|array|as|break|case|class|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|for|foreach|function|global|if|include|include_once|isset|list|new|print|require|require_once|return|static|switch|unset|use|while|__FUNCTION__|__CLASS__|__METHOD__|final|php_user_filter|interface|implements|extends|public|private|protected|abstract|clone|try|catch|throw|this)\b/g, output : '$1' }, // reserved words + { input : /([^:])\/\/(.*?)(//$2$3' }, // php comments // + { input : /([^:])#(.*?)(#$2$3' }, // php comments # + { input : /\/\*(.*?)\*\//g, output : '/*$1*/' }, // php comments /* */ + { input : /(<!--.*?-->.)/g, output : '$1' } // html comments +] + +Language.snippets = [ + { input : 'if', output : 'if($0){\n\t\n}' }, + { input : 'ifelse', output : 'if($0){\n\t\n}\nelse{\n\t\n}' }, + { input : 'else', output : '}\nelse {\n\t' }, + { input : 'elseif', output : '}\nelseif($0) {\n\t' }, + { input : 'do', output : 'do{\n\t$0\n}\nwhile();' }, + { input : 'inc', output : 'include_once("$0");' }, + { input : 'fun', output : 'function $0(){\n\t\n}' }, + { input : 'func', output : 'function $0(){\n\t\n}' }, + { input : 'while', output : 'while($0){\n\t\n}' }, + { input : 'for', output : 'for($0,,){\n\t\n}' }, + { input : 'fore', output : 'foreach($0 as ){\n\t\n}' }, + { input : 'foreach', output : 'foreach($0 as ){\n\t\n}' }, + { input : 'echo', output : 'echo \'$0\';' }, + { input : 'switch', output : 'switch($0) {\n\tcase "": break;\n\tdefault: ;\n}' }, + { input : 'case', output : 'case "$0" : break;' }, + { input : 'ret0', output : 'return false;' }, + { input : 'retf', output : 'return false;' }, + { input : 'ret1', output : 'return true;' }, + { input : 'rett', output : 'return true;' }, + { input : 'ret', output : 'return $0;' }, + { input : 'def', output : 'define(\'$0\',\'\');' }, + { input : '' } +] + +Language.complete = [ + { input : '\'', output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [ + { input : '[space]', output : ' ' }, + { input : '[enter]', output : '
' } , + { input : '[j]', output : 'testing' }, + { input : '[7]', output : '&' } +] \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/ruby.css b/ehcp/net2ftp/plugins/codepress/languages/ruby.css new file mode 100644 index 0000000..b23166b --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/ruby.css @@ -0,0 +1,10 @@ +/* + * CodePress color styles for Ruby syntax highlighting + */ + +b {color:#7F0055;font-weight:bold;} /* reserved words */ +i, i b, i s, i em, i a, i u {color:gray;font-weight:normal;} /* comments */ +s, s b, s a, s em, s u {color:#2A00FF;font-weight:normal;} /* strings */ +a {color:#006700;font-weight:bold;} /* variables */ +em {color:darkblue;font-weight:bold;} /* functions */ +u {font-weight:bold;} /* special chars */ \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/ruby.js b/ehcp/net2ftp/plugins/codepress/languages/ruby.js new file mode 100644 index 0000000..860f433 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/ruby.js @@ -0,0 +1,26 @@ +/* + * CodePress regular expressions for Perl syntax highlighting + */ + +// Ruby +Language.syntax = [ + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, // strings double quote + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2' }, // strings single quote + { input : /([\$\@\%]+)([\w\.]*)/g, output : '$1$2' }, // vars + { input : /(def\s+)([\w\.]*)/g, output : '$1$2' }, // functions + { input : /\b(alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|false|for|if|in|module|next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\b/g, output : '$1' }, // reserved words + { input : /([\(\){}])/g, output : '$1' }, // special chars + { input : /#(.*?)(
|<\/P>)/g, output : '#$1$2' } // comments +]; + +Language.snippets = [] + +Language.complete = [ + { input : '\'',output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/sql.css b/ehcp/net2ftp/plugins/codepress/languages/sql.css new file mode 100644 index 0000000..17458c5 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/sql.css @@ -0,0 +1,10 @@ +/* + * CodePress color styles for SQL syntax highlighting + * By Merlin Moncure + */ + +b {color:#0000FF;font-style:normal;font-weight:bold;} /* reserved words */ +u {color:#FF0000;font-style:normal;} /* types */ +a {color:#CD6600;font-style:normal;font-weight:bold;} /* commands */ +i, i b, i u, i a, i s {color:#A9A9A9;font-weight:normal;font-style:italic;} /* comments */ +s, s b, s u, s a, s i {color:#2A00FF;font-weight:normal;} /* strings */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/sql.js b/ehcp/net2ftp/plugins/codepress/languages/sql.js new file mode 100644 index 0000000..605c971 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/sql.js @@ -0,0 +1,30 @@ +/* + * CodePress regular expressions for SQL syntax highlighting + * By Merlin Moncure + */ + +// SQL +Language.syntax = [ + { input : /\'(.*?)(\')/g, output : '\'$1$2' }, // strings single quote + { input : /\b(add|after|aggregate|alias|all|and|as|authorization|between|by|cascade|cache|cache|called|case|check|column|comment|constraint|createdb|createuser|cycle|database|default|deferrable|deferred|diagnostics|distinct|domain|each|else|elseif|elsif|encrypted|except|exception|for|foreign|from|from|full|function|get|group|having|if|immediate|immutable|in|increment|initially|increment|index|inherits|inner|input|intersect|into|invoker|is|join|key|language|left|like|limit|local|loop|match|maxvalue|minvalue|natural|nextval|no|nocreatedb|nocreateuser|not|null|of|offset|oids|on|only|operator|or|order|outer|owner|partial|password|perform|plpgsql|primary|record|references|replace|restrict|return|returns|right|row|rule|schema|security|sequence|session|sql|stable|statistics|table|temp|temporary|then|time|to|transaction|trigger|type|unencrypted|union|unique|user|using|valid|value|values|view|volatile|when|where|with|without|zone)\b/gi, output : '$1' }, // reserved words + { input : /\b(bigint|bigserial|bit|boolean|box|bytea|char|character|cidr|circle|date|decimal|double|float4|float8|inet|int2|int4|int8|integer|interval|line|lseg|macaddr|money|numeric|oid|path|point|polygon|precision|real|refcursor|serial|serial4|serial8|smallint|text|timestamp|varbit|varchar)\b/gi, output : '$1' }, // types + { input : /\b(abort|alter|analyze|begin|checkpoint|close|cluster|comment|commit|copy|create|deallocate|declare|delete|drop|end|execute|explain|fetch|grant|insert|listen|load|lock|move|notify|prepare|reindex|reset|restart|revoke|rollback|select|set|show|start|truncate|unlisten|update)\b/gi, output : '$1' }, // commands + { input : /([^:]|^)\-\-(.*?)(--$2$3' } // comments // +] + +Language.snippets = [ + { input : 'select', output : 'select $0 from where ' } +] + +Language.complete = [ + { input : '\'', output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [] + + + diff --git a/ehcp/net2ftp/plugins/codepress/languages/text.css b/ehcp/net2ftp/plugins/codepress/languages/text.css new file mode 100644 index 0000000..8e5ba28 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/text.css @@ -0,0 +1,5 @@ +/* + * CodePress color styles for Text syntax highlighting + */ + +/* do nothing as expected */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/text.js b/ehcp/net2ftp/plugins/codepress/languages/text.js new file mode 100644 index 0000000..1895430 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/text.js @@ -0,0 +1,9 @@ +/* + * CodePress regular expressions for Text syntax highlighting + */ + +// plain text +Language.syntax = [] +Language.snippets = [] +Language.complete = [] +Language.shortcuts = [] diff --git a/ehcp/net2ftp/plugins/codepress/languages/vbscript.css b/ehcp/net2ftp/plugins/codepress/languages/vbscript.css new file mode 100644 index 0000000..d65663b --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/vbscript.css @@ -0,0 +1,71 @@ +/* + * CodePress color styles for ASP-VB syntax highlighting + * By Martin D. Kirk + */ + +/* tags */ +b { + color:#000080; +} +/* comments */ +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u { + color:gray; + font-weight:normal; +} +/* ASP comments */ +strong dfn, strong dfn a,strong dfn var, strong dfn a u, strong dfn u{ + color:gray; + font-weight:normal; +} + /* attributes */ +s, s b, span s u, span s cite, strong span s { + color:#5656fa ; + font-weight:normal; +} + /* strings */ +strong s,strong s b, strong s u, strong s cite { + color:#009900; + font-weight:normal; +} +strong ins{ + color:#000000; + font-weight:bold; +} + /* Syntax */ +strong a, strong a u { + color:#0000FF; + font-weight:; +} + /* Native Keywords */ +strong u { + color:#990099; + font-weight:bold; +} +/* Numbers */ +strong var{ + color:#FF0000; +} +/* ASP Language */ +span{ + color:#990000; + font-weight:bold; +} +strong i,strong a i, strong u i { + color:#009999; +} +/* style */ +em { + color:#800080; + font-style:normal; +} + /* script */ +ins { + color:#800000; + font-weight:bold; +} + +/* */ +cite, s cite { + color:red; + font-weight:bold; +} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/vbscript.js b/ehcp/net2ftp/plugins/codepress/languages/vbscript.js new file mode 100644 index 0000000..7439539 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/vbscript.js @@ -0,0 +1,117 @@ +/* + * CodePress regular expressions for ASP-vbscript syntax highlighting + */ + +// ASP VBScript +Language.syntax = [ +// all tags + { input : /(<[^!%|!%@]*?>)/g, output : '$1' }, +// style tags + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '$1$2$3' }, +// script tags + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '$1$2$3' }, +// strings "" and attributes + { input : /\"(.*?)(\"|
|<\/P>)/g, output : '"$1$2' }, +// ASP Comment + { input : /\'(.*?)(\'|
|<\/P>)/g, output : '\'$1$2'}, +// <%.* + { input : /(<%)/g, output : '$1' }, +// .*%> + { input : /(%>)/g, output : '$1' }, +// <%@...%> + { input : /(<%@)(.+?)(%>)/gi, output : '$1$2$3' }, +//Numbers + { input : /\b([\d]+)\b/g, output : '$1' }, +// Reserved Words 1 (Blue) + { input : /\b(And|As|ByRef|ByVal|Call|Case|Class|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Exit|False|For|Function)\b/gi, output : '$1' }, + { input : /\b(Get|GoTo|If|Imp|In|Is|Let|Loop|Me|Mod|Enum|New|Next|Not|Nothing|Null|On|Option|Or|Private|Public|ReDim|Rem)\b/gi, output : '$1' }, + { input : /\b(Resume|Select|Set|Stop|Sub|Then|To|True|Until|Wend|While|With|Xor|Execute|Randomize|Erase|ExecuteGlobal|Explicit|step)\b/gi, output : '$1' }, +// Reserved Words 2 (Purple) + { input : /\b(Abandon|Abs|AbsolutePage|AbsolutePosition|ActiveCommand|ActiveConnection|ActualSize|AddHeader|AddNew|AppendChunk)\b/gi, output : '$1' }, + { input : /\b(AppendToLog|Application|Array|Asc|Atn|Attributes|BeginTrans|BinaryRead|BinaryWrite|BOF|Bookmark|Boolean|Buffer|Byte)\b/gi, output : '$1' }, + { input : /\b(CacheControl|CacheSize|Cancel|CancelBatch|CancelUpdate|CBool|CByte|CCur|CDate|CDbl|Charset|Chr|CInt|Clear)\b/gi, output : '$1' }, + { input : /\b(ClientCertificate|CLng|Clone|Close|CodePage|CommandText|CommandType|CommandTimeout|CommitTrans|CompareBookmarks|ConnectionString|ConnectionTimeout)\b/gi, output : '$1' }, + { input : /\b(Contents|ContentType|Cookies|Cos|CreateObject|CreateParameter|CSng|CStr|CursorLocation|CursorType|DataMember|DataSource|Date|DateAdd|DateDiff)\b/gi, output : '$1' }, + { input : /\b(DatePart|DateSerial|DateValue|Day|DefaultDatabase|DefinedSize|Delete|Description|Double|EditMode|Eof|EOF|err|Error)\b/gi, output : '$1' }, + { input : /\b(Exp|Expires|ExpiresAbsolute|Filter|Find|Fix|Flush|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent)\b/gi, output : '$1' }, + { input : /\b(GetChunk|GetLastError|GetRows|GetString|Global|HelpContext|HelpFile|Hex|Hour|HTMLEncode|IgnoreCase|Index|InStr|InStrRev)\b/gi, output : '$1' }, + { input : /\b(Int|Integer|IsArray|IsClientConnected|IsDate|IsolationLevel|Join|LBound|LCase|LCID|Left|Len|Lock|LockType|Log|Long|LTrim)\b/gi, output : '$1' }, + { input : /\b(MapPath|MarshalOptions|MaxRecords|Mid|Minute|Mode|Month|MonthName|Move|MoveFirst|MoveLast|MoveNext|MovePrevious|Name|NextRecordset)\b/gi, output : '$1' }, + { input : /\b(Now|Number|NumericScale|ObjectContext|Oct|Open|OpenSchema|OriginalValue|PageCount|PageSize|Pattern|PICS|Precision|Prepared|Property)\b/gi, output : '$1' }, + { input : /\b(Provider|QueryString|RecordCount|Redirect|RegExp|Remove|RemoveAll|Replace|Requery|Request|Response|Resync|Right|Rnd)\b/gi, output : '$1' }, + { input : /\b(RollbackTrans|RTrim|Save|ScriptTimeout|Second|Seek|Server|ServerVariables|Session|SessionID|SetAbort|SetComplete|Sgn)\b/gi, output : '$1' }, + { input : /\b(Sin|Size|Sort|Source|Space|Split|Sqr|State|StaticObjects|Status|StayInSync|StrComp|String|StrReverse|Supports|Tan|Time)\b/gi, output : '$1' }, + { input : /\b(Timeout|Timer|TimeSerial|TimeValue|TotalBytes|Transfer|Trim|Type|Type|UBound|UCase|UnderlyingValue|UnLock|Update|UpdateBatch)\b/gi, output : '$1' }, + { input : /\b(URLEncode|Value|Value|Version|Weekday|WeekdayName|Write|Year)\b/gi, output : '$1' }, +// Reserved Words 3 (Turquis) + { input : /\b(vbBlack|vbRed|vbGreen|vbYellow|vbBlue|vbMagenta|vbCyan|vbWhite|vbBinaryCompare|vbTextCompare)\b/gi, output : '$1' }, + { input : /\b(vbSunday|vbMonday|vbTuesday|vbWednesday|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek)\b/gi, output : '$1' }, + { input : /\b(vbFirstJan1|vbFirstFourDays|vbFirstFullWeek|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime)\b/gi, output : '$1' }, + { input : /\b(vbObjectError|vbCr|VbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString|vbTab|vbVerticalTab|vbUseDefault|vbTrue)\b/gi, output : '$1' }, + { input : /\b(vbFalse|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant)\b/gi, output : '$1' }, + { input : /\b(vbDataObject|vbDecimal|vbByte|vbArray)\b/gi, output : '$1' }, +// html comments + { input : /(<!--.*?-->.)/g, output : '$1' } +] + +Language.Functions = [ + // Output at index 0, must be the desired tagname surrounding a $1 + // Name is the index from the regex that marks the functionname + {input : /(function|sub)([ ]*?)(\w+)([ ]*?\()/gi , output : '$1', name : '$3'} +] + +Language.snippets = [ +//Conditional + { input : 'if', output : 'If $0 Then\n\t\nEnd If' }, + { input : 'ifelse', output : 'If $0 Then\n\t\n\nElse\n\t\nEnd If' }, + { input : 'case', output : 'Select Case $0\n\tCase ?\n\tCase Else\nEnd Select'}, +//Response + { input : 'rw', output : 'Response.Write( $0 )' }, + { input : 'resc', output : 'Response.Cookies( $0 )' }, + { input : 'resb', output : 'Response.Buffer'}, + { input : 'resflu', output : 'Response.Flush()'}, + { input : 'resend', output : 'Response.End'}, +//Request + { input : 'reqc', output : 'Request.Cookies( $0 )' }, + { input : 'rq', output : 'Request.Querystring("$0")' }, + { input : 'rf', output : 'Request.Form("$0")' }, +//FSO + { input : 'fso', output : 'Set fso = Server.CreateObject("Scripting.FileSystemObject")\n$0' }, + { input : 'setfo', output : 'Set fo = fso.getFolder($0)' }, + { input : 'setfi', output : 'Set fi = fso.getFile($0)' }, + { input : 'twr', output : 'Set f = fso.CreateTextFile($0,true)\'overwrite\nf.WriteLine()\nf.Close'}, + { input : 'tre', output : 'Set f = fso.OpenTextFile($0, 1)\nf.ReadAll\nf.Close'}, +//Server + { input : 'mapp', output : 'Server.Mappath($0)' }, +//Loops + { input : 'foreach', output : 'For Each $0 in ?\n\t\nNext' }, + { input : 'for', output : 'For $0 to ? step ?\n\t\nNext' }, + { input : 'do', output : 'Do While($0)\n\t\nLoop' }, + { input : 'untilrs', output : 'do until rs.eof\n\t\nrs.movenext\nloop' }, +//ADO + { input : 'adorec', output : 'Set rs = Server.CreateObject("ADODB.Recordset")' }, + { input : 'adocon', output : 'Set Conn = Server.CreateObject("ADODB.Connection")' }, + { input : 'adostr', output : 'Set oStr = Server.CreateObject("ADODB.Stream")' }, +//Http Request + { input : 'xmlhttp', output : 'Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")\nxmlHttp.open("GET", $0, false)\nxmlHttp.send()\n?=xmlHttp.responseText' }, + { input : 'xmldoc', output : 'Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")\nxmldoc.async=false\nxmldoc.load(request)'}, +//Functions + { input : 'func', output : 'Function $0()\n\t\n\nEnd Function'}, + { input : 'sub', output : 'Sub $0()\n\t\nEnd Sub'} + +] + +Language.complete = [ + //{ input : '\'', output : '\'$0\'' }, + { input : '"', output : '"$0"' }, + { input : '(', output : '\($0\)' }, + { input : '[', output : '\[$0\]' }, + { input : '{', output : '{\n\t$0\n}' } +] + +Language.shortcuts = [ + { input : '[space]', output : ' ' }, + { input : '[enter]', output : '
' } , + { input : '[j]', output : 'testing' }, + { input : '[7]', output : '&' } +] \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/languages/xsl.css b/ehcp/net2ftp/plugins/codepress/languages/xsl.css new file mode 100644 index 0000000..32634b6 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/xsl.css @@ -0,0 +1,15 @@ +/* + * CodePress color styles for HTML syntax highlighting + * By RJ Bruneel + */ + +b {color:#000080;} /* tags */ +ins, ins b, ins s, ins em {color:gray;} /* comments */ +s, s b {color:#7777e4;} /* attribute values */ +a {color:#E67300;} /* links */ +u {color:#CC66CC;} /* forms */ +big {color:#db0000;} /* images */ +em, em b {color:#800080;} /* style */ +strong {color:#800000;} /* script */ +tt i {color:darkblue;font-weight:bold;} /* script reserved words */ +xsl {color:green;} /* xsl */ diff --git a/ehcp/net2ftp/plugins/codepress/languages/xsl.js b/ehcp/net2ftp/plugins/codepress/languages/xsl.js new file mode 100644 index 0000000..b23d359 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/languages/xsl.js @@ -0,0 +1,103 @@ +/* + * CodePress regular expressions for XSL syntax highlighting + * By RJ Bruneel + */ + +Language.syntax = [ // XSL + { + input : /(<[^!]*?>)/g, + output : '$1' // all tags + },{ + input : /(<a.*?>|<\/a>)/g, + output : '$1' // links + },{ + input : /(<img .*?>)/g, + output : '$1' // images + },{ + input : /(<\/?(button|textarea|form|input|select|option|label).*?>)/g, + output : '$1' // forms + },{ + input : /(<style.*?>)(.*?)(<\/style>)/g, + output : '$1$2$3' // style tags + },{ + input : /(<script.*?>)(.*?)(<\/script>)/g, + output : '$1$2$3' // script tags + },{ + input : /(<xsl.*?>|<\/xsl.*?>)/g, + output : '$1' // xsl + },{ + input : /=(".*?")/g, + output : '=$1' // atributes double quote + },{ + input : /=('.*?')/g, + output : '=$1' // atributes single quote + },{ + input : /(<!--.*?-->.)/g, + output : '$1' // comments + },{ + input : /\b(alert|window|document|break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, + output : '$1' // script reserved words + } +]; + +Language.snippets = [ + {input : 'aref', output : '' }, + {input : 'h1', output : '

$0

' }, + {input : 'h2', output : '

$0

' }, + {input : 'h3', output : '

$0

' }, + {input : 'h4', output : '

$0

' }, + {input : 'h5', output : '
$0
' }, + {input : 'h6', output : '
$0
' }, + {input : 'html', output : '\n\t$0\n' }, + {input : 'head', output : '\n\t\n\t$0\n\t\n' }, + {input : 'img', output : '' }, + {input : 'input', output : '' }, + {input : 'label', output : '' }, + {input : 'legend', output : '\n\t$0\n' }, + {input : 'link', output : '' }, + {input : 'base', output : '' }, + {input : 'body', output : '\n\t$0\n' }, + {input : 'css', output : '' }, + {input : 'div', output : '
\n\t$0\n
' }, + {input : 'divid', output : '
\n\t\n
' }, + {input : 'dl', output : '
\n\t
\n\t\t$0\n\t
\n\t
\n
' }, + {input : 'fieldset', output : '
\n\t$0\n
' }, + {input : 'form', output : '
\n\t\n
' }, + {input : 'meta', output : '' }, + {input : 'p', output : '

$0

' }, + {input : 'b', output : '$0' }, + {input : 'li', output : '
  • $0
  • ' }, + {input : 'ul', output : '
      $0
    ' }, + {input : 'ol', output : '
      $0
    ' }, + {input : 'strong', output : '$0' }, + {input : 'br', output : '
    ' }, + {input : 'script', output : '' }, + {input : 'scriptsrc', output : '' }, + {input : 'span', output : '$0' }, + {input : 'table', output : '\n\t\n\t\n
    ' }, + {input : 'style', output : '' }, + {input : 'xsl:stylesheet', output : '' }, + {input : 'xsl:template', output : '$0' }, + {input : 'xsl:for-each', output : '' }, + {input : 'xsl:choose', output : '$0<\xsl:choose>' }, + {input : 'xsl:param', output : '' }, + {input : 'xsl:variable', output : '' }, + {input : 'xsl:if', output : '' }, + {input : 'xsl:when', output : '' }, + {input : 'xsl:otherwise', output : '$0' }, + {input : 'xsl:attribute', output : '' }, + {input : 'xsl:value-of', output : '' }, + {input : 'xsl:with-param', output : '' }, + {input : 'xsl:call-template', output : '' } + +]; + +Language.complete = [ // Auto complete only for 1 character + {input : '\'',output : '\'$0\'' }, + {input : '"', output : '"$0"' }, + {input : '(', output : '\($0\)' }, + {input : '[', output : '\[$0\]' }, + {input : '{', output : '{\n\t$0\n}' } +]; + +Language.shortcuts = []; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/codepress/license.txt b/ehcp/net2ftp/plugins/codepress/license.txt new file mode 100644 index 0000000..81b55d9 --- /dev/null +++ b/ehcp/net2ftp/plugins/codepress/license.txt @@ -0,0 +1,458 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js new file mode 100644 index 0000000..d7daefb --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckcontextmenu.js @@ -0,0 +1,214 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKContextMenu Class: renders an control a context menu. + */ + +var FCKContextMenu = function( parentWindow, langDir ) +{ + this.CtrlDisable = false ; + + var oPanel = this._Panel = new FCKPanel( parentWindow ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; + oPanel.IsContextMenu = true ; + + // The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla + // so we stop the start of the dragging + if ( FCKBrowserInfo.IsGecko ) + oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ; + + var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ; + oMenuBlock.Panel = oPanel ; + oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ; + + this._Redraw = true ; +} + + +FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow ) +{ + if ( !FCKBrowserInfo.IsIE ) + { + this._Document = mouseClickWindow.document ; + if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) ) + { + this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ; + this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ; + } + this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ; + } +} + +/** + The customData parameter is just a value that will be send to the command that is executed, + so it's possible to reuse the same command for several items just by assigning different data for each one. +*/ +FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) +{ + var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; + this._Redraw = true ; + return oItem ; +} + +FCKContextMenu.prototype.AddSeparator = function() +{ + this._MenuBlock.AddSeparator() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.RemoveAllItems = function() +{ + this._MenuBlock.RemoveAllItems() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.AttachToElement = function( element ) +{ + if ( FCKBrowserInfo.IsIE ) + FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ; + else + element._FCKContextMenu = this ; +} + +function FCKContextMenu_Document_OnContextMenu( e ) +{ + var el = e.target ; + + while ( el ) + { + if ( el._FCKContextMenu ) + { + if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) ) + return true ; + + FCKTools.CancelEvent( e ) ; + FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ; + return false ; + } + el = el.parentNode ; + } + return true ; +} + +var FCKContextMenu_OverrideButton ; + +function FCKContextMenu_Document_OnMouseDown( e ) +{ + if( !e || e.button != 2 ) + return false ; + + var el = e.target ; + + while ( el ) + { + if ( el._FCKContextMenu ) + { + if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) ) + return true ; + + var overrideButton = FCKContextMenu_OverrideButton ; + if( !overrideButton ) + { + var doc = FCKTools.GetElementDocument( e.target ) ; + overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ; + overrideButton.type = 'button' ; + var buttonHolder = doc.createElement('p') ; + doc.body.appendChild( buttonHolder ) ; + buttonHolder.appendChild( overrideButton ) ; + } + + overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) + + 'px;left:' + ( e.clientX - 2 ) + + 'px;width:5px;height:5px;opacity:0.01' ; + } + el = el.parentNode ; + } + return false ; +} + +function FCKContextMenu_Document_OnMouseUp( e ) +{ + var overrideButton = FCKContextMenu_OverrideButton ; + + if ( overrideButton ) + { + var parent = overrideButton.parentNode ; + parent.parentNode.removeChild( parent ) ; + FCKContextMenu_OverrideButton = undefined ; + + if( e && e.button == 2 ) + { + FCKContextMenu_Document_OnContextMenu( e ) ; + return false ; + } + } + return true ; +} + +function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) +{ + if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) + return true ; + + var eTarget = el || this ; + + if ( fckContextMenu.OnBeforeOpen ) + fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ; + + if ( fckContextMenu._MenuBlock.Count() == 0 ) + return false ; + + if ( fckContextMenu._Redraw ) + { + fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ; + fckContextMenu._Redraw = false ; + } + + // This will avoid that the content of the context menu can be dragged in IE + // as the content of the panel is recreated we need to do it every time + FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ; + + var x = 0 ; + var y = 0 ; + if ( FCKBrowserInfo.IsIE ) + { + x = ev.screenX ; + y = ev.screenY ; + } + else if ( FCKBrowserInfo.IsSafari ) + { + x = ev.clientX ; + y = ev.clientY ; + } + else + { + x = ev.pageX ; + y = ev.pageY ; + } + fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ; + + return false ; +} + +function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu ) +{ + contextMenu._Panel.Hide() ; + FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js new file mode 100644 index 0000000..c8726c5 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdataprocessor.js @@ -0,0 +1,119 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * The Data Processor is responsible for transforming the input and output data + * in the editor. For more info: + * http://dev.fckeditor.net/wiki/Components/DataProcessor + * + * The default implementation offers the base XHTML compatibility features of + * FCKeditor. Further Data Processors may be implemented for other purposes. + * + */ + +var FCKDataProcessor = function() +{} + +FCKDataProcessor.prototype = +{ + /* + * Returns a string representing the HTML format of "data". The returned + * value will be loaded in the editor. + * The HTML must be from to , including , and + * eventually the DOCTYPE. + * Note: HTML comments may already be part of the data because of the + * pre-processing made with ProtectedSource. + * @param {String} data The data to be converted in the + * DataProcessor specific format. + */ + ConvertToHtml : function( data ) + { + // The default data processor must handle two different cases depending + // on the FullPage setting. Custom Data Processors will not be + // compatible with FullPage, much probably. + if ( FCKConfig.FullPage ) + { + // Save the DOCTYPE. + FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ; + + // Check if the tag is available. + if ( !FCKRegexLib.HasBodyTag.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HtmlOpener.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HeadOpener.test( data ) ) + data = data.replace( FCKRegexLib.HtmlOpener, '$&' ) ; + + return data ; + } + else + { + var html = + FCKConfig.DocType + + ' 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) ) + html += ' style="overflow-y: scroll"' ; + + html += '>' + + '' + + data + + '' ; + + return html ; + } + }, + + /* + * Converts a DOM (sub-)tree to a string in the data format. + * @param {Object} rootNode The node that contains the DOM tree to be + * converted to the data format. + * @param {Boolean} excludeRoot Indicates that the root node must not + * be included in the conversion, only its children. + * @param {Boolean} format Indicates that the data must be formatted + * for human reading. Not all Data Processors may provide it. + */ + ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format ) + { + var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ; + + if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) ) + return '' ; + + return data ; + }, + + /* + * Makes any necessary changes to a piece of HTML for insertion in the + * editor selection position. + * @param {String} html The HTML to be fixed. + */ + FixHtml : function( html ) + { + return html ; + } +} ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js new file mode 100644 index 0000000..a25eacb --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js @@ -0,0 +1,46 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is a generic Document Fragment object. It is not intended to provide + * the W3C implementation, but is a way to fix the missing of a real Document + * Fragment in IE (where document.createDocumentFragment() returns a normal + * document instead), giving a standard interface for it. + * (IE Implementation) + */ + +var FCKDocumentFragment = function( parentDocument, baseDocFrag ) +{ + this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ; +} + +FCKDocumentFragment.prototype = +{ + + // Append the contents of this Document Fragment to another element. + AppendTo : function( targetNode ) + { + targetNode.appendChild( this.RootNode ) ; + }, + + InsertAfterNode : function( existingNode ) + { + FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ; + } +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js new file mode 100644 index 0000000..4a50cf4 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js @@ -0,0 +1,58 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is a generic Document Fragment object. It is not intended to provide + * the W3C implementation, but is a way to fix the missing of a real Document + * Fragment in IE (where document.createDocumentFragment() returns a normal + * document instead), giving a standard interface for it. + * (IE Implementation) + */ + +var FCKDocumentFragment = function( parentDocument ) +{ + this._Document = parentDocument ; + this.RootNode = parentDocument.createElement( 'div' ) ; +} + +// Append the contents of this Document Fragment to another node. +FCKDocumentFragment.prototype = +{ + + AppendTo : function( targetNode ) + { + FCKDomTools.MoveChildren( this.RootNode, targetNode ) ; + }, + + AppendHtml : function( html ) + { + var eTmpDiv = this._Document.createElement( 'div' ) ; + eTmpDiv.innerHTML = html ; + FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ; + }, + + InsertAfterNode : function( existingNode ) + { + var eRoot = this.RootNode ; + var eLast ; + + while( ( eLast = eRoot.lastChild ) ) + FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ; + } +} ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange.js new file mode 100644 index 0000000..09aab32 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange.js @@ -0,0 +1,918 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Class for working with a selection range, much like the W3C DOM Range, but + * it is not intended to be an implementation of the W3C interface. + */ + +var FCKDomRange = function( sourceWindow ) +{ + this.Window = sourceWindow ; + this._Cache = {} ; +} + +FCKDomRange.prototype = +{ + + _UpdateElementInfo : function() + { + var innerRange = this._Range ; + + if ( !innerRange ) + this.Release( true ) ; + else + { + // For text nodes, the node itself is the StartNode. + var eStart = innerRange.startContainer ; + var eEnd = innerRange.endContainer ; + + var oElementPath = new FCKElementPath( eStart ) ; + this.StartNode = eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ; + this.StartContainer = eStart ; + this.StartBlock = oElementPath.Block ; + this.StartBlockLimit = oElementPath.BlockLimit ; + + if ( eStart != eEnd ) + oElementPath = new FCKElementPath( eEnd ) ; + + // The innerRange.endContainer[ innerRange.endOffset ] is not + // usually part of the range, but the marker for the range end. So, + // let's get the previous available node as the real end. + var eEndNode = eEnd ; + if ( innerRange.endOffset == 0 ) + { + while ( eEndNode && !eEndNode.previousSibling ) + eEndNode = eEndNode.parentNode ; + + if ( eEndNode ) + eEndNode = eEndNode.previousSibling ; + } + else if ( eEndNode.nodeType == 1 ) + eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ; + + this.EndNode = eEndNode ; + this.EndContainer = eEnd ; + this.EndBlock = oElementPath.Block ; + this.EndBlockLimit = oElementPath.BlockLimit ; + } + + this._Cache = {} ; + }, + + CreateRange : function() + { + return new FCKW3CRange( this.Window.document ) ; + }, + + DeleteContents : function() + { + if ( this._Range ) + { + this._Range.deleteContents() ; + this._UpdateElementInfo() ; + } + }, + + ExtractContents : function() + { + if ( this._Range ) + { + var docFrag = this._Range.extractContents() ; + this._UpdateElementInfo() ; + return docFrag ; + } + return null ; + }, + + CheckIsCollapsed : function() + { + if ( this._Range ) + return this._Range.collapsed ; + + return false ; + }, + + Collapse : function( toStart ) + { + if ( this._Range ) + this._Range.collapse( toStart ) ; + + this._UpdateElementInfo() ; + }, + + Clone : function() + { + var oClone = FCKTools.CloneObject( this ) ; + + if ( this._Range ) + oClone._Range = this._Range.cloneRange() ; + + return oClone ; + }, + + MoveToNodeContents : function( targetNode ) + { + if ( !this._Range ) + this._Range = this.CreateRange() ; + + this._Range.selectNodeContents( targetNode ) ; + + this._UpdateElementInfo() ; + }, + + MoveToElementStart : function( targetElement ) + { + this.SetStart(targetElement,1) ; + this.SetEnd(targetElement,1) ; + }, + + // Moves to the first editing point inside a element. For example, in a + // element tree like "

    Text

    ", the start editing point + // is "

    ^ Text

    " (inside ). + MoveToElementEditStart : function( targetElement ) + { + var editableElement ; + + while ( targetElement && targetElement.nodeType == 1 ) + { + if ( FCKDomTools.CheckIsEditable( targetElement ) ) + editableElement = targetElement ; + else if ( editableElement ) + break ; // If we already found an editable element, stop the loop. + + targetElement = targetElement.firstChild ; + } + + if ( editableElement ) + this.MoveToElementStart( editableElement ) ; + }, + + InsertNode : function( node ) + { + if ( this._Range ) + this._Range.insertNode( node ) ; + }, + + CheckIsEmpty : function() + { + if ( this.CheckIsCollapsed() ) + return true ; + + // Inserts the contents of the range in a div tag. + var eToolDiv = this.Window.document.createElement( 'div' ) ; + this._Range.cloneContents().AppendTo( eToolDiv ) ; + + FCKDomTools.TrimNode( eToolDiv ) ; + + return ( eToolDiv.innerHTML.length == 0 ) ; + }, + + /** + * Checks if the start boundary of the current range is "visually" (like a + * selection caret) at the beginning of the block. It means that some + * things could be brefore the range, like spaces or empty inline elements, + * but it would still be considered at the beginning of the block. + */ + CheckStartOfBlock : function() + { + var cache = this._Cache ; + var bIsStartOfBlock = cache.IsStartOfBlock ; + + if ( bIsStartOfBlock != undefined ) + return bIsStartOfBlock ; + + // Take the block reference. + var block = this.StartBlock || this.StartBlockLimit ; + + var container = this._Range.startContainer ; + var offset = this._Range.startOffset ; + var currentNode ; + + if ( offset > 0 ) + { + // First, check the start container. If it is a text node, get the + // substring of the node value before the range offset. + if ( container.nodeType == 3 ) + { + var textValue = container.nodeValue.substr( 0, offset ).Trim() ; + + // If we have some text left in the container, we are not at + // the end for the block. + if ( textValue.length != 0 ) + return cache.IsStartOfBlock = false ; + } + else + currentNode = container.childNodes[ offset - 1 ] ; + } + + // We'll not have a currentNode if the container was a text node, or + // the offset is zero. + if ( !currentNode ) + currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ; + + while ( currentNode ) + { + switch ( currentNode.nodeType ) + { + case 1 : + // It's not an inline element. + if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] ) + return cache.IsStartOfBlock = false ; + + break ; + + case 3 : + // It's a text node with real text. + if ( currentNode.nodeValue.Trim().length > 0 ) + return cache.IsStartOfBlock = false ; + } + + currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ; + } + + return cache.IsStartOfBlock = true ; + }, + + /** + * Checks if the end boundary of the current range is "visually" (like a + * selection caret) at the end of the block. It means that some things + * could be after the range, like spaces, empty inline elements, or a + * single
    , but it would still be considered at the end of the block. + */ + CheckEndOfBlock : function( refreshSelection ) + { + var isEndOfBlock = this._Cache.IsEndOfBlock ; + + if ( isEndOfBlock != undefined ) + return isEndOfBlock ; + + // Take the block reference. + var block = this.EndBlock || this.EndBlockLimit ; + + var container = this._Range.endContainer ; + var offset = this._Range.endOffset ; + var currentNode ; + + // First, check the end container. If it is a text node, get the + // substring of the node value after the range offset. + if ( container.nodeType == 3 ) + { + var textValue = container.nodeValue ; + if ( offset < textValue.length ) + { + textValue = textValue.substr( offset ) ; + + // If we have some text left in the container, we are not at + // the end for the block. + if ( textValue.Trim().length != 0 ) + return this._Cache.IsEndOfBlock = false ; + } + } + else + currentNode = container.childNodes[ offset ] ; + + // We'll not have a currentNode if the container was a text node, of + // the offset is out the container children limits (after it probably). + if ( !currentNode ) + currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ; + + var hadBr = false ; + + while ( currentNode ) + { + switch ( currentNode.nodeType ) + { + case 1 : + var nodeName = currentNode.nodeName.toLowerCase() ; + + // It's an inline element. + if ( FCKListsLib.InlineChildReqElements[ nodeName ] ) + break ; + + // It is the first
    found. + if ( nodeName == 'br' && !hadBr ) + { + hadBr = true ; + break ; + } + + return this._Cache.IsEndOfBlock = false ; + + case 3 : + // It's a text node with real text. + if ( currentNode.nodeValue.Trim().length > 0 ) + return this._Cache.IsEndOfBlock = false ; + } + + currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ; + } + + if ( refreshSelection ) + this.Select() ; + + return this._Cache.IsEndOfBlock = true ; + }, + + // This is an "intrusive" way to create a bookmark. It includes tags + // in the range boundaries. The advantage of it is that it is possible to + // handle DOM mutations when moving back to the bookmark. + // Attention: the inclusion of nodes in the DOM is a design choice and + // should not be changed as there are other points in the code that may be + // using those nodes to perform operations. See GetBookmarkNode. + // For performance, includeNodes=true if intended to SelectBookmark. + CreateBookmark : function( includeNodes ) + { + // Create the bookmark info (random IDs). + var oBookmark = + { + StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S', + EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E' + } ; + + var oDoc = this.Window.document ; + var eStartSpan ; + var eEndSpan ; + var oClone ; + + // For collapsed ranges, add just the start marker. + if ( !this.CheckIsCollapsed() ) + { + eEndSpan = oDoc.createElement( 'span' ) ; + eEndSpan.style.display = 'none' ; + eEndSpan.id = oBookmark.EndId ; + eEndSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be + // removed during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eEndSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( false ) ; + oClone.InsertNode( eEndSpan ) ; + } + + eStartSpan = oDoc.createElement( 'span' ) ; + eStartSpan.style.display = 'none' ; + eStartSpan.id = oBookmark.StartId ; + eStartSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be removed + // during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eStartSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( true ) ; + oClone.InsertNode( eStartSpan ) ; + + if ( includeNodes ) + { + oBookmark.StartNode = eStartSpan ; + oBookmark.EndNode = eEndSpan ; + } + + // Update the range position. + if ( eEndSpan ) + { + this.SetStart( eStartSpan, 4 ) ; + this.SetEnd( eEndSpan, 3 ) ; + } + else + this.MoveToPosition( eStartSpan, 4 ) ; + + return oBookmark ; + }, + + // This one should be a part of a hypothetic "bookmark" object. + GetBookmarkNode : function( bookmark, start ) + { + var doc = this.Window.document ; + + if ( start ) + return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ; + else + return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ; + }, + + MoveToBookmark : function( bookmark, preserveBookmark ) + { + var eStartSpan = this.GetBookmarkNode( bookmark, true ) ; + var eEndSpan = this.GetBookmarkNode( bookmark, false ) ; + + this.SetStart( eStartSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eStartSpan ) ; + + // If collapsed, the end span will not be available. + if ( eEndSpan ) + { + this.SetEnd( eEndSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eEndSpan ) ; + } + else + this.Collapse( true ) ; + + this._UpdateElementInfo() ; + }, + + // Non-intrusive bookmark algorithm + CreateBookmark2 : function() + { + // If there is no range then get out of here. + // It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox + if ( ! this._Range ) + return { "Start" : 0, "End" : 0 } ; + + // First, we record down the offset values + var bookmark = + { + "Start" : [ this._Range.startOffset ], + "End" : [ this._Range.endOffset ] + } ; + // Since we're treating the document tree as normalized, we need to backtrack the text lengths + // of previous text nodes into the offset value. + var curStart = this._Range.startContainer.previousSibling ; + var curEnd = this._Range.endContainer.previousSibling ; + + // Also note that the node that we use for "address base" would change during backtracking. + var addrStart = this._Range.startContainer ; + var addrEnd = this._Range.endContainer ; + while ( curStart && curStart.nodeType == 3 ) + { + bookmark.Start[0] += curStart.length ; + addrStart = curStart ; + curStart = curStart.previousSibling ; + } + while ( curEnd && curEnd.nodeType == 3 ) + { + bookmark.End[0] += curEnd.length ; + addrEnd = curEnd ; + curEnd = curEnd.previousSibling ; + } + + // If the object pointed to by the startOffset and endOffset are text nodes, we need + // to backtrack and add in the text offset to the bookmark addresses. + if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 ) + { + var curNode = addrStart.childNodes[bookmark.Start[0]] ; + var offset = 0 ; + while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 ) + { + curNode = curNode.previousSibling ; + offset += curNode.length ; + } + addrStart = curNode ; + bookmark.Start[0] = offset ; + } + if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 ) + { + var curNode = addrEnd.childNodes[bookmark.End[0]] ; + var offset = 0 ; + while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 ) + { + curNode = curNode.previousSibling ; + offset += curNode.length ; + } + addrEnd = curNode ; + bookmark.End[0] = offset ; + } + + // Then, we record down the precise position of the container nodes + // by walking up the DOM tree and counting their childNode index + bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ; + bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ; + return bookmark; + }, + + MoveToBookmark2 : function( bookmark ) + { + // Reverse the childNode counting algorithm in CreateBookmark2() + var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ; + var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ; + + // Generate the W3C Range object and update relevant data + this.Release( true ) ; + this._Range = new FCKW3CRange( this.Window.document ) ; + var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ; + var endOffset = bookmark.End[ bookmark.End.length - 1 ] ; + while ( curStart.nodeType == 3 && startOffset > curStart.length ) + { + if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 ) + break ; + startOffset -= curStart.length ; + curStart = curStart.nextSibling ; + } + while ( curEnd.nodeType == 3 && endOffset > curEnd.length ) + { + if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 ) + break ; + endOffset -= curEnd.length ; + curEnd = curEnd.nextSibling ; + } + this._Range.setStart( curStart, startOffset ) ; + this._Range.setEnd( curEnd, endOffset ) ; + this._UpdateElementInfo() ; + }, + + MoveToPosition : function( targetElement, position ) + { + this.SetStart( targetElement, position ) ; + this.Collapse( true ) ; + }, + + /* + * Moves the position of the start boundary of the range to a specific position + * relatively to a element. + * @position: + * 1 = After Start ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetStart : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setStart( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setStart( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setStartBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + oRange.setStartAfter( targetElement ) ; + } + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; + }, + + /* + * Moves the position of the start boundary of the range to a specific position + * relatively to a element. + * @position: + * 1 = After Start ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetEnd : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setEnd( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setEnd( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setEndBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + oRange.setEndAfter( targetElement ) ; + } + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; + }, + + Expand : function( unit ) + { + var oNode, oSibling ; + + switch ( unit ) + { + // Expand the range to include all inline parent elements if we are + // are in their boundary limits. + // For example (where [ ] are the range limits): + // Before => Some [Some sample text]. + // After => Some [Some sample text]. + case 'inline_elements' : + // Expand the start boundary. + if ( this._Range.startOffset == 0 ) + { + oNode = this._Range.startContainer ; + + if ( oNode.nodeType != 1 ) + oNode = oNode.previousSibling ? null : oNode.parentNode ; + + if ( oNode ) + { + while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] ) + { + this._Range.setStartBefore( oNode ) ; + + if ( oNode != oNode.parentNode.firstChild ) + break ; + + oNode = oNode.parentNode ; + } + } + } + + // Expand the end boundary. + oNode = this._Range.endContainer ; + var offset = this._Range.endOffset ; + + if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) ) + { + if ( oNode.nodeType != 1 ) + oNode = oNode.nextSibling ? null : oNode.parentNode ; + + if ( oNode ) + { + while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] ) + { + this._Range.setEndAfter( oNode ) ; + + if ( oNode != oNode.parentNode.lastChild ) + break ; + + oNode = oNode.parentNode ; + } + } + } + + break ; + + case 'block_contents' : + case 'list_contents' : + var boundarySet = FCKListsLib.BlockBoundaries ; + if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' ) + boundarySet = FCKListsLib.ListBoundaries ; + + if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' ) + this.SetStart( this.StartBlock, 1 ) ; + else + { + // Get the start node for the current range. + oNode = this._Range.startContainer ; + + // If it is an element, get the node right before of it (in source order). + if ( oNode.nodeType == 1 ) + { + var lastNode = oNode.childNodes[ this._Range.startOffset ] ; + if ( lastNode ) + oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ; + else + oNode = oNode.lastChild || oNode ; + } + + // We must look for the left boundary, relative to the range + // start, which is limited by a block element. + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) + { + this._Range.setStartBefore( oNode ) ; + oNode = oNode.previousSibling || oNode.parentNode ; + } + } + + if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' ) + this.SetEnd( this.EndBlock, 2 ) ; + else + { + oNode = this._Range.endContainer ; + if ( oNode.nodeType == 1 ) + oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ; + + // We must look for the right boundary, relative to the range + // end, which is limited by a block element. + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) + { + this._Range.setEndAfter( oNode ) ; + oNode = oNode.nextSibling || oNode.parentNode ; + } + + // In EnterMode='br', the end
    boundary element must + // be included in the expanded range. + if ( oNode && oNode.nodeName.toLowerCase() == 'br' ) + this._Range.setEndAfter( oNode ) ; + } + + this._UpdateElementInfo() ; + } + }, + + /** + * Split the block element for the current range. It deletes the contents + * of the range and splits the block in the collapsed position, resulting + * in two sucessive blocks. The range is then positioned in the middle of + * them. + * + * It returns and object with the following properties: + * - PreviousBlock : a reference to the block element that preceeds + * the range after the split. + * - NextBlock : a reference to the block element that follows the + * range after the split. + * - WasStartOfBlock : a boolean indicating that the range was + * originaly at the start of the block. + * - WasEndOfBlock : a boolean indicating that the range was originaly + * at the end of the block. + * + * If the range was originaly at the start of the block, no split will happen + * and the PreviousBlock value will be null. The same is valid for the + * NextBlock value if the range was at the end of the block. + */ + SplitBlock : function( forceBlockTag ) + { + var blockTag = forceBlockTag || FCKConfig.EnterMode ; + + if ( !this._Range ) + this.MoveToSelection() ; + + // The range boundaries must be in the same "block limit" element. + if ( this.StartBlockLimit == this.EndBlockLimit ) + { + // Get the current blocks. + var eStartBlock = this.StartBlock ; + var eEndBlock = this.EndBlock ; + var oElementPath = null ; + + if ( blockTag != 'br' ) + { + if ( !eStartBlock ) + { + eStartBlock = this.FixBlock( true, blockTag ) ; + eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too. + } + + if ( !eEndBlock ) + eEndBlock = this.FixBlock( false, blockTag ) ; + } + + // Get the range position. + var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ; + var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ; + + // Delete the current contents. + if ( !this.CheckIsEmpty() ) + this.DeleteContents() ; + + if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock ) + { + if ( bIsEndOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eEndBlock, 4 ) ; + eEndBlock = null ; + } + else if ( bIsStartOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eStartBlock, 3 ) ; + eStartBlock = null ; + } + else + { + // Extract the contents of the block from the selection point to the end of its contents. + this.SetEnd( eStartBlock, 2 ) ; + var eDocFrag = this.ExtractContents() ; + + // Duplicate the block element after it. + eEndBlock = eStartBlock.cloneNode( false ) ; + eEndBlock.removeAttribute( 'id', false ) ; + + // Place the extracted contents in the duplicated block. + eDocFrag.AppendTo( eEndBlock ) ; + + FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ; + + this.MoveToPosition( eStartBlock, 4 ) ; + + // In Gecko, the last child node must be a bogus
    . + // Note: bogus
    added under
      or
        would cause lists to be incorrectly rendered. + if ( FCKBrowserInfo.IsGecko && + ! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) ) + FCKTools.AppendBogusBr( eStartBlock ) ; + } + } + + return { + PreviousBlock : eStartBlock, + NextBlock : eEndBlock, + WasStartOfBlock : bIsStartOfBlock, + WasEndOfBlock : bIsEndOfBlock, + ElementPath : oElementPath + } ; + } + + return null ; + }, + + // Transform a block without a block tag in a valid block (orphan text in the body or td, usually). + FixBlock : function( isStart, blockTag ) + { + // Bookmark the range so we can restore it later. + var oBookmark = this.CreateBookmark() ; + + // Collapse the range to the requested ending boundary. + this.Collapse( isStart ) ; + + // Expands it to the block contents. + this.Expand( 'block_contents' ) ; + + // Create the fixed block. + var oFixedBlock = this.Window.document.createElement( blockTag ) ; + + // Move the contents of the temporary range to the fixed block. + this.ExtractContents().AppendTo( oFixedBlock ) ; + FCKDomTools.TrimNode( oFixedBlock ) ; + + // Insert the fixed block into the DOM. + this.InsertNode( oFixedBlock ) ; + + // Move the range back to the bookmarked place. + this.MoveToBookmark( oBookmark ) ; + + return oFixedBlock ; + }, + + Release : function( preserveWindow ) + { + if ( !preserveWindow ) + this.Window = null ; + + this.StartNode = null ; + this.StartContainer = null ; + this.StartBlock = null ; + this.StartBlockLimit = null ; + this.EndNode = null ; + this.EndContainer = null ; + this.EndBlock = null ; + this.EndBlockLimit = null ; + this._Range = null ; + this._Cache = null ; + }, + + CheckHasRange : function() + { + return !!this._Range ; + }, + + GetTouchedStartNode : function() + { + var range = this._Range ; + var container = range.startContainer ; + + if ( range.collapsed || container.nodeType != 1 ) + return container ; + + return container.childNodes[ range.startOffset ] || container ; + }, + + GetTouchedEndNode : function() + { + var range = this._Range ; + var container = range.endContainer ; + + if ( range.collapsed || container.nodeType != 1 ) + return container ; + + return container.childNodes[ range.endOffset - 1 ] || container ; + } +} ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_gecko.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_gecko.js new file mode 100644 index 0000000..ddffb13 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_gecko.js @@ -0,0 +1,104 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Class for working with a selection range, much like the W3C DOM Range, but + * it is not intended to be an implementation of the W3C interface. + * (Gecko Implementation) + */ + +FCKDomRange.prototype.MoveToSelection = function() +{ + this.Release( true ) ; + + var oSel = this.Window.getSelection() ; + + if ( oSel && oSel.rangeCount > 0 ) + { + this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ; + this._UpdateElementInfo() ; + } + else + if ( this.Window.document ) + this.MoveToElementStart( this.Window.document.body ) ; +} + +FCKDomRange.prototype.Select = function() +{ + var oRange = this._Range ; + if ( oRange ) + { + var startContainer = oRange.startContainer ; + + // If we have a collapsed range, inside an empty element, we must add + // something to it, otherwise the caret will not be visible. + if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 ) + startContainer.appendChild( oRange._Document.createTextNode('') ) ; + + var oDocRange = this.Window.document.createRange() ; + oDocRange.setStart( startContainer, oRange.startOffset ) ; + + try + { + oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ; + } + catch ( e ) + { + // There is a bug in Firefox implementation (it would be too easy + // otherwise). The new start can't be after the end (W3C says it can). + // So, let's create a new range and collapse it to the desired point. + if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) ) + { + oRange.collapse( true ) ; + oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ; + } + else + throw( e ) ; + } + + var oSel = this.Window.getSelection() ; + oSel.removeAllRanges() ; + + // We must add a clone otherwise Firefox will have rendering issues. + oSel.addRange( oDocRange ) ; + } +} + +// Not compatible with bookmark created with CreateBookmark2. +// The bookmark nodes will be deleted from the document. +FCKDomRange.prototype.SelectBookmark = function( bookmark ) +{ + var domRange = this.Window.document.createRange() ; + + var startNode = this.GetBookmarkNode( bookmark, true ) ; + var endNode = this.GetBookmarkNode( bookmark, false ) ; + + domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ; + FCKDomTools.RemoveNode( startNode ) ; + + if ( endNode ) + { + domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ; + FCKDomTools.RemoveNode( endNode ) ; + } + + var selection = this.Window.getSelection() ; + selection.removeAllRanges() ; + selection.addRange( domRange ) ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_ie.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_ie.js new file mode 100644 index 0000000..3ebe2b9 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrange_ie.js @@ -0,0 +1,199 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Class for working with a selection range, much like the W3C DOM Range, but + * it is not intended to be an implementation of the W3C interface. + * (IE Implementation) + */ + +FCKDomRange.prototype.MoveToSelection = function() +{ + this.Release( true ) ; + + this._Range = new FCKW3CRange( this.Window.document ) ; + + var oSel = this.Window.document.selection ; + + if ( oSel.type != 'Control' ) + { + var eMarkerStart = this._GetSelectionMarkerTag( true ) ; + var eMarkerEnd = this._GetSelectionMarkerTag( false ) ; + + if ( !eMarkerStart && !eMarkerEnd ) + { + this._Range.setStart( this.Window.document.body, 0 ) ; + this._UpdateElementInfo() ; + return ; + } + + // Set the start boundary. + this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ; + eMarkerStart.parentNode.removeChild( eMarkerStart ) ; + + // Set the end boundary. + this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ; + eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ; + + this._UpdateElementInfo() ; + } + else + { + var oControl = oSel.createRange().item(0) ; + + if ( oControl ) + { + this._Range.setStartBefore( oControl ) ; + this._Range.setEndAfter( oControl ) ; + this._UpdateElementInfo() ; + } + } +} + +FCKDomRange.prototype.Select = function( forceExpand ) +{ + if ( this._Range ) + this.SelectBookmark( this.CreateBookmark( true ), forceExpand ) ; +} + +// Not compatible with bookmark created with CreateBookmark2. +// The bookmark nodes will be deleted from the document. +FCKDomRange.prototype.SelectBookmark = function( bookmark, forceExpand ) +{ + var bIsCollapsed = this.CheckIsCollapsed() ; + var bIsStartMakerAlone ; + var dummySpan ; + + // Create marker tags for the start and end boundaries. + var eStartMarker = this.GetBookmarkNode( bookmark, true ) ; + + if ( !eStartMarker ) + return ; + + var eEndMarker ; + if ( !bIsCollapsed ) + eEndMarker = this.GetBookmarkNode( bookmark, false ) ; + + // Create the main range which will be used for the selection. + var oIERange = this.Window.document.body.createTextRange() ; + + // Position the range at the start boundary. + oIERange.moveToElementText( eStartMarker ) ; + oIERange.moveStart( 'character', 1 ) ; + + if ( eEndMarker ) + { + // Create a tool range for the end. + var oIERangeEnd = this.Window.document.body.createTextRange() ; + + // Position the tool range at the end. + oIERangeEnd.moveToElementText( eEndMarker ) ; + + // Move the end boundary of the main range to match the tool range. + oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ; + oIERange.moveEnd( 'character', -1 ) ; + } + else + { + bIsStartMakerAlone = ( forceExpand || !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ; + + // Append a temporary  before the selection. + // This is needed to avoid IE destroying selections inside empty + // inline elements, like (#253). + // It is also needed when placing the selection right after an inline + // element to avoid the selection moving inside of it. + dummySpan = this.Window.document.createElement( 'span' ) ; + dummySpan.innerHTML = '' ; // Zero Width No-Break Space (U+FEFF). See #1359. + eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ; + + if ( bIsStartMakerAlone ) + { + // To expand empty blocks or line spaces after
        , we need + // instead to have any char, which will be later deleted using the + // selection. + // \ufeff = Zero Width No-Break Space (U+FEFF). See #1359. + eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ; + } + } + + if ( !this._Range ) + this._Range = this.CreateRange() ; + + // Remove the markers (reset the position, because of the changes in the DOM tree). + this._Range.setStartBefore( eStartMarker ) ; + eStartMarker.parentNode.removeChild( eStartMarker ) ; + + if ( bIsCollapsed ) + { + if ( bIsStartMakerAlone ) + { + // Move the selection start to include the temporary . + oIERange.moveStart( 'character', -1 ) ; + + oIERange.select() ; + + // Remove our temporary stuff. + this.Window.document.selection.clear() ; + } + else + oIERange.select() ; + + FCKDomTools.RemoveNode( dummySpan ) ; + } + else + { + this._Range.setEndBefore( eEndMarker ) ; + eEndMarker.parentNode.removeChild( eEndMarker ) ; + oIERange.select() ; + } +} + +FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart ) +{ + var doc = this.Window.document ; + var selection = doc.selection ; + + // Get a range for the start boundary. + var oRange ; + + // IE may throw an "unspecified error" on some cases (it happened when + // loading _samples/default.html), so try/catch. + try + { + oRange = selection.createRange() ; + } + catch (e) + { + return null ; + } + + // IE might take the range object to the main window instead of inside the editor iframe window. + // This is known to happen when the editor window has not been selected before (See #933). + // We need to avoid that. + if ( oRange.parentElement().document != doc ) + return null ; + + oRange.collapse( toStart === true ) ; + + // Paste a marker element at the collapsed range and get it from the DOM. + var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ; + oRange.pasteHTML( '' ) ; + + return doc.getElementById( sMarkerId ) ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrangeiterator.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrangeiterator.js new file mode 100644 index 0000000..697c0c1 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckdomrangeiterator.js @@ -0,0 +1,327 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKDomRangeIterator = function( range ) +{ + /** + * The FCKDomRange object that marks the interation boundaries. + */ + this.Range = range ; + + /** + * Indicates that
        elements must be used as paragraph boundaries. + */ + this.ForceBrBreak = false ; + + /** + * Guarantees that the iterator will always return "real" block elements. + * If "false", elements like
      1. , and are returned. If "true", a + * dedicated block element block element will be created inside those + * elements to hold the selected content. + */ + this.EnforceRealBlocks = false ; +} + +FCKDomRangeIterator.CreateFromSelection = function( targetWindow ) +{ + var range = new FCKDomRange( targetWindow ) ; + range.MoveToSelection() ; + return new FCKDomRangeIterator( range ) ; +} + +FCKDomRangeIterator.prototype = +{ + /** + * Get the next paragraph element. It automatically breaks the document + * when necessary to generate block elements for the paragraphs. + */ + GetNextParagraph : function() + { + // The block element to be returned. + var block ; + + // The range object used to identify the paragraph contents. + var range ; + + // Indicated that the current element in the loop is the last one. + var isLast ; + + // Instructs to cleanup remaining BRs. + var removePreviousBr ; + var removeLastBr ; + + var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ; + + // This is the first iteration. Let's initialize it. + if ( !this._LastNode ) + { + var range = this.Range.Clone() ; + range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ; + + this._NextNode = range.GetTouchedStartNode() ; + this._LastNode = range.GetTouchedEndNode() ; + + // Let's reuse this variable. + range = null ; + } + + var currentNode = this._NextNode ; + var lastNode = this._LastNode ; + + this._NextNode = null ; + + while ( currentNode ) + { + // closeRange indicates that a paragraph boundary has been found, + // so the range can be closed. + var closeRange = false ; + + // includeNode indicates that the current node is good to be part + // of the range. By default, any non-element node is ok for it. + var includeNode = ( currentNode.nodeType != 1 ) ; + + var continueFromSibling = false ; + + // If it is an element node, let's check if it can be part of the + // range. + if ( !includeNode ) + { + var nodeName = currentNode.nodeName.toLowerCase() ; + + if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) ) + { + //
        boundaries must be part of the range. It will + // happen only if ForceBrBreak. + if ( nodeName == 'br' ) + includeNode = true ; + else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' ) + { + // If we have found an empty block, and haven't started + // the range yet, it means we must return this block. + block = currentNode ; + isLast = currentNode == lastNode ; + break ; + } + + // The range must finish right before the boundary, + // including possibly skipped empty spaces. (#1603) + if ( range ) + { + range.SetEnd( currentNode, 3, true ) ; + + // The found boundary must be set as the next one at this + // point. (#1717) + if ( nodeName != 'br' ) + this._NextNode = currentNode ; + } + + closeRange = true ; + } + else + { + // If we have child nodes, let's check them. + if ( currentNode.firstChild ) + { + // If we don't have a range yet, let's start it. + if ( !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + currentNode = currentNode.firstChild ; + continue ; + } + includeNode = true ; + } + } + else if ( currentNode.nodeType == 3 ) + { + // Ignore normal whitespaces (i.e. not including   or + // other unicode whitespaces) before/after a block node. + if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) ) + includeNode = false ; + } + + // The current node is good to be part of the range and we are + // starting a new range, initialize it first. + if ( includeNode && !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + // The last node has been found. + isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ; +// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ; + + // If we are in an element boundary, let's check if it is time + // to close the range, otherwise we include the parent within it. + if ( range && !closeRange ) + { + while ( !currentNode.nextSibling && !isLast ) + { + var parentNode = currentNode.parentNode ; + + if ( boundarySet[ parentNode.nodeName.toLowerCase() ] ) + { + closeRange = true ; + isLast = isLast || ( parentNode == lastNode ) ; + break ; + } + + currentNode = parentNode ; + includeNode = true ; + isLast = ( currentNode == lastNode ) ; + continueFromSibling = true ; + } + } + + // Now finally include the node. + if ( includeNode ) + range.SetEnd( currentNode, 4, true ) ; + + // We have found a block boundary. Let's close the range and move out of the + // loop. + if ( ( closeRange || isLast ) && range ) + { + range._UpdateElementInfo() ; + + if ( range.StartNode == range.EndNode + && range.StartNode.parentNode == range.StartBlockLimit + && range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) ) + range = null ; + else + break ; + } + + if ( isLast ) + break ; + + currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ; + } + + // Now, based on the processed range, look for (or create) the block to be returned. + if ( !block ) + { + // If no range has been found, this is the end. + if ( !range ) + { + this._NextNode = null ; + return null ; + } + + block = range.StartBlock ; + + if ( !block + && !this.EnforceRealBlocks + && range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' ) + && range.CheckStartOfBlock() + && range.CheckEndOfBlock() ) + { + block = range.StartBlockLimit ; + } + else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) ) + { + // Create the fixed block. + block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ; + + // Move the contents of the temporary range to the fixed block. + range.ExtractContents().AppendTo( block ) ; + FCKDomTools.TrimNode( block ) ; + + // Insert the fixed block into the DOM. + range.InsertNode( block ) ; + + removePreviousBr = true ; + removeLastBr = true ; + } + else if ( block.nodeName.toLowerCase() != 'li' ) + { + // If the range doesn't includes the entire contents of the + // block, we must split it, isolating the range in a dedicated + // block. + if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() ) + { + // The resulting block will be a clone of the current one. + block = block.cloneNode( false ) ; + + // Extract the range contents, moving it to the new block. + range.ExtractContents().AppendTo( block ) ; + FCKDomTools.TrimNode( block ) ; + + // Split the block. At this point, the range will be in the + // right position for our intents. + var splitInfo = range.SplitBlock() ; + + removePreviousBr = !splitInfo.WasStartOfBlock ; + removeLastBr = !splitInfo.WasEndOfBlock ; + + // Insert the new block into the DOM. + range.InsertNode( block ) ; + } + } + else if ( !isLast ) + { + // LIs are returned as is, with all their children (due to the + // nested lists). But, the next node is the node right after + // the current range, which could be an
      2. child (nested + // lists) or the next sibling
      3. . + + this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ; + return block ; + } + } + + if ( removePreviousBr ) + { + var previousSibling = block.previousSibling ; + if ( previousSibling && previousSibling.nodeType == 1 ) + { + if ( previousSibling.nodeName.toLowerCase() == 'br' ) + previousSibling.parentNode.removeChild( previousSibling ) ; + else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) ) + previousSibling.removeChild( previousSibling.lastChild ) ; + } + } + + if ( removeLastBr ) + { + var lastChild = block.lastChild ; + if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' ) + block.removeChild( lastChild ) ; + } + + // Get a reference for the next element. This is important because the + // above block can be removed or changed, so we can rely on it for the + // next interation. + if ( !this._NextNode ) + this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ; + + return block ; + } +} ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckeditingarea.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckeditingarea.js new file mode 100644 index 0000000..6998bbe --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckeditingarea.js @@ -0,0 +1,362 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKEditingArea Class: renders an editable area. + */ + +/** + * @constructor + * @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted. + */ +var FCKEditingArea = function( targetElement ) +{ + this.TargetElement = targetElement ; + this.Mode = FCK_EDITMODE_WYSIWYG ; + + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ; +} + + +/** + * @param {String} html The complete HTML for the page, including DOCTYPE and the tag. + */ +FCKEditingArea.prototype.Start = function( html, secondCall ) +{ + var eTargetElement = this.TargetElement ; + var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ; + + // Remove all child nodes from the target. + while( eTargetElement.firstChild ) + eTargetElement.removeChild( eTargetElement.firstChild ) ; + + if ( this.Mode == FCK_EDITMODE_WYSIWYG ) + { + // For FF, document.domain must be set only when different, otherwhise + // we'll strangely have "Permission denied" issues. + if ( FCK_IS_CUSTOM_DOMAIN ) + html = '' + html ; + + // IE has a bug with the tag... it must have a closer, + // otherwise the all successive tags will be set as children nodes of the . + if ( FCKBrowserInfo.IsIE ) + html = html.replace( /(]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1>' ) ; + else if ( !secondCall ) + { + // Gecko moves some tags out of the body to the head, so we must use + // innerHTML to set the body contents (SF BUG 1526154). + + // Extract the BODY contents from the html. + var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ; + var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ; + + if ( oMatchBefore && oMatchAfter ) + { + var sBody = html.substr( oMatchBefore[1].length, + html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ; // This is the BODY tag contents. + + html = + oMatchBefore[1] + // This is the HTML until the tag, inclusive. + ' ' + + oMatchAfter[1] ; // This is the HTML from the tag, inclusive. + + // If nothing in the body, place a BOGUS tag so the cursor will appear. + if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) ) + sBody = '
        ' ; + + this._BodyHTML = sBody ; + + } + else + this._BodyHTML = html ; // Invalid HTML input. + } + + // Create the editing area IFRAME. + var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ; + + // IE: Avoid JavaScript errors thrown by the editing are source (like tags events). + // See #1055. + var sOverrideError = '' ; + + oIFrame.frameBorder = 0 ; + oIFrame.width = oIFrame.height = '100%' ; + + if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE ) + { + window._FCKHtmlToLoad = sOverrideError + html ; + oIFrame.src = 'javascript:void( (function(){' + + 'document.open() ;' + + 'document.domain="' + document.domain + '" ;' + + 'document.write( window.parent._FCKHtmlToLoad );' + + 'document.close() ;' + + 'window.parent._FCKHtmlToLoad = null ;' + + '})() )' ; + } + else if ( !FCKBrowserInfo.IsGecko ) + { + // Firefox will render the tables inside the body in Quirks mode if the + // source of the iframe is set to javascript. see #515 + oIFrame.src = 'javascript:void(0)' ; + } + + // Append the new IFRAME to the target. For IE, it must be done after + // setting the "src", to avoid the "secure/unsecure" message under HTTPS. + eTargetElement.appendChild( oIFrame ) ; + + // Get the window and document objects used to interact with the newly created IFRAME. + this.Window = oIFrame.contentWindow ; + + // IE: Avoid JavaScript errors thrown by the editing are source (like tags events). + // TODO: This error handler is not being fired. + // this.Window.onerror = function() { alert( 'Error!' ) ; return true ; } + + if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE ) + { + var oDoc = this.Window.document ; + + oDoc.open() ; + oDoc.write( sOverrideError + html ) ; + oDoc.close() ; + } + + if ( FCKBrowserInfo.IsAIR ) + FCKAdobeAIR.EditingArea_Start( oDoc, html ) ; + + // Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it + // will magically work. + if ( FCKBrowserInfo.IsGecko10 && !secondCall ) + { + this.Start( html, true ) ; + return ; + } + + if ( oIFrame.readyState && oIFrame.readyState != 'completed' ) + { + var editArea = this ; + ( oIFrame.onreadystatechange = function() + { + if ( oIFrame.readyState == 'complete' ) + { + oIFrame.onreadystatechange = null ; + editArea.Window._FCKEditingArea = editArea ; + FCKEditingArea_CompleteStart.call( editArea.Window ) ; + } + // It happened that IE changed the state to "complete" after the + // "if" and before the "onreadystatechange" assignement, making we + // lost the event call, so we do a manual call just to be sure. + } )() ; + } + else + { + this.Window._FCKEditingArea = this ; + + // FF 1.0.x is buggy... we must wait a lot to enable editing because + // sometimes the content simply disappears, for example when pasting + // "bla1!!bla2" in the source and then switching + // back to design. + if ( FCKBrowserInfo.IsGecko10 ) + this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ; + else + FCKEditingArea_CompleteStart.call( this.Window ) ; + } + } + else + { + var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ; + eTextarea.className = 'SourceField' ; + eTextarea.dir = 'ltr' ; + FCKDomTools.SetElementStyles( eTextarea, + { + width : '100%', + height : '100%', + border : 'none', + resize : 'none', + outline : 'none' + } ) ; + eTargetElement.appendChild( eTextarea ) ; + + eTextarea.value = html ; + + // Fire the "OnLoad" event. + FCKTools.RunFunction( this.OnLoad ) ; + } +} + +// "this" here is FCKEditingArea.Window +function FCKEditingArea_CompleteStart() +{ + // On Firefox, the DOM takes a little to become available. So we must wait for it in a loop. + if ( !this.document.body ) + { + this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ; + return ; + } + + var oEditorArea = this._FCKEditingArea ; + + // Save this reference to be re-used later. + oEditorArea.Document = oEditorArea.Window.document ; + + oEditorArea.MakeEditable() ; + + // Fire the "OnLoad" event. + FCKTools.RunFunction( oEditorArea.OnLoad ) ; +} + +FCKEditingArea.prototype.MakeEditable = function() +{ + var oDoc = this.Document ; + + if ( FCKBrowserInfo.IsIE ) + { + // Kludge for #141 and #523 + oDoc.body.disabled = true ; + oDoc.body.contentEditable = true ; + oDoc.body.removeAttribute( "disabled" ) ; + + /* The following commands don't throw errors, but have no effect. + oDoc.execCommand( 'AutoDetect', false, false ) ; + oDoc.execCommand( 'KeepSelection', false, true ) ; + */ + } + else + { + try + { + // Disable Firefox 2 Spell Checker. + oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ; + + if ( this._BodyHTML ) + { + oDoc.body.innerHTML = this._BodyHTML ; + this._BodyHTML = null ; + } + + oDoc.designMode = 'on' ; + + // Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez) + oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ; + + // Disable the standard table editing features of Firefox. + oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ; + } + catch (e) + { + // In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception + // So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is visible again + FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ; + } + + } +} + +// This function processes the notifications of the DOM Mutation event on the document +// We use it to know that the document will be ready to be editable again (or we hope so) +function FCKEditingArea_Document_AttributeNodeModified( evt ) +{ + var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ; + + // We want to run our function after the events no longer fire, so we can know that it's a stable situation + if ( editingArea._timer ) + window.clearTimeout( editingArea._timer ) ; + + editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ; +} + +// This function ideally should be called after the document is visible, it does clean up of the +// mutation tracking and tries again to make the area editable. +function FCKEditingArea_MakeEditableByMutation() +{ + // Clean up + delete this._timer ; + // Now we don't want to keep on getting this event + FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ; + // Let's try now to set the editing area editable + // If it fails it will set up the Mutation Listener again automatically + this.MakeEditable() ; +} + +FCKEditingArea.prototype.Focus = function() +{ + try + { + if ( this.Mode == FCK_EDITMODE_WYSIWYG ) + { + if ( FCKBrowserInfo.IsIE ) + this._FocusIE() ; + else + this.Window.focus() ; + } + else + { + var oDoc = FCKTools.GetElementDocument( this.Textarea ) ; + if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea ) + return ; + + this.Textarea.focus() ; + } + } + catch(e) {} +} + +FCKEditingArea.prototype._FocusIE = function() +{ + // In IE it can happen that the document is in theory focused but the + // active element is outside of it. + this.Document.body.setActive() ; + + this.Window.focus() ; + + // Kludge for #141... yet more code to workaround IE bugs + var range = this.Document.selection.createRange() ; + + var parentNode = range.parentElement() ; + var parentTag = parentNode.nodeName.toLowerCase() ; + + // Only apply the fix when in a block, and the block is empty. + if ( parentNode.childNodes.length > 0 || + !( FCKListsLib.BlockElements[parentTag] || + FCKListsLib.NonEmptyBlockElements[parentTag] ) ) + { + return ; + } + + // Force the selection to happen, in this way we guarantee the focus will + // be there. + range = new FCKDomRange( this.Window ) ; + range.MoveToElementEditStart( parentNode ) ; + range.Select() ; +} + +function FCKEditingArea_Cleanup() +{ + if ( this.Document ) + this.Document.body.innerHTML = "" ; + this.TargetElement = null ; + this.IFrame = null ; + this.Document = null ; + this.Textarea = null ; + + if ( this.Window ) + { + this.Window._FCKEditingArea = null ; + this.Window = null ; + } +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckelementpath.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckelementpath.js new file mode 100644 index 0000000..2bf4eb3 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckelementpath.js @@ -0,0 +1,89 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Manages the DOM ascensors element list of a specific DOM node + * (limited to body, inclusive). + */ + +var FCKElementPath = function( lastNode ) +{ + var eBlock = null ; + var eBlockLimit = null ; + + var aElements = new Array() ; + + var e = lastNode ; + while ( e ) + { + if ( e.nodeType == 1 ) + { + if ( !this.LastElement ) + this.LastElement = e ; + + var sElementName = e.nodeName.toLowerCase() ; + if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' ) + sElementName = e.scopeName.toLowerCase() + ':' + sElementName ; + + if ( !eBlockLimit ) + { + if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null ) + eBlock = e ; + + if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null ) + { + // DIV is considered the Block, if no block is available (#525) + // and if it doesn't contain other blocks. + if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) ) + eBlock = e ; + else + eBlockLimit = e ; + } + } + + aElements.push( e ) ; + + if ( sElementName == 'body' ) + break ; + } + e = e.parentNode ; + } + + this.Block = eBlock ; + this.BlockLimit = eBlockLimit ; + this.Elements = aElements ; +} + +/** + * Check if an element contains any block element. + */ +FCKElementPath._CheckHasBlock = function( element ) +{ + var childNodes = element.childNodes ; + + for ( var i = 0, count = childNodes.length ; i < count ; i++ ) + { + var child = childNodes[i] ; + + if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] ) + return true ; + } + + return false ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckenterkey.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckenterkey.js new file mode 100644 index 0000000..0c8badc --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckenterkey.js @@ -0,0 +1,667 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Controls the [Enter] keystroke behavior in a document. + */ + +/* + * Constructor. + * @targetDocument : the target document. + * @enterMode : the behavior for the keystroke. + * May be "p", "div", "br". Default is "p". + * @shiftEnterMode : the behavior for the + keystroke. + * May be "p", "div", "br". Defaults to "br". + */ +var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces ) +{ + this.Window = targetWindow ; + this.EnterMode = enterMode || 'p' ; + this.ShiftEnterMode = shiftEnterMode || 'br' ; + + // Setup the Keystroke Handler. + var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ; + oKeystrokeHandler._EnterKey = this ; + oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ; + + oKeystrokeHandler.SetKeystrokes( [ + [ 13 , 'Enter' ], + [ SHIFT + 13, 'ShiftEnter' ], + [ 9 , 'Tab' ], + [ 8 , 'Backspace' ], + [ CTRL + 8 , 'CtrlBackspace' ], + [ 46 , 'Delete' ] + ] ) ; + + if ( tabSpaces > 0 ) + { + this.TabText = '' ; + while ( tabSpaces-- > 0 ) + this.TabText += '\xa0' ; + } + + oKeystrokeHandler.AttachToElement( targetWindow.document ) ; +} + + +function FCKEnterKey_OnKeystroke( keyCombination, keystrokeValue ) +{ + var oEnterKey = this._EnterKey ; + + try + { + switch ( keystrokeValue ) + { + case 'Enter' : + return oEnterKey.DoEnter() ; + break ; + case 'ShiftEnter' : + return oEnterKey.DoShiftEnter() ; + break ; + case 'Backspace' : + return oEnterKey.DoBackspace() ; + break ; + case 'Delete' : + return oEnterKey.DoDelete() ; + break ; + case 'Tab' : + return oEnterKey.DoTab() ; + break ; + case 'CtrlBackspace' : + return oEnterKey.DoCtrlBackspace() ; + break ; + } + } + catch (e) + { + // If for any reason we are not able to handle it, go + // ahead with the browser default behavior. + } + + return false ; +} + +/* + * Executes the key behavior. + */ +FCKEnterKey.prototype.DoEnter = function( mode, hasShift ) +{ + // Save an undo snapshot before doing anything + FCKUndo.SaveUndoStep() ; + + this._HasShift = ( hasShift === true ) ; + + var parentElement = FCKSelection.GetParentElement() ; + var parentPath = new FCKElementPath( parentElement ) ; + var sMode = mode || this.EnterMode ; + + if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' ) + return this._ExecuteEnterBr() ; + else + return this._ExecuteEnterBlock( sMode ) ; +} + +/* + * Executes the + key behavior. + */ +FCKEnterKey.prototype.DoShiftEnter = function() +{ + return this.DoEnter( this.ShiftEnterMode, true ) ; +} + +/* + * Executes the key behavior. + */ +FCKEnterKey.prototype.DoBackspace = function() +{ + var bCustom = false ; + + // Get the current selection. + var oRange = new FCKDomRange( this.Window ) ; + oRange.MoveToSelection() ; + + // Kludge for #247 + if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) ) + { + this._FixIESelectAllBug( oRange ) ; + return true ; + } + + var isCollapsed = oRange.CheckIsCollapsed() ; + + if ( !isCollapsed ) + { + // Bug #327, Backspace with an img selection would activate the default action in IE. + // Let's override that with our logic here. + if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" ) + { + var controls = this.Window.document.selection.createRange() ; + for ( var i = controls.length - 1 ; i >= 0 ; i-- ) + { + var el = controls.item( i ) ; + el.parentNode.removeChild( el ) ; + } + return true ; + } + + return false ; + } + + var oStartBlock = oRange.StartBlock ; + var oEndBlock = oRange.EndBlock ; + + // The selection boundaries must be in the same "block limit" element + if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock ) + { + if ( !isCollapsed ) + { + var bEndOfBlock = oRange.CheckEndOfBlock() ; + + oRange.DeleteContents() ; + + if ( oStartBlock != oEndBlock ) + { + oRange.SetStart(oEndBlock,1) ; + oRange.SetEnd(oEndBlock,1) ; + +// if ( bEndOfBlock ) +// oEndBlock.parentNode.removeChild( oEndBlock ) ; + } + + oRange.Select() ; + + bCustom = ( oStartBlock == oEndBlock ) ; + } + + if ( oRange.CheckStartOfBlock() ) + { + var oCurrentBlock = oRange.StartBlock ; + + var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ; + + bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ; + } + else if ( FCKBrowserInfo.IsGeckoLike ) + { + // Firefox and Opera (#1095) loose the selection when executing + // CheckStartOfBlock, so we must reselect. + oRange.Select() ; + } + } + + oRange.Release() ; + return bCustom ; +} + +FCKEnterKey.prototype.DoCtrlBackspace = function() +{ + FCKUndo.SaveUndoStep() ; + var oRange = new FCKDomRange( this.Window ) ; + oRange.MoveToSelection() ; + if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) ) + { + this._FixIESelectAllBug( oRange ) ; + return true ; + } + return false ; +} + +FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock ) +{ + var bCustom = false ; + + // We could be in a nested LI. + if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) ) + { + this._OutdentWithSelection( currentBlock, range ) ; + return true ; + } + + if ( previous && previous.nodeName.IEquals( 'LI' ) ) + { + var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ; + + while ( oNestedList ) + { + previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ; + oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ; + } + } + + if ( previous && currentBlock ) + { + // If we are in a LI, and the previous block is not an LI, we must outdent it. + if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) ) + { + this._OutdentWithSelection( currentBlock, range ) ; + return true ; + } + + // Take a reference to the parent for post processing cleanup. + var oCurrentParent = currentBlock.parentNode ; + + var sPreviousName = previous.nodeName.toLowerCase() ; + if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' ) + { + FCKDomTools.RemoveNode( previous ) ; + bCustom = true ; + } + else + { + // Remove the current block. + FCKDomTools.RemoveNode( currentBlock ) ; + + // Remove any empty tag left by the block removal. + while ( oCurrentParent.innerHTML.Trim().length == 0 ) + { + var oParent = oCurrentParent.parentNode ; + oParent.removeChild( oCurrentParent ) ; + oCurrentParent = oParent ; + } + + // Cleanup the previous and the current elements. + FCKDomTools.LTrimNode( currentBlock ) ; + FCKDomTools.RTrimNode( previous ) ; + + // Append a space to the previous. + // Maybe it is not always desirable... + // previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ; + + // Set the range to the end of the previous element and bookmark it. + range.SetStart( previous, 2, true ) ; + range.Collapse( true ) ; + var oBookmark = range.CreateBookmark( true ) ; + + // Move the contents of the block to the previous element and delete it. + // But for some block types (e.g. table), moving the children to the previous block makes no sense. + // So a check is needed. (See #1081) + if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) ) + FCKDomTools.MoveChildren( currentBlock, previous ) ; + + // Place the selection at the bookmark. + range.SelectBookmark( oBookmark ) ; + + bCustom = true ; + } + } + + return bCustom ; +} + +/* + * Executes the key behavior. + */ +FCKEnterKey.prototype.DoDelete = function() +{ + // Save an undo snapshot before doing anything + // This is to conform with the behavior seen in MS Word + FCKUndo.SaveUndoStep() ; + + // The has the same effect as the , so we have the same + // results if we just move to the next block and apply the same logic. + + var bCustom = false ; + + // Get the current selection. + var oRange = new FCKDomRange( this.Window ) ; + oRange.MoveToSelection() ; + + // Kludge for #247 + if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) ) + { + this._FixIESelectAllBug( oRange ) ; + return true ; + } + + // There is just one special case for collapsed selections at the end of a block. + if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) ) + { + var oCurrentBlock = oRange.StartBlock ; + var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' ); + + var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ], + ['UL','OL','TR'], true ) ; + + // Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't + // delete anything. + if ( eCurrentCell ) + { + var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' ); + if ( eNextCell != eCurrentCell ) + return true ; + } + + bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ; + } + + oRange.Release() ; + return bCustom ; +} + +/* + * Executes the key behavior. + */ +FCKEnterKey.prototype.DoTab = function() +{ + var oRange = new FCKDomRange( this.Window ); + oRange.MoveToSelection() ; + + // If the user pressed inside a table, we should give him the default behavior ( moving between cells ) + // instead of giving him more non-breaking spaces. (Bug #973) + var node = oRange._Range.startContainer ; + while ( node ) + { + if ( node.nodeType == 1 ) + { + var tagName = node.tagName.toLowerCase() ; + if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" ) + return false ; + else + break ; + } + node = node.parentNode ; + } + + if ( this.TabText ) + { + oRange.DeleteContents() ; + oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ; + oRange.Collapse( false ) ; + oRange.Select() ; + } + return true ; +} + +FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range ) +{ + // Get the current selection. + var oRange = range || new FCKDomRange( this.Window ) ; + + var oSplitInfo = oRange.SplitBlock( blockTag ) ; + + if ( oSplitInfo ) + { + // Get the current blocks. + var ePreviousBlock = oSplitInfo.PreviousBlock ; + var eNextBlock = oSplitInfo.NextBlock ; + + var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ; + var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ; + + // If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647) + if ( eNextBlock ) + { + if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) ) + { + FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ; + FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ; + } + } + else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) ) + { + FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ; + oRange.MoveToElementEditStart( ePreviousBlock.nextSibling ); + FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ; + } + + // If we have both the previous and next blocks, it means that the + // boundaries were on separated blocks, or none of them where on the + // block limits (start/end). + if ( !bIsStartOfBlock && !bIsEndOfBlock ) + { + // If the next block is an
      4. with another list tree as the first child + // We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420) + if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild + && eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) ) + eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ; + // Move the selection to the end block. + if ( eNextBlock ) + oRange.MoveToElementEditStart( eNextBlock ) ; + } + else + { + if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' ) + { + oRange.MoveToElementStart( ePreviousBlock ) ; + this._OutdentWithSelection( ePreviousBlock, oRange ) ; + oRange.Release() ; + return true ; + } + + var eNewBlock ; + + if ( ePreviousBlock ) + { + var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ; + + // If is a header tag, or we are in a Shift+Enter (#77), + // create a new block element (later in the code). + if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) ) + { + // Otherwise, duplicate the previous block. + eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ; + } + } + else if ( eNextBlock ) + eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ; + + if ( !eNewBlock ) + eNewBlock = this.Window.document.createElement( blockTag ) ; + + // Recreate the inline elements tree, which was available + // before the hitting enter, so the same styles will be + // available in the new block. + var elementPath = oSplitInfo.ElementPath ; + if ( elementPath ) + { + for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ ) + { + var element = elementPath.Elements[i] ; + + if ( element == elementPath.Block || element == elementPath.BlockLimit ) + break ; + + if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] ) + { + element = FCKDomTools.CloneElement( element ) ; + FCKDomTools.MoveChildren( eNewBlock, element ) ; + eNewBlock.appendChild( element ) ; + } + } + } + + if ( FCKBrowserInfo.IsGeckoLike ) + FCKTools.AppendBogusBr( eNewBlock ) ; + + oRange.InsertNode( eNewBlock ) ; + + // This is tricky, but to make the new block visible correctly + // we must select it. + if ( FCKBrowserInfo.IsIE ) + { + // Move the selection to the new block. + oRange.MoveToElementEditStart( eNewBlock ) ; + oRange.Select() ; + } + + // Move the selection to the new block. + oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ; + } + + if ( FCKBrowserInfo.IsSafari ) + FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ; + else if ( FCKBrowserInfo.IsGeckoLike ) + ( eNextBlock || eNewBlock ).scrollIntoView( false ) ; + + oRange.Select() ; + } + + // Release the resources used by the range. + oRange.Release() ; + + return true ; +} + +FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag ) +{ + // Get the current selection. + var oRange = new FCKDomRange( this.Window ) ; + oRange.MoveToSelection() ; + + // The selection boundaries must be in the same "block limit" element. + if ( oRange.StartBlockLimit == oRange.EndBlockLimit ) + { + oRange.DeleteContents() ; + + // Get the new selection (it is collapsed at this point). + oRange.MoveToSelection() ; + + var bIsStartOfBlock = oRange.CheckStartOfBlock() ; + var bIsEndOfBlock = oRange.CheckEndOfBlock() ; + + var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ; + + var bHasShift = this._HasShift ; + var bIsPre = false ; + + if ( !bHasShift && sStartBlockTag == 'LI' ) + return this._ExecuteEnterBlock( null, oRange ) ; + + // If we are at the end of a header block. + if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) ) + { + // Insert a BR after the current paragraph. + FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ; + + // The space is required by Gecko only to make the cursor blink. + if ( FCKBrowserInfo.IsGecko ) + FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ; + + // IE and Gecko have different behaviors regarding the position. + oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ; + } + else + { + var eLineBreak ; + bIsPre = sStartBlockTag.IEquals( 'pre' ) ; + if ( bIsPre ) + eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ; + else + eLineBreak = this.Window.document.createElement( 'br' ) ; + + oRange.InsertNode( eLineBreak ) ; + + // The space is required by Gecko only to make the cursor blink. + if ( FCKBrowserInfo.IsGecko ) + FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ; + + // If we are at the end of a block, we must be sure the bogus node is available in that block. + if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike ) + FCKTools.AppendBogusBr( eLineBreak.parentNode ) ; + + if ( FCKBrowserInfo.IsIE ) + oRange.SetStart( eLineBreak, 4 ) ; + else + oRange.SetStart( eLineBreak.nextSibling, 1 ) ; + + if ( ! FCKBrowserInfo.IsIE ) + { + var dummy = null ; + if ( FCKBrowserInfo.IsOpera ) + dummy = this.Window.document.createElement( 'span' ) ; + else + dummy = this.Window.document.createElement( 'br' ) ; + + eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ; + + if ( FCKBrowserInfo.IsSafari ) + FCKDomTools.ScrollIntoView( dummy, false ) ; + else + dummy.scrollIntoView( false ) ; + + dummy.parentNode.removeChild( dummy ) ; + } + } + + // This collapse guarantees the cursor will be blinking. + oRange.Collapse( true ) ; + + oRange.Select( bIsPre ) ; + } + + // Release the resources used by the range. + oRange.Release() ; + + return true ; +} + +// Outdents a LI, maintaining the selection defined on a range. +FCKEnterKey.prototype._OutdentWithSelection = function( li, range ) +{ + var oBookmark = range.CreateBookmark() ; + + FCKListHandler.OutdentListItem( li ) ; + + range.MoveToBookmark( oBookmark ) ; + range.Select() ; +} + +// Is all the contents under a node included by a range? +FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node ) +{ + var startOk = false ; + var endOk = false ; + + /* + FCKDebug.Output( 'sc='+range.StartContainer.nodeName+ + ',so='+range._Range.startOffset+ + ',ec='+range.EndContainer.nodeName+ + ',eo='+range._Range.endOffset ) ; + */ + if ( range.StartContainer == node || range.StartContainer == node.firstChild ) + startOk = ( range._Range.startOffset == 0 ) ; + + if ( range.EndContainer == node || range.EndContainer == node.lastChild ) + { + var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ; + endOk = ( range._Range.endOffset == nodeLength ) ; + } + + return startOk && endOk ; +} + +// Kludge for #247 +FCKEnterKey.prototype._FixIESelectAllBug = function( range ) +{ + var doc = this.Window.document ; + doc.body.innerHTML = '' ; + var editBlock ; + if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) ) + { + editBlock = doc.createElement( FCKConfig.EnterMode ) ; + doc.body.appendChild( editBlock ) ; + } + else + editBlock = doc.body ; + + range.MoveToNodeContents( editBlock ) ; + range.Collapse( true ) ; + range.Select() ; + range.Release() ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckevents.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckevents.js new file mode 100644 index 0000000..ef2e10f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckevents.js @@ -0,0 +1,71 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKEvents Class: used to handle events is a advanced way. + */ + +var FCKEvents = function( eventsOwner ) +{ + this.Owner = eventsOwner ; + this._RegisteredEvents = new Object() ; +} + +FCKEvents.prototype.AttachEvent = function( eventName, functionPointer ) +{ + var aTargets ; + + if ( !( aTargets = this._RegisteredEvents[ eventName ] ) ) + this._RegisteredEvents[ eventName ] = [ functionPointer ] ; + else + { + // Check that the event handler isn't already registered with the same listener + // It doesn't detect function pointers belonging to an object (at least in Gecko) + if ( aTargets.IndexOf( functionPointer ) == -1 ) + aTargets.push( functionPointer ) ; + } +} + +FCKEvents.prototype.FireEvent = function( eventName, params ) +{ + var bReturnValue = true ; + + var oCalls = this._RegisteredEvents[ eventName ] ; + + if ( oCalls ) + { + for ( var i = 0 ; i < oCalls.length ; i++ ) + { + try + { + bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ; + } + catch(e) + { + // Ignore the following error. It may happen if pointing to a + // script not anymore available (#934): + // -2146823277 = Can't execute code from a freed script + if ( e.number != -2146823277 ) + throw e ; + } + } + } + + return bReturnValue ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckhtmliterator.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckhtmliterator.js new file mode 100644 index 0000000..9f184b7 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckhtmliterator.js @@ -0,0 +1,142 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKHtmlIterator = function( source ) +{ + this._sourceHtml = source ; +} +FCKHtmlIterator.prototype = +{ + Next : function() + { + var sourceHtml = this._sourceHtml ; + if ( sourceHtml == null ) + return null ; + + var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ; + var isTag = false ; + var value = "" ; + if ( match ) + { + if ( match.index > 0 ) + { + value = sourceHtml.substr( 0, match.index ) ; + this._sourceHtml = sourceHtml.substr( match.index ) ; + } + else + { + isTag = true ; + value = match[0] ; + this._sourceHtml = sourceHtml.substr( match[0].length ) ; + } + } + else + { + value = sourceHtml ; + this._sourceHtml = null ; + } + return { 'isTag' : isTag, 'value' : value } ; + }, + + Each : function( func ) + { + var chunk ; + while ( ( chunk = this.Next() ) ) + func( chunk.isTag, chunk.value ) ; + } +} ; +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKHtmlIterator = function( source ) +{ + this._sourceHtml = source ; +} +FCKHtmlIterator.prototype = +{ + Next : function() + { + var sourceHtml = this._sourceHtml ; + if ( sourceHtml == null ) + return null ; + + var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ; + var isTag = false ; + var value = "" ; + if ( match ) + { + if ( match.index > 0 ) + { + value = sourceHtml.substr( 0, match.index ) ; + this._sourceHtml = sourceHtml.substr( match.index ) ; + } + else + { + isTag = true ; + value = match[0] ; + this._sourceHtml = sourceHtml.substr( match[0].length ) ; + } + } + else + { + value = sourceHtml ; + this._sourceHtml = null ; + } + return { 'isTag' : isTag, 'value' : value } ; + }, + + Each : function( func ) + { + var chunk ; + while ( ( chunk = this.Next() ) ) + func( chunk.isTag, chunk.value ) ; + } +} ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckicon.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckicon.js new file mode 100644 index 0000000..89719f6 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckicon.js @@ -0,0 +1,103 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKIcon Class: renders an icon from a single image, a strip or even a + * spacer. + */ + +var FCKIcon = function( iconPathOrStripInfoArray ) +{ + var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ; + switch ( sTypeOf ) + { + case 'number' : + this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ; + this.Size = 16 ; + this.Position = iconPathOrStripInfoArray ; + break ; + + case 'undefined' : + this.Path = FCK_SPACER_PATH ; + break ; + + case 'string' : + this.Path = iconPathOrStripInfoArray ; + break ; + + default : + // It is an array in the format [ StripFilePath, IconSize, IconPosition ] + this.Path = iconPathOrStripInfoArray[0] ; + this.Size = iconPathOrStripInfoArray[1] ; + this.Position = iconPathOrStripInfoArray[2] ; + } +} + +FCKIcon.prototype.CreateIconElement = function( document ) +{ + var eIcon, eIconImage ; + + if ( this.Position ) // It is using an icons strip image. + { + var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ; + + if ( FCKBrowserInfo.IsIE ) + { + //
        + + eIcon = document.createElement( 'DIV' ) ; + + eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; + eIconImage.src = this.Path ; + eIconImage.style.top = sPos ; + } + else + { + // + + eIcon = document.createElement( 'IMG' ) ; + eIcon.src = FCK_SPACER_PATH ; + eIcon.style.backgroundPosition = '0px ' + sPos ; + eIcon.style.backgroundImage = 'url("' + this.Path + '")' ; + } + } + else // It is using a single icon image. + { + if ( FCKBrowserInfo.IsIE ) + { + // IE makes the button 1px higher if using the directly, so we + // are changing to the
        system to clip the image correctly. + eIcon = document.createElement( 'DIV' ) ; + + eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; + eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ; + } + else + { + // This is not working well with IE. See notes above. + // + eIcon = document.createElement( 'IMG' ) ; + eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ; + } + } + + eIcon.className = 'TB_Button_Image' ; + + return eIcon ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckiecleanup.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckiecleanup.js new file mode 100644 index 0000000..414da9d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckiecleanup.js @@ -0,0 +1,68 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKIECleanup Class: a generic class used as a tool to remove IE leaks. + */ + +var FCKIECleanup = function( attachWindow ) +{ + // If the attachWindow already have a cleanup object, just use that one. + if ( attachWindow._FCKCleanupObj ) + this.Items = attachWindow._FCKCleanupObj.Items ; + else + { + this.Items = new Array() ; + + attachWindow._FCKCleanupObj = this ; + FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ; +// attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ; + } +} + +FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction ) +{ + this.Items.push( [ dirtyItem, cleanupFunction ] ) ; +} + +function FCKIECleanup_Cleanup() +{ + if ( !this._FCKCleanupObj || !window.FCKUnloadFlag ) + return ; + + var aItems = this._FCKCleanupObj.Items ; + + while ( aItems.length > 0 ) + { + + // It is important to remove from the end to the beginning (pop()), + // because of the order things get created in the editor. In the code, + // elements in deeper position in the DOM are placed at the end of the + // cleanup function, so we must cleanup then first, otherwise IE could + // throw some crazy memory errors (IE bug). + var oItem = aItems.pop() ; + if ( oItem ) + oItem[1].call( oItem[0] ) ; + } + + this._FCKCleanupObj = null ; + + if ( CollectGarbage ) + CollectGarbage() ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckimagepreloader.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckimagepreloader.js new file mode 100644 index 0000000..92fd305 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckimagepreloader.js @@ -0,0 +1,64 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Preload a list of images, firing an event when complete. + */ + +var FCKImagePreloader = function() +{ + this._Images = new Array() ; +} + +FCKImagePreloader.prototype = +{ + AddImages : function( images ) + { + if ( typeof( images ) == 'string' ) + images = images.split( ';' ) ; + + this._Images = this._Images.concat( images ) ; + }, + + Start : function() + { + var aImages = this._Images ; + this._PreloadCount = aImages.length ; + + for ( var i = 0 ; i < aImages.length ; i++ ) + { + var eImg = document.createElement( 'img' ) ; + FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ; + FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ; + eImg.src = aImages[i] ; + + _FCKImagePreloader_ImageCache.push( eImg ) ; + } + } +}; + +// All preloaded images must be placed in a global array, otherwise the preload +// magic will not happen. +var _FCKImagePreloader_ImageCache = new Array() ; + +function _FCKImagePreloader_OnImage( ev, imagePreloader ) +{ + if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete ) + imagePreloader.OnComplete() ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckkeystrokehandler.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckkeystrokehandler.js new file mode 100644 index 0000000..31c341b --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckkeystrokehandler.js @@ -0,0 +1,141 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Control keyboard keystroke combinations. + */ + +var FCKKeystrokeHandler = function( cancelCtrlDefaults ) +{ + this.Keystrokes = new Object() ; + this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ; +} + +/* + * Listen to keystroke events in an element or DOM document object. + * @target: The element or document to listen to keystroke events. + */ +FCKKeystrokeHandler.prototype.AttachToElement = function( target ) +{ + // For newer browsers, it is enough to listen to the keydown event only. + // Some browsers instead, don't cancel key events in the keydown, but in the + // keypress. So we must do a longer trip in those cases. + FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ; + if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) ) + FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ; +} + +/* + * Sets a list of keystrokes. It can receive either a single array or "n" + * arguments, each one being an array of 1 or 2 elemenst. The first element + * is the keystroke combination, and the second is the value to assign to it. + * If the second element is missing, the keystroke definition is removed. + */ +FCKKeystrokeHandler.prototype.SetKeystrokes = function() +{ + // Look through the arguments. + for ( var i = 0 ; i < arguments.length ; i++ ) + { + var keyDef = arguments[i] ; + + // If the configuration for the keystrokes is missing some element or has any extra comma + // this item won't be valid, so skip it and keep on processing. + if ( !keyDef ) + continue ; + + if ( typeof( keyDef[0] ) == 'object' ) // It is an array with arrays defining the keystrokes. + this.SetKeystrokes.apply( this, keyDef ) ; + else + { + if ( keyDef.length == 1 ) // If it has only one element, remove the keystroke. + delete this.Keystrokes[ keyDef[0] ] ; + else // Otherwise add it. + this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ; + } + } +} + +function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler ) +{ + // Get the key code. + var keystroke = ev.keyCode || ev.which ; + + // Combine it with the CTRL, SHIFT and ALT states. + var keyModifiers = 0 ; + + if ( ev.ctrlKey || ev.metaKey ) + keyModifiers += CTRL ; + + if ( ev.shiftKey ) + keyModifiers += SHIFT ; + + if ( ev.altKey ) + keyModifiers += ALT ; + + var keyCombination = keystroke + keyModifiers ; + + var cancelIt = keystrokeHandler._CancelIt = false ; + + // Look for its definition availability. + var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ; + +// FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ; + + // If the keystroke is defined + if ( keystrokeValue ) + { + // If the keystroke has been explicitly set to "true" OR calling the + // "OnKeystroke" event, it doesn't return "true", the default behavior + // must be preserved. + if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) ) + return true ; + + cancelIt = true ; + } + + // By default, it will cancel all combinations with the CTRL key only (except positioning keys). + if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) ) + { + keystrokeHandler._CancelIt = true ; + + if ( ev.preventDefault ) + return ev.preventDefault() ; + + ev.returnValue = false ; + ev.cancelBubble = true ; + return false ; + } + + return true ; +} + +function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler ) +{ + if ( keystrokeHandler._CancelIt ) + { +// FCKDebug.Output( 'KeyPress Cancel', 'Red') ; + + if ( ev.preventDefault ) + return ev.preventDefault() ; + + return false ; + } + + return true ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublock.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublock.js new file mode 100644 index 0000000..1cd710d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublock.js @@ -0,0 +1,153 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Renders a list of menu items. + */ + +var FCKMenuBlock = function() +{ + this._Items = new Array() ; +} + + +FCKMenuBlock.prototype.Count = function() +{ + return this._Items.length ; +} + +FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) +{ + var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; + + oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ; + oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ; + + this._Items.push( oItem ) ; + + return oItem ; +} + +FCKMenuBlock.prototype.AddSeparator = function() +{ + this._Items.push( new FCKMenuSeparator() ) ; +} + +FCKMenuBlock.prototype.RemoveAllItems = function() +{ + this._Items = new Array() ; + + var eItemsTable = this._ItemsTable ; + if ( eItemsTable ) + { + while ( eItemsTable.rows.length > 0 ) + eItemsTable.deleteRow( 0 ) ; + } +} + +FCKMenuBlock.prototype.Create = function( parentElement ) +{ + if ( !this._ItemsTable ) + { + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ; + + this._Window = FCKTools.GetElementWindow( parentElement ) ; + + var oDoc = FCKTools.GetElementDocument( parentElement ) ; + + var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ; + eTable.cellPadding = 0 ; + eTable.cellSpacing = 0 ; + + FCKTools.DisableSelection( eTable ) ; + + var oMainElement = eTable.insertRow(-1).insertCell(-1) ; + oMainElement.className = 'MN_Menu' ; + + var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ; + eItemsTable.cellPadding = 0 ; + eItemsTable.cellSpacing = 0 ; + } + + for ( var i = 0 ; i < this._Items.length ; i++ ) + this._Items[i].Create( this._ItemsTable ) ; +} + +/* Events */ + +function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock ) +{ + if ( menuBlock.Hide ) + menuBlock.Hide() ; + + FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ; +} + +function FCKMenuBlock_Item_OnActivate( menuBlock ) +{ + var oActiveItem = menuBlock._ActiveItem ; + + if ( oActiveItem && oActiveItem != this ) + { + // Set the focus to this menu block window (to fire OnBlur on opened panels). + if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu ) + { + menuBlock._Window.focus() ; + + // Due to the event model provided by Opera, we need to set + // HasFocus here as the above focus() call will not fire the focus + // event in the panel immediately (#1200). + menuBlock.Panel.HasFocus = true ; + } + + oActiveItem.Deactivate() ; + } + + menuBlock._ActiveItem = this ; +} + +function FCKMenuBlock_Cleanup() +{ + this._Window = null ; + this._ItemsTable = null ; +} + +// ################# // + +var FCKMenuSeparator = function() +{} + +FCKMenuSeparator.prototype.Create = function( parentTable ) +{ + var oDoc = FCKTools.GetElementDocument( parentTable ) ; + + var r = parentTable.insertRow(-1) ; + + var eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator MN_Icon' ; + + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator' ; + eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; + + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator' ; + eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublockpanel.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublockpanel.js new file mode 100644 index 0000000..9dbc480 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenublockpanel.js @@ -0,0 +1,54 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class is a menu block that behaves like a panel. It's a mix of the + * FCKMenuBlock and FCKPanel classes. + */ + +var FCKMenuBlockPanel = function() +{ + // Call the "base" constructor. + FCKMenuBlock.call( this ) ; +} + +FCKMenuBlockPanel.prototype = new FCKMenuBlock() ; + + +// Override the create method. +FCKMenuBlockPanel.prototype.Create = function() +{ + var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; + + // Call the "base" implementation. + FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ; +} + +FCKMenuBlockPanel.prototype.Show = function( x, y, relElement ) +{ + if ( !this.Panel.CheckIsOpened() ) + this.Panel.Show( x, y, relElement ) ; +} + +FCKMenuBlockPanel.prototype.Hide = function() +{ + if ( this.Panel.CheckIsOpened() ) + this.Panel.Hide() ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenuitem.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenuitem.js new file mode 100644 index 0000000..038146d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckmenuitem.js @@ -0,0 +1,161 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Defines and renders a menu items in a menu block. + */ + +var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled, customData ) +{ + this.Name = name ; + this.Label = label || name ; + this.IsDisabled = isDisabled ; + + this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ; + + this.SubMenu = new FCKMenuBlockPanel() ; + this.SubMenu.Parent = parentMenuBlock ; + this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ; + this.CustomData = customData ; + + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ; +} + + +FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) +{ + this.HasSubMenu = true ; + return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; +} + +FCKMenuItem.prototype.AddSeparator = function() +{ + this.SubMenu.AddSeparator() ; +} + +FCKMenuItem.prototype.Create = function( parentTable ) +{ + var bHasSubMenu = this.HasSubMenu ; + + var oDoc = FCKTools.GetElementDocument( parentTable ) ; + + // Add a row in the table to hold the menu item. + var r = this.MainElement = parentTable.insertRow(-1) ; + r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ; + + // Set the row behavior. + if ( !this.IsDisabled ) + { + FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ; + FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ; + + if ( !bHasSubMenu ) + FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ; + } + + // Create the icon cell. + var eCell = r.insertCell(-1) ; + eCell.className = 'MN_Icon' ; + eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ; + + // Create the label cell. + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Label' ; + eCell.noWrap = true ; + eCell.appendChild( oDoc.createTextNode( this.Label ) ) ; + + // Create the arrow cell and setup the sub menu panel (if needed). + eCell = r.insertCell(-1) ; + if ( bHasSubMenu ) + { + eCell.className = 'MN_Arrow' ; + + // The arrow is a fixed size image. + var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ; + eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ; + eArrowImg.width = 4 ; + eArrowImg.height = 7 ; + + this.SubMenu.Create() ; + this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ; + } +} + +FCKMenuItem.prototype.Activate = function() +{ + this.MainElement.className = 'MN_Item_Over' ; + + if ( this.HasSubMenu ) + { + // Show the child menu block. The ( +2, -2 ) correction is done because + // of the padding in the skin. It is not a good solution because one + // could change the skin and so the final result would not be accurate. + // For now it is ok because we are controlling the skin. + this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ; + } + + FCKTools.RunFunction( this.OnActivate, this ) ; +} + +FCKMenuItem.prototype.Deactivate = function() +{ + this.MainElement.className = 'MN_Item' ; + + if ( this.HasSubMenu ) + this.SubMenu.Hide() ; +} + +/* Events */ + +function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem ) +{ + FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ; +} + +function FCKMenuItem_SubMenu_OnHide( menuItem ) +{ + menuItem.Deactivate() ; +} + +function FCKMenuItem_OnClick( ev, menuItem ) +{ + if ( menuItem.HasSubMenu ) + menuItem.Activate() ; + else + { + menuItem.Deactivate() ; + FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ; + } +} + +function FCKMenuItem_OnMouseOver( ev, menuItem ) +{ + menuItem.Activate() ; +} + +function FCKMenuItem_OnMouseOut( ev, menuItem ) +{ + menuItem.Deactivate() ; +} + +function FCKMenuItem_Cleanup() +{ + this.MainElement = null ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckpanel.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckpanel.js new file mode 100644 index 0000000..263dcf0 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckpanel.js @@ -0,0 +1,385 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Component that creates floating panels. It is used by many + * other components, like the toolbar items, context menu, etc... + */ + +var FCKPanel = function( parentWindow ) +{ + this.IsRTL = ( FCKLang.Dir == 'rtl' ) ; + this.IsContextMenu = false ; + this._LockCounter = 0 ; + + this._Window = parentWindow || window ; + + var oDocument ; + + if ( FCKBrowserInfo.IsIE ) + { + // Create the Popup that will hold the panel. + // The popup has to be created before playing with domain hacks, see #1666. + this._Popup = this._Window.createPopup() ; + + // this._Window cannot be accessed while playing with domain hacks, but local variable is ok. + // See #1666. + var pDoc = this._Window.document ; + + // This is a trick to IE6 (not IE7). The original domain must be set + // before creating the popup, so we are able to take a refence to the + // document inside of it, and the set the proper domain for it. (#123) + if ( FCK_IS_CUSTOM_DOMAIN && !FCKBrowserInfo.IsIE7 ) + { + pDoc.domain = FCK_ORIGINAL_DOMAIN ; + document.domain = FCK_ORIGINAL_DOMAIN ; + } + + oDocument = this.Document = this._Popup.document ; + + // Set the proper domain inside the popup. + if ( FCK_IS_CUSTOM_DOMAIN ) + { + oDocument.domain = FCK_RUNTIME_DOMAIN ; + pDoc.domain = FCK_RUNTIME_DOMAIN ; + document.domain = FCK_RUNTIME_DOMAIN ; + } + + FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ; + } + else + { + var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ; + oIFrame.src = 'javascript:void(0)' ; + oIFrame.allowTransparency = true ; + oIFrame.frameBorder = '0' ; + oIFrame.scrolling = 'no' ; + oIFrame.width = oIFrame.height = 0 ; + FCKDomTools.SetElementStyles( oIFrame, + { + position : 'absolute', + zIndex : FCKConfig.FloatingPanelsZIndex + } ) ; + + this._Window.document.body.appendChild( oIFrame ) ; + + var oIFrameWindow = oIFrame.contentWindow ; + + oDocument = this.Document = oIFrameWindow.document ; + + // Workaround for Safari 12256. Ticket #63 + var sBase = '' ; + if ( FCKBrowserInfo.IsSafari ) + sBase = '' ; + + // Initialize the IFRAME document body. + oDocument.open() ; + oDocument.write( '' + sBase + '<\/head><\/body><\/html>' ) ; + oDocument.close() ; + + if( FCKBrowserInfo.IsAIR ) + FCKAdobeAIR.Panel_Contructor( oDocument, window.document.location ) ; + + FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ; + FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ; + } + + oDocument.dir = FCKLang.Dir ; + + FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ; + + + // Create the main DIV that is used as the panel base. + this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ; + + // The "float" property must be set so Firefox calculates the size correctly. + this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ; +} + + +FCKPanel.prototype.AppendStyleSheet = function( styleSheet ) +{ + FCKTools.AppendStyleSheet( this.Document, styleSheet ) ; +} + +FCKPanel.prototype.Preload = function( x, y, relElement ) +{ + // The offsetWidth and offsetHeight properties are not available if the + // element is not visible. So we must "show" the popup with no size to + // be able to use that values in the second call (IE only). + if ( this._Popup ) + this._Popup.show( x, y, 0, 0, relElement ) ; +} + +FCKPanel.prototype.Show = function( x, y, relElement, width, height ) +{ + var iMainWidth ; + var eMainNode = this.MainNode ; + + if ( this._Popup ) + { + // The offsetWidth and offsetHeight properties are not available if the + // element is not visible. So we must "show" the popup with no size to + // be able to use that values in the second call. + this._Popup.show( x, y, 0, 0, relElement ) ; + + // The following lines must be place after the above "show", otherwise it + // doesn't has the desired effect. + FCKDomTools.SetElementStyles( eMainNode, + { + width : width ? width + 'px' : '', + height : height ? height + 'px' : '' + } ) ; + + iMainWidth = eMainNode.offsetWidth ; + + if ( this.IsRTL ) + { + if ( this.IsContextMenu ) + x = x - iMainWidth + 1 ; + else if ( relElement ) + x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ; + } + + // Second call: Show the Popup at the specified location, with the correct size. + this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ; + + if ( this.OnHide ) + { + if ( this._Timer ) + CheckPopupOnHide.call( this, true ) ; + + this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ; + } + } + else + { + // Do not fire OnBlur while the panel is opened. + if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' ) + FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ; + + if ( this.ParentPanel ) + { + this.ParentPanel.Lock() ; + + // Due to a bug on FF3, we must ensure that the parent panel will + // blur (#1584). + FCKPanel_Window_OnBlur( null, this.ParentPanel ) ; + } + + // Toggle the iframe scrolling attribute to prevent the panel + // scrollbars from disappearing in FF Mac. (#191) + if ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) + { + this._IFrame.scrolling = '' ; + FCKTools.RunFunction( function(){ this._IFrame.scrolling = 'no'; }, this ) ; + } + + // Be sure we'll not have more than one Panel opened at the same time. + // Do not unlock focus manager here because we're displaying another floating panel + // instead of returning the editor to a "no panel" state (Bug #1514). + if ( FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel && + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel != this ) + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel.Hide( false, true ) ; + + FCKDomTools.SetElementStyles( eMainNode, + { + width : width ? width + 'px' : '', + height : height ? height + 'px' : '' + } ) ; + + iMainWidth = eMainNode.offsetWidth ; + + if ( !width ) this._IFrame.width = 1 ; + if ( !height ) this._IFrame.height = 1 ; + + // This is weird... but with Firefox, we must get the offsetWidth before + // setting the _IFrame size (which returns "0"), and then after that, + // to return the correct width. Remove the first step and it will not + // work when the editor is in RTL. + // + // The "|| eMainNode.firstChild.offsetWidth" part has been added + // for Opera compatibility (see #570). + iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ; + + // Base the popup coordinates upon the coordinates of relElement. + var oPos = FCKTools.GetDocumentPosition( this._Window, + relElement.nodeType == 9 ? + ( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) : + relElement ) ; + + // Minus the offsets provided by any positioned parent element of the panel iframe. + var positionedAncestor = FCKDomTools.GetPositionedAncestor( this._IFrame.parentNode ) ; + if ( positionedAncestor ) + { + var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ; + oPos.x -= nPos.x ; + oPos.y -= nPos.y ; + } + + if ( this.IsRTL && !this.IsContextMenu ) + x = ( x * -1 ) ; + + x += oPos.x ; + y += oPos.y ; + + if ( this.IsRTL ) + { + if ( this.IsContextMenu ) + x = x - iMainWidth + 1 ; + else if ( relElement ) + x = x + relElement.offsetWidth - iMainWidth ; + } + else + { + var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ; + var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ; + + var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ; + var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ; + + if ( ( x + iMainWidth ) > iViewPaneWidth ) + x -= x + iMainWidth - iViewPaneWidth ; + + if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight ) + y -= y + eMainNode.offsetHeight - iViewPaneHeight ; + } + + // Set the context menu DIV in the specified location. + FCKDomTools.SetElementStyles( this._IFrame, + { + left : x + 'px', + top : y + 'px' + } ) ; + + // Move the focus to the IFRAME so we catch the "onblur". + this._IFrame.contentWindow.focus() ; + this._IsOpened = true ; + + var me = this ; + this._resizeTimer = setTimeout( function() + { + var iWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ; + var iHeight = eMainNode.offsetHeight ; + me._IFrame.width = iWidth ; + me._IFrame.height = iHeight ; + + }, 0 ) ; + + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel = this ; + } + + FCKTools.RunFunction( this.OnShow, this ) ; +} + +FCKPanel.prototype.Hide = function( ignoreOnHide, ignoreFocusManagerUnlock ) +{ + if ( this._Popup ) + this._Popup.hide() ; + else + { + if ( !this._IsOpened || this._LockCounter > 0 ) + return ; + + // Enable the editor to fire the "OnBlur". + if ( typeof( FCKFocusManager ) != 'undefined' && !ignoreFocusManagerUnlock ) + FCKFocusManager.Unlock() ; + + // It is better to set the sizes to 0, otherwise Firefox would have + // rendering problems. + this._IFrame.width = this._IFrame.height = 0 ; + + this._IsOpened = false ; + + if ( this._resizeTimer ) + { + clearTimeout( this._resizeTimer ) ; + this._resizeTimer = null ; + } + + if ( this.ParentPanel ) + this.ParentPanel.Unlock() ; + + if ( !ignoreOnHide ) + FCKTools.RunFunction( this.OnHide, this ) ; + } +} + +FCKPanel.prototype.CheckIsOpened = function() +{ + if ( this._Popup ) + return this._Popup.isOpen ; + else + return this._IsOpened ; +} + +FCKPanel.prototype.CreateChildPanel = function() +{ + var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ; + + var oChildPanel = new FCKPanel( oWindow ) ; + oChildPanel.ParentPanel = this ; + + return oChildPanel ; +} + +FCKPanel.prototype.Lock = function() +{ + this._LockCounter++ ; +} + +FCKPanel.prototype.Unlock = function() +{ + if ( --this._LockCounter == 0 && !this.HasFocus ) + this.Hide() ; +} + +/* Events */ + +function FCKPanel_Window_OnFocus( e, panel ) +{ + panel.HasFocus = true ; +} + +function FCKPanel_Window_OnBlur( e, panel ) +{ + panel.HasFocus = false ; + + if ( panel._LockCounter == 0 ) + FCKTools.RunFunction( panel.Hide, panel ) ; +} + +function CheckPopupOnHide( forceHide ) +{ + if ( forceHide || !this._Popup.isOpen ) + { + window.clearInterval( this._Timer ) ; + this._Timer = null ; + + FCKTools.RunFunction( this.OnHide, this ) ; + } +} + +function FCKPanel_Cleanup() +{ + this._Popup = null ; + this._Window = null ; + this.Document = null ; + this.MainNode = null ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckplugin.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckplugin.js new file mode 100644 index 0000000..16300d1 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckplugin.js @@ -0,0 +1,56 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKPlugin Class: Represents a single plugin. + */ + +var FCKPlugin = function( name, availableLangs, basePath ) +{ + this.Name = name ; + this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ; + this.Path = this.BasePath + name + '/' ; + + if ( !availableLangs || availableLangs.length == 0 ) + this.AvailableLangs = new Array() ; + else + this.AvailableLangs = availableLangs.split(',') ; +} + +FCKPlugin.prototype.Load = function() +{ + // Load the language file, if defined. + if ( this.AvailableLangs.length > 0 ) + { + var sLang ; + + // Check if the plugin has the language file for the active language. + if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 ) + sLang = FCKLanguageManager.ActiveLanguage.Code ; + else + // Load the default language file (first one) if the current one is not available. + sLang = this.AvailableLangs[0] ; + + // Add the main plugin script. + LoadScript( this.Path + 'lang/' + sLang + '.js' ) ; + } + + // Add the main plugin script. + LoadScript( this.Path + 'fckplugin.js' ) ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckspecialcombo.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckspecialcombo.js new file mode 100644 index 0000000..7226389 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckspecialcombo.js @@ -0,0 +1,376 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKSpecialCombo Class: represents a special combo. + */ + +var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow ) +{ + // Default properties values. + this.FieldWidth = fieldWidth || 100 ; + this.PanelWidth = panelWidth || 150 ; + this.PanelMaxHeight = panelMaxHeight || 150 ; + this.Label = ' ' ; + this.Caption = caption ; + this.Tooltip = caption ; + this.Style = FCK_TOOLBARITEM_ICONTEXT ; + + this.Enabled = true ; + + this.Items = new Object() ; + + this._Panel = new FCKPanel( parentWindow || window ) ; + this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; + this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; + this._PanelBox.className = 'SC_Panel' ; + this._PanelBox.style.width = this.PanelWidth + 'px' ; + + this._PanelBox.innerHTML = '
        ' ; + + this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ; + + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ; + +// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ; +// this._Panel.Create() ; +// this._Panel.PanelDiv.className += ' SC_Panel' ; +// this._Panel.PanelDiv.innerHTML = '
        ' ; +// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ; +} + +function FCKSpecialCombo_ItemOnMouseOver() +{ + this.className += ' SC_ItemOver' ; +} + +function FCKSpecialCombo_ItemOnMouseOut() +{ + this.className = this.originalClass ; +} + +function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId ) +{ + this.className = this.originalClass ; + + specialCombo._Panel.Hide() ; + + specialCombo.SetLabel( this.FCKItemLabel ) ; + + if ( typeof( specialCombo.OnSelect ) == 'function' ) + specialCombo.OnSelect( itemId, this ) ; +} + +FCKSpecialCombo.prototype.ClearItems = function () +{ + if ( this.Items ) + this.Items = {} ; + + var itemsholder = this._ItemsHolderEl ; + while ( itemsholder.firstChild ) + itemsholder.removeChild( itemsholder.firstChild ) ; +} + +FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) +{ + //
        Bold 1
        + var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; + oDiv.className = oDiv.originalClass = 'SC_Item' ; + oDiv.innerHTML = html ; + oDiv.FCKItemLabel = label || id ; + oDiv.Selected = false ; + + // In IE, the width must be set so the borders are shown correctly when the content overflows. + if ( FCKBrowserInfo.IsIE ) + oDiv.style.width = '100%' ; + + if ( bgColor ) + oDiv.style.backgroundColor = bgColor ; + + FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ; + FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ; + FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ; + + this.Items[ id.toString().toLowerCase() ] = oDiv ; + + return oDiv ; +} + +FCKSpecialCombo.prototype.SelectItem = function( item ) +{ + if ( typeof item == 'string' ) + item = this.Items[ item.toString().toLowerCase() ] ; + + if ( item ) + { + item.className = item.originalClass = 'SC_ItemSelected' ; + item.Selected = true ; + } +} + +FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel ) +{ + for ( var id in this.Items ) + { + var oDiv = this.Items[id] ; + + if ( oDiv.FCKItemLabel == itemLabel ) + { + oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; + oDiv.Selected = true ; + + if ( setLabel ) + this.SetLabel( itemLabel ) ; + } + } +} + +FCKSpecialCombo.prototype.DeselectAll = function( clearLabel ) +{ + for ( var i in this.Items ) + { + if ( !this.Items[i] ) continue; + this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ; + this.Items[i].Selected = false ; + } + + if ( clearLabel ) + this.SetLabel( '' ) ; +} + +FCKSpecialCombo.prototype.SetLabelById = function( id ) +{ + id = id ? id.toString().toLowerCase() : '' ; + + var oDiv = this.Items[ id ] ; + this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ; +} + +FCKSpecialCombo.prototype.SetLabel = function( text ) +{ + text = ( !text || text.length == 0 ) ? ' ' : text ; + + if ( text == this.Label ) + return ; + + this.Label = text ; + + var labelEl = this._LabelEl ; + if ( labelEl ) + { + labelEl.innerHTML = text ; + + // It may happen that the label is some HTML, including tags. This + // would be a problem because when the user click on those tags, the + // combo will get the selection from the editing area. So we must + // disable any kind of selection here. + FCKTools.DisableSelection( labelEl ) ; + } +} + +FCKSpecialCombo.prototype.SetEnabled = function( isEnabled ) +{ + this.Enabled = isEnabled ; + + // In IE it can happen when the page is reloaded that _OuterTable is null, so check its existence + if ( this._OuterTable ) + this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ; +} + +FCKSpecialCombo.prototype.Create = function( targetElement ) +{ + var oDoc = FCKTools.GetElementDocument( targetElement ) ; + var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ; + eOuterTable.cellPadding = 0 ; + eOuterTable.cellSpacing = 0 ; + + eOuterTable.insertRow(-1) ; + + var sClass ; + var bShowLabel ; + + switch ( this.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + sClass = 'TB_ButtonType_Icon' ; + bShowLabel = false; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + sClass = 'TB_ButtonType_Text' ; + bShowLabel = false; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + bShowLabel = true; + break ; + } + + if ( this.Caption && this.Caption.length > 0 && bShowLabel ) + { + var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ; + oCaptionCell.innerHTML = this.Caption ; + oCaptionCell.className = 'SC_FieldCaption' ; + } + + // Create the main DIV element. + var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ; + if ( bShowLabel ) + { + oField.className = 'SC_Field' ; + oField.style.width = this.FieldWidth + 'px' ; + oField.innerHTML = '
         
        ' ; + + this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak + this._LabelEl.innerHTML = this.Label ; + } + else + { + oField.className = 'TB_Button_Off' ; + //oField.innerHTML = '' + this.Caption + '
         
        ' ; + //oField.innerHTML = '
         
        ' ; + + // Gets the correct CSS class to use for the specified style (param). + oField.innerHTML = '' + + '' + + //'' + + '' + + '' + + '' + + '' + + '' + + '' + + '
        ' + this.Caption + '
        ' ; + } + + + // Events Handlers + + FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ; + FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ; + FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ; + + FCKTools.DisableSelection( this._Panel.Document.body ) ; +} + +function FCKSpecialCombo_Cleanup() +{ + this._LabelEl = null ; + this._OuterTable = null ; + this._ItemsHolderEl = null ; + this._PanelBox = null ; + + if ( this.Items ) + { + for ( var key in this.Items ) + this.Items[key] = null ; + } +} + +function FCKSpecialCombo_OnMouseOver( ev, specialCombo ) +{ + if ( specialCombo.Enabled ) + { + switch ( specialCombo.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + this.className = 'TB_Button_On_Over'; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + this.className = 'TB_Button_On_Over'; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + this.className = 'SC_Field SC_FieldOver' ; + break ; + } + } +} + +function FCKSpecialCombo_OnMouseOut( ev, specialCombo ) +{ + switch ( specialCombo.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + this.className = 'TB_Button_Off'; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + this.className = 'TB_Button_Off'; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + this.className='SC_Field' ; + break ; + } +} + +function FCKSpecialCombo_OnClick( e, specialCombo ) +{ + // For Mozilla we must stop the event propagation to avoid it hiding + // the panel because of a click outside of it. +// if ( e ) +// { +// e.stopPropagation() ; +// FCKPanelEventHandlers.OnDocumentClick( e ) ; +// } + + if ( specialCombo.Enabled ) + { + var oPanel = specialCombo._Panel ; + var oPanelBox = specialCombo._PanelBox ; + var oItemsHolder = specialCombo._ItemsHolderEl ; + var iMaxHeight = specialCombo.PanelMaxHeight ; + + if ( specialCombo.OnBeforeClick ) + specialCombo.OnBeforeClick( specialCombo ) ; + + // This is a tricky thing. We must call the "Load" function, otherwise + // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only). + if ( FCKBrowserInfo.IsIE ) + oPanel.Preload( 0, this.offsetHeight, this ) ; + + if ( oItemsHolder.offsetHeight > iMaxHeight ) +// { + oPanelBox.style.height = iMaxHeight + 'px' ; + +// if ( FCKBrowserInfo.IsGecko ) +// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ; +// } + else + oPanelBox.style.height = '' ; + +// oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ; + + oPanel.Show( 0, this.offsetHeight, this ) ; + } + +// return false ; +} + +/* +Sample Combo Field HTML output: + +
        + + + + + + + +
         
        +
        +*/ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckstyle.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckstyle.js new file mode 100644 index 0000000..4308df0 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/classes/fckstyle.js @@ -0,0 +1,1443 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * FCKStyle Class: contains a style definition, and all methods to work with + * the style in a document. + */ + +/** + * @param {Object} styleDesc A "style descriptor" object, containing the raw + * style definition in the following format: + * '' ; + FCK._BehaviorsStyle = sStyle ; + } + + return FCK._BehaviorsStyle ; +} + +function Doc_OnMouseUp() +{ + if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' ) + { + FCK.Focus() ; + FCK.EditorWindow.event.cancelBubble = true ; + FCK.EditorWindow.event.returnValue = false ; + } +} + +function Doc_OnPaste() +{ + var body = FCK.EditorDocument.body ; + + body.detachEvent( 'onpaste', Doc_OnPaste ) ; + + var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ; + + body.attachEvent( 'onpaste', Doc_OnPaste ) ; + + return ret ; +} + +function Doc_OnDblClick() +{ + FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ; + FCK.EditorWindow.event.cancelBubble = true ; +} + +function Doc_OnSelectionChange() +{ + // Don't fire the event if no document is loaded. + if ( !FCK.IsSelectionChangeLocked && FCK.EditorDocument ) + FCK.Events.FireEvent( "OnSelectionChange" ) ; +} + +function Doc_OnDrop() +{ + if ( FCK.MouseDownFlag ) + { + FCK.MouseDownFlag = false ; + return ; + } + + if ( FCKConfig.ForcePasteAsPlainText ) + { + var evt = FCK.EditorWindow.event ; + + if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog ) + FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ; + + evt.returnValue = false ; + evt.cancelBubble = true ; + } +} + +FCK.InitializeBehaviors = function( dontReturn ) +{ + // Set the focus to the editable area when clicking in the document area. + // TODO: The cursor must be positioned at the end. + this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ; + + // Intercept pasting operations + this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ; + + // Intercept drop operations + this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ; + + // Reset the context menu. + FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ; + + this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ; + + this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ; + + // Catch cursor selection changes. + this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ; + + FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', Doc_OnMouseDown ) ; +} + +FCK.InsertHtml = function( html ) +{ + html = FCKConfig.ProtectedSource.Protect( html ) ; + html = FCK.ProtectEvents( html ) ; + html = FCK.ProtectUrls( html ) ; + html = FCK.ProtectTags( html ) ; + +// FCK.Focus() ; + FCK.EditorWindow.focus() ; + + FCKUndo.SaveUndoStep() ; + + // Gets the actual selection. + var oSel = FCKSelection.GetSelection() ; + + // Deletes the actual selection contents. + if ( oSel.type.toLowerCase() == 'control' ) + oSel.clear() ; + + // Using the following trick, any comment in the beginning of the HTML will + // be preserved. + html = '' + html ; + + // Insert the HTML. + oSel.createRange().pasteHTML( html ) ; + + // Remove the fake node + FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ; + + FCKDocumentProcessor.Process( FCK.EditorDocument ) ; + + // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call. + this.Events.FireEvent( "OnSelectionChange" ) ; +} + +FCK.SetInnerHtml = function( html ) // IE Only +{ + var oDoc = FCK.EditorDocument ; + // Using the following trick, any comment in the beginning of the HTML will + // be preserved. + oDoc.body.innerHTML = '
         
        ' + html ; + oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ; +} + +function FCK_PreloadImages() +{ + var oPreloader = new FCKImagePreloader() ; + + // Add the configured images. + oPreloader.AddImages( FCKConfig.PreloadImages ) ; + + // Add the skin icons strip. + oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ; + + oPreloader.OnComplete = LoadToolbarSetup ; + oPreloader.Start() ; +} + +// Disable the context menu in the editor (outside the editing area). +function Document_OnContextMenu() +{ + return ( event.srcElement._FCKShowContextMenu == true ) ; +} +document.oncontextmenu = Document_OnContextMenu ; + +function FCK_Cleanup() +{ + this.LinkedField = null ; + this.EditorWindow = null ; + this.EditorDocument = null ; +} + +FCK._ExecPaste = function() +{ + // As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore. + if ( FCK._PasteIsRunning ) + return true ; + + if ( FCKConfig.ForcePasteAsPlainText ) + { + FCK.PasteAsPlainText() ; + return false ; + } + + var sHTML = FCK._CheckIsPastingEnabled( true ) ; + + if ( sHTML === false ) + FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ; + else + { + if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 ) + { + var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ; + if ( re.test( sHTML ) ) + { + if ( confirm( FCKLang.PasteWordConfirm ) ) + { + FCK.PasteFromWord() ; + return false ; + } + } + } + + // Instead of inserting the retrieved HTML, let's leave the OS work for us, + // by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results. + + // Enable the semaphore to avoid a loop. + FCK._PasteIsRunning = true ; + + FCK.ExecuteNamedCommand( 'Paste' ) ; + + // Removes the semaphore. + delete FCK._PasteIsRunning ; + } + + // Let's always make a custom implementation (return false), otherwise + // the new Keyboard Handler may conflict with this code, and the CTRL+V code + // could result in a simple "V" being pasted. + return false ; +} + +FCK.PasteAsPlainText = function( forceText ) +{ + if ( !FCK._CheckIsPastingEnabled() ) + { + FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ; + return ; + } + + // Get the data available in the clipboard in text format. + var sText = null ; + if ( ! forceText ) + sText = clipboardData.getData("Text") ; + else + sText = forceText ; + + if ( sText && sText.length > 0 ) + { + // Replace the carriage returns with
        + sText = FCKTools.HTMLEncode( sText ) ; + sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ; + + var closeTagIndex = sText.search( '

        ' ) ; + var startTagIndex = sText.search( '

        ' ) ; + + if ( ( closeTagIndex != -1 && startTagIndex != -1 && closeTagIndex < startTagIndex ) + || ( closeTagIndex != -1 && startTagIndex == -1 ) ) + { + var prefix = sText.substr( 0, closeTagIndex ) ; + sText = sText.substr( closeTagIndex + 4 ) ; + this.InsertHtml( prefix ) ; + } + + // Insert the resulting data in the editor. + FCKUndo.SaveLocked = true ; + this.InsertHtml( sText ) ; + FCKUndo.SaveLocked = false ; + } +} + +FCK._CheckIsPastingEnabled = function( returnContents ) +{ + // The following seams to be the only reliable way to check is script + // pasting operations are enabled in the security settings of IE6 and IE7. + // It adds a little bit of overhead to the check, but so far that's the + // only way, mainly because of IE7. + + FCK._PasteIsEnabled = false ; + + document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ; + + // The execCommand in GetClipboardHTML will fire the "onpaste", only if the + // security settings are enabled. + var oReturn = FCK.GetClipboardHTML() ; + + document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ; + + if ( FCK._PasteIsEnabled ) + { + if ( !returnContents ) + oReturn = true ; + } + else + oReturn = false ; + + delete FCK._PasteIsEnabled ; + + return oReturn ; +} + +function FCK_CheckPasting_Listener() +{ + FCK._PasteIsEnabled = true ; +} + +FCK.GetClipboardHTML = function() +{ + var oDiv = document.getElementById( '___FCKHiddenDiv' ) ; + + if ( !oDiv ) + { + oDiv = document.createElement( 'DIV' ) ; + oDiv.id = '___FCKHiddenDiv' ; + + var oDivStyle = oDiv.style ; + oDivStyle.position = 'absolute' ; + oDivStyle.visibility = oDivStyle.overflow = 'hidden' ; + oDivStyle.width = oDivStyle.height = 1 ; + + document.body.appendChild( oDiv ) ; + } + + oDiv.innerHTML = '' ; + + var oTextRange = document.body.createTextRange() ; + oTextRange.moveToElementText( oDiv ) ; + oTextRange.execCommand( 'Paste' ) ; + + var sData = oDiv.innerHTML ; + oDiv.innerHTML = '' ; + + return sData ; +} + +FCK.CreateLink = function( url, noUndo ) +{ + // Creates the array that will be returned. It contains one or more created links (see #220). + var aCreatedLinks = new Array() ; + + // Remove any existing link in the selection. + FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ; + + if ( url.length > 0 ) + { + // If there are several images, and you try to link each one, all the images get inside the link: + // -> -> due to the call to 'CreateLink' (bug in IE) + if (FCKSelection.GetType() == 'Control') + { + // Create a link + var oLink = this.EditorDocument.createElement( 'A' ) ; + oLink.href = url ; + + // Get the selected object + var oControl = FCKSelection.GetSelectedElement() ; + // Put the link just before the object + oControl.parentNode.insertBefore(oLink, oControl) ; + // Move the object inside the link + oControl.parentNode.removeChild( oControl ) ; + oLink.appendChild( oControl ) ; + + return [ oLink ] ; + } + + // Generate a temporary name for the link. + var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ; + + // Use the internal "CreateLink" command to create the link. + FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ; + + // Look for the just create link. + var oLinks = this.EditorDocument.links ; + + for ( i = 0 ; i < oLinks.length ; i++ ) + { + var oLink = oLinks[i] ; + + // Check it this a newly created link. + // getAttribute must be used. oLink.url may cause problems with IE7 (#555). + if ( oLink.getAttribute( 'href', 2 ) == sTempUrl ) + { + var sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). + oLink.href = url ; + oLink.innerHTML = sInnerHtml ; // Restore the innerHTML. + + // If the last child is a
        move it outside the link or it + // will be too easy to select this link again #388. + var oLastChild = oLink.lastChild ; + if ( oLastChild && oLastChild.nodeName == 'BR' ) + { + // Move the BR after the link. + FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ; + } + + aCreatedLinks.push( oLink ) ; + } + } + } + + return aCreatedLinks ; +} + +function _FCK_RemoveDisabledAtt() +{ + this.removeAttribute( 'disabled' ) ; +} + +function Doc_OnMouseDown( evt ) +{ + var e = evt.srcElement ; + + // Radio buttons and checkboxes should not be allowed to be triggered in IE + // in editable mode. Otherwise the whole browser window may be locked by + // the buttons. (#1782) + if ( e.nodeName.IEquals( 'input' ) && e.type.IEquals( ['radio', 'checkbox'] ) && !e.disabled ) + { + e.disabled = true ; + FCKTools.SetTimeout( _FCK_RemoveDisabledAtt, 1, e ) ; + } +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckbrowserinfo.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckbrowserinfo.js new file mode 100644 index 0000000..fd6fe40 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckbrowserinfo.js @@ -0,0 +1,61 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Contains browser detection information. + */ + +var s = navigator.userAgent.toLowerCase() ; + +var FCKBrowserInfo = +{ + IsIE : /*@cc_on!@*/false, + IsIE7 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 7 ), + IsIE6 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 6 ), + IsGecko : s.Contains('gecko/'), + IsSafari : s.Contains(' applewebkit/'), // Read "IsWebKit" + IsOpera : !!window.opera, + IsAIR : s.Contains(' adobeair/'), + IsMac : s.Contains('macintosh') +} ; + +// Completes the browser info with further Gecko information. +(function( browserInfo ) +{ + browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ; + + if ( browserInfo.IsGecko ) + { + var geckoVersion = s.match( /gecko\/(\d+)/ )[1] ; + + // Actually "10" refers to Gecko versions before Firefox 1.5, when + // Gecko 1.8 (build 20051111) has been released. + + // Some browser (like Mozilla 1.7.13) may have a Gecko build greater + // than 20051111, so we must also check for the revision number not to + // be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111). + + // TODO: Future versions may consider the rv number only, but it is + // still to check that all Gecko based browser present the rv number. + browserInfo.IsGecko10 = ( ( geckoVersion < 20051111 ) || ( /rv:1\.7/.test(s) ) ) ; + browserInfo.IsGecko19 = /rv:1\.9/.test(s) ; + } + else + browserInfo.IsGecko10 = false ; +})(FCKBrowserInfo) ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcodeformatter.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcodeformatter.js new file mode 100644 index 0000000..8a7f152 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcodeformatter.js @@ -0,0 +1,100 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Format the HTML. + */ + +var FCKCodeFormatter = new Object() ; + +FCKCodeFormatter.Init = function() +{ + var oRegex = this.Regex = new Object() ; + + // Regex for line breaks. + oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; + oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; + + oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ; + + oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ; + + oRegex.LineSplitter = /\s*\n+\s*/g ; + + // Regex for indentation. + oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ; + oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ; + oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ; + + oRegex.ProtectedTags = /(]*>)([\s\S]*?)(<\/PRE>)/gi ; +} + +FCKCodeFormatter._ProtectData = function( outer, opener, data, closer ) +{ + return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ; +} + +FCKCodeFormatter.Format = function( html ) +{ + if ( !this.Regex ) + this.Init() ; + + // Protected content that remain untouched during the + // process go in the following array. + FCKCodeFormatter.ProtectedData = new Array() ; + + var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ; + + // Line breaks. + sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ; + sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ; + sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ; + sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ; + + // Indentation. + var sIndentation = '' ; + + var asLines = sFormatted.split( this.Regex.LineSplitter ) ; + sFormatted = '' ; + + for ( var i = 0 ; i < asLines.length ; i++ ) + { + var sLine = asLines[i] ; + + if ( sLine.length == 0 ) + continue ; + + if ( this.Regex.DecreaseIndent.test( sLine ) ) + sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ; + + sFormatted += sIndentation + sLine + '\n' ; + + if ( this.Regex.IncreaseIndent.test( sLine ) ) + sIndentation += FCKConfig.FormatIndentator ; + } + + // Now we put back the protected data. + for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ ) + { + var oRegex = new RegExp( '___FCKpd___' + j ) ; + sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ; + } + + return sFormatted.Trim() ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcommands.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcommands.js new file mode 100644 index 0000000..e228f41 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckcommands.js @@ -0,0 +1,167 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Define all commands available in the editor. + */ + +var FCKCommands = FCK.Commands = new Object() ; +FCKCommands.LoadedCommands = new Object() ; + +FCKCommands.RegisterCommand = function( commandName, command ) +{ + this.LoadedCommands[ commandName ] = command ; +} + +FCKCommands.GetCommand = function( commandName ) +{ + var oCommand = FCKCommands.LoadedCommands[ commandName ] ; + + if ( oCommand ) + return oCommand ; + + switch ( commandName ) + { + case 'Bold' : + case 'Italic' : + case 'Underline' : + case 'StrikeThrough': + case 'Subscript' : + case 'Superscript' : oCommand = new FCKCoreStyleCommand( commandName ) ; break ; + + case 'RemoveFormat' : oCommand = new FCKRemoveFormatCommand() ; break ; + + case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 380, FCKCommands.GetFullPageState ) ; break ; + case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ; + case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 300 ) ; break ; + case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ; + case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 160 ) ; break ; + case 'AnchorDelete' : oCommand = new FCKAnchorDeleteCommand() ; break ; + case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html?UL' , 370, 160 ) ; break ; + case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html?OL' , 370, 160 ) ; break ; + case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 420, 330, function(){ return FCK_TRISTATE_OFF ; } ) ; break ; + case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Find' ) ; break ; + case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Replace' ) ; break ; + + case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 390 ) ; break ; + case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 390 ) ; break ; + case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 290 ) ; break ; + case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ; + case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 480, 250 ) ; break ; + case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 480, 250 ) ; break ; + case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 550, 240 ) ; break ; + + case 'Style' : oCommand = new FCKStyleCommand() ; break ; + + case 'FontName' : oCommand = new FCKFontNameCommand() ; break ; + case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ; + case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ; + + case 'Source' : oCommand = new FCKSourceCommand() ; break ; + case 'Preview' : oCommand = new FCKPreviewCommand() ; break ; + case 'Save' : oCommand = new FCKSaveCommand() ; break ; + case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ; + case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ; + case 'Rule' : oCommand = new FCKRuleCommand() ; break ; + + case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ; + case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ; + + case 'Paste' : oCommand = new FCKPasteCommand() ; break ; + case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ; + case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ; + + case 'JustifyLeft' : oCommand = new FCKJustifyCommand( 'left' ) ; break ; + case 'JustifyCenter' : oCommand = new FCKJustifyCommand( 'center' ) ; break ; + case 'JustifyRight' : oCommand = new FCKJustifyCommand( 'right' ) ; break ; + case 'JustifyFull' : oCommand = new FCKJustifyCommand( 'justify' ) ; break ; + case 'Indent' : oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ; + case 'Outdent' : oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ; + case 'Blockquote' : oCommand = new FCKBlockQuoteCommand() ; break ; + + case 'TableInsertRowAfter' : oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ; + case 'TableInsertRowBefore' : oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ; + case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ; + case 'TableInsertColumnAfter' : oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ; + case 'TableInsertColumnBefore' : oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ; + case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ; + case 'TableInsertCellAfter' : oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ; + case 'TableInsertCellBefore' : oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ; + case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ; + case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ; + case 'TableMergeRight' : oCommand = new FCKTableCommand('TableMergeRight') ; break ; + case 'TableMergeDown' : oCommand = new FCKTableCommand('TableMergeDown') ; break ; + case 'TableHorizontalSplitCell' : oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ; + case 'TableVerticalSplitCell' : oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ; + case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ; + + case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 210 ) ; break ; + case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 200 ) ; break ; + case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 200 ) ; break ; + case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 210 ) ; break ; + case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 210 ) ; break ; + case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 190 ) ; break ; + case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 210 ) ; break ; + case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 340 ) ; break ; + case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 390 ) ; break ; + + case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ; + case 'FitWindow' : oCommand = new FCKFitWindow() ; break ; + + case 'Undo' : oCommand = new FCKUndoCommand() ; break ; + case 'Redo' : oCommand = new FCKRedoCommand() ; break ; + case 'Copy' : oCommand = new FCKCutCopyCommand( false ) ; break ; + case 'Cut' : oCommand = new FCKCutCopyCommand( true ) ; break ; + + case 'SelectAll' : oCommand = new FCKSelectAllCommand() ; break ; + case 'InsertOrderedList' : oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ; + case 'InsertUnorderedList' : oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ; + case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ; + + // Generic Undefined command (usually used when a command is under development). + case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ; + + // By default we assume that it is a named command. + default: + if ( FCKRegexLib.NamedCommands.test( commandName ) ) + oCommand = new FCKNamedCommand( commandName ) ; + else + { + alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ; + return null ; + } + } + + FCKCommands.LoadedCommands[ commandName ] = oCommand ; + + return oCommand ; +} + +// Gets the state of the "Document Properties" button. It must be enabled only +// when "Full Page" editing is available. +FCKCommands.GetFullPageState = function() +{ + return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; +} + + +FCKCommands.GetBooleanState = function( isDisabled ) +{ + return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckconfig.js b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckconfig.js new file mode 100644 index 0000000..58fdff1 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/_source/internals/fckconfig.js @@ -0,0 +1,238 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Creates and initializes the FCKConfig object. + */ + +var FCKConfig = FCK.Config = new Object() ; + +/* + For the next major version (probably 3.0) we should move all this stuff to + another dedicated object and leave FCKConfig as a holder object for settings only). +*/ + +// Editor Base Path +if ( document.location.protocol == 'file:' ) +{ + FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ; + FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ; + + // The way to address local files is different according to the OS. + // In Windows it is file:// but in MacOs it is file:/// so let's get it automatically + var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ; + // #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files + if ( FCKBrowserInfo.IsOpera ) + sFullProtocol += 'localhost/' ; + + FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ; + FCKConfig.FullBasePath = FCKConfig.BasePath ; +} +else +{ + FCKConfig.BasePath = document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ; + FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ; +} + +FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ; + +// There is a bug in Gecko. If the editor is hidden on startup, an error is +// thrown when trying to get the screen dimensions. +try +{ + FCKConfig.ScreenWidth = screen.width ; + FCKConfig.ScreenHeight = screen.height ; +} +catch (e) +{ + FCKConfig.ScreenWidth = 800 ; + FCKConfig.ScreenHeight = 600 ; +} + +// Override the actual configuration values with the values passed throw the +// hidden field "___Config". +FCKConfig.ProcessHiddenField = function() +{ + this.PageConfig = new Object() ; + + // Get the hidden field. + var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ; + + // Do nothing if the config field was not defined. + if ( ! oConfigField ) return ; + + var aCouples = oConfigField.value.split('&') ; + + for ( var i = 0 ; i < aCouples.length ; i++ ) + { + if ( aCouples[i].length == 0 ) + continue ; + + var aConfig = aCouples[i].split( '=' ) ; + var sKey = decodeURIComponent( aConfig[0] ) ; + var sVal = decodeURIComponent( aConfig[1] ) ; + + if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately. + FCKConfig[ sKey ] = sVal ; + + else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE. + this.PageConfig[ sKey ] = true ; + + else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE. + this.PageConfig[ sKey ] = false ; + + else if ( sVal.length > 0 && !isNaN( sVal ) ) // If it is a number. + this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ; + + else // In any other case it is a string. + this.PageConfig[ sKey ] = sVal ; + } +} + +function FCKConfig_LoadPageConfig() +{ + var oPageConfig = FCKConfig.PageConfig ; + for ( var sKey in oPageConfig ) + FCKConfig[ sKey ] = oPageConfig[ sKey ] ; +} + +function FCKConfig_PreProcess() +{ + var oConfig = FCKConfig ; + + // Force debug mode if fckdebug=true in the QueryString (main page). + if ( oConfig.AllowQueryStringDebug ) + { + try + { + if ( (/fckdebug=true/i).test( window.top.location.search ) ) + oConfig.Debug = true ; + } + catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ } + } + + // Certifies that the "PluginsPath" configuration ends with a slash. + if ( !oConfig.PluginsPath.EndsWith('/') ) + oConfig.PluginsPath += '/' ; + + // If no ToolbarComboPreviewCSS, point it to EditorAreaCSS. + var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ; + if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 ) + oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ; + + // Turn the attributes that will be removed in the RemoveFormat from a string to an array + oConfig.RemoveAttributesArray = (oConfig.RemoveAttributes || '').split( ',' ); + + if ( !FCKConfig.SkinEditorCSS || FCKConfig.SkinEditorCSS.length == 0 ) + FCKConfig.SkinEditorCSS = FCKConfig.SkinPath + 'fck_editor.css' ; + + if ( !FCKConfig.SkinDialogCSS || FCKConfig.SkinDialogCSS.length == 0 ) + FCKConfig.SkinDialogCSS = FCKConfig.SkinPath + 'fck_dialog.css' ; +} + +// Define toolbar sets collection. +FCKConfig.ToolbarSets = new Object() ; + +// Defines the plugins collection. +FCKConfig.Plugins = new Object() ; +FCKConfig.Plugins.Items = new Array() ; + +FCKConfig.Plugins.Add = function( name, langs, path ) +{ + FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ; +} + +// FCKConfig.ProtectedSource: object that holds a collection of Regular +// Expressions that defined parts of the raw HTML that must remain untouched +// like custom tags, scripts, server side code, etc... +FCKConfig.ProtectedSource = new Object() ; + +// Generates a string used to identify and locate the Protected Tags comments. +FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ; + +// Initialize the regex array with the default ones. +FCKConfig.ProtectedSource.RegexEntries = [ + // First of any other protection, we must protect all comments to avoid + // loosing them (of course, IE related). + //g , + + // Script tags will also be forced to be protected, otherwise IE will execute them. + //gi, + + //

        + + + + + Preview
        + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html new file mode 100644 index 0000000..0ac5acc --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html @@ -0,0 +1,113 @@ + + + + + Document Properties - Preview + + + + + + + + + + + + + + +
        + Normal Text +
        + Visited Link + + Active Link +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash.html new file mode 100644 index 0000000..2b5adf4 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash.html @@ -0,0 +1,152 @@ + + + + + Flash Properties + + + + + + + +
        + + + + + + + + + + +
        + + + + + + + + +
        URL +
        +
        +
        + + + + + + +
        + Width
        + +
          + Height
        + +
        +
        + + + + +
        + + + + + + + +
        Preview
        +
        +
        +
        + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash.js new file mode 100644 index 0000000..1878f14 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash.js @@ -0,0 +1,292 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts related to the Flash dialog window (see fck_flash.html). + */ + +var dialog = window.parent ; +var oEditor = dialog.InnerDialogLoaded() ; +var FCK = oEditor.FCK ; +var FCKLang = oEditor.FCKLang ; +var FCKConfig = oEditor.FCKConfig ; +var FCKTools = oEditor.FCKTools ; + +//#### Dialog Tabs + +// Set the dialog tabs. +dialog.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ; + +if ( FCKConfig.FlashUpload ) + dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ; + +if ( !FCKConfig.FlashDlgHideAdvanced ) + dialog.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ; + +// Function called when a dialog tag is selected. +function OnDialogTabChange( tabCode ) +{ + ShowE('divInfo' , ( tabCode == 'Info' ) ) ; + ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; + ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ; +} + +// Get the selected flash embed (if available). +var oFakeImage = dialog.Selection.GetSelectedElement() ; +var oEmbed ; + +if ( oFakeImage ) +{ + if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') ) + oEmbed = FCK.GetRealElement( oFakeImage ) ; + else + oFakeImage = null ; +} + +window.onload = function() +{ + // Translate the dialog box texts. + oEditor.FCKLanguageManager.TranslatePage(document) ; + + // Load the selected element information (if any). + LoadSelection() ; + + // Show/Hide the "Browse Server" button. + GetE('tdBrowse').style.display = FCKConfig.FlashBrowser ? '' : 'none' ; + + // Set the actual uploader URL. + if ( FCKConfig.FlashUpload ) + GetE('frmUpload').action = FCKConfig.FlashUploadURL ; + + dialog.SetAutoSize( true ) ; + + // Activate the "OK" button. + dialog.SetOkButton( true ) ; + + SelectField( 'txtUrl' ) ; +} + +function LoadSelection() +{ + if ( ! oEmbed ) return ; + + GetE('txtUrl').value = GetAttribute( oEmbed, 'src', '' ) ; + GetE('txtWidth').value = GetAttribute( oEmbed, 'width', '' ) ; + GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ; + + // Get Advances Attributes + GetE('txtAttId').value = oEmbed.id ; + GetE('chkAutoPlay').checked = GetAttribute( oEmbed, 'play', 'true' ) == 'true' ; + GetE('chkLoop').checked = GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ; + GetE('chkMenu').checked = GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ; + GetE('cmbScale').value = GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ; + + GetE('txtAttTitle').value = oEmbed.title ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ; + GetE('txtAttStyle').value = oEmbed.style.cssText ; + } + else + { + GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ; + GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) || '' ; + } + + UpdatePreview() ; +} + +//#### The OK button was hit. +function Ok() +{ + if ( GetE('txtUrl').value.length == 0 ) + { + dialog.SetSelectedTab( 'Info' ) ; + GetE('txtUrl').focus() ; + + alert( oEditor.FCKLang.DlgAlertUrl ) ; + + return false ; + } + + oEditor.FCKUndo.SaveUndoStep() ; + if ( !oEmbed ) + { + oEmbed = FCK.EditorDocument.createElement( 'EMBED' ) ; + oFakeImage = null ; + } + UpdateEmbed( oEmbed ) ; + + if ( !oFakeImage ) + { + oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ; + oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ; + oFakeImage = FCK.InsertElement( oFakeImage ) ; + } + + oEditor.FCKEmbedAndObjectProcessor.RefreshView( oFakeImage, oEmbed ) ; + + return true ; +} + +function UpdateEmbed( e ) +{ + SetAttribute( e, 'type' , 'application/x-shockwave-flash' ) ; + SetAttribute( e, 'pluginspage' , 'http://www.macromedia.com/go/getflashplayer' ) ; + + SetAttribute( e, 'src', GetE('txtUrl').value ) ; + SetAttribute( e, "width" , GetE('txtWidth').value ) ; + SetAttribute( e, "height", GetE('txtHeight').value ) ; + + // Advances Attributes + + SetAttribute( e, 'id' , GetE('txtAttId').value ) ; + SetAttribute( e, 'scale', GetE('cmbScale').value ) ; + + SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ; + SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ; + SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ; + + SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + SetAttribute( e, 'className', GetE('txtAttClasses').value ) ; + e.style.cssText = GetE('txtAttStyle').value ; + } + else + { + SetAttribute( e, 'class', GetE('txtAttClasses').value ) ; + SetAttribute( e, 'style', GetE('txtAttStyle').value ) ; + } +} + +var ePreview ; + +function SetPreviewElement( previewEl ) +{ + ePreview = previewEl ; + + if ( GetE('txtUrl').value.length > 0 ) + UpdatePreview() ; +} + +function UpdatePreview() +{ + if ( !ePreview ) + return ; + + while ( ePreview.firstChild ) + ePreview.removeChild( ePreview.firstChild ) ; + + if ( GetE('txtUrl').value.length == 0 ) + ePreview.innerHTML = ' ' ; + else + { + var oDoc = ePreview.ownerDocument || ePreview.document ; + var e = oDoc.createElement( 'EMBED' ) ; + + SetAttribute( e, 'src', GetE('txtUrl').value ) ; + SetAttribute( e, 'type', 'application/x-shockwave-flash' ) ; + SetAttribute( e, 'width', '100%' ) ; + SetAttribute( e, 'height', '100%' ) ; + + ePreview.appendChild( e ) ; + } +} + +// + +function BrowseServer() +{ + OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ; +} + +function SetUrl( url, width, height ) +{ + GetE('txtUrl').value = url ; + + if ( width ) + GetE('txtWidth').value = width ; + + if ( height ) + GetE('txtHeight').value = height ; + + UpdatePreview() ; + + dialog.SetSelectedTab( 'Info' ) ; +} + +function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) +{ + switch ( errorNumber ) + { + case 0 : // No errors + alert( 'Your file has been successfully uploaded' ) ; + break ; + case 1 : // Custom error + alert( customMsg ) ; + return ; + case 101 : // Custom warning + alert( customMsg ) ; + break ; + case 201 : + alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; + break ; + case 202 : + alert( 'Invalid file type' ) ; + return ; + case 203 : + alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; + return ; + case 500 : + alert( 'The connector is disabled' ) ; + break ; + default : + alert( 'Error on file upload. Error number: ' + errorNumber ) ; + return ; + } + + SetUrl( fileUrl ) ; + GetE('frmUpload').reset() ; +} + +var oUploadAllowedExtRegex = new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ; +var oUploadDeniedExtRegex = new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ; + +function CheckUpload() +{ + var sFile = GetE('txtUploadFile').value ; + + if ( sFile.length == 0 ) + { + alert( 'Please select a file to upload' ) ; + return false ; + } + + if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || + ( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) + { + OnUploadCompleted( 202 ) ; + return false ; + } + + return true ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html new file mode 100644 index 0000000..4817c1d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_form.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_form.html new file mode 100644 index 0000000..71edf49 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_form.html @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + +
        + + + + + + + + + + +
        + Name
        + +
        + Action
        + +
        + Method
        + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_hiddenfield.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_hiddenfield.html new file mode 100644 index 0000000..3ee162f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_hiddenfield.html @@ -0,0 +1,115 @@ + + + + + Hidden Field Properties + + + + + + + + + + +
        + + + + + + + +
        + Name
        + +
        + Value
        + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image.html new file mode 100644 index 0000000..0fa7c43 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image.html @@ -0,0 +1,258 @@ + + + + + Image Properties + + + + + + + +
        + + + + + + + + + + +
        + + + + + + + + +
        + URL +
        + +
        +
        + Short Description
        +
        +
        + + + + + + +
        +
        + + + + + + + + + + + +
        + Width  + +
        +
        +
        +
        +
        +
        + Height  +
        +
        + + + + + + + + + + + + + + + + + +
        + Border  +
        + HSpace  +
        + VSpace  +
        + Align  + +
        +
        +     + + + + + + + +
        + Preview
        + +
        +
        +
        +
        + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image.js new file mode 100644 index 0000000..e4240b9 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image.js @@ -0,0 +1,504 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts related to the Image dialog window (see fck_image.html). + */ + +var dialog = window.parent ; +var oEditor = dialog.InnerDialogLoaded() ; +var FCK = oEditor.FCK ; +var FCKLang = oEditor.FCKLang ; +var FCKConfig = oEditor.FCKConfig ; +var FCKDebug = oEditor.FCKDebug ; +var FCKTools = oEditor.FCKTools ; + +var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ; + +//#### Dialog Tabs + +// Set the dialog tabs. +dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ; + +if ( !bImageButton && !FCKConfig.ImageDlgHideLink ) + dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ; + +if ( FCKConfig.ImageUpload ) + dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ; + +if ( !FCKConfig.ImageDlgHideAdvanced ) + dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; + +// Function called when a dialog tag is selected. +function OnDialogTabChange( tabCode ) +{ + ShowE('divInfo' , ( tabCode == 'Info' ) ) ; + ShowE('divLink' , ( tabCode == 'Link' ) ) ; + ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; + ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ; +} + +// Get the selected image (if available). +var oImage = dialog.Selection.GetSelectedElement() ; + +if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) ) + oImage = null ; + +// Get the active link. +var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ; + +var oImageOriginal ; + +function UpdateOriginal( resetSize ) +{ + if ( !eImgPreview ) + return ; + + if ( GetE('txtUrl').value.length == 0 ) + { + oImageOriginal = null ; + return ; + } + + oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ; + + if ( resetSize ) + { + oImageOriginal.onload = function() + { + this.onload = null ; + ResetSizes() ; + } + } + + oImageOriginal.src = eImgPreview.src ; +} + +var bPreviewInitialized ; + +window.onload = function() +{ + // Translate the dialog box texts. + oEditor.FCKLanguageManager.TranslatePage(document) ; + + GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ; + GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ; + + // Load the selected element information (if any). + LoadSelection() ; + + // Show/Hide the "Browse Server" button. + GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ; + GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; + + UpdateOriginal() ; + + // Set the actual uploader URL. + if ( FCKConfig.ImageUpload ) + GetE('frmUpload').action = FCKConfig.ImageUploadURL ; + + dialog.SetAutoSize( true ) ; + + // Activate the "OK" button. + dialog.SetOkButton( true ) ; + + SelectField( 'txtUrl' ) ; +} + +function LoadSelection() +{ + if ( ! oImage ) return ; + + var sUrl = oImage.getAttribute( '_fcksavedurl' ) ; + if ( sUrl == null ) + sUrl = GetAttribute( oImage, 'src', '' ) ; + + GetE('txtUrl').value = sUrl ; + GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ; + GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ; + GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ; + GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ; + GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ; + + var iWidth, iHeight ; + + var regexSize = /^\s*(\d+)px\s*$/i ; + + if ( oImage.style.width ) + { + var aMatchW = oImage.style.width.match( regexSize ) ; + if ( aMatchW ) + { + iWidth = aMatchW[1] ; + oImage.style.width = '' ; + SetAttribute( oImage, 'width' , iWidth ) ; + } + } + + if ( oImage.style.height ) + { + var aMatchH = oImage.style.height.match( regexSize ) ; + if ( aMatchH ) + { + iHeight = aMatchH[1] ; + oImage.style.height = '' ; + SetAttribute( oImage, 'height', iHeight ) ; + } + } + + GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ; + GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ; + + // Get Advances Attributes + GetE('txtAttId').value = oImage.id ; + GetE('cmbAttLangDir').value = oImage.dir ; + GetE('txtAttLangCode').value = oImage.lang ; + GetE('txtAttTitle').value = oImage.title ; + GetE('txtLongDesc').value = oImage.longDesc ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + GetE('txtAttClasses').value = oImage.className || '' ; + GetE('txtAttStyle').value = oImage.style.cssText ; + } + else + { + GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ; + GetE('txtAttStyle').value = oImage.getAttribute('style',2) ; + } + + if ( oLink ) + { + var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ; + if ( sLinkUrl == null ) + sLinkUrl = oLink.getAttribute('href',2) ; + + GetE('txtLnkUrl').value = sLinkUrl ; + GetE('cmbLnkTarget').value = oLink.target ; + } + + UpdatePreview() ; +} + +//#### The OK button was hit. +function Ok() +{ + if ( GetE('txtUrl').value.length == 0 ) + { + dialog.SetSelectedTab( 'Info' ) ; + GetE('txtUrl').focus() ; + + alert( FCKLang.DlgImgAlertUrl ) ; + + return false ; + } + + var bHasImage = ( oImage != null ) ; + + if ( bHasImage && bImageButton && oImage.tagName == 'IMG' ) + { + if ( confirm( 'Do you want to transform the selected image on a image button?' ) ) + oImage = null ; + } + else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' ) + { + if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) ) + oImage = null ; + } + + oEditor.FCKUndo.SaveUndoStep() ; + if ( !bHasImage ) + { + if ( bImageButton ) + { + oImage = FCK.EditorDocument.createElement( 'input' ) ; + oImage.type = 'image' ; + oImage = FCK.InsertElement( oImage ) ; + } + else + oImage = FCK.InsertElement( 'img' ) ; + } + + UpdateImage( oImage ) ; + + var sLnkUrl = GetE('txtLnkUrl').value.Trim() ; + + if ( sLnkUrl.length == 0 ) + { + if ( oLink ) + FCK.ExecuteNamedCommand( 'Unlink' ) ; + } + else + { + if ( oLink ) // Modifying an existent link. + oLink.href = sLnkUrl ; + else // Creating a new link. + { + if ( !bHasImage ) + oEditor.FCKSelection.SelectNode( oImage ) ; + + oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ; + + if ( !bHasImage ) + { + oEditor.FCKSelection.SelectNode( oLink ) ; + oEditor.FCKSelection.Collapse( false ) ; + } + } + + SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ; + SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ; + } + + return true ; +} + +function UpdateImage( e, skipId ) +{ + e.src = GetE('txtUrl').value ; + SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ; + SetAttribute( e, "alt" , GetE('txtAlt').value ) ; + SetAttribute( e, "width" , GetE('txtWidth').value ) ; + SetAttribute( e, "height", GetE('txtHeight').value ) ; + SetAttribute( e, "vspace", GetE('txtVSpace').value ) ; + SetAttribute( e, "hspace", GetE('txtHSpace').value ) ; + SetAttribute( e, "border", GetE('txtBorder').value ) ; + SetAttribute( e, "align" , GetE('cmbAlign').value ) ; + + // Advances Attributes + + if ( ! skipId ) + SetAttribute( e, 'id', GetE('txtAttId').value ) ; + + SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ; + SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ; + SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ; + SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + e.className = GetE('txtAttClasses').value ; + e.style.cssText = GetE('txtAttStyle').value ; + } + else + { + SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ; + SetAttribute( e, 'style', GetE('txtAttStyle').value ) ; + } +} + +var eImgPreview ; +var eImgPreviewLink ; + +function SetPreviewElements( imageElement, linkElement ) +{ + eImgPreview = imageElement ; + eImgPreviewLink = linkElement ; + + UpdatePreview() ; + UpdateOriginal() ; + + bPreviewInitialized = true ; +} + +function UpdatePreview() +{ + if ( !eImgPreview || !eImgPreviewLink ) + return ; + + if ( GetE('txtUrl').value.length == 0 ) + eImgPreviewLink.style.display = 'none' ; + else + { + UpdateImage( eImgPreview, true ) ; + + if ( GetE('txtLnkUrl').value.Trim().length > 0 ) + eImgPreviewLink.href = 'javascript:void(null);' ; + else + SetAttribute( eImgPreviewLink, 'href', '' ) ; + + eImgPreviewLink.style.display = '' ; + } +} + +var bLockRatio = true ; + +function SwitchLock( lockButton ) +{ + bLockRatio = !bLockRatio ; + lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ; + lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ; + + if ( bLockRatio ) + { + if ( GetE('txtWidth').value.length > 0 ) + OnSizeChanged( 'Width', GetE('txtWidth').value ) ; + else + OnSizeChanged( 'Height', GetE('txtHeight').value ) ; + } +} + +// Fired when the width or height input texts change +function OnSizeChanged( dimension, value ) +{ + // Verifies if the aspect ration has to be maintained + if ( oImageOriginal && bLockRatio ) + { + var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ; + + if ( value.length == 0 || isNaN( value ) ) + { + e.value = '' ; + return ; + } + + if ( dimension == 'Width' ) + value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ; + else + value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ; + + if ( !isNaN( value ) ) + e.value = value ; + } + + UpdatePreview() ; +} + +// Fired when the Reset Size button is clicked +function ResetSizes() +{ + if ( ! oImageOriginal ) return ; + if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete ) + { + setTimeout( ResetSizes, 50 ) ; + return ; + } + + GetE('txtWidth').value = oImageOriginal.width ; + GetE('txtHeight').value = oImageOriginal.height ; + + UpdatePreview() ; +} + +function BrowseServer() +{ + OpenServerBrowser( + 'Image', + FCKConfig.ImageBrowserURL, + FCKConfig.ImageBrowserWindowWidth, + FCKConfig.ImageBrowserWindowHeight ) ; +} + +function LnkBrowseServer() +{ + OpenServerBrowser( + 'Link', + FCKConfig.LinkBrowserURL, + FCKConfig.LinkBrowserWindowWidth, + FCKConfig.LinkBrowserWindowHeight ) ; +} + +function OpenServerBrowser( type, url, width, height ) +{ + sActualBrowser = type ; + OpenFileBrowser( url, width, height ) ; +} + +var sActualBrowser ; + +function SetUrl( url, width, height, alt ) +{ + if ( sActualBrowser == 'Link' ) + { + GetE('txtLnkUrl').value = url ; + UpdatePreview() ; + } + else + { + GetE('txtUrl').value = url ; + GetE('txtWidth').value = width ? width : '' ; + GetE('txtHeight').value = height ? height : '' ; + + if ( alt ) + GetE('txtAlt').value = alt; + + UpdatePreview() ; + UpdateOriginal( true ) ; + } + + dialog.SetSelectedTab( 'Info' ) ; +} + +function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) +{ + switch ( errorNumber ) + { + case 0 : // No errors + alert( 'Your file has been successfully uploaded' ) ; + break ; + case 1 : // Custom error + alert( customMsg ) ; + return ; + case 101 : // Custom warning + alert( customMsg ) ; + break ; + case 201 : + alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; + break ; + case 202 : + alert( 'Invalid file type' ) ; + return ; + case 203 : + alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; + return ; + case 500 : + alert( 'The connector is disabled' ) ; + break ; + default : + alert( 'Error on file upload. Error number: ' + errorNumber ) ; + return ; + } + + sActualBrowser = '' ; + SetUrl( fileUrl ) ; + GetE('frmUpload').reset() ; +} + +var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ; +var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ; + +function CheckUpload() +{ + var sFile = GetE('txtUploadFile').value ; + + if ( sFile.length == 0 ) + { + alert( 'Please select a file to upload' ) ; + return false ; + } + + if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || + ( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) + { + OnUploadCompleted( 202 ) ; + return false ; + } + + return true ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image_preview.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image_preview.html new file mode 100644 index 0000000..80cd2ba --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_image/fck_image_preview.html @@ -0,0 +1,72 @@ + + + + + + + + + + + +
        + + Lorem ipsum dolor sit amet, consectetuer adipiscing + elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus + a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, + nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed + velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper + nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices + a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus + faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget + tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, + tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis + id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, + eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur + ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris. +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link.html new file mode 100644 index 0000000..e11da70 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link.html @@ -0,0 +1,293 @@ + + + + + Link Properties + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link/fck_link.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link/fck_link.js new file mode 100644 index 0000000..a1257d6 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_link/fck_link.js @@ -0,0 +1,736 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts related to the Link dialog window (see fck_link.html). + */ + +var dialog = window.parent ; +var oEditor = dialog.InnerDialogLoaded() ; + +var FCK = oEditor.FCK ; +var FCKLang = oEditor.FCKLang ; +var FCKConfig = oEditor.FCKConfig ; +var FCKRegexLib = oEditor.FCKRegexLib ; +var FCKTools = oEditor.FCKTools ; + +//#### Dialog Tabs + +// Set the dialog tabs. +dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ; + +if ( !FCKConfig.LinkDlgHideTarget ) + dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ; + +if ( FCKConfig.LinkUpload ) + dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ; + +if ( !FCKConfig.LinkDlgHideAdvanced ) + dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; + +// Function called when a dialog tag is selected. +function OnDialogTabChange( tabCode ) +{ + ShowE('divInfo' , ( tabCode == 'Info' ) ) ; + ShowE('divTarget' , ( tabCode == 'Target' ) ) ; + ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; + ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ; + + dialog.SetAutoSize( true ) ; +} + +//#### Regular Expressions library. +var oRegex = new Object() ; + +oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ; + +oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ; + +oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ; + +oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ; + +oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ; + +// Accessible popups +oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ; + +oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ; + +//#### Parser Functions + +var oParser = new Object() ; + +oParser.ParseEMailUrl = function( emailUrl ) +{ + // Initializes the EMailInfo object. + var oEMailInfo = new Object() ; + oEMailInfo.Address = '' ; + oEMailInfo.Subject = '' ; + oEMailInfo.Body = '' ; + + var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ; + if ( oParts ) + { + // Set the e-mail address. + oEMailInfo.Address = oParts[1] ; + + // Look for the optional e-mail parameters. + if ( oParts[2] ) + { + var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ; + if ( oMatch ) oEMailInfo.Subject = decodeURIComponent( oMatch[2] ) ; + + oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ; + if ( oMatch ) oEMailInfo.Body = decodeURIComponent( oMatch[2] ) ; + } + } + + return oEMailInfo ; +} + +oParser.CreateEMailUri = function( address, subject, body ) +{ + var sBaseUri = 'mailto:' + address ; + + var sParams = '' ; + + if ( subject.length > 0 ) + sParams = '?subject=' + encodeURIComponent( subject ) ; + + if ( body.length > 0 ) + { + sParams += ( sParams.length == 0 ? '?' : '&' ) ; + sParams += 'body=' + encodeURIComponent( body ) ; + } + + return sBaseUri + sParams ; +} + +//#### Initialization Code + +// oLink: The actual selected link in the editor. +var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ; +if ( oLink ) + FCK.Selection.SelectNode( oLink ) ; + +window.onload = function() +{ + // Translate the dialog box texts. + oEditor.FCKLanguageManager.TranslatePage(document) ; + + // Fill the Anchor Names and Ids combos. + LoadAnchorNamesAndIds() ; + + // Load the selected link information (if any). + LoadSelection() ; + + // Update the dialog box. + SetLinkType( GetE('cmbLinkType').value ) ; + + // Show/Hide the "Browse Server" button. + GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; + + // Show the initial dialog content. + GetE('divInfo').style.display = '' ; + + // Set the actual uploader URL. + if ( FCKConfig.LinkUpload ) + GetE('frmUpload').action = FCKConfig.LinkUploadURL ; + + // Set the default target (from configuration). + SetDefaultTarget() ; + + // Activate the "OK" button. + dialog.SetOkButton( true ) ; + + // Select the first field. + switch( GetE('cmbLinkType').value ) + { + case 'url' : + SelectField( 'txtUrl' ) ; + break ; + case 'email' : + SelectField( 'txtEMailAddress' ) ; + break ; + case 'anchor' : + if ( GetE('divSelAnchor').style.display != 'none' ) + SelectField( 'cmbAnchorName' ) ; + else + SelectField( 'cmbLinkType' ) ; + } +} + +var bHasAnchors ; + +function LoadAnchorNamesAndIds() +{ + // Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon + // to edit them. So, we must look for that images now. + var aAnchors = new Array() ; + var i ; + var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ; + for( i = 0 ; i < oImages.length ; i++ ) + { + if ( oImages[i].getAttribute('_fckanchor') ) + aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ; + } + + // Add also real anchors + var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ; + for( i = 0 ; i < oLinks.length ; i++ ) + { + if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) ) + aAnchors[ aAnchors.length ] = oLinks[i] ; + } + + var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ; + + bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ; + + for ( i = 0 ; i < aAnchors.length ; i++ ) + { + var sName = aAnchors[i].name ; + if ( sName && sName.length > 0 ) + FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ; + } + + for ( i = 0 ; i < aIds.length ; i++ ) + { + FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ; + } + + ShowE( 'divSelAnchor' , bHasAnchors ) ; + ShowE( 'divNoAnchor' , !bHasAnchors ) ; +} + +function LoadSelection() +{ + if ( !oLink ) return ; + + var sType = 'url' ; + + // Get the actual Link href. + var sHRef = oLink.getAttribute( '_fcksavedurl' ) ; + if ( sHRef == null ) + sHRef = oLink.getAttribute( 'href' , 2 ) || '' ; + + // Look for a popup javascript link. + var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ; + if( oPopupMatch ) + { + GetE('cmbTarget').value = 'popup' ; + sHRef = oPopupMatch[1] ; + FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ; + SetTarget( 'popup' ) ; + } + + // Accessible popups, the popup data is in the onclick attribute + if ( !oPopupMatch ) + { + var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ; + if ( onclick ) + { + // Decode the protected string + onclick = decodeURIComponent( onclick ) ; + + oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ; + if( oPopupMatch ) + { + GetE( 'cmbTarget' ).value = 'popup' ; + FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ; + SetTarget( 'popup' ) ; + } + } + } + + // Search for the protocol. + var sProtocol = oRegex.UriProtocol.exec( sHRef ) ; + + if ( sProtocol ) + { + sProtocol = sProtocol[0].toLowerCase() ; + GetE('cmbLinkProtocol').value = sProtocol ; + + // Remove the protocol and get the remaining URL. + var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ; + + if ( sProtocol == 'mailto:' ) // It is an e-mail link. + { + sType = 'email' ; + + var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ; + GetE('txtEMailAddress').value = oEMailInfo.Address ; + GetE('txtEMailSubject').value = oEMailInfo.Subject ; + GetE('txtEMailBody').value = oEMailInfo.Body ; + } + else // It is a normal link. + { + sType = 'url' ; + GetE('txtUrl').value = sUrl ; + } + } + else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link. + { + sType = 'anchor' ; + GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ; + } + else // It is another type of link. + { + sType = 'url' ; + + GetE('cmbLinkProtocol').value = '' ; + GetE('txtUrl').value = sHRef ; + } + + if ( !oPopupMatch ) + { + // Get the target. + var sTarget = oLink.target ; + + if ( sTarget && sTarget.length > 0 ) + { + if ( oRegex.ReserveTarget.test( sTarget ) ) + { + sTarget = sTarget.toLowerCase() ; + GetE('cmbTarget').value = sTarget ; + } + else + GetE('cmbTarget').value = 'frame' ; + GetE('txtTargetFrame').value = sTarget ; + } + } + + // Get Advances Attributes + GetE('txtAttId').value = oLink.id ; + GetE('txtAttName').value = oLink.name ; + GetE('cmbAttLangDir').value = oLink.dir ; + GetE('txtAttLangCode').value = oLink.lang ; + GetE('txtAttAccessKey').value = oLink.accessKey ; + GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ; + GetE('txtAttTitle').value = oLink.title ; + GetE('txtAttContentType').value = oLink.type ; + GetE('txtAttCharSet').value = oLink.charset ; + + var sClass ; + if ( oEditor.FCKBrowserInfo.IsIE ) + { + sClass = oLink.getAttribute('className',2) || '' ; + // Clean up temporary classes for internal use: + sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ; + + GetE('txtAttStyle').value = oLink.style.cssText ; + } + else + { + sClass = oLink.getAttribute('class',2) || '' ; + GetE('txtAttStyle').value = oLink.getAttribute('style',2) || '' ; + } + GetE('txtAttClasses').value = sClass ; + + // Update the Link type combo. + GetE('cmbLinkType').value = sType ; +} + +//#### Link type selection. +function SetLinkType( linkType ) +{ + ShowE('divLinkTypeUrl' , (linkType == 'url') ) ; + ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ; + ShowE('divLinkTypeEMail' , (linkType == 'email') ) ; + + if ( !FCKConfig.LinkDlgHideTarget ) + dialog.SetTabVisibility( 'Target' , (linkType == 'url') ) ; + + if ( FCKConfig.LinkUpload ) + dialog.SetTabVisibility( 'Upload' , (linkType == 'url') ) ; + + if ( !FCKConfig.LinkDlgHideAdvanced ) + dialog.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ; + + if ( linkType == 'email' ) + dialog.SetAutoSize( true ) ; +} + +//#### Target type selection. +function SetTarget( targetType ) +{ + GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ; + GetE('tdPopupName').style.display = + GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ; + + switch ( targetType ) + { + case "_blank" : + case "_self" : + case "_parent" : + case "_top" : + GetE('txtTargetFrame').value = targetType ; + break ; + case "" : + GetE('txtTargetFrame').value = '' ; + break ; + } + + if ( targetType == 'popup' ) + dialog.SetAutoSize( true ) ; +} + +//#### Called while the user types the URL. +function OnUrlChange() +{ + var sUrl = GetE('txtUrl').value ; + var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ; + + if ( sProtocol ) + { + sUrl = sUrl.substr( sProtocol[0].length ) ; + GetE('txtUrl').value = sUrl ; + GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ; + } + else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) ) + { + GetE('cmbLinkProtocol').value = '' ; + } +} + +//#### Called while the user types the target name. +function OnTargetNameChange() +{ + var sFrame = GetE('txtTargetFrame').value ; + + if ( sFrame.length == 0 ) + GetE('cmbTarget').value = '' ; + else if ( oRegex.ReserveTarget.test( sFrame ) ) + GetE('cmbTarget').value = sFrame.toLowerCase() ; + else + GetE('cmbTarget').value = 'frame' ; +} + +// Accessible popups +function BuildOnClickPopup() +{ + var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ; + + var sFeatures = '' ; + var aChkFeatures = document.getElementsByName( 'chkFeature' ) ; + for ( var i = 0 ; i < aChkFeatures.length ; i++ ) + { + if ( i > 0 ) sFeatures += ',' ; + sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ; + } + + if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ; + if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ; + if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ; + if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ; + + if ( sFeatures != '' ) + sFeatures = sFeatures + ",status" ; + + return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ; +} + +//#### Fills all Popup related fields. +function FillPopupFields( windowName, features ) +{ + if ( windowName ) + GetE('txtPopupName').value = windowName ; + + var oFeatures = new Object() ; + var oFeaturesMatch ; + while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null ) + { + var sValue = oFeaturesMatch[2] ; + if ( sValue == ( 'yes' || '1' ) ) + oFeatures[ oFeaturesMatch[1] ] = true ; + else if ( ! isNaN( sValue ) && sValue != 0 ) + oFeatures[ oFeaturesMatch[1] ] = sValue ; + } + + // Update all features check boxes. + var aChkFeatures = document.getElementsByName('chkFeature') ; + for ( var i = 0 ; i < aChkFeatures.length ; i++ ) + { + if ( oFeatures[ aChkFeatures[i].value ] ) + aChkFeatures[i].checked = true ; + } + + // Update position and size text boxes. + if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ; + if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ; + if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ; + if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ; +} + +//#### The OK button was hit. +function Ok() +{ + var sUri, sInnerHtml ; + oEditor.FCKUndo.SaveUndoStep() ; + + switch ( GetE('cmbLinkType').value ) + { + case 'url' : + sUri = GetE('txtUrl').value ; + + if ( sUri.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoUrl ) ; + return false ; + } + + sUri = GetE('cmbLinkProtocol').value + sUri ; + + break ; + + case 'email' : + sUri = GetE('txtEMailAddress').value ; + + if ( sUri.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoEMail ) ; + return false ; + } + + sUri = oParser.CreateEMailUri( + sUri, + GetE('txtEMailSubject').value, + GetE('txtEMailBody').value ) ; + break ; + + case 'anchor' : + var sAnchor = GetE('cmbAnchorName').value ; + if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ; + + if ( sAnchor.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoAnchor ) ; + return false ; + } + + sUri = '#' + sAnchor ; + break ; + } + + // If no link is selected, create a new one (it may result in more than one link creation - #220). + var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ; + + // If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26) + var aHasSelection = ( aLinks.length > 0 ) ; + if ( !aHasSelection ) + { + sInnerHtml = sUri; + + // Built a better text for empty links. + switch ( GetE('cmbLinkType').value ) + { + // anchor: use old behavior --> return true + case 'anchor': + sInnerHtml = sInnerHtml.replace( /^#/, '' ) ; + break ; + + // url: try to get path + case 'url': + var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ; + var asLinkPath = oLinkPathRegEx.exec( sUri ) ; + if (asLinkPath != null) + sInnerHtml = asLinkPath[1]; // use matched path + break ; + + // mailto: try to get email address + case 'email': + sInnerHtml = GetE('txtEMailAddress').value ; + break ; + } + + // Create a new (empty) anchor. + aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ; + } + + for ( var i = 0 ; i < aLinks.length ; i++ ) + { + oLink = aLinks[i] ; + + if ( aHasSelection ) + sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). + + oLink.href = sUri ; + SetAttribute( oLink, '_fcksavedurl', sUri ) ; + + var onclick; + // Accessible popups + if( GetE('cmbTarget').value == 'popup' ) + { + onclick = BuildOnClickPopup() ; + // Encode the attribute + onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" ) ; + SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ; + } + else + { + // Check if the previous onclick was for a popup: + // In that case remove the onclick handler. + onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ; + if ( onclick ) + { + // Decode the protected string + onclick = decodeURIComponent( onclick ) ; + + if( oRegex.OnClickPopup.test( onclick ) ) + SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ; + } + } + + oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML + + // Target + if( GetE('cmbTarget').value != 'popup' ) + SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ; + else + SetAttribute( oLink, 'target', null ) ; + + // Let's set the "id" only for the first link to avoid duplication. + if ( i == 0 ) + SetAttribute( oLink, 'id', GetE('txtAttId').value ) ; + + // Advances Attributes + SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ; + SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ; + SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ; + SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ; + SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ; + SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ; + SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ; + SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + var sClass = GetE('txtAttClasses').value ; + // If it's also an anchor add an internal class + if ( GetE('txtAttName').value.length != 0 ) + sClass += ' FCK__AnchorC' ; + SetAttribute( oLink, 'className', sClass ) ; + + oLink.style.cssText = GetE('txtAttStyle').value ; + } + else + { + SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ; + SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ; + } + } + + // Select the (first) link. + oEditor.FCKSelection.SelectNode( aLinks[0] ); + + return true ; +} + +function BrowseServer() +{ + OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ; +} + +function SetUrl( url ) +{ + document.getElementById('txtUrl').value = url ; + OnUrlChange() ; + dialog.SetSelectedTab( 'Info' ) ; +} + +function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) +{ + switch ( errorNumber ) + { + case 0 : // No errors + alert( 'Your file has been successfully uploaded' ) ; + break ; + case 1 : // Custom error + alert( customMsg ) ; + return ; + case 101 : // Custom warning + alert( customMsg ) ; + break ; + case 201 : + alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; + break ; + case 202 : + alert( 'Invalid file type' ) ; + return ; + case 203 : + alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; + return ; + case 500 : + alert( 'The connector is disabled' ) ; + break ; + default : + alert( 'Error on file upload. Error number: ' + errorNumber ) ; + return ; + } + + SetUrl( fileUrl ) ; + GetE('frmUpload').reset() ; +} + +var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ; +var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ; + +function CheckUpload() +{ + var sFile = GetE('txtUploadFile').value ; + + if ( sFile.length == 0 ) + { + alert( 'Please select a file to upload' ) ; + return false ; + } + + if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || + ( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) + { + OnUploadCompleted( 202 ) ; + return false ; + } + + return true ; +} + +function SetDefaultTarget() +{ + var target = FCKConfig.DefaultLinkTarget || '' ; + + if ( oLink || target.length == 0 ) + return ; + + switch ( target ) + { + case '_blank' : + case '_self' : + case '_parent' : + case '_top' : + GetE('cmbTarget').value = target ; + break ; + default : + GetE('cmbTarget').value = 'frame' ; + break ; + } + + GetE('txtTargetFrame').value = target ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_listprop.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_listprop.html new file mode 100644 index 0000000..9f62d60 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_listprop.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + +
        + + + + + +
        + List Type
        + + +   +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_paste.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_paste.html new file mode 100644 index 0000000..2181afe --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_paste.html @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + Please paste inside the following box using the keyboard + (Ctrl+V) and hit OK.
        +   +
        +
        + +
        + + + +
        + + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_radiobutton.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_radiobutton.html new file mode 100644 index 0000000..eb9aa5d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_radiobutton.html @@ -0,0 +1,104 @@ + + + + + Radio Button Properties + + + + + + + + + + +
        + + + + + + + + + + +
        + Name
        + +
        + Value
        + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_replace.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_replace.html new file mode 100644 index 0000000..26e7758 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_replace.html @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select.html new file mode 100644 index 0000000..a1735a1 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select.html @@ -0,0 +1,180 @@ + + + + + Select Properties + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        Name 
        Value 
        Size  lines
        +
        +
        +  Available + Options  + + + + + + + + + + + + + + + + + + +
        Text
        + +
        Value
        + +
        + + +
        +
        + +
           +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select/fck_select.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select/fck_select.js new file mode 100644 index 0000000..167e24d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_select/fck_select.js @@ -0,0 +1,194 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts for the fck_select.html page. + */ + +function Select( combo ) +{ + var iIndex = combo.selectedIndex ; + + oListText.selectedIndex = iIndex ; + oListValue.selectedIndex = iIndex ; + + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + oTxtText.value = oListText.value ; + oTxtValue.value = oListValue.value ; +} + +function Add() +{ + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + AddComboOption( oListText, oTxtText.value, oTxtText.value ) ; + AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ; + + oListText.selectedIndex = oListText.options.length - 1 ; + oListValue.selectedIndex = oListValue.options.length - 1 ; + + oTxtText.value = '' ; + oTxtValue.value = '' ; + + oTxtText.focus() ; +} + +function Modify() +{ + var iIndex = oListText.selectedIndex ; + + if ( iIndex < 0 ) return ; + + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + oListText.options[ iIndex ].innerHTML = HTMLEncode( oTxtText.value ) ; + oListText.options[ iIndex ].value = oTxtText.value ; + + oListValue.options[ iIndex ].innerHTML = HTMLEncode( oTxtValue.value ) ; + oListValue.options[ iIndex ].value = oTxtValue.value ; + + oTxtText.value = '' ; + oTxtValue.value = '' ; + + oTxtText.focus() ; +} + +function Move( steps ) +{ + ChangeOptionPosition( oListText, steps ) ; + ChangeOptionPosition( oListValue, steps ) ; +} + +function Delete() +{ + RemoveSelectedOptions( oListText ) ; + RemoveSelectedOptions( oListValue ) ; +} + +function SetSelectedValue() +{ + var iIndex = oListValue.selectedIndex ; + if ( iIndex < 0 ) return ; + + var oTxtValue = document.getElementById( "txtSelValue" ) ; + + oTxtValue.value = oListValue.options[ iIndex ].value ; +} + +// Moves the selected option by a number of steps (also negative) +function ChangeOptionPosition( combo, steps ) +{ + var iActualIndex = combo.selectedIndex ; + + if ( iActualIndex < 0 ) + return ; + + var iFinalIndex = iActualIndex + steps ; + + if ( iFinalIndex < 0 ) + iFinalIndex = 0 ; + + if ( iFinalIndex > ( combo.options.length - 1 ) ) + iFinalIndex = combo.options.length - 1 ; + + if ( iActualIndex == iFinalIndex ) + return ; + + var oOption = combo.options[ iActualIndex ] ; + var sText = HTMLDecode( oOption.innerHTML ) ; + var sValue = oOption.value ; + + combo.remove( iActualIndex ) ; + + oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ; + + oOption.selected = true ; +} + +// Remove all selected options from a SELECT object +function RemoveSelectedOptions(combo) +{ + // Save the selected index + var iSelectedIndex = combo.selectedIndex ; + + var oOptions = combo.options ; + + // Remove all selected options + for ( var i = oOptions.length - 1 ; i >= 0 ; i-- ) + { + if (oOptions[i].selected) combo.remove(i) ; + } + + // Reset the selection based on the original selected index + if ( combo.options.length > 0 ) + { + if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ; + combo.selectedIndex = iSelectedIndex ; + } +} + +// Add a new option to a SELECT object (combo or list) +function AddComboOption( combo, optionText, optionValue, documentObject, index ) +{ + var oOption ; + + if ( documentObject ) + oOption = documentObject.createElement("OPTION") ; + else + oOption = document.createElement("OPTION") ; + + if ( index != null ) + combo.options.add( oOption, index ) ; + else + combo.options.add( oOption ) ; + + oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : ' ' ; + oOption.value = optionValue ; + + return oOption ; +} + +function HTMLEncode( text ) +{ + if ( !text ) + return '' ; + + text = text.replace( /&/g, '&' ) ; + text = text.replace( //g, '>' ) ; + + return text ; +} + + +function HTMLDecode( text ) +{ + if ( !text ) + return '' ; + + text = text.replace( />/g, '>' ) ; + text = text.replace( /</g, '<' ) ; + text = text.replace( /&/g, '&' ) ; + + return text ; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_smiley.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_smiley.html new file mode 100644 index 0000000..0d6f63f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_smiley.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_source.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_source.html new file mode 100644 index 0000000..d66c281 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_source.html @@ -0,0 +1,68 @@ + + + + + Source + + + + + + + + + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_specialchar.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_specialchar.html new file mode 100644 index 0000000..d7fda32 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_specialchar.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + +
        + + +
        +
             + + + + +
         
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages.html new file mode 100644 index 0000000..b380e77 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages.html @@ -0,0 +1,65 @@ + + + + + Spell Check + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js new file mode 100644 index 0000000..80af849 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js @@ -0,0 +1,87 @@ +//////////////////////////////////////////////////// +// controlWindow object +//////////////////////////////////////////////////// +function controlWindow( controlForm ) { + // private properties + this._form = controlForm; + + // public properties + this.windowType = "controlWindow"; +// this.noSuggestionSelection = "- No suggestions -"; // by FredCK + this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ; + // set up the properties for elements of the given control form + this.suggestionList = this._form.sugg; + this.evaluatedText = this._form.misword; + this.replacementText = this._form.txtsugg; + this.undoButton = this._form.btnUndo; + + // public methods + this.addSuggestion = addSuggestion; + this.clearSuggestions = clearSuggestions; + this.selectDefaultSuggestion = selectDefaultSuggestion; + this.resetForm = resetForm; + this.setSuggestedText = setSuggestedText; + this.enableUndo = enableUndo; + this.disableUndo = disableUndo; +} + +function resetForm() { + if( this._form ) { + this._form.reset(); + } +} + +function setSuggestedText() { + var slct = this.suggestionList; + var txt = this.replacementText; + var str = ""; + if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) { + str = slct.options[slct.selectedIndex].text; + } + txt.value = str; +} + +function selectDefaultSuggestion() { + var slct = this.suggestionList; + var txt = this.replacementText; + if( slct.options.length == 0 ) { + this.addSuggestion( this.noSuggestionSelection ); + } else { + slct.options[0].selected = true; + } + this.setSuggestedText(); +} + +function addSuggestion( sugg_text ) { + var slct = this.suggestionList; + if( sugg_text ) { + var i = slct.options.length; + var newOption = new Option( sugg_text, 'sugg_text'+i ); + slct.options[i] = newOption; + } +} + +function clearSuggestions() { + var slct = this.suggestionList; + for( var j = slct.length - 1; j > -1; j-- ) { + if( slct.options[j] ) { + slct.options[j] = null; + } + } +} + +function enableUndo() { + if( this.undoButton ) { + if( this.undoButton.disabled == true ) { + this.undoButton.disabled = false; + } + } +} + +function disableUndo() { + if( this.undoButton ) { + if( this.undoButton.disabled == false ) { + this.undoButton.disabled = true; + } + } +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html new file mode 100644 index 0000000..d91bcce --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html @@ -0,0 +1,153 @@ + + + + + + + +
        + + + + + + + + + + + + + + + + + + +
        Not in dictionary:
        Change to:
        + + + + + + + +
        + +
        + +
        +
           + + + + + + + + + + + + + + + + + + + + + + +
        + +    + +
        + +    + +
        + +    + +
        +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm new file mode 100644 index 0000000..27e368e --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]+>", " ", "all")> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php new file mode 100644 index 0000000..9c747c9 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php @@ -0,0 +1,199 @@ +$val ) { + # $val = str_replace( "'", "%27", $val ); + echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n"; + } +} + +# make declarations for the text input index +function print_textindex_decl( $text_input_idx ) { + echo "words[$text_input_idx] = [];\n"; + echo "suggs[$text_input_idx] = [];\n"; +} + +# set an element of the JavaScript 'words' array to a misspelled word +function print_words_elem( $word, $index, $text_input_idx ) { + echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n"; +} + + +# set an element of the JavaScript 'suggs' array to a list of suggestions +function print_suggs_elem( $suggs, $index, $text_input_idx ) { + echo "suggs[$text_input_idx][$index] = ["; + foreach( $suggs as $key=>$val ) { + if( $val ) { + echo "'" . escape_quote( $val ) . "'"; + if ( $key+1 < count( $suggs )) { + echo ", "; + } + } + } + echo "];\n"; +} + +# escape single quote +function escape_quote( $str ) { + return preg_replace ( "/'/", "\\'", $str ); +} + + +# handle a server-side error. +function error_handler( $err ) { + echo "error = '" . preg_replace( "/['\\\\]/", "\\\\$0", $err ) . "';\n"; +} + +## get the list of misspelled words. Put the results in the javascript words array +## for each misspelled word, get suggestions and put in the javascript suggs array +function print_checker_results() { + + global $aspell_prog; + global $aspell_opts; + global $tempfiledir; + global $textinputs; + global $input_separator; + $aspell_err = ""; + # create temp file + $tempfile = tempnam( $tempfiledir, 'aspell_data_' ); + + # open temp file, add the submitted text. + if( $fh = fopen( $tempfile, 'w' )) { + for( $i = 0; $i < count( $textinputs ); $i++ ) { + $text = urldecode( $textinputs[$i] ); + + // Strip all tags for the text. (by FredCK - #339 / #681) + $text = preg_replace( "/<[^>]+>/", " ", $text ) ; + + $lines = explode( "\n", $text ); + fwrite ( $fh, "%\n" ); # exit terse mode + fwrite ( $fh, "^$input_separator\n" ); + fwrite ( $fh, "!\n" ); # enter terse mode + foreach( $lines as $key=>$value ) { + # use carat on each line to escape possible aspell commands + fwrite( $fh, "^$value\n" ); + } + } + fclose( $fh ); + + # exec aspell command - redirect STDERR to STDOUT + $cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1"; + if( $aspellret = shell_exec( $cmd )) { + $linesout = explode( "\n", $aspellret ); + $index = 0; + $text_input_index = -1; + # parse each line of aspell return + foreach( $linesout as $key=>$val ) { + $chardesc = substr( $val, 0, 1 ); + # if '&', then not in dictionary but has suggestions + # if '#', then not in dictionary and no suggestions + # if '*', then it is a delimiter between text inputs + # if '@' then version info + if( $chardesc == '&' || $chardesc == '#' ) { + $line = explode( " ", $val, 5 ); + print_words_elem( $line[1], $index, $text_input_index ); + if( isset( $line[4] )) { + $suggs = explode( ", ", $line[4] ); + } else { + $suggs = array(); + } + print_suggs_elem( $suggs, $index, $text_input_index ); + $index++; + } elseif( $chardesc == '*' ) { + $text_input_index++; + print_textindex_decl( $text_input_index ); + $index = 0; + } elseif( $chardesc != '@' && $chardesc != "" ) { + # assume this is error output + $aspell_err .= $val; + } + } + if( $aspell_err ) { + $aspell_err = "Error executing `$cmd`\\n$aspell_err"; + error_handler( $aspell_err ); + } + } else { + error_handler( "System error: Aspell program execution failed (`$cmd`)" ); + } + } else { + error_handler( "System error: Could not open file '$tempfile' for writing" ); + } + + # close temp file, delete file + unlink( $tempfile ); +} + + +?> + + + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl new file mode 100644 index 0000000..fae010d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl @@ -0,0 +1,181 @@ +#!/usr/bin/perl + +use CGI qw/ :standard /; +use File::Temp qw/ tempfile tempdir /; + +# my $spellercss = '/speller/spellerStyle.css'; # by FredCK +my $spellercss = '../spellerStyle.css'; # by FredCK +# my $wordWindowSrc = '/speller/wordWindow.js'; # by FredCK +my $wordWindowSrc = '../wordWindow.js'; # by FredCK +my @textinputs = param( 'textinputs[]' ); # array +# my $aspell_cmd = 'aspell'; # by FredCK (for Linux) +my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"'; # by FredCK (for Windows) +my $lang = 'en_US'; +# my $aspell_opts = "-a --lang=$lang --encoding=utf-8"; # by FredCK +my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; # by FredCK +my $input_separator = "A"; + +# set the 'wordtext' JavaScript variable to the submitted text. +sub printTextVar { + for( my $i = 0; $i <= $#textinputs; $i++ ) { + print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n"; + } +} + +sub printTextIdxDecl { + my $idx = shift; + print "words[$idx] = [];\n"; + print "suggs[$idx] = [];\n"; +} + +sub printWordsElem { + my( $textIdx, $wordIdx, $word ) = @_; + print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n"; +} + +sub printSuggsElem { + my( $textIdx, $wordIdx, @suggs ) = @_; + print "suggs[$textIdx][$wordIdx] = ["; + for my $i ( 0..$#suggs ) { + print "'" . escapeQuote( $suggs[$i] ) . "'"; + if( $i < $#suggs ) { + print ", "; + } + } + print "];\n"; +} + +sub printCheckerResults { + my $textInputIdx = -1; + my $wordIdx = 0; + my $unhandledText; + # create temp file + my $dir = tempdir( CLEANUP => 1 ); + my( $fh, $tmpfilename ) = tempfile( DIR => $dir ); + + # temp file was created properly? + + # open temp file, add the submitted text. + for( my $i = 0; $i <= $#textinputs; $i++ ) { + $text = url_decode( $textinputs[$i] ); + # Strip all tags for the text. (by FredCK - #339 / #681) + $text =~ s/<[^>]+>/ /g; + @lines = split( /\n/, $text ); + print $fh "\%\n"; # exit terse mode + print $fh "^$input_separator\n"; + print $fh "!\n"; # enter terse mode + for my $line ( @lines ) { + # use carat on each line to escape possible aspell commands + print $fh "^$line\n"; + } + + } + # exec aspell command + my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1"; + open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return; + # parse each line of aspell return + for my $ret ( ) { + chomp( $ret ); + # if '&', then not in dictionary but has suggestions + # if '#', then not in dictionary and no suggestions + # if '*', then it is a delimiter between text inputs + if( $ret =~ /^\*/ ) { + $textInputIdx++; + printTextIdxDecl( $textInputIdx ); + $wordIdx = 0; + + } elsif( $ret =~ /^(&|#)/ ) { + my @tokens = split( " ", $ret, 5 ); + printWordsElem( $textInputIdx, $wordIdx, $tokens[1] ); + my @suggs = (); + if( $tokens[4] ) { + @suggs = split( ", ", $tokens[4] ); + } + printSuggsElem( $textInputIdx, $wordIdx, @suggs ); + $wordIdx++; + } else { + $unhandledText .= $ret; + } + } + close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return; +} + +sub escapeQuote { + my $str = shift; + $str =~ s/'/\\'/g; + return $str; +} + +sub handleError { + my $err = shift; + print "error = '" . escapeQuote( $err ) . "';\n"; +} + +sub url_decode { + local $_ = @_ ? shift : $_; + defined or return; + # change + signs to spaces + tr/+/ /; + # change hex escapes to the proper characters + s/%([a-fA-F0-9]{2})/pack "H2", $1/eg; + return $_; +} + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Display HTML +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + +print < + + + + + + + + + + + + + +EOF diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js new file mode 100644 index 0000000..c85be9a --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js @@ -0,0 +1,461 @@ +//////////////////////////////////////////////////// +// spellChecker.js +// +// spellChecker object +// +// This file is sourced on web pages that have a textarea object to evaluate +// for spelling. It includes the implementation for the spellCheckObject. +// +//////////////////////////////////////////////////// + + +// constructor +function spellChecker( textObject ) { + + // public properties - configurable +// this.popUpUrl = '/speller/spellchecker.html'; // by FredCK + this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html'; // by FredCK + this.popUpName = 'spellchecker'; +// this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes"; // by FredCK + this.popUpProps = null ; // by FredCK +// this.spellCheckScript = '/speller/server-scripts/spellchecker.php'; // by FredCK + //this.spellCheckScript = '/cgi-bin/spellchecker.pl'; + + // values used to keep track of what happened to a word + this.replWordFlag = "R"; // single replace + this.ignrWordFlag = "I"; // single ignore + this.replAllFlag = "RA"; // replace all occurances + this.ignrAllFlag = "IA"; // ignore all occurances + this.fromReplAll = "~RA"; // an occurance of a "replace all" word + this.fromIgnrAll = "~IA"; // an occurance of a "ignore all" word + // properties set at run time + this.wordFlags = new Array(); + this.currentTextIndex = 0; + this.currentWordIndex = 0; + this.spellCheckerWin = null; + this.controlWin = null; + this.wordWin = null; + this.textArea = textObject; // deprecated + this.textInputs = arguments; + + // private methods + this._spellcheck = _spellcheck; + this._getSuggestions = _getSuggestions; + this._setAsIgnored = _setAsIgnored; + this._getTotalReplaced = _getTotalReplaced; + this._setWordText = _setWordText; + this._getFormInputs = _getFormInputs; + + // public methods + this.openChecker = openChecker; + this.startCheck = startCheck; + this.checkTextBoxes = checkTextBoxes; + this.checkTextAreas = checkTextAreas; + this.spellCheckAll = spellCheckAll; + this.ignoreWord = ignoreWord; + this.ignoreAll = ignoreAll; + this.replaceWord = replaceWord; + this.replaceAll = replaceAll; + this.terminateSpell = terminateSpell; + this.undo = undo; + + // set the current window's "speller" property to the instance of this class. + // this object can now be referenced by child windows/frames. + window.speller = this; +} + +// call this method to check all text boxes (and only text boxes) in the HTML document +function checkTextBoxes() { + this.textInputs = this._getFormInputs( "^text$" ); + this.openChecker(); +} + +// call this method to check all textareas (and only textareas ) in the HTML document +function checkTextAreas() { + this.textInputs = this._getFormInputs( "^textarea$" ); + this.openChecker(); +} + +// call this method to check all text boxes and textareas in the HTML document +function spellCheckAll() { + this.textInputs = this._getFormInputs( "^text(area)?$" ); + this.openChecker(); +} + +// call this method to check text boxe(s) and/or textarea(s) that were passed in to the +// object's constructor or to the textInputs property +function openChecker() { + this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps ); + if( !this.spellCheckerWin.opener ) { + this.spellCheckerWin.opener = window; + } +} + +function startCheck( wordWindowObj, controlWindowObj ) { + + // set properties from args + this.wordWin = wordWindowObj; + this.controlWin = controlWindowObj; + + // reset properties + this.wordWin.resetForm(); + this.controlWin.resetForm(); + this.currentTextIndex = 0; + this.currentWordIndex = 0; + // initialize the flags to an array - one element for each text input + this.wordFlags = new Array( this.wordWin.textInputs.length ); + // each element will be an array that keeps track of each word in the text + for( var i=0; i wi ) || i > ti ) { + // future word: set as "from ignore all" if + // 1) do not already have a flag and + // 2) have the same value as current word + if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl ) + && ( !this.wordFlags[i][j] )) { + this._setAsIgnored( i, j, this.fromIgnrAll ); + } + } + } + } + + // finally, move on + this.currentWordIndex++; + this._spellcheck(); + return true; +} + +function replaceWord() { + var wi = this.currentWordIndex; + var ti = this.currentTextIndex; + if( !this.wordWin ) { + alert( 'Error: Word frame not available.' ); + return false; + } + if( !this.wordWin.getTextVal( ti, wi )) { + alert( 'Error: "Not in dictionary" text is missing' ); + return false; + } + if( !this.controlWin.replacementText ) { + return false ; + } + var txt = this.controlWin.replacementText; + if( txt.value ) { + var newspell = new String( txt.value ); + if( this._setWordText( ti, wi, newspell, this.replWordFlag )) { + this.currentWordIndex++; + this._spellcheck(); + } + } + return true; +} + +function replaceAll() { + var ti = this.currentTextIndex; + var wi = this.currentWordIndex; + if( !this.wordWin ) { + alert( 'Error: Word frame not available.' ); + return false; + } + var s_word_to_repl = this.wordWin.getTextVal( ti, wi ); + if( !s_word_to_repl ) { + alert( 'Error: "Not in dictionary" text is missing' ); + return false; + } + var txt = this.controlWin.replacementText; + if( !txt.value ) return false; + var newspell = new String( txt.value ); + + // set this word as a "replace all" word. + this._setWordText( ti, wi, newspell, this.replAllFlag ); + + // loop through all the words after this word + for( var i = ti; i < this.wordWin.textInputs.length; i++ ) { + for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) { + if(( i == ti && j > wi ) || i > ti ) { + // future word: set word text to s_word_to_repl if + // 1) do not already have a flag and + // 2) have the same value as s_word_to_repl + if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl ) + && ( !this.wordFlags[i][j] )) { + this._setWordText( i, j, newspell, this.fromReplAll ); + } + } + } + } + + // finally, move on + this.currentWordIndex++; + this._spellcheck(); + return true; +} + +function terminateSpell() { + // called when we have reached the end of the spell checking. + var msg = ""; // by FredCK + var numrepl = this._getTotalReplaced(); + if( numrepl == 0 ) { + // see if there were no misspellings to begin with + if( !this.wordWin ) { + msg = ""; + } else { + if( this.wordWin.totalMisspellings() ) { +// msg += "No words changed."; // by FredCK + msg += FCKLang.DlgSpellNoChanges ; // by FredCK + } else { +// msg += "No misspellings found."; // by FredCK + msg += FCKLang.DlgSpellNoMispell ; // by FredCK + } + } + } else if( numrepl == 1 ) { +// msg += "One word changed."; // by FredCK + msg += FCKLang.DlgSpellOneChange ; // by FredCK + } else { +// msg += numrepl + " words changed."; // by FredCK + msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ; + } + if( msg ) { +// msg += "\n"; // by FredCK + alert( msg ); + } + + if( numrepl > 0 ) { + // update the text field(s) on the opener window + for( var i = 0; i < this.textInputs.length; i++ ) { + // this.textArea.value = this.wordWin.text; + if( this.wordWin ) { + if( this.wordWin.textInputs[i] ) { + this.textInputs[i].value = this.wordWin.textInputs[i]; + } + } + } + } + + // return back to the calling window +// this.spellCheckerWin.close(); // by FredCK + if ( typeof( this.OnFinished ) == 'function' ) // by FredCK + this.OnFinished(numrepl) ; // by FredCK + + return true; +} + +function undo() { + // skip if this is the first word! + var ti = this.currentTextIndex; + var wi = this.currentWordIndex; + + if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) { + this.wordWin.removeFocus( ti, wi ); + + // go back to the last word index that was acted upon + do { + // if the current word index is zero then reset the seed + if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) { + this.currentTextIndex--; + this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1; + if( this.currentWordIndex < 0 ) this.currentWordIndex = 0; + } else { + if( this.currentWordIndex > 0 ) { + this.currentWordIndex--; + } + } + } while ( + this.wordWin.totalWords( this.currentTextIndex ) == 0 + || this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll + || this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll + ); + + var text_idx = this.currentTextIndex; + var idx = this.currentWordIndex; + var preReplSpell = this.wordWin.originalSpellings[text_idx][idx]; + + // if we got back to the first word then set the Undo button back to disabled + if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) { + this.controlWin.disableUndo(); + } + + var i, j, origSpell ; + // examine what happened to this current word. + switch( this.wordFlags[text_idx][idx] ) { + // replace all: go through this and all the future occurances of the word + // and revert them all to the original spelling and clear their flags + case this.replAllFlag : + for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) { + for( j = 0; j < this.wordWin.totalWords( i ); j++ ) { + if(( i == text_idx && j >= idx ) || i > text_idx ) { + origSpell = this.wordWin.originalSpellings[i][j]; + if( origSpell == preReplSpell ) { + this._setWordText ( i, j, origSpell, undefined ); + } + } + } + } + break; + + // ignore all: go through all the future occurances of the word + // and clear their flags + case this.ignrAllFlag : + for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) { + for( j = 0; j < this.wordWin.totalWords( i ); j++ ) { + if(( i == text_idx && j >= idx ) || i > text_idx ) { + origSpell = this.wordWin.originalSpellings[i][j]; + if( origSpell == preReplSpell ) { + this.wordFlags[i][j] = undefined; + } + } + } + } + break; + + // replace: revert the word to its original spelling + case this.replWordFlag : + this._setWordText ( text_idx, idx, preReplSpell, undefined ); + break; + } + + // For all four cases, clear the wordFlag of this word. re-start the process + this.wordFlags[text_idx][idx] = undefined; + this._spellcheck(); + } +} + +function _spellcheck() { + var ww = this.wordWin; + + // check if this is the last word in the current text element + if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) { + this.currentTextIndex++; + this.currentWordIndex = 0; + // keep going if we're not yet past the last text element + if( this.currentTextIndex < this.wordWin.textInputs.length ) { + this._spellcheck(); + return; + } else { + this.terminateSpell(); + return; + } + } + + // if this is after the first one make sure the Undo button is enabled + if( this.currentWordIndex > 0 ) { + this.controlWin.enableUndo(); + } + + // skip the current word if it has already been worked on + if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) { + // increment the global current word index and move on. + this.currentWordIndex++; + this._spellcheck(); + } else { + var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex ); + if( evalText ) { + this.controlWin.evaluatedText.value = evalText; + ww.setFocus( this.currentTextIndex, this.currentWordIndex ); + this._getSuggestions( this.currentTextIndex, this.currentWordIndex ); + } + } +} + +function _getSuggestions( text_num, word_num ) { + this.controlWin.clearSuggestions(); + // add suggestion in list for each suggested word. + // get the array of suggested words out of the + // three-dimensional array containing all suggestions. + var a_suggests = this.wordWin.suggestions[text_num][word_num]; + if( a_suggests ) { + // got an array of suggestions. + for( var ii = 0; ii < a_suggests.length; ii++ ) { + this.controlWin.addSuggestion( a_suggests[ii] ); + } + } + this.controlWin.selectDefaultSuggestion(); +} + +function _setAsIgnored( text_num, word_num, flag ) { + // set the UI + this.wordWin.removeFocus( text_num, word_num ); + // do the bookkeeping + this.wordFlags[text_num][word_num] = flag; + return true; +} + +function _getTotalReplaced() { + var i_replaced = 0; + for( var i = 0; i < this.wordFlags.length; i++ ) { + for( var j = 0; j < this.wordFlags[i].length; j++ ) { + if(( this.wordFlags[i][j] == this.replWordFlag ) + || ( this.wordFlags[i][j] == this.replAllFlag ) + || ( this.wordFlags[i][j] == this.fromReplAll )) { + i_replaced++; + } + } + } + return i_replaced; +} + +function _setWordText( text_num, word_num, newText, flag ) { + // set the UI and form inputs + this.wordWin.setText( text_num, word_num, newText ); + // keep track of what happened to this word: + this.wordFlags[text_num][word_num] = flag; + return true; +} + +function _getFormInputs( inputPattern ) { + var inputs = new Array(); + for( var i = 0; i < document.forms.length; i++ ) { + for( var j = 0; j < document.forms[i].elements.length; j++ ) { + if( document.forms[i].elements[j].type.match( inputPattern )) { + inputs[inputs.length] = document.forms[i].elements[j]; + } + } + } + return inputs; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html new file mode 100644 index 0000000..cbcd7db --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html @@ -0,0 +1,71 @@ + + + + + + +Speller Pages + + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css new file mode 100644 index 0000000..9928086 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css @@ -0,0 +1,49 @@ +.blend { + font-family: courier new; + font-size: 10pt; + border: 0; + margin-bottom:-1; +} +.normalLabel { + font-size:8pt; +} +.normalText { + font-family:arial, helvetica, sans-serif; + font-size:10pt; + color:000000; + background-color:FFFFFF; +} +.plainText { + font-family: courier new, courier, monospace; + font-size: 10pt; + color:000000; + background-color:FFFFFF; +} +.controlWindowBody { + font-family:arial, helvetica, sans-serif; + font-size:8pt; + padding: 7px ; /* by FredCK */ + margin: 0px ; /* by FredCK */ + /* color:000000; by FredCK */ + /* background-color:DADADA; by FredCK */ +} +.readonlyInput { + background-color:DADADA; + color:000000; + font-size:8pt; + width:392px; +} +.textDefault { + font-size:8pt; + width: 200px; +} +.buttonDefault { + width:90px; + height:22px; + font-size:8pt; +} +.suggSlct { + width:200px; + margin-top:2; + font-size:8pt; +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js new file mode 100644 index 0000000..7990296 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js @@ -0,0 +1,272 @@ +//////////////////////////////////////////////////// +// wordWindow object +//////////////////////////////////////////////////// +function wordWindow() { + // private properties + this._forms = []; + + // private methods + this._getWordObject = _getWordObject; + //this._getSpellerObject = _getSpellerObject; + this._wordInputStr = _wordInputStr; + this._adjustIndexes = _adjustIndexes; + this._isWordChar = _isWordChar; + this._lastPos = _lastPos; + + // public properties + this.wordChar = /[a-zA-Z]/; + this.windowType = "wordWindow"; + this.originalSpellings = new Array(); + this.suggestions = new Array(); + this.checkWordBgColor = "pink"; + this.normWordBgColor = "white"; + this.text = ""; + this.textInputs = new Array(); + this.indexes = new Array(); + //this.speller = this._getSpellerObject(); + + // public methods + this.resetForm = resetForm; + this.totalMisspellings = totalMisspellings; + this.totalWords = totalWords; + this.totalPreviousWords = totalPreviousWords; + //this.getTextObjectArray = getTextObjectArray; + this.getTextVal = getTextVal; + this.setFocus = setFocus; + this.removeFocus = removeFocus; + this.setText = setText; + //this.getTotalWords = getTotalWords; + this.writeBody = writeBody; + this.printForHtml = printForHtml; +} + +function resetForm() { + if( this._forms ) { + for( var i = 0; i < this._forms.length; i++ ) { + this._forms[i].reset(); + } + } + return true; +} + +function totalMisspellings() { + var total_words = 0; + for( var i = 0; i < this.textInputs.length; i++ ) { + total_words += this.totalWords( i ); + } + return total_words; +} + +function totalWords( textIndex ) { + return this.originalSpellings[textIndex].length; +} + +function totalPreviousWords( textIndex, wordIndex ) { + var total_words = 0; + for( var i = 0; i <= textIndex; i++ ) { + for( var j = 0; j < this.totalWords( i ); j++ ) { + if( i == textIndex && j == wordIndex ) { + break; + } else { + total_words++; + } + } + } + return total_words; +} + +//function getTextObjectArray() { +// return this._form.elements; +//} + +function getTextVal( textIndex, wordIndex ) { + var word = this._getWordObject( textIndex, wordIndex ); + if( word ) { + return word.value; + } +} + +function setFocus( textIndex, wordIndex ) { + var word = this._getWordObject( textIndex, wordIndex ); + if( word ) { + if( word.type == "text" ) { + word.focus(); + word.style.backgroundColor = this.checkWordBgColor; + } + } +} + +function removeFocus( textIndex, wordIndex ) { + var word = this._getWordObject( textIndex, wordIndex ); + if( word ) { + if( word.type == "text" ) { + word.blur(); + word.style.backgroundColor = this.normWordBgColor; + } + } +} + +function setText( textIndex, wordIndex, newText ) { + var word = this._getWordObject( textIndex, wordIndex ); + var beginStr; + var endStr; + if( word ) { + var pos = this.indexes[textIndex][wordIndex]; + var oldText = word.value; + // update the text given the index of the string + beginStr = this.textInputs[textIndex].substring( 0, pos ); + endStr = this.textInputs[textIndex].substring( + pos + oldText.length, + this.textInputs[textIndex].length + ); + this.textInputs[textIndex] = beginStr + newText + endStr; + + // adjust the indexes on the stack given the differences in + // length between the new word and old word. + var lengthDiff = newText.length - oldText.length; + this._adjustIndexes( textIndex, wordIndex, lengthDiff ); + + word.size = newText.length; + word.value = newText; + this.removeFocus( textIndex, wordIndex ); + } +} + + +function writeBody() { + var d = window.document; + var is_html = false; + + d.open(); + + // iterate through each text input. + for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) { + var end_idx = 0; + var begin_idx = 0; + d.writeln( '
        ' ); + var wordtxt = this.textInputs[txtid]; + this.indexes[txtid] = []; + + if( wordtxt ) { + var orig = this.originalSpellings[txtid]; + if( !orig ) break; + + //!!! plain text, or HTML mode? + d.writeln( '
        ' ); + // iterate through each occurrence of a misspelled word. + for( var i = 0; i < orig.length; i++ ) { + // find the position of the current misspelled word, + // starting at the last misspelled word. + // and keep looking if it's a substring of another word + do { + begin_idx = wordtxt.indexOf( orig[i], end_idx ); + end_idx = begin_idx + orig[i].length; + // word not found? messed up! + if( begin_idx == -1 ) break; + // look at the characters immediately before and after + // the word. If they are word characters we'll keep looking. + var before_char = wordtxt.charAt( begin_idx - 1 ); + var after_char = wordtxt.charAt( end_idx ); + } while ( + this._isWordChar( before_char ) + || this._isWordChar( after_char ) + ); + + // keep track of its position in the original text. + this.indexes[txtid][i] = begin_idx; + + // write out the characters before the current misspelled word + for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) { + // !!! html mode? make it html compatible + d.write( this.printForHtml( wordtxt.charAt( j ))); + } + + // write out the misspelled word. + d.write( this._wordInputStr( orig[i] )); + + // if it's the last word, write out the rest of the text + if( i == orig.length-1 ){ + d.write( printForHtml( wordtxt.substr( end_idx ))); + } + } + + d.writeln( '
        ' ); + + } + d.writeln( '
        ' ); + } + //for ( var j = 0; j < d.forms.length; j++ ) { + // alert( d.forms[j].name ); + // for( var k = 0; k < d.forms[j].elements.length; k++ ) { + // alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value ); + // } + //} + + // set the _forms property + this._forms = d.forms; + d.close(); +} + +// return the character index in the full text after the last word we evaluated +function _lastPos( txtid, idx ) { + if( idx > 0 ) + return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length; + else + return 0; +} + +function printForHtml( n ) { + return n ; // by FredCK +/* + var htmlstr = n; + if( htmlstr.length == 1 ) { + // do simple case statement if it's just one character + switch ( n ) { + case "\n": + htmlstr = '
        '; + break; + case "<": + htmlstr = '<'; + break; + case ">": + htmlstr = '>'; + break; + } + return htmlstr; + } else { + htmlstr = htmlstr.replace( //g, '>' ); + htmlstr = htmlstr.replace( /\n/g, '
        ' ); + return htmlstr; + } +*/ +} + +function _isWordChar( letter ) { + if( letter.search( this.wordChar ) == -1 ) { + return false; + } else { + return true; + } +} + +function _getWordObject( textIndex, wordIndex ) { + if( this._forms[textIndex] ) { + if( this._forms[textIndex].elements[wordIndex] ) { + return this._forms[textIndex].elements[wordIndex]; + } + } + return null; +} + +function _wordInputStr( word ) { + var str = ''; + return str; +} + +function _adjustIndexes( textIndex, wordIndex, lengthDiff ) { + for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) { + this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff; + } +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_table.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_table.html new file mode 100644 index 0000000..e3792d7 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_table.html @@ -0,0 +1,298 @@ + + + + + Table Properties + + + + + + + + + + +
        + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + +
        + Rows: +  
        + Columns: +  
        +   +  
        + Border size: +  
        + Alignment: +  
        +
        +     + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Width: +   +  
        + Height: +   +  pixels
        +   +   +  
        + Cell spacing: +   +  
        + Cell padding: +   +  
        +
        + + + + + + + + + + + +
        + Caption +   +
        + Summary +   +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_tablecell.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_tablecell.html new file mode 100644 index 0000000..3d74296 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_tablecell.html @@ -0,0 +1,257 @@ + + + + + Table Cell Properties + + + + + + + + + + +
        + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Width: +   
        + Height: +   pixels
        +   +  
        + Word Wrap: +  
        +   +  
        + Horizontal Alignment: +  
        + Vertical Alignment: +  
        +
        +     + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Rows Span: +   + +
        + Columns Span: +   + +
        +   +   +  
        + Background Color: +   +   +
        + Border Color: +   +   +
        +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template.html new file mode 100644 index 0000000..4f3629b --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + +
        + Please select the template to open in the editor
        + (the actual contents will be lost):
        +
        +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template1.gif b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template1.gif new file mode 100644 index 0000000..efdabbe Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template1.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template2.gif b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template2.gif new file mode 100644 index 0000000..d1cebb3 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template2.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template3.gif b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template3.gif new file mode 100644 index 0000000..db41cb4 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_template/images/template3.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textarea.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textarea.html new file mode 100644 index 0000000..3a1c56d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textarea.html @@ -0,0 +1,94 @@ + + + + + Text Area Properties + + + + + + + + + + +
        + + + + +
        + Name
        + + Collumns
        + +
        + Rows
        + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textfield.html b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textfield.html new file mode 100644 index 0000000..cf3ce03 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dialog/fck_textfield.html @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + +
        + Name
        + +
        + + Value
        + +
        + Character Width
        + +
        + + Maximum Characters
        + +
        + Type
        + +
        +   +
        +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_dtd_test.html b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_dtd_test.html new file mode 100644 index 0000000..c149d15 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_dtd_test.html @@ -0,0 +1,41 @@ + + + + DTD Test Page + + + + + +

        + DTD Contents +

        + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10strict.js b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10strict.js new file mode 100644 index 0000000..0849b52 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10strict.js @@ -0,0 +1,116 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Contains the DTD mapping for XHTML 1.0 Strict. + * This file was automatically generated from the file: xhtml10-strict.dtd + */ +FCK.DTD = (function() +{ + var X = FCKTools.Merge ; + + var H,I,J,K,C,L,M,A,B,D,E,G,N,F ; + A = {ins:1, del:1, script:1} ; + B = {hr:1, ul:1, div:1, blockquote:1, noscript:1, table:1, address:1, pre:1, p:1, h5:1, dl:1, h4:1, ol:1, h6:1, h1:1, h3:1, h2:1} ; + C = X({fieldset:1}, B) ; + D = X({sub:1, bdo:1, 'var':1, sup:1, br:1, kbd:1, map:1, samp:1, b:1, acronym:1, '#':1, abbr:1, code:1, i:1, cite:1, tt:1, strong:1, q:1, em:1, big:1, small:1, span:1, dfn:1}, A) ; + E = X({img:1, object:1}, D) ; + F = {input:1, button:1, textarea:1, select:1, label:1} ; + G = X({a:1}, F) ; + H = {img:1, noscript:1, br:1, kbd:1, button:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, select:1, '#':1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, strong:1, textarea:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, map:1, dl:1, del:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, address:1, tt:1, q:1, pre:1, p:1, em:1, dfn:1} ; + + I = X({form:1, fieldset:1}, B, E, G) ; + J = {tr:1} ; + K = {'#':1} ; + L = X(E, G) ; + M = {li:1} ; + N = X({form:1}, A, C) ; + + return { + col: {}, + tr: {td:1, th:1}, + img: {}, + colgroup: {col:1}, + noscript: N, + td: I, + br: {}, + th: I, + kbd: L, + button: X(B, E), + h5: L, + h4: L, + samp: L, + h6: L, + ol: M, + h1: L, + h3: L, + option: K, + h2: L, + form: X(A, C), + select: {optgroup:1, option:1}, + ins: I, + abbr: L, + label: L, + code: L, + table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1}, + script: K, + tfoot: J, + cite: L, + li: I, + input: {}, + strong: L, + textarea: K, + big: L, + small: L, + span: L, + dt: L, + hr: {}, + sub: L, + optgroup: {option:1}, + bdo: L, + param: {}, + 'var': L, + div: I, + object: X({param:1}, H), + sup: L, + dd: I, + area: {}, + map: X({form:1, area:1}, A, C), + dl: {dt:1, dd:1}, + del: I, + fieldset: X({legend:1}, H), + thead: J, + ul: M, + acronym: L, + b: L, + a: X({img:1, object:1}, D, F), + blockquote: N, + caption: L, + i: L, + tbody: J, + address: L, + tt: L, + legend: L, + q: L, + pre: X({a:1}, D, F), + p: L, + em: L, + dfn: L + } ; +})() ; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10transitional.js b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10transitional.js new file mode 100644 index 0000000..5857ea9 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/dtd/fck_xhtml10transitional.js @@ -0,0 +1,140 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Contains the DTD mapping for XHTML 1.0 Transitional. + * This file was automatically generated from the file: xhtml10-transitional.dtd + */ +FCK.DTD = (function() +{ + var X = FCKTools.Merge ; + + var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I ; + A = {isindex:1, fieldset:1} ; + B = {input:1, button:1, select:1, textarea:1, label:1} ; + C = X({a:1}, B) ; + D = X({iframe:1}, C) ; + E = {hr:1, ul:1, menu:1, div:1, blockquote:1, noscript:1, table:1, center:1, address:1, dir:1, pre:1, h5:1, dl:1, h4:1, noframes:1, h6:1, ol:1, h1:1, h3:1, h2:1} ; + F = {ins:1, del:1, script:1} ; + G = X({b:1, acronym:1, bdo:1, 'var':1, '#':1, abbr:1, code:1, br:1, i:1, cite:1, kbd:1, u:1, strike:1, s:1, tt:1, strong:1, q:1, samp:1, em:1, dfn:1, span:1}, F) ; + H = X({sub:1, img:1, object:1, sup:1, basefont:1, map:1, applet:1, font:1, big:1, small:1}, G) ; + I = X({p:1}, H) ; + J = X({iframe:1}, H, B) ; + K = {img:1, noscript:1, br:1, kbd:1, center:1, button:1, basefont:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, font:1, '#':1, select:1, menu:1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, iframe:1, strong:1, textarea:1, noframes:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, strike:1, dir:1, map:1, dl:1, applet:1, del:1, isindex:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, u:1, s:1, tt:1, address:1, q:1, pre:1, p:1, em:1, dfn:1} ; + + L = X({a:1}, J) ; + M = {tr:1} ; + N = {'#':1} ; + O = X({param:1}, K) ; + P = X({form:1}, A, D, E, I) ; + Q = {li:1} ; + + return { + col: {}, + tr: {td:1, th:1}, + img: {}, + colgroup: {col:1}, + noscript: P, + td: P, + br: {}, + th: P, + center: P, + kbd: L, + button: X(I, E), + basefont: {}, + h5: L, + h4: L, + samp: L, + h6: L, + ol: Q, + h1: L, + h3: L, + option: N, + h2: L, + form: X(A, D, E, I), + select: {optgroup:1, option:1}, + font: J, // Changed from L to J (see (1)) + ins: P, + menu: Q, + abbr: L, + label: L, + table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1}, + code: L, + script: N, + tfoot: M, + cite: L, + li: P, + input: {}, + iframe: P, + strong: J, // Changed from L to J (see (1)) + textarea: N, + noframes: P, + big: J, // Changed from L to J (see (1)) + small: J, // Changed from L to J (see (1)) + span: J, // Changed from L to J (see (1)) + hr: {}, + dt: L, + sub: J, // Changed from L to J (see (1)) + optgroup: {option:1}, + param: {}, + bdo: L, + 'var': J, // Changed from L to J (see (1)) + div: P, + object: O, + sup: J, // Changed from L to J (see (1)) + dd: P, + strike: J, // Changed from L to J (see (1)) + area: {}, + dir: Q, + map: X({area:1, form:1, p:1}, A, F, E), + applet: O, + dl: {dt:1, dd:1}, + del: P, + isindex: {}, + fieldset: X({legend:1}, K), + thead: M, + ul: Q, + acronym: L, + b: J, // Changed from L to J (see (1)) + a: J, + blockquote: P, + caption: L, + i: J, // Changed from L to J (see (1)) + u: J, // Changed from L to J (see (1)) + tbody: M, + s: L, + address: X(D, I), + tt: J, // Changed from L to J (see (1)) + legend: L, + q: L, + pre: X(G, C), + p: L, + em: J, // Changed from L to J (see (1)) + dfn: L + } ; +})() ; + +/* + Notes: + (1) According to the DTD, many elements, like accept elements + inside of them. But, to produce better output results, we have manually + changed the map to avoid breaking the links on pieces, having + "this is a link test", instead of + "this is a link test". +*/ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/fckdebug.html b/ehcp/net2ftp/plugins/fckeditor/editor/fckdebug.html new file mode 100644 index 0000000..ddb6224 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/fckdebug.html @@ -0,0 +1,153 @@ + + + + + FCKeditor Debug Window + + + + + + + + + + + +
        + + + + + +
        + FCKeditor Debug Window +
        +
        + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/fckdialog.html b/ehcp/net2ftp/plugins/fckeditor/editor/fckdialog.html new file mode 100644 index 0000000..0d2dc5d --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/fckdialog.html @@ -0,0 +1,783 @@ + + + + + + + + + + +
        + +
        +
        + + + + + +
          + +   + +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + + + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.html b/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.html new file mode 100644 index 0000000..a1dc374 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.html @@ -0,0 +1,278 @@ + + + + + FCKeditor + + + + + + + + + + + + + + + + + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.original.html b/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.original.html new file mode 100644 index 0000000..c8572d5 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/fckeditor.original.html @@ -0,0 +1,385 @@ + + + + + FCKeditor + + + + + + + + + + + + + + + + + + +
        + + diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/anchor.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/anchor.gif new file mode 100644 index 0000000..5aa797b Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/anchor.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_ltr.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_ltr.gif new file mode 100644 index 0000000..9c59bfe Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_ltr.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_rtl.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_rtl.gif new file mode 100644 index 0000000..22e8649 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/arrow_rtl.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angel_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angel_smile.gif new file mode 100644 index 0000000..a95e053 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angel_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angry_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angry_smile.gif new file mode 100644 index 0000000..c667c5d Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/angry_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/broken_heart.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/broken_heart.gif new file mode 100644 index 0000000..938cce1 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/broken_heart.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cake.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cake.gif new file mode 100644 index 0000000..f6489d7 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cake.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/confused_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/confused_smile.gif new file mode 100644 index 0000000..aeb0539 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/confused_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cry_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cry_smile.gif new file mode 100644 index 0000000..0758f42 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/cry_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/devil_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/devil_smile.gif new file mode 100644 index 0000000..15518d7 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/devil_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/embaressed_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/embaressed_smile.gif new file mode 100644 index 0000000..c431946 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/embaressed_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/envelope.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/envelope.gif new file mode 100644 index 0000000..66d3656 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/envelope.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/heart.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/heart.gif new file mode 100644 index 0000000..305714f Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/heart.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/kiss.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/kiss.gif new file mode 100644 index 0000000..f840ea6 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/kiss.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/lightbulb.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/lightbulb.gif new file mode 100644 index 0000000..863be6e Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/lightbulb.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/omg_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/omg_smile.gif new file mode 100644 index 0000000..aabc7fd Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/omg_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/regular_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/regular_smile.gif new file mode 100644 index 0000000..33f297e Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/regular_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/sad_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/sad_smile.gif new file mode 100644 index 0000000..dfb78ef Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/sad_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/shades_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/shades_smile.gif new file mode 100644 index 0000000..157df77 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/shades_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/teeth_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/teeth_smile.gif new file mode 100644 index 0000000..26b5a55 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/teeth_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_down.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_down.gif new file mode 100644 index 0000000..f53ee72 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_down.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_up.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_up.gif new file mode 100644 index 0000000..7e8c746 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/thumbs_up.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/tounge_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/tounge_smile.gif new file mode 100644 index 0000000..b87ec44 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/tounge_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif new file mode 100644 index 0000000..c074122 Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/wink_smile.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/wink_smile.gif new file mode 100644 index 0000000..eefe61d Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/smiley/msn/wink_smile.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/images/spacer.gif b/ehcp/net2ftp/plugins/fckeditor/editor/images/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/plugins/fckeditor/editor/images/spacer.gif differ diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/js/fckadobeair.js b/ehcp/net2ftp/plugins/fckeditor/editor/js/fckadobeair.js new file mode 100644 index 0000000..a010d68 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/js/fckadobeair.js @@ -0,0 +1,176 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Compatibility code for Adobe AIR. + */ + +if ( FCKBrowserInfo.IsAIR ) +{ + var FCKAdobeAIR = (function() + { + /* + * ### Private functions. + */ + + var getDocumentHead = function( doc ) + { + var head ; + var heads = doc.getElementsByTagName( 'head' ) ; + + if( heads && heads[0] ) + head = heads[0] ; + else + { + head = doc.createElement( 'head' ) ; + doc.documentElement.insertBefore( head, doc.documentElement.firstChild ) ; + } + + return head ; + } ; + + /* + * ### Public interface. + */ + return { + FCKeditorAPI_Evaluate : function( parentWindow, script ) + { + // TODO : This one doesn't work always. The parent window will + // point to an anonymous function in this window. If this + // window is destroyied the parent window will be pointing to + // an invalid reference. + + // Evaluate the script in this window. + eval( script ) ; + + // Point the FCKeditorAPI property of the parent window to the + // local reference. + parentWindow.FCKeditorAPI = window.FCKeditorAPI ; + }, + + EditingArea_Start : function( doc, html ) + { + // Get the HTML for the . + var headInnerHtml = html.match( /([\s\S]*)<\/head>/i )[1] ; + + if ( headInnerHtml && headInnerHtml.length > 0 ) + { + // Inject the HTML inside a
        . + // Do that before getDocumentHead because WebKit moves + // elements to the at this point. + var div = doc.createElement( 'div' ) ; + div.innerHTML = headInnerHtml ; + + // Move the
        nodes to . + FCKDomTools.MoveChildren( div, getDocumentHead( doc ) ) ; + } + + doc.body.innerHTML = html.match( /([\s\S]*)<\/body>/i )[1] ; + + //prevent clicking on hyperlinks and navigating away + doc.addEventListener('click', function( ev ) + { + ev.preventDefault() ; + ev.stopPropagation() ; + }, true ) ; + }, + + Panel_Contructor : function( doc, baseLocation ) + { + var head = getDocumentHead( doc ) ; + + // Set the href. + head.appendChild( doc.createElement('base') ).href = baseLocation ; + + doc.body.style.margin = '0px' ; + doc.body.style.padding = '0px' ; + }, + + ToolbarSet_GetOutElement : function( win, outMatch ) + { + var toolbarTarget = win.parent ; + + var targetWindowParts = outMatch[1].split( '.' ) ; + while ( targetWindowParts.length > 0 ) + { + var part = targetWindowParts.shift() ; + if ( part.length > 0 ) + toolbarTarget = toolbarTarget[ part ] ; + } + + toolbarTarget = toolbarTarget.document.getElementById( outMatch[2] ) ; + }, + + ToolbarSet_InitOutFrame : function( doc ) + { + var head = getDocumentHead( doc ) ; + + head.appendChild( doc.createElement('base') ).href = window.document.location ; + + var targetWindow = doc.defaultView; + + targetWindow.adjust = function() + { + targetWindow.frameElement.height = doc.body.scrollHeight; + } ; + + targetWindow.onresize = targetWindow.adjust ; + targetWindow.setTimeout( targetWindow.adjust, 0 ) ; + + doc.body.style.overflow = 'hidden'; + doc.body.innerHTML = document.getElementById( 'xToolbarSpace' ).innerHTML ; + } + } ; + })(); + + /* + * ### Overrides + */ + ( function() + { + // Save references for override reuse. + var _Original_FCKPanel_Window_OnFocus = FCKPanel_Window_OnFocus ; + var _Original_FCKPanel_Window_OnBlur = FCKPanel_Window_OnBlur ; + var _Original_FCK_StartEditor = FCK.StartEditor ; + + FCKPanel_Window_OnFocus = function( e, panel ) + { + // Call the original implementation. + _Original_FCKPanel_Window_OnFocus.call( this, e, panel ) ; + + if ( panel._focusTimer ) + clearTimeout( panel._focusTimer ) ; + } + + FCKPanel_Window_OnBlur = function( e, panel ) + { + // Delay the execution of the original function. + panel._focusTimer = FCKTools.SetTimeout( _Original_FCKPanel_Window_OnBlur, 100, this, [ e, panel ] ) ; + } + + FCK.StartEditor = function() + { + // Force pointing to the CSS files instead of using the inline CSS cached styles. + window.FCK_InternalCSS = FCKConfig.FullBasePath + 'css/fck_internal.css' ; + window.FCK_ShowTableBordersCSS = FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css' ; + + _Original_FCK_StartEditor.apply( this, arguments ) ; + } + })(); +} diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/js/fckeditorcode_gecko.js b/ehcp/net2ftp/plugins/fckeditor/editor/js/fckeditorcode_gecko.js new file mode 100644 index 0000000..907100c --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/js/fckeditorcode_gecko.js @@ -0,0 +1,108 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This file has been compressed for better performance. The original source + * can be found at "editor/_source". + */ + +var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2; +String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCKSelection.GetSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||String(H.parentNode.contentEditable)=='false'||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()]&&!FCKListsLib.NonEmptyBlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]||FCKListsLib.NonEmptyBlockElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,1);};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){var N=function(evt){ if (!FCK.MouseDownFlag) evt.returnValue=false;};this.EditorDocument.addEventListener('dragenter',N,true);this.EditorDocument.addEventListener('dragover',N,true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var O=ev.srcElement;if (O.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(O);}},true);this.EditorDocument.addEventListener('mouseup',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);this.EditorDocument.addEventListener('click',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{if (FCKBrowserInfo.IsSafari) throw '';if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e) { FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();this.EditorDocument.execCommand('inserthtml',false,A);this.Focus();FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}}; +var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.]\w*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.]\w*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

        ";var H="

        ";var I="
        ";if (C){G="
      5. ";H="
      6. ";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";}; +FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else if (FCKBrowserInfo.IsSafari) A.style.KhtmlUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i','text/xml');FCKDomTools.RemoveNode(B.firstChild);return B;};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return A.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6",VersionBuild : "18638",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return (new XMLSerializer()).serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
        ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.width=H.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=I+A;H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(I+A);J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
        ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
        ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
        ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
        \n'+F.join('')+'
        ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else if (this.Window.document) this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);}); +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){var A='Text';var B;try { B=this.GetSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=!!FCK.EditorWindow&&this.GetSelection();if (!A||A.rangeCount<1) return null;var B=A.getRangeAt(0);if (B.startContainer!=B.endContainer||B.startContainer.nodeType!=1||B.startOffset!=B.endOffset-1) return null;var C=B.startContainer.childNodes[B.startOffset];if (C.nodeType!=1) return null;return C;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=this.GetSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode) return A.anchorNode.parentNode;var B=new FCKElementPath(A.anchorNode);var C=new FCKElementPath(A.focusNode);var D=null;var E=null;if (B.Elements.length>C.Elements.length){D=B.Elements;E=C.Elements;}else{D=C.Elements;E=B.Elements;};var F=D.length-E.length;for(var i=0;i0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=this.GetSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=this.GetSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=this.GetSelection().getRangeAt(0).startContainer;}catch(e){}};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=this.GetSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=this.GetSelection();for (var i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;iE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}}; +var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();}; +var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;}; +var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
        '+FCKLang.ColorAutomatic+'
        ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
        ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
        '+FCKLang.ColorMoreColors+'
        ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;};while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.width=N;M._IFrame.height=O;},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
        ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
         
        ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
        '+this.Caption+'
        ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};var I=function(element){element.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var J={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var K=FCKTools.GetViewPaneSize(D);var L=FCKTools.GetScrollPosition(D);var M=Math.max(L.Y+(K.Height-height-20)/2,0);var N=Math.max(L.X+(K.Width-width-20)/2,0);var O=E.createElement('iframe');I(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':'absolute','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=J;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');I(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');I(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();}; +var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i0) C+='TABLE { behavior: '+B+' ; }';C+='';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){var A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){if (!FCK.IsSelectionChangeLocked&&FCK.EditorDocument) FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){var A=FCK.EditorWindow.event;if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));A.returnValue=false;A.cancelBubble=true;}};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',Doc_OnMouseDown);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCKSelection.GetSelection();if (B.type.toLowerCase()=='control') B.clear();A=''+A;B.createRange().pasteHTML(A);FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='
         
        '+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.LinkedField=null;this.EditorWindow=null;this.EditorDocument=null;};FCK._ExecPaste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);var C=B.search('

        ');var D=B.search('

        ');if ((C!=-1&&D!=-1&&C0){if (FCKSelection.GetType()=='Control'){var D=this.EditorDocument.createElement('A');D.href=A;var E=FCKSelection.GetSelectedElement();E.parentNode.insertBefore(D,E);E.parentNode.removeChild(E);D.appendChild(E);return [D];};var F='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',F,false,!!B);var G=this.EditorDocument.links;for (i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}}; +var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.]\w*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.]\w*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

        ";var H="

        ";var I="
        ";if (C){G="
      7. ";H="
      8. ";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";}; +FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':try { return new XMLHttpRequest();} catch (e) {};B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6",VersionBuild : "18638",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['map']=function(A,B){if (!A.attributes.getNamedItem('name')){var C=B.name;if (C) FCKXHtml._AppendAttribute(A,'name',C);};A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;}; +var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
        ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.width=H.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=I+A;H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(I+A);J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
        ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
        ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
        ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
        \n'+F.join('')+'
        ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(A){if (this._Range) this.SelectBookmark(this.CreateBookmark(true),A);};FCKDomRange.prototype.SelectBookmark=function(A,B){var C=this.CheckIsCollapsed();var D;var E;var F=this.GetBookmarkNode(A,true);if (!F) return;var G;if (!C) G=this.GetBookmarkNode(A,false);var H=this.Window.document.body.createTextRange();H.moveToElementText(F);H.moveStart('character',1);if (G){var I=this.Window.document.body.createTextRange();I.moveToElementText(G);H.setEndPoint('EndToEnd',I);H.moveEnd('character',-1);}else{D=(B||!F.previousSibling||F.previousSibling.nodeName.toLowerCase()=='br')&&!F.nextSibing;E=this.Window.document.createElement('span');E.innerHTML='';F.parentNode.insertBefore(E,F);if (D){F.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),F);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(F);F.parentNode.removeChild(F);if (C){if (D){H.moveStart('character',-1);H.select();this.Window.document.selection.clear();}else H.select();FCKDomTools.RemoveNode(E);}else{this._Range.setEndBefore(G);G.parentNode.removeChild(G);H.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('');return B.getElementById(E);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);}); +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){try{var A=FCKSelection.GetSelection().type;if (A=='Control'||A=='Text') return A;if (this.GetSelection().createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=this.GetSelection().createRange();if (A&&A.item) return this.GetSelection().createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return this.GetSelection().createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();this.GetSelection().empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=this.GetSelection().createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (this.GetSelection().type=="Control"){B=this.GetSelectedElement();}else{var C=this.GetSelection().createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (this.GetSelection().type=="Control"){oRange=this.GetSelection().createRange();for (i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;iE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;}; +var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}}; +var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();}; +var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;}; +var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
        '+FCKLang.ColorAutomatic+'
        ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
        ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
        '+FCKLang.ColorMoreColors+'
        ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;};while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.width=N;M._IFrame.height=O;},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
        ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
         
        ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
        '+this.Caption+'
        ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};var I=function(element){element.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var J={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var K=FCKTools.GetViewPaneSize(D);var L=FCKTools.GetScrollPosition(D);var M=Math.max(L.Y+(K.Height-height-20)/2,0);var N=Math.max(L.X+(K.Width-width-20)/2,0);var O=E.createElement('iframe');I(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':'absolute','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=J;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');I(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');I(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i", +DlgInfoTab : "Info", +DlgAlertUrl : "Voeg asseblief die URL in", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Taal rigting", +DlgGenLangDirLtr : "Links na regs (LTR)", +DlgGenLangDirRtl : "Regs na links (RTL)", +DlgGenLangCode : "Taal kode", +DlgGenAccessKey : "Toegang sleutel", +DlgGenName : "Naam", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Lang beskreiwing URL", +DlgGenClass : "Skakel Tiepe", +DlgGenTitle : "Voorbeveelings Titel", +DlgGenContType : "Voorbeveelings inhoud soort", +DlgGenLinkCharset : "Geskakelde voorbeeld karakterstel", +DlgGenStyle : "Styl", + +// Image Dialog +DlgImgTitle : "Beeld eienskappe", +DlgImgInfoTab : "Beeld informasie", +DlgImgBtnUpload : "Stuur dit na die Server", +DlgImgURL : "URL", +DlgImgUpload : "Uplaai", +DlgImgAlt : "Alternatiewe beskrywing", +DlgImgWidth : "Weidte", +DlgImgHeight : "Hoogde", +DlgImgLockRatio : "Behou preporsie", +DlgBtnResetSize : "Herstel groote", +DlgImgBorder : "Kant", +DlgImgHSpace : "HSpasie", +DlgImgVSpace : "VSpasie", +DlgImgAlign : "Paradeer", +DlgImgAlignLeft : "Links", +DlgImgAlignAbsBottom: "Abs Onder", +DlgImgAlignAbsMiddle: "Abs Middel", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Onder", +DlgImgAlignMiddle : "Middel", +DlgImgAlignRight : "Regs", +DlgImgAlignTextTop : "Text Bo", +DlgImgAlignTop : "Bo", +DlgImgPreview : "Voorskou", +DlgImgAlertUrl : "Voeg asseblief Beeld URL in.", +DlgImgLinkTab : "Skakel", + +// Flash Dialog +DlgFlashTitle : "Flash eienskappe", +DlgFlashChkPlay : "Automaties Speel", +DlgFlashChkLoop : "Herhaling", +DlgFlashChkMenu : "Laat Flash Menu toe", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Wys alles", +DlgFlashScaleNoBorder : "Geen kante", +DlgFlashScaleFit : "Presiese pas", + +// Link Dialog +DlgLnkWindowTitle : "Skakel", +DlgLnkInfoTab : "Skakel informasie", +DlgLnkTargetTab : "Mikpunt", + +DlgLnkType : "Skakel soort", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Skakel na plekhouers in text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Kies 'n plekhouer", +DlgLnkAnchorByName : "Volgens plekhouer naam", +DlgLnkAnchorById : "Volgens element Id", +DlgLnkNoAnchors : "(Geen plekhouers beskikbaar in dokument}", +DlgLnkEMail : "E-Mail Adres", +DlgLnkEMailSubject : "Boodskap Opskrif", +DlgLnkEMailBody : "Boodskap Inhoud", +DlgLnkUpload : "Oplaai", +DlgLnkBtnUpload : "Stuur na Server", + +DlgLnkTarget : "Mikpunt", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nuwe Venster (_blank)", +DlgLnkTargetParent : "Vorige Venster (_parent)", +DlgLnkTargetSelf : "Selfde Venster (_self)", +DlgLnkTargetTop : "Boonste Venster (_top)", +DlgLnkTargetFrameName : "Mikpunt Venster Naam", +DlgLnkPopWinName : "Popup Venster Naam", +DlgLnkPopWinFeat : "Popup Venster Geaartheid", +DlgLnkPopResize : "Verstelbare Groote", +DlgLnkPopLocation : "Adres Balk", +DlgLnkPopMenu : "Menu Balk", +DlgLnkPopScroll : "Gleibalkstuk", +DlgLnkPopStatus : "Status Balk", +DlgLnkPopToolbar : "Gereedskap Balk", +DlgLnkPopFullScrn : "Voll Skerm (IE)", +DlgLnkPopDependent : "Afhanklik (Netscape)", +DlgLnkPopWidth : "Weite", +DlgLnkPopHeight : "Hoogde", +DlgLnkPopLeft : "Links Posisie", +DlgLnkPopTop : "Bo Posisie", + +DlnLnkMsgNoUrl : "Voeg asseblief die URL in", +DlnLnkMsgNoEMail : "Voeg asseblief die e-mail adres in", +DlnLnkMsgNoAnchor : "Kies asseblief 'n plekhouer", +DlnLnkMsgInvPopName : "Die popup naam moet begin met alphabetiese karakters sonder spasies.", + +// Color Dialog +DlgColorTitle : "Kies Kleur", +DlgColorBtnClear : "Maak skoon", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Geselekteer", + +// Smiley Dialog +DlgSmileyTitle : "Voeg Smiley by", + +// Special Character Dialog +DlgSpecialCharTitle : "Kies spesiale karakter", + +// Table Dialog +DlgTableTitle : "Tabel eienskappe", +DlgTableRows : "Reie", +DlgTableColumns : "Kolome", +DlgTableBorder : "Kant groote", +DlgTableAlign : "Parideering", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Links", +DlgTableAlignCenter : "Middel", +DlgTableAlignRight : "Regs", +DlgTableWidth : "Weite", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Hoogde", +DlgTableCellSpace : "Cell spasieering", +DlgTableCellPad : "Cell buffer", +DlgTableCaption : "Beskreiwing", +DlgTableSummary : "Opsomming", + +// Table Cell Dialog +DlgCellTitle : "Cell eienskappe", +DlgCellWidth : "Weite", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Hoogde", +DlgCellWordWrap : "Woord Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nee", +DlgCellHorAlign : "Horisontale rigting", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Links", +DlgCellHorAlignCenter : "Middel", +DlgCellHorAlignRight: "Regs", +DlgCellVerAlign : "Vertikale rigting", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Bo", +DlgCellVerAlignMiddle : "Middel", +DlgCellVerAlignBottom : "Onder", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rei strekking", +DlgCellCollSpan : "Kolom strekking", +DlgCellBackColor : "Agtergrond Kleur", +DlgCellBorderColor : "Kant Kleur", +DlgCellBtnSelect : "Keuse...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Vind", +DlgFindFindBtn : "Vind", +DlgFindNotFoundMsg : "Die gespesifiseerde karakters word nie gevind nie.", + +// Replace Dialog +DlgReplaceTitle : "Vervang", +DlgReplaceFindLbl : "Soek wat:", +DlgReplaceReplaceLbl : "Vervang met:", +DlgReplaceCaseChk : "Vergelyk karakter skryfweise", +DlgReplaceReplaceBtn : "Vervang", +DlgReplaceReplAllBtn : "Vervang alles", +DlgReplaceWordChk : "Vergelyk komplete woord", + +// Paste Operations / Dialog +PasteErrorCut : "U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).", +PasteErrorCopy : "U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).", + +PasteAsText : "Voeg slegs karakters by", +PasteFromWord : "Byvoeging uit Word", + +DlgPasteMsg2 : "Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(Ctrl+V) en druk OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignoreer karakter soort defenisies", +DlgPasteRemoveStyles : "Verweider Styl defenisies", + +// Color Picker +ColorAutomatic : "Automaties", +ColorMoreColors : "Meer Kleure...", + +// Document Properties +DocProps : "Dokument Eienskappe", + +// Anchor Dialog +DlgAnchorTitle : "Plekhouer Eienskappe", +DlgAnchorName : "Plekhouer Naam", +DlgAnchorErrorName : "Voltooi die plekhouer naam asseblief", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nie in woordeboek nie", +DlgSpellChangeTo : "Verander na", +DlgSpellBtnIgnore : "Ignoreer", +DlgSpellBtnIgnoreAll : "Ignoreer na-volgende", +DlgSpellBtnReplace : "Vervang", +DlgSpellBtnReplaceAll : "vervang na-volgende", +DlgSpellBtnUndo : "Ont-skep", +DlgSpellNoSuggestions : "- Geen voorstel -", +DlgSpellProgress : "Spelling word beproef...", +DlgSpellNoMispell : "Spellproef kompleet: Geen foute", +DlgSpellNoChanges : "Spellproef kompleet: Geen woord veranderings", +DlgSpellOneChange : "Spellproef kompleet: Een woord verander", +DlgSpellManyChanges : "Spellproef kompleet: %1 woorde verander", + +IeSpellDownload : "Geen Spellproefer geinstaleer nie. Wil U dit aflaai?", + +// Button Dialog +DlgButtonText : "Karakters (Waarde)", +DlgButtonType : "Soort", +DlgButtonTypeBtn : "Knop", +DlgButtonTypeSbm : "Indien", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Naam", +DlgCheckboxValue : "Waarde", +DlgCheckboxSelected : "Uitgekies", + +// Form Dialog +DlgFormName : "Naam", +DlgFormAction : "Aksie", +DlgFormMethod : "Metode", + +// Select Field Dialog +DlgSelectName : "Naam", +DlgSelectValue : "Waarde", +DlgSelectSize : "Grote", +DlgSelectLines : "lyne", +DlgSelectChkMulti : "Laat meerere keuses toe", +DlgSelectOpAvail : "Beskikbare Opsies", +DlgSelectOpText : "Karakters", +DlgSelectOpValue : "Waarde", +DlgSelectBtnAdd : "Byvoeg", +DlgSelectBtnModify : "Verander", +DlgSelectBtnUp : "Op", +DlgSelectBtnDown : "Af", +DlgSelectBtnSetValue : "Stel as uitgekiesde waarde", +DlgSelectBtnDelete : "Verweider", + +// Textarea Dialog +DlgTextareaName : "Naam", +DlgTextareaCols : "Kolom", +DlgTextareaRows : "Reie", + +// Text Field Dialog +DlgTextName : "Naam", +DlgTextValue : "Waarde", +DlgTextCharWidth : "Karakter weite", +DlgTextMaxChars : "Maximale karakters", +DlgTextType : "Soort", +DlgTextTypeText : "Karakters", +DlgTextTypePass : "Wagwoord", + +// Hidden Field Dialog +DlgHiddenName : "Naam", +DlgHiddenValue : "Waarde", + +// Bulleted List Dialog +BulletedListProp : "Gepunkte lys eienskappe", +NumberedListProp : "Genommerde lys eienskappe", +DlgLstStart : "Begin", +DlgLstType : "Soort", +DlgLstTypeCircle : "Sirkel", +DlgLstTypeDisc : "Skyf", +DlgLstTypeSquare : "Vierkant", +DlgLstTypeNumbers : "Nommer (1, 2, 3)", +DlgLstTypeLCase : "Klein Letters (a, b, c)", +DlgLstTypeUCase : "Hoof Letters (A, B, C)", +DlgLstTypeSRoman : "Klein Romeinse nommers (i, ii, iii)", +DlgLstTypeLRoman : "Groot Romeinse nommers (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Algemeen", +DlgDocBackTab : "Agtergrond", +DlgDocColorsTab : "Kleure en Rante", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Bladsy Opskrif", +DlgDocLangDir : "Taal rigting", +DlgDocLangDirLTR : "Link na Regs (LTR)", +DlgDocLangDirRTL : "Regs na Links (RTL)", +DlgDocLangCode : "Taal Kode", +DlgDocCharSet : "Karakterstel Kodeering", +DlgDocCharSetCE : "Sentraal Europa", +DlgDocCharSetCT : "Chinees Traditioneel (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Grieks", +DlgDocCharSetJP : "Japanees", +DlgDocCharSetKR : "Koreans", +DlgDocCharSetTR : "Turks", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Ander Karakterstel Kodeering", + +DlgDocDocType : "Dokument Opskrif Soort", +DlgDocDocTypeOther : "Ander Dokument Opskrif Soort", +DlgDocIncXHTML : "Voeg XHTML verklaring by", +DlgDocBgColor : "Agtergrond kleur", +DlgDocBgImage : "Agtergrond Beeld URL", +DlgDocBgNoScroll : "Vasgeklemde Agtergrond", +DlgDocCText : "Karakters", +DlgDocCLink : "Skakel", +DlgDocCVisited : "Besoekte Skakel", +DlgDocCActive : "Aktiewe Skakel", +DlgDocMargins : "Bladsy Rante", +DlgDocMaTop : "Bo", +DlgDocMaLeft : "Links", +DlgDocMaRight : "Regs", +DlgDocMaBottom : "Onder", +DlgDocMeIndex : "Dokument Index Sleutelwoorde(comma verdeelt)", +DlgDocMeDescr : "Dokument Beskrywing", +DlgDocMeAuthor : "Skrywer", +DlgDocMeCopy : "Kopiereg", +DlgDocPreview : "Voorskou", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Inhoud Templates", +DlgTemplatesSelMsg : "Kies die template om te gebruik in die editor
        (Inhoud word vervang!):", +DlgTemplatesLoading : "Templates word gelaai. U geduld asseblief...", +DlgTemplatesNoTpl : "(Geen templates gedefinieerd)", +DlgTemplatesReplace : "Vervang bestaande inhoud", + +// About Dialog +DlgAboutAboutTab : "Meer oor", +DlgAboutBrowserInfoTab : "Blaai Informasie deur", +DlgAboutLicenseTab : "Lesensie", +DlgAboutVersion : "weergawe", +DlgAboutInfo : "Vir meer informasie gaan na " +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/ar.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ar.js new file mode 100644 index 0000000..fcab26f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ar.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Arabic language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "rtl", + +ToolbarCollapse : "ضم شريط الأدوات", +ToolbarExpand : "تمدد شريط الأدوات", + +// Toolbar Items and Context Menu +Save : "حفظ", +NewPage : "صفحة جديدة", +Preview : "معاينة الصفحة", +Cut : "قص", +Copy : "نسخ", +Paste : "لصق", +PasteText : "لصق كنص بسيط", +PasteWord : "لصق من وورد", +Print : "طباعة", +SelectAll : "تحديد الكل", +RemoveFormat : "إزالة التنسيقات", +InsertLinkLbl : "رابط", +InsertLink : "إدراج/تحرير رابط", +RemoveLink : "إزالة رابط", +Anchor : "إدراج/تحرير إشارة مرجعية", +AnchorDelete : "إزالة إشارة مرجعية", +InsertImageLbl : "صورة", +InsertImage : "إدراج/تحرير صورة", +InsertFlashLbl : "فلاش", +InsertFlash : "إدراج/تحرير فيلم فلاش", +InsertTableLbl : "جدول", +InsertTable : "إدراج/تحرير جدول", +InsertLineLbl : "خط فاصل", +InsertLine : "إدراج خط فاصل", +InsertSpecialCharLbl: "رموز", +InsertSpecialChar : "إدراج رموز..ِ", +InsertSmileyLbl : "ابتسامات", +InsertSmiley : "إدراج ابتسامات", +About : "حول FCKeditor", +Bold : "غامق", +Italic : "مائل", +Underline : "تسطير", +StrikeThrough : "يتوسطه خط", +Subscript : "منخفض", +Superscript : "مرتفع", +LeftJustify : "محاذاة إلى اليسار", +CenterJustify : "توسيط", +RightJustify : "محاذاة إلى اليمين", +BlockJustify : "ضبط", +DecreaseIndent : "إنقاص المسافة البادئة", +IncreaseIndent : "زيادة المسافة البادئة", +Blockquote : "اقتباس", +Undo : "تراجع", +Redo : "إعادة", +NumberedListLbl : "تعداد رقمي", +NumberedList : "إدراج/إلغاء تعداد رقمي", +BulletedListLbl : "تعداد نقطي", +BulletedList : "إدراج/إلغاء تعداد نقطي", +ShowTableBorders : "معاينة حدود الجداول", +ShowDetails : "معاينة التفاصيل", +Style : "نمط", +FontFormat : "تنسيق", +Font : "خط", +FontSize : "حجم الخط", +TextColor : "لون النص", +BGColor : "لون الخلفية", +Source : "شفرة المصدر", +Find : "بحث", +Replace : "إستبدال", +SpellCheck : "تدقيق إملائي", +UniversalKeyboard : "لوحة المفاتيح العالمية", +PageBreakLbl : "فصل الصفحة", +PageBreak : "إدخال صفحة جديدة", + +Form : "نموذج", +Checkbox : "خانة إختيار", +RadioButton : "زر خيار", +TextField : "مربع نص", +Textarea : "ناحية نص", +HiddenField : "إدراج حقل خفي", +Button : "زر ضغط", +SelectionField : "قائمة منسدلة", +ImageButton : "زر صورة", + +FitWindow : "تكبير حجم المحرر", +ShowBlocks : "مخطط تفصيلي", + +// Context Menu +EditLink : "تحرير رابط", +CellCM : "خلية", +RowCM : "صف", +ColumnCM : "عمود", +InsertRowAfter : "إدراج صف بعد", +InsertRowBefore : "إدراج صف قبل", +DeleteRows : "حذف صفوف", +InsertColumnAfter : "إدراج عمود بعد", +InsertColumnBefore : "إدراج عمود قبل", +DeleteColumns : "حذف أعمدة", +InsertCellAfter : "إدراج خلية بعد", +InsertCellBefore : "إدراج خلية قبل", +DeleteCells : "حذف خلايا", +MergeCells : "دمج خلايا", +MergeRight : "دمج لليمين", +MergeDown : "دمج للأسفل", +HorizontalSplitCell : "تقسيم الخلية أفقياً", +VerticalSplitCell : "تقسيم الخلية عمودياً", +TableDelete : "حذف الجدول", +CellProperties : "خصائص الخلية", +TableProperties : "خصائص الجدول", +ImageProperties : "خصائص الصورة", +FlashProperties : "خصائص فيلم الفلاش", + +AnchorProp : "خصائص الإشارة المرجعية", +ButtonProp : "خصائص زر الضغط", +CheckboxProp : "خصائص خانة الإختيار", +HiddenFieldProp : "خصائص الحقل الخفي", +RadioButtonProp : "خصائص زر الخيار", +ImageButtonProp : "خصائص زر الصورة", +TextFieldProp : "خصائص مربع النص", +SelectionFieldProp : "خصائص القائمة المنسدلة", +TextareaProp : "خصائص ناحية النص", +FormProp : "خصائص النموذج", + +FontFormats : "عادي;منسّق;دوس;العنوان 1;العنوان 2;العنوان 3;العنوان 4;العنوان 5;العنوان 6", + +// Alerts and Messages +ProcessingXHTML : "إنتظر قليلاً ريثما تتم معالَجة‏ XHTML. لن يستغرق طويلاً...", +Done : "تم", +PasteWordConfirm : "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟", +NotCompatiblePaste : "هذه الميزة تحتاج لمتصفح من النوعInternet Explorer إصدار 5.5 فما فوق. هل تود اللصق دون تنظيف الكود؟", +UnknownToolbarItem : "عنصر شريط أدوات غير معروف \"%1\"", +UnknownCommand : "أمر غير معروف \"%1\"", +NotImplemented : "لم يتم دعم هذا الأمر", +UnknownToolbarSet : "لم أتمكن من العثور على طقم الأدوات \"%1\" ", +NoActiveX : "لتأمين متصفحك يجب أن تحدد بعض مميزات المحرر. يتوجب عليك تمكين الخيار \"Run ActiveX controls and plug-ins\". قد تواجة أخطاء وتلاحظ مميزات مفقودة", +BrowseServerBlocked : "لايمكن فتح مصدر المتصفح. فضلا يجب التأكد بأن جميع موانع النوافذ المنبثقة معطلة", +DialogBlocked : "لايمكن فتح نافذة الحوار . فضلا تأكد من أن مانع النوافذ المنبثة معطل .", + +// Dialogs +DlgBtnOK : "موافق", +DlgBtnCancel : "إلغاء الأمر", +DlgBtnClose : "إغلاق", +DlgBtnBrowseServer : "تصفح الخادم", +DlgAdvancedTag : "متقدم", +DlgOpOther : "<أخرى>", +DlgInfoTab : "معلومات", +DlgAlertUrl : "الرجاء كتابة عنوان الإنترنت", + +// General Dialogs Labels +DlgGenNotSet : "<بدون تحديد>", +DlgGenId : "الرقم", +DlgGenLangDir : "إتجاه النص", +DlgGenLangDirLtr : "اليسار لليمين (LTR)", +DlgGenLangDirRtl : "اليمين لليسار (RTL)", +DlgGenLangCode : "رمز اللغة", +DlgGenAccessKey : "مفاتيح الإختصار", +DlgGenName : "الاسم", +DlgGenTabIndex : "الترتيب", +DlgGenLongDescr : "عنوان الوصف المفصّل", +DlgGenClass : "فئات التنسيق", +DlgGenTitle : "تلميح الشاشة", +DlgGenContType : "نوع التلميح", +DlgGenLinkCharset : "ترميز المادة المطلوبة", +DlgGenStyle : "نمط", + +// Image Dialog +DlgImgTitle : "خصائص الصورة", +DlgImgInfoTab : "معلومات الصورة", +DlgImgBtnUpload : "أرسلها للخادم", +DlgImgURL : "موقع الصورة", +DlgImgUpload : "رفع", +DlgImgAlt : "الوصف", +DlgImgWidth : "العرض", +DlgImgHeight : "الإرتفاع", +DlgImgLockRatio : "تناسق الحجم", +DlgBtnResetSize : "إستعادة الحجم الأصلي", +DlgImgBorder : "سمك الحدود", +DlgImgHSpace : "تباعد أفقي", +DlgImgVSpace : "تباعد عمودي", +DlgImgAlign : "محاذاة", +DlgImgAlignLeft : "يسار", +DlgImgAlignAbsBottom: "أسفل النص", +DlgImgAlignAbsMiddle: "وسط السطر", +DlgImgAlignBaseline : "على السطر", +DlgImgAlignBottom : "أسفل", +DlgImgAlignMiddle : "وسط", +DlgImgAlignRight : "يمين", +DlgImgAlignTextTop : "أعلى النص", +DlgImgAlignTop : "أعلى", +DlgImgPreview : "معاينة", +DlgImgAlertUrl : "فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.", +DlgImgLinkTab : "الرابط", + +// Flash Dialog +DlgFlashTitle : "خصائص فيلم الفلاش", +DlgFlashChkPlay : "تشغيل تلقائي", +DlgFlashChkLoop : "تكرار", +DlgFlashChkMenu : "تمكين قائمة فيلم الفلاش", +DlgFlashScale : "الحجم", +DlgFlashScaleAll : "إظهار الكل", +DlgFlashScaleNoBorder : "بلا حدود", +DlgFlashScaleFit : "ضبط تام", + +// Link Dialog +DlgLnkWindowTitle : "إرتباط تشعبي", +DlgLnkInfoTab : "معلومات الرابط", +DlgLnkTargetTab : "الهدف", + +DlgLnkType : "نوع الربط", +DlgLnkTypeURL : "العنوان", +DlgLnkTypeAnchor : "مكان في هذا المستند", +DlgLnkTypeEMail : "بريد إلكتروني", +DlgLnkProto : "البروتوكول", +DlgLnkProtoOther : "<أخرى>", +DlgLnkURL : "الموقع", +DlgLnkAnchorSel : "اختر علامة مرجعية", +DlgLnkAnchorByName : "حسب اسم العلامة", +DlgLnkAnchorById : "حسب تعريف العنصر", +DlgLnkNoAnchors : "(لا يوجد علامات مرجعية في هذا المستند)", +DlgLnkEMail : "عنوان بريد إلكتروني", +DlgLnkEMailSubject : "موضوع الرسالة", +DlgLnkEMailBody : "محتوى الرسالة", +DlgLnkUpload : "رفع", +DlgLnkBtnUpload : "أرسلها للخادم", + +DlgLnkTarget : "الهدف", +DlgLnkTargetFrame : "<إطار>", +DlgLnkTargetPopup : "<نافذة منبثقة>", +DlgLnkTargetBlank : "إطار جديد (_blank)", +DlgLnkTargetParent : "الإطار الأصل (_parent)", +DlgLnkTargetSelf : "نفس الإطار (_self)", +DlgLnkTargetTop : "صفحة كاملة (_top)", +DlgLnkTargetFrameName : "اسم الإطار الهدف", +DlgLnkPopWinName : "تسمية النافذة المنبثقة", +DlgLnkPopWinFeat : "خصائص النافذة المنبثقة", +DlgLnkPopResize : "قابلة للتحجيم", +DlgLnkPopLocation : "شريط العنوان", +DlgLnkPopMenu : "القوائم الرئيسية", +DlgLnkPopScroll : "أشرطة التمرير", +DlgLnkPopStatus : "شريط الحالة السفلي", +DlgLnkPopToolbar : "شريط الأدوات", +DlgLnkPopFullScrn : "ملئ الشاشة (IE)", +DlgLnkPopDependent : "تابع (Netscape)", +DlgLnkPopWidth : "العرض", +DlgLnkPopHeight : "الإرتفاع", +DlgLnkPopLeft : "التمركز لليسار", +DlgLnkPopTop : "التمركز للأعلى", + +DlnLnkMsgNoUrl : "فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط", +DlnLnkMsgNoEMail : "فضلاً أدخل عنوان البريد الإلكتروني", +DlnLnkMsgNoAnchor : "فضلاً حدد العلامة المرجعية المرغوبة", +DlnLnkMsgInvPopName : "اسم النافذة المنبثقة يجب أن يبدأ بحرف أبجدي دون مسافات", + +// Color Dialog +DlgColorTitle : "اختر لوناً", +DlgColorBtnClear : "مسح", +DlgColorHighlight : "تحديد", +DlgColorSelected : "إختيار", + +// Smiley Dialog +DlgSmileyTitle : "إدراج إبتسامات ", + +// Special Character Dialog +DlgSpecialCharTitle : "إدراج رمز", + +// Table Dialog +DlgTableTitle : "إدراج جدول", +DlgTableRows : "صفوف", +DlgTableColumns : "أعمدة", +DlgTableBorder : "سمك الحدود", +DlgTableAlign : "المحاذاة", +DlgTableAlignNotSet : "<بدون تحديد>", +DlgTableAlignLeft : "يسار", +DlgTableAlignCenter : "وسط", +DlgTableAlignRight : "يمين", +DlgTableWidth : "العرض", +DlgTableWidthPx : "بكسل", +DlgTableWidthPc : "بالمئة", +DlgTableHeight : "الإرتفاع", +DlgTableCellSpace : "تباعد الخلايا", +DlgTableCellPad : "المسافة البادئة", +DlgTableCaption : "الوصف", +DlgTableSummary : "الخلاصة", + +// Table Cell Dialog +DlgCellTitle : "خصائص الخلية", +DlgCellWidth : "العرض", +DlgCellWidthPx : "بكسل", +DlgCellWidthPc : "بالمئة", +DlgCellHeight : "الإرتفاع", +DlgCellWordWrap : "التفاف النص", +DlgCellWordWrapNotSet : "<بدون تحديد>", +DlgCellWordWrapYes : "نعم", +DlgCellWordWrapNo : "لا", +DlgCellHorAlign : "المحاذاة الأفقية", +DlgCellHorAlignNotSet : "<بدون تحديد>", +DlgCellHorAlignLeft : "يسار", +DlgCellHorAlignCenter : "وسط", +DlgCellHorAlignRight: "يمين", +DlgCellVerAlign : "المحاذاة العمودية", +DlgCellVerAlignNotSet : "<بدون تحديد>", +DlgCellVerAlignTop : "أعلى", +DlgCellVerAlignMiddle : "وسط", +DlgCellVerAlignBottom : "أسفل", +DlgCellVerAlignBaseline : "على السطر", +DlgCellRowSpan : "إمتداد الصفوف", +DlgCellCollSpan : "إمتداد الأعمدة", +DlgCellBackColor : "لون الخلفية", +DlgCellBorderColor : "لون الحدود", +DlgCellBtnSelect : "حدّد...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "بحث واستبدال", + +// Find Dialog +DlgFindTitle : "بحث", +DlgFindFindBtn : "ابحث", +DlgFindNotFoundMsg : "لم يتم العثور على النص المحدد.", + +// Replace Dialog +DlgReplaceTitle : "إستبدال", +DlgReplaceFindLbl : "البحث عن:", +DlgReplaceReplaceLbl : "إستبدال بـ:", +DlgReplaceCaseChk : "مطابقة حالة الأحرف", +DlgReplaceReplaceBtn : "إستبدال", +DlgReplaceReplAllBtn : "إستبدال الكل", +DlgReplaceWordChk : "الكلمة بالكامل فقط", + +// Paste Operations / Dialog +PasteErrorCut : "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).", +PasteErrorCopy : "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).", + +PasteAsText : "لصق كنص بسيط", +PasteFromWord : "لصق من وورد", + +DlgPasteMsg2 : "الصق داخل الصندوق بإستخدام زرّي (Ctrl+V) في لوحة المفاتيح، ثم اضغط زر موافق.", +DlgPasteSec : "نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذا وجب عليك لصق المحتوى مرة أخرى في هذه النافذة.", +DlgPasteIgnoreFont : "تجاهل تعريفات أسماء الخطوط", +DlgPasteRemoveStyles : "إزالة تعريفات الأنماط", + +// Color Picker +ColorAutomatic : "تلقائي", +ColorMoreColors : "ألوان إضافية...", + +// Document Properties +DocProps : "خصائص الصفحة", + +// Anchor Dialog +DlgAnchorTitle : "خصائص إشارة مرجعية", +DlgAnchorName : "اسم الإشارة المرجعية", +DlgAnchorErrorName : "الرجاء كتابة اسم الإشارة المرجعية", + +// Speller Pages Dialog +DlgSpellNotInDic : "ليست في القاموس", +DlgSpellChangeTo : "التغيير إلى", +DlgSpellBtnIgnore : "تجاهل", +DlgSpellBtnIgnoreAll : "تجاهل الكل", +DlgSpellBtnReplace : "تغيير", +DlgSpellBtnReplaceAll : "تغيير الكل", +DlgSpellBtnUndo : "تراجع", +DlgSpellNoSuggestions : "- لا توجد إقتراحات -", +DlgSpellProgress : "جاري التدقيق إملائياً", +DlgSpellNoMispell : "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية", +DlgSpellNoChanges : "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة", +DlgSpellOneChange : "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط", +DlgSpellManyChanges : "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة", + +IeSpellDownload : "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟", + +// Button Dialog +DlgButtonText : "القيمة/التسمية", +DlgButtonType : "نوع الزر", +DlgButtonTypeBtn : "زر", +DlgButtonTypeSbm : "إرسال", +DlgButtonTypeRst : "إعادة تعيين", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "الاسم", +DlgCheckboxValue : "القيمة", +DlgCheckboxSelected : "محدد", + +// Form Dialog +DlgFormName : "الاسم", +DlgFormAction : "اسم الملف", +DlgFormMethod : "الأسلوب", + +// Select Field Dialog +DlgSelectName : "الاسم", +DlgSelectValue : "القيمة", +DlgSelectSize : "الحجم", +DlgSelectLines : "الأسطر", +DlgSelectChkMulti : "السماح بتحديدات متعددة", +DlgSelectOpAvail : "الخيارات المتاحة", +DlgSelectOpText : "النص", +DlgSelectOpValue : "القيمة", +DlgSelectBtnAdd : "إضافة", +DlgSelectBtnModify : "تعديل", +DlgSelectBtnUp : "تحريك لأعلى", +DlgSelectBtnDown : "تحريك لأسفل", +DlgSelectBtnSetValue : "إجعلها محددة", +DlgSelectBtnDelete : "إزالة", + +// Textarea Dialog +DlgTextareaName : "الاسم", +DlgTextareaCols : "الأعمدة", +DlgTextareaRows : "الصفوف", + +// Text Field Dialog +DlgTextName : "الاسم", +DlgTextValue : "القيمة", +DlgTextCharWidth : "العرض بالأحرف", +DlgTextMaxChars : "عدد الحروف الأقصى", +DlgTextType : "نوع المحتوى", +DlgTextTypeText : "نص", +DlgTextTypePass : "كلمة مرور", + +// Hidden Field Dialog +DlgHiddenName : "الاسم", +DlgHiddenValue : "القيمة", + +// Bulleted List Dialog +BulletedListProp : "خصائص التعداد النقطي", +NumberedListProp : "خصائص التعداد الرقمي", +DlgLstStart : "البدء عند", +DlgLstType : "النوع", +DlgLstTypeCircle : "دائرة", +DlgLstTypeDisc : "قرص", +DlgLstTypeSquare : "مربع", +DlgLstTypeNumbers : "أرقام (1، 2، 3)َ", +DlgLstTypeLCase : "حروف صغيرة (a, b, c)َ", +DlgLstTypeUCase : "حروف كبيرة (A, B, C)َ", +DlgLstTypeSRoman : "ترقيم روماني صغير (i, ii, iii)َ", +DlgLstTypeLRoman : "ترقيم روماني كبير (I, II, III)َ", + +// Document Properties Dialog +DlgDocGeneralTab : "عام", +DlgDocBackTab : "الخلفية", +DlgDocColorsTab : "الألوان والهوامش", +DlgDocMetaTab : "المعرّفات الرأسية", + +DlgDocPageTitle : "عنوان الصفحة", +DlgDocLangDir : "إتجاه اللغة", +DlgDocLangDirLTR : "اليسار لليمين (LTR)", +DlgDocLangDirRTL : "اليمين لليسار (RTL)", +DlgDocLangCode : "رمز اللغة", +DlgDocCharSet : "ترميز الحروف", +DlgDocCharSetCE : "أوروبا الوسطى", +DlgDocCharSetCT : "الصينية التقليدية (Big5)", +DlgDocCharSetCR : "السيريلية", +DlgDocCharSetGR : "اليونانية", +DlgDocCharSetJP : "اليابانية", +DlgDocCharSetKR : "الكورية", +DlgDocCharSetTR : "التركية", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "أوروبا الغربية", +DlgDocCharSetOther : "ترميز آخر", + +DlgDocDocType : "ترويسة نوع الصفحة", +DlgDocDocTypeOther : "ترويسة نوع صفحة أخرى", +DlgDocIncXHTML : "تضمين إعلانات‏ لغة XHTMLَ", +DlgDocBgColor : "لون الخلفية", +DlgDocBgImage : "رابط الصورة الخلفية", +DlgDocBgNoScroll : "جعلها علامة مائية", +DlgDocCText : "النص", +DlgDocCLink : "الروابط", +DlgDocCVisited : "المزارة", +DlgDocCActive : "النشطة", +DlgDocMargins : "هوامش الصفحة", +DlgDocMaTop : "علوي", +DlgDocMaLeft : "أيسر", +DlgDocMaRight : "أيمن", +DlgDocMaBottom : "سفلي", +DlgDocMeIndex : "الكلمات الأساسية (مفصولة بفواصل)َ", +DlgDocMeDescr : "وصف الصفحة", +DlgDocMeAuthor : "الكاتب", +DlgDocMeCopy : "المالك", +DlgDocPreview : "معاينة", + +// Templates Dialog +Templates : "القوالب", +DlgTemplatesTitle : "قوالب المحتوى", +DlgTemplatesSelMsg : "اختر القالب الذي تود وضعه في المحرر
        (سيتم فقدان المحتوى الحالي):", +DlgTemplatesLoading : "جاري تحميل قائمة القوالب، الرجاء الإنتظار...", +DlgTemplatesNoTpl : "(لم يتم تعريف أي قالب)", +DlgTemplatesReplace : "استبدال المحتوى", + +// About Dialog +DlgAboutAboutTab : "نبذة", +DlgAboutBrowserInfoTab : "معلومات متصفحك", +DlgAboutLicenseTab : "الترخيص", +DlgAboutVersion : "الإصدار", +DlgAboutInfo : "لمزيد من المعلومات تفضل بزيارة" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/bg.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bg.js new file mode 100644 index 0000000..b42a6fd --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bg.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Bulgarian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Скрий панела с инструментите", +ToolbarExpand : "Покажи панела с инструментите", + +// Toolbar Items and Context Menu +Save : "Запази", +NewPage : "Нова страница", +Preview : "Предварителен изглед", +Cut : "Изрежи", +Copy : "Запамети", +Paste : "Вмъкни", +PasteText : "Вмъкни само текст", +PasteWord : "Вмъкни от MS Word", +Print : "Печат", +SelectAll : "Селектирай всичко", +RemoveFormat : "Изтрий форматирането", +InsertLinkLbl : "Връзка", +InsertLink : "Добави/Редактирай връзка", +RemoveLink : "Изтрий връзка", +Anchor : "Добави/Редактирай котва", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Изображение", +InsertImage : "Добави/Редактирай изображение", +InsertFlashLbl : "Flash", +InsertFlash : "Добави/Редактиай Flash обект", +InsertTableLbl : "Таблица", +InsertTable : "Добави/Редактирай таблица", +InsertLineLbl : "Линия", +InsertLine : "Вмъкни хоризонтална линия", +InsertSpecialCharLbl: "Специален символ", +InsertSpecialChar : "Вмъкни специален символ", +InsertSmileyLbl : "Усмивка", +InsertSmiley : "Добави усмивка", +About : "За FCKeditor", +Bold : "Удебелен", +Italic : "Курсив", +Underline : "Подчертан", +StrikeThrough : "Зачертан", +Subscript : "Индекс за база", +Superscript : "Индекс за степен", +LeftJustify : "Подравняване в ляво", +CenterJustify : "Подравнявне в средата", +RightJustify : "Подравняване в дясно", +BlockJustify : "Двустранно подравняване", +DecreaseIndent : "Намали отстъпа", +IncreaseIndent : "Увеличи отстъпа", +Blockquote : "Blockquote", //MISSING +Undo : "Отмени", +Redo : "Повтори", +NumberedListLbl : "Нумериран списък", +NumberedList : "Добави/Изтрий нумериран списък", +BulletedListLbl : "Ненумериран списък", +BulletedList : "Добави/Изтрий ненумериран списък", +ShowTableBorders : "Покажи рамките на таблицата", +ShowDetails : "Покажи подробности", +Style : "Стил", +FontFormat : "Формат", +Font : "Шрифт", +FontSize : "Размер", +TextColor : "Цвят на текста", +BGColor : "Цвят на фона", +Source : "Код", +Find : "Търси", +Replace : "Замести", +SpellCheck : "Провери правописа", +UniversalKeyboard : "Универсална клавиатура", +PageBreakLbl : "Нов ред", +PageBreak : "Вмъкни нов ред", + +Form : "Формуляр", +Checkbox : "Поле за отметка", +RadioButton : "Поле за опция", +TextField : "Текстово поле", +Textarea : "Текстова област", +HiddenField : "Скрито поле", +Button : "Бутон", +SelectionField : "Падащо меню с опции", +ImageButton : "Бутон-изображение", + +FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Редактирай връзка", +CellCM : "Cell", //MISSING +RowCM : "Row", //MISSING +ColumnCM : "Column", //MISSING +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Изтрий редовете", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Изтрий колоните", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Изтрий клетките", +MergeCells : "Обедини клетките", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Изтрий таблицата", +CellProperties : "Параметри на клетката", +TableProperties : "Параметри на таблицата", +ImageProperties : "Параметри на изображението", +FlashProperties : "Параметри на Flash обекта", + +AnchorProp : "Параметри на котвата", +ButtonProp : "Параметри на бутона", +CheckboxProp : "Параметри на полето за отметка", +HiddenFieldProp : "Параметри на скритото поле", +RadioButtonProp : "Параметри на полето за опция", +ImageButtonProp : "Параметри на бутона-изображение", +TextFieldProp : "Параметри на текстовото-поле", +SelectionFieldProp : "Параметри на падащото меню с опции", +TextareaProp : "Параметри на текстовата област", +FormProp : "Параметри на формуляра", + +FontFormats : "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Обработка на XHTML. Моля изчакайте...", +Done : "Готово", +PasteWordConfirm : "Текстът, който искате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчистен преди вмъкването?", +NotCompatiblePaste : "Тази операция изисква MS Internet Explorer версия 5.5 или по-висока. Желаете ли да вмъкнете запаметеното без изчистване?", +UnknownToolbarItem : "Непознат инструмент \"%1\"", +UnknownCommand : "Непозната команда \"%1\"", +NotImplemented : "Командата не е имплементирана", +UnknownToolbarSet : "Панелът \"%1\" не съществува", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING + +// Dialogs +DlgBtnOK : "ОК", +DlgBtnCancel : "Отказ", +DlgBtnClose : "Затвори", +DlgBtnBrowseServer : "Разгледай сървъра", +DlgAdvancedTag : "Подробности...", +DlgOpOther : "<Друго>", +DlgInfoTab : "Информация", +DlgAlertUrl : "Моля, въведете пълния път (URL)", + +// General Dialogs Labels +DlgGenNotSet : "<не е настроен>", +DlgGenId : "Идентификатор", +DlgGenLangDir : "посока на речта", +DlgGenLangDirLtr : "От ляво на дясно", +DlgGenLangDirRtl : "От дясно на ляво", +DlgGenLangCode : "Код на езика", +DlgGenAccessKey : "Бърз клавиш", +DlgGenName : "Име", +DlgGenTabIndex : "Ред на достъп", +DlgGenLongDescr : "Описание на връзката", +DlgGenClass : "Клас от стиловите таблици", +DlgGenTitle : "Препоръчително заглавие", +DlgGenContType : "Препоръчителен тип на съдържанието", +DlgGenLinkCharset : "Тип на свързания ресурс", +DlgGenStyle : "Стил", + +// Image Dialog +DlgImgTitle : "Параметри на изображението", +DlgImgInfoTab : "Информация за изображението", +DlgImgBtnUpload : "Прати към сървъра", +DlgImgURL : "Пълен път (URL)", +DlgImgUpload : "Качи", +DlgImgAlt : "Алтернативен текст", +DlgImgWidth : "Ширина", +DlgImgHeight : "Височина", +DlgImgLockRatio : "Запази пропорцията", +DlgBtnResetSize : "Възстанови размера", +DlgImgBorder : "Рамка", +DlgImgHSpace : "Хоризонтален отстъп", +DlgImgVSpace : "Вертикален отстъп", +DlgImgAlign : "Подравняване", +DlgImgAlignLeft : "Ляво", +DlgImgAlignAbsBottom: "Най-долу", +DlgImgAlignAbsMiddle: "Точно по средата", +DlgImgAlignBaseline : "По базовата линия", +DlgImgAlignBottom : "Долу", +DlgImgAlignMiddle : "По средата", +DlgImgAlignRight : "Дясно", +DlgImgAlignTextTop : "Върху текста", +DlgImgAlignTop : "Отгоре", +DlgImgPreview : "Изглед", +DlgImgAlertUrl : "Моля, въведете пълния път до изображението", +DlgImgLinkTab : "Връзка", + +// Flash Dialog +DlgFlashTitle : "Параметри на Flash обекта", +DlgFlashChkPlay : "Автоматично стартиране", +DlgFlashChkLoop : "Ново стартиране след завършването", +DlgFlashChkMenu : "Разрешено Flash меню", +DlgFlashScale : "Оразмеряване", +DlgFlashScaleAll : "Покажи целия обект", +DlgFlashScaleNoBorder : "Без рамка", +DlgFlashScaleFit : "Според мястото", + +// Link Dialog +DlgLnkWindowTitle : "Връзка", +DlgLnkInfoTab : "Информация за връзката", +DlgLnkTargetTab : "Цел", + +DlgLnkType : "Вид на връзката", +DlgLnkTypeURL : "Пълен път (URL)", +DlgLnkTypeAnchor : "Котва в текущата страница", +DlgLnkTypeEMail : "Е-поща", +DlgLnkProto : "Протокол", +DlgLnkProtoOther : "<друго>", +DlgLnkURL : "Пълен път (URL)", +DlgLnkAnchorSel : "Изберете котва", +DlgLnkAnchorByName : "По име на котвата", +DlgLnkAnchorById : "По идентификатор на елемент", +DlgLnkNoAnchors : "(Няма котви в текущия документ)", +DlgLnkEMail : "Адрес за е-поща", +DlgLnkEMailSubject : "Тема на писмото", +DlgLnkEMailBody : "Текст на писмото", +DlgLnkUpload : "Качи", +DlgLnkBtnUpload : "Прати на сървъра", + +DlgLnkTarget : "Цел", +DlgLnkTargetFrame : "<рамка>", +DlgLnkTargetPopup : "<дъщерен прозорец>", +DlgLnkTargetBlank : "Нов прозорец (_blank)", +DlgLnkTargetParent : "Родителски прозорец (_parent)", +DlgLnkTargetSelf : "Активния прозорец (_self)", +DlgLnkTargetTop : "Целия прозорец (_top)", +DlgLnkTargetFrameName : "Име на целевия прозорец", +DlgLnkPopWinName : "Име на дъщерния прозорец", +DlgLnkPopWinFeat : "Параметри на дъщерния прозорец", +DlgLnkPopResize : "С променливи размери", +DlgLnkPopLocation : "Поле за адрес", +DlgLnkPopMenu : "Меню", +DlgLnkPopScroll : "Плъзгач", +DlgLnkPopStatus : "Поле за статус", +DlgLnkPopToolbar : "Панел с бутони", +DlgLnkPopFullScrn : "Голям екран (MS IE)", +DlgLnkPopDependent : "Зависим (Netscape)", +DlgLnkPopWidth : "Ширина", +DlgLnkPopHeight : "Височина", +DlgLnkPopLeft : "Координати - X", +DlgLnkPopTop : "Координати - Y", + +DlnLnkMsgNoUrl : "Моля, напишете пълния път (URL)", +DlnLnkMsgNoEMail : "Моля, напишете адреса за е-поща", +DlnLnkMsgNoAnchor : "Моля, изберете котва", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Изберете цвят", +DlgColorBtnClear : "Изчисти", +DlgColorHighlight : "Текущ", +DlgColorSelected : "Избран", + +// Smiley Dialog +DlgSmileyTitle : "Добави усмивка", + +// Special Character Dialog +DlgSpecialCharTitle : "Изберете специален символ", + +// Table Dialog +DlgTableTitle : "Параметри на таблицата", +DlgTableRows : "Редове", +DlgTableColumns : "Колони", +DlgTableBorder : "Размер на рамката", +DlgTableAlign : "Подравняване", +DlgTableAlignNotSet : "<Не е избрано>", +DlgTableAlignLeft : "Ляво", +DlgTableAlignCenter : "Център", +DlgTableAlignRight : "Дясно", +DlgTableWidth : "Ширина", +DlgTableWidthPx : "пиксели", +DlgTableWidthPc : "проценти", +DlgTableHeight : "Височина", +DlgTableCellSpace : "Разстояние между клетките", +DlgTableCellPad : "Отстъп на съдържанието в клетките", +DlgTableCaption : "Заглавие", +DlgTableSummary : "Резюме", + +// Table Cell Dialog +DlgCellTitle : "Параметри на клетката", +DlgCellWidth : "Ширина", +DlgCellWidthPx : "пиксели", +DlgCellWidthPc : "проценти", +DlgCellHeight : "Височина", +DlgCellWordWrap : "пренасяне на нов ред", +DlgCellWordWrapNotSet : "<Не е настроено>", +DlgCellWordWrapYes : "Да", +DlgCellWordWrapNo : "не", +DlgCellHorAlign : "Хоризонтално подравняване", +DlgCellHorAlignNotSet : "<Не е настроено>", +DlgCellHorAlignLeft : "Ляво", +DlgCellHorAlignCenter : "Център", +DlgCellHorAlignRight: "Дясно", +DlgCellVerAlign : "Вертикално подравняване", +DlgCellVerAlignNotSet : "<Не е настроено>", +DlgCellVerAlignTop : "Горе", +DlgCellVerAlignMiddle : "По средата", +DlgCellVerAlignBottom : "Долу", +DlgCellVerAlignBaseline : "По базовата линия", +DlgCellRowSpan : "повече от един ред", +DlgCellCollSpan : "повече от една колона", +DlgCellBackColor : "фонов цвят", +DlgCellBorderColor : "цвят на рамката", +DlgCellBtnSelect : "Изберете...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Търси", +DlgFindFindBtn : "Търси", +DlgFindNotFoundMsg : "Указания текст не беше намерен.", + +// Replace Dialog +DlgReplaceTitle : "Замести", +DlgReplaceFindLbl : "Търси:", +DlgReplaceReplaceLbl : "Замести с:", +DlgReplaceCaseChk : "Със същия регистър", +DlgReplaceReplaceBtn : "Замести", +DlgReplaceReplAllBtn : "Замести всички", +DlgReplaceWordChk : "Търси същата дума", + +// Paste Operations / Dialog +PasteErrorCut : "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).", +PasteErrorCopy : "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).", + +PasteAsText : "Вмъкни като чист текст", +PasteFromWord : "Вмъкни от MS Word", + +DlgPasteMsg2 : "Вмъкнете тук съдъжанието с клавиатуарата (Ctrl+V) и натиснете OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Игнорирай шрифтовите дефиниции", +DlgPasteRemoveStyles : "Изтрий стиловите дефиниции", + +// Color Picker +ColorAutomatic : "По подразбиране", +ColorMoreColors : "Други цветове...", + +// Document Properties +DocProps : "Параметри на документа", + +// Anchor Dialog +DlgAnchorTitle : "Параметри на котвата", +DlgAnchorName : "Име на котвата", +DlgAnchorErrorName : "Моля, въведете име на котвата", + +// Speller Pages Dialog +DlgSpellNotInDic : "Липсва в речника", +DlgSpellChangeTo : "Промени на", +DlgSpellBtnIgnore : "Игнорирай", +DlgSpellBtnIgnoreAll : "Игнорирай всички", +DlgSpellBtnReplace : "Замести", +DlgSpellBtnReplaceAll : "Замести всички", +DlgSpellBtnUndo : "Отмени", +DlgSpellNoSuggestions : "- Няма предложения -", +DlgSpellProgress : "Извършване на проверката за правопис...", +DlgSpellNoMispell : "Проверката за правопис завършена: не са открити правописни грешки", +DlgSpellNoChanges : "Проверката за правопис завършена: няма променени думи", +DlgSpellOneChange : "Проверката за правопис завършена: една дума е променена", +DlgSpellManyChanges : "Проверката за правопис завършена: %1 думи са променени", + +IeSpellDownload : "Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?", + +// Button Dialog +DlgButtonText : "Текст (Стойност)", +DlgButtonType : "Тип", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Име", +DlgCheckboxValue : "Стойност", +DlgCheckboxSelected : "Отметнато", + +// Form Dialog +DlgFormName : "Име", +DlgFormAction : "Действие", +DlgFormMethod : "Метод", + +// Select Field Dialog +DlgSelectName : "Име", +DlgSelectValue : "Стойност", +DlgSelectSize : "Размер", +DlgSelectLines : "линии", +DlgSelectChkMulti : "Разрешено множествено селектиране", +DlgSelectOpAvail : "Възможни опции", +DlgSelectOpText : "Текст", +DlgSelectOpValue : "Стойност", +DlgSelectBtnAdd : "Добави", +DlgSelectBtnModify : "Промени", +DlgSelectBtnUp : "Нагоре", +DlgSelectBtnDown : "Надолу", +DlgSelectBtnSetValue : "Настрой като избрана стойност", +DlgSelectBtnDelete : "Изтрий", + +// Textarea Dialog +DlgTextareaName : "Име", +DlgTextareaCols : "Колони", +DlgTextareaRows : "Редове", + +// Text Field Dialog +DlgTextName : "Име", +DlgTextValue : "Стойност", +DlgTextCharWidth : "Ширина на символите", +DlgTextMaxChars : "Максимум символи", +DlgTextType : "Тип", +DlgTextTypeText : "Текст", +DlgTextTypePass : "Парола", + +// Hidden Field Dialog +DlgHiddenName : "Име", +DlgHiddenValue : "Стойност", + +// Bulleted List Dialog +BulletedListProp : "Параметри на ненумерирания списък", +NumberedListProp : "Параметри на нумерирания списък", +DlgLstStart : "Start", //MISSING +DlgLstType : "Тип", +DlgLstTypeCircle : "Окръжност", +DlgLstTypeDisc : "Кръг", +DlgLstTypeSquare : "Квадрат", +DlgLstTypeNumbers : "Числа (1, 2, 3)", +DlgLstTypeLCase : "Малки букви (a, b, c)", +DlgLstTypeUCase : "Големи букви (A, B, C)", +DlgLstTypeSRoman : "Малки римски числа (i, ii, iii)", +DlgLstTypeLRoman : "Големи римски числа (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Общи", +DlgDocBackTab : "Фон", +DlgDocColorsTab : "Цветове и отстъпи", +DlgDocMetaTab : "Мета данни", + +DlgDocPageTitle : "Заглавие на страницата", +DlgDocLangDir : "Посока на речта", +DlgDocLangDirLTR : "От ляво на дясно", +DlgDocLangDirRTL : "От дясно на ляво", +DlgDocLangCode : "Код на езика", +DlgDocCharSet : "Кодиране на символите", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Друго кодиране на символите", + +DlgDocDocType : "Тип на документа", +DlgDocDocTypeOther : "Друг тип на документа", +DlgDocIncXHTML : "Включи XHTML декларация", +DlgDocBgColor : "Цвят на фона", +DlgDocBgImage : "Пълен път до фоновото изображение", +DlgDocBgNoScroll : "Не-повтарящо се фоново изображение", +DlgDocCText : "Текст", +DlgDocCLink : "Връзка", +DlgDocCVisited : "Посетена връзка", +DlgDocCActive : "Активна връзка", +DlgDocMargins : "Отстъпи на страницата", +DlgDocMaTop : "Горе", +DlgDocMaLeft : "Ляво", +DlgDocMaRight : "Дясно", +DlgDocMaBottom : "Долу", +DlgDocMeIndex : "Ключови думи за документа (разделени със запетаи)", +DlgDocMeDescr : "Описание на документа", +DlgDocMeAuthor : "Автор", +DlgDocMeCopy : "Авторски права", +DlgDocPreview : "Изглед", + +// Templates Dialog +Templates : "Шаблони", +DlgTemplatesTitle : "Шаблони", +DlgTemplatesSelMsg : "Изберете шаблон
        (текущото съдържание на редактора ще бъде загубено):", +DlgTemplatesLoading : "Зареждане на списъка с шаблоните. Моля изчакайте...", +DlgTemplatesNoTpl : "(Няма дефинирани шаблони)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "За", +DlgAboutBrowserInfoTab : "Информация за браузъра", +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "версия", +DlgAboutInfo : "За повече информация посетете" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/bn.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bn.js new file mode 100644 index 0000000..b511e60 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bn.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Bengali/Bangla language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "টূলবার গুটিয়ে দাও", +ToolbarExpand : "টূলবার ছড়িয়ে দাও", + +// Toolbar Items and Context Menu +Save : "সংরক্ষন কর", +NewPage : "নতুন পেজ", +Preview : "প্রিভিউ", +Cut : "কাট", +Copy : "কপি", +Paste : "পেস্ট", +PasteText : "পেস্ট (সাদা টেক্সট)", +PasteWord : "পেস্ট (শব্দ)", +Print : "প্রিন্ট", +SelectAll : "সব সিলেক্ট কর", +RemoveFormat : "ফরমেট সরাও", +InsertLinkLbl : "লিংকের যুক্ত করার লেবেল", +InsertLink : "লিংক যুক্ত কর", +RemoveLink : "লিংক সরাও", +Anchor : "নোঙ্গর", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "ছবির লেবেল যুক্ত কর", +InsertImage : "ছবি যুক্ত কর", +InsertFlashLbl : "ফ্লাশ লেবেল যুক্ত কর", +InsertFlash : "ফ্লাশ যুক্ত কর", +InsertTableLbl : "টেবিলের লেবেল যুক্ত কর", +InsertTable : "টেবিল যুক্ত কর", +InsertLineLbl : "রেখা যুক্ত কর", +InsertLine : "রেখা যুক্ত কর", +InsertSpecialCharLbl: "বিশেষ অক্ষরের লেবেল যুক্ত কর", +InsertSpecialChar : "বিশেষ অক্ষর যুক্ত কর", +InsertSmileyLbl : "স্মাইলী", +InsertSmiley : "স্মাইলী যুক্ত কর", +About : "FCKeditor কে বানিয়েছে", +Bold : "বোল্ড", +Italic : "ইটালিক", +Underline : "আন্ডারলাইন", +StrikeThrough : "স্ট্রাইক থ্রু", +Subscript : "অধোলেখ", +Superscript : "অভিলেখ", +LeftJustify : "বা দিকে ঘেঁষা", +CenterJustify : "মাঝ বরাবর ঘেষা", +RightJustify : "ডান দিকে ঘেঁষা", +BlockJustify : "ব্লক জাস্টিফাই", +DecreaseIndent : "ইনডেন্ট কমাও", +IncreaseIndent : "ইনডেন্ট বাড়াও", +Blockquote : "Blockquote", //MISSING +Undo : "আনডু", +Redo : "রি-ডু", +NumberedListLbl : "সাংখ্যিক লিস্টের লেবেল", +NumberedList : "সাংখ্যিক লিস্ট", +BulletedListLbl : "বুলেট লিস্ট লেবেল", +BulletedList : "বুলেটেড লিস্ট", +ShowTableBorders : "টেবিল বর্ডার", +ShowDetails : "সবটুকু দেখাও", +Style : "স্টাইল", +FontFormat : "ফন্ট ফরমেট", +Font : "ফন্ট", +FontSize : "সাইজ", +TextColor : "টেক্স্ট রং", +BGColor : "বেকগ্রাউন্ড রং", +Source : "সোর্স", +Find : "খোজো", +Replace : "রিপ্লেস", +SpellCheck : "বানান চেক", +UniversalKeyboard : "সার্বজনীন কিবোর্ড", +PageBreakLbl : "পেজ ব্রেক লেবেল", +PageBreak : "পেজ ব্রেক", + +Form : "ফর্ম", +Checkbox : "চেক বাক্স", +RadioButton : "রেডিও বাটন", +TextField : "টেক্সট ফীল্ড", +Textarea : "টেক্সট এরিয়া", +HiddenField : "গুপ্ত ফীল্ড", +Button : "বাটন", +SelectionField : "বাছাই ফীল্ড", +ImageButton : "ছবির বাটন", + +FitWindow : "উইন্ডো ফিট কর", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "লিংক সম্পাদন", +CellCM : "সেল", +RowCM : "রো", +ColumnCM : "কলাম", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "রো মুছে দাও", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "কলাম মুছে দাও", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "সেল মুছে দাও", +MergeCells : "সেল জোড়া দাও", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "টেবিল ডিলীট কর", +CellProperties : "সেলের প্রোপার্টিজ", +TableProperties : "টেবিল প্রোপার্টি", +ImageProperties : "ছবি প্রোপার্টি", +FlashProperties : "ফ্লাশ প্রোপার্টি", + +AnchorProp : "নোঙর প্রোপার্টি", +ButtonProp : "বাটন প্রোপার্টি", +CheckboxProp : "চেক বক্স প্রোপার্টি", +HiddenFieldProp : "গুপ্ত ফীল্ড প্রোপার্টি", +RadioButtonProp : "রেডিও বাটন প্রোপার্টি", +ImageButtonProp : "ছবি বাটন প্রোপার্টি", +TextFieldProp : "টেক্সট ফীল্ড প্রোপার্টি", +SelectionFieldProp : "বাছাই ফীল্ড প্রোপার্টি", +TextareaProp : "টেক্সট এরিয়া প্রোপার্টি", +FormProp : "ফর্ম প্রোপার্টি", + +FontFormats : "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)", + +// Alerts and Messages +ProcessingXHTML : "XHTML প্রসেস করা হচ্ছে", +Done : "শেষ হয়েছে", +PasteWordConfirm : "যে টেকস্টটি আপনি পেস্ট করতে চাচ্ছেন মনে হচ্ছে সেটি ওয়ার্ড থেকে কপি করা। আপনি কি পেস্ট করার আগে একে পরিষ্কার করতে চান?", +NotCompatiblePaste : "এই কমান্ডটি শুধুমাত্র ইন্টারনেট এক্সপ্লোরার ৫.০ বা তার পরের ভার্সনে পাওয়া সম্ভব। আপনি কি পরিষ্কার না করেই পেস্ট করতে চান?", +UnknownToolbarItem : "অজানা টুলবার আইটেম \"%1\"", +UnknownCommand : "অজানা কমান্ড \"%1\"", +NotImplemented : "কমান্ড ইমপ্লিমেন্ট করা হয়নি", +UnknownToolbarSet : "টুলবার সেট \"%1\" এর অস্তিত্ব নেই", +NoActiveX : "আপনার ব্রাউজারের সুরক্ষা সেটিংস কারনে এডিটরের কিছু ফিচার পাওয়া নাও যেতে পারে। আপনাকে অবশ্যই \"Run ActiveX controls and plug-ins\" এনাবেল করে নিতে হবে। আপনি ভুলভ্রান্তি কিছু কিছু ফিচারের অনুপস্থিতি উপলব্ধি করতে পারেন।", +BrowseServerBlocked : "রিসোর্স ব্রাউজার খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।", +DialogBlocked : "ডায়ালগ ইউন্ডো খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।", + +// Dialogs +DlgBtnOK : "ওকে", +DlgBtnCancel : "বাতিল", +DlgBtnClose : "বন্ধ কর", +DlgBtnBrowseServer : "ব্রাউজ সার্ভার", +DlgAdvancedTag : "এডভান্সড", +DlgOpOther : "<অন্য>", +DlgInfoTab : "তথ্য", +DlgAlertUrl : "দয়া করে URL যুক্ত করুন", + +// General Dialogs Labels +DlgGenNotSet : "<সেট নেই>", +DlgGenId : "আইডি", +DlgGenLangDir : "ভাষা লেখার দিক", +DlgGenLangDirLtr : "বাম থেকে ডান (LTR)", +DlgGenLangDirRtl : "ডান থেকে বাম (RTL)", +DlgGenLangCode : "ভাষা কোড", +DlgGenAccessKey : "এক্সেস কী", +DlgGenName : "নাম", +DlgGenTabIndex : "ট্যাব ইন্ডেক্স", +DlgGenLongDescr : "URL এর লম্বা বর্ণনা", +DlgGenClass : "স্টাইল-শীট ক্লাস", +DlgGenTitle : "পরামর্শ শীর্ষক", +DlgGenContType : "পরামর্শ কন্টেন্টের প্রকার", +DlgGenLinkCharset : "লিংক রিসোর্স ক্যারেক্টর সেট", +DlgGenStyle : "স্টাইল", + +// Image Dialog +DlgImgTitle : "ছবির প্রোপার্টি", +DlgImgInfoTab : "ছবির তথ্য", +DlgImgBtnUpload : "ইহাকে সার্ভারে প্রেরন কর", +DlgImgURL : "URL", +DlgImgUpload : "আপলোড", +DlgImgAlt : "বিকল্প টেক্সট", +DlgImgWidth : "প্রস্থ", +DlgImgHeight : "দৈর্ঘ্য", +DlgImgLockRatio : "অনুপাত লক কর", +DlgBtnResetSize : "সাইজ পূর্বাবস্থায় ফিরিয়ে দাও", +DlgImgBorder : "বর্ডার", +DlgImgHSpace : "হরাইজন্টাল স্পেস", +DlgImgVSpace : "ভার্টিকেল স্পেস", +DlgImgAlign : "এলাইন", +DlgImgAlignLeft : "বামে", +DlgImgAlignAbsBottom: "Abs নীচে", +DlgImgAlignAbsMiddle: "Abs উপর", +DlgImgAlignBaseline : "মূল রেখা", +DlgImgAlignBottom : "নীচে", +DlgImgAlignMiddle : "মধ্য", +DlgImgAlignRight : "ডানে", +DlgImgAlignTextTop : "টেক্সট উপর", +DlgImgAlignTop : "উপর", +DlgImgPreview : "প্রীভিউ", +DlgImgAlertUrl : "অনুগ্রহক করে ছবির URL টাইপ করুন", +DlgImgLinkTab : "লিংক", + +// Flash Dialog +DlgFlashTitle : "ফ্ল্যাশ প্রোপার্টি", +DlgFlashChkPlay : "অটো প্লে", +DlgFlashChkLoop : "লূপ", +DlgFlashChkMenu : "ফ্ল্যাশ মেনু এনাবল কর", +DlgFlashScale : "স্কেল", +DlgFlashScaleAll : "সব দেখাও", +DlgFlashScaleNoBorder : "কোনো বর্ডার নেই", +DlgFlashScaleFit : "নিখুঁত ফিট", + +// Link Dialog +DlgLnkWindowTitle : "লিংক", +DlgLnkInfoTab : "লিংক তথ্য", +DlgLnkTargetTab : "টার্গেট", + +DlgLnkType : "লিংক প্রকার", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "এই পেজে নোঙর কর", +DlgLnkTypeEMail : "ইমেইল", +DlgLnkProto : "প্রোটোকল", +DlgLnkProtoOther : "<অন্য>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "নোঙর বাছাই", +DlgLnkAnchorByName : "নোঙরের নাম দিয়ে", +DlgLnkAnchorById : "নোঙরের আইডি দিয়ে", +DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING +DlgLnkEMail : "ইমেইল ঠিকানা", +DlgLnkEMailSubject : "মেসেজের বিষয়", +DlgLnkEMailBody : "মেসেজের দেহ", +DlgLnkUpload : "আপলোড", +DlgLnkBtnUpload : "একে সার্ভারে পাঠাও", + +DlgLnkTarget : "টার্গেট", +DlgLnkTargetFrame : "<ফ্রেম>", +DlgLnkTargetPopup : "<পপআপ উইন্ডো>", +DlgLnkTargetBlank : "নতুন উইন্ডো (_blank)", +DlgLnkTargetParent : "মূল উইন্ডো (_parent)", +DlgLnkTargetSelf : "এই উইন্ডো (_self)", +DlgLnkTargetTop : "শীর্ষ উইন্ডো (_top)", +DlgLnkTargetFrameName : "টার্গেট ফ্রেমের নাম", +DlgLnkPopWinName : "পপআপ উইন্ডোর নাম", +DlgLnkPopWinFeat : "পপআপ উইন্ডো ফীচার সমূহ", +DlgLnkPopResize : "রিসাইজ করা সম্ভব", +DlgLnkPopLocation : "লোকেশন বার", +DlgLnkPopMenu : "মেন্যু বার", +DlgLnkPopScroll : "স্ক্রল বার", +DlgLnkPopStatus : "স্ট্যাটাস বার", +DlgLnkPopToolbar : "টুল বার", +DlgLnkPopFullScrn : "পূর্ণ পর্দা জুড়ে (IE)", +DlgLnkPopDependent : "ডিপেন্ডেন্ট (Netscape)", +DlgLnkPopWidth : "প্রস্থ", +DlgLnkPopHeight : "দৈর্ঘ্য", +DlgLnkPopLeft : "বামের পজিশন", +DlgLnkPopTop : "ডানের পজিশন", + +DlnLnkMsgNoUrl : "অনুগ্রহ করে URL লিংক টাইপ করুন", +DlnLnkMsgNoEMail : "অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন", +DlnLnkMsgNoAnchor : "অনুগ্রহ করে নোঙর বাছাই করুন", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "রং বাছাই কর", +DlgColorBtnClear : "পরিষ্কার কর", +DlgColorHighlight : "হাইলাইট", +DlgColorSelected : "সিলেক্টেড", + +// Smiley Dialog +DlgSmileyTitle : "স্মাইলী যুক্ত কর", + +// Special Character Dialog +DlgSpecialCharTitle : "বিশেষ ক্যারেক্টার বাছাই কর", + +// Table Dialog +DlgTableTitle : "টেবিল প্রোপার্টি", +DlgTableRows : "রো", +DlgTableColumns : "কলাম", +DlgTableBorder : "বর্ডার সাইজ", +DlgTableAlign : "এলাইনমেন্ট", +DlgTableAlignNotSet : "<সেট নেই>", +DlgTableAlignLeft : "বামে", +DlgTableAlignCenter : "মাঝখানে", +DlgTableAlignRight : "ডানে", +DlgTableWidth : "প্রস্থ", +DlgTableWidthPx : "পিক্সেল", +DlgTableWidthPc : "শতকরা", +DlgTableHeight : "দৈর্ঘ্য", +DlgTableCellSpace : "সেল স্পেস", +DlgTableCellPad : "সেল প্যাডিং", +DlgTableCaption : "শীর্ষক", +DlgTableSummary : "সারাংশ", + +// Table Cell Dialog +DlgCellTitle : "সেল প্রোপার্টি", +DlgCellWidth : "প্রস্থ", +DlgCellWidthPx : "পিক্সেল", +DlgCellWidthPc : "শতকরা", +DlgCellHeight : "দৈর্ঘ্য", +DlgCellWordWrap : "ওয়ার্ড রেপ", +DlgCellWordWrapNotSet : "<সেট নেই>", +DlgCellWordWrapYes : "হাঁ", +DlgCellWordWrapNo : "না", +DlgCellHorAlign : "হরাইজন্টাল এলাইনমেন্ট", +DlgCellHorAlignNotSet : "<সেট নেই>", +DlgCellHorAlignLeft : "বামে", +DlgCellHorAlignCenter : "মাঝখানে", +DlgCellHorAlignRight: "ডানে", +DlgCellVerAlign : "ভার্টিক্যাল এলাইনমেন্ট", +DlgCellVerAlignNotSet : "<সেট নেই>", +DlgCellVerAlignTop : "উপর", +DlgCellVerAlignMiddle : "মধ্য", +DlgCellVerAlignBottom : "নীচে", +DlgCellVerAlignBaseline : "মূলরেখা", +DlgCellRowSpan : "রো স্প্যান", +DlgCellCollSpan : "কলাম স্প্যান", +DlgCellBackColor : "ব্যাকগ্রাউন্ড রং", +DlgCellBorderColor : "বর্ডারের রং", +DlgCellBtnSelect : "বাছাই কর", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "খোঁজো", +DlgFindFindBtn : "খোঁজো", +DlgFindNotFoundMsg : "আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি", + +// Replace Dialog +DlgReplaceTitle : "বদলে দাও", +DlgReplaceFindLbl : "যা খুঁজতে হবে:", +DlgReplaceReplaceLbl : "যার সাথে বদলাতে হবে:", +DlgReplaceCaseChk : "কেস মিলাও", +DlgReplaceReplaceBtn : "বদলে দাও", +DlgReplaceReplAllBtn : "সব বদলে দাও", +DlgReplaceWordChk : "পুরা শব্দ মেলাও", + +// Paste Operations / Dialog +PasteErrorCut : "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।", +PasteErrorCopy : "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।", + +PasteAsText : "সাদা টেক্সট হিসেবে পেস্ট কর", +PasteFromWord : "ওয়ার্ড থেকে পেস্ট কর", + +DlgPasteMsg2 : "অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (Ctrl+V) পেস্ট করুন এবং OK চাপ দিন", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "ফন্ট ফেস ডেফিনেশন ইগনোর করুন", +DlgPasteRemoveStyles : "স্টাইল ডেফিনেশন সরিয়ে দিন", + +// Color Picker +ColorAutomatic : "অটোমেটিক", +ColorMoreColors : "আরও রং...", + +// Document Properties +DocProps : "ডক্যুমেন্ট প্রোপার্টি", + +// Anchor Dialog +DlgAnchorTitle : "নোঙরের প্রোপার্টি", +DlgAnchorName : "নোঙরের নাম", +DlgAnchorErrorName : "নোঙরের নাম টাইপ করুন", + +// Speller Pages Dialog +DlgSpellNotInDic : "শব্দকোষে নেই", +DlgSpellChangeTo : "এতে বদলাও", +DlgSpellBtnIgnore : "ইগনোর কর", +DlgSpellBtnIgnoreAll : "সব ইগনোর কর", +DlgSpellBtnReplace : "বদলে দাও", +DlgSpellBtnReplaceAll : "সব বদলে দাও", +DlgSpellBtnUndo : "আন্ডু", +DlgSpellNoSuggestions : "- কোন সাজেশন নেই -", +DlgSpellProgress : "বানান পরীক্ষা চলছে...", +DlgSpellNoMispell : "বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি", +DlgSpellNoChanges : "বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি", +DlgSpellOneChange : "বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে", +DlgSpellManyChanges : "বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে", + +IeSpellDownload : "বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?", + +// Button Dialog +DlgButtonText : "টেক্সট (ভ্যালু)", +DlgButtonType : "প্রকার", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "নাম", +DlgCheckboxValue : "ভ্যালু", +DlgCheckboxSelected : "সিলেক্টেড", + +// Form Dialog +DlgFormName : "নাম", +DlgFormAction : "একশ্যন", +DlgFormMethod : "পদ্ধতি", + +// Select Field Dialog +DlgSelectName : "নাম", +DlgSelectValue : "ভ্যালু", +DlgSelectSize : "সাইজ", +DlgSelectLines : "লাইন সমূহ", +DlgSelectChkMulti : "একাধিক সিলেকশন এলাউ কর", +DlgSelectOpAvail : "অন্যান্য বিকল্প", +DlgSelectOpText : "টেক্সট", +DlgSelectOpValue : "ভ্যালু", +DlgSelectBtnAdd : "যুক্ত", +DlgSelectBtnModify : "বদলে দাও", +DlgSelectBtnUp : "উপর", +DlgSelectBtnDown : "নীচে", +DlgSelectBtnSetValue : "বাছাই করা ভ্যালু হিসেবে সেট কর", +DlgSelectBtnDelete : "ডিলীট", + +// Textarea Dialog +DlgTextareaName : "নাম", +DlgTextareaCols : "কলাম", +DlgTextareaRows : "রো", + +// Text Field Dialog +DlgTextName : "নাম", +DlgTextValue : "ভ্যালু", +DlgTextCharWidth : "ক্যারেক্টার প্রশস্ততা", +DlgTextMaxChars : "সর্বাধিক ক্যারেক্টার", +DlgTextType : "টাইপ", +DlgTextTypeText : "টেক্সট", +DlgTextTypePass : "পাসওয়ার্ড", + +// Hidden Field Dialog +DlgHiddenName : "নাম", +DlgHiddenValue : "ভ্যালু", + +// Bulleted List Dialog +BulletedListProp : "বুলেটেড সূচী প্রোপার্টি", +NumberedListProp : "সাংখ্যিক সূচী প্রোপার্টি", +DlgLstStart : "Start", //MISSING +DlgLstType : "প্রকার", +DlgLstTypeCircle : "গোল", +DlgLstTypeDisc : "ডিস্ক", +DlgLstTypeSquare : "চৌকোণা", +DlgLstTypeNumbers : "সংখ্যা (1, 2, 3)", +DlgLstTypeLCase : "ছোট অক্ষর (a, b, c)", +DlgLstTypeUCase : "বড় অক্ষর (A, B, C)", +DlgLstTypeSRoman : "ছোট রোমান সংখ্যা (i, ii, iii)", +DlgLstTypeLRoman : "বড় রোমান সংখ্যা (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "সাধারন", +DlgDocBackTab : "ব্যাকগ্রাউন্ড", +DlgDocColorsTab : "রং এবং মার্জিন", +DlgDocMetaTab : "মেটাডেটা", + +DlgDocPageTitle : "পেজ শীর্ষক", +DlgDocLangDir : "ভাষা লিখার দিক", +DlgDocLangDirLTR : "বাম থেকে ডানে (LTR)", +DlgDocLangDirRTL : "ডান থেকে বামে (RTL)", +DlgDocLangCode : "ভাষা কোড", +DlgDocCharSet : "ক্যারেক্টার সেট এনকোডিং", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "অন্য ক্যারেক্টার সেট এনকোডিং", + +DlgDocDocType : "ডক্যুমেন্ট টাইপ হেডিং", +DlgDocDocTypeOther : "অন্য ডক্যুমেন্ট টাইপ হেডিং", +DlgDocIncXHTML : "XHTML ডেক্লারেশন যুক্ত কর", +DlgDocBgColor : "ব্যাকগ্রাউন্ড রং", +DlgDocBgImage : "ব্যাকগ্রাউন্ড ছবির URL", +DlgDocBgNoScroll : "স্ক্রলহীন ব্যাকগ্রাউন্ড", +DlgDocCText : "টেক্সট", +DlgDocCLink : "লিংক", +DlgDocCVisited : "ভিজিট করা লিংক", +DlgDocCActive : "সক্রিয় লিংক", +DlgDocMargins : "পেজ মার্জিন", +DlgDocMaTop : "উপর", +DlgDocMaLeft : "বামে", +DlgDocMaRight : "ডানে", +DlgDocMaBottom : "নীচে", +DlgDocMeIndex : "ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)", +DlgDocMeDescr : "ডক্যূমেন্ট বর্ণনা", +DlgDocMeAuthor : "লেখক", +DlgDocMeCopy : "কপীরাইট", +DlgDocPreview : "প্রীভিউ", + +// Templates Dialog +Templates : "টেমপ্লেট", +DlgTemplatesTitle : "কনটেন্ট টেমপ্লেট", +DlgTemplatesSelMsg : "অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন
        (আসল কনটেন্ট হারিয়ে যাবে):", +DlgTemplatesLoading : "টেমপ্লেট লিস্ট হারিয়ে যাবে। অনুগ্রহ করে অপেক্ষা করুন...", +DlgTemplatesNoTpl : "(কোন টেমপ্লেট ডিফাইন করা নেই)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "কে বানিয়েছে", +DlgAboutBrowserInfoTab : "ব্রাউজারের ব্যাপারে তথ্য", +DlgAboutLicenseTab : "লাইসেন্স", +DlgAboutVersion : "ভার্সন", +DlgAboutInfo : "আরও তথ্যের জন্য যান" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/bs.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bs.js new file mode 100644 index 0000000..ad3f31b --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/bs.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Bosnian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Skupi trake sa alatima", +ToolbarExpand : "Otvori trake sa alatima", + +// Toolbar Items and Context Menu +Save : "Snimi", +NewPage : "Novi dokument", +Preview : "Prikaži", +Cut : "Izreži", +Copy : "Kopiraj", +Paste : "Zalijepi", +PasteText : "Zalijepi kao obièan tekst", +PasteWord : "Zalijepi iz Word-a", +Print : "Štampaj", +SelectAll : "Selektuj sve", +RemoveFormat : "Poništi format", +InsertLinkLbl : "Link", +InsertLink : "Ubaci/Izmjeni link", +RemoveLink : "Izbriši link", +Anchor : "Insert/Edit Anchor", //MISSING +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Slika", +InsertImage : "Ubaci/Izmjeni sliku", +InsertFlashLbl : "Flash", //MISSING +InsertFlash : "Insert/Edit Flash", //MISSING +InsertTableLbl : "Tabela", +InsertTable : "Ubaci/Izmjeni tabelu", +InsertLineLbl : "Linija", +InsertLine : "Ubaci horizontalnu liniju", +InsertSpecialCharLbl: "Specijalni karakter", +InsertSpecialChar : "Ubaci specijalni karater", +InsertSmileyLbl : "Smješko", +InsertSmiley : "Ubaci smješka", +About : "O FCKeditor-u", +Bold : "Boldiraj", +Italic : "Ukosi", +Underline : "Podvuci", +StrikeThrough : "Precrtaj", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Lijevo poravnanje", +CenterJustify : "Centralno poravnanje", +RightJustify : "Desno poravnanje", +BlockJustify : "Puno poravnanje", +DecreaseIndent : "Smanji uvod", +IncreaseIndent : "Poveæaj uvod", +Blockquote : "Blockquote", //MISSING +Undo : "Vrati", +Redo : "Ponovi", +NumberedListLbl : "Numerisana lista", +NumberedList : "Ubaci/Izmjeni numerisanu listu", +BulletedListLbl : "Lista", +BulletedList : "Ubaci/Izmjeni listu", +ShowTableBorders : "Pokaži okvire tabela", +ShowDetails : "Pokaži detalje", +Style : "Stil", +FontFormat : "Format", +Font : "Font", +FontSize : "Velièina", +TextColor : "Boja teksta", +BGColor : "Boja pozadine", +Source : "HTML kôd", +Find : "Naði", +Replace : "Zamjeni", +SpellCheck : "Check Spelling", //MISSING +UniversalKeyboard : "Universal Keyboard", //MISSING +PageBreakLbl : "Page Break", //MISSING +PageBreak : "Insert Page Break", //MISSING + +Form : "Form", //MISSING +Checkbox : "Checkbox", //MISSING +RadioButton : "Radio Button", //MISSING +TextField : "Text Field", //MISSING +Textarea : "Textarea", //MISSING +HiddenField : "Hidden Field", //MISSING +Button : "Button", //MISSING +SelectionField : "Selection Field", //MISSING +ImageButton : "Image Button", //MISSING + +FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Izmjeni link", +CellCM : "Cell", //MISSING +RowCM : "Row", //MISSING +ColumnCM : "Column", //MISSING +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Briši redove", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Briši kolone", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Briši æelije", +MergeCells : "Spoji æelije", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Delete Table", //MISSING +CellProperties : "Svojstva æelije", +TableProperties : "Svojstva tabele", +ImageProperties : "Svojstva slike", +FlashProperties : "Flash Properties", //MISSING + +AnchorProp : "Anchor Properties", //MISSING +ButtonProp : "Button Properties", //MISSING +CheckboxProp : "Checkbox Properties", //MISSING +HiddenFieldProp : "Hidden Field Properties", //MISSING +RadioButtonProp : "Radio Button Properties", //MISSING +ImageButtonProp : "Image Button Properties", //MISSING +TextFieldProp : "Text Field Properties", //MISSING +SelectionFieldProp : "Selection Field Properties", //MISSING +TextareaProp : "Textarea Properties", //MISSING +FormProp : "Form Properties", //MISSING + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", + +// Alerts and Messages +ProcessingXHTML : "Procesiram XHTML. Molim saèekajte...", +Done : "Gotovo", +PasteWordConfirm : "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?", +NotCompatiblePaste : "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvršite lijepljenje teksta bez èišæenja?", +UnknownToolbarItem : "Nepoznata stavka sa trake sa alatima \"%1\"", +UnknownCommand : "Nepoznata komanda \"%1\"", +NotImplemented : "Komanda nije implementirana", +UnknownToolbarSet : "Traka sa alatima \"%1\" ne postoji", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Odustani", +DlgBtnClose : "Zatvori", +DlgBtnBrowseServer : "Browse Server", //MISSING +DlgAdvancedTag : "Naprednije", +DlgOpOther : "", //MISSING +DlgInfoTab : "Info", //MISSING +DlgAlertUrl : "Please insert the URL", //MISSING + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Smjer pisanja", +DlgGenLangDirLtr : "S lijeva na desno (LTR)", +DlgGenLangDirRtl : "S desna na lijevo (RTL)", +DlgGenLangCode : "Jezièni kôd", +DlgGenAccessKey : "Pristupna tipka", +DlgGenName : "Naziv", +DlgGenTabIndex : "Tab indeks", +DlgGenLongDescr : "Dugaèki opis URL-a", +DlgGenClass : "Klase CSS stilova", +DlgGenTitle : "Advisory title", +DlgGenContType : "Advisory vrsta sadržaja", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Stil", + +// Image Dialog +DlgImgTitle : "Svojstva slike", +DlgImgInfoTab : "Info slike", +DlgImgBtnUpload : "Šalji na server", +DlgImgURL : "URL", +DlgImgUpload : "Šalji", +DlgImgAlt : "Tekst na slici", +DlgImgWidth : "Širina", +DlgImgHeight : "Visina", +DlgImgLockRatio : "Zakljuèaj odnos", +DlgBtnResetSize : "Resetuj dimenzije", +DlgImgBorder : "Okvir", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Poravnanje", +DlgImgAlignLeft : "Lijevo", +DlgImgAlignAbsBottom: "Abs dole", +DlgImgAlignAbsMiddle: "Abs sredina", +DlgImgAlignBaseline : "Bazno", +DlgImgAlignBottom : "Dno", +DlgImgAlignMiddle : "Sredina", +DlgImgAlignRight : "Desno", +DlgImgAlignTextTop : "Vrh teksta", +DlgImgAlignTop : "Vrh", +DlgImgPreview : "Prikaz", +DlgImgAlertUrl : "Molimo ukucajte URL od slike.", +DlgImgLinkTab : "Link", //MISSING + +// Flash Dialog +DlgFlashTitle : "Flash Properties", //MISSING +DlgFlashChkPlay : "Auto Play", //MISSING +DlgFlashChkLoop : "Loop", //MISSING +DlgFlashChkMenu : "Enable Flash Menu", //MISSING +DlgFlashScale : "Scale", //MISSING +DlgFlashScaleAll : "Show all", //MISSING +DlgFlashScaleNoBorder : "No Border", //MISSING +DlgFlashScaleFit : "Exact Fit", //MISSING + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link info", +DlgLnkTargetTab : "Prozor", + +DlgLnkType : "Tip linka", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Sidro na ovoj stranici", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Izaberi sidro", +DlgLnkAnchorByName : "Po nazivu sidra", +DlgLnkAnchorById : "Po Id-u elementa", +DlgLnkNoAnchors : "(Nema dostupnih sidra na stranici)", +DlgLnkEMail : "E-Mail Adresa", +DlgLnkEMailSubject : "Subjekt poruke", +DlgLnkEMailBody : "Poruka", +DlgLnkUpload : "Šalji", +DlgLnkBtnUpload : "Šalji na server", + +DlgLnkTarget : "Prozor", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Novi prozor (_blank)", +DlgLnkTargetParent : "Glavni prozor (_parent)", +DlgLnkTargetSelf : "Isti prozor (_self)", +DlgLnkTargetTop : "Najgornji prozor (_top)", +DlgLnkTargetFrameName : "Target Frame Name", //MISSING +DlgLnkPopWinName : "Naziv popup prozora", +DlgLnkPopWinFeat : "Moguænosti popup prozora", +DlgLnkPopResize : "Promjenljive velièine", +DlgLnkPopLocation : "Traka za lokaciju", +DlgLnkPopMenu : "Izborna traka", +DlgLnkPopScroll : "Scroll traka", +DlgLnkPopStatus : "Statusna traka", +DlgLnkPopToolbar : "Traka sa alatima", +DlgLnkPopFullScrn : "Cijeli ekran (IE)", +DlgLnkPopDependent : "Ovisno (Netscape)", +DlgLnkPopWidth : "Širina", +DlgLnkPopHeight : "Visina", +DlgLnkPopLeft : "Lijeva pozicija", +DlgLnkPopTop : "Gornja pozicija", + +DlnLnkMsgNoUrl : "Molimo ukucajte URL link", +DlnLnkMsgNoEMail : "Molimo ukucajte e-mail adresu", +DlnLnkMsgNoAnchor : "Molimo izaberite sidro", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Izaberi boju", +DlgColorBtnClear : "Oèisti", +DlgColorHighlight : "Igled", +DlgColorSelected : "Selektovana", + +// Smiley Dialog +DlgSmileyTitle : "Ubaci smješka", + +// Special Character Dialog +DlgSpecialCharTitle : "Izaberi specijalni karakter", + +// Table Dialog +DlgTableTitle : "Svojstva tabele", +DlgTableRows : "Redova", +DlgTableColumns : "Kolona", +DlgTableBorder : "Okvir", +DlgTableAlign : "Poravnanje", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Lijevo", +DlgTableAlignCenter : "Centar", +DlgTableAlignRight : "Desno", +DlgTableWidth : "Širina", +DlgTableWidthPx : "piksela", +DlgTableWidthPc : "posto", +DlgTableHeight : "Visina", +DlgTableCellSpace : "Razmak æelija", +DlgTableCellPad : "Uvod æelija", +DlgTableCaption : "Naslov", +DlgTableSummary : "Summary", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Svojstva æelije", +DlgCellWidth : "Širina", +DlgCellWidthPx : "piksela", +DlgCellWidthPc : "posto", +DlgCellHeight : "Visina", +DlgCellWordWrap : "Vrapuj tekst", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Da", +DlgCellWordWrapNo : "Ne", +DlgCellHorAlign : "Horizontalno poravnanje", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Lijevo", +DlgCellHorAlignCenter : "Centar", +DlgCellHorAlignRight: "Desno", +DlgCellVerAlign : "Vertikalno poravnanje", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Gore", +DlgCellVerAlignMiddle : "Sredina", +DlgCellVerAlignBottom : "Dno", +DlgCellVerAlignBaseline : "Bazno", +DlgCellRowSpan : "Spajanje æelija", +DlgCellCollSpan : "Spajanje kolona", +DlgCellBackColor : "Boja pozadine", +DlgCellBorderColor : "Boja okvira", +DlgCellBtnSelect : "Selektuj...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Naði", +DlgFindFindBtn : "Naði", +DlgFindNotFoundMsg : "Traženi tekst nije pronaðen.", + +// Replace Dialog +DlgReplaceTitle : "Zamjeni", +DlgReplaceFindLbl : "Naði šta:", +DlgReplaceReplaceLbl : "Zamjeni sa:", +DlgReplaceCaseChk : "Uporeðuj velika/mala slova", +DlgReplaceReplaceBtn : "Zamjeni", +DlgReplaceReplAllBtn : "Zamjeni sve", +DlgReplaceWordChk : "Uporeðuj samo cijelu rijeè", + +// Paste Operations / Dialog +PasteErrorCut : "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).", +PasteErrorCopy : "Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).", + +PasteAsText : "Zalijepi kao obièan tekst", +PasteFromWord : "Zalijepi iz Word-a", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", //MISSING +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING +DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING + +// Color Picker +ColorAutomatic : "Automatska", +ColorMoreColors : "Više boja...", + +// Document Properties +DocProps : "Document Properties", //MISSING + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", //MISSING +DlgAnchorName : "Anchor Name", //MISSING +DlgAnchorErrorName : "Please type the anchor name", //MISSING + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", //MISSING +DlgSpellChangeTo : "Change to", //MISSING +DlgSpellBtnIgnore : "Ignore", //MISSING +DlgSpellBtnIgnoreAll : "Ignore All", //MISSING +DlgSpellBtnReplace : "Replace", //MISSING +DlgSpellBtnReplaceAll : "Replace All", //MISSING +DlgSpellBtnUndo : "Undo", //MISSING +DlgSpellNoSuggestions : "- No suggestions -", //MISSING +DlgSpellProgress : "Spell check in progress...", //MISSING +DlgSpellNoMispell : "Spell check complete: No misspellings found", //MISSING +DlgSpellNoChanges : "Spell check complete: No words changed", //MISSING +DlgSpellOneChange : "Spell check complete: One word changed", //MISSING +DlgSpellManyChanges : "Spell check complete: %1 words changed", //MISSING + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", //MISSING + +// Button Dialog +DlgButtonText : "Text (Value)", //MISSING +DlgButtonType : "Type", //MISSING +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", //MISSING +DlgCheckboxValue : "Value", //MISSING +DlgCheckboxSelected : "Selected", //MISSING + +// Form Dialog +DlgFormName : "Name", //MISSING +DlgFormAction : "Action", //MISSING +DlgFormMethod : "Method", //MISSING + +// Select Field Dialog +DlgSelectName : "Name", //MISSING +DlgSelectValue : "Value", //MISSING +DlgSelectSize : "Size", //MISSING +DlgSelectLines : "lines", //MISSING +DlgSelectChkMulti : "Allow multiple selections", //MISSING +DlgSelectOpAvail : "Available Options", //MISSING +DlgSelectOpText : "Text", //MISSING +DlgSelectOpValue : "Value", //MISSING +DlgSelectBtnAdd : "Add", //MISSING +DlgSelectBtnModify : "Modify", //MISSING +DlgSelectBtnUp : "Up", //MISSING +DlgSelectBtnDown : "Down", //MISSING +DlgSelectBtnSetValue : "Set as selected value", //MISSING +DlgSelectBtnDelete : "Delete", //MISSING + +// Textarea Dialog +DlgTextareaName : "Name", //MISSING +DlgTextareaCols : "Columns", //MISSING +DlgTextareaRows : "Rows", //MISSING + +// Text Field Dialog +DlgTextName : "Name", //MISSING +DlgTextValue : "Value", //MISSING +DlgTextCharWidth : "Character Width", //MISSING +DlgTextMaxChars : "Maximum Characters", //MISSING +DlgTextType : "Type", //MISSING +DlgTextTypeText : "Text", //MISSING +DlgTextTypePass : "Password", //MISSING + +// Hidden Field Dialog +DlgHiddenName : "Name", //MISSING +DlgHiddenValue : "Value", //MISSING + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", //MISSING +NumberedListProp : "Numbered List Properties", //MISSING +DlgLstStart : "Start", //MISSING +DlgLstType : "Type", //MISSING +DlgLstTypeCircle : "Circle", //MISSING +DlgLstTypeDisc : "Disc", //MISSING +DlgLstTypeSquare : "Square", //MISSING +DlgLstTypeNumbers : "Numbers (1, 2, 3)", //MISSING +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", //MISSING +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", //MISSING +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", //MISSING +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", //MISSING + +// Document Properties Dialog +DlgDocGeneralTab : "General", //MISSING +DlgDocBackTab : "Background", //MISSING +DlgDocColorsTab : "Colors and Margins", //MISSING +DlgDocMetaTab : "Meta Data", //MISSING + +DlgDocPageTitle : "Page Title", //MISSING +DlgDocLangDir : "Language Direction", //MISSING +DlgDocLangDirLTR : "Left to Right (LTR)", //MISSING +DlgDocLangDirRTL : "Right to Left (RTL)", //MISSING +DlgDocLangCode : "Language Code", //MISSING +DlgDocCharSet : "Character Set Encoding", //MISSING +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Other Character Set Encoding", //MISSING + +DlgDocDocType : "Document Type Heading", //MISSING +DlgDocDocTypeOther : "Other Document Type Heading", //MISSING +DlgDocIncXHTML : "Include XHTML Declarations", //MISSING +DlgDocBgColor : "Background Color", //MISSING +DlgDocBgImage : "Background Image URL", //MISSING +DlgDocBgNoScroll : "Nonscrolling Background", //MISSING +DlgDocCText : "Text", //MISSING +DlgDocCLink : "Link", //MISSING +DlgDocCVisited : "Visited Link", //MISSING +DlgDocCActive : "Active Link", //MISSING +DlgDocMargins : "Page Margins", //MISSING +DlgDocMaTop : "Top", //MISSING +DlgDocMaLeft : "Left", //MISSING +DlgDocMaRight : "Right", //MISSING +DlgDocMaBottom : "Bottom", //MISSING +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", //MISSING +DlgDocMeDescr : "Document Description", //MISSING +DlgDocMeAuthor : "Author", //MISSING +DlgDocMeCopy : "Copyright", //MISSING +DlgDocPreview : "Preview", //MISSING + +// Templates Dialog +Templates : "Templates", //MISSING +DlgTemplatesTitle : "Content Templates", //MISSING +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", //MISSING +DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING +DlgTemplatesNoTpl : "(No templates defined)", //MISSING +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "About", //MISSING +DlgAboutBrowserInfoTab : "Browser Info", //MISSING +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "verzija", +DlgAboutInfo : "Za više informacija posjetite" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/ca.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ca.js new file mode 100644 index 0000000..d992130 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ca.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Catalan language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Redueix la barra d'eines", +ToolbarExpand : "Amplia la barra d'eines", + +// Toolbar Items and Context Menu +Save : "Desa", +NewPage : "Nova Pàgina", +Preview : "Visualització prèvia", +Cut : "Retalla", +Copy : "Copia", +Paste : "Enganxa", +PasteText : "Enganxa com a text no formatat", +PasteWord : "Enganxa des del Word", +Print : "Imprimeix", +SelectAll : "Selecciona-ho tot", +RemoveFormat : "Elimina Format", +InsertLinkLbl : "Enllaç", +InsertLink : "Insereix/Edita enllaç", +RemoveLink : "Elimina enllaç", +Anchor : "Insereix/Edita àncora", +AnchorDelete : "Elimina àncora", +InsertImageLbl : "Imatge", +InsertImage : "Insereix/Edita imatge", +InsertFlashLbl : "Flash", +InsertFlash : "Insereix/Edita Flash", +InsertTableLbl : "Taula", +InsertTable : "Insereix/Edita taula", +InsertLineLbl : "Línia", +InsertLine : "Insereix línia horitzontal", +InsertSpecialCharLbl: "Caràcter Especial", +InsertSpecialChar : "Insereix caràcter especial", +InsertSmileyLbl : "Icona", +InsertSmiley : "Insereix icona", +About : "Quant a l'FCKeditor", +Bold : "Negreta", +Italic : "Cursiva", +Underline : "Subratllat", +StrikeThrough : "Barrat", +Subscript : "Subíndex", +Superscript : "Superíndex", +LeftJustify : "Alinia a l'esquerra", +CenterJustify : "Centrat", +RightJustify : "Alinia a la dreta", +BlockJustify : "Justificat", +DecreaseIndent : "Redueix el sagnat", +IncreaseIndent : "Augmenta el sagnat", +Blockquote : "Bloc de cita", +Undo : "Desfés", +Redo : "Refés", +NumberedListLbl : "Llista numerada", +NumberedList : "Numeració activada/desactivada", +BulletedListLbl : "Llista de pics", +BulletedList : "Pics activats/descativats", +ShowTableBorders : "Mostra les vores de les taules", +ShowDetails : "Mostra detalls", +Style : "Estil", +FontFormat : "Format", +Font : "Tipus de lletra", +FontSize : "Mida", +TextColor : "Color de Text", +BGColor : "Color de Fons", +Source : "Codi font", +Find : "Cerca", +Replace : "Reemplaça", +SpellCheck : "Revisa l'ortografia", +UniversalKeyboard : "Teclat universal", +PageBreakLbl : "Salt de pàgina", +PageBreak : "Insereix salt de pàgina", + +Form : "Formulari", +Checkbox : "Casella de verificació", +RadioButton : "Botó d'opció", +TextField : "Camp de text", +Textarea : "Àrea de text", +HiddenField : "Camp ocult", +Button : "Botó", +SelectionField : "Camp de selecció", +ImageButton : "Botó d'imatge", + +FitWindow : "Maximiza la mida de l'editor", +ShowBlocks : "Mostra els blocs", + +// Context Menu +EditLink : "Edita l'enllaç", +CellCM : "Cel·la", +RowCM : "Fila", +ColumnCM : "Columna", +InsertRowAfter : "Insereix fila darrera", +InsertRowBefore : "Insereix fila abans de", +DeleteRows : "Suprimeix una fila", +InsertColumnAfter : "Insereix columna darrera", +InsertColumnBefore : "Insereix columna abans de", +DeleteColumns : "Suprimeix una columna", +InsertCellAfter : "Insereix cel·la darrera", +InsertCellBefore : "Insereix cel·la abans de", +DeleteCells : "Suprimeix les cel·les", +MergeCells : "Fusiona les cel·les", +MergeRight : "Fusiona cap a la dreta", +MergeDown : "Fusiona cap avall", +HorizontalSplitCell : "Divideix la cel·la horitzontalment", +VerticalSplitCell : "Divideix la cel·la verticalment", +TableDelete : "Suprimeix la taula", +CellProperties : "Propietats de la cel·la", +TableProperties : "Propietats de la taula", +ImageProperties : "Propietats de la imatge", +FlashProperties : "Propietats del Flash", + +AnchorProp : "Propietats de l'àncora", +ButtonProp : "Propietats del botó", +CheckboxProp : "Propietats de la casella de verificació", +HiddenFieldProp : "Propietats del camp ocult", +RadioButtonProp : "Propietats del botó d'opció", +ImageButtonProp : "Propietats del botó d'imatge", +TextFieldProp : "Propietats del camp de text", +SelectionFieldProp : "Propietats del camp de selecció", +TextareaProp : "Propietats de l'àrea de text", +FormProp : "Propietats del formulari", + +FontFormats : "Normal;Formatejat;Adreça;Encapçalament 1;Encapçalament 2;Encapçalament 3;Encapçalament 4;Encapçalament 5;Encapçalament 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processant XHTML. Si us plau esperi...", +Done : "Fet", +PasteWordConfirm : "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?", +NotCompatiblePaste : "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?", +UnknownToolbarItem : "Element de la barra d'eines desconegut \"%1\"", +UnknownCommand : "Nom de comanda desconegut \"%1\"", +NotImplemented : "Mètode no implementat", +UnknownToolbarSet : "Conjunt de barra d'eines \"%1\" inexistent", +NoActiveX : "Les preferències del navegador poden limitar algunes funcions d'aquest editor. Cal habilitar l'opció \"Executa controls ActiveX i plug-ins\". Poden sorgir errors i poden faltar algunes funcions.", +BrowseServerBlocked : "El visualitzador de recursos no s'ha pogut obrir. Assegura't de que els bloquejos de finestres emergents estan desactivats.", +DialogBlocked : "No ha estat possible obrir una finestra de diàleg. Assegura't de que els bloquejos de finestres emergents estan desactivats.", + +// Dialogs +DlgBtnOK : "D'acord", +DlgBtnCancel : "Cancel·la", +DlgBtnClose : "Tanca", +DlgBtnBrowseServer : "Veure servidor", +DlgAdvancedTag : "Avançat", +DlgOpOther : "Altres", +DlgInfoTab : "Info", +DlgAlertUrl : "Si us plau, afegiu la URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Direcció de l'idioma", +DlgGenLangDirLtr : "D'esquerra a dreta (LTR)", +DlgGenLangDirRtl : "De dreta a esquerra (RTL)", +DlgGenLangCode : "Codi d'idioma", +DlgGenAccessKey : "Clau d'accés", +DlgGenName : "Nom", +DlgGenTabIndex : "Index de Tab", +DlgGenLongDescr : "Descripció llarga de la URL", +DlgGenClass : "Classes del full d'estil", +DlgGenTitle : "Títol consultiu", +DlgGenContType : "Tipus de contingut consultiu", +DlgGenLinkCharset : "Conjunt de caràcters font enllaçat", +DlgGenStyle : "Estil", + +// Image Dialog +DlgImgTitle : "Propietats de la imatge", +DlgImgInfoTab : "Informació de la imatge", +DlgImgBtnUpload : "Envia-la al servidor", +DlgImgURL : "URL", +DlgImgUpload : "Puja", +DlgImgAlt : "Text alternatiu", +DlgImgWidth : "Amplada", +DlgImgHeight : "Alçada", +DlgImgLockRatio : "Bloqueja les proporcions", +DlgBtnResetSize : "Restaura la mida", +DlgImgBorder : "Vora", +DlgImgHSpace : "Espaiat horit.", +DlgImgVSpace : "Espaiat vert.", +DlgImgAlign : "Alineació", +DlgImgAlignLeft : "Ajusta a l'esquerra", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Ajusta a la dreta", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Vista prèvia", +DlgImgAlertUrl : "Si us plau, escriviu la URL de la imatge", +DlgImgLinkTab : "Enllaç", + +// Flash Dialog +DlgFlashTitle : "Propietats del Flash", +DlgFlashChkPlay : "Reprodució automàtica", +DlgFlashChkLoop : "Bucle", +DlgFlashChkMenu : "Habilita menú Flash", +DlgFlashScale : "Escala", +DlgFlashScaleAll : "Mostra-ho tot", +DlgFlashScaleNoBorder : "Sense vores", +DlgFlashScaleFit : "Mida exacta", + +// Link Dialog +DlgLnkWindowTitle : "Enllaç", +DlgLnkInfoTab : "Informació de l'enllaç", +DlgLnkTargetTab : "Destí", + +DlgLnkType : "Tipus d'enllaç", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Àncora en aquesta pàgina", +DlgLnkTypeEMail : "Correu electrònic", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Selecciona una àncora", +DlgLnkAnchorByName : "Per nom d'àncora", +DlgLnkAnchorById : "Per Id d'element", +DlgLnkNoAnchors : "(No hi ha àncores disponibles en aquest document)", +DlgLnkEMail : "Adreça de correu electrònic", +DlgLnkEMailSubject : "Assumpte del missatge", +DlgLnkEMailBody : "Cos del missatge", +DlgLnkUpload : "Puja", +DlgLnkBtnUpload : "Envia al servidor", + +DlgLnkTarget : "Destí", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nova finestra (_blank)", +DlgLnkTargetParent : "Finestra pare (_parent)", +DlgLnkTargetSelf : "Mateixa finestra (_self)", +DlgLnkTargetTop : "Finestra Major (_top)", +DlgLnkTargetFrameName : "Nom del marc de destí", +DlgLnkPopWinName : "Nom finestra popup", +DlgLnkPopWinFeat : "Característiques finestra popup", +DlgLnkPopResize : "Redimensionable", +DlgLnkPopLocation : "Barra d'adreça", +DlgLnkPopMenu : "Barra de menú", +DlgLnkPopScroll : "Barres d'scroll", +DlgLnkPopStatus : "Barra d'estat", +DlgLnkPopToolbar : "Barra d'eines", +DlgLnkPopFullScrn : "Pantalla completa (IE)", +DlgLnkPopDependent : "Depenent (Netscape)", +DlgLnkPopWidth : "Amplada", +DlgLnkPopHeight : "Alçada", +DlgLnkPopLeft : "Posició esquerra", +DlgLnkPopTop : "Posició dalt", + +DlnLnkMsgNoUrl : "Si us plau, escrigui l'enllaç URL", +DlnLnkMsgNoEMail : "Si us plau, escrigui l'adreça correu electrònic", +DlnLnkMsgNoAnchor : "Si us plau, escrigui l'àncora", +DlnLnkMsgInvPopName : "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais", + +// Color Dialog +DlgColorTitle : "Selecciona el color", +DlgColorBtnClear : "Neteja", +DlgColorHighlight : "Realça", +DlgColorSelected : "Selecciona", + +// Smiley Dialog +DlgSmileyTitle : "Insereix una icona", + +// Special Character Dialog +DlgSpecialCharTitle : "Selecciona el caràcter especial", + +// Table Dialog +DlgTableTitle : "Propietats de la taula", +DlgTableRows : "Files", +DlgTableColumns : "Columnes", +DlgTableBorder : "Mida vora", +DlgTableAlign : "Alineació", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Esquerra", +DlgTableAlignCenter : "Centre", +DlgTableAlignRight : "Dreta", +DlgTableWidth : "Amplada", +DlgTableWidthPx : "píxels", +DlgTableWidthPc : "percentatge", +DlgTableHeight : "Alçada", +DlgTableCellSpace : "Espaiat de cel·les", +DlgTableCellPad : "Encoixinament de cel·les", +DlgTableCaption : "Títol", +DlgTableSummary : "Resum", + +// Table Cell Dialog +DlgCellTitle : "Propietats de la cel·la", +DlgCellWidth : "Amplada", +DlgCellWidthPx : "píxels", +DlgCellWidthPc : "percentatge", +DlgCellHeight : "Alçada", +DlgCellWordWrap : "Ajust de paraula", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Si", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Alineació horitzontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Esquerra", +DlgCellHorAlignCenter : "Centre", +DlgCellHorAlignRight: "Dreta", +DlgCellVerAlign : "Alineació vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Color de fons", +DlgCellBorderColor : "Color de la vora", +DlgCellBtnSelect : "Seleccioneu...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Cerca i reemplaça", + +// Find Dialog +DlgFindTitle : "Cerca", +DlgFindFindBtn : "Cerca", +DlgFindNotFoundMsg : "El text especificat no s'ha trobat.", + +// Replace Dialog +DlgReplaceTitle : "Reemplaça", +DlgReplaceFindLbl : "Cerca:", +DlgReplaceReplaceLbl : "Remplaça amb:", +DlgReplaceCaseChk : "Distingeix majúscules/minúscules", +DlgReplaceReplaceBtn : "Reemplaça", +DlgReplaceReplAllBtn : "Reemplaça-ho tot", +DlgReplaceWordChk : "Només paraules completes", + +// Paste Operations / Dialog +PasteErrorCut : "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).", +PasteErrorCopy : "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).", + +PasteAsText : "Enganxa com a text no formatat", +PasteFromWord : "Enganxa com a Word", + +DlgPasteMsg2 : "Si us plau, enganxeu dins del següent camp utilitzant el teclat (Ctrl+V) i premeu OK.", +DlgPasteSec : "A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.", +DlgPasteIgnoreFont : "Ignora definicions de font", +DlgPasteRemoveStyles : "Elimina definicions d'estil", + +// Color Picker +ColorAutomatic : "Automàtic", +ColorMoreColors : "Més colors...", + +// Document Properties +DocProps : "Propietats del document", + +// Anchor Dialog +DlgAnchorTitle : "Propietats de l'àncora", +DlgAnchorName : "Nom de l'àncora", +DlgAnchorErrorName : "Si us plau, escriviu el nom de l'ancora", + +// Speller Pages Dialog +DlgSpellNotInDic : "No és al diccionari", +DlgSpellChangeTo : "Reemplaça amb", +DlgSpellBtnIgnore : "Ignora", +DlgSpellBtnIgnoreAll : "Ignora-les totes", +DlgSpellBtnReplace : "Canvia", +DlgSpellBtnReplaceAll : "Canvia-les totes", +DlgSpellBtnUndo : "Desfés", +DlgSpellNoSuggestions : "Cap suggeriment", +DlgSpellProgress : "Verificació ortogràfica en curs...", +DlgSpellNoMispell : "Verificació ortogràfica acabada: no hi ha cap paraula mal escrita", +DlgSpellNoChanges : "Verificació ortogràfica: no s'ha canviat cap paraula", +DlgSpellOneChange : "Verificació ortogràfica: s'ha canviat una paraula", +DlgSpellManyChanges : "Verificació ortogràfica: s'han canviat %1 paraules", + +IeSpellDownload : "Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?", + +// Button Dialog +DlgButtonText : "Text (Valor)", +DlgButtonType : "Tipus", +DlgButtonTypeBtn : "Botó", +DlgButtonTypeSbm : "Transmet formulari", +DlgButtonTypeRst : "Reinicia formulari", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nom", +DlgCheckboxValue : "Valor", +DlgCheckboxSelected : "Seleccionat", + +// Form Dialog +DlgFormName : "Nom", +DlgFormAction : "Acció", +DlgFormMethod : "Mètode", + +// Select Field Dialog +DlgSelectName : "Nom", +DlgSelectValue : "Valor", +DlgSelectSize : "Mida", +DlgSelectLines : "Línies", +DlgSelectChkMulti : "Permet múltiples seleccions", +DlgSelectOpAvail : "Opcions disponibles", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Valor", +DlgSelectBtnAdd : "Afegeix", +DlgSelectBtnModify : "Modifica", +DlgSelectBtnUp : "Amunt", +DlgSelectBtnDown : "Avall", +DlgSelectBtnSetValue : "Selecciona per defecte", +DlgSelectBtnDelete : "Elimina", + +// Textarea Dialog +DlgTextareaName : "Nom", +DlgTextareaCols : "Columnes", +DlgTextareaRows : "Files", + +// Text Field Dialog +DlgTextName : "Nom", +DlgTextValue : "Valor", +DlgTextCharWidth : "Amplada", +DlgTextMaxChars : "Nombre màxim de caràcters", +DlgTextType : "Tipus", +DlgTextTypeText : "Text", +DlgTextTypePass : "Contrasenya", + +// Hidden Field Dialog +DlgHiddenName : "Nom", +DlgHiddenValue : "Valor", + +// Bulleted List Dialog +BulletedListProp : "Propietats de la llista de pics", +NumberedListProp : "Propietats de llista numerada", +DlgLstStart : "Inici", +DlgLstType : "Tipus", +DlgLstTypeCircle : "Cercle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Quadrat", +DlgLstTypeNumbers : "Números (1, 2, 3)", +DlgLstTypeLCase : "Lletres minúscules (a, b, c)", +DlgLstTypeUCase : "Lletres majúscules (A, B, C)", +DlgLstTypeSRoman : "Números romans en minúscules (i, ii, iii)", +DlgLstTypeLRoman : "Números romans en majúscules (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Fons", +DlgDocColorsTab : "Colors i marges", +DlgDocMetaTab : "Metadades", + +DlgDocPageTitle : "Títol de la pàgina", +DlgDocLangDir : "Direcció idioma", +DlgDocLangDirLTR : "Esquerra a dreta (LTR)", +DlgDocLangDirRTL : "Dreta a esquerra (RTL)", +DlgDocLangCode : "Codi d'idioma", +DlgDocCharSet : "Codificació de conjunt de caràcters", +DlgDocCharSetCE : "Centreeuropeu", +DlgDocCharSetCT : "Xinès tradicional (Big5)", +DlgDocCharSetCR : "Ciríl·lic", +DlgDocCharSetGR : "Grec", +DlgDocCharSetJP : "Japonès", +DlgDocCharSetKR : "Coreà", +DlgDocCharSetTR : "Turc", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Europeu occidental", +DlgDocCharSetOther : "Una altra codificació de caràcters", + +DlgDocDocType : "Capçalera de tipus de document", +DlgDocDocTypeOther : "Un altra capçalera de tipus de document", +DlgDocIncXHTML : "Incloure declaracions XHTML", +DlgDocBgColor : "Color de fons", +DlgDocBgImage : "URL de la imatge de fons", +DlgDocBgNoScroll : "Fons fixe", +DlgDocCText : "Text", +DlgDocCLink : "Enllaç", +DlgDocCVisited : "Enllaç visitat", +DlgDocCActive : "Enllaç actiu", +DlgDocMargins : "Marges de pàgina", +DlgDocMaTop : "Cap", +DlgDocMaLeft : "Esquerra", +DlgDocMaRight : "Dreta", +DlgDocMaBottom : "Peu", +DlgDocMeIndex : "Mots clau per a indexació (separats per coma)", +DlgDocMeDescr : "Descripció del document", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vista prèvia", + +// Templates Dialog +Templates : "Plantilles", +DlgTemplatesTitle : "Contingut plantilles", +DlgTemplatesSelMsg : "Si us plau, seleccioneu la plantilla per obrir a l'editor
        (el contingut actual no serà enregistrat):", +DlgTemplatesLoading : "Carregant la llista de plantilles. Si us plau, espereu...", +DlgTemplatesNoTpl : "(No hi ha plantilles definides)", +DlgTemplatesReplace : "Reemplaça el contingut actual", + +// About Dialog +DlgAboutAboutTab : "Quant a", +DlgAboutBrowserInfoTab : "Informació del navegador", +DlgAboutLicenseTab : "Llicència", +DlgAboutVersion : "versió", +DlgAboutInfo : "Per a més informació aneu a" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/cs.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/cs.js new file mode 100644 index 0000000..5709e20 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/cs.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Czech language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Skrýt panel nástrojů", +ToolbarExpand : "Zobrazit panel nástrojů", + +// Toolbar Items and Context Menu +Save : "Uložit", +NewPage : "Nová stránka", +Preview : "Náhled", +Cut : "Vyjmout", +Copy : "Kopírovat", +Paste : "Vložit", +PasteText : "Vložit jako čistý text", +PasteWord : "Vložit z Wordu", +Print : "Tisk", +SelectAll : "Vybrat vše", +RemoveFormat : "Odstranit formátování", +InsertLinkLbl : "Odkaz", +InsertLink : "Vložit/změnit odkaz", +RemoveLink : "Odstranit odkaz", +Anchor : "Vložít/změnit záložku", +AnchorDelete : "Odstranit kotvu", +InsertImageLbl : "Obrázek", +InsertImage : "Vložit/změnit obrázek", +InsertFlashLbl : "Flash", +InsertFlash : "Vložit/Upravit Flash", +InsertTableLbl : "Tabulka", +InsertTable : "Vložit/změnit tabulku", +InsertLineLbl : "Linka", +InsertLine : "Vložit vodorovnou linku", +InsertSpecialCharLbl: "Speciální znaky", +InsertSpecialChar : "Vložit speciální znaky", +InsertSmileyLbl : "Smajlíky", +InsertSmiley : "Vložit smajlík", +About : "O aplikaci FCKeditor", +Bold : "Tučné", +Italic : "Kurzíva", +Underline : "Podtržené", +StrikeThrough : "Přeškrtnuté", +Subscript : "Dolní index", +Superscript : "Horní index", +LeftJustify : "Zarovnat vlevo", +CenterJustify : "Zarovnat na střed", +RightJustify : "Zarovnat vpravo", +BlockJustify : "Zarovnat do bloku", +DecreaseIndent : "Zmenšit odsazení", +IncreaseIndent : "Zvětšit odsazení", +Blockquote : "Citace", +Undo : "Zpět", +Redo : "Znovu", +NumberedListLbl : "Číslování", +NumberedList : "Vložit/odstranit číslovaný seznam", +BulletedListLbl : "Odrážky", +BulletedList : "Vložit/odstranit odrážky", +ShowTableBorders : "Zobrazit okraje tabulek", +ShowDetails : "Zobrazit podrobnosti", +Style : "Styl", +FontFormat : "Formát", +Font : "Písmo", +FontSize : "Velikost", +TextColor : "Barva textu", +BGColor : "Barva pozadí", +Source : "Zdroj", +Find : "Hledat", +Replace : "Nahradit", +SpellCheck : "Zkontrolovat pravopis", +UniversalKeyboard : "Univerzální klávesnice", +PageBreakLbl : "Konec stránky", +PageBreak : "Vložit konec stránky", + +Form : "Formulář", +Checkbox : "Zaškrtávací políčko", +RadioButton : "Přepínač", +TextField : "Textové pole", +Textarea : "Textová oblast", +HiddenField : "Skryté pole", +Button : "Tlačítko", +SelectionField : "Seznam", +ImageButton : "Obrázkové tlačítko", + +FitWindow : "Maximalizovat velikost editoru", +ShowBlocks : "Ukázat bloky", + +// Context Menu +EditLink : "Změnit odkaz", +CellCM : "Buňka", +RowCM : "Řádek", +ColumnCM : "Sloupec", +InsertRowAfter : "Vložit řádek za", +InsertRowBefore : "Vložit řádek před", +DeleteRows : "Smazat řádky", +InsertColumnAfter : "Vložit sloupec za", +InsertColumnBefore : "Vložit sloupec před", +DeleteColumns : "Smazat sloupec", +InsertCellAfter : "Vložit buňku za", +InsertCellBefore : "Vložit buňku před", +DeleteCells : "Smazat buňky", +MergeCells : "Sloučit buňky", +MergeRight : "Sloučit doprava", +MergeDown : "Sloučit dolů", +HorizontalSplitCell : "Rozdělit buňky vodorovně", +VerticalSplitCell : "Rozdělit buňky svisle", +TableDelete : "Smazat tabulku", +CellProperties : "Vlastnosti buňky", +TableProperties : "Vlastnosti tabulky", +ImageProperties : "Vlastnosti obrázku", +FlashProperties : "Vlastnosti Flashe", + +AnchorProp : "Vlastnosti záložky", +ButtonProp : "Vlastnosti tlačítka", +CheckboxProp : "Vlastnosti zaškrtávacího políčka", +HiddenFieldProp : "Vlastnosti skrytého pole", +RadioButtonProp : "Vlastnosti přepínače", +ImageButtonProp : "Vlastností obrázkového tlačítka", +TextFieldProp : "Vlastnosti textového pole", +SelectionFieldProp : "Vlastnosti seznamu", +TextareaProp : "Vlastnosti textové oblasti", +FormProp : "Vlastnosti formuláře", + +FontFormats : "Normální;Naformátováno;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Normální (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Probíhá zpracování XHTML. Prosím čekejte...", +Done : "Hotovo", +PasteWordConfirm : "Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?", +NotCompatiblePaste : "Tento příkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyšší. Chcete vložit text bez vyčištění?", +UnknownToolbarItem : "Neznámá položka panelu nástrojů \"%1\"", +UnknownCommand : "Neznámý příkaz \"%1\"", +NotImplemented : "Příkaz není implementován", +UnknownToolbarSet : "Panel nástrojů \"%1\" neexistuje", +NoActiveX : "Nastavení bezpečnosti Vašeho prohlížeče omezuje funkčnost některých jeho možností. Je třeba zapnout volbu \"Spouštět ovládáací prvky ActiveX a moduly plug-in\", jinak nebude možné využívat všechny dosputné schopnosti editoru.", +BrowseServerBlocked : "Průzkumník zdrojů nelze otevřít. Prověřte, zda nemáte aktivováno blokování popup oken.", +DialogBlocked : "Nelze otevřít dialogové okno. Prověřte, zda nemáte aktivováno blokování popup oken.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Storno", +DlgBtnClose : "Zavřít", +DlgBtnBrowseServer : "Vybrat na serveru", +DlgAdvancedTag : "Rozšířené", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Prosím vložte URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Orientace jazyka", +DlgGenLangDirLtr : "Zleva do prava (LTR)", +DlgGenLangDirRtl : "Zprava do leva (RTL)", +DlgGenLangCode : "Kód jazyka", +DlgGenAccessKey : "Přístupový klíč", +DlgGenName : "Jméno", +DlgGenTabIndex : "Pořadí prvku", +DlgGenLongDescr : "Dlouhý popis URL", +DlgGenClass : "Třída stylu", +DlgGenTitle : "Pomocný titulek", +DlgGenContType : "Pomocný typ obsahu", +DlgGenLinkCharset : "Přiřazená znaková sada", +DlgGenStyle : "Styl", + +// Image Dialog +DlgImgTitle : "Vlastnosti obrázku", +DlgImgInfoTab : "Informace o obrázku", +DlgImgBtnUpload : "Odeslat na server", +DlgImgURL : "URL", +DlgImgUpload : "Odeslat", +DlgImgAlt : "Alternativní text", +DlgImgWidth : "Šířka", +DlgImgHeight : "Výška", +DlgImgLockRatio : "Zámek", +DlgBtnResetSize : "Původní velikost", +DlgImgBorder : "Okraje", +DlgImgHSpace : "H-mezera", +DlgImgVSpace : "V-mezera", +DlgImgAlign : "Zarovnání", +DlgImgAlignLeft : "Vlevo", +DlgImgAlignAbsBottom: "Zcela dolů", +DlgImgAlignAbsMiddle: "Doprostřed", +DlgImgAlignBaseline : "Na účaří", +DlgImgAlignBottom : "Dolů", +DlgImgAlignMiddle : "Na střed", +DlgImgAlignRight : "Vpravo", +DlgImgAlignTextTop : "Na horní okraj textu", +DlgImgAlignTop : "Nahoru", +DlgImgPreview : "Náhled", +DlgImgAlertUrl : "Zadejte prosím URL obrázku", +DlgImgLinkTab : "Odkaz", + +// Flash Dialog +DlgFlashTitle : "Vlastnosti Flashe", +DlgFlashChkPlay : "Automatické spuštění", +DlgFlashChkLoop : "Opakování", +DlgFlashChkMenu : "Nabídka Flash", +DlgFlashScale : "Zobrazit", +DlgFlashScaleAll : "Zobrazit vše", +DlgFlashScaleNoBorder : "Bez okraje", +DlgFlashScaleFit : "Přizpůsobit", + +// Link Dialog +DlgLnkWindowTitle : "Odkaz", +DlgLnkInfoTab : "Informace o odkazu", +DlgLnkTargetTab : "Cíl", + +DlgLnkType : "Typ odkazu", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Kotva v této stránce", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vybrat kotvu", +DlgLnkAnchorByName : "Podle jména kotvy", +DlgLnkAnchorById : "Podle Id objektu", +DlgLnkNoAnchors : "(Ve stránce není definována žádná kotva!)", +DlgLnkEMail : "E-Mailová adresa", +DlgLnkEMailSubject : "Předmět zprávy", +DlgLnkEMailBody : "Tělo zprávy", +DlgLnkUpload : "Odeslat", +DlgLnkBtnUpload : "Odeslat na Server", + +DlgLnkTarget : "Cíl", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nové okno (_blank)", +DlgLnkTargetParent : "Rodičovské okno (_parent)", +DlgLnkTargetSelf : "Stejné okno (_self)", +DlgLnkTargetTop : "Hlavní okno (_top)", +DlgLnkTargetFrameName : "Název cílového rámu", +DlgLnkPopWinName : "Název vyskakovacího okna", +DlgLnkPopWinFeat : "Vlastnosti vyskakovacího okna", +DlgLnkPopResize : "Měnitelná velikost", +DlgLnkPopLocation : "Panel umístění", +DlgLnkPopMenu : "Panel nabídky", +DlgLnkPopScroll : "Posuvníky", +DlgLnkPopStatus : "Stavový řádek", +DlgLnkPopToolbar : "Panel nástrojů", +DlgLnkPopFullScrn : "Celá obrazovka (IE)", +DlgLnkPopDependent : "Závislost (Netscape)", +DlgLnkPopWidth : "Šířka", +DlgLnkPopHeight : "Výška", +DlgLnkPopLeft : "Levý okraj", +DlgLnkPopTop : "Horní okraj", + +DlnLnkMsgNoUrl : "Zadejte prosím URL odkazu", +DlnLnkMsgNoEMail : "Zadejte prosím e-mailovou adresu", +DlnLnkMsgNoAnchor : "Vyberte prosím kotvu", +DlnLnkMsgInvPopName : "Název vyskakovacího okna musí začínat písmenem a nesmí obsahovat mezery", + +// Color Dialog +DlgColorTitle : "Výběr barvy", +DlgColorBtnClear : "Vymazat", +DlgColorHighlight : "Zvýrazněná", +DlgColorSelected : "Vybraná", + +// Smiley Dialog +DlgSmileyTitle : "Vkládání smajlíků", + +// Special Character Dialog +DlgSpecialCharTitle : "Výběr speciálního znaku", + +// Table Dialog +DlgTableTitle : "Vlastnosti tabulky", +DlgTableRows : "Řádky", +DlgTableColumns : "Sloupce", +DlgTableBorder : "Ohraničení", +DlgTableAlign : "Zarovnání", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Vlevo", +DlgTableAlignCenter : "Na střed", +DlgTableAlignRight : "Vpravo", +DlgTableWidth : "Šířka", +DlgTableWidthPx : "bodů", +DlgTableWidthPc : "procent", +DlgTableHeight : "Výška", +DlgTableCellSpace : "Vzdálenost buněk", +DlgTableCellPad : "Odsazení obsahu", +DlgTableCaption : "Popis", +DlgTableSummary : "Souhrn", + +// Table Cell Dialog +DlgCellTitle : "Vlastnosti buňky", +DlgCellWidth : "Šířka", +DlgCellWidthPx : "bodů", +DlgCellWidthPc : "procent", +DlgCellHeight : "Výška", +DlgCellWordWrap : "Zalamování", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ano", +DlgCellWordWrapNo : "Ne", +DlgCellHorAlign : "Vodorovné zarovnání", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Vlevo", +DlgCellHorAlignCenter : "Na střed", +DlgCellHorAlignRight: "Vpravo", +DlgCellVerAlign : "Svislé zarovnání", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Nahoru", +DlgCellVerAlignMiddle : "Doprostřed", +DlgCellVerAlignBottom : "Dolů", +DlgCellVerAlignBaseline : "Na účaří", +DlgCellRowSpan : "Sloučené řádky", +DlgCellCollSpan : "Sloučené sloupce", +DlgCellBackColor : "Barva pozadí", +DlgCellBorderColor : "Barva ohraničení", +DlgCellBtnSelect : "Výběr...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Najít a nahradit", + +// Find Dialog +DlgFindTitle : "Hledat", +DlgFindFindBtn : "Hledat", +DlgFindNotFoundMsg : "Hledaný text nebyl nalezen.", + +// Replace Dialog +DlgReplaceTitle : "Nahradit", +DlgReplaceFindLbl : "Co hledat:", +DlgReplaceReplaceLbl : "Čím nahradit:", +DlgReplaceCaseChk : "Rozlišovat velikost písma", +DlgReplaceReplaceBtn : "Nahradit", +DlgReplaceReplAllBtn : "Nahradit vše", +DlgReplaceWordChk : "Pouze celá slova", + +// Paste Operations / Dialog +PasteErrorCut : "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).", +PasteErrorCopy : "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).", + +PasteAsText : "Vložit jako čistý text", +PasteFromWord : "Vložit text z Wordu", + +DlgPasteMsg2 : "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (Ctrl+V) a stiskněte OK.", +DlgPasteSec : "Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.", +DlgPasteIgnoreFont : "Ignorovat písmo", +DlgPasteRemoveStyles : "Odstranit styly", + +// Color Picker +ColorAutomatic : "Automaticky", +ColorMoreColors : "Více barev...", + +// Document Properties +DocProps : "Vlastnosti dokumentu", + +// Anchor Dialog +DlgAnchorTitle : "Vlastnosti záložky", +DlgAnchorName : "Název záložky", +DlgAnchorErrorName : "Zadejte prosím název záložky", + +// Speller Pages Dialog +DlgSpellNotInDic : "Není ve slovníku", +DlgSpellChangeTo : "Změnit na", +DlgSpellBtnIgnore : "Přeskočit", +DlgSpellBtnIgnoreAll : "Přeskakovat vše", +DlgSpellBtnReplace : "Zaměnit", +DlgSpellBtnReplaceAll : "Zaměňovat vše", +DlgSpellBtnUndo : "Zpět", +DlgSpellNoSuggestions : "- žádné návrhy -", +DlgSpellProgress : "Probíhá kontrola pravopisu...", +DlgSpellNoMispell : "Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny", +DlgSpellNoChanges : "Kontrola pravopisu dokončena: Beze změn", +DlgSpellOneChange : "Kontrola pravopisu dokončena: Jedno slovo změněno", +DlgSpellManyChanges : "Kontrola pravopisu dokončena: %1 slov změněno", + +IeSpellDownload : "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?", + +// Button Dialog +DlgButtonText : "Popisek", +DlgButtonType : "Typ", +DlgButtonTypeBtn : "Tlačítko", +DlgButtonTypeSbm : "Odeslat", +DlgButtonTypeRst : "Obnovit", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Název", +DlgCheckboxValue : "Hodnota", +DlgCheckboxSelected : "Zaškrtnuto", + +// Form Dialog +DlgFormName : "Název", +DlgFormAction : "Akce", +DlgFormMethod : "Metoda", + +// Select Field Dialog +DlgSelectName : "Název", +DlgSelectValue : "Hodnota", +DlgSelectSize : "Velikost", +DlgSelectLines : "Řádků", +DlgSelectChkMulti : "Povolit mnohonásobné výběry", +DlgSelectOpAvail : "Dostupná nastavení", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Hodnota", +DlgSelectBtnAdd : "Přidat", +DlgSelectBtnModify : "Změnit", +DlgSelectBtnUp : "Nahoru", +DlgSelectBtnDown : "Dolů", +DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu", +DlgSelectBtnDelete : "Smazat", + +// Textarea Dialog +DlgTextareaName : "Název", +DlgTextareaCols : "Sloupců", +DlgTextareaRows : "Řádků", + +// Text Field Dialog +DlgTextName : "Název", +DlgTextValue : "Hodnota", +DlgTextCharWidth : "Šířka ve znacích", +DlgTextMaxChars : "Maximální počet znaků", +DlgTextType : "Typ", +DlgTextTypeText : "Text", +DlgTextTypePass : "Heslo", + +// Hidden Field Dialog +DlgHiddenName : "Název", +DlgHiddenValue : "Hodnota", + +// Bulleted List Dialog +BulletedListProp : "Vlastnosti odrážek", +NumberedListProp : "Vlastnosti číslovaného seznamu", +DlgLstStart : "Začátek", +DlgLstType : "Typ", +DlgLstTypeCircle : "Kružnice", +DlgLstTypeDisc : "Kruh", +DlgLstTypeSquare : "Čtverec", +DlgLstTypeNumbers : "Čísla (1, 2, 3)", +DlgLstTypeLCase : "Malá písmena (a, b, c)", +DlgLstTypeUCase : "Velká písmena (A, B, C)", +DlgLstTypeSRoman : "Malé římská číslice (i, ii, iii)", +DlgLstTypeLRoman : "Velké římské číslice (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Obecné", +DlgDocBackTab : "Pozadí", +DlgDocColorsTab : "Barvy a okraje", +DlgDocMetaTab : "Metadata", + +DlgDocPageTitle : "Titulek stránky", +DlgDocLangDir : "Směr jazyku", +DlgDocLangDirLTR : "Zleva do prava ", +DlgDocLangDirRTL : "Zprava doleva", +DlgDocLangCode : "Kód jazyku", +DlgDocCharSet : "Znaková sada", +DlgDocCharSetCE : "Středoevropské jazyky", +DlgDocCharSetCT : "Tradiční čínština (Big5)", +DlgDocCharSetCR : "Cyrilice", +DlgDocCharSetGR : "Řečtina", +DlgDocCharSetJP : "Japonština", +DlgDocCharSetKR : "Korejština", +DlgDocCharSetTR : "Turečtina", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Západoevropské jazyky", +DlgDocCharSetOther : "Další znaková sada", + +DlgDocDocType : "Typ dokumentu", +DlgDocDocTypeOther : "Jiný typ dokumetu", +DlgDocIncXHTML : "Zahrnou deklarace XHTML", +DlgDocBgColor : "Barva pozadí", +DlgDocBgImage : "URL obrázku na pozadí", +DlgDocBgNoScroll : "Nerolovatelné pozadí", +DlgDocCText : "Text", +DlgDocCLink : "Odkaz", +DlgDocCVisited : "Navštívený odkaz", +DlgDocCActive : "Vybraný odkaz", +DlgDocMargins : "Okraje stránky", +DlgDocMaTop : "Horní", +DlgDocMaLeft : "Levý", +DlgDocMaRight : "Pravý", +DlgDocMaBottom : "Dolní", +DlgDocMeIndex : "Klíčová slova (oddělená čárkou)", +DlgDocMeDescr : "Popis dokumentu", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Autorská práva", +DlgDocPreview : "Náhled", + +// Templates Dialog +Templates : "Šablony", +DlgTemplatesTitle : "Šablony obsahu", +DlgTemplatesSelMsg : "Prosím zvolte šablonu pro otevření v editoru
        (aktuální obsah editoru bude ztracen):", +DlgTemplatesLoading : "Nahrávám přeheld šablon. Prosím čekejte...", +DlgTemplatesNoTpl : "(Není definována žádná šablona)", +DlgTemplatesReplace : "Nahradit aktuální obsah", + +// About Dialog +DlgAboutAboutTab : "O aplikaci", +DlgAboutBrowserInfoTab : "Informace o prohlížeči", +DlgAboutLicenseTab : "Licence", +DlgAboutVersion : "verze", +DlgAboutInfo : "Více informací získáte na" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/da.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/da.js new file mode 100644 index 0000000..f9f99a3 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/da.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Danish language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Skjul værktøjslinier", +ToolbarExpand : "Vis værktøjslinier", + +// Toolbar Items and Context Menu +Save : "Gem", +NewPage : "Ny side", +Preview : "Vis eksempel", +Cut : "Klip", +Copy : "Kopier", +Paste : "Indsæt", +PasteText : "Indsæt som ikke-formateret tekst", +PasteWord : "Indsæt fra Word", +Print : "Udskriv", +SelectAll : "Vælg alt", +RemoveFormat : "Fjern formatering", +InsertLinkLbl : "Hyperlink", +InsertLink : "Indsæt/rediger hyperlink", +RemoveLink : "Fjern hyperlink", +Anchor : "Indsæt/rediger bogmærke", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Indsæt billede", +InsertImage : "Indsæt/rediger billede", +InsertFlashLbl : "Flash", +InsertFlash : "Indsæt/rediger Flash", +InsertTableLbl : "Table", +InsertTable : "Indsæt/rediger tabel", +InsertLineLbl : "Linie", +InsertLine : "Indsæt vandret linie", +InsertSpecialCharLbl: "Symbol", +InsertSpecialChar : "Indsæt symbol", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Indsæt smiley", +About : "Om FCKeditor", +Bold : "Fed", +Italic : "Kursiv", +Underline : "Understreget", +StrikeThrough : "Overstreget", +Subscript : "Sænket skrift", +Superscript : "Hævet skrift", +LeftJustify : "Venstrestillet", +CenterJustify : "Centreret", +RightJustify : "Højrestillet", +BlockJustify : "Lige margener", +DecreaseIndent : "Formindsk indrykning", +IncreaseIndent : "Forøg indrykning", +Blockquote : "Blockquote", //MISSING +Undo : "Fortryd", +Redo : "Annuller fortryd", +NumberedListLbl : "Talopstilling", +NumberedList : "Indsæt/fjern talopstilling", +BulletedListLbl : "Punktopstilling", +BulletedList : "Indsæt/fjern punktopstilling", +ShowTableBorders : "Vis tabelkanter", +ShowDetails : "Vis detaljer", +Style : "Typografi", +FontFormat : "Formatering", +Font : "Skrifttype", +FontSize : "Skriftstørrelse", +TextColor : "Tekstfarve", +BGColor : "Baggrundsfarve", +Source : "Kilde", +Find : "Søg", +Replace : "Erstat", +SpellCheck : "Stavekontrol", +UniversalKeyboard : "Universaltastatur", +PageBreakLbl : "Sidskift", +PageBreak : "Indsæt sideskift", + +Form : "Indsæt formular", +Checkbox : "Indsæt afkrydsningsfelt", +RadioButton : "Indsæt alternativknap", +TextField : "Indsæt tekstfelt", +Textarea : "Indsæt tekstboks", +HiddenField : "Indsæt skjult felt", +Button : "Indsæt knap", +SelectionField : "Indsæt liste", +ImageButton : "Indsæt billedknap", + +FitWindow : "Maksimer editor vinduet", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Rediger hyperlink", +CellCM : "Celle", +RowCM : "Række", +ColumnCM : "Kolonne", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Slet række", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Slet kolonne", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Slet celle", +MergeCells : "Flet celler", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Slet tabel", +CellProperties : "Egenskaber for celle", +TableProperties : "Egenskaber for tabel", +ImageProperties : "Egenskaber for billede", +FlashProperties : "Egenskaber for Flash", + +AnchorProp : "Egenskaber for bogmærke", +ButtonProp : "Egenskaber for knap", +CheckboxProp : "Egenskaber for afkrydsningsfelt", +HiddenFieldProp : "Egenskaber for skjult felt", +RadioButtonProp : "Egenskaber for alternativknap", +ImageButtonProp : "Egenskaber for billedknap", +TextFieldProp : "Egenskaber for tekstfelt", +SelectionFieldProp : "Egenskaber for liste", +TextareaProp : "Egenskaber for tekstboks", +FormProp : "Egenskaber for formular", + +FontFormats : "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Behandler XHTML...", +Done : "Færdig", +PasteWordConfirm : "Den tekst du forsøger at indsætte ser ud til at komme fra Word.
        Vil du rense teksten før den indsættes?", +NotCompatiblePaste : "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.
        Vil du indsætte teksten uden at rense den ?", +UnknownToolbarItem : "Ukendt værktøjslinjeobjekt \"%1\"!", +UnknownCommand : "Ukendt kommandonavn \"%1\"!", +NotImplemented : "Kommandoen er ikke implementeret!", +UnknownToolbarSet : "Værktøjslinjen \"%1\" eksisterer ikke!", +NoActiveX : "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.
        Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.", +BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!
        Slå pop-up blokering fra.", +DialogBlocked : "Dialogvinduet kunne ikke åbnes!
        Slå pop-up blokering fra.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuller", +DlgBtnClose : "Luk", +DlgBtnBrowseServer : "Gennemse...", +DlgAdvancedTag : "Avanceret", +DlgOpOther : "", +DlgInfoTab : "Generelt", +DlgAlertUrl : "Indtast URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Tekstretning", +DlgGenLangDirLtr : "Fra venstre mod højre (LTR)", +DlgGenLangDirRtl : "Fra højre mod venstre (RTL)", +DlgGenLangCode : "Sprogkode", +DlgGenAccessKey : "Genvejstast", +DlgGenName : "Navn", +DlgGenTabIndex : "Tabulator indeks", +DlgGenLongDescr : "Udvidet beskrivelse", +DlgGenClass : "Typografiark", +DlgGenTitle : "Titel", +DlgGenContType : "Indholdstype", +DlgGenLinkCharset : "Tegnsæt", +DlgGenStyle : "Typografi", + +// Image Dialog +DlgImgTitle : "Egenskaber for billede", +DlgImgInfoTab : "Generelt", +DlgImgBtnUpload : "Upload", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternativ tekst", +DlgImgWidth : "Bredde", +DlgImgHeight : "Højde", +DlgImgLockRatio : "Lås størrelsesforhold", +DlgBtnResetSize : "Nulstil størrelse", +DlgImgBorder : "Ramme", +DlgImgHSpace : "HMargen", +DlgImgVSpace : "VMargen", +DlgImgAlign : "Justering", +DlgImgAlignLeft : "Venstre", +DlgImgAlignAbsBottom: "Absolut nederst", +DlgImgAlignAbsMiddle: "Absolut centreret", +DlgImgAlignBaseline : "Grundlinje", +DlgImgAlignBottom : "Nederst", +DlgImgAlignMiddle : "Centreret", +DlgImgAlignRight : "Højre", +DlgImgAlignTextTop : "Toppen af teksten", +DlgImgAlignTop : "Øverst", +DlgImgPreview : "Vis eksempel", +DlgImgAlertUrl : "Indtast stien til billedet", +DlgImgLinkTab : "Hyperlink", + +// Flash Dialog +DlgFlashTitle : "Egenskaber for Flash", +DlgFlashChkPlay : "Automatisk afspilning", +DlgFlashChkLoop : "Gentagelse", +DlgFlashChkMenu : "Vis Flash menu", +DlgFlashScale : "Skalér", +DlgFlashScaleAll : "Vis alt", +DlgFlashScaleNoBorder : "Ingen ramme", +DlgFlashScaleFit : "Tilpas størrelse", + +// Link Dialog +DlgLnkWindowTitle : "Egenskaber for hyperlink", +DlgLnkInfoTab : "Generelt", +DlgLnkTargetTab : "Mål", + +DlgLnkType : "Hyperlink type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Bogmærke på denne side", +DlgLnkTypeEMail : "E-mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vælg et anker", +DlgLnkAnchorByName : "Efter anker navn", +DlgLnkAnchorById : "Efter element Id", +DlgLnkNoAnchors : "(Ingen bogmærker dokumentet)", +DlgLnkEMail : "E-mailadresse", +DlgLnkEMailSubject : "Emne", +DlgLnkEMailBody : "Brødtekst", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Upload", + +DlgLnkTarget : "Mål", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nyt vindue (_blank)", +DlgLnkTargetParent : "Overordnet ramme (_parent)", +DlgLnkTargetSelf : "Samme vindue (_self)", +DlgLnkTargetTop : "Hele vinduet (_top)", +DlgLnkTargetFrameName : "Destinationsvinduets navn", +DlgLnkPopWinName : "Pop-up vinduets navn", +DlgLnkPopWinFeat : "Egenskaber for pop-up", +DlgLnkPopResize : "Skalering", +DlgLnkPopLocation : "Adresselinje", +DlgLnkPopMenu : "Menulinje", +DlgLnkPopScroll : "Scrollbars", +DlgLnkPopStatus : "Statuslinje", +DlgLnkPopToolbar : "Værktøjslinje", +DlgLnkPopFullScrn : "Fuld skærm (IE)", +DlgLnkPopDependent : "Koblet/dependent (Netscape)", +DlgLnkPopWidth : "Bredde", +DlgLnkPopHeight : "Højde", +DlgLnkPopLeft : "Position fra venstre", +DlgLnkPopTop : "Position fra toppen", + +DlnLnkMsgNoUrl : "Indtast hyperlink URL!", +DlnLnkMsgNoEMail : "Indtast e-mailaddresse!", +DlnLnkMsgNoAnchor : "Vælg bogmærke!", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Vælg farve", +DlgColorBtnClear : "Nulstil", +DlgColorHighlight : "Markeret", +DlgColorSelected : "Valgt", + +// Smiley Dialog +DlgSmileyTitle : "Vælg smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Vælg symbol", + +// Table Dialog +DlgTableTitle : "Egenskaber for tabel", +DlgTableRows : "Rækker", +DlgTableColumns : "Kolonner", +DlgTableBorder : "Rammebredde", +DlgTableAlign : "Justering", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Venstrestillet", +DlgTableAlignCenter : "Centreret", +DlgTableAlignRight : "Højrestillet", +DlgTableWidth : "Bredde", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "procent", +DlgTableHeight : "Højde", +DlgTableCellSpace : "Celleafstand", +DlgTableCellPad : "Cellemargen", +DlgTableCaption : "Titel", +DlgTableSummary : "Resume", + +// Table Cell Dialog +DlgCellTitle : "Egenskaber for celle", +DlgCellWidth : "Bredde", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "procent", +DlgCellHeight : "Højde", +DlgCellWordWrap : "Orddeling", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nej", +DlgCellHorAlign : "Vandret justering", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Venstrestillet", +DlgCellHorAlignCenter : "Centreret", +DlgCellHorAlignRight: "Højrestillet", +DlgCellVerAlign : "Lodret justering", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Øverst", +DlgCellVerAlignMiddle : "Centreret", +DlgCellVerAlignBottom : "Nederst", +DlgCellVerAlignBaseline : "Grundlinje", +DlgCellRowSpan : "Højde i antal rækker", +DlgCellCollSpan : "Bredde i antal kolonner", +DlgCellBackColor : "Baggrundsfarve", +DlgCellBorderColor : "Rammefarve", +DlgCellBtnSelect : "Vælg...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "Søgeteksten blev ikke fundet!", + +// Replace Dialog +DlgReplaceTitle : "Erstat", +DlgReplaceFindLbl : "Søg efter:", +DlgReplaceReplaceLbl : "Erstat med:", +DlgReplaceCaseChk : "Forskel på store og små bogstaver", +DlgReplaceReplaceBtn : "Erstat", +DlgReplaceReplAllBtn : "Erstat alle", +DlgReplaceWordChk : "Kun hele ord", + +// Paste Operations / Dialog +PasteErrorCut : "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!
        Brug i stedet tastaturet til at klippe teksten (Ctrl+X).", +PasteErrorCopy : "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!
        Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).", + +PasteAsText : "Indsæt som ikke-formateret tekst", +PasteFromWord : "Indsæt fra Word", + +DlgPasteMsg2 : "Indsæt i feltet herunder (Ctrl+V) og klik OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignorer font definitioner", +DlgPasteRemoveStyles : "Ignorer typografi", + +// Color Picker +ColorAutomatic : "Automatisk", +ColorMoreColors : "Flere farver...", + +// Document Properties +DocProps : "Egenskaber for dokument", + +// Anchor Dialog +DlgAnchorTitle : "Egenskaber for bogmærke", +DlgAnchorName : "Bogmærke navn", +DlgAnchorErrorName : "Indtast bogmærke navn!", + +// Speller Pages Dialog +DlgSpellNotInDic : "Ikke i ordbogen", +DlgSpellChangeTo : "Forslag", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer alle", +DlgSpellBtnReplace : "Erstat", +DlgSpellBtnReplaceAll : "Erstat alle", +DlgSpellBtnUndo : "Tilbage", +DlgSpellNoSuggestions : "- ingen forslag -", +DlgSpellProgress : "Stavekontrolen arbejder...", +DlgSpellNoMispell : "Stavekontrol færdig: Ingen fejl fundet", +DlgSpellNoChanges : "Stavekontrol færdig: Ingen ord ændret", +DlgSpellOneChange : "Stavekontrol færdig: Et ord ændret", +DlgSpellManyChanges : "Stavekontrol færdig: %1 ord ændret", + +IeSpellDownload : "Stavekontrol ikke installeret.
        Vil du hente den nu?", + +// Button Dialog +DlgButtonText : "Tekst", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Navn", +DlgCheckboxValue : "Værdi", +DlgCheckboxSelected : "Valgt", + +// Form Dialog +DlgFormName : "Navn", +DlgFormAction : "Handling", +DlgFormMethod : "Metod", + +// Select Field Dialog +DlgSelectName : "Navn", +DlgSelectValue : "Værdi", +DlgSelectSize : "Størrelse", +DlgSelectLines : "linier", +DlgSelectChkMulti : "Tillad flere valg", +DlgSelectOpAvail : "Valgmuligheder", +DlgSelectOpText : "Tekst", +DlgSelectOpValue : "Værdi", +DlgSelectBtnAdd : "Tilføj", +DlgSelectBtnModify : "Rediger", +DlgSelectBtnUp : "Op", +DlgSelectBtnDown : "Ned", +DlgSelectBtnSetValue : "Sæt som valgt", +DlgSelectBtnDelete : "Slet", + +// Textarea Dialog +DlgTextareaName : "Navn", +DlgTextareaCols : "Kolonner", +DlgTextareaRows : "Rækker", + +// Text Field Dialog +DlgTextName : "Navn", +DlgTextValue : "Værdi", +DlgTextCharWidth : "Bredde (tegn)", +DlgTextMaxChars : "Max antal tegn", +DlgTextType : "Type", +DlgTextTypeText : "Tekst", +DlgTextTypePass : "Adgangskode", + +// Hidden Field Dialog +DlgHiddenName : "Navn", +DlgHiddenValue : "Værdi", + +// Bulleted List Dialog +BulletedListProp : "Egenskaber for punktopstilling", +NumberedListProp : "Egenskaber for talopstilling", +DlgLstStart : "Start", //MISSING +DlgLstType : "Type", +DlgLstTypeCircle : "Cirkel", +DlgLstTypeDisc : "Udfyldt cirkel", +DlgLstTypeSquare : "Firkant", +DlgLstTypeNumbers : "Nummereret (1, 2, 3)", +DlgLstTypeLCase : "Små bogstaver (a, b, c)", +DlgLstTypeUCase : "Store bogstaver (A, B, C)", +DlgLstTypeSRoman : "Små romertal (i, ii, iii)", +DlgLstTypeLRoman : "Store romertal (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Generelt", +DlgDocBackTab : "Baggrund", +DlgDocColorsTab : "Farver og margen", +DlgDocMetaTab : "Metadata", + +DlgDocPageTitle : "Sidetitel", +DlgDocLangDir : "Sprog", +DlgDocLangDirLTR : "Fra venstre mod højre (LTR)", +DlgDocLangDirRTL : "Fra højre mod venstre (RTL)", +DlgDocLangCode : "Landekode", +DlgDocCharSet : "Tegnsæt kode", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Anden tegnsæt kode", + +DlgDocDocType : "Dokumenttype kategori", +DlgDocDocTypeOther : "Anden dokumenttype kategori", +DlgDocIncXHTML : "Inkludere XHTML deklartion", +DlgDocBgColor : "Baggrundsfarve", +DlgDocBgImage : "Baggrundsbillede URL", +DlgDocBgNoScroll : "Fastlåst baggrund", +DlgDocCText : "Tekst", +DlgDocCLink : "Hyperlink", +DlgDocCVisited : "Besøgt hyperlink", +DlgDocCActive : "Aktivt hyperlink", +DlgDocMargins : "Sidemargen", +DlgDocMaTop : "Øverst", +DlgDocMaLeft : "Venstre", +DlgDocMaRight : "Højre", +DlgDocMaBottom : "Nederst", +DlgDocMeIndex : "Dokument index nøgleord (kommasepareret)", +DlgDocMeDescr : "Dokument beskrivelse", +DlgDocMeAuthor : "Forfatter", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vis", + +// Templates Dialog +Templates : "Skabeloner", +DlgTemplatesTitle : "Indholdsskabeloner", +DlgTemplatesSelMsg : "Vælg den skabelon, som skal åbnes i editoren.
        (Nuværende indhold vil blive overskrevet!):", +DlgTemplatesLoading : "Henter liste over skabeloner...", +DlgTemplatesNoTpl : "(Der er ikke defineret nogen skabelon!)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "Om", +DlgAboutBrowserInfoTab : "Generelt", +DlgAboutLicenseTab : "Licens", +DlgAboutVersion : "version", +DlgAboutInfo : "For yderlig information gå til" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/de.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/de.js new file mode 100644 index 0000000..cf88015 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/de.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * German language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Symbolleiste einklappen", +ToolbarExpand : "Symbolleiste ausklappen", + +// Toolbar Items and Context Menu +Save : "Speichern", +NewPage : "Neue Seite", +Preview : "Vorschau", +Cut : "Ausschneiden", +Copy : "Kopieren", +Paste : "Einfügen", +PasteText : "aus Textdatei einfügen", +PasteWord : "aus MS-Word einfügen", +Print : "Drucken", +SelectAll : "Alles auswählen", +RemoveFormat : "Formatierungen entfernen", +InsertLinkLbl : "Link", +InsertLink : "Link einfügen/editieren", +RemoveLink : "Link entfernen", +Anchor : "Anker einfügen/editieren", +AnchorDelete : "Anker entfernen", +InsertImageLbl : "Bild", +InsertImage : "Bild einfügen/editieren", +InsertFlashLbl : "Flash", +InsertFlash : "Flash einfügen/editieren", +InsertTableLbl : "Tabelle", +InsertTable : "Tabelle einfügen/editieren", +InsertLineLbl : "Linie", +InsertLine : "Horizontale Linie einfügen", +InsertSpecialCharLbl: "Sonderzeichen", +InsertSpecialChar : "Sonderzeichen einfügen/editieren", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Smiley einfügen", +About : "Über FCKeditor", +Bold : "Fett", +Italic : "Kursiv", +Underline : "Unterstrichen", +StrikeThrough : "Durchgestrichen", +Subscript : "Tiefgestellt", +Superscript : "Hochgestellt", +LeftJustify : "Linksbündig", +CenterJustify : "Zentriert", +RightJustify : "Rechtsbündig", +BlockJustify : "Blocksatz", +DecreaseIndent : "Einzug verringern", +IncreaseIndent : "Einzug erhöhen", +Blockquote : "Zitatblock", +Undo : "Rückgängig", +Redo : "Wiederherstellen", +NumberedListLbl : "Nummerierte Liste", +NumberedList : "Nummerierte Liste einfügen/entfernen", +BulletedListLbl : "Liste", +BulletedList : "Liste einfügen/entfernen", +ShowTableBorders : "Zeige Tabellenrahmen", +ShowDetails : "Zeige Details", +Style : "Stil", +FontFormat : "Format", +Font : "Schriftart", +FontSize : "Größe", +TextColor : "Textfarbe", +BGColor : "Hintergrundfarbe", +Source : "Quellcode", +Find : "Suchen", +Replace : "Ersetzen", +SpellCheck : "Rechtschreibprüfung", +UniversalKeyboard : "Universal-Tastatur", +PageBreakLbl : "Seitenumbruch", +PageBreak : "Seitenumbruch einfügen", + +Form : "Formular", +Checkbox : "Checkbox", +RadioButton : "Radiobutton", +TextField : "Textfeld einzeilig", +Textarea : "Textfeld mehrzeilig", +HiddenField : "verstecktes Feld", +Button : "Klickbutton", +SelectionField : "Auswahlfeld", +ImageButton : "Bildbutton", + +FitWindow : "Editor maximieren", +ShowBlocks : "Blöcke anzeigen", + +// Context Menu +EditLink : "Link editieren", +CellCM : "Zelle", +RowCM : "Zeile", +ColumnCM : "Spalte", +InsertRowAfter : "Zeile unterhalb einfügen", +InsertRowBefore : "Zeile oberhalb einfügen", +DeleteRows : "Zeile entfernen", +InsertColumnAfter : "Spalte rechts danach einfügen", +InsertColumnBefore : "Spalte links davor einfügen", +DeleteColumns : "Spalte löschen", +InsertCellAfter : "Zelle danach einfügen", +InsertCellBefore : "Zelle davor einfügen", +DeleteCells : "Zelle löschen", +MergeCells : "Zellen verbinden", +MergeRight : "nach rechts verbinden", +MergeDown : "nach unten verbinden", +HorizontalSplitCell : "Zelle horizontal teilen", +VerticalSplitCell : "Zelle vertikal teilen", +TableDelete : "Tabelle löschen", +CellProperties : "Zellen-Eigenschaften", +TableProperties : "Tabellen-Eigenschaften", +ImageProperties : "Bild-Eigenschaften", +FlashProperties : "Flash-Eigenschaften", + +AnchorProp : "Anker-Eigenschaften", +ButtonProp : "Button-Eigenschaften", +CheckboxProp : "Checkbox-Eigenschaften", +HiddenFieldProp : "Verstecktes Feld-Eigenschaften", +RadioButtonProp : "Optionsfeld-Eigenschaften", +ImageButtonProp : "Bildbutton-Eigenschaften", +TextFieldProp : "Textfeld (einzeilig) Eigenschaften", +SelectionFieldProp : "Auswahlfeld-Eigenschaften", +TextareaProp : "Textfeld (mehrzeilig) Eigenschaften", +FormProp : "Formular-Eigenschaften", + +FontFormats : "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Bearbeite XHTML. Bitte warten...", +Done : "Fertig", +PasteWordConfirm : "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?", +NotCompatiblePaste : "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?", +UnknownToolbarItem : "Unbekanntes Menüleisten-Objekt \"%1\"", +UnknownCommand : "Unbekannter Befehl \"%1\"", +NotImplemented : "Befehl nicht implementiert", +UnknownToolbarSet : "Menüleiste \"%1\" existiert nicht", +NoActiveX : "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können", +BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", +DialogBlocked : "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Abbrechen", +DlgBtnClose : "Schließen", +DlgBtnBrowseServer : "Server durchsuchen", +DlgAdvancedTag : "Erweitert", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Bitte tragen Sie die URL ein", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "ID", +DlgGenLangDir : "Schreibrichtung", +DlgGenLangDirLtr : "Links nach Rechts (LTR)", +DlgGenLangDirRtl : "Rechts nach Links (RTL)", +DlgGenLangCode : "Sprachenkürzel", +DlgGenAccessKey : "Zugriffstaste", +DlgGenName : "Name", +DlgGenTabIndex : "Tab-Index", +DlgGenLongDescr : "Langform URL", +DlgGenClass : "Stylesheet Klasse", +DlgGenTitle : "Titel Beschreibung", +DlgGenContType : "Inhaltstyp", +DlgGenLinkCharset : "Ziel-Zeichensatz", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Bild-Eigenschaften", +DlgImgInfoTab : "Bild-Info", +DlgImgBtnUpload : "Zum Server senden", +DlgImgURL : "Bildauswahl", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternativer Text", +DlgImgWidth : "Breite", +DlgImgHeight : "Höhe", +DlgImgLockRatio : "Größenverhältniss beibehalten", +DlgBtnResetSize : "Größe zurücksetzen", +DlgImgBorder : "Rahmen", +DlgImgHSpace : "H-Abstand", +DlgImgVSpace : "V-Abstand", +DlgImgAlign : "Ausrichtung", +DlgImgAlignLeft : "Links", +DlgImgAlignAbsBottom: "Abs Unten", +DlgImgAlignAbsMiddle: "Abs Mitte", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Unten", +DlgImgAlignMiddle : "Mitte", +DlgImgAlignRight : "Rechts", +DlgImgAlignTextTop : "Text Oben", +DlgImgAlignTop : "Oben", +DlgImgPreview : "Vorschau", +DlgImgAlertUrl : "Bitte geben Sie die Bild-URL an", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash-Eigenschaften", +DlgFlashChkPlay : "autom. Abspielen", +DlgFlashChkLoop : "Endlosschleife", +DlgFlashChkMenu : "Flash-Menü aktivieren", +DlgFlashScale : "Skalierung", +DlgFlashScaleAll : "Alles anzeigen", +DlgFlashScaleNoBorder : "ohne Rand", +DlgFlashScaleFit : "Passgenau", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link-Info", +DlgLnkTargetTab : "Zielseite", + +DlgLnkType : "Link-Typ", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Anker in dieser Seite", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokoll", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Anker auswählen", +DlgLnkAnchorByName : "nach Anker Name", +DlgLnkAnchorById : "nach Element Id", +DlgLnkNoAnchors : "(keine Anker im Dokument vorhanden)", +DlgLnkEMail : "E-Mail Addresse", +DlgLnkEMailSubject : "Betreffzeile", +DlgLnkEMailBody : "Nachrichtentext", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Zum Server senden", + +DlgLnkTarget : "Zielseite", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Neues Fenster (_blank)", +DlgLnkTargetParent : "Oberes Fenster (_parent)", +DlgLnkTargetSelf : "Gleiches Fenster (_self)", +DlgLnkTargetTop : "Oberstes Fenster (_top)", +DlgLnkTargetFrameName : "Ziel-Fenster-Name", +DlgLnkPopWinName : "Pop-up Fenster-Name", +DlgLnkPopWinFeat : "Pop-up Fenster-Eigenschaften", +DlgLnkPopResize : "Vergrößerbar", +DlgLnkPopLocation : "Adress-Leiste", +DlgLnkPopMenu : "Menü-Leiste", +DlgLnkPopScroll : "Rollbalken", +DlgLnkPopStatus : "Statusleiste", +DlgLnkPopToolbar : "Werkzeugleiste", +DlgLnkPopFullScrn : "Vollbild (IE)", +DlgLnkPopDependent : "Abhängig (Netscape)", +DlgLnkPopWidth : "Breite", +DlgLnkPopHeight : "Höhe", +DlgLnkPopLeft : "Linke Position", +DlgLnkPopTop : "Obere Position", + +DlnLnkMsgNoUrl : "Bitte geben Sie die Link-URL an", +DlnLnkMsgNoEMail : "Bitte geben Sie e-Mail Adresse an", +DlnLnkMsgNoAnchor : "Bitte wählen Sie einen Anker aus", +DlnLnkMsgInvPopName : "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten", + +// Color Dialog +DlgColorTitle : "Farbauswahl", +DlgColorBtnClear : "Keine Farbe", +DlgColorHighlight : "Vorschau", +DlgColorSelected : "Ausgewählt", + +// Smiley Dialog +DlgSmileyTitle : "Smiley auswählen", + +// Special Character Dialog +DlgSpecialCharTitle : "Sonderzeichen auswählen", + +// Table Dialog +DlgTableTitle : "Tabellen-Eigenschaften", +DlgTableRows : "Zeile", +DlgTableColumns : "Spalte", +DlgTableBorder : "Rahmen", +DlgTableAlign : "Ausrichtung", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Links", +DlgTableAlignCenter : "Zentriert", +DlgTableAlignRight : "Rechts", +DlgTableWidth : "Breite", +DlgTableWidthPx : "Pixel", +DlgTableWidthPc : "%", +DlgTableHeight : "Höhe", +DlgTableCellSpace : "Zellenabstand außen", +DlgTableCellPad : "Zellenabstand innen", +DlgTableCaption : "Überschrift", +DlgTableSummary : "Inhaltsübersicht", + +// Table Cell Dialog +DlgCellTitle : "Zellen-Eigenschaften", +DlgCellWidth : "Breite", +DlgCellWidthPx : "Pixel", +DlgCellWidthPc : "%", +DlgCellHeight : "Höhe", +DlgCellWordWrap : "Umbruch", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nein", +DlgCellHorAlign : "Horizontale Ausrichtung", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Links", +DlgCellHorAlignCenter : "Zentriert", +DlgCellHorAlignRight: "Rechts", +DlgCellVerAlign : "Vertikale Ausrichtung", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Oben", +DlgCellVerAlignMiddle : "Mitte", +DlgCellVerAlignBottom : "Unten", +DlgCellVerAlignBaseline : "Grundlinie", +DlgCellRowSpan : "Zeilen zusammenfassen", +DlgCellCollSpan : "Spalten zusammenfassen", +DlgCellBackColor : "Hintergrundfarbe", +DlgCellBorderColor : "Rahmenfarbe", +DlgCellBtnSelect : "Auswahl...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Suchen und Ersetzen", + +// Find Dialog +DlgFindTitle : "Finden", +DlgFindFindBtn : "Finden", +DlgFindNotFoundMsg : "Der gesuchte Text wurde nicht gefunden.", + +// Replace Dialog +DlgReplaceTitle : "Ersetzen", +DlgReplaceFindLbl : "Suche nach:", +DlgReplaceReplaceLbl : "Ersetze mit:", +DlgReplaceCaseChk : "Groß-Kleinschreibung beachten", +DlgReplaceReplaceBtn : "Ersetzen", +DlgReplaceReplAllBtn : "Alle Ersetzen", +DlgReplaceWordChk : "Nur ganze Worte suchen", + +// Paste Operations / Dialog +PasteErrorCut : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).", +PasteErrorCopy : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).", + +PasteAsText : "Als Text einfügen", +PasteFromWord : "Aus Word einfügen", + +DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Strg+V) ein und bestätigen Sie mit OK.", +DlgPasteSec : "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.", +DlgPasteIgnoreFont : "Ignoriere Schriftart-Definitionen", +DlgPasteRemoveStyles : "Entferne Style-Definitionen", + +// Color Picker +ColorAutomatic : "Automatisch", +ColorMoreColors : "Weitere Farben...", + +// Document Properties +DocProps : "Dokument-Eigenschaften", + +// Anchor Dialog +DlgAnchorTitle : "Anker-Eigenschaften", +DlgAnchorName : "Anker Name", +DlgAnchorErrorName : "Bitte geben Sie den Namen des Ankers ein", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nicht im Wörterbuch", +DlgSpellChangeTo : "Ändern in", +DlgSpellBtnIgnore : "Ignorieren", +DlgSpellBtnIgnoreAll : "Alle Ignorieren", +DlgSpellBtnReplace : "Ersetzen", +DlgSpellBtnReplaceAll : "Alle Ersetzen", +DlgSpellBtnUndo : "Rückgängig", +DlgSpellNoSuggestions : " - keine Vorschläge - ", +DlgSpellProgress : "Rechtschreibprüfung läuft...", +DlgSpellNoMispell : "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden", +DlgSpellNoChanges : "Rechtschreibprüfung abgeschlossen - keine Worte geändert", +DlgSpellOneChange : "Rechtschreibprüfung abgeschlossen - ein Wort geändert", +DlgSpellManyChanges : "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert", + +IeSpellDownload : "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?", + +// Button Dialog +DlgButtonText : "Text (Wert)", +DlgButtonType : "Typ", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Absenden", +DlgButtonTypeRst : "Zurücksetzen", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Wert", +DlgCheckboxSelected : "ausgewählt", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Wert", +DlgSelectSize : "Größe", +DlgSelectLines : "Linien", +DlgSelectChkMulti : "Erlaube Mehrfachauswahl", +DlgSelectOpAvail : "Mögliche Optionen", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Wert", +DlgSelectBtnAdd : "Hinzufügen", +DlgSelectBtnModify : "Ändern", +DlgSelectBtnUp : "Hoch", +DlgSelectBtnDown : "Runter", +DlgSelectBtnSetValue : "Setze als Standardwert", +DlgSelectBtnDelete : "Entfernen", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Spalten", +DlgTextareaRows : "Reihen", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Wert", +DlgTextCharWidth : "Zeichenbreite", +DlgTextMaxChars : "Max. Zeichen", +DlgTextType : "Typ", +DlgTextTypeText : "Text", +DlgTextTypePass : "Passwort", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Wert", + +// Bulleted List Dialog +BulletedListProp : "Listen-Eigenschaften", +NumberedListProp : "Nummerierte Listen-Eigenschaften", +DlgLstStart : "Start", +DlgLstType : "Typ", +DlgLstTypeCircle : "Ring", +DlgLstTypeDisc : "Kreis", +DlgLstTypeSquare : "Quadrat", +DlgLstTypeNumbers : "Nummern (1, 2, 3)", +DlgLstTypeLCase : "Kleinbuchstaben (a, b, c)", +DlgLstTypeUCase : "Großbuchstaben (A, B, C)", +DlgLstTypeSRoman : "Kleine römische Zahlen (i, ii, iii)", +DlgLstTypeLRoman : "Große römische Zahlen (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Allgemein", +DlgDocBackTab : "Hintergrund", +DlgDocColorsTab : "Farben und Abstände", +DlgDocMetaTab : "Metadaten", + +DlgDocPageTitle : "Seitentitel", +DlgDocLangDir : "Schriftrichtung", +DlgDocLangDirLTR : "Links nach Rechts", +DlgDocLangDirRTL : "Rechts nach Links", +DlgDocLangCode : "Sprachkürzel", +DlgDocCharSet : "Zeichenkodierung", +DlgDocCharSetCE : "Zentraleuropäisch", +DlgDocCharSetCT : "traditionell Chinesisch (Big5)", +DlgDocCharSetCR : "Kyrillisch", +DlgDocCharSetGR : "Griechisch", +DlgDocCharSetJP : "Japanisch", +DlgDocCharSetKR : "Koreanisch", +DlgDocCharSetTR : "Türkisch", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Westeuropäisch", +DlgDocCharSetOther : "Andere Zeichenkodierung", + +DlgDocDocType : "Dokumententyp", +DlgDocDocTypeOther : "Anderer Dokumententyp", +DlgDocIncXHTML : "Beziehe XHTML Deklarationen ein", +DlgDocBgColor : "Hintergrundfarbe", +DlgDocBgImage : "Hintergrundbild URL", +DlgDocBgNoScroll : "feststehender Hintergrund", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Besuchter Link", +DlgDocCActive : "Aktiver Link", +DlgDocMargins : "Seitenränder", +DlgDocMaTop : "Oben", +DlgDocMaLeft : "Links", +DlgDocMaRight : "Rechts", +DlgDocMaBottom : "Unten", +DlgDocMeIndex : "Schlüsselwörter (durch Komma getrennt)", +DlgDocMeDescr : "Dokument-Beschreibung", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vorschau", + +// Templates Dialog +Templates : "Vorlagen", +DlgTemplatesTitle : "Vorlagen", +DlgTemplatesSelMsg : "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):", +DlgTemplatesLoading : "Liste der Vorlagen wird geladen. Bitte warten...", +DlgTemplatesNoTpl : "(keine Vorlagen definiert)", +DlgTemplatesReplace : "Aktuellen Inhalt ersetzen", + +// About Dialog +DlgAboutAboutTab : "Über", +DlgAboutBrowserInfoTab : "Browser-Info", +DlgAboutLicenseTab : "Lizenz", +DlgAboutVersion : "Version", +DlgAboutInfo : "Für weitere Informationen siehe" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/el.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/el.js new file mode 100644 index 0000000..5a8fc9c --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/el.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Greek language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Απόκρυψη Μπάρας Εργαλείων", +ToolbarExpand : "Εμφάνιση Μπάρας Εργαλείων", + +// Toolbar Items and Context Menu +Save : "Αποθήκευση", +NewPage : "Νέα Σελίδα", +Preview : "Προεπισκόπιση", +Cut : "Αποκοπή", +Copy : "Αντιγραφή", +Paste : "Επικόλληση", +PasteText : "Επικόλληση (απλό κείμενο)", +PasteWord : "Επικόλληση από το Word", +Print : "Εκτύπωση", +SelectAll : "Επιλογή όλων", +RemoveFormat : "Αφαίρεση Μορφοποίησης", +InsertLinkLbl : "Σύνδεσμος (Link)", +InsertLink : "Εισαγωγή/Μεταβολή Συνδέσμου (Link)", +RemoveLink : "Αφαίρεση Συνδέσμου (Link)", +Anchor : "Εισαγωγή/επεξεργασία Anchor", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Εικόνα", +InsertImage : "Εισαγωγή/Μεταβολή Εικόνας", +InsertFlashLbl : "Εισαγωγή Flash", +InsertFlash : "Εισαγωγή/επεξεργασία Flash", +InsertTableLbl : "Πίνακας", +InsertTable : "Εισαγωγή/Μεταβολή Πίνακα", +InsertLineLbl : "Γραμμή", +InsertLine : "Εισαγωγή Οριζόντιας Γραμμής", +InsertSpecialCharLbl: "Ειδικό Σύμβολο", +InsertSpecialChar : "Εισαγωγή Ειδικού Συμβόλου", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Εισαγωγή Smiley", +About : "Περί του FCKeditor", +Bold : "Έντονα", +Italic : "Πλάγια", +Underline : "Υπογράμμιση", +StrikeThrough : "Διαγράμμιση", +Subscript : "Δείκτης", +Superscript : "Εκθέτης", +LeftJustify : "Στοίχιση Αριστερά", +CenterJustify : "Στοίχιση στο Κέντρο", +RightJustify : "Στοίχιση Δεξιά", +BlockJustify : "Πλήρης Στοίχιση (Block)", +DecreaseIndent : "Μείωση Εσοχής", +IncreaseIndent : "Αύξηση Εσοχής", +Blockquote : "Blockquote", //MISSING +Undo : "Αναίρεση", +Redo : "Επαναφορά", +NumberedListLbl : "Λίστα με Αριθμούς", +NumberedList : "Εισαγωγή/Διαγραφή Λίστας με Αριθμούς", +BulletedListLbl : "Λίστα με Bullets", +BulletedList : "Εισαγωγή/Διαγραφή Λίστας με Bullets", +ShowTableBorders : "Προβολή Ορίων Πίνακα", +ShowDetails : "Προβολή Λεπτομερειών", +Style : "Στυλ", +FontFormat : "Μορφή Γραμματοσειράς", +Font : "Γραμματοσειρά", +FontSize : "Μέγεθος", +TextColor : "Χρώμα Γραμμάτων", +BGColor : "Χρώμα Υποβάθρου", +Source : "HTML κώδικας", +Find : "Αναζήτηση", +Replace : "Αντικατάσταση", +SpellCheck : "Ορθογραφικός έλεγχος", +UniversalKeyboard : "Διεθνής πληκτρολόγιο", +PageBreakLbl : "Τέλος σελίδας", +PageBreak : "Εισαγωγή τέλους σελίδας", + +Form : "Φόρμα", +Checkbox : "Κουτί επιλογής", +RadioButton : "Κουμπί Radio", +TextField : "Πεδίο κειμένου", +Textarea : "Περιοχή κειμένου", +HiddenField : "Κρυφό πεδίο", +Button : "Κουμπί", +SelectionField : "Πεδίο επιλογής", +ImageButton : "Κουμπί εικόνας", + +FitWindow : "Μεγιστοποίηση προγράμματος", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Μεταβολή Συνδέσμου (Link)", +CellCM : "Κελί", +RowCM : "Σειρά", +ColumnCM : "Στήλη", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Διαγραφή Γραμμών", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Διαγραφή Κολωνών", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Διαγραφή Κελιών", +MergeCells : "Ενοποίηση Κελιών", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Διαγραφή πίνακα", +CellProperties : "Ιδιότητες Κελιού", +TableProperties : "Ιδιότητες Πίνακα", +ImageProperties : "Ιδιότητες Εικόνας", +FlashProperties : "Ιδιότητες Flash", + +AnchorProp : "Ιδιότητες άγκυρας", +ButtonProp : "Ιδιότητες κουμπιού", +CheckboxProp : "Ιδιότητες κουμπιού επιλογής", +HiddenFieldProp : "Ιδιότητες κρυφού πεδίου", +RadioButtonProp : "Ιδιότητες κουμπιού radio", +ImageButtonProp : "Ιδιότητες κουμπιού εικόνας", +TextFieldProp : "Ιδιότητες πεδίου κειμένου", +SelectionFieldProp : "Ιδιότητες πεδίου επιλογής", +TextareaProp : "Ιδιότητες περιοχής κειμένου", +FormProp : "Ιδιότητες φόρμας", + +FontFormats : "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6", + +// Alerts and Messages +ProcessingXHTML : "Επεξεργασία XHTML. Παρακαλώ περιμένετε...", +Done : "Έτοιμο", +PasteWordConfirm : "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως προέρχεται από το Word. Θέλετε να καθαριστεί πριν επικοληθεί;", +NotCompatiblePaste : "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωρίς καθαρισμό;", +UnknownToolbarItem : "Άγνωστο αντικείμενο της μπάρας εργαλείων \"%1\"", +UnknownCommand : "Άγνωστή εντολή \"%1\"", +NotImplemented : "Η εντολή δεν έχει ενεργοποιηθεί", +UnknownToolbarSet : "Η μπάρα εργαλείων \"%1\" δεν υπάρχει", +NoActiveX : "Οι ρυθμίσεις ασφαλείας του browser σας μπορεί να περιορίσουν κάποιες ρυθμίσεις του προγράμματος. Χρειάζεται να ενεργοποιήσετε την επιλογή \"Run ActiveX controls and plug-ins\". Ίσως παρουσιαστούν λάθη και παρατηρήσετε ελειπείς λειτουργίες.", +BrowseServerBlocked : "Οι πόροι του browser σας δεν είναι προσπελάσιμοι. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.", +DialogBlocked : "Δεν ήταν δυνατό να ανοίξει το παράθυρο διαλόγου. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Ακύρωση", +DlgBtnClose : "Κλείσιμο", +DlgBtnBrowseServer : "Εξερεύνηση διακομιστή", +DlgAdvancedTag : "Για προχωρημένους", +DlgOpOther : "<Άλλα>", +DlgInfoTab : "Πληροφορίες", +DlgAlertUrl : "Παρακαλώ εισάγετε URL", + +// General Dialogs Labels +DlgGenNotSet : "<χωρίς>", +DlgGenId : "Id", +DlgGenLangDir : "Κατεύθυνση κειμένου", +DlgGenLangDirLtr : "Αριστερά προς Δεξιά (LTR)", +DlgGenLangDirRtl : "Δεξιά προς Αριστερά (RTL)", +DlgGenLangCode : "Κωδικός Γλώσσας", +DlgGenAccessKey : "Συντόμευση (Access Key)", +DlgGenName : "Όνομα", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Αναλυτική περιγραφή URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Συμβουλευτικός τίτλος", +DlgGenContType : "Συμβουλευτικός τίτλος περιεχομένου", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Στύλ", + +// Image Dialog +DlgImgTitle : "Ιδιότητες Εικόνας", +DlgImgInfoTab : "Πληροφορίες Εικόνας", +DlgImgBtnUpload : "Αποστολή στον Διακομιστή", +DlgImgURL : "URL", +DlgImgUpload : "Αποστολή", +DlgImgAlt : "Εναλλακτικό Κείμενο (ALT)", +DlgImgWidth : "Πλάτος", +DlgImgHeight : "Ύψος", +DlgImgLockRatio : "Κλείδωμα Αναλογίας", +DlgBtnResetSize : "Επαναφορά Αρχικού Μεγέθους", +DlgImgBorder : "Περιθώριο", +DlgImgHSpace : "Οριζόντιος Χώρος (HSpace)", +DlgImgVSpace : "Κάθετος Χώρος (VSpace)", +DlgImgAlign : "Ευθυγράμμιση (Align)", +DlgImgAlignLeft : "Αριστερά", +DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)", +DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)", +DlgImgAlignBaseline : "Γραμμή Βάσης (Baseline)", +DlgImgAlignBottom : "Κάτω (Bottom)", +DlgImgAlignMiddle : "Μέση (Middle)", +DlgImgAlignRight : "Δεξιά (Right)", +DlgImgAlignTextTop : "Κορυφή Κειμένου (Text Top)", +DlgImgAlignTop : "Πάνω (Top)", +DlgImgPreview : "Προεπισκόπιση", +DlgImgAlertUrl : "Εισάγετε την τοποθεσία (URL) της εικόνας", +DlgImgLinkTab : "Σύνδεσμος", + +// Flash Dialog +DlgFlashTitle : "Ιδιότητες flash", +DlgFlashChkPlay : "Αυτόματη έναρξη", +DlgFlashChkLoop : "Επανάληψη", +DlgFlashChkMenu : "Ενεργοποίηση Flash Menu", +DlgFlashScale : "Κλίμακα", +DlgFlashScaleAll : "Εμφάνιση όλων", +DlgFlashScaleNoBorder : "Χωρίς όρια", +DlgFlashScaleFit : "Ακριβής εφαρμογή", + +// Link Dialog +DlgLnkWindowTitle : "Σύνδεσμος (Link)", +DlgLnkInfoTab : "Link", +DlgLnkTargetTab : "Παράθυρο Στόχος (Target)", + +DlgLnkType : "Τύπος συνδέσμου (Link)", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Άγκυρα σε αυτή τη σελίδα", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Προτόκολο", +DlgLnkProtoOther : "<άλλο>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Επιλέξτε μια άγκυρα", +DlgLnkAnchorByName : "Βάσει του Ονόματος (Name) της άγκυρας", +DlgLnkAnchorById : "Βάσει του Element Id", +DlgLnkNoAnchors : "(Δεν υπάρχουν άγκυρες στο κείμενο)", +DlgLnkEMail : "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου", +DlgLnkEMailSubject : "Θέμα Μηνύματος", +DlgLnkEMailBody : "Κείμενο Μηνύματος", +DlgLnkUpload : "Αποστολή", +DlgLnkBtnUpload : "Αποστολή στον Διακομιστή", + +DlgLnkTarget : "Παράθυρο Στόχος (Target)", +DlgLnkTargetFrame : "<πλαίσιο>", +DlgLnkTargetPopup : "<παράθυρο popup>", +DlgLnkTargetBlank : "Νέο Παράθυρο (_blank)", +DlgLnkTargetParent : "Γονικό Παράθυρο (_parent)", +DlgLnkTargetSelf : "Ίδιο Παράθυρο (_self)", +DlgLnkTargetTop : "Ανώτατο Παράθυρο (_top)", +DlgLnkTargetFrameName : "Όνομα πλαισίου στόχου", +DlgLnkPopWinName : "Όνομα Popup Window", +DlgLnkPopWinFeat : "Επιλογές Popup Window", +DlgLnkPopResize : "Με αλλαγή Μεγέθους", +DlgLnkPopLocation : "Μπάρα Τοποθεσίας", +DlgLnkPopMenu : "Μπάρα Menu", +DlgLnkPopScroll : "Μπάρες Κύλισης", +DlgLnkPopStatus : "Μπάρα Status", +DlgLnkPopToolbar : "Μπάρα Εργαλείων", +DlgLnkPopFullScrn : "Ολόκληρη η Οθόνη (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Πλάτος", +DlgLnkPopHeight : "Ύψος", +DlgLnkPopLeft : "Τοποθεσία Αριστερής Άκρης", +DlgLnkPopTop : "Τοποθεσία Πάνω Άκρης", + +DlnLnkMsgNoUrl : "Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)", +DlnLnkMsgNoEMail : "Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου", +DlnLnkMsgNoAnchor : "Επιλέξτε ένα Anchor", +DlnLnkMsgInvPopName : "Το όνομα του popup πρέπει να αρχίζει με χαρακτήρα της αλφαβήτου και να μην περιέχει κενά", + +// Color Dialog +DlgColorTitle : "Επιλογή χρώματος", +DlgColorBtnClear : "Καθαρισμός", +DlgColorHighlight : "Προεπισκόπιση", +DlgColorSelected : "Επιλεγμένο", + +// Smiley Dialog +DlgSmileyTitle : "Επιλέξτε ένα Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Επιλέξτε ένα Ειδικό Σύμβολο", + +// Table Dialog +DlgTableTitle : "Ιδιότητες Πίνακα", +DlgTableRows : "Γραμμές", +DlgTableColumns : "Κολώνες", +DlgTableBorder : "Μέγεθος Περιθωρίου", +DlgTableAlign : "Στοίχιση", +DlgTableAlignNotSet : "<χωρίς>", +DlgTableAlignLeft : "Αριστερά", +DlgTableAlignCenter : "Κέντρο", +DlgTableAlignRight : "Δεξιά", +DlgTableWidth : "Πλάτος", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "\%", +DlgTableHeight : "Ύψος", +DlgTableCellSpace : "Απόσταση κελιών", +DlgTableCellPad : "Γέμισμα κελιών", +DlgTableCaption : "Υπέρτιτλος", +DlgTableSummary : "Περίληψη", + +// Table Cell Dialog +DlgCellTitle : "Ιδιότητες Κελιού", +DlgCellWidth : "Πλάτος", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "\%", +DlgCellHeight : "Ύψος", +DlgCellWordWrap : "Με αλλαγή γραμμής", +DlgCellWordWrapNotSet : "<χωρίς>", +DlgCellWordWrapYes : "Ναι", +DlgCellWordWrapNo : "Όχι", +DlgCellHorAlign : "Οριζόντια Στοίχιση", +DlgCellHorAlignNotSet : "<χωρίς>", +DlgCellHorAlignLeft : "Αριστερά", +DlgCellHorAlignCenter : "Κέντρο", +DlgCellHorAlignRight: "Δεξιά", +DlgCellVerAlign : "Κάθετη Στοίχιση", +DlgCellVerAlignNotSet : "<χωρίς>", +DlgCellVerAlignTop : "Πάνω (Top)", +DlgCellVerAlignMiddle : "Μέση (Middle)", +DlgCellVerAlignBottom : "Κάτω (Bottom)", +DlgCellVerAlignBaseline : "Γραμμή Βάσης (Baseline)", +DlgCellRowSpan : "Αριθμός Γραμμών (Rows Span)", +DlgCellCollSpan : "Αριθμός Κολωνών (Columns Span)", +DlgCellBackColor : "Χρώμα Υποβάθρου", +DlgCellBorderColor : "Χρώμα Περιθωρίου", +DlgCellBtnSelect : "Επιλογή...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Αναζήτηση", +DlgFindFindBtn : "Αναζήτηση", +DlgFindNotFoundMsg : "Το κείμενο δεν βρέθηκε.", + +// Replace Dialog +DlgReplaceTitle : "Αντικατάσταση", +DlgReplaceFindLbl : "Αναζήτηση:", +DlgReplaceReplaceLbl : "Αντικατάσταση με:", +DlgReplaceCaseChk : "Έλεγχος πεζών/κεφαλαίων", +DlgReplaceReplaceBtn : "Αντικατάσταση", +DlgReplaceReplAllBtn : "Αντικατάσταση Όλων", +DlgReplaceWordChk : "Εύρεση πλήρους λέξης", + +// Paste Operations / Dialog +PasteErrorCut : "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).", +PasteErrorCopy : "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).", + +PasteAsText : "Επικόλληση ως Απλό Κείμενο", +PasteFromWord : "Επικόλληση από το Word", + +DlgPasteMsg2 : "Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (Ctrl+V) και πατήστε OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Αγνόηση προδιαγραφών γραμματοσειράς", +DlgPasteRemoveStyles : "Αφαίρεση προδιαγραφών στύλ", + +// Color Picker +ColorAutomatic : "Αυτόματο", +ColorMoreColors : "Περισσότερα χρώματα...", + +// Document Properties +DocProps : "Ιδιότητες εγγράφου", + +// Anchor Dialog +DlgAnchorTitle : "Ιδιότητες άγκυρας", +DlgAnchorName : "Όνομα άγκυρας", +DlgAnchorErrorName : "Παρακαλούμε εισάγετε όνομα άγκυρας", + +// Speller Pages Dialog +DlgSpellNotInDic : "Δεν υπάρχει στο λεξικό", +DlgSpellChangeTo : "Αλλαγή σε", +DlgSpellBtnIgnore : "Αγνόηση", +DlgSpellBtnIgnoreAll : "Αγνόηση όλων", +DlgSpellBtnReplace : "Αντικατάσταση", +DlgSpellBtnReplaceAll : "Αντικατάσταση όλων", +DlgSpellBtnUndo : "Αναίρεση", +DlgSpellNoSuggestions : "- Δεν υπάρχουν προτάσεις -", +DlgSpellProgress : "Ορθογραφικός έλεγχος σε εξέλιξη...", +DlgSpellNoMispell : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη", +DlgSpellNoChanges : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις", +DlgSpellOneChange : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε", +DlgSpellManyChanges : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν", + +IeSpellDownload : "Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;", + +// Button Dialog +DlgButtonText : "Κείμενο (Τιμή)", +DlgButtonType : "Τύπος", +DlgButtonTypeBtn : "Κουμπί", +DlgButtonTypeSbm : "Καταχώρηση", +DlgButtonTypeRst : "Επαναφορά", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Όνομα", +DlgCheckboxValue : "Τιμή", +DlgCheckboxSelected : "Επιλεγμένο", + +// Form Dialog +DlgFormName : "Όνομα", +DlgFormAction : "Δράση", +DlgFormMethod : "Μάθοδος", + +// Select Field Dialog +DlgSelectName : "Όνομα", +DlgSelectValue : "Τιμή", +DlgSelectSize : "Μέγεθος", +DlgSelectLines : "γραμμές", +DlgSelectChkMulti : "Πολλαπλές επιλογές", +DlgSelectOpAvail : "Διαθέσιμες επιλογές", +DlgSelectOpText : "Κείμενο", +DlgSelectOpValue : "Τιμή", +DlgSelectBtnAdd : "Προσθήκη", +DlgSelectBtnModify : "Αλλαγή", +DlgSelectBtnUp : "Πάνω", +DlgSelectBtnDown : "Κάτω", +DlgSelectBtnSetValue : "Προεπιλεγμένη επιλογή", +DlgSelectBtnDelete : "Διαγραφή", + +// Textarea Dialog +DlgTextareaName : "Όνομα", +DlgTextareaCols : "Στήλες", +DlgTextareaRows : "Σειρές", + +// Text Field Dialog +DlgTextName : "Όνομα", +DlgTextValue : "Τιμή", +DlgTextCharWidth : "Μήκος χαρακτήρων", +DlgTextMaxChars : "Μέγιστοι χαρακτήρες", +DlgTextType : "Τύπος", +DlgTextTypeText : "Κείμενο", +DlgTextTypePass : "Κωδικός", + +// Hidden Field Dialog +DlgHiddenName : "Όνομα", +DlgHiddenValue : "Τιμή", + +// Bulleted List Dialog +BulletedListProp : "Ιδιότητες λίστας Bulleted", +NumberedListProp : "Ιδιότητες αριθμημένης λίστας ", +DlgLstStart : "Αρχή", +DlgLstType : "Τύπος", +DlgLstTypeCircle : "Κύκλος", +DlgLstTypeDisc : "Δίσκος", +DlgLstTypeSquare : "Τετράγωνο", +DlgLstTypeNumbers : "Αριθμοί (1, 2, 3)", +DlgLstTypeLCase : "Πεζά γράμματα (a, b, c)", +DlgLstTypeUCase : "Κεφαλαία γράμματα (A, B, C)", +DlgLstTypeSRoman : "Μικρά λατινικά αριθμητικά (i, ii, iii)", +DlgLstTypeLRoman : "Μεγάλα λατινικά αριθμητικά (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Γενικά", +DlgDocBackTab : "Φόντο", +DlgDocColorsTab : "Χρώματα και περιθώρια", +DlgDocMetaTab : "Δεδομένα Meta", + +DlgDocPageTitle : "Τίτλος σελίδας", +DlgDocLangDir : "Κατεύθυνση γραφής", +DlgDocLangDirLTR : "αριστερά προς δεξιά (LTR)", +DlgDocLangDirRTL : "δεξιά προς αριστερά (RTL)", +DlgDocLangCode : "Κωδικός γλώσσας", +DlgDocCharSet : "Κωδικοποίηση χαρακτήρων", +DlgDocCharSetCE : "Κεντρικής Ευρώπης", +DlgDocCharSetCT : "Παραδοσιακά κινέζικα (Big5)", +DlgDocCharSetCR : "Κυριλλική", +DlgDocCharSetGR : "Ελληνική", +DlgDocCharSetJP : "Ιαπωνική", +DlgDocCharSetKR : "Κορεάτικη", +DlgDocCharSetTR : "Τουρκική", +DlgDocCharSetUN : "Διεθνής (UTF-8)", +DlgDocCharSetWE : "Δυτικής Ευρώπης", +DlgDocCharSetOther : "Άλλη κωδικοποίηση χαρακτήρων", + +DlgDocDocType : "Επικεφαλίδα τύπου εγγράφου", +DlgDocDocTypeOther : "Άλλη επικεφαλίδα τύπου εγγράφου", +DlgDocIncXHTML : "Να συμπεριληφθούν οι δηλώσεις XHTML", +DlgDocBgColor : "Χρώμα φόντου", +DlgDocBgImage : "Διεύθυνση εικόνας φόντου", +DlgDocBgNoScroll : "Φόντο χωρίς κύλιση", +DlgDocCText : "Κείμενο", +DlgDocCLink : "Σύνδεσμος", +DlgDocCVisited : "Σύνδεσμος που έχει επισκευθεί", +DlgDocCActive : "Ενεργός σύνδεσμος", +DlgDocMargins : "Περιθώρια σελίδας", +DlgDocMaTop : "Κορυφή", +DlgDocMaLeft : "Αριστερά", +DlgDocMaRight : "Δεξιά", +DlgDocMaBottom : "Κάτω", +DlgDocMeIndex : "Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)", +DlgDocMeDescr : "Περιγραφή εγγράφου", +DlgDocMeAuthor : "Συγγραφέας", +DlgDocMeCopy : "Πνευματικά δικαιώματα", +DlgDocPreview : "Προεπισκόπηση", + +// Templates Dialog +Templates : "Πρότυπα", +DlgTemplatesTitle : "Πρότυπα περιεχομένου", +DlgTemplatesSelMsg : "Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα
        (τα υπάρχοντα περιεχόμενα θα χαθούν):", +DlgTemplatesLoading : "Φόρτωση καταλόγου προτύπων. Παρακαλώ περιμένετε...", +DlgTemplatesNoTpl : "(Δεν έχουν καθοριστεί πρότυπα)", +DlgTemplatesReplace : "Αντικατάσταση υπάρχοντων περιεχομένων", + +// About Dialog +DlgAboutAboutTab : "Σχετικά", +DlgAboutBrowserInfoTab : "Πληροφορίες Browser", +DlgAboutLicenseTab : "Άδεια", +DlgAboutVersion : "έκδοση", +DlgAboutInfo : "Για περισσότερες πληροφορίες" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-au.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-au.js new file mode 100644 index 0000000..b729c13 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-au.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * English (Australia) language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Collapse Toolbar", +ToolbarExpand : "Expand Toolbar", + +// Toolbar Items and Context Menu +Save : "Save", +NewPage : "New Page", +Preview : "Preview", +Cut : "Cut", +Copy : "Copy", +Paste : "Paste", +PasteText : "Paste as plain text", +PasteWord : "Paste from Word", +Print : "Print", +SelectAll : "Select All", +RemoveFormat : "Remove Format", +InsertLinkLbl : "Link", +InsertLink : "Insert/Edit Link", +RemoveLink : "Remove Link", +Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", +InsertImageLbl : "Image", +InsertImage : "Insert/Edit Image", +InsertFlashLbl : "Flash", +InsertFlash : "Insert/Edit Flash", +InsertTableLbl : "Table", +InsertTable : "Insert/Edit Table", +InsertLineLbl : "Line", +InsertLine : "Insert Horizontal Line", +InsertSpecialCharLbl: "Special Character", +InsertSpecialChar : "Insert Special Character", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insert Smiley", +About : "About FCKeditor", +Bold : "Bold", +Italic : "Italic", +Underline : "Underline", +StrikeThrough : "Strike Through", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Left Justify", +CenterJustify : "Centre Justify", +RightJustify : "Right Justify", +BlockJustify : "Block Justify", +DecreaseIndent : "Decrease Indent", +IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", +Undo : "Undo", +Redo : "Redo", +NumberedListLbl : "Numbered List", +NumberedList : "Insert/Remove Numbered List", +BulletedListLbl : "Bulleted List", +BulletedList : "Insert/Remove Bulleted List", +ShowTableBorders : "Show Table Borders", +ShowDetails : "Show Details", +Style : "Style", +FontFormat : "Format", +Font : "Font", +FontSize : "Size", +TextColor : "Text Colour", +BGColor : "Background Colour", +Source : "Source", +Find : "Find", +Replace : "Replace", +SpellCheck : "Check Spelling", +UniversalKeyboard : "Universal Keyboard", +PageBreakLbl : "Page Break", +PageBreak : "Insert Page Break", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", + +// Context Menu +EditLink : "Edit Link", +CellCM : "Cell", +RowCM : "Row", +ColumnCM : "Column", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", +DeleteRows : "Delete Rows", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", +DeleteColumns : "Delete Columns", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", +DeleteCells : "Delete Cells", +MergeCells : "Merge Cells", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", +TableDelete : "Delete Table", +CellProperties : "Cell Properties", +TableProperties : "Table Properties", +ImageProperties : "Image Properties", +FlashProperties : "Flash Properties", + +AnchorProp : "Anchor Properties", +ButtonProp : "Button Properties", +CheckboxProp : "Checkbox Properties", +HiddenFieldProp : "Hidden Field Properties", +RadioButtonProp : "Radio Button Properties", +ImageButtonProp : "Image Button Properties", +TextFieldProp : "Text Field Properties", +SelectionFieldProp : "Selection Field Properties", +TextareaProp : "Textarea Properties", +FormProp : "Form Properties", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processing XHTML. Please wait...", +Done : "Done", +PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", +NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", +UnknownToolbarItem : "Unknown toolbar item \"%1\"", +UnknownCommand : "Unknown command name \"%1\"", +NotImplemented : "Command not implemented", +UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancel", +DlgBtnClose : "Close", +DlgBtnBrowseServer : "Browse Server", +DlgAdvancedTag : "Advanced", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Please insert the URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Language Direction", +DlgGenLangDirLtr : "Left to Right (LTR)", +DlgGenLangDirRtl : "Right to Left (RTL)", +DlgGenLangCode : "Language Code", +DlgGenAccessKey : "Access Key", +DlgGenName : "Name", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Long Description URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Image Properties", +DlgImgInfoTab : "Image Info", +DlgImgBtnUpload : "Send it to the Server", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternative Text", +DlgImgWidth : "Width", +DlgImgHeight : "Height", +DlgImgLockRatio : "Lock Ratio", +DlgBtnResetSize : "Reset Size", +DlgImgBorder : "Border", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Align", +DlgImgAlignLeft : "Left", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Right", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Preview", +DlgImgAlertUrl : "Please type the image URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash Properties", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Loop", +DlgFlashChkMenu : "Enable Flash Menu", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Show all", +DlgFlashScaleNoBorder : "No Border", +DlgFlashScaleFit : "Exact Fit", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Target", + +DlgLnkType : "Link Type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Link to anchor in the text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Select an Anchor", +DlgLnkAnchorByName : "By Anchor Name", +DlgLnkAnchorById : "By Element Id", +DlgLnkNoAnchors : "(No anchors available in the document)", +DlgLnkEMail : "E-Mail Address", +DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailBody : "Message Body", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Send it to the Server", + +DlgLnkTarget : "Target", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "New Window (_blank)", +DlgLnkTargetParent : "Parent Window (_parent)", +DlgLnkTargetSelf : "Same Window (_self)", +DlgLnkTargetTop : "Topmost Window (_top)", +DlgLnkTargetFrameName : "Target Frame Name", +DlgLnkPopWinName : "Popup Window Name", +DlgLnkPopWinFeat : "Popup Window Features", +DlgLnkPopResize : "Resizable", +DlgLnkPopLocation : "Location Bar", +DlgLnkPopMenu : "Menu Bar", +DlgLnkPopScroll : "Scroll Bars", +DlgLnkPopStatus : "Status Bar", +DlgLnkPopToolbar : "Toolbar", +DlgLnkPopFullScrn : "Full Screen (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Width", +DlgLnkPopHeight : "Height", +DlgLnkPopLeft : "Left Position", +DlgLnkPopTop : "Top Position", + +DlnLnkMsgNoUrl : "Please type the link URL", +DlnLnkMsgNoEMail : "Please type the e-mail address", +DlnLnkMsgNoAnchor : "Please select an anchor", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", + +// Color Dialog +DlgColorTitle : "Select Colour", +DlgColorBtnClear : "Clear", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Selected", + +// Smiley Dialog +DlgSmileyTitle : "Insert a Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Select Special Character", + +// Table Dialog +DlgTableTitle : "Table Properties", +DlgTableRows : "Rows", +DlgTableColumns : "Columns", +DlgTableBorder : "Border size", +DlgTableAlign : "Alignment", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Left", +DlgTableAlignCenter : "Centre", +DlgTableAlignRight : "Right", +DlgTableWidth : "Width", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Height", +DlgTableCellSpace : "Cell spacing", +DlgTableCellPad : "Cell padding", +DlgTableCaption : "Caption", +DlgTableSummary : "Summary", + +// Table Cell Dialog +DlgCellTitle : "Cell Properties", +DlgCellWidth : "Width", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Height", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Left", +DlgCellHorAlignCenter : "Centre", +DlgCellHorAlignRight: "Right", +DlgCellVerAlign : "Vertical Alignment", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Background Colour", +DlgCellBorderColor : "Border Colour", +DlgCellBtnSelect : "Select...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "The specified text was not found.", + +// Replace Dialog +DlgReplaceTitle : "Replace", +DlgReplaceFindLbl : "Find what:", +DlgReplaceReplaceLbl : "Replace with:", +DlgReplaceCaseChk : "Match case", +DlgReplaceReplaceBtn : "Replace", +DlgReplaceReplAllBtn : "Replace All", +DlgReplaceWordChk : "Match whole word", + +// Paste Operations / Dialog +PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", +PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", + +PasteAsText : "Paste as Plain Text", +PasteFromWord : "Paste from Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", +DlgPasteIgnoreFont : "Ignore Font Face definitions", +DlgPasteRemoveStyles : "Remove Styles definitions", + +// Color Picker +ColorAutomatic : "Automatic", +ColorMoreColors : "More Colours...", + +// Document Properties +DocProps : "Document Properties", + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", +DlgAnchorName : "Anchor Name", +DlgAnchorErrorName : "Please type the anchor name", + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", +DlgSpellChangeTo : "Change to", +DlgSpellBtnIgnore : "Ignore", +DlgSpellBtnIgnoreAll : "Ignore All", +DlgSpellBtnReplace : "Replace", +DlgSpellBtnReplaceAll : "Replace All", +DlgSpellBtnUndo : "Undo", +DlgSpellNoSuggestions : "- No suggestions -", +DlgSpellProgress : "Spell check in progress...", +DlgSpellNoMispell : "Spell check complete: No misspellings found", +DlgSpellNoChanges : "Spell check complete: No words changed", +DlgSpellOneChange : "Spell check complete: One word changed", +DlgSpellManyChanges : "Spell check complete: %1 words changed", + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", + +// Button Dialog +DlgButtonText : "Text (Value)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Value", +DlgCheckboxSelected : "Selected", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Value", +DlgSelectSize : "Size", +DlgSelectLines : "lines", +DlgSelectChkMulti : "Allow multiple selections", +DlgSelectOpAvail : "Available Options", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Value", +DlgSelectBtnAdd : "Add", +DlgSelectBtnModify : "Modify", +DlgSelectBtnUp : "Up", +DlgSelectBtnDown : "Down", +DlgSelectBtnSetValue : "Set as selected value", +DlgSelectBtnDelete : "Delete", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Columns", +DlgTextareaRows : "Rows", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Value", +DlgTextCharWidth : "Character Width", +DlgTextMaxChars : "Maximum Characters", +DlgTextType : "Type", +DlgTextTypeText : "Text", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Value", + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", +NumberedListProp : "Numbered List Properties", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Circle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Numbers (1, 2, 3)", +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Background", +DlgDocColorsTab : "Colours and Margins", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Page Title", +DlgDocLangDir : "Language Direction", +DlgDocLangDirLTR : "Left to Right (LTR)", +DlgDocLangDirRTL : "Right to Left (RTL)", +DlgDocLangCode : "Language Code", +DlgDocCharSet : "Character Set Encoding", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Other Character Set Encoding", + +DlgDocDocType : "Document Type Heading", +DlgDocDocTypeOther : "Other Document Type Heading", +DlgDocIncXHTML : "Include XHTML Declarations", +DlgDocBgColor : "Background Colour", +DlgDocBgImage : "Background Image URL", +DlgDocBgNoScroll : "Nonscrolling Background", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Visited Link", +DlgDocCActive : "Active Link", +DlgDocMargins : "Page Margins", +DlgDocMaTop : "Top", +DlgDocMaLeft : "Left", +DlgDocMaRight : "Right", +DlgDocMaBottom : "Bottom", +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", +DlgDocMeDescr : "Document Description", +DlgDocMeAuthor : "Author", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Preview", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Content Templates", +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", +DlgTemplatesLoading : "Loading templates list. Please wait...", +DlgTemplatesNoTpl : "(No templates defined)", +DlgTemplatesReplace : "Replace actual contents", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "Browser Info", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "For further information go to" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-ca.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-ca.js new file mode 100644 index 0000000..f190ea6 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-ca.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * English (Canadian) language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Collapse Toolbar", +ToolbarExpand : "Expand Toolbar", + +// Toolbar Items and Context Menu +Save : "Save", +NewPage : "New Page", +Preview : "Preview", +Cut : "Cut", +Copy : "Copy", +Paste : "Paste", +PasteText : "Paste as plain text", +PasteWord : "Paste from Word", +Print : "Print", +SelectAll : "Select All", +RemoveFormat : "Remove Format", +InsertLinkLbl : "Link", +InsertLink : "Insert/Edit Link", +RemoveLink : "Remove Link", +Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", +InsertImageLbl : "Image", +InsertImage : "Insert/Edit Image", +InsertFlashLbl : "Flash", +InsertFlash : "Insert/Edit Flash", +InsertTableLbl : "Table", +InsertTable : "Insert/Edit Table", +InsertLineLbl : "Line", +InsertLine : "Insert Horizontal Line", +InsertSpecialCharLbl: "Special Character", +InsertSpecialChar : "Insert Special Character", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insert Smiley", +About : "About FCKeditor", +Bold : "Bold", +Italic : "Italic", +Underline : "Underline", +StrikeThrough : "Strike Through", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Left Justify", +CenterJustify : "Centre Justify", +RightJustify : "Right Justify", +BlockJustify : "Block Justify", +DecreaseIndent : "Decrease Indent", +IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", +Undo : "Undo", +Redo : "Redo", +NumberedListLbl : "Numbered List", +NumberedList : "Insert/Remove Numbered List", +BulletedListLbl : "Bulleted List", +BulletedList : "Insert/Remove Bulleted List", +ShowTableBorders : "Show Table Borders", +ShowDetails : "Show Details", +Style : "Style", +FontFormat : "Format", +Font : "Font", +FontSize : "Size", +TextColor : "Text Colour", +BGColor : "Background Colour", +Source : "Source", +Find : "Find", +Replace : "Replace", +SpellCheck : "Check Spelling", +UniversalKeyboard : "Universal Keyboard", +PageBreakLbl : "Page Break", +PageBreak : "Insert Page Break", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", + +// Context Menu +EditLink : "Edit Link", +CellCM : "Cell", +RowCM : "Row", +ColumnCM : "Column", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", +DeleteRows : "Delete Rows", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", +DeleteColumns : "Delete Columns", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", +DeleteCells : "Delete Cells", +MergeCells : "Merge Cells", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", +TableDelete : "Delete Table", +CellProperties : "Cell Properties", +TableProperties : "Table Properties", +ImageProperties : "Image Properties", +FlashProperties : "Flash Properties", + +AnchorProp : "Anchor Properties", +ButtonProp : "Button Properties", +CheckboxProp : "Checkbox Properties", +HiddenFieldProp : "Hidden Field Properties", +RadioButtonProp : "Radio Button Properties", +ImageButtonProp : "Image Button Properties", +TextFieldProp : "Text Field Properties", +SelectionFieldProp : "Selection Field Properties", +TextareaProp : "Textarea Properties", +FormProp : "Form Properties", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processing XHTML. Please wait...", +Done : "Done", +PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", +NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", +UnknownToolbarItem : "Unknown toolbar item \"%1\"", +UnknownCommand : "Unknown command name \"%1\"", +NotImplemented : "Command not implemented", +UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancel", +DlgBtnClose : "Close", +DlgBtnBrowseServer : "Browse Server", +DlgAdvancedTag : "Advanced", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Please insert the URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Language Direction", +DlgGenLangDirLtr : "Left to Right (LTR)", +DlgGenLangDirRtl : "Right to Left (RTL)", +DlgGenLangCode : "Language Code", +DlgGenAccessKey : "Access Key", +DlgGenName : "Name", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Long Description URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Image Properties", +DlgImgInfoTab : "Image Info", +DlgImgBtnUpload : "Send it to the Server", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternative Text", +DlgImgWidth : "Width", +DlgImgHeight : "Height", +DlgImgLockRatio : "Lock Ratio", +DlgBtnResetSize : "Reset Size", +DlgImgBorder : "Border", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Align", +DlgImgAlignLeft : "Left", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Right", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Preview", +DlgImgAlertUrl : "Please type the image URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash Properties", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Loop", +DlgFlashChkMenu : "Enable Flash Menu", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Show all", +DlgFlashScaleNoBorder : "No Border", +DlgFlashScaleFit : "Exact Fit", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Target", + +DlgLnkType : "Link Type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Link to anchor in the text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Select an Anchor", +DlgLnkAnchorByName : "By Anchor Name", +DlgLnkAnchorById : "By Element Id", +DlgLnkNoAnchors : "(No anchors available in the document)", +DlgLnkEMail : "E-Mail Address", +DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailBody : "Message Body", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Send it to the Server", + +DlgLnkTarget : "Target", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "New Window (_blank)", +DlgLnkTargetParent : "Parent Window (_parent)", +DlgLnkTargetSelf : "Same Window (_self)", +DlgLnkTargetTop : "Topmost Window (_top)", +DlgLnkTargetFrameName : "Target Frame Name", +DlgLnkPopWinName : "Popup Window Name", +DlgLnkPopWinFeat : "Popup Window Features", +DlgLnkPopResize : "Resizable", +DlgLnkPopLocation : "Location Bar", +DlgLnkPopMenu : "Menu Bar", +DlgLnkPopScroll : "Scroll Bars", +DlgLnkPopStatus : "Status Bar", +DlgLnkPopToolbar : "Toolbar", +DlgLnkPopFullScrn : "Full Screen (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Width", +DlgLnkPopHeight : "Height", +DlgLnkPopLeft : "Left Position", +DlgLnkPopTop : "Top Position", + +DlnLnkMsgNoUrl : "Please type the link URL", +DlnLnkMsgNoEMail : "Please type the e-mail address", +DlnLnkMsgNoAnchor : "Please select an anchor", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", + +// Color Dialog +DlgColorTitle : "Select Colour", +DlgColorBtnClear : "Clear", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Selected", + +// Smiley Dialog +DlgSmileyTitle : "Insert a Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Select Special Character", + +// Table Dialog +DlgTableTitle : "Table Properties", +DlgTableRows : "Rows", +DlgTableColumns : "Columns", +DlgTableBorder : "Border size", +DlgTableAlign : "Alignment", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Left", +DlgTableAlignCenter : "Centre", +DlgTableAlignRight : "Right", +DlgTableWidth : "Width", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Height", +DlgTableCellSpace : "Cell spacing", +DlgTableCellPad : "Cell padding", +DlgTableCaption : "Caption", +DlgTableSummary : "Summary", + +// Table Cell Dialog +DlgCellTitle : "Cell Properties", +DlgCellWidth : "Width", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Height", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Left", +DlgCellHorAlignCenter : "Centre", +DlgCellHorAlignRight: "Right", +DlgCellVerAlign : "Vertical Alignment", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Background Colour", +DlgCellBorderColor : "Border Colour", +DlgCellBtnSelect : "Select...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "The specified text was not found.", + +// Replace Dialog +DlgReplaceTitle : "Replace", +DlgReplaceFindLbl : "Find what:", +DlgReplaceReplaceLbl : "Replace with:", +DlgReplaceCaseChk : "Match case", +DlgReplaceReplaceBtn : "Replace", +DlgReplaceReplAllBtn : "Replace All", +DlgReplaceWordChk : "Match whole word", + +// Paste Operations / Dialog +PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", +PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", + +PasteAsText : "Paste as Plain Text", +PasteFromWord : "Paste from Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", +DlgPasteIgnoreFont : "Ignore Font Face definitions", +DlgPasteRemoveStyles : "Remove Styles definitions", + +// Color Picker +ColorAutomatic : "Automatic", +ColorMoreColors : "More Colours...", + +// Document Properties +DocProps : "Document Properties", + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", +DlgAnchorName : "Anchor Name", +DlgAnchorErrorName : "Please type the anchor name", + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", +DlgSpellChangeTo : "Change to", +DlgSpellBtnIgnore : "Ignore", +DlgSpellBtnIgnoreAll : "Ignore All", +DlgSpellBtnReplace : "Replace", +DlgSpellBtnReplaceAll : "Replace All", +DlgSpellBtnUndo : "Undo", +DlgSpellNoSuggestions : "- No suggestions -", +DlgSpellProgress : "Spell check in progress...", +DlgSpellNoMispell : "Spell check complete: No misspellings found", +DlgSpellNoChanges : "Spell check complete: No words changed", +DlgSpellOneChange : "Spell check complete: One word changed", +DlgSpellManyChanges : "Spell check complete: %1 words changed", + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", + +// Button Dialog +DlgButtonText : "Text (Value)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Value", +DlgCheckboxSelected : "Selected", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Value", +DlgSelectSize : "Size", +DlgSelectLines : "lines", +DlgSelectChkMulti : "Allow multiple selections", +DlgSelectOpAvail : "Available Options", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Value", +DlgSelectBtnAdd : "Add", +DlgSelectBtnModify : "Modify", +DlgSelectBtnUp : "Up", +DlgSelectBtnDown : "Down", +DlgSelectBtnSetValue : "Set as selected value", +DlgSelectBtnDelete : "Delete", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Columns", +DlgTextareaRows : "Rows", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Value", +DlgTextCharWidth : "Character Width", +DlgTextMaxChars : "Maximum Characters", +DlgTextType : "Type", +DlgTextTypeText : "Text", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Value", + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", +NumberedListProp : "Numbered List Properties", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Circle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Numbers (1, 2, 3)", +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Background", +DlgDocColorsTab : "Colours and Margins", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Page Title", +DlgDocLangDir : "Language Direction", +DlgDocLangDirLTR : "Left to Right (LTR)", +DlgDocLangDirRTL : "Right to Left (RTL)", +DlgDocLangCode : "Language Code", +DlgDocCharSet : "Character Set Encoding", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Other Character Set Encoding", + +DlgDocDocType : "Document Type Heading", +DlgDocDocTypeOther : "Other Document Type Heading", +DlgDocIncXHTML : "Include XHTML Declarations", +DlgDocBgColor : "Background Colour", +DlgDocBgImage : "Background Image URL", +DlgDocBgNoScroll : "Nonscrolling Background", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Visited Link", +DlgDocCActive : "Active Link", +DlgDocMargins : "Page Margins", +DlgDocMaTop : "Top", +DlgDocMaLeft : "Left", +DlgDocMaRight : "Right", +DlgDocMaBottom : "Bottom", +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", +DlgDocMeDescr : "Document Description", +DlgDocMeAuthor : "Author", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Preview", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Content Templates", +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", +DlgTemplatesLoading : "Loading templates list. Please wait...", +DlgTemplatesNoTpl : "(No templates defined)", +DlgTemplatesReplace : "Replace actual contents", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "Browser Info", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "For further information go to" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-uk.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-uk.js new file mode 100644 index 0000000..d84f499 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en-uk.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * English (United Kingdom) language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Collapse Toolbar", +ToolbarExpand : "Expand Toolbar", + +// Toolbar Items and Context Menu +Save : "Save", +NewPage : "New Page", +Preview : "Preview", +Cut : "Cut", +Copy : "Copy", +Paste : "Paste", +PasteText : "Paste as plain text", +PasteWord : "Paste from Word", +Print : "Print", +SelectAll : "Select All", +RemoveFormat : "Remove Format", +InsertLinkLbl : "Link", +InsertLink : "Insert/Edit Link", +RemoveLink : "Remove Link", +Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", +InsertImageLbl : "Image", +InsertImage : "Insert/Edit Image", +InsertFlashLbl : "Flash", +InsertFlash : "Insert/Edit Flash", +InsertTableLbl : "Table", +InsertTable : "Insert/Edit Table", +InsertLineLbl : "Line", +InsertLine : "Insert Horizontal Line", +InsertSpecialCharLbl: "Special Character", +InsertSpecialChar : "Insert Special Character", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insert Smiley", +About : "About FCKeditor", +Bold : "Bold", +Italic : "Italic", +Underline : "Underline", +StrikeThrough : "Strike Through", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Left Justify", +CenterJustify : "Centre Justify", +RightJustify : "Right Justify", +BlockJustify : "Block Justify", +DecreaseIndent : "Decrease Indent", +IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", +Undo : "Undo", +Redo : "Redo", +NumberedListLbl : "Numbered List", +NumberedList : "Insert/Remove Numbered List", +BulletedListLbl : "Bulleted List", +BulletedList : "Insert/Remove Bulleted List", +ShowTableBorders : "Show Table Borders", +ShowDetails : "Show Details", +Style : "Style", +FontFormat : "Format", +Font : "Font", +FontSize : "Size", +TextColor : "Text Colour", +BGColor : "Background Colour", +Source : "Source", +Find : "Find", +Replace : "Replace", +SpellCheck : "Check Spelling", +UniversalKeyboard : "Universal Keyboard", +PageBreakLbl : "Page Break", +PageBreak : "Insert Page Break", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", + +// Context Menu +EditLink : "Edit Link", +CellCM : "Cell", +RowCM : "Row", +ColumnCM : "Column", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", +DeleteRows : "Delete Rows", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", +DeleteColumns : "Delete Columns", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", +DeleteCells : "Delete Cells", +MergeCells : "Merge Cells", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", +TableDelete : "Delete Table", +CellProperties : "Cell Properties", +TableProperties : "Table Properties", +ImageProperties : "Image Properties", +FlashProperties : "Flash Properties", + +AnchorProp : "Anchor Properties", +ButtonProp : "Button Properties", +CheckboxProp : "Checkbox Properties", +HiddenFieldProp : "Hidden Field Properties", +RadioButtonProp : "Radio Button Properties", +ImageButtonProp : "Image Button Properties", +TextFieldProp : "Text Field Properties", +SelectionFieldProp : "Selection Field Properties", +TextareaProp : "Textarea Properties", +FormProp : "Form Properties", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processing XHTML. Please wait...", +Done : "Done", +PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", +NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", +UnknownToolbarItem : "Unknown toolbar item \"%1\"", +UnknownCommand : "Unknown command name \"%1\"", +NotImplemented : "Command not implemented", +UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancel", +DlgBtnClose : "Close", +DlgBtnBrowseServer : "Browse Server", +DlgAdvancedTag : "Advanced", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Please insert the URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Language Direction", +DlgGenLangDirLtr : "Left to Right (LTR)", +DlgGenLangDirRtl : "Right to Left (RTL)", +DlgGenLangCode : "Language Code", +DlgGenAccessKey : "Access Key", +DlgGenName : "Name", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Long Description URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Image Properties", +DlgImgInfoTab : "Image Info", +DlgImgBtnUpload : "Send it to the Server", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternative Text", +DlgImgWidth : "Width", +DlgImgHeight : "Height", +DlgImgLockRatio : "Lock Ratio", +DlgBtnResetSize : "Reset Size", +DlgImgBorder : "Border", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Align", +DlgImgAlignLeft : "Left", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Right", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Preview", +DlgImgAlertUrl : "Please type the image URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash Properties", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Loop", +DlgFlashChkMenu : "Enable Flash Menu", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Show all", +DlgFlashScaleNoBorder : "No Border", +DlgFlashScaleFit : "Exact Fit", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Target", + +DlgLnkType : "Link Type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Link to anchor in the text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Select an Anchor", +DlgLnkAnchorByName : "By Anchor Name", +DlgLnkAnchorById : "By Element Id", +DlgLnkNoAnchors : "(No anchors available in the document)", +DlgLnkEMail : "E-Mail Address", +DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailBody : "Message Body", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Send it to the Server", + +DlgLnkTarget : "Target", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "New Window (_blank)", +DlgLnkTargetParent : "Parent Window (_parent)", +DlgLnkTargetSelf : "Same Window (_self)", +DlgLnkTargetTop : "Topmost Window (_top)", +DlgLnkTargetFrameName : "Target Frame Name", +DlgLnkPopWinName : "Popup Window Name", +DlgLnkPopWinFeat : "Popup Window Features", +DlgLnkPopResize : "Resizable", +DlgLnkPopLocation : "Location Bar", +DlgLnkPopMenu : "Menu Bar", +DlgLnkPopScroll : "Scroll Bars", +DlgLnkPopStatus : "Status Bar", +DlgLnkPopToolbar : "Toolbar", +DlgLnkPopFullScrn : "Full Screen (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Width", +DlgLnkPopHeight : "Height", +DlgLnkPopLeft : "Left Position", +DlgLnkPopTop : "Top Position", + +DlnLnkMsgNoUrl : "Please type the link URL", +DlnLnkMsgNoEMail : "Please type the e-mail address", +DlnLnkMsgNoAnchor : "Please select an anchor", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", + +// Color Dialog +DlgColorTitle : "Select Colour", +DlgColorBtnClear : "Clear", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Selected", + +// Smiley Dialog +DlgSmileyTitle : "Insert a Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Select Special Character", + +// Table Dialog +DlgTableTitle : "Table Properties", +DlgTableRows : "Rows", +DlgTableColumns : "Columns", +DlgTableBorder : "Border size", +DlgTableAlign : "Alignment", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Left", +DlgTableAlignCenter : "Centre", +DlgTableAlignRight : "Right", +DlgTableWidth : "Width", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Height", +DlgTableCellSpace : "Cell spacing", +DlgTableCellPad : "Cell padding", +DlgTableCaption : "Caption", +DlgTableSummary : "Summary", + +// Table Cell Dialog +DlgCellTitle : "Cell Properties", +DlgCellWidth : "Width", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Height", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Left", +DlgCellHorAlignCenter : "Centre", +DlgCellHorAlignRight: "Right", +DlgCellVerAlign : "Vertical Alignment", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Background Colour", +DlgCellBorderColor : "Border Colour", +DlgCellBtnSelect : "Select...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "The specified text was not found.", + +// Replace Dialog +DlgReplaceTitle : "Replace", +DlgReplaceFindLbl : "Find what:", +DlgReplaceReplaceLbl : "Replace with:", +DlgReplaceCaseChk : "Match case", +DlgReplaceReplaceBtn : "Replace", +DlgReplaceReplAllBtn : "Replace All", +DlgReplaceWordChk : "Match whole word", + +// Paste Operations / Dialog +PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", +PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", + +PasteAsText : "Paste as Plain Text", +PasteFromWord : "Paste from Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", +DlgPasteIgnoreFont : "Ignore Font Face definitions", +DlgPasteRemoveStyles : "Remove Styles definitions", + +// Color Picker +ColorAutomatic : "Automatic", +ColorMoreColors : "More Colours...", + +// Document Properties +DocProps : "Document Properties", + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", +DlgAnchorName : "Anchor Name", +DlgAnchorErrorName : "Please type the anchor name", + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", +DlgSpellChangeTo : "Change to", +DlgSpellBtnIgnore : "Ignore", +DlgSpellBtnIgnoreAll : "Ignore All", +DlgSpellBtnReplace : "Replace", +DlgSpellBtnReplaceAll : "Replace All", +DlgSpellBtnUndo : "Undo", +DlgSpellNoSuggestions : "- No suggestions -", +DlgSpellProgress : "Spell check in progress...", +DlgSpellNoMispell : "Spell check complete: No misspellings found", +DlgSpellNoChanges : "Spell check complete: No words changed", +DlgSpellOneChange : "Spell check complete: One word changed", +DlgSpellManyChanges : "Spell check complete: %1 words changed", + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", + +// Button Dialog +DlgButtonText : "Text (Value)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Value", +DlgCheckboxSelected : "Selected", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Value", +DlgSelectSize : "Size", +DlgSelectLines : "lines", +DlgSelectChkMulti : "Allow multiple selections", +DlgSelectOpAvail : "Available Options", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Value", +DlgSelectBtnAdd : "Add", +DlgSelectBtnModify : "Modify", +DlgSelectBtnUp : "Up", +DlgSelectBtnDown : "Down", +DlgSelectBtnSetValue : "Set as selected value", +DlgSelectBtnDelete : "Delete", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Columns", +DlgTextareaRows : "Rows", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Value", +DlgTextCharWidth : "Character Width", +DlgTextMaxChars : "Maximum Characters", +DlgTextType : "Type", +DlgTextTypeText : "Text", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Value", + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", +NumberedListProp : "Numbered List Properties", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Circle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Numbers (1, 2, 3)", +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Background", +DlgDocColorsTab : "Colours and Margins", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Page Title", +DlgDocLangDir : "Language Direction", +DlgDocLangDirLTR : "Left to Right (LTR)", +DlgDocLangDirRTL : "Right to Left (RTL)", +DlgDocLangCode : "Language Code", +DlgDocCharSet : "Character Set Encoding", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Other Character Set Encoding", + +DlgDocDocType : "Document Type Heading", +DlgDocDocTypeOther : "Other Document Type Heading", +DlgDocIncXHTML : "Include XHTML Declarations", +DlgDocBgColor : "Background Colour", +DlgDocBgImage : "Background Image URL", +DlgDocBgNoScroll : "Nonscrolling Background", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Visited Link", +DlgDocCActive : "Active Link", +DlgDocMargins : "Page Margins", +DlgDocMaTop : "Top", +DlgDocMaLeft : "Left", +DlgDocMaRight : "Right", +DlgDocMaBottom : "Bottom", +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", +DlgDocMeDescr : "Document Description", +DlgDocMeAuthor : "Author", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Preview", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Content Templates", +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", +DlgTemplatesLoading : "Loading templates list. Please wait...", +DlgTemplatesNoTpl : "(No templates defined)", +DlgTemplatesReplace : "Replace actual contents", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "Browser Info", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "For further information go to" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/en.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en.js new file mode 100644 index 0000000..4e252f5 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/en.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * English language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Collapse Toolbar", +ToolbarExpand : "Expand Toolbar", + +// Toolbar Items and Context Menu +Save : "Save", +NewPage : "New Page", +Preview : "Preview", +Cut : "Cut", +Copy : "Copy", +Paste : "Paste", +PasteText : "Paste as plain text", +PasteWord : "Paste from Word", +Print : "Print", +SelectAll : "Select All", +RemoveFormat : "Remove Format", +InsertLinkLbl : "Link", +InsertLink : "Insert/Edit Link", +RemoveLink : "Remove Link", +Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", +InsertImageLbl : "Image", +InsertImage : "Insert/Edit Image", +InsertFlashLbl : "Flash", +InsertFlash : "Insert/Edit Flash", +InsertTableLbl : "Table", +InsertTable : "Insert/Edit Table", +InsertLineLbl : "Line", +InsertLine : "Insert Horizontal Line", +InsertSpecialCharLbl: "Special Character", +InsertSpecialChar : "Insert Special Character", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insert Smiley", +About : "About FCKeditor", +Bold : "Bold", +Italic : "Italic", +Underline : "Underline", +StrikeThrough : "Strike Through", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Left Justify", +CenterJustify : "Center Justify", +RightJustify : "Right Justify", +BlockJustify : "Block Justify", +DecreaseIndent : "Decrease Indent", +IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", +Undo : "Undo", +Redo : "Redo", +NumberedListLbl : "Numbered List", +NumberedList : "Insert/Remove Numbered List", +BulletedListLbl : "Bulleted List", +BulletedList : "Insert/Remove Bulleted List", +ShowTableBorders : "Show Table Borders", +ShowDetails : "Show Details", +Style : "Style", +FontFormat : "Format", +Font : "Font", +FontSize : "Size", +TextColor : "Text Color", +BGColor : "Background Color", +Source : "Source", +Find : "Find", +Replace : "Replace", +SpellCheck : "Check Spelling", +UniversalKeyboard : "Universal Keyboard", +PageBreakLbl : "Page Break", +PageBreak : "Insert Page Break", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", + +// Context Menu +EditLink : "Edit Link", +CellCM : "Cell", +RowCM : "Row", +ColumnCM : "Column", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", +DeleteRows : "Delete Rows", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", +DeleteColumns : "Delete Columns", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", +DeleteCells : "Delete Cells", +MergeCells : "Merge Cells", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", +TableDelete : "Delete Table", +CellProperties : "Cell Properties", +TableProperties : "Table Properties", +ImageProperties : "Image Properties", +FlashProperties : "Flash Properties", + +AnchorProp : "Anchor Properties", +ButtonProp : "Button Properties", +CheckboxProp : "Checkbox Properties", +HiddenFieldProp : "Hidden Field Properties", +RadioButtonProp : "Radio Button Properties", +ImageButtonProp : "Image Button Properties", +TextFieldProp : "Text Field Properties", +SelectionFieldProp : "Selection Field Properties", +TextareaProp : "Textarea Properties", +FormProp : "Form Properties", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processing XHTML. Please wait...", +Done : "Done", +PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", +NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", +UnknownToolbarItem : "Unknown toolbar item \"%1\"", +UnknownCommand : "Unknown command name \"%1\"", +NotImplemented : "Command not implemented", +UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancel", +DlgBtnClose : "Close", +DlgBtnBrowseServer : "Browse Server", +DlgAdvancedTag : "Advanced", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Please insert the URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Language Direction", +DlgGenLangDirLtr : "Left to Right (LTR)", +DlgGenLangDirRtl : "Right to Left (RTL)", +DlgGenLangCode : "Language Code", +DlgGenAccessKey : "Access Key", +DlgGenName : "Name", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Long Description URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Image Properties", +DlgImgInfoTab : "Image Info", +DlgImgBtnUpload : "Send it to the Server", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternative Text", +DlgImgWidth : "Width", +DlgImgHeight : "Height", +DlgImgLockRatio : "Lock Ratio", +DlgBtnResetSize : "Reset Size", +DlgImgBorder : "Border", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Align", +DlgImgAlignLeft : "Left", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Right", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Preview", +DlgImgAlertUrl : "Please type the image URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash Properties", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Loop", +DlgFlashChkMenu : "Enable Flash Menu", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Show all", +DlgFlashScaleNoBorder : "No Border", +DlgFlashScaleFit : "Exact Fit", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Target", + +DlgLnkType : "Link Type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Link to anchor in the text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Select an Anchor", +DlgLnkAnchorByName : "By Anchor Name", +DlgLnkAnchorById : "By Element Id", +DlgLnkNoAnchors : "(No anchors available in the document)", +DlgLnkEMail : "E-Mail Address", +DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailBody : "Message Body", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Send it to the Server", + +DlgLnkTarget : "Target", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "New Window (_blank)", +DlgLnkTargetParent : "Parent Window (_parent)", +DlgLnkTargetSelf : "Same Window (_self)", +DlgLnkTargetTop : "Topmost Window (_top)", +DlgLnkTargetFrameName : "Target Frame Name", +DlgLnkPopWinName : "Popup Window Name", +DlgLnkPopWinFeat : "Popup Window Features", +DlgLnkPopResize : "Resizable", +DlgLnkPopLocation : "Location Bar", +DlgLnkPopMenu : "Menu Bar", +DlgLnkPopScroll : "Scroll Bars", +DlgLnkPopStatus : "Status Bar", +DlgLnkPopToolbar : "Toolbar", +DlgLnkPopFullScrn : "Full Screen (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Width", +DlgLnkPopHeight : "Height", +DlgLnkPopLeft : "Left Position", +DlgLnkPopTop : "Top Position", + +DlnLnkMsgNoUrl : "Please type the link URL", +DlnLnkMsgNoEMail : "Please type the e-mail address", +DlnLnkMsgNoAnchor : "Please select an anchor", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", + +// Color Dialog +DlgColorTitle : "Select Color", +DlgColorBtnClear : "Clear", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Selected", + +// Smiley Dialog +DlgSmileyTitle : "Insert a Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Select Special Character", + +// Table Dialog +DlgTableTitle : "Table Properties", +DlgTableRows : "Rows", +DlgTableColumns : "Columns", +DlgTableBorder : "Border size", +DlgTableAlign : "Alignment", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Left", +DlgTableAlignCenter : "Center", +DlgTableAlignRight : "Right", +DlgTableWidth : "Width", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Height", +DlgTableCellSpace : "Cell spacing", +DlgTableCellPad : "Cell padding", +DlgTableCaption : "Caption", +DlgTableSummary : "Summary", + +// Table Cell Dialog +DlgCellTitle : "Cell Properties", +DlgCellWidth : "Width", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Height", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Left", +DlgCellHorAlignCenter : "Center", +DlgCellHorAlignRight: "Right", +DlgCellVerAlign : "Vertical Alignment", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Background Color", +DlgCellBorderColor : "Border Color", +DlgCellBtnSelect : "Select...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "The specified text was not found.", + +// Replace Dialog +DlgReplaceTitle : "Replace", +DlgReplaceFindLbl : "Find what:", +DlgReplaceReplaceLbl : "Replace with:", +DlgReplaceCaseChk : "Match case", +DlgReplaceReplaceBtn : "Replace", +DlgReplaceReplAllBtn : "Replace All", +DlgReplaceWordChk : "Match whole word", + +// Paste Operations / Dialog +PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", +PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", + +PasteAsText : "Paste as Plain Text", +PasteFromWord : "Paste from Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", +DlgPasteIgnoreFont : "Ignore Font Face definitions", +DlgPasteRemoveStyles : "Remove Styles definitions", + +// Color Picker +ColorAutomatic : "Automatic", +ColorMoreColors : "More Colors...", + +// Document Properties +DocProps : "Document Properties", + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", +DlgAnchorName : "Anchor Name", +DlgAnchorErrorName : "Please type the anchor name", + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", +DlgSpellChangeTo : "Change to", +DlgSpellBtnIgnore : "Ignore", +DlgSpellBtnIgnoreAll : "Ignore All", +DlgSpellBtnReplace : "Replace", +DlgSpellBtnReplaceAll : "Replace All", +DlgSpellBtnUndo : "Undo", +DlgSpellNoSuggestions : "- No suggestions -", +DlgSpellProgress : "Spell check in progress...", +DlgSpellNoMispell : "Spell check complete: No misspellings found", +DlgSpellNoChanges : "Spell check complete: No words changed", +DlgSpellOneChange : "Spell check complete: One word changed", +DlgSpellManyChanges : "Spell check complete: %1 words changed", + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", + +// Button Dialog +DlgButtonText : "Text (Value)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Value", +DlgCheckboxSelected : "Selected", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Value", +DlgSelectSize : "Size", +DlgSelectLines : "lines", +DlgSelectChkMulti : "Allow multiple selections", +DlgSelectOpAvail : "Available Options", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Value", +DlgSelectBtnAdd : "Add", +DlgSelectBtnModify : "Modify", +DlgSelectBtnUp : "Up", +DlgSelectBtnDown : "Down", +DlgSelectBtnSetValue : "Set as selected value", +DlgSelectBtnDelete : "Delete", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Columns", +DlgTextareaRows : "Rows", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Value", +DlgTextCharWidth : "Character Width", +DlgTextMaxChars : "Maximum Characters", +DlgTextType : "Type", +DlgTextTypeText : "Text", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Value", + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", +NumberedListProp : "Numbered List Properties", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Circle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Numbers (1, 2, 3)", +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Background", +DlgDocColorsTab : "Colors and Margins", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Page Title", +DlgDocLangDir : "Language Direction", +DlgDocLangDirLTR : "Left to Right (LTR)", +DlgDocLangDirRTL : "Right to Left (RTL)", +DlgDocLangCode : "Language Code", +DlgDocCharSet : "Character Set Encoding", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Other Character Set Encoding", + +DlgDocDocType : "Document Type Heading", +DlgDocDocTypeOther : "Other Document Type Heading", +DlgDocIncXHTML : "Include XHTML Declarations", +DlgDocBgColor : "Background Color", +DlgDocBgImage : "Background Image URL", +DlgDocBgNoScroll : "Nonscrolling Background", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Visited Link", +DlgDocCActive : "Active Link", +DlgDocMargins : "Page Margins", +DlgDocMaTop : "Top", +DlgDocMaLeft : "Left", +DlgDocMaRight : "Right", +DlgDocMaBottom : "Bottom", +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", +DlgDocMeDescr : "Document Description", +DlgDocMeAuthor : "Author", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Preview", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Content Templates", +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", +DlgTemplatesLoading : "Loading templates list. Please wait...", +DlgTemplatesNoTpl : "(No templates defined)", +DlgTemplatesReplace : "Replace actual contents", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "Browser Info", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "For further information go to" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/eo.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/eo.js new file mode 100644 index 0000000..d74fb46 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/eo.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Esperanto language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Kaŝi Ilobreton", +ToolbarExpand : "Vidigi Ilojn", + +// Toolbar Items and Context Menu +Save : "Sekurigi", +NewPage : "Nova Paĝo", +Preview : "Vidigi Aspekton", +Cut : "Eltondi", +Copy : "Kopii", +Paste : "Interglui", +PasteText : "Interglui kiel Tekston", +PasteWord : "Interglui el Word", +Print : "Presi", +SelectAll : "Elekti ĉion", +RemoveFormat : "Forigi Formaton", +InsertLinkLbl : "Ligilo", +InsertLink : "Enmeti/Ŝanĝi Ligilon", +RemoveLink : "Forigi Ligilon", +Anchor : "Enmeti/Ŝanĝi Ankron", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Bildo", +InsertImage : "Enmeti/Ŝanĝi Bildon", +InsertFlashLbl : "Flash", //MISSING +InsertFlash : "Insert/Edit Flash", //MISSING +InsertTableLbl : "Tabelo", +InsertTable : "Enmeti/Ŝanĝi Tabelon", +InsertLineLbl : "Horizonta Linio", +InsertLine : "Enmeti Horizonta Linio", +InsertSpecialCharLbl: "Speciala Signo", +InsertSpecialChar : "Enmeti Specialan Signon", +InsertSmileyLbl : "Mienvinjeto", +InsertSmiley : "Enmeti Mienvinjeton", +About : "Pri FCKeditor", +Bold : "Grasa", +Italic : "Kursiva", +Underline : "Substreko", +StrikeThrough : "Trastreko", +Subscript : "Subskribo", +Superscript : "Superskribo", +LeftJustify : "Maldekstrigi", +CenterJustify : "Centrigi", +RightJustify : "Dekstrigi", +BlockJustify : "Ĝisrandigi Ambaŭflanke", +DecreaseIndent : "Malpligrandigi Krommarĝenon", +IncreaseIndent : "Pligrandigi Krommarĝenon", +Blockquote : "Blockquote", //MISSING +Undo : "Malfari", +Redo : "Refari", +NumberedListLbl : "Numera Listo", +NumberedList : "Enmeti/Forigi Numeran Liston", +BulletedListLbl : "Bula Listo", +BulletedList : "Enmeti/Forigi Bulan Liston", +ShowTableBorders : "Vidigi Borderojn de Tabelo", +ShowDetails : "Vidigi Detalojn", +Style : "Stilo", +FontFormat : "Formato", +Font : "Tiparo", +FontSize : "Grando", +TextColor : "Teksta Koloro", +BGColor : "Fona Koloro", +Source : "Fonto", +Find : "Serĉi", +Replace : "Anstataŭigi", +SpellCheck : "Literumada Kontrolilo", +UniversalKeyboard : "Universala Klavaro", +PageBreakLbl : "Page Break", //MISSING +PageBreak : "Insert Page Break", //MISSING + +Form : "Formularo", +Checkbox : "Markobutono", +RadioButton : "Radiobutono", +TextField : "Teksta kampo", +Textarea : "Teksta Areo", +HiddenField : "Kaŝita Kampo", +Button : "Butono", +SelectionField : "Elekta Kampo", +ImageButton : "Bildbutono", + +FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Modifier Ligilon", +CellCM : "Cell", //MISSING +RowCM : "Row", //MISSING +ColumnCM : "Column", //MISSING +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Forigi Liniojn", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Forigi Kolumnojn", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Forigi Ĉelojn", +MergeCells : "Kunfandi Ĉelojn", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Delete Table", //MISSING +CellProperties : "Atributoj de Ĉelo", +TableProperties : "Atributoj de Tabelo", +ImageProperties : "Atributoj de Bildo", +FlashProperties : "Flash Properties", //MISSING + +AnchorProp : "Ankraj Atributoj", +ButtonProp : "Butonaj Atributoj", +CheckboxProp : "Markobutonaj Atributoj", +HiddenFieldProp : "Atributoj de Kaŝita Kampo", +RadioButtonProp : "Radiobutonaj Atributoj", +ImageButtonProp : "Bildbutonaj Atributoj", +TextFieldProp : "Atributoj de Teksta Kampo", +SelectionFieldProp : "Atributoj de Elekta Kampo", +TextareaProp : "Atributoj de Teksta Areo", +FormProp : "Formularaj Atributoj", + +FontFormats : "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Traktado de XHTML. Bonvolu pacienci...", +Done : "Finita", +PasteWordConfirm : "La algluota teksto ŝajnas esti Word-devena. Ĉu vi volas purigi ĝin antaŭ ol interglui?", +NotCompatiblePaste : "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?", +UnknownToolbarItem : "Ilobretero nekonata \"%1\"", +UnknownCommand : "Komandonomo nekonata \"%1\"", +NotImplemented : "Komando ne ankoraŭ realigita", +UnknownToolbarSet : "La ilobreto \"%1\" ne ekzistas", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING + +// Dialogs +DlgBtnOK : "Akcepti", +DlgBtnCancel : "Rezigni", +DlgBtnClose : "Fermi", +DlgBtnBrowseServer : "Foliumi en la Servilo", +DlgAdvancedTag : "Speciala", +DlgOpOther : "", +DlgInfoTab : "Info", //MISSING +DlgAlertUrl : "Please insert the URL", //MISSING + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Skribdirekto", +DlgGenLangDirLtr : "De maldekstro dekstren (LTR)", +DlgGenLangDirRtl : "De dekstro maldekstren (RTL)", +DlgGenLangCode : "Lingva Kodo", +DlgGenAccessKey : "Fulmoklavo", +DlgGenName : "Nomo", +DlgGenTabIndex : "Taba Ordo", +DlgGenLongDescr : "URL de Longa Priskribo", +DlgGenClass : "Klasoj de Stilfolioj", +DlgGenTitle : "Indika Titolo", +DlgGenContType : "Indika Enhavotipo", +DlgGenLinkCharset : "Signaro de la Ligita Rimedo", +DlgGenStyle : "Stilo", + +// Image Dialog +DlgImgTitle : "Atributoj de Bildo", +DlgImgInfoTab : "Informoj pri Bildo", +DlgImgBtnUpload : "Sendu al Servilo", +DlgImgURL : "URL", +DlgImgUpload : "Alŝuti", +DlgImgAlt : "Anstataŭiga Teksto", +DlgImgWidth : "Larĝo", +DlgImgHeight : "Alto", +DlgImgLockRatio : "Konservi Proporcion", +DlgBtnResetSize : "Origina Grando", +DlgImgBorder : "Bordero", +DlgImgHSpace : "HSpaco", +DlgImgVSpace : "VSpaco", +DlgImgAlign : "Ĝisrandigo", +DlgImgAlignLeft : "Maldekstre", +DlgImgAlignAbsBottom: "Abs Malsupre", +DlgImgAlignAbsMiddle: "Abs Centre", +DlgImgAlignBaseline : "Je Malsupro de Teksto", +DlgImgAlignBottom : "Malsupre", +DlgImgAlignMiddle : "Centre", +DlgImgAlignRight : "Dekstre", +DlgImgAlignTextTop : "Je Supro de Teksto", +DlgImgAlignTop : "Supre", +DlgImgPreview : "Vidigi Aspekton", +DlgImgAlertUrl : "Bonvolu tajpi la URL de la bildo", +DlgImgLinkTab : "Link", //MISSING + +// Flash Dialog +DlgFlashTitle : "Flash Properties", //MISSING +DlgFlashChkPlay : "Auto Play", //MISSING +DlgFlashChkLoop : "Loop", //MISSING +DlgFlashChkMenu : "Enable Flash Menu", //MISSING +DlgFlashScale : "Scale", //MISSING +DlgFlashScaleAll : "Show all", //MISSING +DlgFlashScaleNoBorder : "No Border", //MISSING +DlgFlashScaleFit : "Exact Fit", //MISSING + +// Link Dialog +DlgLnkWindowTitle : "Ligilo", +DlgLnkInfoTab : "Informoj pri la Ligilo", +DlgLnkTargetTab : "Celo", + +DlgLnkType : "Tipo de Ligilo", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ankri en tiu ĉi paĝo", +DlgLnkTypeEMail : "Retpoŝto", +DlgLnkProto : "Protokolo", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Elekti Ankron", +DlgLnkAnchorByName : "Per Ankronomo", +DlgLnkAnchorById : "Per Elementidentigilo", +DlgLnkNoAnchors : "", +DlgLnkEMail : "Retadreso", +DlgLnkEMailSubject : "Temlinio", +DlgLnkEMailBody : "Mesaĝa korpo", +DlgLnkUpload : "Alŝuti", +DlgLnkBtnUpload : "Sendi al Servilo", + +DlgLnkTarget : "Celo", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "<ŝprucfenestro>", +DlgLnkTargetBlank : "Nova Fenestro (_blank)", +DlgLnkTargetParent : "Gepatra Fenestro (_parent)", +DlgLnkTargetSelf : "Sama Fenestro (_self)", +DlgLnkTargetTop : "Plej Supra Fenestro (_top)", +DlgLnkTargetFrameName : "Nomo de Kadro", +DlgLnkPopWinName : "Nomo de Ŝprucfenestro", +DlgLnkPopWinFeat : "Atributoj de la Ŝprucfenestro", +DlgLnkPopResize : "Grando Ŝanĝebla", +DlgLnkPopLocation : "Adresobreto", +DlgLnkPopMenu : "Menubreto", +DlgLnkPopScroll : "Rulumlisteloj", +DlgLnkPopStatus : "Statobreto", +DlgLnkPopToolbar : "Ilobreto", +DlgLnkPopFullScrn : "Tutekrane (IE)", +DlgLnkPopDependent : "Dependa (Netscape)", +DlgLnkPopWidth : "Larĝo", +DlgLnkPopHeight : "Alto", +DlgLnkPopLeft : "Pozicio de Maldekstro", +DlgLnkPopTop : "Pozicio de Supro", + +DlnLnkMsgNoUrl : "Bonvolu entajpi la URL-on", +DlnLnkMsgNoEMail : "Bonvolu entajpi la retadreson", +DlnLnkMsgNoAnchor : "Bonvolu elekti ankron", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Elekti", +DlgColorBtnClear : "Forigi", +DlgColorHighlight : "Emfazi", +DlgColorSelected : "Elektita", + +// Smiley Dialog +DlgSmileyTitle : "Enmeti Mienvinjeton", + +// Special Character Dialog +DlgSpecialCharTitle : "Enmeti Specialan Signon", + +// Table Dialog +DlgTableTitle : "Atributoj de Tabelo", +DlgTableRows : "Linioj", +DlgTableColumns : "Kolumnoj", +DlgTableBorder : "Bordero", +DlgTableAlign : "Ĝisrandigo", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Maldekstre", +DlgTableAlignCenter : "Centre", +DlgTableAlignRight : "Dekstre", +DlgTableWidth : "Larĝo", +DlgTableWidthPx : "Bitbilderoj", +DlgTableWidthPc : "elcentoj", +DlgTableHeight : "Alto", +DlgTableCellSpace : "Interspacigo de Ĉeloj", +DlgTableCellPad : "Ĉirkaŭenhava Plenigado", +DlgTableCaption : "Titolo", +DlgTableSummary : "Summary", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Atributoj de Celo", +DlgCellWidth : "Larĝo", +DlgCellWidthPx : "bitbilderoj", +DlgCellWidthPc : "elcentoj", +DlgCellHeight : "Alto", +DlgCellWordWrap : "Linifaldo", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Jes", +DlgCellWordWrapNo : "Ne", +DlgCellHorAlign : "Horizonta Ĝisrandigo", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Maldekstre", +DlgCellHorAlignCenter : "Centre", +DlgCellHorAlignRight: "Dekstre", +DlgCellVerAlign : "Vertikala Ĝisrandigo", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Supre", +DlgCellVerAlignMiddle : "Centre", +DlgCellVerAlignBottom : "Malsupre", +DlgCellVerAlignBaseline : "Je Malsupro de Teksto", +DlgCellRowSpan : "Linioj Kunfanditaj", +DlgCellCollSpan : "Kolumnoj Kunfanditaj", +DlgCellBackColor : "Fono", +DlgCellBorderColor : "Bordero", +DlgCellBtnSelect : "Elekti...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Serĉi", +DlgFindFindBtn : "Serĉi", +DlgFindNotFoundMsg : "La celteksto ne estas trovita.", + +// Replace Dialog +DlgReplaceTitle : "Anstataŭigi", +DlgReplaceFindLbl : "Serĉi:", +DlgReplaceReplaceLbl : "Anstataŭigi per:", +DlgReplaceCaseChk : "Kongruigi Usklecon", +DlgReplaceReplaceBtn : "Anstataŭigi", +DlgReplaceReplAllBtn : "Anstataŭigi Ĉiun", +DlgReplaceWordChk : "Tuta Vorto", + +// Paste Operations / Dialog +PasteErrorCut : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).", +PasteErrorCopy : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).", + +PasteAsText : "Interglui kiel Tekston", +PasteFromWord : "Interglui el Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", //MISSING +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING +DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING + +// Color Picker +ColorAutomatic : "Aŭtomata", +ColorMoreColors : "Pli da Koloroj...", + +// Document Properties +DocProps : "Dokumentaj Atributoj", + +// Anchor Dialog +DlgAnchorTitle : "Ankraj Atributoj", +DlgAnchorName : "Ankra Nomo", +DlgAnchorErrorName : "Bv tajpi la ankran nomon", + +// Speller Pages Dialog +DlgSpellNotInDic : "Ne trovita en la vortaro", +DlgSpellChangeTo : "Ŝanĝi al", +DlgSpellBtnIgnore : "Malatenti", +DlgSpellBtnIgnoreAll : "Malatenti Ĉiun", +DlgSpellBtnReplace : "Anstataŭigi", +DlgSpellBtnReplaceAll : "Anstataŭigi Ĉiun", +DlgSpellBtnUndo : "Malfari", +DlgSpellNoSuggestions : "- Neniu propono -", +DlgSpellProgress : "Literumkontrolado daŭras...", +DlgSpellNoMispell : "Literumkontrolado finita: neniu fuŝo trovita", +DlgSpellNoChanges : "Literumkontrolado finita: neniu vorto ŝanĝita", +DlgSpellOneChange : "Literumkontrolado finita: unu vorto ŝanĝita", +DlgSpellManyChanges : "Literumkontrolado finita: %1 vortoj ŝanĝitaj", + +IeSpellDownload : "Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?", + +// Button Dialog +DlgButtonText : "Teksto (Valoro)", +DlgButtonType : "Tipo", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nomo", +DlgCheckboxValue : "Valoro", +DlgCheckboxSelected : "Elektita", + +// Form Dialog +DlgFormName : "Nomo", +DlgFormAction : "Ago", +DlgFormMethod : "Metodo", + +// Select Field Dialog +DlgSelectName : "Nomo", +DlgSelectValue : "Valoro", +DlgSelectSize : "Grando", +DlgSelectLines : "Linioj", +DlgSelectChkMulti : "Permesi Plurajn Elektojn", +DlgSelectOpAvail : "Elektoj Disponeblaj", +DlgSelectOpText : "Teksto", +DlgSelectOpValue : "Valoro", +DlgSelectBtnAdd : "Aldoni", +DlgSelectBtnModify : "Modifi", +DlgSelectBtnUp : "Supren", +DlgSelectBtnDown : "Malsupren", +DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron", +DlgSelectBtnDelete : "Forigi", + +// Textarea Dialog +DlgTextareaName : "Nomo", +DlgTextareaCols : "Kolumnoj", +DlgTextareaRows : "Vicoj", + +// Text Field Dialog +DlgTextName : "Nomo", +DlgTextValue : "Valoro", +DlgTextCharWidth : "Signolarĝo", +DlgTextMaxChars : "Maksimuma Nombro da Signoj", +DlgTextType : "Tipo", +DlgTextTypeText : "Teksto", +DlgTextTypePass : "Pasvorto", + +// Hidden Field Dialog +DlgHiddenName : "Nomo", +DlgHiddenValue : "Valoro", + +// Bulleted List Dialog +BulletedListProp : "Atributoj de Bula Listo", +NumberedListProp : "Atributoj de Numera Listo", +DlgLstStart : "Start", //MISSING +DlgLstType : "Tipo", +DlgLstTypeCircle : "Cirklo", +DlgLstTypeDisc : "Disc", //MISSING +DlgLstTypeSquare : "Kvadrato", +DlgLstTypeNumbers : "Ciferoj (1, 2, 3)", +DlgLstTypeLCase : "Minusklaj Literoj (a, b, c)", +DlgLstTypeUCase : "Majusklaj Literoj (A, B, C)", +DlgLstTypeSRoman : "Malgrandaj Romanaj Ciferoj (i, ii, iii)", +DlgLstTypeLRoman : "Grandaj Romanaj Ciferoj (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Ĝeneralaĵoj", +DlgDocBackTab : "Fono", +DlgDocColorsTab : "Koloroj kaj Marĝenoj", +DlgDocMetaTab : "Metadatumoj", + +DlgDocPageTitle : "Paĝotitolo", +DlgDocLangDir : "Skribdirekto de la Lingvo", +DlgDocLangDirLTR : "De maldekstro dekstren (LTR)", +DlgDocLangDirRTL : "De dekstro maldekstren (LTR)", +DlgDocLangCode : "Lingvokodo", +DlgDocCharSet : "Signara Kodo", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Alia Signara Kodo", + +DlgDocDocType : "Dokumenta Tipo", +DlgDocDocTypeOther : "Alia Dokumenta Tipo", +DlgDocIncXHTML : "Inkluzivi XHTML Deklaroj", +DlgDocBgColor : "Fona Koloro", +DlgDocBgImage : "URL de Fona Bildo", +DlgDocBgNoScroll : "Neruluma Fono", +DlgDocCText : "Teksto", +DlgDocCLink : "Ligilo", +DlgDocCVisited : "Vizitita Ligilo", +DlgDocCActive : "Aktiva Ligilo", +DlgDocMargins : "Paĝaj Marĝenoj", +DlgDocMaTop : "Supra", +DlgDocMaLeft : "Maldekstra", +DlgDocMaRight : "Dekstra", +DlgDocMaBottom : "Malsupra", +DlgDocMeIndex : "Ŝlosilvortoj de la Dokumento (apartigita de komoj)", +DlgDocMeDescr : "Dokumenta Priskribo", +DlgDocMeAuthor : "Verkinto", +DlgDocMeCopy : "Kopirajto", +DlgDocPreview : "Aspekto", + +// Templates Dialog +Templates : "Templates", //MISSING +DlgTemplatesTitle : "Content Templates", //MISSING +DlgTemplatesSelMsg : "Please select the template to open in the editor
        (the actual contents will be lost):", //MISSING +DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING +DlgTemplatesNoTpl : "(No templates defined)", //MISSING +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "Pri", +DlgAboutBrowserInfoTab : "Informoj pri TTT-legilo", +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "versio", +DlgAboutInfo : "Por pli da informoj, vizitu" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/es.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/es.js new file mode 100644 index 0000000..2d2fa09 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/es.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Spanish language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Contraer Barra", +ToolbarExpand : "Expandir Barra", + +// Toolbar Items and Context Menu +Save : "Guardar", +NewPage : "Nueva Página", +Preview : "Vista Previa", +Cut : "Cortar", +Copy : "Copiar", +Paste : "Pegar", +PasteText : "Pegar como texto plano", +PasteWord : "Pegar desde Word", +Print : "Imprimir", +SelectAll : "Seleccionar Todo", +RemoveFormat : "Eliminar Formato", +InsertLinkLbl : "Vínculo", +InsertLink : "Insertar/Editar Vínculo", +RemoveLink : "Eliminar Vínculo", +Anchor : "Referencia", +AnchorDelete : "Eliminar Referencia", +InsertImageLbl : "Imagen", +InsertImage : "Insertar/Editar Imagen", +InsertFlashLbl : "Flash", +InsertFlash : "Insertar/Editar Flash", +InsertTableLbl : "Tabla", +InsertTable : "Insertar/Editar Tabla", +InsertLineLbl : "Línea", +InsertLine : "Insertar Línea Horizontal", +InsertSpecialCharLbl: "Caracter Especial", +InsertSpecialChar : "Insertar Caracter Especial", +InsertSmileyLbl : "Emoticons", +InsertSmiley : "Insertar Emoticons", +About : "Acerca de FCKeditor", +Bold : "Negrita", +Italic : "Cursiva", +Underline : "Subrayado", +StrikeThrough : "Tachado", +Subscript : "Subíndice", +Superscript : "Superíndice", +LeftJustify : "Alinear a Izquierda", +CenterJustify : "Centrar", +RightJustify : "Alinear a Derecha", +BlockJustify : "Justificado", +DecreaseIndent : "Disminuir Sangría", +IncreaseIndent : "Aumentar Sangría", +Blockquote : "Cita", +Undo : "Deshacer", +Redo : "Rehacer", +NumberedListLbl : "Numeración", +NumberedList : "Insertar/Eliminar Numeración", +BulletedListLbl : "Viñetas", +BulletedList : "Insertar/Eliminar Viñetas", +ShowTableBorders : "Mostrar Bordes de Tablas", +ShowDetails : "Mostrar saltos de Párrafo", +Style : "Estilo", +FontFormat : "Formato", +Font : "Fuente", +FontSize : "Tamaño", +TextColor : "Color de Texto", +BGColor : "Color de Fondo", +Source : "Fuente HTML", +Find : "Buscar", +Replace : "Reemplazar", +SpellCheck : "Ortografía", +UniversalKeyboard : "Teclado Universal", +PageBreakLbl : "Salto de Página", +PageBreak : "Insertar Salto de Página", + +Form : "Formulario", +Checkbox : "Casilla de Verificación", +RadioButton : "Botones de Radio", +TextField : "Campo de Texto", +Textarea : "Area de Texto", +HiddenField : "Campo Oculto", +Button : "Botón", +SelectionField : "Campo de Selección", +ImageButton : "Botón Imagen", + +FitWindow : "Maximizar el tamaño del editor", +ShowBlocks : "Mostrar bloques", + +// Context Menu +EditLink : "Editar Vínculo", +CellCM : "Celda", +RowCM : "Fila", +ColumnCM : "Columna", +InsertRowAfter : "Insertar fila en la parte inferior", +InsertRowBefore : "Insertar fila en la parte superior", +DeleteRows : "Eliminar Filas", +InsertColumnAfter : "Insertar columna a la derecha", +InsertColumnBefore : "Insertar columna a la izquierda", +DeleteColumns : "Eliminar Columnas", +InsertCellAfter : "Insertar celda a la derecha", +InsertCellBefore : "Insertar celda a la izquierda", +DeleteCells : "Eliminar Celdas", +MergeCells : "Combinar Celdas", +MergeRight : "Combinar a la derecha", +MergeDown : "Combinar hacia abajo", +HorizontalSplitCell : "Dividir la celda horizontalmente", +VerticalSplitCell : "Dividir la celda verticalmente", +TableDelete : "Eliminar Tabla", +CellProperties : "Propiedades de Celda", +TableProperties : "Propiedades de Tabla", +ImageProperties : "Propiedades de Imagen", +FlashProperties : "Propiedades de Flash", + +AnchorProp : "Propiedades de Referencia", +ButtonProp : "Propiedades de Botón", +CheckboxProp : "Propiedades de Casilla", +HiddenFieldProp : "Propiedades de Campo Oculto", +RadioButtonProp : "Propiedades de Botón de Radio", +ImageButtonProp : "Propiedades de Botón de Imagen", +TextFieldProp : "Propiedades de Campo de Texto", +SelectionFieldProp : "Propiedades de Campo de Selección", +TextareaProp : "Propiedades de Area de Texto", +FormProp : "Propiedades de Formulario", + +FontFormats : "Normal;Con formato;Dirección;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Procesando XHTML. Por favor, espere...", +Done : "Hecho", +PasteWordConfirm : "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?", +NotCompatiblePaste : "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?", +UnknownToolbarItem : "Item de barra desconocido \"%1\"", +UnknownCommand : "Nombre de comando desconocido \"%1\"", +NotImplemented : "Comando no implementado", +UnknownToolbarSet : "Nombre de barra \"%1\" no definido", +NoActiveX : "La configuración de las opciones de seguridad de su navegador puede estar limitando algunas características del editor. Por favor active la opción \"Ejecutar controles y complementos de ActiveX \", de lo contrario puede experimentar errores o ausencia de funcionalidades.", +BrowseServerBlocked : "La ventana de visualización del servidor no pudo ser abierta. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).", +DialogBlocked : "No se ha podido abrir la ventana de diálogo. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancelar", +DlgBtnClose : "Cerrar", +DlgBtnBrowseServer : "Ver Servidor", +DlgAdvancedTag : "Avanzado", +DlgOpOther : "", +DlgInfoTab : "Información", +DlgAlertUrl : "Inserte el URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Orientación", +DlgGenLangDirLtr : "Izquierda a Derecha (LTR)", +DlgGenLangDirRtl : "Derecha a Izquierda (RTL)", +DlgGenLangCode : "Cód. de idioma", +DlgGenAccessKey : "Clave de Acceso", +DlgGenName : "Nombre", +DlgGenTabIndex : "Indice de tabulación", +DlgGenLongDescr : "Descripción larga URL", +DlgGenClass : "Clases de hojas de estilo", +DlgGenTitle : "Título", +DlgGenContType : "Tipo de Contenido", +DlgGenLinkCharset : "Fuente de caracteres vinculado", +DlgGenStyle : "Estilo", + +// Image Dialog +DlgImgTitle : "Propiedades de Imagen", +DlgImgInfoTab : "Información de Imagen", +DlgImgBtnUpload : "Enviar al Servidor", +DlgImgURL : "URL", +DlgImgUpload : "Cargar", +DlgImgAlt : "Texto Alternativo", +DlgImgWidth : "Anchura", +DlgImgHeight : "Altura", +DlgImgLockRatio : "Proporcional", +DlgBtnResetSize : "Tamaño Original", +DlgImgBorder : "Borde", +DlgImgHSpace : "Esp.Horiz", +DlgImgVSpace : "Esp.Vert", +DlgImgAlign : "Alineación", +DlgImgAlignLeft : "Izquierda", +DlgImgAlignAbsBottom: "Abs inferior", +DlgImgAlignAbsMiddle: "Abs centro", +DlgImgAlignBaseline : "Línea de base", +DlgImgAlignBottom : "Pie", +DlgImgAlignMiddle : "Centro", +DlgImgAlignRight : "Derecha", +DlgImgAlignTextTop : "Tope del texto", +DlgImgAlignTop : "Tope", +DlgImgPreview : "Vista Previa", +DlgImgAlertUrl : "Por favor escriba la URL de la imagen", +DlgImgLinkTab : "Vínculo", + +// Flash Dialog +DlgFlashTitle : "Propiedades de Flash", +DlgFlashChkPlay : "Autoejecución", +DlgFlashChkLoop : "Repetir", +DlgFlashChkMenu : "Activar Menú Flash", +DlgFlashScale : "Escala", +DlgFlashScaleAll : "Mostrar todo", +DlgFlashScaleNoBorder : "Sin Borde", +DlgFlashScaleFit : "Ajustado", + +// Link Dialog +DlgLnkWindowTitle : "Vínculo", +DlgLnkInfoTab : "Información de Vínculo", +DlgLnkTargetTab : "Destino", + +DlgLnkType : "Tipo de vínculo", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Referencia en esta página", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocolo", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Seleccionar una referencia", +DlgLnkAnchorByName : "Por Nombre de Referencia", +DlgLnkAnchorById : "Por ID de elemento", +DlgLnkNoAnchors : "(No hay referencias disponibles en el documento)", +DlgLnkEMail : "Dirección de E-Mail", +DlgLnkEMailSubject : "Título del Mensaje", +DlgLnkEMailBody : "Cuerpo del Mensaje", +DlgLnkUpload : "Cargar", +DlgLnkBtnUpload : "Enviar al Servidor", + +DlgLnkTarget : "Destino", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nueva Ventana(_blank)", +DlgLnkTargetParent : "Ventana Padre (_parent)", +DlgLnkTargetSelf : "Misma Ventana (_self)", +DlgLnkTargetTop : "Ventana primaria (_top)", +DlgLnkTargetFrameName : "Nombre del Marco Destino", +DlgLnkPopWinName : "Nombre de Ventana Emergente", +DlgLnkPopWinFeat : "Características de Ventana Emergente", +DlgLnkPopResize : "Ajustable", +DlgLnkPopLocation : "Barra de ubicación", +DlgLnkPopMenu : "Barra de Menú", +DlgLnkPopScroll : "Barras de desplazamiento", +DlgLnkPopStatus : "Barra de Estado", +DlgLnkPopToolbar : "Barra de Herramientas", +DlgLnkPopFullScrn : "Pantalla Completa (IE)", +DlgLnkPopDependent : "Dependiente (Netscape)", +DlgLnkPopWidth : "Anchura", +DlgLnkPopHeight : "Altura", +DlgLnkPopLeft : "Posición Izquierda", +DlgLnkPopTop : "Posición Derecha", + +DlnLnkMsgNoUrl : "Por favor tipee el vínculo URL", +DlnLnkMsgNoEMail : "Por favor tipee la dirección de e-mail", +DlnLnkMsgNoAnchor : "Por favor seleccione una referencia", +DlnLnkMsgInvPopName : "El nombre debe empezar con un caracter alfanumérico y no debe contener espacios", + +// Color Dialog +DlgColorTitle : "Seleccionar Color", +DlgColorBtnClear : "Ninguno", +DlgColorHighlight : "Resaltado", +DlgColorSelected : "Seleccionado", + +// Smiley Dialog +DlgSmileyTitle : "Insertar un Emoticon", + +// Special Character Dialog +DlgSpecialCharTitle : "Seleccione un caracter especial", + +// Table Dialog +DlgTableTitle : "Propiedades de Tabla", +DlgTableRows : "Filas", +DlgTableColumns : "Columnas", +DlgTableBorder : "Tamaño de Borde", +DlgTableAlign : "Alineación", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Izquierda", +DlgTableAlignCenter : "Centrado", +DlgTableAlignRight : "Derecha", +DlgTableWidth : "Anchura", +DlgTableWidthPx : "pixeles", +DlgTableWidthPc : "porcentaje", +DlgTableHeight : "Altura", +DlgTableCellSpace : "Esp. e/celdas", +DlgTableCellPad : "Esp. interior", +DlgTableCaption : "Título", +DlgTableSummary : "Síntesis", + +// Table Cell Dialog +DlgCellTitle : "Propiedades de Celda", +DlgCellWidth : "Anchura", +DlgCellWidthPx : "pixeles", +DlgCellWidthPc : "porcentaje", +DlgCellHeight : "Altura", +DlgCellWordWrap : "Cortar Línea", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Si", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Alineación Horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Izquierda", +DlgCellHorAlignCenter : "Centrado", +DlgCellHorAlignRight: "Derecha", +DlgCellVerAlign : "Alineación Vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Tope", +DlgCellVerAlignMiddle : "Medio", +DlgCellVerAlignBottom : "ie", +DlgCellVerAlignBaseline : "Línea de Base", +DlgCellRowSpan : "Abarcar Filas", +DlgCellCollSpan : "Abarcar Columnas", +DlgCellBackColor : "Color de Fondo", +DlgCellBorderColor : "Color de Borde", +DlgCellBtnSelect : "Seleccione...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Buscar y Reemplazar", + +// Find Dialog +DlgFindTitle : "Buscar", +DlgFindFindBtn : "Buscar", +DlgFindNotFoundMsg : "El texto especificado no ha sido encontrado.", + +// Replace Dialog +DlgReplaceTitle : "Reemplazar", +DlgReplaceFindLbl : "Texto a buscar:", +DlgReplaceReplaceLbl : "Reemplazar con:", +DlgReplaceCaseChk : "Coincidir may/min", +DlgReplaceReplaceBtn : "Reemplazar", +DlgReplaceReplAllBtn : "Reemplazar Todo", +DlgReplaceWordChk : "Coincidir toda la palabra", + +// Paste Operations / Dialog +PasteErrorCut : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).", +PasteErrorCopy : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).", + +PasteAsText : "Pegar como Texto Plano", +PasteFromWord : "Pegar desde Word", + +DlgPasteMsg2 : "Por favor pegue dentro del cuadro utilizando el teclado (Ctrl+V); luego presione OK.", +DlgPasteSec : "Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.", +DlgPasteIgnoreFont : "Ignorar definiciones de fuentes", +DlgPasteRemoveStyles : "Remover definiciones de estilo", + +// Color Picker +ColorAutomatic : "Automático", +ColorMoreColors : "Más Colores...", + +// Document Properties +DocProps : "Propiedades del Documento", + +// Anchor Dialog +DlgAnchorTitle : "Propiedades de la Referencia", +DlgAnchorName : "Nombre de la Referencia", +DlgAnchorErrorName : "Por favor, complete el nombre de la Referencia", + +// Speller Pages Dialog +DlgSpellNotInDic : "No se encuentra en el Diccionario", +DlgSpellChangeTo : "Cambiar a", +DlgSpellBtnIgnore : "Ignorar", +DlgSpellBtnIgnoreAll : "Ignorar Todo", +DlgSpellBtnReplace : "Reemplazar", +DlgSpellBtnReplaceAll : "Reemplazar Todo", +DlgSpellBtnUndo : "Deshacer", +DlgSpellNoSuggestions : "- No hay sugerencias -", +DlgSpellProgress : "Control de Ortografía en progreso...", +DlgSpellNoMispell : "Control finalizado: no se encontraron errores", +DlgSpellNoChanges : "Control finalizado: no se ha cambiado ninguna palabra", +DlgSpellOneChange : "Control finalizado: se ha cambiado una palabra", +DlgSpellManyChanges : "Control finalizado: se ha cambiado %1 palabras", + +IeSpellDownload : "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?", + +// Button Dialog +DlgButtonText : "Texto (Valor)", +DlgButtonType : "Tipo", +DlgButtonTypeBtn : "Boton", +DlgButtonTypeSbm : "Enviar", +DlgButtonTypeRst : "Reestablecer", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nombre", +DlgCheckboxValue : "Valor", +DlgCheckboxSelected : "Seleccionado", + +// Form Dialog +DlgFormName : "Nombre", +DlgFormAction : "Acción", +DlgFormMethod : "Método", + +// Select Field Dialog +DlgSelectName : "Nombre", +DlgSelectValue : "Valor", +DlgSelectSize : "Tamaño", +DlgSelectLines : "Lineas", +DlgSelectChkMulti : "Permitir múltiple selección", +DlgSelectOpAvail : "Opciones disponibles", +DlgSelectOpText : "Texto", +DlgSelectOpValue : "Valor", +DlgSelectBtnAdd : "Agregar", +DlgSelectBtnModify : "Modificar", +DlgSelectBtnUp : "Subir", +DlgSelectBtnDown : "Bajar", +DlgSelectBtnSetValue : "Establecer como predeterminado", +DlgSelectBtnDelete : "Eliminar", + +// Textarea Dialog +DlgTextareaName : "Nombre", +DlgTextareaCols : "Columnas", +DlgTextareaRows : "Filas", + +// Text Field Dialog +DlgTextName : "Nombre", +DlgTextValue : "Valor", +DlgTextCharWidth : "Caracteres de ancho", +DlgTextMaxChars : "Máximo caracteres", +DlgTextType : "Tipo", +DlgTextTypeText : "Texto", +DlgTextTypePass : "Contraseña", + +// Hidden Field Dialog +DlgHiddenName : "Nombre", +DlgHiddenValue : "Valor", + +// Bulleted List Dialog +BulletedListProp : "Propiedades de Viñetas", +NumberedListProp : "Propiedades de Numeraciones", +DlgLstStart : "Inicio", +DlgLstType : "Tipo", +DlgLstTypeCircle : "Círculo", +DlgLstTypeDisc : "Disco", +DlgLstTypeSquare : "Cuadrado", +DlgLstTypeNumbers : "Números (1, 2, 3)", +DlgLstTypeLCase : "letras en minúsculas (a, b, c)", +DlgLstTypeUCase : "letras en mayúsculas (A, B, C)", +DlgLstTypeSRoman : "Números Romanos (i, ii, iii)", +DlgLstTypeLRoman : "Números Romanos (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Fondo", +DlgDocColorsTab : "Colores y Márgenes", +DlgDocMetaTab : "Meta Información", + +DlgDocPageTitle : "Título de Página", +DlgDocLangDir : "Orientación de idioma", +DlgDocLangDirLTR : "Izq. a Derecha (LTR)", +DlgDocLangDirRTL : "Der. a Izquierda (RTL)", +DlgDocLangCode : "Código de Idioma", +DlgDocCharSet : "Codif. de Conjunto de Caracteres", +DlgDocCharSetCE : "Centro Europeo", +DlgDocCharSetCT : "Chino Tradicional (Big5)", +DlgDocCharSetCR : "Cirílico", +DlgDocCharSetGR : "Griego", +DlgDocCharSetJP : "Japonés", +DlgDocCharSetKR : "Coreano", +DlgDocCharSetTR : "Turco", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Europeo occidental", +DlgDocCharSetOther : "Otra Codificación", + +DlgDocDocType : "Encabezado de Tipo de Documento", +DlgDocDocTypeOther : "Otro Encabezado", +DlgDocIncXHTML : "Incluir Declaraciones XHTML", +DlgDocBgColor : "Color de Fondo", +DlgDocBgImage : "URL de Imagen de Fondo", +DlgDocBgNoScroll : "Fondo sin rolido", +DlgDocCText : "Texto", +DlgDocCLink : "Vínculo", +DlgDocCVisited : "Vínculo Visitado", +DlgDocCActive : "Vínculo Activo", +DlgDocMargins : "Márgenes de Página", +DlgDocMaTop : "Tope", +DlgDocMaLeft : "Izquierda", +DlgDocMaRight : "Derecha", +DlgDocMaBottom : "Pie", +DlgDocMeIndex : "Claves de indexación del Documento (separados por comas)", +DlgDocMeDescr : "Descripción del Documento", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vista Previa", + +// Templates Dialog +Templates : "Plantillas", +DlgTemplatesTitle : "Contenido de Plantillas", +DlgTemplatesSelMsg : "Por favor selecciona la plantilla a abrir en el editor
        (el contenido actual se perderá):", +DlgTemplatesLoading : "Cargando lista de Plantillas. Por favor, aguarde...", +DlgTemplatesNoTpl : "(No hay plantillas definidas)", +DlgTemplatesReplace : "Reemplazar el contenido actual", + +// About Dialog +DlgAboutAboutTab : "Acerca de", +DlgAboutBrowserInfoTab : "Información de Navegador", +DlgAboutLicenseTab : "Licencia", +DlgAboutVersion : "versión", +DlgAboutInfo : "Para mayor información por favor dirigirse a" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/et.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/et.js new file mode 100644 index 0000000..44ecbe3 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/et.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Estonian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Voldi tööriistariba", +ToolbarExpand : "Laienda tööriistariba", + +// Toolbar Items and Context Menu +Save : "Salvesta", +NewPage : "Uus leht", +Preview : "Eelvaade", +Cut : "Lõika", +Copy : "Kopeeri", +Paste : "Kleebi", +PasteText : "Kleebi tavalise tekstina", +PasteWord : "Kleebi Wordist", +Print : "Prindi", +SelectAll : "Vali kõik", +RemoveFormat : "Eemalda vorming", +InsertLinkLbl : "Link", +InsertLink : "Sisesta link / Muuda linki", +RemoveLink : "Eemalda link", +Anchor : "Sisesta ankur / Muuda ankrut", +AnchorDelete : "Eemalda ankur", +InsertImageLbl : "Pilt", +InsertImage : "Sisesta pilt / Muuda pilti", +InsertFlashLbl : "Flash", +InsertFlash : "Sisesta flash / Muuda flashi", +InsertTableLbl : "Tabel", +InsertTable : "Sisesta tabel / Muuda tabelit", +InsertLineLbl : "Joon", +InsertLine : "Sisesta horisontaaljoon", +InsertSpecialCharLbl: "Erimärgid", +InsertSpecialChar : "Sisesta erimärk", +InsertSmileyLbl : "Emotikon", +InsertSmiley : "Sisesta emotikon", +About : "FCKeditor teave", +Bold : "Paks", +Italic : "Kursiiv", +Underline : "Allajoonitud", +StrikeThrough : "Läbijoonitud", +Subscript : "Allindeks", +Superscript : "Ülaindeks", +LeftJustify : "Vasakjoondus", +CenterJustify : "Keskjoondus", +RightJustify : "Paremjoondus", +BlockJustify : "Rööpjoondus", +DecreaseIndent : "Vähenda taanet", +IncreaseIndent : "Suurenda taanet", +Blockquote : "Blokktsitaat", +Undo : "Võta tagasi", +Redo : "Korda toimingut", +NumberedListLbl : "Nummerdatud loetelu", +NumberedList : "Sisesta/Eemalda nummerdatud loetelu", +BulletedListLbl : "Punktiseeritud loetelu", +BulletedList : "Sisesta/Eemalda punktiseeritud loetelu", +ShowTableBorders : "Näita tabeli jooni", +ShowDetails : "Näita üksikasju", +Style : "Laad", +FontFormat : "Vorming", +Font : "Kiri", +FontSize : "Suurus", +TextColor : "Teksti värv", +BGColor : "Tausta värv", +Source : "Lähtekood", +Find : "Otsi", +Replace : "Asenda", +SpellCheck : "Kontrolli õigekirja", +UniversalKeyboard : "Universaalne klaviatuur", +PageBreakLbl : "Lehepiir", +PageBreak : "Sisesta lehevahetuskoht", + +Form : "Vorm", +Checkbox : "Märkeruut", +RadioButton : "Raadionupp", +TextField : "Tekstilahter", +Textarea : "Tekstiala", +HiddenField : "Varjatud lahter", +Button : "Nupp", +SelectionField : "Valiklahter", +ImageButton : "Piltnupp", + +FitWindow : "Maksimeeri redaktori mõõtmed", +ShowBlocks : "Näita blokke", + +// Context Menu +EditLink : "Muuda linki", +CellCM : "Lahter", +RowCM : "Rida", +ColumnCM : "Veerg", +InsertRowAfter : "Sisesta rida peale", +InsertRowBefore : "Sisesta rida enne", +DeleteRows : "Eemalda read", +InsertColumnAfter : "Sisesta veerg peale", +InsertColumnBefore : "Sisesta veerg enne", +DeleteColumns : "Eemalda veerud", +InsertCellAfter : "Sisesta lahter peale", +InsertCellBefore : "Sisesta lahter enne", +DeleteCells : "Eemalda lahtrid", +MergeCells : "Ühenda lahtrid", +MergeRight : "Ühenda paremale", +MergeDown : "Ühenda alla", +HorizontalSplitCell : "Poolita lahter horisontaalselt", +VerticalSplitCell : "Poolita lahter vertikaalselt", +TableDelete : "Kustuta tabel", +CellProperties : "Lahtri atribuudid", +TableProperties : "Tabeli atribuudid", +ImageProperties : "Pildi atribuudid", +FlashProperties : "Flash omadused", + +AnchorProp : "Ankru omadused", +ButtonProp : "Nupu omadused", +CheckboxProp : "Märkeruudu omadused", +HiddenFieldProp : "Varjatud lahtri omadused", +RadioButtonProp : "Raadionupu omadused", +ImageButtonProp : "Piltnupu omadused", +TextFieldProp : "Tekstilahtri omadused", +SelectionFieldProp : "Valiklahtri omadused", +TextareaProp : "Tekstiala omadused", +FormProp : "Vormi omadused", + +FontFormats : "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6;Tavaline (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Töötlen XHTML'i. Palun oota...", +Done : "Tehtud", +PasteWordConfirm : "Tekst, mida soovid lisada paistab pärinevat Word'ist. Kas soovid seda enne kleepimist puhastada?", +NotCompatiblePaste : "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?", +UnknownToolbarItem : "Tundmatu tööriistarea üksus \"%1\"", +UnknownCommand : "Tundmatu käsunimi \"%1\"", +NotImplemented : "Käsku ei täidetud", +UnknownToolbarSet : "Tööriistariba \"%1\" ei eksisteeri", +NoActiveX : "Sinu veebisirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutusvõimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma veebisirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.", +BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.", +DialogBlocked : "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Loobu", +DlgBtnClose : "Sulge", +DlgBtnBrowseServer : "Sirvi serverit", +DlgAdvancedTag : "Täpsemalt", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Palun sisesta URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Keele suund", +DlgGenLangDirLtr : "Vasakult paremale (LTR)", +DlgGenLangDirRtl : "Paremalt vasakule (RTL)", +DlgGenLangCode : "Keele kood", +DlgGenAccessKey : "Juurdepääsu võti", +DlgGenName : "Nimi", +DlgGenTabIndex : "Tab indeks", +DlgGenLongDescr : "Pikk kirjeldus URL", +DlgGenClass : "Stiilistiku klassid", +DlgGenTitle : "Juhendav tiitel", +DlgGenContType : "Juhendava sisu tüüp", +DlgGenLinkCharset : "Lingitud ressurssi märgistik", +DlgGenStyle : "Laad", + +// Image Dialog +DlgImgTitle : "Pildi atribuudid", +DlgImgInfoTab : "Pildi info", +DlgImgBtnUpload : "Saada serverissee", +DlgImgURL : "URL", +DlgImgUpload : "Lae üles", +DlgImgAlt : "Alternatiivne tekst", +DlgImgWidth : "Laius", +DlgImgHeight : "Kõrgus", +DlgImgLockRatio : "Lukusta kuvasuhe", +DlgBtnResetSize : "Lähtesta suurus", +DlgImgBorder : "Joon", +DlgImgHSpace : "H. vaheruum", +DlgImgVSpace : "V. vaheruum", +DlgImgAlign : "Joondus", +DlgImgAlignLeft : "Vasak", +DlgImgAlignAbsBottom: "Abs alla", +DlgImgAlignAbsMiddle: "Abs keskele", +DlgImgAlignBaseline : "Baasjoonele", +DlgImgAlignBottom : "Alla", +DlgImgAlignMiddle : "Keskele", +DlgImgAlignRight : "Paremale", +DlgImgAlignTextTop : "Tekstit üles", +DlgImgAlignTop : "Üles", +DlgImgPreview : "Eelvaade", +DlgImgAlertUrl : "Palun kirjuta pildi URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash omadused", +DlgFlashChkPlay : "Automaatne start ", +DlgFlashChkLoop : "Korduv", +DlgFlashChkMenu : "Võimalda flash menüü", +DlgFlashScale : "Mastaap", +DlgFlashScaleAll : "Näita kõike", +DlgFlashScaleNoBorder : "Äärist ei ole", +DlgFlashScaleFit : "Täpne sobivus", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Lingi info", +DlgLnkTargetTab : "Sihtkoht", + +DlgLnkType : "Lingi tüüp", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ankur sellel lehel", +DlgLnkTypeEMail : "E-post", +DlgLnkProto : "Protokoll", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vali ankur", +DlgLnkAnchorByName : "Ankru nime järgi", +DlgLnkAnchorById : "Elemendi id järgi", +DlgLnkNoAnchors : "(Selles dokumendis ei ole ankruid)", +DlgLnkEMail : "E-posti aadress", +DlgLnkEMailSubject : "Sõnumi teema", +DlgLnkEMailBody : "Sõnumi tekst", +DlgLnkUpload : "Lae üles", +DlgLnkBtnUpload : "Saada serverisse", + +DlgLnkTarget : "Sihtkoht", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Uus aken (_blank)", +DlgLnkTargetParent : "Esivanem aken (_parent)", +DlgLnkTargetSelf : "Sama aken (_self)", +DlgLnkTargetTop : "Pealmine aken (_top)", +DlgLnkTargetFrameName : "Sihtmärk raami nimi", +DlgLnkPopWinName : "Hüpikakna nimi", +DlgLnkPopWinFeat : "Hüpikakna omadused", +DlgLnkPopResize : "Suurendatav", +DlgLnkPopLocation : "Aadressiriba", +DlgLnkPopMenu : "Menüüriba", +DlgLnkPopScroll : "Kerimisribad", +DlgLnkPopStatus : "Olekuriba", +DlgLnkPopToolbar : "Tööriistariba", +DlgLnkPopFullScrn : "Täisekraan (IE)", +DlgLnkPopDependent : "Sõltuv (Netscape)", +DlgLnkPopWidth : "Laius", +DlgLnkPopHeight : "Kõrgus", +DlgLnkPopLeft : "Vasak asukoht", +DlgLnkPopTop : "Ülemine asukoht", + +DlnLnkMsgNoUrl : "Palun kirjuta lingi URL", +DlnLnkMsgNoEMail : "Palun kirjuta E-Posti aadress", +DlnLnkMsgNoAnchor : "Palun vali ankur", +DlnLnkMsgInvPopName : "Hüpikakna nimi peab algama alfabeetilise tähega ja ei tohi sisaldada tühikuid", + +// Color Dialog +DlgColorTitle : "Vali värv", +DlgColorBtnClear : "Tühjenda", +DlgColorHighlight : "Märgi", +DlgColorSelected : "Valitud", + +// Smiley Dialog +DlgSmileyTitle : "Sisesta emotikon", + +// Special Character Dialog +DlgSpecialCharTitle : "Vali erimärk", + +// Table Dialog +DlgTableTitle : "Tabeli atribuudid", +DlgTableRows : "Read", +DlgTableColumns : "Veerud", +DlgTableBorder : "Joone suurus", +DlgTableAlign : "Joondus", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Vasak", +DlgTableAlignCenter : "Kesk", +DlgTableAlignRight : "Parem", +DlgTableWidth : "Laius", +DlgTableWidthPx : "pikslit", +DlgTableWidthPc : "protsenti", +DlgTableHeight : "Kõrgus", +DlgTableCellSpace : "Lahtri vahe", +DlgTableCellPad : "Lahtri täidis", +DlgTableCaption : "Tabeli tiitel", +DlgTableSummary : "Kokkuvõte", + +// Table Cell Dialog +DlgCellTitle : "Lahtri atribuudid", +DlgCellWidth : "Laius", +DlgCellWidthPx : "pikslit", +DlgCellWidthPc : "protsenti", +DlgCellHeight : "Kõrgus", +DlgCellWordWrap : "Sõna ülekanne", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Jah", +DlgCellWordWrapNo : "Ei", +DlgCellHorAlign : "Horisontaaljoondus", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Vasak", +DlgCellHorAlignCenter : "Kesk", +DlgCellHorAlignRight: "Parem", +DlgCellVerAlign : "Vertikaaljoondus", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Üles", +DlgCellVerAlignMiddle : "Keskele", +DlgCellVerAlignBottom : "Alla", +DlgCellVerAlignBaseline : "Baasjoonele", +DlgCellRowSpan : "Reaulatus", +DlgCellCollSpan : "Veeruulatus", +DlgCellBackColor : "Tausta värv", +DlgCellBorderColor : "Joone värv", +DlgCellBtnSelect : "Vali...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Otsi ja asenda", + +// Find Dialog +DlgFindTitle : "Otsi", +DlgFindFindBtn : "Otsi", +DlgFindNotFoundMsg : "Valitud teksti ei leitud.", + +// Replace Dialog +DlgReplaceTitle : "Asenda", +DlgReplaceFindLbl : "Leia mida:", +DlgReplaceReplaceLbl : "Asenda millega:", +DlgReplaceCaseChk : "Erista suur- ja väiketähti", +DlgReplaceReplaceBtn : "Asenda", +DlgReplaceReplAllBtn : "Asenda kõik", +DlgReplaceWordChk : "Otsi terviklike sõnu", + +// Paste Operations / Dialog +PasteErrorCut : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).", +PasteErrorCopy : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).", + +PasteAsText : "Kleebi tavalise tekstina", +PasteFromWord : "Kleebi Wordist", + +DlgPasteMsg2 : "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (Ctrl+V) ja vajuta seejärel OK.", +DlgPasteSec : "Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.", +DlgPasteIgnoreFont : "Ignoreeri kirja definitsioone", +DlgPasteRemoveStyles : "Eemalda stiilide definitsioonid", + +// Color Picker +ColorAutomatic : "Automaatne", +ColorMoreColors : "Rohkem värve...", + +// Document Properties +DocProps : "Dokumendi omadused", + +// Anchor Dialog +DlgAnchorTitle : "Ankru omadused", +DlgAnchorName : "Ankru nimi", +DlgAnchorErrorName : "Palun sisest ankru nimi", + +// Speller Pages Dialog +DlgSpellNotInDic : "Puudub sõnastikust", +DlgSpellChangeTo : "Muuda", +DlgSpellBtnIgnore : "Ignoreeri", +DlgSpellBtnIgnoreAll : "Ignoreeri kõiki", +DlgSpellBtnReplace : "Asenda", +DlgSpellBtnReplaceAll : "Asenda kõik", +DlgSpellBtnUndo : "Võta tagasi", +DlgSpellNoSuggestions : "- Soovitused puuduvad -", +DlgSpellProgress : "Toimub õigekirja kontroll...", +DlgSpellNoMispell : "Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud", +DlgSpellNoChanges : "Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud", +DlgSpellOneChange : "Õigekirja kontroll sooritatud: üks sõna muudeti", +DlgSpellManyChanges : "Õigekirja kontroll sooritatud: %1 sõna muudetud", + +IeSpellDownload : "Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?", + +// Button Dialog +DlgButtonText : "Tekst (väärtus)", +DlgButtonType : "Tüüp", +DlgButtonTypeBtn : "Nupp", +DlgButtonTypeSbm : "Saada", +DlgButtonTypeRst : "Lähtesta", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nimi", +DlgCheckboxValue : "Väärtus", +DlgCheckboxSelected : "Valitud", + +// Form Dialog +DlgFormName : "Nimi", +DlgFormAction : "Toiming", +DlgFormMethod : "Meetod", + +// Select Field Dialog +DlgSelectName : "Nimi", +DlgSelectValue : "Väärtus", +DlgSelectSize : "Suurus", +DlgSelectLines : "ridu", +DlgSelectChkMulti : "Võimalda mitu valikut", +DlgSelectOpAvail : "Võimalikud valikud", +DlgSelectOpText : "Tekst", +DlgSelectOpValue : "Väärtus", +DlgSelectBtnAdd : "Lisa", +DlgSelectBtnModify : "Muuda", +DlgSelectBtnUp : "Üles", +DlgSelectBtnDown : "Alla", +DlgSelectBtnSetValue : "Sea valitud olekuna", +DlgSelectBtnDelete : "Kustuta", + +// Textarea Dialog +DlgTextareaName : "Nimi", +DlgTextareaCols : "Veerge", +DlgTextareaRows : "Ridu", + +// Text Field Dialog +DlgTextName : "Nimi", +DlgTextValue : "Väärtus", +DlgTextCharWidth : "Laius (tähemärkides)", +DlgTextMaxChars : "Maksimaalselt tähemärke", +DlgTextType : "Tüüp", +DlgTextTypeText : "Tekst", +DlgTextTypePass : "Parool", + +// Hidden Field Dialog +DlgHiddenName : "Nimi", +DlgHiddenValue : "Väärtus", + +// Bulleted List Dialog +BulletedListProp : "Täpitud loetelu omadused", +NumberedListProp : "Nummerdatud loetelu omadused", +DlgLstStart : "Alusta", +DlgLstType : "Tüüp", +DlgLstTypeCircle : "Ring", +DlgLstTypeDisc : "Ketas", +DlgLstTypeSquare : "Ruut", +DlgLstTypeNumbers : "Numbrid (1, 2, 3)", +DlgLstTypeLCase : "Väiketähed (a, b, c)", +DlgLstTypeUCase : "Suurtähed (A, B, C)", +DlgLstTypeSRoman : "Väiksed Rooma numbrid (i, ii, iii)", +DlgLstTypeLRoman : "Suured Rooma numbrid (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Üldine", +DlgDocBackTab : "Taust", +DlgDocColorsTab : "Värvid ja veerised", +DlgDocMetaTab : "Meta andmed", + +DlgDocPageTitle : "Lehekülje tiitel", +DlgDocLangDir : "Kirja suund", +DlgDocLangDirLTR : "Vasakult paremale (LTR)", +DlgDocLangDirRTL : "Paremalt vasakule (RTL)", +DlgDocLangCode : "Keele kood", +DlgDocCharSet : "Märgistiku kodeering", +DlgDocCharSetCE : "Kesk-Euroopa", +DlgDocCharSetCT : "Hiina traditsiooniline (Big5)", +DlgDocCharSetCR : "Kirillisa", +DlgDocCharSetGR : "Kreeka", +DlgDocCharSetJP : "Jaapani", +DlgDocCharSetKR : "Korea", +DlgDocCharSetTR : "Türgi", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Lääne-Euroopa", +DlgDocCharSetOther : "Ülejäänud märgistike kodeeringud", + +DlgDocDocType : "Dokumendi tüüppäis", +DlgDocDocTypeOther : "Teised dokumendi tüüppäised", +DlgDocIncXHTML : "Arva kaasa XHTML deklaratsioonid", +DlgDocBgColor : "Taustavärv", +DlgDocBgImage : "Taustapildi URL", +DlgDocBgNoScroll : "Mittekeritav tagataust", +DlgDocCText : "Tekst", +DlgDocCLink : "Link", +DlgDocCVisited : "Külastatud link", +DlgDocCActive : "Aktiivne link", +DlgDocMargins : "Lehekülje äärised", +DlgDocMaTop : "Ülaserv", +DlgDocMaLeft : "Vasakserv", +DlgDocMaRight : "Paremserv", +DlgDocMaBottom : "Alaserv", +DlgDocMeIndex : "Dokumendi võtmesõnad (eraldatud komadega)", +DlgDocMeDescr : "Dokumendi kirjeldus", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Autoriõigus", +DlgDocPreview : "Eelvaade", + +// Templates Dialog +Templates : "Šabloon", +DlgTemplatesTitle : "Sisu šabloonid", +DlgTemplatesSelMsg : "Palun vali šabloon, et avada see redaktoris
        (praegune sisu läheb kaotsi):", +DlgTemplatesLoading : "Laen šabloonide nimekirja. Palun oota...", +DlgTemplatesNoTpl : "(Ühtegi šablooni ei ole defineeritud)", +DlgTemplatesReplace : "Asenda tegelik sisu", + +// About Dialog +DlgAboutAboutTab : "Teave", +DlgAboutBrowserInfoTab : "Veebisirvija info", +DlgAboutLicenseTab : "Litsents", +DlgAboutVersion : "versioon", +DlgAboutInfo : "Täpsema info saamiseks mine" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/eu.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/eu.js new file mode 100644 index 0000000..8ccf938 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/eu.js @@ -0,0 +1,516 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Basque language file. + * Euskara hizkuntza fitxategia. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Estutu Tresna Barra", +ToolbarExpand : "Hedatu Tresna Barra", + +// Toolbar Items and Context Menu +Save : "Gorde", +NewPage : "Orrialde Berria", +Preview : "Aurrebista", +Cut : "Ebaki", +Copy : "Kopiatu", +Paste : "Itsatsi", +PasteText : "Itsatsi testu bezala", +PasteWord : "Itsatsi Word-etik", +Print : "Inprimatu", +SelectAll : "Hautatu dena", +RemoveFormat : "Kendu Formatoa", +InsertLinkLbl : "Esteka", +InsertLink : "Txertatu/Editatu Esteka", +RemoveLink : "Kendu Esteka", +Anchor : "Aingura", +AnchorDelete : "Ezabatu Aingura", +InsertImageLbl : "Irudia", +InsertImage : "Txertatu/Editatu Irudia", +InsertFlashLbl : "Flasha", +InsertFlash : "Txertatu/Editatu Flasha", +InsertTableLbl : "Taula", +InsertTable : "Txertatu/Editatu Taula", +InsertLineLbl : "Lerroa", +InsertLine : "Txertatu Marra Horizontala", +InsertSpecialCharLbl: "Karaktere Berezia", +InsertSpecialChar : "Txertatu Karaktere Berezia", +InsertSmileyLbl : "Aurpegierak", +InsertSmiley : "Txertatu Aurpegierak", +About : "FCKeditor-ri buruz", +Bold : "Lodia", +Italic : "Etzana", +Underline : "Azpimarratu", +StrikeThrough : "Marratua", +Subscript : "Azpi-indize", +Superscript : "Goi-indize", +LeftJustify : "Lerrokatu Ezkerrean", +CenterJustify : "Lerrokatu Erdian", +RightJustify : "Lerrokatu Eskuman", +BlockJustify : "Justifikatu", +DecreaseIndent : "Txikitu Koska", +IncreaseIndent : "Handitu Koska", +Blockquote : "Aipamen blokea", +Undo : "Desegin", +Redo : "Berregin", +NumberedListLbl : "Zenbakidun Zerrenda", +NumberedList : "Txertatu/Kendu Zenbakidun zerrenda", +BulletedListLbl : "Buletdun Zerrenda", +BulletedList : "Txertatu/Kendu Buletdun zerrenda", +ShowTableBorders : "Erakutsi Taularen Ertzak", +ShowDetails : "Erakutsi Xehetasunak", +Style : "Estiloa", +FontFormat : "Formatoa", +Font : "Letra-tipoa", +FontSize : "Tamaina", +TextColor : "Testu Kolorea", +BGColor : "Atzeko kolorea", +Source : "HTML Iturburua", +Find : "Bilatu", +Replace : "Ordezkatu", +SpellCheck : "Ortografia", +UniversalKeyboard : "Teklatu Unibertsala", +PageBreakLbl : "Orrialde-jauzia", +PageBreak : "Txertatu Orrialde-jauzia", + +Form : "Formularioa", +Checkbox : "Kontrol-laukia", +RadioButton : "Aukera-botoia", +TextField : "Testu Eremua", +Textarea : "Testu-area", +HiddenField : "Ezkutuko Eremua", +Button : "Botoia", +SelectionField : "Hautespen Eremua", +ImageButton : "Irudi Botoia", + +FitWindow : "Maximizatu editorearen tamaina", +ShowBlocks : "Blokeak erakutsi", + +// Context Menu +EditLink : "Aldatu Esteka", +CellCM : "Gelaxka", +RowCM : "Errenkada", +ColumnCM : "Zutabea", +InsertRowAfter : "Txertatu Lerroa Ostean", +InsertRowBefore : "Txertatu Lerroa Aurretik", +DeleteRows : "Ezabatu Errenkadak", +InsertColumnAfter : "Txertatu Zutabea Ostean", +InsertColumnBefore : "Txertatu Zutabea Aurretik", +DeleteColumns : "Ezabatu Zutabeak", +InsertCellAfter : "Txertatu Gelaxka Ostean", +InsertCellBefore : "Txertatu Gelaxka Aurretik", +DeleteCells : "Kendu Gelaxkak", +MergeCells : "Batu Gelaxkak", +MergeRight : "Elkartu Eskumara", +MergeDown : "Elkartu Behera", +HorizontalSplitCell : "Banatu Gelaxkak Horizontalki", +VerticalSplitCell : "Banatu Gelaxkak Bertikalki", +TableDelete : "Ezabatu Taula", +CellProperties : "Gelaxkaren Ezaugarriak", +TableProperties : "Taularen Ezaugarriak", +ImageProperties : "Irudiaren Ezaugarriak", +FlashProperties : "Flasharen Ezaugarriak", + +AnchorProp : "Ainguraren Ezaugarriak", +ButtonProp : "Botoiaren Ezaugarriak", +CheckboxProp : "Kontrol-laukiko Ezaugarriak", +HiddenFieldProp : "Ezkutuko Eremuaren Ezaugarriak", +RadioButtonProp : "Aukera-botoiaren Ezaugarriak", +ImageButtonProp : "Irudi Botoiaren Ezaugarriak", +TextFieldProp : "Testu Eremuaren Ezaugarriak", +SelectionFieldProp : "Hautespen Eremuaren Ezaugarriak", +TextareaProp : "Testu-arearen Ezaugarriak", +FormProp : "Formularioaren Ezaugarriak", + +FontFormats : "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)", + +// Alerts and Messages +ProcessingXHTML : "XHTML Prozesatzen. Itxaron mesedez...", +Done : "Eginda", +PasteWordConfirm : "Itsatsi nahi duzun textua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?", +NotCompatiblePaste : "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?", +UnknownToolbarItem : "Ataza barrako elementu ezezaguna \"%1\"", +UnknownCommand : "Komando izen ezezaguna \"%1\"", +NotImplemented : "Komando ez inplementatua", +UnknownToolbarSet : "Ataza barra \"%1\" taldea ez da existitzen", +NoActiveX : "Zure nabigatzailearen segustasun hobespenak editore honen zenbait ezaugarri mugatu ditzake. \"ActiveX kontrolak eta plug-inak\" aktibatu beharko zenituzke, bestela erroreak eta ezaugarrietan mugak egon daitezke.", +BrowseServerBlocked : "Baliabideen arakatzailea ezin da ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.", +DialogBlocked : "Ezin da elkarrizketa-leihoa ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.", + +// Dialogs +DlgBtnOK : "Ados", +DlgBtnCancel : "Utzi", +DlgBtnClose : "Itxi", +DlgBtnBrowseServer : "Zerbitzaria arakatu", +DlgAdvancedTag : "Aurreratua", +DlgOpOther : "", +DlgInfoTab : "Informazioa", +DlgAlertUrl : "Mesedez URLa idatzi ezazu", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Hizkuntzaren Norabidea", +DlgGenLangDirLtr : "Ezkerretik Eskumara(LTR)", +DlgGenLangDirRtl : "Eskumatik Ezkerrera (RTL)", +DlgGenLangCode : "Hizkuntza Kodea", +DlgGenAccessKey : "Sarbide-gakoa", +DlgGenName : "Izena", +DlgGenTabIndex : "Tabulazio Indizea", +DlgGenLongDescr : "URL Deskribapen Luzea", +DlgGenClass : "Estilo-orriko Klaseak", +DlgGenTitle : "Izenburua", +DlgGenContType : "Eduki Mota (Content Type)", +DlgGenLinkCharset : "Estekatutako Karaktere Multzoa", +DlgGenStyle : "Estiloa", + +// Image Dialog +DlgImgTitle : "Irudi Ezaugarriak", +DlgImgInfoTab : "Irudi informazioa", +DlgImgBtnUpload : "Zerbitzarira bidalia", +DlgImgURL : "URL", +DlgImgUpload : "Gora Kargatu", +DlgImgAlt : "Textu Alternatiboa", +DlgImgWidth : "Zabalera", +DlgImgHeight : "Altuera", +DlgImgLockRatio : "Erlazioa Blokeatu", +DlgBtnResetSize : "Tamaina Berrezarri", +DlgImgBorder : "Ertza", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Lerrokatu", +DlgImgAlignLeft : "Ezkerrera", +DlgImgAlignAbsBottom: "Abs Behean", +DlgImgAlignAbsMiddle: "Abs Erdian", +DlgImgAlignBaseline : "Oinan", +DlgImgAlignBottom : "Behean", +DlgImgAlignMiddle : "Erdian", +DlgImgAlignRight : "Eskuman", +DlgImgAlignTextTop : "Testua Goian", +DlgImgAlignTop : "Goian", +DlgImgPreview : "Aurrebista", +DlgImgAlertUrl : "Mesedez Irudiaren URLa idatzi", +DlgImgLinkTab : "Esteka", + +// Flash Dialog +DlgFlashTitle : "Flasharen Ezaugarriak", +DlgFlashChkPlay : "Automatikoki Erreproduzitu", +DlgFlashChkLoop : "Begizta", +DlgFlashChkMenu : "Flasharen Menua Gaitu", +DlgFlashScale : "Eskalatu", +DlgFlashScaleAll : "Dena erakutsi", +DlgFlashScaleNoBorder : "Ertzarik gabe", +DlgFlashScaleFit : "Doitu", + +// Link Dialog +DlgLnkWindowTitle : "Esteka", +DlgLnkInfoTab : "Estekaren Informazioa", +DlgLnkTargetTab : "Helburua", + +DlgLnkType : "Esteka Mota", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Aingura horrialde honentan", +DlgLnkTypeEMail : "ePosta", +DlgLnkProto : "Protokoloa", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Aingura bat hautatu", +DlgLnkAnchorByName : "Aingura izenagatik", +DlgLnkAnchorById : "Elementuaren ID-gatik", +DlgLnkNoAnchors : "(Ez daude aingurak eskuragarri dokumentuan)", +DlgLnkEMail : "ePosta Helbidea", +DlgLnkEMailSubject : "Mezuaren Gaia", +DlgLnkEMailBody : "Mezuaren Gorputza", +DlgLnkUpload : "Gora kargatu", +DlgLnkBtnUpload : "Zerbitzarira bidali", + +DlgLnkTarget : "Target (Helburua)", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Lehio Berria (_blank)", +DlgLnkTargetParent : "Lehio Gurasoa (_parent)", +DlgLnkTargetSelf : "Lehio Berdina (_self)", +DlgLnkTargetTop : "Goiko Lehioa (_top)", +DlgLnkTargetFrameName : "Marko Helburuaren Izena", +DlgLnkPopWinName : "Popup Lehioaren Izena", +DlgLnkPopWinFeat : "Popup Lehioaren Ezaugarriak", +DlgLnkPopResize : "Tamaina Aldakorra", +DlgLnkPopLocation : "Kokaleku Barra", +DlgLnkPopMenu : "Menu Barra", +DlgLnkPopScroll : "Korritze Barrak", +DlgLnkPopStatus : "Egoera Barra", +DlgLnkPopToolbar : "Tresna Barra", +DlgLnkPopFullScrn : "Pantaila Osoa (IE)", +DlgLnkPopDependent : "Menpekoa (Netscape)", +DlgLnkPopWidth : "Zabalera", +DlgLnkPopHeight : "Altuera", +DlgLnkPopLeft : "Ezkerreko Posizioa", +DlgLnkPopTop : "Goiko Posizioa", + +DlnLnkMsgNoUrl : "Mesedez URL esteka idatzi", +DlnLnkMsgNoEMail : "Mesedez ePosta helbidea idatzi", +DlnLnkMsgNoAnchor : "Mesedez aingura bat aukeratu", +DlnLnkMsgInvPopName : "Popup lehioaren izenak karaktere alfabetiko batekin hasi behar du eta eta ezin du zuriunerik izan", + +// Color Dialog +DlgColorTitle : "Kolore Aukeraketa", +DlgColorBtnClear : "Garbitu", +DlgColorHighlight : "Nabarmendu", +DlgColorSelected : "Aukeratuta", + +// Smiley Dialog +DlgSmileyTitle : "Aurpegiera Sartu", + +// Special Character Dialog +DlgSpecialCharTitle : "Karaktere Berezia Aukeratu", + +// Table Dialog +DlgTableTitle : "Taularen Ezaugarriak", +DlgTableRows : "Lerroak", +DlgTableColumns : "Zutabeak", +DlgTableBorder : "Ertzaren Zabalera", +DlgTableAlign : "Lerrokatu", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Ezkerrean", +DlgTableAlignCenter : "Erdian", +DlgTableAlignRight : "Eskuman", +DlgTableWidth : "Zabalera", +DlgTableWidthPx : "pixel", +DlgTableWidthPc : "ehuneko", +DlgTableHeight : "Altuera", +DlgTableCellSpace : "Gelaxka arteko tartea", +DlgTableCellPad : "Gelaxken betegarria", +DlgTableCaption : "Epigrafea", +DlgTableSummary : "Laburpena", + +// Table Cell Dialog +DlgCellTitle : "Gelaxken Ezaugarriak", +DlgCellWidth : "Zabalera", +DlgCellWidthPx : "pixel", +DlgCellWidthPc : "ehuneko", +DlgCellHeight : "Altuera", +DlgCellWordWrap : "Itzulbira", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Bai", +DlgCellWordWrapNo : "Ez", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Ezkerrean", +DlgCellHorAlignCenter : "Erdian", +DlgCellHorAlignRight: "Eskuman", +DlgCellVerAlign : "Lerrokatu Bertikalki", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Goian", +DlgCellVerAlignMiddle : "Erdian", +DlgCellVerAlignBottom : "Behean", +DlgCellVerAlignBaseline : "Oinan", +DlgCellRowSpan : "Lerroak Hedatu", +DlgCellCollSpan : "Zutabeak Hedatu", +DlgCellBackColor : "Atzeko Kolorea", +DlgCellBorderColor : "Ertzako Kolorea", +DlgCellBtnSelect : "Aukertau...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Bilatu eta Ordeztu", + +// Find Dialog +DlgFindTitle : "Bilaketa", +DlgFindFindBtn : "Bilatu", +DlgFindNotFoundMsg : "Idatzitako testua ez da topatu.", + +// Replace Dialog +DlgReplaceTitle : "Ordeztu", +DlgReplaceFindLbl : "Zer bilatu:", +DlgReplaceReplaceLbl : "Zerekin ordeztu:", +DlgReplaceCaseChk : "Maiuskula/minuskula", +DlgReplaceReplaceBtn : "Ordeztu", +DlgReplaceReplAllBtn : "Ordeztu Guztiak", +DlgReplaceWordChk : "Esaldi osoa bilatu", + +// Paste Operations / Dialog +PasteErrorCut : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).", +PasteErrorCopy : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).", + +PasteAsText : "Testu Arrunta bezala Itsatsi", +PasteFromWord : "Word-etik itsatsi", + +DlgPasteMsg2 : "Mesedez teklatua erabilita (Ctrl+V) ondorego eremuan testua itsatsi eta OK sakatu.", +DlgPasteSec : "Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.", +DlgPasteIgnoreFont : "Letra Motaren definizioa ezikusi", +DlgPasteRemoveStyles : "Estilo definizioak kendu", + +// Color Picker +ColorAutomatic : "Automatikoa", +ColorMoreColors : "Kolore gehiago...", + +// Document Properties +DocProps : "Dokumentuaren Ezarpenak", + +// Anchor Dialog +DlgAnchorTitle : "Ainguraren Ezaugarriak", +DlgAnchorName : "Ainguraren Izena", +DlgAnchorErrorName : "Idatzi ainguraren izena", + +// Speller Pages Dialog +DlgSpellNotInDic : "Ez dago hiztegian", +DlgSpellChangeTo : "Honekin ordezkatu", +DlgSpellBtnIgnore : "Ezikusi", +DlgSpellBtnIgnoreAll : "Denak Ezikusi", +DlgSpellBtnReplace : "Ordezkatu", +DlgSpellBtnReplaceAll : "Denak Ordezkatu", +DlgSpellBtnUndo : "Desegin", +DlgSpellNoSuggestions : "- Iradokizunik ez -", +DlgSpellProgress : "Zuzenketa ortografikoa martxan...", +DlgSpellNoMispell : "Zuzenketa ortografikoa bukatuta: Akatsik ez", +DlgSpellNoChanges : "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu", +DlgSpellOneChange : "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da", +DlgSpellManyChanges : "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira", + +IeSpellDownload : "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?", + +// Button Dialog +DlgButtonText : "Testua (Balorea)", +DlgButtonType : "Mota", +DlgButtonTypeBtn : "Botoia", +DlgButtonTypeSbm : "Bidali", +DlgButtonTypeRst : "Garbitu", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Izena", +DlgCheckboxValue : "Balorea", +DlgCheckboxSelected : "Hautatuta", + +// Form Dialog +DlgFormName : "Izena", +DlgFormAction : "Ekintza", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Izena", +DlgSelectValue : "Balorea", +DlgSelectSize : "Tamaina", +DlgSelectLines : "lerro kopurura", +DlgSelectChkMulti : "Hautaketa anitzak baimendu", +DlgSelectOpAvail : "Aukera Eskuragarriak", +DlgSelectOpText : "Testua", +DlgSelectOpValue : "Balorea", +DlgSelectBtnAdd : "Gehitu", +DlgSelectBtnModify : "Aldatu", +DlgSelectBtnUp : "Gora", +DlgSelectBtnDown : "Behera", +DlgSelectBtnSetValue : "Aukeratutako balorea ezarri", +DlgSelectBtnDelete : "Ezabatu", + +// Textarea Dialog +DlgTextareaName : "Izena", +DlgTextareaCols : "Zutabeak", +DlgTextareaRows : "Lerroak", + +// Text Field Dialog +DlgTextName : "Izena", +DlgTextValue : "Balorea", +DlgTextCharWidth : "Zabalera", +DlgTextMaxChars : "Zenbat karaktere gehienez", +DlgTextType : "Mota", +DlgTextTypeText : "Testua", +DlgTextTypePass : "Pasahitza", + +// Hidden Field Dialog +DlgHiddenName : "Izena", +DlgHiddenValue : "Balorea", + +// Bulleted List Dialog +BulletedListProp : "Buletdun Zerrendaren Ezarpenak", +NumberedListProp : "Zenbakidun Zerrendaren Ezarpenak", +DlgLstStart : "Hasiera", +DlgLstType : "Mota", +DlgLstTypeCircle : "Zirkulua", +DlgLstTypeDisc : "Diskoa", +DlgLstTypeSquare : "Karratua", +DlgLstTypeNumbers : "Zenbakiak (1, 2, 3)", +DlgLstTypeLCase : "Letra xeheak (a, b, c)", +DlgLstTypeUCase : "Letra larriak (A, B, C)", +DlgLstTypeSRoman : "Erromatar zenbaki zeheak (i, ii, iii)", +DlgLstTypeLRoman : "Erromatar zenbaki larriak (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Orokorra", +DlgDocBackTab : "Atzekaldea", +DlgDocColorsTab : "Koloreak eta Marjinak", +DlgDocMetaTab : "Meta Informazioa", + +DlgDocPageTitle : "Orriaren Izenburua", +DlgDocLangDir : "Hizkuntzaren Norabidea", +DlgDocLangDirLTR : "Ezkerretik eskumara (LTR)", +DlgDocLangDirRTL : "Eskumatik ezkerrera (RTL)", +DlgDocLangCode : "Hizkuntzaren Kodea", +DlgDocCharSet : "Karaktere Multzoaren Kodeketa", +DlgDocCharSetCE : "Erdialdeko Europakoa", +DlgDocCharSetCT : "Txinatar Tradizionala (Big5)", +DlgDocCharSetCR : "Zirilikoa", +DlgDocCharSetGR : "Grekoa", +DlgDocCharSetJP : "Japoniarra", +DlgDocCharSetKR : "Korearra", +DlgDocCharSetTR : "Turkiarra", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Mendebaldeko Europakoa", +DlgDocCharSetOther : "Beste Karaktere Multzoko Kodeketa", + +DlgDocDocType : "Document Type Goiburua", +DlgDocDocTypeOther : "Beste Document Type Goiburua", +DlgDocIncXHTML : "XHTML Ezarpenak", +DlgDocBgColor : "Atzeko Kolorea", +DlgDocBgImage : "Atzeko Irudiaren URL-a", +DlgDocBgNoScroll : "Korritze gabeko Atzekaldea", +DlgDocCText : "Testua", +DlgDocCLink : "Estekak", +DlgDocCVisited : "Bisitatutako Estekak", +DlgDocCActive : "Esteka Aktiboa", +DlgDocMargins : "Orrialdearen marjinak", +DlgDocMaTop : "Goian", +DlgDocMaLeft : "Ezkerrean", +DlgDocMaRight : "Eskuman", +DlgDocMaBottom : "Behean", +DlgDocMeIndex : "Dokumentuaren Gako-hitzak (komarekin bananduta)", +DlgDocMeDescr : "Dokumentuaren Deskribapena", +DlgDocMeAuthor : "Egilea", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Aurrebista", + +// Templates Dialog +Templates : "Txantiloiak", +DlgTemplatesTitle : "Eduki Txantiloiak", +DlgTemplatesSelMsg : "Mesedez txantiloia aukeratu editorean kargatzeko
        (orain dauden edukiak galduko dira):", +DlgTemplatesLoading : "Txantiloiak kargatzen. Itxaron mesedez...", +DlgTemplatesNoTpl : "(Ez dago definitutako txantiloirik)", +DlgTemplatesReplace : "Ordeztu oraingo edukiak", + +// About Dialog +DlgAboutAboutTab : "Honi buruz", +DlgAboutBrowserInfoTab : "Nabigatzailearen Informazioa", +DlgAboutLicenseTab : "Lizentzia", +DlgAboutVersion : "bertsioa", +DlgAboutInfo : "Informazio gehiago eskuratzeko hona joan" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/fa.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fa.js new file mode 100644 index 0000000..f7945a8 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fa.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Persian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "rtl", + +ToolbarCollapse : "برچیدن نوارابزار", +ToolbarExpand : "گستردن نوارابزار", + +// Toolbar Items and Context Menu +Save : "ذخیره", +NewPage : "برگهٴ تازه", +Preview : "پیش‌نمایش", +Cut : "برش", +Copy : "کپی", +Paste : "چسباندن", +PasteText : "چسباندن به عنوان متن ِساده", +PasteWord : "چسباندن از Word", +Print : "چاپ", +SelectAll : "گزینش همه", +RemoveFormat : "برداشتن فرمت", +InsertLinkLbl : "پیوند", +InsertLink : "گنجاندن/ویرایش ِپیوند", +RemoveLink : "برداشتن پیوند", +Anchor : "گنجاندن/ویرایش ِلنگر", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "تصویر", +InsertImage : "گنجاندن/ویرایش ِتصویر", +InsertFlashLbl : "Flash", +InsertFlash : "گنجاندن/ویرایش ِFlash", +InsertTableLbl : "جدول", +InsertTable : "گنجاندن/ویرایش ِجدول", +InsertLineLbl : "خط", +InsertLine : "گنجاندن خط ِافقی", +InsertSpecialCharLbl: "نویسهٴ ویژه", +InsertSpecialChar : "گنجاندن نویسهٴ ویژه", +InsertSmileyLbl : "خندانک", +InsertSmiley : "گنجاندن خندانک", +About : "دربارهٴ FCKeditor", +Bold : "درشت", +Italic : "خمیده", +Underline : "خط‌زیردار", +StrikeThrough : "میان‌خط", +Subscript : "زیرنویس", +Superscript : "بالانویس", +LeftJustify : "چپ‌چین", +CenterJustify : "میان‌چین", +RightJustify : "راست‌چین", +BlockJustify : "بلوک‌چین", +DecreaseIndent : "کاهش تورفتگی", +IncreaseIndent : "افزایش تورفتگی", +Blockquote : "Blockquote", //MISSING +Undo : "واچیدن", +Redo : "بازچیدن", +NumberedListLbl : "فهرست شماره‌دار", +NumberedList : "گنجاندن/برداشتن فهرست شماره‌دار", +BulletedListLbl : "فهرست نقطه‌ای", +BulletedList : "گنجاندن/برداشتن فهرست نقطه‌ای", +ShowTableBorders : "نمایش لبهٴ جدول", +ShowDetails : "نمایش جزئیات", +Style : "سبک", +FontFormat : "فرمت", +Font : "قلم", +FontSize : "اندازه", +TextColor : "رنگ متن", +BGColor : "رنگ پس‌زمینه", +Source : "منبع", +Find : "جستجو", +Replace : "جایگزینی", +SpellCheck : "بررسی املا", +UniversalKeyboard : "صفحه‌کلید جهانی", +PageBreakLbl : "شکستگی ِپایان ِبرگه", +PageBreak : "گنجاندن شکستگی ِپایان ِبرگه", + +Form : "فرم", +Checkbox : "خانهٴ گزینه‌ای", +RadioButton : "دکمهٴ رادیویی", +TextField : "فیلد متنی", +Textarea : "ناحیهٴ متنی", +HiddenField : "فیلد پنهان", +Button : "دکمه", +SelectionField : "فیلد چندگزینه‌ای", +ImageButton : "دکمهٴ تصویری", + +FitWindow : "بیشینه‌سازی ِاندازهٴ ویرایشگر", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "ویرایش پیوند", +CellCM : "سلول", +RowCM : "سطر", +ColumnCM : "ستون", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "حذف سطرها", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "حذف ستونها", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "حذف سلولها", +MergeCells : "ادغام سلولها", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "پاک‌کردن جدول", +CellProperties : "ویژگیهای سلول", +TableProperties : "ویژگیهای جدول", +ImageProperties : "ویژگیهای تصویر", +FlashProperties : "ویژگیهای Flash", + +AnchorProp : "ویژگیهای لنگر", +ButtonProp : "ویژگیهای دکمه", +CheckboxProp : "ویژگیهای خانهٴ گزینه‌ای", +HiddenFieldProp : "ویژگیهای فیلد پنهان", +RadioButtonProp : "ویژگیهای دکمهٴ رادیویی", +ImageButtonProp : "ویژگیهای دکمهٴ تصویری", +TextFieldProp : "ویژگیهای فیلد متنی", +SelectionFieldProp : "ویژگیهای فیلد چندگزینه‌ای", +TextareaProp : "ویژگیهای ناحیهٴ متنی", +FormProp : "ویژگیهای فرم", + +FontFormats : "نرمال;فرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)", + +// Alerts and Messages +ProcessingXHTML : "پردازش XHTML. لطفا صبر کنید...", +Done : "انجام شد", +PasteWordConfirm : "متنی که می‌خواهید بچسبانید به نظر می‌رسد از Word کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟", +NotCompatiblePaste : "این فرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا می‌خواهید بدون پاک‌سازی، متن را بچسبانید؟", +UnknownToolbarItem : "فقرهٴ نوارابزار ناشناخته \"%1\"", +UnknownCommand : "نام دستور ناشناخته \"%1\"", +NotImplemented : "دستور پیاده‌سازی‌نشده", +UnknownToolbarSet : "مجموعهٴ نوارابزار \"%1\" وجود ندارد", +NoActiveX : "تنظیمات امنیتی مرورگر شما ممکن است در بعضی از ویژگیهای مرورگر محدودیت ایجاد کند. شما باید گزینهٴ \"Run ActiveX controls and plug-ins\" را فعال کنید. ممکن است شما با خطاهایی روبرو باشید و متوجه کمبود ویژگیهایی شوید.", +BrowseServerBlocked : "توانایی بازگشایی مرورگر منابع فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.", +DialogBlocked : "توانایی بازگشایی پنجرهٴ کوچک ِگفتگو فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.", + +// Dialogs +DlgBtnOK : "پذیرش", +DlgBtnCancel : "انصراف", +DlgBtnClose : "بستن", +DlgBtnBrowseServer : "فهرست‌نمایی سرور", +DlgAdvancedTag : "پیشرفته", +DlgOpOther : "<غیره>", +DlgInfoTab : "اطلاعات", +DlgAlertUrl : "لطفاً URL را بنویسید", + +// General Dialogs Labels +DlgGenNotSet : "<تعین‌نشده>", +DlgGenId : "شناسه", +DlgGenLangDir : "جهت‌نمای زبان", +DlgGenLangDirLtr : "چپ به راست (LTR)", +DlgGenLangDirRtl : "راست به چپ (RTL)", +DlgGenLangCode : "کد زبان", +DlgGenAccessKey : "کلید دستیابی", +DlgGenName : "نام", +DlgGenTabIndex : "نمایهٴ دسترسی با Tab", +DlgGenLongDescr : "URL توصیف طولانی", +DlgGenClass : "کلاسهای شیوه‌نامه(Stylesheet)", +DlgGenTitle : "عنوان کمکی", +DlgGenContType : "نوع محتوای کمکی", +DlgGenLinkCharset : "نویسه‌گان منبع ِپیوندشده", +DlgGenStyle : "شیوه(style)", + +// Image Dialog +DlgImgTitle : "ویژگیهای تصویر", +DlgImgInfoTab : "اطلاعات تصویر", +DlgImgBtnUpload : "به سرور بفرست", +DlgImgURL : "URL", +DlgImgUpload : "انتقال به سرور", +DlgImgAlt : "متن جایگزین", +DlgImgWidth : "پهنا", +DlgImgHeight : "درازا", +DlgImgLockRatio : "قفل‌کردن ِنسبت", +DlgBtnResetSize : "بازنشانی اندازه", +DlgImgBorder : "لبه", +DlgImgHSpace : "فاصلهٴ افقی", +DlgImgVSpace : "فاصلهٴ عمودی", +DlgImgAlign : "چینش", +DlgImgAlignLeft : "چپ", +DlgImgAlignAbsBottom: "پائین مطلق", +DlgImgAlignAbsMiddle: "وسط مطلق", +DlgImgAlignBaseline : "خط‌پایه", +DlgImgAlignBottom : "پائین", +DlgImgAlignMiddle : "وسط", +DlgImgAlignRight : "راست", +DlgImgAlignTextTop : "متن بالا", +DlgImgAlignTop : "بالا", +DlgImgPreview : "پیش‌نمایش", +DlgImgAlertUrl : "لطفا URL تصویر را بنویسید", +DlgImgLinkTab : "پیوند", + +// Flash Dialog +DlgFlashTitle : "ویژگیهای Flash", +DlgFlashChkPlay : "آغاز ِخودکار", +DlgFlashChkLoop : "اجرای پیاپی", +DlgFlashChkMenu : "دردسترس‌بودن منوی Flash", +DlgFlashScale : "مقیاس", +DlgFlashScaleAll : "نمایش همه", +DlgFlashScaleNoBorder : "بدون کران", +DlgFlashScaleFit : "جایگیری کامل", + +// Link Dialog +DlgLnkWindowTitle : "پیوند", +DlgLnkInfoTab : "اطلاعات پیوند", +DlgLnkTargetTab : "مقصد", + +DlgLnkType : "نوع پیوند", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "لنگر در همین صفحه", +DlgLnkTypeEMail : "پست الکترونیکی", +DlgLnkProto : "پروتکل", +DlgLnkProtoOther : "<دیگر>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "یک لنگر برگزینید", +DlgLnkAnchorByName : "با نام لنگر", +DlgLnkAnchorById : "با شناسهٴ المان", +DlgLnkNoAnchors : "(در این سند لنگری دردسترس نیست)", +DlgLnkEMail : "نشانی پست الکترونیکی", +DlgLnkEMailSubject : "موضوع پیام", +DlgLnkEMailBody : "متن پیام", +DlgLnkUpload : "انتقال به سرور", +DlgLnkBtnUpload : "به سرور بفرست", + +DlgLnkTarget : "مقصد", +DlgLnkTargetFrame : "<فریم>", +DlgLnkTargetPopup : "<پنجرهٴ پاپاپ>", +DlgLnkTargetBlank : "پنجرهٴ دیگر (_blank)", +DlgLnkTargetParent : "پنجرهٴ والد (_parent)", +DlgLnkTargetSelf : "همان پنجره (_self)", +DlgLnkTargetTop : "بالاترین پنجره (_top)", +DlgLnkTargetFrameName : "نام فریم مقصد", +DlgLnkPopWinName : "نام پنجرهٴ پاپاپ", +DlgLnkPopWinFeat : "ویژگیهای پنجرهٴ پاپاپ", +DlgLnkPopResize : "قابل تغییر اندازه", +DlgLnkPopLocation : "نوار موقعیت", +DlgLnkPopMenu : "نوار منو", +DlgLnkPopScroll : "میله‌های پیمایش", +DlgLnkPopStatus : "نوار وضعیت", +DlgLnkPopToolbar : "نوارابزار", +DlgLnkPopFullScrn : "تمام‌صفحه (IE)", +DlgLnkPopDependent : "وابسته (Netscape)", +DlgLnkPopWidth : "پهنا", +DlgLnkPopHeight : "درازا", +DlgLnkPopLeft : "موقعیت ِچپ", +DlgLnkPopTop : "موقعیت ِبالا", + +DlnLnkMsgNoUrl : "لطفا URL پیوند را بنویسید", +DlnLnkMsgNoEMail : "لطفا نشانی پست الکترونیکی را بنویسید", +DlnLnkMsgNoAnchor : "لطفا لنگری را برگزینید", +DlnLnkMsgInvPopName : "نام پنجرهٴ پاپاپ باید با یک نویسهٴ الفبایی آغاز گردد و نباید فاصله‌های خالی در آن باشند", + +// Color Dialog +DlgColorTitle : "گزینش رنگ", +DlgColorBtnClear : "پاک‌کردن", +DlgColorHighlight : "نمونه", +DlgColorSelected : "برگزیده", + +// Smiley Dialog +DlgSmileyTitle : "گنجاندن خندانک", + +// Special Character Dialog +DlgSpecialCharTitle : "گزینش نویسهٴ‌ویژه", + +// Table Dialog +DlgTableTitle : "ویژگیهای جدول", +DlgTableRows : "سطرها", +DlgTableColumns : "ستونها", +DlgTableBorder : "اندازهٴ لبه", +DlgTableAlign : "چینش", +DlgTableAlignNotSet : "<تعین‌نشده>", +DlgTableAlignLeft : "چپ", +DlgTableAlignCenter : "وسط", +DlgTableAlignRight : "راست", +DlgTableWidth : "پهنا", +DlgTableWidthPx : "پیکسل", +DlgTableWidthPc : "درصد", +DlgTableHeight : "درازا", +DlgTableCellSpace : "فاصلهٴ میان سلولها", +DlgTableCellPad : "فاصلهٴ پرشده در سلول", +DlgTableCaption : "عنوان", +DlgTableSummary : "خلاصه", + +// Table Cell Dialog +DlgCellTitle : "ویژگیهای سلول", +DlgCellWidth : "پهنا", +DlgCellWidthPx : "پیکسل", +DlgCellWidthPc : "درصد", +DlgCellHeight : "درازا", +DlgCellWordWrap : "شکستن واژه‌ها", +DlgCellWordWrapNotSet : "<تعین‌نشده>", +DlgCellWordWrapYes : "بله", +DlgCellWordWrapNo : "خیر", +DlgCellHorAlign : "چینش ِافقی", +DlgCellHorAlignNotSet : "<تعین‌نشده>", +DlgCellHorAlignLeft : "چپ", +DlgCellHorAlignCenter : "وسط", +DlgCellHorAlignRight: "راست", +DlgCellVerAlign : "چینش ِعمودی", +DlgCellVerAlignNotSet : "<تعین‌نشده>", +DlgCellVerAlignTop : "بالا", +DlgCellVerAlignMiddle : "میان", +DlgCellVerAlignBottom : "پائین", +DlgCellVerAlignBaseline : "خط‌پایه", +DlgCellRowSpan : "گستردگی سطرها", +DlgCellCollSpan : "گستردگی ستونها", +DlgCellBackColor : "رنگ پس‌زمینه", +DlgCellBorderColor : "رنگ لبه", +DlgCellBtnSelect : "برگزینید...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "یافتن", +DlgFindFindBtn : "یافتن", +DlgFindNotFoundMsg : "متن موردنظر یافت نشد.", + +// Replace Dialog +DlgReplaceTitle : "جایگزینی", +DlgReplaceFindLbl : "چه‌چیز را می‌یابید:", +DlgReplaceReplaceLbl : "جایگزینی با:", +DlgReplaceCaseChk : "همسانی در بزرگی و کوچکی نویسه‌ها", +DlgReplaceReplaceBtn : "جایگزینی", +DlgReplaceReplAllBtn : "جایگزینی همهٴ یافته‌ها", +DlgReplaceWordChk : "همسانی با واژهٴ کامل", + +// Paste Operations / Dialog +PasteErrorCut : "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+X).", +PasteErrorCopy : "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای کپی‌کردن را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+C).", + +PasteAsText : "چسباندن به عنوان متن ِساده", +PasteFromWord : "چسباندن از Word", + +DlgPasteMsg2 : "لطفا متن را با کلیدهای (Ctrl+V) در این جعبهٴ متنی بچسبانید و پذیرش را بزنید.", +DlgPasteSec : "به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمی‌تواند دسترسی مستقیم به داده‌های clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.", +DlgPasteIgnoreFont : "چشم‌پوشی از تعاریف نوع قلم", +DlgPasteRemoveStyles : "چشم‌پوشی از تعاریف سبک (style)", + +// Color Picker +ColorAutomatic : "خودکار", +ColorMoreColors : "رنگهای بیشتر...", + +// Document Properties +DocProps : "ویژگیهای سند", + +// Anchor Dialog +DlgAnchorTitle : "ویژگیهای لنگر", +DlgAnchorName : "نام لنگر", +DlgAnchorErrorName : "لطفا نام لنگر را بنویسید", + +// Speller Pages Dialog +DlgSpellNotInDic : "در واژه‌نامه یافت نشد", +DlgSpellChangeTo : "تغییر به", +DlgSpellBtnIgnore : "چشم‌پوشی", +DlgSpellBtnIgnoreAll : "چشم‌پوشی همه", +DlgSpellBtnReplace : "جایگزینی", +DlgSpellBtnReplaceAll : "جایگزینی همه", +DlgSpellBtnUndo : "واچینش", +DlgSpellNoSuggestions : "- پیشنهادی نیست -", +DlgSpellProgress : "بررسی املا در حال انجام...", +DlgSpellNoMispell : "بررسی املا انجام شد. هیچ غلط‌املائی یافت نشد", +DlgSpellNoChanges : "بررسی املا انجام شد. هیچ واژه‌ای تغییر نیافت", +DlgSpellOneChange : "بررسی املا انجام شد. یک واژه تغییر یافت", +DlgSpellManyChanges : "بررسی املا انجام شد. %1 واژه تغییر یافت", + +IeSpellDownload : "بررسی‌کنندهٴ املا نصب نشده است. آیا می‌خواهید آن را هم‌اکنون دریافت کنید؟", + +// Button Dialog +DlgButtonText : "متن (مقدار)", +DlgButtonType : "نوع", +DlgButtonTypeBtn : "دکمه", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "بازنشانی (Reset)", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "نام", +DlgCheckboxValue : "مقدار", +DlgCheckboxSelected : "برگزیده", + +// Form Dialog +DlgFormName : "نام", +DlgFormAction : "رویداد", +DlgFormMethod : "متد", + +// Select Field Dialog +DlgSelectName : "نام", +DlgSelectValue : "مقدار", +DlgSelectSize : "اندازه", +DlgSelectLines : "خطوط", +DlgSelectChkMulti : "گزینش چندگانه فراهم باشد", +DlgSelectOpAvail : "گزینه‌های دردسترس", +DlgSelectOpText : "متن", +DlgSelectOpValue : "مقدار", +DlgSelectBtnAdd : "افزودن", +DlgSelectBtnModify : "ویرایش", +DlgSelectBtnUp : "بالا", +DlgSelectBtnDown : "پائین", +DlgSelectBtnSetValue : "تنظیم به عنوان مقدار ِبرگزیده", +DlgSelectBtnDelete : "پاک‌کردن", + +// Textarea Dialog +DlgTextareaName : "نام", +DlgTextareaCols : "ستونها", +DlgTextareaRows : "سطرها", + +// Text Field Dialog +DlgTextName : "نام", +DlgTextValue : "مقدار", +DlgTextCharWidth : "پهنای نویسه", +DlgTextMaxChars : "بیشینهٴ نویسه‌ها", +DlgTextType : "نوع", +DlgTextTypeText : "متن", +DlgTextTypePass : "گذرواژه", + +// Hidden Field Dialog +DlgHiddenName : "نام", +DlgHiddenValue : "مقدار", + +// Bulleted List Dialog +BulletedListProp : "ویژگیهای فهرست نقطه‌ای", +NumberedListProp : "ویژگیهای فهرست شماره‌دار", +DlgLstStart : "آغاز", +DlgLstType : "نوع", +DlgLstTypeCircle : "دایره", +DlgLstTypeDisc : "قرص", +DlgLstTypeSquare : "چهارگوش", +DlgLstTypeNumbers : "شماره‌ها (1، 2، 3)", +DlgLstTypeLCase : "نویسه‌های کوچک (a، b، c)", +DlgLstTypeUCase : "نویسه‌های بزرگ (A، B، C)", +DlgLstTypeSRoman : "شمارگان رومی کوچک (i، ii، iii)", +DlgLstTypeLRoman : "شمارگان رومی بزرگ (I، II، III)", + +// Document Properties Dialog +DlgDocGeneralTab : "عمومی", +DlgDocBackTab : "پس‌زمینه", +DlgDocColorsTab : "رنگها و حاشیه‌ها", +DlgDocMetaTab : "فراداده", + +DlgDocPageTitle : "عنوان صفحه", +DlgDocLangDir : "جهت زبان", +DlgDocLangDirLTR : "چپ به راست (LTR(", +DlgDocLangDirRTL : "راست به چپ (RTL(", +DlgDocLangCode : "کد زبان", +DlgDocCharSet : "رمزگذاری نویسه‌گان", +DlgDocCharSetCE : "اروپای مرکزی", +DlgDocCharSetCT : "چینی رسمی (Big5)", +DlgDocCharSetCR : "سیریلیک", +DlgDocCharSetGR : "یونانی", +DlgDocCharSetJP : "ژاپنی", +DlgDocCharSetKR : "کره‌ای", +DlgDocCharSetTR : "ترکی", +DlgDocCharSetUN : "یونیکُد (UTF-8)", +DlgDocCharSetWE : "اروپای غربی", +DlgDocCharSetOther : "رمزگذاری نویسه‌گان دیگر", + +DlgDocDocType : "عنوان نوع سند", +DlgDocDocTypeOther : "عنوان نوع سند دیگر", +DlgDocIncXHTML : "شامل تعاریف XHTML", +DlgDocBgColor : "رنگ پس‌زمینه", +DlgDocBgImage : "URL تصویر پس‌زمینه", +DlgDocBgNoScroll : "پس‌زمینهٴ پیمایش‌ناپذیر", +DlgDocCText : "متن", +DlgDocCLink : "پیوند", +DlgDocCVisited : "پیوند مشاهده‌شده", +DlgDocCActive : "پیوند فعال", +DlgDocMargins : "حاشیه‌های صفحه", +DlgDocMaTop : "بالا", +DlgDocMaLeft : "چپ", +DlgDocMaRight : "راست", +DlgDocMaBottom : "پایین", +DlgDocMeIndex : "کلیدواژگان نمایه‌گذاری سند (با کاما جدا شوند)", +DlgDocMeDescr : "توصیف سند", +DlgDocMeAuthor : "نویسنده", +DlgDocMeCopy : "کپی‌رایت", +DlgDocPreview : "پیش‌نمایش", + +// Templates Dialog +Templates : "الگوها", +DlgTemplatesTitle : "الگوهای محتویات", +DlgTemplatesSelMsg : "لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید
        (محتویات کنونی از دست خواهند رفت):", +DlgTemplatesLoading : "بارگذاری فهرست الگوها. لطفا صبر کنید...", +DlgTemplatesNoTpl : "(الگوئی تعریف نشده است)", +DlgTemplatesReplace : "محتویات کنونی جایگزین شوند", + +// About Dialog +DlgAboutAboutTab : "درباره", +DlgAboutBrowserInfoTab : "اطلاعات مرورگر", +DlgAboutLicenseTab : "گواهینامه", +DlgAboutVersion : "نگارش", +DlgAboutInfo : "برای آگاهی بیشتر به این نشانی بروید" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/fi.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fi.js new file mode 100644 index 0000000..35054c1 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fi.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Finnish language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Piilota työkalurivi", +ToolbarExpand : "Näytä työkalurivi", + +// Toolbar Items and Context Menu +Save : "Tallenna", +NewPage : "Tyhjennä", +Preview : "Esikatsele", +Cut : "Leikkaa", +Copy : "Kopioi", +Paste : "Liitä", +PasteText : "Liitä tekstinä", +PasteWord : "Liitä Wordista", +Print : "Tulosta", +SelectAll : "Valitse kaikki", +RemoveFormat : "Poista muotoilu", +InsertLinkLbl : "Linkki", +InsertLink : "Lisää linkki/muokkaa linkkiä", +RemoveLink : "Poista linkki", +Anchor : "Lisää ankkuri/muokkaa ankkuria", +AnchorDelete : "Poista ankkuri", +InsertImageLbl : "Kuva", +InsertImage : "Lisää kuva/muokkaa kuvaa", +InsertFlashLbl : "Flash", +InsertFlash : "Lisää/muokkaa Flashia", +InsertTableLbl : "Taulu", +InsertTable : "Lisää taulu/muokkaa taulua", +InsertLineLbl : "Murtoviiva", +InsertLine : "Lisää murtoviiva", +InsertSpecialCharLbl: "Erikoismerkki", +InsertSpecialChar : "Lisää erikoismerkki", +InsertSmileyLbl : "Hymiö", +InsertSmiley : "Lisää hymiö", +About : "FCKeditorista", +Bold : "Lihavoitu", +Italic : "Kursivoitu", +Underline : "Alleviivattu", +StrikeThrough : "Yliviivattu", +Subscript : "Alaindeksi", +Superscript : "Yläindeksi", +LeftJustify : "Tasaa vasemmat reunat", +CenterJustify : "Keskitä", +RightJustify : "Tasaa oikeat reunat", +BlockJustify : "Tasaa molemmat reunat", +DecreaseIndent : "Pienennä sisennystä", +IncreaseIndent : "Suurenna sisennystä", +Blockquote : "Lainaus", +Undo : "Kumoa", +Redo : "Toista", +NumberedListLbl : "Numerointi", +NumberedList : "Lisää/poista numerointi", +BulletedListLbl : "Luottelomerkit", +BulletedList : "Lisää/poista luottelomerkit", +ShowTableBorders : "Näytä taulun rajat", +ShowDetails : "Näytä muotoilu", +Style : "Tyyli", +FontFormat : "Muotoilu", +Font : "Fontti", +FontSize : "Koko", +TextColor : "Tekstiväri", +BGColor : "Taustaväri", +Source : "Koodi", +Find : "Etsi", +Replace : "Korvaa", +SpellCheck : "Tarkista oikeinkirjoitus", +UniversalKeyboard : "Universaali näppäimistö", +PageBreakLbl : "Sivun vaihto", +PageBreak : "Lisää sivun vaihto", + +Form : "Lomake", +Checkbox : "Valintaruutu", +RadioButton : "Radiopainike", +TextField : "Tekstikenttä", +Textarea : "Tekstilaatikko", +HiddenField : "Piilokenttä", +Button : "Painike", +SelectionField : "Valintakenttä", +ImageButton : "Kuvapainike", + +FitWindow : "Suurenna editori koko ikkunaan", +ShowBlocks : "Näytä elementit", + +// Context Menu +EditLink : "Muokkaa linkkiä", +CellCM : "Solu", +RowCM : "Rivi", +ColumnCM : "Sarake", +InsertRowAfter : "Lisää rivi alapuolelle", +InsertRowBefore : "Lisää rivi yläpuolelle", +DeleteRows : "Poista rivit", +InsertColumnAfter : "Lisää sarake oikealle", +InsertColumnBefore : "Lisää sarake vasemmalle", +DeleteColumns : "Poista sarakkeet", +InsertCellAfter : "Lisää solu perään", +InsertCellBefore : "Lisää solu eteen", +DeleteCells : "Poista solut", +MergeCells : "Yhdistä solut", +MergeRight : "Yhdistä oikealla olevan kanssa", +MergeDown : "Yhdistä alla olevan kanssa", +HorizontalSplitCell : "Jaa solu vaakasuunnassa", +VerticalSplitCell : "Jaa solu pystysuunnassa", +TableDelete : "Poista taulu", +CellProperties : "Solun ominaisuudet", +TableProperties : "Taulun ominaisuudet", +ImageProperties : "Kuvan ominaisuudet", +FlashProperties : "Flash ominaisuudet", + +AnchorProp : "Ankkurin ominaisuudet", +ButtonProp : "Painikkeen ominaisuudet", +CheckboxProp : "Valintaruudun ominaisuudet", +HiddenFieldProp : "Piilokentän ominaisuudet", +RadioButtonProp : "Radiopainikkeen ominaisuudet", +ImageButtonProp : "Kuvapainikkeen ominaisuudet", +TextFieldProp : "Tekstikentän ominaisuudet", +SelectionFieldProp : "Valintakentän ominaisuudet", +TextareaProp : "Tekstilaatikon ominaisuudet", +FormProp : "Lomakkeen ominaisuudet", + +FontFormats : "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6", + +// Alerts and Messages +ProcessingXHTML : "Prosessoidaan XHTML:ää. Odota hetki...", +Done : "Valmis", +PasteWordConfirm : "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?", +NotCompatiblePaste : "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?", +UnknownToolbarItem : "Tuntemanton työkalu \"%1\"", +UnknownCommand : "Tuntematon komento \"%1\"", +NotImplemented : "Komentoa ei ole liitetty sovellukseen", +UnknownToolbarSet : "Työkalukokonaisuus \"%1\" ei ole olemassa", +NoActiveX : "Selaimesi turvallisuusasetukset voivat rajoittaa joitain editorin ominaisuuksia. Sinun pitää ottaa käyttöön asetuksista \"Suorita ActiveX komponentit ja -plugin-laajennukset\". Saatat kohdata virheitä ja huomata puuttuvia ominaisuuksia.", +BrowseServerBlocked : "Resurssiselainta ei voitu avata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.", +DialogBlocked : "Apuikkunaa ei voitu avaata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Peruuta", +DlgBtnClose : "Sulje", +DlgBtnBrowseServer : "Selaa palvelinta", +DlgAdvancedTag : "Lisäominaisuudet", +DlgOpOther : "Muut", +DlgInfoTab : "Info", +DlgAlertUrl : "Lisää URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Tunniste", +DlgGenLangDir : "Kielen suunta", +DlgGenLangDirLtr : "Vasemmalta oikealle (LTR)", +DlgGenLangDirRtl : "Oikealta vasemmalle (RTL)", +DlgGenLangCode : "Kielikoodi", +DlgGenAccessKey : "Pikanäppäin", +DlgGenName : "Nimi", +DlgGenTabIndex : "Tabulaattori indeksi", +DlgGenLongDescr : "Pitkän kuvauksen URL", +DlgGenClass : "Tyyliluokat", +DlgGenTitle : "Avustava otsikko", +DlgGenContType : "Avustava sisällön tyyppi", +DlgGenLinkCharset : "Linkitetty kirjaimisto", +DlgGenStyle : "Tyyli", + +// Image Dialog +DlgImgTitle : "Kuvan ominaisuudet", +DlgImgInfoTab : "Kuvan tiedot", +DlgImgBtnUpload : "Lähetä palvelimelle", +DlgImgURL : "Osoite", +DlgImgUpload : "Lisää kuva", +DlgImgAlt : "Vaihtoehtoinen teksti", +DlgImgWidth : "Leveys", +DlgImgHeight : "Korkeus", +DlgImgLockRatio : "Lukitse suhteet", +DlgBtnResetSize : "Alkuperäinen koko", +DlgImgBorder : "Raja", +DlgImgHSpace : "Vaakatila", +DlgImgVSpace : "Pystytila", +DlgImgAlign : "Kohdistus", +DlgImgAlignLeft : "Vasemmalle", +DlgImgAlignAbsBottom: "Aivan alas", +DlgImgAlignAbsMiddle: "Aivan keskelle", +DlgImgAlignBaseline : "Alas (teksti)", +DlgImgAlignBottom : "Alas", +DlgImgAlignMiddle : "Keskelle", +DlgImgAlignRight : "Oikealle", +DlgImgAlignTextTop : "Ylös (teksti)", +DlgImgAlignTop : "Ylös", +DlgImgPreview : "Esikatselu", +DlgImgAlertUrl : "Kirjoita kuvan osoite (URL)", +DlgImgLinkTab : "Linkki", + +// Flash Dialog +DlgFlashTitle : "Flash ominaisuudet", +DlgFlashChkPlay : "Automaattinen käynnistys", +DlgFlashChkLoop : "Toisto", +DlgFlashChkMenu : "Näytä Flash-valikko", +DlgFlashScale : "Levitä", +DlgFlashScaleAll : "Näytä kaikki", +DlgFlashScaleNoBorder : "Ei rajaa", +DlgFlashScaleFit : "Tarkka koko", + +// Link Dialog +DlgLnkWindowTitle : "Linkki", +DlgLnkInfoTab : "Linkin tiedot", +DlgLnkTargetTab : "Kohde", + +DlgLnkType : "Linkkityyppi", +DlgLnkTypeURL : "Osoite", +DlgLnkTypeAnchor : "Ankkuri tässä sivussa", +DlgLnkTypeEMail : "Sähköposti", +DlgLnkProto : "Protokolla", +DlgLnkProtoOther : "", +DlgLnkURL : "Osoite", +DlgLnkAnchorSel : "Valitse ankkuri", +DlgLnkAnchorByName : "Ankkurin nimen mukaan", +DlgLnkAnchorById : "Ankkurin ID:n mukaan", +DlgLnkNoAnchors : "(Ei ankkureita tässä dokumentissa)", +DlgLnkEMail : "Sähköpostiosoite", +DlgLnkEMailSubject : "Aihe", +DlgLnkEMailBody : "Viesti", +DlgLnkUpload : "Lisää tiedosto", +DlgLnkBtnUpload : "Lähetä palvelimelle", + +DlgLnkTarget : "Kohde", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Uusi ikkuna (_blank)", +DlgLnkTargetParent : "Emoikkuna (_parent)", +DlgLnkTargetSelf : "Sama ikkuna (_self)", +DlgLnkTargetTop : "Päällimmäisin ikkuna (_top)", +DlgLnkTargetFrameName : "Kohdekehyksen nimi", +DlgLnkPopWinName : "Popup ikkunan nimi", +DlgLnkPopWinFeat : "Popup ikkunan ominaisuudet", +DlgLnkPopResize : "Venytettävä", +DlgLnkPopLocation : "Osoiterivi", +DlgLnkPopMenu : "Valikkorivi", +DlgLnkPopScroll : "Vierityspalkit", +DlgLnkPopStatus : "Tilarivi", +DlgLnkPopToolbar : "Vakiopainikkeet", +DlgLnkPopFullScrn : "Täysi ikkuna (IE)", +DlgLnkPopDependent : "Riippuva (Netscape)", +DlgLnkPopWidth : "Leveys", +DlgLnkPopHeight : "Korkeus", +DlgLnkPopLeft : "Vasemmalta (px)", +DlgLnkPopTop : "Ylhäältä (px)", + +DlnLnkMsgNoUrl : "Linkille on kirjoitettava URL", +DlnLnkMsgNoEMail : "Kirjoita sähköpostiosoite", +DlnLnkMsgNoAnchor : "Valitse ankkuri", +DlnLnkMsgInvPopName : "Popup-ikkunan nimi pitää alkaa aakkosella ja ei saa sisältää välejä", + +// Color Dialog +DlgColorTitle : "Valitse väri", +DlgColorBtnClear : "Tyhjennä", +DlgColorHighlight : "Kohdalla", +DlgColorSelected : "Valittu", + +// Smiley Dialog +DlgSmileyTitle : "Lisää hymiö", + +// Special Character Dialog +DlgSpecialCharTitle : "Valitse erikoismerkki", + +// Table Dialog +DlgTableTitle : "Taulun ominaisuudet", +DlgTableRows : "Rivit", +DlgTableColumns : "Sarakkeet", +DlgTableBorder : "Rajan paksuus", +DlgTableAlign : "Kohdistus", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Vasemmalle", +DlgTableAlignCenter : "Keskelle", +DlgTableAlignRight : "Oikealle", +DlgTableWidth : "Leveys", +DlgTableWidthPx : "pikseliä", +DlgTableWidthPc : "prosenttia", +DlgTableHeight : "Korkeus", +DlgTableCellSpace : "Solujen väli", +DlgTableCellPad : "Solujen sisennys", +DlgTableCaption : "Otsikko", +DlgTableSummary : "Yhteenveto", + +// Table Cell Dialog +DlgCellTitle : "Solun ominaisuudet", +DlgCellWidth : "Leveys", +DlgCellWidthPx : "pikseliä", +DlgCellWidthPc : "prosenttia", +DlgCellHeight : "Korkeus", +DlgCellWordWrap : "Tekstikierrätys", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Kyllä", +DlgCellWordWrapNo : "Ei", +DlgCellHorAlign : "Vaakakohdistus", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Vasemmalle", +DlgCellHorAlignCenter : "Keskelle", +DlgCellHorAlignRight: "Oikealle", +DlgCellVerAlign : "Pystykohdistus", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Ylös", +DlgCellVerAlignMiddle : "Keskelle", +DlgCellVerAlignBottom : "Alas", +DlgCellVerAlignBaseline : "Tekstin alas", +DlgCellRowSpan : "Rivin jatkuvuus", +DlgCellCollSpan : "Sarakkeen jatkuvuus", +DlgCellBackColor : "Taustaväri", +DlgCellBorderColor : "Rajan väri", +DlgCellBtnSelect : "Valitse...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Etsi ja korvaa", + +// Find Dialog +DlgFindTitle : "Etsi", +DlgFindFindBtn : "Etsi", +DlgFindNotFoundMsg : "Etsittyä tekstiä ei löytynyt.", + +// Replace Dialog +DlgReplaceTitle : "Korvaa", +DlgReplaceFindLbl : "Etsi mitä:", +DlgReplaceReplaceLbl : "Korvaa tällä:", +DlgReplaceCaseChk : "Sama kirjainkoko", +DlgReplaceReplaceBtn : "Korvaa", +DlgReplaceReplAllBtn : "Korvaa kaikki", +DlgReplaceWordChk : "Koko sana", + +// Paste Operations / Dialog +PasteErrorCut : "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).", +PasteErrorCopy : "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).", + +PasteAsText : "Liitä tekstinä", +PasteFromWord : "Liitä Wordista", + +DlgPasteMsg2 : "Liitä painamalla (Ctrl+V) ja painamalla OK.", +DlgPasteSec : "Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.", +DlgPasteIgnoreFont : "Jätä huomioimatta fonttimääritykset", +DlgPasteRemoveStyles : "Poista tyylimääritykset", + +// Color Picker +ColorAutomatic : "Automaattinen", +ColorMoreColors : "Lisää värejä...", + +// Document Properties +DocProps : "Dokumentin ominaisuudet", + +// Anchor Dialog +DlgAnchorTitle : "Ankkurin ominaisuudet", +DlgAnchorName : "Nimi", +DlgAnchorErrorName : "Ankkurille on kirjoitettava nimi", + +// Speller Pages Dialog +DlgSpellNotInDic : "Ei sanakirjassa", +DlgSpellChangeTo : "Vaihda", +DlgSpellBtnIgnore : "Jätä huomioimatta", +DlgSpellBtnIgnoreAll : "Jätä kaikki huomioimatta", +DlgSpellBtnReplace : "Korvaa", +DlgSpellBtnReplaceAll : "Korvaa kaikki", +DlgSpellBtnUndo : "Kumoa", +DlgSpellNoSuggestions : "Ei ehdotuksia", +DlgSpellProgress : "Tarkistus käynnissä...", +DlgSpellNoMispell : "Tarkistus valmis: Ei virheitä", +DlgSpellNoChanges : "Tarkistus valmis: Yhtään sanaa ei muutettu", +DlgSpellOneChange : "Tarkistus valmis: Yksi sana muutettiin", +DlgSpellManyChanges : "Tarkistus valmis: %1 sanaa muutettiin", + +IeSpellDownload : "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?", + +// Button Dialog +DlgButtonText : "Teksti (arvo)", +DlgButtonType : "Tyyppi", +DlgButtonTypeBtn : "Painike", +DlgButtonTypeSbm : "Lähetä", +DlgButtonTypeRst : "Tyhjennä", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nimi", +DlgCheckboxValue : "Arvo", +DlgCheckboxSelected : "Valittu", + +// Form Dialog +DlgFormName : "Nimi", +DlgFormAction : "Toiminto", +DlgFormMethod : "Tapa", + +// Select Field Dialog +DlgSelectName : "Nimi", +DlgSelectValue : "Arvo", +DlgSelectSize : "Koko", +DlgSelectLines : "Rivit", +DlgSelectChkMulti : "Salli usea valinta", +DlgSelectOpAvail : "Ominaisuudet", +DlgSelectOpText : "Teksti", +DlgSelectOpValue : "Arvo", +DlgSelectBtnAdd : "Lisää", +DlgSelectBtnModify : "Muuta", +DlgSelectBtnUp : "Ylös", +DlgSelectBtnDown : "Alas", +DlgSelectBtnSetValue : "Aseta valituksi", +DlgSelectBtnDelete : "Poista", + +// Textarea Dialog +DlgTextareaName : "Nimi", +DlgTextareaCols : "Sarakkeita", +DlgTextareaRows : "Rivejä", + +// Text Field Dialog +DlgTextName : "Nimi", +DlgTextValue : "Arvo", +DlgTextCharWidth : "Leveys", +DlgTextMaxChars : "Maksimi merkkimäärä", +DlgTextType : "Tyyppi", +DlgTextTypeText : "Teksti", +DlgTextTypePass : "Salasana", + +// Hidden Field Dialog +DlgHiddenName : "Nimi", +DlgHiddenValue : "Arvo", + +// Bulleted List Dialog +BulletedListProp : "Luettelon ominaisuudet", +NumberedListProp : "Numeroinnin ominaisuudet", +DlgLstStart : "Alku", +DlgLstType : "Tyyppi", +DlgLstTypeCircle : "Kehä", +DlgLstTypeDisc : "Ympyrä", +DlgLstTypeSquare : "Neliö", +DlgLstTypeNumbers : "Numerot (1, 2, 3)", +DlgLstTypeLCase : "Pienet kirjaimet (a, b, c)", +DlgLstTypeUCase : "Isot kirjaimet (A, B, C)", +DlgLstTypeSRoman : "Pienet roomalaiset numerot (i, ii, iii)", +DlgLstTypeLRoman : "Isot roomalaiset numerot (Ii, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Yleiset", +DlgDocBackTab : "Tausta", +DlgDocColorsTab : "Värit ja marginaalit", +DlgDocMetaTab : "Meta-tieto", + +DlgDocPageTitle : "Sivun nimi", +DlgDocLangDir : "Kielen suunta", +DlgDocLangDirLTR : "Vasemmalta oikealle (LTR)", +DlgDocLangDirRTL : "Oikealta vasemmalle (RTL)", +DlgDocLangCode : "Kielikoodi", +DlgDocCharSet : "Merkistökoodaus", +DlgDocCharSetCE : "Keskieurooppalainen", +DlgDocCharSetCT : "Kiina, perinteinen (Big5)", +DlgDocCharSetCR : "Kyrillinen", +DlgDocCharSetGR : "Kreikka", +DlgDocCharSetJP : "Japani", +DlgDocCharSetKR : "Korealainen", +DlgDocCharSetTR : "Turkkilainen", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Länsieurooppalainen", +DlgDocCharSetOther : "Muu merkistökoodaus", + +DlgDocDocType : "Dokumentin tyyppi", +DlgDocDocTypeOther : "Muu dokumentin tyyppi", +DlgDocIncXHTML : "Lisää XHTML julistukset", +DlgDocBgColor : "Taustaväri", +DlgDocBgImage : "Taustakuva", +DlgDocBgNoScroll : "Paikallaanpysyvä tausta", +DlgDocCText : "Teksti", +DlgDocCLink : "Linkki", +DlgDocCVisited : "Vierailtu linkki", +DlgDocCActive : "Aktiivinen linkki", +DlgDocMargins : "Sivun marginaalit", +DlgDocMaTop : "Ylä", +DlgDocMaLeft : "Vasen", +DlgDocMaRight : "Oikea", +DlgDocMaBottom : "Ala", +DlgDocMeIndex : "Hakusanat (pilkulla erotettuna)", +DlgDocMeDescr : "Kuvaus", +DlgDocMeAuthor : "Tekijä", +DlgDocMeCopy : "Tekijänoikeudet", +DlgDocPreview : "Esikatselu", + +// Templates Dialog +Templates : "Pohjat", +DlgTemplatesTitle : "Sisältöpohjat", +DlgTemplatesSelMsg : "Valitse pohja editoriin
        (aiempi sisältö menetetään):", +DlgTemplatesLoading : "Ladataan listaa pohjista. Hetkinen...", +DlgTemplatesNoTpl : "(Ei määriteltyjä pohjia)", +DlgTemplatesReplace : "Korvaa editorin koko sisältö", + +// About Dialog +DlgAboutAboutTab : "Editorista", +DlgAboutBrowserInfoTab : "Selaimen tiedot", +DlgAboutLicenseTab : "Lisenssi", +DlgAboutVersion : "versio", +DlgAboutInfo : "Lisää tietoa osoitteesta" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/fo.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fo.js new file mode 100644 index 0000000..bc3f1e7 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fo.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Faroese language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Fjal amboðsbjálkan", +ToolbarExpand : "Vís amboðsbjálkan", + +// Toolbar Items and Context Menu +Save : "Goym", +NewPage : "Nýggj síða", +Preview : "Frumsýning", +Cut : "Kvett", +Copy : "Avrita", +Paste : "Innrita", +PasteText : "Innrita reinan tekst", +PasteWord : "Innrita frá Word", +Print : "Prenta", +SelectAll : "Markera alt", +RemoveFormat : "Strika sniðgeving", +InsertLinkLbl : "Tilknýti", +InsertLink : "Ger/broyt tilknýti", +RemoveLink : "Strika tilknýti", +Anchor : "Ger/broyt marknastein", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Myndir", +InsertImage : "Set inn/broyt mynd", +InsertFlashLbl : "Flash", +InsertFlash : "Set inn/broyt Flash", +InsertTableLbl : "Tabell", +InsertTable : "Set inn/broyt tabell", +InsertLineLbl : "Linja", +InsertLine : "Ger vatnrætta linju", +InsertSpecialCharLbl: "Sertekn", +InsertSpecialChar : "Set inn sertekn", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Set inn Smiley", +About : "Um FCKeditor", +Bold : "Feit skrift", +Italic : "Skráskrift", +Underline : "Undirstrikað", +StrikeThrough : "Yvirstrikað", +Subscript : "Lækkað skrift", +Superscript : "Hækkað skrift", +LeftJustify : "Vinstrasett", +CenterJustify : "Miðsett", +RightJustify : "Høgrasett", +BlockJustify : "Javnir tekstkantar", +DecreaseIndent : "Minka reglubrotarinntriv", +IncreaseIndent : "Økja reglubrotarinntriv", +Blockquote : "Blockquote", //MISSING +Undo : "Angra", +Redo : "Vend aftur", +NumberedListLbl : "Talmerktur listi", +NumberedList : "Ger/strika talmerktan lista", +BulletedListLbl : "Punktmerktur listi", +BulletedList : "Ger/strika punktmerktan lista", +ShowTableBorders : "Vís tabellbordar", +ShowDetails : "Vís í smálutum", +Style : "Typografi", +FontFormat : "Skriftsnið", +Font : "Skrift", +FontSize : "Skriftstødd", +TextColor : "Tekstlitur", +BGColor : "Bakgrundslitur", +Source : "Kelda", +Find : "Leita", +Replace : "Yvirskriva", +SpellCheck : "Kanna stavseting", +UniversalKeyboard : "Knappaborð", +PageBreakLbl : "Síðuskift", +PageBreak : "Ger síðuskift", + +Form : "Formur", +Checkbox : "Flugubein", +RadioButton : "Radioknøttur", +TextField : "Tekstteigur", +Textarea : "Tekstumráði", +HiddenField : "Fjaldur teigur", +Button : "Knøttur", +SelectionField : "Valskrá", +ImageButton : "Myndaknøttur", + +FitWindow : "Set tekstviðgera til fulla stødd", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Broyt tilknýti", +CellCM : "Meski", +RowCM : "Rað", +ColumnCM : "Kolonna", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Strika røðir", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Strika kolonnur", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Strika meskar", +MergeCells : "Flætta meskar", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Strika tabell", +CellProperties : "Meskueginleikar", +TableProperties : "Tabelleginleikar", +ImageProperties : "Myndaeginleikar", +FlashProperties : "Flash eginleikar", + +AnchorProp : "Eginleikar fyri marknastein", +ButtonProp : "Eginleikar fyri knøtt", +CheckboxProp : "Eginleikar fyri flugubein", +HiddenFieldProp : "Eginleikar fyri fjaldan teig", +RadioButtonProp : "Eginleikar fyri radioknøtt", +ImageButtonProp : "Eginleikar fyri myndaknøtt", +TextFieldProp : "Eginleikar fyri tekstteig", +SelectionFieldProp : "Eginleikar fyri valskrá", +TextareaProp : "Eginleikar fyri tekstumráði", +FormProp : "Eginleikar fyri Form", + +FontFormats : "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6", + +// Alerts and Messages +ProcessingXHTML : "XHTML verður viðgjørt. Bíða við...", +Done : "Liðugt", +PasteWordConfirm : "Teksturin, royndur verður at seta inn, tykist at stava frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?", +NotCompatiblePaste : "Hetta er bert tøkt í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn kortini - óreinsaðan?", +UnknownToolbarItem : "Ókendur lutur í amboðsbjálkanum \"%1\"", +UnknownCommand : "Ókend kommando \"%1\"", +NotImplemented : "Hetta er ikki tøkt í hesi útgávuni", +UnknownToolbarSet : "Amboðsbjálkin \"%1\" finst ikki", +NoActiveX : "Trygdaruppsetingin í alnótskaganum kann sum er avmarka onkrar hentleikar í tekstviðgeranum. Tú mást loyva møguleikanum \"Run/Kør ActiveX controls and plug-ins\". Tú kanst uppliva feilir og ávaringar um tvørrandi hentleikar.", +BrowseServerBlocked : "Ambætarakagin kundi ikki opnast. Tryggja tær, at allar pop-up forðingar eru óvirknar.", +DialogBlocked : "Tað eyðnaðist ikki at opna samskiftisrútin. Tryggja tær, at allar pop-up forðingar eru óvirknar.", + +// Dialogs +DlgBtnOK : "Góðkent", +DlgBtnCancel : "Avlýst", +DlgBtnClose : "Lat aftur", +DlgBtnBrowseServer : "Ambætarakagi", +DlgAdvancedTag : "Fjølbroytt", +DlgOpOther : "", +DlgInfoTab : "Upplýsingar", +DlgAlertUrl : "Vinarliga veit ein URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Tekstkós", +DlgGenLangDirLtr : "Frá vinstru til høgru (LTR)", +DlgGenLangDirRtl : "Frá høgru til vinstru (RTL)", +DlgGenLangCode : "Málkoda", +DlgGenAccessKey : "Snarvegisknappur", +DlgGenName : "Navn", +DlgGenTabIndex : "Inntriv indeks", +DlgGenLongDescr : "Víðkað URL frágreiðing", +DlgGenClass : "Typografi klassar", +DlgGenTitle : "Vegleiðandi heiti", +DlgGenContType : "Vegleiðandi innihaldsslag", +DlgGenLinkCharset : "Atknýtt teknsett", +DlgGenStyle : "Typografi", + +// Image Dialog +DlgImgTitle : "Myndaeginleikar", +DlgImgInfoTab : "Myndaupplýsingar", +DlgImgBtnUpload : "Send til ambætaran", +DlgImgURL : "URL", +DlgImgUpload : "Send", +DlgImgAlt : "Alternativur tekstur", +DlgImgWidth : "Breidd", +DlgImgHeight : "Hædd", +DlgImgLockRatio : "Læs lutfallið", +DlgBtnResetSize : "Upprunastødd", +DlgImgBorder : "Bordi", +DlgImgHSpace : "Høgri breddi", +DlgImgVSpace : "Vinstri breddi", +DlgImgAlign : "Justering", +DlgImgAlignLeft : "Vinstra", +DlgImgAlignAbsBottom: "Abs botnur", +DlgImgAlignAbsMiddle: "Abs miðja", +DlgImgAlignBaseline : "Basislinja", +DlgImgAlignBottom : "Botnur", +DlgImgAlignMiddle : "Miðja", +DlgImgAlignRight : "Høgra", +DlgImgAlignTextTop : "Tekst toppur", +DlgImgAlignTop : "Ovast", +DlgImgPreview : "Frumsýning", +DlgImgAlertUrl : "Rita slóðina til myndina", +DlgImgLinkTab : "Tilknýti", + +// Flash Dialog +DlgFlashTitle : "Flash eginleikar", +DlgFlashChkPlay : "Avspælingin byrjar sjálv", +DlgFlashChkLoop : "Endurspæl", +DlgFlashChkMenu : "Ger Flash skrá virkna", +DlgFlashScale : "Skalering", +DlgFlashScaleAll : "Vís alt", +DlgFlashScaleNoBorder : "Eingin bordi", +DlgFlashScaleFit : "Neyv skalering", + +// Link Dialog +DlgLnkWindowTitle : "Tilknýti", +DlgLnkInfoTab : "Tilknýtis upplýsingar", +DlgLnkTargetTab : "Mál", + +DlgLnkType : "Tilknýtisslag", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Tilknýti til marknastein í tekstinum", +DlgLnkTypeEMail : "Teldupostur", +DlgLnkProto : "Protokoll", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vel ein marknastein", +DlgLnkAnchorByName : "Eftir navni á marknasteini", +DlgLnkAnchorById : "Eftir element Id", +DlgLnkNoAnchors : "(Eingir marknasteinar eru í hesum dokumentið)", +DlgLnkEMail : "Teldupost-adressa", +DlgLnkEMailSubject : "Evni", +DlgLnkEMailBody : "Breyðtekstur", +DlgLnkUpload : "Send til ambætaran", +DlgLnkBtnUpload : "Send til ambætaran", + +DlgLnkTarget : "Mál", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nýtt vindeyga (_blank)", +DlgLnkTargetParent : "Upphavliga vindeygað (_parent)", +DlgLnkTargetSelf : "Sama vindeygað (_self)", +DlgLnkTargetTop : "Alt vindeygað (_top)", +DlgLnkTargetFrameName : "Vís navn vindeygans", +DlgLnkPopWinName : "Popup vindeygans navn", +DlgLnkPopWinFeat : "Popup vindeygans víðkaðu eginleikar", +DlgLnkPopResize : "Kann broyta stødd", +DlgLnkPopLocation : "Adressulinja", +DlgLnkPopMenu : "Skrábjálki", +DlgLnkPopScroll : "Rullibjálki", +DlgLnkPopStatus : "Støðufrágreiðingarbjálki", +DlgLnkPopToolbar : "Amboðsbjálki", +DlgLnkPopFullScrn : "Fullur skermur (IE)", +DlgLnkPopDependent : "Bundið (Netscape)", +DlgLnkPopWidth : "Breidd", +DlgLnkPopHeight : "Hædd", +DlgLnkPopLeft : "Frástøða frá vinstru", +DlgLnkPopTop : "Frástøða frá íerva", + +DlnLnkMsgNoUrl : "Vinarliga skriva tilknýti (URL)", +DlnLnkMsgNoEMail : "Vinarliga skriva teldupost-adressu", +DlnLnkMsgNoAnchor : "Vinarliga vel marknastein", +DlnLnkMsgInvPopName : "Popup navnið má byrja við bókstavi og má ikki hava millumrúm", + +// Color Dialog +DlgColorTitle : "Vel lit", +DlgColorBtnClear : "Strika alt", +DlgColorHighlight : "Framhevja", +DlgColorSelected : "Valt", + +// Smiley Dialog +DlgSmileyTitle : "Vel Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Vel sertekn", + +// Table Dialog +DlgTableTitle : "Eginleikar fyri tabell", +DlgTableRows : "Røðir", +DlgTableColumns : "Kolonnur", +DlgTableBorder : "Bordabreidd", +DlgTableAlign : "Justering", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Vinstrasett", +DlgTableAlignCenter : "Miðsett", +DlgTableAlignRight : "Høgrasett", +DlgTableWidth : "Breidd", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "prosent", +DlgTableHeight : "Hædd", +DlgTableCellSpace : "Fjarstøða millum meskar", +DlgTableCellPad : "Meskubreddi", +DlgTableCaption : "Tabellfrágreiðing", +DlgTableSummary : "Samandráttur", + +// Table Cell Dialog +DlgCellTitle : "Mesku eginleikar", +DlgCellWidth : "Breidd", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "prosent", +DlgCellHeight : "Hædd", +DlgCellWordWrap : "Orðkloyving", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nei", +DlgCellHorAlign : "Vatnrøtt justering", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Vinstrasett", +DlgCellHorAlignCenter : "Miðsett", +DlgCellHorAlignRight: "Høgrasett", +DlgCellVerAlign : "Lodrøtt justering", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Ovast", +DlgCellVerAlignMiddle : "Miðjan", +DlgCellVerAlignBottom : "Niðast", +DlgCellVerAlignBaseline : "Basislinja", +DlgCellRowSpan : "Røðir, meskin fevnir um", +DlgCellCollSpan : "Kolonnur, meskin fevnir um", +DlgCellBackColor : "Bakgrundslitur", +DlgCellBorderColor : "Litur á borda", +DlgCellBtnSelect : "Vel...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Finn", +DlgFindFindBtn : "Finn", +DlgFindNotFoundMsg : "Leititeksturin varð ikki funnin", + +// Replace Dialog +DlgReplaceTitle : "Yvirskriva", +DlgReplaceFindLbl : "Finn:", +DlgReplaceReplaceLbl : "Yvirskriva við:", +DlgReplaceCaseChk : "Munur á stórum og smáðum bókstavum", +DlgReplaceReplaceBtn : "Yvirskriva", +DlgReplaceReplAllBtn : "Yvirskriva alt", +DlgReplaceWordChk : "Bert heil orð", + +// Paste Operations / Dialog +PasteErrorCut : "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).", +PasteErrorCopy : "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).", + +PasteAsText : "Innrita som reinan tekst", +PasteFromWord : "Innrita fra Word", + +DlgPasteMsg2 : "Vinarliga koyr tekstin í hendan rútin við knappaborðinum (CTRL+V) og klikk á Góðtak.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Forfjóna Font definitiónirnar", +DlgPasteRemoveStyles : "Strika Styles definitiónir", + +// Color Picker +ColorAutomatic : "Av sær sjálvum", +ColorMoreColors : "Fleiri litir...", + +// Document Properties +DocProps : "Eginleikar fyri dokument", + +// Anchor Dialog +DlgAnchorTitle : "Eginleikar fyri marknastein", +DlgAnchorName : "Heiti marknasteinsins", +DlgAnchorErrorName : "Vinarliga rita marknasteinsins heiti", + +// Speller Pages Dialog +DlgSpellNotInDic : "Finst ikki í orðabókini", +DlgSpellChangeTo : "Broyt til", +DlgSpellBtnIgnore : "Forfjóna", +DlgSpellBtnIgnoreAll : "Forfjóna alt", +DlgSpellBtnReplace : "Yvirskriva", +DlgSpellBtnReplaceAll : "Yvirskriva alt", +DlgSpellBtnUndo : "Angra", +DlgSpellNoSuggestions : "- Einki uppskot -", +DlgSpellProgress : "Rættstavarin arbeiðir...", +DlgSpellNoMispell : "Rættstavarain liðugur: Eingin feilur funnin", +DlgSpellNoChanges : "Rættstavarain liðugur: Einki orð varð broytt", +DlgSpellOneChange : "Rættstavarain liðugur: Eitt orð er broytt", +DlgSpellManyChanges : "Rættstavarain liðugur: %1 orð broytt", + +IeSpellDownload : "Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?", + +// Button Dialog +DlgButtonText : "Tekstur", +DlgButtonType : "Slag", +DlgButtonTypeBtn : "Knøttur", +DlgButtonTypeSbm : "Send", +DlgButtonTypeRst : "Nullstilla", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Navn", +DlgCheckboxValue : "Virði", +DlgCheckboxSelected : "Valt", + +// Form Dialog +DlgFormName : "Navn", +DlgFormAction : "Hending", +DlgFormMethod : "Háttur", + +// Select Field Dialog +DlgSelectName : "Navn", +DlgSelectValue : "Virði", +DlgSelectSize : "Stødd", +DlgSelectLines : "Linjur", +DlgSelectChkMulti : "Loyv fleiri valmøguleikum samstundis", +DlgSelectOpAvail : "Tøkir møguleikar", +DlgSelectOpText : "Tekstur", +DlgSelectOpValue : "Virði", +DlgSelectBtnAdd : "Legg afturat", +DlgSelectBtnModify : "Broyt", +DlgSelectBtnUp : "Upp", +DlgSelectBtnDown : "Niður", +DlgSelectBtnSetValue : "Set sum valt virði", +DlgSelectBtnDelete : "Strika", + +// Textarea Dialog +DlgTextareaName : "Navn", +DlgTextareaCols : "kolonnur", +DlgTextareaRows : "røðir", + +// Text Field Dialog +DlgTextName : "Navn", +DlgTextValue : "Virði", +DlgTextCharWidth : "Breidd (sjónlig tekn)", +DlgTextMaxChars : "Mest loyvdu tekn", +DlgTextType : "Slag", +DlgTextTypeText : "Tekstur", +DlgTextTypePass : "Loyniorð", + +// Hidden Field Dialog +DlgHiddenName : "Navn", +DlgHiddenValue : "Virði", + +// Bulleted List Dialog +BulletedListProp : "Eginleikar fyri punktmerktan lista", +NumberedListProp : "Eginleikar fyri talmerktan lista", +DlgLstStart : "Byrjan", +DlgLstType : "Slag", +DlgLstTypeCircle : "Sirkul", +DlgLstTypeDisc : "Fyltur sirkul", +DlgLstTypeSquare : "Fjórhyrningur", +DlgLstTypeNumbers : "Talmerkt (1, 2, 3)", +DlgLstTypeLCase : "Smáir bókstavir (a, b, c)", +DlgLstTypeUCase : "Stórir bókstavir (A, B, C)", +DlgLstTypeSRoman : "Smá rómaratøl (i, ii, iii)", +DlgLstTypeLRoman : "Stór rómaratøl (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Generelt", +DlgDocBackTab : "Bakgrund", +DlgDocColorsTab : "Litir og breddar", +DlgDocMetaTab : "META-upplýsingar", + +DlgDocPageTitle : "Síðuheiti", +DlgDocLangDir : "Tekstkós", +DlgDocLangDirLTR : "Frá vinstru móti høgru (LTR)", +DlgDocLangDirRTL : "Frá høgru móti vinstru (RTL)", +DlgDocLangCode : "Málkoda", +DlgDocCharSet : "Teknsett koda", +DlgDocCharSetCE : "Miðeuropa", +DlgDocCharSetCT : "Kinesiskt traditionelt (Big5)", +DlgDocCharSetCR : "Cyrilliskt", +DlgDocCharSetGR : "Grikst", +DlgDocCharSetJP : "Japanskt", +DlgDocCharSetKR : "Koreanskt", +DlgDocCharSetTR : "Turkiskt", +DlgDocCharSetUN : "UNICODE (UTF-8)", +DlgDocCharSetWE : "Vestureuropa", +DlgDocCharSetOther : "Onnur teknsett koda", + +DlgDocDocType : "Dokumentslag yvirskrift", +DlgDocDocTypeOther : "Annað dokumentslag yvirskrift", +DlgDocIncXHTML : "Viðfest XHTML deklaratiónir", +DlgDocBgColor : "Bakgrundslitur", +DlgDocBgImage : "Leið til bakgrundsmynd (URL)", +DlgDocBgNoScroll : "Læst bakgrund (rullar ikki)", +DlgDocCText : "Tekstur", +DlgDocCLink : "Tilknýti", +DlgDocCVisited : "Vitjaði tilknýti", +DlgDocCActive : "Virkin tilknýti", +DlgDocMargins : "Síðubreddar", +DlgDocMaTop : "Ovast", +DlgDocMaLeft : "Vinstra", +DlgDocMaRight : "Høgra", +DlgDocMaBottom : "Niðast", +DlgDocMeIndex : "Dokument index lyklaorð (sundurbýtt við komma)", +DlgDocMeDescr : "Dokumentlýsing", +DlgDocMeAuthor : "Høvundur", +DlgDocMeCopy : "Upphavsrættindi", +DlgDocPreview : "Frumsýning", + +// Templates Dialog +Templates : "Skabelónir", +DlgTemplatesTitle : "Innihaldsskabelónir", +DlgTemplatesSelMsg : "Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum
        (Hetta yvirskrivar núverandi innihald):", +DlgTemplatesLoading : "Heinti yvirlit yvir skabelónir. Vinarliga bíða við...", +DlgTemplatesNoTpl : "(Ongar skabelónir tøkar)", +DlgTemplatesReplace : "Yvirskriva núverandi innihald", + +// About Dialog +DlgAboutAboutTab : "Um", +DlgAboutBrowserInfoTab : "Upplýsingar um alnótskagan", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "Fyri fleiri upplýsingar, far til" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr-ca.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr-ca.js new file mode 100644 index 0000000..7ff78f8 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr-ca.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Canadian French language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Masquer Outils", +ToolbarExpand : "Afficher Outils", + +// Toolbar Items and Context Menu +Save : "Sauvegarder", +NewPage : "Nouvelle page", +Preview : "Previsualiser", +Cut : "Couper", +Copy : "Copier", +Paste : "Coller", +PasteText : "Coller en tant que texte", +PasteWord : "Coller en tant que Word (formaté)", +Print : "Imprimer", +SelectAll : "Tout sélectionner", +RemoveFormat : "Supprimer le formatage", +InsertLinkLbl : "Lien", +InsertLink : "Insérer/modifier le lien", +RemoveLink : "Supprimer le lien", +Anchor : "Insérer/modifier l'ancre", +AnchorDelete : "Supprimer l'ancre", +InsertImageLbl : "Image", +InsertImage : "Insérer/modifier l'image", +InsertFlashLbl : "Animation Flash", +InsertFlash : "Insérer/modifier l'animation Flash", +InsertTableLbl : "Tableau", +InsertTable : "Insérer/modifier le tableau", +InsertLineLbl : "Séparateur", +InsertLine : "Insérer un séparateur", +InsertSpecialCharLbl: "Caractères spéciaux", +InsertSpecialChar : "Insérer un caractère spécial", +InsertSmileyLbl : "Emoticon", +InsertSmiley : "Insérer un Emoticon", +About : "A propos de FCKeditor", +Bold : "Gras", +Italic : "Italique", +Underline : "Souligné", +StrikeThrough : "Barrer", +Subscript : "Indice", +Superscript : "Exposant", +LeftJustify : "Aligner à gauche", +CenterJustify : "Centrer", +RightJustify : "Aligner à Droite", +BlockJustify : "Texte justifié", +DecreaseIndent : "Diminuer le retrait", +IncreaseIndent : "Augmenter le retrait", +Blockquote : "Citation", +Undo : "Annuler", +Redo : "Refaire", +NumberedListLbl : "Liste numérotée", +NumberedList : "Insérer/supprimer la liste numérotée", +BulletedListLbl : "Liste à puces", +BulletedList : "Insérer/supprimer la liste à puces", +ShowTableBorders : "Afficher les bordures du tableau", +ShowDetails : "Afficher les caractères invisibles", +Style : "Style", +FontFormat : "Format", +Font : "Police", +FontSize : "Taille", +TextColor : "Couleur de caractère", +BGColor : "Couleur de fond", +Source : "Source", +Find : "Chercher", +Replace : "Remplacer", +SpellCheck : "Orthographe", +UniversalKeyboard : "Clavier universel", +PageBreakLbl : "Saut de page", +PageBreak : "Insérer un saut de page", + +Form : "Formulaire", +Checkbox : "Case à cocher", +RadioButton : "Bouton radio", +TextField : "Champ texte", +Textarea : "Zone de texte", +HiddenField : "Champ caché", +Button : "Bouton", +SelectionField : "Champ de sélection", +ImageButton : "Bouton image", + +FitWindow : "Edition pleine page", +ShowBlocks : "Afficher les blocs", + +// Context Menu +EditLink : "Modifier le lien", +CellCM : "Cellule", +RowCM : "Ligne", +ColumnCM : "Colonne", +InsertRowAfter : "Insérer une ligne après", +InsertRowBefore : "Insérer une ligne avant", +DeleteRows : "Supprimer des lignes", +InsertColumnAfter : "Insérer une colonne après", +InsertColumnBefore : "Insérer une colonne avant", +DeleteColumns : "Supprimer des colonnes", +InsertCellAfter : "Insérer une cellule après", +InsertCellBefore : "Insérer une cellule avant", +DeleteCells : "Supprimer des cellules", +MergeCells : "Fusionner les cellules", +MergeRight : "Fusionner à droite", +MergeDown : "Fusionner en bas", +HorizontalSplitCell : "Scinder la cellule horizontalement", +VerticalSplitCell : "Scinder la cellule verticalement", +TableDelete : "Supprimer le tableau", +CellProperties : "Propriétés de cellule", +TableProperties : "Propriétés du tableau", +ImageProperties : "Propriétés de l'image", +FlashProperties : "Propriétés de l'animation Flash", + +AnchorProp : "Propriétés de l'ancre", +ButtonProp : "Propriétés du bouton", +CheckboxProp : "Propriétés de la case à cocher", +HiddenFieldProp : "Propriétés du champ caché", +RadioButtonProp : "Propriétés du bouton radio", +ImageButtonProp : "Propriétés du bouton image", +TextFieldProp : "Propriétés du champ texte", +SelectionFieldProp : "Propriétés de la liste/du menu", +TextareaProp : "Propriétés de la zone de texte", +FormProp : "Propriétés du formulaire", + +FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Calcul XHTML. Veuillez patienter...", +Done : "Terminé", +PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?", +NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 et plus. Souhaitez-vous coller sans nettoyage?", +UnknownToolbarItem : "Élément de barre d'outil inconnu \"%1\"", +UnknownCommand : "Nom de commande inconnu \"%1\"", +NotImplemented : "Commande indisponible", +UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas", +NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.", +BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.", +DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuler", +DlgBtnClose : "Fermer", +DlgBtnBrowseServer : "Parcourir le serveur", +DlgAdvancedTag : "Avancée", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Veuillez saisir l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Sens d'écriture", +DlgGenLangDirLtr : "De gauche à droite (LTR)", +DlgGenLangDirRtl : "De droite à gauche (RTL)", +DlgGenLangCode : "Code langue", +DlgGenAccessKey : "Équivalent clavier", +DlgGenName : "Nom", +DlgGenTabIndex : "Ordre de tabulation", +DlgGenLongDescr : "URL de description longue", +DlgGenClass : "Classes de feuilles de style", +DlgGenTitle : "Titre", +DlgGenContType : "Type de contenu", +DlgGenLinkCharset : "Encodage de caractère", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Propriétés de l'image", +DlgImgInfoTab : "Informations sur l'image", +DlgImgBtnUpload : "Envoyer sur le serveur", +DlgImgURL : "URL", +DlgImgUpload : "Télécharger", +DlgImgAlt : "Texte de remplacement", +DlgImgWidth : "Largeur", +DlgImgHeight : "Hauteur", +DlgImgLockRatio : "Garder les proportions", +DlgBtnResetSize : "Taille originale", +DlgImgBorder : "Bordure", +DlgImgHSpace : "Espacement horizontal", +DlgImgVSpace : "Espacement vertical", +DlgImgAlign : "Alignement", +DlgImgAlignLeft : "Gauche", +DlgImgAlignAbsBottom: "Abs Bas", +DlgImgAlignAbsMiddle: "Abs Milieu", +DlgImgAlignBaseline : "Bas du texte", +DlgImgAlignBottom : "Bas", +DlgImgAlignMiddle : "Milieu", +DlgImgAlignRight : "Droite", +DlgImgAlignTextTop : "Haut du texte", +DlgImgAlignTop : "Haut", +DlgImgPreview : "Prévisualisation", +DlgImgAlertUrl : "Veuillez saisir l'URL de l'image", +DlgImgLinkTab : "Lien", + +// Flash Dialog +DlgFlashTitle : "Propriétés de l'animation Flash", +DlgFlashChkPlay : "Lecture automatique", +DlgFlashChkLoop : "Boucle", +DlgFlashChkMenu : "Activer le menu Flash", +DlgFlashScale : "Affichage", +DlgFlashScaleAll : "Par défaut (tout montrer)", +DlgFlashScaleNoBorder : "Sans bordure", +DlgFlashScaleFit : "Ajuster aux dimensions", + +// Link Dialog +DlgLnkWindowTitle : "Propriétés du lien", +DlgLnkInfoTab : "Informations sur le lien", +DlgLnkTargetTab : "Destination", + +DlgLnkType : "Type de lien", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancre dans cette page", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocole", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Sélectionner une ancre", +DlgLnkAnchorByName : "Par nom", +DlgLnkAnchorById : "Par id", +DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)", +DlgLnkEMail : "Adresse E-Mail", +DlgLnkEMailSubject : "Sujet du message", +DlgLnkEMailBody : "Corps du message", +DlgLnkUpload : "Télécharger", +DlgLnkBtnUpload : "Envoyer sur le serveur", + +DlgLnkTarget : "Destination", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", +DlgLnkTargetParent : "Fenêtre mère (_parent)", +DlgLnkTargetSelf : "Même fenêtre (_self)", +DlgLnkTargetTop : "Fenêtre supérieure (_top)", +DlgLnkTargetFrameName : "Nom du cadre de destination", +DlgLnkPopWinName : "Nom de la fenêtre popup", +DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup", +DlgLnkPopResize : "Taille modifiable", +DlgLnkPopLocation : "Barre d'adresses", +DlgLnkPopMenu : "Barre de menu", +DlgLnkPopScroll : "Barres de défilement", +DlgLnkPopStatus : "Barre d'état", +DlgLnkPopToolbar : "Barre d'outils", +DlgLnkPopFullScrn : "Plein écran (IE)", +DlgLnkPopDependent : "Dépendante (Netscape)", +DlgLnkPopWidth : "Largeur", +DlgLnkPopHeight : "Hauteur", +DlgLnkPopLeft : "Position à partir de la gauche", +DlgLnkPopTop : "Position à partir du haut", + +DlnLnkMsgNoUrl : "Veuillez saisir l'URL", +DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail", +DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre", +DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace", + +// Color Dialog +DlgColorTitle : "Sélectionner", +DlgColorBtnClear : "Effacer", +DlgColorHighlight : "Prévisualisation", +DlgColorSelected : "Sélectionné", + +// Smiley Dialog +DlgSmileyTitle : "Insérer un Emoticon", + +// Special Character Dialog +DlgSpecialCharTitle : "Insérer un caractère spécial", + +// Table Dialog +DlgTableTitle : "Propriétés du tableau", +DlgTableRows : "Lignes", +DlgTableColumns : "Colonnes", +DlgTableBorder : "Taille de la bordure", +DlgTableAlign : "Alignement", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Gauche", +DlgTableAlignCenter : "Centré", +DlgTableAlignRight : "Droite", +DlgTableWidth : "Largeur", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "pourcentage", +DlgTableHeight : "Hauteur", +DlgTableCellSpace : "Espacement", +DlgTableCellPad : "Contour", +DlgTableCaption : "Titre", +DlgTableSummary : "Résumé", + +// Table Cell Dialog +DlgCellTitle : "Propriétés de la cellule", +DlgCellWidth : "Largeur", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "pourcentage", +DlgCellHeight : "Hauteur", +DlgCellWordWrap : "Retour à la ligne", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Oui", +DlgCellWordWrapNo : "Non", +DlgCellHorAlign : "Alignement horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Gauche", +DlgCellHorAlignCenter : "Centré", +DlgCellHorAlignRight: "Droite", +DlgCellVerAlign : "Alignement vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Haut", +DlgCellVerAlignMiddle : "Milieu", +DlgCellVerAlignBottom : "Bas", +DlgCellVerAlignBaseline : "Bas du texte", +DlgCellRowSpan : "Lignes fusionnées", +DlgCellCollSpan : "Colonnes fusionnées", +DlgCellBackColor : "Couleur de fond", +DlgCellBorderColor : "Couleur de bordure", +DlgCellBtnSelect : "Sélectionner...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Chercher et Remplacer", + +// Find Dialog +DlgFindTitle : "Chercher", +DlgFindFindBtn : "Chercher", +DlgFindNotFoundMsg : "Le texte indiqué est introuvable.", + +// Replace Dialog +DlgReplaceTitle : "Remplacer", +DlgReplaceFindLbl : "Rechercher:", +DlgReplaceReplaceLbl : "Remplacer par:", +DlgReplaceCaseChk : "Respecter la casse", +DlgReplaceReplaceBtn : "Remplacer", +DlgReplaceReplAllBtn : "Tout remplacer", +DlgReplaceWordChk : "Mot entier", + +// Paste Operations / Dialog +PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).", +PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).", + +PasteAsText : "Coller comme texte", +PasteFromWord : "Coller à partir de Word", + +DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl+V) et appuyer sur OK.", +DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.", +DlgPasteIgnoreFont : "Ignorer les polices de caractères", +DlgPasteRemoveStyles : "Supprimer les styles", + +// Color Picker +ColorAutomatic : "Automatique", +ColorMoreColors : "Plus de couleurs...", + +// Document Properties +DocProps : "Propriétés du document", + +// Anchor Dialog +DlgAnchorTitle : "Propriétés de l'ancre", +DlgAnchorName : "Nom de l'ancre", +DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre", + +// Speller Pages Dialog +DlgSpellNotInDic : "Pas dans le dictionnaire", +DlgSpellChangeTo : "Changer en", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer tout", +DlgSpellBtnReplace : "Remplacer", +DlgSpellBtnReplaceAll : "Remplacer tout", +DlgSpellBtnUndo : "Annuler", +DlgSpellNoSuggestions : "- Pas de suggestion -", +DlgSpellProgress : "Vérification d'orthographe en cours...", +DlgSpellNoMispell : "Vérification d'orthographe terminée: pas d'erreur trouvée", +DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications", +DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié", +DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés", + +IeSpellDownload : "Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?", + +// Button Dialog +DlgButtonText : "Texte (Valeur)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Bouton", +DlgButtonTypeSbm : "Soumettre", +DlgButtonTypeRst : "Réinitialiser", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nom", +DlgCheckboxValue : "Valeur", +DlgCheckboxSelected : "Sélectionné", + +// Form Dialog +DlgFormName : "Nom", +DlgFormAction : "Action", +DlgFormMethod : "Méthode", + +// Select Field Dialog +DlgSelectName : "Nom", +DlgSelectValue : "Valeur", +DlgSelectSize : "Taille", +DlgSelectLines : "lignes", +DlgSelectChkMulti : "Sélection multiple", +DlgSelectOpAvail : "Options disponibles", +DlgSelectOpText : "Texte", +DlgSelectOpValue : "Valeur", +DlgSelectBtnAdd : "Ajouter", +DlgSelectBtnModify : "Modifier", +DlgSelectBtnUp : "Monter", +DlgSelectBtnDown : "Descendre", +DlgSelectBtnSetValue : "Valeur sélectionnée", +DlgSelectBtnDelete : "Supprimer", + +// Textarea Dialog +DlgTextareaName : "Nom", +DlgTextareaCols : "Colonnes", +DlgTextareaRows : "Lignes", + +// Text Field Dialog +DlgTextName : "Nom", +DlgTextValue : "Valeur", +DlgTextCharWidth : "Largeur en caractères", +DlgTextMaxChars : "Nombre maximum de caractères", +DlgTextType : "Type", +DlgTextTypeText : "Texte", +DlgTextTypePass : "Mot de passe", + +// Hidden Field Dialog +DlgHiddenName : "Nom", +DlgHiddenValue : "Valeur", + +// Bulleted List Dialog +BulletedListProp : "Propriétés de liste à puces", +NumberedListProp : "Propriétés de liste numérotée", +DlgLstStart : "Début", +DlgLstType : "Type", +DlgLstTypeCircle : "Cercle", +DlgLstTypeDisc : "Disque", +DlgLstTypeSquare : "Carré", +DlgLstTypeNumbers : "Nombres (1, 2, 3)", +DlgLstTypeLCase : "Lettres minuscules (a, b, c)", +DlgLstTypeUCase : "Lettres majuscules (A, B, C)", +DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)", +DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Général", +DlgDocBackTab : "Fond", +DlgDocColorsTab : "Couleurs et Marges", +DlgDocMetaTab : "Méta-Données", + +DlgDocPageTitle : "Titre de la page", +DlgDocLangDir : "Sens d'écriture", +DlgDocLangDirLTR : "De la gauche vers la droite (LTR)", +DlgDocLangDirRTL : "De la droite vers la gauche (RTL)", +DlgDocLangCode : "Code langue", +DlgDocCharSet : "Encodage de caractère", +DlgDocCharSetCE : "Europe Centrale", +DlgDocCharSetCT : "Chinois Traditionnel (Big5)", +DlgDocCharSetCR : "Cyrillique", +DlgDocCharSetGR : "Grecque", +DlgDocCharSetJP : "Japonais", +DlgDocCharSetKR : "Coréen", +DlgDocCharSetTR : "Turcque", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Occidental", +DlgDocCharSetOther : "Autre encodage de caractère", + +DlgDocDocType : "Type de document", +DlgDocDocTypeOther : "Autre type de document", +DlgDocIncXHTML : "Inclure les déclarations XHTML", +DlgDocBgColor : "Couleur de fond", +DlgDocBgImage : "Image de fond", +DlgDocBgNoScroll : "Image fixe sans défilement", +DlgDocCText : "Texte", +DlgDocCLink : "Lien", +DlgDocCVisited : "Lien visité", +DlgDocCActive : "Lien activé", +DlgDocMargins : "Marges", +DlgDocMaTop : "Haut", +DlgDocMaLeft : "Gauche", +DlgDocMaRight : "Droite", +DlgDocMaBottom : "Bas", +DlgDocMeIndex : "Mots-clés (séparés par des virgules)", +DlgDocMeDescr : "Description", +DlgDocMeAuthor : "Auteur", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Prévisualisation", + +// Templates Dialog +Templates : "Modèles", +DlgTemplatesTitle : "Modèles de contenu", +DlgTemplatesSelMsg : "Sélectionner le modèle à ouvrir dans l'éditeur
        (le contenu actuel sera remplacé):", +DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...", +DlgTemplatesNoTpl : "(Aucun modèle disponible)", +DlgTemplatesReplace : "Remplacer tout le contenu actuel", + +// About Dialog +DlgAboutAboutTab : "Á propos de", +DlgAboutBrowserInfoTab : "Navigateur", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "Version", +DlgAboutInfo : "Pour plus d'informations, visiter" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr.js new file mode 100644 index 0000000..10d8a9e --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/fr.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * French language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Masquer Outils", +ToolbarExpand : "Afficher Outils", + +// Toolbar Items and Context Menu +Save : "Enregistrer", +NewPage : "Nouvelle page", +Preview : "Prévisualisation", +Cut : "Couper", +Copy : "Copier", +Paste : "Coller", +PasteText : "Coller comme texte", +PasteWord : "Coller de Word", +Print : "Imprimer", +SelectAll : "Tout sélectionner", +RemoveFormat : "Supprimer le format", +InsertLinkLbl : "Lien", +InsertLink : "Insérer/modifier le lien", +RemoveLink : "Supprimer le lien", +Anchor : "Insérer/modifier l'ancre", +AnchorDelete : "Supprimer l'ancre", +InsertImageLbl : "Image", +InsertImage : "Insérer/modifier l'image", +InsertFlashLbl : "Animation Flash", +InsertFlash : "Insérer/modifier l'animation Flash", +InsertTableLbl : "Tableau", +InsertTable : "Insérer/modifier le tableau", +InsertLineLbl : "Séparateur", +InsertLine : "Insérer un séparateur", +InsertSpecialCharLbl: "Caractères spéciaux", +InsertSpecialChar : "Insérer un caractère spécial", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insérer un Smiley", +About : "A propos de FCKeditor", +Bold : "Gras", +Italic : "Italique", +Underline : "Souligné", +StrikeThrough : "Barré", +Subscript : "Indice", +Superscript : "Exposant", +LeftJustify : "Aligné à gauche", +CenterJustify : "Centré", +RightJustify : "Aligné à Droite", +BlockJustify : "Texte justifié", +DecreaseIndent : "Diminuer le retrait", +IncreaseIndent : "Augmenter le retrait", +Blockquote : "Citation", +Undo : "Annuler", +Redo : "Refaire", +NumberedListLbl : "Liste numérotée", +NumberedList : "Insérer/supprimer la liste numérotée", +BulletedListLbl : "Liste à puces", +BulletedList : "Insérer/supprimer la liste à puces", +ShowTableBorders : "Afficher les bordures du tableau", +ShowDetails : "Afficher les caractères invisibles", +Style : "Style", +FontFormat : "Format", +Font : "Police", +FontSize : "Taille", +TextColor : "Couleur de caractère", +BGColor : "Couleur de fond", +Source : "Source", +Find : "Chercher", +Replace : "Remplacer", +SpellCheck : "Orthographe", +UniversalKeyboard : "Clavier universel", +PageBreakLbl : "Saut de page", +PageBreak : "Insérer un saut de page", + +Form : "Formulaire", +Checkbox : "Case à cocher", +RadioButton : "Bouton radio", +TextField : "Champ texte", +Textarea : "Zone de texte", +HiddenField : "Champ caché", +Button : "Bouton", +SelectionField : "Liste/menu", +ImageButton : "Bouton image", + +FitWindow : "Edition pleine page", +ShowBlocks : "Afficher les blocs", + +// Context Menu +EditLink : "Modifier le lien", +CellCM : "Cellule", +RowCM : "Ligne", +ColumnCM : "Colonne", +InsertRowAfter : "Insérer une ligne après", +InsertRowBefore : "Insérer une ligne avant", +DeleteRows : "Supprimer des lignes", +InsertColumnAfter : "Insérer une colonne après", +InsertColumnBefore : "Insérer une colonne avant", +DeleteColumns : "Supprimer des colonnes", +InsertCellAfter : "Insérer une cellule après", +InsertCellBefore : "Insérer une cellule avant", +DeleteCells : "Supprimer des cellules", +MergeCells : "Fusionner les cellules", +MergeRight : "Fusionner à droite", +MergeDown : "Fusionner en bas", +HorizontalSplitCell : "Scinder la cellule horizontalement", +VerticalSplitCell : "Scinder la cellule verticalement", +TableDelete : "Supprimer le tableau", +CellProperties : "Propriétés de cellule", +TableProperties : "Propriétés du tableau", +ImageProperties : "Propriétés de l'image", +FlashProperties : "Propriétés de l'animation Flash", + +AnchorProp : "Propriétés de l'ancre", +ButtonProp : "Propriétés du bouton", +CheckboxProp : "Propriétés de la case à cocher", +HiddenFieldProp : "Propriétés du champ caché", +RadioButtonProp : "Propriétés du bouton radio", +ImageButtonProp : "Propriétés du bouton image", +TextFieldProp : "Propriétés du champ texte", +SelectionFieldProp : "Propriétés de la liste/du menu", +TextareaProp : "Propriétés de la zone de texte", +FormProp : "Propriétés du formulaire", + +FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Calcul XHTML. Veuillez patienter...", +Done : "Terminé", +PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?", +NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?", +UnknownToolbarItem : "Elément de barre d'outil inconnu \"%1\"", +UnknownCommand : "Nom de commande inconnu \"%1\"", +NotImplemented : "Commande non encore écrite", +UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas", +NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.", +BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.", +DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuler", +DlgBtnClose : "Fermer", +DlgBtnBrowseServer : "Parcourir le serveur", +DlgAdvancedTag : "Avancé", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Veuillez saisir l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Sens d'écriture", +DlgGenLangDirLtr : "De gauche à droite (LTR)", +DlgGenLangDirRtl : "De droite à gauche (RTL)", +DlgGenLangCode : "Code langue", +DlgGenAccessKey : "Equivalent clavier", +DlgGenName : "Nom", +DlgGenTabIndex : "Ordre de tabulation", +DlgGenLongDescr : "URL de description longue", +DlgGenClass : "Classes de feuilles de style", +DlgGenTitle : "Titre", +DlgGenContType : "Type de contenu", +DlgGenLinkCharset : "Encodage de caractère", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Propriétés de l'image", +DlgImgInfoTab : "Informations sur l'image", +DlgImgBtnUpload : "Envoyer sur le serveur", +DlgImgURL : "URL", +DlgImgUpload : "Télécharger", +DlgImgAlt : "Texte de remplacement", +DlgImgWidth : "Largeur", +DlgImgHeight : "Hauteur", +DlgImgLockRatio : "Garder les proportions", +DlgBtnResetSize : "Taille originale", +DlgImgBorder : "Bordure", +DlgImgHSpace : "Espacement horizontal", +DlgImgVSpace : "Espacement vertical", +DlgImgAlign : "Alignement", +DlgImgAlignLeft : "Gauche", +DlgImgAlignAbsBottom: "Abs Bas", +DlgImgAlignAbsMiddle: "Abs Milieu", +DlgImgAlignBaseline : "Bas du texte", +DlgImgAlignBottom : "Bas", +DlgImgAlignMiddle : "Milieu", +DlgImgAlignRight : "Droite", +DlgImgAlignTextTop : "Haut du texte", +DlgImgAlignTop : "Haut", +DlgImgPreview : "Prévisualisation", +DlgImgAlertUrl : "Veuillez saisir l'URL de l'image", +DlgImgLinkTab : "Lien", + +// Flash Dialog +DlgFlashTitle : "Propriétés de l'animation Flash", +DlgFlashChkPlay : "Lecture automatique", +DlgFlashChkLoop : "Boucle", +DlgFlashChkMenu : "Activer le menu Flash", +DlgFlashScale : "Affichage", +DlgFlashScaleAll : "Par défaut (tout montrer)", +DlgFlashScaleNoBorder : "Sans bordure", +DlgFlashScaleFit : "Ajuster aux dimensions", + +// Link Dialog +DlgLnkWindowTitle : "Propriétés du lien", +DlgLnkInfoTab : "Informations sur le lien", +DlgLnkTargetTab : "Destination", + +DlgLnkType : "Type de lien", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancre dans cette page", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocole", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Sélectionner une ancre", +DlgLnkAnchorByName : "Par nom", +DlgLnkAnchorById : "Par id", +DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)", +DlgLnkEMail : "Adresse E-Mail", +DlgLnkEMailSubject : "Sujet du message", +DlgLnkEMailBody : "Corps du message", +DlgLnkUpload : "Télécharger", +DlgLnkBtnUpload : "Envoyer sur le serveur", + +DlgLnkTarget : "Destination", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", +DlgLnkTargetParent : "Fenêtre mère (_parent)", +DlgLnkTargetSelf : "Même fenêtre (_self)", +DlgLnkTargetTop : "Fenêtre supérieure (_top)", +DlgLnkTargetFrameName : "Nom du cadre de destination", +DlgLnkPopWinName : "Nom de la fenêtre popup", +DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup", +DlgLnkPopResize : "Taille modifiable", +DlgLnkPopLocation : "Barre d'adresses", +DlgLnkPopMenu : "Barre de menu", +DlgLnkPopScroll : "Barres de défilement", +DlgLnkPopStatus : "Barre d'état", +DlgLnkPopToolbar : "Barre d'outils", +DlgLnkPopFullScrn : "Plein écran (IE)", +DlgLnkPopDependent : "Dépendante (Netscape)", +DlgLnkPopWidth : "Largeur", +DlgLnkPopHeight : "Hauteur", +DlgLnkPopLeft : "Position à partir de la gauche", +DlgLnkPopTop : "Position à partir du haut", + +DlnLnkMsgNoUrl : "Veuillez saisir l'URL", +DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail", +DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre", +DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace", + +// Color Dialog +DlgColorTitle : "Sélectionner", +DlgColorBtnClear : "Effacer", +DlgColorHighlight : "Prévisualisation", +DlgColorSelected : "Sélectionné", + +// Smiley Dialog +DlgSmileyTitle : "Insérer un Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Insérer un caractère spécial", + +// Table Dialog +DlgTableTitle : "Propriétés du tableau", +DlgTableRows : "Lignes", +DlgTableColumns : "Colonnes", +DlgTableBorder : "Bordure", +DlgTableAlign : "Alignement", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Gauche", +DlgTableAlignCenter : "Centré", +DlgTableAlignRight : "Droite", +DlgTableWidth : "Largeur", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "pourcentage", +DlgTableHeight : "Hauteur", +DlgTableCellSpace : "Espacement", +DlgTableCellPad : "Contour", +DlgTableCaption : "Titre", +DlgTableSummary : "Résumé", + +// Table Cell Dialog +DlgCellTitle : "Propriétés de la cellule", +DlgCellWidth : "Largeur", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "pourcentage", +DlgCellHeight : "Hauteur", +DlgCellWordWrap : "Retour à la ligne", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Oui", +DlgCellWordWrapNo : "Non", +DlgCellHorAlign : "Alignement horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Gauche", +DlgCellHorAlignCenter : "Centré", +DlgCellHorAlignRight: "Droite", +DlgCellVerAlign : "Alignement vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Haut", +DlgCellVerAlignMiddle : "Milieu", +DlgCellVerAlignBottom : "Bas", +DlgCellVerAlignBaseline : "Bas du texte", +DlgCellRowSpan : "Lignes fusionnées", +DlgCellCollSpan : "Colonnes fusionnées", +DlgCellBackColor : "Fond", +DlgCellBorderColor : "Bordure", +DlgCellBtnSelect : "Choisir...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Chercher et Remplacer", + +// Find Dialog +DlgFindTitle : "Chercher", +DlgFindFindBtn : "Chercher", +DlgFindNotFoundMsg : "Le texte indiqué est introuvable.", + +// Replace Dialog +DlgReplaceTitle : "Remplacer", +DlgReplaceFindLbl : "Rechercher:", +DlgReplaceReplaceLbl : "Remplacer par:", +DlgReplaceCaseChk : "Respecter la casse", +DlgReplaceReplaceBtn : "Remplacer", +DlgReplaceReplAllBtn : "Tout remplacer", +DlgReplaceWordChk : "Mot entier", + +// Paste Operations / Dialog +PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).", +PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).", + +PasteAsText : "Coller comme texte", +PasteFromWord : "Coller à partir de Word", + +DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl+V) et cliquez sur OK.", +DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.", +DlgPasteIgnoreFont : "Ignorer les polices de caractères", +DlgPasteRemoveStyles : "Supprimer les styles", + +// Color Picker +ColorAutomatic : "Automatique", +ColorMoreColors : "Plus de couleurs...", + +// Document Properties +DocProps : "Propriétés du document", + +// Anchor Dialog +DlgAnchorTitle : "Propriétés de l'ancre", +DlgAnchorName : "Nom de l'ancre", +DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre", + +// Speller Pages Dialog +DlgSpellNotInDic : "Pas dans le dictionnaire", +DlgSpellChangeTo : "Changer en", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer tout", +DlgSpellBtnReplace : "Remplacer", +DlgSpellBtnReplaceAll : "Remplacer tout", +DlgSpellBtnUndo : "Annuler", +DlgSpellNoSuggestions : "- Aucune suggestion -", +DlgSpellProgress : "Vérification d'orthographe en cours...", +DlgSpellNoMispell : "Vérification d'orthographe terminée: Aucune erreur trouvée", +DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications", +DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié", +DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés", + +IeSpellDownload : "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?", + +// Button Dialog +DlgButtonText : "Texte (valeur)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Bouton", +DlgButtonTypeSbm : "Envoyer", +DlgButtonTypeRst : "Réinitialiser", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nom", +DlgCheckboxValue : "Valeur", +DlgCheckboxSelected : "Sélectionné", + +// Form Dialog +DlgFormName : "Nom", +DlgFormAction : "Action", +DlgFormMethod : "Méthode", + +// Select Field Dialog +DlgSelectName : "Nom", +DlgSelectValue : "Valeur", +DlgSelectSize : "Taille", +DlgSelectLines : "lignes", +DlgSelectChkMulti : "Sélection multiple", +DlgSelectOpAvail : "Options disponibles", +DlgSelectOpText : "Texte", +DlgSelectOpValue : "Valeur", +DlgSelectBtnAdd : "Ajouter", +DlgSelectBtnModify : "Modifier", +DlgSelectBtnUp : "Monter", +DlgSelectBtnDown : "Descendre", +DlgSelectBtnSetValue : "Valeur sélectionnée", +DlgSelectBtnDelete : "Supprimer", + +// Textarea Dialog +DlgTextareaName : "Nom", +DlgTextareaCols : "Colonnes", +DlgTextareaRows : "Lignes", + +// Text Field Dialog +DlgTextName : "Nom", +DlgTextValue : "Valeur", +DlgTextCharWidth : "Largeur en caractères", +DlgTextMaxChars : "Nombre maximum de caractères", +DlgTextType : "Type", +DlgTextTypeText : "Texte", +DlgTextTypePass : "Mot de passe", + +// Hidden Field Dialog +DlgHiddenName : "Nom", +DlgHiddenValue : "Valeur", + +// Bulleted List Dialog +BulletedListProp : "Propriétés de liste à puces", +NumberedListProp : "Propriétés de liste numérotée", +DlgLstStart : "Début", +DlgLstType : "Type", +DlgLstTypeCircle : "Cercle", +DlgLstTypeDisc : "Disque", +DlgLstTypeSquare : "Carré", +DlgLstTypeNumbers : "Nombres (1, 2, 3)", +DlgLstTypeLCase : "Lettres minuscules (a, b, c)", +DlgLstTypeUCase : "Lettres majuscules (A, B, C)", +DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)", +DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Général", +DlgDocBackTab : "Fond", +DlgDocColorsTab : "Couleurs et marges", +DlgDocMetaTab : "Métadonnées", + +DlgDocPageTitle : "Titre de la page", +DlgDocLangDir : "Sens d'écriture", +DlgDocLangDirLTR : "De la gauche vers la droite (LTR)", +DlgDocLangDirRTL : "De la droite vers la gauche (RTL)", +DlgDocLangCode : "Code langue", +DlgDocCharSet : "Encodage de caractère", +DlgDocCharSetCE : "Europe Centrale", +DlgDocCharSetCT : "Chinois Traditionnel (Big5)", +DlgDocCharSetCR : "Cyrillique", +DlgDocCharSetGR : "Grec", +DlgDocCharSetJP : "Japonais", +DlgDocCharSetKR : "Coréen", +DlgDocCharSetTR : "Turc", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Occidental", +DlgDocCharSetOther : "Autre encodage de caractère", + +DlgDocDocType : "Type de document", +DlgDocDocTypeOther : "Autre type de document", +DlgDocIncXHTML : "Inclure les déclarations XHTML", +DlgDocBgColor : "Couleur de fond", +DlgDocBgImage : "Image de fond", +DlgDocBgNoScroll : "Image fixe sans défilement", +DlgDocCText : "Texte", +DlgDocCLink : "Lien", +DlgDocCVisited : "Lien visité", +DlgDocCActive : "Lien activé", +DlgDocMargins : "Marges", +DlgDocMaTop : "Haut", +DlgDocMaLeft : "Gauche", +DlgDocMaRight : "Droite", +DlgDocMaBottom : "Bas", +DlgDocMeIndex : "Mots-clés (séparés par des virgules)", +DlgDocMeDescr : "Description", +DlgDocMeAuthor : "Auteur", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Prévisualisation", + +// Templates Dialog +Templates : "Modèles", +DlgTemplatesTitle : "Modèles de contenu", +DlgTemplatesSelMsg : "Veuillez sélectionner le modèle à ouvrir dans l'éditeur
        (le contenu actuel sera remplacé):", +DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...", +DlgTemplatesNoTpl : "(Aucun modèle disponible)", +DlgTemplatesReplace : "Remplacer tout le contenu", + +// About Dialog +DlgAboutAboutTab : "A propos de", +DlgAboutBrowserInfoTab : "Navigateur", +DlgAboutLicenseTab : "Licence", +DlgAboutVersion : "Version", +DlgAboutInfo : "Pour plus d'informations, aller à" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/gl.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/gl.js new file mode 100644 index 0000000..3172ca4 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/gl.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Galician language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Ocultar Ferramentas", +ToolbarExpand : "Mostrar Ferramentas", + +// Toolbar Items and Context Menu +Save : "Gardar", +NewPage : "Nova Páxina", +Preview : "Vista Previa", +Cut : "Cortar", +Copy : "Copiar", +Paste : "Pegar", +PasteText : "Pegar como texto plano", +PasteWord : "Pegar dende Word", +Print : "Imprimir", +SelectAll : "Seleccionar todo", +RemoveFormat : "Eliminar Formato", +InsertLinkLbl : "Ligazón", +InsertLink : "Inserir/Editar Ligazón", +RemoveLink : "Eliminar Ligazón", +Anchor : "Inserir/Editar Referencia", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Imaxe", +InsertImage : "Inserir/Editar Imaxe", +InsertFlashLbl : "Flash", +InsertFlash : "Inserir/Editar Flash", +InsertTableLbl : "Tabla", +InsertTable : "Inserir/Editar Tabla", +InsertLineLbl : "Liña", +InsertLine : "Inserir Liña Horizontal", +InsertSpecialCharLbl: "Carácter Special", +InsertSpecialChar : "Inserir Carácter Especial", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Inserir Smiley", +About : "Acerca de FCKeditor", +Bold : "Negrita", +Italic : "Cursiva", +Underline : "Sub-raiado", +StrikeThrough : "Tachado", +Subscript : "Subíndice", +Superscript : "Superíndice", +LeftJustify : "Aliñar á Esquerda", +CenterJustify : "Centrado", +RightJustify : "Aliñar á Dereita", +BlockJustify : "Xustificado", +DecreaseIndent : "Disminuir Sangría", +IncreaseIndent : "Aumentar Sangría", +Blockquote : "Blockquote", //MISSING +Undo : "Desfacer", +Redo : "Refacer", +NumberedListLbl : "Lista Numerada", +NumberedList : "Inserir/Eliminar Lista Numerada", +BulletedListLbl : "Marcas", +BulletedList : "Inserir/Eliminar Marcas", +ShowTableBorders : "Mostrar Bordes das Táboas", +ShowDetails : "Mostrar Marcas Parágrafo", +Style : "Estilo", +FontFormat : "Formato", +Font : "Tipo", +FontSize : "Tamaño", +TextColor : "Cor do Texto", +BGColor : "Cor do Fondo", +Source : "Código Fonte", +Find : "Procurar", +Replace : "Substituir", +SpellCheck : "Corrección Ortográfica", +UniversalKeyboard : "Teclado Universal", +PageBreakLbl : "Salto de Páxina", +PageBreak : "Inserir Salto de Páxina", + +Form : "Formulario", +Checkbox : "Cadro de Verificación", +RadioButton : "Botón de Radio", +TextField : "Campo de Texto", +Textarea : "Área de Texto", +HiddenField : "Campo Oculto", +Button : "Botón", +SelectionField : "Campo de Selección", +ImageButton : "Botón de Imaxe", + +FitWindow : "Maximizar o tamaño do editor", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Editar Ligazón", +CellCM : "Cela", +RowCM : "Fila", +ColumnCM : "Columna", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Borrar Filas", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Borrar Columnas", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Borrar Cela", +MergeCells : "Unir Celas", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Borrar Táboa", +CellProperties : "Propriedades da Cela", +TableProperties : "Propriedades da Táboa", +ImageProperties : "Propriedades Imaxe", +FlashProperties : "Propriedades Flash", + +AnchorProp : "Propriedades da Referencia", +ButtonProp : "Propriedades do Botón", +CheckboxProp : "Propriedades do Cadro de Verificación", +HiddenFieldProp : "Propriedades do Campo Oculto", +RadioButtonProp : "Propriedades do Botón de Radio", +ImageButtonProp : "Propriedades do Botón de Imaxe", +TextFieldProp : "Propriedades do Campo de Texto", +SelectionFieldProp : "Propriedades do Campo de Selección", +TextareaProp : "Propriedades da Área de Texto", +FormProp : "Propriedades do Formulario", + +FontFormats : "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Procesando XHTML. Por facor, agarde...", +Done : "Feiro", +PasteWordConfirm : "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?", +NotCompatiblePaste : "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?", +UnknownToolbarItem : "Ítem de ferramentas descoñecido \"%1\"", +UnknownCommand : "Nome de comando descoñecido \"%1\"", +NotImplemented : "Comando non implementado", +UnknownToolbarSet : "O conxunto de ferramentas \"%1\" non existe", +NoActiveX : "As opcións de seguridade do seu navegador poderían limitar algunha das características de editor. Debe activar a opción \"Executar controis ActiveX e plug-ins\". Pode notar que faltan características e experimentar erros", +BrowseServerBlocked : "Non se poido abrir o navegador de recursos. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes", +DialogBlocked : "Non foi posible abrir a xanela de diálogo. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancelar", +DlgBtnClose : "Pechar", +DlgBtnBrowseServer : "Navegar no Servidor", +DlgAdvancedTag : "Advanzado", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Por favor, insira a URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Orientación do Idioma", +DlgGenLangDirLtr : "Esquerda a Dereita (LTR)", +DlgGenLangDirRtl : "Dereita a Esquerda (RTL)", +DlgGenLangCode : "Código do Idioma", +DlgGenAccessKey : "Chave de Acceso", +DlgGenName : "Nome", +DlgGenTabIndex : "Índice de Tabulación", +DlgGenLongDescr : "Descrición Completa da URL", +DlgGenClass : "Clases da Folla de Estilos", +DlgGenTitle : "Título", +DlgGenContType : "Tipo de Contido", +DlgGenLinkCharset : "Fonte de Caracteres Vinculado", +DlgGenStyle : "Estilo", + +// Image Dialog +DlgImgTitle : "Propriedades da Imaxe", +DlgImgInfoTab : "Información da Imaxe", +DlgImgBtnUpload : "Enviar ó Servidor", +DlgImgURL : "URL", +DlgImgUpload : "Carregar", +DlgImgAlt : "Texto Alternativo", +DlgImgWidth : "Largura", +DlgImgHeight : "Altura", +DlgImgLockRatio : "Proporcional", +DlgBtnResetSize : "Tamaño Orixinal", +DlgImgBorder : "Límite", +DlgImgHSpace : "Esp. Horiz.", +DlgImgVSpace : "Esp. Vert.", +DlgImgAlign : "Aliñamento", +DlgImgAlignLeft : "Esquerda", +DlgImgAlignAbsBottom: "Abs Inferior", +DlgImgAlignAbsMiddle: "Abs Centro", +DlgImgAlignBaseline : "Liña Base", +DlgImgAlignBottom : "Pé", +DlgImgAlignMiddle : "Centro", +DlgImgAlignRight : "Dereita", +DlgImgAlignTextTop : "Tope do Texto", +DlgImgAlignTop : "Tope", +DlgImgPreview : "Vista Previa", +DlgImgAlertUrl : "Por favor, escriba a URL da imaxe", +DlgImgLinkTab : "Ligazón", + +// Flash Dialog +DlgFlashTitle : "Propriedades Flash", +DlgFlashChkPlay : "Auto Execución", +DlgFlashChkLoop : "Bucle", +DlgFlashChkMenu : "Activar Menú Flash", +DlgFlashScale : "Escalar", +DlgFlashScaleAll : "Amosar Todo", +DlgFlashScaleNoBorder : "Sen Borde", +DlgFlashScaleFit : "Encaixar axustando", + +// Link Dialog +DlgLnkWindowTitle : "Ligazón", +DlgLnkInfoTab : "Información da Ligazón", +DlgLnkTargetTab : "Referencia a esta páxina", + +DlgLnkType : "Tipo de Ligazón", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Referencia nesta páxina", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocolo", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Seleccionar unha Referencia", +DlgLnkAnchorByName : "Por Nome de Referencia", +DlgLnkAnchorById : "Por Element Id", +DlgLnkNoAnchors : "(Non hai referencias disponibles no documento)", +DlgLnkEMail : "Enderezo de E-Mail", +DlgLnkEMailSubject : "Asunto do Mensaxe", +DlgLnkEMailBody : "Corpo do Mensaxe", +DlgLnkUpload : "Carregar", +DlgLnkBtnUpload : "Enviar ó servidor", + +DlgLnkTarget : "Destino", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nova Xanela (_blank)", +DlgLnkTargetParent : "Xanela Pai (_parent)", +DlgLnkTargetSelf : "Mesma Xanela (_self)", +DlgLnkTargetTop : "Xanela Primaria (_top)", +DlgLnkTargetFrameName : "Nome do Marco Destino", +DlgLnkPopWinName : "Nome da Xanela Emerxente", +DlgLnkPopWinFeat : "Características da Xanela Emerxente", +DlgLnkPopResize : "Axustable", +DlgLnkPopLocation : "Barra de Localización", +DlgLnkPopMenu : "Barra de Menú", +DlgLnkPopScroll : "Barras de Desplazamento", +DlgLnkPopStatus : "Barra de Estado", +DlgLnkPopToolbar : "Barra de Ferramentas", +DlgLnkPopFullScrn : "A Toda Pantalla (IE)", +DlgLnkPopDependent : "Dependente (Netscape)", +DlgLnkPopWidth : "Largura", +DlgLnkPopHeight : "Altura", +DlgLnkPopLeft : "Posición Esquerda", +DlgLnkPopTop : "Posición dende Arriba", + +DlnLnkMsgNoUrl : "Por favor, escriba a ligazón URL", +DlnLnkMsgNoEMail : "Por favor, escriba o enderezo de e-mail", +DlnLnkMsgNoAnchor : "Por favor, seleccione un destino", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Seleccionar Color", +DlgColorBtnClear : "Nengunha", +DlgColorHighlight : "Destacado", +DlgColorSelected : "Seleccionado", + +// Smiley Dialog +DlgSmileyTitle : "Inserte un Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Seleccione Caracter Especial", + +// Table Dialog +DlgTableTitle : "Propiedades da Táboa", +DlgTableRows : "Filas", +DlgTableColumns : "Columnas", +DlgTableBorder : "Tamaño do Borde", +DlgTableAlign : "Aliñamento", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Esquerda", +DlgTableAlignCenter : "Centro", +DlgTableAlignRight : "Ereita", +DlgTableWidth : "Largura", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Altura", +DlgTableCellSpace : "Marxe entre Celas", +DlgTableCellPad : "Marxe interior", +DlgTableCaption : "Título", +DlgTableSummary : "Sumario", + +// Table Cell Dialog +DlgCellTitle : "Propriedades da Cela", +DlgCellWidth : "Largura", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Altura", +DlgCellWordWrap : "Axustar Liñas", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Si", +DlgCellWordWrapNo : "Non", +DlgCellHorAlign : "Aliñamento Horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Esquerda", +DlgCellHorAlignCenter : "Centro", +DlgCellHorAlignRight: "Dereita", +DlgCellVerAlign : "Aliñamento Vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Arriba", +DlgCellVerAlignMiddle : "Medio", +DlgCellVerAlignBottom : "Abaixo", +DlgCellVerAlignBaseline : "Liña de Base", +DlgCellRowSpan : "Ocupar Filas", +DlgCellCollSpan : "Ocupar Columnas", +DlgCellBackColor : "Color de Fondo", +DlgCellBorderColor : "Color de Borde", +DlgCellBtnSelect : "Seleccionar...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Procurar", +DlgFindFindBtn : "Procurar", +DlgFindNotFoundMsg : "Non te atopou o texto indicado.", + +// Replace Dialog +DlgReplaceTitle : "Substituir", +DlgReplaceFindLbl : "Texto a procurar:", +DlgReplaceReplaceLbl : "Substituir con:", +DlgReplaceCaseChk : "Coincidir Mai./min.", +DlgReplaceReplaceBtn : "Substituir", +DlgReplaceReplAllBtn : "Substitiur Todo", +DlgReplaceWordChk : "Coincidir con toda a palabra", + +// Paste Operations / Dialog +PasteErrorCut : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).", +PasteErrorCopy : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).", + +PasteAsText : "Pegar como texto plano", +PasteFromWord : "Pegar dende Word", + +DlgPasteMsg2 : "Por favor, pegue dentro do seguinte cadro usando o teclado (Ctrl+V) e pulse OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignorar as definicións de Tipografía", +DlgPasteRemoveStyles : "Eliminar as definicións de Estilos", + +// Color Picker +ColorAutomatic : "Automático", +ColorMoreColors : "Máis Cores...", + +// Document Properties +DocProps : "Propriedades do Documento", + +// Anchor Dialog +DlgAnchorTitle : "Propriedades da Referencia", +DlgAnchorName : "Nome da Referencia", +DlgAnchorErrorName : "Por favor, escriba o nome da referencia", + +// Speller Pages Dialog +DlgSpellNotInDic : "Non está no diccionario", +DlgSpellChangeTo : "Cambiar a", +DlgSpellBtnIgnore : "Ignorar", +DlgSpellBtnIgnoreAll : "Ignorar Todas", +DlgSpellBtnReplace : "Substituir", +DlgSpellBtnReplaceAll : "Substituir Todas", +DlgSpellBtnUndo : "Desfacer", +DlgSpellNoSuggestions : "- Sen candidatos -", +DlgSpellProgress : "Corrección ortográfica en progreso...", +DlgSpellNoMispell : "Corrección ortográfica rematada: Non se atoparon erros", +DlgSpellNoChanges : "Corrección ortográfica rematada: Non se substituiu nengunha verba", +DlgSpellOneChange : "Corrección ortográfica rematada: Unha verba substituida", +DlgSpellManyChanges : "Corrección ortográfica rematada: %1 verbas substituidas", + +IeSpellDownload : "O corrector ortográfico non está instalado. ¿Quere descargalo agora?", + +// Button Dialog +DlgButtonText : "Texto (Valor)", +DlgButtonType : "Tipo", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nome", +DlgCheckboxValue : "Valor", +DlgCheckboxSelected : "Seleccionado", + +// Form Dialog +DlgFormName : "Nome", +DlgFormAction : "Acción", +DlgFormMethod : "Método", + +// Select Field Dialog +DlgSelectName : "Nome", +DlgSelectValue : "Valor", +DlgSelectSize : "Tamaño", +DlgSelectLines : "liñas", +DlgSelectChkMulti : "Permitir múltiples seleccións", +DlgSelectOpAvail : "Opcións Disponibles", +DlgSelectOpText : "Texto", +DlgSelectOpValue : "Valor", +DlgSelectBtnAdd : "Engadir", +DlgSelectBtnModify : "Modificar", +DlgSelectBtnUp : "Subir", +DlgSelectBtnDown : "Baixar", +DlgSelectBtnSetValue : "Definir como valor por defecto", +DlgSelectBtnDelete : "Borrar", + +// Textarea Dialog +DlgTextareaName : "Nome", +DlgTextareaCols : "Columnas", +DlgTextareaRows : "Filas", + +// Text Field Dialog +DlgTextName : "Nome", +DlgTextValue : "Valor", +DlgTextCharWidth : "Tamaño do Caracter", +DlgTextMaxChars : "Máximo de Caracteres", +DlgTextType : "Tipo", +DlgTextTypeText : "Texto", +DlgTextTypePass : "Chave", + +// Hidden Field Dialog +DlgHiddenName : "Nome", +DlgHiddenValue : "Valor", + +// Bulleted List Dialog +BulletedListProp : "Propriedades das Marcas", +NumberedListProp : "Propriedades da Lista de Numeración", +DlgLstStart : "Start", //MISSING +DlgLstType : "Tipo", +DlgLstTypeCircle : "Círculo", +DlgLstTypeDisc : "Disco", +DlgLstTypeSquare : "Cuadrado", +DlgLstTypeNumbers : "Números (1, 2, 3)", +DlgLstTypeLCase : "Letras Minúsculas (a, b, c)", +DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)", +DlgLstTypeSRoman : "Números Romanos en minúscula (i, ii, iii)", +DlgLstTypeLRoman : "Números Romanos en Maiúscula (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Xeral", +DlgDocBackTab : "Fondo", +DlgDocColorsTab : "Cores e Marxes", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Título da Páxina", +DlgDocLangDir : "Orientación do Idioma", +DlgDocLangDirLTR : "Esquerda a Dereita (LTR)", +DlgDocLangDirRTL : "Dereita a Esquerda (RTL)", +DlgDocLangCode : "Código de Idioma", +DlgDocCharSet : "Codificación do Xogo de Caracteres", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Outra Codificación do Xogo de Caracteres", + +DlgDocDocType : "Encabezado do Tipo de Documento", +DlgDocDocTypeOther : "Outro Encabezado do Tipo de Documento", +DlgDocIncXHTML : "Incluir Declaracións XHTML", +DlgDocBgColor : "Cor de Fondo", +DlgDocBgImage : "URL da Imaxe de Fondo", +DlgDocBgNoScroll : "Fondo Fixo", +DlgDocCText : "Texto", +DlgDocCLink : "Ligazóns", +DlgDocCVisited : "Ligazón Visitada", +DlgDocCActive : "Ligazón Activa", +DlgDocMargins : "Marxes da Páxina", +DlgDocMaTop : "Arriba", +DlgDocMaLeft : "Esquerda", +DlgDocMaRight : "Dereita", +DlgDocMaBottom : "Abaixo", +DlgDocMeIndex : "Palabras Chave de Indexación do Documento (separadas por comas)", +DlgDocMeDescr : "Descripción do Documento", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vista Previa", + +// Templates Dialog +Templates : "Plantillas", +DlgTemplatesTitle : "Plantillas de Contido", +DlgTemplatesSelMsg : "Por favor, seleccione a plantilla a abrir no editor
        (o contido actual perderase):", +DlgTemplatesLoading : "Cargando listado de plantillas. Por favor, espere...", +DlgTemplatesNoTpl : "(Non hai plantillas definidas)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "Acerca de", +DlgAboutBrowserInfoTab : "Información do Navegador", +DlgAboutLicenseTab : "Licencia", +DlgAboutVersion : "versión", +DlgAboutInfo : "Para máis información visitar:" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/he.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/he.js new file mode 100644 index 0000000..9f2eab2 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/he.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Hebrew language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "rtl", + +ToolbarCollapse : "כיווץ סרגל הכלים", +ToolbarExpand : "פתיחת סרגל הכלים", + +// Toolbar Items and Context Menu +Save : "שמירה", +NewPage : "דף חדש", +Preview : "תצוגה מקדימה", +Cut : "גזירה", +Copy : "העתקה", +Paste : "הדבקה", +PasteText : "הדבקה כטקסט פשוט", +PasteWord : "הדבקה מ-וורד", +Print : "הדפסה", +SelectAll : "בחירת הכל", +RemoveFormat : "הסרת העיצוב", +InsertLinkLbl : "קישור", +InsertLink : "הוספת/עריכת קישור", +RemoveLink : "הסרת הקישור", +Anchor : "הוספת/עריכת נקודת עיגון", +AnchorDelete : "הסר נקודת עיגון", +InsertImageLbl : "תמונה", +InsertImage : "הוספת/עריכת תמונה", +InsertFlashLbl : "פלאש", +InsertFlash : "הוסף/ערוך פלאש", +InsertTableLbl : "טבלה", +InsertTable : "הוספת/עריכת טבלה", +InsertLineLbl : "קו", +InsertLine : "הוספת קו אופקי", +InsertSpecialCharLbl: "תו מיוחד", +InsertSpecialChar : "הוספת תו מיוחד", +InsertSmileyLbl : "סמיילי", +InsertSmiley : "הוספת סמיילי", +About : "אודות FCKeditor", +Bold : "מודגש", +Italic : "נטוי", +Underline : "קו תחתון", +StrikeThrough : "כתיב מחוק", +Subscript : "כתיב תחתון", +Superscript : "כתיב עליון", +LeftJustify : "יישור לשמאל", +CenterJustify : "מרכוז", +RightJustify : "יישור לימין", +BlockJustify : "יישור לשוליים", +DecreaseIndent : "הקטנת אינדנטציה", +IncreaseIndent : "הגדלת אינדנטציה", +Blockquote : "בלוק ציטוט", +Undo : "ביטול צעד אחרון", +Redo : "חזרה על צעד אחרון", +NumberedListLbl : "רשימה ממוספרת", +NumberedList : "הוספת/הסרת רשימה ממוספרת", +BulletedListLbl : "רשימת נקודות", +BulletedList : "הוספת/הסרת רשימת נקודות", +ShowTableBorders : "הצגת מסגרת הטבלה", +ShowDetails : "הצגת פרטים", +Style : "סגנון", +FontFormat : "עיצוב", +Font : "גופן", +FontSize : "גודל", +TextColor : "צבע טקסט", +BGColor : "צבע רקע", +Source : "מקור", +Find : "חיפוש", +Replace : "החלפה", +SpellCheck : "בדיקת איות", +UniversalKeyboard : "מקלדת אוניברסלית", +PageBreakLbl : "שבירת דף", +PageBreak : "הוסף שבירת דף", + +Form : "טופס", +Checkbox : "תיבת סימון", +RadioButton : "לחצן אפשרויות", +TextField : "שדה טקסט", +Textarea : "איזור טקסט", +HiddenField : "שדה חבוי", +Button : "כפתור", +SelectionField : "שדה בחירה", +ImageButton : "כפתור תמונה", + +FitWindow : "הגדל את גודל העורך", +ShowBlocks : "הצג בלוקים", + +// Context Menu +EditLink : "עריכת קישור", +CellCM : "תא", +RowCM : "שורה", +ColumnCM : "עמודה", +InsertRowAfter : "הוסף שורה אחרי", +InsertRowBefore : "הוסף שורה לפני", +DeleteRows : "מחיקת שורות", +InsertColumnAfter : "הוסף עמודה אחרי", +InsertColumnBefore : "הוסף עמודה לפני", +DeleteColumns : "מחיקת עמודות", +InsertCellAfter : "הוסף תא אחרי", +InsertCellBefore : "הוסף תא אחרי", +DeleteCells : "מחיקת תאים", +MergeCells : "מיזוג תאים", +MergeRight : "מזג ימינה", +MergeDown : "מזג למטה", +HorizontalSplitCell : "פצל תא אופקית", +VerticalSplitCell : "פצל תא אנכית", +TableDelete : "מחק טבלה", +CellProperties : "תכונות התא", +TableProperties : "תכונות הטבלה", +ImageProperties : "תכונות התמונה", +FlashProperties : "מאפייני פלאש", + +AnchorProp : "מאפייני נקודת עיגון", +ButtonProp : "מאפייני כפתור", +CheckboxProp : "מאפייני תיבת סימון", +HiddenFieldProp : "מאפיני שדה חבוי", +RadioButtonProp : "מאפייני לחצן אפשרויות", +ImageButtonProp : "מאפיני כפתור תמונה", +TextFieldProp : "מאפייני שדה טקסט", +SelectionFieldProp : "מאפייני שדה בחירה", +TextareaProp : "מאפיני איזור טקסט", +FormProp : "מאפיני טופס", + +FontFormats : "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6", + +// Alerts and Messages +ProcessingXHTML : "מעבד XHTML, נא להמתין...", +Done : "המשימה הושלמה", +PasteWordConfirm : "נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?", +NotCompatiblePaste : "פעולה זו זמינה לדפדפן אינטרנט אקספלורר מגירסא 5.5 ומעלה. האם להמשיך בהדבקה ללא הניקוי?", +UnknownToolbarItem : "פריט לא ידוע בסרגל הכלים \"%1\"", +UnknownCommand : "שם פעולה לא ידוע \"%1\"", +NotImplemented : "הפקודה לא מיושמת", +UnknownToolbarSet : "ערכת סרגל הכלים \"%1\" לא קיימת", +NoActiveX : "הגדרות אבטחה של הדפדפן עלולות לגביל את אפשרויות העריכה.יש לאפשר את האופציה \"הרץ פקדים פעילים ותוספות\". תוכל לחוות טעויות וחיווים של אפשרויות שחסרים.", +BrowseServerBlocked : "לא ניתן לגשת לדפדפן משאבים.אנא וודא שחוסם חלונות הקופצים לא פעיל.", +DialogBlocked : "לא היה ניתן לפתוח חלון דיאלוג. אנא וודא שחוסם חלונות קופצים לא פעיל.", + +// Dialogs +DlgBtnOK : "אישור", +DlgBtnCancel : "ביטול", +DlgBtnClose : "סגירה", +DlgBtnBrowseServer : "סייר השרת", +DlgAdvancedTag : "אפשרויות מתקדמות", +DlgOpOther : "<אחר>", +DlgInfoTab : "מידע", +DlgAlertUrl : "אנה הזן URL", + +// General Dialogs Labels +DlgGenNotSet : "<לא נקבע>", +DlgGenId : "זיהוי (Id)", +DlgGenLangDir : "כיוון שפה", +DlgGenLangDirLtr : "שמאל לימין (LTR)", +DlgGenLangDirRtl : "ימין לשמאל (RTL)", +DlgGenLangCode : "קוד שפה", +DlgGenAccessKey : "מקש גישה", +DlgGenName : "שם", +DlgGenTabIndex : "מספר טאב", +DlgGenLongDescr : "קישור לתיאור מפורט", +DlgGenClass : "גיליונות עיצוב קבוצות", +DlgGenTitle : "כותרת מוצעת", +DlgGenContType : "Content Type מוצע", +DlgGenLinkCharset : "קידוד המשאב המקושר", +DlgGenStyle : "סגנון", + +// Image Dialog +DlgImgTitle : "תכונות התמונה", +DlgImgInfoTab : "מידע על התמונה", +DlgImgBtnUpload : "שליחה לשרת", +DlgImgURL : "כתובת (URL)", +DlgImgUpload : "העלאה", +DlgImgAlt : "טקסט חלופי", +DlgImgWidth : "רוחב", +DlgImgHeight : "גובה", +DlgImgLockRatio : "נעילת היחס", +DlgBtnResetSize : "איפוס הגודל", +DlgImgBorder : "מסגרת", +DlgImgHSpace : "מרווח אופקי", +DlgImgVSpace : "מרווח אנכי", +DlgImgAlign : "יישור", +DlgImgAlignLeft : "לשמאל", +DlgImgAlignAbsBottom: "לתחתית האבסולוטית", +DlgImgAlignAbsMiddle: "מרכוז אבסולוטי", +DlgImgAlignBaseline : "לקו התחתית", +DlgImgAlignBottom : "לתחתית", +DlgImgAlignMiddle : "לאמצע", +DlgImgAlignRight : "לימין", +DlgImgAlignTextTop : "לראש הטקסט", +DlgImgAlignTop : "למעלה", +DlgImgPreview : "תצוגה מקדימה", +DlgImgAlertUrl : "נא להקליד את כתובת התמונה", +DlgImgLinkTab : "קישור", + +// Flash Dialog +DlgFlashTitle : "מאפיני פלאש", +DlgFlashChkPlay : "נגן אוטומטי", +DlgFlashChkLoop : "לולאה", +DlgFlashChkMenu : "אפשר תפריט פלאש", +DlgFlashScale : "גודל", +DlgFlashScaleAll : "הצג הכל", +DlgFlashScaleNoBorder : "ללא גבולות", +DlgFlashScaleFit : "התאמה מושלמת", + +// Link Dialog +DlgLnkWindowTitle : "קישור", +DlgLnkInfoTab : "מידע על הקישור", +DlgLnkTargetTab : "מטרה", + +DlgLnkType : "סוג קישור", +DlgLnkTypeURL : "כתובת (URL)", +DlgLnkTypeAnchor : "עוגן בעמוד זה", +DlgLnkTypeEMail : "דוא''ל", +DlgLnkProto : "פרוטוקול", +DlgLnkProtoOther : "<אחר>", +DlgLnkURL : "כתובת (URL)", +DlgLnkAnchorSel : "בחירת עוגן", +DlgLnkAnchorByName : "עפ''י שם העוגן", +DlgLnkAnchorById : "עפ''י זיהוי (Id) הרכיב", +DlgLnkNoAnchors : "(אין עוגנים זמינים בדף)", +DlgLnkEMail : "כתובת הדוא''ל", +DlgLnkEMailSubject : "נושא ההודעה", +DlgLnkEMailBody : "גוף ההודעה", +DlgLnkUpload : "העלאה", +DlgLnkBtnUpload : "שליחה לשרת", + +DlgLnkTarget : "מטרה", +DlgLnkTargetFrame : "<מסגרת>", +DlgLnkTargetPopup : "<חלון קופץ>", +DlgLnkTargetBlank : "חלון חדש (_blank)", +DlgLnkTargetParent : "חלון האב (_parent)", +DlgLnkTargetSelf : "באותו החלון (_self)", +DlgLnkTargetTop : "חלון ראשי (_top)", +DlgLnkTargetFrameName : "שם מסגרת היעד", +DlgLnkPopWinName : "שם החלון הקופץ", +DlgLnkPopWinFeat : "תכונות החלון הקופץ", +DlgLnkPopResize : "בעל גודל ניתן לשינוי", +DlgLnkPopLocation : "סרגל כתובת", +DlgLnkPopMenu : "סרגל תפריט", +DlgLnkPopScroll : "ניתן לגלילה", +DlgLnkPopStatus : "סרגל חיווי", +DlgLnkPopToolbar : "סרגל הכלים", +DlgLnkPopFullScrn : "מסך מלא (IE)", +DlgLnkPopDependent : "תלוי (Netscape)", +DlgLnkPopWidth : "רוחב", +DlgLnkPopHeight : "גובה", +DlgLnkPopLeft : "מיקום צד שמאל", +DlgLnkPopTop : "מיקום צד עליון", + +DlnLnkMsgNoUrl : "נא להקליד את כתובת הקישור (URL)", +DlnLnkMsgNoEMail : "נא להקליד את כתובת הדוא''ל", +DlnLnkMsgNoAnchor : "נא לבחור עוגן במסמך", +DlnLnkMsgInvPopName : "שם החלון הקופץ חייב להתחיל באותיות ואסור לכלול רווחים", + +// Color Dialog +DlgColorTitle : "בחירת צבע", +DlgColorBtnClear : "איפוס", +DlgColorHighlight : "נוכחי", +DlgColorSelected : "נבחר", + +// Smiley Dialog +DlgSmileyTitle : "הוספת סמיילי", + +// Special Character Dialog +DlgSpecialCharTitle : "בחירת תו מיוחד", + +// Table Dialog +DlgTableTitle : "תכונות טבלה", +DlgTableRows : "שורות", +DlgTableColumns : "עמודות", +DlgTableBorder : "גודל מסגרת", +DlgTableAlign : "יישור", +DlgTableAlignNotSet : "<לא נקבע>", +DlgTableAlignLeft : "שמאל", +DlgTableAlignCenter : "מרכז", +DlgTableAlignRight : "ימין", +DlgTableWidth : "רוחב", +DlgTableWidthPx : "פיקסלים", +DlgTableWidthPc : "אחוז", +DlgTableHeight : "גובה", +DlgTableCellSpace : "מרווח תא", +DlgTableCellPad : "ריפוד תא", +DlgTableCaption : "כיתוב", +DlgTableSummary : "סיכום", + +// Table Cell Dialog +DlgCellTitle : "תכונות תא", +DlgCellWidth : "רוחב", +DlgCellWidthPx : "פיקסלים", +DlgCellWidthPc : "אחוז", +DlgCellHeight : "גובה", +DlgCellWordWrap : "גלילת שורות", +DlgCellWordWrapNotSet : "<לא נקבע>", +DlgCellWordWrapYes : "כן", +DlgCellWordWrapNo : "לא", +DlgCellHorAlign : "יישור אופקי", +DlgCellHorAlignNotSet : "<לא נקבע>", +DlgCellHorAlignLeft : "שמאל", +DlgCellHorAlignCenter : "מרכז", +DlgCellHorAlignRight: "ימין", +DlgCellVerAlign : "יישור אנכי", +DlgCellVerAlignNotSet : "<לא נקבע>", +DlgCellVerAlignTop : "למעלה", +DlgCellVerAlignMiddle : "לאמצע", +DlgCellVerAlignBottom : "לתחתית", +DlgCellVerAlignBaseline : "קו תחתית", +DlgCellRowSpan : "טווח שורות", +DlgCellCollSpan : "טווח עמודות", +DlgCellBackColor : "צבע רקע", +DlgCellBorderColor : "צבע מסגרת", +DlgCellBtnSelect : "בחירה...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "חפש והחלף", + +// Find Dialog +DlgFindTitle : "חיפוש", +DlgFindFindBtn : "חיפוש", +DlgFindNotFoundMsg : "הטקסט המבוקש לא נמצא.", + +// Replace Dialog +DlgReplaceTitle : "החלפה", +DlgReplaceFindLbl : "חיפוש מחרוזת:", +DlgReplaceReplaceLbl : "החלפה במחרוזת:", +DlgReplaceCaseChk : "התאמת סוג אותיות (Case)", +DlgReplaceReplaceBtn : "החלפה", +DlgReplaceReplAllBtn : "החלפה בכל העמוד", +DlgReplaceWordChk : "התאמה למילה המלאה", + +// Paste Operations / Dialog +PasteErrorCut : "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).", +PasteErrorCopy : "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).", + +PasteAsText : "הדבקה כטקסט פשוט", +PasteFromWord : "הדבקה מ-וורד", + +DlgPasteMsg2 : "אנא הדבק בתוך הקופסה באמצעות (Ctrl+V) ולחץ על אישור.", +DlgPasteSec : "עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.", +DlgPasteIgnoreFont : "התעלם מהגדרות סוג פונט", +DlgPasteRemoveStyles : "הסר הגדרות סגנון", + +// Color Picker +ColorAutomatic : "אוטומטי", +ColorMoreColors : "צבעים נוספים...", + +// Document Properties +DocProps : "מאפיני מסמך", + +// Anchor Dialog +DlgAnchorTitle : "מאפיני נקודת עיגון", +DlgAnchorName : "שם לנקודת עיגון", +DlgAnchorErrorName : "אנא הזן שם לנקודת עיגון", + +// Speller Pages Dialog +DlgSpellNotInDic : "לא נמצא במילון", +DlgSpellChangeTo : "שנה ל", +DlgSpellBtnIgnore : "התעלם", +DlgSpellBtnIgnoreAll : "התעלם מהכל", +DlgSpellBtnReplace : "החלף", +DlgSpellBtnReplaceAll : "החלף הכל", +DlgSpellBtnUndo : "החזר", +DlgSpellNoSuggestions : "- אין הצעות -", +DlgSpellProgress : "בדיקות איות בתהליך ....", +DlgSpellNoMispell : "בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב", +DlgSpellNoChanges : "בדיקות איות הסתיימה: לא שונתה אף מילה", +DlgSpellOneChange : "בדיקות איות הסתיימה: שונתה מילה אחת", +DlgSpellManyChanges : "בדיקות איות הסתיימה: %1 מילים שונו", + +IeSpellDownload : "בודק האיות לא מותקן, האם אתה מעוניין להוריד?", + +// Button Dialog +DlgButtonText : "טקסט (ערך)", +DlgButtonType : "סוג", +DlgButtonTypeBtn : "כפתור", +DlgButtonTypeSbm : "שלח", +DlgButtonTypeRst : "אפס", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "שם", +DlgCheckboxValue : "ערך", +DlgCheckboxSelected : "בחור", + +// Form Dialog +DlgFormName : "שם", +DlgFormAction : "שלח אל", +DlgFormMethod : "סוג שליחה", + +// Select Field Dialog +DlgSelectName : "שם", +DlgSelectValue : "ערך", +DlgSelectSize : "גודל", +DlgSelectLines : "שורות", +DlgSelectChkMulti : "אפשר בחירות מרובות", +DlgSelectOpAvail : "אפשרויות זמינות", +DlgSelectOpText : "טקסט", +DlgSelectOpValue : "ערך", +DlgSelectBtnAdd : "הוסף", +DlgSelectBtnModify : "שנה", +DlgSelectBtnUp : "למעלה", +DlgSelectBtnDown : "למטה", +DlgSelectBtnSetValue : "קבע כברירת מחדל", +DlgSelectBtnDelete : "מחק", + +// Textarea Dialog +DlgTextareaName : "שם", +DlgTextareaCols : "עמודות", +DlgTextareaRows : "שורות", + +// Text Field Dialog +DlgTextName : "שם", +DlgTextValue : "ערך", +DlgTextCharWidth : "רוחב באותיות", +DlgTextMaxChars : "מקסימות אותיות", +DlgTextType : "סוג", +DlgTextTypeText : "טקסט", +DlgTextTypePass : "סיסמה", + +// Hidden Field Dialog +DlgHiddenName : "שם", +DlgHiddenValue : "ערך", + +// Bulleted List Dialog +BulletedListProp : "מאפייני רשימה", +NumberedListProp : "מאפייני רשימה ממוספרת", +DlgLstStart : "התחלה", +DlgLstType : "סוג", +DlgLstTypeCircle : "עיגול", +DlgLstTypeDisc : "דיסק", +DlgLstTypeSquare : "מרובע", +DlgLstTypeNumbers : "מספרים (1, 2, 3)", +DlgLstTypeLCase : "אותיות קטנות (a, b, c)", +DlgLstTypeUCase : "אותיות גדולות (A, B, C)", +DlgLstTypeSRoman : "ספרות רומאיות קטנות (i, ii, iii)", +DlgLstTypeLRoman : "ספרות רומאיות גדולות (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "כללי", +DlgDocBackTab : "רקע", +DlgDocColorsTab : "צבעים וגבולות", +DlgDocMetaTab : "נתוני META", + +DlgDocPageTitle : "כותרת דף", +DlgDocLangDir : "כיוון שפה", +DlgDocLangDirLTR : "שמאל לימין (LTR)", +DlgDocLangDirRTL : "ימין לשמאל (RTL)", +DlgDocLangCode : "קוד שפה", +DlgDocCharSet : "קידוד אותיות", +DlgDocCharSetCE : "מרכז אירופה", +DlgDocCharSetCT : "סיני מסורתי (Big5)", +DlgDocCharSetCR : "קירילי", +DlgDocCharSetGR : "יוונית", +DlgDocCharSetJP : "יפנית", +DlgDocCharSetKR : "קוראנית", +DlgDocCharSetTR : "טורקית", +DlgDocCharSetUN : "יוני קוד (UTF-8)", +DlgDocCharSetWE : "מערב אירופה", +DlgDocCharSetOther : "קידוד אותיות אחר", + +DlgDocDocType : "הגדרות סוג מסמך", +DlgDocDocTypeOther : "הגדרות סוג מסמך אחרות", +DlgDocIncXHTML : "כלול הגדרות XHTML", +DlgDocBgColor : "צבע רקע", +DlgDocBgImage : "URL לתמונת רקע", +DlgDocBgNoScroll : "רגע ללא גלילה", +DlgDocCText : "טקסט", +DlgDocCLink : "קישור", +DlgDocCVisited : "קישור שבוקר", +DlgDocCActive : " קישור פעיל", +DlgDocMargins : "גבולות דף", +DlgDocMaTop : "למעלה", +DlgDocMaLeft : "שמאלה", +DlgDocMaRight : "ימינה", +DlgDocMaBottom : "למטה", +DlgDocMeIndex : "מפתח עניינים של המסמך )מופרד בפסיק(", +DlgDocMeDescr : "תאור מסמך", +DlgDocMeAuthor : "מחבר", +DlgDocMeCopy : "זכויות יוצרים", +DlgDocPreview : "תצוגה מקדימה", + +// Templates Dialog +Templates : "תבניות", +DlgTemplatesTitle : "תביות תוכן", +DlgTemplatesSelMsg : "אנא בחר תבנית לפתיחה בעורך
        התוכן המקורי ימחק:", +DlgTemplatesLoading : "מעלה רשימת תבניות אנא המתן", +DlgTemplatesNoTpl : "(לא הוגדרו תבניות)", +DlgTemplatesReplace : "החלפת תוכן ממשי", + +// About Dialog +DlgAboutAboutTab : "אודות", +DlgAboutBrowserInfoTab : "גירסת דפדפן", +DlgAboutLicenseTab : "רשיון", +DlgAboutVersion : "גירסא", +DlgAboutInfo : "מידע נוסף ניתן למצוא כאן:" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/hi.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hi.js new file mode 100644 index 0000000..9661279 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hi.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Hindi language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "टूलबार सिमटायें", +ToolbarExpand : "टूलबार का विस्तार करें", + +// Toolbar Items and Context Menu +Save : "सेव", +NewPage : "नया पेज", +Preview : "प्रीव्यू", +Cut : "कट", +Copy : "कॉपी", +Paste : "पेस्ट", +PasteText : "पेस्ट (सादा टॅक्स्ट)", +PasteWord : "पेस्ट (वर्ड से)", +Print : "प्रिन्ट", +SelectAll : "सब सॅलॅक्ट करें", +RemoveFormat : "फ़ॉर्मैट हटायें", +InsertLinkLbl : "लिंक", +InsertLink : "लिंक इन्सर्ट/संपादन", +RemoveLink : "लिंक हटायें", +Anchor : "ऐंकर इन्सर्ट/संपादन", +AnchorDelete : "ऐंकर हटायें", +InsertImageLbl : "तस्वीर", +InsertImage : "तस्वीर इन्सर्ट/संपादन", +InsertFlashLbl : "फ़्लैश", +InsertFlash : "फ़्लैश इन्सर्ट/संपादन", +InsertTableLbl : "टेबल", +InsertTable : "टेबल इन्सर्ट/संपादन", +InsertLineLbl : "रेखा", +InsertLine : "हॉरिज़ॉन्टल रेखा इन्सर्ट करें", +InsertSpecialCharLbl: "विशेष करॅक्टर", +InsertSpecialChar : "विशेष करॅक्टर इन्सर्ट करें", +InsertSmileyLbl : "स्माइली", +InsertSmiley : "स्माइली इन्सर्ट करें", +About : "FCKeditor के बारे में", +Bold : "बोल्ड", +Italic : "इटैलिक", +Underline : "रेखांकण", +StrikeThrough : "स्ट्राइक थ्रू", +Subscript : "अधोलेख", +Superscript : "अभिलेख", +LeftJustify : "बायीं तरफ", +CenterJustify : "बीच में", +RightJustify : "दायीं तरफ", +BlockJustify : "ब्लॉक जस्टीफ़ाई", +DecreaseIndent : "इन्डॅन्ट कम करें", +IncreaseIndent : "इन्डॅन्ट बढ़ायें", +Blockquote : "ब्लॉक-कोट", +Undo : "अन्डू", +Redo : "रीडू", +NumberedListLbl : "अंकीय सूची", +NumberedList : "अंकीय सूची इन्सर्ट/संपादन", +BulletedListLbl : "बुलॅट सूची", +BulletedList : "बुलॅट सूची इन्सर्ट/संपादन", +ShowTableBorders : "टेबल बॉर्डरयें दिखायें", +ShowDetails : "ज्यादा दिखायें", +Style : "स्टाइल", +FontFormat : "फ़ॉर्मैट", +Font : "फ़ॉन्ट", +FontSize : "साइज़", +TextColor : "टेक्स्ट रंग", +BGColor : "बैक्ग्राउन्ड रंग", +Source : "सोर्स", +Find : "खोजें", +Replace : "रीप्लेस", +SpellCheck : "वर्तनी (स्पेलिंग) जाँच", +UniversalKeyboard : "यूनीवर्सल कीबोर्ड", +PageBreakLbl : "पेज ब्रेक", +PageBreak : "पेज ब्रेक इन्सर्ट् करें", + +Form : "फ़ॉर्म", +Checkbox : "चॅक बॉक्स", +RadioButton : "रेडिओ बटन", +TextField : "टेक्स्ट फ़ील्ड", +Textarea : "टेक्स्ट एरिया", +HiddenField : "गुप्त फ़ील्ड", +Button : "बटन", +SelectionField : "चुनाव फ़ील्ड", +ImageButton : "तस्वीर बटन", + +FitWindow : "एडिटर साइज़ को चरम सीमा तक बढ़ायें", +ShowBlocks : "ब्लॉक दिखायें", + +// Context Menu +EditLink : "लिंक संपादन", +CellCM : "खाना", +RowCM : "पंक्ति", +ColumnCM : "कालम", +InsertRowAfter : "बाद में पंक्ति डालें", +InsertRowBefore : "पहले पंक्ति डालें", +DeleteRows : "पंक्तियाँ डिलीट करें", +InsertColumnAfter : "बाद में कालम डालें", +InsertColumnBefore : "पहले कालम डालें", +DeleteColumns : "कालम डिलीट करें", +InsertCellAfter : "बाद में सैल डालें", +InsertCellBefore : "पहले सैल डालें", +DeleteCells : "सैल डिलीट करें", +MergeCells : "सैल मिलायें", +MergeRight : "बाँया विलय", +MergeDown : "नीचे विलय करें", +HorizontalSplitCell : "सैल को क्षैतिज स्थिति में विभाजित करें", +VerticalSplitCell : "सैल को लम्बाकार में विभाजित करें", +TableDelete : "टेबल डिलीट करें", +CellProperties : "सैल प्रॉपर्टीज़", +TableProperties : "टेबल प्रॉपर्टीज़", +ImageProperties : "तस्वीर प्रॉपर्टीज़", +FlashProperties : "फ़्लैश प्रॉपर्टीज़", + +AnchorProp : "ऐंकर प्रॉपर्टीज़", +ButtonProp : "बटन प्रॉपर्टीज़", +CheckboxProp : "चॅक बॉक्स प्रॉपर्टीज़", +HiddenFieldProp : "गुप्त फ़ील्ड प्रॉपर्टीज़", +RadioButtonProp : "रेडिओ बटन प्रॉपर्टीज़", +ImageButtonProp : "तस्वीर बटन प्रॉपर्टीज़", +TextFieldProp : "टेक्स्ट फ़ील्ड प्रॉपर्टीज़", +SelectionFieldProp : "चुनाव फ़ील्ड प्रॉपर्टीज़", +TextareaProp : "टेक्स्त एरिया प्रॉपर्टीज़", +FormProp : "फ़ॉर्म प्रॉपर्टीज़", + +FontFormats : "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)", + +// Alerts and Messages +ProcessingXHTML : "XHTML प्रोसॅस हो रहा है। ज़रा ठहरें...", +Done : "पूरा हुआ", +PasteWordConfirm : "आप जो टेक्स्ट पेस्ट करना चाहते हैं, वह वर्ड से कॉपी किया हुआ लग रहा है। क्या पेस्ट करने से पहले आप इसे साफ़ करना चाहेंगे?", +NotCompatiblePaste : "यह कमांड इन्टरनॅट एक्स्प्लोरर(Internet Explorer) 5.5 या उसके बाद के वर्ज़न के लिए ही उपलब्ध है। क्या आप बिना साफ़ किए पेस्ट करना चाहेंगे?", +UnknownToolbarItem : "अनजान टूलबार आइटम \"%1\"", +UnknownCommand : "अनजान कमान्ड \"%1\"", +NotImplemented : "कमान्ड इम्प्लीमॅन्ट नहीं किया गया है", +UnknownToolbarSet : "टूलबार सॅट \"%1\" उपलब्ध नहीं है", +NoActiveX : "आपके ब्राउज़र् की सुरक्शा सेटिंग्स् एडिटर की कुछ् फ़ीचरों को सीमित कर् सकती हैं। क्रिपया \"Run ActiveX controls and plug-ins\" विकल्प को एनेबल करें. आपको एरर्स् और गायब फ़ीचर्स् का अनुभव हो सकता है।", +BrowseServerBlocked : "रिसोर्सेज़ ब्राउज़र् नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।", +DialogBlocked : "डायलग विन्डो नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।", + +// Dialogs +DlgBtnOK : "ठीक है", +DlgBtnCancel : "रद्द करें", +DlgBtnClose : "बन्द करें", +DlgBtnBrowseServer : "सर्वर ब्राउज़ करें", +DlgAdvancedTag : "ऍड्वान्स्ड", +DlgOpOther : "<अन्य>", +DlgInfoTab : "सूचना", +DlgAlertUrl : "URL इन्सर्ट करें", + +// General Dialogs Labels +DlgGenNotSet : "<सॅट नहीं>", +DlgGenId : "Id", +DlgGenLangDir : "भाषा लिखने की दिशा", +DlgGenLangDirLtr : "बायें से दायें (LTR)", +DlgGenLangDirRtl : "दायें से बायें (RTL)", +DlgGenLangCode : "भाषा कोड", +DlgGenAccessKey : "ऍक्सॅस की", +DlgGenName : "नाम", +DlgGenTabIndex : "टैब इन्डॅक्स", +DlgGenLongDescr : "अधिक विवरण के लिए URL", +DlgGenClass : "स्टाइल-शीट क्लास", +DlgGenTitle : "परामर्श शीर्शक", +DlgGenContType : "परामर्श कन्टॅन्ट प्रकार", +DlgGenLinkCharset : "लिंक रिसोर्स करॅक्टर सॅट", +DlgGenStyle : "स्टाइल", + +// Image Dialog +DlgImgTitle : "तस्वीर प्रॉपर्टीज़", +DlgImgInfoTab : "तस्वीर की जानकारी", +DlgImgBtnUpload : "इसे सर्वर को भेजें", +DlgImgURL : "URL", +DlgImgUpload : "अपलोड", +DlgImgAlt : "वैकल्पिक टेक्स्ट", +DlgImgWidth : "चौड़ाई", +DlgImgHeight : "ऊँचाई", +DlgImgLockRatio : "लॉक अनुपात", +DlgBtnResetSize : "रीसॅट साइज़", +DlgImgBorder : "बॉर्डर", +DlgImgHSpace : "हॉरिज़ॉन्टल स्पेस", +DlgImgVSpace : "वर्टिकल स्पेस", +DlgImgAlign : "ऍलाइन", +DlgImgAlignLeft : "दायें", +DlgImgAlignAbsBottom: "Abs नीचे", +DlgImgAlignAbsMiddle: "Abs ऊपर", +DlgImgAlignBaseline : "मूल रेखा", +DlgImgAlignBottom : "नीचे", +DlgImgAlignMiddle : "मध्य", +DlgImgAlignRight : "दायें", +DlgImgAlignTextTop : "टेक्स्ट ऊपर", +DlgImgAlignTop : "ऊपर", +DlgImgPreview : "प्रीव्यू", +DlgImgAlertUrl : "तस्वीर का URL टाइप करें ", +DlgImgLinkTab : "लिंक", + +// Flash Dialog +DlgFlashTitle : "फ़्लैश प्रॉपर्टीज़", +DlgFlashChkPlay : "ऑटो प्ले", +DlgFlashChkLoop : "लूप", +DlgFlashChkMenu : "फ़्लैश मॅन्यू का प्रयोग करें", +DlgFlashScale : "स्केल", +DlgFlashScaleAll : "सभी दिखायें", +DlgFlashScaleNoBorder : "कोई बॉर्डर नहीं", +DlgFlashScaleFit : "बिल्कुल फ़िट", + +// Link Dialog +DlgLnkWindowTitle : "लिंक", +DlgLnkInfoTab : "लिंक ", +DlgLnkTargetTab : "टार्गेट", + +DlgLnkType : "लिंक प्रकार", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "इस पेज का ऐंकर", +DlgLnkTypeEMail : "ई-मेल", +DlgLnkProto : "प्रोटोकॉल", +DlgLnkProtoOther : "<अन्य>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "ऐंकर चुनें", +DlgLnkAnchorByName : "ऐंकर नाम से", +DlgLnkAnchorById : "ऍलीमॅन्ट Id से", +DlgLnkNoAnchors : "(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)", +DlgLnkEMail : "ई-मेल पता", +DlgLnkEMailSubject : "संदेश विषय", +DlgLnkEMailBody : "संदेश", +DlgLnkUpload : "अपलोड", +DlgLnkBtnUpload : "इसे सर्वर को भेजें", + +DlgLnkTarget : "टार्गेट", +DlgLnkTargetFrame : "<फ़्रेम>", +DlgLnkTargetPopup : "<पॉप-अप विन्डो>", +DlgLnkTargetBlank : "नया विन्डो (_blank)", +DlgLnkTargetParent : "मूल विन्डो (_parent)", +DlgLnkTargetSelf : "इसी विन्डो (_self)", +DlgLnkTargetTop : "शीर्ष विन्डो (_top)", +DlgLnkTargetFrameName : "टार्गेट फ़्रेम का नाम", +DlgLnkPopWinName : "पॉप-अप विन्डो का नाम", +DlgLnkPopWinFeat : "पॉप-अप विन्डो फ़ीचर्स", +DlgLnkPopResize : "साइज़ बदला जा सकता है", +DlgLnkPopLocation : "लोकेशन बार", +DlgLnkPopMenu : "मॅन्यू बार", +DlgLnkPopScroll : "स्क्रॉल बार", +DlgLnkPopStatus : "स्टेटस बार", +DlgLnkPopToolbar : "टूल बार", +DlgLnkPopFullScrn : "फ़ुल स्क्रीन (IE)", +DlgLnkPopDependent : "डिपेन्डॅन्ट (Netscape)", +DlgLnkPopWidth : "चौड़ाई", +DlgLnkPopHeight : "ऊँचाई", +DlgLnkPopLeft : "बायीं तरफ", +DlgLnkPopTop : "दायीं तरफ", + +DlnLnkMsgNoUrl : "लिंक URL टाइप करें", +DlnLnkMsgNoEMail : "ई-मेल पता टाइप करें", +DlnLnkMsgNoAnchor : "ऐंकर चुनें", +DlnLnkMsgInvPopName : "पॉप-अप का नाम अल्फाबेट से शुरू होना चाहिये और उसमें स्पेस नहीं होने चाहिए", + +// Color Dialog +DlgColorTitle : "रंग चुनें", +DlgColorBtnClear : "साफ़ करें", +DlgColorHighlight : "हाइलाइट", +DlgColorSelected : "सॅलॅक्टॅड", + +// Smiley Dialog +DlgSmileyTitle : "स्माइली इन्सर्ट करें", + +// Special Character Dialog +DlgSpecialCharTitle : "विशेष करॅक्टर चुनें", + +// Table Dialog +DlgTableTitle : "टेबल प्रॉपर्टीज़", +DlgTableRows : "पंक्तियाँ", +DlgTableColumns : "कालम", +DlgTableBorder : "बॉर्डर साइज़", +DlgTableAlign : "ऍलाइन्मॅन्ट", +DlgTableAlignNotSet : "<सॅट नहीं>", +DlgTableAlignLeft : "दायें", +DlgTableAlignCenter : "बीच में", +DlgTableAlignRight : "बायें", +DlgTableWidth : "चौड़ाई", +DlgTableWidthPx : "पिक्सैल", +DlgTableWidthPc : "प्रतिशत", +DlgTableHeight : "ऊँचाई", +DlgTableCellSpace : "सैल अंतर", +DlgTableCellPad : "सैल पैडिंग", +DlgTableCaption : "शीर्षक", +DlgTableSummary : "सारांश", + +// Table Cell Dialog +DlgCellTitle : "सैल प्रॉपर्टीज़", +DlgCellWidth : "चौड़ाई", +DlgCellWidthPx : "पिक्सैल", +DlgCellWidthPc : "प्रतिशत", +DlgCellHeight : "ऊँचाई", +DlgCellWordWrap : "वर्ड रैप", +DlgCellWordWrapNotSet : "<सॅट नहीं>", +DlgCellWordWrapYes : "हाँ", +DlgCellWordWrapNo : "नहीं", +DlgCellHorAlign : "हॉरिज़ॉन्टल ऍलाइन्मॅन्ट", +DlgCellHorAlignNotSet : "<सॅट नहीं>", +DlgCellHorAlignLeft : "दायें", +DlgCellHorAlignCenter : "बीच में", +DlgCellHorAlignRight: "बायें", +DlgCellVerAlign : "वर्टिकल ऍलाइन्मॅन्ट", +DlgCellVerAlignNotSet : "<सॅट नहीं>", +DlgCellVerAlignTop : "ऊपर", +DlgCellVerAlignMiddle : "मध्य", +DlgCellVerAlignBottom : "नीचे", +DlgCellVerAlignBaseline : "मूलरेखा", +DlgCellRowSpan : "पंक्ति स्पैन", +DlgCellCollSpan : "कालम स्पैन", +DlgCellBackColor : "बैक्ग्राउन्ड रंग", +DlgCellBorderColor : "बॉर्डर का रंग", +DlgCellBtnSelect : "चुनें...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "खोजें और बदलें", + +// Find Dialog +DlgFindTitle : "खोजें", +DlgFindFindBtn : "खोजें", +DlgFindNotFoundMsg : "आपके द्वारा दिया गया टेक्स्ट नहीं मिला", + +// Replace Dialog +DlgReplaceTitle : "रिप्लेस", +DlgReplaceFindLbl : "यह खोजें:", +DlgReplaceReplaceLbl : "इससे रिप्लेस करें:", +DlgReplaceCaseChk : "केस मिलायें", +DlgReplaceReplaceBtn : "रिप्लेस", +DlgReplaceReplAllBtn : "सभी रिप्लेस करें", +DlgReplaceWordChk : "पूरा शब्द मिलायें", + +// Paste Operations / Dialog +PasteErrorCut : "आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।", +PasteErrorCopy : "आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।", + +PasteAsText : "पेस्ट (सादा टॅक्स्ट)", +PasteFromWord : "पेस्ट (वर्ड से)", + +DlgPasteMsg2 : "Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.", +DlgPasteSec : "आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.", +DlgPasteIgnoreFont : "फ़ॉन्ट परिभाषा निकालें", +DlgPasteRemoveStyles : "स्टाइल परिभाषा निकालें", + +// Color Picker +ColorAutomatic : "स्वचालित", +ColorMoreColors : "और रंग...", + +// Document Properties +DocProps : "डॉक्यूमॅन्ट प्रॉपर्टीज़", + +// Anchor Dialog +DlgAnchorTitle : "ऐंकर प्रॉपर्टीज़", +DlgAnchorName : "ऐंकर का नाम", +DlgAnchorErrorName : "ऐंकर का नाम टाइप करें", + +// Speller Pages Dialog +DlgSpellNotInDic : "शब्दकोश में नहीं", +DlgSpellChangeTo : "इसमें बदलें", +DlgSpellBtnIgnore : "इग्नोर", +DlgSpellBtnIgnoreAll : "सभी इग्नोर करें", +DlgSpellBtnReplace : "रिप्लेस", +DlgSpellBtnReplaceAll : "सभी रिप्लेस करें", +DlgSpellBtnUndo : "अन्डू", +DlgSpellNoSuggestions : "- कोई सुझाव नहीं -", +DlgSpellProgress : "वर्तनी की जाँच (स्पॅल-चॅक) जारी है...", +DlgSpellNoMispell : "वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई", +DlgSpellNoChanges : "वर्तनी की जाँच :कोई शब्द नहीं बदला गया", +DlgSpellOneChange : "वर्तनी की जाँच : एक शब्द बदला गया", +DlgSpellManyChanges : "वर्तनी की जाँच : %1 शब्द बदले गये", + +IeSpellDownload : "स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डा‌उनलोड करना चाहेंगे?", + +// Button Dialog +DlgButtonText : "टेक्स्ट (वैल्यू)", +DlgButtonType : "प्रकार", +DlgButtonTypeBtn : "बटन", +DlgButtonTypeSbm : "सब्मिट", +DlgButtonTypeRst : "रिसेट", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "नाम", +DlgCheckboxValue : "वैल्यू", +DlgCheckboxSelected : "सॅलॅक्टॅड", + +// Form Dialog +DlgFormName : "नाम", +DlgFormAction : "क्रिया", +DlgFormMethod : "तरीका", + +// Select Field Dialog +DlgSelectName : "नाम", +DlgSelectValue : "वैल्यू", +DlgSelectSize : "साइज़", +DlgSelectLines : "पंक्तियाँ", +DlgSelectChkMulti : "एक से ज्यादा विकल्प चुनने दें", +DlgSelectOpAvail : "उपलब्ध विकल्प", +DlgSelectOpText : "टेक्स्ट", +DlgSelectOpValue : "वैल्यू", +DlgSelectBtnAdd : "जोड़ें", +DlgSelectBtnModify : "बदलें", +DlgSelectBtnUp : "ऊपर", +DlgSelectBtnDown : "नीचे", +DlgSelectBtnSetValue : "चुनी गई वैल्यू सॅट करें", +DlgSelectBtnDelete : "डिलीट", + +// Textarea Dialog +DlgTextareaName : "नाम", +DlgTextareaCols : "कालम", +DlgTextareaRows : "पंक्तियां", + +// Text Field Dialog +DlgTextName : "नाम", +DlgTextValue : "वैल्यू", +DlgTextCharWidth : "करॅक्टर की चौढ़ाई", +DlgTextMaxChars : "अधिकतम करॅक्टर", +DlgTextType : "टाइप", +DlgTextTypeText : "टेक्स्ट", +DlgTextTypePass : "पास्वर्ड", + +// Hidden Field Dialog +DlgHiddenName : "नाम", +DlgHiddenValue : "वैल्यू", + +// Bulleted List Dialog +BulletedListProp : "बुलॅट सूची प्रॉपर्टीज़", +NumberedListProp : "अंकीय सूची प्रॉपर्टीज़", +DlgLstStart : "प्रारम्भ", +DlgLstType : "प्रकार", +DlgLstTypeCircle : "गोल", +DlgLstTypeDisc : "डिस्क", +DlgLstTypeSquare : "चौकॊण", +DlgLstTypeNumbers : "अंक (1, 2, 3)", +DlgLstTypeLCase : "छोटे अक्षर (a, b, c)", +DlgLstTypeUCase : "बड़े अक्षर (A, B, C)", +DlgLstTypeSRoman : "छोटे रोमन अंक (i, ii, iii)", +DlgLstTypeLRoman : "बड़े रोमन अंक (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "आम", +DlgDocBackTab : "बैक्ग्राउन्ड", +DlgDocColorsTab : "रंग और मार्जिन", +DlgDocMetaTab : "मॅटाडेटा", + +DlgDocPageTitle : "पेज शीर्षक", +DlgDocLangDir : "भाषा लिखने की दिशा", +DlgDocLangDirLTR : "बायें से दायें (LTR)", +DlgDocLangDirRTL : "दायें से बायें (RTL)", +DlgDocLangCode : "भाषा कोड", +DlgDocCharSet : "करेक्टर सॅट ऍन्कोडिंग", +DlgDocCharSetCE : "मध्य यूरोपीय (Central European)", +DlgDocCharSetCT : "चीनी (Chinese Traditional Big5)", +DlgDocCharSetCR : "सिरीलिक (Cyrillic)", +DlgDocCharSetGR : "यवन (Greek)", +DlgDocCharSetJP : "जापानी (Japanese)", +DlgDocCharSetKR : "कोरीयन (Korean)", +DlgDocCharSetTR : "तुर्की (Turkish)", +DlgDocCharSetUN : "यूनीकोड (UTF-8)", +DlgDocCharSetWE : "पश्चिम यूरोपीय (Western European)", +DlgDocCharSetOther : "अन्य करेक्टर सॅट ऍन्कोडिंग", + +DlgDocDocType : "डॉक्यूमॅन्ट प्रकार शीर्षक", +DlgDocDocTypeOther : "अन्य डॉक्यूमॅन्ट प्रकार शीर्षक", +DlgDocIncXHTML : "XHTML सूचना सम्मिलित करें", +DlgDocBgColor : "बैक्ग्राउन्ड रंग", +DlgDocBgImage : "बैक्ग्राउन्ड तस्वीर URL", +DlgDocBgNoScroll : "स्क्रॉल न करने वाला बैक्ग्राउन्ड", +DlgDocCText : "टेक्स्ट", +DlgDocCLink : "लिंक", +DlgDocCVisited : "विज़िट किया गया लिंक", +DlgDocCActive : "सक्रिय लिंक", +DlgDocMargins : "पेज मार्जिन", +DlgDocMaTop : "ऊपर", +DlgDocMaLeft : "बायें", +DlgDocMaRight : "दायें", +DlgDocMaBottom : "नीचे", +DlgDocMeIndex : "डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)", +DlgDocMeDescr : "डॉक्यूमॅन्ट करॅक्टरन", +DlgDocMeAuthor : "लेखक", +DlgDocMeCopy : "कॉपीराइट", +DlgDocPreview : "प्रीव्यू", + +// Templates Dialog +Templates : "टॅम्प्लेट", +DlgTemplatesTitle : "कन्टेन्ट टॅम्प्लेट", +DlgTemplatesSelMsg : "ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):", +DlgTemplatesLoading : "टॅम्प्लेट सूची लोड की जा रही है। ज़रा ठहरें...", +DlgTemplatesNoTpl : "(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)", +DlgTemplatesReplace : "मूल शब्दों को बदलें", + +// About Dialog +DlgAboutAboutTab : "FCKEditor के बारे में", +DlgAboutBrowserInfoTab : "ब्राउज़र के बारे में", +DlgAboutLicenseTab : "लाइसैन्स", +DlgAboutVersion : "वर्ज़न", +DlgAboutInfo : "अधिक जानकारी के लिये यहाँ जायें:" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/hr.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hr.js new file mode 100644 index 0000000..ac9be8f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hr.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Croatian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Smanji trake s alatima", +ToolbarExpand : "Proširi trake s alatima", + +// Toolbar Items and Context Menu +Save : "Snimi", +NewPage : "Nova stranica", +Preview : "Pregledaj", +Cut : "Izreži", +Copy : "Kopiraj", +Paste : "Zalijepi", +PasteText : "Zalijepi kao čisti tekst", +PasteWord : "Zalijepi iz Worda", +Print : "Ispiši", +SelectAll : "Odaberi sve", +RemoveFormat : "Ukloni formatiranje", +InsertLinkLbl : "Link", +InsertLink : "Ubaci/promijeni link", +RemoveLink : "Ukloni link", +Anchor : "Ubaci/promijeni sidro", +AnchorDelete : "Ukloni sidro", +InsertImageLbl : "Slika", +InsertImage : "Ubaci/promijeni sliku", +InsertFlashLbl : "Flash", +InsertFlash : "Ubaci/promijeni Flash", +InsertTableLbl : "Tablica", +InsertTable : "Ubaci/promijeni tablicu", +InsertLineLbl : "Linija", +InsertLine : "Ubaci vodoravnu liniju", +InsertSpecialCharLbl: "Posebni karakteri", +InsertSpecialChar : "Ubaci posebne znakove", +InsertSmileyLbl : "Smješko", +InsertSmiley : "Ubaci smješka", +About : "O FCKeditoru", +Bold : "Podebljaj", +Italic : "Ukosi", +Underline : "Potcrtano", +StrikeThrough : "Precrtano", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Lijevo poravnanje", +CenterJustify : "Središnje poravnanje", +RightJustify : "Desno poravnanje", +BlockJustify : "Blok poravnanje", +DecreaseIndent : "Pomakni ulijevo", +IncreaseIndent : "Pomakni udesno", +Blockquote : "Blockquote", +Undo : "Poništi", +Redo : "Ponovi", +NumberedListLbl : "Brojčana lista", +NumberedList : "Ubaci/ukloni brojčanu listu", +BulletedListLbl : "Obična lista", +BulletedList : "Ubaci/ukloni običnu listu", +ShowTableBorders : "Prikaži okvir tablice", +ShowDetails : "Prikaži detalje", +Style : "Stil", +FontFormat : "Format", +Font : "Font", +FontSize : "Veličina", +TextColor : "Boja teksta", +BGColor : "Boja pozadine", +Source : "Kôd", +Find : "Pronađi", +Replace : "Zamijeni", +SpellCheck : "Provjeri pravopis", +UniversalKeyboard : "Univerzalna tipkovnica", +PageBreakLbl : "Prijelom stranice", +PageBreak : "Ubaci prijelom stranice", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Povećaj veličinu editora", +ShowBlocks : "Prikaži blokove", + +// Context Menu +EditLink : "Promijeni link", +CellCM : "Ćelija", +RowCM : "Red", +ColumnCM : "Kolona", +InsertRowAfter : "Ubaci red poslije", +InsertRowBefore : "Ubaci red prije", +DeleteRows : "Izbriši redove", +InsertColumnAfter : "Ubaci kolonu poslije", +InsertColumnBefore : "Ubaci kolonu prije", +DeleteColumns : "Izbriši kolone", +InsertCellAfter : "Ubaci ćeliju poslije", +InsertCellBefore : "Ubaci ćeliju prije", +DeleteCells : "Izbriši ćelije", +MergeCells : "Spoji ćelije", +MergeRight : "Spoji desno", +MergeDown : "Spoji dolje", +HorizontalSplitCell : "Podijeli ćeliju vodoravno", +VerticalSplitCell : "Podijeli ćeliju okomito", +TableDelete : "Izbriši tablicu", +CellProperties : "Svojstva ćelije", +TableProperties : "Svojstva tablice", +ImageProperties : "Svojstva slike", +FlashProperties : "Flash svojstva", + +AnchorProp : "Svojstva sidra", +ButtonProp : "Image Button svojstva", +CheckboxProp : "Checkbox svojstva", +HiddenFieldProp : "Hidden Field svojstva", +RadioButtonProp : "Radio Button svojstva", +ImageButtonProp : "Image Button svojstva", +TextFieldProp : "Text Field svojstva", +SelectionFieldProp : "Selection svojstva", +TextareaProp : "Textarea svojstva", +FormProp : "Form svojstva", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Obrađujem XHTML. Molimo pričekajte...", +Done : "Završio", +PasteWordConfirm : "Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?", +NotCompatiblePaste : "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez čišćenja?", +UnknownToolbarItem : "Nepoznati član trake s alatima \"%1\"", +UnknownCommand : "Nepoznata naredba \"%1\"", +NotImplemented : "Naredba nije implementirana", +UnknownToolbarSet : "Traka s alatima \"%1\" ne postoji", +NoActiveX : "Vaše postavke pretraživača mogle bi ograničiti neke od mogućnosti editora. Morate uključiti opciju \"Run ActiveX controls and plug-ins\" u postavkama. Ukoliko to ne učinite, moguće su razliite greške tijekom rada.", +BrowseServerBlocked : "Pretraivač nije moguće otvoriti. Provjerite da li je uključeno blokiranje pop-up prozora.", +DialogBlocked : "Nije moguće otvoriti novi prozor. Provjerite da li je uključeno blokiranje pop-up prozora.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Poništi", +DlgBtnClose : "Zatvori", +DlgBtnBrowseServer : "Pretraži server", +DlgAdvancedTag : "Napredno", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Molimo unesite URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Smjer jezika", +DlgGenLangDirLtr : "S lijeva na desno (LTR)", +DlgGenLangDirRtl : "S desna na lijevo (RTL)", +DlgGenLangCode : "Kôd jezika", +DlgGenAccessKey : "Pristupna tipka", +DlgGenName : "Naziv", +DlgGenTabIndex : "Tab Indeks", +DlgGenLongDescr : "Dugački opis URL", +DlgGenClass : "Stylesheet klase", +DlgGenTitle : "Advisory naslov", +DlgGenContType : "Advisory vrsta sadržaja", +DlgGenLinkCharset : "Kodna stranica povezanih resursa", +DlgGenStyle : "Stil", + +// Image Dialog +DlgImgTitle : "Svojstva slika", +DlgImgInfoTab : "Info slike", +DlgImgBtnUpload : "Pošalji na server", +DlgImgURL : "URL", +DlgImgUpload : "Pošalji", +DlgImgAlt : "Alternativni tekst", +DlgImgWidth : "Širina", +DlgImgHeight : "Visina", +DlgImgLockRatio : "Zaključaj odnos", +DlgBtnResetSize : "Obriši veličinu", +DlgImgBorder : "Okvir", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Poravnaj", +DlgImgAlignLeft : "Lijevo", +DlgImgAlignAbsBottom: "Abs dolje", +DlgImgAlignAbsMiddle: "Abs sredina", +DlgImgAlignBaseline : "Bazno", +DlgImgAlignBottom : "Dolje", +DlgImgAlignMiddle : "Sredina", +DlgImgAlignRight : "Desno", +DlgImgAlignTextTop : "Vrh teksta", +DlgImgAlignTop : "Vrh", +DlgImgPreview : "Pregledaj", +DlgImgAlertUrl : "Unesite URL slike", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash svojstva", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Ponavljaj", +DlgFlashChkMenu : "Omogući Flash izbornik", +DlgFlashScale : "Omjer", +DlgFlashScaleAll : "Prikaži sve", +DlgFlashScaleNoBorder : "Bez okvira", +DlgFlashScaleFit : "Točna veličina", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Meta", + +DlgLnkType : "Link vrsta", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Sidro na ovoj stranici", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Odaberi sidro", +DlgLnkAnchorByName : "Po nazivu sidra", +DlgLnkAnchorById : "Po Id elementa", +DlgLnkNoAnchors : "(Nema dostupnih sidra)", +DlgLnkEMail : "E-Mail adresa", +DlgLnkEMailSubject : "Naslov", +DlgLnkEMailBody : "Sadržaj poruke", +DlgLnkUpload : "Pošalji", +DlgLnkBtnUpload : "Pošalji na server", + +DlgLnkTarget : "Meta", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Novi prozor (_blank)", +DlgLnkTargetParent : "Roditeljski prozor (_parent)", +DlgLnkTargetSelf : "Isti prozor (_self)", +DlgLnkTargetTop : "Vršni prozor (_top)", +DlgLnkTargetFrameName : "Ime ciljnog okvira", +DlgLnkPopWinName : "Naziv popup prozora", +DlgLnkPopWinFeat : "Mogućnosti popup prozora", +DlgLnkPopResize : "Promjenljive veličine", +DlgLnkPopLocation : "Traka za lokaciju", +DlgLnkPopMenu : "Izborna traka", +DlgLnkPopScroll : "Scroll traka", +DlgLnkPopStatus : "Statusna traka", +DlgLnkPopToolbar : "Traka s alatima", +DlgLnkPopFullScrn : "Cijeli ekran (IE)", +DlgLnkPopDependent : "Ovisno (Netscape)", +DlgLnkPopWidth : "Širina", +DlgLnkPopHeight : "Visina", +DlgLnkPopLeft : "Lijeva pozicija", +DlgLnkPopTop : "Gornja pozicija", + +DlnLnkMsgNoUrl : "Molimo upišite URL link", +DlnLnkMsgNoEMail : "Molimo upišite e-mail adresu", +DlnLnkMsgNoAnchor : "Molimo odaberite sidro", +DlnLnkMsgInvPopName : "Ime popup prozora mora početi sa slovom i ne smije sadržavati razmake", + +// Color Dialog +DlgColorTitle : "Odaberite boju", +DlgColorBtnClear : "Obriši", +DlgColorHighlight : "Osvijetli", +DlgColorSelected : "Odaberi", + +// Smiley Dialog +DlgSmileyTitle : "Ubaci smješka", + +// Special Character Dialog +DlgSpecialCharTitle : "Odaberite posebni karakter", + +// Table Dialog +DlgTableTitle : "Svojstva tablice", +DlgTableRows : "Redova", +DlgTableColumns : "Kolona", +DlgTableBorder : "Veličina okvira", +DlgTableAlign : "Poravnanje", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Lijevo", +DlgTableAlignCenter : "Središnje", +DlgTableAlignRight : "Desno", +DlgTableWidth : "Širina", +DlgTableWidthPx : "piksela", +DlgTableWidthPc : "postotaka", +DlgTableHeight : "Visina", +DlgTableCellSpace : "Prostornost ćelija", +DlgTableCellPad : "Razmak ćelija", +DlgTableCaption : "Naslov", +DlgTableSummary : "Sažetak", + +// Table Cell Dialog +DlgCellTitle : "Svojstva ćelije", +DlgCellWidth : "Širina", +DlgCellWidthPx : "piksela", +DlgCellWidthPc : "postotaka", +DlgCellHeight : "Visina", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Da", +DlgCellWordWrapNo : "Ne", +DlgCellHorAlign : "Vodoravno poravnanje", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Lijevo", +DlgCellHorAlignCenter : "Središnje", +DlgCellHorAlignRight: "Desno", +DlgCellVerAlign : "Okomito poravnanje", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Gornje", +DlgCellVerAlignMiddle : "Srednišnje", +DlgCellVerAlignBottom : "Donje", +DlgCellVerAlignBaseline : "Bazno", +DlgCellRowSpan : "Spajanje redova", +DlgCellCollSpan : "Spajanje kolona", +DlgCellBackColor : "Boja pozadine", +DlgCellBorderColor : "Boja okvira", +DlgCellBtnSelect : "Odaberi...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Pronađi i zamijeni", + +// Find Dialog +DlgFindTitle : "Pronađi", +DlgFindFindBtn : "Pronađi", +DlgFindNotFoundMsg : "Traženi tekst nije pronađen.", + +// Replace Dialog +DlgReplaceTitle : "Zamijeni", +DlgReplaceFindLbl : "Pronađi:", +DlgReplaceReplaceLbl : "Zamijeni s:", +DlgReplaceCaseChk : "Usporedi mala/velika slova", +DlgReplaceReplaceBtn : "Zamijeni", +DlgReplaceReplAllBtn : "Zamijeni sve", +DlgReplaceWordChk : "Usporedi cijele riječi", + +// Paste Operations / Dialog +PasteErrorCut : "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).", +PasteErrorCopy : "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).", + +PasteAsText : "Zalijepi kao čisti tekst", +PasteFromWord : "Zalijepi iz Worda", + +DlgPasteMsg2 : "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (Ctrl+V) i kliknite OK.", +DlgPasteSec : "Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.", +DlgPasteIgnoreFont : "Zanemari definiciju vrste fonta", +DlgPasteRemoveStyles : "Ukloni definicije stilova", + +// Color Picker +ColorAutomatic : "Automatski", +ColorMoreColors : "Više boja...", + +// Document Properties +DocProps : "Svojstva dokumenta", + +// Anchor Dialog +DlgAnchorTitle : "Svojstva sidra", +DlgAnchorName : "Ime sidra", +DlgAnchorErrorName : "Molimo unesite ime sidra", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nije u rječniku", +DlgSpellChangeTo : "Promijeni u", +DlgSpellBtnIgnore : "Zanemari", +DlgSpellBtnIgnoreAll : "Zanemari sve", +DlgSpellBtnReplace : "Zamijeni", +DlgSpellBtnReplaceAll : "Zamijeni sve", +DlgSpellBtnUndo : "Vrati", +DlgSpellNoSuggestions : "-Nema preporuke-", +DlgSpellProgress : "Provjera u tijeku...", +DlgSpellNoMispell : "Provjera završena: Nema grešaka", +DlgSpellNoChanges : "Provjera završena: Nije napravljena promjena", +DlgSpellOneChange : "Provjera završena: Jedna riječ promjenjena", +DlgSpellManyChanges : "Provjera završena: Promijenjeno %1 riječi", + +IeSpellDownload : "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?", + +// Button Dialog +DlgButtonText : "Tekst (vrijednost)", +DlgButtonType : "Vrsta", +DlgButtonTypeBtn : "Gumb", +DlgButtonTypeSbm : "Pošalji", +DlgButtonTypeRst : "Poništi", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Ime", +DlgCheckboxValue : "Vrijednost", +DlgCheckboxSelected : "Odabrano", + +// Form Dialog +DlgFormName : "Ime", +DlgFormAction : "Akcija", +DlgFormMethod : "Metoda", + +// Select Field Dialog +DlgSelectName : "Ime", +DlgSelectValue : "Vrijednost", +DlgSelectSize : "Veličina", +DlgSelectLines : "linija", +DlgSelectChkMulti : "Dozvoli višestruki odabir", +DlgSelectOpAvail : "Dostupne opcije", +DlgSelectOpText : "Tekst", +DlgSelectOpValue : "Vrijednost", +DlgSelectBtnAdd : "Dodaj", +DlgSelectBtnModify : "Promijeni", +DlgSelectBtnUp : "Gore", +DlgSelectBtnDown : "Dolje", +DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost", +DlgSelectBtnDelete : "Obriši", + +// Textarea Dialog +DlgTextareaName : "Ime", +DlgTextareaCols : "Kolona", +DlgTextareaRows : "Redova", + +// Text Field Dialog +DlgTextName : "Ime", +DlgTextValue : "Vrijednost", +DlgTextCharWidth : "Širina", +DlgTextMaxChars : "Najviše karaktera", +DlgTextType : "Vrsta", +DlgTextTypeText : "Tekst", +DlgTextTypePass : "Šifra", + +// Hidden Field Dialog +DlgHiddenName : "Ime", +DlgHiddenValue : "Vrijednost", + +// Bulleted List Dialog +BulletedListProp : "Svojstva liste", +NumberedListProp : "Svojstva brojčane liste", +DlgLstStart : "Početak", +DlgLstType : "Vrsta", +DlgLstTypeCircle : "Krug", +DlgLstTypeDisc : "Disk", +DlgLstTypeSquare : "Kvadrat", +DlgLstTypeNumbers : "Brojevi (1, 2, 3)", +DlgLstTypeLCase : "Mala slova (a, b, c)", +DlgLstTypeUCase : "Velika slova (A, B, C)", +DlgLstTypeSRoman : "Male rimske brojke (i, ii, iii)", +DlgLstTypeLRoman : "Velike rimske brojke (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Općenito", +DlgDocBackTab : "Pozadina", +DlgDocColorsTab : "Boje i margine", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Naslov stranice", +DlgDocLangDir : "Smjer jezika", +DlgDocLangDirLTR : "S lijeva na desno", +DlgDocLangDirRTL : "S desna na lijevo", +DlgDocLangCode : "Kôd jezika", +DlgDocCharSet : "Enkodiranje znakova", +DlgDocCharSetCE : "Središnja Europa", +DlgDocCharSetCT : "Tradicionalna kineska (Big5)", +DlgDocCharSetCR : "Ćirilica", +DlgDocCharSetGR : "Grčka", +DlgDocCharSetJP : "Japanska", +DlgDocCharSetKR : "Koreanska", +DlgDocCharSetTR : "Turska", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Zapadna Europa", +DlgDocCharSetOther : "Ostalo enkodiranje znakova", + +DlgDocDocType : "Zaglavlje vrste dokumenta", +DlgDocDocTypeOther : "Ostalo zaglavlje vrste dokumenta", +DlgDocIncXHTML : "Ubaci XHTML deklaracije", +DlgDocBgColor : "Boja pozadine", +DlgDocBgImage : "URL slike pozadine", +DlgDocBgNoScroll : "Pozadine se ne pomiče", +DlgDocCText : "Tekst", +DlgDocCLink : "Link", +DlgDocCVisited : "Posjećeni link", +DlgDocCActive : "Aktivni link", +DlgDocMargins : "Margine stranice", +DlgDocMaTop : "Vrh", +DlgDocMaLeft : "Lijevo", +DlgDocMaRight : "Desno", +DlgDocMaBottom : "Dolje", +DlgDocMeIndex : "Ključne riječi dokumenta (odvojene zarezom)", +DlgDocMeDescr : "Opis dokumenta", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Autorska prava", +DlgDocPreview : "Pregledaj", + +// Templates Dialog +Templates : "Predlošci", +DlgTemplatesTitle : "Predlošci sadržaja", +DlgTemplatesSelMsg : "Molimo odaberite predložak koji želite otvoriti
        (stvarni sadržaj će biti izgubljen):", +DlgTemplatesLoading : "Učitavam listu predložaka. Molimo pričekajte...", +DlgTemplatesNoTpl : "(Nema definiranih predložaka)", +DlgTemplatesReplace : "Zamijeni trenutne sadržaje", + +// About Dialog +DlgAboutAboutTab : "O FCKEditoru", +DlgAboutBrowserInfoTab : "Podaci o pretraživaču", +DlgAboutLicenseTab : "Licenca", +DlgAboutVersion : "inačica", +DlgAboutInfo : "Za više informacija posjetite" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/hu.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hu.js new file mode 100644 index 0000000..83deb85 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/hu.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Hungarian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Eszköztár elrejtése", +ToolbarExpand : "Eszköztár megjelenítése", + +// Toolbar Items and Context Menu +Save : "Mentés", +NewPage : "Új oldal", +Preview : "Előnézet", +Cut : "Kivágás", +Copy : "Másolás", +Paste : "Beillesztés", +PasteText : "Beillesztés formázás nélkül", +PasteWord : "Beillesztés Word-ből", +Print : "Nyomtatás", +SelectAll : "Mindent kijelöl", +RemoveFormat : "Formázás eltávolítása", +InsertLinkLbl : "Hivatkozás", +InsertLink : "Hivatkozás beillesztése/módosítása", +RemoveLink : "Hivatkozás törlése", +Anchor : "Horgony beillesztése/szerkesztése", +AnchorDelete : "Horgony eltávolítása", +InsertImageLbl : "Kép", +InsertImage : "Kép beillesztése/módosítása", +InsertFlashLbl : "Flash", +InsertFlash : "Flash beillesztése, módosítása", +InsertTableLbl : "Táblázat", +InsertTable : "Táblázat beillesztése/módosítása", +InsertLineLbl : "Vonal", +InsertLine : "Elválasztóvonal beillesztése", +InsertSpecialCharLbl: "Speciális karakter", +InsertSpecialChar : "Speciális karakter beillesztése", +InsertSmileyLbl : "Hangulatjelek", +InsertSmiley : "Hangulatjelek beillesztése", +About : "FCKeditor névjegy", +Bold : "Félkövér", +Italic : "Dőlt", +Underline : "Aláhúzott", +StrikeThrough : "Áthúzott", +Subscript : "Alsó index", +Superscript : "Felső index", +LeftJustify : "Balra", +CenterJustify : "Középre", +RightJustify : "Jobbra", +BlockJustify : "Sorkizárt", +DecreaseIndent : "Behúzás csökkentése", +IncreaseIndent : "Behúzás növelése", +Blockquote : "Idézet blokk", +Undo : "Visszavonás", +Redo : "Ismétlés", +NumberedListLbl : "Számozás", +NumberedList : "Számozás beillesztése/törlése", +BulletedListLbl : "Felsorolás", +BulletedList : "Felsorolás beillesztése/törlése", +ShowTableBorders : "Táblázat szegély mutatása", +ShowDetails : "Részletek mutatása", +Style : "Stílus", +FontFormat : "Formátum", +Font : "Betűtípus", +FontSize : "Méret", +TextColor : "Betűszín", +BGColor : "Háttérszín", +Source : "Forráskód", +Find : "Keresés", +Replace : "Csere", +SpellCheck : "Helyesírás-ellenőrzés", +UniversalKeyboard : "Univerzális billentyűzet", +PageBreakLbl : "Oldaltörés", +PageBreak : "Oldaltörés beillesztése", + +Form : "Űrlap", +Checkbox : "Jelölőnégyzet", +RadioButton : "Választógomb", +TextField : "Szövegmező", +Textarea : "Szövegterület", +HiddenField : "Rejtettmező", +Button : "Gomb", +SelectionField : "Legördülő lista", +ImageButton : "Képgomb", + +FitWindow : "Maximalizálás", +ShowBlocks : "Blokkok megjelenítése", + +// Context Menu +EditLink : "Hivatkozás módosítása", +CellCM : "Cella", +RowCM : "Sor", +ColumnCM : "Oszlop", +InsertRowAfter : "Sor beillesztése az aktuális sor mögé", +InsertRowBefore : "Sor beillesztése az aktuális sor elé", +DeleteRows : "Sorok törlése", +InsertColumnAfter : "Oszlop beillesztése az aktuális oszlop mögé", +InsertColumnBefore : "Oszlop beillesztése az aktuális oszlop elé", +DeleteColumns : "Oszlopok törlése", +InsertCellAfter : "Cella beillesztése az aktuális cella mögé", +InsertCellBefore : "Cella beillesztése az aktuális cella elé", +DeleteCells : "Cellák törlése", +MergeCells : "Cellák egyesítése", +MergeRight : "Cellák egyesítése jobbra", +MergeDown : "Cellák egyesítése lefelé", +HorizontalSplitCell : "Cellák szétválasztása vízszintesen", +VerticalSplitCell : "Cellák szétválasztása függőlegesen", +TableDelete : "Táblázat törlése", +CellProperties : "Cella tulajdonságai", +TableProperties : "Táblázat tulajdonságai", +ImageProperties : "Kép tulajdonságai", +FlashProperties : "Flash tulajdonságai", + +AnchorProp : "Horgony tulajdonságai", +ButtonProp : "Gomb tulajdonságai", +CheckboxProp : "Jelölőnégyzet tulajdonságai", +HiddenFieldProp : "Rejtett mező tulajdonságai", +RadioButtonProp : "Választógomb tulajdonságai", +ImageButtonProp : "Képgomb tulajdonságai", +TextFieldProp : "Szövegmező tulajdonságai", +SelectionFieldProp : "Legördülő lista tulajdonságai", +TextareaProp : "Szövegterület tulajdonságai", +FormProp : "Űrlap tulajdonságai", + +FontFormats : "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)", + +// Alerts and Messages +ProcessingXHTML : "XHTML feldolgozása. Kérem várjon...", +Done : "Kész", +PasteWordConfirm : "A beilleszteni kívánt szöveg Word-ből van másolva. El kívánja távolítani a formázást a beillesztés előtt?", +NotCompatiblePaste : "Ez a parancs csak Internet Explorer 5.5 verziótól használható. Megpróbálja beilleszteni a szöveget az eredeti formázással?", +UnknownToolbarItem : "Ismeretlen eszköztár elem \"%1\"", +UnknownCommand : "Ismeretlen parancs \"%1\"", +NotImplemented : "A parancs nem hajtható végre", +UnknownToolbarSet : "Az eszközkészlet \"%1\" nem létezik", +NoActiveX : "A böngésző biztonsági beállításai korlátozzák a szerkesztő lehetőségeit. Engedélyezni kell ezt az opciót: \"Run ActiveX controls and plug-ins\". Ettől függetlenül előfordulhatnak hibaüzenetek ill. bizonyos funkciók hiányozhatnak.", +BrowseServerBlocked : "Nem lehet megnyitni a fájlböngészőt. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.", +DialogBlocked : "Nem lehet megnyitni a párbeszédablakot. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.", + +// Dialogs +DlgBtnOK : "Rendben", +DlgBtnCancel : "Mégsem", +DlgBtnClose : "Bezárás", +DlgBtnBrowseServer : "Böngészés a szerveren", +DlgAdvancedTag : "További opciók", +DlgOpOther : "Egyéb", +DlgInfoTab : "Alaptulajdonságok", +DlgAlertUrl : "Illessze be a webcímet", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Azonosító", +DlgGenLangDir : "Írás iránya", +DlgGenLangDirLtr : "Balról jobbra", +DlgGenLangDirRtl : "Jobbról balra", +DlgGenLangCode : "Nyelv kódja", +DlgGenAccessKey : "Billentyűkombináció", +DlgGenName : "Név", +DlgGenTabIndex : "Tabulátor index", +DlgGenLongDescr : "Részletes leírás webcíme", +DlgGenClass : "Stíluskészlet", +DlgGenTitle : "Súgócimke", +DlgGenContType : "Súgó tartalomtípusa", +DlgGenLinkCharset : "Hivatkozott tartalom kódlapja", +DlgGenStyle : "Stílus", + +// Image Dialog +DlgImgTitle : "Kép tulajdonságai", +DlgImgInfoTab : "Alaptulajdonságok", +DlgImgBtnUpload : "Küldés a szerverre", +DlgImgURL : "Hivatkozás", +DlgImgUpload : "Feltöltés", +DlgImgAlt : "Buborék szöveg", +DlgImgWidth : "Szélesség", +DlgImgHeight : "Magasság", +DlgImgLockRatio : "Arány megtartása", +DlgBtnResetSize : "Eredeti méret", +DlgImgBorder : "Keret", +DlgImgHSpace : "Vízsz. táv", +DlgImgVSpace : "Függ. táv", +DlgImgAlign : "Igazítás", +DlgImgAlignLeft : "Bal", +DlgImgAlignAbsBottom: "Legaljára", +DlgImgAlignAbsMiddle: "Közepére", +DlgImgAlignBaseline : "Alapvonalhoz", +DlgImgAlignBottom : "Aljára", +DlgImgAlignMiddle : "Középre", +DlgImgAlignRight : "Jobbra", +DlgImgAlignTextTop : "Szöveg tetejére", +DlgImgAlignTop : "Tetejére", +DlgImgPreview : "Előnézet", +DlgImgAlertUrl : "Töltse ki a kép webcímét", +DlgImgLinkTab : "Hivatkozás", + +// Flash Dialog +DlgFlashTitle : "Flash tulajdonságai", +DlgFlashChkPlay : "Automata lejátszás", +DlgFlashChkLoop : "Folyamatosan", +DlgFlashChkMenu : "Flash menü engedélyezése", +DlgFlashScale : "Méretezés", +DlgFlashScaleAll : "Mindent mutat", +DlgFlashScaleNoBorder : "Keret nélkül", +DlgFlashScaleFit : "Teljes kitöltés", + +// Link Dialog +DlgLnkWindowTitle : "Hivatkozás tulajdonságai", +DlgLnkInfoTab : "Alaptulajdonságok", +DlgLnkTargetTab : "Megjelenítés", + +DlgLnkType : "Hivatkozás típusa", +DlgLnkTypeURL : "Webcím", +DlgLnkTypeAnchor : "Horgony az oldalon", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokoll", +DlgLnkProtoOther : "", +DlgLnkURL : "Webcím", +DlgLnkAnchorSel : "Horgony választása", +DlgLnkAnchorByName : "Horgony név szerint", +DlgLnkAnchorById : "Azonosító szerint", +DlgLnkNoAnchors : "(Nincs horgony a dokumentumban)", +DlgLnkEMail : "E-Mail cím", +DlgLnkEMailSubject : "Üzenet tárgya", +DlgLnkEMailBody : "Üzenet", +DlgLnkUpload : "Feltöltés", +DlgLnkBtnUpload : "Küldés a szerverre", + +DlgLnkTarget : "Tartalom megjelenítése", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Új ablakban (_blank)", +DlgLnkTargetParent : "Szülő ablakban (_parent)", +DlgLnkTargetSelf : "Azonos ablakban (_self)", +DlgLnkTargetTop : "Legfelső ablakban (_top)", +DlgLnkTargetFrameName : "Keret neve", +DlgLnkPopWinName : "Felugró ablak neve", +DlgLnkPopWinFeat : "Felugró ablak jellemzői", +DlgLnkPopResize : "Méretezhető", +DlgLnkPopLocation : "Címsor", +DlgLnkPopMenu : "Menü sor", +DlgLnkPopScroll : "Gördítősáv", +DlgLnkPopStatus : "Állapotsor", +DlgLnkPopToolbar : "Eszköztár", +DlgLnkPopFullScrn : "Teljes képernyő (csak IE)", +DlgLnkPopDependent : "Szülőhöz kapcsolt (csak Netscape)", +DlgLnkPopWidth : "Szélesség", +DlgLnkPopHeight : "Magasság", +DlgLnkPopLeft : "Bal pozíció", +DlgLnkPopTop : "Felső pozíció", + +DlnLnkMsgNoUrl : "Adja meg a hivatkozás webcímét", +DlnLnkMsgNoEMail : "Adja meg az E-Mail címet", +DlnLnkMsgNoAnchor : "Válasszon egy horgonyt", +DlnLnkMsgInvPopName : "A felbukkanó ablak neve alfanumerikus karakterrel kezdôdjön, valamint ne tartalmazzon szóközt", + +// Color Dialog +DlgColorTitle : "Színválasztás", +DlgColorBtnClear : "Törlés", +DlgColorHighlight : "Előnézet", +DlgColorSelected : "Kiválasztott", + +// Smiley Dialog +DlgSmileyTitle : "Hangulatjel beszúrása", + +// Special Character Dialog +DlgSpecialCharTitle : "Speciális karakter választása", + +// Table Dialog +DlgTableTitle : "Táblázat tulajdonságai", +DlgTableRows : "Sorok", +DlgTableColumns : "Oszlopok", +DlgTableBorder : "Szegélyméret", +DlgTableAlign : "Igazítás", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Balra", +DlgTableAlignCenter : "Középre", +DlgTableAlignRight : "Jobbra", +DlgTableWidth : "Szélesség", +DlgTableWidthPx : "képpont", +DlgTableWidthPc : "százalék", +DlgTableHeight : "Magasság", +DlgTableCellSpace : "Cella térköz", +DlgTableCellPad : "Cella belső margó", +DlgTableCaption : "Felirat", +DlgTableSummary : "Leírás", + +// Table Cell Dialog +DlgCellTitle : "Cella tulajdonságai", +DlgCellWidth : "Szélesség", +DlgCellWidthPx : "képpont", +DlgCellWidthPc : "százalék", +DlgCellHeight : "Magasság", +DlgCellWordWrap : "Sortörés", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Igen", +DlgCellWordWrapNo : "Nem", +DlgCellHorAlign : "Vízsz. igazítás", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Balra", +DlgCellHorAlignCenter : "Középre", +DlgCellHorAlignRight: "Jobbra", +DlgCellVerAlign : "Függ. igazítás", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Tetejére", +DlgCellVerAlignMiddle : "Középre", +DlgCellVerAlignBottom : "Aljára", +DlgCellVerAlignBaseline : "Egyvonalba", +DlgCellRowSpan : "Sorok egyesítése", +DlgCellCollSpan : "Oszlopok egyesítése", +DlgCellBackColor : "Háttérszín", +DlgCellBorderColor : "Szegélyszín", +DlgCellBtnSelect : "Kiválasztás...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Keresés és csere", + +// Find Dialog +DlgFindTitle : "Keresés", +DlgFindFindBtn : "Keresés", +DlgFindNotFoundMsg : "A keresett szöveg nem található.", + +// Replace Dialog +DlgReplaceTitle : "Csere", +DlgReplaceFindLbl : "Keresett szöveg:", +DlgReplaceReplaceLbl : "Csere erre:", +DlgReplaceCaseChk : "kis- és nagybetű megkülönböztetése", +DlgReplaceReplaceBtn : "Csere", +DlgReplaceReplAllBtn : "Az összes cseréje", +DlgReplaceWordChk : "csak ha ez a teljes szó", + +// Paste Operations / Dialog +PasteErrorCut : "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).", +PasteErrorCopy : "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).", + +PasteAsText : "Beillesztés formázatlan szövegként", +PasteFromWord : "Beillesztés Word-ből", + +DlgPasteMsg2 : "Másolja be az alábbi mezőbe a Ctrl+V billentyűk lenyomásával, majd nyomjon Rendben-t.", +DlgPasteSec : "A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.", +DlgPasteIgnoreFont : "Betű formázások megszüntetése", +DlgPasteRemoveStyles : "Stílusok eltávolítása", + +// Color Picker +ColorAutomatic : "Automatikus", +ColorMoreColors : "További színek...", + +// Document Properties +DocProps : "Dokumentum tulajdonságai", + +// Anchor Dialog +DlgAnchorTitle : "Horgony tulajdonságai", +DlgAnchorName : "Horgony neve", +DlgAnchorErrorName : "Kérem adja meg a horgony nevét", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nincs a szótárban", +DlgSpellChangeTo : "Módosítás", +DlgSpellBtnIgnore : "Kihagyja", +DlgSpellBtnIgnoreAll : "Mindet kihagyja", +DlgSpellBtnReplace : "Csere", +DlgSpellBtnReplaceAll : "Összes cseréje", +DlgSpellBtnUndo : "Visszavonás", +DlgSpellNoSuggestions : "Nincs javaslat", +DlgSpellProgress : "Helyesírás-ellenőrzés folyamatban...", +DlgSpellNoMispell : "Helyesírás-ellenőrzés kész: Nem találtam hibát", +DlgSpellNoChanges : "Helyesírás-ellenőrzés kész: Nincs változtatott szó", +DlgSpellOneChange : "Helyesírás-ellenőrzés kész: Egy szó cserélve", +DlgSpellManyChanges : "Helyesírás-ellenőrzés kész: %1 szó cserélve", + +IeSpellDownload : "A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?", + +// Button Dialog +DlgButtonText : "Szöveg (Érték)", +DlgButtonType : "Típus", +DlgButtonTypeBtn : "Gomb", +DlgButtonTypeSbm : "Küldés", +DlgButtonTypeRst : "Alaphelyzet", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Név", +DlgCheckboxValue : "Érték", +DlgCheckboxSelected : "Kiválasztott", + +// Form Dialog +DlgFormName : "Név", +DlgFormAction : "Adatfeldolgozást végző hivatkozás", +DlgFormMethod : "Adatküldés módja", + +// Select Field Dialog +DlgSelectName : "Név", +DlgSelectValue : "Érték", +DlgSelectSize : "Méret", +DlgSelectLines : "sor", +DlgSelectChkMulti : "több sor is kiválasztható", +DlgSelectOpAvail : "Elérhető opciók", +DlgSelectOpText : "Szöveg", +DlgSelectOpValue : "Érték", +DlgSelectBtnAdd : "Hozzáad", +DlgSelectBtnModify : "Módosít", +DlgSelectBtnUp : "Fel", +DlgSelectBtnDown : "Le", +DlgSelectBtnSetValue : "Legyen az alapértelmezett érték", +DlgSelectBtnDelete : "Töröl", + +// Textarea Dialog +DlgTextareaName : "Név", +DlgTextareaCols : "Karakterek száma egy sorban", +DlgTextareaRows : "Sorok száma", + +// Text Field Dialog +DlgTextName : "Név", +DlgTextValue : "Érték", +DlgTextCharWidth : "Megjelenített karakterek száma", +DlgTextMaxChars : "Maximális karakterszám", +DlgTextType : "Típus", +DlgTextTypeText : "Szöveg", +DlgTextTypePass : "Jelszó", + +// Hidden Field Dialog +DlgHiddenName : "Név", +DlgHiddenValue : "Érték", + +// Bulleted List Dialog +BulletedListProp : "Felsorolás tulajdonságai", +NumberedListProp : "Számozás tulajdonságai", +DlgLstStart : "Start", +DlgLstType : "Formátum", +DlgLstTypeCircle : "Kör", +DlgLstTypeDisc : "Lemez", +DlgLstTypeSquare : "Négyzet", +DlgLstTypeNumbers : "Számok (1, 2, 3)", +DlgLstTypeLCase : "Kisbetűk (a, b, c)", +DlgLstTypeUCase : "Nagybetűk (A, B, C)", +DlgLstTypeSRoman : "Kis római számok (i, ii, iii)", +DlgLstTypeLRoman : "Nagy római számok (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Általános", +DlgDocBackTab : "Háttér", +DlgDocColorsTab : "Színek és margók", +DlgDocMetaTab : "Meta adatok", + +DlgDocPageTitle : "Oldalcím", +DlgDocLangDir : "Írás iránya", +DlgDocLangDirLTR : "Balról jobbra", +DlgDocLangDirRTL : "Jobbról balra", +DlgDocLangCode : "Nyelv kód", +DlgDocCharSet : "Karakterkódolás", +DlgDocCharSetCE : "Közép-Európai", +DlgDocCharSetCT : "Kínai Tradicionális (Big5)", +DlgDocCharSetCR : "Cyrill", +DlgDocCharSetGR : "Görög", +DlgDocCharSetJP : "Japán", +DlgDocCharSetKR : "Koreai", +DlgDocCharSetTR : "Török", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Nyugat-Európai", +DlgDocCharSetOther : "Más karakterkódolás", + +DlgDocDocType : "Dokumentum típus fejléc", +DlgDocDocTypeOther : "Más dokumentum típus fejléc", +DlgDocIncXHTML : "XHTML deklarációk beillesztése", +DlgDocBgColor : "Háttérszín", +DlgDocBgImage : "Háttérkép cím", +DlgDocBgNoScroll : "Nem gördíthető háttér", +DlgDocCText : "Szöveg", +DlgDocCLink : "Cím", +DlgDocCVisited : "Látogatott cím", +DlgDocCActive : "Aktív cím", +DlgDocMargins : "Oldal margók", +DlgDocMaTop : "Felső", +DlgDocMaLeft : "Bal", +DlgDocMaRight : "Jobb", +DlgDocMaBottom : "Alsó", +DlgDocMeIndex : "Dokumentum keresőszavak (vesszővel elválasztva)", +DlgDocMeDescr : "Dokumentum leírás", +DlgDocMeAuthor : "Szerző", +DlgDocMeCopy : "Szerzői jog", +DlgDocPreview : "Előnézet", + +// Templates Dialog +Templates : "Sablonok", +DlgTemplatesTitle : "Elérhető sablonok", +DlgTemplatesSelMsg : "Válassza ki melyik sablon nyíljon meg a szerkesztőben
        (a jelenlegi tartalom elveszik):", +DlgTemplatesLoading : "Sablon lista betöltése. Kis türelmet...", +DlgTemplatesNoTpl : "(Nincs sablon megadva)", +DlgTemplatesReplace : "Kicseréli a jelenlegi tartalmat", + +// About Dialog +DlgAboutAboutTab : "Névjegy", +DlgAboutBrowserInfoTab : "Böngésző információ", +DlgAboutLicenseTab : "Licensz", +DlgAboutVersion : "verzió", +DlgAboutInfo : "További információkért látogasson el ide:" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/it.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/it.js new file mode 100644 index 0000000..5f54c39 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/it.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Italian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Nascondi la barra degli strumenti", +ToolbarExpand : "Mostra la barra degli strumenti", + +// Toolbar Items and Context Menu +Save : "Salva", +NewPage : "Nuova pagina vuota", +Preview : "Anteprima", +Cut : "Taglia", +Copy : "Copia", +Paste : "Incolla", +PasteText : "Incolla come testo semplice", +PasteWord : "Incolla da Word", +Print : "Stampa", +SelectAll : "Seleziona tutto", +RemoveFormat : "Elimina formattazione", +InsertLinkLbl : "Collegamento", +InsertLink : "Inserisci/Modifica collegamento", +RemoveLink : "Elimina collegamento", +Anchor : "Inserisci/Modifica Ancora", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Immagine", +InsertImage : "Inserisci/Modifica immagine", +InsertFlashLbl : "Oggetto Flash", +InsertFlash : "Inserisci/Modifica Oggetto Flash", +InsertTableLbl : "Tabella", +InsertTable : "Inserisci/Modifica tabella", +InsertLineLbl : "Riga orizzontale", +InsertLine : "Inserisci riga orizzontale", +InsertSpecialCharLbl: "Caratteri speciali", +InsertSpecialChar : "Inserisci carattere speciale", +InsertSmileyLbl : "Emoticon", +InsertSmiley : "Inserisci emoticon", +About : "Informazioni su FCKeditor", +Bold : "Grassetto", +Italic : "Corsivo", +Underline : "Sottolineato", +StrikeThrough : "Barrato", +Subscript : "Pedice", +Superscript : "Apice", +LeftJustify : "Allinea a sinistra", +CenterJustify : "Centra", +RightJustify : "Allinea a destra", +BlockJustify : "Giustifica", +DecreaseIndent : "Riduci rientro", +IncreaseIndent : "Aumenta rientro", +Blockquote : "Blockquote", //MISSING +Undo : "Annulla", +Redo : "Ripristina", +NumberedListLbl : "Elenco numerato", +NumberedList : "Inserisci/Modifica elenco numerato", +BulletedListLbl : "Elenco puntato", +BulletedList : "Inserisci/Modifica elenco puntato", +ShowTableBorders : "Mostra bordi tabelle", +ShowDetails : "Mostra dettagli", +Style : "Stile", +FontFormat : "Formato", +Font : "Font", +FontSize : "Dimensione", +TextColor : "Colore testo", +BGColor : "Colore sfondo", +Source : "Codice Sorgente", +Find : "Trova", +Replace : "Sostituisci", +SpellCheck : "Correttore ortografico", +UniversalKeyboard : "Tastiera universale", +PageBreakLbl : "Interruzione di pagina", +PageBreak : "Inserisci interruzione di pagina", + +Form : "Modulo", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Campo di testo", +Textarea : "Area di testo", +HiddenField : "Campo nascosto", +Button : "Bottone", +SelectionField : "Menu di selezione", +ImageButton : "Bottone immagine", + +FitWindow : "Massimizza l'area dell'editor", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Modifica collegamento", +CellCM : "Cella", +RowCM : "Riga", +ColumnCM : "Colonna", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Elimina righe", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Elimina colonne", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Elimina celle", +MergeCells : "Unisce celle", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Cancella Tabella", +CellProperties : "Proprietà cella", +TableProperties : "Proprietà tabella", +ImageProperties : "Proprietà immagine", +FlashProperties : "Proprietà Oggetto Flash", + +AnchorProp : "Proprietà ancora", +ButtonProp : "Proprietà bottone", +CheckboxProp : "Proprietà checkbox", +HiddenFieldProp : "Proprietà campo nascosto", +RadioButtonProp : "Proprietà radio button", +ImageButtonProp : "Proprietà bottone immagine", +TextFieldProp : "Proprietà campo di testo", +SelectionFieldProp : "Proprietà menu di selezione", +TextareaProp : "Proprietà area di testo", +FormProp : "Proprietà modulo", + +FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Elaborazione XHTML in corso. Attendere prego...", +Done : "Completato", +PasteWordConfirm : "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?", +NotCompatiblePaste : "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?", +UnknownToolbarItem : "Elemento della barra strumenti sconosciuto \"%1\"", +UnknownCommand : "Comando sconosciuto \"%1\"", +NotImplemented : "Comando non implementato", +UnknownToolbarSet : "La barra di strumenti \"%1\" non esiste", +NoActiveX : "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.", +BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.", +DialogBlocked : "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annulla", +DlgBtnClose : "Chiudi", +DlgBtnBrowseServer : "Cerca sul server", +DlgAdvancedTag : "Avanzate", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Devi inserire l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Direzione scrittura", +DlgGenLangDirLtr : "Da Sinistra a Destra (LTR)", +DlgGenLangDirRtl : "Da Destra a Sinistra (RTL)", +DlgGenLangCode : "Codice Lingua", +DlgGenAccessKey : "Scorciatoia
        da tastiera", +DlgGenName : "Nome", +DlgGenTabIndex : "Ordine di tabulazione", +DlgGenLongDescr : "URL descrizione estesa", +DlgGenClass : "Nome classe CSS", +DlgGenTitle : "Titolo", +DlgGenContType : "Tipo della risorsa collegata", +DlgGenLinkCharset : "Set di caretteri della risorsa collegata", +DlgGenStyle : "Stile", + +// Image Dialog +DlgImgTitle : "Proprietà immagine", +DlgImgInfoTab : "Informazioni immagine", +DlgImgBtnUpload : "Invia al server", +DlgImgURL : "URL", +DlgImgUpload : "Carica", +DlgImgAlt : "Testo alternativo", +DlgImgWidth : "Larghezza", +DlgImgHeight : "Altezza", +DlgImgLockRatio : "Blocca rapporto", +DlgBtnResetSize : "Reimposta dimensione", +DlgImgBorder : "Bordo", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Allineamento", +DlgImgAlignLeft : "Sinistra", +DlgImgAlignAbsBottom: "In basso assoluto", +DlgImgAlignAbsMiddle: "Centrato assoluto", +DlgImgAlignBaseline : "Linea base", +DlgImgAlignBottom : "In Basso", +DlgImgAlignMiddle : "Centrato", +DlgImgAlignRight : "Destra", +DlgImgAlignTextTop : "In alto al testo", +DlgImgAlignTop : "In Alto", +DlgImgPreview : "Anteprima", +DlgImgAlertUrl : "Devi inserire l'URL per l'immagine", +DlgImgLinkTab : "Collegamento", + +// Flash Dialog +DlgFlashTitle : "Proprietà Oggetto Flash", +DlgFlashChkPlay : "Avvio Automatico", +DlgFlashChkLoop : "Cicla", +DlgFlashChkMenu : "Abilita Menu di Flash", +DlgFlashScale : "Ridimensiona", +DlgFlashScaleAll : "Mostra Tutto", +DlgFlashScaleNoBorder : "Senza Bordo", +DlgFlashScaleFit : "Dimensione Esatta", + +// Link Dialog +DlgLnkWindowTitle : "Collegamento", +DlgLnkInfoTab : "Informazioni collegamento", +DlgLnkTargetTab : "Destinazione", + +DlgLnkType : "Tipo di Collegamento", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancora nella pagina", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocollo", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Scegli Ancora", +DlgLnkAnchorByName : "Per Nome", +DlgLnkAnchorById : "Per id elemento", +DlgLnkNoAnchors : "(Nessuna ancora disponibile nel documento)", +DlgLnkEMail : "Indirizzo E-Mail", +DlgLnkEMailSubject : "Oggetto del messaggio", +DlgLnkEMailBody : "Corpo del messaggio", +DlgLnkUpload : "Carica", +DlgLnkBtnUpload : "Invia al Server", + +DlgLnkTarget : "Destinazione", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nuova finestra (_blank)", +DlgLnkTargetParent : "Finestra padre (_parent)", +DlgLnkTargetSelf : "Stessa finestra (_self)", +DlgLnkTargetTop : "Finestra superiore (_top)", +DlgLnkTargetFrameName : "Nome del riquadro di destinazione", +DlgLnkPopWinName : "Nome finestra popup", +DlgLnkPopWinFeat : "Caratteristiche finestra popup", +DlgLnkPopResize : "Ridimensionabile", +DlgLnkPopLocation : "Barra degli indirizzi", +DlgLnkPopMenu : "Barra del menu", +DlgLnkPopScroll : "Barre di scorrimento", +DlgLnkPopStatus : "Barra di stato", +DlgLnkPopToolbar : "Barra degli strumenti", +DlgLnkPopFullScrn : "A tutto schermo (IE)", +DlgLnkPopDependent : "Dipendente (Netscape)", +DlgLnkPopWidth : "Larghezza", +DlgLnkPopHeight : "Altezza", +DlgLnkPopLeft : "Posizione da sinistra", +DlgLnkPopTop : "Posizione dall'alto", + +DlnLnkMsgNoUrl : "Devi inserire l'URL del collegamento", +DlnLnkMsgNoEMail : "Devi inserire un'indirizzo e-mail", +DlnLnkMsgNoAnchor : "Devi selezionare un'ancora", +DlnLnkMsgInvPopName : "Il nome del popup deve iniziare con una lettera, e non può contenere spazi", + +// Color Dialog +DlgColorTitle : "Seleziona colore", +DlgColorBtnClear : "Vuota", +DlgColorHighlight : "Evidenziato", +DlgColorSelected : "Selezionato", + +// Smiley Dialog +DlgSmileyTitle : "Inserisci emoticon", + +// Special Character Dialog +DlgSpecialCharTitle : "Seleziona carattere speciale", + +// Table Dialog +DlgTableTitle : "Proprietà tabella", +DlgTableRows : "Righe", +DlgTableColumns : "Colonne", +DlgTableBorder : "Dimensione bordo", +DlgTableAlign : "Allineamento", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Sinistra", +DlgTableAlignCenter : "Centrato", +DlgTableAlignRight : "Destra", +DlgTableWidth : "Larghezza", +DlgTableWidthPx : "pixel", +DlgTableWidthPc : "percento", +DlgTableHeight : "Altezza", +DlgTableCellSpace : "Spaziatura celle", +DlgTableCellPad : "Padding celle", +DlgTableCaption : "Intestazione", +DlgTableSummary : "Indice", + +// Table Cell Dialog +DlgCellTitle : "Proprietà cella", +DlgCellWidth : "Larghezza", +DlgCellWidthPx : "pixel", +DlgCellWidthPc : "percento", +DlgCellHeight : "Altezza", +DlgCellWordWrap : "A capo automatico", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Si", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Allineamento orizzontale", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Sinistra", +DlgCellHorAlignCenter : "Centrato", +DlgCellHorAlignRight: "Destra", +DlgCellVerAlign : "Allineamento verticale", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "In Alto", +DlgCellVerAlignMiddle : "Centrato", +DlgCellVerAlignBottom : "In Basso", +DlgCellVerAlignBaseline : "Linea base", +DlgCellRowSpan : "Righe occupate", +DlgCellCollSpan : "Colonne occupate", +DlgCellBackColor : "Colore sfondo", +DlgCellBorderColor : "Colore bordo", +DlgCellBtnSelect : "Scegli...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Trova", +DlgFindFindBtn : "Trova", +DlgFindNotFoundMsg : "L'elemento cercato non è stato trovato.", + +// Replace Dialog +DlgReplaceTitle : "Sostituisci", +DlgReplaceFindLbl : "Trova:", +DlgReplaceReplaceLbl : "Sostituisci con:", +DlgReplaceCaseChk : "Maiuscole/minuscole", +DlgReplaceReplaceBtn : "Sostituisci", +DlgReplaceReplAllBtn : "Sostituisci tutto", +DlgReplaceWordChk : "Solo parole intere", + +// Paste Operations / Dialog +PasteErrorCut : "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).", +PasteErrorCopy : "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).", + +PasteAsText : "Incolla come testo semplice", +PasteFromWord : "Incolla da Word", + +DlgPasteMsg2 : "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (Ctrl+V) e premi OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignora le definizioni di Font", +DlgPasteRemoveStyles : "Rimuovi le definizioni di Stile", + +// Color Picker +ColorAutomatic : "Automatico", +ColorMoreColors : "Altri colori...", + +// Document Properties +DocProps : "Proprietà del Documento", + +// Anchor Dialog +DlgAnchorTitle : "Proprietà ancora", +DlgAnchorName : "Nome ancora", +DlgAnchorErrorName : "Inserici il nome dell'ancora", + +// Speller Pages Dialog +DlgSpellNotInDic : "Non nel dizionario", +DlgSpellChangeTo : "Cambia in", +DlgSpellBtnIgnore : "Ignora", +DlgSpellBtnIgnoreAll : "Ignora tutto", +DlgSpellBtnReplace : "Cambia", +DlgSpellBtnReplaceAll : "Cambia tutto", +DlgSpellBtnUndo : "Annulla", +DlgSpellNoSuggestions : "- Nessun suggerimento -", +DlgSpellProgress : "Controllo ortografico in corso", +DlgSpellNoMispell : "Controllo ortografico completato: nessun errore trovato", +DlgSpellNoChanges : "Controllo ortografico completato: nessuna parola cambiata", +DlgSpellOneChange : "Controllo ortografico completato: 1 parola cambiata", +DlgSpellManyChanges : "Controllo ortografico completato: %1 parole cambiate", + +IeSpellDownload : "Contollo ortografico non installato. Lo vuoi scaricare ora?", + +// Button Dialog +DlgButtonText : "Testo (Value)", +DlgButtonType : "Tipo", +DlgButtonTypeBtn : "Bottone", +DlgButtonTypeSbm : "Invio", +DlgButtonTypeRst : "Annulla", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nome", +DlgCheckboxValue : "Valore", +DlgCheckboxSelected : "Selezionato", + +// Form Dialog +DlgFormName : "Nome", +DlgFormAction : "Azione", +DlgFormMethod : "Metodo", + +// Select Field Dialog +DlgSelectName : "Nome", +DlgSelectValue : "Valore", +DlgSelectSize : "Dimensione", +DlgSelectLines : "righe", +DlgSelectChkMulti : "Permetti selezione multipla", +DlgSelectOpAvail : "Opzioni disponibili", +DlgSelectOpText : "Testo", +DlgSelectOpValue : "Valore", +DlgSelectBtnAdd : "Aggiungi", +DlgSelectBtnModify : "Modifica", +DlgSelectBtnUp : "Su", +DlgSelectBtnDown : "Gi", +DlgSelectBtnSetValue : "Imposta come predefinito", +DlgSelectBtnDelete : "Rimuovi", + +// Textarea Dialog +DlgTextareaName : "Nome", +DlgTextareaCols : "Colonne", +DlgTextareaRows : "Righe", + +// Text Field Dialog +DlgTextName : "Nome", +DlgTextValue : "Valore", +DlgTextCharWidth : "Larghezza", +DlgTextMaxChars : "Numero massimo di caratteri", +DlgTextType : "Tipo", +DlgTextTypeText : "Testo", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Nome", +DlgHiddenValue : "Valore", + +// Bulleted List Dialog +BulletedListProp : "Proprietà lista puntata", +NumberedListProp : "Proprietà lista numerata", +DlgLstStart : "Inizio", +DlgLstType : "Tipo", +DlgLstTypeCircle : "Tondo", +DlgLstTypeDisc : "Disco", +DlgLstTypeSquare : "Quadrato", +DlgLstTypeNumbers : "Numeri (1, 2, 3)", +DlgLstTypeLCase : "Caratteri minuscoli (a, b, c)", +DlgLstTypeUCase : "Caratteri maiuscoli (A, B, C)", +DlgLstTypeSRoman : "Numeri Romani minuscoli (i, ii, iii)", +DlgLstTypeLRoman : "Numeri Romani maiuscoli (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Genarale", +DlgDocBackTab : "Sfondo", +DlgDocColorsTab : "Colori e margini", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Titolo pagina", +DlgDocLangDir : "Direzione scrittura", +DlgDocLangDirLTR : "Da Sinistra a Destra (LTR)", +DlgDocLangDirRTL : "Da Destra a Sinistra (RTL)", +DlgDocLangCode : "Codice Lingua", +DlgDocCharSet : "Set di caretteri", +DlgDocCharSetCE : "Europa Centrale", +DlgDocCharSetCT : "Cinese Tradizionale (Big5)", +DlgDocCharSetCR : "Cirillico", +DlgDocCharSetGR : "Greco", +DlgDocCharSetJP : "Giapponese", +DlgDocCharSetKR : "Coreano", +DlgDocCharSetTR : "Turco", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Europa Occidentale", +DlgDocCharSetOther : "Altro set di caretteri", + +DlgDocDocType : "Intestazione DocType", +DlgDocDocTypeOther : "Altra intestazione DocType", +DlgDocIncXHTML : "Includi dichiarazione XHTML", +DlgDocBgColor : "Colore di sfondo", +DlgDocBgImage : "Immagine di sfondo", +DlgDocBgNoScroll : "Sfondo fissato", +DlgDocCText : "Testo", +DlgDocCLink : "Collegamento", +DlgDocCVisited : "Collegamento visitato", +DlgDocCActive : "Collegamento attivo", +DlgDocMargins : "Margini", +DlgDocMaTop : "In Alto", +DlgDocMaLeft : "A Sinistra", +DlgDocMaRight : "A Destra", +DlgDocMaBottom : "In Basso", +DlgDocMeIndex : "Chiavi di indicizzazione documento (separate da virgola)", +DlgDocMeDescr : "Descrizione documento", +DlgDocMeAuthor : "Autore", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Anteprima", + +// Templates Dialog +Templates : "Modelli", +DlgTemplatesTitle : "Contenuto dei modelli", +DlgTemplatesSelMsg : "Seleziona il modello da aprire nell'editor
        (il contenuto attuale verrà eliminato):", +DlgTemplatesLoading : "Caricamento modelli in corso. Attendere prego...", +DlgTemplatesNoTpl : "(Nessun modello definito)", +DlgTemplatesReplace : "Cancella il contenuto corrente", + +// About Dialog +DlgAboutAboutTab : "Informazioni", +DlgAboutBrowserInfoTab : "Informazioni Browser", +DlgAboutLicenseTab : "Licenza", +DlgAboutVersion : "versione", +DlgAboutInfo : "Per maggiori informazioni visitare" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/ja.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ja.js new file mode 100644 index 0000000..b3291bd --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ja.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Japanese language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "ツールバーを隠す", +ToolbarExpand : "ツールバーを表示", + +// Toolbar Items and Context Menu +Save : "保存", +NewPage : "新しいページ", +Preview : "プレビュー", +Cut : "切り取り", +Copy : "コピー", +Paste : "貼り付け", +PasteText : "プレーンテキスト貼り付け", +PasteWord : "ワード文章から貼り付け", +Print : "印刷", +SelectAll : "すべて選択", +RemoveFormat : "フォーマット削除", +InsertLinkLbl : "リンク", +InsertLink : "リンク挿入/編集", +RemoveLink : "リンク削除", +Anchor : "アンカー挿入/編集", +AnchorDelete : "アンカー削除", +InsertImageLbl : "イメージ", +InsertImage : "イメージ挿入/編集", +InsertFlashLbl : "Flash", +InsertFlash : "Flash挿入/編集", +InsertTableLbl : "テーブル", +InsertTable : "テーブル挿入/編集", +InsertLineLbl : "ライン", +InsertLine : "横罫線", +InsertSpecialCharLbl: "特殊文字", +InsertSpecialChar : "特殊文字挿入", +InsertSmileyLbl : "絵文字", +InsertSmiley : "絵文字挿入", +About : "FCKeditorヘルプ", +Bold : "太字", +Italic : "斜体", +Underline : "下線", +StrikeThrough : "打ち消し線", +Subscript : "添え字", +Superscript : "上付き文字", +LeftJustify : "左揃え", +CenterJustify : "中央揃え", +RightJustify : "右揃え", +BlockJustify : "両端揃え", +DecreaseIndent : "インデント解除", +IncreaseIndent : "インデント", +Blockquote : "ブロック引用", +Undo : "元に戻す", +Redo : "やり直し", +NumberedListLbl : "段落番号", +NumberedList : "段落番号の追加/削除", +BulletedListLbl : "箇条書き", +BulletedList : "箇条書きの追加/削除", +ShowTableBorders : "テーブルボーダー表示", +ShowDetails : "詳細表示", +Style : "スタイル", +FontFormat : "フォーマット", +Font : "フォント", +FontSize : "サイズ", +TextColor : "テキスト色", +BGColor : "背景色", +Source : "ソース", +Find : "検索", +Replace : "置き換え", +SpellCheck : "スペルチェック", +UniversalKeyboard : "ユニバーサル・キーボード", +PageBreakLbl : "改ページ", +PageBreak : "改ページ挿入", + +Form : "フォーム", +Checkbox : "チェックボックス", +RadioButton : "ラジオボタン", +TextField : "1行テキスト", +Textarea : "テキストエリア", +HiddenField : "不可視フィールド", +Button : "ボタン", +SelectionField : "選択フィールド", +ImageButton : "画像ボタン", + +FitWindow : "エディタサイズを最大にします", +ShowBlocks : "ブロック表示", + +// Context Menu +EditLink : "リンク編集", +CellCM : "セル", +RowCM : "行", +ColumnCM : "カラム", +InsertRowAfter : "列の後に挿入", +InsertRowBefore : "列の前に挿入", +DeleteRows : "行削除", +InsertColumnAfter : "カラムの後に挿入", +InsertColumnBefore : "カラムの前に挿入", +DeleteColumns : "列削除", +InsertCellAfter : "セルの後に挿入", +InsertCellBefore : "セルの前に挿入", +DeleteCells : "セル削除", +MergeCells : "セル結合", +MergeRight : "右に結合", +MergeDown : "下に結合", +HorizontalSplitCell : "セルを水平方向分割", +VerticalSplitCell : "セルを垂直方向に分割", +TableDelete : "テーブル削除", +CellProperties : "セル プロパティ", +TableProperties : "テーブル プロパティ", +ImageProperties : "イメージ プロパティ", +FlashProperties : "Flash プロパティ", + +AnchorProp : "アンカー プロパティ", +ButtonProp : "ボタン プロパティ", +CheckboxProp : "チェックボックス プロパティ", +HiddenFieldProp : "不可視フィールド プロパティ", +RadioButtonProp : "ラジオボタン プロパティ", +ImageButtonProp : "画像ボタン プロパティ", +TextFieldProp : "1行テキスト プロパティ", +SelectionFieldProp : "選択フィールド プロパティ", +TextareaProp : "テキストエリア プロパティ", +FormProp : "フォーム プロパティ", + +FontFormats : "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)", + +// Alerts and Messages +ProcessingXHTML : "XHTML処理中. しばらくお待ちください...", +Done : "完了", +PasteWordConfirm : "貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?", +NotCompatiblePaste : "このコマンドはインターネット・エクスプローラーバージョン5.5以上で利用可能です。クリーニングしないで貼り付けを行いますか?", +UnknownToolbarItem : "未知のツールバー項目 \"%1\"", +UnknownCommand : "未知のコマンド名 \"%1\"", +NotImplemented : "コマンドはインプリメントされませんでした。", +UnknownToolbarSet : "ツールバー設定 \"%1\" 存在しません。", +NoActiveX : "エラー、警告メッセージなどが発生した場合、ブラウザーのセキュリティ設定によりエディタのいくつかの機能が制限されている可能性があります。セキュリティ設定のオプションで\"ActiveXコントロールとプラグインの実行\"を有効にするにしてください。", +BrowseServerBlocked : "サーバーブラウザーを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。", +DialogBlocked : "ダイアログウィンドウを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "キャンセル", +DlgBtnClose : "閉じる", +DlgBtnBrowseServer : "サーバーブラウザー", +DlgAdvancedTag : "高度な設定", +DlgOpOther : "<その他>", +DlgInfoTab : "情報", +DlgAlertUrl : "URLを挿入してください", + +// General Dialogs Labels +DlgGenNotSet : "<なし>", +DlgGenId : "Id", +DlgGenLangDir : "文字表記の方向", +DlgGenLangDirLtr : "左から右 (LTR)", +DlgGenLangDirRtl : "右から左 (RTL)", +DlgGenLangCode : "言語コード", +DlgGenAccessKey : "アクセスキー", +DlgGenName : "Name属性", +DlgGenTabIndex : "タブインデックス", +DlgGenLongDescr : "longdesc属性(長文説明)", +DlgGenClass : "スタイルシートクラス", +DlgGenTitle : "Title属性", +DlgGenContType : "Content Type属性", +DlgGenLinkCharset : "リンクcharset属性", +DlgGenStyle : "スタイルシート", + +// Image Dialog +DlgImgTitle : "イメージ プロパティ", +DlgImgInfoTab : "イメージ 情報", +DlgImgBtnUpload : "サーバーに送信", +DlgImgURL : "URL", +DlgImgUpload : "アップロード", +DlgImgAlt : "代替テキスト", +DlgImgWidth : "幅", +DlgImgHeight : "高さ", +DlgImgLockRatio : "ロック比率", +DlgBtnResetSize : "サイズリセット", +DlgImgBorder : "ボーダー", +DlgImgHSpace : "横間隔", +DlgImgVSpace : "縦間隔", +DlgImgAlign : "行揃え", +DlgImgAlignLeft : "左", +DlgImgAlignAbsBottom: "下部(絶対的)", +DlgImgAlignAbsMiddle: "中央(絶対的)", +DlgImgAlignBaseline : "ベースライン", +DlgImgAlignBottom : "下", +DlgImgAlignMiddle : "中央", +DlgImgAlignRight : "右", +DlgImgAlignTextTop : "テキスト上部", +DlgImgAlignTop : "上", +DlgImgPreview : "プレビュー", +DlgImgAlertUrl : "イメージのURLを入力してください。", +DlgImgLinkTab : "リンク", + +// Flash Dialog +DlgFlashTitle : "Flash プロパティ", +DlgFlashChkPlay : "再生", +DlgFlashChkLoop : "ループ再生", +DlgFlashChkMenu : "Flashメニュー可能", +DlgFlashScale : "拡大縮小設定", +DlgFlashScaleAll : "すべて表示", +DlgFlashScaleNoBorder : "外が見えない様に拡大", +DlgFlashScaleFit : "上下左右にフィット", + +// Link Dialog +DlgLnkWindowTitle : "ハイパーリンク", +DlgLnkInfoTab : "ハイパーリンク 情報", +DlgLnkTargetTab : "ターゲット", + +DlgLnkType : "リンクタイプ", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "このページのアンカー", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "プロトコル", +DlgLnkProtoOther : "<その他>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "アンカーを選択", +DlgLnkAnchorByName : "アンカー名", +DlgLnkAnchorById : "エレメントID", +DlgLnkNoAnchors : "(ドキュメントにおいて利用可能なアンカーはありません。)", +DlgLnkEMail : "E-Mail アドレス", +DlgLnkEMailSubject : "件名", +DlgLnkEMailBody : "本文", +DlgLnkUpload : "アップロード", +DlgLnkBtnUpload : "サーバーに送信", + +DlgLnkTarget : "ターゲット", +DlgLnkTargetFrame : "<フレーム>", +DlgLnkTargetPopup : "<ポップアップウィンドウ>", +DlgLnkTargetBlank : "新しいウィンドウ (_blank)", +DlgLnkTargetParent : "親ウィンドウ (_parent)", +DlgLnkTargetSelf : "同じウィンドウ (_self)", +DlgLnkTargetTop : "最上位ウィンドウ (_top)", +DlgLnkTargetFrameName : "目的のフレーム名", +DlgLnkPopWinName : "ポップアップウィンドウ名", +DlgLnkPopWinFeat : "ポップアップウィンドウ特徴", +DlgLnkPopResize : "リサイズ可能", +DlgLnkPopLocation : "ロケーションバー", +DlgLnkPopMenu : "メニューバー", +DlgLnkPopScroll : "スクロールバー", +DlgLnkPopStatus : "ステータスバー", +DlgLnkPopToolbar : "ツールバー", +DlgLnkPopFullScrn : "全画面モード(IE)", +DlgLnkPopDependent : "開いたウィンドウに連動して閉じる (Netscape)", +DlgLnkPopWidth : "幅", +DlgLnkPopHeight : "高さ", +DlgLnkPopLeft : "左端からの座標で指定", +DlgLnkPopTop : "上端からの座標で指定", + +DlnLnkMsgNoUrl : "リンクURLを入力してください。", +DlnLnkMsgNoEMail : "メールアドレスを入力してください。", +DlnLnkMsgNoAnchor : "アンカーを選択してください。", +DlnLnkMsgInvPopName : "ポップ・アップ名は英字で始まる文字で指定してくだい。ポップ・アップ名にスペースは含めません", + +// Color Dialog +DlgColorTitle : "色選択", +DlgColorBtnClear : "クリア", +DlgColorHighlight : "ハイライト", +DlgColorSelected : "選択色", + +// Smiley Dialog +DlgSmileyTitle : "顔文字挿入", + +// Special Character Dialog +DlgSpecialCharTitle : "特殊文字選択", + +// Table Dialog +DlgTableTitle : "テーブル プロパティ", +DlgTableRows : "行", +DlgTableColumns : "列", +DlgTableBorder : "ボーダーサイズ", +DlgTableAlign : "キャプションの整列", +DlgTableAlignNotSet : "<なし>", +DlgTableAlignLeft : "左", +DlgTableAlignCenter : "中央", +DlgTableAlignRight : "右", +DlgTableWidth : "テーブル幅", +DlgTableWidthPx : "ピクセル", +DlgTableWidthPc : "パーセント", +DlgTableHeight : "テーブル高さ", +DlgTableCellSpace : "セル内余白", +DlgTableCellPad : "セル内間隔", +DlgTableCaption : "キャプション", +DlgTableSummary : "テーブル目的/構造", + +// Table Cell Dialog +DlgCellTitle : "セル プロパティ", +DlgCellWidth : "幅", +DlgCellWidthPx : "ピクセル", +DlgCellWidthPc : "パーセント", +DlgCellHeight : "高さ", +DlgCellWordWrap : "折り返し", +DlgCellWordWrapNotSet : "<なし>", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "セル横の整列", +DlgCellHorAlignNotSet : "<なし>", +DlgCellHorAlignLeft : "左", +DlgCellHorAlignCenter : "中央", +DlgCellHorAlignRight: "右", +DlgCellVerAlign : "セル縦の整列", +DlgCellVerAlignNotSet : "<なし>", +DlgCellVerAlignTop : "上", +DlgCellVerAlignMiddle : "中央", +DlgCellVerAlignBottom : "下", +DlgCellVerAlignBaseline : "ベースライン", +DlgCellRowSpan : "縦幅(行数)", +DlgCellCollSpan : "横幅(列数)", +DlgCellBackColor : "背景色", +DlgCellBorderColor : "ボーダーカラー", +DlgCellBtnSelect : "選択...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "検索して置換", + +// Find Dialog +DlgFindTitle : "検索", +DlgFindFindBtn : "検索", +DlgFindNotFoundMsg : "指定された文字列は見つかりませんでした。", + +// Replace Dialog +DlgReplaceTitle : "置き換え", +DlgReplaceFindLbl : "検索する文字列:", +DlgReplaceReplaceLbl : "置換えする文字列:", +DlgReplaceCaseChk : "部分一致", +DlgReplaceReplaceBtn : "置換え", +DlgReplaceReplAllBtn : "すべて置換え", +DlgReplaceWordChk : "単語単位で一致", + +// Paste Operations / Dialog +PasteErrorCut : "ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。", +PasteErrorCopy : "ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。", + +PasteAsText : "プレーンテキスト貼り付け", +PasteFromWord : "ワード文章から貼り付け", + +DlgPasteMsg2 : "キーボード(Ctrl+V)を使用して、次の入力エリア内で貼って、OKを押してください。", +DlgPasteSec : "ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。", +DlgPasteIgnoreFont : "FontタグのFace属性を無視します。", +DlgPasteRemoveStyles : "スタイル定義を削除します。", + +// Color Picker +ColorAutomatic : "自動", +ColorMoreColors : "その他の色...", + +// Document Properties +DocProps : "文書 プロパティ", + +// Anchor Dialog +DlgAnchorTitle : "アンカー プロパティ", +DlgAnchorName : "アンカー名", +DlgAnchorErrorName : "アンカー名を必ず入力してください。", + +// Speller Pages Dialog +DlgSpellNotInDic : "辞書にありません", +DlgSpellChangeTo : "変更", +DlgSpellBtnIgnore : "無視", +DlgSpellBtnIgnoreAll : "すべて無視", +DlgSpellBtnReplace : "置換", +DlgSpellBtnReplaceAll : "すべて置換", +DlgSpellBtnUndo : "やり直し", +DlgSpellNoSuggestions : "- 該当なし -", +DlgSpellProgress : "スペルチェック処理中...", +DlgSpellNoMispell : "スペルチェック完了: スペルの誤りはありませんでした", +DlgSpellNoChanges : "スペルチェック完了: 語句は変更されませんでした", +DlgSpellOneChange : "スペルチェック完了: 1語句変更されました", +DlgSpellManyChanges : "スペルチェック完了: %1 語句変更されました", + +IeSpellDownload : "スペルチェッカーがインストールされていません。今すぐダウンロードしますか?", + +// Button Dialog +DlgButtonText : "テキスト (値)", +DlgButtonType : "タイプ", +DlgButtonTypeBtn : "ボタン", +DlgButtonTypeSbm : "送信", +DlgButtonTypeRst : "リセット", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "名前", +DlgCheckboxValue : "値", +DlgCheckboxSelected : "選択済み", + +// Form Dialog +DlgFormName : "フォーム名", +DlgFormAction : "アクション", +DlgFormMethod : "メソッド", + +// Select Field Dialog +DlgSelectName : "名前", +DlgSelectValue : "値", +DlgSelectSize : "サイズ", +DlgSelectLines : "行", +DlgSelectChkMulti : "複数項目選択を許可", +DlgSelectOpAvail : "利用可能なオプション", +DlgSelectOpText : "選択項目名", +DlgSelectOpValue : "選択項目値", +DlgSelectBtnAdd : "追加", +DlgSelectBtnModify : "編集", +DlgSelectBtnUp : "上へ", +DlgSelectBtnDown : "下へ", +DlgSelectBtnSetValue : "選択した値を設定", +DlgSelectBtnDelete : "削除", + +// Textarea Dialog +DlgTextareaName : "名前", +DlgTextareaCols : "列", +DlgTextareaRows : "行", + +// Text Field Dialog +DlgTextName : "名前", +DlgTextValue : "値", +DlgTextCharWidth : "サイズ", +DlgTextMaxChars : "最大長", +DlgTextType : "タイプ", +DlgTextTypeText : "テキスト", +DlgTextTypePass : "パスワード入力", + +// Hidden Field Dialog +DlgHiddenName : "名前", +DlgHiddenValue : "値", + +// Bulleted List Dialog +BulletedListProp : "箇条書き プロパティ", +NumberedListProp : "段落番号 プロパティ", +DlgLstStart : "開始文字", +DlgLstType : "タイプ", +DlgLstTypeCircle : "白丸", +DlgLstTypeDisc : "黒丸", +DlgLstTypeSquare : "四角", +DlgLstTypeNumbers : "アラビア数字 (1, 2, 3)", +DlgLstTypeLCase : "英字小文字 (a, b, c)", +DlgLstTypeUCase : "英字大文字 (A, B, C)", +DlgLstTypeSRoman : "ローマ数字小文字 (i, ii, iii)", +DlgLstTypeLRoman : "ローマ数字大文字 (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "全般", +DlgDocBackTab : "背景", +DlgDocColorsTab : "色とマージン", +DlgDocMetaTab : "メタデータ", + +DlgDocPageTitle : "ページタイトル", +DlgDocLangDir : "言語文字表記の方向", +DlgDocLangDirLTR : "左から右に表記(LTR)", +DlgDocLangDirRTL : "右から左に表記(RTL)", +DlgDocLangCode : "言語コード", +DlgDocCharSet : "文字セット符号化", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "他の文字セット符号化", + +DlgDocDocType : "文書タイプヘッダー", +DlgDocDocTypeOther : "その他文書タイプヘッダー", +DlgDocIncXHTML : "XHTML宣言をインクルード", +DlgDocBgColor : "背景色", +DlgDocBgImage : "背景画像 URL", +DlgDocBgNoScroll : "スクロールしない背景", +DlgDocCText : "テキスト", +DlgDocCLink : "リンク", +DlgDocCVisited : "アクセス済みリンク", +DlgDocCActive : "アクセス中リンク", +DlgDocMargins : "ページ・マージン", +DlgDocMaTop : "上部", +DlgDocMaLeft : "左", +DlgDocMaRight : "右", +DlgDocMaBottom : "下部", +DlgDocMeIndex : "文書のキーワード(カンマ区切り)", +DlgDocMeDescr : "文書の概要", +DlgDocMeAuthor : "文書の作者", +DlgDocMeCopy : "文書の著作権", +DlgDocPreview : "プレビュー", + +// Templates Dialog +Templates : "テンプレート(雛形)", +DlgTemplatesTitle : "テンプレート内容", +DlgTemplatesSelMsg : "エディターで使用するテンプレートを選択してください。
        (現在のエディタの内容は失われます):", +DlgTemplatesLoading : "テンプレート一覧読み込み中. しばらくお待ちください...", +DlgTemplatesNoTpl : "(テンプレートが定義されていません)", +DlgTemplatesReplace : "現在のエディタの内容と置換えをします", + +// About Dialog +DlgAboutAboutTab : "バージョン情報", +DlgAboutBrowserInfoTab : "ブラウザ情報", +DlgAboutLicenseTab : "ライセンス", +DlgAboutVersion : "バージョン", +DlgAboutInfo : "より詳しい情報はこちらで" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/km.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/km.js new file mode 100644 index 0000000..d72806f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/km.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Khmer language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "បង្រួមរបាឧបរកណ៍", +ToolbarExpand : "ពង្រីករបាឧបរណ៍", + +// Toolbar Items and Context Menu +Save : "រក្សាទុក", +NewPage : "ទំព័រថ្មី", +Preview : "មើលសាកល្បង", +Cut : "កាត់យក", +Copy : "ចំលងយក", +Paste : "ចំលងដាក់", +PasteText : "ចំលងដាក់ជាអត្ថបទធម្មតា", +PasteWord : "ចំលងដាក់ពី Word", +Print : "បោះពុម្ភ", +SelectAll : "ជ្រើសរើសទាំងអស់", +RemoveFormat : "លប់ចោល ការរចនា", +InsertLinkLbl : "ឈ្នាប់", +InsertLink : "បន្ថែម/កែប្រែ ឈ្នាប់", +RemoveLink : "លប់ឈ្នាប់", +Anchor : "បន្ថែម/កែប្រែ យុថ្កា", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "រូបភាព", +InsertImage : "បន្ថែម/កែប្រែ រូបភាព", +InsertFlashLbl : "Flash", +InsertFlash : "បន្ថែម/កែប្រែ Flash", +InsertTableLbl : "តារាង", +InsertTable : "បន្ថែម/កែប្រែ តារាង", +InsertLineLbl : "បន្ទាត់", +InsertLine : "បន្ថែមបន្ទាត់ផ្តេក", +InsertSpecialCharLbl: "អក្សរពិសេស", +InsertSpecialChar : "បន្ថែមអក្សរពិសេស", +InsertSmileyLbl : "រូបភាព", +InsertSmiley : "បន្ថែម រូបភាព", +About : "អំពី FCKeditor", +Bold : "អក្សរដិតធំ", +Italic : "អក្សរផ្តេក", +Underline : "ដិតបន្ទាត់ពីក្រោមអក្សរ", +StrikeThrough : "ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ", +Subscript : "អក្សរតូចក្រោម", +Superscript : "អក្សរតូចលើ", +LeftJustify : "តំរឹមឆ្វេង", +CenterJustify : "តំរឹមកណ្តាល", +RightJustify : "តំរឹមស្តាំ", +BlockJustify : "តំរឹមសងខាង", +DecreaseIndent : "បន្ថយការចូលបន្ទាត់", +IncreaseIndent : "បន្ថែមការចូលបន្ទាត់", +Blockquote : "Blockquote", //MISSING +Undo : "សារឡើងវិញ", +Redo : "ធ្វើឡើងវិញ", +NumberedListLbl : "បញ្ជីជាអក្សរ", +NumberedList : "បន្ថែម/លប់ បញ្ជីជាអក្សរ", +BulletedListLbl : "បញ្ជីជារង្វង់មូល", +BulletedList : "បន្ថែម/លប់ បញ្ជីជារង្វង់មូល", +ShowTableBorders : "បង្ហាញស៊ុមតារាង", +ShowDetails : "បង្ហាញពិស្តារ", +Style : "ម៉ូត", +FontFormat : "រចនា", +Font : "ហ្វុង", +FontSize : "ទំហំ", +TextColor : "ពណ៌អក្សរ", +BGColor : "ពណ៌ផ្ទៃខាងក្រោយ", +Source : "កូត", +Find : "ស្វែងរក", +Replace : "ជំនួស", +SpellCheck : "ពិនិត្យអក្ខរាវិរុទ្ធ", +UniversalKeyboard : "ក្តារពុម្ភអក្សរសកល", +PageBreakLbl : "ការផ្តាច់ទំព័រ", +PageBreak : "បន្ថែម ការផ្តាច់ទំព័រ", + +Form : "បែបបទ", +Checkbox : "ប្រអប់ជ្រើសរើស", +RadioButton : "ប៉ូតុនរង្វង់មូល", +TextField : "ជួរសរសេរអត្ថបទ", +Textarea : "តំបន់សរសេរអត្ថបទ", +HiddenField : "ជួរលាក់", +Button : "ប៉ូតុន", +SelectionField : "ជួរជ្រើសរើស", +ImageButton : "ប៉ូតុនរូបភាព", + +FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "កែប្រែឈ្នាប់", +CellCM : "Cell", //MISSING +RowCM : "Row", //MISSING +ColumnCM : "Column", //MISSING +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "លប់ជួរផ្តេក", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "លប់ជួរឈរ", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "លប់សែល", +MergeCells : "បញ្ជូលសែល", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "លប់តារាង", +CellProperties : "ការកំណត់សែល", +TableProperties : "ការកំណត់តារាង", +ImageProperties : "ការកំណត់រូបភាព", +FlashProperties : "ការកំណត់ Flash", + +AnchorProp : "ការកំណត់យុថ្កា", +ButtonProp : "ការកំណត់ ប៉ូតុន", +CheckboxProp : "ការកំណត់ប្រអប់ជ្រើសរើស", +HiddenFieldProp : "ការកំណត់ជួរលាក់", +RadioButtonProp : "ការកំណត់ប៉ូតុនរង្វង់", +ImageButtonProp : "ការកំណត់ប៉ូតុនរូបភាព", +TextFieldProp : "ការកំណត់ជួរអត្ថបទ", +SelectionFieldProp : "ការកំណត់ជួរជ្រើសរើស", +TextareaProp : "ការកំណត់កន្លែងសរសេរអត្ថបទ", +FormProp : "ការកំណត់បែបបទ", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...", +Done : "ចប់រួចរាល់", +PasteWordConfirm : "អត្ថបទដែលលោកអ្នកបំរុងចំលងដាក់ ហាក់បីដូចជាត្រូវចំលងមកពីកម្មវិធី​Word​។ តើលោកអ្នកចង់សំអាតមុនចំលងអត្ថបទដាក់ទេ?", +NotCompatiblePaste : "ពាក្យបញ្ជានេះប្រើបានតែជាមួយ Internet Explorer កំរិត 5.5 រឺ លើសនេះ ។ តើលោកអ្នកចង់ចំលងដាក់ដោយមិនចាំបាច់សំអាតទេ?", +UnknownToolbarItem : "វត្ថុលើរបាឧបរកណ៍ មិនស្គាល់ \"%1\"", +UnknownCommand : "ឈ្មោះពាក្យបញ្ជា មិនស្គាល់ \"%1\"", +NotImplemented : "ពាក្យបញ្ជា មិនបានអនុវត្ត", +UnknownToolbarSet : "របាឧបរកណ៍ \"%1\" ពុំមាន ។", +NoActiveX : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​អាចធ្វើអោយលោកអ្នកមិនអាចប្រើមុខងារខ្លះរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។ លោកអ្នកត្រូវកំណត់អោយ \"ActiveX និង​កម្មវិធីជំនួយក្នុង (plug-ins)\" អោយដំណើរការ ។ លោកអ្នកអាចជួបប្រទះនឹង បញ្ហា ព្រមជាមួយនឹងការបាត់បង់មុខងារណាមួយរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING +DialogBlocked : "វីនដូវមិនអាចបើកបានទេ ។ សូមពិនិត្យចំពោះកម្មវិធីបិទ វីនដូវលោត (popup) ថាតើវាដំណើរការរឺទេ ។", + +// Dialogs +DlgBtnOK : "យល់ព្រម", +DlgBtnCancel : "មិនយល់ព្រម", +DlgBtnClose : "បិទ", +DlgBtnBrowseServer : "មើល", +DlgAdvancedTag : "កំរិតខ្ពស់", +DlgOpOther : "<ផ្សេងទៅត>", +DlgInfoTab : "ពត៌មាន", +DlgAlertUrl : "សូមសរសេរ URL", + +// General Dialogs Labels +DlgGenNotSet : "<មិនមែន>", +DlgGenId : "Id", +DlgGenLangDir : "ទិសដៅភាសា", +DlgGenLangDirLtr : "ពីឆ្វេងទៅស្តាំ(LTR)", +DlgGenLangDirRtl : "ពីស្តាំទៅឆ្វេង(RTL)", +DlgGenLangCode : "លេខកូតភាសា", +DlgGenAccessKey : "ឃី សំរាប់ចូល", +DlgGenName : "ឈ្មោះ", +DlgGenTabIndex : "លេខ Tab", +DlgGenLongDescr : "អធិប្បាយ URL វែង", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "ចំណងជើង ប្រឹក្សា", +DlgGenContType : "ប្រភេទអត្ថបទ ប្រឹក្សា", +DlgGenLinkCharset : "លេខកូតអក្សររបស់ឈ្នាប់", +DlgGenStyle : "ម៉ូត", + +// Image Dialog +DlgImgTitle : "ការកំណត់រូបភាព", +DlgImgInfoTab : "ពត៌មានអំពីរូបភាព", +DlgImgBtnUpload : "បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា", +DlgImgURL : "URL", +DlgImgUpload : "ទាញយក", +DlgImgAlt : "អត្ថបទជំនួស", +DlgImgWidth : "ទទឹង", +DlgImgHeight : "កំពស់", +DlgImgLockRatio : "អត្រាឡុក", +DlgBtnResetSize : "កំណត់ទំហំឡើងវិញ", +DlgImgBorder : "ស៊ុម", +DlgImgHSpace : "គំលាតទទឹង", +DlgImgVSpace : "គំលាតបណ្តោយ", +DlgImgAlign : "កំណត់ទីតាំង", +DlgImgAlignLeft : "ខាងឆ្វង", +DlgImgAlignAbsBottom: "Abs Bottom", //MISSING +DlgImgAlignAbsMiddle: "Abs Middle", //MISSING +DlgImgAlignBaseline : "បន្ទាត់ជាមូលដ្ឋាន", +DlgImgAlignBottom : "ខាងក្រោម", +DlgImgAlignMiddle : "កណ្តាល", +DlgImgAlignRight : "ខាងស្តាំ", +DlgImgAlignTextTop : "លើអត្ថបទ", +DlgImgAlignTop : "ខាងលើ", +DlgImgPreview : "មើលសាកល្បង", +DlgImgAlertUrl : "សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព", +DlgImgLinkTab : "ឈ្នាប់", + +// Flash Dialog +DlgFlashTitle : "ការកំណត់ Flash", +DlgFlashChkPlay : "លេងដោយស្វ័យប្រវត្ត", +DlgFlashChkLoop : "ចំនួនដង", +DlgFlashChkMenu : "បង្ហាញ មឺនុយរបស់ Flash", +DlgFlashScale : "ទំហំ", +DlgFlashScaleAll : "បង្ហាញទាំងអស់", +DlgFlashScaleNoBorder : "មិនបង្ហាញស៊ុម", +DlgFlashScaleFit : "ត្រូវល្មម", + +// Link Dialog +DlgLnkWindowTitle : "ឈ្នាប់", +DlgLnkInfoTab : "ពត៌មានអំពីឈ្នាប់", +DlgLnkTargetTab : "គោលដៅ", + +DlgLnkType : "ប្រភេទឈ្នាប់", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "យុថ្កានៅក្នុងទំព័រនេះ", +DlgLnkTypeEMail : "អ៊ីមែល", +DlgLnkProto : "ប្រូតូកូល", +DlgLnkProtoOther : "<ផ្សេងទៀត>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "ជ្រើសរើសយុថ្កា", +DlgLnkAnchorByName : "តាមឈ្មោះរបស់យុថ្កា", +DlgLnkAnchorById : "តាម Id", +DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING +DlgLnkEMail : "អ៊ីមែល", +DlgLnkEMailSubject : "ចំណងជើងអត្ថបទ", +DlgLnkEMailBody : "អត្ថបទ", +DlgLnkUpload : "ទាញយក", +DlgLnkBtnUpload : "ទាញយក", + +DlgLnkTarget : "គោលដៅ", +DlgLnkTargetFrame : "<ហ្វ្រេម>", +DlgLnkTargetPopup : "<វីនដូវ លោត>", +DlgLnkTargetBlank : "វីនដូវថ្មី (_blank)", +DlgLnkTargetParent : "វីនដូវមេ (_parent)", +DlgLnkTargetSelf : "វីនដូវដដែល (_self)", +DlgLnkTargetTop : "វីនដូវនៅលើគេ(_top)", +DlgLnkTargetFrameName : "ឈ្មោះហ្រ្វេមដែលជាគោលដៅ", +DlgLnkPopWinName : "ឈ្មោះវីនដូវលោត", +DlgLnkPopWinFeat : "លក្ខណះរបស់វីនដូលលោត", +DlgLnkPopResize : "ទំហំអាចផ្លាស់ប្តូរ", +DlgLnkPopLocation : "របា ទីតាំង", +DlgLnkPopMenu : "របា មឺនុយ", +DlgLnkPopScroll : "របា ទាញ", +DlgLnkPopStatus : "របា ពត៌មាន", +DlgLnkPopToolbar : "របា ឩបករណ៍", +DlgLnkPopFullScrn : "អេក្រុងពេញ(IE)", +DlgLnkPopDependent : "អាស្រ័យលើ (Netscape)", +DlgLnkPopWidth : "ទទឹង", +DlgLnkPopHeight : "កំពស់", +DlgLnkPopLeft : "ទីតាំងខាងឆ្វេង", +DlgLnkPopTop : "ទីតាំងខាងលើ", + +DlnLnkMsgNoUrl : "សូមសរសេរ អាស័យដ្ឋាន URL", +DlnLnkMsgNoEMail : "សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល", +DlnLnkMsgNoAnchor : "សូមជ្រើសរើស យុថ្កា", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "ជ្រើសរើស ពណ៌", +DlgColorBtnClear : "លប់", +DlgColorHighlight : "ផាត់ពណ៌", +DlgColorSelected : "បានជ្រើសរើស", + +// Smiley Dialog +DlgSmileyTitle : "បញ្ជូលរូបភាព", + +// Special Character Dialog +DlgSpecialCharTitle : "តូអក្សរពិសេស", + +// Table Dialog +DlgTableTitle : "ការកំណត់ តារាង", +DlgTableRows : "ជួរផ្តេក", +DlgTableColumns : "ជួរឈរ", +DlgTableBorder : "ទំហំស៊ុម", +DlgTableAlign : "ការកំណត់ទីតាំង", +DlgTableAlignNotSet : "<មិនកំណត់>", +DlgTableAlignLeft : "ខាងឆ្វេង", +DlgTableAlignCenter : "កណ្តាល", +DlgTableAlignRight : "ខាងស្តាំ", +DlgTableWidth : "ទទឹង", +DlgTableWidthPx : "ភីកសែល", +DlgTableWidthPc : "ភាគរយ", +DlgTableHeight : "កំពស់", +DlgTableCellSpace : "គំលាតសែល", +DlgTableCellPad : "គែមសែល", +DlgTableCaption : "ចំណងជើង", +DlgTableSummary : "សេចក្តីសង្ខេប", + +// Table Cell Dialog +DlgCellTitle : "ការកំណត់ សែល", +DlgCellWidth : "ទទឹង", +DlgCellWidthPx : "ភីកសែល", +DlgCellWidthPc : "ភាគរយ", +DlgCellHeight : "កំពស់", +DlgCellWordWrap : "បង្ហាញអត្ថបទទាំងអស់", +DlgCellWordWrapNotSet : "<មិនកំណត់>", +DlgCellWordWrapYes : "បាទ(ចា)", +DlgCellWordWrapNo : "ទេ", +DlgCellHorAlign : "តំរឹមផ្តេក", +DlgCellHorAlignNotSet : "<មិនកំណត់>", +DlgCellHorAlignLeft : "ខាងឆ្វេង", +DlgCellHorAlignCenter : "កណ្តាល", +DlgCellHorAlignRight: "Right", //MISSING +DlgCellVerAlign : "តំរឹមឈរ", +DlgCellVerAlignNotSet : "<មិនកណត់>", +DlgCellVerAlignTop : "ខាងលើ", +DlgCellVerAlignMiddle : "កណ្តាល", +DlgCellVerAlignBottom : "ខាងក្រោម", +DlgCellVerAlignBaseline : "បន្ទាត់ជាមូលដ្ឋាន", +DlgCellRowSpan : "បញ្ជូលជួរផ្តេក", +DlgCellCollSpan : "បញ្ជូលជួរឈរ", +DlgCellBackColor : "ពណ៌ផ្នែកខាងក្រោម", +DlgCellBorderColor : "ពណ៌ស៊ុម", +DlgCellBtnSelect : "ជ្រើសរើស...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "ស្វែងរក", +DlgFindFindBtn : "ស្វែងរក", +DlgFindNotFoundMsg : "ពាក្យនេះ រកមិនឃើញទេ ។", + +// Replace Dialog +DlgReplaceTitle : "ជំនួស", +DlgReplaceFindLbl : "ស្វែងរកអ្វី:", +DlgReplaceReplaceLbl : "ជំនួសជាមួយ:", +DlgReplaceCaseChk : "ករណ៉ត្រូវរក", +DlgReplaceReplaceBtn : "ជំនួស", +DlgReplaceReplAllBtn : "ជំនួសទាំងអស់", +DlgReplaceWordChk : "ត្រូវពាក្យទាំងអស់", + +// Paste Operations / Dialog +PasteErrorCut : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+X) ។", +PasteErrorCopy : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។", + +PasteAsText : "ចំលងដាក់អត្ថបទធម្មតា", +PasteFromWord : "ចំលងពាក្យពីកម្មវិធី Word", + +DlgPasteMsg2 : "សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(Ctrl+V) ហើយចុច OK ។", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "មិនគិតអំពីប្រភេទពុម្ភអក្សរ", +DlgPasteRemoveStyles : "លប់ម៉ូត", + +// Color Picker +ColorAutomatic : "ស្វ័យប្រវត្ត", +ColorMoreColors : "ពណ៌ផ្សេងទៀត..", + +// Document Properties +DocProps : "ការកំណត់ ឯកសារ", + +// Anchor Dialog +DlgAnchorTitle : "ការកំណត់ចំណងជើងយុទ្ធថ្កា", +DlgAnchorName : "ឈ្មោះយុទ្ធថ្កា", +DlgAnchorErrorName : "សូមសរសេរ ឈ្មោះយុទ្ធថ្កា", + +// Speller Pages Dialog +DlgSpellNotInDic : "គ្មានក្នុងវចនានុក្រម", +DlgSpellChangeTo : "ផ្លាស់ប្តូរទៅ", +DlgSpellBtnIgnore : "មិនផ្លាស់ប្តូរ", +DlgSpellBtnIgnoreAll : "មិនផ្លាស់ប្តូរ ទាំងអស់", +DlgSpellBtnReplace : "ជំនួស", +DlgSpellBtnReplaceAll : "ជំនួសទាំងអស់", +DlgSpellBtnUndo : "សារឡើងវិញ", +DlgSpellNoSuggestions : "- គ្មានសំណើរ -", +DlgSpellProgress : "កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...", +DlgSpellNoMispell : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស", +DlgSpellNoChanges : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ", +DlgSpellOneChange : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ", +DlgSpellManyChanges : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ", + +IeSpellDownload : "ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?", + +// Button Dialog +DlgButtonText : "អត្ថបទ(តំលៃ)", +DlgButtonType : "ប្រភេទ", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "ឈ្មោះ", +DlgCheckboxValue : "តំលៃ", +DlgCheckboxSelected : "បានជ្រើសរើស", + +// Form Dialog +DlgFormName : "ឈ្មោះ", +DlgFormAction : "សកម្មភាព", +DlgFormMethod : "វិធី", + +// Select Field Dialog +DlgSelectName : "ឈ្មោះ", +DlgSelectValue : "តំលៃ", +DlgSelectSize : "ទំហំ", +DlgSelectLines : "បន្ទាត់", +DlgSelectChkMulti : "អនុញ្ញាតអោយជ្រើសរើសច្រើន", +DlgSelectOpAvail : "ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន", +DlgSelectOpText : "ពាក្យ", +DlgSelectOpValue : "តំលៃ", +DlgSelectBtnAdd : "បន្ថែម", +DlgSelectBtnModify : "ផ្លាស់ប្តូរ", +DlgSelectBtnUp : "លើ", +DlgSelectBtnDown : "ក្រោម", +DlgSelectBtnSetValue : "Set as selected value", //MISSING +DlgSelectBtnDelete : "លប់", + +// Textarea Dialog +DlgTextareaName : "ឈ្មោះ", +DlgTextareaCols : "ជូរឈរ", +DlgTextareaRows : "ជូរផ្តេក", + +// Text Field Dialog +DlgTextName : "ឈ្មោះ", +DlgTextValue : "តំលៃ", +DlgTextCharWidth : "ទទឹង អក្សរ", +DlgTextMaxChars : "អក្សរអតិបរិមា", +DlgTextType : "ប្រភេទ", +DlgTextTypeText : "ពាក្យ", +DlgTextTypePass : "ពាក្យសំងាត់", + +// Hidden Field Dialog +DlgHiddenName : "ឈ្មោះ", +DlgHiddenValue : "តំលៃ", + +// Bulleted List Dialog +BulletedListProp : "កំណត់បញ្ជីរង្វង់", +NumberedListProp : "កំណត់បញ្េជីលេខ", +DlgLstStart : "Start", //MISSING +DlgLstType : "ប្រភេទ", +DlgLstTypeCircle : "រង្វង់", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "ការេ", +DlgLstTypeNumbers : "លេខ(1, 2, 3)", +DlgLstTypeLCase : "អក្សរតូច(a, b, c)", +DlgLstTypeUCase : "អក្សរធំ(A, B, C)", +DlgLstTypeSRoman : "អក្សរឡាតាំងតូច(i, ii, iii)", +DlgLstTypeLRoman : "អក្សរឡាតាំងធំ(I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "ទូទៅ", +DlgDocBackTab : "ផ្នែកខាងក្រោយ", +DlgDocColorsTab : "ទំព័រ​និង ស៊ុម", +DlgDocMetaTab : "ទិន្នន័យមេ", + +DlgDocPageTitle : "ចំណងជើងទំព័រ", +DlgDocLangDir : "ទិសដៅសរសេរភាសា", +DlgDocLangDirLTR : "ពីឆ្វេងទៅស្ដាំ(LTR)", +DlgDocLangDirRTL : "ពីស្ដាំទៅឆ្វេង(RTL)", +DlgDocLangCode : "លេខកូតភាសា", +DlgDocCharSet : "កំណត់លេខកូតភាសា", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "កំណត់លេខកូតភាសាផ្សេងទៀត", + +DlgDocDocType : "ប្រភេទក្បាលទំព័រ", +DlgDocDocTypeOther : "ប្រភេទក្បាលទំព័រផ្សេងទៀត", +DlgDocIncXHTML : "បញ្ជូល XHTML", +DlgDocBgColor : "ពណ៌ខាងក្រោម", +DlgDocBgImage : "URL របស់រូបភាពខាងក្រោម", +DlgDocBgNoScroll : "ទំព័រក្រោមមិនប្តូរ", +DlgDocCText : "អត្តបទ", +DlgDocCLink : "ឈ្នាប់", +DlgDocCVisited : "ឈ្នាប់មើលហើយ", +DlgDocCActive : "ឈ្នាប់កំពុងមើល", +DlgDocMargins : "ស៊ុមទំព័រ", +DlgDocMaTop : "លើ", +DlgDocMaLeft : "ឆ្វេង", +DlgDocMaRight : "ស្ដាំ", +DlgDocMaBottom : "ក្រោម", +DlgDocMeIndex : "ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)", +DlgDocMeDescr : "សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ", +DlgDocMeAuthor : "អ្នកនិពន្ធ", +DlgDocMeCopy : "រក្សាសិទ្ធិ៏", +DlgDocPreview : "មើលសាកល្បង", + +// Templates Dialog +Templates : "ឯកសារគំរូ", +DlgTemplatesTitle : "ឯកសារគំរូ របស់អត្ថន័យ", +DlgTemplatesSelMsg : "សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ
        (អត្ថបទនឹងបាត់បង់):", +DlgTemplatesLoading : "កំពុងអានបញ្ជីឯកសារគំរូ ។ សូមរងចាំ...", +DlgTemplatesNoTpl : "(ពុំមានឯកសារគំរូត្រូវបានកំណត់)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "អំពី", +DlgAboutBrowserInfoTab : "ព៌តមានកម្មវិធីរុករក", +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "ជំនាន់", +DlgAboutInfo : "សំរាប់ព៌តមានផ្សេងទៀត សូមទាក់ទង" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/ko.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ko.js new file mode 100644 index 0000000..d37240f --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/ko.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Korean language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "툴바 감추기", +ToolbarExpand : "툴바 보이기", + +// Toolbar Items and Context Menu +Save : "저장하기", +NewPage : "새 문서", +Preview : "미리보기", +Cut : "잘라내기", +Copy : "복사하기", +Paste : "붙여넣기", +PasteText : "텍스트로 붙여넣기", +PasteWord : "MS Word 형식에서 붙여넣기", +Print : "인쇄하기", +SelectAll : "전체선택", +RemoveFormat : "포맷 지우기", +InsertLinkLbl : "링크", +InsertLink : "링크 삽입/변경", +RemoveLink : "링크 삭제", +Anchor : "책갈피 삽입/변경", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "이미지", +InsertImage : "이미지 삽입/변경", +InsertFlashLbl : "플래쉬", +InsertFlash : "플래쉬 삽입/변경", +InsertTableLbl : "표", +InsertTable : "표 삽입/변경", +InsertLineLbl : "수평선", +InsertLine : "수평선 삽입", +InsertSpecialCharLbl: "특수문자 삽입", +InsertSpecialChar : "특수문자 삽입", +InsertSmileyLbl : "아이콘", +InsertSmiley : "아이콘 삽입", +About : "FCKeditor에 대하여", +Bold : "진하게", +Italic : "이텔릭", +Underline : "밑줄", +StrikeThrough : "취소선", +Subscript : "아래 첨자", +Superscript : "위 첨자", +LeftJustify : "왼쪽 정렬", +CenterJustify : "가운데 정렬", +RightJustify : "오른쪽 정렬", +BlockJustify : "양쪽 맞춤", +DecreaseIndent : "내어쓰기", +IncreaseIndent : "들여쓰기", +Blockquote : "Blockquote", //MISSING +Undo : "취소", +Redo : "재실행", +NumberedListLbl : "순서있는 목록", +NumberedList : "순서있는 목록", +BulletedListLbl : "순서없는 목록", +BulletedList : "순서없는 목록", +ShowTableBorders : "표 테두리 보기", +ShowDetails : "문서기호 보기", +Style : "스타일", +FontFormat : "포맷", +Font : "폰트", +FontSize : "글자 크기", +TextColor : "글자 색상", +BGColor : "배경 색상", +Source : "소스", +Find : "찾기", +Replace : "바꾸기", +SpellCheck : "철자검사", +UniversalKeyboard : "다국어 입력기", +PageBreakLbl : "Page Break", //MISSING +PageBreak : "Insert Page Break", //MISSING + +Form : "폼", +Checkbox : "체크박스", +RadioButton : "라디오버튼", +TextField : "입력필드", +Textarea : "입력영역", +HiddenField : "숨김필드", +Button : "버튼", +SelectionField : "펼침목록", +ImageButton : "이미지버튼", + +FitWindow : "에디터 최대화", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "링크 수정", +CellCM : "셀/칸(Cell)", +RowCM : "행(Row)", +ColumnCM : "열(Column)", +InsertRowAfter : "뒤에 행 삽입", +InsertRowBefore : "앞에 행 삽입", +DeleteRows : "가로줄 삭제", +InsertColumnAfter : "뒤에 열 삽입", +InsertColumnBefore : "앞에 열 삽입", +DeleteColumns : "세로줄 삭제", +InsertCellAfter : "뒤에 셀/칸 삽입", +InsertCellBefore : "앞에 셀/칸 삽입", +DeleteCells : "셀 삭제", +MergeCells : "셀 합치기", +MergeRight : "오른쪽 뭉치기", +MergeDown : "왼쪽 뭉치기", +HorizontalSplitCell : "수평 나누기", +VerticalSplitCell : "수직 나누기", +TableDelete : "표 삭제", +CellProperties : "셀 속성", +TableProperties : "표 속성", +ImageProperties : "이미지 속성", +FlashProperties : "플래쉬 속성", + +AnchorProp : "책갈피 속성", +ButtonProp : "버튼 속성", +CheckboxProp : "체크박스 속성", +HiddenFieldProp : "숨김필드 속성", +RadioButtonProp : "라디오버튼 속성", +ImageButtonProp : "이미지버튼 속성", +TextFieldProp : "입력필드 속성", +SelectionFieldProp : "펼침목록 속성", +TextareaProp : "입력영역 속성", +FormProp : "폼 속성", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", + +// Alerts and Messages +ProcessingXHTML : "XHTML 처리중. 잠시만 기다려주십시요.", +Done : "완료", +PasteWordConfirm : "붙여넣기 할 텍스트는 MS Word에서 복사한 것입니다. 붙여넣기 전에 MS Word 포멧을 삭제하시겠습니까?", +NotCompatiblePaste : "이 명령은 인터넷익스플로러 5.5 버전 이상에서만 작동합니다. 포멧을 삭제하지 않고 붙여넣기 하시겠습니까?", +UnknownToolbarItem : "알수없는 툴바입니다. : \"%1\"", +UnknownCommand : "알수없는 기능입니다. : \"%1\"", +NotImplemented : "기능이 실행되지 않았습니다.", +UnknownToolbarSet : "툴바 설정이 없습니다. : \"%1\"", +NoActiveX : "브러우저의 보안 설정으로 인해 몇몇 기능의 작동에 장애가 있을 수 있습니다. \"액티브-액스 기능과 플러그 인\" 옵션을 허용하여 주시지 않으면 오류가 발생할 수 있습니다.", +BrowseServerBlocked : "브러우저 요소가 열리지 않습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.", +DialogBlocked : "윈도우 대화창을 열 수 없습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.", + +// Dialogs +DlgBtnOK : "예", +DlgBtnCancel : "아니오", +DlgBtnClose : "닫기", +DlgBtnBrowseServer : "서버 보기", +DlgAdvancedTag : "자세히", +DlgOpOther : "<기타>", +DlgInfoTab : "정보", +DlgAlertUrl : "URL을 입력하십시요", + +// General Dialogs Labels +DlgGenNotSet : "<설정되지 않음>", +DlgGenId : "ID", +DlgGenLangDir : "쓰기 방향", +DlgGenLangDirLtr : "왼쪽에서 오른쪽 (LTR)", +DlgGenLangDirRtl : "오른쪽에서 왼쪽 (RTL)", +DlgGenLangCode : "언어 코드", +DlgGenAccessKey : "엑세스 키", +DlgGenName : "Name", +DlgGenTabIndex : "탭 순서", +DlgGenLongDescr : "URL 설명", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "이미지 설정", +DlgImgInfoTab : "이미지 정보", +DlgImgBtnUpload : "서버로 전송", +DlgImgURL : "URL", +DlgImgUpload : "업로드", +DlgImgAlt : "이미지 설명", +DlgImgWidth : "너비", +DlgImgHeight : "높이", +DlgImgLockRatio : "비율 유지", +DlgBtnResetSize : "원래 크기로", +DlgImgBorder : "테두리", +DlgImgHSpace : "수평여백", +DlgImgVSpace : "수직여백", +DlgImgAlign : "정렬", +DlgImgAlignLeft : "왼쪽", +DlgImgAlignAbsBottom: "줄아래(Abs Bottom)", +DlgImgAlignAbsMiddle: "줄중간(Abs Middle)", +DlgImgAlignBaseline : "기준선", +DlgImgAlignBottom : "아래", +DlgImgAlignMiddle : "중간", +DlgImgAlignRight : "오른쪽", +DlgImgAlignTextTop : "글자상단", +DlgImgAlignTop : "위", +DlgImgPreview : "미리보기", +DlgImgAlertUrl : "이미지 URL을 입력하십시요", +DlgImgLinkTab : "링크", + +// Flash Dialog +DlgFlashTitle : "플래쉬 등록정보", +DlgFlashChkPlay : "자동재생", +DlgFlashChkLoop : "반복", +DlgFlashChkMenu : "플래쉬메뉴 가능", +DlgFlashScale : "영역", +DlgFlashScaleAll : "모두보기", +DlgFlashScaleNoBorder : "경계선없음", +DlgFlashScaleFit : "영역자동조절", + +// Link Dialog +DlgLnkWindowTitle : "링크", +DlgLnkInfoTab : "링크 정보", +DlgLnkTargetTab : "타겟", + +DlgLnkType : "링크 종류", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "책갈피", +DlgLnkTypeEMail : "이메일", +DlgLnkProto : "프로토콜", +DlgLnkProtoOther : "<기타>", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "책갈피 선택", +DlgLnkAnchorByName : "책갈피 이름", +DlgLnkAnchorById : "책갈피 ID", +DlgLnkNoAnchors : "(문서에 책갈피가 없습니다.)", +DlgLnkEMail : "이메일 주소", +DlgLnkEMailSubject : "제목", +DlgLnkEMailBody : "내용", +DlgLnkUpload : "업로드", +DlgLnkBtnUpload : "서버로 전송", + +DlgLnkTarget : "타겟", +DlgLnkTargetFrame : "<프레임>", +DlgLnkTargetPopup : "<팝업창>", +DlgLnkTargetBlank : "새 창 (_blank)", +DlgLnkTargetParent : "부모 창 (_parent)", +DlgLnkTargetSelf : "현재 창 (_self)", +DlgLnkTargetTop : "최 상위 창 (_top)", +DlgLnkTargetFrameName : "타겟 프레임 이름", +DlgLnkPopWinName : "팝업창 이름", +DlgLnkPopWinFeat : "팝업창 설정", +DlgLnkPopResize : "크기조정", +DlgLnkPopLocation : "주소표시줄", +DlgLnkPopMenu : "메뉴바", +DlgLnkPopScroll : "스크롤바", +DlgLnkPopStatus : "상태바", +DlgLnkPopToolbar : "툴바", +DlgLnkPopFullScrn : "전체화면 (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "너비", +DlgLnkPopHeight : "높이", +DlgLnkPopLeft : "왼쪽 위치", +DlgLnkPopTop : "윗쪽 위치", + +DlnLnkMsgNoUrl : "링크 URL을 입력하십시요.", +DlnLnkMsgNoEMail : "이메일주소를 입력하십시요.", +DlnLnkMsgNoAnchor : "책갈피명을 입력하십시요.", +DlnLnkMsgInvPopName : "팝업창의 타이틀은 공백을 허용하지 않습니다.", + +// Color Dialog +DlgColorTitle : "색상 선택", +DlgColorBtnClear : "지우기", +DlgColorHighlight : "현재", +DlgColorSelected : "선택됨", + +// Smiley Dialog +DlgSmileyTitle : "아이콘 삽입", + +// Special Character Dialog +DlgSpecialCharTitle : "특수문자 선택", + +// Table Dialog +DlgTableTitle : "표 설정", +DlgTableRows : "가로줄", +DlgTableColumns : "세로줄", +DlgTableBorder : "테두리 크기", +DlgTableAlign : "정렬", +DlgTableAlignNotSet : "<설정되지 않음>", +DlgTableAlignLeft : "왼쪽", +DlgTableAlignCenter : "가운데", +DlgTableAlignRight : "오른쪽", +DlgTableWidth : "너비", +DlgTableWidthPx : "픽셀", +DlgTableWidthPc : "퍼센트", +DlgTableHeight : "높이", +DlgTableCellSpace : "셀 간격", +DlgTableCellPad : "셀 여백", +DlgTableCaption : "캡션", +DlgTableSummary : "Summary", //MISSING + +// Table Cell Dialog +DlgCellTitle : "셀 설정", +DlgCellWidth : "너비", +DlgCellWidthPx : "픽셀", +DlgCellWidthPc : "퍼센트", +DlgCellHeight : "높이", +DlgCellWordWrap : "워드랩", +DlgCellWordWrapNotSet : "<설정되지 않음>", +DlgCellWordWrapYes : "예", +DlgCellWordWrapNo : "아니오", +DlgCellHorAlign : "수평 정렬", +DlgCellHorAlignNotSet : "<설정되지 않음>", +DlgCellHorAlignLeft : "왼쪽", +DlgCellHorAlignCenter : "가운데", +DlgCellHorAlignRight: "오른쪽", +DlgCellVerAlign : "수직 정렬", +DlgCellVerAlignNotSet : "<설정되지 않음>", +DlgCellVerAlignTop : "위", +DlgCellVerAlignMiddle : "중간", +DlgCellVerAlignBottom : "아래", +DlgCellVerAlignBaseline : "기준선", +DlgCellRowSpan : "세로 합치기", +DlgCellCollSpan : "가로 합치기", +DlgCellBackColor : "배경 색상", +DlgCellBorderColor : "테두리 색상", +DlgCellBtnSelect : "선택", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "찾기 & 바꾸기", + +// Find Dialog +DlgFindTitle : "찾기", +DlgFindFindBtn : "찾기", +DlgFindNotFoundMsg : "문자열을 찾을 수 없습니다.", + +// Replace Dialog +DlgReplaceTitle : "바꾸기", +DlgReplaceFindLbl : "찾을 문자열:", +DlgReplaceReplaceLbl : "바꿀 문자열:", +DlgReplaceCaseChk : "대소문자 구분", +DlgReplaceReplaceBtn : "바꾸기", +DlgReplaceReplAllBtn : "모두 바꾸기", +DlgReplaceWordChk : "온전한 단어", + +// Paste Operations / Dialog +PasteErrorCut : "브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).", +PasteErrorCopy : "브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+C).", + +PasteAsText : "텍스트로 붙여넣기", +PasteFromWord : "MS Word 형식에서 붙여넣기", + +DlgPasteMsg2 : "키보드의 (Ctrl+V) 를 이용해서 상자안에 붙여넣고 OK 를 누르세요.", +DlgPasteSec : "브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.", +DlgPasteIgnoreFont : "폰트 설정 무시", +DlgPasteRemoveStyles : "스타일 정의 제거", + +// Color Picker +ColorAutomatic : "기본색상", +ColorMoreColors : "색상선택...", + +// Document Properties +DocProps : "문서 속성", + +// Anchor Dialog +DlgAnchorTitle : "책갈피 속성", +DlgAnchorName : "책갈피 이름", +DlgAnchorErrorName : "책갈피 이름을 입력하십시요.", + +// Speller Pages Dialog +DlgSpellNotInDic : "사전에 없는 단어", +DlgSpellChangeTo : "변경할 단어", +DlgSpellBtnIgnore : "건너뜀", +DlgSpellBtnIgnoreAll : "모두 건너뜀", +DlgSpellBtnReplace : "변경", +DlgSpellBtnReplaceAll : "모두 변경", +DlgSpellBtnUndo : "취소", +DlgSpellNoSuggestions : "- 추천단어 없음 -", +DlgSpellProgress : "철자검사를 진행중입니다...", +DlgSpellNoMispell : "철자검사 완료: 잘못된 철자가 없습니다.", +DlgSpellNoChanges : "철자검사 완료: 변경된 단어가 없습니다.", +DlgSpellOneChange : "철자검사 완료: 단어가 변경되었습니다.", +DlgSpellManyChanges : "철자검사 완료: %1 단어가 변경되었습니다.", + +IeSpellDownload : "철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?", + +// Button Dialog +DlgButtonText : "버튼글자(값)", +DlgButtonType : "버튼종류", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "이름", +DlgCheckboxValue : "값", +DlgCheckboxSelected : "선택됨", + +// Form Dialog +DlgFormName : "폼이름", +DlgFormAction : "실행경로(Action)", +DlgFormMethod : "방법(Method)", + +// Select Field Dialog +DlgSelectName : "이름", +DlgSelectValue : "값", +DlgSelectSize : "세로크기", +DlgSelectLines : "줄", +DlgSelectChkMulti : "여러항목 선택 허용", +DlgSelectOpAvail : "선택옵션", +DlgSelectOpText : "이름", +DlgSelectOpValue : "값", +DlgSelectBtnAdd : "추가", +DlgSelectBtnModify : "변경", +DlgSelectBtnUp : "위로", +DlgSelectBtnDown : "아래로", +DlgSelectBtnSetValue : "선택된것으로 설정", +DlgSelectBtnDelete : "삭제", + +// Textarea Dialog +DlgTextareaName : "이름", +DlgTextareaCols : "칸수", +DlgTextareaRows : "줄수", + +// Text Field Dialog +DlgTextName : "이름", +DlgTextValue : "값", +DlgTextCharWidth : "글자 너비", +DlgTextMaxChars : "최대 글자수", +DlgTextType : "종류", +DlgTextTypeText : "문자열", +DlgTextTypePass : "비밀번호", + +// Hidden Field Dialog +DlgHiddenName : "이름", +DlgHiddenValue : "값", + +// Bulleted List Dialog +BulletedListProp : "순서없는 목록 속성", +NumberedListProp : "순서있는 목록 속성", +DlgLstStart : "Start", //MISSING +DlgLstType : "종류", +DlgLstTypeCircle : "원(Circle)", +DlgLstTypeDisc : "Disc", //MISSING +DlgLstTypeSquare : "네모점(Square)", +DlgLstTypeNumbers : "번호 (1, 2, 3)", +DlgLstTypeLCase : "소문자 (a, b, c)", +DlgLstTypeUCase : "대문자 (A, B, C)", +DlgLstTypeSRoman : "로마자 수문자 (i, ii, iii)", +DlgLstTypeLRoman : "로마자 대문자 (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "일반", +DlgDocBackTab : "배경", +DlgDocColorsTab : "색상 및 여백", +DlgDocMetaTab : "메타데이터", + +DlgDocPageTitle : "페이지명", +DlgDocLangDir : "문자 쓰기방향", +DlgDocLangDirLTR : "왼쪽에서 오른쪽 (LTR)", +DlgDocLangDirRTL : "오른쪽에서 왼쪽 (RTL)", +DlgDocLangCode : "언어코드", +DlgDocCharSet : "캐릭터셋 인코딩", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "다른 캐릭터셋 인코딩", + +DlgDocDocType : "문서 헤드", +DlgDocDocTypeOther : "다른 문서헤드", +DlgDocIncXHTML : "XHTML 문서정의 포함", +DlgDocBgColor : "배경색상", +DlgDocBgImage : "배경이미지 URL", +DlgDocBgNoScroll : "스크롤되지않는 배경", +DlgDocCText : "텍스트", +DlgDocCLink : "링크", +DlgDocCVisited : "방문한 링크(Visited)", +DlgDocCActive : "활성화된 링크(Active)", +DlgDocMargins : "페이지 여백", +DlgDocMaTop : "위", +DlgDocMaLeft : "왼쪽", +DlgDocMaRight : "오른쪽", +DlgDocMaBottom : "아래", +DlgDocMeIndex : "문서 키워드 (콤마로 구분)", +DlgDocMeDescr : "문서 설명", +DlgDocMeAuthor : "작성자", +DlgDocMeCopy : "저작권", +DlgDocPreview : "미리보기", + +// Templates Dialog +Templates : "템플릿", +DlgTemplatesTitle : "내용 템플릿", +DlgTemplatesSelMsg : "에디터에서 사용할 템플릿을 선택하십시요.
        (지금까지 작성된 내용은 사라집니다.):", +DlgTemplatesLoading : "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.", +DlgTemplatesNoTpl : "(템플릿이 없습니다.)", +DlgTemplatesReplace : "현재 내용 바꾸기", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "브라우저 정보", +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "버전", +DlgAboutInfo : "더 많은 정보를 보시려면 다음 사이트로 가십시오." +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/lt.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/lt.js new file mode 100644 index 0000000..1ca6931 --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/lt.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Lithuanian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Sutraukti mygtukų juostą", +ToolbarExpand : "Išplėsti mygtukų juostą", + +// Toolbar Items and Context Menu +Save : "Išsaugoti", +NewPage : "Naujas puslapis", +Preview : "Peržiūra", +Cut : "Iškirpti", +Copy : "Kopijuoti", +Paste : "Įdėti", +PasteText : "Įdėti kaip gryną tekstą", +PasteWord : "Įdėti iš Word", +Print : "Spausdinti", +SelectAll : "Pažymėti viską", +RemoveFormat : "Panaikinti formatą", +InsertLinkLbl : "Nuoroda", +InsertLink : "Įterpti/taisyti nuorodą", +RemoveLink : "Panaikinti nuorodą", +Anchor : "Įterpti/modifikuoti žymę", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Vaizdas", +InsertImage : "Įterpti/taisyti vaizdą", +InsertFlashLbl : "Flash", +InsertFlash : "Įterpti/taisyti Flash", +InsertTableLbl : "Lentelė", +InsertTable : "Įterpti/taisyti lentelę", +InsertLineLbl : "Linija", +InsertLine : "Įterpti horizontalią liniją", +InsertSpecialCharLbl: "Spec. simbolis", +InsertSpecialChar : "Įterpti specialų simbolį", +InsertSmileyLbl : "Veideliai", +InsertSmiley : "Įterpti veidelį", +About : "Apie FCKeditor", +Bold : "Pusjuodis", +Italic : "Kursyvas", +Underline : "Pabrauktas", +StrikeThrough : "Perbrauktas", +Subscript : "Apatinis indeksas", +Superscript : "Viršutinis indeksas", +LeftJustify : "Lygiuoti kairę", +CenterJustify : "Centruoti", +RightJustify : "Lygiuoti dešinę", +BlockJustify : "Lygiuoti abi puses", +DecreaseIndent : "Sumažinti įtrauką", +IncreaseIndent : "Padidinti įtrauką", +Blockquote : "Blockquote", //MISSING +Undo : "Atšaukti", +Redo : "Atstatyti", +NumberedListLbl : "Numeruotas sąrašas", +NumberedList : "Įterpti/Panaikinti numeruotą sąrašą", +BulletedListLbl : "Suženklintas sąrašas", +BulletedList : "Įterpti/Panaikinti suženklintą sąrašą", +ShowTableBorders : "Rodyti lentelės rėmus", +ShowDetails : "Rodyti detales", +Style : "Stilius", +FontFormat : "Šrifto formatas", +Font : "Šriftas", +FontSize : "Šrifto dydis", +TextColor : "Teksto spalva", +BGColor : "Fono spalva", +Source : "Šaltinis", +Find : "Rasti", +Replace : "Pakeisti", +SpellCheck : "Rašybos tikrinimas", +UniversalKeyboard : "Universali klaviatūra", +PageBreakLbl : "Puslapių skirtukas", +PageBreak : "Įterpti puslapių skirtuką", + +Form : "Forma", +Checkbox : "Žymimasis langelis", +RadioButton : "Žymimoji akutė", +TextField : "Teksto laukas", +Textarea : "Teksto sritis", +HiddenField : "Nerodomas laukas", +Button : "Mygtukas", +SelectionField : "Atrankos laukas", +ImageButton : "Vaizdinis mygtukas", + +FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Taisyti nuorodą", +CellCM : "Cell", //MISSING +RowCM : "Row", //MISSING +ColumnCM : "Column", //MISSING +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Šalinti eilutes", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Šalinti stulpelius", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Šalinti langelius", +MergeCells : "Sujungti langelius", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Šalinti lentelę", +CellProperties : "Langelio savybės", +TableProperties : "Lentelės savybės", +ImageProperties : "Vaizdo savybės", +FlashProperties : "Flash savybės", + +AnchorProp : "Žymės savybės", +ButtonProp : "Mygtuko savybės", +CheckboxProp : "Žymimojo langelio savybės", +HiddenFieldProp : "Nerodomo lauko savybės", +RadioButtonProp : "Žymimosios akutės savybės", +ImageButtonProp : "Vaizdinio mygtuko savybės", +TextFieldProp : "Teksto lauko savybės", +SelectionFieldProp : "Atrankos lauko savybės", +TextareaProp : "Teksto srities savybės", +FormProp : "Formos savybės", + +FontFormats : "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6", + +// Alerts and Messages +ProcessingXHTML : "Apdorojamas XHTML. Prašome palaukti...", +Done : "Baigta", +PasteWordConfirm : "Įdedamas tekstas yra panašus į kopiją iš Word. Ar Jūs norite prieš įdėjimą išvalyti jį?", +NotCompatiblePaste : "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?", +UnknownToolbarItem : "Nežinomas mygtukų juosta elementas \"%1\"", +UnknownCommand : "Nežinomas komandos vardas \"%1\"", +NotImplemented : "Komanda nėra įgyvendinta", +UnknownToolbarSet : "Mygtukų juostos rinkinys \"%1\" neegzistuoja", +NoActiveX : "Jūsų naršyklės saugumo nuostatos gali riboti kai kurias redaktoriaus savybes. Jūs turite aktyvuoti opciją \"Run ActiveX controls and plug-ins\". Kitu atveju Jums bus pranešama apie klaidas ir trūkstamas savybes.", +BrowseServerBlocked : "Neįmanoma atidaryti naujo naršyklės lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.", +DialogBlocked : "Neįmanoma atidaryti dialogo lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Nutraukti", +DlgBtnClose : "Uždaryti", +DlgBtnBrowseServer : "Naršyti po serverį", +DlgAdvancedTag : "Papildomas", +DlgOpOther : "", +DlgInfoTab : "Informacija", +DlgAlertUrl : "Prašome įrašyti URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Teksto kryptis", +DlgGenLangDirLtr : "Iš kairės į dešinę (LTR)", +DlgGenLangDirRtl : "Iš dešinės į kairę (RTL)", +DlgGenLangCode : "Kalbos kodas", +DlgGenAccessKey : "Prieigos raktas", +DlgGenName : "Vardas", +DlgGenTabIndex : "Tabuliavimo indeksas", +DlgGenLongDescr : "Ilgas aprašymas URL", +DlgGenClass : "Stilių lentelės klasės", +DlgGenTitle : "Konsultacinė antraštė", +DlgGenContType : "Konsultacinio turinio tipas", +DlgGenLinkCharset : "Susietų išteklių simbolių lentelė", +DlgGenStyle : "Stilius", + +// Image Dialog +DlgImgTitle : "Vaizdo savybės", +DlgImgInfoTab : "Vaizdo informacija", +DlgImgBtnUpload : "Siųsti į serverį", +DlgImgURL : "URL", +DlgImgUpload : "Nusiųsti", +DlgImgAlt : "Alternatyvus Tekstas", +DlgImgWidth : "Plotis", +DlgImgHeight : "Aukštis", +DlgImgLockRatio : "Išlaikyti proporciją", +DlgBtnResetSize : "Atstatyti dydį", +DlgImgBorder : "Rėmelis", +DlgImgHSpace : "Hor.Erdvė", +DlgImgVSpace : "Vert.Erdvė", +DlgImgAlign : "Lygiuoti", +DlgImgAlignLeft : "Kairę", +DlgImgAlignAbsBottom: "Absoliučią apačią", +DlgImgAlignAbsMiddle: "Absoliutų vidurį", +DlgImgAlignBaseline : "Apatinę liniją", +DlgImgAlignBottom : "Apačią", +DlgImgAlignMiddle : "Vidurį", +DlgImgAlignRight : "Dešinę", +DlgImgAlignTextTop : "Teksto viršūnę", +DlgImgAlignTop : "Viršūnę", +DlgImgPreview : "Peržiūra", +DlgImgAlertUrl : "Prašome įvesti vaizdo URL", +DlgImgLinkTab : "Nuoroda", + +// Flash Dialog +DlgFlashTitle : "Flash savybės", +DlgFlashChkPlay : "Automatinis paleidimas", +DlgFlashChkLoop : "Ciklas", +DlgFlashChkMenu : "Leisti Flash meniu", +DlgFlashScale : "Mastelis", +DlgFlashScaleAll : "Rodyti visą", +DlgFlashScaleNoBorder : "Be rėmelio", +DlgFlashScaleFit : "Tikslus atitikimas", + +// Link Dialog +DlgLnkWindowTitle : "Nuoroda", +DlgLnkInfoTab : "Nuorodos informacija", +DlgLnkTargetTab : "Paskirtis", + +DlgLnkType : "Nuorodos tipas", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Žymė šiame puslapyje", +DlgLnkTypeEMail : "El.paštas", +DlgLnkProto : "Protokolas", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Pasirinkite žymę", +DlgLnkAnchorByName : "Pagal žymės vardą", +DlgLnkAnchorById : "Pagal žymės Id", +DlgLnkNoAnchors : "(Šiame dokumente žymių nėra)", +DlgLnkEMail : "El.pašto adresas", +DlgLnkEMailSubject : "Žinutės tema", +DlgLnkEMailBody : "Žinutės turinys", +DlgLnkUpload : "Siųsti", +DlgLnkBtnUpload : "Siųsti į serverį", + +DlgLnkTarget : "Paskirties vieta", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Naujas langas (_blank)", +DlgLnkTargetParent : "Pirminis langas (_parent)", +DlgLnkTargetSelf : "Tas pats langas (_self)", +DlgLnkTargetTop : "Svarbiausias langas (_top)", +DlgLnkTargetFrameName : "Paskirties kadro vardas", +DlgLnkPopWinName : "Paskirties lango vardas", +DlgLnkPopWinFeat : "Išskleidžiamo lango savybės", +DlgLnkPopResize : "Keičiamas dydis", +DlgLnkPopLocation : "Adreso juosta", +DlgLnkPopMenu : "Meniu juosta", +DlgLnkPopScroll : "Slinkties juostos", +DlgLnkPopStatus : "Būsenos juosta", +DlgLnkPopToolbar : "Mygtukų juosta", +DlgLnkPopFullScrn : "Visas ekranas (IE)", +DlgLnkPopDependent : "Priklausomas (Netscape)", +DlgLnkPopWidth : "Plotis", +DlgLnkPopHeight : "Aukštis", +DlgLnkPopLeft : "Kairė pozicija", +DlgLnkPopTop : "Viršutinė pozicija", + +DlnLnkMsgNoUrl : "Prašome įvesti nuorodos URL", +DlnLnkMsgNoEMail : "Prašome įvesti el.pašto adresą", +DlnLnkMsgNoAnchor : "Prašome pasirinkti žymę", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING + +// Color Dialog +DlgColorTitle : "Pasirinkite spalvą", +DlgColorBtnClear : "Trinti", +DlgColorHighlight : "Paryškinta", +DlgColorSelected : "Pažymėta", + +// Smiley Dialog +DlgSmileyTitle : "Įterpti veidelį", + +// Special Character Dialog +DlgSpecialCharTitle : "Pasirinkite specialų simbolį", + +// Table Dialog +DlgTableTitle : "Lentelės savybės", +DlgTableRows : "Eilutės", +DlgTableColumns : "Stulpeliai", +DlgTableBorder : "Rėmelio dydis", +DlgTableAlign : "Lygiuoti", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Kairę", +DlgTableAlignCenter : "Centrą", +DlgTableAlignRight : "Dešinę", +DlgTableWidth : "Plotis", +DlgTableWidthPx : "taškais", +DlgTableWidthPc : "procentais", +DlgTableHeight : "Aukštis", +DlgTableCellSpace : "Tarpas tarp langelių", +DlgTableCellPad : "Trapas nuo langelio rėmo iki teksto", +DlgTableCaption : "Antraštė", +DlgTableSummary : "Santrauka", + +// Table Cell Dialog +DlgCellTitle : "Langelio savybės", +DlgCellWidth : "Plotis", +DlgCellWidthPx : "taškais", +DlgCellWidthPc : "procentais", +DlgCellHeight : "Aukštis", +DlgCellWordWrap : "Teksto laužymas", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Taip", +DlgCellWordWrapNo : "Ne", +DlgCellHorAlign : "Horizontaliai lygiuoti", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Kairę", +DlgCellHorAlignCenter : "Centrą", +DlgCellHorAlignRight: "Dešinę", +DlgCellVerAlign : "Vertikaliai lygiuoti", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Viršų", +DlgCellVerAlignMiddle : "Vidurį", +DlgCellVerAlignBottom : "Apačią", +DlgCellVerAlignBaseline : "Apatinę liniją", +DlgCellRowSpan : "Eilučių apjungimas", +DlgCellCollSpan : "Stulpelių apjungimas", +DlgCellBackColor : "Fono spalva", +DlgCellBorderColor : "Rėmelio spalva", +DlgCellBtnSelect : "Pažymėti...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + +// Find Dialog +DlgFindTitle : "Paieška", +DlgFindFindBtn : "Surasti", +DlgFindNotFoundMsg : "Nurodytas tekstas nerastas.", + +// Replace Dialog +DlgReplaceTitle : "Pakeisti", +DlgReplaceFindLbl : "Surasti tekstą:", +DlgReplaceReplaceLbl : "Pakeisti tekstu:", +DlgReplaceCaseChk : "Skirti didžiąsias ir mažąsias raides", +DlgReplaceReplaceBtn : "Pakeisti", +DlgReplaceReplAllBtn : "Pakeisti viską", +DlgReplaceWordChk : "Atitikti pilną žodį", + +// Paste Operations / Dialog +PasteErrorCut : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).", +PasteErrorCopy : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).", + +PasteAsText : "Įdėti kaip gryną tekstą", +PasteFromWord : "Įdėti iš Word", + +DlgPasteMsg2 : "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (Ctrl+V) ir spūstelkite mygtuką OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteIgnoreFont : "Ignoruoti šriftų nustatymus", +DlgPasteRemoveStyles : "Pašalinti stilių nustatymus", + +// Color Picker +ColorAutomatic : "Automatinis", +ColorMoreColors : "Daugiau spalvų...", + +// Document Properties +DocProps : "Dokumento savybės", + +// Anchor Dialog +DlgAnchorTitle : "Žymės savybės", +DlgAnchorName : "Žymės vardas", +DlgAnchorErrorName : "Prašome įvesti žymės vardą", + +// Speller Pages Dialog +DlgSpellNotInDic : "Žodyne nerastas", +DlgSpellChangeTo : "Pakeisti į", +DlgSpellBtnIgnore : "Ignoruoti", +DlgSpellBtnIgnoreAll : "Ignoruoti visus", +DlgSpellBtnReplace : "Pakeisti", +DlgSpellBtnReplaceAll : "Pakeisti visus", +DlgSpellBtnUndo : "Atšaukti", +DlgSpellNoSuggestions : "- Nėra pasiūlymų -", +DlgSpellProgress : "Vyksta rašybos tikrinimas...", +DlgSpellNoMispell : "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų", +DlgSpellNoChanges : "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių", +DlgSpellOneChange : "Rašybos tikrinimas baigtas: Vienas žodis pakeistas", +DlgSpellManyChanges : "Rašybos tikrinimas baigtas: Pakeista %1 žodžių", + +IeSpellDownload : "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?", + +// Button Dialog +DlgButtonText : "Tekstas (Reikšmė)", +DlgButtonType : "Tipas", +DlgButtonTypeBtn : "Button", //MISSING +DlgButtonTypeSbm : "Submit", //MISSING +DlgButtonTypeRst : "Reset", //MISSING + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Vardas", +DlgCheckboxValue : "Reikšmė", +DlgCheckboxSelected : "Pažymėtas", + +// Form Dialog +DlgFormName : "Vardas", +DlgFormAction : "Veiksmas", +DlgFormMethod : "Metodas", + +// Select Field Dialog +DlgSelectName : "Vardas", +DlgSelectValue : "Reikšmė", +DlgSelectSize : "Dydis", +DlgSelectLines : "eilučių", +DlgSelectChkMulti : "Leisti daugeriopą atranką", +DlgSelectOpAvail : "Galimos parinktys", +DlgSelectOpText : "Tekstas", +DlgSelectOpValue : "Reikšmė", +DlgSelectBtnAdd : "Įtraukti", +DlgSelectBtnModify : "Modifikuoti", +DlgSelectBtnUp : "Aukštyn", +DlgSelectBtnDown : "Žemyn", +DlgSelectBtnSetValue : "Laikyti pažymėta reikšme", +DlgSelectBtnDelete : "Trinti", + +// Textarea Dialog +DlgTextareaName : "Vardas", +DlgTextareaCols : "Ilgis", +DlgTextareaRows : "Plotis", + +// Text Field Dialog +DlgTextName : "Vardas", +DlgTextValue : "Reikšmė", +DlgTextCharWidth : "Ilgis simboliais", +DlgTextMaxChars : "Maksimalus simbolių skaičius", +DlgTextType : "Tipas", +DlgTextTypeText : "Tekstas", +DlgTextTypePass : "Slaptažodis", + +// Hidden Field Dialog +DlgHiddenName : "Vardas", +DlgHiddenValue : "Reikšmė", + +// Bulleted List Dialog +BulletedListProp : "Suženklinto sąrašo savybės", +NumberedListProp : "Numeruoto sąrašo savybės", +DlgLstStart : "Start", //MISSING +DlgLstType : "Tipas", +DlgLstTypeCircle : "Apskritimas", +DlgLstTypeDisc : "Diskas", +DlgLstTypeSquare : "Kvadratas", +DlgLstTypeNumbers : "Skaičiai (1, 2, 3)", +DlgLstTypeLCase : "Mažosios raidės (a, b, c)", +DlgLstTypeUCase : "Didžiosios raidės (A, B, C)", +DlgLstTypeSRoman : "Romėnų mažieji skaičiai (i, ii, iii)", +DlgLstTypeLRoman : "Romėnų didieji skaičiai (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Bendros savybės", +DlgDocBackTab : "Fonas", +DlgDocColorsTab : "Spalvos ir kraštinės", +DlgDocMetaTab : "Meta duomenys", + +DlgDocPageTitle : "Puslapio antraštė", +DlgDocLangDir : "Kalbos kryptis", +DlgDocLangDirLTR : "Iš kairės į dešinę (LTR)", +DlgDocLangDirRTL : "Iš dešinės į kairę (RTL)", +DlgDocLangCode : "Kalbos kodas", +DlgDocCharSet : "Simbolių kodavimo lentelė", +DlgDocCharSetCE : "Central European", //MISSING +DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING +DlgDocCharSetCR : "Cyrillic", //MISSING +DlgDocCharSetGR : "Greek", //MISSING +DlgDocCharSetJP : "Japanese", //MISSING +DlgDocCharSetKR : "Korean", //MISSING +DlgDocCharSetTR : "Turkish", //MISSING +DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING +DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetOther : "Kita simbolių kodavimo lentelė", + +DlgDocDocType : "Dokumento tipo antraštė", +DlgDocDocTypeOther : "Kita dokumento tipo antraštė", +DlgDocIncXHTML : "Įtraukti XHTML deklaracijas", +DlgDocBgColor : "Fono spalva", +DlgDocBgImage : "Fono paveikslėlio nuoroda (URL)", +DlgDocBgNoScroll : "Neslenkantis fonas", +DlgDocCText : "Tekstas", +DlgDocCLink : "Nuoroda", +DlgDocCVisited : "Aplankyta nuoroda", +DlgDocCActive : "Aktyvi nuoroda", +DlgDocMargins : "Puslapio kraštinės", +DlgDocMaTop : "Viršuje", +DlgDocMaLeft : "Kairėje", +DlgDocMaRight : "Dešinėje", +DlgDocMaBottom : "Apačioje", +DlgDocMeIndex : "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)", +DlgDocMeDescr : "Dokumento apibūdinimas", +DlgDocMeAuthor : "Autorius", +DlgDocMeCopy : "Autorinės teisės", +DlgDocPreview : "Peržiūra", + +// Templates Dialog +Templates : "Šablonai", +DlgTemplatesTitle : "Turinio šablonai", +DlgTemplatesSelMsg : "Pasirinkite norimą šabloną
        (Dėmesio! esamas turinys bus prarastas):", +DlgTemplatesLoading : "Įkeliamas šablonų sąrašas. Prašome palaukti...", +DlgTemplatesNoTpl : "(Šablonų sąrašas tuščias)", +DlgTemplatesReplace : "Replace actual contents", //MISSING + +// About Dialog +DlgAboutAboutTab : "Apie", +DlgAboutBrowserInfoTab : "Naršyklės informacija", +DlgAboutLicenseTab : "License", //MISSING +DlgAboutVersion : "versija", +DlgAboutInfo : "Papildomą informaciją galima gauti" +}; diff --git a/ehcp/net2ftp/plugins/fckeditor/editor/lang/lv.js b/ehcp/net2ftp/plugins/fckeditor/editor/lang/lv.js new file mode 100644 index 0000000..23b589c --- /dev/null +++ b/ehcp/net2ftp/plugins/fckeditor/editor/lang/lv.js @@ -0,0 +1,515 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Latvian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Samazināt rīku joslu", +ToolbarExpand : "Paplašināt rīku joslu", + +// Toolbar Items and Context Menu +Save : "Saglabāt", +NewPage : "Jauna lapa", +Preview : "Pārskatīt", +Cut : "Izgriezt", +Copy : "Kopēt", +Paste : "Ievietot", +PasteText : "Ievietot kā vienkāršu tekstu", +PasteWord : "Ievietot no Worda", +Print : "Drukāt", +SelectAll : "Iezīmēt visu", +RemoveFormat : "Noņemt stilus", +InsertLinkLbl : "Hipersaite", +InsertLink : "Ievietot/Labot hipersaiti", +RemoveLink : "Noņemt hipersaiti", +Anchor : "Ievietot/Labot iezīmi", +AnchorDelete : "Remove Anchor", //MISSING +InsertImageLbl : "Attēls", +InsertImage : "Ievietot/Labot Attēlu", +InsertFlashLbl : "Flash", +InsertFlash : "Ievietot/Labot Flash", +InsertTableLbl : "Tabula", +InsertTable : "Ievietot/Labot Tabulu", +InsertLineLbl : "Atdalītājsvītra", +InsertLine : "Ievietot horizontālu Atdalītājsvītru", +InsertSpecialCharLbl: "Īpašs simbols", +InsertSpecialChar : "Ievietot speciālo simbolu", +InsertSmileyLbl : "Smaidiņi", +InsertSmiley : "Ievietot smaidiņu", +About : "Īsumā par FCKeditor", +Bold : "Treknu šriftu", +Italic : "Slīprakstā", +Underline : "Apakšsvītra", +StrikeThrough : "Pārsvītrots", +Subscript : "Zemrakstā", +Superscript : "Augšrakstā", +LeftJustify : "Izlīdzināt pa kreisi", +CenterJustify : "Izlīdzināt pret centru", +RightJustify : "Izlīdzināt pa labi", +BlockJustify : "Izlīdzināt malas", +DecreaseIndent : "Samazināt atkāpi", +IncreaseIndent : "Palielināt atkāpi", +Blockquote : "Blockquote", //MISSING +Undo : "Atcelt", +Redo : "Atkārtot", +NumberedListLbl : "Numurēts saraksts", +NumberedList : "Ievietot/Noņemt numerēto sarakstu", +BulletedListLbl : "Izcelts saraksts", +BulletedList : "Ievietot/Noņemt izceltu sarakstu", +ShowTableBorders : "Parādīt tabulas robežas", +ShowDetails : "Parādīt sīkāku informāciju", +Style : "Stils", +FontFormat : "Formāts", +Font : "Šrifts", +FontSize : "Izmērs", +TextColor : "Teksta krāsa", +BGColor : "Fona krāsa", +Source : "HTML kods", +Find : "Meklēt", +Replace : "Nomainīt", +SpellCheck : "Pareizrakstības pārbaude", +UniversalKeyboard : "Universāla klaviatūra", +PageBreakLbl : "Lapas pārtraukums", +PageBreak : "Ievietot lapas pārtraukumu", + +Form : "Forma", +Checkbox : "Atzīmēšanas kastīte", +RadioButton : "Izvēles poga", +TextField : "Teksta rinda", +Textarea : "Teksta laukums", +HiddenField : "Paslēpta teksta rinda", +Button : "Poga", +SelectionField : "Iezīmēšanas lauks", +ImageButton : "Attēlpoga", + +FitWindow : "Maksimizēt redaktora izmēru", +ShowBlocks : "Show Blocks", //MISSING + +// Context Menu +EditLink : "Labot hipersaiti", +CellCM : "Šūna", +RowCM : "Rinda", +ColumnCM : "Kolonna", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING +DeleteRows : "Dzēst rindas", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING +DeleteColumns : "Dzēst kolonnas", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING +DeleteCells : "Dzēst rūtiņas", +MergeCells : "Apvienot rūtiņas", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING +TableDelete : "Dzēst tabulu", +CellProperties : "Rūtiņas īpašības", +TableProperties : "Tabulas īpašības", +ImageProperties : "Attēla īpašības", +FlashProperties : "Flash īpašības", + +AnchorProp : "Iezīmes īpašības", +ButtonProp : "Pogas īpašības", +CheckboxProp : "Atzīmēšanas kastītes īpašības", +HiddenFieldProp : "Paslēptās teksta rindas īpašības", +RadioButtonProp : "Izvēles poga īpašības", +ImageButtonProp : "Attēlpogas īpašības", +TextFieldProp : "Teksta rindas īpašības", +SelectionFieldProp : "Iezīmēšanas lauka īpašības", +TextareaProp : "Teksta laukuma īpašības", +FormProp : "Formas īpašības", + +FontFormats : "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Tiek apstrādāts XHTML. Lūdzu uzgaidiet...", +Done : "Darīts", +PasteWordConfirm : "Teksta fragments, kas tiek ievietots, izskatās, ka būtu sagatavots Word'ā. Vai vēlaties to apstrādāt pirms ievietošanas?", +NotCompatiblePaste : "Šī darbība ir pieejama Internet Explorer'ī, kas jaunāks par 5.5 versiju. Vai vēlaties ievietot bez apstrādes?", +UnknownToolbarItem : "Nezināms rīku joslas objekts \"%1\"", +UnknownCommand : "Nezināmas darbības nosaukums \"%1\"", +NotImplemented : "Darbība netika paveikta", +UnknownToolbarSet : "Rīku joslas komplekts \"%1\" neeksistē", +NoActiveX : "Interneta pārlūkprogrammas drošības uzstādījumi varētu ietekmēt dažas no redaktora īpašībām. Jābūt aktivizētai sadaļai \"Run ActiveX controls and plug-ins\". Savādāk ir iespējamas kļūdas darbībā un kļūdu paziņojumu parādīšanās.", +BrowseServerBlocked : "Resursu pārlūks nevar tikt atvērts. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.", +DialogBlocked : "Nav iespējams atvērt dialoglogu. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.", + +// Dialogs +DlgBtnOK : "Darīts!", +DlgBtnCancel : "Atcelt", +DlgBtnClose : "Aizvērt", +DlgBtnBrowseServer : "Skatīt servera saturu", +DlgAdvancedTag : "Izvērstais", +DlgOpOther : "", +DlgInfoTab : "Informācija", +DlgAlertUrl : "Lūdzu, ievietojiet hipersaiti", + +// General Dialogs Labels +DlgGenNotSet : "
      ' . $footer_content + : $footer_content; + } + + if ($this->header_type == GESHI_HEADER_DIV) { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + return "$footer_content"; + } + return ($this->force_code_block ? '' : '') . + "$footer_content"; + } + else { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + return "$footer_content
    "; + } + return ($this->force_code_block ? '' : '') . + "$footer_content
    "; + } + } + + /** + * Returns the footer content, formatted for output + * + * @return string The footer content, formatted for output + * @since 1.0.2 + * @access private + */ + function format_footer_content() { + $footer = $this->footer_content; + if ($footer) { + if ($this->header_type == GESHI_HEADER_PRE) { + $footer = str_replace("\n", '', $footer);; + } + $footer = $this->replace_keywords($footer); + + if ($this->use_classes) { + $attr = ' class="foot"'; + } + else { + $attr = " style=\"{$this->footer_content_style}\""; + } + return "$footer"; + } + } + + /** + * Replaces certain keywords in the header and footer with + * certain configuration values + * + * @param string The header or footer content to do replacement on + * @return string The header or footer with replaced keywords + * @since 1.0.2 + * @access private + */ + function replace_keywords($instr) { + $keywords = $replacements = array(); + + $keywords[] = '
      to have no effect at all if there are line numbers + // (
        s have margins that should be destroyed so all layout is + // controlled by the set_overall_style method, which works on the + //
         or 
        container). Additionally, set default styles for lines + if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) { + //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n"; + $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n"; + } + + // Add overall styles + if (!$economy_mode || $this->overall_style != '') { + $stylesheet .= "$selector {{$this->overall_style}}\n"; + } + + // Add styles for links + foreach ($this->link_styles as $key => $style) { + if (!$economy_mode || $key == GESHI_LINK && $style != '') { + $stylesheet .= "{$selector}a:link {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_HOVER && $style != '') { + $stylesheet .= "{$selector}a:hover {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_ACTIVE && $style != '') { + $stylesheet .= "{$selector}a:active {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_VISITED && $style != '') { + $stylesheet .= "{$selector}a:visited {{$style}}\n"; + } + } + + // Header and footer + if (!$economy_mode || $this->header_content_style != '') { + $stylesheet .= "$selector.head {{$this->header_content_style}}\n"; + } + if (!$economy_mode || $this->footer_content_style != '') { + $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n"; + } + + // Styles for important stuff + if (!$economy_mode || $this->important_styles != '') { + $stylesheet .= "$selector.imp {{$this->important_styles}}\n"; + } + + // Simple line number styles + if (!$economy_mode || ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->line_style1 != '')) { + $stylesheet .= "{$selector}li, {$selector}li.li1 {{$this->line_style1}}\n"; + } + // If there is a style set for fancy line numbers, echo it out + if (!$economy_mode || ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && $this->line_style2 != '')) { + $stylesheet .= "{$selector}li.li2 {{$this->line_style2}}\n"; + } + + foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['KEYWORDS'][$group]) && + $this->lexic_permissions['KEYWORDS'][$group])) { + $stylesheet .= "$selector.kw$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['COMMENTS'][$group]) && + $this->lexic_permissions['COMMENTS'][$group])) { + $stylesheet .= "$selector.co$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['ESCAPE_CHAR'])) { + $stylesheet .= "$selector.es$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['BRACKETS'])) { + $stylesheet .= "$selector.br$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['SYMBOLS'])) { + $stylesheet .= "$selector.sy$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['STRINGS'])) { + $stylesheet .= "$selector.st$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['NUMBERS'])) { + $stylesheet .= "$selector.nu$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['METHODS'])) { + $stylesheet .= "$selector.me$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '')) { + $stylesheet .= "$selector.sc$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['REGEXPS'][$group]) && + $this->lexic_permissions['REGEXPS'][$group])) { + if (is_array($this->language_data['REGEXPS'][$group]) && + array_key_exists(GESHI_CLASS, + $this->language_data['REGEXPS'][$group])) { + $stylesheet .= "$selector."; + $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS]; + $stylesheet .= " {{$styles}}\n"; + } + else { + $stylesheet .= "$selector.re$group {{$styles}}\n"; + } + } + } + // Styles for lines being highlighted extra + if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) { + $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n"; + } + foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) { + $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n"; + } + + return $stylesheet; + } + + /** + * Get's the style that is used for the specified line + * + * @param int The line number information is requested for + * @access private + * @since 1.0.7.21 + */ + function get_line_style($line) { + //$style = null; + $style = null; + if (array_key_exists($line, $this->highlight_extra_lines_styles)) { + $style = $this->highlight_extra_lines_styles[$line]; + } else { // if no "extra" style assigned + $style = $this->highlight_extra_lines_style; + } + + return $style; + } +} // End Class GeSHi + + +if (!function_exists('geshi_highlight')) { + /** + * Easy way to highlight stuff. Behaves just like highlight_string + * + * @param string The code to highlight + * @param string The language to highlight the code in + * @param string The path to the language files. You can leave this blank if you need + * as from version 1.0.7 the path should be automatically detected + * @param boolean Whether to return the result or to echo + * @return string The code highlighted (if $return is true) + * @since 1.0.2 + */ + function geshi_highlight($string, $language, $path = null, $return = false) { + $geshi = new GeSHi($string, $language, $path); + $geshi->set_header_type(GESHI_HEADER_NONE); + if ($return) { + return '' . $geshi->parse_code() . ''; + } + echo '' . $geshi->parse_code() . ''; + if ($geshi->error()) { + return false; + } + return true; + } +} + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/abap.php b/ehcp/net2ftp/plugins/geshi/geshi/abap.php new file mode 100644 index 0000000..b254080 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/abap.php @@ -0,0 +1,136 @@ + 'ABAP', + 'COMMENT_SINGLE' => array(1 => '"', 2 => '*'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'default', + 'do', 'else', 'for', 'endif', 'elseif', 'eq', + 'not', 'and' + ), + 2 => array( + 'data', 'types', 'seletion-screen', 'parameters', 'field-symbols', 'extern', 'inline' + ), + 3 => array( + 'report', 'write', 'append', 'select', 'endselect', 'call method', 'call function', + 'loop', 'endloop', 'raise', 'read table', 'concatenate', 'split', 'shift', + 'condense', 'describe', 'clear', 'endfunction', 'assign', 'create data', 'translate', + 'continue', 'start-of-selection', 'at selection-screen', 'modify', 'call screen', + 'create object', 'perform', 'form', 'endform', + 'reuse_alv_block_list_init', 'zbcialv', 'include' + ), + 4 => array( + 'type ref to', 'type', 'begin of', 'end of', 'like', 'into', + 'from', 'where', 'order by', 'with key', 'into', 'string', 'separated by', + 'exporting', 'importing', 'to upper case', 'to', 'exceptions', 'tables', + 'using', 'changing' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://sap4.com/wiki/index.php?title={FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/actionscript.php b/ehcp/net2ftp/plugins/geshi/geshi/actionscript.php new file mode 100644 index 0000000..a873c26 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/actionscript.php @@ -0,0 +1,197 @@ + 'ActionScript', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '#include', 'for', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'dowhile', + 'endwhile', 'endif', 'switch', 'case', 'endswitch', 'return', 'break', 'continue', 'in' + ), + 2 => array( + 'null', 'false', 'true', 'var', + 'default', 'function', 'class', + 'new', '_global' + ), + 3 => array( + '#endinitclip', '#initclip', '__proto__', '_accProps', '_alpha', '_currentframe', + '_droptarget', '_focusrect', '_framesloaded', '_height', '_highquality', '_lockroot', + '_name', '_parent', '_quality', '_root', '_rotation', '_soundbuftime', '_target', '_totalframes', + '_url', '_visible', '_width', '_x', '_xmouse', '_xscale', '_y', '_ymouse', '_yscale', 'abs', + 'Accessibility', 'acos', 'activityLevel', 'add', 'addListener', 'addPage', 'addProperty', + 'addRequestHeader', 'align', 'allowDomain', 'allowInsecureDomain', 'and', 'appendChild', + 'apply', 'Arguments', 'Array', 'asfunction', 'asin', 'atan', 'atan2', 'attachAudio', 'attachMovie', + 'attachSound', 'attachVideo', 'attributes', 'autosize', 'avHardwareDisable', 'background', + 'backgroundColor', 'BACKSPACE', 'bandwidth', 'beginFill', 'beginGradientFill', 'blockIndent', + 'bold', 'Boolean', 'border', 'borderColor', 'bottomScroll', 'bufferLength', 'bufferTime', + 'builtInItems', 'bullet', 'Button', 'bytesLoaded', 'bytesTotal', 'call', 'callee', 'caller', + 'Camera', 'capabilities', 'CAPSLOCK', 'caption', 'catch', 'ceil', 'charAt', 'charCodeAt', + 'childNodes', 'chr', 'clear', 'clearInterval', 'cloneNode', 'close', 'Color', 'concat', + 'connect', 'condenseWhite', 'constructor', 'contentType', 'ContextMenu', 'ContextMenuItem', + 'CONTROL', 'copy', 'cos', 'createElement', 'createEmptyMovieClip', 'createTextField', + 'createTextNode', 'currentFps', 'curveTo', 'CustomActions', 'customItems', 'data', 'Date', + 'deblocking', 'delete', 'DELETEKEY', 'docTypeDecl', 'domain', 'DOWN', + 'duplicateMovieClip', 'duration', 'dynamic', 'E', 'embedFonts', 'enabled', + 'END', 'endFill', 'ENTER', 'eq', 'Error', 'ESCAPE(Konstante)', 'escape(Funktion)', 'eval', + 'exactSettings', 'exp', 'extends', 'finally', 'findText', 'firstChild', 'floor', + 'flush', 'focusEnabled', 'font', 'fps', 'fromCharCode', 'fscommand', + 'gain', 'ge', 'get', 'getAscii', 'getBeginIndex', 'getBounds', 'getBytesLoaded', 'getBytesTotal', + 'getCaretIndex', 'getCode', 'getCount', 'getDate', 'getDay', 'getDepth', 'getEndIndex', 'getFocus', + 'getFontList', 'getFullYear', 'getHours', 'getInstanceAtDepth', 'getLocal', 'getMilliseconds', + 'getMinutes', 'getMonth', 'getNewTextFormat', 'getNextHighestDepth', 'getPan', 'getProgress', + 'getProperty', 'getRGB', 'getSeconds', 'getSelected', 'getSelectedText', 'getSize', 'getStyle', + 'getStyleNames', 'getSWFVersion', 'getText', 'getTextExtent', 'getTextFormat', 'getTextSnapshot', + 'getTime', 'getTimer', 'getTimezoneOffset', 'getTransform', 'getURL', 'getUTCDate', 'getUTCDay', + 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', + 'getVersion', 'getVolume', 'getYear', 'globalToLocal', 'goto', 'gotoAndPlay', 'gotoAndStop', + 'hasAccessibility', 'hasAudio', 'hasAudioEncoder', 'hasChildNodes', 'hasEmbeddedVideo', 'hasMP3', + 'hasPrinting', 'hasScreenBroadcast', 'hasScreenPlayback', 'hasStreamingAudio', 'hasStreamingVideo', + 'hasVideoEncoder', 'height', 'hide', 'hideBuiltInItems', 'hitArea', 'hitTest', 'hitTestTextNearPos', + 'HOME', 'hscroll', 'html', 'htmlText', 'ID3', 'ifFrameLoaded', 'ignoreWhite', 'implements', + 'import', 'indent', 'index', 'indexOf', 'Infinity', '-Infinity', 'INSERT', 'insertBefore', 'install', + 'instanceof', 'int', 'interface', 'isActive', 'isDebugger', 'isDown', 'isFinite', 'isNaN', 'isToggled', + 'italic', 'join', 'Key', 'language', 'lastChild', 'lastIndexOf', 'le', 'leading', 'LEFT', 'leftMargin', + 'length', 'level', 'lineStyle', 'lineTo', 'list', 'LN10', 'LN2', 'load', 'loadClip', 'loaded', 'loadMovie', + 'loadMovieNum', 'loadSound', 'loadVariables', 'loadVariablesNum', 'LoadVars', 'LocalConnection', + 'localFileReadDisable', 'localToGlobal', 'log', 'LOG10E', 'LOG2E', 'manufacturer', 'Math', 'max', + 'MAX_VALUE', 'maxChars', 'maxhscroll', 'maxscroll', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'menu', + 'message', 'Microphone', 'min', 'MIN_VALUE', 'MMExecute', 'motionLevel', 'motionTimeOut', 'Mouse', + 'mouseWheelEnabled', 'moveTo', 'Movieclip', 'MovieClipLoader', 'multiline', 'muted', 'name', 'names', 'NaN', + 'ne', 'NEGATIVE_INFINITY', 'NetConnection', 'NetStream', 'newline', 'nextFrame', + 'nextScene', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'not', 'Number', 'Object', + 'on', 'onActivity', 'onChanged', 'onClipEvent', 'onClose', 'onConnect', 'onData', 'onDragOut', + 'onDragOver', 'onEnterFrame', 'onID3', 'onKeyDown', 'onKeyUp', 'onKillFocus', 'onLoad', 'onLoadComplete', + 'onLoadError', 'onLoadInit', 'onLoadProgress', 'onLoadStart', 'onMouseDown', 'onMouseMove', 'onMouseUp', + 'onMouseWheel', 'onPress', 'onRelease', 'onReleaseOutside', 'onResize', 'onRollOut', 'onRollOver', + 'onScroller', 'onSelect', 'onSetFocus', 'onSoundComplete', 'onStatus', 'onUnload', 'onUpdate', 'onXML', + 'or(logischesOR)', 'ord', 'os', 'parentNode', 'parseCSS', 'parseFloat', 'parseInt', 'parseXML', 'password', + 'pause', 'PGDN', 'PGUP', 'PI', 'pixelAspectRatio', 'play', 'playerType', 'pop', 'position', + 'POSITIVE_INFINITY', 'pow', 'prevFrame', 'previousSibling', 'prevScene', 'print', 'printAsBitmap', + 'printAsBitmapNum', 'PrintJob', 'printNum', 'private', 'prototype', 'public', 'push', 'quality', + 'random', 'rate', 'registerClass', 'removeListener', 'removeMovieClip', 'removeNode', 'removeTextField', + 'replaceSel', 'replaceText', 'resolutionX', 'resolutionY', 'restrict', 'reverse', 'RIGHT', + 'rightMargin', 'round', 'scaleMode', 'screenColor', 'screenDPI', 'screenResolutionX', 'screenResolutionY', + 'scroll', 'seek', 'selectable', 'Selection', 'send', 'sendAndLoad', 'separatorBefore', 'serverString', + 'set', 'setvariable', 'setBufferTime', 'setClipboard', 'setDate', 'setFocus', 'setFullYear', 'setGain', + 'setHours', 'setInterval', 'setMask', 'setMilliseconds', 'setMinutes', 'setMode', 'setMonth', + 'setMotionLevel', 'setNewTextFormat', 'setPan', 'setProperty', 'setQuality', 'setRate', 'setRGB', + 'setSeconds', 'setSelectColor', 'setSelected', 'setSelection', 'setSilenceLevel', 'setStyle', + 'setTextFormat', 'setTime', 'setTransform', 'setUseEchoSuppression', 'setUTCDate', 'setUTCFullYear', + 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setVolume', + 'setYear', 'SharedObject', 'SHIFT(Konstante)', 'shift(Methode)', 'show', 'showMenu', 'showSettings', + 'silenceLevel', 'silenceTimeout', 'sin', 'size', 'slice', 'smoothing', 'sort', 'sortOn', 'Sound', 'SPACE', + 'splice', 'split', 'sqrt', 'SQRT1_2', 'SQRT2', 'Stage', 'start', 'startDrag', 'static', 'status', 'stop', + 'stopAllSounds', 'stopDrag', 'String', 'StyleSheet(Klasse)', 'styleSheet(Eigenschaft)', 'substr', + 'substring', 'super', 'swapDepths', 'System', 'TAB', 'tabChildren', 'tabEnabled', 'tabIndex', + 'tabStops', 'tan', 'target', 'targetPath', 'tellTarget', 'text', 'textColor', 'TextField', 'TextFormat', + 'textHeight', 'TextSnapshot', 'textWidth', 'this', 'throw', 'time', 'toggleHighQuality', 'toLowerCase', + 'toString', 'toUpperCase', 'trace', 'trackAsMenu', 'try', 'type', 'typeof', 'undefined', + 'underline', 'unescape', 'uninstall', 'unloadClip', 'unloadMovie', 'unLoadMovieNum', 'unshift', 'unwatch', + 'UP', 'updateAfterEvent', 'updateProperties', 'url', 'useCodePage', 'useEchoSuppression', 'useHandCursor', + 'UTC', 'valueOf', 'variable', 'version', 'Video', 'visible', 'void', 'watch', 'width', + 'with', 'wordwrap', 'XML', 'xmlDecl', 'XMLNode', 'XMLSocket' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #0066CC;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array() +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/ada.php b/ehcp/net2ftp/plugins/geshi/geshi/ada.php new file mode 100644 index 0000000..cd61a9e --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/ada.php @@ -0,0 +1,133 @@ + 'Ada', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if', + 'is', 'loop', 'while', 'then', 'is', 'end', 'select', 'case', 'while', 'until', + 'goto', 'return' + ), + 2 => array( + 'abs', 'and', 'mod', 'not', 'or', 'rem', 'xor' + ), + 3 => array( + 'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array', 'at', 'body', + 'constant', 'delay', 'delta', 'digits', 'entry', 'exit', + 'function', 'generic', 'in', 'limited', 'new', 'null', 'of', 'others', 'out', 'package', 'pragma', + 'private', 'procedure', 'protected', 'raise', 'range', 'record', 'renames', 'requeue', 'reverse', + 'separate', 'subtype', 'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;', + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/apache.php b/ehcp/net2ftp/plugins/geshi/geshi/apache.php new file mode 100644 index 0000000..aed20b8 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/apache.php @@ -0,0 +1,171 @@ + 'Apache Log', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + /*keywords*/ + 1 => array( + 'accessconfig','accessfilename','action','addalt', + 'addaltbyencoding','addaltbytype','addcharset', + 'adddefaultcharset','adddescription', + 'addencoding','addhandler','addicon','addiconbyencoding', + 'addiconbytype','addlanguage','addmodule','addmoduleinfo', + 'addtype','agentlog','alias','aliasmatch', + 'allow','allowconnect','allowoverride','anonymous', + 'anonymous_authoritative','anonymous_logemail','anonymous_mustgiveemail', + 'anonymous_nouserid','anonymous_verifyemail','authauthoritative', + 'authdbauthoritative','authdbgroupfile','authdbmauthoritative', + 'authdbmgroupfile','authdbmgroupfile','authdbuserfile','authdbmuserfile', + 'authdigestfile','authgroupfile','authname','authtype', + 'authuserfile','bindaddress','browsermatch','browsermatchnocase', + 'bs2000account','cachedefaultexpire','cachedirlength','cachedirlevels', + 'cacheforcecompletion','cachegcinterval','cachelastmodifiedfactor','cachemaxexpire', + 'cachenegotiateddocs','cacheroot','cachesize','checkspelling', + 'clearmodulelist','contentdigest','cookieexpires','cookielog', + 'cookielog','cookietracking','coredumpdirectory','customlog', + 'defaulticon','defaultlanguage','defaulttype','define', + 'deny','directory','directorymatch','directoryindex', + 'documentroot','errordocument','errorlog','example', + 'expiresactive','expiresbytype','expiresdefault','extendedstatus', + 'fancyindexing','files','filesmatch','forcetype', + 'group','header','headername','hostnamelookups', + 'identitycheck','ifdefine','ifmodule','imapbase', + 'imapdefault','imapmenu','include','indexignore', + 'indexoptions','keepalive','keepalivetimeout','languagepriority', + 'limit','limitexcept','limitrequestbody','limitrequestfields', + 'limitrequestfieldsize','limitrequestline','listen','listenbacklog', + 'loadfile','loadmodule','location','locationmatch', + 'lockfile','logformat','loglevel','maxclients', + 'maxkeepaliverequests','maxrequestsperchild','maxspareservers','metadir', + 'metafiles','metasuffix','mimemagicfile','minspareservers', + 'mmapfile','namevirtualhost','nocache','options','order', + 'passenv','pidfile','port','proxyblock','proxydomain', + 'proxypass','proxypassreverse','proxyreceivebuffersize','proxyremote', + 'proxyrequests','proxyvia','qsc','readmename', + 'redirect','redirectmatch','redirectpermanent','redirecttemp', + 'refererignore','refererlog','removehandler','require', + 'resourceconfig','rewritebase','rewritecond','rewriteengine', + 'rewritelock','rewritelog','rewriteloglevel','rewritemap', + 'rewriteoptions','rewriterule','rlimitcpu','rlimitmem', + 'rlimitnproc','satisfy','scoreboardfile','script', + 'scriptalias','scriptaliasmatch','scriptinterpretersource','scriptlog', + 'scriptlogbuffer','scriptloglength','sendbuffersize', + 'serveradmin','serveralias','servername','serverpath', + 'serverroot','serversignature','servertokens','servertype', + 'setenv','setenvif','setenvifnocase','sethandler', + 'singlelisten','startservers','threadsperchild','timeout', + 'transferlog','typesconfig','unsetenv','usecanonicalname', + 'user','userdir','virtualhost','virtualdocumentroot', + 'virtualdocumentrootip','virtualscriptalias','virtualscriptaliasip', + 'xbithack','from','all' + ), + /*keyords 2*/ + 2 => array( + 'on','off','standalone','inetd', + 'force-response-1.0','downgrade-1.0','nokeepalive', + 'ndexes','includes','followsymlinks','none', + 'x-compress','x-gzip' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/applescript.php b/ehcp/net2ftp/plugins/geshi/geshi/applescript.php new file mode 100644 index 0000000..831bf2d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/applescript.php @@ -0,0 +1,134 @@ + 'AppleScript', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array( '(*' => '*)'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"',"'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'script','property','prop','end','copy','to','set','global','local','on','to','of', + 'in','given','with','without','return','continue','tell','if','then','else','repeat', + 'times','while','until','from','exit','try','error','considering','ignoring','timeout', + 'transaction','my','get','put','into','is' + ), + 2 => array( + 'each','some','every','whose','where','id','index','first','second','third','fourth', + 'fifth','sixth','seventh','eighth','ninth','tenth','last','front','back','st','nd', + 'rd','th','middle','named','through','thru','before','after','beginning','the' + ), + 3 => array( + 'close','copy','count','delete','duplicate','exists','launch','make','move','open', + 'print','quit','reopen','run','save','saving', + 'it','me','version','pi','result','space','tab','anything','case','diacriticals','expansion', + 'hyphens','punctuation','bold','condensed','expanded','hidden','italic','outline','plain', + 'shadow','strikethrough','subscript','superscript','underline','ask','no','yes','false', + 'true','weekday','monday','mon','tuesday','tue','wednesday','wed','thursday','thu','friday', + 'fri','saturday','sat','sunday','sun','month','january','jan','february','feb','march', + 'mar','april','apr','may','june','jun','july','jul','august','aug','september', + 'sep','october','oct','november','nov','december','dec','minutes','hours', + 'days','weeks','div','mod','and','not','or','as','contains','equal','equals','isnt' + ) + ), + 'SYMBOLS' => array( + ')','+','-','^','*','/','&','<','>=','<','<=','=','�' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 4 => 'color: #009999;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => ',+-=<>/?^&*' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*', + 4 => '<[a-zA-Z_][a-zA-Z0-9_]*>', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/asm.php b/ehcp/net2ftp/plugins/geshi/geshi/asm.php new file mode 100644 index 0000000..38bc5a4 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/asm.php @@ -0,0 +1,199 @@ + 'ASM', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'aaa','aad','aam','aas','adc','add','and','call','cbw','clc','cld','cli','cmc','cmp', + 'cmps','cmpsb','cmpsw','cwd','daa','das','dec','div','esc','hlt','idiv','imul','in','inc', + 'int','into','iret','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jmp', + 'jna','jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz', + 'jo','jp','jpe','jpo','js','jz','lahf','lds','lea','les','lods','lodsb','lodsw','loop', + 'loope','loopew','loopne','loopnew','loopnz','loopnzw','loopw','loopz','loopzw','mov', + 'movs','movsb','movsw','mul','neg','nop','not','or','out','pop','popf','push','pushf', + 'rcl','rcr','ret','retf','retn','rol','ror','sahf','sal','sar','sbb','scas','scasb','scasw', + 'shl','shr','stc','std','sti','stos','stosb','stosw','sub','test','wait','xchg','xlat', + 'xlatb','xor','bound','enter','ins','insb','insw','leave','outs','outsb','outsw','popa','pusha','pushw', + 'arpl','lar','lsl','sgdt','sidt','sldt','smsw','str','verr','verw','clts','lgdt','lidt','lldt','lmsw','ltr', + 'bsf','bsr','bt','btc','btr','bts','cdq','cmpsd','cwde','insd','iretd','iretdf','iretf', + 'jecxz','lfs','lgs','lodsd','loopd','looped','loopned','loopnzd','loopzd','lss','movsd', + 'movsx','movzx','outsd','popad','popfd','pushad','pushd','pushfd','scasd','seta','setae', + 'setb','setbe','setc','sete','setg','setge','setl','setle','setna','setnae','setnb','setnbe', + 'setnc','setne','setng','setnge','setnl','setnle','setno','setnp','setns','setnz','seto','setp', + 'setpe','setpo','sets','setz','shld','shrd','stosd','bswap','cmpxchg','invd','invlpg','wbinvd','xadd','lock', + 'rep','repe','repne','repnz','repz' + ), + /*FPU*/ + 2 => array( + 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp', + 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv', + 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1', + 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul', + 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv', + 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave', + 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp', + 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1', + 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos', + 'fstenvd','fucom','fucomp','fucompp' + ), + /*registers*/ + 3 => array( + 'ah','al','ax','bh','bl','bp','bx','ch','cl','cr0','cr2','cr3','cs','cx','dh','di','dl', + 'dr0','dr1','dr2','dr3','dr6','dr7','ds','dx','eax','ebp','ebx','ecx','edi','edx', + 'es','esi','esp','fs','gs','si','sp','ss','st','tr3','tr4','tr5','tr6','tr7', 'ah', 'bh', 'ch', 'dh' + ), + /*Directive*/ + 4 => array( + '186','286','286c','286p','287','386','386c','386p','387','486','486p', + '8086','8087','alpha','break','code','const','continue','cref','data','data?', + 'dosseg','else','elseif','endif','endw','err','err1','err2','errb', + 'errdef','errdif','errdifi','erre','erridn','erridni','errnb','errndef', + 'errnz','exit','fardata','fardata?','if','lall','lfcond','list','listall', + 'listif','listmacro','listmacroall',' model','no87','nocref','nolist', + 'nolistif','nolistmacro','radix','repeat','sall','seq','sfcond','stack', + 'startup','tfcond','type','until','untilcxz','while','xall','xcref', + 'xlist','alias','align','assume','catstr','comm','comment','db','dd','df','dosseg','dq', + 'dt','dup','dw','echo','else','elseif','elseif1','elseif2','elseifb','elseifdef','elseifdif', + 'elseifdifi','elseife','elseifidn','elseifidni','elseifnb','elseifndef','end', + 'endif','endm','endp','ends','eq',' equ','even','exitm','extern','externdef','extrn','for', + 'forc','ge','goto','group','high','highword','if','if1','if2','ifb','ifdef','ifdif', + 'ifdifi','ife',' ifidn','ifidni','ifnb','ifndef','include','includelib','instr','invoke', + 'irp','irpc','label','le','length','lengthof','local','low','lowword','lroffset', + 'macro','mask','mod','msfloat','name','ne','offset','opattr','option','org','%out', + 'page','popcontext','proc','proto','ptr','public','purge','pushcontext','record', + 'repeat','rept','seg','segment','short','size','sizeof','sizestr','struc','struct', + 'substr','subtitle','subttl','textequ','this','title','type','typedef','union','while','width', + '.model', '.stack', '.code', '.data' + + ), + + /*Operands*/ + 5 => array( + '@b','@f','addr','basic','byte','c','carry?','dword', + 'far','far16','fortran','fword','near','near16','overflow?','parity?','pascal','qword', + 'real4',' real8','real10','sbyte','sdword','sign?','stdcall','sword','syscall','tbyte', + 'vararg','word','zero?','flat','near32','far32', + 'abs','all','assumes','at','casemap','common','compact', + 'cpu','dotname','emulator','epilogue','error','export','expr16','expr32','farstack','flat', + 'forceframe','huge','language','large','listing','ljmp','loadds','m510','medium','memory', + 'nearstack','nodotname','noemulator','nokeyword','noljmp','nom510','none','nonunique', + 'nooldmacros','nooldstructs','noreadonly','noscoped','nosignextend','nothing', + 'notpublic','oldmacros','oldstructs','os_dos','para','private','prologue','radix', + 'readonly','req','scoped','setif2','smallstack','tiny','use16','use32','uses' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '0[0-9a-fA-F]{1,32}[hH]', + 1 => '[01]{1,64}[bB]' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/asp.php b/ehcp/net2ftp/plugins/geshi/geshi/asp.php new file mode 100644 index 0000000..0895ae3 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/asp.php @@ -0,0 +1,153 @@ + 'ASP', + 'COMMENT_SINGLE' => array(1 => "'", 2 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'include', 'file', 'Dim', 'Option', 'Explicit', 'Implicit', 'Set', 'Select', 'ReDim', 'Preserve', + 'ByVal', 'ByRef', 'End', 'Private', 'Public', 'If', 'Then', 'Else', 'ElseIf', 'Case', 'With', 'NOT', + 'While', 'Wend', 'For', 'Loop', 'Do', 'Request', 'Response', 'Server', 'ADODB', 'Session', 'Application', + 'Each', 'In', 'Get', 'Next', 'INT', 'CINT', 'CBOOL', 'CDATE', 'CBYTE', 'CCUR', 'CDBL', 'CLNG', 'CSNG', + 'CSTR', 'Fix', 'Is', 'Sgn', 'String', 'Boolean', 'Currency', 'Me', 'Single', 'Long', 'Integer', 'Byte', + 'Variant', 'Double', 'To', 'Let', 'Xor', 'Resume', 'On', 'Error', 'Imp', 'GoTo', 'Call', 'Global' + ), + 2 => array( + 'Null', 'Nothing', 'And', + 'False', '<%', '%>', + '<script language=', '</script>', + 'True', 'var', 'Or', 'BOF', 'EOF', + 'Function', 'Class', 'New', 'Sub' + ), + 3 => array( + 'CreateObject', 'Write', 'Redirect', 'Cookies', 'BinaryRead', 'ClientCertificate', 'Form', 'QueryString', + 'ServerVariables', 'TotalBytes', 'AddHeader', 'AppendToLog', 'BinaryWrite', 'Buffer', 'CacheControl', + 'Charset', 'Clear', 'ContentType', 'End()', 'Expires', 'ExpiresAbsolute', 'Flush()', 'IsClientConnected', + 'PICS', 'Status', 'Connection', 'Recordset', 'Execute', 'Abandon', 'Lock', 'UnLock', 'Command', 'Fields', + 'Properties', 'Property', 'Send', 'Replace', 'InStr', 'TRIM', 'NOW', 'Day', 'Month', 'Hour', 'Minute', 'Second', + 'Year', 'MonthName', 'LCase', 'UCase', 'Abs', 'Array', 'As', 'LEN', 'MoveFirst', 'MoveLast', 'MovePrevious', + 'MoveNext', 'LBound', 'UBound', 'Transfer', 'Open', 'Close', 'MapPath', 'FileExists', 'OpenTextFile', 'ReadAll' + ) + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990099; font-weight: bold;', + 2 => 'color: #0000ff; font-weight: bold;', + 3 => 'color: #330066;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000;', + 2 => 'color: #ff6600;', + 'MULTI' => 'color: #008000;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #006600; font-weight:bold' + ), + 'STRINGS' => array( + 0 => 'color: #cc0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #800000;' + ), + 'METHODS' => array( + 1 => 'color: #9900cc;' + ), + 'SYMBOLS' => array( + 0 => 'color: #006600; font-weight: bold' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ), + 1 => array( + '' + ), + 2 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/autoit.php b/ehcp/net2ftp/plugins/geshi/geshi/autoit.php new file mode 100644 index 0000000..54bcfd7 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/autoit.php @@ -0,0 +1,453 @@ + 'AutoIt', + 'COMMENT_SINGLE' => array(';'), + 'COMMENT_MULTI' => array('#comments-start' => '#comments-end', '#cs' => '#ce'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'false', 'and', 'byref', 'case', 'const', + 'continuecase', 'continueloop', 'default', 'dim', 'do', + 'else', 'elseif', 'endfunc', 'endif', 'endselect', + 'endswitch', 'endwith', 'enum', 'exit', 'exitloop', + 'for', 'func', 'global', 'if', 'in', + 'local', 'next', 'not', 'or', 'redim', + 'return', 'select', 'step', 'switch', 'then', + 'to', 'true', 'until', 'wend', 'while', + 'with' + ), + 2 => array( + '@appdatacommondir', '@appdatadir', '@autoitexe', '@autoitpid', + '@autoitversion', '@com_eventobj', '@commonfilesdir', '@compiled', + '@computername', '@comspec', '@cr', '@crlf', '@desktopcommondir', + '@desktopdepth', '@desktopdir', '@desktopheight', + '@desktoprefresh', '@desktopwidth', '@documentscommondir', + '@error', '@exitcode', '@exitmethod', '@extended', + '@favoritescommondir', '@favoritesdir', '@gui_ctrlhandle', + '@gui_ctrlid', '@gui_dragfile', '@gui_dragid', '@gui_dropid', + '@gui_winhandle', '@homedrive', '@homepath', '@homeshare', + '@hotkeypressed', '@hour', '@inetgetactive', '@inetgetbytesread', + '@ipaddress1', '@ipaddress2', '@ipaddress3', '@ipaddress4', + '@kblayout', '@lf', '@logondnsdomain', '@logondomain', + '@logonserver', '@mday', '@min', '@mon', '@mydocumentsdir', + '@numparams', '@osbuild', '@oslang', '@osservicepack', '@ostype', + '@osversion', '@processorarch', '@programfilesdir', + '@programscommondir', '@programsdir', '@scriptdir', + '@scriptfullpath', '@scriptlinenumber', '@scriptname', '@sec', + '@startmenucommondir', '@startmenudir', '@startupcommondir', + '@startupdir', '@sw_disable', '@sw_enable', '@sw_hide', '@sw_lock', + '@sw_maximize', '@sw_minimize', '@sw_restore', '@sw_show', + '@sw_showdefault', '@sw_showmaximized', '@sw_showminimized', + '@sw_showminnoactive', '@sw_showna', '@sw_shownoactivate', + '@sw_shownormal', '@sw_unlock', '@systemdir', '@tab', '@tempdir', + '@tray_id', '@trayiconflashing', '@trayiconvisible', '@username', + '@userprofiledir', '@wday', '@windowsdir', '@workingdir', '@yday', + '@year' + ), + 3 => array( + 'abs', 'acos', 'adlibdisable', 'adlibenable', 'asc', 'asin', + 'assign', 'atan', 'autoitsetoption', 'autoitwingettitle', + 'autoitwinsettitle', 'beep', 'binarystring', 'bitand', 'bitnot', + 'bitor', 'bitrotate', 'bitshift', 'bitxor', 'blockinput', 'break', + 'call', 'cdtray', 'ceiling', 'chr', 'clipget', 'clipput', + 'consoleread', 'consolewrite', 'consolewriteerror', 'controlclick', + 'controlcommand', 'controldisable', 'controlenable', + 'controlfocus', 'controlgetfocus', 'controlgethandle', + 'controlgetpos', 'controlgettext', 'controlhide', + 'controllistview', 'controlmove', 'controlsend', 'controlsettext', + 'controlshow', 'cos', 'dec', 'dircopy', 'dircreate', 'dirgetsize', + 'dirmove', 'dirremove', 'dllcall', 'dllclose', 'dllopen', + 'dllstructcreate', 'dllstructgetdata', 'dllstructgetptr', + 'dllstructgetsize', 'dllstructsetdata', 'drivegetdrive', + 'drivegetfilesystem', 'drivegetlabel', 'drivegetserial', + 'drivegettype', 'drivemapadd', 'drivemapdel', 'drivemapget', + 'drivesetlabel', 'drivespacefree', 'drivespacetotal', + 'drivestatus', 'envget', 'envset', 'envupdate', 'eval', 'execute', + 'exp', 'filechangedir', 'fileclose', 'filecopy', + 'filecreatentfslink', 'filecreateshortcut', 'filedelete', + 'fileexists', 'filefindfirstfile', 'filefindnextfile', + 'filegetattrib', 'filegetlongname', 'filegetshortcut', + 'filegetshortname', 'filegetsize', 'filegettime', 'filegetversion', + 'fileinstall', 'filemove', 'fileopen', 'fileopendialog', + 'fileread', 'filereadline', 'filerecycle', 'filerecycleempty', + 'filesavedialog', 'fileselectfolder', 'filesetattrib', + 'filesettime', 'filewrite', 'filewriteline', 'floor', + 'ftpsetproxy', 'guicreate', 'guictrlcreateavi', + 'guictrlcreatebutton', 'guictrlcreatecheckbox', + 'guictrlcreatecombo', 'guictrlcreatecontextmenu', + 'guictrlcreatedate', 'guictrlcreatedummy', 'guictrlcreateedit', + 'guictrlcreategraphic', 'guictrlcreategroup', 'guictrlcreateicon', + 'guictrlcreateinput', 'guictrlcreatelabel', 'guictrlcreatelist', + 'guictrlcreatelistview', 'guictrlcreatelistviewitem', + 'guictrlcreatemenu', 'guictrlcreatemenuitem', + 'guictrlcreatemonthcal', 'guictrlcreateobj', 'guictrlcreatepic', + 'guictrlcreateprogress', 'guictrlcreateradio', + 'guictrlcreateslider', 'guictrlcreatetab', 'guictrlcreatetabitem', + 'guictrlcreatetreeview', 'guictrlcreatetreeviewitem', + 'guictrlcreateupdown', 'guictrldelete', 'guictrlgethandle', + 'guictrlgetstate', 'guictrlread', 'guictrlrecvmsg', + 'guictrlregisterlistviewsort', 'guictrlsendmsg', + 'guictrlsendtodummy', 'guictrlsetbkcolor', 'guictrlsetcolor', + 'guictrlsetcursor', 'guictrlsetdata', 'guictrlsetfont', + 'guictrlsetgraphic', 'guictrlsetimage', 'guictrlsetlimit', + 'guictrlsetonevent', 'guictrlsetpos', 'guictrlsetresizing', + 'guictrlsetstate', 'guictrlsetstyle', 'guictrlsettip', 'guidelete', + 'guigetcursorinfo', 'guigetmsg', 'guiregistermsg', 'guisetbkcolor', + 'guisetcoord', 'guisetcursor', 'guisetfont', 'guisethelp', + 'guiseticon', 'guisetonevent', 'guisetstate', 'guistartgroup', + 'guiswitch', 'hex', 'hotkeyset', 'httpsetproxy', 'hwnd', 'inetget', + 'inetgetsize', 'inidelete', 'iniread', 'inireadsection', + 'inireadsectionnames', 'inirenamesection', 'iniwrite', + 'iniwritesection', 'inputbox', 'int', 'isadmin', 'isarray', + 'isbinarystring', 'isbool', 'isdeclared', 'isdllstruct', 'isfloat', + 'ishwnd', 'isint', 'iskeyword', 'isnumber', 'isobj', 'isstring', + 'log', 'memgetstats', 'mod', 'mouseclick', 'mouseclickdrag', + 'mousedown', 'mousegetcursor', 'mousegetpos', 'mousemove', + 'mouseup', 'mousewheel', 'msgbox', 'number', 'objcreate', + 'objevent', 'objget', 'objname', 'opt', 'ping', 'pixelchecksum', + 'pixelgetcolor', 'pixelsearch', 'pluginclose', 'pluginopen', + 'processclose', 'processexists', 'processlist', + 'processsetpriority', 'processwait', 'processwaitclose', + 'progressoff', 'progresson', 'progressset', 'random', 'regdelete', + 'regenumkey', 'regenumval', 'regread', 'regwrite', 'round', 'run', + 'runasset', 'runwait', 'send', 'seterror', 'setextended', + 'shellexecute', 'shellexecutewait', 'shutdown', 'sin', 'sleep', + 'soundplay', 'soundsetwavevolume', 'splashimageon', 'splashoff', + 'splashtexton', 'sqrt', 'srandom', 'statusbargettext', + 'stderrread', 'stdinwrite', 'stdoutread', 'string', 'stringaddcr', + 'stringformat', 'stringinstr', 'stringisalnum', 'stringisalpha', + 'stringisascii', 'stringisdigit', 'stringisfloat', 'stringisint', + 'stringislower', 'stringisspace', 'stringisupper', + 'stringisxdigit', 'stringleft', 'stringlen', 'stringlower', + 'stringmid', 'stringregexp', 'stringregexpreplace', + 'stringreplace', 'stringright', 'stringsplit', 'stringstripcr', + 'stringstripws', 'stringtrimleft', 'stringtrimright', + 'stringupper', 'tan', 'tcpaccept', 'tcpclosesocket', 'tcpconnect', + 'tcplisten', 'tcpnametoip', 'tcprecv', 'tcpsend', 'tcpshutdown', + 'tcpstartup', 'timerdiff', 'timerinit', 'timerstart', 'timerstop', + 'tooltip', 'traycreateitem', 'traycreatemenu', 'traygetmsg', + 'trayitemdelete', 'trayitemgethandle', 'trayitemgetstate', + 'trayitemgettext', 'trayitemsetonevent', 'trayitemsetstate', + 'trayitemsettext', 'traysetclick', 'trayseticon', 'traysetonevent', + 'traysetpauseicon', 'traysetstate', 'traysettooltip', 'traytip', + 'ubound', 'udpbind', 'udpclosesocket', 'udpopen', 'udprecv', + 'udpsend', 'winactivate', 'winactive', 'winclose', 'winexists', + 'winflash', 'wingetcaretpos', 'wingetclasslist', + 'wingetclientsize', 'wingethandle', 'wingetpos', 'wingetprocess', + 'wingetstate', 'wingettext', 'wingettitle', 'winkill', 'winlist', + 'winmenuselectitem', 'winminimizeall', 'winminimizeallundo', + 'winmove', 'winsetontop', 'winsetstate', 'winsettitle', + 'winsettrans', 'winshow', 'winwait', 'winwaitactive', + 'winwaitclose', 'winwaitnotactive' + ), + 4 => array( + '_arrayadd', '_arraybinarysearch', '_arraycreate', '_arraydelete', + '_arraydisplay', '_arrayinsert', '_arraymax', '_arraymaxindex', + '_arraymin', '_arrayminindex', '_arraypop', '_arraypush', + '_arrayreverse', '_arraysearch', '_arraysort', '_arrayswap', + '_arraytoclip', '_arraytostring', '_arraytrim', '_colorgetblue', + '_colorgetgreen', '_colorgetred', '_dateadd', '_datedayofweek', + '_datedaysinmonth', '_datediff', '_dateisleapyear', '_dateisvalid', + '_datetimeformat', '_datetimesplit', '_datetodayofweek', + '_datetodayofweekiso', '_datetodayvalue', '_dayvaluetodate', + '_now', '_nowcalc', '_nowcalcdate', '_nowdate', '_nowtime', + '_setdate', '_settime', '_tickstotime', '_timetoticks', + '_weeknumberiso', '_filecountlines', '_filecreate', + '_filelisttoarray', '_fileprint', '_filereadtoarray', + '_filewritefromarray', '_filewritelog', '_filewritetoline', + '_pathfull', '_pathmake', '_pathsplit', '_replacestringinfile', + '_tempfile', '_guictrlcomboadddir', '_guictrlcomboaddstring', + '_guictrlcomboautocomplete', '_guictrlcombodeletestring', + '_guictrlcombofindstring', '_guictrlcombogetcount', + '_guictrlcombogetcursel', '_guictrlcombogetdroppedcontrolrect', + '_guictrlcombogetdroppedstate', '_guictrlcombogetdroppedwidth', + '_guictrlcombogeteditsel', '_guictrlcombogetextendedui', + '_guictrlcombogethorizontalextent', '_guictrlcombogetitemheight', + '_guictrlcombogetlbtext', '_guictrlcombogetlbtextlen', + '_guictrlcombogetlist', '_guictrlcombogetlocale', + '_guictrlcombogetminvisible', '_guictrlcombogettopindex', + '_guictrlcomboinitstorage', '_guictrlcomboinsertstring', + '_guictrlcombolimittext', '_guictrlcomboresetcontent', + '_guictrlcomboselectstring', '_guictrlcombosetcursel', + '_guictrlcombosetdroppedwidth', '_guictrlcomboseteditsel', + '_guictrlcombosetextendedui', '_guictrlcombosethorizontalextent', + '_guictrlcombosetitemheight', '_guictrlcombosetminvisible', + '_guictrlcombosettopindex', '_guictrlcomboshowdropdown', + '_guictrleditcanundo', '_guictrleditemptyundobuffer', + '_guictrleditfind', '_guictrleditgetfirstvisibleline', + '_guictrleditgetline', '_guictrleditgetlinecount', + '_guictrleditgetmodify', '_guictrleditgetrect', + '_guictrleditgetsel', '_guictrleditlinefromchar', + '_guictrleditlineindex', '_guictrleditlinelength', + '_guictrleditlinescroll', '_guictrleditreplacesel', + '_guictrleditscroll', '_guictrleditsetmodify', + '_guictrleditsetrect', '_guictrleditsetsel', '_guictrleditundo', + '_guictrlipaddressclear', '_guictrlipaddresscreate', + '_guictrlipaddressdelete', '_guictrlipaddressget', + '_guictrlipaddressisblank', '_guictrlipaddressset', + '_guictrlipaddresssetfocus', '_guictrlipaddresssetfont', + '_guictrlipaddresssetrange', '_guictrlipaddressshowhide', + '_guictrllistadddir', '_guictrllistadditem', '_guictrllistclear', + '_guictrllistcount', '_guictrllistdeleteitem', + '_guictrllistfindstring', '_guictrllistgetanchorindex', + '_guictrllistgetcaretindex', '_guictrllistgethorizontalextent', + '_guictrllistgetinfo', '_guictrllistgetitemrect', + '_guictrllistgetlocale', '_guictrllistgetselcount', + '_guictrllistgetselitems', '_guictrllistgetselitemstext', + '_guictrllistgetselstate', '_guictrllistgettext', + '_guictrllistgettextlen', '_guictrllistgettopindex', + '_guictrllistinsertitem', '_guictrllistreplacestring', + '_guictrllistselectedindex', '_guictrllistselectindex', + '_guictrllistselectstring', '_guictrllistselitemrange', + '_guictrllistselitemrangeex', '_guictrllistsetanchorindex', + '_guictrllistsetcaretindex', '_guictrllistsethorizontalextent', + '_guictrllistsetlocale', '_guictrllistsetsel', + '_guictrllistsettopindex', '_guictrllistsort', + '_guictrllistswapstring', '_guictrllistviewcopyitems', + '_guictrllistviewdeleteallitems', '_guictrllistviewdeletecolumn', + '_guictrllistviewdeleteitem', + '_guictrllistviewdeleteitemsselected', + '_guictrllistviewensurevisible', '_guictrllistviewfinditem', + '_guictrllistviewgetbackcolor', '_guictrllistviewgetcallbackmask', + '_guictrllistviewgetcheckedstate', + '_guictrllistviewgetcolumnorder', '_guictrllistviewgetcolumnwidth', + '_guictrllistviewgetcounterpage', '_guictrllistviewgetcursel', + '_guictrllistviewgetextendedlistviewstyle', + '_guictrllistviewgetheader', '_guictrllistviewgethotcursor', + '_guictrllistviewgethotitem', '_guictrllistviewgethovertime', + '_guictrllistviewgetitemcount', '_guictrllistviewgetitemtext', + '_guictrllistviewgetitemtextarray', '_guictrllistviewgetnextitem', + '_guictrllistviewgetselectedcount', + '_guictrllistviewgetselectedindices', + '_guictrllistviewgetsubitemscount', '_guictrllistviewgettopindex', + '_guictrllistviewgetunicodeformat', '_guictrllistviewhidecolumn', + '_guictrllistviewinsertcolumn', '_guictrllistviewinsertitem', + '_guictrllistviewjustifycolumn', '_guictrllistviewscroll', + '_guictrllistviewsetcheckstate', + '_guictrllistviewsetcolumnheadertext', + '_guictrllistviewsetcolumnorder', '_guictrllistviewsetcolumnwidth', + '_guictrllistviewsethotitem', '_guictrllistviewsethovertime', + '_guictrllistviewsetitemcount', '_guictrllistviewsetitemselstate', + '_guictrllistviewsetitemtext', '_guictrllistviewsort', + '_guictrlmonthcalget1stdow', '_guictrlmonthcalgetcolor', + '_guictrlmonthcalgetdelta', '_guictrlmonthcalgetmaxselcount', + '_guictrlmonthcalgetmaxtodaywidth', + '_guictrlmonthcalgetminreqrect', '_guictrlmonthcalset1stdow', + '_guictrlmonthcalsetcolor', '_guictrlmonthcalsetdelta', + '_guictrlmonthcalsetmaxselcount', '_guictrlslidercleartics', + '_guictrlslidergetlinesize', '_guictrlslidergetnumtics', + '_guictrlslidergetpagesize', '_guictrlslidergetpos', + '_guictrlslidergetrangemax', '_guictrlslidergetrangemin', + '_guictrlslidersetlinesize', '_guictrlslidersetpagesize', + '_guictrlslidersetpos', '_guictrlslidersetticfreq', + '_guictrlstatusbarcreate', '_guictrlstatusbarcreateprogress', + '_guictrlstatusbardelete', '_guictrlstatusbargetborders', + '_guictrlstatusbargeticon', '_guictrlstatusbargetparts', + '_guictrlstatusbargetrect', '_guictrlstatusbargettext', + '_guictrlstatusbargettextlength', '_guictrlstatusbargettip', + '_guictrlstatusbargetunicode', '_guictrlstatusbarissimple', + '_guictrlstatusbarresize', '_guictrlstatusbarsetbkcolor', + '_guictrlstatusbarseticon', '_guictrlstatusbarsetminheight', + '_guictrlstatusbarsetparts', '_guictrlstatusbarsetsimple', + '_guictrlstatusbarsettext', '_guictrlstatusbarsettip', + '_guictrlstatusbarsetunicode', '_guictrlstatusbarshowhide', + '_guictrltabdeleteallitems', '_guictrltabdeleteitem', + '_guictrltabdeselectall', '_guictrltabgetcurfocus', + '_guictrltabgetcursel', '_guictrltabgetextendedstyle', + '_guictrltabgetitemcount', '_guictrltabgetitemrect', + '_guictrltabgetrowcount', '_guictrltabgetunicodeformat', + '_guictrltabhighlightitem', '_guictrltabsetcurfocus', + '_guictrltabsetcursel', '_guictrltabsetmintabwidth', + '_guictrltabsetunicodeformat', '_guictrltreeviewdeleteallitems', + '_guictrltreeviewdeleteitem', '_guictrltreeviewexpand', + '_guictrltreeviewgetbkcolor', '_guictrltreeviewgetcount', + '_guictrltreeviewgetindent', '_guictrltreeviewgetlinecolor', + '_guictrltreeviewgetparenthandle', '_guictrltreeviewgetparentid', + '_guictrltreeviewgetstate', '_guictrltreeviewgettext', + '_guictrltreeviewgettextcolor', '_guictrltreeviewgettree', + '_guictrltreeviewinsertitem', '_guictrltreeviewsetbkcolor', + '_guictrltreeviewseticon', '_guictrltreeviewsetindent', + '_guictrltreeviewsetlinecolor', '_guictrltreeviewsetstate', + '_guictrltreeviewsettext', '_guictrltreeviewsettextcolor', + '_guictrltreeviewsort', '_ie_example', '_ie_introduction', + '_ie_versioninfo', '_ieaction', '_ieattach', '_iebodyreadhtml', + '_iebodyreadtext', '_iebodywritehtml', '_iecreate', + '_iecreateembedded', '_iedocgetobj', '_iedocinserthtml', + '_iedocinserttext', '_iedocreadhtml', '_iedocwritehtml', + '_ieerrorhandlerderegister', '_ieerrorhandlerregister', + '_ieerrornotify', '_ieformelementcheckboxselect', + '_ieformelementgetcollection', '_ieformelementgetobjbyname', + '_ieformelementgetvalue', '_ieformelementoptionselect', + '_ieformelementradioselect', '_ieformelementsetvalue', + '_ieformgetcollection', '_ieformgetobjbyname', '_ieformimageclick', + '_ieformreset', '_ieformsubmit', '_ieframegetcollection', + '_ieframegetobjbyname', '_iegetobjbyname', + '_ieheadinserteventscript', '_ieimgclick', '_ieimggetcollection', + '_ieisframeset', '_ielinkclickbyindex', '_ielinkclickbytext', + '_ielinkgetcollection', '_ieloadwait', '_ieloadwaittimeout', + '_ienavigate', '_iepropertyget', '_iepropertyset', '_iequit', + '_ietablegetcollection', '_ietablewritetoarray', + '_ietagnameallgetcollection', '_ietagnamegetcollection', '_getip', + '_inetexplorercapable', '_inetgetsource', '_inetmail', + '_inetsmtpmail', '_tcpiptoname', '_degree', '_mathcheckdiv', + '_max', '_min', '_radian', '_choosecolor', '_choosefont', + '_clipputfile', '_iif', '_ispressed', '_mousetrap', '_singleton', + '_processgetname', '_processgetpriority', '_rundos', + '_sendmessage', '_soundclose', '_soundlength', '_soundopen', + '_soundpause', '_soundplay', '_soundpos', '_soundresume', + '_soundseek', '_soundstatus', '_soundstop', '_sqlite_changes', + '_sqlite_close', '_sqlite_display2dresult', '_sqlite_encode', + '_sqlite_errcode', '_sqlite_errmsg', '_sqlite_escape', + '_sqlite_exec', '_sqlite_fetchdata', '_sqlite_fetchnames', + '_sqlite_gettable', '_sqlite_gettable2d', + '_sqlite_lastinsertrowid', '_sqlite_libversion', '_sqlite_open', + '_sqlite_query', '_sqlite_queryfinalize', '_sqlite_queryreset', + '_sqlite_querysinglerow', '_sqlite_savemode', '_sqlite_settimeout', + '_sqlite_shutdown', '_sqlite_sqliteexe', '_sqlite_startup', + '_sqlite_totalchanges', '_hextostring', '_stringaddcomma', + '_stringbetween', '_stringencrypt', '_stringinsert', + '_stringproper', '_stringrepeat', '_stringreverse', '_stringtohex', + '_viclose', '_viexeccommand', '_vifindgpib', '_vigpibbusreset', + '_vigtl', '_viopen', '_visetattribute', '_visettimeout' + ), + 5 => array( + '#include', '#include-once', '#notrayicon' + ), + 6 => array( + '#forceref', '#compiler_allow_decompile', '#compiler_au3check_dat', + '#compiler_au3check_parameters', + '#compiler_au3check_stop_onwarning', '#compiler_aut2exe', + '#compiler_autoit3', '#compiler_compression', '#compiler_icon', + '#compiler_outfile', '#compiler_outfile_type', + '#compiler_passphrase', '#compiler_plugin_funcs', + '#compiler_prompt', '#compiler_res_comment', + '#compiler_res_description', '#compiler_res_field', + '#compiler_res_field1name', '#compiler_res_field1value', + '#compiler_res_field2name', '#compiler_res_field2value', + '#compiler_res_fileversion', + '#compiler_res_fileversion_autoincrement', + '#compiler_res_legalcopyright', '#compiler_run_after', + '#compiler_run_au3check', '#compiler_run_before', + '#compiler_run_cvswrapper', '#compiler_run_tidy', + '#compiler_tidy_stop_onerror', '#compiler_useupx', '#endregion', + '#region', '#run_debug_mode', '#tidy_parameters' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '&', '*', '/', '<', '>', '+', '-', '^', '=', '.' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF; font-weight: bold;', + 2 => 'color: #800000; font-weight: bold;', + 3 => 'color: #000080; font-style: italic; font-weight: bold;', + 4 => 'color: #0080FF; font-style: italic; font-weight: bold;', + 5 => 'color: #F000FF; font-style: italic;', + 6 => 'color: #A00FF0; font-style: italic;' + ), + 'COMMENTS' => array( + 0 => 'font-style: italic; color: #009933;', + 'MULTI' => 'font-style: italic; color: #669900;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000; font-weight: bold;' + ), + 'STRINGS' => array( + 0 => 'font-weight: bold; color: #008080;' + ), + 'NUMBERS' => array( + 0 => 'color: #AC00A9; font-style: italic; font-weight: bold;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF; font-style: italic; font-weight: bold;' + ), + 'SYMBOLS' => array( + 0 => 'color: #FF0000; font-weight: bold;' + ), + 'REGEXPS' => array( + 0 => 'font-weight: bold; color: #AA0000;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '', + 6 => '' + ) + ), + 'URLS' => array( + 1 => 'http://www.autoitscript.com/autoit3/docs/keywords.htm', + 2 => 'http://www.autoitscript.com/autoit3/docs/macros.htm', + 3 => 'http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*' + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/bash.php b/ehcp/net2ftp/plugins/geshi/geshi/bash.php new file mode 100644 index 0000000..55d295f --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/bash.php @@ -0,0 +1,205 @@ + 'Bash', + // Bash DOES have single line comments with # markers. But bash also has + // the $# variable, so comments need special handling (see sf.net + // 1564839) + 'COMMENT_SINGLE' => array('#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function', + 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time' + ), + 2 => array( + 'aclocal', 'aconnect', 'aplay', 'apm', 'apmsleep', 'apropos', + 'ar', 'arch', 'arecord', 'as', 'as86', 'autoconf', 'autoheader', + 'automake', 'awk', + 'basename', 'bc', 'bison', 'bunzip2', 'bzip2', 'bzcat', + 'bzcmp', 'bzdiff', 'bzegrep', 'bzegrep', 'bzfgrep', 'bzgrep', + 'bzip2', 'bzip2recover', 'bzless', 'bzmore', + 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia', + 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod', + 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co', + 'col', 'cp', 'cpio', 'cpp', 'cut', + 'date', 'dd', 'dc', 'dcop', 'deallocvt', 'df', 'diff', 'diff3', 'dir', + 'dircolors', 'directomatic', 'dirname', 'dmesg', + 'dnsdomainname', 'domainname', 'du', 'dumpkeys', + 'ed', 'egrep', 'env', 'expr', + 'false', 'fbset', 'fgconsole','fgrep', 'find', 'file', 'flex', 'flex++', + 'fmt', 'free', 'ftp', 'funzip', 'fuser', + 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes', + 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote', + 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip', + 'gzexe', 'gzip', + 'head', 'hexdump', 'hostname', + 'id', 'igawk', 'install', + 'join', + 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall', + 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link', 'ln', 'loadkeys', + 'loadunimap', 'locate', 'lockfile', 'login', 'logname', + 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old', 'lynx', + 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo', + 'mknod', 'mktemp', 'more', 'mount', 'msgfmt', 'mv', + 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice', + 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop', + 'od', 'openvt', + 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror', + 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree', + 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook', + 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops', + 'rbash', 'rcs', 'read', 'readlink', 'red', 'resizecons', 'rev', 'rm', + 'rmdir', 'run-parts', + 'sash', 'sed', 'setfont', 'setkeycodes', 'setleds', + 'setmetamode', 'setserial', 'scp', 'seq', 'setterm', 'sh', + 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep', 'slogin', + 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add', + 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strings', + 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'sync', + 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'true', + 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq', + 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users', + 'utmpdump', 'uuidgen', + 'vdir', 'vmstat', + 'w', 'wall', 'wc', 'wget', 'whatis', 'whereis', 'which', 'who', + 'whoami', 'write', + 'xargs', 'xhost', 'xmodmap', 'xset', + 'yacc', 'yes', 'ypdomainname', + 'zcat', 'zcmp', 'zdiff', 'zegrep', 'zfgrep', 'zforce', 'zgrep', + 'zip', 'zless', 'zmore', 'znew', 'zsh', ' zsoelim' + ), + 3 => array( + 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command', + 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown', + 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc', + 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'kill', 'let', + 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly', + 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times', + 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset', + 'wait' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #c20cb9; font-weight: bold;', + 3 => 'color: #7a0874; font-weight: bold;' + ), + 'COMMENTS' => array( + 0 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #7a0874; font-weight: bold;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #000000; font-weight: bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #007800;', + 1 => 'color: #007800;', + 2 => 'color: #007800;', +// 3 => 'color: #808080; font-style: italic;', + 4 => 'color: #007800;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}", + 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*", + 2 => "([a-zA-Z_][a-zA-Z0-9_]*)=", +// 3 => "(? "\\$[*#\$\\-\\?!]" + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'PARSER_CONTROL' => array( + 'COMMENTS' => array( + 'DISALLOWED_BEFORE' => '$' + ) + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/basic4gl.php b/ehcp/net2ftp/plugins/geshi/geshi/basic4gl.php new file mode 100644 index 0000000..d36c1fd --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/basic4gl.php @@ -0,0 +1,336 @@ + 'Basic4GL', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + + // Navy Blue Bold Keywords + + 'true','rnd_max','m_pi','m_e','false','VK_ZOOM','VK_UP','VK_TAB','VK_SUBTRACT','VK_SPACE','VK_SNAPSHOT', + 'VK_SHIFT','VK_SEPARATOR','VK_SELECT','VK_SCROLL','VK_RWIN','VK_RSHIFT','VK_RMENU','VK_RIGHT','VK_RETURN', + 'VK_RCONTROL','VK_RBUTTON','VK_PROCESSKEY','VK_PRIOR','VK_PRINT','VK_PLAY','VK_PAUSE','VK_NUMPAD9','VK_NUMPAD8', + 'VK_NUMPAD7','VK_NUMPAD6','VK_NUMPAD5','VK_NUMPAD4','VK_NUMPAD3','VK_NUMPAD2','VK_NUMPAD1','VK_NUMPAD0', + 'VK_NUMLOCK','VK_NONCONVERT','VK_NEXT','VK_MULTIPLY','VK_MODECHANGE','VK_MENU','VK_MBUTTON','VK_LWIN', + 'VK_LSHIFT','VK_LMENU','VK_LEFT','VK_LCONTROL','VK_LBUTTON','VK_KANJI','VK_KANA','VK_JUNJA','VK_INSERT', + 'VK_HOME','VK_HELP','VK_HANJA','VK_HANGUL','VK_HANGEUL','VK_FINAL','VK_F9','VK_F8','VK_F7','VK_F6','VK_F5', + 'VK_F4','VK_F3','VK_F24','VK_F23','VK_F22','VK_F21','VK_F20','VK_F2','VK_F19','VK_F18','VK_F17','VK_F16', + 'VK_F15','VK_F14','VK_F13','VK_F12','VK_F11','VK_F10','VK_F1','VK_EXSEL','VK_EXECUTE','VK_ESCAPE','VK_EREOF', + 'VK_END','VK_DOWN','VK_DIVIDE','VK_DELETE','VK_DECIMAL','VK_CRSEL','VK_CONVERT','VK_CONTROL','VK_CLEAR', + 'VK_CAPITAL','VK_CANCEL','VK_BACK','VK_ATTN','VK_APPS','VK_ADD','VK_ACCEPT','TEXT_SIMPLE','TEXT_OVERLAID', + 'TEXT_BUFFERED','SPR_TILEMAP','SPR_SPRITE','SPR_INVALID','MOUSE_RBUTTON','MOUSE_MBUTTON','MOUSE_LBUTTON', + 'GL_ZOOM_Y','GL_ZOOM_X','GL_ZERO','GL_XOR','GL_WIN_swap_hint','GL_WIN_draw_range_elements','GL_VIEWPORT_BIT', + 'GL_VIEWPORT','GL_VERTEX_ARRAY_TYPE_EXT','GL_VERTEX_ARRAY_TYPE','GL_VERTEX_ARRAY_STRIDE_EXT','GL_VERTEX_ARRAY_STRIDE', + 'GL_VERTEX_ARRAY_SIZE_EXT','GL_VERTEX_ARRAY_SIZE','GL_VERTEX_ARRAY_POINTER_EXT','GL_VERTEX_ARRAY_POINTER', + 'GL_VERTEX_ARRAY_EXT','GL_VERTEX_ARRAY_COUNT_EXT','GL_VERTEX_ARRAY','GL_VERSION_1_1','GL_VERSION','GL_VENDOR', + 'GL_V3F','GL_V2F','GL_UNSIGNED_SHORT','GL_UNSIGNED_INT','GL_UNSIGNED_BYTE','GL_UNPACK_SWAP_BYTES','GL_UNPACK_SKIP_ROWS', + 'GL_UNPACK_SKIP_PIXELS','GL_UNPACK_ROW_LENGTH','GL_UNPACK_LSB_FIRST','GL_UNPACK_ALIGNMENT','GL_TRUE','GL_TRIANGLE_STRIP', + 'GL_TRIANGLE_FAN','GL_TRIANGLES','GL_TRANSFORM_BIT','GL_TEXTURE_WRAP_T','GL_TEXTURE_WRAP_S','GL_TEXTURE_WIDTH', + 'GL_TEXTURE_STACK_DEPTH','GL_TEXTURE_RESIDENT','GL_TEXTURE_RED_SIZE','GL_TEXTURE_PRIORITY','GL_TEXTURE_MIN_FILTER', + 'GL_TEXTURE_MATRIX','GL_TEXTURE_MAG_FILTER','GL_TEXTURE_LUMINANCE_SIZE','GL_TEXTURE_INTERNAL_FORMAT','GL_TEXTURE_INTENSITY_SIZE', + 'GL_TEXTURE_HEIGHT','GL_TEXTURE_GREEN_SIZE','GL_TEXTURE_GEN_T','GL_TEXTURE_GEN_S','GL_TEXTURE_GEN_R','GL_TEXTURE_GEN_Q', + 'GL_TEXTURE_GEN_MODE','GL_TEXTURE_ENV_MODE','GL_TEXTURE_ENV_COLOR','GL_TEXTURE_ENV','GL_TEXTURE_COORD_ARRAY_TYPE_EXT', + 'GL_TEXTURE_COORD_ARRAY_TYPE','GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','GL_TEXTURE_COORD_ARRAY_STRIDE','GL_TEXTURE_COORD_ARRAY_SIZE_EXT', + 'GL_TEXTURE_COORD_ARRAY_SIZE','GL_TEXTURE_COORD_ARRAY_POINTER_EXT','GL_TEXTURE_COORD_ARRAY_POINTER','GL_TEXTURE_COORD_ARRAY_EXT', + 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT','GL_TEXTURE_COORD_ARRAY','GL_TEXTURE_COMPONENTS','GL_TEXTURE_BORDER_COLOR','GL_TEXTURE_BORDER', + 'GL_TEXTURE_BLUE_SIZE','GL_TEXTURE_BIT','GL_TEXTURE_BINDING_2D','GL_TEXTURE_BINDING_1D','GL_TEXTURE_ALPHA_SIZE', + 'GL_TEXTURE_2D','GL_TEXTURE_1D','GL_TEXTURE9_ARB','GL_TEXTURE9','GL_TEXTURE8_ARB','GL_TEXTURE8','GL_TEXTURE7_ARB', + 'GL_TEXTURE7','GL_TEXTURE6_ARB','GL_TEXTURE6','GL_TEXTURE5_ARB','GL_TEXTURE5','GL_TEXTURE4_ARB','GL_TEXTURE4', + 'GL_TEXTURE3_ARB','GL_TEXTURE31_ARB','GL_TEXTURE31','GL_TEXTURE30_ARB','GL_TEXTURE30','GL_TEXTURE3','GL_TEXTURE2_ARB', + 'GL_TEXTURE29_ARB','GL_TEXTURE29','GL_TEXTURE28_ARB','GL_TEXTURE28','GL_TEXTURE27_ARB','GL_TEXTURE27','GL_TEXTURE26_ARB', + 'GL_TEXTURE26','GL_TEXTURE25_ARB','GL_TEXTURE25','GL_TEXTURE24_ARB','GL_TEXTURE24','GL_TEXTURE23_ARB','GL_TEXTURE23', + 'GL_TEXTURE22_ARB','GL_TEXTURE22','GL_TEXTURE21_ARB','GL_TEXTURE21','GL_TEXTURE20_ARB','GL_TEXTURE20','GL_TEXTURE2', + 'GL_TEXTURE1_ARB','GL_TEXTURE19_ARB','GL_TEXTURE19','GL_TEXTURE18_ARB','GL_TEXTURE18','GL_TEXTURE17_ARB', + 'GL_TEXTURE17','GL_TEXTURE16_ARB','GL_TEXTURE16','GL_TEXTURE15_ARB','GL_TEXTURE15','GL_TEXTURE14_ARB','GL_TEXTURE14', + 'GL_TEXTURE13_ARB','GL_TEXTURE13','GL_TEXTURE12_ARB','GL_TEXTURE12','GL_TEXTURE11_ARB','GL_TEXTURE11','GL_TEXTURE10_ARB', + 'GL_TEXTURE10','GL_TEXTURE1','GL_TEXTURE0_ARB','GL_TEXTURE0','GL_TEXTURE','GL_T4F_V4F','GL_T4F_C4F_N3F_V4F','GL_T2F_V3F', + 'GL_T2F_N3F_V3F','GL_T2F_C4UB_V3F','GL_T2F_C4F_N3F_V3F','GL_T2F_C3F_V3F','GL_T','GL_SUBPIXEL_BITS','GL_STEREO', + 'GL_STENCIL_WRITEMASK','GL_STENCIL_VALUE_MASK','GL_STENCIL_TEST','GL_STENCIL_REF','GL_STENCIL_PASS_DEPTH_PASS', + 'GL_STENCIL_PASS_DEPTH_FAIL','GL_STENCIL_INDEX','GL_STENCIL_FUNC','GL_STENCIL_FAIL','GL_STENCIL_CLEAR_VALUE', + 'GL_STENCIL_BUFFER_BIT','GL_STENCIL_BITS','GL_STENCIL','GL_STACK_UNDERFLOW','GL_STACK_OVERFLOW','GL_SRC_COLOR', + 'GL_SRC_ALPHA_SATURATE','GL_SRC_ALPHA','GL_SPOT_EXPONENT','GL_SPOT_DIRECTION','GL_SPOT_CUTOFF','GL_SPHERE_MAP', + 'GL_SPECULAR','GL_SOURCE2_RGB_EXT','GL_SOURCE2_RGB','GL_SOURCE2_ALPHA_EXT','GL_SOURCE2_ALPHA','GL_SOURCE1_RGB_EXT', + 'GL_SOURCE1_RGB','GL_SOURCE1_ALPHA_EXT','GL_SOURCE1_ALPHA','GL_SOURCE0_RGB_EXT','GL_SOURCE0_RGB','GL_SOURCE0_ALPHA_EXT', + 'GL_SOURCE0_ALPHA','GL_SMOOTH','GL_SHORT','GL_SHININESS','GL_SHADE_MODEL','GL_SET','GL_SELECTION_BUFFER_SIZE', + 'GL_SELECTION_BUFFER_POINTER','GL_SELECT','GL_SCISSOR_TEST','GL_SCISSOR_BOX','GL_SCISSOR_BIT','GL_S','GL_RIGHT', + 'GL_RGB_SCALE_EXT','GL_RGB_SCALE','GL_RGBA_MODE','GL_RGBA8','GL_RGBA4','GL_RGBA2','GL_RGBA16','GL_RGBA12','GL_RGBA', + 'GL_RGB8','GL_RGB5_A1','GL_RGB5','GL_RGB4','GL_RGB16','GL_RGB12','GL_RGB10_A2','GL_RGB10','GL_RGB','GL_RETURN', + 'GL_REPLACE','GL_REPEAT','GL_RENDER_MODE','GL_RENDERER','GL_RENDER','GL_RED_SCALE','GL_RED_BITS','GL_RED_BIAS', + 'GL_RED','GL_READ_BUFFER','GL_R3_G3_B2','GL_R','GL_QUAD_STRIP','GL_QUADS','GL_QUADRATIC_ATTENUATION','GL_Q', + 'GL_PROXY_TEXTURE_2D','GL_PROXY_TEXTURE_1D','GL_PROJECTION_STACK_DEPTH','GL_PROJECTION_MATRIX','GL_PROJECTION', + 'GL_PRIMARY_COLOR_EXT','GL_PRIMARY_COLOR','GL_PREVIOUS_EXT','GL_PREVIOUS','GL_POSITION','GL_POLYGON_TOKEN', + 'GL_POLYGON_STIPPLE_BIT','GL_POLYGON_STIPPLE','GL_POLYGON_SMOOTH_HINT','GL_POLYGON_SMOOTH','GL_POLYGON_OFFSET_UNITS', + 'GL_POLYGON_OFFSET_POINT','GL_POLYGON_OFFSET_LINE','GL_POLYGON_OFFSET_FILL','GL_POLYGON_OFFSET_FACTOR','GL_POLYGON_MODE', + 'GL_POLYGON_BIT','GL_POLYGON','GL_POINT_TOKEN','GL_POINT_SMOOTH_HINT','GL_POINT_SMOOTH','GL_POINT_SIZE_RANGE', + 'GL_POINT_SIZE_GRANULARITY','GL_POINT_SIZE','GL_POINT_BIT','GL_POINTS','GL_POINT','GL_PIXEL_MODE_BIT', + 'GL_PIXEL_MAP_S_TO_S_SIZE','GL_PIXEL_MAP_S_TO_S','GL_PIXEL_MAP_R_TO_R_SIZE','GL_PIXEL_MAP_R_TO_R','GL_PIXEL_MAP_I_TO_R_SIZE', + 'GL_PIXEL_MAP_I_TO_R','GL_PIXEL_MAP_I_TO_I_SIZE','GL_PIXEL_MAP_I_TO_I','GL_PIXEL_MAP_I_TO_G_SIZE','GL_PIXEL_MAP_I_TO_G', + 'GL_PIXEL_MAP_I_TO_B_SIZE','GL_PIXEL_MAP_I_TO_B','GL_PIXEL_MAP_I_TO_A_SIZE','GL_PIXEL_MAP_I_TO_A','GL_PIXEL_MAP_G_TO_G_SIZE', + 'GL_PIXEL_MAP_G_TO_G','GL_PIXEL_MAP_B_TO_B_SIZE','GL_PIXEL_MAP_B_TO_B','GL_PIXEL_MAP_A_TO_A_SIZE','GL_PIXEL_MAP_A_TO_A', + 'GL_PHONG_WIN','GL_PHONG_HINT_WIN','GL_PERSPECTIVE_CORRECTION_HINT','GL_PASS_THROUGH_TOKEN','GL_PACK_SWAP_BYTES', + 'GL_PACK_SKIP_ROWS','GL_PACK_SKIP_PIXELS','GL_PACK_ROW_LENGTH','GL_PACK_LSB_FIRST','GL_PACK_ALIGNMENT','GL_OUT_OF_MEMORY', + 'GL_OR_REVERSE','GL_OR_INVERTED','GL_ORDER','GL_OR','GL_OPERAND2_RGB_EXT','GL_OPERAND2_RGB','GL_OPERAND2_ALPHA_EXT', + 'GL_OPERAND2_ALPHA','GL_OPERAND1_RGB_EXT','GL_OPERAND1_RGB','GL_OPERAND1_ALPHA_EXT','GL_OPERAND1_ALPHA','GL_OPERAND0_RGB_EXT', + 'GL_OPERAND0_RGB','GL_OPERAND0_ALPHA_EXT','GL_OPERAND0_ALPHA','GL_ONE_MINUS_SRC_COLOR','GL_ONE_MINUS_SRC_ALPHA', + 'GL_ONE_MINUS_DST_COLOR','GL_ONE_MINUS_DST_ALPHA','GL_ONE','GL_OBJECT_PLANE','GL_OBJECT_LINEAR','GL_NO_ERROR', + 'GL_NOTEQUAL','GL_NORMAL_ARRAY_TYPE_EXT','GL_NORMAL_ARRAY_TYPE','GL_NORMAL_ARRAY_STRIDE_EXT','GL_NORMAL_ARRAY_STRIDE', + 'GL_NORMAL_ARRAY_POINTER_EXT','GL_NORMAL_ARRAY_POINTER','GL_NORMAL_ARRAY_EXT','GL_NORMAL_ARRAY_COUNT_EXT', + 'GL_NORMAL_ARRAY','GL_NORMALIZE','GL_NOR','GL_NOOP','GL_NONE','GL_NICEST','GL_NEVER','GL_NEAREST_MIPMAP_NEAREST','GL_NEAREST_MIPMAP_LINEAR', + 'GL_NEAREST','GL_NAND','GL_NAME_STACK_DEPTH','GL_N3F_V3F','GL_MULT','GL_MODULATE','GL_MODELVIEW_STACK_DEPTH','GL_MODELVIEW_MATRIX', + 'GL_MODELVIEW','GL_MAX_VIEWPORT_DIMS','GL_MAX_TEXTURE_UNITS_ARB','GL_MAX_TEXTURE_UNITS','GL_MAX_TEXTURE_STACK_DEPTH', + 'GL_MAX_TEXTURE_SIZE','GL_MAX_PROJECTION_STACK_DEPTH','GL_MAX_PIXEL_MAP_TABLE','GL_MAX_NAME_STACK_DEPTH','GL_MAX_MODELVIEW_STACK_DEPTH', + 'GL_MAX_LIST_NESTING','GL_MAX_LIGHTS','GL_MAX_EVAL_ORDER','GL_MAX_ELEMENTS_VERTICES_WIN','GL_MAX_ELEMENTS_INDICES_WIN', + 'GL_MAX_CLIP_PLANES','GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','GL_MAX_ATTRIB_STACK_DEPTH','GL_MATRIX_MODE','GL_MAP_STENCIL', + 'GL_MAP_COLOR','GL_MAP2_VERTEX_4','GL_MAP2_VERTEX_3','GL_MAP2_TEXTURE_COORD_4','GL_MAP2_TEXTURE_COORD_3','GL_MAP2_TEXTURE_COORD_2', + 'GL_MAP2_TEXTURE_COORD_1','GL_MAP2_NORMAL','GL_MAP2_INDEX','GL_MAP2_GRID_SEGMENTS','GL_MAP2_GRID_DOMAIN','GL_MAP2_COLOR_4', + 'GL_MAP1_VERTEX_4','GL_MAP1_VERTEX_3','GL_MAP1_TEXTURE_COORD_4','GL_MAP1_TEXTURE_COORD_3','GL_MAP1_TEXTURE_COORD_2', + 'GL_MAP1_TEXTURE_COORD_1','GL_MAP1_NORMAL','GL_MAP1_INDEX','GL_MAP1_GRID_SEGMENTS','GL_MAP1_GRID_DOMAIN', + 'GL_MAP1_COLOR_4','GL_LUMINANCE_ALPHA','GL_LUMINANCE8_ALPHA8','GL_LUMINANCE8','GL_LUMINANCE6_ALPHA2','GL_LUMINANCE4_ALPHA4', + 'GL_LUMINANCE4','GL_LUMINANCE16_ALPHA16','GL_LUMINANCE16','GL_LUMINANCE12_ALPHA4','GL_LUMINANCE12_ALPHA12','GL_LUMINANCE12', + 'GL_LUMINANCE','GL_LOGIC_OP_MODE','GL_LOGIC_OP','GL_LOAD','GL_LIST_MODE','GL_LIST_INDEX','GL_LIST_BIT', + 'GL_LIST_BASE','GL_LINE_WIDTH_RANGE','GL_LINE_WIDTH_GRANULARITY','GL_LINE_WIDTH','GL_LINE_TOKEN','GL_LINE_STRIP','GL_LINE_STIPPLE_REPEAT', + 'GL_LINE_STIPPLE_PATTERN','GL_LINE_STIPPLE','GL_LINE_SMOOTH_HINT','GL_LINE_SMOOTH','GL_LINE_RESET_TOKEN','GL_LINE_LOOP', + 'GL_LINE_BIT','GL_LINES','GL_LINEAR_MIPMAP_NEAREST','GL_LINEAR_MIPMAP_LINEAR','GL_LINEAR_ATTENUATION','GL_LINEAR', + 'GL_LINE','GL_LIGHT_MODEL_TWO_SIDE','GL_LIGHT_MODEL_LOCAL_VIEWER','GL_LIGHT_MODEL_AMBIENT','GL_LIGHTING_BIT', + 'GL_LIGHTING','GL_LIGHT7','GL_LIGHT6','GL_LIGHT5','GL_LIGHT4','GL_LIGHT3','GL_LIGHT2','GL_LIGHT1','GL_LIGHT0', + 'GL_LESS','GL_LEQUAL','GL_LEFT','GL_KEEP','GL_INVERT','GL_INVALID_VALUE','GL_INVALID_OPERATION','GL_INVALID_ENUM','GL_INTERPOLATE_EXT', + 'GL_INTERPOLATE','GL_INTENSITY8','GL_INTENSITY4','GL_INTENSITY16','GL_INTENSITY12','GL_INTENSITY','GL_INT', + 'GL_INDEX_WRITEMASK','GL_INDEX_SHIFT','GL_INDEX_OFFSET','GL_INDEX_MODE','GL_INDEX_LOGIC_OP','GL_INDEX_CLEAR_VALUE','GL_INDEX_BITS', + 'GL_INDEX_ARRAY_TYPE_EXT','GL_INDEX_ARRAY_TYPE','GL_INDEX_ARRAY_STRIDE_EXT','GL_INDEX_ARRAY_STRIDE','GL_INDEX_ARRAY_POINTER_EXT', + 'GL_INDEX_ARRAY_POINTER','GL_INDEX_ARRAY_EXT','GL_INDEX_ARRAY_COUNT_EXT','GL_INDEX_ARRAY','GL_INCR','GL_HINT_BIT', + 'GL_GREEN_SCALE','GL_GREEN_BITS','GL_GREEN_BIAS','GL_GREEN','GL_GREATER','GL_GEQUAL','GL_FRONT_RIGHT','GL_FRONT_LEFT', + 'GL_FRONT_FACE','GL_FRONT_AND_BACK','GL_FRONT','GL_FOG_START','GL_FOG_SPECULAR_TEXTURE_WIN','GL_FOG_MODE','GL_FOG_INDEX', + 'GL_FOG_HINT','GL_FOG_END','GL_FOG_DENSITY','GL_FOG_COLOR','GL_FOG_BIT','GL_FOG','GL_FLOAT','GL_FLAT','GL_FILL', + 'GL_FEEDBACK_BUFFER_TYPE','GL_FEEDBACK_BUFFER_SIZE','GL_FEEDBACK_BUFFER_POINTER','GL_FEEDBACK','GL_FASTEST','GL_FALSE', + 'GL_EYE_PLANE','GL_EYE_LINEAR','GL_EXT_vertex_array','GL_EXT_paletted_texture','GL_EXT_bgra','GL_EXTENSIONS','GL_EXP2', + 'GL_EXP','GL_EVAL_BIT','GL_EQUIV','GL_EQUAL','GL_ENABLE_BIT','GL_EMISSION','GL_EDGE_FLAG_ARRAY_STRIDE_EXT','GL_EDGE_FLAG_ARRAY_STRIDE', + 'GL_EDGE_FLAG_ARRAY_POINTER_EXT','GL_EDGE_FLAG_ARRAY_POINTER','GL_EDGE_FLAG_ARRAY_EXT','GL_EDGE_FLAG_ARRAY_COUNT_EXT','GL_EDGE_FLAG_ARRAY', + 'GL_EDGE_FLAG','GL_DST_COLOR','GL_DST_ALPHA','GL_DRAW_PIXEL_TOKEN','GL_DRAW_BUFFER','GL_DOUBLE_EXT','GL_DOUBLEBUFFER', + 'GL_DOUBLE','GL_DONT_CARE','GL_DOMAIN','GL_DITHER','GL_DIFFUSE','GL_DEPTH_WRITEMASK','GL_DEPTH_TEST','GL_DEPTH_SCALE', + 'GL_DEPTH_RANGE','GL_DEPTH_FUNC','GL_DEPTH_COMPONENT','GL_DEPTH_CLEAR_VALUE','GL_DEPTH_BUFFER_BIT','GL_DEPTH_BITS', + 'GL_DEPTH_BIAS','GL_DEPTH','GL_DECR','GL_DECAL','GL_CW','GL_CURRENT_TEXTURE_COORDS','GL_CURRENT_RASTER_TEXTURE_COORDS','GL_CURRENT_RASTER_POSITION_VALID', + 'GL_CURRENT_RASTER_POSITION','GL_CURRENT_RASTER_INDEX','GL_CURRENT_RASTER_DISTANCE','GL_CURRENT_RASTER_COLOR','GL_CURRENT_NORMAL', + 'GL_CURRENT_INDEX','GL_CURRENT_COLOR','GL_CURRENT_BIT','GL_CULL_FACE_MODE','GL_CULL_FACE','GL_COPY_PIXEL_TOKEN', + 'GL_COPY_INVERTED','GL_COPY','GL_CONSTANT_EXT','GL_CONSTANT_ATTENUATION','GL_CONSTANT','GL_COMPILE_AND_EXECUTE','GL_COMPILE','GL_COMBINE_RGB_EXT', + 'GL_COMBINE_RGB','GL_COMBINE_EXT','GL_COMBINE_ALPHA_EXT','GL_COMBINE_ALPHA','GL_COMBINE','GL_COLOR_WRITEMASK', + 'GL_COLOR_TABLE_WIDTH_EXT','GL_COLOR_TABLE_RED_SIZE_EXT','GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','GL_COLOR_TABLE_INTENSITY_SIZE_EXT', + 'GL_COLOR_TABLE_GREEN_SIZE_EXT','GL_COLOR_TABLE_FORMAT_EXT','GL_COLOR_TABLE_BLUE_SIZE_EXT','GL_COLOR_TABLE_ALPHA_SIZE_EXT', + 'GL_COLOR_MATERIAL_PARAMETER','GL_COLOR_MATERIAL_FACE','GL_COLOR_MATERIAL','GL_COLOR_LOGIC_OP','GL_COLOR_INDEXES', + 'GL_COLOR_INDEX8_EXT','GL_COLOR_INDEX4_EXT','GL_COLOR_INDEX2_EXT','GL_COLOR_INDEX1_EXT','GL_COLOR_INDEX16_EXT', + 'GL_COLOR_INDEX12_EXT','GL_COLOR_INDEX','GL_COLOR_CLEAR_VALUE','GL_COLOR_BUFFER_BIT','GL_COLOR_ARRAY_TYPE_EXT', + 'GL_COLOR_ARRAY_TYPE','GL_COLOR_ARRAY_STRIDE_EXT','GL_COLOR_ARRAY_STRIDE','GL_COLOR_ARRAY_SIZE_EXT','GL_COLOR_ARRAY_SIZE', + 'GL_COLOR_ARRAY_POINTER_EXT','GL_COLOR_ARRAY_POINTER','GL_COLOR_ARRAY_EXT','GL_COLOR_ARRAY_COUNT_EXT','GL_COLOR_ARRAY', + 'GL_COLOR','GL_COEFF','GL_CLIP_PLANE5','GL_CLIP_PLANE4','GL_CLIP_PLANE3','GL_CLIP_PLANE2','GL_CLIP_PLANE1','GL_CLIP_PLANE0', + 'GL_CLIENT_VERTEX_ARRAY_BIT','GL_CLIENT_PIXEL_STORE_BIT','GL_CLIENT_ATTRIB_STACK_DEPTH','GL_CLIENT_ALL_ATTRIB_BITS', + 'GL_CLIENT_ACTIVE_TEXTURE_ARB','GL_CLIENT_ACTIVE_TEXTURE','GL_CLEAR','GL_CLAMP','GL_CCW','GL_C4UB_V3F','GL_C4UB_V2F', + 'GL_C4F_N3F_V3F','GL_C3F_V3F','GL_BYTE','GL_BLUE_SCALE','GL_BLUE_BITS','GL_BLUE_BIAS','GL_BLUE','GL_BLEND_SRC','GL_BLEND_DST', + 'GL_BLEND','GL_BITMAP_TOKEN','GL_BITMAP','GL_BGR_EXT','GL_BGRA_EXT','GL_BACK_RIGHT','GL_BACK_LEFT','GL_BACK', + 'GL_AUX_BUFFERS','GL_AUX3','GL_AUX2','GL_AUX1','GL_AUX0','GL_AUTO_NORMAL','GL_ATTRIB_STACK_DEPTH','GL_AND_REVERSE', + 'GL_AND_INVERTED','GL_AND','GL_AMBIENT_AND_DIFFUSE','GL_AMBIENT','GL_ALWAYS','GL_ALPHA_TEST_REF','GL_ALPHA_TEST_FUNC', + 'GL_ALPHA_TEST','GL_ALPHA_SCALE','GL_ALPHA_BITS','GL_ALPHA_BIAS','GL_ALPHA8','GL_ALPHA4','GL_ALPHA16','GL_ALPHA12', + 'GL_ALPHA','GL_ALL_ATTRIB_BITS','GL_ADD_SIGNED_EXT','GL_ADD_SIGNED','GL_ADD','GL_ACTIVE_TEXTURE_ARB','GL_ACTIVE_TEXTURE', + 'GL_ACCUM_RED_BITS','GL_ACCUM_GREEN_BITS','GL_ACCUM_CLEAR_VALUE','GL_ACCUM_BUFFER_BIT','GL_ACCUM_BLUE_BITS','GL_ACCUM_ALPHA_BITS', + 'GL_ACCUM','GL_4_BYTES','GL_4D_COLOR_TEXTURE','GL_3_BYTES','GL_3D_COLOR_TEXTURE','GL_3D_COLOR','GL_3D','GL_2_BYTES', + 'GL_2D','GLU_V_STEP','GLU_VERTEX','GLU_VERSION_1_2','GLU_VERSION_1_1','GLU_VERSION','GLU_U_STEP','GLU_UNKNOWN','GLU_TRUE', + 'GLU_TESS_WINDING_RULE','GLU_TESS_WINDING_POSITIVE','GLU_TESS_WINDING_ODD','GLU_TESS_WINDING_NONZERO','GLU_TESS_WINDING_NEGATIVE', + 'GLU_TESS_WINDING_ABS_GEQ_TWO','GLU_TESS_VERTEX_DATA','GLU_TESS_VERTEX','GLU_TESS_TOLERANCE','GLU_TESS_NEED_COMBINE_CALLBACK','GLU_TESS_MISSING_END_POLYGON', + 'GLU_TESS_MISSING_END_CONTOUR','GLU_TESS_MISSING_BEGIN_POLYGON','GLU_TESS_MISSING_BEGIN_CONTOUR','GLU_TESS_ERROR_DATA', + 'GLU_TESS_ERROR8','GLU_TESS_ERROR7','GLU_TESS_ERROR6','GLU_TESS_ERROR5','GLU_TESS_ERROR4','GLU_TESS_ERROR3','GLU_TESS_ERROR2', + 'GLU_TESS_ERROR1','GLU_TESS_ERROR','GLU_TESS_END_DATA','GLU_TESS_END','GLU_TESS_EDGE_FLAG_DATA','GLU_TESS_EDGE_FLAG', + 'GLU_TESS_COORD_TOO_LARGE','GLU_TESS_COMBINE_DATA','GLU_TESS_COMBINE','GLU_TESS_BOUNDARY_ONLY','GLU_TESS_BEGIN_DATA', + 'GLU_TESS_BEGIN','GLU_SMOOTH','GLU_SILHOUETTE','GLU_SAMPLING_TOLERANCE','GLU_SAMPLING_METHOD','GLU_POINT','GLU_PATH_LENGTH', + 'GLU_PARAMETRIC_TOLERANCE','GLU_PARAMETRIC_ERROR','GLU_OUT_OF_MEMORY','GLU_OUTSIDE','GLU_OUTLINE_POLYGON','GLU_OUTLINE_PATCH', + 'GLU_NURBS_ERROR9','GLU_NURBS_ERROR8','GLU_NURBS_ERROR7','GLU_NURBS_ERROR6','GLU_NURBS_ERROR5','GLU_NURBS_ERROR4', + 'GLU_NURBS_ERROR37','GLU_NURBS_ERROR36','GLU_NURBS_ERROR35','GLU_NURBS_ERROR34','GLU_NURBS_ERROR33','GLU_NURBS_ERROR32', + 'GLU_NURBS_ERROR31','GLU_NURBS_ERROR30','GLU_NURBS_ERROR3','GLU_NURBS_ERROR29','GLU_NURBS_ERROR28','GLU_NURBS_ERROR27','GLU_NURBS_ERROR26', + 'GLU_NURBS_ERROR25','GLU_NURBS_ERROR24','GLU_NURBS_ERROR23','GLU_NURBS_ERROR22','GLU_NURBS_ERROR21','GLU_NURBS_ERROR20', + 'GLU_NURBS_ERROR2','GLU_NURBS_ERROR19','GLU_NURBS_ERROR18','GLU_NURBS_ERROR17','GLU_NURBS_ERROR16','GLU_NURBS_ERROR15','GLU_NURBS_ERROR14', + 'GLU_NURBS_ERROR13','GLU_NURBS_ERROR12','GLU_NURBS_ERROR11','GLU_NURBS_ERROR10','GLU_NURBS_ERROR1','GLU_NONE', + 'GLU_MAP1_TRIM_3','GLU_MAP1_TRIM_2','GLU_LINE','GLU_INVALID_VALUE','GLU_INVALID_ENUM','GLU_INTERIOR','GLU_INSIDE','GLU_INCOMPATIBLE_GL_VERSION', + 'GLU_FLAT','GLU_FILL','GLU_FALSE','GLU_EXTERIOR','GLU_EXTENSIONS','GLU_ERROR','GLU_END','GLU_EDGE_FLAG','GLU_DOMAIN_DISTANCE', + 'GLU_DISPLAY_MODE','GLU_CW','GLU_CULLING','GLU_CCW','GLU_BEGIN','GLU_AUTO_LOAD_MATRIX','CHANNEL_UNORDERED','CHANNEL_ORDERED', + 'CHANNEL_MAX' + ), + 2 => array( + + // Red Lowercase Keywords + + 'WriteWord','WriteString','WriteReal','WriteLine','WriteInt','WriteFloat','WriteDouble','WriteChar','WriteByte', + 'windowwidth','windowheight','waittimer','Vec4','Vec3','Vec2','val','UpdateJoystick','ucase$','Transpose','tickcount', + 'textscroll','textrows','textmode','textcols','tanh','tand','tan','synctimercatchup','synctimer','swapbuffers', + 'str$','stopsoundvoice','stopsounds','stopmusic','sqrt','sqr','sprzorder','spryvel','sprytiles','sprysize','spryrepeat', + 'spryflip','sprycentre','spry','sprxvel','sprxtiles','sprxsize','sprxrepeat','sprxflip','sprxcentre','sprx', + 'sprvisible','sprvel','sprtype','sprtop','sprspin','sprsolid','sprsetzorder','sprsetyvel','sprsetysize','sprsetyrepeat', + 'sprsetyflip','sprsetycentre','sprsety','sprsetxvel','sprsetxsize','sprsetxrepeat','sprsetxflip','sprsetxcentre', + 'sprsetx','sprsetvisible','sprsetvel','sprsettiles','sprsettextures','sprsettexture','sprsetspin','sprsetsolid', + 'sprsetsize','sprsetscale','sprsetpos','sprsetparallax','sprsetframe','sprsetcolor','sprsetanimspeed','sprsetanimloop', + 'sprsetangle','sprsetalpha','sprscale','sprright','sprpos','sprparallax','sprleft','spriteareawidth','spriteareaheight', + 'sprframe','sprcolor','sprcameraz','sprcameray','sprcamerax','sprcamerasetz','sprcamerasety','sprcamerasetx', + 'sprcamerasetpos','sprcamerasetfov','sprcamerasetangle','sprcamerapos','sprcamerafov','sprcameraangle', + 'sprbottom','spranimspeed','spranimloop','spranimdone','sprangle','spralpha','spraddtextures','spraddtexture', + 'sounderror','sleep','sind','sin','showcursor','sgn','settextscroll','setmusicvolume','SendMessage','Seek', + 'scankeydown','RTInvert','rnd','right$','resizetext','resizespritearea','RejectConnection','ReceiveMessage','ReadWord', + 'ReadText','ReadReal','ReadLine','ReadInt','ReadFloat','ReadDouble','ReadChar','ReadByte','randomize','printr', + 'print','pow','playsound','playmusic','performancecounter','Orthonormalize','OpenFileWrite','OpenFileRead','Normalize', + 'newtilemap','newsprite','NewServer','NewConnection','musicplaying','mouse_yd','mouse_y','mouse_xd','mouse_x', + 'mouse_wheel','mouse_button','mid$','MessageSmoothed','MessageReliable','MessagePending','MessageChannel','maxtextureunits', + 'MatrixZero','MatrixTranslate','MatrixScale','MatrixRotateZ','MatrixRotateY','MatrixRotateX','MatrixRotate','MatrixIdentity', + 'MatrixCrossProduct','MatrixBasis','log','locate','loadtexture','loadsound','loadmipmaptexture','loadmipmapimagestrip', + 'loadimagestrip','loadimage','Length','len','left$','lcase$','keydown','Joy_Y','Joy_X','Joy_Up','Joy_Right','Joy_Left', + 'Joy_Keys','Joy_Down','Joy_Button','Joy_3','Joy_2','Joy_1','Joy_0','int','inscankey','input$','inkey$','inittimer', + 'imagewidth','imagestripframes','imageheight','imageformat','imagedatatype','hidecursor','glViewport','glVertex4sv', + 'glVertex4s','glVertex4iv','glVertex4i','glVertex4fv','glVertex4f','glVertex4dv','glVertex4d','glVertex3sv','glVertex3s', + 'glVertex3iv','glVertex3i','glVertex3fv','glVertex3f','glVertex3dv','glVertex3d','glVertex2sv','glVertex2s','glVertex2iv', + 'glVertex2i','glVertex2fv','glVertex2f','glVertex2dv','glVertex2d','gluPerspective','gluOrtho2D','gluLookAt', + 'glubuild2dmipmaps','glTranslatef','glTranslated','gltexsubimage2d','glTexParameteriv','glTexParameteri', + 'glTexParameterfv','glTexParameterf','glteximage2d','glTexGeniv','glTexGeni','glTexGenfv','glTexGenf','glTexGendv', + 'glTexGend','glTexEnviv','glTexEnvi','glTexEnvfv','glTexEnvf','glTexCoord4sv','glTexCoord4s','glTexCoord4iv','glTexCoord4i', + 'glTexCoord4fv','glTexCoord4f','glTexCoord4dv','glTexCoord4d','glTexCoord3sv','glTexCoord3s','glTexCoord3iv','glTexCoord3i', + 'glTexCoord3fv','glTexCoord3f','glTexCoord3dv','glTexCoord3d','glTexCoord2sv','glTexCoord2s','glTexCoord2iv','glTexCoord2i', + 'glTexCoord2fv','glTexCoord2f','glTexCoord2dv','glTexCoord2d','glTexCoord1sv','glTexCoord1s','glTexCoord1iv','glTexCoord1i','glTexCoord1fv', + 'glTexCoord1f','glTexCoord1dv','glTexCoord1d','glStencilOp','glStencilMask','glStencilFunc','glShadeModel','glSelectBuffer', + 'glScissor','glScalef','glScaled','glRotatef','glRotated','glRenderMode','glRectsv','glRects','glRectiv','glRecti', + 'glRectfv','glRectf','glRectdv','glRectd','glReadBuffer','glRasterPos4sv','glRasterPos4s','glRasterPos4iv', + 'glRasterPos4i','glRasterPos4fv','glRasterPos4f','glRasterPos4dv','glRasterPos4d','glRasterPos3sv','glRasterPos3s', + 'glRasterPos3iv','glRasterPos3i','glRasterPos3fv','glRasterPos3f','glRasterPos3dv','glRasterPos3d','glRasterPos2sv', + 'glRasterPos2s','glRasterPos2iv','glRasterPos2i','glRasterPos2fv','glRasterPos2f','glRasterPos2dv','glRasterPos2d', + 'glPushName','glPushMatrix','glPushClientAttrib','glPushAttrib','glPrioritizeTextures','glPopName','glPopMatrix', + 'glPopClientAttrib','glPopAttrib','glpolygonstipple','glPolygonOffset','glPolygonMode','glPointSize','glPixelZoom', + 'glPixelTransferi','glPixelTransferf','glPixelStorei','glPixelStoref','glPassThrough','glOrtho','glNormal3sv','glNormal3s', + 'glNormal3iv','glNormal3i','glNormal3fv','glNormal3f','glNormal3dv','glNormal3d','glNormal3bv','glNormal3b','glNewList', + 'glMultMatrixf','glMultMatrixd','glmultitexcoord2f','glmultitexcoord2d','glMatrixMode','glMaterialiv','glMateriali', + 'glMaterialfv','glMaterialf','glMapGrid2f','glMapGrid2d','glMapGrid1f','glMapGrid1d','glLogicOp','glLoadName','glLoadMatrixf', + 'glLoadMatrixd','glLoadIdentity','glListBase','glLineWidth','glLineStipple','glLightModeliv','glLightModeli','glLightModelfv', + 'glLightModelf','glLightiv','glLighti','glLightfv','glLightf','glIsTexture','glIsList','glIsEnabled','glInitNames', + 'glIndexubv','glIndexub','glIndexsv','glIndexs','glIndexMask','glIndexiv','glIndexi','glIndexfv','glIndexf','glIndexdv', + 'glIndexd','glHint','glGetTexParameteriv','glGetTexParameterfv','glGetTexLevelParameteriv','glGetTexLevelParameterfv', + 'glGetTexGeniv','glGetTexGenfv','glGetTexGendv','glGetTexEnviv','glGetTexEnvfv','glgetstring','glgetpolygonstipple','glGetPixelMapuiv', + 'glGetMaterialiv','glGetMaterialfv','glGetLightiv','glGetLightfv','glGetIntegerv','glGetIntegerv','glGetFloatv','glGetFloatv', + 'glGetError','glGetDoublev','glGetDoublev','glGetClipPlane','glGetBooleanv','glGetBooleanv','glgentextures','glgentexture', + 'glgenlists','glFrustum','glFrontFace','glFogiv','glFogi','glFogfv','glFogf','glFlush','glFinish','glFeedbackBuffer', + 'glEvalPoint2','glEvalPoint1','glEvalMesh2','glEvalMesh1','glEvalCoord2fv','glEvalCoord2f','glEvalCoord2dv','glEvalCoord2d', + 'glEvalCoord1fv','glEvalCoord1f','glEvalCoord1dv','glEvalCoord1d','glEndList','glEnd','glEnableClientState','glEnable', + 'glEdgeFlagv','glEdgeFlag','glDrawBuffer','glDrawArrays','glDisableClientState','glDisable','glDepthRange','glDepthMask', + 'glDepthFunc','gldeletetextures','gldeletetexture','gldeletelists','glCullFace','glCopyTexSubImage2D','glCopyTexSubImage1D', + 'glCopyTexImage2D','glCopyTexImage1D','glColorMaterial','glColorMask','glColor4usv','glColor4us','glColor4uiv','glColor4ui', + 'glColor4ubv','glColor4ub','glColor4sv','glColor4s','glColor4iv','glColor4i','glColor4fv','glColor4f','glColor4dv', + 'glColor4d','glColor4bv','glColor4b','glColor3usv','glColor3us','glColor3uiv','glColor3ui','glColor3ubv','glColor3ub', + 'glColor3sv','glColor3s','glColor3iv','glColor3i','glColor3fv','glColor3f','glColor3dv','glColor3d','glColor3bv', + 'glColor3b','glClipPlane','glClearStencil','glClearIndex','glClearDepth','glClearColor','glClearAccum','glClear', + 'glcalllists','glCallList','glBlendFunc','glBindTexture','glBegin','glArrayElement','glAreTexturesResident', + 'glAlphaFunc','glactivetexture','glAccum','font','FindNextFile','FindFirstFile','FindClose','FileError', + 'extensionsupported','exp','execute','EndOfFile','drawtext','divbyzero','Determinant','deletesprite','deletesound', + 'DeleteServer','deleteimage','DeleteConnection','defaultfont','CrossProduct','cosd','cos','copysprite','ConnectionPending', + 'ConnectionHandShaking','ConnectionConnected','ConnectionAddress','compilererrorline','compilererrorcol','compilererror', + 'compilefile','compile','color','cls','CloseFile','clearregion','clearline','clearkeys','chr$','charat$','bindsprite', + 'beep','atnd','atn2d','atn2','atn','atand','asc','argcount','arg','animatesprites','AcceptConnection','abs' + ), + 3 => array( + + // Blue Lowercase Keywords + + 'xor','while','wend','until','type','traditional_print','traditional','to','then','struc','string','step','single', + 'run','return','reset','read','or','null','not','next','lor','loop','language','land','integer','input','if', + 'goto','gosub','for','endstruc','endif','end','elseif','else','double','do','dim','data','const','basic4gl','as', + 'and','alloc' + ) + + ), + 'SYMBOLS' => array( + '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', '&', ';', ':', '$' + ), + + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000080; font-weight: bold;', + 2 => 'color: #FF0000;', + 3 => 'color: #0000FF;' + ), + 'COMMENTS' => array( + 1 => 'color: #657CC4; font-style: italic;' + ), + 'BRACKETS' => array( + 0 => 'color: #000080;' + ), + 'STRINGS' => array( + 0 => 'color: #008000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000080; font-weight: bold;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #0000FF;' + ), + 'ESCAPE_CHAR' => array( + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/blitzbasic.php b/ehcp/net2ftp/plugins/geshi/geshi/blitzbasic.php new file mode 100644 index 0000000..dd8389b --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/blitzbasic.php @@ -0,0 +1,185 @@ + 'BlitzBasic', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'If','EndIf','ElseIf','Else If','Else','While','Wend','Return','Next','Include','End Type','End Select','End If','End Function','End','Select', + 'Type','Forever','For','Or','And','AppTitle','Case','Goto','Gosub','Step','Stop','Int','Last','False','Then','To','True','Until','Float', + 'String','Before','Not' + ), + 2 => array( + + // All Functions - 2D BB and 3D BB + 'Xor','WriteString','WriteShort','WritePixelFast','WritePixel','WriteLine','WriteInt','WriteFloat','WriteFile','WriteBytes', + 'WriteByte','Write','WaitTimer','WaitMouse','WaitKey','WaitJoy','VWait','Viewport', + 'Upper','UpdateGamma','UnlockBuffer','UDPTimeouts','UDPStreamPort','UDPStreamIP','UDPMsgPort','UDPMsgIP', + 'Trim','TotalVidMem','TileImage','TileBlock','TFormImage','TFormFilter','Text', + 'TCPTimeouts','TCPStreamPort','TCPStreamIP','Tan','SystemProperty','StringWidth','StringHeight','Str','StopNetGame', + 'StopChannel','StartNetGame','Sqr','SoundVolume','SoundPitch','SoundPan','Sin','Shr', + 'ShowPointer','Shl','Sgn','SetGfxDriver','SetGamma','SetFont','SetEnv','SetBuffer','SendUDPMsg','SendNetMsg', + 'SeekFile','SeedRnd','ScanLine','ScaleImage','SaveImage','SaveBuffer','Sar','RuntimeError','RSet', + 'RotateImage','RndSeed','Rnd','Right','ResumeChannel','Restore','ResizeImage','ResizeBank','Replace', + 'Repeat','RecvUDPMsg','RecvNetMsg','RectsOverlap','Rect','ReadString','ReadShort','ReadPixelFast','ReadPixel','ReadLine', + 'ReadInt','ReadFloat','ReadFile','ReadDir','ReadBytes','ReadByte','ReadAvail','Read','Rand','Print', + 'PokeShort','PokeInt','PokeFloat','PokeByte','Plot','PlaySound','PlayMusic','PlayCDTrack','Pi','PeekShort', + 'PeekInt','PeekFloat','PeekByte','PauseChannel','Oval','Origin','OpenTCPStream','OpenMovie','OpenFile', + 'Null','NextFile','New','NetPlayerName','NetPlayerLocal','NetMsgType','NetMsgTo','NetMsgFrom', + 'NetMsgData','MovieWidth','MoviePlaying','MovieHeight','MoveMouse','MouseZSpeed','MouseZ','MouseYSpeed','MouseY','MouseXSpeed', + 'MouseX','MouseHit','MouseDown','Mod','Millisecs','MidHandle','Mid','MaskImage','LSet','Lower', + 'LoopSound','Log10','Log','LockBuffer','Locate','Local','LoadSound','LoadImage','LoadFont','LoadBuffer', + 'LoadAnimImage','Line','Len','Left','KeyHit','KeyDown','JoyZDir','JoyZ','JoyYDir', + 'JoyYaw','JoyY','JoyXDir','JoyX','JoyVDir','JoyV','JoyUDir','JoyU','JoyType','JoyRoll', + 'JoyPitch','JoyHit','JoyHat','JoyDown','JoinNetGame','Instr','Insert','Input', + 'ImageYHandle','ImageXHandle','ImageWidth','ImagesOverlap','ImagesCollide','ImageRectOverlap','ImageRectCollide','ImageHeight','ImageBuffer','If', + 'HostNetGame','HostIP','HidePointer','Hex','HandleImage','GraphicsWidth','GraphicsHeight','GraphicsDepth','GraphicsBuffer','Graphics', + 'GrabImage','Global','GFXModeWidth','GFXModeHeight','GfxModeExists','GFXModeDepth','GfxDriverName','GetMouse', + 'GetKey','GetJoy','GetEnv','GetColor','GammaRed','GammaGreen','GammaBlue','Function','FrontBuffer','FreeTimer', + 'FreeSound','FreeImage','FreeFont','FreeBank','FontWidth','FontHeight','FlushMouse','FlushKeys', + 'FlushJoy','Floor','Flip','First','FileType','FileSize','FilePos','Field', + 'Exp','Exit','ExecFile','Eof','EndGraphics','Each','DrawMovie','DrawImageRect','DrawImage','DrawBlockRect','DrawBlock', + 'DottedIP','Dim','DeleteNetPlayer','DeleteFile','DeleteDir','Delete','Delay','Default','DebugLog','Data', + 'CurrentTime','CurrentDir','CurrentDate','CreateUDPStream','CreateTimer','CreateTCPServer','CreateNetPlayer','CreateImage','CreateDir','CreateBank', + 'CountHostIPs','CountGFXModes','CountGfxDrivers','Cos','CopyStream','CopyRect','CopyPixelFast','CopyPixel','CopyImage','CopyFile', + 'CopyBank','Const','CommandLine','ColorRed','ColorGreen','ColorBlue','Color','ClsColor','Cls','CloseUDPStream', + 'CloseTCPStream','CloseTCPServer','CloseMovie','CloseFile','CloseDir','Chr','ChannelVolume','ChannelPlaying','ChannelPitch','ChannelPan', + 'ChangeDir','Ceil','CallDLL','Bin','BankSize','BackBuffer','AvailVidMem','AutoMidHandle', + 'ATan2','ATan','ASin','Asc','After','ACos','AcceptTCPStream','Abs', + // 3D Commands + 'Wireframe','Windowed3D','WBuffer','VertexZ','VertexY', + 'VertexX','VertexW','VertexV','VertexU','VertexTexCoords','VertexRed','VertexNZ','VertexNY','VertexNX','VertexNormal', + 'VertexGreen','VertexCoords','VertexColor','VertexBlue','VertexAlpha','VectorYaw','VectorPitch','UpdateWorld','UpdateNormals','TurnEntity', + 'TrisRendered','TriangleVertex','TranslateEntity','TFormVector','TFormPoint','TFormNormal','TFormedZ','TFormedY','TFormedX','TextureWidth', + 'TextureName','TextureHeight','TextureFilter','TextureCoords','TextureBuffer','TextureBlend','TerrainZ','TerrainY','TerrainX','TerrainSize', + 'TerrainShading','TerrainHeight','TerrainDetail','SpriteViewMode','ShowEntity','SetCubeFace','SetAnimTime','SetAnimKey','ScaleTexture','ScaleSprite', + 'ScaleMesh','ScaleEntity','RotateTexture','RotateSprite','RotateMesh','RotateEntity','ResetEntity','RenderWorld','ProjectedZ','ProjectedY', + 'ProjectedX','PositionTexture','PositionMesh','PositionEntity','PointEntity','PickedZ','PickedY','PickedX','PickedTriangle','PickedTime', + 'PickedSurface','PickedNZ','PickedNY','PickedNX','PickedEntity','PaintSurface','PaintMesh','PaintEntity','NameEntity','MoveEntity', + 'ModifyTerrain','MeshWidth','MeshHeight','MeshesIntersect','MeshDepth','MD2AnimTime','MD2AnimLength','MD2Animating','LoadTexture','LoadTerrain', + 'LoadSprite','LoadMesh','LoadMD2','LoaderMatrix','LoadBSP','LoadBrush','LoadAnimTexture','LoadAnimSeq','LoadAnimMesh','Load3DSound', + 'LinePick','LightRange','LightMesh','LightConeAngles','LightColor','HWMultiTex','HideEntity','HandleSprite','Graphics3D','GfxMode3DExists', + 'GfxMode3D','GfxDriverCaps3D','GfxDriver3D','GetSurfaceBrush','GetSurface','GetParent','GetMatElement','GetEntityType','GetEntityBrush','GetChild', + 'GetBrushTexture','FreeTexture','FreeEntity','FreeBrush','FlipMesh','FitMesh','FindSurface','FindChild','ExtractAnimSeq','EntityZ', + 'EntityYaw','EntityY','EntityX','EntityVisible','EntityType','EntityTexture','EntityShininess','EntityRoll','EntityRadius','EntityPitch', + 'EntityPickMode','EntityPick','EntityParent','EntityOrder','EntityName','EntityInView','EntityFX','EntityDistance','EntityColor','EntityCollided', + 'EntityBox','EntityBlend','EntityAutoFade','EntityAlpha','EmitSound','Dither','DeltaYaw','DeltaPitch','CreateTexture','CreateTerrain', + 'CreateSurface','CreateSprite','CreateSphere','CreatePlane','CreatePivot','CreateMirror','CreateMesh','CreateListener','CreateLight','CreateCylinder', + 'CreateCube','CreateCone','CreateCamera','CreateBrush','CountVertices','CountTriangles','CountSurfaces','CountGfxModes3D','CountCollisions','CountChildren', + 'CopyMesh','CopyEntity','CollisionZ','CollisionY','CollisionX','CollisionTriangle','CollisionTime','CollisionSurface','Collisions','CollisionNZ', + 'CollisionNY','CollisionNX','CollisionEntity','ClearWorld','ClearTextureFilters','ClearSurface','ClearCollisions','CaptureWorld','CameraZoom','CameraViewport', + 'CameraRange','CameraProjMode','CameraProject','CameraPick','CameraFogRange','CameraFogMode','CameraFogColor','CameraClsMode','CameraClsColor','BSPLighting', + 'BSPAmbientLight','BrushTexture','BrushShininess','BrushFX','BrushColor','BrushBlend','BrushAlpha','AntiAlias','AnimTime','AnimSeq', + 'AnimLength','Animating','AnimateMD2','Animate','AmbientLight','AlignToVector','AddVertex','AddTriangle','AddMesh','AddAnimSeq', + ) + ), + 'SYMBOLS' => array( + '(',')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight: bold;', + 2 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #D9D100; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000066;' + ), + 'STRINGS' => array( + 0 => 'color: #009900;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + ) + ), + 'URLS' => array( + 1 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '\\' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/bnf.php b/ehcp/net2ftp/plugins/geshi/geshi/bnf.php new file mode 100644 index 0000000..14642ab --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/bnf.php @@ -0,0 +1,130 @@ + 'bnf', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array(), + 'SYMBOLS' => array( + '<', '>', '::=', '|' + ), + 'CASE_SENSITIVE' => array( + //GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array(), + 'COMMENTS' => array( + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #a00;', + 1 => 'color: #a00;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight: bold;', // Unused + ), + 'REGEXPS' => array( + 0 => 'color: #007;', + 1 => 'color: #099;', + 2 => 'color: #060;', + 3 => 'color: #909;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array(), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '(<)([^&]+?)(>)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ), + 1 => array( + GESHI_SEARCH => '(<|>)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(::=)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '([()])', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/c.php b/ehcp/net2ftp/plugins/geshi/geshi/c.php new file mode 100644 index 0000000..b6687f7 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/c.php @@ -0,0 +1,143 @@ + 'C', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline' + ), + 3 => array( + 'printf', 'cout' + ), + 4 => array( + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/c_mac.php b/ehcp/net2ftp/plugins/geshi/geshi/c_mac.php new file mode 100644 index 0000000..86b1697 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/c_mac.php @@ -0,0 +1,175 @@ + 'C (Mac)', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + // Mac-specific constants: + 'kCFAllocatorDefault' + ), + 3 => array( + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + // Mac-specific types: + 'CFArrayRef', 'CFDictionaryRef', 'CFMutableDictionaryRef', 'CFBundleRef', 'CFSetRef', 'CFStringRef', + 'CFURLRef', 'CFLocaleRef', 'CFDateFormatterRef', 'CFNumberFormatterRef', 'CFPropertyListRef', + 'CFTreeRef', 'CFWriteStreamRef', 'CFCharacterSetRef', 'CFMutableStringRef', 'CFNotificationRef', + 'CFNotificationRef', 'CFReadStreamRef', 'CFNull', 'CFAllocatorRef', 'CFBagRef', 'CFBinaryHeapRef', + 'CFBitVectorRef', 'CFBooleanRef', 'CFDataRef', 'CFDateRef', 'CFMachPortRef', 'CFMessagePortRef', + 'CFMutableArrayRef', 'CFMutableBagRef', 'CFMutableBitVectorRef', 'CFMutableCharacterSetRef', + 'CFMutableDataRef', 'CFMutableSetRef', 'CFNumberRef', 'CFPlugInRef', 'CFPlugInInstanceRef', + 'CFRunLoopRef', 'CFRunLoopObserverRef', 'CFRunLoopSourceRef', 'CFRunLoopTimerRef', 'CFSocketRef', + 'CFTimeZoneRef', 'CFTypeRef', 'CFUserNotificationRef', 'CFUUIDRef', 'CFXMLNodeRef', 'CFXMLParserRef', + 'CFXMLTreeRef' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/caddcl.php b/ehcp/net2ftp/plugins/geshi/geshi/caddcl.php new file mode 100644 index 0000000..47689a3 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/caddcl.php @@ -0,0 +1,125 @@ + 'CAD DCL', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'boxed_column','boxed_radio_column','boxed_radio_row','boxed_row', + 'column','concatenation','button','dialog','edit_box','image','image_button', + 'errtile','list_box','ok_cancel','ok_cancel_help','ok_cancel_help_errtile', + 'ok_cancel_help_info','ok_only','paragraph','popup_list','radio_button', + 'radio_column','radio_row','row','slider','spacer','spacer_0','spacer_1','text', + 'text_part','toggle', + 'action','alignment','allow_accept','aspect_ratio','big_increment', + 'children_alignment','children_fixed_height', + 'children_fixed_width','color', + 'edit_limit','edit_width','fixed_height','fixed_width', + 'height','initial_focus','is_cancel','is_default', + 'is_enabled','is_tab_stop','is-bold','key','label','layout','list', + 'max_value','min_value','mnemonic','multiple_select','password_char', + 'small_increment','tabs','tab_truncate','value','width', + 'false','true','left','right','centered','top','bottom', + 'dialog_line','dialog_foreground','dialog_background', + 'graphics_background','black','red','yellow','green','cyan', + 'blue','magenta','whitegraphics_foreground', + 'horizontal','vertical' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/cadlisp.php b/ehcp/net2ftp/plugins/geshi/geshi/cadlisp.php new file mode 100644 index 0000000..c95e168 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/cadlisp.php @@ -0,0 +1,185 @@ + 'CAD Lisp', + 'COMMENT_SINGLE' => array(1 => ";"), + 'COMMENT_MULTI' => array(";|" => "|;"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'abs','acad_colordlg','acad_helpdlg','acad_strlsort','action_tile', + 'add_list','alert','alloc','and','angle','angtof','angtos','append','apply', + 'arx','arxload','arxunload','ascii','assoc','atan','atof','atoi','atom', + 'atoms-family','autoarxload','autoload','Boole','boundp','caddr', + 'cadr','car','cdr','chr','client_data_tile','close','command','cond', + 'cons','cos','cvunit','defun','defun-q','defun-q-list-ref', + 'defun-q-list-set','dictadd','dictnext','dictremove','dictrename', + 'dictsearch','dimx_tile','dimy_tile','distance','distof','done_dialog', + 'end_image','end_list','entdel','entget','entlast','entmake', + 'entmakex','entmod','entnext','entsel','entupd','eq','equal','eval','exit', + 'exp','expand','expt','fill_image','findfile','fix','float','foreach','function', + 'gc','gcd','get_attr','get_tile','getangle','getcfg','getcname','getcorner', + 'getdist','getenv','getfiled','getint','getkword','getorient','getpoint', + 'getreal','getstring','getvar','graphscr','grclear','grdraw','grread','grtext', + 'grvecs','handent','help','if','initdia','initget','inters','itoa','lambda','last', + 'layoutlist','length','list','listp','load','load_dialog','log','logand','logior', + 'lsh','mapcar','max','mem','member','menucmd','menugroup','min','minusp','mode_tile', + 'namedobjdict','nentsel','nentselp','new_dialog','nil','not','nth','null', + 'numberp','open','or','osnap','polar','prin1','princ','print','progn','prompt', + 'quit','quote','read','read-char','read-line','redraw','regapp','rem','repeat', + 'reverse','rtos','set','set_tile','setcfg','setenv','setfunhelp','setq','setvar', + 'setview','sin','slide_image','snvalid','sqrt','ssadd','ssdel','ssget','ssgetfirst', + 'sslength','ssmemb','ssname','ssnamex','sssetfirst','start_dialog','start_image', + 'start_list','startapp','strcase','strcat','strlen','subst','substr','t','tablet', + 'tblnext','tblobjname','tblsearch','term_dialog','terpri','textbox','textpage', + 'textscr','trace','trans','type','unload_dialog','untrace','vector_image','ver', + 'vports','wcmatch','while','write-char','write-line','xdroom','xdsize','zerop', + 'vl-acad-defun','vl-acad-undefun','vl-arx-import','vlax-3D-point', + 'vlax-add-cmd','vlax-create-object','vlax-curve-getArea', + 'vlax-curve-getClosestPointTo','vlax-curve-getClosestPointToProjection', + 'vlax-curve-getDistAtParam','vlax-curve-getDistAtPoint', + 'vlax-curve-getEndParam','vlax-curve-getEndPoint', + 'vlax-curve-getFirstDeriv','vlax-curve-getParamAtDist', + 'vlax-curve-getParamAtPoint','vlax-curve-getPointAtDist', + 'vlax-curve-getPointAtParam','vlax-curve-getSecondDeriv', + 'vlax-curve-getStartParam','vlax-curve-getStartPoint', + 'vlax-curve-isClosed','vlax-curve-isPeriodic','vlax-curve-isPlanar', + 'vlax-dump-object','vlax-erased-p','vlax-for','vlax-get-acad-object', + 'vlax-get-object','vlax-get-or-create-object','vlax-get-property', + 'vlax-import-type-library','vlax-invoke-method','vlax-ldata-delete', + 'vlax-ldata-get','vlax-ldata-list','vlax-ldata-put','vlax-ldata-test', + 'vlax-make-safearray','vlax-make-variant','vlax-map-collection', + 'vlax-method-applicable-p','vlax-object-released-p','vlax-product-key', + 'vlax-property-available-p','vlax-put-property','vlax-read-enabled-p', + 'vlax-release-object','vlax-remove-cmd','vlax-safearray-fill', + 'vlax-safearray-get-dim','vlax-safearray-get-element', + 'vlax-safearray-get-l-bound','vlax-safearray-get-u-bound', + 'vlax-safearray-put-element','vlax-safearray-type','vlax-tmatrix', + 'vlax-typeinfo-available-p','vlax-variant-change-type', + 'vlax-variant-type','vlax-variant-value','vlax-write-enabled-p', + 'vl-bb-ref','vl-bb-set','vl-catch-all-apply','vl-catch-all-error-message', + 'vl-catch-all-error-p','vl-cmdf','vl-consp','vl-directory-files','vl-doc-export', + 'vl-doc-import','vl-doc-ref','vl-doc-set','vl-every','vl-exit-with-error', + 'vl-exit-with-value','vl-file-copy','vl-file-delete','vl-file-directory-p', + 'vl-filename-base','vl-filename-directory','vl-filename-extension', + 'vl-filename-mktemp','vl-file-rename','vl-file-size','vl-file-systime', + 'vl-get-resource','vlisp-compile','vl-list-exported-functions', + 'vl-list-length','vl-list-loaded-vlx','vl-load-all','vl-load-com', + 'vl-load-reactors','vl-member-if','vl-member-if-not','vl-position', + 'vl-prin1-to-string','vl-princ-to-string','vl-propagate','vlr-acdb-reactor', + 'vlr-add','vlr-added-p','vlr-beep-reaction','vlr-command-reactor', + 'vlr-current-reaction-name','vlr-data','vlr-data-set', + 'vlr-deepclone-reactor','vlr-docmanager-reactor','vlr-dwg-reactor', + 'vlr-dxf-reactor','vlr-editor-reactor','vl-registry-delete', + 'vl-registry-descendents','vl-registry-read','vl-registry-write', + 'vl-remove','vl-remove-if','vl-remove-if-not','vlr-insert-reactor', + 'vlr-linker-reactor','vlr-lisp-reactor','vlr-miscellaneous-reactor', + 'vlr-mouse-reactor','vlr-notification','vlr-object-reactor', + 'vlr-owner-add','vlr-owner-remove','vlr-owners','vlr-pers','vlr-pers-list', + 'vlr-pers-p','vlr-pers-release','vlr-reaction-names','vlr-reactions', + 'vlr-reaction-set','vlr-reactors','vlr-remove','vlr-remove-all', + 'vlr-set-notification','vlr-sysvar-reactor','vlr-toolbar-reactor', + 'vlr-trace-reaction','vlr-type','vlr-types','vlr-undo-reactor', + 'vlr-wblock-reactor','vlr-window-reactor','vlr-xref-reactor', + 'vl-some','vl-sort','vl-sort-i','vl-string-elt','vl-string-left-trim', + 'vl-string-mismatch','vl-string-position','vl-string-right-trim', + 'vl-string-search','vl-string-subst','vl-string-translate','vl-string-trim', + 'vl-symbol-name','vl-symbolp','vl-symbol-value','vl-unload-vlx','vl-vbaload', + 'vl-vbarun','vl-vlx-loaded-p' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/cfdg.php b/ehcp/net2ftp/plugins/geshi/geshi/cfdg.php new file mode 100644 index 0000000..9683768 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/cfdg.php @@ -0,0 +1,125 @@ + + * Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/ + * Release Version: 1.0.7.21 + * Date Started: 2006/03/11 + * + * CFDG language file for GeSHi. + * + * CHANGES + * ------- + * 2006/03/11 (1.0.0) + * - First Release + * + * TODO (updated 2006/03/11) + * ------------------------- + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GeSHi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'CFDG', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'include', 'startshape', 'rule', 'background' + ), + 2 => array( + 'SQUARE', 'CIRCLE', 'TRIANGLE', + ), + 3 => array( + 'b','brightness','h','hue','sat','saturation', + 'a','alpha','x','y','z','s','size', + 'r','rotate','f','flip','skew','xml_set_object' + ) + ), + 'SYMBOLS' => array( + '[', ']', '{', '}', '*', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #717100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #006666;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => '', + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/cfm.php b/ehcp/net2ftp/plugins/geshi/geshi/cfm.php new file mode 100644 index 0000000..c0e6cbd --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/cfm.php @@ -0,0 +1,325 @@ + 'ColdFusion', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('','<!---' => '--->', '/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + /* CFM Tags */ + 1 => array( + '<cfabort', '<cfapplet', '<cfapplication', '<cfargument', '<cfassociate', '<<cfbreak>', + '<cfcache', '<cfcase', '<cfcatch', '</cfcatch>', '<cfchart', '</cfchart>', '<cfchartdata', + '<cfchartseries', '</cfchartseries>', '<cfcol', '<cfcollection', '<cfcomponent', '</cfcomponent>', + '<cfcontent', '<cfcookie', '</cfdefaultcase>', '<cfdirectory', '<cfdocument', '</cfdocument>', + '<cfdocumentitem', '</cfdocumentitem>', '<cfdocumentsection', '</cfdocumentsection>', '<cfdump', + '<cfelse', '<cfelseif', '<cferror', '<cfexecute', '</cfexecute>', '<cfexit', '<cffile', + '<cfflush', '<cfform', '</cfform>', '<cfformgroup', '</cfformgroup', '<cfformitem', + '</cfformitem>', '<cfftp', '<cffunction', '</cffunction>', '<cfgrid', '</cfgrid>', + '<cfgridcolumn', '<cfgridrow', '<cfgridupdate', '<cfheader', '<cfhtmlhead', '<cfhttp', + '</cfhttp>', '<cfhttpparam', '<cfif', '</cfif>', '<cfimport', '<cfinclude', '<cfindex', + '<cfinput', '<cfinsert', '<cfinvoke', '<cfinvokeargument', '<cfldap', '<cflocation', '<cflock', + '</cflock>', '<cflog', '<cflogin', '</cflogin>', '<cfloginuser', '<cflogout', '<cfloop', + '</cfloop>', '<cfmail', '</cfmail>', '<cfmailparam', '<cfmailpart', '</cfmailpart>', + '<cfmodule', '<cfNTauthenticate', '<cfobject', '<cfobjectcache', '<cfoutput>', '<cfoutput', '</cfoutput>', + '<cfparam', '<cfpop', '<cfprocessingdirective', '</cfprocessingdirective>', '<cfprocparam', + '<cfprocresult', '<cfproperty', '<cfquery', '</cfquery>', '<cfqueryparam', '<cfregistry', + '</cfregistry>', '<cfreport', '</cfreport>', '<cfreportparam', '</cfreportparam>', + '<cfrethrow', '<cfreturn', '<cfsavecontent', '</cfsavecontent>', '<cfschedule', '<cfscript', '<cfscript>', + '</cfscript>', '<cfsearch', '<cfselect', '</cfselect>', '<cfset', '<cfsetting', '<cfsilent', + '</cfsilent>', '<cfstoredproc', '</cfstoredproc>', '<cfswitch', '</cfswitch>', '<cftable', + '</cftable>', '<cftextarea', '</cftextarea>', '<cfthrow', '<cftimer', '</cftimer>', + '<cftrace', '</cftrace>', '<cftransaction', '</cftransaction>', '<cftree', '</cftree>', + '<cftreeitem', '<cftry', '</cftry>', '<cfupdate', '<cfwddx','<','>' + ), + /* HTML Tags */ + 2 => array( + '<a>', '<abbr>', '<acronym>', '<address>', '<applet>', + '<a', '<abbr', '<acronym', '<address', '<applet', + '</a>', '</abbr>', '</acronym>', '</address>', '</applet>', + '</a', '</abbr', '</acronym', '</address', '</applet', + + '<base>', '<basefont>', '<bdo>', '<big>', '<blockquote>', '<body>', '<br>', '<button>', '<b>', + '<base', '<basefont', '<bdo', '<big', '<blockquote', '<body', '<br', '<button', '<b', + '</base>', '</basefont>', '</bdo>', '</big>', '</blockquote>', '</body>', '</br>', '</button>', '</b>', + '</base', '</basefont', '</bdo', '</big', '</blockquote', '</body', '</br','<br />', '</button', '</b', + + '<caption>', '<center>', '<cite>', '<code>', '<colgroup>', '<col>', + '<caption', '<center', '<cite', '<code', '<colgroup', '<col', + '</caption>', '</center>', '</cite>', '</code>', '</colgroup>', '</col>', + '</caption', '</center', '</cite', '</code', '</colgroup', '</col', + + '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', + '<dd', '<del', '<dfn', '<dir', '<div', '<dl', '<dt', + '</dd>', '</del>', '</dfn>', '</dir>', '</div>', '</dl>', '</dt>', + '</dd', '</del', '</dfn', '</dir', '</div', '</dl', '</dt', + + '<em>', + '<em', + '</em>', + '</em', + + '<fieldset>', '<font>', '<form>', '<frame>', '<frameset>', + '<fieldset', '<font', '<form', '<frame', '<frameset', + '</fieldset>', '</font>', '</form>', '</frame>', '</frameset>', + '</fieldset', '</font', '</form', '</frame', '</frameset', + + '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<head>', '<hr>', '<html>', + '<h1', '<h2', '<h3', '<h4', '<h5', '<h6', '<head', '<hr', '<html', + '</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>', '</head>', '</hr>', '</html>', + '</h1', '</h2', '</h3', '</h4', '</h5', '</h6', '</head', '</hr', '</html', + + '<iframe>', '<ilayer>', '<img>', '<input>', '<ins>', '<isindex>', '<i>', + '<iframe', '<ilayer', '<img', '<input', '<ins', '<isindex', '<i', + '</iframe>', '</ilayer>', '</img>', '</input>', '</ins>', '</isindex>', '</i>', + '</iframe', '</ilayer', '</img', '</input', '</ins', '</isindex', '</i', + + '<kbd>', + '<kbd', + '&t;/kbd>', + '</kbd', + + '<label>', '<legend>', '<link>', '<li>', + '<label', '<legend', '<link', '<li', + '</label>', '</legend>', '</link>', '</li>', + '</label', '</legend', '</link', '</li', + + '<map>', '<meta>', + '<map', '<meta', + '</map>', '</meta>', + '</map', '</meta', + + '<noframes>', '<noscript>', + '<noframes', '<noscript', + '</noframes>', '</noscript>', + '</noframes', '</noscript', + + '<object>', '<ol>', '<optgroup>', '<option>', + '<object', '<ol', '<optgroup', '<option', + '</object>', '</ol>', '</optgroup>', '</option>', + '</object', '</ol', '</optgroup', '</option', + + '<param>', '<pre>', '<p>', + '<param', '<pre', '<p', + '</param>', '</pre>', '</p>', + '</param', '</pre', '</p', + + '<q>', + '<q', + '</q>', + '</q', + + '<samp>', '<script>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<style>', '<sub>', '<sup>', '<s>', + '<samp', '<script', '<select', '<small', '<span', '<strike', '<strong', '<style', '<sub', '<sup', '<s', + '</samp>', '</script>', '</select>', '</small>', '</span>', '</strike>', '</strong>', '</style>', '</sub>', '</sup>', '</s>', + '</samp', '</script', '</select', '</small', '</span', '</strike', '</strong', '</style', '</sub', '</sup', '</s', + + '<table>', '<tbody>', '<td>', '<textarea>', '<text>', '<tfoot>', '<thead>', '<th>', '<title>', '<tr>', '<tt>', + '<table', '<tbody', '<td', '<textarea', '<text', '<tfoot', '<tfoot', '<thead', '<th', '<title', '<tr', '<tt', + '</table>', '</tbody>', '</td>', '</textarea>', '</text>', '</tfoot>', '</thead', '</tfoot', '</th>', '</title>', '</tr>', '</tt>', + '</table', '</tbody', '</td', '</textarea', '</text', '</tfoot', '</tfoot', '</thead', '</th', '</title', '</tr', '</tt', + + '<ul>', '<u>', + '<ul', '<u', + '</ul>', '</ul>', + '</ul', '</u', + + '<var>', + '<var', + '</var>', + '</var', + + '>', '<' + ), + /* HTML attributes */ + 3 => array( + 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', + 'background', 'bgcolor', 'border', + 'cellpadding', 'cellspacing', 'char', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', + 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', + 'enctype', + 'face', 'for', 'frame', 'frameborder', + 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', + 'id', 'ismap', + 'label', 'lang', 'language', 'link', 'longdesc', + 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', + 'name', 'nohref', 'noresize', 'noshade', 'nowrap', + 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload', + 'profile', 'prompt', + 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', + 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', + 'tabindex', 'target', 'text', 'title', 'type', + 'usemap', + 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace', + 'width' + ), + /* CFM Script delimeters */ + 4 => array( + 'var', 'function', 'while', 'if','else' + ), + /* CFM Functions */ + 5 => array( + 'Abs', 'GetFunctionList', 'LSTimeFormat','ACos','GetGatewayHelper','LTrim','AddSOAPRequestHeader','GetHttpRequestData', + 'Max','AddSOAPResponseHeader','GetHttpTimeString','Mid','ArrayAppend','GetLocale','Min','ArrayAvg','GetLocaleDisplayName', + 'Minute','ArrayClear','GetMetaData','Month','ArrayDeleteAt','GetMetricData','MonthAsString','ArrayInsertAt','GetPageContext', + 'Now','ArrayIsEmpty','GetProfileSections','NumberFormat','ArrayLen','GetProfileString','ParagraphFormat','ArrayMax', + 'GetLocalHostIP','ParseDateTime','ArrayMin','GetSOAPRequest','Pi','ArrayNew','GetSOAPRequestHeader','PreserveSingleQuotes', + 'ArrayPrepend','GetSOAPResponse','Quarter','ArrayResize','GetSOAPResponseHeader','QueryAddColumn','ArraySet', + 'GetTempDirectory','QueryAddRow','ArraySort','GetTempDirectory','QueryNew','ArraySum','GetTempFile','QuerySetCell', + 'ArraySwap','GetTickCount','QuotedValueList','ArrayToList','GetTimeZoneInfo','Rand','Asc','GetToken','Randomize', + 'ASin','Hash','RandRange','Atn','Hour','REFind','BinaryDecode','HTMLCodeFormat','REFindNoCase','BinaryEncode', + 'HTMLEditFormat','ReleaseComObject','BitAnd','IIf','RemoveChars','BitMaskClear','IncrementValue','RepeatString', + 'BitMaskRead','InputBaseN','Replace','BitMaskSet','Insert','ReplaceList','BitNot','Int','ReplaceNoCase','BitOr', + 'IsArray','REReplace','BitSHLN','IsBinary','REReplaceNoCase','BitSHRN','IsBoolean','Reverse','BitXor','IsCustomFunction', + 'Right','Ceiling','IsDate','RJustify','CharsetDecode','IsDebugMode','Round','CharsetEncode','IsDefined','RTrim', + 'Chr','IsLeapYear','Second','CJustify','IsLocalHost','SendGatewayMessage','Compare','IsNumeric','SetEncoding', + 'CompareNoCase','IsNumericDate','SetLocale','Cos','IsObject','SetProfileString','CreateDate','IsQuery','SetVariable', + 'CreateDateTime','IsSimpleValue','Sgn','CreateObject','IsSOAPRequest','Sin','CreateODBCDate','IsStruct','SpanExcluding', + 'CreateODBCDateTime','IsUserInRole','SpanIncluding','CreateODBCTime','IsValid','Sqr','CreateTime','IsWDDX','StripCR', + 'CreateTimeSpan','IsXML','StructAppend','CreateUUID','IsXmlAttribute','StructClear','DateAdd','IsXmlDoc','StructCopy', + 'DateCompare','IsXmlElem','StructCount','DateConvert','IsXmlNode','StructDelete','DateDiff','IsXmlRoot','StructFind', + 'DateFormat','JavaCast','StructFindKey','DatePart','JSStringFormat','StructFindValue','Day','LCase','StructGet', + 'DayOfWeek','Left','StructInsert','DayOfWeekAsString','Len','StructIsEmpty','DayOfYear','ListAppend','StructKeyArray', + 'DaysInMonth','ListChangeDelims','StructKeyExists','DaysInYear','ListContains','StructKeyList','DE','ListContainsNoCase', + 'StructNew','DecimalFormat','ListDeleteAt','StructSort','DecrementValue','ListFind','StructUpdate','Decrypt','ListFindNoCase', + 'Tan','DecryptBinary','ListFirst','TimeFormat','DeleteClientVariable','ListGetAt','ToBase64','DirectoryExists', + 'ListInsertAt','ToBinary','DollarFormat','ListLast','ToScript','Duplicate','ListLen','ToString','Encrypt','ListPrepend', + 'Trim','EncryptBinary','ListQualify','UCase','Evaluate','ListRest','URLDecode','Exp','ListSetAt','URLEncodedFormat', + 'ExpandPath','ListSort','URLSessionFormat','FileExists','ListToArray','Val','Find','ListValueCount','ValueList', + 'FindNoCase','ListValueCountNoCase','Week','FindOneOf','LJustify','Wrap','FirstDayOfMonth','Log','WriteOutput', + 'Fix','Log10','XmlChildPos','FormatBaseN','LSCurrencyFormat','XmlElemNew','GetAuthUser','LSDateFormat','XmlFormat', + 'GetBaseTagData','LSEuroCurrencyFormat','XmlGetNodeType','GetBaseTagList','LSIsCurrency','XmlNew','GetBaseTemplatePath', + 'LSIsDate','XmlParse','GetClientVariablesList','LSIsNumeric','XmlSearch','GetCurrentTemplatePath','LSNumberFormat', + 'XmlTransform','GetDirectoryFromPath','LSParseCurrency','XmlValidate','GetEncoding','LSParseDateTime','Year', + 'GetException','LSParseEuroCurrency','YesNoFormat','GetFileFromPath','LSParseNumber' + ), + /* CFM Attributes */ + 6 => array( + '=','&','name','dbtype','connectstring','datasource','username','password','query','delimeter','description','required','hint','default','access','from','to','list','index' + ) + ), + 'SYMBOLS' => array( + '/', '=', 'EQ', 'GT', 'LT', 'GTE', 'LTE', 'IS', 'LIKE', '&', '{', '}', '(', ')', '[', ']','gt','lt' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990000;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #0000FF;', + 4 => 'color: #000000; font-weight: bold;', + 5 => 'color: #0000FF;', + 6 => 'color: #0000FF' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic; background-color:#FFFF99;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000FF;' + ), + 'STRINGS' => array( + 0 => 'color: #009900;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #0000FF;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #0000FF;', + 2 => 'color: #000099;', + 3 => 'color: #333333;' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '#' => '#' + ), + 2 => array( + '' => ';' + ), + 3 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/cpp-qt.php b/ehcp/net2ftp/plugins/geshi/geshi/cpp-qt.php new file mode 100644 index 0000000..0c1fba9 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/cpp-qt.php @@ -0,0 +1,267 @@ + 'C++ (QT)', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return', + 'switch', 'while' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace', + 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast', + 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' , + 'foreach','connect', 'Q_OBJECT' , 'slots' , 'signals' + ), + 3 => array( + 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this', + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint', + 'register', 'short', 'shortint', 'signed', 'static', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + ), + 5 => array( + 'QAbstractButton','QDir','QIntValidator','QRegExpValidator','QTabWidget','QAbstractEventDispatcher', + 'QDirectPainter','QIODevice','QRegion','QTcpServer','QAbstractExtensionFactory','QDirModel', + 'QItemDelegate','QResizeEvent','QTcpSocket','QAbstractExtensionManager','QDockWidget', + 'QItemEditorCreatorBase','QResource','QTemporaryFile','QAbstractFileEngine','QDomAttr', + 'QItemEditorFactory','QRubberBand','QTestEventList','QAbstractFileEngineHandler','QDomCDATASection', + 'QItemSelection','QScreen','QTextBlock','QAbstractFormBuilder','QDomCharacterData','QItemSelectionModel', + 'QScreenCursor','QTextBlockFormat','QAbstractGraphicsShapeItem','QDomComment','QItemSelectionRange', + 'QScreenDriverFactory','QTextBlockGroup','QAbstractItemDelegate','QDomDocument','QKbdDriverFactory', + 'QScreenDriverPlugin','QTextBlockUserData','QAbstractItemModel','QDomDocumentFragment','QKbdDriverPlugin', + 'QScrollArea','QTextBrowser','QAbstractItemView','QDomDocumentType','QKeyEvent','QScrollBar', + 'QTextCharFormat','QAbstractListModel','QDomElement','QKeySequence','QSemaphore','QTextCodec', + 'QAbstractPrintDialog','QDomEntity','QLabel','QSessionManager','QTextCodecPlugin','QAbstractProxyModel', + 'QDomEntityReference','QLatin1Char','QSet','QTextCursor','QAbstractScrollArea','QDomImplementation', + 'QLatin1String','QSetIterator','QTextDecoder','QAbstractSlider','QDomNamedNodeMap','QLayout','QSettings', + 'QTextDocument','QAbstractSocket','QDomNode','QLayoutItem','QSharedData','QTextDocumentFragment', + 'QAbstractSpinBox','QDomNodeList','QLCDNumber','QSharedDataPointer','QTextEdit','QAbstractTableModel', + 'QDomNotation','QLibrary','QShortcut','QTextEncoder','QAbstractTextDocumentLayout', + 'QDomProcessingInstruction','QLibraryInfo','QShortcutEvent','QTextFormat','QAccessible','QDomText', + 'QLine','QShowEvent','QTextFragment','QAccessibleBridge','QDoubleSpinBox','QLinearGradient', + 'QSignalMapper','QTextFrame','QAccessibleBridgePlugin','QDoubleValidator','QLineEdit','QSignalSpy', + 'QTextFrameFormat','QAccessibleEvent','QDrag','QLineF','QSize','QTextImageFormat','QAccessibleInterface', + 'QDragEnterEvent','QLinkedList','QSizeF','QTextInlineObject','QAccessibleObject','QDragLeaveEvent', + 'QLinkedListIterator','QSizeGrip','QTextLayout','QAccessiblePlugin','QDragMoveEvent','QLinuxFbScreen', + 'QSizePolicy','QTextLength','QAccessibleWidget','QDropEvent','QList','QSlider','QTextLine','QAction', + 'QDynamicPropertyChangeEvent','QListIterator','QSocketNotifier','QTextList','QActionEvent','QErrorMessage', + 'QListView','QSortFilterProxyModel','QTextListFormat','QActionGroup','QEvent','QListWidget','QSound', + 'QTextObject','QApplication','QEventLoop','QListWidgetItem','QSpacerItem','QTextOption','QAssistantClient', + 'QExtensionFactory','QLocale','QSpinBox','QTextStream','QAxAggregated','QExtensionManager', + 'QMacPasteboardMime','QSplashScreen','QTextTable','QAxBase','QFile','QMacStyle','QSplitter', + 'QTextTableCell','QAxBindable','QFileDialog','QMainWindow','QSplitterHandle','QTextTableFormat', + 'QAxFactory','QFileIconProvider','QMap','QSqlDatabase','QThread','QAxObject','QFileInfo','QMapIterator', + 'QSqlDriver','QThreadStorage','QAxScript','QFileOpenEvent','QMatrix','QSqlDriverCreator','QTime', + 'QAxScriptEngine','QFileSystemWatcher','QMenu','QSqlDriverCreatorBase','QTimeEdit','QAxScriptManager', + 'QFlag','QMenuBar','QSqlDriverPlugin','QTimeLine','QAxWidget','QFlags','QMessageBox','QSqlError','QTimer', + 'QBasicTimer','QFocusEvent','QMetaClassInfo','QSqlField','QTimerEvent','QBitArray','QFocusFrame', + 'QMetaEnum','QSqlIndex','QToolBar','QBitmap','QFont','QMetaMethod','QSqlQuery','QToolBox','QBoxLayout', + 'QFontComboBox','QMetaObject','QSqlQueryModel','QToolButton','QBrush','QFontDatabase','QMetaProperty', + 'QSqlRecord','QToolTip','QBuffer','QFontDialog','QMetaType','QSqlRelation','QTransformedScreen', + 'QButtonGroup','QFontInfo','QMimeData','QSqlRelationalDelegate','QTranslator','QByteArray','QFontMetrics', + 'QMimeSource','QSqlRelationalTableModel','QTreeView','QByteArrayMatcher','QFontMetricsF','QModelIndex', + 'QSqlResult','QTreeWidget','QCache','QFormBuilder','QMotifStyle','QSqlTableModel','QTreeWidgetItem', + 'QCalendarWidget','QFrame','QMouseDriverFactory','QStack','QTreeWidgetItemIterator','QCDEStyle', + 'QFSFileEngine','QMouseDriverPlugin','QStackedLayout','QUdpSocket','QChar','QFtp','QMouseEvent', + 'QStackedWidget','QUiLoader','QCheckBox','QGenericArgument','QMoveEvent','QStandardItem','QUndoCommand', + 'QChildEvent','QGenericReturnArgument','QMovie','QStandardItemEditorCreator','QUndoGroup', + 'QCleanlooksStyle','QGLColormap','QMultiHash','QStandardItemModel','QUndoStack','QClipboard', + 'QGLContext','QMultiMap','QStatusBar','QUndoView','QCloseEvent','QGLFormat','QMutableHashIterator', + 'QStatusTipEvent','QUrl','QColor','QGLFramebufferObject','QMutableLinkedListIterator','QString', + 'QUrlInfo','QColorDialog','QGLPixelBuffer','QMutableListIterator','QStringList','QUuid','QColormap', + 'QGLWidget','QMutableMapIterator','QStringListModel','QValidator','QComboBox','QGradient', + 'QMutableSetIterator','QStringMatcher','QVariant','QCommonStyle','QGraphicsEllipseItem', + 'QMutableVectorIterator','QStyle','QVarLengthArray','QCompleter','QGraphicsItem','QMutex', + 'QStyleFactory','QVBoxLayout','QConicalGradient','QGraphicsItemAnimation','QMutexLocker', + 'QStyleHintReturn','QVector','QContextMenuEvent','QGraphicsItemGroup','QNetworkAddressEntry', + 'QStyleHintReturnMask','QVectorIterator','QCopChannel','QGraphicsLineItem','QNetworkInterface', + 'QStyleOption','QVFbScreen','QCoreApplication','QGraphicsPathItem','QNetworkProxy','QStyleOptionButton', + 'QVNCScreen','QCursor','QGraphicsPixmapItem','QObject','QStyleOptionComboBox','QWaitCondition', + 'QCustomRasterPaintDevice','QGraphicsPolygonItem','QObjectCleanupHandler','QStyleOptionComplex', + 'QWhatsThis','QDataStream','QGraphicsRectItem','QPageSetupDialog','QStyleOptionDockWidget', + 'QWhatsThisClickedEvent','QDataWidgetMapper','QGraphicsScene','QPaintDevice','QStyleOptionFocusRect', + 'QWheelEvent','QDate','QGraphicsSceneContextMenuEvent','QPaintEngine','QStyleOptionFrame','QWidget', + 'QDateEdit','QGraphicsSceneEvent','QPaintEngineState','QStyleOptionFrameV2','QWidgetAction','QDateTime', + 'QGraphicsSceneHoverEvent','QPainter','QStyleOptionGraphicsItem','QWidgetItem','QDateTimeEdit', + 'QGraphicsSceneMouseEvent','QPainterPath','QStyleOptionGroupBox','QWindowsMime','QDBusAbstractAdaptor', + 'QGraphicsSceneWheelEvent','QPainterPathStroker','QStyleOptionHeader','QWindowsStyle', + 'QDBusAbstractInterface','QGraphicsSimpleTextItem','QPaintEvent','QStyleOptionMenuItem', + 'QWindowStateChangeEvent','QDBusArgument','QGraphicsSvgItem','QPair','QStyleOptionProgressBar', + 'QWindowsXPStyle','QDBusConnection','QGraphicsTextItem','QPalette','QStyleOptionProgressBarV2', + 'QWorkspace','QDBusConnectionInterface','QGraphicsView','QPen','QStyleOptionQ3DockWindow','QWriteLocker', + 'QDBusError','QGridLayout','QPersistentModelIndex','QStyleOptionQ3ListView','QWSCalibratedMouseHandler', + 'QDBusInterface','QGroupBox','QPicture','QStyleOptionQ3ListViewItem','QWSClient','QDBusMessage','QHash', + 'QPictureFormatPlugin','QStyleOptionRubberBand','QWSEmbedWidget','QDBusObjectPath','QHashIterator', + 'QPictureIO','QStyleOptionSizeGrip','QWSEvent','QDBusReply','QHBoxLayout','QPixmap','QStyleOptionSlider', + 'QWSInputMethod','QDBusServer','QHeaderView','QPixmapCache','QStyleOptionSpinBox','QWSKeyboardHandler', + 'QDBusSignature','QHelpEvent','QPlastiqueStyle','QStyleOptionTab','QWSMouseHandler','QDBusVariant', + 'QHideEvent','QPluginLoader','QStyleOptionTabBarBase','QWSPointerCalibrationData','QDecoration', + 'QHostAddress','QPoint','QStyleOptionTabV2','QWSScreenSaver','QDecorationFactory','QHostInfo','QPointer', + 'QStyleOptionTabWidgetFrame','QWSServer','QDecorationPlugin','QHoverEvent','QPointF','QStyleOptionTitleBar', + 'QWSTslibMouseHandler','QDesignerActionEditorInterface','QHttp','QPolygon','QStyleOptionToolBar','QWSWindow', + 'QDesignerContainerExtension','QHttpHeader','QPolygonF','QStyleOptionToolBox','QWSWindowSurface', + 'QDesignerCustomWidgetCollectionInterface','QHttpRequestHeader','QPrintDialog','QStyleOptionToolButton', + 'QX11EmbedContainer','QDesignerCustomWidgetInterface','QHttpResponseHeader','QPrintEngine', + 'QStyleOptionViewItem','QX11EmbedWidget','QDesignerFormEditorInterface','QIcon','QPrinter', + 'QStyleOptionViewItemV2','QX11Info','QDesignerFormWindowCursorInterface','QIconDragEvent','QProcess', + 'QStylePainter','QXmlAttributes','QDesignerFormWindowInterface','QIconEngine','QProgressBar', + 'QStylePlugin','QXmlContentHandler','QDesignerFormWindowManagerInterface','QIconEnginePlugin', + 'QProgressDialog','QSvgRenderer','QXmlDeclHandler','QDesignerMemberSheetExtension','QImage', + 'QProxyModel','QSvgWidget','QXmlDefaultHandler','QDesignerObjectInspectorInterface','QImageIOHandler', + 'QPushButton','QSyntaxHighlighter','QXmlDTDHandler','QDesignerPropertyEditorInterface','QImageIOPlugin', + 'QQueue','QSysInfo','QXmlEntityResolver','QDesignerPropertySheetExtension','QImageReader','QRadialGradient', + 'QSystemLocale','QXmlErrorHandler','QDesignerTaskMenuExtension','QImageWriter','QRadioButton', + 'QSystemTrayIcon','QXmlInputSource','QDesignerWidgetBoxInterface','QInputContext','QRasterPaintEngine', + 'QTabBar','QXmlLexicalHandler','QDesktopServices','QInputContextFactory','QReadLocker','QTabletEvent', + 'QXmlLocator','QDesktopWidget','QInputContextPlugin','QReadWriteLock','QTableView','QXmlNamespaceSupport', + 'QDial','QInputDialog','QRect','QTableWidget','QXmlParseException','QDialog','QInputEvent','QRectF', + 'QTableWidgetItem','QXmlReader','QDialogButtonBox','QInputMethodEvent','QRegExp', + 'QTableWidgetSelectionRange','QXmlSimpleReader' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ee;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => 'http://doc.trolltech.com/4.2/{FNAME}.html' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/cpp.php b/ehcp/net2ftp/plugins/geshi/geshi/cpp.php new file mode 100644 index 0000000..7db2681 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/cpp.php @@ -0,0 +1,185 @@ + 'C++', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return', + 'switch', 'throw', 'while' + ), + 2 => array( + 'NULL', 'false', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace', + 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast', + 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' + ), + 3 => array( + 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this', + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint', + 'register', 'short', 'shortint', 'signed', 'static', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + ), + ), + 'SYMBOLS' => array( + 0 => array('(', ')', '{', '}', '[', ']'), + 1 => array('<', '>','='), + 2 => array('+', '-', '*', '/', '%'), + 3 => array('!', '^', '&', '|'), + 4 => array(':') + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #666666;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #008000;' + ), + 'STRINGS' => array( + 0 => 'color: #FF0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;', + 1 => 'color: #000080;', + 2 => 'color: #000040;', + 3 => 'color: #000040;', + 4 => 'color: #008080;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4, + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-" + ) + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/csharp.php b/ehcp/net2ftp/plugins/geshi/geshi/csharp.php new file mode 100644 index 0000000..dfd3e8e --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/csharp.php @@ -0,0 +1,238 @@ + 'C#', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'HARDQUOTE' => array('@"', '"'), + 'HARDESCAPE' => array('""'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'as', 'auto', 'base', 'break', 'case', 'catch', 'const', 'continue', + 'default', 'do', 'else', 'event', 'explicit', 'extern', 'false', + 'finally', 'fixed', 'for', 'foreach', 'goto', 'if', 'implicit', + 'in', 'internal', 'lock', 'namespace', 'null', 'operator', 'out', + 'override', 'params', 'private', 'protected', 'public', 'readonly', + 'ref', 'return', 'sealed', 'stackalloc', 'static', 'switch', 'this', + 'throw', 'true', 'try', 'unsafe', 'using', 'virtual', 'void', 'while' + ), + 2 => array( + '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if', + '#line', '#region', '#undef', '#warning' + ), + 3 => array( + 'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked' + ), + 4 => array( + 'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double', + 'enum', 'float', 'int', 'interface', 'long', 'object', 'sbyte', + 'short', 'string', 'struct', 'uint', 'ulong', 'ushort' + ), + 5 => array( + 'Microsoft.Win32', + 'System', + 'System.CodeDOM', + 'System.CodeDOM.Compiler', + 'System.Collections', + 'System.Collections.Bases', + 'System.ComponentModel', + 'System.ComponentModel.Design', + 'System.ComponentModel.Design.CodeModel', + 'System.Configuration', + 'System.Configuration.Assemblies', + 'System.Configuration.Core', + 'System.Configuration.Install', + 'System.Configuration.Interceptors', + 'System.Configuration.Schema', + 'System.Configuration.Web', + 'System.Core', + 'System.Data', + 'System.Data.ADO', + 'System.Data.Design', + 'System.Data.Internal', + 'System.Data.SQL', + 'System.Data.SQLTypes', + 'System.Data.XML', + 'System.Data.XML.DOM', + 'System.Data.XML.XPath', + 'System.Data.XML.XSLT', + 'System.Diagnostics', + 'System.Diagnostics.SymbolStore', + 'System.DirectoryServices', + 'System.Drawing', + 'System.Drawing.Design', + 'System.Drawing.Drawing2D', + 'System.Drawing.Imaging', + 'System.Drawing.Printing', + 'System.Drawing.Text', + 'System.Globalization', + 'System.IO', + 'System.IO.IsolatedStorage', + 'System.Messaging', + 'System.Net', + 'System.Net.Sockets', + 'System.NewXml', + 'System.NewXml.XPath', + 'System.NewXml.Xsl', + 'System.Reflection', + 'System.Reflection.Emit', + 'System.Resources', + 'System.Runtime.InteropServices', + 'System.Runtime.InteropServices.Expando', + 'System.Runtime.Remoting', + 'System.Runtime.Serialization', + 'System.Runtime.Serialization.Formatters', + 'System.Runtime.Serialization.Formatters.Binary', + 'System.Security', + 'System.Security.Cryptography', + 'System.Security.Cryptography.X509Certificates', + 'System.Security.Permissions', + 'System.Security.Policy', + 'System.Security.Principal', + 'System.ServiceProcess', + 'System.Text', + 'System.Text.RegularExpressions', + 'System.Threading', + 'System.Timers', + 'System.Web', + 'System.Web.Caching', + 'System.Web.Configuration', + 'System.Web.Security', + 'System.Web.Services', + 'System.Web.Services.Description', + 'System.Web.Services.Discovery', + 'System.Web.Services.Protocols', + 'System.Web.UI', + 'System.Web.UI.Design', + 'System.Web.UI.Design.WebControls', + 'System.Web.UI.Design.WebControls.ListControls', + 'System.Web.UI.HtmlControls', + 'System.Web.UI.WebControls', + 'System.WinForms', + 'System.WinForms.ComponentModel', + 'System.WinForms.Design', + 'System.Xml', + 'System.Xml.Serialization', + 'System.Xml.Serialization.Code', + 'System.Xml.Serialization.Schema' + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':', + '(', ')', '{', '}', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #FF8000; font-weight: bold;', + 3 => 'color: #008000;', + 4 => 'color: #FF0000;', + 5 => 'color: #000000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?q={FNAME}+msdn.microsoft.com', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4, + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-" + ) + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/css-gen.cfg b/ehcp/net2ftp/plugins/geshi/geshi/css-gen.cfg new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/plugins/geshi/geshi/css.php b/ehcp/net2ftp/plugins/geshi/geshi/css.php new file mode 100644 index 0000000..43f834f --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/css.php @@ -0,0 +1,208 @@ + 'CSS', + 'COMMENT_SINGLE' => array(1 => '@'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'aqua', 'azimuth', 'background-attachment', 'background-color', + 'background-image', 'background-position', 'background-repeat', + 'background', 'black', 'blue', 'border-bottom-color', + 'border-bottom-style', 'border-bottom-width', 'border-left-color', + 'border-left-style', 'border-left-width', 'border-right', + 'border-right-color', 'border-right-style', 'border-right-width', + 'border-top-color', 'border-top-style', + 'border-top-width','border-bottom', 'border-collapse', + 'border-left', 'border-width', 'border-color', 'border-spacing', + 'border-style', 'border-top', 'border', 'caption-side', 'clear', + 'clip', 'color', 'content', 'counter-increment', 'counter-reset', + 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display', + 'elevation', 'empty-cells', 'float', 'font-family', 'font-size', + 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', + 'font-weight', 'font', 'line-height', 'letter-spacing', + 'list-style', 'list-style-image', 'list-style-position', + 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right', + 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height', + 'max-width', 'min-height', 'min-width', 'orphans', 'outline', + 'outline-color', 'outline-style', 'outline-width', 'overflow', + 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', + 'padding', 'page', 'page-break-after', 'page-break-before', + 'page-break-inside', 'pause-after', 'pause-before', 'pause', + 'pitch', 'pitch-range', 'play-during', 'position', 'quotes', + 'richness', 'right', 'size', 'speak-header', 'speak-numeral', + 'speak-punctuation', 'speak', 'speech-rate', 'stress', + 'table-layout', 'text-align', 'text-decoration', 'text-indent', + 'text-shadow', 'text-transform', 'top', 'unicode-bidi', + 'vertical-align', 'visibility', 'voice-family', 'volume', + 'white-space', 'widows', 'width', 'word-spacing', 'z-index', + 'bottom', 'left', 'height' + ), + 2 => array( + 'above', 'absolute', 'always', 'armenian', 'aural', 'auto', + 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink', + 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left', + 'center-right', 'center', 'circle', 'cjk-ideographic', + 'close-quote', 'collapse', 'condensed', 'continuous', 'crop', + 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero', + 'decimal', 'default', 'digits', 'disc', 'dotted', 'double', + 'e-resize', 'embed', 'extra-condensed', 'extra-expanded', + 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast', + 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove', + 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high', + 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table', + 'inline', 'inset', 'inside', 'invert', 'italic', 'justify', + 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large', + 'left-side', 'leftwards', 'level', 'lighter', 'lime', + 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek', + 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon', + 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize', + 'narrower', 'navy', 'ne-resize', 'no-close-quote', + 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap', + 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset', + 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px', + 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', + 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif', + 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', + 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower', + 'small-caps', 'small-caption', 'smaller', 'soft', 'solid', + 'spell-out', 'square', 'static', 'status-bar', 'super', + 'sw-resize', 'table-caption', 'table-cell', 'table-column', + 'table-column-group', 'table-footer-group', 'table-header-group', + 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom', + 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed', + 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin', + 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait', + 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud', + 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow', + 'yes' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', ':', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #cc00cc;', + 1 => 'color: #6666ff;', + 2 => 'color: #3333ff;', + 3 => 'color: #933;', + 4 => 'color: #933;', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\#[a-zA-Z0-9\-_]+', + 1 => '\.[a-zA-Z0-9\-_]+', + 2 => ':[a-zA-Z0-9\-]+', + 3 => '(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)', + 4 => array( + GESHI_SEARCH => '(url\()([^)]+)(\))', + GESHI_REPLACE => '\\2', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_MODIFIERS => 'si' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +if (isset($this) && is_a($this, 'GeSHi')) { + $language_data['STYLES']['NUMBERS'][0] = $language_data['STYLES']['REGEXPS'][3]; +} + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/d.php b/ehcp/net2ftp/plugins/geshi/geshi/d.php new file mode 100644 index 0000000..4850ab7 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/d.php @@ -0,0 +1,285 @@ + 'D', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'", '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'while', + 'switch', + 'if', + 'foreach', + 'for', + 'goto', + 'return', + 'else', + 'do', + 'case', + 'continue', + 'break' + ), + 2 => array( + 'with', + 'union', + 'typeof', + 'typeid', + 'typedef', + 'try', + 'true', + 'throw', + 'this', + 'super', + 'pragma', + 'out', + 'null', + 'new', + 'module', + 'mixin', + 'is', + 'invariant', + 'interface', + 'inout', + 'in', + 'import', + 'function', + 'finally', + 'false', + 'extern', + 'delete', + 'delegate', + 'default', + 'catch', + 'cast', + 'body', + 'assert', + 'asm', + 'alias' + ), + 3 => array( + 'TypeInfo', + 'SwitchError', + 'OutOfMemoryException', + 'Object', + 'ModuleInfo', + 'Interface', + 'Exception', + 'Error', + 'ClassInfo', + 'ArrayBoundsError', + 'AssertError', + '_d_throw', + '_d_switch_ustring', + '_d_switch_string', + '_d_switch_dstring', + '_d_OutOfMemory', + '_d_obj_eq', + '_d_obj_cmp', + '_d_newclass', + '_d_newbitarray', + '_d_newarrayi', + '_d_new', + '_d_monitorrelease', + '_d_monitor_prolog', + '_d_monitor_handler', + '_d_monitorexit', + '_d_monitor_epilog', + '_d_monitorenter', + '_d_local_unwind', + '_d_isbaseof2', + '_d_isbaseof', + '_d_invariant', + '_d_interface_vtbl', + '_d_interface_cast', + '_d_framehandler', + '_d_exception_filter', + '_d_exception', + '_d_dynamic_cast', + '_d_delmemory', + '_d_delinterface', + '_d_delclass', + '_d_delarray', + '_d_criticalexit', + '_d_criticalenter', + '_d_create_exception_object', + '_d_callfinalizer', + '_d_arraysetlengthb', + '_d_arraysetlength', + '_d_arraysetbit2', + '_d_arraysetbit', + '_d_arraycopybit', + '_d_arraycopy', + '_d_arraycatn', + '_d_arraycatb', + '_d_arraycat', + '_d_arraycast_frombit', + '_d_arraycast', + '_d_arrayappendcb', + '_d_arrayappendc', + '_d_arrayappendb', + '_d_arrayappend', + ), + 4 => array( + 'wchar', + 'volatile', + 'void', + 'version', + 'ushort', + 'unittest', + 'ulong', + 'uint', + 'ucent', + 'ubyte', + 'template', + 'struct', + 'static', + 'synchronized', + 'size_t', + 'short', + 'real', + 'public', + 'protected', + 'private', + 'ptrdiff_t', + 'package', + 'override', + 'long', + 'int', + 'ireal', + 'ifloat', + 'idouble', + 'float', + 'final', + 'export', + 'enum', + 'double', + 'deprecated', + 'debug', + 'dchar', + 'creal', + 'const', + 'class', + 'char', + 'cfloat', + 'cent', + 'cdouble', + 'byte', + 'bool', + 'bit', + 'auto', + 'align', + 'abstract' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '?', '!', ';', ':', ',', '...', '..', + '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '=', '~', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/delphi.php b/ehcp/net2ftp/plugins/geshi/geshi/delphi.php new file mode 100644 index 0000000..7f95859 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/delphi.php @@ -0,0 +1,280 @@ + 'Delphi', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case', 'Class', + 'Const', 'Constructor', 'Contains', 'Destructor', 'DispInterface', 'Div', + 'Do', 'DownTo', 'Else', 'End', 'Except', 'File', 'Finalization', + 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', + 'Inherited', 'Initialization', 'Inline', 'Interface', 'Is', 'Label', + 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Overload', 'Override', + 'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property', + 'Protected', 'Public', 'Published', 'Raise', 'Record', 'Repeat', + 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', + 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var', 'Virtual', 'While', + 'With', 'Xor', 'assembler', 'cdecl', 'far', 'near', 'pascal', 'register', + 'safecall', 'stdcall', 'varargs' + ), + 2 => array( + 'nil', 'false', 'self', 'true', 'var', 'type', 'const' + ), + 3 => array( + 'Abs', 'AcquireExceptionObject', 'Addr', 'AnsiToUtf8', 'Append', 'ArcTan', + 'Assert', 'AssignFile', 'Assigned', 'BeginThread', 'BlockRead', + 'BlockWrite', 'Break', 'ChDir', 'Chr', 'Close', 'CloseFile', + 'CompToCurrency', 'CompToDouble', 'Concat', 'Continue', 'Copy', 'Cos', + 'Dec', 'Delete', 'Dispose', 'DoubleToComp', 'EndThread', 'EnumModules', + 'EnumResourceModules', 'Eof', 'Eoln', 'Erase', 'ExceptAddr', + 'ExceptObject', 'Exclude', 'Exit', 'Exp', 'FilePos', 'FileSize', + 'FillChar', 'Finalize', 'FindClassHInstance', 'FindHInstance', + 'FindResourceHInstance', 'Flush', 'Frac', 'FreeMem', 'Get8087CW', + 'GetDir', 'GetLastError', 'GetMem', 'GetMemoryManager', + 'GetModuleFileName', 'GetVariantManager', 'Halt', 'Hi', 'High', + 'IOResult', 'Inc', 'Include', 'Initialize', 'Insert', 'Int', + 'IsMemoryManagerSet', 'IsVariantManagerSet', 'Length', 'Ln', 'Lo', 'Low', + 'MkDir', 'Move', 'New', 'Odd', 'OleStrToStrVar', 'OleStrToString', 'Ord', + 'PUCS4Chars', 'ParamCount', 'ParamStr', 'Pi', 'Pos', 'Pred', 'Ptr', + 'Random', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', + 'ReleaseExceptionObject', 'Rename', 'Reset', 'Rewrite', 'RmDir', 'Round', + 'RunError', 'Seek', 'SeekEof', 'SeekEoln', 'Set8087CW', 'SetLength', + 'SetLineBreakStyle', 'SetMemoryManager', 'SetString', 'SetTextBuf', + 'SetVariantManager', 'Sin', 'SizeOf', 'Slice', 'Sqr', 'Sqrt', 'Str', + 'StringOfChar', 'StringToOleStr', 'StringToWideChar', 'Succ', 'Swap', + 'Trunc', 'Truncate', 'TypeInfo', 'UCS4StringToWideString', 'UTF8Decode', + 'UTF8Encode', 'UnicodeToUtf8', 'UniqueString', 'UpCase', 'Utf8ToAnsi', + 'Utf8ToUnicode', 'Val', 'VarArrayRedim', 'VarClear', + 'WideCharLenToStrVar', 'WideCharLenToString', 'WideCharToStrVar', + 'WideCharToString', 'WideStringToUCS4String', 'Write', 'WriteLn', + + 'Abort', 'AddExitProc', 'AddTerminateProc', 'AdjustLineBreaks', 'AllocMem', + 'AnsiCompareFileName', 'AnsiCompareStr', 'AnsiCompareText', + 'AnsiDequotedStr', 'AnsiExtractQuotedStr', 'AnsiLastChar', + 'AnsiLowerCase', 'AnsiLowerCaseFileName', 'AnsiPos', 'AnsiQuotedStr', + 'AnsiSameStr', 'AnsiSameText', 'AnsiStrComp', 'AnsiStrIComp', + 'AnsiStrLComp', 'AnsiStrLIComp', 'AnsiStrLastChar', 'AnsiStrLower', + 'AnsiStrPos', 'AnsiStrRScan', 'AnsiStrScan', 'AnsiStrUpper', + 'AnsiUpperCase', 'AnsiUpperCaseFileName', 'AppendStr', 'AssignStr', + 'Beep', 'BoolToStr', 'ByteToCharIndex', 'ByteToCharLen', 'ByteType', + 'CallTerminateProcs', 'ChangeFileExt', 'CharLength', 'CharToByteIndex', + 'CharToByteLen', 'CompareMem', 'CompareStr', 'CompareText', 'CreateDir', + 'CreateGUID', 'CurrToStr', 'CurrToStrF', 'CurrentYear', 'Date', + 'DateTimeToFileDate', 'DateTimeToStr', 'DateTimeToString', + 'DateTimeToSystemTime', 'DateTimeToTimeStamp', 'DateToStr', 'DayOfWeek', + 'DecodeDate', 'DecodeDateFully', 'DecodeTime', 'DeleteFile', + 'DirectoryExists', 'DiskFree', 'DiskSize', 'DisposeStr', 'EncodeDate', + 'EncodeTime', 'ExceptionErrorMessage', 'ExcludeTrailingBackslash', + 'ExcludeTrailingPathDelimiter', 'ExpandFileName', 'ExpandFileNameCase', + 'ExpandUNCFileName', 'ExtractFileDir', 'ExtractFileDrive', + 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', + 'ExtractRelativePath', 'ExtractShortPathName', 'FileAge', 'FileClose', + 'FileCreate', 'FileDateToDateTime', 'FileExists', 'FileGetAttr', + 'FileGetDate', 'FileIsReadOnly', 'FileOpen', 'FileRead', 'FileSearch', + 'FileSeek', 'FileSetAttr', 'FileSetDate', 'FileSetReadOnly', 'FileWrite', + 'FinalizePackage', 'FindClose', 'FindCmdLineSwitch', 'FindFirst', + 'FindNext', 'FloatToCurr', 'FloatToDateTime', 'FloatToDecimal', + 'FloatToStr', 'FloatToStrF', 'FloatToText', 'FloatToTextFmt', + 'FmtLoadStr', 'FmtStr', 'ForceDirectories', 'Format', 'FormatBuf', + 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'FreeAndNil', + 'GUIDToString', 'GetCurrentDir', 'GetEnvironmentVariable', + 'GetFileVersion', 'GetFormatSettings', 'GetLocaleFormatSettings', + 'GetModuleName', 'GetPackageDescription', 'GetPackageInfo', 'GetTime', + 'IncAMonth', 'IncMonth', 'IncludeTrailingBackslash', + 'IncludeTrailingPathDelimiter', 'InitializePackage', 'IntToHex', + 'IntToStr', 'InterlockedDecrement', 'InterlockedExchange', + 'InterlockedExchangeAdd', 'InterlockedIncrement', 'IsDelimiter', + 'IsEqualGUID', 'IsLeapYear', 'IsPathDelimiter', 'IsValidIdent', + 'Languages', 'LastDelimiter', 'LoadPackage', 'LoadStr', 'LowerCase', + 'MSecsToTimeStamp', 'NewStr', 'NextCharIndex', 'Now', 'OutOfMemoryError', + 'QuotedStr', 'RaiseLastOSError', 'RaiseLastWin32Error', 'RemoveDir', + 'RenameFile', 'ReplaceDate', 'ReplaceTime', 'SafeLoadLibrary', + 'SameFileName', 'SameText', 'SetCurrentDir', 'ShowException', 'Sleep', + 'StrAlloc', 'StrBufSize', 'StrByteType', 'StrCat', 'StrCharLength', + 'StrComp', 'StrCopy', 'StrDispose', 'StrECopy', 'StrEnd', 'StrFmt', + 'StrIComp', 'StrLCat', 'StrLComp', 'StrLCopy', 'StrLFmt', 'StrLIComp', + 'StrLen', 'StrLower', 'StrMove', 'StrNew', 'StrNextChar', 'StrPCopy', + 'StrPLCopy', 'StrPas', 'StrPos', 'StrRScan', 'StrScan', 'StrToBool', + 'StrToBoolDef', 'StrToCurr', 'StrToCurrDef', 'StrToDate', 'StrToDateDef', + 'StrToDateTime', 'StrToDateTimeDef', 'StrToFloat', 'StrToFloatDef', + 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', + 'StrToTimeDef', 'StrUpper', 'StringReplace', 'StringToGUID', 'Supports', + 'SysErrorMessage', 'SystemTimeToDateTime', 'TextToFloat', 'Time', + 'TimeStampToDateTime', 'TimeStampToMSecs', 'TimeToStr', 'Trim', + 'TrimLeft', 'TrimRight', 'TryEncodeDate', 'TryEncodeTime', + 'TryFloatToCurr', 'TryFloatToDateTime', 'TryStrToBool', 'TryStrToCurr', + 'TryStrToDate', 'TryStrToDateTime', 'TryStrToFloat', 'TryStrToInt', + 'TryStrToInt64', 'TryStrToTime', 'UnloadPackage', 'UpperCase', + 'WideCompareStr', 'WideCompareText', 'WideFmtStr', 'WideFormat', + 'WideFormatBuf', 'WideLowerCase', 'WideSameStr', 'WideSameText', + 'WideUpperCase', 'Win32Check', 'WrapText', + + 'ActivateClassGroup', 'AllocateHwnd', 'BinToHex', 'CheckSynchronize', + 'CollectionsEqual', 'CountGenerations', 'DeallocateHwnd', 'EqualRect', + 'ExtractStrings', 'FindClass', 'FindGlobalComponent', 'GetClass', + 'GroupDescendantsWith', 'HexToBin', 'IdentToInt', + 'InitInheritedComponent', 'IntToIdent', 'InvalidPoint', + 'IsUniqueGlobalComponentName', 'LineStart', 'ObjectBinaryToText', + 'ObjectResourceToText', 'ObjectTextToBinary', 'ObjectTextToResource', + 'PointsEqual', 'ReadComponentRes', 'ReadComponentResEx', + 'ReadComponentResFile', 'Rect', 'RegisterClass', 'RegisterClassAlias', + 'RegisterClasses', 'RegisterComponents', 'RegisterIntegerConsts', + 'RegisterNoIcon', 'RegisterNonActiveX', 'SmallPoint', 'StartClassGroup', + 'TestStreamFormat', 'UnregisterClass', 'UnregisterClasses', + 'UnregisterIntegerConsts', 'UnregisterModuleClasses', + 'WriteComponentResFile', + + 'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec', + 'ArcSecH', 'ArcSin', 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil', + 'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'CotH', 'Cotan', 'Csc', 'CscH', + 'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad', + 'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor', + 'Frexp', 'FutureValue', 'GetExceptionMask', 'GetPrecisionMode', + 'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', 'Hypot', + 'InRange', 'IntPower', 'InterestPayment', 'InterestRate', + 'InternalRateOfReturn', 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1', + 'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', 'MaxValue', 'Mean', + 'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis', + 'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment', + 'Poly', 'PopnStdDev', 'PopnVariance', 'Power', 'PresentValue', + 'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', 'RoundTo', + 'SLNDepreciation', 'SYDDepreciation', 'SameValue', 'Sec', 'SecH', + 'Secant', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', 'Sign', + 'SimpleRoundTo', 'SinCos', 'Sinh', 'StdDev', 'Sum', 'SumInt', + 'SumOfSquares', 'SumsAndSquares', 'Tan', 'Tanh', 'TotalVariance', + 'Variance' + ), + 4 => array( + 'AnsiChar', 'AnsiString', 'Bool', 'Boolean', 'Byte', 'ByteBool', 'Cardinal', 'Char', + 'Comp', 'Currency', 'DWORD', 'Double', 'Extended', 'Int64', 'Integer', 'IUnknown', + 'LongBool', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PBool', 'PBoolean', 'PByte', + 'PByteArray', 'PCardinal', 'PChar', 'PComp', 'PCurrency', 'PDWORD', 'PDate', 'PDateTime', + 'PDouble', 'PExtended', 'PInt64', 'PInteger', 'PLongInt', 'PLongWord', 'Pointer', 'PPointer', + 'PShortInt', 'PShortString', 'PSingle', 'PSmallInt', 'PString', 'PHandle', 'PVariant', 'PWord', + 'PWordArray', 'PWordBool', 'PWideChar', 'PWideString', 'Real', 'Real48', 'ShortInt', 'ShortString', + 'Single', 'SmallInt', 'String', 'TClass', 'TDate', 'TDateTime', 'TextFile', 'THandle', + 'TObject', 'TTime', 'Variant', 'WideChar', 'WideString', 'Word', 'WordBool' + ), + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'SYMBOLS' => array( + 0 => array('(', ')', '[', ']'), + 1 => array('.', ',', ':', ';'), + 2 => array('@', '^'), + 3 => array('=', '+', '-', '*', '/') + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'REGEXPS' => array( + 0 => 'color: #9ac;', + 1 => 'color: #ff0000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;', + 1 => 'color: #66cc66;', + 2 => 'color: #66cc66;', + 3 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '\$[0-9a-fA-F]+', + 1 => '\#\$?[0-9]{1,3}' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 2 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/diff.php b/ehcp/net2ftp/plugins/geshi/geshi/diff.php new file mode 100644 index 0000000..6acd308 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/diff.php @@ -0,0 +1,184 @@ + 'Diff', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => ' ', + 'KEYWORDS' => array( + 1 => array( + '\ No newline at end of file' + ), + 2 => array( + '***************' /* This only seems to works in some cases? */ + ), + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #aaaaaa; font-style: italic;', + 2 => 'color: #dd6611;', + ), + 'COMMENTS' => array( + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => '' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => '' + ), + 'SCRIPT' => array( + 0 => '' + ), + 'REGEXPS' => array( + 0 => 'color: #440088;', + 1 => 'color: #991111;', + 2 => 'color: #00b000;', + 3 => 'color: #888822;', + 4 => 'color: #888822;', + 5 => 'color: #0011dd;', + 6 => 'color: #440088;', + 7 => 'color: #991111;', + 8 => 'color: #00b000;', + 9 => 'color: #888822;', + ), + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + 0 => "[0-9,]+[acd][0-9,]+", + 1 => array( + GESHI_SEARCH => '^\\<.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '^\\>.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '^[\\-]{3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 4 => array( + GESHI_SEARCH => '^(\\+){3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 5 => array( + GESHI_SEARCH => '^\\!.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 6 => array( + GESHI_SEARCH => '^[\\@]{2}.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 7 => array( + GESHI_SEARCH => '^\\-.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 8 => array( + GESHI_SEARCH => '^\\+.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 9 => array( + GESHI_SEARCH => '^(\\*){3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/div.php b/ehcp/net2ftp/plugins/geshi/geshi/div.php new file mode 100644 index 0000000..2157787 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/div.php @@ -0,0 +1,126 @@ + 'DIV', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'while','until','to','switch','step','return','repeat','loop','if','from','frame','for','end','elseif', + 'else','default','debug','continue','clone','case','break','begin' + ), + 2 => array( + 'xor','whoami','type','sizeof','pointer','or','offset','not','neg','mod','id','dup','and','_ne','_lt', + '_le','_gt','_ge','_eq' + ), + 3 => array( + 'setup_program','program','process','private','local','import','global','function','const', + 'compiler_options' + ), + 4 => array( + 'word','struct','string','int','byte' + ), + ), + 'SYMBOLS' => array( + '(',')','[',']','=','+','-','*','/','!','%','^','&',':',';',',','<','>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0040b1;', + 2 => 'color: #000000;', + 3 => 'color: #000066; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #44aa44;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #202020;', + ), + 'SYMBOLS' => array( + 0 => 'color: #44aa44;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/dos.php b/ehcp/net2ftp/plugins/geshi/geshi/dos.php new file mode 100644 index 0000000..b57e7bc --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/dos.php @@ -0,0 +1,185 @@ + 'DOS', + 'COMMENT_SINGLE' => array(1 =>'REM', 2 => '@REM'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /* Flow control keywords */ + 1 => array( + 'if', 'else', 'goto', + 'for', 'in', 'do', + 'call', 'exit' + ), + /* IF statement keywords */ + 2 => array( + 'not', 'exist', 'errorlevel', + 'defined', + 'equ', 'neq', 'lss', 'leq', 'gtr', 'geq' + ), + /* Internal commands */ + 3 => array( + 'shift', + 'cd', 'dir', 'echo', + 'setlocal', 'endlocal', 'set', + 'pause' + ), + /* Special files */ + + 4 => array( + 'prn', 'nul', 'lpt3', 'lpt2', 'lpt1', 'con', + 'com4', 'com3', 'com2', 'com1', 'aux' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00b100; font-weight: bold;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #b1b100; font-weight: bold;', + 4 => 'color: #0000ff; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #33cc33;', + 1 => 'color: #33cc33;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #b100b1; font-weight: bold;', + 1 => 'color: #448844;', + 2 => 'color: #448888;' + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'URLS' => array( + 1 => 'http://www.ss64.com/nt/{FNAME}.html', + 2 => 'http://www.ss64.com/nt/{FNAME}.html', + 3 => 'http://www.ss64.com/nt/{FNAME}.html', + 4 => 'http://www.ss64.com/nt/{FNAME}.html' + ), + 'REGEXPS' => array( + /* Label */ + 0 => array( +/* GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + /* Variable assignement */ + 1 => array( +/* GESHI_SEARCH => '(SET[\s]+(?si:/A[\s]+|/P[\s]+|))([^=\s\n]+)([\s]*=)',*/ + GESHI_SEARCH => '(SET[\s]+(?si:/A[\s]+|/P[\s]+|))([^=\n]+)([\s]*=)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ), + /* Arguments or variable evaluation */ + 2 => array( +/* GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((? '(%)([\d*]|[^%]*(?=%))((? '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/dot.php b/ehcp/net2ftp/plugins/geshi/geshi/dot.php new file mode 100644 index 0000000..15709b7 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/dot.php @@ -0,0 +1,158 @@ + 'dot', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array('URL', 'arrowhead', 'arrowsize', 'arrowtail', 'bb', 'bgcolor', 'bottomlabel', + 'center', 'clusterrank', 'color', 'comment', 'constraint', 'decorate', + 'dir', 'distortion', 'fillcolor', 'fixedsize', 'fontcolor', + 'fontname', 'fontsize', 'group', 'headclip', 'headlabel', 'headport', + 'height', 'id', 'label', 'labelangle', 'labeldistance', 'labelfontcolor', + 'labelfontname', 'labelfontsize', 'layer', 'layers', 'margin', 'mclimit', + 'minlen', 'nodesep', 'nslimit', 'ordering', 'orientation', 'page', + 'pagedir', 'peripheries', 'port_label_distance', 'quantum', 'rank', 'rankdir', + 'ranksep', 'ratio', 'regular', 'rotate', 'samehead', 'sametail', 'searchsize', + 'shape', 'shapefile', 'showboxes', 'sides', 'size', 'skew', 'style', + 'tailclip', 'taillabel', 'tailport', 'toplabel', 'weight', 'width' + ), + 2 => array('node', 'graph', 'digraph', 'strict', 'edge', 'subgraph'), + 3 => array('FALSE', 'Mcircle', 'Mdiamond', 'Mrecord', 'Msquare', 'TRUE', 'auto', 'back', + 'bold', 'both', 'box', 'circle', 'compress', 'dashed', 'diamond', 'dot', + 'dotted', 'doublecircle', 'doubleoctagon', 'egg', 'ellipse', 'epsf', 'false', + 'fill', 'filled', 'forward', 'global', 'hexagon', 'house', 'inv', 'invdot', + 'invhouse', 'invis', 'invodot', 'invtrapezium', 'invtriangle', 'local', 'max', + 'min', 'none', 'normal', 'octagon', 'odot', 'out', 'parallelogram', 'plaintext', + 'polygon', 'record', 'same', 'solid', 'trapezium', 'triangle', 'tripleoctagon', + 'true' + ), + 4 => array('aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'black', + 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', + 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', + 'cyan', 'darkgoldenrod', 'darkgreen', 'darkkhaki', 'darkolivegreen', + 'darkorange', 'darkorchid', 'darksalmon', 'darkseagreen', 'darkslateblue', + 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', + 'dimgray', 'dodgerblue', 'firebrick', 'forestgreen', 'gainsboro', 'ghostwhite', + 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink', + 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', + 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcyan', 'lightgoldenrod', + 'lightgoldenrodyellow', 'lightgray', 'lightpink', 'lightsalmon', + 'lightseagreen', 'lightskyblue', 'lightslateblue', 'lightslategray', + 'lightyellow', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', + 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', + 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', + 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', + 'navyblue', 'oldlace', 'olivedrab', 'oralwhite', 'orange', 'orangered', + 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', + 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', + 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'salmon2', 'sandybrown', + 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'snow', + 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', + 'violetred', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen' + ) + ), + 'SYMBOLS' => array( + '[', ']', '{', '}', '-', '+', '*', '/', '<', '>', '!', '~', '%', '&', '|', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #993333;', + 4 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #af624d; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'METHODS' => array( + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ), + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array(), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/eiffel.php b/ehcp/net2ftp/plugins/geshi/geshi/eiffel.php new file mode 100644 index 0000000..a81d873 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/eiffel.php @@ -0,0 +1,394 @@ + 'Eiffel', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '%', + 'KEYWORDS' => array( + 1 => array( + 'separate', + 'invariant', + 'inherit', + 'indexing', + 'feature', + 'expanded', + 'deferred', + 'class' + ), + 2 => array( + 'xor', + 'when', + 'variant', + 'until', + 'unique', + 'undefine', + 'then', + 'strip', + 'select', + 'retry', + 'rescue', + 'require', + 'rename', + 'reference', + 'redefine', + 'prefix', + 'or', + 'once', + 'old', + 'obsolete', + 'not', + 'loop', + 'local', + 'like', + 'is', + 'inspect', + 'infix', + 'include', + 'implies', + 'if', + 'frozen', + 'from', + 'external', + 'export', + 'ensure', + 'end', + 'elseif', + 'else', + 'do', + 'creation', + 'create', + 'check', + 'as', + 'and', + 'alias', + 'agent' + ), + 3 => array( + 'Void', + 'True', + 'Result', + 'Precursor', + 'False', + 'Current' + ), + 4 => array( + 'UNIX_SIGNALS', + 'UNIX_FILE_INFO', + 'UNBOUNDED', + 'TWO_WAY_TREE_CURSOR', + 'TWO_WAY_TREE', + 'TWO_WAY_SORTED_SET', + 'TWO_WAY_LIST', + 'TWO_WAY_CURSOR_TREE', + 'TWO_WAY_CIRCULAR', + 'TWO_WAY_CHAIN_ITERATOR', + 'TUPLE', + 'TREE', + 'TRAVERSABLE', + 'TO_SPECIAL', + 'THREAD_CONTROL', + 'THREAD_ATTRIBUTES', + 'THREAD', + 'TABLE', + 'SUBSET', + 'STRING_HANDLER', + 'STRING', + 'STREAM', + 'STORABLE', + 'STD_FILES', + 'STACK', + 'SPECIAL', + 'SORTED_TWO_WAY_LIST', + 'SORTED_STRUCT', + 'SORTED_LIST', + 'SINGLE_MATH', + 'SET', + 'SEQUENCE', + 'SEQ_STRING', + 'SEMAPHORE', + 'ROUTINE', + 'RESIZABLE', + 'RECURSIVE_TREE_CURSOR', + 'RECURSIVE_CURSOR_TREE', + 'REAL_REF', + 'REAL', + 'RAW_FILE', + 'RANDOM', + 'QUEUE', + 'PROXY', + 'PROFILING_SETTING', + 'PROCEDURE', + 'PRIORITY_QUEUE', + 'PRIMES', + 'PRECOMP', + 'POINTER_REF', + 'POINTER', + 'PLATFORM', + 'PLAIN_TEXT_FILE', + 'PATH_NAME', + 'PART_SORTED_TWO_WAY_LIST', + 'PART_SORTED_SET', + 'PART_SORTED_LIST', + 'PART_COMPARABLE', + 'OPERATING_ENVIRONMENT', + 'ONCE_CONTROL', + 'OBJECT_OWNER', + 'OBJECT_CONTROL', + 'NUMERIC', + 'NONE', + 'MUTEX', + 'MULTI_ARRAY_LIST', + 'MULTAR_LIST_CURSOR', + 'MEMORY', + 'MEM_INFO', + 'MEM_CONST', + 'MATH_CONST', + 'LIST', + 'LINKED_TREE_CURSOR', + 'LINKED_TREE', + 'LINKED_STACK', + 'LINKED_SET', + 'LINKED_QUEUE', + 'LINKED_PRIORITY_QUEUE', + 'LINKED_LIST_CURSOR', + 'LINKED_LIST', + 'LINKED_CURSOR_TREE', + 'LINKED_CIRCULAR', + 'LINKABLE', + 'LINEAR_ITERATOR', + 'LINEAR', + 'ITERATOR', + 'IO_MEDIUM', + 'INTERNAL', + 'INTEGER_REF', + 'INTEGER_INTERVAL', + 'INTEGER', + 'INFINITE', + 'INDEXABLE', + 'IDENTIFIED_CONTROLLER', + 'IDENTIFIED', + 'HIERARCHICAL', + 'HEAP_PRIORITY_QUEUE', + 'HASHABLE', + 'HASH_TABLE_CURSOR', + 'HASH_TABLE', + 'GENERAL', + 'GC_INFO', + 'FUNCTION', + 'FORMAT_INTEGER', + 'FORMAT_DOUBLE', + 'FIXED_TREE', + 'FIXED_LIST', + 'FIXED', + 'FINITE', + 'FILE_NAME', + 'FILE', + 'FIBONACCI', + 'EXECUTION_ENVIRONMENT', + 'EXCEPTIONS', + 'EXCEP_CONST', + 'DYNAMIC_TREE', + 'DYNAMIC_LIST', + 'DYNAMIC_CIRCULAR', + 'DYNAMIC_CHAIN', + 'DOUBLE_REF', + 'DOUBLE_MATH', + 'DOUBLE', + 'DISPENSER', + 'DIRECTORY_NAME', + 'DIRECTORY', + 'DECLARATOR', + 'DEBUG_OUTPUT', + 'CURSOR_TREE_ITERATOR', + 'CURSOR_TREE', + 'CURSOR_STRUCTURE', + 'CURSOR', + 'COUNTABLE_SEQUENCE', + 'COUNTABLE', + 'CONTAINER', + 'CONSOLE', + 'CONDITION_VARIABLE', + 'COMPARABLE_STRUCT', + 'COMPARABLE_SET', + 'COMPARABLE', + 'COMPACT_TREE_CURSOR', + 'COMPACT_CURSOR_TREE', + 'COLLECTION', + 'CIRCULAR_CURSOR', + 'CIRCULAR', + 'CHARACTER_REF', + 'CHARACTER', + 'CHAIN', + 'CELL', + 'BOX', + 'BOUNDED_STACK', + 'BOUNDED_QUEUE', + 'BOUNDED', + 'BOOLEAN_REF', + 'BOOLEAN', + 'BOOL_STRING', + 'BIT_REF', + 'BINARY_TREE', + 'BINARY_SEARCH_TREE_SET', + 'BINARY_SEARCH_TREE', + 'BILINEAR', + 'BI_LINKABLE', + 'BASIC_ROUTINES', + 'BAG', + 'ASCII', + 'ARRAYED_TREE', + 'ARRAYED_STACK', + 'ARRAYED_QUEUE', + 'ARRAYED_LIST_CURSOR', + 'ARRAYED_LIST', + 'ARRAYED_CIRCULAR', + 'ARRAY2', + 'ARRAY', + 'ARGUMENTS', + 'ANY', + 'ACTIVE' + ), + 5 => array( + 'yes', + 'visible', + 'trace', + 'system', + 'root', + 'profile', + 'override_cluster', + 'object', + 'no', + 'multithreaded', + 'msil_generation_type', + 'line_generation', + 'library', + 'inlining_size', + 'inlining', + 'include_path', + 'il_verifiable', + 'exclude', + 'exception_trace', + 'dynamic_runtime', + 'dotnet_naming_convention', + 'disabled_debug', + 'default', + 'debug', + 'dead_code_removal', + 'console_application', + 'cluster', + 'cls_compliant', + 'check_vape', + 'assertion', + 'array_optimization', + 'all', + 'address_expression' + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':', + '(', ')', '{', '}', '[', ']', '#' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF; font-weight: bold;', + 2 => 'color: #0600FF; font-weight: bold;', + 3 => 'color: #800080;', + 4 => 'color: #800000', + 5 => 'color: #603000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000; font-style: italic;', + 'MULTI' => '' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #005070; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000;' + ), + 'STRINGS' => array( + 0 => 'color: #0080A0;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #000060;', + 2 => 'color: #000050;' + ), + 'SYMBOLS' => array( + 0 => 'color: #600000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => 'http://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdocs.eiffel.com%2Feiffelstudio%2Flibraries+{FNAME}&btnI=I%27m+Feeling+Lucky' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/fortran.php b/ehcp/net2ftp/plugins/geshi/geshi/fortran.php new file mode 100644 index 0000000..6b4e3c3 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/fortran.php @@ -0,0 +1,156 @@ +'Fortran', + 'COMMENT_SINGLE'=> array(1 =>'!',2=>'Cf2py'), + 'COMMENT_MULTI'=> array(), + 'CASE_KEYWORDS'=> GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS'=> array("'",'"'), + 'ESCAPE_CHAR'=>'\\', + 'KEYWORDS'=> array( + 1 => array( + 'allocate','block','call','case','contains','continue','cycle','deallocate', + 'default','do','else','elseif','elsewhere','end','enddo','endif','endwhere', + 'entry','exit','function','go','goto','if','interface','module','nullify','only', + 'operator','procedure','program','recursive','return','select','stop', + 'subroutine','then','to','where','while', + 'access','action','advance','blank','blocksize','carriagecontrol', + 'delim','direct','eor','err','exist','file','flen','fmt','form','formatted', + 'iostat','name','named','nextrec','nml','number','opened','pad','position', + 'readwrite','recl','sequential','status','unformatted','unit' + ), + 2 => array( + '.AND.','.EQ.','.EQV.','.GE.','.GT.','.LE.','.LT.','.NE.','.NEQV.','.NOT.', + '.OR.','.TRUE.','.FALSE.' + ), + 3 => array( + 'allocatable','character','common','complex','data','dimension','double', + 'equivalence','external','implicit','in','inout','integer','intent','intrinsic', + 'kind','logical','namelist','none','optional','out','parameter','pointer', + 'private','public','real','result','save','sequence','target','type','use' + ), + 4 => array( + 'abs','achar','acos','adjustl','adjustr','aimag','aint','all','allocated', + 'anint','any','asin','atan','atan2','bit_size','break','btest','carg', + 'ceiling','char','cmplx','conjg','cos','cosh','cpu_time','count','cshift', + 'date_and_time','dble','digits','dim','dot_product','dprod dvchk', + 'eoshift','epsilon','error','exp','exponent','floor','flush','fraction', + 'getcl','huge','iachar','iand','ibclr','ibits','ibset','ichar','ieor','index', + 'int','intrup','invalop','ior','iostat_msg','ishft','ishftc','lbound', + 'len','len_trim','lge','lgt','lle','llt','log','log10','matmul','max','maxexponent', + 'maxloc','maxval','merge','min','minexponent','minloc','minval','mod','modulo', + 'mvbits','nbreak','ndperr','ndpexc','nearest','nint','not','offset','ovefl', + 'pack','precfill','precision','present','product','prompt','radix', + 'random_number','random_seed','range','repeat','reshape','rrspacing', + 'scale','scan','segment','selected_int_kind','selected_real_kind', + 'set_exponent','shape','sign','sin','sinh','size','spacing','spread','sqrt', + 'sum system','system_clock','tan','tanh','timer','tiny','transfer','transpose', + 'trim','ubound','undfl','unpack','val','verify' + ), + ), + 'SYMBOLS'=> array( + '(',')','{','}','[',']','=','+','-','*','/','!','%','^','&',':' + ), + 'CASE_SENSITIVE'=> array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES'=> array( + 'KEYWORDS'=> array( + 1 =>'color: #b1b100;', + 2 =>'color: #000000; font-weight: bold;', + 3 =>'color: #000066;', + 4 =>'color: #993333;' + ), + 'COMMENTS'=> array( + 1 =>'color: #808080; font-style: italic;', + 2 =>'color: #339933;', + 'MULTI'=>'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR'=> array( + 0 =>'color: #000099; font-weight: bold;' + ), + 'BRACKETS'=> array( + 0 =>'color: #66cc66;' + ), + 'STRINGS'=> array( + 0 =>'color: #ff0000;' + ), + 'NUMBERS'=> array( + 0 =>'color: #cc66cc;' + ), + 'METHODS'=> array( + 1 =>'color: #202020;', + 2 =>'color: #202020;' + ), + 'SYMBOLS'=> array( + 0 =>'color: #66cc66;' + ), + 'REGEXPS'=> array( + ), + 'SCRIPT'=> array( + ) + ), + 'URLS'=> array( + 1 =>'', + 2 =>'', + 3 =>'', + 4 =>'' + ), + 'OOLANG'=> true, + 'OBJECT_SPLITTERS'=> array( + 1 =>'.', + 2 =>'::' + ), + 'REGEXPS'=> array( + ), + 'STRICT_MODE_APPLIES'=> GESHI_NEVER, + 'SCRIPT_DELIMITERS'=> array( + ), + 'HIGHLIGHT_STRICT_BLOCK'=> array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/freebasic.php b/ehcp/net2ftp/plugins/geshi/geshi/freebasic.php new file mode 100644 index 0000000..4276938 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/freebasic.php @@ -0,0 +1,137 @@ + 'FreeBasic', + 'COMMENT_SINGLE' => array(1 => "'", 2 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "append", "as", "asc", "asin", "asm", "atan2", "atn", "beep", "bin", "binary", "bit", + "bitreset", "bitset", "bload", "bsave", "byref", "byte", "byval", "call", + "callocate", "case", "cbyte", "cdbl", "cdecl", "chain", "chdir", "chr", "cint", + "circle", "clear", "clng", "clngint", "close", "cls", "color", "command", + "common", "cons", "const", "continue", "cos", "cshort", "csign", "csng", + "csrlin", "cubyte", "cuint", "culngint", "cunsg", "curdir", "cushort", "custom", + "cvd", "cvi", "cvl", "cvlongint", "cvs", "cvshort", "data", "date", + "deallocate", "declare", "defbyte", "defdbl", "defined", "defint", "deflng", + "deflngint", "defshort", "defsng", "defstr", "defubyte", "defuint", + "defulngint", "defushort", "dim", "dir", "do", "double", "draw", "dylibload", + "dylibsymbol", "else", "elseif", "end", "enum", "environ", 'environ$', "eof", + "eqv", "erase", "err", "error", "exec", "exepath", "exit", "exp", "export", + "extern", "field", "fix", "flip", "for", "fre", "freefile", "function", "get", + "getjoystick", "getkey", "getmouse", "gosub", "goto", "hex", "hibyte", "hiword", + "if", "iif", "imagecreate", "imagedestroy", "imp", "inkey", "inp", "input", + "instr", "int", "integer", "is", "kill", "lbound", "lcase", "left", "len", + "let", "lib", "line", "lobyte", "loc", "local", "locate", "lock", "lof", "log", + "long", "longint", "loop", "loword", "lset", "ltrim", "mid", "mkd", "mkdir", + "mki", "mkl", "mklongint", "mks", "mkshort", "mod", "multikey", "mutexcreate", + "mutexdestroy", "mutexlock", "mutexunlock", "name", "next", "not", "oct", "on", + "once", "open", "option", "or", "out", "output", "overload", "paint", "palette", + "pascal", "pcopy", "peek", "peeki", "peeks", "pipe", "pmap", "point", "pointer", + "poke", "pokei", "pokes", "pos", "preserve", "preset", "print", "private", + "procptr", "pset", "ptr", "public", "put", "random", "randomize", "read", + "reallocate", "redim", "rem", "reset", "restore", "resume", "resume", "next", + "return", "rgb", "rgba", "right", "rmdir", "rnd", "rset", "rtrim", "run", + "sadd", "screen", "screencopy", "screeninfo", "screenlock", "screenptr", + "screenres", "screenset", "screensync", "screenunlock", "seek", "statement", + "seek", "function", "selectcase", "setdate", "setenviron", "setmouse", + "settime", "sgn", "shared", "shell", "shl", "short", "shr", "sin", "single", + "sizeof", "sleep", "space", "spc", "sqr", "static", "stdcall", "step", "stop", + "str", "string", "string", "strptr", "sub", "swap", "system", "tab", "tan", + "then", "threadcreate", "threadwait", "time", "time", "timer", "to", "trans", + "trim", "type", "ubound", "ubyte", "ucase", "uinteger", "ulongint", "union", + "unlock", "unsigned", "until", "ushort", "using", "va_arg", "va_first", + "va_next", "val", "val64", "valint", "varptr", "view", "viewprint", "wait", + "wend", "while", "width", "window", "windowtitle", "with", "write", "xor", + "zstring", "explicit", "escape", "true", "false" + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #339933;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/genero.php b/ehcp/net2ftp/plugins/geshi/geshi/genero.php new file mode 100644 index 0000000..f20521b --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/genero.php @@ -0,0 +1,464 @@ + 'genero', + 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'), + 'COMMENT_MULTI' => array('{' => '}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "ABSOLUTE", + "ACCEPT", + "ACTION", + "ADD", + "AFTER", + "ALL", + "ALTER", + "AND", + "ANY", + "APPEND", + "APPLICATION", + "AS", + "AT", + "ATTRIBUTE", + "ATTRIBUTES", + "AUDIT", + "AVG", + "BEFORE", + "BEGIN", + "BETWEEN", + "BORDER", + "BORDER", + "BOTTOM", + "BREAKPOINT", + "BUFFER", + "BUFFERED", + "BY", + "CALL", + "CANCEL", + "CASE", + "CENTURY", + "CHANGE", + "CHECK", + "CLEAR", + "CLIPPED", + "CLOSE", + "CLUSTER", + "COLUMN", + "COLUMNS", + "COMMAND", + "COMMENT", + "COMMIT", + "COMMITTED", + "CONCURRENT ", + "CONNECT", + "CONNECTION", + "CONSTANT", + "CONSTRAINED", + "CONSTRAINT", + "CONSTRUCT", + "CONTINUE", + "CONTROL", + "COUNT", + "CREATE", + "CROSS", + "CURRENT", + "DATABASE", + "DBA", + "DEC", + "DECLARE", + "DEFAULT", + "DEFAULTS", + "DEFER", + "DEFINE", + "DELETE", + "DELIMITER", + "DESCRIBE", + "DESTINATION", + "DIM", + "DIALOG", + "DIMENSION", + "DIRTY", + "DISCONNECT", + "DISPLAY", + "DISTINCT", + "DORMANT", + "DOWN", + "DROP", + "DYNAMIC", + "ELSE", + "END", + "ERROR", + "ESCAPE", + "EVERY", + "EXCLUSIVE", + "EXECUTE", + "EXISTS", + "EXIT", + "EXPLAIN", + "EXTEND", + "EXTENT", + "EXTERNAL", + "FETCH", + "FGL_DRAWBOX", + "FIELD", + "FIELD_TOUCHED", + "FILE", + "FILL", + "FINISH", + "FIRST", + "FLOAT", + "FLUSH", + "FOR", + "FOREACH", + "FORM", + "FORMAT", + "FOUND", + "FRACTION", + "FREE", + "FROM", + "FULL", + "FUNCTION", + "GET_FLDBUF", + "GLOBALS", + "GO", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HEADER", + "HELP", + "HIDE", + "HOLD", + "HOUR", + "IDLE", + "IF", + "IMAGE", + "IMMEDIATE", + "IN", + "INDEX", + "INFIELD", + "INITIALIZE", + "INNER", + "INPUT", + "INSERT", + "INTERRUPT", + "INTERVAL", + "INTO", + "INVISIBLE", + "IS", + "ISOLATION", + "JOIN", + "KEEP", + "KEY", + "LABEL", + "LAST", + "LEFT", + "LENGTH", + "LET", + "LIKE", + "LINE", + "LINENO", + "LINES", + "LOAD", + "LOCATE", + "LOCK", + "LOG", + "LSTR", + "MAIN", + "MARGIN", + "MATCHES", + "MAX", + "MAXCOUNT", + "MDY", + "MEMORY", + "MENU", + "MESSAGE", + "MIN", + "MINUTE", + "MOD", + "MODE", + "MODIFY", + "MONEY", + "NAME", + "NEED", + "NEXT", + "NO", + "NORMAL", + "NOT", + "NOTFOUND", + "NULL", + "NUMERIC", + "OF", + "ON", + "OPEN", + "OPTION", + "OPTIONS", + "OR", + "ORDER", + "OTHERWISE", + "OUTER", + "OUTPUT", + "PAGE", + "PAGENO", + "PAUSE", + "PERCENT", + "PICTURE", + "PIPE", + "PRECISION", + "PREPARE", + "PREVIOUS", + "PRINT", + "PRINTER", + "PRINTX", + "PRIOR", + "PRIVILEGES", + "PROCEDURE", + "PROGRAM", + "PROMPT", + "PUBLIC", + "PUT", + "QUIT", + "READ", + "REAL", + "RECORD", + "RECOVER", + "RED ", + "RELATIVE", + "RENAME", + "REOPTIMIZATION", + "REPEATABLE", + "REPORT", + "RESOURCE", + "RETURN", + "RETURNING", + "REVERSE", + "REVOKE", + "RIGHT", + "ROLLBACK", + "ROLLFORWARD", + "ROW", + "ROWS", + "RUN", + "SCHEMA", + "SCREEN", + "SCROLL", + "SECOND", + "SELECT", + "SERIAL", + "SET", + "SFMT", + "SHARE", + "SHIFT", + "SHOW", + "SIGNAL ", + "SIZE", + "SKIP", + "SLEEP", + "SOME", + "SPACE", + "SPACES", + "SQL", + "SQLERRMESSAGE", + "SQLERROR", + "SQLSTATE", + "STABILITY", + "START", + "STATISTICS", + "STEP", + "STOP", + "STYLE", + "SUM", + "SYNONYM", + "TABLE", + "TEMP", + "TERMINATE", + "TEXT", + "THEN", + "THROUGH", + "THRU", + "TO", + "TODAY", + "TOP", + "TRAILER", + "TRANSACTION ", + "UNBUFFERED", + "UNCONSTRAINED", + "UNDERLINE", + "UNION", + "UNIQUE", + "UNITS", + "UNLOAD", + "UNLOCK", + "UP", + "UPDATE", + "USE", + "USER", + "USING", + "VALIDATE", + "VALUE", + "VALUES", + "VARCHAR", + "VIEW", + "WAIT", + "WAITING", + "WARNING", + "WHEN", + "WHENEVER", + "WHERE", + "WHILE", + "WINDOW", + "WITH", + "WITHOUT", + "WORDWRAP", + "WORK", + "WRAP" + ), + 2 => array( + '&IFDEF', '&ENDIF' + ), + 3 => array( + "ARRAY", + "BYTE", + "CHAR", + "CHARACTER", + "CURSOR", + "DATE", + "DATETIME", + "DECIMAL", + "DOUBLE", + "FALSE", + "INT", + "INTEGER", + "SMALLFLOAT", + "SMALLINT", + "STRING", + "TIME", + "TRUE" + ), + 4 => array( + "BLACK", + "BLINK", + "BLUE", + "BOLD", + "ANSI", + "ASC", + "ASCENDING", + "ASCII", + "CYAN", + "DESC", + "DESCENDING", + "GREEN", + "MAGENTA", + "OFF", + "WHITE", + "YELLOW", + "YEAR", + "DAY", + "MONTH", + "WEEKDAY" + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':', + '(', ')', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #0000FF; font-weight: bold;', + 3 => 'color: #008000;', + 4 => 'color: #FF0000;', + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/gml.php b/ehcp/net2ftp/plugins/geshi/geshi/gml.php new file mode 100644 index 0000000..199a0fd --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/gml.php @@ -0,0 +1,502 @@ +5 and KEYWORDS=>6 sections (actually, they were empty). + * I was planning of using those for the GML functions available only in the + * registered version of the program, but not anymore. + * + * 2005/06/26 (1.0.3) + * - First Release. + * + * TODO (updated 2005/11/11) + * ------------------------- + * - Test it for a while and make the appropiate corrections. + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GeSHi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'GML', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + // language keywords + 1 => array( + 'break', 'continue', 'do', 'until', 'if', 'else', + 'exit', 'for', 'for', 'repeat', 'return', 'switch', + 'case', 'default', 'var', 'while', 'with', 'div', 'mod', + // GML Language overview + 'self', 'other', 'all', 'noone', 'global', + ), + // modifiers and built-in variables + 2 => array( + // Game play + 'x','y','xprevious','yprevious','xstart','ystart','hspeed','vspeed','direction','speed', + 'friction','gravity','gravity_direction', + 'path_index','path_position','path_positionprevious','path_speed','path_orientation', + 'path_scale','path_endaction', + 'object_index','id','mask_index','solid','persistent','instance_count','instance_id', + 'room_speed','fps','current_time','current_year','current_month','current_day','current_weekday', + 'current_hour','current_minute','current_second','alarm','timeline_index','timeline_position', + 'timeline_speed', + 'room','room_first','room_last','room_width','room_height','room_caption','room_persistent', + 'score','lives','health','show_score','show_lives','show_health','caption_score','caption_lives', + 'caption_health', + 'event_type','event_number','event_object','event_action', + 'error_occurred','error_last', + // User interaction + 'keyboard_lastkey','keyboard_key','keyboard_lastchar','keyboard_string', + 'mouse_x','mouse_y','mouse_button','mouse_lastbutton', + // Game Graphics + 'visible','sprite_index','sprite_width','sprite_height','sprite_xoffset','sprite_yoffset', + 'image_number','image_index','image_speed','depth','image_xscale','image_yscale','image_angle', + 'image_alpha','image_blend','bbox_left','bbox_right','bbox_top','bbox_bottom', + 'background_color','background_showcolor','background_visible','background_foreground', + 'background_index','background_x','background_y','background_width','background_height', + 'background_htiled','background_vtiled','background_xscale','background_yscale', + 'background_hspeed','background_vspeed','background_blend','background_alpha', + 'background','left, top, width, height','x,y','depth','visible','xscale, yscale','blend','alpha', + 'view_enabled','view_current','view_visible','view_yview','view_wview','view_hview','view_xport', + 'view_yport','view_wport','view_hport','view_angle','view_hborder','view_vborder','view_hspeed', + 'view_vspeed','view_object', + 'transition_kind', + // Files, registry and executing programs + 'game_id','working_directory','temp_directory', + 'secure_mode', + // Creating particles + 'xmin', 'xmax', 'ymin', 'ymax','shape','distribution','particle type','number', + 'x', 'y', 'force','dist','kind','additive', 'friction', 'parttype1', 'parttype2' + ), + // functions + 3 => array( + // Computing things + 'random','choose','abs','sign','round','floor','ceil','frac','sqrt','sqr','power','exp','ln', + 'log2','log10','logn','sin','cos','tan','arcsin','arccos','arctan','arctan2','degtorad', + 'radtodeg','min','max','mean','median','point_distance','point_direction','lengthdir_x', + 'lengthdir_y','is_real','is_string', + 'chr','ord','real','string','string_format','string_length','string_pos','string_copy', + 'string_char_at','string_delete','string_insert','string_replace','string_replace_all', + 'string_count','string_lower','string_upper','string_repeat','string_letters','string_digits', + 'string_lettersdigits','clipboard_has_text','clipboard_get_text','clipboard_set_text', + 'date_current_datetime','date_current_date','date_current_time','date_create_datetime', + 'date_create_date','date_create_time','date_valid_datetime','date_valid_date','date_valid_time', + 'date_inc_year','date_inc_month','date_inc_week','date_inc_day','date_inc_hour', + 'date_inc_minute','date_inc_second','date_get_year','date_get_month','date_get_week', + 'date_get_day','date_get_hour', 'date_get_minute','date_get_second','date_get_weekday', + 'date_get_day_of_year','date_get_hour_of_year','date_get_minute_of_year', + 'date_get_second_of_year','date_year_span','date_month_span','date_week_span','date_day_span', + 'date_hour_span','date_minute_span','date_second_span','date_compare_datetime', + 'date_compare_date','date_compare_time','date_date_of','date_time_of','date_datetime_string', + 'date_date_string','date_time_string','date_days_in_month','date_days_in_year','date_leap_year', + 'date_is_today', + // Game play + 'motion_set','motion_add','place_free','place_empty','place_meeting','place_snapped', + 'move_random','move_snap','move_wrap','move_towards_point','move_bounce_solid','move_bounce_all', + 'move_contact_solid','move_contact_all','move_outside_solid','move_outside_all', + 'distance_to_point','distance_to_object','position_empty','position_meeting', + 'path_start','path_end', + 'mp_linear_step','mp_linear_step_object','mp_potential_step','mp_potential_step_object', + 'mp_potential_settings','mp_linear_path','mp_linear_path_object', 'mp_potential_path', + 'mp_potential_path_object','mp_grid_create','mp_grid_destroy','mp_grid_clear_all', + 'mp_grid_clear_cell','mp_grid_clear_rectangle','mp_grid_add_cell','mp_grid_add_rectangle', + 'mp_grid_add_instances','mp_grid_path','mp_grid_draw', + 'collision_point','collision_rectangle','collision_circle','collision_ellipse','collision_line', + 'instance_find','instance_exists','instance_number','instance_position','instance_nearest', + 'instance_furthest','instance_place','instance_create','instance_copy','instance_destroy', + 'instance_change','position_destroy','position_change', + 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region', + 'instance_activate_all','instance_activate_object','instance_activate_region', + 'sleep', + 'room_goto','room_goto_previous','room_goto_next','room_restart','room_previous','room_next', + 'game_end','game_restart','game_save','game_load', + 'event_perform', 'event_perform_object','event_user','event_inherited', + 'show_debug_message','variable_global_exists','variable_local_exists','variable_global_get', + 'variable_global_array_get','variable_global_array2_get','variable_local_get', + 'variable_local_array_get','variable_local_array2_get','variable_global_set', + 'variable_global_array_set','variable_global_array2_set','variable_local_set', + 'variable_local_array_set','variable_local_array2_set','set_program_priority', + // User interaction + 'keyboard_set_map','keyboard_get_map','keyboard_unset_map','keyboard_check', + 'keyboard_check_pressed','keyboard_check_released','keyboard_check_direct', + 'keyboard_get_numlock','keyboard_set_numlock','keyboard_key_press','keyboard_key_release', + 'keyboard_clear','io_clear','io_handle','keyboard_wait', + 'mouse_check_button','mouse_check_button_pressed','mouse_check_button_released','mouse_clear', + 'io_clear','io_handle','mouse_wait', + 'joystick_exists','joystick_name','joystick_axes','joystick_buttons','joystick_has_pov', + 'joystick_direction','joystick_check_button','joystick_xpos','joystick_ypos','joystick_zpos', + 'joystick_rpos','joystick_upos','joystick_vpos','joystick_pov', + // Game Graphics + 'draw_sprite','draw_sprite_stretched','draw_sprite_tiled','draw_sprite_part','draw_background', + 'draw_background_stretched','draw_background_tiled','draw_background_part','draw_sprite_ext', + 'draw_sprite_stretched_ext','draw_sprite_tiled_ext','draw_sprite_part_ext','draw_sprite_general', + 'draw_background_ext','draw_background_stretched_ext','draw_background_tiled_ext', + 'draw_background_part_ext','draw_background_general', + 'draw_clear','draw_clear_alpha','draw_point','draw_line','draw_rectangle','draw_roundrect', + 'draw_triangle','draw_circle','draw_ellipse','draw_arrow','draw_button','draw_path', + 'draw_healthbar','draw_set_color','draw_set_alpha','draw_get_color','draw_get_alpha', + 'make_color_rgb','make_color_hsv','color_get_red','color_get_green','color_get_blue', + 'color_get_hue','color_get_saturation','color_get_value','merge_color','draw_getpixel', + 'screen_save','screen_save_part', + 'draw_set_font','draw_set_halign','draw_set_valign','draw_text','draw_text_ext','string_width', + 'string_height','string_width_ext','string_height_ext','draw_text_transformed', + 'draw_text_ext_transformed','draw_text_color','draw_text_ext_color', + 'draw_text_transformed_color','draw_text_ext_transformed_color', + 'draw_point_color','draw_line_color','draw_rectangle_color','draw_roundrect_color', + 'draw_triangle_color','draw_circle_color','draw_ellipse_color','draw_primitive_begin', + 'draw_vertex','draw_vertex_color','draw_primitive_end','sprite_get_texture', + 'background_get_texture','texture_preload','texture_set_priority', + 'texture_get_width','texture_get_height','draw_primitive_begin_texture','draw_vertex_texture', + 'draw_vertex_texture_color','draw_primitive_end','texture_set_interpolation', + 'texture_set_blending','texture_set_repeat','draw_set_blend_mode','draw_set_blend_mode_ext', + 'surface_create','surface_free','surface_exists','surface_get_width','surface_get_height', + 'surface_get_texture','surface_set_target','surface_reset_target','surface_getpixel', + 'surface_save','surface_save_part','draw_surface','draw_surface_stretched','draw_surface_tiled', + 'draw_surface_part','draw_surface_ext','draw_surface_stretched_ext','draw_surface_tiled_ext', + 'draw_surface_part_ext','draw_surface_general','surface_copy','surface_copy_part', + 'tile_add','tile_delete','tile_exists','tile_get_x','tile_get_y','tile_get_left','tile_get_top', + 'tile_get_width','tile_get_height','tile_get_depth','tile_get_visible','tile_get_xscale', + 'tile_get_yscale','tile_get_background','tile_get_blend','tile_get_alpha','tile_set_position', + 'tile_set_region','tile_set_background','tile_set_visible','tile_set_depth','tile_set_scale', + 'tile_set_blend','tile_set_alpha','tile_layer_hide','tile_layer_show','tile_layer_delete', + 'tile_layer_shift','tile_layer_find','tile_layer_delete_at','tile_layer_depth', + 'display_get_width','display_get_height','display_get_colordepth','display_get_frequency', + 'display_set_size','display_set_colordepth','display_set_frequency','display_set_all', + 'display_test_all','display_reset','display_mouse_get_x','display_mouse_get_y','display_mouse_set', + 'window_set_visible','window_get_visible','window_set_fullscreen','window_get_fullscreen', + 'window_set_showborder','window_get_showborder','window_set_showicons','window_get_showicons', + 'window_set_stayontop','window_get_stayontop','window_set_sizeable','window_get_sizeable', + 'window_set_caption','window_get_caption','window_set_cursor', 'window_get_cursor', + 'window_set_color','window_get_color','window_set_region_scale','window_get_region_scale', + 'window_set_position','window_set_size','window_set_rectangle','window_center','window_default', + 'window_get_x','window_get_y','window_get_width','window_get_height','window_mouse_get_x', + 'window_mouse_get_y','window_mouse_set', + 'window_set_region_size','window_get_region_width','window_get_region_height', + 'window_view_mouse_get_x','window_view_mouse_get_y','window_view_mouse_set', + 'window_views_mouse_get_x','window_views_mouse_get_y','window_views_mouse_set', + 'screen_redraw','screen_refresh','set_automatic_draw','set_synchronization','screen_wait_vsync', + // Sound and music) + 'sound_play','sound_loop','sound_stop','sound_stop_all','sound_isplaying','sound_volume', + 'sound_global_volume','sound_fade','sound_pan','sound_background_tempo','sound_set_search_directory', + 'sound_effect_set','sound_effect_chorus','sound_effect_echo', 'sound_effect_flanger', + 'sound_effect_gargle','sound_effect_reverb','sound_effect_compressor','sound_effect_equalizer', + 'sound_3d_set_sound_position','sound_3d_set_sound_velocity','sound_3d_set_sound_distance', + 'sound_3d_set_sound_cone', + 'cd_init','cd_present','cd_number','cd_playing','cd_paused','cd_track','cd_length', + 'cd_track_length','cd_position','cd_track_position','cd_play','cd_stop','cd_pause','cd_resume', + 'cd_set_position','cd_set_track_position','cd_open_door','cd_close_door','MCI_command', + // Splash screens, highscores, and other pop-ups + 'show_text','show_image','show_video','show_info','load_info', + 'show_message','show_message_ext','show_question','get_integer','get_string', + 'message_background','message_alpha','message_button','message_text_font','message_button_font', + 'message_input_font','message_mouse_color','message_input_color','message_caption', + 'message_position','message_size','show_menu','show_menu_pos','get_color','get_open_filename', + 'get_save_filename','get_directory','get_directory_alt','show_error', + 'highscore_show','highscore_set_background','highscore_set_border','highscore_set_font', + 'highscore_set_colors','highscore_set_strings','highscore_show_ext','highscore_clear', + 'highscore_add','highscore_add_current','highscore_value','highscore_name','draw_highscore', + // Resources + 'sprite_exists','sprite_get_name','sprite_get_number','sprite_get_width','sprite_get_height', + 'sprite_get_transparent','sprite_get_smooth','sprite_get_preload','sprite_get_xoffset', + 'sprite_get_yoffset','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top', + 'sprite_get_bbox_bottom','sprite_get_bbox_mode','sprite_get_precise', + 'sound_exists','sound_get_name','sound_get_kind','sound_get_preload','sound_discard', + 'sound_restore', + 'background_exists','background_get_name','background_get_width','background_get_height', + 'background_get_transparent','background_get_smooth','background_get_preload', + 'font_exists','font_get_name','font_get_fontname','font_get_bold','font_get_italic', + 'font_get_first','font_get_last', + 'path_exists','path_get_name','path_get_length','path_get_kind','path_get_closed', + 'path_get_precision','path_get_number','path_get_point_x','path_get_point_y', + 'path_get_point_speed','path_get_x','path_get_y','path_get_speed', + 'script_exists','script_get_name','script_get_text', + 'timeline_exists','timeline_get_name', + 'object_exists','object_get_name','object_get_sprite','object_get_solid','object_get_visible', + 'object_get_depth','object_get_persistent','object_get_mask','object_get_parent', + 'object_is_ancestor', + 'room_exists','room_get_name', + // Changing resources + 'sprite_set_offset','sprite_set_bbox_mode','sprite_set_bbox','sprite_set_precise', + 'sprite_duplicate','sprite_assign','sprite_merge','sprite_add','sprite_replace', + 'sprite_create_from_screen','sprite_add_from_screen','sprite_create_from_surface', + 'sprite_add_from_surface','sprite_delete','sprite_set_alpha_from_sprite', + 'sound_add','sound_replace','sound_delete', + 'background_duplicate','background_assign','background_add','background_replace', + 'background_create_color','background_create_gradient','background_create_from_screen', + 'background_create_from_surface','background_delete','background_set_alpha_from_background', + 'font_add','font_add_sprite','font_replace_sprite','font_delete', + 'path_set_kind','path_set_closed','path_set_precision','path_add','path_delete','path_duplicate', + 'path_assign','path_append','path_add_point','path_insert_point','path_change_point', + 'path_delete_point','path_clear_points','path_reverse','path_mirror','path_flip','path_rotate', + 'path_scale','path_shift', + 'execute_string','execute_file','script_execute', + 'timeline_add','timeline_delete','timeline_moment_add','timeline_moment_clear', + 'object_set_sprite','object_set_solid','object_set_visible','object_set_depth', + 'object_set_persistent','object_set_mask','object_set_parent','object_add','object_delete', + 'object_event_add','object_event_clear', + 'room_set_width','room_set_height','room_set_caption','room_set_persistent','room_set_code', + 'room_set_background_color','room_set_background','room_set_view','room_set_view_enabled', + 'room_add','room_duplicate','room_assign','room_instance_add','room_instance_clear', + 'room_tile_add','room_tile_add_ext','room_tile_clear', + // Files, registry and executing programs + 'file_text_open_read','file_text_open_write','file_text_open_append','file_text_close', + 'file_text_write_string','file_text_write_real','file_text_writeln','file_text_read_string', + 'file_text_read_real','file_text_readln','file_text_eof','file_exists','file_delete', + 'file_rename','file_copy','directory_exists','directory_create','file_find_first', + 'file_find_next','file_find_close','file_attributes', 'filename_name','filename_path', + 'filename_dir','filename_drive','filename_ext','filename_change_ext','file_bin_open', + 'file_bin_rewrite','file_bin_close','file_bin_size','file_bin_position','file_bin_seek', + 'file_bin_write_byte','file_bin_read_byte','parameter_count','parameter_string', + 'environment_get_variable', + 'registry_write_string','registry_write_real','registry_read_string','registry_read_real', + 'registry_exists','registry_write_string_ext','registry_write_real_ext', + 'registry_read_string_ext','registry_read_real_ext','registry_exists_ext','registry_set_root', + 'ini_open','ini_close','ini_read_string','ini_read_real','ini_write_string','ini_write_real', + 'ini_key_exists','ini_section_exists','ini_key_delete','ini_section_delete', + 'execute_program','execute_shell', + // Data structures + 'ds_stack_create','ds_stack_destroy','ds_stack_clear','ds_stack_size','ds_stack_empty', + 'ds_stack_push','ds_stack_pop','ds_stack_top', + 'ds_queue_create','ds_queue_destroy','ds_queue_clear','ds_queue_size','ds_queue_empty', + 'ds_queue_enqueue','ds_queue_dequeue','ds_queue_head','ds_queue_tail', + 'ds_list_create','ds_list_destroy','ds_list_clear','ds_list_size','ds_list_empty','ds_list_add', + 'ds_list_insert','ds_list_replace','ds_list_delete','ds_list_find_index','ds_list_find_value', + 'ds_list_sort', + 'ds_map_create','ds_map_destroy','ds_map_clear','ds_map_size','ds_map_empty','ds_map_add', + 'ds_map_replace','ds_map_delete','ds_map_exists','ds_map_find_value','ds_map_find_previous', + 'ds_map_find_next','ds_map_find_first','ds_map_find_last', + 'ds_priority_create','ds_priority_destroy','ds_priority_clear','ds_priority_size', + 'ds_priority_empty','ds_priority_add','ds_priority_change_priority','ds_priority_find_priority', + 'ds_priority_delete_value','ds_priority_delete_min','ds_priority_find_min', + 'ds_priority_delete_max','ds_priority_find_max', + 'ds_grid_create','ds_grid_destroy','ds_grid_resize','ds_grid_width','ds_grid_height', + 'ds_grid_clear','ds_grid_set','ds_grid_add','ds_grid_multiply','ds_grid_set_region', + 'ds_grid_add_region','ds_grid_multiply_region','ds_grid_set_disk','ds_grid_add_disk', + 'ds_grid_multiply_disk','ds_grid_get','ds_grid_get_sum','ds_grid_get_max','ds_grid_get_min', + 'ds_grid_get_mean','ds_grid_get_disk_sum','ds_grid_get_disk_min','ds_grid_get_disk_max', + 'ds_grid_get_disk_mean','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y', + 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y', + // Creating particles + 'effect_create_below','effect_create_above','effect_clear', + 'part_type_create','part_type_destroy','part_type_exists','part_type_clear','part_type_shape', + 'part_type_sprite','part_type_size','part_type_scale', + 'part_type_orientation','part_type_color1','part_type_color2','part_type_color3', + 'part_type_color_mix','part_type_color_rgb','part_type_color_hsv', + 'part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_life', + 'part_type_step','part_type_death','part_type_speed','part_type_direction','part_type_gravity', + 'part_system_create','part_system_destroy','part_system_exists','part_system_clear', + 'part_system_draw_order','part_system_depth','part_system_position', + 'part_system_automatic_update','part_system_automatic_draw','part_system_update', + 'part_system_drawit','part_particles_create','part_particles_create_color', + 'part_particles_clear','part_particles_count', + 'part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists', + 'part_emitter_clear','part_emitter_region','part_emitter_burst','part_emitter_stream', + 'part_attractor_create','part_attractor_destroy','part_attractor_destroy_all', + 'part_attractor_exists','part_attractor_clear','part_attractor_position','part_attractor_force', + 'part_destroyer_create','part_destroyer_destroy','part_destroyer_destroy_all', + 'part_destroyer_exists','part_destroyer_clear','part_destroyer_region', + 'part_deflector_create','part_deflector_destroy','part_deflector_destroy_all', + 'part_deflector_exists','part_deflector_clear','part_deflector_region','part_deflector_kind', + 'part_deflector_friction', + 'part_changer_create','part_changer_destroy','part_changer_destroy_all','part_changer_exists', + 'part_changer_clear','part_changer_region','part_changer_types','part_changer_kind', + // Multiplayer games + 'mplay_init_ipx','mplay_init_tcpip','mplay_init_modem','mplay_init_serial', + 'mplay_connect_status','mplay_end','mplay_ipaddress', + 'mplay_session_create','mplay_session_find','mplay_session_name','mplay_session_join', + 'mplay_session_mode','mplay_session_status','mplay_session_end', + 'mplay_player_find','mplay_player_name','mplay_player_id', + 'mplay_data_write','mplay_data_read','mplay_data_mode', + 'mplay_message_send','mplay_message_send_guaranteed','mplay_message_receive','mplay_message_id', + 'mplay_message_value','mplay_message_player','mplay_message_name','mplay_message_count', + 'mplay_message_clear', + // Using DLL's + 'external_define','external_call','external_free','execute_string','execute_file','window_handle', + // 3D Graphics + 'd3d_start','d3d_end','d3d_set_hidden','d3d_set_perspective', + 'd3d_set_depth', + 'd3d_primitive_begin','d3d_vertex','d3d_vertex_color','d3d_primitive_end', + 'd3d_primitive_begin_texture','d3d_vertex_texture','d3d_vertex_texture_color','d3d_set_culling', + 'd3d_draw_block','d3d_draw_cylinder','d3d_draw_cone','d3d_draw_ellipsoid','d3d_draw_wall', + 'd3d_draw_floor', + 'd3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho', + 'd3d_set_projection_perspective', + 'd3d_transform_set_identity','d3d_transform_set_translation','d3d_transform_set_scaling', + 'd3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z', + 'd3d_transform_set_rotation_axis','d3d_transform_add_translation','d3d_transform_add_scaling', + 'd3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z', + 'd3d_transform_add_rotation_axis','d3d_transform_stack_clear','d3d_transform_stack_empty', + 'd3d_transform_stack_push','d3d_transform_stack_pop','d3d_transform_stack_top', + 'd3d_transform_stack_discard', + 'd3d_set_fog', + 'd3d_set_lighting','d3d_set_shading','d3d_light_define_direction','d3d_light_define_point', + 'd3d_light_enable','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture', + 'd3d_vertex_normal_texture_color', + 'd3d_model_create','d3d_model_destroy','d3d_model_clear','d3d_model_save','d3d_model_load', + 'd3d_model_draw','d3d_model_primitive_begin','d3d_model_vertex','d3d_model_vertex_color', + 'd3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_vertex_normal', + 'd3d_model_vertex_normal_color','d3d_model_vertex_normal_texture', + 'd3d_model_vertex_normal_texture_color','d3d_model_primitive_end','d3d_model_block', + 'd3d_model_cylinder','d3d_model_cone','d3d_model_ellipsoid','d3d_model_wall','d3d_model_floor' + ), + // constants + 4 => array( + 'true', 'false', 'pi', + 'ev_destroy','ev_step','ev_alarm','ev_keyboard','ev_mouse','ev_collision','ev_other','ev_draw', + 'ev_keypress','ev_keyrelease','ev_left_button','ev_right_button','ev_middle_button', + 'ev_no_button','ev_left_press','ev_right_press','ev_middle_press','ev_left_release', + 'ev_right_release','ev_middle_release','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_up', + 'ev_mouse_wheel_down','ev_global_left_button','ev_global_right_button','ev_global_middle_button', + 'ev_global_left_press','ev_global_right_press','ev_global_middle_press','ev_global_left_release', + 'ev_global_right_release','ev_global_middle_release','ev_joystick1_left','ev_joystick1_right', + 'ev_joystick1_up','ev_joystick1_down','ev_joystick1_button1','ev_joystick1_button2', + 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6', + 'ev_joystick1_button7','ev_joystick1_button8','ev_joystick2_left','ev_joystick2_right', + 'ev_joystick2_up','ev_joystick2_down','ev_joystick2_button1','ev_joystick2_button2', + 'ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6', + 'ev_joystick2_button7','ev_joystick2_button8', + 'ev_outside','ev_boundary','ev_game_start','ev_game_end','ev_room_start','ev_room_end', + 'ev_no_more_lives','ev_no_more_health','ev_animation_end','ev_end_of_path','ev_user0','ev_user1', + 'ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9', + 'ev_user10','ev_user11','ev_user12','ev_user13','ev_user14','ev_user15','ev_step_normal', + 'ev_step_begin','ev_step_end', + 'vk_nokey','vk_anykey','vk_left','vk_right','vk_up','vk_down','vk_enter','vk_escape','vk_space', + 'vk_shift','vk_control','vk_alt','vk_backspace','vk_tab','vk_home','vk_end','vk_delete', + 'vk_insert','vk_pageup','vk_pagedown','vk_pause','vk_printscreen', + 'vk_f1','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_f10','vk_f11','vk_f12', + 'vk_numpad0','vk_numpad1','vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6', + 'vk_numpad7','vk_numpad8','vk_numpad9', 'vk_multiply','vk_divide','vk_add','vk_subtract', + 'vk_decimal','vk_lshift','vk_lcontrol','vk_lalt','vk_rshift','vk_rcontrol','vk_ralt', + 'c_aqua','c_black','c_blue','c_dkgray','c_fuchsia','c_gray','c_green','c_lime','c_ltgray', + 'c_maroon','c_navy','c_olive','c_purple','c_red','c_silver','c_teal','c_white','c_yellow', + 'fa_left', 'fa_center','fa_right','fa_top','fa_middle','fa_bottom', + 'pr_pointlist','pr_linelist','pr_linestrip','pr_trianglelist','pr_trianglestrip', + 'pr_trianglefan', + 'cr_none','cr_arrow','cr_cross','cr_beam','cr_size_nesw','cr_size_ns','cr_size_nwse', + 'cr_size_we','cr_uparrow','cr_hourglass','cr_drag','cr_nodrop','cr_hsplit','cr_vsplit', + 'cr_multidrag','cr_sqlwait','cr_no','cr_appstart','cr_help','cr_handpoint','cr_size_all', + 'se_chorus','se_echo','se_flanger','se_gargle','se_reverb','se_compressor','se_equalizer', + 'fa_readonly','fa_hidden','fa_sysfile','fa_volumeid','fa_directory','fa_archive', + 'pt_shape_pixel','pt_shape_disk','pt_shape_square','pt_shape_line','pt_shape_star', + 'pt_shape_circle','pt_shape_ring','pt_shape_sphere','pt_shape_flare','pt_shape_spark', + 'pt_shape_explosion','pt_shape_cloud','pt_shape_smoke','pt_shape_snow', + 'ps_shape_rectangle','ps_shape_ellipse ','ps_shape_diamond','ps_shape_line', + 'ps_distr_linear','ps_distr_gaussian','ps_force_constant','ps_force_linear','ps_force_quadratic', + 'ps_deflect_horizontal', 'ps_deflect_vertical', + 'ps_change_motion','ps_change_shape','ps_change_all' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '&&', '||', '^^', '<', '<=', '==', '!=', '>', '>=', + '|', '&', '^', '<<', '>>', '+', '-', '*', '/', '!', '-', '~' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'font-weight: bold; color: #000000;', + 2 => 'font-weight: bold; color: #000000;', + 3 => 'color: navy;', + 4 => 'color: #663300;', + ), + 'COMMENTS' => array( + 1 => 'font-style: italic; color: green;', + 'MULTI' => 'font-style: italic; color: green;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' //'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66; font-weight: bold;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + // All GML functions have been indexed, but need some corrections. + 3 => 'http://www.zonamakers.com/gmlreference/{FNAME}.html', // (provisional, could change soon!) + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/groovy.php b/ehcp/net2ftp/plugins/geshi/geshi/groovy.php new file mode 100644 index 0000000..3ae006d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/groovy.php @@ -0,0 +1,2117 @@ + 'Groovy', + 'COMMENT_SINGLE' => array(1 => '//', 2 => 'import', 3 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'''", '"""', "'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '||', + 'while', + 'switch', + 'in', + 'if', + 'foreach', + 'for', + 'else', + 'do', + 'case', + '=>', + '--', + '++', + '<<', + '<<<', + '&&' + ), + 2 => array( + 'volatile', + 'try', + 'true', + 'transient', + 'throws', + 'throw', + 'this', + 'synchronized', + 'super', + 'strictfp', + 'static', + 'return', + 'public', + 'protected', + 'property', + 'private', + 'package', + 'null', + 'new', + 'native', + 'interface', + 'instanceof', + 'implements', + 'goto', + 'finally', + 'final', + 'false', + 'extends', + 'enum', + 'default', + 'def', + 'continue', + 'const', + 'class', + 'catch', + 'break', + 'assert', + 'abstract', + 'as' + ), + 3 => array( + '_Remote_Stub', + '_PolicyStub', + '_NamingContextStub', + '_NamingContextImplBase', + '_IDLTypeStub', + '_BindingIteratorStub', + '_BindingIteratorImplBase', + 'ZoneView', + 'ZipOutputStream', + 'ZipInputStream', + 'ZipFile', + 'ZipException', + 'ZipEntry', + 'X509Extension', + 'X509EncodedKeySpec', + 'X509Certificate', + 'X509CRLEntry', + 'X509CRL', + 'WrongTransaction', + 'Writer', + 'WriteAbortedException', + 'WritableRenderedImage', + 'WritableRaster', + 'WrappedPlainView', + 'WindowListener', + 'WindowEvent', + 'WindowConstants', + 'WindowAdapter', + 'Window', + 'WeakReference', + 'WeakHashMap', + 'WStringValueHelper', + 'WCharSeqHolder', + 'WCharSeqHelper', + 'Void', + 'VoiceStatus', + 'VisibilityHelper', + 'Visibility', + 'VirtualMachineError', + 'ViewportUI', + 'ViewportLayout', + 'ViewFactory', + 'View', + 'VetoableChangeSupport', + 'VetoableChangeListener', + 'VersionSpecHelper', + 'VerifyError', + 'Vector', + 'VariableHeightLayoutCache', + 'ValueMemberHelper', + 'ValueMember', + 'ValueHandler', + 'ValueFactory', + 'ValueBaseHolder', + 'ValueBaseHelper', + 'ValueBase', + 'VM_TRUNCATABLE', + 'VM_NONE', + 'VM_CUSTOM', + 'VM_ABSTRACT', + 'VMID', + 'Utilities', + 'UtilDelegate', + 'Util', + 'UserException', + 'UnsupportedOperationException', + 'UnsupportedLookAndFeelException', + 'UnsupportedFlavorException', + 'UnsupportedEncodingException', + 'UnsupportedClassVersionError', + 'UnsupportedAudioFileException', + 'UnsolicitedNotificationListener', + 'UnsolicitedNotificationEvent', + 'UnsolicitedNotification', + 'UnsatisfiedLinkError', + 'UnresolvedPermission', + 'Unreferenced', + 'UnrecoverableKeyException', + 'UnmarshalException', + 'UnknownUserException', + 'UnknownServiceException', + 'UnknownObjectException', + 'UnknownHostException', + 'UnknownHostException', + 'UnknownGroupException', + 'UnknownException', + 'UnknownError', + 'UnionMemberHelper', + 'UnionMember', + 'UnicastRemoteObject', + 'UnexpectedException', + 'UndoableEditSupport', + 'UndoableEditListener', + 'UndoableEditEvent', + 'UndoableEdit', + 'UndoManager', + 'UndeclaredThrowableException', + 'UTFDataFormatException', + 'UShortSeqHolder', + 'UShortSeqHelper', + 'URLStreamHandlerFactory', + 'URLStreamHandler', + 'URLEncoder', + 'URLDecoder', + 'URLConnection', + 'URLClassLoader', + 'URL', + 'UNSUPPORTED_POLICY_VALUE', + 'UNSUPPORTED_POLICY', + 'UNKNOWN', + 'ULongSeqHolder', + 'ULongSeqHelper', + 'ULongLongSeqHolder', + 'ULongLongSeqHelper', + 'UIResource', + 'UIManager.LookAndFeelInfo', + 'UIManager', + 'UIDefaults.ProxyLazyValue', + 'UIDefaults.LazyValue', + 'UIDefaults.LazyInputMap', + 'UIDefaults.ActiveValue', + 'UIDefaults', + 'UID', + 'Types', + 'TypeMismatch', + 'TypeCodeHolder', + 'TypeCode', + 'TreeWillExpandListener', + 'TreeUI', + 'TreeSet', + 'TreeSelectionModel', + 'TreeSelectionListener', + 'TreeSelectionEvent', + 'TreePath', + 'TreeNode', + 'TreeModelListener', + 'TreeModelEvent', + 'TreeModel', + 'TreeMap', + 'TreeExpansionListener', + 'TreeExpansionEvent', + 'TreeCellRenderer', + 'TreeCellEditor', + 'Transparency', + 'Transmitter', + 'TransformAttribute', + 'Transferable', + 'TransactionRolledbackException', + 'TransactionRequiredException', + 'Track', + 'Toolkit', + 'ToolTipUI', + 'ToolTipManager', + 'ToolBarUI', + 'TooManyListenersException', + 'TitledBorder', + 'Timestamp', + 'TimerTask', + 'Timer', + 'Timer', + 'TimeZone', + 'TimeLimitExceededException', + 'Time', + 'TileObserver', + 'Tie', + 'Throwable', + 'ThreadLocal', + 'ThreadGroup', + 'ThreadDeath', + 'Thread', + 'TexturePaint', + 'TextUI', + 'TextMeasurer', + 'TextListener', + 'TextLayout.CaretPolicy', + 'TextLayout', + 'TextHitInfo', + 'TextField', + 'TextEvent', + 'TextComponent', + 'TextAttribute', + 'TextArea', + 'TextAction', + 'TargetDataLine', + 'TagElement', + 'TableView', + 'TableUI', + 'TableModelListener', + 'TableModelEvent', + 'TableModel', + 'TableHeaderUI', + 'TableColumnModelListener', + 'TableColumnModelEvent', + 'TableColumnModel', + 'TableColumn', + 'TableCellRenderer', + 'TableCellEditor', + 'TabbedPaneUI', + 'TabableView', + 'TabStop', + 'TabSet', + 'TabExpander', + 'TRANSIENT', + 'TRANSACTION_ROLLEDBACK', + 'TRANSACTION_REQUIRED', + 'TCKind', + 'SystemFlavorMap', + 'SystemException', + 'SystemColor', + 'System', + 'SysexMessage', + 'Synthesizer', + 'SyncFailedException', + 'SwingUtilities', + 'SwingPropertyChangeSupport', + 'SwingConstants', + 'StyledEditorKit.UnderlineAction', + 'StyledEditorKit.StyledTextAction', + 'StyledEditorKit.ItalicAction', + 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.FontSizeAction', + 'StyledEditorKit.FontFamilyAction', + 'StyledEditorKit.BoldAction', + 'StyledEditorKit.AlignmentAction', + 'StyledEditorKit', + 'StyledDocument', + 'StyleSheet.ListPainter', + 'StyleSheet.BoxPainter', + 'StyleSheet', + 'StyleContext', + 'StyleConstants.ParagraphConstants', + 'StyleConstants.FontConstants', + 'StyleConstants.ColorConstants', + 'StyleConstants.CharacterConstants', + 'StyleConstants', + 'Style', + 'StubNotFoundException', + 'StubDelegate', + 'Stub', + 'StructMemberHelper', + 'StructMember', + 'Struct', + 'Stroke', + 'StringWriter', + 'StringValueHelper', + 'StringTokenizer', + 'StringSelection', + 'StringRefAddr', + 'StringReader', + 'StringIndexOutOfBoundsException', + 'StringHolder', + 'StringContent', + 'StringCharacterIterator', + 'StringBufferInputStream', + 'StringBuffer', + 'String', + 'StrictMath', + 'StreamableValue', + 'Streamable', + 'StreamTokenizer', + 'StreamCorruptedException', + 'Statement', + 'StateFactory', + 'StateEditable', + 'StateEdit', + 'StackOverflowError', + 'Stack', + 'SplitPaneUI', + 'SourceDataLine', + 'SoundbankResource', + 'SoundbankReader', + 'Soundbank', + 'SortedSet', + 'SortedMap', + 'SoftReference', + 'SoftBevelBorder', + 'SocketSecurityException', + 'SocketPermission', + 'SocketOptions', + 'SocketImplFactory', + 'SocketImpl', + 'SocketException', + 'Socket', + 'SliderUI', + 'SkeletonNotFoundException', + 'SkeletonMismatchException', + 'Skeleton', + 'SizeSequence', + 'SizeRequirements', + 'SizeLimitExceededException', + 'SingleSelectionModel', + 'SinglePixelPackedSampleModel', + 'SimpleTimeZone', + 'SimpleDateFormat', + 'SimpleBeanInfo', + 'SimpleAttributeSet', + 'Signer', + 'SignedObject', + 'SignatureSpi', + 'SignatureException', + 'Signature', + 'ShortSeqHolder', + 'ShortSeqHelper', + 'ShortMessage', + 'ShortLookupTable', + 'ShortHolder', + 'Short', + 'ShapeGraphicAttribute', + 'Shape', + 'SetOverrideTypeHelper', + 'SetOverrideType', + 'Set', + 'ServiceUnavailableException', + 'ServiceInformationHolder', + 'ServiceInformationHelper', + 'ServiceInformation', + 'ServiceDetailHelper', + 'ServiceDetail', + 'ServerSocket', + 'ServerRuntimeException', + 'ServerRequest', + 'ServerRef', + 'ServerNotActiveException', + 'ServerException', + 'ServerError', + 'ServerCloneException', + 'ServantObject', + 'SerializablePermission', + 'Serializable', + 'Sequencer.SyncMode', + 'Sequencer', + 'SequenceInputStream', + 'Sequence', + 'SeparatorUI', + 'Segment', + 'SecurityPermission', + 'SecurityManager', + 'SecurityException', + 'Security', + 'SecureRandomSpi', + 'SecureRandom', + 'SecureClassLoader', + 'SearchResult', + 'SearchControls', + 'Scrollbar', + 'Scrollable', + 'ScrollPaneUI', + 'ScrollPaneLayout.UIResource', + 'ScrollPaneLayout', + 'ScrollPaneConstants', + 'ScrollPane', + 'ScrollBarUI', + 'SchemaViolationException', + 'SampleModel', + 'SQLWarning', + 'SQLPermission', + 'SQLOutput', + 'SQLInput', + 'SQLException', + 'SQLData', + 'RuntimePermission', + 'RuntimeException', + 'Runtime', + 'Runnable', + 'RunTimeOperations', + 'RunTime', + 'RuleBasedCollator', + 'RowMapper', + 'RoundRectangle2D.Float', + 'RoundRectangle2D.Double', + 'RoundRectangle2D', + 'RootPaneUI', + 'RootPaneContainer', + 'Robot', + 'ReverbType', + 'ResultSetMetaData', + 'ResultSet', + 'ResponseHandler', + 'ResourceBundle', + 'Resolver', + 'ResolveResult', + 'RescaleOp', + 'Request', + 'RepositoryIdHelper', + 'Repository', + 'ReplicateScaleFilter', + 'RepaintManager', + 'RenderingHints.Key', + 'RenderingHints', + 'Renderer', + 'RenderedImageFactory', + 'RenderedImage', + 'RenderableImageProducer', + 'RenderableImageOp', + 'RenderableImage', + 'RenderContext', + 'RemoteStub', + 'RemoteServer', + 'RemoteRef', + 'RemoteObject', + 'RemoteException', + 'RemoteCall', + 'Remote', + 'RemarshalException', + 'RegistryHandler', + 'Registry', + 'ReflectPermission', + 'ReferralException', + 'Referenceable', + 'ReferenceQueue', + 'Reference', + 'RefAddr', + 'Ref', + 'RectangularShape', + 'Rectangle2D.Float', + 'Rectangle2D.Double', + 'Rectangle2D', + 'Rectangle', + 'Receiver', + 'Reader', + 'RasterOp', + 'RasterFormatException', + 'Raster', + 'RandomAccessFile', + 'Random', + 'RTFEditorKit', + 'RSAPublicKeySpec', + 'RSAPublicKey', + 'RSAPrivateKeySpec', + 'RSAPrivateKey', + 'RSAPrivateCrtKeySpec', + 'RSAPrivateCrtKey', + 'RSAKeyGenParameterSpec', + 'RSAKey', + 'RMISocketFactory', + 'RMIServerSocketFactory', + 'RMISecurityManager', + 'RMISecurityException', + 'RMIFailureHandler', + 'RMIClientSocketFactory', + 'RMIClassLoader', + 'RGBImageFilter', + 'QuadCurve2D.Float', + 'QuadCurve2D.Double', + 'QuadCurve2D', + 'PushbackReader', + 'PushbackInputStream', + 'PublicKey', + 'Proxy', + 'ProviderException', + 'Provider', + 'ProtocolException', + 'ProtectionDomain', + 'PropertyVetoException', + 'PropertyResourceBundle', + 'PropertyPermission', + 'PropertyEditorSupport', + 'PropertyEditorManager', + 'PropertyEditor', + 'PropertyDescriptor', + 'PropertyChangeSupport', + 'PropertyChangeListener', + 'PropertyChangeEvent', + 'Properties', + 'ProgressMonitorInputStream', + 'ProgressMonitor', + 'ProgressBarUI', + 'ProfileDataException', + 'Process', + 'PrivilegedExceptionAction', + 'PrivilegedActionException', + 'PrivilegedAction', + 'PrivateKey', + 'PrinterJob', + 'PrinterIOException', + 'PrinterGraphics', + 'PrinterException', + 'PrinterAbortException', + 'Printable', + 'PrintWriter', + 'PrintStream', + 'PrintJob', + 'PrintGraphics', + 'PrincipalHolder', + 'Principal', + 'Principal', + 'PreparedStatement', + 'Position.Bias', + 'Position', + 'PortableRemoteObjectDelegate', + 'PortableRemoteObject', + 'Port.Info', + 'Port', + 'PopupMenuUI', + 'PopupMenuListener', + 'PopupMenuEvent', + 'PopupMenu', + 'Polygon', + 'PolicyTypeHelper', + 'PolicyOperations', + 'PolicyListHolder', + 'PolicyListHelper', + 'PolicyHolder', + 'PolicyHelper', + 'PolicyError', + 'Policy', + 'Policy', + 'Point2D.Float', + 'Point2D.Double', + 'Point2D', + 'Point', + 'PlainView', + 'PlainDocument', + 'PixelInterleavedSampleModel', + 'PixelGrabber', + 'PipedWriter', + 'PipedReader', + 'PipedOutputStream', + 'PipedInputStream', + 'PhantomReference', + 'Permissions', + 'PermissionCollection', + 'Permission', + 'Permission', + 'PathIterator', + 'Patch', + 'PasswordView', + 'PasswordAuthentication', + 'PartialResultException', + 'ParserDelegator', + 'Parser', + 'ParsePosition', + 'ParseException', + 'ParameterDescriptor', + 'ParameterBlock', + 'ParagraphView', + 'ParagraphView', + 'Paper', + 'PanelUI', + 'Panel', + 'PaintEvent', + 'PaintContext', + 'Paint', + 'Pageable', + 'PageFormat', + 'PageAttributes.PrintQualityType', + 'PageAttributes.OriginType', + 'PageAttributes.OrientationRequestedType', + 'PageAttributes.MediaType', + 'PageAttributes.ColorType', + 'PageAttributes', + 'PackedColorModel', + 'Package', + 'PUBLIC_MEMBER', + 'PRIVATE_MEMBER', + 'PKCS8EncodedKeySpec', + 'PERSIST_STORE', + 'Owner', + 'OverlayLayout', + 'OutputStreamWriter', + 'OutputStream', + 'OutOfMemoryError', + 'OptionalDataException', + 'OptionPaneUI', + 'Option', + 'OperationNotSupportedException', + 'Operation', + 'OpenType', + 'OctetSeqHolder', + 'OctetSeqHelper', + 'Observer', + 'Observable', + 'ObjectView', + 'ObjectStreamField', + 'ObjectStreamException', + 'ObjectStreamConstants', + 'ObjectStreamClass', + 'ObjectOutputStream.PutField', + 'ObjectOutputStream', + 'ObjectOutput', + 'ObjectInputValidation', + 'ObjectInputStream.GetField', + 'ObjectInputStream', + 'ObjectInput', + 'ObjectImpl', + 'ObjectImpl', + 'ObjectHolder', + 'ObjectHelper', + 'ObjectFactoryBuilder', + 'ObjectFactory', + 'ObjectChangeListener', + 'Object', + 'ObjID', + 'ORB', + 'OMGVMCID', + 'OBJ_ADAPTER', + 'OBJECT_NOT_EXIST', + 'NumberFormatException', + 'NumberFormat', + 'Number', + 'NullPointerException', + 'NotSerializableException', + 'NotOwnerException', + 'NotFoundReasonHolder', + 'NotFoundReasonHelper', + 'NotFoundReason', + 'NotFoundHolder', + 'NotFoundHelper', + 'NotFound', + 'NotEmptyHolder', + 'NotEmptyHelper', + 'NotEmpty', + 'NotContextException', + 'NotBoundException', + 'NotActiveException', + 'NoninvertibleTransformException', + 'NoSuchProviderException', + 'NoSuchObjectException', + 'NoSuchMethodException', + 'NoSuchMethodError', + 'NoSuchFieldException', + 'NoSuchFieldError', + 'NoSuchElementException', + 'NoSuchAttributeException', + 'NoSuchAlgorithmException', + 'NoRouteToHostException', + 'NoPermissionException', + 'NoInitialContextException', + 'NoClassDefFoundError', + 'NetPermission', + 'NegativeArraySizeException', + 'NamingSecurityException', + 'NamingManager', + 'NamingListener', + 'NamingExceptionEvent', + 'NamingException', + 'NamingEvent', + 'NamingEnumeration', + 'NamingContextOperations', + 'NamingContextHolder', + 'NamingContextHelper', + 'NamingContext', + 'Naming', + 'NamespaceChangeListener', + 'NamedValue', + 'NameValuePairHelper', + 'NameValuePair', + 'NameParser', + 'NameNotFoundException', + 'NameHolder', + 'NameHelper', + 'NameComponentHolder', + 'NameComponentHelper', + 'NameComponent', + 'NameClassPair', + 'NameAlreadyBoundException', + 'Name', + 'NVList', + 'NO_RESPONSE', + 'NO_RESOURCES', + 'NO_PERMISSION', + 'NO_MEMORY', + 'NO_IMPLEMENT', + 'MutableTreeNode', + 'MutableComboBoxModel', + 'MutableAttributeSet', + 'MultipleMaster', + 'MulticastSocket', + 'MultiViewportUI', + 'MultiTreeUI', + 'MultiToolTipUI', + 'MultiToolBarUI', + 'MultiTextUI', + 'MultiTableUI', + 'MultiTableHeaderUI', + 'MultiTabbedPaneUI', + 'MultiSplitPaneUI', + 'MultiSliderUI', + 'MultiSeparatorUI', + 'MultiScrollPaneUI', + 'MultiScrollBarUI', + 'MultiProgressBarUI', + 'MultiPopupMenuUI', + 'MultiPixelPackedSampleModel', + 'MultiPanelUI', + 'MultiOptionPaneUI', + 'MultiMenuItemUI', + 'MultiMenuBarUI', + 'MultiLookAndFeel', + 'MultiListUI', + 'MultiLabelUI', + 'MultiInternalFrameUI', + 'MultiFileChooserUI', + 'MultiDesktopPaneUI', + 'MultiDesktopIconUI', + 'MultiComboBoxUI', + 'MultiColorChooserUI', + 'MultiButtonUI', + 'MouseMotionListener', + 'MouseMotionAdapter', + 'MouseListener', + 'MouseInputListener', + 'MouseInputAdapter', + 'MouseEvent', + 'MouseDragGestureRecognizer', + 'MouseAdapter', + 'Modifier', + 'ModificationItem', + 'MixerProvider', + 'Mixer.Info', + 'Mixer', + 'MissingResourceException', + 'MinimalHTMLWriter', + 'MimeTypeParseException', + 'MidiUnavailableException', + 'MidiSystem', + 'MidiMessage', + 'MidiFileWriter', + 'MidiFileReader', + 'MidiFileFormat', + 'MidiEvent', + 'MidiDeviceProvider', + 'MidiDevice.Info', + 'MidiDevice', + 'MidiChannel', + 'MethodDescriptor', + 'Method', + 'MetalTreeUI', + 'MetalToolTipUI', + 'MetalToolBarUI', + 'MetalToggleButtonUI', + 'MetalTheme', + 'MetalTextFieldUI', + 'MetalTabbedPaneUI', + 'MetalSplitPaneUI', + 'MetalSliderUI', + 'MetalSeparatorUI', + 'MetalScrollPaneUI', + 'MetalScrollButton', + 'MetalScrollBarUI', + 'MetalRadioButtonUI', + 'MetalProgressBarUI', + 'MetalPopupMenuSeparatorUI', + 'MetalLookAndFeel', + 'MetalLabelUI', + 'MetalInternalFrameUI', + 'MetalInternalFrameTitlePane', + 'MetalIconFactory.TreeLeafIcon', + 'MetalIconFactory.TreeFolderIcon', + 'MetalIconFactory.TreeControlIcon', + 'MetalIconFactory.PaletteCloseIcon', + 'MetalIconFactory.FolderIcon16', + 'MetalIconFactory.FileIcon16', + 'MetalIconFactory', + 'MetalFileChooserUI', + 'MetalDesktopIconUI', + 'MetalComboBoxUI', + 'MetalComboBoxIcon', + 'MetalComboBoxEditor.UIResource', + 'MetalComboBoxEditor', + 'MetalComboBoxButton', + 'MetalCheckBoxUI', + 'MetalCheckBoxIcon', + 'MetalButtonUI', + 'MetalBorders.ToolBarBorder', + 'MetalBorders.ToggleButtonBorder', + 'MetalBorders.TextFieldBorder', + 'MetalBorders.TableHeaderBorder', + 'MetalBorders.ScrollPaneBorder', + 'MetalBorders.RolloverButtonBorder', + 'MetalBorders.PopupMenuBorder', + 'MetalBorders.PaletteBorder', + 'MetalBorders.OptionDialogBorder', + 'MetalBorders.MenuItemBorder', + 'MetalBorders.MenuBarBorder', + 'MetalBorders.InternalFrameBorder', + 'MetalBorders.Flush3DBorder', + 'MetalBorders.ButtonBorder', + 'MetalBorders', + 'MetaMessage', + 'MetaEventListener', + 'MessageFormat', + 'MessageDigestSpi', + 'MessageDigest', + 'MenuShortcut', + 'MenuSelectionManager', + 'MenuListener', + 'MenuKeyListener', + 'MenuKeyEvent', + 'MenuItemUI', + 'MenuItem', + 'MenuEvent', + 'MenuElement', + 'MenuDragMouseListener', + 'MenuDragMouseEvent', + 'MenuContainer', + 'MenuComponent', + 'MenuBarUI', + 'MenuBar', + 'Menu', + 'MemoryImageSource', + 'Member', + 'MediaTracker', + 'MatteBorder', + 'Math', + 'MarshalledObject', + 'MarshalException', + 'Map.Entry', + 'Map', + 'Manifest', + 'MalformedURLException', + 'MalformedLinkException', + 'MARSHAL', + 'LookupTable', + 'LookupOp', + 'LookAndFeel', + 'LongSeqHolder', + 'LongSeqHelper', + 'LongLongSeqHolder', + 'LongLongSeqHelper', + 'LongHolder', + 'Long', + 'LogStream', + 'LocateRegistry', + 'Locale', + 'LoaderHandler', + 'ListView', + 'ListUI', + 'ListSelectionModel', + 'ListSelectionListener', + 'ListSelectionEvent', + 'ListResourceBundle', + 'ListModel', + 'ListIterator', + 'ListDataListener', + 'ListDataEvent', + 'ListCellRenderer', + 'List', + 'List', + 'LinkedList', + 'LinkageError', + 'LinkRef', + 'LinkLoopException', + 'LinkException', + 'LineUnavailableException', + 'LineNumberReader', + 'LineNumberInputStream', + 'LineMetrics', + 'LineListener', + 'LineEvent.Type', + 'LineEvent', + 'LineBreakMeasurer', + 'LineBorder', + 'Line2D.Float', + 'Line2D.Double', + 'Line2D', + 'Line.Info', + 'Line', + 'LimitExceededException', + 'Lease', + 'LdapReferralException', + 'LdapContext', + 'LayoutQueue', + 'LayoutManager2', + 'LayoutManager', + 'LayeredHighlighter.LayerPainter', + 'LayeredHighlighter', + 'LastOwnerException', + 'LabelView', + 'LabelUI', + 'Label', + 'Keymap', + 'KeyStroke', + 'KeyStoreSpi', + 'KeyStoreException', + 'KeyStore', + 'KeySpec', + 'KeyPairGeneratorSpi', + 'KeyPairGenerator', + 'KeyPair', + 'KeyManagementException', + 'KeyListener', + 'KeyFactorySpi', + 'KeyFactory', + 'KeyException', + 'KeyEvent', + 'KeyAdapter', + 'Key', + 'Kernel', + 'JobAttributes.SidesType', + 'JobAttributes.MultipleDocumentHandlingType', + 'JobAttributes.DialogType', + 'JobAttributes.DestinationType', + 'JobAttributes.DefaultSelectionType', + 'JobAttributes', + 'JarURLConnection', + 'JarOutputStream', + 'JarInputStream', + 'JarFile', + 'JarException', + 'JarEntry', + 'JWindow', + 'JViewport', + 'JTree.EmptySelectionModel', + 'JTree.DynamicUtilTreeNode', + 'JTree', + 'JToolTip', + 'JToolBar.Separator', + 'JToolBar', + 'JToggleButton.ToggleButtonModel', + 'JToggleButton', + 'JTextPane', + 'JTextField', + 'JTextComponent.KeyBinding', + 'JTextComponent', + 'JTextArea', + 'JTableHeader', + 'JTable', + 'JTabbedPane', + 'JSplitPane', + 'JSlider', + 'JSeparator', + 'JScrollPane', + 'JScrollBar', + 'JRootPane', + 'JRadioButtonMenuItem', + 'JRadioButton', + 'JProgressBar', + 'JPopupMenu.Separator', + 'JPopupMenu', + 'JPasswordField', + 'JPanel', + 'JOptionPane', + 'JMenuItem', + 'JMenuBar', + 'JMenu', + 'JList', + 'JLayeredPane', + 'JLabel', + 'JInternalFrame.JDesktopIcon', + 'JInternalFrame', + 'JFrame', + 'JFileChooser', + 'JEditorPane', + 'JDialog', + 'JDesktopPane', + 'JComponent', + 'JComboBox.KeySelectionManager', + 'JComboBox', + 'JColorChooser', + 'JCheckBoxMenuItem', + 'JCheckBox', + 'JButton', + 'JApplet', + 'Iterator', + 'ItemSelectable', + 'ItemListener', + 'ItemEvent', + 'IstringHelper', + 'InvokeHandler', + 'InvocationTargetException', + 'InvocationHandler', + 'InvocationEvent', + 'InvalidValue', + 'InvalidTransactionException', + 'InvalidSeq', + 'InvalidSearchFilterException', + 'InvalidSearchControlsException', + 'InvalidParameterSpecException', + 'InvalidParameterException', + 'InvalidObjectException', + 'InvalidNameHolder', + 'InvalidNameHelper', + 'InvalidNameException', + 'InvalidName', + 'InvalidName', + 'InvalidMidiDataException', + 'InvalidKeySpecException', + 'InvalidKeyException', + 'InvalidDnDOperationException', + 'InvalidClassException', + 'InvalidAttributesException', + 'InvalidAttributeValueException', + 'InvalidAttributeIdentifierException', + 'InvalidAlgorithmParameterException', + 'Invalid', + 'Introspector', + 'IntrospectionException', + 'InterruptedNamingException', + 'InterruptedIOException', + 'InterruptedException', + 'InternalFrameUI', + 'InternalFrameListener', + 'InternalFrameEvent', + 'InternalFrameAdapter', + 'InternalError', + 'Integer', + 'IntHolder', + 'InsufficientResourcesException', + 'Instrument', + 'InstantiationException', + 'InstantiationError', + 'InsetsUIResource', + 'Insets', + 'InputVerifier', + 'InputSubset', + 'InputStreamReader', + 'InputStream', + 'InputStream', + 'InputStream', + 'InputMethodRequests', + 'InputMethodListener', + 'InputMethodHighlight', + 'InputMethodEvent', + 'InputMethodDescriptor', + 'InputMethodContext', + 'InputMethod', + 'InputMapUIResource', + 'InputMap', + 'InputEvent', + 'InputContext', + 'InlineView', + 'Initializer', + 'InitialLdapContext', + 'InitialDirContext', + 'InitialContextFactoryBuilder', + 'InitialContextFactory', + 'InitialContext', + 'InheritableThreadLocal', + 'InflaterInputStream', + 'Inflater', + 'InetAddress', + 'IndirectionException', + 'IndexedPropertyDescriptor', + 'IndexOutOfBoundsException', + 'IndexColorModel', + 'InconsistentTypeCode', + 'IncompatibleClassChangeError', + 'ImagingOpException', + 'ImageProducer', + 'ImageObserver', + 'ImageIcon', + 'ImageGraphicAttribute', + 'ImageFilter', + 'ImageConsumer', + 'Image', + 'IllegalThreadStateException', + 'IllegalStateException', + 'IllegalPathStateException', + 'IllegalMonitorStateException', + 'IllegalComponentStateException', + 'IllegalArgumentException', + 'IllegalAccessException', + 'IllegalAccessError', + 'IdentityScope', + 'Identity', + 'IdentifierHelper', + 'IconView', + 'IconUIResource', + 'Icon', + 'IRObjectOperations', + 'IRObject', + 'IOException', + 'INV_POLICY', + 'INV_OBJREF', + 'INV_IDENT', + 'INV_FLAG', + 'INVALID_TRANSACTION', + 'INTF_REPOS', + 'INTERNAL', + 'INITIALIZE', + 'IMP_LIMIT', + 'IDLTypeOperations', + 'IDLTypeHelper', + 'IDLType', + 'IDLEntity', + 'ICC_ProfileRGB', + 'ICC_ProfileGray', + 'ICC_Profile', + 'ICC_ColorSpace', + 'HyperlinkListener', + 'HyperlinkEvent.EventType', + 'HyperlinkEvent', + 'HttpURLConnection', + 'Highlighter.HighlightPainter', + 'Highlighter.Highlight', + 'Highlighter', + 'HierarchyListener', + 'HierarchyEvent', + 'HierarchyBoundsListener', + 'HierarchyBoundsAdapter', + 'Hashtable', + 'HashSet', + 'HashMap', + 'HasControls', + 'HTMLWriter', + 'HTMLFrameHyperlinkEvent', + 'HTMLEditorKit.ParserCallback', + 'HTMLEditorKit.Parser', + 'HTMLEditorKit.LinkController', + 'HTMLEditorKit.InsertHTMLTextAction', + 'HTMLEditorKit.HTMLTextAction', + 'HTMLEditorKit.HTMLFactory', + 'HTMLEditorKit', + 'HTMLDocument.Iterator', + 'HTMLDocument', + 'HTML.UnknownTag', + 'HTML.Tag', + 'HTML.Attribute', + 'HTML', + 'GuardedObject', + 'Guard', + 'Group', + 'GridLayout', + 'GridBagLayout', + 'GridBagConstraints', + 'GregorianCalendar', + 'GrayFilter', + 'GraphicsEnvironment', + 'GraphicsDevice', + 'GraphicsConfiguration', + 'GraphicsConfigTemplate', + 'Graphics2D', + 'Graphics', + 'GraphicAttribute', + 'GradientPaint', + 'GlyphView.GlyphPainter', + 'GlyphView', + 'GlyphVector', + 'GlyphMetrics', + 'GlyphJustificationInfo', + 'GeneralSecurityException', + 'GeneralPath', + 'GapContent', + 'GZIPOutputStream', + 'GZIPInputStream', + 'Frame', + 'FormatConversionProvider', + 'Format', + 'FormView', + 'FontUIResource', + 'FontRenderContext', + 'FontMetrics', + 'FontFormatException', + 'Font', + 'FocusManager', + 'FocusListener', + 'FocusEvent', + 'FocusAdapter', + 'FlowView.FlowStrategy', + 'FlowView', + 'FlowLayout', + 'FloatSeqHolder', + 'FloatSeqHelper', + 'FloatHolder', + 'FloatControl.Type', + 'FloatControl', + 'Float', + 'FlavorMap', + 'FlatteningPathIterator', + 'FixedHolder', + 'FixedHeightLayoutCache', + 'FilteredImageSource', + 'FilterWriter', + 'FilterReader', + 'FilterOutputStream', + 'FilterInputStream', + 'FilenameFilter', + 'FileWriter', + 'FileView', + 'FileSystemView', + 'FileReader', + 'FilePermission', + 'FileOutputStream', + 'FileNotFoundException', + 'FileNameMap', + 'FileInputStream', + 'FileFilter', + 'FileFilter', + 'FileDialog', + 'FileDescriptor', + 'FileChooserUI', + 'File', + 'FieldView', + 'FieldPosition', + 'FieldNameHelper', + 'Field', + 'FeatureDescriptor', + 'FREE_MEM', + 'Externalizable', + 'ExtendedResponse', + 'ExtendedRequest', + 'ExportException', + 'ExpandVetoException', + 'ExceptionList', + 'ExceptionInInitializerError', + 'Exception', + 'EventSetDescriptor', + 'EventQueue', + 'EventObject', + 'EventListenerList', + 'EventListener', + 'EventDirContext', + 'EventContext', + 'Event', + 'EtchedBorder', + 'Error', + 'Environment', + 'Enumeration', + 'EnumControl.Type', + 'EnumControl', + 'Entity', + 'EncodedKeySpec', + 'EmptyStackException', + 'EmptyBorder', + 'Ellipse2D.Float', + 'Ellipse2D.Double', + 'Ellipse2D', + 'ElementIterator', + 'Element', + 'EditorKit', + 'EOFException', + 'DynamicImplementation', + 'DynValue', + 'DynUnion', + 'DynStruct', + 'DynSequence', + 'DynFixed', + 'DynEnum', + 'DynArray', + 'DynAny', + 'DropTargetListener', + 'DropTargetEvent', + 'DropTargetDropEvent', + 'DropTargetDragEvent', + 'DropTargetContext', + 'DropTarget.DropTargetAutoScroller', + 'DropTarget', + 'DriverPropertyInfo', + 'DriverManager', + 'Driver', + 'DragSourceListener', + 'DragSourceEvent', + 'DragSourceDropEvent', + 'DragSourceDragEvent', + 'DragSourceContext', + 'DragSource', + 'DragGestureRecognizer', + 'DragGestureListener', + 'DragGestureEvent', + 'DoubleSeqHolder', + 'DoubleSeqHelper', + 'DoubleHolder', + 'Double', + 'DomainManagerOperations', + 'DomainManager', + 'DomainCombiner', + 'DocumentParser', + 'DocumentListener', + 'DocumentEvent.EventType', + 'DocumentEvent.ElementChange', + 'DocumentEvent', + 'Document', + 'DnDConstants', + 'DirectoryManager', + 'DirectColorModel', + 'DirStateFactory.Result', + 'DirStateFactory', + 'DirObjectFactory', + 'DirContext', + 'DimensionUIResource', + 'Dimension2D', + 'Dimension', + 'DigestOutputStream', + 'DigestInputStream', + 'DigestException', + 'Dictionary', + 'Dialog', + 'DesktopPaneUI', + 'DesktopManager', + 'DesktopIconUI', + 'DesignMode', + 'Delegate', + 'DeflaterOutputStream', + 'Deflater', + 'DefinitionKindHelper', + 'DefinitionKind', + 'DefaultTreeSelectionModel', + 'DefaultTreeModel', + 'DefaultTreeCellRenderer', + 'DefaultTreeCellEditor', + 'DefaultTextUI', + 'DefaultTableModel', + 'DefaultTableColumnModel', + 'DefaultTableCellRenderer.UIResource', + 'DefaultTableCellRenderer', + 'DefaultStyledDocument.ElementSpec', + 'DefaultStyledDocument.AttributeUndoableEdit', + 'DefaultStyledDocument', + 'DefaultSingleSelectionModel', + 'DefaultMutableTreeNode', + 'DefaultMetalTheme', + 'DefaultMenuLayout', + 'DefaultListSelectionModel', + 'DefaultListModel', + 'DefaultListCellRenderer.UIResource', + 'DefaultListCellRenderer', + 'DefaultHighlighter.DefaultHighlightPainter', + 'DefaultHighlighter', + 'DefaultFocusManager', + 'DefaultEditorKit.PasteAction,', + 'DefaultEditorKit.InsertTabAction', + 'DefaultEditorKit.InsertContentAction', + 'DefaultEditorKit.InsertBreakAction', + 'DefaultEditorKit.DefaultKeyTypedAction', + 'DefaultEditorKit.CutAction', + 'DefaultEditorKit.CopyAction', + 'DefaultEditorKit.BeepAction', + 'DefaultEditorKit', + 'DefaultDesktopManager', + 'DefaultComboBoxModel', + 'DefaultColorSelectionModel', + 'DefaultCellEditor', + 'DefaultCaret', + 'DefaultButtonModel', + 'DefaultBoundedRangeModel', + 'DecimalFormatSymbols', + 'DecimalFormat', + 'DebugGraphics', + 'DateFormatSymbols', + 'DateFormat', + 'Date', + 'DatagramSocketImplFactory', + 'DatagramSocketImpl', + 'DatagramSocket', + 'DatagramPacket', + 'DatabaseMetaData', + 'DataTruncation', + 'DataOutputStream', + 'DataOutputStream', + 'DataOutput', + 'DataLine.Info', + 'DataLine', + 'DataInputStream', + 'DataInput', + 'DataFormatException', + 'DataFlavor', + 'DataBufferUShort', + 'DataBufferShort', + 'DataBufferInt', + 'DataBufferByte', + 'DataBuffer', + 'DTDConstants', + 'DTD', + 'DSAPublicKeySpec', + 'DSAPublicKey', + 'DSAPrivateKeySpec', + 'DSAPrivateKey', + 'DSAParams', + 'DSAParameterSpec', + 'DSAKeyPairGenerator', + 'DSAKey', + 'DGC', + 'DATA_CONVERSION', + 'Customizer', + 'CustomValue', + 'CustomMarshal', + 'Cursor', + 'CurrentOperations', + 'CurrentHolder', + 'CurrentHelper', + 'Current', + 'CubicCurve2D.Float', + 'CubicCurve2D.Double', + 'CubicCurve2D', + 'CropImageFilter', + 'ConvolveOp', + 'ControllerEventListener', + 'ControlFactory', + 'Control.Type', + 'Control', + 'ContextualRenderedImageFactory', + 'ContextNotEmptyException', + 'ContextList', + 'Context', + 'ContentModel', + 'ContentHandlerFactory', + 'ContentHandler', + 'ContainerListener', + 'ContainerEvent', + 'ContainerAdapter', + 'Container', + 'Constructor', + 'Connection', + 'ConnectIOException', + 'ConnectException', + 'ConnectException', + 'ConfigurationException', + 'ConcurrentModificationException', + 'CompoundName', + 'CompoundEdit', + 'CompoundControl.Type', + 'CompoundControl', + 'CompoundBorder', + 'CompositeView', + 'CompositeName', + 'CompositeContext', + 'Composite', + 'ComponentView', + 'ComponentUI', + 'ComponentSampleModel', + 'ComponentOrientation', + 'ComponentListener', + 'ComponentInputMapUIResource', + 'ComponentInputMap', + 'ComponentEvent', + 'ComponentColorModel', + 'ComponentAdapter', + 'Component', + 'CompletionStatusHelper', + 'CompletionStatus', + 'Compiler', + 'Comparator', + 'Comparable', + 'CommunicationException', + 'ComboPopup', + 'ComboBoxUI', + 'ComboBoxModel', + 'ComboBoxEditor', + 'ColorUIResource', + 'ColorSpace', + 'ColorSelectionModel', + 'ColorModel', + 'ColorConvertOp', + 'ColorChooserUI', + 'ColorChooserComponentFactory', + 'Color', + 'Collections', + 'Collection', + 'Collator', + 'CollationKey', + 'CollationElementIterator', + 'CodeSource', + 'Cloneable', + 'CloneNotSupportedException', + 'Clob', + 'ClipboardOwner', + 'Clipboard', + 'Clip', + 'ClassNotFoundException', + 'ClassLoader', + 'ClassFormatError', + 'ClassDesc', + 'ClassCircularityError', + 'ClassCastException', + 'Class', + 'ChoiceFormat', + 'Choice', + 'Checksum', + 'CheckedOutputStream', + 'CheckedInputStream', + 'CheckboxMenuItem', + 'CheckboxGroup', + 'Checkbox', + 'CharacterIterator', + 'Character.UnicodeBlock', + 'Character.Subset', + 'Character', + 'CharSeqHolder', + 'CharSeqHelper', + 'CharHolder', + 'CharConversionException', + 'CharArrayWriter', + 'CharArrayReader', + 'ChangedCharSetException', + 'ChangeListener', + 'ChangeEvent', + 'CertificateParsingException', + 'CertificateNotYetValidException', + 'CertificateFactorySpi', + 'CertificateFactory', + 'CertificateExpiredException', + 'CertificateException', + 'CertificateEncodingException', + 'Certificate.CertificateRep', + 'Certificate', + 'CellRendererPane', + 'CellEditorListener', + 'CellEditor', + 'CaretListener', + 'CaretEvent', + 'Caret', + 'CardLayout', + 'Canvas', + 'CannotUndoException', + 'CannotRedoException', + 'CannotProceedHolder', + 'CannotProceedHelper', + 'CannotProceedException', + 'CannotProceed', + 'CallableStatement', + 'Calendar', + 'CTX_RESTRICT_SCOPE', + 'CSS.Attribute', + 'CSS', + 'CRLException', + 'CRL', + 'CRC32', + 'COMM_FAILURE', + 'CMMException', + 'ByteLookupTable', + 'ByteHolder', + 'ByteArrayOutputStream', + 'ByteArrayInputStream', + 'Byte', + 'ButtonUI', + 'ButtonModel', + 'ButtonGroup', + 'Button', + 'BufferedWriter', + 'BufferedReader', + 'BufferedOutputStream', + 'BufferedInputStream', + 'BufferedImageOp', + 'BufferedImageFilter', + 'BufferedImage', + 'BreakIterator', + 'BoxedValueHelper', + 'BoxView', + 'BoxLayout', + 'Box.Filler', + 'Box', + 'Bounds', + 'BoundedRangeModel', + 'BorderUIResource.TitledBorderUIResource', + 'BorderUIResource.MatteBorderUIResource', + 'BorderUIResource.LineBorderUIResource', + 'BorderUIResource.EtchedBorderUIResource', + 'BorderUIResource.EmptyBorderUIResource', + 'BorderUIResource.CompoundBorderUIResource', + 'BorderUIResource.BevelBorderUIResource', + 'BorderUIResource', + 'BorderLayout', + 'BorderFactory', + 'Border', + 'BooleanSeqHolder', + 'BooleanSeqHelper', + 'BooleanHolder', + 'BooleanControl.Type', + 'BooleanControl', + 'Boolean', + 'Book', + 'BlockView', + 'Blob', + 'BitSet', + 'BindingTypeHolder', + 'BindingTypeHelper', + 'BindingType', + 'BindingListHolder', + 'BindingListHelper', + 'BindingIteratorOperations', + 'BindingIteratorHolder', + 'BindingIteratorHelper', + 'BindingIterator', + 'BindingHolder', + 'BindingHelper', + 'Binding', + 'BindException', + 'BinaryRefAddr', + 'BigInteger', + 'BigDecimal', + 'BevelBorder', + 'Beans', + 'BeanInfo', + 'BeanDescriptor', + 'BeanContextSupport.BCSIterator', + 'BeanContextSupport', + 'BeanContextServicesSupport.BCSSServiceProvider', + 'BeanContextServicesSupport', + 'BeanContextServicesListener', + 'BeanContextServices', + 'BeanContextServiceRevokedListener', + 'BeanContextServiceRevokedEvent', + 'BeanContextServiceProviderBeanInfo', + 'BeanContextServiceProvider', + 'BeanContextServiceAvailableEvent', + 'BeanContextProxy', + 'BeanContextMembershipListener', + 'BeanContextMembershipEvent', + 'BeanContextEvent', + 'BeanContextContainerProxy', + 'BeanContextChildSupport', + 'BeanContextChildComponentProxy', + 'BeanContextChild', + 'BeanContext', + 'BatchUpdateException', + 'BasicViewportUI', + 'BasicTreeUI', + 'BasicToolTipUI', + 'BasicToolBarUI', + 'BasicToolBarSeparatorUI', + 'BasicToggleButtonUI', + 'BasicTextUI.BasicHighlighter', + 'BasicTextUI.BasicCaret', + 'BasicTextUI', + 'BasicTextPaneUI', + 'BasicTextFieldUI', + 'BasicTextAreaUI', + 'BasicTableUI', + 'BasicTableHeaderUI', + 'BasicTabbedPaneUI', + 'BasicStroke', + 'BasicSplitPaneUI', + 'BasicSplitPaneDivider', + 'BasicSliderUI', + 'BasicSeparatorUI', + 'BasicScrollPaneUI', + 'BasicScrollBarUI', + 'BasicRootPaneUI', + 'BasicRadioButtonUI', + 'BasicRadioButtonMenuItemUI', + 'BasicProgressBarUI', + 'BasicPopupMenuUI', + 'BasicPopupMenuSeparatorUI', + 'BasicPermission', + 'BasicPasswordFieldUI', + 'BasicPanelUI', + 'BasicOptionPaneUI.ButtonAreaLayout', + 'BasicOptionPaneUI', + 'BasicMenuUI', + 'BasicMenuItemUI', + 'BasicMenuBarUI', + 'BasicLookAndFeel', + 'BasicListUI', + 'BasicLabelUI', + 'BasicInternalFrameUI', + 'BasicInternalFrameTitlePane', + 'BasicIconFactory', + 'BasicHTML', + 'BasicGraphicsUtils', + 'BasicFileChooserUI', + 'BasicEditorPaneUI', + 'BasicDirectoryModel', + 'BasicDesktopPaneUI', + 'BasicDesktopIconUI', + 'BasicComboPopup', + 'BasicComboBoxUI', + 'BasicComboBoxRenderer.UIResource', + 'BasicComboBoxRenderer', + 'BasicComboBoxEditor.UIResource', + 'BasicComboBoxEditor', + 'BasicColorChooserUI', + 'BasicCheckBoxUI', + 'BasicCheckBoxMenuItemUI', + 'BasicButtonUI', + 'BasicButtonListener', + 'BasicBorders.ToggleButtonBorder', + 'BasicBorders.SplitPaneBorder', + 'BasicBorders.RadioButtonBorder', + 'BasicBorders.MenuBarBorder', + 'BasicBorders.MarginBorder', + 'BasicBorders.FieldBorder', + 'BasicBorders.ButtonBorder', + 'BasicBorders', + 'BasicAttributes', + 'BasicAttribute', + 'BasicArrowButton', + 'BandedSampleModel', + 'BandCombineOp', + 'BadLocationException', + 'BadKind', + 'BAD_TYPECODE', + 'BAD_POLICY_VALUE', + 'BAD_POLICY_TYPE', + 'BAD_POLICY', + 'BAD_PARAM', + 'BAD_OPERATION', + 'BAD_INV_ORDER', + 'BAD_CONTEXT', + 'Autoscroll', + 'Authenticator', + 'AuthenticationNotSupportedException', + 'AuthenticationException', + 'AudioSystem', + 'AudioPermission', + 'AudioInputStream', + 'AudioFormat.Encoding', + 'AudioFormat', + 'AudioFileWriter', + 'AudioFileReader', + 'AudioFileFormat.Type', + 'AudioFileFormat', + 'AudioClip', + 'Attributes.Name', + 'Attributes', + 'AttributedString', + 'AttributedCharacterIterator.Attribute', + 'AttributedCharacterIterator', + 'AttributeSet.ParagraphAttribute', + 'AttributeSet.FontAttribute', + 'AttributeSet.ColorAttribute', + 'AttributeSet.CharacterAttribute', + 'AttributeSet', + 'AttributeModificationException', + 'AttributeList', + 'AttributeInUseException', + 'Attribute', + 'AsyncBoxView', + 'Arrays', + 'ArrayStoreException', + 'ArrayList', + 'ArrayIndexOutOfBoundsException', + 'Array', + 'ArithmeticException', + 'AreaAveragingScaleFilter', + 'Area', + 'Arc2D.Float', + 'Arc2D.Double', + 'Arc2D', + 'ApplicationException', + 'AppletStub', + 'AppletInitializer', + 'AppletContext', + 'Applet', + 'AnySeqHolder', + 'AnySeqHelper', + 'AnyHolder', + 'Any', + 'Annotation', + 'AncestorListener', + 'AncestorEvent', + 'AlreadyBoundHolder', + 'AlreadyBoundHelper', + 'AlreadyBoundException', + 'AlreadyBound', + 'AlphaComposite', + 'AllPermission', + 'AlgorithmParametersSpi', + 'AlgorithmParameters', + 'AlgorithmParameterSpec', + 'AlgorithmParameterGeneratorSpi', + 'AlgorithmParameterGenerator', + 'AffineTransformOp', + 'AffineTransform', + 'Adler32', + 'AdjustmentListener', + 'AdjustmentEvent', + 'Adjustable', + 'ActiveEvent', + 'Activator', + 'ActivationSystem', + 'ActivationMonitor', + 'ActivationInstantiator', + 'ActivationID', + 'ActivationGroupID', + 'ActivationGroupDesc.CommandEnvironment', + 'ActivationGroupDesc', + 'ActivationGroup', + 'ActivationException', + 'ActivationDesc', + 'ActivateFailedException', + 'Activatable', + 'ActionMapUIResource', + 'ActionMap', + 'ActionListener', + 'ActionEvent', + 'Action', + 'AclNotFoundException', + 'AclEntry', + 'Acl', + 'AccessibleValue', + 'AccessibleText', + 'AccessibleTableModelChange', + 'AccessibleTable', + 'AccessibleStateSet', + 'AccessibleState', + 'AccessibleSelection', + 'AccessibleRole', + 'AccessibleResourceBundle', + 'AccessibleRelationSet', + 'AccessibleRelation', + 'AccessibleObject', + 'AccessibleIcon', + 'AccessibleHypertext', + 'AccessibleHyperlink', + 'AccessibleContext', + 'AccessibleComponent', + 'AccessibleBundle', + 'AccessibleAction', + 'Accessible', + 'AccessException', + 'AccessController', + 'AccessControlException', + 'AccessControlContext', + 'AbstractWriter', + 'AbstractUndoableEdit', + 'AbstractTableModel', + 'AbstractSet', + 'AbstractSequentialList', + 'AbstractMethodError', + 'AbstractMap', + 'AbstractListModel', + 'AbstractList', + 'AbstractLayoutCache.NodeDimensions', + 'AbstractLayoutCache', + 'AbstractDocument.ElementEdit', + 'AbstractDocument.Content', + 'AbstractDocument.AttributeContext', + 'AbstractDocument', + 'AbstractColorChooserPanel', + 'AbstractCollection', + 'AbstractCellEditor', + 'AbstractButton', + 'AbstractBorder', + 'AbstractAction', + 'AWTPermission', + 'AWTException', + 'AWTEventMulticaster', + 'AWTEventListener', + 'AWTEvent', + 'AWTError', + 'ARG_OUT', + 'ARG_INOUT', + 'ARG_IN' + ), + 4 => array( + 'void', + 'short', + 'long', + 'int', + 'double', + 'char', + 'byte', + 'boolean', + 'float' + ), + 5 => array( + 'toList', + 'subMap', + 'sort', + 'size', + 'reverseEach', + 'reverse', + 'pop', + 'min', + 'max', + 'join', + 'intersect', + 'inject', + 'grep', + 'get', + 'flatten', + 'findIndexOf', + 'findAll', + 'find', + 'eachWithIndex', + 'eachPropertyName', + 'eachProperty', + 'each', + 'count', + 'collect', + 'asSynchronized', + 'asImmutable', + 'allProperties' + ), + 6 => array( + 'tokenize', + 'toURL', + 'toLong', + 'toList', + 'toCharacter', + 'padRight', + 'padLeft', + 'eachMatch', + 'contains', + 'center' + ), + 7 => array( + 'writeLine', + 'write', + 'withWriterAppend', + 'withWriter', + 'withStreams', + 'withStream', + 'withReader', + 'withPrintWriter', + 'withOutputStream', + 'transformLine', + 'transformChar', + 'splitEachLine', + 'getText', + 'filterLine', + 'encodeBase64', + 'eachLines', + 'eachLine', + 'eachFileRecurse', + 'eachFile', + 'eachByte', + 'append' + ), + 8 => array( + 'dump', + 'inspect', + 'invokeMethod', + 'print', + 'println', + 'step', + 'times', + 'upto', + 'use', + 'getText', + 'start', + 'startDaemon', + 'getLastMatcher' + ), + 9 => array( + 'Sql', + 'call', + 'eachRow', + 'execute', + 'executeUpdate', + 'close' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '|', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => true, + 4 => true, + 5 => true, + 6 => true, + 7 => true, + 8 => true, + 9 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;', + 5 => 'color: #663399;', + 6 => 'color: #CC0099;', + 7 => 'color: #FFCC33;', + 8 => 'color: #993399;', + 9 => 'color: #993399; font-weight: bold;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ) + ), + 'URLS' => array( + 1 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 2 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 3 => 'http://www.google.de/search?as_q={FNAME}&num=100&hl=en&as_occt=url&as_sitesearch=java.sun.com%2Fj2se%2F1.5.0%2Fdocs%2Fapi%2F', + 4 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 5 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 6 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 7 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 8 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 9 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '\\$\\{[a-zA-Z_][a-zA-Z0-9_]*\\}' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/haskell.php b/ehcp/net2ftp/plugins/geshi/geshi/haskell.php new file mode 100644 index 0000000..2971d08 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/haskell.php @@ -0,0 +1,195 @@ + 'Haskell', + 'COMMENT_SINGLE' => array( 1 => '--'), + 'COMMENT_MULTI' => array('{-' => '-}'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "\\", + 'KEYWORDS' => array( + /* main haskell keywords */ + 1 => array( + 'as', + 'case', 'of', 'class', 'data', 'default', + 'deriving', 'do', 'forall', 'hiding', 'if', 'then', + 'else', 'import', 'infix', 'infixl', 'infixr', + 'instance', 'let', 'in', 'module', 'newtype', + 'qualified', 'type', 'where' + ), + /* define names of main librarys, so we can link to it */ + 2 => array( + 'Foreign', 'Numeric', 'Prelude' + ), + /* just link to Prelude functions, cause it's the default opened library when starting Haskell */ + 3 => array( + 'not', 'otherwise', 'maybe', + 'either', 'fst', 'snd', 'curry', 'uncurry', + 'compare', + 'max', 'min', 'succ', 'pred', 'toEnum', 'fromEnum', + 'enumFrom', 'enumFromThen', 'enumFromTo', + 'enumFromThenTo', 'minBound', 'maxBound', + 'negate', 'abs', 'signum', + 'fromInteger', 'toRational', 'quot', 'rem', + 'div', 'mod', 'quotRem', 'divMod', 'toInteger', + 'recip', 'fromRational', 'pi', 'exp', + 'log', 'sqrt', 'logBase', 'sin', 'cos', + 'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh', + 'tanh', 'asinh', 'acosh', 'atanh', + 'properFraction', 'truncate', 'round', 'ceiling', + 'floor', 'floatRadix', 'floatDigits', 'floatRange', + 'decodeFloat', 'encodeFloat', 'exponent', + 'significand', 'scaleFloat', 'isNaN', 'isInfinite', + 'isDenomalized', 'isNegativeZero', 'isIEEE', + 'atan2', 'subtract', 'even', 'odd', 'gcd', + 'lcm', 'fromIntegral', 'realToFrac', + 'return', 'fail', 'fmap', + 'mapM', 'mapM_', 'sequence', 'sequence_', + 'id', 'const','flip', + 'until', 'asTypeOf', 'error', 'undefined', + 'seq','map','filter', 'head', + 'last', 'tail', 'init', 'null', 'length', + 'reverse', 'foldl', 'foldl1', 'foldr', + 'foldr1', 'and', 'or', 'any', 'all', 'sum', + 'product', 'concat', 'concatMap', 'maximum', + 'minimum', 'scanl', 'scanl1', 'scanr', 'scanr1', + 'iterate', 'repeat', 'cycle', 'take', 'drop', + 'splitAt', 'teakWhile', 'dropWhile', 'span', + 'break', 'elem', 'notElem', 'lookup', 'zip', + 'zip3', 'zipWith', 'zipWith3', 'unzip', 'unzip3', + 'unzip', 'unzip3', 'lines', 'words', 'unlines', + 'unwords', 'showPrec', 'show', 'showList', + 'shows', 'showChar', 'showString', 'showParen', + 'readsPrec', 'readList', 'reads', 'readParen', + 'read', 'lex', 'putChar', 'putStr', 'putStrLn', + 'print', 'getChar', 'getLine', 'getContents', + 'interact', 'readFile', 'writeFile', 'appendFile', + 'readIO', 'readLn', 'ioError', 'userError', 'catch' + ), + /* here Prelude Types */ + 4 => array ( + 'Bool', 'Maybe', 'Either', 'Ord', 'Ordering', + 'Char', 'String', 'Eq', 'Enum', 'Bounded', + 'Int', 'Integer', 'Float', 'Double', 'Rational', + 'Num', 'Real', 'Integral', 'Fractional', + 'Floating', 'RealFrac', 'RealFloat', 'Monad', + 'Functor', 'Show', 'ShowS', 'Read', 'ReadS', + 'IO' + ), + /* finally Prelude Exceptions */ + 5 => array ( + 'IOError', 'IOException' + ) + ), + /* highlighting symbols is really important in Haskell */ + 'SYMBOLS' => array( + '|', '->', '<-', '@', '!', '::', '_', '~', '=', + '&&', '||', '==', '/=', '<', '<=', '>', + '>=','+', '-', '*','/', '**', '^', '^^', + '>>=', '>>', '=<<', '$', '.', '$!', + '++', '!!' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, /* functions name are case seinsitive */ + 3 => true, /* types name too */ + 4 => true, /* finally exceptions too */ + 5 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;', /* nice blue */ + 2 => 'color: #06c; font-weight: bold;', /* blue as well */ + 3 => 'font-weight: bold;', /* make the preduled functions bold */ + 4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */ + 5 => 'color: maroon;' + ), + 'COMMENTS' => array( + 1 => 'color: #5d478b; font-style: italic;', + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purpHle */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: green;' + ), + 'STRINGS' => array( + 0 => 'background-color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: red;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66; font-weight: bold;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + /* some of keywords are Prelude functions */ + 1 => '', + /* link to the wanted library */ + 2 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/{FNAME}.html', + /* link to Prelude functions */ + 3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}', + /* link to Prelude types */ + 4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}', + /* link to Prelude exceptions */ + 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}', + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/html4strict.php b/ehcp/net2ftp/plugins/geshi/geshi/html4strict.php new file mode 100644 index 0000000..9915647 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/html4strict.php @@ -0,0 +1,255 @@ + 'HTML', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(''), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + ), + 2 => array( + '<a>', '<abbr>', '<acronym>', '<address>', '<applet>', + '<a', '<abbr', '<acronym', '<address', '<applet', + '</a>', '</abbr>', '</acronym>', '</address>', '</applet>', + '</a', '</abbr', '</acronym', '</address', '</applet', + + '<base>', '<basefont>', '<bdo>', '<big>', '<blockquote>', '<body>', '<br>', '<button>', '<b>', + '<base', '<basefont', '<bdo', '<big', '<blockquote', '<body', '<br', '<button', '<b', + '</base>', '</basefont>', '</bdo>', '</big>', '</blockquote>', '</body>', '</br>', '</button>', '</b>', + '</base', '</basefont', '</bdo', '</big', '</blockquote', '</body', '</br', '</button', '</b', + + '<caption>', '<center>', '<cite>', '<code>', '<colgroup>', '<col>', + '<caption', '<center', '<cite', '<code', '<colgroup', '<col', + '</caption>', '</center>', '</cite>', '</code>', '</colgroup>', '</col>', + '</caption', '</center', '</cite', '</code', '</colgroup', '</col', + + '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', + '<dd', '<del', '<dfn', '<dir', '<div', '<dl', '<dt', + '</dd>', '</del>', '</dfn>', '</dir>', '</div>', '</dl>', '</dt>', + '</dd', '</del', '</dfn', '</dir', '</div', '</dl', '</dt', + + '<em>', + '<em', + '</em>', + '</em', + + '<fieldset>', '<font>', '<form>', '<frame>', '<frameset>', + '<fieldset', '<font', '<form', '<frame', '<frameset', + '</fieldset>', '</font>', '</form>', '</frame>', '</frameset>', + '</fieldset', '</font', '</form', '</frame', '</frameset', + + '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<head>', '<hr>', '<html>', + '<h1', '<h2', '<h3', '<h4', '<h5', '<h6', '<head', '<hr', '<html', + '</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>', '</head>', '</hr>', '</html>', + '</h1', '</h2', '</h3', '</h4', '</h5', '</h6', '</head', '</hr', '</html', + + '<iframe>', '<ilayer>', '<img>', '<input>', '<ins>', '<isindex>', '<i>', + '<iframe', '<ilayer', '<img', '<input', '<ins', '<isindex', '<i', + '</iframe>', '</ilayer>', '</img>', '</input>', '</ins>', '</isindex>', '</i>', + '</iframe', '</ilayer', '</img', '</input', '</ins', '</isindex', '</i', + + '<kbd>', + '<kbd', + '&t;/kbd>', + '</kbd', + + '<label>', '<legend>', '<link>', '<li>', + '<label', '<legend', '<link', '<li', + '</label>', '</legend>', '</link>', '</li>', + '</label', '</legend', '</link', '</li', + + '<map>', '<meta>', + '<map', '<meta', + '</map>', '</meta>', + '</map', '</meta', + + '<noframes>', '<noscript>', + '<noframes', '<noscript', + '</noframes>', '</noscript>', + '</noframes', '</noscript', + + '<object>', '<ol>', '<optgroup>', '<option>', + '<object', '<ol', '<optgroup', '<option', + '</object>', '</ol>', '</optgroup>', '</option>', + '</object', '</ol', '</optgroup', '</option', + + '<param>', '<pre>', '<p>', + '<param', '<pre', '<p', + '</param>', '</pre>', '</p>', + '</param', '</pre', '</p', + + '<q>', + '<q', + '</q>', + '</q', + + '<samp>', '<script>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<style>', '<sub>', '<sup>', '<s>', + '<samp', '<script', '<select', '<small', '<span', '<strike', '<strong', '<style', '<sub', '<sup', '<s', + '</samp>', '</script>', '</select>', '</small>', '</span>', '</strike>', '</strong>', '</style>', '</sub>', '</sup>', '</s>', + '</samp', '</script', '</select', '</small', '</span', '</strike', '</strong', '</style', '</sub', '</sup', '</s', + + '<table>', '<tbody>', '<td>', '<textarea>', '<text>', '<tfoot>', '<thead>', '<th>', '<title>', '<tr>', '<tt>', + '<table', '<tbody', '<td', '<textarea', '<text', '<tfoot', '<tfoot', '<thead', '<th', '<title', '<tr', '<tt', + '</table>', '</tbody>', '</td>', '</textarea>', '</text>', '</tfoot>', '</thead', '</tfoot', '</th>', '</title>', '</tr>', '</tt>', + '</table', '</tbody', '</td', '</textarea', '</text', '</tfoot', '</tfoot', '</thead', '</th', '</title', '</tr', '</tt', + + '<ul>', '<u>', + '<ul', '<u', + '</ul>', '</ul>', + '</ul', '</u', + + '<var>', + '<var', + '</var>', + '</var', + + '>', '<' + ), + 3 => array( + 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', + 'background', 'bgcolor', 'border', + 'cellpadding', 'cellspacing', 'char', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', + 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', + 'enctype', + 'face', 'for', 'frame', 'frameborder', + 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', + 'id', 'ismap', + 'label', 'lang', 'language', 'link', 'longdesc', + 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', + 'name', 'nohref', 'noresize', 'noshade', 'nowrap', + 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload', + 'profile', 'prompt', + 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', + 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', + 'tabindex', 'target', 'text', 'title', 'type', + 'usemap', + 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace', + 'width' + ) + ), + 'SYMBOLS' => array( + '/', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #ddbb00;', + 2 => 'color: #009900;' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => 'http://december.com/html/4/element/{FNAME}.html', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '&' => ';' + ), + 2 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false, + 2 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/idl.php b/ehcp/net2ftp/plugins/geshi/geshi/idl.php new file mode 100644 index 0000000..fd6829b --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/idl.php @@ -0,0 +1,119 @@ + 'Uno Idl', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'published', 'get', 'set', 'service', 'singleton', 'type', 'module', 'interface', 'struct', + 'const', 'constants', 'exception', 'enum', 'raises', 'typedef' + ), + 2 => array( + 'bound', 'maybeambiguous', 'maybedefault', 'maybevoid', 'oneway', 'optional', + 'readonly', 'in', 'out', 'inout', 'attribute', 'transient', 'removable' + ), + 3 => array( + 'True', 'False', 'TRUE', 'FALSE' + ), + 4 => array( + 'string', 'long', 'byte', 'hyper', 'boolean', 'any', 'char', 'double', 'long', + 'void', 'sequence', 'unsigned', '...' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990078; font-weight: bold', + 2 => 'color: #36dd1c;', + 3 => 'color: #990078; font-weight: bold', + 4 => 'color: #0000ec;' + ), + 'COMMENTS' => array( + 1 => 'color: #3f7f5f;', + 2 => 'color: #808080;', + 'MULTI' => 'color: #4080ff; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #808080;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/ini.php b/ehcp/net2ftp/plugins/geshi/geshi/ini.php new file mode 100644 index 0000000..b7de9af --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/ini.php @@ -0,0 +1,123 @@ + 'INI', + 'COMMENT_SINGLE' => array(0 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + '[', ']', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 0 => 'color: #666666; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #933;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #000066; font-weight:bold;', + 1 => 'color: #000099;', + 2 => 'color: #660066;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\[.+\]', + 1 => array( + GESHI_SEARCH => '([a-zA-Z0-9_]+\s*)=(.+)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '=\\2' + ), + 2 => array( + // Evil hackery to get around GeSHi bug: <>" and ; are added so s can be matched + // Explicit match on variable names because if a comment is before the first < of the span + // gets chewed up... + GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.+)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1=', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/inno.php b/ehcp/net2ftp/plugins/geshi/geshi/inno.php new file mode 100644 index 0000000..3b8fc92 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/inno.php @@ -0,0 +1,213 @@ + 'Inno', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array('Setup','Types','Components','Tasks','Dirs','Files','Icons','INI','InstallDelete','Languages','Messages', + 'CustomMessage','LangOptions','Registry','RUN','UninstallDelete','UninstallRun' + ,'app','win','sys','syswow64','src','sd','pf','pf32','pf64','cf','cf32','cf64','tmp','fonts','dao', + 'group','localappdata','sendto','userappdata','commonappdata','userdesktop','commondesktop','userdocs', + 'commondocs','userfavorites','commonfavorites','userprograms','commonprograms','userstartmenu', + 'commonstartmenu','userstartup','commonstartup','usertemplates','commontemplates' + ), + 2 => array( + 'nil', 'false', 'true', 'var', 'type', 'const','And', 'Array', 'As', 'Begin', 'Case', 'Class', 'Constructor', 'Destructor', 'Div', 'Do', 'DownTo', 'Else', + 'End', 'Except', 'File', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Interface', + 'Is', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Packed', 'Procedure', 'Property', 'Raise', 'Record', + 'Repeat', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Unit', 'Until', 'Uses', 'While', 'With', 'Xor', + + 'HKCC','HKCR','HKCU','HKLM','HKU','alwaysoverwrite','alwaysskipifsameorolder','append', + 'binary','classic','closeonexit','comparetimestamp','confirmoverwrite', + 'createkeyifdoesntexist','createonlyiffileexists','createvalueifdoesntexist', + 'deleteafterinstall','deletekey','deletevalue','dirifempty','dontcloseonexit', + 'dontcopy','dontcreatekey','disablenouninstallwarning','dword','exclusive','expandsz', + 'external','files','filesandordirs','fixed','fontisnttruetype','ignoreversion','iscustom','isreadme', + 'modern','multisz','new','noerror','none','normal','nowait','onlyifdestfileexists', + 'onlyifdoesntexist','onlyifnewer','overwrite','overwritereadonly','postinstall', + 'preservestringtype','promptifolder','regserver','regtypelib','restart','restartreplace', + 'runhidden','runmaximized','runminimized','sharedfile','shellexec','showcheckbox', + 'skipifnotsilent','skipifsilent','silent','skipifdoesntexist', + 'skipifsourcedoesntexist','sortfilesbyextension','unchecked','uninsalwaysuninstall', + 'uninsclearvalue','uninsdeleteentry','uninsdeletekey','uninsdeletekeyifempty', + 'uninsdeletesection','uninsdeletesectionifempty','uninsdeletevalue', + 'uninsneveruninstall','useapppaths','verysilent','waituntilidle' + + + ), + 3 => array( + 'Abs', 'Addr', 'AnsiCompareStr', 'AnsiCompareText', 'AnsiContainsStr', 'AnsiEndsStr', 'AnsiIndexStr', 'AnsiLeftStr', + 'AnsiLowerCase', 'AnsiMatchStr', 'AnsiMidStr', 'AnsiPos', 'AnsiReplaceStr', 'AnsiReverseString', 'AnsiRightStr', + 'AnsiStartsStr', 'AnsiUpperCase', 'ArcCos', 'ArcSin', 'ArcTan', 'Assigned', 'BeginThread', 'Bounds', 'CelsiusToFahrenheit', + 'ChangeFileExt', 'Chr', 'CompareStr', 'CompareText', 'Concat', 'Convert', 'Copy', 'Cos', 'CreateDir', 'CurrToStr', + 'CurrToStrF', 'Date', 'DateTimeToFileDate', 'DateTimeToStr', 'DateToStr', 'DayOfTheMonth', 'DayOfTheWeek', 'DayOfTheYear', + 'DayOfWeek', 'DaysBetween', 'DaysInAMonth', 'DaysInAYear', 'DaySpan', 'DegToRad', 'DeleteFile', 'DiskFree', 'DiskSize', + 'DupeString', 'EncodeDate', 'EncodeDateTime', 'EncodeTime', 'EndOfADay', 'EndOfAMonth', 'Eof', 'Eoln', 'Exp', 'ExtractFileDir', + 'ExtractFileDrive', 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', 'FahrenheitToCelsius', 'FileAge', + 'FileDateToDateTime', 'FileExists', 'FilePos', 'FileSearch', 'FileSetDate', 'FileSize', 'FindClose', 'FindCmdLineSwitch', + 'FindFirst', 'FindNext', 'FloatToStr', 'FloatToStrF', 'Format', 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'Frac', + 'GetCurrentDir', 'GetLastError', 'GetMem', 'High', 'IncDay', 'IncMinute', 'IncMonth', 'IncYear', 'InputBox', + 'InputQuery', 'Int', 'IntToHex', 'IntToStr', 'IOResult', 'IsInfinite', 'IsLeapYear', 'IsMultiThread', 'IsNaN', + 'LastDelimiter', 'Length', 'Ln', 'Lo', 'Log10', 'Low', 'LowerCase', 'Max', 'Mean', 'MessageDlg', 'MessageDlgPos', + 'MonthOfTheYear', 'Now', 'Odd', 'Ord', 'ParamCount', 'ParamStr', 'Pi', 'Point', 'PointsEqual', 'Pos', 'Pred', + 'Printer', 'PromptForFileName', 'PtInRect', 'RadToDeg', 'Random', 'RandomRange', 'RecodeDate', 'RecodeTime', 'Rect', + 'RemoveDir', 'RenameFile', 'Round', 'SeekEof', 'SeekEoln', 'SelectDirectory', 'SetCurrentDir', 'Sin', 'SizeOf', + 'Slice', 'Sqr', 'Sqrt', 'StringOfChar', 'StringReplace', 'StringToWideChar', 'StrToCurr', 'StrToDate', 'StrToDateTime', + 'StrToFloat', 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', 'StuffString', 'Succ', 'Sum', 'Tan', + 'Time', 'TimeToStr', 'Tomorrow', 'Trunc', 'UpCase', 'UpperCase', 'VarType', 'WideCharToString', 'WrapText', 'Yesterday', + 'Append', 'AppendStr', 'Assign', 'AssignFile', 'AssignPrn', 'Beep', 'BlockRead', 'BlockWrite', 'Break', + 'ChDir', 'Close', 'CloseFile', 'Continue', 'DateTimeToString', 'Dec', 'DecodeDate', 'DecodeDateTime', + 'DecodeTime', 'Delete', 'Dispose', 'EndThread', 'Erase', 'Exclude', 'Exit', 'FillChar', 'Flush', 'FreeAndNil', + 'FreeMem', 'GetDir', 'GetLocaleFormatSettings', 'Halt', 'Inc', 'Include', 'Insert', 'MkDir', 'Move', 'New', + 'ProcessPath', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', 'Rename', 'ReplaceDate', 'ReplaceTime', + 'Reset', 'ReWrite', 'RmDir', 'RunError', 'Seek', 'SetLength', 'SetString', 'ShowMessage', 'ShowMessageFmt', + 'ShowMessagePos', 'Str', 'Truncate', 'Val', 'Write', 'WriteLn', + + 'AdminPrivilegesRequired','AfterInstall','AllowCancelDuringInstall','AllowNoIcons','AllowRootDirectory','AllowUNCPath','AlwaysRestart','AlwaysShowComponentsList','AlwaysShowDirOnReadyPage','AlwaysShowGroupOnReadyPage ','AlwaysUsePersonalGroup','AppComments','AppContact','AppCopyright','AppendDefaultDirName', + 'AppendDefaultGroupName','AppId','AppModifyPath','AppMutex','AppName','AppPublisher', + 'AppPublisherURL','AppReadmeFile','AppSupportURL','AppUpdatesURL','AppVerName','AppVersion', + 'Attribs','BackColor','BackColor2','BackColorDirection','BackSolid','BeforeInstall', + 'ChangesAssociations','ChangesEnvironment','Check','CodeFile','Comment','Components','Compression','CopyMode', + 'CreateAppDir','CreateUninstallRegKey','DefaultDirName','DefaultGroupName', + 'DefaultUserInfoName','DefaultUserInfoOrg','DefaultUserInfoSerial', + 'Description','DestDir','DestName','DirExistsWarning', + 'DisableDirPage','DisableFinishedPage', + 'DisableProgramGroupPage','DisableReadyMemo','DisableReadyPage', + 'DisableStartupPrompt','DiskClusterSize','DiskSliceSize','DiskSpaceMBLabel', + 'DiskSpanning','DontMergeDuplicateFiles','EnableDirDoesntExistWarning','Encryption', + 'Excludes','ExtraDiskSpaceRequired','Filename','Flags','FlatComponentsList','FontInstall', + 'GroupDescription','HotKey','IconFilename','IconIndex','InfoAfterFile','InfoBeforeFile', + 'InternalCompressLevel','Key','LanguageDetectionMethod','Languages', + 'LicenseFile','MergeDuplicateFiles','MessagesFile','MinVersion','Name', + 'OnlyBelowVersion','OutputBaseFilename','OutputManifestFile','OutputDir', + 'Parameters','Password','Permissions','PrivilegesRequired','ReserveBytes', + 'RestartIfNeededByRun','Root','RunOnceId','Section','SetupIconFile', + 'ShowComponentSizes','ShowLanguageDialog','ShowTasksTreeLines','SlicesPerDisk', + 'SolidCompression','Source','SourceDir','StatusMsg','Subkey','Tasks', + 'TimeStampRounding','TimeStampsInUTC','TouchDate','TouchTime','Type','Types', + 'UninstallDisplayIcon','UninstallDisplayName','UninstallFilesDir','UninstallIconFile', + 'UninstallLogMode','UninstallRestartComputer','UninstallStyle','Uninstallable', + 'UpdateUninstallLogAppName','UsePreviousAppDir','UsePreviousGroup', + 'UsePreviousTasks','UsePreviousSetupType','UsePreviousUserInfo', + 'UserInfoPage','UseSetupLdr','ValueData','ValueName','ValueType', + 'VersionInfoVersion','VersionInfoCompany','VersionInfoDescription','VersionInfoTextVersion', + 'WindowResizable','WindowShowCaption','WindowStartMaximized', + 'WindowVisible','WizardImageBackColor','WizardImageFile','WizardImageStretch','WizardSmallImageBackColor','WizardSmallImageFile','WizardStyle','WorkingDir' + + + ), + 4 => array( + 'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'Cardinal', 'Char', 'Comp', 'Currency', 'Double', 'Extended', + 'Int64', 'Integer', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PChar', 'PCurrency', 'PDateTime', + 'PExtended', 'PInt64', 'Pointer', 'PShortString', 'PString', 'PVariant', 'PWideChar', 'PWideString', + 'Real', 'Real48', 'ShortInt', 'ShortString', 'Single', 'SmallInt', 'String', 'TBits', 'TConvType', 'TDateTime', + 'Text', 'TextFile', 'TFloatFormat', 'TFormatSettings', 'TList', 'TObject', 'TOpenDialog', 'TPoint', + 'TPrintDialog', 'TRect', 'TReplaceFlags', 'TSaveDialog', 'TSearchRec', 'TStringList', 'TSysCharSet', + 'TThreadFunc', 'Variant', 'WideChar', 'WideString', 'Word' + ), + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '@', '%', '&', '*', '|', '/', '<', '>' + ), + + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;',/*bold Black*/ + 2 => 'color: #000000;font-style: italic;',/*Black*/ + 3 => 'color: #0000FF;',/*blue*/ + 4 => 'color: #CC0000;'/*red*/ + ), + 'COMMENTS' => array( + 1 => 'color: #33FF00; font-style: italic;', + 'MULTI' => 'color: #33FF00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #000000; font-weight: bold;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/io.php b/ehcp/net2ftp/plugins/geshi/geshi/io.php new file mode 100644 index 0000000..97c1c06 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/io.php @@ -0,0 +1,139 @@ + 'Io', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'and', 'break', 'else', 'elseif', 'exit', 'for', 'foreach', 'if', 'ifFalse', 'ifNil', + 'ifTrue', 'or', 'pass', 'raise', 'return', 'then', 'try', 'wait', 'while', 'yield' + ), + 2 => array( + 'activate', 'activeCoroCount', 'asString', 'block', 'catch', 'clone', 'collectGarbage', + 'compileString', 'continue', 'do', 'doFile', 'doMessage', 'doString', 'forward', + 'getSlot', 'getenv', 'hasSlot', 'isActive', 'isNil', 'isResumable', 'list', 'message', + 'method', 'parent', 'pause', 'perform', 'performWithArgList', 'print', 'proto', + 'raiseResumable', 'removeSlot', 'resend', 'resume', 'schedulerSleepSeconds', 'self', + 'sender', 'setSchedulerSleepSeconds', 'setSlot', 'shallowCopy', 'slotNames', 'super', + 'system', 'thisBlock', 'thisContext', 'thisMessage', 'type', 'uniqueId', 'updateSlot', + 'write' + ), + 3 => array( + 'Array', 'AudioDevice', 'AudioMixer', 'Block', 'Box', 'Buffer', 'CFunction', 'CGI', + 'Color', 'Curses', 'DBM', 'DNSResolver', 'DOConnection', 'DOProxy', 'DOServer', + 'Date', 'Directory', 'Duration', 'DynLib', 'Error', 'Exception', 'FFT', 'File', + 'Fnmatch', 'Font', 'Future', 'GL', 'GLE', 'GLScissor', 'GLU', 'GLUCylinder', + 'GLUQuadric', 'GLUSphere', 'GLUT', 'Host', 'Image', 'Importer', 'LinkList', 'List', + 'Lobby', 'Locals', 'MD5', 'MP3Decoder', 'MP3Encoder', 'Map', 'Message', 'Movie', + 'NULL', 'Nil', 'Nop', 'Notifiction', 'Number', 'Object', 'OpenGL', 'Point', 'Protos', + 'Regex', 'SGMLTag', 'SQLite', 'Server', 'ShowMessage', 'SleepyCat', 'SleepyCatCursor', + 'Socket', 'SocketManager', 'Sound', 'Soup', 'Store', 'String', 'Tree', 'UDPSender', + 'UDPReceiver', 'URL', 'User', 'Warning', 'WeakLink' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/java.php b/ehcp/net2ftp/plugins/geshi/geshi/java.php new file mode 100644 index 0000000..4c5689d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/java.php @@ -0,0 +1,1388 @@ + 'Java', + 'COMMENT_SINGLE' => array(1 => '//', 2 => 'import'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'for', 'foreach', 'if', 'else', 'while', 'do', + 'switch', 'case' + ), + 2 => array( + 'null', 'return', 'false', 'final', 'true', 'public', + 'private', 'protected', 'extends', 'break', 'class', + 'new', 'try', 'catch', 'throws', 'finally', 'implements', + 'interface', 'throw', 'native', 'synchronized', 'this', + 'abstract', 'transient', 'instanceof', 'assert', 'continue', + 'default', 'enum', 'package', 'static', 'strictfp', 'super', + 'volatile', 'const', 'goto' + ), + 3 => array( + 'AbstractAction', 'AbstractBorder', 'AbstractButton', 'AbstractCellEditor', + 'AbstractCollection', 'AbstractColorChooserPanel', 'AbstractDocument', + 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', + 'AbstractDocument.ElementEdit', 'AbstractLayoutCache', + 'AbstractLayoutCache.NodeDimensions', 'AbstractList', 'AbstractListModel', + 'AbstractMap', 'AbstractMethodError', 'AbstractSequentialList', + 'AbstractSet', 'AbstractTableModel', 'AbstractUndoableEdit', 'AbstractWriter', + 'AccessControlContext', 'AccessControlException', 'AccessController', + 'AccessException', 'Accessible', 'AccessibleAction', 'AccessibleBundle', + 'AccessibleComponent', 'AccessibleContext', 'AccessibleHyperlink', + 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleObject', + 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', + 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', + 'AccessibleStateSet', 'AccessibleTable', 'AccessibleTableModelChange', + 'AccessibleText', 'AccessibleValue', 'Acl', 'AclEntry', 'AclNotFoundException', + 'Action', 'ActionEvent', 'ActionListener', 'ActionMap', 'ActionMapUIResource', + 'Activatable', 'ActivateFailedException', 'ActivationDesc', + 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', + 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationID', + 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', + 'Activator', 'ActiveEvent', 'Adjustable', 'AdjustmentEvent', 'AdjustmentListener', + 'Adler32', 'AffineTransform', 'AffineTransformOp', 'AlgorithmParameterGenerator', + 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParameterSpec', + 'AlgorithmParametersSpi', 'AllPermission', 'AlphaComposite', 'AlreadyBound', + 'AlreadyBoundException', 'AlreadyBoundHelper', 'AlreadyBoundHolder', + 'AncestorEvent', 'AncestorListener', 'Annotation', 'Any', 'AnyHolder', + 'AnySeqHelper', 'AnySeqHolder', 'Applet', 'AppletContext', 'AppletInitializer', + 'AppletStub', 'ApplicationException', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', + 'Area', 'AreaAveragingScaleFilter', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', + 'ArithmeticException', 'Array', 'ArrayIndexOutOfBoundsException', + 'ArrayList', 'Arrays', 'ArrayStoreException', 'AsyncBoxView', + 'Attribute', 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', + 'AttributedString', 'AttributeInUseException', 'AttributeList', + 'AttributeModificationException', 'Attributes', 'Attributes.Name', + 'AttributeSet', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', + 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', + 'AudioClip', 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFileReader', + 'AudioFileWriter', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', + 'AudioPermission', 'AudioSystem', 'AuthenticationException', + 'AuthenticationNotSupportedException', 'Authenticator', 'Autoscroll', + 'AWTError', 'AWTEvent', 'AWTEventListener', 'AWTEventMulticaster', + 'AWTException', 'AWTPermission', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', + 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_TYPECODE', + 'BadKind', 'BadLocationException', 'BandCombineOp', 'BandedSampleModel','BasicArrowButton', + 'BasicAttribute', 'BasicAttributes', 'BasicBorders', 'BasicBorders.ButtonBorder', + 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', + 'BasicBorders.RadioButtonBorder', 'BasicBorders.SplitPaneBorder', + 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', + 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', + 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', + 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', + 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', + 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', + 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', + 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', + 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI', + 'BasicPermission', 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', + 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', + 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', + 'BasicSliderUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicStroke', + 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', + 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', + 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', + 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', + 'BatchUpdateException', 'BeanContext', 'BeanContextChild', + 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', + 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', + 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', + 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', + 'BeanContextServiceRevokedListener', 'BeanContextServices', + 'BeanContextServicesListener', 'BeanContextServicesSupport', + 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', + 'BeanContextSupport.BCSIterator', 'BeanDescriptor', 'BeanInfo', 'Beans', + 'BevelBorder', 'BigDecimal', 'BigInteger', 'BinaryRefAddr', 'BindException', + 'Binding', 'BindingHelper', 'BindingHolder', 'BindingIterator', + 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', + 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', + 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView', 'Book', 'Boolean', + 'BooleanControl', 'BooleanControl.Type', 'BooleanHolder', 'BooleanSeqHelper', + 'BooleanSeqHolder', 'Border', 'BorderFactory', 'BorderLayout', 'BorderUIResource', + 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', + 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', + 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', + 'BorderUIResource.TitledBorderUIResource', 'BoundedRangeModel', 'Bounds', + 'Box', 'Box.Filler', 'BoxedValueHelper', 'BoxLayout', 'BoxView', + 'BreakIterator', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', + 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', + 'Button', 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte', 'ByteArrayInputStream', + 'ByteArrayOutputStream', 'ByteHolder', 'ByteLookupTable', 'Calendar', + 'CallableStatement', 'CannotProceed', 'CannotProceedException', 'CannotProceedHelper', + 'CannotProceedHolder', 'CannotRedoException', 'CannotUndoException', + 'Canvas', 'CardLayout', 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor', + 'CellEditorListener', 'CellRendererPane', 'Certificate', 'Certificate.CertificateRep', + 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', + 'CertificateFactory', 'CertificateFactorySpi', 'CertificateNotYetValidException', + 'CertificateParsingException', 'ChangedCharSetException', 'ChangeEvent', + 'ChangeListener', 'Character', 'Character.Subset', 'Character.UnicodeBlock', + 'CharacterIterator', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', + 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'Checkbox', 'CheckboxGroup', + 'CheckboxMenuItem', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', + 'Choice', 'ChoiceFormat', 'Class', 'ClassCastException', 'ClassCircularityError', + 'ClassDesc', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', + 'Clip', 'Clipboard', 'ClipboardOwner', 'Clob', 'Cloneable', 'CloneNotSupportedException', + 'CMMException', 'CodeSource', 'CollationElementIterator', 'CollationKey', + 'Collator', 'Collection', 'Collections', 'Color', 'ColorChooserComponentFactory', + 'ColorChooserUI', 'ColorConvertOp', 'ColorModel', 'ColorSelectionModel', + 'ColorSpace', 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel', 'ComboBoxUI', + 'ComboPopup', 'COMM_FAILURE', 'CommunicationException', 'Comparable', + 'Comparator', 'Compiler', 'CompletionStatus', 'CompletionStatusHelper', + 'Component', 'ComponentAdapter', 'ComponentColorModel', 'ComponentEvent', + 'ComponentInputMap', 'ComponentInputMapUIResource', 'ComponentListener', + 'ComponentOrientation', 'ComponentSampleModel', 'ComponentUI', 'ComponentView', + 'Composite', 'CompositeContext', 'CompositeName','CompositeView', 'CompoundBorder', + 'CompoundControl', 'CompoundControl.Type', 'CompoundEdit', 'CompoundName', + 'ConcurrentModificationException', 'ConfigurationException', 'ConnectException', + 'ConnectException', 'ConnectIOException', 'Connection', 'Constructor', + 'Container', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', + 'ContentHandler', 'ContentHandlerFactory', 'ContentModel', 'Context', 'ContextList', + 'ContextNotEmptyException', 'ContextualRenderedImageFactory', 'Control', + 'Control.Type', 'ControlFactory', 'ControllerEventListener', 'ConvolveOp', + 'CRC32', 'CRL', 'CRLException', 'CropImageFilter', 'CSS', 'CSS.Attribute', + 'CTX_RESTRICT_SCOPE', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', + 'Current', 'CurrentHelper', 'CurrentHolder', 'CurrentOperations', 'Cursor', + 'Customizer', 'CustomMarshal', 'CustomValue', 'DATA_CONVERSION', 'DatabaseMetaData', + 'DataBuffer', 'DataBufferByte', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', + 'DataFlavor', 'DataFormatException', 'DatagramPacket', 'DatagramSocket', + 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'DataInput', 'DataInputStream', + 'DataLine', 'DataLine.Info', 'DataOutput', 'DataOutputStream', 'DataOutputStream', + 'DataTruncation', 'Date', 'DateFormat', 'DateFormatSymbols', 'DebugGraphics', + 'DecimalFormat', 'DecimalFormatSymbols', 'DefaultBoundedRangeModel', + 'DefaultButtonModel', 'DefaultCaret', 'DefaultCellEditor', 'DefaultColorSelectionModel', + 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultEditorKit', + 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', + 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', + 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', + 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction,', + 'DefaultFocusManager', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', + 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', + 'DefaultListSelectionModel', 'DefaultMenuLayout', 'DefaultMetalTheme', + 'DefaultMutableTreeNode', 'DefaultSingleSelectionModel', 'DefaultStyledDocument', + 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', + 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', + 'DefaultTableModel', 'DefaultTextUI', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', + 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'DefinitionKind', 'DefinitionKindHelper', + 'Deflater', 'DeflaterOutputStream', 'Delegate', 'DesignMode', 'DesktopIconUI', + 'DesktopManager', 'DesktopPaneUI', 'DGC', 'Dialog', 'Dictionary', 'DigestException', + 'DigestInputStream', 'DigestOutputStream', 'Dimension', 'Dimension2D', + 'DimensionUIResource', 'DirContext', 'DirectColorModel', 'DirectoryManager', + 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DnDConstants', + 'Document', 'DocumentEvent', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', + 'DocumentListener', 'DocumentParser', 'DomainCombiner', 'DomainManager', + 'DomainManagerOperations', 'Double', 'DoubleHolder', 'DoubleSeqHelper', + 'DoubleSeqHolder', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', + 'DragSource', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', + 'DragSourceEvent', 'DragSourceListener', 'Driver', 'DriverManager', + 'DriverPropertyInfo', 'DropTarget', 'DropTarget.DropTargetAutoScroller', + 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', + 'DropTargetEvent', 'DropTargetListener', 'DSAKey', 'DSAKeyPairGenerator', + 'DSAParameterSpec', 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec', + 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD', 'DTDConstants', 'DynamicImplementation', + 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', + 'DynUnion', 'DynValue', 'EditorKit', 'Element', 'ElementIterator', 'Ellipse2D', + 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder', 'EmptyStackException', + 'EncodedKeySpec', 'Entity', 'EnumControl', 'EnumControl.Type','Enumeration', + 'Environment', 'EOFException', 'Error', 'EtchedBorder', 'Event', 'EventContext', + 'EventDirContext', 'EventListener', 'EventListenerList', 'EventObject', 'EventQueue', + 'EventSetDescriptor', 'Exception', 'ExceptionInInitializerError', 'ExceptionList', + 'ExpandVetoException', 'ExportException', 'ExtendedRequest', 'ExtendedResponse', + 'Externalizable', 'FeatureDescriptor', 'Field', 'FieldNameHelper', + 'FieldPosition', 'FieldView', 'File', 'FileChooserUI', 'FileDescriptor', + 'FileDialog', 'FileFilter', 'FileFilter', 'FileInputStream', 'FilenameFilter', + 'FileNameMap', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', + 'FileReader', 'FileSystemView', 'FileView', 'FileWriter', 'FilteredImageSource', + 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', + 'FixedHeightLayoutCache', 'FixedHolder', 'FlatteningPathIterator', 'FlavorMap', + 'Float', 'FloatControl', 'FloatControl.Type', 'FloatHolder', 'FloatSeqHelper', + 'FloatSeqHolder', 'FlowLayout', 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter', + 'FocusEvent', 'FocusListener', 'FocusManager', 'Font', 'FontFormatException', + 'FontMetrics', 'FontRenderContext', 'FontUIResource', 'Format', 'FormatConversionProvider', + 'FormView', 'Frame', 'FREE_MEM', 'GapContent', 'GeneralPath', 'GeneralSecurityException', + 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GlyphView', 'GlyphView.GlyphPainter', + 'GradientPaint', 'GraphicAttribute', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', + 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GrayFilter', + 'GregorianCalendar', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'Group', 'Guard', + 'GuardedObject', 'GZIPInputStream', 'GZIPOutputStream', + 'HasControls', + 'HashMap', + 'HashSet', + 'Hashtable', + 'HierarchyBoundsAdapter', + 'HierarchyBoundsListener', + 'HierarchyEvent', + 'HierarchyListener', + 'Highlighter', + 'Highlighter.Highlight', + 'Highlighter.HighlightPainter', + 'HTML', + 'HTML.Attribute', + 'HTML.Tag', + 'HTML.UnknownTag', + 'HTMLDocument', + 'HTMLDocument.Iterator', + 'HTMLEditorKit', + 'HTMLEditorKit.HTMLFactory', + 'HTMLEditorKit.HTMLTextAction', + 'HTMLEditorKit.InsertHTMLTextAction', + 'HTMLEditorKit.LinkController', + 'HTMLEditorKit.Parser', + 'HTMLEditorKit.ParserCallback', + 'HTMLFrameHyperlinkEvent', + 'HTMLWriter', + 'HttpURLConnection', + 'HyperlinkEvent', + 'HyperlinkEvent.EventType', + 'HyperlinkListener', + 'ICC_ColorSpace', + 'ICC_Profile', + 'ICC_ProfileGray', + 'ICC_ProfileRGB', + 'Icon', + 'IconUIResource', + 'IconView', + 'IdentifierHelper', + 'Identity', + 'IdentityScope', + 'IDLEntity', + 'IDLType', + 'IDLTypeHelper', 'IDLTypeOperations', + 'IllegalAccessError', + 'IllegalAccessException', + 'IllegalArgumentException', + 'IllegalComponentStateException', + 'IllegalMonitorStateException', + 'IllegalPathStateException', + 'IllegalStateException', + 'IllegalThreadStateException', + 'Image', + 'ImageConsumer', + 'ImageFilter', + 'ImageGraphicAttribute', + 'ImageIcon', + 'ImageObserver', + 'ImageProducer', + 'ImagingOpException', + 'IMP_LIMIT', + 'IncompatibleClassChangeError', + 'InconsistentTypeCode', + 'IndexColorModel', + 'IndexedPropertyDescriptor', + 'IndexOutOfBoundsException', + 'IndirectionException', + 'InetAddress', + 'Inflater', + 'InflaterInputStream', + 'InheritableThreadLocal', + 'InitialContext', + 'InitialContextFactory', + 'InitialContextFactoryBuilder', + 'InitialDirContext', + 'INITIALIZE', + 'Initializer', + 'InitialLdapContext', + 'InlineView', + 'InputContext', + 'InputEvent', + 'InputMap', + 'InputMapUIResource', + 'InputMethod', + 'InputMethodContext', + 'InputMethodDescriptor', + 'InputMethodEvent', + 'InputMethodHighlight', + 'InputMethodListener', + 'InputMethodRequests', + 'InputStream', + 'InputStream', + 'InputStream', + 'InputStreamReader', + 'InputSubset', + 'InputVerifier', + 'Insets', + 'InsetsUIResource', + 'InstantiationError', + 'InstantiationException', + 'Instrument', + 'InsufficientResourcesException', + 'Integer', + 'INTERNAL', + 'InternalError', 'InternalFrameAdapter', + 'InternalFrameEvent', + 'InternalFrameListener', + 'InternalFrameUI', + 'InterruptedException', + 'InterruptedIOException', + 'InterruptedNamingException', + 'INTF_REPOS', + 'IntHolder', + 'IntrospectionException', + 'Introspector', + 'INV_FLAG', + 'INV_IDENT', + 'INV_OBJREF', + 'INV_POLICY', + 'Invalid', + 'INVALID_TRANSACTION', + 'InvalidAlgorithmParameterException', + 'InvalidAttributeIdentifierException', + 'InvalidAttributesException', + 'InvalidAttributeValueException', + 'InvalidClassException', + 'InvalidDnDOperationException', + 'InvalidKeyException', + 'InvalidKeySpecException', + 'InvalidMidiDataException', + 'InvalidName', + 'InvalidName', + 'InvalidNameException', + 'InvalidNameHelper', + 'InvalidNameHolder', + 'InvalidObjectException', + 'InvalidParameterException', + 'InvalidParameterSpecException', + 'InvalidSearchControlsException', + 'InvalidSearchFilterException', + 'InvalidSeq', + 'InvalidTransactionException', + 'InvalidValue', + 'InvocationEvent', + 'InvocationHandler', + 'InvocationTargetException', + 'InvokeHandler', + 'IOException', + 'IRObject', + 'IRObjectOperations', 'IstringHelper', 'ItemEvent', 'ItemListener', + 'ItemSelectable', 'Iterator', 'JApplet', 'JarEntry', 'JarException', + 'JarFile', 'JarInputStream', 'JarOutputStream', 'JarURLConnection', + 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', + 'JComboBox', + 'JComboBox.KeySelectionManager', + 'JComponent', + 'JDesktopPane', + 'JDialog', + 'JEditorPane', + 'JFileChooser', + 'JFrame', + 'JInternalFrame', + 'JInternalFrame.JDesktopIcon', + 'JLabel', + 'JLayeredPane', + 'JList', + 'JMenu', + 'JMenuBar', + 'JMenuItem', + 'JobAttributes', + 'JobAttributes.DefaultSelectionType', + 'JobAttributes.DestinationType', + 'JobAttributes.DialogType', + 'JobAttributes.MultipleDocumentHandlingType', + 'JobAttributes.SidesType', + 'JOptionPane', + 'JPanel', + 'JPasswordField', + 'JPopupMenu', + 'JPopupMenu.Separator', + 'JProgressBar', + 'JRadioButton', + 'JRadioButtonMenuItem', + 'JRootPane', + 'JScrollBar', + 'JScrollPane', + 'JSeparator', + 'JSlider', + 'JSplitPane', + 'JTabbedPane', + 'JTable', + 'JTableHeader', + 'JTextArea', + 'JTextComponent', + 'JTextComponent.KeyBinding', 'JTextField', + 'JTextPane', + 'JToggleButton', + 'JToggleButton.ToggleButtonModel', + 'JToolBar', + 'JToolBar.Separator', + 'JToolTip', + 'JTree', + 'JTree.DynamicUtilTreeNode', + 'JTree.EmptySelectionModel', + 'JViewport', + 'JWindow', + 'Kernel', + 'Key', + 'KeyAdapter', + 'KeyEvent', + 'KeyException', + 'KeyFactory', + 'KeyFactorySpi', + 'KeyListener', + 'KeyManagementException', + 'Keymap', + 'KeyPair', + 'KeyPairGenerator', + 'KeyPairGeneratorSpi', + 'KeySpec', + 'KeyStore', + 'KeyStoreException', + 'KeyStoreSpi', + 'KeyStroke', + 'Label', + 'LabelUI', + 'LabelView', + 'LastOwnerException', + 'LayeredHighlighter', + 'LayeredHighlighter.LayerPainter', + 'LayoutManager', + 'LayoutManager2', + 'LayoutQueue', + 'LdapContext', + 'LdapReferralException', + 'Lease', + 'LimitExceededException', + 'Line', + 'Line.Info', + 'Line2D', + 'Line2D.Double', + 'Line2D.Float', + 'LineBorder', + 'LineBreakMeasurer', + 'LineEvent', + 'LineEvent.Type', + 'LineListener', + 'LineMetrics', + 'LineNumberInputStream', + 'LineNumberReader', + 'LineUnavailableException', + 'LinkageError', + 'LinkedList', + 'LinkException', + 'LinkLoopException', + 'LinkRef', + 'List', + 'List', + 'ListCellRenderer', + 'ListDataEvent', + 'ListDataListener', + 'ListIterator', + 'ListModel', + 'ListResourceBundle', + 'ListSelectionEvent', + 'ListSelectionListener', + 'ListSelectionModel', + 'ListUI', + 'ListView', + 'LoaderHandler', + 'Locale', + 'LocateRegistry', + 'LogStream', + 'Long', + 'LongHolder', + 'LongLongSeqHelper', + 'LongLongSeqHolder', + 'LongSeqHelper', + 'LongSeqHolder', + 'LookAndFeel', + 'LookupOp', + 'LookupTable', + 'MalformedLinkException', + 'MalformedURLException', + 'Manifest', 'Map', + 'Map.Entry', + 'MARSHAL', + 'MarshalException', + 'MarshalledObject', + 'Math', + 'MatteBorder', + 'MediaTracker', + 'Member', + 'MemoryImageSource', + 'Menu', + 'MenuBar', + 'MenuBarUI', + 'MenuComponent', + 'MenuContainer', + 'MenuDragMouseEvent', + 'MenuDragMouseListener', + 'MenuElement', + 'MenuEvent', + 'MenuItem', + 'MenuItemUI', + 'MenuKeyEvent', + 'MenuKeyListener', + 'MenuListener', + 'MenuSelectionManager', + 'MenuShortcut', + 'MessageDigest', + 'MessageDigestSpi', + 'MessageFormat', + 'MetaEventListener', + 'MetalBorders', + 'MetalBorders.ButtonBorder', + 'MetalBorders.Flush3DBorder', + 'MetalBorders.InternalFrameBorder', + 'MetalBorders.MenuBarBorder', + 'MetalBorders.MenuItemBorder', + 'MetalBorders.OptionDialogBorder', + 'MetalBorders.PaletteBorder', + 'MetalBorders.PopupMenuBorder', + 'MetalBorders.RolloverButtonBorder', + 'MetalBorders.ScrollPaneBorder', + 'MetalBorders.TableHeaderBorder', + 'MetalBorders.TextFieldBorder', + 'MetalBorders.ToggleButtonBorder', + 'MetalBorders.ToolBarBorder', + 'MetalButtonUI', + 'MetalCheckBoxIcon', + 'MetalCheckBoxUI', + 'MetalComboBoxButton', + 'MetalComboBoxEditor', + 'MetalComboBoxEditor.UIResource', + 'MetalComboBoxIcon', + 'MetalComboBoxUI', + 'MetalDesktopIconUI', + 'MetalFileChooserUI', + 'MetalIconFactory', + 'MetalIconFactory.FileIcon16', + 'MetalIconFactory.FolderIcon16', + 'MetalIconFactory.PaletteCloseIcon', + 'MetalIconFactory.TreeControlIcon', + 'MetalIconFactory.TreeFolderIcon', + 'MetalIconFactory.TreeLeafIcon', + 'MetalInternalFrameTitlePane', + 'MetalInternalFrameUI', + 'MetalLabelUI', + 'MetalLookAndFeel', + 'MetalPopupMenuSeparatorUI', + 'MetalProgressBarUI', + 'MetalRadioButtonUI', + 'MetalScrollBarUI', + 'MetalScrollButton', + 'MetalScrollPaneUI', + 'MetalSeparatorUI', + 'MetalSliderUI', + 'MetalSplitPaneUI', + 'MetalTabbedPaneUI', + 'MetalTextFieldUI', + 'MetalTheme', + 'MetalToggleButtonUI', + 'MetalToolBarUI', + 'MetalToolTipUI', + 'MetalTreeUI', + 'MetaMessage', + 'Method', + 'MethodDescriptor', + 'MidiChannel', + 'MidiDevice', + 'MidiDevice.Info', + 'MidiDeviceProvider', + 'MidiEvent', + 'MidiFileFormat', + 'MidiFileReader', + 'MidiFileWriter', + 'MidiMessage', + 'MidiSystem', + 'MidiUnavailableException', + 'MimeTypeParseException', + 'MinimalHTMLWriter', + 'MissingResourceException', + 'Mixer', + 'Mixer.Info', + 'MixerProvider', + 'ModificationItem', + 'Modifier', + 'MouseAdapter', + 'MouseDragGestureRecognizer', + 'MouseEvent', + 'MouseInputAdapter', + 'MouseInputListener', + 'MouseListener', + 'MouseMotionAdapter', + 'MouseMotionListener', + 'MultiButtonUI', + 'MulticastSocket', + 'MultiColorChooserUI', + 'MultiComboBoxUI', + 'MultiDesktopIconUI', + 'MultiDesktopPaneUI', + 'MultiFileChooserUI', + 'MultiInternalFrameUI', + 'MultiLabelUI', 'MultiListUI', + 'MultiLookAndFeel', + 'MultiMenuBarUI', + 'MultiMenuItemUI', + 'MultiOptionPaneUI', + 'MultiPanelUI', + 'MultiPixelPackedSampleModel', + 'MultipleMaster', + 'MultiPopupMenuUI', + 'MultiProgressBarUI', + 'MultiScrollBarUI', + 'MultiScrollPaneUI', + 'MultiSeparatorUI', + 'MultiSliderUI', + 'MultiSplitPaneUI', + 'MultiTabbedPaneUI', + 'MultiTableHeaderUI', + 'MultiTableUI', + 'MultiTextUI', + 'MultiToolBarUI', + 'MultiToolTipUI', + 'MultiTreeUI', + 'MultiViewportUI', + 'MutableAttributeSet', + 'MutableComboBoxModel', + 'MutableTreeNode', + 'Name', + 'NameAlreadyBoundException', + 'NameClassPair', + 'NameComponent', + 'NameComponentHelper', + 'NameComponentHolder', + 'NamedValue', + 'NameHelper', + 'NameHolder', + 'NameNotFoundException', + 'NameParser', + 'NamespaceChangeListener', + 'NameValuePair', + 'NameValuePairHelper', + 'Naming', + 'NamingContext', + 'NamingContextHelper', + 'NamingContextHolder', + 'NamingContextOperations', + 'NamingEnumeration', + 'NamingEvent', + 'NamingException', + 'NamingExceptionEvent', + 'NamingListener', + 'NamingManager', + 'NamingSecurityException', + 'NegativeArraySizeException', + 'NetPermission', + 'NO_IMPLEMENT', + 'NO_MEMORY', + 'NO_PERMISSION', + 'NO_RESOURCES', + 'NO_RESPONSE', + 'NoClassDefFoundError', + 'NoInitialContextException', 'NoninvertibleTransformException', + 'NoPermissionException', + 'NoRouteToHostException', + 'NoSuchAlgorithmException', + 'NoSuchAttributeException', + 'NoSuchElementException', + 'NoSuchFieldError', + 'NoSuchFieldException', + 'NoSuchMethodError', + 'NoSuchMethodException', + 'NoSuchObjectException', + 'NoSuchProviderException', + 'NotActiveException', + 'NotBoundException', + 'NotContextException', + 'NotEmpty', + 'NotEmptyHelper', + 'NotEmptyHolder', + 'NotFound', + 'NotFoundHelper', + 'NotFoundHolder', + 'NotFoundReason', + 'NotFoundReasonHelper', + 'NotFoundReasonHolder', + 'NotOwnerException', + 'NotSerializableException', + 'NullPointerException', + 'Number', + 'NumberFormat', 'NumberFormatException', 'NVList', + 'OBJ_ADAPTER', 'Object', 'OBJECT_NOT_EXIST', 'ObjectChangeListener', + 'ObjectFactory', + 'ObjectFactoryBuilder', + 'ObjectHelper', + 'ObjectHolder', + 'ObjectImpl', 'ObjectImpl', + 'ObjectInput', + 'ObjectInputStream', + 'ObjectInputStream.GetField', + 'ObjectInputValidation', + 'ObjectOutput', + 'ObjectOutputStream', + 'ObjectOutputStream.PutField', + 'ObjectStreamClass', + 'ObjectStreamConstants', + 'ObjectStreamException', + 'ObjectStreamField', + 'ObjectView', + 'ObjID', + 'Observable', + 'Observer', + 'OctetSeqHelper', + 'OctetSeqHolder', + 'OMGVMCID', + 'OpenType', + 'Operation', + 'OperationNotSupportedException', + 'Option', + 'OptionalDataException', + 'OptionPaneUI', + 'ORB', + 'OutOfMemoryError', + 'OutputStream', + 'OutputStreamWriter', + 'OverlayLayout', + 'Owner', + 'Package', + 'PackedColorModel', + 'Pageable', + 'PageAttributes', + 'PageAttributes.ColorType', + 'PageAttributes.MediaType', + 'PageAttributes.OrientationRequestedType', + 'PageAttributes.OriginType', + 'PageAttributes.PrintQualityType', + 'PageFormat', + 'Paint', + 'PaintContext', + 'PaintEvent', + 'Panel', + 'PanelUI', + 'Paper', + 'ParagraphView', + 'ParagraphView', + 'ParameterBlock', + 'ParameterDescriptor', + 'ParseException', + 'ParsePosition', + 'Parser', + 'ParserDelegator', + 'PartialResultException', + 'PasswordAuthentication', + 'PasswordView', + 'Patch', + 'PathIterator', + 'Permission', + 'Permission', + 'PermissionCollection', + 'Permissions', + 'PERSIST_STORE', + 'PhantomReference', + 'PipedInputStream', + 'PipedOutputStream', + 'PipedReader', + 'PipedWriter', + 'PixelGrabber', + 'PixelInterleavedSampleModel', + 'PKCS8EncodedKeySpec', + 'PlainDocument', + 'PlainView', + 'Point', + 'Point2D', + 'Point2D.Double', + 'Point2D.Float', + 'Policy', + 'Policy', + 'PolicyError', + 'PolicyHelper', + 'PolicyHolder', + 'PolicyListHelper', + 'PolicyListHolder', + 'PolicyOperations', 'PolicyTypeHelper', + 'Polygon', + 'PopupMenu', + 'PopupMenuEvent', + 'PopupMenuListener', + 'PopupMenuUI', + 'Port', + 'Port.Info', + 'PortableRemoteObject', + 'PortableRemoteObjectDelegate', + 'Position', + 'Position.Bias', + 'PreparedStatement', + 'Principal', + 'Principal', + 'PrincipalHolder', + 'Printable', + 'PrinterAbortException', + 'PrinterException', + 'PrinterGraphics', + 'PrinterIOException', + 'PrinterJob', + 'PrintGraphics', + 'PrintJob', + 'PrintStream', + 'PrintWriter', + 'PRIVATE_MEMBER', + 'PrivateKey', + 'PrivilegedAction', + 'PrivilegedActionException', + 'PrivilegedExceptionAction', + 'Process', + 'ProfileDataException', + 'ProgressBarUI', + 'ProgressMonitor', + 'ProgressMonitorInputStream', + 'Properties', + 'PropertyChangeEvent', + 'PropertyChangeListener', + 'PropertyChangeSupport', + 'PropertyDescriptor', + 'PropertyEditor', + 'PropertyEditorManager', + 'PropertyEditorSupport', + 'PropertyPermission', + 'PropertyResourceBundle', + 'PropertyVetoException', + 'ProtectionDomain', + 'ProtocolException', + 'Provider', + 'ProviderException', + 'Proxy', + 'PUBLIC_MEMBER', + 'PublicKey', + 'PushbackInputStream', + 'PushbackReader', + 'QuadCurve2D', + 'QuadCurve2D.Double', + 'QuadCurve2D.Float', + 'Random', + 'RandomAccessFile', 'Raster', 'RasterFormatException', 'RasterOp', + 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D', 'Rectangle2D.Double', + 'Rectangle2D.Float', 'RectangularShape', 'Ref', 'RefAddr', 'Reference', + 'Referenceable', 'ReferenceQueue', 'ReferralException', + 'ReflectPermission', 'Registry', 'RegistryHandler', 'RemarshalException', + 'Remote', 'RemoteCall', 'RemoteException', 'RemoteObject', 'RemoteRef', + 'RemoteServer', + 'RemoteStub', + 'RenderableImage', + 'RenderableImageOp', + 'RenderableImageProducer', + 'RenderContext', + 'RenderedImage', + 'RenderedImageFactory', + 'Renderer', + 'RenderingHints', + 'RenderingHints.Key', + 'RepaintManager', + 'ReplicateScaleFilter', + 'Repository', + 'RepositoryIdHelper', + 'Request', + 'RescaleOp', + 'Resolver', + 'ResolveResult', + 'ResourceBundle', + 'ResponseHandler', + 'ResultSet', + 'ResultSetMetaData', + 'ReverbType', + 'RGBImageFilter', + 'RMIClassLoader', + 'RMIClientSocketFactory', + 'RMIFailureHandler', + 'RMISecurityException', + 'RMISecurityManager', + 'RMIServerSocketFactory', + 'RMISocketFactory', + 'Robot', + 'RootPaneContainer', + 'RootPaneUI', + 'RoundRectangle2D', + 'RoundRectangle2D.Double', + 'RoundRectangle2D.Float', + 'RowMapper', + 'RSAKey', + 'RSAKeyGenParameterSpec', + 'RSAPrivateCrtKey', + 'RSAPrivateCrtKeySpec', + 'RSAPrivateKey', + 'RSAPrivateKeySpec', + 'RSAPublicKey', + 'RSAPublicKeySpec', + 'RTFEditorKit', + 'RuleBasedCollator', + 'Runnable', + 'Runtime', + 'RunTime', + 'RuntimeException', + 'RunTimeOperations', + 'RuntimePermission', + 'SampleModel', + 'SchemaViolationException', + 'Scrollable', + 'Scrollbar', + 'ScrollBarUI', + 'ScrollPane', + 'ScrollPaneConstants', + 'ScrollPaneLayout', + 'ScrollPaneLayout.UIResource', + 'ScrollPaneUI', + 'SearchControls', + 'SearchResult', + 'SecureClassLoader', + 'SecureRandom', + 'SecureRandomSpi', + 'Security', + 'SecurityException', + 'SecurityManager', + 'SecurityPermission', + 'Segment', + 'SeparatorUI', + 'Sequence', + 'SequenceInputStream', + 'Sequencer', + 'Sequencer.SyncMode', + 'Serializable', + 'SerializablePermission', + 'ServantObject', + 'ServerCloneException', + 'ServerError', 'ServerException', + 'ServerNotActiveException', + 'ServerRef', + 'ServerRequest', + 'ServerRuntimeException', + 'ServerSocket', + 'ServiceDetail', + 'ServiceDetailHelper', + 'ServiceInformation', + 'ServiceInformationHelper', + 'ServiceInformationHolder', + 'ServiceUnavailableException', + 'Set', + 'SetOverrideType', + 'SetOverrideTypeHelper', + 'Shape', + 'ShapeGraphicAttribute', + 'Short', + 'ShortHolder', + 'ShortLookupTable', + 'ShortMessage', + 'ShortSeqHelper', + 'ShortSeqHolder', + 'Signature', + 'SignatureException', + 'SignatureSpi', + 'SignedObject', + 'Signer', + 'SimpleAttributeSet', + 'SimpleBeanInfo', + 'SimpleDateFormat', + 'SimpleTimeZone', + 'SinglePixelPackedSampleModel', + 'SingleSelectionModel', + 'SizeLimitExceededException', + 'SizeRequirements', + 'SizeSequence', + 'Skeleton', + 'SkeletonMismatchException', + 'SkeletonNotFoundException', + 'SliderUI', + 'Socket', + 'SocketException', + 'SocketImpl', + 'SocketImplFactory', + 'SocketOptions', + 'SocketPermission', + 'SocketSecurityException', + 'SoftBevelBorder', + 'SoftReference', + 'SortedMap', + 'SortedSet', + 'Soundbank', + 'SoundbankReader', + 'SoundbankResource', + 'SourceDataLine', + 'SplitPaneUI', + 'SQLData', + 'SQLException', + 'SQLInput', + 'SQLOutput', 'SQLPermission', + 'SQLWarning', + 'Stack', + 'StackOverflowError', + 'StateEdit', + 'StateEditable', + 'StateFactory', + 'Statement', + 'Streamable', + 'StreamableValue', + 'StreamCorruptedException', + 'StreamTokenizer', + 'StrictMath', + 'String', + 'StringBuffer', + 'StringBufferInputStream', + 'StringCharacterIterator', + 'StringContent', + 'StringHolder', + 'StringIndexOutOfBoundsException', + 'StringReader', + 'StringRefAddr', + 'StringSelection', + 'StringTokenizer', + 'StringValueHelper', + 'StringWriter', + 'Stroke', + 'Struct', + 'StructMember', + 'StructMemberHelper', + 'Stub', + 'StubDelegate', + 'StubNotFoundException', + 'Style', + 'StyleConstants', + 'StyleConstants.CharacterConstants', + 'StyleConstants.ColorConstants', + 'StyleConstants.FontConstants', + 'StyleConstants.ParagraphConstants', + 'StyleContext', + 'StyledDocument', + 'StyledEditorKit', + 'StyledEditorKit.AlignmentAction', + 'StyledEditorKit.BoldAction', + 'StyledEditorKit.FontFamilyAction', + 'StyledEditorKit.FontSizeAction', + 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.ItalicAction', + 'StyledEditorKit.StyledTextAction', + 'StyledEditorKit.UnderlineAction', + 'StyleSheet', + 'StyleSheet.BoxPainter', + 'StyleSheet.ListPainter', + 'SwingConstants', + 'SwingPropertyChangeSupport', + 'SwingUtilities', + 'SyncFailedException', + 'Synthesizer', + 'SysexMessage', + 'System', + 'SystemColor', 'SystemException', + 'SystemFlavorMap', + 'TabableView', + 'TabbedPaneUI', + 'TabExpander', + 'TableCellEditor', + 'TableCellRenderer', + 'TableColumn', + 'TableColumnModel', + 'TableColumnModelEvent', + 'TableColumnModelListener', + 'TableHeaderUI', + 'TableModel', + 'TableModelEvent', + 'TableModelListener', + 'TableUI', + 'TableView', + 'TabSet', + 'TabStop', + 'TagElement', + 'TargetDataLine', + 'TCKind', + 'TextAction', + 'TextArea', + 'TextAttribute', + 'TextComponent', + 'TextEvent', + 'TextField', + 'TextHitInfo', + 'TextLayout', + 'TextLayout.CaretPolicy', + 'TextListener', + 'TextMeasurer', + 'TextUI', + 'TexturePaint', + 'Thread', + 'ThreadDeath', + 'ThreadGroup', + 'ThreadLocal', + 'Throwable', + 'Tie', + 'TileObserver', + 'Time', + 'TimeLimitExceededException', + 'Timer', + 'Timer', + 'TimerTask', + 'Timestamp', + 'TimeZone', + 'TitledBorder', + 'ToolBarUI', + 'Toolkit', + 'ToolTipManager', + 'ToolTipUI', + 'TooManyListenersException', + 'Track', + 'TRANSACTION_REQUIRED', + 'TRANSACTION_ROLLEDBACK', + 'TransactionRequiredException', + 'TransactionRolledbackException', + 'Transferable', + 'TransformAttribute', + 'TRANSIENT', + 'Transmitter', + 'Transparency', + 'TreeCellEditor', + 'TreeCellRenderer', + 'TreeExpansionEvent', + 'TreeExpansionListener', + 'TreeMap', + 'TreeModel', + 'TreeModelEvent', + 'TreeModelListener', + 'TreeNode', + 'TreePath', + 'TreeSelectionEvent', + 'TreeSelectionListener', + 'TreeSelectionModel', + 'TreeSet', + 'TreeUI', + 'TreeWillExpandListener', + 'TypeCode', + 'TypeCodeHolder', + 'TypeMismatch', + 'Types', + 'UID', + 'UIDefaults', + 'UIDefaults.ActiveValue', + 'UIDefaults.LazyInputMap', + 'UIDefaults.LazyValue', + 'UIDefaults.ProxyLazyValue', 'UIManager', + 'UIManager.LookAndFeelInfo', + 'UIResource', + 'ULongLongSeqHelper', + 'ULongLongSeqHolder', + 'ULongSeqHelper', + 'ULongSeqHolder', + 'UndeclaredThrowableException', + 'UndoableEdit', + 'UndoableEditEvent', + 'UndoableEditListener', + 'UndoableEditSupport', + 'UndoManager', + 'UnexpectedException', + 'UnicastRemoteObject', + 'UnionMember', + 'UnionMemberHelper', + 'UNKNOWN', + 'UnknownError', + 'UnknownException', + 'UnknownGroupException', + 'UnknownHostException', + 'UnknownHostException', + 'UnknownObjectException', + 'UnknownServiceException', + 'UnknownUserException', + 'UnmarshalException', + 'UnrecoverableKeyException', + 'Unreferenced', + 'UnresolvedPermission', + 'UnsatisfiedLinkError', + 'UnsolicitedNotification', + 'UnsolicitedNotificationEvent', + 'UnsolicitedNotificationListener', + 'UNSUPPORTED_POLICY', + 'UNSUPPORTED_POLICY_VALUE', + 'UnsupportedAudioFileException', + 'UnsupportedClassVersionError', + 'UnsupportedEncodingException', + 'UnsupportedFlavorException', + 'UnsupportedLookAndFeelException', + 'UnsupportedOperationException', + 'URL', + 'URLClassLoader', + 'URLConnection', + 'URLDecoder', + 'URLEncoder', + 'URLStreamHandler', + 'URLStreamHandlerFactory', + 'UserException', + 'UShortSeqHelper', + 'UShortSeqHolder', + 'UTFDataFormatException', + 'Util', + 'UtilDelegate', + 'Utilities', + 'ValueBase', + 'ValueBaseHelper', + 'ValueBaseHolder', + 'ValueFactory', + 'ValueHandler', + 'ValueMember', + 'ValueMemberHelper', + 'VariableHeightLayoutCache', + 'Vector', + 'VerifyError', + 'VersionSpecHelper', + 'VetoableChangeListener', + 'VetoableChangeSupport', + 'View', + 'ViewFactory', + 'ViewportLayout', + 'ViewportUI', + 'VirtualMachineError', + 'Visibility', + 'VisibilityHelper', + 'VM_ABSTRACT', + 'VM_CUSTOM', + 'VM_NONE', + 'VM_TRUNCATABLE', + 'VMID', + 'VoiceStatus', + 'Void', + 'WCharSeqHelper', + 'WCharSeqHolder', + 'WeakHashMap', + 'WeakReference', + 'Window', + 'WindowAdapter', + 'WindowConstants', + 'WindowEvent', 'WindowListener', + 'WrappedPlainView', + 'WritableRaster', + 'WritableRenderedImage', + 'WriteAbortedException', + 'Writer', + 'WrongTransaction', + 'WStringValueHelper', + 'X509Certificate', + 'X509CRL', + 'X509CRLEntry', + 'X509EncodedKeySpec', + 'X509Extension', + 'ZipEntry', + 'ZipException', + 'ZipFile', + 'ZipInputStream', + 'ZipOutputStream', + 'ZoneView', + '_BindingIteratorImplBase', + '_BindingIteratorStub', + '_IDLTypeStub', + '_NamingContextImplBase', + '_NamingContextStub', + '_PolicyStub', + '_Remote_Stub ' + ), + 4 => array( + 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?hl=en&q=allinurl%3A{FNAME}+java.sun.com&btnI=I%27m%20Feeling%20Lucky', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/java5.php b/ehcp/net2ftp/plugins/geshi/geshi/java5.php new file mode 100644 index 0000000..d1699de --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/java5.php @@ -0,0 +1,1021 @@ + 'Java(TM) 2 Platform Standard Edition 5.0', + 'COMMENT_SINGLE' => array(1 => '//'), /* import statements are not comments! */ + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* see the authoritative list of all 50 Java keywords at */ + /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */ + + /* java keywords, part 1: control flow */ + 'case', 'default', 'do', 'else', 'for', + 'goto', 'if', 'switch', 'while' + + /* IMO 'break', 'continue', 'return' and 'throw' */ + /* should also be added to this group, as they */ + /* also manage the control flow, */ + /* arguably 'try'/'catch'/'finally' as well */ + ), + 2 => array( + /* java keywords, part 2 */ + + 'break', 'continue', 'return', 'throw', + 'try', 'catch', 'finally', + + 'abstract', 'assert', 'class', 'const', 'enum', 'extends', + 'final', 'implements', 'import', 'instanceof', 'interface', + 'native', 'new', 'package', 'private', 'protected', + 'public', 'static', 'strictfp', 'super', 'synchronized', + 'this', 'throws', 'transient', 'volatile' + ), + 3 => array( + /* Java keywords, part 3: primitive data types and 'void' */ + 'boolean', 'byte', 'char', 'double', + 'float', 'int', 'long', 'short', 'void' + ), + 4 => array( + /* other reserved words in Java: literals */ + /* should be styled to look similar to numbers and Strings */ + 'false', 'null', 'true' + ), + 5 => array ( + 'Applet', 'AppletContext', 'AppletStub', 'AudioClip' + ), + 6 => array ( + 'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes', + 'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window' + ), + 7 => array ( + 'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException' + ), + 8 => array ( + 'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException' + ), + 9 => array ( + 'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer' + ), + 10 => array ( + 'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener' + ), + 11 => array ( + 'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute' + ), + 12 => array ( + 'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float' + ), + 13 => array ( + 'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset' + ), + 14 => array ( + 'InputMethod', 'InputMethodContext', 'InputMethodDescriptor' + ), + 15 => array ( + 'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage' + ), + 16 => array ( + 'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory' + ), + 17 => array ( + 'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob' + ), + 18 => array ( + 'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder' + ), + 19 => array ( + 'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator' + ), + 20 => array ( + 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter', + 'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer' + ), + 21 => array ( + 'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError', + 'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void' + ), + 22 => array ( + 'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target' + ), + 23 => array ( + 'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException' + ), + 24 => array ( + 'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean' + ), + 25 => array ( + 'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference' + ), + 26 => array ( + 'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType' + ), + 27 => array ( + 'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode' + ), + 28 => array ( + 'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException' + ), + 29 => array ( + 'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer' + ), + 30 => array ( + 'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel' + ), + 31 => array ( + 'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider' + ), + 32 => array ( + 'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException' + ), + 33 => array ( + 'CharsetProvider' + ), + 34 => array ( + 'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException' + ), + 35 => array ( + 'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException' + ), + 36 => array ( + 'DGC', 'Lease', 'VMID' + ), + 37 => array ( + 'LocateRegistry', 'Registry', 'RegistryHandler' + ), + 38 => array ( + 'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced' + ), + 39 => array ( + 'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi', + 'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission' + ), + 40 => array ( + 'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner' + ), + 41 => array ( + 'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension' + ), + 42 => array ( + 'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey' + ), + 43 => array ( + 'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec' + ), + 44 => array ( + 'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types' + ), + 45 => array ( + 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator' + ), + 46 => array ( + 'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException', + 'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap' + ), + 47 => array ( + 'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException' + ), + 48 => array ( + 'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference' + ), + 49 => array ( + 'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock' + ), + 50 => array ( + 'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker' + ), + 51 => array ( + 'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter' + ), + 52 => array ( + 'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory' + ), + 53 => array ( + 'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException' + ), + 54 => array ( + 'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream' + ), + 55 => array ( + 'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue' + ), + 56 => array ( + 'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException' + ), + 57 => array ( + 'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException' + ), + 58 => array ( + 'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey' + ), + 59 => array ( + 'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec' + ), + 60 => array ( + 'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter' + ), + 61 => array ( + 'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener' + ), + 62 => array ( + 'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode' + ), + 63 => array ( + 'BMPImageWriteParam' + ), + 64 => array ( + 'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable' + ), + 65 => array ( + 'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter' + ), + 66 => array ( + 'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream' + ), + 67 => array ( + 'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster', + 'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp' + ), + 68 => array ( + 'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet' + ), + 69 => array ( + 'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException' + ), + 70 => array ( + 'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean' + ), + 71 => array ( + 'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType' + ), + 72 => array ( + 'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList' + ), + 73 => array ( + 'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification' + ), + 74 => array ( + 'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub' + ), + 75 => array ( + 'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification' + ), + 76 => array ( + 'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException' + ), + 77 => array ( + 'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult' + ), + 78 => array ( + 'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener' + ), + 79 => array ( + 'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener' + ), + 80 => array ( + 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory' + ), + 81 => array ( + 'ServerSocketFactory', 'SocketFactory' + ), + 82 => array ( + 'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager' + ), + 83 => array ( + 'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException' + ), + 84 => array ( + 'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException' + ), + 85 => array ( + 'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor', + 'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides' + ), + 86 => array ( + 'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener' + ), + 87 => array ( + 'PortableRemoteObject' + ), + 88 => array ( + 'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat' + ), + 89 => array ( + 'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory' + ), + 90 => array ( + 'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner' + ), + 91 => array ( + 'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException' + ), + 92 => array ( + 'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission' + ), + 93 => array ( + 'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException' + ), + 94 => array ( + 'LoginModule' + ), + 95 => array ( + 'X500Principal', 'X500PrivateCredential' + ), + 96 => array ( + 'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory' + ), + 97 => array ( + 'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus' + ), + 98 => array ( + 'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader' + ), + 99 => array ( + 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException' + ), + 100 => array ( + 'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider' + ), + 101 => array ( + 'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource' + ), + 102 => array ( + 'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet' + ), + 103 => array ( + 'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct' + ), + 104 => array ( + 'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter' + ), + 105 => array ( + 'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter', + 'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor', + 'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants' + ), + 106 => array ( + 'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder' + ), + 107 => array ( + 'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel' + ), + 108 => array ( + 'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener' + ), + 109 => array ( + 'FileSystemView', 'FileView' + ), + 110 => array ( + 'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI' + ), + 111 => array ( + 'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI', + 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout' + ), + 112 => array ( + 'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI', + 'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme' + ), + 113 => array ( + 'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI' + ), + 114 => array ( + 'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory' + ), + 115 => array ( + 'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel' + ), + 116 => array ( + 'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass', + 'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView' + ), + 117 => array ( + 'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter' + ), + 118 => array ( + 'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement' + ), + 119 => array ( + 'RTFEditorKit' + ), + 120 => array ( + 'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache' + ), + 121 => array ( + 'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport' + ), + 122 => array ( + 'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException' + ), + 123 => array ( + 'XAException', 'XAResource', 'Xid' + ), + 124 => array ( + 'XMLConstants' + ), + 125 => array ( + 'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar' + ), + 126 => array ( + 'NamespaceContext', 'QName' + ), + 127 => array ( + 'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory' + ), + 128 => array ( + 'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver' + ), + 129 => array ( + 'DOMResult', 'DOMSource' + ), + 130 => array ( + 'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler' + ), + 131 => array ( + 'StreamResult', 'StreamSource' + ), + 132 => array ( + 'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler' + ), + 133 => array ( + 'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver' + ), + 134 => array ( + 'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid' + ), + 135 => array ( + 'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject', + 'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder', + 'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub' + ), + 136 => array ( + 'Invalid', 'InvalidSeq' + ), + 137 => array ( + 'BadKind' + ), + 138 => array ( + 'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream' + ), + 139 => array ( + 'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub' + ), + 140 => array ( + 'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper' + ), + 141 => array ( + 'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder' + ), + 142 => array ( + 'Parameter' + ), + 143 => array ( + 'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub' + ), + 144 => array ( + 'InconsistentTypeCodeHelper' + ), + 145 => array ( + 'InvalidValueHelper' + ), + 146 => array ( + 'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService' + ), + 147 => array ( + 'UnknownEncoding', 'UnknownEncodingHelper' + ), + 148 => array ( + 'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper' + ), + 149 => array ( + 'SYNC_WITH_TRANSPORT', 'SyncScopeHelper' + ), + 150 => array ( + 'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION', + 'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION' + ), + 151 => array ( + 'DuplicateName', 'DuplicateNameHelper' + ), + 152 => array ( + 'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy', + 'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub' + ), + 153 => array ( + 'NoContext', 'NoContextHelper' + ), + 154 => array ( + 'AdapterInactive', 'AdapterInactiveHelper', 'State' + ), + 155 => array ( + 'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper' + ), + 156 => array ( + 'CookieHolder' + ), + 157 => array ( + 'RunTime', 'RunTimeOperations' + ), + 158 => array ( + '_Remote_Stub' + ), + 159 => array ( + 'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler' + ), + 160 => array ( + 'DOMImplementationRegistry' + ), + 161 => array ( + 'EventException', 'EventTarget', 'MutationEvent', 'UIEvent' + ), + 162 => array ( + 'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter' + ), + 163 => array ( + 'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader' + ), + 164 => array ( + 'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl' + ), + 165 => array ( + 'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory' + ), + /* ambiguous class names (appear in more than one package) */ + 166 => array ( + 'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent', + 'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + /* all Java keywords are case sensitive */ + 1 => true, 2 => true, 3 => true, 4 => true, + 5 => true, 6 => true, 7 => true, 8 => true, 9 => true, + 10 => true, 11 => true, 12 => true, 13 => true, 14 => true, + 15 => true, 16 => true, 17 => true, 18 => true, 19 => true, + 20 => true, 21 => true, 22 => true, 23 => true, 24 => true, + 25 => true, 26 => true, 27 => true, 28 => true, 29 => true, + 30 => true, 31 => true, 32 => true, 33 => true, 34 => true, + 35 => true, 36 => true, 37 => true, 38 => true, 39 => true, + 40 => true, 41 => true, 42 => true, 43 => true, 44 => true, + 45 => true, 46 => true, 47 => true, 48 => true, 49 => true, + 50 => true, 51 => true, 52 => true, 53 => true, 54 => true, + 55 => true, 56 => true, 57 => true, 58 => true, 59 => true, + 60 => true, 61 => true, 62 => true, 63 => true, 64 => true, + 65 => true, 66 => true, 67 => true, 68 => true, 69 => true, + 70 => true, 71 => true, 72 => true, 73 => true, 74 => true, + 75 => true, 76 => true, 77 => true, 78 => true, 79 => true, + 80 => true, 81 => true, 82 => true, 83 => true, 84 => true, + 85 => true, 86 => true, 87 => true, 88 => true, 89 => true, + 90 => true, 91 => true, 92 => true, 93 => true, 94 => true, + 95 => true, 96 => true, 97 => true, 98 => true, 99 => true, + 100 => true, 101 => true, 102 => true, 103 => true, 104 => true, + 105 => true, 106 => true, 107 => true, 108 => true, 109 => true, + 110 => true, 111 => true, 112 => true, 113 => true, 114 => true, + 115 => true, 116 => true, 117 => true, 118 => true, 119 => true, + 120 => true, 121 => true, 122 => true, 123 => true, 124 => true, + 125 => true, 126 => true, 127 => true, 128 => true, 129 => true, + 130 => true, 131 => true, 132 => true, 133 => true, 134 => true, + 135 => true, 136 => true, 137 => true, 138 => true, 139 => true, + 140 => true, 141 => true, 142 => true, 143 => true, 144 => true, + 145 => true, 146 => true, 147 => true, 148 => true, 149 => true, + 150 => true, 151 => true, 152 => true, 153 => true, 154 => true, + 155 => true, 156 => true, 157 => true, 158 => true, 159 => true, + 160 => true, 161 => true, 162 => true, 163 => true, 164 => true, + 165 => true, 166 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #993333;', + 4 => 'color: #b13366;', + 5 => 'color: #aaaadd; font-weight: bold;', + 6 => 'color: #aaaadd; font-weight: bold;', + 7 => 'color: #aaaadd; font-weight: bold;', + 8 => 'color: #aaaadd; font-weight: bold;', + 9 => 'color: #aaaadd; font-weight: bold;', + 10 => 'color: #aaaadd; font-weight: bold;', + 11 => 'color: #aaaadd; font-weight: bold;', + 12 => 'color: #aaaadd; font-weight: bold;', + 13 => 'color: #aaaadd; font-weight: bold;', + 14 => 'color: #aaaadd; font-weight: bold;', + 15 => 'color: #aaaadd; font-weight: bold;', + 16 => 'color: #aaaadd; font-weight: bold;', + 17 => 'color: #aaaadd; font-weight: bold;', + 18 => 'color: #aaaadd; font-weight: bold;', + 19 => 'color: #aaaadd; font-weight: bold;', + 20 => 'color: #aaaadd; font-weight: bold;', + 21 => 'color: #aaaadd; font-weight: bold;', + 22 => 'color: #aaaadd; font-weight: bold;', + 23 => 'color: #aaaadd; font-weight: bold;', + 24 => 'color: #aaaadd; font-weight: bold;', + 25 => 'color: #aaaadd; font-weight: bold;', + 26 => 'color: #aaaadd; font-weight: bold;', + 27 => 'color: #aaaadd; font-weight: bold;', + 28 => 'color: #aaaadd; font-weight: bold;', + 29 => 'color: #aaaadd; font-weight: bold;', + 30 => 'color: #aaaadd; font-weight: bold;', + 31 => 'color: #aaaadd; font-weight: bold;', + 32 => 'color: #aaaadd; font-weight: bold;', + 33 => 'color: #aaaadd; font-weight: bold;', + 34 => 'color: #aaaadd; font-weight: bold;', + 35 => 'color: #aaaadd; font-weight: bold;', + 36 => 'color: #aaaadd; font-weight: bold;', + 37 => 'color: #aaaadd; font-weight: bold;', + 38 => 'color: #aaaadd; font-weight: bold;', + 39 => 'color: #aaaadd; font-weight: bold;', + 40 => 'color: #aaaadd; font-weight: bold;', + 41 => 'color: #aaaadd; font-weight: bold;', + 42 => 'color: #aaaadd; font-weight: bold;', + 43 => 'color: #aaaadd; font-weight: bold;', + 44 => 'color: #aaaadd; font-weight: bold;', + 45 => 'color: #aaaadd; font-weight: bold;', + 46 => 'color: #aaaadd; font-weight: bold;', + 47 => 'color: #aaaadd; font-weight: bold;', + 48 => 'color: #aaaadd; font-weight: bold;', + 49 => 'color: #aaaadd; font-weight: bold;', + 50 => 'color: #aaaadd; font-weight: bold;', + 51 => 'color: #aaaadd; font-weight: bold;', + 52 => 'color: #aaaadd; font-weight: bold;', + 53 => 'color: #aaaadd; font-weight: bold;', + 54 => 'color: #aaaadd; font-weight: bold;', + 55 => 'color: #aaaadd; font-weight: bold;', + 56 => 'color: #aaaadd; font-weight: bold;', + 57 => 'color: #aaaadd; font-weight: bold;', + 58 => 'color: #aaaadd; font-weight: bold;', + 59 => 'color: #aaaadd; font-weight: bold;', + 60 => 'color: #aaaadd; font-weight: bold;', + 61 => 'color: #aaaadd; font-weight: bold;', + 62 => 'color: #aaaadd; font-weight: bold;', + 63 => 'color: #aaaadd; font-weight: bold;', + 64 => 'color: #aaaadd; font-weight: bold;', + 65 => 'color: #aaaadd; font-weight: bold;', + 66 => 'color: #aaaadd; font-weight: bold;', + 67 => 'color: #aaaadd; font-weight: bold;', + 68 => 'color: #aaaadd; font-weight: bold;', + 69 => 'color: #aaaadd; font-weight: bold;', + 70 => 'color: #aaaadd; font-weight: bold;', + 71 => 'color: #aaaadd; font-weight: bold;', + 72 => 'color: #aaaadd; font-weight: bold;', + 73 => 'color: #aaaadd; font-weight: bold;', + 74 => 'color: #aaaadd; font-weight: bold;', + 75 => 'color: #aaaadd; font-weight: bold;', + 76 => 'color: #aaaadd; font-weight: bold;', + 77 => 'color: #aaaadd; font-weight: bold;', + 78 => 'color: #aaaadd; font-weight: bold;', + 79 => 'color: #aaaadd; font-weight: bold;', + 80 => 'color: #aaaadd; font-weight: bold;', + 81 => 'color: #aaaadd; font-weight: bold;', + 82 => 'color: #aaaadd; font-weight: bold;', + 83 => 'color: #aaaadd; font-weight: bold;', + 84 => 'color: #aaaadd; font-weight: bold;', + 85 => 'color: #aaaadd; font-weight: bold;', + 86 => 'color: #aaaadd; font-weight: bold;', + 87 => 'color: #aaaadd; font-weight: bold;', + 88 => 'color: #aaaadd; font-weight: bold;', + 89 => 'color: #aaaadd; font-weight: bold;', + 90 => 'color: #aaaadd; font-weight: bold;', + 91 => 'color: #aaaadd; font-weight: bold;', + 92 => 'color: #aaaadd; font-weight: bold;', + 93 => 'color: #aaaadd; font-weight: bold;', + 94 => 'color: #aaaadd; font-weight: bold;', + 95 => 'color: #aaaadd; font-weight: bold;', + 96 => 'color: #aaaadd; font-weight: bold;', + 97 => 'color: #aaaadd; font-weight: bold;', + 98 => 'color: #aaaadd; font-weight: bold;', + 99 => 'color: #aaaadd; font-weight: bold;', + 100 => 'color: #aaaadd; font-weight: bold;', + 101 => 'color: #aaaadd; font-weight: bold;', + 102 => 'color: #aaaadd; font-weight: bold;', + 103 => 'color: #aaaadd; font-weight: bold;', + 104 => 'color: #aaaadd; font-weight: bold;', + 105 => 'color: #aaaadd; font-weight: bold;', + 106 => 'color: #aaaadd; font-weight: bold;', + 107 => 'color: #aaaadd; font-weight: bold;', + 108 => 'color: #aaaadd; font-weight: bold;', + 109 => 'color: #aaaadd; font-weight: bold;', + 110 => 'color: #aaaadd; font-weight: bold;', + 111 => 'color: #aaaadd; font-weight: bold;', + 112 => 'color: #aaaadd; font-weight: bold;', + 113 => 'color: #aaaadd; font-weight: bold;', + 114 => 'color: #aaaadd; font-weight: bold;', + 115 => 'color: #aaaadd; font-weight: bold;', + 116 => 'color: #aaaadd; font-weight: bold;', + 117 => 'color: #aaaadd; font-weight: bold;', + 118 => 'color: #aaaadd; font-weight: bold;', + 119 => 'color: #aaaadd; font-weight: bold;', + 120 => 'color: #aaaadd; font-weight: bold;', + 121 => 'color: #aaaadd; font-weight: bold;', + 122 => 'color: #aaaadd; font-weight: bold;', + 123 => 'color: #aaaadd; font-weight: bold;', + 124 => 'color: #aaaadd; font-weight: bold;', + 125 => 'color: #aaaadd; font-weight: bold;', + 126 => 'color: #aaaadd; font-weight: bold;', + 127 => 'color: #aaaadd; font-weight: bold;', + 128 => 'color: #aaaadd; font-weight: bold;', + 129 => 'color: #aaaadd; font-weight: bold;', + 130 => 'color: #aaaadd; font-weight: bold;', + 131 => 'color: #aaaadd; font-weight: bold;', + 132 => 'color: #aaaadd; font-weight: bold;', + 133 => 'color: #aaaadd; font-weight: bold;', + 134 => 'color: #aaaadd; font-weight: bold;', + 135 => 'color: #aaaadd; font-weight: bold;', + 136 => 'color: #aaaadd; font-weight: bold;', + 137 => 'color: #aaaadd; font-weight: bold;', + 138 => 'color: #aaaadd; font-weight: bold;', + 139 => 'color: #aaaadd; font-weight: bold;', + 140 => 'color: #aaaadd; font-weight: bold;', + 141 => 'color: #aaaadd; font-weight: bold;', + 142 => 'color: #aaaadd; font-weight: bold;', + 143 => 'color: #aaaadd; font-weight: bold;', + 144 => 'color: #aaaadd; font-weight: bold;', + 145 => 'color: #aaaadd; font-weight: bold;', + 146 => 'color: #aaaadd; font-weight: bold;', + 147 => 'color: #aaaadd; font-weight: bold;', + 148 => 'color: #aaaadd; font-weight: bold;', + 149 => 'color: #aaaadd; font-weight: bold;', + 150 => 'color: #aaaadd; font-weight: bold;', + 151 => 'color: #aaaadd; font-weight: bold;', + 152 => 'color: #aaaadd; font-weight: bold;', + 153 => 'color: #aaaadd; font-weight: bold;', + 154 => 'color: #aaaadd; font-weight: bold;', + 155 => 'color: #aaaadd; font-weight: bold;', + 156 => 'color: #aaaadd; font-weight: bold;', + 157 => 'color: #aaaadd; font-weight: bold;', + 158 => 'color: #aaaadd; font-weight: bold;', + 159 => 'color: #aaaadd; font-weight: bold;', + 160 => 'color: #aaaadd; font-weight: bold;', + 161 => 'color: #aaaadd; font-weight: bold;', + 162 => 'color: #aaaadd; font-weight: bold;', + 163 => 'color: #aaaadd; font-weight: bold;', + 164 => 'color: #aaaadd; font-weight: bold;', + 165 => 'color: #aaaadd; font-weight: bold;', + 166 => 'color: #aaaadd; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/applet/{FNAME}.html', + 6 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/{FNAME}.html', + 7 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color/{FNAME}.html', + 8 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/datatransfer/{FNAME}.html', + 9 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/dnd/{FNAME}.html', + 10 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/{FNAME}.html', + 11 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/font/{FNAME}.html', + 12 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/{FNAME}.html', + 13 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/{FNAME}.html', + 14 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/spi/{FNAME}.html', + 15 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/{FNAME}.html', + 16 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/renderable/{FNAME}.html', + 17 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/print/{FNAME}.html', + 18 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/{FNAME}.html', + 19 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/beancontext/{FNAME}.html', + 20 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/io/{FNAME}.html', + 21 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/{FNAME}.html', + 22 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/{FNAME}.html', + 23 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/{FNAME}.html', + 24 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/{FNAME}.html', + 25 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/{FNAME}.html', + 26 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/{FNAME}.html', + 27 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/math/{FNAME}.html', + 28 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/net/{FNAME}.html', + 29 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/{FNAME}.html', + 30 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/{FNAME}.html', + 31 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/spi/{FNAME}.html', + 32 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/{FNAME}.html', + 33 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/spi/{FNAME}.html', + 34 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/{FNAME}.html', + 35 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/activation/{FNAME}.html', + 36 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/{FNAME}.html', + 37 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/registry/{FNAME}.html', + 38 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/server/{FNAME}.html', + 39 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/{FNAME}.html', + 40 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/acl/{FNAME}.html', + 41 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/{FNAME}.html', + 42 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/interfaces/{FNAME}.html', + 43 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/spec/{FNAME}.html', + 44 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/sql/{FNAME}.html', + 45 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/text/{FNAME}.html', + 46 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/{FNAME}.html', + 47 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/{FNAME}.html', + 48 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/{FNAME}.html', + 49 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/{FNAME}.html', + 50 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/jar/{FNAME}.html', + 51 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/{FNAME}.html', + 52 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/{FNAME}.html', + 53 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/{FNAME}.html', + 54 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/{FNAME}.html', + 55 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/accessibility/{FNAME}.html', + 56 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/activity/{FNAME}.html', + 57 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/{FNAME}.html', + 58 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/interfaces/{FNAME}.html', + 59 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/spec/{FNAME}.html', + 60 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/{FNAME}.html', + 61 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/event/{FNAME}.html', + 62 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/{FNAME}.html', + 63 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/bmp/{FNAME}.html', + 64 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html', + 65 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/spi/{FNAME}.html', + 66 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/stream/{FNAME}.html', + 67 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/{FNAME}.html', + 68 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/loading/{FNAME}.html', + 69 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/modelmbean/{FNAME}.html', + 70 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/monitor/{FNAME}.html', + 71 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/{FNAME}.html', + 72 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/relation/{FNAME}.html', + 73 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/{FNAME}.html', + 74 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/rmi/{FNAME}.html', + 75 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/{FNAME}.html', + 76 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/{FNAME}.html', + 77 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/{FNAME}.html', + 78 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/event/{FNAME}.html', + 79 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/ldap/{FNAME}.html', + 80 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/spi/{FNAME}.html', + 81 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/{FNAME}.html', + 82 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/ssl/{FNAME}.html', + 83 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/{FNAME}.html', + 84 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/{FNAME}.html', + 85 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/standard/{FNAME}.html', + 86 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/event/{FNAME}.html', + 87 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/{FNAME}.html', + 88 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/CORBA/{FNAME}.html', + 89 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/ssl/{FNAME}.html', + 90 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/{FNAME}.html', + 91 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/callback/{FNAME}.html', + 92 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/kerberos/{FNAME}.html', + 93 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/login/{FNAME}.html', + 94 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/{FNAME}.html', + 95 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/x500/{FNAME}.html', + 96 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/sasl/{FNAME}.html', + 97 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/{FNAME}.html', + 98 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/spi/{FNAME}.html', + 99 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/{FNAME}.html', + 100 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/{FNAME}.html', + 101 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/{FNAME}.html', + 102 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/{FNAME}.html', + 103 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/serial/{FNAME}.html', + 104 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/spi/{FNAME}.html', + 105 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/{FNAME}.html', + 106 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/border/{FNAME}.html', + 107 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/colorchooser/{FNAME}.html', + 108 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/{FNAME}.html', + 109 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/filechooser/{FNAME}.html', + 110 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/{FNAME}.html', + 111 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/basic/{FNAME}.html', + 112 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/metal/{FNAME}.html', + 113 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/multi/{FNAME}.html', + 114 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/{FNAME}.html', + 115 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/{FNAME}.html', + 116 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/{FNAME}.html', + 117 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/{FNAME}.html', + 118 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/parser/{FNAME}.html', + 119 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/rtf/{FNAME}.html', + 120 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/{FNAME}.html', + 121 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/{FNAME}.html', + 122 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/{FNAME}.html', + 123 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/xa/{FNAME}.html', + 124 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/{FNAME}.html', + 125 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/{FNAME}.html', + 126 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/{FNAME}.html', + 127 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/{FNAME}.html', + 128 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/{FNAME}.html', + 129 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/dom/{FNAME}.html', + 130 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/sax/{FNAME}.html', + 131 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/stream/{FNAME}.html', + 132 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/{FNAME}.html', + 133 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/{FNAME}.html', + 134 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/ietf/jgss/{FNAME}.html', + 135 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/{FNAME}.html', + 136 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html', + 137 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html', + 138 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/portable/{FNAME}.html', + 139 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/{FNAME}.html', + 140 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html', + 141 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html', + 142 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Dynamic/{FNAME}.html', + 143 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/{FNAME}.html', + 144 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html', + 145 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html', + 146 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/{FNAME}.html', + 147 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html', + 148 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html', + 149 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Messaging/{FNAME}.html', + 150 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/{FNAME}.html', + 151 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html', + 152 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/{FNAME}.html', + 153 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html', + 154 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html', + 155 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html', + 156 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html', + 157 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/SendingContext/{FNAME}.html', + 158 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/stub/java/rmi/{FNAME}.html', + 159 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/{FNAME}.html', + 160 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/bootstrap/{FNAME}.html', + 161 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/events/{FNAME}.html', + 162 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/ls/{FNAME}.html', + 163 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/{FNAME}.html', + 164 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/ext/{FNAME}.html', + 165 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/helpers/{FNAME}.html', + /* ambiguous class names (appear in more than one package) */ + 166 => 'http://www.google.com/search?sitesearch=java.sun.com&q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + /* Java does not use '::' */ + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/javascript.php b/ehcp/net2ftp/plugins/geshi/geshi/javascript.php new file mode 100644 index 0000000..9135ef4 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/javascript.php @@ -0,0 +1,144 @@ + 'Javascript', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do', + 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item', + 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void', + 'while', 'write', 'with' + ), + 2 => array( + 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false', + 'function', 'import', 'namespace', 'new', 'null', 'package', 'private', + 'protected', 'public', 'super', 'true', 'use', 'var' + ), + 3 => array( + + // common functions for Window object + 'alert', 'back', 'blur', 'close', 'confirm', 'focus', 'forward', 'home', + 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove', + 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'status', + 'stop', + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight: bold;', + 2 => 'color: #003366; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #009900; font-style: italic;', + 'MULTI' => 'color: #009900; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #3366CC;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0066FF;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => "/.*/([igm]*)?" // matches js reg exps + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '' + ), + 1 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/latex.php b/ehcp/net2ftp/plugins/geshi/geshi/latex.php new file mode 100644 index 0000000..3638efd --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/latex.php @@ -0,0 +1,203 @@ +set_symbols_highlighting(false); + $this->set_numbers_highlighting(false); +} + +$language_data = array ( + 'LANG_NAME' => 'LaTeX', + 'COMMENT_SINGLE' => array(1 => '%'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + '.', ',','\\',"~", "{", "}", "[", "]", "$" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + ), + 'STRINGS' => array( + ), + 'NUMBERS' => array( + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + ), + 'REGEXPS' => array( + 1 => 'color: #00A000; font-weight: bold;', // Math inner + 2 => 'color: #800000; font-weight: normal;', // \keyword #202020 + 3 => 'color: #2222D0; font-weight: normal;', // {...} + 4 => 'color: #2222D0; font-weight: normal;', // [Option] + 5 => 'color: #00A000; font-weight: normal;', // Mathe #CCF020 + 6 => 'color: #F00000; font-weight: normal;', // Structure \begin + 7 => 'color: #F00000; font-weight: normal;', // Structure \end + 8 => 'color: #F00000; font-weight: normal;', // Structure: Labels + //9 => 'color: #F00000; font-weight: normal;', // Structure + 10 => 'color: #0000D0; font-weight: bold;', // Environment + 11 => 'color: #0000D0; font-weight: bold;', // Environment + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + // Math inner + 1 => array( + GESHI_SEARCH => "(\\\\begin\\{)(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign )(\\})(.*)(\\\\end\\{)(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign)(\\})", + GESHI_REPLACE => '\\4', + GESHI_MODIFIERS => 's', + GESHI_BEFORE => '\1\2\3', + GESHI_AFTER => '\5\6\7' + ), + // \keywords + 2 => array( + GESHI_SEARCH => "(\\\\)([a-zA-Z]+)", + GESHI_REPLACE => '\1\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + // {parameters} + 3 => array( + GESHI_SEARCH => "(\\{)(.*)(\\})", + GESHI_REPLACE => '\2', + GESHI_MODIFIERS => 'U', + GESHI_BEFORE => '\1', + GESHI_AFTER => '\3' + ), + // [Option] + 4 => array( + GESHI_SEARCH => "(\[)(.+)(\])", + GESHI_REPLACE => '\2', + GESHI_MODIFIERS => 'U', + GESHI_BEFORE => '\1', + GESHI_AFTER => '\3' + ), + // Mathe mit $ ... $ + 5 => array( + GESHI_SEARCH => "(\\$)(.+)(\\$)", + GESHI_REPLACE => '\1\2\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + // Structure begin + 6 => array( + GESHI_SEARCH => "(\\\\begin)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + // Structure end + 7 => array( + GESHI_SEARCH => "(\\\\end)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + //Structure: Label + 8 => array( + GESHI_SEARCH => "(\\\\)(label|pageref|ref|cite)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\3' + ), +// Structure: sections +/*9 => array( + GESHI_SEARCH => "(\\\\)(part|chapter|section|subsection|subsubsection|paragraph|subparagraph)(?=[^a-zA-Z])", + GESHI_REPLACE => '\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\3' + ),*/ +// environment begin +10 => array( + GESHI_SEARCH => "(\\\\begin)(\\{)(.*)(\\})", + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), +// environment end +11 => array( + GESHI_SEARCH => "(\\\\end)(\\{)(.*)(\\})", + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + +// --------------------------------------------- + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/lisp.php b/ehcp/net2ftp/plugins/geshi/geshi/lisp.php new file mode 100644 index 0000000..7d96b9d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/lisp.php @@ -0,0 +1,133 @@ + 'Lisp', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(';|' => '|;'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'not','defun','princ', + 'eval','apply','funcall','quote','identity','function', + 'complement','backquote','lambda','set','setq','setf', + 'defun','defmacro','gensym','make','symbol','intern', + 'symbol','name','symbol','value','symbol','plist','get', + 'getf','putprop','remprop','hash','make','array','aref', + 'car','cdr','caar','cadr','cdar','cddr','caaar','caadr','cadar', + 'caddr','cdaar','cdadr','cddar','cdddr','caaaar','caaadr', + 'caadar','caaddr','cadaar','cadadr','caddar','cadddr', + 'cdaaar','cdaadr','cdadar','cdaddr','cddaar','cddadr', + 'cdddar','cddddr','cons','list','append','reverse','last','nth', + 'nthcdr','member','assoc','subst','sublis','nsubst', + 'nsublis','remove','length','list','length', + 'mapc','mapcar','mapl','maplist','mapcan','mapcon','rplaca', + 'rplacd','nconc','delete','atom','symbolp','numberp', + 'boundp','null','listp','consp','minusp','zerop','plusp', + 'evenp','oddp','eq','eql','equal','cond','case','and','or', + 'let','l','if','prog','prog1','prog2','progn','go','return', + 'do','dolist','dotimes','catch','throw','error','cerror','break', + 'continue','errset','baktrace','evalhook','truncate','float', + 'rem','min','max','abs','sin','cos','tan','expt','exp','sqrt', + 'random','logand','logior','logxor','lognot','bignums','logeqv', + 'lognand','lognor','logorc2','logtest','logbitp','logcount', + 'integer','length','nil' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #555;', + 1 => 'color: #555;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + '::', ':' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/lua.php b/ehcp/net2ftp/plugins/geshi/geshi/lua.php new file mode 100644 index 0000000..6ae651d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/lua.php @@ -0,0 +1,134 @@ + 'Lua', + 'COMMENT_SINGLE' => array(1 => "--"), + 'COMMENT_MULTI' => array('--[[' => ']]'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'and','break','do','else','elseif','end','false','for','function','if', + 'in','local','nil','not','or','repeat','return','then','true','until','while', + '_VERSION','assert','collectgarbage','dofile','error','gcinfo','loadfile','loadstring', + 'print','tonumber','tostring','type','unpack', + '_ALERT','_ERRORMESSAGE','_INPUT','_PROMPT','_OUTPUT', + '_STDERR','_STDIN','_STDOUT','call','dostring','foreach','foreachi','getn','globals','newtype', + 'rawget','rawset','require','sort','tinsert','tremove', + 'abs','acos','asin','atan','atan2','ceil','cos','deg','exp', + 'floor','format','frexp','gsub','ldexp','log','log10','max','min','mod','rad','random','randomseed', + 'sin','sqrt','strbyte','strchar','strfind','strlen','strlower','strrep','strsub','strupper','tan', + 'openfile','closefile','readfrom','writeto','appendto', + 'remove','rename','flush','seek','tmpfile','tmpname','read','write', + 'clock','date','difftime','execute','exit','getenv','setlocale','time', + '_G','getfenv','getmetatable','ipairs','loadlib','next','pairs','pcall', + 'rawegal','rawget','rawset','require','setfenv','setmetatable','xpcall', + 'string.byte','string.char','string.dump','string.find','string.len', + 'string.lower','string.rep','string.sub','string.upper','string.format','string.gfind','string.gsub', + 'table.concat','table.foreach','table.foreachi','table.getn','table.sort','table.insert','table.remove','table.setn', + 'math.abs','math.acos','math.asin','math.atan','math.atan2','math.ceil','math.cos','math.deg','math.exp', + 'math.floor','math.frexp','math.ldexp','math.log','math.log10','math.max','math.min','math.mod', + 'math.pi','math.rad','math.random','math.randomseed','math.sin','math.sqrt','math.tan', + 'coroutine.create','coroutine.resume','coroutine.status', + 'coroutine.wrap','coroutine.yield', + 'io.close','io.flush','io.input','io.lines','io.open','io.output','io.read','io.tmpfile','io.type','io.write', + 'io.stdin','io.stdout','io.stderr', + 'os.clock','os.date','os.difftime','os.execute','os.exit','os.getenv','os.remove','os.rename', + 'os.setlocale','os.time','os.tmpname', + 'string','table','math','coroutine','io','os','debug' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '=', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #b1b100;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/m68k.php b/ehcp/net2ftp/plugins/geshi/geshi/m68k.php new file mode 100644 index 0000000..27cf48b --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/m68k.php @@ -0,0 +1,135 @@ + 'Motorola 68000 Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'adc','add','ais','aix','and','asl','asr','bcc','bclr','bcs','beq', + 'bge','bgt','bhcc','bhcs','bhi','bhs','bih','bil','bit','ble','blo', + 'bls','blt','bmc','bmi','bms','bne','bpl','bra','brclr','brn', + 'brset','bset','bsr','cbeq','clc','cli','clr','cmp','com','cphx', + 'cpx','daa','dbnz','dec','div','eor','inc','jmp','jsr','lda','ldhx', + 'ldx','lsl','lsr','mov','mul','neg','nop','nsa','ora','psha','pshh', + 'pshx','pula','pulh','pulx','rol','ror','rsp','rti','rts','sbc', + 'sec','sei','sta','sthx','stop','stx','sub','swi','tap','tax','tpa', + 'tst','tsx','txa','txs','wait' + ), + /*registers*/ + 2 => array( + 'a','h','x', + 'hx','sp' + ), + /*Directive*/ + 3 => array( + '#define','#endif','#else','#ifdef','#ifndef','#include','#undef', + '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ' + ), + ), + 'SYMBOLS' => array( + ',' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff; font-weight:bold;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000ff;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #dd22dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + 0 => 'color: #22bbff;', + 1 => 'color: #22bbff;', + 2 => 'color: #993333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '#?0[0-9a-fA-F]{1,32}[hH]', + 1 => '\%[01]{1,64}[bB]', + 2 => '^[_a-zA-Z][_a-zA-Z0-9]{0,50}\:' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/matlab.php b/ehcp/net2ftp/plugins/geshi/geshi/matlab.php new file mode 100644 index 0000000..32ccabd --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/matlab.php @@ -0,0 +1,867 @@ + 'Matlab M', + 'COMMENT_SINGLE' => array(1 => '%'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'break', 'case', 'catch', 'continue', 'elseif', 'else', 'end', 'for', + 'function', 'global', 'if', 'otherwise', 'persistent', 'return', + 'switch', 'try', 'while','...' + ), + 2 => array( + 'all', + 'any', + 'exist', + 'find', + 'is', + 'isa', + 'logical', + 'mislocked', + + 'builtin', + 'eval', + 'evalc', + 'evalin', + 'feval', + 'function', + 'global', + 'nargchk', + 'persistent', + 'script', + 'break', + 'case', + 'catch', + 'else', + 'elseif', + 'end', + 'error', + 'for', + 'if', + 'otherwise', + 'return', + 'switch', + 'try', + 'warning', + 'while', + 'input', + 'keyboard', + 'menu', + 'pause', + 'class', + 'double', + 'inferiorto', + 'inline', + 'int8', + 'int16', + 'int32', + 'isa', + 'loadobj', + 'saveobj', + 'single', + 'superiorto', + 'uint8', + 'int16', + 'uint32', + 'dbclear', + 'dbcont', + 'dbdown', + 'dbmex', + 'dbquit', + 'dbstack', + 'dbstatus', + 'dbstep', + 'dbstop', + 'dbtype', + 'dbup', + + 'blkdiag', + 'eye', + 'linspace', + 'logspace', + 'ones', + 'rand', + 'randn', + 'zeros', + 'ans', + 'computer', + 'eps', + 'flops', + 'i', + 'Inf', + 'inputname', + 'j', + 'NaN', + 'nargin', + 'nargout', + 'pi', + 'realmax', + 'realmin', + 'varargin', + 'varargout', + 'calendar', + 'clock', + 'cputime', + 'date', + 'datenum', + 'datestr', + 'datevec', + 'eomday', + 'etime', + 'now', + 'tic', + 'toc', + 'weekday', + 'cat', + 'diag', + 'fliplr', + 'flipud', + 'repmat', + 'reshape', + 'rot90', + 'tril', + 'triu', + 'compan', + 'gallery', + 'hadamard', + 'hankel', + 'hilb', + 'invhilb', + 'magic', + 'pascal', + 'toeplitz', + 'wilkinson', + 'abs', + 'acos', + 'acosh', + 'acot', + 'acoth', + 'acsc', + 'acsch', + 'angle', + 'asec', + 'asech', + 'asin', + 'asinh', + 'atan', + 'atanh', + 'atan2', + 'ceil', + 'complex', + 'conj', + 'cos', + 'cosh', + 'cot', + 'coth', + 'csc', + 'csch', + 'exp', + 'fix', + 'floor', + 'gcd', + 'imag', + 'lcm', + 'log', + 'log2', + 'log10', + 'mod', + 'nchoosek', + 'real', + 'rem', + 'round', + 'sec', + 'sech', + 'sign', + 'sin', + 'sinh', + 'sqrt', + 'tan', + 'tanh', + 'airy', + 'besselh', + 'besseli', + 'besselk', + 'besselj', + 'Bessely', + 'beta', + 'betainc', + 'betaln', + 'ellipj', + 'ellipke', + 'erf', + 'erfc', + 'erfcx', + 'erfiny', + 'expint', + 'factorial', + 'gamma', + 'gammainc', + 'gammaln', + 'legendre', + 'pow2', + 'rat', + 'rats', + 'cart2pol', + 'cart2sph', + 'pol2cart', + 'sph2cart', + 'abs', + 'eval', + 'real', + 'strings', + 'deblank', + 'findstr', + 'lower', + 'strcat', + 'strcmp', + 'strcmpi', + 'strjust', + 'strmatch', + 'strncmp', + 'strrep', + 'strtok', + 'strvcat', + 'symvar', + 'texlabel', + 'upper', + 'char', + 'int2str', + 'mat2str', + 'num2str', + 'sprintf', + 'sscanf', + 'str2double', + 'str2num', + 'bin2dec', + 'dec2bin', + 'dec2hex', + 'hex2dec', + 'hex2num', + 'fclose', + 'fopen', + 'fread', + 'fwrite', + 'fgetl', + 'fgets', + 'fprintf', + 'fscanf', + 'feof', + 'ferror', + 'frewind', + 'fseek', + 'ftell', + 'sprintf', + 'sscanf', + 'dlmread', + 'dlmwrite', + 'hdf', + 'imfinfo', + 'imread', + 'imwrite', + 'textread', + 'wk1read', + 'wk1write', + 'bitand', + 'bitcmp', + 'bitor', + 'bitmax', + 'bitset', + 'bitshift', + 'bitget', + 'bitxor', + 'fieldnames', + 'getfield', + 'rmfield', + 'setfield', + 'struct', + 'struct2cell', + 'class', + 'isa', + 'cell', + 'cellfun', + 'cellstr', + 'cell2struct', + 'celldisp', + 'cellplot', + 'num2cell', + 'cat', + 'flipdim', + 'ind2sub', + 'ipermute', + 'ndgrid', + 'ndims', + 'permute', + 'reshape', + 'shiftdim', + 'squeeze', + 'sub2ind', + 'cond', + 'condeig', + 'det', + 'norm', + 'null', + 'orth', + 'rank', + 'rcond', + 'rref', + 'rrefmovie', + 'subspace', + 'trace', + 'chol', + 'inv', + 'lscov', + 'lu', + 'nnls', + 'pinv', + 'qr', + 'balance', + 'cdf2rdf', + 'eig', + 'gsvd', + 'hess', + 'poly', + 'qz', + 'rsf2csf', + 'schur', + 'svd', + 'expm', + 'funm', + 'logm', + 'sqrtm', + 'qrdelete', + 'qrinsert', + 'bar', + 'barh', + 'hist', + 'hold', + 'loglog', + 'pie', + 'plot', + 'polar', + 'semilogx', + 'semilogy', + 'subplot', + 'bar3', + 'bar3h', + 'comet3', + 'cylinder', + 'fill3', + 'plot3', + 'quiver3', + 'slice', + 'sphere', + 'stem3', + 'waterfall', + 'clabel', + 'datetick', + 'grid', + 'gtext', + 'legend', + 'plotyy', + 'title', + 'xlabel', + 'ylabel', + 'zlabel', + 'contour', + 'contourc', + 'contourf', + 'hidden', + 'meshc', + 'mesh', + 'peaks', + 'surf', + 'surface', + 'surfc', + 'surfl', + 'trimesh', + 'trisurf', + 'coneplot', + 'contourslice', + 'isocaps', + 'isonormals', + 'isosurface', + 'reducepatch', + 'reducevolume', + 'shrinkfaces', + 'smooth3', + 'stream2', + 'stream3', + 'streamline', + 'surf2patch', + 'subvolume', + 'griddata', + 'meshgrid', + 'area', + 'box', + 'comet', + 'compass', + 'errorbar', + 'ezcontour', + 'ezcontourf', + 'ezmesh', + 'ezmeshc', + 'ezplot', + 'ezplot3', + 'ezpolar', + 'ezsurf', + 'ezsurfc', + 'feather', + 'fill', + 'fplot', + 'pareto', + 'pie3', + 'plotmatrix', + 'pcolor', + 'rose', + 'quiver', + 'ribbon', + 'stairs', + 'scatter', + 'scatter3', + 'stem', + 'convhull', + 'delaunay', + 'dsearch', + 'inpolygon', + 'polyarea', + 'tsearch', + 'voronoi', + 'camdolly', + 'camlookat', + 'camorbit', + 'campan', + 'campos', + 'camproj', + 'camroll', + 'camtarget', + 'camup', + 'camva', + 'camzoom', + 'daspect', + 'pbaspect', + 'view', + 'viewmtx', + 'xlim', + 'ylim', + 'zlim', + 'camlight', + 'diffuse', + 'lighting', + 'lightingangle', + 'material', + 'specular', + 'brighten', + 'bwcontr', + 'caxis', + 'colorbar', + 'colorcube', + 'colordef', + 'colormap', + 'graymon', + 'hsv2rgb', + 'rgb2hsv', + 'rgbplot', + 'shading', + 'spinmap', + 'surfnorm', + 'whitebg', + 'autumn', + 'bone', + 'contrast', + 'cool', + 'copper', + 'flag', + 'gray', + 'hot', + 'hsv', + 'jet', + 'lines', + 'prism', + 'spring', + 'summer', + 'winter', + 'orient', + 'print', + 'printopt', + 'saveas', + 'copyobj', + 'findobj', + 'gcbo', + 'gco', + 'get', + 'rotate', + 'ishandle', + 'set', + 'axes', + 'figure', + 'image', + 'light', + 'line', + 'patch', + 'rectangle', + 'surface', + 'text Create', + 'uicontext Create', + 'capture', + 'clc', + 'clf', + 'clg', + 'close', + 'gcf', + 'newplot', + 'refresh', + 'saveas', + 'axis', + 'cla', + 'gca', + 'propedit', + 'reset', + 'rotate3d', + 'selectmoveresize', + 'shg', + 'ginput', + 'zoom', + 'dragrect', + 'drawnow', + 'rbbox', + 'dialog', + 'errordlg', + 'helpdlg', + 'inputdlg', + 'listdlg', + 'msgbox', + 'pagedlg', + 'printdlg', + 'questdlg', + 'uigetfile', + 'uiputfile', + 'uisetcolor', + 'uisetfont', + 'warndlg', + 'menu', + 'menuedit', + 'uicontextmenu', + 'uicontrol', + 'uimenu', + 'dragrect', + 'findfigs', + 'gcbo', + 'rbbox', + 'selectmoveresize', + 'textwrap', + 'uiresume', + 'uiwait Used', + 'waitbar', + 'waitforbuttonpress', + 'convhull', + 'cumprod', + 'cumsum', + 'cumtrapz', + 'delaunay', + 'dsearch', + 'factor', + 'inpolygon', + 'max', + 'mean', + 'median', + 'min', + 'perms', + 'polyarea', + 'primes', + 'prod', + 'sort', + 'sortrows', + 'std', + 'sum', + 'trapz', + 'tsearch', + 'var', + 'voronoi', + 'del2', + 'diff', + 'gradient', + 'corrcoef', + 'cov', + 'conv', + 'conv2', + 'deconv', + 'filter', + 'filter2', + 'abs', + 'angle', + 'cplxpair', + 'fft', + 'fft2', + 'fftshift', + 'ifft', + 'ifft2', + 'ifftn', + 'ifftshift', + 'nextpow2', + 'unwrap', + 'cross', + 'intersect', + 'ismember', + 'setdiff', + 'setxor', + 'union', + 'unique', + 'conv', + 'deconv', + 'poly', + 'polyder', + 'polyeig', + 'polyfit', + 'polyval', + 'polyvalm', + 'residue', + 'roots', + 'griddata', + 'interp1', + 'interp2', + 'interp3', + 'interpft', + 'interpn', + 'meshgrid', + 'ndgrid', + 'spline', + 'dblquad', + 'fmin', + 'fmins', + 'fzero', + 'ode45,', + 'ode113,', + 'ode15s,', + 'ode23s,', + 'ode23t,', + 'ode23tb', + 'odefile', + 'odeget', + 'odeset', + 'quad,', + 'vectorize', + 'spdiags', + 'speye', + 'sprand', + 'sprandn', + 'sprandsym', + 'find', + 'full', + 'sparse', + 'spconvert', + 'nnz', + 'nonzeros', + 'nzmax', + 'spalloc', + 'spfun', + 'spones', + 'colmmd', + 'colperm', + 'dmperm', + 'randperm', + 'symmmd', + 'symrcm', + 'condest', + 'normest', + 'bicg', + 'bicgstab', + 'cgs', + 'cholinc', + 'cholupdate', + 'gmres', + 'luinc', + 'pcg', + 'qmr', + 'qr', + 'qrdelete', + 'qrinsert', + 'qrupdate', + 'eigs', + 'svds', + 'spparms', + 'lin2mu', + 'mu2lin', + 'sound', + 'soundsc', + 'auread', + 'auwrite', + 'wavread', + 'wavwrite', + '[Keywords 6]', + 'addpath', + 'doc', + 'docopt', + 'help', + 'helpdesk', + 'helpwin', + 'lasterr', + 'lastwarn', + 'lookfor', + 'partialpath', + 'path', + 'pathtool', + 'profile', + 'profreport', + 'rmpath', + 'type', + 'ver', + 'version', + 'web', + 'what', + 'whatsnew', + 'which', + 'clear', + 'disp', + 'length', + 'load', + 'mlock', + 'munlock', + 'openvar', + 'pack', + 'save', + 'saveas', + 'size', + 'who', + 'whos', + 'workspace', + 'clc', + 'echo', + 'format', + 'home', + 'more', + 'cd', + 'copyfile', + 'delete', + 'diary', + 'dir', + 'edit', + 'fileparts', + 'fullfile', + 'inmem', + 'ls', + 'matlabroot', + 'mkdir', + 'open', + 'pwd', + 'tempdir', + 'tempname', + 'matlabrc', + 'quit', +) + ), + 'SYMBOLS' => array( + '...' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + //3 => false, + //4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'COMMENTS' => array( + 1 => 'color: #228B22;', + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #080;' + ), + 'STRINGS' => array( + //0 => 'color: #A020F0;' + ), + 'NUMBERS' => array( + 0 => 'color: #33f;' + ), + 'METHODS' => array( + 1 => '', + 2 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #080;' + ), + 'REGEXPS' => array( + 0 => 'color:#A020F0;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => 'http://www.mathworks.com/access/helpdesk/help/techdoc/ref/{FNAME}.html', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([^\w])'([^\\n\\r']*)'", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => "\\1'", + GESHI_AFTER => "'" + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/mirc.php b/ehcp/net2ftp/plugins/geshi/geshi/mirc.php new file mode 100644 index 0000000..29faac2 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/mirc.php @@ -0,0 +1,156 @@ + 'mIRC Scripting', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'menu', 'dialog', + ), + 2 => array( + 'if', 'elseif', 'else', 'while', 'return', 'goto', + ), + 3 => array( + 'action','ajinvite','alias','amsg','ame','anick','aop','auser', + 'avoice','auto','autojoin','away','background','ban','beep', + 'channel','clear','clearall','clipboard','close','closemsg','color', + 'copy','creq','ctcp','ctcpreply','ctcps','dcc','dde','ddeserver', + 'debug','describe','disable','disconnect','dlevel','dll','dns', + 'dqwindow','ebeeps','echo','editbox','emailaddr','enable','events', + 'exit','filter','findtext','finger','flash','flood','flush', + 'flushini', 'font','fsend','fserve','fullname','ghide','gload', + 'gmove','gopts','gplay','gpoint','gqreq','groups','gshow','gsize', + 'gstop','gtalk','gunload','guser','help','hop','ignore','invite', + 'join','kick','linesep','links','list','load','loadbuf','localinfo', + 'log','me','mdi','mkdir','mnick','mode','msg','names','nick','noop', + 'notice','notify','omsg','onotice','part','partall','pdcc', + 'perform','ping','play','pop','protect','pvoice','qmsg','qme', + 'query','queryrn','quit','raw','remini','remote','remove','rename', + 'enwin','resetidle','rlevel','rmdir','run','ruser','save','savebuf', + 'saveini','say','server','showmirc','sline','sound','speak','splay', + 'sreq','strip','time', + //'timer[N/name]', //Handled as a regular expression below ... + 'timers','timestamp','titlebar','tnick','tokenize','topic','ulist', + 'unload','updatenl','url','uwho','window','winhelp','write', + 'writeini','who','whois','whowas' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #994444;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #990000; font-weight: bold;', + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000;', + ), + 'STRINGS' => array( + ), + 'NUMBERS' => array( + 0 => '', + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #FF0000;', + ), + 'REGEXPS' => array( + 0 => 'color: #000099;', + 1 => 'color: #990000;', + 2 => 'color: #888800;', + 3 => 'color: #888800;', + 4 => 'color: #000099;', + 5 => 'color: #000099;', + 6 => 'color: #990000; font-weight: bold;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.mirc.com/{FNAME}', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\$[a-zA-Z0-9]+', + 1 => '(%|&)[a-zA-Z0-9]+', + 2 => '(#|@)[a-zA-Z0-9]+', + 3 => '-[a-z\d]+', + 4 => '(on|ctcp) (!|@|&)?(\d|\*):[a-zA-Z]+:', + /*4 => array( + GESHI_SEARCH => '((on|ctcp) (!|@|&)?(\d|\*):(Action|Active|Agent|AppActive|Ban|Chat|Close|Connect|Ctcp|CtcpReply|DccServer|DeHelp|DeOp|DeVoice|Dialog|Dns|Error|Exit|FileRcvd|FileSent|GetFail|Help|Hotlink|Input|Invite|Join|KeyDown|KeyUp|Kick|Load|Logon|MidiEnd|Mode|Mp3End|Nick|NoSound|Notice|Notify|Op|Open|Part|Ping|Pong|PlayEnd|Quit|Raw|RawMode|SendFail|Serv|ServerMode|ServerOp|Signal|Snotice|Start|Text|Topic|UnBan|Unload|Unotify|User|Mode|Voice|Wallops|WaveEnd):)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ),*/ + 5 => 'raw (\d|\*):', + 6 => '/timer(?!s\b)[0-9a-zA-Z_]+', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); +} +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/mpasm.php b/ehcp/net2ftp/plugins/geshi/geshi/mpasm.php new file mode 100644 index 0000000..6c5f425 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/mpasm.php @@ -0,0 +1,158 @@ + 'Microchip Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*Directive Language*/ + 4 => array( + 'CONSTANT', '#DEFINE', 'END', 'EQU', 'ERROR', 'ERROR-LEVEL', '#INCLUDE', 'LIST', + 'MESSG', 'NOLIST', 'ORG', 'PAGE', 'PROCESSOR', 'RADIX', 'SET', 'SPACE', 'SUBTITLE', + 'TITLE', '#UNDEFINE', 'VARIABLE', 'ELSE', 'ENDIF', 'ENDW', 'IF', 'IFDEF', 'IFNDEF', + 'WHILE', '__BADRAM', 'CBLOCK', '__CONFIG', 'DA', 'DATA', 'DB', 'DE', 'DT', 'DW', + 'ENDC', 'FILL', '__IDLOCS', '__MAXRAM', 'RES', 'ENDM', 'EXITM', 'EXPAND', 'LOCAL', + 'MACRO', 'NOEXPAND', 'BANKISEL', 'BANKSEL', 'CODE', 'EXTERN', 'GLOBAL', 'IDATA', + 'PAGESEL', 'UDATA', 'UDATA_ACS', 'UDATA_OVR', 'UDATA_SHR' + ), + /* 12&14-bit Specific Instruction Set*/ + 1 => array( + 'andlw', 'call', 'clrwdt', 'goto', 'iorlw', 'movlw', 'option', 'retlw', 'sleep', + 'tris', 'xorlw', 'addwf', 'andwf', 'clrf', 'clrw', 'comf', 'decf', 'decfsz', 'incf', + 'incfsz', 'iorwf', 'movf', 'movwf', 'nop', 'rlf', 'rrf', 'subwf', 'swapf', 'xorwf', + 'bcf', 'bsf', 'btfsc', 'btfss', + 'addlw', 'iorlw', 'retfie', 'return', 'sublw', 'xorlw', 'addcf', 'adddcf', 'b', 'bc', 'bdc', + 'bnc', 'bndc', 'bnz', 'bz', 'clrc', 'clrdc', 'clrz', 'lcall', 'lgoto', 'movfw', + 'negf', 'setc', 'setdc', 'setz', 'skpc', 'skpdc', 'skpnc', 'skpndc', 'skpnz', 'skpz', + 'subcf', 'subdcf', 'tstf' + ), + /* 16-bit Specific Instructiob Set */ + 2 => array ( + 'movfp', 'movlb', 'movlp', 'movpf', 'movwf', 'tablrd', 'tablwt', 'tlrd', 'tlwt', + 'addwfc', 'daw', 'mullw', 'negw', 'rlcf', 'rlncf', 'rrcf', 'rrncf', 'setf', 'subwfb', + 'btg', 'cpfseq', 'cpfsgt', 'cpfslt', 'dcfsnz', 'infsnz', 'tstfsz', 'lfsr', 'bnn', + 'bnov', 'bra', 'pop', 'push', 'rcall', 'reset' + ), + /* Registers */ + 3 => array( + 'INDF', 'TMR0', 'PCL', 'STATUS', 'FSR', 'PORTA', 'PORTB', 'PORTC', 'PORTD', 'PORTE', + 'PCLATH', 'INTCON', 'PIR1', 'PIR2', 'TMR1L', 'TMR1H', 'T1CON', 'TMR2', 'T2CON', 'TMR2L', + 'TMR2H', 'TMR0H', 'TMR0L', 'SSPBUF', 'SSPCON', 'CCPR1L', 'CCPR1H', 'CCP1CON', 'RCSTA', + 'TXREG', 'RCREG', 'CCPR2L', 'CCPR2H', 'CCP2CON', 'OPTION', 'TRISA', 'TRISB', 'TRISC', + 'TRISD', 'TRISE', 'PIE2', 'PIE1', 'PR2', 'SSPADD', 'SSPSTAT', 'TXSTA', 'SPBRG' + ), + /*Operands*/ + 5 => array( + 'high','low' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #007f00;', + 4 => 'color: #46aa03; font-weight:bold;', + 5 => 'color: #7f0000;', + 6 => 'color: #7f0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '[0-9a-fA-F]{1,32}[hH]', + 1 => '[01]{1,64}[bB]' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/mysql.php b/ehcp/net2ftp/plugins/geshi/geshi/mysql.php new file mode 100644 index 0000000..143c532 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/mysql.php @@ -0,0 +1,181 @@ + 'MySQL', + 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 1, + 'QUOTEMARKS' => array("'", '"', ''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* Mix */ + 'ALTER DATABASE', 'ALTER TABLE', 'CREATE DATABASE', 'CREATE INDEX', 'CREATE TABLE', 'DROP DATABASE', + 'DROP INDEX', 'DROP TABLE', 'RENAME TABLE', 'DELETE', 'DO', 'HANDLER', 'INSERT', 'LOAD DATA INFILE', + 'REPLACE', 'SELECT', 'TRUNCATE', 'UPDATE', 'DESCRIBE', 'USE', 'START TRANSACTION', 'COMMIT', 'ROLLBACK', + 'SAVEPOINT', 'ROLLBACK TO SAVEPOINT', 'LOCK TABLES', 'UNLOCK_TABLES', 'SET TRANACTIONS', 'SET', 'SHOW', + 'CREATE PROCEDURE', 'CREATE FUNCTION', 'ALTER PROCEDURE', 'ALTER FUNCTION', 'DROP PROCEDURE', 'DROP FUNCTION', + 'SHOW CREATE PROCEDURE', 'SHOW CREATE FUNCTION', 'SHOW PROCEDURE STATUS', 'SHOW FUNCTION STATUS', + 'CALL', 'BEGIN', 'END', 'DECLARE', 'CREATE ROUTINE', 'ALTER ROUTINE', 'CREATE', 'ALTER', 'DROP', + 'PRIMARY KEY', 'VALUES', 'INTO', 'FROM', + 'ANALYZE', 'BDB', 'BERKELEYDB', 'BTREE', 'BY', 'CASCADE', 'CHECK', 'COLUMN', 'COLUMNS', 'CONSTRAINT', + 'CROSS', 'DATABASES', 'DELAYED', 'DISTINCT', 'DISTINCTROW', 'ENCLOSED', 'ERRORS', 'ESCAPED', 'EXISTS', + 'EXPLAIN', 'FALSE', 'FIELDS', 'FORCE', 'FOREIGN', 'FULLTEXT', 'GEOMETRY', 'GRANT', 'GROUP', 'HASH', + 'HAVING', 'HELP', 'HIGH_PRIORITY', 'IGNORE', 'INNER', 'INNODB', 'INTERVAL', 'JOIN', 'KEYS', 'KILL', + 'LINES', 'LOW_PRIORITY', 'MASTER_SERVER_ID', 'MATCH', 'MIDDLEINT', 'MRG_MYISAM', 'NATURAL', 'OPTIMIZE', + 'OPTION', 'OPTIONALLY', 'ORDER', 'OUTER', 'OUTFILE', 'PRIVILEGES', 'PURGE', 'READ', 'REFERENCES', + 'REQUIRE', 'RESTRICT', 'RETURNS', 'REVOKE', 'RLIKE', 'RTREE', 'SOME', 'SONAME', 'SPATIAL', 'SQL_BIG_RESULT', + 'SQL_CALC_FOUND_ROWS', 'SQL_SMALL_RESULT', 'SSL', 'STARTING', 'STRAIGHT_JOIN', 'STRIPED', 'TERMINATED', + 'TRUE', 'TYPES', 'UNION', 'USAGE', 'USER_RESOURCES', 'USING', 'VARCHARACTER', 'WARNINGS', 'WHERE', 'WRITE', + /* Control Flow Functions */ + 'CASE', 'WHEN', 'THEN', 'ELSE', 'END', + /* String Functions */ + 'UNHEX', 'BIN', 'BIT_LENGTH', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'COMPRESS', 'CONCAT', + 'CONCAT_WS', 'CONV', 'ELT', 'EXPORT_SET', 'FIELD', 'FIND_IN_SET', 'FORMAT', 'HEX', + 'INSERT', 'INSTR', 'LCASE', 'LEFT', 'LENGTH', 'LOAD_FILE', 'LOCATE', 'LOWER', 'LPAD', + 'LTRIM', 'MAKE_SET', 'MID', 'OCT', 'OCTET_LENGTH', 'ORD', 'POSITION', 'QUOTE', 'REPEAT', + 'REPLACE', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SOUNDEX', 'SPACE', 'SUBSTRING', + 'SUBSTRING_INDEX', 'TRIM', 'UCASE', 'UPPER', 'UNCOMPRESS', 'UNCOMPRESSD_LENGTH', + 'MD5', 'SHA1', + /* Numeric Functions */ + 'ABS', 'ACOS', 'ASIN', 'ATAN', 'ATAN2', 'CEILING', 'CEIL', 'COS', 'COT', 'CRC32', 'DEGREES', + 'EXP', 'FLOOR', 'LN', 'LOG', 'LOG2', 'LOG10', 'MOD', 'PI', 'POW', 'POWER', 'RADIANS', 'RAND', + 'ROUND', 'SIGN', 'SIN', 'SQRT', 'TAN', 'TRUNCATE', + /* Date and Time Functions */ + 'ADDDATE', 'ADDTIME', 'CONVERT_TZ', 'CURDATE', 'CURRENT_DATE', 'CURTIME', 'CURRENT_TIME', + 'CURRENT_TIMESTAMP', 'DATEDIFF', 'DATE_ADD', 'DATE_SUB', 'DATE_FORMAT', 'DAY', + 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'EXTRACT', 'FROM_DAYS', 'FROM_UNIXTIME', + 'GET_FORMAT', 'LAST_DAY', 'LOCALTIME', 'LOCALTIMESTAMP', 'MAKEDATE', 'MAKETIME', + 'MICROSECOND', 'MONTHNAME', 'NOW', 'PERIOD_ADD', 'PERIOD_DIFF', 'QUARTER', + 'SECOND', 'SEC_TO_TIME', 'STR_TO_DATE', 'SUBDATE', 'SUBTIME', 'SYSDATE', 'TIME', 'TIMEDIFF', + 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TO_DAYS', + 'UNIX_TIMESTAMP', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'WEEKDAY', 'WEEKOFYEAR', + 'YEARWEEK', + + ), + 2 => array( + 'INTEGER', 'SMALLINT', 'DECIMAL', 'NUMERIC', 'FLOAT', 'REAL', 'DOUBLE PRECISION', + 'DOUBLE', 'INT', 'DEC', 'BIT' ,'TINYINT', 'SMALLINT', 'MEDIUMINT', 'BIGINT', + 'DATETIME', 'DATE', 'TIMESTAMP', 'TIME', 'YEAR', + 'CHAR', 'VARCHAR', 'BINARY', 'CHARACTER VARYING', 'VARBINARY', 'TINYBLOB', 'TINYTEXT', + 'BLOB', 'TEXT','MEDIUMBLOB', 'MEDIUMTEXT', 'LONGBLOB', 'LONGTEXT', 'ENUM', 'SET', + 'SERIAL DEFAULT VALUE', 'SERIAL', 'FIXED' + ), + 3 => array( + 'ZEROFILL', 'NOT NULL', 'UNSIGNED', 'AUTO_INCREMENT', 'UNIQUE', 'NOT', 'NULL', 'CHARACTER SET', 'CHARSET', + 'ASCII', 'UNICODE', 'NATIONAL', 'BOTH', 'LEADING', 'TRAILING','DEFAULT' + ), + 4 => array( + 'MICROSECOND', 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR', 'SECOND_MICROSECOND', + 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'HOUR_MICROSECOND', 'HOUR_SECOND', 'HOUR_MINUTE', 'DAY_MICROSECOND', + 'DAY_SECOND', 'DAY_MINUTE', 'DAY_HOUR', 'YEAR_MONTH' + ), + 5 => array( + 'OR', 'XOR', 'AND', 'NOT', 'BETWEEN', 'IS', 'LIKE', 'REGEXP', 'IN', 'DIV', + 'MOD', 'BINARY', 'COLLATE', 'LIMIT', 'OFFSET' + ), + ), + 'SYMBOLS' => array( + ':=', + '||', 'OR', 'XOR', + '&&', 'AND', + 'NOT', + 'BETWEEN', 'CASE', 'WHEN', 'THEN', 'ELSE', + '=', '<=>', '>=', '>', '<=', '<', '<>', '!=', 'IS', 'LIKE', 'REGEXP', 'IN', + '|', + '&', + '<<', '>>', + '-', '+', + '*', '/', 'DIV', '%', 'MOD', + '^', + '-', '~', + '!', + 'BINARY', 'COLLATE', + '(', ')', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold;', + 2 => 'color: #aa9933; font-weight: bold;', + 3 => 'color: #aa3399; font-weight: bold;', + 4 => 'color: #33aa99; font-weight: bold;', + 5 => 'color: #993333; font-weight: bold;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;', + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/nsis.php b/ehcp/net2ftp/plugins/geshi/geshi/nsis.php new file mode 100644 index 0000000..bf8345a --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/nsis.php @@ -0,0 +1,352 @@ + 'NSIS', + 'COMMENT_SINGLE' => array(1 => ';', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'",'"','`'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + '!appendfile', '!addIncludeDir', '!addplugindir', '!cd', '!define', '!delfile', '!echo', '!else', + '!endif', '!error', '!execute', '!ifdef', '!ifmacrodef', '!ifmacrondef', '!ifndef', '!include', + '!insertmacro', '!macro', '!macroend', '!packhdr', '!tempfile', '!system', '!undef', '!verbose', + '!warning' + ), + 2 => array( + 'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont', + 'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText', + 'CRCCheck', 'DetailsButtonText', 'DirShow', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText', + 'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir', + 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LangStringUP', 'LicenseBkColor', + 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile', + 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'Section', + 'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails', + 'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection', + 'SubSectionEnd', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption', + 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIProductVersion', 'WindowIcon', 'XPStyle' + ), + 3 => array( + 'AddSize', 'AllowSkipFiles', 'AutoCloseWindow', 'FileBufSize', 'GetInstDirError', 'PageCallbacks', + 'SectionIn', 'SetCompress', 'SetCompressionLevel', 'SetCompressorDictSize', + 'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload' + ), + 4 => array( + 'Abort', 'BringToFront', 'Call', 'CallInstDLL', 'ClearErrors', 'CopyFiles','CreateDirectory', + 'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey', + 'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec', + 'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead', + 'FileReadByte', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FindClose', 'FindFirst', 'FindNext', + 'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion', + 'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName', + 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'GetWindowText', 'Goto', 'HideWindow', + 'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText', + 'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText', + 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadIniStr', 'ReadRegDWORD', 'ReadRegStr', + 'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags', + 'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes', + 'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors', + 'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes', + 'SetOutPath', 'SetRebootFlag', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp', + 'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr', + 'WriteRegStr', 'WriteUninstaller' + ), + 5 => array( + 'all', 'alwaysoff', 'ARCHIVE', 'auto', 'both', 'bzip2', 'checkbox', 'components', 'current', + 'custom', 'directory', 'false', 'FILE_ATTRIBUTE_ARCHIVE', 'FILE_ATTRIBUTE_HIDDEN', 'FILE_ATTRIBUTE_NORMAL', + 'FILE_ATTRIBUTE_OFFLINE', 'FILE_ATTRIBUTE_READONLY', 'FILE_ATTRIBUTE_SYSTEM,TEMPORARY', + 'FILE_ATTRIBUTE_TEMPORARY', 'force', 'HIDDEN', 'hide', 'HKCC', 'HKCR', 'HKCU', 'HKDD', 'HKEY_CLASSES_ROOT', + 'HKEY_CURRENT_CONFIG', 'HKEY_CURRENT_USER', 'HKEY_DYN_DATA', 'HKEY_LOCAL_MACHINE', 'HKEY_PERFORMANCE_DATA', + 'HKEY_USERS', 'HKLM', 'HKPD', 'HKU', 'IDABORT', 'IDCANCEL', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDYES', + 'ifdiff', 'ifnewer', 'instfiles', 'lastused', 'leave', 'license', 'listonly', 'lzma', 'manual', + 'MB_ABORTRETRYIGNORE', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4', + 'MB_ICONEXCLAMATION', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_OK', 'MB_OKCANCEL', + 'MB_RETRYCANCEL', 'MB_RIGHT', 'MB_SETFOREGROUND', 'MB_TOPMOST', 'MB_YESNO', 'MB_YESNOCANCEL', 'nevershow', + 'none', 'normal', 'off', 'OFFLINE', 'on', 'radiobuttons', 'READONLY', 'RO', 'SHCTX', 'SHELL_CONTEXT', 'show', + 'silent', 'silentlog', 'SW_HIDE', 'SW_SHOWMAXIMIZED', 'SW_SHOWMINIMIZED', 'SW_SHOWNORMAL', 'SYSTEM', + 'textonly', 'true', 'try', 'uninstConfirm', 'zlib' + ), + 6 => array( + '/a', '/components', '/COMPONENTSONLYONCUSTOM', '/CUSTOMSTRING', '/e', '/FILESONLY', '/FINAL', '/gray', '/GLOBAL', + '/ifempty', '/IMGID', '/ITALIC', '/lang', '/NOCUSTOM', '/nonfatal', '/NOUNLOAD', '/oname', '/r', '/REBOOTOK', + '/RESIZETOFIT', '/SOLID', '/SD', '/SHORT', '/silent', '/SOLID', '/STRIKE', '/TIMEOUT', '/TRIMCENTER', '/TRIMLEFT', + '/TRIMRIGHT', '/UNDERLINE', '/windows', '/x' + ), + 7 => array( + '.onGUIEnd', '.onGUIInit', '.onInit', '.onInstFailed', '.onInstSuccess', '.onMouseOverSection', + '.onRebootFailed', '.onSelChange', '.onUserAbort', '.onVerifyInstDir', 'un.onGUIEnd', 'un.onGUIInit', + 'un.onInit', 'un.onRebootFailed', 'un.onUninstFailed', 'un.onUninstSuccess', 'un.onUserAbort' + ), + 8 => array( + 'MUI.nsh', '"${NSISDIR}\Contrib\Modern UI\System.nsh"', 'MUI_SYSVERSION', 'MUI_ICON', 'MUI_UNICON', + 'MUI_HEADERIMAGE', 'MUI_HEADERIMAGE_BITMAP', 'MUI_HEADERIMAGE_BITMAP_NOSTRETCH', 'MUI_HEADERIMAGE_BITMAP_RTL', + 'MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_UNBITMAP', 'MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH', + 'MUI_HEADERIMAGE_UNBITMAP_RTL', 'MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_RIGHT', 'MUI_BGCOLOR', + 'MUI_UI', 'MUI_UI_HEADERIMAGE', 'MUI_UI_HEADERIMAGE_RIGHT', 'MUI_UI_COMPONENTSPAGE_SMALLDESC', + 'MUI_UI_COMPONENTSPAGE_NODESC', 'MUI_WELCOMEFINISHPAGE_BITMAP', 'MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH', + 'MUI_WELCOMEFINISHPAGE_INI', 'MUI_UNWELCOMEFINISHPAGE_BITMAP', 'MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH', + 'MUI_UNWELCOMEFINISHPAGE_INI', 'MUI_LICENSEPAGE_BGCOLOR', 'MUI_COMPONENTSPAGE_CHECKBITMAP', + 'MUI_COMPONENTSPAGE_SMALLDESC', 'MUI_COMPONENTSPAGE_NODESC', 'MUI_INSTFILESPAGE_COLORS', + 'MUI_INSTFILESPAGE_PROGRESSBAR', 'MUI_FINISHPAGE_NOAUTOCLOSE', 'MUI_UNFINISHPAGE_NOAUTOCLOSE', + 'MUI_ABORTWARNING', 'MUI_ABORTWARNING_TEXT', 'MUI_UNABORTWARNING', 'MUI_UNABORTWARNING_TEXT', + 'MUI_PAGE_WELCOME', 'MUI_PAGE_LICENSE', 'MUI_PAGE_COMPONENTS', 'MUI_PAGE_DIRECTORY', + 'MUI_PAGE_STARTMENU', 'MUI_PAGE_INSTFILES', 'MUI_PAGE_FINISH', 'MUI_UNPAGE_WELCOME', + 'MUI_UNPAGE_CONFIRM', 'MUI_UNPAGE_LICENSE', 'MUI_UNPAGE_COMPONENTS', 'MUI_UNPAGE_DIRECTORY', + 'MUI_UNPAGE_INSTFILES', 'MUI_UNPAGE_FINISH', 'MUI_PAGE_HEADER_TEXT', 'MUI_PAGE_HEADER_SUBTEXT', + 'MUI_WELCOMEPAGE_TITLE', 'MUI_WELCOMEPAGE_TITLE_3LINES', 'MUI_WELCOMEPAGE_TEXT', + 'MUI_LICENSEPAGE_TEXT_TOP', 'MUI_LICENSEPAGE_TEXT_BOTTOM', 'MUI_LICENSEPAGE_BUTTON', + 'MUI_LICENSEPAGE_CHECKBOX', 'MUI_LICENSEPAGE_CHECKBOX_TEXT', 'MUI_LICENSEPAGE_RADIOBUTTONS', + 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT', 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE', + 'MUI_COMPONENTSPAGE_TEXT_TOP', 'MUI_COMPONENTSPAGE_TEXT_COMPLIST', 'MUI_COMPONENTSPAGE_TEXT_INSTTYPE', + 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE', 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO', + 'MUI_DIRECTORYPAGE_TEXT_TOP', 'MUI_DIRECTORYPAGE_TEXT_DESTINATION', 'MUI_DIRECTORYPAGE_VARIABLE', + 'MUI_DIRECTORYPAGE_VERIFYONLEAVE', 'MUI_STARTMENU_WRITE_BEGIN', 'MUI_STARTMENU_WRITE_END', + 'MUI_STARTMENUPAGE_TEXT_TOP', 'MUI_STARTMENUPAGE_TEXT_CHECKBOX', 'MUI_STARTMENUPAGE_DEFAULTFOLDER', + 'MUI_STARTMENUPAGE_NODISABLE', 'MUI_STARTMENUPAGE_REGISTRY_ROOT', 'MUI_STARTMENUPAGE_REGISTRY_KEY', + 'MUI_STARTMENUPAGE_REGISTRY_VALUENAME', 'MUI_INSTFILESPAGE_FINISHHEADER_TEXT', + 'MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT', 'MUI_INSTFILESPAGE_ABORTHEADER_TEXT', + 'MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT', 'MUI_FINISHPAGE_TITLE', 'MUI_FINISHPAGE_TITLE_3LINES', + 'MUI_FINISHPAGE_TEXT', 'MUI_FINISHPAGE_TEXT_LARGE', 'MUI_FINISHPAGE_BUTTON', + 'MUI_FINISHPAGE_TEXT_REBOOT', 'MUI_FINISHPAGE_TEXT_REBOOTNOW', 'MUI_FINISHPAGE_TEXT_REBOOTLATER', + 'MUI_FINISHPAGE_RUN', 'MUI_FINISHPAGE_RUN_TEXT', 'MUI_FINISHPAGE_RUN_PARAMETERS', + 'MUI_FINISHPAGE_RUN_NOTCHECKED', 'MUI_FINISHPAGE_RUN_FUNCTION', 'MUI_FINISHPAGE_SHOWREADME', + 'MUI_FINISHPAGE_SHOWREADME_TEXT', 'MUI_FINISHPAGE_SHOWREADME_NOTCHECKED', + 'MUI_FINISHPAGE_SHOWREADME_FUNCTION', 'MUI_FINISHPAGE_LINK', 'MUI_FINISHPAGE_LINK_LOCATION', + 'MUI_FINISHPAGE_LINK_COLOR', 'MUI_FINISHPAGE_NOREBOOTSUPPORT', 'MUI_UNCONFIRMPAGE_TEXT_TOP', + 'MUI_UNCONFIRMPAGE_TEXT_LOCATION', 'MUI_LANGUAGE', 'MUI_LANGDLL_DISPLAY', + 'MUI_LANGDLL_REGISTRY_ROOT', 'MUI_LANGDLL_REGISTRY_KEY', 'MUI_LANGDLL_REGISTRY_VALUENAME', + 'MUI_LANGDLL_WINDOWTITLE', 'MUI_LANGDLL_INFO', 'MUI_LANGDLL_ALWAYSSHOW', + 'MUI_RESERVEFILE_INSTALLOPTIONS', 'MUI_RESERVEFILE_LANGDLL', 'MUI_FUNCTION_DESCRIPTION_BEGIN', + 'MUI_DESCRIPTION_TEXT', 'MUI_FUNCTION_DESCRIPTION_END', 'MUI_INSTALLOPTIONS_EXTRACT', + 'MUI_INSTALLOPTIONS_EXTRACT_AS', 'MUI_HEADER_TEXT', 'MUI_INSTALLOPTIONS_DISPLAY', + 'MUI_INSTALLOPTIONS_INITDIALOG', 'MUI_INSTALLOPTIONS_SHOW', + 'MUI_INSTALLOPTIONS_DISPLAY_RETURN', 'MUI_INSTALLOPTIONS_SHOW_RETURN', + 'MUI_INSTALLOPTIONS_READ', 'MUI_INSTALLOPTIONS_WRITE', + 'MUI_CUSTOMFUNCTION_GUIINIT', 'MUI_CUSTOMFUNCTION_GUIINIT', + 'MUI_CUSTOMFUNCTION_UNGUIINIT', 'MUI_CUSTOMFUNCTION_ABORT', 'MUI_CUSTOMFUNCTION_UNABORT', + 'MUI_PAGE_CUSTOMFUNCTION_PRE', 'MUI_PAGE_CUSTOMFUNCTION_SHOW', 'MUI_PAGE_CUSTOMFUNCTION_LEAVE', + 'MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT' + ), + 9 => array( + 'LogicLib.nsh', '${LOGICLIB}', 'LOGICLIB_STRCMP', 'LOGICLIB_INT64CMP', 'LOGICLIB_SECTIONCMP', '${If}', '${Unless}', + '${ElseIf}', '${ElseUnless}', '${Else}', '${EndIf}', '${EndUnless}', '${AndIf}', '${AndUnless}', + '${OrIf}', '${OrUnless}', '${IfThen}', '${IfCmd}', '${Select}', '${Case2}', '${Case3}', + '${Case4}', '${Case5}', '${CaseElse}', '${Default}', '${EndSelect}', '${Switch}', + '${Case}', '${EndSwitch}', '${Do}', '${DoWhile}', '${UntilWhile}', '${Continue}', '${Break}', + '${Loop}', '${LoopWhile}', '${LoopUntil}', '${While}', '${ExitWhile}', '${EndWhile}', '${For}', + '${ForEach}', '${ExitFor}', '${Next}', '${Abort}', '${Errors}', '${RebootFlag}', '${Silent}', + '${FileExists}', '${Cmd}', '${SectionIsSelected}', '${SectionIsSectionGroup}', + '${SectionIsSectionGroupEnd}', '${SectionIsBold}', '${SectionIsReadOnly}', + '${SectionIsExpanded}', '${SectionIsPartiallySelected}' + ), + 10 => array( + 'StrFunc.nsh', '${STRFUNC}', '${StrCase}', '${StrClb}', '${StrIOToNSIS}', '${StrLoc}', '${StrNSISToIO}', '${StrRep}', + '${StrSort}', '${StrStr}', '${StrStrAdv}', '${StrTok}', '${StrTrimNewLines}' + ), + 11 => array( + 'UpgradeDLL.nsh', 'UPGRADEDLL_INCLUDED', 'UpgradeDLL' + ), + 12 => array( + 'Sections.nsh', 'SECTIONS_INCLUDED', '${SF_SELECTED}', '${SF_SECGRP}', '${SF_SUBSEC}', '${SF_SECGRPEND}', + '${SF_SUBSECEND}', '${SF_BOLD}', '${SF_RO}', '${SF_EXPAND}', '${SF_PSELECTED}', '${SF_TOGGLED}', + '${SF_NAMECHG}', '${SECTION_OFF}', 'SelectSection', 'UnselectSection', 'ReverseSection', + 'StartRadioButtons', 'RadioButton', 'EndRadioButtons', '${INSTTYPE_1}', '${INSTTYPE_1}', '${INSTTYPE_2}', + '${INSTTYPE_3}', '${INSTTYPE_4}', '${INSTTYPE_5}', '${INSTTYPE_6}', '${INSTTYPE_7}', '${INSTTYPE_8}', + '${INSTTYPE_9}', '${INSTTYPE_10}', '${INSTTYPE_11}', '${INSTTYPE_12}', '${INSTTYPE_13}', '${INSTTYPE_14}', + '${INSTTYPE_15}', '${INSTTYPE_16}', '${INSTTYPE_17}', '${INSTTYPE_18}', '${INSTTYPE_19}', '${INSTTYPE_20}', + '${INSTTYPE_21}', '${INSTTYPE_22}', '${INSTTYPE_23}', '${INSTTYPE_24}', '${INSTTYPE_25}', '${INSTTYPE_26}', + '${INSTTYPE_27}', '${INSTTYPE_28}', '${INSTTYPE_29}', '${INSTTYPE_30}', '${INSTTYPE_31}', '${INSTTYPE_32}', + 'SetSectionInInstType', 'ClearSectionInInstType', 'SetSectionFlag', 'ClearSectionFlag', 'SectionFlagIsSet' + ), + 13 => array( + 'Colors.nsh', 'WHITE', 'BLACK', 'YELLOW', 'RED', 'GREEN', 'BLUE', 'MAGENTA', 'CYAN', 'rgb2hex' + ), + 14 => array( + 'FileFunc.nsh', '${Locate}', '${GetSize}', '${DriveSpace}', '${GetDrives}', '${GetTime}', '${GetFileAttributes}', '${GetFileVersion}', '${GetExeName}', '${GetExePath}', '${GetParameters}', '${GetOptions}', '${GetRoot}', '${GetParent}', '${GetFileName}', '${GetBaseName}', '${GetFileExt}', '${BannerTrimPath}', '${DirState}', '${RefreshShellIcons}' + ), + 15 => array( + 'TextFunc.nsh', '${LineFind}', '${LineRead}', '${FileReadFromEnd}', '${LineSum}', '${FileJoin}', '${TextCompare}', '${ConfigRead}', '${ConfigWrite}', '${FileRecode}', '${TrimNewLines}' + ), + 16 => array( + 'WordFunc.nsh', '${WordFind}', '${WordFind2X}', '${WordFind3X}', '${WordReplace}', '${WordAdd}', '${WordInsert}', '${StrFilter}', '${VersionCompare}', '${VersionConvert}' + ) + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + 14 => false, + 15 => false, + 16 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight:bold;', + 2 => 'color: #000066;', + 3 => 'color: #003366;', + 4 => 'color: #000099;', + 5 => 'color: #ff6600;', + 6 => 'color: #ff6600;', + 7 => 'color: #006600;', + 8 => 'color: #006600;', + 9 => 'color: #006600;', + 10 => 'color: #006600;', + 11 => 'color: #006600;', + 12 => 'color: #006600;', + 13 => 'color: #006600;', + 14 => 'color: #006600;', + 15 => 'color: #006600;', + 16 => 'color: #006600;' + ), + 'COMMENTS' => array( + 1 => 'color: #666666; font-style: italic;', + 2 => 'color: #666666; font-style: italic;', + 'MULTI' => 'color: #666666; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #660066; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #660066;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => '' + ), + 'REGEXPS' => array( + 0 => 'color: #660000;', + 1 => 'color: #660000;', + 2 => 'color: #660000;', + 3 => 'color: #660000;', + 4 => 'color: #660000;', + 5 => 'color: #660000;', + 6 => 'color: #660000;', + 7 => 'color: #000099;', + 8 => 'color: #003399;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => '', + 10 => '', + 11 => '', + 12 => '', + 13 => '', + 14 => '', + 15 => '', + 16 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\$\$', + 1 => '\$\\r', + 2 => '\$\\n', + 3 => '\$\\t', + 4 => '\$[a-zA-Z0-9_]+', + 5 => '\$\{.{1,256}\}', + 6 => '\$\\\(.{1,256}\\\)', + 7 => array( + GESHI_SEARCH => '([^:/\\\*\?\"\<\>\|\s]*?)(::)([^:/\\\*\?\"\<\>\|\s]*?)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2\\3' + ), + 8 => array( + GESHI_SEARCH => '([^:/\\\*\?\"\<\>\|\s]*?)(::)([^:/\\\*\?\"\<\>\|]*?\s)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1\\2', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/objc.php b/ehcp/net2ftp/plugins/geshi/geshi/objc.php new file mode 100644 index 0000000..9adf732 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/objc.php @@ -0,0 +1,239 @@ + 'Objective C', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'nil', 'Nil', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC' + ), + 3 => array( + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( // Data types: + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + // OpenStep/GNUstep/Cocoa: + 'SEL', 'id', 'NSRect', 'NSRange', 'NSPoint', 'NSZone', 'Class', 'IMP', 'BOOL', + // OpenStep/GNUstep/Cocoa @identifiers + '@selector', '@class', '@protocol', '@interface', '@implementation', '@end', + '@private', '@protected', '@public', '@try', '@throw', '@catch', '@finally', + '@encode', '@defs', '@synchronized' + ), + 5 => array( // OpenStep/GNUstep/Cocoa Foundation + 'NSAppleEventDescriptor', 'NSNetService', 'NSAppleEventManager', + 'NSNetServiceBrowser', 'NSAppleScript', 'NSNotification', 'NSArchiver', + 'NSNotificationCenter', 'NSArray', 'NSNotificationQueue', 'NSAssertionHandler', + 'NSNull', 'NSAttributedString', 'NSNumber', 'NSAutoreleasePool', + 'NSNumberFormatter', 'NSBundle', 'NSObject', 'NSCachedURLResponse', + 'NSOutputStream', 'NSCalendarDate', 'NSPipe', 'NSCharacterSet', 'NSPort', + 'NSClassDescription', 'NSPortCoder', 'NSCloneCommand', 'NSPortMessage', + 'NSCloseCommand', 'NSPortNameServer', 'NSCoder', 'NSPositionalSpecifier', + 'NSConditionLock', 'NSProcessInfo', 'NSConnection', 'NSPropertyListSerialization', + 'NSCountCommand', 'NSPropertySpecifier', 'NSCountedSet', 'NSProtocolChecker', + 'NSCreateCommand', 'NSProxy', 'NSData', 'NSQuitCommand', 'NSDate', + 'NSRandomSpecifier', 'NSDateFormatter', 'NSRangeSpecifier', 'NSDecimalNumber', + 'NSRecursiveLock', 'NSDecimalNumberHandler', 'NSRelativeSpecifier', + 'NSDeleteCommand', 'NSRunLoop', 'NSDeserializer', 'NSScanner', 'NSDictionary', + 'NSScriptClassDescription', 'NSDirectoryEnumerator', 'NSScriptCoercionHandler', + 'NSDistantObject', 'NSScriptCommand', 'NSDistantObjectRequest', + 'NSScriptCommandDescription', 'NSDistributedLock', 'NSScriptExecutionContext', + 'NSDistributedNotificationCenter', 'NSScriptObjectSpecifier', 'NSEnumerator', + 'NSScriptSuiteRegistry', 'NSError', 'NSScriptWhoseTest', 'NSException', + 'NSSerializer', 'NSExistsCommand', 'NSSet', 'NSFileHandle', 'NSSetCommand', + 'NSFileManager', 'NSSocketPort', 'NSFormatter', 'NSSocketPortNameServer', + 'NSGetCommand', 'NSSortDescriptor', 'NSHost', 'NSSpecifierTest', 'NSHTTPCookie', + 'NSSpellServer', 'NSHTTPCookieStorage', 'NSStream', 'NSHTTPURLResponse', + 'NSString', 'NSIndexSet', 'NSTask', 'NSIndexSpecifier', 'NSThread', + 'NSInputStream', 'NSTimer', 'NSInvocation', 'NSTimeZone', 'NSKeyedArchiver', + 'NSUnarchiver', 'NSKeyedUnarchiver', 'NSUndoManager', 'NSLock', + 'NSUniqueIDSpecifier', 'NSLogicalTest', 'NSURL', 'NSMachBootstrapServer', + 'NSURLAuthenticationChallenge', 'NSMachPort', 'NSURLCache', 'NSMessagePort', + 'NSURLConnection', 'NSMessagePortNameServer', 'NSURLCredential', + 'NSMethodSignature', 'NSURLCredentialStorage', 'NSMiddleSpecifier', + 'NSURLDownload', 'NSMoveCommand', 'NSURLHandle', 'NSMutableArray', + 'NSURLProtectionSpace', 'NSMutableAttributedString', 'NSURLProtocol', + 'NSMutableCharacterSet', 'NSURLRequest', 'NSMutableData', 'NSURLResponse', + 'NSMutableDictionary', 'NSUserDefaults', 'NSMutableIndexSet', 'NSValue', + 'NSMutableSet', 'NSValueTransformer', 'NSMutableString', 'NSWhoseSpecifier', + 'NSMutableURLRequest', 'NSXMLParser', 'NSNameSpecifier' + ), + 6 => array( // OpenStep/GNUstep/Cocoa AppKit + 'NSActionCell', 'NSOpenGLPixelFormat', 'NSAffineTransform', 'NSOpenGLView', + 'NSAlert', 'NSOpenPanel', 'NSAppleScript Additions', 'NSOutlineView', + 'NSApplication', 'NSPageLayout', 'NSArrayController', 'NSPanel', + 'NSATSTypesetter', 'NSParagraphStyle', 'NSPasteboard', 'NSBezierPath', + 'NSPDFImageRep', 'NSBitmapImageRep', 'NSPICTImageRep', 'NSBox', 'NSPopUpButton', + 'NSBrowser', 'NSPopUpButtonCell', 'NSBrowserCell', 'NSPrinter', 'NSPrintInfo', + 'NSButton', 'NSPrintOperation', 'NSButtonCell', 'NSPrintPanel', 'NSCachedImageRep', + 'NSProgressIndicator', 'NSCell', 'NSQuickDrawView', 'NSClipView', 'NSResponder', + 'NSRulerMarker', 'NSColor', 'NSRulerView', 'NSColorList', 'NSSavePanel', + 'NSColorPanel', 'NSScreen', 'NSColorPicker', 'NSScroller', 'NSColorWell', + 'NSScrollView', 'NSComboBox', 'NSSearchField', 'NSComboBoxCell', + 'NSSearchFieldCell', 'NSControl', 'NSSecureTextField', 'NSController', + 'NSSecureTextFieldCell', 'NSCursor', 'NSSegmentedCell', 'NSCustomImageRep', + 'NSSegmentedControl', 'NSDocument', 'NSShadow', 'NSDocumentController', + 'NSSimpleHorizontalTypesetter', 'NSDrawer', 'NSSlider', 'NSEPSImageRep', + 'NSSliderCell', 'NSEvent', 'NSSound', 'NSFileWrapper', 'NSSpeechRecognizer', + 'NSFont', 'NSSpeechSynthesizer', 'NSFontDescriptor', 'NSSpellChecker', + 'NSFontManager', 'NSSplitView', 'NSFontPanel', 'NSStatusBar', 'NSForm', + 'NSStatusItem', 'NSFormCell', 'NSStepper', 'NSGlyphGenerator', 'NSStepperCell', + 'NSGlyphInfo', 'NSGraphicsContext', 'NSTableColumn', 'NSHelpManager', + 'NSTableHeaderCell', 'NSImage', 'NSTableHeaderView', 'NSImageCell', 'NSTableView', + 'NSImageRep', 'NSTabView', 'NSImageView', 'NSTabViewItem', 'NSInputManager', + 'NSText', 'NSInputServer', 'NSTextAttachment', 'NSLayoutManager', + 'NSTextAttachmentCell', 'NSMatrix', 'NSTextContainer', 'NSMenu', 'NSTextField', + 'NSMenuItem', 'NSTextFieldCell', 'NSMenuItemCell', 'NSTextStorage', 'NSMenuView', + 'NSTextTab', 'NSMovie', 'NSTextView', 'NSMovieView', 'NSToolbar', 'NSToolbarItem', + 'NSMutableParagraphStyle', 'NSTypesetter', 'NSNib', 'NSNibConnector', + 'NSUserDefaultsController', 'NSNibControlConnector', 'NSView', + 'NSNibOutletConnector', 'NSWindow', 'NSObjectController', 'NSWindowController', + 'NSOpenGLContext', 'NSWorkspace', 'NSOpenGLPixelBuffer' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;', + 6 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #002200;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #002200;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '', + 5 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/{FNAME}.html', + 6 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/{FNAME}.html' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/ocaml-brief.php b/ehcp/net2ftp/plugins/geshi/geshi/ocaml-brief.php new file mode 100644 index 0000000..13d90c9 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/ocaml-brief.php @@ -0,0 +1,112 @@ + 'OCaml', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "", + 'KEYWORDS' => array( + /* main OCaml keywords */ + 1 => array( + 'and', 'As', 'asr', 'begin', 'Class', 'Closed', 'constraint', 'do', 'done', 'downto', 'else', + 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor', + 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor', + 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser', + 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then', + 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with' + ) + ), + /* highlighting symbols is really important in OCaml */ + 'SYMBOLS' => array( + ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+', + '>', '<', '(', ')', '[', ']', '&', '|', '#', "'" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;' /* nice blue */ + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #6c6;' + ), + 'STRINGS' => array( + 0 => 'color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: #c6c;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #a52a2a;' /* maroon */ + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/ocaml.php b/ehcp/net2ftp/plugins/geshi/geshi/ocaml.php new file mode 100644 index 0000000..70a9928 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/ocaml.php @@ -0,0 +1,161 @@ + 'OCaml', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "", + 'KEYWORDS' => array( + /* main OCaml keywords */ + 1 => array( + 'and', 'As', 'asr', 'begin', 'Class', 'Closed', 'constraint', 'do', 'done', 'downto', 'else', + 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor', + 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor', + 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser', + 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then', + 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with' + ), + /* define names of main librarys, so we can link to it */ + 2 => array( + 'Arg', 'Arith_status', 'Array', 'ArrayLabels', 'Big_int', 'Bigarray', 'Buffer', 'Callback', + 'CamlinternalOO', 'Char', 'Complex', 'Condition', 'Dbm', 'Digest', 'Dynlink', 'Event', + 'Filename', 'Format', 'Gc', 'Genlex', 'Graphics', 'GraphicsX11', 'Hashtbl', 'Int32', 'Int64', + 'Lazy', 'Lexing', 'List', 'ListLabels', 'Map', 'Marshal', 'MoreLabels', 'Mutex', 'Nativeint', + 'Num', 'Obj', 'Oo', 'Parsing', 'Pervasives', 'Printexc', 'Printf', 'Queue', 'Random', 'Scanf', + 'Set', 'Sort', 'Stack', 'StdLabels', 'Str', 'Stream', 'String', 'StringLabels', 'Sys', 'Thread', + 'ThreadUnix', 'Tk' + ), + /* just link to the Pervasives functions library, cause it's the default opened library when starting OCaml */ + 3 => array( + 'raise', 'invalid_arg', 'failwith', 'compare', 'min', 'max', 'succ', 'pred', 'mod', 'abs', + 'max_int', 'min_int', 'sqrt', 'exp', 'log', 'log10', 'cos', 'sin', 'tan', 'acos', 'asin', + 'atan', 'atan2', 'cosh', 'sinh', 'tanh', 'ceil', 'floor', 'abs_float', 'mod_float', 'frexp', + 'ldexp', 'modf', 'float', 'float_of_int', 'truncate', 'int_of_float', 'infinity', 'nan', + 'max_float', 'min_float', 'epsilon_float', 'classify_float', 'int_of_char', 'char_of_int', + 'ignore', 'string_of_bool', 'bool_of_string', 'string_of_int', 'int_of_string', + 'string_of_float', 'float_of_string', 'fst', 'snd', 'stdin', 'stdout', 'stderr', 'print_char', + 'print_string', 'print_int', 'print_float', 'print_endline', 'print_newline', 'prerr_char', + 'prerr_string', 'prerr_int', 'prerr_float', 'prerr_endline', 'prerr_newline', 'read_line', + 'read_int', 'read_float', 'open_out', 'open_out_bin', 'open_out_gen', 'flush', 'flush_all', + 'output_char', 'output_string', 'output', 'output_byte', 'output_binary_int', 'output_value', + 'seek_out', 'pos_out', 'out_channel_length', 'close_out', 'close_out_noerr', 'set_binary_mode_out', + 'open_in', 'open_in_bin', 'open_in_gen', 'input_char', 'input_line', 'input', 'really_input', + 'input_byte', 'input_binary_int', 'input_value', 'seek_in', 'pos_in', 'in_channel_length', + 'close_in', 'close_in_noerr', 'set_binary_mode_in', 'incr', 'decr', 'string_of_format', + 'format_of_string', 'exit', 'at_exit' + ), + /* here Pervasives Types */ + 4 => array ( + 'fpclass', 'in_channel', 'out_channel', 'open_flag', 'Sys_error', 'ref', 'format' + ), + /* finally Pervasives Exceptions */ + 5 => array ( + 'Exit', 'Invalid_Argument', 'Failure', 'Division_by_zero' + ) + ), + /* highlighting symbols is really important in OCaml */ + 'SYMBOLS' => array( + ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+', + '>', '<', '(', ')', '[', ']', '&', '|', '#', "'" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => true, /* functions name are case seinsitive */ + 3 => true, /* types name too */ + 4 => true /* finally exceptions too */ + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;' /* nice blue */ + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #6c6;' + ), + 'STRINGS' => array( + 0 => 'color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: #c6c;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #a52a2a;' /* maroon */ + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + /* some of keywords are Pervasives functions (land, lxor, asr, ...) */ + 1 => '', + /* link to the wanted library */ + 2 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/{FNAME}.html', + /* link to Pervasives functions */ + 3 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL{FNAME}', + /* link to Pervasives type */ + 4 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#TYPE{FNAME}', + /* link to Pervasives exceptions */ + 5 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#EXCEPTION{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/oobas.php b/ehcp/net2ftp/plugins/geshi/geshi/oobas.php new file mode 100644 index 0000000..f3e5973 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/oobas.php @@ -0,0 +1,130 @@ + 'OpenOffice.org Basic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'dim','private','public','global','as','if','redim','true','set', + 'byval', + 'false','bool','double','integer','long','object','single','variant', + 'msgbox','print','inputbox','green','blue','red','qbcolor', + 'rgb','open','close','reset','freefile','get','input','line', + 'put','write','loc','seek','eof','lof','chdir','chdrive', + 'curdir','dir','fileattr','filecopy','filedatetime','fileexists', + 'filelen','getattr','kill','mkdir','name','rmdir','setattr', + 'dateserial','datevalue','day','month','weekday','year','cdatetoiso', + 'cdatefromiso','hour','minute','second','timeserial','timevalue', + 'date','now','time','timer','erl','err','error','on','error','goto','resume', + 'and','eqv','imp','not','or','xor','mod','','atn','cos','sin','tan','log', + 'exp','rnd','randomize','sqr','fix','int','abs','sgn','hex','oct', + 'it','then','else','select','case','iif','do','loop','for','next', + 'while','wend','gosub','return','goto','on','goto','call','choose','declare', + 'end','exit','freelibrary','function','rem','stop','sub','switch','with', + 'cbool','cdate','cdbl','cint','clng','const','csng','cstr','defbool', + 'defdate','defdbl','defint','deflng','asc','chr','str','val','cbyte', + 'space','string','format','lcase','left','lset','ltrim','mid','right', + 'rset','rtrim','trim','ucase','split','join','converttourl','convertfromurl', + 'instr','len','strcomp','beep','shell','wait','getsystemticks','environ', + 'getsolarversion','getguitype','twipsperpixelx','twipsperpixely', + 'createunostruct','createunoservice','getprocessservicemanager', + 'createunodialog','createunolistener','createunovalue','thiscomponent', + 'globalscope' + ) + ), + 'SYMBOLS' => array( + '(', ')', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/oracle8.php b/ehcp/net2ftp/plugins/geshi/geshi/oracle8.php new file mode 100644 index 0000000..e2a6dd3 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/oracle8.php @@ -0,0 +1,487 @@ + 'Oracle 8 SQL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( +//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source; + 6 => array( + ), + +//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables; + 5 => array( + ), + +//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views; + 4 => array( + ), + +//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns; + 3 => array( + ), +//Put ORACLE reserved keywords here (8.1.7). I like mine uppercase. + 1 => array( + 'ABS', + 'ACCESS', + 'ACOS', + 'ADD', + 'ADD_MONTHS', + 'ALL', + 'ALTER', + 'ANALYZE', + 'AND', + 'ANY', + 'ARRAY', + 'AS', + 'ASC', + 'ASCII', + 'ASIN', + 'ASSOCIATE', + 'AT', + 'ATAN', + 'ATAN2', + 'AUDIT', + 'AUTHID', + 'AVG', + 'BEGIN', + 'BETWEEN', + 'BFILENAME', + 'BINARY_INTEGER', + 'BITAND', + 'BODY', + 'BOOLEAN', + 'BULK', + 'BY', + 'CALL', + 'CASCADE', + 'CASE', + 'CEIL', + 'CHAR', + 'CHAR_BASE', + 'CHARTOROWID', + 'CHECK', + 'CHR', + 'CLOSE', + 'CLUSTER', + 'COALESCE', + 'COLLECT', + 'COLUMN', + 'COMMENT', + 'COMMIT', + 'COMPRESS', + 'CONCAT', + 'CONNECT', + 'CONSTANT', + 'CONSTRAINT', + 'CONSTRAINTS', + 'CONTEXT', + 'CONTROLFILE', + 'CONVERT', + 'CORR', + 'COS', + 'COSH', + 'COST', + 'COUNT', + 'COVAR_POP', + 'COVAR_SAMP', + 'CREATE', + 'CUME_DIST', + 'CURRENT', + 'CURRVAL', + 'CURSOR', + 'DATABASE', + 'DATE', + 'DAY', + 'DECIMAL', + 'DECLARE', + 'DECODE', + 'DEFAULT', + 'DELETE', + 'DENSE_RANK', + 'DEREF', + 'DESC', + 'DIMENSION', + 'DIRECTORY', + 'DISASSOCIATE', + 'DISTINCT', + 'DO', + 'DROP', + 'DUMP', + 'ELSE', + 'ELSIF', + 'EMPTY_BLOB', + 'EMPTY_CLOB', + 'END', + 'EXCEPTION', + 'EXCLUSIVE', + 'EXEC', + 'EXECUTE', + 'EXISTS', + 'EXIT', + 'EXP', + 'EXPLAIN', + 'EXTENDS', + 'EXTRACT', + 'FALSE', + 'FETCH', + 'FILE', + 'FIRST_VALUE', + 'FLOAT', + 'FLOOR', + 'FOR', + 'FORALL', + 'FROM', + 'FUNCTION', + 'GOTO', + 'GRANT', + 'GREATEST', + 'GROUP', + 'GROUPING', + 'HAVING', + 'HEAP', + 'HEXTORAW', + 'HOUR', + 'IDENTIFIED', + 'IF', + 'IMMEDIATE', + 'IN', + 'INCREMENT', + 'INDEX', + 'INDEXTYPE', + 'INDICATOR', + 'INITCAP', + 'INITIAL', + 'INSERT', + 'INSTR', + 'INSTRB', + 'INTEGER', + 'INTERFACE', + 'INTERSECT', + 'INTERVAL', + 'INTO', + 'IS', + 'ISOLATION', + 'JAVA', + 'KEY', + 'LAG', + 'LAST_DAY', + 'LAST_VALUE', + 'LEAD', + 'LEAST', + 'LENGTH', + 'LENGTHB', + 'LEVEL', + 'LIBRARY', + 'LIKE', + 'LIMITED', + 'LINK', + 'LN', + 'LOCK', + 'LOG', + 'LONG', + 'LOOP', + 'LOWER', + 'LPAD', + 'LTRIM', + 'MAKE_REF', + 'MATERIALIZED', + 'MAX', + 'MAXEXTENTS', + 'MIN', + 'MINUS', + 'MINUTE', + 'MLSLABEL', + 'MOD', + 'MODE', + 'MODIFY', + 'MONTH', + 'MONTHS_BETWEEN', + 'NATURAL', + 'NATURALN', + 'NEW', + 'NEW_TIME', + 'NEXT_DAY', + 'NEXTVAL', + 'NLS_CHARSET_DECL_LEN', + 'NLS_CHARSET_ID', + 'NLS_CHARSET_NAME', + 'NLS_INITCAP', + 'NLS_LOWER', + 'NLS_UPPER', + 'NLSSORT', + 'NOAUDIT', + 'NOCOMPRESS', + 'NOCOPY', + 'NOT', + 'NOWAIT', + 'NTILE', + 'NULL', + 'NULLIF', + 'NUMBER', + 'NUMBER_BASE', + 'NUMTODSINTERVAL', + 'NUMTOYMINTERVAL', + 'NVL', + 'NVL2', + 'OCIROWID', + 'OF', + 'OFFLINE', + 'ON', + 'ONLINE', + 'OPAQUE', + 'OPEN', + 'OPERATOR', + 'OPTION', + 'OR', + 'ORDER', + 'ORGANIZATION', + 'OTHERS', + 'OUT', + 'OUTLINE', + 'PACKAGE', + 'PARTITION', + 'PCTFREE', + 'PERCENT_RANK', + 'PLAN', + 'PLS_INTEGER', + 'POSITIVE', + 'POSITIVEN', + 'POWER', + 'PRAGMA', + 'PRIMARY', + 'PRIOR', + 'PRIVATE', + 'PRIVILEGES', + 'PROCEDURE', + 'PROFILE', + 'PUBLIC', + 'RAISE', + 'RANGE', + 'RANK', + 'RATIO_TO_REPORT', + 'RAW', + 'RAWTOHEX', + 'REAL', + 'RECORD', + 'REF', + 'REFTOHEX', + 'REGR_AVGX', + 'REGR_AVGY', + 'REGR_COUNT', + 'REGR_INTERCEPT', + 'REGR_R2', + 'REGR_SLOPE', + 'REGR_SXX', + 'REGR_SXY', + 'REGR_SYY', + 'RELEASE', + 'RENAME', + 'REPLACE', + 'RESOURCE', + 'RETURN', + 'RETURNING', + 'REVERSE', + 'REVOKE', + 'ROLE', + 'ROLLBACK', + 'ROUND', + 'ROW', + 'ROW_NUMBER', + 'ROWID', + 'ROWIDTOCHAR', + 'ROWNUM', + 'ROWS', + 'ROWTYPE', + 'RPAD', + 'RTRIM', + 'SAVEPOINT', + 'SCHEMA', + 'SECOND', + 'SEGMENT', + 'SELECT', + 'SEPERATE', + 'SEQUENCE', + 'SESSION', + 'SET', + 'SHARE', + 'SIGN', + 'SIN', + 'SINH', + 'SIZE', + 'SMALLINT', + 'SOUNDEX', + 'SPACE', + 'SQL', + 'SQLCODE', + 'SQLERRM', + 'SQRT', + 'START', + 'STATISTICS', + 'STDDEV', + 'STDDEV_POP', + 'STDDEV_SAMP', + 'STOP', + 'SUBSTR', + 'SUBSTRB', + 'SUBTYPE', + 'SUCCESSFUL', + 'SUM', + 'SYNONYM', + 'SYS_CONTEXT', + 'SYS_GUID', + 'SYSDATE', + 'SYSTEM', + 'TABLE', + 'TABLESPACE', + 'TAN', + 'TANH', + 'TEMPORARY', + 'THEN', + 'TIME', + 'TIMESTAMP', + 'TIMEZONE_ABBR', + 'TIMEZONE_HOUR', + 'TIMEZONE_MINUTE', + 'TIMEZONE_REGION', + 'TIMING', + 'TO', + 'TO_CHAR', + 'TO_DATE', + 'TO_LOB', + 'TO_MULTI_BYTE', + 'TO_NUMBER', + 'TO_SINGLE_BYTE', + 'TRANSACTION', + 'TRANSLATE', + 'TRIGGER', + 'TRIM', + 'TRUE', + 'TRUNC', + 'TRUNCATE', + 'TYPE', + 'UI', + 'UID', + 'UNION', + 'UNIQUE', + 'UPDATE', + 'UPPER', + 'USE', + 'USER', + 'USERENV', + 'USING', + 'VALIDATE', + 'VALUE', + 'VALUES', + 'VAR_POP', + 'VAR_SAMP', + 'VARCHAR', + 'VARCHAR2', + 'VARIANCE', + 'VIEW', + 'VSIZE', + 'WHEN', + 'WHENEVER', + 'WHERE', + 'WHILE', + 'WITH', + 'WORK', + 'WRITE', + 'YEAR', + 'ZONE' + ) + ), + 'SYMBOLS' => array( + '(', ')', '=', '<', '>', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #ff0000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + ), + + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/pascal.php b/ehcp/net2ftp/plugins/geshi/geshi/pascal.php new file mode 100644 index 0000000..9256c22 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/pascal.php @@ -0,0 +1,144 @@ + 'Pascal', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('{' => '}','(*' => '*)'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'while', 'until', 'repeat', 'default', + 'do', 'else', 'for', 'switch', 'goto','label','asm','begin','end', + 'assembler','case', 'downto', 'to','div','mod','far','forward','in','inherited', + 'inline','interrupt','label','library','not','var','of','then','stdcall', + 'cdecl','end.','raise','try','except','name','finally','resourcestring','override','overload', + 'default','public','protected','private','property','published','stored','catch' + ), + 2 => array( + 'nil', 'false', 'break', 'true', 'function', 'procedure','implementation','interface', + 'unit','program','initialization','finalization','uses' + ), + 3 => array( + 'abs', 'absolute','and','arc','arctan','chr','constructor','destructor', + 'dispose','cos','eof','eoln','exp','get','index','ln','new','xor','write','writeln', + 'shr','sin','sqrt','succ','pred','odd','read','readln','ord','ordinal','blockread','blockwrite' + ), + 4 => array( + 'array', 'char', 'const', 'boolean', 'real', 'integer', 'longint', + 'word', 'shortint', 'record','byte','bytebool','string', + 'type','object','export','exports','external','file','longbool','pointer','set', + 'packed','ansistring','union' + ), + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => '', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/per.php b/ehcp/net2ftp/plugins/geshi/geshi/per.php new file mode 100644 index 0000000..9e7627e --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/per.php @@ -0,0 +1,302 @@ + 'per', + 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'), + 'COMMENT_MULTI' => array('{' => '}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "ACCELERATOR", + "ACCELERATOR2", + "ACTION", + "ALT", + "AND", + "AUTO", + "AUTONEXT", + "AUTOSCALE", + "BETWEEN", + "BOTH", + "BUTTON", + "BUTTONEDIT", + "BUTTONTEXTHIDDEN", + "BY", + "BYTE", + "CANVAS", + "CENTER", + "CHECKBOX", + "CLASS", + "COLOR", + "COLUMNS", + "COMBOBOX", + "COMMAND", + "COMMENT", + "COMMENTS", + "COMPACT", + "COMPRESS", + "CONFIG", + "CONTROL", + "CURRENT", + "DATABASE", + "DATEEDIT", + "DEC", + "DEFAULT", + "DEFAULTS", + "DELIMITERS", + "DISPLAY", + "DISPLAYONLY", + "DOWNSHIFT", + "DYNAMIC", + "EDIT", + "FIXED", + "FOLDER", + "FONTPITCH", + "FORMAT", + "FORMONLY", + "GRID", + "GRIDCHILDRENINPARENT", + "GROUP", + "HBOX", + "HEIGHT", + "HIDDEN", + "HORIZONTAL", + "INCLUDE", + "INITIAL", + "INITIALIZER", + "INPUT", + "INSTRUCTIONS", + "INTERVAL", + "INVISIBLE", + "IS", + "ITEM", + "ITEMS", + "JUSTIFY", + "KEY", + "KEYS", + "LABEL", + "LEFT", + "LIKE", + "LINES", + "MATCHES", + "NAME", + "NOENTRY", + "NONCOMPRESS", + "NORMAL", + "NOT", + "NOUPDATE", + "OPTIONS", + "OR", + "ORIENTATION", + "PACKED", + "PAGE", + "PICTURE", + "PIXELHEIGHT", + "PIXELS", + "PIXELWIDTH", + "POINTS", + "PROGRAM", + "PROGRESSBAR", + "QUERYCLEAR", + "QUERYEDITABLE", + "RADIOGROUP", + "RECORD", + "REQUIRED", + "REVERSE", + "RIGHT", + "SAMPLE", + "SCREEN", + "SCROLL", + "SCROLLBARS", + "SCROLLGRID", + "SECOND", + "SEPARATOR", + "SHIFT", + "SIZE", + "SIZEPOLICY", + "SMALLFLOAT", + "SMALLINT", + "SPACING", + "STRETCH", + "STYLE", + "TABINDEX", + "TABLE", + "TAG", + "TEXT", + "TEXTEDIT", + "THROUGH", + "THRU", + "TITLE", + "TO", + "TOOLBAR", + "TOPMENU", + "TYPE", + "UNHIDABLE", + "UNHIDABLECOLUMNS", + "UNMOVABLE", + "UNMOVABLECOLUMNS", + "UNSIZABLE", + "UNSIZABLECOLUMNS", + "UNSORTABLE", + "UNSORTABLECOLUMNS", + "UPSHIFT", + "USER", + "VALIDATE", + "VALUECHECKED", + "VALUEMAX", + "VALUEMIN", + "VALUEUNCHECKED", + "VARCHAR", + "VARIABLE", + "VBOX", + "VERIFY", + "VERSION", + "VERTICAL", + "TIMESTAMP", + "WANTCOLUMNSANCHORED", /* to be removed! */ + "WANTFIXEDPAGESIZE", + "WANTNORETURNS", + "WANTTABS", + "WHERE", + "WIDGET", + "WIDTH", + "WINDOWSTYLE", + "WITHOUT", + "WORDWRAP", + "X", + "Y", + "ZEROFILL", + "SCHEMA", + "ATTRIBUTES", + "TABLES", + "LAYOUT", + "END" + ), + 2 => array( + "YEAR", + "BLACK", + "BLINK", + "BLUE", + "YELLOW", + "WHITE", + "UNDERLINE", + "CENTURY", + "FRACTION", + "CHAR", + "CHARACTER", + "CHARACTERS", + "CYAN", + "DATE", + "DATETIME", + "DAY", + "DECIMAL", + "FALSE", + "FLOAT", + "GREEN", + "HOUR", + "INT", + "INTEGER", + "MAGENTA", + "MINUTE", + "MONEY", + "NONE", + "NULL", + "REAL", + "RED", + "TRUE", + "TODAY", + "MONTH", + "IMAGE" + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':', + '(', ')', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #0000FF; font-weight: bold;', + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: green' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/perl.php b/ehcp/net2ftp/plugins/geshi/geshi/perl.php new file mode 100644 index 0000000..0ac9e08 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/perl.php @@ -0,0 +1,179 @@ + 'Perl', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array( + '=back' => '=cut', + '=head' => '=cut', + '=item' => '=cut', + '=over' => '=cut', + '=begin' => '=cut', + '=end' => '=cut', + '=for' => '=cut', + '=encoding' => '=cut', + '=pod' => '=cut' + ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'HARDQUOTE' => array("'", "'"), // An optional 2-element array defining the beginning and end of a hard-quoted string + 'HARDESCAPE' => array('\\\'', "\\\\"), // Things that must still be escaped inside a hard-quoted string + // If HARDQUOTE is defined, HARDESCAPE must be defined + // This will not work unless the first character of each element is either in the + // QUOTEMARKS array or is the ESCAPE_CHAR + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my', + 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our', + 'reset', 'continue','and', 'cmp', 'ne' + ), + 2 => array( + 'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN', + 'STDIN', 'STDOUT', 'STDERR' + ), + 3 => array( + 'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless', + 'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr', + 'chroot', 'close', 'closedir', 'connect', 'continue', 'cos', + 'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die', + 'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent', + 'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit', + 'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline', + 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr', + 'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname', + 'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority', + 'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent', + 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent', + 'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep', + 'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill', + 'last', 'lc', 'lcfirst', 'length', 'link', 'listen', 'local', + 'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget', + 'msgrcv', 'msgsnd', 'my', 'next', 'no', 'oct', 'open', 'opendir', + 'ord', 'our', 'pack', 'package', 'pipe', 'pop', 'pos', 'print', + 'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw', + 'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe', + 'recv', 'redo', 'ref', 'rename', 'require', 'return', + 'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek', + 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent', + 'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent', + 'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget', + 'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair', + 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat', + 'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread', + 'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied', + 'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef', + 'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values', + 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 4 => 'color: #009999;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 3 => 'http://perldoc.perl.org/functions/{FNAME}.html' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*', + 4 => '<[a-zA-Z_][a-zA-Z0-9_]*>', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/php-brief.php b/ehcp/net2ftp/plugins/geshi/geshi/php-brief.php new file mode 100644 index 0000000..66c5b46 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/php-brief.php @@ -0,0 +1,166 @@ + 'PHP', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'include', 'require', 'include_once', 'require_once', + 'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch', + 'return', 'break' + ), + 2 => array( + 'null', '__LINE__', '__FILE__', + 'false', '<?php', '?>', + 'true', 'var', 'default', + 'function', 'class', 'new', '&new', 'public', 'private', 'interface', 'extends', + ), + 3 => array( + 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined', + 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions', + 'extension_loaded', 'get_extension_funcs', 'debug_backtrace', + 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv', + 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime', + 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar', + 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown', + 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate', + 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode', + 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat', + 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from', + 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport', + 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', + '!', '@', '%', '&', '|', '/', + '<', '>', + '=', '-', '+', '*', + '.', ':', ',', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.php.net/{FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ' '?>', + ' '?>', + '<%' => '%>', + '' + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/php.php b/ehcp/net2ftp/plugins/geshi/geshi/php.php new file mode 100644 index 0000000..1e9bb49 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/php.php @@ -0,0 +1,359 @@ + 'PHP', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'include', 'require', 'include_once', 'require_once', + 'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', + 'endif', 'switch', 'case', 'endswitch', 'endfor', 'endforeach', + 'return', 'break', 'continue' + ), + 2 => array( + 'null', '__LINE__', '__FILE__', + 'false', '<?php', '?>', '<?', + '<script language', '</script>', + 'true', 'var', 'default', + 'function', 'class', 'new', '&new', 'public', 'private', 'interface', 'extends', + '__FUNCTION__', '__CLASS__', '__METHOD__', 'PHP_VERSION', + 'PHP_OS', 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR', + 'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', 'PHP_SYSCONFDIR', + 'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR', + 'E_USER_WARNING', 'E_USER_NOTICE', 'E_ALL' + ), + 3 => array( + 'zlib_get_coding_type','zend_version','zend_logo_guid','yp_order','yp_next', + 'yp_match','yp_master','yp_get_default_domain','yp_first','yp_errno','yp_err_string', + 'yp_cat','yp_all','xml_set_unparsed_entity_decl_handler','xml_set_start_namespace_decl_handler','xml_set_processing_instruction_handler','xml_set_object', + 'xml_set_notation_decl_handler','xml_set_external_entity_ref_handler','xml_set_end_namespace_decl_handler','xml_set_element_handler','xml_set_default_handler','xml_set_character_data_handler', + 'xml_parser_set_option','xml_parser_get_option','xml_parser_free','xml_parser_create_ns','xml_parser_create','xml_parse_into_struct', + 'xml_parse','xml_get_error_code','xml_get_current_line_number','xml_get_current_column_number','xml_get_current_byte_index','xml_error_string', + 'wordwrap','wddx_serialize_vars','wddx_serialize_value','wddx_packet_start','wddx_packet_end','wddx_deserialize', + 'wddx_add_vars','vsprintf','vprintf','virtual','version_compare','var_export', + 'var_dump','utf8_encode','utf8_decode','usort','usleep','user_error', + 'urlencode','urldecode','unserialize','unregister_tick_function','unpack','unlink', + 'unixtojd','uniqid','umask','uksort','ucwords','ucfirst', + 'uasort','trim','trigger_error','touch','token_name','token_get_all', + 'tmpfile','time','textdomain','tempnam','tanh','tan', + 'system','syslog','symlink','substr_replace','substr_count','substr', + 'strval','strtr','strtoupper','strtotime','strtolower','strtok', + 'strstr','strspn','strrpos','strrev','strrchr','strpos', + 'strncmp','strncasecmp','strnatcmp','strnatcasecmp','strlen','stristr', + 'stripslashes','stripcslashes','strip_tags','strftime','stream_wrapper_register','stream_set_write_buffer', + 'stream_set_timeout','stream_set_blocking','stream_select','stream_register_wrapper','stream_get_meta_data','stream_filter_prepend', + 'stream_filter_append','stream_context_set_params','stream_context_set_option','stream_context_get_options','stream_context_create','strcspn', + 'strcoll','strcmp','strchr','strcasecmp','str_word_count','str_shuffle', + 'str_rot13','str_replace','str_repeat','str_pad','stat','sscanf', + 'srand','sqrt','sql_regcase','sprintf','spliti','split', + 'soundex','sort','socket_writev','socket_write','socket_strerror','socket_shutdown', + 'socket_setopt','socket_set_timeout','socket_set_option','socket_set_nonblock','socket_set_blocking','socket_set_block', + 'socket_sendto','socket_sendmsg','socket_send','socket_select','socket_recvmsg','socket_recvfrom', + 'socket_recv','socket_readv','socket_read','socket_listen','socket_last_error','socket_iovec_set', + 'socket_iovec_free','socket_iovec_fetch','socket_iovec_delete','socket_iovec_alloc','socket_iovec_add','socket_getsockname', + 'socket_getpeername','socket_getopt','socket_get_status','socket_get_option','socket_create_pair','socket_create_listen', + 'socket_create','socket_connect','socket_close','socket_clear_error','socket_bind','socket_accept', + 'sleep','sizeof','sinh','sin','similar_text','shuffle', + 'show_source','shmop_write','shmop_size','shmop_read','shmop_open','shmop_delete', + 'shmop_close','shm_remove_var','shm_remove','shm_put_var','shm_get_var','shm_detach', + 'shm_attach','shell_exec','sha1_file','sha1','settype','setlocale', + 'setcookie','set_time_limit','set_socket_blocking','set_magic_quotes_runtime','set_include_path','set_file_buffer', + 'set_error_handler','session_write_close','session_unset','session_unregister','session_start','session_set_save_handler', + 'session_set_cookie_params','session_save_path','session_register','session_regenerate_id','session_name','session_module_name', + 'session_is_registered','session_id','session_get_cookie_params','session_encode','session_destroy','session_decode', + 'session_cache_limiter','session_cache_expire','serialize','sem_remove','sem_release','sem_get', + 'sem_acquire','rtrim','rsort','round','rmdir','rewinddir', + 'rewind','restore_include_path','restore_error_handler','reset','rename','register_tick_function', + 'register_shutdown_function','realpath','readlink','readgzfile','readfile','readdir', + 'read_exif_data','rawurlencode','rawurldecode','range','rand','rad2deg', + 'quotemeta','quoted_printable_decode','putenv','proc_open','proc_close','printf', + 'print_r','prev','preg_split','preg_replace_callback','preg_replace','preg_quote', + 'preg_match_all','preg_match','preg_grep','pow','posix_uname','posix_ttyname', + 'posix_times','posix_strerror','posix_setuid','posix_setsid','posix_setpgid','posix_setgid', + 'posix_seteuid','posix_setegid','posix_mkfifo','posix_kill','posix_isatty','posix_getuid', + 'posix_getsid','posix_getrlimit','posix_getpwuid','posix_getpwnam','posix_getppid','posix_getpid', + 'posix_getpgrp','posix_getpgid','posix_getlogin','posix_getgroups','posix_getgrnam','posix_getgrgid', + 'posix_getgid','posix_geteuid','posix_getegid','posix_getcwd','posix_get_last_error','posix_errno', + 'posix_ctermid','pos','popen','pi','phpversion','phpinfo', + 'phpcredits','php_uname','php_sapi_name','php_logo_guid','php_ini_scanned_files','pg_update', + 'pg_untrace','pg_unescape_bytea','pg_tty','pg_trace','pg_setclientencoding','pg_set_client_encoding', + 'pg_send_query','pg_select','pg_result_status','pg_result_seek','pg_result_error','pg_result', + 'pg_query','pg_put_line','pg_port','pg_ping','pg_pconnect','pg_options', + 'pg_numrows','pg_numfields','pg_num_rows','pg_num_fields','pg_meta_data','pg_lowrite', + 'pg_lounlink','pg_loreadall','pg_loread','pg_loopen','pg_loimport','pg_loexport', + 'pg_locreate','pg_loclose','pg_lo_write','pg_lo_unlink','pg_lo_tell','pg_lo_seek', + 'pg_lo_read_all','pg_lo_read','pg_lo_open','pg_lo_import','pg_lo_export','pg_lo_create', + 'pg_lo_close','pg_last_oid','pg_last_notice','pg_last_error','pg_insert','pg_host', + 'pg_getlastoid','pg_get_result','pg_get_pid','pg_get_notify','pg_freeresult','pg_free_result', + 'pg_fieldtype','pg_fieldsize','pg_fieldprtlen','pg_fieldnum','pg_fieldname','pg_fieldisnull', + 'pg_field_type','pg_field_size','pg_field_prtlen','pg_field_num','pg_field_name','pg_field_is_null', + 'pg_fetch_row','pg_fetch_result','pg_fetch_object','pg_fetch_assoc','pg_fetch_array','pg_fetch_all', + 'pg_exec','pg_escape_string','pg_escape_bytea','pg_errormessage','pg_end_copy','pg_delete', + 'pg_dbname','pg_copy_to','pg_copy_from','pg_convert','pg_connection_status','pg_connection_reset', + 'pg_connection_busy','pg_connect','pg_cmdtuples','pg_close','pg_clientencoding','pg_client_encoding', + 'pg_cancel_query','pg_affected_rows','pfsockopen','pclose','pathinfo','passthru', + 'parse_url','parse_str','parse_ini_file','pack','overload','output_reset_rewrite_vars', + 'output_add_rewrite_var','ord','openssl_x509_read','openssl_x509_parse','openssl_x509_free','openssl_x509_export_to_file', + 'openssl_x509_export','openssl_x509_checkpurpose','openssl_x509_check_private_key','openssl_verify','openssl_sign','openssl_seal', + 'openssl_public_encrypt','openssl_public_decrypt','openssl_private_encrypt','openssl_private_decrypt','openssl_pkey_new','openssl_pkey_get_public', + 'openssl_pkey_get_private','openssl_pkey_free','openssl_pkey_export_to_file','openssl_pkey_export','openssl_pkcs7_verify','openssl_pkcs7_sign', + 'openssl_pkcs7_encrypt','openssl_pkcs7_decrypt','openssl_open','openssl_get_publickey','openssl_get_privatekey','openssl_free_key', + 'openssl_error_string','openssl_csr_sign','openssl_csr_new','openssl_csr_export_to_file','openssl_csr_export','openlog', + 'opendir','octdec','ob_start','ob_list_handlers','ob_implicit_flush','ob_iconv_handler', + 'ob_gzhandler','ob_get_status','ob_get_level','ob_get_length','ob_get_flush','ob_get_contents', + 'ob_get_clean','ob_flush','ob_end_flush','ob_end_clean','ob_clean','number_format', + 'nl_langinfo','nl2br','ngettext','next','natsort','natcasesort', + 'mysql_unbuffered_query','mysql_thread_id','mysql_tablename','mysql_table_name','mysql_stat','mysql_selectdb', + 'mysql_select_db','mysql_result','mysql_real_escape_string','mysql_query','mysql_ping','mysql_pconnect', + 'mysql_numrows','mysql_numfields','mysql_num_rows','mysql_num_fields','mysql_listtables','mysql_listfields', + 'mysql_listdbs','mysql_list_tables','mysql_list_processes','mysql_list_fields','mysql_list_dbs','mysql_insert_id', + 'mysql_info','mysql_get_server_info','mysql_get_proto_info','mysql_get_host_info','mysql_get_client_info','mysql_freeresult', + 'mysql_free_result','mysql_fieldtype','mysql_fieldtable','mysql_fieldname','mysql_fieldlen','mysql_fieldflags', + 'mysql_field_type','mysql_field_table','mysql_field_seek','mysql_field_name','mysql_field_len','mysql_field_flags', + 'mysql_fetch_row','mysql_fetch_object','mysql_fetch_lengths','mysql_fetch_field','mysql_fetch_assoc','mysql_fetch_array', + 'mysql_escape_string','mysql_error','mysql_errno','mysql_dropdb','mysql_drop_db','mysql_dbname', + 'mysql_db_query','mysql_db_name','mysql_data_seek','mysql_createdb','mysql_create_db','mysql_connect', + 'mysql_close','mysql_client_encoding','mysql_affected_rows','mysql','mt_srand','mt_rand', + 'mt_getrandmax','move_uploaded_file','money_format','mktime','mkdir','min', + 'microtime','method_exists','metaphone','memory_get_usage','md5_file','md5', + 'mbsubstr','mbstrrpos','mbstrpos','mbstrlen','mbstrcut','mbsplit', + 'mbregex_encoding','mberegi_replace','mberegi','mbereg_search_setpos','mbereg_search_regs','mbereg_search_pos', + 'mbereg_search_init','mbereg_search_getregs','mbereg_search_getpos','mbereg_search','mbereg_replace','mbereg_match', + 'mbereg','mb_substr_count','mb_substr','mb_substitute_character','mb_strwidth','mb_strtoupper', + 'mb_strtolower','mb_strrpos','mb_strpos','mb_strlen','mb_strimwidth','mb_strcut', + 'mb_split','mb_send_mail','mb_regex_set_options','mb_regex_encoding','mb_preferred_mime_name','mb_parse_str', + 'mb_output_handler','mb_language','mb_internal_encoding','mb_http_output','mb_http_input','mb_get_info', + 'mb_eregi_replace','mb_eregi','mb_ereg_search_setpos','mb_ereg_search_regs','mb_ereg_search_pos','mb_ereg_search_init', + 'mb_ereg_search_getregs','mb_ereg_search_getpos','mb_ereg_search','mb_ereg_replace','mb_ereg_match','mb_ereg', + 'mb_encode_numericentity','mb_encode_mimeheader','mb_detect_order','mb_detect_encoding','mb_decode_numericentity','mb_decode_mimeheader', + 'mb_convert_variables','mb_convert_kana','mb_convert_encoding','mb_convert_case','max','mail', + 'magic_quotes_runtime','ltrim','lstat','long2ip','log1p','log10', + 'log','localtime','localeconv','linkinfo','link','levenshtein', + 'lcg_value','ksort','krsort','key_exists','key','juliantojd', + 'join','jewishtojd','jdtounix','jdtojulian','jdtojewish','jdtogregorian', + 'jdtofrench','jdmonthname','jddayofweek','is_writeable','is_writable','is_uploaded_file', + 'is_subclass_of','is_string','is_scalar','is_resource','is_real','is_readable', + 'is_object','is_numeric','is_null','is_nan','is_long','is_link', + 'is_integer','is_int','is_infinite','is_float','is_finite','is_file', + 'is_executable','is_double','is_dir','is_callable','is_bool','is_array', + 'is_a','iptcparse','iptcembed','ip2long','intval','ini_set', + 'ini_restore','ini_get_all','ini_get','ini_alter','in_array','import_request_variables', + 'implode','image_type_to_mime_type','ignore_user_abort','iconv_set_encoding','iconv_get_encoding','iconv', + 'i18n_mime_header_encode','i18n_mime_header_decode','i18n_ja_jp_hantozen','i18n_internal_encoding','i18n_http_output','i18n_http_input', + 'i18n_discover_encoding','i18n_convert','hypot','htmlspecialchars','htmlentities','html_entity_decode', + 'highlight_string','highlight_file','hexdec','hebrevc','hebrev','headers_sent', + 'header','gzwrite','gzuncompress','gztell','gzseek','gzrewind', + 'gzread','gzputs','gzpassthru','gzopen','gzinflate','gzgetss', + 'gzgets','gzgetc','gzfile','gzeof','gzencode','gzdeflate', + 'gzcompress','gzclose','gregoriantojd','gmstrftime','gmmktime','gmdate', + 'glob','gettype','gettimeofday','gettext','getservbyport','getservbyname', + 'getrusage','getrandmax','getprotobynumber','getprotobyname','getopt','getmyuid', + 'getmypid','getmyinode','getmygid','getmxrr','getlastmod','getimagesize', + 'gethostbynamel','gethostbyname','gethostbyaddr','getenv','getdate','getcwd', + 'getallheaders','get_resource_type','get_required_files','get_parent_class','get_object_vars','get_meta_tags', + 'get_magic_quotes_runtime','get_magic_quotes_gpc','get_loaded_extensions','get_included_files','get_include_path','get_html_translation_table', + 'get_extension_funcs','get_defined_vars','get_defined_functions','get_defined_constants','get_declared_classes','get_current_user', + 'get_class_vars','get_class_methods','get_class','get_cfg_var','get_browser','fwrite', + 'function_exists','func_num_args','func_get_args','func_get_arg','ftruncate','ftp_systype', + 'ftp_ssl_connect','ftp_size','ftp_site','ftp_set_option','ftp_rmdir','ftp_rename', + 'ftp_rawlist','ftp_quit','ftp_pwd','ftp_put','ftp_pasv','ftp_nlist', + 'ftp_nb_put','ftp_nb_get','ftp_nb_fput','ftp_nb_fget','ftp_nb_continue','ftp_mkdir', + 'ftp_mdtm','ftp_login','ftp_get_option','ftp_get','ftp_fput','ftp_fget', + 'ftp_exec','ftp_delete','ftp_connect','ftp_close','ftp_chdir','ftp_cdup', + 'ftok','ftell','fstat','fsockopen','fseek','fscanf', + 'frenchtojd','fread','fputs','fpassthru','fopen','fnmatch', + 'fmod','flush','floor','flock','floatval','filetype', + 'filesize','filepro_rowcount','filepro_retrieve','filepro_fieldwidth','filepro_fieldtype','filepro_fieldname', + 'filepro_fieldcount','filepro','fileperms','fileowner','filemtime','fileinode', + 'filegroup','filectime','fileatime','file_get_contents','file_exists','file', + 'fgetss','fgets','fgetcsv','fgetc','fflush','feof', + 'fclose','ezmlm_hash','extract','extension_loaded','expm1','explode', + 'exp','exif_thumbnail','exif_tagname','exif_read_data','exif_imagetype','exec', + 'escapeshellcmd','escapeshellarg','error_reporting','error_log','eregi_replace','eregi', + 'ereg_replace','ereg','end','easter_days','easter_date','each', + 'doubleval','dngettext','dl','diskfreespace','disk_total_space','disk_free_space', + 'dirname','dir','dgettext','deg2rad','defined','define_syslog_variables', + 'define','decoct','dechex','decbin','debug_zval_dump','debug_backtrace', + 'deaggregate','dcngettext','dcgettext','dba_sync','dba_replace','dba_popen', + 'dba_optimize','dba_open','dba_nextkey','dba_list','dba_insert','dba_handlers', + 'dba_firstkey','dba_fetch','dba_exists','dba_delete','dba_close','date', + 'current','ctype_xdigit','ctype_upper','ctype_space','ctype_punct','ctype_print', + 'ctype_lower','ctype_graph','ctype_digit','ctype_cntrl','ctype_alpha','ctype_alnum', + 'crypt','create_function','crc32','count_chars','count','cosh', + 'cos','copy','convert_cyr_string','constant','connection_status','connection_aborted', + 'compact','closelog','closedir','clearstatcache','class_exists','chunk_split', + 'chr','chown','chop','chmod','chgrp','checkdnsrr', + 'checkdate','chdir','ceil','call_user_method_array','call_user_method','call_user_func_array', + 'call_user_func','cal_to_jd','cal_info','cal_from_jd','cal_days_in_month','bzwrite', + 'bzread','bzopen','bzflush','bzerrstr','bzerror','bzerrno', + 'bzdecompress','bzcompress','bzclose','bindtextdomain','bindec','bind_textdomain_codeset', + 'bin2hex','bcsub','bcsqrt','bcscale','bcpow','bcmul', + 'bcmod','bcdiv','bccomp','bcadd','basename','base_convert', + 'base64_encode','base64_decode','atanh','atan2','atan','assert_options', + 'assert','asort','asinh','asin','arsort','array_walk', + 'array_values','array_unshift','array_unique','array_sum','array_splice','array_slice', + 'array_shift','array_search','array_reverse','array_reduce','array_rand','array_push', + 'array_pop','array_pad','array_multisort','array_merge_recursive','array_merge','array_map', + 'array_keys','array_key_exists','array_intersect_assoc','array_intersect','array_flip','array_filter', + 'array_fill','array_diff_assoc','array_diff','array_count_values','array_chunk','array_change_key_case', + 'apache_setenv','apache_response_headers','apache_request_headers','apache_note','apache_lookup_uri','apache_get_version', + 'apache_child_terminate','aggregation_info','aggregate_properties_by_regexp','aggregate_properties_by_list','aggregate_properties','aggregate_methods_by_regexp', + 'aggregate_methods_by_list','aggregate_methods','aggregate','addslashes','addcslashes','acosh', + 'acos','abs','_','echo', 'print', 'global', 'static', 'exit', 'array', 'empty', + 'eval', 'isset', 'unset', 'die', 'list' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', + '!', '@', '%', '&', '|', '/', + '<', '>', + '=', '-', '+', '*', + '.', ':', ',', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 1 => 'color: #ff0000' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.php.net/{FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([a-zA-Z]+)(\\n)(.*?)(\\n)(\\1[^a-zA-Z0-9])", + GESHI_REPLACE => '\3', + GESHI_BEFORE => '\1\2', + GESHI_AFTER => '\4\5', + GESHI_MODIFIERS => 'siU' + ), + 1 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '?>' + ), + 1 => array( + ' '?>' + ), + 2 => array( + '<%' => '%>' + ), + 3 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/plsql.php b/ehcp/net2ftp/plugins/geshi/geshi/plsql.php new file mode 100644 index 0000000..3611930 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/plsql.php @@ -0,0 +1,256 @@ + + * Copyright: (c) 2006 Victor Engmark (http://l0b0.net/) + * Release Version: 1.0.7.21 + * Date Started: 2006/10/26 + * + * Oracle 9.2 PL/SQL language file for GeSHi. + * Formatting is based on the default setup of TOAD 8.6. + * + * CHANGES + * ------- + * 2006/10/27 (1.0.0) + * - First Release + * + * TODO (updated 2006/10/27) + * ------------------------- + * * Add < and > to brackets + * * Remove symbols which are also comment delimiters / quote marks? + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GeSHi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'PL/SQL', + 'COMMENT_SINGLE' => array(1 =>'--'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2930 + 'COMMENT_MULTI' => array('/*' => '*/'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2950 + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + //PL/SQL reserved keywords (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/f_words.htm#LNPLS019) + 1 => array('ZONE', 'YEAR', 'WRITE', 'WORK', 'WITH', 'WHILE', 'WHERE', + 'WHENEVER', 'WHEN', 'VIEW', 'VARCHAR2', 'VARCHAR', 'VALUES', + 'VALIDATE', 'USE', 'UPDATE', 'UNIQUE', 'UNION', 'TYPE', 'TRUE', + 'TRIGGER', 'TO', 'TIMEZONE_REGION', 'TIMEZONE_MINUTE', 'TIMEZONE_HOUR', + 'TIMEZONE_ABBR', 'TIMESTAMP', 'TIME', 'THEN', 'TABLE', 'SYNONYM', + 'SUCCESSFUL', 'SUBTYPE', 'START', 'SQLERRM', 'SQLCODE', 'SQL', 'SPACE', + 'SMALLINT', 'SHARE', 'SET', 'SEPARATE', 'SELECT', 'SECOND', + 'SAVEPOINT', 'ROWTYPE', 'ROWNUM', 'ROWID', 'ROW', 'ROLLBACK', + 'REVERSE', 'RETURN', 'RELEASE', 'RECORD', 'REAL', 'RAW', 'RANGE', + 'RAISE', 'PUBLIC', 'PROCEDURE', 'PRIVATE', 'PRIOR', 'PRAGMA', + 'POSITIVEN', 'POSITIVE', 'PLS_INTEGER', 'PCTFREE', 'PARTITION', + 'PACKAGE', 'OUT', 'OTHERS', 'ORGANIZATION', 'ORDER', 'OR', 'OPTION', + 'OPERATOR', 'OPEN', 'OPAQUE', 'ON', 'OF', 'OCIROWID', 'NUMBER_BASE', + 'NUMBER', 'NULL', 'NOWAIT', 'NOT', 'NOCOPY', 'NEXTVAL', 'NEW', + 'NATURALN', 'NATURAL', 'MONTH', 'MODE', 'MLSLABEL', 'MINUTE', 'MINUS', + 'LOOP', 'LONG', 'LOCK', 'LIMITED', 'LIKE', 'LEVEL', 'JAVA', + 'ISOLATION', 'IS', 'INTO', 'INTERVAL', 'INTERSECT', 'INTERFACE', + 'INTEGER', 'INSERT', 'INDICATOR', 'INDEX', 'IN', 'IMMEDIATE', 'IF', + 'HOUR', 'HEAP', 'HAVING', 'GROUP', 'GOTO', 'FUNCTION', 'FROM', + 'FORALL', 'FOR', 'FLOAT', 'FETCH', 'FALSE', 'EXTENDS', 'EXIT', + 'EXISTS', 'EXECUTE', 'EXCLUSIVE', 'EXCEPTION', 'END', 'ELSIF', 'ELSE', + 'DROP', 'DO', 'DISTINCT', 'DESC', 'DELETE', 'DEFAULT', 'DECLARE', + 'DECIMAL', 'DAY', 'DATE', 'CURSOR', 'CURRVAL', 'CURRENT', 'CREATE', + 'CONSTANT', 'CONNECT', 'COMPRESS', 'COMMIT', 'COMMENT', 'COLLECT', + 'CLUSTER', 'CLOSE', 'CHECK', 'CHAR_BASE', 'CHAR', 'CASE', 'BY', 'BULK', + 'BOOLEAN', 'BODY', 'BINARY_INTEGER', 'BETWEEN', 'BEGIN', 'AUTHID', + 'AT', 'ASC', 'AS', 'ARRAY', 'ANY', 'AND', 'ALTER', 'ALL'), + //SQL functions (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/toc.htm & http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/functions101a.htm#85925) + 2 => array('XMLTRANSFORM', 'XMLSEQUENCE', 'XMLFOREST', 'XMLELEMENT', + 'XMLCONCAT', 'XMLCOLATTVAL', 'XMLAGG', 'WIDTH_BUCKET', 'VSIZE', + 'VARIANCE', 'VAR_SAMP', 'VAR_POP', 'VALUE', 'USERENV', 'USER', 'UPPER', + 'UPDATEXML', 'UNISTR', 'UID', 'TZ_OFFSET', 'TRUNC', 'TRIM', 'TREAT', + 'TRANSLATE', 'TO_YMINTERVAL', 'TO_TIMESTAMP_TZ', 'TO_TIMESTAMP', + 'TO_SINGLE_BYTE', 'TO_NUMBER', 'TO_NCLOB', 'TO_NCHAR', 'TO_MULTI_BYTE', + 'TO_LOB', 'TO_DSINTERVAL', 'TO_DATE', 'TO_CLOB', 'TO_CHAR', 'TANH', + 'TAN', 'SYSTIMESTAMP', 'SYSDATE', 'SYS_XMLGEN', 'SYS_XMLAGG', + 'SYS_TYPEID', 'SYS_GUID', 'SYS_EXTRACT_UTC', 'SYS_DBURIGEN', + 'SYS_CONTEXT', 'SYS_CONNECT_BY_PATH', 'SUM', 'SUBSTR', 'STDDEV_SAMP', + 'STDDEV_POP', 'STDDEV', 'SQRT', 'SOUNDEX', 'SINH', 'SIN', 'SIGN', + 'SESSIONTIMEZONE', 'RTRIM', 'RPAD', 'ROWIDTONCHAR', 'ROWIDTOCHAR', + 'ROW_NUMBER', 'ROUND', 'REPLACE', 'REGR_SYY', 'REGR_SXY', 'REGR_SXX', + 'REGR_SLOPE', 'REGR_R2', 'REGR_INTERCEPT', 'REGR_COUNT', 'REGR_AVGY', + 'REGR_AVGX', 'REFTOHEX', 'REF', 'RAWTONHEX', 'RAWTOHEX', + 'RATIO_TO_REPORT', 'RANK', 'POWER', 'PERCENTILE_DISC', + 'PERCENTILE_CONT', 'PERCENT_RANK', 'PATH', 'NVL2', 'NVL', + 'NUMTOYMINTERVAL', 'NUMTODSINTERVAL', 'NULLIF', 'NTILE', 'NLSSORT', + 'NLS_UPPER', 'NLS_LOWER', 'NLS_INITCAP', 'NLS_CHARSET_NAME', + 'NLS_CHARSET_ID', 'NLS_CHARSET_DECL_LEN', 'NEXT_DAY', 'NEW_TIME', + 'NCHR', 'MONTHS_BETWEEN', 'MOD', 'MIN', 'MAX', 'MAKE_REF', 'LTRIM', + 'LPAD', 'LOWER', 'LOG', 'LOCALTIMESTAMP', 'LN', 'LENGTH', 'LEAST', + 'LEAD', 'LAST_VALUE', 'LAST_DAY', 'LAST', 'LAG', 'INSTR', 'INITCAP', + 'HEXTORAW', 'GROUPING_ID', 'GROUPING', 'GROUP_ID', 'GREATEST', + 'FROM_TZ', 'FLOOR', 'FIRST_VALUE', 'FIRST', 'EXTRACTVALUE', 'EXTRACT', + 'EXP', 'EXISTSNODE', 'EMPTY_CLOB', 'EMPTY_BLOB', 'DUMP', 'DEREF', + 'DEPTH', 'DENSE_RANK', 'DECOMPOSE', 'DECODE', 'DBTIMEZONE', + 'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CUME_DIST', 'COVAR_SAMP', + 'COVAR_POP', 'COUNT', 'COSH', 'COS', 'CORR', 'CONVERT', 'CONCAT', + 'COMPOSE', 'COALESCE', 'CHR', 'CHARTOROWID', 'CEIL', 'CAST', 'BITAND', + 'BIN_TO_NUM', 'BFILENAME', 'AVG', 'ATAN2', 'ATAN', 'ASIN', 'ASCIISTR', + 'ASCII', 'ADD_MONTHS', 'ACOS', 'ABS'), + //PL/SQL packages (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/intro2.htm#1025672) + 3 => array('UTL_URL', 'UTL_TCP', 'UTL_SMTP', 'UTL_REF', 'UTL_RAW', + 'UTL_PG', 'UTL_INADDR', 'UTL_HTTP', 'UTL_FILE', 'UTL_ENCODE', + 'UTL_COLL', 'SDO_UTIL', 'SDO_TUNE', 'SDO_MIGRATE', 'SDO_LRS', + 'SDO_GEOM', 'SDO_CS', 'DMBS_XMLQUERY', 'DMBS_FLASHBACK', + 'DMBS_DEFER_SYS', 'DEBUG_EXTPROC', 'DBMS_XSLPROCESSOR', 'DBMS_XPLAN', + 'DBMS_XMLSCHEMA', 'DBMS_XMLSAVE', 'DBMS_XMLPARSER', 'DBMS_XMLGEN', + 'DBMS_XMLDOM', 'DBMS_XDBT', 'DBMS_XDB_VERSION', 'DBMS_XDB', 'DBMS_WM', + 'DBMS_UTILITY', 'DBMS_TYPES', 'DBMS_TTS', 'DBMS_TRANSFORM', + 'DBMS_TRANSACTION', 'DBMS_TRACE', 'DBMS_STRM_A', 'DBMS_STRM', + 'DBMS_STORAGE_MAP', 'DBMS_STATS', 'DBMS_SQL', 'DBMS_SPACE_ADMIN', + 'DBMS_SPACE', 'DBMS_SHARED_POOL', 'DBMS_SESSION', 'DBMS_RULE_ADM', + 'DBMS_RULE', 'DBMS_ROWID', 'DBMS_RLS', 'DBMS_RESUMABLE', + 'DBMS_RESOURCE_MANAGER_PRIVS', 'DBMS_RESOURCE_MANAGER', 'DBMS_REPUTIL', + 'DBMS_REPCAT_RGT', 'DBMS_REPCAT_INSTATIATE', 'DBMS_REPCAT_ADMIN', + 'DBMS_REPCAT', 'DBMS_REPAIR', 'DBMS_REFRESH', 'DBMS_REDEFINITION', + 'DBMS_RECTIFIER_DIFF', 'DBMS_RANDOM', 'DBMS_PROPAGATION_ADM', + 'DBMS_PROFILER', 'DBMS_PIPE', 'DBMS_PCLXUTIL', 'DBMS_OUTPUT', + 'DBMS_OUTLN_EDIT', 'DBMS_OUTLN', 'DBMS_ORACLE_TRACE_USER', + 'DBMS_ORACLE_TRACE_AGENT', 'DBMS_OLAP', 'DBMS_OFFLINE_SNAPSHOT', + 'DBMS_OFFLINE_OG', 'DBMS_ODCI', 'DBMS_OBFUSCATION_TOOLKIT', + 'DBMS_MVIEW', 'DBMS_MGWMSG', 'DBMS_MGWADM', 'DBMS_METADATA', + 'DBMS_LOGSTDBY', 'DBMS_LOGMNR_D', 'DBMS_LOGMNR_CDC_SUBSCRIBE', + 'DBMS_LOGMNR_CDC_PUBLISH', 'DBMS_LOGMNR', 'DBMS_LOCK', 'DBMS_LOB', + 'DBMS_LIBCACHE', 'DBMS_LDAP', 'DBMS_JOB', 'DBMS_IOT', + 'DBMS_HS_PASSTHROUGH', 'DBMS_FGA', 'DBMS_DISTRIBUTED_TRUST_ADMIN', + 'DBMS_DESCRIBE', 'DBMS_DEFER_QUERY', 'DBMS_DEFER', 'DBMS_DEBUG', + 'DBMS_DDL', 'DBMS_CAPTURE_ADM', 'DBMS_AW', 'DBMS_AQELM', 'DBMS_AQADM', + 'DBMS_AQ', 'DBMS_APPLY_ADM', 'DBMS_APPLICATION_INFO', 'DBMS_ALERT', + 'CWM2_OLAP_AW_ACCESS'), + //PL/SQL predefined exceptions (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#784) + 4 => array('ZERO_DIVIDE', 'VALUE_ERROR', 'TOO_MANY_ROWS', + 'TIMEOUT_ON_RESOURCE', 'SYS_INVALID_ROWID', 'SUBSCRIPT_OUTSIDE_LIMIT', + 'SUBSCRIPT_BEYOND_COUNT', 'STORAGE_ERROR', 'SELF_IS_NULL', + 'ROWTYPE_MISMATCH', 'PROGRAM_ERROR', 'NOT_LOGGED_ON', 'NO_DATA_FOUND', + 'LOGIN_DENIED', 'INVALID_NUMBER', 'INVALID_CURSOR', 'DUP_VAL_ON_INDEX', + 'CURSOR_ALREADY_OPEN', 'COLLECTION_IS_NULL', 'CASE_NOT_FOUND', + 'ACCESS_INTO_NULL'), + //Static data dictionary views (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2.htm) + 5 => array('USER_REPSITES', 'USER_REPSCHEMA', + 'USER_REPRESOLUTION_STATISTICS', 'USER_REPRESOLUTION_METHOD', + 'USER_REPRESOLUTION', 'USER_REPRESOL_STATS_CONTROL', 'USER_REPPROP', + 'USER_REPPRIORITY_GROUP', 'USER_REPPRIORITY', + 'USER_REPPARAMETER_COLUMN', 'USER_REPOBJECT', 'USER_REPKEY_COLUMNS', + 'USER_REPGROUPED_COLUMN', 'USER_REPGROUP_PRIVILEGES', 'USER_REPGROUP', + 'USER_REPGENOBJECTS', 'USER_REPGENERATED', 'USER_REPFLAVORS', + 'USER_REPFLAVOR_OBJECTS', 'USER_REPFLAVOR_COLUMNS', 'USER_REPDDL', + 'USER_REPCONFLICT', 'USER_REPCOLUMN_GROUP', 'USER_REPCOLUMN', + 'USER_REPCATLOG', 'USER_REPCAT_USER_PARM_VALUES', + 'USER_REPCAT_USER_AUTHORIZATIONS', 'USER_REPCAT_TEMPLATE_SITES', + 'USER_REPCAT_TEMPLATE_PARMS', 'USER_REPCAT_TEMPLATE_OBJECTS', + 'USER_REPCAT_REFRESH_TEMPLATES', 'USER_REPCAT', 'USER_REPAUDIT_COLUMN', + 'USER_REPAUDIT_ATTRIBUTE', 'DBA_REPSITES_NEW', 'DBA_REPSITES', + 'DBA_REPSCHEMA', 'DBA_REPRESOLUTION_STATISTICS', + 'DBA_REPRESOLUTION_METHOD', 'DBA_REPRESOLUTION', + 'DBA_REPRESOL_STATS_CONTROL', 'DBA_REPPROP', 'DBA_REPPRIORITY_GROUP', + 'DBA_REPPRIORITY', 'DBA_REPPARAMETER_COLUMN', 'DBA_REPOBJECT', + 'DBA_REPKEY_COLUMNS', 'DBA_REPGROUPED_COLUMN', + 'DBA_REPGROUP_PRIVILEGES', 'DBA_REPGROUP', 'DBA_REPGENOBJECTS', + 'DBA_REPGENERATED', 'DBA_REPFLAVORS', 'DBA_REPFLAVOR_OBJECTS', + 'DBA_REPFLAVOR_COLUMNS', 'DBA_REPEXTENSIONS', 'DBA_REPDDL', + 'DBA_REPCONFLICT', 'DBA_REPCOLUMN_GROUP', 'DBA_REPCOLUMN', + 'DBA_REPCATLOG', 'DBA_REPCAT_USER_PARM_VALUES', + 'DBA_REPCAT_USER_AUTHORIZATIONS', 'DBA_REPCAT_TEMPLATE_SITES', + 'DBA_REPCAT_TEMPLATE_PARMS', 'DBA_REPCAT_TEMPLATE_OBJECTS', + 'DBA_REPCAT_REFRESH_TEMPLATES', 'DBA_REPCAT_EXCEPTIONS', 'DBA_REPCAT', + 'DBA_REPAUDIT_COLUMN', 'DBA_REPAUDIT_ATTRIBUTE', 'ALL_REPSITES', + 'ALL_REPSCHEMA', 'ALL_REPRESOLUTION_STATISTICS', + 'ALL_REPRESOLUTION_METHOD', 'ALL_REPRESOLUTION', + 'ALL_REPRESOL_STATS_CONTROL', 'ALL_REPPROP', 'ALL_REPPRIORITY_GROUP', + 'ALL_REPPRIORITY', 'ALL_REPPARAMETER_COLUMN', 'ALL_REPOBJECT', + 'ALL_REPKEY_COLUMNS', 'ALL_REPGROUPED_COLUMN', + 'ALL_REPGROUP_PRIVILEGES', 'ALL_REPGROUP', 'ALL_REPGENOBJECTS', + 'ALL_REPGENERATED', 'ALL_REPFLAVORS', 'ALL_REPFLAVOR_OBJECTS', + 'ALL_REPFLAVOR_COLUMNS', 'ALL_REPDDL', 'ALL_REPCONFLICT', + 'ALL_REPCOLUMN_GROUP', 'ALL_REPCOLUMN', 'ALL_REPCATLOG', + 'ALL_REPCAT_USER_PARM_VALUES', 'ALL_REPCAT_USER_AUTHORIZATIONS', + 'ALL_REPCAT_TEMPLATE_SITES', 'ALL_REPCAT_TEMPLATE_PARMS', + 'ALL_REPCAT_TEMPLATE_OBJECTS', 'ALL_REPCAT_REFRESH_TEMPLATES', + 'ALL_REPCAT', 'ALL_REPAUDIT_COLUMN', 'ALL_REPAUDIT_ATTRIBUTE') + ), + 'SYMBOLS' => array( + //PL/SQL delimiters (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2732) + '+', '%', "'", '.', '/', '(', ')', ':', ',', '*', '"', '=', '<', '>', '@', ';', '-', ':=', '=>', '||', '**', '<<', '>>', '/*', '*/', '..', '<>', '!=', '~=', '^=', '<=', '>=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00F;', + 2 => 'color: #000;', + 3 => 'color: #00F;', + 4 => 'color: #F00;', + 5 => 'color: #800;' + ), + 'COMMENTS' => array( + 1 => 'color: #080; font-style: italic;', + 'MULTI' => 'color: #080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #00F;' + ), + 'STRINGS' => array( + 0 => 'color: #F00;' + ), + 'NUMBERS' => array( + 0 => 'color: #800;' + ), + 'METHODS' => array( + 0 => 'color: #0F0;' + ), + 'SYMBOLS' => array( + 0 => 'color: #00F;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => 'color: #0F0;' + ) + ), + 'URLS' => array( + 1 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 2 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 3 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 4 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 5 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array(), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array() +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/python.php b/ehcp/net2ftp/plugins/geshi/geshi/python.php new file mode 100644 index 0000000..96b99d8 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/python.php @@ -0,0 +1,227 @@ + 'Python', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'", '"""'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + + /* + ** Set 1: reserved words + ** http://python.org/doc/current/ref/keywords.html + */ + 1 => array( + 'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break', + 'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec', + 'import', 'pass', 'yield', 'def', 'finally', 'in', 'print' + ), + + /* + ** Set 2: builtins + ** http://python.org/doc/current/lib/built-in-funcs.html + */ + 2 => array( + '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp', + 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', + 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', + 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals', + 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', + 'vars', 'xrange', 'zip', + // Built-in constants: http://python.org/doc/current/lib/node35.html + 'False', 'True', 'None', 'NotImplemented', 'Ellipsis', + // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html + 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError', + 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError', + 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError', + 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError', + 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError', + 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError', + 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning', + 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning', + 'RuntimeWarning', 'FutureWarning', + // self: this is a common python convention (but not a reserved word) + 'self' + ), + + /* + ** Set 3: standard library + ** http://python.org/doc/current/lib/modindex.html + */ + 3 => array( + '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm', + 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer', + 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi', + 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop', + 'collections', 'colorsys', 'commands', 'compileall', 'compiler', 'compiler', + 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt', + 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE', + 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm', + 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl', + 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl', + 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob', + 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib', + 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect', + 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap', + 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify', + 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator', + 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes', + 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile', + 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random', + 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter', + 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve', + 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd', + 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string', + 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev', + 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios', + 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token', + 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2', + 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings', + 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml', + 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib' + ), + + /* + ** Set 4: special methods + ** http://python.org/doc/current/ref/specialnames.html + */ + 4 => array( + /* + // Iterator types: http://python.org/doc/current/lib/typeiter.html + '__iter__', 'next', + // String types: http://python.org/doc/current/lib/string-methods.html + 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', + 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', + 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', + 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', + 'translate', 'upper', 'zfill', + */ + // Basic customization: http://python.org/doc/current/ref/customization.html + '__new__', '__init__', '__del__', '__repr__', '__str__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__', + '__hash__', '__nonzero__', '__unicode__', '__dict__', + // Attribute access: http://python.org/doc/current/ref/attribute-access.html + '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__', + '__delete__', '__slots__', + // Class creation, callable objects + '__metaclass__', '__call__', + // Container types: http://python.org/doc/current/ref/sequence-types.html + '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__', + '__getslice__', '__setslice__', '__delslice__', + // Numeric types: http://python.org/doc/current/ref/numeric-types.html + '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__', + '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__', + '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__', + '__long__','__lshift__', + '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__', + '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__', + '__rshift__','__rsub__','__rmul__','__repr__','__rand__','__rxor__','__ror__', + '__sub__','__xor__' + ) + + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #ff7700;font-weight:bold;', // Reserved + 2 => 'color: #008000;', // Built-ins + self + 3 => 'color: #dc143c;', // Standard lib + 4 => 'color: #0000cd;' // Special methods + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: black;' + ), + 'STRINGS' => array( + 0 => 'color: #483d8b;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff4500;' + ), + 'METHODS' => array( + 1 => 'color: black;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/qbasic.php b/ehcp/net2ftp/plugins/geshi/geshi/qbasic.php new file mode 100644 index 0000000..61dacfc --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/qbasic.php @@ -0,0 +1,146 @@ + 'QBasic/QuickBASIC', + 'COMMENT_SINGLE' => array(1 => "'", 2 => ' REM', 3 => "\tREM"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'DO', 'LOOP', 'WHILE', 'WEND', 'THEN', 'ELSE', 'ELSEIF', 'IF', + 'FOR', 'TO', 'NEXT', 'STEP', 'GOTO', 'GOSUB', 'RETURN', 'RESUME', 'SELECT', + 'CASE', 'UNTIL' + ), + 3 => array( + 'ABS', 'ABSOLUTE', 'ACCESS', 'ALIAS', 'AND', 'ANY', 'APPEND', 'AS', 'ASC', 'ATN', + 'BASE', 'BEEP', 'BINARY', 'BLOAD', 'BSAVE', 'BYVAL', 'CALL', 'CALLS', 'CASE', + 'CDBL', 'CDECL', 'CHAIN', 'CHDIR', 'CHDIR', 'CHR$', 'CINT', 'CIRCLE', 'CLEAR', + 'CLNG', 'CLOSE', 'CLS', 'COM', 'COMMAND$', 'COMMON', 'CONST', 'COS', 'CSNG', + 'CSRLIN', 'CVD', 'CVDMBF', 'CVI', 'CVL', 'CVS', 'CVSMDF', 'DATA', 'DATE$', + 'DECLARE', 'DEF', 'FN', 'SEG', 'DEFDBL', 'DEFINT', 'DEFLNG', 'DEFSNG', 'DEFSTR', + 'DIM', 'DOUBLE', 'DRAW', 'END', 'ENVIRON', 'ENVIRON$', 'EOF', 'EQV', 'ERASE', + 'ERDEV', 'ERDEV$', 'ERL', 'ERR', 'ERROR', 'EXIT', 'EXP', 'FIELD', 'FILEATTR', + 'FILES', 'FIX', 'FRE', 'FREEFILE', 'FUNCTION', 'GET', 'HEX$', 'IMP', 'INKEY$', + 'INP', 'INPUT', 'INPUT$', 'INSTR', 'INT', 'INTEGER', 'IOCTL', 'IOCTL$', 'IS', + 'KEY', 'KILL', 'LBOUND', 'LCASE$', 'LEFT$', 'LEN', 'LET', 'LINE', 'LIST', 'LOC', + 'LOCAL', 'LOCATE', 'LOCK', 'LOF', 'LOG', 'UNLOCK', 'LONG', 'LPOS', 'LPRINT', + 'LSET', 'LTRIM$', 'MID$', 'MKD$', 'MKDIR', 'MKDMBF$', 'MKI$', 'MKL$', + 'MKS$', 'MKSMBF$', 'MOD', 'NAME', 'NOT', 'OCT$', 'OFF', 'ON', 'PEN', 'PLAY', + 'STRIG', 'TIMER', 'UEVENT', 'OPEN', 'OPTION', 'BASE', 'OR', 'OUT', 'OUTPUT', + 'PAINT', 'PALETTE', 'PCOPY', 'PEEK', 'PMAP', 'POINT', 'POKE', 'POS', 'PRESET', + 'PRINT', 'USING', 'PSET', 'PUT', 'RANDOM', 'RANDOMIZE', 'READ', 'REDIM', 'RESET', + 'RESTORE', 'RIGHT$', 'RMDIR', 'RND', 'RSET', 'RTRIM$', 'RUN', 'SADD', 'SCREEN', + 'SEEK', 'SETMEM', 'SGN', 'SHARED', 'SHELL', 'SIGNAL', 'SIN', 'SINGLE', 'SLEEP', + 'SOUND', 'SPACE$', 'SPC', 'SQR', 'STATIC', 'STICK', 'STOP', 'STR$', 'STRIG', + 'STRING', 'STRING$', 'SUB', 'SWAP', 'SYSTEM', 'TAB', 'TAN', 'TIME$', 'TIMER', + 'TROFF', 'TRON', 'TYPE', 'UBOUND', 'UCASE$', 'UEVENT', 'UNLOCK', 'USING', 'VAL', + 'VARPTR', 'VARPTR$', 'VARSEG', 'VIEW', 'WAIT', 'WIDTH', 'WINDOW', 'WRITE', 'XOR' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #a1a100;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #808080;', + 3 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 3 => 'http://www.qbasicnews.com/qboho/qck{FNAMEL}.shtml' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/rails.php b/ehcp/net2ftp/plugins/geshi/geshi/rails.php new file mode 100644 index 0000000..c7e3960 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/rails.php @@ -0,0 +1,404 @@ + 'Rails', + 'COMMENT_SINGLE' => array(1 => "#"), + 'COMMENT_MULTI' => array("=begin" => "=end"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', '`','\''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'and', 'begin', 'break', 'case', 'class', + 'def', 'defined', 'do', 'else', 'elsif', 'end', + 'ensure', 'for', 'if', 'in', 'module', 'while', + 'next', 'not', 'or', 'redo', 'rescue', 'yield', + 'retry', 'super', 'then', 'undef', 'unless', + 'until', 'when', 'BEGIN', 'END', 'include' + ), + 2 => array( + '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true', + 'return' + ), + 3 => array( + 'Array', 'Float', 'Integer', 'String', 'at_exit', + 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!', + 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail', + 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!', + 'iterator?', 'lambda', 'load', 'local_variables', 'loop', + 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts', + 'raise', 'rand', 'readline', 'readlines', 'require', 'select', + 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall', + 'system', 'trace_var', 'trap', 'untrace_var' + ), + 4 => array( + 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark', + 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie', + 'CGI::HtmlExtension', 'CGI::QueryExtension', + 'CGI::Session', 'CGI::Session::FileStore', + 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex', + 'ConditionVariable', 'Continuation', 'Data', + 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB', + 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno', + 'Exception', 'FalseClass', 'File', + 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils', + 'FileUtils::DryRun', 'FileUtils::NoWrite', + 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find', + 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator', + 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary', + 'Iconv::Failure', 'Iconv::IllegalSequence', + 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding', + 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel', + 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application', + 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice', + 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity', + 'Logger::ShiftingError', 'Marshal', 'MatchData', + 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError', + 'NameError::message', 'NilClass', 'NoMemoryError', + 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object', + 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error', + 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID', + 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue', + 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError', + 'RuntimeError', 'ScriptError', 'SecurityError', 'Set', + 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator', + 'SingleForwardable', 'Singleton', 'SingletonClassMethods', + 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO', + 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol', + 'SyncEnumerator', 'SyntaxError', 'SystemCallError', + 'SystemExit', 'SystemStackError', 'Tempfile', + 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread', + 'ThreadError', 'ThreadGroup', + 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI', + 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP', + 'URI::Generic', 'URI::HTTP', 'URI::HTTPS', + 'URI::InvalidComponentError', 'URI::InvalidURIError', + 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP', + 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML', + 'ZeroDivisionError', 'Zlib', + 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate', + 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError', + 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError', + 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader', + 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError', + 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError', + 'Zlib::VersionError', + 'Zlib::ZStream', + 'ActionController::AbstractRequest', + 'ActionController::Assertions::DomAssertions', + 'ActionController::Assertions::ModelAssertions', + 'ActionController::Assertions::ResponseAssertions', + 'ActionController::Assertions::RoutingAssertions', + 'ActionController::Assertions::SelectorAssertions', + 'ActionController::Assertions::TagAssertions', + 'ActionController::Base', + 'ActionController::Benchmarking::ClassMethods', + 'ActionController::Caching', + 'ActionController::Caching::Actions', + 'ActionController::Caching::Actions::ActionCachePath', + 'ActionController::Caching::Fragments', + 'ActionController::Caching::Pages', + 'ActionController::Caching::Pages::ClassMethods', + 'ActionController::Caching::Sweeping', + 'ActionController::Components', + 'ActionController::Components::ClassMethods', + 'ActionController::Components::InstanceMethods', + 'ActionController::Cookies', + 'ActionController::Filters::ClassMethods', + 'ActionController::Flash', + 'ActionController::Flash::FlashHash', + 'ActionController::Helpers::ClassMethods', + 'ActionController::Integration::Session', + 'ActionController::IntegrationTest', + 'ActionController::Layout::ClassMethods', + 'ActionController::Macros', + 'ActionController::Macros::AutoComplete::ClassMethods', + 'ActionController::Macros::InPlaceEditing::ClassMethods', + 'ActionController::MimeResponds::InstanceMethods', + 'ActionController::Pagination', + 'ActionController::Pagination::ClassMethods', + 'ActionController::Pagination::Paginator', + 'ActionController::Pagination::Paginator::Page', + 'ActionController::Pagination::Paginator::Window', + 'ActionController::Rescue', 'ActionController::Resources', + 'ActionController::Routing', + 'ActionController::Scaffolding::ClassMethods', + 'ActionController::SessionManagement::ClassMethods', + 'ActionController::Streaming', 'ActionController::TestProcess', + 'ActionController::TestUploadedFile', + 'ActionController::UrlWriter', + 'ActionController::Verification::ClassMethods', + 'ActionMailer::Base', 'ActionView::Base', + 'ActionView::Helpers::ActiveRecordHelper', + 'ActionView::Helpers::AssetTagHelper', + 'ActionView::Helpers::BenchmarkHelper', + 'ActionView::Helpers::CacheHelper', + 'ActionView::Helpers::CaptureHelper', + 'ActionView::Helpers::DateHelper', + 'ActionView::Helpers::DebugHelper', + 'ActionView::Helpers::FormHelper', + 'ActionView::Helpers::FormOptionsHelper', + 'ActionView::Helpers::FormTagHelper', + 'ActionView::Helpers::JavaScriptHelper', + 'ActionView::Helpers::JavaScriptMacrosHelper', + 'ActionView::Helpers::NumberHelper', + 'ActionView::Helpers::PaginationHelper', + 'ActionView::Helpers::PrototypeHelper', + 'ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods', + 'ActionView::Helpers::ScriptaculousHelper', + 'ActionView::Helpers::TagHelper', + 'ActionView::Helpers::TextHelper', + 'ActionView::Helpers::UrlHelper', 'ActionView::Partials', + 'ActionWebService::API::Method', 'ActionWebService::Base', + 'ActionWebService::Client::Soap', + 'ActionWebService::Client::XmlRpc', + 'ActionWebService::Container::ActionController::ClassMethods', + 'ActionWebService::Container::Delegated::ClassMethods', + 'ActionWebService::Container::Direct::ClassMethods', + 'ActionWebService::Invocation::ClassMethods', + 'ActionWebService::Scaffolding::ClassMethods', + 'ActionWebService::SignatureTypes', 'ActionWebService::Struct', + 'ActiveRecord::Acts::List::ClassMethods', + 'ActiveRecord::Acts::List::InstanceMethods', + 'ActiveRecord::Acts::NestedSet::ClassMethods', + 'ActiveRecord::Acts::NestedSet::InstanceMethods', + 'ActiveRecord::Acts::Tree::ClassMethods', + 'ActiveRecord::Acts::Tree::InstanceMethods', + 'ActiveRecord::Aggregations::ClassMethods', + 'ActiveRecord::Associations::ClassMethods', + 'ActiveRecord::AttributeMethods::ClassMethods', + 'ActiveRecord::Base', + 'ActiveRecord::Calculations::ClassMethods', + 'ActiveRecord::Callbacks', + 'ActiveRecord::ConnectionAdapters::AbstractAdapter', + 'ActiveRecord::ConnectionAdapters::Column', + 'ActiveRecord::ConnectionAdapters::DB2Adapter', + 'ActiveRecord::ConnectionAdapters::DatabaseStatements', + 'ActiveRecord::ConnectionAdapters::FirebirdAdapter', + 'ActiveRecord::ConnectionAdapters::FrontBaseAdapter', + 'ActiveRecord::ConnectionAdapters::MysqlAdapter', + 'ActiveRecord::ConnectionAdapters::OpenBaseAdapter', + 'ActiveRecord::ConnectionAdapters::OracleAdapter', + 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter', + 'ActiveRecord::ConnectionAdapters::Quoting', + 'ActiveRecord::ConnectionAdapters::SQLServerAdapter', + 'ActiveRecord::ConnectionAdapters::SQLiteAdapter', + 'ActiveRecord::ConnectionAdapters::SchemaStatements', + 'ActiveRecord::ConnectionAdapters::SybaseAdapter::ColumnWithIdentity', + 'ActiveRecord::ConnectionAdapters::SybaseAdapterContext', + 'ActiveRecord::ConnectionAdapters::TableDefinition', + 'ActiveRecord::Errors', 'ActiveRecord::Locking', + 'ActiveRecord::Locking::Optimistic', + 'ActiveRecord::Locking::Optimistic::ClassMethods', + 'ActiveRecord::Locking::Pessimistic', + 'ActiveRecord::Migration', 'ActiveRecord::Observer', + 'ActiveRecord::Observing::ClassMethods', + 'ActiveRecord::Reflection::ClassMethods', + 'ActiveRecord::Reflection::MacroReflection', + 'ActiveRecord::Schema', 'ActiveRecord::Timestamp', + 'ActiveRecord::Transactions::ClassMethods', + 'ActiveRecord::Validations', + 'ActiveRecord::Validations::ClassMethods', + 'ActiveRecord::XmlSerialization', + 'ActiveSupport::CachingTools::HashCaching', + 'ActiveSupport::CoreExtensions::Array::Conversions', + 'ActiveSupport::CoreExtensions::Array::Grouping', + 'ActiveSupport::CoreExtensions::Date::Conversions', + 'ActiveSupport::CoreExtensions::Hash::Conversions', + 'ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods', + 'ActiveSupport::CoreExtensions::Hash::Diff', + 'ActiveSupport::CoreExtensions::Hash::Keys', + 'ActiveSupport::CoreExtensions::Hash::ReverseMerge', + 'ActiveSupport::CoreExtensions::Integer::EvenOdd', + 'ActiveSupport::CoreExtensions::Integer::Inflections', + 'ActiveSupport::CoreExtensions::Numeric::Bytes', + 'ActiveSupport::CoreExtensions::Numeric::Time', + 'ActiveSupport::CoreExtensions::Pathname::CleanWithin', + 'ActiveSupport::CoreExtensions::Range::Conversions', + 'ActiveSupport::CoreExtensions::String::Access', + 'ActiveSupport::CoreExtensions::String::Conversions', + 'ActiveSupport::CoreExtensions::String::Inflections', + 'ActiveSupport::CoreExtensions::String::Iterators', + 'ActiveSupport::CoreExtensions::String::StartsEndsWith', + 'ActiveSupport::CoreExtensions::String::Unicode', + 'ActiveSupport::CoreExtensions::Time::Calculations', + 'ActiveSupport::CoreExtensions::Time::Calculations::ClassMethods', + 'ActiveSupport::CoreExtensions::Time::Conversions', + 'ActiveSupport::Multibyte::Chars', + 'ActiveSupport::Multibyte::Handlers::UTF8Handler', 'Binding', + 'Breakpoint', 'Builder::BlankSlate', 'Builder::XmlMarkup', + 'Enumerable', 'Fixtures', + 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector', + 'Inflector::Inflections', 'Mime', 'Mime::Type', + 'OCI8AutoRecover', 'Symbol', 'TimeZone', 'XmlSimple' + ), + 5 => array( + 'image_tag', 'link_to', 'link_to_remote', 'javascript_include_tag', + 'assert_equal', 'assert_not_equal', 'before_filter', + 'after_filter', 'render', 'redirect_to', 'hide_action', + 'render_to_string', 'url_for', 'controller_name', + 'controller_class_name', 'controller_path', 'session', + 'render_component', 'render_component_as_string', 'cookie', + 'layout', 'flash', 'auto_complete_for', 'in_place_editor_for', + 'respond_to', 'paginate', 'current_page', 'each', 'first', + 'first_page', 'last_page', 'last', 'length', 'new', 'page_count', + 'previous', 'next', 'scaffold', 'session', 'send_data', + 'send_file', 'deliver', 'receive', 'error_messages_for', + 'error_message_on', 'form', 'input', 'stylesheet_link_tag', + 'stylesheet_path', 'content_for', 'select_date', 'select', 'ago', + 'month', 'day', 'check_box', 'fields_for', 'file_field', + 'form_for', 'hidden_field', 'text_area', 'password_field', + 'collection_select', 'options_for_select', + 'options_from_collection_for_select', 'file_field_tag', + 'form_for_tag', 'hidden_field_tag', 'text_area_tag', + 'password_field_tag', 'link_to_function', 'javascript_tag', + 'human_size', 'number_to_currency', 'pagination_links', + 'form_remote_tag', 'form_remote_for', 'link_to_remote', + 'submit_to_remote', 'remote_function', 'observe_form', + 'observe_field', 'remote_form_for', 'options_for_ajax', 'alert', + 'call', 'assign', 'show', 'hide', 'insert_html', 'sortable', + 'toggle', 'visual_effect', 'replace', 'replace_html', 'remove', + 'save', 'save!', 'draggable', 'drop_receiving', 'literal', + 'draggable_element', 'drop_receiving_element', 'sortable_element', + 'content_tag', 'tag', 'link_to_image', 'link_to_if', + 'link_to_unless', 'mail_to', 'link_image_to', 'button_to', + 'current_page?', 'act_as_list', 'act_as_nested', 'act_as_tree', + 'has_many', 'has_one', 'belongs_to', 'has_many_and_belogns_to', + 'delete', 'destroy', 'destroy_all', 'clone', 'deep_clone', 'copy', + 'update', 'table_name', 'primary_key', 'sum', 'maximun', 'minimum', + 'count', 'size', 'after_save', 'after_create', 'before_save', + 'before_create', 'add_to_base', 'errors', 'add', 'validate', + 'validate', 'validates_presence_of', 'validates_format_of', + 'validates_numericality_of', 'validates_uniqueness_of', + 'validates_length_of', 'validates_format_of', 'validates_size_of', + 'to_a', 'to_s', 'to_xml', 'to_i' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>', + '+', '-', '=>', '=>', '<<' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + 5 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color:#9966CC; font-weight:bold;', + 2 => 'color:#0000FF; font-weight:bold;', + 3 => 'color:#CC0066; font-weight:bold;', + 4 => 'color:#CC00FF; font-weight:bold;', + 5 => 'color:#5A0A0A; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color:#008000; font-style:italic;', + 'MULTI' => 'color:#000080; font-style:italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color:#000099;' + ), + 'BRACKETS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'STRINGS' => array( + 0 => 'color:#996600;' + ), + 'NUMBERS' => array( + 0 => 'color:#006666;' + ), + 'METHODS' => array( + 1 => 'color:#9900CC;' + ), + 'SYMBOLS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color:#ff6633; font-weight:bold;', + 1 => 'color:#0066ff; font-weight:bold;', + 2 => 'color:#6666ff; font-weight:bold;', + 3 => 'color:#ff3333; font-weight:bold;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", + 3 => array( + GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/reg.php b/ehcp/net2ftp/plugins/geshi/geshi/reg.php new file mode 100644 index 0000000..3957f3b --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/reg.php @@ -0,0 +1,214 @@ + 'Microsoft Registry', + 'COMMENT_SINGLE' => array(1 =>';'), + 'COMMENT_MULTI' => array( ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array(), + 2 => array() + /* Registry Key Constants Not Used + 3 => array( + 'HKEY_LOCAL_MACHINE', + 'HKEY_CLASSES_ROOT', + 'HKEY_CURRENT_USER', + 'HKEY_USERS', + 'HKEY_CURRENT_CONFIG', + 'HKEY_DYN_DATA', + 'HKLM', 'HKCR', 'HKCU', 'HKU', 'HKCC', 'HKDD' + )/***/ + ), + 'SYMBOLS' => array( ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( 1 => 'color: #00CCFF;', + 2 => 'color: #0000FF;' ), + 'COMMENTS' => array( 1 => 'color: #009900;' ), + 'ESCAPE_CHAR' => array(), + 'BRACKETS' => array(0 => 'color: #000000;'), + 'STRINGS' => array( 0 => 'color: #009900;' ), + 'NUMBERS' => array(), + 'METHODS' => array(), + 'SYMBOLS' => array(0 => 'color: #000000;'), + 'SCRIPT' => array(), + 'REGEXPS' => array( + 0 => '', + 1 => 'color: #0000FF;', + 2 => '', + 3 => '', + 4 => 'color: #0000FF;', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'color: #FF6600;', + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + // Highlight Key Delimiters + 0 => array( + GESHI_SEARCH => '((^|\\n)\\s*)(\\\\\\[(.*)\\\\\\])(\\s*(\\n|$))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\5', + GESHI_CLASS => 'kw1' + ), + // Highlight File Format Header Version 5 + 1 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(Windows Registry Editor Version [0-9]+(.)+([0-9]+))((\\n|$)\\s*)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\6', + GESHI_CLASS => 'geshi_registry_header' + ), + // Highlight File Format Header Version 4 + 2 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(REGEDIT [0-9]+)(\\s*(\\n|$))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_registry_header' + ), + // Highlight dword: 32 bit integer values + 3 => array( + GESHI_SEARCH => '(=\\s*)(dword:[0-9]{8})(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_CLASS => 'kw2' + ), + // Highlight variable names + 4 => array( + GESHI_SEARCH => '((\\n|^)\\s*\\"\\;)(.*)(\\"\\;\\s*=)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_variable' + ), + // Highlight String Values + 5 => array( + GESHI_SEARCH => '(=\\s*)(\\"\\;.*\\"\\;)(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_CLASS => 'st0' + ), + // Highlight Hexadecimal Values + 6 => array( + GESHI_SEARCH => '(=\\s*)(hex((\\\\\\([0-9]{1,2}\\\\\\))|()):(([0-9a-fA-F]{2},)|(\\s))*(([0-9a-fA-F]{2})|(\\\\\\\\)))(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\12', + GESHI_CLASS => 'kw2' + ), + // Highlight Hexadecimal Values (Multi-Line) + 7 => array( + GESHI_SEARCH => '((\\n|^)\\s*)((([0-9a-fA-F]{2},)|(\\s))*(([0-9a-fA-F]{2})|(\\\\\\\\)))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\10', + GESHI_CLASS => 'kw2' + ), + // Highlight Default Variable + 8 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(@)(\\s*=)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_variable' + ), + // Highlight GUID's found anywhere. + 9 => array( + GESHI_SEARCH => '(\\{[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\})', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '', + GESHI_CLASS => 'geshi_guid' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); +} +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/robots.php b/ehcp/net2ftp/plugins/geshi/geshi/robots.php new file mode 100644 index 0000000..5746a56 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/robots.php @@ -0,0 +1,98 @@ + 'robots.txt', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'User-agent', 'Disallow' + ) + ), + 'SYMBOLS' => array( + ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => 'http://www.robotstxt.org/wc/norobots.html' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/ruby.php b/ehcp/net2ftp/plugins/geshi/geshi/ruby.php new file mode 100644 index 0000000..1c00787 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/ruby.php @@ -0,0 +1,219 @@ + 'Ruby', + 'COMMENT_SINGLE' => array(1 => "#"), + 'COMMENT_MULTI' => array("=begin" => "=end"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', '`','\''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'and', 'begin', 'break', 'case', 'class', + 'def', 'defined', 'do', 'else', 'elsif', 'end', + 'ensure', 'for', 'if', 'in', 'module', 'while', + 'next', 'not', 'or', 'redo', 'rescue', 'yield', + 'retry', 'super', 'then', 'undef', 'unless', + 'until', 'when', 'BEGIN', 'END', 'include' + ), + 2 => array( + '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true', + 'return' + ), + 3 => array( + 'Array', 'Float', 'Integer', 'String', 'at_exit', + 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!', + 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail', + 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!', + 'iterator?', 'lambda', 'load', 'local_variables', 'loop', + 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts', + 'raise', 'rand', 'readline', 'readlines', 'require', 'select', + 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall', + 'system', 'trace_var', 'trap', 'untrace_var' + ), + 4 => array( + 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark', + 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie', + 'CGI::HtmlExtension', 'CGI::QueryExtension', + 'CGI::Session', 'CGI::Session::FileStore', + 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex', + 'ConditionVariable', 'Continuation', 'Data', + 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB', + 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno', + 'Exception', 'FalseClass', 'File', + 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils', + 'FileUtils::DryRun', 'FileUtils::NoWrite', + 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find', + 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator', + 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary', + 'Iconv::Failure', 'Iconv::IllegalSequence', + 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding', + 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel', + 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application', + 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice', + 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity', + 'Logger::ShiftingError', 'Marshal', 'MatchData', + 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError', + 'NameError::message', 'NilClass', 'NoMemoryError', + 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object', + 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error', + 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID', + 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue', + 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError', + 'RuntimeError', 'ScriptError', 'SecurityError', 'Set', + 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator', + 'SingleForwardable', 'Singleton', 'SingletonClassMethods', + 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO', + 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol', + 'SyncEnumerator', 'SyntaxError', 'SystemCallError', + 'SystemExit', 'SystemStackError', 'Tempfile', + 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread', + 'ThreadError', 'ThreadGroup', + 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI', + 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP', + 'URI::Generic', 'URI::HTTP', 'URI::HTTPS', + 'URI::InvalidComponentError', 'URI::InvalidURIError', + 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP', + 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML', + 'ZeroDivisionError', 'Zlib', + 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate', + 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError', + 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError', + 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader', + 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError', + 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError', + 'Zlib::VersionError', + 'Zlib::ZStream', + 'Enumerable', + 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector', + 'Inflector::Inflections', 'Mime', 'Mime::Type', + 'OCI8AutoRecover', 'Symbol', 'TimeZone', 'XmlSimple' + ), + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>', + '+', '-', '=>', '=>', '<<' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color:#9966CC; font-weight:bold;', + 2 => 'color:#0000FF; font-weight:bold;', + 3 => 'color:#CC0066; font-weight:bold;', + 4 => 'color:#CC00FF; font-weight:bold;', + ), + 'COMMENTS' => array( + 1 => 'color:#008000; font-style:italic;', + 'MULTI' => 'color:#000080; font-style:italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color:#000099;' + ), + 'BRACKETS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'STRINGS' => array( + 0 => 'color:#996600;' + ), + 'NUMBERS' => array( + 0 => 'color:#006666;' + ), + 'METHODS' => array( + 1 => 'color:#9900CC;' + ), + 'SYMBOLS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color:#ff6633; font-weight:bold;', + 1 => 'color:#0066ff; font-weight:bold;', + 2 => 'color:#6666ff; font-weight:bold;', + 3 => 'color:#ff3333; font-weight:bold;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", + 3 => array( + GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + ), + 'TAB_WIDTH' => 2 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/sas.php b/ehcp/net2ftp/plugins/geshi/geshi/sas.php new file mode 100644 index 0000000..12c9642 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/sas.php @@ -0,0 +1,357 @@ + 'SAS', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '_NULL_', '_INFILE_', '_N_', '_WEBOUT_', '_NUMERIC_', '_CHARACTER_', '_ALL_' + ), + 2 => array( + '%BQUOTE', '%NRBQUOTE', '%CMPRES', '%QCMPRES', + + '%COMPSTOR', '%DATATYP', '%DISPLAY', '%DO', + '%ELSE', '%END', '%EVAL', '%GLOBAL', + '%GOTO', '%IF', '%INDEX', '%INPUT', + '%KEYDEF', '%LABEL', '%LEFT', '%LENGTH', + '%LET', '%LOCAL', '%LOWCASE', '%MACRO', + '%MEND', '%NRBQUOTE', '%NRQUOTE', '%NRSTR', + + '%PUT', '%QCMPRES', '%QLEFT', '%QLOWCASE', + '%QSCAN', '%QSUBSTR', '%QSYSFUNC', '%QTRIM', + '%QUOTE', '%QUPCASE', '%SCAN', '%STR', + '%SUBSTR', '%SUPERQ', '%SYSCALL', '%SYSEVALF', + '%SYSEXEC', '%SYSFUNC', '%SYSGET', '%SYSLPUT', + '%SYSPROD', '%SYSRC', '%SYSRPUT', '%THEN', + + '%TO', '%TRIM', '%UNQUOTE', '%UNTIL', + '%UPCASE', '%VERIFY', '%WHILE', '%WINDOW' + ), + 3 => array( + 'ABS', 'ADDR', 'AIRY', 'ARCOS', 'ARSIN', 'ATAN', 'ATTRC', 'ATTRN', + + 'BAND', 'BETAINV', 'BLSHIFT', 'BNOT', 'BOR', 'BRSHIFT', 'BXOR', + 'BYTE', 'CDF', 'CEIL', 'CEXIST', 'CINV', 'CLOSE', 'CNONCT', 'COLLATE', + 'COMPBL', 'COMPOUND', 'COMPRESS', 'COSH', 'COS', 'CSS', 'CUROBS', + 'CV', 'DACCDBSL', 'DACCDB', 'DACCSL', 'DACCSYD', 'DACCTAB', + 'DAIRY', 'DATETIME', 'DATEJUL', 'DATEPART', 'DATE', 'DAY', + 'DCLOSE', 'DEPDBSL', 'DEPDB', 'DEPSL', + + 'DEPSYD', 'DEPSYD', 'DEPTAB', 'DEPTAB', 'DEQUOTE', 'DHMS', + 'DIF', 'DIGAMMA', 'DIM', 'DINFO', 'DNUM', 'DOPEN', 'DOPTNAME', + 'DOPTNUM', 'DREAD', 'DROPNOTE', 'DSNAME', 'ERFC', 'ERF', 'EXIST', + 'EXP', 'FAPPEND', 'FCLOSE', 'FCOL', 'FDELETE', 'FETCHOBS', 'FETCH', + 'FEXIST', 'FGET', 'FILEEXIST', 'FILENAME', 'FILEREF', 'FINFO', + 'FINV', 'FIPNAMEL', 'FIPNAME', 'FIPSTATE', 'FLOOR', 'FNONCT', + + 'FNOTE', 'FOPEN', 'FOPTNAME', 'FOPTNUM', 'FPOINT', 'FPOS', + 'FPUT', 'FREAD', 'FREWIND', 'FRLEN', 'FSEP', 'FUZZ', 'FWRITE', + 'GAMINV', 'GAMMA', 'GETOPTION', 'GETVARC', 'GETVARN', 'HBOUND', + 'HMS', 'HOSTHELP', 'HOUR', 'IBESSEL', 'INDEXW', 'INDEXC', + 'INDEX', 'INPUTN', 'INPUTC', 'INPUT', 'INTRR', 'INTCK', 'INTNX', + 'INT', 'IRR', 'JBESSEL', 'JULDATE', 'KURTOSIS', 'LAG', 'LBOUND', + + 'LEFT', 'LENGTH', 'LGAMMA', 'LIBNAME', 'LIBREF', 'LOG10', + 'LOG2', 'LOGPDF', 'LOGPMF', 'LOGSDF', 'LOG', 'LOWCASE', 'MAX', 'MDY', + 'MEAN', 'MINUTE', 'MIN', 'MOD', 'MONTH', 'MOPEN', 'MORT', + 'NETPV', 'NMISS', 'NORMAL', 'NPV', 'N', 'OPEN', 'ORDINAL', + 'PATHNAME', 'PDF', 'PEEKC', 'PEEK', 'PMF', 'POINT', 'POISSON', 'POKE', + 'PROBBETA', 'PROBBNML', 'PROBCHI', 'PROBF', 'PROBGAM', + + 'PROBHYPR', 'PROBIT', 'PROBNEGB', 'PROBNORM', 'PROBT', 'PUTN', + 'PUTC', 'PUT', 'QTR', 'QUOTE', 'RANBIN', 'RANCAU', 'RANEXP', + 'RANGAM', 'RANGE', 'RANK', 'RANNOR', 'RANPOI', 'RANTBL', 'RANTRI', + 'RANUNI', 'REPEAT', 'RESOLVE', 'REVERSE', 'REWIND', 'RIGHT', + 'ROUND', 'SAVING', 'SCAN', 'SDF', 'SECOND', 'SIGN', 'SINH', 'SIN', + 'SKEWNESS', 'SOUNDEX', 'SPEDIS', 'SQRT', 'STDERR', 'STD', 'STFIPS', + + 'STNAME', 'STNAMEL', 'SUBSTR', 'SUM', 'SYMGET', 'SYSGET', 'SYSMSG', + 'SYSPROD', 'SYSRC', 'SYSTEM', 'TANH', 'TAN', 'TIMEPART', 'TIME', + 'TINV', 'TNONCT', 'TODAY', 'TRANSLATE', 'TRANWRD', 'TRIGAMMA', + 'TRIMN', 'TRIM', 'TRUNC', 'UNIFORM', 'UPCASE', 'USS', + 'VARFMT', 'VARINFMT', 'VARLABEL', 'VARLEN', 'VARNAME', + 'VARNUM', 'VARRAYX', 'VARRAY', 'VARTYPE', 'VAR', 'VERIFY', 'VFORMATX', + + 'VFORMATDX', 'VFORMATD', 'VFORMATNX', 'VFORMATN', 'VFORMATWX', + 'VFORMATW', 'VFORMAT', 'VINARRAYX', 'VINARRAY', 'VINFORMATX', + 'VINFORMATDX', 'VINFORMATD', 'VINFORMATNX', 'VINFORMATN', + 'VINFORMATWX', 'VINFORMATW', 'VINFORMAT', 'VLABELX', + 'VLABEL', 'VLENGTHX', 'VLENGTH', 'VNAMEX', 'VNAME', 'VTYPEX', + 'VTYPE', 'WEEKDAY', 'YEAR', 'YYQ', 'ZIPFIPS', 'ZIPNAME', 'ZIPNAMEL', + + 'ZIPSTATE' + ), + 4 => array( + 'ABORT', 'ARRAY', 'ATTRIB', 'BY', 'CALL', 'CARDS4', 'CATNAME', + 'CONTINUE', 'DATALINES4', 'DELETE', 'DISPLAY', + + 'DM', 'DROP', 'ENDSAS', 'FILENAME', 'FILE', 'FOOTNOTE', + 'FORMAT', 'GOTO', 'INFILE', 'INFORMAT', 'INPUT', 'KEEP', + 'LABEL', 'LEAVE', 'LENGTH', 'LIBNAME', 'LINK', 'LIST', 'LOSTCARD', + 'MERGE', 'MISSING', 'MODIFY', 'OPTIONS', 'OUTPUT', 'PAGE', + 'PUT', 'REDIRECT', 'REMOVE', 'RENAME', 'REPLACE', 'RETAIN', + 'RETURN', 'SELECT', 'SET', 'SKIP', 'STARTSAS', 'STOP', 'TITLE', + + 'UPDATE', 'WAITSAS', 'WHERE', 'WINDOW', 'X', 'SYSTASK', + 'ADD', 'AND', 'ALTER', 'AS', 'CASCADE', 'CHECK', 'CREATE', + 'DELETE', 'DESCRIBE', 'DISTINCT', 'DROP', 'FOREIGN', + 'FROM', 'GROUP', 'HAVING', 'INDEX', 'INSERT', 'INTO', 'IN', + 'KEY', 'LIKE', 'MESSAGE', 'MODIFY', 'MSGTYPE', 'NOT', + 'NULL', 'ON', 'OR', 'ORDER', 'PRIMARY', 'REFERENCES', + + 'RESET', 'RESTRICT', 'SELECT', 'SET', 'TABLE', + 'UNIQUE', 'UPDATE', 'VALIDATE', 'VIEW', 'WHERE' + ), + 5 => array( + 'DO', 'ELSE', 'END', 'IF', 'THEN', 'UNTIL', 'WHILE' + + ), + 6 => array( + 'RUN', 'QUIT', 'DATA' + ), + 7 => array( + + 'ERROR' + ), + 8 => array( + 'WARNING' + ), + + 9 => array( + 'NOTE' + ) + ), + 'SYMBOLS' => array( + + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + + 2 => false, + 3 => false, + 4 => false, + 5 => false, + + 6 => false, + 7 => false, + 8 => false, + 9 => false + + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + + 2 => 'color: #0000ff;', + 3 => 'color: #0000ff;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;', + + 6 => 'color: #000080; font-weight: bold;', + 7 => 'color: #ff0000;', + 8 => 'color: #00ff00;', + 9 => 'color: #0000ff;' + + ), + 'COMMENTS' => array( + 1 => 'color: #006400; font-style: italic;', + 'MULTI' => 'color: #006400; font-style: italic;' + + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #a020f0;' + + ), + 'NUMBERS' => array( + 0 => 'color: #2e8b57; font-weight: bold;' + ), + 'METHODS' => array( + + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + + 0 => '', + 1 => '', + 2 => '', + 3 => '' + + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff; font-weight: bold;', + 1 => 'color: #000080; font-weight: bold;', + + 2 => 'color: #006400; font-style: italic;', + 3 => 'color: #006400; font-style: italic;', + 4 => 'color: #006400; font-style: italic;', + 5 => 'color: #ff0000; font-weight: bold;', + + 6 => 'color: #00ff00; font-style: italic;', + 7 => 'color: #0000ff; font-style: normal;', + 8 => 'color: #b218b2; font-weight: bold;', + 9 => 'color: #b218b2; font-weight: bold;' + + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + + 3 => '', + 4 => '', + 5 => '', + 6 => '', + + 7 => '', + 8 => '', + 9 => '' + ), + + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + + 0 => "&[a-zA-Z_][a-zA-Z0-9_]*", + 1 => array( + GESHI_SEARCH => '(^\\s*)(PROC \\w+)', + GESHI_REPLACE => '\\2', + + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + + 2 => array( + GESHI_SEARCH => '(^\\s*)(\\*.*;)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 3 => array( + + GESHI_SEARCH => '(.*;\\s*)(\\*.*;)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + + GESHI_AFTER => '' + ), + 4 => array( + GESHI_SEARCH => '(^\\s*)(%\\*.*;)', + + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + + ), + 5 => array( + GESHI_SEARCH => '(^ERROR.*)', + GESHI_REPLACE => '\\1', + + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + + 6 => array( + GESHI_SEARCH => '(^WARNING.*)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'im', + + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 7 => array( + + GESHI_SEARCH => '(^NOTE.*)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '', + + GESHI_AFTER => '' + ), + 8 => array( + GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)', + + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'sim', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + + ), + 9 => array( + GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)', + GESHI_REPLACE => '\\2', + + GESHI_MODIFIERS => 'sim', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ) + + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/scheme.php b/ehcp/net2ftp/plugins/geshi/geshi/scheme.php new file mode 100644 index 0000000..70be0ce --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/scheme.php @@ -0,0 +1,170 @@ + 'Scheme', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(';|' => '|;'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'abs', 'acos', 'and', 'angle', 'append', 'appply', 'approximate', + 'asin', 'assoc', 'assq', 'assv', 'atan', + + 'begin', 'boolean?', 'bound-identifier=?', + + 'caar', 'caddr', 'cadr', 'call-with-current-continuation', + 'call-with-input-file', 'call-with-output-file', 'call/cc', 'car', + 'case', 'catch', 'cdddar', 'cddddr', 'cdr', 'ceiling', 'char->integer', + 'char-alphabetic?', 'char-ci<=?', 'char-ci=?', + 'char-ci>?', 'char-ci=?', 'char-downcase', 'char-lower-case?', + 'char-numeric', 'char-ready', 'char-ready?', 'char-upcase', + 'char-upper-case?', 'char-whitespace?', 'char<=?', 'char=?', 'char>?', 'char?', 'close-input-port', 'close-output-port', + 'complex?', 'cond', 'cons', 'construct-identifier', 'cos', + 'current-input-port', 'current-output-port', + + 'd', 'define', 'define-syntax', 'delay', 'denominator', 'display', 'do', + + 'e', 'eof-object?', 'eq?', 'equal?', 'eqv?', 'even?', 'exact->inexact', + 'exact?', 'exp', 'expt', 'else', + + 'f', 'floor', 'for-each', 'force', 'free-identifer=?', + + 'gcd', 'gen-counter', 'gen-loser', 'generate-identifier', + + 'identifier->symbol', 'identifier', 'if', 'imag-part', 'inexact->exact', + 'inexact?', 'input-port?', 'integer->char', 'integer?', 'integrate-system', + + 'l', 'lambda', 'last-pair', 'lcm', 'length', 'let', 'let*', 'letrec', + 'list', 'list->string', 'list->vector', 'list-ref', 'list-tail', 'list?', + 'load', 'log', + + 'magnitude', 'make-polar', 'make-promise', 'make-rectangular', + 'make-string', 'make-vector', 'map', 'map-streams', 'max', 'member', + 'memq', 'memv', 'min', 'modulo', + + 'negative', 'newline', 'nil', 'not', 'null?', 'number->string', 'number?', + 'numerator', + + 'odd?', 'open-input-file', 'open-output-file', 'or', 'output-port', + + 'pair?', 'peek-char', 'positive?', 'procedure?', + + 'quasiquote', 'quote', 'quotient', + + 'rational', 'rationalize', 'read', 'read-char', 'real-part', 'real?', + 'remainder', 'return', 'reverse', + + 's', 'sequence', 'set!', 'set-char!', 'set-cdr!', 'sin', 'sqrt', 'string', + 'string->list', 'string->number', 'string->symbol', 'string-append', + 'string-ci<=?', 'string-ci=?', + 'string-ci>?', 'string-copy', 'string-fill!', 'string-length', + 'string-ref', 'string-set!', 'string<=?', 'string=?', 'string>?', 'string?', 'substring', 'symbol->string', + 'symbol?', 'syntax', 'syntax-rules', + + 't', 'tan', 'template', 'transcript-off', 'transcript-on', 'truncate', + + 'unquote', 'unquote-splicing', 'unwrap-syntax', + + 'vector', 'vector->list', 'vector-fill!', 'vector-length', 'vector-ref', + 'vector-set!', 'vector?', + + 'with-input-from-file', 'with-output-to-file', 'write', 'write-char', + + 'zero?' + + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/sdlbasic.php b/ehcp/net2ftp/plugins/geshi/geshi/sdlbasic.php new file mode 100644 index 0000000..f71721e --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/sdlbasic.php @@ -0,0 +1,161 @@ + 'sdlBasic', + 'COMMENT_SINGLE' => array(1 => "'", 2 => "rem", 3 => "!", 4 => "#"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'const', 'option', 'explicit', 'option', 'qbasic', 'include', 'argc', + 'argv', 'command', 'command$', 'run', 'shell', 'end', 'os', 'declare', + 'sub', 'function', 'return', 'while', 'wend', 'exit', 'while', 'end', + 'while', 'continue', 'if', 'then', 'else', 'elseif', 'end', 'if', + 'select', 'case', 'case', 'else', 'end', 'case', 'for', 'each', 'step', + 'next', 'to', 'continue', 'dim', 'shared', 'common', 'lbound', 'bound', + 'erase', 'asc', 'chr', 'chr$', 'insert', 'insert$', 'instr', 'lcase', + 'lcase$', 'left', 'left$', 'len', 'length', 'ltrim', 'ltrim$', 'mid', + 'mid$', 'replace', 'replace$', 'replacesubstr', 'replacesubstr$', + 'reverse', 'reverse$', 'right', 'right$', 'rinstr', 'rtrim', 'rtrim$', + 'space', 'space$', 'str', 'str$', 'strf', 'strf$', 'string', 'string$', + 'tally', 'trim', 'trim$', 'typeof', 'typeof$', 'ucase', 'ucase$', 'val', + 'abs', 'acos', 'andbit', 'asin', 'atan', 'bitwiseand', 'bitwiseor', + 'bitwisexor', 'cos', 'exp', 'fix', 'floor', 'frac', 'hex', 'hex$', 'int', + 'log', 'min', 'max', 'orbit', 'randomize', 'rnd', 'round', 'sgn', 'sin', + 'sqr', 'tan', 'xorbit', 'open', 'as', 'file', 'input', 'close', 'output', + 'append', 'eof', 'fileexists', 'filecopy', 'filemove', 'filerename', + 'freefile', 'kill', 'loc', 'lof', 'readbyte', 'rename', 'seek', + 'writebyte', 'chdir', 'dir', 'dir$', 'direxists', 'dirfirst', 'dirnext', + 'mkdir', 'rmdir', 'print', 'date', 'date$', 'time', 'time$', 'ticks', + 'data', 'read', 'reservebank', 'freebank', 'copybank', 'loadbank', + 'savebank', 'setbank', 'sizebank', 'poke', 'doke', 'loke', 'peek', 'deek', + 'leek', 'memcopy', 'setdisplay', 'setcaption', 'caption', 'displaywidth', + 'displayheight', 'displaybpp', 'screen', 'directscreen', 'screenopen', + 'screenclose', 'screenclone', 'screencopy', 'screenfade', 'screenfadein', + 'screencrossfade', 'screenalpha', 'screenlock', 'screenunlock', + 'screenrect', 'xscreenrect', 'yscreenrect', 'wscreenrect', 'hscreenrect', + 'flagscreenrect', 'screenwidth', 'screenheight', 'offset', 'xoffset', + 'yoffset', 'cls', 'screenswap', 'autoback', 'setautoback', + 'dualplayfield', 'waitvbl', 'fps', 'rgb', 'enablepalette', 'color', + 'palette', 'colorcycling', 'ink', 'point', 'dot', 'plot', 'line', 'box', + 'bar', 'circle', 'fillcircle', 'ellipse', 'fillellipse', 'paint', + 'loadimage', 'saveimage', 'loadsound', 'savesound', 'loadmusic', + 'hotspot', 'setcolorkey', 'imageexists', 'imagewidth', 'imageheight', + 'deleteimage', 'copyimage', 'setalpha', 'zoomimage', 'rotateimage', + 'rotozoomimage', 'blt', 'pastebob', 'pasteicon', 'grab', 'spriteclip', + 'sprite', 'deletesprite', 'xsprite', 'ysprite', 'spritewidth', + 'spriteheight', 'frsprite', 'livesprite', 'spritehit', 'autoupdatesprite', + 'updatesprite', 'setbob', 'bob', 'deletebob', 'xbob', 'ybob', 'bobwidth', + 'bobheight', 'frbob', 'livebob', 'bobhit', 'autoupdatebob', 'updatebob', + 'text', 'setfont', 'textrender', 'pen', 'paper', 'prints', 'locate', + 'atx', 'aty', 'curson', 'cursoff', 'inputs', 'zoneinputs', + 'isenabledsound', 'soundexists', 'deletesound', 'copysound', + 'musicexists', 'playsound', 'volumesound', 'stopsound', 'pausesound', + 'resumesound', 'vumetersound', 'positionsound', 'soundchannels', + 'playmusic', 'positionmusic', 'stopmusic', 'fademusic', 'pausemusic', + 'resumemusic', 'rewindmusic', 'volumemusic', 'speedmusic', 'numdrivescd', + 'namecd', 'getfreecd', 'opencd', 'indrivecd', 'trackscd', 'curtrackcd', + 'curframecd', 'playcd', 'playtrackscd', 'playtrackscd', 'playtrackscd', + 'pausecd', 'resumecd', 'stopcd', 'ejectcd', 'closecd', 'tracktypecd', + 'tracklengthcd', 'trackoffsetcd', 'key', 'inkey', 'waitkey', 'xmouse', + 'ymouse', 'xmousescreen', 'ymousescreen', 'bmouse', 'changemouse', + 'locatemouse', 'mouseshow', 'mousehide', 'mousezone', 'numjoysticks', + 'namejoystick', 'numaxesjoystick', 'numballsjoystick', 'numhatsjoystick', + 'numbuttonsjoystick', 'getaxisjoystick', 'gethatjoystick', + 'getbuttonjoystick', 'xgetballjoystick', 'ygetballjoystick', 'joy', + 'bjoy', 'wait', 'timer', 'isenabledsock', 'getfreesock', 'opensock', + 'acceptsock', 'isserverready', 'connectsock', 'connectionreadysock', + 'isclientready', 'losesock', 'peeksock', 'readsock', 'readbytesock', + 'readlinesock', 'writesock', 'writebytesock', 'writelinesock', + 'getremoteip', 'getremoteport', 'getlocalip' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #808080;', + 3 => 'color: #808080;', + 4 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/smalltalk.php b/ehcp/net2ftp/plugins/geshi/geshi/smalltalk.php new file mode 100644 index 0000000..4e7e337 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/smalltalk.php @@ -0,0 +1,159 @@ + 'Smalltalk', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('"' => '"'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array('self','super','true','false','nil') + ), + 'SYMBOLS' => array( + '[', ']', '=' , ':=', '(', ')', '#' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #7f007f;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #007f00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #7f0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #7f0000;' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 1 => 'color: #7f0000;', + 2 => 'color: #7f0000;', + 3 => 'color: #00007f;', + 4 => 'color: #7f007f;', + 5 => 'color: #00007f;', + 6 => 'color: #00007f;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '([^a-zA-Z0-9_#])([A-Z]+[a-zA-Z0-9_]*)', //class names + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => '(#+)([a-zA-Z0-9_]+)', //symbols + GESHI_REPLACE => '\\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(#\s*\([^)]*\))', //array symbols + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '\|([a-zA-Z0-9_\s]+)\|', //temporary variables + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '|', + GESHI_AFTER => '|' + ), + 4 => array( + GESHI_SEARCH => '(self|super|true|false|nil)', //keywords again (to avoid matching in next regexp) + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 5 => array( + GESHI_SEARCH => '([:(,=[.*/+-]\s*)([a-zA-Z0-9_]+)', //message parameters, message receivers + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 's', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 6 => array( + GESHI_SEARCH => '([a-zA-Z0-9_]+)(\s*:=)', //assignment targets + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/smarty.php b/ehcp/net2ftp/plugins/geshi/geshi/smarty.php new file mode 100644 index 0000000..02613a0 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/smarty.php @@ -0,0 +1,172 @@ + 'Smarty', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('{*' => '*}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '$smarty', 'now', 'const', 'capture', 'config', 'section', 'foreach', 'template', 'version', 'ldelim', 'rdelim', + 'config_load', 'foreachelse', 'include', 'include_php', 'insert', 'if', 'elseif', 'else', 'php', + 'sectionelse', 'clear_all_cache', 'clear_cache', 'is_cached', + ), + 2 => array( + 'capitalize', 'count_characters', 'cat', 'count_paragraphs', 'count_sentences', 'count_words', 'date_format', + 'default', 'escape', 'indent', 'lower', 'nl2br', 'regex_replace', 'replace', 'spacify', 'string_format', + 'strip', 'strip_tags', 'truncate', 'upper', 'wordwrap' + ), + 3 => array( + 'assign', 'counter', 'cycle', 'debug', 'eval', 'fetch', 'html_checkboxes', 'html_image', 'html_options', + 'html_radios', 'html_select_date', 'html_select_time', 'html_table', 'math', 'mailto', 'popup_init', + 'popup', 'textformat' + ), + 4 => array( + '$template_dir', '$compile_dir', '$config_dir', '$plugins_dir', '$debugging', '$debug_tpl', + '$debugging_ctrl', '$autoload_filters', '$compile_check', '$force_compile', '$caching', '$cache_dir', + '$cache_lifetime', '$cache_handler_func', '$cache_modified_check', '$config_overwrite', + '$config_booleanize', '$config_read_hidden', '$config_fix_newlines', '$default_template_handler_func', + '$php_handling', '$security', '$secure_dir', '$security_settings', '$trusted_dir', '$left_delimiter', + '$right_delimiter', '$compiler_class', '$request_vars_order', '$request_use_auto_globals', + '$error_reporting', '$compile_id', '$use_sub_dirs', '$default_modifiers', '$default_resource_type' + ), + 5 => array( + 'append', 'append_by_ref', 'assign', 'assign_by_ref', 'clear_all_assign', 'clear_all_cache', + 'clear_assign', 'clear_cache', 'clear_compiled_tpl', 'clear_config', 'config_load', 'display', + 'fetch', 'get_config_vars', 'get_registered_object', 'get_template_vars', 'is_cached', + 'load_filter', 'register_block', 'register_compiler_function', 'register_function', + 'register_modifier', 'register_object', 'register_outputfilter', 'register_postfilter', + 'register_prefilter', 'register_resource', 'trigger_error', 'template_exists', 'unregister_block', + 'unregister_compiler_function', 'unregister_function', 'unregister_modifier', 'unregister_object', + 'unregister_outputfilter', 'unregister_postfilter', 'unregister_prefilter', 'unregister_resource' + ), + 6 => array( + 'name', 'assign', 'file', 'scope', 'global', 'key', 'once', 'script', + 'loop', 'start', 'step', 'max', 'show', 'values', 'value', 'from', 'item' + ), + 7 => array( + 'eq', 'neq', 'ne', 'lte', 'gte', 'ge', 'le', 'not', 'mod' + ), + ), + 'SYMBOLS' => array( + '/', '=', '==', '!=', '>', '<', '>=', '<=', '!', '%' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', //Functions + 2 => 'color: #008000;', //Modifiers + 3 => 'color: #0600FF;', //Custom Functions + 4 => 'color: #804040;', //Variables + 5 => 'color: #008000;', //Methods + 6 => 'color: #6A0A0A;', //Attributes + 7 => 'color: #D36900;' //Text-based symbols + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #D36900;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #D36900;' + ), + 'SCRIPT' => array( + 0 => '' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => 'http://smarty.php.net/{FNAME}', + 2 => 'http://smarty.php.net/{FNAME}', + 3 => 'http://smarty.php.net/{FNAME}', + 4 => 'http://smarty.php.net/{FNAME}', + 5 => 'http://smarty.php.net/{FNAME}', + 6 => '', + 7 => 'http://smarty.php.net/{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '{' => '}' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true + ), + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#;>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-&" + ) + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/sql.php b/ehcp/net2ftp/plugins/geshi/geshi/sql.php new file mode 100644 index 0000000..b21298e --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/sql.php @@ -0,0 +1,135 @@ + 'SQL', + 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 1, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'ALL', 'ASC', 'AS', 'ALTER', 'AND', 'ADD', 'AUTO_INCREMENT', + 'BETWEEN', 'BINARY', 'BOTH', 'BY', 'BOOLEAN', + 'CHANGE', 'CHECK', 'COLUMNS', 'COLUMN', 'CROSS','CREATE', + 'DATABASES', 'DATABASE', 'DATA', 'DELAYED', 'DESCRIBE', 'DESC', 'DISTINCT', 'DELETE', 'DROP', 'DEFAULT', + 'ENCLOSED', 'ESCAPED', 'EXISTS', 'EXPLAIN', + 'FIELDS', 'FIELD', 'FLUSH', 'FOR', 'FOREIGN', 'FUNCTION', 'FROM', + 'GROUP', 'GRANT', + 'HAVING', + 'IGNORE', 'INDEX', 'INFILE', 'INSERT', 'INNER', 'INTO', 'IDENTIFIED', 'IN', 'IS', 'IF', + 'JOIN', + 'KEYS', 'KILL','KEY', + 'LEADING', 'LIKE', 'LIMIT', 'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOW_PRIORITY', 'LEFT', 'LANGUAGE', + 'MODIFY', + 'NATURAL', 'NOT', 'NULL', 'NEXTVAL', + 'OPTIMIZE', 'OPTION', 'OPTIONALLY', 'ORDER', 'OUTFILE', 'OR', 'OUTER', 'ON', + 'PROCEEDURE','PROCEDURAL', 'PRIMARY', + 'READ', 'REFERENCES', 'REGEXP', 'RENAME', 'REPLACE', 'RETURN', 'REVOKE', 'RLIKE', 'RIGHT', + 'SHOW', 'SONAME', 'STATUS', 'STRAIGHT_JOIN', 'SELECT', 'SETVAL', 'SET', + 'TABLES', 'TEMINATED', 'TO', 'TRAILING','TRUNCATE', 'TABLE', 'TEMPORARY', 'TRIGGER', 'TRUSTED', + 'UNIQUE', 'UNLOCK', 'USE', 'USING', 'UPDATE', 'UNSIGNED', + 'VALUES', 'VARIABLES', 'VIEW', + 'WITH', 'WRITE', 'WHERE', + 'ZEROFILL', + 'XOR', + ) + ), + 'SYMBOLS' => array( + '(', ')', '=', '<', '>', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/tcl.php b/ehcp/net2ftp/plugins/geshi/geshi/tcl.php new file mode 100644 index 0000000..697ce8d --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/tcl.php @@ -0,0 +1,181 @@ + 'TCL', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + + /* + ** Set 1: reserved words + ** http://python.org/doc/current/ref/keywords.html + */ + 1 => array( + 'proc', 'global', 'upvar', 'if', 'then', 'else', 'elseif', 'for', 'foreach', + 'break', 'continue', 'while', 'set', 'eval', 'case', 'in', 'switch', + 'default', 'exit', 'error', 'proc', 'return', 'uplevel', 'loop', + 'for_array_keys', 'for_recursive_glob', 'for_file', 'unwind_protect', + 'expr', 'catch', 'namespace', 'rename', 'variable', + // itcl + 'method', 'itcl_class', 'public', 'protected'), + + /* + ** Set 2: builtins + ** http://asps.activatestate.com/ASPN/docs/ActiveTcl/8.4/tcl/tcl_2_contents.htm + */ + 2 => array( + // string handling + 'append', 'binary', 'format', 're_syntax', 'regexp', 'regsub', + 'scan', 'string', 'subst', + // list handling + 'concat', 'join', 'lappend', 'lindex', 'list', 'llength', 'lrange', + 'lreplace', 'lsearch', 'lset', 'lsort', 'split', + // math + 'expr', + // procedures and output + 'incr', 'close', 'eof', 'fblocked', 'fconfigure', 'fcopy', 'file', + 'fileevent', 'flush', 'gets', 'open', 'puts', 'read', 'seek', + 'socket', 'tell', + // packages and source files + 'load', 'loadTk', 'package', 'pgk::create', 'pgk_mkIndex', 'source', + // interpreter routines + 'bgerror', 'history', 'info', 'interp', 'memory', 'unknown', + // library routines + 'enconding', 'http', 'msgcat', + // system related + 'cd', 'clock', 'exec', 'exit', 'glob', 'pid', 'pwd', 'time', + // platform specified + 'dde', 'registry', 'resource', + // special variables + '$argc', '$argv', '$errorCode', '$errorInfo', '$argv0', + '$auto_index', '$auto_oldpath', '$auto_path', '$env', + '$tcl_interactive', '$tcl_libpath', '$tcl_library', + '$tcl_pkgPath', '$tcl_platform', '$tcl_precision', '$tcl_traceExec', + ), + + /* + ** Set 3: standard library + */ + 3 => array( + 'comment', 'dde', 'filename', 'http', 'library', 'memory', + 'packagens', 'registry', 'resource', 'tcltest', 'tclvars', + ), + + /* + ** Set 4: special methods + */ + 4 => array( + ) + + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '$', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #ff7700;font-weight:bold;', // Reserved + 2 => 'color: #008000;', // Built-ins + self + 3 => 'color: #dc143c;', // Standard lib + 4 => 'color: #0000cd;' // Special methods + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: black;' + ), + 'STRINGS' => array( + 0 => 'color: #483d8b;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff4500;' + ), + 'METHODS' => array( + 1 => 'color: black;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff3333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '::' + ), + 'REGEXPS' => array( + 0 => '[\\$]+[a-zA-Z_][a-zA-Z0-9_]*', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/text.php b/ehcp/net2ftp/plugins/geshi/geshi/text.php new file mode 100644 index 0000000..8388696 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/text.php @@ -0,0 +1,81 @@ + 'Text', + 'COMMENT_SINGLE' => array( ), + 'COMMENT_MULTI' => array( ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( ), + 'SYMBOLS' => array( ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array(), + 'COMMENTS' => array(), + 'ESCAPE_CHAR' => array(), + 'BRACKETS' => array(), + 'STRINGS' => array(), + 'NUMBERS' => array(), + 'METHODS' => array(), + 'SYMBOLS' => array(), + 'SCRIPT' => array(), + 'REGEXPS' => array() + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array( ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( ), + 'HIGHLIGHT_STRICT_BLOCK' => array( ) +); +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); + $this->set_brackets_highlighting(false); + $this->disable_highlighting(); +} +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/thinbasic.php b/ehcp/net2ftp/plugins/geshi/geshi/thinbasic.php new file mode 100644 index 0000000..aa79ec6 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/thinbasic.php @@ -0,0 +1,864 @@ + 'thinBasic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'XOR','XML_TREETOSTRING','XML_PARSEFILE','XML_PARSE','XML_PARENT','XML_NODETYPE','XML_NODETOSTRING','XML_NEXTSIBLING', + 'XML_LASTERROR','XML_GETTAG','XML_FREE','XML_FINDNODE','XML_DECODEPARAM','XML_CHILDDATA','XML_CHILD','XML_ATTRIBVALUE', + 'XML_ATTRIBNAME','XML_ATTRIBCOUNT','WORD','WITH','WIN_SHOW','WIN_SETTITLE','WIN_SETFOREGROUND','WIN_ISZOOMED', + 'WIN_ISVISIBLE','WIN_ISICONIC','WIN_GETTITLE','WIN_GETFOREGROUND','WIN_GETCLASS','WIN_GETACTIVE','WIN_FLASH','WIN_FINDBYTITLE', + 'WIN_FINDBYCLASS','WHILE','WEND','VERIFY','VARPTR','VARIANTVT$','VARIANTVT','VARIANT', + 'VARIABLE_GETINFO','VARIABLE_EXISTS','VARIABLE_EXIST','VALUE','VAL','USING$','USING','USES', + 'USER','UNTIL','UNITS','UNION','UNICODE2ASCII','UDP_SEND','UDP_RECV','UDP_OPENSERVER', + 'UDP_OPEN','UDP_FREEFILE','UDP_CLOSE','UCODE$','UCASE$','UBOUND','TYPE','TRIMFULL$', + 'TRIM$','TOOLTIP','TOKENIZER_MOVETOEOL','TOKENIZER_KEYSETUSERSTRING','TOKENIZER_KEYSETUSERNUMBER','TOKENIZER_KEYGETUSERSTRING','TOKENIZER_KEYGETUSERNUMBER','TOKENIZER_KEYGETSUBTYPE', + 'TOKENIZER_KEYGETNAME','TOKENIZER_KEYGETMAINTYPE','TOKENIZER_KEYFIND','TOKENIZER_KEYADD','TOKENIZER_GETNEXTTOKEN','TOKENIZER_DEFAULT_SET','TOKENIZER_DEFAULT_GET','TOKENIZER_DEFAULT_CODE', + 'TOKENIZER_DEFAULT_CHAR','TO','TIMER','TIME$','THEN','TEXTBOX','TEXT','TCP_SEND', + 'TCP_RECV','TCP_PRINT','TCP_OPEN','TCP_LINEINPUT','TCP_FREEFILE','TCP_CLOSE','TB_IMGCTX_SETIMAGEADJUSTMENT','TB_IMGCTX_LOADIMAGE', + 'TB_IMGCTX_GETIMAGEADJUSTMENT','TBGL_VIEWPORT','TBGL_VERTEX','TBGL_USETEXTUREFLAG','TBGL_USETEXTURE','TBGL_USELINESTIPPLEFLAG','TBGL_USELINESTIPPLE','TBGL_USELIGHTSOURCEFLAG', + 'TBGL_USELIGHTSOURCE','TBGL_USELIGHTINGFLAG','TBGL_USELIGHTING','TBGL_USEFOGFLAG','TBGL_USEFOG','TBGL_USEDEPTHMASK','TBGL_USEDEPTHFLAG','TBGL_USEDEPTH', + 'TBGL_USECLIPPLANEFLAG','TBGL_USECLIPPLANE','TBGL_USEBLENDFLAG','TBGL_USEBLEND','TBGL_USEALPHATEST','TBGL_TRANSLATE','TBGL_TORUS','TBGL_TEXCOORD2D', + 'TBGL_SPHERE','TBGL_SHOWWINDOW','TBGL_SHOWCURSOR','TBGL_SETWINDOWTITLE','TBGL_SETUPLIGHTSOURCE','TBGL_SETUPFOG','TBGL_SETUPCLIPPLANE','TBGL_SETPRIMITIVEQUALITY', + 'TBGL_SETLIGHTPARAMETER','TBGL_SETDRAWDISTANCE','TBGL_SCALE','TBGL_SAVESCREENSHOT','TBGL_ROTATEXYZ','TBGL_ROTATE','TBGL_RESETMATRIX','TBGL_RENDERTOTEXTURE', + 'TBGL_RENDERMATRIX3D','TBGL_RENDERMATRIX2D','TBGL_PUSHMATRIX','TBGL_PRINTFONT','TBGL_PRINTBMP','TBGL_PRINT','TBGL_POS3DTOPOS2D','TBGL_POPMATRIX', + 'TBGL_POLYGONLOOK','TBGL_POINTSIZE','TBGL_POINTINSIDE3D','TBGL_NORMAL','TBGL_NEWLIST','TBGL_MOUSEGETWHEELDELTA','TBGL_MOUSEGETRBUTTON','TBGL_MOUSEGETPOSY', + 'TBGL_MOUSEGETPOSX','TBGL_MOUSEGETMBUTTON','TBGL_MOUSEGETLBUTTON','TBGL_M15SETVERTEXZ','TBGL_M15SETVERTEXY','TBGL_M15SETVERTEXXYZ','TBGL_M15SETVERTEXX','TBGL_M15SETVERTEXTEXY', + 'TBGL_M15SETVERTEXTEXXY','TBGL_M15SETVERTEXTEXX','TBGL_M15SETVERTEXTEXN','TBGL_M15SETVERTEXRGB','TBGL_M15SETVERTEXR','TBGL_M15SETVERTEXPSTOP','TBGL_M15SETVERTEXPARAM','TBGL_M15SETVERTEXLAYER', + 'TBGL_M15SETVERTEXG','TBGL_M15SETVERTEXB','TBGL_M15SETMODELVERTEXCOUNT','TBGL_M15SETBONECHILD','TBGL_M15ROTBONEZ','TBGL_M15ROTBONEY','TBGL_M15ROTBONEX','TBGL_M15ROTBONE', + 'TBGL_M15RESETBONES','TBGL_M15RECALCNORMALS','TBGL_M15LOADMODEL','TBGL_M15INITMODELBUFFERS','TBGL_M15GETVERTEXZ','TBGL_M15GETVERTEXY','TBGL_M15GETVERTEXXYZ','TBGL_M15GETVERTEXX', + 'TBGL_M15GETVERTEXTEXY','TBGL_M15GETVERTEXTEXXY','TBGL_M15GETVERTEXTEXX','TBGL_M15GETVERTEXTEXN','TBGL_M15GETVERTEXRGB','TBGL_M15GETVERTEXR','TBGL_M15GETVERTEXPSTOP','TBGL_M15GETVERTEXPARAM', + 'TBGL_M15GETVERTEXLAYER','TBGL_M15GETVERTEXG','TBGL_M15GETVERTEXB','TBGL_M15GETMODELVERTEXCOUNT','TBGL_M15GETMODELPOLYCOUNT','TBGL_M15ERASECHILDBONES','TBGL_M15DRAWMODEL','TBGL_M15DEFBONERESET', + 'TBGL_M15DEFBONELAYER','TBGL_M15DEFBONEBOX','TBGL_M15DEFBONEANCHOR','TBGL_M15DEFBONEADDVERTEX','TBGL_M15CLEARMODEL','TBGL_M15APPLYBONES','TBGL_M15ADDBONETREEITEM','TBGL_LOADTEXTURE', + 'TBGL_LOADFONT','TBGL_LOADBMPFONT','TBGL_LINEWIDTH','TBGL_LINESTIPPLE','TBGL_KILLFONT','TBGL_ISWINDOW','TBGL_ISPOINTVISIBLE','TBGL_ISPOINTBEHINDVIEW', + 'TBGL_GETWINDOWMULTIKEYSTATE','TBGL_GETWINDOWKEYSTATE','TBGL_GETWINDOWKEYONCE','TBGL_GETWINDOWCLIENT','TBGL_GETTEXTURENAME','TBGL_GETTEXTURELIST','TBGL_GETPIXELINFO','TBGL_GETMULTIASYNCKEYSTATE', + 'TBGL_GETLASTGLERROR','TBGL_GETFRAMERATE','TBGL_GETDESKTOPINFO','TBGL_GETASYNCKEYSTATE','TBGL_ERRORMESSAGES','TBGL_ENDPOLY','TBGL_ENDLIST','TBGL_DRAWFRAME', + 'TBGL_DESTROYWINDOW','TBGL_DELETELIST','TBGL_CYLINDER','TBGL_CREATEWINDOWEX','TBGL_CREATEWINDOW','TBGL_COLORALPHA','TBGL_COLOR','TBGL_CLEARFRAME', + 'TBGL_CAMERA','TBGL_CALLLIST','TBGL_BUILDFONT','TBGL_BOX','TBGL_BLENDFUNC','TBGL_BINDTEXTURE','TBGL_BEGINPOLY','TBGL_BACKCOLOR', + 'TBGL_ALPHAFUNC','TBDI_JOYZ','TBDI_JOYY','TBDI_JOYX','TBDI_JOYSTOPEFFECT','TBDI_JOYSLIDER','TBDI_JOYSETRANGEZ','TBDI_JOYSETRANGEY', + 'TBDI_JOYSETRANGEXYZ','TBDI_JOYSETRANGEX','TBDI_JOYSETDEADZONEZ','TBDI_JOYSETDEADZONEY','TBDI_JOYSETDEADZONEXYZ','TBDI_JOYSETDEADZONEX','TBDI_JOYSETAUTOCENTER','TBDI_JOYRZ', + 'TBDI_JOYRY','TBDI_JOYRX','TBDI_JOYPOV','TBDI_JOYPLAYEFFECT','TBDI_JOYLOADEFFECT','TBDI_JOYHASFF','TBDI_JOYHASEFFECT','TBDI_JOYGETEFFECTNAME', + 'TBDI_JOYGETEFFECTGUID','TBDI_JOYCREATEEFFECT','TBDI_JOYCOUNTPOV','TBDI_JOYCOUNTEFFECTS','TBDI_JOYCOUNTBTN','TBDI_JOYCOUNTAXES','TBDI_JOYBUTTON','TBDI_JOYAVAIL', + 'TBDI_INIT','TBASS_STREAMFREE','TBASS_STREAMCREATEFILE','TBASS_SETVOLUME','TBASS_SETEAXPRESET','TBASS_SETEAXPARAMETERS','TBASS_SETCONFIG','TBASS_SET3DPOSITION', + 'TBASS_SET3DFACTORS','TBASS_SAMPLELOAD','TBASS_SAMPLEGETCHANNEL','TBASS_MUSICLOAD','TBASS_MUSICFREE','TBASS_INIT','TBASS_GETVOLUME','TBASS_GETVERSION', + 'TBASS_GETCONFIG','TBASS_FREE','TBASS_ERRORGETCODE','TBASS_CHANNELSTOP','TBASS_CHANNELSETPOSITION','TBASS_CHANNELSETATTRIBUTES','TBASS_CHANNELSET3DPOSITION','TBASS_CHANNELPLAY', + 'TBASS_CHANNELPAUSE','TBASS_CHANNELISACTIVE','TBASS_CHANNELGETPOSITION','TBASS_CHANNELGETLENGTH','TBASS_CHANNELGETATTRIBUTES','TBASS_APPLY3D','TANH','TANGENT', + 'TAN','TALLY','TABCTRL_ONNOTIFY','TABCTRL_INSERTITEM','TABCTRL_GETCURSEL','SWAP','SUB','STRZIP$', + 'STRUNZIP$','STRREVERSE$','STRPTRLEN','STRPTR','STRINSERT$','STRING$','STRING','STRDELETE$', + 'STR$','STOP','STEP','STDOUT','STDIN','STAT_SUM','STAT_STDERROR','STAT_STDDEVIATION', + 'STAT_RANDOM','STAT_PRODUCT','STAT_MIN','STAT_MEDIAN','STAT_MEANHARMONIC','STAT_MEANGEOMETRIC','STAT_MEANARITHMETIC','STAT_MAX', + 'STAT_INVERSESUM','STAT_HISTOGRAM','STAT_FILLARRAY','STAT_COUNT','STAT_COPYARRAY','STAT_CLONEARRAY','STAT_CHISQUARE','STATIC', + 'STATE','SQR','SPLIT','SORT','SMTP_STATISTICS','SMTP_SETOPTION','SMTP_SETLOGFILE','SMTP_SENDHTML', + 'SMTP_SENDEMAIL','SMTP_GETERROR','SMTP_FINISHED','SMTP_DEBUG','SMTP_CONNECT','SMTP_CLOSE','SLEEP','SIZEOF', + 'SIZE','SINH','SINGLE','SIN','SIGNED','SHOW','SHIFT','SHAPETOBMP', + 'SGN','SETAT','SET','SENDMESSAGE','SENDKEYSBULK','SENDKEYS','SEND','SELECTEXPRESSION', + 'SELECT','SECH','SEC','SCAN','SAPI_SPEAK','SAPI_SETVOLUME','SAPI_SETRATE','SAPI_MODULELOADED', + 'SAPI_GETVOLUME','SAPI_GETRATE','RTRIM$','RTF_SETTEXT','RTF_SETFONTSIZE','RTF_SETFONTNAME','RTF_SETFGCOLOR','RTF_SETEFFECT', + 'RTF_SETBGCOLOR','RTF_SETALIGN','RTF_SAVETOFILE','RTF_LOADFROMFILE','RTF_GETTEXT','RTF_GETFONTSIZE','RTF_GETFONTNAME','RTF_GETEFFECT', + 'RTF_GETCLASS','RTF_APPENDTEXT','RSET$','ROUND','RNDF','RND','RIGHT$','RIGHT', + 'RGB','RESOURCE','RESIZE','RESET','REPLACE$','REPEAT$','REMOVE$','REM', + 'REGISTRY_SETVALUE','REGISTRY_SETTXTNUM','REGISTRY_SETTXTBOOL','REGISTRY_SETDWORD','REGISTRY_GETVALUE','REGISTRY_GETTXTNUM','REGISTRY_GETTXTBOOL','REGISTRY_GETDWORD', + 'REGISTRY_GETALLKEYS','REGISTRY_DELVALUE','REGISTRY_DELKEY','REFERENCE','REF','REDRAW','REDIM','RAS_SETPARAMS', + 'RAS_OPENDIALUPDIALOG','RAS_LOADENTRIES','RAS_HANGUPALL','RAS_HANGUP','RAS_GETENTRY','RAS_BEGINDIAL','RANDOMIZE','RADTODEG', + 'QUERYPERFORMANCEFREQUENCY','QUERYPERFORMANCECOUNTER','QUAD','PTR','PRESERVE','POST','POPUP','POKE$', + 'POKE','PIXELS','PI','PERMUTATIONS','PEEKMESSAGE','PEEK$','PEEK','PC_SYSTEMUPFROM', + 'PC_SUSPENDSTATE','PC_SHUTDOWN','PC_SHOWCARET','PC_SETCARETBLINKTIME','PC_RESTARTDIALOG','PC_PREVENTSHUTDOWN','PC_LOCK','PC_INSERTCD', + 'PC_HIDECARET','PC_GETSTATEONOFF','PC_GETSCROLLLOCKKEYSTATE','PC_GETNUMLOCKKEYSTATE','PC_GETCARETBLINKTIME','PC_GETCAPSLOCKKEYSTATE','PC_EMPTYBIN','PC_EJECTCD', + 'PC_DECODECDERROR','PCT','PARSESET$','PARSECOUNT','PARSE$','PARSE','PARAMETERS','OUTSIDE', + 'OS_WINVERSIONTEXT','OS_WINGETVERSIONTIMELINE','OS_SHELLEXECUTE','OS_SHELLABOUT','OS_SHELL','OS_SETLASTCALLDLLERROR','OS_SERVICESTOP','OS_SERVICESTATUSDESCRIPTION', + 'OS_SERVICESTARTTYPEDESCRIPTION','OS_SERVICESTART','OS_SERVICESETSTARTTYPE','OS_SERVICEQUERY','OS_SERVICEGETSTARTTYPE','OS_SERVICEGETLIST','OS_PROCESSKILLBYNAME','OS_PROCESSKILLBYID', + 'OS_PROCESSISRUNNING','OS_PROCESSGETLIST','OS_PROCESSGETID','OS_PROCESSARERUNNING','OS_MESSAGEBEEP','OS_ISWOW64','OS_ISFEATUREPRESENT','OS_IEVERSION', + 'OS_GETWINDOWSDIR','OS_GETUSERNAME','OS_GETTEMPDIR','OS_GETSYSTEMDIR','OS_GETSPECIALFOLDER','OS_GETLASTCALLDLLSTATUS','OS_GETLASTCALLDLLERROR','OS_GETCURRENTTHREADID', + 'OS_GETCURRENTPROCESSID','OS_GETCOMPUTERNAME','OS_GETCOMMANDS','OS_GETCOMMAND','OS_FLASHWINDOW','OS_FATALAPPEXIT','OS_ENVIRON','OS_CALLDLL', + 'OR','OPTIONAL','OPTION','OPT','ONCE','ON','OFF','NUMBER', + 'NOT','NEXT','NEW','MSGBOX','MOUSEPTR','MODULE','MODELESS','MODAL', + 'MOD','MKWRD$','MKS$','MKQ$','MKL$','MKI$','MKE$','MKDWD$', + 'MKD$','MKCUX$','MKCUR$','MKBYT$','MIN$','MIN','MID$','MENU', + 'MDI_CREATE','MCASE$','MAX$','MAX','MAKWRD','MAKLNG','MAKINT','MAKDWR', + 'LTRIM$','LSET$','LOWRD','LOOP','LONG','LOINT','LOG_WRITE','LOGB', + 'LOG2','LOG10','LOG','LOCAL','LOC','LL_UPDATEBYNAME','LL_UPDATE','LL_TOSTRING', + 'LL_TOFILE','LL_NAME','LL_GETITEM','LL_GETBYNUMBER','LL_FROMFILE','LL_FREE','LL_FINDLAST','LL_FINDBYNAME', + 'LL_FINDBYDATA','LL_DELETELIKE','LL_DELETEBYNAME','LL_DELETE','LL_DATABYNAME','LL_DATA','LL_COUNT','LL_ADD', + 'LISTBOX','LINE','LIBRARY_EXISTS','LIB','LEN','LEFT$','LEFT','LCASE$', + 'LBOUND','LABEL','KILL','JOIN$','ITERATE','ISWINDOW','ISUNICODE','ISTRUE', + 'ISODD','ISLIKE','ISFALSE','ISEVEN','IP_TOSTRING','IP_ADDR','INTERNALINFO','INTEGER', + 'INT','INSTR','INSIDE','INPUTBOX$','INI_SETKEY','INI_GETSECTIONSLIST','INI_GETSECTIONKEYLIST','INI_GETKEY', + 'INET_URLDOWNLOAD','INET_PING','INET_OPENDIALUPDIALOG','INET_GETSTATE','INET_GETREMOTEMACADDRESS','INET_GETIP','INET_GETCONNECTIONMODE','INCR', + 'IN','IMAGE','IIF$','IIF','IF','ICRYPTO_TESTSHA1','ICRYPTO_TESTMD5','ICRYPTO_TESTCRC32', + 'ICRYPTO_TESTCRC16','ICRYPTO_STRING2ASCII','ICRYPTO_SHA1','ICRYPTO_MD5','ICRYPTO_ENCRYPTRIJNDAEL','ICRYPTO_ENCRYPTRC4','ICRYPTO_DECRYPTRIJNDAEL','ICRYPTO_DECRYPTRC4', + 'ICRYPTO_CRC32','ICRYPTO_CRC16','ICRYPTO_BYTEXOR','ICRYPTO_BIN2ASCII','ICRYPTO_ASCII2STRING','ICRYPTO_ASCII2BIN','HOST_ADDR','HOSTNAME_TOIP', + 'HOSTIP_TONAME','HIWRD','HIINT','HEX$','HASH','HANDLE','GUIDTXT$','GUID$', + 'GRAPHIC','GLVOID','GLUSHORT','GLUINT','GLUBYTE','GLSIZEI','GLSHORT','GLOBAL', + 'GLINT','GLFLOAT','GLENUM','GLDOUBLE','GLCLAMPF','GLCLAMPD','GLBYTE','GLBOOLEAN', + 'GLBITFIELD','GETWINDOWMULTIKEYSTATE','GETWINDOWKEYSTATE','GETTICKCOUNT','GETS','GETMULTIASYNCKEYSTATE','GETMESSAGE','GETCURRENTINSTANCE', + 'GETAT','GETASYNCKEYSTATE','GET','FUNCTION_NPARAMS','FUNCTION_EXISTS','FUNCTION_CPARAMS','FUNCTION','FTP_SETSTRING', + 'FTP_SETSERVERDIR','FTP_SETNUMBER','FTP_SETMODE','FTP_SETLOGFILE','FTP_SETLOCALDIR','FTP_QUIT','FTP_PUTFILE','FTP_GETSTRING', + 'FTP_GETSERVERDIR','FTP_GETNUMBER','FTP_GETLOCALDIR','FTP_GETLIST','FTP_GETFILE','FTP_GETERRORSTRING','FTP_GETERRORNUMBER','FTP_FINISHED', + 'FTP_EXTRACT','FTP_DELFILE','FTP_CONNECT','FTP_COMMAND','FRAME','FRAC','FORMAT$','FOR', + 'FONT_LIST','FONT_CREATE','FONT','FOCUS','FLUSH','FIX','FILE_SIZE','FILE_SHELLDELETE', + 'FILE_SHELLCOPY','FILE_SETDATETIME','FILE_SEEK','FILE_SAVE','FILE_RENAME','FILE_PUT','FILE_PATHSPLIT','FILE_OPEN', + 'FILE_LOF','FILE_LOAD','FILE_LINEPRINT','FILE_LINEINPUT','FILE_KILL','FILE_GETVERSIONSTRING','FILE_GETVERSION','FILE_GETTIME', + 'FILE_GETDATETIMESTAMP','FILE_GETDATETIME','FILE_GETDATE','FILE_GET','FILE_EXISTS','FILE_EOF','FILE_COPY','FILE_CLOSE', + 'FILE_CHANGED','FILE_APPEND','FACTORIAL','EXTRACT$','EXT','EXPORT','EXP2','EXP10', + 'EXP','EXIT','EVAL_STRING','EVAL_SETSTRING','EVAL_SETNUMBER','EVAL_MATH','EVAL_LINKEXT','EVAL_GETSTRING', + 'EVAL_GETNUMBER','EVAL_ERRORGETTOKEN','EVAL_ERRORDESCRIPTION','EVAL_ERRORCLEAR','EVAL','ERRCLEAR','ERR','ENGINE_GETCURRENTTOKEN', + 'ENDIF','END','ENABLE','ELSEIF','ELSE','ECHO','DWORD','DT_YEAR', + 'DT_TIMETOSEC','DT_TIMESUBSECONDS','DT_TIMEFORMAT','DT_TIMEADDSECONDS','DT_SETTIMESEPARATOR','DT_SETDATESEPARATOR','DT_SETDATECENTURY','DT_SECTOTIME', + 'DT_SECTODATE','DT_SECOND','DT_MONTH','DT_MINUTE','DT_LASTDAYOFMONTH','DT_ISVALIDDATE','DT_ISLEAPYEAR','DT_HOUR', + 'DT_GETWEEKDAYNAME','DT_GETWEEKDAY','DT_GETTIMESTAMP','DT_GETTIMESEPARATOR','DT_GETMONTHNAME','DT_GETDATESEPARATOR','DT_GETDATECENTURY','DT_DAY', + 'DT_DATETOSEC','DT_DATETIMESUBSECONDS','DT_DATETIMEADDSECONDS','DT_DATESUBDAYS','DT_DATEFORMAT','DT_DATEDIFF','DT_DATEADDDAYS','DT_COOKIEDATE', + 'DRAW','DOUBLE','DOEVENTS','DO','DISABLE','DIR_REMOVE','DIR_MAKEALL','DIR_MAKE', + 'DIR_LISTARRAY','DIR_LIST','DIR_ISEMPTY','DIR_ISDIR','DIR_GETCURRENT','DIR_EXISTS','DIR_CHANGEDRIVE','DIR_CHANGE', + 'DIM','DICTIONARY_MEMINFO','DICTIONARY_LISTKEYS','DICTIONARY_FREE','DICTIONARY_FIND','DICTIONARY_EXISTS','DICTIONARY_CREATE','DICTIONARY_COUNT', + 'DICTIONARY_ADD','DIALOG_STOPEVENTS','DIALOG_SAVEFILE','DIALOG_OPENFILE','DIALOG_GETCONTROL','DIALOG_CHOOSECOLOR','DIALOG_BROWSEFORFOLDER','DIALOG', + 'DESKTOP','DESCENDING','DESCEND','DELETEOBJECT','DELETE','DEGTORAD','DECR','DECLARE', + 'DATE$','CVWRD','CVS','CVQ','CVL','CVI','CVE','CVDWD', + 'CVD','CVCUX','CVCUR','CVBYT','CURRENCY','CUR','CSET$','CSCH', + 'CSC','CRYPTO_GETPROVIDERTYPESCOUNT','CRYPTO_GETPROVIDERSCOUNT','CRYPTO_GETDEFAULTPROVIDER','CRYPTO_GENRANDOMSTRING','CRYPTO_ENUMPROVIDERTYPES','CRYPTO_ENUMPROVIDERS','CRYPTO_ENCRYPT', + 'CRYPTO_DECRYPT','CREATEFONT','COTH','COTAN','COSH','COS','CONTROL_SETTEXT','CONTROL_GETTEXT', + 'CONTROL_GETNUMBER','CONTROL','CONST','CONSOLE_WRITELINE','CONSOLE_WRITE','CONSOLE_WAITKEY','CONSOLE_SHOWWINDOW','CONSOLE_SHOWCURSOR', + 'CONSOLE_SETTITLE','CONSOLE_SETTEXTATTRIBUTE','CONSOLE_SETSTDHANDLE','CONSOLE_SETSCREENBUFFERSIZE','CONSOLE_SETPROGRESSBARCHAR','CONSOLE_SETOUTPUTMODE','CONSOLE_SETOUTPUTCP','CONSOLE_SETINPUTMODE', + 'CONSOLE_SETFILEAPISTOOEM','CONSOLE_SETFILEAPISTOANSI','CONSOLE_SETCURSORSIZE','CONSOLE_SETCURSORPOSITION','CONSOLE_SETCP','CONSOLE_SETACTIVESCREENBUFFER','CONSOLE_SCROLLWINDOW','CONSOLE_SCROLLBUFFERONEROW', + 'CONSOLE_SCROLLBUFFER','CONSOLE_SAVESCREEN','CONSOLE_RESTORESCREEN','CONSOLE_READLINE','CONSOLE_READ','CONSOLE_PROGRESSBAR','CONSOLE_PRINTLINE','CONSOLE_PRINTAT', + 'CONSOLE_PRINT','CONSOLE_NORMALSCREEN','CONSOLE_LINE','CONSOLE_INKEYB','CONSOLE_INKEY','CONSOLE_HIDECURSOR','CONSOLE_GETTITLE','CONSOLE_GETTEXTATTRIBUTE', + 'CONSOLE_GETSTDHANDLE','CONSOLE_GETSIZEY','CONSOLE_GETSIZEX','CONSOLE_GETPROGRESSBARCHAR','CONSOLE_GETOUTPUTMODE','CONSOLE_GETOUTPUTCP','CONSOLE_GETNUMBEROFMOUSEBUTTONS','CONSOLE_GETINPUTMODE', + 'CONSOLE_GETCURSORY','CONSOLE_GETCURSORX','CONSOLE_GETCURSORSIZE','CONSOLE_GETCURRENTFONTINDEX','CONSOLE_GETCP','CONSOLE_GENERATECTRLEVENT','CONSOLE_FULLSCREEN','CONSOLE_FREE', + 'CONSOLE_FOREGROUNDRGB','CONSOLE_ENABLECTRLC','CONSOLE_DISABLECTRLC','CONSOLE_CREATESCREENBUFFER','CONSOLE_COLORAT','CONSOLE_CLS','CONSOLE_BOX','CONSOLE_BACKGROUNDRGB', + 'CONSOLE_ATTACH','CONSOLE_AREFILEAPISANSI','CONSOLE_ALLOC','COM_VARIANTINIT','COM_VARIANTCOPY','COM_VARIANTCLEAR','COM_SUCCEEDED','COM_STRINGFROMCLSID', + 'COM_RELEASE','COM_QUERYINTERFACE','COM_PROGIDFROMCLSID','COM_ISEQUALIID','COM_ISEQUALGUID','COM_ISEQUALCLSID','COM_GETOBJECT','COM_GETENGINEGUID', + 'COM_EXECUTE','COM_DISPLAYERROR','COM_CREATEOBJECT','COM_CLSIDFROMSTRING','COM_CLSIDFROMPROGID','COM_BUILDVARIANT','COMBOBOX','COMBINATIONS', + 'COLOR','CLIPBOARD_SETTEXT','CLIPBOARD_GETTEXT','CLIENT','CLEARMESSAGES','CHR$','CHOOSE$','CHOOSE', + 'CHECKBOX','CHECK3STATE','CHECK','CGI_WRITELOGFILE','CGI_WRITE','CGI_URLDECODESTRING','CGI_UPLOADFILESTIME','CGI_UPLOADFILESNUMBER', + 'CGI_UPLOADFILESIZE','CGI_STARTSESSION','CGI_SETSESSIONVARIABLE','CGI_RESETDEFAULTSETTINGS','CGI_REMOVESPECIALCHARSPREFIX','CGI_REMOVEQUOTE','CGI_READ','CGI_LOADCONFIGFILE', + 'CGI_HEADER','CGI_GETSESSIONVARIABLE','CGI_GETREQUESTMETHOD','CGI_GETQUERYVALUE','CGI_GETCURRENTSESSION','CGI_GETCURRENTGUID','CGI_ENVIRON','CGI_CFGSETOPTION', + 'CGI_CFGGETOPTION','CGI_ADDSPECIALCHARSPREFIX','CGI_ADDQUOTE','CEIL','CASE','CALL','BYVAL','BYTE', + 'BYREF','BYCMD','BUTTON','BUNDLE_SETSCRIPTPARAMETERS','BUNDLE_SETSCRIPTNAME','BUNDLE_SETFLAGOBFUSCATEMAINSCRIPT','BUNDLE_SETFLAGDELETEAFTERRUN','BUNDLE_SETFLAGCOMPRESSALLFILES', + 'BUNDLE_SETFLAGASKBEFOREEXTRACT','BUNDLE_SETEXTRACTIONFOLDER','BUNDLE_SETCREATIONFOLDER','BUNDLE_SETBUNDLENAME','BUNDLE_RESET','BUNDLE_MAKE','BUNDLE_BUILDER','BUNDLE_ADDFOLDER', + 'BUNDLE_ADDFILE','BOUNDCHECK','BIN$','BIFF_WRITETEXT','BIFF_WRITENUMBER','BIFF_WRITEDATE','BIFF_SETROWHEIGHT','BIFF_SETCOLWIDTH', + 'BIFF_SETBUFFER','BIFF_CREATEFILE','BIFF_CLOSEFILE','BETWEEN','BEEP','BAR','ATTACH','ATN', + 'AT','ASSIGN','ASCIZ','ASCIIZ','ASCII2UNICODE','ASCENDING','ASCEND','ASC', + 'AS','ARRAY','ARCTANH','ARCSINH','ARCSIN','ARCSECH','ARCSEC','ARCCSCH', + 'ARCCSC','ARCCOTH','ARCCOT','ARCCOSH','ARCCOS','APP_TIMER','APP_SOURCEPATH','APP_SOURCENAME', + 'APP_SOURCEFULLNAME','APP_PATH','APP_NAME','APP_LISTVARIABLES','APP_LISTKEYWORDS','APP_LISTFUNCTIONS','APP_LISTEQUATES','APP_INCLUDEPATH', + 'APP_GETMODULEFULLPATH','APP_COUNTER','APPEND','ANY','ANIMATE_STOP','ANIMATE_PLAY','ANIMATE_OPEN','AND', + 'ALIAS','ALERT','ADD','ACODE$','ABS','%DEF','#MINVERSION','#IF', + '#ENDIF','#ELSEIF','#ELSE','#DEFAULT','#DEF','SQLWRITEPRIVATEPROFILESTRING','SQLWRITEFILEDSN','SQLWRITEDSNTOINI', + 'SQLVALIDDSN','SQLTRANSACT','SQLTABLES','SQLTABLEPRIVILEGES','SQLSTATISTICS','SQLSPECIALCOLUMNS','SQLSETSTMTOPTION','SQLSETSTMTATTR', + 'SQLSETSCROLLOPTIONS','SQLSETPOS','SQLSETPARAM','SQLSETENVATTR','SQLSETDESCREC','SQLSETDESCFIELD','SQLSETCURSORNAME','SQLSETCONNECTOPTION', + 'SQLSETCONNECTATTR','SQLSETCONFIGMODE','SQLROWCOUNT','SQLREMOVETRANSLATOR','SQLREMOVEDSNFROMINI','SQLREMOVEDRIVERMANAGER','SQLREMOVEDRIVER','SQLREADFILEDSN', + 'SQLPUTDATA','SQLPROCEDURES','SQLPROCEDURECOLUMNS','SQLPRIMARYKEYS','SQLPREPARE','SQLPOSTINSTALLERERROR','SQLPARAMOPTIONS','SQLPARAMDATA', + 'SQLNUMRESULTCOLS','SQLNUMPARAMS','SQLNATIVESQL','SQLMORERESULTS','SQLMANAGEDATASOURCES','SQLINSTALLTRANSLATOREX','SQLINSTALLERERROR','SQLINSTALLDRIVERMANAGER', + 'SQLINSTALLDRIVEREX','SQLGETTYPEINFO','SQLGETTRANSLATOR','SQLGETSTMTOPTION','SQLGETSTMTATTR','SQLGETPRIVATEPROFILESTRING','SQLGETINSTALLEDDRIVERS','SQLGETINFO', + 'SQLGETFUNCTIONS','SQLGETENVATTR','SQLGETDIAGREC','SQLGETDIAGFIELD','SQLGETDESCREC','SQLGETDESCFIELD','SQLGETDATA','SQLGETCURSORNAME', + 'SQLGETCONNECTOPTION','SQLGETCONNECTATTR','SQLGETCONFIGMODE','SQLFREESTMT','SQLFREEHANDLE','SQLFREEENV','SQLFREECONNECT','SQLFOREIGNKEYS', + 'SQLFETCHSCROLL','SQLFETCH','SQLEXTENDEDFETCH','SQLEXECUTE','SQLEXECDIRECT','SQLERROR','SQLENDTRAN','SQLDRIVERS', + 'SQLDRIVERCONNECT','SQLDISCONNECT','SQLDESCRIBEPARAM','SQLDESCRIBECOL','SQLDATASOURCES','SQLCREATEDATASOURCE','SQLCOPYDESC','SQLCONNECT', + 'SQLCONFIGDRIVER','SQLCONFIGDATASOURCE','SQLCOLUMNS','SQLCOLUMNPRIVILEGES','SQLCOLATTRIBUTES','SQLCOLATTRIBUTE','SQLCLOSECURSOR','SQLCANCEL', + 'SQLBULKOPERATIONS','SQLBROWSECONNECT','SQLBINDPARAMETER','SQLBINDPARAM','SQLBINDCOL','SQLALLOCSTMT','SQLALLOCHANDLE','SQLALLOCENV', + 'SQLALLOCCONNECT','ODBCWRONGDRIVER','ODBCWRITEPRIVATEPROFILESTRING','ODBCWRITEFILEDSN','ODBCWRITEDSNTOINI','ODBCVALIDDSN','ODBCUPDATERECORD','ODBCUPDATEBYBOOKMARK', + 'ODBCUNLOCKRECORD','ODBCUNBINDCOLUMNS','ODBCUNBINDCOL','ODBCTABLESCOUNT','ODBCTABLES','ODBCTABLEPRIVILEGESCOUNT','ODBCTABLEPRIVILEGES','ODBCSUPPORTS', + 'ODBCSTATTABLESCHEMANAME','ODBCSTATTABLEPAGES','ODBCSTATTABLECATALOGNAME','ODBCSTATTABLECARDINALITY','ODBCSTATISTICSCOUNT','ODBCSTATISTICS','ODBCSTATINDEXSORTSEQUENCE','ODBCSTATINDEXSCHEMANAME', + 'ODBCSTATINDEXQUALIFIER','ODBCSTATINDEXPAGES','ODBCSTATINDEXFILTERCONDITION','ODBCSTATINDEXCOLUMNORDINALPOSITION','ODBCSTATINDEXCOLUMNNAME','ODBCSTATINDEXCATALOGNAME','ODBCSTATINDEXCARDINALITY','ODBCSTATINDEXALLOWDUPLICATES', + 'ODBCSPECIALCOLUMNSCOUNT','ODBCSPECIALCOLUMNS','ODBCSETTXNISOLATION','ODBCSETTRANSLATELIB','ODBCSETTRACEFILE','ODBCSETTRACE','ODBCSETSTMTUSEBOOKMARKS','ODBCSETSTMTSIMULATECURSOR', + 'ODBCSETSTMTROWSTATUSPTR','ODBCSETSTMTROWSFETCHEDPTR','ODBCSETSTMTROWOPERATIONPTR','ODBCSETSTMTROWBINDTYPE','ODBCSETSTMTROWBINDOFFSETPTR','ODBCSETSTMTROWARRAYSIZE','ODBCSETSTMTRETRIEVEDATA','ODBCSETSTMTQUERYTIMEOUT', + 'ODBCSETSTMTPARAMSTATUSPTR','ODBCSETSTMTPARAMSPROCESSEDPTR','ODBCSETSTMTPARAMSETSIZE','ODBCSETSTMTPARAMOPERATIONPTR','ODBCSETSTMTPARAMBINDTYPE','ODBCSETSTMTPARAMBINDOFFSETPTR','ODBCSETSTMTNOSCAN','ODBCSETSTMTMETADATAID', + 'ODBCSETSTMTMAXROWS','ODBCSETSTMTMAXLENGTH','ODBCSETSTMTKEYSETSIZE','ODBCSETSTMTFETCHBOOKMARKPTR','ODBCSETSTMTENABLEAUTOIPD','ODBCSETSTMTCURSORTYPE','ODBCSETSTMTCURSORSENSITIVITY','ODBCSETSTMTCURSORSCROLLABLE', + 'ODBCSETSTMTCONCURRENCY','ODBCSETSTMTATTR','ODBCSETSTMTASYNCENABLE','ODBCSETSTMTAPPROWDESC','ODBCSETSTMTAPPPARAMDESC','ODBCSETSTATICCURSOR','ODBCSETROWVERCONCURRENCY','ODBCSETRESULT', + 'ODBCSETRELATIVEPOSITION','ODBCSETREADONLYCONCURRENCY','ODBCSETQUIETMODE','ODBCSETPOSITION','ODBCSETPOS','ODBCSETPACKETMODE','ODBCSETOPTIMISTICCONCURRENCY','ODBCSETODBCCURSORS', + 'ODBCSETMULTIUSERKEYSETCURSOR','ODBCSETMETADATAID','ODBCSETLOGINTIMEOUT','ODBCSETLOCKCONCURRENCY','ODBCSETKEYSETDRIVENCURSOR','ODBCSETFORWARDONLYCURSOR','ODBCSETENVOUTPUTNTS','ODBCSETENVODBCVERSION', + 'ODBCSETENVCPMATCH','ODBCSETENVCONNECTIONPOOLING','ODBCSETENVATTR','ODBCSETDYNAMICCURSOR','ODBCSETDESCREC','ODBCSETDESCFIELD','ODBCSETCURSORTYPE','ODBCSETCURSORSENSITIVITY', + 'ODBCSETCURSORSCROLLABILITY','ODBCSETCURSORNAME','ODBCSETCURSORLOCKTYPE','ODBCSETCURSORKEYSETSIZE','ODBCSETCURSORCONCURRENCY','ODBCSETCURRENTCATALOG','ODBCSETCONNECTIONTIMEOUT','ODBCSETCONNECTATTR', + 'ODBCSETCONFIGMODE','ODBCSETCONCURVALUESCONCURRENCY','ODBCSETAUTOCOMMITON','ODBCSETAUTOCOMMITOFF','ODBCSETAUTOCOMMIT','ODBCSETASYNCENABLE','ODBCSETACCESSMODE','ODBCSETABSOLUTEPOSITION', + 'ODBCROWCOUNT','ODBCROLLBACKTRAN','ODBCROLLBACKENVTRAN','ODBCROLLBACKDBCTRAN','ODBCRESULT','ODBCRESETPARAMS','ODBCREMOVETRANSLATOR','ODBCREMOVEDSNFROMINI', + 'ODBCREMOVEDRIVERMANAGER','ODBCREMOVEDRIVER','ODBCREFRESHRECORD','ODBCRECORDCOUNT','ODBCREADFILEDSN','ODBCQUOTEDIDENTIFIERCASE','ODBCPUTDATA','ODBCPROCEDURESCOUNT', + 'ODBCPROCEDURES','ODBCPROCEDURECOLUMNSCOUNT','ODBCPROCEDURECOLUMNS','ODBCPRIMARYKEYSCOUNT','ODBCPRIMARYKEYS','ODBCPREPARE','ODBCPOSTINSTALLERERROR','ODBCPARAMDATA', + 'ODBCOPENSTMT','ODBCOPENCONNECTION','ODBCNUMRESULTCOLS','ODBCNUMPARAMS','ODBCNATIVESQL','ODBCMOVEPREVIOUS','ODBCMOVENEXT','ODBCMOVELAST', + 'ODBCMOVEFIRST','ODBCMOVE','ODBCMORERESULTS','ODBCMANAGEDATASOURCES','ODBCLOCKRECORD','ODBCINSTALLTRANSLATOREX','ODBCINSTALLERERROR','ODBCINSTALLDRIVERMANAGER', + 'ODBCINSTALLDRIVEREX','ODBCGETXOPENCLIYEAR','ODBCGETUSERNAME','ODBCGETUNION','ODBCGETTYPEINFOCOUNT','ODBCGETTYPEINFO','ODBCGETTXNISOLATIONOPTION','ODBCGETTXNISOLATION', + 'ODBCGETTXNCAPABLE','ODBCGETTRANSLATOR','ODBCGETTRANSLATELIB','ODBCGETTRACEFILE','ODBCGETTRACE','ODBCGETTIMEDATEFUNCTIONS','ODBCGETTIMEDATEDIFFINTERVALS','ODBCGETTIMEDATEADDINTERVALS', + 'ODBCGETTABLETERM','ODBCGETSYSTEMFUNCTIONS','ODBCGETSUBQUERIES','ODBCGETSTRINGFUNCTIONS','ODBCGETSTMTUSEBOOKMARKS','ODBCGETSTMTSQLSTATE','ODBCGETSTMTSIMULATECURSOR','ODBCGETSTMTROWSTATUSPTR', + 'ODBCGETSTMTROWSFETCHEDPTR','ODBCGETSTMTROWOPERATIONPTR','ODBCGETSTMTROWNUMBER','ODBCGETSTMTROWBINDTYPE','ODBCGETSTMTROWBINDOFFSETPTR','ODBCGETSTMTROWARRAYSIZE','ODBCGETSTMTRETRIEVEDATA','ODBCGETSTMTQUERYTIMEOUT', + 'ODBCGETSTMTPARAMSTATUSPTR','ODBCGETSTMTPARAMSPROCESSEDPTR','ODBCGETSTMTPARAMSETSIZE','ODBCGETSTMTPARAMOPERATIONPTR','ODBCGETSTMTPARAMBINDTYPE','ODBCGETSTMTPARAMBINDOFFSETPTR','ODBCGETSTMTNOSCAN','ODBCGETSTMTMETADATAID', + 'ODBCGETSTMTMAXROWS','ODBCGETSTMTMAXLENGTH','ODBCGETSTMTKEYSETSIZE','ODBCGETSTMTIMPROWDESC','ODBCGETSTMTIMPPARAMDESC','ODBCGETSTMTFETCHBOOKMARKPTR','ODBCGETSTMTERRORINFO','ODBCGETSTMTENABLEAUTOIPD', + 'ODBCGETSTMTCURSORTYPE','ODBCGETSTMTCURSORSENSITIVITY','ODBCGETSTMTCURSORSCROLLABLE','ODBCGETSTMTCONCURRENCY','ODBCGETSTMTATTR','ODBCGETSTMTASYNCENABLE','ODBCGETSTMTAPPROWDESC','ODBCGETSTMTAPPPARAMDESC', + 'ODBCGETSTATICCURSORATTRIBUTES2','ODBCGETSTATICCURSORATTRIBUTES1','ODBCGETSTATEMENTSQLSTATE','ODBCGETSTATEMENTERRORINFO','ODBCGETSTANDARDCLICONFORMANCE','ODBCGETSQLSTATE','ODBCGETSQLCONFORMANCE','ODBCGETSQL92VALUEEXPRESSIONS', + 'ODBCGETSQL92STRINGFUNCTIONS','ODBCGETSQL92ROWVALUECONSTRUCTOR','ODBCGETSQL92REVOKE','ODBCGETSQL92RELATIONALJOINOPERATORS','ODBCGETSQL92PREDICATES','ODBCGETSQL92NUMERICVALUEFUNCTIONS','ODBCGETSQL92GRANT','ODBCGETSQL92FOREIGNKEYUPDATERULE', + 'ODBCGETSQL92FOREIGNKEYDELETERULE','ODBCGETSQL92DATETIMEFUNCTIONS','ODBCGETSPECIALCHARACTERS','ODBCGETSERVERNAME','ODBCGETSEARCHPATTERNESCAPE','ODBCGETSCROLLOPTIONS','ODBCGETSCHEMAUSAGE','ODBCGETSCHEMATERM', + 'ODBCGETROWUPDATES','ODBCGETQUIETMODE','ODBCGETPROCEDURETERM','ODBCGETPROCEDURESSUPPORT','ODBCGETPRIVATEPROFILESTRING','ODBCGETPOSOPERATIONS','ODBCGETPARAMARRAYSELECTS','ODBCGETPARAMARRAYROWCOUNTS', + 'ODBCGETPACKETMODE','ODBCGETOUTERJOINS','ODBCGETORDERBYCOLUMNSINSELECT','ODBCGETOJCAPABILITIES','ODBCGETODBCVER','ODBCGETODBCINTERFACECONFORMANCE','ODBCGETODBCCURSORS','ODBCGETNUMERICFUNCTIONS', + 'ODBCGETNULLCOLLATION','ODBCGETNONNULLABLECOLUMNS','ODBCGETNEEDLONGDATALEN','ODBCGETMULTRESULTSETS','ODBCGETMULTIPLEACTIVETXN','ODBCGETMETADATAID','ODBCGETMAXUSERNAMELEN','ODBCGETMAXTABLESINSELECT', + 'ODBCGETMAXTABLENAMELEN','ODBCGETMAXSTATEMENTLEN','ODBCGETMAXSCHEMANAMELEN','ODBCGETMAXROWSIZEINCLUDESLONG','ODBCGETMAXROWSIZE','ODBCGETMAXPROCEDURENAMELEN','ODBCGETMAXINDEXSIZE','ODBCGETMAXIDENTIFIERLEN', + 'ODBCGETMAXDRIVERCONNECTIONS','ODBCGETMAXCURSORNAMELEN','ODBCGETMAXCONCURRENTACTIVITIES','ODBCGETMAXCOLUMNSINTABLE','ODBCGETMAXCOLUMNSINSELECT','ODBCGETMAXCOLUMNSINORDERBY','ODBCGETMAXCOLUMNSININDEX','ODBCGETMAXCOLUMNSINGROUPBY', + 'ODBCGETMAXCOLUMNNAMELEN','ODBCGETMAXCHARLITERALLEN','ODBCGETMAXCATALOGNAMELEN','ODBCGETMAXBINARYLITERALLEN','ODBCGETMAXASYNCCONCURRENTSTATEMENTS','ODBCGETLONGVARCHARDATABYCOLNAME','ODBCGETLONGVARCHARDATA','ODBCGETLOGINTIMEOUT', + 'ODBCGETLIKEESCAPECLAUSE','ODBCGETKEYWORDS','ODBCGETKEYSETCURSORATTRIBUTES2','ODBCGETKEYSETCURSORATTRIBUTES1','ODBCGETINTEGRITY','ODBCGETINSTALLERERRORMESSAGE','ODBCGETINSTALLERERRORCODE','ODBCGETINSTALLEDDRIVERS', + 'ODBCGETINSERTSTATEMENT','ODBCGETINFOSTR','ODBCGETINFOSCHEMAVIEWS','ODBCGETINFOLONG','ODBCGETINFOINT','ODBCGETINFO','ODBCGETINDEXKEYWORDS','ODBCGETIMPROWDESCREC', + 'ODBCGETIMPROWDESCFIELDTYPE','ODBCGETIMPROWDESCFIELDSCALE','ODBCGETIMPROWDESCFIELDPRECISION','ODBCGETIMPROWDESCFIELDOCTETLENGTH','ODBCGETIMPROWDESCFIELDNULLABLE','ODBCGETIMPROWDESCFIELDNAME','ODBCGETIMPROWDESCFIELD','ODBCGETIMPPARAMDESCREC', + 'ODBCGETIMPPARAMDESCFIELDTYPE','ODBCGETIMPPARAMDESCFIELDSCALE','ODBCGETIMPPARAMDESCFIELDPRECISION','ODBCGETIMPPARAMDESCFIELDOCTETLENGTH','ODBCGETIMPPARAMDESCFIELDNULLABLE','ODBCGETIMPPARAMDESCFIELDNAME','ODBCGETIMPPARAMDESCFIELD','ODBCGETIDENTIFIERQUOTECHAR', + 'ODBCGETIDENTIFIERCASE','ODBCGETGROUPBY','ODBCGETFUNCTIONS','ODBCGETFORWARDONLYCURSORATTRIBUTES2','ODBCGETFORWARDONLYCURSORATTRIBUTES1','ODBCGETFILEUSAGE','ODBCGETEXPRESSIONSINORDERBY','ODBCGETERRORINFO', + 'ODBCGETENVSQLSTATE','ODBCGETENVOUTPUTNTS','ODBCGETENVODBCVERSION','ODBCGETENVIRONMENTSQLSTATE','ODBCGETENVIRONMENTERRORINFO','ODBCGETENVERRORINFO','ODBCGETENVCPMATCH','ODBCGETENVCONNECTIONPOOLING', + 'ODBCGETENVATTR','ODBCGETDYNAMICCURSORATTRIBUTES2','ODBCGETDYNAMICCURSORATTRIBUTES1','ODBCGETDROPVIEW','ODBCGETDROPTRANSLATION','ODBCGETDROPTABLE','ODBCGETDROPSCHEMA','ODBCGETDROPDOMAIN', + 'ODBCGETDROPCOLLATION','ODBCGETDROPCHARACTERSET','ODBCGETDROPASSERTION','ODBCGETDRIVERVER','ODBCGETDRIVERODBCVER','ODBCGETDRIVERNAME','ODBCGETDRIVERMANAGERINSTALLPATH','ODBCGETDRIVERHLIB', + 'ODBCGETDRIVERHENV','ODBCGETDRIVERHDBC','ODBCGETDMVERMINOR','ODBCGETDMVERMAJOR','ODBCGETDMVER','ODBCGETDIAGREC','ODBCGETDIAGFIELD','ODBCGETDESCSQLSTATE', + 'ODBCGETDESCRIPTORSQLSTATE','ODBCGETDESCRIPTORERRORINFO','ODBCGETDESCRIBEPARAMETER','ODBCGETDESCREC','ODBCGETDESCFIELD','ODBCGETDESCERRORINFO','ODBCGETDEFAULTTXNISOLATION','ODBCGETDDLINDEX', + 'ODBCGETDBMSVER','ODBCGETDBMSNAME','ODBCGETDBCSQLSTATE','ODBCGETDBCERRORINFO','ODBCGETDATETIMELITERALS','ODBCGETDATASTRINGBYCOLNAME','ODBCGETDATASTRING','ODBCGETDATASOURCEREADONLY', + 'ODBCGETDATASOURCENAME','ODBCGETDATAEXTENSIONS','ODBCGETDATABASENAME','ODBCGETDATA','ODBCGETCURSORTYPE','ODBCGETCURSORSENSITIVITYSUPPORT','ODBCGETCURSORSENSITIVITY','ODBCGETCURSORSCROLLABILITY', + 'ODBCGETCURSORROLLBACKBEHAVIOR','ODBCGETCURSORNAME','ODBCGETCURSORLOCKTYPE','ODBCGETCURSORKEYSETSIZE','ODBCGETCURSORCONCURRENCY','ODBCGETCURSORCOMMITBEHAVIOR','ODBCGETCURRENTCATALOG','ODBCGETCREATEVIEW', + 'ODBCGETCREATETRANSLATION','ODBCGETCREATETABLE','ODBCGETCREATESCHEMA','ODBCGETCREATEDOMAIN','ODBCGETCREATECOLLATION','ODBCGETCREATECHARACTERSET','ODBCGETCREATEASSERTION','ODBCGETCORRELATIONNAME', + 'ODBCGETCONVERTVARCHAR','ODBCGETCONVERTVARBINARY','ODBCGETCONVERTTINYINT','ODBCGETCONVERTTIMESTAMP','ODBCGETCONVERTTIME','ODBCGETCONVERTSMALLINT','ODBCGETCONVERTREAL','ODBCGETCONVERTNUMERIC', + 'ODBCGETCONVERTLONGVARCHAR','ODBCGETCONVERTLONGVARBINARY','ODBCGETCONVERTINTERVALYEARMONTH','ODBCGETCONVERTINTERVALDAYTIME','ODBCGETCONVERTINTEGER','ODBCGETCONVERTFUNCTIONS','ODBCGETCONVERTFLOAT','ODBCGETCONVERTDOUBLE', + 'ODBCGETCONVERTDECIMAL','ODBCGETCONVERTDATE','ODBCGETCONVERTCHAR','ODBCGETCONVERTBIT','ODBCGETCONVERTBINARY','ODBCGETCONVERTBIGINT','ODBCGETCONNECTIONTIMEOUT','ODBCGETCONNECTIONSQLSTATE', + 'ODBCGETCONNECTIONERRORINFO','ODBCGETCONNECTIONDEAD','ODBCGETCONNECTATTR','ODBCGETCONFIGMODE','ODBCGETCONCATNULLBEHAVIOR','ODBCGETCOLUMNALIAS','ODBCGETCOLLATIONSEQ','ODBCGETCATALOGUSAGE', + 'ODBCGETCATALOGTERM','ODBCGETCATALOGNAMESEPARATOR','ODBCGETCATALOGNAME','ODBCGETCATALOGLOCATION','ODBCGETBOOKMARKPERSISTENCE','ODBCGETBATCHSUPPORT','ODBCGETBATCHROWCOUNT','ODBCGETAUTOIPD', + 'ODBCGETAUTOCOMMIT','ODBCGETASYNCMODE','ODBCGETASYNCENABLE','ODBCGETALTERTABLE','ODBCGETALTERDOMAIN','ODBCGETAGGREGATEFUNCTIONS','ODBCGETACTIVEENVIRONMENTS','ODBCGETACCESSMODE', + 'ODBCGETACCESSIBLETABLES','ODBCGETACCESSIBLEPROCEDURES','ODBCFREESTMT','ODBCFREEHANDLE','ODBCFREEENV','ODBCFREEDESC','ODBCFREEDBC','ODBCFREECONNECT', + 'ODBCFOREIGNKEYSCOUNT','ODBCFOREIGNKEYS','ODBCFETCHSCROLL','ODBCFETCHBYBOOKMARK','ODBCFETCH','ODBCEXTENDEDFETCH','ODBCEXECUTE','ODBCEXECDIRECT', + 'ODBCERROR','ODBCEOF','ODBCENDTRAN','ODBCDRIVERSCOUNT','ODBCDRIVERS','ODBCDRIVERCONNECT','ODBCDISCONNECT','ODBCDESCRIBEPARAM', + 'ODBCDESCRIBECOL','ODBCDELETERECORD','ODBCDELETEBYBOOKMARK','ODBCDATASOURCES','ODBCCREATEDATASOURCE','ODBCCOPYDESC','ODBCCONNECTIONISDEAD','ODBCCONNECTIONISALIVE', + 'ODBCCONNECT','ODBCCONFIGDRIVER','ODBCCONFIGDATASOURCE','ODBCCOMMITTRAN','ODBCCOMMITENVTRAN','ODBCCOMMITDBCTRAN','ODBCCOLUPDATABLE','ODBCCOLUNSIGNED', + 'ODBCCOLUNNAMED','ODBCCOLUMNSCOUNT','ODBCCOLUMNS','ODBCCOLUMNPRIVILEGESCOUNT','ODBCCOLUMNPRIVILEGES','ODBCCOLUMN','ODBCCOLTYPENAME','ODBCCOLTYPE', + 'ODBCCOLTABLENAME','ODBCCOLSEARCHABLE','ODBCCOLSCHEMANAME','ODBCCOLSCALE','ODBCCOLPRECISION','ODBCCOLOCTETLENGTH','ODBCCOLNUMPRECRADIX','ODBCCOLNULLABLE', + 'ODBCCOLNAME','ODBCCOLLOCALTYPENAME','ODBCCOLLITERALSUFFIX','ODBCCOLLITERALPREFIX','ODBCCOLLENGTH','ODBCCOLLABEL','ODBCCOLISNULL','ODBCCOLFIXEDPRECSCALE', + 'ODBCCOLDISPLAYSIZE','ODBCCOLCOUNT','ODBCCOLCONCISETYPE','ODBCCOLCATALOGNAME','ODBCCOLCASESENSITIVE','ODBCCOLBASETABLENAME','ODBCCOLBASECOLUMNNAME','ODBCCOLAUTOUNIQUEVALUE', + 'ODBCCOLATTRIBUTE','ODBCCLOSESTMTCURSOR','ODBCCLOSESTMT','ODBCCLOSECURSOR','ODBCCLOSECONNECTION','ODBCCLEARRESULT','ODBCCANCEL','ODBCBULKOPERATIONS', + 'ODBCBROWSECONNECT','ODBCBINDPARAMETER','ODBCBINDCOLTOWORD','ODBCBINDCOLTOTIMESTAMP','ODBCBINDCOLTOTIME','ODBCBINDCOLTOSTRING','ODBCBINDCOLTOSINGLE','ODBCBINDCOLTOQUAD', + 'ODBCBINDCOLTONUMERIC','ODBCBINDCOLTOLONG','ODBCBINDCOLTOINTEGER','ODBCBINDCOLTODWORD','ODBCBINDCOLTODOUBLE','ODBCBINDCOLTODECIMAL','ODBCBINDCOLTODATE','ODBCBINDCOLTOCURRENCY', + 'ODBCBINDCOLTOBYTE','ODBCBINDCOLTOBIT','ODBCBINDCOLTOBINARY','ODBCBINDCOL','ODBCALLOCSTMT','ODBCALLOCHANDLE','ODBCALLOCENV','ODBCALLOCDESC', + 'ODBCALLOCDBC','ODBCALLOCCONNECT','ODBCADDRECORD','GLVIEWPORT','GLVERTEXPOINTER','GLVERTEX4SV','GLVERTEX4S','GLVERTEX4IV', + 'GLVERTEX4I','GLVERTEX4FV','GLVERTEX4F','GLVERTEX4DV','GLVERTEX4D','GLVERTEX3SV','GLVERTEX3S','GLVERTEX3IV', + 'GLVERTEX3I','GLVERTEX3FV','GLVERTEX3F','GLVERTEX3DV','GLVERTEX3D','GLVERTEX2SV','GLVERTEX2S','GLVERTEX2IV', + 'GLVERTEX2I','GLVERTEX2FV','GLVERTEX2F','GLVERTEX2DV','GLVERTEX2D','GLUUNPROJECT','GLUTESSVERTEX','GLUTESSPROPERTY', + 'GLUTESSNORMAL','GLUTESSENDPOLYGON','GLUTESSENDCONTOUR','GLUTESSCALLBACK','GLUTESSBEGINPOLYGON','GLUTESSBEGINCONTOUR','GLUSPHERE','GLUSCALEIMAGE', + 'GLUQUADRICTEXTURE','GLUQUADRICORIENTATION','GLUQUADRICNORMALS','GLUQUADRICDRAWSTYLE','GLUQUADRICCALLBACK','GLUPWLCURVE','GLUPROJECT','GLUPICKMATRIX', + 'GLUPERSPECTIVE','GLUPARTIALDISK','GLUORTHO2D','GLUNURBSSURFACE','GLUNURBSPROPERTY','GLUNURBSCURVE','GLUNURBSCALLBACK','GLUNEXTCONTOUR', + 'GLUNEWTESS','GLUNEWQUADRIC','GLUNEWNURBSRENDERER','GLULOOKAT','GLULOADSAMPLINGMATRICES','GLUGETTESSPROPERTY','GLUGETSTRING','GLUGETNURBSPROPERTY', + 'GLUERRORSTRING','GLUENDTRIM','GLUENDSURFACE','GLUENDPOLYGON','GLUENDCURVE','GLUDISK','GLUDELETETESS','GLUDELETEQUADRIC', + 'GLUDELETENURBSRENDERER','GLUCYLINDER','GLUBUILD2DMIPMAPS','GLUBUILD1DMIPMAPS','GLUBEGINTRIM','GLUBEGINSURFACE','GLUBEGINPOLYGON','GLUBEGINCURVE', + 'GLTRANSLATEF','GLTRANSLATED','GLTEXSUBIMAGE2D','GLTEXSUBIMAGE1D','GLTEXPARAMETERIV','GLTEXPARAMETERI','GLTEXPARAMETERFV','GLTEXPARAMETERF', + 'GLTEXIMAGE2D','GLTEXIMAGE1D','GLTEXGENIV','GLTEXGENI','GLTEXGENFV','GLTEXGENF','GLTEXGENDV','GLTEXGEND', + 'GLTEXENVIV','GLTEXENVI','GLTEXENVFV','GLTEXENVF','GLTEXCOORDPOINTER','GLTEXCOORD4SV','GLTEXCOORD4S','GLTEXCOORD4IV', + 'GLTEXCOORD4I','GLTEXCOORD4FV','GLTEXCOORD4F','GLTEXCOORD4DV','GLTEXCOORD4D','GLTEXCOORD3SV','GLTEXCOORD3S','GLTEXCOORD3IV', + 'GLTEXCOORD3I','GLTEXCOORD3FV','GLTEXCOORD3F','GLTEXCOORD3DV','GLTEXCOORD3D','GLTEXCOORD2SV','GLTEXCOORD2S','GLTEXCOORD2IV', + 'GLTEXCOORD2I','GLTEXCOORD2FV','GLTEXCOORD2F','GLTEXCOORD2DV','GLTEXCOORD2D','GLTEXCOORD1SV','GLTEXCOORD1S','GLTEXCOORD1IV', + 'GLTEXCOORD1I','GLTEXCOORD1FV','GLTEXCOORD1F','GLTEXCOORD1DV','GLTEXCOORD1D','GLSTENCILOP','GLSTENCILMASK','GLSTENCILFUNC', + 'GLSHADEMODEL','GLSELECTBUFFER','GLSCISSOR','GLSCALEF','GLSCALED','GLROTATEF','GLROTATED','GLRENDERMODE', + 'GLRECTSV','GLRECTS','GLRECTIV','GLRECTI','GLRECTFV','GLRECTF','GLRECTDV','GLRECTD', + 'GLREADPIXELS','GLREADBUFFER','GLRASTERPOS4SV','GLRASTERPOS4S','GLRASTERPOS4IV','GLRASTERPOS4I','GLRASTERPOS4FV','GLRASTERPOS4F', + 'GLRASTERPOS4DV','GLRASTERPOS4D','GLRASTERPOS3SV','GLRASTERPOS3S','GLRASTERPOS3IV','GLRASTERPOS3I','GLRASTERPOS3FV','GLRASTERPOS3F', + 'GLRASTERPOS3DV','GLRASTERPOS3D','GLRASTERPOS2SV','GLRASTERPOS2S','GLRASTERPOS2IV','GLRASTERPOS2I','GLRASTERPOS2FV','GLRASTERPOS2F', + 'GLRASTERPOS2DV','GLRASTERPOS2D','GLPUSHNAME','GLPUSHMATRIX','GLPUSHCLIENTATTRIB','GLPUSHATTRIB','GLPRIORITIZETEXTURES','GLPOPNAME', + 'GLPOPMATRIX','GLPOPCLIENTATTRIB','GLPOPATTRIB','GLPOLYGONSTIPPLE','GLPOLYGONOFFSET','GLPOLYGONMODE','GLPOINTSIZE','GLPIXELZOOM', + 'GLPIXELTRANSFERI','GLPIXELTRANSFERF','GLPIXELSTOREI','GLPIXELSTOREF','GLPIXELMAPUSV','GLPIXELMAPUIV','GLPIXELMAPFV','GLPASSTHROUGH', + 'GLORTHO','GLNORMALPOINTER','GLNORMAL3SV','GLNORMAL3S','GLNORMAL3IV','GLNORMAL3I','GLNORMAL3FV','GLNORMAL3F', + 'GLNORMAL3DV','GLNORMAL3D','GLNORMAL3BV','GLNORMAL3B','GLNEWLIST','GLMULTMATRIXF','GLMULTMATRIXD','GLMATRIXMODE', + 'GLMATERIALIV','GLMATERIALI','GLMATERIALFV','GLMATERIALF','GLMAPGRID2F','GLMAPGRID2D','GLMAPGRID1F','GLMAPGRID1D', + 'GLMAP2F','GLMAP2D','GLMAP1F','GLMAP1D','GLLOGICOP','GLLOADNAME','GLLOADMATRIXF','GLLOADMATRIXD', + 'GLLOADIDENTITY','GLLISTBASE','GLLINEWIDTH','GLLINESTIPPLE','GLLIGHTMODELIV','GLLIGHTMODELI','GLLIGHTMODELFV','GLLIGHTMODELF', + 'GLLIGHTIV','GLLIGHTI','GLLIGHTFV','GLLIGHTF','GLISTEXTURE','GLISLIST','GLISENABLED','GLINTERLEAVEDARRAYS', + 'GLINITNAMES','GLINDEXUBV','GLINDEXUB','GLINDEXSV','GLINDEXS','GLINDEXPOINTER','GLINDEXMASK','GLINDEXIV', + 'GLINDEXI','GLINDEXFV','GLINDEXF','GLINDEXDV','GLINDEXD','GLHINT','GLGETTEXPARAMETERIV','GLGETTEXPARAMETERFV', + 'GLGETTEXLEVELPARAMETERIV','GLGETTEXLEVELPARAMETERFV','GLGETTEXIMAGE','GLGETTEXGENIV','GLGETTEXGENFV','GLGETTEXGENDV','GLGETTEXENVIV','GLGETTEXENVFV', + 'GLGETSTRING','GLGETPOLYGONSTIPPLE','GLGETPOINTERV','GLGETPIXELMAPUSV','GLGETPIXELMAPUIV','GLGETPIXELMAPFV','GLGETMATERIALIV','GLGETMATERIALFV', + 'GLGETMAPIV','GLGETMAPFV','GLGETMAPDV','GLGETLIGHTIV','GLGETLIGHTFV','GLGETINTEGERV','GLGETFLOATV','GLGETERROR', + 'GLGETDOUBLEV','GLGETCLIPPLANE','GLGETBOOLEANV','GLGENTEXTURES','GLGENLISTS','GLFRUSTUM','GLFRONTFACE','GLFOGIV', + 'GLFOGI','GLFOGFV','GLFOGF','GLFLUSH','GLFINISH','GLFEEDBACKBUFFER','GLEVALPOINT2','GLEVALPOINT1', + 'GLEVALMESH2','GLEVALMESH1','GLEVALCOORD2FV','GLEVALCOORD2F','GLEVALCOORD2DV','GLEVALCOORD2D','GLEVALCOORD1FV','GLEVALCOORD1F', + 'GLEVALCOORD1DV','GLEVALCOORD1D','GLENDLIST','GLEND','GLENABLECLIENTSTATE','GLENABLE','GLEDGEFLAGV','GLEDGEFLAGPOINTER', + 'GLEDGEFLAG','GLDRAWPIXELS','GLDRAWELEMENTS','GLDRAWBUFFER','GLDRAWARRAYS','GLDISABLECLIENTSTATE','GLDISABLE','GLDEPTHRANGE', + 'GLDEPTHMASK','GLDEPTHFUNC','GLDELETETEXTURES','GLDELETELISTS','GLCULLFACE','GLCOPYTEXSUBIMAGE2D','GLCOPYTEXSUBIMAGE1D','GLCOPYTEXIMAGE2D', + 'GLCOPYTEXIMAGE1D','GLCOPYPIXELS','GLCOLORPOINTER','GLCOLORMATERIAL','GLCOLORMASK','GLCOLOR4USV','GLCOLOR4US','GLCOLOR4UIV', + 'GLCOLOR4UI','GLCOLOR4UBV','GLCOLOR4UB','GLCOLOR4SV','GLCOLOR4S','GLCOLOR4IV','GLCOLOR4I','GLCOLOR4FV', + 'GLCOLOR4F','GLCOLOR4DV','GLCOLOR4D','GLCOLOR4BV','GLCOLOR4B','GLCOLOR3USV','GLCOLOR3US','GLCOLOR3UIV', + 'GLCOLOR3UI','GLCOLOR3UBV','GLCOLOR3UB','GLCOLOR3SV','GLCOLOR3S','GLCOLOR3IV','GLCOLOR3I','GLCOLOR3FV', + 'GLCOLOR3F','GLCOLOR3DV','GLCOLOR3D','GLCOLOR3BV','GLCOLOR3B','GLCLIPPLANE','GLCLEARSTENCIL','GLCLEARINDEX', + 'GLCLEARDEPTH','GLCLEARCOLOR','GLCLEARACCUM','GLCLEAR','GLCALLLISTS','GLCALLLIST','GLBLENDFUNC','GLBITMAP', + 'GLBINDTEXTURE','GLBEGIN','GLARRAYELEMENT','GLARETEXTURESRESIDENT','GLALPHAFUNC','GLACCUM'), + 2 => array( + '$BEL','$BS','$CR','$CRLF','$DQ','$DT_DATE_SEPARATOR','$DT_LANGUAGE','$DT_TIME_SEPARATOR', + '$ESC','$FF','$LF','$NUL','$PC_SD_MY_PC','$SPC','$SQL_OPT_TRACE_FILE_DEFAULT','$SQL_SPEC_STRING', + '$TAB','$TRACKBAR_CLASS','$VT','%ACM_OPEN','%ACM_OPENW','%ACM_PLAY','%ACM_STOP','%ACN_START', + '%ACN_STOP','%ACS_AUTOPLAY','%ACS_CENTER','%ACS_TIMER','%ACS_TRANSPARENT','%APP_COUNTER_FUNLOOKUP','%APP_COUNTER_KEYLOOKUP','%APP_COUNTER_LOOKUP', + '%APP_COUNTER_TESTALPHA','%APP_COUNTER_UDTLOOKUP','%APP_COUNTER_VARLOOKUP','%APP_TIMER_EXECTOTAL','%APP_TIMER_INIT','%APP_TIMER_LOAD','%APP_TIMER_PREPROCESSOR','%AW_ACTIVATE', + '%AW_BLEND','%AW_CENTER','%AW_HIDE','%AW_HOR_NEGATIVE','%AW_HOR_POSITIVE','%AW_SLIDE','%AW_VER_NEGATIVE','%AW_VER_POSITIVE', + '%BCM_FIRST','%BLACK','%BLUE','%BM_GETCHECK','%BM_SETCHECK','%BST_CHECKED','%BST_UNCHECKED','%BS_AUTOCHECKBOX', + '%BS_BOTTOM','%BS_CENTER','%BS_DEFAULT','%BS_DEFPUSHBUTTON','%BS_FLAT','%BS_LEFT','%BS_LEFTTEXT','%BS_MULTILINE', + '%BS_NOTIFY','%BS_OWNERDRAW','%BS_PUSHLIKE','%BS_RIGHT','%BS_TOP','%BS_VCENTER','%BUNDLE_BUILDER_CANCELLED','%CBM_FIRST', + '%CBN_CLOSEUP','%CBN_DBLCLK','%CBN_DROPDOWN','%CBN_EDITCHANGE','%CBN_EDITUPDATE','%CBN_ERRSPACE','%CBN_KILLFOCUS','%CBN_SELCANCEL', + '%CBN_SELCHANGE','%CBN_SELENDCANCEL','%CBN_SELENDOK','%CBN_SETFOCUS','%CBS_AUTOHSCROLL','%CBS_DISABLENOSCROLL','%CBS_DROPDOWN','%CBS_DROPDOWNLIST', + '%CBS_HASSTRINGS','%CBS_LOWERCASE','%CBS_NOINTEGRALHEIGHT','%CBS_SIMPLE','%CBS_SORT','%CBS_UPPERCASE','%CB_SELECTSTRING','%CCM_FIRST', + '%CC_ANYCOLOR','%CC_ENABLEHOOK','%CC_ENABLETEMPLATE','%CC_ENABLETEMPLATEHANDLE','%CC_FULLOPEN','%CC_PREVENTFULLOPEN','%CC_RGBINIT','%CC_SHOWHELP', + '%CC_SOLIDCOLOR','%CFE_BOLD','%CFE_ITALIC','%CFE_LINK','%CFE_PROTECTED','%CFE_STRIKEOUT','%CFE_UNDERLINE','%CFM_ANIMATION', + '%CFM_BACKCOLOR','%CFM_BOLD','%CFM_CHARSET','%CFM_COLOR','%CFM_FACE','%CFM_ITALIC','%CFM_KERNING','%CFM_LCID', + '%CFM_LINK','%CFM_OFFSET','%CFM_PROTECTED','%CFM_REVAUTHOR','%CFM_SIZE','%CFM_SPACING','%CFM_STRIKEOUT','%CFM_STYLE', + '%CFM_UNDERLINE','%CFM_UNDERLINETYPE','%CFM_WEIGHT','%CGI_ACCEPT_FILE_UPLOAD','%CGI_AUTO_ADD_SPECIAL_CHARS_PREFIX','%CGI_AUTO_CREATE_VARS','%CGI_BUFFERIZE_OUTPUT','%CGI_DOUBLE_QUOTE', + '%CGI_FILE_UPLOAD_BASEPATH','%CGI_FORCE_SESSION_VALIDATION','%CGI_MAX_BYTE_FROM_STD_IN','%CGI_REQUEST_METHOD_GET','%CGI_REQUEST_METHOD_POST','%CGI_SESSION_FILE_BASEPATH','%CGI_SINGLE_QUOTE','%CGI_SPECIAL_CHARS_PREFIX', + '%CGI_TEMPORARY_UPLOAD_PATH','%CGI_UPLOAD_CAN_OVERWRITE','%CGI_WRITE_LOG_FILE','%CGI_WRITE_VARS_INTO_LOG_FILE','%CONOLE_ATTACH_PARENT_PROCESS','%CONSOLE_BACKGROUND_BLUE','%CONSOLE_BACKGROUND_GREEN','%CONSOLE_BACKGROUND_INTENSITY', + '%CONSOLE_BACKGROUND_RED','%CONSOLE_BOX_FLAG_3DOFF','%CONSOLE_BOX_FLAG_3DON','%CONSOLE_BOX_FLAG_SHADOW','%CONSOLE_COMMON_LVB_GRID_HORIZONTAL','%CONSOLE_COMMON_LVB_GRID_LVERTICAL','%CONSOLE_COMMON_LVB_GRID_RVERTICAL','%CONSOLE_COMMON_LVB_LEADING_BYTE', + '%CONSOLE_COMMON_LVB_REVERSE_VIDEO','%CONSOLE_COMMON_LVB_TRAILING_BYTE','%CONSOLE_COMMON_LVB_UNDERSCORE','%CONSOLE_CTRL_BREAK_EVENT','%CONSOLE_CTRL_C_EVENT','%CONSOLE_DOUBLE_CLICK','%CONSOLE_ENABLE_AUTO_POSITION','%CONSOLE_ENABLE_ECHO_INPUT', + '%CONSOLE_ENABLE_EXTENDED_FLAGS','%CONSOLE_ENABLE_INSERT_MODE','%CONSOLE_ENABLE_LINE_INPUT','%CONSOLE_ENABLE_MOUSE_INPUT','%CONSOLE_ENABLE_PROCESSED_INPUT','%CONSOLE_ENABLE_PROCESSED_OUTPUT','%CONSOLE_ENABLE_QUICK_EDIT_MODE','%CONSOLE_ENABLE_WINDOW_INPUT', + '%CONSOLE_ENABLE_WRAP_AT_EOL_OUTPUT','%CONSOLE_FOREGROUND_BLUE','%CONSOLE_FOREGROUND_GREEN','%CONSOLE_FOREGROUND_INTENSITY','%CONSOLE_FOREGROUND_RED','%CONSOLE_LBUTTON','%CONSOLE_LINE_HORIZONTAL','%CONSOLE_LINE_VERTICAL', + '%CONSOLE_MBUTTON','%CONSOLE_MOUSE_MOVED','%CONSOLE_MOUSE_WHEELED','%CONSOLE_RBUTTON','%CONSOLE_SCROLLBUF_DOWN','%CONSOLE_SCROLLBUF_UP','%CONSOLE_SCROLLWND_ABSOLUTE','%CONSOLE_SCROLLWND_RELATIVE', + '%CONSOLE_STD_ERROR_HANDLE','%CONSOLE_STD_INPUT_HANDLE','%CONSOLE_STD_OUTPUT_HANDLE','%CONSOLE_SW_FORCEMINIMIZE','%CONSOLE_SW_HIDE','%CONSOLE_SW_MAXIMIZE','%CONSOLE_SW_MINIMIZE','%CONSOLE_SW_RESTORE', + '%CONSOLE_SW_SHOW','%CONSOLE_SW_SHOWDEFAULT','%CONSOLE_SW_SHOWMAXIMIZED','%CONSOLE_SW_SHOWMINIMIZED','%CONSOLE_SW_SHOWMINNOACTIVE','%CONSOLE_SW_SHOWNA','%CONSOLE_SW_SHOWNOACTIVATE','%CONSOLE_SW_SHOWNORMAL', + '%CONSOLE_UNAVAILABLE','%CRYPTO_CALG_DES','%CRYPTO_CALG_RC2','%CRYPTO_CALG_RC4','%CRYPTO_PROV_DH_SCHANNEL','%CRYPTO_PROV_DSS','%CRYPTO_PROV_DSS_DH','%CRYPTO_PROV_FORTEZZA', + '%CRYPTO_PROV_MS_EXCHANGE','%CRYPTO_PROV_RSA_FULL','%CRYPTO_PROV_RSA_SCHANNEL','%CRYPTO_PROV_RSA_SIG','%CRYPTO_PROV_SSL','%CSIDL_ADMINTOOLS','%CSIDL_ALTSTARTUP','%CSIDL_APPDATA', + '%CSIDL_BITBUCKET','%CSIDL_CDBURN_AREA','%CSIDL_COMMON_ADMINTOOLS','%CSIDL_COMMON_ALTSTARTUP','%CSIDL_COMMON_APPDATA','%CSIDL_COMMON_DESKTOPDIRECTORY','%CSIDL_COMMON_DOCUMENTS','%CSIDL_COMMON_FAVORITES', + '%CSIDL_COMMON_MUSIC','%CSIDL_COMMON_PICTURES','%CSIDL_COMMON_PROGRAMS','%CSIDL_COMMON_STARTMENU','%CSIDL_COMMON_STARTUP','%CSIDL_COMMON_TEMPLATES','%CSIDL_COMMON_VIDEO','%CSIDL_CONTROLS', + '%CSIDL_COOKIES','%CSIDL_DESKTOP','%CSIDL_DESKTOPDIRECTORY','%CSIDL_DRIVES','%CSIDL_FAVORITES','%CSIDL_FLAG_CREATE','%CSIDL_FONTS','%CSIDL_HISTORY', + '%CSIDL_INTERNET','%CSIDL_INTERNET_CACHE','%CSIDL_LOCAL_APPDATA','%CSIDL_MYDOCUMENTS','%CSIDL_MYMUSIC','%CSIDL_MYPICTURES','%CSIDL_MYVIDEO','%CSIDL_NETHOOD', + '%CSIDL_NETWORK','%CSIDL_PERSONAL','%CSIDL_PRINTERS','%CSIDL_PRINTHOOD','%CSIDL_PROFILE','%CSIDL_PROGRAMS','%CSIDL_PROGRAM_FILES','%CSIDL_PROGRAM_FILES_COMMON', + '%CSIDL_RECENT','%CSIDL_SENDTO','%CSIDL_STARTMENU','%CSIDL_STARTUP','%CSIDL_SYSTEM','%CSIDL_TEMPLATES','%CSIDL_WINDOWS','%CW_USEDEFAULT', + '%CYAN','%DATE_TIME_FILE_CREATION','%DATE_TIME_LAST_FILE_ACCESS','%DATE_TIME_LAST_FILE_WRITE','%DICTIONARY_MEMINFO_DATA','%DICTIONARY_MEMINFO_KEYS','%DICTIONARY_MEMINFO_TOTAL','%DICTIONARY_SORTDESCENDING', + '%DICTIONARY_SORTKEYS','%DSCAPS_CERTIFIED','%DSCAPS_CONTINUOUSRATE','%DSCAPS_EMULDRIVER','%DSCAPS_SECONDARY16BIT','%DSCAPS_SECONDARY8BIT','%DSCAPS_SECONDARYMONO','%DSCAPS_SECONDARYSTEREO', + '%DSCCAPS_CERTIFIED','%DSCCAPS_EMULDRIVER','%DS_3DLOOK','%DS_ABSALIGN','%DS_CENTER','%DS_CENTERMOUSE','%DS_CONTEXTHELP','%DS_CONTROL', + '%DS_MODALFRAME','%DS_NOFAILCREATE','%DS_SETFONT','%DS_SETFOREGROUND','%DS_SYSMODAL','%DTM_FIRST','%DTM_GETMCCOLOR','%DTM_GETMCFONT', + '%DTM_GETMONTHCAL','%DTM_GETRANGE','%DTM_GETSYSTEMTIME','%DTM_SETFORMAT','%DTM_SETFORMATW','%DTM_SETMCCOLOR','%DTM_SETMCFONT','%DTM_SETRANGE', + '%DTM_SETSYSTEMTIME','%DTN_CLOSEUP','%DTN_DATETIMECHANGE','%DTN_DROPDOWN','%DTN_FORMAT','%DTN_FORMATQUERY','%DTN_FORMATQUERYW','%DTN_FORMATW', + '%DTN_USERSTRING','%DTN_USERSTRINGW','%DTN_WMKEYDOWN','%DTN_WMKEYDOWNW','%DTS_APPCANPARSE','%DTS_LONGDATEFORMAT','%DTS_RIGHTALIGN','%DTS_SHORTDATECENTURYFORMAT', + '%DTS_SHORTDATEFORMAT','%DTS_SHOWNONE','%DTS_TIMEFORMAT','%DTS_UPDOWN','%DT_DATE_CENTURY','%DT_DATE_OK','%DT_DAY_IN_YEAR','%DT_DIFF_IN_DAYS', + '%DT_DIFF_IN_HOURS','%DT_DIFF_IN_MINUTES','%DT_DIFF_IN_SECONDS','%DT_HOURS_IN_DAY','%DT_MINUTES_IN_HOUR','%DT_SECONDS_IN_DAY','%DT_SECONDS_IN_HOUR','%DT_SECONDS_IN_MINUTE', + '%DT_SECONDS_IN_YEAR','%DT_USE_LONG_FORM','%DT_USE_SHORT_FORM','%DT_WRONG_DATE','%DT_WRONG_DAY','%DT_WRONG_MONTH','%ECM_FIRST','%ECOOP_AND', + '%ECOOP_OR','%ECOOP_SET','%ECOOP_XOR','%ECO_AUTOHSCROLL','%ECO_AUTOVSCROLL','%ECO_AUTOWORDSELECTION','%ECO_NOHIDESEL','%ECO_READONLY', + '%ECO_SELECTIONBAR','%ECO_WANTRETURN','%EM_AUTOURLDETECT','%EM_CANPASTE','%EM_CANREDO','%EM_CANUNDO','%EM_CHARFROMPOS','%EM_DISPLAYBAND', + '%EM_EMPTYUNDOBUFFER','%EM_EXGETSEL','%EM_EXLIMITTEXT','%EM_EXLINEFROMCHAR','%EM_EXSETSEL','%EM_FINDTEXT','%EM_FINDTEXTEX','%EM_FINDWORDBREAK', + '%EM_FMTLINES','%EM_FORMATRANGE','%EM_GETAUTOURLDETECT','%EM_GETCHARFORMAT','%EM_GETEDITSTYLE','%EM_GETEVENTMASK','%EM_GETFIRSTVISIBLELINE','%EM_GETHANDLE', + '%EM_GETIMESTATUS','%EM_GETLIMITTEXT','%EM_GETLINE','%EM_GETLINECOUNT','%EM_GETMARGINS','%EM_GETMODIFY','%EM_GETOLEINTERFACE','%EM_GETOPTIONS', + '%EM_GETPARAFORMAT','%EM_GETPASSWORDCHAR','%EM_GETRECT','%EM_GETREDONAME','%EM_GETSCROLLPOS','%EM_GETSEL','%EM_GETSELTEXT','%EM_GETTEXTMODE', + '%EM_GETTEXTRANGE','%EM_GETTHUMB','%EM_GETUNDONAME','%EM_GETWORDBREAKPROC','%EM_GETWORDBREAKPROCEX','%EM_HIDESELECTION','%EM_LIMITTEXT','%EM_LINEFROMCHAR', + '%EM_LINEINDEX','%EM_LINELENGTH','%EM_LINESCROLL','%EM_PASTESPECIAL','%EM_POSFROMCHAR','%EM_REDO','%EM_REPLACESEL','%EM_REQUESTRESIZE', + '%EM_SCROLL','%EM_SCROLLCARET','%EM_SELECTIONTYPE','%EM_SETBKGNDCOLOR','%EM_SETCHARFORMAT','%EM_SETEDITSTYLE','%EM_SETEVENTMASK','%EM_SETHANDLE', + '%EM_SETIMESTATUS','%EM_SETLIMITTEXT','%EM_SETMARGINS','%EM_SETMODIFY','%EM_SETOLECALLBACK','%EM_SETOPTIONS','%EM_SETPARAFORMAT','%EM_SETPASSWORDCHAR', + '%EM_SETREADONLY','%EM_SETRECT','%EM_SETRECTNP','%EM_SETSCROLLPOS','%EM_SETSEL','%EM_SETTABSTOPS','%EM_SETTARGETDEVICE','%EM_SETTEXTMODE', + '%EM_SETUNDOLIMIT','%EM_SETWORDBREAKPROC','%EM_SETWORDBREAKPROCEX','%EM_SETWORDWRAPMODE','%EM_SETZOOM','%EM_STOPGROUPTYPING','%EM_STREAMIN','%EM_STREAMOUT', + '%EM_UNDO','%ENM_CHANGE','%ENM_CORRECTTEXT','%ENM_DRAGDROPDONE','%ENM_DROPFILES','%ENM_KEYEVENTS','%ENM_MOUSEEVENTS','%ENM_NONE', + '%ENM_PARAGRAPHEXPANDED','%ENM_PROTECTED','%ENM_REQUESTRESIZE','%ENM_SCROLL','%ENM_SCROLLEVENTS','%ENM_SELCHANGE','%ENM_UPDATE','%EN_CHANGE', + '%EN_MSGFILTER','%EN_SELCHANGE','%EN_UPDATE','%ES_AUTOHSCROLL','%ES_AUTOVSCROLL','%ES_CENTER','%ES_DISABLENOSCROLL','%ES_EX_NOCALLOLEINIT', + '%ES_LEFT','%ES_LOWERCASE','%ES_MULTILINE','%ES_NOHIDESEL','%ES_NOOLEDRAGDROP','%ES_NUMBER','%ES_OEMCONVERT','%ES_PASSWORD', + '%ES_READONLY','%ES_RIGHT','%ES_SAVESEL','%ES_SELECTIONBAR','%ES_SUNKEN','%ES_UPPERCASE','%ES_WANTRETURN','%EVAL_EXEC_STRING', + '%FALSE','%FILE_ADDPATH','%FILE_ARCHIVE','%FILE_BUILDVERSION','%FILE_HIDDEN','%FILE_MAJORVERSION','%FILE_MINORVERSION','%FILE_NORMAL', + '%FILE_READONLY','%FILE_REVISIONVERSION','%FILE_SUBDIR','%FILE_SYSTEM','%FILE_VLABEL','%FTP_GET_CONNECT_STATUS','%FTP_GET_FILE_BYTES_RCVD','%FTP_GET_FILE_BYTES_SENT', + '%FTP_GET_LAST_RESPONSE','%FTP_GET_LOCAL_IP','%FTP_GET_SERVER_IP','%FTP_GET_TOTAL_BYTES_RCVD','%FTP_GET_TOTAL_BYTES_SENT','%FTP_LIST_FULLLIST','%FTP_LIST_FULLLISTDIR','%FTP_LIST_FULLLISTFILE', + '%FTP_SET_ASYNC','%FTP_SET_CONNECT_WAIT','%FTP_SET_MAX_LISTEN_WAIT','%FTP_SET_MAX_RESPONSE_WAIT','%FTP_SET_PASSIVE','%FTP_SET_SYNC','%FW_BLACK','%FW_BOLD', + '%FW_DEMIBOLD','%FW_DONTCARE','%FW_EXTRABOLD','%FW_EXTRALIGHT','%FW_HEAVY','%FW_LIGHT','%FW_MEDIUM','%FW_NORMAL', + '%FW_REGULAR','%FW_SEMIBOLD','%FW_THIN','%FW_ULTRABOLD','%FW_ULTRALIGHT','%GDTR_MAX','%GDTR_MIN','%GLU_AUTO_LOAD_MATRIX', + '%GLU_BEGIN','%GLU_CCW','%GLU_CULLING','%GLU_CW','%GLU_DISPLAY_MODE','%GLU_DOMAIN_DISTANCE','%GLU_EDGE_FLAG','%GLU_END', + '%GLU_ERROR','%GLU_EXTENSIONS','%GLU_EXTERIOR','%GLU_FALSE','%GLU_FILL','%GLU_FLAT','%GLU_INCOMPATIBLE_GL_VERSION','%GLU_INSIDE', + '%GLU_INTERIOR','%GLU_INVALID_ENUM','%GLU_INVALID_VALUE','%GLU_LINE','%GLU_MAP1_TRIM_2','%GLU_MAP1_TRIM_3','%GLU_NONE','%GLU_NURBS_ERROR1', + '%GLU_NURBS_ERROR10','%GLU_NURBS_ERROR11','%GLU_NURBS_ERROR12','%GLU_NURBS_ERROR13','%GLU_NURBS_ERROR14','%GLU_NURBS_ERROR15','%GLU_NURBS_ERROR16','%GLU_NURBS_ERROR17', + '%GLU_NURBS_ERROR18','%GLU_NURBS_ERROR19','%GLU_NURBS_ERROR2','%GLU_NURBS_ERROR20','%GLU_NURBS_ERROR21','%GLU_NURBS_ERROR22','%GLU_NURBS_ERROR23','%GLU_NURBS_ERROR24', + '%GLU_NURBS_ERROR25','%GLU_NURBS_ERROR26','%GLU_NURBS_ERROR27','%GLU_NURBS_ERROR28','%GLU_NURBS_ERROR29','%GLU_NURBS_ERROR3','%GLU_NURBS_ERROR30','%GLU_NURBS_ERROR31', + '%GLU_NURBS_ERROR32','%GLU_NURBS_ERROR33','%GLU_NURBS_ERROR34','%GLU_NURBS_ERROR35','%GLU_NURBS_ERROR36','%GLU_NURBS_ERROR37','%GLU_NURBS_ERROR4','%GLU_NURBS_ERROR5', + '%GLU_NURBS_ERROR6','%GLU_NURBS_ERROR7','%GLU_NURBS_ERROR8','%GLU_NURBS_ERROR9','%GLU_OUTLINE_PATCH','%GLU_OUTLINE_POLYGON','%GLU_OUTSIDE','%GLU_OUT_OF_MEMORY', + '%GLU_PARAMETRIC_ERROR','%GLU_PARAMETRIC_TOLERANCE','%GLU_PATH_LENGTH','%GLU_POINT','%GLU_SAMPLING_METHOD','%GLU_SAMPLING_TOLERANCE','%GLU_SILHOUETTE','%GLU_SMOOTH', + '%GLU_TESS_BEGIN','%GLU_TESS_BEGIN_DATA','%GLU_TESS_BOUNDARY_ONLY','%GLU_TESS_COMBINE','%GLU_TESS_COMBINE_DATA','%GLU_TESS_COORD_TOO_LARGE','%GLU_TESS_EDGE_FLAG','%GLU_TESS_EDGE_FLAG_DATA', + '%GLU_TESS_END','%GLU_TESS_END_DATA','%GLU_TESS_ERROR','%GLU_TESS_ERROR1','%GLU_TESS_ERROR2','%GLU_TESS_ERROR3','%GLU_TESS_ERROR4','%GLU_TESS_ERROR5', + '%GLU_TESS_ERROR6','%GLU_TESS_ERROR7','%GLU_TESS_ERROR8','%GLU_TESS_ERROR_DATA','%GLU_TESS_MISSING_BEGIN_CONTOUR','%GLU_TESS_MISSING_BEGIN_POLYGON','%GLU_TESS_MISSING_END_CONTOUR','%GLU_TESS_MISSING_END_POLYGON', + '%GLU_TESS_NEED_COMBINE_CALLBACK','%GLU_TESS_TOLERANCE','%GLU_TESS_VERTEX','%GLU_TESS_VERTEX_DATA','%GLU_TESS_WINDING_ABS_GEQ_TWO','%GLU_TESS_WINDING_NEGATIVE','%GLU_TESS_WINDING_NONZERO','%GLU_TESS_WINDING_ODD', + '%GLU_TESS_WINDING_POSITIVE','%GLU_TESS_WINDING_RULE','%GLU_TRUE','%GLU_UNKNOWN','%GLU_U_STEP','%GLU_VERSION','%GLU_VERSION_1_1','%GLU_VERSION_1_2', + '%GLU_VERTEX','%GLU_V_STEP','%GL_2D','%GL_2_BYTES','%GL_3D','%GL_3D_COLOR','%GL_3D_COLOR_TEXTURE','%GL_3_BYTES', + '%GL_4D_COLOR_TEXTURE','%GL_4_BYTES','%GL_ABGR_EXT','%GL_ACCUM','%GL_ACCUM_ALPHA_BITS','%GL_ACCUM_BLUE_BITS','%GL_ACCUM_BUFFER_BIT','%GL_ACCUM_CLEAR_VALUE', + '%GL_ACCUM_GREEN_BITS','%GL_ACCUM_RED_BITS','%GL_ADD','%GL_ALL_ATTRIB_BITS','%GL_ALPHA','%GL_ALPHA12','%GL_ALPHA16','%GL_ALPHA4', + '%GL_ALPHA8','%GL_ALPHA_BIAS','%GL_ALPHA_BITS','%GL_ALPHA_SCALE','%GL_ALPHA_TEST','%GL_ALPHA_TEST_FUNC','%GL_ALPHA_TEST_REF','%GL_ALWAYS', + '%GL_AMBIENT','%GL_AMBIENT_AND_DIFFUSE','%GL_AND','%GL_AND_INVERTED','%GL_AND_REVERSE','%GL_ARRAY_ELEMENT_LOCK_COUNT_EXT','%GL_ARRAY_ELEMENT_LOCK_FIRST_EXT','%GL_ATTRIB_STACK_DEPTH', + '%GL_AUTO_NORMAL','%GL_AUX0','%GL_AUX1','%GL_AUX2','%GL_AUX3','%GL_AUX_BUFFERS','%GL_BACK','%GL_BACK_LEFT', + '%GL_BACK_RIGHT','%GL_BGRA_EXT','%GL_BGR_EXT','%GL_BITMAP','%GL_BITMAP_TOKEN','%GL_BLEND','%GL_BLEND_COLOR_EXT','%GL_BLEND_DST', + '%GL_BLEND_EQUATION_EXT','%GL_BLEND_SRC','%GL_BLUE','%GL_BLUE_BIAS','%GL_BLUE_BITS','%GL_BLUE_SCALE','%GL_BYTE','%GL_C3F_V3F', + '%GL_C4F_N3F_V3F','%GL_C4UB_V2F','%GL_C4UB_V3F','%GL_CCW','%GL_CLAMP','%GL_CLEAR','%GL_CLIENT_ALL_ATTRIB_BITS','%GL_CLIENT_ATTRIB_STACK_DEPTH', + '%GL_CLIENT_PIXEL_STORE_BIT','%GL_CLIENT_VERTEX_ARRAY_BIT','%GL_CLIP_PLANE0','%GL_CLIP_PLANE1','%GL_CLIP_PLANE2','%GL_CLIP_PLANE3','%GL_CLIP_PLANE4','%GL_CLIP_PLANE5', + '%GL_CLIP_VOLUME_CLIPPING_HINT_EXT','%GL_COEFF','%GL_COLOR','%GL_COLOR_ARRAY','%GL_COLOR_ARRAY_COUNT_EXT','%GL_COLOR_ARRAY_EXT','%GL_COLOR_ARRAY_POINTER','%GL_COLOR_ARRAY_POINTER_EXT', + '%GL_COLOR_ARRAY_SIZE','%GL_COLOR_ARRAY_SIZE_EXT','%GL_COLOR_ARRAY_STRIDE','%GL_COLOR_ARRAY_STRIDE_EXT','%GL_COLOR_ARRAY_TYPE','%GL_COLOR_ARRAY_TYPE_EXT','%GL_COLOR_BUFFER_BIT','%GL_COLOR_CLEAR_VALUE', + '%GL_COLOR_INDEX','%GL_COLOR_INDEX12_EXT','%GL_COLOR_INDEX16_EXT','%GL_COLOR_INDEX1_EXT','%GL_COLOR_INDEX2_EXT','%GL_COLOR_INDEX4_EXT','%GL_COLOR_INDEX8_EXT','%GL_COLOR_INDEXES', + '%GL_COLOR_LOGIC_OP','%GL_COLOR_MATERIAL','%GL_COLOR_MATERIAL_FACE','%GL_COLOR_MATERIAL_PARAMETER','%GL_COLOR_SUM_EXT','%GL_COLOR_TABLE_ALPHA_SIZE_EXT','%GL_COLOR_TABLE_BIAS_EXT','%GL_COLOR_TABLE_BLUE_SIZE_EXT', + '%GL_COLOR_TABLE_EXT','%GL_COLOR_TABLE_FORMAT_EXT','%GL_COLOR_TABLE_GREEN_SIZE_EXT','%GL_COLOR_TABLE_INTENSITY_SIZE_EXT','%GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','%GL_COLOR_TABLE_RED_SIZE_EXT','%GL_COLOR_TABLE_SCALE_EXT','%GL_COLOR_TABLE_WIDTH_EXT', + '%GL_COLOR_WRITEMASK','%GL_COMPILE','%GL_COMPILE_AND_EXECUTE','%GL_CONSTANT_ALPHA_EXT','%GL_CONSTANT_ATTENUATION','%GL_CONSTANT_COLOR_EXT','%GL_CONVOLUTION_1D_EXT','%GL_CONVOLUTION_2D_EXT', + '%GL_CONVOLUTION_BORDER_MODE_EXT','%GL_CONVOLUTION_FILTER_BIAS_EXT','%GL_CONVOLUTION_FILTER_SCALE_EXT','%GL_CONVOLUTION_FORMAT_EXT','%GL_CONVOLUTION_HEIGHT_EXT','%GL_CONVOLUTION_WIDTH_EXT','%GL_COPY','%GL_COPY_INVERTED', + '%GL_COPY_PIXEL_TOKEN','%GL_CULL_FACE','%GL_CULL_FACE_MODE','%GL_CULL_VERTEX_EXT','%GL_CULL_VERTEX_EYE_POSITION_EXT','%GL_CULL_VERTEX_OBJECT_POSITION_EXT','%GL_CURRENT_BIT','%GL_CURRENT_COLOR', + '%GL_CURRENT_INDEX','%GL_CURRENT_NORMAL','%GL_CURRENT_RASTER_COLOR','%GL_CURRENT_RASTER_DISTANCE','%GL_CURRENT_RASTER_INDEX','%GL_CURRENT_RASTER_POSITION','%GL_CURRENT_RASTER_POSITION_VALID','%GL_CURRENT_RASTER_TEXTURE_COORDS', + '%GL_CURRENT_SECONDARY_COLOR_EXT','%GL_CURRENT_TEXTURE_COORDS','%GL_CW','%GL_DECAL','%GL_DECR','%GL_DEPTH','%GL_DEPTH_BIAS','%GL_DEPTH_BITS', + '%GL_DEPTH_BUFFER_BIT','%GL_DEPTH_CLEAR_VALUE','%GL_DEPTH_COMPONENT','%GL_DEPTH_FUNC','%GL_DEPTH_RANGE','%GL_DEPTH_SCALE','%GL_DEPTH_TEST','%GL_DEPTH_WRITEMASK', + '%GL_DIFFUSE','%GL_DITHER','%GL_DOMAIN','%GL_DONT_CARE','%GL_DOUBLE','%GL_DOUBLEBUFFER','%GL_DOUBLE_EXT','%GL_DRAW_BUFFER', + '%GL_DRAW_PIXEL_TOKEN','%GL_DST_ALPHA','%GL_DST_COLOR','%GL_EDGE_FLAG','%GL_EDGE_FLAG_ARRAY','%GL_EDGE_FLAG_ARRAY_COUNT_EXT','%GL_EDGE_FLAG_ARRAY_EXT','%GL_EDGE_FLAG_ARRAY_POINTER', + '%GL_EDGE_FLAG_ARRAY_POINTER_EXT','%GL_EDGE_FLAG_ARRAY_STRIDE','%GL_EDGE_FLAG_ARRAY_STRIDE_EXT','%GL_EMISSION','%GL_ENABLE_BIT','%GL_EQUAL','%GL_EQUIV','%GL_EVAL_BIT', + '%GL_EXP','%GL_EXP2','%GL_EXTENSIONS','%GL_EXT_ABGR','%GL_EXT_BGRA','%GL_EXT_BLEND_COLOR','%GL_EXT_BLEND_MINMAX','%GL_EXT_BLEND_SUBTRACT', + '%GL_EXT_CLIP_VOLUME_HINT','%GL_EXT_COLOR_TABLE','%GL_EXT_COMPILED_VERTEX_ARRAY','%GL_EXT_CONVOLUTION','%GL_EXT_CULL_VERTEX','%GL_EXT_HISTOGRAM','%GL_EXT_PACKED_PIXELS','%GL_EXT_PALETTED_TEXTURE', + '%GL_EXT_POLYGON_OFFSET','%GL_EXT_SECONDARY_COLOR','%GL_EXT_SEPARATE_SPECULAR_COLOR','%GL_EXT_VERTEX_ARRAY','%GL_EYE_LINEAR','%GL_EYE_PLANE','%GL_FALSE','%GL_FASTEST', + '%GL_FEEDBACK','%GL_FEEDBACK_BUFFER_POINTER','%GL_FEEDBACK_BUFFER_SIZE','%GL_FEEDBACK_BUFFER_TYPE','%GL_FILL','%GL_FLAT','%GL_FLOAT','%GL_FOG', + '%GL_FOG_BIT','%GL_FOG_COLOR','%GL_FOG_DENSITY','%GL_FOG_END','%GL_FOG_HINT','%GL_FOG_INDEX','%GL_FOG_MODE','%GL_FOG_START', + '%GL_FRONT','%GL_FRONT_AND_BACK','%GL_FRONT_FACE','%GL_FRONT_LEFT','%GL_FRONT_RIGHT','%GL_FUNC_ADD_EXT','%GL_FUNC_REVERSE_SUBTRACT_EXT','%GL_FUNC_SUBTRACT_EXT', + '%GL_GEQUAL','%GL_GREATER','%GL_GREEN','%GL_GREEN_BIAS','%GL_GREEN_BITS','%GL_GREEN_SCALE','%GL_HINT_BIT','%GL_HISTOGRAM_ALPHA_SIZE_EXT', + '%GL_HISTOGRAM_BLUE_SIZE_EXT','%GL_HISTOGRAM_EXT','%GL_HISTOGRAM_FORMAT_EXT','%GL_HISTOGRAM_GREEN_SIZE_EXT','%GL_HISTOGRAM_LUMINANCE_SIZE_EXT','%GL_HISTOGRAM_RED_SIZE_EXT','%GL_HISTOGRAM_SINK_EXT','%GL_HISTOGRAM_WIDTH_EXT', + '%GL_INCR','%GL_INDEX_ARRAY','%GL_INDEX_ARRAY_COUNT_EXT','%GL_INDEX_ARRAY_EXT','%GL_INDEX_ARRAY_POINTER','%GL_INDEX_ARRAY_POINTER_EXT','%GL_INDEX_ARRAY_STRIDE','%GL_INDEX_ARRAY_STRIDE_EXT', + '%GL_INDEX_ARRAY_TYPE','%GL_INDEX_ARRAY_TYPE_EXT','%GL_INDEX_BITS','%GL_INDEX_CLEAR_VALUE','%GL_INDEX_LOGIC_OP','%GL_INDEX_MODE','%GL_INDEX_OFFSET','%GL_INDEX_SHIFT', + '%GL_INDEX_WRITEMASK','%GL_INT','%GL_INTENSITY','%GL_INTENSITY12','%GL_INTENSITY16','%GL_INTENSITY4','%GL_INTENSITY8','%GL_INVALID_ENUM', + '%GL_INVALID_OPERATION','%GL_INVALID_VALUE','%GL_INVERT','%GL_KEEP','%GL_LEFT','%GL_LEQUAL','%GL_LESS','%GL_LIGHT0', + '%GL_LIGHT1','%GL_LIGHT2','%GL_LIGHT3','%GL_LIGHT4','%GL_LIGHT5','%GL_LIGHT6','%GL_LIGHT7','%GL_LIGHTING', + '%GL_LIGHTING_BIT','%GL_LIGHT_MODEL_AMBIENT','%GL_LIGHT_MODEL_COLOR_CONTROL_EXT','%GL_LIGHT_MODEL_LOCAL_VIEWER','%GL_LIGHT_MODEL_TWO_SIDE','%GL_LINE','%GL_LINEAR','%GL_LINEAR_ATTENUATION', + '%GL_LINEAR_MIPMAP_LINEAR','%GL_LINEAR_MIPMAP_NEAREST','%GL_LINES','%GL_LINE_BIT','%GL_LINE_LOOP','%GL_LINE_RESET_TOKEN','%GL_LINE_SMOOTH','%GL_LINE_SMOOTH_HINT', + '%GL_LINE_STIPPLE','%GL_LINE_STIPPLE_PATTERN','%GL_LINE_STIPPLE_REPEAT','%GL_LINE_STRIP','%GL_LINE_TOKEN','%GL_LINE_WIDTH','%GL_LINE_WIDTH_GRANULARITY','%GL_LINE_WIDTH_RANGE', + '%GL_LIST_BASE','%GL_LIST_BIT','%GL_LIST_INDEX','%GL_LIST_MODE','%GL_LOAD','%GL_LOGIC_OP','%GL_LOGIC_OP_MODE','%GL_LUMINANCE', + '%GL_LUMINANCE12','%GL_LUMINANCE12_ALPHA12','%GL_LUMINANCE12_ALPHA4','%GL_LUMINANCE16','%GL_LUMINANCE16_ALPHA16','%GL_LUMINANCE4','%GL_LUMINANCE4_ALPHA4','%GL_LUMINANCE6_ALPHA2', + '%GL_LUMINANCE8','%GL_LUMINANCE8_ALPHA8','%GL_LUMINANCE_ALPHA','%GL_MAP1_COLOR_4','%GL_MAP1_GRID_DOMAIN','%GL_MAP1_GRID_SEGMENTS','%GL_MAP1_INDEX','%GL_MAP1_NORMAL', + '%GL_MAP1_TEXTURE_COORD_1','%GL_MAP1_TEXTURE_COORD_2','%GL_MAP1_TEXTURE_COORD_3','%GL_MAP1_TEXTURE_COORD_4','%GL_MAP1_VERTEX_3','%GL_MAP1_VERTEX_4','%GL_MAP2_COLOR_4','%GL_MAP2_GRID_DOMAIN', + '%GL_MAP2_GRID_SEGMENTS','%GL_MAP2_INDEX','%GL_MAP2_NORMAL','%GL_MAP2_TEXTURE_COORD_1','%GL_MAP2_TEXTURE_COORD_2','%GL_MAP2_TEXTURE_COORD_3','%GL_MAP2_TEXTURE_COORD_4','%GL_MAP2_VERTEX_3', + '%GL_MAP2_VERTEX_4','%GL_MAP_COLOR','%GL_MAP_STENCIL','%GL_MATRIX_MODE','%GL_MAX_ATTRIB_STACK_DEPTH','%GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','%GL_MAX_CLIP_PLANES','%GL_MAX_CONVOLUTION_HEIGHT_EXT', + '%GL_MAX_CONVOLUTION_WIDTH_EXT','%GL_MAX_EVAL_ORDER','%GL_MAX_EXT','%GL_MAX_LIGHTS','%GL_MAX_LIST_NESTING','%GL_MAX_MODELVIEW_STACK_DEPTH','%GL_MAX_NAME_STACK_DEPTH','%GL_MAX_PIXEL_MAP_TABLE', + '%GL_MAX_PROJECTION_STACK_DEPTH','%GL_MAX_TEXTURE_SIZE','%GL_MAX_TEXTURE_STACK_DEPTH','%GL_MAX_VIEWPORT_DIMS','%GL_MINMAX_EXT','%GL_MINMAX_FORMAT_EXT','%GL_MINMAX_SINK_EXT','%GL_MIN_EXT', + '%GL_MODELVIEW','%GL_MODELVIEW_MATRIX','%GL_MODELVIEW_STACK_DEPTH','%GL_MODULATE','%GL_MULT','%GL_N3F_V3F','%GL_NAME_STACK_DEPTH','%GL_NAND', + '%GL_NEAREST','%GL_NEAREST_MIPMAP_LINEAR','%GL_NEAREST_MIPMAP_NEAREST','%GL_NEVER','%GL_NICEST','%GL_NONE','%GL_NOOP','%GL_NOR', + '%GL_NORMALIZE','%GL_NORMAL_ARRAY','%GL_NORMAL_ARRAY_COUNT_EXT','%GL_NORMAL_ARRAY_EXT','%GL_NORMAL_ARRAY_POINTER','%GL_NORMAL_ARRAY_POINTER_EXT','%GL_NORMAL_ARRAY_STRIDE','%GL_NORMAL_ARRAY_STRIDE_EXT', + '%GL_NORMAL_ARRAY_TYPE','%GL_NORMAL_ARRAY_TYPE_EXT','%GL_NOTEQUAL','%GL_NO_ERROR','%GL_OBJECT_LINEAR','%GL_OBJECT_PLANE','%GL_ONE','%GL_ONE_MINUS_CONSTANT_ALPHA_EXT', + '%GL_ONE_MINUS_CONSTANT_COLOR_EXT','%GL_ONE_MINUS_DST_ALPHA','%GL_ONE_MINUS_DST_COLOR','%GL_ONE_MINUS_SRC_ALPHA','%GL_ONE_MINUS_SRC_COLOR','%GL_OR','%GL_ORDER','%GL_OR_INVERTED', + '%GL_OR_REVERSE','%GL_OUT_OF_MEMORY','%GL_PACK_ALIGNMENT','%GL_PACK_LSB_FIRST','%GL_PACK_ROW_LENGTH','%GL_PACK_SKIP_PIXELS','%GL_PACK_SKIP_ROWS','%GL_PACK_SWAP_BYTES', + '%GL_PASS_THROUGH_TOKEN','%GL_PERSPECTIVE_CORRECTION_HINT','%GL_PIXEL_MAP_A_TO_A','%GL_PIXEL_MAP_A_TO_A_SIZE','%GL_PIXEL_MAP_B_TO_B','%GL_PIXEL_MAP_B_TO_B_SIZE','%GL_PIXEL_MAP_G_TO_G','%GL_PIXEL_MAP_G_TO_G_SIZE', + '%GL_PIXEL_MAP_I_TO_A','%GL_PIXEL_MAP_I_TO_A_SIZE','%GL_PIXEL_MAP_I_TO_B','%GL_PIXEL_MAP_I_TO_B_SIZE','%GL_PIXEL_MAP_I_TO_G','%GL_PIXEL_MAP_I_TO_G_SIZE','%GL_PIXEL_MAP_I_TO_I','%GL_PIXEL_MAP_I_TO_I_SIZE', + '%GL_PIXEL_MAP_I_TO_R','%GL_PIXEL_MAP_I_TO_R_SIZE','%GL_PIXEL_MAP_R_TO_R','%GL_PIXEL_MAP_R_TO_R_SIZE','%GL_PIXEL_MAP_S_TO_S','%GL_PIXEL_MAP_S_TO_S_SIZE','%GL_PIXEL_MODE_BIT','%GL_POINT', + '%GL_POINTS','%GL_POINT_BIT','%GL_POINT_SIZE','%GL_POINT_SIZE_GRANULARITY','%GL_POINT_SIZE_RANGE','%GL_POINT_SMOOTH','%GL_POINT_SMOOTH_HINT','%GL_POINT_TOKEN', + '%GL_POLYGON','%GL_POLYGON_BIT','%GL_POLYGON_MODE','%GL_POLYGON_OFFSET_BIAS_EXT','%GL_POLYGON_OFFSET_EXT','%GL_POLYGON_OFFSET_FACTOR','%GL_POLYGON_OFFSET_FACTOR_EXT','%GL_POLYGON_OFFSET_FILL', + '%GL_POLYGON_OFFSET_LINE','%GL_POLYGON_OFFSET_POINT','%GL_POLYGON_OFFSET_UNITS','%GL_POLYGON_SMOOTH','%GL_POLYGON_SMOOTH_HINT','%GL_POLYGON_STIPPLE','%GL_POLYGON_STIPPLE_BIT','%GL_POLYGON_TOKEN', + '%GL_POSITION','%GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_ALPHA_BIAS_EXT','%GL_POST_CONVOLUTION_ALPHA_SCALE_EXT','%GL_POST_CONVOLUTION_BLUE_BIAS_EXT','%GL_POST_CONVOLUTION_BLUE_SCALE_EXT','%GL_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_GREEN_BIAS_EXT', + '%GL_POST_CONVOLUTION_GREEN_SCALE_EXT','%GL_POST_CONVOLUTION_RED_BIAS_EXT','%GL_POST_CONVOLUTION_RED_SCALE_EXT','%GL_PROJECTION','%GL_PROJECTION_MATRIX','%GL_PROJECTION_STACK_DEPTH','%GL_PROXY_COLOR_TABLE_EXT','%GL_PROXY_HISTOGRAM_EXT', + '%GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_PROXY_TEXTURE_1D','%GL_PROXY_TEXTURE_2D','%GL_Q','%GL_QUADRATIC_ATTENUATION','%GL_QUADS','%GL_QUAD_STRIP', + '%GL_R','%GL_R3_G3_B2','%GL_READ_BUFFER','%GL_RED','%GL_REDUCE_EXT','%GL_RED_BIAS','%GL_RED_BITS','%GL_RED_SCALE', + '%GL_RENDER','%GL_RENDERER','%GL_RENDER_MODE','%GL_REPEAT','%GL_REPLACE','%GL_RETURN','%GL_RGB','%GL_RGB10', + '%GL_RGB10_A2','%GL_RGB12','%GL_RGB16','%GL_RGB4','%GL_RGB5','%GL_RGB5_A1','%GL_RGB8','%GL_RGBA', + '%GL_RGBA12','%GL_RGBA16','%GL_RGBA2','%GL_RGBA4','%GL_RGBA8','%GL_RGBA_MODE','%GL_RIGHT','%GL_S', + '%GL_SCISSOR_BIT','%GL_SCISSOR_BOX','%GL_SCISSOR_TEST','%GL_SECONDARY_COLOR_ARRAY_EXT','%GL_SECONDARY_COLOR_ARRAY_POINTER_EXT','%GL_SECONDARY_COLOR_ARRAY_SIZE_EXT','%GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT','%GL_SECONDARY_COLOR_ARRAY_TYPE_EXT', + '%GL_SELECT','%GL_SELECTION_BUFFER_POINTER','%GL_SELECTION_BUFFER_SIZE','%GL_SEPARABLE_2D_EXT','%GL_SEPARATE_SPECULAR_COLOR_EXT','%GL_SET','%GL_SHADE_MODEL','%GL_SHININESS', + '%GL_SHORT','%GL_SINGLE_COLOR_EXT','%GL_SMOOTH','%GL_SPECULAR','%GL_SPHERE_MAP','%GL_SPOT_CUTOFF','%GL_SPOT_DIRECTION','%GL_SPOT_EXPONENT', + '%GL_SRC_ALPHA','%GL_SRC_ALPHA_SATURATE','%GL_SRC_COLOR','%GL_STACK_OVERFLOW','%GL_STACK_UNDERFLOW','%GL_STENCIL','%GL_STENCIL_BITS','%GL_STENCIL_BUFFER_BIT', + '%GL_STENCIL_CLEAR_VALUE','%GL_STENCIL_FAIL','%GL_STENCIL_FUNC','%GL_STENCIL_INDEX','%GL_STENCIL_PASS_DEPTH_FAIL','%GL_STENCIL_PASS_DEPTH_PASS','%GL_STENCIL_REF','%GL_STENCIL_TEST', + '%GL_STENCIL_VALUE_MASK','%GL_STENCIL_WRITEMASK','%GL_STEREO','%GL_SUBPIXEL_BITS','%GL_T','%GL_T2F_C3F_V3F','%GL_T2F_C4F_N3F_V3F','%GL_T2F_C4UB_V3F', + '%GL_T2F_N3F_V3F','%GL_T2F_V3F','%GL_T4F_C4F_N3F_V4F','%GL_T4F_V4F','%GL_TABLE_TOO_LARGE_EXT','%GL_TEXTURE','%GL_TEXTURE_1D','%GL_TEXTURE_2D', + '%GL_TEXTURE_ALPHA_SIZE','%GL_TEXTURE_BINDING_1D','%GL_TEXTURE_BINDING_2D','%GL_TEXTURE_BIT','%GL_TEXTURE_BLUE_SIZE','%GL_TEXTURE_BORDER','%GL_TEXTURE_BORDER_COLOR','%GL_TEXTURE_COMPONENTS', + '%GL_TEXTURE_COORD_ARRAY','%GL_TEXTURE_COORD_ARRAY_COUNT_EXT','%GL_TEXTURE_COORD_ARRAY_EXT','%GL_TEXTURE_COORD_ARRAY_POINTER','%GL_TEXTURE_COORD_ARRAY_POINTER_EXT','%GL_TEXTURE_COORD_ARRAY_SIZE','%GL_TEXTURE_COORD_ARRAY_SIZE_EXT','%GL_TEXTURE_COORD_ARRAY_STRIDE', + '%GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','%GL_TEXTURE_COORD_ARRAY_TYPE','%GL_TEXTURE_COORD_ARRAY_TYPE_EXT','%GL_TEXTURE_ENV','%GL_TEXTURE_ENV_COLOR','%GL_TEXTURE_ENV_MODE','%GL_TEXTURE_GEN_MODE','%GL_TEXTURE_GEN_Q', + '%GL_TEXTURE_GEN_R','%GL_TEXTURE_GEN_S','%GL_TEXTURE_GEN_T','%GL_TEXTURE_GREEN_SIZE','%GL_TEXTURE_HEIGHT','%GL_TEXTURE_INTENSITY_SIZE','%GL_TEXTURE_INTERNAL_FORMAT','%GL_TEXTURE_LUMINANCE_SIZE', + '%GL_TEXTURE_MAG_FILTER','%GL_TEXTURE_MATRIX','%GL_TEXTURE_MIN_FILTER','%GL_TEXTURE_PRIORITY','%GL_TEXTURE_RED_SIZE','%GL_TEXTURE_RESIDENT','%GL_TEXTURE_STACK_DEPTH','%GL_TEXTURE_WIDTH', + '%GL_TEXTURE_WRAP_S','%GL_TEXTURE_WRAP_T','%GL_TRANSFORM_BIT','%GL_TRIANGLES','%GL_TRIANGLE_FAN','%GL_TRIANGLE_STRIP','%GL_TRUE','%GL_UNPACK_ALIGNMENT', + '%GL_UNPACK_LSB_FIRST','%GL_UNPACK_ROW_LENGTH','%GL_UNPACK_SKIP_PIXELS','%GL_UNPACK_SKIP_ROWS','%GL_UNPACK_SWAP_BYTES','%GL_UNSIGNED_BYTE','%GL_UNSIGNED_BYTE_3_3_2_EXT','%GL_UNSIGNED_INT', + '%GL_UNSIGNED_INT_10_10_10_2_EXT','%GL_UNSIGNED_INT_8_8_8_8_EXT','%GL_UNSIGNED_SHORT','%GL_UNSIGNED_SHORT_4_4_4_4_EXT','%GL_UNSIGNED_SHORT_5_5_5_1_EXT','%GL_V2F','%GL_V3F','%GL_VENDOR', + '%GL_VERSION','%GL_VERSION_1_1','%GL_VERTEX_ARRAY','%GL_VERTEX_ARRAY_COUNT_EXT','%GL_VERTEX_ARRAY_EXT','%GL_VERTEX_ARRAY_POINTER','%GL_VERTEX_ARRAY_POINTER_EXT','%GL_VERTEX_ARRAY_SIZE', + '%GL_VERTEX_ARRAY_SIZE_EXT','%GL_VERTEX_ARRAY_STRIDE','%GL_VERTEX_ARRAY_STRIDE_EXT','%GL_VERTEX_ARRAY_TYPE','%GL_VERTEX_ARRAY_TYPE_EXT','%GL_VIEWPORT','%GL_VIEWPORT_BIT','%GL_WIN_SWAP_HINT', + '%GL_XOR','%GL_ZERO','%GL_ZOOM_X','%GL_ZOOM_Y','%GRAY','%GREEN','%GWLP_HINSTANCE','%GWLP_HWNDPARENT', + '%GWLP_ID','%GWLP_USERDATA','%GWLP_WNDPROC','%GWL_EXSTYLE','%GWL_HINSTANCE','%GWL_HWNDPARENT','%GWL_ID','%GWL_STYLE', + '%GWL_USERDATA','%GWL_WNDPROC','%HDM_FIRST','%HTCAPTION','%HWND_BOTTOM','%HWND_DESKTOP','%HWND_MESSAGE','%HWND_NOTOPMOST', + '%HWND_TOP','%HWND_TOPMOST','%ICRYPTO_XOR_DECREASE','%ICRYPTO_XOR_INCREASE','%ICRYPTO_XOR_NORMAL','%IDABORT','%IDCANCEL','%IDCONTINUE', + '%IDIGNORE','%IDNO','%IDOK','%IDRETRY','%IDTIMEOUT','%IDTRYAGAIN','%IDYES','%INTERNET_CONNECTION_CONFIGURED', + '%INTERNET_CONNECTION_LAN','%INTERNET_CONNECTION_MODEM','%INTERNET_CONNECTION_MODEM_BUSY','%INTERNET_CONNECTION_OFFLINE','%INTERNET_CONNECTION_PROXY','%INTERNET_RAS_INSTALLED','%LBN_DBLCLK','%LBN_KILLFOCUS', + '%LBN_SELCANCEL','%LBN_SELCHANGE','%LBN_SETFOCUS','%LBS_DISABLENOSCROLL','%LBS_EXTENDEDSEL','%LBS_MULTICOLUMN','%LBS_MULTIPLESEL','%LBS_NOINTEGRALHEIGHT', + '%LBS_NOSEL','%LBS_NOTIFY','%LBS_SORT','%LBS_STANDARD','%LBS_USETABSTOPS','%LB_ADDFILE','%LB_ADDSTRING','%LB_DELETESTRING', + '%LB_DIR','%LB_FINDSTRING','%LB_FINDSTRINGEXACT','%LB_GETANCHORINDEX','%LB_GETCARETINDEX','%LB_GETCOUNT','%LB_GETCURSEL','%LB_GETHORIZONTALEXTENT', + '%LB_GETITEMDATA','%LB_GETITEMHEIGHT','%LB_GETITEMRECT','%LB_GETLISTBOXINFO','%LB_GETLOCALE','%LB_GETSEL','%LB_GETSELCOUNT','%LB_GETSELITEMS', + '%LB_GETTEXT','%LB_GETTEXTLEN','%LB_GETTOPINDEX','%LB_INITSTORAGE','%LB_INSERTSTRING','%LB_ITEMFROMPOINT','%LB_MULTIPLEADDSTRING','%LB_RESETCONTENT', + '%LB_SELECTSTRING','%LB_SELITEMRANGE','%LB_SELITEMRANGEEX','%LB_SETANCHORINDEX','%LB_SETCARETINDEX','%LB_SETCOLUMNWIDTH','%LB_SETCOUNT','%LB_SETCURSEL', + '%LB_SETHORIZONTALEXTENT','%LB_SETITEMDATA','%LB_SETITEMHEIGHT','%LB_SETLOCALE','%LB_SETSEL','%LB_SETTABSTOPS','%LB_SETTOPINDEX','%LF_FACESIZE', + '%LTGRAY','%LVM_FIRST','%LWA_ALPHA','%LWA_COLORKEY','%MAGENTA','%MAXBYTE','%MAXCHAR','%MAXDWORD', + '%MAXSHORT','%MAXWORD','%MAX_PATH','%MB_ABORTRETRYIGNORE','%MB_APPLMODAL','%MB_CANCELTRYCONTINUE','%MB_DEFBUTTON1','%MB_DEFBUTTON2', + '%MB_DEFBUTTON3','%MB_HELP','%MB_ICONASTERISK','%MB_ICONERROR','%MB_ICONEXCLAMATION','%MB_ICONHAND','%MB_ICONINFORMATION','%MB_ICONQUESTION', + '%MB_ICONSTOP','%MB_ICONWARNING','%MB_OK','%MB_OKCANCEL','%MB_RETRYCANCEL','%MB_SIMPLE','%MB_SYSTEMMODAL','%MB_TOPMOST', + '%MB_YESNO','%MB_YESNOCANCEL','%MF_CHECKED','%MF_DISABLED','%MF_ENABLED','%MF_GRAYED','%MF_SEPARATOR','%MF_UNCHECKED', + '%MINCHAR','%MINLONG','%MINSHORT','%NULL','%ODBC352_INC','%ODBCVER','%ODBC_ADD_DSN','%ODBC_ADD_SYS_DSN', + '%ODBC_BOTH_DSN','%ODBC_CONFIG_DRIVER','%ODBC_CONFIG_DRIVER_MAX','%ODBC_CONFIG_DSN','%ODBC_CONFIG_SYS_DSN','%ODBC_DRIVER_VERSION','%ODBC_ERROR_COMPONENT_NOT_FOUND','%ODBC_ERROR_CREATE_DSN_FAILED', + '%ODBC_ERROR_GENERAL_ERR','%ODBC_ERROR_INVALID_BUFF_LEN','%ODBC_ERROR_INVALID_DSN','%ODBC_ERROR_INVALID_HWND','%ODBC_ERROR_INVALID_INF','%ODBC_ERROR_INVALID_KEYWORD_VALUE','%ODBC_ERROR_INVALID_LOG_FILE','%ODBC_ERROR_INVALID_NAME', + '%ODBC_ERROR_INVALID_PARAM_SEQUENCE','%ODBC_ERROR_INVALID_PATH','%ODBC_ERROR_INVALID_REQUEST_TYPE','%ODBC_ERROR_INVALID_STR','%ODBC_ERROR_LOAD_LIB_FAILED','%ODBC_ERROR_OUTPUT_STRING_TRUNCATED','%ODBC_ERROR_OUT_OF_MEM','%ODBC_ERROR_REMOVE_DSN_FAILED', + '%ODBC_ERROR_REQUEST_FAILED','%ODBC_ERROR_USAGE_UPDATE_FAILED','%ODBC_ERROR_USER_CANCELED','%ODBC_ERROR_WRITING_SYSINFO_FAILED','%ODBC_INSTALL_COMPLETE','%ODBC_INSTALL_DRIVER','%ODBC_INSTALL_INQUIRY','%ODBC_REMOVE_DEFAULT_DSN', + '%ODBC_REMOVE_DRIVER','%ODBC_REMOVE_DSN','%ODBC_REMOVE_SYS_DSN','%ODBC_SYSTEM_DSN','%ODBC_USER_DSN','%OFN_ALLOWMULTISELECT','%OFN_CREATEPROMPT','%OFN_ENABLEHOOK', + '%OFN_ENABLEINCLUDENOTIFY','%OFN_ENABLESIZING','%OFN_ENABLETEMPLATE','%OFN_ENABLETEMPLATEHANDLE','%OFN_EXPLORER','%OFN_EXTENSIONDIFFERENT','%OFN_FILEMUSTEXIST','%OFN_HIDEREADONLY', + '%OFN_LONGNAMES','%OFN_NOCHANGEDIR','%OFN_NODEREFERENCELINKS','%OFN_NOLONGNAMES','%OFN_NONETWORKBUTTON','%OFN_NOREADONLYRETURN','%OFN_NOTESTFILECREATE','%OFN_NOVALIDATE', + '%OFN_OVERWRITEPROMPT','%OFN_PATHMUSTEXIST','%OFN_READONLY','%OFN_SHAREAWARE','%OFN_SHOWHELP','%OS_ERROR_CALLFUNCTION','%OS_ERROR_EMPTYSTRING','%OS_ERROR_LOADLIBRARY', + '%OS_ERROR_SUCCESS','%OS_ERROR_WRONGPARAMETER','%OS_SHELL_ASYNC','%OS_SHELL_SYNC','%OS_WINDOWS_2K','%OS_WINDOWS_95','%OS_WINDOWS_95_OSR2','%OS_WINDOWS_98', + '%OS_WINDOWS_98_SE','%OS_WINDOWS_ME','%OS_WINDOWS_NT','%OS_WINDOWS_SERVER_2003','%OS_WINDOWS_SERVER_LONGHORN','%OS_WINDOWS_SERVER_LONGHORN_DC','%OS_WINDOWS_VISTA','%OS_WINDOWS_XP', + '%OS_WNDSTYLE_HIDE','%OS_WNDSTYLE_MAXIMIZED','%OS_WNDSTYLE_MINIMIZED','%OS_WNDSTYLE_MINIMIZEDNOFOCUS','%OS_WNDSTYLE_NORMAL','%OS_WNDSTYLE_NORMALNOFOCUS','%PATH_EXT','%PATH_FILE', + '%PATH_FILEEXT','%PATH_ROOT','%PATH_ROOTPATH','%PATH_ROOTPATHPROG','%PATH_ROOTPATHPROGEXT','%PBM_DELTAPOS','%PBM_GETPOS','%PBM_GETRANGE', + '%PBM_SETBARCOLOR','%PBM_SETBKCOLOR','%PBM_SETPOS','%PBM_SETRANGE','%PBM_SETRANGE32','%PBM_SETSTEP','%PBM_STEPIT','%PBS_SMOOTH', + '%PBS_VERTICAL','%PC_DISABLEWAKEEVENT_OFF','%PC_DISABLEWAKEEVENT_ON','%PC_EB_NOCONFIRMATION','%PC_EB_NOPROGRESSUI','%PC_EB_NORMAL','%PC_EB_NOSOUND','%PC_FORCECRITICAL_OFF', + '%PC_FORCECRITICAL_ON','%PC_HIBERNATE_OFF','%PC_HIBERNATE_ON','%PC_RD_FORCE','%PC_RD_FORCEIFHUNG','%PC_RD_LOGOFF','%PC_RD_POWEROFF','%PC_RD_REBOOT', + '%PC_RD_SHUTDOWN','%PC_SD_DONOT_FORCE','%PC_SD_DONOT_REBOOT','%PC_SD_FORCE','%PC_SD_REBOOT','%PFA_CENTER','%PFA_LEFT','%PFA_RIGHT', + '%PF_3DNOW_INSTRUCTIONS_AVAILABLE','%PF_CHANNELS_ENABLED','%PF_COMPARE64_EXCHANGE128','%PF_COMPARE_EXCHANGE128','%PF_COMPARE_EXCHANGE_DOUBLE','%PF_FLOATING_POINT_EMULATED','%PF_FLOATING_POINT_PRECISION_ERRATA','%PF_MMX_INSTRUCTIONS_AVAILABLE', + '%PF_NX_ENABLED','%PF_PAE_ENABLED','%PF_RDTSC_INSTRUCTION_AVAILABLE','%PF_SSE3_INSTRUCTIONS_AVAILABLE','%PF_XMMI64_INSTRUCTIONS_AVAILABLE','%PF_XMMI_INSTRUCTIONS_AVAILABLE','%PGM_FIRST','%RED', + '%RTF_UBB','%SAPI_SVSFDEFAULT','%SAPI_SVSFISFILENAME','%SAPI_SVSFISNOTXML','%SAPI_SVSFISXML','%SAPI_SVSFLAGSASYNC','%SAPI_SVSFNLPMASK','%SAPI_SVSFNLPSPEAKPUNC', + '%SAPI_SVSFPERSISTXML','%SAPI_SVSFPURGEBEFORESPEAK','%SAPI_SVSFUNUSEDFLAGS','%SAPI_SVSFVOICEMASK','%SBS_SIZEGRIP','%SB_BOTTOM','%SB_ENDSCROLL','%SB_LEFT', + '%SB_LINEDOWN','%SB_LINELEFT','%SB_LINERIGHT','%SB_LINEUP','%SB_PAGEDOWN','%SB_PAGELEFT','%SB_PAGERIGHT','%SB_PAGEUP', + '%SB_RIGHT','%SB_SETPARTS','%SB_SETTEXT','%SB_THUMBPOSITION','%SB_THUMBTRACK','%SB_TOP','%SCF_ALL','%SCF_ASSOCIATEFONT', + '%SCF_DEFAULT','%SCF_NOKBUPDATE','%SCF_SELECTION','%SCF_USEUIRULES','%SCF_WORD','%SC_CLOSE','%SC_CONTEXTHELP','%SC_HOTKEY', + '%SC_HSCROLL','%SC_KEYMENU','%SC_MAXIMIZE','%SC_MINIMIZE','%SC_MONITORPOWER','%SC_MOUSEMENU','%SC_MOVE','%SC_NEXTWINDOW', + '%SC_PREVWINDOW','%SC_RESTORE','%SC_SCREENSAVE','%SC_SIZE','%SC_TASKLIST','%SC_VSCROLL','%SERVICE_ACTIVE','%SERVICE_AUTO_START', + '%SERVICE_BOOT_START','%SERVICE_CONTINUE_PENDING','%SERVICE_DEMAND_START','%SERVICE_DISABLED','%SERVICE_DRIVER','%SERVICE_INACTIVE','%SERVICE_INFO_DISPLAY_NAME','%SERVICE_INFO_NAME', + '%SERVICE_PAUSED','%SERVICE_PAUSE_PENDING','%SERVICE_RUNNING','%SERVICE_START_PENDING','%SERVICE_STATE_ALL','%SERVICE_STOPPED','%SERVICE_STOP_PENDING','%SERVICE_SYSTEM_START', + '%SERVICE_TYPE_ALL','%SERVICE_WIN32','%SES_ALLOWBEEPS','%SES_BEEPONMAXTEXT','%SES_BIDI','%SES_EMULATE10','%SES_EMULATESYSEDIT','%SES_EXTENDBACKCOLOR', + '%SES_LOWERCASE','%SES_MAPCPS','%SES_NOIME','%SES_NOINPUTSEQUENCECHK','%SES_SCROLLONKILLFOCUS','%SES_UPPERCASE','%SES_USEAIMM','%SES_USECRLF', + '%SES_XLTCRCRLFTOCR','%SF_RTF','%SF_TEXT','%SMTP_SET_ATTACH_CONTENT_TYPE','%SMTP_SET_CONTENT_TYPE_PREFIX','%SQL_AA_FALSE','%SQL_AA_TRUE','%SQL_ACCESSIBLE_PROCEDURES', + '%SQL_ACCESSIBLE_TABLES','%SQL_ACCESS_MODE','%SQL_ACTIVE_CONNECTIONS','%SQL_ACTIVE_ENVIRONMENTS','%SQL_ACTIVE_STATEMENTS','%SQL_ADD','%SQL_AD_ADD_CONSTRAINT_DEFERRABLE','%SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED', + '%SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE','%SQL_AD_ADD_DOMAIN_CONSTRAINT','%SQL_AD_ADD_DOMAIN_DEFAULT','%SQL_AD_CONSTRAINT_NAME_DEFINITION','%SQL_AD_DROP_DOMAIN_CONSTRAINT','%SQL_AD_DROP_DOMAIN_DEFAULT','%SQL_AF_ALL', + '%SQL_AF_AVG','%SQL_AF_COUNT','%SQL_AF_DISTINCT','%SQL_AF_MAX','%SQL_AF_MIN','%SQL_AF_SUM','%SQL_AGGREGATE_FUNCTIONS','%SQL_ALL_EXCEPT_LIKE', + '%SQL_ALL_TYPES','%SQL_ALTER_DOMAIN','%SQL_ALTER_TABLE','%SQL_AM_CONNECTION','%SQL_AM_NONE','%SQL_AM_STATEMENT','%SQL_API_ALL_FUNCTIONS','%SQL_API_LOADBYORDINAL', + '%SQL_API_ODBC3_ALL_FUNCTIONS','%SQL_API_ODBC3_ALL_FUNCTIONS_SIZE','%SQL_API_SQLALLOCCONNECT','%SQL_API_SQLALLOCENV','%SQL_API_SQLALLOCHANDLE','%SQL_API_SQLALLOCHANDLESTD','%SQL_API_SQLALLOCSTMT','%SQL_API_SQLBINDCOL', + '%SQL_API_SQLBINDPARAM','%SQL_API_SQLBINDPARAMETER','%SQL_API_SQLBROWSECONNECT','%SQL_API_SQLBULKOPERATIONS','%SQL_API_SQLCANCEL','%SQL_API_SQLCLOSECURSOR','%SQL_API_SQLCOLATTRIBUTE','%SQL_API_SQLCOLATTRIBUTES', + '%SQL_API_SQLCOLUMNPRIVILEGES','%SQL_API_SQLCOLUMNS','%SQL_API_SQLCONNECT','%SQL_API_SQLCOPYDESC','%SQL_API_SQLDATASOURCES','%SQL_API_SQLDESCRIBECOL','%SQL_API_SQLDESCRIBEPARAM','%SQL_API_SQLDISCONNECT', + '%SQL_API_SQLDRIVERCONNECT','%SQL_API_SQLDRIVERS','%SQL_API_SQLENDTRAN','%SQL_API_SQLERROR','%SQL_API_SQLEXECDIRECT','%SQL_API_SQLEXECUTE','%SQL_API_SQLEXTENDEDFETCH','%SQL_API_SQLFETCH', + '%SQL_API_SQLFETCHSCROLL','%SQL_API_SQLFOREIGNKEYS','%SQL_API_SQLFREECONNECT','%SQL_API_SQLFREEENV','%SQL_API_SQLFREEHANDLE','%SQL_API_SQLFREESTMT','%SQL_API_SQLGETCONNECTATTR','%SQL_API_SQLGETCONNECTOPTION', + '%SQL_API_SQLGETCURSORNAME','%SQL_API_SQLGETDATA','%SQL_API_SQLGETDESCFIELD','%SQL_API_SQLGETDESCREC','%SQL_API_SQLGETDIAGFIELD','%SQL_API_SQLGETDIAGREC','%SQL_API_SQLGETENVATTR','%SQL_API_SQLGETFUNCTIONS', + '%SQL_API_SQLGETINFO','%SQL_API_SQLGETSTMTATTR','%SQL_API_SQLGETSTMTOPTION','%SQL_API_SQLGETTYPEINFO','%SQL_API_SQLMORERESULTS','%SQL_API_SQLNATIVESQL','%SQL_API_SQLNUMPARAMS','%SQL_API_SQLNUMRESULTCOLS', + '%SQL_API_SQLPARAMDATA','%SQL_API_SQLPARAMOPTIONS','%SQL_API_SQLPREPARE','%SQL_API_SQLPRIMARYKEYS','%SQL_API_SQLPROCEDURECOLUMNS','%SQL_API_SQLPROCEDURES','%SQL_API_SQLPUTDATA','%SQL_API_SQLROWCOUNT', + '%SQL_API_SQLSETCONNECTATTR','%SQL_API_SQLSETCONNECTOPTION','%SQL_API_SQLSETCURSORNAME','%SQL_API_SQLSETDESCFIELD','%SQL_API_SQLSETDESCREC','%SQL_API_SQLSETENVATTR','%SQL_API_SQLSETPARAM','%SQL_API_SQLSETPOS', + '%SQL_API_SQLSETSCROLLOPTIONS','%SQL_API_SQLSETSTMTATTR','%SQL_API_SQLSETSTMTOPTION','%SQL_API_SQLSPECIALCOLUMNS','%SQL_API_SQLSTATISTICS','%SQL_API_SQLTABLEPRIVILEGES','%SQL_API_SQLTABLES','%SQL_API_SQLTRANSACT', + '%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP', + '%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING', + '%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD', + '%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH', + '%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE', + '%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY', + '%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR', + '%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS', + '%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE', + '%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT', + '%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT', + '%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT', + '%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE', + '%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE', + '%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK', + '%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE', + '%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT', + '%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES', + '%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM', + '%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE', + '%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE', + '%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION', + '%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END', + '%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE', + '%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND', + '%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS', + '%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY', + '%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE', + '%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT', + '%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES', + '%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT', + '%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC', + '%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR', + '%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV', + '%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE', + '%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET', + '%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED', + '%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER', + '%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE', + '%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION', + '%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL', + '%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR', + '%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR', + '%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY', + '%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID', + '%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE', + '%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT', + '%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE', + '%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME', + '%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY', + '%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT', + '%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL', + '%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE', + '%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE', + '%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE', + '%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE', + '%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION', + '%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED', + '%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX', + '%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR', + '%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER', + '%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN', + '%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE', + '%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND', + '%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED', + '%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER', + '%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA', + '%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE', + '%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW', + '%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE', + '%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE', + '%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST', + '%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE', + '%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN', + '%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG', + '%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN', + '%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH', + '%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE', + '%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM', + '%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE', + '%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR', + '%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND', + '%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE', + '%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE', + '%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND', + '%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV', + '%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER', + '%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL', + '%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED', + '%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR', + '%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH', + '%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS', + '%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE', + '%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES', + '%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR', + '%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH', + '%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH', + '%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK', + '%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK', + '%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY', + '%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE', + '%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN', + '%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN', + '%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN', + '%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG', + '%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT', + '%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH', + '%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS', + '%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA', + '%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN', + '%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC', + '%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE', + '%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES', + '%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE', + '%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED', + '%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION', + '%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN', + '%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED', + '%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH', + '%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS', + '%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR', + '%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION', + '%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE', + '%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION', + '%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS', + '%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER', + '%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN', + '%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP', + '%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION', + '%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC', + '%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE', + '%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX', + '%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL', + '%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN', + '%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION', + '%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT', + '%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS', + '%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL', + '%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE', + '%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE', + '%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS', + '%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN', + '%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION', + '%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT', + '%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT', + '%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS', + '%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS', + '%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION', + '%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL', + '%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS', + '%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED', + '%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION', + '%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP', + '%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR', + '%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET', + '%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION', + '%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SRCCOPY','%SS_BITMAP', + '%SS_BLACKFRAME','%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT', + '%SS_GRAYFRAME','%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT', + '%SS_RIGHTJUST','%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_FROM_MEMORY','%STAT_FILL_NATURAL', + '%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN','%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_FILL_WITH_NUMBER','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%STAT_TYPE_BYTE', + '%STAT_TYPE_CURRENCY','%STAT_TYPE_DOUBLE','%STAT_TYPE_DWORD','%STAT_TYPE_EXT','%STAT_TYPE_INTEGER','%STAT_TYPE_LONG','%STAT_TYPE_QUAD','%STAT_TYPE_SINGLE', + '%STAT_TYPE_WORD','%SWP_ASYNCWINDOWPOS','%SWP_DEFERERASE','%SWP_DRAWFRAME','%SWP_FRAMECHANGED','%SWP_HIDEWINDOW','%SWP_NOACTIVATE','%SWP_NOCOPYBITS', + '%SWP_NOMOVE','%SWP_NOOWNERZORDER','%SWP_NOREDRAW','%SWP_NOREPOSITION','%SWP_NOSENDCHANGING','%SWP_NOSIZE','%SWP_NOZORDER','%SWP_SHOWWINDOW', + '%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE','%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT', + '%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA','%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBASS_3DALG_DEFAULT','%TBASS_3DALG_FULL', + '%TBASS_3DALG_LIGHT','%TBASS_3DALG_OFF','%TBASS_3DMODE_NORMAL','%TBASS_3DMODE_OFF','%TBASS_3DMODE_RELATIVE','%TBASS_ACTIVE_PAUSED','%TBASS_ACTIVE_PLAYING','%TBASS_ACTIVE_STALLED', + '%TBASS_ACTIVE_STOPPED','%TBASS_CONFIG_3DALGORITHM','%TBASS_CONFIG_BUFFER','%TBASS_CONFIG_CURVE_PAN','%TBASS_CONFIG_CURVE_VOL','%TBASS_CONFIG_FLOATDSP','%TBASS_CONFIG_GVOL_MUSIC','%TBASS_CONFIG_GVOL_SAMPLE', + '%TBASS_CONFIG_GVOL_STREAM','%TBASS_CONFIG_MAXVOL','%TBASS_CONFIG_MP3_CODEC','%TBASS_CONFIG_NET_AGENT','%TBASS_CONFIG_NET_BUFFER','%TBASS_CONFIG_NET_PASSIVE','%TBASS_CONFIG_NET_PREBUF','%TBASS_CONFIG_NET_PROXY', + '%TBASS_CONFIG_NET_TIMEOUT','%TBASS_CONFIG_PAUSE_NOPLAY','%TBASS_CONFIG_UPDATEPERIOD','%TBASS_CTYPE_MUSIC_IT','%TBASS_CTYPE_MUSIC_MO3','%TBASS_CTYPE_MUSIC_MOD','%TBASS_CTYPE_MUSIC_MTM','%TBASS_CTYPE_MUSIC_S3M', + '%TBASS_CTYPE_MUSIC_XM','%TBASS_CTYPE_RECORD','%TBASS_CTYPE_SAMPLE','%TBASS_CTYPE_STREAM','%TBASS_CTYPE_STREAM_AIFF','%TBASS_CTYPE_STREAM_MP1','%TBASS_CTYPE_STREAM_MP2','%TBASS_CTYPE_STREAM_MP3', + '%TBASS_CTYPE_STREAM_OGG','%TBASS_CTYPE_STREAM_WAV','%TBASS_CTYPE_STREAM_WAV_FLOAT','%TBASS_CTYPE_STREAM_WAV_PCM','%TBASS_DATA_AVAILABLE','%TBASS_DATA_FFT1024','%TBASS_DATA_FFT2048','%TBASS_DATA_FFT4096', + '%TBASS_DATA_FFT512','%TBASS_DATA_FFT_INDIVIDUAL','%TBASS_DATA_FFT_NOWINDOW','%TBASS_DATA_FLOAT','%TBASS_DEVICE_3D','%TBASS_DEVICE_8BITS','%TBASS_DEVICE_LATENCY','%TBASS_DEVICE_MONO', + '%TBASS_DEVICE_NOSPEAKER','%TBASS_DEVICE_SPEAKERS','%TBASS_EAX_ENVIRONMENT_ALLEY','%TBASS_EAX_ENVIRONMENT_ARENA','%TBASS_EAX_ENVIRONMENT_AUDITORIUM','%TBASS_EAX_ENVIRONMENT_BATHROOM','%TBASS_EAX_ENVIRONMENT_CARPETEDHALLWAY','%TBASS_EAX_ENVIRONMENT_CAVE', + '%TBASS_EAX_ENVIRONMENT_CITY','%TBASS_EAX_ENVIRONMENT_CONCERTHALL','%TBASS_EAX_ENVIRONMENT_COUNT','%TBASS_EAX_ENVIRONMENT_DIZZY','%TBASS_EAX_ENVIRONMENT_DRUGGED','%TBASS_EAX_ENVIRONMENT_FOREST','%TBASS_EAX_ENVIRONMENT_GENERIC','%TBASS_EAX_ENVIRONMENT_HALLWAY', + '%TBASS_EAX_ENVIRONMENT_HANGAR','%TBASS_EAX_ENVIRONMENT_LIVINGROOM','%TBASS_EAX_ENVIRONMENT_MOUNTAINS','%TBASS_EAX_ENVIRONMENT_PADDEDCELL','%TBASS_EAX_ENVIRONMENT_PARKINGLOT','%TBASS_EAX_ENVIRONMENT_PLAIN','%TBASS_EAX_ENVIRONMENT_PSYCHOTIC','%TBASS_EAX_ENVIRONMENT_QUARRY', + '%TBASS_EAX_ENVIRONMENT_ROOM','%TBASS_EAX_ENVIRONMENT_SEWERPIPE','%TBASS_EAX_ENVIRONMENT_STONECORRIDOR','%TBASS_EAX_ENVIRONMENT_STONEROOM','%TBASS_EAX_ENVIRONMENT_UNDERWATER','%TBASS_ERROR_ALREADY','%TBASS_ERROR_BUFLOST','%TBASS_ERROR_CODEC', + '%TBASS_ERROR_CREATE','%TBASS_ERROR_DECODE','%TBASS_ERROR_DEVICE','%TBASS_ERROR_DRIVER','%TBASS_ERROR_DX','%TBASS_ERROR_EMPTY','%TBASS_ERROR_FILEFORM','%TBASS_ERROR_FILEOPEN', + '%TBASS_ERROR_FORMAT','%TBASS_ERROR_FREQ','%TBASS_ERROR_HANDLE','%TBASS_ERROR_ILLPARAM','%TBASS_ERROR_ILLTYPE','%TBASS_ERROR_INIT','%TBASS_ERROR_MEM','%TBASS_ERROR_NO3D', + '%TBASS_ERROR_NOCHAN','%TBASS_ERROR_NOEAX','%TBASS_ERROR_NOFX','%TBASS_ERROR_NOHW','%TBASS_ERROR_NONET','%TBASS_ERROR_NOPAUSE','%TBASS_ERROR_NOPLAY','%TBASS_ERROR_NOTAVAIL', + '%TBASS_ERROR_NOTFILE','%TBASS_ERROR_PLAYING','%TBASS_ERROR_POSITION','%TBASS_ERROR_SPEAKER','%TBASS_ERROR_START','%TBASS_ERROR_TIMEOUT','%TBASS_ERROR_UNKNOWN','%TBASS_ERROR_VERSION', + '%TBASS_FALSE','%TBASS_FILEPOS_CURRENT','%TBASS_FILEPOS_DECODE','%TBASS_FILEPOS_DOWNLOAD','%TBASS_FILEPOS_END','%TBASS_FILEPOS_START','%TBASS_FILE_CLOSE','%TBASS_FILE_LEN', + '%TBASS_FILE_READ','%TBASS_FILE_SEEK','%TBASS_FX_CHORUS','%TBASS_FX_COMPRESSOR','%TBASS_FX_DISTORTION','%TBASS_FX_ECHO','%TBASS_FX_FLANGER','%TBASS_FX_GARGLE', + '%TBASS_FX_I3DL2REVERB','%TBASS_FX_PARAMEQ','%TBASS_FX_PHASE_180','%TBASS_FX_PHASE_90','%TBASS_FX_PHASE_NEG_180','%TBASS_FX_PHASE_NEG_90','%TBASS_FX_PHASE_ZERO','%TBASS_FX_REVERB', + '%TBASS_INPUT_LEVEL','%TBASS_INPUT_OFF','%TBASS_INPUT_ON','%TBASS_INPUT_TYPE_ANALOG','%TBASS_INPUT_TYPE_AUX','%TBASS_INPUT_TYPE_CD','%TBASS_INPUT_TYPE_DIGITAL','%TBASS_INPUT_TYPE_LINE', + '%TBASS_INPUT_TYPE_MASK','%TBASS_INPUT_TYPE_MIC','%TBASS_INPUT_TYPE_PHONE','%TBASS_INPUT_TYPE_SPEAKER','%TBASS_INPUT_TYPE_SYNTH','%TBASS_INPUT_TYPE_UNDEF','%TBASS_INPUT_TYPE_WAVE','%TBASS_MP3_SETPOS', + '%TBASS_MUSIC_3D','%TBASS_MUSIC_ATTRIB_AMPLIFY','%TBASS_MUSIC_ATTRIB_BPM','%TBASS_MUSIC_ATTRIB_PANSEP','%TBASS_MUSIC_ATTRIB_PSCALER','%TBASS_MUSIC_ATTRIB_SPEED','%TBASS_MUSIC_ATTRIB_VOL_CHAN','%TBASS_MUSIC_ATTRIB_VOL_GLOBAL', + '%TBASS_MUSIC_ATTRIB_VOL_INST','%TBASS_MUSIC_AUTOFREE','%TBASS_MUSIC_CALCLEN','%TBASS_MUSIC_DECODE','%TBASS_MUSIC_FLOAT','%TBASS_MUSIC_FT2MOD','%TBASS_MUSIC_FX','%TBASS_MUSIC_LOOP', + '%TBASS_MUSIC_MONO','%TBASS_MUSIC_NONINTER','%TBASS_MUSIC_NOSAMPLE','%TBASS_MUSIC_POSRESET','%TBASS_MUSIC_POSRESETEX','%TBASS_MUSIC_PRESCAN','%TBASS_MUSIC_PT1MOD','%TBASS_MUSIC_RAMP', + '%TBASS_MUSIC_RAMPS','%TBASS_MUSIC_STOPBACK','%TBASS_MUSIC_SURROUND','%TBASS_MUSIC_SURROUND2','%TBASS_OBJECT_DS','%TBASS_OBJECT_DS3DL','%TBASS_OK','%TBASS_RECORD_PAUSE', + '%TBASS_SAMPLE_3D','%TBASS_SAMPLE_8BITS','%TBASS_SAMPLE_FLOAT','%TBASS_SAMPLE_FX','%TBASS_SAMPLE_LOOP','%TBASS_SAMPLE_MONO','%TBASS_SAMPLE_MUTEMAX','%TBASS_SAMPLE_OVER_DIST', + '%TBASS_SAMPLE_OVER_POS','%TBASS_SAMPLE_OVER_VOL','%TBASS_SAMPLE_SOFTWARE','%TBASS_SAMPLE_VAM','%TBASS_SLIDE_FREQ','%TBASS_SLIDE_PAN','%TBASS_SLIDE_VOL','%TBASS_SPEAKER_CENLFE', + '%TBASS_SPEAKER_CENTER','%TBASS_SPEAKER_FRONT','%TBASS_SPEAKER_FRONTLEFT','%TBASS_SPEAKER_FRONTRIGHT','%TBASS_SPEAKER_LEFT','%TBASS_SPEAKER_LFE','%TBASS_SPEAKER_REAR','%TBASS_SPEAKER_REAR2', + '%TBASS_SPEAKER_REAR2LEFT','%TBASS_SPEAKER_REAR2RIGHT','%TBASS_SPEAKER_REARLEFT','%TBASS_SPEAKER_REARRIGHT','%TBASS_SPEAKER_RIGHT','%TBASS_STREAMPROC_END','%TBASS_STREAM_AUTOFREE','%TBASS_STREAM_BLOCK', + '%TBASS_STREAM_DECODE','%TBASS_STREAM_PRESCAN','%TBASS_STREAM_RESTRATE','%TBASS_STREAM_STATUS','%TBASS_SYNC_DOWNLOAD','%TBASS_SYNC_END','%TBASS_SYNC_FREE','%TBASS_SYNC_MESSAGE', + '%TBASS_SYNC_META','%TBASS_SYNC_MIXTIME','%TBASS_SYNC_MUSICFX','%TBASS_SYNC_MUSICINST','%TBASS_SYNC_MUSICPOS','%TBASS_SYNC_ONETIME','%TBASS_SYNC_POS','%TBASS_SYNC_SLIDE', + '%TBASS_SYNC_STALL','%TBASS_TAG_HTTP','%TBASS_TAG_ICY','%TBASS_TAG_ID3','%TBASS_TAG_ID3V2','%TBASS_TAG_META','%TBASS_TAG_MUSIC_INST','%TBASS_TAG_MUSIC_MESSAGE', + '%TBASS_TAG_MUSIC_NAME','%TBASS_TAG_MUSIC_SAMPLE','%TBASS_TAG_OGG','%TBASS_TAG_RIFF_INFO','%TBASS_TAG_VENDOR','%TBASS_TRUE','%TBASS_UNICODE','%TBASS_VAM_HARDWARE', + '%TBASS_VAM_SOFTWARE','%TBASS_VAM_TERM_DIST','%TBASS_VAM_TERM_PRIO','%TBASS_VAM_TERM_TIME','%TBASS_VERSION','%TBCD_CHANNEL','%TBCD_THUMB','%TBCD_TICS', + '%TBGL_ALIGN_CENTER','%TBGL_ALIGN_CENTER_CENTER','%TBGL_ALIGN_CENTER_DOWN','%TBGL_ALIGN_CENTER_UP','%TBGL_ALIGN_LEFT','%TBGL_ALIGN_LEFT_CENTER','%TBGL_ALIGN_LEFT_DOWN','%TBGL_ALIGN_LEFT_UP', + '%TBGL_ALIGN_RIGHT','%TBGL_ALIGN_RIGHT_CENTER','%TBGL_ALIGN_RIGHT_DOWN','%TBGL_ALIGN_RIGHT_UP','%TBGL_ALWAYS','%TBGL_EQUAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX', + '%TBGL_ERROR_NONE','%TBGL_GEQUAL','%TBGL_GREATER','%TBGL_LEQUAL','%TBGL_LESS','%TBGL_LIGHT_AMBIENT','%TBGL_LIGHT_CONSTANT_ATTENUATION','%TBGL_LIGHT_DIFFUSE', + '%TBGL_LIGHT_LINEAR_ATTENUATION','%TBGL_LIGHT_POSITION','%TBGL_LIGHT_QUADRATIC_ATTENUATION','%TBGL_LIGHT_SPECULAR','%TBGL_LIGHT_SPOT_CUTOFF','%TBGL_LIGHT_SPOT_DIRECTION','%TBGL_LIGHT_SPOT_EXPONENT','%TBGL_M15B', + '%TBGL_M15G','%TBGL_M15LAYER','%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X', + '%TBGL_M15Y','%TBGL_M15Z','%TBGL_NEVER','%TBGL_NORMAL_NONE','%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_NOTEQUAL','%TBGL_OBJ_CUBE', + '%TBGL_OBJ_CUBE3','%TBGL_OBJ_CYLINDER','%TBGL_OBJ_SPHERE','%TBGL_PINFO_RGB','%TBGL_PINFO_XYZ','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST', + '%TBM_CLEARSEL','%TBM_CLEARTICS','%TBM_GETBUDDY','%TBM_GETCHANNELRECT','%TBM_GETLINESIZE','%TBM_GETNUMTICS','%TBM_GETPAGESIZE','%TBM_GETPOS', + '%TBM_GETPTICS','%TBM_GETRANGEMAX','%TBM_GETRANGEMIN','%TBM_GETSELEND','%TBM_GETSELSTART','%TBM_GETTHUMBLENGTH','%TBM_GETTHUMBRECT','%TBM_GETTIC', + '%TBM_GETTICPOS','%TBM_GETTOOLTIPS','%TBM_GETUNICODEFORMAT','%TBM_SETBUDDY','%TBM_SETLINESIZE','%TBM_SETPAGESIZE','%TBM_SETPOS','%TBM_SETRANGE', + '%TBM_SETRANGEMAX','%TBM_SETRANGEMIN','%TBM_SETSEL','%TBM_SETSELEND','%TBM_SETSELSTART','%TBM_SETTHUMBLENGTH','%TBM_SETTIC','%TBM_SETTICFREQ', + '%TBM_SETTIPSIDE','%TBM_SETTOOLTIPS','%TBM_SETUNICODEFORMAT','%TBS_AUTOTICKS','%TBS_BOTH','%TBS_BOTTOM','%TBS_DOWNISLEFT','%TBS_ENABLESELRANGE', + '%TBS_FIXEDLENGTH','%TBS_HORZ','%TBS_LEFT','%TBS_NOTHUMB','%TBS_NOTICKS','%TBS_REVERSED','%TBS_RIGHT','%TBS_TOOLTIPS', + '%TBS_TOP','%TBS_VERT','%TBTS_BOTTOM','%TBTS_LEFT','%TBTS_RIGHT','%TBTS_TOP','%TB_%VT_BSTR','%TB_%VT_CY', + '%TB_%VT_DATE','%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_BOTTOM', + '%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING','%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_ENDTRACK','%TB_E_INVALIDARG', + '%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_IMGCTX_ACTUALSIZE','%TB_IMGCTX_AUTOSIZE','%TB_IMGCTX_FITTOHEIGHT','%TB_IMGCTX_FITTOWIDTH','%TB_IMGCTX_STRETCH','%TB_LINEDOWN', + '%TB_LINEUP','%TB_MK_E_CONNECTMANUALLY','%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_PAGEDOWN','%TB_PAGEUP', + '%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE','%TB_S_OK','%TB_THUMBPOSITION','%TB_THUMBTRACK','%TB_TOP', + '%TCM_FIRST','%TCM_GETCURSEL','%TCN_FOCUSCHANGE','%TCN_GETOBJECT','%TCN_SELCHANGE','%TCN_SELCHANGING','%TCS_BOTTOM','%TCS_BUTTONS', + '%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS','%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT', + '%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED','%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE', + '%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL','%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DEFAULT_ALPHA','%TOKENIZER_DEFAULT_DELIM', + '%TOKENIZER_DEFAULT_DQUOTE','%TOKENIZER_DEFAULT_NEWLINE','%TOKENIZER_DEFAULT_NUMERIC','%TOKENIZER_DEFAULT_SPACE','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED', + '%TOKENIZER_NUMBER','%TOKENIZER_QUOTE','%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%UDM_GETACCEL','%UDM_GETBASE', + '%UDM_GETBUDDY','%UDM_GETPOS','%UDM_GETPOS32','%UDM_GETRANGE','%UDM_GETRANGE32','%UDM_GETUNICODEFORMAT','%UDM_SETACCEL','%UDM_SETBASE', + '%UDM_SETBUDDY','%UDM_SETPOS','%UDM_SETPOS32','%UDM_SETRANGE','%UDM_SETRANGE32','%UDM_SETUNICODEFORMAT','%UDS_ALIGNLEFT','%UDS_ALIGNRIGHT', + '%UDS_ARROWKEYS','%UDS_AUTOBUDDY','%UDS_HORZ','%UDS_HOTTRACK','%UDS_NOTHOUSANDS','%UDS_SETBUDDYINT','%UDS_WRAP','%UD_MAXVAL', + '%UD_MINVAL','%VK_0','%VK_1','%VK_2','%VK_3','%VK_4','%VK_5','%VK_6', + '%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT','%VK_ADD','%VK_APPS','%VK_B', + '%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR','%VK_CONTROL','%VK_CONVERT','%VK_D', + '%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E','%VK_END','%VK_ESCAPE','%VK_EXECUTE', + '%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12','%VK_F13','%VK_F14','%VK_F15', + '%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2','%VK_F20','%VK_F21','%VK_F22', + '%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5','%VK_F6','%VK_F7','%VK_F8', + '%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL','%VK_HANGUL','%VK_HANJA','%VK_HELP', + '%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA','%VK_K','%VK_KANA','%VK_KANJI', + '%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN','%VK_M','%VK_MBUTTON','%VK_MENU', + '%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT','%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1', + '%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6','%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9', + '%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP','%VK_PRINT','%VK_PRIOR','%VK_Q', + '%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN','%VK_S','%VK_SCROLL','%VK_SELECT', + '%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE','%VK_SUBTRACT','%VK_T','%VK_TAB', + '%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X','%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y', + '%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL','%VT_BSTR','%VT_BYREF','%VT_CARRAY', + '%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH','%VT_EMPTY','%VT_ERROR','%VT_FILETIME', + '%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8','%VT_INT','%VT_LPSTR','%VT_LPWSTR', + '%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD','%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE', + '%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2','%VT_UI4','%VT_UI8','%VT_UINT', + '%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID','%WAVE_FORMAT_1M08','%WAVE_FORMAT_1M16','%WAVE_FORMAT_1S08', + '%WAVE_FORMAT_1S16','%WAVE_FORMAT_2M08','%WAVE_FORMAT_2M16','%WAVE_FORMAT_2S08','%WAVE_FORMAT_2S16','%WAVE_FORMAT_4M08','%WAVE_FORMAT_4M16','%WAVE_FORMAT_4S08', + '%WAVE_FORMAT_4S16','%WBF_CUSTOM','%WBF_LEVEL1','%WBF_LEVEL2','%WBF_OVERFLOW','%WBF_WORDBREAK','%WBF_WORDWRAP','%WHITE', + '%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED','%WM_CHAR', + '%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_DROPFILES','%WM_ERASEBKGND','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_HSCROLL', + '%WM_IDLE','%WM_INITDIALOG','%WM_KEYDOWN','%WM_KEYUP','%WM_KILLFOCUS','%WM_LBUTTONDBLCLK','%WM_LBUTTONDOWN','%WM_LBUTTONUP', + '%WM_MBUTTONDBLCLK','%WM_MBUTTONDOWN','%WM_MBUTTONUP','%WM_MOUSEFIRST','%WM_MOUSEMOVE','%WM_MOUSEWHEEL','%WM_MOVE','%WM_MOVING', + '%WM_NCLBUTTONDOWN','%WM_NCRBUTTONDOWN','%WM_NEXTDLGCTL','%WM_NOTIFY','%WM_PAINT','%WM_QUIT','%WM_RBUTTONDBLCLK','%WM_RBUTTONDOWN', + '%WM_RBUTTONUP','%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER', + '%WM_USER','%WM_VSCROLL','%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED', + '%WS_DLGFRAME','%WS_EX_ACCEPTFILES','%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LAYERED','%WS_EX_LEFT', + '%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD','%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR', + '%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW','%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL', + '%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX','%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW', + '%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME','%WS_VISIBLE','%WS_VSCROLL','%YELLOW','%ZERO','CRLF', + 'FALSE','M_E','M_PI','NULL','TAB','TRUE' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF; font-weight: bold;', + 2 => 'color: #993333; font-style: italic; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000;' + ), + 'BRACKETS' => array( + 0 => 'color: #333333;' + ), + 'STRINGS' => array( + 0 => 'color: #800080;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #333333;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '_' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/tsql.php b/ehcp/net2ftp/plugins/geshi/geshi/tsql.php new file mode 100644 index 0000000..af57a13 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/tsql.php @@ -0,0 +1,382 @@ + 'T-SQL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* + This will be highlighted in blue + */ + + // Datatypes + 'bigint', 'int', 'smallint', 'tinyint', 'bit', 'decimal', 'numeric', 'money', + 'smallmoney', 'float', 'real', 'datetime', 'smalldatetime', 'char', 'varchar', + 'text', 'nchar', 'nvarchar', 'ntext', 'binary', 'varbinary', 'image', 'cursor', + 'sql_variant', 'table', 'timestamp', 'uniqueidentifier', + + // Keywords + 'ABSOLUTE', 'ACTION', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ALTER', 'ARE', 'ARRAY', 'AS', + 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'BACKUP', 'BEFORE', 'BEGIN', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH', + 'BREAK', 'BROWSE', 'BULK', 'BY', 'CALL', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHECK', 'CHECKPOINT', + 'CLASS', 'CLOB', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'COMPLETION', 'COMPUTE', 'CONNECT', + 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRUCTOR', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'CREATE', + 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', + 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATE', 'DAY', 'DBCC', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE', + 'DEFERRED', 'DELETE', 'DENY', 'DEPTH', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC', + 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOMAIN', 'DOUBLE', 'DROP', 'DUMMY', 'DUMP', 'DYNAMIC', + 'EACH', 'ELSE', 'END', 'END-EXEC', 'EQUALS', 'ERRLVL', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXIT', + 'EXTERNAL', 'FALSE', 'FETCH', 'FILE', 'FILLFACTOR', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FOUND', 'FREE', 'FREETEXT', 'FREETEXTTABLE', + 'FROM', 'FULL', 'FUNCTION', 'GENERAL', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLDLOCK', 'HOST', 'HOUR', + 'IDENTITY', 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IGNORE', 'IMMEDIATE', 'INDEX', 'INDICATOR', 'INITIALIZE', 'INITIALLY', + 'INNER', 'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'ITERATE', 'KEY', + 'KILL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEFT', 'LESS', 'LEVEL', 'LIMIT', 'LINENO', 'LOAD', 'LOCAL', + 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MINUTE', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL', + 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCHECK', 'NONCLUSTERED', 'NONE', 'NULLIF', 'NUMERIC', 'OBJECT', 'OF', + 'OFF', 'OFFSETS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPERATION', 'OPTION', + 'ORDER', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PATH', 'PERCENT', 'PLAN', + 'POSTFIX', 'PRECISION', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRINT', 'PRIOR', 'PRIVILEGES', 'PROC', 'PROCEDURE', + 'PUBLIC', 'RAISERROR', 'READ', 'READS', 'READTEXT', 'REAL', 'RECONFIGURE', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'RELATIVE', + 'REPLICATION', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROW', + 'ROWGUIDCOL', 'ROWS', 'RULE', 'SAVE', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SELECT', + 'SEQUENCE', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SETUSER', 'SHUTDOWN', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC', + 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STRUCTURE', + 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TERMINATE', 'TEXTSIZE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', + 'TO', 'TOP', 'TRAILING', 'TRAN', 'TRANSACTION', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRUE', 'TRUNCATE', 'TSEQUAL', 'UNDER', 'UNION', + 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPDATETEXT', 'USAGE', 'USE', 'USER', 'USING', 'VALUE', 'VALUES', 'VARCHAR', 'VARIABLE', + 'VARYING', 'VIEW', 'WAITFOR', 'WHEN', 'WHENEVER', 'WHERE', 'WHILE', 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'WRITETEXT', 'YEAR', 'ZONE', + 'UNCOMMITTED', 'NOCOUNT', + ), + 2 => array( + /* + Built-in functions + Highlighted in pink. + */ + + //Configuration Functions + '@@DATEFIRST','@@OPTIONS','@@DBTS','@@REMSERVER','@@LANGID','@@SERVERNAME', + '@@LANGUAGE','@@SERVICENAME','@@LOCK_TIMEOUT','@@SPID','@@MAX_CONNECTIONS','@@TEXTSIZE', + '@@MAX_PRECISION','@@VERSION','@@NESTLEVEL', + + //Cursor Functions + '@@CURSOR_ROWS','@@FETCH_STATUS', + + //Date and Time Functions + 'DATEADD','DATEDIFF','DATENAME','DATEPART','DAY','GETDATE','GETUTCDATE','MONTH','YEAR', + + //Mathematical Functions + 'ABS','DEGREES','RAND','ACOS','EXP','ROUND','ASIN','FLOOR','SIGN', + 'ATAN','LOG','SIN','ATN2','LOG10','SQUARE','CEILING','PI','SQRT','COS', + 'POWER','TAN','COT','RADIANS', + + //Meta Data Functions + 'COL_LENGTH','fn_listextendedproperty','COL_NAME','FULLTEXTCATALOGPROPERTY', + 'COLUMNPROPERTY','FULLTEXTSERVICEPROPERTY','DATABASEPROPERTY','INDEX_COL', + 'DATABASEPROPERTYEX','INDEXKEY_PROPERTY','DB_ID','INDEXPROPERTY','DB_NAME', + 'OBJECT_ID','FILE_ID','OBJECT_NAME','FILE_NAME','OBJECTPROPERTY','FILEGROUP_ID', + '@@PROCID','FILEGROUP_NAME','SQL_VARIANT_PROPERTY','FILEGROUPPROPERTY', + 'TYPEPROPERTY','FILEPROPERTY', + + //Security Functions + 'fn_trace_geteventinfo','IS_SRVROLEMEMBER','fn_trace_getfilterinfo','SUSER_SID', + 'fn_trace_getinfo','SUSER_SNAME','fn_trace_gettable','USER_ID','HAS_DBACCESS', + 'IS_MEMBER', + + //String Functions + 'ASCII','NCHAR','SOUNDEX','CHAR','PATINDEX','SPACE','CHARINDEX', + 'REPLACE','STR','DIFFERENCE','QUOTENAME','STUFF','LEFT','REPLICATE', + 'SUBSTRING','LEN','REVERSE','UNICODE','LOWER','RIGHT','UPPER','LTRIM', + 'RTRIM', + + //System Functions + 'APP_NAME','COLLATIONPROPERTY','@@ERROR','fn_helpcollations', + 'fn_servershareddrives','fn_virtualfilestats','FORMATMESSAGE', + 'GETANSINULL','HOST_ID','HOST_NAME','IDENT_CURRENT','IDENT_INCR', + 'IDENT_SEED','@@IDENTITY','ISDATE','ISNUMERIC','PARSENAME','PERMISSIONS', + '@@ROWCOUNT','ROWCOUNT_BIG','SCOPE_IDENTITY','SERVERPROPERTY','SESSIONPROPERTY', + 'STATS_DATE','@@TRANCOUNT','USER_NAME', + + //System Statistical Functions + '@@CONNECTIONS','@@PACK_RECEIVED','@@CPU_BUSY','@@PACK_SENT', + 'fn_virtualfilestats','@@TIMETICKS','@@IDLE','@@TOTAL_ERRORS','@@IO_BUSY', + '@@TOTAL_READ','@@PACKET_ERRORS','@@TOTAL_WRITE', + + //Text and Image Functions + 'TEXTPTR','TEXTVALID', + + //Aggregate functions + 'AVG', 'MAX', 'BINARY_CHECKSUM', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG', + 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'GROUPING', 'VARP' + ), + 3 => array( + /* + System stored procedures + Higlighted dark brown + */ + + //Active Directory Procedures + 'sp_ActiveDirectory_Obj', 'sp_ActiveDirectory_SCP', + + //Catalog Procedures + 'sp_column_privileges', 'sp_special_columns', 'sp_columns', 'sp_sproc_columns', + 'sp_databases', 'sp_statistics', 'sp_fkeys', 'sp_stored_procedures', 'sp_pkeys', + 'sp_table_privileges', 'sp_server_info', 'sp_tables', + + //Cursor Procedures + 'sp_cursor_list', 'sp_describe_cursor_columns', 'sp_describe_cursor', 'sp_describe_cursor_tables', + + //Database Maintenance Plan Procedures + 'sp_add_maintenance_plan', 'sp_delete_maintenance_plan_db', 'sp_add_maintenance_plan_db', + 'sp_delete_maintenance_plan_job', 'sp_add_maintenance_plan_job', 'sp_help_maintenance_plan', + 'sp_delete_maintenance_plan', + + //Distributed Queries Procedures + 'sp_addlinkedserver', 'sp_indexes', 'sp_addlinkedsrvlogin', 'sp_linkedservers', 'sp_catalogs', + 'sp_primarykeys', 'sp_column_privileges_ex', 'sp_serveroption', 'sp_columns_ex', + 'sp_table_privileges_ex', 'sp_droplinkedsrvlogin', 'sp_tables_ex', 'sp_foreignkeys', + + //Full-Text Search Procedures + 'sp_fulltext_catalog', 'sp_help_fulltext_catalogs_cursor', 'sp_fulltext_column', + 'sp_help_fulltext_columns', 'sp_fulltext_database', 'sp_help_fulltext_columns_cursor', + 'sp_fulltext_service', 'sp_help_fulltext_tables', 'sp_fulltext_table', + 'sp_help_fulltext_tables_cursor', 'sp_help_fulltext_catalogs', + + //Log Shipping Procedures + 'sp_add_log_shipping_database', 'sp_delete_log_shipping_database', 'sp_add_log_shipping_plan', + 'sp_delete_log_shipping_plan', 'sp_add_log_shipping_plan_database', + 'sp_delete_log_shipping_plan_database', 'sp_add_log_shipping_primary', + 'sp_delete_log_shipping_primary', 'sp_add_log_shipping_secondary', + 'sp_delete_log_shipping_secondary', 'sp_can_tlog_be_applied', 'sp_get_log_shipping_monitor_info', + 'sp_change_monitor_role', 'sp_remove_log_shipping_monitor', 'sp_change_primary_role', + 'sp_resolve_logins', 'sp_change_secondary_role', 'sp_update_log_shipping_monitor_info', + 'sp_create_log_shipping_monitor_account', 'sp_update_log_shipping_plan', + 'sp_define_log_shipping_monitor', 'sp_update_log_shipping_plan_database', + + //OLE Automation Extended Stored Procedures + 'sp_OACreate', 'sp_OAMethod', 'sp_OADestroy', 'sp_OASetProperty', 'sp_OAGetErrorInfo', + 'sp_OAStop', 'sp_OAGetProperty', + + //Replication Procedures + 'sp_add_agent_parameter', 'sp_enableagentoffload', 'sp_add_agent_profile', + 'sp_enumcustomresolvers', 'sp_addarticle', 'sp_enumdsn', 'sp_adddistpublisher', + 'sp_enumfullsubscribers', 'sp_adddistributiondb', 'sp_expired_subscription_cleanup', + 'sp_adddistributor', 'sp_generatefilters', 'sp_addmergealternatepublisher', + 'sp_getagentoffloadinfo', 'sp_addmergearticle', 'sp_getmergedeletetype', 'sp_addmergefilter', + 'sp_get_distributor', 'sp_addmergepublication', 'sp_getqueuedrows', 'sp_addmergepullsubscription', + 'sp_getsubscriptiondtspackagename', 'sp_addmergepullsubscription_agent', 'sp_grant_publication_access', + 'sp_addmergesubscription', 'sp_help_agent_default', 'sp_addpublication', 'sp_help_agent_parameter', + 'sp_addpublication_snapshot', 'sp_help_agent_profile', 'sp_addpublisher70', 'sp_helparticle', + 'sp_addpullsubscription', 'sp_helparticlecolumns', 'sp_addpullsubscription_agent', 'sp_helparticledts', + 'sp_addscriptexec', 'sp_helpdistpublisher', 'sp_addsubscriber', 'sp_helpdistributiondb', + 'sp_addsubscriber_schedule', 'sp_helpdistributor', 'sp_addsubscription', 'sp_helpmergealternatepublisher', + 'sp_addsynctriggers', 'sp_helpmergearticle', 'sp_addtabletocontents', 'sp_helpmergearticlecolumn', + 'sp_adjustpublisheridentityrange', 'sp_helpmergearticleconflicts', 'sp_article_validation', + 'sp_helpmergeconflictrows', 'sp_articlecolumn', 'sp_helpmergedeleteconflictrows', 'sp_articlefilter', + 'sp_helpmergefilter', 'sp_articlesynctranprocs', 'sp_helpmergepublication', 'sp_articleview', + 'sp_helpmergepullsubscription', 'sp_attachsubscription', 'sp_helpmergesubscription', 'sp_browsesnapshotfolder', + 'sp_helppublication', 'sp_browsemergesnapshotfolder', 'sp_help_publication_access', 'sp_browsereplcmds', + 'sp_helppullsubscription', 'sp_change_agent_parameter', 'sp_helpreplfailovermode', 'sp_change_agent_profile', + 'sp_helpreplicationdboption', 'sp_changearticle', 'sp_helpreplicationoption', 'sp_changedistpublisher', + 'sp_helpsubscriberinfo', 'sp_changedistributiondb', 'sp_helpsubscription', 'sp_changedistributor_password', + 'sp_ivindexhasnullcols', 'sp_changedistributor_property', 'sp_helpsubscription_properties', 'sp_changemergearticle', + 'sp_link_publication', 'sp_changemergefilter', 'sp_marksubscriptionvalidation', 'sp_changemergepublication', + 'sp_mergearticlecolumn', 'sp_changemergepullsubscription', 'sp_mergecleanupmetadata', 'sp_changemergesubscription', + 'sp_mergedummyupdate', 'sp_changepublication', 'sp_mergesubscription_cleanup', 'sp_changesubscriber', + 'sp_publication_validation', 'sp_changesubscriber_schedule', 'sp_refreshsubscriptions', 'sp_changesubscriptiondtsinfo', + 'sp_reinitmergepullsubscription', 'sp_changesubstatus', 'sp_reinitmergesubscription', 'sp_change_subscription_properties', + 'sp_reinitpullsubscription', 'sp_check_for_sync_trigger', 'sp_reinitsubscription', 'sp_copymergesnapshot', + 'sp_removedbreplication', 'sp_copysnapshot', 'sp_repladdcolumn', 'sp_copysubscription', 'sp_replcmds', + 'sp_deletemergeconflictrow', 'sp_replcounters', 'sp_disableagentoffload', 'sp_repldone', 'sp_drop_agent_parameter', + 'sp_repldropcolumn', 'sp_drop_agent_profile', 'sp_replflush', 'sp_droparticle', 'sp_replicationdboption', + 'sp_dropanonymouseagent', 'sp_replication_agent_checkup', 'sp_dropdistpublisher', 'sp_replqueuemonitor', + 'sp_dropdistributiondb', 'sp_replsetoriginator', 'sp_dropmergealternatepublisher', 'sp_replshowcmds', + 'sp_dropdistributor', 'sp_repltrans', 'sp_dropmergearticle', 'sp_restoredbreplication', 'sp_dropmergefilter', + 'sp_revoke_publication_access', 'sp_scriptsubconflicttable', 'sp_dropmergepublication', 'sp_script_synctran_commands', + 'sp_dropmergepullsubscription', 'sp_setreplfailovermode', 'sp_showrowreplicainfo', 'sp_dropmergesubscription', + 'sp_subscription_cleanup', 'sp_droppublication', 'sp_table_validation', 'sp_droppullsubscription', + 'sp_update_agent_profile', 'sp_dropsubscriber', 'sp_validatemergepublication', 'sp_dropsubscription', + 'sp_validatemergesubscription', 'sp_dsninfo', 'sp_vupgrade_replication', 'sp_dumpparamcmd', + + //Security Procedures + 'sp_addalias', 'sp_droprolemember', 'sp_addapprole', 'sp_dropserver', 'sp_addgroup', 'sp_dropsrvrolemember', + 'sp_addlinkedsrvlogin', 'sp_dropuser', 'sp_addlogin', 'sp_grantdbaccess', 'sp_addremotelogin', + 'sp_grantlogin', 'sp_addrole', 'sp_helpdbfixedrole', 'sp_addrolemember', 'sp_helpgroup', + 'sp_addserver', 'sp_helplinkedsrvlogin', 'sp_addsrvrolemember', 'sp_helplogins', 'sp_adduser', + 'sp_helpntgroup', 'sp_approlepassword', 'sp_helpremotelogin', 'sp_changedbowner', 'sp_helprole', + 'sp_changegroup', 'sp_helprolemember', 'sp_changeobjectowner', 'sp_helprotect', 'sp_change_users_login', + 'sp_helpsrvrole', 'sp_dbfixedrolepermission', 'sp_helpsrvrolemember', 'sp_defaultdb', 'sp_helpuser', + 'sp_defaultlanguage', 'sp_MShasdbaccess', 'sp_denylogin', 'sp_password', 'sp_dropalias', 'sp_remoteoption', + 'sp_dropapprole', 'sp_revokedbaccess', 'sp_dropgroup', 'sp_revokelogin', 'sp_droplinkedsrvlogin', + 'sp_setapprole', 'sp_droplogin', 'sp_srvrolepermission', 'sp_dropremotelogin', 'sp_validatelogins', 'sp_droprole', + + //SQL Mail Procedures + 'sp_processmail', 'xp_sendmail', 'xp_deletemail', 'xp_startmail', 'xp_findnextmsg', 'xp_stopmail', 'xp_readmail', + + //SQL Profiler Procedures + 'sp_trace_create', 'sp_trace_setfilter', 'sp_trace_generateevent', 'sp_trace_setstatus', 'sp_trace_setevent', + + //SQL Server Agent Procedures + 'sp_add_alert', 'sp_help_jobhistory', 'sp_add_category', 'sp_help_jobschedule', 'sp_add_job', + 'sp_help_jobserver', 'sp_add_jobschedule', 'sp_help_jobstep', 'sp_add_jobserver', 'sp_help_notification', + 'sp_add_jobstep', 'sp_help_operator', 'sp_add_notification', 'sp_help_targetserver', + 'sp_add_operator', 'sp_help_targetservergroup', 'sp_add_targetservergroup', 'sp_helptask', + 'sp_add_targetsvrgrp_member', 'sp_manage_jobs_by_login', 'sp_addtask', 'sp_msx_defect', + 'sp_apply_job_to_targets', 'sp_msx_enlist', 'sp_delete_alert', 'sp_post_msx_operation', + 'sp_delete_category', 'sp_purgehistory', 'sp_delete_job', 'sp_purge_jobhistory', 'sp_delete_jobschedule', + 'sp_reassigntask', 'sp_delete_jobserver', 'sp_remove_job_from_targets', 'sp_delete_jobstep', + 'sp_resync_targetserver', 'sp_delete_notification', 'sp_start_job', 'sp_delete_operator', + 'sp_stop_job', 'sp_delete_targetserver', 'sp_update_alert', 'sp_delete_targetservergroup', + 'sp_update_category', 'sp_delete_targetsvrgrp_member', 'sp_update_job', 'sp_droptask', + 'sp_update_jobschedule', 'sp_help_alert', 'sp_update_jobstep', 'sp_help_category', + 'sp_update_notification', 'sp_help_downloadlist', 'sp_update_operator', 'sp_helphistory', + 'sp_update_targetservergroup', 'sp_help_job', 'sp_updatetask', 'xp_sqlagent_proxy_account', + + //System Procedures + 'sp_add_data_file_recover_suspect_db', 'sp_helpconstraint', 'sp_addextendedproc', + 'sp_helpdb', 'sp_addextendedproperty', 'sp_helpdevice', 'sp_add_log_file_recover_suspect_db', + 'sp_helpextendedproc', 'sp_addmessage', 'sp_helpfile', 'sp_addtype', 'sp_helpfilegroup', + 'sp_addumpdevice', 'sp_helpindex', 'sp_altermessage', 'sp_helplanguage', 'sp_autostats', + 'sp_helpserver', 'sp_attach_db', 'sp_helpsort', 'sp_attach_single_file_db', 'sp_helpstats', + 'sp_bindefault', 'sp_helptext', 'sp_bindrule', 'sp_helptrigger', 'sp_bindsession', + 'sp_indexoption', 'sp_certify_removable', 'sp_invalidate_textptr', 'sp_configure', + 'sp_lock', 'sp_create_removable', 'sp_monitor', 'sp_createstats', 'sp_procoption', + 'sp_cycle_errorlog', 'sp_recompile', 'sp_datatype_info', 'sp_refreshview', 'sp_dbcmptlevel', + 'sp_releaseapplock', 'sp_dboption', 'sp_rename', 'sp_dbremove', 'sp_renamedb', + 'sp_delete_backuphistory', 'sp_resetstatus', 'sp_depends', 'sp_serveroption', 'sp_detach_db', + 'sp_setnetname', 'sp_dropdevice', 'sp_settriggerorder', 'sp_dropextendedproc', 'sp_spaceused', + 'sp_dropextendedproperty', 'sp_tableoption', 'sp_dropmessage', 'sp_unbindefault', 'sp_droptype', + 'sp_unbindrule', 'sp_executesql', 'sp_updateextendedproperty', 'sp_getapplock', 'sp_updatestats', + 'sp_getbindtoken', 'sp_validname', 'sp_help', 'sp_who', + + //Web Assistant Procedures + 'sp_dropwebtask', 'sp_makewebtask', 'sp_enumcodepages', 'sp_runwebtask', + + //XML Procedures + 'sp_xml_preparedocument', 'sp_xml_removedocument', + + //General Extended Procedures + 'xp_cmdshellxp_logininfo', 'xp_enumgroups', 'xp_msver', 'xp_findnextmsgxp_revokelogin', + 'xp_grantlogin', 'xp_sprintf', 'xp_logevent', 'xp_sqlmaint', 'xp_loginconfig', 'xp_sscanf', + + //API System Stored Procedures + 'sp_cursor', 'sp_cursorclose', 'sp_cursorexecute', 'sp_cursorfetch', 'sp_cursoropen', + 'sp_cursoroption', 'sp_cursorprepare', 'sp_cursorunprepare', 'sp_execute', 'sp_prepare', 'sp_unprepare', + + //Misc + 'sp_createorphan', 'sp_droporphans', 'sp_reset_connection', 'sp_sdidebug' + ), + 4 => array( + //Function/sp's higlighted brown. + 'fn_helpcollations', 'fn_listextendedproperty ', 'fn_servershareddrives', + 'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo', + 'fn_trace_gettable', 'fn_virtualfilestats', + ), + ), + 'SYMBOLS' => array( + '!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=', + '<=>', '<>', '=', '>', '>=', '>>', '^', 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', + 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL', 'OR', 'OUTER', 'SOME', '|', '||', '~' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #FF00FF;', + 3 => 'color: #AF0000;', + 4 => 'color: #AF0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008080;', + 'MULTI' => 'color: #008080;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #808080;' + ), + 'STRINGS' => array( + 0 => 'color: #FF0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #808080;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/vb.php b/ehcp/net2ftp/plugins/geshi/geshi/vb.php new file mode 100644 index 0000000..bbea101 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/vb.php @@ -0,0 +1,148 @@ + 'Visual Basic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'as', 'err', 'boolean', 'and', 'or', 'recordset', 'unload', 'to', + 'integer','long','single','new','database','nothing','set','close', + 'open','print','split','line','field','querydef','instrrev', + 'abs','array','asc','ascb','ascw','atn','avg','me', + 'cbool','cbyte','ccur','cdate','cdbl','cdec','choose','chr','chrb','chrw','cint','clng', + 'command','cos','count','createobject','csng','cstr','curdir','cvar','cvdate','cverr', + 'date','dateadd','datediff','datepart','dateserial','datevalue','day','ddb','dir','doevents', + 'environ','eof','error','exp', + 'fileattr','filedatetime','filelen','fix','format','freefile','fv', + 'getallstrings','getattr','getautoserversettings','getobject','getsetting', + 'hex','hour','iif','imestatus','input','inputb','inputbox','instr','instb','int','ipmt', + 'isarray','isdate','isempty','iserror','ismissing','isnull','isnumeric','isobject', + 'lbound','lcase','left','leftb','len','lenb','loadpicture','loc','lof','log','ltrim', + 'max','mid','midb','min','minute','mirr','month','msgbox', + 'now','nper','npv','oct','partition','pmt','ppmt','pv','qbcolor', + 'rate','rgb','right','rightb','rnd','rtrim', + 'second','seek','sgn','shell','sin','sln','space','spc','sqr','stdev','stdevp','str', + 'strcomp','strconv','string','switch','sum','syd', + 'tab','tan','time','timer','timeserial','timevalue','trim','typename', + 'ubound','ucase','val','var','varp','vartype','weekday','year', + 'appactivate','base','beep','call','case','chdir','chdrive','const', + 'declare','defbool','defbyte','defcur','defdate','defdbl','defdec','defint', + 'deflng','defobj','defsng','defstr','deftype','defvar','deletesetting','dim','do', + 'else','elseif','end','enum','erase','event','exit','explicit', + 'false','filecopy','for','foreach','friend','function','get','gosub','goto', + 'if','implements','kill','let','lineinput','lock','loop','lset','mkdir','name','next','not', + 'onerror','on','option','private','property','public','put','raiseevent','randomize', + 'redim','rem','reset','resume','return','rmdir','rset', + 'savepicture','savesetting','sendkeys','setattr','static','sub', + 'then','true','type','unlock','wend','while','width','with','write', + 'vbabort','vbabortretryignore','vbapplicationmodal','vbarray', + 'vbbinarycompare','vbblack','vbblue','vbboolean','vbbyte','vbcancel', + 'vbcr','vbcritical','vbcrlf','vbcurrency','vbcyan','vbdataobject', + 'vbdate','vbdecimal','vbdefaultbutton1','vbdefaultbutton2', + 'vbdefaultbutton3','vbdefaultbutton4','vbdouble','vbempty', + 'vberror','vbexclamation','vbfirstfourdays','vbfirstfullweek', + 'vbfirstjan1','vbformfeed','vbfriday','vbgeneraldate','vbgreen', + 'vbignore','vbinformation','vbinteger','vblf','vblong','vblongdate', + 'vblongtime','vbmagenta','vbmonday','vbnewline','vbno','vbnull', + 'vbnullchar','vbnullstring','vbobject','vbobjecterror','vbok','vbokcancel', + 'vbokonly','vbquestion','vbred','vbretry','vbretrycancel','vbsaturday', + 'vbshortdate','vbshorttime','vbsingle','vbstring','vbsunday', + 'vbsystemmodal','vbtab','vbtextcompare','vbthursday','vbtuesday', + 'vbusesystem','vbusesystemdayofweek','vbvariant','vbverticaltab', + 'vbwednesday','vbwhite','vbyellow','vbyes','vbyesno','vbyesnocancel', + 'vbnormal','vbdirectory' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/vbnet.php b/ehcp/net2ftp/plugins/geshi/geshi/vbnet.php new file mode 100644 index 0000000..c417fee --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/vbnet.php @@ -0,0 +1,197 @@ + 'vb.net', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + '3DDKSHADOW', '3DHIGHLIGHT', '3DLIGHT', 'ABORT', 'ABORTRETRYIGNORE', 'ACTIVEBORDER', + 'ACTIVETITLEBAR', 'ALIAS', 'APPLICATIONMODAL', 'APPLICATIONWORKSPACE', 'ARCHIVE', + 'BACK', 'BINARYCOMPARE', 'BLACK', 'BLUE', 'BUTTONFACE', 'BUTTONSHADOW', 'BUTTONTEXT', + 'CANCEL', 'CDROM', 'CR', 'CRITICAL', 'CRLF', 'CYAN', 'DEFAULT', 'DEFAULTBUTTON1', + 'DEFAULTBUTTON2', 'DEFAULTBUTTON3', 'DESKTOP', 'DIRECTORY', 'EXCLAMATION', 'FALSE', + 'FIXED', 'FORAPPENDING', 'FORMFEED', 'FORREADING', 'FORWRITING', 'FROMUNICODE', + 'GRAYTEXT', 'GREEN', 'HIDDEN', 'HIDE', 'HIGHLIGHT', 'HIGHLIGHTTEXT', 'HIRAGANA', + 'IGNORE', 'INACTIVEBORDER', 'INACTIVECAPTIONTEXT', 'INACTIVETITLEBAR', 'INFOBACKGROUND', + 'INFORMATION', 'INFOTEXT', 'KATAKANALF', 'LOWERCASE', 'MAGENTA', 'MAXIMIZEDFOCUS', + 'MENUBAR', 'MENUTEXT', 'METHOD', 'MINIMIZEDFOCUS', 'MINIMIZEDNOFOCUS', 'MSGBOXRIGHT', + 'MSGBOXRTLREADING', 'MSGBOXSETFOREGROUND', 'NARROW', 'NEWLINE', 'NO', 'NORMAL', + 'NORMALFOCUS', 'NORMALNOFOCUS', 'NULLSTRING', 'OBJECTERROR', 'OK', 'OKCANCEL', 'OKONLY', + 'PROPERCASE', 'QUESTION', 'RAMDISK', 'READONLY', 'RED', 'REMOTE', 'REMOVABLE', 'RETRY', + 'RETRYCANCEL', 'SCROLLBARS', 'SYSTEMFOLDER', 'SYSTEMMODAL', 'TAB', 'TEMPORARYFOLDER', + 'TEXTCOMPARE', 'TITLEBARTEXT', 'TRUE', 'UNICODE', 'UNKNOWN', 'UPPERCASE', 'VERTICALTAB', + 'VOLUME', 'WHITE', 'WIDE', 'WIN16', 'WIN32', 'WINDOWBACKGROUND', 'WINDOWFRAME', + 'WINDOWSFOLDER', 'WINDOWTEXT', 'YELLOW', 'YES', 'YESNO', 'YESNOCANCEL' + ), + 2 => array( + 'AndAlso', 'As', 'ADDHANDLER', 'ASSEMBLY', 'AUTO', 'Binary', 'ByRef', 'ByVal', 'BEGINEPILOGUE', + 'Else', 'ElseIf', 'Empty', 'Error', 'ENDPROLOGUE', 'EXTERNALSOURCE', 'ENVIRON', 'For', + 'Friend', 'GET', 'HANDLES', 'Input', 'Is', 'IsNot', 'Len', 'Lock', 'Me', 'Mid', 'MUSTINHERIT', + 'MYBASE', 'MYCLASS', 'New', 'Next', 'Nothing', 'Null', 'NOTINHERITABLE', + 'NOTOVERRIDABLE', 'OFF', 'On', 'Option', 'Optional', 'Overloads', 'OVERRIDABLE', 'ParamArray', + 'Print', 'Private', 'Property', 'Public', 'Resume', 'Return', 'Seek', 'Static', 'Step', + 'String', 'SHELL', 'SENDKEYS', 'SET', 'Shared', 'Then', 'Time', 'To', 'THROW', 'WithEvents' + ), + 3 => array( + 'COLLECTION', 'DEBUG', 'DICTIONARY', 'DRIVE', 'DRIVES', 'ERR', 'FILE', 'FILES', + 'FILESYSTEMOBJECT', 'FOLDER', 'FOLDERS', 'TEXTSTREAM' + ), + 4 => array( + 'BOOLEAN', 'BYTE', 'DATE', 'DECIMIAL', 'DOUBLE', 'INTEGER', 'LONG', 'OBJECT', + 'SINGLE STRING' + ), + 5 => array( + 'ADDRESSOF', 'AND', 'BITAND', 'BITNOT', 'BITOR', 'BITXOR', + 'GETTYPE', 'LIKE', 'MOD', 'NOT', 'ORXOR' + ), + 6 => array( + 'APPACTIVATE', 'BEEP', 'CALL', 'CHDIR', 'CHDRIVE', 'CLASS', 'CASE', 'CATCH', 'CONST', + 'DECLARE', 'DELEGATE', 'DELETESETTING', 'DIM', 'DO', 'DOEVENTS', 'END', 'ENUM', + 'EVENT', 'EXIT', 'EACH', 'FUNCTION', 'FINALLY', 'IF', 'IMPORTS', 'INHERITS', + 'INTERFACE', 'IMPLEMENTS', 'KILL', 'LOOP', 'MIDB', 'NAMESPACE', 'OPEN', 'PUT', + 'RAISEEVENT', 'RANDOMIZE', 'REDIM', 'REM', 'RESET', 'SAVESETTING', 'SELECT', + 'SETATTR', 'STOP', 'SUB', 'SYNCLOCK', 'STRUCTURE', 'SHADOWS', 'SWITCH', + 'TIMEOFDAY', 'TODAY', 'TRY', 'WIDTH', 'WITH', 'WRITE', 'WHILE' + ), + 7 => array( + 'ABS', 'ARRAY', 'ASC', 'ASCB', 'ASCW', 'CALLBYNAME', 'CBOOL', 'CBYTE', 'CCHAR', + 'CCHR', 'CDATE', 'CDBL', 'CDEC', 'CHOOSE', 'CHR', 'CHR$', 'CHRB', 'CHRB$', 'CHRW', + 'CINT', 'CLNG', 'CLNG8', 'CLOSE', 'COBJ', 'COMMAND', 'COMMAND$', 'CONVERSION', + 'COS', 'CREATEOBJECT', 'CSHORT', 'CSTR', 'CURDIR', 'CTYPE', 'CVDATE', 'DATEADD', + 'DATEDIFF', 'DATEPART', 'DATESERIAL', 'DATEVALUE', 'DAY', 'DDB', 'DIR', 'DIR$', + 'EOF', 'ERROR$', 'EXP', 'FILEATTR', 'FILECOPY', 'FILEDATATIME', 'FILELEN', 'FILTER', + 'FIX', 'FORMAT', 'FORMAT$', 'FORMATCURRENCY', 'FORMATDATETIME', 'FORMATNUMBER', + 'FORMATPERCENT', 'FREEFILE', 'FV', 'GETALLSETTINGS', 'GETATTRGETOBJECT', 'GETSETTING', + 'HEX', 'HEX$', 'HOUR', 'IIF', 'IMESTATUS', 'INPUT$', 'INPUTB', 'INPUTB$', 'INPUTBOX', + 'INSTR', 'INSTRB', 'INSTRREV', 'INT', 'IPMT', 'IRR', 'ISARRAY', 'ISDATE', 'ISEMPTY', + 'ISERROR', 'ISNULL', 'ISNUMERIC', 'ISOBJECT', 'JOIN', 'LBOUND', 'LCASE', 'LCASE$', + 'LEFT', 'LEFT$', 'LEFTB', 'LEFTB$', 'LENB', 'LINEINPUT', 'LOC', 'LOF', 'LOG', 'LTRIM', + 'LTRIM$', 'MID$', 'MIDB', 'MIDB$', 'MINUTE', 'MIRR', 'MKDIR', 'MONTH', 'MONTHNAME', + 'MSGBOX', 'NOW', 'NPER', 'NPV', 'OCT', 'OCT$', 'PARTITION', 'PMT', 'PPMT', 'PV', + 'RATE', 'REPLACE', 'RIGHT', 'RIGHT$', 'RIGHTB', 'RIGHTB$', 'RMDIR', 'RND', 'RTRIM', + 'RTRIM$', 'SECOND', 'SIN', 'SLN', 'SPACE', 'SPACE$', 'SPC', 'SPLIT', 'SQRT', 'STR', 'STR$', + 'STRCOMP', 'STRCONV', 'STRING$', 'STRREVERSE', 'SYD', 'TAB', 'TAN', 'TIMEOFDAY', + 'TIMER', 'TIMESERIAL', 'TIMEVALUE', 'TODAY', 'TRIM', 'TRIM$', 'TYPENAME', 'UBOUND', + 'UCASE', 'UCASE$', 'VAL', 'WEEKDAY', 'WEEKDAYNAME', 'YEAR' + ), + 8 => array( + 'ANY', 'ATN', 'CALENDAR', 'CIRCLE', 'CURRENCY', 'DEFBOOL', 'DEFBYTE', 'DEFCUR', + 'DEFDATE', 'DEFDBL', 'DEFDEC', 'DEFINT', 'DEFLNG', 'DEFOBJ', 'DEFSNG', 'DEFSTR', + 'DEFVAR', 'EQV', 'GOSUB', 'IMP', 'INITIALIZE', 'ISMISSING', 'LET', 'LINE', 'LSET', + 'RSET', 'SGN', 'SQR', 'TERMINATE', 'VARIANT', 'VARTYPE', 'WEND' + ), + ), + 'SYMBOLS' => array( + '&', '&=', '*', '*=', '+', '+=', '-', '-=', '//', '/', '/=', '=', '\\', '\\=', + '^', '^=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', //Constants + 2 => 'color: #FF8000;', //Keywords + 3 => 'color: #008000;', //Data Types + 4 => 'color: #FF0000;', //Objects + 5 => 'color: #804040;', //Operators + 6 => 'color: #0600FF;', //Statements + 7 => 'color: #0600FF;', //Functions + 8 => 'color: #0600FF;' //Deprecated + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?q={FNAME}+msdn.microsoft.com', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 =>'.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/vhdl.php b/ehcp/net2ftp/plugins/geshi/geshi/vhdl.php new file mode 100644 index 0000000..47d1eb7 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/vhdl.php @@ -0,0 +1,138 @@ + 'VHDL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*keywords*/ + 1 => array( + 'access','after','alias','all','assert','architecture','begin', + 'block','body','buffer','bus','case','component','configuration','constant', + 'disconnect','downto','else','elsif','end','entity','exit','file','for', + 'function','generate','generic','group','guarded','if','impure','in', + 'inertial','inout','is','label','library','linkage','literal','loop', + 'map','new','next','null','of','on','open','others','out','package', + 'port','postponed','procedure','process','pure','range','record','register', + 'reject','report','return','select','severity','signal','shared','subtype', + 'then','to','transport','type','unaffected','units','until','use','variable', + 'wait','when','while','with','note','warning','error','failure','and', + 'or','xor','not','nor' + ), + /*types*/ + 2 => array( + 'bit','bit_vector','character','boolean','integer','real','time','string', + 'severity_level','positive','natural','signed','unsigned','line','text', + 'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state', + 'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength', + 'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector' + ), + /*operators*/ + 3 => array( + '=','<=',':=','=>','==' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')',';','<','>',':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #aa0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;', + 2 => 'color: #ff0000;', + 3 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '(\b(0x)[0-9a-fA-F]{2,}[hH]?|\b(0x)?[0-9a-fA-F]{2,}[hH])|'. + '(\b[0-9]{1,}((\.){1}[0-9]{1,}){0,1}(E)[\-]{0,1}[0-9]{1,})|'. + '(\b(ns))|'. + "('[0-9a-zA-Z]+)", + 1 => "\b(''[0-9]'')" + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/visualfoxpro.php b/ehcp/net2ftp/plugins/geshi/geshi/visualfoxpro.php new file mode 100644 index 0000000..7265342 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/visualfoxpro.php @@ -0,0 +1,442 @@ + 'Visual Fox Pro', + 'COMMENT_SINGLE' => array(1 => "//", 2 => "\n*"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array('Case', 'Else', '#Else', 'Then', + 'Endcase', 'Enddefine', 'Enddo', 'Endfor', 'Endfunc', 'Endif', 'Endprintjob', + 'Endproc', 'Endscan', 'Endtext', 'Endwith', '#Endif', + '#Elif','#Else','#Endif','#Define','#If','#Include', + '#Itsexpression','#Readclauses','#Region','#Section','#Undef','#Wname', + 'Case','Define','Do','Else','Endcase','Enddefine', + 'Enddo','Endfor','Endfunc','Endif','Endprintjob','Endproc', + 'Endscan','Endtext','Endwith','For','Function','Hidden', + 'If','Local','Lparameter','Lparameters','Next','Otherwise', + 'Parameters','Printjob','Procedure','Protected','Public','Scan', + 'Text','Then','While','With','?','??', + '???','Abs','Accept','Access','Aclass','Acopy', + 'Acos','Adatabases','Adbobjects','Addbs','Addrelationtoenv','Addtabletoenv', + 'Adel','Adir','Aelement','Aerror','Afields','Afont', + 'Agetclass','Agetfileversion','Ains','Ainstance','Alen','Align', + 'Alines','Alltrim','Alter','Amembers','Amouseobj','Anetresources', + 'Ansitooem','Append','Aprinters','Ascan','Aselobj','Asin', + 'Asort','Assert','Asserts','Assist','Asubscript','Asynchronous', + 'At_c','Atan','Atc','Atcc','Atcline','Atline', + 'Atn2','Aused','Autoform','Autoreport','Avcxclasses','Average', + 'BarCount','BarPrompt','BatchMode','BatchUpdateCount','Begin','BellSound', + 'BinToC','Bintoc','Bitand','Bitclear','Bitlshift','Bitnot', + 'Bitor','Bitrshift','Bitset','Bittest','Bitxor','Bof', + 'Browse','BrowseRefresh','Buffering','BuilderLock','COMArray','COMReturnError', + 'CToBin','Calculate','Call','Capslock','Cd','Cdow', + 'Ceiling','Central','Change','Char','Chdir','Chr', + 'Chrsaw','Chrtran','Chrtranc','Close','Cmonth','Cntbar', + 'Cntpad','Col','Comclassinfo','CommandTargetQuery','Compile','Completed', + 'Compobj','Compute','Concat','ConnectBusy','ConnectHandle','ConnectName', + 'ConnectString','ConnectTimeOut','ContainerReleaseType','Continue','Copy','Cos', + 'Cot','Count','Coverage','Cpconvert','Cpcurrent','Cpdbf', + 'Cpnotrans','Create','CreateBinary','Createobject','Createobjectex','Createoffline', + 'CrsBuffering','CrsFetchMemo','CrsFetchSize','CrsMaxRows','CrsMethodUsed','CrsNumBatch', + 'CrsShareConnection','CrsUseMemoSize','CrsWhereClause','Ctobin','Ctod','Ctot', + 'Curdate','Curdir','CurrLeft','CurrSymbol','CursorGetProp','CursorSetProp', + 'Curtime','Curval','DBGetProp','DBSetProp','DB_BufLockRow','DB_BufLockTable', + 'DB_BufOff','DB_BufOptRow','DB_BufOptTable','DB_Complette','DB_DeleteInsert','DB_KeyAndModified', + 'DB_KeyAndTimestamp','DB_KeyAndUpdatable','DB_LocalSQL','DB_NoPrompt','DB_Prompt','DB_RemoteSQL', + 'DB_TransAuto','DB_TransManual','DB_TransNone','DB_Update','Datetime','Day', + 'Dayname','Dayofmonth','Dayofweek','Dayofyear','Dbalias','Dbused', + 'Ddeaborttrans','Ddeadvise','Ddeenabled','Ddeexecute','Ddeinitiate','Ddelasterror', + 'Ddepoke','Dderequest','Ddesetoption','Ddesetservice','Ddesettopic','Ddeterminate', + 'Debugout','Declare','DefOLELCid','DefaultValue','Defaultext','Degrees', + 'DeleteTrigger','Desc','Description','Difference','Dimension','Dir', + 'Directory','Diskspace','DispLogin','DispWarnings','Display','Dll', + 'Dmy','DoDefault','DoEvents','Doc','Doevents','Dow', + 'Drivetype','Drop','Dropoffline','Dtoc','Dtor','Dtos', + 'Dtot','DynamicInputMask','Each','Edit','Eject','Elif', + 'End','Eof','Erase','Evaluate','Event','Eventtracking', + 'Exclude','Exclusive','Exit','Exp','Export','External', + 'FDate','FTime','Fchsize','Fclose','Fcount','Fcreate', + 'Feof','Ferror','FetchMemo','FetchSize','Fflush','Fgets', + 'Filer','Filetostr','Find','Fklabel','Fkmax','Fldlist', + 'Flock','Floor','Flush','Fontmetric','Fopen','Forceext', + 'Forcepath','FormSetClass','FormSetLib','FormsClass','FormsLib','Found', + 'FoxPro','Foxcode','Foxdoc','Foxgen','Foxgraph','Foxview', + 'Fputs','Fread','French','Fseek','Fsize','Fv', + 'Fwrite','Gather','German','GetPem','Getbar','Getcolor', + 'Getcp','Getdir','Getenv','Getexpr','Getfile','Getfldstate', + 'Getfont','Gethost','Getnextmodified','Getobject','Getpad','Getpict', + 'Getprinter','Go','Gomonth','Goto','Graph','GridHorz', + 'GridShow','GridShowPos','GridSnap','GridVert','Help','HelpOn', + 'HelpTo','HighLightRow','Home','Hour','IMEStatus','IdleTimeOut', + 'Idxcollate','Ifdef','Ifndef','Iif','Import','Include', + 'Indbc','Index','Indexseek','Inkey','Inlist','Input', + 'Insert','InsertTrigger','Insmode','IsBlank','IsFLocked','IsLeadByte', + 'IsMouse','IsNull','IsRLocked','Isalpha','Iscolor','Isdigit', + 'Isexclusive','Isflocked','Ishosted','Islower','Isreadonly','Isrlocked', + 'Isupper','Italian','Japan','Join','Justdrive','Justext', + 'Justfname','Justpath','Juststem','KeyField','KeyFieldList','Keyboard' + ), + 2 => array('Keymatch','LastProject','Lastkey','Lcase','Leftc','Len', + 'Lenc','Length','Likec','Lineno','LoadPicture','Loadpicture', + 'Locate','Locfile','Log','Log10','Logout','Lookup', + 'Loop','Lower','Ltrim','Lupdate','Mail','MaxRecords', + 'Mcol','Md','Mdown','Mdx','Mdy','Memlines', + 'Menu','Messagebox','Minute','Mkdir','Mline','Modify', + 'Month','Monthname','Mouse','Mrkbar','Mrkpad','Mrow', + 'Mtdll','Mton','Mwindow','Native','Ndx','Network', + 'NoFilter','Nodefault','Normalize','Note','Now','Ntom', + 'NullString','Numlock','Nvl','ODBChdbc','ODBChstmt','OLEDropTextInsertion', + 'OLELCid','Objnum','Objref','Objtoclient','Objvar','Occurs', + 'Oemtoansi','Oldval','OlePublic','Olereturnerror','On','Open', + 'Oracle','Order','Os','Outer','PCount','Pack', + 'PacketSize','Padc','Padl','Padr','Payment','Pcol', + 'PemStatus','Pi','Pivot','Play','Pop','Popup', + 'Power','PrimaryKey','Printstatus','Private','Prmbar','Prmpad', + 'ProjectClick','Proper','Prow','Prtinfo','Push','Putfile', + 'Pv','Qpr','Quater','QueryTimeOut','Quit','Radians', + 'Rand','Rat','Ratc','Ratline','Rd','Rdlevel', + 'Read','Readkey','Recall','Reccount','RecentlyUsedFiles','Recno', + 'Recsize','Regional','Reindex','RelatedChild','RelatedTable','RelatedTag', + 'Remove','Rename','Repeat','Replace','Replicate','Report', + 'ResHeight','ResWidth','ResourceOn','ResourceTo','Resources','Restore', + 'Resume','Retry','Return','Revertoffline','Rgbscheme','Rightc', + 'Rlock','Rmdir','Rollback','Round','Rtod','Rtrim', + 'RuleExpression','RuleText','Run','Runscript','Rview','SQLAsynchronous', + 'SQLBatchMode','SQLCancel','SQLColumns','SQLConnect','SQLConnectTimeOut','SQLDisconnect', + 'SQLDispLogin','SQLDispWarnings','SQLExec','SQLGetProp','SQLIdleTimeOut','SQLMoreResults', + 'SQLPrepare','SQLQueryTimeOut','SQLSetProp','SQLTables','SQLTransactions','SQLWaitTime', + 'Save','SavePicture','Savepicture','ScaleUnits','Scatter','Scols', + 'Scroll','Sec','Second','Seek','Select','SendUpdates', + 'Set','SetDefault','Setfldstate','Setup','ShareConnection','ShowOLEControls', + 'ShowOLEInsertable','ShowVCXs','Sign','Sin','Size','SizeBox', + 'Skpbar','Skppad','Sort','Soundex','SourceName','Sqlcommit', + 'Sqll','Sqlrollback','Sqlstringconnect','Sqrt','Srows','StatusBar', + 'Store','Str','Strconv','Strtofile','Strtran','Stuff', + 'Stuffc','Substr','Substrc','Substring','Sum','Suspend', + 'Sys','Sysmetric','TabOrdering','Table','TableRefresh','Tablerevert', + 'Tableupdate','TagCount','TagNo','Tan','Target','This', + 'Thisform','Thisformset','Timestamp','Timestampdiff','Total','Transactions', + 'Transform','Trim','Truncate','Ttoc','Ttod','Txnlevel', + 'Txtwidth','Type','Ucase','Undefine','Unlock','Unpack', + 'Updatable','UpdatableFieldList','Update','UpdateName','UpdateNameList','UpdateTrigger', + 'UpdateType','Updated','Upper','Upsizing','Usa','Use', + 'UseMemoSize','Used','Val','Validate','Varread','Vartype', + 'Version','VersionLanguage','Wait','WaitTime','Wborder','Wchild', + 'Wcols','Week','Wexist','Wfont','WhereType','Windcmd', + 'Windhelp','Windmemo','Windmenu','Windmodify','Windquery','Windscreen', + 'Windsnip','Windstproc','WizardPrompt','Wlast','Wlcol','Wlrow', + 'Wmaximum','Wminimum','Wontop','Woutput','Wparent','Wread', + 'Wrows','Wtitle','Wvisible','Year','Zap','_Alignment', + '_Asciicols','_Asciirows','_Assist','_Beautify','_Box','_Browser', + '_Builder','_Calcmem','_Calcvalue','_Cliptext','_Converter','_Coverage', + '_Curobj','_Dblclick','_Diarydate','_Dos','_Foxdoc','_Foxgraph', + '_Gallery','_Gengraph','_Genhtml','_Genmenu','_Genpd','_Genscrn', + '_Genxtab','_Getexpr','_Include','_Indent','_Lmargin','_Mac', + '_Mbr_appnd','_Mbr_cpart','_Mbr_delet','_Mbr_font','_Mbr_goto','_Mbr_grid', + '_Mbr_link','_Mbr_mode','_Mbr_mvfld','_Mbr_mvprt','_Mbr_seek','_Mbr_sp100', + '_Mbr_sp200','_Mbr_szfld','_Mbrowse','_Mda_appnd','_Mda_avg','_Mda_brow', + '_Mda_calc','_Mda_copy','_Mda_count','_Mda_label','_Mda_pack','_Mda_reprt', + '_Mda_rindx','_Mda_setup','_Mda_sort','_Mda_sp100','_Mda_sp200','_Mda_sp300', + '_Mda_sum','_Mda_total','_Mdata','_Mdiary','_Med_clear','_Med_copy', + '_Med_cut','_Med_cvtst','_Med_find','_Med_finda','_Med_goto','_Med_insob', + '_Med_link','_Med_obj','_Med_paste','_Med_pref','_Med_pstlk','_Med_redo', + '_Med_repl','_Med_repla','_Med_slcta','_Med_sp100','_Med_sp200','_Med_sp300', + '_Med_sp400','_Med_sp500','_Med_undo','_Medit','_Mfi_clall','_Mfi_close', + '_Mfi_export','_Mfi_import','_Mfi_new','_Mfi_open','_Mfi_pgset','_Mfi_prevu', + '_Mfi_print','_Mfi_quit','_Mfi_revrt','_Mfi_savas','_Mfi_save','_Mfi_send', + '_Mfi_setup','_Mfi_sp100','_Mfi_sp200','_Mfi_sp300','_Mfi_sp400','_Mfile', + '_Mfiler','_Mfirst','_Mlabel','_Mlast','_Mline','_Mmacro', + '_Mmbldr','_Mpr_beaut','_Mpr_cancl','_Mpr_compl','_Mpr_do','_Mpr_docum', + '_Mpr_formwz','_Mpr_gener','_Mpr_graph','_Mpr_resum','_Mpr_sp100','_Mpr_sp200', + '_Mpr_sp300','_Mpr_suspend','_Mprog','_Mproj','_Mrc_appnd','_Mrc_chnge', + '_Mrc_cont','_Mrc_delet','_Mrc_goto','_Mrc_locat','_Mrc_recal','_Mrc_repl', + '_Mrc_seek','_Mrc_sp100','_Mrc_sp200','_Mrecord','_Mreport','_Mrqbe', + '_Mscreen','_Msm_data','_Msm_edit','_Msm_file','_Msm_format','_Msm_prog', + '_Msm_recrd','_Msm_systm','_Msm_text','_Msm_tools','_Msm_view','_Msm_windo', + '_Mst_about','_Mst_ascii','_Mst_calcu','_Mst_captr','_Mst_dbase','_Mst_diary', + '_Mst_filer','_Mst_help','_Mst_hphow','_Mst_hpsch','_Mst_macro','_Mst_office', + '_Mst_puzzl','_Mst_sp100','_Mst_sp200','_Mst_sp300','_Mst_specl','_Msysmenu', + '_Msystem','_Mtable','_Mtb_appnd','_Mtb_cpart','_Mtb_delet','_Mtb_delrc', + '_Mtb_goto','_Mtb_link','_Mtb_mvfld','_Mtb_mvprt','_Mtb_props','_Mtb_recal', + '_Mtb_sp100','_Mtb_sp200','_Mtb_sp300','_Mtb_sp400','_Mtb_szfld','_Mwi_arran', + '_Mwi_clear','_Mwi_cmd','_Mwi_color','_Mwi_debug','_Mwi_hide','_Mwi_hidea', + '_Mwi_min','_Mwi_move','_Mwi_rotat','_Mwi_showa','_Mwi_size','_Mwi_sp100', + '_Mwi_sp200','_Mwi_toolb','_Mwi_trace','_Mwi_view','_Mwi_zoom','_Mwindow', + '_Mwizards','_Mwz_all','_Mwz_form','_Mwz_foxdoc','_Mwz_import','_Mwz_label', + '_Mwz_mail','_Mwz_pivot','_Mwz_query','_Mwz_reprt','_Mwz_setup','_Mwz_table', + '_Mwz_upsizing','_Netware','_Oracle','_Padvance','_Pageno','_Pbpage', + '_Pcolno','_Pcopies','_Pdparms','_Pdriver','_Pdsetup','_Pecode', + '_Peject','_Pepage','_Pform','_Plength','_Plineno','_Ploffset', + '_Ppitch','_Pquality','_Pretext','_Pscode','_Pspacing','_Pwait', + '_Rmargin','_Runactivedoc','_Samples','_Screen','_Shell','_Spellchk', + '_Sqlserver','_Startup','_Tabs','_Tally','_Text','_Throttle', + '_Transport','_Triggerlevel','_Unix','_WebDevOnly','_WebMenu','_WebMsftHomePage', + '_WebVFPHomePage','_WebVfpOnlineSupport','_Windows','_Wizard','_Wrap','_scctext', + '_vfp','Additive','After','Again','Aindent','Alignright', + 'All','Alt','Alternate','And','Ansi','Any', + 'Aplabout','App','Array','As','Asc','Ascending', + 'Ascii','At','Attributes','Automatic','Autosave','Avg', + 'Bar','Before','Bell','Between','Bitmap','Blank', + 'Blink','Blocksize','Border','Bottom','Brstatus','Bucket', + 'Buffers','By','Candidate','Carry','Cascade','Catalog', + 'Cdx','Center','Century','Cga','Character','Check', + 'Classlib','Clock','Cnt','Codepage','Collate','Color', + 'Com1','Com2','Command','Compact','Compatible','Compress', + 'Confirm','Connection','Connections','Connstring','Console','Copies', + 'Cpcompile','Cpdialog','Csv','Currency','Cycle','Databases', + 'Datasource','Date','Db4','Dbc','Dbf','Dbmemo3', + 'Debug','Decimals','Defaultsource','Deletetables','Delimited','Delimiters', + 'Descending','Design','Development','Device','Dif','Disabled', + 'Distinct','Dlls','Dohistory','Dos','Dosmem','Double', + 'Driver','Duplex','Echo','Editwork','Ega25','Ega43', + 'Ems','Ems64','Encrypt','Encryption','Environment','Escape', + 'Events','Exact','Except','Exe','Exists','Expression', + 'Extended','F','Fdow','Fetch','Field','Fields', + 'File','Files','Fill','Fixed','Float','Foldconst', + 'Font','Footer','Force','Foreign','Fox2x','Foxplus', + 'Free','Freeze','From','Fullpath','Fw2','Fweek', + 'Get','Gets','Global','Group','Grow','Halfheight', + 'Having','Heading','Headings','Helpfilter','History','Hmemory', + 'Hours','Id','In','Indexes','Information','Instruct', + 'Int','Integer','Intensity','Intersect','Into','Is', + 'Isometric','Key','Keycolumns','Keycomp','Keyset','Last', + 'Ledit','Level','Library','Like','Linked','Lock', + 'Logerrors','Long','Lpartition','Mac','Macdesktop','Machelp', + 'Mackey','Macros','Mark','Master','Max','Maxmem', + 'Mdi','Memlimit','Memory','Memos','Memowidth','Memvar', + 'Menus','Messages','Middle','Min','Minimize','Minus', + 'Mod','Modal','Module','Mono43','Movers','Multilocks', + 'Mvarsiz','Mvcount','N','Near','Negotiate','Noalias', + 'Noappend','Noclear','Noclose','Noconsole','Nocptrans','Nodata', + 'Nodebug','Nodelete','Nodup','Noedit','Noeject','Noenvironment', + 'Nofloat','Nofollow','Nogrow','Noinit','Nolgrid','Nolink', + 'Nolock','Nomargin','Nomdi','Nomenu','Nominimize','Nomodify' + ), + 3 => array('Nomouse','None','Nooptimize','Nooverwrite','Noprojecthook','Noprompt', + 'Noread','Norefresh','Norequery','Norgrid','Norm','Normal', + 'Nosave','Noshadow','Noshow','Nospace','Not','Notab', + 'Notify','Noupdate','Novalidate','Noverify','Nowait','Nowindow', + 'Nowrap','Nozoom','Npv','Null','Number','Objects', + 'Odometer','Of','Off','Oleobjects','Only','Optimize', + 'Or','Orientation','Output','Outshow','Overlay','Overwrite', + 'Pad','Palette','Paperlength','Papersize','Paperwidth','Password', + 'Path','Pattern','Pause','Pdox','Pdsetup','Pen', + 'Pfs','Pixels','Plain','Popups','Precision','Preference', + 'Preview','Primary','Printer','Printquality','Procedures','Production', + 'Program','Progwork','Project','Prompt','Query','Random', + 'Range','Readborder','Readerror','Record','Recover','Redit', + 'Reference','References','Relative','Remote','Reprocess','Resource', + 'Rest','Restrict','Rgb','Right','Row','Rowset', + 'Rpd','Runtime','Safety','Same','Sample','Say', + 'Scale','Scheme','Scoreboard','Screen','Sdf','Seconds', + 'Selection','Shadows','Shared','Sheet','Shell','Shift', + 'Shutdown','Single','Some','Sortwork','Space','Sql', + 'Standalone','Status','Std','Step','Sticky','String', + 'Structure','Subclass','Summary','Sylk','Sysformats','Sysmenus', + 'System','T','Tab','Tables','Talk','Tedit', + 'Textmerge','Time','Timeout','Titles','Tmpfiles','To', + 'Topic','Transaction','Trap','Trbetween','Trigger','Ttoption', + 'Typeahead','Udfparms','Union','Unique','Userid','Users', + 'Values','Var','Verb','Vga25','Vga50','Views', + 'Volume','Where','Windows','Wk1','Wk3','Wks', + 'Workarea','Wp','Wr1','Wrap','Wrk','Xcmdfile', + 'Xl5','Xl8','Xls','Y','Yresolution','Zoom', + 'Activate','ActivateCell','Add','AddColumn','AddItem','AddListItem', + 'AddObject','AddProperty','AddToSCC','AfterBuild','AfterCloseTables','AfterDock', + 'AfterRowColChange','BeforeBuild','BeforeDock','BeforeOpenTables','BeforeRowColChange','Box', + 'Build','CheckIn','CheckOut','Circle','Clear','ClearData', + 'Cleanup','Click','CloneObject','CloseEditor','CloseTables','Cls', + 'CommandTargetExec','CommandTargetQueryStas','ContainerRelease','DataToClip','DblClick','Deactivate', + 'Delete','DeleteColumn','Deleted','Destroy','DoCmd','Dock', + 'DoScroll','DoVerb','DownClick','Drag','DragDrop','DragOver', + 'DropDown','Draw','EnterFocus','Error','ErrorMessage','Eval', + 'ExitFocus','FormatChange','GetData','GetFormat','GetLatestVersion','GoBack', + 'GotFocus','GoForward','GridHitTest','Hide','HideDoc','IndexToItemId', + 'Init','InteractiveChange','Item','ItemIdToIndex','KeyPress','Line', + 'Load','LostFocus','Message','MiddleClick','MouseDown','MouseMove', + 'MouseUp','MouseWheel','Move','Moved','NavigateTo','Newobject', + 'OLECompleteDrag','OLEDrag','OLEDragDrop','OLEDragOver','OLEGiveFeedback','OLESetData', + 'OLEStartDrag','OpenEditor','OpenTables','Paint','Point','Print', + 'ProgrammaticChange','PSet','QueryAddFile','QueryModifyFile','QueryRemoveFile','QueryRunFile', + 'QueryUnload','RangeHigh','RangeLow','ReadActivate','ReadExpression','ReadDeactivate', + 'ReadMethod','ReadShow','ReadValid','ReadWhen','Refresh','Release', + 'RemoveFromSCC','RemoveItem','RemoveListItem','RemoveObject','Requery','RequestData', + 'Reset','ResetToDefault','Resize','RightClick','SaveAs','SaveAsClass', + 'Scrolled','SetAll','SetData','SetFocus','SetFormat','SetMain', + 'SetVar','SetViewPort','ShowDoc','ShowWhatsThis','TextHeight','TextWidth', + 'Timer','UIEnable','UnDock','UndoCheckOut','Unload','UpClick', + 'Valid','WhatsThisMode','When','WriteExpression','WriteMethod','ZOrder', + 'ATGetColors','ATListColors','Accelerate','ActiveColumn','ActiveControl','ActiveForm', + 'ActiveObjectId','ActivePage','ActiveProject','ActiveRow','AddLineFeeds','Alias', + 'Alignment','AllowAddNew','AllowHeaderSizing','AllowResize','AllowRowSizing','AllowTabs', + 'AlwaysOnTop','Application','AutoActivate','AutoCenter','AutoCloseTables','AutoIncrement', + 'AutoOpenTables','AutoRelease','AutoSize','AutoVerbMenu','AutoYield','AvailNum', + 'BackColor','BackStyle','BaseClass','BorderColor','BorderStyle','BorderWidth', + 'Bound','BoundColumn','BoundTo','BrowseAlignment','BrowseCellMarg','BrowseDestWidth', + 'BufferMode','BufferModeOverride','BuildDateTime','ButtonCount','ButtonIndex','Buttons', + 'CLSID','CanAccelerate','CanGetFocus','CanLoseFocus','Cancel','Caption', + 'ChildAlias','ChildOrder','Class','ClassLibrary','ClipControls','ClipRect', + 'Closable','ColorScheme','ColorSource','ColumnCount','ColumnHeaders','ColumnLines', + 'ColumnOrder','ColumnWidths','Columns','Comment','ContinuousScroll','ControlBox', + 'ControlCount','ControlIndex','ControlSource','Controls','CurrentControl','CurrentX', + 'CurrentY','CursorSource','Curvature','DataSession','DataSessionId','DataSourceObj', + 'DataType','Database','DateFormat','DateMark','DefButton','DefButtonOrig', + 'DefHeight','DefLeft','DefTop','DefWidth','Default','DefaultFilePath', + 'DefineWindows','DeleteMark','Desktop','Dirty','DisabledBackColor','DisabledByEOF', + 'DisabledForeColor','DisabledItemBackColor','DisabledItemForeColor','DisabledPicture','DispPageHeight','DispPageWidth', + 'DisplayCount','DisplayValue','DoCreate','DockPosition','Docked','DocumentFile', + 'DownPicture','DragIcon','DragMode','DragState','DrawMode','DrawStyle', + 'DrawWidth','DynamicAlignment','DynamicBackColor','DynamicCurrentControl','DynamicFontBold','DynamicFontItalic', + 'DynamicFontName','DynamicFontOutline','DynamicFontShadow','DynamicFontSize','DynamicFontStrikethru','DynamicFontUnderline', + 'DynamicForeColor','EditFlags','Enabled','EnabledByReadLock','Encrypted','EnvLevel', + 'ErasePage','FileClass','FileClassLibrary','FillColor','FillStyle','Filter', + 'FirstElement','FontBold','FontItalic','FontName','FontOutline','FontShadow', + 'FontSize','FontStrikethru','FontUnderline','ForceFocus','ForeColor','FormCount', + 'FormIndex','FormPageCount','FormPageIndex','Format','Forms','FoxFont', + 'FullName','GoFirst','GoLast','GridLineColor','GridLineWidth','GridLines' + ), + 4 => array('HPROJ','HWnd','HalfHeightCaption','HasClip','HeaderGap','HeaderHeight', + 'Height','HelpContextID','HideSelection','Highlight','HomeDir','HostName', + 'HotKey','HscrollSmallChange','IMEMode','Icon','IgnoreInsert','InResize', + 'Increment','IncrementalSearch','InitialSelectedAlias','InputMask','Instancing','IntegralHeight', + 'Interval','ItemBackColor','ItemData','ItemForeColor','ItemIDData','ItemTips', + 'JustReadLocked','KeyPreview','KeyboardHighValue','KeyboardLowValue','LastModified','Left', + 'LeftColumn','LineSlant','LinkMaster','List','ListCount','ListIndex', + 'ListItem','ListItemId','LockDataSource','LockScreen','MDIForm','MainClass', + 'MainFile','Margin','MaxButton','MaxHeight','MaxLeft','MaxLength', + 'MaxTop','MaxWidth','MemoWindow','MinButton','MinHeight','MinWidth', + 'MouseIcon','MousePointer','Movable','MoverBars','MultiSelect','Name', + 'NapTime','NewIndex','NewItemId','NoDataOnLoad','NoDefine','NotifyContainer', + 'NullDisplay','NumberOfElements','OLEDragMode','OLEDragPicture','OLEDropEffects','OLEDropHasData', + 'OLEDropMode','OLERequestPendingTimeOut','OLEServerBusyRaiseError','OLEServerBusyTimeOut','OLETypeAllowed','OleClass', + 'OleClassId','OleControlContainer','OleIDispInValue','OleIDispOutValue','OleIDispatchIncoming','OleIDispatchOutgoing', + 'OnResize','OneToMany','OpenViews','OpenWindow','PageCount','PageHeight', + 'PageOrder','PageWidth','Pages','Panel','PanelLink','Parent', + 'ParentAlias','ParentClass','Partition','PasswordChar','Picture','ProcessID', + 'ProgID','ProjectHookClass','ProjectHookLibrary','Projects','ReadColors','ReadCycle', + 'ReadFiller','ReadLock','ReadMouse','ReadOnly','ReadSave','ReadSize', + 'ReadTimeout','RecordMark','RecordSource','RecordSourceType','Rect','RelationalExpr', + 'RelativeColumn','RelativeRow','ReleaseErase','ReleaseType','ReleaseWindows','Resizable', + 'RightToLeft','RowHeight','RowSource','RowSourceType','SCCProvider','SCCStatus', + 'SDIForm','ScaleMode','ScrollBars','SelLength','SelStart','SelText', + 'SelectOnEntry','Selected','SelectedBackColor','SelectedForeColor','SelectedID','SelectedItemBackColor', + 'SelectedItemForeColor','SelfEdit','ServerClass','ServerClassLibrary','ServerHelpFile','ServerName', + 'ServerProject','ShowTips','ShowWindow','Sizable','Size','Size', + 'Size','Skip','SkipForm','Sorted','SourceType','Sparse', + 'SpecialEffect','SpinnerHighValue','SpinnerLowValue','SplitBar','StartMode','StatusBarText', + 'Stretch','StrictDateEntry','Style','SystemRefCount','TabIndex','TabStop', + 'TabStretch','TabStyle','Tabhit','Tabs','Tag','TerminateRead', + 'ThreadID','TitleBar','ToolTipText','Top','TopIndex','TopItemId', + 'TypeLibCLSID','TypeLibDesc','TypeLibName','UnlockDataSource','Value','ValueDirty', + 'VersionComments','VersionCompany','VersionCopyright','VersionDescription','VersionNumber','VersionProduct', + 'VersionTrademarks','View','ViewPortHeight','ViewPortLeft','ViewPortTop','ViewPortWidth', + 'Visible','VscrollSmallChange','WasActive','WasOpen','WhatsThisButton','WhatsThisHelp', + 'WhatsThisHelpID','Width','WindowList','WindowNTIList','WindowState','WindowType', + 'WordWrap','ZOrderSet','ActiveDoc','Checkbox','Column','ComboBox', + 'CommandButton','CommandGroup','Container','Control','Cursor','Custom', + 'DataEnvironment','EditBox','Empty','FontClass','Form','Formset', + 'General','Grid','Header','HyperLink','Image','Label', + 'ListBox','Memo','OleBaseControl','OleBoundControl','OleClassIDispOut','OleControl', + 'OptionButton','OptionGroup','Page','PageFrame','ProjectHook','RectClass', + 'Relation','Session','Shape','Spinner','TextBox' ,'Toolbar' + ), + ), + 'SYMBOLS' => array("!", "@", "$", "%", "(", ")", "-", "+", "=", "/", "{", "}", "[", "]", ":", ";", ",", " ", ".", "*", "&"), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: blue;', + 2 => 'color: blue;', + 3 => 'color: blue;', + 4 => 'color: blue;' + ), + 'COMMENTS' => array( + 1 => 'color: green; font-style: italic;', + 2 => 'color: green; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: blue;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: blue;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/winbatch.php b/ehcp/net2ftp/plugins/geshi/geshi/winbatch.php new file mode 100644 index 0000000..6228a79 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/winbatch.php @@ -0,0 +1,367 @@ + 'Winbatch', + 'COMMENT_SINGLE' => array(1 => ';', 2 => ':'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'While', 'To', 'Then', 'Switch', 'Select', 'Return', 'Next', 'IntControl', 'Include', 'In', 'If', + 'Goto', 'GoSub', 'ForEach', 'For', 'Exit', 'Execute', 'ErrorMode', 'EndWhile', 'EndSwitch', '#EndSubRoutine', + 'EndSelect', 'EndIf', '#EEndFunction', 'EndFor', 'End', 'Else', 'DropWild', 'Drop', '#DefineSubRoutine', + '#DefineFunction', 'Debug', 'Continue', 'Case', 'CallExt', 'Call', 'By', 'BreakPoint', 'Break' + ), + 2 => array( + 'ZOOMED', 'YES', 'WORD4', 'WORD2', 'WORD1', 'WHOLESECTION', 'WAIT', 'UNSORTED', 'UNCHECK', 'TRUE', 'TILE', + 'TAB', 'STRING', 'STACK', 'SPC2NET', 'SORTED', 'SOK', 'SNET2PC', 'SINGLE', 'SHIFT', 'SERVER', 'SERRWINSOCK', + 'SERRVOICE', 'SERRSOCKET', 'SERRSERVICE', 'SERRSELECT', 'SERRPARAM', 'SERROUTOFMEM', 'SERRNOTFOUND', 'SERRNOCONN', + 'SERRNOANSWER', 'SERRMUSTWAIT', 'SERRIPADDR', 'SERRHOSTNAME', 'SERRFAILURE', 'SERRBUSY', 'SCROLLLOCK', 'SCANCEL', + 'SAVE', 'SALREADY', 'ROWS', 'REGUSERS', 'REGROOT', 'REGMACHINE', 'REGCURRENT', 'REGCLASSES', 'RDBLCLICK', 'RCLICK', + 'RBUTTON', 'RAD2DEG', 'QSUCCESSINFO', 'QSUCCESS', 'QSTILLEX', 'QROLLBACK', 'QNULL', 'QNODATA', 'QNEXT', 'QNEEDDATA', + 'QFIRST', 'QCOMMIT', 'QBADHANDLE', 'PRINTER', 'PLANCKJOULES', 'PLANCKERGS', 'PI', 'PARSEONLY', 'PARSEC', 'P3ERRREPLY', + 'OPEN', 'ON', 'OFF', 'NUMLOCK', 'NOWAIT', 'NOTIFY', 'NORMAL', 'NORESIZE', 'NONE', 'NO', 'NCSAFORMAT', 'MULTIPLE', + 'MSFORMAT', 'MPLAYRDBLCK', 'MPLAYRCLK', 'MPLAYRBUTTON', 'MPLAYMDBLCK', 'MPLAYMCLK', 'MPLAYMBUTTON', 'MPLAYLDBLCK', + 'MPLAYLCLK', 'MPLAYLBUTTON', 'MINOR', 'MDBLCLICK', 'MCLICK', 'MBYESNO', 'MBUTTON', 'MBOKCANCEL', 'MAJOR', 'MAGFIELD', + 'LOCALGROUP', 'LIGHTMTPS', 'LIGHTMPS', 'LF', 'LDBLCLICK', 'LCLICK', 'LBUTTON', 'LAFFDBERROR', 'ICON', 'HTTPS', 'HTTP', + 'HNOHEADER', 'HMETHODPOST', 'HMETHODGET', 'HIDDEN', 'HHEADERONLY', 'HHEADER', 'GRAVITATION', 'GOPHER', 'GOLDENRATIO', + 'GMTSEC', 'GLOBALGROUP', 'GFTSEC', 'GETPROCID', 'GETEXITCODE', 'FWDSCAN', 'FTPPASSIVE', 'FTP', 'FLOAT8', 'FARADAY', + 'FALSE', 'EXTENDED', 'EULERS', 'ENABLE', 'ELECTRIC', 'DRIVE', 'DISABLE', 'DESCENDING', 'DEG2RAD', 'DEFAULT', 'CTRL', + 'CRLF', 'CR', 'COMMONFORMAT', 'COLUMNS', 'CHECK', 'CAPSLOCK', 'CANCEL', 'BOLTZMANN', 'BACKSCAN', 'AVOGADRO', 'ATTR_X', + 'ATTR_T', 'ATTR_SY', 'ATTR_SH', 'ATTR_RO', 'ATTR_RI', 'ATTR_P', 'ATTR_IC', 'ATTR_H', 'ATTR_DM', 'ATTR_DI', 'ATTR_DC', + 'ATTR_CI', 'ATTR_A', 'ASCENDING', 'ARRANGE', 'AMC', 'ACC_WRITE', 'ACC_READ_NT', 'ACC_READ_95', 'ACC_READ', 'ACC_PRINT_NT', + 'ACC_PMANG_NT', 'ACC_PFULL_NT', 'ACC_LIST', 'ACC_FULL_NT', 'ACC_FULL_95', 'ACC_DELETE', 'ACC_CREATE', 'ACC_CONTROL', + 'ACC_CHNG_NT', 'ACC_ATTRIB', 'ABOVEICONS' + ), + 3 => array( + 'Yields', 'Yield', 'WinZoom', 'WinWaitExist', 'WinWaitClose', 'WinWaitChild', 'WinVersion', 'WinTitle', 'WinSysInfo', + 'WinState', 'WinShow', 'WinResources', 'WinPositionChild', 'WinPosition', 'WinPlaceSet', 'WinPlaceGet', 'WinPlaceChild', + 'WinPlace', 'WinParmSet', 'WinParmGet', 'WinName', 'WinMetrics', 'WinItemProcId', 'WinItemNameId', 'WinItemizeEx', + 'WinItemize', 'WinItemChild', 'WinIsDos', 'WinIdGet', 'WinIconize', 'WinHide', 'WinHelp', 'WinGetactive', 'WinExistchild', + 'WinExist', 'WinExename', 'WinConfig', 'WinClosenot', 'WinClose', 'WinArrange', 'WinActivechild', 'WinActivchild', + 'WinActivate', 'WebVerifyCard', 'WebSetTimeout', 'WebParamSize', 'WebParamNames', 'WebParamFile', 'WebParamData', + 'WebParamBuf', 'WebOutFile', 'WebOutBinary', 'WebOut', 'WebDumpError', 'WebDatData', 'WebCounter', 'WebConSize', 'WebConData', + 'WebConBuf', 'WebCmdData', 'WebBaseConv', 'Wallpaper', 'WaitForKeyEX', 'WaitForKey', 'VersionDLL', 'Version', 'VarType', + 'TimeYmdHms', 'TimeWait', 'TimeSubtract', 'TimeJulToYmd', 'TimeJulianDay', 'TimeDiffSecs', 'TimeDiffDays', 'TimeDiff', 'TimeDelay', + 'TimeDate', 'TimeAdd', 'TextSelect', 'TextBoxSort', 'TextBox', 'Terminate', 'Tanh', 'Tan', 'SysParamInfo', 'SvcWaitForCmd', + 'SvcSetState', 'SvcSetAccept', 'StrUpper', 'StrTrim', 'StrSubWild', 'StrSub', 'StrScan', 'StrReplace', 'StrLower', 'StrLenWild', + 'StrLen', 'StrIndexWild', 'StrIndexNC', 'StrIndex', 'StriCmp', 'StrFixLeft', 'StrFixCharsL', 'StrFixChars', 'StrFix', 'StrFill', + 'StrCnt', 'StrCmp', 'StrClean', 'StrCharCount', 'StrCat', 'StrByteCount', 'Sqrt', 'SoundVolume', 'Sounds', 'Snapshot', 'Sinh', 'Sin', + 'ShortCutMake', 'ShortCutInfo', 'ShortCutExtra', 'ShortCutEdit', 'ShortCutDir', 'ShellExecute', 'SendMenusToEx', 'SendMenusTo', + 'SendKeysTo', 'SendKeysChild', 'SendKey', 'RunZoomWait', 'RunZoom', 'RunWithLogon', 'RunWait', 'RunShell', 'RunIconWait', + 'RunIcon', 'RunHideWait', 'RunHide', 'RunExit', 'RunEnviron', 'Run', 'RtStatus', 'Reload', 'RegUnloadHive', 'RegSetValue', + 'RegSetQword', 'RegSetMulSz', 'RegSetExpSz', 'RegSetEx', 'RegSetDword', 'RegSetBin', 'RegQueryValue', 'RegQueryStr', + 'RegQueryQword', 'RegQueryMulSz', 'RegQueryKeys', 'RegQueryKeyLastWriteTime', 'RegQueryKey', 'RegQueryItem', 'RegQueryExpSz', + 'RegQueryEx', 'RegQueryDword', 'RegQueryBin', 'RegOpenKeyEx', 'RegOpenKey', 'RegOpenFlags', 'RegLoadHive', 'RegExistValue', + 'RegExistKey', 'RegEntryType', 'RegDelValue', 'RegDeleteKey', 'RegCreateKey', 'RegConnect', 'RegCloseKey', 'RegApp', 'Random', + 'PtrPersistent', 'PtrGlobalDefine', 'PtrGlobal', 'Print', 'PlayWaveform', 'PlayMidi', 'PlayMedia', 'PipeServerWrite', 'PipeServerRead', + 'PipeServerCreate', 'PipeServerClose', 'PipeInfo', 'PipeClientSendRecvData', 'PipeClientOpen', 'PipeClientClose', 'Pause', + 'ParseData', 'ObjectTypeGet', 'ObjectType', 'ObjectOpen', 'ObjectGet', 'ObjectEventRemove', 'objecteventremove', 'ObjectEventAdd', + 'objecteventadd', 'ObjectCreate', 'ObjectConstToArray', 'ObjectConstantsGet', 'ObjectCollectionOpen', 'ObjectCollectionNext', + 'ObjectCollectionClose', 'ObjectClose', 'ObjectAccess', 'Num2Char', 'NetInfo', 'MsgTextGet', 'MousePlay', 'MouseMove', 'MouseInfo', + 'MouseDrag', 'MouseCoords', 'MouseClickBtn', 'MouseClick', 'mod', 'Min', 'Message', 'Max', 'Loge', 'LogDisk', 'Log10', 'LastError', + 'KeyToggleSet', 'KeyToggleGet', 'ItemSortNc', 'ItemSort', 'ItemSelect', 'ItemReplace', 'ItemRemove', 'ItemLocate', 'ItemInsert', + 'ItemExtractCSV', 'ItemExtract', 'ItemCountCSV', 'ItemCount', 'IsNumber', 'IsLicensed', 'IsKeyDown', 'IsInt', 'IsFloat', 'IsDefined', + 'Int', 'InstallFile', 'IniWritePvt', 'IniWrite', 'IniReadPvt', 'IniRead', 'IniItemizePvt', 'IniItemize', 'IniDeletePvt', 'IniDelete', + 'IgnoreInput', 'IconReplace', 'IconInfo', 'IconExtract', 'IconArrange', 'GetTickCount', 'GetObject', 'GetExactTime', 'Floor', + 'FindWindow', 'FileYmdHms', 'FileWrite', 'FileVerInfo', 'FileTimeTouch', 'FileTimeSetEx', 'FileTimeSet', 'FileTimeGetEx', + 'FileTimeGet', 'FileTimeCode', 'FileSizeEx', 'FileSize', 'FileRoot', 'FileRename', 'FileRead', 'FilePutW', 'FilePut', 'FilePath', + 'FileOpen', 'FileNameShort', 'FileNameLong', 'FileNameEval2', 'FileNameEval1', 'FileMoveAttr', 'FileMove', 'FileMapName', + 'FileLocate', 'FileItemPath', 'FileItemize', 'FileInfoToArray', 'FileGetW', 'FileGet', 'FileFullname', 'FileExtension', 'FileExist', + 'FileDelete', 'FileCreateTemp', 'FileCopyAttr', 'FileCopy', 'FileCompare', 'FileClose', 'FileBaseName', 'FileAttrSetEx', + 'FileAttrSet', 'FileAttrGetEx', 'FileAttrGet', 'FileAppend', 'Fabs', 'ExtractAttachedFile', 'Exp', 'ExeTypeInfo', 'Exclusive', + 'EnvItemize', 'EnvironSet', 'Environment', 'EndSession', 'DosVersion', 'DllLoad', 'DllLastError', 'DllHwnd', 'DllHinst', + 'DllFree', 'DllCallCDecl', 'DllCall', 'Display', 'DiskVolinfo', 'DiskSize', 'DiskScan', 'DiskInfo', 'DiskFree', 'DiskExist', + 'DirWindows', 'DirSize', 'DirScript', 'DirRename', 'DirRemove', 'DirMake', 'DirItemize', 'DirInfoToArray', 'DirHome', 'DirGet', + 'DirExist', 'DirChange', 'DirAttrSetEx', 'DirAttrSet', 'DirAttrGetEx', 'DirAttrGet', 'DialogProcOptions', 'DialogObject', + 'DialogControlState', 'DialogControlSet', 'DialogControlGet', 'DialogBox', 'Dialog', 'Delay', 'Decimals', 'DebugTrace', + 'DebugData', 'DDETimeout', 'DDETerminate', 'DDERequest', 'DDEPoke', 'DDEInitiate', 'DDEExecute', 'DateTime', 'CurrFilepath', + 'CurrentPath', 'CurrentFile', 'CreateObject', 'Cosh', 'Cos', 'ClipPut', 'ClipHasFormat', 'ClipGetEx', 'ClipGet', 'ClipAppend', + 'ChrUnicodeToString', 'ChrUnicodeToHex', 'ChrStringToUnicode', 'ChrSetCodepage', 'ChrHexToUnicode', 'ChrGetCodepage', + 'Char2Num', 'Ceiling', 'ButtonNames', 'BoxUpdates', 'BoxTitle', 'BoxTextFont', 'BoxTextColor', 'BoxText', 'BoxShut', 'BoxPen', + 'BoxOpen', 'BoxNew', 'BoxMapmode', 'BoxesUp', 'BoxDrawText', 'BoxDrawRect', 'BoxDrawLine', 'BoxDrawCircle', 'BoxDestroy', + 'BoxDataTag', 'BoxDataClear', 'BoxColor', 'BoxCaption', 'BoxButtonWait', 'BoxButtonStat', 'BoxButtonKill', 'BoxButtonDraw', + 'BoxBitMap', 'BinaryXor', 'BinaryXlate', 'BinaryWriteEx', 'BinaryWrite', 'BinaryTagRepl', 'BinaryTagLen', 'BinaryTagInit', + 'BinaryTagIndex', 'BinaryTagFind', 'BinaryTagExtr', 'BinaryStrCnt', 'BinarySort', 'BinaryReplace', 'BinaryReadEx', + 'BinaryRead', 'BinaryPokeStrW', 'BinaryPokeStr', 'BinaryPokeHex', 'BinaryPokeFlt', 'BinaryPoke4', 'BinaryPoke2', 'BinaryPoke', + 'BinaryPeekStrW', 'BinaryPeekStr', 'BinaryPeekHex', 'BinaryPeekFlt', 'BinaryPeek4', 'BinaryPeek2', 'BinaryPeek', 'BinaryOr', + 'BinaryOleType', 'BinaryIndexNc', 'BinaryIndexEx', 'BinaryIndexBin', 'BinaryIndex', 'BinaryIncrFlt', 'BinaryIncr4', + 'BinaryIncr2', 'BinaryIncr', 'BinaryHashRec', 'BinaryFree', 'BinaryEodSet', 'BinaryEodGet', 'BinaryCopy', 'BinaryConvert', + 'BinaryCompare', 'BinaryClipPut', 'BinaryClipGet', 'BinaryChecksum', 'BinaryBufInfo', 'BinaryAnd', 'BinaryAllocArray', + 'BinaryAlloc', 'Beep', 'Average', 'Atan', 'AskYesNo', 'AskTextbox', 'AskPassword', 'AskLine', 'AskItemlist', 'AskFont', + 'AskFiletext', 'AskFilename', 'AskDirectory', 'AskColor', 'Asin', 'ArrInitialize', 'ArrInfo', 'ArrDimension', + 'Arrayize', 'ArrayFilePutCSV', 'ArrayFilePut', 'ArrayFileGetCSV', 'ArrayFileGet', 'AppWaitClose', 'AppExist', 'AddExtender', + 'Acos', 'Abs', 'About' + ), + 4 => array( + 'zZipFiles', 'zVersionInfo', 'zVersion', 'zUnZipFiles', 'zSetPortBit', 'zRPortShift', 'zPortOut', 'zPortIn', 'zNotPortBit', + 'zLPortShift', 'zGetPortBit', 'zClrPortBit', 'xVerifyCCard', 'xSendMessage', 'xMessageBox', 'xMemCompact', 'xHex', 'xGetElapsed', + 'xGetChildHwnd', 'xExtenderInfo', 'xEnumStreams', 'xEjectMedia', 'xDriveReady', 'xDiskLabelGet', 'xCursorSet', 'xBaseConvert', + 'wxPing', 'wxParmSet', 'wxParmGet', 'wxMsgSetHdr', 'wxMsgGetHdr', 'wxMsgGetBody', 'wxHost2Addr', 'wxGetLastErr', 'wxGetInfo', + 'wxGetErrDesc', 'wxAddr2Host', 'wtsWaitSystemEvent', 'wtsVersion', 'wtsTerminateProcess', 'wtsShutdownSystem', 'wtsSendMessage', + 'wtsQuerySessionInfo', 'wtsProcIdToSessId', 'wtsLogoffSession', 'wtsLastErrMsg', 'wtsIsTSEnabled', 'wtsIsCitrixEnabled', + 'wtsGetActiveConsoleSessId', 'wtsEnumSessions', 'wtsEnumProcesses', 'wtsDisconnectSession', 'wnWrkGroups', 'wnVersion', 'wntWtsUserSet', + 'wntWtsUserGet', 'wntVersion', 'wntUserSidChk', 'wntUserSetDat', 'wntUserRename', 'wntUserProps', 'wntUserList', 'wntUserInfo', + 'wntUserGetDat', 'wntUserFiles', 'wntUserExist', 'wntUserDel', 'wntUserAddDat', 'wntUserAdd', 'wntSvcStatus', 'wntSvcStart', + 'wntSvcList', 'wntSvcDelete', 'wntSvcCreate', 'wntSvcControl', 'wntSvcCfgSet', 'wntSvcCfgGet', 'wntShutdown', 'wntShareUsers', + 'wntShareSet', 'wntShareList', 'wntShareInfo', 'wntShareDel', 'wntShareAdd', 'wntServiceInf', 'wntServiceAt', 'wntServerType', + 'wntServerList', 'wntServerInfo', 'wntSecurityGet', 'wntRunAsUser', 'wntResources2', 'wntResources', 'wntRemoteTime', 'wntRasUserSet', + 'wntRasUserGet', 'wntProfileInfo', 'wntProfileDel', 'wntPrivUsers', 'wntPrivList', 'wntPrivGet', 'wntPrivDel', 'wntPrivAdd', + 'wntOwnerSet', 'wntOwnerGet', 'wntMemberSet', 'wntMemberLst2', 'wntMemberList', 'wntMemberGrps', 'wntMemberGet', 'wntMemberDel', + 'wntLsaPolSet', 'wntLsaPolGet', 'wntListGroups', 'wntLastErrMsg', 'wntGroupRen', 'wntGroupInfo', 'wntGroupEdit', 'wntGroupDel', + 'wntGroupAdd', 'wntGetUser', 'wntGetDrive', 'wntGetDc', 'wntGetCon', 'wntFileUsers', 'wntFilesOpen', 'wntFileClose', 'wntEventWrite', + 'wntEventLog', 'wntDomainSync', 'wntDirDialog', 'wntDfsList', 'wntDfsGetInfo', 'wntCurrUsers', 'wntChgPswd', 'wntCancelCon', + 'wntAuditMod', 'wntAuditList', 'wntAuditGet', 'wntAuditDel', 'wntAuditAdd2', 'wntAuditAdd', 'wntAddPrinter', 'wntAddDrive', + 'wntAcctPolSet', 'wntAcctPolGet', 'wntAcctList', 'wntAcctInfo', 'wntAccessMod', 'wntAccessList', 'wntAccessGet', 'wntAccessDel', + 'wntaccessadd2', 'wntAccessAdd', 'wnShares', 'wnSharePath', 'wnShareName', 'wnShareCnt', 'wnServers', 'wnRestore', 'wnNetNames', + 'wnGetUser', 'wnGetCon', 'wnGetCaps', 'wnDlgShare', 'wnDlgNoShare', 'wnDlgDiscon', 'wnDlgCon4', 'wnDlgCon3', 'wnDlgCon2', 'wnDlgCon', + 'wnDlgBrowse', 'wnDialog', 'wnCmptrInfo', 'wnCancelCon', 'wnAddCon', 'WaitSRQ', 'w9xVersion', 'w9xUserSetDat', 'w9xUserRename', + 'w9xUserprops', 'w9xUserList', 'w9xUserinfo', 'w9xUserGetDat', 'w9xUserExist', 'w9xUserDel', 'w9xUserAddDat', 'w9xUserAdd', 'w9xShareSet', + 'w9xShareInfo', 'w9xShareDel', 'w9xShareAdd', 'w9xServiceAt', 'w9xServerList', 'w9xRemoteTime', 'w9xOwnerGet', 'w9xMemberSet', + 'w9xMemberList', 'w9xMemberGrps', 'w9xMemberGet', 'w9xMemberDel', 'w9xListGroups', 'w9xGroupInfo', 'w9xGroupDel', 'w9xGroupAdd', + 'w9xGetDC', 'w9xFileUsers', 'w9xAccessList', 'w9xAccessGet', 'w9xAccessDel', 'w9xAccessAdd', 'w95Version', 'w95ShareUsers', + 'w95ShareSet', 'w95ShareList', 'w95ShareInfo', 'w95ShareDel', 'w95ShareAdd', 'w95ServiceInf', 'w95ServiceAt', 'w95ServerType', + 'w95ServerInfo', 'w95Resources', 'w95GetUser', 'w95GetDrive', 'w95GetCon', 'w95FileUsers', 'w95FileClose', 'w95DirDialog', + 'w95CancelCon', 'w95AddPrinter', 'w95AddDrive', 'w95AccessDel', 'w95AccessAdd', 'w3Version', 'w3PrtBrowse', 'w3NetGetUser', + 'w3NetDialog', 'w3GetCon', 'w3GetCaps', 'w3DirBrowse', 'w3CancelCon', 'w3AddCon', 'urlGetScheme', 'urlEncode', 'urlDecode', + 'tVersion', 'tSetPriority', 'TriggerList', 'Trigger', 'tRemoteConn', 'tOpenProc', 'tListProc', 'tListMod', 'tKillProc', 'tGetProcInfo', + 'tGetPriority', 'tGetModInfo', 'tGetLastError', 'tGetData', 'TestSys', 'TestSRQ', 'tCountProc', 'tCompatible', 'tCloseProc', + 'tBrowseCntrs', 'sSendString', 'sSendNum', 'sSendLine', 'sSendBinary', 'sRecvNum', 'sRecvLine', 'sRecvBinary', 'SrchVersion', + 'SrchNext', 'SrchInit', 'SrchFree', 'sOpen', 'sOK2Send', 'sOK2Recv', 'smtpSendText', 'smtpSendFile', 'sListen', 'SetRWLS', + 'SendSetup', 'SendLLO', 'SendList', 'SendIFC', 'SendDataBytes', 'SendCmds', 'Send', 'sConnect', 'sClose', 'SByteOrder32', + 'sByteOrder16', 'sAccept', 'rRegVersion', 'rRegSearch', 'ResetSys', 'ReceiveSetup', 'Receive', 'ReadStsByte', 'RcvRespMsg', + 'RasVersion', 'RasTypeSize', 'RasRename', 'RasNumCons', 'RasNameValid', 'RasListActCon', 'RasItemize', 'RasHangUp', 'RasGetLastErr', + 'RasGetConStat', 'RasEntrySet', 'RasEntryInfo', 'RasEntryExist', 'RasEntryDel', 'RasEntryAdd', 'RasDialInfo', 'RasDial', + 'RasCopy', 'RasConStatus', 'qVersionInfo', 'qTransact', 'qTables', 'qSpecial', 'qSetConnOpt', 'qNumRsltCol', 'qNativeSql', 'qLastCode', + 'qGetData', 'qFreeStmt', 'qFreeEnv', 'qFreeConnect', 'qFetch', 'qExecDirect', 'qError', 'qDriverList', 'qDriverCon', 'qDisconnect', + 'qDataSources', 'qConnect', 'qConfigError', 'qConfigData', 'qColumns', 'qBindCol', 'qAllocStmt', 'qAllocEnv', 'qAllocConnect', + 'pWaitFor', 'pVersionInfo', 'pTimeout', 'pSetPublish', 'pSetPrtInfo', 'pSetPrtAttrib', 'pSetDefPrtEx', 'pSetDefPrt', 'pSendFile', + 'pRecvFile', 'pPutString', 'pPutLine', 'pPutChar', 'pPutByte', 'pPutBinary', 'PPollUnconfig', 'PPollConfig', 'PPoll', 'pPeekChar', + 'pPeekByte', 'pPaperSizes', 'pPaperBins', 'pModemSReg', 'pModemParams', 'pModemInit', 'pModemHangUp', 'pModemDial', 'pModemControl', + 'pModemConnect', 'pModemCommand', 'pModemAnsRing', 'pModemAnsCall', 'pMediaTypes', 'pGetString', 'pGetPublish', 'pGetPrtList', + 'pGetPrtInfo', 'pGetPrtAttrib', 'pGetLine', 'pGetLastError', 'pGetErrorMsg', 'pGetErrorCode', 'pGetDefPrtInf', 'pGetChar', + 'pGetByte', 'pGetBinary', 'pDelPrtConn', 'pDelPrinter', 'pComOpen', 'pComModify', 'pComInfo', 'pComControl', 'pComClose', + 'pCheckSum', 'pCheckBinary', 'pCaptureOn', 'pCaptureOff', 'pCaptureLog', 'PassControl', 'pAddPrtConn', 'pAddPrinter', 'p3RecvText', + 'p3RecvFile', 'p3Peek', 'p3Open', 'p3GetReply', 'p3Delete', 'p3Count', 'p3Close', 'nwWhoAmI', 'nwVfyPassword', 'nwVersion', + 'nwSrvShutdown', 'nwSrvNLMMgr', 'nwSrvGenGUID', 'nwSrvExecNCF', 'nwSetVolLimit', 'nwSetSrvParam', 'nwSetSrvInfo', 'nwSetPrimServ', + 'nwSetPassword', 'nwSetOptions', 'nwSetFileInfo', 'nwSetDirLimit', 'nwSetDirInfo', 'nwSetContext', 'nwSetBcastMode', 'nwServerList', + 'nwSendBcastMsg', 'nwSearchObjects', 'nwSearchFilter', 'nwRenameObject', 'nwRemoveObject', 'nwReceiveBcastMsg', 'nwNameConvert', + 'nwMutateObject', 'nwMoveObject', 'nwModifyObject', 'nwMapDelete', 'nwMap', 'nwLogout', 'nwLogin', 'nwListUserGroups', + 'nwListObjects', 'nwListGroupMembers', 'nwLastErrMsg', 'nwIsUserInGroup', 'nwGetVolLimit', 'nwGetSrvStats', 'nwGetSrvParam', + 'nwGetSrvInfo', 'nwGetSrvCfg', 'nwGetOptions', 'nwGetObjValue', 'nwGetObjInfo', 'nwGetNLMInfo', 'nwGetMapped', 'nwGetFileInfo', + 'nwGetDirLimit', 'nwGetDirInfo', 'nwGetContext', 'nwGetConnInfo', 'nwGetCapture', 'nwGetBcastMode', 'nwGetAttrInfo', + 'nwDriveStatus', 'nwDrivePath', 'nwDetachFromServer', 'nwDelUserFromGroup', 'nwDelConnNum', 'nwCompareObject', 'nwClientInfo', + 'nwChgPassword', 'nwAttachToServer', 'nwAddUserToGroup', 'nwAddObject', 'netVersion', 'netResources', 'netGetUser', 'netGetCon', + 'netDirDialog', 'netCancelCon', 'netAddPrinter', 'netAddDrive', 'n4Version', 'n4UserGroups', 'n4UserGroupEx', 'n4SetPrimServ', + 'n4SetOptions', 'n4SetContextG', 'n4SetContext', 'n4ServerList', 'n4ServerInfo', 'n4ObjSearch', 'n4ObjRename', 'n4ObjOptions', + 'n4ObjMove', 'n4ObjGetVal', 'n4ObjectProps', 'n4ObjectList', 'n4ObjectInfo', 'n4ObjDelete', 'n4NameConvert', 'n4MsgsEndAll', + 'n4MsgsEnd', 'n4MemberSet', 'n4MemberGet', 'n4MemberDel', 'n4MapRoot', 'n4MapDir', 'n4MapDelete', 'n4Map', 'n4LogoutTree', + 'n4Logout', 'n4Login', 'n4GetUserName', 'n4GetUserId', 'n4GetUser', 'n4GetNetAddr', 'n4GetMapped', 'n4GetContext', + 'n4GetConnNum', 'n4FileUsers', 'n4FileTimeGet', 'n4FileAttrSet', 'n4FileAttrGet', 'n4DriveStatus', 'n4DrivePath', 'n4DirTimeGet', + 'n4DirAttrSet', 'n4DirAttrGet', 'n4Detach', 'n4ChgPassword', 'n4CapturePrt', 'n4CaptureGet', 'n4CaptureEnd', 'n4Attach', + 'n3Version', 'n3UserGroups', 'n3ServerList', 'n3ServerInfo', 'n3MsgsEndAll', 'n3MsgsEnd', 'n3MemberSet', 'n3MemberGet', + 'n3MemberDel', 'n3Maproot', 'n3Mapdir', 'n3Mapdelete', 'n3Map', 'n3Logout', 'n3GetUserId', 'n3GetUser', 'n3GetNetAddr', + 'n3GetMapped', 'n3GetConnNum', 'n3FileTimeGet', 'n3FileAttrSet', 'n3FileAttrGet', 'n3DriveStatus', 'n3DrivePath', + 'n3DirTimeGet', 'n3DirAttrSet', 'n3DirAttrGet', 'n3Detach', 'n3ChgPassword', 'n3CapturePrt', 'n3CaptureGet', + 'n3CaptureEnd', 'n3Attach', 'mVersion', 'mSyncMail', 'mSendMailEx', 'mSendMail', 'mrecvmail', 'mReadNextMsg', 'mLogOn', + 'mLogOff', 'mFindNext', 'mError', 'mCompatible', 'kVerInfo', 'kStatusInfo', 'kSendText', 'kSendFile', 'kManageImap4', + 'kInit', 'kGetMail', 'kExtra', 'kDest', 'kDeletePop3', 'iWriteDataBuf', 'iWriteData', 'iVersion', 'IUrlOpen', 'iUrlEncode', + 'iUrlDecode', 'iReadDataBuf', 'iReadData', 'ipVersion', 'ipPing', 'iPing', 'ipHost2Addr', 'ipGetLastErr', 'ipGetAddress', + 'iParseURL', 'ipAddr2Host', 'iOptionSet', 'iOptionGet', 'ImgWave', 'ImgVersion', 'ImgUnsharpMask', 'ImgThreshold', 'ImgSwirl', + 'ImgSpread', 'ImgSolarize', 'ImgShear', 'ImgSharpen', 'ImgShade', 'ImgScale', 'ImgSample', 'ImgRotate', 'ImgResize', + 'ImgReduceNoise', 'ImgRaise', 'ImgOilPaint', 'ImgNormalize', 'ImgNegate', 'ImgMotionBlur', 'ImgModulate', 'ImgMinify', + 'ImgMedianFilter', 'ImgMagnify', 'ImgLevel', 'ImgIsValid', 'ImgIsPalette', 'ImgIsMono', 'ImgIsGray', 'ImgInfo', 'ImgImplode', + 'ImgGetImageType', 'ImgGetColorCount', 'ImgGaussianBlur', 'ImgGamma', 'ImgFrame', 'ImgFlop', 'ImgFlip', 'ImgEqualize', + 'ImgEnhance', 'ImgEmboss', 'ImgCrop', 'ImgConvert', 'ImgContrast', 'ImgCompare', 'ImgColorize', 'ImgChop', 'ImgCharcoal', + 'ImgBorder', 'ImgBlur', 'ImgAddNoise', 'iLocFindNext', 'iLocFindInit', 'iHttpOpen', 'iHttpInit', 'iHttpHeaders', 'iHttpAccept', + 'iHostConnect', 'iHost2Addr', 'iGetResponse', 'iGetLastError', 'iGetIEVer', 'iGetConStatEx', 'iGetConState', 'iFtpRename', + 'iFtpPut', 'iFtpOpen', 'iFtpGet', 'iFtpFindNext', 'iFtpFindInit', 'iFtpDirRemove', 'iFtpDirMake', 'iFtpDirGet', 'iFtpDirChange', + 'iFtpDialog', 'iFtpDelete', 'iFtpCmd', 'iErrorDialog', 'iDialItemize', 'iDialHangUp', 'iDial', 'iCookieSet', 'iCookieGet', + 'iContentURL', 'iContentFile', 'iContentData', 'iClose', 'ibWrtf', 'ibWrt', 'ibWait', 'ibVersion', 'ibUnlock', 'ibTrg', + 'ibTmo', 'ibStop', 'ibStatus', 'ibSta', 'ibSre', 'ibSic', 'ibSad', 'ibRsv', 'ibRsp', 'ibRsc', 'ibRpp', 'ibRdf', 'ibRd', + 'ibPpc', 'ibPoke', 'ibPct', 'ibPad', 'ibOnl', 'ibMakeAddr', 'ibLock', 'ibLoc', 'ibLn', 'ibLines', 'ibIst', 'ibInit', + 'ibGts', 'ibGetSad', 'ibGetPad', 'ibFind', 'ibEvent', 'ibErr', 'ibEot', 'ibEos', 'iBegin', 'ibDma', 'ibDev', 'ibConfig', + 'ibCntl', 'ibCnt', 'ibCmda', 'ibCmd', 'ibClr', 'ibCac', 'ibBna', 'ibAsk', 'iAddr2Host', 'huge_Thousands', 'huge_Subtract', + 'huge_SetOptions', 'huge_Multiply', 'huge_GetLastError', 'huge_ExtenderInfo', 'huge_Divide', 'huge_Decimal', 'huge_Add', + 'httpStripHTML', 'httpRecvTextF', 'httpRecvText', 'httpRecvQuery', 'httpRecvQryF', 'httpRecvFile', 'httpGetServer', + 'httpGetQuery', 'httpGetPath', 'httpGetFile', 'httpGetDir', 'httpGetAnchor', 'httpFullPath', 'httpFirewall', 'httpAuth', + 'ftpRename', 'ftpQuote', 'ftpPut', 'ftpOpen', 'ftpList', 'ftpGet', 'ftpFirewall', 'ftpDelete', 'ftpClose', 'ftpChDir', + 'FindRQS', 'FindLstn', 'EnvSetVar', 'EnvPathDel', 'EnvPathChk', 'EnvPathAdd', 'EnvListVars', 'EnvGetVar', 'EnvGetInfo', + 'EnableRemote', 'EnableLocal', 'ehllapiWait', 'ehllapiVersion', 'ehllapiUninit', 'ehllapiStopKeyIntercept', 'ehllapiStopHostNotify', + 'ehllapiStopCloseIntercept', 'ehllapiStartKeyIntercept', 'ehllapiStartHostNotify', 'ehllapiStartCloseIntercept', + 'ehllapiSetWindowStatus', 'ehllapiSetSessionParams', 'ehllapiSetPSWindowName', 'ehllapiSetCursorLoc', 'ehllapiSendKey', + 'ehllapiSendFile', 'ehllapiSearchPS', 'ehllapiSearchField', 'ehllapiRunProfile', 'ehllapiResetSystem', 'ehllapiReserve', + 'ehllapiRelease', 'ehllapiReceiveFile', 'ehllapiQuerySystem', 'ehllapiQueryPSStatus', 'ehllapiQueryHostNotify', + 'ehllapiQueryFieldAttr', 'ehllapiQueryCursorLoc', 'ehllapiQueryCloseIntercept', 'ehllapiPostInterceptStatus', + 'ehllapiPause', 'ehllapiLastErrMsg', 'ehllapiInit', 'ehllapiGetWindowStatus', 'ehllapiGetPSHWND', 'ehllapiGetKey', + 'ehllapiFindFieldPos', 'ehllapiFindFieldLen', 'ehllapiDisconnectPS', 'ehllapiCvtRCToPos', 'ehllapiCvtPosToRC', + 'ehllapiCopyTextToPS', 'ehllapiCopyTextToField', 'ehllapiCopyTextFromPS', 'ehllapiCopyTextFromField', 'ehllapiCopyOIA', + 'ehllapiConnectPS', 'dunItemize', 'dunDisconnect', 'dunConnectEx', 'dunConnect', 'dsTestParam', 'dsSIDtoHexStr', 'dsSetSecProp', + 'dsSetProperty', 'dsSetPassword', 'dsSetObj', 'dsSetCredentX', 'dsSetCredent', 'dsRemFromGrp', 'dsRelSecObj', 'dsMoveObj', + 'dsIsObject', 'dsIsMemberGrp', 'dsIsContainer', 'dsGetUsersGrps', 'dsGetSecProp', 'dsGetPropName', 'dsGetProperty', + 'dsGetPrntPath', 'dsGetPrimGrp', 'dsGetMemGrp', 'dsGetInfo', 'dsGetClass', 'dsGetChldPath', 'dsFindPath', 'dsDeleteObj', + 'dsCreatSecObj', 'dsCreateObj', 'dsCopySecObj', 'dsAddToGrp', 'dsAclRemAce', 'dsAclOrderAce', 'dsAclGetAces', 'dsAclAddAce', + 'DevClearList', 'DevClear', 'dbTest', 'dbSwapColumns', 'dbSort', 'dbSetRecordField', 'dbSetOptions', 'dbSetErrorReporting', + 'dbSetEntireRecord', 'dbSetDelimiter', 'dbSave', 'dbOpen', 'dbNameColumn', 'dbMakeNewItem', 'dbInsertColumn', 'dbGetVersion', + 'dbGetSaveStatus', 'dbGetRecordField', 'dbGetRecordCount', 'dbGetNextItem', 'dbGetLastError', 'dbGetEntireRecord', + 'dbGetColumnType', 'dbGetColumnNumber', 'dbGetColumnName', 'dbGetColumnCount', 'dbFindRecord', 'dbExist', 'dbEasterEgg', + 'dbDeleteRecord', 'dbDeleteColumn', 'dbDebug', 'dbCookDatabases', 'dbClose', 'dbCloneRecord', 'dbBindCol', 'cWndState', + 'cWndinfo', 'cWndGetWndSpecName', 'cWndGetWndSpec', 'cWndexist', 'cWndByWndSpecName', 'cWndByWndSpec', 'cWndbyseq', + 'cWndbyname', 'cWndbyid', 'cWndbyclass', 'cWinIDConvert', 'cVersionInfo', 'cVendorId', 'cSetWndText', 'cSetUpDownPos', + 'cSetTvItem', 'cSetTrackPos', 'cSetTabItem', 'cSetLvItem', 'cSetLbItemEx', 'cSetLbItem', 'cSetIpAddr', 'cSetFocus', + 'cSetEditText', 'cSetDtpDate', 'cSetCbItem', 'cSetCalDate', 'cSendMessage', 'cRadioButton', 'cPostMessage', 'cPostButton', + 'cMemStat', 'cGetWndCursor', 'cGetUpDownPos', 'cGetUpDownMin', 'cGetUpDownMax', 'cGetTVItem', 'cGetTrackPos', 'cGetTrackMin', + 'cGetTrackMax', 'cGetTbText', 'cGetSbText', 'cGetLvText', 'cGetLvSelText', 'cGetLvFocText', 'cGetLvDdtText', 'cGetLvColText', + 'cGetLbText', 'cGetLbSelText', 'cGetLbCount', 'cGetIpAddr', 'cGetInfo', 'cGetHrText', 'cGetFocus', 'cGetEditText', 'cGetDtpDate', + 'cGetControlImageCRC', 'cGetCBText', 'cGetCbCount', 'cGetCalDate', 'cFindByName', 'cFindByClass', 'cEnablestate', 'cDblClickItem', + 'cCpuSupt', 'cCpuSpeed', 'cCpuIdExt', 'cCpuId', 'cCpuFeat', 'cCpuBenchmark', 'cCloneCheck', 'cClickToolbar', 'cClickButton', + 'cClearTvItem', 'cClearLvItem', 'cClearLbAll', 'cCheckbox', 'aVersion', 'aStatusbar', 'aShellFolder', 'aMsgTimeout', 'AllSPoll', + 'aGetLastError', 'aFileRename', 'aFileMove', 'aFileDelete', 'aFileCopy' + ), + 5 => array( + 'wWordRight', 'wWordLeft', 'wWinTile', 'wWinRestore', 'wWinNext', 'wWinMinimize', 'wWinMaximize', 'wWinCloseAll', 'wWinClose', + 'wWinCascade', 'wWinArricons', 'wViewOutput', 'wViewOptions', 'wViewHtml', 'wUpperCase', 'wUpline', 'wUndo', 'wTopOfFile', 'wToggleIns', + 'wTab', 'wStatusMsg', 'wStartSel', 'wSpellcheck', 'wSetProject', 'wSetPrefs', 'wSetColblk', 'wSetBookmark', 'wSelWordRight', + 'wSelWordLeft', 'wSelUp', 'wSelTop', 'wSelRight', 'wSelPgUp', 'wSelPgDn', 'wSelLeft', 'wSelInfo', 'wSelHome', 'wSelEnd', 'wSelectAll', + 'wSelDown', 'wSelBottom', 'wRunRebuild', 'wRunMake', 'wRunExecute', 'wRunDebug', 'wRunConfig', 'wRunCompile', 'wRunCommand', 'wRight', + 'wRepeat', 'wRedo', 'wRecord', 'wProperties', 'wPrintDirect', 'wPrinSetup', 'wPrevError', 'wPaste', 'wPageUp', 'wPageDown', 'wNextError', + 'wNewLine', 'wLowerCase', 'wLineCount', 'wLeft', 'wInvertCase', 'wInsString', 'wInsLine', 'wHome', 'wHelpKeyword', 'wHelpKeybrd', + 'wHelpIndex', 'wHelpHelp', 'wHelpCmds', 'wHelpAbout', 'wGotoLine', 'wGotoCol', 'wGetWrap', 'wGetWord', 'wGetUndo', 'wGetSelstate', + 'wGetRedo', 'wGetOutput', 'wGetModified', 'wGetLineNo', 'wGetIns', 'wGetFilename', 'wGetColNo', 'wGetChar', 'wFtpOpen', 'wFindNext', + 'wFindInFiles', 'wFind', 'wFileSaveAs', 'wFileSave', 'wFileRevert', 'wFilePrint', 'wFilePgSetup', 'wFileOpen', 'wFileNew', 'wFileMerge', + 'wFileList', 'wFileExit', 'wEndSel', 'wEndOfFile', 'wEnd', 'wEdWrap', 'wEdWordRight', 'wEdWordLeft', 'wEdUpLine', 'wEdUndo', 'wEdTopOfFile', + 'wEdToggleIns', 'wEdTab', 'wEdStartSel', 'wEdSetColBlk', 'wEdSelectAll', 'wEdRight', 'wEdRedo', 'wEdPaste', 'wEdPageUp', 'wEdPageDown', + 'wEdNewLine', 'wEdLeft', 'wEdInsString', 'wEdHome', 'wEdGoToLine', 'wEdGoToCol', 'wEdGetWord', 'wEdEndSel', 'wEdEndOfFile', 'wEdEnd', + 'wEdDownLine', 'wEdDelete', 'wEdCutLine', 'wEdCut', 'wEdCopyLine', 'wEdCopy', 'wEdClearSel', 'wEdBackTab', 'wEdBackspace', 'wDownLine', + 'wDelete', 'wDelButton', 'wCutMarked', 'wCutLine', 'wCutAppend', 'wCut', 'wCopyMarked', 'wCopyLine', 'wCopyAppend', 'wCopy', 'wCompile', + 'wClearSel', 'wChange', 'wCallMacro', 'wBackTab', 'wBackspace', 'wAutoIndent', 'wAddButton', 'edWindowTile', 'edWindowRestore', + 'edWindowNext', 'edWindowMinimize', 'edWindowMaximize', 'edWindowCloseall', 'edWindowClose', 'edWindowCascade', 'edWindowArrangeIcons', + 'edStatusMsg', 'edSearchViewOutput', 'edSearchRepeat', 'edSearchPrevError', 'edSearchNextError', 'edSearchFind', 'edSearchChange', + 'edRunRebuild', 'edRunMake', 'edRunExecute', 'edRunDebug', 'edRunConfigure', 'edRunCompile', 'edRunCommand', 'edRecord', 'edHelpProcedures', + 'edHelpKeyword', 'edHelpKeyboard', 'edHelpIndex', 'edHelpHelp', 'edHelpCommands', 'edHelpAbout', 'edGetWordWrapState', 'edGetWindowName', + 'edGetUndoState', 'edGetSelectionState', 'edGetRedoState', 'edGetModifiedStatus', 'edGetLineNumber', 'edGetInsertState', 'edGetColumnNumber', + 'edGetChar', 'edFileSetPreferences', 'edFileSaveAs', 'edFileSave', 'edFilePrinterSetup', 'edFilePrint', 'edFilePageSetup', 'edFileOpen', + 'edFileNew', 'edFileMerge', 'edFileList', 'edFileExit', 'edEditWrap', 'edEditWordRight', 'edEditWordLeft', 'edEditUpLine', 'edEditUndo', + 'edEditToggleIns', 'edEditTab', 'edEditStartSelection', 'edEditSetColumnBlock', 'edEditSetBookmark', 'edEditSelectAll', 'edEditRight', + 'edEditRedo', 'edEditPaste', 'edEditPageUp', 'edEditPageDown', 'edEditLeft', 'edEditInsertString', 'edEditGoToLine', 'edEditGoToColumn', + 'edEditGoToBookmark', 'edEditGetCurrentWord', 'edEditEndSelection', 'edEditEndOfLine', 'edEditEndOfFile', 'edEditDownline', 'edEditDelete', + 'edEditCutline', 'edEditCut', 'edEditCopyline', 'edEditCopy', 'edEditClearSelection', 'edEditBeginningOfLine', 'edEditBeginningOfFile', + 'edEditBackTab', 'edEditBackspace', 'edDeleteButton', 'edAddButton' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '+', '-', '~', '$', '^', '?', '@', '%', '#', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #800080;', + 2 => 'color: #0080FF; font-weight: bold;', + 3 => 'color: #0000FF;', + 4 => 'color: #FF00FF;', + 5 => 'color: #008000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000; font-style: italic;', + 2 => 'color: #FF1010; font-weight: bold;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/xml.php b/ehcp/net2ftp/plugins/geshi/geshi/xml.php new file mode 100644 index 0000000..3c38f9c --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/xml.php @@ -0,0 +1,146 @@ + 'XML', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(''), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #ddbb00;', + 2 => 'color: #339933;', + 3 => 'color: #009900;' + ), + 'REGEXPS' => array( + 0 => 'color: #000066;', + 1 => 'font-weight: bold; color: black;', + 2 => 'font-weight: bold; color: black;', + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '([a-z_\-:]+)(=)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + 1 => array( + GESHI_SEARCH => '(<[/?|(\?xml)]?[a-z0-9_\-:]*(\??>)?)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(([/|\?])?>)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '&' => ';' + ), + 2 => array( + ' ']]>' + ), + 3 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false, + 2 => false, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/xpp.php b/ehcp/net2ftp/plugins/geshi/geshi/xpp.php new file mode 100644 index 0000000..3bb06b9 --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/xpp.php @@ -0,0 +1,433 @@ + + * + * CHANGES + * ------- + * 2007/02/28 (1.0.0) + * - First Release + * + * TODO (updated 2007/02/27) + * ------------------------- + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GeSHi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'X++', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( // Primitive types + 'void', + 'str', + 'real', + 'int64', + 'int', + 'date', + 'container', + 'boolean', + 'anytype' + ), + 2 => array( // Keywords + 'window', + 'while', + 'try', + 'true', + 'throw', + 'switch', + 'super', + 'static', + 'server', + 'right', + 'return', + 'retry', + 'public', + 'protected', + 'private', + 'print', + 'pause', + 'null', + 'new', + 'mod', + 'left', + 'interface', + 'implements', + 'if', + 'for', + 'final', + 'false', + 'extends', + 'else', + 'edit', + 'do', + 'div', + 'display', + 'default', + 'continue', + 'client', + 'class', + 'changeCompany', + 'case', + 'breakpoint', + 'break', + 'at', + 'abstract' + ), + 3 => array( // Functions within the Axapta kernel + 'year', + 'wkofyr', + 'webwebpartstr', + 'webstaticfilestr', + 'websitetempstr', + 'websitedefstr', + 'webreportstr', + 'webpagedefstr', + 'weboutputcontentitemstr', + 'webmenustr', + 'webletitemstr', + 'webformstr', + 'webdisplaycontentitemstr', + 'webactionitemstr', + 'varstr', + 'utilmoyr', + 'uint2str', + 'typeof', + 'typeid', + 'trunc', + 'today', + 'timenow', + 'time2str', + 'term', + 'tanh', + 'tan', + 'tablestr', + 'tablestaticmethodstr', + 'tablepname', + 'tablenum', + 'tablename2id', + 'tablemethodstr', + 'tableid2pname', + 'tableid2name', + 'tablefieldgroupstr', + 'tablecollectionstr', + 'systemdateset', + 'systemdateget', + 'syd', + 'substr', + 'strupr', + 'strscan', + 'strrtrim', + 'strrep', + 'strrem', + 'strprompt', + 'strpoke', + 'strnfind', + 'strlwr', + 'strltrim', + 'strline', + 'strlen', + 'strkeep', + 'strins', + 'strfmt', + 'strfind', + 'strdel', + 'strcolseq', + 'strcmp', + 'stralpha', + 'str2time', + 'str2num', + 'str2int64', + 'str2int', + 'str2guid', + 'str2enum', + 'str2date', + 'staticmethodstr', + 'sln', + 'sleep', + 'sinh', + 'sin', + 'setprefix', + 'sessionid', + 'securitykeystr', + 'securitykeynum', + 'runbuf', + 'runas', + 'round', + 'resourcestr', + 'reportstr', + 'refprintall', + 'rate', + 'querystr', + 'pv', + 'pt', + 'prmisdefault', + 'primoyr', + 'prevyr', + 'prevqtr', + 'prevmth', + 'power', + 'pmt', + 'num2str', + 'num2date', + 'num2char', + 'nextyr', + 'nextqtr', + 'nextmth', + 'newguid', + 'mthofyr', + 'mthname', + 'mkdate', + 'minint', + 'min', + 'methodstr', + 'menustr', + 'menuitemoutputstr', + 'menuitemdisplaystr', + 'menuitemactionstr', + 'maxint', + 'maxdate', + 'max', + 'match', + 'logn', + 'log10', + 'literalstr', + 'licensecodestr', + 'licensecodenum', + 'intvnorm', + 'intvno', + 'intvname', + 'intvmax', + 'int64str', + 'int64str', + 'indexstr', + 'indexnum', + 'indexname2id', + 'indexid2name', + 'idg', + 'identifierstr', + 'helpfilestr', + 'helpdevstr', + 'helpapplstr', + 'guid2str', + 'getprefix', + 'getCurrentUTCTime', + 'fv', + 'funcname', + 'frac', + 'formstr', + 'fieldstr', + 'fieldpname', + 'fieldnum', + 'fieldname2id', + 'fieldid2pname', + 'fieldid2name', + 'extendedTypeStr', + 'extendedTypeNum', + 'exp10', + 'exp', + 'evalbuf', + 'enumstr', + 'enumnum', + 'enumcnt', + 'enum2str', + 'endmth', + 'dimof', + 'dg', + 'decround', + 'ddb', + 'dayofyr', + 'dayofwk', + 'dayofmth', + 'dayname', + 'date2str', + 'date2num', + 'curuserid', + 'curext', + 'cterm', + 'cosh', + 'cos', + 'corrflagset', + 'corrflagget', + 'convertUTCTimeToLocalTime', + 'convertUTCDateToLocalDate', + 'conpoke', + 'conpeek', + 'connull', + 'conlen', + 'conins', + 'confind', + 'configurationkeystr', + 'configurationkeynum', + 'condel', + 'classstr', + 'classnum', + 'classidget', + 'char2num', + 'beep', + 'atan', + 'asin', + 'ascii2ansi', + 'any2str', + 'any2real', + 'any2int64', + 'any2int', + 'any2guid', + 'any2enum', + 'any2date', + 'ansi2ascii', + 'acos', + 'abs' + ), + 4 => array( // X++ SQL stuff + 'where', + 'update_recordset', + 'ttsCommit', + 'ttsBegin', + 'ttsAbort', + 'sum', + 'setting', + 'select', + 'reverse', + 'pessimisticLock', + 'outer', + 'order by', + 'optimisticLock', + 'notExists', + 'noFetch', + 'next', + 'minof', + 'maxof', + 'like', + 'join', + 'insert_recordset', + 'index hint', + 'index', + 'group by', + 'from', + 'forUpdate', + 'forceSelectOrder', + 'forcePlaceholders', + 'forceNestedLoop', + 'forceLiterals', + 'flush', + 'firstOnly', + 'firstFast', + 'exists', + 'desc', + 'delete_from', + 'count', + 'avg', + 'asc' + ) + ), + 'SYMBOLS' => array( // X++ symbols + '!', + '&', + '(', + ')', + '*', + '^', + '|', + '~', + '+', + ',', + '-', + '/', + ':', + '<', + '=', + '>', + '?', + '[', + ']', + '{', + '}' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000ff;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #007f00;', + 'MULTI' => 'color: #007f00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000000;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000000;' + ), + 'METHODS' => array( + 1 => 'color: #000000;', + 2 => 'color: #000000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #00007f;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/ehcp/net2ftp/plugins/geshi/geshi/z80.php b/ehcp/net2ftp/plugins/geshi/geshi/z80.php new file mode 100644 index 0000000..7feb5cb --- /dev/null +++ b/ehcp/net2ftp/plugins/geshi/geshi/z80.php @@ -0,0 +1,136 @@ + 'ZiLOG Z80 Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'adc','add','and','bit','call','ccf','cp','cpd','cpdr','cpir','cpi', + 'cpl','daa','dec','di','djnz','ei','ex','exx','halt','im','in', + 'in0','inc','ind','indr','inir','ini','jp','jr','ld','ldd','lddr', + 'ldir','ldi','mlt','neg','nop','or','otdm','otdmr','otdr','otim', + 'otimr','otir','out','out0','outd','outi','pop','push','res','ret', + 'reti','retn','rl','rla','rlc','rlca','rld','rr','rra','rrc','rrca', + 'rrd','rst','sbc','scf','set','sla','sl1','sll','slp','sra','srl', + 'sub','tst','tstio','xor' + ), + /*registers*/ + 2 => array( + 'a','b','c','d','e','h','l', + 'af','bc','de','hl','ix','iy','sp', + 'af\'','ixh','ixl','iyh','iyl' + ), + /*Directive*/ + 3 => array( + '#define','#endif','#else','#ifdef','#ifndef','#include','#undef', + '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ' + ), + ), + 'SYMBOLS' => array( + '[', ']', '(', ')', '?', '+', '-', '*', '/', '%', '$' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff; font-weight:bold;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000ff;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #dd22dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + 0 => 'color: #22bbff;', + 1 => 'color: #22bbff;', + 2 => 'color: #993333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '0[0-9a-fA-F]{1,32}[hH]', + 1 => '\%[01]{1,64}[bB]', + 2 => '^[_a-zA-Z][_a-zA-Z0-9]{0,50}\:' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/ehcp/net2ftp/plugins/jscalendar/ChangeLog b/ehcp/net2ftp/plugins/jscalendar/ChangeLog new file mode 100644 index 0000000..712f773 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/ChangeLog @@ -0,0 +1,761 @@ +2005-03-07 Mihai Bazon + + * skins/aqua/theme.css: *** empty log message *** + + * release-notes.html: updated release notes + + * calendar-setup.js: + use a better approach to initialize the calendar--don't call _init twice, + it's the most time consuming function in the calendar. Instead, determine + the date beforehand if possible and pass it to the calendar at constructor. + + * calendar.js: + avoid keyboard operation when 'multiple dates' is set (very buggy for now) + + * calendar.js: + fixed keyboard handling problems: now it works fine when "showsOtherMonths" + is passed; it also seems to be fine with disabled dates (won't normally + allow selection)--however this area is still likely to be buggy, i.e. in a + month that has all the dates disabled. + + * calendar.js: + some trivial performance improvements in the _init function + Added Date.parseDate (old Calendar.prototype.parseDate now calls this one) + +2005-03-05 Mihai Bazon + + * release-notes.html: updated release notes + + * dayinfo.html: *** empty log message *** + + * calendar-setup.js: + bugfix--update an inputField even if flat calendar is selected + + * calendar.js: + fixed bugs in parseDate function (if for some reason the input string is + totally broken, then check numbers for NaN and use values from the current + date instead) + + * make-release.pl: copy the skins subdirectory and all skins + + * index.html: added Aqua skin + + * skins/aqua/active-bg.gif, skins/aqua/dark-bg.gif, skins/aqua/hover-bg.gif, skins/aqua/menuarrow.gif, skins/aqua/normal-bg.gif, skins/aqua/rowhover-bg.gif, skins/aqua/status-bg.gif, skins/aqua/theme.css, skins/aqua/title-bg.gif, skins/aqua/today-bg.gif: + in the future, skins will go to this directory, each in a separate subdir; for now there's only Aqua, an excellent new skin + + * calendar.js: workaround IE bug, needed in the Aqua theme + don't hide select elements unless browser is IE or Opera + + * lang/calendar-bg.js, lang/calendar-big5-utf8.js, lang/calendar-big5.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-utf8.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-de.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fi.js, lang/calendar-fr.js, lang/calendar-he-utf8.js, lang/calendar-hu.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-lt-utf8.js, lang/calendar-lt.js, lang/calendar-lv.js, lang/calendar-nl.js, lang/calendar-no.js, lang/calendar-pl-utf8.js, lang/calendar-pl.js, lang/calendar-pt.js, lang/calendar-ro.js, lang/calendar-ru.js, lang/calendar-ru_win_.js, lang/calendar-si.js, lang/calendar-sk.js, lang/calendar-sp.js, lang/calendar-sv.js, lang/calendar-zh.js, lang/cn_utf8.js: + updated urls, copyright notices + + * doc/reference.tex: updated documentation + + * calendar.js, index.html: + renamed the global variable to _dynarch_popupCalendar to avoid name clashes + + * multiple-dates.html: start with an empty array + + * calendar.js: + fixed bugs in the time selector (12:XX pm was wrongfully understood as 12:XX am) + + * calendar.js: + using innerHTML instead of text nodes; works better in Safari and also makes + a smaller, cleaner code + +2005-03-04 Mihai Bazon + + * calendar.js: + fixed a performance regression that occurred after adding support for multiple dates + fixed the time selection bug (now it keeps time correctly) + clicking today will close the calendar if "today" is already selected + + * lang/cn_utf8.js: new translation + +2005-02-17 Mihai Bazon + + * lang/calendar-ar-utf8.zip: Added arabic translation + +2004-10-19 Mihai Bazon + + * lang/calendar-zh.js: updated + +2004-09-20 Mihai Bazon + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-09-20 Mihai Bazon + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-08-11 Mihai Bazon + + * lang/calendar-nl.js: updated language file (thanks to Arjen Duursma) + + * lang/calendar-sp.js: updated (thanks to Rafael Velasco) + +2004-07-21 Mihai Bazon + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-21 Mihai Bazon + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-04 Mihai Bazon + + * lang/calendar-lv.js: + added LV translation (thanks to Juris Valdovskis) + +2004-06-25 Mihai Bazon + + * calendar.js: + fixed bug in IE (el.calendar.tooltips is null or not an object) + +2004-06-24 Mihai Bazon + + * doc/reference.tex: fixed latex compilation + + * index.html: linking other sample files + + * calendar-setup.js, calendar.js, dayinfo.html: + ability to display day info (dateText parameter) + sample file + +2004-06-23 Mihai Bazon + + * doc/reference.tex, lang/calendar-bg.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-nl.js, lang/calendar-sv.js, README, calendar.js, index.html: + email address changed + +2004-06-14 Mihai Bazon + + * lang/calendar-cs-utf8.js, lang/calendar-cs-win.js: + updated translations + + * calendar-system.css: added z-index to drop downs + + * lang/calendar-en.js: + first day of week can now be part of the language file + + * lang/calendar-es.js: + updated language file (thanks to Servilio Afre Puentes) + + * calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar-blue.css: + added z-index property to drop downs (fixes bug) + +2004-06-13 Mihai Bazon + + * calendar-setup.js: fixed bug (apply showOthers to flat calendars too) + +2004-06-06 Mihai Bazon + + * calendar-setup.js: + firstDay defaults to "null", in which case the value in the language file + will be used + + * calendar.js: + firstDayOfWeek can now default to a value specified in the language definition file + + * index.html: first day of week is now numeric + +2004-06-02 Mihai Bazon + + * calendar.js: added date tooltip function + +2004-05-28 Mihai Bazon + + * lang/calendar-br.js: updated (thanks to Marcos Pont) + + * calendar-setup.js: fixed small bug + +2004-05-01 Mihai Bazon + + * calendar-setup.js: returns the calendar object + +2004-04-28 Mihai Bazon + + * calendar-setup.js: + patch to read the date value from the inputField, according to ifFormat (if + both are passed), for flat calendars. (thanks Colin T. Hill) + +2004-04-20 Mihai Bazon + + * calendar-setup.js, calendar.js, multiple-dates.html: + added support for multiple dates selection + + * lang/calendar-nl.js: + updated Dutch translation, thanks to Jeroen Wolsink + + * lang/calendar-big5-utf8.js, lang/calendar-big5.js: + Traditional Chinese language (thanks GaryFu) + +2004-03-26 Mihai Bazon + + * lang/calendar-fr.js, lang/calendar-pt.js: updated + + * lang/calendar-ru_win_.js, lang/calendar-ru.js: + updated, thanks to Sly Golovanov + +2004-03-25 Mihai Bazon + + * lang/calendar-fr.js: updated (thanks to David Duret) + +2004-03-24 Mihai Bazon + + * lang/calendar-da.js: updated (thanks to Michael Thingmand Henriksen) + +2004-03-21 Mihai Bazon + + * lang/calendar-ca.js: updated (thanks to David Valls) + +2004-03-17 Mihai Bazon + + * lang/calendar-de.js: updated to UTF8 (thanks to Jack (tR)) + +2004-03-09 Mihai Bazon + + * lang/calendar-bg.js: Bulgarian translation + +2004-03-08 Mihai Bazon + + * lang/calendar-he-utf8.js: Hebrew translation (thanks to Idan Sofer) + + * lang/calendar-hu.js: updated (thanks to Istvan Karaszi) + +2004-02-27 Mihai Bazon + + * lang/calendar-it.js: updated (thanks to Fabio Di Bernardini) + +2004-02-25 Mihai Bazon + + * calendar.js: fix for Safari (thanks to Olivier Chirouze / XPWeb) + +2004-02-22 Mihai Bazon + + * lang/calendar-al.js: Albanian language file + +2004-02-17 Mihai Bazon + + * lang/calendar-fr.js: fixed + + * lang/calendar-fr.js: + FR translation updated (thanks to SIMON Alexandre) + + * lang/calendar-es.js: ES translation updated, thanks to David Gonzales + +2004-02-10 Mihai Bazon + + * lang/calendar-pt.js: + updated Portugese translation, thanks to Elcio Ferreira + +2004-02-09 Mihai Bazon + + * TODO: updated + +2004-02-06 Mihai Bazon + + * README: describe the PHP files + + * make-release.pl: includes php files + + * make-release.pl: ChangeLog included in the distribution (if found) + + * calendar.js, doc/reference.tex, index.html: switched to version 0.9.6 + + * doc/Calendar.setup.tex, doc/reference.tex: updated documentation + + * release-notes.html: updated release notes + + * calendar.js: Fixed bug: Feb/29 and year change now keeps Feb in view + + * calendar.js: fixed the "ESC" problem (call the close handler) + + * calendar.js: fixed day of year range (1 to 366 instead of 0 to 365) + + * calendar.js: fixed week number calculations + + * doc/reference.tex: fixed (date input format) + + * calendar.php: removed comment + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js: + workaround for IE bug (you can't normally specify through CSS the style for + an element having two classes or more; we had to change a classname) + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + smaller fonts on days that are in neighbor months + +2004-02-04 Mihai Bazon + + * index.html: first demo shows the "showOtherMonths" capability + + * calendar-setup.js: support new parameters in the calendar. + added: firstDay, showOthers, cache. + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, lang/calendar-en.js, lang/calendar-ro.js: + new parameters: firstDayOfWeek, showsOtherMonths; removed mondayFirst. + This adds support for setting any day to be the first day of week (by just + clicking the day name in the display); also, if showsOtherMonths is enabled + then dates belonging to adjacent months that are in the current view will be + displayed and the calendar will have a fixed height. + + all themes updated. + + * test.php: test for calendar.php + + * calendar.php: fixed bug (pass numeric values as numbers) + +2004-02-01 Mihai Bazon + + * calendar.php: added PHP wrapper + + * img.gif: icon updated + + * TODO: updated TODO list + +2004-01-27 Mihai Bazon + + * calendar.js: + Janusz Piwowarski sent over a patch for IE5 compatibility which is much more + elegant than the atrocities that I had wrote :-D I'm gettin' old.. Thanks Janusz! + + * lang/calendar-fi.js: updated + +2004-01-15 Mihai Bazon + + * TODO: updated TODO list + + * calendar-setup.js: default align changed to "Br" + + * doc/reference.tex: changed default value for "align" + + * calendar-setup.js: calling onchange event handler, if available + + * calendar-setup.js: added "position" option + + * simple-1.html: demonstrates "step" option + + * calendar-setup.js: added "step" option + + * calendar.js: added yearStep config parameter + + * calendar.js: + fixed parseDate routine (the NaN bug which occurred when there was a space + after the date and no time) + +2004-01-14 Mihai Bazon + + * lang/calendar-en.js: added "Time:" + + * test-position.html: test for the new position algorithm + + * index.html: do not destroy() the calendar + avoid bug in parseDate (%p must be separated by non-word characters) + + * menuarrow2.gif: for calendar-blue2.css + + * calendar-setup.js: honor "date" parameter if passed + + * calendar.js: IE5 support is back + performance improvements in IE6 (mouseover combo boxes) + display "Time:" beside the clock area, if defined in the language file + new positioning algorithm (try to keep the calendar in page) + rewrote parseDate a little cleaner + + * lang/calendar-el.js: + updated Greek translation (thanks Alexandros Pappas) + +2004-01-13 Mihai Bazon + + * index.html: added style blue2, using utf-8 instead of iso-8859-2 + + * calendar.js: performance under IE (which sucks, by the way) + + * doc/reference.tex: Sunny added to sponsor list + + * doc/Calendar.setup.tex: documenting parameter 'electric' + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + fixed IE text size problems + +2004-01-08 Mihai Bazon + + * lang/calendar-pl.js: + Polish translation updated to UTF-8 (thanks to Artur Filipiak) + +2004-01-07 Mihai Bazon + + * lang/calendar-si.js: updated (David Milost) + + * lang/calendar-si.js: Slovenian translation (thanks to David Milost) + +2003-12-21 Mihai Bazon + + * TODO: updated TODO list + + * lang/calendar-de.js: German translation (thanks to Peter Strotmann) + +2003-12-19 Mihai Bazon + + * doc/reference.tex: Thank you, Ian Barrak + +2003-12-18 Mihai Bazon + + * doc/reference.tex: fixed documentation bug (thanks Mike) + +2003-12-05 Mihai Bazon + + * lang/calendar-ko-utf8.js: + UTF8 version of the Korean language (hopefully correct) + + * lang/calendar-pl-utf8.js, lang/calendar-pl.js: + updated Polish translation (thanks to Janusz Piwowarski) + +2003-12-04 Mihai Bazon + + * lang/calendar-fr.js: + French translation updated (thanks to Angiras Rama) + +2003-11-22 Mihai Bazon + + * lang/calendar-da.js: updated (thanks to Jesper M. Christensen) + +2003-11-20 Mihai Bazon + + * calendar-blue2.css, calendar-tas.css: + new styles (thanks to Wendall Mosemann for blue2, Mark Lynch for tas) + + * lang/calendar-lt-utf8.js, lang/calendar-lt.js: + Lithuanian translation (thanks to Martynas Majeris) + + * lang/calendar-sp.js: updated + +2003-11-17 Mihai Bazon + + * TODO: added TODO list + +2003-11-14 Mihai Bazon + + * lang/calendar-ko.js: Korean translation (thanks to Yourim Yi) + +2003-11-12 Mihai Bazon + + * lang/calendar-jp.js: small bug fixed (thanks to TAHARA Yusei) + +2003-11-10 Mihai Bazon + + * lang/calendar-fr.js: translation updated, thanks to Florent Ramiere + + * calendar-setup.js: + added new parameter: electric (if false then the field will not get updated on each move) + + * index.html: fixed DOCTYPE + +2003-11-07 Mihai Bazon + + * calendar-setup.js: + fixed minor problem (maybe we're passing object reference instead of ID for + the flat calendar parent) + +2003-11-06 Mihai Bazon + + * lang/calendar-fi.js: + added Finnish translation (thanks to Antti Tuppurainen) + +2003-11-05 Mihai Bazon + + * release-notes.html: fixed typo + + * doc/reference.tex, index.html, calendar.js: 0.9.5 + + * README: fixed license statement + + * release-notes.html: updated release notes (0.9.5) + +2003-11-03 Mihai Bazon + + * lang/calendar-de.js: + updated German translation (thanks to Gerhard Neiner) + + * calendar-setup.js: fixed license statement + + * calendar.js: whitespace + + * calendar.js: fixed license statement + + * calendar.js: + fixed positioning problem when input field is inside scrolled divs + +2003-11-01 Mihai Bazon + + * lang/calendar-af.js: Afrikaan language (thanks to Derick Olivier) + +2003-10-31 Mihai Bazon + + * lang/calendar-it.js: + updated IT translation (thanks to Christian Blaser) + + * lang/calendar-es.js: updated ES translation, thanks to Raul + +2003-10-30 Mihai Bazon + + * lang/calendar-hu.js: updated thanks to Istvan Karaszi + + * index.html, simple-1.html, simple-2.html, simple-3.html: + switched to utf-8 all encodings + + * lang/calendar-sk.js: + added Slovak translation (thanks to Peter Valach) + + * lang/calendar-ro.js: switched to utf-8 + +2003-10-29 Mihai Bazon + + * lang/calendar-es.js: + updated translation, thanks to Jose Ma. Martinez Miralles + + * doc/reference.tex: + fixed the footnote problem (thanks Dominique de Waleffe for the tip) + + * lang/calendar-ro.js: fixed typo + + * lang/calendar-sv.js: oops, license should be LGPL + + * lang/calendar-sw.js: new swedish translation is calendar-sv.js + + * menuarrow.gif, menuarrow.png: + oops, forgot little drop-down menu arrows + + * lang/calendar-sv.js: swedish translation thanks to Leonard Norrgard + + * index.html: oops, some other minor changes + + * index.html, release-notes.html: + latest changes in release-notes and index page for 0.9.4 + + * doc/reference.tex, calendar.js: + added %s date format (# of seconds since Epoch) + + * calendar.js: + A click on TODAY will not close the calendar, even in single-click mode + +2003-10-28 Mihai Bazon + + * index.html: previous cal.html + + * cal.html: moved to index.html + + * README, cal.html, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, release-notes.html: + LGPL license, forever. + + * doc/Calendar.setup.tex, simple-1.html: + doc updated for the onUpdate parameter to Calendar.setup + +2003-10-26 Mihai Bazon + + * calendar.js: fixed bug (correct display of the dropdown menus) + + * doc/Calendar.setup.tex, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-setup.js, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, release-notes.html, simple-1.html, simple-3.html: + lots of changes for the 0.9.4 release (see the release-notes.html) + +2003-10-15 Mihai Bazon + + * doc/reference.tex: + documentation updated for 0.9.4 (not yet finished though) + +2003-10-07 Mihai Bazon + + * calendar.js, doc/reference.tex, release-notes.html, README, cal.html, calendar-setup.js: + modified project website + +2003-10-06 Mihai Bazon + + * calendar-setup.js: + added some properties (onSelect, onClose, date) (thanks altblue) + +2003-09-24 Mihai Bazon + + * simple-3.html: dateIsSpecial does not need the "date" argument ;-) + +2003-09-24 fsoft + + * calendar.js, simple-3.html: + added year, month, day to getDateStatus() function + +2003-09-24 Mihai Bazon + + * simple-3.html: example on how to use special dates + + * calendar-setup.js, calendar.js, simple-1.html: + support for special dates (thanks fabio) + +2003-09-17 Mihai Bazon + + * doc/reference.tex: fixed error in section 3. + +2003-08-01 Mihai Bazon + + * lang/calendar-jp.js: added Japanese translation + +2003-07-16 Mihai Bazon + + * simple-1.html: fixed problem with first example [IE,Opera] + +2003-07-09 Mihai Bazon + + * doc/Calendar.setup.tex: fixed typo (closing parenthesis) + + * lang/calendar-de.js: + added German translation, thanks to Hartwig Weinkauf + +2003-07-08 Mihai Bazon + + * cal.html: added link to release-notes + + * release-notes.html: 0.9.3 release notes + + * make-release.pl: + Script to create distribution archive. It needs some additional packages: + + - LaTeX + - tex2page + - jscrunch (JS compressor) + + * doc/html/makedoc.sh, doc/html/reference.css, doc/reference.tex, doc/makedoc.sh: + documentation updates... + + * calendar.js: added semicolon to make the code "compressible" + +2003-07-06 Mihai Bazon + + * doc/reference.tex: spell checked + + * doc/reference.tex: [minor] changed credits order + + * doc/reference.tex: various improvements and additions + + * doc/html/reference.css: minor eye-candy tweaks + +2003-07-05 Mihai Bazon + + * doc/html/Calendar.setup.html.tex, doc/html/makedoc.sh, doc/html/reference.css, doc/html/reference.t2p, doc/hyperref.cfg, doc/makedoc.sh, doc/reference.tex, doc/Calendar.setup.tex, doc/Calendar.setup.pdf.tex: + full documentation in LaTeX, for PDF and HTML formats + + * simple-2.html: + added demonstration of flat calendar with Calendar.setup + + * simple-1.html: + modified some links, added link to documentation, added demonstration of + disableFunc property + + * calendar-setup.js: added the ability to create flat calendar too + + * cal.html: added links to documentation and simple-[12].html pages + + * README: up-to-date... + + * calendar-setup.html: removed: the documentation is unified + +2003-07-03 Mihai Bazon + + * cal.html: some links to newly added files + + * calendar-setup.html, calendar-setup.js, img.gif, simple-1.html: + added some files to simplify calendar creation for non-(JS)-programmers + + * lang/calendar-zh.js: added simplified chinese (thanks ATang) + +2003-07-02 Mihai Bazon + + * calendar.js: * "yy"-related... [small fix] + + * calendar.js: + * #721833 fixed (yy format will understand years prior to 29 as 20xx) + + * calendar.js: * added refresh() function + + * calendar.js: * fixed bug when in single click mode + * added alignment options to "showAtElement" member function + +2003-06-25 Mihai Bazon + + * lang/calendar-pt.js: + added portugese translation (thanks Nuno Barreto) + +2003-06-24 Mihai Bazon + + * calendar.js: + call user handler when the date was changed using the keyboard + + * bugtest-hidden-selects.html: + file to test bug with hidden select-s (thanks Ying Zhang for reporting and for this test file) + + * lang/calendar-hr-utf8.js: + added croatian translation in utf8 (thanks Krunoslav Zubrinic) + +2003-06-23 Mihai Bazon + + * lang/calendar-hu.js: added hungarian translation + + * lang/calendar-hr.js: + added croatian translation (thanks to Krunoslav Zubrinic) + +2003-06-22 Mihai Bazon + + * calendar.js: + * #723335 fixed (clicking TODAY will not select the today date if the + disabledHandler rejects it) + + * cal.html: * new code for to work with fix for bug #703238 + * switch to new version + + * calendar.js: + * some patches to make code compatible with Opera 7 (well, almost compatible) + * bug #703238 fixed (fix breaks compatibility with older code that uses + calendar in single-click mode) + * bug #703814 fixed + +2003-04-09 Mihai Bazon + + * lang/calendar-tr.js: added turkish lang file + +2003-03-19 Mihai Bazon + + * lang/calendar-ru.js: russian translation added + + * lang/calendar-no.js: norwegian translation added + +2003-03-15 Mihai Bazon + + * lang/calendar-no.js: norwegian translation + +2003-03-12 Mihai Bazon + + * lang/calendar-pl.js: added polish translation + +2003-03-11 Mihai Bazon + + * calendar.js: + bugfix in parseDate (added base to parseInt, thanks Alan!) + +2003-03-05 Mihai Bazon + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + New file. + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + New file. + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + diff --git a/ehcp/net2ftp/plugins/jscalendar/README b/ehcp/net2ftp/plugins/jscalendar/README new file mode 100644 index 0000000..455ab3d --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/README @@ -0,0 +1,33 @@ +The DHTML Calendar +------------------- + + Author: Mihai Bazon, + http://dynarch.com/mishoo/ + + This program is free software published under the + terms of the GNU Lesser General Public License. + + For the entire license text please refer to + http://www.gnu.org/licenses/lgpl.html + +Contents +--------- + + calendar.js -- the main program file + lang/*.js -- internalization files + *.css -- color themes + cal.html -- example usage file + doc/ -- documentation, in PDF and HTML + simple-1.html -- quick setup examples [popup calendars] + simple-2.html -- quick setup example for flat calendar + calendar.php -- PHP wrapper + test.php -- test file for the PHP wrapper + +Homepage +--------- + + For details and latest versions please refer to calendar + homepage, located on my website: + + http://dynarch.com/mishoo/calendar.epl + diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-blue.css b/ehcp/net2ftp/plugins/jscalendar/calendar-blue.css new file mode 100644 index 0000000..62ecf99 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-blue.css @@ -0,0 +1,232 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #556; + font-size: 11px; + color: #000; + cursor: default; + background: #eef; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #778 url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #fff; + color: #000; + padding: 2px; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + background: #778; + color: #fff; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #bdf; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #556; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #aaf; + color: #000; + border: 1px solid #04f; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #77c; + padding: 2px 0px 0px 2px; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #456; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #bdf; +} + +.calendar tbody .rowhilite td { + background: #def; +} + +.calendar tbody .rowhilite td.wn { + background: #eef; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #def; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #cde; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fff; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { /* Cell showing selected date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #556; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #fff; + color: #445; + border-top: 1px solid #556; + padding: 1px; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #aaf; + border: 1px solid #04f; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #77c; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #def; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #acf; +} + +.calendar .combo .active { + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + background: #eef; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-blue2.css b/ehcp/net2ftp/plugins/jscalendar/calendar-blue2.css new file mode 100644 index 0000000..8570aff --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-blue2.css @@ -0,0 +1,236 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #206A9B; + font-size: 11px; + color: #000; + cursor: default; + background: #F1F8FC; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #007ED1 url(menuarrow2.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #000; + color: #fff; + padding: 2px; +} + +.calendar thead tr { /* Row containing navigation buttons */ + background: #007ED1; + color: #fff; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #C7E1F3; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #206A9B; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #34ABFA; + color: #000; + border: 1px solid #016DC5; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #006AA9; + border: 1px solid #008AFF; + padding: 2px 0px 0px 2px; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #456; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #C7E1F3; +} + +.calendar tbody .rowhilite td { + background: #def; +} + +.calendar tbody .rowhilite td.wn { + background: #F1F8FC; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #def; + padding: 1px 3px 1px 1px; + border: 1px solid #8FC4E8; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #cde; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fff; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { /* Cell showing selected date */ + font-weight: bold; + color: #D50000; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #206A9B; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #000; + color: #fff; + border-top: 1px solid #206A9B; + padding: 1px; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #B8DAF0; + border: 1px solid #178AEB; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #006AA9; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #def; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #34ABFA; + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + font-weight: bold; +} + +.calendar .combo .active { + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + background: #F1F8FC; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #E3F0F9; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #F1F8FC; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #267DB7; + color: #fff; +} + +.calendar td.time span.active { + border-color: red; + background-color: #000; + color: #A5FF00; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-brown.css b/ehcp/net2ftp/plugins/jscalendar/calendar-brown.css new file mode 100644 index 0000000..e7b6285 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-brown.css @@ -0,0 +1,225 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #655; + font-size: 11px; + color: #000; + cursor: default; + background: #ffd; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #edc url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #654; + color: #fed; + padding: 2px; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + background: #edc; + color: #000; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #655; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #faa; + color: #000; + border: 1px solid #f40; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #c77; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #fed; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #fed; +} + +.calendar tbody .rowhilite td { + background: #ddf; +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #ffe; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #ddc; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fea; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { font-weight: bold; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #988; + color: #000; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + border-top: 1px solid #655; + background: #dcb; + color: #840; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #faa; + border: 1px solid #f40; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #c77; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #ffe; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #fc8; +} + +.calendar .combo .active { + border-top: 1px solid #a64; + border-bottom: 1px solid #a64; + background: #fee; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #a88; + padding: 1px 0px; + text-align: center; + background-color: #fed; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #988; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #866; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-green.css b/ehcp/net2ftp/plugins/jscalendar/calendar-green.css new file mode 100644 index 0000000..564666d --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-green.css @@ -0,0 +1,229 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #565; + font-size: 11px; + color: #000; + cursor: default; + background: #efe; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + background: #676; + color: #fff; + font-size: 90%; +} + +.calendar .nav { + background: #676 url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + padding: 2px; + background: #250; + color: #efa; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #565; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #afa; + color: #000; + border: 1px solid #084; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #7c7; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #dfb; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #564; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #8a8; + background: #dfb; +} + +.calendar tbody .rowhilite td { + background: #dfd; +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #efd; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #dec; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #f8fff8; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { font-weight: bold; color: #0a0; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #565; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + padding: 2px; + background: #250; + color: #efa; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #afa; + border: 1px solid #084; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #7c7; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #565; + background: #efd; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #af8; +} + +.calendar .combo .active { + border-top: 1px solid #6a4; + border-bottom: 1px solid #6a4; + background: #efe; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #8a8; + padding: 1px 0px; + text-align: center; + background-color: #dfb; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #898; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #686; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-setup.js b/ehcp/net2ftp/plugins/jscalendar/calendar-setup.js new file mode 100644 index 0000000..7bd191d --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-setup.js @@ -0,0 +1,200 @@ +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ + * --------------------------------------------------------------------------- + * + * The DHTML Calendar + * + * Details and latest version at: + * http://dynarch.com/mishoo/calendar.epl + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + * + * This file defines helper functions for setting up the calendar. They are + * intended to help non-programmers get a working calendar on their site + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). + */ + +// $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $ + +/** + * This function "patches" an input field (or other element) to use a calendar + * widget for date selection. + * + * The "params" is a single object that can have the following properties: + * + * prop. name | description + * ------------------------------------------------------------------------------------------------- + * inputField | the ID of an input field to store the date + * displayArea | the ID of a DIV or other element to show the date + * button | ID of a button or other element that will trigger the calendar + * eventName | event that will trigger the calendar, without the "on" prefix (default: "click") + * ifFormat | date format that will be stored in the input field + * daFormat | the date format that will be used to display the date in displayArea + * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) + * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc. + * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation + * range | array with 2 elements. Default: [1900, 2999] -- the range of years available + * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers + * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID + * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar) + * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar + * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay) + * onClose | function that gets called when the calendar is closed. [default] + * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar. + * date | the date that the calendar will be initially displayed to + * showsTime | default: false; if true the calendar will include a time selector + * timeFormat | the time format; can be "12" or "24", default is "12" + * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close + * step | configures the step of the years in drop-down boxes; default: 2 + * position | configures the calendar absolute position; default: null + * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible + * showOthers | if "true" (but default: "false") it will show days from other months too + * + * None of them is required, they all have default values. However, if you + * pass none of "inputField", "displayArea" or "button" you'll get a warning + * saying "nothing to setup". + */ +Calendar.setup = function (params) { + function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } }; + + param_default("inputField", null); + param_default("displayArea", null); + param_default("button", null); + param_default("eventName", "click"); + param_default("ifFormat", "%Y/%m/%d"); + param_default("daFormat", "%Y/%m/%d"); + param_default("singleClick", true); + param_default("disableFunc", null); + param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined + param_default("dateText", null); + param_default("firstDay", null); + param_default("align", "Br"); + param_default("range", [1900, 2999]); + param_default("weekNumbers", true); + param_default("flat", null); + param_default("flatCallback", null); + param_default("onSelect", null); + param_default("onClose", null); + param_default("onUpdate", null); + param_default("date", null); + param_default("showsTime", false); + param_default("timeFormat", "24"); + param_default("electric", true); + param_default("step", 2); + param_default("position", null); + param_default("cache", false); + param_default("showOthers", false); + param_default("multiple", null); + + var tmp = ["inputField", "displayArea", "button"]; + for (var i in tmp) { + if (typeof params[tmp[i]] == "string") { + params[tmp[i]] = document.getElementById(params[tmp[i]]); + } + } + if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) { + alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code"); + return false; + } + + function onSelect(cal) { + var p = cal.params; + var update = (cal.dateClicked || p.electric); + if (update && p.inputField) { + p.inputField.value = cal.date.print(p.ifFormat); + if (typeof p.inputField.onchange == "function") + p.inputField.onchange(); + } + if (update && p.displayArea) + p.displayArea.innerHTML = cal.date.print(p.daFormat); + if (update && typeof p.onUpdate == "function") + p.onUpdate(cal); + if (update && p.flat) { + if (typeof p.flatCallback == "function") + p.flatCallback(cal); + } + if (update && p.singleClick && cal.dateClicked) + cal.callCloseHandler(); + }; + + if (params.flat != null) { + if (typeof params.flat == "string") + params.flat = document.getElementById(params.flat); + if (!params.flat) { + alert("Calendar.setup:\n Flat specified but can't find parent."); + return false; + } + var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect); + cal.showsOtherMonths = params.showOthers; + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); + cal.params = params; + cal.weekNumbers = params.weekNumbers; + cal.setRange(params.range[0], params.range[1]); + cal.setDateStatusHandler(params.dateStatusFunc); + cal.getDateText = params.dateText; + if (params.ifFormat) { + cal.setDateFormat(params.ifFormat); + } + if (params.inputField && typeof params.inputField.value == "string") { + cal.parseDate(params.inputField.value); + } + cal.create(params.flat); + cal.show(); + return false; + } + + var triggerEl = params.button || params.displayArea || params.inputField; + triggerEl["on" + params.eventName] = function() { + var dateEl = params.inputField || params.displayArea; + var dateFmt = params.inputField ? params.ifFormat : params.daFormat; + var mustCreate = false; + var cal = window.calendar; + if (dateEl) + params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt); + if (!(cal && params.cache)) { + window.calendar = cal = new Calendar(params.firstDay, + params.date, + params.onSelect || onSelect, + params.onClose || function(cal) { cal.hide(); }); + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); + cal.weekNumbers = params.weekNumbers; + mustCreate = true; + } else { + if (params.date) + cal.setDate(params.date); + cal.hide(); + } + if (params.multiple) { + cal.multiple = {}; + for (var i = params.multiple.length; --i >= 0;) { + var d = params.multiple[i]; + var ds = d.print("%Y%m%d"); + cal.multiple[ds] = d; + } + } + cal.showsOtherMonths = params.showOthers; + cal.yearStep = params.step; + cal.setRange(params.range[0], params.range[1]); + cal.params = params; + cal.setDateStatusHandler(params.dateStatusFunc); + cal.getDateText = params.dateText; + cal.setDateFormat(dateFmt); + if (mustCreate) + cal.create(); + cal.refresh(); + if (!params.position) + cal.showAtElement(params.button || params.displayArea || params.inputField, params.align); + else + cal.showAt(params.position[0], params.position[1]); + return false; + }; + + return cal; +}; diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-setup_stripped.js b/ehcp/net2ftp/plugins/jscalendar/calendar-setup_stripped.js new file mode 100644 index 0000000..57c12d4 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-setup_stripped.js @@ -0,0 +1,21 @@ +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ + * --------------------------------------------------------------------------- + * + * The DHTML Calendar + * + * Details and latest version at: + * http://dynarch.com/mishoo/calendar.epl + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + * + * This file defines helper functions for setting up the calendar. They are + * intended to help non-programmers get a working calendar on their site + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). + */ + Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&¶ms.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;}; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-system.css b/ehcp/net2ftp/plugins/jscalendar/calendar-system.css new file mode 100644 index 0000000..f64493b --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-system.css @@ -0,0 +1,251 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border: 1px solid; + border-color: #fff #000 #000 #fff; + font-size: 11px; + cursor: default; + background: Window; + color: WindowText; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border: 1px solid; + border-color: #fff #000 #000 #fff; + font-size: 11px; + cursor: default; + background: Window; + color: WindowText; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; + background: ButtonFace; +} + +.calendar .nav { + background: ButtonFace url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: ActiveCaption; + color: CaptionText; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid ButtonShadow; + padding: 2px; + text-align: center; + background: ButtonFace; + color: ButtonText; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border: 2px solid; + padding: 0px; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + border-width: 1px; + padding: 2px 0px 0px 2px; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid ButtonShadow; + background: ButtonFace; + color: ButtonText; +} + +.calendar tbody .rowhilite td { + background: Highlight; + color: HighlightText; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; + padding: 2px 2px 0px 2px; + background: ButtonFace; + color: ButtonText; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody td.disabled { color: GrayText; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: ButtonFace; + padding: 1px; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; + color: ButtonText; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4e0d8; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; + background: Menu; + color: MenuText; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + padding: 0px; + border: 1px solid #000; +} + +.calendar .combo .hilite { + background: Highlight; + color: HighlightText; +} + +.calendar td.time { + border-top: 1px solid ButtonShadow; + padding: 1px 0px; + text-align: center; + background-color: ButtonFace; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: Menu; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: Highlight; + color: HighlightText; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-tas.css b/ehcp/net2ftp/plugins/jscalendar/calendar-tas.css new file mode 100644 index 0000000..a0c9c9d --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-tas.css @@ -0,0 +1,239 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #655; + font-size: 11px; + color: #000; + cursor: default; + background: #ffd; + font-family: tahoma,verdana,sans-serif; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + color:#363636; +} + +.calendar .nav { + background: #edc url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #654; + color: #363636; + padding: 2px; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#dddccc); +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + /*background: #3B86A0;*/ + color: #363636; + font-weight: bold; +filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#3b86a0); +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #655; + padding: 2px; + text-align: center; + color: #363636; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #ffcc86; + color: #000; + border: 1px solid #b59345; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #c77; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #fed; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #fed; +} + +.calendar tbody .rowhilite td { + background: #ddf; + +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #ffe; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #ddc; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fea; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { font-weight: bold; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #988; + color: #000; + +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + border-top: 1px solid #655; + background: #dcb; + color: #363636; + font-weight: bold; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#FFFFFF,EndColorStr=#DDDCCC); +} +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #faa; + border: 1px solid #f40; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #c77; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #ffe; + color: #000; + font-size: smaller; + z-index: 100; +} + +.combo .label, +.combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.combo .label-IEfix { + width: 4em; +} + +.combo .hilite { + background: #fc8; +} + +.combo .active { + border-top: 1px solid #a64; + border-bottom: 1px solid #a64; + background: #fee; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #a88; + padding: 1px 0px; + text-align: center; + background-color: #fed; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #988; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #866; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-1.css b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-1.css new file mode 100644 index 0000000..56ffdf2 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-1.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #d4d0c8; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #d4d0c8; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #848078; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #f4f0e8; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #e4e0d8; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #c4c0b8; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #f4f0e8; +} + +.calendar tbody .rowhilite td { + background: #e4e0d8; +} + +.calendar tbody .rowhilite td.wn { + background: #d4d0c8; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #e4e0d8; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #f4f0e8; + padding: 1px; + border: 1px solid #000; + background: #848078; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4e0d8; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #e4e0d8; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c4c0b8; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #fea; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #766; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-2.css b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-2.css new file mode 100644 index 0000000..ccb85a0 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-2.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #d4c8d0; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #d4c8d0; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #847880; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #f4e8f0; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #e4d8e0; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #c4b8c0; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #f4e8f0; +} + +.calendar tbody .rowhilite td { + background: #e4d8e0; +} + +.calendar tbody .rowhilite td.wn { + background: #d4c8d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #e4d8e0; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #f4e8f0; + padding: 1px; + border: 1px solid #000; + background: #847880; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4d8e0; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #e4d8e0; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #d4c8d0; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #408; + color: #fea; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #766; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-1.css b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-1.css new file mode 100644 index 0000000..09a1a80 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-1.css @@ -0,0 +1,265 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d0d4; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d0d4; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #788084; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #e8f0f4; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #d8e0e4; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #b8c0c4; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #e8f4f0; +} + +.calendar tbody .rowhilite td { + background: #d8e4e0; +} + +.calendar tbody .rowhilite td.wn { + background: #c8d4d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border: 1px solid; + border-color: #fff #000 #000 #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: #000 #fff #fff #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: #000 #fff #fff #000; + background: #d8e0e4; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #e8f0f4; + padding: 1px; + border: 1px solid #000; + background: #788084; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #d8e0e4; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #d8e0e4; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c8d0d4; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #aef; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #e8f0f4; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-2.css b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-2.css new file mode 100644 index 0000000..0ae6b08 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar-win2k-cold-2.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d4d0; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d4d0; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #788480; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #e8f4f0; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #d8e4e0; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #b8c4c0; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #e8f4f0; +} + +.calendar tbody .rowhilite td { + background: #d8e4e0; +} + +.calendar tbody .rowhilite td.wn { + background: #c8d4d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #d8e4e0; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #e8f4f0; + padding: 1px; + border: 1px solid #000; + background: #788480; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #d8e4e0; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #d8e4e0; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c8d4d0; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #aef; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #e8f0f4; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar.js b/ehcp/net2ftp/plugins/jscalendar/calendar.js new file mode 100644 index 0000000..04084a8 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar.js @@ -0,0 +1,1806 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + +// $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $ + +/** The Calendar object constructor. */ +Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { + // member variables + this.activeDiv = null; + this.currentDateEl = null; + this.getDateStatus = null; + this.getDateToolTip = null; + this.getDateText = null; + this.timeout = null; + this.onSelected = onSelected || null; + this.onClose = onClose || null; + this.dragging = false; + this.hidden = false; + this.minYear = 1970; + this.maxYear = 2050; + this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"]; + this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"]; + this.isPopup = true; + this.weekNumbers = true; + this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc. + this.showsOtherMonths = false; + this.dateStr = dateStr; + this.ar_days = null; + this.showsTime = false; + this.time24 = true; + this.yearStep = 2; + this.hiliteToday = true; + this.multiple = null; + // HTML elements + this.table = null; + this.element = null; + this.tbody = null; + this.firstdayname = null; + // Combo boxes + this.monthsCombo = null; + this.yearsCombo = null; + this.hilitedMonth = null; + this.activeMonth = null; + this.hilitedYear = null; + this.activeYear = null; + // Information + this.dateClicked = false; + + // one-time initializations + if (typeof Calendar._SDN == "undefined") { + // table of short day names + if (typeof Calendar._SDN_len == "undefined") + Calendar._SDN_len = 3; + var ar = new Array(); + for (var i = 8; i > 0;) { + ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len); + } + Calendar._SDN = ar; + // table of short month names + if (typeof Calendar._SMN_len == "undefined") + Calendar._SMN_len = 3; + ar = new Array(); + for (var i = 12; i > 0;) { + ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len); + } + Calendar._SMN = ar; + } +}; + +// ** constants + +/// "static", needed for event handlers. +Calendar._C = null; + +/// detect a special case of "web browser" +Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && + !/opera/i.test(navigator.userAgent) ); + +Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); + +/// detect Opera browser +Calendar.is_opera = /opera/i.test(navigator.userAgent); + +/// detect KHTML-based browsers +Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent); + +// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate +// library, at some point. + +Calendar.getAbsolutePos = function(el) { + var SL = 0, ST = 0; + var is_div = /^div$/i.test(el.tagName); + if (is_div && el.scrollLeft) + SL = el.scrollLeft; + if (is_div && el.scrollTop) + ST = el.scrollTop; + var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; + if (el.offsetParent) { + var tmp = this.getAbsolutePos(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; +}; + +Calendar.isRelated = function (el, evt) { + var related = evt.relatedTarget; + if (!related) { + var type = evt.type; + if (type == "mouseover") { + related = evt.fromElement; + } else if (type == "mouseout") { + related = evt.toElement; + } + } + while (related) { + if (related == el) { + return true; + } + related = related.parentNode; + } + return false; +}; + +Calendar.removeClass = function(el, className) { + if (!(el && el.className)) { + return; + } + var cls = el.className.split(" "); + var ar = new Array(); + for (var i = cls.length; i > 0;) { + if (cls[--i] != className) { + ar[ar.length] = cls[i]; + } + } + el.className = ar.join(" "); +}; + +Calendar.addClass = function(el, className) { + Calendar.removeClass(el, className); + el.className += " " + className; +}; + +// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately. +Calendar.getElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget; + while (f.nodeType != 1 || /^div$/i.test(f.tagName)) + f = f.parentNode; + return f; +}; + +Calendar.getTargetElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.target; + while (f.nodeType != 1) + f = f.parentNode; + return f; +}; + +Calendar.stopEvent = function(ev) { + ev || (ev = window.event); + if (Calendar.is_ie) { + ev.cancelBubble = true; + ev.returnValue = false; + } else { + ev.preventDefault(); + ev.stopPropagation(); + } + return false; +}; + +Calendar.addEvent = function(el, evname, func) { + if (el.attachEvent) { // IE + el.attachEvent("on" + evname, func); + } else if (el.addEventListener) { // Gecko / W3C + el.addEventListener(evname, func, true); + } else { + el["on" + evname] = func; + } +}; + +Calendar.removeEvent = function(el, evname, func) { + if (el.detachEvent) { // IE + el.detachEvent("on" + evname, func); + } else if (el.removeEventListener) { // Gecko / W3C + el.removeEventListener(evname, func, true); + } else { + el["on" + evname] = null; + } +}; + +Calendar.createElement = function(type, parent) { + var el = null; + if (document.createElementNS) { + // use the XHTML namespace; IE won't normally get here unless + // _they_ "fix" the DOM2 implementation. + el = document.createElementNS("http://www.w3.org/1999/xhtml", type); + } else { + el = document.createElement(type); + } + if (typeof parent != "undefined") { + parent.appendChild(el); + } + return el; +}; + +// END: UTILITY FUNCTIONS + +// BEGIN: CALENDAR STATIC FUNCTIONS + +/** Internal -- adds a set of events to make some element behave like a button. */ +Calendar._add_evs = function(el) { + with (Calendar) { + addEvent(el, "mouseover", dayMouseOver); + addEvent(el, "mousedown", dayMouseDown); + addEvent(el, "mouseout", dayMouseOut); + if (is_ie) { + addEvent(el, "dblclick", dayMouseDblClick); + el.setAttribute("unselectable", true); + } + } +}; + +Calendar.findMonth = function(el) { + if (typeof el.month != "undefined") { + return el; + } else if (typeof el.parentNode.month != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.findYear = function(el) { + if (typeof el.year != "undefined") { + return el; + } else if (typeof el.parentNode.year != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.showMonthsCombo = function () { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var mc = cal.monthsCombo; + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + if (cal.activeMonth) { + Calendar.removeClass(cal.activeMonth, "active"); + } + var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()]; + Calendar.addClass(mon, "active"); + cal.activeMonth = mon; + var s = mc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var mcw = mc.offsetWidth; + if (typeof mcw == "undefined") + // Konqueror brain-dead techniques + mcw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; +}; + +Calendar.showYearsCombo = function (fwd) { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var yc = cal.yearsCombo; + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + if (cal.activeYear) { + Calendar.removeClass(cal.activeYear, "active"); + } + cal.activeYear = null; + var Y = cal.date.getFullYear() + (fwd ? 1 : -1); + var yr = yc.firstChild; + var show = false; + for (var i = 12; i > 0; --i) { + if (Y >= cal.minYear && Y <= cal.maxYear) { + yr.innerHTML = Y; + yr.year = Y; + yr.style.display = "block"; + show = true; + } else { + yr.style.display = "none"; + } + yr = yr.nextSibling; + Y += fwd ? cal.yearStep : -cal.yearStep; + } + if (show) { + var s = yc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var ycw = yc.offsetWidth; + if (typeof ycw == "undefined") + // Konqueror brain-dead techniques + ycw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; + } +}; + +// event handlers + +Calendar.tableMouseUp = function(ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + if (cal.timeout) { + clearTimeout(cal.timeout); + } + var el = cal.activeDiv; + if (!el) { + return false; + } + var target = Calendar.getTargetElement(ev); + ev || (ev = window.event); + Calendar.removeClass(el, "active"); + if (target == el || target.parentNode == el) { + Calendar.cellClick(el, ev); + } + var mon = Calendar.findMonth(target); + var date = null; + if (mon) { + date = new Date(cal.date); + if (mon.month != date.getMonth()) { + date.setMonth(mon.month); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } else { + var year = Calendar.findYear(target); + if (year) { + date = new Date(cal.date); + if (year.year != date.getFullYear()) { + date.setFullYear(year.year); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } + } + with (Calendar) { + removeEvent(document, "mouseup", tableMouseUp); + removeEvent(document, "mouseover", tableMouseOver); + removeEvent(document, "mousemove", tableMouseOver); + cal._hideCombos(); + _C = null; + return stopEvent(ev); + } +}; + +Calendar.tableMouseOver = function (ev) { + var cal = Calendar._C; + if (!cal) { + return; + } + var el = cal.activeDiv; + var target = Calendar.getTargetElement(ev); + if (target == el || target.parentNode == el) { + Calendar.addClass(el, "hilite active"); + Calendar.addClass(el.parentNode, "rowhilite"); + } else { + if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2))) + Calendar.removeClass(el, "active"); + Calendar.removeClass(el, "hilite"); + Calendar.removeClass(el.parentNode, "rowhilite"); + } + ev || (ev = window.event); + if (el.navtype == 50 && target != el) { + var pos = Calendar.getAbsolutePos(el); + var w = el.offsetWidth; + var x = ev.clientX; + var dx; + var decrease = true; + if (x > pos.x + w) { + dx = x - pos.x - w; + decrease = false; + } else + dx = pos.x - x; + + if (dx < 0) dx = 0; + var range = el._range; + var current = el._current; + var count = Math.floor(dx / 10) % range.length; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + while (count-- > 0) + if (decrease) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + + cal.onUpdateTime(); + } + var mon = Calendar.findMonth(target); + if (mon) { + if (mon.month != cal.date.getMonth()) { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + Calendar.addClass(mon, "hilite"); + cal.hilitedMonth = mon; + } else if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + } else { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + var year = Calendar.findYear(target); + if (year) { + if (year.year != cal.date.getFullYear()) { + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + Calendar.addClass(year, "hilite"); + cal.hilitedYear = year; + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.tableMouseDown = function (ev) { + if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) { + return Calendar.stopEvent(ev); + } +}; + +Calendar.calDragIt = function (ev) { + var cal = Calendar._C; + if (!(cal && cal.dragging)) { + return false; + } + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posX = ev.pageX; + posY = ev.pageY; + } + cal.hideShowCovered(); + var st = cal.element.style; + st.left = (posX - cal.xOffs) + "px"; + st.top = (posY - cal.yOffs) + "px"; + return Calendar.stopEvent(ev); +}; + +Calendar.calDragEnd = function (ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + cal.dragging = false; + with (Calendar) { + removeEvent(document, "mousemove", calDragIt); + removeEvent(document, "mouseup", calDragEnd); + tableMouseUp(ev); + } + cal.hideShowCovered(); +}; + +Calendar.dayMouseDown = function(ev) { + var el = Calendar.getElement(ev); + if (el.disabled) { + return false; + } + var cal = el.calendar; + cal.activeDiv = el; + Calendar._C = cal; + if (el.navtype != 300) with (Calendar) { + if (el.navtype == 50) { + el._current = el.innerHTML; + addEvent(document, "mousemove", tableMouseOver); + } else + addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); + addClass(el, "hilite active"); + addEvent(document, "mouseup", tableMouseUp); + } else if (cal.isPopup) { + cal._dragStart(ev); + } + if (el.navtype == -1 || el.navtype == 1) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250); + } else if (el.navtype == -2 || el.navtype == 2) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250); + } else { + cal.timeout = null; + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseDblClick = function(ev) { + Calendar.cellClick(Calendar.getElement(ev), ev || window.event); + if (Calendar.is_ie) { + document.selection.empty(); + } +}; + +Calendar.dayMouseOver = function(ev) { + var el = Calendar.getElement(ev); + if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) { + return false; + } + if (el.ttip) { + if (el.ttip.substr(0, 1) == "_") { + el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); + } + el.calendar.tooltips.innerHTML = el.ttip; + } + if (el.navtype != 300) { + Calendar.addClass(el, "hilite"); + if (el.caldate) { + Calendar.addClass(el.parentNode, "rowhilite"); + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseOut = function(ev) { + with (Calendar) { + var el = getElement(ev); + if (isRelated(el, ev) || _C || el.disabled) + return false; + removeClass(el, "hilite"); + if (el.caldate) + removeClass(el.parentNode, "rowhilite"); + if (el.calendar) + el.calendar.tooltips.innerHTML = _TT["SEL_DATE"]; + return stopEvent(ev); + } +}; + +/** + * A generic "click" handler :) handles all types of buttons defined in this + * calendar. + */ +Calendar.cellClick = function(el, ev) { + var cal = el.calendar; + var closing = false; + var newdate = false; + var date = null; + if (typeof el.navtype == "undefined") { + if (cal.currentDateEl) { + Calendar.removeClass(cal.currentDateEl, "selected"); + Calendar.addClass(el, "selected"); + closing = (cal.currentDateEl == el); + if (!closing) { + cal.currentDateEl = el; + } + } + cal.date.setDateOnly(el.caldate); + date = cal.date; + var other_month = !(cal.dateClicked = !el.otherMonth); + if (!other_month && !cal.currentDateEl) + cal._toggleMultipleDate(new Date(date)); + else + newdate = !el.disabled; + // a date was clicked + if (other_month) + cal._init(cal.firstDayOfWeek, date); + } else { + if (el.navtype == 200) { + Calendar.removeClass(el, "hilite"); + cal.callCloseHandler(); + return; + } + date = new Date(cal.date); + if (el.navtype == 0) + date.setDateOnly(new Date()); // TODAY + // unless "today" was clicked, we assume no date was clicked so + // the selected handler will know not to close the calenar when + // in single-click mode. + // cal.dateClicked = (el.navtype == 0); + cal.dateClicked = false; + var year = date.getFullYear(); + var mon = date.getMonth(); + function setMonth(m) { + var day = date.getDate(); + var max = date.getMonthDays(m); + if (day > max) { + date.setDate(max); + } + date.setMonth(m); + }; + switch (el.navtype) { + case 400: + Calendar.removeClass(el, "hilite"); + var text = Calendar._TT["ABOUT"]; + if (typeof text != "undefined") { + text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : ""; + } else { + // FIXME: this should be removed as soon as lang files get updated! + text = "Help and about box text is not translated into this language.\n" + + "If you know this language and you feel generous please update\n" + + "the corresponding file in \"lang\" subdir to match calendar-en.js\n" + + "and send it back to to get it into the distribution ;-)\n\n" + + "Thank you!\n" + + "http://dynarch.com/mishoo/calendar.epl\n"; + } + alert(text); + return; + case -2: + if (year > cal.minYear) { + date.setFullYear(year - 1); + } + break; + case -1: + if (mon > 0) { + setMonth(mon - 1); + } else if (year-- > cal.minYear) { + date.setFullYear(year); + setMonth(11); + } + break; + case 1: + if (mon < 11) { + setMonth(mon + 1); + } else if (year < cal.maxYear) { + date.setFullYear(year + 1); + setMonth(0); + } + break; + case 2: + if (year < cal.maxYear) { + date.setFullYear(year + 1); + } + break; + case 100: + cal.setFirstDayOfWeek(el.fdow); + return; + case 50: + var range = el._range; + var current = el.innerHTML; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + if (ev && ev.shiftKey) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + cal.onUpdateTime(); + return; + case 0: + // TODAY will bring us here + if ((typeof cal.getDateStatus == "function") && + cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) { + return false; + } + break; + } + if (!date.equalsTo(cal.date)) { + cal.setDate(date); + newdate = true; + } else if (el.navtype == 0) + newdate = closing = true; + } + if (newdate) { + ev && cal.callHandler(); + } + if (closing) { + Calendar.removeClass(el, "hilite"); + ev && cal.callCloseHandler(); + } +}; + +// END: CALENDAR STATIC FUNCTIONS + +// BEGIN: CALENDAR OBJECT FUNCTIONS + +/** + * This function creates the calendar inside the given parent. If _par is + * null than it creates a popup calendar inside the BODY element. If _par is + * an element, be it BODY, then it creates a non-popup calendar (still + * hidden). Some properties need to be set before calling this function. + */ +Calendar.prototype.create = function (_par) { + var parent = null; + if (! _par) { + // default parent is the document body, in which case we create + // a popup calendar. + parent = document.getElementsByTagName("body")[0]; + this.isPopup = true; + } else { + parent = _par; + this.isPopup = false; + } + this.date = this.dateStr ? new Date(this.dateStr) : new Date(); + + var table = Calendar.createElement("table"); + this.table = table; + table.cellSpacing = 0; + table.cellPadding = 0; + table.calendar = this; + Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown); + + var div = Calendar.createElement("div"); + this.element = div; + div.className = "calendar"; + if (this.isPopup) { + div.style.position = "absolute"; + div.style.display = "none"; + } + div.appendChild(table); + + var thead = Calendar.createElement("thead", table); + var cell = null; + var row = null; + + var cal = this; + var hh = function (text, cs, navtype) { + cell = Calendar.createElement("td", row); + cell.colSpan = cs; + cell.className = "button"; + if (navtype != 0 && Math.abs(navtype) <= 2) + cell.className += " nav"; + Calendar._add_evs(cell); + cell.calendar = cal; + cell.navtype = navtype; + cell.innerHTML = "
        " + text + "
        "; + return cell; + }; + + row = Calendar.createElement("tr", thead); + var title_length = 6; + (this.isPopup) && --title_length; + (this.weekNumbers) && ++title_length; + + hh("?", 1, 400).ttip = Calendar._TT["INFO"]; + this.title = hh("", title_length, 300); + this.title.className = "title"; + if (this.isPopup) { + this.title.ttip = Calendar._TT["DRAG_TO_MOVE"]; + this.title.style.cursor = "move"; + hh("×", 1, 200).ttip = Calendar._TT["CLOSE"]; + } + + row = Calendar.createElement("tr", thead); + row.className = "headrow"; + + this._nav_py = hh("«", 1, -2); + this._nav_py.ttip = Calendar._TT["PREV_YEAR"]; + + this._nav_pm = hh("‹", 1, -1); + this._nav_pm.ttip = Calendar._TT["PREV_MONTH"]; + + this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0); + this._nav_now.ttip = Calendar._TT["GO_TODAY"]; + + this._nav_nm = hh("›", 1, 1); + this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"]; + + this._nav_ny = hh("»", 1, 2); + this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"]; + + // day names + row = Calendar.createElement("tr", thead); + row.className = "daynames"; + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + cell.className = "name wn"; + cell.innerHTML = Calendar._TT["WK"]; + } + for (var i = 7; i > 0; --i) { + cell = Calendar.createElement("td", row); + if (!i) { + cell.navtype = 100; + cell.calendar = this; + Calendar._add_evs(cell); + } + } + this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild; + this._displayWeekdays(); + + var tbody = Calendar.createElement("tbody", table); + this.tbody = tbody; + + for (i = 6; i > 0; --i) { + row = Calendar.createElement("tr", tbody); + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + } + for (var j = 7; j > 0; --j) { + cell = Calendar.createElement("td", row); + cell.calendar = this; + Calendar._add_evs(cell); + } + } + + if (this.showsTime) { + row = Calendar.createElement("tr", tbody); + row.className = "time"; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + cell.innerHTML = Calendar._TT["TIME"] || " "; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = this.weekNumbers ? 4 : 3; + + (function(){ + function makeTimePart(className, init, range_start, range_end) { + var part = Calendar.createElement("span", cell); + part.className = className; + part.innerHTML = init; + part.calendar = cal; + part.ttip = Calendar._TT["TIME_PART"]; + part.navtype = 50; + part._range = []; + if (typeof range_start != "number") + part._range = range_start; + else { + for (var i = range_start; i <= range_end; ++i) { + var txt; + if (i < 10 && range_end >= 10) txt = '0' + i; + else txt = '' + i; + part._range[part._range.length] = txt; + } + } + Calendar._add_evs(part); + return part; + }; + var hrs = cal.date.getHours(); + var mins = cal.date.getMinutes(); + var t12 = !cal.time24; + var pm = (hrs > 12); + if (t12 && pm) hrs -= 12; + var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23); + var span = Calendar.createElement("span", cell); + span.innerHTML = ":"; + span.className = "colon"; + var M = makeTimePart("minute", mins, 0, 59); + var AP = null; + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + if (t12) + AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]); + else + cell.innerHTML = " "; + + cal.onSetTime = function() { + var pm, hrs = this.date.getHours(), + mins = this.date.getMinutes(); + if (t12) { + pm = (hrs >= 12); + if (pm) hrs -= 12; + if (hrs == 0) hrs = 12; + AP.innerHTML = pm ? "pm" : "am"; + } + H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs; + M.innerHTML = (mins < 10) ? ("0" + mins) : mins; + }; + + cal.onUpdateTime = function() { + var date = this.date; + var h = parseInt(H.innerHTML, 10); + if (t12) { + if (/pm/i.test(AP.innerHTML) && h < 12) + h += 12; + else if (/am/i.test(AP.innerHTML) && h == 12) + h = 0; + } + var d = date.getDate(); + var m = date.getMonth(); + var y = date.getFullYear(); + date.setHours(h); + date.setMinutes(parseInt(M.innerHTML, 10)); + date.setFullYear(y); + date.setMonth(m); + date.setDate(d); + this.dateClicked = false; + this.callHandler(); + }; + })(); + } else { + this.onSetTime = this.onUpdateTime = function() {}; + } + + var tfoot = Calendar.createElement("tfoot", table); + + row = Calendar.createElement("tr", tfoot); + row.className = "footrow"; + + cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300); + cell.className = "ttip"; + if (this.isPopup) { + cell.ttip = Calendar._TT["DRAG_TO_MOVE"]; + cell.style.cursor = "move"; + } + this.tooltips = cell; + + div = Calendar.createElement("div", this.element); + this.monthsCombo = div; + div.className = "combo"; + for (i = 0; i < Calendar._MN.length; ++i) { + var mn = Calendar.createElement("div"); + mn.className = Calendar.is_ie ? "label-IEfix" : "label"; + mn.month = i; + mn.innerHTML = Calendar._SMN[i]; + div.appendChild(mn); + } + + div = Calendar.createElement("div", this.element); + this.yearsCombo = div; + div.className = "combo"; + for (i = 12; i > 0; --i) { + var yr = Calendar.createElement("div"); + yr.className = Calendar.is_ie ? "label-IEfix" : "label"; + div.appendChild(yr); + } + + this._init(this.firstDayOfWeek, this.date); + parent.appendChild(this.element); +}; + +/** keyboard navigation, only for popup calendars */ +Calendar._keyEvent = function(ev) { + var cal = window._dynarch_popupCalendar; + if (!cal || cal.multiple) + return false; + (Calendar.is_ie) && (ev = window.event); + var act = (Calendar.is_ie || ev.type == "keypress"), + K = ev.keyCode; + if (ev.ctrlKey) { + switch (K) { + case 37: // KEY left + act && Calendar.cellClick(cal._nav_pm); + break; + case 38: // KEY up + act && Calendar.cellClick(cal._nav_py); + break; + case 39: // KEY right + act && Calendar.cellClick(cal._nav_nm); + break; + case 40: // KEY down + act && Calendar.cellClick(cal._nav_ny); + break; + default: + return false; + } + } else switch (K) { + case 32: // KEY space (now) + Calendar.cellClick(cal._nav_now); + break; + case 27: // KEY esc + act && cal.callCloseHandler(); + break; + case 37: // KEY left + case 38: // KEY up + case 39: // KEY right + case 40: // KEY down + if (act) { + var prev, x, y, ne, el, step; + prev = K == 37 || K == 38; + step = (K == 37 || K == 39) ? 1 : 7; + function setVars() { + el = cal.currentDateEl; + var p = el.pos; + x = p & 15; + y = p >> 4; + ne = cal.ar_days[y][x]; + };setVars(); + function prevMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() - step); + cal.setDate(date); + }; + function nextMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() + step); + cal.setDate(date); + }; + while (1) { + switch (K) { + case 37: // KEY left + if (--x >= 0) + ne = cal.ar_days[y][x]; + else { + x = 6; + K = 38; + continue; + } + break; + case 38: // KEY up + if (--y >= 0) + ne = cal.ar_days[y][x]; + else { + prevMonth(); + setVars(); + } + break; + case 39: // KEY right + if (++x < 7) + ne = cal.ar_days[y][x]; + else { + x = 0; + K = 40; + continue; + } + break; + case 40: // KEY down + if (++y < cal.ar_days.length) + ne = cal.ar_days[y][x]; + else { + nextMonth(); + setVars(); + } + break; + } + break; + } + if (ne) { + if (!ne.disabled) + Calendar.cellClick(ne); + else if (prev) + prevMonth(); + else + nextMonth(); + } + } + break; + case 13: // KEY enter + if (act) + Calendar.cellClick(cal.currentDateEl, ev); + break; + default: + return false; + } + return Calendar.stopEvent(ev); +}; + +/** + * (RE)Initializes the calendar to the given date and firstDayOfWeek + */ +Calendar.prototype._init = function (firstDayOfWeek, date) { + var today = new Date(), + TY = today.getFullYear(), + TM = today.getMonth(), + TD = today.getDate(); + this.table.style.visibility = "hidden"; + var year = date.getFullYear(); + if (year < this.minYear) { + year = this.minYear; + date.setFullYear(year); + } else if (year > this.maxYear) { + year = this.maxYear; + date.setFullYear(year); + } + this.firstDayOfWeek = firstDayOfWeek; + this.date = new Date(date); + var month = date.getMonth(); + var mday = date.getDate(); + var no_days = date.getMonthDays(); + + // calendar voodoo for computing the first day that would actually be + // displayed in the calendar, even if it's from the previous month. + // WARNING: this is magic. ;-) + date.setDate(1); + var day1 = (date.getDay() - this.firstDayOfWeek) % 7; + if (day1 < 0) + day1 += 7; + date.setDate(-day1); + date.setDate(date.getDate() + 1); + + var row = this.tbody.firstChild; + var MN = Calendar._SMN[month]; + var ar_days = this.ar_days = new Array(); + var weekend = Calendar._TT["WEEKEND"]; + var dates = this.multiple ? (this.datesCells = {}) : null; + for (var i = 0; i < 6; ++i, row = row.nextSibling) { + var cell = row.firstChild; + if (this.weekNumbers) { + cell.className = "day wn"; + cell.innerHTML = date.getWeekNumber(); + cell = cell.nextSibling; + } + row.className = "daysrow"; + var hasdays = false, iday, dpos = ar_days[i] = []; + for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) { + iday = date.getDate(); + var wday = date.getDay(); + cell.className = "day"; + cell.pos = i << 4 | j; + dpos[j] = cell; + var current_month = (date.getMonth() == month); + if (!current_month) { + if (this.showsOtherMonths) { + cell.className += " othermonth"; + cell.otherMonth = true; + } else { + cell.className = "emptycell"; + cell.innerHTML = " "; + cell.disabled = true; + continue; + } + } else { + cell.otherMonth = false; + hasdays = true; + } + cell.disabled = false; + cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday; + if (dates) + dates[date.print("%Y%m%d")] = cell; + if (this.getDateStatus) { + var status = this.getDateStatus(date, year, month, iday); + if (this.getDateToolTip) { + var toolTip = this.getDateToolTip(date, year, month, iday); + if (toolTip) + cell.title = toolTip; + } + if (status === true) { + cell.className += " disabled"; + cell.disabled = true; + } else { + if (/disabled/i.test(status)) + cell.disabled = true; + cell.className += " " + status; + } + } + if (!cell.disabled) { + cell.caldate = new Date(date); + cell.ttip = "_"; + if (!this.multiple && current_month + && iday == mday && this.hiliteToday) { + cell.className += " selected"; + this.currentDateEl = cell; + } + if (date.getFullYear() == TY && + date.getMonth() == TM && + iday == TD) { + cell.className += " today"; + cell.ttip += Calendar._TT["PART_TODAY"]; + } + if (weekend.indexOf(wday.toString()) != -1) + cell.className += cell.otherMonth ? " oweekend" : " weekend"; + } + } + if (!(hasdays || this.showsOtherMonths)) + row.className = "emptyrow"; + } + this.title.innerHTML = Calendar._MN[month] + ", " + year; + this.onSetTime(); + this.table.style.visibility = "visible"; + this._initMultipleDates(); + // PROFILE + // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms"; +}; + +Calendar.prototype._initMultipleDates = function() { + if (this.multiple) { + for (var i in this.multiple) { + var cell = this.datesCells[i]; + var d = this.multiple[i]; + if (!d) + continue; + if (cell) + cell.className += " selected"; + } + } +}; + +Calendar.prototype._toggleMultipleDate = function(date) { + if (this.multiple) { + var ds = date.print("%Y%m%d"); + var cell = this.datesCells[ds]; + if (cell) { + var d = this.multiple[ds]; + if (!d) { + Calendar.addClass(cell, "selected"); + this.multiple[ds] = date; + } else { + Calendar.removeClass(cell, "selected"); + delete this.multiple[ds]; + } + } + } +}; + +Calendar.prototype.setDateToolTipHandler = function (unaryFunction) { + this.getDateToolTip = unaryFunction; +}; + +/** + * Calls _init function above for going to a certain date (but only if the + * date is different than the currently selected one). + */ +Calendar.prototype.setDate = function (date) { + if (!date.equalsTo(this.date)) { + this._init(this.firstDayOfWeek, date); + } +}; + +/** + * Refreshes the calendar. Useful if the "disabledHandler" function is + * dynamic, meaning that the list of disabled date can change at runtime. + * Just * call this function if you think that the list of disabled dates + * should * change. + */ +Calendar.prototype.refresh = function () { + this._init(this.firstDayOfWeek, this.date); +}; + +/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ +Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { + this._init(firstDayOfWeek, this.date); + this._displayWeekdays(); +}; + +/** + * Allows customization of what dates are enabled. The "unaryFunction" + * parameter must be a function object that receives the date (as a JS Date + * object) and returns a boolean value. If the returned value is true then + * the passed date will be marked as disabled. + */ +Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) { + this.getDateStatus = unaryFunction; +}; + +/** Customization of allowed year range for the calendar. */ +Calendar.prototype.setRange = function (a, z) { + this.minYear = a; + this.maxYear = z; +}; + +/** Calls the first user handler (selectedHandler). */ +Calendar.prototype.callHandler = function () { + if (this.onSelected) { + this.onSelected(this, this.date.print(this.dateFormat)); + } +}; + +/** Calls the second user handler (closeHandler). */ +Calendar.prototype.callCloseHandler = function () { + if (this.onClose) { + this.onClose(this); + } + this.hideShowCovered(); +}; + +/** Removes the calendar object from the DOM tree and destroys it. */ +Calendar.prototype.destroy = function () { + var el = this.element.parentNode; + el.removeChild(this.element); + Calendar._C = null; + window._dynarch_popupCalendar = null; +}; + +/** + * Moves the calendar element to a different section in the DOM tree (changes + * its parent). + */ +Calendar.prototype.reparent = function (new_parent) { + var el = this.element; + el.parentNode.removeChild(el); + new_parent.appendChild(el); +}; + +// This gets called when the user presses a mouse button anywhere in the +// document, if the calendar is shown. If the click was outside the open +// calendar this function closes it. +Calendar._checkCalendar = function(ev) { + var calendar = window._dynarch_popupCalendar; + if (!calendar) { + return false; + } + var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev); + for (; el != null && el != calendar.element; el = el.parentNode); + if (el == null) { + // calls closeHandler which should hide the calendar. + window._dynarch_popupCalendar.callCloseHandler(); + return Calendar.stopEvent(ev); + } +}; + +/** Shows the calendar. */ +Calendar.prototype.show = function () { + var rows = this.table.getElementsByTagName("tr"); + for (var i = rows.length; i > 0;) { + var row = rows[--i]; + Calendar.removeClass(row, "rowhilite"); + var cells = row.getElementsByTagName("td"); + for (var j = cells.length; j > 0;) { + var cell = cells[--j]; + Calendar.removeClass(cell, "hilite"); + Calendar.removeClass(cell, "active"); + } + } + this.element.style.display = "block"; + this.hidden = false; + if (this.isPopup) { + window._dynarch_popupCalendar = this; + Calendar.addEvent(document, "keydown", Calendar._keyEvent); + Calendar.addEvent(document, "keypress", Calendar._keyEvent); + Calendar.addEvent(document, "mousedown", Calendar._checkCalendar); + } + this.hideShowCovered(); +}; + +/** + * Hides the calendar. Also removes any "hilite" from the class of any TD + * element. + */ +Calendar.prototype.hide = function () { + if (this.isPopup) { + Calendar.removeEvent(document, "keydown", Calendar._keyEvent); + Calendar.removeEvent(document, "keypress", Calendar._keyEvent); + Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar); + } + this.element.style.display = "none"; + this.hidden = true; + this.hideShowCovered(); +}; + +/** + * Shows the calendar at a given absolute position (beware that, depending on + * the calendar element style -- position property -- this might be relative + * to the parent's containing rectangle). + */ +Calendar.prototype.showAt = function (x, y) { + var s = this.element.style; + s.left = x + "px"; + s.top = y + "px"; + this.show(); +}; + +/** Shows the calendar near a given element. */ +Calendar.prototype.showAtElement = function (el, opts) { + var self = this; + var p = Calendar.getAbsolutePos(el); + if (!opts || typeof opts != "string") { + this.showAt(p.x, p.y + el.offsetHeight); + return true; + } + function fixPosition(box) { + if (box.x < 0) + box.x = 0; + if (box.y < 0) + box.y = 0; + var cp = document.createElement("div"); + var s = cp.style; + s.position = "absolute"; + s.right = s.bottom = s.width = s.height = "0px"; + document.body.appendChild(cp); + var br = Calendar.getAbsolutePos(cp); + document.body.removeChild(cp); + if (Calendar.is_ie) { + br.y += document.body.scrollTop; + br.x += document.body.scrollLeft; + } else { + br.y += window.scrollY; + br.x += window.scrollX; + } + var tmp = box.x + box.width - br.x; + if (tmp > 0) box.x -= tmp; + tmp = box.y + box.height - br.y; + if (tmp > 0) box.y -= tmp; + }; + this.element.style.display = "block"; + Calendar.continuation_for_the_fucking_khtml_browser = function() { + var w = self.element.offsetWidth; + var h = self.element.offsetHeight; + self.element.style.display = "none"; + var valign = opts.substr(0, 1); + var halign = "l"; + if (opts.length > 1) { + halign = opts.substr(1, 1); + } + // vertical alignment + switch (valign) { + case "T": p.y -= h; break; + case "B": p.y += el.offsetHeight; break; + case "C": p.y += (el.offsetHeight - h) / 2; break; + case "t": p.y += el.offsetHeight - h; break; + case "b": break; // already there + } + // horizontal alignment + switch (halign) { + case "L": p.x -= w; break; + case "R": p.x += el.offsetWidth; break; + case "C": p.x += (el.offsetWidth - w) / 2; break; + case "l": p.x += el.offsetWidth - w; break; + case "r": break; // already there + } + p.width = w; + p.height = h + 40; + self.monthsCombo.style.display = "none"; + fixPosition(p); + self.showAt(p.x, p.y); + }; + if (Calendar.is_khtml) + setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10); + else + Calendar.continuation_for_the_fucking_khtml_browser(); +}; + +/** Customizes the date format. */ +Calendar.prototype.setDateFormat = function (str) { + this.dateFormat = str; +}; + +/** Customizes the tooltip date format. */ +Calendar.prototype.setTtDateFormat = function (str) { + this.ttDateFormat = str; +}; + +/** + * Tries to identify the date represented in a string. If successful it also + * calls this.setDate which moves the calendar to the given date. + */ +Calendar.prototype.parseDate = function(str, fmt) { + if (!fmt) + fmt = this.dateFormat; + this.setDate(Date.parseDate(str, fmt)); +}; + +Calendar.prototype.hideShowCovered = function () { + if (!Calendar.is_ie && !Calendar.is_opera) + return; + function getVisib(obj){ + var value = obj.style.visibility; + if (!value) { + if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C + if (!Calendar.is_khtml) + value = document.defaultView. + getComputedStyle(obj, "").getPropertyValue("visibility"); + else + value = ''; + } else if (obj.currentStyle) { // IE + value = obj.currentStyle.visibility; + } else + value = ''; + } + return value; + }; + + var tags = new Array("applet", "iframe", "select"); + var el = this.element; + + var p = Calendar.getAbsolutePos(el); + var EX1 = p.x; + var EX2 = el.offsetWidth + EX1; + var EY1 = p.y; + var EY2 = el.offsetHeight + EY1; + + for (var k = tags.length; k > 0; ) { + var ar = document.getElementsByTagName(tags[--k]); + var cc = null; + + for (var i = ar.length; i > 0;) { + cc = ar[--i]; + + p = Calendar.getAbsolutePos(cc); + var CX1 = p.x; + var CX2 = cc.offsetWidth + CX1; + var CY1 = p.y; + var CY2 = cc.offsetHeight + CY1; + + if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = cc.__msh_save_visibility; + } else { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = "hidden"; + } + } + } +}; + +/** Internal function; it displays the bar with the names of the weekday. */ +Calendar.prototype._displayWeekdays = function () { + var fdow = this.firstDayOfWeek; + var cell = this.firstdayname; + var weekend = Calendar._TT["WEEKEND"]; + for (var i = 0; i < 7; ++i) { + cell.className = "day name"; + var realday = (i + fdow) % 7; + if (i) { + cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]); + cell.navtype = 100; + cell.calendar = this; + cell.fdow = realday; + Calendar._add_evs(cell); + } + if (weekend.indexOf(realday.toString()) != -1) { + Calendar.addClass(cell, "weekend"); + } + cell.innerHTML = Calendar._SDN[(i + fdow) % 7]; + cell = cell.nextSibling; + } +}; + +/** Internal function. Hides all combo boxes that might be displayed. */ +Calendar.prototype._hideCombos = function () { + this.monthsCombo.style.display = "none"; + this.yearsCombo.style.display = "none"; +}; + +/** Internal function. Starts dragging the element. */ +Calendar.prototype._dragStart = function (ev) { + if (this.dragging) { + return; + } + this.dragging = true; + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posY = ev.clientY + window.scrollY; + posX = ev.clientX + window.scrollX; + } + var st = this.element.style; + this.xOffs = posX - parseInt(st.left); + this.yOffs = posY - parseInt(st.top); + with (Calendar) { + addEvent(document, "mousemove", calDragIt); + addEvent(document, "mouseup", calDragEnd); + } +}; + +// BEGIN: DATE OBJECT PATCHES + +/** Adds the number of days array to the Date object. */ +Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); + +/** Constants used for time computations */ +Date.SECOND = 1000 /* milliseconds */; +Date.MINUTE = 60 * Date.SECOND; +Date.HOUR = 60 * Date.MINUTE; +Date.DAY = 24 * Date.HOUR; +Date.WEEK = 7 * Date.DAY; + +Date.parseDate = function(str, fmt) { + var today = new Date(); + var y = 0; + var m = -1; + var d = 0; + var a = str.split(/\W+/); + var b = fmt.match(/%./g); + var i = 0, j = 0; + var hr = 0; + var min = 0; + for (i = 0; i < a.length; ++i) { + if (!a[i]) + continue; + switch (b[i]) { + case "%d": + case "%e": + d = parseInt(a[i], 10); + break; + + case "%m": + m = parseInt(a[i], 10) - 1; + break; + + case "%Y": + case "%y": + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + break; + + case "%b": + case "%B": + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } + } + break; + + case "%H": + case "%I": + case "%k": + case "%l": + hr = parseInt(a[i], 10); + break; + + case "%P": + case "%p": + if (/pm/i.test(a[i]) && hr < 12) + hr += 12; + else if (/am/i.test(a[i]) && hr >= 12) + hr -= 12; + break; + + case "%M": + min = parseInt(a[i], 10); + break; + } + } + if (isNaN(y)) y = today.getFullYear(); + if (isNaN(m)) m = today.getMonth(); + if (isNaN(d)) d = today.getDate(); + if (isNaN(hr)) hr = today.getHours(); + if (isNaN(min)) min = today.getMinutes(); + if (y != 0 && m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + y = 0; m = -1; d = 0; + for (i = 0; i < a.length; ++i) { + if (a[i].search(/[a-zA-Z]+/) != -1) { + var t = -1; + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; } + } + if (t != -1) { + if (m != -1) { + d = m+1; + } + m = t; + } + } else if (parseInt(a[i], 10) <= 12 && m == -1) { + m = a[i]-1; + } else if (parseInt(a[i], 10) > 31 && y == 0) { + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + } else if (d == 0) { + d = a[i]; + } + } + if (y == 0) + y = today.getFullYear(); + if (m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + return today; +}; + +/** Returns the number of days in the current month */ +Date.prototype.getMonthDays = function(month) { + var year = this.getFullYear(); + if (typeof month == "undefined") { + month = this.getMonth(); + } + if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { + return 29; + } else { + return Date._MD[month]; + } +}; + +/** Returns the number of day in the year. */ +Date.prototype.getDayOfYear = function() { + var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); + var time = now - then; + return Math.floor(time / Date.DAY); +}; + +/** Returns the number of the week in year, as defined in ISO 8601. */ +Date.prototype.getWeekNumber = function() { + var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var DoW = d.getDay(); + d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu + var ms = d.valueOf(); // GMT + d.setMonth(0); + d.setDate(4); // Thu in Week 1 + return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; +}; + +/** Checks date and time equality */ +Date.prototype.equalsTo = function(date) { + return ((this.getFullYear() == date.getFullYear()) && + (this.getMonth() == date.getMonth()) && + (this.getDate() == date.getDate()) && + (this.getHours() == date.getHours()) && + (this.getMinutes() == date.getMinutes())); +}; + +/** Set only the year, month, date parts (keep existing time) */ +Date.prototype.setDateOnly = function(date) { + var tmp = new Date(date); + this.setDate(1); + this.setFullYear(tmp.getFullYear()); + this.setMonth(tmp.getMonth()); + this.setDate(tmp.getDate()); +}; + +/** Prints the date in a string according to the given format. */ +Date.prototype.print = function (str) { + var m = this.getMonth(); + var d = this.getDate(); + var y = this.getFullYear(); + var wn = this.getWeekNumber(); + var w = this.getDay(); + var s = {}; + var hr = this.getHours(); + var pm = (hr >= 12); + var ir = (pm) ? (hr - 12) : hr; + var dy = this.getDayOfYear(); + if (ir == 0) + ir = 12; + var min = this.getMinutes(); + var sec = this.getSeconds(); + s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N] + s["%A"] = Calendar._DN[w]; // full weekday name + s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N] + s["%B"] = Calendar._MN[m]; // full month name + // FIXME: %c : preferred date and time representation for the current locale + s["%C"] = 1 + Math.floor(y / 100); // the century number + s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) + s["%e"] = d; // the day of the month (range 1 to 31) + // FIXME: %D : american date style: %m/%d/%y + // FIXME: %E, %F, %G, %g, %h (man strftime) + s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format) + s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format) + s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366) + s["%k"] = hr; // hour, range 0 to 23 (24h format) + s["%l"] = ir; // hour, range 1 to 12 (12h format) + s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12 + s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59 + s["%n"] = "\n"; // a newline character + s["%p"] = pm ? "PM" : "AM"; + s["%P"] = pm ? "pm" : "am"; + // FIXME: %r : the time in am/pm notation %I:%M:%S %p + // FIXME: %R : the time in 24-hour notation %H:%M + s["%s"] = Math.floor(this.getTime() / 1000); + s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59 + s["%t"] = "\t"; // a tab character + // FIXME: %T : the time in 24-hour notation (%H:%M:%S) + s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; + s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON) + s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN) + // FIXME: %x : preferred date representation for the current locale without the time + // FIXME: %X : preferred time representation for the current locale without the date + s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) + s["%Y"] = y; // year with the century + s["%%"] = "%"; // a literal '%' character + + var re = /%./g; + if (!Calendar.is_ie5 && !Calendar.is_khtml) + return str.replace(re, function (par) { return s[par] || par; }); + + var a = str.match(re); + for (var i = 0; i < a.length; i++) { + var tmp = s[a[i]]; + if (tmp) { + re = new RegExp(a[i], 'g'); + str = str.replace(re, tmp); + } + } + + return str; +}; + +Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; +Date.prototype.setFullYear = function(y) { + var d = new Date(this); + d.__msh_oldSetFullYear(y); + if (d.getMonth() != this.getMonth()) + this.setDate(28); + this.__msh_oldSetFullYear(y); +}; + +// END: DATE OBJECT PATCHES + + +// global object that remembers the calendar +window._dynarch_popupCalendar = null; diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar.php b/ehcp/net2ftp/plugins/jscalendar/calendar.php new file mode 100644 index 0000000..c9d0406 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar.php @@ -0,0 +1,119 @@ +calendar_file = 'calendar_stripped.js'; + $this->calendar_setup_file = 'calendar-setup_stripped.js'; + } else { + $this->calendar_file = 'calendar.js'; + $this->calendar_setup_file = 'calendar-setup.js'; + } + $this->calendar_lang_file = 'lang/calendar-' . $lang . '.js'; + $this->calendar_theme_file = $theme.'.css'; + $this->calendar_lib_path = preg_replace('/\/+$/', '/', $calendar_lib_path); + $this->calendar_options = array('ifFormat' => '%Y/%m/%d', + 'daFormat' => '%Y/%m/%d'); + } + + function set_option($name, $value) { + $this->calendar_options[$name] = $value; + } + + function load_files() { + echo $this->get_load_files_code(); + } + + function get_load_files_code() { + $code = ( '' . NEWLINE ); + $code .= ( '' . NEWLINE ); + $code .= ( '' . NEWLINE ); + $code .= ( '' ); + return $code; + } + + function _make_calendar($other_options = array()) { + $js_options = $this->_make_js_hash(array_merge($this->calendar_options, $other_options)); + $code = ( '' ); + return $code; + } + + function make_input_field($cal_options = array(), $field_attributes = array()) { + $id = $this->_gen_id(); + $attrstr = $this->_make_html_attr(array_merge($field_attributes, + array('id' => $this->_field_id($id), + 'type' => 'text'))); + echo ''; + echo '
        ' . + ''; + + $options = array_merge($cal_options, + array('inputField' => $this->_field_id($id), + 'button' => $this->_trigger_id($id))); + echo $this->_make_calendar($options); + } + + /// PRIVATE SECTION + + function _field_id($id) { return 'f-calendar-field-' . $id; } + function _trigger_id($id) { return 'f-calendar-trigger-' . $id; } + function _gen_id() { static $id = 0; return ++$id; } + + function _make_js_hash($array) { + $jstr = ''; + reset($array); + while (list($key, $val) = each($array)) { + if (is_bool($val)) + $val = $val ? 'true' : 'false'; + else if (!is_numeric($val)) + $val = '"'.$val.'"'; + if ($jstr) $jstr .= ','; + $jstr .= '"' . $key . '":' . $val; + } + return $jstr; + } + + function _make_html_attr($array) { + $attrstr = ''; + reset($array); + while (list($key, $val) = each($array)) { + $attrstr .= $key . '="' . $val . '" '; + } + return $attrstr; + } +}; + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/jscalendar/calendar_stripped.js b/ehcp/net2ftp/plugins/jscalendar/calendar_stripped.js new file mode 100644 index 0000000..b5f536b --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/calendar_stripped.js @@ -0,0 +1,14 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.innerHTML=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled)return false;removeClass(el,"hilite");if(el.caldate)removeClass(el.parentNode,"rowhilite");if(el.calendar)el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}}cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl)cal._toggleMultipleDate(new Date(date));else newdate=!el.disabled;if(other_month)cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=new Date(cal.date);if(el.navtype==0)date.setDateOnly(new Date());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0)newdate=closing=true;}if(newdate){ev&&cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="
        "+text+"
        ";return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.innerHTML=Calendar._TT["WK"];}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||" ";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML=" ";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";}H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12)h+=12;else if(/am/i.test(AP.innerHTML)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";div.appendChild(yr);}this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){var cal=window._dynarch_popupCalendar;if(!cal||cal.multiple)return false;(Calendar.is_ie)&&(ev=window.event);var act=(Calendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new Date(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new Date(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0)ne=cal.ar_days[y][x];else{x=6;K=38;continue;}break;case 38:if(--y>=0)ne=cal.ar_days[y][x];else{prevMonth();setVars();}break;case 39:if(++x<7)ne=cal.ar_days[y][x];else{x=0;K=40;continue;}break;case 40:if(++ythis.maxYear){year=this.maxYear;date.setFullYear(year);}this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;}row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML=" ";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates)dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(this.getDateToolTip){var toolTip=this.getDateToolTip(date,year,month,iday);if(toolTip)cell.title=toolTip;}if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){cell.caldate=new Date(date);cell.ttip="_";if(!this.multiple&¤t_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;}if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(weekend.indexOf(wday.toString())!=-1)cell.className+=cell.otherMonth?" oweekend":" weekend";}}if(!(hasdays||this.showsOtherMonths))row.className="emptyrow";}this.title.innerHTML=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d)continue;if(cell)cell.className+=" selected";}}};Calendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){Calendar.addClass(cell,"selected");this.multiple[ds]=date;}else{Calendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};Calendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){var calendar=window._dynarch_popupCalendar;if(!calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}function fixPosition(box){if(box.x<0)box.x=0;if(box.y<0)box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);if(Calendar.is_ie){br.y+=document.body.scrollTop;br.x+=document.body.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "l":p.x+=el.offsetWidth-w;break;case "r":break;}p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){if(!fmt)fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2EY2)||(CY229)?1900:2000);break;case "%b":case "%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}break;case "%H":case "%I":case "%k":case "%l":hr=parseInt(a[i],10);break;case "%P":case "%p":if(/pm/i.test(a[i])&&hr<12)hr+=12;else if(/am/i.test(a[i])&&hr>=12)hr-=12;break;case "%M":min=parseInt(a[i],10);break;}}if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0)y=today.getFullYear();if(m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new Date(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i +// Encoding: big5 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("P", + "P@", + "PG", + "PT", + "P|", + "P", + "P", + "P"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("", + "@", + "G", + "T", + "|", + "", + "", + ""); + +// full month names +Calendar._MN = new Array +("@", + "G", + "T", + "|", + "", + "", + "C", + "K", + "E", + "Q", + "Q@", + "QG"); + +// short month names +Calendar._SMN = new Array +("@", + "G", + "T", + "|", + "", + "", + "C", + "K", + "E", + "Q", + "Q@", + "QG"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = ""; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"ܤk:\n" + +"- ϥ \xab, \xbb siܦ~\n" + +"- ϥ " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " siܤ\n" + +"- WsiH[ֿ"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"ɶܤk:\n" + +"- I󪺮ɶiW[\n" + +"- PɫShiftAIi֨\n" + +"- Ié즲i[֧ܪ"; + +Calendar._TT["PREV_YEAR"] = "W@~ ()"; +Calendar._TT["PREV_MONTH"] = "U@~ ()"; +Calendar._TT["GO_TODAY"] = "줵"; +Calendar._TT["NEXT_MONTH"] = "W@ ()"; +Calendar._TT["NEXT_YEAR"] = "U@ ()"; +Calendar._TT["SEL_DATE"] = "ܤ"; +Calendar._TT["DRAG_TO_MOVE"] = "즲"; +Calendar._TT["PART_TODAY"] = " ()"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "N %s ܦbe"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = ""; +Calendar._TT["TODAY"] = ""; +Calendar._TT["TIME_PART"] = "Ior즲iܮɶ(PɫShift)"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "g"; +Calendar._TT["TIME"] = "Time:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-cs-win.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-cs-win.js new file mode 100644 index 0000000..140dff3 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-cs-win.js @@ -0,0 +1,65 @@ +/* + calendar-cs-win.js + language: Czech + encoding: windows-1250 + author: Lubos Jerabek (xnet@seznam.cz) + Jan Uhlir (espinosa@centrum.cz) +*/ + +// ** I18N +Calendar._DN = new Array('Nedle','Pondl','ter','Steda','tvrtek','Ptek','Sobota','Nedle'); +Calendar._SDN = new Array('Ne','Po','t','St','t','P','So','Ne'); +Calendar._MN = new Array('Leden','nor','Bezen','Duben','Kvten','erven','ervenec','Srpen','Z','jen','Listopad','Prosinec'); +Calendar._SMN = new Array('Led','no','Be','Dub','Kv','rv','vc','Srp','Z','j','Lis','Pro'); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O komponent kalend"; +Calendar._TT["TOGGLE"] = "Zmna prvnho dne v tdnu"; +Calendar._TT["PREV_YEAR"] = "Pedchoz rok (pidr pro menu)"; +Calendar._TT["PREV_MONTH"] = "Pedchoz msc (pidr pro menu)"; +Calendar._TT["GO_TODAY"] = "Dnen datum"; +Calendar._TT["NEXT_MONTH"] = "Dal msc (pidr pro menu)"; +Calendar._TT["NEXT_YEAR"] = "Dal rok (pidr pro menu)"; +Calendar._TT["SEL_DATE"] = "Vyber datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Chy a thni, pro pesun"; +Calendar._TT["PART_TODAY"] = " (dnes)"; +Calendar._TT["MON_FIRST"] = "Uka jako prvn Pondl"; +//Calendar._TT["SUN_FIRST"] = "Uka jako prvn Nedli"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Vbr datumu:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Pouijte tlatka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k vbru msce\n" + +"- Podrte tlatko myi na jakmkoliv z tch tlatek pro rychlej vbr."; + +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Vbr asu:\n" + +"- Kliknte na jakoukoliv z st vbru asu pro zven.\n" + +"- nebo Shift-click pro snen\n" + +"- nebo kliknte a thnte pro rychlej vbr."; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Zobraz %s prvn"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Zavt"; +Calendar._TT["TODAY"] = "Dnes"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo thni pro zmnu hodnoty"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "as:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-da.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-da.js new file mode 100644 index 0000000..a99b598 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-da.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar DA language +// Author: Michael Thingmand Henriksen, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Søndag", +"Mandag", +"Tirsdag", +"Onsdag", +"Torsdag", +"Fredag", +"Lørdag", +"Søndag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Søn", +"Man", +"Tir", +"Ons", +"Tor", +"Fre", +"Lør", +"Søn"); + +// full month names +Calendar._MN = new Array +("Januar", +"Februar", +"Marts", +"April", +"Maj", +"Juni", +"Juli", +"August", +"September", +"Oktober", +"November", +"December"); + +// short month names +Calendar._SMN = new Array +("Jan", +"Feb", +"Mar", +"Apr", +"Maj", +"Jun", +"Jul", +"Aug", +"Sep", +"Okt", +"Nov", +"Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Om Kalenderen"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For den seneste version besøg: http://www.dynarch.com/projects/calendar/\n"; + +"Distribueret under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detajler." + +"\n\n" + +"Valg af dato:\n" + +"- Brug \xab, \xbb knapperne for at vælge år\n" + +"- Brug " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knapperne for at vælge måned\n" + +"- Hold knappen på musen nede på knapperne ovenfor for hurtigere valg."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Valg af tid:\n" + +"- Klik på en vilkårlig del for større værdi\n" + +"- eller Shift-klik for for mindre værdi\n" + +"- eller klik og træk for hurtigere valg."; + +Calendar._TT["PREV_YEAR"] = "Ét år tilbage (hold for menu)"; +Calendar._TT["PREV_MONTH"] = "Én måned tilbage (hold for menu)"; +Calendar._TT["GO_TODAY"] = "Gå til i dag"; +Calendar._TT["NEXT_MONTH"] = "Én måned frem (hold for menu)"; +Calendar._TT["NEXT_YEAR"] = "Ét år frem (hold for menu)"; +Calendar._TT["SEL_DATE"] = "Vælg dag"; +Calendar._TT["DRAG_TO_MOVE"] = "Træk vinduet"; +Calendar._TT["PART_TODAY"] = " (i dag)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Vis %s først"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Luk"; +Calendar._TT["TODAY"] = "I dag"; +Calendar._TT["TIME_PART"] = "(Shift-)klik eller træk for at ændre værdi"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "Uge"; +Calendar._TT["TIME"] = "Tid:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-de.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-de.js new file mode 100644 index 0000000..4bc1137 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-de.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar DE language +// Author: Jack (tR), +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag", + "Sonntag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("So", + "Mo", + "Di", + "Mi", + "Do", + "Fr", + "Sa", + "So"); + +// full month names +Calendar._MN = new Array +("Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "M\u00e4r", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Datum ausw\u00e4hlen:\n" + +"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" + +"- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" + +"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Zeit ausw\u00e4hlen:\n" + +"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" + +"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" + +"- oder klicken und festhalten f\u00fcr Schnellauswahl."; + +Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen"; +Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen"; +Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen"; +Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten"; +Calendar._TT["PART_TODAY"] = " (Heute)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s "; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Schlie\u00dfen"; +Calendar._TT["TODAY"] = "Heute"; +Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Zeit:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-en.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-en.js new file mode 100644 index 0000000..0dbde79 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-en.js @@ -0,0 +1,127 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun"); + +// First day of the week. "0" means display Sunday first, "1" means display +// Monday first, etc. +Calendar._FD = 0; + +// full month names +Calendar._MN = new Array +("January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "About the calendar"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Date selection:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + +"- Hold mouse button on any of the above buttons for faster selection."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Time selection:\n" + +"- Click on any of the time parts to increase it\n" + +"- or Shift-click to decrease it\n" + +"- or click and drag for faster selection."; + +Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)"; +Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)"; +Calendar._TT["GO_TODAY"] = "Go Today"; +Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)"; +Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)"; +Calendar._TT["SEL_DATE"] = "Select date"; +Calendar._TT["DRAG_TO_MOVE"] = "Drag to move"; +Calendar._TT["PART_TODAY"] = " (today)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Display %s first"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Close"; +Calendar._TT["TODAY"] = "Today"; +Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Time:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-es.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-es.js new file mode 100644 index 0000000..19c1b30 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-es.js @@ -0,0 +1,129 @@ +// ** I18N + +// Calendar ES (spanish) language +// Author: Mihai Bazon, +// Updater: Servilio Afre Puentes +// Updated: 2004-06-03 +// Encoding: utf-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Lunes", + "Martes", + "Mircoles", + "Jueves", + "Viernes", + "Sbado", + "Domingo"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Lun", + "Mar", + "Mi", + "Jue", + "Vie", + "Sb", + "Dom"); + +// First day of the week. "0" means display Sunday first, "1" means display +// Monday first, etc. +Calendar._FD = 1; + +// full month names +Calendar._MN = new Array +("Enero", + "Febrero", + "Marzo", + "Abril", + "Mayo", + "Junio", + "Julio", + "Agosto", + "Septiembre", + "Octubre", + "Noviembre", + "Diciembre"); + +// short month names +Calendar._SMN = new Array +("Ene", + "Feb", + "Mar", + "Abr", + "May", + "Jun", + "Jul", + "Ago", + "Sep", + "Oct", + "Nov", + "Dic"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Acerca del calendario"; + +Calendar._TT["ABOUT"] = +"Selector DHTML de Fecha/Hora\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Para conseguir la ltima versin visite: http://www.dynarch.com/projects/calendar/\n" + +"Distribuido bajo licencia GNU LGPL. Visite http://gnu.org/licenses/lgpl.html para ms detalles." + +"\n\n" + +"Seleccin de fecha:\n" + +"- Use los botones \xab, \xbb para seleccionar el ao\n" + +"- Use los botones " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" + +"- Mantenga pulsado el ratn en cualquiera de estos botones para una seleccin rpida."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Seleccin de hora:\n" + +"- Pulse en cualquiera de las partes de la hora para incrementarla\n" + +"- o pulse las maysculas mientras hace clic para decrementarla\n" + +"- o haga clic y arrastre el ratn para una seleccin ms rpida."; + +Calendar._TT["PREV_YEAR"] = "Ao anterior (mantener para men)"; +Calendar._TT["PREV_MONTH"] = "Mes anterior (mantener para men)"; +Calendar._TT["GO_TODAY"] = "Ir a hoy"; +Calendar._TT["NEXT_MONTH"] = "Mes siguiente (mantener para men)"; +Calendar._TT["NEXT_YEAR"] = "Ao siguiente (mantener para men)"; +Calendar._TT["SEL_DATE"] = "Seleccionar fecha"; +Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar para mover"; +Calendar._TT["PART_TODAY"] = " (hoy)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Hacer %s primer da de la semana"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Cerrar"; +Calendar._TT["TODAY"] = "Hoy"; +Calendar._TT["TIME_PART"] = "(Mayscula-)Clic o arrastre para cambiar valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y"; + +Calendar._TT["WK"] = "sem"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fi.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fi.js new file mode 100644 index 0000000..328eabb --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fi.js @@ -0,0 +1,98 @@ +// ** I18N + +// Calendar FI language (Finnish, Suomi) +// Author: Jarno Käyhkö, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// full day names +Calendar._DN = new Array +("Sunnuntai", + "Maanantai", + "Tiistai", + "Keskiviikko", + "Torstai", + "Perjantai", + "Lauantai", + "Sunnuntai"); + +// short day names +Calendar._SDN = new Array +("Su", + "Ma", + "Ti", + "Ke", + "To", + "Pe", + "La", + "Su"); + +// full month names +Calendar._MN = new Array +("Tammikuu", + "Helmikuu", + "Maaliskuu", + "Huhtikuu", + "Toukokuu", + "Kesäkuu", + "Heinäkuu", + "Elokuu", + "Syyskuu", + "Lokakuu", + "Marraskuu", + "Joulukuu"); + +// short month names +Calendar._SMN = new Array +("Tam", + "Hel", + "Maa", + "Huh", + "Tou", + "Kes", + "Hei", + "Elo", + "Syy", + "Lok", + "Mar", + "Jou"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Tietoja kalenterista"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Uusin versio osoitteessa: http://www.dynarch.com/projects/calendar/\n" + +"Julkaistu GNU LGPL lisenssin alaisuudessa. Lisätietoja osoitteessa http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"Päivämäärä valinta:\n" + +"- Käytä \xab, \xbb painikkeita valitaksesi vuosi\n" + +"- Käytä " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " painikkeita valitaksesi kuukausi\n" + +"- Pitämällä hiiren painiketta minkä tahansa yllä olevan painikkeen kohdalla, saat näkyviin valikon nopeampaan siirtymiseen."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Ajan valinta:\n" + +"- Klikkaa kellonajan numeroita lisätäksesi aikaa\n" + +"- tai pitämällä Shift-näppäintä pohjassa saat aikaa taaksepäin\n" + +"- tai klikkaa ja pidä hiiren painike pohjassa sekä liikuta hiirtä muuttaaksesi aikaa nopeasti eteen- ja taaksepäin."; + +Calendar._TT["PREV_YEAR"] = "Edell. vuosi (paina hetki, näet valikon)"; +Calendar._TT["PREV_MONTH"] = "Edell. kuukausi (paina hetki, näet valikon)"; +Calendar._TT["GO_TODAY"] = "Siirry tähän päivään"; +Calendar._TT["NEXT_MONTH"] = "Seur. kuukausi (paina hetki, näet valikon)"; +Calendar._TT["NEXT_YEAR"] = "Seur. vuosi (paina hetki, näet valikon)"; +Calendar._TT["SEL_DATE"] = "Valitse päivämäärä"; +Calendar._TT["DRAG_TO_MOVE"] = "Siirrä kalenterin paikkaa"; +Calendar._TT["PART_TODAY"] = " (tänään)"; +Calendar._TT["MON_FIRST"] = "Näytä maanantai ensimmäisenä"; +Calendar._TT["SUN_FIRST"] = "Näytä sunnuntai ensimmäisenä"; +Calendar._TT["CLOSE"] = "Sulje"; +Calendar._TT["TODAY"] = "Tänään"; +Calendar._TT["TIME_PART"] = "(Shift-) Klikkaa tai liikuta muuttaaksesi aikaa"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%d.%m.%Y"; + +Calendar._TT["WK"] = "Vko"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fr.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fr.js new file mode 100644 index 0000000..2a9e0b2 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-fr.js @@ -0,0 +1,125 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// Translator: David Duret, from previous french version + +// full day names +Calendar._DN = new Array +("Dimanche", + "Lundi", + "Mardi", + "Mercredi", + "Jeudi", + "Vendredi", + "Samedi", + "Dimanche"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dim", + "Lun", + "Mar", + "Mar", + "Jeu", + "Ven", + "Sam", + "Dim"); + +// full month names +Calendar._MN = new Array +("Janvier", + "Fvrier", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Aot", + "Septembre", + "Octobre", + "Novembre", + "Dcembre"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Fev", + "Mar", + "Avr", + "Mai", + "Juin", + "Juil", + "Aout", + "Sep", + "Oct", + "Nov", + "Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "A propos du calendrier"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Heure Selecteur\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Pour la derniere version visitez : http://www.dynarch.com/projects/calendar/\n" + +"Distribu par GNU LGPL. Voir http://gnu.org/licenses/lgpl.html pour les details." + +"\n\n" + +"Selection de la date :\n" + +"- Utiliser les bouttons \xab, \xbb pour selectionner l\'annee\n" + +"- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour selectionner les mois\n" + +"- Garder la souris sur n'importe quels boutons pour une selection plus rapide"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selection de l\'heure :\n" + +"- Cliquer sur heures ou minutes pour incrementer\n" + +"- ou Maj-clic pour decrementer\n" + +"- ou clic et glisser-deplacer pour une selection plus rapide"; + +Calendar._TT["PREV_YEAR"] = "Anne prc. (maintenir pour menu)"; +Calendar._TT["PREV_MONTH"] = "Mois prc. (maintenir pour menu)"; +Calendar._TT["GO_TODAY"] = "Atteindre la date du jour"; +Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)"; +Calendar._TT["NEXT_YEAR"] = "Anne suiv. (maintenir pour menu)"; +Calendar._TT["SEL_DATE"] = "Slectionner une date"; +Calendar._TT["DRAG_TO_MOVE"] = "Dplacer"; +Calendar._TT["PART_TODAY"] = " (Aujourd'hui)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Afficher %s en premier"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Fermer"; +Calendar._TT["TODAY"] = "Aujourd'hui"; +Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "Sem."; +Calendar._TT["TIME"] = "Heure :"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-he-utf8.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-he-utf8.js new file mode 100644 index 0000000..7861217 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-he-utf8.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Idan Sofer, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("ראשון", + "שני", + "שלישי", + "רביעי", + "חמישי", + "שישי", + "שבת", + "ראשון"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("א", + "ב", + "ג", + "ד", + "ה", + "ו", + "ש", + "א"); + +// full month names +Calendar._MN = new Array +("ינואר", + "פברואר", + "מרץ", + "אפריל", + "מאי", + "יוני", + "יולי", + "אוגוסט", + "ספטמבר", + "אוקטובר", + "נובמבר", + "דצמבר"); + +// short month names +Calendar._SMN = new Array +("ינא", + "פבר", + "מרץ", + "אפר", + "מאי", + "יונ", + "יול", + "אוג", + "ספט", + "אוק", + "נוב", + "דצמ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "אודות השנתון"; + +Calendar._TT["ABOUT"] = +"בחרן תאריך/שעה DHTML\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"הגירסא האחרונה זמינה ב: http://www.dynarch.com/projects/calendar/\n" + +"מופץ תחת זיכיון ה GNU LGPL. עיין ב http://gnu.org/licenses/lgpl.html לפרטים נוספים." + +"\n\n" + +בחירת תאריך:\n" + +"- השתמש בכפתורים \xab, \xbb לבחירת שנה\n" + +"- השתמש בכפתורים " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " לבחירת חודש\n" + +"- החזק העכבר לחוץ מעל הכפתורים המוזכרים לעיל לבחירה מהירה יותר."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"בחירת זמן:\n" + +"- לחץ על כל אחד מחלקי הזמן כדי להוסיף\n" + +"- או shift בשילוב עם לחיצה כדי להחסיר\n" + +"- או לחץ וגרור לפעולה מהירה יותר."; + +Calendar._TT["PREV_YEAR"] = "שנה קודמת - החזק לקבלת תפריט"; +Calendar._TT["PREV_MONTH"] = "חודש קודם - החזק לקבלת תפריט"; +Calendar._TT["GO_TODAY"] = "עבור להיום"; +Calendar._TT["NEXT_MONTH"] = "חודש הבא - החזק לתפריט"; +Calendar._TT["NEXT_YEAR"] = "שנה הבאה - החזק לתפריט"; +Calendar._TT["SEL_DATE"] = "בחר תאריך"; +Calendar._TT["DRAG_TO_MOVE"] = "גרור להזזה"; +Calendar._TT["PART_TODAY"] = " )היום("; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "הצג %s קודם"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "6"; + +Calendar._TT["CLOSE"] = "סגור"; +Calendar._TT["TODAY"] = "היום"; +Calendar._TT["TIME_PART"] = "(שיפט-)לחץ וגרור כדי לשנות ערך"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "שעה::"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-it.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-it.js new file mode 100644 index 0000000..7f84cde --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-it.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Translator: Fabio Di Bernardini, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domenica", + "Lunedì", + "Martedì", + "Mercoledì", + "Giovedì", + "Venerdì", + "Sabato", + "Domenica"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Lun", + "Mar", + "Mer", + "Gio", + "Ven", + "Sab", + "Dom"); + +// full month names +Calendar._MN = new Array +("Gennaio", + "Febbraio", + "Marzo", + "Aprile", + "Maggio", + "Giugno", + "Luglio", + "Augosto", + "Settembre", + "Ottobre", + "Novembre", + "Dicembre"); + +// short month names +Calendar._SMN = new Array +("Gen", + "Feb", + "Mar", + "Apr", + "Mag", + "Giu", + "Lug", + "Ago", + "Set", + "Ott", + "Nov", + "Dic"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Informazioni sul calendario"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Per gli aggiornamenti: http://www.dynarch.com/projects/calendar/\n" + +"Distribuito sotto licenza GNU LGPL. Vedi http://gnu.org/licenses/lgpl.html per i dettagli." + +"\n\n" + +"Selezione data:\n" + +"- Usa \xab, \xbb per selezionare l'anno\n" + +"- Usa " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per i mesi\n" + +"- Tieni premuto a lungo il mouse per accedere alle funzioni di selezione veloce."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selezione orario:\n" + +"- Clicca sul numero per incrementarlo\n" + +"- o Shift+click per decrementarlo\n" + +"- o click e sinistra o destra per variarlo."; + +Calendar._TT["PREV_YEAR"] = "Anno prec.(clicca a lungo per il menù)"; +Calendar._TT["PREV_MONTH"] = "Mese prec. (clicca a lungo per il menù)"; +Calendar._TT["GO_TODAY"] = "Oggi"; +Calendar._TT["NEXT_MONTH"] = "Pross. mese (clicca a lungo per il menù)"; +Calendar._TT["NEXT_YEAR"] = "Pross. anno (clicca a lungo per il menù)"; +Calendar._TT["SEL_DATE"] = "Seleziona data"; +Calendar._TT["DRAG_TO_MOVE"] = "Trascina per spostarlo"; +Calendar._TT["PART_TODAY"] = " (oggi)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostra prima %s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Chiudi"; +Calendar._TT["TODAY"] = "Oggi"; +Calendar._TT["TIME_PART"] = "(Shift-)Click o trascina per cambiare il valore"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a:%b:%e"; + +Calendar._TT["WK"] = "set"; +Calendar._TT["TIME"] = "Ora:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-jp.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-jp.js new file mode 100644 index 0000000..3bca7eb --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-jp.js @@ -0,0 +1,45 @@ +// ** I18N +Calendar._DN = new Array +("", + "", + "", + "", + "", + "", + "y", + ""); +Calendar._MN = new Array +("1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "T̍ŏ̗j؂ւ"; +Calendar._TT["PREV_YEAR"] = "ON"; +Calendar._TT["PREV_MONTH"] = "O"; +Calendar._TT["GO_TODAY"] = ""; +Calendar._TT["NEXT_MONTH"] = ""; +Calendar._TT["NEXT_YEAR"] = "N"; +Calendar._TT["SEL_DATE"] = "tI"; +Calendar._TT["DRAG_TO_MOVE"] = "EBhËړ"; +Calendar._TT["PART_TODAY"] = " ()"; +Calendar._TT["MON_FIRST"] = "j擪"; +Calendar._TT["SUN_FIRST"] = "j擪"; +Calendar._TT["CLOSE"] = "‚"; +Calendar._TT["TODAY"] = ""; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd"; +Calendar._TT["TT_DATE_FORMAT"] = "%m %d (%a)"; + +Calendar._TT["WK"] = "T"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-nl.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-nl.js new file mode 100644 index 0000000..a1dea94 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-nl.js @@ -0,0 +1,73 @@ +// ** I18N +Calendar._DN = new Array +("Zondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrijdag", + "Zaterdag", + "Zondag"); + +Calendar._SDN_len = 2; + +Calendar._MN = new Array +("Januari", + "Februari", + "Maart", + "April", + "Mei", + "Juni", + "Juli", + "Augustus", + "September", + "Oktober", + "November", + "December"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Info"; + +Calendar._TT["ABOUT"] = +"DHTML Datum/Tijd Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + +"Ga voor de meest recente versie naar: http://www.dynarch.com/projects/calendar/\n" + +"Verspreid onder de GNU LGPL. Zie http://gnu.org/licenses/lgpl.html voor details." + +"\n\n" + +"Datum selectie:\n" + +"- Gebruik de \xab \xbb knoppen om een jaar te selecteren\n" + +"- Gebruik de " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knoppen om een maand te selecteren\n" + +"- Houd de muis ingedrukt op de genoemde knoppen voor een snellere selectie."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Tijd selectie:\n" + +"- Klik op een willekeurig onderdeel van het tijd gedeelte om het te verhogen\n" + +"- of Shift-klik om het te verlagen\n" + +"- of klik en sleep voor een snellere selectie."; + +//Calendar._TT["TOGGLE"] = "Selecteer de eerste week-dag"; +Calendar._TT["PREV_YEAR"] = "Vorig jaar (ingedrukt voor menu)"; +Calendar._TT["PREV_MONTH"] = "Vorige maand (ingedrukt voor menu)"; +Calendar._TT["GO_TODAY"] = "Ga naar Vandaag"; +Calendar._TT["NEXT_MONTH"] = "Volgende maand (ingedrukt voor menu)"; +Calendar._TT["NEXT_YEAR"] = "Volgend jaar (ingedrukt voor menu)"; +Calendar._TT["SEL_DATE"] = "Selecteer datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Klik en sleep om te verplaatsen"; +Calendar._TT["PART_TODAY"] = " (vandaag)"; +//Calendar._TT["MON_FIRST"] = "Toon Maandag eerst"; +//Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst"; + +Calendar._TT["DAY_FIRST"] = "Toon %s eerst"; + +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Sluiten"; +Calendar._TT["TODAY"] = "(vandaag)"; +Calendar._TT["TIME_PART"] = "(Shift-)Klik of sleep om de waarde te veranderen"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b %Y"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Tijd:"; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pl.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pl.js new file mode 100644 index 0000000..76e0551 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pl.js @@ -0,0 +1,56 @@ +// ** I18N +// Calendar PL language +// Author: Artur Filipiak, +// January, 2004 +// Encoding: UTF-8 +Calendar._DN = new Array +("Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"); + +Calendar._SDN = new Array +("N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"); + +Calendar._MN = new Array +("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"); + +Calendar._SMN = new Array +("Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O kalendarzu"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Wybór daty:\n" + +"- aby wybrać rok użyj przycisków \xab, \xbb\n" + +"- aby wybrać miesiąc użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + +"- aby przyspieszyć wybór przytrzymaj wciśnięty przycisk myszy nad ww. przyciskami."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Wybór czasu:\n" + +"- aby zwiększyć wartość kliknij na dowolnym elemencie selekcji czasu\n" + +"- aby zmniejszyć wartość użyj dodatkowo klawisza Shift\n" + +"- możesz również poruszać myszkę w lewo i prawo wraz z wciśniętym lewym klawiszem."; + +Calendar._TT["PREV_YEAR"] = "Poprz. rok (przytrzymaj dla menu)"; +Calendar._TT["PREV_MONTH"] = "Poprz. miesiąc (przytrzymaj dla menu)"; +Calendar._TT["GO_TODAY"] = "Pokaż dziś"; +Calendar._TT["NEXT_MONTH"] = "Nast. miesiąc (przytrzymaj dla menu)"; +Calendar._TT["NEXT_YEAR"] = "Nast. rok (przytrzymaj dla menu)"; +Calendar._TT["SEL_DATE"] = "Wybierz datę"; +Calendar._TT["DRAG_TO_MOVE"] = "Przesuń okienko"; +Calendar._TT["PART_TODAY"] = " (dziś)"; +Calendar._TT["MON_FIRST"] = "Pokaż Poniedziałek jako pierwszy"; +Calendar._TT["SUN_FIRST"] = "Pokaż Niedzielę jako pierwszą"; +Calendar._TT["CLOSE"] = "Zamknij"; +Calendar._TT["TODAY"] = "Dziś"; +Calendar._TT["TIME_PART"] = "(Shift-)klik | drag, aby zmienić wartość"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y.%m.%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pt.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pt.js new file mode 100644 index 0000000..deee8a1 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-pt.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar pt_BR language +// Author: Adalberto Machado, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Segunda", + "Terca", + "Quarta", + "Quinta", + "Sexta", + "Sabado", + "Domingo"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Seg", + "Ter", + "Qua", + "Qui", + "Sex", + "Sab", + "Dom"); + +// full month names +Calendar._MN = new Array +("Janeiro", + "Fevereiro", + "Marco", + "Abril", + "Maio", + "Junho", + "Julho", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Dezembro"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Out", + "Nov", + "Dez"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Sobre o calendario"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" + +"Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." + +"\n\n" + +"Selecao de data:\n" + +"- Use os botoes \xab, \xbb para selecionar o ano\n" + +"- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" + +"- Segure o botao do mouse em qualquer um desses botoes para selecao rapida."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selecao de hora:\n" + +"- Clique em qualquer parte da hora para incrementar\n" + +"- ou Shift-click para decrementar\n" + +"- ou clique e segure para selecao rapida."; + +Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)"; +Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)"; +Calendar._TT["GO_TODAY"] = "Hoje"; +Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)"; +Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)"; +Calendar._TT["SEL_DATE"] = "Selecione a data"; +Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover"; +Calendar._TT["PART_TODAY"] = " (hoje)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Fechar"; +Calendar._TT["TODAY"] = "Hoje"; +Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b"; + +Calendar._TT["WK"] = "sm"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-ru.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-ru.js new file mode 100644 index 0000000..9f75a6a --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-ru.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar RU language +// Translation: Sly Golovanov, http://golovanov.net, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("воскресенье", + "понедельник", + "вторник", + "среда", + "четверг", + "пятница", + "суббота", + "воскресенье"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("вск", + "пон", + "втр", + "срд", + "чет", + "пят", + "суб", + "вск"); + +// full month names +Calendar._MN = new Array +("январь", + "февраль", + "март", + "апрель", + "май", + "июнь", + "июль", + "август", + "сентябрь", + "октябрь", + "ноябрь", + "декабрь"); + +// short month names +Calendar._SMN = new Array +("янв", + "фев", + "мар", + "апр", + "май", + "июн", + "июл", + "авг", + "сен", + "окт", + "ноя", + "дек"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "О календаре..."; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Как выбрать дату:\n" + +"- При помощи кнопок \xab, \xbb можно выбрать год\n" + +"- При помощи кнопок " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " можно выбрать месяц\n" + +"- Подержите эти кнопки нажатыми, чтобы появилось меню быстрого выбора."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Как выбрать время:\n" + +"- При клике на часах или минутах они увеличиваются\n" + +"- при клике с нажатой клавишей Shift они уменьшаются\n" + +"- если нажать и двигать мышкой влево/вправо, они будут меняться быстрее."; + +Calendar._TT["PREV_YEAR"] = "На год назад (удерживать для меню)"; +Calendar._TT["PREV_MONTH"] = "На месяц назад (удерживать для меню)"; +Calendar._TT["GO_TODAY"] = "Сегодня"; +Calendar._TT["NEXT_MONTH"] = "На месяц вперед (удерживать для меню)"; +Calendar._TT["NEXT_YEAR"] = "На год вперед (удерживать для меню)"; +Calendar._TT["SEL_DATE"] = "Выберите дату"; +Calendar._TT["DRAG_TO_MOVE"] = "Перетаскивайте мышкой"; +Calendar._TT["PART_TODAY"] = " (сегодня)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Первый день недели будет %s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Закрыть"; +Calendar._TT["TODAY"] = "Сегодня"; +Calendar._TT["TIME_PART"] = "(Shift-)клик или нажать и двигать"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a"; + +Calendar._TT["WK"] = "нед"; +Calendar._TT["TIME"] = "Время:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-sv.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-sv.js new file mode 100644 index 0000000..db1f4b8 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-sv.js @@ -0,0 +1,93 @@ +// ** I18N + +// Calendar SV language (Swedish, svenska) +// Author: Mihai Bazon, +// Translation team: +// Translator: Leonard Norrgrd +// Last translator: Leonard Norrgrd +// Encoding: iso-latin-1 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("sndag", + "mndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "lrdag", + "sndag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. +Calendar._SDN_len = 2; +Calendar._SMN_len = 3; + +// full month names +Calendar._MN = new Array +("januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Om kalendern"; + +Calendar._TT["ABOUT"] = +"DHTML Datum/tid-vljare\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Fr senaste version g till: http://www.dynarch.com/projects/calendar/\n" + +"Distribueras under GNU LGPL. Se http://gnu.org/licenses/lgpl.html fr detaljer." + +"\n\n" + +"Val av datum:\n" + +"- Anvnd knapparna \xab, \xbb fr att vlja r\n" + +"- Anvnd knapparna " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " fr att vlja mnad\n" + +"- Hll musknappen nedtryckt p ngon av ovanstende knappar fr snabbare val."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Val av tid:\n" + +"- Klicka p en del av tiden fr att ka den delen\n" + +"- eller skift-klicka fr att minska den\n" + +"- eller klicka och drag fr snabbare val."; + +Calendar._TT["PREV_YEAR"] = "Fregende r (hll fr menu)"; +Calendar._TT["PREV_MONTH"] = "Fregende mnad (hll fr menu)"; +Calendar._TT["GO_TODAY"] = "G till dagens datum"; +Calendar._TT["NEXT_MONTH"] = "Fljande mnad (hll fr menu)"; +Calendar._TT["NEXT_YEAR"] = "Fljande r (hll fr menu)"; +Calendar._TT["SEL_DATE"] = "Vlj datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Drag fr att flytta"; +Calendar._TT["PART_TODAY"] = " (idag)"; +Calendar._TT["MON_FIRST"] = "Visa mndag frst"; +Calendar._TT["SUN_FIRST"] = "Visa sndag frst"; +Calendar._TT["CLOSE"] = "Stng"; +Calendar._TT["TODAY"] = "Idag"; +Calendar._TT["TIME_PART"] = "(Skift-)klicka eller drag fr att ndra tid"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A %d %b %Y"; + +Calendar._TT["WK"] = "vecka"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-tr.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-tr.js new file mode 100644 index 0000000..2164687 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-tr.js @@ -0,0 +1,58 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// Turkish Translation by Nuri AKMAN +// Location: Ankara/TURKEY +// e-mail : nuriakman@hotmail.com +// Date : April, 9 2003 +// +// Note: if Turkish Characters does not shown on you screen +// please include falowing line your html code: +// +// +// +////////////////////////////////////////////////////////////////////////////////////////////// + +// ** I18N +Calendar._DN = new Array +("Pazar", + "Pazartesi", + "Sal", + "aramba", + "Perembe", + "Cuma", + "Cumartesi", + "Pazar"); +Calendar._MN = new Array +("Ocak", + "ubat", + "Mart", + "Nisan", + "Mays", + "Haziran", + "Temmuz", + "Austos", + "Eyll", + "Ekim", + "Kasm", + "Aralk"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Haftann ilk gnn kaydr"; +Calendar._TT["PREV_YEAR"] = "nceki Yl (Men iin basl tutunuz)"; +Calendar._TT["PREV_MONTH"] = "nceki Ay (Men iin basl tutunuz)"; +Calendar._TT["GO_TODAY"] = "Bugn'e git"; +Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Men iin basl tutunuz)"; +Calendar._TT["NEXT_YEAR"] = "Sonraki Yl (Men iin basl tutunuz)"; +Calendar._TT["SEL_DATE"] = "Tarih seiniz"; +Calendar._TT["DRAG_TO_MOVE"] = "Tamak iin srkleyiniz"; +Calendar._TT["PART_TODAY"] = " (bugn)"; +Calendar._TT["MON_FIRST"] = "Takvim Pazartesi gnnden balasn"; +Calendar._TT["SUN_FIRST"] = "Takvim Pazar gnnden balasn"; +Calendar._TT["CLOSE"] = "Kapat"; +Calendar._TT["TODAY"] = "Bugn"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y"; +Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD"; + +Calendar._TT["WK"] = "Hafta"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/calendar-zh.js b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-zh.js new file mode 100644 index 0000000..4a0feb6 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/calendar-zh.js @@ -0,0 +1,119 @@ +// ** I18N + +// Calendar ZH language +// Author: muziq, +// Encoding: GB2312 or GBK +// Distributed under the same terms as the calendar itself. + +// full day names +Calendar._DN = new Array +("", + "һ", + "ڶ", + "", + "", + "", + "", + ""); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("", + "һ", + "", + "", + "", + "", + "", + ""); + +// full month names +Calendar._MN = new Array +("һ", + "", + "", + "", + "", + "", + "", + "", + "", + "ʮ", + "ʮһ", + "ʮ"); + +// short month names +Calendar._SMN = new Array +("һ", + "", + "", + "", + "", + "", + "", + "", + "", + "ʮ", + "ʮһ", + "ʮ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = ""; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"ѡ:\n" + +"- \xab, \xbb ťѡ\n" + +"- " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ťѡ·\n" + +"- ϰťɴӲ˵пѡݻ·"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"ѡʱ:\n" + +"- Сʱӿʹֵһ\n" + +"- סShiftСʱӿʹֵһ\n" + +"- ϶ɽпѡ"; + +Calendar._TT["PREV_YEAR"] = "һ (ס˵)"; +Calendar._TT["PREV_MONTH"] = "һ (ס˵)"; +Calendar._TT["GO_TODAY"] = "ת"; +Calendar._TT["NEXT_MONTH"] = "һ (ס˵)"; +Calendar._TT["NEXT_YEAR"] = "һ (ס˵)"; +Calendar._TT["SEL_DATE"] = "ѡ"; +Calendar._TT["DRAG_TO_MOVE"] = "϶"; +Calendar._TT["PART_TODAY"] = " ()"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "ʾ%s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "ر"; +Calendar._TT["TODAY"] = ""; +Calendar._TT["TIME_PART"] = "(Shift-)϶ıֵ"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %b %e"; + +Calendar._TT["WK"] = ""; +Calendar._TT["TIME"] = "ʱ:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/lang/cn_utf8.js b/ehcp/net2ftp/plugins/jscalendar/lang/cn_utf8.js new file mode 100644 index 0000000..a0ef7c6 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/lang/cn_utf8.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Translator : Niko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("\u5468\u65e5",//\u5468\u65e5 + "\u5468\u4e00",//\u5468\u4e00 + "\u5468\u4e8c",//\u5468\u4e8c + "\u5468\u4e09",//\u5468\u4e09 + "\u5468\u56db",//\u5468\u56db + "\u5468\u4e94",//\u5468\u4e94 + "\u5468\u516d",//\u5468\u516d + "\u5468\u65e5");//\u5468\u65e5 + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d", + "\u5468\u65e5"); + +// full month names +Calendar._MN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// short month names +Calendar._SMN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "\u5173\u4e8e"; + +Calendar._TT["ABOUT"] = +" DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" + +"\u9075\u5faaGNU LGPL. \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"\u65e5\u671f\u9009\u62e9:\n" + +"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" + +"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" + +"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"\u65f6\u95f4\u9009\u62e9:\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)."; + +Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74"; +Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708"; +Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929"; +Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708"; +Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74"; +Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f"; +Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8"; +Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "\u5173\u95ed"; +Calendar._TT["TODAY"] = "\u4eca\u5929"; +Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5"; + +Calendar._TT["WK"] = "\u5468"; +Calendar._TT["TIME"] = "\u65f6\u95f4:"; diff --git a/ehcp/net2ftp/plugins/jscalendar/menuarrow.gif b/ehcp/net2ftp/plugins/jscalendar/menuarrow.gif new file mode 100644 index 0000000..ed2dee0 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/menuarrow.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/menuarrow2.gif b/ehcp/net2ftp/plugins/jscalendar/menuarrow2.gif new file mode 100644 index 0000000..40c0aad Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/menuarrow2.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/multiple-dates.html b/ehcp/net2ftp/plugins/jscalendar/multiple-dates.html new file mode 100644 index 0000000..9e7dfa5 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/multiple-dates.html @@ -0,0 +1,82 @@ + + + Sample for the multiple dates feature + + + + + + + + + + + + + + +

        Sample for the multiple dates feature

        + +

        + Starting version 0.9.7, + the calendar is able to handle multiple dates selection, in either + flat or popup form. For this to happen one needs to pass the + "multiple: true" parameter to + Calendar.setup and to install an onUpdate + handler that watches for modifications. +

        + + [open calendar...] + +
        + + + +
        +
        mishoo
        + Last modified: Thu Mar 3 20:17:42 EET 2005 + diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/active-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/active-bg.gif new file mode 100644 index 0000000..d608c54 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/active-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/dark-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/dark-bg.gif new file mode 100644 index 0000000..1dea48a Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/dark-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/hover-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/hover-bg.gif new file mode 100644 index 0000000..fbf94fc Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/hover-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/menuarrow.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/menuarrow.gif new file mode 100644 index 0000000..40c0aad Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/menuarrow.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/normal-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/normal-bg.gif new file mode 100644 index 0000000..bdb5068 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/normal-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/rowhover-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/rowhover-bg.gif new file mode 100644 index 0000000..7715342 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/rowhover-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/status-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/status-bg.gif new file mode 100644 index 0000000..857108c Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/status-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/theme.css b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/theme.css new file mode 100644 index 0000000..f7cc826 --- /dev/null +++ b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/theme.css @@ -0,0 +1,236 @@ +/* Distributed as part of The Coolest DHTML Calendar + Author: Mihai Bazon, www.bazon.net/mishoo + Copyright Dynarch.com 2005, www.dynarch.com +*/ + +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #bdb2bf; + font-size: 11px; + color: #000; + cursor: default; + background: url("normal-bg.gif"); + font-family: "trebuchet ms",verdana,tahoma,sans-serif; +} + +.calendar { + border-color: #797979; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + background: url("title-bg.gif") repeat-x 0 100%; color: #000; + font-weight: bold; +} + +.calendar .nav { + font-family: verdana,tahoma,sans-serif; +} + +.calendar .nav div { + background: transparent url("menuarrow.gif") no-repeat 100% 100%; +} + +.calendar thead tr { background: url("title-bg.gif") repeat-x 0 100%; color: #000; } + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + padding: 2px; + background: url("title-bg.gif") repeat-x 0 100%; color: #000; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #797979; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #c44; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background: url("hover-bg.gif"); + border-bottom: 1px solid #797979; + padding: 2px 2px 1px 2px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background: url("active-bg.gif"); color: #fff; + padding: 3px 1px 0px 3px; + border-bottom: 1px solid #797979; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: url("dark-bg.gif"); +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + font-family: verdana,tahoma,sans-serif; + width: 2em; + color: #000; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #999; +} +.calendar tbody .day.othermonth.oweekend { + color: #f99; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #797979; + background: url("dark-bg.gif"); +} + +.calendar tbody .rowhilite td, +.calendar tbody .rowhilite td.wn { + background: url("rowhover-bg.gif"); +} + +.calendar tbody td.today { font-weight: bold; /* background: url("today-bg.gif") no-repeat 70% 50%; */ } + +.calendar tbody td.hilite { /* Hovered cells */ + background: url("hover-bg.gif"); + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #c44; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border: 1px solid #797979; + padding: 1px 3px 1px 1px; + background: url("active-bg.gif"); color: #fff; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #565; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + padding: 2px; + background: url("status-bg.gif") repeat-x 0 0; color: #000; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #afa; + border: 1px solid #084; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #7c7; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border-width: 0 1px 1px 1px; + border-style: solid; + border-color: #797979; + background: url("normal-bg.gif"); color: #000; + z-index: 100; + font-size: 90%; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar .combo .active { + background: url("active-bg.gif"); color: #fff; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #797979; + padding: 1px 0px; + text-align: center; + background: url("dark-bg.gif"); +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 5px 0px 6px; + font-weight: bold; + background: url("normal-bg.gif"); color: #000; +} + +.calendar td.time .hour, +.calendar td.time .minute { + font-family: monospace; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar td.time span.active { + background: url("active-bg.gif"); color: #fff; +} diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/title-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/title-bg.gif new file mode 100644 index 0000000..6a541b3 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/title-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jscalendar/skins/aqua/today-bg.gif b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/today-bg.gif new file mode 100644 index 0000000..7161538 Binary files /dev/null and b/ehcp/net2ftp/plugins/jscalendar/skins/aqua/today-bg.gif differ diff --git a/ehcp/net2ftp/plugins/jupload/jupload.jar b/ehcp/net2ftp/plugins/jupload/jupload.jar new file mode 100644 index 0000000..e728c97 Binary files /dev/null and b/ehcp/net2ftp/plugins/jupload/jupload.jar differ diff --git a/ehcp/net2ftp/plugins/jupload/readme.txt b/ehcp/net2ftp/plugins/jupload/readme.txt new file mode 100644 index 0000000..fd2ecf2 --- /dev/null +++ b/ehcp/net2ftp/plugins/jupload/readme.txt @@ -0,0 +1,962 @@ + + +v5.0.8 + +Change: +- [Major] Update of plugin versions. Compatibility for maven 3 + +Fixes: +- [Minor] Bug 3514265 : Error when starting Upload via JavaScript without files +- [Minor] Bug 3487886 - When uploading to a URL with a port number different from 80, the upload would fail (against IBM WebSphere). Thanks to Nicholas DiPiazza (ndipiazza) for both the bug report and solution ! +- [Minor] php bug fixes (reported by pascal_p) (jupload.php) +- [Minor] Fix bug where upload failed if MD5sum disabled and single file uploaded (jupload.php) +- [Minor] Override system umask for dir/file permissions (jupload.php) +- [Minor] Fix incorrect expression evaluations (jupload.php) +- [Minor] A try to fix the bug 3482625 : java.util.ConcurrentModificationException (random bug when multiple JUpload applets are on the same web page). +- [Minor] Remove a bug, which generates 'random' error while executing JUnit tests of PictureFileDataTest. + +v5.0.7 + +Fixes: +- [Major] The applet could try to post to a wrong URL, due to a bad cookie and userAgent management, during the first HEAD request to the server. +This bug would occur, when the server returns the redirection (HTTP 302 return code) to the applet, due to the lack of cookies or userAgent header in the HEAD request. + +Change: +- [Minor] Add of the uploadedfiles() method, in the PHP jupload class. This allows external PHP script to access to the uploaded files, +without directly accessing the internal 'files' attribute of the class. + + + +v5.0.6 + +Fixes: +- [Minor] Compatibility with m2e Maven3 eclipse plugin (for eclipse 3.7) +- [Minor ... for non Hebrew speaker] The Hebrew translation was not accessible. + + + +v5.0.5 + +Changes: +- All source files are now encoded in UTF-8, out of applet files, which remains in UTF-16 (hum, that'll have to be changed...) + +Fixes : +- [translation plugin] Add of language sort, in the list of languages. +- [Minor] The message "Preparing File 1/n" was not displayed for the first file. Was annoying, when the file preparation was long (e.g.: long +MD5sum calculation). +- [Minor] JUnit test would crash on Mac. Thanks to devilshands. +- [Minor] Removed a warning during Maven compilation (character encoding). Thanks to devilshands. + +Translation: +- [Finnish] Update of the Finnish translation submitted by 'anonymous' (!) +- [Simplified Chinese] Update of the Simplified Chinese translation submitted by 'anonymous' (!) + + +v5.0.4 + +Fixes: +- [Major-PictureMode] Corrected a memory leak, when using the file chooser. Would lead to OutOfMemoryError. + + +v5.0.3 + +Fixes: +- [Packaging] The maven-translation-plugin was missing in the release packages +- [Translation] Danish translation updated, thanks to Jeppe Bundsgaard + + +v5.0.2 + +Fixes: +- [Major] For upload chunks, the retry feature didn't work (the sent data was corrupted). Thanks to jmont25 for the report. +- [Major] (picture mode only) In the file chooser, opening a folder with tiff pictures would throw a NullPointerException. +- [Minor] When an error occurs, the error log is copied (like in earlier versions) in the clipboard. +- [Minor] (picture mode only) In the file chooser, if non-picture files are displayed, the wait cursor would remain. + +v5.0.1 + +Fix: +- [Major] Bug 3132737. Czech (and Croatian) translation : upload would not work (due to a UnknownFormatConversionException error) +- [Minor] The reported upload speed was wrong +- [Minor] Bug 3131598 (POST params getting double urlencoding). The postURL are now properly urldecoded before being sent as post parameters (thanks to ... for the report) +- [Minor] The advanced_demo uses now the correct lang codes (making its multilangual capabilities testable) +- [Minor] The status bar is now also cleared, 5" after a successful upload + +Translation: +- Swedish translation, updated, thanks to Henrik Friz�n + + +v5.0.0 + +Changes: +- [Translation] Add of the maven-translation-plugin, to manage translations (documentation and packaging). See the howto-translate.html +page on the JUpload site for details. +- [Applet parameter] New "sendMD5Sum" applet parameter. Interesting as MD5Sum calculation takes time for big files. Set it +to true, if you want the applet to calculate and send the MD5Sum to the server. Default to false. +PREVIOUS BEHAVIOR: the applet would always send the MD5Sum. +- [Minor] The applet now checks if it is signed, and displays a proper message when it is unsigned. +- [JUpload Developper only] Creation of the jupload-translation maven plugin, to format all lang files, according to the Java needs. +- [Proxy] SSL through HTTP Proxy (Patch given by cuspy: Patch 3043476 on Sourceforge) +- [Minor] Bug 3061033: The column size in the file panel, is now a percentage of the available space. +- [Minor] MD5Sum is no more mandatory, when using the given PHP script + + +Fixes: +- [Major] If the user would click on the 'stop' button, all files being uploaded would be removed, despite the +fact that they were actually not uploaded. +- [Minor] The upload speed displayed it no more 'Infinity', but a real upload speed. +- [Minor] After clearing the debug output, nothing more was logged +- [Minor] Bug 3065033: Content-Type should use charset= (thanks for the report ... and the correction to Andy Lindeman (alindeman)) + + +v5.0.0rc4 + +Changes: +- MAVEN MIGRATION. The project structure has been updated to use Apache Maven. It is STILL POSSIBLE TO BUILD WITH ANT. + This allows to simplify the build process and to easily use external tools, + like quality tools. Please read the http://jupload.sourceforge.net/howto-compile.html page for details +- [new applet parameter] fileFilterName allows to control the name of the file filter in the file chooser. Interesting +when using a long list of allowed file extensions. +- [Code] Add of the UploadPolicy.updateButtonState() method, which allows the UploadPolicy to manage specific GUI items, depending +on the current execution status of the applet. + +Fixes: +- [Major] Compatibility with https upload is corrected (still no client certificate management) +- [Major] Patch 3000216 (407 Proxy Authentication for https fix). Https through Proxy connection is now possible. +- [Major] Samples.PHP/index.php may not work, due to a lacking session. +- [Major] Czech translation corrected (upload would not work) +- [Minor] When a message contains several lines, it's still truncated by pieces of 80 (?) characters, despite the fact the +each line may be less than 80 characters +- [Minor] Compatibility issue with Paste operation on Linux where an URL to file is pasted instead of the actual data. +- [Minor] Internationalization for Paste message. +- [Minor] Paste operation calls UploadPolicy.afterFileDropped to have a consistent behaviour with drag and drop operation. +- [Minor] Bug 3006175: Minor typo in PHP example... (this-> missing on line 719) +- [Minor] When a directory is pasted, the directory as well as its files is uploaded thus keeping informations on the directory itself, +and not on only its consituents. + + +v5.0.rc3 + +Changes: +- [Major] Add of the resume feature: when a resumable error occurs (typically: a network error), the applet will try to +resume the upload. That is: a dialog box is open to ask the user if he wants to retry the upload, by re-executing it. A +timer makes this retry automatic: if the user doesn't choose (eg: if he is aways from his computer), the upload will +automatically be re-executed. +(Please read the new applet parameters documentation: retryMaxNumberOf and retryNbSecondsBetween for further information) +- [Minor] The not really useful column 'Readable?', on the file list, has been removed. +- [Minor] Add of mime types Office 2007 support (thanks to jsibby) +- [Minor] (Regression since 5.0.rc1) The message indicating the index of uploaded files was wrong. +- [PHP] A PHP class is now embedded in each release. It contains a ready to use PHP class that manage all the applet +parameters, and a sample on how to use it. + +Fixes: +- [Major] Chunk upload was broken (since 5.0rc1) +- [Major] Bug 2985227: When nbFilesPerRequest is set to -1, the upload button just does nothing. +- [Major] Bug 2985230: When the file to upload is too big, the button are not properly enabled (impossible to add new files +without refreshing the web page) +- [Minor] Bug 2960834: Applet doesn't response to the stop button, when waiting for the server response. +- [Minor] Better thread management at applet startup. Can prevent some (very rare) browser crash. + +Translation: +- (bug 2961791) Correction of the language code (the country code was used instead). The corrected translation are: + lang_br: removed (lang_pt and lang_pt_BR are Ok). + Czech: lang_cz -> lang_cs + Danish: lang_dk -> lang_da + Hebrew: lang_il -> lang_he + Swedish: lang_se -> lang_sv + Slovenian: lang_si -> lang_sl +Note: the applet can't guess the language wich is selected in the navigator. You'll have to use the applet +lang parameter, to transmit this information. + + + +v5.0.rc2 + +Fixes: +- [Minor] n� 2951651. Drag&drop didnt work on Linux +- [Major] Regression in v5.0.rc1: The property index was wrong, when using 'iteration' parameters (default applet behavior) +- [Major] Bug n�2945676 Upload progress doesn't update on 5.0.0rc1 +- [Minor] The HEAD request (to check the HTTP server protocol, and any temporary redirection) is now done in a separate +thread, to accelerate the applet startup +- [Minor] Corrected the demo web site: The applet now starts at a normal speed (the caching of the jar file was prohibited!) +- [Minor] Better release of used resources, when the applet is stopped + +Translation +- [Romanian] New translation, thanks to ady1503 +- [Bulgarian] New translation, thanks to zulix (zulix at zulix.net) + + +v5.0.rc1 + +Changes: +- [Major] Rewriting of the upload code, to separate file preparation, file grouping in packet, and uploading. This should +make the applet consume less memory and less CPU... and have a code easier to understand ! +- [Major] Add of the samples.PHP folder, based on the wiki content. It contains a ready to use PHP class, to easily manage the applet and uplaoded files. +- [Minor] Better exception management during upload +- [Minor] browseDirectory applet parameter: The applet now manages path beginning by ~ (current user's home) + +Fixes: +- [Minor] Applet startup is quicker. +- [Minor] Stop button is now more responsive. +- [Minor] New methods in UploadPolicy: + confirmDialogStr(str, optionTypes), to display confirmation dialog (as JOPtionPane.showConfirmDialog). + displayErr(errorText, exception, optionTypes), to log an error and display a confirmation dialog. + getString(key) is renamed as getLocalizedString(key) + getLocalizedString(key, param1) and getLocalizedString(key, param1, param2) are created, to manage dynamic localized strings. + + +v4.6.0 + +- [Major] Compatibility with Java 1.5 is now restored. Make it work on Mac computers. +- [Major] bug n�2884603. When using a proxy, the port number of the postURL was ignored. +- [Major] In FTP mode, uploaded to the root of the available folder (eg: ftp://user:mdp@host/) would throw a NullPointerException. +- [Minor] httpUploadParameterName and httpUploadParameterType are now fully implemented, and changed a little. Check their definition, in the +'howto customize' documentation. Also added the httpUploadParameterType oneFile Type. +- [Minor] One thread was still running on, when the navigator would stop the applet. +- [Minor] Better management of the debug output. Consume less CPU +- [Code] UploadPolicy.setCurrentBrowsingDirectory(File) is deprecated. Please new use UploadPolicy#setCurrentBrowsingDirectory(String) + +v4.5.0 +- [Medium, Picture mode] + * parameter targetPictureFormat is now supported and can take a list of conversion formats + * new parameter keepOriginalFileExtensionForConvertedImages to let the user decide if she + want to change the file extension of a converted image or not +- [Minor] In some case, the file root was not correctly calculated (drop of several files) +- [Minor] Bug 2819872: Better behavior of the applet, when using form-data with an INPUT tag that has no name +(the item is just ignored, a WARN is logged) +- [Minor] Empty headers are now ignored, when writing the HTTP query (prevent upload errors, caused by malformed HTTP +query, containing an empty line in the headers) +- [Minor] The formData parameter now accepts form names that contain a minus (-) sign in the name. +- [Minor] If the formData contains a form name which is present two times on the HTML page, the applet no more ignore it. It takes +the first form of this name. +- [Minor] Add of the httpUploadParameterName and httpUploadParameterType applet parameter: allow to better control the parameter name +and format (array or iteration) in the HTTP upload request. To be generalized to all upload data (md5, path...) in next version. + +v4.4.0 + +Fix: +- [Major] Prevents the applet to freeze, when a message is displayed to the user during upload. +- [Major] formData would not work on IE7 + +Changes: +- [Minor] The UploadPolicy.isUploadReady() and UploadPolicy.beforeUpload() has been merged, in the beforeUpload() method. + + +v4.3.3 + +Fix: +- [Major, Picture mode] If the picture has too big resized before upload, it was done twice. The applet could event freeze +while doing that (caused by an OutOfMemory) + + +v4.3.2 + +IMPORTANT NOTE (repeated from 4.3.0 release): the language packaging has changed. Please check the: +* That the applet still work the way you want, in your language. +* That your translation is up-to-date: + + +Fix: +- [Major] Applet would freeze, when an error occurs (while displaying an error message) + + +v4.3.1 + +IMPORTANT NOTE (repeated from 4.3.0 release): the language packaging has changed. Please check the: +* That the applet still work the way you want, in your language. +* That your translation is up-to-date: + + +Fix: +- [Major] Applet would freeze, when an error occurs (while displaying an error message) +- [Major] https upload did not work (probably since 4.0) + + +v4.3.0 + +IMPORTANT NOTE: the language packaging has changed. Please check the: +* That the applet still work the way you want, in your language. +* That your translation is up-to-date: + +Fix: +- [Major] The STOP button now works correctly. +- [Medium] Chunk upload would not redirect to afterUploadURL, after a successful upload (thanks to Michael LaRosa, SF account: larosa) +- [Medium] Fixed a problem when using the formData applet parameter, on complex html FORM. Would prevent upload to work. +- [Medium] The STOP button is much more effective. Now manage through a Java exception, to really interrupt the running on upload. +- [Minor] FTP connection is better managed (check of FTP connection, before using it). +- [Minor] Warning and error messages can now contain line breaks (see stringUploadWarning and stringUploadError applet parameters) +- [Minor] relpathinfo has now the same value for dropped files, and for files selected by the file chooser (was corrected in 4.2.0) + +Change: +- [CPU] All logging actions are now done in a separate thread: this should make upload consume less CPU, especially in debug mode. This +may make upload quicker on fast networks (1Gb). +- [FTP] Add of the ftpCreateDirectoryStructure applet parameter. Default false: all files are uploaded in +the folder given in postURL. If true, the folder structure will be created on the target FTP server. +- [Cookies] Add of the readCookieFromNavigator applet parameter. Default to true (applet behavior unchanged). If +false, the caller should put the relevant Cookie: header in the specificHeaders applet parameter. +- [nbFilesPerRequest] Default to the nbFilesPerRequest applet parameter is now 1 (was -1!). + + +v4.2.0 + +Fix: +- [Major] Upload speed restored (50% quicker than 4.x releases): it has slown down due to the management of +the progress bar, and the increase of debug information logged. The debug file has been removed. +- [Major] Corrected a NullPointerException, when 'HttpOnly' is in the SetCookie header. Typically, with PHP, when +session.cookie_httponly is set to 1. +- [Major] Management of urlToSendErrorTo would generate an error (but the error was correctly sent to the URL). Thanks +to (thanks to Zapp29, sourceforge account: brusaf) +- [Minor] Uploaded file would not be correctly released, until the java applet would close. (thanks to Zapp29, sourceforge account: brusaf) +- [Minor] Add of the missing call to uploadPolicy.beforeUpload() (regression since 4.0). (thanks to Zapp29, sourceforge account: brusaf) + +v4.1.0 + +Mainly a bug correction release. + +Fix: +- [Major] Regression in the 4.0: the SUCCESS or ERROR in the HTTP return was not properly checked. +- [Major] In some cases, chunk upload would not work (two files would be sent at once, which doesn't work) +- [Major] For afterUploadURL in javascript: the parameters msg and body were not correctly managed. +- [Minor] The upload speed, and the estimated time of arrival were wrong. Calculation is now more precise than before. +- [Minor] Add of a new message, when trying to transform (resize, rotate) a gif picture, in JRE 1.5: not supported +by the sun JRE. JRE 1.6 is needed. +- [Minor] FTP: add of the ftpTransfertBinary and ftpTransfertPassive parameters. +- [Minor] Regression in the 4.0: after the STOP button has been hit, the other button would not return to their correct state. + +Martin Westin found another way to sign applet. See: +https://sourceforge.net/forum/forum.php?thread_id=2991519&forum_id=199106 +(ref added to the README.txt file) + +v4.0.0 + +Fix: +- [Major] Fixed a regression in chunk upload, which came with the 4.0.0rc1 version. +- [Minor] relpathinfo was empty, when files were dropped or pasted onto the applet. +- [Minor] JUpload is compatible again with a JRE 1.5. + + +Translation: +- [Arabic] Add of the Arabic translation, thanks to Abdulrhman Alkhodiry + + +V4.0.0rc1 + +Changes: +- [MAJOR] Rewrite of the core upload code. Introduction of multi-threading: one thread to +prepare files, one to upload files. Especially useful for picture mode. +- [Major] Add of a new applet parameter: browsingDirectory. It allows the control of the directory in which +the browse button will open the FileChooser for the first time. +- [Minor] The allowHttpPersistent default value is now false, as a lot of people had troubles with persistent connections. +- [Minor] When opening the FileChooser a second time, it will open where the user has closed it the previous time. +- [Minor] When the file is too big, the applet now displays a file size in Gb, Mb or Kb, instead +of the total amount of bytes. +- [Minor] Hidden files are no more visible in the file chooser. They can still be added by drag'n'drop +or paste operations. +- [Minor] When a file is too big, the alert message now displays a size in Mb, Gb... (not the while byte number). +- [Minor] Hidden files are not visible within the FileChooser. Hidden files can still be dropped or pasted +onto the applet. +- [Minor] There are now two progress bar: file preparation (quite useless for default upload policy) and the +upload progress. Text has been updated. +- [Minor] In picture mode, the file chooser is much more reactive to user interactions, especially on directory +containing a lot of files. + +Fix: +- [Major] Allows sending very large number of files. Previous version was crashing with 4000 files. +- [2189777] The applet would generate a non-blocking NullPointerException for server response +with Content-Length to 0. Typically: a HEAD response. + + +V3.5.1 + +Fix: +- [Major] Bug n�2174306: 'Upload' button remained disabled after using 'Browse..' button + + +V3.5.0 + +Note: +- Error management has been enhanced + +Changes: +- [Major] It's now possible to paste files onto the applet. A contextual manue (right-click) is available for +that on the applet. +- [Major] The error management has been corrected: see the urlToSendErrorTo applet parameter description. +- [Minor] Stack trace display is enhanced. When an error occurs during upload, the stack trace should now +always give the line that fired the exception. +- [Minor] showLogWindow is now a string (was a boolean). Allowed values are: true, false and onError. +- [Minor] Setters added in UploadPolicy for the following applet parameters: lang, urlToSendErrorTo +- [Minor] Some attributes switched to protected, for easier use of the applet when embedded in others program, +as there is no getter/setter for these ones: userAgent, cookie, debugFile and debugOK. +- debugOut. The addMsgToDebugLog(String msg) method has been switched to protected. + Note: + 1) There are existing methods to generate output. + 2) The whole debug output will be changed sooner or later. I want to embed log4j, or a log4j like API. + So addMsgToDebugLog(String msg) will be renamed ... a day in the future. +- resourceBundle => set with the setLang parameter. +- [Minor] When an error occurs when starting the upload thread, the applet does not fail silently anymore. If +it fails here, at least, you know why... +- [Minor] showLogWindow is now always respected, whatever the value of debugLevel is. A new entry in the debug menu +has been added (CTRL+Right Click on the applet, to open it) +- [Minor] The debug menu (CTRL+Right Click) is slightly better. + +Fixes: +- [Major] Patch given by Stani: corrects the use of the applet on Firefox on Mac. +- [Major] The query is appended (again) to the URL when quering the HEAD to guess protocol: would block some +access, like Coppermine upload (was getting a wrong 302 HTTP return code). +- [Major] 2145770 correction (Cookie not sent with HEAD request). The specific headers is also sent in the HEAD request +- [Minor] Redirection (HTTP code 301, 302, 303) would not work with original URL containing more than one slash ('/'). +- [Minor] When a "Empty HEAD response" occurs in HttpConnect (during applet start), it's now logged as a warning, and no more +displayed as an error. +- [Minor] Better management of CR, LF and CRLF end of line. Now the server output is changed to have CRLF for all +end of line characters. +- [Minor] Correction in HTTPConnect, when hitting an NGINX proxy server, thanks to Brian Moran. +- [Minor] in picture mode, when using the allowedFileExtensions applet parameter, picture that match this parameter +are added to the file list, even if they are not pictures. + +Translation: +- [Chinese] Chinese translation updated by bluesway +- [Slovak] New translation, thanks to wradgio +- [Hungarian] New translation, thanks to R�zs� G�bor + +V3.4.1f + +No code change. 'Just' a package correction. The 3.4.0 release was almost empty, and original 3.4.1 jar upload to sourceforge was corrupted !!! + +Sorry for the inconvenience. + + + +V3.4.0 + +Fixes: +- [Minor] Removed 404 errors on the web server, when the applet was looking for the translation properties files. Thanks +to Patrick (onkelkarle). +- [Minor] The build.xml file no more pollute the src directory: all files are now generated into the build directory. +- [Minor] Correction of an error in md5 sum calculation, when files are uploaded into different HTTP requests, for instance +when nbFilesPerRequest is 1 and several files are uploaded. This bug was a regression while developping the 3.3.2 (did not +occur in any official release). + +Changes: +- [Major] Thanks to huotte, it's now possible to start an upload from javascript. See in the demo site, the +advanced demo. The link is below the applet. +- [Major] The applet can now manage the 301, 302 and 303 HTTP return code for the postURL parameter. +- [Major] It's now easy to add new file properties to a HTTP upload: create a new FileData, and use the new +FileData.appendFileProperties method. See the UploadPolicy.createFileData method to instanciate this new FileData. +- [Minor] When dropping several files that should be refused (by the allowedFileExtensions parameter or by the upload +policy) the applet now displays a message each time (was only once for PictureUploadPolicy), and allows the user to +hit 'cancel', so that no more file are added for this drop. + + + + +V3.3.1 + +Fixes: +- [Major] Correct the "bad header" error on IIS 6 and IIS 7, when uploading files. +- [Minor] The debug output is now always correctly filled, even when debug mode is not enabled. Previously, some +information would be written in the debug file only when in debug mode. + +Translation: +- [Portugese] The Portugese translation is now a native Portugese, not Brasilian Portugese anymore, thanks to Filipe Teixeira + + +V3.3.0 + +Changes (all modes): +- [Major] The applet can now correctly manage filename containing non-ASCII characters. Works Ok with French +accents. Should work with any other language, like Asian characters (please give me feedback: I can't test that). +- [Major] When using formdata, or postURL parameters with non-ASCII characters, their encoding in the upload +is now correct. +- [Minor] Due to previous point, the filenameEncoding applet parameter is now deprecated. +- [Minor] The applet now transfers for each file, the date/time of last modification (thanks to XXXXXXXXXXXXX). +Note: the date format is a "dd/MM/yyyy HH:mm:ss". It's defined as a constant in UploadPolicy, and can not be +changed by a 'simple' applet parameter. +- [Internal code] UploadPolicy.onAppendHeader: the parameter is changed from StringBuffer to the new class +ByteArrayEncoder. This should change only the parameter type, not the code of the method (append works on +ByteArrayEncoder). +- [Minor-FTP] FTP mode: stringUploadSuccess forced to null. The applet won't test the response body against this +regexp, as ... there is no response body in FTP mode. + + +Changes (picture mode): +- [Major] picture mode: quality for uploaded has been downgraded to bad quality resizing. Now corrected. +- [Minor] Default value for maxPicHeight, maxPicWidth, maxRealHeight, maxRealWidth changed from -1 to +Integer.MAX_VALUE +- [Minor] Default value for pictureTransmitMetadata set to false, to avoid color problem (see explanation +of this parameter in the given doc). +- [Minor] the progress bar is now updated while picture resizing is running, when preparing files before upload, +instead of being changed for each prepared file. Not really necessary, but I'm happy with this one ! :-) + + +Fixes: +- [Major] (bug 1831234: PostURL Parameter NULL) When postURL contains a parameter with no value +(ex: ?param1=¶m2=value2), the applet would generate an error. +- [Major] when the pictureTransmitMetadata applet parameter is set to false, metadata are never transmitted. +Previously, non updated (resized, rotated) pictures were uploaded untransformed, that is with their metadata. +- [Minor-Picture] Picture mode: due to wrong number rounding, the resized picture could sometime be one pixel bigger than +the maximum allowed size. +- [Minor] When postUrl is a javascript call, the applet is now able to manage $ characters as $ character, and not +as 'end of line' (fix given by Jon Gjengset). + + + +Translation +- Add of the Croatian language, thanks to Bruno Simic. +- Norvegian translation updated, thanks to P�l Knudsen. +- Hebrew translation added, thanks to David Lior, liorda@gmail.com +- Swedish translation added, thanks to Erik Lindahl (erik@fisensmosse.se) + + +V3.2.0 + + +WARNING: + Default value for stringUploadSuccess and stringUploadError applet parameter changed, for better control +of upload success error (see javadoc). You should check that the applet still works ok in both success and error +cases, for your application. + Please note also that the used regexp function is now: matches(), and no more find(). + + +Changes: +- [Major] Default value for stringUploadSuccess and stringUploadError applet parameter changed. +- [Major] The upload policy can now define the exact content of the applet +(see the UploadPolicy.addComponentsToJUploadPanel(JUploadPanel) method) +- [Minor] The applet now opens correctly, and display a proper message when postURL is wrong (or can not +be accessed) +- [Minor] putting the debugLevel to -1 will prevent the logWindow to become visible when this parameter is set +to false, and an error occurs. +- [Minor] Picture mode: EXIF and IPTC data are now transmitted, even if the applet resizes or rotates the +transmitted picture +- [Minor] All components of the applet are now valid drop target, so that the user can drop files on any component +(previously: the only valid drop target was the file list) +- [Minor] All components of the applet are can now display the JUpload popup menu (CTRL + Right Click). Currently, +this menu allow only to put on/off the debug mode. +- [Minor] After an upload, the progress bar now goes back to '0%', instead of keeping 100% displayed. +- [Minor] When an error occurs, a message (alert box) is displayed to the user. + +Fixes: +- [Medium] Corrected the error that occurs during startup (Unexpected HEAD response). This would make the log +window become visible, when debugLevel is 0, and showLogWindow is set to false. +- [Medium] The release version was not displayed in the status bar, when used within the navigator. The following +string is displayed, instead of the subversion commit number: "Unknown revision (please use the build.xml ant script)" +- [Minor] picture mode: after a double click on a file, changing the selected file with the keyboard arrow (up +and down) would not be detected by the applet. +- [Minor] The uploadPolicy.onFileDoubleClicked method is now clicked when a user double clicks on a file. + +Known bug: +- [Minor] Whe the applet transmits picture metadata (EXIF) coming from Canon EOS 30D, shooted in portait mode, the +colors of the resize or rotated pictures are 'strange'. No problem in landscape! Works Ok for Canon EOS 20D. + + +V3.1.0 +- [Fix] The JUpload project now compiles 'out of the box', even from eclipse. No more need to use the given +build.xml ant script. The script is still necessary, so that the applet indicates the correct SVN revision and +build date. +- [Fix] Uploading several files in FTP mode, with wrong nbFilesPerRequest or maxChunkSize would generate an error. +- [Fix] The setServerProtocol now correctly manage ftp URL. It doesn't generate an error any more when the server +protocol applet parameter is not set. +- [Fix] Drag'n Drop: the applet now controls whether the dropped files correspond to the current file filter (list +of allowed file extensions). +- [Fix] Management of files which can't be read by the applet: files are not uploaded, and a proper warning is +displayed, instead of a Java error that blocks the upload. +- [Minor] PictureUploadPolicy: the picture preview in the file chooser displays bigger pictures. +- [Minor] Better management of the wait cursor in picture mode. +- [Minor] FileChooser: various enhancement of the pictre mode: + * The display of the preview image in the fileChooserAccessory is now done in a dedicated thread, so that selecting + a file is instantaneous. + * file icons generated from the picture content is now done in a separate thread (the file chooser is much more + reactive than before). See applet parameter fileChooserIconFromFileContent. + * Picture preview in quicker +- [Translation] Czech translation available, thanks to Vladan Zajda. +- [Picture mode] New applet parameter (fileChooserIconFromFileContent), to display the file content in the file +chooser as the file icon or use the default file system icon. +- [Fix] All file icons are now displayed (the last one was not refreshed) +- [Picture mode] New applet parameter (fileChooserIconSize), to control the size of these icons, in the file chooser. +- [Picture mode] New applet parameter (fileChooserImagePreview), to add or not the preview accessory. + +V3.0.2b3 +- [Fix] HTTP response handling was broken. We now use raw byte I/O and apply +charset conversion in one single step at the end of the response. Use +Content-Length, if available. Use charset attribute of the Content-Type header. +if available. +- [Feature] Added placeholders for javascript in afterUploadURL: +%success%, %msg% and %body. See howto-customization.html for a detailed description. +- [Feature] Add of the specificHeaders applet parameter. This allows the caller to define +a list of headers that will be added in each HTTP request to the server. This allows +Basic HTTP Authentication (see the doc for all details). +- [Change] When a file filter list is provided (see allowedFileExtensions), the user may not select other files. +That is: he can not change the current filter by 'All files'. + +V3.0.2b2 +- [Fix] renamed POST variables "md5sum", "mimetype", "pathinfo" and "relpathinfo" to +"md5sum[]", "mimetype[]", "pathinfo[]" and "relpathinfo[]" in order to make them +work with multi-file-posts and php. +- [Feature] afterUploadURL can now be used to execute JavaScript instead of showing +another JavaScript. In order to do so, afterUploadURL has to start with the string +"javascript:". If that is the case, the remainder of the string is evaluated as +JavaScript-expression in the context of the current document. +- [Feature] New POST variables "pathinfo" and "relpathinfo": + pathinfo simply contains the absolute path of the containing directory of the + transferred file in native format (Slashes vs. Backslashes depend on the users OS). + relpathinfo contains a path relative to a "virtual root" which was determined when the + user had added (or dropped) a directory. Example: + Suppose the following hierarchy: + /foo/bar/a/ + 1.jpg + 2.jpg + 3.jpg + /foo/bar/b/ + 4.jpg + 5.jpg + 6.jpg + If the user now adds the directory "bar", then during upload, for the files [123].jpg, + relpathinfo would be "bar/a" and for the files [456].jpg, relpathinfo would be "bar/b". + This info can now be used on the server side in order to reconstruct whole directory + trees. This info is in native format as well (Slashes vs. Backslashes depend on the + users OS). +- [Fix] Optimized the class-loading in UploadPolicyFactory: If the parameter +uploadPolicy is unqualified (contains no dots), then it is prefixed with +"wjhk.jupload2.policies." before trying the first Class.forName(). This eliminates an +usually unsuccessful try of loading the plain class file. + +V3.0.2b1 + +- [Change] showStatusBar renamed to showLogWindow (see below) +- [Feature] Added a status bar. This changes the semantics of the applet parameter +"showStatusBar": Before, "showStatusBar" was used to control the visibility of the log +window, Now, "showStatusBar" does what it's name suggests: It controls the visibility +of the status bar. If shown, the status bar provides useful information during transfer: +The current transfer speed and the estimated time of completion. The visibility of the +log window is now controlled by the new parameter "showLogWindow". +- [Picture] Picture resized by the applet are now smaller than before (better for the web). Will +be even smaller in next versions. +- [Fix] Resizing of PNG pictures now works. +- [Fix] Better error handling in picture handling. +- [Feature] Working verification of server certificates and cert-based +client-authentication. Configurable by a new parameter sslVerifyCert. See +howto-customization.html for more info. + +Translation: +- [Turkish] Add of the Turquish translation, thanks to Gunay Mazmanoglu + + +V3.0.1 +- [Fix] Automatic detection of the HTTP protocol was not called when the applet parameter + "serverProtocol" was specified with an empty string. +- [Fix] Release are now compiled with 1.5 JVM + + + +V3.0.0 + +Fritz Elfert joined the dev team: we are now two active developpers! ;-) +That's probably enough, as we want the applet to remain as small as possible. + +Fritz is responsasible for most changes in this version. + +Changes: +- [Code] Use of the SVN source repository (replace the CVS) +- [Code] General code restructuration, thanks to Fritz. +- [Code] Added common GPL comment in all sources. +- [Code] Use system properties for cookie and user-agent in debug mode. +- [Code] Added ant buld.xml conributed by Matthijs Lambooy and tweaked/extended + "dist" and related targets for signing the jar. Added an internal target + "customhowto" which generates wwwroot/howto-customization.html automatically. + +- [Fix] Corrected content-length calculation of multipart message. +- [Fix] After uploading, enable file-specific buttons only if there are still files + to handle. +- [Fix] Speed up column sorting of the upload table by caching some data. +- [Fix] An ArrayIndexOutOfBounds exception could be thrown, when trying to + access some file data (from within an AWT update event) which is already deleted. +- [Fix] fileView was not shutdown in some cases. +- [Fix] picture would not always be resized, when realMaxPicWidth and/or + realMaxPicHeight would be give as applet parameters. +- [Fix] Calculate and use a percent value for setting the progress bar. Without that, + if the total size of the upload exceeds 2^31 - 1 bytes the progress bar does not work. +- [Fix] Chunk decoding now allows training chunk-extensions and additional whitespace. +- [Fix] The "album" parameter was not alway appended correctly in CoppermineUploadPolicy. + +- [Feature] Added POST form fields "md5sum" and "mimetype". md5sum contains the MD5 + checksum of every transfered chunk. This makes it easier to detect upload errors + on the server side. mimetype always contains the real mimetype of the transfered + file (as detected locally). (The mime-type in the form data header may change to + application/octet-stream in order to guarantee 8bit-transparent transmission in + the future.) +- [Feature] Implemented HTTP- and SOCKS-proxy support. +- [Feature] Parameter postURL can now be relative or even be omitted. The new default + null results in using the DocumentBaseURL of the applet. +- [Feature] The chunk parameters are now provided as both GET *and* POST variables. + The GET variables are still there because we don't want to break + backwards-compatibility. +- [Feature] Use generic java.applet.AppletContext.showDocument instead of JS bridge + for redirection (reduces code size). +- [Feature] Applet parameters "postURL", "afterUploadURL" and "urlToSendErrorTo" now + accept relative URLs. Furthermore, URLs are checked (syntactically) during applet + startup. +- [Feature] Changed the status-update (progressbar) method. It now gets updated from + within the ActionPerformed in JUploadPanel when the timer expires - regardless of + the amount of bytes transferred. +- [Feature] Added a textual status message which gets shown in the Browser's statusbar. + In order to view this in IE, the security settings must allow modification of the + status line. +- [Feature] Applied layout patches from Ben M. . +- [Feature] The error message, read from the server response body, is now decoded + from UTF-8. To do: check that the content-type is actually UTF-8, and document that. +- [Feature] Better display of applet parameters, when entering in debug mode. +- [Feature] Added automatic method for getting HTTP protocol version. The applet + parameter "serverProtocol" now defaults to null. If null, the version is determined + automatically by issuing a HEAD request to the postURL and examining the returned + response. +- [Feature] In order to save memory, the debug log (used fore eventually submit a + bug report to the webmaster) is now written to a temporary file. +- [Feature] In Picture mode, the icon now represents the picture contained in the file. + +- [Major] The applet can now properly read response body, when it is chunked by the + web server. This allows to correctly search for the success and error strings in + this body. +- [Major] The minimum java version is now 1.5 + +New applet parameters: +- [formdata] Allows to upload form data from the current web page, along with the + file upload. Note, that the data from the referred form are *always* transmitted + in the POST request along with the file - even if the referenced form has a + method="get" attribute in the HTML code. +- [afterUploadTarget] Allows the redirection after a successfull upload, to occur + toward another frame or window. +- [stringUploadError] Allows search an error message in the response body of the upload. +- [allowHttpPersistent] Allows switching off persistent HTTP connections (Keep-Alive) + which are enabled by default. Currently, we encountered problems with persistent + connections when testing on a windows box using a loopback interface only. + +Translations: +- [Danish] Add of the Danish translation, thanks to Jeppe Bundsgaard. +- [Russian] Russian translation has been given by Max Turanskiy. + + +V2.9.2 + +Changes: +- [Minor/pictureMode] Temporary files are now created by File.createTempFile. They are removed by the end of the JVM, even if +debugLevel>=100. No more pollution of the picture directory. + +Bug correction: +- [Minor] The lookAndFeel aapplet parameter was uncorrecty managed. Correction given by Fritz (sourceforge username) + + +V2.9.1 + +Changes: +- [Minor] The mime types is now set. The reference list is taken from http://www.mimetype.org/, thanks to them! + +Translations: +- [Polish] Polish translation has been given by Wojtek Semik: wojteks at pvd dot pl +- [Slovenian] Slovenian translation has been given by Alenka Pirman and Damjan Leban: damjan dot leban at siol dot net + +Bugs correction: +- [Major] The applet would not resize a picture that has been previewed in the applet. This file could then remain +bigger than maxFileSize, and not be uploaded. + + + +V2.9.0 + +Changes: +- [FTP Upload] Thanks to Evin Callahan, you can now put FTP URL in the postURL parameter. The files will be uploaded to any kind of FTP +server (anonymous or not). +- [Internal Code] A new DefaultUploadThreadV5 is created. This should help to create new upload behaviours, for instance +SMTP upload (to send files by email) or Samba upload (to send files on a local network, in intranet configuration). Just +inherit from it, and implement the few fabstract methods defined in DefaultUploadThreadV5. +- [Minor] It's now possible to select multiple files in the file list, to remove several files, for instance. + +Languages: +- [Chinese] A chinese translation is now available, thanks to Liu (Fbo ?) +- [Bresilian - Portugese] A Bresilian translation, is available, thanks to Frederico Ronfaut Klein. I copied this file +to also give a first Portugese translation. I don't know the differences between Portugese and Bresilian... +- [Norwegian] Updated translation, thanks to Pal Knudsen. + +New parameters / setProperty method: +- [setProperty] The applet setProperty method allows to change any applet parameter from the javascript on the web page. +This allows, for instance, to change the postURL or afterUploadURL parameters according to value selected by the user +on the web page. +- [showStatusBar] Thanks to XXXXXXXXXXX, a new applet parameter (showStatusBar) allows to hide the status bar. This +status bar will remain visible, if debugLevel is > 0 (or if debug is activated while the applet is running. You can +now put the debug on, by CTRL+right click on both the status bar or the file list. If debug is on, the showSatusBar +parameter is ignored. +- [afterUploadURL] If this parameter is set, the applet will redirect the current web page to this +URL. This allows the application to view the uploaded files, and entre comments, for instance. +- [realMaxPicWidth, realMaxPicHeight] Add of the realMaxPicWidth and realMaxPicHeight. This allows you to better control when the applet +will generate a new picture file: these parameters allow you to prevent any picture work from the applet, when +uploading a picture that doesn't need to be transformed (-> speed up of upload time). +- [allowedFileExtensions] Allows the caller to specify a list of file extensions. + + +Bug Corrected: +- [Boolean] Default value for boolean parameter were inverted (false to true, and true to false). + +V2.8.0 + +Main change: +- [Upload] The applet is now able of splitting the file to upload in chunks. This allow to upload file of any size, +whatever the max_upload_size of your server is. + +Changes: +- [Translation] Add of the Japanese translation. +- [Translation] Add of the Norwegian translation. +- The following methods have been added to the applet. They directly call the relevant method of the current upload +policy. Useful to display additional information from the HTML, in coordination with the urlToSendErrorTo applet +parameter. I use it to add to the status area the version of the HTML page that calls the applet. New functions +are: displayErr, displayInfo, displayWarn and displayDebug. + + +V2.6.0 + +The next changes and corrections are given by David Gnedt: +- [New fuctionnality] SSL management. You can now upload files with JUpload in SSL (HTTPS)! Great! +- [Update] Better picture resizing: the use of BufferedImage.getScaledInstance() allows better picture quality, when +resizing a picture. But it consumes more CPU and memory (see below the new applet parameter highQualityPreview) +- [Correction] When the picture file format should change, the applet would not do it if there where no rotation +or resizing. + +Other changes: +- [Parameter] A new applet parameter: highQualityPreview. It allows the calculation of better preview picture. But +displaying the full screen preview is longer. On an old PII 500MHz and a 8,5M pixels picture, the full screen +picture is displayed in 12 seconds when highQualityPreview is set to true, instead of 5s when the parameter is not +set or set to false. + + + +V2.5.0 + +Bugs Corrected: +- [Major] Corrected an important memory leak when viewing a fullscreen picture (by clicking on the preview picture). +- [Minor] When previewing a picture in 'big' format (full screen), the size is now calculated only with the Window +size, not with the maxPicWidth and maxPicHeight parameters. +- [Minor] Temporary files where not deleted, when using picture mode, and stopping the upload with the 'stop' button. +- [Minor] Correction of the howto-customise and the javadoc: a lot of applet parameters were not displayed in these html +files. + + +Changes: +- [Major] The applet has been tested, and runs well with only a little allocated memory: tested with a JVM of +minMemory=8M and a maxMemory=16M. +- [Translation] Now translated in Esperanto, thanks to Chuck Smith (whiz.at.users.sourceforge.net) +- [Translation] Now translated in Dutch, thanks to Rob van Kempen (rob.at.vankempen.nu) +- [Major] Add of a popup menu that allows changing the debug mode while using the applet: very useful to help +debugging a problem on a distant server, with only a standard user access to the site. To switch the debug mode on: +click on the right button, while holding the CTRL down. +- [Minor] (feature request n�1625013) Add of a new applet parameter: lookAndFeel. It allows to control the way the +applet is displayed. This allow to display the applet with a java look & feel, or to use the current user's system +one, or any other. Please, take a look to the list of applet parameters, to use it. + + +V2.4.0 + +Bugs Corrected: +- It's now possible to use the 'stop' button to stop an upload. +- It's no more possible to click on 'upload' during an upload, which could lead to unpredictable behaviour. +- In the given examples, the parse.jsp had the following bug, now corrected: no call to fileItem.delete(). Without it +the heap server quickly runs out of memory. + + +Changes: +- for Picture uploads (PictureUploadPolicy and CoppermineUploadPolicy) Upload of pictures stored in a read-only +directory won't block the upload anymore. The original file is send, without being resized or rotated. +- The Mime Type is now correct, but only for pictures (see PictureUploadPolicy and CoppermineUploadPolicy). +- Modified a test of the stringUploadSuccess applet parameter: if it's not found, a warning is now displayed. This +test seems to be buggy on a lot of various systems. But I could repeat the troubles on my server. Now, if the +success string is not found, there is only a warning message. +- Add of a FileUploadThread interface, that will be manipulated by other packages. This will help creation of new +version of FileUploadThreadVn. The FileUploadThreadVn are the successive versions of these classes. I keep them, as +people often update them for their needs. +- Add of a FileUploadThreadV4 and a UploadFileData. These class will help to implement further extension like _chunk_ +(to send file piece per piece) or eaisier mark of upload error per file. The original FileUploadThread has been renamed into +FileUploadThreadV1 (of anyone stil use it). FileUploadThreadV1, FileUploadThreadV2 and FileUploadThreadV3 implement +- Creation of a FileData interface. The default implementation is now into the DefaultFileData. + +V2.3.1 + +Changes: +- Spanish translation available (thanks to jesusangelwork: jesusangelwork[at]users.sourceforge[dot]net) +- The UploadPolicy.getUploadFilename method has been renamed in getUploadName, to avoid error, as this is not the +filename. See the javadoc for all details. BE CAREFUL, if you create a new UploadPolicy, that a new getUploadFilename +has been created. This to allow future encoding of filenames (still work in progress) + + +V 2.3.0 + +Bugs corrected: +- The upload would fail when there are less files to upload than nbFilesPerRequest (NullPointerException +in FileUploadThreadV3). +- The stringUploadSuccess was never read from the applet parameters. + +Changes: +- Add of the German language, thanks to Dr. Zoidberg. +- UPLOAD CLASS IS DYNAMIC. You can now create your own UploadPolicy, and put the full class name (with its package) +into the uploadPolicy parameter to the applet: the UploadPolicyFactory will create it. Ths constructor for UploadPolicy +must have one parameter: JUploadApplet. From this applet, the UploadPolicy can get any necessary parameter, like +the statusArea, where it can displays text to the user. +- A new 'advanced_jd_demo.html' page allows a newcomer to check the effect of all parameters on the applet. +- The UploadPolicy.afterUpload() parameters changed : filePanel has been removed (useless, as it can be retrieve with +the applet reference, already known from the UploadPolicy, see its constructor). +- The files are now removed just after upload. This means that, for instance, when uploading file by file, the user +can see the already removed files disappear from the list of files to upload. If a crash occurs, he can then retry +the upload, with the remaining files. + +V 2.2.4 + +Bugs corrected: +- NullPointerException (in FilePanelDataModel2 and in PictureFileData) because of the suppression of static methods +in UploadPolicyFactory. + +Changes: +- Java samples updated. They should be clean now. They use the last jakarta commons fileupload package. + + +V 2.2.3 + +Bugs corrected: +- Samples were bugguy: wrong URL, missing 'MAYSCRIPT' in the applet tags, which causes JSException +- minor bug: UploadPolicyFactory contains erroneous static getCurrentUploadPolicy, which would cause unpredictale +result when several instances of the applet exist in memory + +Enhancement: +- Upload policies can now 'refuse' a file added by the user. For instance, PictureUploadPolicy accepts only picture +files (see createFileData). +- Sample now separate all uploaded files. This was already coded by William (creator of jupload), but not used by the +sample. +- (minor) PictureFileData now correctly handles the isPicture internal variable. + + +V 2.2.0 + + This version is a major release of jupload. It is based on the 'juploadV20040415R2' package. It adds the following +functionnalities: + +- Picture management. The applet is now able to: + - Preview pictures, + - Resize picture, to a maximum width and/or height before upload (this lower the network traffic, and can prevent +the server to transform picture after upload) + - Display a full screen picture (by clicking on the previewed picture), + - Rotate the picture right or left, + - Download pictures and select the upload album on the same web page (with the jupload.php script), + - Upload all pictures/files in one click, +- UploadPolicy allows easy configuration of the the applet behaves (see below for the current list of parameters), +- Multi-language. + +Here are the current parameters allows that the upload policies allows to control. All details are given in the javadoc: +- uploadPolicy +- postURL +- debugLevel +- lang +- urlToSendErrorTo +- nbFilesPerRequest +- serverProtocol +- stringUploadSuccess +- maxPicHeight +- PictureUploadPolicy +- maxPicWidth +- maxPicHeight +- targetPictureFormat +- albumId +- storeBufferedImage diff --git a/ehcp/net2ftp/plugins/jupload/wjhk.jupload.jar b/ehcp/net2ftp/plugins/jupload/wjhk.jupload.jar new file mode 100644 index 0000000..0409e15 Binary files /dev/null and b/ehcp/net2ftp/plugins/jupload/wjhk.jupload.jar differ diff --git a/ehcp/net2ftp/plugins/luminous/.htaccess b/ehcp/net2ftp/plugins/luminous/.htaccess new file mode 100644 index 0000000..5a928f6 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/.htaccess @@ -0,0 +1 @@ +Options -Indexes diff --git a/ehcp/net2ftp/plugins/luminous/LICENSE b/ehcp/net2ftp/plugins/luminous/LICENSE new file mode 100644 index 0000000..4362b49 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/LICENSE @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/ehcp/net2ftp/plugins/luminous/client/.htaccess b/ehcp/net2ftp/plugins/luminous/client/.htaccess new file mode 100644 index 0000000..f7661d0 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/client/.htaccess @@ -0,0 +1 @@ +allow from all diff --git a/ehcp/net2ftp/plugins/luminous/client/jquery-1.6.4.min.js b/ehcp/net2ftp/plugins/luminous/client/jquery-1.6.4.min.js new file mode 100644 index 0000000..628ed9b --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/client/jquery-1.6.4.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */ +(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
        a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
        ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
        t
        ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
        ","
        "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
        ").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
        ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/client/luminous.js b/ehcp/net2ftp/plugins/luminous/client/luminous.js new file mode 100644 index 0000000..1c9e722 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/client/luminous.js @@ -0,0 +1,281 @@ +/** +* This simply adds some extras to Luminous elements via a jQUery +* plugin. The extras are currently a toggleable line-highlighting +* on click +*/ + +(function($) { + "use strict"; + + var LINE_SELECTOR = 'td .code > span '; + + if (typeof $ === 'undefined') { return; } + + /**************************************************************** + * UTILITY FUNCTIONS * + ****************************************************************/ + + // determines if the given element is a line element of luminous + function isLine($line) { + return $line.is(LINE_SELECTOR) && $line.parents('.luminous').length > 0; + } + + function isLineNumber($element) { + return $element.is('.luminous .line-numbers span'); + } + + function highlightLine($line) { + $line.toggleClass('highlight'); + } + + function highlightLineByIndex($luminous, index) { + var $line = $luminous.find(LINE_SELECTOR).eq(index); + highlightLine($line); + } + + function highlightLineByNumber($luminous, number) { + // the line's index must take into account the initial line number + var offset = parseInt($luminous.find('.code').data('startline'), 10); + if (isNaN(offset)) offset = 0; + highlightLineByIndex($luminous, number - offset); + } + + function toggleHighlightAndPlain($luminous, forceState) { + var data = $luminous.data('luminous'), + state = data.code.active, + $elem = $luminous.find('.code'), + toSetCode, toSetState; + + if (forceState === 'plain') state = 'highlighted'; + else if (forceState === 'highlighted') state = 'plain'; + + toSetCode = (state === 'plain')? data.code.highlighted : data.code.plain; + toSetState = (state === 'plain')? 'highlighted' : 'plain'; + + $elem.html(toSetCode); + } + + + function toggleLineNumbers($luminous, forceState) { + var data = $luminous.data('luminous'), + show = (typeof forceState !== 'undefined')? forceState : + !data.lineNumbers.visible; + + data.lineNumbers.visible = show; + + + var $numberContainer = $luminous.find('.line-numbers'), + $control = $luminous.find('.line-number-control'); + + if (!show) { + $numberContainer.addClass('collapsed'); + $control.addClass('show-line-numbers'); + $luminous.addClass('collapsed-line-numbers'); + } else { + $numberContainer.removeClass('collapsed'); + $control.removeClass('show-line-numbers'); + } + $luminous.data('luminous', data); + + } + + // binds the event handlers to a luminous element + function bindLuminousExtras($element) { + var highlightLinesData, highlightLines, data = {}, + hasLineNumbers = $element.find('td .line-numbers').length > 0, + schedule = []; + + if (!$element.is('.luminous')) { return false; } + else if ($element.is('.bound')) { return true; } + + $element.addClass('bound'); + + // highlight lines on click + $element.find('td .code').click(function(ev) { + var $t = $(ev.target); + var $lines = $t.parents().add($t). + filter(function() { return isLine($(this)); }), + $line + ; + + if ($lines.length > 0) { + $line = $lines.eq(0); + highlightLine($line); + } + }); + // highlight lines on clicking the line number + $element.find('td .line-numbers').click(function(ev) { + var $t = $(ev.target), + index; + if ($t.is('span')) { + index = $t.prevAll().length; + highlightLineByIndex($element, index); + } + }); + + data.lineNumbers = {visible: false}; + + if (hasLineNumbers) { + /** + * Line numbering is semi complicated because we can make it better + * with javascript! + * TODO: probably refactor this into a sub-function + */ + + // the control is a show/hide line numbers, we can fade it + // in/out when the user hovers over the line numbers. + // We can also fix the line numbers so they move left + // as the widget is hoz-scrolled. + var $control, controlHeight, controlWidth, gutterWidth, + controlIsVisible = false, + $lineNumbers = $element.find('pre.line-numbers'), + defaultLineNumberWidth = $lineNumbers.outerWidth(), + mouseY = 0, + controlCalculateLeftCss = function() { + var visible = $element.data('luminous').lineNumbers.visible, + base = visible? gutterWidth - controlWidth : 0, + total = 0; + total = $element.scrollLeft() + base; + return total + 'px'; + + }; + + data.lineNumbers.visible = true; + data.lineNumbers.setControlPosition = function() { + $control.css('top', Math.max(0, mouseY - (controlHeight/2)) + 'px'); + } + + $control = $(''); + $control.click(function() { + $element.luminous('showLineNumbers'); + $control.css('left', controlCalculateLeftCss()); + if (!$element.data('luminous').lineNumbers.visible) { + $element.find('pre.code').css('padding-left', ''); + } else { + $element.find('pre.code').css('padding-left', defaultLineNumberWidth + 'px'); + } + + }); + + $control.appendTo($element); + $control.show(); + controlWidth = $control.outerWidth(); + controlHeight = $control.outerHeight(); + gutterWidth = $element.find('.line-numbers').outerWidth(); + $control.css('left', gutterWidth - controlWidth + 'px'); + $control.hide(); + $element.mousemove(function(ev) { + var scrollLeft = $element.scrollLeft(); + mouseY = ev.pageY - $(this).offset().top; + if (ev.pageX < gutterWidth) { + if (!controlIsVisible) { + data.lineNumbers.setControlPosition(); + $control.stop(true, true).fadeIn('fast'); + controlIsVisible = true; + } + } else { + if (controlIsVisible) { + $control.stop(true, true).fadeOut('fast'); + controlIsVisible = false; + } + } + }); + + data.lineNumbers.setControlPosition(); + $element.find('pre.code').css('padding-left', $lineNumbers.outerWidth() + 'px'); + $lineNumbers.css({ + position: 'absolute', + top: 0, + left: 0 + }); + $element.scroll(function() { + data.lineNumbers.setControlPosition(); + $control.css('left', controlCalculateLeftCss()); + $lineNumbers.css('left', $element.scrollLeft() + 'px'); + }); + schedule.push(function() { $element.luminous('showLineNumbers', true); }); + $element.find('.line-numbers').parent().css({width: 0, maxWidth: 0}); + + } + + // highlight all the initial lines + highlightLinesData = $element.find('.code').data('highlightlines') || ""; + highlightLines = highlightLinesData.split(","); + $.each(highlightLines, function(i, element) { + var lineNo = parseInt(element, 10); + if (!isNaN(lineNo)) { + highlightLineByNumber($element, lineNo); + } + }); + + data.code = {}; + data.code.highlighted = $element.find('.code').html(); + + data.code.plain = ''; + $element.find(LINE_SELECTOR).each(function(i, e) { + var line = $(e).text(); + line = line + .replace(/&/g, '&') + .replace(/>/g, '>') + .replace(/'; + }); + data.code.active = 'highlighted'; + + $element.data('luminous', data); + + $.each(schedule, function(i, f) { + f(); + }); + + } + + + + /**************************************************************** + * JQUERY PLUGIN * + ***************************************************************/ + + + $.fn.luminous = function(optionsOrCommand /* variadic */) { + + var args = Array.prototype.slice.call(arguments); + + return $(this).each(function() { + var $luminous = $(this); + + // no instructions - bind everything + if (!optionsOrCommand) { + bindLuminousExtras($luminous); + return; + } + + // $('.luminous').luminous('highlightLine', [2, 3]); + if (optionsOrCommand === 'highlightLine') { + var lineNumbers = args[1]; + if (!$.isArray(lineNumbers)) + lineNumbers = [lineNumbers]; + + $.each(lineNumbers, function(index, el) { + highlightLineByNumber($luminous, el); + }); + + return; + } + else if (optionsOrCommand === 'show') { + // args[1] should be 'highlighted' or 'plain' + toggleHighlightAndPlain($luminous, args[1]); + } + else if (optionsOrCommand === 'showLineNumbers') { + toggleLineNumbers($luminous, args[1]); + } + + }); + }; + + $(document).ready(function() { + $('.luminous').luminous(); + }); + +}(jQuery)); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/index.html b/ehcp/net2ftp/plugins/luminous/index.html new file mode 100644 index 0000000..ec480c6 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/index.html @@ -0,0 +1,125 @@ + + + + + Luminous Syntax Highlighter + + + + + +

        Luminous - a Syntax Highlighter for PHP - v0.7.0

        + +

        Build Status

        + +

        Luminous is an accurate and style-able syntax highlighter for PHP which +supports a bunch of common languages and output to HTML and LaTeX.

        + +

        If you simply want to use Luminous as a library, please don't clone this +repository. Or if you do, make sure you delete luminous/tests afterwards. +Do not expose luminous/tests on a public machine. It is recommended to get a +packaged version from the links below.

        + +

        Links:

        + + + +

        Installation

        + +

        Extract your tarball, zip, whatever, into some directory where it's going to be +used (i.e. probably your web-server). We'll assume it's called `luminous/'

        + +

        Quick Usage

        + +

        First, if you're going to use caching, which you probably are, create a +directory called luminous/cache and give it writable permissions (chmod 777 on +most servers -- yours may accept a less permissive value). Then include +luminous/luminous.php and away you go!

        + +

        1234
        <?php
        +require_once 'luminous/luminous.php';
        +echo luminous::head_html(); // outputs CSS includes, intended to go in <head>
        +echo luminous::highlight('c', 'printf("hello world\n");');
        +

        + +

        Useful examples can be found in luminous/examples/. If you have problems, +check that luminous/examples/example.php works.

        + +

        Command Line Usage

        + +

        If you're crazy and want to use Luminous/PHP on the command line, guess what, +you can!

        + +

        12
        $ cd luminous/
        +$ php luminous.php --help
        +

        + +

        Polite Warning

        + +

        Luminous is fairly slow. But it caches! So it's not slow. Or is it?

        + +

        It depends on your use-case, is the simple answer. Most people should make sure +the cache works (create luminous/cache with appropriate permissions), and after +that, Luminous will almost certainly have negligable impact on their +performance.

        + +

        Optimizations are welcome, but not at the expense of maintainability.

        + +

        Caching

        + +

        The cache can be stored either directly on the file system or in a MySQL table +(support for other DBMSs will come later, patches welcome). In either case, +check out the cache documentation.

        + +

        Licensing

        + +

        Luminous is distributed under the LGPL but includes a bunch of stuff which is +separate.

        + +
          +
        • Everything under src/ and languages/ is part of Luminous.
        • +
        • Everything under tests/regression// is real source code taken from various + projects, which is used only as test data. It is all GPL-compatible, but + is distributed under its own license. This directory is only present in + the git repository and is not part of any stable distribution archives.
        • +
        • We also include jQuery which is provided under its own license.
        • +
        + + + \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/languages/.htaccess b/ehcp/net2ftp/plugins/luminous/languages/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/net2ftp/plugins/luminous/languages/ada.php b/ehcp/net2ftp/plugins/luminous/languages/ada.php new file mode 100644 index 0000000..03a527f --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/ada.php @@ -0,0 +1,64 @@ +add_pattern('OO', "/(?<=[a-z0-9_]')$ident/"); + $this->add_pattern('IDENT', "/$ident/"); + // http://en.wikibooks.org/wiki/Ada_Programming/Lexical_elements#Numbers + // no bnf :( might be wrong + $this->add_pattern('NUMERIC', '/\d+#[a-f0-9]*#/i'); + $this->add_pattern('NUMERIC', "/[0-9]++[0-9_]*+(\.[0-9_]++)?([eE][\-+]?[0-9_]++)?/"); + $this->add_pattern('COMMENT', '/--.*/'); + $this->add_pattern('OPERATOR', '@=|/=|>=?|<=?|\+|-|\*\*?|/|&|:=@'); + + // http://rosettacode.org/wiki/Special_characters#Ada + $this->add_pattern('CHARACTER', "/'.'/"); + $this->add_pattern('STRING', '/"(?:[^"]++|"")*"/'); + + $this->add_identifier_mapping('KEYWORD', $kws); + $this->add_identifier_mapping('OPERATOR', $ops); + $this->add_identifier_mapping('VALUE', $vals); + $this->add_identifier_mapping('TYPE', $types); + } +} + diff --git a/ehcp/net2ftp/plugins/luminous/languages/as.php b/ehcp/net2ftp/plugins/luminous/languages/as.php new file mode 100644 index 0000000..b9de31a --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/as.php @@ -0,0 +1,69 @@ +embedded_server = false; + $this->embedded_script = false; + parent::init(); + + // add preprocessor support + $this->add_pattern('PREPROCESSOR', '/\^\s*#.*/m'); + + + // clear the identifier map for JS and insert our own. +// $this->ident_map = array(); + $this->add_identifier_mapping('', array()); + + + + $this->add_identifier_mapping('FUNCTION', array('add', 'chr', + 'clearInterval', 'escape', 'eval', + 'evaluate', 'fscommand', 'getProperty', 'getTimer', 'getVersion', + 'globalStyleFormat', 'gotoAndPlay', 'gotoAndStop', 'ifFrameLoaded', + 'instanceOf', 'isFinite', 'isNaN', 'loadMovie', 'loadMovieNum', + 'loadVariables', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'nextFrame', + 'nextScene', 'onClipEvent', + 'ord', 'parseFloat', 'parseInt', 'play', 'prevFrame', 'prevScene', 'print', + 'printAsBitMap', 'printNum', 'printNum', 'random', 'scroll', 'setInterval', + 'setProperty', 'stop', 'stopDrag', 'substring', 'super', 'targetPath', + 'tellTarget', 'toString', 'toggleHighQuality', 'trace', 'unescape')); + + $this->add_identifier_mapping('TYPE', array('Accessibility', + 'Array', 'Arguments', 'Boolean', + 'Button', 'ByteArray', 'Camera', 'Color', 'Date', 'Event', 'FScrollPane', + 'FStyleFormat', + 'Function', 'int', 'Key', 'LoadVars', 'LocalConnection', 'Math', + 'Microphone', 'Mouse', 'Movieclip', 'Number', 'Object', 'Selection', + 'Sound', 'Sprite', 'String', 'System', 'TextField', 'TextFormat', + 'Timer', 'TimerEvent', 'uint', 'var', 'void', 'XML')); + + $this->add_identifier_mapping('KEYWORD', array('as', 'break', + 'case', 'catch', 'class', 'const', 'continue', 'default', 'delete', + 'do', 'else', 'extends', 'false', 'finally', 'for', 'function', + 'if', 'implements', 'import', 'in', 'instanceof', 'interface', 'internal', + 'is', 'native', 'new', 'null', 'package', 'private', 'protected', 'public', + 'return', 'super', 'switch', 'static', 'this', 'throw', 'to', 'true', 'try', + 'typeof', 'use', 'void', 'while', 'with')); + } + + public static function guess_language($src, $info) { + // actionscript looks a lot like a cross between Java and, umm, well, + // Java. + // It has a semi-unique way of declaring types for arguments and + // returns and so forth as argname:type, or function name(args):ret-type + $p = 0.0; + + if (preg_match( + '/\\bfunction\s+\w+\s*\\([^\\)]+\\):(String|int|Number|void)/', + $src)) $p += 0.15; + if (preg_match('/\\bvar\s+\w+:(String|int|Number)/', $src)) $p += 0.15; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/bash.php b/ehcp/net2ftp/plugins/luminous/languages/bash.php new file mode 100644 index 0000000..d4b889e --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/bash.php @@ -0,0 +1,273 @@ +$0', $token[1]); + return $token; + } + + public function init() { + $this->add_identifier_mapping('KEYWORD', array('case', 'do', 'done', + 'elif', 'else', 'esac', 'fi', 'for', 'function', 'if', 'in', 'select', + 'then', 'time', 'until', 'while', + 'foreach', 'end' // zsh I think + )); + // I could ls /usr/bin, but i think this will do for now + $this->add_identifier_mapping('FUNCTION', array('adduser', 'addgroup', +'alias', 'apropos', 'apt-get', 'aptitude', 'aspell', 'awk', 'basename', 'bash', +'bc', 'bg', 'break', 'builtin', 'bzip2', 'cal', 'case', 'cat', 'cd', 'cfdisk', +'chgrp', 'chmod', 'chown', 'chroot', 'chkconfig', 'cksum', 'clear', 'cmp', +'comm', 'command', 'continue', 'cp', 'cron', 'crontab', 'csplit', 'cut', 'date', +'dc', 'dd', 'ddrescue', 'declare', 'df', 'diff', 'diff3', 'dig', 'dir', +'dircolors', 'dirname', 'dirs', 'dmesg', 'du', 'echo', 'egrep', 'eject', +'enable', 'env', 'ethtool', 'eval', 'exec', 'exit', 'expect', 'expand', +'export', 'expr', 'false', 'fdformat', 'fdisk', 'fg', 'fgrep', 'file', 'find', +'fmt', 'fold', 'for', 'format', 'free', 'fsck', 'ftp', 'function', 'fuser', +'gawk', 'getopts', 'git', 'grep', 'groups', 'gzip', 'hash', 'head', 'help', +'history', 'hg', 'hostname', 'iconv', 'id', 'if', 'ifconfig', 'ifdown', 'ifup', +'import', 'install', 'jobs', 'join', 'kill', 'killall', 'less', 'let', 'ln', +'local', 'locate', 'logname', 'logout', 'look', 'lpc', 'lpr', 'lprint', +'lprintd', 'lprintq', 'lprm', 'ls', 'lsof', 'make', 'man', 'mkdir', 'mkfifo', +'mkisofs', 'mknod', 'more', 'mount', 'mtools', 'mtr', 'mv', 'mmv', 'nano', +'netstat', 'nice', 'nl', 'nohup', 'notify-send', 'nslookup', 'open', 'op', +'passwd', 'paste', 'pathchk', 'ping', 'pkill', 'popd', 'pr', 'printcap', +'printenv', 'printf', 'ps', 'pushd', 'pwd', 'quota', 'quotacheck', 'quotactl', +'ram', 'rcp', 'read', 'readarray', 'readonly', 'reboot', 'rename', 'renice', +'remsync', 'return', 'rev', 'rm', 'rmdir', 'rsync', 'screen', 'scp', 'sdiff', +'sed', 'select', 'seq', 'set', 'sftp', 'shift', 'shopt', 'shutdown', 'sleep', +'slocate', 'sort', 'source', 'split', 'ssh', 'strace', 'su', 'sudo', 'sum', +'suspend', 'svn', 'symlink', 'sync', 'tail', 'tar', 'tee', 'test', 'time', +'times', 'touch', 'top', 'traceroute', 'trap', 'tr', 'true', 'tsort', 'tty', +'type', 'ulimit', 'umask', 'umount', 'unalias', 'uname', 'unexpand', 'uniq', +'units', 'unset', 'unshar', 'until', 'useradd', 'usermod', 'users', 'uuencode', +'uudecode', 'v', 'vdir', 'vi', 'vim', 'vmstat', 'watch', 'wc', 'whereis', +'which', 'while', 'who', 'whoami', 'Wget', 'write', 'xargs', 'xdg-open', +'yes',)); + $this->remove_stream_filter('oo-syntax'); + $this->remove_filter('comment-to-doc'); + $this->add_filter('str-filter', 'STRING', array($this, 'string_filter')); + } + + + + function main() { + + $stack = array(); + while(!$this->eos()) { + + $c = $this->peek(); + + // double brackets are apparently an arithemtic operation + // http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces + // anyway, if we apply normal highlighting in them, it seems to break some + // things + // TODO I think we should respect certain sub-types in the (( ... )) + // block, like strings and other stuff. It may require re-factoring the + // scanner to get this right. It may be best to switch this to a + // LumiousStatefulScanner. This will do for now though. + if ($this->scan('/(\\$?)(\({2})/')) { + $dollar = $this->match_group(1); + $this->record($this->match(), $dollar? 'KEYWORD' : null); + if ($this->scan_until('/\){2}/') !== null) { + $this->record($this->match(), null); + $this->record($this->scan('/\){2}/'), $dollar? 'KEYWORD' : null); + } else { + $this->record($this->rest(), null); + $this->terminate(); + } + } + if ($this->scan('/\\$([{(])/')) { + $this->record($this->match(), 'KEYWORD'); + $stack[] = array($this->match_group(1), true); + } + elseif($c === '[') { + $this->record($this->get(), 'KEYWORD'); + $stack[] = array($c, true); + } + elseif ($c === '{' || $c === '(') { + $this->record($this->get(), null); + $stack[] = array($c, false); + } + elseif($c === '}' || $c === ')' || $c ===']') { + $match = array('{'=>'}', '('=>')', '[' => ']'); + $type = null; + if (isset($stack[0])) { + $pop = array_pop($stack); + if ($pop[1]) $type = 'KEYWORD'; + if ($match[$pop[0]] !== $c) { + // err + $stack[] = $pop; + $type = null; + } + } + $this->record($this->get(), $type); + if (empty($stack) && $this->interpolated) { + break; + } + + } + elseif($c === '`') { + $this->record($this->get(), 'KEYWORD'); + } + elseif ($this->scan('/ + \$( [_a-zA-Z]\w* | [\d\#*@\-!_\\?\\$]) + /xm') + ) { + $this->record($this->match(), 'VARIABLE'); + } + elseif($this->scan('/^(\s*)([_a-zA-Z]\w*(?=[=]))/m')) { + $m = $this->match_groups(); + if ($m[1] !== '') $this->record($m[1], null); + $this->record($m[2], 'VARIABLE'); + + } + elseif (($this->interpolated && count($stack) === 1 && + $this->scan('/(?<=\s|^)\#.*?(?=[)]|$)/m')) + || $this->scan('/(?<=\s|^)\#.*/')) { + $this->record($this->match(), 'COMMENT'); + } + elseif(($m = $this->scan("/\\$?'(?> [^'\\\\]+ | \\\\.)* '/sx"))) { + $tok = ($m[0] === '$')? 'VARIABLE' : 'STRING'; + $this->record($m, $tok); + } + elseif($this->scan('/-*[a-zA-Z_][\-\w]*/')) { + $this->record($this->match(), 'IDENT'); + } + // quoted heredoc is the same as a single string, no interpolation, + // A straight regex is causing backtracking problems on my box so + // we're going to do it the hard way + // note that the <<- means the delimiter can be indented. + elseif($this->scan('/(<<-?)(\s*)(["\'])(\w+)((?:\\3)?)/msx')) { + $m = $this->match_groups(); + $this->record($m[1] . $m[2], null); + $this->record($m[3] . $m[4] . $m[5], 'DELIMITER'); + $delim_regex = "/^(" . (($m[1] === '<<-')? '\s*' : '') + . ')(' . preg_quote($m[4], '/') . ')\\b/m'; + $heredoc = $this->scan_until($delim_regex); + if ($heredoc === null) { + $heredoc = $this->rest(); + $this->terminate(); + } + $this->record($heredoc, 'HEREDOC'); + if ($this->scan($delim_regex) !== null) { + $g = $this->match_groups(); + if ($g[1] !== '') $this->record($g[1], null); + $this->record($g[2], 'DELIMITER'); + } + } + // heredocs and double quoted strings are pretty much the same + elseif($this->scan('/(<<-?\s*)(\w+)/') || + $this->scan('/\\$?"/')) + { + $pos = $this->match_pos(); + + $m = $this->match_groups(); + $type = 'STRING'; + $delim = ''; + if ($m[0][0] === '<') { + $type = 'HEREDOC'; + $this->record($m[1], null); + $this->record($m[2], 'KEYWORD'); + $delim = $m[2]; + if ($m[0][2] === '-') $delim = "[ \t]*" . $delim; + $pos = $this->pos(); + } + elseif($m[0][0] === '$') $type = 'VARIABLE'; + $in_str = true; + + $searches = array(($type === 'HEREDOC')? "/^$delim\\b/m" : + '/(?get_next($searches); + + if ($index === -1) { + $this->record(substr($this->string(), $pos), $type); + $this->terminate(); + break; + } + $hit = isset($matches[2])? $matches[2] : $matches[0]; + $index_ = $index + strlen($matches[0]); + if($hit === '"') { + $this->record(substr($this->string(), $pos, $index_ - $pos), $type); + $this->pos($index_); + break; + } + // URGH WORST CHECK EVER. + elseif($type === 'HEREDOC' && !isset($matches[2])) { + $this->record(substr($this->string(), $pos, $index-$pos), $type); + $this->record($hit, 'KEYWORD'); + $this->pos($index_); + break; + } + else { + $index_ = $index + strlen($matches[1]); + $this->record(substr($this->string(), $pos, $index_-$pos), $type); + $child = new LuminousBashScanner($this->string()); + $child->pos($index_); + $child->interpolated = true; + $child->init(); + $child->main(); + $this->record($child->tagged(), 'INTERPOLATED', true); + $pos = $child->pos(); + $this->pos($pos); + } + } + } + elseif($this->scan('/\d*[<>]+&?\d*/')) { + $this->record($this->match(), 'KEYWORD'); + } + + elseif($this->scan("/[^_\-a-zA-Z$'\"\#\{\}\(\)\[\]<>&\d`\n]+/") !== null) { + $this->record($this->match(), null); + } + else + $this->record($this->get(), null); + } + } + + public static function guess_language($src, $info) { + $p = 0.0; + if (preg_match('%\\b (?:bash|csh|ksh|zsh|sh) \\b%x', + $info['shebang']) + ) + return 1.0; + + // strange conditional syntax -- if [ -z ... ] + if (preg_match('/ (if|while) \s++ \\[\s++-\w/x', $src)) $p += 0.10; + + // quoted vars used in comparison: if [ "$somevar" ... + if (preg_match('/"\\$\w++"/', $src)) $p += 0.05; + + // case ... esac has to be worth something + if (strpos($src, 'case') < strpos($src, 'esac')) $p += 0.1; + + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/bnf.php b/ehcp/net2ftp/plugins/luminous/languages/bnf.php new file mode 100644 index 0000000..3c4a5b3 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/bnf.php @@ -0,0 +1,95 @@ +record($matches[1], null); + $this->record_token($matches[2], 'USER_FUNCTION'); + $this->user_defs[$matches[2]] = 'VALUE'; + $this->pos_shift(strlen($matches[1]) + strlen($matches[2])); + } + + private function set_strict() { + // no transition table necessary, I think + $this->add_pattern('COMMENT', '/]*>/'); + $this->add_pattern('KEYWORD', '/(?<=^<)[^>]+(?=>)/m'); + $this->add_pattern('KEYWORD', '/(?<=^\\{)[^\\}]+(?=\\})/m'); + $this->add_pattern('VALUE', '/(?<=\\{)[^\\}]+(?=\\})/'); + $this->add_pattern('VALUE', '/[\\-\w]+/'); + + } + private function set_extended() { + + + $this->add_pattern('COMMENT', '/\\(\\* .*? \\*\\)/sx'); + $this->add_pattern('OPTION', '/\\[/', '/\\]/'); + $this->add_pattern('REPETITION', '/\\{/', '/\\}/'); + $this->add_pattern('GROUP', '/\\(/', '/\\)/'); + $this->add_pattern('SPECIAL', '/\\?/', '/\\?/'); + + $ident = '(?:[\w\\-]+)'; + $this->add_pattern('RULE', "/(^[ \t]*)($ident)(\s*(?![[:alnum:]\s]))/mi"); + $this->overrides['RULE'] = array($this, 'user_def_ext'); + $this->add_pattern('IDENT', "/$ident/"); + + // technically I don't know if we really need to worry about a transition + // table, but here we are anyway + $all = array('COMMENT', 'OPTION', 'REPETITION', 'GROUP', 'SPECIAL', + 'STRING', 'IDENT', 'OPERATOR'); + $almost_all = array_filter($all, create_function('$x', + 'return $x !== "SPECIAL";')); + $this->transitions = array( + 'initial' => array_merge(array('RULE'), $all), + 'OPTION' => $all, + 'REPETITION' => $all, + 'GROUP' => $all, + 'SPECIAL' => $almost_all + ); + + $this->rule_tag_map = array( + 'OPTION' => null, + 'REPETITION' => null, + 'GROUP' => null, + 'SPECIAL' => null + ); + + } + + + function init() { + + // the original BNF uses to delimit its + // production rule names + if (preg_match('/<\w+>/', $this->string())) { + $this->set_strict(); + } + else { + $this->set_extended(); + } + $this->add_pattern('STRING', LuminousTokenPresets::$SINGLE_STR_SL); + $this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR_SL); + $this->add_pattern('OPERATOR', '/[*\\-=+;:\\|,]+/'); + // assume a few chars at bol indicate a commented line + $this->add_pattern('COMMENT', '/^[!%-;].*/m'); + + $this->remove_filter('constant'); + $this->remove_filter('comment-to-doc'); + + } + + static function guess_language($src, $info) { + // being honest, BNF is going to be so rare that if we ever return + // anything other than 0, it's more likely that we're obscuring the + // correct scanner than correctly identifying BNF. + return 0; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/cpp.php b/ehcp/net2ftp/plugins/luminous/languages/cpp.php new file mode 100644 index 0000000..76cf6de --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/cpp.php @@ -0,0 +1,132 @@ +add_filter('preprocessor', 'PREPROCESSOR', + array($this, 'preprocessor_filter')); + + $this->add_identifier_mapping('FUNCTION', + $GLOBALS['luminous_c_funcs']); + $this->add_identifier_mapping('KEYWORD', + $GLOBALS['luminous_c_keywords']); + $this->add_identifier_mapping('TYPE', + $GLOBALS['luminous_c_types']); + } + + function init() { + + // http://www.lysator.liu.se/c/ANSI-C-grammar-l.html + // D [0-9] + // L [a-zA-Z_] + // H [a-fA-F0-9] + // E [Ee][+-]?{D}+ + // FS (f|F|l|L) + // IS (u|U|l|L)*// + // {L}({L}|{D})* ident + // 0[xX]{H}+{IS}? hex + // 0{D}+{IS}? octal + // {D}+{IS}? int + // L?'(\\.|[^\\'])+' char + // {D}+{E}{FS}? real/float + // {D}*"."{D}+({E})?{FS}? real/float + // {D}+"."{D}*({E})?{FS}? real/float + // L?\"(\\.|[^\\"])*\" string, but we should exclude nl + + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_SL); + $this->add_pattern('STRING', "/L?\"(?: [^\\\\\"\n]+ | \\\\.)*(?:$|\")/xms"); + // if memory serves, a char looks like this: + $this->add_pattern('CHARACTER', + "/L? ' (?: \\\\(?: x[A-F0-9]{1,2}| . ) | . ) (?: '|$)/ixm"); + + $this->add_pattern('OPERATOR', '@[!%^&*\-/+=~:?.|<>]+@'); + + $this->add_pattern('NUMERIC', '/0[xX][A-F0-9]+[uUlL]*/i'); + $this->add_pattern('NUMERIC', '/ + (?: + (?: \d* \.\d+ | \d+\.\d*) + ([eE][+-]?\d+)? + ([fFlL]?) + ) + /ix'); + $this->add_pattern('NUMERIC', '/ + \d+([uUlL]+ | ([eE][+-]?\d+)?[fFlL]? | ) #empty string on the end + /x'); //inc octal + + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL); + $this->add_pattern('PREPROCESSOR', '/^[ \t]*\#/m'); + $this->add_pattern('IDENT', '/[a-zA-Z_]+\w*/'); + + $this->overrides['PREPROCESSOR'] = array($this, 'preprocessor_override'); + } + + + function preprocessor_override() { + $this->skip_whitespace(); + // #if 0s nest, according to Kate, which sounds reasonable + $pattern = '/^\s*#\s*if\s+0\\b/m'; + if($this->check($pattern)) { + $this->nestable_token('COMMENT', '/^\s*#\s*if(?:n?def)?\\b/m', + '/^\s*#\s*endif\\b/m'); + } + else { + // a preprocessor statement may have nested comments and strings. We + // go the lazy route and just zap the whole thing with a regex and let a + // filter figure out any nested highlighting + $this->scan("@ \# + (?: [^/\n\\\\]+ + | /\* (?> [^\\*]+ | (?:\*(?!/))+ ) (?: $|\*/) # nested ML comment + | //.* # nested SL comment + | / + | \\\\(?s:.) # escape, and newline + )* @x"); + $this->record($this->match(), 'PREPROCESSOR'); + } + } + + static function preprocessor_filter_cb($matches) { + + if (!isset($matches[0]) || !isset($matches[0][0])) + return ''; // shouldn't ever happen + if ($matches[0][0] === '"') return LuminousUtils::tag_block('STRING', $matches[0]); + else if ($matches[0][0] === '&') + return '<' . LuminousUtils::tag_block('STRING', $matches[1]) . '>'; + else return LuminousUtils::tag_block('COMMENT', $matches[0]); + } + + static function preprocessor_filter($token) { + $token = LuminousUtils::escape_token($token); + $token[1] = preg_replace_callback("@ + (?:\" (?> [^\\\\\n\"]+ | \\\\. )* (?: \"|$) | (?: < (.*?) >)) + | // .* + | /\* (?s:.*?) (\*/ | $) + @x", + array('LuminousCppScanner', 'preprocessor_filter_cb'), + $token[1]); + return $token; + } + + static function guess_language($src, $info) { + // Obviously, C tends to look an awful lot like pretty much every other + // language. Its only real pseudo-distinct feature is the ugly + // preprocessor and "char * ", so let's go with that + + $p = 0.0; + if (preg_match('/^\s*+#\s*+(include\s++[<"]|ifdef|endif|define)\\b/m', + $src) + ) + $p += 0.3; + if (preg_match('/\\bchar\s*\\*\s*\w+/', $src)) $p += 0.05; + if (preg_match('/\\bmalloc\s*\\(/', $src)) $p += 0.02; + // TODO we could guess at some C++ stuff too + return $p; + + } + +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/csharp.php b/ehcp/net2ftp/plugins/luminous/languages/csharp.php new file mode 100644 index 0000000..bc80ac5 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/csharp.php @@ -0,0 +1,52 @@ +add_pattern('PREPROCESSOR', "/\\#(?: [^\\\\\n]+ | \\\\. )*/sx"); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_SL); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); + $this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR); + $this->add_pattern('CHARACTER', LuminousTokenPresets::$SINGLE_STR); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL); + $this->add_pattern('IDENT', '/[a-z_]\w+/i'); + $this->add_pattern('OPERATOR', '/[¬!%^&*\-=+~|?\\/><;:.,]+/i'); + + + + $this->add_identifier_mapping('KEYWORD', array('abstract', 'as', 'base', + 'break', 'case', 'catch', 'checked', 'class', 'continue', 'default', + 'delegate', 'do', 'event', 'explicit', 'extern', 'else', 'finally', + 'false', 'fixed', 'for', 'foreach', 'goto', 'if', 'implicit', 'in', + 'interface', 'internal', 'is', 'lock', 'new', 'null', 'namespace', + 'operator', 'out', 'override', 'params', 'private', + 'protected', 'public', 'readonly', 'ref', 'return', 'struct', 'switch', + 'sealed', 'sizeof', 'stackalloc', 'static', 'this', 'throw', 'true', + 'try', 'typeof', 'unchecked', 'unsafe', 'using', 'var', 'virtual', + 'volatile', 'while', 'yield')); + + require(dirname(__FILE__) . '/include/csharp_list.php'); + + $this->add_identifier_mapping('TYPE', array_merge(array( + // primatives + 'bool', 'byte', 'char', + 'const', 'double', 'decimal', 'enum', 'float', 'int', 'long', + 'object', + 'sbyte', 'short', 'string', 'uint', 'ulong', 'ushort', + 'void' + ), + $luminous_csharp_type_list) + ); + } + + static function guess_language($src, $info) { + $p = 0.0; + if (preg_match('/^\s*#region\\b/m', $src)) $p += 0.10; + if (preg_match('/^\s*using\s+System;/m', $src)) $p += 0.10; + if (preg_match('/^\s*using\s+System\\..*;/m', $src)) $p += 0.10; + if (preg_match('/partial\s+class\s+\w+/', $src)) $p += 0.05; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/css.php b/ehcp/net2ftp/plugins/luminous/languages/css.php new file mode 100644 index 0000000..ba4a9d1 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/css.php @@ -0,0 +1,190 @@ +rule_tag_map = array( + 'TAG' => 'KEYWORD', + 'KEY' => 'TYPE', + 'SELECTOR' => 'VARIABLE', + 'ATTR_SELECTOR' => 'OPERATOR', + 'SSTRING' => 'STRING', + 'DSTRING' => 'STRING', + 'ROUND_BRACKET_SELECTOR' => 'OPERATOR', + ); + + $this->dirty_exit_recovery = array( + 'COMMENT' => '%.*?(?:\*/|$)%s', + 'SSTRING' => "/(?:[^\\\\']+|\\\\.)*(?:'|$)/", + 'DSTRING' => '/(?:[^\\\\"]+|\\\\.)*(?:"|$)/', + 'ATTR_SELECTOR' => '/(?: [^\\]\\\\]+ | \\\\.)* (?:\]|$)/xs', + 'ROUND_BRACKET_SELECTOR' => '/(?: [^\\)\\\\]+ | \\\\.)* (?:\)|$)/xs', + ); + $this->state_ [] = 'global'; + } + + + function init() { + $this->expecting = null; + } + + + + function main() { + + $comment_regex = '% /\* .*? \*/ %sx'; + + + $this->start(); + + + while (!$this->eos()) { + + if (!$this->clean_exit) { + try { + $tok = $this->resume(); + if ($this->server_break($tok)) break; + $this->record($this->match(), $tok); + } catch(Exception $e) { + if (LUMINOUS_DEBUG) throw $e; + else continue; + } + } + $this->skip_whitespace(); + $pos = $this->pos(); + $tok = null; + $m = null; + $state = $this->state(); + $in_block = $state === 'block'; + $in_media = $state === 'media'; + $get = false; + $c = $this->peek(); + + if ($this->embedded_server && $this->check($this->server_tags)) { + $this->interrupt = true; + $this->clean_exit = true; + break; + } + elseif ($c === '/' && $this->scan(LuminousTokenPresets::$C_COMMENT_ML)) + $tok = 'COMMENT'; + elseif($in_block && $c === '#' && + $this->scan('/#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?/')) + $tok = 'NUMERIC'; + elseif($in_block && (ctype_digit($c) || $c === '-') + && $this->scan('/-?(?>\d+)(\.(?>\d+))?(?:em|px|ex|ch|mm|cm|in|pt|%)?/') + !== null) { + $tok = 'NUMERIC'; + } + elseif(!$in_block && $this->scan('/(?<=[#\.:])[\w\-]+/') !== null) + $tok = 'SELECTOR'; + // check for valid super-blocks, e.g. media {...} and @keyframes {} + elseif(!$in_block && !$in_media && $c === '@' + && $this->scan('/@ + (-(moz|ms|webkit|o)-)?keyframes\\b + | + media\\b/x') + ) { + $this->state_[] = 'media'; + $tok = 'TAG'; + } + elseif(( ctype_alpha($c) || $c === '!' || $c === '@' || $c === '_' || $c === '-' ) + && $this->scan('/(!?)[\-\w@]+/')) { + if ($in_media) $tok = 'VALUE'; + elseif (!$in_block || $this->match_group(1) !== '') $tok = 'TAG'; + elseif($this->expecting === 'key') $tok = 'KEY'; + elseif($this->expecting === 'value') { + $m = $this->match(); + if ($m === 'url' || $m === 'rgb' || $m === 'rgba') $tok = 'FUNCTION'; + else $tok = 'VALUE'; + } + } + + // TODO attr selectors should handle embedded strings, I think. + elseif(!$in_block && $c === '[' + && $this->scan('/\[ (?> [^\\]\\\\]+ | \\\\.)* \]/sx')) + $tok = 'ATTR_SELECTOR'; + + elseif(!$in_block && $c === '(' + && $this->scan('/\( (?> [^\\)\\\\]+ | \\\\.)* \) /sx')) { + $tok = 'ROUND_BRACKET_SELECTOR'; + } + elseif($c === '}' || $c === '{') { + + $get = true; + if ($c === '}' && ($in_block || $in_media)) { + array_pop($this->state_); + if ($in_media) { + // @media adds a 'media' state, then the '{' begins a new global state. + // We've just popped global, now we need to pop media. + array_pop($this->state_); + } + } + elseif (!$in_block && $c === '{') { + if ($in_media) { + $this->state_[] = 'global'; + } + else { + $this->state_[] = 'block'; + $this->expecting = 'key'; + } + } + + } + elseif($c === '"' && $this->scan(LuminousTokenPresets::$DOUBLE_STR)) + $tok = 'DSTRING'; + elseif($c === "'" && $this->scan(LuminousTokenPresets::$SINGLE_STR)) + $tok = 'SSTRING'; + elseif($c === ':' && $in_block) { + $this->expecting = 'value'; + $get = true; + $tok = 'OPERATOR'; + } + elseif($c=== ';' && $in_block) { + $this->expecting = 'key'; + $get = true; + $tok = 'OPERATOR'; + } + elseif($this->embedded_html && $this->check('%<\s*/\s*style%i')) { + $this->interrupt = false; + $this->clean_exit = true; + + break; + } + elseif($this->scan('/[:\\.#>*]+/')) $tok = 'OPERATOR'; + + else { + $get = true; + } + + if ($this->server_break($tok)) break; + + + $m = $get? $this->get() : $this->match(); + $this->record($m, $tok); + assert($this->pos() > $pos || $this->eos()); + + } + } + + public static function guess_language($src, $info) { + $p = 0; + if (preg_match( + "/(font-family|font-style|font-weight)\s*+:\s*+[^;\n\r]*+;/", $src)) + $p += 0.15; + if (strpos($src, '!important') !== false) $p += 0.05; + // generic rule + if (preg_match("/\\b(div|span|table|body)\\b [^\n\r\{]*+ [\r\n]*+ \{/x", + $src)) + $p += 0.10; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/diff.php b/ehcp/net2ftp/plugins/luminous/languages/diff.php new file mode 100644 index 0000000..d019d0b --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/diff.php @@ -0,0 +1,208 @@ +pretty_mode) return null; + // $luminous_ is a singleton from the main calling API. It may or may not + // exist here, but if it does, we're going to use it. + global $luminous_; + if (!isset($luminous_)) + return null; + + $spos = strrpos($filename, '.'); + if ($spos === false) {return null;} + $ext = substr($filename, $spos+1); + $s = $luminous_->scanners->GetScanner(strtolower($ext)); + // we actually only want the classname, not an instance. + if ($s === null) return null; + else return get_class($s); + } + + + function string($string=null) { + if ($string !== null) { + if (preg_match('/^[><]/m', $string)) { + // normal rules + $this->patterns['range'] = '/\d+.*/'; + $this->patterns['codeblock'] = "/(^([<> ]).*(\n)?)+/m"; + } + elseif (preg_match('/^\*{3}/m', $string)) { + // context + $this->patterns['range'] = "/([\-\*]{3})[ \t]+\d+,\d+[ \t]+\\1.*/"; + $this->patterns['codeblock'] = "/(^([!+ ]).*(\n)?)+/m"; + } + else { + // unified + $this->patterns['range'] = "/@@.*/"; + $this->patterns['codeblock'] = "/(^([+\- ]).*(\n)?)+/m"; + } + } + + return parent::string($string); + + } + + function main() { + // we're aiming to handle context, unified and normal diff all at once here + // because it doesn't really seem that hard. + $child = null; + $last_index = -1; + while (!$this->eos()) { + $index = $this->pos(); + assert($index > $last_index); + $last_index = $index; + + assert($this->bol()); + + $tok = null; + if ($this->scan('/diff\s.*$/m') !== null) $tok = 'KEYWORD'; + // normal, context and unified ranges + elseif($this->scan($this->patterns['range']) !== null) + $tok = 'DIFF_RANGE'; + elseif($this->scan("/-{3}[ \t]*$/m")) $tok = null; + + elseif($this->scan('/(?:\**|=*|\w.*)$/m') !== null) $tok = 'KEYWORD'; + // this is a header line which may contain a file path. If it does, + // update the child scanner according to its extension. + elseif($this->scan("@[+\-\*]{3}(\s+([^\s]*)([ \t]|$))?.*@m") !== null) { + $m = $this->match_groups(); + // unified uses +++, context uses * + if ($m[0][0] === '+' || $m[0][0] === '*') + $tok = 'DIFF_HEADER_NEW'; + else $tok = 'DIFF_HEADER_OLD'; + if (isset($m[2])) { + $filename = preg_replace('@.*\\\\/@', '', $m[2]); + $child = self::get_child_scanner($filename); + } + } + elseif($this->scan('/\\\\.*/') !== null) $tok = null; + elseif($this->scan($this->patterns['codeblock']) !== null) { + + // this is actual source code. + // we're going to format this here. + // we're going to extract the block, and try to re-assemble it as + // verbatim code, then highlight it via a child scanner, then split up + // the lines, re-apply the necessary prefixes (e.g. + or -) to them, + // and store them as being a DIFF_ token. + // we have to do it like this, rather than line by line, otherwise + // multiline tokens aren't going to work properly. There's stilla risk + // that the diff will be fragmented such the child scanner gets it + // wrong but that can't be helped. + + // TODO restructure this so the complicated bits aren't done if there's + // no child scanner to pass it down to + + $block = $this->match(); + if (!strlen($block)) { + assert(0); + } + + $lines = explode("\n", $block); + $verbatim = array(); + $verbatim_ = ''; + $types = array(); + $prefixes = array(); + foreach($lines as $l) { + if (!strlen($l) || $l[0] === ' ') + $types[]= 'DIFF_UNCHANGED'; + elseif ($l[0] === '+' || $l[0] === '>') + $types[] = 'DIFF_NEW'; + elseif ($l[0] === '!' || $l[0] === '<' || $l[0] === '-') + $types[] = 'DIFF_OLD'; + else assert(0); + $prefixes[] = (isset($l[0]))? $l[0] : ''; + $verbatim_[] = substr($l, 1); + } + $verbatim = implode("\n", $verbatim_); + $escaped = false; + $tagged; + if ($child !== null) { + $c = new $child; + $c->init(); + $c->string($verbatim); + $c->main(); + $tagged = $c->tagged(); + $escaped = true; + } else { + $tagged = $verbatim; + } + $exp = explode("\n", $tagged); + assert(count($exp) === count($prefixes)); + foreach($exp as $i=>$v) { + $t = $types[$i]; + // if the sub-scanner escaped the line, we also need to escape the + // prefix for consistency + $prefix = $prefixes[$i]; + if ($escaped) $prefix = LuminousUtils::escape_string($prefix); + $text = $prefix . $v; + $this->record( + $text, + $t, + $escaped); + if ($i < count($exp)-1) $this->record("\n", null); + } + if ($this->eol()) $this->record($this->get(), null); + continue; + } + else $this->scan('/.*/'); + + // previous else clause can capture empty strings + if ($this->match() !== '') + $this->record($this->match(), $tok); + + assert($this->eol()); + // consume newline + if (!$this->eos()) $this->record($this->get(), null); + + } + } + + static function guess_language($src, $info) { + // diff isn't too hard. We check for 'index' and a few other things + $p = 0.0; + if (preg_match("/^-{3}.*+[\n\r]++\\+{3}/m", $src)) $p = 0.25; + if (preg_match('/^@@.*@@/m', $src)) $p += 0.25; + if (preg_match('/^(index|diff)\\b/m', $src)) $p += 0.10; + + + // finally we look for the diff markers at the line starts + // we're going to use the remaining 40% of the probability as so: + // We'll say a perfect match for diff has + // 10%+ of its lines starting with the +/- markers ( or +/! for + // context/original format), and we'll scale real proportion + // to fill up the remaining 0.4 + $c = preg_match_all('/^[<>+\\-!]\s/m', $src, $m); + $num_lines = $info['num_lines']; + if ($num_lines > 0) { + $proportion = $c/$num_lines; + $proportion = min(0.1, $proportion); + $p += 0.4 * ($proportion * 10); + } + return $p; + } + +} + + +class LuminousPrettyDiffScanner extends LuminousDiffScanner { + public $pretty_mode = true; +} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/languages/ecmascript.php b/ehcp/net2ftp/plugins/luminous/languages/ecmascript.php new file mode 100644 index 0000000..cd0491f --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/ecmascript.php @@ -0,0 +1,257 @@ +'; + // regular expressions in JavaScript are delimited by '/', BUT, the slash + // character may appear unescaped within character classes + // we can handle this fairly easily with a single regex because the classes + // do not nest + // TODO: + // I do not know if this is specific to Javascript or ECMAScript derivatives + // as a whole, I also don't know if multi-line regexen are legal (i.e. when + // the definition spans multiple lines) + protected $regex_regex = "% + / + (?: + [^\\[\\\\/]+ # not slash, backslash, or [ + | \\\\. # escape char + | + (?: # char class [..] + \\[ + (?: + [^\\]\\\\]+ # not slash or ] + | \\\\. # escape + )* + (?: \\] | \$) + ) # close char class + )* + (?: /[iogmx]* | \$) #delimiter or eof + %sx"; + + + // logs a persistent token stream so that we can lookbehind to figure out + // operators vs regexes. + private $tokens_ = array(); + + private $child_state = null; + + function __construct($src=null) { + + $this->rule_tag_map = array( + 'COMMENT_SL' => 'COMMENT', + 'SSTRING' => 'STRING', + 'DSTRING' => 'STRING', + 'OPENER' => null, + 'CLOSER' => null, + ); + $this->dirty_exit_recovery = array( + 'COMMENT_SL' => '/.*/', + 'COMMENT' => '%.*?(\*/|$)%s', + 'SSTRING' => "/(?:[^\\\\']+|\\\\.)*('|$)/", + 'DSTRING' => '/(?:[^\\\\"]+|\\\\.)*("|$)/', + // FIXME: Anyone using a server-side interruption to build a regex is + // frankly insane, but we are wrong in the case that they were in a + // character class when the server language interrupted, and we may + // exit the regex prematurely with this + 'REGEX' => '%(?:[^\\\\/]+|\\\\.)*(?:/[iogmx]*|$)%', + ); + + parent::__construct($src); + $this->add_identifier_mapping('KEYWORD', array('break', 'case', 'catch', + 'comment', 'continue', 'do', 'default', 'delete', 'else', 'export', + 'for', 'function', 'if', 'import', 'in', 'instanceof', 'label', 'new', + 'null', 'return', 'switch', 'throw', 'try', 'typeof', 'var', 'void', + 'while', 'with', + 'true', 'false', 'this' + )); + $this->add_identifier_mapping('FUNCTION', array('$', 'alert', 'confirm', + 'clearTimeout', 'clearInterval', + 'encodeURI', 'encodeURIComponent', 'eval', 'isFinite', 'isNaN', + 'parseInt', 'parseFloat', 'prompt', + 'setTimeout', 'setInterval', + 'decodeURI', 'decodeURIComponent', 'jQuery')); + + $this->add_identifier_mapping('TYPE', array('Array', 'Boolean', 'Date', + 'Error', 'EvalError', 'Infinity', 'Image', 'Math', 'NaN', 'Number', + 'Object', 'Option', 'RangeError', 'ReferenceError', 'RegExp', 'String', + 'SyntaxError', 'TypeError', 'URIError', + + 'document', + 'undefined', 'window')); + } + + function is_operand() { + for ($i = count($this->tokens) -1 ; $i>= 0; $i--) { + $tok = $this->tokens[$i][0]; + if ($tok === null || $tok === 'COMMENT' || $tok === 'COMMENT_SL') continue; + return ($tok === 'OPERATOR' || $tok === 'OPENER'); + } + return true; + } + + function init() { + + if ($this->embedded_server) + $this->add_pattern('STOP_SERVER', $this->server_tags); + if ($this->embedded_html) + $this->add_pattern('STOP_SCRIPT', '%%'); + + $op_pattern = '[=!+*%\-&^|~:?\;,.>'; + if (!($this->embedded_server || $this->embedded_html)) + $op_pattern .= '<]+'; + else { + // build an alternation with a < followed by a lookahead + $op_pattern .= ']|<(?!['; + // XXX this covers embedded_server) $op_pattern .= '?%'; + if ($this->embedded_html) $op_pattern .= '/'; + $op_pattern .= '])'; // closes lookahead + $op_pattern = "(?:$op_pattern)+"; + } + $op_pattern = "@$op_pattern@"; + + $this->add_pattern('IDENT', '/[a-zA-Z_$][_$\w]*/'); + // NOTE: slash is a special case, and add_pattern('OPERATOR', $op_pattern); + // we care about openers for figuring out where regular expressions are + $this->add_pattern('OPENER', '/[\[\{\(]+/'); + $this->add_pattern('CLOSER', '/[\]\}\)]+/'); + + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL); + $this->add_pattern('SSTRING', LuminousTokenPresets::$SINGLE_STR_SL); + $this->add_pattern('DSTRING', LuminousTokenPresets::$DOUBLE_STR_SL); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); + $this->add_pattern('COMMENT_SL', LuminousTokenPresets::$C_COMMENT_SL); + // special case + $this->add_pattern('SLASH', '%/%'); + + $stop_patterns = array(); + + + $xml_scanner = new LuminousHTMLScanner($this->string()); + $xml_scanner->xml_literal = true; + $xml_scanner->scripts = false; + $xml_scanner->embedded_server = $this->embedded_server; + if ($this->embedded_server) + $xml_scanner->server_tags = $this->server_tags; + $xml_scanner->init(); + $xml_scanner->pos($this->pos()); + $this->add_child_scanner('xml', $xml_scanner); + } + + + + + // c+p from HTML scanner + function scan_child($lang) { + assert (isset($this->child_scanners[$lang])); + $scanner = $this->child_scanners[$lang]; + $scanner->pos($this->pos()); + $substr = $scanner->main(); + $this->record($scanner->tagged(), 'XML', true); + $this->pos($scanner->pos()); + if ($scanner->interrupt) { + $this->child_state = array($lang, $this->pos()); + } else { + $this->child_state = null; + } + } + + + function main() { + $this->start(); + $this->interrupt = false; + while (!$this->eos()) { + $index = $this->pos(); + $tok = null; + $m = null; + $escaped = false; + + if (!$this->clean_exit) { + try { + $tok = $this->resume(); + } catch(Exception $e) { + if (LUMINOUS_DEBUG) throw $e; + else { + $this->clean_exit = true; + continue; + } + } + } + elseif ($this->child_state !== null && $this->child_state[1] < $this->pos()) { + $this->scan_child($this->child_state[0]); + continue; + } + + elseif (($rule = $this->next_match()) !== null) { + $tok = $rule[0]; + if ($rule[1] > $index) { + $this->record(substr($this->string(), $index, $rule[1] - $index), null); + } + } else { + $this->record(substr($this->string(), $index), null); + $this->clean_exit = true; + $this->interrupt = false; + $this->terminate(); + break; + } + + if ($tok === 'SLASH') { + if ($this->is_operand()) { + $tok = 'REGEX'; + $this->unscan(); + assert($this->peek() === '/'); + $m = $this->scan($this->regex_regex); + if ($m === null) { + assert(0); + $m = $this->rest(); + $this->terminate(); + } + + } else { + $tok = 'OPERATOR'; + } + } + elseif ($tok === 'OPERATOR' && $this->match() === '<') { + if ($this->is_operand()) { + $this->unscan(); + $this->scan_child('xml'); + continue; + } + } + + elseif ($tok === 'STOP_SERVER') { + $this->interrupt = true; + $this->unscan(); + break; + } + elseif ($tok === 'STOP_SCRIPT') { + $this->unscan(); + break; + } + if ($m === null) + $m = $this->match(); + + if ($this->server_break($tok)) + break; + + if ($tok === 'COMMENT_SL' && $this->script_break($tok) + ) + break; + assert($this->pos() > $index); + + $tag = $tok; + + $this->record($m, $tag, $escaped); + + } + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/erlang.php b/ehcp/net2ftp/plugins/luminous/languages/erlang.php new file mode 100644 index 0000000..805ea0b --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/erlang.php @@ -0,0 +1,163 @@ +$0', $token[1]); + return $token; + } + + // helper function: generates a regex which matches only numeric strings + // in the given base + static function build_based_int_regex($base) { + + assert(2 <= $base && $base <= 16); + $regex = '/(?i:[0-'; + if ($base <= 10) + $regex .= (string)$base-1; + else + $regex .= '9a-' . strtolower(dechex($base-1)); + $regex .= '])+/'; + return $regex; + } + + // 3.11 integers are pretty strange, you are allowed to specify base + // 2 ><= b <= 16 arbitrarily. + function based_int($matches) { + $base = $matches[1]; + $match = $matches[0]; + $this->pos_shift(strlen($matches[0])); + $number = null; + if ($base >= 2 && $base <= 16) + $number = $this->scan($this->build_based_int_regex((int)$base)); + if ($number !== null) { + $match .= $number; + } + $this->record($match, 'NUMERIC'); + // now we're going to greedily consume any trailing numbers + // This handles the case e.g. 2#001122, + // we don't want the '22' to get caught as a separate literal, we want to + // make sure it's NOT highlighted as a literal + // so we consume it here. + if ($this->scan('/\d+/') !== null) { + $this->record($this->match(), null); + } + } + + + static function oo_stream_filter($tokens) { + $c = count($tokens)-1; + for($i=0; $i<$c; $i++) { + if ($tokens[$i][1] === ':') { + if ($i > 0) { + $behind = &$tokens[$i-1][0]; + if ($behind === 'IDENT') $behind = 'OBJ'; + } + if ($i < $c-1) { + $ahead = &$tokens[$i+1][0]; + if ($ahead === 'IDENT') $ahead = 'OO'; + $i++; + } + } + } + return $tokens; + } + + function init() { + + $this->remove_stream_filter('oo-syntax'); + $this->remove_filter('comment-to-doc'); + $this->add_stream_filter('oo-syntax', array($this, 'oo_stream_filter')); + $this->add_filter('interpolation', 'STRING', array($this, 'str_filter')); + + + // 3.6 - technically should include the newline, but doesn't really matter + $this->add_pattern('COMMENT', '/%.*/'); + // stuff like -module, -author + $this->add_pattern('KEYWORD', '/^-(?:[a-z_]\w*)\\b/m'); + + // 3.11 integer with radix + $this->add_pattern('BASED_INT', '/[+\\-]?(\d+)#/'); + $this->overrides['BASED_INT'] = array($this, 'based_int'); + // float + $this->add_pattern('NUMERIC', '/[+\\-]?\d+\.\d+([eE][+\\-]?\d+)?/'); + // int + $this->add_pattern('NUMERIC', '/[+\\-]?\d+/'); + + // 3.7 defines some 'separators', included are . : | || ; , ? -> and # + // we'll capture these separately to operators + // and map it to a keyword, for lack of anything better + $this->add_pattern('SEPARATOR', '/\\|\\||->|[\\.:\\|;,?#]/'); + $this->rule_tag_map['SEPARATOR'] = 'KEYWORD'; + + // 3.9 + $this->add_pattern('OPERATOR', '%==|/=|=:=|=<|>=|\\+\\+|--|<-|[+\\-*=!<>/]%'); + // 3.9 named ops + $this->add_identifier_mapping('OPERATOR', array('div', 'rem', 'or', 'xor', + 'bor', 'bxor', 'bsl', 'bsr', 'and', 'band', 'not', 'bnot')); + + // char literals occur after a '$' + $this->add_pattern('CHARACTER', '/\\$(?:(?:\\\\(?:\\^\w+|\d+|.))|.)/'); + $this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR); + + // this looks like a string, but is in fact an 'atom' + // we'll call it a value, + $this->add_pattern('VALUE', LuminousTokenPresets::$SINGLE_STR); + $this->add_pattern('IDENT', '/[a-z][@\w]*/'); + $this->add_pattern('VARIABLE', '/[A-Z][@\w]*/'); + + + // 3.8 + $this->add_identifier_mapping('KEYWORD', array('after', 'begin', 'case', + 'catch', 'cond', 'end', 'fun', 'if', 'let', 'of', 'query', 'receive', + 'when', + // reserved, but undefined: + 'all_true', 'some_true' + )); + $this->add_identifier_mapping('VALUE', array('true', 'false')); + + // from the BIF section + $this->add_identifier_mapping('FUNCTION', array( + 'atom', 'binary', 'constant', 'float', 'integer', 'function', 'list', +'number', 'pid', 'port', 'reference', 'tuple', 'atom_to_list', 'list_to_atom', +'abs', 'float', 'float_to_list', 'integer_to_list', 'list_to_float', +'list_to_integer', 'round', 'trunc', 'binary_to_list', 'binary_to_term', +'concat_binary', 'list_to_binary', 'size', 'split_binary', 'term_to_binary', +'element', 'list_to_tuple', 'seteleemnt', 'size', 'tuple_to_list', 'hd', +'length', 't1', 'check_process-code', 'delete_module', 'load_module', +'preloaded', 'purge_module', 'module_loaded', 'apply', 'exit', 'group_leader', +'link', 'list_to_pid', 'pid_to_list', 'process_flag', 'process_info', +'processes', 'self', 'spawn', 'spawn_link', 'unlink', 'erase', 'get', +'get_keys', 'put', 'disconnect_node', 'get_cookie', 'halt', 'is_alive', +'monitor_node', 'node', 'nodes', 'processes', 'set_cookie', 'set_node', +'statistics', 'register', 'registered', 'unregister', 'whereis', 'open_port', +'port_close', 'port_info', 'ports', 'date', 'hash', 'make_ref', 'now', 'throw', +'time', 'acos', 'asin', 'atan', 'atan2', 'cos', 'cosh', 'exp', 'log', 'log10', +'pi', 'pow', 'sin', 'sinh', 'tan', 'tanh')); + } + + + static function guess_language($src, $info) { + $p = 0.0; + foreach(array('module', 'author', 'export', 'include') as $s) { + if (strpos($src, '-' . $s) !== false) $p += 0.02; + } + if (strpos($src, ' ++ ') !== false) $p += 0.01; + if (preg_match('/[a-zA-Z_]\w*#[a-zA-Z_]+/', $src)) $p += 0.05; + + // doc comment + if (preg_match('/^%%/m', $src)) $p += 0.05; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/go.php b/ehcp/net2ftp/plugins/luminous/languages/go.php new file mode 100644 index 0000000..c917e19 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/go.php @@ -0,0 +1,73 @@ +record($matches[1], 'IDENT'); + $this->record($matches[2], null); + $this->record($matches[3], 'USER_FUNCTION'); + $this->pos_shift(strlen($matches[0])); + $this->user_defs[$matches[3]] = ($matches[1] === 'type')? 'TYPE' + : 'FUNCTION'; + } + + function init() { + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_SL); + + $ident = '[\p{L}_][\p{L}\p{N}_]*'; + // this should be unicode for letter (\p{L}) and number (\p{N}) + $this->add_pattern('type', "/\\b(type|func)(\s+)($ident)/u"); + $this->overrides['type'] = array($this, 'type_override'); + + $this->add_pattern('IDENT', "/$ident/u"); + $this->add_pattern('OPERATOR', '/[+\\-\\*\\/%&\\|^<>&=!:\\.,;]+/'); + + $exp = '[eE][+-]?\d+'; + // note the trailing i - which denotes imaginary literals + $this->add_pattern('NUMERIC', + "/(?:\d+\.\d*(?:$exp)?|\d+$exp|\.\d+(?:$exp)?)i?/"); + $this->add_pattern('NUMERIC', '/(?:0(?:\d+|x[a-fA-F0-9]+)|\d+)i?/'); + + $this->add_pattern('CHARACTER', + "/'(?:\\\\(?:\d+|[uUxX][a-fA-F0-9]+|.)|.)'/u"); + $this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR); + $this->add_pattern('STRING', '/`(?:[^`\\\\]+|\\\\.)*(?:`|$)/s'); + + $this->add_identifier_mapping('KEYWORD', array('break', 'case', 'chan', + 'const', 'continue', 'default', 'defer', 'else', 'fallthrough', 'for', + 'func', 'go', 'goto', 'if', 'import', 'interface', 'map', 'package', + 'range', 'return', 'select', 'struct', 'switch', 'type', 'var')); + + $this->add_identifier_mapping('TYPE', array('any', 'bool', 'byte', + 'complex', 'complex64', 'complex128', 'int', 'int8', 'int16', 'int32', + 'int64', 'float', 'float32', 'float64', 'string', 'struct', + 'uint', 'uint8', 'uint16', 'uint32', 'uint64', 'uintptr')); + $this->add_identifier_mapping('VALUE', array('false', 'iota', 'true')); + + // from the old luminous language file, don't know how sensible these are + $this->add_identifier_mapping('FUNCTION', array('append', 'cap', 'copy', + 'cmplx', 'imag', 'len', 'make', 'new', 'panic', 'print', 'println', + 'real', 'recover', 'sizeof')); + } + + public static function guess_language($src, $info) { + $p = 0.0; + if (strpos($src, 'func ') !== false) $p += 0.02; + if (preg_match('/func\s*\\(\s*\w+\s*\\*\s*\w+/', $src)) $p += 0.05; + if (preg_match('/^package\s+\w+/', $src)) $p += 0.01; + if (preg_match('/type\s+\w+\s+struct\s*\\{/', $src)) $p += 0.03; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/groovy.php b/ehcp/net2ftp/plugins/luminous/languages/groovy.php new file mode 100644 index 0000000..26b0361 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/groovy.php @@ -0,0 +1,166 @@ +peek() === '/'); + assert($match === array(0=>'/')); + $regex = false; + + $i = count($this->tokens); + while ($i--) { + list($tok, $contents) = $this->tokens[$i]; + if ($tok === 'COMMENT') continue; + elseif ($tok === 'OPERATOR') $regex = true; + elseif($tok !== null) $regex = false; + else { + $t = rtrim($contents); + if ($t === '') continue; + $c = $t[strlen($t)-1]; + $regex = ($c === '(' || $c === '[' || $c === '{'); + } + break; + } + + if (!$regex) { + $this->record($this->get(), 'OPERATOR'); + } + else { + $m = $this->scan('@ / (?: [^\\\\/]+ | \\\\. )* (?: /|$) @sx'); + assert($m !== null); + $this->record($m, 'REGEX'); + } + } + + // string interpolation is complex and it nests, so we do that in here + function interp_string($m) { + // this should only be called for doubly quoted strings + // and triple-double quotes + // + // interpolation is betwee ${ ... } + $patterns = array('interp' => '/(?pos(); + if (preg_match('/^"""/', $m[0])) { + $patterns['term'] = '/"""/'; + $this->pos_shift(3); + } + else { + assert(preg_match('/^"/', $m[0])); + $patterns['term'] = '/"/'; + $this->pos_shift(1); + } + while (1) { + $p = $this->pos(); + list($name, $index, $matches) = $this->get_next_named($patterns); + if ($name === null) { + // no matches, terminate + $this->record(substr($this->string(), $start), 'STRING'); + $this->terminate(); + break; + } + elseif($name === 'term') { + // end of the string + $range = $index + strlen($matches[0]); + $this->record(substr($this->string(), + $start, $range-$start), 'STRING'); + $this->pos($range); + break; + } else { + // interpolation, handle this with a subscanner + $this->record(substr($this->string(), $start, $index-$start), 'STRING'); + $this->record($matches[0], 'DELIMITER'); + $subscanner = new LuminousGroovyScanner($this->string()); + $subscanner->interpolation = true; + $subscanner->init(); + $subscanner->pos($index + strlen($matches[0])); + $subscanner->main(); + + $tagged = $subscanner->tagged(); + $this->record($tagged, 'INTERPOLATION', true); + $this->pos($subscanner->pos()); + if ($this->scan('/\\}/')) $this->record($this->match(), 'DELIMITER'); + $start = $this->pos(); + } + assert($p < $this->pos()); + + } + } + + // brace override halts scanning if the stack is empty and we hit a '}', + // this is for interpolated code, the top-level scanner doesn't bind to this + function brace($m) { + if ($m[0] === '{') $this->brace_stack++; + elseif($m[0] === '}') { + if ($this->brace_stack <= 0) + return true; + $this->brace_stack--; + } + else assert(0); + $this->record($m[0], null); + $this->pos_shift(strlen($m[0])); + } + + + function init() { + $this->add_identifier_mapping('KEYWORD', + $GLOBALS['luminous_java_keywords']); + $this->add_identifier_mapping('TYPE', $GLOBALS['luminous_java_types']); + $this->add_identifier_mapping('KEYWORD', array('any', 'as', 'def', 'in', + 'with', 'do', 'strictfp', + 'println')); + + + // C+P from python + // so it turns out this template isn't quite as readable as I hoped, but + // it's a triple string, e.g: + // "{3} (?: [^"\\]+ | ""[^"\\]+ | "[^"\\]+ | \\.)* (?: "{3}|$) + $triple_str_template = '%1$s{3} (?> [^%1$s\\\\]+ | %1$s%1$s[^%1$s\\\\]+ | %1$s[^%1$s\\\\]+ | \\\\. )* (?: %1$s{3}|$)'; + $str_template = '%1$s (?> [^%1$s\\\\]+ | \\\\. )* (?: %1$s|$)'; + $triple_dstr = sprintf($triple_str_template, '"'); + $triple_sstr = sprintf($triple_str_template, "'"); + + $this->add_pattern('COMMENT', '/^#!.*/'); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML); + $this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_SL); + $this->add_pattern('INTERP_STRING', "/$triple_dstr/sx"); + $this->add_pattern('STRING', "/$triple_sstr/xs"); + $this->add_pattern('INTERP_STRING', LuminousTokenPresets::$DOUBLE_STR); + $this->overrides['INTERP_STRING'] = array($this, 'interp_string'); + // differs from java: + $this->add_pattern('STRING', LuminousTokenPresets::$SINGLE_STR); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX); + $this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL); + $this->add_pattern('IDENT', '/[a-zA-Z_]\w*/'); + $this->add_pattern('OPERATOR', '/[~!%^&*\-=+:?|<>]+/'); + $this->add_pattern('SLASH', '%/%'); + $this->overrides['SLASH'] = array($this, 'regex_override'); + if ($this->interpolation) { + $this->add_pattern('BRACE', '/[{}]/'); + $this->overrides['BRACE'] = array($this, 'brace'); + } + } + + static function guess_language($src, $info) { + $p = 0.0; + if (preg_match('/\\bdef\s+\w+\s*=/', $src)) $p += 0.04; + if (preg_match('/println\s+[\'"\w]/', $src)) $p += 0.03; + // Flawed check for interpolation, might match after a string + // terminator + if (preg_match("/\"[^\"\n\r]*\\$\\{/", $src)) $p += 0.05; + // regex literal ~/regex/ + if (preg_match('%~/%', $src)) $p += 0.05; + if (preg_match('/^import\s+groovy/m', $src)) $p += 0.2; + return $p; + } +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/haskell.php b/ehcp/net2ftp/plugins/luminous/languages/haskell.php new file mode 100644 index 0000000..c637791 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/haskell.php @@ -0,0 +1,99 @@ +nestable_token('COMMENT', '/\\{-/', '/-\\}/'); + } + + function init() { + // import from ./include/ + global $luminous_haskell_functions; + global $luminous_haskell_types; + global $luminous_haskell_values; + global $luminous_haskell_keywords; + $this->add_identifier_mapping('KEYWORD', $luminous_haskell_keywords); + $this->add_identifier_mapping('TYPE', $luminous_haskell_types); + $this->add_identifier_mapping('FUNCTION', $luminous_haskell_functions); + $this->add_identifier_mapping('VALUE', $luminous_haskell_values); + + + // shebang + $this->add_pattern('COMMENT', '/^#!.*/'); + + // Refer to the sections in + // http://www.haskell.org/onlinereport/lexemes.html + // for the rules implemented here. + + // 2.4 + $this->add_pattern('TYPE', '/[A-Z][\'\w]*/'); + $this->add_pattern('IDENT', '/[_a-z][\'\w]*/'); + + // http://www.haskell.org/onlinereport/prelude-index.html + $this->add_pattern('FUNCTION', '/ +(?: !!|\\$!?|&&|\\|{1,2}|\\*{1,2}|\\+{1,2}|-(?!-)|\\.|\\/=?|<=?|==|=<<|>>?=?|\\^\\^? ) +/x'); + + $op_chars = '\\+%^\\/\\*\\?#<>:;=@\\[\\]\\|\\\\~\\-!$@%&\\|='; + + // ` is used to make a function call into an infix operator + // CRAZY OR WHAT. + $this->add_pattern('OPERATOR', '/`[^`]*`/'); + // some kind of function, lambda, maybe. + $this->add_pattern('FUNCTION', "/\\\\(?![$op_chars])\S+/"); + + // Comments are hard! + // http://www.mail-archive.com/haskell@haskell.org/msg09019.html + // According to this, we can PROBABLY, get away with checking either side + // for non-operator chars followed by at least 2 dashes, but I could well + // be wrong. It'll do for now. + $this->add_pattern('COMMENT', "/(?add_pattern('NESTED_COMMENT', '/\\{-/'); + $this->overrides['NESTED_COMMENT'] = array($this, 'comment_override'); + $this->rule_tag_map['NESTED_COMMENT'] = 'COMMENT'; + $this->add_pattern('OPERATOR', "/[$op_chars]+/"); + + // FIXME: the char type is way more discriminating than this + $this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR_SL); + $this->add_pattern('CHARACTER', LuminousTokenPresets::$SINGLE_STR_SL); + + // 2.5 + $this->add_pattern('NUMERIC', '/ + 0[oO]\d+ #octal + | + 0[xX][a-fA-F\d]+ #hex + | + # decimal and float can be done at once, according to the grammar + \d+ (?: (?:\.\d+)? (?: [eE][+-]? \d+))? + /x'); + + } + + public static function guess_language($src, $info) { + $p = 0.0; + // comments + if (preg_match('/\\{-.*\\-}/', $src)) $p += 0.05; + // 'import qualified' seems pretty unique + if (preg_match('/^import\s+qualified/m', $src)) $p += 0.05; + // "data SomeType something =" + if (preg_match('/data\s+\w+\s+\w+\s*=/', $src)) $p += 0.05; + return $p; + } + +} diff --git a/ehcp/net2ftp/plugins/luminous/languages/html.php b/ehcp/net2ftp/plugins/luminous/languages/html.php new file mode 100644 index 0000000..f920484 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/languages/html.php @@ -0,0 +1,252 @@ +dirty_exit_recovery = array( + 'DSTRING' => '/[^">]*+("|$|(?=[>]))/', + 'SSTRING' => "/[^'>]*+('|$|(?=[>]))/", + 'COMMENT1' => '/(?> [^\\-]+ | -(?!->))*(?:-->|$)/x', + 'COMMENT2' => '/[^>]*+(?:>|$)/s', + 'CDATA' => '/(?>[^\\]]+|\\](?!\\]>))*(?:\\]{2}>|$)/xs', + 'ESC' => '/[^;]*+(?:;|$)/', + 'TYPE' => '/[^\s]*/', + 'VALUE' => '/[^\s]*/', + 'HTMLTAG' => '/[^\s]*/', + ); + + $this->rule_tag_map = array( + 'DSTRING' => 'STRING', + 'SSTRING' => 'STRING', + 'COMMENT1' => 'COMMENT', + 'COMMENT2' => 'COMMENT', + 'CDATA' => 'COMMENT', + ); + + parent::__construct($src); + } + + + + function scan_child($lang) { + assert (isset($this->child_scanners[$lang])); + $scanner = $this->child_scanners[$lang]; + $scanner->pos($this->pos()); + $substr = $scanner->main(); + $this->tokens[] = array(null, $scanner->tagged(), true); + $this->pos($scanner->pos()); + if ($scanner->interrupt) { + $this->child_state = array($lang, $this->pos()); + } else { + $this->child_state = null; + } + } + + + function init() { + $this->add_pattern('', '/&/'); + if ($this->embedded_server) { + $this->add_pattern('TERM', $this->server_tags); + } + $this->add_pattern('', '/state_ = 'global'; + if ($this->scripts) { + $js = new LuminousJavaScriptScanner($this->string()); + $js->embedded_server = $this->embedded_server; + $js->embedded_html = true; + $js->server_tags = $this->server_tags; + $js->init(); + + $css = new LuminousCSSScanner($this->string()); + $css->embedded_server = $this->embedded_server; + $css->embedded_html = true; + $css->server_tags = $this->server_tags; + $css->init(); + + $this->add_child_scanner('js', $js); + $this->add_child_scanner('css', $css); + } + } + + private $tagname = ''; + private $expecting = ''; + + function main() { + $this->start(); + $this->interrupt = false; + + while (!$this->eos()) { + $index = $this->pos(); + + if ($this->embedded_server && $this->check($this->server_tags)) { + $this->interrupt = true; + break; + } + + if (!$this->clean_exit) { + try { + $tok = $this->resume(); + if ($this->server_break($tok)) break; + $this->record($this->match(), $tok); + } catch (Exception $e) { + if (LUMINOUS_DEBUG) throw $e; + else $this->clean_exit = true; + } + continue; + } + + if ($this->child_state !== null && $this->child_state[1] < $this->pos()) { + $this->scan_child($this->child_state[0]); + continue; + } + + $in_tag = $this->state_ === 'tag'; + if (!$in_tag) { + $next = $this->next_match(false); + if($next) { + $skip = $next[1] - $this->pos(); + $this->record($this->get($skip), null); + if ($next[0] === 'TERM') { + $this->interrupt = true; + break; + } + } + } else { + $this->skip_whitespace(); + if ($this->embedded_server && $this->check($this->server_tags)) { + $this->interrupt = true; + break; + } + } + + + + $index = $this->pos(); + $c = $this->peek(); + + $tok = null; + $get = false; + if (!$in_tag && $c === '&' + && $this->scan('/&[^;\s]+;/') + ) $tok = 'ESC'; + elseif(!$in_tag && $c === '<') { + if ($this->peek(2) === 'scan('/(<)(!DOCTYPE)/i')) { + // special case: doctype + $matches = $this->match_groups(); + $this->record($matches[1], null); + $this->record($matches[2], 'KEYWORD'); + $this->state_ = 'tag'; + continue; + } + // urgh + elseif($this->scan('/ + [^\\]]+ | \\](?!\\]>) )* + (?: \\]\\]> | $ ) + /ixs' + )) + $tok = 'CDATA'; + elseif($this->scan('/|$)/xs')) + $tok = 'COMMENT1'; + elseif($this->scan('/]*+(?:>|$)/s')) $tok = 'COMMENT2'; + else assert(0); + } else { + // check for \n"; + $out .= sprintf($link_template, 'luminous.css', 'luminous-style'); + $out .= sprintf($link_template, $theme, 'luminous-theme'); + if ($js) { + if ($jquery) + $out .= sprintf($script_template, 'jquery-1.6.4.min.js'); + $out .= sprintf($script_template, 'luminous.js'); + } + + return $out; + } +} + +/// @endcond +// ends user diff --git a/ehcp/net2ftp/plugins/luminous/src/options.class.php b/ehcp/net2ftp/plugins/luminous/src/options.class.php new file mode 100644 index 0000000..d26dbdf --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/src/options.class.php @@ -0,0 +1,342 @@ + with class 'luminous', + * CSS is not included and must be included on the page separately + * (probably with luminous::head_html()) + * \li 'html-full' - A complete HTML document. CSS is included. + * \li 'html-inline' - Very similar to 'html' but geared towards inline display. + * Probably not very useful. + * \li 'latex' - A full LaTeX document + * \li 'none' or \c NULL - No formatter. Internal XML format is returned. + * You probably don't want this. + */ + private $format = 'html'; + + /** + * @brief Theme + * + * The default theme to use. This is observed by the HTML-full and LaTeX + * formatters, it is also read by luminous::head_html(). + * + * This should be a valid theme which exists in style/ + */ + private $theme = 'luminous_light.css'; + + /** + * @brief HTML strict standards mode + * + * The HTML4-strict doctype disallows a few things which are technically + * useful. Set this to true if you don't want Luminous to break validation + * on your HTML4-strict document. Luminous should be valid + * HTML4 loose/transitional and HTML5 without needing to enable this. + */ + private $html_strict = false; + + + /** + * @brief Location of Luminous relative to your document root + * + * If you use luminous::head_html(), it has to try to figure out the + * path to the style/ directory so that it can return a correct URL to the + * necessary stylesheets. Luminous may get this wrong in some situations, + * specifically it is currently impossible to get this right if Luminous + * exists on the filesystem outside of the document root, and you have used + * a symbolic link to put it inside. For this reason, this setting allows you + * to override the path. + * + * e.g. If you set this to '/extern/highlighter', the stylesheets will be + * linked with + * \ + * + */ + private $relative_root = null; + + /** + * @brief JavaScript extras + * + * controls whether luminous::head_html() outputs the javascript 'extras'. + */ + private $include_javascript = false; + + /** + * @brief jQuery + * + * Controls whether luminous::head_html() outputs jQuery, which is required + * for the JavaScript extras. This has no effect if $include_javascript is + * false. + */ + private $include_jquery = false; + + + /** + * @brief Failure recovery + * + * If Luminous hits some kind of unrecoverable internal error, it should + * return the input source code back to you. If you want, it can be + * wrapped in an HTML tag. Hopefully you will never see this. + */ + private $failure_tag = 'pre'; + + /** + * @brief Defines an SQL function which can execute queries on a database + * + * An SQL database can be used as a replacement for the file-system cache + * database. + * This function should act similarly to the mysql_query function: + * it should take a single argument (the query string) and return: + * @li boolean @c false if the query fails + * @li boolean @c true if the query succeeds but has no return value + * @li An array of associative arrays if the query returns rows (each + * element is a row, and each row is an map keyed by field name) + */ + private $sql_function = null; + + private $verbose = true; + + + public function LuminousOptions($opts=null) { + if (is_array($opts)) { + $this->set($opts); + } + } + + public function set($nameOrArray, $value=null) { + $array = $nameOrArray; + if (!is_array($array)) { + $array = array($nameOrArray => $value); + } + foreach($array as $option => $value) { + // for backwards compatibility we need to do this here + $option = str_replace('-', '_', $option); + $this->__set($option, $value); + } + } + + + private static function check_type($value, $type, $nullable=false) { + if ($nullable && $value === null) return true; + $func = null; + if ($type === 'string') $func = 'is_string'; + elseif($type === 'int') $func = 'is_int'; + elseif($type === 'numeric') $func = 'is_numeric'; + elseif($type === 'bool') $func = 'is_bool'; + elseif($type === 'func') $func = 'is_callable'; + elseif($type === 'array') $func = 'is_array'; + else { + assert(0); + return true; + } + + $test = call_user_func($func, $value); + if (!$test) { + throw new InvalidArgumentException('Argument should be type ' . $type . + ($nullable? ' or null' : '')); + } + return $test; + } + + public function __get($name) { + if (property_exists($this, $name)) + return $this->$name; + else { + throw new Exception('Unknown property: ' . $name); + } + } + + public function __set($name, $value) { + if ($name === 'auto_link') + $this->set_bool($name, $value); + else if ($name === 'cache') { + $this->set_bool($name, $value); + } + elseif($name === 'cache_age') { + if (self::check_type($value, 'int')) $this->$name = $value; + } + elseif($name === 'failure_tag') { + if (self::check_type($value, 'string', true)) $this->$name = $value; + } + elseif($name === 'format') + $this->set_format($value); + elseif($name === 'html_strict') { + if (self::check_type($value, 'bool')) $this->$name = $value; + } + elseif($name === 'include_javascript' || $name === 'include_jquery') + $this->set_bool($name, $value); + elseif($name === 'line_numbers') + $this->set_bool($name, $value); + elseif($name === 'start_line') + $this->set_start_line($value); + elseif($name === 'highlight_lines') { + if (self::check_type($value, 'array')) + $this->highlight_lines = $value; + } + elseif($name === 'max_height') + $this->set_height($value); + elseif($name === 'relative_root') { + if (self::check_type($value, 'string', true)) $this->$name = $value; + } + elseif($name === 'theme') + $this->set_theme($value); + elseif($name === 'wrap_width') { + if (self::check_type($value, 'int')) $this->$name = $value; + } + elseif($name === 'sql_function') { + if (self::check_type($value, 'func', true)) $this->$name = $value; + } + elseif ($name === 'verbose') { + $this->set_bool($name, $value); + } + else { + throw new Exception('Unknown option: ' . $name); + } + } + + private function set_bool($key, $value) { + if (self::check_type($value, 'bool')) { + $this->$key = $value; + } + } + private function set_string($key, $value, $nullable=false) { + if (self::check_type($value, 'string', $nullable)) { + $this->$key = $value; + } + } + + private function set_start_line($value) { + if (is_numeric($value) && $value > 0) { + $this->start_line = $value; + } else { + throw new InvalidArgumentException('Start line must be a positive number'); + } + } + + private function set_format($value) { + // formatter can either be an instance or an identifier (string) + $is_obj = $value instanceof LuminousFormatter; + if($is_obj || self::check_type($value, 'string', true)) { + // validate the string is a known type + if (!$is_obj && !in_array($value, array('html', 'html-full', + 'html-inline', 'latex', 'none', null), true)) { + throw new Exception('Invalid formatter: ' . $value); + } + else { + $this->format = $value; + } + } + } + + private function set_theme($value) { + if (self::check_type($value, 'string')) { + if (!preg_match('/\.css$/', $value)) $value .= '.css'; + if (!luminous::theme_exists($value)) { + throw new Exception('No such theme: ' + . luminous::root() . '/style/' . $value); + } + else $this->theme = $value; + } + } + + private function set_height($value) { + // height should be either a number or a numeric string with some units at + // the end + if (is_numeric($value) + || (is_string($value) && preg_match('/^\d+/', $value)) + ) { + $this->max_height = $value; + } + else { + throw new InvalidArgumentException('Unrecognised format for height'); + } + } + +} +/// @endcond \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/src/scanners.class.php b/ehcp/net2ftp/plugins/luminous/src/scanners.class.php new file mode 100644 index 0000000..818f512 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/src/scanners.class.php @@ -0,0 +1,221 @@ +scanner lookup table. Scanner is an array with keys: + scanner (the string of the scanner's class name), + file (the path to the file in which its definition resides) + dependencies (the language name for any scanners it this scanner + either depends on or needs to instantiate itself) + */ + + private $default_scanner = null; /**< + Language name of the default scanner to use if none is found + for a particular language */ + + private $descriptions = array(); + + private $resolved_dependencies = array(); + + /** + * Adds a scanner into the table, or overwrites an existing scanner. + * + * \param language_name may be either a string or an array of strings, if + * multiple languages are to use the same scanner + * \param $scanner the name of the LuminousScanner object as string, (not an + * actual instance!). If the file is actually a dummy file (say for includes), + * leave $scanner as \c null. + * \param lang_description a human-readable description of the language. + * \param file the path to the file in which the scanner is defined. + * \param dependencies optional, a string or array of strings representing + * the language names (given in another call to AddScanner, as + * language_name), on which the instantiation of this scanner depends. + * i.e. any super-classes, and any classes which this scanner instantiates + * itself. + * + */ + public function AddScanner($language_name, $scanner, + $lang_description, $file=null, $dependencies=null) + { + + $dummy = $scanner === null; + $d = array(); + if (is_array($dependencies)) + $d = $dependencies; + elseif ($dependencies !== null) + $d = array($dependencies); + + $insert = array('scanner'=>$scanner, + 'file'=>$file, + 'dependencies'=>$d, + 'description'=>$lang_description + ); + if (!is_array($language_name)) + $language_name = array($language_name); + foreach($language_name as $l) { + $this->lookup_table[$l] = $insert; + if (!$dummy) + $this->AddDescription($lang_description, $l); + } + + } + + private function AddDescription($language_name, $language_code) + { + if (!isset($this->descriptions[$language_name])) + $this->descriptions[$language_name] = array(); + $this->descriptions[$language_name][] = $language_code; + } + + + private function UnsetDescription($language_name) + { + foreach($this->descriptions as &$d) + { + foreach($d as $k=>$l) + { + if($l === $language_name) + unset($d[$k]); + } + } + } + + /** + * Removes a scanner from the table + * + * \param language_name may be either a string or an array of strings, each of + * which will be removed from the lookup table. + */ + public function RemoveScanner($language_name) + { + if (is_array($language_name)) + { + foreach($language_name as $l) + { + unset($this->lookup_table[$l]); + $this->UnsetDescription($l); + } + } + else + { + $this->UnsetDescription($language_name); + unset($this->lookup_table[$language_name]); + } + } + + /** + * Sets the default scanner. This is used when none matches a lookup + * \param scanner the LuminousScanner object + */ + public function SetDefaultScanner($scanner) + { + $this->default_scanner = $scanner; + } + + + /** + * Method which retrives the desired scanner array, and + * recursively settles the include dependencies while doing so. + * \param language_name the name under which the gramar was originally indexed + * \param default if true: if the scanner doesn't exist, return the default + * scanner. If false, return false + * \return the scanner-array stored for the given language name + * \internal + * \see LuminousScanners::GetScanner + */ + private function GetScannerArray($language_name, $default=true) + { + $g = null; + if (array_key_exists($language_name, $this->lookup_table)) + $g = $this->lookup_table[$language_name]; + elseif($this->default_scanner !== null && $default === true) + $g = $this->lookup_table[$this->default_scanner]; + + if ($g === null) + return false; + + // Break on circular dependencies. + if (!isset($this->resolved_dependencies[$language_name])) + { + $this->resolved_dependencies[$language_name] = true; + foreach($g['dependencies'] as $d) + { + $this->GetScannerArray($d, $default); + } + if ($g['file'] !== null) + require_once($g['file']); + } + return $g; + } + + + /** + * Returns a scanner for a language + * \param language_name the name under which the gramar was originally indexed + * \param default if true: if the scanner doesn't exist, return the default + * scanner. If false, return false + * \return The scanner, the default scanner, or null. + */ + function GetScanner($language_name, $default=true, $instance=true) + { + $resolved_dependencies = array(); + $g = $this->GetScannerArray($language_name, $default); + $resolved_dependencies = array(); + + if ($g !== false) { + return $instance? new $g['scanner'] : $g['scanner']; + } + return null; + } + + function GetDescription($language_name) { + $resolved_dependencies = array(); + $g = $this->GetScannerArray($language_name, true); + $resolved_dependencies = array(); + if ($g !== false) { + return $g['description']; + } else return null; + } + /** + * Returns a list of known aliases for scanners. + * \return a list, the list is such that each item is itself a list whose + * elements are aliases of the same scanner. eg: + * [ + * ['c', 'cpp'], + * ['java'], + * ['py', 'python'] + * ] + * etc. + * + */ + function ListScanners() + { + $l = $this->descriptions; + return $l; + } + +} + +/// \endcond diff --git a/ehcp/net2ftp/plugins/luminous/src/utils/cssparser.class.php b/ehcp/net2ftp/plugins/luminous/src/utils/cssparser.class.php new file mode 100644 index 0000000..176b410 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/src/utils/cssparser.class.php @@ -0,0 +1,386 @@ + '#f0f8ff', + 'antiquewhite' => '#faebd7', + 'aqua' => '#00ffff', + 'aquamarine' => '#7fffd4', + 'azure' => '#f0ffff', + 'beige' => '#f5f5dc', + 'bisque' => '#ffe4c4', + 'black' => '#000000', + 'blanchedalmond' => '#ffebcd', + 'blue' => '#0000ff', + 'blueviolet' => '#8a2be2', + 'brown' => '#a52a2a', + 'burlywood' => '#deb887', + 'cadetblue' => '#5f9ea0', + 'chartreuse' => '#7fff00', + 'chocolate' => '#d2691e', + 'coral' => '#ff7f50', + 'cornflowerblue' => '#6495ed', + 'cornsilk' => '#fff8dc', + 'crimson' => '#dc143c', + 'cyan' => '#00ffff', + 'darkblue' => '#00008b', + 'darkcyan' => '#008b8b', + 'darkgoldenrod' => '#b8860b', + 'darkgray' => '#a9a9a9', + 'darkgrey' => '#a9a9a9', + 'darkgreen' => '#006400', + 'darkkhaki' => '#bdb76b', + 'darkmagenta' => '#8b008b', + 'darkolivegreen' => '#556b2f', + 'darkorange' => '#ff8c00', + 'darkorchid' => '#9932cc', + 'darkred' => '#8b0000', + 'darksalmon' => '#e9967a', + 'darkseagreen' => '#8fbc8f', + 'darkslateblue' => '#483d8b', + 'darkslategray' => '#2f4f4f', + 'darkslategrey' => '#2f4f4f', + 'darkturquoise' => '#00ced1', + 'darkviolet' => '#9400d3', + 'deeppink' => '#ff1493', + 'deepskyblue' => '#00bfff', + 'dimgray' => '#696969', + 'dimgrey' => '#696969', + 'dodgerblue' => '#1e90ff', + 'firebrick' => '#b22222', + 'floralwhite' => '#fffaf0', + 'forestgreen' => '#228b22', + 'fuchsia' => '#ff00ff', + 'gainsboro' => '#dcdcdc', + 'ghostwhite' => '#f8f8ff', + 'gold' => '#ffd700', + 'goldenrod' => '#daa520', + 'gray' => '#808080', + 'grey' => '#808080', + 'green' => '#008000', + 'greenyellow' => '#adff2f', + 'honeydew' => '#f0fff0', + 'hotpink' => '#ff69b4', + 'indianred' => '#cd5c5c', + 'indigo' => '#4b0082', + 'ivory' => '#fffff0', + 'khaki' => '#f0e68c', + 'lavender' => '#e6e6fa', + 'lavenderblush' => '#fff0f5', + 'lawngreen' => '#7cfc00', + 'lemonchiffon' => '#fffacd', + 'lightblue' => '#add8e6', + 'lightcoral' => '#f08080', + 'lightcyan' => '#e0ffff', + 'lightgoldenrodyellow' => '#fafad2', + 'lightgray' => '#d3d3d3', + 'lightgrey' => '#d3d3d3', + 'lightgreen' => '#90ee90', + 'lightpink' => '#ffb6c1', + 'lightsalmon' => '#ffa07a', + 'lightseagreen' => '#20b2aa', + 'lightskyblue' => '#87cefa', + 'lightslategray' => '#778899', + 'lightslategrey' => '#778899', + 'lightsteelblue' => '#b0c4de', + 'lightyellow' => '#ffffe0', + 'lime' => '#00ff00', + 'limegreen' => '#32cd32', + 'linen' => '#faf0e6', + 'magenta' => '#ff00ff', + 'maroon' => '#800000', + 'mediumaquamarine' => '#66cdaa', + 'mediumblue' => '#0000cd', + 'mediumorchid' => '#ba55d3', + 'mediumpurple' => '#9370d8', + 'mediumseagreen' => '#3cb371', + 'mediumslateblue' => '#7b68ee', + 'mediumspringgreen' => '#00fa9a', + 'mediumturquoise' => '#48d1cc', + 'mediumvioletred' => '#c71585', + 'midnightblue' => '#191970', + 'mintcream' => '#f5fffa', + 'mistyrose' => '#ffe4e1', + 'moccasin' => '#ffe4b5', + 'navajowhite' => '#ffdead', + 'navy' => '#000080', + 'oldlace' => '#fdf5e6', + 'olive' => '#808000', + 'olivedrab' => '#6b8e23', + 'orange' => '#ffa500', + 'orangered' => '#ff4500', + 'orchid' => '#da70d6', + 'palegoldenrod' => '#eee8aa', + 'palegreen' => '#98fb98', + 'paleturquoise' => '#afeeee', + 'palevioletred' => '#d87093', + 'papayawhip' => '#ffefd5', + 'peachpuff' => '#ffdab9', + 'peru' => '#cd853f', + 'pink' => '#ffc0cb', + 'plum' => '#dda0dd', + 'powderblue' => '#b0e0e6', + 'purple' => '#800080', + 'red' => '#ff0000', + 'rosybrown' => '#bc8f8f', + 'royalblue' => '#4169e1', + 'saddlebrown' => '#8b4513', + 'salmon' => '#fa8072', + 'sandybrown' => '#f4a460', + 'seagreen' => '#2e8b57', + 'seashell' => '#fff5ee', + 'sienna' => '#a0522d', + 'silver' => '#c0c0c0', + 'skyblue' => '#87ceeb', + 'slateblue' => '#6a5acd', + 'slategray' => '#708090', + 'slategrey' => '#708090', + 'snow' => '#fffafa', + 'springgreen' => '#00ff7f', + 'steelblue' => '#4682b4', + 'tan' => '#d2b48c', + 'teal' => '#008080', + 'thistle' => '#d8bfd8', + 'tomato' => '#ff6347', + 'turquoise' => '#40e0d0', + 'violet' => '#ee82ee', + 'wheat' => '#f5deb3', + 'white' => '#ffffff', + 'whitesmoke' => '#f5f5f5', + 'yellow' => '#ffff00', + 'yellowgreen' => '#9acd32' +); + + + + +/** + * @brief Simple CSS parser to make theme files portable across output formats. + * + * This is CSS parser for making Luminous themes portable. This is not + * a general CSS parser, but could be with a bit of work! + * + * Parses CSS strings into a map of rules and values. The resulting map is + * a somewhat simplified version of CSS. + * For simplificity we re-map the following properties: + * + * background-color => bgcolor + * font-weight => bold? (bool) + * font-style => italic? (bool) + * text-decoration => underline? OR strikethrough? (bool) + * + * We also drop things like '!important'. + * + * Colours are stored as 6-digit hexadecimal strings with leading #. 3-digit + * hex strings are expanded to their 6-digit equivalents. Named colour aliases + * are replaced with their hex equivalents. + */ +class LuminousCSSParser { + + private $data = array(); + + private static function format_property_value($prop, $value) { + global $luminous_col2hex; + // drop !important + $value = preg_replace('/\s*!important$/', '', $value); + // expand 3-digit hex + if (preg_match('/^#([a-fA-F0-9]{3})$/', $value, $m)) + $value .= $m[1]; + // remove quotes + $value = trim($value); + if (preg_match('/^(["\'])(.*)\\1$/', $value, $m)) $value = $m[2]; + + // now get it into a simpler form: + switch($prop) { + case 'color': + if (isset($luminous_col2hex[$value])) + $value = $luminous_col2hex[$value]; + break; + case 'background-color': + $prop = 'bgcolor'; + if (isset($luminous_col2hex[$value])) + $value = $luminous_col2hex[$value]; + break; + case 'font-weight': + $prop = 'bold'; + $value = in_array($value, array('bold', 'bolder', '700', '800', '900')); + break; + case 'font-style': + $prop = 'italic'; + $value = in_array($value, array('italic', 'oblique')); + case 'text-decoration': + if ($value === 'line-through') { + $prop = 'strikethrough'; + $value = true; + } + elseif($value === 'underline') { + $prop = 'underline'; + $value = true; + } + break; + } + return array($prop, $value); + } + + + private static function format_css_array($css) { + $css_ = array(); + + // now cleanup the array, drop !important + foreach($css as $selector=>$rules) { + $rules_ = array(); + foreach($rules as $prop=>$value) { + list($prop, $value) = self::format_property_value($prop, $value); + $rules_[$prop] = $value; + } + // now split selector by comma + $selectors = preg_split('/\s*,\s*/', $selector); + + foreach($selectors as $s) { + // drop .luminous from the selector + $s = preg_replace('/^\.luminous\s*/', '', $s); + // now we assume that if something is in the form .classname then + // it's probably of interest, ie directly specifying a rule for a + // highlighting calss. + // and if it's not in that form them + // it's probably something else (like a rule for hyperlinks or something) + if (preg_match('/\.([\-\w]+)/', $s, $m)) $s = $m[1]; + else continue; + if (!isset($css_[$s])) $css_[$s] = array(); + $css_[$s] = array_merge($css_[$s], $rules_); + } + } + return $css_; + + } + + /** + * Returns the parsed rules. The rules are an array in the format: + * + * array( + * $rule_name => array($property => $value) + * ) + * + * So, $rules['.comment']['color'] would return the color property of comment + * classes. + */ + function rules() { + return $this->data; + } + + /** + * Returns the value for the given property of the given rule name, or + * returns $default. + * @param $rule_name the CSS rule name, e.g. 'a', '.luminous', etc + * @param $property the property to access, e.g. 'color' + * @param $default the value to return in the case that the rule/proeprty + * was not set. Default: null + */ + function value($rule_name, $property, $default=null) { + if (isset($this->data[$rule_name][$property])) + return $this->data[$rule_name][$property]; + else return $default; + } + + + /** + * Converts a CSS string into a nested map of values. + * See LuminousCSSParser::rules() for the structure. + * @param $string the CSS string + * @returns the rule map + */ + function convert($string) { + $css = self::parse($string); + $data = self::format_css_array($css); + $this->data = $data; + return $data; + } + + private static function parse($string) { + global $luminous_col2hex; + // singleton from usage API + global $luminous_; + $scanner = $luminous_->scanners->GetScanner('css'); + $scanner->string($string); + $scanner->init(); + $scanner->main(); + $tokens = $scanner->token_array(); + + $block = false; + $expect; + $key; + $value; + $selector = ''; + + $css = array(); + // array of selectors => rules, where rules is an array itself of (property, value) + // note this is going to get @font-face wrong, but we don't care about that. + for($i=0; $i pre { + padding-left: 1em; } + .luminous table { + width: 100%; + vertical-align: top; + border-collapse: collapse; + border-spacing: 0; } + .luminous table td { + padding: 0; + margin: 0; + vertical-align: top; } + .luminous table td.code-container { + width: 100%; } + .luminous table .code { + transition-property: padding-left; + transition-duration: 0.2s; + transition-timing-function: ease-in; + -webkit-transition-property: padding-left; + -webkit-transition-duration: 0.2s; + -webkit-transition-timing-function: ease-in; + -moz-transition-property: padding-left; + -moz-transition-duration: 0.2s; + -moz-transition-timing-function: ease-in; + -o-transition-property: padding-left; + -o-transition-duration: 0.2s; + -o-transition-timing-function: ease-in; + -ms-transition-property: padding-left; + -ms-transition-duration: 0.2s; + -ms-transition-timing-function: ease-in; } + .luminous table .code > span { + padding: 0 0 0 1em; + display: block; + transition-property: background-color; + transition-duration: 0.5s; + transition-timing-function: ease-in; + -webkit-transition-property: background-color; + -webkit-transition-duration: 0.5s; + -webkit-transition-timing-function: ease-in; + -moz-transition-property: background-color; + -moz-transition-duration: 0.5s; + -moz-transition-timing-function: ease-in; + -o-transition-property: background-color; + -o-transition-duration: 0.5s; + -o-transition-timing-function: ease-in; + -ms-transition-property: background-color; + -ms-transition-duration: 0.5s; + -ms-transition-timing-function: ease-in; } + .luminous table .line-numbers { + cursor: default; + text-align: center; + overflow: hidden; + max-width: 60px; + transition-property: max-width; + transition-duration: 0.2s; + transition-timing-function: ease-in; + -webkit-transition-property: max-width; + -webkit-transition-duration: 0.2s; + -webkit-transition-timing-function: ease-in; + -moz-transition-property: max-width; + -moz-transition-duration: 0.2s; + -moz-transition-timing-function: ease-in; + -o-transition-property: max-width; + -o-transition-duration: 0.2s; + -o-transition-timing-function: ease-in; + -ms-transition-property: max-width; + -ms-transition-duration: 0.2s; + -ms-transition-timing-function: ease-in; } + .luminous table .line-numbers span { + padding: 0 0.5em; + display: block; } + .luminous table .line-numbers span:nth-child(5n) { + font-weight: bold; } + .luminous table .line-numbers.collapsed { + border: none; + max-width: 0; } + .luminous div { + border-radius: inherit; } + .luminous .line-number-control { + transition-property: left; + transition-duration: 0.2s; + transition-timing-function: ease-in; + -webkit-transition-property: left; + -webkit-transition-duration: 0.2s; + -webkit-transition-timing-function: ease-in; + -moz-transition-property: left; + -moz-transition-duration: 0.2s; + -moz-transition-timing-function: ease-in; + -o-transition-property: left; + -o-transition-duration: 0.2s; + -o-transition-timing-function: ease-in; + -ms-transition-property: left; + -ms-transition-duration: 0.2s; + -ms-transition-timing-function: ease-in; + height: 26px; + width: 18px; + display: block; + position: absolute; + top: 0; + right: 0; + z-index: 1; + cursor: pointer; + background: transparent url(icons/chevron-left.png); } + .luminous .line-number-control.show-line-numbers { + background: transparent url(icons/chevron-right.png); } diff --git a/ehcp/net2ftp/plugins/luminous/style/luminous.scss b/ehcp/net2ftp/plugins/luminous/style/luminous.scss new file mode 100644 index 0000000..e990c80 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/luminous.scss @@ -0,0 +1,138 @@ +// This is the source file for luminous.css +// If you want to edit it, you'll need SASS. +// http://sass-lang.com/ + +@mixin vendor-prefix($property, $value) { + @each $prefix in '', -webkit-, -moz-, -o-, -ms- { + #{$prefix}#{$property} : $value; + } +} + +@mixin transition($properties, $duration: 0.5s, $easing: ease-in) { + @each $prefix in '', -webkit-, -moz-, -o-, -ms- { + #{$prefix}transition-property: $properties; + #{$prefix}transition-duration : $duration; + #{$prefix}transition-timing-function: $easing; + } +} + +.luminous { + + font-size:inherit; + text-align:left; + font-family: "Consolas", "DejaVu Sans Mono", monospace; + overflow: auto; + + border: 2px solid #ddd; + border-radius: 5px; + + position: relative; + + &.inline { + min-width: 1px; + max-width: none; + line-height: normal; + &, div, pre { + padding: 0; + *display: inline; + display: inline-block; + } + pre { + // this would otherwise get 'overflow auto', but auto seems to + // cause it to sit a bit out of line with the text. So does 'hidden'. + // in any case, this shouldn't overflow. + overflow: visible; + } + } + .link { + &, &:visited { + text-decoration: underline; + } + &:hover { + text-decoration: none; + } + } + + + pre { + margin: 0; + padding: 0; + background: transparent none; + font-size: inherit; + font-family: inherit; + width: auto; + } + + // non-line numbered, directly inside the .luminous + & > pre { + padding-left: 1em; + } + + + /* line numbers */ + table { + width: 100%; + vertical-align: top; + border-collapse: collapse; + border-spacing: 0; + td { + padding: 0; + margin: 0; + vertical-align: top; + &.code-container { width: 100%; } + } + + .code { + & > span { + padding: 0 0 0 1em; + display: block; + @include transition(background-color); + } + @include transition(padding-left, 0.2s); + } + .line-numbers { + cursor: default; + text-align: center; + overflow: hidden; + span { + padding: 0 0.5em; + display: block; + &:nth-child(5n) { + font-weight: bold; + } + } + max-width: 60px; + @include transition(max-width, 0.2s); + + &.collapsed { + border: none; + max-width: 0; + } + } + + } + + + div { + border-radius: inherit; + } + + .line-number-control { + @include transition(left, 0.2s); + height: 26px; + width: 18px; + display: block; + position: absolute; + top: 0; + right: 0; + z-index: 1; + cursor: pointer; + // default: line numbers are shown + background: transparent url(icons/chevron-left.png); + &.show-line-numbers { + // override: line numbers are hidden + background: transparent url(icons/chevron-right.png); + } + } + +} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/style/luminous_dark.css b/ehcp/net2ftp/plugins/luminous/style/luminous_dark.css new file mode 100644 index 0000000..f44fcf0 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/luminous_dark.css @@ -0,0 +1,114 @@ +.luminous { border-color: #444; } + +.luminous .character{color:#FF69B4 !important;} + +.luminous .comment{color:gray !important; font-style:italic !important;} + +/* NOTE: TODO: etc. */ +.luminous .comment_note{background-color:#E0FE37 !important; +color:black !important; +font-style:normal !important;} +.luminous .constant{color:#0073AD !important; font-weight:bold !important;} +.luminous .delimiter{ font-weight:bold !important;} +.luminous .esc{color:#478CA3 !important;} +.luminous .function{color:#99D1FF !important;} +.luminous .heredoc{color:#FF6767 !important;} +.luminous .htmltag{font-weight:bold !important; color:#66FFCC !important;} +.luminous .keyword{font-weight:bold !important; color:#00FF00 !important;} +.luminous .numeric {color:#B1B1FF !important;} +.luminous .operator{color:#68FF68 !important;} +.luminous .obj{color: #DCDCDC !important;} +.luminous .oo{color:#C0FFFF !important;} +.luminous .preprocessor{color:#DA1FDA !important;} +.luminous .shebang{font-weight:bold !important; font-style:normal !important; color:#C0FFC0 !important;} +.luminous .string{color:#FF6767 !important;} +.luminous .type{color:#5CA0E4 !important;} +/* not used*/ +.luminous .user_function{color: #0083E1 !important; font-weight:bold !important;} +.luminous .value{color:green !important;} +.luminous .variable{color:#8989A9 !important;} + +.luminous .doccomment{color:#008100 !important;} +.luminous .doctag {color:#CA60CA !important;} +.luminous .docstr {color:#FF6767 !important;} +.luminous .docproperty{color:#0095FF !important; font-weight:bold !important;} + +.luminous .diff_header_new{color:green !important;} +.luminous .diff_header_old{color:red !important;} +.luminous .diff_range{color:#B1B1FF !important;} +.luminous .diff_old{color:#AF0000 !important;} +.luminous .diff_new{color:#00AF00 !important;} + +.luminous .lang_latex{color:#B1B1FF !important;} +.luminous .latex_function{color:#FF6767 !important; font-weight:normal !important;} +.luminous .latex_operator{color:#676CFF !important;} + +.luminous .make_target{color:magenta !important;} +.luminous .make_dep{color: #B1B1FF !important;} + +.luminous .regex{color:#BE7CFF !important;} +.luminous .regex_subpattern{font-weight:bold !important; color:#FF6767 !important;} +.luminous .regex_class_marker{color:#0083E1 !important; font-weight:bold !important;} +.luminous .regex_subpattern_marker{color:green !important; font-weight:bold !important;} +.luminous .regex_repeat_marker {color:#B1B1FF !important;} +.luminous .regex_operator{color:green !important;} + +/* Specific to the whitespace language */ +.luminous .whitespace_space{background-color:#FF5151 !important;} +.luminous .whitespace_tab{background-color:#A1B6FF !important;} + +.luminous .link, .luminous .link:visited +{ + color:#00AAAA !important; +} +.luminous .link:hover +{ + color:#00AA00 !important; +} + +/* line numbers */ +.luminous .line-numbers { + background-color:#1E1E1E !important; + border-right:1px solid #5F5F5F !important; + color:#BCFFBC !important; +} + + +.luminous +{ + background-color:#1E1E1E !important; + color:#FFFDCC !important; +} + +.luminous .code.numbered > span:nth-child(2n) +{ + background-color: #232323; +} + +.luminous .code .highlight +{ + background-color:#404040; +} + +.luminous .code.numbered .highlight:nth-child(2n) +{ + background-color:#454545; +} + +/* this stuff has to come after the other rules because it will probably + * override some of them + */ +.luminous .diff_old{ + background-color:#7C4543 !important; + background-color: rgba(232, 87, 82, 0.35) !important; + color: white !important; +} +.luminous .diff_new{ + background-color:#3F612C !important; + background-color: rgba(0, 191, 0, 0.35) !important; + color: white !important; +} +.luminous .diff_unchanged, .luminous .diff_unchanged * { + color: #888A85 !important; + background-color: transparent !important; +} diff --git a/ehcp/net2ftp/plugins/luminous/style/luminous_light.css b/ehcp/net2ftp/plugins/luminous/style/luminous_light.css new file mode 100644 index 0000000..2f84fcd --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/luminous_light.css @@ -0,0 +1,163 @@ +.luminous .character{color:#FF69B4 !important;} + +.luminous .comment{color:gray !important; font-style:italic !important;} + +/* NOTE: TODO: etc. */ +.luminous .comment_note{ + background-color:#FFB2B0 !important; + background-color:rgba(255, 178, 176, 0.70) !important; + color:black !important; + font-style:normal !important;} +.luminous .constant{color:#0073AD !important; font-weight:bold !important;} +.luminous .esc{color:#057CA3 !important;} +.luminous .function{color:purple !important;} +.luminous .heredoc{color:red !important; + background-color:#FFF8F8 !important; + background-color:rgba(255, 248, 248, 0.20) !important; + + +} +.luminous .htmltag{font-weight:bold !important; color:purple !important;} +.luminous .keyword{font-weight:bold !important; color:#0066FF !important;} +.luminous .numeric {color:blue !important;} +.luminous .operator{color:#0000BF !important;} + +.luminous .oo{color:#339900 !important;} +.luminous .obj{color:#3366FF !important;} +.luminous .preprocessor{color:green !important;} +.luminous .shebang{font-weight:bold !important; font-style:normal !important; color:purple !important;} +.luminous .string{color:red !important; + background-color:#FFF8F8 !important; + background-color:rgba(255, 157, 157, 0.20) !important; + +} +.luminous .type{color:#0057AE !important;} +/* not used*/ +.luminous .user_function{color: #000099 !important; font-weight:bold !important;} +.luminous .value{color:green !important;} +.luminous .variable{color:#4545A9 !important;} + +.luminous .doccomment{color:blue !important;} +.luminous .doctag {color:#CA60CA !important;} +.luminous .docstr {color:red !important;} +.luminous .docproperty{color:#0095FF !important; font-weight:bold !important;} + + + +.luminous .lang_latex{color:blue !important;} +.luminous .latex_function{color:red !important; font-weight:normal !important;} +.luminous .latex_operator{color:black !important;} + +.luminous .make_target{color:magenta !important;} +.luminous .make_dep{color: blue !important;} + +.luminous .regex{color:#8000FF !important; + background-color:#F9F3FF !important; + background-color:rgba(231, 206, 255, 0.20) !important; +} +.luminous .regex_subpattern{font-weight:bold !important; color:black !important;} +.luminous .regex_class_marker{color:#0083E1 !important; font-weight:bold !important;} +.luminous .regex_subpattern_marker{color:green !important; font-weight:bold !important;} +.luminous .regex_repeat_marker {color:blue !important;} +.luminous .regex_operator{color:green !important;} + +/* Specific to the whitespace language */ +.luminous .whitespace_space{background-color:#FF5151 !important;} +.luminous .whitespace_tab{background-color:#A1B6FF !important;} + + + + +.luminous .diff_header_new{color:green !important;} +.luminous .diff_header_old{color:red !important;} +.luminous .diff_range{color:blue !important;} +.luminous .diff_old{background-color:#FFBFBF !important; + background-color: rgba(255, 191, 191, 0.5) !important; +} +.luminous .diff_new{background-color:#BFFFBF !important; + background-color: rgba(191, 255, 191, 0.5) !important; +} +.luminous .diff_unchanged{ + color: #888888 !important; + +} + +.luminous .diff_unchanged * { + background-color: transparent !important; + color: #888888 !important; +} + + +.luminous .xml { + color: #666 !important; +} +.luminous .xml * { + color: black !important; +} +.luminous .xml .type { + color: #2C72C7 !important; +} +.luminous .xml .htmltag { + color: #00892C !important; +/* font-weight: normal !important; */ +} +.luminous .xml .string { + color: #0057AE !important; +} +.luminous .xml .comment { + color: gray !important; +} + + +.luminous .interpolation * { + background-color: transparent !important; +} +.luminous .interpolation { + font-style: italic; + background-color: rgba(30, 80, 200, 0.1); +} + +.luminous .delimiter { + font-weight:bold; + color: #644A9B; +} + + +.luminous .code +{ + background-color: #FCFCFC !important; +} + +.luminous a.link, .luminous a.link:visited +{ + color:blue !important; +} + +/* line numbers */ +.luminous .line-numbers{ + color:black !important; + background-color:#e0e0e0 !important; + border-right:1px solid black !important; +} +.luminous +{ + color:black !important; + border-color: #999; + background-color: #fff; +} + + + +.luminous .code.numbered > span:nth-child(2n) +{ + background-color:#F3F3F3; +} + +.luminous .code .highlight +{ + background-color:#DFDEF6; +} +.luminous .code.numbered .highlight:nth-child(2n) +{ + background-color:#DFDEF6; +} diff --git a/ehcp/net2ftp/plugins/luminous/style/luminous_print.css b/ehcp/net2ftp/plugins/luminous/style/luminous_print.css new file mode 100644 index 0000000..68d38c6 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/luminous_print.css @@ -0,0 +1,37 @@ +/* + * Here we override some CSS to make a Luminous object more print-friendly. + * as well as some layout, we override a few colours of the light theme. + * This is because some colours do not print well (grey comments => green) + * and boldness appears to be dropped from keywords, thereby removing all their + * highlighting (these are changed to a purple colour) + */ + +/* body {padding:0px !important; margin:0px !important;} */ +div.luminous .metabar_buttons, div.luminous .metabar_fixed +{ + display:none !important; + visibility:hidden !important; +} + +div.luminous, .luminous .code, .luminous .line_numbers +{ + height:auto !important; +} +.luminous pre.code, .luminous pre.line_numbers { + overflow:visible !important; + max-height:none !important; +} + +div.luminous .comment{color:green !important;} +div.luminous .keyword {} +div.luminous table.code_container{height:auto !important;} +div.luminous div.code_container{max-height:none !important; + overflow:visible !important; + height:auto !important; +} +table.code_container {padding:0px !important; +border-collapse:collapse; +} +td {padding: 0px !important;} +td.lineno {border-right:1px solid black; } +td.code { padding-left: 1em !important;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/style/paradise.css b/ehcp/net2ftp/plugins/luminous/style/paradise.css new file mode 100644 index 0000000..074518b --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/paradise.css @@ -0,0 +1,130 @@ +/* + * Based on the 'Birds of Paradise' theme + * http://joebergantine.com/werkstatt/birds-of-paradise + */ + + + .luminous { border-color: #666; } + +.luminous .character{color:#DCA3A3;} +.luminous .comment{color:#8F6843; font-style:italic;} +.luminous .comment_note{color:#D24421; +font-style:normal; font-weight:bold;} +.luminous .constant{color:#EFAC32; font-weight:bold;} +.luminous .delimiter{ font-weight:bold;} +.luminous .esc{color:#FFFF00 ;} +.luminous .function{color:#EFAC32;} +.luminous .heredoc{color:#D9D762;} +.luminous .htmltag{font-weight:bold; color:#EFCB43;} +.luminous .keyword{font-weight:bold; color:#EF5D32; } +.luminous .numeric {color:#6C99BB;} +.luminous .operator{color:#F68895;} +.luminous .obj{color:#8E83BD;} +.luminous .oo{} +.luminous .preprocessor{color:#FF9D5B;} +.luminous .shebang{font-weight:bold; font-style:normal; +color:#FFFFFF;} +.luminous .string{color:#D9D762;} +.luminous .type{color:#EFAC32; } +.luminous .user_function{color: #FFE432; font-weight:bold;} +.luminous .value{color:#FF9074;} +.luminous .variable{color:#7DAF9C;} + +/* italicised because otherwise it seems to blend into the rest of the + * source too much */ +.luminous .doccomment{color:#D2D2D2; font-style:italic;} +.luminous .doctag {color:#C6D25A;} +.luminous .docstr {color:#FF9B9B;} +.luminous .docproperty{color:#D2B777; font-weight:bold;} + +.luminous .diff_header_new{background-color:#2F33AB;} +.luminous .diff_header_old{background-color:#2F33AB;} +.luminous .diff_range{background-color:#2F33AB;} + + + +/* .luminous .lang_latex{color:#b1b1ff;} */ +.luminous .latex_function{color:#FFDCA8;} +.luminous .latex_operator{color:#888888;} + +.luminous .code {} + +.luminous .long_delim{font-weight:bold;} + + +.luminous .generics{color:#adff5a;} + + + +.luminous .regex{color:#A19BE9;} +.luminous .regex_subpattern{font-weight:bold; +color:#B383ED;} +.luminous .regex_class_marker{color:#7CB7E1; font-weight:bold;} +.luminous .regex_subpattern_marker{color:#D684EE; +font-weight:bold;} +.luminous .regex_repeat_marker{color:#b1b1ff;} +.luminous .regex_operator{color:#8FC08F;} + +.luminous .make_target{color:#FFD5FF;} +.luminous .make_dep{color: #b1b1ff;} + +.luminous .whitespace_space{background-color:#C877A5;} +.luminous .whitespace_tab{background-color:#7D85D1;} + +.luminous .link, .luminous .link:visited +{ + color:#FFC0FF; +} +.luminous .link:hover +{ + color:#FFC0FF; +} + +/* line numbers */ +.luminous .line-numbers { + background-color:#3E2C29; + border-right:1px solid #F5AEA3; + color: #CA7A2A; +} + + +.luminous +{ + background-color:#322323; + color:#E6E1C4; +} + + + +.luminous .code.numbered > span:nth-child(2n) +{ + background-color: #3E2C29; +} + +.luminous .code .highlight +{ + background-color:#1F1611; +} + +.luminous .code.numbered .highlight:nth-child(2n) +{ + background-color: #1F1611; +} + +/* this stuff has to come after the other rules because it will probably + * override some of them + */ +.luminous .diff_old{ + background-color:#660000; + background-color: rgba(232, 87, 82, 0.35); + color: #E6E1DC; +} +.luminous .diff_new{ + background-color:#144212; + background-color: rgba(0, 191, 0, 0.35); + color: #E6E1DC; +} +.luminous .diff_unchanged, .luminous .diff_unchanged * { + color: #888A85; + background-color: transparent; +} diff --git a/ehcp/net2ftp/plugins/luminous/style/soft.css b/ehcp/net2ftp/plugins/luminous/style/soft.css new file mode 100644 index 0000000..47decf8 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/soft.css @@ -0,0 +1,125 @@ + +.luminous .character{color:#FF69B4 !important;} + +.luminous .comment{color:#CC9999 !important; font-style:italic !important;} + +/* NOTE: TODO: etc. */ +.luminous .comment_note{ + background-color:#FFB2B0 !important; + background-color:rgba(255, 178, 176, 0.70) !important; + color:black !important; + font-style:normal !important;} +.luminous .constant{color:#0073AD !important; font-weight:bold !important;} +.luminous .delimiter{ font-weight:bold !important;} +.luminous .esc{color:#057CA3 !important;} +.luminous .function{color:#CC3399 !important;} + +.luminous .htmltag{font-weight:bold !important; color:#006633 !important;} +.luminous .keyword{font-weight:bold !important; color:#6666CC !important;} +.luminous .numeric {color:#0099FF !important;} +.luminous .operator{color:green !important;} + +.luminous .oo{color:#339900 !important;} +.luminous .obj{color:#3366FF !important;} +.luminous .preprocessor{color:#9999CC !important;} +.luminous .shebang{font-weight:bold !important; font-style:normal !important; color:purple !important;} +.luminous .string, .luminous .heredoc{color:#339966 !important; + /* background-color:#FFF8F8 !important; + background-color:rgba(255, 157, 157, 0.20) !important;*/ + +} +.luminous .type{color:#0057AE !important;} +/* not used*/ +.luminous .user_function{color: #0083E1 !important; font-weight:bold !important;} +.luminous .value{color:green !important;} +.luminous .variable{color:#4545A9 !important;} + +.luminous .doccomment{color:#9999CC !important;} +.luminous .doctag {color:#CA60CA !important;} +.luminous .docstr {color:#339966 !important;} +.luminous .docproperty{color:#0095FF !important; font-weight:bold !important;} + +.luminous .diff_header_new{color:green !important;} +.luminous .diff_header_old{color:red !important;} +.luminous .diff_range{color:blue !important;} + + +.luminous .lang_latex{color:blue !important;} +.luminous .latex_function{color:red !important; font-weight:normal !important;} +.luminous .latex_operator{color:black !important;} + +.luminous .make_target{color:#CC00FF !important;} +.luminous .make_dep{color: blue !important;} + +.luminous .regex{color:#8000FF !important; + background-color:#F9F3FF !important; + background-color:rgba(231, 206, 255, 0.20) !important; +} +.luminous .regex_subpattern{font-weight:bold !important; color:black !important;} +.luminous .regex_class_marker{color:#0083E1 !important; font-weight:bold !important;} +.luminous .regex_subpattern_marker{color:green !important; font-weight:bold !important;} +.luminous .regex_repeat_marker {color:blue !important;} +.luminous .regex_operator{color:green !important;} + +/* Specific to the whitespace language */ +.luminous .whitespace_space{background-color:#FF5151 !important;} +.luminous .whitespace_tab{background-color:#A1B6FF !important;} + + +/* line numbers */ +.luminous .line-numbers{ + background-color:#F3EEFF !important; + border-right:1px solid #BED6E1 !important; + color: #000066 !important; +} +.luminous .code +{ + background-color: #F3EEFF !important; + color: #000066 !important; +} + +.luminous a.link, .luminous a.link:visited +{ + color:blue !important; +} + + +.luminous +{ + background-color: #fff; + color:black !important; +} + + + +.luminous .code.numbered > span:nth-child(2n) +{ + background-color:#FAF8FF; +} + +.luminous .code .highlight +{ + background-color:#BED6E1; +} +.luminous .code.numbered .highlight:nth-child(2n) +{ + background-color:#BED6E1; +} + +/* this stuff has to come after the other rules because it will probably + * override some of them + */ +.luminous .diff_old{ + background-color:#E2AEC1 !important; + background-color: rgba(226, 174, 193, 0.65) !important; + color: #666 !important; +} +.luminous .diff_new{ + background-color:#B7E2C6 !important; + background-color: rgba(156, 226, 181, 0.65) !important; + color: #666 !important; +} +.luminous .diff_unchanged, .luminous .diff_unchanged * { + color: #888A85 !important; + background-color: transparent !important; +} diff --git a/ehcp/net2ftp/plugins/luminous/style/zenophilia.css b/ehcp/net2ftp/plugins/luminous/style/zenophilia.css new file mode 100644 index 0000000..81dd5b1 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/style/zenophilia.css @@ -0,0 +1,141 @@ +/* + * Copyright 2010 Mark Watkinson + * + * This file is part of Luminous. + * + * Luminous is free software: you can redistribute it and/or + * modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Luminous is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Luminous. If not, see . + * + */ + + +/* + * Based on the Zenburn theme. + * Colours largely taken from: + https://spreadsheets.google.com/ccc?key=pKLGtBDTfcpZoRtJFr_eeAg&hl=en#gid=0 + */ +.luminous { border-color: #555; } +.luminous .character{color:#DCA3A3 !important;} +.luminous .comment{color:#7F9F7F !important;} +.luminous .comment_note{color:#DFDFDF !important; + font-style:normal !important; font-weight:bold !important;} +.luminous .constant{color:#DCA3A3; font-weight:bold !important;} +.luminous .delimiter{ font-weight:bold !important;} +.luminous .esc{color:#478ca3 !important;} +.luminous .function{color:#efef8f !important;} +.luminous .heredoc{color:#cc9393 !important;} +.luminous .htmltag{font-weight:bold !important; color:#e89393 !important;} +.luminous .keyword{font-weight:bold !important; color:#f0dfaf !important; } +.luminous .numeric {color:#8cd0d3 !important;} +.luminous .operator{color:#888888 !important;} +.luminous .obj{color:#dfdfbf !important;} +.luminous .oo{} +.luminous .preprocessor{color:#ffcfaf !important;} +.luminous .shebang{font-weight:bold !important; font-style:normal !important; + color:#c0ffc0 !important;} +.luminous .string{color:#cc9393;} +.luminous .type{color:#dfdfbf !important; } +.luminous .user_function{color: #BAAD88 !important; font-weight:bold !important;} +.luminous .value{color:#C0FFFF !important;} +.luminous .variable{color:#f0dfaf !important;} + +.luminous .doccomment{color:#82a282 !important;} +.luminous .doctag {color:#d7afaf !important;} +.luminous .docstr {color:#FF9B9B !important;} +.luminous .docproperty{color:#FFFF87 !important; font-weight:bold !important;} + +.luminous .diff_header_new{color:#D7D7AF !important;} +.luminous .diff_header_old{color:#D7D7AF !important;} +.luminous .diff_range{color:#D7D7AF !important; } +.luminous .diff_old{color:#D7AFAF !important;} +.luminous .diff_new{color:#FFD7AF !important;} + + +/* .luminous .lang_latex{color:#b1b1ff;} */ +.luminous .latex_function{color:#FFDCA8 !important;} +.luminous .latex_operator{color:#888888 !important;} + +.luminous .code {} + +.luminous .long_delim{font-weight:bold !important;} + + +.luminous .generics{color:#adff5a !important;} + + + +.luminous .regex{color:#E6CDFF !important;} +.luminous .regex_subpattern{font-weight:bold !important; + color:#FF8D8D !important;} +.luminous .regex_class_marker{color:#7CB7E1; font-weight:bold;} +.luminous .regex_subpattern_marker{color:#8FC08F !important; + font-weight:bold !important;} +.luminous .regex_repeat_marker{color:#b1b1ff !important;} +.luminous .regex_operator{color:#8FC08F !important;} + +.luminous .make_target{color:#FFD5FF !important;} +.luminous .make_dep{color: #b1b1ff !important;} + +.luminous .whitespace_space{background-color:#ff5151 !important;} +.luminous .whitespace_tab{background-color:#a1b6ff !important;} + +.luminous .link, .luminous .link:visited +{ + color:#C0FFC0 !important; +} +.luminous .link:hover +{ + color:#FFC0FF !important; +} + +/* line numbers */ +.luminous .line-numbers { + background-color:#444444 !important; + border-right:1px solid #5F5F5F !important; + color: #A8A8A8 !important; +} + + +.luminous { + background-color:#3a3a3a !important; + color:#DCDCCC !important; +} + +.luminous .code.numbered > span:nth-child(2n) { + background-color: #404040; +} + +.luminous .code .highlight +{ + background-color:#6D6D6D; +} +.luminous .code.numbered .highlight:nth-child(2n) { + background-color: #6D6D6D ; +} + +/* this stuff has to come after the other rules because it will probably + * override some of them + */ +.luminous .diff_old{ + background-color:#7C4543 !important; + background-color: rgba(232, 87, 82, 0.15) !important; +} +.luminous .diff_new{ + background-color:#3F612C !important; + background-color: rgba(128, 251, 120, 0.15) !important; +} +.luminous .diff_unchanged, .luminous .diff_unchanged * { + color: #888A85 !important; + background-color: transparent !important; +} diff --git a/ehcp/net2ftp/plugins/luminous/supported.php b/ehcp/net2ftp/plugins/luminous/supported.php new file mode 100644 index 0000000..69c0001 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/supported.php @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + $codes) { ?> + + + + + + + +
        LanguageValid Codes
        + + \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/luminous/versioncheck.php b/ehcp/net2ftp/plugins/luminous/versioncheck.php new file mode 100644 index 0000000..3665a77 --- /dev/null +++ b/ehcp/net2ftp/plugins/luminous/versioncheck.php @@ -0,0 +1,58 @@ +$url"; +} + +function _echo($string) { + echo wordwrap($string, 79) . "\n"; +} + +if (!$cmd_line) _echo('
        ');
        +
        +if ($version === 'master') {
        +  _echo('You are using a development version, I cannot check how up to date it is.');
        +  _echo('You can download the latest stable release from '
        +    . urlify($DOWNLOAD_URL));
        +}
        +else {
        +  _echo('Checking version...');
        +
        +  $ch = curl_init();
        +  curl_setopt($ch, CURLOPT_URL, $URL);
        +  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        +  curl_setopt($ch, CURLOPT_USERAGENT, 'Luminous ' . LUMINOUS_VERSION 
        +    . ' version check');
        +  $json = curl_exec($ch);
        +  curl_close($ch);
        +
        +  if (!$json) {
        +    _echo('Remote request failed. Try again later or visit '
        +      . urlify($DOWNLOAD_URL) . ' to see what the latest version is');
        +  } else {
        +    $data = json_decode($json, true);
        +    if ($data['release_number'] === $version || 'v' . $data['release_number'] === $version) {
        +      _echo('You are up to date!');
        +    } else {
        +      $output = "You are not up to date: your version is " . $version
        +        . " and the most recent release is " . $data['release_number']
        +        . ", released " . $data['release_date'] . '. '
        +        . ' Visit ' . urlify($DOWNLOAD_URL) . ' to upgrade';
        +      _echo($output);
        +    }
        +  }
        +}
        +if (!$cmd_line) _echo('
        '); diff --git a/ehcp/net2ftp/plugins/plugins.inc.php b/ehcp/net2ftp/plugins/plugins.inc.php new file mode 100644 index 0000000..35193be --- /dev/null +++ b/ehcp/net2ftp/plugins/plugins.inc.php @@ -0,0 +1,636 @@ +\n"; + $pluginProperties["ckeditor"]["printCss"] = ""; + $pluginProperties["ckeditor"]["printBodyOnload"] = ""; + $pluginProperties["ckeditor"]["printBodyOnload"] .= " CKEDITOR.replace( 'text_splitted[middle]' );\n"; + $pluginProperties["ckeditor"]["printBodyOnload"] .= " CKEDITOR.config.language = '" . $ckeditor_language . "';\n"; + $pluginProperties["ckeditor"]["printBodyOnload"] .= " CKEDITOR.config.contentsLangDirection = '" . __("ltr") . "';\n"; + $pluginProperties["ckeditor"]["printBodyOnload"] .= " CKEDITOR.config.height = 400;\n"; + +// ------------------------------------------------------------------------- +// TinyMCE - http://tinymce.moxiecode.com/ +// An HTML editor +// ------------------------------------------------------------------------- + +// Language code (see /plugins/tinymce/lang) + if ($net2ftp_globals["language"] == "ar") { $tinymce_language = "ar"; } + if ($net2ftp_globals["language"] == "ar-utf") { $tinymce_language = "ar"; } + elseif ($net2ftp_globals["language"] == "cs") { $tinymce_language = "cs"; } + elseif ($net2ftp_globals["language"] == "da") { $tinymce_language = "da"; } + elseif ($net2ftp_globals["language"] == "de") { $tinymce_language = "de"; } + elseif ($net2ftp_globals["language"] == "es") { $tinymce_language = "es"; } + elseif ($net2ftp_globals["language"] == "fi") { $tinymce_language = "fi"; } + elseif ($net2ftp_globals["language"] == "fr") { $tinymce_language = "fr"; } + elseif ($net2ftp_globals["language"] == "he") { $tinymce_language = "he"; } + elseif ($net2ftp_globals["language"] == "hu") { $tinymce_language = "hu"; } + elseif ($net2ftp_globals["language"] == "hu-utf") { $tinymce_language = "hu"; } + elseif ($net2ftp_globals["language"] == "it") { $tinymce_language = "it"; } + elseif ($net2ftp_globals["language"] == "ja") { $tinymce_language = "ja"; } + elseif ($net2ftp_globals["language"] == "nl") { $tinymce_language = "nl"; } + elseif ($net2ftp_globals["language"] == "pl") { $tinymce_language = "pl"; } + elseif ($net2ftp_globals["language"] == "pt") { $tinymce_language = "pt"; } + elseif ($net2ftp_globals["language"] == "ru") { $tinymce_language = "ru"; } + elseif ($net2ftp_globals["language"] == "sv") { $tinymce_language = "sv"; } + elseif ($net2ftp_globals["language"] == "tc") { $tinymce_language = "zh-tw"; } + elseif ($net2ftp_globals["language"] == "tr") { $tinymce_language = "tr"; } + elseif ($net2ftp_globals["language"] == "ua") { $tinymce_language = "ru"; } + elseif ($net2ftp_globals["language"] == "vi") { $tinymce_language = "vi"; } + elseif ($net2ftp_globals["language"] == "zh") { $tinymce_language = "zh-cn"; } + else { $tinymce_language = "en"; } + + $pluginProperties["tinymce"]["use"] = "yes"; + $pluginProperties["tinymce"]["label"] = "TinyMCE (WYSIWYG)"; + $pluginProperties["tinymce"]["directory"] = "tinymce"; + $pluginProperties["tinymce"]["type"] = "textarea"; + $pluginProperties["tinymce"]["browsers"][1] = "IE"; + $pluginProperties["tinymce"]["browsers"][2] = "Chrome"; + $pluginProperties["tinymce"]["browsers"][3] = "Safari"; + $pluginProperties["tinymce"]["browsers"][4] = "Opera"; + $pluginProperties["tinymce"]["browsers"][5] = "Mozilla"; + $pluginProperties["tinymce"]["browsers"][6] = "Other"; + $pluginProperties["tinymce"]["filename_extensions"][1] = "html"; + $pluginProperties["tinymce"]["includePhpFiles"][1] = ""; + $pluginProperties["tinymce"]["printJavascript"] = "\n"; + $pluginProperties["tinymce"]["printJavascript"] .= "\n"; + $pluginProperties["tinymce"]["printCss"] = ""; + $pluginProperties["tinymce"]["printBodyOnload"] = ""; + + +// ------------------------------------------------------------------------- +// Ace +// A syntax highlighting text editor in javascript +// ------------------------------------------------------------------------- + + $pluginProperties["ace"]["use"] = "yes"; + $pluginProperties["ace"]["label"] = "Ace (code editor)"; + $pluginProperties["ace"]["directory"] = "ace"; + $pluginProperties["ace"]["type"] = "textarea"; + $pluginProperties["ace"]["browsers"][1] = "IE"; + $pluginProperties["ace"]["browsers"][2] = "Chrome"; + $pluginProperties["ace"]["browsers"][3] = "Safari"; + $pluginProperties["ace"]["browsers"][4] = "Opera"; + $pluginProperties["ace"]["browsers"][5] = "Mozilla"; + $pluginProperties["ace"]["browsers"][6] = "Other"; + $pluginProperties["ace"]["filename_extensions"][1] = "asp"; + $pluginProperties["ace"]["filename_extensions"][2] = "css"; + $pluginProperties["ace"]["filename_extensions"][3] = "cgi"; + $pluginProperties["ace"]["filename_extensions"][4] = "htm"; + $pluginProperties["ace"]["filename_extensions"][5] = "html"; + $pluginProperties["ace"]["filename_extensions"][6] = "java"; + $pluginProperties["ace"]["filename_extensions"][7] = "javascript"; + $pluginProperties["ace"]["filename_extensions"][8] = "js"; + $pluginProperties["ace"]["filename_extensions"][9] = "pl"; + $pluginProperties["ace"]["filename_extensions"][10] = "perl"; + $pluginProperties["ace"]["filename_extensions"][11] = "php"; + $pluginProperties["ace"]["filename_extensions"][12] = "phps"; + $pluginProperties["ace"]["filename_extensions"][13] = "phtml"; + $pluginProperties["ace"]["filename_extensions"][14] = "ruby"; + $pluginProperties["ace"]["filename_extensions"][15] = "sql"; + $pluginProperties["ace"]["filename_extensions"][16] = "txt"; + $pluginProperties["ace"]["includePhpFiles"][1] = ""; + $pluginProperties["ace"]["printJavascript"] = "\n"; + $pluginProperties["ace"]["printCss"] = ""; + $pluginProperties["ace"]["printBodyOnload"] = ""; + + + +// ------------------------------------------------------------------------- +// Version Checker - written by Slynderdale for net2ftp. +// This small Javascript function will check if a new version of net2ftp is available +// and display a message if there is. +// ------------------------------------------------------------------------- + + $pluginProperties["versioncheck"]["use"] = "yes"; + $pluginProperties["versioncheck"]["label"] = "Javascript Version Checker"; + $pluginProperties["versioncheck"]["directory"] = "versioncheck"; + $pluginProperties["versioncheck"]["type"] = "versioncheck"; + $pluginProperties["versioncheck"]["browsers"][1] = "IE"; + $pluginProperties["versioncheck"]["browsers"][2] = "Chrome"; + $pluginProperties["versioncheck"]["browsers"][3] = "Safari"; + $pluginProperties["versioncheck"]["browsers"][4] = "Opera"; + $pluginProperties["versioncheck"]["browsers"][5] = "Mozilla"; + $pluginProperties["versioncheck"]["browsers"][6] = "Other"; + $pluginProperties["versioncheck"]["filename_extensions"][1] = ""; + $pluginProperties["versioncheck"]["includePhpFiles"][1] = ""; + $pluginProperties["versioncheck"]["printJavascript"] = "\n"; + $pluginProperties["versioncheck"]["printCss"] = ""; + $pluginProperties["versioncheck"]["printBodyOnload"] = ""; + + +// ------------------------------------------------------------------------- +// The JS Calendar code is written by Mishoo (who also wrote the HTMLArea v3). +// http://dynarch.com/mishoo/calendar.epl +// ------------------------------------------------------------------------- + +// Language code (see /plugins/jscalendar/lang) + if ($net2ftp_globals["language"] == "cs") { $jscalendar_language = "calendar-cs-win"; } + elseif ($net2ftp_globals["language"] == "da") { $jscalendar_language = "calendar-da"; } + elseif ($net2ftp_globals["language"] == "de") { $jscalendar_language = "calendar-de"; } + elseif ($net2ftp_globals["language"] == "es") { $jscalendar_language = "calendar-es"; } + elseif ($net2ftp_globals["language"] == "fi") { $jscalendar_language = "calendar-fi"; } + elseif ($net2ftp_globals["language"] == "fr") { $jscalendar_language = "calendar-fr"; } + elseif ($net2ftp_globals["language"] == "he") { $jscalendar_language = "calendar-he-utf8.js"; } + elseif ($net2ftp_globals["language"] == "it") { $jscalendar_language = "calendar-it"; } + elseif ($net2ftp_globals["language"] == "ja") { $jscalendar_language = "calendar-jp"; } + elseif ($net2ftp_globals["language"] == "nl") { $jscalendar_language = "calendar-nl"; } + elseif ($net2ftp_globals["language"] == "pl") { $jscalendar_language = "calendar-pl"; } + elseif ($net2ftp_globals["language"] == "pt") { $jscalendar_language = "calendar-pt"; } + elseif ($net2ftp_globals["language"] == "ru") { $jscalendar_language = "calendar-ru"; } + elseif ($net2ftp_globals["language"] == "sv") { $jscalendar_language = "calendar-sv"; } + elseif ($net2ftp_globals["language"] == "tr") { $jscalendar_language = "calendar-tr"; } + elseif ($net2ftp_globals["language"] == "tc") { $jscalendar_language = "calendar-big5.js"; } + elseif ($net2ftp_globals["language"] == "zh") { $jscalendar_language = "calendar-zh"; } + else { $jscalendar_language = "calendar-en"; } + + $pluginProperties["jscalendar"]["use"] = "yes"; + $pluginProperties["jscalendar"]["label"] = "JS Calendar"; + $pluginProperties["jscalendar"]["directory"] = "jscalendar"; + $pluginProperties["jscalendar"]["type"] = "calendar"; + $pluginProperties["jscalendar"]["browsers"][1] = "IE"; + $pluginProperties["jscalendar"]["browsers"][2] = "Chrome"; + $pluginProperties["jscalendar"]["browsers"][3] = "Safari"; + $pluginProperties["jscalendar"]["browsers"][4] = "Opera"; + $pluginProperties["jscalendar"]["browsers"][5] = "Mozilla"; + $pluginProperties["jscalendar"]["browsers"][6] = "Other"; + $pluginProperties["jscalendar"]["filename_extensions"][1] = ""; + $pluginProperties["jscalendar"]["includePhpFiles"][1] = "jscalendar/calendar.php"; + $pluginProperties["jscalendar"]["printJavascript"] = "\n"; + $pluginProperties["jscalendar"]["printJavascript"] .= "\n"; + $pluginProperties["jscalendar"]["printJavascript"] .= "\n"; + $pluginProperties["jscalendar"]["printCss"] = "\n"; + $pluginProperties["jscalendar"]["printCss"] .= "\n"; + $pluginProperties["jscalendar"]["printBodyOnload"] = ""; + + +// ------------------------------------------------------------------------- +// JUpload +// A Java applet to upload directories and files +// ------------------------------------------------------------------------- + + $pluginProperties["jupload"]["use"] = "yes"; + $pluginProperties["jupload"]["label"] = "JUpload"; + $pluginProperties["jupload"]["directory"] = "jupload"; + $pluginProperties["jupload"]["type"] = "applet"; + $pluginProperties["jupload"]["browsers"][1] = "IE"; + $pluginProperties["jupload"]["browsers"][2] = "Chrome"; + $pluginProperties["jupload"]["browsers"][3] = "Safari"; + $pluginProperties["jupload"]["browsers"][4] = "Opera"; + $pluginProperties["jupload"]["browsers"][5] = "Mozilla"; + $pluginProperties["jupload"]["browsers"][6] = "Other"; + $pluginProperties["jupload"]["filename_extensions"][1] = ""; + $pluginProperties["jupload"]["includePhpFiles"][1] = ""; + $pluginProperties["jupload"]["printCss"] = ""; + $pluginProperties["jupload"]["printJavascript"] = ""; + $pluginProperties["jupload"]["printBodyOnload"] = ""; + + +// ------------------------------------------------------------------------- +// Luminous +// Syntax highlighter +// ------------------------------------------------------------------------- + + $pluginProperties["luminous"]["use"] = "yes"; + $pluginProperties["luminous"]["label"] = "Luminous"; + $pluginProperties["luminous"]["directory"] = "luminous"; + $pluginProperties["luminous"]["type"] = "highlighter"; + $pluginProperties["luminous"]["browsers"][1] = "IE"; + $pluginProperties["luminous"]["browsers"][2] = "Chrome"; + $pluginProperties["luminous"]["browsers"][3] = "Safari"; + $pluginProperties["luminous"]["browsers"][4] = "Opera"; + $pluginProperties["luminous"]["browsers"][5] = "Mozilla"; + $pluginProperties["luminous"]["browsers"][6] = "Other"; + $pluginProperties["luminous"]["filename_extensions"][1] = ""; + $pluginProperties["luminous"]["includePhpFiles"][1] = "luminous/luminous.php"; + $pluginProperties["luminous"]["printCss"] = ""; + $pluginProperties["luminous"]["printJavascript"] = ""; + $pluginProperties["luminous"]["printBodyOnload"] = ""; + + return $pluginProperties; + +} // end function getPluginProperties + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + + + + + + + + + +// ************************************************************************************** +// ************************************************************************************** +// ** ** +// ** ** + +function net2ftp_plugin_includePhpFiles() { + +// -------------- +// This function includes PHP files which are required by the active plugins +// The list of current active plugins is stored in $net2ftp_globals["activePlugins"] +// -------------- + +// ------------------------------------------------------------------------- +// Global variables and settings +// ------------------------------------------------------------------------- + global $net2ftp_globals; + $pluginProperties = getPluginProperties(); + +// ------------------------------------------------------------------------- +// Initial checks and initialization +// ------------------------------------------------------------------------- + if ($net2ftp_globals["activePlugins"] == "") { return ""; } + +// ------------------------------------------------------------------------- +// For all plugins... +// ------------------------------------------------------------------------- + for ($pluginnr=0; $pluginnr code +// ------------------------------------------------------------------------- + echo $currentPlugin["printBodyOnload"]; + + } // end for + +} // End function net2ftp_plugin_printBodyOnload + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/swfupload/SWFUpload.js b/ehcp/net2ftp/plugins/swfupload/SWFUpload.js new file mode 100644 index 0000000..bf14cab --- /dev/null +++ b/ehcp/net2ftp/plugins/swfupload/SWFUpload.js @@ -0,0 +1,286 @@ +/* + +Version history + +1.0.2 - row 86 - added "escape" to the querystring to keep all the parameters intact + +*/ + +function SWFUpload(settings) { + + // Remove background flicker in IE + try + { + document.execCommand('BackgroundImageCache', false, true); + } catch(e) {} + + // Generate the tags ID + this.movieName = "SWFUpload_" + SWFUpload.movieCount++; + + // Load the settings. Load the Flash movie. + this.init(settings); + this.loadFlash(); + + if (this.debug) + this.debugSettings(); +} + +SWFUpload.movieCount = 0; + +// Default error handling. +SWFUpload.handleErrors = function(errcode, file, msg) { + + switch(errcode) { + + case -10: // HTTP error + alert("Error Code: HTTP Error, File name: " + file.name + ", Message: " + msg); + break; + + case -20: // No upload script specified + alert("Error Code: No upload script, File name: " + file.name + ", Message: " + msg); + break; + + case -30: // IOError + alert("Error Code: IO Error, File name: " + file.name + ", Message: " + msg); + break; + + case -40: // Security error + alert("Error Code: Security Error, File name: " + file.name + ", Message: " + msg); + break; + + case -50: // Filesize too big + alert("Error Code: Filesize exceeds limit, File name: " + file.name + ", File size: " + file.size + ", Message: " + msg); + break; + + } + +}; + +SWFUpload.prototype.init = function(settings) { + + this.settings = []; + + this.addSetting("debug", settings["debug"], false); // Turn debugging on/off + + // UI settings + this.addSetting("target", settings["target"], ""); // Target for auto-generated upload/browse links + this.addSetting("create_ui", settings["create_ui"], false); // Auto-generate UI + this.addSetting("browse_link_class", settings["browse_link_class"], "SWFBrowseLink"); // CSS-class given to auto-generated browse link + this.addSetting("upload_link_class", settings["upload_link_class"], "SWFUploadLink"); // CSS-class given to auto-generated upload link + this.addSetting("browse_link_innerhtml", settings["browse_link_innerhtml"], "Browse..."); // innerHTML for generated browse link, default surround with span for easy css-styling + this.addSetting("upload_link_innerhtml", settings["upload_link_innerhtml"], "Upload"); // innerHTML for generated upload link, default surround with span for easy css-styling + + // Callbacks + this.addSetting("flash_loaded_callback", settings["flash_loaded_callback"], "SWFUpload.flashLoaded"); // Invoked when the flash is loaded + this.addSetting("upload_file_queued_callback", settings["upload_file_queued_callback"], ""); // Invoked when each file is added to the queue + this.addSetting("upload_file_start_callback", settings["upload_file_start_callback"], ""); // Invoked when upload starts + this.addSetting("upload_file_complete_callback", settings["upload_file_complete_callback"], ""); // Invoked when each file is completed + this.addSetting("upload_queue_complete_callback", settings["upload_queue_complete_callback"], ""); // Invoked when upload queue is complete + this.addSetting("upload_progress_callback", settings["upload_progress_callback"], ""); // Called with regular updates on progress.. + this.addSetting("upload_dialog_cancel_callback", settings["upload_dialog_cancel_callback"], ""); // Invoked when cancel btn in dialog is clicked + this.addSetting("upload_file_error_callback", settings["upload_file_error_callback"], "SWFUpload.handleErrors"); // Invoked on error + this.addSetting("upload_file_cancel_callback", settings["upload_file_cancel_callback"], ""); // Invoked when a file upload is cancelled + this.addSetting("upload_queue_cancel_callback", settings["upload_queue_cancel_callback"], ""); // Invoked when upload queue is cancelled + + // SWF Settings + this.addSetting("upload_script", escape(settings["upload_script"], "")); // The file that recieves the uploaded files from flash + this.addSetting("auto_upload", settings["auto_upload"], false); // Start upload directly or require upload button. + this.addSetting("allowed_filetypes", settings["allowed_filetypes"], "*.*"); // List of allowed filetypes + this.addSetting("allowed_filetypes_description", settings["allowed_filetypes_description"], "All files"); // Description for allowed filetypes + this.addSetting("allowed_filesize", settings["allowed_filesize"], 1024); // Max allowed filesize + this.addSetting("flash_path", settings["flash_path"], "jscripts/SWFUpload/SWFUpload.swf"); // Path to flash-file + this.addSetting("flash_target", settings["flash_target"], ""); // Where to output the flash (not used) + this.addSetting("flash_width", settings["flash_width"], "1px"); // Flash width + this.addSetting("flash_height", settings["flash_height"], "1px"); // Flash height + this.addSetting("flash_color", settings["flash_color"], "#000000"); // Flash color + + this.debug = this.getSetting("debug"); // Set debug + +}; + +SWFUpload.prototype.loadFlash = function() { + + var html = ""; + var sb = new stringBuilder(); + + // Create Mozilla Embed HTML + if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { + + // Build the basic embed html + sb.append(''); + + // Create IE Object HTML + } else { + + // Build the basic Object tag + sb.append(''); + sb.append(''); + sb.append(''); + sb.append(''); + sb.append(''); + sb.append(''); + sb.append(''); + sb.append(''); + + } + + // Build the DOM nodes to hold the flash; + var container = document.createElement("div"); + container.style.width = "0px"; + container.style.height = "0px"; + container.style.position = "absolute"; + container.style.top = "0px"; + container.style.left = "0px"; + + var target_element = document.getElementsByTagName("body")[0]; + + if (typeof(target_element) == "undefined" || target_element == null) + return false; + + var html = sb.toString(); + + target_element.appendChild(container); + container.innerHTML = html; + + this.movieElement = document.getElementById(this.movieName); + +}; + +SWFUpload.prototype._getFlashVars = function() { + + var sb = new stringBuilder(); + sb.append("uploadScript=" + this.getSetting("upload_script")); + sb.append("&allowedFiletypesDescription=" + this.getSetting("allowed_filetypes_description")) + sb.append("&flashLoadedCallback=" + this.getSetting("flash_loaded_callback")); + sb.append("&uploadFileQueuedCallback=" + this.getSetting("upload_file_queued_callback")); + sb.append("&uploadFileStartCallback=" + this.getSetting("upload_file_start_callback")); + sb.append("&uploadProgressCallback=" + this.getSetting("upload_progress_callback")); + sb.append("&uploadFileCompleteCallback=" + this.getSetting("upload_file_complete_callback")); + sb.append("&uploadQueueCompleteCallback=" + this.getSetting("upload_queue_complete_callback")); + sb.append("&uploadDialogCancelCallback=" + this.getSetting("upload_dialog_cancel_callback")); + sb.append("&uploadFileErrorCallback=" + this.getSetting("upload_file_error_callback")); + sb.append("&uploadFileCancelCallback=" + this.getSetting("upload_file_cancel_callback")); + sb.append("&uploadQueueCompleteCallback=" + this.getSetting("upload_queue_complete_callback")); + sb.append("&autoUpload=" + this.getSetting("auto_upload")); + sb.append("&allowedFiletypes=" + this.getSetting("allowed_filetypes")); + sb.append("&maximumFilesize=" + this.getSetting("allowed_filesize")); + + return sb.toString(); +} + +// The callback method that the Flash movie will call when it has been loaded. +// This should Load the UI parts. +SWFUpload.prototype.flashLoaded = function(bool) { + this.loadUI(); + + if (this.debug) + SWFUpload.debug("Flash called home and is ready."); +}; + +// Load the UI elements. Show the UI Target, build the "link" according to the settings, and hide the Degraded Target +SWFUpload.prototype.loadUI = function() { + + if(this.getSetting("target") != "" && this.getSetting("target") != "fileinputs") { + + var instance = this; + var target = document.getElementById(this.getSetting("target")); + + // Create the link for uploading + var browselink = document.createElement("a"); + browselink.className = this.getSetting("browse_link_class"); + browselink.id = this.movieName + "BrowseBtn"; + browselink.href = "javascript:void(0);"; + browselink.onclick = function() { instance.browse(); return false; } + browselink.innerHTML = this.getSetting("browse_link_innerhtml"); + + target.innerHTML = ""; + target.appendChild(browselink); + + // Add upload btn if auto upload not used + if(this.getSetting("auto_upload") == false) { + + // Create the link for uploading + var uploadlink = document.createElement("a"); + uploadlink.className = this.getSetting("upload_link_class"); + uploadlink.id = this.movieName + "UploadBtn"; + uploadlink.href = "#"; + uploadlink.onclick = function() { instance.upload(); return false; } + uploadlink.innerHTML = this.getSetting("upload_link_innerhtml"); + target.appendChild(uploadlink); + + } + + } + +}; + +SWFUpload.debug = function(value) { + if (window.console) + console.log(value); + else + alert(value); +} + +SWFUpload.prototype.addSetting = function(name, value, default_value) { + return this.settings[name] = (typeof(value) == "undefined" || value == null) ? default_value : value; +}; + +SWFUpload.prototype.getSetting = function(name) { + return (typeof(this.settings[name]) == "undefined") ? null : this.settings[name]; +}; + +SWFUpload.prototype.browse = function() { + this.movieElement.browse(); +}; + +SWFUpload.prototype.upload = function() { + this.movieElement.upload(); +} + +SWFUpload.prototype.cancelFile = function(file_id) { + this.movieElement.cancelFile(file_id); +}; + +SWFUpload.prototype.cancelQueue = function() { + this.movieElement.cancelQueue(); +}; + +SWFUpload.prototype.debugSettings = function() { + + var sb = new stringBuilder(); + + sb.append("----- DEBUG SETTINGS START ----\n"); + sb.append("ID: " + this.movieElement.id + "\n"); + + for (var key in this.settings) + sb.append(key + ": " + this.settings[key] + "\n"); + + sb.append("----- DEBUG SETTINGS END ----\n"); + sb.append("\n"); + + var res = sb.toString(); + + SWFUpload.debug(res); +}; + + +/* UTILS */ + +function stringBuilder(join) { + +this._strings = new Array; +this._join = (typeof join == "undefined") ? "" : join; + + stringBuilder.prototype.append = function(str) { + this._strings.push(str); + }; + + stringBuilder.prototype.toString = function() { + return this._strings.join(this._join); + }; + +}; diff --git a/ehcp/net2ftp/plugins/swfupload/SWFUpload.swf b/ehcp/net2ftp/plugins/swfupload/SWFUpload.swf new file mode 100644 index 0000000..4047a85 Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/SWFUpload.swf differ diff --git a/ehcp/net2ftp/plugins/swfupload/accept.png b/ehcp/net2ftp/plugins/swfupload/accept.png new file mode 100644 index 0000000..89c8129 Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/accept.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/add.png b/ehcp/net2ftp/plugins/swfupload/add.png new file mode 100644 index 0000000..6332fef Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/add.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/cancel.png b/ehcp/net2ftp/plugins/swfupload/cancel.png new file mode 100644 index 0000000..c149c2b Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/cancel.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/example_callback.js.php b/ehcp/net2ftp/plugins/swfupload/example_callback.js.php new file mode 100644 index 0000000..ed96963 --- /dev/null +++ b/ehcp/net2ftp/plugins/swfupload/example_callback.js.php @@ -0,0 +1,151 @@ +\\|]/", "", $_GET["plugin_image_url"]); } +else { $plugin_image_url = ""; } +if (isset($_GET["directory"]) == true) { $directory = preg_replace("/[\\:\\*\\?\\<\\>\\|]/", "", $_GET["directory"]); } +else { $directory = ""; } +$directory_js = javascriptEncode2($directory); +?> +function fileQueued(file, queuelength) { + var listingfiles = document.getElementById("SWFUploadFileListingFiles"); + + if(!listingfiles.getElementsByTagName("ul")[0]) { + +// NET2FTP - do not print a title

        File queue

        +// var info = document.createElement("h4"); +// info.appendChild(document.createTextNode("File queue")); +// listingfiles.appendChild(info); + + var ul = document.createElement("ul") + listingfiles.appendChild(ul); + } + + listingfiles = listingfiles.getElementsByTagName("ul")[0]; + + var li = document.createElement("li"); + li.id = file.id; + li.className = "SWFUploadFileItem"; + li.innerHTML = file.name + " "; + + listingfiles.appendChild(li); + + var queueinfo = document.getElementById("queueinfo"); + queueinfo.innerHTML = queuelength + " files queued"; + document.getElementById(swfu.movieName + "UploadBtn").style.display = "block"; + document.getElementById("cancelqueuebtn").style.display = "block"; +// NET2FTP - add "Clear queue" link + document.getElementById("clearqueuebtn").style.display = "block"; +} + +function uploadFileCancelled(file, queuelength) { + var li = document.getElementById(file.id); + li.innerHTML = file.name + " - cancelled"; + li.className = "SWFUploadFileItem uploadCancelled"; + var queueinfo = document.getElementById("queueinfo"); + queueinfo.innerHTML = queuelength + " files queued"; +} + +function uploadFileStart(file, position, queuelength) { + var div = document.getElementById("queueinfo"); + div.innerHTML = "Uploading file " + position + " of " + queuelength; + + var li = document.getElementById(file.id); + li.className += " fileUploading"; +} + +function uploadProgress(file, bytesLoaded) { + var progress = document.getElementById(file.id + "progress"); + var percent = Math.ceil((bytesLoaded / file.size) * 200) + progress.style.background = "#f0f0f0 url(/progressbar.png) no-repeat -" + (200 - percent) + "px 0"; +} + +function uploadError(errno) { + // SWFUpload.debug(errno); +} + +function uploadFileComplete(file) { + // NET2FTP - added this line to fix a bug as discussed on the forum + // http://swfupload.mammon.se/forum/viewtopic.php?id=144 + uploadProgress(file, file.size); + + var li = document.getElementById(file.id); + li.className = "SWFUploadFileItem uploadCompleted"; +} + +function cancelQueue() { + swfu.cancelQueue(); + document.getElementById(swfu.movieName + "UploadBtn").style.display = "none"; + document.getElementById("cancelqueuebtn").style.display = "none"; +} + +function uploadQueueComplete(file) { + var div = document.getElementById("queueinfo"); +// NET2FTP - add link to refresh the page after the upload + div.innerHTML = "All files uploaded... ','','browse','main');\" title=\"Refresh (accesskey r)\" accesskey=\"r\" style=\"font-size: 80%;\">Refresh to view uploaded files"; + document.getElementById("cancelqueuebtn").style.display = "none"; +} + +// NET2FTP - add "Clear queue" link +// http://swfupload.mammon.se/forum/viewtopic.php?id=105 +function clearQueue() { + + // reset the queuelength + swfu.cancelQueue(); + + // hide the "upload queue" link (SWFUpload_0UploadBtn} + document.getElementById('SWFUpload_0UploadBtn').style.display = 'none'; + + // hide the "# files queued" text (queueinfo) + document.getElementById('queueinfo').innerHTML = 'Queue is empty'; + + // clear the file listing + document.getElementById('SWFUploadFileListingFiles').innerHTML = ''; + + // hide cancel queue + document.getElementById('cancelqueuebtn').style.display = 'none'; + + // hide clear queue + document.getElementById('clearqueuebtn').style.display = 'none'; +} + + OK

        +// OK

        +// OK

        +// OK

        +// -------------- + + $singlequote = "'"; // ' + $doublequote = "\""; // " + $backslash = "\\"; // \ + $doublequote_html = """; // " + +// Executing the 3 steps below in this order will convert: +// ' --> \' in step 2 +// " --> " in step 3 +// \' --> \\\' in step 1 and 2 +// \" --> \\\" in step 1 and 3 + $string = str_replace($backslash, "$backslash$backslash", $string); + $string = str_replace($singlequote, "$backslash$singlequote", $string); + $string = str_replace($doublequote, $doublequote_html, $string); + + return $string; + +} // end javascriptEncode2 + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/swfupload/folder_find.png b/ehcp/net2ftp/plugins/swfupload/folder_find.png new file mode 100644 index 0000000..c64e2ee Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/folder_find.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/folder_go.png b/ehcp/net2ftp/plugins/swfupload/folder_go.png new file mode 100644 index 0000000..34a736f Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/folder_go.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/license.txt b/ehcp/net2ftp/plugins/swfupload/license.txt new file mode 100644 index 0000000..0ee9a9f --- /dev/null +++ b/ehcp/net2ftp/plugins/swfupload/license.txt @@ -0,0 +1,7 @@ +/** + * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/ + * + * SWFUpload is (c) 2006 Lars Huring and Mammon Media and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/swfupload/progressbar.png b/ehcp/net2ftp/plugins/swfupload/progressbar.png new file mode 100644 index 0000000..c0099d1 Binary files /dev/null and b/ehcp/net2ftp/plugins/swfupload/progressbar.png differ diff --git a/ehcp/net2ftp/plugins/swfupload/swfupload.css.php b/ehcp/net2ftp/plugins/swfupload/swfupload.css.php new file mode 100644 index 0000000..1d55ba7 --- /dev/null +++ b/ehcp/net2ftp/plugins/swfupload/swfupload.css.php @@ -0,0 +1,20 @@ +\\|]/", "", $_GET["image_url"]); } +else { $image_url = ""; } +?> +.swfuploadbtn { display: block; width: 100px; padding: 0 0 0 30px; background-color: #FF0000; } +.browsebtn { background: url(/add.png) no-repeat 0px 5px; padding: 5px 5px 5px 20px; } +.uploadbtn { background: url(/accept.png) no-repeat 0px 5px; padding: 5px 5px 5px 20px; display: none; } +.cancelbtn { background: url(/cancel.png) no-repeat 0px 5px; padding: 5px 5px 5px 20px; width: 16px; height: 16px; float: right; display: block; } +#cancelqueuebtn { background: url(/cancel.png) no-repeat 0px 5px; padding: 5px 5px 5px 20px; display: none; } +#clearqueuebtn { background: url(/cancel.png) no-repeat 0px 5px; padding: 5px 5px 5px 20px; display: none; } +#SWFUploadFileListingFiles ul { padding: 0; list-style: none; margin: 5px 20px 0px 20px; } +.SWFUploadFileItem { background: #eaefea; width: 200px; height: 60px; float: left; margin: 0px 10px 10px 0px; padding: 5px; display: block; } +.fileUploading { background: #fee727; } +.uploadCompleted { background: #d2fa7c; } +.uploadCancelled { background: #f77c7c; } +.uploadCompleted .cancelbtn, .uploadCancelled .cancelbtn { display: none; } +span.progressBar { background-color: #CCCCCC; width: 200px; font-size: 10px; height: 4px; margin-top: 2px; margin-bottom: 10px; display: block; } \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/ar.js b/ehcp/net2ftp/plugins/tinymce/langs/ar.js new file mode 100644 index 0000000..93fddcd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/ar.js @@ -0,0 +1 @@ +tinyMCE.addI18n({ar:{common:{"more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","invalid_data":"\u062e\u0637\u0623.: \u062a\u0645 \u0625\u062f\u062e\u0627\u0644 \u0642\u064a\u0645 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0647 \u060c \u0647\u0630\u0647 \u0627\u0644\u0642\u064a\u0645 \u0628\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0627\u062d\u0645\u0631","popup_blocked":"\u0639\u0630\u0631\u0627 \u060c\u0625\u062f\u0627\u0631\u0629 \u0639\u0631\u0636 \u0627\u0644\u0646\u0648\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0627\u0648\u0642\u0641\u062a \u0646\u0627\u0641\u0630\u0647 \u062a\u0648\u0641\u0631 \u062e\u062f\u0645\u0647 \u0645\u0646 \u062e\u062f\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c . \u064a\u062c\u0628 \u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0644\u0646\u0648\u0627\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0644\u0643\u0649 \u064a\u0639\u0645\u0644 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0628\u0643\u0641\u0627\u0626\u0647.","clipboard_no_support":"\u062d\u0627\u0644\u064a\u0627 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u060c \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0628\u062f\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643.","clipboard_msg":"\u0646\u0633\u062e / \u0642\u0635 / \u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0641\u064a \u0645\u0648\u0632\u064a\u0644\u0627 \u0648\u0641\u0627\u064a\u0631\u0641\u0648\u0643\u0633.\n\u062a\u0631\u064a\u062f \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062d\u0648\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u0643\u0644\u0629\u061f","not_set":"-- \u063a\u064a\u0631 \u0645\u062d\u062f\u062f --","class_name":"\u0627\u0644\u062f\u0631\u062c\u0629",browse:"\u062a\u0635\u0641\u062d",close:"\u0625\u063a\u0644\u0627\u0642",cancel:"\u0625\u0644\u063a\u0627\u0621",update:"\u062a\u062d\u062f\u064a\u062b",insert:"\u0625\u062f\u0631\u0627\u062c",apply:"\u062a\u0637\u0628\u064a\u0642","edit_confirm":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u0649 \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u062d\u0647 \u0643\u0640\u0640 WYSIWYG\u061f","invalid_data_number":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u064a\u0643\u0648\u0646 \u0631\u0642\u0645","invalid_data_min":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0643\u0628\u0631 \u0645\u0646 {#min}","invalid_data_size":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0648 \u0646\u0633\u0628\u0647 \u0645\u0626\u0648\u064a\u0647",value:"(\u0627\u0644\u0642\u064a\u0645\u0629)"},contextmenu:{full:"\u0643\u0627\u0645\u0644",right:"\u0627\u0644\u062d\u0642",center:"\u0645\u0631\u0643\u0632",left:"\u0628\u0642\u064a",align:"\u0645\u062d\u0627\u0630\u0627\u0629"},insertdatetime:{"day_short":"\u0627\u0644\u0623\u062d\u062f,\u0627\u0644\u0627\u062b\u0646\u064a\u0646,\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621,\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621,\u0627\u0644\u062e\u0645\u064a\u0633,\u0627\u0644\u062c\u0645\u0639\u0629,\u0627\u0644\u0633\u0628\u062a,\u0627\u0644\u0623\u062d\u062f","day_long":"\u0627\u0644\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u060c \u0627\u0644\u0623\u062d\u062f","months_short":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0645\u0627\u0631\u0633,\u0623\u0628\u0631\u064a\u0644,\u0645\u0627\u064a\u0648,\u064a\u0648\u0646\u064a\u0648,\u064a\u0648\u0644\u064a\u0648,\u0623\u063a\u0633\u0637\u0633,\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","months_long":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0622\u0630\u0627\u0631/\u0645\u0627\u0631\u0633,\u0646\u064a\u0633\u0627\u0646/\u0627\u0628\u0631\u064a\u0644,\u0623\u064a\u0627\u0631/\u0645\u0627\u064a\u0648,\u062d\u0632\u064a\u0631\u0627\u0646/\u064a\u0648\u0646\u064a\u0648,\u062a\u0645\u0648\u0632/\u064a\u0648\u0644\u064a\u0648,\u0622\u0628/\u0627\u063a\u0633\u0637\u0633,\u0623\u064a\u0644\u0648\u0644/\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","inserttime_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u0648\u0642\u062a","insertdate_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u062a\u0627\u0631\u064a\u062e","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0637\u0628\u0627\u0639\u0629"},preview:{"preview_desc":"\u0645\u0639\u0627\u064a\u0646\u0629"},directionality:{"rtl_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631","ltr_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646"},layer:{content:"\u0637\u0628\u0642\u0647 \u062c\u062f\u064a\u062f\u0647 ...","absolute_desc":"\u062c\u0639\u0644 \u0627\u0644\u0637\u0628\u0642\u0647 \u062d\u0631\u0647","backward_desc":"\u0646\u0642\u0644 \u0644\u0644\u062e\u0644\u0641","forward_desc":"\u0646\u0642\u0644 \u0644\u0644\u0627\u0645\u0627\u0645","insertlayer_desc":"\u0625\u062f\u0631\u0627\u062c \u0637\u0628\u0642\u0629 \u062c\u062f\u064a\u062f\u0629"},save:{"save_desc":"\u062d\u0641\u0638","cancel_desc":"\u0625\u0644\u063a\u0627\u0621 \u0643\u0627\u0641\u0629 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a"},nonbreaking:{"nonbreaking_desc":"\u0625\u062f\u0631\u0627\u062c \u062d\u0631\u0641 \u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629"},iespell:{download:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649 \u063a\u064a\u0631 \u0645\u0631\u0643\u0628 \u0647\u0644 \u062a\u0631\u064a\u062f \u062a\u0631\u0643\u064a\u0628\u0647 \u0627\u0644\u0627\u0646","iespell_desc":"\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649"},advhr:{"advhr_desc":"\u0645\u0633\u0637\u0631\u0647 \u0627\u0641\u0642\u064a\u0647","delta_height":"","delta_width":""},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u0627\u0644\u0631\u0633\u0648\u0645 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0647"},searchreplace:{"replace_desc":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644","delta_width":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0639\u0631\u0636","delta_height":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639","search_desc":"\u0628\u062d\u062b"},advimage:{"image_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0647","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0631\u0627\u0628\u0637","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u062e\u0627\u0635\u064a\u0647","ins_desc":"\u0627\u0644\u0625\u0636\u0627\u0641\u0647","del_desc":"\u0627\u0644\u062d\u0630\u0641","acronym_desc":"\u0623\u0648\u0627\u0626\u0644 \u062d\u0631\u0648\u0641 \u0627\u0644\u0643\u0644\u0645\u0627\u062a","abbr_desc":"\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631","cite_desc":"\u0625\u0633\u062a\u0634\u0647\u0627\u062f \u0628\u0642\u0648\u0644","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"","delta_width":"",desc:"\u062a\u062d\u0631\u064a\u0631 \u0646\u0645\u0637 CSS"},paste:{"plaintext_mode":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629.","plaintext_mode_sticky":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629. \u0648\u0628\u0639\u062f \u0644\u0635\u0642 \u0634\u064a\u0621 \u064a\u062a\u0645 \u0625\u0631\u062c\u0627\u0639 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629","selectall_desc":"\u062d\u062f\u062f \u0643\u0627\u0641\u0629","paste_word_desc":"\u0644\u0635\u0642 \u0645\u0646 \u0648\u0648\u0631\u062f","paste_text_desc":"\u0644\u0635\u0642 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a"},"paste_dlg":{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"},table:{"merge_cells_delta_height":"0","merge_cells_delta_width":"0","table_delta_height":"0","table_delta_width":"0","cellprops_delta_height":"0","cellprops_delta_width":"0","rowprops_delta_height":"0","rowprops_delta_width":"0",cell:"\u062e\u0644\u064a\u0629",col:"\u0639\u0627\u0645\u0648\u062f",row:"\u0635\u0641",del:"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","copy_row_desc":"\u0646\u0633\u062e \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","cut_row_desc":"\u0642\u0635 \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","paste_row_after_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0628\u0639\u062f","paste_row_before_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0642\u0628\u0644","props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644","cell_desc":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_desc":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","merge_cells_desc":"\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627 \u062c\u062f\u0648\u0644","split_cells_desc":"\u0627\u0646\u0642\u0633\u0627\u0645 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062f\u0645\u062c\u0629","delete_col_desc":"\u0625\u0632\u0627\u0644\u0629 \u0639\u0645\u0648\u062f","col_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0628\u0639\u062f","col_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0642\u0628\u0644","delete_row_desc":"\u062d\u0630\u0641 \u0635\u0641","row_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0628\u0639\u062f","row_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0642\u0628\u0644",desc:"\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644 \u062c\u062f\u064a\u062f"},autosave:{"warning_message":"\u0633\u062a\u0641\u0642\u062f \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0641\u0649 \u062d\u0627\u0644\u0629 \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.\n\n\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649\u061f.","restore_content":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.","unload_msg":"\u0633\u064a\u062a\u0645 \u0641\u0642\u062f \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0625\u0630\u0627 \u062a\u0631\u0643\u062a \u0627\u0644\u0635\u0641\u062d\u0647"},fullscreen:{desc:"\u062a\u0628\u062f\u064a\u0644 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629"},media:{"delta_height":"0","delta_width":"0",edit:"\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627",desc:"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627"},fullpage:{desc:"\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0646\u062f","delta_width":"","delta_height":""},template:{desc:"\u0627\u0636\u0641 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0627\u0644\u062c\u0627\u0647\u0632\u0647"},visualchars:{desc:"\u0623\u062d\u0631\u0641 \u0627\u0644\u062a\u062d\u0643\u0645 \u0627\u0644\u0645\u0631\u0626\u064a\u0629 \u0639\u0631\u0636 / \u0627\u062e\u0641\u0627\u0621."},spellchecker:{desc:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a Toggle",menu:"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a","ignore_word":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644\u0645\u0629","ignore_words":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644",langs:"\u0627\u0644\u0644\u063a\u0627\u062a",wait:"\u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631",sug:"\u0627\u0644\u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_sug":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_mpell":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u062e\u0637\u0627\u0621 \u0641\u064a \u0627\u0644\u062a\u0647\u062c\u0626\u0629","learn_word":"\u062a\u0639\u0644\u0645 \u0627\u0644\u0643\u0644\u0645\u0629"},pagebreak:{desc:"\u0627\u0636\u0641 \u0641\u0627\u0635\u0644 \u0635\u0641\u062d\u0647"},advlist:{types:"\u0627\u0644\u0623\u0646\u0648\u0627\u0639",def:"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a","lower_alpha":"\u0627\u0644\u062d\u0631\u0648\u0641 \u0627\u0644\u0623\u0628\u062c\u062f\u064a\u0629 \u0627\u0644\u0635\u063a\u064a\u0631\u0629","lower_greek":"\u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629 \u0627\u0644\u0635\u063a\u064a\u0631\u0629","lower_roman":"\u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629 \u0627\u0644\u0635\u063a\u064a\u0631\u0629","upper_alpha":"\u0627\u0644\u062d\u0631\u0648\u0641 \u0627\u0644\u0623\u0628\u062c\u062f\u064a\u0629 \u0627\u0644\u0643\u0628\u064a\u0631\u0629","upper_roman":"\u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629 \u0627\u0644\u0643\u0628\u064a\u0631\u0629",circle:"\u062f\u0627\u0626\u0631\u0629",disc:"\u0646\u0642\u0637\u0629",square:"\u0645\u0631\u0628\u0639"},colors:{"333300":"\u0632\u064a\u062a\u064a \u062f\u0627\u0643\u0646","993300":"\u0628\u0631\u062a\u0642\u0627\u0644 \u0645\u062d\u0631\u0648\u0642","000000":"\u0623\u0633\u0648\u062f","003300":"\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646","003366":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","000080":"\u0628\u062d\u0631\u064a","333399":"\u0646\u064a\u0644\u064a","333333":"\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646 \u062c\u062f\u0627","800000":"\u0643\u0633\u062a\u0646\u0627\u0626\u064a",FF6600:"\u0628\u0631\u062a\u0642\u0627\u0644\u064a","808000":"\u0632\u064a\u062a\u064a","008000":"\u0623\u062e\u0636\u0631","008080":"\u0623\u0632\u0631\u0642 \u0623\u062e\u0636\u0631","0000FF":"\u0623\u0632\u0631\u0642","666699":"\u0631\u0645\u0627\u062f\u064a \u0623\u0632\u0631\u0642","808080":"\u0631\u0645\u0627\u062f\u064a",FF0000:"\u0623\u062d\u0645\u0631",FF9900:"\u0643\u0647\u0631\u0645\u0627\u0646\u064a","99CC00":"\u0623\u0635\u0641\u0631 \u0623\u062e\u0636\u0631","339966":"\u0627\u062e\u0636\u0631 \u0628\u062d\u0631\u064a","33CCCC":"\u0641\u064a\u0631\u0648\u0632\u064a","3366FF":"\u0627\u0644\u0623\u0632\u0631\u0642 \u0627\u0644\u0645\u0644\u0643\u064a","800080":"\u0623\u0631\u062c\u0648\u0627\u0646\u064a","999999":"\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637",FF00FF:"\u0641\u0648\u0634\u064a",FFCC00:"\u0630\u0647\u0628\u064a",FFFF00:"\u0623\u0635\u0641\u0631","00FF00":"\u0644\u064a\u0645\u0648\u0646\u064a","00FFFF":"\u0645\u0627\u0626\u064a","00CCFF":"\u0633\u0645\u0627\u0648\u064a","993366":"\u0628\u0646\u064a",C0C0C0:"\u0641\u0636\u064a",FF99CC:"\u0632\u0647\u0631\u064a",FFCC99:"\u062e\u0648\u062e\u064a",FFFF99:"\u0623\u0635\u0641\u0631 \u0645\u0636\u064a\u0621",CCFFCC:"\u0623\u062e\u0636\u0631 \u0634\u0627\u062d\u0628",CCFFFF:"\u0633\u0645\u0627\u0648\u064a \u0634\u0627\u062d\u0628","99CCFF":"\u0633\u0645\u0627\u0648\u064a \u0645\u0636\u064a\u0621",CC99FF:"\u0628\u0646\u0641\u0633\u062c\u064a",FFFFFF:"\u0623\u0628\u064a\u0636"},aria:{"rich_text_area":"\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644"},wordcount:{words:"\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a :"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/cs.js b/ehcp/net2ftp/plugins/tinymce/langs/cs.js new file mode 100644 index 0000000..463dda8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/cs.js @@ -0,0 +1 @@ +tinyMCE.addI18n({cs:{common:{"more_colors":"Dal\u0161\u00ed barvy","invalid_data":"Chyba: Byly zad\u00e1ny neplatn\u00e9 hodnoty a tyto byly ozna\u010deny \u010derven\u011b.","popup_blocked":"Omlouv\u00e1me se, ale blokov\u00e1n\u00ed vyskakovac\u00edch oken neumo\u017enilo otev\u0159\u00edt okno, kter\u00e9 poskytuje funk\u010dnost aplikace. Pro pln\u00e9 vyu\u017eit\u00ed mo\u017enost\u00ed aplikace mus\u00edte vypnout blokov\u00e1n\u00ed vyskakovac\u00edch oken pro tento web.","clipboard_no_support":"Tato funkce nen\u00ed va\u0161\u00edm prohl\u00ed\u017ee\u010dem podporov\u00e1na. Pou\u017eijte m\u00edsto toho kl\u00e1vesov\u00e9 zkratky.","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","not_set":"- Nenastaveno -","class_name":"T\u0159\u00edda",browse:"Proch\u00e1zet",close:"Zav\u0159\u00edt",cancel:"Storno",update:"Aktualizovat",insert:"Vlo\u017eit",apply:"Pou\u017e\u00edt","edit_confirm":"Chcete pou\u017e\u00edt WYSIWYG re\u017eim pro tento text?","invalid_data_number":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo","invalid_data_min":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo v\u011bt\u0161\u00ed ne\u017e {#min}","invalid_data_size":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo nebo v procentech",value:"(hodnota)"},contextmenu:{full:"Do bloku",right:"Doprava",center:"Na st\u0159ed",left:"Doleva",align:"Zarovn\u00e1n\u00ed"},insertdatetime:{"day_short":"Ne,Po,\u00dat,St,\u010ct,P\u00e1,So,Ne","day_long":"Ned\u011ble,Pond\u011bl\u00ed,\u00dater\u00fd,St\u0159eda,\u010ctvrtek,P\u00e1tek,Sobota,Ned\u011ble","months_short":"Led,\u00dano,B\u0159e,Dub,Kv\u011b,\u010cer,\u010cvc,Srp,Z\u00e1\u0159,\u0158\u00edj,Lis,Pro","months_long":"Leden,\u00danor,B\u0159ezen,Duben,Kv\u011bten,\u010cerven,\u010cervenec,Srpen,Z\u00e1\u0159\u00ed,\u0158\u00edjen,Listopad,Prosinec","inserttime_desc":"Vlo\u017eit \u010das","insertdate_desc":"Vlo\u017eit datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tisk"},preview:{"preview_desc":"N\u00e1hled"},directionality:{"rtl_desc":"Sm\u011br zprava doleva","ltr_desc":"Sm\u011br zleva doprava"},layer:{content:"Nov\u00e1 vrstva...","absolute_desc":"P\u0159epnout na absolutn\u00ed pozicov\u00e1n\u00ed","backward_desc":"P\u0159esunout dozadu","forward_desc":"P\u0159esunout dop\u0159edu","insertlayer_desc":"Vlo\u017eit novou vrstvu"},save:{"save_desc":"Ulo\u017eit","cancel_desc":"Zru\u0161it v\u0161echny zm\u011bny"},nonbreaking:{"nonbreaking_desc":"Vlo\u017eit ned\u011blitelnou mezeru"},iespell:{download:"Slovn\u00edk ieSpell nebyl detekov\u00e1n. Chcete ho nainstalovat?","iespell_desc":"Spustit kontrolu pravopisu"},advhr:{"advhr_desc":"Vodorovn\u00fd odd\u011blova\u010d","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Naj\u00edt/nahradit","search_desc":"Naj\u00edt","delta_width":"","delta_height":""},advimage:{"delta_width":"20","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","delta_height":""},advlink:{"link_desc":"Vlo\u017eit/upravit odkaz","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vlo\u017eit/upravit atributy","ins_desc":"P\u0159idan\u00fd text","del_desc":"Odstran\u011bn\u00fd text","acronym_desc":"Akronym","abbr_desc":"Zkratka","cite_desc":"Citace","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"25",desc:"Upravit CSS styl","delta_height":""},paste:{"plaintext_mode":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","plaintext_mode_sticky":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu. Po vlo\u017een\u00ed \u010dehokoli bude tato funkce vr\u00e1cena zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","selectall_desc":"Vybrat v\u0161e","paste_word_desc":"Vlo\u017eit z Wordu","paste_text_desc":"Vlo\u017eit jako prost\u00fd text"},"paste_dlg":{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."},table:{"table_delta_width":"50","cellprops_delta_width":"100",cell:"Bu\u0148ka",col:"Sloupec",row:"\u0158\u00e1dek",del:"Odstranit tabulku","copy_row_desc":"Kop\u00edrovat \u0159\u00e1dek tabulky","cut_row_desc":"Vyjmout \u0159\u00e1dek tabulky","paste_row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","paste_row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed","props_desc":"Vlastnosti tabulky","cell_desc":"Vlastnosti bu\u0148ky","row_desc":"Vlastnosti \u0159\u00e1dku tabulky","merge_cells_desc":"Slou\u010dit bu\u0148ky","split_cells_desc":"Rozd\u011blit bu\u0148ky","delete_col_desc":"Odstranit sloupec tabulky","col_after_desc":"Vlo\u017eit sloupec za","col_before_desc":"Vlo\u017eit sloupec p\u0159ed","delete_row_desc":"Odstranit \u0159\u00e1dek tabulky","row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed",desc:"Vlo\u017eit novou tabulku","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Pokud obnov\u00edte ulo\u017een\u00fd obsah, ztrat\u00edte t\u00edm ve\u0161ker\u00fd obsah, kter\u00fd je pr\u00e1v\u011b v okn\u011b editoru.\n\nOpravdu chcete obnovit ulo\u017een\u00fd obsah?","restore_content":"Obnovit automaticky ulo\u017een\u00fd obsah.","unload_msg":"Proveden\u00e9 zm\u011bny mohou b\u00fdt ztraceny, jestli\u017ee opust\u00edte tuto str\u00e1nku."},fullscreen:{desc:"P\u0159epnout na celostr\u00e1nkov\u00e9 zobrazen\u00ed"},media:{"delta_width":"130",edit:"Upravit m\u00e9dia",desc:"Vlo\u017eit/upravit m\u00e9dia","delta_height":""},fullpage:{desc:"Vlastnosti dokumentu","delta_width":"110","delta_height":""},template:{desc:"Vlo\u017eit p\u0159eddefinovan\u00fd obsah ze \u0161ablony"},visualchars:{desc:"Zobrazen\u00ed skryt\u00fdch znak\u016f zap/vyp"},spellchecker:{desc:"P\u0159epnout kontrolu pravopisu",menu:"Nastaven\u00ed kontroly pravopisu","ignore_word":"Ignorovat slovo","ignore_words":"Ignorovat v\u0161e",langs:"Jazyky",wait:"\u010cekejte pros\u00edm...",sug:"N\u00e1pov\u011bda","no_sug":"\u017d\u00e1dn\u00e1 n\u00e1pov\u011bda","no_mpell":"Nebyly nalezeny \u017e\u00e1dn\u00e9 chyby.","learn_word":"Nau\u010dit slovo"},pagebreak:{desc:"Vlo\u017eit konec str\u00e1nky"},advlist:{types:"Typ",def:"V\u00fdchoz\u00ed","lower_alpha":"Mal\u00e1 p\u00edsmena","lower_greek":"Mal\u00e1 \u0159eck\u00e1 p\u00edsmena","lower_roman":"Mal\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice","upper_alpha":"Velk\u00e1 p\u00edsmena","upper_roman":"Velk\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice",circle:"Kole\u010dko",disc:"Punt\u00edk",square:"\u010ctvere\u010dek"},colors:{"333300":"Tmav\u011b olivov\u00e1","993300":"Tmav\u011b oran\u017eov\u00e1","000000":"\u010cern\u00e1","003300":"Tmav\u011b zelen\u00e1","003366":"Tmav\u011b azurov\u00e1","000080":"N\u00e1mo\u0159nick\u00e1 modr\u00e1","333399":"Indigo modr\u00e1","333333":"Tmav\u011b \u0161ed\u00e1","800000":"Tmav\u011b \u010derven\u00e1",FF6600:"Oran\u017eov\u00e1","808000":"Olivov\u00e1","008000":"Zelen\u00e1","008080":"Modrozelen\u00e1","0000FF":"Modr\u00e1","666699":"\u0160edomodr\u00e1","808080":"\u0160ed\u00e1",FF0000:"\u010cerven\u00e1",FF9900:"Jantarov\u00e1","99CC00":"\u017dlutozelen\u00e1","339966":"Mo\u0159sk\u00e1 zelen\u00e1","33CCCC":"Tyrkysov\u00e1","3366FF":"Kr\u00e1lovsk\u00e1 modr\u00e1","800080":"Nachov\u00e1","999999":"Sv\u011btle \u0161ed\u00e1",FF00FF:"Purpurov\u00e1",FFCC00:"Zlat\u00e1",FFFF00:"\u017dlut\u00e1","00FF00":"Limetkov\u00e1","00FFFF":"Vodn\u00ed","00CCFF":"Nebesk\u00e1 modr\u00e1","993366":"Hn\u011bd\u00e1",C0C0C0:"St\u0159\u00edbrn\u00e1",FF99CC:"R\u016f\u017eov\u00e1",FFCC99:"Broskvov\u00e1",FFFF99:"Sv\u011btle \u017elut\u00e1",CCFFCC:"Sv\u011btle zelen\u00e1",CCFFFF:"Sv\u011btle azurov\u00e1","99CCFF":"Sv\u011btl\u00e1 nebesk\u00e1 modr\u00e1",CC99FF:"\u0160vestkov\u00e1",FFFFFF:"B\u00edl\u00e1"},aria:{"rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem"},wordcount:{words:"Po\u010det slov: "}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/da.js b/ehcp/net2ftp/plugins/tinymce/langs/da.js new file mode 100644 index 0000000..36c7540 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/da.js @@ -0,0 +1 @@ +tinyMCE.addI18n({da:{common:{"more_colors":"Flere farver","invalid_data":"Fejl: Forkerte v\u00e6rdier indtastet i felter markeret med r\u00f8d.","popup_blocked":"Undskyld, men vi har noteret os, at din popup-blocker har forhindret et vindue, der giver programmet funktionalitet, at \u00e5bne op. Hvis du vil have den fulde funktionalitet, m\u00e5 du sl\u00e5 popup-blockeren fra for dette websted.","clipboard_no_support":"P\u00e5 nuv\u00e6rende tidspunkt ikke supporteret af din browser. Anvend i stedet genvejene p\u00e5 tastaturet.","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla eller Firefox.\nVil du have mere information om dette emne?","not_set":"-- Ikke sat --","class_name":"Klasse",browse:"Gennemse",close:"Luk",cancel:"Annuller",update:"Opdater",insert:"Inds\u00e6t",apply:"Anvend","edit_confirm":"Vil du bruge den avancerede tekstredigering?","invalid_data_number":"{#field} skal v\u00e6re et tal","invalid_data_min":"{#field} skal v\u00e6re et tal {#min}","invalid_data_size":"{#field} skal v\u00e6re et tal eller en procentsats",value:"(v\u00e6rdi)"},contextmenu:{full:"Lige marginer",right:"H\u00f8jre",center:"Centreret",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"S\u00f8n,Man,Tir,Ons,Tors,Fre,L\u00f8r,S\u00f8n","day_long":"S\u00f8ndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,L\u00f8rdag,S\u00f8ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januar,Februar,Marts,April,Maj,Juni,Juli,August,September,Oktober,November,December","inserttime_desc":"Inds\u00e6t klokkeslet","insertdate_desc":"Inds\u00e6t dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Udskriv"},preview:{"preview_desc":"Vis udskrift"},directionality:{"rtl_desc":"Retning h\u00f8jre mod venstre","ltr_desc":"Retning venstre mod h\u00f8jre"},layer:{content:"Nyt lag...","absolute_desc":"Sl\u00e5 absolut positionering til/fra","backward_desc":"Flyt bagud","forward_desc":"Flyt fremad","insertlayer_desc":"Inds\u00e6t nyt lag"},save:{"save_desc":"Gem","cancel_desc":"Annuller alle \u00e6ndringer"},nonbreaking:{"nonbreaking_desc":"Inds\u00e6t et blanktegn"},iespell:{download:"ieSpell blev ikke fundet. Vil du installere det nu?","iespell_desc":"Udf\u00f8r stavekontrol"},advhr:{"advhr_desc":"Horisontal linie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rikoner","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8g/erstat","search_desc":"S\u00f8g","delta_width":"","delta_height":""},advimage:{"image_desc":"Inds\u00e6t/rediger billede","delta_width":"","delta_height":""},advlink:{"delta_width":"40","link_desc":"Inds\u00e6t/rediger link","delta_height":""},xhtmlxtras:{"attribs_desc":"Inds\u00e6t/rediger attributter","ins_desc":"Inds\u00e6ttelse","del_desc":"Sletning","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus.","plaintext_mode_sticky":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus. Efter du har indsat noget s\u00e6ttes du automatisk tilbaeg til alminde inds\u00e6t modus.","selectall_desc":"V\u00e6lg alle","paste_word_desc":"Inds\u00e6t fra Word","paste_text_desc":"Inds\u00e6t ikke-formatteret tekst"},"paste_dlg":{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."},table:{cell:"Celle",col:"Kolonne",row:"R\u00e6kke",del:"Slet tabel","copy_row_desc":"Kopier r\u00e6kke","cut_row_desc":"Klip r\u00e6kke","paste_row_after_desc":"Inds\u00e6t r\u00e6kke efter","paste_row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r","props_desc":"Tabelegenskaber","cell_desc":"Celleegenskaber","row_desc":"R\u00e6kkeegenskaber","merge_cells_desc":"Flet celler","split_cells_desc":"Opdel flettede celler","delete_col_desc":"Slet kolonne","col_after_desc":"Inds\u00e6t kolonne efter","col_before_desc":"Inds\u00e6t kolonne f\u00f8r","delete_row_desc":"Slet r\u00e6kke","row_after_desc":"Inds\u00e6t r\u00e6kke efter","row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r",desc:"Inds\u00e6t tabel","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Hvis du genskaber det gemte indhold vil du miste al det indhold der lige nu er i editoren.nnEr du sikker p\u00e5 du vil genskabe det gemte indhold?","restore_content":"Genskab det gemte indhold.","unload_msg":"Har du foretaget nogle \u00e6ndringer, vil de g\u00e5 tabt, hvis du navigerer v\u00e6k fra denne side."},fullscreen:{desc:"Vis/skjul fuldsk\u00e6rmstilstand"},media:{edit:"Rediger indlejret mediefil",desc:"Inds\u00e6t/rediger indlejret mediefil","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentegenskaber","delta_width":"","delta_height":""},template:{desc:"Inds\u00e6t pr\u00e6defineret skabelonindhold"},visualchars:{desc:"Vis/Skjul visuelle kontroltegn."},spellchecker:{desc:"Vis/skjul stavekontrol",menu:"Indstillinger for stavekontrol","ignore_word":"Ignorer ord","ignore_words":"Ignorer alle",langs:"Sprog",wait:"Vent venligst...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefejl fundet.","learn_word":"L\u00e6r ordet"},pagebreak:{desc:"Inds\u00e6t sideskift."},advlist:{types:"Typer",def:"Standard","lower_alpha":"Sm\u00e5 alfa","lower_greek":"Sm\u00e5 gr\u00e6ske","lower_roman":"Sm\u00e5 romertal","upper_alpha":"Store alfa","upper_roman":"Store romertal",circle:"Cirkel",disc:"Prik",square:"Firkant"},colors:{"333300":"M\u00f8rk oliven","993300":"Br\u00e6ndt orange","000000":"Sort","003300":"M\u00f8rkegr\u00f8n","003366":"Bl\u00e5 azur","000080":"Navy bl\u00e5","333399":"Indigo","333333":"Meget m\u00f8rk gr\u00e5","800000":"Maroon",FF6600:"Orange","808000":"Oliven","008000":"Gr\u00f8n","008080":"Teal","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Amber","99CC00":"Gulgr\u00f8n","339966":"S\u00f8gr\u00f8n","33CCCC":"Turkis","3366FF":"Royal bl\u00e5","800080":"Violet","999999":"Medium gr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Pink",FFCC99:"Fersken",FFFF99:"Lysgul",CCFFCC:"Bleggr\u00f8n",CCFFFF:"Pale cyan","99CCFF":"Lys himmelb\u00e6\u00e5",CC99FF:"Plum",FFFFFF:"Hvis"},aria:{"rich_text_area":"Tekstomr\u00e5de med formatering"},wordcount:{words:"Ord:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/de.js b/ehcp/net2ftp/plugins/tinymce/langs/de.js new file mode 100644 index 0000000..0144c9a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/de.js @@ -0,0 +1 @@ +tinyMCE.addI18n({de:{common:{"more_colors":"Weitere Farben","invalid_data":"Fehler: Es wurden ung\u00fcltige Werte eingegeben (rot markiert).","popup_blocked":"Leider hat der Popup-Blocker ein Fenster unterbunden, das f\u00fcr den Betrieb dieses Programms n\u00f6tig ist. Bitte den Popup-Blocker f\u00fcr diese Seite deaktivieren.","clipboard_no_support":"Wird derzeit im verwendeten Browser nicht unterst\u00fctzt. Bitte stattdessen die Tastenk\u00fcrzel benutzen.","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich.\nMehr \u00fcber dieses Problem erfahren?","not_set":"- unbestimmt -","class_name":"CSS-Klasse",browse:"Durchsuchen",close:"Schlie\u00dfen",cancel:"Abbrechen",update:"Aktualisieren",insert:"Einf\u00fcgen",apply:"\u00dcbernehmen","edit_confirm":"Soll dieser Text jetzt bearbeitet werden?","invalid_data_number":"{#field} muss eine Zahl sein","invalid_data_min":"{#field} muss eine Zahl gr\u00f6\u00dfer als {#min} sein","invalid_data_size":"{#field} muss eine Zahl oder ein Prozentwert sein",value:"(Wert)"},contextmenu:{full:"Blocksatz",right:"Rechtsb\u00fcndig",center:"Zentriert",left:"Linksb\u00fcndig",align:"Ausrichtung"},insertdatetime:{"day_short":"So,Mo,Di,Mi,Do,Fr,Sa,So","day_long":"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag","months_short":"Jan,Feb,M\u00e4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez","months_long":"Januar,Februar,M\u00e4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember","inserttime_desc":"Zeit einf\u00fcgen","insertdate_desc":"Datum einf\u00fcgen","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Drucken"},preview:{"preview_desc":"Vorschau"},directionality:{"rtl_desc":"Schrift von rechts nach links","ltr_desc":"Schrift von links nach rechts"},layer:{content:"Neue Ebene...","absolute_desc":"Absolute Positionierung","backward_desc":"Nach hinten legen","forward_desc":"Nach vorne holen","insertlayer_desc":"Neue Ebene einf\u00fcgen"},save:{"save_desc":"Speichern","cancel_desc":"Alle \u00c4nderungen verwerfen"},nonbreaking:{"nonbreaking_desc":"Gesch\u00fctztes Leerzeichen einf\u00fcgen"},iespell:{download:"ieSpell konnte nicht gefunden werden. Soll es installiert werden?","iespell_desc":"Rechtschreibpr\u00fcfung"},advhr:{"advhr_desc":"Trennlinie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Suchen/Ersetzen","search_desc":"Suchen","delta_width":"","delta_height":""},advimage:{"image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","delta_width":"","delta_height":""},advlink:{"link_desc":"Link einf\u00fcgen/ver\u00e4ndern","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attribute einf\u00fcgen/bearbeiten","ins_desc":"Eingef\u00fcgter Text","del_desc":"Entfernter Text","acronym_desc":"Akronym","abbr_desc":"Abk\u00fcrzung","cite_desc":"Quellenangabe","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles bearbeiten","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken stellt den Normalmodus wieder her.","plaintext_mode_sticky":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken (oder das Einf\u00fcgen aus der Zwischenablage) stellt den Normalmodus wieder her.","selectall_desc":"Alles ausw\u00e4hlen","paste_word_desc":"Mit Formatierungen (aus Word) einf\u00fcgen","paste_text_desc":"Als einfachen Text einf\u00fcgen"},"paste_dlg":{"word_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen."},table:{"cellprops_delta_width":"150",cell:"Zelle",col:"Spalte",row:"Zeile",del:"Tabelle l\u00f6schen","copy_row_desc":"Zeile kopieren","cut_row_desc":"Zeile ausschneiden","paste_row_after_desc":"Zeile unterhalb aus der Zwischenablage einf\u00fcgen","paste_row_before_desc":"Zeile oberhalb aus der Zwischenablage einf\u00fcgen","props_desc":"Eigenschaften der Tabelle","cell_desc":"Eigenschaften der Zelle","row_desc":"Eigenschaften der Zeile","merge_cells_desc":"Zellen verbinden","split_cells_desc":"Verbundene Zellen trennen","delete_col_desc":"Spalte l\u00f6schen","col_after_desc":"Spalte rechts einf\u00fcgen","col_before_desc":"Spalte links einf\u00fcgen","delete_row_desc":"Zeile l\u00f6schen","row_after_desc":"Zeile unterhalb einf\u00fcgen","row_before_desc":"Zeile oberhalb einf\u00fcgen",desc:"Tabelle erstellen/bearbeiten","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Beim wiederherstellen des gespeicherten Inhalts gehen die aktuellen Daten im Editor verloren.\n\nSoll der gespeicherte Inhalt wirklich wiederhergestellt werden?","restore_content":"Automatisch gespeicherten Inhalt wiederherstellen.","unload_msg":"Beim verlassen der Seite werden die \u00c4nderungen verloren gehen."},fullscreen:{desc:"Vollbildschirm"},media:{edit:"Multimediaeinbettung bearbeiten",desc:"Multimedia einbetten/bearbeiten","delta_height":"","delta_width":""},fullpage:{desc:"Dokument-Eigenschaften","delta_width":"","delta_height":""},template:{desc:"Inhalt aus Vorlage einf\u00fcgen"},visualchars:{desc:"Sichtbarkeit der Steuerzeichen an/aus"},spellchecker:{desc:"Rechtschreibpr\u00fcfung an/aus",menu:"Einstellungen der Rechtschreibpr\u00fcfung","ignore_word":"Wort ignorieren","ignore_words":"Alle ignorieren",langs:"Sprachen",wait:"Bitte warten...",sug:"Vorschl\u00e4ge","no_sug":"Keine Vorschl\u00e4ge","no_mpell":"Keine Rechtschreibfehler gefunden.","learn_word":"Zum W\u00f6rterbuch hinzuf\u00fcgen"},pagebreak:{desc:"Seitenumbruch einf\u00fcgen"},advlist:{types:"Typen",def:"Standard","lower_alpha":"a. b. c.","lower_greek":"1. 2. 3.","lower_roman":"i. ii. iii.","upper_alpha":"A. B. C.","upper_roman":"I. II. III.",circle:"Kreis",disc:"Punkt",square:"Quadrat"},colors:{"333300":"Dunkeloliv","993300":"Orange","000000":"Schwarz","003300":"Dunkelgr\u00fcn","003366":"Dunkles himmelblau","000080":"Marineblau","333399":"Indigoblau","333333":"Sehr dunkelgrau","800000":"Kastanienbraun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00fcn","008080":"Blaugr\u00fcn","0000FF":"Blau","666699":"Graublau","808080":"Grau",FF0000:"Rot",FF9900:"Bernsteinfarben","99CC00":"Gelbgr\u00fcn","339966":"Meergr\u00fcn","33CCCC":"T\u00fcrkis","3366FF":"K\u00f6nigsblau","800080":"Violett","999999":"Mittelgrau",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Gelb","00FF00":"Hellgr\u00fcn","00FFFF":"Aquamarinblau","00CCFF":"Himmelblau","993366":"Braun",C0C0C0:"Silber",FF99CC:"Rosa",FFCC99:"Pfirsichfarben",FFFF99:"Hellgelb",CCFFCC:"Blassgr\u00fcn",CCFFFF:"Blasst\u00fcrkis","99CCFF":"Helles himmelblau",CC99FF:"Pflaumenblau",FFFFFF:"Wei\u00df"},aria:{"rich_text_area":"Rich Text Bereich"},wordcount:{words:"W\u00f6rter: "}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/en.js b/ehcp/net2ftp/plugins/tinymce/langs/en.js new file mode 100644 index 0000000..16d7a93 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode_sticky":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"warning_message":"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/es.js b/ehcp/net2ftp/plugins/tinymce/langs/es.js new file mode 100644 index 0000000..f4fab66 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/es.js @@ -0,0 +1,154 @@ +tinyMCE.addI18n({es:{ +common:{ +edit_confirm:"\u00BFDesea utilizar el modo WYSIWYG para esta caja de texto?", +apply:"Aplicar", +insert:"Insertar", +update:"Actualizar", +cancel:"Cancelar", +close:"Cerrar", +browse:"Examinar", +class_name:"Clase", +not_set:"-- Ninguno --", +clipboard_msg:"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n\u00BFDesea obtener m\u00E1s informaci\u00F3n acerca de este tema?", +clipboard_no_support:"Su navegador no soporta las funciones de cortapapeles, use los accesos por teclado.", +popup_blocked:"Lo sentimos, su bloqueo de ventanas emergentes ha deshabilitado una ventana que provee funcionalidades a la aplicaci\u00F3n. Necesita deshabilitar este bloqueo en este sitio para poder utilizar todas las funciones.", +invalid_data:"Error: Introdujo un valor no v\u00E1lido, est\u00E1n marcados en rojo.", +more_colors:"M\u00E1s colores" +}, +contextmenu:{ +align:"Alineaci\u00F3n", +left:"Izquierda", +center:"Centrado", +right:"Derecha", +full:"Justificado" +}, +insertdatetime:{ +date_fmt:"%d-%m-%Y", +time_fmt:"%H:%M:%S", +insertdate_desc:"Insertar fecha", +inserttime_desc:"Insertar hora", +months_long:"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre", +months_short:"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic", +day_long:"Domingo,Lunes,Martes,Mi\u00E9rcoles,Jueves,Viernes,S\u00E1bado,Domingo", +day_short:"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom" +}, +print:{ +print_desc:"Imprimir" +}, +preview:{ +preview_desc:"Vista previa" +}, +directionality:{ +ltr_desc:"Direcci\u00F3n izquierda a derecha", +rtl_desc:"Direcci\u00F3n derecha a izquierda" +}, +layer:{ +insertlayer_desc:"Insertar nueva capa", +forward_desc:"Avanzar", +backward_desc:"Retroceder", +absolute_desc:"Cambiar a posici\u00F3n absoluta", +content:"Nueva capa..." +}, +save:{ +save_desc:"Guardar", +cancel_desc:"Cancelar todos los cambios" +}, +nonbreaking:{ +nonbreaking_desc:"Insertar caracter de espacio 'non-breaking'" +}, +iespell:{ +iespell_desc:"Corrector ortogr\u00E1fico", +download:"No se detect\u00F3 'ieSpell'. \u00BFDesea instalarlo ahora?" +}, +advhr:{ +advhr_desc:"Regla horizontal" +}, +emotions:{ +emotions_desc:"Emoticones" +}, +searchreplace:{ +search_desc:"Buscar", +replace_desc:"Buscar/Reemplazar" +}, +advimage:{ +image_desc:"Insertar/editar imagen" +}, +advlink:{ +link_desc:"Insertar/editar hiperv\u00EDnculo" +}, +xhtmlxtras:{ +cite_desc:"Cita", +abbr_desc:"Abreviatura", +acronym_desc:"Acr\u00F3nimo", +del_desc:"Borrado", +ins_desc:"Inserci\u00F3n", +attribs_desc:"Insertar/Editar atributos" +}, +style:{ +desc:"Editar Estilo CSS" +}, +paste:{ +paste_text_desc:"Pegar como texto plano", +paste_word_desc:"Pegar desde Word", +selectall_desc:"Seleccionar todo" +}, +paste_dlg:{ +text_title:"Use CTRL+V en su teclado para pegar el texto en la ventana.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V en su teclado para pegar el texto en la ventana." +}, +table:{ +desc:"Inserta una nueva tabla", +row_before_desc:"Insertar fila (antes)", +row_after_desc:"Insertar fila (despu\u00E9s)", +delete_row_desc:"Suprimir fila", +col_before_desc:"Insertar columna (antes)", +col_after_desc:"Insertar columna (despu\u00E9s)", +delete_col_desc:"Suprimir columna", +split_cells_desc:"Dividir celdas", +merge_cells_desc:"Vincular celdas", +row_desc:"Propiedades de la fila", +cell_desc:"Propiedades de la celda", +props_desc:"Propiedades de la tabla", +paste_row_before_desc:"Pegar filas (antes)", +paste_row_after_desc:"Pegar filas (despu\u00E9s)", +cut_row_desc:"Cortar fila", +copy_row_desc:"Copiar fila", +del:"Eliminar tabla", +row:"Fila", +col:"Columna", +cell:"Celda" +}, +autosave:{ +unload_msg:"Los cambios realizados se perder\u00E1n si sale de esta p\u00E1gina." +}, +fullscreen:{ +desc:"Cambiar a modo Pantalla Completa" +}, +media:{ +desc:"Insertar/editar medio embebido", +edit:"Editar medio embebido" +}, +fullpage:{ +desc:"Propiedades del documento" +}, +template:{ +desc:"Insertar contenido de plantilla predefinida" +}, +visualchars:{ +desc:"Caracteres de control ON/OFF." +}, +spellchecker:{ +desc:"Cambiar a corrector ortogr\u00E1fico", +menu:"Configuraci\u00F3n de corrector ortogr\u00E1fico", +ignore_word:"Ignorar", +ignore_words:"Ignorar todo", +langs:"Idiomas", +wait:"Espere...", +sug:"Sugerencias", +no_sug:"Sin sugerencias", +no_mpell:"No se encontraron errores." +}, +pagebreak:{ +desc:"Insertar fin de p\u00E1gina" +}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/fi.js b/ehcp/net2ftp/plugins/tinymce/langs/fi.js new file mode 100644 index 0000000..08eea14 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/fi.js @@ -0,0 +1 @@ +tinyMCE.addI18n({fi:{common:{"more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","invalid_data":"Virhe: Sy\u00f6tit virheellisi\u00e4 arvoja, ne n\u00e4kyv\u00e4t punaisina.","popup_blocked":"Sinulla on k\u00e4yt\u00f6ss\u00e4si ohjelma, joka est\u00e4\u00e4 ponnahdusikkunoiden n\u00e4yt\u00f6n. Sinun t\u00e4ytyy kytke\u00e4 ponnahdusikkunoiden esto pois p\u00e4\u00e4lt\u00e4 voidaksesi hy\u00f6dynt\u00e4\u00e4 t\u00e4ysin t\u00e4t\u00e4 ty\u00f6kalua.","clipboard_no_support":"Selaimesi ei ole tuettu, k\u00e4yt\u00e4 sen sijaan n\u00e4pp\u00e4inoikoteit\u00e4.","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 ei ole k\u00e4ytett\u00e4viss\u00e4 Mozilla ja Firefox -selaimilla.\nHaluatko lis\u00e4tietoa t\u00e4st\u00e4 ongelmasta?","not_set":"-- Ei m\u00e4\u00e4ritetty --","class_name":"Luokka",browse:"Selaa",close:"Sulje",cancel:"Peru",update:"P\u00e4ivit\u00e4",insert:"Lis\u00e4\u00e4",apply:"K\u00e4yt\u00e4","edit_confirm":"Haluatko k\u00e4ytt\u00e4\u00e4 WYSIWYG-tilaa t\u00e4ss\u00e4 tekstikent\u00e4ss\u00e4?","invalid_data_number":"{#field} t\u00e4ytyy olla numero","invalid_data_min":"{#field} t\u00e4ytyy olla suurempi numero kuin {#min}","invalid_data_size":"{#field} t\u00e4ytyy olla numero tai prosentti",value:"(arvo)"},contextmenu:{full:"Molemmille puolille",right:"Oikealle",center:"Keskelle",left:"Vasemmalle",align:"Tasaus"},insertdatetime:{"day_short":"su,ma,ti,ke,to,pe,la,su","day_long":"sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai","months_short":"tammi,helmi,maalis,huhti,touko,kes\u00e4,hein\u00e4,elo,syys,loka,marras,joulu","months_long":"tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kes\u00e4kuu,hein\u00e4kuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu","inserttime_desc":"Lis\u00e4\u00e4 kellonaika","insertdate_desc":"Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tulosta"},preview:{"preview_desc":"Esikatselu"},directionality:{"rtl_desc":"Suunta oikealta vasemmalle","ltr_desc":"Suunta vasemmalta oikealle"},layer:{content:"Uusi taso...","absolute_desc":"Absoluuttinen sijainti","backward_desc":"Siirr\u00e4 taaksep\u00e4in","forward_desc":"Siirr\u00e4 eteenp\u00e4in","insertlayer_desc":"Lis\u00e4\u00e4 uusi taso"},save:{"save_desc":"Tallenna","cancel_desc":"Peru kaikki muutokset"},nonbreaking:{"nonbreaking_desc":"Lis\u00e4\u00e4 tyhj\u00e4 merkki (nbsp)"},iespell:{download:"ieSpell-ohjelmaa ei havaittu. Haluatko asentaa sen nyt?","iespell_desc":"Oikeinkirjoituksen tarkistus"},advhr:{"advhr_desc":"Vaakatasoviivain","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hymi\u00f6t","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Etsi ja korvaa","search_desc":"Etsi","delta_width":"","delta_height":""},advimage:{"image_desc":"Lis\u00e4\u00e4/muokkaa kuvaa","delta_width":"","delta_height":""},advlink:{"link_desc":"Lis\u00e4\u00e4/muokkaa linkki\u00e4","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Lis\u00e4\u00e4/muokkaa attribuutteja","ins_desc":"Lis\u00e4ys","del_desc":"Poisto","acronym_desc":"Kirjainlyhenne","abbr_desc":"Lyhenne","cite_desc":"Sitaatti","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Muokkaa CSS-tyylej\u00e4","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan.","plaintext_mode_sticky":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan. Palaat takaisin tavalliseen tilaan liitetty\u00e4si jotakin.","selectall_desc":"Valitse kaikki","paste_word_desc":"Liit\u00e4 Wordist\u00e4","paste_text_desc":"Liit\u00e4 pelkk\u00e4n\u00e4 tekstin\u00e4"},"paste_dlg":{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."},table:{"cellprops_delta_width":"80",cell:"Solu",col:"Sarake",row:"Rivi",del:"Poista taulukko","copy_row_desc":"Kopioi taulukon rivi","cut_row_desc":"Leikkaa taulukon rivi","paste_row_after_desc":"Liit\u00e4 taulukon rivi j\u00e4lkeen","paste_row_before_desc":"Liit\u00e4 taulukon rivi ennen","props_desc":"Taulukon asetukset","cell_desc":"Taulukon solun asetukset","row_desc":"Taulukon rivin asetukset","merge_cells_desc":"Yhdist\u00e4 taulukon solut","split_cells_desc":"Jaa yhdistetyt taulukon solut","delete_col_desc":"Poista sarake","col_after_desc":"Lis\u00e4\u00e4 sarake j\u00e4lkeen","col_before_desc":"Lis\u00e4\u00e4 sarake ennen","delete_row_desc":"Poista rivi","row_after_desc":"Lis\u00e4\u00e4 rivi j\u00e4lkeen","row_before_desc":"Lis\u00e4\u00e4 rivi ennen",desc:"Lis\u00e4\u00e4 uusi taulukko","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Jos palautat automaattisesti tallennetun sis\u00e4ll\u00f6n, menet\u00e4t t\u00e4ll\u00e4 hetkell\u00e4 editorissa olevan sis\u00e4ll\u00f6n.\n\nHaluatko varmasti palauttaa tallennetun sis\u00e4ll\u00f6n?","restore_content":"Palauta automaattisesti tallennettu sis\u00e4lt\u00f6.","unload_msg":"Tekem\u00e4si muutokset menetet\u00e4\u00e4n jos poistut t\u00e4lt\u00e4 sivulta."},fullscreen:{desc:"Kokoruututila"},media:{edit:"Muokkaa upotettua mediaa",desc:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","delta_height":"","delta_width":""},fullpage:{desc:"Tiedoston asetukset","delta_width":"","delta_height":""},template:{desc:"Lis\u00e4\u00e4 esim\u00e4\u00e4ritetty\u00e4 sivupohjasis\u00e4lt\u00f6\u00e4"},visualchars:{desc:"N\u00e4yt\u00e4/piilota muotoilumerkit."},spellchecker:{desc:"Oikeinkirjoituksen tarkistus",menu:"Oikeinkirjoituksen asetukset","ignore_word":"Ohita sana","ignore_words":"Ohita kaikki",langs:"Kielet",wait:"Odota ole hyv\u00e4...",sug:"Ehdotukset","no_sug":"Ei ehdotuksia","no_mpell":"Virheit\u00e4 ei l\u00f6ytynyt.","learn_word":"Opettele sana"},pagebreak:{desc:"Lis\u00e4\u00e4 sivunvaihto."},advlist:{types:"Tyypit",def:"Oletus","lower_alpha":"pienet kirjaimet: a, b, c","lower_greek":"pienet kirjaimet: \u03b1, \u03b2, \u03b3","lower_roman":"pienet kirjaimet: i, ii, iii","upper_alpha":"isot kirjaimet: A, B, C","upper_roman":"isot kirjaimet: I, II, III",circle:"Pallo",disc:"Ympyr\u00e4",square:"Neli\u00f6"},colors:{"333300":"Tummanoliivi","993300":"Tummanoranssi","000000":"Musta","003300":"Tummanvihre\u00e4","003366":"Tummantaivaansininen","000080":"Laivaston sininen","333399":"Indigonsininen","333333":"Hyvin tummanharmaa","800000":"Punaruskea",FF6600:"Oranssi","808000":"Oliivi","008000":"Vihre\u00e4","008080":"Sinivihre\u00e4","0000FF":"Sininen","666699":"Harmaansininen","808080":"Harmaa",FF0000:"Punainen",FF9900:"Kullanruskea","99CC00":"Keltaisenvihre\u00e4","339966":"Merenvihre\u00e4","33CCCC":"Turkoosi","3366FF":"Syv\u00e4n sininen","800080":"Violetti","999999":"Keskiharmaa",FF00FF:"Magenta",FFCC00:"Kulta",FFFF00:"Keltainen","00FF00":"Lime","00FFFF":"Sinivihre\u00e4","00CCFF":"Taivaansininen","993366":"Ruskea",C0C0C0:"Hopea",FF99CC:"Vaaleanpunainen",FFCC99:"Persikka",FFFF99:"Vaaleankeltainen",CCFFCC:"Haalistuneen vihre\u00e4",CCFFFF:"Haalistuneen syaani","99CCFF":"Vaaleantaivaansininen",CC99FF:"Luumunpunainen",FFFFFF:"Valkoinen"},aria:{"rich_text_area":"Rikastettu tekstialue"},wordcount:{words:"Sanaa:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/fr.js b/ehcp/net2ftp/plugins/tinymce/langs/fr.js new file mode 100644 index 0000000..b9cfd8b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/fr.js @@ -0,0 +1 @@ +tinyMCE.addI18n({fr:{common:{"more_colors":"Plus de couleurs","invalid_data":"Erreur : saisie de valeurs incorrectes. Elles sont mises en \u00e9vidence en rouge.","popup_blocked":"D\u00e9sol\u00e9, nous avons d\u00e9tect\u00e9 que votre bloqueur de popup a bloqu\u00e9 une fen\u00eatre dont l\'application a besoin. Vous devez d\u00e9sactiver votre bloqueur de popup pour pouvoir utiliser cet outil.","clipboard_no_support":"Actuellement non support\u00e9 par votre navigateur.\n Veuillez utiliser les raccourcis clavier \u00e0 la place.","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","not_set":"-- non d\u00e9fini --","class_name":"Classe",browse:"parcourir",close:"Fermer",cancel:"Annuler",update:"Mettre \u00e0 jour",insert:"Ins\u00e9rer",apply:"Appliquer","edit_confirm":"Souhaitez-vous utiliser le mode WYSIWYG pour cette zone de texte ?","invalid_data_number":"{#field} doit \u00eatre un nombre","invalid_data_min":"{#field} doit \u00eatre un nombre plus grand que {#min}","invalid_data_size":"{#field} doit \u00eatre un nombre ou un pourcentage",value:"(valeur)"},contextmenu:{full:"Justifi\u00e9",right:"Droite",center:"Centr\u00e9",left:"Gauche",align:"Alignement"},insertdatetime:{"day_short":"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim","day_long":"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche","months_short":"Jan,F\u00e9v,Mar,Avr,Mai,Juin,Juil,Ao\u00fbt,Sep,Oct,Nov,D\u00e9c","months_long":"Janvier,F\u00e9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00fbt,Septembre,Octobre,Novembre,D\u00e9cembre","inserttime_desc":"Ins\u00e9rer l\'heure","insertdate_desc":"Ins\u00e9rer la date","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimer"},preview:{"preview_desc":"Pr\u00e9visualiser"},directionality:{"rtl_desc":"\u00c9criture de droite \u00e0 gauche","ltr_desc":"\u00c9criture de gauche \u00e0 droite"},layer:{content:"Nouvelle couche\u2026","absolute_desc":"Activer le positionnement absolu","backward_desc":"D\u00e9placer vers l\'arri\u00e8re","forward_desc":"D\u00e9placer vers l\'avant","insertlayer_desc":"Ins\u00e9rer une nouvelle couche"},save:{"save_desc":"Enregistrer","cancel_desc":"Annuler toutes les modifications"},nonbreaking:{"nonbreaking_desc":"Ins\u00e9rer une espace ins\u00e9cable"},iespell:{download:"ieSpell n\'est pas install\u00e9. Souhaitez-vous l\'installer maintenant ?","iespell_desc":"Lancer le v\u00e9rificateur d\'orthographe"},advhr:{"delta_height":"Ecart de hauteur","delta_width":"Ecart de largeur","advhr_desc":"Ins\u00e9rer un trait horizontal"},emotions:{"delta_height":"delta_height","delta_width":"delta_width","emotions_desc":"\u00c9motic\u00f4nes"},searchreplace:{"replace_desc":"Rechercher / remplacer","search_desc":"Rechercher","delta_width":"","delta_height":""},advimage:{"image_desc":"Ins\u00e9rer / \u00e9diter une image","delta_width":"","delta_height":""},advlink:{"link_desc":"Ins\u00e9rer / \u00e9diter un lien","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ins\u00e9rer / \u00e9diter les attributs","ins_desc":"Ins\u00e9r\u00e9","del_desc":"Barr\u00e9","acronym_desc":"Acronyme","abbr_desc":"Abr\u00e9viation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u00c9diter la feuille de style (CSS)","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire.","plaintext_mode_sticky":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire. Apr\u00e8s avoir coll\u00e9 quelque chose, vous retournerez en mode de collage ordinaire.","selectall_desc":"Tout s\u00e9lectionner","paste_word_desc":"Coller un texte cr\u00e9\u00e9 sous Word","paste_text_desc":"Coller comme texte brut"},"paste_dlg":{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."},table:{cell:"Cellule",col:"Colonne",row:"Ligne",del:"Effacer le tableau","copy_row_desc":"Copier la ligne","cut_row_desc":"Couper la ligne","paste_row_after_desc":"Coller la ligne apr\u00e8s","paste_row_before_desc":"Coller la ligne avant","props_desc":"Propri\u00e9t\u00e9s du tableau","cell_desc":"Propri\u00e9t\u00e9s de la cellule","row_desc":"Propri\u00e9t\u00e9s de la ligne","merge_cells_desc":"Fusionner les cellules","split_cells_desc":"Scinder les cellules fusionn\u00e9es","delete_col_desc":"Effacer la colonne","col_after_desc":"Ins\u00e9rer une colonne apr\u00e8s","col_before_desc":"Ins\u00e9rer une colonne avant","delete_row_desc":"Effacer la ligne","row_after_desc":"Ins\u00e9rer une ligne apr\u00e8s","row_before_desc":"Ins\u00e9rer une ligne avant",desc:"Ins\u00e9rer un nouveau tableau","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Si vous restaurez le contenu sauv\u00e9, vous perdrez le contenu qui est actuellement dans l\'\u00e9diteur.\n\n\u00cates-vous s\u00fbr de vouloir restaurer le contenu sauv\u00e9 ?","restore_content":"Restaurer le contenu auto-sauvegard\u00e9.","unload_msg":"Les modifications apport\u00e9es seront perdues si vous quittez cette page."},fullscreen:{desc:"Passer en mode plein \u00e9cran"},media:{edit:"\u00c9diter un m\u00e9dia incorpor\u00e9",desc:"Ins\u00e9rer / \u00e9diter un m\u00e9dia incorpor\u00e9","delta_height":"","delta_width":""},fullpage:{desc:"Propri\u00e9t\u00e9s du document","delta_width":"","delta_height":""},template:{desc:"Ins\u00e9rer un mod\u00e8le pr\u00e9d\u00e9fini."},visualchars:{desc:"Activer les caract\u00e8res de mise en page."},spellchecker:{desc:"Activer le v\u00e9rificateur d\'orthographe",menu:"Param\u00e8tres du v\u00e9rificateur d\'orthographe","ignore_word":"Ignorer le mot","ignore_words":"Tout ignorer",langs:"Langues",wait:"Veuillez patienter\u2026",sug:"Suggestions","no_sug":"Aucune suggestion","no_mpell":"Aucune erreur trouv\u00e9e.","learn_word":"Apprendre le mot"},pagebreak:{desc:"Ins\u00e9rer un saut de page."},advlist:{types:"Types",def:"D\u00e9faut","lower_alpha":"Alpha minuscule","lower_greek":"Grec minuscule","lower_roman":"Romain minuscule","upper_alpha":"Alpha majuscule","upper_roman":"Romain majuscule",circle:"Cercle",disc:"Disque",square:"Carr\u00e9"},colors:{"333300":"Olive fonc\u00e9","993300":"Orange br\u00fbl\u00e9","000000":"Noir","003300":"Vert fonc\u00e9","003366":"Azur fonc\u00e9","000080":"Bleu marine","333399":"Indigo","333333":"Gris tr\u00e8s fonc\u00e9","800000":"Bordeaux",FF6600:"Orange","808000":"Olive","008000":"Vert","008080":"Sarcelle","0000FF":"Bleu","666699":"Bleu gris\u00e2tre","808080":"Gris",FF0000:"Rouge",FF9900:"Ambre","99CC00":"Jaune vert","339966":"Mer verte","33CCCC":"Turquoise","3366FF":"Bleu royal","800080":"Violet","999999":"Gris moyen",FF00FF:"Magenta",FFCC00:"Or",FFFF00:"Jaune","00FF00":"Lime","00FFFF":"Bleu vert","00CCFF":"Bleu ciel","993366":"Brun",C0C0C0:"Argent",FF99CC:"Rose",FFCC99:"P\u00eache",FFFF99:"Jaune clair",CCFFCC:"Vert p\u00e2le",CCFFFF:"Cyan p\u00e2le","99CCFF":"Bleu ciel clair",CC99FF:"Prune",FFFFFF:"Blanc"},aria:{"rich_text_area":"Texte riche"},wordcount:{words:"Mots:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/he.js b/ehcp/net2ftp/plugins/tinymce/langs/he.js new file mode 100644 index 0000000..c70b24f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/he.js @@ -0,0 +1 @@ +tinyMCE.addI18n({he:{common:{"more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","invalid_data":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05d5\u05e7\u05dc\u05d3 \u05de\u05d9\u05d3\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05e0\u05d9. \u05d4\u05de\u05d9\u05d3\u05e2 \u05e1\u05d5\u05de\u05df \u05d1\u05d0\u05d3\u05d5\u05dd.","popup_blocked":"\u05d7\u05d5\u05e1\u05dd \u05e4\u05e8\u05d9\u05d8\u05d9\u05dd \u05de\u05d5\u05e7\u05e4\u05e6\u05d9\u05dd \u05de\u05e0\u05e2 \u05de\u05d7\u05dc\u05d5\u05df \u05d7\u05e9\u05d5\u05d1 \u05de\u05dc\u05d4\u05e4\u05ea\u05d7,\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05db\u05dc\u05d9 \u05d6\u05d4 \u05e2\u05dc\u05d9\u05da \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d7\u05d5\u05e1\u05dd \u05d4\u05e4\u05e8\u05d9\u05d8\u05d9\u05dd","clipboard_no_support":"\u05db\u05e8\u05d2\u05e2 \u05dc\u05d0 \u05e0\u05ea\u05de\u05da \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da. \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d4\u05de\u05e7\u05dc\u05d3\u05ea.","clipboard_msg":"\n \u05d4\u05e2\u05ea\u05e7\u05d4/\u05d2\u05d6\u05d9\u05e8\u05d4 \u05d5\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d0\u05d9\u05e0\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?\n ","not_set":"-- \u05dc\u05d0 \u05d4\u05d5\u05d2\u05d3\u05e8 --","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",browse:"\u05e2\u05d9\u05d5\u05df",close:"\u05e1\u05d2\u05d9\u05e8\u05d4",cancel:"\u05d1\u05d9\u05d8\u05d5\u05dc",update:"\u05e2\u05d3\u05db\u05d5\u05df",insert:"\u05d4\u05d5\u05e1\u05e4\u05d4",apply:"\u05d0\u05d9\u05e9\u05d5\u05e8","edit_confirm":"\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e2\u05d5\u05e8\u05da \u05d4\u05de\u05ea\u05e7\u05d3\u05dd?","invalid_data_number":"{#field} \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8","invalid_data_min":"{#field} \u05d4\u05de\u05e1\u05e4\u05e8 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc \u05de-{#min}","invalid_data_size":"{#field} \u05d4\u05e2\u05e8\u05da \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8 \u05d0\u05d5 \u05d0\u05d7\u05d5\u05d6",value:"(\u05e2\u05e8\u05da)"},contextmenu:{full:"\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd",right:"\u05d9\u05de\u05d9\u05df",center:"\u05d0\u05de\u05e6\u05e2",left:"\u05e9\u05de\u05d0\u05dc",align:"\u05d9\u05d9\u05e9\u05d5\u05e8"},insertdatetime:{"day_short":"\u05d9\u05d5\u05dd \u05d0\',\u05d9\u05d5\u05dd \u05d1\',\u05d9\u05d5\u05dd \u05d2\',\u05d9\u05d5\u05dd \u05d3\',\u05d9\u05d5\u05dd \u05d4\',\u05d9\u05d5\u05dd \u05d5\',\u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05d0\'","day_long":"\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df,\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9,\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9,\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9,\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","months_short":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","months_long":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","inserttime_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05d6\u05de\u05df","insertdate_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05ea\u05d0\u05e8\u05d9\u05da","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"\u05d4\u05d3\u05e4\u05e1\u05d4"},preview:{"preview_desc":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4"},directionality:{"rtl_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","ltr_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df"},layer:{content:"\u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4...","absolute_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05de\u05d9\u05e7\u05d5\u05dd \u05de\u05d5\u05d7\u05dc\u05d8","backward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05d0\u05d7\u05d5\u05e8\u05d4","forward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05e7\u05d3\u05d9\u05de\u05d4","insertlayer_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4"},save:{"save_desc":"\u05e9\u05de\u05d9\u05e8\u05d4","cancel_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05db\u05dc \u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05dd"},nonbreaking:{"nonbreaking_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e8\u05d5\u05d5\u05d7"},iespell:{download:" \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 ieSpell. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05ea\u05e7\u05d9\u05df?","iespell_desc":"\u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea"},advhr:{"advhr_desc":"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u05d4\u05d7\u05dc\u05e4\u05d4","search_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9","delta_width":"","delta_height":""},advimage:{"image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","delta_width":"","delta_height":""},advlink:{"link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05ea\u05db\u05d5\u05e0\u05d5\u05ea","ins_desc":"\u05d4\u05db\u05e0\u05e1\u05d4","del_desc":"\u05de\u05d7\u05d9\u05e7\u05d4","acronym_desc":"\u05e8\u05d0\u05e9\u05d9 \u05ea\u05d9\u05d1\u05d5\u05ea","abbr_desc":"\u05e7\u05d9\u05e6\u05d5\u05e8","cite_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode_sticky":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc","paste_word_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05de-WORD","paste_text_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05db\u05d8\u05e7\u05e1\u05d8 \u05d1\u05dc\u05d1\u05d3"},"paste_dlg":{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."},table:{cell:"\u05ea\u05d0",col:"\u05e2\u05de\u05d5\u05d3\u05d4",row:"\u05e9\u05d5\u05e8\u05d4",del:"\u05de\u05d7\u05d9\u05e7\u05ea \u05d8\u05d1\u05dc\u05d4","copy_row_desc":"\u05d4\u05e2\u05ea\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","cut_row_desc":"\u05d2\u05d6\u05d9\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","paste_row_after_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05d0\u05d7\u05e8\u05d9","paste_row_before_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05dc\u05e4\u05e0\u05d9","props_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","cell_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","merge_cells_desc":"\u05d0\u05d9\u05d7\u05d5\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","split_cells_desc":"\u05e4\u05d9\u05e6\u05d5\u05dc \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","delete_col_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05de\u05d5\u05d3\u05d4","col_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","col_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05d9\u05de\u05d9\u05df","delete_row_desc":"\u05de\u05d7\u05d9\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4","row_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","row_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc",desc:"\u05d4\u05db\u05e0\u05e1\u05ea \u05d0\u05d5 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u05d0\u05dd \u05ea\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05e8\u05d9\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4, \u05ea\u05d0\u05d1\u05d3 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05de\u05e6\u05d0 \u05db\u05e2\u05ea \u05d1\u05e2\u05d5\u05e8\u05da. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4?.","restore_content":"\u05e9\u05d7\u05d6\u05d5\u05e8 \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05e9\u05de\u05d5\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea","unload_msg":"\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05e9\u05de\u05e8\u05d5 \u05d0\u05dd \u05ea\u05e2\u05d1\u05d5\u05e8 \u05de\u05d3\u05e3 \u05d6\u05d4"},fullscreen:{desc:"\u05de\u05e2\u05d1\u05e8 \u05dc\u05de\u05e1\u05da \u05de\u05dc\u05d0/\u05d7\u05dc\u05e7\u05d9"},media:{edit:"\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df",desc:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","delta_height":"","delta_width":""},fullpage:{desc:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05de\u05d5\u05d3","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"\u05d4\u05e6\u05d2/\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d5\u05d5\u05d9 \u05d1\u05e7\u05e8\u05d4"},spellchecker:{desc:"\u05d4\u05e4\u05e2\u05dc\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea",menu:"\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea","ignore_word":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05de\u05d9\u05dc\u05d4","ignore_words":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05db\u05dc",langs:"\u05e9\u05e4\u05d5\u05ea",wait:"\u05e0\u05d0 \u05dc\u05d4\u05de\u05ea\u05d9\u05df..",sug:"\u05d4\u05e6\u05e2\u05d5\u05ea","no_sug":"\u05d0\u05d9\u05df \u05d4\u05e6\u05e2\u05d5\u05ea","no_mpell":"\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05d0\u05d9\u05d5\u05ea","learn_word":"\u05dc\u05de\u05d3 \u05de\u05d9\u05dc\u05d9\u05dd"},pagebreak:{desc:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05de\u05e2\u05d1\u05e8 \u05d3\u05e3"},advlist:{types:"\u05e1\u05d5\u05d2\u05d9\u05dd",def:"\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc","lower_alpha":"\u05d0\u05dc\u05e4\u05d0 \u05ea\u05d7\u05ea\u05d9","lower_greek":"\u05d9\u05d5\u05d5\u05e0\u05d9 \u05ea\u05d7\u05ea\u05d9","lower_roman":"\u05e8\u05d5\u05de\u05d0\u05d9 \u05ea\u05d7\u05ea\u05d9","upper_alpha":"\u05d0\u05dc\u05e4\u05d0 \u05e2\u05d9\u05dc\u05d9","upper_roman":"\u05e8\u05d5\u05de\u05d0\u05d9 \u05e2\u05d9\u05dc\u05d9",circle:"\u05e2\u05d2\u05d5\u05dc",disc:"\u05d3\u05d9\u05e1\u05e7",square:"\u05de\u05e8\u05d5\u05d1\u05e2"},colors:{"333300":"\u05d6\u05d9\u05ea \u05db\u05d4\u05d4","993300":"\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4","000000":"\u05e9\u05d7\u05d5\u05e8","003300":"\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4","003366":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4","000080":"\u05db\u05d7\u05d5\u05dc \u05e6\u05d9","333399":"\u05d0\u05d9\u05e0\u05d3\u05d9\u05d2\u05d5","333333":"\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4 \u05de\u05d0\u05d5\u05d3","800000":"\u05e2\u05e8\u05de\u05d5\u05e0\u05d9",FF6600:"\u05db\u05ea\u05d5\u05dd","808000":"\u05d6\u05d9\u05ea","008000":"\u05d9\u05e8\u05d5\u05e7","008080":"\u05d9\u05e8\u05d5\u05e7-\u05db\u05d7\u05d5\u05dc \u05e2\u05de\u05d5\u05e7","0000FF":"\u05db\u05d7\u05d5\u05dc","666699":"\u05db\u05d7\u05d5\u05dc \u05d0\u05e4\u05e8\u05e4\u05e8","808080":"\u05d0\u05e4\u05d5\u05e8",FF0000:"\u05d0\u05d3\u05d5\u05dd",FF9900:"\u05e2\u05e0\u05d1\u05e8","99CC00":"\u05d9\u05e8\u05d5\u05e7 \u05e6\u05d4\u05d1\u05d4\u05d1","339966":"\u05d9\u05e8\u05d5\u05e7 \u05d9\u05dd","33CCCC":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6","3366FF":"\u05db\u05d7\u05d5\u05dc \u05e8\u05d5\u05d9\u05d0\u05dc","800080":"\u05e1\u05d2\u05d5\u05dc","999999":"\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d9\u05d9\u05dd",FF00FF:"\u05e1\u05d2\u05d5\u05dc-\u05d5\u05e8\u05d5\u05d3 (\u05de\u05d2\u05f3\u05e0\u05d8\u05d4)",FFCC00:"\u05d6\u05d4\u05d1",FFFF00:"\u05e6\u05d4\u05d5\u05d1","00FF00":"\u05dc\u05d9\u05d9\u05dd","00FFFF":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05de\u05d9\u05dd","00CCFF":"\u05ea\u05db\u05dc\u05ea","993366":"\u05d7\u05d5\u05dd",C0C0C0:"\u05db\u05e1\u05e3",FF99CC:"\u05d5\u05e8\u05d5\u05d3",FFCC99:"\u05d0\u05e4\u05e8\u05e1\u05e7",FFFF99:"\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8",CCFFCC:"\u05d9\u05e8\u05d5\u05e7 \u05d7\u05d9\u05d5\u05d5\u05e8",CCFFFF:"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05d1\u05d4\u05d9\u05e8","99CCFF":"\u05ea\u05db\u05dc\u05ea \u05d1\u05d4\u05d9\u05e8",CC99FF:"\u05d5\u05e8\u05d5\u05d3 \u05e2\u05de\u05d5\u05e7",FFFFFF:"\u05dc\u05d1\u05df"},aria:{"rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05d5\u05e8\u05da \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8"},wordcount:{words:"\u05de\u05d9\u05dc\u05d9\u05dd:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/hu.js b/ehcp/net2ftp/plugins/tinymce/langs/hu.js new file mode 100644 index 0000000..71a3b76 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/hu.js @@ -0,0 +1 @@ +tinyMCE.addI18n({hu:{common:{"more_colors":"Tov\u00e1bbi sz\u00ednek...","invalid_data":"Hiba: Az \u00e9rv\u00e9nytelen adatok, pirossal jel\u00f6lve.","popup_blocked":"A felugr\u00f3 ablakok tilt\u00e1sa miatt nem siker\u00fclt megjelen\u00edteni egy, az alkalmaz\u00e1shoz sz\u00fcks\u00e9ges ablakot. Enged\u00e9lyezze a b\u00f6ng\u00e9sz\u0151j\u00e9ben a felugr\u00f3 ablakokat, hogy minden funkci\u00f3t haszn\u00e1lhasson.","clipboard_no_support":"Jelenleg nem t\u00e1mogatja a b\u00f6ng\u00e9sz\u0151je, haszn\u00e1lja a billenty\u0171kombin\u00e1ci\u00f3kat helyette.","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151k el Mozilla \u00e9s Firefox alatt.\nK\u00edv\u00e1n t\u00f6bbet megtudni err\u0151l a t\u00e9m\u00e1r\u00f3l?","not_set":"-- Nincs megadva --","class_name":"Oszt\u00e1ly",browse:"Tall\u00f3z\u00e1s",close:"Bez\u00e1r\u00e1s",cancel:"M\u00e9gsem",update:"Friss\u00edt\u00e9s",insert:"Besz\u00far\u00e1s",apply:"Alkalmaz","edit_confirm":"Haszn\u00e1lni k\u00edv\u00e1nja a (WYSIWYG) sz\u00f6vegszerkeszt\u0151 m\u00f3dot ebben a sz\u00f6vegdobozban?","invalid_data_number":"{#field} sz\u00e1m kell legyen","invalid_data_min":"{#field} egy nagyobb sz\u00e1m kell legyen, mint {#min}","invalid_data_size":"{#field} egy sz\u00e1m vagy sz\u00e1zal\u00e9k kell legyen",value:"(\u00e9rt\u00e9k)"},contextmenu:{full:"Sorkiz\u00e1rt",right:"Jobbra",center:"K\u00f6z\u00e9pre",left:"Balra",align:"Igaz\u00edt\u00e1s"},insertdatetime:{"day_short":"V,H,K,Sze,Cs,P,Szo,V","day_long":"vas\u00e1rnap,h\u00e9tf\u0151,kedd,szerda,cs\u00fct\u00f6rt\u00f6k,p\u00e9ntek,szombat,vas\u00e1rnap","months_short":"Jan,Feb,M\u00e1r,\u00c1pr,M\u00e1j,J\u00fan,J\u00fal,Aug,Szept,Okt,Nov,Dec","months_long":"janu\u00e1r,febru\u00e1r,m\u00e1rcius,\u00e1prilis,m\u00e1jus,j\u00fanius,j\u00falius,augusztus,szeptember,okt\u00f3ber,november,december","inserttime_desc":"Id\u0151 besz\u00far\u00e1sa","insertdate_desc":"D\u00e1tum besz\u00far\u00e1sa","time_fmt":"%H:%M:%S","date_fmt":"%Y. %m. %d."},print:{"print_desc":"Nyomtat\u00e1s"},preview:{"preview_desc":"El\u0151n\u00e9zet"},directionality:{"rtl_desc":"Jobbr\u00f3l balra","ltr_desc":"Balr\u00f3l jobbra"},layer:{content:"\u00daj r\u00e9teg...","absolute_desc":"Abszol\u00fat poz\u00edci\u00f3 megad\u00e1s ki-/bekapcsol\u00e1sa","backward_desc":"Mozgat\u00e1s h\u00e1tra","forward_desc":"Mozgat\u00e1s el\u0151re","insertlayer_desc":"\u00daj r\u00e9teg besz\u00far\u00e1sa"},save:{"save_desc":"Ment\u00e9s","cancel_desc":"Minden m\u00f3dos\u00edt\u00e1s elvet\u00e9se"},nonbreaking:{"nonbreaking_desc":"Nem (sor)t\u00f6rhet\u0151 sz\u00f3k\u00f6z besz\u00far\u00e1sa"},iespell:{download:"ieSpell nem tal\u00e1lhat\u00f3. Telep\u00edti most?","iespell_desc":"Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s futtat\u00e1sa"},advhr:{"advhr_desc":"V\u00edzszintes vonal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hangulatjelek","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Keres\u00e9s/Csere","search_desc":"Keres\u00e9s","delta_width":"","delta_height":""},advimage:{"image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_width":"","delta_height":""},advlink:{"link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Tulajdons\u00e1gok besz\u00far\u00e1sa/szerkeszt\u00e9se","ins_desc":"Besz\u00far\u00e1s","del_desc":"T\u00f6r\u00f6l\u00e9s","acronym_desc":"Bet\u0171sz\u00f3","abbr_desc":"R\u00f6vid\u00edt\u00e9s","cite_desc":"Id\u00e9zet","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS st\u00edlus szerkeszt\u00e9se","delta_height":"","delta_width":""},paste:{"plaintext_mode":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz.","plaintext_mode_sticky":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz. Miut\u00e1n besz\u00far valamit, visszaker\u00fcl norm\u00e1l m\u00f3dba.","selectall_desc":"Mindent kijel\u00f6l","paste_word_desc":"Besz\u00far\u00e1s Wordb\u0151l","paste_text_desc":"Besz\u00far\u00e1s egyszer\u0171 sz\u00f6vegk\u00e9nt"},"paste_dlg":{"word_title":"Haszn\u00e1lja a Ctrl V-t a billenty\u0171zet\u00e9n a sz\u00f6veg beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl V-t a billenty\u0171zet\u00e9n a sz\u00f6veg beilleszt\u00e9shez."},table:{cell:"Cella",col:"Oszlop",row:"Sor",del:"T\u00e1bl\u00e1zat t\u00f6rl\u00e9se","copy_row_desc":"Sor m\u00e1sol\u00e1sa","cut_row_desc":"Sor kiv\u00e1g\u00e1sa","paste_row_after_desc":"Sor bem\u00e1sol\u00e1sa ut\u00e1na","paste_row_before_desc":"Sor bem\u00e1sol\u00e1sa el\u00e9","props_desc":"T\u00e1bl\u00e1zat tulajdons\u00e1gai","cell_desc":"Cella tulajdons\u00e1gai","row_desc":"Sor tulajdons\u00e1gai","merge_cells_desc":"Cell\u00e1k egyes\u00edt\u00e9se","split_cells_desc":"Egyes\u00edtett cell\u00e1k feloszt\u00e1sa","delete_col_desc":"Oszlop t\u00f6rl\u00e9se","col_after_desc":"Oszlop besz\u00far\u00e1sa ut\u00e1na","col_before_desc":"Oszlop besz\u00far\u00e1sa el\u00e9","delete_row_desc":"Sor t\u00f6rl\u00e9se","row_after_desc":"Sor besz\u00far\u00e1sa ut\u00e1na","row_before_desc":"Sor besz\u00far\u00e1sa el\u00e9",desc:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ha visszat\u00f6lti a mentett be\u00e1ll\u00edt\u00e1sokat, a jelenlegi \u00e1llapot elv\u00e9sz.\n\nBiztosan visszat\u00f6lti a mentett \u00e1llapotot?","restore_content":"Automatikus ment\u00e9s bet\u00f6lt\u00e9se.","unload_msg":"A m\u00f3dos\u00edt\u00e1sok nem lesznek mentve, ha elhagyja az oldalt."},fullscreen:{desc:"Teljesk\u00e9perny\u0151s m\u00f3d ki-/bekapcsol\u00e1sa"},media:{edit:"Be\u00e1gyazott m\u00e9dia szerkeszt\u00e9se",desc:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentum tulajdons\u00e1gai","delta_width":"","delta_height":""},template:{desc:"Sablon beilleszt\u00e9se"},visualchars:{desc:"Vizu\u00e1lis vez\u00e9rl\u0151karakterek be-/kikapcsol\u00e1sa"},spellchecker:{desc:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 ki-/bekapcsol\u00e1sa",menu:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 be\u00e1ll\u00edt\u00e1sok","ignore_word":"Sz\u00f3 kihagy\u00e1sa","ignore_words":"Mindet kihagy",langs:"Nyelvek",wait:"K\u00e9rem, v\u00e1rjon...",sug:"Aj\u00e1nl\u00e1sok","no_sug":"Nincs aj\u00e1nl\u00e1s","no_mpell":"Nem tal\u00e1ltam helyes\u00edr\u00e1si hib\u00e1t.","learn_word":"Sz\u00f3 megjegyz\u00e9se"},pagebreak:{desc:"Oldalt\u00f6r\u00e9s besz\u00far\u00e1sa a nyomtat\u00e1shoz"},advlist:{types:"T\u00edpusok",def:"Alap\u00e9rtelmezett","lower_alpha":"Kisbet\u0171s abc","lower_greek":"Kisbet\u0171s g\u00f6r\u00f6g","lower_roman":"Kisbet\u0171s r\u00f3mai","upper_alpha":"Nagybet\u0171s ABC","upper_roman":"Nagybet\u0171s r\u00f3mai",circle:"Karika",disc:"P\u00f6tty",square:"N\u00e9gyzet"},colors:{"333300":"S\u00f6t\u00e9t ol\u00edv","993300":"\u00c9g\u0151 narancs","000000":"Fekete","003300":"S\u00f6t\u00e9t z\u00f6ld","003366":"S\u00f6t\u00e9t az\u00far","000080":"Tenger k\u00e9k","333399":"Indig\u00f3","333333":"Nagyon s\u00f6t\u00e9tsz\u00fcrke","800000":"Gesztenyebarna",FF6600:"Narancs","808000":"Ol\u00edv","008000":"Z\u00f6ld","008080":"P\u00e1vak\u00e9k","0000FF":"K\u00e9k","666699":"Sz\u00fcrk\u00e9s k\u00e9k","808080":"Sz\u00fcrke",FF0000:"V\u00f6r\u00f6s",FF9900:"Borosty\u00e1ns\u00e1rga","99CC00":"S\u00e1rg\u00e1s z\u00f6ld","339966":"Tengerz\u00f6ld","33CCCC":"T\u00fcrk\u00edz","3366FF":"Kir\u00e1lyk\u00e9k","800080":"B\u00edbor","999999":"K\u00f6z\u00e9psz\u00fcrke",FF00FF:"B\u00edborv\u00f6r\u00f6s",FFCC00:"Arany",FFFF00:"S\u00e1rga","00FF00":"Vil\u00e1gos borosty\u00e1n","00FFFF":"V\u00edz","00CCFF":"\u00c9gk\u00e9k","993366":"Barna",C0C0C0:"Ez\u00fcst",FF99CC:"R\u00f3zsasz\u00edn",FFCC99:"Barack",FFFF99:"Vil\u00e1gos s\u00e1rga",CCFFCC:"Halv\u00e1ny z\u00f6ld",CCFFFF:"Halv\u00e1ny ci\u00e1n","99CCFF":"Vil\u00e1gos \u00e9gk\u00e9k",CC99FF:"Szilvak\u00e9k",FFFFFF:"Feh\u00e9r"},aria:{"rich_text_area":"Rich Text mez\u0151"},wordcount:{words:"Szavak sz\u00e1ma: "}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/it.js b/ehcp/net2ftp/plugins/tinymce/langs/it.js new file mode 100644 index 0000000..af57d85 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/it.js @@ -0,0 +1 @@ +tinyMCE.addI18n({it:{common:{"more_colors":"Colori aggiuntivi...","invalid_data":"Errore: valori inseriti non validi, sono marcati in rosso.","popup_blocked":"Spiacente, ma il blocco popup ha disabilitato una finestra che fornisce funzionalit\u00e0 dell\'applicazione. Si deve disabilitare il blocco popup per questo sito per poter utlizzare appieno questo strumento.","clipboard_no_support":"Attualmente non supportato dal browser in uso, usare le scorciatoie da tastiera.","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox.\nSi desidera avere maggiori informazioni su questo problema?","not_set":"-- Non impostato --","class_name":"Classe",browse:"Sfoglia",close:"Chiudi",cancel:"Annulla",update:"Aggiorna",insert:"Inserisci",apply:"Applica","edit_confirm":"Usare la modalit\u00e0 WYSIWYG per questa textarea?","invalid_data_number":"{#field} deve essere un numero","invalid_data_min":"{#field} deve essere un numero maggiore di {#min}","invalid_data_size":"{#field} deve essere un numero o una percentuale",value:"(valore)"},contextmenu:{full:"Giustifica",right:"Allinea a destra",center:"Centra",left:"Allinea a sinistra",align:"Allineamento"},insertdatetime:{"day_short":"Dom,Lun,Mar,Mer,Gio,Ven,Sab,Dom","day_long":"Domenica,Luned\u00ec,Marted\u00ec,Mercoled\u00ec,Gioved\u00ec,Venerd\u00ec,Sabato,Domenica","months_short":"Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic","months_long":"Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre","inserttime_desc":"Inserisci ora","insertdate_desc":"Inserisci data","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Stampa"},preview:{"preview_desc":"Anteprima"},directionality:{"rtl_desc":"Direzione da destra a sinistra","ltr_desc":"Direzione da sinistra a destra"},layer:{content:"Nuovo layer...","absolute_desc":"Attiva/Disattiva posizionamento assoluto","backward_desc":"Porta in sfondo","forward_desc":"Porta in rilievo","insertlayer_desc":"Inserisci nuovo layer"},save:{"save_desc":"Salva","cancel_desc":"Cancella tutte le modifiche"},nonbreaking:{"nonbreaking_desc":"Inserisci uno spazio"},iespell:{download:"ieSpell non rilevato. Installarlo ora?","iespell_desc":"Esegui controllo ortografico"},advhr:{"advhr_desc":"Riga orizzontale","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Faccine","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Trova/Sostituisci","search_desc":"Trova","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserisci/modifica immagine","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserisci/modifica collegamento","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Inserisci/modifica attributi","ins_desc":"Inserimento","del_desc":"Cancellamento","acronym_desc":"Acronimo","abbr_desc":"Abbreviazione","cite_desc":"Citazione","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Modifica stile CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale.","plaintext_mode_sticky":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale. Dopo che avrai incollato qualcosa tornerai alla modalit\u00e0 normale","selectall_desc":"Seleziona tutto","paste_word_desc":"Incolla da Word","paste_text_desc":"Incolla come testo semplice"},"paste_dlg":{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."},table:{cell:"Cella",col:"Colonna",row:"Riga",del:"Elimina tabella","copy_row_desc":"Copia riga","cut_row_desc":"Taglia riga","paste_row_after_desc":"Incolla riga dopo","paste_row_before_desc":"Incolla riga prima","props_desc":"Propriet\u00e0 tabella","cell_desc":"Propriet\u00e0 cella","row_desc":"Propriet\u00e0 riga","merge_cells_desc":"Unisci celle","split_cells_desc":"Separa celle","delete_col_desc":"Elimina colonna","col_after_desc":"Inserisci colonna dopo","col_before_desc":"Inserisci colonna prima","delete_row_desc":"Elimina riga","row_after_desc":"Inserisci riga dopo","row_before_desc":"Inserisci riga prima",desc:"Inserisci una nuova tabella","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se ripristini i dati salvati automaticamente perderai i dati attuali dell\'editor\n\nSei sicuro di voler ripristinare i dati?.","restore_content":"Ripristina i dati salvati automaticamente","unload_msg":"I cambiamenti effettuati saranno persi se si abbandona la pagina corrente."},fullscreen:{desc:"Attiva/disattiva modalit\u00e0 a tutto schermo"},media:{edit:"Modifica file multimediale",desc:"Inserisci/modifica file multimediale","delta_height":"","delta_width":""},fullpage:{desc:"Propriet\u00e0 Documento","delta_width":"","delta_height":""},template:{desc:"Inserisci contenuto da modello predefinito"},visualchars:{desc:"Attiva/disattiva caratteri di controllo visuale."},spellchecker:{desc:"Attiva/disattiva controllo ortografico",menu:"Impostazioni controllo ortografico","ignore_word":"Ignora parola","ignore_words":"Ignora tutto",langs:"Lingue",wait:"Attendere prego...",sug:"Suggerimenti","no_sug":"Nessun suggerimento","no_mpell":"Nessun errore rilevato.","learn_word":"Learn word"},pagebreak:{desc:"Inserisci intterruzione di pagina."},advlist:{types:"Tipi",def:"Default","lower_alpha":"Minuscolo alfanumerico","lower_greek":"Minuscolo lettera greca","lower_roman":"Minuscolo lettere romane","upper_alpha":"Maiuscolo alfanumerico","upper_roman":"Maiuscolo lettere romane",circle:"Cerchio",disc:"Punto",square:"Quadrato"},colors:{"333300":"Verde oliva scuro","993300":"Arancio bruciato","000000":"Nero","003300":"Verde scuro","003366":"Azzurro scuro","000080":"Blu navy","333399":"Indaco","333333":"Grigio molto scuro","800000":"Marrone",FF6600:"Arancione","808000":"Verde oliva","008000":"Verde","008080":"Verde azzurro","0000FF":"Blu","666699":"Grigio blu","808080":"Grigio",FF0000:"Rosso",FF9900:"Ambra","99CC00":"Giallo verde","339966":"Verde acqua","33CCCC":"Turchese","3366FF":"Blu royal","800080":"Porpora","999999":"Grigio topo",FF00FF:"Magenta",FFCC00:"Oro",FFFF00:"Giallo","00FF00":"Lime","00FFFF":"Acqua","00CCFF":"Blu cielo","993366":"Vinaccia",C0C0C0:"Argento",FF99CC:"Rosa",FFCC99:"Pesca",FFFF99:"Giallo chiaro",CCFFCC:"Verde chiaro",CCFFFF:"Ciano chiaro","99CCFF":"Blu cielo chiaro",CC99FF:"Prugna",FFFFFF:"Bianco"},aria:{"rich_text_area":"Area testo formattato"},wordcount:{words:"Parole:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/ja.js b/ehcp/net2ftp/plugins/tinymce/langs/ja.js new file mode 100644 index 0000000..cdd5399 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/ja.js @@ -0,0 +1 @@ +tinyMCE.addI18n({ja:{common:{"more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","invalid_data":"\u30a8\u30e9\u30fc: \u5165\u529b\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\uff08\u8d64\u5b57\u306e\u9805\u76ee\uff09","popup_blocked":"\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u8868\u793a\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30c4\u30fc\u30eb\u306e\u6a5f\u80fd\u3092\u5b8c\u5168\u306b\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30b5\u30a4\u30c8\u3067\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u8a31\u53ef\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002","clipboard_no_support":"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u64cd\u4f5c\u306f\u5229\u7528\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30a6\u30b6\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3092\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3044\u3002","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u5f97\u305f\u3044\u3067\u3059\u304b?","not_set":"-- \u672a\u8a2d\u5b9a --","class_name":"\u30af\u30e9\u30b9",browse:"\u95b2\u89a7",close:"\u9589\u3058\u308b",cancel:"\u53d6\u308a\u6d88\u3057",update:"\u66f4\u65b0",insert:"\u633f\u5165",apply:"\u9069\u7528","edit_confirm":"\u3053\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3092WYSIWYG\u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u304b\uff1f","invalid_data_number":"{#field} \u306f\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_min":"{#field} \u306f{#min}\u3088\u308a\u3082\u5927\u304d\u306a\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_size":"{#field}\u306f\u6570\u5024\u307e\u305f\u306f\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002",value:"(\u5024)"},contextmenu:{full:"\u5747\u7b49\u5272\u4ed8",right:"\u53f3\u63c3\u3048",center:"\u4e2d\u592e\u63c3\u3048",left:"\u5de6\u63c3\u3048",align:"\u914d\u7f6e"},insertdatetime:{"day_short":"(\u65e5),(\u6708),(\u706b),(\u6c34),(\u6728),(\u91d1),(\u571f),(\u65e5)","day_long":"\u65e5\u66dc\u65e5,\u6708\u66dc\u65e5,\u706b\u66dc\u65e5,\u6c34\u66dc\u65e5,\u6728\u66dc\u65e5,\u91d1\u66dc\u65e5,\u571f\u66dc\u65e5,\u65e5\u66dc\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"1,2,3,4,5,6,7,8,9,10,11,12","inserttime_desc":"\u6642\u523b\u3092\u633f\u5165","insertdate_desc":"\u65e5\u4ed8\u3092\u633f\u5165","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5370\u5237"},preview:{"preview_desc":"\u30d7\u30ec\u30d3\u30e5\u30fc"},directionality:{"rtl_desc":"\u53f3\u304b\u3089\u5de6","ltr_desc":"\u5de6\u304b\u3089\u53f3"},layer:{content:"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc...","absolute_desc":"\u7d76\u5bfe\u4f4d\u7f6e\u306e\u6307\u5b9a\u3092\u5207\u66ff","backward_desc":"\u80cc\u9762\u3078\u79fb\u52d5","forward_desc":"\u524d\u9762\u3078\u79fb\u52d5","insertlayer_desc":"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc\u3092\u633f\u5165"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u3059\u3079\u3066\u306e\u5909\u66f4\u3092\u53d6\u308a\u6d88\u3057"},nonbreaking:{"nonbreaking_desc":"\u6539\u884c\u3057\u306a\u3044\u30b9\u30da\u30fc\u30b9\u6587\u5b57(NBSP)\u3092\u633f\u5165"},iespell:{download:"ieSpell\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304b\uff1f","iespell_desc":"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u691c\u7d22\u3068\u7f6e\u63db","search_desc":"\u691c\u7d22","delta_width":"","delta_height":""},advimage:{"image_desc":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":"","delta_height":""},advlink:{"link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u5c5e\u6027\u306e\u633f\u5165\u3084\u7de8\u96c6","ins_desc":"\u633f\u5165","del_desc":"\u524a\u9664","acronym_desc":"\u982d\u5b57\u8a9e","abbr_desc":"\u7565\u8a9e","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS\u306e\u7de8\u96c6","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002","plaintext_mode_sticky":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002\u4f55\u304b\u8cbc\u308a\u4ed8\u3051\u308b\u3068\u3001\u305d\u306e\u5f8c\u306f\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u30e2\u30fc\u30c9\u306b\u623b\u308a\u307e\u3059\u3002","selectall_desc":"\u3059\u3079\u3066\u9078\u629e","paste_word_desc":"Word\u304b\u3089\u8cbc\u308a\u4ed8\u3051","paste_text_desc":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u3067\u8cbc\u308a\u4ed8\u3051"},"paste_dlg":{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"},table:{cell:"\u30bb\u30eb",col:"\u5217",row:"\u884c",del:"\u8868\u3092\u524a\u9664","copy_row_desc":"\u884c\u3092\u30b3\u30d4\u30fc","cut_row_desc":"\u884c\u3092\u5207\u308a\u53d6\u308a","paste_row_after_desc":"\u4e0b\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","paste_row_before_desc":"\u4e0a\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","props_desc":"\u8868\u306e\u5c5e\u6027","cell_desc":"\u30bb\u30eb\u306e\u5c5e\u6027","row_desc":"\u884c\u306e\u5c5e\u6027","merge_cells_desc":"\u30bb\u30eb\u3092\u7d50\u5408","split_cells_desc":"\u30bb\u30eb\u306e\u7d50\u5408\u3092\u89e3\u9664","delete_col_desc":"\u5217\u3092\u524a\u9664","col_after_desc":"\u53f3\u306b\u5217\u3092\u633f\u5165","col_before_desc":"\u5de6\u306b\u5217\u3092\u633f\u5165","delete_row_desc":"\u884c\u3092\u524a\u9664","row_after_desc":"\u4e0b\u306b\u884c\u3092\u633f\u5165","row_before_desc":"\u4e0a\u306b\u884c\u3092\u633f\u5165",desc:"\u8868\u306e\u633f\u5165","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u5fa9\u5143\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u7de8\u96c6\u5185\u5bb9\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002\n\n\u672c\u5f53\u306b\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u304b?","restore_content":"\u81ea\u52d5\u4fdd\u5b58\u30c7\u30fc\u30bf\u3092\u5fa9\u5143","unload_msg":"\u4ed6\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3059\u308b\u3068\u3001\u5909\u66f4\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002"},fullscreen:{desc:"\u5168\u753b\u9762"},media:{"delta_height":"",edit:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u7de8\u96c6",desc:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":""},fullpage:{desc:"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165"},visualchars:{desc:"\u5236\u5fa1\u6587\u5b57\u306e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048"},spellchecker:{desc:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u4f7f\u7528\u3092\u5207\u308a\u66ff\u3048",menu:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u8a2d\u5b9a","ignore_word":"\u3053\u306e\u5358\u8a9e\u3092\u7121\u8996","ignore_words":"\u3059\u3079\u3066\u7121\u8996",langs:"\u8a00\u8a9e",wait:"\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...",sug:"\u5019\u88dc","no_sug":"\u5019\u88dc\u306a\u3057","no_mpell":"\u30b9\u30da\u30eb\u306e\u8aa4\u308a\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","learn_word":"\u3053\u306e\u5358\u8a9e\u3092\u5b66\u7fd2"},pagebreak:{desc:"\u5370\u5237\u7528\u306e\u6539\u30da\u30fc\u30b8\u3092\u633f\u5165"},advlist:{types:"\u7a2e\u985e",def:"\u30c7\u30d5\u30a9\u30eb\u30c8","lower_alpha":"a b c ...","lower_greek":"\u03b1 \u03b2 \u03b3 \u2026","lower_roman":"i ii iii ...","upper_alpha":"A B C ...","upper_roman":"I II III ...",circle:"\u767d\u4e38\uff08circle\uff09",disc:"\u9ed2\u4e38\uff08disc\uff09",square:"\u56db\u89d2\uff08square\uff09"},colors:{"333300":"\u6fc3\u3044\u30aa\u30ea\u30fc\u30d6\u8272","993300":"\u6fc3\u3044\u30aa\u30ec\u30f3\u30b8\u8272","000000":"\u9ed2\u8272","003300":"\u6fc3\u3044\u7dd1\u8272","003366":"\u6fc3\u3044\u7fa4\u9752\u8272","000080":"\u6fc3\u7d3a\u8272","333399":"\u85cd\u8272","333333":"\u3068\u3066\u3082\u6fc3\u3044\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u30aa\u30ea\u30fc\u30d6\u8272","008000":"\u7dd1\u8272","008080":"\u7dd1\u304c\u304b\u304b\u3063\u305f\u9752\u8272","0000FF":"\u9752\u8272","666699":"\u7d0d\u6238\u8272","808080":"\u7070\u8272",FF0000:"\u8d64",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec4\u7dd1\u8272","339966":"\u6d77\u7dd1\u8272","33CCCC":"\u9752\u7dd1\u8272","3366FF":"\u85e4\u7d2b\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u304f\u3089\u3044\u306e\u7070\u8272",FF00FF:"\u8d64\u7d2b\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec4\u8272","00FF00":"\u30e9\u30a4\u30e0\u8272","00FFFF":"\u6c34\u8272","00CCFF":"\u7a7a\u8272","993366":"\u8336\u8272",C0C0C0:"\u9280\u8272",FF99CC:"\u30d4\u30f3\u30af\u8272",FFCC99:"\u6843\u8272",FFFF99:"\u8584\u3044\u9ec4\u8272",CCFFCC:"\u6de1\u7dd1\u8272",CCFFFF:"\u6de1\u9752\u7dd1\u8272","99CCFF":"\u8584\u3044\u6c34\u8272",CC99FF:"\u6fc3\u3044\u8d64\u7d2b\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2"},wordcount:{words:"\u5358\u8a9e\u306e\u6570"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/nl.js b/ehcp/net2ftp/plugins/tinymce/langs/nl.js new file mode 100644 index 0000000..a8cdad2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/nl.js @@ -0,0 +1 @@ +tinyMCE.addI18n({nl:{common:{"more_colors":"Meer kleuren","invalid_data":"Fout: Er zijn ongeldige waardes ingevoerd, deze zijn rood gemarkeerd.","popup_blocked":"U zult uw popup-blocker tijdelijk moeten uitschakelen voor deze website om gebruik te kunnen maken van alle functies van deze teksteditor.","clipboard_no_support":"Kopi\u00ebren/knippen/plakken wordt niet ondersteund door uw browser, gebruik hiervoor de sneltoetsen.","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","not_set":"- Standaard -","class_name":"Klasse",browse:"Bladeren",close:"Sluiten",cancel:"Annuleren",update:"Bijwerken",insert:"Invoegen",apply:"Toepassen","edit_confirm":"Weet u zeker dat u tekst in WYSIWYG mode wilt bewerken in dit tekstveld?","invalid_data_number":"{#field} moet een nummer zijn","invalid_data_min":"{#field} moet groter zijn dan {#min}","invalid_data_size":"{#field} moet een nummer of percentage zijn",value:"(waarde aanpassen)"},contextmenu:{full:"Uitvullen",right:"Rechts",center:"Centreren",left:"Links",align:"Uitlijning"},insertdatetime:{"day_short":"zo,ma,di,wo,do,vr,za,zo","day_long":"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December","inserttime_desc":"Tijd invoegen","insertdate_desc":"Datum invoegen","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Afdrukken"},preview:{"preview_desc":"Voorbeeld"},directionality:{"rtl_desc":"Van rechts naar links","ltr_desc":"Van links naar rechts"},layer:{content:"Nieuwe laag...","absolute_desc":"Absoluut positioneren inschakelen","backward_desc":"Vorige laag","forward_desc":"Volgende laag","insertlayer_desc":"Nieuwe laag invoegen"},save:{"save_desc":"Opslaan","cancel_desc":"Alle wijzigingen annuleren"},nonbreaking:{"nonbreaking_desc":"Harde spatie invoegen"},iespell:{download:"ieSpell niet gevonden. Wilt u deze nu installeren?","iespell_desc":"Spellingcontrole"},advhr:{"advhr_desc":"Scheidingslijn","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoties","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Zoeken/Vervangen","search_desc":"Zoeken","delta_width":"","delta_height":""},advimage:{"image_desc":"Afbeelding invoegen/bewerken","delta_width":"","delta_height":""},advlink:{"link_desc":"Link invoegen/bewerken","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attributen invoegen/bewerken","ins_desc":"Ingevoegd","del_desc":"Verwijderd","acronym_desc":"Synoniem","abbr_desc":"Afkorting","cite_desc":"Citaat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stijl bewerken","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken.","plaintext_mode_sticky":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken. Nadat u iets plakt, keert u terug naar normaal plakken.","selectall_desc":"Alles selecteren","paste_word_desc":"Vanuit Word plakken","paste_text_desc":"Als platte tekst plakken"},"paste_dlg":{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."},table:{cell:"Cel",col:"Kolom",row:"Rij",del:"Tabel verwijderen","copy_row_desc":"Rij kopi\u00ebren","cut_row_desc":"Rij knippen","paste_row_after_desc":"Rij onder plakken","paste_row_before_desc":"Rij boven plakken","props_desc":"Tabeleigenschappen","cell_desc":"Cel-eigenschappen","row_desc":"Rij-eigenschappen","merge_cells_desc":"Cellen samenvoegen","split_cells_desc":"Cellen splitsen","delete_col_desc":"Kolom verwijderen","col_after_desc":"Kolom rechts invoegen","col_before_desc":"Kolom links invoegen","delete_row_desc":"Rij verwijderen","row_after_desc":"Rij onder invoegen","row_before_desc":"Rij boven invoegen",desc:"Tabel invoegen/bewerken","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Als u de opgeslagen inhoud laadt, verliest u de inhoud die zich momenteel in de editor bevindt.\n\nWeet u zeker dat u de opgeslagen inhoud wilt laden?","restore_content":"Automatisch opgeslagen inhoud laden.","unload_msg":"De wijzigingen zullen verloren gaan als u nu deze pagina verlaat."},fullscreen:{desc:"Volledig scherm"},media:{edit:"Media bewerken",desc:"Media invoegen/bewerken","delta_height":"","delta_width":""},fullpage:{desc:"Documenteigenschappen","delta_width":"","delta_height":""},template:{desc:"Voorgedefinieerd sjabloon invoegen"},visualchars:{desc:"Zichtbare symbolen"},spellchecker:{desc:"Spellingcontrole",menu:"Instellingen spellingcontrole","ignore_word":"Woord negeren","ignore_words":"Alles negeren",langs:"Talen",wait:"Een ogenblik geduld\u2026",sug:"Suggesties","no_sug":"Geen suggesties","no_mpell":"Geen spelfouten gevonden.","learn_word":"Woord toevoegen aan spellingscontrole"},pagebreak:{desc:"Pagina-einde invoegen"},advlist:{types:"Types",def:"Standaard","lower_alpha":"Alfa (klein)","lower_greek":"Griekse letters (klein)","lower_roman":"Romeinse letters (klein)","upper_alpha":"Alfa (groot)","upper_roman":"Romeinse letters (groot)",circle:"Cirkel",disc:"Schijf",square:"Vierkant"},colors:{"333300":"Donkerolijf","993300":"Gebrand oranje","000000":"Zwart","003300":"Donkergroen","003366":"Donkerazuur","000080":"Marineblauw","333399":"Indigo","333333":"Heel donkergrijs","800000":"Kastanjebruin",FF6600:"Oranje","808000":"Olijf","008000":"Groen","008080":"Teal","0000FF":"Blauw","666699":"Grijsblauw","808080":"Grijs",FF0000:"Rood",FF9900:"Amber","99CC00":"Geelgroen","339966":"Zeegroen","33CCCC":"Turkoois","3366FF":"Koningsblauw","800080":"Paars","999999":"Middengrijs",FF00FF:"Magenta",FFCC00:"Goud",FFFF00:"Geel","00FF00":"Limoen","00FFFF":"Aqua","00CCFF":"Hemelsblauw","993366":"Bruin",C0C0C0:"Zilver",FF99CC:"Roze",FFCC99:"Perzik",FFFF99:"Lichtgeel",CCFFCC:"Bleekgroen",CCFFFF:"Bleekcyaan","99CCFF":"Licht hemelsblauw",CC99FF:"Pruim",FFFFFF:"Wit"},aria:{"rich_text_area":"Tekst met opmaak"},wordcount:{words:"Aantal woorden:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/pl.js b/ehcp/net2ftp/plugins/tinymce/langs/pl.js new file mode 100644 index 0000000..475b45d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/pl.js @@ -0,0 +1 @@ +tinyMCE.addI18n({pl:{common:{"more_colors":"Wi\u0119cej kolor\u00f3w","invalid_data":"B\u0142\u0105d: Zosta\u0142y wprowadzone b\u0142\u0119dne dane, s\u0105 zaznaczone na czerwono.","popup_blocked":"Zauwa\u017cyli\u015bmy, \u017ce opcja blokowania wyskakuj\u0105cych okienek wy\u0142\u0105czy\u0142a okno, kt\u00f3re dostarcza funkcjonalno\u015b\u0107 aplikacji. Aby w pe\u0142ni wykorzysta\u0107 to narz\u0119dzie musisz wy\u0142\u0105czy\u0107 blokowanie wyskakuj\u0105cych okienek na tej stronie.","clipboard_no_support":"Aktualnie nie jest obs\u0142ugiwany przez Twoj\u0105 przegl\u0105dark\u0119, u\u017cyj skr\u00f3t\u00f3w klawiaturowych w zamian.","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","not_set":"-- Brak --","class_name":"Klasa",browse:"Przegl\u0105daj",close:"Zamknij",cancel:"Anuluj",update:"Aktualizuj",insert:"Wstaw",apply:"Zastosuj","edit_confirm":"Czy chcesz u\u017cy\u0107 trybu WYSIWYG dla tego pola formularza?","invalid_data_number":"{#field} musi by\u0107 liczb\u0105","invalid_data_min":"{#field} musi by\u0107 liczb\u0105 wi\u0119ksz\u0105 od {#min}","invalid_data_size":"{#field} musi by\u0107 liczb\u0105 lub warto\u015bci\u0105 procentow\u0105",value:"(warto\u015b\u0107)"},contextmenu:{full:"Wyjustuj",right:"Do prawej",center:"Do \u015brodka",left:"Do lewej",align:"Wyr\u00f3wnanie"},insertdatetime:{"day_short":"N,Pn,Wt,\u015ar,Cz,Pt,So,N","day_long":"Niedziela,Poniedzia\u0142ek,Wtorek,\u015aroda,Czwartek,Pi\u0105tek,Sobota,Niedziela","months_short":"Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Pa\u017a,Lis,Gru","months_long":"Stycze\u0144,Luty,Marzec,Kwiecie\u0144,Maj,Czerwiec,Lipiec,Sierpie\u0144,Wrzesie\u0144,Pa\u017adziernik,Listopad,Grudzie\u0144","inserttime_desc":"Wstaw czas","insertdate_desc":"Wstaw dat\u0119","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Drukuj"},preview:{"preview_desc":"Podgl\u0105d"},directionality:{"rtl_desc":"Kierunek od prawej do lewej","ltr_desc":"Kierunek od lewej do prawej"},layer:{content:"Nowa warstwa...","absolute_desc":"Prze\u0142\u0105cz pozycjonowanie absolutne","backward_desc":"Przesu\u0144 pod sp\u00f3d","forward_desc":"Przesu\u0144 na wierzch","insertlayer_desc":"Wstaw now\u0105 warstw\u0119"},save:{"save_desc":"Zachowaj","cancel_desc":"Anuluj wszystkie zmiany"},nonbreaking:{"nonbreaking_desc":"Wstaw tward\u0105 spacj\u0119"},iespell:{download:"ieSpell nie wykryte. Czy przeprowadzi\u0107 instalacj\u0119 tego komponentu?","iespell_desc":"Sprawd\u017a pisowni\u0119"},advhr:{"advhr_desc":"Pozioma linia","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Znajd\u017a/zamie\u0144","search_desc":"Znajd\u017a","delta_width":"","delta_height":""},advimage:{"image_desc":"Wstaw/edytuj obraz","delta_width":"","delta_height":""},advlink:{"link_desc":"Wstaw/edytuj link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Wstaw / Edytuj atrybuty","ins_desc":"Wstawienie","del_desc":"Usuni\u0119cie","acronym_desc":"Akronim","abbr_desc":"Skr\u00f3t","cite_desc":"Cytat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edytuj Style CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu.","plaintext_mode_sticky":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu. Po wklejeniu tekstu nast\u0105pi powr\u00f3t do trybu wklejania sformatowanego tekstu.","selectall_desc":"Zaznacz wszystko","paste_word_desc":"Wklej z Worda","paste_text_desc":"Wklej jako zwyk\u0142y tekst"},"paste_dlg":{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."},table:{cell:"Kom\u00f3rka",col:"Kolumna",row:"Wiersz",del:"Usu\u0144 tabel\u0119","copy_row_desc":"Kopiuj wiersz...","cut_row_desc":"Wytnij wiersz...","paste_row_after_desc":"Wklej wiersz po...","paste_row_before_desc":"Wklej wiersz przed...","props_desc":"W\u0142a\u015bciwo\u015bci tabeli","cell_desc":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_desc":"W\u0142a\u015bciwo\u015bci wiersza","merge_cells_desc":"Po\u0142\u0105cz kom\u00f3rki","split_cells_desc":"Podziel po\u0142\u0105czone kom\u00f3rki","delete_col_desc":"Usu\u0144 kolumn\u0119","col_after_desc":"Wstaw kolumn\u0119 po...","col_before_desc":"Wstaw kolumn\u0119 przed...","delete_row_desc":"Usu\u0144 wiersz","row_after_desc":"Wstaw nowy wiersz po...","row_before_desc":"Wstaw nowy wiersz przed...",desc:"Wstaw now\u0105 tabel\u0119","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Je\u015bli przywr\u00f3cisz zapisan\u0105 tre\u015b\u0107, stracisz ca\u0142\u0105 tre\u015b\u0107, kt\u00f3ra teraz si\u0119 znajduje w edytorze.\n\nJeste\u015b pewien, \u017ce chcesz przywr\u00f3ci\u0107 zapisan\u0105 tre\u015b\u0107?","restore_content":"Przywr\u00f3\u0107 tre\u015b\u0107 zapisan\u0105 automatycznie.","unload_msg":"Zmiany, kt\u00f3rych dokona\u0142e\u015b zostan\u0105 utracone je\u015bli opu\u015bcisz t\u0119 stron\u0119."},fullscreen:{desc:"Prze\u0142\u0105cz tryb pe\u0142noekranowy"},media:{"delta_height":"",edit:"Edytuj wbudowane media",desc:"Wstaw/edytuj wbudowane media","delta_width":""},fullpage:{desc:"W\u0142a\u015bciwo\u015bci dokumentu","delta_width":"","delta_height":""},template:{desc:"Wstaw tre\u015b\u0107 szablonu"},visualchars:{desc:"W\u0142\u0105cz/wy\u0142\u0105cz znaki kontrolne."},spellchecker:{desc:"Sprawdzanie pisowni",menu:"Ustawienia sprawdzania pisowni","ignore_word":"Ignoruj s\u0142owo","ignore_words":"Ignoruj wszystkie",langs:"J\u0119zyki",wait:"Prosz\u0119 czeka\u0107...",sug:"Sugestie","no_sug":"Brak sugestii","no_mpell":"Nie znaleziono b\u0142\u0119d\u00f3w.","learn_word":"Dowiedz si\u0119 s\u0142owa"},pagebreak:{desc:"Wstaw znak nowej strony."},advlist:{types:"Rodzaje",def:"Domy\u015blny","lower_alpha":"Ma\u0142e alfabetu","lower_greek":"Ma\u0142e greckie","lower_roman":"Ma\u0142e rzymskie","upper_alpha":"Du\u017ce alfabetu","upper_roman":"Du\u017ce rzymskie",circle:"Ko\u0142o",disc:"Elipsa",square:"Kwadrat"},colors:{"333300":"Ciemnooliwkowy","993300":"Ochra","000000":"Czarny","003300":"Ciemnozielony","003366":"Ciemnolazurowy","000080":"Granatowy","333399":"Indygo","333333":"Bardzo ciemnoszary","800000":"Rdzawy",FF6600:"Pomara\u0144czowy","808000":"Oliwkowy","008000":"Zielony","008080":"Morski","0000FF":"Niebieski","666699":"Siny","808080":"Szary",FF0000:"Czerwony",FF9900:"Bursztynowy","99CC00":"\u017b\u00f3\u0142tozielony","339966":"Akwamaryna","33CCCC":"Turkusowy","3366FF":"B\u0142\u0119kit kr\u00f3lewski","800080":"Purpurowy","999999":"\u015arednioszary",FF00FF:"Fuksja",FFCC00:"Z\u0142oty",FFFF00:"\u017b\u00f3\u0142ty","00FF00":"Limonkowy","00FFFF":"Cyjan","00CCFF":"B\u0142\u0119kitny","993366":"Br\u0105zowy",C0C0C0:"Srebrny",FF99CC:"R\u00f3\u017cowy",FFCC99:"Brzoskwiniowy",FFFF99:"Jasno\u017c\u00f3\u0142ty",CCFFCC:"Bladozielony",CCFFFF:"Bladoturkusowy","99CCFF":"Jasnob\u0142\u0119kitny",CC99FF:"\u015aliwkowy",FFFFFF:"Bia\u0142y"},aria:{"rich_text_area":"Pole tekstowe"},wordcount:{words:"S\u0142owa:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/pt.js b/ehcp/net2ftp/plugins/tinymce/langs/pt.js new file mode 100644 index 0000000..809f1c2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/pt.js @@ -0,0 +1 @@ +tinyMCE.addI18n({pt:{common:{"more_colors":"Mais Cores","invalid_data":"Erro: Valores inv\u00e1lidos marcados em vermelho.","popup_blocked":"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00e9 essencial para a aplica\u00e7\u00e3o. Voc\u00ea precisa desativar o bloqueador de janelas de popups para utilizar esta ferramenta.","clipboard_no_support":"O seu browser n\u00e3o suporta esta fun\u00e7\u00e3o, use os atalhos do teclado.","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","not_set":"-- N/A --","class_name":"Classe",browse:"Procurar",close:"Fechar",cancel:"Cancelar",update:"Atualizar",insert:"Inserir",apply:"Aplicar","edit_confirm":"Deseja usar o modo de edi\u00e7\u00e3o avan\u00e7ado neste campo de texto?","invalid_data_number":"{#field} deve ser um n\u00famero","invalid_data_min":"{#field} deve ser um n\u00famero maior que {#min}","invalid_data_size":"{#field} deve ser um n\u00famero ou uma percentagem",value:"(valor)"},contextmenu:{full:"Justificado",right:"Direita",center:"Centro",left:"Esquerda",align:"Alinhamento"},insertdatetime:{"day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom","day_long":"Domingo,Segunda-feira,Ter\u00e7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00e1bado,Domingo","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","inserttime_desc":"Inserir hora","insertdate_desc":"Inserir data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Pr\u00e9-visualizar"},directionality:{"rtl_desc":"Da direita para esquerda","ltr_desc":"Da esquerda para direita"},layer:{content:"Nova camada...","absolute_desc":"Alternar o posicionamento absoluto","backward_desc":"Mover para tr\u00e1s","forward_desc":"Mover para frente","insertlayer_desc":"Inserir nova camada"},save:{"save_desc":"Salvar","cancel_desc":"Cancelar todas as altera\u00e7\u00f5es"},nonbreaking:{"nonbreaking_desc":"Inserir um espa\u00e7o \"sem quebra\""},iespell:{download:"Plugin de ortografia n\u00e3o-detectado. Deseja instalar agora?","iespell_desc":"Verificar ortografia"},advhr:{"advhr_desc":"Separador horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticons","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Localizar/substituir","search_desc":"Localizar","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserir/editar imagem","delta_width":"","delta_height":""},advlink:{"delta_width":"50","link_desc":"Inserir/editar hyperlink","delta_height":""},xhtmlxtras:{"attribs_desc":"Inserir/Editar atributos","ins_desc":"Inserir","del_desc":"Apagar","acronym_desc":"Acr\u00f4nimo","abbr_desc":"Abrevia\u00e7\u00e3o","cite_desc":"Cita\u00e7\u00e3o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal.","plaintext_mode_sticky":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal. Depois de colar alguma coisa retornar\u00e1 para o modo normal.","selectall_desc":"Selecionar tudo","paste_word_desc":"Colar (copiado do WORD)","paste_text_desc":"Colar como texto simples"},"paste_dlg":{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."},table:{cell:"C\u00e9lula",col:"Coluna",row:"Linha",del:"Apagar tabela","copy_row_desc":"Copiar linha","cut_row_desc":"Recortar linha","paste_row_after_desc":"Colar linha depois","paste_row_before_desc":"Colar linha antes","props_desc":"Propriedades da tabela","cell_desc":"Propriedades das c\u00e9lulas","row_desc":"Propriedades das linhas","merge_cells_desc":"Unir c\u00e9lulas","split_cells_desc":"Dividir c\u00e9lulas","delete_col_desc":"Remover coluna","col_after_desc":"Inserir coluna depois","col_before_desc":"Inserir coluna antes","delete_row_desc":"Apagar linha","row_after_desc":"Inserir linha depois","row_before_desc":"Inserir linha antes",desc:"Inserir nova tabela","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se restaurar o conte\u00fado, voc\u00ea ir\u00e1 perder tudo que est\u00e1 atualmente no editor.\n\nTem certeza que quer restaurar o conte\u00fado salvo?","restore_content":"Restaura conte\u00fado salvo automaticamente.","unload_msg":"As mudan\u00e7as efetuadas ser\u00e3o perdidas se sair desta p\u00e1gina."},fullscreen:{desc:"Tela Inteira"},media:{edit:"Editar m\u00eddia embutida",desc:"Inserir/Editar m\u00eddia embutida","delta_height":"","delta_width":""},fullpage:{desc:"Propriedades do Documento","delta_width":"","delta_height":""},template:{desc:"Inserir template"},visualchars:{desc:"Caracteres de controle visual ligado/desligado"},spellchecker:{desc:"Alternar verifica\u00e7\u00e3o ortogr\u00e1fica",menu:"Configura\u00e7\u00f5es de ortografia","ignore_word":"Ignorar palavra","ignore_words":"Ignorar tudo",langs:"Linguagens",wait:"Aguarde...",sug:"Sugest\u00f5es","no_sug":"Sem sugest\u00f5es","no_mpell":"N\u00e3o foram detectados erros de ortografia.","learn_word":"Aprender palavra"},pagebreak:{desc:"Inserir quebra de p\u00e1gina."},advlist:{types:"Tipos",def:"Padr\u00e3o","lower_alpha":"Alfabeto min\u00fasculo","lower_greek":"Alfabeto grego","lower_roman":"Num. romanos min\u00fasculos","upper_alpha":"Alfabeto mai\u00fasculos","upper_roman":"Num. romanos mai\u00fasculos",circle:"C\u00edrculo",disc:"Disco",square:"Quadrado"},colors:{"333300":"Oliva escuro","993300":"Laranja queimado","000000":"Preto","003300":"Verde escuro","003366":"Azul escuro","000080":"Azul marinho","333399":"\u00cdndigo","333333":"Cinza muito escuro","800000":"Marrom 1",FF6600:"Laranja","808000":"Oliva","008000":"Verde","008080":"Verde azulado","0000FF":"Azul","666699":"Azul acinzentado","808080":"Cinza",FF0000:"Vermelho",FF9900:"\u00c2mbar","99CC00":"Amarelo esverdeado","339966":"Verde mar","33CCCC":"Turquesa","3366FF":"Azul real","800080":"Roxo","999999":"Cinza m\u00e9dio",FF00FF:"Magenta",FFCC00:"Ouro",FFFF00:"Amarelo","00FF00":"Lima","00FFFF":"\u00c1gua","00CCFF":"Azul celeste","993366":"Marrom 2",C0C0C0:"Prata",FF99CC:"Rosa",FFCC99:"P\u00eassego",FFFF99:"Amarelo claro",CCFFCC:"Verde p\u00e1lido",CCFFFF:"Ciano p\u00e1lido","99CCFF":"Azul celeste claro",CC99FF:"Ameixa",FFFFFF:"Branco"},aria:{"rich_text_area":"\u00c1rea de texto rico"},wordcount:{words:"Palavras:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/ru.js b/ehcp/net2ftp/plugins/tinymce/langs/ru.js new file mode 100644 index 0000000..2c5d9f1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/ru.js @@ -0,0 +1 @@ +tinyMCE.addI18n({ru:{common:{"more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","invalid_data":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c.","popup_blocked":"\u0411\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043d \u0437\u0430\u043a\u0440\u044b\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435.","clipboard_no_support":"\u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0412\u0430\u0448\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","not_set":"- \u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e -","class_name":"\u041a\u043b\u0430\u0441\u0441",browse:"\u041e\u0431\u0437\u043e\u0440",close:"\u0417\u0430\u043a\u0440\u044b\u0442\u044c",cancel:"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",update:"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c","edit_confirm":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e","invalid_data_min":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 {#min}","invalid_data_size":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435"},insertdatetime:{"day_short":"\u0432\u0441,\u043f\u043d,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043f\u0442,\u0441\u0431,\u0432\u0441","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435,\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a,\u0432\u0442\u043e\u0440\u043d\u0438\u043a,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043f\u044f\u0442\u043d\u0438\u0446\u0430,\u0441\u0443\u0431\u0431\u043e\u0442\u0430,\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","months_short":"\u044f\u043d\u0432,\u0444\u0435\u0432,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433,\u0441\u0435\u043d,\u043e\u043a\u0442,\u043d\u043e\u044f,\u0434\u0435\u043a","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c,\u0444\u0435\u0432\u0440\u0430\u043b\u044c,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440\u0435\u043b\u044c,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c,\u043e\u043a\u0442\u044f\u0431\u0440\u044c,\u043d\u043e\u044f\u0431\u0440\u044c,\u0434\u0435\u043a\u0430\u0431\u0440\u044c","inserttime_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f","insertdate_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u041f\u0435\u0447\u0430\u0442\u044c"},preview:{"preview_desc":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439","absolute_desc":"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","backward_desc":"\u041d\u0430 \u0437\u0430\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","forward_desc":"\u041d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","insertlayer_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0439"},save:{"save_desc":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","cancel_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f"},nonbreaking:{"nonbreaking_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c?","iespell_desc":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u044e"},advhr:{"advhr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c","search_desc":"\u041d\u0430\u0439\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442","ins_desc":"\u0417\u0430\u043c\u0435\u043d\u0430","del_desc":"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435","acronym_desc":"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044f","abbr_desc":"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","cite_desc":"\u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode_sticky":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u042f\u0447\u0435\u0439\u043a\u0430",col:"\u0421\u0442\u043e\u043b\u0431\u0435\u0446",row:"\u0421\u0442\u0440\u043e\u043a\u0430",del:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","cut_row_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cell_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","merge_cells_desc":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443","delete_col_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","col_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430","col_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430","delete_row_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","row_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","row_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",desc:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435/\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b.\n\n\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f?","restore_content":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435","unload_msg":"\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0412\u044b \u0443\u0439\u0434\u0435\u0442\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b."},fullscreen:{desc:"\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c"},media:{"delta_height":"",edit:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0438\u043f\u0430",desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u0438\u043f","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d"},visualchars:{desc:"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438"},spellchecker:{desc:"\u041f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",menu:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f","ignore_word":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c","ignore_words":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435",langs:"\u042f\u0437\u044b\u043a\u0438",wait:"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...",sug:"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b","no_sug":"\u041d\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","no_mpell":"\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"},advlist:{types:"\u0421\u0438\u043c\u0432\u043e\u043b\u044b",def:"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435","lower_alpha":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_greek":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_roman":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b","upper_alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","upper_roman":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b",circle:"\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438",disc:"\u041a\u0440\u0443\u0433\u0438",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b"},colors:{"333300":"\u0422\u0451\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","993300":"\u0411\u0438\u0441\u043c\u0430\u0440\u043a-\u0444\u0443\u0440\u0438\u043e\u0437\u043e","000000":"\u0427\u0435\u0440\u043d\u044b\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","003366":"\u0422\u0451\u043c\u043d\u0430\u044f \u043b\u0430\u0437\u0443\u0440\u044c","000080":"\u0422\u0451\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u041e\u0447\u0435\u043d\u044c \u0442\u0451\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439","800000":"\u0422\u0451\u043c\u043d\u043e-\u0431\u043e\u0440\u0434\u043e\u0432\u044b\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","008000":"\u0412\u043b\u044e\u0431\u043b\u0435\u043d\u043d\u043e\u0439 \u0436\u0430\u0431\u044b","008080":"C\u0438\u043d\u0435-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","0000FF":"\u0421\u0438\u043d\u0438\u0439","666699":"\u0421\u0435\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u043e\u0439","808080":"\u0421\u0435\u0440\u044b\u0439",FF0000:"\u041a\u0440\u0430\u0441\u043d\u044b\u0439",FF9900:"\u042f\u043d\u0442\u0430\u0440\u043d\u044b\u0439","99CC00":"\u0416\u0451\u043b\u0442\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u0439","339966":"\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","33CCCC":"\u042f\u0439\u0446\u0430 \u0434\u0440\u043e\u0437\u0434\u0430","3366FF":"\u041a\u043e\u0440\u043e\u043b\u0435\u0432\u0441\u043a\u0438\u0439 \u0441\u0438\u043d\u0438\u0439","800080":"\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u043e-\u0431\u0430\u043a\u043b\u0430\u0436\u0430\u043d\u043d\u044b\u0439","999999":"\u041a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439",FF00FF:"\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u043e\u0439",FFFF00:"\u0416\u0435\u043b\u0442\u044b\u0439","00FF00":"\u0417\u0435\u043b\u0435\u043d\u044b\u0439","00FFFF":"\u0426\u0438\u0430\u043d","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043d\u044b\u0439","993366":"\u0420\u043e\u0437\u043e\u0432\u0430\u0442\u043e-\u043b\u0438\u043b\u043e\u0432\u044b\u0439",C0C0C0:"\u0421\u0435\u0440\u0435\u0431\u0440\u0438\u0441\u0442\u044b\u0439",FF99CC:"\u0420\u043e\u0437\u043e\u0432\u044b\u0439",FFCC99:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e-\u043f\u0435\u0440\u0441\u0438\u043a\u043e\u0432\u044b\u0439",FFFF99:"\u0412\u0435\u0440\u0434\u0435\u043f\u0435\u0448\u0435\u0432\u044b\u0439",CCFFCC:"\u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0447\u0430\u044f",CCFFFF:"\u0411\u043b\u0435\u0434\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e-\u043d\u0435\u0431\u0435\u0441\u043d\u044b\u0439",CC99FF:"\u0424\u0438\u0430\u043b\u043a\u043e\u0432\u044b\u0439",FFFFFF:"\u0411\u0435\u043b\u044b\u0439"},aria:{"rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u043e\u0432:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/sv.js b/ehcp/net2ftp/plugins/tinymce/langs/sv.js new file mode 100644 index 0000000..a2a3d77 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/sv.js @@ -0,0 +1 @@ +tinyMCE.addI18n({sv:{common:{"more_colors":"Fler f\u00e4rger","invalid_data":"Fel: Inkorrekta v\u00e4rden har matats in, dessa \u00e4r markerade i r\u00f6tt.","popup_blocked":"Popup blockerare detekterad. St\u00e4ng av den s\u00e5 att dialogerna kan \u00f6ppnas.","clipboard_no_support":"Funktionen \u00e4r inte tillg\u00e4nglig i din webbl\u00e4sare, anv\u00e4nd tangentbordsgenv\u00e4garna i st\u00e4llet.","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer?","not_set":"-- Inte satt --","class_name":"Klass",browse:"Bl\u00e4ddra",close:"St\u00e4ng",cancel:"Avbryt",update:"Uppdatera",insert:"Infoga",apply:"Applicera","edit_confirm":"Vill du anv\u00e4nda WYSIWYG f\u00f6r denna textarea?","invalid_data_number":"{#field} m\u00e5ste vara ett nummer","invalid_data_min":"{#field} m\u00e5ste vara ett nummer st\u00f6rren \u00e4n {#min}","invalid_data_size":"{#field} m\u00e5ste vara ett nummer eller i procent",value:"(V\u00e4rde)"},contextmenu:{full:"Utfyllnad",right:"H\u00f6ger",center:"Centrerad",left:"V\u00e4nster",align:"Justering"},insertdatetime:{"day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","inserttime_desc":"Infoga tid","insertdate_desc":"Infoga datum","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d "},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"F\u00f6rhandsgranska"},directionality:{"rtl_desc":"Skriftl\u00e4ge - h\u00f6ger till v\u00e4nster","ltr_desc":"Skriftl\u00e4ge - v\u00e4nster till h\u00f6ger"},layer:{content:"Nytt lager...","absolute_desc":"Sl\u00e5 av/p\u00e5 absolut positionering","backward_desc":"Flytta bak\u00e5t","forward_desc":"Flytta fram\u00e5t","insertlayer_desc":"Infoga nytt lager"},save:{"save_desc":"Spara","cancel_desc":"Hoppa \u00f6ver alla f\u00f6r\u00e4ndringar"},nonbreaking:{"nonbreaking_desc":"Infoga icke radbrytande mellanslag"},iespell:{download:"ieSpell kunde inte hittas, vill du installera denna nu?","iespell_desc":"R\u00e4ttstava"},advhr:{"advhr_desc":"Horisontell skiljelinje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f6k/ers\u00e4tt","search_desc":"S\u00f6k","delta_width":"","delta_height":""},advimage:{"image_desc":"Infoga/redigera bild","delta_width":"","delta_height":""},advlink:{"link_desc":"Infoga/redigera l\u00e4nk","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Redigera attribut","ins_desc":"Markera som tillagt","del_desc":"Markera som struket","acronym_desc":"Akronym","abbr_desc":"F\u00f6rkortning","cite_desc":"citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigera inline CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inklistring \u00e4r nu i textl\u00e4ge.","plaintext_mode_sticky":"Inklistring \u00e4r nu i textl\u00e4ge. Efter att du klistrat in kommer den att \u00e5terg\u00e5 till normall\u00e4ge.","selectall_desc":"Markera allt","paste_word_desc":"Klistra in fr\u00e5n Word","paste_text_desc":"Klistra in som text"},"paste_dlg":{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."},table:{cell:"Cell",col:"Kolumn",row:"Rad",del:"Radera tabell","copy_row_desc":"Klistra in rad","cut_row_desc":"Klipp ut rad","paste_row_after_desc":"Klistra in rad efter","paste_row_before_desc":"Klistra in rad ovanf\u00f6r","props_desc":"Tabellinst\u00e4llningar","cell_desc":"Tabellcellsinst\u00e4llningar","row_desc":"Tabellradsinst\u00e4llningar","merge_cells_desc":"Sammanfoga celler","split_cells_desc":"Separera sammansatta celler","delete_col_desc":"Radera kolumn","col_after_desc":"Infoga kolumn efter","col_before_desc":"Infoga kolumn f\u00f6re","delete_row_desc":"Radera rad","row_after_desc":"Infoga ny rad efter","row_before_desc":"Infoga ny rad f\u00f6re",desc:"Infoga/redigera ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du \u00e5terskapar inneh\u00e5ll s\u00e5 kommer det nuvarande inneh\u00e5llet i f\u00e4ltet att raderas.\n\n\u00c4r du s\u00e4ker p\u00e5 att du vill g\u00f6ra detta?","restore_content":"\u00c5terskapa automatiskt sparat inneh\u00e5ll.","unload_msg":"De f\u00f6r\u00e4ndringar som du gjort kommer att g\u00e5 f\u00f6rlorade om du l\u00e4mnar sidan."},fullscreen:{desc:"Sl\u00e5 av/p\u00e5 fullsk\u00e4rmsl\u00e4ge"},media:{edit:"Redigera inb\u00e4ddad media",desc:"Infoga/redigera inb\u00e4ddad media","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentinst\u00e4llningar","delta_width":"","delta_height":""},template:{desc:"Infoga en f\u00e4rdig mall"},visualchars:{desc:"Visa osynliga tecken"},spellchecker:{desc:"Sl\u00e5 av/p\u00e5 r\u00e4ttstavningskontroll",menu:"R\u00e4ttstavningsinst\u00e4llningar","ignore_word":"Ignorera ord","ignore_words":"Ignorera alla",langs:"Spr\u00e5k",wait:"Var god v\u00e4nta...",sug:"F\u00f6rslag","no_sug":"Inga f\u00f6rslag","no_mpell":"Inga felstavningar funna.","learn_word":"L\u00e4r ord"},pagebreak:{desc:"Infoga sidbrytning"},advlist:{types:"Typer",def:"Standard","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Cirkel",disc:"Disc",square:"Fyrkant"},colors:{"333300":"M\u00f6rkoliv","993300":"Br\u00e4ndorange","000000":"Svart","003300":"M\u00f6rkgr\u00f6n","003366":"M\u00f6rkazur","000080":"Marinbl\u00e5","333399":"Indigo","333333":"Mycket m\u00f6rkgr\u00e5","800000":"R\u00f6dbrun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00f6n","008080":"Kricka","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f6d",FF9900:"B\u00e4rnsten","99CC00":"Gulgr\u00f6n","339966":"Havsbl\u00e5","33CCCC":"Turkos","3366FF":"Kungligtbl\u00e5tt","800080":"Lila","999999":"Medelgr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Vatten","00CCFF":"Himmelsbl\u00e5","993366":"Brun",C0C0C0:"Silver",FF99CC:"Rosa",FFCC99:"Periska",FFFF99:"Ljusgul",CCFFCC:"Blekgr\u00f6n",CCFFFF:"Blekcyan","99CCFF":"Ljus himmel",CC99FF:"Plommon",FFFFFF:"Vitt"},aria:{"rich_text_area":"Redigeringsarea"},wordcount:{words:"Ord:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/tr.js b/ehcp/net2ftp/plugins/tinymce/langs/tr.js new file mode 100644 index 0000000..40b3d5a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/tr.js @@ -0,0 +1 @@ +tinyMCE.addI18n({tr:{common:{"more_colors":"Daha fazla renk","invalid_data":"Hata: Ge\u00e7ersiz de\u011fer girildi, bunlar k\u0131rm\u0131z\u0131yla i\u015faretlenmi\u015ftir.","popup_blocked":"\u00dczg\u00fcn\u00fcz, a\u00e7\u0131l\u0131r pencere engelleyiciniz uygulama i\u00e7in gerekli bir pencereyi engelledi. Bu arac\u0131 tam olarak kullanabilmek i\u00e7in a\u00e7\u0131l\u0131r pencere engelleyicisini kapat\u0131n\u0131z.","clipboard_no_support":"\u015eu an kulland\u0131\u011f\u0131n\u0131z taray\u0131c\u0131n\u0131z klavye k\u0131sayollar\u0131n\u0131 desteklememektedir.","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r \u00f6zelli\u011fi kullan\u0131lmamaktad\u0131r. \nBu konu hakk\u0131nda bilgi almak ister misiniz?","not_set":"-- Ayarlanmad\u0131 --","class_name":"S\u0131n\u0131f",browse:"G\u00f6zat",close:"Kapat",cancel:"\u0130ptal",update:"G\u00fcncelle",insert:"Ekle",apply:"Uygula","edit_confirm":"Metin giri\u015fi i\u00e7in WYSIWYG modunu kullanmak ister misiniz?","invalid_data_number":"{#field} rakam olmal\u0131","invalid_data_min":"{#field}, {#min} de\u011ferinden b\u00fcy\u00fck ve rakam olmal\u0131","invalid_data_size":"{#field} rakam veya y\u00fczde olmal\u0131",value:"(de\u011fer)"},contextmenu:{full:"Tam",right:"Sa\u011f",center:"Orta",left:"Sol",align:"Hizalama"},insertdatetime:{"day_short":"Paz,Pzt,Sal,\u00c7r\u015f,Per,Cum,Cts","day_long":"Pazar,Pazartesi,Sal\u0131,\u00c7ar\u015famba,Per\u015fembe,Cuma,Cumartesi","months_short":"Oca,\u015eub,Mar,Nis,May,Haz,Tem,A\u011fu,Eyl,Eki,Kas,Ara","months_long":"Ocak,\u015eubat,Mart,Nisan,May\u0131s,Haziran,Temmuz,A\u011fustos,Eyl\u00fcl,Ekim,Kas\u0131m,Aral\u0131k","inserttime_desc":"Saat ekle","insertdate_desc":"Tarih ekle","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Yazd\u0131r"},preview:{"preview_desc":"\u00d6nizleme"},directionality:{"rtl_desc":"Soldan sa\u011fa y\u00f6nlendir","ltr_desc":"Sa\u011fdan sola y\u00f6nlendir"},layer:{content:"Yeni katman...","absolute_desc":"Mutlaka konumu de\u011fi\u015ftir","backward_desc":"Arkaya al","forward_desc":"\u00d6ne getir","insertlayer_desc":"Yeni katman ekle"},save:{"save_desc":"Kaydet","cancel_desc":"T\u00fcm de\u011fi\u015fiklikleri iptal et"},nonbreaking:{"nonbreaking_desc":"B\u00f6l\u00fcnemez bo\u015fluk karakteri ekle"},iespell:{download:"ieSpell bulunamad\u0131. \u015eimdi kurmak ister misiniz?","iespell_desc":"\u0130mla kontrol\u00fcn\u00fc ba\u015flat"},advhr:{"advhr_desc":"Yatay \u00e7izgi","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0130fadeler","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Bul/De\u011fi\u015ftir","search_desc":"Bul","delta_width":"","delta_height":""},advimage:{"delta_width":"Geni\u015flik_fark\u0131","image_desc":"Resim ekle/d\u00fczenle","delta_height":"Y\u00fckseklik_fark\u0131"},advlink:{"link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Nitelik ekle/d\u00fczenle","ins_desc":"Ekleme","del_desc":"Silme","acronym_desc":"K\u0131sa ad","abbr_desc":"K\u0131saltma","cite_desc":"Al\u0131nt\u0131","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stilini D\u00fczenle","delta_height":"","delta_width":""},paste:{"plaintext_mode":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n.","plaintext_mode_sticky":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n. Yap\u0131\u015ft\u0131rma i\u015fleminden sonra normal yap\u0131\u015ft\u0131rma moduna ge\u00e7ilecektir.","selectall_desc":"T\u00fcm\u00fcn\u00fc se\u00e7","paste_word_desc":"Word\'den yap\u0131\u015ft\u0131r","paste_text_desc":"D\u00fcz metin olarak yap\u0131\u015ft\u0131r"},"paste_dlg":{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."},table:{cell:"H\u00fccre",col:"S\u00fctun",row:"Sat\u0131r",del:"Tablo sil","copy_row_desc":"Tablo sat\u0131r\u0131n\u0131 kopyala","cut_row_desc":"Tablo sat\u0131r\u0131n\u0131 kes","paste_row_after_desc":"Alt\u0131na tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","paste_row_before_desc":"\u00dcst\u00fcne tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","props_desc":"Tablo \u00f6zellikleri","cell_desc":"Tablo h\u00fccre \u00f6zellikleri","row_desc":"Tablo sat\u0131r \u00f6zellikleri","merge_cells_desc":"Tablo h\u00fccrelerini birle\u015ftir","split_cells_desc":"Birle\u015ftirilmi\u015f tablo h\u00fccrelerini b\u00f6l","delete_col_desc":"S\u00fctun sil","col_after_desc":"Sa\u011f\u0131na s\u00fctun ekle","col_before_desc":"Soluna s\u00fctun ekle","delete_row_desc":"Sat\u0131r sil","row_after_desc":"Alt\u0131na sat\u0131r ekle","row_before_desc":"\u00dcst\u00fcne sat\u0131r ekle",desc:"Yeni tablo ekle","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"E\u011fer geri y\u00fckleme i\u00e7eri\u011fe otomatik kay\u0131t edilirse, edit\u00f6rde varolan t\u00fcm i\u00e7eri\u011fi kaybedebilirsiniz.\n\nGeri y\u00fcklemenin i\u00e7eri\u011fe kaydedilmesini istedi\u011finizden emin misiniz?","restore_content":"Geri y\u00fckleme i\u00e7eri\u011fe otomatik kaydedildi.","unload_msg":"Bu sayfadan \u00e7\u0131karsan\u0131z yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler kaybolabilir."},fullscreen:{desc:"Tam ekran modunu a\u00e7/kapat"},media:{edit:"T\u00fcmle\u015fik medya d\u00fczenle",desc:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","delta_height":"","delta_width":""},fullpage:{desc:"Belge \u00f6zellikleri","delta_width":"","delta_height":""},template:{desc:"\u00d6ntan\u0131ml\u0131 i\u00e7erik \u015fablonu kullan"},visualchars:{desc:"G\u00f6rsel karakter kontrol\u00fc a\u00e7\u0131k/kapal\u0131."},spellchecker:{desc:"\u0130mla kontrol\u00fcn\u00fc a\u00e7/kapat",menu:"\u0130mla kontrol\u00fc ayarlar\u0131","ignore_word":"S\u00f6zc\u00fc\u011f\u00fc yoksay","ignore_words":"T\u00fcm\u00fcn\u00fc yoksay",langs:"Diller",wait:"L\u00fctfen bekleyin...",sug:"\u00d6neriler","no_sug":"\u00d6neri yok","no_mpell":"\u0130mla hatas\u0131 bulunamad\u0131.","learn_word":"S\u00f6zc\u00fc\u011f\u00fc \u00f6\u011fren"},pagebreak:{desc:"Sayfa sonu ekle."},advlist:{types:"Tipler",def:"Varsay\u0131lan","lower_alpha":"K\u00fc\u00e7\u00fck harf alfa","lower_greek":"K\u00fc\u00e7\u00fck harf grek","lower_roman":"K\u00fc\u00e7\u00fck harf roman","upper_alpha":"B\u00fcy\u00fck harf alfa","upper_roman":"B\u00fcy\u00fck harf roman",circle:"\u00c7ember",disc:"Daire",square:"Kare"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Zengin Metin Alan\u0131"},wordcount:{words:"Kelimeler:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/uk.js b/ehcp/net2ftp/plugins/tinymce/langs/uk.js new file mode 100644 index 0000000..514b66b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/uk.js @@ -0,0 +1 @@ +tinyMCE.addI18n({uk:{common:{"more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","invalid_data":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u0432\u0456\u0434\u043c\u0456\u0447\u0435\u043d\u0435 \u0447\u0435\u0440\u0432\u043e\u043d\u0438\u043c.","popup_blocked":"\u0414\u0443\u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u043e, \u0430\u043b\u0435 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0437\u0430\u0431\u043b\u043e\u043a\u0443\u0432\u0430\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u0430\u043a, \u0449\u043e\u0431 \u0432\u0456\u043d \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0456 \u0432\u0456\u043a\u043d\u0430 \u0437 \u0446\u044c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443.","clipboard_no_support":"\u041d\u0430\u0440\u0430\u0437\u0456 \u0446\u044f \u0444\u0443\u043d\u043a\u0446\u0456\u044f \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0432\u0430\u0448\u043e\u043c\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456, \u0430\u043b\u0435 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443 \u0437\u0430\u043c\u0456\u0441\u0442\u044c \u0446\u044c\u043e\u0433\u043e.","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 Mozilla \u0442\u0430 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","not_set":"-- \u043d\u0435 \u0432\u0438\u0431\u0440\u0430\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441",browse:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",close:"\u0417\u0430\u043a\u0440\u0438\u0442\u0438",cancel:"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",update:"\u041e\u043d\u043e\u0432\u0438\u0442\u0438",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438","edit_confirm":"\u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c","invalid_data_min":"{#field} \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 {#min}","invalid_data_size":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c \u0430\u0431\u043e \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u043e\u043c",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u0435\u0434\u0456\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a,\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041f\'\u044f\u0442\u043d\u0438\u0446\u044f,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0456\u043b\u044f","months_short":"\u0421\u0456\u0447,\u041b\u044e\u0442,\u0411\u0435\u0440,\u041a\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041b\u0438\u043f,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043e\u0432,\u041b\u0438\u0441,\u0413\u0440\u0443","months_long":"\u0421\u0456\u0447\u0435\u043d\u044c,\u041b\u044e\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c,\u041a\u0432\u0456\u0442\u0435\u043d\u044c,\u0422\u0440\u0430\u0432\u0435\u043d\u044c,\u0427\u0435\u0440\u0432\u0435\u043d\u044c,\u041b\u0438\u043f\u0435\u043d\u044c,\u0421\u0435\u0440\u043f\u0435\u043d\u044c,\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c,\u0416\u043e\u0432\u0442\u0435\u043d\u044c,\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043d\u044c","inserttime_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0447\u0430\u0441","insertdate_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438"},preview:{"preview_desc":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0437\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a...","absolute_desc":"\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0435 \u043f\u043e\u0437\u0438\u0446\u0456\u044e\u0432\u0430\u043d\u043d\u044f","backward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u043f\u0435\u0440\u0435\u0434","insertlayer_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a"},save:{"save_desc":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438","cancel_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043c\u0456\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u043c\u0456\u0436\u043e\u043a"},iespell:{download:"\u0414\u043e\u0434\u0430\u0442\u043e\u043a ieSpell \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438?","iespell_desc":"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457"},advhr:{"advhr_desc":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438","search_desc":"\u0428\u0443\u043a\u0430\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430","del_desc":"\u0412\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","abbr_desc":"\u0410\u0431\u0440\u0435\u0432\u0456\u0430\u0442\u0443\u0440\u0430","cite_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","plaintext_mode_sticky":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.. \u041f\u0456\u0441\u043b\u044f \u0442\u043e\u0433\u043e, \u044f\u043a \u0412\u0438 \u0449\u043e-\u043d\u0435\u0431\u0443\u0434\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0435, \u0412\u0438 \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u044c \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043c\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","selectall_desc":"\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u041a\u043e\u043c\u0456\u0440\u043a\u0430",col:"\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c",row:"\u0420\u044f\u0434\u043e\u043a",del:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","copy_row_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cut_row_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e","props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","merge_cells_desc":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","split_cells_desc":"\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","delete_col_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c","col_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0456\u0441\u043b\u044f","col_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u0434\u043e","delete_row_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","row_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","row_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u042f\u043a\u0449\u043e \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0432\u043c\u0456\u0441\u0442, \u0442\u043e \u0432\u0438 \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0435\u0441\u044c \u0432\u043c\u0456\u0441\u0442, \u044f\u043a\u0438\u0439 \u0432 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456. \n\n\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0437\u043c\u0456\u0441\u0442?.","restore_content":"\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443.","unload_msg":"\u0417\u043c\u0456\u043d\u0438, \u044f\u043a\u0456 \u0432\u0438 \u0437\u0440\u043e\u0431\u0438\u043b\u0438, \u0431\u0443\u0434\u0443\u0442\u044c \u0432\u0442\u0440\u0430\u0447\u0435\u043d\u0456, \u044f\u043a\u0449\u043e \u0432\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0437 \u0446\u0456\u0454\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},fullscreen:{desc:"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043d\u0430 \u0432\u0435\u0441\u044c \u0435\u043a\u0440\u0430\u043d"},media:{edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","delta_height":"","delta_width":""},fullpage:{desc:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442"},visualchars:{desc:"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432 \u0432\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043d\u044f / \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043d\u044f."},spellchecker:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443",menu:"\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438","ignore_word":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e","ignore_words":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435",langs:"\u041c\u043e\u0432\u0438",wait:"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0447\u0435\u043a\u0430\u0439\u0442\u0435...",sug:"\u0412\u0430\u0440\u0456\u0430\u043d\u0442\u0438","no_sug":"\u041d\u0435\u043c\u0430\u0454 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432","no_mpell":"\u041f\u043e\u043c\u0438\u043b\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u0430\u043c\'\u044f\u0442\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},advlist:{types:"\u0422\u0438\u043f\u0438",def:"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u041a\u043e\u043b\u043e",disc:"\u0414\u0438\u0441\u043a",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u0435\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","993300":"\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439","000000":"\u0427\u043e\u0440\u043d\u0438\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u0438\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","008000":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439","0000FF":"\u0421\u0438\u043d\u0456\u0439","666699":"\u0421\u0456\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439","808080":"\u0421\u0456\u0440\u0438\u0439",FF0000:"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439","99CC00":"\u0416\u043e\u0432\u0442\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439","339966":"Sea green ",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u0438\u0439",FFFF00:"\u0416\u043e\u0432\u0442\u0438\u0439","993366":"\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u0438\u0439",C0C0C0:"\u0421\u0440\u0456\u0431\u043b\u044f\u0441\u0442\u0438\u0439",FF99CC:"\u0420\u043e\u0436\u0435\u0432\u0438\u0439",FFFF99:"\u0421\u0432\u0456\u0442\u043b\u043e \u0436\u043e\u0432\u0442\u0438\u0439",CC99FF:"\u0421\u043b\u0438\u0432\u043e\u0432\u0438\u0439",FFFFFF:"\u0411\u0456\u043b\u0438\u0439","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon","008080":"Teal",FF9900:"Amber","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue",FFCC99:"Peach",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue"},aria:{"rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u0456\u0432:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/vi.js b/ehcp/net2ftp/plugins/tinymce/langs/vi.js new file mode 100644 index 0000000..e3fc927 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/vi.js @@ -0,0 +1 @@ +tinyMCE.addI18n({vi:{common:{"more_colors":"M\u00e0u kh\u00e1c","invalid_data":"L\u1ed7i: Gi\u00e1 tr\u1ecb nh\u1eadp v\u00e0o kh\u00f4ng h\u1ee3p l\u1ec7. (\u0110\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u \u0111\u1ecf)","popup_blocked":"Xin l\u1ed7i, Nh\u01b0ng ch\u1ebf \u0111\u1ed9 c\u1eeda s\u1ed5 popup \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u ho\u00e1. B\u1ea1n s\u1ebd c\u1ea7n ph\u1ea3i t\u1eaft ch\u1ee9c n\u0103ng ch\u1eb7n popup tr\u00ean trang web n\u00e0y \u0111\u1ec3 s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 n\u00e0y ho\u00e0n to\u00e0n.","clipboard_no_support":"S\u1eed d\u1ee5ng ph\u00edm t\u1eaft kh\u00f4ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u00ecnh duy\u1ec7t hi\u1ec7n t\u1ea1i.","clipboard_msg":"Copy/Cut/Paste kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 trong tr\u00ecnh duy\u1ec7t web n\u00e0y.\nB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y kh\u00f4ng??","not_set":"-- Ch\u01b0a \u0111\u1eb7t --","class_name":"L\u1edbp",browse:"T\u00ecm",close:"Tho\u00e1t",cancel:"H\u1ee7y b\u1ecf",update:"C\u1eadp nh\u1eadt",insert:"Th\u00eam",apply:"Thay \u0111\u1ed5i","edit_confirm":"B\u1ea1n c\u00f3 mu\u1ed1n s\u1eed d\u1ee5ng ch\u1ebf \u0111\u1ed9 WYSIWYG cho textarea n\u00e0y?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0110\u1ea7y",right:"Ph\u1ea3i",center:"Gi\u1eefa",left:"Tr\u00e1i",align:"Canh l\u1ec1"},insertdatetime:{"day_short":"CN,T2,T3,T4,T5,T6,T7,CN","day_long":"Ch\u1ee7 Nh\u1eadt,Th\u1ee9 Hai,Th\u1ee9 Ba,Th\u1ee9 T\u01b0,Th\u1ee9 N\u0103m,Th\u1ee9 S\u00e1u,Th\u1ee9 B\u1ea3y,Ch\u1ee7 Nh\u1eadt","months_short":"Thg1,Thg2,Thg3,Thg4,Thg5,Thg6,Thg7,Thg8,Thg9,Th10,Th11,Th12","months_long":"Th\u00e1ng M\u1ed9t,Th\u00e1ng Hai,Th\u00e1ng Ba,Th\u00e1ng T\u01b0,Th\u00e1ng N\u0103m,Th\u00e1ng S\u00e1u,Th\u00e1ng B\u1ea3y,Th\u00e1ng T\u00e1m,Th\u00e1ng Ch\u00edn,Th\u00e1ng M\u01b0\u1eddi,Th\u00e1ng M\u01b0\u1eddi M\u1ed9t,Th\u00e1ng M\u01b0\u1eddi Hai","inserttime_desc":"Ch\u00e8n gi\u1edd","insertdate_desc":"Ch\u00e8n ng\u00e0y","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"In"},preview:{"preview_desc":"Xem tr\u01b0\u1edbc"},directionality:{"rtl_desc":"H\u01b0\u1edbng ph\u1ea3i qua tr\u00e1i","ltr_desc":"H\u01b0\u1edbng tr\u00e1i qua ph\u1ea3i"},layer:{content:"L\u1edbp m\u1edbi...","absolute_desc":"\u0110\u1ea3o v\u1ecb tr\u00ed c\u1ed1 \u0111\u1ecbnh","backward_desc":"Di chuy\u1ec3n v\u1ec1 sau","forward_desc":"Di chuy\u1ec3n v\u1ec1 tr\u01b0\u1edbc","insertlayer_desc":"Ch\u00e8n l\u1edbp m\u1edbi"},save:{"save_desc":"L\u01b0u","cancel_desc":"H\u1ee7y b\u1ecf t\u1ea5t c\u1ea3 thay \u0111\u1ed5i"},nonbreaking:{"nonbreaking_desc":"Ch\u00e8n k\u00fd t\u1ef1 kho\u1ea3ng c\u00e1ch kh\u00f4ng b\u1ecb ng\u1eaft"},iespell:{download:"ieSpell kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n. B\u1ea1n c\u00f3 mu\u1ed1n c\u00e0i \u0111\u1eb7t n\u00f3 b\u00e2y gi\u1edd?","iespell_desc":"Ch\u1ea1y tr\u00ecnh ki\u1ec3m tra ch\u00ednh t\u1ea3"},advhr:{"advhr_desc":"Th\u01b0\u1edbc ngang","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"T\u00ecm/Thay th\u1ebf","search_desc":"T\u00ecm","delta_width":"","delta_height":""},advimage:{"image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","delta_width":"","delta_height":""},advlink:{"link_desc":"Th\u00eam/S\u1eeda Link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ch\u00e8n/S\u1eeda c\u00e1c thu\u1ed9c t\u00ednh","ins_desc":"Ch\u00e8n","del_desc":"X\u00f3a","acronym_desc":"T\u1eeb vi\u1ebft t\u1eaft","abbr_desc":"T\u00ean vi\u1ebft t\u1eaft","cite_desc":"Bi\u00ea\u0309u ch\u01b0\u01a1ng","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"S\u1eeda ki\u1ec3u d\u00e1ng CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode_sticky":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"Ch\u1ecdn t\u1ea5t","paste_word_desc":"D\u00e1n t\u1eeb Word","paste_text_desc":"D\u00e1nh nh\u01b0 Plain Text"},"paste_dlg":{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."},table:{cell:"\u00d4",col:"C\u1ed9t",row:"H\u00e0ng",del:"X\u00f3a b\u1ea3ng","copy_row_desc":"Sao ch\u00e9p h\u00e0ng","cut_row_desc":"C\u1eaft h\u00e0ng","paste_row_after_desc":"D\u00e1n hang v\u00e0o sau","paste_row_before_desc":"D\u00e1n hang v\u00e0o tr\u01b0\u1edbc","props_desc":"Thu\u1ed9c t\u00ednh b\u1ea3ng","cell_desc":"Thu\u1ed9c t\u00ednh \u00f4","row_desc":"Thu\u1ed9c t\u00ednh h\u00e0ng","merge_cells_desc":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng","split_cells_desc":"T\u00e1ch c\u00e1c \u00f4 \u0111\u00e3 k\u1ebft h\u1ee3p c\u1ee7a b\u1ea3ng","delete_col_desc":"Lo\u1ea1i b\u1ecf c\u1ed9t","col_after_desc":"Ch\u00e8n c\u1ed9t v\u00e0o sau","col_before_desc":"Ch\u00e8n c\u1ed9t v\u00e0o tr\u01b0\u1edbc","delete_row_desc":"X\u00f3a d\u00f2ng","row_after_desc":"Ch\u00e8n h\u00e0ng v\u00e0o sau","row_before_desc":"Ch\u00e8n h\u00e0ng v\u00e0o tr\u01b0\u1edbc",desc:"Ch\u00e8n m\u1ed9t b\u1ea3ng m\u1edbi","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"N\u1ebfu b\u1ea1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u, b\u1ea1n s\u1ebd m\u1ea5t t\u1ea5t c\u1ea3 c\u00e1c n\u1ed9i dung m\u00e0 hi\u1ec7n \u0111ang trong tr\u00ecnh so\u1ea1n th\u1ea3o.\n\nB\u1ea1n c\u00f3 ch\u1eafc l\u00e0 b\u1ea1n mu\u1ed1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u?.","restore_content":"Kh\u00f4i ph\u1ee5c n\u1ed9i dung t\u1ef1 \u0111\u1ed9ng l\u01b0u l\u1ea1i.","unload_msg":"Nh\u1eefng thay \u0111\u1ed5i b\u1ea1n \u0111\u00e3 th\u1ef1c hi\u1ec7n s\u1ebd b\u1ecb m\u1ea5t n\u1ebfu b\u1ea1n \u0111i\u1ec1u h\u01b0\u1edbng \u0111i t\u1eeb trang n\u00e0y."},fullscreen:{desc:"B\u1eadt/t\u1eaft ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh"},media:{edit:"S\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang",desc:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","delta_height":"","delta_width":""},fullpage:{desc:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","delta_width":"","delta_height":""},template:{desc:"Ch\u00e8n m\u1ed9t n\u1ed9i dung m\u1eabu \u0111\u1ecbnh ngh\u0129a tr\u01b0\u1edbc"},visualchars:{desc:"B\u1eb7t/T\u1eaft c\u00e1c k\u00fd t\u1ef1 \u0111i\u1ec1u khi\u1ec3n tr\u1ef1c quan."},spellchecker:{desc:"B\u1eadt/T\u1eaft ki\u1ec3m tra ch\u00ednh t\u1ea3",menu:"Thi\u1ebft l\u1eadp ki\u1ec3m tra ch\u00ednh t\u1ea3","ignore_word":"B\u1ecf qua t\u1eeb ng\u1eef","ignore_words":"B\u1ecf qua t\u1ea5t c\u1ea3",langs:"Ng\u00f4n ng\u1eef",wait:"Vui l\u00f2ng ch\u1edd...",sug:"G\u1ee3i \u00fd","no_sug":"Kh\u00f4ng c\u00f3 g\u1ee3i \u00fd","no_mpell":"Kh\u00f4ng c\u00f3 l\u1ed7i ch\u00ednh t\u1ea3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","learn_word":"Learn word"},pagebreak:{desc:"Ch\u00e8n ng\u1eaft trang."},advlist:{types:"Ki\u1ec3u",def:"M\u1eb7c \u0111\u1ecbnh","lower_alpha":"K\u00fd hi\u1ec7u alpha th\u01b0\u1eddng","lower_greek":"K\u00fd hi\u1ec7u Hy-l\u1ea1p th\u01b0\u1eddng","lower_roman":"K\u00fd hi\u1ec7u La m\u00e3 th\u01b0\u1eddng","upper_alpha":"K\u00fd hi\u1ec7u alpha cao","upper_roman":"K\u00fd hi\u1ec7u La m\u00e3 hoa",circle:"Tr\u00f2n",disc:"\u0110\u0129a",square:"Vu\u00f4ng"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/zh-cn.js b/ehcp/net2ftp/plugins/tinymce/langs/zh-cn.js new file mode 100644 index 0000000..42f7abb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/zh-cn.js @@ -0,0 +1 @@ +tinyMCE.addI18n({"zh-cn":{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef\uff1a\u6807\u8bb0\u4e3a\u7ea2\u8272\u7684\u90e8\u5206\u6709\u8bef\u3002","popup_blocked":"\u62b1\u6b49\uff0c\u60a8\u7981\u7528\u4e86\u5f39\u51fa\u7a97\u53e3\u529f\u80fd\u3002\u4e3a\u4e86\u4f7f\u7528\u8be5\u5de5\u5177\u7684\u5168\u90e8\u529f\u80fd\uff0c\u60a8\u9700\u8981\u5141\u8bb8\u5f39\u51fa\u7a97\u53e3\u3002","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\uff0c\u4f7f\u7528\u5feb\u6377\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","not_set":"-- \u672a\u8bbe\u7f6e --","class_name":"\u7c7b\u522b",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u8be5\u6587\u672c\u57df\u662f\u5426\u9700\u8981\u4f7f\u7528\u6240\u89c1\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57","invalid_data_min":"{#field} \u5fc5\u987b\u4e3a\u5927\u4e8e {#min} \u7684\u6570\u5b57","invalid_data_size":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57\u6216\u767e\u5206\u6570",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5c42...","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u65b0\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u4e0d\u95f4\u65ad\u7a7a\u683c\u7b26"},iespell:{download:"\u62fc\u5199\u68c0\u67e5\u672a\u5b89\u88c5\uff0c\u662f\u5426\u9a6c\u4e0a\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","advhr_desc":"\u6c34\u5e73\u7ebf"},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\uff0c\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\u3002\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\uff0c\u5728\u60a8\u7c98\u8d34\u5185\u5bb9\u540e\u5c06\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u7c98\u8d34","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u7c98\u8d34"},"paste_dlg":{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"},table:{cell:"\u5355\u5143\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u884c","cut_row_desc":"\u526a\u5207\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u7c98\u8d34\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u7c98\u8d34\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u5355\u5143\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u5355\u5143\u683c","split_cells_desc":"\u5206\u5272\u5355\u5143\u683c","delete_col_desc":"\u5220\u9664\u5217","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","delete_row_desc":"\u5220\u9664\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5f53\u524d\u7f16\u8f91\u7684\u6240\u6709\u7684\u5185\u5bb9\u5c06\u4e22\u5931\u3002nn\u60a8\u786e\u5b9a\u8981\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\u5417\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u4fdd\u5b58\u7684\u5185\u5bb9\u3002","unload_msg":"\u5982\u679c\u9000\u51fa\u8be5\u9875\uff0c\u60a8\u6240\u505a\u7684\u66f4\u6539\u5c06\u4e22\u5931\u3002"},fullscreen:{desc:"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6\u5c5e\u6027","delta_width":"\u5bbd\u5ea6","delta_height":"\u9ad8\u5ea6"},template:{desc:"\u63d2\u5165\u9884\u8bbe\u7684\u6a21\u677f\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf \u975e\u53ef\u89c1\u5b57\u7b26"},spellchecker:{desc:"\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae","no_sug":"\u65e0\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"\u5b66\u4e60\u8bcd\u7ec4"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26"},advlist:{types:"\u6837\u5f0f",def:"\u9ed8\u8ba4","lower_alpha":"\u5c0f\u5199\u5b57\u6bcd","lower_greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","lower_roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","upper_alpha":"\u5927\u5199\u5b57\u6bcd","upper_roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u5757"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u5bcc\u6587\u672c\u57df"},wordcount:{words:"\u5b57\u6570:"}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/zh-tw.js b/ehcp/net2ftp/plugins/tinymce/langs/zh-tw.js new file mode 100644 index 0000000..9352b26 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/zh-tw.js @@ -0,0 +1 @@ +tinyMCE.addI18n({"zh-tw":{common:{"more_colors":"\u5176\u4ed6\u984f\u8272","invalid_data":"\u7d05\u8272\u6a19\u793a\u8d77\u4f86\u7684\u5730\u65b9\u6709\u932f\u8aa4","popup_blocked":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u6539\u8b8a\u8edf\u9ad4\u6709\u95dc\u5f48\u8df3\u8996\u7a97\u8a2d\u5b9a\uff0c\u8acb\u5141\u8a31\u4ed6\uff0c\u7a0b\u5f0f\u624d\u80fd\u6b63\u5e38\u904b\u4f5c","clipboard_no_support":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u4f7f\u7528\u9375\u76e4\u4e0a\u7684\u5feb\u901f\u9375\u8a66\u8a66\u770b\uff0c\u656c\u8acb\u898b\u8ad2","clipboard_msg":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u529f\u80fd\u5594\uff01\u5efa\u8b70\u4f7f\u7528\u9375\u76e4\u4e0a\u7684 Ctrl X (\u526a\u4e0b) \u6216 Ctrl V (\u8cbc\u4e0a) \u4ee3\u66ff","not_set":"- \u672a\u8a2d\u5b9a -","class_name":"Class \u985e\u5225",browse:"\u700f\u89bd",close:"\u95dc\u9589\u756b\u9762",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u52a0\u5165",apply:"\u9810\u89bd","edit_confirm":"\u4f60\u8981\u4f7f\u7528\u300c\u6587\u5b57\u7de8\u8f2f\u5668\u300d\u4f86\u7de8\u8f2f\u4f60\u7684\u6587\u7ae0\u55ce\uff1f","invalid_data_number":"{#field} \u61c9\u8a72\u8981\u586b\u6578\u5b57","invalid_data_min":"{#field} \u4f60\u586b\u5beb\u7684\u6578\u5b57\uff0c\u5fc5\u9808\u5927\u65bc {#min}","invalid_data_size":"{#field} \u61c9\u8a72\u8981\u586b\u5beb\u6578\u5b57 \u6216 \u767e\u5206\u6bd4 (%)",value:"(value)"},contextmenu:{full:"\u5206\u6563\u5c0d\u9f4a",right:"\u5411\u53f3\u908a",center:"\u7f6e\u4e2d",left:"\u5411\u5de6\u908a",align:"\u5c0d\u9f4a\u65b9\u5f0f"},insertdatetime:{"day_short":"\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u6642\u9593","insertdate_desc":"\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u908a\u5230\u5de6\u908a","ltr_desc":"\u5f9e\u5de6\u908a\u5230\u53f3\u908a"},layer:{content:"\u65b0\u589e\u7db2\u9801\u5716\u5c64","absolute_desc":"\u5b9a\u4f4d","backward_desc":"\u653e\u5230\u5f8c\u9762","forward_desc":"\u6392\u5728\u524d\u9762","insertlayer_desc":"\u65b0\u589e\u7db2\u9801\u5716\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u5168\u90e8\u53d6\u6d88"},nonbreaking:{"nonbreaking_desc":"\u52a0\u5165\u4e0d\u65b7\u884c\u7684\u7b26\u865f"},iespell:{download:"\u7a0b\u5f0f\u627e\u4e0d\u5230 ieSpell \uff0c\u4f60\u8981\u5b89\u88dd\u5b83\u55ce\uff1f","iespell_desc":"\u6aa2\u67e5\u82f1\u6587\u8a9e\u6cd5"},advhr:{"delta_height":"\u9ad8","delta_width":"\u5bec","advhr_desc":"\u6c34\u5e73\u7dda"},emotions:{"delta_height":"","emotions_desc":"\u8868\u60c5\u7b26\u865f","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u52a0\u5165 / \u7de8\u8f2f\u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u65b0\u589e / \u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u65b0\u589e","del_desc":"\u522a\u9664","acronym_desc":"\u982d\u5b57\u8a9e (\u975e\u4e00\u822c\u82f1\u6587\u7e2e\u5beb)","abbr_desc":"\u82f1\u6587\u7e2e\u5beb","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57","plaintext_mode_sticky":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57\uff0c\u4f46\u4f60\u8cbc\u4e0a\u8cc7\u6599\u5f8c\u5c07\u56de\u5230\u4e00\u822c\u6a21\u5f0f\u53ef\u4ee5\u8cbc\u4e0a\u5716\u7247\u3001\u5f71\u7247\u7b49\u7b49","selectall_desc":"\u5168\u9078","paste_word_desc":"\u5f9e Word \u8cbc\u4e0a","paste_text_desc":"\u53ea\u8cbc\u4e0a\u6587\u5b57"},"paste_dlg":{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"},table:{cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u5217",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u8868\u683c\u4e0a\u7684\u5217","cut_row_desc":"\u526a\u4e0b\u8868\u683c\u7684\u5217","paste_row_after_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u5f8c\u9762","paste_row_before_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u524d\u9762","props_desc":"\u8868\u683c\u8a2d\u5b9a","cell_desc":"\u5132\u5b58\u683c\u7684\u8a2d\u5b9a","row_desc":"\u5217\u7684\u8a2d\u5b9a","merge_cells_desc":"\u5408\u4f75\u8868\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u79fb\u9664\u8868\u683c\u6b04\u4f4d","col_after_desc":"\u5728\u53f3\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","col_before_desc":"\u5728\u5de6\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","delete_row_desc":"\u522a\u9664\u9019\u6574\u5217","row_after_desc":"\u5728\u4e0b\u65b9\u52a0\u5165\u4e00\u5217","row_before_desc":"\u5728\u4e0a\u65b9\u52a0\u5165\u4e00\u5217",desc:"\u65b0\u589e\u4e00\u500b\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u4f60\u8981\u9084\u539f\u8cc7\u6599\u7684\u8a71\uff0c\u4f60\u73fe\u5728\u7684\u6587\u7ae0\u5c07\u88ab\u522a\u9664\uff0c\u78ba\u5b9a\u8981\u9084\u539f\u55ce\uff1f","restore_content":"\u9084\u539f","unload_msg":"\u4f60\u5982\u679c\u96e2\u958b\u9019\u500b\u756b\u9762\uff0c\u7a0b\u5f0f\u6703\u79fb\u9664\u6587\u7ae0\u5099\u4efd (\u4f46\u4e0d\u5f71\u97ff\u5230\u7db2\u7ad9\u904b\u4f5c)"},fullscreen:{desc:"\u653e\u5927\u5230\u6574\u500b\u87a2\u5e55"},media:{"delta_height":"",edit:"\u6539\u8b8a\u8a2d\u5b9a",desc:"\u52a0\u5165\u5d4c\u5165\u8a9e\u6cd5","delta_width":""},fullpage:{desc:"\u9801\u9762\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u4f7f\u7528\u7248\u578b"},visualchars:{desc:"\u986f\u793a\u96b1\u85cf\u7684\u5b57"},spellchecker:{desc:"\u4f7f\u7528\u82f1\u6587\u8a9e\u6cd5\u6aa2\u67e5",menu:"\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u7a0d\u7b49",sug:"\u62fc\u5b57\u5efa\u8b70","no_sug":"\u7121","no_mpell":"\u6c92\u6709\u8a9e\u6cd5\u4e0a\u7684\u554f\u984c","learn_word":"\u81ea\u52d5\u5b78\u7fd2\u529f\u80fd"},pagebreak:{desc:"\u52a0\u4e0a\u5206\u9801\u7b26\u865f"},advlist:{types:"\u5f62\u5f0f",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587","lower_greek":"\u5e0c\u81d8\u6587","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u6578\u5b57","upper_alpha":"\u5927\u5beb\u7684\u82f1\u6587","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u6578\u5b57",circle:"\u7a7a\u5fc3\u7684\u5713\u5708\u5708",disc:"\u5713\u5708\u5708",square:"\u6b63\u65b9\u5f62"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340"},wordcount:{words:"\u6587\u7ae0\u5167\u7684\u5b57\u6578: "}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/langs/zh.js b/ehcp/net2ftp/plugins/tinymce/langs/zh.js new file mode 100644 index 0000000..d43fbeb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/langs/zh.js @@ -0,0 +1,154 @@ +tinyMCE.addI18n({zh:{ +common:{ +edit_confirm:"\u662F\u5426\u5728\u8A72text area\u5167\u555F\u7528\u6240\u898B\u5373\u6240\u5F97\u6A21\u5F0F\uFF1F", +apply:"\u61C9\u7528", +insert:"\u63D2\u5165", +update:"\u66F4\u65B0", +cancel:"\u53D6\u6D88", +close:"\u95DC\u9589", +browse:"\u6D41\u89BD", +class_name:"\u6A23\u5F0F\u985E\u540D", +not_set:"-- \u672A\u8A2D\u7F6E --", +clipboard_msg:"\u8907\u88FD\u3001\u526A\u5207\u548C\u7C98\u8CBC\u529F\u80FD\u5728Mozilla \u548C Firefox\u4E2D\u7121\u6CD5\u4F7F\u7528", +clipboard_no_support:"\u5C1A\u4E0D\u652F\u63F4\u60A8\u6240\u4F7F\u7528\u7684\u6D41\u89BD\u5668\uFF0C\u8ACB\u4F7F\u7528\u9375\u76E4\u65B9\u5F0F\u64CD\u4F5C", +popup_blocked:"\u5C0D\u4E0D\u8D77\uFF0C\u60A8\u7684\u5FEB\u986F\u8996\u7A97\u963B\u6B62\u7A0B\u5F0F\u5DF2\u7D93\u963B\u6B62\u4E86\u672C\u5FEB\u986F\u8996\u7A97\uFF0C\u8ACB\u8ABF\u6574\u4F60\u7684\u6D41\u89BD\u5668\u8A2D\u7F6E\uFF0C\u5141\u8A31\u672C\u7DB2\u7AD9\u5F48\u51FA\u65B0\u8996\u7A97\uFF0C\u4EE5\u4FBF\u4F7F\u7528\u6B64\u529F\u80FD", +invalid_data:"\u932F\u8AA4\uFF1A\u8F38\u5165\u4E86\u7121\u6548\u7684\u503C\uFF0C\u5DF2\u6A19\u8A18\u70BA\u7D05\u8272\u3002", +more_colors:"\u66F4\u591A\u984F\u8272" +}, +contextmenu:{ +align:"\u5C0D\u9F4A\u65B9\u5F0F", +left:"\u5DE6\u5C0D\u9F4A", +center:"\u5C45\u4E2D", +right:"\u53F3\u5C0D\u9F4A", +full:"\u5169\u7AEF\u5C0D\u9F4A" +}, +insertdatetime:{ +date_fmt:"%Y-%m-%d", +time_fmt:"%H:%M:%S", +insertdate_desc:"\u63D2\u5165\u4ECA\u5929\u65E5\u671F", +inserttime_desc:"\u63D2\u5165\u73FE\u5728\u6642\u9593", +months_long:"\u4E00\u6708,\u4E8C\u6708,\u4E09\u6708,\u56DB\u6708,\u4E94\u6708,\u516D\u6708,\u4E03\u6708,\u516B\u6708,\u4E5D\u6708,\u5341\u6708,\u5341\u4E00\u6708,\u5341\u4E8C\u6708", +months_short:"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708", +day_long:"\u661F\u671F\u65E5,\u661F\u671F\u4E00,\u661F\u671F\u4E8C,\u661F\u671F\u4E09,\u661F\u671F\u56DB,\u661F\u671F\u4E94,\u661F\u671F\u516D,\u661F\u671F\u65E5", +day_short:"\u5468\u65E5,\u9031\u4E00,\u9031\u4E8C,\u9031\u4E09,\u9031\u56DB,\u9031\u4E94,\u9031\u516D,\u5468\u65E5" +}, +print:{ +print_desc:"\u5217\u5370" +}, +preview:{ +preview_desc:"\u9810\u89BD" +}, +directionality:{ +ltr_desc:"\u6587\u5B57\u5F9E\u5DE6\u5230\u53F3", +rtl_desc:"\u6587\u5B57\u5F9E\u53F3\u5230\u5DE6" +}, +layer:{ +insertlayer_desc:"\u63D2\u5165\u5C64", +forward_desc:"\u524D\u7F6E", +backward_desc:"\u5F8C\u7F6E", +absolute_desc:"\u7D55\u5C0D\u4F4D\u7F6E", +content:"\u65B0\u589E\u5C64..." +}, +save:{ +save_desc:"\u4FDD\u5B58", +cancel_desc:"\u653E\u68C4\u6240\u6709\u66F4\u6539" +}, +nonbreaking:{ +nonbreaking_desc:"\u63D2\u5165\u7A7A\u767D\u5B57\u5143" +}, +iespell:{ +iespell_desc:"\u57F7\u884C\u62FC\u5BEB\u6AA2\u67E5", +download:"\u672A\u6AA2\u6E2C\u5230ieSpell\u5143\u4EF6\uFF0C\u662F\u5426\u73FE\u5728\u5B89\u88DD ?" +}, +advhr:{ +advhr_desc:"\u5206\u9694\u7DDA" +}, +emotions:{ +emotions_desc:"\u8868\u60C5" +}, +searchreplace:{ +search_desc:"\u67E5\u627E", +replace_desc:"\u67E5\u627E/\u66FF\u63DB" +}, +advimage:{ +image_desc:"\u63D2\u5165/\u7DE8\u8F2F \u5716\u7247" +}, +advlink:{ +link_desc:"\u63D2\u5165/\u7DE8\u8F2F \u9023\u7D50" +}, +xhtmlxtras:{ +cite_desc:"\u5F15\u7528", +abbr_desc:"\u7E2E\u5BEB", +acronym_desc:"\u9996\u5B57\u6BCD\u7E2E\u5BEB", +del_desc:"\u522A\u9664", +ins_desc:"\u63D2\u5165", +attribs_desc:"\u63D2\u5165/\u7DE8\u8F2F \u5C6C\u6027" +}, +style:{ +desc:"\u7DE8\u8F2F CSS \u6A23\u5F0F\u8868" +}, +paste:{ +paste_text_desc:"\u7C98\u8CBC\u70BA\u7D14\u6587\u5B57", +paste_word_desc:"\u7C98\u8CBC\u70BAWord\u683C\u5F0F", +selectall_desc:"\u5168\u9078" +}, +paste_dlg:{ +text_title:"\u5C07\u8907\u88FD(CTRL + C)\u7684\u5167\u5BB9\u7C98\u8CBC(CTRL + V)\u5230\u8996\u7A97\u3002", +text_linebreaks:"\u4FDD\u7559\u5206\u884C\u7B26\u865F\u865F", +word_title:"\u5C07\u8907\u88FD(CTRL + C)\u7684\u5167\u5BB9\u7C98\u8CBC(CTRL + V)\u5230\u8996\u7A97\u3002" +}, +table:{ +desc:"\u63D2\u5165\u65B0\u8868\u683C", +row_before_desc:"\u5728\u4E0A\u65B9\u63D2\u5165\u884C", +row_after_desc:"\u5728\u4E0B\u65B9\u63D2\u5165\u884C", +delete_row_desc:"\u522A\u9664\u7576\u524D\u884C", +col_before_desc:"\u5728\u5DE6\u5074\u63D2\u5165\u5217", +col_after_desc:"\u5728\u53F3\u5074\u63D2\u5165\u5217", +delete_col_desc:"\u522A\u9664\u7576\u524D\u5217", +split_cells_desc:"\u62C6\u5206\u5132\u5B58\u683C", +merge_cells_desc:"\u5408\u4F75\u5132\u5B58\u683C", +row_desc:"\u5217 \u5C6C\u6027", +cell_desc:"\u5132\u5B58\u683C \u5C6C\u6027", +props_desc:"\u8868\u683C \u5C6C\u6027", +paste_row_before_desc:"\u7C98\u8CBC\u884C\u5230\u4E0A\u65B9", +paste_row_after_desc:"\u7C98\u8CBC\u884C\u5230\u4E0B\u65B9", +cut_row_desc:"\u526A\u5207\u7576\u524D\u5217", +copy_row_desc:"\u8907\u88FD\u7576\u524D\u5217", +del:"\u522A\u9664\u8868\u683C", +row:"\u884C", +col:"\u5217", +cell:"\u5132\u5B58\u683C" +}, +autosave:{ +unload_msg:"\u5982\u679C\u96E2\u958B\u8A72\u9801\u5C07\u5C0E\u81F4\u6240\u6709\u4FEE\u6539\u5168\u90E8\u4E1F\u5931\u3002" +}, +fullscreen:{ +desc:"\u5168\u5C4F\u6A21\u5F0F" +}, +media:{ +desc:"\u63D2\u5165/\u7DE8\u8F2F \u5A92\u9AD4", +edit:"\u7DE8\u8F2F \u5A92\u9AD4" +}, +fullpage:{ +desc:"\u6587\u4EF6" +}, +template:{ +desc:"\u63D2\u5165\u9078\u5B9A\u7684\u7BC4\u672C" +}, +visualchars:{ +desc:"\u986F\u793A\u63A7\u5236\u7B26\u865F\u3002" +}, +spellchecker:{ +desc:"\u62FC\u5BEB\u6AA2\u67E5", +menu:"\u62FC\u5BEB\u6AA2\u67E5 \u8A2D\u7F6E", +ignore_word:"\u5FFD\u7565", +ignore_words:"\u5168\u90E8\u5FFD\u7565", +langs:"\u8A9E\u8A00\u6E05\u55AE", +wait:"\u8ACB\u7A0D\u5019...", +sug:"\u5EFA\u8B70\u8A5E", +no_sug:"\u7121\u62FC\u5BEB\u5EFA\u8B70", +no_mpell:"\u7121\u62FC\u5BEB\u932F\u8AA4" +}, +pagebreak:{ +desc:"\u63D2\u5165\u5206\u9801\u7B26\u865F" +}}}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/license.txt b/ehcp/net2ftp/plugins/tinymce/license.txt new file mode 100644 index 0000000..60d6d4c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/license.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advhr/css/advhr.css b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/css/advhr.css new file mode 100644 index 0000000..0e22834 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/css/advhr.css @@ -0,0 +1,5 @@ +input.radio {border:1px none #000; background:transparent; vertical-align:middle;} +.panel_wrapper div.current {height:80px;} +#width {width:50px; vertical-align:middle;} +#width2 {width:50px; vertical-align:middle;} +#size {width:100px;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin.js new file mode 100644 index 0000000..4d3b062 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin_src.js new file mode 100644 index 0000000..0c652d3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/editor_plugin_src.js @@ -0,0 +1,57 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedHRPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceAdvancedHr', function() { + ed.windowManager.open({ + file : url + '/rule.htm', + width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)), + height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('advhr', { + title : 'advhr.advhr_desc', + cmd : 'mceAdvancedHr' + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('advhr', n.nodeName == 'HR'); + }); + + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'HR') + ed.selection.select(e); + }); + }, + + getInfo : function() { + return { + longname : 'Advanced HR', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advhr/js/rule.js b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/js/rule.js new file mode 100644 index 0000000..b6cbd66 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advhr/js/rule.js @@ -0,0 +1,43 @@ +var AdvHRDialog = { + init : function(ed) { + var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w; + + w = dom.getAttrib(n, 'width'); + f.width.value = w ? parseInt(w) : (dom.getStyle('width') || ''); + f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || ''; + f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width'); + selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px'); + }, + + update : function() { + var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = ''; + + h = ' + + + {#advhr.advhr_desc} + + + + + + + +
        + + +
        +
        + + + + + + + + + + + + + +
        + + + +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/css/advimage.css b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/css/advimage.css new file mode 100644 index 0000000..0a6251a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/css/advimage.css @@ -0,0 +1,13 @@ +#src_list, #over_list, #out_list {width:280px;} +.mceActionPanel {margin-top:7px;} +.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} +.checkbox {border:0;} +.panel_wrapper div.current {height:305px;} +#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} +#align, #classlist {width:150px;} +#width, #height {vertical-align:middle; width:50px; text-align:center;} +#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} +#class_list {width:180px;} +input {width: 280px;} +#constrain, #onmousemovecheck {width:auto;} +#id, #dir, #lang, #usemap, #longdesc {width:200px;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin.js new file mode 100644 index 0000000..d613a61 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin_src.js new file mode 100644 index 0000000..d2678cb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/editor_plugin_src.js @@ -0,0 +1,50 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedImagePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceAdvImage', function() { + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + file : url + '/image.htm', + width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), + height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('image', { + title : 'advimage.image_desc', + cmd : 'mceAdvImage' + }); + }, + + getInfo : function() { + return { + longname : 'Advanced image', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/image.htm b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/image.htm new file mode 100644 index 0000000..ed16b3d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/image.htm @@ -0,0 +1,235 @@ + + + + {#advimage_dlg.dialog_title} + + + + + + + + + + +
        + + +
        +
        +
        + {#advimage_dlg.general} + + + + + + + + + + + + + + + + + + + +
        + +
        + {#advimage_dlg.preview} + +
        +
        + +
        +
        + {#advimage_dlg.tab_appearance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + {#advimage_dlg.example_img} + Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam + nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum + edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam + erat volutpat. +
        +
        + + x + + px +
          + + + + +
        +
        +
        +
        + +
        +
        + {#advimage_dlg.swap_image} + + + + + + + + + + + + + + + + + + + + + +
        + + + + +
         
        + + + + +
         
        +
        + +
        + {#advimage_dlg.misc} + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        + +
        + + + + +
         
        +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/img/sample.gif b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/img/sample.gif new file mode 100644 index 0000000..53bf689 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/img/sample.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/js/image.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/js/image.js new file mode 100644 index 0000000..f0b7c6e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/js/image.js @@ -0,0 +1,464 @@ +var ImageDialog = { + preInit : function() { + var url; + + tinyMCEPopup.requireLangPack(); + + if (url = tinyMCEPopup.getParam("external_image_list_url")) + document.write(''); + }, + + init : function(ed) { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'); + + tinyMCEPopup.resizeToInnerSize(); + this.fillClassList('class_list'); + this.fillFileList('src_list', fl); + this.fillFileList('over_list', fl); + this.fillFileList('out_list', fl); + TinyMCE_EditableSelects.init(); + + if (n.nodeName == 'IMG') { + nl.src.value = dom.getAttrib(n, 'src'); + nl.width.value = dom.getAttrib(n, 'width'); + nl.height.value = dom.getAttrib(n, 'height'); + nl.alt.value = dom.getAttrib(n, 'alt'); + nl.title.value = dom.getAttrib(n, 'title'); + nl.vspace.value = this.getAttrib(n, 'vspace'); + nl.hspace.value = this.getAttrib(n, 'hspace'); + nl.border.value = this.getAttrib(n, 'border'); + selectByValue(f, 'align', this.getAttrib(n, 'align')); + selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); + nl.style.value = dom.getAttrib(n, 'style'); + nl.id.value = dom.getAttrib(n, 'id'); + nl.dir.value = dom.getAttrib(n, 'dir'); + nl.lang.value = dom.getAttrib(n, 'lang'); + nl.usemap.value = dom.getAttrib(n, 'usemap'); + nl.longdesc.value = dom.getAttrib(n, 'longdesc'); + nl.insert.value = ed.getLang('update'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) + nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) + nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (ed.settings.inline_styles) { + // Move attribs to styles + if (dom.getAttrib(n, 'align')) + this.updateStyle('align'); + + if (dom.getAttrib(n, 'hspace')) + this.updateStyle('hspace'); + + if (dom.getAttrib(n, 'border')) + this.updateStyle('border'); + + if (dom.getAttrib(n, 'vspace')) + this.updateStyle('vspace'); + } + } + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); + if (isVisible('overbrowser')) + document.getElementById('onmouseoversrc').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); + if (isVisible('outbrowser')) + document.getElementById('onmouseoutsrc').style.width = '260px'; + + // If option enabled default contrain proportions to checked + if (ed.getParam("advimage_constrain_proportions", true)) + f.constrain.checked = true; + + // Check swap image if valid data + if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) + this.setSwapImage(true); + else + this.setSwapImage(false); + + this.changeAppearance(); + this.showPreviewImage(nl.src.value, 1); + }, + + insert : function(file, title) { + var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { + if (!f.alt.value) { + tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { + if (s) + t.insertAndClose(); + }); + + return; + } + } + + t.insertAndClose(); + }, + + insertAndClose : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + // Fixes crash in Safari + if (tinymce.isWebKit) + ed.getWin().focus(); + + if (!ed.settings.inline_styles) { + args = { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }; + } else { + // Remove deprecated values + args = { + vspace : '', + hspace : '', + border : '', + align : '' + }; + } + + tinymce.extend(args, { + src : nl.src.value.replace(/ /g, '%20'), + width : nl.width.value, + height : nl.height.value, + alt : nl.alt.value, + title : nl.title.value, + 'class' : getSelectValue(f, 'class_list'), + style : nl.style.value, + id : nl.id.value, + dir : nl.dir.value, + lang : nl.lang.value, + usemap : nl.usemap.value, + longdesc : nl.longdesc.value + }); + + args.onmouseover = args.onmouseout = ''; + + if (f.onmousemovecheck.checked) { + if (nl.onmouseoversrc.value) + args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; + + if (nl.onmouseoutsrc.value) + args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; + } + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + } else { + tinymce.each(args, function(value, name) { + if (value === "") { + delete args[name]; + } + }); + + ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); + ed.undoManager.add(); + } + + tinyMCEPopup.editor.execCommand('mceRepaint'); + tinyMCEPopup.editor.focus(); + tinyMCEPopup.close(); + }, + + 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 ''; + }, + + setSwapImage : function(st) { + var f = document.forms[0]; + + f.onmousemovecheck.checked = st; + setBrowserDisabled('overbrowser', !st); + setBrowserDisabled('outbrowser', !st); + + if (f.over_list) + f.over_list.disabled = !st; + + if (f.out_list) + f.out_list.disabled = !st; + + f.onmouseoversrc.disabled = !st; + f.onmouseoutsrc.disabled = !st; + }, + + 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.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')); + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = typeof(l) === 'function' ? l() : window[l]; + lst.options.length = 0; + + 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')); + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.elements.width.value = f.elements.height.value = ''; + }, + + updateImageData : function(img, st) { + var f = document.forms[0]; + + if (!st) { + f.elements.width.value = img.width; + f.elements.height.value = img.height; + } + + this.preloadImg = img; + }, + + changeAppearance : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); + + if (img) { + if (ed.getParam('inline_styles')) { + ed.dom.setAttrib(img, 'style', f.style.value); + } else { + img.align = f.align.value; + img.border = f.border.value; + img.hspace = f.hspace.value; + img.vspace = f.vspace.value; + } + } + }, + + changeHeight : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; + f.height.value = tp.toFixed(0); + }, + + changeWidth : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; + f.width.value = tp.toFixed(0); + }, + + updateStyle : function(ty) { + var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); + + if (tinyMCEPopup.editor.settings.inline_styles) { + // Handle align + if (ty == 'align') { + dom.setStyle(img, 'float', ''); + dom.setStyle(img, 'vertical-align', ''); + + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') + dom.setStyle(img, 'float', v); + else + img.style.verticalAlign = v; + } + } + + // Handle border + if (ty == 'border') { + b = img.style.border ? img.style.border.split(' ') : []; + bStyle = dom.getStyle(img, 'border-style'); + bColor = dom.getStyle(img, 'border-color'); + + dom.setStyle(img, 'border', ''); + + v = f.border.value; + if (v || v == '0') { + if (v == '0') + img.style.border = isIE ? '0' : '0 none none'; + else { + var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9); + + if (b.length == 3 && b[isOldIE ? 2 : 1]) + bStyle = b[isOldIE ? 2 : 1]; + else if (!bStyle || bStyle == 'none') + bStyle = 'solid'; + if (b.length == 3 && b[isIE ? 0 : 2]) + bColor = b[isOldIE ? 0 : 2]; + else if (!bColor || bColor == 'none') + bColor = 'black'; + img.style.border = v + 'px ' + bStyle + ' ' + bColor; + } + } + } + + // Handle hspace + if (ty == 'hspace') { + dom.setStyle(img, 'marginLeft', ''); + dom.setStyle(img, 'marginRight', ''); + + v = f.hspace.value; + if (v) { + img.style.marginLeft = v + 'px'; + img.style.marginRight = v + 'px'; + } + } + + // Handle vspace + if (ty == 'vspace') { + dom.setStyle(img, 'marginTop', ''); + dom.setStyle(img, 'marginBottom', ''); + + v = f.vspace.value; + if (v) { + img.style.marginTop = v + 'px'; + img.style.marginBottom = v + 'px'; + } + } + + // Merge + dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); + } + }, + + changeMouseMove : function() { + }, + + showPreviewImage : function(u, st) { + if (!u) { + tinyMCEPopup.dom.setHTML('prev', ''); + return; + } + + if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) + this.resetImageData(); + + u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); + + if (!st) + tinyMCEPopup.dom.setHTML('prev', ''); + else + tinyMCEPopup.dom.setHTML('prev', ''); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ar_dlg.js new file mode 100644 index 0000000..2dd0417 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.advimage_dlg',{"image_list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631\u0629","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","align_texttop":"\u0627\u0639\u0644\u0649 \u0627\u0644\u0646\u0635","align_bottom":"\u0627\u0633\u0641\u0644","align_middle":"\u0648\u0633\u0637","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","align_baseline":"Baseline",align:"\u0645\u062d\u0627\u0632\u0627\u0647",hspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647",vspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0631\u0623\u0633\u064a\u0647",dimensions:"\u0627\u0644\u0623\u0628\u0639\u0627\u062f",border:"\u0627\u0644\u0625\u0637\u0627\u0631",list:"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631",alt:"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647",src:"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0647","dialog_title":"\u0627\u062f\u0631\u0627\u062c/\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0644\u0644\u064a\u0645\u064a\u0646",classes:"Classes",style:"\u0627\u0644\u0623\u0646\u0645\u0627\u0637","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"\u0645\u0634\u0627\u0647\u062f\u0647",title:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",general:"\u0639\u0627\u0645","tab_advanced":"\u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0647","tab_appearance":"\u0627\u0644\u0645\u0638\u0647\u0631","tab_general":"\u0639\u0627\u0645",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/cs_dlg.js new file mode 100644 index 0000000..cb9cb58 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.advimage_dlg',{"image_list":"Seznam obr\u00e1zk\u016f","align_right":"Vpravo","align_left":"Vlevo","align_textbottom":"Se spodkem \u0159\u00e1dku","align_texttop":"S vrchem \u0159\u00e1dku","align_bottom":"Dol\u016f","align_middle":"Na st\u0159ed \u0159\u00e1dku","align_top":"Nahoru","align_baseline":"Na z\u00e1kladnu",align:"Zarovn\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed",dimensions:"Rozm\u011bry",border:"R\u00e1me\u010dek",list:"Seznam obr\u00e1zk\u016f",alt:"Popis obr\u00e1zku",src:"URL obr\u00e1zku","dialog_title":"Vlo\u017eit/upravit obr\u00e1zek","missing_alt":"Skute\u010dn\u011b chcete pokra\u010dovat bez vlo\u017een\u00e9ho popisu obr\u00e1zku? Bez popisu m\u016f\u017ee b\u00fdt obr\u00e1zek nep\u0159\u00edstupn\u00fd u\u017eivatel\u016fm se zrakov\u00fdm posti\u017een\u00edm, u\u017eivatel\u016fm textov\u00fdch prohl\u00ed\u017ee\u010d\u016f nebo u\u017eivatel\u016fm, kte\u0159\u00ed maj\u00ed vypnuto zobrazov\u00e1n\u00ed obr\u00e1zk\u016f.","example_img":"P\u0159\u00edklad obr\u00e1zku",misc:"R\u016fzn\u00e9",mouseout:"Po odjet\u00ed my\u0161i...",mouseover:"P\u0159i najet\u00ed my\u0161i...","alt_image":"Alternativn\u00ed obr\u00e1zek","swap_image":"P\u0159epnout obr\u00e1zek",map:"Obr\u00e1zkov\u00e1 mapa",id:"ID",rtl:"Zprava doleva",ltr:"Zleva doprava",classes:"T\u0159\u00eddy",style:"Styl","long_desc":"Dlouh\u00fd popis",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu","constrain_proportions":"Zachovat proporce",preview:"N\u00e1hled",title:"Titulek",general:"Obecn\u00e9 parametry","tab_advanced":"Roz\u0161\u00ed\u0159en\u00e9","tab_appearance":"Vzhled","tab_general":"Obecn\u00e9",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/da_dlg.js new file mode 100644 index 0000000..66aa88b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.advimage_dlg',{"image_list":"Billedliste","align_right":"H\u00f8jre","align_left":"Venstre","align_textbottom":"Tekstbund","align_texttop":"Teksttop","align_bottom":"Bund","align_middle":"Midte","align_top":"Top","align_baseline":"Grundlinje",align:"Justering",hspace:"Horisontal afstand",vspace:"Vertikal afstand",dimensions:"Dimensioner",border:"Kant",list:"Billedliste",alt:"Billedbeskrivelse",src:"Billed-URL","dialog_title":"Inds\u00e6t/rediger billede","missing_alt":"Er du sikker p\u00e5, at du vil forts\u00e6tte uden at inkludere en billedebeskrivelse? Uden denne er billedet m\u00e5ske ikke tilg\u00e6ngeligt for nogle brugere med handicaps, eller for dem der bruger en tekstbrowser, eller som browser internettet med billeder sl\u00e5et fra.","example_img":"Forh\u00e5ndsvisning af billede",misc:"Diverse",mouseout:"for mus-ud",mouseover:"for mus-over","alt_image":"Alternativt billede","swap_image":"Byt billede",map:"Billede map",id:"Id",rtl:"H\u00f8jre til venstre",ltr:"Venstre til h\u00f8jre",classes:"Klasser",style:"Stil","long_desc":"Lang beskrivelseslink",langcode:"Sprogkode",langdir:"Sprogretning","constrain_proportions":"Bibehold proportioner",preview:"Vis",title:"Titel",general:"Generelt","tab_advanced":"Avanceret","tab_appearance":"Udseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/de_dlg.js new file mode 100644 index 0000000..c5ea891 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advimage_dlg',{"image_list":"Bilderliste","align_right":"Rechts","align_left":"Links","align_textbottom":"Unten im Text","align_texttop":"Oben im Text","align_bottom":"Unten","align_middle":"Mittig","align_top":"Oben","align_baseline":"Zeile",align:"Ausrichtung",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand",dimensions:"Ausma\u00dfe",border:"Rahmen",list:"Bilderliste",alt:"Beschreibung",src:"Adresse","dialog_title":"Bild einf\u00fcgen/ver\u00e4ndern","missing_alt":"Soll wirklich keine Beschreibung f\u00fcr das Bild eingegeben werden? Bestimmte Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnen so nicht darauf zugreifen, ebenso solche, die einen Textbrowser benutzen oder die Anzeige von Bildern deaktiviert haben.","example_img":"Vorschau auf das Aussehen",misc:"Verschiedenes",mouseout:"bei keinem Mauskontakt",mouseover:"bei Mauskontakt","alt_image":"Alternatives Bild","swap_image":"Bild austauschen",map:"Image-Map",id:"ID",rtl:"Rechts nach links",ltr:"Links nach rechts",classes:"Klassen",style:"Format","long_desc":"Ausf\u00fchrliche Beschreibung",langcode:"Sprachcode",langdir:"Schriftrichtung","constrain_proportions":"Seitenverh\u00e4ltnis beibehalten",preview:"Vorschau",title:"Titel",general:"Allgemein","tab_advanced":"Erweitert","tab_appearance":"Aussehen","tab_general":"Allgemein",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/en_dlg.js new file mode 100644 index 0000000..5f122e2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/es_dlg.js new file mode 100644 index 0000000..acb158c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/es_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('es.advimage_dlg',{ +tab_general:"General", +tab_appearance:"Apariencia", +tab_advanced:"Avanzado", +general:"General", +title:"T\u00EDtulo", +preview:"Vista previa", +constrain_proportions:"Bloquear relaci\u00F3n de aspecto", +langdir:"Direcci\u00F3n del lenguaje", +langcode:"C\u00F3digo del lenguaje", +long_desc:"V\u00EDnculo para descripci\u00F3n larga", +style:"Estilos", +classes:"Clases", +ltr:"Izquierda a derecha", +rtl:"Derecha a izquierda", +id:"Id", +map:"Mapa de imagen", +swap_image:"Intercambiar imagen", +alt_image:"Imagen alternativa", +mouseover:"para mouseover", +mouseout:"para mouseout", +misc:"Miscel\u00E1neo", +example_img:"Vista previa de la imagen", +missing_alt:"\u00BFEsta seguro de continuar sin introducir una descripci\u00F3n a la imagen? Sin ella puede no ser accesible para usuarios con discapacidades, o para aquellos que usen navegadores de modo texto, o tengan deshabilitadas las im\u00E1genes de la p\u00E1gina.", +dialog_title:"Insertar/editar imagen", +src:"URL de la imagen", +alt:"Descripci\u00F3n de la imagen", +list:"Lista de imagen", +border:"Bordes", +dimensions:"Dimensiones", +vspace:"Espacio vertical", +hspace:"Espacio horizontal", +align:"Alineaci\u00F3n", +align_baseline:"L\u00EDnea base", +align_top:"Arriba", +align_middle:"Medio", +align_bottom:"Debajo", +align_texttop:"Texto arriba", +align_textbottom:"Texto abajo", +align_left:"Izquierda", +align_right:"Derecha", +image_list:"Lista de imagen" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fi_dlg.js new file mode 100644 index 0000000..f85c1ec --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.advimage_dlg',{"image_list":"Kuvalista","align_right":"Oikealla","align_left":"Vasemmalla","align_textbottom":"Teksti alhaalla","align_texttop":"Teksti ylh\u00e4\u00e4ll\u00e4","align_bottom":"Alhaalla","align_middle":"Keskell\u00e4","align_top":"Ylh\u00e4\u00e4ll\u00e4","align_baseline":"Rivill\u00e4",align:"Tasaus",hspace:"vaakasuora tila",vspace:"pystysuora tila",dimensions:"Mitat",border:"Kehys",list:"Kuvalista",alt:"Kuvan kuvaus",src:"Kuvan URL","dialog_title":"Lis\u00e4\u00e4/muokkaa kuvaa","missing_alt":"Haluatko varmasti jatkaa lis\u00e4\u00e4m\u00e4tt\u00e4 kuvausta? Kuvauksen puuttuminen saattaa h\u00e4irit\u00e4 sellaisia, jotka k\u00e4ytt\u00e4v\u00e4t tekstipohjaista selainta tai ovat kytkeneet kuvien n\u00e4kymisen pois p\u00e4\u00e4lt\u00e4.","example_img":"Ulkoasun esikatselukuva",misc:"Sekalaiset",mouseout:"mouseoutille",mouseover:"mouseoverille","alt_image":"Vaihtoehtoinen kuva","swap_image":"Vaihda kuva",map:"Kuvakartta",id:"Id",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",classes:"Luokat",style:"Tyyli","long_desc":"Pitk\u00e4n kuvauksen linkki",langcode:"Kielen koodi",langdir:"Kielen suunta","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",preview:"Esikatselu",title:"Otsikko",general:"Yleiset","tab_advanced":"Edistynyt","tab_appearance":"N\u00e4kyminen","tab_general":"Yleiset",width:"Leveys",height:"Korkeus"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fr_dlg.js new file mode 100644 index 0000000..1479bf1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.advimage_dlg',{"image_list":"Liste d\'images","align_right":"Droite (flottant)","align_left":"Gauche (flottant)","align_textbottom":"Texte en bas","align_texttop":"Texte en haut","align_bottom":"En bas","align_middle":"Au milieu","align_top":"En haut","align_baseline":"Normal",align:"Alignement",hspace:"Espacement horizontal",vspace:"Espacement vertical",dimensions:"Dimensions",border:"Bordure",list:"Liste d\'images",alt:"Description de l\'image",src:"URL de l\'image","dialog_title":"Ins\u00e9rer / \u00e9diter une image","missing_alt":"\u00cates-vous s\u00fbr de vouloir continuer sans d\u00e9finir de description pour l\'image ? Sans elle, l\'image peut ne pas \u00eatre accessible \u00e0 certains utilisateurs handicap\u00e9s, ceux utilisant un navigateur texte ou ceux qui naviguent sans affichage des images.","example_img":"Apparence de l\'image",misc:"Divers",mouseout:"\u00e0 la sortie de la souris",mouseover:"au survol de la souris","alt_image":"Image alternative","swap_image":"Image de remplacement",map:"Image cliquable",id:"Id",rtl:"De droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",classes:"Classes",style:"Style","long_desc":"Description longue du lien",langcode:"Code de la langue",langdir:"Sens de lecture","constrain_proportions":"Conserver les proportions",preview:"Pr\u00e9visualisation",title:"Titre",general:"G\u00e9n\u00e9ral","tab_advanced":"Avanc\u00e9","tab_appearance":"Apparence","tab_general":"G\u00e9n\u00e9ral",width:"Largeur",height:"Hauteur"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/he_dlg.js new file mode 100644 index 0000000..fb3ea2a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.advimage_dlg',{"image_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_textbottom":"\u05d8\u05e7\u05e1\u05d8 \u05ea\u05d7\u05ea\u05d5\u05df","align_texttop":"\u05d8\u05e7\u05e1\u05d8 \u05e2\u05dc\u05d9\u05d5\u05df","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_middle":"\u05d0\u05de\u05e6\u05e2","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df","align_baseline":"\u05e7\u05d5 \u05d1\u05e1\u05d9\u05e1\u05d9",align:"\u05d9\u05e9\u05d5\u05e8",hspace:"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e7\u05d5 \u05d0\u05e0\u05db\u05d9",dimensions:"\u05de\u05d9\u05de\u05d3\u05d9\u05dd",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea",alt:"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",src:"URL \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","dialog_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","missing_alt":"\u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05de\u05d1\u05dc\u05d9 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05ea\u05d9\u05d0\u05d5\u05e8 \u05dc\u05ea\u05de\u05d5\u05e0\u05d4?","example_img":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4 \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",misc:"\u05e9\u05d5\u05e0\u05d5\u05ea",mouseout:"\u05d4\u05e1\u05de\u05df \u05e2\u05d1\u05e8 \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",mouseover:"\u05d1\u05e2\u05ea \u05de\u05e2\u05d1\u05e8 \u05d4\u05e1\u05de\u05df \u05e2\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","alt_image":"\u05ea\u05de\u05d5\u05e0\u05d4 \u05d7\u05dc\u05d9\u05e4\u05d9\u05ea","swap_image":"\u05d4\u05d7\u05dc\u05e4\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",map:"Image map",id:"Id",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df","long_desc":"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e8\u05d5\u05da",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","constrain_proportions":"\u05e9\u05de\u05d9\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",title:"\u05db\u05d5\u05ea\u05e8\u05ea",general:"\u05db\u05dc\u05dc\u05d9","tab_advanced":"\u05de\u05ea\u05e7\u05d3\u05dd","tab_appearance":"\u05de\u05e8\u05d0\u05d4","tab_general":"\u05db\u05dc\u05dc\u05d9",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/hu_dlg.js new file mode 100644 index 0000000..37c9346 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.advimage_dlg',{"image_list":"K\u00e9plista","align_right":"Jobbra","align_left":"Balra","align_textbottom":"Sz\u00f6veg alj\u00e1hoz","align_texttop":"Sz\u00f6veg tetej\u00e9hez","align_bottom":"Lentre","align_middle":"K\u00f6z\u00e9pre","align_top":"Fentre","align_baseline":"Alapvonalhoz",align:"Igaz\u00edt\u00e1s",hspace:"V\u00edzszintes t\u00e1vols\u00e1g",vspace:"F\u00fcgg\u0151leges t\u00e1vols\u00e1g",dimensions:"M\u00e9retek",border:"Keret",list:"K\u00e9plista",alt:"K\u00e9p helyettes\u00edt\u0151 sz\u00f6vege",src:"K\u00e9p internet c\u00edme","dialog_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","missing_alt":"Biztosan folytatja k\u00e9pet le\u00edr\u00f3 sz\u00f6veg n\u00e9lk\u00fcl? En\u00e9lk\u00fcl a fogyat\u00e9koss\u00e1ggal \u00e9l\u0151k, sz\u00f6veges b\u00f6ng\u00e9sz\u0151t haszn\u00e1l\u00f3k \u00e9s a k\u00e9pek megjelen\u00edt\u00e9s\u00e9t letilt\u00f3 felhaszn\u00e1l\u00f3k h\u00e1tr\u00e1nyba ker\u00fclnek.","example_img":"El\u0151n\u00e9zeti k\u00e9p megjelen\u00edt\u00e9se",misc:"Vegyes",mouseout:"K\u00e9p az eg\u00e9rkurzor lev\u00e9telekor",mouseover:"K\u00e9p az eg\u00e9rkurzor f\u00f6l\u00e9vitelekor","alt_image":"Alternat\u00edv k\u00e9p","swap_image":"K\u00e9pcsere",map:"K\u00e9p t\u00e9rk\u00e9p",id:"ID",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",classes:"Oszt\u00e1lyok",style:"CSS St\u00edlus","long_desc":"B\u0151vebb le\u00edr\u00e1s\u00fa link",langcode:"Nyelv k\u00f3d",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","constrain_proportions":"Ar\u00e1nytart\u00e1s",preview:"El\u0151n\u00e9zet",title:"C\u00edm",general:"\u00c1ltal\u00e1nos","tab_advanced":"Halad\u00f3","tab_appearance":"Megjelen\u00e9s","tab_general":"\u00c1ltal\u00e1nos",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/it_dlg.js new file mode 100644 index 0000000..9195c96 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.advimage_dlg',{"image_list":"Lista immagini","align_right":"A destra","align_left":"A sinistra","align_textbottom":"In basso al testo","align_texttop":"In alto al testo","align_bottom":"In basso","align_middle":"In mezzo","align_top":"In alto","align_baseline":"Alla base",align:"Allineamento",hspace:"Spaziatura orizzontale",vspace:"Spaziatura verticale",dimensions:"Dimensioni",border:"Bordo",list:"Lista immagini",alt:"Descrizione immagine",src:"URL immagine","dialog_title":"Inserisci/modifica immagine","missing_alt":"Sicuro di continuare senza includere una descrizione dell\'immagine? Senza di essa l\'immagine pu\u00f2 non essere accessibile ad alcuni utenti con disabilit\u00e0, o per coloro che usano un browser testuale oppure che hanno disabilitato la visualizzazione delle immagini nel loro browser.","example_img":"Anteprima aspetto immagine",misc:"Impostazioni varie",mouseout:"quando mouse fuori",mouseover:"quando mouse sopra","alt_image":"Immagine alternativa","swap_image":"Sostituisci immagine",map:"Immagine come mappa",id:"Id",rtl:"Destra verso sinistraa",ltr:"Sinistra verso destra",classes:"Classe",style:"Stile","long_desc":"Descrizione del collegamento",langcode:"codice lingua",langdir:"Direzione testo","constrain_proportions":"Mantieni proporzioni",preview:"Anteprima",title:"Titolo",general:"Generale","tab_advanced":"Avanzate","tab_appearance":"Aspetto","tab_general":"Generale",width:"Larghezza",height:"Altezza"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ja_dlg.js new file mode 100644 index 0000000..f8449c4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.advimage_dlg',{"image_list":"\u753b\u50cf\u306e\u4e00\u89a7","align_right":"\u53f3\u5bc4\u305b","align_left":"\u5de6\u5bc4\u305b","align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0b\u7aef\u63c3\u3048","align_texttop":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0a\u7aef\u63c3\u3048","align_bottom":"\u4e0b\u63c3\u3048","align_middle":"\u4e2d\u592e\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048","align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048",align:"\u914d\u7f6e",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d",dimensions:"\u5bf8\u6cd5",border:"\u67a0\u7dda",list:"\u753b\u50cf\u306e\u4e00\u89a7",alt:"\u753b\u50cf\u306e\u8aac\u660e",src:"\u753b\u50cf\u306eURL","dialog_title":"\u753b\u50cf\u3092\u633f\u5165/\u7de8\u96c6","missing_alt":"\u753b\u50cf\u306e\u8aac\u660e\u3092\u542b\u3081\u305a\u306b\u7d9a\u3051\u307e\u3059\u304b? \u753b\u50cf\u306e\u8aac\u660e\u304c\u306a\u3044\u3068\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u3001\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3060\u3051\u306e\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u65b9\u3001\u753b\u50cf\u306e\u8868\u793a\u3092\u6b62\u3081\u3066\u308b\u65b9\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","example_img":"\u753b\u50cf\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69d8\u5b50",misc:"\u305d\u306e\u4ed6",mouseout:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u6642",mouseover:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u304b\u304b\u308b\u6642","alt_image":"\u5225\u306e\u753b\u50cf","swap_image":"\u753b\u50cf\u306e\u5165\u308c\u66ff\u3048",map:"\u30a4\u30e1\u30fc\u30b8\u30de\u30c3\u30d7",id:"ID",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb","long_desc":"\u8a73\u7d30\u306a\u8aac\u660e\u306e\u30ea\u30f3\u30af",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","constrain_proportions":"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc",title:"\u30bf\u30a4\u30c8\u30eb",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","tab_appearance":"\u8868\u793a","tab_general":"\u4e00\u822c",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/nl_dlg.js new file mode 100644 index 0000000..ea72728 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.advimage_dlg',{"image_list":"Lijst","align_right":"Rechts","align_left":"Links","align_textbottom":"Onderkant tekst","align_texttop":"Bovenkant tekst","align_bottom":"Onder","align_middle":"Midden","align_top":"Boven","align_baseline":"Basislijn",align:"Uitlijning",hspace:"Horizontale ruimte",vspace:"Verticale ruimte",dimensions:"Afmetingen",border:"Rand",list:"Lijst",alt:"Beschrijving",src:"Bestand/URL","dialog_title":"Afbeelding invoegen/bewerken","missing_alt":"Wilt u de afbeelding zonder beschrijving invoegen? De afbeelding wordt dan mogelijk niet opgemerkt door mensen met een visuele handicap, of mensen die zonder afbeeldingen browsen.","example_img":"Voorbeeldweergave",misc:"Diversen",mouseout:"Bij muis uit",mouseover:"Bij muis over","alt_image":"Alternatieve afbeeldingen","swap_image":"Afbeelding wisselen",map:"Afbeeldingsplattegrond",id:"Id",rtl:"Van rechts naar links",ltr:"Van links naar rechts",classes:"Klasses",style:"Stijl","long_desc":"Uitgebreide beschrijving",langcode:"Taalcode",langdir:"Taalrichting","constrain_proportions":"Verhouding behouden",preview:"Voorbeeld",title:"Titel",general:"Algemeen","tab_advanced":"Geavanceerd","tab_appearance":"Weergave","tab_general":"Algemeen",width:"Breedte",height:"Hoogte"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pl_dlg.js new file mode 100644 index 0000000..c32f718 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.advimage_dlg',{"image_list":"Lista obrazk\u00f3w","align_right":"Prawy","align_left":"Lewy","align_textbottom":"Tekst dolny","align_texttop":"Tekst g\u00f3rny","align_bottom":"Dolny","align_middle":"\u015arodkowy","align_top":"G\u00f3rny","align_baseline":"G\u0142\u00f3wna linia",align:"Wyr\u00f3wnanie",hspace:"Odst\u0119p poziomy",vspace:"Odst\u0119p pionowy",dimensions:"Rozmiary",border:"Obramowanie",list:"Lista obrazk\u00f3w",alt:"Opis obrazka",src:"URL obrazka","dialog_title":"Wklej/edytuj obraz","missing_alt":"Czy jeste\u015b pewien, \u017ce chcesz kontynuowa\u0107 bez opisu obrazka? Obrazek bez opisu mo\u017ce nie by\u0107 dost\u0119pny dla u\u017cytkownik\u00f3w u\u017cywaj\u0105cych tekstowe przegl\u0105darki lub przegl\u0105daj\u0105cych stron\u0119 z wy\u0142\u0105czonymi obrazkami.","example_img":"Podgl\u0105d wygl\u0105du obrazka",misc:"R\u00f3\u017cne",mouseout:"dla mouseout",mouseover:"dla mouseover","alt_image":"alternatywny obrazek","swap_image":"Zamiana obrazka",map:"Mapa obrazu",id:"Id",rtl:"Z prawej do lewej",ltr:"Z lewej do prawej",classes:"Klasy",style:"Styl","long_desc":"D\u0142ugi opis linku",langcode:"Kod j\u0119zyka",langdir:"Kierunek j\u0119zyka","constrain_proportions":"Zachowaj proporcje",preview:"Podgl\u0105d",title:"Tytu\u0142",general:"Og\u00f3lne","tab_advanced":"Zaawansowane","tab_appearance":"Wygl\u0105d","tab_general":"Og\u00f3lne",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pt_dlg.js new file mode 100644 index 0000000..513319f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.advimage_dlg',{"image_list":"Lista de imagens","align_right":"Direita","align_left":"Esquerda","align_textbottom":"Base do texto","align_texttop":"Topo do texto","align_bottom":"Abaixo","align_middle":"Meio","align_top":"Topo","align_baseline":"Sobre a linha de texto",align:"Alinhamento",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical",dimensions:"Dimens\u00f5es",border:"Limite",list:"Lista de imagens",alt:"Descri\u00e7\u00e3o da imagem",src:"Endere\u00e7o da imagem","dialog_title":"Inserir/editar imagem","missing_alt":"Tem certeza que deseja continuar sem acrescentar uma descri\u00e7\u00e3o \u00e0 imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)","example_img":"Pr\u00e9-Visualiza\u00e7\u00e3o",misc:"Misto",mouseout:"mouseout",mouseover:"mouseover","alt_image":"Imagem alternativa","swap_image":"Trocar imagem",map:"Mapa de imagem",id:"Id",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",classes:"Classes",style:"Estilo","long_desc":"Descri\u00e7\u00e3o extensa",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto","constrain_proportions":"Manter propor\u00e7\u00f5es",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",title:"T\u00edtulo",general:"Geral","tab_advanced":"Avan\u00e7ado","tab_appearance":"Apar\u00eancia","tab_general":"Geral",width:"Largura",height:"Altura"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ru_dlg.js new file mode 100644 index 0000000..3e341d1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",hspace:"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f",dimensions:"\u0420\u0430\u0437\u043c\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a",alt:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",src:"\u0410\u0434\u0440\u0435\u0441","dialog_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","missing_alt":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u043b\u0438 \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u044b \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.","example_img":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",misc:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",mouseout:"\u0412 \u043f\u043e\u043a\u043e\u0435",mouseover:"\u041f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","swap_image":"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",map:"\u041a\u0430\u0440\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a",id:"\u0418\u043c\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","tab_advanced":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","tab_appearance":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","tab_general":"\u041e\u0431\u0449\u0435\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/sv_dlg.js new file mode 100644 index 0000000..af1e61c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.advimage_dlg',{"image_list":"Bildlista","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_textbottom":"Botten av texten","align_texttop":"Toppen av texten","align_bottom":"Botten","align_middle":"Mitten","align_top":"Toppen","align_baseline":"Baslinje",align:"Justering",hspace:"Horisontalrymd",vspace:"Vertikalrymd",dimensions:"Dimensioner",border:"Ram",list:"Bildlista",alt:"Bildens beskrivning",src:"Bildens URL","dialog_title":"Infoga/redigera bild","missing_alt":"Vill du forts\u00e4tta utan bildbeskrivning?\nIcke grafiska webbl\u00e4sare kommer inte att kunna tolka bilden f\u00f6r anv\u00e4ndaren.","example_img":"Exempelbild",misc:"\u00d6vrigt",mouseout:"vid musen utanf\u00f6r",mouseover:"vid musen ovanf\u00f6r","alt_image":"Alternativbild","swap_image":"Utbytningsbild",map:"L\u00e4nkkarta",id:"Id",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",classes:"Klasser",style:"Stil","long_desc":"L\u00e5ng beskrivning",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning","constrain_proportions":"Bibeh\u00e5ll proportionerna",preview:"F\u00f6rhandsvisning",title:"Titel",general:"Generellt","tab_advanced":"Avancerat","tab_appearance":"Utseende","tab_general":"Generellt",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/tr_dlg.js new file mode 100644 index 0000000..0a1868d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.advimage_dlg',{"image_list":"Resim listesi","align_right":"Sa\u011f","align_left":"Sol","align_textbottom":"Metin altta","align_texttop":"Metin \u00fcstte","align_bottom":"Alt","align_middle":"Orta","align_top":"\u00dcst","align_baseline":"Taban hizas\u0131",align:"Hizalama",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk",dimensions:"Boyutlar",border:"Kenarl\u0131k",list:"Resim listesi",alt:"Resim a\u00e7\u0131klamas\u0131",src:"Resmin URL\'si","dialog_title":"Resim ekle/d\u00fczenle","missing_alt":"Resim a\u00e7\u0131klamas\u0131 girmeden devam etmek istedi\u011finize emini misiniz? Bu olmadan taray\u0131c\u0131da resimleri kapatanlar, metin bazl\u0131 taray\u0131c\u0131lar veya resim baz\u0131 engelli kullan\u0131c\u0131lar g\u00f6remeyeceklerdir.","example_img":"Resim \u00f6nizleme g\u00f6r\u00fcn\u00fcm\u00fc",misc:"\u00c7e\u015fitli",mouseout:"Fare d\u0131\u015f\u0131ndayken",mouseover:"Fare \u00fczerindeyken","alt_image":"Alternatif resim","swap_image":"Resmi takas et",map:"Resim haritas\u0131",id:"Id",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",classes:"S\u0131n\u0131fla",style:"Stil","long_desc":"Uzun a\u00e7\u0131klamal\u0131 ba\u011flant\u0131",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",preview:"\u00d6nizleme",title:"Ba\u015fl\u0131k",general:"Genel","tab_advanced":"Geli\u015fmi\u015f","tab_appearance":"G\u00f6r\u00fcn\u00fcm","tab_general":"Genel",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/uk_dlg.js new file mode 100644 index 0000000..d083a13 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",hspace:"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",dimensions:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c",alt:"\u041e\u043f\u0438\u0441",src:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","dialog_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","missing_alt":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f? \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e, \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435 \u0431\u0443\u0434\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0437 \u0432\u0430\u0434\u0430\u043c\u0438, \u0430\u0431\u043e \u0442\u0438\u043c, \u0445\u0442\u043e \u043a\u043e\u0440\u0438\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447\u0430\u043c\u0438, \u0430\u0431\u043e \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0430\u0454 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0437 \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u0438\u043c\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438.","example_img":"\u0412\u0438\u0433\u043b\u044f\u0434 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",misc:"\u0406\u043d\u0448\u0435",mouseout:"\u043f\u0440\u0438 \u0432\u0456\u0434\u0432\u0435\u0434\u0435\u043d\u043d\u0456",mouseover:"\u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","swap_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u0456\u043d\u043d\u0438\u043a",map:"\u041c\u0430\u043f\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043e\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043c\u043e\u0432\u0438","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","tab_advanced":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","tab_appearance":"\u0412\u0438\u0433\u043b\u044f\u0434","tab_general":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/vi_dlg.js new file mode 100644 index 0000000..7c551aa --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.advimage_dlg',{"image_list":"Danh s\u00e1ch \u1ea3nh","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi c\u00f9ng","align_texttop":"V\u0103n b\u1ea3n tr\u00ean c\u00f9ng","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_middle":"Gi\u1eefa","align_top":"Tr\u00ean c\u00f9ng","align_baseline":"D\u00f2ng c\u01a1 s\u1edf",align:"Canh l\u1ec1",hspace:"Kho\u1ea3ng c\u00e1ch ngang",vspace:"Kho\u1ea3ng c\u00e1ch d\u1ecdc",dimensions:"K\u00edch th\u01b0\u1edbc",border:"Vi\u1ec1n",list:"Danh s\u00e1ch \u1ea3nh",alt:"M\u00f4 t\u1ea3 \u1ea3nh",src:"URL \u1ea3nh","dialog_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","missing_alt":"Ti\u1ebfp t\u1ee5c m\u00e0 kh\u00f4ng m\u00f4 t\u1ea3 h\u00ecnh \u1ea3nh?","example_img":"Hi\u1ec3n th\u1ecb h\u00ecnh \u1ea3nh xem tr\u01b0\u1edbc",misc:"Linh tinh",mouseout:"cho chu\u1ed9t ra",mouseover:"cho chu\u1ed9t l\u00ean","alt_image":"\u1ea2nh thay th\u1ebf","swap_image":"Trao \u0111\u1ed5i \u1ea3nh",map:"S\u01a1 \u0111\u1ed3 \u1ea3nh",id:"Id",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng","long_desc":"Li\u00ean k\u1ebft m\u00f4 t\u1ea3 d\u00e0i",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",preview:"Xem tr\u01b0\u1edbc",title:"Ti\u00eau \u0111\u1ec1",general:"Chung","tab_advanced":"N\u00e2ng cao","tab_appearance":"Xu\u1ea5t hi\u1ec7n","tab_general":"Chung",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-cn_dlg.js new file mode 100644 index 0000000..5cf6bf5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u7aef\u5bf9\u9f50","align_middle":"\u5c45\u4e2d\u5bf9\u9f50","align_top":"\u9876\u7aef\u5bf9\u9f50","align_baseline":"\u5e95\u7ebf",align:"\u5bf9\u9f50",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u63cf\u8ff0",src:"\u56fe\u7247\u94fe\u63a5","dialog_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u60a8\u662f\u5426\u8981\u7ee7\u7eed\uff1f\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\u7684\u56fe\u7247\uff0c\u53ef\u80fd\u7ed9\u6b8b\u75be\u4eba\u58eb\u3001\u6587\u672c\u6d4f\u89c8\u5668\u6216\u5173\u95ed\u56fe\u7247\u529f\u80fd\u7684\u6d4f\u89c8\u5668\u8bbf\u95ee\u9020\u6210\u56f0\u96be\u3002","example_img":"\u5916\u89c2\u9884\u89c8\u56fe",misc:"\u5176\u4ed6",mouseout:"\u9f20\u6807\u6ed1\u51fa",mouseover:"\u9f20\u6807\u6ed1\u5165","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u7247map",id:"ID",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u94fe\u63a5",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u666e\u901a","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u666e\u901a",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-tw_dlg.js new file mode 100644 index 0000000..9f51ade --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u5411\u53f3\u5c0d\u9f4a","align_left":"\u5411\u5de6\u5c0d\u9f4a","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u81ea\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u4e2d\u9593","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u8ddd\u96e2",vspace:"\u5782\u76f4\u8ddd\u96e2",dimensions:"\u5c3a\u5bf8",border:"\u6846\u67b6",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247 URL","dialog_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","missing_alt":"\u60a8\u7684\u5716\u7247\u6c92\u6709\u8aaa\u660e\uff0c\u9019\u53ef\u80fd\u6703\u8b93\u4e00\u4e9b\u7db2\u53cb\u700f\u89bd\u6642\u6709\u4e9b\u9ebb\u7169\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u5b83\u55ce\uff1f","example_img":"\u9810\u89bd\u5716\u7247",misc:"\u5176\u4ed6\u8a2d\u5b9a",mouseout:"\u6ed1\u9f20\u79fb\u958b\u7684\u6642\u5019",mouseover:"\u6ed1\u9f20\u79fb\u5230\u5716\u7247\u4e0a\u7684\u6642\u5019","alt_image":"\u66ff\u63db\u5716\u7247","swap_image":"\u66f4\u63db\u5716\u7247\u6548\u679c",map:"\u5f71\u50cf\u5730\u5716",id:"\u5716\u7247\u7684 ID",rtl:"\u5411\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5411\u5de6\u908a\u5230\u53f3\u908a",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f","long_desc":"\u66ff\u4ee3\u5716\u7247",langcode:"\u8a9e\u7cfb\u4ee3\u865f",langdir:"\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u7dad\u6301\u5716\u7247\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u5176\u4ed6\u8a2d\u5b9a","tab_appearance":"\u5916\u89c0\u6a23\u5f0f","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh_dlg.js new file mode 100644 index 0000000..1bd7f87 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advimage/langs/zh_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('zh.advimage_dlg',{ +tab_general:"\u57FA\u672C", +tab_appearance:"\u5916\u89C0", +tab_advanced:"\u9AD8\u7D1A", +general:"\u57FA\u672C", +title:"\u67E5\u627E", +preview:"\u9810\u89BD", +constrain_proportions:"\u4FDD\u6301\u6BD4\u4F8B", +langdir:"\u8A9E\u8A00\u66F8\u5BEB\u65B9\u5411", +langcode:"\u8A9E\u8A00\u7DE8\u78BC", +long_desc:"\u63CF\u8FF0", +style:"\u6A23\u5F0F", +classes:"\u6A23\u5F0F\u985E", +ltr:"\u5F9E\u5DE6\u5230\u53F3", +rtl:"\u5F9E\u53F3\u5230\u5DE6", +id:"Id", +map:"\u5716\u7247\u71B1\u9EDE", +swap_image:"\u5207\u63DB\u5716\u7247", +alt_image:"\u4EA4\u66FF\u5716\u7247", +mouseover:"\u6ED1\u9F20\u5283\u904E", +mouseout:"\u6ED1\u9F20\u79FB\u51FA", +misc:"\u5176\u4ED6", +example_img:"\u9810\u89BD\u5716\u7247", +missing_alt:" \u662F\u5426\u4E0D\u70BA\u5716\u7247\u52A0\u5165\u8AAA\u660E\u6587\u5B57\uFF0C\u5982\u679C\u4E0D\u52A0\u5165\u8AAA\u660E\u6587\u5B57\uFF0C\u5C07\u5C0E\u81F4\u4E0D\u652F\u63F4\u5716\u7247\u7684\u6D41\u89BD\u5668\u5FFD\u7565\u672C\u5167\u5BB9", +dialog_title:"\u63D2\u5165/\u7DE8\u8F2F \u5716\u7247", +src:"\u5716\u7247\u4F4D\u5740", +alt:"\u5716\u7247\u8AAA\u660E", +list:"\u5716\u7247\u6E05\u55AE", +border:"\u908A\u6846", +dimensions:"\u5C3A\u5BF8", +vspace:"\u5782\u76F4\u9593\u8DDD", +hspace:"\u6C34\u6E96\u9593\u8DDD", +align:"\u5C0D\u9F4A\u65B9\u5F0F", +align_baseline:"\u57FA\u7DDA", +align_top:"\u9802\u90E8", +align_middle:"\u4E2D\u90E8", +align_bottom:"\u5E95\u90E8", +align_texttop:"\u6587\u5B57\u4E0A\u65B9", +align_textbottom:"\u6587\u5B57\u4E0B\u65B9", +align_left:"\u5C45\u5DE6", +align_right:"\u5C45\u53F3", +image_list:"\u5716\u7247\u6E05\u55AE" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/css/advlink.css b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/css/advlink.css new file mode 100644 index 0000000..1436431 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/css/advlink.css @@ -0,0 +1,8 @@ +.mceLinkList, .mceAnchorList, #targetlist {width:280px;} +.mceActionPanel {margin-top:7px;} +.panel_wrapper div.current {height:320px;} +#classlist, #title, #href {width:280px;} +#popupurl, #popupname {width:200px;} +#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} +#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} +#events_panel input {width:200px;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin.js new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin_src.js new file mode 100644 index 0000000..14e46a7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/editor_plugin_src.js @@ -0,0 +1,61 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { + init : function(ed, url) { + this.editor = ed; + + // Register commands + ed.addCommand('mceAdvLink', function() { + var se = ed.selection; + + // No selection and not in link + if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) + return; + + ed.windowManager.open({ + file : url + '/link.htm', + width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), + height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('link', { + title : 'advlink.link_desc', + cmd : 'mceAdvLink' + }); + + ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); + + ed.onNodeChange.add(function(ed, cm, n, co) { + cm.setDisabled('link', co && n.nodeName != 'A'); + cm.setActive('link', n.nodeName == 'A' && !n.name); + }); + }, + + getInfo : function() { + return { + longname : 'Advanced link', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/js/advlink.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/js/advlink.js new file mode 100644 index 0000000..f013aac --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/js/advlink.js @@ -0,0 +1,543 @@ +/* Functions for the advlink plugin popup */ + +tinyMCEPopup.requireLangPack(); + +var templates = { + "window.open" : "window.open('${url}','${target}','${options}')" +}; + +function preinit() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); +} + +function changeClass() { + var f = document.forms[0]; + + f.classes.value = getSelectValue(f, 'classlist'); +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + var formObj = document.forms[0]; + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + var action = "insert"; + var html; + + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); + document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); + document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); + + // Link list + html = getLinkListHTML('linklisthref','href'); + if (html == "") + document.getElementById("linklisthrefrow").style.display = 'none'; + else + document.getElementById("linklisthrefcontainer").innerHTML = html; + + // Anchor list + html = getAnchorListHTML('anchorlist','href'); + if (html == "") + document.getElementById("anchorlistrow").style.display = 'none'; + else + document.getElementById("anchorlistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '260px'; + + if (isVisible('popupurlbrowser')) + document.getElementById('popupurl').style.width = '180px'; + + elm = inst.dom.getParent(elm, "A"); + if (elm == null) { + var prospect = inst.dom.create("p", null, inst.selection.getContent()); + if (prospect.childNodes.length === 1) { + elm = prospect.firstChild; + } + } + + if (elm != null && elm.nodeName == "A") + action = "update"; + + formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); + + setPopupControlsDisabled(true); + + if (action == "update") { + var href = inst.dom.getAttrib(elm, 'href'); + var onclick = inst.dom.getAttrib(elm, 'onclick'); + var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self"; + + // Setup form data + setFormValue('href', href); + setFormValue('title', inst.dom.getAttrib(elm, 'title')); + setFormValue('id', inst.dom.getAttrib(elm, 'id')); + setFormValue('style', inst.dom.getAttrib(elm, "style")); + setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); + setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); + setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); + setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); + setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); + setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('type', inst.dom.getAttrib(elm, 'type')); + setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); + setFormValue('target', linkTarget); + setFormValue('classes', inst.dom.getAttrib(elm, 'class')); + + // Parse onclick data + if (onclick != null && onclick.indexOf('window.open') != -1) + parseWindowOpen(onclick); + else + parseFunction(onclick); + + // Select by the values + selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); + selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); + selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); + selectByValue(formObj, 'linklisthref', href); + + if (href.charAt(0) == '#') + selectByValue(formObj, 'anchorlist', href); + + addClassesToList('classlist', 'advlink_styles'); + + selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); + selectByValue(formObj, 'targetlist', linkTarget, true); + } else + addClassesToList('classlist', 'advlink_styles'); +} + +function checkPrefix(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) + n.value = 'http://' + n.value; +} + +function setFormValue(name, value) { + document.forms[0].elements[name].value = value; +} + +function parseWindowOpen(onclick) { + var formObj = document.forms[0]; + + // Preprocess center code + if (onclick.indexOf('return false;') != -1) { + formObj.popupreturn.checked = true; + onclick = onclick.replace('return false;', ''); + } else + formObj.popupreturn.checked = false; + + var onClickData = parseLink(onclick); + + if (onClickData != null) { + formObj.ispopup.checked = true; + setPopupControlsDisabled(false); + + var onClickWindowOptions = parseOptions(onClickData['options']); + var url = onClickData['url']; + + formObj.popupname.value = onClickData['target']; + formObj.popupurl.value = url; + formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); + formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); + + formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); + formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); + + if (formObj.popupleft.value.indexOf('screen') != -1) + formObj.popupleft.value = "c"; + + if (formObj.popuptop.value.indexOf('screen') != -1) + formObj.popuptop.value = "c"; + + formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; + formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; + formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; + formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; + formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; + formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; + formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; + + buildOnClick(); + } +} + +function parseFunction(onclick) { + var formObj = document.forms[0]; + var onClickData = parseLink(onclick); + + // TODO: Add stuff here +} + +function getOption(opts, name) { + return typeof(opts[name]) == "undefined" ? "" : opts[name]; +} + +function setPopupControlsDisabled(state) { + var formObj = document.forms[0]; + + formObj.popupname.disabled = state; + formObj.popupurl.disabled = state; + formObj.popupwidth.disabled = state; + formObj.popupheight.disabled = state; + formObj.popupleft.disabled = state; + formObj.popuptop.disabled = state; + formObj.popuplocation.disabled = state; + formObj.popupscrollbars.disabled = state; + formObj.popupmenubar.disabled = state; + formObj.popupresizable.disabled = state; + formObj.popuptoolbar.disabled = state; + formObj.popupstatus.disabled = state; + formObj.popupreturn.disabled = state; + formObj.popupdependent.disabled = state; + + setBrowserDisabled('popupurlbrowser', state); +} + +function parseLink(link) { + link = link.replace(new RegExp(''', 'g'), "'"); + + var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); + + // Is function name a template function + var template = templates[fnName]; + if (template) { + // Build regexp + var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); + var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; + var replaceStr = ""; + for (var i=0; i'); + for (var i=0; i' + name + ''; + + if ((name = nodes[i].id) != "" && !nodes[i].href) + html += ''; + } + + if (html == "") + return ""; + + html = ''; + + return html; +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm, elementArray, i; + + elm = inst.selection.getNode(); + checkPrefix(document.forms[0].href); + + elm = inst.dom.getParent(elm, "A"); + + // Remove element if there is no href + if (!document.forms[0].href.value) { + i = inst.selection.getBookmark(); + inst.dom.remove(elm, 1); + inst.selection.moveToBookmark(i); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + + // Create new anchor elements + if (elm == null) { + inst.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); + + elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); + for (i=0; i' + tinyMCELinkList[i][0] + ''; + + html += ''; + + return html; + + // tinyMCE.debug('-- image list start --', html, '-- image list end --'); +} + +function getTargetListHTML(elm_id, target_form_element) { + var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); + var html = ''; + + html += ''; + + return html; +} + +// While loading +preinit(); +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ar_dlg.js new file mode 100644 index 0000000..a646d6d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.advlink_dlg',{"target_name":"\u0627\u0633\u0645 \u0627\u0644\u0647\u062f\u0641",classes:"\u0635\u0646\u0641",style:"\u0634\u0643\u0644",id:"\u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641\u064a","popup_position":"\u0645\u0648\u0642\u0639 (X/Y)",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0644\u063a\u0629","popup_size":"\u062d\u062c\u0645","popup_dependent":"\u062e\u0627\u0636\u0639 (Mozilla/Firefox only)","popup_resizable":"\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645 \u0646\u0627\u0641\u0630\u0629","popup_location":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0645\u0648\u0642\u0639","popup_menubar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645","popup_toolbar":"\u0625\u0638\u0647\u0627\u0631 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","popup_statusbar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u062d\u0627\u0644\u0629","popup_scrollbars":"\u0639\u0631\u0636 \u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u062a\u0645\u0631\u064a\u0631","popup_return":"\u0625\u062f\u0631\u0627\u062c \'\u0639\u0648\u062f\u0629 \u0643\u0627\u0630\u0628\u0629\' \'return false\'","popup_name":"\u0627\u0633\u0645 \u0627\u0644\u0646\u0627\u0641\u0630\u0629","popup_url":"\u0631\u0627\u0628\u0637 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d",popup:"\u062c\u0627\u0641\u0627 \u0633\u0643\u0631\u064a\u0628\u062a","target_blank":"\u0641\u064a \u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629","target_top":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0639\u0644\u0648\u064a (\u064a\u062d\u0644 \u0645\u062d\u0644 \u0643\u0627\u0641\u0629 \u0627\u0644\u0625\u0637\u0627\u0631\u0627\u062a)","target_parent":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0623\u0635\u0644","target_same":"\u0641\u062a\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0625\u0637\u0627\u0631","anchor_names":"\u0645\u0631\u062a\u0643\u0632\u0627\u062a","popup_opts":"\u062e\u064a\u0627\u0631\u0627\u062a","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0629","event_props":"\u0623\u062d\u062f\u0627\u062b","popup_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d ","general_props":"\u0627\u0644\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0639\u0627\u0645\u0629","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","events_tab":"\u0623\u062d\u062f\u0627\u062b","popup_tab":"\u064a\u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d","general_tab":"\u0639\u0627\u0645",list:"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0645\u0648\u0627\u0642\u0639","is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0627\u0646\u0647 \u0644\u0645\u0648\u0642\u0639 \u062e\u0627\u0631\u062c\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 http://","is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0643\u062a\u0631\u0648\u0646\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 \u0648\u0633\u0645 \u0631\u0627\u0628\u0637 \u0627\u0644\u0628\u0631\u064a\u062f",titlefield:"\u0627\u0633\u0645 \u0627\u0644\u0631\u0627\u0628\u0637",target:"\u0627\u0644\u0647\u062f\u0641",url:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637",title:"\u0627\u062f\u062e\u0627\u0644 -\u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","link_list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",accesskey:"\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u0648\u0635\u0648\u0644",tabindex:" Tab \u0641\u0647\u0631\u0633",rev:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0647\u062f\u0641 \u0628\u0627\u0644\u0635\u0641\u062d\u0629",rel:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0635\u0641\u062d\u0629 \u0628\u0627\u0644\u0647\u062f\u0641",mime:"\u0646\u0648\u0639 \u0645\u0644\u0641 \u0627\u0644\u0647\u062f\u0641",encoding:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langcode:"\u0643\u0648\u062f \u0627\u0644\u0644\u063a\u0647","target_langcode":"\u0644\u063a\u0629 \u0627\u0644\u0647\u062f\u0641",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/cs_dlg.js new file mode 100644 index 0000000..d631229 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.advlink_dlg',{"target_name":"N\u00e1zev c\u00edle",classes:"T\u0159\u00eddy",style:"Styl",id:"ID","popup_position":"Um\u00edst\u011bn\u00ed (X/Y)",langdir:"Sm\u011br textu","popup_size":"Velikost","popup_dependent":"Z\u00e1vislost (pouze Mozilla/Firefox)","popup_resizable":"Umo\u017enit zm\u011bnu velikosti","popup_location":"Zobrazit pole s adresou","popup_menubar":"Zobrazit nab\u00eddku","popup_toolbar":"Zobrazit panel n\u00e1stroj\u016f","popup_statusbar":"Zobrazit stavov\u00fd \u0159\u00e1dek","popup_scrollbars":"Zobrazit posuvn\u00edky","popup_return":"Vlo\u017eit \'return false\'","popup_name":"N\u00e1zev okna","popup_url":"URL vyskakovac\u00edho okna",popup:"Javascriptov\u00e9 okno","target_blank":"Otev\u0159\u00edt v nov\u00e9m okn\u011b/r\u00e1mu","target_top":"Otev\u0159\u00edt v hlavn\u00edm okn\u011b/r\u00e1mu (nahradit v\u0161echny r\u00e1my)","target_parent":"Otev\u0159\u00edt v nad\u0159azen\u00e9m okn\u011b/r\u00e1mu","target_same":"Otev\u0159\u00edt v tomto okn\u011b/r\u00e1mu","anchor_names":"Z\u00e1lo\u017eka","popup_opts":"Mo\u017enosti","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","event_props":"Ud\u00e1losti","popup_props":"Vlastnosti vyskakovac\u00edho okna","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","events_tab":"Ud\u00e1losti","popup_tab":"Vyskakovac\u00ed okno","general_tab":"Obecn\u00e9",list:"Seznam odkaz\u016f","is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?",titlefield:"Titulek",target:"C\u00edl",url:"URL odkazu",title:"Vlo\u017eit/upravit odkaz","link_list":"Seznam odkaz\u016f",rtl:"Zprava doleva",ltr:"Zleva doprava",accesskey:"Kl\u00e1vesov\u00e1 zkratka",tabindex:"Po\u0159ad\u00ed pro tabul\u00e1tor",rev:"Vztah c\u00edle ke str\u00e1nce",rel:"Vztah str\u00e1nky k c\u00edli",mime:"MIME typ",encoding:"K\u00f3dov\u00e1n\u00ed",langcode:"K\u00f3d jazyka","target_langcode":"Jazyk c\u00edle",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/da_dlg.js new file mode 100644 index 0000000..06f7fe3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.advlink_dlg',{"target_name":"Destinationsnavn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (X/Y)",langdir:"Sprogretning","popup_size":"St\u00f8rrelse","popup_dependent":"Afh\u00e6ngig (Kun Mozilla/Firefox)","popup_resizable":"Lad det v\u00e6re muligt at \u00e6ndre st\u00f8rrelsen p\u00e5 vinduet","popup_location":"Vis adresselinje","popup_menubar":"Vis menulinje","popup_toolbar":"Vis v\u00e6rkt\u00f8jslinjer","popup_statusbar":"Vis statuslinje","popup_scrollbars":"Vis rullepanel","popup_return":"Inds\u00e6t \'return false\'","popup_name":"Vinduesnavn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00c5ben i nyt vindue","target_top":"\u00c5ben i \u00f8verste vindue / ramme (erstatter alle rammer)","target_parent":"\u00c5ben i overliggende vindue / ramme","target_same":"\u00c5ben i dette vindue / ramme","anchor_names":"Ankre","popup_opts":"Indstillinger","advanced_props":"Avancerede egenskaber","event_props":"H\u00e6ndelser","popup_props":"Popup egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Advanceret","events_tab":"H\u00e6ndelser","popup_tab":"Popup","general_tab":"Generelt",list:"Liste over links","is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?",titlefield:"Titel",target:"M\u00e5l",url:"Link URL",title:"Inds\u00e6t/rediger link","link_list":"Liste over links",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",accesskey:"Genvejstast",tabindex:"Tabindex",rev:"Relativ destination til side",rel:"Relativ side til destination",mime:"Destinations-MIME-type",encoding:"Destinationstegns\u00e6t",langcode:"Sprogkode","target_langcode":"Destinationssprog",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/de_dlg.js new file mode 100644 index 0000000..475dfe9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advlink_dlg',{"target_name":"Name der Zielseite",classes:"Klassen",style:"Format",id:"ID","popup_position":"Position (X/Y)",langdir:"Schriftrichtung","popup_size":"Gr\u00f6\u00dfe","popup_dependent":"Vom Elternfenster abh\u00e4ngig
        (nur Mozilla/Firefox) ","popup_resizable":"Vergr\u00f6\u00dfern des Fenster zulassen","popup_location":"Adressleiste anzeigen","popup_menubar":"Browsermen\u00fc anzeigen","popup_toolbar":"Werkzeugleisten anzeigen","popup_statusbar":"Statusleiste anzeigen","popup_scrollbars":"Scrollbalken anzeigen","popup_return":"Link trotz Popup folgen","popup_name":"Name des Fensters","popup_url":"Popup-Adresse",popup:"JavaScript-Popup","target_blank":"In neuem Fenster \u00f6ffnen","target_top":"Im obersten Frame \u00f6ffnen (sprengt das Frameset)","target_parent":"Im \u00fcbergeordneten Fenster/Frame \u00f6ffnen","target_same":"Im selben Fenster/Frame \u00f6ffnen","anchor_names":"Anker","popup_opts":"Optionen","advanced_props":"Erweiterte Eigenschaften","event_props":"Ereignisse","popup_props":"Popup-Eigenschaften","general_props":"Allemeine Eigenschaften","advanced_tab":"Erweitert","events_tab":"Ereignisse","popup_tab":"Popup","general_tab":"Allgemein",list:"Linkliste","is_external":"Diese Adresse scheint ein externer Link zu sein. Soll das dazu ben\u00f6tigte \"http://\" vorangestellt werden?","is_email":"Diese Adresse scheint eine E-Mail Adresse zu sein. Soll das dazu ben\u00f6tigte \"mailto:\" vorangestellt werden?",titlefield:"Titel",target:"Fenster",url:"Adresse",title:"Link einf\u00fcgen/bearbeiten","link_list":"Linkliste",rtl:"Rechts nach links",ltr:"Links nach rechts",accesskey:"Tastenk\u00fcrzel",tabindex:"Tabindex",rev:"Beziehung des Linkziels zur Seite",rel:"Beziehung der Seite zum Linkziel",mime:"MIME-Type der Zielseite",encoding:"Zeichenkodierung der Zielseite",langcode:"Sprachcode","target_langcode":"Sprache der Zielseite",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/en_dlg.js new file mode 100644 index 0000000..3169a56 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/es_dlg.js new file mode 100644 index 0000000..49c0ecf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/es_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('es.advlink_dlg',{ +title:"Insertar/editar hiperv\u00EDnculo", +url:"URL del hiperv\u00EDnculo", +target:"Destino", +titlefield:"T\u00EDtulo", +is_email:"La URL que ha introducido parece ser una direci\u00F3n de correo, \u00BFdesea agregar el prefijo mailto: necesario?", +is_external:"La URL que ha introducido parece ser un v\u00EDnculo externo, \u00BFdesea agregar el prefijo http:// necesario?", +list:"Lista de v\u00EDnculos", +general_tab:"General", +popup_tab:"Ventana emergente", +events_tab:"Eventos", +advanced_tab:"Avanzado", +general_props:"Propiedades generales", +popup_props:"Propiedades de ventanas emergentes", +event_props:"Eventos", +advanced_props:"Propiedades avanzadas", +popup_opts:"Opciones", +anchor_names:"Anclas", +target_same:"Abrir en esta ventana / marco", +target_parent:"Abrir en ventana padre / marco", +target_top:"Abrir en el marco superior (reemplaza todos los marcos)", +target_blank:"Abrir en ventana nueva", +popup:"Javascript popup", +popup_url:"URL de la ventana emergente", +popup_name:"Nombre de la ventana", +popup_return:"Insertar 'return false'", +popup_scrollbars:"Barras de desplazamiento", +popup_statusbar:"Barra de estado", +popup_toolbar:"Barra de herramientas", +popup_menubar:"Barra de men\u00FA", +popup_location:"Barra de localizaci\u00F3n", +popup_resizable:"Permitir cambiar el tama\u00F1o de la ventana", +popup_dependent:"Dependientes (s\u00F3lo Mozilla/Firefox)", +popup_size:"Tama\u00F1o", +popup_position:"Posici\u00F3n (X/Y)", +id:"Id", +style:"Estilo", +classes:"Clases", +target_name:"Nombre del Target", +langdir:"Direcci\u00F3n del lenguaje", +target_langcode:"Lenguaje del Target", +langcode:"C\u00F3digo del lenguaje", +encoding:"Codificaci\u00F3n de caracteres del Target", +mime:"Tipo MIME del Target", +rel:"Relaci\u00F3n p\u00E1gina a target", +rev:"Relaci\u00F3n target a p\u00E1gina", +tabindex:"\u00CDndice de tabulaci\u00F3n", +accesskey:"Tecla de acceso", +ltr:"Izquierda a derecha", +rtl:"Derecha a izquierda", +link_list:"Lista de v\u00EDnculo" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fi_dlg.js new file mode 100644 index 0000000..e49488e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.advlink_dlg',{"target_name":"Kohteen nimi",classes:"Luokat",style:"Tyyli",id:"Id","popup_position":"Sijainti (X/Y)",langdir:"Kielen suunta","popup_size":"Koko","popup_dependent":"Riippuvainen (vain Mozilla/Firefox)","popup_resizable":"Tee ikkunan koko muokattavaksi","popup_location":"N\u00e4yt\u00e4 sijaintipalkki","popup_menubar":"N\u00e4yt\u00e4 valikkopalkki","popup_toolbar":"N\u00e4yt\u00e4 ty\u00f6kalut","popup_statusbar":"N\u00e4yt\u00e4 tilapalkki","popup_scrollbars":"N\u00e4yt\u00e4 vierityspalkit","popup_return":"Lis\u00e4\u00e4 \'return false\'","popup_name":"Ikkunan nimi","popup_url":"Ponnahdusikkunan URL",popup:"JavaScript-ponnahdusikkuna","target_blank":"Avaa uudessa ikkunassa","target_top":"Avaa ylimm\u00e4ss\u00e4 ruudussa (korvaa kaikki ruudut)","target_parent":"Avaa ylemm\u00e4ss\u00e4 ikkunassa","target_same":"Avaa t\u00e4ss\u00e4 ikkunassa","anchor_names":"Ankkurit","popup_opts":"Valinta","advanced_props":"Edistyneet asetukset","event_props":"Tapahtumat (events)","popup_props":"Ponnahdusikkunan asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","events_tab":"Tapahtumat","popup_tab":"Ponnahdusikkuna","general_tab":"Yleiset",list:"Linkkilista","is_external":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan sivuston ulkoinen osoite, haluatko lis\u00e4t\u00e4 http://-etuliitteen?","is_email":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite, haluatko lis\u00e4t\u00e4 mailto:-etuliitteen?",titlefield:"Otsikko",target:"Kohde (target)",url:"Linkin URL",title:"Lis\u00e4\u00e4/muokkaa linkki\u00e4","link_list":"Linkkilista",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",accesskey:"Pikan\u00e4pp\u00e4in",tabindex:"Tabulaattori-indeksi",rev:"Kohteen suhde sivuun",rel:"Sivun suhde kohteeseen",mime:"Kohteen MIME-tyyppi",encoding:"Kohteen merkist\u00f6koodaus",langcode:"Kielen koodi","target_langcode":"Kohteen kieli",width:"Leveys",height:"Korkeus"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fr_dlg.js new file mode 100644 index 0000000..38e5a78 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.advlink_dlg',{"target_name":"Nom de la cible",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Sens de lecture","popup_size":"Taille","popup_dependent":"D\u00e9pendante (seulement sous Mozilla/Firefox)","popup_resizable":"Autoriser le redimensionnement de la fen\u00eatre","popup_location":"Afficher la barre d\'adresse","popup_menubar":"Afficher la barre de menu","popup_toolbar":"Afficher la barre d\'outils","popup_statusbar":"Afficher la barre d\'\u00e9tat","popup_scrollbars":"Afficher les ascenseurs","popup_return":"Ins\u00e9rer \'return false\'","popup_name":"Nom de la fen\u00eatre","popup_url":"URL de la popup",popup:"Popup Javascript","target_blank":"Ouvrir dans une nouvelle fen\u00eatre","target_top":"Ouvrir dans le cadre principal (remplace tous les cadres)","target_parent":"Ouvrir dans la fen\u00eatre / le cadre parent","target_same":"Ouvrir dans cette fen\u00eatre / dans ce cadre","anchor_names":"Ancres","popup_opts":"Options","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","event_props":"\u00c9v\u00e8nements","popup_props":"Propri\u00e9t\u00e9s de la popup","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","events_tab":"\u00c9v\u00e8nements","popup_tab":"Popup","general_tab":"G\u00e9n\u00e9ral",list:"Liste de liens","is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?",titlefield:"Titre",target:"Cible",url:"URL du lien",title:"Ins\u00e9rer / \u00e9diter un lien","link_list":"Liste des liens",rtl:"Droite \u00e0 gauche",ltr:"Gauche \u00e0 droite",accesskey:"Touche d\'acc\u00e8s rapide",tabindex:"Tabindex",rev:"Relation de la cible \u00e0 la page",rel:"Relation de la page \u00e0 la cible",mime:"Type MIME de la cible",encoding:"Encodage de la cible",langcode:"Code de la langue","target_langcode":"Langue de la cible",width:"Largeur",height:"Hauteur"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/he_dlg.js new file mode 100644 index 0000000..7ea21bd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df",id:"\u05de\u05e1\u05e4\u05e8 \u05e1\u05d9\u05d3\u05d5\u05e8\u05d9","popup_position":"\u05de\u05d9\u05e7\u05d5\u05dd (X/Y)",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","popup_size":"\u05d2\u05d5\u05d3\u05dc","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"\u05d7\u05dc\u05d5\u05df \u05d3\u05d9\u05e0\u05d0\u05de\u05d9(resizable)","popup_location":"\u05d4\u05e6\u05d2\u05ea location bar ","popup_menubar":"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8","popup_toolbar":"\u05d4\u05e6\u05d2\u05ea \u05e1\u05e8\u05d2\u05dc\u05d9 \u05db\u05dc\u05d9\u05dd","popup_statusbar":"\u05d4\u05e6\u05d2\u05ea \u05e9\u05d5\u05e8\u05ea \u05e1\u05d8\u05d0\u05d8\u05d5\u05e1","popup_scrollbars":"\u05d4\u05e6\u05d2\u05ea \u05e4\u05e1 \u05d2\u05dc\u05d9\u05dc\u05d4","popup_return":"\u05d9\u05e9 \u05dc\u05d4\u05db\u05e0\u05d9\u05e1 \'return false\'","popup_name":"\u05e9\u05dd \u05d4\u05d7\u05dc\u05d5\u05df","popup_url":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 URL",popup:"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 javascript","target_blank":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","target_top":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d4\u05d1\u05df \u05d4\u05e8\u05d0\u05e9\u05d9(\u05de\u05d7\u05dc\u05d9\u05e3 \u05d0\u05ea \u05db\u05dc \u05d7\u05dc\u05d5\u05e0\u05d5\u05ea \u05d4\u05d1\u05e0\u05d9\u05dd)","target_parent":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05dc\u05d5\u05df \u05d4\u05d0\u05d1\u05d0/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","target_same":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","anchor_names":"\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","popup_opts":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","event_props":"\u05de\u05d0\u05d5\u05e8\u05e2\u05d5\u05ea","popup_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","events_tab":"\u05d0\u05e8\u05d5\u05e2\u05d9\u05dd","popup_tab":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_tab":"\u05db\u05dc\u05dc\u05d9",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?",titlefield:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",target:"\u05d9\u05e2\u05d3",url:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",title:"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4","target_langcode":"Target language",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/hu_dlg.js new file mode 100644 index 0000000..ec82452 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.advlink_dlg',{"target_name":"C\u00e9l neve",classes:"Oszt\u00e1lyok",style:"St\u00edlus",id:"ID","popup_position":" (X/Y) Poz\u00edci\u00f3",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","popup_size":"M\u00e9ret","popup_dependent":"F\u00fcgg\u0151 (csak Mozilla/Firefox)","popup_resizable":"\u00c1tm\u00e9retezhet\u0151 ablak k\u00e9sz\u00edt\u00e9se","popup_location":"C\u00edm mez\u0151 mutat\u00e1sa","popup_menubar":"Men\u00fcsor mutat\u00e1sa","popup_toolbar":"Eszk\u00f6zsor mutat\u00e1sa","popup_statusbar":"St\u00e1tuszsor mutat\u00e1sa","popup_scrollbars":"G\u00f6rget\u0151s\u00e1vok mutat\u00e1sa","popup_return":"\'return false\' besz\u00far\u00e1sa","popup_name":"Ablakn\u00e9v","popup_url":"Felugr\u00f3 ablak URL",popup:"JavaScript felugr\u00f3 ablak","target_blank":"Megnyit\u00e1s \u00faj ablakban ","target_top":"Megnyit\u00e1s azonos ablakban/keretben legfel\u00fcl","target_parent":"Megnyit\u00e1s sz\u00fcl\u0151 ablakban/keretben ","target_same":"Megnyit\u00e1s azonos ablakban/keretben ","anchor_names":"Horgonyok","popup_opts":"Be\u00e1ll\u00edt\u00e1sok","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","event_props":"Esem\u00e9nyek","popup_props":"Felugr\u00f3 ablak tulajdons\u00e1gai","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","events_tab":"Esem\u00e9nyek","popup_tab":"Felugr\u00f3 ablak","general_tab":"\u00c1ltal\u00e1nos",list:"Link lista","is_external":"A be\u00edrt URL k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http:// -t el\u00e9 tenni?","is_email":"A be\u00edrt URL e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto: el\u0151tagot el\u00e9 tenni?",titlefield:"C\u00edm",target:"C\u00e9l (target)",url:"Link URL",title:"Hivatkoz\u00e1s besz\u00far\u00e1s/szerkeszt\u00e9s","link_list":"Link lista",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",accesskey:"Gyorsgomb",tabindex:"Tabindex",rev:"C\u00e9l kapcsolata az oldallal",rel:"Oldal kapcsolata a c\u00e9llal",mime:"C\u00e9l MIME t\u00edpus",encoding:"C\u00e9l karakterk\u00f3dol\u00e1s",langcode:"Nyelv k\u00f3d","target_langcode":"C\u00e9l nyelv",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/it_dlg.js new file mode 100644 index 0000000..bf19659 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.advlink_dlg',{"target_name":"Nome target",classes:"Classe",style:"Stile",id:"Id","popup_position":"Posizione (X/Y)",langdir:"Direzione del testo","popup_size":"Dimensioni","popup_dependent":"Dipendente (Solo in Mozilla/Firefox)","popup_resizable":"Rendi la finestra ridimensionabile","popup_location":"Mostra barra navigazione","popup_menubar":"Mostra barra menu","popup_toolbar":"Mostra barre strumenti","popup_statusbar":"Mostra barra di stato","popup_scrollbars":"Mostra barre di scorrimento","popup_return":"Inserisci \'return false\'","popup_name":"Nome finestra","popup_url":"URL Popup",popup:"Popup Javascript","target_blank":"Apri in una nuova finestra","target_top":"Apri nella cornice superiore (sostituisce tutte le cornici)","target_parent":"Apri nella finestra / cornice genitore","target_same":"Apri in questa finestra / cornice","anchor_names":"Ancore","popup_opts":"Opzioni","advanced_props":"Propriet\u00e0 avanzate","event_props":"Eventi","popup_props":"Propriet\u00e0 popup","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","events_tab":"Eventi","popup_tab":"Popup","general_tab":"Generale",list:"Lista collegamenti","is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?",titlefield:"Titolo",target:"Target",url:"URL collegamento",title:"Inserisci/modifica link","link_list":"Lista collegamenti",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",accesskey:"Carattere di accesso",tabindex:"Indice tabulazione",rev:"Relazione da target a pagina",rel:"Relazione da pagina a target",mime:"Tipo MIME del target",encoding:"Codifica carattere del target",langcode:"Lingua","target_langcode":"Lingua del target",width:"Larghezza",height:"Altezza"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ja_dlg.js new file mode 100644 index 0000000..68ebcd2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.advlink_dlg',{"target_name":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u540d\u524d",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","popup_size":"\u5927\u304d\u3055","popup_dependent":"\u4f9d\u5b58(Mozilla\u3068Firefox\u3060\u3051)","popup_resizable":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u30b5\u30a4\u30ba\u5909\u66f4\u3092\u8a31\u53ef","popup_location":"\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_menubar":"\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3092\u8868\u793a","popup_toolbar":"\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_statusbar":"\u30b9\u30c6\u30fc\u30bf\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_scrollbars":"\u30b9\u30af\u30ed\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_return":"\'return false\'\u3092\u633f\u5165","popup_name":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u540d\u524d","popup_url":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u306eURL",popup:"Javascript\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","target_top":"\u30c8\u30c3\u30d7\u306e\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f(\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u7f6e\u304d\u63db\u3048)","target_parent":"\u89aa\u30a6\u30a4\u30f3\u30c9\u30a6/\u89aa\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","target_same":"\u3053\u306e\u30a6\u30a4\u30f3\u30c9\u30a6/\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","anchor_names":"\u30a2\u30f3\u30ab\u30fc","popup_opts":"\u30aa\u30d7\u30b7\u30e7\u30f3","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","event_props":"\u30a4\u30d9\u30f3\u30c8","popup_props":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_props":"\u4e00\u822c","advanced_tab":"\u5c02\u9580\u7684","events_tab":"\u30a4\u30d9\u30f3\u30c8","popup_tab":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_tab":"\u4e00\u822c",list:"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?",titlefield:"\u30bf\u30a4\u30c8\u30eb",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",url:"\u30ea\u30f3\u30af\u306eURL",title:"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",accesskey:"\u30a2\u30af\u30bb\u30b9\u30ad\u30fc",tabindex:"\u30bf\u30d6\u30a4\u30f3\u30c7\u30c3\u30af\u30b9",rev:"\u30bf\u30fc\u30b2\u30c3\u30c8\u304b\u3089\u30da\u30fc\u30b8\u306e\u95a2\u4fc2",rel:"\u30da\u30fc\u30b8\u304b\u3089\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u95a2\u4fc2",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",encoding:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9","target_langcode":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8a00\u8a9e",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/nl_dlg.js new file mode 100644 index 0000000..b292475 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.advlink_dlg',{"target_name":"Doel",classes:"Klasses",style:"Stijl",id:"Id","popup_position":"Positie (X/Y)",langdir:"Taalrichting","popup_size":"Grootte","popup_dependent":"Afhankelijk (Alleen Mozilla/Firefox)","popup_resizable":"Aanpasbaar venster","popup_location":"Lokatiebalk weergeven","popup_menubar":"Menubalk weergeven","popup_toolbar":"Werkbalk weergeven","popup_statusbar":"Statusbalk weergeven","popup_scrollbars":"Scrollbalken weergeven","popup_return":"\'return false\' invoegen","popup_name":"Vensternaam","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"In nieuw venster openen","target_top":"In bovenste frame openen (vervangt gehele pagina)","target_parent":"In bovenliggend venster / frame openen","target_same":"In dit venster / frame openen","anchor_names":"Ankers","popup_opts":"Opties","advanced_props":"Geavanceerde eigenschappen","event_props":"Gebeurtenissen","popup_props":"Popup eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","events_tab":"Gebeurtenissen","popup_tab":"Popup","general_tab":"Algemeen",list:"Lijst","is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?",titlefield:"Titel",target:"Doel",url:"URL",title:"Link invoegen/bewerken","link_list":"Lijst",rtl:"Van rechts naar links",ltr:"Van links naar rechts",accesskey:"Toegangstoets",tabindex:"Tabvolgorde",rev:"Relatie van doel tot pagina",rel:"Relatie van pagina tot doel",mime:"MIME type",encoding:"Taalcodering",langcode:"Taalcode","target_langcode":"Taal",width:"Breedte",height:"Hoogte"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pl_dlg.js new file mode 100644 index 0000000..d529d7a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.advlink_dlg',{"target_name":"Nazwa celu",classes:"Klasy",style:"Styl",id:"Id","popup_position":"Pozycja (X/Y)",langdir:"Kierunek czytania tekstu","popup_size":"Rozmiar","popup_dependent":"Zale\u017cny (Mozilla/Firefox wy\u0142\u0105cznie)","popup_resizable":"Stw\u00f3rz okno z mo\u017cliwo\u015bci\u0105 zmiany rozmiaru","popup_location":"Poka\u017c pasek adresu","popup_menubar":"Poka\u017c pasek menu","popup_toolbar":"Poka\u017c narz\u0119dzia","popup_statusbar":"Poka\u017c pasek statusu","popup_scrollbars":"Poka\u017c paski przewijania","popup_return":"Wstaw \'return false\'","popup_name":"Nazwa okna","popup_url":"URL okna",popup:"Wyskakuj\u0105ce okno","target_blank":"Otw\u00f3rz w nowym oknie","target_top":"Otw\u00f3rz w g\u00f3rnej ramce (zamie\u0144 wszystkie ramki)","target_parent":"Otw\u00f3rz w nadrz\u0119dnym oknie / ramce","target_same":"Otw\u00f3rz w tym oknie / ramce","anchor_names":"Kotwice","popup_opts":"Opcje","advanced_props":"Zaawansowae w\u0142a\u015bciwo\u015bci","event_props":"Zdarzenia","popup_props":"W\u0142a\u015bciwo\u015bci okna","general_props":"W\u0142a\u015bciwo\u015bci og\u00f3lne","advanced_tab":"Zaawansowane","events_tab":"Zdarzenia","popup_tab":"Popup","general_tab":"Og\u00f3lne",list:"Lista link\u00f3w","is_external":"Podany adres wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http://?","is_email":"Podany adres wydaje si\u0119 by\u0107 adresem emailowym, czy chcesz doda\u0107 wymagany prefiks mailto:?",titlefield:"Tytu\u0142",target:"Cel",url:"URL linka",title:"Wstaw/edytuj link","link_list":"Lista odno\u015bnik\u00f3w",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",accesskey:"Klawisz skr\u00f3tu",tabindex:"Numer tab",rev:"Relacje celu do strony",rel:"Relacje strony do celu",mime:"Docelowy typ MIME",encoding:"Kodowanie znak\u00f3w celu",langcode:"Kod j\u0119zyka","target_langcode":"Docelowy kod j\u0119zyka",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pt_dlg.js new file mode 100644 index 0000000..8167855 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.advlink_dlg',{"target_name":"Nome do alvo",classes:"Classes",style:"Estilo",id:"Id","popup_position":"Posi\u00e7\u00e3o (X/Y)",langdir:"Dire\u00e7\u00e3o do texto","popup_size":"Tamanho","popup_dependent":"Dependente (Mozilla/Firefox apenas)","popup_resizable":"Permitir altera\u00e7\u00e3o do tamanho da janela","popup_location":"Mostrar a barra de endere\u00e7os","popup_menubar":"Mostrar a barra de menu","popup_toolbar":"Mostrar a barra de ferramentas","popup_statusbar":"Mostrar a barra de status","popup_scrollbars":"Mostrar as barras de scroll","popup_return":"Inserir \"return false\"","popup_name":"Nome da janela","popup_url":"URL do popup",popup:"Popup javascript","target_blank":"Abrir numa nova janela","target_top":"Abrir na p\u00e1gina inteira (substitui todos os quadros)","target_parent":"Abrir na janela/quadro pai","target_same":"Abrir nesta janela/quadro","anchor_names":"\u00c2ncoras","popup_opts":"Op\u00e7\u00f5es","advanced_props":"Propriedades avan\u00e7adas","event_props":"Eventos","popup_props":"Propriedades de popup","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","events_tab":"Eventos","popup_tab":"Popup","general_tab":"Geral",list:"Lista de hyperlinks","is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?",titlefield:"T\u00edtulo",target:"Alvo",url:"URL do hyperlink",title:"Inserir/editar hyperlink","link_list":"Lista de hyperlinks",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",accesskey:"Chave de acesso",tabindex:"Tabindex",rev:"Rela\u00e7\u00e3o alvo/p\u00e1gina",rel:"Rela\u00e7\u00e3o p\u00e1gina/alvo",mime:"Tipo MIME alvo",encoding:"Codifica\u00e7\u00e3o de caracteres",langcode:"C\u00f3digo do idioma","target_langcode":"Idioma alvo",width:"Largura",height:"Altura"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ru_dlg.js new file mode 100644 index 0000000..1f1695f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.advlink_dlg',{"target_name":"\u0418\u043c\u044f \u0446\u0435\u043b\u0438",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","popup_size":"\u0420\u0430\u0437\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Firefox)","popup_resizable":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440","popup_location":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f","popup_menubar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u043d\u044e","popup_toolbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","popup_statusbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f","popup_scrollbars":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438","popup_return":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430","popup_url":"\u0410\u0434\u0440\u0435\u0441",popup:"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Java","target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","target_top":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043a\u0430\u0434\u0440\u0435 (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u0430\u0434\u0440\u044b)","target_parent":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","anchor_names":"\u042f\u043a\u043e\u0440\u044f","popup_opts":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","event_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439","popup_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","popup_tab":"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435","general_tab":"\u041e\u0431\u0449\u0435\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?",titlefield:"\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430",target:"\u041e\u043a\u043d\u043e",url:"\u0410\u0434\u0440\u0435\u0441",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",accesskey:"\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430",tabindex:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",rev:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",rel:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a \u0446\u0435\u043b\u0438",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430","target_langcode":"\u042f\u0437\u044b\u043a \u0446\u0435\u043b\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/sv_dlg.js new file mode 100644 index 0000000..8a61944 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (x/y)",langdir:"Skriftriktning","popup_size":"Storlek","popup_dependent":"Beroende av (Mozilla/Firefox enbart)","popup_resizable":"Skalbart f\u00f6nster","popup_location":"Adressraden","popup_menubar":"Menyrad","popup_toolbar":"Verktygsf\u00e4lt","popup_statusbar":"Statusf\u00e4lt","popup_scrollbars":"Rullningslister","popup_return":"Infoga \'return false\'","popup_name":"F\u00f6nsternamn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00d6ppna i nytt f\u00f6nster","target_top":"\u00d6ppna i toppramen (ers\u00e4tter alla ramar)","target_parent":"\u00d6ppna i \u00f6verliggande f\u00f6nster/ram","target_same":"\u00d6ppna i detta f\u00f6nster/ram","anchor_names":"Bokm\u00e4rken","popup_opts":"Inst\u00e4llningar","advanced_props":"Avancerade inst\u00e4llningar","event_props":"H\u00e4ndelser","popup_props":"Popup-inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","events_tab":"H\u00e4ndelser","popup_tab":"Popup","general_tab":"Generellt",list:"L\u00e4nklista","is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?",titlefield:"Titel",target:"M\u00e5l",url:"L\u00e4nkens URL",title:"Infoga/redigera l\u00e4nk","link_list":"L\u00e4nklista",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",accesskey:"Snabbtangent",tabindex:"Tabbindex",rev:"Omv\u00e4nd relation (rev)",rel:"Relation (rel attribut)",mime:"MIME type",encoding:"Teckenformattering",langcode:"Spr\u00e5kkod","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/tr_dlg.js new file mode 100644 index 0000000..447cc3a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.advlink_dlg',{"target_name":"Hedef ad\u0131",classes:"S\u0131n\u0131fla",style:"Stil",id:"Id","popup_position":"Konum (X/Y)",langdir:"Dil y\u00f6n\u00fc","popup_size":"Boyut","popup_dependent":"Ba\u011f\u0131ml\u0131 (Sadece Mozilla Firefox)","popup_resizable":"Pencereyi boyutland\u0131r\u0131labilir yap","popup_location":"Aderes \u00e7ubu\u011funu g\u00f6ster","popup_menubar":"Men\u00fc \u00e7ubu\u011funu g\u00f6ster","popup_toolbar":"Ara\u00e7 kutusunu g\u00f6ster","popup_statusbar":"Durum \u00e7ubu\u011funu g\u00f6ster","popup_scrollbars":"Kayd\u0131rma \u00e7ubuklar\u0131n\u0131 g\u00f6ster","popup_return":"Ekle \'return false\'","popup_name":"Pencere ad\u0131","popup_url":"A\u00e7\u0131l\u0131r pencere URL\'si",popup:"Javascript a\u00e7\u0131l\u0131r pencere","target_blank":"Yeni pencerede a\u00e7","target_top":"\u00dcst \u00e7er\u00e7evede a\u00e7 (t\u00fcm \u00e7er\u00e7eveleri de\u011fi\u015ftir) ","target_parent":"Ana pencerede / \u00e7er\u00e7evede a\u00e7","target_same":"Pencerede / \u00e7er\u00e7evede a\u00e7","anchor_names":"Nesne tutucular","popup_opts":"Se\u00e7enekler","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","event_props":"Olaylar","popup_props":"A\u00e7\u0131l\u0131r pencere \u00f6zellikleri","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","events_tab":"Olaylar","popup_tab":"A\u00e7\u0131l\u0131r pencere","general_tab":"Genel",list:"Ba\u011flant\u0131 listesi","is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?",titlefield:"Ba\u015fl\u0131k",target:"Hedef",url:"Ba\u011flant\u0131 URL\'si",title:"Ba\u011flant\u0131 ekle/d\u00fczenle","link_list":"Ba\u011flant\u0131 listesi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",accesskey:"Eri\u015fim tu\u015fu",tabindex:"Sekme indeksi",rev:"Sayfadan hedefe ili\u015fki",rel:"Hedeften sayfaya ili\u015fki",mime:"Hedef MIME tipi",encoding:"Hedef karakter kodlama",langcode:"Dil kodu","target_langcode":"Hedef dil",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/uk_dlg.js new file mode 100644 index 0000000..91d935e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.advlink_dlg',{"target_name":"\u041d\u0430\u0437\u0432\u0430 \u0446\u0456\u043b\u0456",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0456\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438","popup_size":"\u0420\u043e\u0437\u043c\u0456\u0440","popup_dependent":"\u0417\u0430\u043b\u0435\u0436\u043d\u0438\u0439 (\u043b\u0438\u0448\u0435 \u0434\u043b\u044f Mozilla/Firefox)","popup_resizable":"\u0414\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u0438 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440","popup_location":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u044c location","popup_menubar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e","popup_toolbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432","popup_statusbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u0442\u0443\u0441","popup_scrollbars":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u0440\u043e\u043b\u0435\u0440\u0438","popup_return":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430 \u0432\u0456\u043a\u043d\u0430","popup_url":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e",popup:"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e Javascript","target_blank":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","target_top":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0456 (\u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0444\u0440\u0435\u0439\u043c\u0438)","target_parent":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0431\u0430\u0442\u044c\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","target_same":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","anchor_names":"\u042f\u043a\u043e\u0440\u0456","popup_opts":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","event_props":"\u041f\u043e\u0434\u0456\u0457","popup_props":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u043e\u0433\u043e \u0432\u0456\u043a\u043d\u0430","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","events_tab":"\u041f\u043e\u0434\u0456\u0457","popup_tab":"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?",titlefield:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",target:"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432...",url:"\u0410\u0434\u0440\u0435\u0441\u0430",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",accesskey:"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443",tabindex:"\u0422\u0430\u0431\u0456\u043d\u0434\u0435\u043a\u0441",rev:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0446\u0456\u043b\u043b\u044e \u0442\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0442\u0430 \u0446\u0456\u043b\u043b\u044e",mime:"MIME \u0442\u0438\u043f \u0446\u0456\u043b\u0456",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438","target_langcode":"\u041c\u043e\u0432\u0430 \u0446\u0456\u043b\u0456",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/vi_dlg.js new file mode 100644 index 0000000..01400de --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.advlink_dlg',{"target_name":"T\u00ean \u0111\u00edch",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng",id:"Id","popup_position":"V\u1ecb tr\u00ed (X/Y)",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","popup_size":"K\u00edch th\u01b0\u1edbc","popup_dependent":"Ph\u1ee5 thu\u1ed9c (ch\u1ec9 Mozilla/Firefox)","popup_resizable":"L\u00e0m cho c\u1eeda s\u1ed5 c\u00f3 th\u1ec3 thay \u0111\u1ed5i k\u00edch c\u1ee1","popup_location":"Hi\u1ec7n th\u1ecb thanh v\u1ecb tr\u00ed","popup_menubar":"Hi\u1ec3n th\u1ecb thanh th\u1ef1c \u0111\u01a1n","popup_toolbar":"Hi\u1ec7n th\u1ecb thanh c\u00f4ng c\u1ee5","popup_statusbar":"Hi\u1ec7n th\u1ecb thanh tr\u1ea1ng th\u00e1i","popup_scrollbars":"Hi\u1ec3n th\u1ecb thanh cu\u1ed9n","popup_return":"Ch\u00e8n \'return false\'","popup_name":"T\u00ean c\u1eeda s\u1ed5","popup_url":"URL b\u1eadt l\u00ean",popup:"Javascript b\u1eadt l\u00ean","target_blank":"M\u1edf trong c\u1eeda s\u1ed5 m\u1edbi","target_top":"M\u1edf trong khung tr\u00ean c\u00f9ng (thay th\u1ebf t\u1ea5t c\u00e1c khung)","target_parent":"M\u1edf trong c\u1eeda s\u1ed5/khung cha","target_same":"M\u1edf trong c\u1eeda s\u1ed5/khung n\u00e0y","anchor_names":"M\u1ecf neo","popup_opts":"T\u00f9y ch\u1ecdn","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","event_props":"S\u1ef1 ki\u1ec7n","popup_props":"Thu\u1ed9c t\u00ednh b\u1eadt l\u00ean","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","events_tab":"S\u1ef1 ki\u1ec7n","popup_tab":"B\u1eadt l\u00ean","general_tab":"Chung",list:"Danh s\u00e1ch li\u00ean k\u1ebft","is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?",titlefield:"Ti\u00eau \u0111\u1ec1",target:"\u0110\u00edch",url:"URL Li\u00ean k\u1ebft",title:"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","link_list":"Danh s\u00e1ch li\u00ean k\u1ebft",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",accesskey:"Ph\u00edm truy c\u1eadp",tabindex:"Ch\u1ec9 m\u1ee5c th\u1ebb",rev:"\u0110\u00edch li\u00ean quan t\u1edbi trang",rel:"Trang li\u00ean quan t\u1edbi \u0111\u00edch",mime:"Ki\u1ec3u MIME \u0111\u00edch",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1 \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef","target_langcode":"Ng\u00f4n ng\u1eef \u0111\u00edch",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-cn_dlg.js new file mode 100644 index 0000000..fb228f5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236(\u4ec5\u652f\u6301Mozilla/Firefox)","popup_resizable":"\u7a97\u53e3\u53ef\u8c03\u6574\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u680f","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51faURL",popup:"Javascript\u5f39\u7a97","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u90e8\u6846\u67b6\u6253\u5f00\uff08\u91cd\u7f6e\u6240\u6709\u6846\u67b6\uff09","target_parent":"\u5728\u7236\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","target_same":"\u5728\u5f53\u524d\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","anchor_names":"\u951a","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa","general_tab":"\u666e\u901a",list:"\u94fe\u63a5\u5217\u8868","is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","is_email":"\u60a8\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f",titlefield:"\u6807\u9898",target:"\u6253\u5f00\u65b9\u5f0f",url:"\u8d85\u94fe\u63a5URL",title:"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","link_list":"\u94fe\u63a5\u5217\u8868",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-tw_dlg.js new file mode 100644 index 0000000..5681939 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f",id:"\u9023\u7d50\u7684 ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236 (\u50c5 Firefox \u652f\u63f4)","popup_resizable":"\u53ef\u4ee5\u8abf\u6574\u8996\u7a97\u5927\u5c0f","popup_location":"\u986f\u793a\u7db2\u5740\u5217","popup_menubar":"\u986f\u793a\u7a0b\u5f0f\u9078\u55ae","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u7db2\u9801\u6372\u8ef8","popup_return":"\u52a0\u5165\u4e00\u500b Javascript Return False \u8a9e\u6cd5","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u8df3\u8996\u7a97\u7684\u7db2\u5740",popup:"\u4f7f\u7528 Javascript \u7a0b\u5f0f\u8a9e\u8a00\u505a\u5f48\u8df3\u6548\u679c","target_blank":"\u958b\u4e00\u500b\u65b0\u8996\u7a97","target_top":"\u76f4\u63a5\u958b\u555f (\u6846\u67b6\u4e5f\u84cb\u6389)","target_parent":"\u958b\u5728\u4e3b\u8981\u756b\u9762","target_same":"\u76f4\u63a5\u958b\u555f","anchor_names":"\u9328\u9ede (\u66f8\u7c64)","popup_opts":"\u9078\u9805","advanced_props":"\u66f4\u591a\u8a2d\u5b9a","event_props":"\u4e8b\u4ef6","popup_props":"\u5f48\u8df3\u8a2d\u5b9a","general_props":"\u4e00\u822c","advanced_tab":"\u66f4\u591a","events_tab":"\u7a0b\u5f0f\u4e8b\u4ef6","popup_tab":"\u5f48\u8df3\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f",titlefield:"\u6a19\u984c",target:"\u958b\u555f\u65b9\u5f0f",url:"\u9023\u7d50 URL",title:"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5f9e\u5de6\u908a\u5230\u53f3\u908a",accesskey:"HTML \u5feb\u901f\u9375",tabindex:"Tab \u7d22\u5f15\u4f4d\u7f6e (Tabindex)",rev:"\u9023\u7d50\u8207\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u8207\u9023\u7d50\u7684\u95dc\u4fc2",mime:"\u9023\u7d50\u7684 MIME \u985e\u578b",encoding:"\u9023\u7d50\u4e2d\u7684\u5b57\u5143\u7de8\u78bc",langcode:"\u8a9e\u7cfb\u4ee3\u865f","target_langcode":"\u9023\u7d50\u7684\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh_dlg.js new file mode 100644 index 0000000..3aa1a36 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/langs/zh_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('zh.advlink_dlg',{ +title:"\u63D2\u5165/\u7DE8\u8F2F \u9023\u7D50", +url:"\u9023\u7D50\u4F4D\u5740", +target:"\u76EE\u6A19", +titlefield:"\u67E5\u627E", +is_email:"\u60A8\u8F38\u5165\u7684\u61C9\u8A72\u662F\u4E00\u500B\u96FB\u5B50\u90F5\u5BC4\u5730\u5740\uFF0C\u662F\u5426\u9700\u8981\u5728\u7DB2\u5740\u524D\u52A0\u4E0A mailto: ? ", +is_external:"\u60A8\u8F38\u5165\u7684\u7DB2\u5740\u61C9\u8A72\u662F\u4E00\u500B\u5916\u90E8\u9023\u7D50\uFF0C\u662F\u5426\u9700\u8981\u5728\u7DB2\u5740\u524D\u52A0\u4E0A http:// ?", +list:"\u9023\u7D50\u6E05\u55AE", +general_tab:"\u57FA\u672C", +popup_tab:"\u5FEB\u986F\u8996\u7A97", +events_tab:"\u4E8B\u4EF6", +advanced_tab:"\u9AD8\u7D1A", +general_props:"\u57FA\u672C\u5C6C\u6027", +popup_props:"\u5FEB\u986F\u8996\u7A97\u5C6C\u6027", +event_props:"\u4E8B\u4EF6", +advanced_props:"\u9AD8\u7D1A\u5C6C\u6027", +popup_opts:"\u9078\u9805", +anchor_names:"\u9328\u9EDE", +target_same:"\u5728\u7576\u524D\u8996\u7A97\u6253\u958B", +target_parent:"\u5728\u7236\u8996\u7A97\u6253\u958B", +target_top:"\u5728\u9802\u5C64\u8996\u7A97\u6253\u958B", +target_blank:"\u5728\u65B0\u8996\u7A97\u6253\u958B", +popup:"Javascript \u5FEB\u986F\u8996\u7A97", +popup_url:"\u5F48\u51FA\u7A97\u53E3\u4F4D\u5740", +popup_name:"\u7A97\u53E3\u540D\u7A31", +popup_return:"\u63D2\u5165 'return false'", +popup_scrollbars:"\u986F\u793A\u6372\u8EF8", +popup_statusbar:"\u986F\u793A\u72C0\u614B\u5217", +popup_toolbar:"\u986F\u793A\u5DE5\u5177\u5217", +popup_menubar:"\u986F\u793A\u529F\u80FD\u8868\u5217", +popup_location:"\u986F\u793A\u4F4D\u5740\u6B04", +popup_resizable:"\u53EF\u8ABF\u6574\u8996\u7A97\u5927\u5C0F", +popup_dependent:"\u5F9E\u5C6C\u65BC ( \u50C5 Mozilla/Firefox \u6709\u6548 )", +popup_size:"\u5927\u5C0F", +popup_position:"\u5EA7\u6A19 (X/Y)", +id:"Id", +style:"\u6A23\u5F0F", +classes:"\u6A23\u5F0F\u985E", +target_name:"\u76EE\u6A19\u540D\u7A31", +langdir:"\u8A9E\u8A00\u66F8\u5BEB\u65B9\u5411", +target_langcode:"\u76EE\u7684\u8A9E\u8A00", +langcode:"\u8A9E\u8A00\u7DE8\u78BC", +encoding:"\u76EE\u7684\u8A9E\u8A00\u7DE8\u78BC", +mime:"\u76EE\u6A19 MIME \u985E\u578B", +rel:"rel", +rev:"rev", +tabindex:"Tab\u7D22\u5F15", +accesskey:"\u5FEB\u901F\u9375", +ltr:"\u5F9E\u5DE6\u5230\u53F3", +rtl:"\u5F9E\u53F3\u5230\u5DE6", +link_list:"\u9023\u7D50\u6E05\u55AE" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlink/link.htm b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/link.htm new file mode 100644 index 0000000..8ab7c2a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlink/link.htm @@ -0,0 +1,338 @@ + + + + {#advlink_dlg.title} + + + + + + + + + +
        + + + + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin.js new file mode 100644 index 0000000..57ecce6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin_src.js new file mode 100644 index 0000000..a8f046b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/advlist/editor_plugin_src.js @@ -0,0 +1,176 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each; + + tinymce.create('tinymce.plugins.AdvListPlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + function buildFormats(str) { + var formats = []; + + each(str.split(/,/), function(type) { + formats.push({ + title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), + styles : { + listStyleType : type == 'default' ? '' : type + } + }); + }); + + return formats; + }; + + // Setup number formats from config or default + t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); + t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); + + if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent)) + t.isIE7 = true; + }, + + createControl: function(name, cm) { + var t = this, btn, format, editor = t.editor; + + if (name == 'numlist' || name == 'bullist') { + // Default to first item if it's a default item + if (t[name][0].title == 'advlist.def') + format = t[name][0]; + + function hasFormat(node, format) { + var state = true; + + each(format.styles, function(value, name) { + // Format doesn't match + if (editor.dom.getStyle(node, name) != value) { + state = false; + return false; + } + }); + + return state; + }; + + function applyListFormat() { + var list, dom = editor.dom, sel = editor.selection; + + // Check for existing list element + list = dom.getParent(sel.getNode(), 'ol,ul'); + + // Switch/add list type if needed + if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) + editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); + + // Append styles to new list element + if (format) { + list = dom.getParent(sel.getNode(), 'ol,ul'); + if (list) { + dom.setStyles(list, format.styles); + list.removeAttribute('data-mce-style'); + } + } + + editor.focus(); + }; + + btn = cm.createSplitButton(name, { + title : 'advanced.' + name + '_desc', + 'class' : 'mce_' + name, + onclick : function() { + applyListFormat(); + } + }); + + btn.onRenderMenu.add(function(btn, menu) { + menu.onHideMenu.add(function() { + if (t.bookmark) { + editor.selection.moveToBookmark(t.bookmark); + t.bookmark = 0; + } + }); + + menu.onShowMenu.add(function() { + var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList; + + if (list || format) { + fmtList = t[name]; + + // Unselect existing items + each(menu.items, function(item) { + var state = true; + + item.setSelected(0); + + if (list && !item.isDisabled()) { + each(fmtList, function(fmt) { + if (fmt.id == item.id) { + if (!hasFormat(list, fmt)) { + state = false; + return false; + } + } + }); + + if (state) + item.setSelected(1); + } + }); + + // Select the current format + if (!list) + menu.items[format.id].setSelected(1); + } + + editor.focus(); + + // IE looses it's selection so store it away and restore it later + if (tinymce.isIE) { + t.bookmark = editor.selection.getBookmark(1); + } + }); + + menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1); + + each(t[name], function(item) { + // IE<8 doesn't support lower-greek, skip it + if (t.isIE7 && item.styles.listStyleType == 'lower-greek') + return; + + item.id = editor.dom.uniqueId(); + + menu.add({id : item.id, title : item.title, onclick : function() { + format = item; + applyListFormat(); + }}); + }); + }); + + return btn; + } + }, + + getInfo : function() { + return { + longname : 'Advanced lists', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin.js new file mode 100644 index 0000000..71d86bb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f>=2?f-2:0);a.setEnd(n,f>=1?f-1:0);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin_src.js new file mode 100644 index 0000000..5b61f7a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/autolink/editor_plugin_src.js @@ -0,0 +1,184 @@ +/** + * editor_plugin_src.js + * + * Copyright 2011, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AutolinkPlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + + init : function(ed, url) { + var t = this; + + // Add a key down handler + ed.onKeyDown.addToTop(function(ed, e) { + if (e.keyCode == 13) + return t.handleEnter(ed); + }); + + // Internet Explorer has built-in automatic linking for most cases + if (tinyMCE.isIE) + return; + + ed.onKeyPress.add(function(ed, e) { + if (e.which == 41) + return t.handleEclipse(ed); + }); + + // Add a key up handler + ed.onKeyUp.add(function(ed, e) { + if (e.keyCode == 32) + return t.handleSpacebar(ed); + }); + }, + + handleEclipse : function(ed) { + this.parseCurrentLine(ed, -1, '(', true); + }, + + handleSpacebar : function(ed) { + this.parseCurrentLine(ed, 0, '', true); + }, + + handleEnter : function(ed) { + this.parseCurrentLine(ed, -1, '', false); + }, + + parseCurrentLine : function(ed, end_offset, delimiter, goback) { + var r, end, start, endContainer, bookmark, text, matches, prev, len; + + // We need at least five characters to form a URL, + // hence, at minimum, five characters from the beginning of the line. + r = ed.selection.getRng(true).cloneRange(); + if (r.startOffset < 5) { + // During testing, the caret is placed inbetween two text nodes. + // The previous text node contains the URL. + prev = r.endContainer.previousSibling; + if (prev == null) { + if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null) + return; + + prev = r.endContainer.firstChild.nextSibling; + } + len = prev.length; + r.setStart(prev, len); + r.setEnd(prev, len); + + if (r.endOffset < 5) + return; + + end = r.endOffset; + endContainer = prev; + } else { + endContainer = r.endContainer; + + // Get a text node + if (endContainer.nodeType != 3 && endContainer.firstChild) { + while (endContainer.nodeType != 3 && endContainer.firstChild) + endContainer = endContainer.firstChild; + + // Move range to text node + if (endContainer.nodeType == 3) { + r.setStart(endContainer, 0); + r.setEnd(endContainer, endContainer.nodeValue.length); + } + } + + if (r.endOffset == 1) + end = 2; + else + end = r.endOffset - 1 - end_offset; + } + + start = end; + + do + { + // Move the selection one character backwards. + r.setStart(endContainer, end >= 2 ? end - 2 : 0); + r.setEnd(endContainer, end >= 1 ? end - 1 : 0); + end -= 1; + + // Loop until one of the following is found: a blank space,  , delimeter, (end-2) >= 0 + } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter); + + if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) { + r.setStart(endContainer, end); + r.setEnd(endContainer, start); + end += 1; + } else if (r.startOffset == 0) { + r.setStart(endContainer, 0); + r.setEnd(endContainer, start); + } + else { + r.setStart(endContainer, end); + r.setEnd(endContainer, start); + } + + // Exclude last . from word like "www.site.com." + var text = r.toString(); + if (text.charAt(text.length - 1) == '.') { + r.setEnd(endContainer, start - 1); + } + + text = r.toString(); + matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i); + + if (matches) { + if (matches[1] == 'www.') { + matches[1] = 'http://www.'; + } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) { + matches[1] = 'mailto:' + matches[1]; + } + + bookmark = ed.selection.getBookmark(); + + ed.selection.setRng(r); + tinyMCE.execCommand('createlink',false, matches[1] + matches[2]); + ed.selection.moveToBookmark(bookmark); + ed.nodeChanged(); + + // TODO: Determine if this is still needed. + if (tinyMCE.isWebKit) { + // move the caret to its original position + ed.selection.collapse(false); + var max = Math.min(endContainer.length, start + 1); + r.setStart(endContainer, max); + r.setEnd(endContainer, max); + ed.selection.setRng(r); + } + } + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Autolink', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin.js new file mode 100644 index 0000000..46d9dc3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin_src.js new file mode 100644 index 0000000..7673bcf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/autoresize/editor_plugin_src.js @@ -0,0 +1,119 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + /** + * Auto Resize + * + * This plugin automatically resizes the content area to fit its content height. + * It will retain a minimum height, which is the height of the content area when + * it's initialized. + */ + tinymce.create('tinymce.plugins.AutoResizePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + var t = this, oldSize = 0; + + if (ed.getParam('fullscreen_is_enabled')) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; + + // Get height differently depending on the browser used + myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight); + + // Don't make it smaller than the minimum height + if (myHeight > t.autoresize_min_height) + resizeHeight = myHeight; + + // If a maximum height has been defined don't exceed this height + if (t.autoresize_max_height && myHeight > t.autoresize_max_height) { + resizeHeight = t.autoresize_max_height; + body.style.overflowY = "auto"; + de.style.overflowY = "auto"; // Old IE + } else { + body.style.overflowY = "hidden"; + de.style.overflowY = "hidden"; // Old IE + body.scrollTop = 0; + } + + // Resize content element + if (resizeHeight !== oldSize) { + deltaSize = resizeHeight - oldSize; + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + oldSize = resizeHeight; + + // WebKit doesn't decrease the size of the body element until the iframe gets resized + // So we need to continue to resize the iframe down until the size gets fixed + if (tinymce.isWebKit && deltaSize < 0) + resize(); + } + }; + + t.editor = ed; + + // Define minimum height + t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight)); + + // Define maximum height + t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0)); + + // Add padding at the bottom for better UX + ed.onInit.add(function(ed){ + ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px'); + }); + + // Add appropriate listeners for resizing content area + ed.onChange.add(resize); + ed.onSetContent.add(resize); + ed.onPaste.add(resize); + ed.onKeyUp.add(resize); + ed.onPostRender.add(resize); + + if (ed.getParam('autoresize_on_init', true)) { + ed.onLoad.add(resize); + ed.onLoadContent.add(resize); + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceAutoResize', resize); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto Resize', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/autosave/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/autosave/editor_plugin.js new file mode 100644 index 0000000..6da98ff --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/autosave/editor_plugin.js @@ -0,0 +1 @@ +(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){if(!i.removed){h.storeDraft();i.nodeChanged()}},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { + // Show confirm dialog if the editor isn't empty + ed.windowManager.confirm( + PLUGIN_NAME + ".warning_message", + function(ok) { + if (ok) + self.restoreDraft(); + } + ); + } else + self.restoreDraft(); + } + }); + + // Enable/disable restoredraft button depending on if there is a draft stored or not + ed.onNodeChange.add(function() { + var controlManager = ed.controlManager; + + if (controlManager.get(RESTORE_DRAFT)) + controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); + }); + + ed.onInit.add(function() { + // Check if the user added the restore button, then setup auto storage logic + if (ed.controlManager.get(RESTORE_DRAFT)) { + // Setup storage engine + self.setupStorage(ed); + + // Auto save contents each interval time + setInterval(function() { + if (!ed.removed) { + self.storeDraft(); + ed.nodeChanged(); + } + }, settings.autosave_interval); + } + }); + + /** + * This event gets fired when a draft is stored to local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onStoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft is restored from local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRestoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft removed/expired. + * + * @event onRemoveDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRemoveDraft = new Dispatcher(self); + + // Add ask before unload dialog only add one unload handler + if (!unloadHandlerAdded) { + window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; + unloadHandlerAdded = TRUE; + } + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + /** + * Returns an expiration date UTC string. + * + * @method getExpDate + * @return {String} Expiration date UTC string. + */ + getExpDate : function() { + return new Date( + new Date().getTime() + this.editor.settings.autosave_retention + ).toUTCString(); + }, + + /** + * This method will setup the storage engine. If the browser has support for it. + * + * @method setupStorage + */ + setupStorage : function(ed) { + var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; + + self.key = PLUGIN_NAME + ed.id; + + // Loop though each storage engine type until we find one that works + tinymce.each([ + function() { + // Try HTML5 Local Storage + if (localStorage) { + localStorage.setItem(testKey, testVal); + + if (localStorage.getItem(testKey) === testVal) { + localStorage.removeItem(testKey); + + return localStorage; + } + } + }, + + function() { + // Try HTML5 Session Storage + if (sessionStorage) { + sessionStorage.setItem(testKey, testVal); + + if (sessionStorage.getItem(testKey) === testVal) { + sessionStorage.removeItem(testKey); + + return sessionStorage; + } + } + }, + + function() { + // Try IE userData + if (tinymce.isIE) { + ed.getElement().style.behavior = "url('#default#userData')"; + + // Fake localStorage on old IE + return { + autoExpires : TRUE, + + setItem : function(key, value) { + var userDataElement = ed.getElement(); + + userDataElement.setAttribute(key, value); + userDataElement.expires = self.getExpDate(); + + try { + userDataElement.save("TinyMCE"); + } catch (e) { + // Ignore, saving might fail if "Userdata Persistence" is disabled in IE + } + }, + + getItem : function(key) { + var userDataElement = ed.getElement(); + + try { + userDataElement.load("TinyMCE"); + return userDataElement.getAttribute(key); + } catch (e) { + // Ignore, loading might fail if "Userdata Persistence" is disabled in IE + return null; + } + }, + + removeItem : function(key) { + ed.getElement().removeAttribute(key); + } + }; + } + }, + ], function(setup) { + // Try executing each function to find a suitable storage engine + try { + self.storage = setup(); + + if (self.storage) + return false; + } catch (e) { + // Ignore + } + }); + }, + + /** + * This method will store the current contents in the the storage engine. + * + * @method storeDraft + */ + storeDraft : function() { + var self = this, storage = self.storage, editor = self.editor, expires, content; + + // Is the contents dirty + if (storage) { + // If there is no existing key and the contents hasn't been changed since + // it's original value then there is no point in saving a draft + if (!storage.getItem(self.key) && !editor.isDirty()) + return; + + // Store contents if the contents if longer than the minlength of characters + content = editor.getContent({draft: true}); + if (content.length > editor.settings.autosave_minlength) { + expires = self.getExpDate(); + + // Store expiration date if needed IE userData has auto expire built in + if (!self.storage.autoExpires) + self.storage.setItem(self.key + "_expires", expires); + + self.storage.setItem(self.key, content); + self.onStoreDraft.dispatch(self, { + expires : expires, + content : content + }); + } + } + }, + + /** + * This method will restore the contents from the storage engine back to the editor. + * + * @method restoreDraft + */ + restoreDraft : function() { + var self = this, storage = self.storage, content; + + if (storage) { + content = storage.getItem(self.key); + + if (content) { + self.editor.setContent(content); + self.onRestoreDraft.dispatch(self, { + content : content + }); + } + } + }, + + /** + * This method will return true/false if there is a local storage draft available. + * + * @method hasDraft + * @return {boolean} true/false state if there is a local draft. + */ + hasDraft : function() { + var self = this, storage = self.storage, expDate, exists; + + if (storage) { + // Does the item exist at all + exists = !!storage.getItem(self.key); + if (exists) { + // Storage needs autoexpire + if (!self.storage.autoExpires) { + expDate = new Date(storage.getItem(self.key + "_expires")); + + // Contents hasn't expired + if (new Date().getTime() < expDate.getTime()) + return TRUE; + + // Remove it if it has + self.removeDraft(); + } else + return TRUE; + } + } + + return false; + }, + + /** + * Removes the currently stored draft. + * + * @method removeDraft + */ + removeDraft : function() { + var self = this, storage = self.storage, key = self.key, content; + + if (storage) { + // Get current contents and remove the existing draft + content = storage.getItem(key); + storage.removeItem(key); + storage.removeItem(key + "_expires"); + + // Dispatch remove event if we had any contents + if (content) { + self.onRemoveDraft.dispatch(self, { + content : content + }); + } + } + }, + + "static" : { + // Internal unload handler will be called before the page is unloaded + _beforeUnloadHandler : function(e) { + var msg; + + tinymce.each(tinyMCE.editors, function(ed) { + // Store a draft for each editor instance + if (ed.plugins.autosave) + ed.plugins.autosave.storeDraft(); + + // Never ask in fullscreen mode + if (ed.getParam("fullscreen_is_enabled")) + return; + + // Setup a return message if the editor is dirty + if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) + msg = ed.getLang("autosave.unload_msg"); + }); + + return msg; + } + } + }); + + tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); +})(tinymce); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin.js new file mode 100644 index 0000000..8f8821f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/(.*?)<\/span>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
        /gi,"\n");b(//gi,"\n");b(/
        /gi,"\n");b(/

        /gi,"");b(/<\/p>/gi,"\n");b(/ |\u00a0/gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
        ");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000..4e7eb33 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/bbcode/editor_plugin_src.js @@ -0,0 +1,120 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.BBCodePlugin', { + init : function(ed, url) { + var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t['_' + dialect + '_bbcode2html'](o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t['_' + dialect + '_bbcode2html'](o.content); + + if (o.get) + o.content = t['_' + dialect + '_html2bbcode'](o.content); + }); + }, + + getInfo : function() { + return { + longname : 'BBCode Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + // HTML -> BBCode in PunBB dialect + _punbb_html2bbcode : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); + rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); + rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); + rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); + rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); + rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); + rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); + rep(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); + rep(/<\/(strong|b)>/gi,"[/b]"); + rep(/<(strong|b)>/gi,"[b]"); + rep(/<\/(em|i)>/gi,"[/i]"); + rep(/<(em|i)>/gi,"[i]"); + rep(/<\/u>/gi,"[/u]"); + rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
        /gi,"\n"); + rep(//gi,"\n"); + rep(/
        /gi,"\n"); + rep(/

        /gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ |\u00a0/gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/gi,"&"); + + return s; + }, + + // BBCode -> HTML from PunBB dialect + _punbb_bbcode2html : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: [b] to + rep(/\n/gi,"
        "); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/compat2x/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/compat2x/editor_plugin.js new file mode 100644 index 0000000..02a1da8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/compat2x/editor_plugin.js @@ -0,0 +1 @@ +(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x + + + {#emotions_dlg.title} + + + + + +

        +
        {#emotions_dlg.title}:

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {#emotions_dlg.usage}
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cool.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cool.gif new file mode 100644 index 0000000..ba90cc3 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cool.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cry.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cry.gif new file mode 100644 index 0000000..74d897a Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-cry.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-embarassed.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-embarassed.gif new file mode 100644 index 0000000..963a96b Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-embarassed.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-foot-in-mouth.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-foot-in-mouth.gif new file mode 100644 index 0000000..c7cf101 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-foot-in-mouth.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-frown.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-frown.gif new file mode 100644 index 0000000..716f55e Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-frown.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-innocent.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-innocent.gif new file mode 100644 index 0000000..334d49e Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-innocent.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-kiss.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-kiss.gif new file mode 100644 index 0000000..4efd549 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-kiss.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-laughing.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-laughing.gif new file mode 100644 index 0000000..82c5b18 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-laughing.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-money-mouth.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-money-mouth.gif new file mode 100644 index 0000000..ca2451e Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-money-mouth.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-sealed.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-sealed.gif new file mode 100644 index 0000000..fe66220 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-sealed.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-smile.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-smile.gif new file mode 100644 index 0000000..fd27edf Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-smile.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-surprised.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-surprised.gif new file mode 100644 index 0000000..0cc9bb7 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-surprised.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-tongue-out.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-tongue-out.gif new file mode 100644 index 0000000..2075dc1 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-tongue-out.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-undecided.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-undecided.gif new file mode 100644 index 0000000..bef7e25 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-undecided.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-wink.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-wink.gif new file mode 100644 index 0000000..0631c76 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-wink.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-yell.gif b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-yell.gif new file mode 100644 index 0000000..648e6e8 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/img/smiley-yell.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/js/emotions.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/js/emotions.js new file mode 100644 index 0000000..b360f20 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/js/emotions.js @@ -0,0 +1,43 @@ +tinyMCEPopup.requireLangPack(); + +var EmotionsDialog = { + addKeyboardNavigation: function(){ + var tableElm, cells, settings; + + cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table"); + + settings ={ + root: "emoticon_table", + items: cells + }; + cells[0].tabindex=0; + tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); + if (tinymce.isGecko) { + cells[0].focus(); + } else { + setTimeout(function(){ + cells[0].focus(); + }, 100); + } + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); + }, + init : function(ed) { + tinyMCEPopup.resizeToInnerSize(); + this.addKeyboardNavigation(); + }, + + insert : function(file, title) { + var ed = tinyMCEPopup.editor, dom = ed.dom; + + tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', { + src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file, + alt : ed.getLang(title), + title : ed.getLang(title), + border : 0 + })); + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ar_dlg.js new file mode 100644 index 0000000..80f9402 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.emotions_dlg',{cry:"\u0628\u0643\u0627\u0621",cool:"\u062c\u064a\u062f",desc:"\u0627\u0644\u0648\u0633\u0648\u0645",title:"\u0627\u0636\u0627\u0641\u0647 \u0648\u0633\u0645 \u062a\u0639\u0628\u064a\u0631\u0649",yell:"\u064a\u0635\u064a\u062d",wink:"\u063a\u0645\u0632\u0629",undecided:"\u0628\u0639\u062f","tongue_out":"\u0627\u0644\u0644\u0633\u0627\u0646 \u062e\u0627\u0631\u062c",surprised:"\u0645\u0646\u062f\u0647\u0634\u0629",smile:"\u0627\u0628\u062a\u0633\u0627\u0645\u0629",sealed:"\u0627\u0644\u0645\u062e\u062a\u0648\u0645\u0629","money_mouth":"\u0645\u062d\u0628 \u0627\u0644\u0645\u0627\u0644",laughing:"\u0627\u0644\u0636\u062d\u0643",kiss:"\u0642\u0628\u0644\u0647",innocent:"\u0627\u0644\u0628\u0631\u0627\u0621\u0647",frown:"\u0627\u0644\u062a\u062c\u0647\u0645","foot_in_mouth":"\u062d\u0630\u0627\u0621 \u0641\u0649 \u0627\u0644\u0641\u0645 (\u0627\u062e\u0631\u0633)",embarassed:"\u0627\u062d\u0631\u0627\u062c",usage:"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/cs_dlg.js new file mode 100644 index 0000000..625608b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.emotions_dlg',{cry:"Pla\u010d\u00edc\u00ed",cool:"\u00da\u017easn\u00fd",desc:"Emotikony",title:"Vlo\u017eit emotikonu",yell:"K\u0159i\u010d\u00edc\u00ed",wink:"Mrkaj\u00edc\u00ed",undecided:"Nerozhodn\u00fd","tongue_out":"S vyplazen\u00fdm jazykem",surprised:"P\u0159ekvapen\u00fd",smile:"Usm\u00edvaj\u00edc\u00ed se",sealed:"Ml\u010d\u00edc\u00ed","money_mouth":"Je na prachy",laughing:"Sm\u011bj\u00edc\u00ed se",kiss:"L\u00edbaj\u00edc\u00ed",innocent:"Nevinn\u00fd",frown:"Zamra\u010den\u00fd","foot_in_mouth":"\u0160l\u00e1pnul vedle",embarassed:"Rozpa\u010dit\u00fd",usage:"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/da_dlg.js new file mode 100644 index 0000000..165137e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.emotions_dlg',{cry:"Gr\u00e6de",cool:"Cool",desc:"Hum\u00f8rikoner",title:"Inds\u00e6t hum\u00f8rikon",yell:"R\u00e5be",wink:"Vink",undecided:"Ubeslutsom","tongue_out":"Tunge ud",surprised:"Overrasket",smile:"Smil",sealed:"Lukket","money_mouth":"Pengemund",laughing:"Grine",kiss:"Kys",innocent:"Uskyldig",frown:"Forskr\u00e6kket","foot_in_mouth":"Fod i munden",embarassed:"Flov",usage:"Brug venstre og h\u00f8jre piletaster til at navigere"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/de_dlg.js new file mode 100644 index 0000000..7489e35 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.emotions_dlg',{cry:"Weinend",cool:"Cool",desc:"Smileys",title:"Smiley einf\u00fcgen",yell:"Br\u00fcllend",wink:"Zwinkernd",undecided:"Unentschlossen","tongue_out":"Zunge raus",surprised:"\u00dcberrascht",smile:"L\u00e4chelnd",sealed:"Verschlossen","money_mouth":"Geld",laughing:"Lachend",kiss:"K\u00fcssend",innocent:"Unschuldig",frown:"Stirnrunzelnd","foot_in_mouth":"Reingefallen",embarassed:"Verlegen",usage:"Navigation mit linken und rechten Pfeilen."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/en_dlg.js new file mode 100644 index 0000000..f5aafc3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed",usage:"Use left and right arrows to navigate."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/es_dlg.js new file mode 100644 index 0000000..0d95db5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/es_dlg.js @@ -0,0 +1,20 @@ +tinyMCE.addI18n('es.emotions_dlg',{ +title:"Insertar emoticon", +desc:"Emoticones", +cool:"Todo bien", +cry:"Llora", +embarassed:"Verg\u00FCenza", +foot_in_mouth:"Pie en la boca", +frown:"Triste", +innocent:"Inocente", +kiss:"Beso", +laughing:"Risa", +money_mouth:"Dinero boca", +sealed:"Sellado", +smile:"Sonrisa", +surprised:"Sorprendido", +tongue_out:"Lengua fuera", +undecided:"Indeciso", +wink:"Gui\u00F1o", +yell:"Enfadado" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fi_dlg.js new file mode 100644 index 0000000..7e620dd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.emotions_dlg',{cry:"Itku",cool:"Cool",desc:"Hymi\u00f6t",title:"Lis\u00e4\u00e4 hymi\u00f6",yell:"Huuto",wink:"Silm\u00e4nisku",undecided:"P\u00e4\u00e4tt\u00e4m\u00e4t\u00f6n","tongue_out":"Kieli ulkona",surprised:"Yll\u00e4ttynyt",smile:"Hymy",sealed:"Tukittu","money_mouth":"Klink Klink (raha)",laughing:"Nauru",kiss:"Pusu",innocent:"Viaton",frown:"Otsan rypistys","foot_in_mouth":"Jalka suussa",embarassed:"Nolostunut",usage:"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fr_dlg.js new file mode 100644 index 0000000..971cf09 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.emotions_dlg',{cry:"En pleurs",cool:"Cool",desc:"\u00c9motic\u00f4nes",title:"Ins\u00e9rer une \u00e9motic\u00f4ne",yell:"Criant",wink:"Clin d\'\u0153il",undecided:"Incertain","tongue_out":"Langue tir\u00e9e",surprised:"Surpris",smile:"Sourire",sealed:"Bouche cousue","money_mouth":"Avare",laughing:"Rigolant",kiss:"Bisou",innocent:"Innocent",frown:"D\u00e9\u00e7u","foot_in_mouth":"Pied de nez",embarassed:"Embarrass\u00e9",usage:"Utilisez les fl\u00e8ches gauche et droite pour naviguer."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/he_dlg.js new file mode 100644 index 0000000..2664cd2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.emotions_dlg',{cry:"\u05d1\u05d5\u05db\u05d4",cool:"\u05de\u05d2\u05e0\u05d9\u05d1",desc:"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd",title:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05de\u05d9\u05d9\u05dc\u05d9",yell:"\u05e6\u05e2\u05e7\u05d4",wink:"\u05e7\u05e8\u05d9\u05e6\u05d4",undecided:"\u05d4\u05e1\u05e0\u05e0\u05d9","tongue_out":"\u05dc\u05e9\u05d5\u05df \u05d1\u05d7\u05d5\u05e5",surprised:"\u05de\u05d5\u05e4\u05ea\u05e2",smile:"\u05d7\u05d9\u05d5\u05da",sealed:"\u05d0\u05d8\u05d5\u05dd","money_mouth":"\u05db\u05e1\u05e3",laughing:"\u05e6\u05d5\u05d7\u05e7",kiss:"\u05e0\u05e9\u05d9\u05e7\u05d4",innocent:"\u05ea\u05de\u05d9\u05dd",frown:"\u05de\u05d6\u05e2\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e4\u05d4","foot_in_mouth":"\u05e8\u05d2\u05dc \u05d1\u05e4\u05d4",embarassed:"\u05e0\u05d1\u05d5\u05da",usage:"\u05d4\u05e9\u05ea\u05de\u05e9\u05d5 \u05d1\u05d7\u05e5 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4 \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/hu_dlg.js new file mode 100644 index 0000000..b48285b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.emotions_dlg',{cry:"S\u00edr\u00f3s",cool:"Kir\u00e1ly",desc:"Hangulatjelek",title:"Hangulatjel besz\u00far\u00e1sa",yell:"\u00dcv\u00f6lt\u00e9s",wink:"Kacsint\u00e1s",undecided:"Hat\u00e1rozatlan","tongue_out":"Nyelv\u00f6lt\u00e9s",surprised:"Meglepett",smile:"Vigyor",sealed:"Lakat a sz\u00e1j\u00e1n","money_mouth":"P\u00e9nz besz\u00e9l",laughing:"Nevet\u00e9s",kiss:"Cs\u00f3k",innocent:"\u00c1rtatlan",frown:"Rosszall","foot_in_mouth":"L\u00e1b a sz\u00e1jban",embarassed:"Zavarban van",usage:"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/it_dlg.js new file mode 100644 index 0000000..0699866 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.emotions_dlg',{cry:"Piango",cool:"Fico",desc:"Faccina",title:"Inserisci faccina",yell:"Arrabbiato",wink:"Occhiolino",undecided:"Indeciso","tongue_out":"Linguaccia",surprised:"Sorpreso",smile:"Sorridente",sealed:"Bocca sigillata","money_mouth":"Bocca danarosa",laughing:"Risatona",kiss:"Bacio",innocent:"Santarellino",frown:"Triste","foot_in_mouth":"Piede in bocca",embarassed:"Imbarazzato",usage:"Utilizza le freccie sinistra e destra per navigare."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ja_dlg.js new file mode 100644 index 0000000..7ff287f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.emotions_dlg',{cry:"\u6ce3\u304d\u9854",cool:"\u30af\u30fc\u30eb",desc:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3",title:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3\u306e\u633f\u5165",yell:"\u30a8\u30fc\u30eb",wink:"\u30a6\u30a3\u30f3\u30af",undecided:"\u672a\u6c7a\u5b9a","tongue_out":"\u30a2\u30c3\u30ab\u30f3\u30d9\u30fc",surprised:"\u9a5a\u304d",smile:"\u7b11\u9854",sealed:"\u5c01\u5370","money_mouth":"\u53e3\u306b\u304a\u91d1",laughing:"\u7b11\u3044",kiss:"\u30ad\u30b9",innocent:"\u7d14\u771f\u7121\u57a2",frown:"\u6e0b\u9762","foot_in_mouth":"\u53e3\u306b\u8db3",embarassed:"\u56f0\u60d1",usage:"\u5de6\u3068\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3067\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/nl_dlg.js new file mode 100644 index 0000000..0e7d7ba --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.emotions_dlg',{cry:"Huilen",cool:"Stoer",desc:"Emoties",title:"Emotie invoegen",yell:"Roepen",wink:"Knipogen",undecided:"Onbeslist","tongue_out":"Tong uitsteken",surprised:"Verrast",smile:"Lachen",sealed:"Afgesloten","money_mouth":"Hebberig",laughing:"Lachen",kiss:"Zoenen",innocent:"Onschuldig",frown:"Wenkbrauw ophalen","foot_in_mouth":"Verstomd",embarassed:"Schamen",usage:"Gebruik linker en rechter pijltjestoetsen om te navigeren."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pl_dlg.js new file mode 100644 index 0000000..4e67692 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.emotions_dlg',{cry:"P\u0142acz",cool:"Wyluzowany",desc:"Emotikony",title:"Wstaw emotikon\u0119",yell:"Krzyk",wink:"Mrugni\u0119cie",undecided:"Niezdecydowany","tongue_out":"Wystawiony j\u0119zyk",surprised:"Zaskoczony",smile:"U\u015bmiech",sealed:"Zaklepany","money_mouth":"Zaanga\u017cowany",laughing:"\u015amiech",kiss:"Poca\u0142unek",innocent:"Niewinny",frown:"Dezaprobata","foot_in_mouth":"Niewyparzona g\u0119ba",embarassed:"Zmieszany",usage:"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pt_dlg.js new file mode 100644 index 0000000..2209594 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.emotions_dlg',{cry:"Chor\u00e3o",cool:"Fixe",desc:"Emoticons",title:"Inserir emoticon",yell:"Irado",wink:"Piscadela",undecided:"Indeciso","tongue_out":"L\u00edngua de fora",surprised:"Surpresa",smile:"Sorriso",sealed:"Boca Fechada","money_mouth":"Avarez",laughing:"Riso",kiss:"Beijo",innocent:"Inocente",frown:"Decep\u00e7\u00e3o","foot_in_mouth":"Disse asneira",embarassed:"Embara\u00e7ado",usage:"Use as setas esquerda e direita para navegar."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ru_dlg.js new file mode 100644 index 0000000..be9f3bc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0443",cool:"\u041a\u0440\u0443\u0442\u043e\u0439",desc:"\u0421\u043c\u0430\u0439\u043b\u044b",title:"\u0412\u044b\u0431\u043e\u0440 \u0441\u043c\u0430\u0439\u043b\u0430",yell:"\u041a\u0440\u0438\u0447\u0443",wink:"\u041f\u043e\u0434\u043c\u0438\u0433\u0438\u0432\u0430\u044e",undecided:"\u0412 \u043d\u0435\u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438","tongue_out":"\u0414\u0440\u0430\u0437\u043d\u044e\u0441\u044c",surprised:"\u0423\u0434\u0438\u0432\u043b\u044f\u044e\u0441\u044c",smile:"\u0423\u043b\u044b\u0431\u0430\u044e\u0441\u044c",sealed:"\u041d\u0435\u043c \u043a\u0430\u043a \u0440\u044b\u0431\u0430","money_mouth":"\u0414\u0435\u043d\u044c\u0433\u0438",laughing:"\u0421\u043c\u0435\u044e\u0441\u044c",kiss:"\u041f\u043e\u0446\u0435\u043b\u0443\u0439",innocent:"\u0410\u043d\u0433\u0435\u043b",frown:"\u0425\u043c\u0443\u0440\u044e\u0441\u044c","foot_in_mouth":"\u0412 \u0440\u043e\u0442 \u043c\u043d\u0435 \u043d\u043e\u0433\u0438",embarassed:"\u041a\u0440\u0430\u0441\u043d\u0435\u044e",usage:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/sv_dlg.js new file mode 100644 index 0000000..c36ebee --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Cool",desc:"Smileys",title:"Infoga smiley",yell:"Skrikandes",wink:"Fl\u00f6rt",undecided:"Obest\u00e4md","tongue_out":"Tungan ute",surprised:"F\u00f6rv\u00e5nad",smile:"Glad",sealed:"Tyst","money_mouth":"Guld i mun",laughing:"Skrattande",kiss:"Kyss",innocent:"Oskyldig",frown:"Rynkar p\u00e5 n\u00e4san","foot_in_mouth":"Foten i munnen",embarassed:"Sk\u00e4ms",usage:"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/tr_dlg.js new file mode 100644 index 0000000..2749173 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.emotions_dlg',{cry:"A\u011flayan",cool:"Sakin",desc:"\u0130fadeler",title:"\u0130fade ekle",yell:"Ba\u011f\u0131rma",wink:"G\u00f6z k\u0131rpma",undecided:"Karars\u0131z","tongue_out":"Dil \u00e7\u0131karma",surprised:"\u015ea\u015f\u0131rma",smile:"G\u00fcl\u00fcmseme",sealed:"Gizli","money_mouth":"Para g\u00f6z",laughing:"Kahkaha",kiss:"\u00d6p\u00fcc\u00fck",innocent:"Masum",frown:"As\u0131k","foot_in_mouth":"Pot k\u0131rm\u0131\u015f",embarassed:"Utanga\u00e7",usage:"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/uk_dlg.js new file mode 100644 index 0000000..8798e9e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447",cool:"Cool",desc:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0438",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u043c\u0456\u0448\u043a\u0443",yell:"\u0417\u043e\u0439\u043a",wink:"\u041f\u0456\u0434\u043c\u043e\u0440\u0433\u0443\u0454",undecided:"\u041d\u0435\u0440\u0456\u0448\u0443\u0447\u0456\u0441\u0442\u044c","tongue_out":"\u041f\u043e\u043a\u0430\u0437\u0443\u0454 \u044f\u0437\u0438\u043a\u0430",surprised:"\u0417\u0434\u0438\u0432\u043e\u0432\u0430\u043d\u0456\u0441\u0442\u044c",smile:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0430",sealed:"Sealed","money_mouth":"\u0413\u0440\u043e\u0449\u0456 \u0432 \u0440\u043e\u0442\u0456",laughing:"\u0421\u043c\u0456\u0445",kiss:"\u041f\u043e\u0446\u0456\u043b\u0443\u043d\u043e\u043a",innocent:"\u041d\u0435\u0432\u0438\u043d\u043d\u0456\u0441\u0442\u044c",frown:"\u041d\u0430\u0441\u0443\u043f\u043b\u0435\u043d\u043d\u0456\u0441\u0442\u044c","foot_in_mouth":"\u041d\u043e\u0433\u0430 \u0432 \u0440\u043e\u0442\u0456",embarassed:"\u0417\u0431\u0435\u043d\u0442\u0435\u0436\u0435\u043d\u043d\u044f",usage:"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/vi_dlg.js new file mode 100644 index 0000000..3be797d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.emotions_dlg',{cry:"Kh\u00f3c",cool:"Kh\u00f4ng bi\u1ebft ng\u01b0\u1ee3ng",desc:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",title:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",yell:"La h\u00e9t",wink:"Nh\u00e1y m\u1eaft",undecided:"L\u01b0\u1ee1ng l\u1ef1","tongue_out":"L\u00e8 l\u01b0\u1ee1i",surprised:"Ng\u1ea1c nhi\u00ean",smile:"M\u1ec9m c\u01b0\u1eddi",sealed:"K\u00edn mi\u1ec7ng","money_mouth":"S\u00e1ng m\u1eaft v\u00ec $",laughing:"C\u01b0\u1eddi nh\u0103n r\u0103ng",kiss:"N\u1ee5 h\u00f4n",innocent:"Ng\u00e2y th\u01a1",frown:"Cau m\u00e0y","foot_in_mouth":"L\u1ee1 l\u1eddi",embarassed:"X\u1ea5u h\u1ed5",usage:"Use left and right arrows to navigate."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-cn_dlg.js new file mode 100644 index 0000000..1724a9e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.emotions_dlg',{cry:"\u54ed",cool:"\u9177",desc:"\u8868\u60c5",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u558a",wink:"\u7728\u773c",undecided:"\u72b9\u8c6b","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u8bb6",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u8822\u8bdd",embarassed:"\u5c34\u5c2c",usage:"Use left and right arrows to navigate."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-tw_dlg.js new file mode 100644 index 0000000..4b670b0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.emotions_dlg',{cry:"\u597d\u60f3\u54ed",cool:"\u9177\u554a\uff01",desc:"\u8868\u60c5",title:"\u4f7f\u7528\u8868\u60c5\u7b26\u865f",yell:"\u554a\u554a\u554a\u554a\uff01",wink:"Wink\uff01",undecided:"\u597d\u7336\u8c6b","tongue_out":"\u5566~",surprised:"\u7d66\u4f60\u4e00\u500b\u9a5a\u559c\uff01",smile:"\u5fae\u7b11",sealed:"(\u4e0d\u80fd\u8aaa)","money_mouth":"\u9322\u9322\u9322",laughing:"\u54c8\u54c8",kiss:"\u89aa\u4e00\u500b",innocent:"\u88dd\u7121\u8f9c",frown:"\u7709\u982d\u6df1\u9396","foot_in_mouth":"\u5931\u8a00",embarassed:"\u597d\u5c37\u5c2c\u2026"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh_dlg.js new file mode 100644 index 0000000..d03ed67 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/emotions/langs/zh_dlg.js @@ -0,0 +1,20 @@ +tinyMCE.addI18n('zh.emotions_dlg',{ +title:"\u63D2\u5165\u8868\u60C5", +desc:"\u8868\u60C5\u5217\u8868", +cool:"\u51B7\u9177", +cry:"\u54ED\u6CE3", +embarassed:"\u5C37\u5C2C", +foot_in_mouth:"\u54A7\u5634", +frown:"\u76BA\u7709", +innocent:"\u5929\u771F", +kiss:"\u543B", +laughing:"\u5927\u7B11", +money_mouth:"\u767C\u8CA1", +sealed:"\u4FDD\u5BC6", +smile:"\u5FAE\u7B11", +surprised:"\u9A5A\u5687", +tongue_out:"\u5410\u820C\u982D", +undecided:"\u601D\u8003", +wink:"\u7728\u773C", +yell:"\u53EB\u56B7" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/dialog.htm b/ehcp/net2ftp/plugins/tinymce/plugins/example/dialog.htm new file mode 100644 index 0000000..50b2b34 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/dialog.htm @@ -0,0 +1,22 @@ + + + + {#example_dlg.title} + + + + + +
        +

        Here is a example dialog.

        +

        Selected text:

        +

        Custom arg:

        + +
        + + +
        +
        + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin.js new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin_src.js new file mode 100644 index 0000000..9a0e7da --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/editor_plugin_src.js @@ -0,0 +1,84 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + // Load plugin specific language pack + tinymce.PluginManager.requireLangPack('example'); + + tinymce.create('tinymce.plugins.ExamplePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceExample', function() { + ed.windowManager.open({ + file : url + '/dialog.htm', + width : 320 + parseInt(ed.getLang('example.delta_width', 0)), + height : 120 + parseInt(ed.getLang('example.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, // Plugin absolute URL + some_custom_arg : 'custom arg' // Custom argument + }); + }); + + // Register example button + ed.addButton('example', { + title : 'example.desc', + cmd : 'mceExample', + image : url + '/img/example.gif' + }); + + // Add a node change handler, selects the button in the UI when a image is selected + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('example', n.nodeName == 'IMG'); + }); + }, + + /** + * Creates control instances based in the incomming name. This method is normally not + * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons + * but you sometimes need to create more complex controls like listboxes, split buttons etc then this + * method can be used to create those. + * + * @param {String} n Name of the control to create. + * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. + * @return {tinymce.ui.Control} New control instance or null if no control was created. + */ + createControl : function(n, cm) { + return null; + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Example plugin', + author : 'Some author', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', + version : "1.0" + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/img/example.gif b/ehcp/net2ftp/plugins/tinymce/plugins/example/img/example.gif new file mode 100644 index 0000000..1ab5da4 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/example/img/example.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/js/dialog.js b/ehcp/net2ftp/plugins/tinymce/plugins/example/js/dialog.js new file mode 100644 index 0000000..fa83411 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/js/dialog.js @@ -0,0 +1,19 @@ +tinyMCEPopup.requireLangPack(); + +var ExampleDialog = { + init : function() { + var f = document.forms[0]; + + // Get the selected contents as text and place it in the input + f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'}); + f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg'); + }, + + insert : function() { + // Insert the contents from the input into the document + tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value); + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en.js b/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en.js new file mode 100644 index 0000000..e0784f8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en.js @@ -0,0 +1,3 @@ +tinyMCE.addI18n('en.example',{ + desc : 'This is just a template button' +}); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en_dlg.js new file mode 100644 index 0000000..ebcf948 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example/langs/en_dlg.js @@ -0,0 +1,3 @@ +tinyMCE.addI18n('en.example_dlg',{ + title : 'This is just a example title' +}); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin.js new file mode 100644 index 0000000..0a4551d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin_src.js new file mode 100644 index 0000000..e1c55e4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/example_dependency/editor_plugin_src.js @@ -0,0 +1,50 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + + tinymce.create('tinymce.plugins.ExampleDependencyPlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + }, + + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Example Dependency plugin', + author : 'Some author', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency', + version : "1.0" + }; + } + }); + + /** + * Register the plugin, specifying the list of the plugins that this plugin depends on. They are specified in a list, with the list loaded in order. + * plugins in this list will be initialised when this plugin is initialized. (before the init method is called). + * plugins in a depends list should typically be specified using the short name). If neccesary this can be done + * with an object which has the url to the plugin and the shortname. + */ + tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/css/fullpage.css b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/css/fullpage.css new file mode 100644 index 0000000..2675cec --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/css/fullpage.css @@ -0,0 +1,143 @@ +/* Hide the advanced tab */ +#advanced_tab { + display: none; +} + +#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright { + width: 280px; +} + +#doctype, #docencoding { + width: 200px; +} + +#langcode { + width: 30px; +} + +#bgimage { + width: 220px; +} + +#fontface { + width: 240px; +} + +#leftmargin, #rightmargin, #topmargin, #bottommargin { + width: 50px; +} + +.panel_wrapper div.current { + height: 400px; +} + +#stylesheet, #style { + width: 240px; +} + +#doctypes { + width: 200px; +} + +/* Head list classes */ + +.headlistwrapper { + width: 100%; +} + +.selected { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +.toolbar { + width: 100%; +} + +#headlist { + width: 100%; + margin-top: 3px; + font-size: 11px; +} + +#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element { + display: none; +} + +#addmenu { + position: absolute; + border: 1px solid gray; + display: none; + z-index: 100; + background-color: white; +} + +#addmenu a { + display: block; + width: 100%; + line-height: 20px; + text-decoration: none; + background-color: white; +} + +#addmenu a:hover { + background-color: #B6BDD2; + color: black; +} + +#addmenu span { + padding-left: 10px; + padding-right: 10px; +} + +#updateElementPanel { + display: none; +} + +#script_element .panel_wrapper div.current { + height: 108px; +} + +#style_element .panel_wrapper div.current { + height: 108px; +} + +#link_element .panel_wrapper div.current { + height: 140px; +} + +#element_script_value { + width: 100%; + height: 100px; +} + +#element_comment_value { + width: 100%; + height: 120px; +} + +#element_style_value { + width: 100%; + height: 100px; +} + +#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title { + width: 250px; +} + +.updateElementButton { + margin-top: 3px; +} + +/* MSIE specific styles */ + +* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton { + width: 22px; + height: 22px; +} + +textarea { + height: 55px; +} + +.panel_wrapper div.current {height:420px;} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin.js new file mode 100644 index 0000000..dcf7602 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin.js @@ -0,0 +1 @@ +(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype=""}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin_src.js new file mode 100644 index 0000000..23de7c5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/editor_plugin_src.js @@ -0,0 +1,405 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each, Node = tinymce.html.Node; + + tinymce.create('tinymce.plugins.FullPagePlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullPageProperties', function() { + ed.windowManager.open({ + file : url + '/fullpage.htm', + width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)), + height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + data : t._htmlToData() + }); + }); + + // Register buttons + ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); + + ed.onBeforeSetContent.add(t._setContent, t); + ed.onGetContent.add(t._getContent, t); + }, + + getInfo : function() { + return { + longname : 'Fullpage', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private plugin internal methods + + _htmlToData : function() { + var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor; + + function getAttr(elm, name) { + var value = elm.attr(name); + + return value || ''; + }; + + // Default some values + data.fontface = editor.getParam("fullpage_default_fontface", ""); + data.fontsize = editor.getParam("fullpage_default_fontsize", ""); + + // Parse XML PI + elm = headerFragment.firstChild; + if (elm.type == 7) { + data.xml_pi = true; + matches = /encoding="([^"]+)"/.exec(elm.value); + if (matches) + data.docencoding = matches[1]; + } + + // Parse doctype + elm = headerFragment.getAll('#doctype')[0]; + if (elm) + data.doctype = '"; + + // Parse title element + elm = headerFragment.getAll('title')[0]; + if (elm && elm.firstChild) { + data.metatitle = elm.firstChild.value; + } + + // Parse meta elements + each(headerFragment.getAll('meta'), function(meta) { + var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches; + + if (name) + data['meta' + name.toLowerCase()] = meta.attr('content'); + else if (httpEquiv == "Content-Type") { + matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content')); + + if (matches) + data.docencoding = matches[1]; + } + }); + + // Parse html attribs + elm = headerFragment.getAll('html')[0]; + if (elm) + data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang'); + + // Parse stylesheet + elm = headerFragment.getAll('link')[0]; + if (elm && elm.attr('rel') == 'stylesheet') + data.stylesheet = elm.attr('href'); + + // Parse body parts + elm = headerFragment.getAll('body')[0]; + if (elm) { + data.langdir = getAttr(elm, 'dir'); + data.style = getAttr(elm, 'style'); + data.visited_color = getAttr(elm, 'vlink'); + data.link_color = getAttr(elm, 'link'); + data.active_color = getAttr(elm, 'alink'); + } + + return data; + }, + + _dataToHtml : function(data) { + var headerFragment, headElement, html, elm, value, dom = this.editor.dom; + + function setAttr(elm, name, value) { + elm.attr(name, value ? value : undefined); + }; + + function addHeadNode(node) { + if (headElement.firstChild) + headElement.insert(node, headElement.firstChild); + else + headElement.append(node); + }; + + headerFragment = this._parseHeader(); + headElement = headerFragment.getAll('head')[0]; + if (!headElement) { + elm = headerFragment.getAll('html')[0]; + headElement = new Node('head', 1); + + if (elm.firstChild) + elm.insert(headElement, elm.firstChild, true); + else + elm.append(headElement); + } + + // Add/update/remove XML-PI + elm = headerFragment.firstChild; + if (data.xml_pi) { + value = 'version="1.0"'; + + if (data.docencoding) + value += ' encoding="' + data.docencoding + '"'; + + if (elm.type != 7) { + elm = new Node('xml', 7); + headerFragment.insert(elm, headerFragment.firstChild, true); + } + + elm.value = value; + } else if (elm && elm.type == 7) + elm.remove(); + + // Add/update/remove doctype + elm = headerFragment.getAll('#doctype')[0]; + if (data.doctype) { + if (!elm) { + elm = new Node('#doctype', 10); + + if (data.xml_pi) + headerFragment.insert(elm, headerFragment.firstChild); + else + addHeadNode(elm); + } + + elm.value = data.doctype.substring(9, data.doctype.length - 1); + } else if (elm) + elm.remove(); + + // Add/update/remove title + elm = headerFragment.getAll('title')[0]; + if (data.metatitle) { + if (!elm) { + elm = new Node('title', 1); + elm.append(new Node('#text', 3)).value = data.metatitle; + addHeadNode(elm); + } + } + + // Add meta encoding + if (data.docencoding) { + elm = null; + each(headerFragment.getAll('meta'), function(meta) { + if (meta.attr('http-equiv') == 'Content-Type') + elm = meta; + }); + + if (!elm) { + elm = new Node('meta', 1); + elm.attr('http-equiv', 'Content-Type'); + elm.shortEnded = true; + addHeadNode(elm); + } + + elm.attr('content', 'text/html; charset=' + data.docencoding); + } + + // Add/update/remove meta + each('keywords,description,author,copyright,robots'.split(','), function(name) { + var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name]; + + for (i = 0; i < nodes.length; i++) { + meta = nodes[i]; + + if (meta.attr('name') == name) { + if (value) + meta.attr('content', value); + else + meta.remove(); + + return; + } + } + + if (value) { + elm = new Node('meta', 1); + elm.attr('name', name); + elm.attr('content', value); + elm.shortEnded = true; + + addHeadNode(elm); + } + }); + + // Add/update/delete link + elm = headerFragment.getAll('link')[0]; + if (elm && elm.attr('rel') == 'stylesheet') { + if (data.stylesheet) + elm.attr('href', data.stylesheet); + else + elm.remove(); + } else if (data.stylesheet) { + elm = new Node('link', 1); + elm.attr({ + rel : 'stylesheet', + text : 'text/css', + href : data.stylesheet + }); + elm.shortEnded = true; + + addHeadNode(elm); + } + + // Update body attributes + elm = headerFragment.getAll('body')[0]; + if (elm) { + setAttr(elm, 'dir', data.langdir); + setAttr(elm, 'style', data.style); + setAttr(elm, 'vlink', data.visited_color); + setAttr(elm, 'link', data.link_color); + setAttr(elm, 'alink', data.active_color); + + // Update iframe body as well + dom.setAttribs(this.editor.getBody(), { + style : data.style, + dir : data.dir, + vLink : data.visited_color, + link : data.link_color, + aLink : data.active_color + }); + } + + // Set html attributes + elm = headerFragment.getAll('html')[0]; + if (elm) { + setAttr(elm, 'lang', data.langcode); + setAttr(elm, 'xml:lang', data.langcode); + } + + // Serialize header fragment and crop away body part + html = new tinymce.html.Serializer({ + validate: false, + indent: true, + apply_source_formatting : true, + indent_before: 'head,html,body,meta,title,script,link,style', + indent_after: 'head,html,body,meta,title,script,link,style' + }).serialize(headerFragment); + + this.head = html.substring(0, html.indexOf('')); + }, + + _parseHeader : function() { + // Parse the contents with a DOM parser + return new tinymce.html.DomParser({ + validate: false, + root_name: '#document' + }).parse(this.head); + }, + + _setContent : function(ed, o) { + var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm; + + function low(s) { + return s.replace(/<\/?[A-Z]+/g, function(a) { + return a.toLowerCase(); + }) + }; + + // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate + if (o.format == 'raw' && self.head) + return; + + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + return; + + // Parse out head, body and footer + content = content.replace(/<(\/?)BODY/gi, '<$1body'); + startPos = content.indexOf('', startPos); + self.head = low(content.substring(0, startPos + 1)); + + endPos = content.indexOf('\n'; + + header += editor.getParam('fullpage_default_doctype', ''); + header += '\n\n\n'; + + if (value = editor.getParam('fullpage_default_title')) + header += '' + value + '\n'; + + if (value = editor.getParam('fullpage_default_encoding')) + header += '\n'; + + if (value = editor.getParam('fullpage_default_font_family')) + styles += 'font-family: ' + value + ';'; + + if (value = editor.getParam('fullpage_default_font_size')) + styles += 'font-size: ' + value + ';'; + + if (value = editor.getParam('fullpage_default_text_color')) + styles += 'color: ' + value + ';'; + + header += '\n\n'; + + return header; + }, + + _getContent : function(ed, o) { + var self = this; + + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot); + } + }); + + // Register plugin + tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/fullpage.htm b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/fullpage.htm new file mode 100644 index 0000000..14ab865 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/fullpage.htm @@ -0,0 +1,259 @@ + + + + {#fullpage_dlg.title} + + + + + + + +
        + + +
        +
        +
        + {#fullpage_dlg.meta_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
         
         
         
         
         
          + +
        +
        + +
        + {#fullpage_dlg.langprops} + + + + + + + + + + + + + + + + + + + + + + +
        + +
          + +
         
        + +
         
        +
        +
        + +
        +
        + {#fullpage_dlg.appearance_textprops} + + + + + + + + + + + + + + + + +
        + +
        + +
        + + + + + +
         
        +
        +
        + +
        + {#fullpage_dlg.appearance_bgprops} + + + + + + + + + + +
        + + + + + +
         
        +
        + + + + + +
         
        +
        +
        + +
        + {#fullpage_dlg.appearance_marginprops} + + + + + + + + + + + + + + +
        +
        + +
        + {#fullpage_dlg.appearance_linkprops} + + + + + + + + + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
         
        +
        + + + + + +
         
        +
          
        +
        + +
        + {#fullpage_dlg.appearance_style} + + + + + + + + + + +
        + + + + +
         
        +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/js/fullpage.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/js/fullpage.js new file mode 100644 index 0000000..3f672ad --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/js/fullpage.js @@ -0,0 +1,232 @@ +/** + * fullpage.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinyMCEPopup.requireLangPack(); + + var defaultDocTypes = + 'XHTML 1.0 Transitional=,' + + 'XHTML 1.0 Frameset=,' + + 'XHTML 1.0 Strict=,' + + 'XHTML 1.1=,' + + 'HTML 4.01 Transitional=,' + + 'HTML 4.01 Strict=,' + + 'HTML 4.01 Frameset='; + + var defaultEncodings = + 'Western european (iso-8859-1)=iso-8859-1,' + + 'Central European (iso-8859-2)=iso-8859-2,' + + 'Unicode (UTF-8)=utf-8,' + + 'Chinese traditional (Big5)=big5,' + + 'Cyrillic (iso-8859-5)=iso-8859-5,' + + 'Japanese (iso-2022-jp)=iso-2022-jp,' + + 'Greek (iso-8859-7)=iso-8859-7,' + + 'Korean (iso-2022-kr)=iso-2022-kr,' + + 'ASCII (us-ascii)=us-ascii'; + + var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; + var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px'; + + function setVal(id, value) { + var elm = document.getElementById(id); + + if (elm) { + value = value || ''; + + if (elm.nodeName == "SELECT") + selectByValue(document.forms[0], id, value); + else if (elm.type == "checkbox") + elm.checked = !!value; + else + elm.value = value; + } + }; + + function getVal(id) { + var elm = document.getElementById(id); + + if (elm.nodeName == "SELECT") + return elm.options[elm.selectedIndex].value; + + if (elm.type == "checkbox") + return elm.checked; + + return elm.value; + }; + + window.FullPageDialog = { + changedStyle : function() { + var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style')); + + setVal('fontface', styles['font-face']); + setVal('fontsize', styles['font-size']); + setVal('textcolor', styles['color']); + + if (val = styles['background-image']) + setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1")); + else + setVal('bgimage', ''); + + setVal('bgcolor', styles['background-color']); + + // Reset margin form elements + setVal('topmargin', ''); + setVal('rightmargin', ''); + setVal('bottommargin', ''); + setVal('leftmargin', ''); + + // Expand margin + if (val = styles['margin']) { + val = val.split(' '); + styles['margin-top'] = val[0] || ''; + styles['margin-right'] = val[1] || val[0] || ''; + styles['margin-bottom'] = val[2] || val[0] || ''; + styles['margin-left'] = val[3] || val[0] || ''; + } + + if (val = styles['margin-top']) + setVal('topmargin', val.replace(/px/, '')); + + if (val = styles['margin-right']) + setVal('rightmargin', val.replace(/px/, '')); + + if (val = styles['margin-bottom']) + setVal('bottommargin', val.replace(/px/, '')); + + if (val = styles['margin-left']) + setVal('leftmargin', val.replace(/px/, '')); + + updateColor('bgcolor_pick', 'bgcolor'); + updateColor('textcolor_pick', 'textcolor'); + }, + + changedStyleProp : function() { + var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style')); + + styles['font-face'] = getVal('fontface'); + styles['font-size'] = getVal('fontsize'); + styles['color'] = getVal('textcolor'); + styles['background-color'] = getVal('bgcolor'); + + if (val = getVal('bgimage')) + styles['background-image'] = "url('" + val + "')"; + else + styles['background-image'] = ''; + + delete styles['margin']; + + if (val = getVal('topmargin')) + styles['margin-top'] = val + "px"; + else + styles['margin-top'] = ''; + + if (val = getVal('rightmargin')) + styles['margin-right'] = val + "px"; + else + styles['margin-right'] = ''; + + if (val = getVal('bottommargin')) + styles['margin-bottom'] = val + "px"; + else + styles['margin-bottom'] = ''; + + if (val = getVal('leftmargin')) + styles['margin-left'] = val + "px"; + else + styles['margin-left'] = ''; + + // Serialize, parse and reserialize this will compress redundant styles + setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles)))); + this.changedStyle(); + }, + + update : function() { + var data = {}; + + tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) { + data[node.id] = getVal(node.id); + }); + + tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data); + tinyMCEPopup.close(); + } + }; + + function init() { + var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor; + + // Setup doctype select box + list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(','); + for (i = 0; i < list.length; i++) { + item = list[i].split('='); + + if (item.length > 1) + addSelectValue(form, 'doctype', item[0], item[1]); + } + + // Setup fonts select box + list = editor.getParam("fullpage_fonts", defaultFontNames).split(';'); + for (i = 0; i < list.length; i++) { + item = list[i].split('='); + + if (item.length > 1) + addSelectValue(form, 'fontface', item[0], item[1]); + } + + // Setup fontsize select box + list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(','); + for (i = 0; i < list.length; i++) + addSelectValue(form, 'fontsize', list[i], list[i]); + + // Setup encodings select box + list = editor.getParam("fullpage_encodings", defaultEncodings).split(','); + for (i = 0; i < list.length; i++) { + item = list[i].split('='); + + if (item.length > 1) + addSelectValue(form, 'docencoding', item[0], item[1]); + } + + // Setup color pickers + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); + document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color'); + document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color'); + document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor'); + document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage'); + document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage'); + + // Resize some elements + if (isVisible('stylesheetbrowser')) + document.getElementById('stylesheet').style.width = '220px'; + + if (isVisible('link_href_browser')) + document.getElementById('element_link_href').style.width = '230px'; + + if (isVisible('bgimage_browser')) + document.getElementById('bgimage').style.width = '210px'; + + // Update form + tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) { + setVal(key, value); + }); + + FullPageDialog.changedStyle(); + + // Update colors + updateColor('textcolor_pick', 'textcolor'); + updateColor('bgcolor_pick', 'bgcolor'); + updateColor('visited_color_pick', 'visited_color'); + updateColor('active_color_pick', 'active_color'); + updateColor('link_color_pick', 'link_color'); + }; + + tinyMCEPopup.onInit.add(init); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ar_dlg.js new file mode 100644 index 0000000..6a3a677 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.fullpage_dlg',{title:"\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0646\u062f","meta_tab":"\u0639\u0627\u0645","appearance_tab":"\u0627\u0644\u0634\u0643\u0644","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","meta_props":"\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0645\u064a\u062a\u0627",langprops:"\u0627\u0644\u0644\u063a\u0629 \u0648 \u0627\u0644\u062a\u0631\u0645\u064a\u0632","meta_title":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","meta_keywords":"\u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0641\u062a\u0627\u062d\u064a\u0629","meta_description":"\u0627\u0644\u0648\u0635\u0641","meta_robots":"\u0627\u0644\u0631\u0648\u0628\u0648\u062a\u0627\u062a",doctypes:"\u0646\u0648\u0639 \u0627\u0644\u0645\u0633\u062a\u0646\u062f",langcode:"\u0643\u0648\u062f \u0627\u0644\u0644\u063a\u0629",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0644\u063a\u0629",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0644\u0644\u064a\u0645\u064a\u0646",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"\u0627\u0644\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637","appearance_textprops":"Text properties",bgcolor:"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",bgimage:"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0629","left_margin":"\u0627\u0644\u0627\u0632\u0627\u062d\u0629 \u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631","right_margin":"\u0627\u0644\u0627\u0632\u0627\u062d\u0629 \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646","top_margin":"\u0627\u0644\u0627\u0632\u0627\u062d\u0629 \u0645\u0646 \u0627\u0644\u0623\u0639\u0644\u0649","bottom_margin":"\u0627\u0644\u0627\u0632\u0627\u062d\u0629 \u0645\u0646 \u0627\u0644\u0623\u0633\u0641\u0644","text_color":"\u0644\u0648\u0646 \u0627\u0644\u0646\u0635","font_size":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637","font_face":"\u0627\u0633\u0645 \u0627\u0644\u062e\u0637","link_color":"\u0644\u0648\u0646 \u0627\u0644\u0631\u0627\u0628\u0637","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"\u0627\u0644\u0644\u0648\u0646",fontsize:"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637",fontface:"\u0639\u0627\u0626\u0644\u0629 \u0627\u0644\u062e\u0637","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"\u0645\u0639\u0644\u0648\u0645\u0627\u062a","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0639\u0627\u0645","advanced_props":"Advanced"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/cs_dlg.js new file mode 100644 index 0000000..7b9d580 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.fullpage_dlg',{title:"Vlastnosti dokumentu","meta_tab":"Obecn\u00e9","appearance_tab":"Vzhled","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","meta_props":"Meta informace",langprops:"Jazyk a k\u00f3dov\u00e1n\u00ed","meta_title":"Titulek","meta_keywords":"Kl\u00ed\u010dov\u00e1 slova","meta_description":"Popis","meta_robots":"Roboti",doctypes:"Typ dokumentu",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",ltr:"Zleva doprava",rtl:"Zprava doleva","xml_pi":"XML deklarace",encoding:"K\u00f3dov\u00e1n\u00ed","appearance_bgprops":"Vlastnosti pozad\u00ed","appearance_marginprops":"Okraje t\u011bla dokumentu","appearance_linkprops":"Vlastnosti odkaz\u016f","appearance_textprops":"Vlastnosti textu",bgcolor:"Barva pozad\u00ed",bgimage:"Obr\u00e1zek pozad\u00ed","left_margin":"Lev\u00fd okraj","right_margin":"Prav\u00fd okraj","top_margin":"Horn\u00ed okraj","bottom_margin":"Spodn\u00ed okraj","text_color":"Barva textu","font_size":"Velikost p\u00edsma","font_face":"Typ p\u00edsma","link_color":"Barva odkazu","hover_color":"Barva zvolen\u00e9ho odkazu","visited_color":"Barva nav\u0161t\u00edven\u00e9ho odkazu","active_color":"Barva aktivn\u00edho odkazu",textcolor:"Barva",fontsize:"Velikost p\u00edsma",fontface:"Typ p\u00edsma","meta_index_follow":"Indexovat a sledovat odkazy","meta_index_nofollow":"Indexovat a nesledovat odkazy","meta_noindex_follow":"Neindexovat, ale sledovat odkazy","meta_noindex_nofollow":"Neindexovat a nesledovat odkazy","appearance_style":"Vlastnosti styl\u016f",stylesheet:"Stylopis",style:"Styl",author:"Autor",copyright:"Autorsk\u00e1 pr\u00e1va",add:"P\u0159idat nov\u00fd element",remove:"Odebrat ozna\u010den\u00fd element",moveup:"P\u0159esu\u0148 ozna\u010den\u00fd element v\u00fd\u0161",movedown:"P\u0159esu\u0148 ozna\u010den\u00fd element n\u00ed\u017e","head_elements":"Hlavi\u010dky",info:"Informace","add_title":"Vlo\u017eit titulek","add_meta":"Vlo\u017eit meta informace","add_script":"Vlo\u017eit skript","add_style":"Vlo\u017eit styl","add_link":"Vlo\u017eit nezobrazovan\u00fd odkaz","add_base":"Vlo\u017eit z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","add_comment":"Vlo\u017eit koment\u00e1\u0159","title_element":"Titulek","script_element":"Skript","style_element":"Styl","base_element":"Z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","link_element":"Nezobrazovan\u00fd odkaz","meta_element":"Meta informace","comment_element":"Koment\u00e1\u0159",src:"Zdroj",language:"Jazyk",href:"Soubor/URL",target:"C\u00edl",type:"Typ",charset:"Znakov\u00e1 sada",defer:"Odlo\u017eit (defer)",media:"M\u00e9dia",properties:"Vlastnosti",name:"N\u00e1zev",value:"Hodnota",content:"Obsah",rel:"Vztah str\u00e1nky k c\u00edli",rev:"Vztah c\u00edle ke str\u00e1nce",hreflang:"Jazyk odkazu","general_props":"Obecn\u00e9 parametry","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/da_dlg.js new file mode 100644 index 0000000..79fd658 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.fullpage_dlg',{title:"Dokumentegenskaber","meta_tab":"Generelt","appearance_tab":"Udseende","advanced_tab":"Advanceret","meta_props":"Meta-information",langprops:"Sprog og kodning","meta_title":"Titel","meta_keywords":"N\u00f8gleord","meta_description":"Beskrivelse","meta_robots":"Robots",doctypes:"Doctype",langcode:"Sprogkode",langdir:"Sprogretning",ltr:"Venstre mod h\u00f8jre",rtl:"H\u00f8jre md venstre","xml_pi":"XML declaration",encoding:"Tegns\u00e6t","appearance_bgprops":"Baggrundsegenskaber","appearance_marginprops":"Body margins","appearance_linkprops":"Link farver","appearance_textprops":"Tekstegenskaber",bgcolor:"Baggrundsfarve",bgimage:"Baggrundsbillede","left_margin":"Venstre margin","right_margin":"H\u00f8jre margin","top_margin":"Topmargin","bottom_margin":"Bundmargin","text_color":"Tekstfarve","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Linkfarve","hover_color":"Farve ved aktivering","visited_color":"Farve efter museklik","active_color":"Farve ved museklik",textcolor:"Farve",fontsize:"Skriftst\u00f8rrelse",fontface:"Skrifttype","meta_index_follow":"Indeks og f\u00f8lg links","meta_index_nofollow":"Indeks og f\u00f8lg ikke links","meta_noindex_follow":"Ingen indeks, men f\u00f8lg links","meta_noindex_nofollow":"Ingen indeks og f\u00f8lg ikke links","appearance_style":"Stylesheet og style-egenskaber",stylesheet:"Stylesheet",style:"Style",author:"Forfatter",copyright:"Copyright",add:"Tilf\u00f8j nyt element",remove:"Slet valgte element",moveup:"Flyt valgte element op",movedown:"Flyt valgte element ned","head_elements":"Hovedelement",info:"Information","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Script-element","add_style":"Style-element","add_link":"Link-element","add_base":"Base-element","add_comment":"Kommentar-node","title_element":"Titelelement","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Kommentar",src:"Src",language:"Sprog",href:"Href",target:"Destination",type:"Type",charset:"Tegns\u00e6t",defer:"Defer",media:"Media",properties:"Egenskaber",name:"Navn",value:"V\u00e6rdi",content:"Indhold",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Advanceret"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/de_dlg.js new file mode 100644 index 0000000..ecdff9e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.fullpage_dlg',{title:"Dokument-Eigenschaften","meta_tab":"Allgemein","appearance_tab":"Aussehen","advanced_tab":"Erweitert","meta_props":"Meta-Information",langprops:"Sprache und Codierung","meta_title":"Titel","meta_keywords":"Keywords","meta_description":"Beschreibung","meta_robots":"Robots",doctypes:"DocType",langcode:"Sprachcode",langdir:"Sprachrichtung",ltr:"Links nach Rechts",rtl:"Rechts nach Links","xml_pi":"XML Deklaration",encoding:"Zeichencodierung","appearance_bgprops":"Hintergrund-Eigenschaften","appearance_marginprops":"Abst\u00e4nde des Body","appearance_linkprops":"Linkfarben","appearance_textprops":"Text-Eigenschaften",bgcolor:"Hintergrundfarbe",bgimage:"Hintergrundbild","left_margin":"Linker Abstand","right_margin":"Rechter Abstand","top_margin":"Oberer Abstand","bottom_margin":"Unterer Abstand","text_color":"Textfarbe","font_size":"Schriftgr\u00f6\u00dfe","font_face":"Schriftart","link_color":"Linkfarbe","hover_color":"Hover-Farbe","visited_color":"Visited-Farbe","active_color":"Active-Farbe",textcolor:"Farbe",fontsize:"Schriftgr\u00f6\u00dfe",fontface:"Schriftart","meta_index_follow":"Indizieren und den Links folgen","meta_index_nofollow":"Indizieren, aber den Links nicht folgen","meta_noindex_follow":"Nicht indizieren, aber den Links folgen","meta_noindex_nofollow":"Nicht indizieren und auch nicht den Links folgen","appearance_style":"CSS-Stylesheet und Stileigenschaften",stylesheet:"CSS-Stylesheet",style:"CSS-Stil",author:"Autor",copyright:"Copyright",add:"Neues Element hinzuf\u00fcgen",remove:"Ausgew\u00e4hltes Element entfernen",moveup:"Ausgew\u00e4hltes Element nach oben bewegen",movedown:"Ausgew\u00e4hltes Element nach unten bewegen","head_elements":"\u00dcberschriftenelemente",info:"Information","add_title":"Titel-Element","add_meta":"Meta-Element","add_script":"Script-Element","add_style":"Style-Element","add_link":"Link-Element","add_base":"Base-Element","add_comment":"HTML-Kommentar","title_element":"Titel-Element","script_element":"Script-Element","style_element":"Style-Element","base_element":"Base-Element","link_element":"Link-Element","meta_element":"Meta_Element","comment_element":"Kommentar",src:"Src",language:"Sprache",href:"Href",target:"Ziel",type:"Typ",charset:"Zeichensatz",defer:"Defer",media:"Media",properties:"Eigenschaften",name:"Name",value:"Wert",content:"Inhalt",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Allgemein","advanced_props":"Erweitert"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/en_dlg.js new file mode 100644 index 0000000..516edc7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/es_dlg.js new file mode 100644 index 0000000..05699c8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/es_dlg.js @@ -0,0 +1,85 @@ +tinyMCE.addI18n('es.fullpage_dlg',{ +title:"Propiedades del documento", +meta_tab:"General", +appearance_tab:"Apariencia", +advanced_tab:"Avanzado", +meta_props:"Informaci\u00F3n Meta", +langprops:"Lenguaje y codificaci\u00F3n", +meta_title:"T\u00EDtulo", +meta_keywords:"Palabras clave", +meta_description:"Descripci\u00F3n", +meta_robots:"Robots", +doctypes:"Tipo de doc.", +langcode:"C\u00F3digo del lenguaje", +langdir:"Direcci\u00F3n del lenguaje", +ltr:"Izquierda a derecha", +rtl:"Derecha a izquierda", +xml_pi:"Declaraci\u00F3n XML", +encoding:"Codificaci\u00F3n de caracteres", +appearance_bgprops:"Propiedades del fondo", +appearance_marginprops:"M\u00E1rgenes", +appearance_linkprops:"Colores del v\u00EDnculo", +appearance_textprops:"Propiedades de texto", +bgcolor:"Color de fondo", +bgimage:"Imagen de fondo", +left_margin:"Margen izquierdo", +right_margin:"Margen derecho", +top_margin:"Margen superior", +bottom_margin:"Margen inferior", +text_color:"Color del texto", +font_size:"Tama\u00F1o de fuente", +font_face:"Fuente", +link_color:"Color de v\u00EDnculo", +hover_color:"Color rat\u00F3n encima", +visited_color:"Color visitado", +active_color:"Color activo", +textcolor:"Color", +fontsize:"Tama\u00F1o de fuente", +fontface:"Fuente", +meta_index_follow:"Indexar y seguir los v\u00EDnculos", +meta_index_nofollow:"Indexar y no seguir los v\u00EDnculos", +meta_noindex_follow:"No indexar pero seguir v\u00EDnculos", +meta_noindex_nofollow:"No indexar y no seguir v\u00EDnculos", +appearance_style:"Propiedades de hoja de estilos y estilo", +stylesheet:"Hoja de estilo", +style:"Estilo", +author:"Autor", +copyright:"Copyright", +add:"Agregar nuevo elemento", +remove:"Eliminar elemento seleccionado", +moveup:"Mover elemento seleccionado hacia arriba", +movedown:"Mover elemento seleccionado hacia abajo", +head_elements:"Elemento Head", +info:"Informaci\u00F3n", +add_title:"Elemento Title", +add_meta:"Elemento Meta", +add_script:"Elemento Script", +add_style:"Elemento Style", +add_link:"Elemento Link", +add_base:"Elemento Base", +add_comment:"Nodo Comment", +title_element:"Elemento Title", +script_element:"Elemento Script", +style_element:"Elemento Style", +base_element:"Elemento Base", +link_element:"Elemento Link", +meta_element:"Elemento Meta", +comment_element:"Comentario", +src:"Src", +language:"Lenguaje", +href:"Href", +target:"Target", +type:"Tipo", +charset:"Charset", +defer:"Defer", +media:"Medio", +properties:"Propiedades", +name:"Nombre", +value:"Valor", +content:"Contenido", +rel:"Rel", +rev:"Rev", +hreflang:"Href lang", +general_props:"General", +advanced_props:"Avanzado" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fi_dlg.js new file mode 100644 index 0000000..3f1fb39 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.fullpage_dlg',{title:"Tiedoston asetukset","meta_tab":"Yleinen","appearance_tab":"Ulkoasu","advanced_tab":"Edistynyt","meta_props":"Metatiedot",langprops:"Kieli ja koodaus","meta_title":"Otsikko","meta_keywords":"Avainsanat","meta_description":"Kuvaus","meta_robots":"Robotit",doctypes:"Dokumenttityypit",langcode:"Kielen koodi",langdir:"Kielen suunta",ltr:"Vasemmalta oikealle",rtl:"Oikealta vasemmalle","xml_pi":"XML-ilmoitus",encoding:"Tekstin koodaus","appearance_bgprops":"Taustan asetukset","appearance_marginprops":"Body-marginaalit","appearance_linkprops":"Linkkien v\u00e4rit","appearance_textprops":"Tekstin asetukset",bgcolor:"Taustan v\u00e4ri",bgimage:"Taustakuva","left_margin":"Vasen marginaali","right_margin":"Oikea marginaali","top_margin":"Yl\u00e4marginaali","bottom_margin":"Alamarginaali","text_color":"Tekstin v\u00e4ri","font_size":"Fonttikoko","font_face":"Fontti","link_color":"Linkin v\u00e4ri","hover_color":"Hover-v\u00e4ri","visited_color":"Vierailtu v\u00e4ri","active_color":"Aktiivinen v\u00e4ri",textcolor:"V\u00e4ri",fontsize:"Fonttikoko",fontface:"Fontti","meta_index_follow":"Indeksoi ja seuraa linkkej\u00e4","meta_index_nofollow":"Indeksoi, mutta \u00e4l\u00e4 seuraa linkkej\u00e4","meta_noindex_follow":"\u00c4l\u00e4 indeksoi, mutta seuraa linkkej\u00e4.","meta_noindex_nofollow":"\u00c4l\u00e4 indeksoi, \u00e4l\u00e4k\u00e4 seuraa linkkej\u00e4","appearance_style":"Tyylitiedosto ja tyylin asetukset",stylesheet:"Tyylitiedosto",style:"Tyyli",author:"Kirjoittaja",copyright:"Copyright",add:"Lis\u00e4\u00e4 uusi elementti",remove:"Poista valittu elementti",moveup:"Siirr\u00e4 valittua elementti\u00e4 yl\u00f6s",movedown:"Siirr\u00e4 valittua elementti\u00e4 alas","head_elements":"P\u00e4\u00e4elementti",info:"Informaatio","add_title":"Otsikkoelementti","add_meta":"Meta-elementti","add_script":"Script-elementti","add_style":"Tyylielementti","add_link":"Linkkielementti","add_base":"Base-elementti","add_comment":"Yleinen elementti","title_element":"Otsikkoelementti","script_element":"Script-elementti","style_element":"Tyylielementti","base_element":"Base-elementti","link_element":"Linkkielementti","meta_element":"Meta-elementti","comment_element":"Kommentti",src:"L\u00e4hde",language:"Kieli",href:"Href",target:"Kohde",type:"Tyyppi",charset:"Kirjasintyyppi",defer:"Mukautuminen",media:"Media",properties:"Asetukset",name:"Nimi",value:"Arvo",content:"Sis\u00e4lt\u00f6",rel:"Rel",rev:"Rev",hreflang:"Href-kieli","general_props":"Yleinen","advanced_props":"Edistynyt"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fr_dlg.js new file mode 100644 index 0000000..c2ddc65 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.fullpage_dlg',{title:"Propri\u00e9t\u00e9s du document","meta_tab":"G\u00e9n\u00e9ral","appearance_tab":"Apparence","advanced_tab":"Avanc\u00e9","meta_props":"Metadonn\u00e9es",langprops:"Langue et encodage","meta_title":"Titre","meta_keywords":"Mots-cl\u00e9s","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Code de la langue",langdir:"Sens de lecture",ltr:"De gauche \u00e0 droite",rtl:"De droite \u00e0 gauche","xml_pi":"D\u00e9claration XML",encoding:"Encodage des caract\u00e8res","appearance_bgprops":"Propri\u00e9t\u00e9s du fond","appearance_marginprops":"Marge du corps de la page","appearance_linkprops":"Couleurs des liens","appearance_textprops":"Propri\u00e9t\u00e9s du texte",bgcolor:"Couleur de fond",bgimage:"Image de fond","left_margin":"Marge de gauche","right_margin":"Marge de droite","top_margin":"Marge du haut","bottom_margin":"Marge du bas","text_color":"Couleur du texte","font_size":"Taille de la police","font_face":"Nom de la police","link_color":"Couleur des liens","hover_color":"Couleur au survol","visited_color":"Couleur des liens visit\u00e9s","active_color":"Couleur du lien actif",textcolor:"Couleur",fontsize:"Taille de police",fontface:"Nom de la police","meta_index_follow":"Indexer et suivre les liens","meta_index_nofollow":"Indexer et ne pas suivre les liens","meta_noindex_follow":"Ne pas indexer et suivre les liens","meta_noindex_nofollow":"Ne pas indexer et ne pas suivre les liens","appearance_style":"Propri\u00e9t\u00e9s de la feuille de style et du style",stylesheet:"Feuille de style",style:"Style",author:"Auteur",copyright:"Copyright",add:"Ajouter un nouvel \u00e9l\u00e9ment",remove:"Retirer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9",moveup:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le haut",movedown:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le bas","head_elements":"\u00c9l\u00e9ments d\'en-t\u00eate",info:"Information","add_title":"\u00c9l\u00e9ment de titre","add_meta":"\u00c9l\u00e9ment Meta","add_script":"\u00c9l\u00e9ment de script","add_style":"\u00c9l\u00e9ment de style","add_link":"\u00c9l\u00e9ment de lien","add_base":"\u00c9l\u00e9ment de base","add_comment":"Commentaire","title_element":"\u00c9l\u00e9ment de titre","script_element":"\u00c9l\u00e9ment de script","style_element":"\u00c9l\u00e9ment de style","base_element":"\u00c9l\u00e9ment de base","link_element":"\u00c9l\u00e9ment de lien","meta_element":"\u00c9l\u00e9ment Meta","comment_element":"Commentaire",src:"Source",language:"Langue",href:"Href",target:"Cible",type:"Type",charset:"Charset",defer:"D\u00e9f\u00e9rer",media:"M\u00e9dia",properties:"Propri\u00e9t\u00e9s",name:"Nom",value:"Valeur",content:"Contenu",rel:"Rel",rev:"Rev",hreflang:"langue Href","general_props":"G\u00e9n\u00e9ral","advanced_props":"Avanc\u00e9"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/he_dlg.js new file mode 100644 index 0000000..69faae3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.fullpage_dlg',{title:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05e1\u05de\u05da","meta_tab":"\u05db\u05dc\u05dc\u05d9","appearance_tab":"\u05de\u05e8\u05d0\u05d4","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","meta_props":"\u05ea\u05d2\u05d9 \u05de\u05d8\u05d4",langprops:"\u05e9\u05e4\u05d4 \u05d5\u05e7\u05d9\u05d3\u05d5\u05d3","meta_title":"\u05db\u05d5\u05ea\u05e8\u05ea","meta_keywords":"\u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7","meta_description":"\u05ea\u05d9\u05d0\u05d5\u05e8","meta_robots":"\u05e8\u05d5\u05d1\u05d5\u05d8\u05d9\u05dd",doctypes:"Doctype",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","xml_pi":"XML declaration",encoding:"\u05e7\u05d9\u05d3\u05d5\u05d3 \u05ea\u05d5\u05d5\u05d9\u05dd","appearance_bgprops":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e8\u05e7\u05e2","appearance_marginprops":"Body margins","appearance_linkprops":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","appearance_textprops":"Text properties",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","left_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e9\u05de\u05d0\u05dc\u05d9\u05d9\u05dd","right_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05d9\u05de\u05e0\u05d9\u05d9\u05dd","top_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e2\u05dc\u05d9\u05d5\u05e0\u05d9\u05dd","bottom_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05ea\u05d7\u05ea\u05d9\u05d9\u05dd","text_color":"\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","font_face":"\u05e1\u05d5\u05d2 \u05d2\u05d5\u05e4\u05df","link_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8","hover_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05de\u05e2\u05d1\u05e8 \u05e2\u05db\u05d1\u05e8","visited_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e9\u05e0\u05e6\u05e4\u05d4","active_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e4\u05e2\u05d9\u05dc",textcolor:"\u05e6\u05d1\u05e2",fontsize:"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df",fontface:"\u05d2\u05d5\u05e4\u05df","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"\u05e1\u05d2\u05e0\u05d5\u05df \u05e2\u05d9\u05e6\u05d5\u05d1",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",author:"\u05db\u05d5\u05ea\u05d1",copyright:"\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05d9\u05d5\u05e6\u05e8\u05d9\u05dd",add:"\u05d4\u05d5\u05e1\u05e3 \u05d0\u05dc\u05de\u05e0\u05d8 \u05d7\u05d3\u05e9",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"\u05de\u05d9\u05d3\u05e2","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e2\u05d9\u05e6\u05d5\u05d1","base_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05d1\u05e1\u05d9\u05e1","link_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e7\u05d9\u05e9\u05d5\u05e8","meta_element":"Meta element","comment_element":"\u05ea\u05d2\u05d5\u05d1\u05d4",src:"\u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05e7\u05d5\u05e8",language:"\u05e9\u05e4\u05d4",href:"HREF",target:"\u05d9\u05e2\u05d3",type:"\u05e1\u05d5\u05d2",charset:"\u05e7\u05d9\u05d3\u05d5\u05d3",defer:"Defer",media:"\u05de\u05d3\u05d9\u05d4",properties:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd",name:"\u05e9\u05dd",value:"\u05e2\u05e8\u05da",content:"\u05ea\u05d5\u05db\u05df",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u05db\u05dc\u05dc\u05d9","advanced_props":"\u05de\u05ea\u05e7\u05d3\u05dd"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/hu_dlg.js new file mode 100644 index 0000000..e9f911e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.fullpage_dlg',{title:"Dokumentum tulajdons\u00e1gai","meta_tab":"\u00c1ltal\u00e1nos","appearance_tab":"Megjelen\u00e9s","advanced_tab":"Halad\u00f3","meta_props":"Meta inform\u00e1ci\u00f3",langprops:"Nyelv \u00e9s k\u00f3dol\u00e1s","meta_title":"C\u00edm","meta_keywords":"Kulcsszavak","meta_description":"Le\u00edr\u00e1s","meta_robots":"Robotok",doctypes:"Dokumentum t\u00edpus",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1nya",ltr:"Balr\u00f3l jobra",rtl:"Jobbr\u00f3l balra","xml_pi":"XML deklar\u00e1ci\u00f3",encoding:"Karakterk\u00f3dol\u00e1s","appearance_bgprops":"H\u00e1tt\u00e9r tulajdons\u00e1gai","appearance_marginprops":"Body marg\u00f3k","appearance_linkprops":"Link sz\u00ednek","appearance_textprops":"Sz\u00f6veg tulajdons\u00e1gai",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bgimage:"H\u00e1tt\u00e9rk\u00e9p","left_margin":"Bal marg\u00f3","right_margin":"Jobb marg\u00f3","top_margin":"Fels\u0151 marg\u00f3","bottom_margin":"Als\u00f3 marg\u00f3","text_color":"Sz\u00f6vegsz\u00edn","font_size":"Bet\u0171m\u00e9ret","font_face":"Bet\u0171t\u00edpus","link_color":"Link sz\u00edn","hover_color":"Sz\u00edn eg\u00e9r fel\u00e9vitelekor","visited_color":"Sz\u00edn, ha l\u00e1togatott","active_color":"Akt\u00edv sz\u00edn",textcolor:"Sz\u00edn",fontsize:"Bet\u0171m\u00e9ret",fontface:"Bet\u0171 csal\u00e1d","meta_index_follow":"Linkek indexel\u00e9se \u00e9s k\u00f6vet\u00e9se","meta_index_nofollow":"Indexel, de nem k\u00f6veti a linkeket","meta_noindex_follow":"Nincs indexel\u00e9s, de van link-k\u00f6vet\u00e9s","meta_noindex_nofollow":"Nem indexel \u00e9s nem k\u00f6veti a linkeket","appearance_style":"Stylesheet \u00e9s style tulajdons\u00e1gok",stylesheet:"St\u00edluslap",style:"St\u00edlus",author:"Szerz\u0151",copyright:"Copyright",add:"\u00daj elem hozz\u00e1ad\u00e1sa",remove:"Kijel\u00f6lt elem t\u00f6rl\u00e9se",moveup:"Kijel\u00f6lt elem felfel\u00e9 mozgat\u00e1sa",movedown:"Kijel\u00f6lt elem lefel\u00e9 mozgat\u00e1sa","head_elements":"Fej elemek",info:"Inform\u00e1ci\u00f3","add_title":"C\u00edm elem","add_meta":"Meta elem","add_script":"Script elem","add_style":"Style elem","add_link":"Link elem","add_base":"Base elem","add_comment":"Comment elem","title_element":"Title elem","script_element":"Script elem","style_element":"Style elem","base_element":"Base elem","link_element":"Link elem","meta_element":"Meta elem","comment_element":"Megjegyz\u00e9s",src:"Forr\u00e1s",language:"Nyelv",href:"HREF",target:"C\u00e9l",type:"T\u00edpus",charset:"Charset",defer:"Defer",media:"M\u00e9dia",properties:"Tulajdons\u00e1gok",name:"N\u00e9v",value:"\u00c9rt\u00e9k",content:"Tartalom",rel:"Rel",rev:"Rev",hreflang:"HREF nyelv","general_props":"\u00c1ltal\u00e1nos","advanced_props":"Halad\u00f3"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/it_dlg.js new file mode 100644 index 0000000..d5445e8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.fullpage_dlg',{title:"Propriet\u00e0 Documento","meta_tab":"Generale","appearance_tab":"Aspetto","advanced_tab":"Avanzate","meta_props":"Informazioni Metatag",langprops:"Lingua e codifica","meta_title":"Titolo","meta_keywords":"Parole chiave","meta_description":"Descrizione","meta_robots":"Robots",doctypes:"Doctype",langcode:"Codice lingua",langdir:"Direzione testo",ltr:"Sinistra verso destra",rtl:"Destra verso sinistra","xml_pi":"Dichiarazione XML",encoding:"Codifica carattere","appearance_bgprops":"Propriet\u00e0 sfondo","appearance_marginprops":"Margini body","appearance_linkprops":"Colori collegamenti","appearance_textprops":"Propriet\u00e0 testo",bgcolor:"Colore sfondo",bgimage:"Immagine sfondo","left_margin":"Margine sinistro","right_margin":"Margine destro","top_margin":"Margine superiore","bottom_margin":"Margine inferiore","text_color":"Colore testo","font_size":"Dimensione carattere","font_face":"Tipo carattere","link_color":"Colore collegamento","hover_color":"Colore \\\'Hover\\\'","visited_color":"Colore \\\'Visited\\\'","active_color":"Colore \\\'Active\\\'",textcolor:"Colore",fontsize:"Dimensione carattere",fontface:"Famiglia carattere","meta_index_follow":"Indicizzare e seguire collegamenti","meta_index_nofollow":"Indicizzare e non segure collegamenti","meta_noindex_follow":"Non indicizzare ma seguire collegamenti","meta_noindex_nofollow":"Non indicizzare e non seguire collegamenti","appearance_style":"Propriet\u00e0 stili e fogli di stile",stylesheet:"Fogli di stile",style:"Stile",author:"Autore",copyright:"Copyright",add:"Aggiungi nuovo elemento",remove:"Rimuovi elemento selezionato",moveup:"Sposta elemento selezionato in alto",movedown:"Sposta elemento selezionato in basso","head_elements":"Elementi Head",info:"Informazioni","add_title":"Elemento Titolo","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Commento","title_element":"Elemento Titolo","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Commento",src:"Sorgente",language:"Linguaggio",href:"Href",target:"Target",type:"Tipo",charset:"Set caratteri",defer:"Defer",media:"Media",properties:"Propriet\u00e0",name:"Nome",value:"Valore",content:"Contenuto",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generale","advanced_props":"Avanzate"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ja_dlg.js new file mode 100644 index 0000000..6564363 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.fullpage_dlg',{title:"\u30da\u30fc\u30b8\u306e\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u8868\u793a","advanced_tab":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","meta_props":"\u30e1\u30bf\u60c5\u5831",langprops:"\u8a00\u8a9e\u3068\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","meta_title":"\u30bf\u30a4\u30c8\u30eb","meta_keywords":"\u30ad\u30fc\u30ef\u30fc\u30c9","meta_description":"\u8aac\u660e","meta_robots":"\u691c\u7d22\u30ed\u30dc\u30c3\u30c8\u306e\u5236\u5fa1",doctypes:"\u6587\u66f8\u578b",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",ltr:"\u5de6\u304b\u3089\u53f3",rtl:"\u53f3\u304b\u3089\u5de6","xml_pi":"XML\u5ba3\u8a00",encoding:"\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","appearance_bgprops":"\u80cc\u666f\u306e\u5c5e\u6027","appearance_marginprops":"Body\u306e\u4f59\u767d","appearance_linkprops":"\u30ea\u30f3\u30af\u306e\u8272","appearance_textprops":"\u6587\u5b57\u306e\u5c5e\u6027",bgcolor:"\u80cc\u666f\u306e\u8272",bgimage:"\u80cc\u666f\u306e\u753b\u50cf","left_margin":"\u5de6\u306e\u4f59\u767d","right_margin":"\u53f3\u306e\u4f59\u767d","top_margin":"\u4e0a\u306e\u4f59\u767d","bottom_margin":"\u4e0b\u306e\u4f59\u767d","text_color":"\u6587\u5b57\u306e\u8272","font_size":"\u6587\u5b57\u306e\u5927\u304d\u3055","font_face":"\u30d5\u30a9\u30f3\u30c8","link_color":"\u30ea\u30f3\u30af\u306e\u8272","hover_color":"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u3042\u308b\u30ea\u30f3\u30af\u306e\u8272(hover)","visited_color":"\u65e2\u306b\u8aad\u3093\u3060\u30ea\u30f3\u30af\u306e\u8272(visited)","active_color":"\u30af\u30ea\u30c3\u30af\u3057\u305f\u77ac\u9593\u306e\u30ea\u30f3\u30af\u306e\u8272(active)",textcolor:"\u8272",fontsize:"\u6587\u5b57\u306e\u5927\u304d\u3055",fontface:"\u30d5\u30a9\u30f3\u30c8","meta_index_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_index_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u306f\u305f\u3069\u3089\u306a\u3044","meta_noindex_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_noindex_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u3067\u30ea\u30f3\u30af\u3082\u305f\u3069\u3089\u306a\u3044","appearance_style":"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8\u3068\u30b9\u30bf\u30a4\u30eb\u306e\u5c5e\u6027",stylesheet:"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8",style:"\u30b9\u30bf\u30a4\u30eb",author:"\u4f5c\u6210\u8005",copyright:"\u8457\u4f5c\u6a29",add:"\u65b0\u3057\u304f\u8981\u7d20\u3092\u8ffd\u52a0",remove:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u524a\u9664",moveup:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0a\u306b\u79fb\u52d5",movedown:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0b\u306b\u79fb\u52d5","head_elements":"Head\u8981\u7d20",info:"\u60c5\u5831","add_title":"Title\u8981\u7d20","add_meta":"Meta\u8981\u7d20","add_script":"Script\u8981\u7d20","add_style":"Style\u8981\u7d20","add_link":"Link\u8981\u7d20","add_base":"Base\u8981\u7d20","add_comment":"Comment\u30ce\u30fc\u30c9","title_element":"Title\u8981\u7d20","script_element":"Script\u8981\u7d20","style_element":"Style\u8981\u7d20","base_element":"Base\u8981\u7d20","link_element":"Link\u8981\u7d20","meta_element":"Meta\u8981\u7d20","comment_element":"\u30b3\u30e1\u30f3\u30c8",src:"src",language:"\u8a00\u8a9e",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href\u306e\u8a00\u8a9e","general_props":"\u4e00\u822c","advanced_props":"\u8a73\u7d30\u306a\u8a2d\u5b9a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/nl_dlg.js new file mode 100644 index 0000000..9124146 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.fullpage_dlg',{title:"Documenteigenschappen","meta_tab":"Algemeen","appearance_tab":"Weergave","advanced_tab":"Geavanceerd","meta_props":"Meta informatie",langprops:"Taal en codering","meta_title":"Titel","meta_keywords":"Sleutelwoorden","meta_description":"Beschrijving","meta_robots":"Robots",doctypes:"Doctype",langcode:"Taalcode",langdir:"Taalrichting",ltr:"Van links naar rechts",rtl:"Van rechts naar links","xml_pi":"XML toewijzing",encoding:"Karaktercodering","appearance_bgprops":"Achtergrondeigenschappen","appearance_marginprops":"Bodymarge","appearance_linkprops":"Linkkleuren","appearance_textprops":"Teksteigenschappen",bgcolor:"Achtergrondkleur",bgimage:"Achtergrondafbeelding","left_margin":"Linkermarge","right_margin":"Rechtermarge","top_margin":"Bovenmarge","bottom_margin":"Ondermarge","text_color":"Tekstkleur","font_size":"Tekengrootte","font_face":"Lettertype","link_color":"Linkkleur","hover_color":"Hoverkleur","visited_color":"Bezocht kleur","active_color":"Actieve kleur",textcolor:"Kleur",fontsize:"Tekengrootte",fontface:"Lettertype","meta_index_follow":"Links indexeren en volgen","meta_index_nofollow":"Links indexeren maar niet volgen","meta_noindex_follow":"Links volgen maar niet indexeren","meta_noindex_nofollow":"Links niet indexeren en niet volgen","appearance_style":"Stijlblad en stijleigenschappen",stylesheet:"Stijlblad",style:"Stijl",author:"Auteur",copyright:"Copyright",add:"Nieuw element toevoegen",remove:"Geselecteerde elementen verwijderen",moveup:"Geselecteerde elementen omhoog verplaatsen",movedown:"Geselecteerde elementen omlaag verplaatsen","head_elements":"Kopelementen",info:"Informatie","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Scriptelement","add_style":"Stijlelement","add_link":"Linkelement","add_base":"Basiselement","add_comment":"Opmerkingknooppunt","title_element":"Titelelement","script_element":"Scriptelement","style_element":"Stijlelement","base_element":"Basiselement","link_element":"Linkelement","meta_element":"Meta-element","comment_element":"Opmerking",src:"Bron",language:"Taal",href:"HREF",target:"Doel",type:"Type",charset:"Karakterset",defer:"Uitstellen",media:"Media",properties:"Eigenschappen",name:"Naam",value:"Waarde",content:"Inhoud",rel:"Rel",rev:"Rev",hreflang:"HREF taal","general_props":"Algemeen","advanced_props":"Geavanceerd"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pl_dlg.js new file mode 100644 index 0000000..b940052 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.fullpage_dlg',{title:"W\u0142a\u015bciwo\u015bci dokumentu","meta_tab":"Og\u00f3lne","appearance_tab":"Wygl\u0105d","advanced_tab":"Zaawansowane","meta_props":"Meta informacje",langprops:"J\u0119zyk i kodowanie","meta_title":"Tytu\u0142","meta_keywords":"S\u0142owa kluczowe","meta_description":"Opis","meta_robots":"Roboty",doctypes:"Typ dokumentu",langcode:"Oznaczenie kodowe j\u0119zyka",langdir:"Kierunek czytania tekstu",ltr:"Kierunek z lewej do prawej",rtl:"Kierunek z prawej do lewej","xml_pi":"Deklaracja XML",encoding:"Kodowanie znak\u00f3w","appearance_bgprops":"W\u0142a\u015bciwo\u015bci t\u0142a","appearance_marginprops":"Marginesy strony","appearance_linkprops":"Kolor odno\u015bnik\u00f3w","appearance_textprops":"W\u0142a\u015bciwo\u015bci tekstu",bgcolor:"Kolor t\u0142a",bgimage:"Obrazek t\u0142a","left_margin":"Lewy margines","right_margin":"Prawy margines","top_margin":"G\u00f3rny margines","bottom_margin":"Dolny margines","text_color":"Kolor tekstu","font_size":"Rozmiar czcionki","font_face":"Czcionka","link_color":"Kolor odno\u015bnika","hover_color":"Kolor po najechaniu myszk\u0105","visited_color":"Kolor odwiedzonych link\u00f3w","active_color":"Kolor aktywnych link\u00f3w",textcolor:"Kolor",fontsize:"Rozmiar czcionki",fontface:"Rodzaj czcionki","meta_index_follow":"Indeksuj i pod\u0105\u017caj za linkami","meta_index_nofollow":"Indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","meta_noindex_follow":"Nie indeksuj i pod\u0105\u017caj za odno\u015bnikami","meta_noindex_nofollow":"Nie indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","appearance_style":"Arkusze i w\u0142a\u015bciwo\u015bci styl\u00f3w",stylesheet:"Arkusz styl\u00f3w",style:"Styl",author:"Autor",copyright:"Prawa autorskie",add:"Dodaj nowy element",remove:"Usu\u0144 wybrany element",moveup:"Przesu\u0144 wybrane element do g\u00f3ry",movedown:"Przesu\u0144 wybrane element w d\u00f3\u0142","head_elements":"Elementy nag\u0142\u00f3wka",info:"Informacja","add_title":"Tytu\u0142","add_meta":"Meta tag","add_script":"Skrypt","add_style":"Styl","add_link":"Odno\u015bnik","add_base":"Baza","add_comment":"Komentarz","title_element":"Tytu\u0142","script_element":"Skrypt","style_element":"Styl","base_element":"Baza","link_element":"Odno\u015bnik","meta_element":"Meta tag","comment_element":"Komentarz",src:"\u0179r\u00f3d\u0142o",language:"J\u0119zyk",href:"Odno\u015bnik",target:"Cel",type:"Typ",charset:"Kodowanie",defer:"Defer",media:"Media",properties:"W\u0142a\u015bciwo\u015bci",name:"Nazwa",value:"Warto\u015b\u0107",content:"Zawarto\u015b\u0107",rel:"Rel",rev:"Rev",hreflang:"J\u0119zyk odno\u015bnika","general_props":"G\u0142\u00f3wne","advanced_props":"Zaawansowane"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pt_dlg.js new file mode 100644 index 0000000..749f868 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.fullpage_dlg',{title:"Propriedades do documento","meta_tab":"Geral","appearance_tab":"Apar\u00eancia","advanced_tab":"Avan\u00e7ado","meta_props":"Meta-informa\u00e7\u00e3o",langprops:"Idioma e codifica\u00e7\u00e3o","meta_title":"T\u00edtulo","meta_keywords":"Palavras-chave","meta_description":"Descri\u00e7\u00e3o","meta_robots":"Robots",doctypes:"Doctype",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",ltr:"Esquerda para direita",rtl:"Direita para esquerda","xml_pi":"Declara\u00e7\u00e3o XML",encoding:"Codifica\u00e7\u00e3o de caracteres","appearance_bgprops":"Propriedades do plano de fundo","appearance_marginprops":"Margens (BODY)","appearance_linkprops":"Cores dos links","appearance_textprops":"Propriedades de texto",bgcolor:"Cor de fundo",bgimage:"Imagem de fundo","left_margin":"Margem esquerda","right_margin":"Margem direita","top_margin":"Margem topo","bottom_margin":"Margem base","text_color":"Cor do texto","font_size":"Tamanho fonte","font_face":"Fonte","link_color":"Cores dos links","hover_color":"Hover","visited_color":"Visitado","active_color":"Ativo",textcolor:"Cor",fontsize:"Tamanho fonte",fontface:"Fonte","meta_index_follow":"Indexar e seguir os hyperlinks","meta_index_nofollow":"Indexar e n\u00e3o seguir os hyperlinks","meta_noindex_follow":"Seguir hyperlinks, mas n\u00e3o indexar","meta_noindex_nofollow":"N\u00e3o indexar / n\u00e3o seguir hyperlinks.","appearance_style":"Propriedades de folhas de estilo",stylesheet:"Folha de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Acrescentar novo elemento",remove:"Remover elemento selecionado",moveup:"Subir elemento selecionado",movedown:"Descer elemento selecionado","head_elements":"Elementos HEAD",info:"Informa\u00e7\u00e3o","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Coment\u00e1rio","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Coment\u00e1rio",src:"src",language:"Idioma",href:"href",target:"Alvo",type:"Tipo",charset:"Charset",defer:"Adiar",media:"Media",properties:"Propriedades",name:"Nome",value:"Valor",content:"Conte\u00fado",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"Geral","advanced_props":"Avan\u00e7ado"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ru_dlg.js new file mode 100644 index 0000000..1ae10de --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.fullpage_dlg',{title:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0435\u0435","appearance_tab":"\u0412\u0438\u0434","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","meta_props":"\u0426\u0435\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",langprops:"\u042f\u0437\u044b\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u0430\u0431\u043e\u0442\u044b",doctypes:"\u0422\u0438\u043f",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","xml_pi":"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 XML",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430","appearance_bgprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a","appearance_textprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","left_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430","right_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443","text_color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438","hover_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","visited_color":"\u0426\u0432\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438","active_color":"\u0426\u0432\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438",textcolor:"\u0426\u0432\u0435\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u0432","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don \\ \'t follow the links","appearance_style":"\u041b\u0438\u0441\u0442 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0438\u043b\u0435\u0439",stylesheet:"\u041b\u0438\u0441\u0442 \u0441\u0442\u0438\u043b\u0435\u0439",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442",add:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Header",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","add_title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","add_meta":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","add_script":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","add_style":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","add_link":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","add_base":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","add_comment":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439","title_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","script_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","style_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","base_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","link_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","meta_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","comment_element":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",src:"Src",language:"\u042f\u0437\u044b\u043a",href:"\u0441\u0441\u044b\u043b\u043a\u0430",target:"\u0426\u0435\u043b\u044c",type:"Type",charset:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",defer:"\u041e\u0442\u0441\u0440\u043e\u0447\u043a\u0430",media:"\u041c\u0435\u0434\u0438\u0430",properties:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435",content:"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",rel:"Rel",rev:"Rev",hreflang:"\u042f\u0437\u044b\u043a \u0441\u0441\u044b\u043b\u043a\u0438","general_props":"\u041e\u0431\u0449\u0435\u0435","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/sv_dlg.js new file mode 100644 index 0000000..c141b23 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.fullpage_dlg',{title:"Dokumentinst\u00e4llningar","meta_tab":"Generella","appearance_tab":"Utseende","advanced_tab":"Avancerat","meta_props":"Metainformation",langprops:"Spr\u00e5k och kodning","meta_title":"Titel","meta_keywords":"Nyckelord","meta_description":"Bekrivning","meta_robots":"Robots",doctypes:"Doctype",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",ltr:"V\u00e4nster till h\u00f6ger",rtl:"H\u00f6ger till v\u00e4nster","xml_pi":"XML deklaration",encoding:"Teckenkodning","appearance_bgprops":"Bakgrundsinst\u00e4llningar","appearance_marginprops":"Body marginaler","appearance_linkprops":"L\u00e4nkf\u00e4rger","appearance_textprops":"Textinst\u00e4llningar",bgcolor:"Bakgrundsf\u00e4rg",bgimage:"Bakgrundsbild","left_margin":"V\u00e4nstermarginal","right_margin":"H\u00f6germarginal","top_margin":"Toppmarginal","bottom_margin":"Bottenmarginal","text_color":"Textf\u00e4rg","font_size":"Textstorlek","font_face":"Textstil","link_color":"L\u00e4nkf\u00e4rg","hover_color":"Hover f\u00e4rg","visited_color":"Visited f\u00e4rg","active_color":"Active f\u00e4rg",textcolor:"F\u00e4rg",fontsize:"Textstorlek",fontface:"Textstil","meta_index_follow":"Indexera och f\u00f6lj l\u00e4nkar","meta_index_nofollow":"Indexera men f\u00f6lj ej l\u00e4nkar","meta_noindex_follow":"Indexera inte men f\u00f6lj l\u00e4nkar","meta_noindex_nofollow":"Indexera inte och f\u00f6lj ej l\u00e4nkar","appearance_style":"Stilmall och stilegenskaper",stylesheet:"Stilmall",style:"Stil",author:"F\u00f6rfattare",copyright:"Copyright",add:"L\u00e4gg till element",remove:"Radera det markerade elementet",moveup:"Flytta det markerade elementet upp\u00e5t",movedown:"Flytta det markerade elementet ned\u00e5t","head_elements":"Head element",info:"Information","add_title":"Titel-element","add_meta":"Meta-element","add_script":"Script-element","add_style":"Stil-element","add_link":"L\u00e4nk-element","add_base":"Base-element","add_comment":"Kommentarsnod","title_element":"Titel-element","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Comment-element",src:"Src",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Typ",charset:"Teckenupps\u00e4ttning",defer:"Defer",media:"Media",properties:"Egenskaper",name:"Name",value:"Value",content:"Inneh\u00e5ll",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generellt","advanced_props":"Avancerat"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/tr_dlg.js new file mode 100644 index 0000000..8f2a44b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.fullpage_dlg',{title:"Belge \u00f6zellikleri","meta_tab":"Genel","appearance_tab":"G\u00f6r\u00fcn\u00fcm","advanced_tab":"Geli\u015fmi\u015f","meta_props":"Meta bilgisi",langprops:"Dil ve kodlama","meta_title":"Ba\u015fl\u0131k","meta_keywords":"Anahtar kelimeler","meta_description":"A\u00e7\u0131klama","meta_robots":"Robotlar",doctypes:"Belge tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",ltr:"Sa\u011fdan sola",rtl:"Soldan sa\u011fa","xml_pi":"XML tan\u0131m\u0131",encoding:"Karakter kodlamas\u0131","appearance_bgprops":"Arkaplan \u00f6zellikleri","appearance_marginprops":"G\u00f6vde bo\u015fluklar\u0131","appearance_linkprops":"Ba\u011flant\u0131 renkleri","appearance_textprops":"Metin \u00f6zellikleri",bgcolor:"Arkaplan rengi",bgimage:"Arkaplan resmi","left_margin":"Sol bo\u015fluk","right_margin":"Sa\u011f bo\u015fluk","top_margin":"\u00dcst bo\u015fluk","bottom_margin":"Alt bo\u015fluk","text_color":"Metin rengi","font_size":"Yaz\u0131 boyutu","font_face":"Yaz\u0131 tipi","link_color":"Ba\u011flant\u0131 rengi","hover_color":"Fare \u00fcst\u00fcnde rengi","visited_color":"Ziyaret edilmi\u015f ba\u011flant\u0131 rengi","active_color":"Ge\u00e7erli renk",textcolor:"Renk",fontsize:"Yaz\u0131 boyutu",fontface:"Yaz\u0131 tipi","meta_index_follow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izle.","meta_index_nofollow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izleme.","meta_noindex_follow":"\u0130ndeksleme ama ba\u011flant\u0131lar\u0131 izle.","meta_noindex_nofollow":"\u0130ndeksleme ve ba\u011flant\u0131lar\u0131 izleme.","appearance_style":"Stil ve stil sayfas\u0131 \u00f6zellikleri",stylesheet:"Stil sayfas\u0131",style:"Stil",author:"Yazar",copyright:"Telik hakk\u0131",add:"Yeni nesne ekle",remove:"Se\u00e7ili nesneyi kald\u0131r",moveup:"Se\u00e7ili nesneyi yukar\u0131 ta\u015f\u0131",movedown:"Se\u00e7ili nesneyi a\u015fa\u011f\u0131 ta\u015f\u0131","head_elements":"Ba\u015fl\u0131k nesneleri",info:"Bilgi","add_title":"Ba\u015fl\u0131k nesnesi","add_meta":"Meta nesnesi","add_script":"Script nesnesi","add_style":"Stil nesnesi","add_link":"Ba\u011flant\u0131 nesnesi","add_base":"Temel nesne","add_comment":"Yorum d\u00fc\u011f\u00fcm\u00fc","title_element":"Ba\u015fl\u0131k nesnesi","script_element":"Script nesnesi","style_element":"Stil nesnesi","base_element":"Temel nesne","link_element":"Ba\u011flant\u0131 nesnesi","meta_element":"Meta nesnesi","comment_element":"Yorum",src:"Src",language:"Dil",href:"Href",target:"Hedef",type:"Tip",charset:"Karakter seti",defer:"Erteleme",media:"Medya",properties:"\u00d6zellikler",name:"\u0130sim",value:"De\u011fer",content:"\u0130\u00e7erik",rel:"Rel",rev:"Rev",hreflang:"Href dili","general_props":"Genel","advanced_props":"Geli\u015fmi\u015f"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/uk_dlg.js new file mode 100644 index 0000000..f1e6a7f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.fullpage_dlg',{title:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","appearance_tab":"\u0412\u0438\u0433\u043b\u044f\u0434","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","meta_props":"\u041c\u0435\u0442\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f",langprops:"\u041c\u043e\u0432\u0430 \u0442\u0430 \u043a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"Doctype",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447","xml_pi":"\u041e\u0431\'\u044f\u0432\u043b\u0435\u043d\u043d\u044f XML",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432","appearance_bgprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0444\u043e\u043d\u0443","appearance_marginprops":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438","appearance_linkprops":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","appearance_textprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0435\u043a\u0441\u0442\u0443",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","left_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043b\u0456\u0432\u0430","right_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043d\u0438\u0437\u0443","text_color":"\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","hover_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","visited_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u0456","active_color":"\u041a\u043e\u043b\u0456\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",textcolor:"\u041a\u043e\u043b\u0456\u0440",fontsize:"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0456\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u0430","meta_index_follow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_index_nofollow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_follow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438, \u0430\u043b\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_nofollow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","appearance_style":"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e \u0442\u0430 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0441\u0442\u0438\u043b\u044e",stylesheet:"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0435 \u043f\u0440\u0430\u0432\u043e",add:"\u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0433\u043e\u0440\u0443",movedown:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"Head \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438",info:"\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f","add_title":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_base":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"\u0412\u0443\u0437\u043e\u043b \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u044f","title_element":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","meta_element":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440",src:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e",language:"\u041c\u043e\u0432\u0430",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",target:"\u0426\u0456\u043b\u044c",type:"\u0422\u0438\u043f",charset:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f",defer:"Defer",media:"\u041c\u0435\u0434\u0456\u0430",properties:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456",name:"\u041d\u0430\u0437\u0432\u0430",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f",content:"\u0417\u043c\u0456\u0441\u0442",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a",rev:"Rev",hreflang:"\u041c\u043e\u0432\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","advanced_props":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/vi_dlg.js new file mode 100644 index 0000000..3222b67 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.fullpage_dlg',{title:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","meta_tab":"Chung","appearance_tab":"Xu\u1ea5t hi\u1ec7n","advanced_tab":"N\u00e2ng cao","meta_props":"Th\u00f4ng tin Meta",langprops:"Ng\u00f4n ng\u1eef v\u00e0 m\u00e3 h\u00f3a","meta_title":"Ti\u00eau \u0111\u1ec1","meta_keywords":"T\u1eeb kh\u00f3a","meta_description":"M\u00f4 t\u1ea3","meta_robots":"Robots",doctypes:"Ki\u1ec3u t\u00e0i li\u1ec7u",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",ltr:"Tr\u00e1i qua ph\u1ea3i",rtl:"Ph\u1ea3i qua tr\u00e1i","xml_pi":"Khai b\u00e1o XML",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1","appearance_bgprops":"Thu\u1ed9c t\u00ednh n\u1ec1n","appearance_marginprops":"Bi\u00ean c\u1ee7a th\u00e2n t\u00e0i li\u1ec7u","appearance_linkprops":"M\u00e0u li\u00ean k\u1ebft","appearance_textprops":"Thu\u00f4c t\u00ednh v\u0103n b\u1ea3n",bgcolor:"M\u00e0u n\u1ec1n",bgimage:"\u1ea2nh n\u1ec1n","left_margin":"Bi\u00ean tr\u00e1i","right_margin":"Bi\u00ean ph\u1ea3i","top_margin":"Bi\u00ean tr\u00ean","bottom_margin":"Bi\u00ean d\u01b0\u1edbi","text_color":"M\u00e0u v\u0103n b\u1ea3n","font_size":"K\u00edch c\u1ee1 ph\u00f4ng","font_face":"Ph\u00f4ng ch\u1eef","link_color":"M\u00e0u li\u00ean k\u1ebft","hover_color":"M\u00e0u khi tr\u1ecf chu\u1ed9t","visited_color":"M\u00e0u \u0111\u00e3 gh\u00e9 th\u0103m","active_color":"M\u00e0u ho\u1ea1t \u0111\u1ed9ng",textcolor:"M\u00e0u",fontsize:"K\u00edch c\u1ee1 ph\u00f4ng",fontface:"T\u1eadp h\u1ee3p ph\u00f4ng","meta_index_follow":"Ch\u1ec9 s\u1ed1 v\u00e0 theo li\u00ean k\u1ebft","meta_index_nofollow":"Ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","meta_noindex_follow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 nh\u01b0ng theo li\u00ean k\u1ebft","meta_noindex_nofollow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","appearance_style":"Thu\u1ed9c t\u00ednh ki\u1ec3u d\u00e1ng v\u00e0 stylesheet",stylesheet:"Stylesheet",style:"Ki\u1ec3u d\u00e1ng",author:"T\u00e1c gi\u1ea3",copyright:"B\u1ea3n quy\u1ec1n",add:"Th\u00eam ph\u1ea7n t\u1eed m\u1edbi",remove:"Lo\u1ea1i b\u1ecf ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn",moveup:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i l\u00ean",movedown:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i xu\u1ed1ng","head_elements":"Ph\u1ea7n t\u1eed \u0111\u1ea7u \u0111\u1ec1",info:"Th\u00f4ng tin","add_title":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","add_meta":"Ph\u1ea7n t\u1eed meta","add_script":"Ph\u1ea7n t\u1eed script","add_style":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","add_link":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","add_base":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","add_comment":"Comment node","title_element":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","script_element":"Ph\u1ea7n t\u1eed script","style_element":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","base_element":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","link_element":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","meta_element":"Ph\u1ea7n t\u1eed meta","comment_element":"Ch\u00fa th\u00edch",src:"Src",language:"Ng\u00f4n ng\u1eef",href:"Href",target:"\u0110\u00edch",type:"Ki\u1ec3u",charset:"T\u1eadp k\u00fd t\u1ef1",defer:"Tr\u00ec ho\u00e3n",media:"Ph\u01b0\u01a1ng ti\u1ec7n",properties:"Thu\u1ed9c t\u00ednh",name:"T\u00ean",value:"Gi\u00e1 tr\u1ecb",content:"N\u1ed9i dung",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Chung","advanced_props":"N\u00e2ng cao"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-cn_dlg.js new file mode 100644 index 0000000..de0a74a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.fullpage_dlg',{title:"\u6587\u4ef6\u5c5e\u6027","meta_tab":"\u666e\u901a","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Meta\u4fe1\u606f",langprops:"\u8bed\u8a00\u548c\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"Meta \u5173\u952e\u5b57","meta_description":"Meta \u63cf\u8ff0","meta_robots":"\u641c\u7d22\u673a\u5668\u4eba",doctypes:"\u6587\u6863\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u7533\u660e",encoding:"\u5b57\u7b26\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"\u9875\u8fb9\u8ddd","appearance_linkprops":"\u8d85\u94fe\u63a5\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u672c\u989c\u8272","font_size":"\u5b57\u4f53\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8d85\u94fe\u63a5\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743\u58f0\u660e",add:"\u6dfb\u52a0\u5143\u7d20",remove:"\u5220\u9664\u9009\u62e9\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u62e9\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u62e9\u5143\u7d20","head_elements":"Head\u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title\u5143\u7d20","script_element":"Script\u5143\u7d20","style_element":"Style\u5143\u7d20","base_element":"Base\u5143\u7d20","link_element":"Link\u5143\u7d20","meta_element":"Meta\u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"\u5730\u5740",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href\u8bed\u8a00","general_props":"\u5e38\u89c4","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-tw_dlg.js new file mode 100644 index 0000000..5a9b054 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.fullpage_dlg',{title:"\u9801\u9762\u8a2d\u5b9a","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u66f4\u591a\u8a2d\u5b9a","meta_props":"Meta \u8cc7\u8a0a",langprops:"\u8a9e\u8a00\u8207\u7de8\u78bc\u8a2d\u5b9a","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u63cf\u8ff0","meta_robots":"\u641c\u5c0b\u5f15\u64ce\u7684\u6a5f\u5668\u4eba",doctypes:"\u6587\u4ef6\u985e\u578b (Doctype)",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5f0f",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u5b9a\u7fa9 (XML declaration)",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u8a2d\u5b9a","appearance_marginprops":"\u7db2\u9801\u7684\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u7684\u984f\u8272","appearance_textprops":"\u6587\u5b57\u8a2d\u5b9a",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u65b9\u908a\u8ddd","bottom_margin":"\u4e0b\u65b9\u908a\u8ddd","text_color":"\u6587\u5b57\u984f\u8272","font_size":"\u5b57\u9ad4\u5927\u5c0f","font_face":"\u5b57\u9ad4\u6a23\u5f0f","link_color":"\u9810\u8a2d\u7684\u984f\u8272\u6a23\u5f0f","hover_color":"\u6ed1\u9f20\u79fb\u904e\u53bb\u7684\u984f\u8272\u6a23\u5f0f","visited_color":"\u9ede\u904e\u5f8c\u7684\u984f\u8272\u6a23\u5f0f","active_color":"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272",textcolor:"\u984f\u8272",fontsize:"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272\u6a23\u5f0f",fontface:"\u5b57\u9ad4\u6a23\u5f0f","meta_index_follow":"\u516c\u958b\u7d66\u641c\u5c0b\u5f15\u64ce\u77e5\u9053","meta_index_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u53ef\u4ee5\u5206\u4eab\u9023\u7d50\u7d66\u5927\u5bb6\uff0c\u4f46\u4e0d\u8981\u8b93\u641c\u5c0b\u5f15\u64ce\u5f9e\u9019\u88e1\u627e\u8cc7\u6599","meta_noindex_follow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u4e0d\u8981\u8b93\u5927\u5bb6\u77e5\u9053\u6709\u9019\u500b\u9023\u7d50\uff0c\u53ea\u8b93\u641c\u5c0b\u5f15\u64ce\u77e5\u9053\u3001\u627e\u8cc7\u6599","meta_noindex_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u8df3\u904e\u9019\u500b\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u8868\u8207\u6a23\u5f0f\u7684\u5c6c\u6027\u8a2d\u5b9a",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u9328\u9ede (\u66f8\u7c64)",copyright:"\u8457\u4f5c/\u6388\u6b0a",add:"\u65b0\u589e HTML \u6a19\u7c64",remove:"\u522a\u9664\u6240\u9078\u7684\u6a19\u7c64",moveup:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0a)",movedown:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0b)","head_elements":"HTML \u7684 Head \u6a19\u7c64",info:"\u8cc7\u8a0a","add_title":"HTML \u7684 Title \u6a19\u7c64","add_meta":"HTML \u7684 Meta \u6a19\u7c64","add_script":"HTML \u7684 Script \u6a19\u7c64","add_style":"HTML \u7684 Style \u6a19\u7c64","add_link":"HTML \u7684 Link \u6a19\u7c64","add_base":"HTML \u7684 Base \u6a19\u7c64","add_comment":"\u8a3b\u6587","title_element":"HTML \u7684 Title \u6a19\u7c64","script_element":"HTML \u7684 Script \u6a19\u7c64","style_element":"HTML \u7684 Style \u6a19\u7c64","base_element":"HTML \u7684 Base \u6a19\u7c64","link_element":"HTML \u7684 Link \u6a19\u7c64","meta_element":"HTML \u7684 Meta \u6a19\u7c64","comment_element":"\u8a3b\u89e3",src:"\u4f86\u6e90",language:"\u8a9e\u8a00",href:"\u9023\u7d50\u4f4d\u7f6e",target:"\u958b\u555f\u65b9\u5f0f",type:"\u5f62\u5f0f",charset:"\u5b57\u5143",defer:"\u5ef6\u7de9",media:"\u5f71\u97f3/\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"\u8a72\u9023\u7d50\u662f\u4ec0\u9ebc (Rel)",rev:"\u8a72\u9023\u7d50\u8207\u7db2\u7ad9\u7684\u95dc\u4fc2 (Rev)",hreflang:"\u8a72\u9023\u7d50\u7684\u8a9e\u7cfb","general_props":"\u4e00\u822c","advanced_props":"\u66f4\u591a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh_dlg.js new file mode 100644 index 0000000..959a4aa --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullpage/langs/zh_dlg.js @@ -0,0 +1,85 @@ +tinyMCE.addI18n('zh.fullpage_dlg',{ +title:"\u6A94\u6848\u5C6C\u6027", +meta_tab:"\u57FA\u672C", +appearance_tab:"\u5916\u89C0", +advanced_tab:"\u9AD8\u7D1A", +meta_props:"\u4E2D\u7E7C\u8CC7\u6599\u6A19\u7C64\u5C6C\u6027", +langprops:"\u8A9E\u8A00", +meta_title:"\u6A19\u984C", +meta_keywords:"\u95DC\u9375\u5B57", +meta_description:"\u5167\u5BB9\u8AAA\u660E", +meta_robots:"\u6A5F\u5668\u4EBA", +doctypes:"DocType", +langcode:"\u8A9E\u8A00\u7DE8\u78BC", +langdir:"\u8A9E\u8A00\u66F8\u5BEB\u65B9\u5411", +ltr:"\u5F9E\u5DE6\u5230\u53F3", +rtl:"\u5F9E\u53F3\u5230\u5DE6", +xml_pi:"XML \u8072\u660E", +encoding:"\u5B57\u5143\u7DE8\u78BC", +appearance_bgprops:"\u80CC\u666F\u5C6C\u6027", +appearance_marginprops:"\u908A\u8DDD", +appearance_linkprops:"\u9023\u7D50\u984F\u8272", +appearance_textprops:"\u6587\u5B57\u5C6C\u6027", +bgcolor:"\u80CC\u666F\u984F\u8272", +bgimage:"\u80CC\u666F\u5716\u7247", +left_margin:"\u5DE6\u908A\u8DDD", +right_margin:"\u53F3\u908A\u8DDD", +top_margin:"\u4E0A\u908A\u8DDD", +bottom_margin:"\u4E0B\u908A\u8DDD", +text_color:"\u6587\u5B57\u984F\u8272", +font_size:"\u6587\u5B57\u5927\u5C0F", +font_face:"\u5B57\u9AD4", +link_color:"\u9023\u7D50\u984F\u8272", +hover_color:"Hover \u984F\u8272", +visited_color:"Visited \u984F\u8272", +active_color:"Active \u984F\u8272", +textcolor:"\u984F\u8272", +fontsize:"\u6587\u5B57\u5927\u5C0F", +fontface:"\u5B57\u9AD4", +meta_index_follow:"Index and follow the links", +meta_index_nofollow:"Index and don't follow the links", +meta_noindex_follow:"Do not index but follow the links", +meta_noindex_nofollow:"Do not index and don\'t follow the links", +appearance_style:"\u6A23\u5F0F\u8868\u5C6C\u6027", +stylesheet:"\u6A23\u5F0F\u8868", +style:"\u6A23\u5F0F", +author:"\u4F5C\u8005", +copyright:"\u7248\u6B0A", +add:"\u6DFB\u52A0\u65B0\u5C0D\u8C61", +remove:"\u522A\u9664\u9078\u64C7\u7684\u7269\u4EF6", +moveup:"\u5411\u4E0A\u79FB\u52D5\u9078\u64C7\u7684\u7269\u4EF6", +movedown:"\u5411\u4E0B\u79FB\u52D5\u9078\u64C7\u7684\u7269\u4EF6", +head_elements:"\u982D\u5C0D\u8C61", +info:"\u4FE1\u606F", +add_title:"\u67E5\u627E\u5C0D\u8C61", +add_meta:"\u5143\u5C0D\u8C61", +add_script:"\u8173\u672C\u5C0D\u8C61", +add_style:"\u6A23\u5F0F\u7269\u4EF6", +add_link:"\u9023\u7D50\u5316\u7269\u4EF6", +add_base:"Base\u5C0D\u8C61", +add_comment:"\u6CE8\u91CB\u5C0D\u8C61", +title_element:"\u67E5\u627E\u5C0D\u8C61", +script_element:"\u8173\u672C\u5C0D\u8C61", +style_element:"\u6A23\u5F0F\u7269\u4EF6", +base_element:"Base\u5C0D\u8C61", +link_element:"\u9023\u7D50\u5316\u7269\u4EF6", +meta_element:"\u5143\u5C0D\u8C61", +comment_element:"\u6CE8\u91CB\u5C0D\u8C61", +src:"Src", +language:"\u8A9E\u8A00", +href:"Href", +target:"\u76EE\u6A19", +type:"\u985E\u578B", +charset:"\u5B57\u5143\u96C6", +defer:"Defer", +media:"\u5A92\u9AD4", +properties:"\u5C6C\u6027", +name:"\u540D", +value:"\u503C", +content:"\u5167\u5BB9", +rel:"Rel", +rev:"Rev", +hreflang:"Href lang", +general_props:"\u57FA\u672C", +advanced_props:"\u9AD8\u7D1A" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin.js new file mode 100644 index 0000000..a2eb034 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().getElementsByTagName("table")[0]);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin_src.js new file mode 100644 index 0000000..524b487 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/editor_plugin_src.js @@ -0,0 +1,159 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.FullScreenPlugin', { + init : function(ed, url) { + var t = this, s = {}, vp, posCss; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullScreen', function() { + var win, de = DOM.doc.documentElement; + + if (ed.getParam('fullscreen_is_enabled')) { + if (ed.getParam('fullscreen_new_window')) + closeFullscreen(); // Call to close in new window + else { + DOM.win.setTimeout(function() { + tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); + tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent()); + tinyMCE.remove(ed); + DOM.remove('mce_fullscreen_container'); + de.style.overflow = ed.getParam('fullscreen_html_overflow'); + DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); + DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); + tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + }, 10); + } + + return; + } + + if (ed.getParam('fullscreen_new_window')) { + win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); + try { + win.resizeTo(screen.availWidth, screen.availHeight); + } catch (e) { + // Ignore + } + } else { + tinyMCE.oldSettings = tinyMCE.settings; // Store old settings + s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; + s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); + vp = DOM.getViewPort(); + s.fullscreen_scrollx = vp.x; + s.fullscreen_scrolly = vp.y; + + // Fixes an Opera bug where the scrollbars doesn't reappear + if (tinymce.isOpera && s.fullscreen_overflow == 'visible') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where horizontal scrollbars would appear + if (tinymce.isIE && s.fullscreen_overflow == 'scroll') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where the scrollbars doesn't reappear + if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) + s.fullscreen_html_overflow = 'auto'; + + if (s.fullscreen_overflow == '0px') + s.fullscreen_overflow = ''; + + DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); + de.style.overflow = 'hidden'; //Fix for IE6/7 + vp = DOM.getViewPort(); + DOM.win.scrollTo(0, 0); + + if (tinymce.isIE) + vp.h -= 1; + + // Use fixed position if it exists + if (tinymce.isIE6 || document.compatMode == 'BackCompat') + posCss = 'absolute;top:' + vp.y; + else + posCss = 'fixed;top:0'; + + n = DOM.add(DOM.doc.body, 'div', { + id : 'mce_fullscreen_container', + style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'}); + DOM.add(n, 'div', {id : 'mce_fullscreen'}); + + tinymce.each(ed.settings, function(v, n) { + s[n] = v; + }); + + s.id = 'mce_fullscreen'; + s.width = n.clientWidth; + s.height = n.clientHeight - 15; + s.fullscreen_is_enabled = true; + s.fullscreen_editor_id = ed.id; + s.theme_advanced_resizing = false; + s.save_onsavecallback = function() { + ed.setContent(tinyMCE.get(s.id).getContent()); + ed.execCommand('mceSave'); + }; + + tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) { + s[k] = v; + }); + + if (s.theme_advanced_toolbar_location === 'external') + s.theme_advanced_toolbar_location = 'top'; + + t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); + t.fullscreenEditor.onInit.add(function() { + t.fullscreenEditor.setContent(ed.getContent()); + t.fullscreenEditor.focus(); + }); + + t.fullscreenEditor.render(); + + t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container'); + t.fullscreenElement.update(); + //document.body.overflow = 'hidden'; + + t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() { + var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize; + + // Get outer/inner size to get a delta size that can be used to calc the new iframe size + outerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('table')[0]); + innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]); + + fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h); + }); + } + }); + + // Register buttons + ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'}); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); + }); + }, + + getInfo : function() { + return { + longname : 'Fullscreen', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/fullscreen.htm b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/fullscreen.htm new file mode 100644 index 0000000..ffe528e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/fullscreen/fullscreen.htm @@ -0,0 +1,110 @@ + + + + + + + + + +
        + +
        + + + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin.js new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin_src.js new file mode 100644 index 0000000..1b2bb98 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/iespell/editor_plugin_src.js @@ -0,0 +1,54 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.IESpell', { + init : function(ed, url) { + var t = this, sp; + + if (!tinymce.isIE) + return; + + t.editor = ed; + + // Register commands + ed.addCommand('mceIESpell', function() { + try { + sp = new ActiveXObject("ieSpell.ieSpellExtension"); + sp.CheckDocumentNode(ed.getDoc().documentElement); + } catch (e) { + if (e.number == -2146827859) { + ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) { + if (s) + window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); + }); + } else + ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number); + } + }); + + // Register buttons + ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'}); + }, + + getInfo : function() { + return { + longname : 'IESpell (IE Only)', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin.js new file mode 100644 index 0000000..8bb96f9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin.js @@ -0,0 +1 @@ +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","
        "));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 0000000..67123ca --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/editor_plugin_src.js @@ -0,0 +1,699 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is; + + tinymce.create('tinymce.plugins.InlinePopups', { + init : function(ed, url) { + // Replace window manager + ed.onBeforeRenderUI.add(function() { + ed.windowManager = new tinymce.InlineWindowManager(ed); + DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css"); + }); + }, + + getInfo : function() { + return { + longname : 'InlinePopups', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', { + InlineWindowManager : function(ed) { + var t = this; + + t.parent(ed); + t.zIndex = 300000; + t.count = 0; + t.windows = {}; + }, + + open : function(f, p) { + var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + parentWindow = t._frontWindow(); + if (parentWindow && DOM.get(parentWindow.id + '_ifr')) { + parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement; + } + + // Only store selection if the type is a normal window + if (!f.type) + t.bookmark = ed.selection.getBookmark(1); + + id = DOM.uniqueId(); + vp = DOM.getViewPort(); + f.width = parseInt(f.width || 320); + f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); + f.min_width = parseInt(f.min_width || 150); + f.min_height = parseInt(f.min_height || 100); + f.max_width = parseInt(f.max_width || 2000); + f.max_height = parseInt(f.max_height || 2000); + f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0))); + f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0))); + f.movable = f.resizable = true; + p.mce_width = f.width; + p.mce_height = f.height; + p.mce_inline = true; + p.mce_window_id = id; + p.mce_auto_focus = f.auto_focus; + + // Transpose +// po = DOM.getPos(ed.getContainer()); +// f.left -= po.x; +// f.top -= po.y; + + t.features = f; + t.params = p; + t.onOpen.dispatch(t, f, p); + + if (f.type) { + opt += ' mceModal'; + + if (f.type) + opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1); + + f.resizable = false; + } + + if (f.statusbar) + opt += ' mceStatusbar'; + + if (f.resizable) + opt += ' mceResizable'; + + if (f.minimizable) + opt += ' mceMinimizable'; + + if (f.maximizable) + opt += ' mceMaximizable'; + + if (f.movable) + opt += ' mceMovable'; + + // Create DOM objects + t._addAll(DOM.doc.body, + ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, + ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, + ['div', {id : id + '_top', 'class' : 'mceTop'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_title'}, f.title || ''] + ], + + ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, + ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}] + ], + + ['div', {id : id + '_bottom', 'class' : 'mceBottom'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_status'}, 'Content'] + ], + + ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}], + ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}] + ] + ] + ); + + DOM.setStyles(id, {top : -10000, left : -10000}); + + // Fix gecko rendering bug, where the editors iframe messed with window contents + if (tinymce.isGecko) + DOM.setStyle(id, 'overflow', 'auto'); + + // Measure borders + if (!f.type) { + dw += DOM.get(id + '_left').clientWidth; + dw += DOM.get(id + '_right').clientWidth; + dh += DOM.get(id + '_top').clientHeight; + dh += DOM.get(id + '_bottom').clientHeight; + } + + // Resize window + DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh}); + + u = f.url || f.file; + if (u) { + if (tinymce.relaxedDomain) + u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; + + u = tinymce._addVer(u); + } + + if (!f.type) { + DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'}); + DOM.setStyles(id + '_ifr', {width : f.width, height : f.height}); + DOM.setAttrib(id + '_ifr', 'src', u); + } else { + DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok'); + + if (f.type == 'confirm') + DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel'); + + DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); + DOM.setHTML(id + '_content', f.content.replace('\n', '
        ')); + + Event.add(id, 'keyup', function(evt) { + var VK_ESCAPE = 27; + if (evt.keyCode === VK_ESCAPE) { + f.button_func(false); + return Event.cancel(evt); + } + }); + + Event.add(id, 'keydown', function(evt) { + var cancelButton, VK_TAB = 9; + if (evt.keyCode === VK_TAB) { + cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0]; + if (cancelButton && cancelButton !== evt.target) { + cancelButton.focus(); + } else { + DOM.get(id + '_ok').focus(); + } + return Event.cancel(evt); + } + }); + } + + // Register events + mdf = Event.add(id, 'mousedown', function(e) { + var n = e.target, w, vp; + + w = t.windows[id]; + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + if (n.className == 'mceClose') { + t.close(null, id); + return Event.cancel(e); + } else if (n.className == 'mceMax') { + w.oldPos = w.element.getXY(); + w.oldSize = w.element.getSize(); + + vp = DOM.getViewPort(); + + // Reduce viewport size to avoid scrollbars + vp.w -= 2; + vp.h -= 2; + + w.element.moveTo(vp.x, vp.y); + w.element.resizeTo(vp.w, vp.h); + DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); + DOM.addClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMed') { + // Reset to old size + w.element.moveTo(w.oldPos.x, w.oldPos.y); + w.element.resizeTo(w.oldSize.w, w.oldSize.h); + w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); + + DOM.removeClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMove') + return t._startDrag(id, e, n.className); + else if (DOM.hasClass(n, 'mceResize')) + return t._startDrag(id, e, n.className.substring(13)); + } + }); + + clf = Event.add(id, 'click', function(e) { + var n = e.target; + + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + switch (n.className) { + case 'mceClose': + t.close(null, id); + return Event.cancel(e); + + case 'mceButton mceOk': + case 'mceButton mceCancel': + f.button_func(n.className == 'mceButton mceOk'); + return Event.cancel(e); + } + } + }); + + // Make sure the tab order loops within the dialog. + Event.add([id + '_left', id + '_right'], 'focus', function(evt) { + var iframe = DOM.get(id + '_ifr'); + if (iframe) { + var body = iframe.contentWindow.document.body; + var focusable = DOM.select(':input:enabled,*[tabindex=0]', body); + if (evt.target.id === (id + '_left')) { + focusable[focusable.length - 1].focus(); + } else { + focusable[0].focus(); + } + } else { + DOM.get(id + '_ok').focus(); + } + }); + + // Add window + w = t.windows[id] = { + id : id, + mousedown_func : mdf, + click_func : clf, + element : new Element(id, {blocker : 1, container : ed.getContainer()}), + iframeElement : new Element(id + '_ifr'), + features : f, + deltaWidth : dw, + deltaHeight : dh + }; + + w.iframeElement.on('focus', function() { + t.focus(id); + }); + + // Setup blocker + if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') { + DOM.add(DOM.doc.body, 'div', { + id : 'mceModalBlocker', + 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker', + style : {zIndex : t.zIndex - 1} + }); + + DOM.show('mceModalBlocker'); // Reduces flicker in IE + DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true'); + } else + DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); + + if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) + DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); + + DOM.setAttrib(id, 'aria-hidden', 'false'); + t.focus(id); + t._fixIELayout(id, 1); + + // Focus ok button + if (DOM.get(id + '_ok')) + DOM.get(id + '_ok').focus(); + t.count++; + + return w; + }, + + focus : function(id) { + var t = this, w; + + if (w = t.windows[id]) { + w.zIndex = this.zIndex++; + w.element.setStyle('zIndex', w.zIndex); + w.element.update(); + + id = id + '_wrapper'; + DOM.removeClass(t.lastId, 'mceFocus'); + DOM.addClass(id, 'mceFocus'); + t.lastId = id; + + if (w.focussedElement) { + w.focussedElement.focus(); + } else if (DOM.get(id + '_ok')) { + DOM.get(w.id + '_ok').focus(); + } else if (DOM.get(w.id + '_ifr')) { + DOM.get(w.id + '_ifr').focus(); + } + } + }, + + _addAll : function(te, ne) { + var i, n, t = this, dom = tinymce.DOM; + + if (is(ne, 'string')) + te.appendChild(dom.doc.createTextNode(ne)); + else if (ne.length) { + te = te.appendChild(dom.create(ne[0], ne[1])); + + for (i=2; i ix) { + fw = w; + ix = w.zIndex; + } + }); + return fw; + }, + + setTitle : function(w, ti) { + var e; + + w = this._findId(w); + + if (e = DOM.get(w + '_title')) + e.innerHTML = DOM.encode(ti); + }, + + alert : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'alert', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + confirm : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'confirm', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + // Internal functions + + _findId : function(w) { + var t = this; + + if (typeof(w) == 'string') + return w; + + each(t.windows, function(wo) { + var ifr = DOM.get(wo.id + '_ifr'); + + if (ifr && w == ifr.contentWindow) { + w = wo.id; + return false; + } + }); + + return w; + }, + + _fixIELayout : function(id, s) { + var w, img; + + if (!tinymce.isIE6) + return; + + // Fixes the bug where hover flickers and does odd things in IE6 + each(['n','s','w','e','nw','ne','sw','se'], function(v) { + var e = DOM.get(id + '_resize_' + v); + + DOM.setStyles(e, { + width : s ? e.clientWidth : '', + height : s ? e.clientHeight : '', + cursor : DOM.getStyle(e, 'cursor', 1) + }); + + DOM.setStyle(id + "_bottom", 'bottom', '-1px'); + + e = 0; + }); + + // Fixes graphics glitch + if (w = this.windows[id]) { + // Fixes rendering bug after resize + w.element.hide(); + w.element.show(); + + // Forced a repaint of the window + //DOM.get(id).style.filter = ''; + + // IE has a bug where images used in CSS won't get loaded + // sometimes when the cache in the browser is disabled + // This fix tries to solve it by loading the images using the image object + each(DOM.select('div,a', id), function(e, i) { + if (e.currentStyle.backgroundImage != 'none') { + img = new Image(); + img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1'); + } + }); + + DOM.get(id).style.filter = ''; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups); +})(); + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif new file mode 100644 index 0000000..2191398 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/button.gif new file mode 100644 index 0000000..f957e49 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/button.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif new file mode 100644 index 0000000..6baf64a Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif new file mode 100644 index 0000000..20acbbf Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif new file mode 100644 index 0000000..d5de1cc Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif new file mode 100644 index 0000000..c2a2ad4 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif new file mode 100644 index 0000000..0b4cc36 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css new file mode 100644 index 0000000..a50d4fc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css @@ -0,0 +1,90 @@ +/* Clearlooks 2 */ + +/* Reset */ +.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block} + +/* General */ +.clearlooks2 {position:absolute; direction:ltr} +.clearlooks2 .mceWrapper {position:static} +.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%} +.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)} +.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none} + +/* Top */ +.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px} +.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)} +.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)} +.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0} +.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold} +.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0} +.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px} +.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0} +.clearlooks2 .mceFocus .mceTop span {color:#FFF} + +/* Middle */ +.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0} +.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)} +.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0} +.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF} +.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)} + +/* Bottom */ +.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px} +.clearlooks2 .mceBottom {left:0; bottom:0; width:100%} +.clearlooks2 .mceBottom div {top:0} +.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px} +.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px} +.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0} +.clearlooks2 .mceBottom span {display:none} +.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px} +.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0} +.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px} +.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0} +.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px} + +/* Actions */ +.clearlooks2 a {width:29px; height:16px; top:3px;} +.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0} +.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0} +.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0} +.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0} +.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px} +.clearlooks2 .mceMovable .mceMove {display:block} +.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px} +.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px} +.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px} +.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px} +.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px} +.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px} + +/* Resize */ +.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px} +.clearlooks2 .mceResizable .mceResize {display:block} +.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none} +.clearlooks2 .mceMinimizable .mceMin {display:block} +.clearlooks2 .mceMaximizable .mceMax {display:block} +.clearlooks2 .mceMaximized .mceMed {display:block} +.clearlooks2 .mceMaximized .mceMax {display:none} +.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize} +.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize} +.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize} +.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;} +.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize} +.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize} +.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize} +.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize} + +/* Alert/Confirm */ +.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0} +.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px} +.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal} +.clearlooks2 a:hover {font-weight:bold;} +.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5} +.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px} +.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)} +.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px} +.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto} +.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/template.htm b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/template.htm new file mode 100644 index 0000000..f9ec642 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/inlinepopups/template.htm @@ -0,0 +1,387 @@ + + + +Template for dialogs + + + + +
        +
        +
        +
        +
        +
        +
        + Blured +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Focused +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Statusbar +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Statusbar, Resizable +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Resizable, Maximizable +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Blurred, Maximizable, Statusbar, Resizable +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Maximized, Maximizable, Minimizable +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Blured +
        + +
        +
        + Content +
        +
        + +
        +
        +
        +
        + Statusbar text. +
        + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        +
        +
        + Alert +
        + +
        +
        + + 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. + +
        +
        +
        + +
        +
        +
        +
        +
        + + + Ok + +
        +
        + +
        +
        +
        +
        +
        +
        + Confirm +
        + +
        +
        + + 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. + +
        +
        +
        + +
        +
        +
        +
        +
        + + + Ok + Cancel + +
        +
        +
        + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/insertdatetime/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/insertdatetime/editor_plugin.js new file mode 100644 index 0000000..938ce6b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/insertdatetime/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;gh[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/layer/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/layer/editor_plugin_src.js new file mode 100644 index 0000000..daed280 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/layer/editor_plugin_src.js @@ -0,0 +1,262 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + function findParentLayer(node) { + do { + if (node.className && node.className.indexOf('mceItemLayer') != -1) { + return node; + } + } while (node = node.parentNode); + }; + + tinymce.create('tinymce.plugins.Layer', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceInsertLayer', t._insertLayer, t); + + ed.addCommand('mceMoveForward', function() { + t._move(1); + }); + + ed.addCommand('mceMoveBackward', function() { + t._move(-1); + }); + + ed.addCommand('mceMakeAbsolute', function() { + t._toggleAbsolute(); + }); + + // Register buttons + ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); + ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); + ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); + ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); + + ed.onInit.add(function() { + var dom = ed.dom; + + if (tinymce.isIE) + ed.getDoc().execCommand('2D-Position', false, true); + }); + + // Remove serialized styles when selecting a layer since it might be changed by a drag operation + ed.onMouseUp.add(function(ed, e) { + var layer = findParentLayer(e.target); + + if (layer) { + ed.dom.setAttrib(layer, 'data-mce-style', ''); + } + }); + + // Fixes edit focus issues with layers on Gecko + // This will enable designMode while inside a layer and disable it when outside + ed.onMouseDown.add(function(ed, e) { + var node = e.target, doc = ed.getDoc(), parent; + + if (tinymce.isGecko) { + if (findParentLayer(node)) { + if (doc.designMode !== 'on') { + doc.designMode = 'on'; + + // Repaint caret + node = doc.body; + parent = node.parentNode; + parent.removeChild(node); + parent.appendChild(node); + } + } else if (doc.designMode == 'on') { + doc.designMode = 'off'; + } + } + }); + + ed.onNodeChange.add(t._nodeChange, t); + ed.onVisualAid.add(t._visualAid, t); + }, + + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var le, p; + + le = this._getParentLayer(n); + p = ed.dom.getParent(n, 'DIV,P,IMG'); + + if (!p) { + cm.setDisabled('absolute', 1); + cm.setDisabled('moveforward', 1); + cm.setDisabled('movebackward', 1); + } else { + cm.setDisabled('absolute', 0); + cm.setDisabled('moveforward', !le); + cm.setDisabled('movebackward', !le); + cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); + } + }, + + // Private methods + + _visualAid : function(ed, e, s) { + var dom = ed.dom; + + tinymce.each(dom.select('div,p', e), function(e) { + if (/^(absolute|relative|fixed)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceItemVisualAid'); + else + dom.removeClass(e, 'mceItemVisualAid'); + + dom.addClass(e, 'mceItemLayer'); + } + }); + }, + + _move : function(d) { + var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; + + nl = []; + tinymce.walk(ed.getBody(), function(n) { + if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) + nl.push(n); + }, 'childNodes'); + + // Find z-indexes + for (i=0; i -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else { + if (z[ci] > 0) + nl[ci].style.zIndex = z[ci] - 1; + } + } else { + // Move forward + + // Try find a higher one + for (i=0; i z[ci]) { + fi = i; + break; + } + } + + if (fi > -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else + nl[ci].style.zIndex = z[ci] + 1; + } + + ed.execCommand('mceRepaint'); + }, + + _getParentLayer : function(n) { + return this.editor.dom.getParent(n, function(n) { + return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); + }); + }, + + _insertLayer : function() { + var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody(); + + ed.dom.add(body, 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceItemVisualAid mceItemLayer' + }, ed.selection.getContent() || ed.getLang('layer.content')); + + // Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7 + if (tinymce.isIE) + dom.setHTML(body, body.innerHTML); + }, + + _toggleAbsolute : function() { + var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); + + if (!le) + le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); + + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + ed.dom.setStyles(le, { + position : '', + left : '', + top : '', + width : '', + height : '' + }); + + ed.dom.removeClass(le, 'mceItemVisualAid'); + ed.dom.removeClass(le, 'mceItemLayer'); + } else { + if (le.style.left == "") + le.style.left = 20 + 'px'; + + if (le.style.top == "") + le.style.top = 20 + 'px'; + + if (le.style.width == "") + le.style.width = le.width ? (le.width + 'px') : '100px'; + + if (le.style.height == "") + le.style.height = le.height ? (le.height + 'px') : '100px'; + + le.style.position = "absolute"; + + ed.dom.setAttrib(le, 'data-mce-style', ''); + ed.addVisual(ed.getBody()); + } + + ed.execCommand('mceRepaint'); + ed.nodeChanged(); + } + } + }); + + // Register plugin + tinymce.PluginManager.add('layer', tinymce.plugins.Layer); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin.js new file mode 100644 index 0000000..2ed5f41 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin.js @@ -0,0 +1 @@ +(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin_src.js new file mode 100644 index 0000000..3cdcde5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/legacyoutput/editor_plugin_src.js @@ -0,0 +1,139 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + * + * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align + * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash + * + * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are + * not apart of the newer specifications for HTML and XHTML. + */ + +(function(tinymce) { + // Override inline_styles setting to force TinyMCE to produce deprecated contents + tinymce.onAddEditor.addToTop(function(tinymce, editor) { + editor.settings.inline_styles = false; + }); + + // Create the legacy ouput plugin + tinymce.create('tinymce.plugins.LegacyOutput', { + init : function(editor) { + editor.onInit.add(function() { + var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', + fontSizes = tinymce.explode(editor.settings.font_size_style_values), + schema = editor.schema; + + // Override some internal formats to produce legacy elements and attributes + editor.formatter.register({ + // Change alignment formats to use the deprecated align attribute + alignleft : {selector : alignElements, attributes : {align : 'left'}}, + aligncenter : {selector : alignElements, attributes : {align : 'center'}}, + alignright : {selector : alignElements, attributes : {align : 'right'}}, + alignfull : {selector : alignElements, attributes : {align : 'justify'}}, + + // Change the basic formatting elements to use deprecated element types + bold : [ + {inline : 'b', remove : 'all'}, + {inline : 'strong', remove : 'all'}, + {inline : 'span', styles : {fontWeight : 'bold'}} + ], + italic : [ + {inline : 'i', remove : 'all'}, + {inline : 'em', remove : 'all'}, + {inline : 'span', styles : {fontStyle : 'italic'}} + ], + underline : [ + {inline : 'u', remove : 'all'}, + {inline : 'span', styles : {textDecoration : 'underline'}, exact : true} + ], + strikethrough : [ + {inline : 'strike', remove : 'all'}, + {inline : 'span', styles : {textDecoration: 'line-through'}, exact : true} + ], + + // Change font size and font family to use the deprecated font element + fontname : {inline : 'font', attributes : {face : '%value'}}, + fontsize : { + inline : 'font', + attributes : { + size : function(vars) { + return tinymce.inArray(fontSizes, vars.value) + 1; + } + } + }, + + // Setup font elements for colors as well + forecolor : {inline : 'font', attributes : {color : '%value'}}, + hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} + }); + + // Check that deprecated elements are allowed if not add them + tinymce.each('b,i,u,strike'.split(','), function(name) { + schema.addValidElements(name + '[*]'); + }); + + // Add font element if it's missing + if (!schema.getElementRule("font")) + schema.addValidElements("font[face|size|color|style]"); + + // Add the missing and depreacted align attribute for the serialization engine + tinymce.each(alignElements.split(','), function(name) { + var rule = schema.getElementRule(name), found; + + if (rule) { + if (!rule.attributes.align) { + rule.attributes.align = {}; + rule.attributesOrder.push('align'); + } + } + }); + + // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes + editor.onNodeChange.add(function(editor, control_manager) { + var control, fontElm, fontName, fontSize; + + // Find font element get it's name and size + fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); + if (fontElm) { + fontName = fontElm.face; + fontSize = fontElm.size; + } + + // Select/unselect the font name in droplist + if (control = control_manager.get('fontselect')) { + control.select(function(value) { + return value == fontName; + }); + } + + // Select/unselect the font size in droplist + if (control = control_manager.get('fontsizeselect')) { + control.select(function(value) { + var index = tinymce.inArray(fontSizes, value.fontSize); + + return index + 1 == fontSize; + }); + } + }); + }); + }, + + getInfo : function() { + return { + longname : 'LegacyOutput', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); +})(tinymce); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin.js new file mode 100644 index 0000000..ec21b25 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin.js @@ -0,0 +1 @@ +(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var J="ESCAPE";var z="PARAGRAPH";var N="UNKNOWN";var x=N;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function M(U){if(E(U)){return v}else{if(A(U)&&w()){return N}else{if(A(U)&&F()){return s}else{return N}}}}function D(U,V){if(x==v||x==s||tinymce.isGecko&&x==J){r.cancel(V)}}function C(){var U=y.selection.getRng(true);var V=U.startContainer;if(V.nodeType==3){var W=V.nodeValue;if(tinymce.isIE9&&W.length>1&&W.charCodeAt(W.length-1)==32){return(U.endOffset==W.length-1)}else{return(U.endOffset==W.length)}}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function I(){var W=y.selection.getNode();var V="h1,h2,h3,h4,h5,h6,p,div";var U=y.dom.is(W,V)&&W.parentNode.tagName==="LI"&&W.parentNode.lastChild===W;return y.selection.isCollapsed()&&U&&C()}function K(W,Y){if(A(Y)&&I()){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinymce.isIE6||tinymce.isIE7||tinyMCE.isIE8){W.selection.setCursorLocation(V,1)}else{W.selection.setCursorLocation(V,0)}Y.preventDefault()}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=N;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==J){if(tinymce.isIE6||tinymce.isIE7||tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function L(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){L(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;L(U,W)}}}function Q(W,aa){function X(ab){var ad=[];var ae=new tinymce.dom.TreeWalker(ab.firstChild,ab);for(var ac=ae.current();ac;ac=ae.next()){if(W.dom.is(ac,"ol,ul,li")){ad.push(ac)}}return ad}if(aa.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Z=W.dom.getParent(U,"ol,ul"),V=W.selection.getRng();if(Z&&Z.firstChild===U&&V.startOffset==0){var Y=X(U);Y.unshift(U);W.execCommand("Outdent",false,Y);W.undoManager.add();return r.cancel(aa)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=M(V)});y.onKeyDown.add(D);y.onKeyDown.add(u);y.onKeyDown.add(K);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='
        '}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks(),processEvenIfEmpty:true}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||!y.processEvenIfEmpty&&E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x,true)}function C(s,t){return t>=0&&s.hasChildNodes()&&t0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed,t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}()); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin_src.js new file mode 100644 index 0000000..1000ef7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/lists/editor_plugin_src.js @@ -0,0 +1,955 @@ +/** + * editor_plugin_src.js + * + * Copyright 2011, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each, Event = tinymce.dom.Event, bookmark; + + // Skips text nodes that only contain whitespace since they aren't semantically important. + function skipWhitespaceNodes(e, next) { + while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) { + e = next(e); + } + return e; + } + + function skipWhitespaceNodesBackwards(e) { + return skipWhitespaceNodes(e, function(e) { + return e.previousSibling; + }); + } + + function skipWhitespaceNodesForwards(e) { + return skipWhitespaceNodes(e, function(e) { + return e.nextSibling; + }); + } + + function hasParentInList(ed, e, list) { + return ed.dom.getParent(e, function(p) { + return tinymce.inArray(list, p) !== -1; + }); + } + + function isList(e) { + return e && (e.tagName === 'OL' || e.tagName === 'UL'); + } + + function splitNestedLists(element, dom) { + var tmp, nested, wrapItem; + tmp = skipWhitespaceNodesBackwards(element.lastChild); + while (isList(tmp)) { + nested = tmp; + tmp = skipWhitespaceNodesBackwards(nested.previousSibling); + } + if (nested) { + wrapItem = dom.create('li', { style: 'list-style-type: none;'}); + dom.split(element, nested); + dom.insertAfter(wrapItem, nested); + wrapItem.appendChild(nested); + wrapItem.appendChild(nested); + element = wrapItem.previousSibling; + } + return element; + } + + function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) { + e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs); + return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs); + } + + function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) { + var prev = skipWhitespaceNodesBackwards(e.previousSibling); + if (prev) { + return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs); + } else { + return e; + } + } + + function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) { + var next = skipWhitespaceNodesForwards(e.nextSibling); + if (next) { + return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs); + } else { + return e; + } + } + + function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) { + if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) { + return merge(e1, e2, differentStylesMasterElement); + } else if (e1 && e1.tagName === 'LI' && isList(e2)) { + // Fix invalidly nested lists. + e1.appendChild(e2); + } + return e2; + } + + function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) { + if (!e1 || !e2) { + return false; + } else if (e1.tagName === 'LI' && e2.tagName === 'LI') { + return e2.style.listStyleType === 'none' || containsOnlyAList(e2); + } else if (isList(e1)) { + return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2); + } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P'; + } + + function isListForIndent(e) { + var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild); + return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI)); + } + + function containsOnlyAList(e) { + var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild); + return firstChild && lastChild && firstChild === lastChild && isList(firstChild); + } + + function merge(e1, e2, masterElement) { + var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild); + if (e1.tagName === 'P') { + e1.appendChild(e1.ownerDocument.createElement('br')); + } + while (e2.firstChild) { + e1.appendChild(e2.firstChild); + } + if (masterElement) { + e1.style.listStyleType = masterElement.style.listStyleType; + } + e2.parentNode.removeChild(e2); + attemptMerge(lastOriginal, firstNew, false); + return e1; + } + + function findItemToOperateOn(e, dom) { + var item; + if (!dom.is(e, 'li,ol,ul')) { + item = dom.getParent(e, 'li'); + if (item) { + e = item; + } + } + return e; + } + + tinymce.create('tinymce.plugins.Lists', { + init: function(ed) { + var LIST_TABBING = 'TABBING'; + var LIST_EMPTY_ITEM = 'EMPTY'; + var LIST_ESCAPE = 'ESCAPE'; + var LIST_PARAGRAPH = 'PARAGRAPH'; + var LIST_UNKNOWN = 'UNKNOWN'; + var state = LIST_UNKNOWN; + + function isTabInList(e) { + // Don't indent on Ctrl+Tab or Alt+Tab + return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) && + (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList')); + } + + function isOnLastListItem() { + var li = getLi(); + var grandParent = li.parentNode.parentNode; + var isLastItem = li.parentNode.lastChild === li; + return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li); + } + + function isNestedList(grandParent) { + if (isList(grandParent)) { + return grandParent.parentNode && grandParent.parentNode.tagName === 'LI'; + } else { + return grandParent.tagName === 'LI'; + } + } + + function isInEmptyListItem() { + return ed.selection.isCollapsed() && isEmptyListItem(getLi()); + } + + function getLi() { + var n = ed.selection.getStart(); + // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position + return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n; + } + + function isEmptyListItem(li) { + var numChildren = li.childNodes.length; + if (li.tagName === 'LI') { + return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li)); + } + return false; + } + + function isEmptyIE9Li(li) { + // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these + var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'}); + var isLastLi = li == lis[lis.length - 1]; + var child = li.firstChild; + return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32)); + } + + function isEnter(e) { + return e.keyCode === tinymce.VK.ENTER; + } + + function isEnterWithoutShift(e) { + return isEnter(e) && !e.shiftKey; + } + + function getListKeyState(e) { + if (isTabInList(e)) { + return LIST_TABBING; + } else if (isEnterWithoutShift(e) && isOnLastListItem()) { + // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now + //return LIST_ESCAPE; + return LIST_UNKNOWN; + } else if (isEnterWithoutShift(e) && isInEmptyListItem()) { + return LIST_EMPTY_ITEM; + } else { + return LIST_UNKNOWN; + } + } + + function cancelDefaultEvents(ed, e) { + // list escape is done manually using outdent as it does not create paragraphs correctly in td's + if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) { + Event.cancel(e); + } + } + + function isCursorAtEndOfContainer() { + var range = ed.selection.getRng(true); + var startContainer = range.startContainer; + if (startContainer.nodeType == 3) { + var value = startContainer.nodeValue; + if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) { + // IE9 places a space on the end of the text in some cases so ignore last char + return (range.endOffset == value.length-1); + } else { + return (range.endOffset == value.length); + } + } else if (startContainer.nodeType == 1) { + return range.endOffset == startContainer.childNodes.length; + } + return false; + } + + /* + If we are at the end of a list item surrounded with an element, pressing enter should create a + new list item instead without splitting the element e.g. don't want to create new P or H1 tag + */ + function isEndOfListItem() { + var node = ed.selection.getNode(); + var validElements = 'h1,h2,h3,h4,h5,h6,p,div'; + var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node; + return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer(); + } + + // Creates a new list item after the current selection's list item parent + function createNewLi(ed, e) { + if (isEnterWithoutShift(e) && isEndOfListItem()) { + var node = ed.selection.getNode(); + var li = ed.dom.create("li"); + var parentLi = ed.dom.getParent(node, 'li'); + ed.dom.insertAfter(li, parentLi); + + // Move caret to new list element. + if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) { + // Removed this line since it would create an odd < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic + //li.appendChild(ed.dom.create(" ")); // IE needs an element within the bullet point + ed.selection.setCursorLocation(li, 1); + } else { + ed.selection.setCursorLocation(li, 0); + } + e.preventDefault(); + } + } + + function imageJoiningListItem(ed, e) { + var prevSibling; + + if (!tinymce.isGecko) + return; + + var n = ed.selection.getStart(); + if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG') + return; + + function lastLI(node) { + var child = node.firstChild; + var li = null; + do { + if (!child) + break; + + if (child.tagName === 'LI') + li = child; + } while (child = child.nextSibling); + + return li; + } + + function addChildren(parentNode, destination) { + while (parentNode.childNodes.length > 0) + destination.appendChild(parentNode.childNodes[0]); + } + + // Check if there is a previous sibling + prevSibling = n.parentNode.previousSibling; + if (!prevSibling) + return; + + var ul; + if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL') + ul = prevSibling; + else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL')) + ul = prevSibling.previousSibling; + else + return; + + var li = lastLI(ul); + + // move the caret to the end of the list item + var rng = ed.dom.createRng(); + rng.setStart(li, 1); + rng.setEnd(li, 1); + ed.selection.setRng(rng); + ed.selection.collapse(true); + + // save a bookmark at the end of the list item + var bookmark = ed.selection.getBookmark(); + + // copy the image an its text to the list item + var clone = n.parentNode.cloneNode(true); + if (clone.tagName === 'P' || clone.tagName === 'DIV') + addChildren(clone, li); + else + li.appendChild(clone); + + // remove the old copy of the image + n.parentNode.parentNode.removeChild(n.parentNode); + + // move the caret where we saved the bookmark + ed.selection.moveToBookmark(bookmark); + } + + // fix the cursor position to ensure it is correct in IE + function setCursorPositionToOriginalLi(li) { + var list = ed.dom.getParent(li, 'ol,ul'); + if (list != null) { + var lastLi = list.lastChild; + // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic + //lastLi.appendChild(ed.getDoc().createElement('')); + ed.selection.setCursorLocation(lastLi, 0); + } + } + + this.ed = ed; + ed.addCommand('Indent', this.indent, this); + ed.addCommand('Outdent', this.outdent, this); + ed.addCommand('InsertUnorderedList', function() { + this.applyList('UL', 'OL'); + }, this); + ed.addCommand('InsertOrderedList', function() { + this.applyList('OL', 'UL'); + }, this); + + ed.onInit.add(function() { + ed.editorCommands.addCommands({ + 'outdent': function() { + var sel = ed.selection, dom = ed.dom; + + function hasStyleIndent(n) { + n = dom.getParent(n, dom.isBlock); + return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0; + } + + return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList'); + } + }, 'state'); + }); + + ed.onKeyUp.add(function(ed, e) { + if (state == LIST_TABBING) { + ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null); + state = LIST_UNKNOWN; + return Event.cancel(e); + } else if (state == LIST_EMPTY_ITEM) { + var li = getLi(); + var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey; + ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null); + if (tinymce.isIE) { + setCursorPositionToOriginalLi(li); + } + + return Event.cancel(e); + } else if (state == LIST_ESCAPE) { + if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) { + // append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting. + // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after + // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag. + var n = ed.getDoc().createTextNode('\uFEFF'); + ed.selection.getNode().appendChild(n); + } else if (tinymce.isIE9 || tinymce.isGecko) { + // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour + // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves + ed.execCommand('Outdent'); + return Event.cancel(e); + } + } + }); + + function fixListItem(parent, reference) { + // a zero-sized non-breaking space is placed in the empty list item so that the nested list is + // displayed on the below line instead of next to it + var n = ed.getDoc().createTextNode('\uFEFF'); + parent.insertBefore(n, reference); + ed.selection.setCursorLocation(n, 0); + // repaint to remove rendering artifact. only visible when creating new list + ed.execCommand('mceRepaint'); + } + + function fixIndentedListItemForGecko(ed, e) { + if (isEnter(e)) { + var li = getLi(); + if (li) { + var parent = li.parentNode; + var grandParent = parent && parent.parentNode; + if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) { + fixListItem(grandParent, parent); + } + } + } + } + + function fixIndentedListItemForIE8(ed, e) { + if (isEnter(e)) { + var li = getLi(); + if (ed.dom.select('ul li', li).length === 1) { + var list = li.firstChild; + fixListItem(li, list); + } + } + } + + function fixDeletingFirstCharOfList(ed, e) { + function listElements(li) { + var elements = []; + var walker = new tinymce.dom.TreeWalker(li.firstChild, li); + for (var node = walker.current(); node; node = walker.next()) { + if (ed.dom.is(node, 'ol,ul,li')) { + elements.push(node); + } + } + return elements; + } + + if (e.keyCode == tinymce.VK.BACKSPACE) { + var li = getLi(); + if (li) { + var list = ed.dom.getParent(li, 'ol,ul'), + rng = ed.selection.getRng(); + if (list && list.firstChild === li && rng.startOffset == 0) { + var elements = listElements(li); + elements.unshift(li); + ed.execCommand("Outdent", false, elements); + ed.undoManager.add(); + return Event.cancel(e); + } + } + } + } + + function fixDeletingEmptyLiInWebkit(ed, e) { + var li = getLi(); + if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) { + if (ed.dom.select('ul,ol', li).length === 1) { + var prevLi = li.previousSibling; + ed.dom.remove(ed.dom.select('br', li)); + ed.dom.remove(li, true); + var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 }); + if (textNodes.length === 1) { + var textNode = textNodes[0]; + ed.selection.setCursorLocation(textNode, textNode.length); + } + ed.undoManager.add(); + return Event.cancel(e); + } + } + } + + ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); }); + ed.onKeyDown.add(cancelDefaultEvents); + ed.onKeyDown.add(imageJoiningListItem); + ed.onKeyDown.add(createNewLi); + + if (tinymce.isGecko) { + ed.onKeyUp.add(fixIndentedListItemForGecko); + } + if (tinymce.isIE8) { + ed.onKeyUp.add(fixIndentedListItemForIE8); + } + if (tinymce.isGecko || tinymce.isWebKit) { + ed.onKeyDown.add(fixDeletingFirstCharOfList); + } + if (tinymce.isWebKit) { + ed.onKeyDown.add(fixDeletingEmptyLiInWebkit); + } + }, + + applyList: function(targetListType, oppositeListType) { + var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions, + selectedBlocks = ed.selection.getSelectedBlocks(); + + function cleanupBr(e) { + if (e && e.tagName === 'BR') { + dom.remove(e); + } + } + + function makeList(element) { + var list = dom.create(targetListType), li; + + function adjustIndentForNewList(element) { + // If there's a margin-left, outdent one level to account for the extra list margin. + if (element.style.marginLeft || element.style.paddingLeft) { + t.adjustPaddingFunction(false)(element); + } + } + + if (element.tagName === 'LI') { + // No change required. + } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') { + processBrs(element, function(startSection, br) { + doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode); + li = startSection.parentNode; + adjustIndentForNewList(li); + cleanupBr(br); + }); + if (li) { + if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) { + dom.split(li.parentNode.parentNode, li.parentNode); + } + attemptMergeWithAdjacent(li.parentNode, true); + } + return; + } else { + // Put the list around the element. + li = dom.create('li'); + dom.insertAfter(li, element); + li.appendChild(element); + adjustIndentForNewList(element); + element = li; + } + dom.insertAfter(list, element); + list.appendChild(element); + attemptMergeWithAdjacent(list, true); + applied.push(element); + } + + function doWrapList(start, end, template) { + var li, n = start, tmp; + while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) { + start = dom.split(start.parentNode, start.previousSibling); + start = start.nextSibling; + n = start; + } + if (template) { + li = template.cloneNode(true); + start.parentNode.insertBefore(li, start); + while (li.firstChild) dom.remove(li.firstChild); + li = dom.rename(li, 'li'); + } else { + li = dom.create('li'); + start.parentNode.insertBefore(li, start); + } + while (n && n != end) { + tmp = n.nextSibling; + li.appendChild(n); + n = tmp; + } + if (li.childNodes.length === 0) { + li.innerHTML = '
        '; + } + makeList(li); + } + + function processBrs(element, callback) { + var startSection, previousBR, END_TO_START = 3, START_TO_END = 1, + breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl'; + + function isAnyPartSelected(start, end) { + var r = dom.createRng(), sel; + bookmark.keep = true; + ed.selection.moveToBookmark(bookmark); + bookmark.keep = false; + sel = ed.selection.getRng(true); + if (!end) { + end = start.parentNode.lastChild; + } + r.setStartBefore(start); + r.setEndAfter(end); + return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0); + } + + function nextLeaf(br) { + if (br.nextSibling) + return br.nextSibling; + if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot()) + return nextLeaf(br.parentNode); + } + + // Split on BRs within the range and process those. + startSection = element.firstChild; + // First mark the BRs that have any part of the previous section selected. + var trailingContentSelected = false; + each(dom.select(breakElements, element), function(br) { + if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { + return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. + } + if (isAnyPartSelected(startSection, br)) { + dom.addClass(br, '_mce_tagged_br'); + startSection = nextLeaf(br); + } + }); + trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined)); + startSection = element.firstChild; + each(dom.select(breakElements, element), function(br) { + // Got a section from start to br. + var tmp = nextLeaf(br); + if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { + return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. + } + if (dom.hasClass(br, '_mce_tagged_br')) { + callback(startSection, br, previousBR); + previousBR = null; + } else { + previousBR = br; + } + startSection = tmp; + }); + if (trailingContentSelected) { + callback(startSection, undefined, previousBR); + } + } + + function wrapList(element) { + processBrs(element, function(startSection, br, previousBR) { + // Need to indent this part + doWrapList(startSection, br); + cleanupBr(br); + cleanupBr(previousBR); + }); + } + + function changeList(element) { + if (tinymce.inArray(applied, element) !== -1) { + return; + } + if (element.parentNode.tagName === oppositeListType) { + dom.split(element.parentNode, element); + makeList(element); + attemptMergeWithNext(element.parentNode, false); + } + applied.push(element); + } + + function convertListItemToParagraph(element) { + var child, nextChild, mergedElement, splitLast; + if (tinymce.inArray(applied, element) !== -1) { + return; + } + element = splitNestedLists(element, dom); + while (dom.is(element.parentNode, 'ol,ul,li')) { + dom.split(element.parentNode, element); + } + // Push the original element we have from the selection, not the renamed one. + applied.push(element); + element = dom.rename(element, 'p'); + mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines); + if (mergedElement === element) { + // Now split out any block elements that can't be contained within a P. + // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each) + child = element.firstChild; + while (child) { + if (dom.isBlock(child)) { + child = dom.split(child.parentNode, child); + splitLast = true; + nextChild = child.nextSibling && child.nextSibling.firstChild; + } else { + nextChild = child.nextSibling; + if (splitLast && child.tagName === 'BR') { + dom.remove(child); + } + splitLast = false; + } + child = nextChild; + } + } + } + + each(selectedBlocks, function(e) { + e = findItemToOperateOn(e, dom); + if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) { + hasOppositeType = true; + } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) { + hasSameType = true; + } else { + hasNonList = true; + } + }); + + if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) { + actions = { + 'LI': changeList, + 'H1': makeList, + 'H2': makeList, + 'H3': makeList, + 'H4': makeList, + 'H5': makeList, + 'H6': makeList, + 'P': makeList, + 'BODY': makeList, + 'DIV': selectedBlocks.length > 1 ? makeList : wrapList, + defaultAction: wrapList, + elements: this.selectedBlocks() + }; + } else { + actions = { + defaultAction: convertListItemToParagraph, + elements: this.selectedBlocks(), + processEvenIfEmpty: true + }; + } + this.process(actions); + }, + + indent: function() { + var ed = this.ed, dom = ed.dom, indented = []; + + function createWrapItem(element) { + var wrapItem = dom.create('li', { style: 'list-style-type: none;'}); + dom.insertAfter(wrapItem, element); + return wrapItem; + } + + function createWrapList(element) { + var wrapItem = createWrapItem(element), + list = dom.getParent(element, 'ol,ul'), + listType = list.tagName, + listStyle = dom.getStyle(list, 'list-style-type'), + attrs = {}, + wrapList; + if (listStyle !== '') { + attrs.style = 'list-style-type: ' + listStyle + ';'; + } + wrapList = dom.create(listType, attrs); + wrapItem.appendChild(wrapList); + return wrapList; + } + + function indentLI(element) { + if (!hasParentInList(ed, element, indented)) { + element = splitNestedLists(element, dom); + var wrapList = createWrapList(element); + wrapList.appendChild(element); + attemptMergeWithAdjacent(wrapList.parentNode, false); + attemptMergeWithAdjacent(wrapList, false); + indented.push(element); + } + } + + this.process({ + 'LI': indentLI, + defaultAction: this.adjustPaddingFunction(true), + elements: this.selectedBlocks() + }); + + }, + + outdent: function(ui, elements) { + var t = this, ed = t.ed, dom = ed.dom, outdented = []; + + function outdentLI(element) { + var listElement, targetParent, align; + if (!hasParentInList(ed, element, outdented)) { + if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') { + return t.adjustPaddingFunction(false)(element); + } + align = dom.getStyle(element, 'text-align', true); + if (align === 'center' || align === 'right') { + dom.setStyle(element, 'text-align', 'left'); + return; + } + element = splitNestedLists(element, dom); + listElement = element.parentNode; + targetParent = element.parentNode.parentNode; + if (targetParent.tagName === 'P') { + dom.split(targetParent, element.parentNode); + } else { + dom.split(listElement, element); + if (targetParent.tagName === 'LI') { + // Nested list, need to split the LI and go back out to the OL/UL element. + dom.split(targetParent, element); + } else if (!dom.is(targetParent, 'ol,ul')) { + dom.rename(element, 'p'); + } + } + outdented.push(element); + } + } + + var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks(); + this.process({ + 'LI': outdentLI, + defaultAction: this.adjustPaddingFunction(false), + elements: listElements + }); + + each(outdented, attemptMergeWithAdjacent); + }, + + process: function(actions) { + var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r; + + function isEmptyElement(element) { + var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) { + return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark' + || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == '')); + }); + return excludeBrsAndBookmarks.length === 0; + } + + function processElement(element) { + dom.removeClass(element, '_mce_act_on'); + if (!element || element.nodeType !== 1 || ! actions.processEvenIfEmpty && selectedBlocks.length > 1 && isEmptyElement(element)) { + return; + } + element = findItemToOperateOn(element, dom); + var action = actions[element.tagName]; + if (!action) { + action = actions.defaultAction; + } + action(element); + } + + function recurse(element) { + t.splitSafeEach(element.childNodes, processElement, true); + } + + function brAtEdgeOfSelection(container, offset) { + return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length && + container.childNodes[offset].tagName === 'BR'; + } + + function isInTable() { + var n = sel.getNode(); + var p = dom.getParent(n, 'td'); + return p !== null; + } + + selectedBlocks = actions.elements; + + r = sel.getRng(true); + if (!r.collapsed) { + if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) { + r.setEnd(r.endContainer, r.endOffset - 1); + sel.setRng(r); + } + if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) { + r.setStart(r.startContainer, r.startOffset + 1); + sel.setRng(r); + } + } + + + if (tinymce.isIE8) { + // append a zero sized nbsp so that caret is restored correctly using bookmark + var s = t.ed.selection.getNode(); + if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) { + var i = t.ed.getDoc().createTextNode('\uFEFF'); + s.appendChild(i); + } + } + + bookmark = sel.getBookmark(); + actions.OL = actions.UL = recurse; + t.splitSafeEach(selectedBlocks, processElement); + sel.moveToBookmark(bookmark); + bookmark = null; + + // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6 + if (!isInTable()) { + // Avoids table or image handles being left behind in Firefox. + t.ed.execCommand('mceRepaint'); + } + }, + + splitSafeEach: function(elements, f, forceClassBase) { + if (forceClassBase || + (tinymce.isGecko && + (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) || + /Firefox\/3\.[0-4]/.test(navigator.userAgent)))) { + this.classBasedEach(elements, f); + } else { + each(elements, f); + } + }, + + classBasedEach: function(elements, f) { + var dom = this.ed.dom, nodes, element; + // Mark nodes + each(elements, function(element) { + dom.addClass(element, '_mce_act_on'); + }); + nodes = dom.select('._mce_act_on'); + while (nodes.length > 0) { + element = nodes.shift(); + dom.removeClass(element, '_mce_act_on'); + f(element); + nodes = dom.select('._mce_act_on'); + } + }, + + adjustPaddingFunction: function(isIndent) { + var indentAmount, indentUnits, ed = this.ed; + indentAmount = ed.settings.indentation; + indentUnits = /[a-z%]+/i.exec(indentAmount); + indentAmount = parseInt(indentAmount, 10); + return function(element) { + var currentIndent, newIndentAmount; + currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10); + if (isIndent) { + newIndentAmount = currentIndent + indentAmount; + } else { + newIndentAmount = currentIndent - indentAmount; + } + ed.dom.setStyle(element, 'padding-left', ''); + ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : ''); + }; + }, + + selectedBlocks: function() { + var ed = this.ed, selectedBlocks = ed.selection.getSelectedBlocks(); + return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks; + }, + + getInfo: function() { + return { + longname : 'Lists', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + tinymce.PluginManager.add("lists", tinymce.plugins.Lists); +}()); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/css/content.css b/ehcp/net2ftp/plugins/tinymce/plugins/media/css/content.css new file mode 100644 index 0000000..1bf6a75 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/css/content.css @@ -0,0 +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);} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/css/media.css b/ehcp/net2ftp/plugins/tinymce/plugins/media/css/media.css new file mode 100644 index 0000000..0c45c7f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/css/media.css @@ -0,0 +1,17 @@ +#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, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px } +#width, #height { width: 40px } +#src, #media_type { width: 250px } +#class { width: 120px } +#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; 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 } +iframe {border: 1px solid gray} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/editor_plugin.js new file mode 100644 index 0000000..9ac42e0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/editor_plugin.js @@ -0,0 +1 @@ +(function(){var b=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),a=tinymce.makeMap(b.join(",")),f=tinymce.html.Node,d,i,h=tinymce.util.JSON,g;d=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function e(j){return typeof(j)=="string"?j.replace(/[^0-9%]/g,""):j}function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(s){return s&&s.nodeName==="IMG"&&n.dom.hasClass(s,"mceItemMedia")}r.editor=n;r.url=j;i="";for(m=0;m0){O+=(O?"&":"")+P+"="+escape(Q)}});if(O.length){G.params.flashvars=O}L=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(L,function(Q,P){G.params[P]=""+Q})}}G=z.attr("data-mce-json");if(!G){return}G=h.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}G.width=z.attr("width")||G.width;G.height=z.attr("height")||G.height;if(q.name==="Iframe"){x=new f("iframe",1);tinymce.each(b,function(n){var J=z.attr(n);if(n=="class"&&J){J=J.replace(/mceItem.+ ?/g,"")}if(J&&J.length>0){x.attr(n,J)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new f("script",1).attr("type","text/javascript");y=new f("#text",3);y.value="write"+q.name+"("+h.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new f("video",1).attr(tinymce.extend({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A 0) + flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value); + }); + + if (flashVarsOutput.length) + data.params.flashvars = flashVarsOutput; + + params = editor.getParam('flash_video_player_params', { + allowfullscreen: true, + allowscriptaccess: true + }); + + tinymce.each(params, function(value, name) { + data.params[name] = "" + value; + }); + } + }; + + data = node.attr('data-mce-json'); + if (!data) + return; + + data = JSON.parse(data); + typeItem = this.getType(node.attr('class')); + + style = node.attr('data-mce-style'); + if (!style) { + style = node.attr('style'); + + if (style) + style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img')); + } + + // Use node width/height to override the data width/height when the placeholder is resized + data.width = node.attr('width') || data.width; + data.height = node.attr('height') || data.height; + + // Handle iframe + if (typeItem.name === 'Iframe') { + replacement = new Node('iframe', 1); + + tinymce.each(rootAttributes, function(name) { + var value = node.attr(name); + + if (name == 'class' && value) + value = value.replace(/mceItem.+ ?/g, ''); + + if (value && value.length > 0) + replacement.attr(name, value); + }); + + for (name in data.params) + replacement.attr(name, data.params[name]); + + replacement.attr({ + style: style, + src: data.params.src + }); + + node.replace(replacement); + + return; + } + + // Handle scripts + if (this.editor.settings.media_use_script) { + replacement = new Node('script', 1).attr('type', 'text/javascript'); + + value = new Node('#text', 3); + value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, { + width: node.attr('width'), + height: node.attr('height') + })) + ');'; + + replacement.append(value); + node.replace(replacement); + + return; + } + + // Add HTML5 video element + if (typeItem.name === 'Video' && data.video.sources[0]) { + // Create new object element + video = new Node('video', 1).attr(tinymce.extend({ + id : node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style + }, data.video.attrs)); + + // Get poster source and use that for flash fallback + if (data.video.attrs) + posterSrc = data.video.attrs.poster; + + sources = data.video.sources = toArray(data.video.sources); + for (i = 0; i < sources.length; i++) { + if (/\.mp4$/.test(sources[i].src)) + mp4Source = sources[i].src; + } + + if (!sources[0].type) { + video.attr('src', sources[0].src); + sources.splice(0, 1); + } + + for (i = 0; i < sources.length; i++) { + source = new Node('source', 1).attr(sources[i]); + source.shortEnded = true; + video.append(source); + } + + // Create flash fallback for video if we have a mp4 source + if (mp4Source) { + addPlayer(mp4Source, posterSrc); + typeItem = self.getType('flash'); + } else + data.params.src = ''; + } + + // Add HTML5 audio element + if (typeItem.name === 'Audio' && data.video.sources[0]) { + // Create new object element + audio = new Node('audio', 1).attr(tinymce.extend({ + id : node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style + }, data.video.attrs)); + + // Get poster source and use that for flash fallback + if (data.video.attrs) + posterSrc = data.video.attrs.poster; + + sources = data.video.sources = toArray(data.video.sources); + if (!sources[0].type) { + audio.attr('src', sources[0].src); + sources.splice(0, 1); + } + + for (i = 0; i < sources.length; i++) { + source = new Node('source', 1).attr(sources[i]); + source.shortEnded = true; + audio.append(source); + } + + data.params.src = ''; + } + + if (typeItem.name === 'EmbeddedAudio') { + embed = new Node('embed', 1); + embed.shortEnded = true; + embed.attr({ + id: node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style, + type: node.attr('type') + }); + + for (name in data.params) + embed.attr(name, data.params[name]); + + tinymce.each(rootAttributes, function(name) { + if (data[name] && name != 'type') + embed.attr(name, data[name]); + }); + + data.params.src = ''; + } + + // Do we have a params src then we can generate object + if (data.params.src) { + // Is flv movie add player for it + if (/\.flv$/i.test(data.params.src)) + addPlayer(data.params.src, ''); + + if (args && args.force_absolute) + data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); + + // Create new object element + object = new Node('object', 1).attr({ + id : node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style + }); + + tinymce.each(rootAttributes, function(name) { + var value = data[name]; + + if (name == 'class' && value) + value = value.replace(/mceItem.+ ?/g, ''); + + if (value && name != 'type') + object.attr(name, value); + }); + + // Add params + for (name in data.params) { + param = new Node('param', 1); + param.shortEnded = true; + value = data.params[name]; + + // Windows media needs to use url instead of src for the media URL + if (name === 'src' && typeItem.name === 'WindowsMedia') + name = 'url'; + + param.attr({name: name, value: value}); + object.append(param); + } + + // Setup add type and classid if strict is disabled + if (this.editor.getParam('media_strict', true)) { + object.attr({ + data: data.params.src, + type: typeItem.mimes[0] + }); + } else { + object.attr({ + classid: "clsid:" + typeItem.clsids[0], + codebase: typeItem.codebase + }); + + embed = new Node('embed', 1); + embed.shortEnded = true; + embed.attr({ + id: node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style, + type: typeItem.mimes[0] + }); + + for (name in data.params) + embed.attr(name, data.params[name]); + + tinymce.each(rootAttributes, function(name) { + if (data[name] && name != 'type') + embed.attr(name, data[name]); + }); + + object.append(embed); + } + + // Insert raw HTML + if (data.object_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.object_html; + object.append(value); + } + + // Append object to video element if it exists + if (video) + video.append(object); + } + + if (video) { + // Insert raw HTML + if (data.video_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.video_html; + video.append(value); + } + } + + if (audio) { + // Insert raw HTML + if (data.video_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.video_html; + audio.append(value); + } + } + + var n = video || audio || object || embed; + if (n) + node.replace(n); + else + node.remove(); + }, + + /** + * Converts a tinymce.html.Node video/object/embed to an img element. + * + * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this: + * + * + * The JSON structure will be like this: + * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}} + */ + objectToImg : function(node) { + var object, embed, video, iframe, img, name, id, width, height, style, i, html, + param, params, source, sources, data, type, lookup = this.lookup, + matches, attrs, urlConverter = this.editor.settings.url_converter, + urlConverterScope = this.editor.settings.url_converter_scope, + hspace, vspace, align, bgcolor; + + function getInnerHTML(node) { + return new tinymce.html.Serializer({ + inner: true, + validate: false + }).serialize(node); + }; + + function lookupAttribute(o, attr) { + return lookup[(o.attr(attr) || '').toLowerCase()]; + } + + function lookupExtension(src) { + var ext = src.replace(/^.*\.([^.]+)$/, '$1'); + return lookup[ext.toLowerCase() || '']; + } + + // If node isn't in document + if (!node.parent) + return; + + // Handle media scripts + if (node.name === 'script') { + if (node.firstChild) + matches = scriptRegExp.exec(node.firstChild.value); + + if (!matches) + return; + + type = matches[1]; + data = {video : {}, params : JSON.parse(matches[2])}; + width = data.params.width; + height = data.params.height; + } + + // Setup data objects + data = data || { + video : {}, + params : {} + }; + + // Setup new image object + img = new Node('img', 1); + img.attr({ + src : this.editor.theme.url + '/img/trans.gif' + }); + + // Video element + name = node.name; + if (name === 'video' || name == 'audio') { + video = node; + object = node.getAll('object')[0]; + embed = node.getAll('embed')[0]; + width = video.attr('width'); + height = video.attr('height'); + id = video.attr('id'); + data.video = {attrs : {}, sources : []}; + + // Get all video attributes + attrs = data.video.attrs; + for (name in video.attributes.map) + attrs[name] = video.attributes.map[name]; + + source = node.attr('src'); + if (source) + data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)}); + + // Get all sources + sources = video.getAll("source"); + for (i = 0; i < sources.length; i++) { + source = sources[i].remove(); + + data.video.sources.push({ + src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'), + type: source.attr('type'), + media: source.attr('media') + }); + } + + // Convert the poster URL + if (attrs.poster) + attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name); + } + + // Object element + if (node.name === 'object') { + object = node; + embed = node.getAll('embed')[0]; + } + + // Embed element + if (node.name === 'embed') + embed = node; + + // Iframe element + if (node.name === 'iframe') { + iframe = node; + type = 'Iframe'; + } + + if (object) { + // Get width/height + width = width || object.attr('width'); + height = height || object.attr('height'); + style = style || object.attr('style'); + id = id || object.attr('id'); + hspace = hspace || object.attr('hspace'); + vspace = vspace || object.attr('vspace'); + align = align || object.attr('align'); + bgcolor = bgcolor || object.attr('bgcolor'); + data.name = object.attr('name'); + + // Get all object params + params = object.getAll("param"); + for (i = 0; i < params.length; i++) { + param = params[i]; + name = param.remove().attr('name'); + + if (!excludedAttrs[name]) + data.params[name] = param.attr('value'); + } + + data.params.src = data.params.src || object.attr('data'); + } + + if (embed) { + // Get width/height + width = width || embed.attr('width'); + height = height || embed.attr('height'); + style = style || embed.attr('style'); + id = id || embed.attr('id'); + hspace = hspace || embed.attr('hspace'); + vspace = vspace || embed.attr('vspace'); + align = align || embed.attr('align'); + bgcolor = bgcolor || embed.attr('bgcolor'); + + // Get all embed attributes + for (name in embed.attributes.map) { + if (!excludedAttrs[name] && !data.params[name]) + data.params[name] = embed.attributes.map[name]; + } + } + + if (iframe) { + // Get width/height + width = normalizeSize(iframe.attr('width')); + height = normalizeSize(iframe.attr('height')); + style = style || iframe.attr('style'); + id = iframe.attr('id'); + hspace = iframe.attr('hspace'); + vspace = iframe.attr('vspace'); + align = iframe.attr('align'); + bgcolor = iframe.attr('bgcolor'); + + tinymce.each(rootAttributes, function(name) { + img.attr(name, iframe.attr(name)); + }); + + // Get all iframe attributes + for (name in iframe.attributes.map) { + if (!excludedAttrs[name] && !data.params[name]) + data.params[name] = iframe.attributes.map[name]; + } + } + + // Use src not movie + if (data.params.movie) { + data.params.src = data.params.src || data.params.movie; + delete data.params.movie; + } + + // Convert the URL to relative/absolute depending on configuration + if (data.params.src) + data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object'); + + if (video) { + if (node.name === 'video') + type = lookup.video.name; + else if (node.name === 'audio') + type = lookup.audio.name; + } + + if (object && !type) + type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; + + if (embed && !type) + type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; + + // for embedded audio we preserve the original specified type + if (embed && type == 'EmbeddedAudio') { + data.params.type = embed.attr('type'); + } + + // Replace the video/object/embed element with a placeholder image containing the data + node.replace(img); + + // Remove embed + if (embed) + embed.remove(); + + // Serialize the inner HTML of the object element + if (object) { + html = getInnerHTML(object.remove()); + + if (html) + data.object_html = html; + } + + // Serialize the inner HTML of the video element + if (video) { + html = getInnerHTML(video.remove()); + + if (html) + data.video_html = html; + } + + data.hspace = hspace; + data.vspace = vspace; + data.align = align; + data.bgcolor = bgcolor; + + // Set width/height of placeholder + img.attr({ + id : id, + 'class' : 'mceItemMedia mceItem' + (type || 'Flash'), + style : style, + width : width || (node.name == 'audio' ? "300" : "320"), + height : height || (node.name == 'audio' ? "32" : "240"), + hspace : hspace, + vspace : vspace, + align : align, + bgcolor : bgcolor, + "data-mce-json" : JSON.serialize(data, "'") + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flash.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flash.gif new file mode 100644 index 0000000..cb192e6 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flash.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flv_player.swf b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flv_player.swf new file mode 100644 index 0000000..042c2ab Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/flv_player.swf differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/quicktime.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/quicktime.gif new file mode 100644 index 0000000..3b04991 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/quicktime.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/realmedia.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/realmedia.gif new file mode 100644 index 0000000..fdfe0b9 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/realmedia.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/shockwave.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/shockwave.gif new file mode 100644 index 0000000..5f235df Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/shockwave.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/trans.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/trans.gif new file mode 100644 index 0000000..3884865 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/trans.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/img/windowsmedia.gif b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/windowsmedia.gif new file mode 100644 index 0000000..ab50f2d Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/img/windowsmedia.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/js/embed.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/js/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/js/embed.js @@ -0,0 +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 += ''; + + h += ''); + + function get(id) { + return document.getElementById(id); + } + + function clone(obj) { + var i, len, copy, attr; + + if (null == obj || "object" != typeof obj) + return obj; + + // Handle Array + if ('length' in obj) { + copy = []; + + for (i = 0, len = obj.length; i < len; ++i) { + copy[i] = clone(obj[i]); + } + + return copy; + } + + // Handle Object + copy = {}; + for (attr in obj) { + if (obj.hasOwnProperty(attr)) + copy[attr] = clone(obj[attr]); + } + + return copy; + } + + function getVal(id) { + var elm = get(id); + + if (elm.nodeName == "SELECT") + return elm.options[elm.selectedIndex].value; + + if (elm.type == "checkbox") + return elm.checked; + + return elm.value; + } + + function setVal(id, value, name) { + if (typeof(value) != 'undefined' && value != null) { + var elm = get(id); + + if (elm.nodeName == "SELECT") + selectByValue(document.forms[0], id, value); + else if (elm.type == "checkbox") { + if (typeof(value) == 'string') { + value = value.toLowerCase(); + value = (!name && value === 'true') || (name && value === name.toLowerCase()); + } + elm.checked = !!value; + } else + elm.value = value; + } + } + + window.Media = { + init : function() { + var html, editor, self = this; + + self.editor = editor = tinyMCEPopup.editor; + + // Setup file browsers and color pickers + get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media'); + get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media'); + get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media'); + get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media'); + get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media'); + get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','image','media'); + + html = self.getMediaListHTML('medialist', 'src', 'media', 'media'); + if (html == "") + get("linklistrow").style.display = 'none'; + else + get("linklistcontainer").innerHTML = html; + + if (isVisible('filebrowser')) + get('src').style.width = '230px'; + + if (isVisible('video_filebrowser_altsource1')) + get('video_altsource1').style.width = '220px'; + + if (isVisible('video_filebrowser_altsource2')) + get('video_altsource2').style.width = '220px'; + + if (isVisible('audio_filebrowser_altsource1')) + get('audio_altsource1').style.width = '220px'; + + if (isVisible('audio_filebrowser_altsource2')) + get('audio_altsource2').style.width = '220px'; + + if (isVisible('filebrowser_poster')) + get('video_poster').style.width = '220px'; + + editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor)); + + self.setDefaultDialogSettings(editor); + self.data = clone(tinyMCEPopup.getWindowArg('data')); + self.dataToForm(); + self.preview(); + + updateColor('bgcolor_pick', 'bgcolor'); + }, + + insert : function() { + var editor = tinyMCEPopup.editor; + + this.formToData(); + editor.execCommand('mceRepaint'); + tinyMCEPopup.restoreSelection(); + editor.selection.setNode(editor.plugins.media.dataToImg(this.data)); + tinyMCEPopup.close(); + }, + + preview : function() { + get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true); + }, + + moveStates : function(to_form, field) { + var data = this.data, editor = this.editor, + mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src; + + defaultStates = { + // QuickTime + quicktime_autoplay : true, + quicktime_controller : true, + + // Flash + flash_play : true, + flash_loop : true, + flash_menu : true, + + // WindowsMedia + windowsmedia_autostart : true, + windowsmedia_enablecontextmenu : true, + windowsmedia_invokeurls : true, + + // RealMedia + realmedia_autogotourl : true, + realmedia_imagestatus : true + }; + + function parseQueryParams(str) { + var out = {}; + + if (str) { + tinymce.each(str.split('&'), function(item) { + var parts = item.split('='); + + out[unescape(parts[0])] = unescape(parts[1]); + }); + } + + return out; + }; + + function setOptions(type, names) { + var i, name, formItemName, value, list; + + if (type == data.type || type == 'global') { + names = tinymce.explode(names); + for (i = 0; i < names.length; i++) { + name = names[i]; + formItemName = type == 'global' ? name : type + '_' + name; + + if (type == 'global') + list = data; + else if (type == 'video' || type == 'audio') { + list = data.video.attrs; + + if (!list && !to_form) + data.video.attrs = list = {}; + } else + list = data.params; + + if (list) { + if (to_form) { + setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : ''); + } else { + delete list[name]; + + value = getVal(formItemName); + if ((type == 'video' || type == 'audio') && value === true) + value = name; + + if (defaultStates[formItemName]) { + if (value !== defaultStates[formItemName]) { + value = "" + value; + list[name] = value; + } + } else if (value) { + value = "" + value; + list[name] = value; + } + } + } + } + } + } + + if (!to_form) { + data.type = get('media_type').options[get('media_type').selectedIndex].value; + data.width = getVal('width'); + data.height = getVal('height'); + + // Switch type based on extension + src = getVal('src'); + if (field == 'src') { + ext = src.replace(/^.*\.([^.]+)$/, '$1'); + if (typeInfo = mediaPlugin.getType(ext)) + data.type = typeInfo.name.toLowerCase(); + + setVal('media_type', data.type); + } + + if (data.type == "video" || data.type == "audio") { + if (!data.video.sources) + data.video.sources = []; + + data.video.sources[0] = {src: getVal('src')}; + } + } + + // Hide all fieldsets and show the one active + get('video_options').style.display = 'none'; + get('audio_options').style.display = 'none'; + get('flash_options').style.display = 'none'; + get('quicktime_options').style.display = 'none'; + get('shockwave_options').style.display = 'none'; + get('windowsmedia_options').style.display = 'none'; + get('realmedia_options').style.display = 'none'; + get('embeddedaudio_options').style.display = 'none'; + + if (get(data.type + '_options')) + get(data.type + '_options').style.display = 'block'; + + setVal('media_type', data.type); + + setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars'); + setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc'); + setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign'); + setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume'); + setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks'); + setOptions('video', 'poster,autoplay,loop,muted,preload,controls'); + setOptions('audio', 'autoplay,loop,preload,controls'); + setOptions('embeddedaudio', 'autoplay,loop,controls'); + setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height'); + + if (to_form) { + if (data.type == 'video') { + if (data.video.sources[0]) + setVal('src', data.video.sources[0].src); + + src = data.video.sources[1]; + if (src) + setVal('video_altsource1', src.src); + + src = data.video.sources[2]; + if (src) + setVal('video_altsource2', src.src); + } else if (data.type == 'audio') { + if (data.video.sources[0]) + setVal('src', data.video.sources[0].src); + + src = data.video.sources[1]; + if (src) + setVal('audio_altsource1', src.src); + + src = data.video.sources[2]; + if (src) + setVal('audio_altsource2', src.src); + } else { + // Check flash vars + if (data.type == 'flash') { + tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) { + if (value == '$url') + data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || ''; + }); + } + + setVal('src', data.params.src); + } + } else { + src = getVal("src"); + + // YouTube Embed + if (src.match(/youtube\.com\/embed\/\w+/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + setVal('src', src); + setVal('media_type', data.type); + } else { + // YouTube *NEW* + if (src.match(/youtu\.be\/[a-z1-9.-_]+/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } + + // YouTube + if (src.match(/youtube\.com(.+)v=([^&]+)/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } + } + + // Google video + if (src.match(/video\.google\.com(.+)docid=([^&]+)/)) { + data.width = 425; + data.height = 326; + data.type = 'flash'; + src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en'; + setVal('src', src); + setVal('media_type', data.type); + } + + // Vimeo + if (src.match(/vimeo\.com\/([0-9]+)/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://player.vimeo.com/video/' + src.match(/vimeo.com\/([0-9]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } + + // stream.cz + if (src.match(/stream\.cz\/((?!object).)*\/([0-9]+)/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.stream.cz/object/' + src.match(/stream.cz\/[^/]+\/([0-9]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } + + // Google maps + if (src.match(/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://maps.google.com/maps/ms?msid=' + src.match(/msid=(.+)/)[1] + "&output=embed"; + setVal('src', src); + setVal('media_type', data.type); + } + + if (data.type == 'video') { + if (!data.video.sources) + data.video.sources = []; + + data.video.sources[0] = {src : src}; + + src = getVal("video_altsource1"); + if (src) + data.video.sources[1] = {src : src}; + + src = getVal("video_altsource2"); + if (src) + data.video.sources[2] = {src : src}; + } else if (data.type == 'audio') { + if (!data.video.sources) + data.video.sources = []; + + data.video.sources[0] = {src : src}; + + src = getVal("audio_altsource1"); + if (src) + data.video.sources[1] = {src : src}; + + src = getVal("audio_altsource2"); + if (src) + data.video.sources[2] = {src : src}; + } else + data.params.src = src; + + // Set default size + setVal('width', data.width || (data.type == 'audio' ? 300 : 320)); + setVal('height', data.height || (data.type == 'audio' ? 32 : 240)); + } + }, + + dataToForm : function() { + this.moveStates(true); + }, + + formToData : function(field) { + if (field == "width" || field == "height") + this.changeSize(field); + + if (field == 'source') { + this.moveStates(false, field); + setVal('source', this.editor.plugins.media.dataToHtml(this.data)); + this.panel = 'source'; + } else { + if (this.panel == 'source') { + this.data = clone(this.editor.plugins.media.htmlToData(getVal('source'))); + this.dataToForm(); + this.panel = ''; + } + + this.moveStates(false, field); + this.preview(); + } + }, + + beforeResize : function() { + this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); + this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); + }, + + changeSize : function(type) { + var width, height, scale, size; + + if (get('constrain').checked) { + width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); + height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); + + if (type == 'width') { + this.height = Math.round((width / this.width) * height); + setVal('height', this.height); + } else { + this.width = Math.round((height / this.height) * width); + setVal('width', this.width); + } + } + }, + + getMediaListHTML : function() { + if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; + }, + + getMediaTypeHTML : function(editor) { + function option(media_type, element) { + if (!editor.schema.getElementRule(element || media_type)) { + return ''; + } + + return '' + } + + var html = ""; + + html += ''; + return html; + }, + + setDefaultDialogSettings : function(editor) { + var defaultDialogSettings = editor.getParam("media_dialog_defaults", {}); + tinymce.each(defaultDialogSettings, function(v, k) { + setVal(k, v); + }); + } + }; + + tinyMCEPopup.requireLangPack(); + tinyMCEPopup.onInit.add(function() { + Media.init(); + }); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ar_dlg.js new file mode 100644 index 0000000..d8d6f82 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.media_dlg',{list:"\u0642\u0627\u0626\u0645\u0647",file:"\u0645\u0644\u0641/\u0639\u0646\u0648\u0627\u0646URL",advanced:"\u0645\u062a\u0642\u062f\u0645",general:"\u0639\u0627\u0645",title:"\u0627\u0636\u0641/ \u0639\u062f\u0644 \u0641\u0644\u0627\u0634 \u0627\u0648 \u0641\u064a\u062f\u064a\u0648","align_top_left":"\u0627\u0639\u0644\u0649 \u064a\u0633\u0627\u0631","align_center":"\u0648\u0633\u0637","align_left":"\u064a\u0633\u0627\u0631","align_bottom":"\u0627\u0633\u0641\u0644","align_right":"\u064a\u0645\u064a\u0646","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","qt_stream_warn":"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",qtsrc:"QT Src",progress:"\u062a\u0642\u062f\u0645",sound:"\u0635\u0648\u062a",swstretchvalign:"\u0627\u0644\u062a\u0645\u062f\u062f \u0627\u0644\u0639\u0627\u0645\u0648\u062f\u064a",swstretchhalign:"\u0627\u0644\u062a\u0645\u062f\u062f \u0627\u0644\u0623\u0641\u0642\u064a",swstretchstyle:"\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u062a\u0645\u062f\u062f",scriptcallbacks:"\u0627\u0644\u0631\u062f \u0627\u0644\u0646\u0635\u064a","align_top_right":"\u0627\u0639\u0644\u0649 \u064a\u0645\u064a\u0646",uimode:"UI Mode",rate:"\u0645\u0639\u062f\u0644",playcount:"\u0639\u062f\u062f \u0645\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0636",defaultframe:"\u0627\u0644\u0627\u0637\u0627\u0631 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u0649",currentposition:"\u0627\u0644\u0645\u0648\u0636\u0639 \u0627\u0644\u062d\u0627\u0644\u064a",currentmarker:"\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629",captioningid:"\u0645\u0639\u0631\u0641 \u0643\u062a\u0627\u0628\u0629 \u0627\u0644\u062a\u0639\u0644\u064a\u0642\u0627\u062a",baseurl:"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0623\u0633\u0627\u0633\u064a",balance:"\u0627\u0644\u062a\u0648\u0627\u0632\u0646",windowlessvideo:"\u0641\u064a\u062f\u064a\u0648 \u0628\u0644\u0627 \u0627\u0637\u0627\u0631",stretchtofit:"\u0645\u0637\u0647 \u0644\u064a\u0646\u0627\u0633\u0628",mute:"\u0628\u0644\u0627 \u0635\u0648\u062a",invokeurls:"\u0627\u0633\u062a\u062f\u0639\u0627\u0621 \u0627\u0644\u0631\u0648\u0627\u0628\u0637",fullscreen:"\u0628\u0643\u0627\u0645\u0644 \u0627\u0644\u0634\u0627\u0634\u0647",enabled:"\u0645\u062a\u0627\u062d",autostart:"\u0628\u062f\u0621 \u062a\u0644\u0642\u0627\u0626\u0649",volume:"\u0639\u0644\u0648 \u0627\u0644\u0635\u0648\u062a",target:"\u0627\u0644\u0647\u062f\u0641",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0648\u0642\u062a \u0627\u0644\u0646\u0647\u0627\u064a\u0647",starttime:"\u0648\u0642\u062a \u0627\u0644\u0628\u062f\u0627\u064a\u0647",enablejavascript:"\u062a\u0641\u0639\u064a\u0644 JavaScript",correction:"\u0628\u0644\u0627 \u062a\u0635\u062d\u064a\u062d",targetcache:"Target cache",playeveryframe:"\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0643\u0627\u062f\u0631\u0627\u062a",kioskmode:"\u0646\u0645\u0637 \u0627\u0644\u0645\u062d\u062a\u0648\u0649",controller:"\u0627\u0644\u0645\u0631\u0627\u0642\u0628",menu:"\u0627\u0638\u0647\u0631 \u0627\u0644\u0642\u0627\u0626\u0645\u0647",loop:"\u062a\u0643\u0631\u0627\u0631",play:"\u062a\u0634\u063a\u064a\u0644 \u062a\u0644\u0642\u0627\u0626\u0649",hspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0639\u0627\u0645\u0648\u062f\u064a\u0629",vspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0623\u0641\u0642\u064a\u0629","class_name":"\u0627\u0644\u0643\u0644\u0627\u0633",name:"\u0627\u0633\u0645",id:"\u0627\u0644\u0645\u0639\u0631\u0641",type:"\u0646\u0648\u0639",size:"\u0627\u0628\u0639\u0627\u062f",preview:"\u0645\u0639\u0627\u064a\u0646\u0647","constrain_proportions":"Constrain proportions",controls:"\u0627\u0644\u062a\u062d\u0643\u0645",numloop:"\u0639\u062f\u062f \u0627\u0644\u062a\u0643\u0631\u0627\u0631\u0627\u062a",console:"\u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629",cache:"\u0627\u0644\u0643\u0627\u0634",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u062e\u0644\u0641\u064a\u0647",wmode:"WMode",salign:"SAlign",align:"\u0645\u062d\u0627\u0632\u0627\u0647",scale:"Scale",quality:"\u062c\u0648\u062f\u0647",shuffle:"\u0627\u0644\u0646\u0638\u0645",prefetch:"\u0627\u062d\u0636\u0627\u0631 \u0645\u0633\u0628\u0642",nojava:"\u0644\u0627 \u062c\u0627\u0641\u0627",maintainaspect:"\u0627\u0644\u062d\u0641\u0627\u0638 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0627\u0644\u0637\u0648\u0644 \u0644\u0644\u0639\u0631\u0636",imagestatus:"\u062d\u0627\u0644\u0629 \u0627\u0644\u0635\u0648\u0631\u0647",center:"\u0648\u0633\u0637",autogotourl:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0630\u0647\u0627\u0628 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649","shockwave_options":"\u0627\u0639\u062f\u0627\u062f\u0627\u062a Shockwave","rmp_options":"\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0634\u063a\u0644 Real media","wmp_options":"\u062e\u0635\u0627\u0626\u0635 \u0645\u064a\u062f\u064a\u0627 \u0628\u0644\u0627\u064a\u0631","qt_options":"\u062e\u0635\u0627\u0626\u0635 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645","flash_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u0644\u0627\u0634",hidden:"\u062e\u0641\u0649","align_bottom_left":"\u0627\u0633\u0641\u0644 \u064a\u0633\u0627\u0631","align_bottom_right":"\u0627\u0633\u0641\u0644 \u064a\u0645\u064a\u0646",flash:"\u0641\u0644\u0627\u0634",quicktime:"quicktime ","embedded_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0645\u062f\u0645\u062c\u0629",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave",audio:"\u0627\u0644\u0635\u0648\u062a",video:"\u0627\u0644\u0641\u064a\u062f\u064a\u0648","html5_video_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u064a\u062f\u064a\u0648 HTML5",altsource1:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u0627\u0648\u0644 \u0644\u0644\u0645\u0635\u062f\u0631",altsource2:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u062b\u0627\u0646\u0649 \u0644\u0644\u0645\u0635\u062f\u0631",preload:"\u062a\u062d\u0645\u064a\u0644 \u0645\u0633\u0628\u0642",poster:"\u0627\u0644\u0625\u0639\u0644\u0627\u0646",source:"\u0645\u0635\u062f\u0631","html5_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a","preload_none":"\u0644\u0627 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0633\u0628\u0642","preload_metadata":"\u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0633\u0628\u0642 \u0644\u0644\u0641\u064a\u062f\u064a\u0648","preload_auto":"\u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0623\u0646 \u064a\u0642\u0631\u0631",iframe:"\u0646\u0627\u0641\u0630\u0629 \u0645\u062f\u0645\u062c\u0629",embeddedaudio:"\u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0645\u062f\u0645\u062c"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/cs_dlg.js new file mode 100644 index 0000000..b126861 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.media_dlg',{list:"Seznam",file:"Soubor/URL",advanced:"Roz\u0161\u00ed\u0159en\u00e9",general:"Obecn\u00e9",title:"Vlo\u017eit/upravit vkl\u00e1dan\u00e1 m\u00e9dia","align_top_left":"Nahoru vlevo","align_center":"Na st\u0159ed","align_left":"Vlevo","align_bottom":"Dol\u016f","align_right":"Vpravo","align_top":"Nahoru","qt_stream_warn":"Streamovan\u00e9 rtsp zdroje mohou b\u00fdt p\u0159id\u00e1ny do pole \'Soubor/URL streamu pro QT\' na z\u00e1lo\u017ece \'Roz\u0161\u00ed\u0159en\u00e9\'.\nYM\u016f\u017eete tak\u00e9 p\u0159idat nestreamovanou verzi do pole \'Soubor/URL\'.",qtsrc:"Soubor/URL streamu pro QT",progress:"Pr\u016fb\u011bh",sound:"Zvuk",swstretchvalign:"Zarovn\u00e1n\u00ed vert. rozta\u017een\u00ed",swstretchhalign:"Zarovn\u00e1n\u00ed horiz. rozta\u017een\u00ed",swstretchstyle:"Styl rozta\u017een\u00ed",scriptcallbacks:"Skripty zp\u011btn\u00fdch vol\u00e1n\u00ed","align_top_right":"Nahoru vpravo",uimode:"Re\u017eim ovl\u00e1dac\u00edho panelu",rate:"Relativn\u00ed rychlost",playcount:"Po\u010det p\u0159ehr\u00e1n\u00ed",defaultframe:"V\u00fdchoz\u00ed sn\u00edmek",currentposition:"Aktu\u00e1ln\u00ed pozice",currentmarker:"Aktu\u00e1ln\u00ed z\u00e1lo\u017eka",captioningid:"ID popisku m\u00e9dia",baseurl:"Z\u00e1kladn\u00ed URL",balance:"Vyv\u00e1\u017een\u00ed",windowlessvideo:"Video bez okna",stretchtofit:"Rozt\u00e1hnout do okna",mute:"Ztlumit",invokeurls:"Po\u017eadovat URL",fullscreen:"Cel\u00e1 obrazovka",enabled:"Povolit ovl\u00e1dac\u00ed panel",autostart:"Automatick\u00e9 spu\u0161t\u011bn\u00ed",volume:"Hlasitost",target:"C\u00edl",qtsrcchokespeed:"Sn\u00ed\u017een\u00ed rychlosti",href:"Odkaz",endtime:"\u010cas ukon\u010den\u00ed",starttime:"Po\u010d\u00e1te\u010dn\u00ed \u010das",enablejavascript:"Povolit Javascript",correction:"Bez korekc\u00ed",targetcache:"C\u00edlov\u00e1 mezipam\u011b\u0165",playeveryframe:"P\u0159ehr\u00e1t ka\u017ed\u00fd sn\u00edmek",kioskmode:"Zak\u00e1zat ukl\u00e1d\u00e1n\u00ed",controller:"Ovl\u00e1dac\u00ed panel",menu:"Zobrazit nab\u00eddku",loop:"Opakov\u00e1n\u00ed",play:"Automatick\u00e9 p\u0159ehr\u00e1v\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed","class_name":"T\u0159\u00edda",name:"N\u00e1zev",id:"ID",type:"Typ",size:"Rozm\u011bry",preview:"N\u00e1hled","constrain_proportions":"Zachovat proporce",controls:"Ovl\u00e1dac\u00ed panel",numloop:"Po\u010det opakov\u00e1n\u00ed",console:"Konzola",cache:"Mezipam\u011b\u0165",autohref:"Automatick\u00e9 na\u010dten\u00ed",liveconnect:"Spustit Javu (SWLiveConnect)",flashvars:"Parametry (Flashvars)",base:"Z\u00e1kladn\u00ed slo\u017eka",bgcolor:"Pozad\u00ed",wmode:"Re\u017eim okna",salign:"Zarovn\u00e1n\u00ed okna",align:"Zarovn\u00e1n\u00ed",scale:"Pom\u011br",quality:"Kvalita",shuffle:"N\u00e1hodn\u011b",prefetch:"P\u0159edna\u010dten\u00ed",nojava:"Nespout\u011bt Javu",maintainaspect:"Zachovat pom\u011br stran",imagestatus:"Stav obrazu",center:"Na st\u0159ed",autogotourl:"Automatick\u00fd p\u0159echod na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Real media","wmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Windows media","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flashe",hidden:"Skr\u00fdt","align_bottom_left":"Dol\u016f vlevo","align_bottom_right":"Dol\u016f vpravo",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Volby vlo\u017een\u00e9ho audio souboru",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Mo\u017enosti HTML5 video",altsource1:"Alternativn\u00ed zdroj 1",altsource2:"Alternativn\u00ed zdroj 2",preload:"P\u0159edna\u010d\u00edst",poster:"Obr\u00e1zek (zobraz\u00ed se p\u0159i nedostupnosti videa)",source:"Zdroj","html5_audio_options":"Parametry zvuku","preload_none":"Nena\u010d\u00edtat p\u0159edem","preload_metadata":"Na\u010d\u00edst video metadata p\u0159edem","preload_auto":"Ur\u010d\u00ed prohl\u00ed\u017ee\u010d",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/da_dlg.js new file mode 100644 index 0000000..d9a88d1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avanceret",general:"Generelt",title:"Inds\u00e6t/rediger indlejret mediefil","align_top_left":"\u00d8verste venstre hj\u00f8rne","align_center":"Centreret","align_left":"Venstre","align_bottom":"Bund","align_right":"H\u00f8jret","align_top":"Top","qt_stream_warn":"Streamede rtsp resourcer skal tilf\u00f8jes til QT Src feltet under tabben avanceret.\nDu skal ogs\u00e5 tilf\u00f8je en ikke streamet version til Src feltet..",qtsrc:"QT Src",progress:"Fremskridt",sound:"Lyd",swstretchvalign:"Str\u00e6k V-justering",swstretchhalign:"Str\u00e6k H-justering",swstretchstyle:"Str\u00e6k stil",scriptcallbacks:"Script callbacks","align_top_right":"\u00d8verste h\u00f8jre hj\u00f8rne",uimode:"UI-tilstand",rate:"Vurder",playcount:"Afspil indhold",defaultframe:"Standard ramme",currentposition:"Aktuel position",currentmarker:"Aktuel mark\u00f8r",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Vinduesl\u00f8s video",stretchtofit:"Str\u00e6k for at tilpasse",mute:"Lydl\u00f8s",invokeurls:"Aktiver URL\'er",fullscreen:"Fuldsk\u00e6rm",enabled:"Valgt",autostart:"Afspil automatisk",volume:"Lydstyrke",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighed",href:"Href",endtime:"Sluttidspunkt",starttime:"Starttidspunkt",enablejavascript:"Tillad JavaScript",correction:"Ingen korrektion",targetcache:"M\u00e5l-cache",playeveryframe:"Afsplil alle rammer",kioskmode:"Kiosk-tilstand",controller:"Controller",menu:"Vis menu",loop:"Gentag",play:"Start",hspace:"H-afstand",vspace:"V-afstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"Dimensioner",preview:"Vis udskrift","constrain_proportions":"Bevar proportioner",controls:"Kontroller",numloop:"Antal loops",console:"Konsol",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Baggrund",wmode:"WMode",salign:"SAlign",align:"Juster",scale:"Skaler",quality:"Kvalitet",shuffle:"Bland",prefetch:"Forh\u00e5ndshent",nojava:"Ingen java",maintainaspect:"Bevar aspekt",imagestatus:"Billedstatus",center:"Center",autogotourl:"Auto g\u00e5 til URL","shockwave_options":"Shockwave options","rmp_options":"Real media player egenskaber","wmp_options":"Windows media player egenskaber","qt_options":"Quicktime egenskaber","flash_options":"Flash egenskaber",hidden:"Skjul","align_bottom_left":"Nederste venstre hj\u00f8rne","align_bottom_right":"\u00d8verste h\u00f8jre hj\u00f8rne",flash:"Flash",quicktime:"Quicktime","embedded_audio_options":"Indstillinger for indlejret audio",windowsmedia:"Windows Media",realmedia:"Realmedia",shockwave:"Shockwave",audio:"Lyd",video:"Video","html5_video_options":"HTML5 Video Indstillinger",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forudindl\u00e6s",poster:"Poster",source:"Kilde","html5_audio_options":"Audio indstillinger","preload_none":"Preindl\u00e6s ikke","preload_metadata":"Preindl\u00e6s video metadata","preload_auto":"Lad brugerens browser v\u00e6lge",iframe:"iframe",embeddedaudio:"Indlejret lyd"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/de_dlg.js new file mode 100644 index 0000000..e64e083 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.media_dlg',{list:"Liste",file:"Datei/URL",advanced:"Erweitert",general:"Allgemein",title:"Multimedia-Inhalte einf\u00fcgen/bearbeiten","align_top_left":"Oben Links","align_center":"Zentriert","align_left":"Links","align_bottom":"Unten","align_right":"Rechts","align_top":"Oben","qt_stream_warn":"In den Erweiterten Einstellungen sollten im Feld \'QT Src\' gestreamte RTSP Resourcen hinzugef\u00fcgt werden.\nZus\u00e4tzlich sollte dort auch eine nicht-gestreamte Resource angegeben werden.",qtsrc:"Angabe zu QT Src",progress:"Fortschritt",sound:"Ton",swstretchvalign:"Stretch V-Ausrichtung",swstretchhalign:"Stretch H-Ausrichtung",swstretchstyle:"Stretch-Art",scriptcallbacks:"Script callbacks","align_top_right":"Oben Rechts",uimode:"UI Modus",rate:"Rate",playcount:"Z\u00e4hler",defaultframe:"Frame-Voreinstellung",currentposition:"Aktuelle Position",currentmarker:"Aktueller Marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Fensterloses Video",stretchtofit:"Anzeigefl\u00e4che an verf\u00fcgbaren Platz anpassen",mute:"Stumm",invokeurls:"Invoke URLs",fullscreen:"Vollbild",enabled:"Aktiviert",autostart:"Autostart",volume:"Lautst\u00e4rke",target:"Ziel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Endzeitpunkt",starttime:"Startzeitpunkt",enablejavascript:"JavaScript aktivieren",correction:"Ohne Korrektur",targetcache:"Ziel zwischenspeichern",playeveryframe:"Jeden Frame abspielen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Men\u00fc anzeigen",loop:"Wiederholung",play:"Automatisches Abspielen",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand","class_name":"CSS-Klasse",name:"Name",id:"Id",type:"Typ",size:"Abmessungen",preview:"Vorschau","constrain_proportions":"Proportionen erhalten",controls:"Steuerung",numloop:"Anzahl Wiederholungen",console:"Konsole",cache:"Zwischenspeicher",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvariablen",base:"Base",bgcolor:"Hintergrund",wmode:"WMode",salign:"S-Ausrichtung",align:"Ausrichtung",scale:"Skalierung",quality:"Qualit\u00e4t",shuffle:"Zuf\u00e4llige Wiedergabe",prefetch:"Prefetch",nojava:"Kein Java",maintainaspect:"Bildverh\u00e4ltnis beibehalten",imagestatus:"Bildstatus",center:"Zentriert",autogotourl:"Auto goto URL","shockwave_options":"Shockwave-Optionen","rmp_options":"Optionen f\u00fcr Real Media Player","wmp_options":"Optionen f\u00fcr Windows Media Player","qt_options":"Quicktime-Optionen","flash_options":"Flash-Optionen",hidden:"Versteckt","align_bottom_left":"Unten Links","align_bottom_right":"Unten Rechts",flash:"Flash",quicktime:"QuickTime","embedded_audio_options":"Integrierte Audio Optionen",windowsmedia:"WindowsMedia",realmedia:"RealMedia",shockwave:"ShockWave",audio:"Audio",video:"Video","html5_video_options":"HTML5 Video Optionen",altsource1:"Alternative Quelle 1",altsource2:"Alternative Quelle 2",preload:"Preload",poster:"Poster",source:"Quelle","html5_audio_options":"Audio Optionen","preload_none":"Nicht vorladen","preload_metadata":"Video Metadaten vorladen","preload_auto":"Benutzer Browser entscheidet automatisch",iframe:"iFrame",embeddedaudio:"Audio (eingebunden)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/en_dlg.js new file mode 100644 index 0000000..b247f85 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/es_dlg.js new file mode 100644 index 0000000..7765ab3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/es_dlg.js @@ -0,0 +1,103 @@ +tinyMCE.addI18n('es.media_dlg',{ +title:"Insertar/editar medio embebido", +general:"General", +advanced:"Avanzado", +file:"Archivo/URL", +list:"Lista", +size:"Dimensiones", +preview:"Vista Previa", +constrain_proportions:"Bloquear relaci\u00F3n de aspecto", +type:"Tipo", +id:"Id", +name:"Nombre", +class_name:"Clase", +vspace:"V-Space", +hspace:"H-Space", +play:"Comienzo Autom\u00E1tico", +loop:"Repetitivo", +menu:"Mostrar Men\u00FA", +quality:"Calidad", +scale:"Scale", +align:"Alineaci\u00F3n", +salign:"SAlign", +wmode:"WMode", +bgcolor:"Fondo", +base:"Base", +flashvars:"Flashvars", +liveconnect:"SWLiveConnect", +autohref:"AutoHREF", +cache:"Cach\u00E9", +hidden:"Hidden", +controller:"Controller", +kioskmode:"Kiosk mode", +playeveryframe:"Reproducir todo los frames", +targetcache:"Target cache", +correction:"Sin correci\u00F3n", +enablejavascript:"Habilitar JavaScript", +starttime:"Inicio", +endtime:"Fin", +href:"Href", +qtsrcchokespeed:"Vel. de choque", +target:"Target", +volume:"Volumen", +autostart:"Comienzo Autom\u00E1tico", +enabled:"Habilitado", +fullscreen:"Pantalla Completa", +invokeurls:"Invocar URLs", +mute:"Silencio", +stretchtofit:"Estirar para ajustar", +windowlessvideo:"Video sin ventana", +balance:"Balance", +baseurl:"URL Base", +captioningid:"Captioning id", +currentmarker:"Marcador actual", +currentposition:"Posici\u00F3n actual", +defaultframe:"Frame predet.", +playcount:"Cuantas reproducciones", +rate:"Ratio", +uimode:"Modo UI", +flash_options:"Opciones Flash", +qt_options:"Opciones Quicktime", +wmp_options:"Opciones Windows media player", +rmp_options:"Opciones Real media player", +shockwave_options:"Opciones Shockwave", +autogotourl:"Ir a URL autom\u00E1t.", +center:"Centrado", +imagestatus:"Estado de imagen", +maintainaspect:"Mantener aspecto", +nojava:"No java", +prefetch:"Preb\u00FAsqueda", +shuffle:"Aleatorio", +console:"Consola", +numloop:"N\u00FAm. repeticiones", +controls:"Controles", +scriptcallbacks:"Script callbacks", +swstretchstyle:"Estilo estiramiento", +swstretchhalign:"Alin. H. Estiramiento", +swstretchvalign:"Alin. V. Estiramiento", +sound:"Sonido", +progress:"Progreso", +qtsrc:"QT Src", +qt_stream_warn:"Los recursos rtsp de Streaming deber\u00EDan a\u00F1adirse en el campo QT Src de la pesta\u00F1a avanzada.\nAdem\u00E1s deber\u00EDa a\u00F1adir una versi\u00F3n no Streaming en el campo Src.", +align_top:"Arriba", +align_right:"Derecha", +align_bottom:"Debajo", +align_left:"Izquierda", +align_center:"Centrado", +align_top_left:"Arriba Izda.", +align_top_right:"Arriba Dcha.", +align_bottom_left:"Debajo Izda.", +align_bottom_right:"Debajo Dcha.", +flv_options:"Opciones Video Flash", +flv_scalemode:"Modo escalado", +flv_buffer:"Buffer", +flv_startimage:"Imagen inicio", +flv_starttime:"Tiempo inicio", +flv_defaultvolume:"Volumen predet.", +flv_hiddengui:"Ocultar GUI", +flv_autostart:"Inicio auto.", +flv_loop:"Repetitivo", +flv_showscalemodes:"Mostrar modos escala", +flv_smoothvideo:"Video suave", +flv_jscallback:"JS Callback" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fi_dlg.js new file mode 100644 index 0000000..2ac2fca --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.media_dlg',{list:"Lista",file:"Tiedosto/URL",advanced:"Edistyneet",general:"Yleiset",title:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","align_top_left":"Yl\u00e4-vasemmalla","align_center":"Keskell\u00e4","align_left":"Vasemmalla","align_bottom":"Alhaalla","align_right":"Oikealla","align_top":"Ylh\u00e4\u00e4ll\u00e4","qt_stream_warn":"Streamatut rtsp-resurssit tulisi lis\u00e4t\u00e4 QT Src -kentt\u00e4\u00e4n edistynyt-v\u00e4lilehdelle.\nSinun kannattaa lis\u00e4t\u00e4 my\u00f6s ei-streamattu versio Src-kentt\u00e4\u00e4n.",qtsrc:"QT Src",progress:"Eteneminen",sound:"\u00c4\u00e4ni",swstretchvalign:"Venyt\u00e4 pystysuunnassa",swstretchhalign:"Venyt\u00e4 vaakasuunnassa",swstretchstyle:"Venytystyyli",scriptcallbacks:"Skriptin takaisinkutsut","align_top_right":"Yl\u00e4-oikealla",uimode:"UI-moodi",rate:"Rate",playcount:"Toistolaskin",defaultframe:"Oletusruutu",currentposition:"T\u00e4m\u00e4nhetkinen sijainti",currentmarker:"T\u00e4m\u00e4nhetkinen merkki",captioningid:"Otsikointi-id",baseurl:"Perus URL-osoitteet",balance:"Tasapaino",windowlessvideo:"Ikkunaton video",stretchtofit:"Venyt\u00e4 sopimaan",mute:"Hiljennys",invokeurls:"Kutsu URL-osoitteet",fullscreen:"Kokoruutu",enabled:"P\u00e4\u00e4ll\u00e4",autostart:"Automaattinen aloitus",volume:"\u00c4\u00e4nen voimakkuus",target:"Kohde",qtsrcchokespeed:"Choke-nopeus",href:"Href",endtime:"Lopetusaika",starttime:"Aloitusaika",enablejavascript:"Salli JavaScript",correction:"Ei korjausta",targetcache:"Kohteen v\u00e4limuisti",playeveryframe:"Toista jokainen ruutu",kioskmode:"Kioskitila",controller:"Ohjain",menu:"N\u00e4yt\u00e4 valikko",loop:"Silmukka",play:"Automaattinen toisto",hspace:"Vaakatason tila",vspace:"Pystytason tila","class_name":"Luokka",name:"Nimi",id:"Tunniste",type:"Tyyppi",size:"Mitat",preview:"Esikatselu","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",controls:"Kontrollit",numloop:"Toistojen m\u00e4\u00e4r\u00e4",console:"Konsoli",cache:"V\u00e4limuisti",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-muuttujat",base:"Perusta",bgcolor:"Tausta",wmode:"WMode",salign:"SAlign",align:"Tasaus",scale:"Skaala",quality:"Laatu",shuffle:"Sekoita",prefetch:"Esinouda",nojava:"Ei Javaa",maintainaspect:"S\u00e4ilyt\u00e4 kuvasuhde",imagestatus:"Kuvan tila",center:"Keskit\u00e4",autogotourl:"Mene automaattisesti URL:iin","shockwave_options":"Shockwaven asetukset","rmp_options":"Real media playerin asetukset","wmp_options":"Windows media playerin asetukset","qt_options":"Quicktimen asetukset","flash_options":"Flashin asetukset",hidden:"Piilotettu","align_bottom_left":"Ala-vasemmalla","align_bottom_right":"Ala-oikealla",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Upotetun \u00e4\u00e4nen asetukset",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 videoasetukset",altsource1:"Vaihtoehtoinen l\u00e4hde 1",altsource2:"Vaihtoehtoinen l\u00e4hde 2",preload:"Esilataa",poster:"Posteri",source:"L\u00e4hde","html5_audio_options":"\u00c4\u00e4niasetukset","preload_none":"\u00c4l\u00e4 esilataa","preload_metadata":"Esilataa videon metatiedot","preload_auto":"Anna k\u00e4ytt\u00e4j\u00e4n selaimen p\u00e4\u00e4tt\u00e4\u00e4",iframe:"iframe",embeddedaudio:"upotettu audio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fr_dlg.js new file mode 100644 index 0000000..90b0102 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.media_dlg',{list:"Liste",file:"Fichier / URL",advanced:"Avanc\u00e9",general:"G\u00e9n\u00e9ral",title:"Ins\u00e9rer / \u00e9diter un fichier m\u00e9dia","align_top_left":"En haut \u00e0 gauche","align_center":"Centr\u00e9","align_left":"Gauche","align_bottom":"Bas","align_right":"Droite","align_top":"Haut","qt_stream_warn":"Les ressources rtsp en streaming doivent \u00eatre ajout\u00e9es au champ \u00ab Source QT \u00bb dans l\'onglet avanc\u00e9.\nVous devriez aussi ajouter une version n\'\u00e9tant pas en streaming au champ \u00ab source QT \u00bb.",qtsrc:"Source QT",progress:"Progression",sound:"Son",swstretchvalign:"Stretch vertical",swstretchhalign:"Stretch horizontal",swstretchstyle:"Stretch style",scriptcallbacks:"Callback de script","align_top_right":"En haut \u00e0 droite",uimode:"Mode UI",rate:"Taux",playcount:"Compteur",defaultframe:"Image par d\u00e9faut",currentposition:"Position actuelle",currentmarker:"Marqueur actuel",captioningid:"ID sous-titrage",baseurl:"Adresse de base",balance:"Balance",windowlessvideo:"Vid\u00e9o sans fen\u00eatre",stretchtofit:"\u00c9tendre pour adapter la taille",mute:"Muet",invokeurls:"Invoquer URLs",fullscreen:"Plein \u00e9cran",enabled:"Activ\u00e9",autostart:"Lire automatiquement",volume:"Volume",target:"Cible",qtsrcchokespeed:"D\u00e9bit maximum",href:"Href",endtime:"Fin",starttime:"D\u00e9but",enablejavascript:"Activer le JavaScript",correction:"Pas de correction",targetcache:"Cache cible",playeveryframe:"Jouer toutes les images",kioskmode:"Mode kiosque",controller:"Contr\u00f4leur",menu:"Afficher le menu",loop:"Lire en boucle",play:"Lecture automatique",hspace:"Espacement horizontal",vspace:"Espacement vertical","class_name":"Classe",name:"Nom",id:"Id",type:"Type",size:"Dimensions",preview:"Pr\u00e9visualisation","constrain_proportions":"Conserver les proportions",controls:"Contr\u00f4les",numloop:"Nombre de tours",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variables flash",base:"Base",bgcolor:"Fond",wmode:"WMode",salign:"SAlign",align:"Alignement",scale:"\u00c9chelle",quality:"Qualit\u00e9",shuffle:"Al\u00e9atoire",prefetch:"Pr\u00e9chargement",nojava:"Pas java",maintainaspect:"Maintenir l\'aspect",imagestatus:"Statut de l\'image",center:"Centrer",autogotourl:"Aller automatiquement \u00e0 l\'URL","shockwave_options":"Options Shockwave","rmp_options":"Options Real media player","wmp_options":"Windows media player options","qt_options":"Options Quicktime","flash_options":"Options Flash",hidden:"Cach\u00e9","align_bottom_left":"En bas \u00e0 gauche","align_bottom_right":"En bas \u00e0 droite",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Options audio int\u00e9gr\u00e9es",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"vid\u00e9o","html5_video_options":"Options Vid\u00e9o HTML 5",altsource1:"Source alternative 1",altsource2:"Source alternative 2",preload:"Pr\u00e9chargement",poster:"Poster",source:"Source","html5_audio_options":"Options audio","preload_none":"Ne pas pr\u00e9charger","preload_metadata":"Pr\u00e9charger les m\u00e9tadonn\u00e9es vid\u00e9o","preload_auto":"Laisser le fureteur de l\'utilisateur d\u00e9cider",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/he_dlg.js new file mode 100644 index 0000000..4bd0058 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.media_dlg',{list:"\u05e8\u05e9\u05d9\u05de\u05d4",file:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5",advanced:"\u05de\u05ea\u05e7\u05d3\u05dd",general:"\u05db\u05dc\u05dc\u05d9",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","align_top_left":"\u05e9\u05de\u05d0\u05dc \u05dc\u05de\u05e2\u05dc\u05d4","align_center":"\u05de\u05e8\u05db\u05d6","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_bottom":"\u05dc\u05de\u05d8\u05d4","align_right":"\u05d9\u05de\u05d9\u05df","align_top":"\u05dc\u05de\u05e2\u05dc\u05d4","qt_stream_warn":"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",qtsrc:"QT Src",progress:"\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea",sound:"\u05e6\u05dc\u05d9\u05dc",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u05d9\u05de\u05d9\u05df \u05dc\u05de\u05e2\u05dc\u05d4",uimode:"\u05de\u05e6\u05d1 \u05ea\u05e6\u05d5\u05d2\u05d4",rate:"\u05e7\u05e6\u05d1",playcount:"\u05de\u05e1\u05e4\u05e8 \u05d4\u05e9\u05de\u05e2\u05d5\u05ea",defaultframe:"\u05e4\u05e8\u05d9\u05d9\u05dd \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",currentposition:"\u05de\u05d9\u05e7\u05d5\u05dd \u05e0\u05d5\u05db\u05d7\u05d9",currentmarker:"\u05e1\u05de\u05df \u05e0\u05d5\u05db\u05d7\u05d9",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"\u05de\u05ea\u05d7 \u05dc\u05d4\u05ea\u05d0\u05de\u05d4",mute:"\u05d4\u05e9\u05ea\u05e7",invokeurls:"Invoke URLs",fullscreen:"\u05de\u05e1\u05da \u05de\u05dc\u05d0",enabled:"\u05de\u05d5\u05e4\u05e2\u05dc",autostart:"\u05d4\u05ea\u05d7\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea",volume:"\u05e2\u05d5\u05e6\u05de\u05d4",target:"\u05de\u05d8\u05e8\u05d4",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u05d6\u05de\u05df \u05e1\u05d9\u05d5\u05dd",starttime:"\u05d6\u05de\u05df \u05d4\u05ea\u05d7\u05dc\u05d4",enablejavascript:"\u05d0\u05e4\u05e9\u05e8 JavaScript",correction:"\u05dc\u05dc\u05d0 \u05ea\u05d9\u05e7\u05d5\u05df",targetcache:"Target cache",playeveryframe:"\u05e0\u05d2\u05df \u05db\u05dc \u05e4\u05e8\u05d9\u05d9\u05dd",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8",loop:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05de\u05d7\u05d6\u05d5\u05e8\u05d9\u05ea",play:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e2\u05dd \u05d4\u05d8\u05e2\u05d9\u05e0\u05d4",hspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",name:"\u05e9\u05dd",id:"Id",type:"\u05e1\u05d5\u05d2",size:"\u05e8\u05d5\u05d7\u05d1 \u05d5\u05d2\u05d5\u05d1\u05d4",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4","constrain_proportions":"\u05e9\u05de\u05d5\u05e8 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"\u05de\u05e7\u05d5\u05e8",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",wmode:"WMode",salign:"SAlign",align:"\u05d9\u05d9\u05e9\u05d5\u05e8",scale:"Scale",quality:"\u05d0\u05d9\u05db\u05d5\u05ea \u05d4\u05e1\u05e8\u05d8\u05d5\u05df",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"\u05de\u05e8\u05db\u05d6",autogotourl:"Auto goto URL","shockwave_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Shockwave","rmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e0\u05d2\u05df Real Media","wmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05d3\u05d9\u05d4 \u05e4\u05dc\u05d9\u05d9\u05e8","qt_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Quicktime","flash_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e4\u05dc\u05d0\u05e9",hidden:"Hidden","align_bottom_left":"\u05dc\u05de\u05d8\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","align_bottom_right":"\u05dc\u05de\u05d8\u05d4 \u05de\u05d9\u05de\u05d9\u05df",flash:"Flash",quicktime:"quicktime","embedded_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5 \u05de\u05e9\u05d5\u05dc\u05d1",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5 HTML5",altsource1:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 1",altsource2:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 2",preload:"Preload",poster:"\u05e4\u05d5\u05e1\u05d8\u05e8",source:"\u05de\u05e7\u05d5\u05e8","html5_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5","preload_none":"Don\'t Preload","preload_metadata":"\u05d8\u05e2\u05df \u05de\u05d8\u05d4-\u05d8\u05d0\u05d2 \u05dc\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5","preload_auto":"\u05d0\u05ea\u05df \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05dc\u05d1\u05d7\u05d5\u05e8",iframe:"iframe",embeddedaudio:"embeddedaudio "}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/hu_dlg.js new file mode 100644 index 0000000..b42e07a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.media_dlg',{list:"Lista",file:"F\u00e1jl/URL",advanced:"Halad\u00f3",general:"\u00c1ltal\u00e1nos",title:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","align_top_left":"Bal-fent","align_center":"K\u00f6z\u00e9pen","align_left":"Balra","align_bottom":"Lent","align_right":"Jobbra","align_top":"Fent","qt_stream_warn":"Streamelt rtsp forr\u00e1sok a QT Src mez\u0151be val\u00f3k a halad\u00f3 lapon.\nHozz\u00e1 kellene adnia egy nem streamelt verzi\u00f3t a Src mez\u0151ben.",qtsrc:"QT Src",progress:"Folyamat",sound:"Hang",swstretchvalign:"Ny\u00fajt\u00e1s F-igaz\u00edt\u00e1s",swstretchhalign:"Ny\u00fajt\u00e1s V-igaz\u00edt\u00e1s",swstretchstyle:"Ny\u00fajt\u00e1s st\u00edlusa",scriptcallbacks:"Script callbacks","align_top_right":"Jobbra fent",uimode:"UI M\u00f3d",rate:"\u00c9rt\u00e9kel\u00e9s",playcount:"Lej\u00e1tsz\u00e1ssz\u00e1m",defaultframe:"Alap\u00e9rtelmezett frame",currentposition:"Aktu\u00e1lis poz\u00edci\u00f3",currentmarker:"Aktu\u00e1lis marker",captioningid:"Captioning id",baseurl:"Alap URL",balance:"Balance",windowlessvideo:"Ablak n\u00e9lk\u00fcli vide\u00f3",stretchtofit:"Ny\u00fajtva igaz\u00edt\u00e1s",mute:"N\u00e9ma",invokeurls:"URL-ek bevon\u00e1sa",fullscreen:"Teljes k\u00e9perny\u0151",enabled:"Enged\u00e9lyezve",autostart:"Automatikus kezd\u00e9s",volume:"Hanger\u0151",target:"C\u00e9l",qtsrcchokespeed:"Folyt\u00e1s sebess\u00e9ge",href:"Href",endtime:"Z\u00e1r\u00f3 id\u0151",starttime:"Kezd\u00e9si id\u0151",enablejavascript:"JavaScript enged\u00e9se",correction:"Nincs jav\u00edt\u00e1s",targetcache:"C\u00e9l cache",playeveryframe:"Minden kocka lej\u00e1tsz\u00e1sa",kioskmode:"Kiosk m\u00f3d",controller:"Vez\u00e9rl\u0151",menu:"Men\u00fc mutat\u00e1sa",loop:"Ism\u00e9tl\u00e9s",play:"Automatikus lej\u00e1tsz\u00e1s",hspace:"V\u00edzszintes-t\u00e1v",vspace:"F\u00fcgg\u0151leges-t\u00e1v","class_name":"Oszt\u00e1ly",name:"N\u00e9v",id:"ID",type:"T\u00edpus",size:"M\u00e9retek",preview:"El\u0151n\u00e9zet","constrain_proportions":"Ar\u00e1nytart\u00e1s",controls:"Kezel\u0151k",numloop:"Ism\u00e9tl\u00e9ssz\u00e1m",console:"Konzol",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"H\u00e1tt\u00e9r",wmode:"WM\u00f3d",salign:"SElrendez\u00e9s",align:"Elrendez\u00e9s",scale:"Nagy\u00edt\u00e1s",quality:"Min\u0151s\u00e9g",shuffle:"V\u00e9letlenszer\u0171",prefetch:"El\u0151t\u00f6lt\u00e9s",nojava:"Nincs Java",maintainaspect:"Ar\u00e1nytart\u00e1s",imagestatus:"K\u00e9p \u00e1llapot",center:"K\u00f6z\u00e9pre",autogotourl:"Automatikus URL-re ugr\u00e1s","shockwave_options":"Shockwave be\u00e1ll\u00edt\u00e1sai","rmp_options":"Real Media Player be\u00e1ll\u00edt\u00e1sai","wmp_options":"Windows Media Player be\u00e1ll\u00edt\u00e1sai","qt_options":"Quicktime be\u00e1ll\u00edt\u00e1sai","flash_options":"Flash be\u00e1ll\u00edt\u00e1sai",hidden:"Rejtett","align_bottom_left":"Bal-lent","align_bottom_right":"Bal-jobbra",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Be\u00e1gyazott hang be\u00e1ll\u00edt\u00e1sok",windowsmedia:"windows m\u00e9dia",realmedia:"realmedia",shockwave:"shockwave",audio:"hang",video:"vide\u00f3","html5_video_options":"HTML5 Vide\u00f3 Be\u00e1ll\u00edt\u00e1sok",altsource1:"Alternat\u00edv forr\u00e1s 1",altsource2:"Alternat\u00edv forr\u00e1s 2",preload:"El\u0151t\u00f6lt\u00e9s",poster:"Hozz\u00e1ad\u00f3",source:"Forr\u00e1s","html5_audio_options":"Audi\u00f3 Be\u00e1ll\u00edt\u00e1sok","preload_none":"Nincs el\u0151reolvas\u00e1s","preload_metadata":"Vide\u00f3 metaadatok el\u0151reolvas\u00e1sa","preload_auto":"Hagyjuk a felhaszn\u00e1l\u00f3 b\u00f6ng\u00e9sz\u0151j\u00e9nek eld\u00f6nteni",iframe:"iframe (keret)",embeddedaudio:"be\u00e1gyazott hang"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/it_dlg.js new file mode 100644 index 0000000..f335ede --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.media_dlg',{list:"Lista",file:"File/URL",advanced:"Avanzate",general:"Generale",title:"Inserisci/modifica file multimediale","align_top_left":"Alto a sinistra","align_center":"Centro","align_left":"Sinistra","align_bottom":"Basso","align_right":"Destra","align_top":"Alto","qt_stream_warn":"Le risorse rstp \'streamed\' devono essere aggiunte al campo Sorgente QT nella tabella Avanzate.\nSi dovrebbe inserire anche una versione non \'streamed\' al campo Sorgente..",qtsrc:"Sorgente QT",progress:"Avanzamento",sound:"Suono",swstretchvalign:"Tratto V-Allineamento",swstretchhalign:"Tratto H-Allineamento",swstretchstyle:"Stile Tratto",scriptcallbacks:"Script richiamato","align_top_right":"Alto a destra",uimode:"Modalit\u00e0 Interfaccia Utente",rate:"Qualit\u00e0",playcount:"Conteggio esecuzione",defaultframe:"Frame predefinito",currentposition:"Posizione corrente",currentmarker:"Indicatore corrente",captioningid:"Didascalia dell\'Id",baseurl:"URL base",balance:"Bilanciamento",windowlessvideo:"Video senza finestra",stretchtofit:"Adatta dimensioni",mute:"Muto",invokeurls:"Invoca URLs",fullscreen:"Tutto schermo",enabled:"Abilitato",autostart:"Avvio automatico",volume:"Volume",target:"Target",qtsrcchokespeed:"Velocit\u00e0 cursore",href:"Href",endtime:"Ora fine",starttime:"Ora inizio",enablejavascript:"Abilita JavaScript",correction:"Nessuna Correzione",targetcache:"Cache del target",playeveryframe:"Esegui ogni frame",kioskmode:"Modalit\u00e0 Kiosk",controller:"Controller",menu:"Mostra menu",loop:"Riproduzione ciclica",play:"Esecuzione automatica",hspace:"H-Spazio",vspace:"V-Spazio","class_name":"Classe",name:"Nome",id:"Id",type:"Tipo",size:"Dimensioni",preview:"Anteprima","constrain_proportions":"Mantieni Proporzioni",controls:"Controlli",numloop:"Numero Cicli",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Sfondo",wmode:"WMode",salign:"SAlign",align:"Allineamento",scale:"Scala",quality:"Qualit\u00e0",shuffle:"Shuffle",prefetch:"Precaricamento",nojava:"No java",maintainaspect:"Mantieni Aspetto",imagestatus:"Stato Immagine",center:"Centra",autogotourl:"Vai a URL automatico","shockwave_options":"Opzioni Shockwave","rmp_options":"Opzioni Real media player","wmp_options":"Opzioni Windows media player","qt_options":"Opzioni Quicktime","flash_options":"Opzioni Flash",hidden:"Nascosto","align_bottom_left":"Basso a Sinistra","align_bottom_right":"Basso a Destra",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opzioni Audio Embedded",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opzioni Video HTML5",altsource1:"Sorgente alternativa 1",altsource2:"Sorgente alternativa 2",preload:"Precarica",poster:"Poster",source:"Sorgente","html5_audio_options":"Opzioni Audio","preload_none":"Non Precaricare","preload_metadata":"Precarica i metadati video","preload_auto":"Lascia decidere al browser dell\'utente",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ja_dlg.js new file mode 100644 index 0000000..9752ca2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.media_dlg',{list:"\u4e00\u89a7",file:"\u30d5\u30a1\u30a4\u30eb\u3084URL",advanced:"\u8a73\u7d30",general:"\u4e00\u822c",title:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u592e","align_left":"\u5de6","align_bottom":"\u4e0b","align_right":"\u53f3","align_top":"\u4e0a","qt_stream_warn":"RTSP\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30ea\u30bd\u30fc\u30b9\u3092\u300c\u9ad8\u5ea6\u300d\u306e\u30bf\u30d6\u306e\u300cQT\u306e\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u307e\u305f\u3001\u300c\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u306f\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30fc\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002",qtsrc:"QT\u306e\u30bd\u30fc\u30b9",progress:"\u9032\u5c55",sound:"\u30b5\u30a6\u30f3\u30c9",swstretchvalign:"\u5782\u76f4\u306e\u914d\u7f6e",swstretchhalign:"\u6c34\u5e73\u306e\u914d\u7f6e",swstretchstyle:"\u4f38\u7e2e\u306e\u30b9\u30bf\u30a4\u30eb",scriptcallbacks:"\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af","align_top_right":"\u53f3\u4e0a",uimode:"UI\u3092\u8868\u793a\u3059\u308b\u30e2\u30fc\u30c9",rate:"\u518d\u751f\u30ec\u30fc\u30c8",playcount:"\u518d\u751f\u56de\u6570",defaultframe:"\u521d\u671f\u72b6\u614b\u306e\u30d5\u30ec\u30fc\u30e0",currentposition:"\u518d\u751f\u4f4d\u7f6e(\u79d2\u5358\u4f4d)",currentmarker:"\u30de\u30fc\u30ab\u30fc\u756a\u53f7",captioningid:"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u8868\u793a\u8981\u7d20ID",baseurl:"\u57fa\u6e96\u306eURL",balance:"\u30b9\u30c6\u30ec\u30aa\u306e\u30d0\u30e9\u30f3\u30b9",windowlessvideo:"\u30a6\u30a3\u30f3\u30c9\u30a6\u306a\u3057\u306e\u52d5\u753b",stretchtofit:"\u5408\u308f\u305b\u3066\u62e1\u5927",mute:"\u6d88\u97f3",invokeurls:"URL\u3092\u958b\u304f",fullscreen:"\u5168\u753b\u9762",enabled:"\u6709\u52b9",autostart:"\u81ea\u52d5\u518d\u751f",volume:"\u97f3\u91cf",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",qtsrcchokespeed:"\u518d\u751f\u30c7\u30fc\u30bf\u30ec\u30fc\u30c8",href:"\u30ea\u30f3\u30af\u5148URL",endtime:"\u7d42\u4e86\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"JavaScript\u3092\u6709\u52b9",correction:"\u8a02\u6b63\u306a\u3057",targetcache:"\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5",playeveryframe:"\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u518d\u751f",kioskmode:"Kiosk\u30e2\u30fc\u30c9",controller:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",menu:"\u30e1\u30cb\u30e5\u30fc\u3092\u8868\u793a",loop:"\u7e70\u308a\u8fd4\u3057",play:"\u81ea\u52d5\u518d\u751f",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d","class_name":"\u30af\u30e9\u30b9",name:"\u540d\u524d",id:"ID",type:"\u30bf\u30a4\u30d7",size:"\u5bf8\u6cd5",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc","constrain_proportions":"\u7e26\u6a2a\u6bd4\u3092\u7dad\u6301",controls:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",numloop:"\u7e70\u308a\u8fd4\u3057\u306e\u56de\u6570",console:"\u30b3\u30f3\u30bd\u30fc\u30eb",cache:"\u30ad\u30e3\u30c3\u30b7\u30e5",autohref:"\u81ea\u52d5\u8aad\u8fbc",liveconnect:"SWLiveConnect\u5c5e\u6027",flashvars:"Flash Vars",base:"Base",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u914d\u7f6e",scale:"\u4f38\u7e2e",quality:"\u54c1\u8cea",shuffle:"\u30b7\u30e3\u30c3\u30d5\u30eb",prefetch:"\u5148\u8aad\u307f",nojava:"Java\u3092\u7981\u6b62",maintainaspect:"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",imagestatus:"\u753b\u50cf\u306e\u72b6\u614b",center:"\u4e2d\u592e\u63c3\u3048",autogotourl:"URL\u306b\u81ea\u52d5\u79fb\u52d5","shockwave_options":"Shockwave\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","rmp_options":"Real media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","wmp_options":"Windows media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","qt_options":"Quicktime\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","flash_options":"Flash\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",hidden:"\u975e\u8868\u793a","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u57cb\u3081\u8fbc\u307fAudio\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",windowsmedia:"Windows\u30e1\u30c7\u30a3\u30a2",realmedia:"realmedia",shockwave:"shockwave",audio:"\u30aa\u30fc\u30c7\u30a3\u30aa",video:"\u52d5\u753b","html5_video_options":"HTML5 Video\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",altsource1:"\u4ee3\u66ff\u30bd\u30fc\u30b91",altsource2:"\u4ee3\u66ff\u30bd\u30fc\u30b92",preload:"preload\u5c5e\u6027",poster:"poster\u5c5e\u6027",source:"HTML","html5_audio_options":"Audio \u30aa\u30d7\u30b7\u30e7\u30f3","preload_none":"\u5148\u8aad\u307f\u3057\u306a\u3044","preload_metadata":"\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u5148\u8aad\u307f","preload_auto":"\u30e6\u30fc\u30b6\u30fc\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u306b\u5f93\u3046",iframe:"iframe",embeddedaudio:"\u57cb\u3081\u8fbc\u307f\u97f3\u58f0"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/nl_dlg.js new file mode 100644 index 0000000..68ae6b0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.media_dlg',{list:"Lijst",file:"Bestand/URL",advanced:"Geavanceerd",general:"Algemeen",title:"Media invoegen/bewerken","align_top_left":"Linksboven","align_center":"Centreren","align_left":"Links","align_bottom":"Onder","align_right":"Rechts","align_top":"Boven","qt_stream_warn":"Gestreamde RTSP bronnen dienen op het tabblad geavanceerd bij Quicktime bron te worden opgegeven.\nDe niet-gestreamde versie kan dan bij het tabblad algemeen worden opgegeven.",qtsrc:"Quicktime bron",progress:"Voortgang",sound:"Geluid",swstretchvalign:"V-Schaal",swstretchhalign:"H-Schaal",swstretchstyle:"Schaal",scriptcallbacks:"Script callbacks","align_top_right":"Rechtsboven",uimode:"UI Modus",rate:"Snelheid",playcount:"Afspeelteller",defaultframe:"Standaard frame",currentposition:"Huidige positie",currentmarker:"Huidige markering",captioningid:"Ondertiteling id",baseurl:"Basis URL",balance:"Balans",windowlessvideo:"Video zonder venster",stretchtofit:"Passend maken",mute:"Dempen",invokeurls:"URLs laden",fullscreen:"Volledig scherm",enabled:"Ingeschakeld",autostart:"Automatisch afspelen",volume:"Volume",target:"Doel",qtsrcchokespeed:"Chokesnelheid",href:"Href",endtime:"Eindtijd",starttime:"Starttijd",enablejavascript:"JavaScript Inschakelen",correction:"Geen correctie",targetcache:"Doelcache",playeveryframe:"Elk frame afspelen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Menu weergeven",loop:"Herhalen",play:"Automatisch afspelen",hspace:"H-Ruimte",vspace:"V-Ruimte","class_name":"Klasse",name:"Naam",id:"Id",type:"Type",size:"Afmetingen",preview:"Voorbeeld","constrain_proportions":"Verhouding bewaren",controls:"Bediening",numloop:"Aantal herhalingen",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variabelen",base:"Basis",bgcolor:"Achtergrond",wmode:"WMode",salign:"Schaaluitlijning",align:"Uitlijning",scale:"Schaal",quality:"Kwaliteit",shuffle:"Willekeurige volgorde",prefetch:"Voorladen",nojava:"Geen Java",maintainaspect:"Verhouding bewaren",imagestatus:"Afbeeldingstatus",center:"Centreren",autogotourl:"Automatisch naar URL","shockwave_options":"Shockwave opties","rmp_options":"Real Media Player Opties","wmp_options":"Windows Media Player Opties","qt_options":"Quicktime opties","flash_options":"Flash opties",hidden:"Verborgen","align_bottom_left":"Linksonder","align_bottom_right":"Rechtsonder",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Ge\u00efntegreerd Geluid Opties",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"geluid",video:"video","html5_video_options":"HTML5 Video Opties",altsource1:"Alternatieve bron 1",altsource2:"Alternatieve bron 2",preload:"Voorladen",poster:"Poster",source:"Bron","html5_audio_options":"Audio Opties","preload_none":"Niet voorladen","preload_metadata":"Video metadata voorladen","preload_auto":"Laat browser beslissen",iframe:"iframe",embeddedaudio:"ge\u00efntegreerd geluid"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pl_dlg.js new file mode 100644 index 0000000..9e054b2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.media_dlg',{list:"Lista",file:"Plik/URL",advanced:"Zaawansowane",general:"G\u0142\u00f3wne",title:"Wstaw/Edytuj wbudowane media","align_top_left":"G\u00f3rny lewy","align_center":"\u015arodek","align_left":"Lewo","align_bottom":"D\u00f3\u0142","align_right":"Prawo","align_top":"G\u00f3ra","qt_stream_warn":"Emitowane \u017ar\u00f3d\u0142a rtsp powinny by\u0107 dodane do pola QT Src w zak\u0142adce zaawansowane.nPowiniene\u015b r\u00f3wnie\u017c doda\u0107 niestrumieniow\u0105 wersj\u0119 do pola Src.",qtsrc:"QT Src",progress:"Post\u0119p",sound:"D\u017awi\u0119k",swstretchvalign:"Wyr\u00f3wnaj w pionie",swstretchhalign:"Wyr\u00f3wnaj w poziomie",swstretchstyle:"Styl rozci\u0105gania",scriptcallbacks:"Funkcje zwrotne skryptu","align_top_right":"G\u00f3rny prawy",uimode:"Tryb UI",rate:"Tempo",playcount:"Ilo\u015b\u0107 odtworze\u0144",defaultframe:"Domy\u015blna ramka",currentposition:"Aktualna pozycja",currentmarker:"Aktualny znacznik",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balans",windowlessvideo:"Wideo bez okienka",stretchtofit:"Rozci\u0105gnij aby dopasowa\u0107",mute:"Wycisz",invokeurls:"Odwo\u0142aj si\u0119 do URLi",fullscreen:"Pe\u0142ny ekran",enabled:"Aktywny",autostart:"Auto start",volume:"G\u0142o\u015bno\u015b\u0107",target:"Cel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Ko\u0144cowy czas",starttime:"Pocz\u0105tkowy czas",enablejavascript:"W\u0142\u0105cz JavaScript",correction:"Bez korekcji",targetcache:"Target cache",playeveryframe:"Odtwarzaj ka\u017cd\u0105 ramk\u0119",kioskmode:"Tryb kiosku",controller:"Kontroler",menu:"Poka\u017c menu",loop:"Zap\u0119tlenie",play:"Autoodtwarzanie",hspace:"H-Space",vspace:"V-Space","class_name":"Klasa",name:"Nazwa",id:"Id",type:"Typ",size:"Wymiary",preview:"Podgl\u0105d","constrain_proportions":"Zachowaj proporcje",controls:"Controls",numloop:"Liczba powt\u00f3rze\u0144",console:"Konsola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Baza",bgcolor:"T\u0142o",wmode:"WMode",salign:"SAlign",align:"Wyr\u00f3wnaj",scale:"Skala",quality:"Jako\u015b\u0107",shuffle:"Losuj",prefetch:"Prze\u0142aduj",nojava:"Bez javy",maintainaspect:"Utrzymaj aspekt",imagestatus:"Obraz statusu",center:"Wy\u015brodkuj",autogotourl:"Automatycznie przejd\u017a pod adres","shockwave_options":"Opcje Shockwave","rmp_options":"Opcje Real media player","wmp_options":"Opcje Windows media player","qt_options":"Opcje Quicktime","flash_options":"Opcje flasha",hidden:"Ukryty","align_bottom_left":"Dolny lewy","align_bottom_right":"Dolny prawy",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opcje Embedded Audio",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opcje HTML5 Video",altsource1:"Alternatywne \u017ar\u00f3d\u0142o 1",altsource2:"Alternatywne \u017ar\u00f3d\u0142o 2",preload:"Prze\u0142aduj",poster:"Obraz",source:"\u0179r\u00f3d\u0142o","html5_audio_options":"Opcje audio","preload_none":"Nie \u0142\u0105duj wst\u0119pnie","preload_metadata":"\u0141aduj wst\u0119pnie metadane video","preload_auto":"Pozw\u00f3l zdecydowa\u0107 przegl\u0105darce u\u017cytkownika",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pt_dlg.js new file mode 100644 index 0000000..f578cd7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avan\u00e7ado",general:"Geral",title:"Inserir/Editar m\u00eddia embutida","align_top_left":"Topo esquerda","align_center":"Centro","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Direita","align_top":"Topo","qt_stream_warn":"Fluxos de recursos RTSP devem ser acrescentados ao campo QT Src no Modo Avan\u00e7ado.\nUma vers\u00e3o sem fluxo tamb\u00e9m deve ser acrescentada ao campo Src.",qtsrc:"QT Src",progress:"Progresso",sound:"Som",swstretchvalign:"For\u00e7ar V-Alinhamento",swstretchhalign:"For\u00e7ar H-Alinhamento",swstretchstyle:"For\u00e7ar Estilo",scriptcallbacks:"Retornos de chamada de script","align_top_right":"Topo direita",uimode:"Modo UI",rate:"Taxa",playcount:"Contagem de ouvintes",defaultframe:"Frame padr\u00e3o",currentposition:"Posi\u00e7\u00e3o atual",currentmarker:"Marcador atual",captioningid:"Id de legenda",baseurl:"URL Base",balance:"Stereo",windowlessvideo:"V\u00eddeo sem janela",stretchtofit:"Estender",mute:"Mudo",invokeurls:"Chamar URLs",fullscreen:"Tela inteira",enabled:"Ativado",autostart:"Execu\u00e7\u00e3o autom\u00e1tica",volume:"Volume",target:"Alvo",qtsrcchokespeed:"Diminuir Velocidade",href:"Link",endtime:"Hora do fim",starttime:"Hora de in\u00edcio",enablejavascript:"Permitir JavaScript",correction:"Sem correc\u00e7\u00f5es",targetcache:"Cache alvo",playeveryframe:"Executar todas as frames",kioskmode:"Modo Kiosk",controller:"Controlador",menu:"Mostrar menu",loop:"Repeti\u00e7\u00e3o autom\u00e1tica",play:"Execu\u00e7\u00e3o autom\u00e1tica",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical","class_name":"Classe",name:"Nome",id:"ID",type:"Tipo",size:"Dimens\u00f5es",preview:"Previs\u00e3o","constrain_proportions":"Manter propor\u00e7\u00f5es",controls:"Controles",numloop:"Repeti\u00e7\u00f5es",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Fundo",wmode:"WMode",salign:"SAlign",align:"Alinhamento",scale:"Escala",quality:"Qualidade",shuffle:"Aleat\u00f3rio",prefetch:"Pr\u00e9-buscar",nojava:"Sem Java",maintainaspect:"Manter aspecto",imagestatus:"Status da imagem",center:"Centro",autogotourl:"Auto abrir URL","shockwave_options":"Op\u00e7\u00f5es Shockwave","rmp_options":"Op\u00e7\u00f5es Real Media Player","wmp_options":"Op\u00e7\u00f5es Windows Media Player","qt_options":"Op\u00e7\u00f5es Quicktime","flash_options":"Op\u00e7\u00f5es Flash",hidden:"Oculto","align_bottom_left":"Abaixo esquerda","align_bottom_right":"Abaixo direita",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Op\u00e7\u00f5es de \u00c1udio Embutido",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockware",audio:"\u00e1udio",video:"v\u00eddeo","html5_video_options":"Op\u00e7\u00f5es de v\u00eddeo HTML5",altsource1:"C\u00f3digo alternativo 1",altsource2:"C\u00f3digo alternativo 2",preload:"Pr\u00e9-carregar",poster:"Poster",source:"Fonte","html5_audio_options":"Op\u00e7\u00f5es de Audio","preload_none":"N\u00e3o Pr\u00e9-carregar","preload_metadata":"Pr\u00e9-carregar metadata de v\u00eddeo","preload_auto":"Deixar que navegador do usu\u00e1rio decida",iframe:"iframe",embeddedaudio:"\u00e1udio embutido"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ru_dlg.js new file mode 100644 index 0000000..fbb186b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0410\u0434\u0440\u0435\u0441",advanced:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",general:"\u041e\u0431\u0449\u0435\u0435",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043b\u0438\u043f\u0430","align_top_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_center":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","qt_stream_warn":"\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 QT Src.",qtsrc:"QT Src",progress:"\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0412\u0435\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchhalign:"\u0413\u043e\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchstyle:"\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u0435",scriptcallbacks:"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430","align_top_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",uimode:"\u0420\u0435\u0436\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430",rate:"\u0420\u0435\u0439\u0442\u0438\u043d\u0433",playcount:"\u0429\u0435\u0442\u0447\u0438\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439",defaultframe:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u0434\u0440",currentposition:"\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f",currentmarker:"\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0418\u043c\u044f \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432",baseurl:"\u0411\u0430\u0437\u043e\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u041e\u043a\u043e\u043d\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e",stretchtofit:"\u041f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430",mute:"\u0411\u0435\u0437 \u0437\u0432\u0443\u043a\u0430",invokeurls:"\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441",fullscreen:"\u041d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",enabled:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e",autostart:"\u0410\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a",volume:"\u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c",target:"\u0426\u0435\u043b\u044c",qtsrcchokespeed:"Choke speed",href:"\u0421\u0441\u044b\u043b\u043a\u0430",endtime:"\u0412\u0440\u0435\u043c\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f",starttime:"\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430",enablejavascript:"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438",targetcache:"\u041a\u044d\u0448 \u0446\u0435\u043b\u0438",playeveryframe:"\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440",kioskmode:"\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a",controller:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",menu:"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440",play:"\u0410\u0432\u0442\u0437\u0430\u043f\u0443\u0441\u043a",hspace:"\u0413\u043e\u0440. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441\u0441",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",id:"\u0418\u043c\u044f",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u044b",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",numloop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044b",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u044d\u0448",autohref:"\u0410\u0432\u0442\u043e-\u0441\u0441\u044b\u043b\u043a\u0430",liveconnect:"SWLiveConnect",flashvars:"Flash \u043a\u043e\u043c\u0430\u043d\u0434\u044b",base:"Base",bgcolor:"\u0424\u043e\u043d",wmode:"\u041e\u043a\u043d\u043e",salign:"\u0412\u044b\u0440-\u0435",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",scale:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043e\u0441",prefetch:"\u0423\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",center:"\u0426\u0435\u043d\u0442\u0440",autogotourl:"\u0410\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441","shockwave_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Shockwave","rmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Real Media","wmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Windows Media","qt_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Quicktime","flash_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Flash",hidden:"\u0421\u043a\u0440\u044b\u0442\u044b\u0439","align_bottom_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",flash:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Flash \u0444\u0430\u0439\u043b\u0430",quicktime:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Quick Time \u0444\u0430\u0439\u043b\u0430","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0434\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e",windowsmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Windows Media \u0444\u0430\u0439\u043b\u0430",realmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Real Media \u0444\u0430\u0439\u043b\u0430",shockwave:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Shockwave \u0444\u0430\u0439\u043b\u0430",audio:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430",video:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0432\u0438\u0434\u0435\u043e \u0444\u0430\u0439\u043b\u0430","html5_video_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b HTML5 Video",altsource1:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 2",preload:"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a","html5_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0443\u0434\u0438\u043e","preload_none":"\u0411\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 IFrame",embeddedaudio:"\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0417\u0432\u0443\u043a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/sv_dlg.js new file mode 100644 index 0000000..4f71780 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.media_dlg',{list:"Lista",file:"Fil/URL",advanced:"Avancerat",general:"Generellt",title:"Infoga/redigera inb\u00e4ddad media","align_top_left":"Top left","align_center":"Center","align_left":"V\u00e4nster","align_bottom":"Botten","align_right":"H\u00f6ger","align_top":"Toppen","qt_stream_warn":"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",qtsrc:"QT Src",progress:"Progress",sound:"Ljud",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullsk\u00e4rm",enabled:"Aktiverad",autostart:"Starta automatiskt",volume:"Volym",target:"M\u00e5l",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Slut tid",starttime:"Start tid",enablejavascript:"Aktivera JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Spela varje bildruta",kioskmode:"Kiosk mode",controller:"Controller",menu:"Visa menyn",loop:"Loopa",play:"Spela upp automatiskt",hspace:"H-Space",vspace:"V-Space","class_name":"Klass",name:"Namn",id:"Id",type:"Typ",size:"Dimensioner",preview:"F\u00f6rhandsvisning","constrain_proportions":"Bibeh\u00e5ll proportionerna",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrundsf\u00e4rg",wmode:"WMode",salign:"SAlign",align:"Justera",scale:"Skala",quality:"Kvalit\u00e9",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Bild status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Inst\u00e4llningar f\u00f6r Shockwave","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"G\u00f6md","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right",flash:"flash",quicktime:"quicktime ","embedded_audio_options":"Inst\u00e4llningar f\u00f6r inb\u00e4ddatljud",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave ",audio:"ljud",video:"video","html5_video_options":"HTML5 Filmegenskaper",altsource1:"Alternativk\u00e4lla 1",altsource2:"Alternativk\u00e4lla 2",preload:"F\u00f6rladda",poster:"Poster",source:"K\u00e4lla","html5_audio_options":"Ljudinst\u00e4llningar","preload_none":"F\u00f6rladda inte","preload_metadata":"F\u00f6rladda metadata","preload_auto":"L\u00e5t webbl\u00e4saren v\u00e4lja",iframe:"iframe",embeddedaudio:"inb\u00e4ddat ljud"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/tr_dlg.js new file mode 100644 index 0000000..a939d40 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.media_dlg',{list:"Listele",file:"Dosya/URL",advanced:"Geli\u015fmi\u015f",general:"Genel",title:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","align_top_left":"Sol \u00fcst","align_center":"Orta","align_left":"Sol","align_bottom":"Alt","align_right":"Sa\u011f","align_top":"\u00dcst","qt_stream_warn":"Ak\u0131\u015f rtsp kaynaklar\u0131 geli\u015fmi\u015f alt\u0131ndaki QT Kay. alan\u0131na girilmeli.\nKay. alan\u0131na ayr\u0131ca ak\u0131\u015fkan olmayan eklenir.",qtsrc:"QT Kay.",progress:"\u0130lerle",sound:"Ses",swstretchvalign:"Esnetme D-Hiza",swstretchhalign:"Esnetme Y-Hiza",swstretchstyle:"Esnetme stili",scriptcallbacks:"Script \u00e7a\u011f\u0131r","align_top_right":"Sa\u011f \u00fcst",uimode:"UI Modu",rate:"Oran",playcount:"Oynatma say\u0131s\u0131",defaultframe:"Varsay\u0131lan \u00e7er\u00e7eve",currentposition:"Se\u00e7ili konum",currentmarker:"Se\u00e7ili i\u015faret\u00e7i",captioningid:"Ba\u015fl\u0131k id",baseurl:"Ge\u00e7erli URL",balance:"Denge",windowlessvideo:"Penceresiz video",stretchtofit:"S\u0131\u011facak \u015fekilde boyutland\u0131r",mute:"Sessiz",invokeurls:"Ba\u015flatma URL\'si",fullscreen:"Tam ekran",enabled:"Aktif",autostart:"Otomatik ba\u015flat",volume:"Ses d\u00fczeyi",target:"Hedef",qtsrcchokespeed:"S\u0131k\u0131\u015ft\u0131rma h\u0131z\u0131",href:"Href",endtime:"Biti\u015f zaman\u0131",starttime:"Ba\u015flang\u0131\u00e7 zaman\u0131",enablejavascript:"Javascript Aktif",correction:"D\u00fczeltme yok",targetcache:"Hedef \u00f6nbellek",playeveryframe:"Her \u00e7er\u00e7eveyi oynat",kioskmode:"Kiosk modu",controller:"Kontroller",menu:"Men\u00fcy\u00fc g\u00f6ster",loop:"D\u00f6nd\u00fcr",play:"Otomatik oynat",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk","class_name":"S\u0131n\u0131f",name:"\u0130sim",id:"Id",type:"Tip",size:"Boyutlar",preview:"\u00d6nizleme","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",controls:"Kontroller",numloop:"D\u00f6ng\u00fc say\u0131s\u0131",console:"Konsol",cache:"\u00d6nbellek",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash de\u011fi\u015fkeni",base:"Taban",bgcolor:"Arkaplan",wmode:"WModu",salign:"SHizala",align:"Hizala",scale:"\u00d6l\u00e7ek",quality:"Kalite",shuffle:"Kar\u0131\u015ft\u0131r",prefetch:"\u00d6n belle\u011fe al",nojava:"Java yok",maintainaspect:"Orant\u0131y\u0131 koru",imagestatus:"Resim durumu",center:"Orta",autogotourl:"URL\'e otomatik git","shockwave_options":"Shockware se\u00e7enekleri","rmp_options":"Real media player se\u00e7enekleri","wmp_options":"Windows media player se\u00e7enekleri","qt_options":"Quicktime se\u00e7enekleri","flash_options":"Flash se\u00e7enekleri",hidden:"Gizli","align_bottom_left":"Sol alt","align_bottom_right":"Sa\u011f alt",flash:"flash",quicktime:"quicktime","embedded_audio_options":"G\u00f6m\u00fcl\u00fc Ses Ayarlar\u0131",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"ses",video:"video","html5_video_options":"HTML5 Video Ayarlar\u0131",altsource1:"Alternatif Kaynak 1",altsource2:"Alternatif Kaynak 2",preload:"\u00d6ny\u00fckleme",poster:"Poster",source:"Kaynak","html5_audio_options":"Ses Ayarlar\u0131","preload_none":"\u00d6ny\u00fckleme Yapma","preload_metadata":"Vide metadata \u00f6ny\u00fckleme","preload_auto":"Kullan\u0131c\u0131n\u0131n taray\u0131c\u0131s\u0131 karar versin",iframe:"iframe",embeddedaudio:"g\u00f6m\u00fcl\u00fc ses"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/uk_dlg.js new file mode 100644 index 0000000..6f7a4b4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","align_top_left":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043b\u0456\u0432\u0430","align_center":"\u0426\u0435\u043d\u0442\u0440","align_left":"\u041b\u0456\u0432\u043e","align_bottom":"\u041d\u0438\u0437","align_right":"\u041f\u0440\u0430\u0432\u043e","align_top":"\u0412\u0435\u0440\u0445","qt_stream_warn":"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",qtsrc:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e QT",progress:"\u0425\u0456\u0434",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0432\u0435\u0440\u0442. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchhalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0433\u043e\u0440\u0438\u0437. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchstyle:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438\u0439 \u0441\u0442\u0438\u043b\u044c",scriptcallbacks:"\u0417\u0432\u043e\u0440\u043e\u0442\u043d\u0456\u0439 \u0432\u0438\u043a\u043b\u0438\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u044e","align_top_right":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",uimode:"\u0420\u0435\u0436\u0438\u043c \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443",rate:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c",playcount:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u044c",defaultframe:"\u041a\u0430\u0434\u0440 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",currentposition:"\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f",currentmarker:"\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0443",baseurl:"\u041e\u0441\u043d\u043e\u0432\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"Windowless video",stretchtofit:"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438, \u0449\u043e\u0431 \u0432\u043c\u0456\u0441\u0442\u0438\u043b\u043e\u0441\u044c",mute:"\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u0438",invokeurls:"\u0412\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 URLs",fullscreen:"\u041f\u043e\u0432\u043d\u0438\u0439 \u0435\u043a\u0440\u0430\u043d",enabled:"\u0414\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438\u0439",autostart:"\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c",target:"\u0426\u0456\u043b\u044c",qtsrcchokespeed:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0433\u0430\u0441\u0430\u043d\u043d\u044f",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",endtime:"\u0427\u0430\u0441 \u043a\u0456\u043d\u0446\u044f",starttime:"\u0427\u0430\u0441 \u043f\u043e\u0447\u0430\u0442\u043a\u0443",enablejavascript:"\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0435\u043a\u0446\u0456\u0457",targetcache:"\u0426\u0456\u043b\u044c\u043e\u0432\u0438\u0439 \u043a\u0435\u0448",playeveryframe:"\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0442\u0438 \u043a\u043e\u0436\u0435\u043d \u043a\u0430\u0434\u0440",kioskmode:"\u041f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0432\u0430\u0442\u0438",play:"\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u0432\u043d\u043d\u044f",hspace:"\u0433\u043e\u0440.\u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0432\u0435\u0440\u0442.\u0432\u0456\u0434\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441",name:"\u041d\u0430\u0437\u0432\u0430",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",type:"\u0422\u0438\u043f",size:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",controls:"\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f",numloop:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0456\u0432",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438",base:"\u0411\u0430\u0437\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"W-\u0440\u0435\u0436\u0438\u043c",salign:"S-\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",scale:"\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f",quality:"\u042f\u043a\u0456\u0441\u0442\u044c",shuffle:"\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u0443\u0432\u0430\u0442\u0438",prefetch:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0412\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0442\u0438 \u0440\u0430\u043a\u0443\u0440\u0441",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",autogotourl:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443","shockwave_options":"\u041e\u043f\u0446\u0456\u0457 Shockwave","rmp_options":"\u041e\u043f\u0446\u0456\u0457 Real media player","wmp_options":"\u041e\u043f\u0446\u0456\u0457 Windows media player","qt_options":"\u041e\u043f\u0446\u0456\u0457 Quicktime","flash_options":"\u041e\u043f\u0446\u0456\u0457 Flash",hidden:"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0438\u0439","align_bottom_left":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430","align_bottom_right":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0437\u0432\u0443\u043a\u0443",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u0412\u0456\u0434\u0435\u043e \u043e\u043f\u0446\u0456\u0457 HTML5",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 2",preload:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e","html5_audio_options":"\u0410\u0443\u0434\u0456\u043e \u043e\u043f\u0446\u0456\u0457","preload_none":"\u0411\u0435\u0437 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445 \u0432\u0456\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0440\u043e\u0437\u0441\u0443\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/vi_dlg.js new file mode 100644 index 0000000..bf2df10 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.media_dlg',{list:"Danh s\u00e1ch",file:"T\u1eadp tin/URL",advanced:"N\u00e2ng cao",general:"Chung",title:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","align_top_left":"Tr\u00ean c\u00f9ng tr\u00e1i","align_center":"Gi\u1eefa","align_left":"Tr\u00e1i","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_right":"Ph\u1ea3i","align_top":"Tr\u00ean c\u00f9ng","qt_stream_warn":"Ngu\u1ed3n rtsp theo lu\u1ed3ng n\u00ean \u0111\u01b0\u1ee3c th\u00eam v\u00e0o tr\u01b0\u1eddng QT Src d\u01b0\u1edbi th\u1ebb n\u00e2ng cao.\nB\u1ea1n c\u0169ng n\u00ean th\u00eam m\u1ed9t phi\u00ean b\u1ea3n kh\u00f4ng theo lu\u1ed3ng v\u00e0o tr\u01b0\u1eddng Src..",qtsrc:"QT Src",progress:"\u0110ang ti\u1ebfn tri\u1ec3n",sound:"\u00c2m thanh",swstretchvalign:"D\u00e3n theo V-Align",swstretchhalign:"D\u00e3n theo H-Align",swstretchstyle:"Ki\u1ec3u d\u00e3n",scriptcallbacks:"H\u00e0m g\u1ecdi ng\u01b0\u1ee3c Script","align_top_right":"Tr\u00ean c\u00f9ng ph\u1ea3i",uimode:"Ch\u1ebf \u0111\u1ed9 UI",rate:"T\u1ed1c \u0111\u1ed9",playcount:"\u0110\u1ebfm l\u1ea7n ph\u00e1t",defaultframe:"Khung m\u1eb7c \u0111\u1ecbnh",currentposition:"V\u1ecb tr\u00ed hi\u1ec7n th\u1eddi",currentmarker:"B\u1ed9 t\u1ea1o hi\u1ec7n th\u1eddi",captioningid:"id \u0111\u1ea7u \u0111\u1ec1",baseurl:"Base URL",balance:"C\u00e2n b\u1eb1ng",windowlessvideo:"Video kh\u00f4ng c\u1eeda s\u1ed5",stretchtofit:"D\u00e3n \u0111\u1ec3 ph\u00f9 h\u1ee3p",mute:"T\u1eaft \u00e2m thanh",invokeurls:"URL tri\u1ec7u g\u1ecdi",fullscreen:"To\u00e0n m\u00e0n h\u00ecnh",enabled:"Cho ph\u00e9p",autostart:"T\u1ef1 \u0111\u1ed9ng b\u1eaft \u0111\u1ea7u",volume:"\u00c2m l\u01b0\u1ee3ng",target:"\u0110\u00edch",qtsrcchokespeed:"T\u1ed1c \u0111\u1ed9 Choke",href:"Href",endtime:"Th\u1eddi gian k\u1ebft th\u00fac",starttime:"Th\u1eddi gian b\u1eaft \u0111\u1ea7u",enablejavascript:"Cho ph\u00e9p JavaScript",correction:"Kh\u00f4ng ch\u1ec9nh",targetcache:"B\u1ed9 nh\u1edb \u0111\u1ec7m \u0111\u00edch",playeveryframe:"Ph\u00e1t t\u1ea5t c\u1ea3 khung",kioskmode:"Ch\u1ebf \u0111\u1ed9 Kiosk",controller:"Tr\u00ecnh \u0111i\u1ec1u khi\u1ec3n",menu:"Hi\u1ec3n th\u1ecb menu",loop:"L\u1eb7p",play:"T\u1ef1 \u0111\u1ed9ng ph\u00e1t",hspace:"H-Space",vspace:"V-Space","class_name":"L\u1edbp",name:"T\u00ean",id:"Id",type:"Ki\u1ec3u",size:"K\u00edch th\u01b0\u1edbc",preview:"Xem tr\u01b0\u1edbc","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",controls:"\u0110i\u1ec1u khi\u1ec3n",numloop:"S\u1ed1 l\u1eb7p",console:"B\u00e0n \u0111i\u1ec1u khi\u1ec3n",cache:"B\u1ed9 nh\u1edb \u0111\u1ec7m",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"C\u01a1 s\u1edf",bgcolor:"N\u1ec1n",wmode:"WMode",salign:"SAlign",align:"Canh l\u1ec1",scale:"T\u1ec9 l\u1ec7",quality:"Ch\u1ea5t l\u01b0\u1ee3ng",shuffle:"Kh\u00f4ng theo tr\u1eadt t\u1ef1",prefetch:"T\u00ecm n\u1ea1p tr\u01b0\u1edbc",nojava:"Kh\u00f4ng c\u00f3 java",maintainaspect:"Duy tr\u00ec c\u1ea1nh",imagestatus:"Tr\u1ea1ng th\u00e1i \u1ea3nh",center:"Gi\u1eefa",autogotourl:"T\u1ef1 \u0111\u1ed9ng nh\u1ea3y t\u1edbi URL","shockwave_options":"T\u00f9y ch\u1ecdn Shockwave","rmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Real","wmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Windows","qt_options":"T\u00f9y ch\u1ecdn Quicktime","flash_options":"T\u00f9y ch\u1ecdn Flash",hidden:"\u1ea8n","align_bottom_left":"D\u01b0\u1edbi c\u00f9ng tr\u00e1i","align_bottom_right":"D\u01b0\u1edbi c\u00f9ng ph\u1ea3i",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-cn_dlg.js new file mode 100644 index 0000000..06ed77a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/URL",advanced:"\u9ad8\u7ea7",general:"\u666e\u901a",title:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5c45\u4e0b","align_right":"\u5c45\u53f3","align_top":"\u5c45\u4e0a","qt_stream_warn":"\u6d41\u5a92\u4f53RTSP\u8d44\u6e90\u5e94\u6dfb\u52a0\u5230\u9ad8\u7ea7\u9009\u9879\u7684QT\u8d44\u6e90\u4e2d\u3002n\u540c\u65f6\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5728\u8fd9\u91cc\u52a0\u5165\u4e00\u4e2a\u975e\u6d41\u5a92\u4f53\u3002",qtsrc:"QT\u8d44\u6e90",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u4f38",swstretchhalign:"\u6c34\u5e73\u62c9\u4f38",swstretchstyle:"\u62c9\u4f38\u65b9\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u8c03","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c2\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"\u5b57\u5e55ID",baseurl:"\u57fa\u7840\u8def\u5f84",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38\u5230\u9002\u5408",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528URL",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u9650\u5236\u901f\u5ea6",href:"\u8d85\u94fe\u63a5",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u65e0\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"\u5168\u5c4f\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"ID",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u64ad\u653e\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8\u8df3\u8f6c",liveconnect:"JavaScript\u5f00\u542f",flashvars:"Flash\u53d8\u91cf",base:"\u57fa\u7840\u8def\u5f84",bgcolor:"\u80cc\u666f",wmode:"\u7a97\u4f53\u6a21\u5f0f",salign:"\u5a92\u4f53\u5bf9\u9f50",align:"\u6587\u672c\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u753b\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u52a0\u8f7d",nojava:"\u65e0java",maintainaspect:"\u4fdd\u6301\u5916\u89c2",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5\u89c6\u9891\u9009\u9879",altsource1:"\u66ff\u4ee3\u8d44\u6e901",altsource2:"\u66ff\u4ee3\u8d44\u6e902",preload:"\u9884\u52a0\u8f7d",poster:"\u6d77\u62a5",source:"\u8d44\u6e90",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-tw_dlg.js new file mode 100644 index 0000000..da608d4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.media_dlg',{"qt_stream_warn":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",source:"\u5d4c\u5165\u539f\u59cb\u6a94",list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh_dlg.js new file mode 100644 index 0000000..f4c67dd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/langs/zh_dlg.js @@ -0,0 +1,103 @@ +tinyMCE.addI18n('zh.media_dlg',{ +title:"\u63D2\u5165/\u7DE8\u8F2F \u5A92\u9AD4", +general:"\u57FA\u672C", +advanced:"\u9AD8\u7D1A", +file:"\u6587\u4EF6/\u5730\u5740", +list:"\u5217\u8868", +size:"\u5927\u5C0F", +preview:"\u9810\u89BD", +constrain_proportions:"\u4FDD\u6301\u6BD4\u4F8B", +type:"\u985E\u578B", +id:"Id", +name:"\u540D\u7A31", +class_name:"\u985E\u540D", +vspace:"\u5782\u76F4\u9593\u8DDD", +hspace:"\u6C34\u6E96\u9593\u8DDD", +play:"\u81EA\u52D5\u64AD\u653E", +loop:"\u8FF4\u5708", +menu:"\u986F\u793A\u529F\u80FD\u8868", +quality:"\u54C1\u8CEA", +scale:"\u7E2E\u653E", +align:"\u5C0D\u9F4A", +salign:"SAlign", +wmode:"WMode", +bgcolor:"\u80CC\u666F\u8272", +base:"\u57FA\u7DDA", +flashvars:"Flash\u8B8A\u6578", +liveconnect:"SWLiveConnect", +autohref:"AutoHREF", +cache:"\u7DE9\u5B58", +hidden:"\u96B1\u85CF", +controller:"\u63A7\u5236\u53F0", +kioskmode:"Kiosk \u6A21\u5F0F", +playeveryframe:"\u9010\u5E40\u64AD\u653E", +targetcache:"\u76EE\u6A19\u7DE9\u5B58", +correction:"\u4FEE\u6B63", +enablejavascript:"\u555F\u7528 JavaScript", +starttime:"\u958B\u59CB\u6642\u9593", +endtime:"\u7D50\u675F\u6642\u9593", +href:"Href", +qtsrcchokespeed:"Choke speed", +target:"\u76EE\u6A19", +volume:"\u97F3\u91CF", +autostart:"\u81EA\u52D5\u958B\u59CB", +enabled:"\u555F\u7528", +fullscreen:"\u5168\u87A2\u5E55", +invokeurls:"\u8ABF\u7528\u7684URLs", +mute:"\u975C\u97F3", +stretchtofit:"\u7E2E\u653E\u81F3\u5408\u9069\u5927\u5C0F", +windowlessvideo:"\u7121\u8996\u7A97\u8996\u983B", +balance:"\u5E73\u8861", +baseurl:"Base URL", +captioningid:"\u5B57\u5E55 id", +currentmarker:"\u7576\u524D\u6A19\u7C64", +currentposition:"\u7576\u524D\u4F4D\u7F6E", +defaultframe:"\u9ED8\u8A8D\u5E40", +playcount:"\u64AD\u653E\u6B21\u6578", +rate:"\u78BC\u7387", +uimode:"UI \u6A21\u5F0F", +flash_options:"Flash \u9078\u9805", +qt_options:"Quicktime \u9078\u9805", +wmp_options:"Windows media player \u9078\u9805", +rmp_options:"Real media player \u9078\u9805", +shockwave_options:"Shockwave \u9078\u9805", +autogotourl:"\u81EA\u52D5\u8DF3\u8F49 URL", +center:"\u5C45\u4E2D", +imagestatus:"\u5716\u50CF\u72C0\u614B", +maintainaspect:"\u7DAD\u8B77\u72C0\u614B", +nojava:"No java", +prefetch:"\u9810\u8B80", +shuffle:"\u96A8\u6A5F", +console:"\u63A7\u5236\u53F0", +numloop:"\u8FF4\u5708\u6B21\u6578", +controls:"\u63A7\u5236", +scriptcallbacks:"\u8173\u672C\u56DE\u6A94", +swstretchstyle:"\u7E2E\u653E\u6A23\u5F0F", +swstretchhalign:"\u7E2E\u653E\u81F3\u6C34\u6E96\u5C0D\u9F4A", +swstretchvalign:"\u7E2E\u653E\u81F3\u5782\u76F4\u5C0D\u9F4A", +sound:"\u8072\u97F3", +progress:"\u9032\u5EA6", +qtsrc:"QT Src", +qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..", +align_top:"\u9802\u90E8", +align_right:"\u5C45\u53F3", +align_bottom:"\u5E95\u90E8", +align_left:"\u5C45\u5DE6", +align_center:"\u5C45\u4E2D", +align_top_left:"\u9802\u90E8\u5C45\u5DE6", +align_top_right:"\u9802\u90E8\u5C45\u53F3", +align_bottom_left:"\u5E95\u90E8\u5C45\u5DE6", +align_bottom_right:"\u5E95\u90E8\u5C45\u53F3", +flv_options:"Flash \u8996\u983B\u9078\u9805", +flv_scalemode:"\u7E2E\u653E\u6A21\u5F0F", +flv_buffer:"\u7DE9\u885D", +flv_startimage:"\u958B\u59CB\u5716\u50CF", +flv_starttime:"\u958B\u59CB\u6642\u9593", +flv_defaultvolume:"\u9ED8\u8A8D\u8072\u97F3", +flv_hiddengui:"\u96B1\u85CFGUI", +flv_autostart:"\u81EA\u52D5\u958B\u59CB", +flv_loop:"\u8FF4\u5708", +flv_showscalemodes:"\u986F\u793A\u7E2E\u653E\u6A21\u5F0F", +flv_smoothvideo:"\u5E73\u6ED1\u8996\u983B", +flv_jscallback:"JS \u56DE\u6A94" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/media.htm b/ehcp/net2ftp/plugins/tinymce/plugins/media/media.htm new file mode 100644 index 0000000..957d83a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/media/media.htm @@ -0,0 +1,922 @@ + + + + {#media_dlg.title} + + + + + + + + + +
        + + +
        +
        +
        + {#media_dlg.general} + + + + + + + + + + + + + + + + + + +
        + +
        + + + + + +
         
        +
        + + + + + + +
        x   
        +
        +
        + +
        + {#media_dlg.preview} + +
        +
        + +
        +
        + {#media_dlg.advanced} + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + +
         
        +
        +
        + +
        + {#media_dlg.html5_video_options} + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
         
        +
        + + + + + +
         
        +
        + + + + + +
         
        +
        + +
        + + + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +
        + +
        + {#media_dlg.embedded_audio_options} + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +
        + +
        + {#media_dlg.html5_audio_options} + + + + + + + + + + + + + + + + +
        + + + + + +
         
        +
        + + + + + +
         
        +
        + +
        + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +
        + +
        + {#media_dlg.flash_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + +
        + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + + + + + + + +
        +
        + +
        + {#media_dlg.qt_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +  
        + + + + + +
         
        +
        +
        + +
        + {#media_dlg.wmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +
        + +
        + {#media_dlg.rmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +   +
        +
        + +
        + {#media_dlg.shockwave_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + + + +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        + + + + + +
        +
        +
        +
        + +
        +
        + {#media_dlg.source} + +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/media/moxieplayer.swf b/ehcp/net2ftp/plugins/tinymce/plugins/media/moxieplayer.swf new file mode 100644 index 0000000..585d772 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/media/moxieplayer.swf differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin.js new file mode 100644 index 0000000..687f548 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin_src.js new file mode 100644 index 0000000..d492fbe --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/nonbreaking/editor_plugin_src.js @@ -0,0 +1,54 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Nonbreaking', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceNonBreaking', function() { + ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? ' ' : ' '); + }); + + // Register buttons + ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); + + if (ed.getParam('nonbreaking_force_tab')) { + ed.onKeyDown.add(function(ed, e) { + if (e.keyCode == 9) { + e.preventDefault(); + + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + } + }); + } + }, + + getInfo : function() { + return { + longname : 'Nonbreaking space', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + + // Private methods + }); + + // Register plugin + tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin.js new file mode 100644 index 0000000..da411eb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret",r="\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return''+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+""})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin_src.js new file mode 100644 index 0000000..a18bcd7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/noneditable/editor_plugin_src.js @@ -0,0 +1,537 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var TreeWalker = tinymce.dom.TreeWalker; + var externalName = 'contenteditable', internalName = 'data-mce-' + externalName; + var VK = tinymce.VK; + + function handleContentEditableSelection(ed) { + var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF'; + + // Returns the content editable state of a node "true/false" or null + function getContentEditable(node) { + var contentEditable; + + // Ignore non elements + if (node.nodeType === 1) { + // Check for fake content editable + contentEditable = node.getAttribute(internalName); + if (contentEditable && contentEditable !== "inherit") { + return contentEditable; + } + + // Check for real content editable + contentEditable = node.contentEditable; + if (contentEditable !== "inherit") { + return contentEditable; + } + } + + return null; + }; + + // Returns the noneditable parent or null if there is a editable before it or if it wasn't found + function getNonEditableParent(node) { + var state; + + while (node) { + state = getContentEditable(node); + if (state) { + return state === "false" ? node : null; + } + + node = node.parentNode; + } + }; + + // Get caret container parent for the specified node + function getParentCaretContainer(node) { + while (node) { + if (node.id === caretContainerId) { + return node; + } + + node = node.parentNode; + } + }; + + // Finds the first text node in the specified node + function findFirstTextNode(node) { + var walker; + + if (node) { + walker = new TreeWalker(node, node); + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3) { + return node; + } + } + } + }; + + // Insert caret container before/after target or expand selection to include block + function insertCaretContainerOrExpandToBlock(target, before) { + var caretContainer, rng; + + // Select block + if (getContentEditable(target) === "false") { + if (dom.isBlock(target)) { + selection.select(target); + return; + } + } + + rng = dom.createRng(); + + if (getContentEditable(target) === "true") { + if (!target.firstChild) { + target.appendChild(ed.getDoc().createTextNode('\u00a0')); + } + + target = target.firstChild; + before = true; + } + + //caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style:'border: 1px solid red'}, invisibleChar); + caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar); + + if (before) { + target.parentNode.insertBefore(caretContainer, target); + } else { + dom.insertAfter(caretContainer, target); + } + + rng.setStart(caretContainer.firstChild, 1); + rng.collapse(true); + selection.setRng(rng); + + return caretContainer; + }; + + // Removes any caret container except the one we might be in + function removeCaretContainer(caretContainer) { + var child, currentCaretContainer, lastContainer; + + if (caretContainer) { + rng = selection.getRng(true); + rng.setStartBefore(caretContainer); + rng.setEndBefore(caretContainer); + + child = findFirstTextNode(caretContainer); + if (child && child.nodeValue.charAt(0) == invisibleChar) { + child = child.deleteData(0, 1); + } + + dom.remove(caretContainer, true); + + selection.setRng(rng); + } else { + currentCaretContainer = getParentCaretContainer(selection.getStart()); + while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) { + if (currentCaretContainer !== caretContainer) { + child = findFirstTextNode(caretContainer); + if (child && child.nodeValue.charAt(0) == invisibleChar) { + child = child.deleteData(0, 1); + } + + dom.remove(caretContainer, true); + } + + lastContainer = caretContainer; + } + } + }; + + // Modifies the selection to include contentEditable false elements or insert caret containers + function moveSelection() { + var nonEditableStart, nonEditableEnd, isCollapsed, rng, element; + + // Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside + function hasSideContent(element, left) { + var container, offset, walker, node, len; + + container = rng.startContainer; + offset = rng.startOffset; + + // If endpoint is in middle of text node then expand to beginning/end of element + if (container.nodeType == 3) { + len = container.nodeValue.length; + if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) { + return; + } + } else { + // Can we resolve the node by index + if (offset < container.childNodes.length) { + // Browser represents caret position as the offset at the start of an element. When moving right + // this is the element we are moving into so we consider our container to be child node at offset-1 + var pos = !left && offset > 0 ? offset-1 : offset; + container = container.childNodes[pos]; + if (container.hasChildNodes()) { + container = container.firstChild; + } + } else { + // If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element + return !left ? element : null; + } + } + + // Walk left/right to look for contents + walker = new TreeWalker(container, element); + while (node = walker[left ? 'prev' : 'next']()) { + if (node.nodeType === 3 && node.nodeValue.length > 0) { + return; + } else if (getContentEditable(node) === "true") { + // Found contentEditable=true element return this one to we can move the caret inside it + return node; + } + } + + return element; + }; + + // Remove any existing caret containers + removeCaretContainer(); + + // Get noneditable start/end elements + isCollapsed = selection.isCollapsed(); + nonEditableStart = getNonEditableParent(selection.getStart()); + nonEditableEnd = getNonEditableParent(selection.getEnd()); + + // Is any fo the range endpoints noneditable + if (nonEditableStart || nonEditableEnd) { + rng = selection.getRng(true); + + // If it's a caret selection then look left/right to see if we need to move the caret out side or expand + if (isCollapsed) { + nonEditableStart = nonEditableStart || nonEditableEnd; + var start = selection.getStart(); + if (element = hasSideContent(nonEditableStart, true)) { + // We have no contents to the left of the caret then insert a caret container before the noneditable element + insertCaretContainerOrExpandToBlock(element, true); + } else if (element = hasSideContent(nonEditableStart, false)) { + // We have no contents to the right of the caret then insert a caret container after the noneditable element + insertCaretContainerOrExpandToBlock(element, false); + } else { + // We are in the middle of a noneditable so expand to select it + selection.select(nonEditableStart); + } + } else { + rng = selection.getRng(true); + + // Expand selection to include start non editable element + if (nonEditableStart) { + rng.setStartBefore(nonEditableStart); + } + + // Expand selection to include end non editable element + if (nonEditableEnd) { + rng.setEndAfter(nonEditableEnd); + } + + selection.setRng(rng); + } + } + }; + + function handleKey(ed, e) { + var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement; + + function getNonEmptyTextNodeSibling(node, prev) { + while (node = node[prev ? 'previousSibling' : 'nextSibling']) { + if (node.nodeType !== 3 || node.nodeValue.length > 0) { + return node; + } + } + }; + + function positionCaretOnElement(element, start) { + selection.select(element); + selection.collapse(start); + } + + function canDelete(backspace) { + var rng, container, offset, nonEditableParent; + + function removeNodeIfNotParent(node) { + var parent = container; + + while (parent) { + if (parent === node) { + return; + } + + parent = parent.parentNode; + } + + dom.remove(node); + moveSelection(); + } + + function isNextPrevTreeNodeNonEditable() { + var node, walker, nonEmptyElements = ed.schema.getNonEmptyElements(); + + walker = new tinymce.dom.TreeWalker(container, ed.getBody()); + while (node = (backspace ? walker.prev() : walker.next())) { + // Found IMG/INPUT etc + if (nonEmptyElements[node.nodeName.toLowerCase()]) { + break; + } + + // Found text node with contents + if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) { + break; + } + + // Found non editable node + if (getContentEditable(node) === "false") { + removeNodeIfNotParent(node); + return true; + } + } + + // Check if the content node is within a non editable parent + if (getNonEditableParent(node)) { + return true; + } + + return false; + } + + if (selection.isCollapsed()) { + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + container = getParentCaretContainer(container) || container; + + // Is in noneditable parent + if (nonEditableParent = getNonEditableParent(container)) { + removeNodeIfNotParent(nonEditableParent); + return false; + } + + // Check if the caret is in the middle of a text node + if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) { + return true; + } + + // Resolve container index + if (container.nodeType == 1) { + container = container.childNodes[offset] || container; + } + + // Check if previous or next tree node is non editable then block the event + if (isNextPrevTreeNodeNonEditable()) { + return false; + } + } + + return true; + } + + startElement = selection.getStart() + endElement = selection.getEnd(); + + // Disable all key presses in contentEditable=false except delete or backspace + nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement); + if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) { + // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior + if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) { + return; + } + + e.preventDefault(); + + // Arrow left/right select the element and collapse left/right + if (keyCode == VK.LEFT || keyCode == VK.RIGHT) { + var left = keyCode == VK.LEFT; + // If a block element find previous or next element to position the caret + if (ed.dom.isBlock(nonEditableParent)) { + var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling; + var walker = new TreeWalker(targetElement, targetElement); + var caretElement = left ? walker.prev() : walker.next(); + positionCaretOnElement(caretElement, !left); + } else { + positionCaretOnElement(nonEditableParent, left); + } + } + } else { + // Is arrow left/right, backspace or delete + if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) { + caretContainer = getParentCaretContainer(startElement); + if (caretContainer) { + // Arrow left or backspace + if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) { + nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true); + + if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { + e.preventDefault(); + + if (keyCode == VK.LEFT) { + positionCaretOnElement(nonEditableParent, true); + } else { + dom.remove(nonEditableParent); + return; + } + } else { + removeCaretContainer(caretContainer); + } + } + + // Arrow right or delete + if (keyCode == VK.RIGHT || keyCode == VK.DELETE) { + nonEditableParent = getNonEmptyTextNodeSibling(caretContainer); + + if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { + e.preventDefault(); + + if (keyCode == VK.RIGHT) { + positionCaretOnElement(nonEditableParent, false); + } else { + dom.remove(nonEditableParent); + return; + } + } else { + removeCaretContainer(caretContainer); + } + } + } + + if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) { + e.preventDefault(); + return false; + } + } + } + }; + + ed.onMouseDown.addToTop(function(ed, e) { + var node = ed.selection.getNode(); + + if (getContentEditable(node) === "false" && node == e.target) { + // Expand selection on mouse down we can't block the default event since it's used for drag/drop + moveSelection(); + } + }); + + ed.onMouseUp.addToTop(moveSelection); + ed.onKeyDown.addToTop(handleKey); + ed.onKeyUp.addToTop(moveSelection); + }; + + tinymce.create('tinymce.plugins.NonEditablePlugin', { + init : function(ed, url) { + var editClass, nonEditClass, nonEditableRegExps; + + // Converts configured regexps to noneditable span items + function convertRegExpsToNonEditable(ed, args) { + var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass); + + // Don't replace the variables when raw is used for example on undo/redo + if (args.format == "raw") { + return; + } + + while (i--) { + content = content.replace(nonEditableRegExps[i], function(match) { + var args = arguments, index = args[args.length - 2]; + + // Is value inside an attribute then don't replace + if (index > 0 && content.charAt(index - 1) == '"') { + return match; + } + + return '' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + ''; + }); + } + + args.content = content; + }; + + editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " "; + nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; + + // Setup noneditable regexps array + nonEditableRegExps = ed.getParam("noneditable_regexp"); + if (nonEditableRegExps && !nonEditableRegExps.length) { + nonEditableRegExps = [nonEditableRegExps]; + } + + ed.onPreInit.add(function() { + handleContentEditableSelection(ed); + + if (nonEditableRegExps) { + ed.selection.onBeforeSetContent.add(convertRegExpsToNonEditable); + ed.onBeforeSetContent.add(convertRegExpsToNonEditable); + } + + // Apply contentEditable true/false on elements with the noneditable/editable classes + ed.parser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, className, node; + + while (i--) { + node = nodes[i]; + className = " " + node.attr("class") + " "; + + if (className.indexOf(editClass) !== -1) { + node.attr(internalName, "true"); + } else if (className.indexOf(nonEditClass) !== -1) { + node.attr(internalName, "false"); + } + } + }); + + // Remove internal name + ed.serializer.addAttributeFilter(internalName, function(nodes, name) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (nonEditableRegExps && node.attr('data-mce-content')) { + node.name = "#text"; + node.type = 3; + node.raw = true; + node.value = node.attr('data-mce-content'); + } else { + node.attr(externalName, null); + node.attr(internalName, null); + } + } + }); + + // Convert external name into internal name + ed.parser.addAttributeFilter(externalName, function(nodes, name) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr(internalName, node.attr(externalName)); + node.attr(externalName, null); + } + }); + }); + }, + + getInfo : function() { + return { + longname : 'Non editable elements', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/css/content.css b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/css/content.css new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/css/content.css @@ -0,0 +1 @@ +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin.js new file mode 100644 index 0000000..35085e8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin_src.js new file mode 100644 index 0000000..a094c19 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/editor_plugin_src.js @@ -0,0 +1,74 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.PageBreakPlugin', { + init : function(ed, url) { + var pb = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), pbRE; + + pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g'); + + // Register commands + ed.addCommand('mcePageBreak', function() { + ed.execCommand('mceInsertContent', 0, pb); + }); + + // Register buttons + ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls}); + + ed.onInit.add(function() { + if (ed.theme.onResolveName) { + ed.theme.onResolveName.add(function(th, o) { + if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls)) + o.name = 'pagebreak'; + }); + } + }); + + 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('pagebreak', 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(/]+>/g, function(im) { + if (im.indexOf('class="mcePageBreak') !== -1) + im = sep; + + return im; + }); + }); + }, + + getInfo : function() { + return { + longname : 'PageBreak', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/pagebreak.gif b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/pagebreak.gif new file mode 100644 index 0000000..acdf408 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/pagebreak.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/trans.gif b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/trans.gif new file mode 100644 index 0000000..3884865 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/pagebreak/img/trans.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/blank.htm b/ehcp/net2ftp/plugins/tinymce/plugins/paste/blank.htm new file mode 100644 index 0000000..7ba26bd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/blank.htm @@ -0,0 +1,22 @@ + + +blank_page + + + + + + + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/blank.css b/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/blank.css new file mode 100644 index 0000000..6b16bac --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/blank.css @@ -0,0 +1,14 @@ +html, body {height:98%} +body { +background-color: #FFFFFF; +font-family: Verdana, Arial, Helvetica, sans-serif; +font-size: 10px; +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; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/pasteword.css b/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/pasteword.css new file mode 100644 index 0000000..b3be627 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/css/pasteword.css @@ -0,0 +1,3 @@ +.sourceIframe { + border: 1px solid #808080; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin.js new file mode 100644 index 0000000..0ab05eb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
        ")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

        "+o.encode(r).replace(/\r?\n\r?\n/g,"

        ").replace(/\r?\n/g,"
        ")+"

        "}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
         [\s\r\n]+|
        )*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
         [\s\r\n]+|
        )*/g,"$1"]]);d([[/

        /g,"

        "],[/
        /g," "],[/

        /g,"
        "]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

        ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

        $1

        ")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

        "],[/<\/h[1-6][^>]*>/gi,"

        "]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length"]])}else{if(f=="p"){e([[/\n+/g,"

        "],[/^(.*<\/p>)(

        )$/,"

        $1"]])}else{e([[/\n\n/g,"

        "],[/^(.*<\/p>)(

        )$/,"

        $1"],[/\n/g,"
        "]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin_src.js new file mode 100644 index 0000000..0154ece --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/editor_plugin_src.js @@ -0,0 +1,885 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each, + defs = { + paste_auto_cleanup_on_paste : true, + paste_enable_default_filters : true, + paste_block_drop : false, + paste_retain_style_properties : "none", + paste_strip_class_attributes : "mso", + paste_remove_spans : false, + paste_remove_styles : false, + paste_remove_styles_if_webkit : true, + paste_convert_middot_lists : true, + paste_convert_headers_to_strong : false, + paste_dialog_width : "450", + paste_dialog_height : "400", + paste_max_consecutive_linebreaks: 2, + paste_text_use_dialog : false, + paste_text_sticky : false, + paste_text_sticky_default : false, + paste_text_notifyalways : false, + paste_text_linebreaktype : "combined", + paste_text_replacements : [ + [/\u2026/g, "..."], + [/[\x93\x94\u201c\u201d]/g, '"'], + [/[\x60\x91\x92\u2018\u2019]/g, "'"] + ] + }; + + function getParam(ed, name) { + return ed.getParam(name, defs[name]); + } + + tinymce.create('tinymce.plugins.PastePlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + t.url = url; + + // Setup plugin events + t.onPreProcess = new tinymce.util.Dispatcher(t); + t.onPostProcess = new tinymce.util.Dispatcher(t); + + // Register default handlers + t.onPreProcess.add(t._preProcess); + t.onPostProcess.add(t._postProcess); + + // Register optional preprocess handler + t.onPreProcess.add(function(pl, o) { + ed.execCallback('paste_preprocess', pl, o); + }); + + // Register optional postprocess + t.onPostProcess.add(function(pl, o) { + ed.execCallback('paste_postprocess', pl, o); + }); + + ed.onKeyDown.addToTop(function(ed, e) { + // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that + if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) + return false; // Stop other listeners + }); + + // Initialize plain text flag + ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default'); + + // This function executes the process handlers and inserts the contents + // force_rich overrides plain text mode set by user, important for pasting with execCommand + function process(o, force_rich) { + var dom = ed.dom, rng; + + // Execute pre process handlers + t.onPreProcess.dispatch(t, o); + + // Create DOM structure + o.node = dom.create('div', 0, o.content); + + // If pasting inside the same element and the contents is only one block + // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element + if (tinymce.isGecko) { + rng = ed.selection.getRng(true); + if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) { + // Is only one block node and it doesn't contain word stuff + if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1) + dom.remove(o.node.firstChild, true); + } + } + + // Execute post process handlers + t.onPostProcess.dispatch(t, o); + + // Serialize content + o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''}); + + // Plain text option active? + if ((!force_rich) && (ed.pasteAsPlainText)) { + t._insertPlainText(o.content); + + if (!getParam(ed, "paste_text_sticky")) { + ed.pasteAsPlainText = false; + ed.controlManager.setActive("pastetext", false); + } + } else { + t._insert(o.content); + } + } + + // Add command for external usage + ed.addCommand('mceInsertClipboardContent', function(u, o) { + process(o, true); + }); + + if (!getParam(ed, "paste_text_use_dialog")) { + ed.addCommand('mcePasteText', function(u, v) { + var cookie = tinymce.util.Cookie; + + ed.pasteAsPlainText = !ed.pasteAsPlainText; + ed.controlManager.setActive('pastetext', ed.pasteAsPlainText); + + if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) { + if (getParam(ed, "paste_text_sticky")) { + ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky')); + } else { + ed.windowManager.alert(ed.translate('paste.plaintext_mode')); + } + + if (!getParam(ed, "paste_text_notifyalways")) { + cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31)) + } + } + }); + } + + ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'}); + ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'}); + + // This function grabs the contents from the clipboard by adding a + // hidden div and placing the caret inside it and after the browser paste + // is done it grabs that contents and processes that + function grabContent(e) { + var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent; + + // Check if browser supports direct plaintext access + if (e.clipboardData || dom.doc.dataTransfer) { + textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text'); + + if (ed.pasteAsPlainText) { + e.preventDefault(); + process({content : dom.encode(textContent).replace(/\r?\n/g, '
        ')}); + return; + } + } + + if (dom.get('_mcePaste')) + return; + + // Create container to paste into + n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF'); + + // If contentEditable mode we need to find out the position of the closest element + if (body != ed.getDoc().body) + posY = dom.getPos(ed.selection.getStart(), body).y; + else + posY = body.scrollTop + dom.getViewPort(ed.getWin()).y; + + // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles + // If also needs to be in view on IE or the paste would fail + dom.setStyles(n, { + position : 'absolute', + left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div + top : posY - 25, + width : 1, + height : 1, + overflow : 'hidden' + }); + + if (tinymce.isIE) { + // Store away the old range + oldRng = sel.getRng(); + + // Select the container + rng = dom.doc.body.createTextRange(); + rng.moveToElementText(n); + rng.execCommand('Paste'); + + // Remove container + dom.remove(n); + + // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due + // to IE security settings so we pass the junk though better than nothing right + if (n.innerHTML === '\uFEFF\uFEFF') { + ed.execCommand('mcePasteWord'); + e.preventDefault(); + return; + } + + // Restore the old range and clear the contents before pasting + sel.setRng(oldRng); + sel.setContent(''); + + // For some odd reason we need to detach the the mceInsertContent call from the paste event + // It's like IE has a reference to the parent element that you paste in and the selection gets messed up + // when it tries to restore the selection + setTimeout(function() { + // Process contents + process({content : n.innerHTML}); + }, 0); + + // Block the real paste event + return tinymce.dom.Event.cancel(e); + } else { + function block(e) { + e.preventDefault(); + }; + + // Block mousedown and click to prevent selection change + dom.bind(ed.getDoc(), 'mousedown', block); + dom.bind(ed.getDoc(), 'keydown', block); + + or = ed.selection.getRng(); + + // Move select contents inside DIV + n = n.firstChild; + rng = ed.getDoc().createRange(); + rng.setStart(n, 0); + rng.setEnd(n, 2); + sel.setRng(rng); + + // Wait a while and grab the pasted contents + window.setTimeout(function() { + var h = '', nl; + + // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit + if (!dom.select('div.mcePaste > div.mcePaste').length) { + nl = dom.select('div.mcePaste'); + + // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string + each(nl, function(n) { + var child = n.firstChild; + + // WebKit inserts a DIV container with lots of odd styles + if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) { + dom.remove(child, 1); + } + + // Remove apply style spans + each(dom.select('span.Apple-style-span', n), function(n) { + dom.remove(n, 1); + }); + + // Remove bogus br elements + each(dom.select('br[data-mce-bogus]', n), function(n) { + dom.remove(n); + }); + + // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV + if (n.parentNode.className != 'mcePaste') + h += n.innerHTML; + }); + } else { + // Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc + // So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same + h = '

        ' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '

        ').replace(/\r?\n/g, '
        ') + '

        '; + } + + // Remove the nodes + each(dom.select('div.mcePaste'), function(n) { + dom.remove(n); + }); + + // Restore the old selection + if (or) + sel.setRng(or); + + process({content : h}); + + // Unblock events ones we got the contents + dom.unbind(ed.getDoc(), 'mousedown', block); + dom.unbind(ed.getDoc(), 'keydown', block); + }, 0); + } + } + + // Check if we should use the new auto process method + if (getParam(ed, "paste_auto_cleanup_on_paste")) { + // Is it's Opera or older FF use key handler + if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { + ed.onKeyDown.addToTop(function(ed, e) { + if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) + grabContent(e); + }); + } else { + // Grab contents on paste event on Gecko and WebKit + ed.onPaste.addToTop(function(ed, e) { + return grabContent(e); + }); + } + } + + ed.onInit.add(function() { + ed.controlManager.setActive("pastetext", ed.pasteAsPlainText); + + // Block all drag/drop events + if (getParam(ed, "paste_block_drop")) { + ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) { + e.preventDefault(); + e.stopPropagation(); + + return false; + }); + } + }); + + // Add legacy support + t._legacySupport(); + }, + + getInfo : function() { + return { + longname : 'Paste text/word', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _preProcess : function(pl, o) { + var ed = this.editor, + h = o.content, + grep = tinymce.grep, + explode = tinymce.explode, + trim = tinymce.trim, + len, stripClass; + + //console.log('Before preprocess:' + o.content); + + function process(items) { + each(items, function(v) { + // Remove or replace + if (v.constructor == RegExp) + h = h.replace(v, ''); + else + h = h.replace(v[0], v[1]); + }); + } + + if (ed.settings.paste_enable_default_filters == false) { + return; + } + + // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser + if (tinymce.isIE && document.documentMode >= 9 && /<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(o.content)) { + // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser + process([[/(?:
         [\s\r\n]+|
        )*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
         [\s\r\n]+|
        )*/g, '$1']]); + + // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break + process([ + [/

        /g, '

        '], // Replace multiple BR elements with uppercase BR to keep them intact + [/
        /g, ' '], // Replace single br elements with space since they are word wrap BR:s + [/

        /g, '
        '] // Replace back the double brs but into a single BR + ]); + } + + // Detect Word content and process it more aggressive + if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) { + o.wordContent = true; // Mark the pasted contents as word specific content + //console.log('Word contents detected.'); + + // Process away some basic content + process([ + /^\s*( )+/gi, //   entities at the start of contents + /( |]*>)+\s*$/gi //   entities at the end of contents + ]); + + if (getParam(ed, "paste_convert_headers_to_strong")) { + h = h.replace(/

        ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

        $1

        "); + } + + if (getParam(ed, "paste_convert_middot_lists")) { + process([ + [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker + [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers + [/(]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF) + ]); + } + + process([ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"] + ]); + + // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag. + // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. + do { + len = h.length; + h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); + } while (len != h.length); + + // Remove all spans if no styles is to be retained + if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } else { + // We're keeping styles, so at least clean them up. + // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx + + process([ + // Convert ___ to string of alternating breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : ""; + } + ], + + // Examine all styles: delete junk, transform some, and keep the rest + [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi, + function(str, tag, style) { + var n = [], + i = 0, + s = explode(trim(style).replace(/"/gi, "'"), ";"); + + // Examine each style definition within the tag's style attribute + each(s, function(v) { + var name, value, + parts = explode(v, ":"); + + function ensureUnits(v) { + return v + ((v !== "0") && (/\d$/.test(v)))? "px" : ""; + } + + if (parts.length == 2) { + name = parts[0].toLowerCase(); + value = parts[1].toLowerCase(); + + // Translate certain MS Office styles into their CSS equivalents + switch (name) { + case "mso-padding-alt": + case "mso-padding-top-alt": + case "mso-padding-right-alt": + case "mso-padding-bottom-alt": + case "mso-padding-left-alt": + case "mso-margin-alt": + case "mso-margin-top-alt": + case "mso-margin-right-alt": + case "mso-margin-bottom-alt": + case "mso-margin-left-alt": + case "mso-table-layout-alt": + case "mso-height": + case "mso-width": + case "mso-vertical-align-alt": + n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value); + return; + + case "horiz-align": + n[i++] = "text-align:" + value; + return; + + case "vert-align": + n[i++] = "vertical-align:" + value; + return; + + case "font-color": + case "mso-foreground": + n[i++] = "color:" + value; + return; + + case "mso-background": + case "mso-highlight": + n[i++] = "background:" + value; + return; + + case "mso-default-height": + n[i++] = "min-height:" + ensureUnits(value); + return; + + case "mso-default-width": + n[i++] = "min-width:" + ensureUnits(value); + return; + + case "mso-padding-between-alt": + n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value); + return; + + case "text-line-through": + if ((value == "single") || (value == "double")) { + n[i++] = "text-decoration:line-through"; + } + return; + + case "mso-zero-height": + if (value == "yes") { + n[i++] = "display:none"; + } + return; + } + + // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name + if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) { + return; + } + + // If it reached this point, it must be a valid CSS style + n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case + } + }); + + // If style attribute contained any valid styles the re-write it; otherwise delete style attribute. + if (i > 0) { + return tag + ' style="' + n.join(';') + '"'; + } else { + return tag; + } + } + ] + ]); + } + } + + // Replace headers with + if (getParam(ed, "paste_convert_headers_to_strong")) { + process([ + [/]*>/gi, "

        "], + [/<\/h[1-6][^>]*>/gi, "

        "] + ]); + } + + process([ + // Copy paste from Java like Open Office will produce this junk on FF + [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, ''] + ]); + + // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). + // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. + stripClass = getParam(ed, "paste_strip_class_attributes"); + + if (stripClass !== "none") { + function removeClasses(match, g1) { + if (stripClass === "all") + return ''; + + var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), + function(v) { + return (/^(?!mso)/i.test(v)); + } + ); + + return cls.length ? ' class="' + cls.join(" ") + '"' : ''; + }; + + h = h.replace(/ class="([^"]+)"/gi, removeClasses); + h = h.replace(/ class=([\-\w]+)/gi, removeClasses); + } + + // Remove spans option + if (getParam(ed, "paste_remove_spans")) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } + + //console.log('After preprocess:' + h); + + o.content = h; + }, + + /** + * Various post process items. + */ + _postProcess : function(pl, o) { + var t = this, ed = t.editor, dom = ed.dom, styleProps; + + if (ed.settings.paste_enable_default_filters == false) { + return; + } + + if (o.wordContent) { + // Remove named anchors or TOC links + each(dom.select('a', o.node), function(a) { + if (!a.href || a.href.indexOf('#_Toc') != -1) + dom.remove(a, 1); + }); + + if (getParam(ed, "paste_convert_middot_lists")) { + t._convertLists(pl, o); + } + + // Process styles + styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties + + // Process only if a string was specified and not equal to "all" or "*" + if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { + styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); + + // Retains some style properties + each(dom.select('*', o.node), function(el) { + var newStyle = {}, npc = 0, i, sp, sv; + + // Store a subset of the existing styles + if (styleProps) { + for (i = 0; i < styleProps.length; i++) { + sp = styleProps[i]; + sv = dom.getStyle(el, sp); + + if (sv) { + newStyle[sp] = sv; + npc++; + } + } + } + + // Remove all of the existing styles + dom.setAttrib(el, 'style', ''); + + if (styleProps && npc > 0) + dom.setStyles(el, newStyle); // Add back the stored subset of styles + else // Remove empty span tags that do not have class attributes + if (el.nodeName == 'SPAN' && !el.className) + dom.remove(el, true); + }); + } + } + + // Remove all style information or only specifically on WebKit to avoid the style bug on that browser + if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { + each(dom.select('*[style]', o.node), function(el) { + el.removeAttribute('style'); + el.removeAttribute('data-mce-style'); + }); + } else { + if (tinymce.isWebKit) { + // We need to compress the styles on WebKit since if you paste it will become + // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles + each(dom.select('*', o.node), function(el) { + el.removeAttribute('data-mce-style'); + }); + } + } + }, + + /** + * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. + */ + _convertLists : function(pl, o) { + var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; + + // Convert middot lists into real semantic lists + each(dom.select('p', o.node), function(p) { + var sib, val = '', type, html, idx, parents; + + // Get text node value at beginning of paragraph + for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) + val += sib.nodeValue; + + val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); + + // Detect unordered lists look for bullets + if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val)) + type = 'ol'; + + // Check if node value matches the list pattern: o   + if (type) { + margin = parseFloat(p.style.marginLeft || 0); + + if (margin > lastMargin) + levels.push(margin); + + if (!listElm || type != lastType) { + listElm = dom.create(type); + dom.insertAfter(listElm, p); + } else { + // Nested list element + if (margin > lastMargin) { + listElm = li.appendChild(dom.create(type)); + } else if (margin < lastMargin) { + // Find parent level based on margin value + idx = tinymce.inArray(levels, margin); + parents = dom.getParents(listElm.parentNode, type); + listElm = parents[parents.length - 1 - idx] || listElm; + } + } + + // Remove middot or number spans if they exists + each(dom.select('span', p), function(span) { + var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); + + // Remove span with the middot or the number + if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html)) + dom.remove(span); + else if (/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) + dom.remove(span); + }); + + html = p.innerHTML; + + // Remove middot/list items + if (type == 'ul') + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, ''); + else + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); + + // Create li and add paragraph data into the new li + li = listElm.appendChild(dom.create('li', 0, html)); + dom.remove(p); + + lastMargin = margin; + lastType = type; + } else + listElm = lastMargin = 0; // End list element + }); + + // Remove any left over makers + html = o.node.innerHTML; + if (html.indexOf('__MCE_ITEM__') != -1) + o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); + }, + + /** + * Inserts the specified contents at the caret position. + */ + _insert : function(h, skip_undo) { + var ed = this.editor, r = ed.selection.getRng(); + + // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. + if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) + ed.getDoc().execCommand('Delete', false, null); + + ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo}); + }, + + /** + * Instead of the old plain text method which tried to re-create a paste operation, the + * new approach adds a plain text mode toggle switch that changes the behavior of paste. + * This function is passed the same input that the regular paste plugin produces. + * It performs additional scrubbing and produces (and inserts) the plain text. + * This approach leverages all of the great existing functionality in the paste + * plugin, and requires minimal changes to add the new functionality. + * Speednet - June 2009 + */ + _insertPlainText : function(content) { + var ed = this.editor, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"), + is = tinymce.is; + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + content = content.replace(v, ""); + else + content = content.replace(v[0], v[1]); + }); + }; + + if ((typeof(content) === "string") && (content.length > 0)) { + // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line + if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) { + process([ + /[\n\r]+/g + ]); + } else { + // Otherwise just get rid of carriage returns (only need linefeeds) + process([ + /\r+/g + ]); + } + + process([ + [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them + [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
        tags and table rows + [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them + /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags + [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"] // Cool little RegExp deletes whitespace around linebreak chars. + ]); + + var maxLinebreaks = Number(getParam(ed, "paste_max_consecutive_linebreaks")); + if (maxLinebreaks > -1) { + var maxLinebreaksRegex = new RegExp("\n{" + (maxLinebreaks + 1) + ",}", "g"); + var linebreakReplacement = ""; + + while (linebreakReplacement.length < maxLinebreaks) { + linebreakReplacement += "\n"; + } + + process([ + [maxLinebreaksRegex, linebreakReplacement] // Limit max consecutive linebreaks + ]); + } + + content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content)); + + // Perform default or custom replacements + if (is(rl, "array")) { + process(rl); + } else if (is(rl, "string")) { + process(new RegExp(rl, "gi")); + } + + // Treat paragraphs as specified in the config + if (linebr == "none") { + // Convert all line breaks to space + process([ + [/\n+/g, " "] + ]); + } else if (linebr == "br") { + // Convert all line breaks to
        + process([ + [/\n/g, "
        "] + ]); + } else if (linebr == "p") { + // Convert all line breaks to

        ...

        + process([ + [/\n+/g, "

        "], + [/^(.*<\/p>)(

        )$/, '

        $1'] + ]); + } else { + // defaults to "combined" + // Convert single line breaks to
        and double line breaks to

        ...

        + process([ + [/\n\n/g, "

        "], + [/^(.*<\/p>)(

        )$/, '

        $1'], + [/\n/g, "
        "] + ]); + } + + ed.execCommand('mceInsertContent', false, content); + } + }, + + /** + * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. + */ + _legacySupport : function() { + var t = this, ed = t.editor; + + // Register command(s) for backwards compatibility + ed.addCommand("mcePasteWord", function() { + ed.windowManager.open({ + file: t.url + "/pasteword.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline: 1 + }); + }); + + if (getParam(ed, "paste_text_use_dialog")) { + ed.addCommand("mcePasteText", function() { + ed.windowManager.open({ + file : t.url + "/pastetext.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline : 1 + }); + }); + } + + // Register button for backwards compatibility + ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); + } + }); + + // Register plugin + tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pastetext.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pastetext.js new file mode 100644 index 0000000..c524f9e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pastetext.js @@ -0,0 +1,36 @@ +tinyMCEPopup.requireLangPack(); + +var PasteTextDialog = { + init : function() { + this.resize(); + }, + + insert : function() { + var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines; + + // Convert linebreaks into paragraphs + if (document.getElementById('linebreaks').checked) { + lines = h.split(/\r?\n/); + if (lines.length > 1) { + h = ''; + tinymce.each(lines, function(row) { + h += '

        ' + row + '

        '; + }); + } + } + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('content'); + + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } +}; + +tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pasteword.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pasteword.js new file mode 100644 index 0000000..a52731c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/js/pasteword.js @@ -0,0 +1,51 @@ +tinyMCEPopup.requireLangPack(); + +var PasteWordDialog = { + init : function() { + var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = ''; + + // Create iframe + el.innerHTML = ''; + ifr = document.getElementById('iframe'); + doc = ifr.contentWindow.document; + + // Force absolute CSS urls + css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; + css = css.concat(tinymce.explode(ed.settings.content_css) || []); + tinymce.each(css, function(u) { + cssHTML += ''; + }); + + // Write content into iframe + doc.open(); + doc.write('' + cssHTML + ''); + doc.close(); + + doc.designMode = 'on'; + this.resize(); + + window.setTimeout(function() { + ifr.contentWindow.focus(); + }, 10); + }, + + insert : function() { + var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('iframe'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } + } +}; + +tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ar_dlg.js new file mode 100644 index 0000000..5f1fbc3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.paste_dlg',{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/cs_dlg.js new file mode 100644 index 0000000..66936bb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.paste_dlg',{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/da_dlg.js new file mode 100644 index 0000000..7e1b961 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.paste_dlg',{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/de_dlg.js new file mode 100644 index 0000000..d7bbe93 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.paste_dlg',{"word_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..bc74daf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/es_dlg.js new file mode 100644 index 0000000..d5edb69 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/es_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('es.paste_dlg',{ +text_title:"Use CTRL+V en su teclado para pegar el texto en la ventana.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V en su teclado para pegar el texto en la ventana." +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fi_dlg.js new file mode 100644 index 0000000..530e507 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.paste_dlg',{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fr_dlg.js new file mode 100644 index 0000000..acc5d63 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.paste_dlg',{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/he_dlg.js new file mode 100644 index 0000000..5fe796a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.paste_dlg',{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/hu_dlg.js new file mode 100644 index 0000000..826a7bf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.paste_dlg',{"word_title":"Haszn\u00e1lja a Ctrl V-t a billenty\u0171zet\u00e9n a sz\u00f6veg beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl V-t a billenty\u0171zet\u00e9n a sz\u00f6veg beilleszt\u00e9shez."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/it_dlg.js new file mode 100644 index 0000000..f1b8dc7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.paste_dlg',{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ja_dlg.js new file mode 100644 index 0000000..5af5982 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.paste_dlg',{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/nl_dlg.js new file mode 100644 index 0000000..bac8ac0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.paste_dlg',{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pl_dlg.js new file mode 100644 index 0000000..54fd41c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.paste_dlg',{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pt_dlg.js new file mode 100644 index 0000000..c9601cf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.paste_dlg',{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ru_dlg.js new file mode 100644 index 0000000..b360b07 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.paste_dlg',{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/sv_dlg.js new file mode 100644 index 0000000..1c99e2b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.paste_dlg',{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/tr_dlg.js new file mode 100644 index 0000000..16864b4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.paste_dlg',{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/uk_dlg.js new file mode 100644 index 0000000..b623289 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.paste_dlg',{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/vi_dlg.js new file mode 100644 index 0000000..25694d9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.paste_dlg',{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-cn_dlg.js new file mode 100644 index 0000000..4abd1a9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.paste_dlg',{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-tw_dlg.js new file mode 100644 index 0000000..ea2f214 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.paste_dlg',{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh_dlg.js new file mode 100644 index 0000000..d694f28 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/langs/zh_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('zh.paste_dlg',{ +text_title:"\u5C07\u8907\u88FD(CTRL + C)\u7684\u5167\u5BB9\u7C98\u8CBC(CTRL + V)\u5230\u8996\u7A97\u3002", +text_linebreaks:"\u4FDD\u7559\u5206\u884C\u7B26\u865F\u865F", +word_title:"\u5C07\u8907\u88FD(CTRL + C)\u7684\u5167\u5BB9\u7C98\u8CBC(CTRL + V)\u5230\u8996\u7A97\u3002" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/pastetext.htm b/ehcp/net2ftp/plugins/tinymce/plugins/paste/pastetext.htm new file mode 100644 index 0000000..b655945 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/pastetext.htm @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +
        +
        {#paste.paste_text_desc}
        + +
        + +
        + +
        + +
        {#paste_dlg.text_title}
        + + + +
        + + +
        +
        + + \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/paste/pasteword.htm b/ehcp/net2ftp/plugins/tinymce/plugins/paste/pasteword.htm new file mode 100644 index 0000000..0f6bb41 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/paste/pasteword.htm @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
        +
        {#paste.paste_word_desc}
        + +
        {#paste_dlg.word_title}
        + +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/preview/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Preview', { + init : function(ed, url) { + var t = this, css = tinymce.explode(ed.settings.content_css); + + t.editor = ed; + + // Force absolute CSS urls + tinymce.each(css, function(u, k) { + css[k] = ed.documentBaseURI.toAbsolute(u); + }); + + ed.addCommand('mcePreview', function() { + ed.windowManager.open({ + file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"), + width : parseInt(ed.getParam("plugin_preview_width", "550")), + height : parseInt(ed.getParam("plugin_preview_height", "600")), + resizable : "yes", + scrollbars : "yes", + popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"), + inline : ed.getParam("plugin_preview_inline", 1) + }, { + base : ed.documentBaseURI.getURI() + }); + }); + + ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); + }, + + getInfo : function() { + return { + longname : 'Preview', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('preview', tinymce.plugins.Preview); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/preview/example.html b/ehcp/net2ftp/plugins/tinymce/plugins/preview/example.html new file mode 100644 index 0000000..b2c3d90 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
        +
        + +
        + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/preview/jscripts/embed.js b/ehcp/net2ftp/plugins/tinymce/plugins/preview/jscripts/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/preview/jscripts/embed.js @@ -0,0 +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 += ''; + + h += ' + + + + + +{#preview.preview_desc} + + + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..3933fe6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/print/editor_plugin_src.js @@ -0,0 +1,34 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Print', { + init : function(ed, url) { + ed.addCommand('mcePrint', function() { + ed.getWin().print(); + }); + + ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); + }, + + getInfo : function() { + return { + longname : 'Print', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('print', tinymce.plugins.Print); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/safari/blank.htm b/ehcp/net2ftp/plugins/tinymce/plugins/safari/blank.htm new file mode 100644 index 0000000..266808c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/safari/blank.htm @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin.js new file mode 100644 index 0000000..f722c2f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin.js @@ -0,0 +1 @@ +(function(){var Event=tinymce.dom.Event,grep=tinymce.grep,each=tinymce.each,inArray=tinymce.inArray,isOldWebKit=tinymce.isOldWebKit;tinymce.create('tinymce.plugins.Safari',{init:function(ed){var t=this,dom;if(!tinymce.isWebKit)return;t.editor=ed;t.webKitFontSizes=['x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large'];t.namedFontSizes=['xx-small','x-small','small','medium','large','x-large','xx-large'];ed.onPaste.add(function(ed,e){function removeStyles(e){e=e.target;if(e.nodeType==1){e.style.cssText='';each(ed.dom.select('*',e),function(e){e.style.cssText='';});}};Event.add(ed.getDoc(),'DOMNodeInserted',removeStyles);window.setTimeout(function(){Event.remove(ed.getDoc(),'DOMNodeInserted',removeStyles);},0);});ed.onKeyUp.add(function(ed,e){var h,b;if(e.keyCode==46||e.keyCode==8){b=ed.getBody();h=b.innerHTML;if(b.childNodes.length==1&&!/<(img|hr)/.test(h)&&tinymce.trim(h.replace(/<[^>]+>/g,'')).length==0)ed.setContent('',{format:'raw'});}});ed.addCommand('FormatBlock',function(u,v){var dom=ed.dom,e=dom.getParent(ed.selection.getNode(),dom.isBlock);if(e)dom.replace(dom.create(v),e,1);else ed.getDoc().execCommand("FormatBlock",false,v);});ed.addCommand('mceInsertContent',function(u,v){ed.getDoc().execCommand("InsertText",false,'mce_marker');ed.getBody().innerHTML=ed.getBody().innerHTML.replace(/mce_marker/g,v+'XX');ed.selection.select(ed.dom.get('_mce_tmp'));ed.getDoc().execCommand("Delete",false,' ');});ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&(e.shiftKey||ed.settings.force_br_newlines&&ed.selection.getNode().nodeName!='LI')){t._insertBR(ed);Event.cancel(e);}});ed.addQueryValueHandler('FontSize',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;return ed.getDoc().queryCommandValue('FontSize');});ed.addQueryValueHandler('FontName',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');return ed.getDoc().queryCommandValue('FontName');});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName=='IMG'){t.selElm=e;ed.selection.select(e);}else t.selElm=null;});ed.onInit.add(function(){t._fixWebKitSpans();if(isOldWebKit)t._patchSafari2x(ed);});ed.onSetContent.add(function(){dom=ed.dom;each(['strong','b','em','u','strike','sub','sup','a'],function(v){each(grep(dom.select(v)).reverse(),function(n){var nn=n.nodeName.toLowerCase(),st;if(nn=='a'){if(n.name)dom.replace(dom.create('img',{mce_name:'a',name:n.name,'class':'mceItemAnchor'}),n);return;}switch(nn){case'b':case'strong':if(nn=='b')nn='strong';st='font-weight: bold;';break;case'em':st='font-style: italic;';break;case'u':st='text-decoration: underline;';break;case'sub':st='vertical-align: sub;';break;case'sup':st='vertical-align: super;';break;case'strike':st='text-decoration: line-through;';break;}dom.replace(dom.create('span',{mce_name:nn,style:st,'class':'Apple-style-span'}),n,1);});});});ed.onPreProcess.add(function(ed,o){dom=ed.dom;each(grep(o.node.getElementsByTagName('span')).reverse(),function(n){var v,bg;if(o.get){if(dom.hasClass(n,'Apple-style-span')){bg=n.style.backgroundColor;switch(dom.getAttrib(n,'mce_name')){case'font':if(!ed.settings.convert_fonts_to_spans)dom.setAttrib(n,'style','');break;case'strong':case'em':case'sub':case'sup':dom.setAttrib(n,'style','');break;case'strike':case'u':if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');else dom.setAttrib(n,'mce_name','');break;default:if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');}if(bg)n.style.backgroundColor=bg;}}if(dom.hasClass(n,'mceItemRemoved'))dom.remove(n,1);});});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/
        <\/(h[1-6]|div|p|address|pre)>/g,'');o.content=o.content.replace(/ id=\"undefined\"/g,'');});},getInfo:function(){return{longname:'Safari compatibility',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_fixWebKitSpans:function(){var t=this,ed=t.editor;if(!isOldWebKit){Event.add(ed.getDoc(),'DOMNodeInserted',function(e){e=e.target;if(e&&e.nodeType==1)t._fixAppleSpan(e);});}else{ed.onExecCommand.add(function(){each(ed.dom.select('span'),function(n){t._fixAppleSpan(n);});ed.nodeChanged();});}},_fixAppleSpan:function(e){var ed=this.editor,dom=ed.dom,fz=this.webKitFontSizes,fzn=this.namedFontSizes,s=ed.settings,st,p;if(dom.getAttrib(e,'mce_fixed'))return;if(e.nodeName=='SPAN'&&e.className=='Apple-style-span'){st=e.style;if(!s.convert_fonts_to_spans){if(st.fontSize){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'size',inArray(fz,st.fontSize)+1);}if(st.fontFamily){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'face',st.fontFamily);}if(st.color){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'color',dom.toHex(st.color));}if(st.backgroundColor){dom.setAttrib(e,'mce_name','font');dom.setStyle(e,'background-color',st.backgroundColor);}}else{if(st.fontSize)dom.setStyle(e,'fontSize',fzn[inArray(fz,st.fontSize)]);}if(st.fontWeight=='bold')dom.setAttrib(e,'mce_name','strong');if(st.fontStyle=='italic')dom.setAttrib(e,'mce_name','em');if(st.textDecoration=='underline')dom.setAttrib(e,'mce_name','u');if(st.textDecoration=='line-through')dom.setAttrib(e,'mce_name','strike');if(st.verticalAlign=='super')dom.setAttrib(e,'mce_name','sup');if(st.verticalAlign=='sub')dom.setAttrib(e,'mce_name','sub');dom.setAttrib(e,'mce_fixed','1');}},_patchSafari2x:function(ed){var t=this,setContent,getNode,dom=ed.dom,lr;if(ed.windowManager.onBeforeOpen){ed.windowManager.onBeforeOpen.add(function(){r=ed.selection.getRng();});}ed.selection.select=function(n){this.getSel().setBaseAndExtent(n,0,n,1);};getNode=ed.selection.getNode;ed.selection.getNode=function(){return t.selElm||getNode.call(this);};ed.selection.getRng=function(){var t=this,s=t.getSel(),d=ed.getDoc(),r,rb,ra,di;if(s.anchorNode){r=d.createRange();try{rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(1);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(1);di=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;r.setStart(di?s.anchorNode:s.focusNode,di?s.anchorOffset:s.focusOffset);r.setEnd(di?s.focusNode:s.anchorNode,di?s.focusOffset:s.anchorOffset);lr=r;}catch(ex){}}return r||lr;};setContent=ed.selection.setContent;ed.selection.setContent=function(h,s){var r=this.getRng(),b;try{setContent.call(this,h,s);}catch(ex){b=dom.create('body');b.innerHTML=h;each(b.childNodes,function(n){r.insertNode(n.cloneNode(true));});}};},_insertBR:function(ed){var dom=ed.dom,s=ed.selection,r=s.getRng(),br;r.insertNode(br=dom.create('br'));r.setStartAfter(br);r.setEndAfter(br);s.setRng(r);if(s.getSel().focusNode==br.previousSibling){s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'),br));s.collapse(1);}ed.getWin().scrollTo(0,dom.getPos(s.getRng().startContainer).y);}});tinymce.PluginManager.add('safari',tinymce.plugins.Safari);})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin_src.js new file mode 100644 index 0000000..c820353 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/safari/editor_plugin_src.js @@ -0,0 +1,460 @@ +/** + * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $ + * + * @author Moxiecode + * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. + */ + +(function() { + var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray, isOldWebKit = tinymce.isOldWebKit; + + tinymce.create('tinymce.plugins.Safari', { + init : function(ed) { + var t = this, dom; + + // Ignore on non webkit + if (!tinymce.isWebKit) + return; + + t.editor = ed; + t.webKitFontSizes = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large']; + t.namedFontSizes = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large']; + + // Safari will crash if the build in createlink command is used +/* ed.addCommand('CreateLink', function(u, v) { + ed.execCommand("mceInsertContent", false, '' + ed.selection.getContent() + ''); + });*/ + + ed.onPaste.add(function(ed, e) { + function removeStyles(e) { + e = e.target; + + if (e.nodeType == 1) { + e.style.cssText = ''; + + each(ed.dom.select('*', e), function(e) { + e.style.cssText = ''; + }); + } + }; + + Event.add(ed.getDoc(), 'DOMNodeInserted', removeStyles); + + window.setTimeout(function() { + Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles); + }, 0); + }); + + ed.onKeyUp.add(function(ed, e) { + var h, b; + + // If backspace or delete key + if (e.keyCode == 46 || e.keyCode == 8) { + b = ed.getBody(); + h = b.innerHTML; + + // If there is no text content or images or hr elements then remove everything + if (b.childNodes.length == 1 && !/<(img|hr)/.test(h) && tinymce.trim(h.replace(/<[^>]+>/g, '')).length == 0) + ed.setContent('', {format : 'raw'}); + } + }); + + // Workaround for FormatBlock bug, http://bugs.webkit.org/show_bug.cgi?id=16004 + ed.addCommand('FormatBlock', function(u, v) { + var dom = ed.dom, e = dom.getParent(ed.selection.getNode(), dom.isBlock); + + if (e) + dom.replace(dom.create(v), e, 1); + else + ed.getDoc().execCommand("FormatBlock", false, v); + }); + + // Workaround for InsertHTML bug, http://bugs.webkit.org/show_bug.cgi?id=16382 + ed.addCommand('mceInsertContent', function(u, v) { + ed.getDoc().execCommand("InsertText", false, 'mce_marker'); + ed.getBody().innerHTML = ed.getBody().innerHTML.replace(/mce_marker/g, v + 'XX'); + ed.selection.select(ed.dom.get('_mce_tmp')); + ed.getDoc().execCommand("Delete", false, ' '); + }); + + // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973 + ed.onKeyPress.add(function(ed, e) { + if (e.keyCode == 13 && (e.shiftKey || ed.settings.force_br_newlines && ed.selection.getNode().nodeName != 'LI')) { + t._insertBR(ed); + Event.cancel(e); + } + }); + + // Safari returns incorrect values + ed.addQueryValueHandler('FontSize', function(u, v) { + var e, v; + + // Check for the real font size at the start of selection + if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontSize)) + return tinymce.inArray(t.namedFontSizes, v) + 1; + + // Check for the real font size at the end of selection + if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontSize)) + return tinymce.inArray(t.namedFontSizes, v) + 1; + + // Return default value it's better than nothing right! + return ed.getDoc().queryCommandValue('FontSize'); + }); + + // Safari returns incorrect values + ed.addQueryValueHandler('FontName', function(u, v) { + var e, v; + + // Check for the real font name at the start of selection + if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontFamily)) + return v.replace(/, /g, ','); + + // Check for the real font name at the end of selection + if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontFamily)) + return v.replace(/, /g, ','); + + // Return default value it's better than nothing right! + return ed.getDoc().queryCommandValue('FontName'); + }); + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName == 'IMG') { + t.selElm = e; + ed.selection.select(e); + } else + t.selElm = null; + }); + +/* ed.onBeforeExecCommand.add(function(ed, c, b) { + var r = t.bookmarkRng; + + // Restore selection + if (r) { + ed.selection.setRng(r); + t.bookmarkRng = null; + //console.debug('restore', r.startContainer, r.startOffset, r.endContainer, r.endOffset); + } + });*/ + + ed.onInit.add(function() { + t._fixWebKitSpans(); + +/* ed.windowManager.onOpen.add(function() { + var r = ed.selection.getRng(); + + // Store selection if valid + if (r.startContainer != ed.getDoc()) { + t.bookmarkRng = r.cloneRange(); + //console.debug('store', r.startContainer, r.startOffset, r.endContainer, r.endOffset); + } + }); + + ed.windowManager.onClose.add(function() { + t.bookmarkRng = null; + });*/ + + if (isOldWebKit) + t._patchSafari2x(ed); + }); + + ed.onSetContent.add(function() { + dom = ed.dom; + + // Convert strong,b,em,u,strike to spans + each(['strong','b','em','u','strike','sub','sup','a'], function(v) { + each(grep(dom.select(v)).reverse(), function(n) { + var nn = n.nodeName.toLowerCase(), st; + + // Convert anchors into images + if (nn == 'a') { + if (n.name) + dom.replace(dom.create('img', {mce_name : 'a', name : n.name, 'class' : 'mceItemAnchor'}), n); + + return; + } + + switch (nn) { + case 'b': + case 'strong': + if (nn == 'b') + nn = 'strong'; + + st = 'font-weight: bold;'; + break; + + case 'em': + st = 'font-style: italic;'; + break; + + case 'u': + st = 'text-decoration: underline;'; + break; + + case 'sub': + st = 'vertical-align: sub;'; + break; + + case 'sup': + st = 'vertical-align: super;'; + break; + + case 'strike': + st = 'text-decoration: line-through;'; + break; + } + + dom.replace(dom.create('span', {mce_name : nn, style : st, 'class' : 'Apple-style-span'}), n, 1); + }); + }); + }); + + ed.onPreProcess.add(function(ed, o) { + dom = ed.dom; + + each(grep(o.node.getElementsByTagName('span')).reverse(), function(n) { + var v, bg; + + if (o.get) { + if (dom.hasClass(n, 'Apple-style-span')) { + bg = n.style.backgroundColor; + + switch (dom.getAttrib(n, 'mce_name')) { + case 'font': + if (!ed.settings.convert_fonts_to_spans) + dom.setAttrib(n, 'style', ''); + break; + + case 'strong': + case 'em': + case 'sub': + case 'sup': + dom.setAttrib(n, 'style', ''); + break; + + case 'strike': + case 'u': + if (!ed.settings.inline_styles) + dom.setAttrib(n, 'style', ''); + else + dom.setAttrib(n, 'mce_name', ''); + + break; + + default: + if (!ed.settings.inline_styles) + dom.setAttrib(n, 'style', ''); + } + + + if (bg) + n.style.backgroundColor = bg; + } + } + + if (dom.hasClass(n, 'mceItemRemoved')) + dom.remove(n, 1); + }); + }); + + ed.onPostProcess.add(function(ed, o) { + // Safari adds BR at end of all block elements + o.content = o.content.replace(/
        <\/(h[1-6]|div|p|address|pre)>/g, ''); + + // Safari adds id="undefined" to HR elements + o.content = o.content.replace(/ id=\"undefined\"/g, ''); + }); + }, + + getInfo : function() { + return { + longname : 'Safari compatibility', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Internal methods + + _fixWebKitSpans : function() { + var t = this, ed = t.editor; + + if (!isOldWebKit) { + // Use mutator events on new WebKit + Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) { + e = e.target; + + if (e && e.nodeType == 1) + t._fixAppleSpan(e); + }); + } else { + // Do post command processing in old WebKit since the browser crashes on Mutator events :( + ed.onExecCommand.add(function() { + each(ed.dom.select('span'), function(n) { + t._fixAppleSpan(n); + }); + + ed.nodeChanged(); + }); + } + }, + + _fixAppleSpan : function(e) { + var ed = this.editor, dom = ed.dom, fz = this.webKitFontSizes, fzn = this.namedFontSizes, s = ed.settings, st, p; + + if (dom.getAttrib(e, 'mce_fixed')) + return; + + // Handle Apple style spans + if (e.nodeName == 'SPAN' && e.className == 'Apple-style-span') { + st = e.style; + + if (!s.convert_fonts_to_spans) { + if (st.fontSize) { + dom.setAttrib(e, 'mce_name', 'font'); + dom.setAttrib(e, 'size', inArray(fz, st.fontSize) + 1); + } + + if (st.fontFamily) { + dom.setAttrib(e, 'mce_name', 'font'); + dom.setAttrib(e, 'face', st.fontFamily); + } + + if (st.color) { + dom.setAttrib(e, 'mce_name', 'font'); + dom.setAttrib(e, 'color', dom.toHex(st.color)); + } + + if (st.backgroundColor) { + dom.setAttrib(e, 'mce_name', 'font'); + dom.setStyle(e, 'background-color', st.backgroundColor); + } + } else { + if (st.fontSize) + dom.setStyle(e, 'fontSize', fzn[inArray(fz, st.fontSize)]); + } + + if (st.fontWeight == 'bold') + dom.setAttrib(e, 'mce_name', 'strong'); + + if (st.fontStyle == 'italic') + dom.setAttrib(e, 'mce_name', 'em'); + + if (st.textDecoration == 'underline') + dom.setAttrib(e, 'mce_name', 'u'); + + if (st.textDecoration == 'line-through') + dom.setAttrib(e, 'mce_name', 'strike'); + + if (st.verticalAlign == 'super') + dom.setAttrib(e, 'mce_name', 'sup'); + + if (st.verticalAlign == 'sub') + dom.setAttrib(e, 'mce_name', 'sub'); + + dom.setAttrib(e, 'mce_fixed', '1'); + } + }, + + _patchSafari2x : function(ed) { + var t = this, setContent, getNode, dom = ed.dom, lr; + + // Inline dialogs + if (ed.windowManager.onBeforeOpen) { + ed.windowManager.onBeforeOpen.add(function() { + r = ed.selection.getRng(); + }); + } + + // Fake select on 2.x + ed.selection.select = function(n) { + this.getSel().setBaseAndExtent(n, 0, n, 1); + }; + + getNode = ed.selection.getNode; + ed.selection.getNode = function() { + return t.selElm || getNode.call(this); + }; + + // Fake range on Safari 2.x + ed.selection.getRng = function() { + var t = this, s = t.getSel(), d = ed.getDoc(), r, rb, ra, di; + + // Fake range on Safari 2.x + if (s.anchorNode) { + r = d.createRange(); + + try { + // Setup before range + rb = d.createRange(); + rb.setStart(s.anchorNode, s.anchorOffset); + rb.collapse(1); + + // Setup after range + ra = d.createRange(); + ra.setStart(s.focusNode, s.focusOffset); + ra.collapse(1); + + // Setup start/end points by comparing locations + di = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0; + r.setStart(di ? s.anchorNode : s.focusNode, di ? s.anchorOffset : s.focusOffset); + r.setEnd(di ? s.focusNode : s.anchorNode, di ? s.focusOffset : s.anchorOffset); + + lr = r; + } catch (ex) { + // Sometimes fails, at least we tried to do it by the book. I hope Safari 2.x will go disappear soooon!!! + } + } + + return r || lr; + }; + + // Fix setContent so it works + setContent = ed.selection.setContent; + ed.selection.setContent = function(h, s) { + var r = this.getRng(), b; + + try { + setContent.call(this, h, s); + } catch (ex) { + // Workaround for Safari 2.x + b = dom.create('body'); + b.innerHTML = h; + + each(b.childNodes, function(n) { + r.insertNode(n.cloneNode(true)); + }); + } + }; + }, + + _insertBR : function(ed) { + var dom = ed.dom, s = ed.selection, r = s.getRng(), br; + + // Insert BR element + r.insertNode(br = dom.create('br')); + + // Place caret after BR + r.setStartAfter(br); + r.setEndAfter(br); + s.setRng(r); + + // Could not place caret after BR then insert an nbsp entity and move the caret + if (s.getSel().focusNode == br.previousSibling) { + s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br)); + s.collapse(1); + } + + // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117 + ed.getWin().scrollTo(0, dom.getPos(s.getRng().startContainer).y); + } + }); + + // Register plugin + tinymce.PluginManager.add('safari', tinymce.plugins.Safari); +})(); + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..f5a3de8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/save/editor_plugin_src.js @@ -0,0 +1,101 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Save', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceSave', t._save, t); + ed.addCommand('mceCancel', t._cancel, t); + + // Register buttons + ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); + ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); + + ed.onNodeChange.add(t._nodeChange, t); + ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); + }, + + getInfo : function() { + return { + longname : 'Save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var ed = this.editor; + + if (ed.getParam('save_enablewhendirty')) { + cm.setDisabled('save', !ed.isDirty()); + cm.setDisabled('cancel', !ed.isDirty()); + } + }, + + // Private methods + + _save : function() { + var ed = this.editor, formObj, os, i, elementId; + + formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); + + if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) + return; + + tinyMCE.triggerSave(); + + // Use callback instead + if (os = ed.getParam("save_onsavecallback")) { + if (ed.execCallback('save_onsavecallback', ed)) { + ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); + ed.nodeChanged(); + } + + return; + } + + if (formObj) { + ed.isNotDirty = true; + + if (formObj.onsubmit == null || formObj.onsubmit() != false) + formObj.submit(); + + ed.nodeChanged(); + } else + ed.windowManager.alert("Error: No form element found."); + }, + + _cancel : function() { + var ed = this.editor, os, h = tinymce.trim(ed.startContent); + + // Use callback instead + if (os = ed.getParam("save_oncancelcallback")) { + ed.execCallback('save_oncancelcallback', ed); + return; + } + + ed.setContent(h); + ed.undoManager.clear(); + ed.nodeChanged(); + } + }); + + // Register plugin + tinymce.PluginManager.add('save', tinymce.plugins.Save); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/css/searchreplace.css b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..ecdf58c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/css/searchreplace.css @@ -0,0 +1,6 @@ +.panel_wrapper {height:85px;} +.panel_wrapper div.current {height:85px;} + +/* IE */ +* html .panel_wrapper {height:100px;} +* html .panel_wrapper div.current {height:100px;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..165bc12 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..4c87e8f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/editor_plugin_src.js @@ -0,0 +1,61 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.SearchReplacePlugin', { + init : function(ed, url) { + function open(m) { + // Keep IE from writing out the f/r character to the editor + // instance while initializing a new dialog. See: #3131190 + window.focus(); + + ed.windowManager.open({ + file : url + '/searchreplace.htm', + width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), + height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), + inline : 1, + auto_focus : 0 + }, { + mode : m, + search_string : ed.selection.getContent({format : 'text'}), + plugin_url : url + }); + }; + + // Register commands + ed.addCommand('mceSearch', function() { + open('search'); + }); + + ed.addCommand('mceReplace', function() { + open('replace'); + }); + + // Register buttons + ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); + ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); + + ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); + }, + + getInfo : function() { + return { + longname : 'Search/Replace', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/js/searchreplace.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..80284b9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/js/searchreplace.js @@ -0,0 +1,142 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + t.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + + mcTabs.onChange.add(function(tab_id, panel_id) { + t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); + }); + }, + + switchMode : function(m) { + var f, lm = this.lastMode; + + if (lm != m) { + f = document.forms[0]; + + if (lm) { + f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; + f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; + f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; + f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; + } + + mcTabs.displayTab(m + '_tab', m + '_panel'); + document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; + document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; + this.lastMode = m; + } + }, + + searchNext : function(a) { + var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; + + // Get input + f = document.forms[0]; + s = f[m + '_panel_searchstring'].value; + b = f[m + '_panel_backwardsu'].checked; + ca = f[m + '_panel_casesensitivebox'].checked; + rs = f['replace_panel_replacestring'].value; + + if (tinymce.isIE) { + r = ed.getDoc().selection.createRange(); + } + + if (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE + }; + + // IE flags + if (ca) + fl = fl | 4; + + switch (a) { + case 'all': + // Move caret to beginning of text + ed.execCommand('SelectAll'); + ed.selection.collapse(true); + + if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + + while (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + replace(); + fo = 1; + + if (b) { + r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } + } + + tinyMCEPopup.storeSelection(); + } else { + while (w.find(s, ca, b, false, false, false, false)) { + replace(); + fo = 1; + } + } + + if (fo) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); + else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + return; + + case 'current': + if (!ed.selection.isCollapsed()) + replace(); + + break; + } + + se.collapse(b); + r = se.getRng(); + + // Whats the point + if (!s) + return; + + if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + + if (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + } else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + tinyMCEPopup.storeSelection(); + } else { + if (!w.find(s, ca, b, false, false, false, false)) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + else + fix(); + } + } +}; + +tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ar_dlg.js new file mode 100644 index 0000000..4e6674b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.searchreplace_dlg',{findwhat:"\u0627\u0628\u062d\u062b \u0639\u0646",replacewith:"\u0627\u0633\u062a\u0628\u062f\u0644 \u0628\u0640",direction:"\u0627\u0644\u0627\u062a\u062c\u0627\u0647",up:"\u0644\u0623\u0639\u0644\u0649",down:"\u0644\u0623\u0633\u0641\u0644",mcase:"\u062d\u0627\u0644\u0647 \u0627\u0644\u062a\u0637\u0627\u0628\u0642",findnext:"\u0627\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u062a\u0627\u0644\u0649",allreplaced:"\u062a\u0645\u062a \u0639\u0645\u0644\u064a\u0647 \u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644","searchnext_desc":"\u0628\u062d\u062b \u0645\u0631\u0647 \u0627\u062e\u0631\u0649",notfound:"\u0644\u0642\u062f \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0628\u062d\u062b \u0648\u0644\u0645 \u0646\u0639\u062b\u0631 \u0639\u0644\u0649 \u0627\u0649 \u0646\u062a\u064a\u062c\u0647","search_title":"\u0628\u062d\u062b","replace_title":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644",replaceall:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644",replace:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/cs_dlg.js new file mode 100644 index 0000000..8165408 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.searchreplace_dlg',{findwhat:"Co hledat",replacewith:"\u010c\u00edm nahradit",direction:"Sm\u011br",up:"Nahoru",down:"Dol\u016f",mcase:"Rozli\u0161ovat velikost",findnext:"Naj\u00edt dal\u0161\u00ed",allreplaced:"V\u0161echny v\u00fdskyty byly nahrazeny.","searchnext_desc":"Naj\u00edt dal\u0161\u00ed",notfound:"Hled\u00e1n\u00ed bylo dokon\u010deno. Hledan\u00fd text nebyl nalezen.","search_title":"Naj\u00edt","replace_title":"Naj\u00edt/nahradit",replaceall:"Nahradit v\u0161e",replace:"Nahradit"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/da_dlg.js new file mode 100644 index 0000000..b551cea --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.searchreplace_dlg',{findwhat:"S\u00f8g efter",replacewith:"Erstat med",direction:"Retning",up:"Op",down:"Ned",mcase:"Forskel p\u00e5 store og sm\u00e5 bogstaver",findnext:"Find n\u00e6ste",allreplaced:"Alle forekomster af s\u00f8gestrengen er erstattet.","searchnext_desc":"S\u00f8g igen",notfound:"S\u00f8gningen gav intet resultat.","search_title":"S\u00f8g","replace_title":"S\u00f8g / erstat",replaceall:"Erstat alle",replace:"Erstat"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/de_dlg.js new file mode 100644 index 0000000..7c40acd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.searchreplace_dlg',{findwhat:"Zu suchender Text",replacewith:"Ersetzen durch",direction:"Suchrichtung",up:"Aufw\u00e4rts",down:"Abw\u00e4rts",mcase:"Gro\u00df-/Kleinschreibung beachten",findnext:"Weitersuchen",allreplaced:"Alle Vorkommen der Zeichenkette wurden ersetzt.","searchnext_desc":"Weitersuchen",notfound:"Die Suche ist am Ende angelangt. Die Zeichenkette konnte nicht gefunden werden.","search_title":"Suchen","replace_title":"Suchen/Ersetzen",replaceall:"Alle ersetzen",replace:"Ersetzen"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..8a65900 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/es_dlg.js new file mode 100644 index 0000000..b54c74b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/es_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('es.searchreplace_dlg',{ +searchnext_desc:"Buscar de nuevo", +notfound:"La b\u00FAsqueda se ha completado. No se encontr\u00F3 el texto introducido.", +search_title:"Buscar", +replace_title:"Buscar/Reemplazar", +allreplaced:"Se ha reemplazado el texto.", +findwhat:"Qu\u00E9 buscar", +replacewith:"Reemplazar por", +direction:"Direcci\u00F3n", +up:"Arriba", +down:"Abajo", +mcase:"Min\u00FAs./May\u00FAs.", +findnext:"Buscar siguiente", +replace:"Reemplazar", +replaceall:"Reemplazar todo" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fi_dlg.js new file mode 100644 index 0000000..c2617c3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.searchreplace_dlg',{findwhat:"Etsit\u00e4\u00e4n",replacewith:"Korvataan",direction:"Suunta",up:"Yl\u00f6s",down:"Alas",mcase:"Huomioi isot ja pienet kirjaimet",findnext:"Etsi seuraavaa",allreplaced:"Kaikki l\u00f6ydetyt merkkijonot korvattiin.","searchnext_desc":"Etsi uudestaan",notfound:"Haku on valmis. Haettua teksti\u00e4 ei l\u00f6ytynyt.","search_title":"Haku","replace_title":"Etsi ja korvaa",replaceall:"Korvaa kaikki",replace:"Korvaa"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fr_dlg.js new file mode 100644 index 0000000..707b5c2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.searchreplace_dlg',{findwhat:"Rechercher ceci",replacewith:"Remplacer par",direction:"Direction",up:"Vers le haut",down:"Vers le bas",mcase:"Sensible \u00e0 la casse",findnext:"Rechercher le suivant",allreplaced:"Toutes les occurrences de la cha\u00eene recherch\u00e9e ont \u00e9t\u00e9 remplac\u00e9es.","searchnext_desc":"Suivant",notfound:"La recherche est termin\u00e9e. La cha\u00eene recherch\u00e9e n\'a pas \u00e9t\u00e9 trouv\u00e9e.","search_title":"Rechercher","replace_title":"Rechercher / remplacer",replaceall:"Tout remplacer",replace:"Remplacer"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/he_dlg.js new file mode 100644 index 0000000..c5861bb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.searchreplace_dlg',{findwhat:"\u05dc\u05d7\u05e4\u05e9 \u05d0\u05ea",replacewith:"\u05dc\u05d4\u05d7\u05dc\u05d9\u05e3 \u05d1",direction:"\u05db\u05d9\u05d5\u05d5\u05df",up:"\u05dc\u05de\u05e2\u05dc\u05d4",down:"\u05dc\u05de\u05d8\u05d4",mcase:"\u05d4\u05ea\u05d0\u05dd \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea",findnext:"\u05d7\u05e4\u05e9 \u05d0\u05ea \u05d4\u05d1\u05d0",allreplaced:"\u05db\u05dc \u05e4\u05e8\u05d9\u05d8\u05d9 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d5\u05d7\u05dc\u05e4\u05d5","searchnext_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d1\u05d0",notfound:"\u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05e1\u05ea\u05d9\u05d9\u05dd. \u05e4\u05e8\u05d9\u05d8 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0.","search_title":"\u05d7\u05d9\u05e4\u05d5\u05e9","replace_title":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4",replaceall:"\u05d4\u05d7\u05dc\u05e4\u05ea \u05d4\u05db\u05dc",replace:"\u05d4\u05d7\u05dc\u05e4\u05d4"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/hu_dlg.js new file mode 100644 index 0000000..c34352d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.searchreplace_dlg',{findwhat:"Mit keres",replacewith:"Mire cser\u00e9l",direction:"Ir\u00e1ny",up:"Fel",down:"Le",mcase:"Kis- \u00e9s nagybet\u0171k megk\u00fcl\u00f6nb\u00f6ztet\u00e9se",findnext:"K\u00f6vetkez\u0151 keres\u00e9se",allreplaced:"A keresett r\u00e9szsz\u00f6veg minden el\u0151fordul\u00e1sa cser\u00e9lve lett.","searchnext_desc":"Keres\u00e9s megint",notfound:"A keres\u00e9s v\u00e9get \u00e9rt. A keresett sz\u00f6vegr\u00e9sz nem tal\u00e1lhat\u00f3.","search_title":"Keres\u00e9s","replace_title":"Keres\u00e9s/Csere",replaceall:"\u00d6sszes cser\u00e9je",replace:"Csere"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/it_dlg.js new file mode 100644 index 0000000..da34e5d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.searchreplace_dlg',{findwhat:"Trova:",replacewith:"Sostituisci con:",direction:"Direzione",up:"Avanti",down:"Indietro",mcase:"Maiuscole/minuscole",findnext:"Trova succ.",allreplaced:"Tutte le occorrenze del criterio di ricerca sono state sostituite.","searchnext_desc":"Trova successivo",notfound:"Ricerca completata. Nessun risultato trovato.","search_title":"Trova","replace_title":"Trova/Sostituisci",replaceall:"Sost. tutto",replace:"Sostituisci"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ja_dlg.js new file mode 100644 index 0000000..a12eb78 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.searchreplace_dlg',{findwhat:"\u691c\u7d22\u3059\u308b\u6587\u5b57\u5217",replacewith:"\u7f6e\u63db\u5f8c\u306e\u6587\u5b57\u5217",direction:"\u65b9\u5411",up:"\u4e0a\u3078",down:"\u4e0b\u3078",mcase:"\u5927\u6587\u5b57\u30fb\u5c0f\u6587\u5b57\u306e\u533a\u5225",findnext:"\u6b21\u3092\u691c\u7d22",allreplaced:"\u3059\u3079\u3066\u7f6e\u63db\u3057\u307e\u3057\u305f\u3002","searchnext_desc":"\u518d\u691c\u7d22",notfound:"\u691c\u7d22\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u691c\u7d22\u6587\u5b57\u5217\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","search_title":"\u691c\u7d22","replace_title":"\u691c\u7d22\u3068\u7f6e\u63db",replaceall:"\u3059\u3079\u3066\u7f6e\u63db",replace:"\u7f6e\u63db"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/nl_dlg.js new file mode 100644 index 0000000..afda5f0 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.searchreplace_dlg',{findwhat:"Zoeken naar",replacewith:"Vervangen door",direction:"Richting",up:"Omhoog",down:"Omlaag",mcase:"Identieke hoofdletters/kleine letters",findnext:"Zoeken",allreplaced:"Alle instanties van de zoekterm zijn vervangen.","searchnext_desc":"Opnieuw zoeken",notfound:"Het doorzoeken is voltooid. De zoekterm kon niet meer worden gevonden.","search_title":"Zoeken","replace_title":"Zoeken/Vervangen",replaceall:"Alles verv.",replace:"Vervangen"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pl_dlg.js new file mode 100644 index 0000000..df815de --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.searchreplace_dlg',{findwhat:"Znajd\u017a...",replacewith:"Zamie\u0144 na...",direction:"Kierunek",up:"W g\u00f3r\u0119",down:"W d\u00f3\u0142",mcase:"Uwzgl\u0119dniaj wielko\u015b\u0107 liter",findnext:"Znajd\u017a nast\u0119pny",allreplaced:"Wszystkie wyst\u0105pienia szukanego fragmentu zosta\u0142y zast\u0105pione.","searchnext_desc":"Znajd\u017a ponownie",notfound:"Wyszukiwanie zako\u0144czone. Poszukiwany fragment nie zosta\u0142 znaleziony.","search_title":"Znajd\u017a","replace_title":"Znajd\u017a/zamie\u0144",replaceall:"Zamie\u0144 wszystko",replace:"Zamie\u0144"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pt_dlg.js new file mode 100644 index 0000000..25c9a42 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Substituir com",direction:"Dire\u00e7\u00e3o",up:"Acima",down:"Abaixo",mcase:"Diferenciar mai\u00fasculas",findnext:"Localizar pr\u00f3x.",allreplaced:"Todas as substitui\u00e7\u00f5es foram efetuadas.","searchnext_desc":"Localizar novamente",notfound:"A pesquisa foi conclu\u00edda sem resultados.","search_title":"Localizar","replace_title":"Localizar/substituir",replaceall:"Subst. todos",replace:"Substituir"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ru_dlg.js new file mode 100644 index 0000000..3cc2af8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.searchreplace_dlg',{findwhat:"\u041f\u043e\u0438\u0441\u043a",replacewith:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",up:"\u0412\u0432\u0435\u0440\u0445 ",down:"\u0412\u043d\u0438\u0437",mcase:"\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440",findnext:"\u041d\u0430\u0439\u0442\u0438 \u0434\u0430\u043b\u0435\u0435",allreplaced:"\u0412\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b.","searchnext_desc":"\u041d\u0430\u0439\u0442\u0438 \u0435\u0449\u0435",notfound:"\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. \u0421\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u041f\u043e\u0438\u0441\u043a","replace_title":"\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430",replaceall:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0435\u043d\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/sv_dlg.js new file mode 100644 index 0000000..d503ec8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.searchreplace_dlg',{findwhat:"Hitta vad",replacewith:"Ers\u00e4tt med",direction:"Riktning",up:"Upp\u00e5t",down:"Ner\u00e5t",mcase:"Matcha gemener/versaler",findnext:"Hitta n\u00e4sta",allreplaced:"Alla st\u00e4llen d\u00e4r s\u00f6kstr\u00e4ngen kunde hittas har ersatts.","searchnext_desc":"S\u00f6k igen",notfound:"S\u00f6kningen har slutf\u00f6rts. S\u00f6kstr\u00e4ngen kunde inte hittas.","search_title":"S\u00f6k","replace_title":"S\u00f6k/ers\u00e4tt",replaceall:"Ers\u00e4tt alla",replace:"Ers\u00e4tt"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/tr_dlg.js new file mode 100644 index 0000000..e5ef98c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.searchreplace_dlg',{findwhat:"Aranan",replacewith:"Yeni de\u011fer",direction:"Y\u00f6n",up:"Yukar\u0131",down:"A\u015fa\u011f\u0131",mcase:"B\u00fcy\u00fck/k\u00fc\u00e7\u00fck duyarl\u0131",findnext:"Sonrakini bul",allreplaced:"Aranan metin bulundu\u011fu yerlede de\u011fi\u015ftirildi.","searchnext_desc":"Tekrar ara",notfound:"Arama tamamland\u0131. Aranan metin bulunamad\u0131.","search_title":"Bul","replace_title":"Bul/De\u011fi\u015ftir",replaceall:"T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",replace:"De\u011fi\u015ftir"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/uk_dlg.js new file mode 100644 index 0000000..cdb46ab --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.searchreplace_dlg',{findwhat:"\u0417\u043d\u0430\u0439\u0442\u0438",replacewith:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043f\u043e\u0448\u0443\u043a\u0443",up:"\u0412\u0433\u043e\u0440\u0443",down:"\u0412\u043d\u0438\u0437",mcase:"\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0454\u0441\u0442\u0440",findnext:"\u0417\u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0435",allreplaced:"\u0412\u0441\u0456 \u0432\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0440\u044f\u0434\u043a\u0430 \u0431\u0443\u043b\u0438 \u0437\u0430\u043c\u0456\u043d\u0435\u043d\u0456.","searchnext_desc":"\u0417\u043d\u0430\u0439\u0442\u0438 \u0449\u0435",notfound:"\u041f\u043e\u0448\u0443\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u041f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u0428\u0443\u043a\u0430\u0442\u0438","replace_title":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438",replaceall:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/vi_dlg.js new file mode 100644 index 0000000..f291ee7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.searchreplace_dlg',{findwhat:"T\u00ecm ki\u1ebfm g\u00ec",replacewith:"Thay th\u1ebf v\u1edbi",direction:"H\u01b0\u1edbng",up:"L\u00ean",down:"Xu\u1ed1ng",mcase:"Theo c\u1ea3 ch\u1eef hoa",findnext:"T\u00ecm k\u1ebf ti\u1ebfp",allreplaced:"T\u1ea5t c\u1ea3 c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a c\u00e1c chu\u1ed7i t\u00ecm ki\u1ebfm \u0111\u01b0\u1ee3c thay th\u1ebf.","searchnext_desc":"T\u00ecm l\u1ea1i",notfound:"Vi\u1ec7c t\u00ecm ki\u1ebfm \u0111\u00e3 ho\u00e0n th\u00e0nh. Chu\u1ed7i t\u00ecm ki\u1ebfm kh\u00f4ng \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","search_title":"T\u00ecm ki\u1ebfm","replace_title":"T\u00ecm/Thay th\u1ebf",replaceall:"Thay th\u1ebf t\u1ea5t",replace:"Thay th\u1ebf"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-cn_dlg.js new file mode 100644 index 0000000..8891247 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u67e5\u627e\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u51fa\u73b0\u7684\u5b57\u7b26\u5747\u5df2\u66ff\u6362\u3002","searchnext_desc":"\u7ee7\u7eed\u67e5\u627e",notfound:"\u67e5\u627e\u5b8c\u6210\uff0c\u672a\u627e\u5230\u7b26\u5408\u7684\u6587\u5b57\u3002","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u5168\u90e8\u66ff\u6362",replace:"\u66ff\u6362"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-tw_dlg.js new file mode 100644 index 0000000..f60db8e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.searchreplace_dlg',{findwhat:"\u5c0b\u627e",replacewith:"\u53d6\u4ee3\u6210",direction:"\u5c0b\u627e\u7684\u65b9\u5411",up:"\u5f80\u4e0a\u627e",down:"\u5f80\u4e0b\u627e",mcase:"\u5927\u5c0f\u5beb\u5340\u5206\u958b\u4f86",findnext:"\u627e\u4e0b\u4e00\u500b",allreplaced:"\u53d6\u4ee3\u5b8c\u6210","searchnext_desc":"\u518d\u627e\u4e00\u6b21",notfound:"\u627e\u4e0d\u5230\u7b26\u5408\u7684\u8cc7\u6599","search_title":"\u5c0b\u627e","replace_title":"\u5c0b\u627e / \u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh_dlg.js new file mode 100644 index 0000000..5be8a8b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/langs/zh_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('zh.searchreplace_dlg',{ +searchnext_desc:"\u518D\u6B21\u67E5\u627E", +notfound:"\u67E5\u627E\u5DF2\u5B8C\u6210 ! \u627E\u4E0D\u5230\u4EFB\u4F55\u76EE\u6A19\u3002 ", +search_title:"\u67E5\u627E", +replace_title:"\u67E5\u627E/\u66FF\u63DB", +allreplaced:"\u5DF2\u66FF\u63DB\u6240\u6709\u5339\u914D\u7684\u5B57\u4E32.", +findwhat:"\u67E5\u627E\u76EE\u6A19", +replacewith:"\u66FF\u63DB\u70BA", +direction:"\u65B9\u5411", +up:"\u5411\u4E0A", +down:"\u5411\u4E0B", +mcase:"\u5340\u5206\u5927\u5C0F\u5BEB", +findnext:"\u67E5\u627E\u4E0B\u4E00\u500B", +replace:"\u66FF\u63DB", +replaceall:"\u5168\u90E8\u66FF\u63DB" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/searchreplace.htm b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..2443a91 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,100 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + + +
        + + +
        +
        + + + + + + + + + + + +
        + + + + + + + + + +
        + + + + + +
        +
        +
        + +
        + + + + + + + + + + + + + + + +
        + + + + + + + + + +
        + + + + + +
        +
        +
        + +
        + +
        + + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/css/content.css b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..24efa02 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/css/content.css @@ -0,0 +1 @@ +.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..48549c9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..86fdfce --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,436 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.SpellcheckerPlugin', { + getInfo : function() { + return { + longname : 'Spellchecker', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + init : function(ed, url) { + var t = this, cm; + + t.url = url; + t.editor = ed; + t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); + + if (t.rpcUrl == '{backend}') { + // Sniff if the browser supports native spellchecking (Don't know of a better way) + if (tinymce.isIE) + return; + + t.hasSupport = true; + + // Disable the context menu when spellchecking is active + ed.onContextMenu.addToTop(function(ed, e) { + if (t.active) + return false; + }); + } + + // Register commands + ed.addCommand('mceSpellCheck', function() { + if (t.rpcUrl == '{backend}') { + // Enable/disable native spellchecker + t.editor.getBody().spellcheck = t.active = !t.active; + return; + } + + if (!t.active) { + ed.setProgressState(1); + t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { + if (r.length > 0) { + t.active = 1; + t._markWords(r); + ed.setProgressState(0); + ed.nodeChanged(); + } else { + ed.setProgressState(0); + + if (ed.getParam('spellchecker_report_no_misspellings', true)) + ed.windowManager.alert('spellchecker.no_mpell'); + } + }); + } else + t._done(); + }); + + if (ed.settings.content_css !== false) + ed.contentCSS.push(url + '/css/content.css'); + + ed.onClick.add(t._showMenu, t); + ed.onContextMenu.add(t._showMenu, t); + ed.onBeforeGetContent.add(function() { + if (t.active) + t._removeWords(); + }); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('spellchecker', t.active); + }); + + ed.onSetContent.add(function() { + t._done(); + }); + + ed.onBeforeGetContent.add(function() { + t._done(); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd) { + if (cmd == 'mceFullScreen') + t._done(); + }); + + // Find selected language + t.languages = {}; + each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { + if (k.indexOf('+') === 0) { + k = k.substring(1); + t.selectedLang = v; + } + + t.languages[k] = v; + }); + }, + + createControl : function(n, cm) { + var t = this, c, ed = t.editor; + + if (n == 'spellchecker') { + // Use basic button if we use the native spellchecker + if (t.rpcUrl == '{backend}') { + // Create simple toggle button if we have native support + if (t.hasSupport) + c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + return c; + } + + c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + c.onRenderMenu.add(function(c, m) { + m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(t.languages, function(v, k) { + var o = {icon : 1}, mi; + + o.onclick = function() { + if (v == t.selectedLang) { + return; + } + mi.setSelected(1); + t.selectedItem.setSelected(0); + t.selectedItem = mi; + t.selectedLang = v; + }; + + o.title = k; + mi = m.add(o); + mi.setSelected(v == t.selectedLang); + + if (v == t.selectedLang) + t.selectedItem = mi; + }) + }); + + return c; + } + }, + + // Internal functions + + _walk : function(n, f) { + var d = this.editor.getDoc(), w; + + if (d.createTreeWalker) { + w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); + + while ((n = w.nextNode()) != null) + f.call(this, n); + } else + tinymce.walk(n, f, 'childNodes'); + }, + + _getSeparators : function() { + var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c'); + + // Build word separator regexp + for (i=0; i elements content is broken after spellchecking. + // Bug #1408: Preceding whitespace characters are removed + // @TODO: I'm not sure that both are still issues on IE9. + if (tinymce.isIE) { + // Enclose mispelled words with temporal tag + v = v.replace(rx, '$1$2'); + // Loop over the content finding mispelled words + while ((pos = v.indexOf('')) != -1) { + // Add text node for the content before the word + txt = v.substring(0, pos); + if (txt.length) { + node = doc.createTextNode(dom.decode(txt)); + elem.appendChild(node); + } + v = v.substring(pos+10); + pos = v.indexOf(''); + txt = v.substring(0, pos); + v = v.substring(pos+11); + // Add span element for the word + elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt)); + } + // Add text node for the rest of the content + if (v.length) { + node = doc.createTextNode(dom.decode(v)); + elem.appendChild(node); + } + } else { + // Other browsers preserve whitespace characters on innerHTML usage + elem.innerHTML = v.replace(rx, '$1$2'); + } + + // Finally, replace the node with the container + dom.replace(elem, n); + } + }); + + se.setRng(r); + }, + + _showMenu : function(ed, e) { + var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; + + e = 0; // Fixes IE memory leak + + if (!m) { + m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'}); + t._menu = m; + } + + if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { + m.removeAll(); + m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { + var ignoreRpc; + + m.removeAll(); + + if (r.length > 0) { + m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(r, function(v) { + m.add({title : v, onclick : function() { + dom.replace(ed.getDoc().createTextNode(v), wordSpan); + t._checkDone(); + }}); + }); + + m.addSeparator(); + } else + m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + if (ed.getParam('show_ignore_words', true)) { + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; + + t._removeWords(dom.decode(word)); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + } + + if (t.editor.getParam("spellchecker_enable_learn_rpc")) { + m.add({ + title : 'spellchecker.learn_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + ed.setProgressState(1); + t._sendRPC('learnWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + }); + } + + m.update(); + }); + + p1 = DOM.getPos(ed.getContentAreaContainer()); + m.settings.offset_x = p1.x; + m.settings.offset_y = p1.y; + + ed.selection.select(wordSpan); + p1 = dom.getPos(wordSpan); + m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); + + return tinymce.dom.Event.cancel(e); + } else + m.hideMenu(); + }, + + _checkDone : function() { + var t = this, ed = t.editor, dom = ed.dom, o; + + each(dom.select('span'), function(n) { + if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { + o = true; + return false; + } + }); + + if (!o) + t._done(); + }, + + _done : function() { + var t = this, la = t.active; + + if (t.active) { + t.active = 0; + t._removeWords(); + + if (t._menu) + t._menu.hideMenu(); + + if (la) + t.editor.nodeChanged(); + } + }, + + _sendRPC : function(m, p, cb) { + var t = this; + + JSONRequest.sendRPC({ + url : t.rpcUrl, + method : m, + params : p, + success : cb, + error : function(e, x) { + t.editor.setProgressState(0); + t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); + } + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/img/wline.gif b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/img/wline.gif new file mode 100644 index 0000000..7d0a4db Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/plugins/spellchecker/img/wline.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/css/props.css b/ehcp/net2ftp/plugins/tinymce/plugins/style/css/props.css new file mode 100644 index 0000000..3b8f0ee --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/css/props.css @@ -0,0 +1,14 @@ +#text_font {width:250px;} +#text_size {width:70px;} +.mceAddSelectValue {background:#DDD;} +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} +.panel_toggle_insert_span {padding-top:10px;} +.panel_wrapper div.current {padding-top:10px;height:230px;} +.delim {border-left:1px solid gray;} +.tdelim {border-bottom:1px solid gray;} +#block_display {width:145px;} +#list_type {width:115px;} +.disabled {background:#EEE;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin.js new file mode 100644 index 0000000..dda9f92 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..eaa7c77 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/editor_plugin_src.js @@ -0,0 +1,71 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.StylePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceStyleProps', function() { + + var applyStyleToBlocks = false; + var blocks = ed.selection.getSelectedBlocks(); + var styles = []; + + if (blocks.length === 1) { + styles.push(ed.selection.getNode().style.cssText); + } + else { + tinymce.each(blocks, function(block) { + styles.push(ed.dom.getAttrib(block, 'style')); + }); + applyStyleToBlocks = true; + } + + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 340 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + applyStyleToBlocks : applyStyleToBlocks, + plugin_url : url, + styles : styles + }); + }); + + ed.addCommand('mceSetElementStyle', function(ui, v) { + if (e = ed.selection.getNode()) { + ed.dom.setAttrib(e, 'style', v); + ed.execCommand('mceRepaint'); + } + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setDisabled('styleprops', n.nodeName === 'BODY'); + }); + + // Register buttons + ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); + }, + + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/js/props.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/js/props.js new file mode 100644 index 0000000..0a8a8ec --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/js/props.js @@ -0,0 +1,709 @@ +tinyMCEPopup.requireLangPack(); + +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function aggregateStyles(allStyles) { + var mergedStyles = {}; + + tinymce.each(allStyles, function(style) { + if (style !== '') { + var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style); + for (var name in parsedStyles) { + if (parsedStyles.hasOwnProperty(name)) { + if (mergedStyles[name] === undefined) { + mergedStyles[name] = parsedStyles[name]; + } + else if (name === 'text-decoration') { + if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) { + mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name]; + } + } + } + } + } + }); + + return mergedStyles; +} + +var applyActionIsInsert; +var existingStyles; + +function init(ed) { + var ce = document.getElementById('container'), h; + + existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles')); + ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles); + + applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false); + document.getElementById('toggle_insert_span').checked = applyActionIsInsert; + + h = getBrowserHTML('background_image_browser','background_image','image','advimage'); + document.getElementById("background_image_browser").innerHTML = h; + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + f.text_none.checked = inStr(ce.style.textDecoration, 'none'); + updateTextDecorations(); + + // Setup background fields + + f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true); + + selectByValue(f, 'box_clear', ce.style.clear, true, true); + + setupBox(f, ce, 'box_padding', 'padding', ''); + setupBox(f, ce, 'box_margin', 'margin', ''); + + // Setup border fields + + setupBox(f, ce, 'border_style', 'border', 'Style'); + setupBox(f, ce, 'border_width', 'border', 'Width'); + setupBox(f, ce, 'border_color', 'border', 'Color'); + + updateColor('border_color_top_pick', 'border_color_top'); + updateColor('border_color_right_pick', 'border_color_right'); + updateColor('border_color_bottom_pick', 'border_color_bottom'); + updateColor('border_color_left_pick', 'border_color_left'); + + f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); + f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); + f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); + f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); + + // Setup list fields + + selectByValue(f, 'list_type', ce.style.listStyleType, true, true); + selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); + f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + // Setup box fields + + selectByValue(f, 'positioning_type', ce.style.position, true, true); + selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); + selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); + f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; + + f.positioning_width.value = getNum(ce.style.width); + selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); + + f.positioning_height.value = getNum(ce.style.height); + selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); + + setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); + + s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); + s = s.replace(/,/g, ' '); + + if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = getNum(getVal(s, 1)); + selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); + f.positioning_clip_bottom.value = getNum(getVal(s, 2)); + selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); + f.positioning_clip_left.value = getNum(getVal(s, 3)); + selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); + } else { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; + } + +// setupBox(f, ce, '', 'border', 'Color'); +} + +function getMeasurement(s) { + return s.replace(/^([0-9.]+)(.*)$/, "$2"); +} + +function getNum(s) { + if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) + return s.replace(/[^0-9.]/g, ''); + + return s; +} + +function inStr(s, n) { + return new RegExp(n, 'gi').test(s); +} + +function getVal(s, i) { + var a = s.split(' '); + + if (a.length > 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = [], i, x; + + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = ce.style.cssText; +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} + +function updateTextDecorations(){ + var el = document.forms[0].elements; + + var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"]; + var noneChecked = el["text_none"].checked; + tinymce.each(textDecorations, function(id) { + el[id].disabled = noneChecked; + if (noneChecked) { + el[id].checked = false; + } + }); +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ar_dlg.js new file mode 100644 index 0000000..729afe6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.style_dlg',{"text_lineheight":"\u0627\u0631\u062a\u0641\u0627\u0639 \u0627\u0644\u062e\u0637","text_variant":"\u0634\u0643\u0644 \u0645\u062e\u062a\u0644\u0641","text_style":"\u0633\u0645\u0647","text_weight":"\u0627\u0644\u0639\u0631\u0636","text_size":"\u062d\u062c\u0645","text_font":"\u062e\u0637","text_props":"\u0646\u0635","positioning_tab":"\u0648\u0636\u0639","list_tab":"\u0642\u0627\u0626\u0645\u0647","border_tab":"\u0627\u0637\u0627\u0631","box_tab":"\u0635\u0646\u062f\u0648\u0642","block_tab":"\u0628\u0644\u0648\u0643","background_tab":"\u062e\u0644\u0641\u064a\u0647","text_tab":"\u0646\u0635",apply:"\u0627\u062f\u0631\u0627\u062c",title:"\u062a\u062d\u0631\u064a\u0631 \u062a\u0646\u0633\u064a\u0642 CSS",clip:"\u0642\u0635\u0627\u0635\u0629",placement:"\u0648\u0636\u0639",overflow:"\u0627\u0644\u0625\u0632\u0627\u062d\u0629 \u0627\u0644\u0641\u0627\u0626\u0636\u0629",zindex:"\u0627\u0644\u0628\u0639\u062f \u0627\u0644\u062b\u0627\u0644\u062b",visibility:"\u0627\u0644\u0638\u0647\u0648\u0631","positioning_type":"\u0646\u0648\u0639",position:"\u0627\u0644\u0645\u0648\u0636\u0639","bullet_image":"\u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0646\u0642\u0637\u064a","list_type":"\u0646\u0648\u0639",color:"\u0644\u0648\u0646",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",style:"\u0633\u0645\u0647",margin:"\u0627\u0644\u0647\u0627\u0645\u0634",left:"\u064a\u0633\u0627\u0631",bottom:"\u0627\u0633\u0641\u0644",right:"\u064a\u0645\u064a\u0646",top:"\u0627\u0644\u0627\u0639\u0644\u0649",same:"\u0645\u062a\u0633\u0627\u0648\u0649 \u0644\u0644\u0643\u0644",padding:"\u062a\u0631\u0643 \u0645\u0633\u0627\u062d\u0629","box_clear":"\u0628\u062f\u0648\u0646","box_float":"\u0627\u0644\u0625\u0632\u0627\u062d\u0629","box_height":"\u0627\u0631\u062a\u0641\u0627\u0639","box_width":"\u0639\u0631\u0636","block_display":"\u0639\u0631\u0636","block_whitespace":"\u0645\u0633\u0627\u0641\u0629 \u0628\u064a\u0636\u0627\u0621","block_text_indent":"\u0645\u0633\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629 \u0644\u0644\u0646\u0635","block_text_align":"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0646\u0635","block_vertical_alignment":"\u0645\u062d\u0627\u0632\u0627\u0647 \u0631\u0623\u0633\u064a\u0647","block_letterspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062d\u0631\u0648\u0641","block_wordspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a","background_vpos":"\u0627\u0644\u0645\u0648\u0636\u0639 \u0627\u0644\u0639\u0645\u0648\u062f\u064a","background_hpos":"\u0627\u0644\u0645\u0648\u0636\u0639 \u0627\u0644\u0623\u0641\u0642\u064a","background_attachment":"\u0645\u0631\u0641\u0642\u0627\u062a","background_repeat":"\u062a\u0643\u0631\u0627\u0631","background_image":"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","background_color":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","text_none":"\u0644\u0627 \u0634\u0626","text_blink":"\u0627\u0644\u0648\u0645\u064a\u0636","text_case":"Case","text_striketrough":"\u064a\u062a\u0648\u0633\u0637\u0647 \u062e\u0637","text_underline":"\u062a\u062d\u062a\u0647 \u062e\u0637","text_overline":"\u0641\u0648\u0642\u0647 \u062e\u0637","text_decoration":"\u0627\u0644\u062a\u0646\u0633\u064a\u0642","text_color":"\u0644\u0648\u0646",text:"\u0646\u0635",background:"\u0627\u0644\u062e\u0644\u0641\u064a\u0629",block:"\u0628\u0644\u0648\u0643",box:"\u0635\u0646\u062f\u0648\u0642",border:"\u062d\u062f\u0648\u062f",list:"\u0642\u0627\u0626\u0645\u0629"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/cs_dlg.js new file mode 100644 index 0000000..8e6dc60 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.style_dlg',{"text_lineheight":"V\u00fd\u0161ka \u0159\u00e1dku","text_variant":"Varianta","text_style":"Styl textu","text_weight":"Tu\u010dnost p\u00edsma","text_size":"Velikost","text_font":"P\u00edsmo","text_props":"Text","positioning_tab":"Um\u00edst\u011bn\u00ed","list_tab":"Seznam","border_tab":"Ohrani\u010den\u00ed","box_tab":"Box","block_tab":"Blok","background_tab":"Pozad\u00ed","text_tab":"Text",apply:"Pou\u017e\u00edt",title:"Upravit CSS styl",clip:"O\u0159ez\u00e1n\u00ed (clip)",placement:"Um\u00edst\u011bni",overflow:"P\u0159ete\u010den\u00ed (overflow)",zindex:"Z-index",visibility:"Viditelnost","positioning_type":"Typ",position:"Um\u00edst\u011bn\u00ed","bullet_image":"Styl odr\u00e1\u017eek","list_type":"Typ",color:"Barva",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",style:"Styl",margin:"Okraje (margin)",left:"Vlevo",bottom:"Dole",right:"Vpravo",top:"Naho\u0159e",same:"Stejn\u00e9 pro v\u0161echny",padding:"Odsazen\u00ed (padding)","box_clear":"Vy\u010distit","box_float":"Plovouc\u00ed","box_height":"V\u00fd\u0161ka","box_width":"\u0160\u00ed\u0159ka","block_display":"Blokov\u00e9 zobrazen\u00ed","block_whitespace":"Zalamov\u00e1n\u00ed textu","block_text_indent":"Odsazen\u00ed textu","block_text_align":"Zarovn\u00e1n\u00ed textu","block_vertical_alignment":"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","block_letterspacing":"Rozestup znak\u016f","block_wordspacing":"Rozestup slov","background_vpos":"Vertik\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_hpos":"Horizont\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_attachment":"Rolov\u00e1n\u00ed","background_repeat":"Opakov\u00e1n\u00ed","background_image":"Obr\u00e1zek pozad\u00ed","background_color":"Barva pozad\u00ed","text_none":"\u017d\u00e1dn\u00e1","text_blink":"Blik\u00e1n\u00ed","text_case":"Velk\u00e1 p\u00edsmena","text_striketrough":"P\u0159e\u0161krtnut\u00ed","text_underline":"Podtr\u017een\u00ed","text_overline":"Nadtr\u017een\u00ed","text_decoration":"Dekorace","text_color":"Barva",text:"Text",background:"Pozad\u00ed",block:"Blok",box:"Box",border:"Okraj",list:"Seznam"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/da_dlg.js new file mode 100644 index 0000000..733249f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.style_dlg',{"text_lineheight":"Linieh\u00f8jde","text_variant":"Variant","text_style":"Stil","text_weight":"V\u00e6gt","text_size":"St\u00f8rrelse","text_font":"Skrifttype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Liste","border_tab":"Kant","box_tab":"Boks","block_tab":"Blok","background_tab":"Baggrund","text_tab":"Tekst",apply:"Anvend",title:"Rediger CSS stil",clip:"Klip",placement:"Placering",overflow:"Overl\u00f8b",zindex:"Z-index",visibility:"Synlighed","positioning_type":"Type",position:"Position","bullet_image":"Punktopstillings-billede","list_type":"Type",color:"Farve",height:"H\u00f8jde",width:"Bredde",style:"Style",margin:"Margin",left:"Venstre",bottom:"Bund",right:"H\u00f8jre",top:"Top",same:"Ens for alle",padding:"Afstand til indhold","box_clear":"Ryd","box_float":"Flydende","box_height":"H\u00f8jde","box_width":"Bredde","block_display":"Vis","block_whitespace":"Mellemrum","block_text_indent":"Tekstindrykning","block_text_align":"Tekstjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Afstand mellem bogstaver","block_wordspacing":"Afstand mellem ord","background_vpos":"Vertikal position","background_hpos":"Horisontal position","background_attachment":"Vedh\u00e6ftede fil","background_repeat":"Gentag","background_image":"Baggrundsbillede","background_color":"Baggrundsfarve","text_none":"ingen","text_blink":"blink","text_case":"Vesaltilstand","text_striketrough":"gennemstreget","text_underline":"understreget","text_overline":"overstreget","text_decoration":"Dekoration","text_color":"Farve",text:"Tekst",background:"Baggrund",block:"Blok",box:"Boks",border:"Kant",list:"Liste"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/de_dlg.js new file mode 100644 index 0000000..ad04664 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.style_dlg',{"text_lineheight":"Zeilenh\u00f6he","text_variant":"Variante","text_style":"Stil","text_weight":"Dicke","text_size":"Gr\u00f6\u00dfe","text_font":"Schriftart","text_props":"Text","positioning_tab":"Positionierung","list_tab":"Liste","border_tab":"Rahmen","box_tab":"Box","block_tab":"Block","background_tab":"Hintergrund","text_tab":"Text",apply:"\u00dcbernehmen",title:"CSS-Styles bearbeiten",clip:"Ausschnitt",placement:"Platzierung",overflow:"Verhalten bei \u00dcbergr\u00f6\u00dfe",zindex:"Z-Wert",visibility:"Sichtbar","positioning_type":"Art der Positionierung",position:"Positionierung","bullet_image":"Listenpunkt-Grafik","list_type":"Listenpunkt-Art",color:"Textfarbe",height:"H\u00f6he",width:"Breite",style:"Format",margin:"\u00c4u\u00dferer Abstand",left:"Links",bottom:"Unten",right:"Rechts",top:"Oben",same:"Alle gleich",padding:"Innerer Abstand","box_clear":"Umflie\u00dfung verhindern","box_float":"Umflie\u00dfung","box_height":"H\u00f6he","box_width":"Breite","block_display":"Umbruchverhalten","block_whitespace":"Automatischer Umbruch","block_text_indent":"Einr\u00fcckung","block_text_align":"Ausrichtung","block_vertical_alignment":"Vertikale Ausrichtung","block_letterspacing":"Buchstabenabstand","block_wordspacing":"Wortabstand","background_vpos":"Position Y","background_hpos":"Position X","background_attachment":"Wasserzeicheneffekt","background_repeat":"Wiederholung","background_image":"Hintergrundbild","background_color":"Hintergrundfarbe","text_none":"keine","text_blink":"blinkend","text_case":"Schreibung","text_striketrough":"durchgestrichen","text_underline":"unterstrichen","text_overline":"\u00fcberstrichen","text_decoration":"Gestaltung","text_color":"Farbe",text:"Text",background:"Hintergrund",block:"Block",box:"Box",border:"Rahmen",list:"Liste"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..9a1d4a2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/es_dlg.js new file mode 100644 index 0000000..abf4b1d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/es_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('es.style_dlg',{ +title:"Editar Estilo CSS", +apply:"Aplicar", +text_tab:"Texto", +background_tab:"Fondo", +block_tab:"Bloque", +box_tab:"Caja", +border_tab:"Borde", +list_tab:"Lista", +positioning_tab:"Posici\u00F3n", +text_props:"Texto", +text_font:"Fuente", +text_size:"Tama\u00F1o", +text_weight:"Peso", +text_style:"Estilo", +text_variant:"Variante", +text_lineheight:"Ancho de la fila", +text_case:"Min\u00FAs./May\u00FAs.", +text_color:"Color", +text_decoration:"Decorativos", +text_overline:"Subrayado superior", +text_underline:"Subrayado", +text_striketrough:"Tachado", +text_blink:"Parpadeo", +text_none:"Ninguno", +background_color:"Color de fondo", +background_image:"Imagen de fondo", +background_repeat:"Repetici\u00F3n", +background_attachment:"Adjunto", +background_hpos:"Posici\u00F3n horizontal", +background_vpos:"Posici\u00F3n vertical", +block_wordspacing:"Espacio entre palabra", +block_letterspacing:"Espacio entre letra", +block_vertical_alignment:"Alineaci\u00F3n vertical", +block_text_align:"Alineaci\u00F3n del texto", +block_text_indent:"Sangr\u00EDa", +block_whitespace:"Espacio en blanco", +block_display:"Display", +box_width:"Ancho", +box_height:"Alto", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"Lo mismo en todos", +top:"Arriba", +right:"Derecha", +bottom:"Debajo", +left:"Izquierda", +margin:"Margen", +style:"Estilo", +width:"Ancho", +height:"Alto", +color:"Color", +list_type:"Tipo", +bullet_image:"Imagen de la vi\u00F1eta", +position:"Posici\u00F3n", +positioning_type:"Tipo", +visibility:"Visibilidad", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fi_dlg.js new file mode 100644 index 0000000..4f174cc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.style_dlg',{"text_lineheight":"Rivin korkeus","text_variant":"Variantti","text_style":"Tyyli","text_weight":"Paino","text_size":"Koko","text_font":"Kirjasin","text_props":"Teksti","positioning_tab":"Sijainti","list_tab":"Lista","border_tab":"Kehys","box_tab":"Laatikko","block_tab":"Palkki","background_tab":"Tausta","text_tab":"Teksti",apply:"K\u00e4yt\u00e4",title:"Muokkaa CSS-tyyli\u00e4",clip:"Leike",placement:"Sijoittelu",overflow:"Ylivuoto",zindex:"Z-indeksi",visibility:"N\u00e4kyvyys","positioning_type":"Tyyppi",position:"Sijainti","bullet_image":"Listauskuva","list_type":"Tyyppi",color:"V\u00e4ri",height:"Korkeus",width:"Leveys",style:"Tyyli",margin:"Marginaali",left:"Vasemmalla",bottom:"Alhaalla",right:"Oikealla",top:"Ylh\u00e4\u00e4ll\u00e4",same:"Sama kaikille",padding:"Tyhj\u00e4 tila","box_clear":"Nollaus","box_float":"Kellunta","box_height":"Korkeus","box_width":"Leveys","block_display":"N\u00e4ytt\u00f6","block_whitespace":"Tyhj\u00e4 tila","block_text_indent":"Tekstin sisennys","block_text_align":"Tekstin asettelu","block_vertical_alignment":"Pystyasettelu","block_letterspacing":"Kirjainten v\u00e4listys","block_wordspacing":"Sanojen v\u00e4listys","background_vpos":"Pystyasettelu","background_hpos":"Vaaka-asettelu","background_attachment":"Liite","background_repeat":"Toistuvuus","background_image":"Taustakuva","background_color":"Taustav\u00e4ri","text_none":"ei mit\u00e4\u00e4n","text_blink":"V\u00e4l\u00e4hdys","text_case":"Isot/pienet kirjaimet","text_striketrough":"Yliviivattu","text_underline":"Alleviivattu (Ctrl+U)","text_overline":"Yliviivattu","text_decoration":"Koristelu","text_color":"V\u00e4ri",text:"Teksti",background:"Tausta",block:"Lohko",box:"Laatikko",border:"Reunus",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fr_dlg.js new file mode 100644 index 0000000..3f7bdb9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.style_dlg',{"text_lineheight":"Hauteur de ligne","text_variant":"Variante","text_style":"Style","text_weight":"Gras","text_size":"Taille","text_font":"Police","text_props":"Texte","positioning_tab":"Positionnement","list_tab":"Liste","border_tab":"Bordure","box_tab":"Bo\u00eete","block_tab":"Bloc","background_tab":"Fond","text_tab":"Texte",apply:"Appliquer",title:"\u00c9diter la feuille de style",clip:"Clip",placement:"Placement",overflow:"D\u00e9bordement",zindex:"Z-index",visibility:"Visibilit\u00e9","positioning_type":"Type",position:"Position","bullet_image":"Image de puce","list_type":"Type",color:"Couleur",height:"Hauteur",width:"Largeur",style:"Style",margin:"Marge",left:"Gauche",bottom:"Bas",right:"Droit",top:"Haut",same:"Identique pour tous",padding:"Espacement","box_clear":"Vider","box_float":"Flottant","box_height":"Hauteur","box_width":"Largeur","block_display":"Affichage","block_whitespace":"Fin de ligne","block_text_indent":"Indentation du texte","block_text_align":"Alignement du texte","block_vertical_alignment":"Alignement vertical","block_letterspacing":"Espacement des lettres","block_wordspacing":"Espacement des mots ","background_vpos":"Position verticale","background_hpos":"Position horizontale","background_attachment":"Attachement","background_repeat":"R\u00e9p\u00e9ter","background_image":"Image de fond","background_color":"Couleur de fond","text_none":"aucun","text_blink":"clignotant","text_case":"Casse","text_striketrough":"barr\u00e9","text_underline":"soulign\u00e9","text_overline":"ligne au-dessus","text_decoration":"D\u00e9coration","text_color":"Couleur",text:"Texte",background:"Fond",block:"Bloc",box:"Bo\u00eete",border:"Bordure",list:"Liste"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/he_dlg.js new file mode 100644 index 0000000..22680ba --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.style_dlg',{"text_lineheight":"\u05d2\u05d5\u05d1\u05d4 \u05e9\u05d5\u05e8\u05d4","text_variant":"\u05de\u05e9\u05ea\u05e0\u05d4","text_style":"\u05e1\u05d2\u05e0\u05d5\u05df","text_weight":"\u05e2\u05d5\u05d1\u05d9","text_size":"\u05d2\u05d5\u05d3\u05dc","text_font":"\u05e4\u05d5\u05e0\u05d8","text_props":"\u05d8\u05e7\u05e1\u05d8","positioning_tab":"\u05de\u05d9\u05e7\u05d5\u05dd","list_tab":"\u05e8\u05e9\u05d9\u05de\u05d4","border_tab":"\u05d2\u05d1\u05d5\u05dc","box_tab":"\u05e7\u05d5\u05e4\u05e1\u05d0","block_tab":"\u05d7\u05e1\u05d5\u05dd","background_tab":"\u05e8\u05e7\u05e2","text_tab":"\u05d8\u05e7\u05e1\u05d8",apply:"\u05d4\u05d7\u05dc",title:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS",clip:"\u05e7\u05dc\u05d9\u05e4",placement:"\u05de\u05d9\u05e7\u05d5\u05dd",overflow:"\u05d2\u05dc\u05d9\u05e9\u05d4",zindex:"Z-index",visibility:"\u05e8\u05d0\u05d5\u05ea","positioning_type":"\u05e1\u05d5\u05d2",position:"\u05de\u05d9\u05e7\u05d5\u05dd","bullet_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8","list_type":"\u05e1\u05d5\u05d2",color:"\u05e6\u05d1\u05e2",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",style:"\u05e1\u05d2\u05e0\u05d5\u05df",margin:"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd",left:"\u05e9\u05de\u05d0\u05dc",bottom:"\u05ea\u05d7\u05ea\u05d9\u05ea",right:"\u05d9\u05de\u05d9\u05df",top:"\u05e2\u05dc\u05d9\u05d5\u05df",same:"\u05d0\u05d5\u05ea\u05d5 \u05d3\u05d1\u05e8 \u05e2\u05d1\u05d5\u05e8 \u05db\u05d5\u05dc\u05dd",padding:"\u05e8\u05d9\u05e4\u05d5\u05d3","box_clear":"\u05e0\u05e7\u05d4","box_float":"\u05d4\u05e6\u05e4\u05d4","box_height":"\u05d2\u05d5\u05d1\u05d4","box_width":"\u05e8\u05d5\u05d7\u05d1","block_display":"\u05d4\u05e6\u05d2","block_whitespace":"\u05e8\u05d5\u05d5\u05d7","block_text_indent":"\u05d4\u05d6\u05d7\u05d4","block_text_align":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8","block_vertical_alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","block_letterspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea","block_wordspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05de\u05d9\u05dc\u05d9\u05dd","background_vpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05e8\u05d5\u05d7\u05d1\u05d9","background_hpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05d0\u05d5\u05e4\u05e7\u05d9","background_attachment":"\u05e7\u05d1\u05e6\u05d9\u05dd \u05de\u05e6\u05d5\u05e8\u05e4\u05d9\u05dd","background_repeat":"\u05d7\u05d6\u05d5\u05e8","background_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","background_color":"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","text_none":"\u05dc\u05dc\u05d0","text_blink":"\u05d4\u05d1\u05d4\u05d5\u05d1","text_case":"Case","text_striketrough":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","text_underline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","text_overline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc","text_decoration":"\u05e2\u05d9\u05e6\u05d5\u05d1","text_color":"\u05e6\u05d1\u05e2",text:"\u05d8\u05e7\u05e1\u05d8",background:"\u05e8\u05e7\u05e2",block:"\u05d1\u05dc\u05d5\u05e7",box:"\u05ea\u05d9\u05d1\u05d4",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05d4"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/hu_dlg.js new file mode 100644 index 0000000..b60f3f7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.style_dlg',{"text_lineheight":"Sormagass\u00e1g","text_variant":"V\u00e1ltozat","text_style":"St\u00edlus","text_weight":"Sz\u00e9less\u00e9g","text_size":"M\u00e9ret","text_font":"Bet\u0171t\u00edpus","text_props":"Sz\u00f6veg","positioning_tab":"Poz\u00edci\u00f3","list_tab":"Lista","border_tab":"Keret","box_tab":"Doboz","block_tab":"Blokk","background_tab":"H\u00e1tt\u00e9r","text_tab":"Sz\u00f6veg",apply:"Alkalmaz",title:"CSS st\u00edlus szerkest\u00e9se",clip:"Lev\u00e1g\u00e1s",placement:"Elhelyez\u00e9s",overflow:"Kifut\u00e1s",zindex:"Z-index",visibility:"L\u00e1that\u00f3s\u00e1g","positioning_type":"T\u00edpus",position:"Poz\u00edci\u00f3","bullet_image":"Elemk\u00e9p","list_type":"T\u00edpus",color:"Sz\u00edn",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",style:"St\u00edlus",margin:"Marg\u00f3",left:"Balra",bottom:"Lent",right:"Jobbra",top:"Fel\u00fcl",same:"Mindenhol ugyanaz",padding:"Bels\u0151 marg\u00f3","box_clear":"Lebeg\u00e9s (float) t\u00f6rl\u00e9se","box_float":"Lebeg\u00e9s (float)","box_height":"Magass\u00e1g","box_width":"Sz\u00e9less\u00e9g","block_display":"Megjelen\u00edt\u00e9s","block_whitespace":"T\u00e9rk\u00f6z","block_text_indent":"Sz\u00f6veg beh\u00faz\u00e1sa","block_text_align":"Sz\u00f6veg igaz\u00edt\u00e1sa","block_vertical_alignment":"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","block_letterspacing":"Bet\u0171t\u00e1vols\u00e1g","block_wordspacing":"Sz\u00f3t\u00e1vols\u00e1g","background_vpos":"F\u00fcgg\u0151leges hely","background_hpos":"V\u00edzszintes hely","background_attachment":"Csatolm\u00e1ny","background_repeat":"Ism\u00e9tl\u00e9s","background_image":"H\u00e1tt\u00e9rk\u00e9p","background_color":"H\u00e1tt\u00e9rsz\u00edn","text_none":"egyik sem","text_blink":"villog\u00e1s","text_case":"eset","text_striketrough":"\u00e1th\u00fazott","text_underline":"al\u00e1h\u00fazott","text_overline":"fel\u00fclh\u00fazott","text_decoration":"dekor\u00e1ci\u00f3","text_color":"sz\u00edn",text:"Sz\u00f6veg",background:"H\u00e1tt\u00e9r",block:"Blokk",box:"Doboz",border:"Keret",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/it_dlg.js new file mode 100644 index 0000000..401b727 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.style_dlg',{"text_lineheight":"Altezza linea","text_variant":"Variante","text_style":"Stile","text_weight":"Spessore","text_size":"Dimensione","text_font":"Carattere","text_props":"Testo","positioning_tab":"Posizionamento","list_tab":"Liste","border_tab":"Bordi","box_tab":"Contenitore","block_tab":"Blocco","background_tab":"Sfondo","text_tab":"Testo",apply:"Applica",title:"Modifica stile CSS",clip:"Clip",placement:"Piazzamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilit\u00e0","positioning_type":"Tipo",position:"Posizione","bullet_image":"Immagine Punto","list_type":"Tipo",color:"Colore",height:"Altezza",width:"Larghezza",style:"Stile",margin:"Margine",left:"Sinistro",bottom:"Inferiore",right:"Destro",top:"Superiore",same:"Uguale per tutti",padding:"Spazio dal bordo","box_clear":"Pulito","box_float":"Fluttuante","box_height":"Altezza","box_width":"Larghezza","block_display":"Visualizzazione","block_whitespace":"Whitespace","block_text_indent":"Indentazione testo","block_text_align":"Allineamento testo","block_vertical_alignment":"Allineamento verticale","block_letterspacing":"Spaziatura caratteri","block_wordspacing":"Spaziatura parole","background_vpos":"Posizione verticale","background_hpos":"Posizione orizzontale","background_attachment":"Allegato","background_repeat":"Repetizione","background_image":"Immagine sfondo","background_color":"Colore sfondo","text_none":"nessuna","text_blink":"lampeggiante","text_case":"Tipo","text_striketrough":"barrato","text_underline":"sottolineato","text_overline":"sopralineato","text_decoration":"Decorazione","text_color":"Colore",text:"Testo",background:"Sfondo",block:"Blocco",box:"Box",border:"Bordo",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ja_dlg.js new file mode 100644 index 0000000..4d5953c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.style_dlg',{"text_lineheight":"\u884c\u306e\u9ad8\u3055","text_variant":"\u5909\u5f62","text_style":"\u30b9\u30bf\u30a4\u30eb","text_weight":"\u592a\u3055","text_size":"\u5927\u304d\u3055","text_font":"\u30d5\u30a9\u30f3\u30c8","text_props":"\u30c6\u30ad\u30b9\u30c8","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u7b87\u6761\u66f8\u304d","border_tab":"\u67a0\u7dda","box_tab":"\u30dc\u30c3\u30af\u30b9","block_tab":"\u30d6\u30ed\u30c3\u30af","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u9069\u7528",title:"CSS\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u7de8\u96c6",clip:"\u5207\u308a\u629c\u304d",placement:"\u914d\u7f6e",overflow:"\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc",zindex:"Z-index",visibility:"\u53ef\u8996\u6027","positioning_type":"\u914d\u7f6e\u65b9\u6cd5",position:"\u8868\u793a\u4f4d\u7f6e","bullet_image":"\u884c\u982d\u6587\u5b57","list_type":"\u7b87\u6761\u66f8\u304d\u306e\u7a2e\u985e",color:"\u8272",height:"\u9ad8\u3055",width:"\u5e45",style:"\u30b9\u30bf\u30a4\u30eb",margin:"\u30de\u30fc\u30b8\u30f3",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u3059\u3079\u3066\u540c\u3058",padding:"\u30d1\u30c7\u30a3\u30f3\u30b0","box_clear":"\u56de\u308a\u8fbc\u307f\u89e3\u9664","box_float":"\u56de\u308a\u8fbc\u307f","box_height":"\u9ad8\u3055","box_width":"\u5e45","block_display":"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4","block_whitespace":"\u7a7a\u767d\u6587\u5b57","block_text_indent":"\u30c6\u30ad\u30b9\u30c8\u306e\u5b57\u4e0b\u3052","block_text_align":"\u30c6\u30ad\u30b9\u30c8\u306e\u6c34\u5e73\u914d\u7f6e","block_vertical_alignment":"\u5782\u76f4\u914d\u7f6e","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5358\u8a9e\u9593\u9694","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u6dfb\u4ed8","background_repeat":"\u7e70\u308a\u8fd4\u3057","background_image":"\u80cc\u666f\u753b\u50cf","background_color":"\u80cc\u666f\u8272","text_none":"\u306a\u3057","text_blink":"\u70b9\u6ec5","text_case":"\u5927\u6587\u5b57/\u5c0f\u6587\u5b57","text_striketrough":"\u6253\u6d88\u3057\u7dda","text_underline":"\u4e0b\u7dda","text_overline":"\u4e0a\u7dda","text_decoration":"\u88c5\u98fe","text_color":"\u8272",text:"\u6587\u5b57",background:"\u80cc\u666f",block:"\u30d6\u30ed\u30c3\u30af",box:"\u30dc\u30c3\u30af\u30b9",border:"\u67a0\u7dda",list:"\u7b87\u6761\u66f8\u304d"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/nl_dlg.js new file mode 100644 index 0000000..ad81f8f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.style_dlg',{"text_lineheight":"Lijnhoogte","text_variant":"Variant","text_style":"Stijl","text_weight":"Gewicht","text_size":"Tekengrootte","text_font":"Lettertype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Lijst","border_tab":"Rand","box_tab":"Box","block_tab":"Blok","background_tab":"Achtergrond","text_tab":"Tekst",apply:"Toepassen",title:"CSS Stijl bewerken",clip:"Clip",placement:"Plaatsing",overflow:"Overvloeien",zindex:"Z-index",visibility:"Zichtbaarheid","positioning_type":"Type",position:"Positie","bullet_image":"Opsommingsteken","list_type":"Type",color:"Kleur",height:"Hoogte",width:"Breedte",style:"Stijl",margin:"Marge",left:"Links",bottom:"Onder",right:"Rechts",top:"Boven",same:"Alles hetzelfde",padding:"Opening","box_clear":"Vrijhouden","box_float":"Zweven","box_height":"Hoogte","box_width":"Breedte","block_display":"Weergave","block_whitespace":"Witruimte","block_text_indent":"Inspringen","block_text_align":"Tekstuitlijning","block_vertical_alignment":"Verticale uitlijning","block_letterspacing":"Letterruimte","block_wordspacing":"Woordruimte","background_vpos":"Verticale positie","background_hpos":"Horizontale positie","background_attachment":"Bijlage","background_repeat":"Herhalen","background_image":"Achtergrondafbeelding","background_color":"Achtergrondkleur","text_none":"Niets","text_blink":"Knipperen","text_case":"Hoofdlettergebruik","text_striketrough":"Doorhalen","text_underline":"Onderstrepen","text_overline":"Overhalen","text_decoration":"Decoratie","text_color":"Kleur",text:"Tekst",background:"Achtergrond",block:"Blok",box:"Box",border:"Rand",list:"Lijst"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pl_dlg.js new file mode 100644 index 0000000..1dd01ce --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.style_dlg',{"text_lineheight":"Wysoko\u015b\u0107 linii","text_variant":"Wariant","text_style":"Styl","text_weight":"Waga","text_size":"Rozmiar","text_font":"Wz\u00f3r czcionki","text_props":"Tekst","positioning_tab":"Pozycjonowanie","list_tab":"Lista","border_tab":"Obramowanie","box_tab":"Pud\u0142o (box)","block_tab":"Blok","background_tab":"T\u0142o","text_tab":"Text",apply:"Zastosuj",title:"Edytuj style CSS",clip:"Klip",placement:"Umieszczenie",overflow:"Przepe\u0142niony",zindex:"Z-index",visibility:"Widoczno\u015b\u0107","positioning_type":"Typ",position:"Pozycja","bullet_image":"Obrazek listy","list_type":"Typ",color:"Kolor",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",style:"Styl",margin:"Margines",left:"Lewy",bottom:"D\u00f3\u0142",right:"Prawy",top:"G\u00f3ra",same:"To samo dla wszystkich",padding:"Odst\u0119py","box_clear":"Op\u0142ywanie (Clear)","box_float":"Op\u0142ywanie (Float)","box_height":"Wysoko\u015b\u0107","box_width":"Szeroko\u015b\u0107","block_display":"Spos\u00f3b wy\u015bwietlania","block_whitespace":"Bia\u0142e znaki","block_text_indent":"Przesuni\u0119cie tekstu","block_text_align":"Wyr\u00f3wnanie tekstu","block_vertical_alignment":"Pionowe wyr\u00f3wnanie","block_letterspacing":"Odst\u0119p mi\u0119dzy literami","block_wordspacing":"Odst\u0119p mi\u0119dzy wyrazami","background_vpos":"Pozycja pionowa","background_hpos":"Pozycja pozioma","background_attachment":"Za\u0142\u0105cznik","background_repeat":"Powt\u00f3rz","background_image":"Obrazek t\u0142a","background_color":"Kolor t\u0142a","text_none":"\u017caden","text_blink":"miganie","text_case":"Znaki","text_striketrough":"przekre\u015blenie","text_underline":"podkre\u015blenie","text_overline":"nadkre\u015blenie","text_decoration":"Dekoracja","text_color":"Kolor",text:"Tekst",background:"T\u0142o",block:"Blok",box:"Pud\u0142o (box)",border:"Obramowanie",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pt_dlg.js new file mode 100644 index 0000000..21c6b5e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.style_dlg',{"text_lineheight":"Altura da linha","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tamanho","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posicionamento","list_tab":"Lista","border_tab":"Limites","box_tab":"Caixa","block_tab":"Bloco","background_tab":"Fundo","text_tab":"Texto",apply:"Aplicar",title:"Editar CSS",clip:"Clip",placement:"Posicionamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posi\u00e7\u00e3o","bullet_image":"Imagem de lista","list_type":"Tipo",color:"Cor",height:"Altura",width:"Largura",style:"Estilo",margin:"Margem",left:"Esquerda",bottom:"Abaixo",right:"Direita",top:"Topo",same:"O mesmo para todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Altura","box_width":"Largura","block_display":"Display","block_whitespace":"Espa\u00e7o","block_text_indent":"Indent","block_text_align":"Alinhamento de texto","block_vertical_alignment":"Alinhamento vertical","block_letterspacing":"Espa\u00e7amento de letras","block_wordspacing":"Espa\u00e7amento de palavras","background_vpos":"Posi\u00e7\u00e3o vertical","background_hpos":"Posi\u00e7\u00e3o horizontal","background_attachment":"Fixar","background_repeat":"Repetir","background_image":"Imagem de fundo","background_color":"Cor de fundo","text_none":"nenhum","text_blink":"Piscar","text_case":"Mai\u00fascula","text_striketrough":"Riscado","text_underline":"Sublinhado","text_overline":"Sobrelinha","text_decoration":"Decora\u00e7\u00e3o","text_color":"Cor",text:"Texto",background:"Fundo",block:"Bloco",box:"Caixa",border:"Borda",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ru_dlg.js new file mode 100644 index 0000000..857077c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.style_dlg',{"text_lineheight":"\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u043b\u0449\u0438\u043d\u0430","text_size":"\u0420\u0430\u0437\u043c\u0435\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","box_tab":"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c",title:"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 CSS \u0441\u0442\u0438\u043b\u044f",clip:"\u041e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435",placement:"\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435",zindex:"Z-\u0438\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f","bullet_image":"\u041c\u0430\u0440\u043a\u0435\u0440","list_type":"\u0422\u0438\u043f",color:"\u0426\u0432\u0435\u0442",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"\u041e\u0442\u0441\u0442\u0443\u043f",left:"\u0421\u043b\u0435\u0432\u0430",bottom:"\u0421\u043d\u0438\u0437\u0443",right:"\u0421\u043f\u0440\u0430\u0432\u0430",top:"\u0412\u0432\u0435\u0440\u0445",same:"\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445",padding:"\u041f\u043e\u043b\u044f","box_clear":"\u042f\u0432\u043d\u044b\u0439","box_float":"\u041f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439","box_height":"\u0412\u044b\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","block_whitespace":"\u041f\u0440\u043e\u0431\u0435\u043b","block_text_indent":"\u041e\u0442\u0441\u0442\u0443\u043f \u0442\u0435\u043a\u0441\u0442\u0430","block_text_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","block_letterspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043a\u0432\u0430\u043c\u0438","block_wordspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_attachment":"\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","background_color":"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430","text_none":"\u0411\u0435\u0437 \u0432\u0441\u0435\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0446\u0430\u044e\u0449\u0438\u0439","text_case":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_underline":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_overline":"\u0421 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0435\u0440\u0442\u043e\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435","text_color":"\u0426\u0432\u0435\u0442",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/sv_dlg.js new file mode 100644 index 0000000..4a52954 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.style_dlg',{"text_lineheight":"Radh\u00f6jd","text_variant":"Variant","text_style":"Stil","text_weight":"Tjocklek","text_size":"Storlek","text_font":"Typsnitt","text_props":"Text","positioning_tab":"Positionering","list_tab":"Listor","border_tab":"Ramar","box_tab":"Box","block_tab":"Block","background_tab":"Bakgrund","text_tab":"Text",apply:"Applicera",title:"Redigera inline CSS",clip:"Besk\u00e4rning",placement:"Placering",overflow:"\u00d6\u0096verfl\u00f6de",zindex:"Z-index",visibility:"Synlighet","positioning_type":"Positionstyp",position:"Position","bullet_image":"Punktbild","list_type":"Listtyp",color:"F\u00e4rg",height:"H\u00f6jd",width:"Bredd",style:"Stil",margin:"Marginal",left:"V\u00e4nster",bottom:"Botten",right:"H\u00f6ger",top:"Toppen",same:"Samma f\u00f6r alla",padding:"Padding","box_clear":"Rensa","box_float":"Flyt","box_height":"H\u00f6jd","box_width":"Bredd","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Textindrag","block_text_align":"Textjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Teckenmellanrum","block_wordspacing":"Ordavbrytning","background_vpos":"Vertikal position","background_hpos":"Horisontell position","background_attachment":"F\u00e4stpunkt","background_repeat":"Upprepning","background_image":"Bakgrundsbild","background_color":"Bakgrundsf\u00e4rg","text_none":"Inget","text_blink":"Blinka","text_case":"Sm\u00e5/stora","text_striketrough":"Genomstruken","text_underline":"Understruken","text_overline":"\u00d6verstruken","text_decoration":"Dekoration","text_color":"F\u00e4rg",text:"Text",background:"Bakgrund",block:"Block",box:"Box",border:"Ram",list:"Lista"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/tr_dlg.js new file mode 100644 index 0000000..bc12209 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.style_dlg',{"text_lineheight":"\u00c7izgi y\u00fcksekli\u011fi","text_variant":"De\u011fi\u015fken","text_style":"Stil","text_weight":"Kal\u0131nl\u0131k","text_size":"Boyut","text_font":"Yaz\u0131 tipi","text_props":"Metin","positioning_tab":"Konumland\u0131rma","list_tab":"Listele","border_tab":"Kenarl\u0131k","box_tab":"Kutu","block_tab":"Blok","background_tab":"Arkaplan","text_tab":"Metin",apply:"Uygula",title:"CSS Stilini D\u00fczenle",clip:"K\u0131rp",placement:"Yerle\u015ftir",overflow:"Ta\u015fma",zindex:"Z-indeksi",visibility:"G\u00f6r\u00fcn\u00fcrl\u00fck","positioning_type":"Tip",position:"Konum","bullet_image":"Madde imi resmi","list_type":"Tip",color:"Renk",height:"Y\u00fckseklik",width:"Geni\u015flik",style:"Stil",margin:"Kenar bo\u015flu\u011fu",left:"Sol",bottom:"Alt",right:"Sa\u011f",top:"\u00dcst",same:"T\u00fcm\u00fc i\u00e7in",padding:"Dolgu","box_clear":"Serbest","box_float":"Kayan","box_height":"Y\u00fckseklik","box_width":"Geni\u015flik","block_display":"G\u00f6r\u00fcnt\u00fcle","block_whitespace":"Bo\u015fluk","block_text_indent":"Metnin girintisini art\u0131r","block_text_align":"Metin hizala","block_vertical_alignment":"Dikey hizalama","block_letterspacing":"harf bo\u015flu\u011fu","block_wordspacing":"Kelime bo\u015flu\u011fu","background_vpos":"Dikey konum","background_hpos":"Yatay konum","background_attachment":"Eklenti","background_repeat":"Tekrarla","background_image":"Arkaplan resmi","background_color":"Arkaplan rengi","text_none":"hi\u00e7biri","text_blink":"yan\u0131p s\u00f6nen","text_case":"Ko\u015ful","text_striketrough":"\u00fcst\u00fc \u00e7izgili","text_underline":"alt \u00e7izgi","text_overline":"\u00fcst \u00e7izgi","text_decoration":"Dekorasyon","text_color":"Renk",text:"Yaz\u0131",background:"Arkaplan",block:"Blok",box:"Kutu",border:"S\u0131n\u0131r",list:"Liste"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/uk_dlg.js new file mode 100644 index 0000000..4c07a44 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u043e\u0442\u0430 \u0440\u044f\u0434\u043a\u0443","text_variant":"\u0412\u0430\u0440\u0456\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u0432\u0449\u0438\u043d\u0430","text_size":"\u0420\u043e\u0437\u043c\u0456\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0420\u0430\u043c\u043a\u0430","box_tab":"\u042f\u0449\u0438\u043a(box)","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438",title:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f CSS \u0441\u0442\u0438\u043b\u044e",clip:"\u0421\u043a\u0440\u0456\u043f\u043b\u0435\u043d\u043d\u044f",placement:"\u0420\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u043d\u044f",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f",zindex:"Z-\u0456\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u0456\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0456\u044f","bullet_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0443","list_type":"\u0422\u0438\u043f",color:"\u041a\u043e\u043b\u0456\u0440",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"Margin",left:"\u041b\u0456\u0432\u043e\u0440\u0443\u0447",bottom:"\u0417\u043d\u0438\u0437\u0443",right:"\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",top:"\u0412\u0433\u043e\u0440\u0443",same:"\u041e\u0434\u043d\u0430\u043a\u043e\u0435 \u0434\u043b\u044f \u0432\u0441\u0456\u0445",padding:"\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0456\u0439 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","box_clear":"\u041e\u0447\u0438\u0441\u0442\u043a\u0430","box_float":"\u041f\u043b\u0430\u0432\u0430\u043d\u043d\u044f","box_height":"\u0412\u0438\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438","block_whitespace":"\u041f\u0440\u043e\u0431\u0456\u043b","block_text_indent":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f","block_text_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","block_letterspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u043b\u0456\u0442\u0435\u0440\u0430\u043c\u0438","block_wordspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_attachment":"\u0412\u043a\u043b\u0430\u0434\u0435\u043d\u043d\u044f","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","background_color":"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","text_none":"\u041d\u0456\u0447\u043e\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0435\u0445\u0442\u0456\u043d\u043d\u044f","text_case":"\u0420\u0435\u0433\u0456\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_underline":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_overline":"\u041d\u0430\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f","text_color":"\u041a\u043e\u043b\u0456\u0440",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0456",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/vi_dlg.js new file mode 100644 index 0000000..ee7136b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.style_dlg',{"text_lineheight":"Chi\u1ec1u cao \u0111\u01b0\u1eddng","text_variant":"Bi\u1ebfn \u0111\u1ed5i","text_style":"Ki\u1ec3u d\u00e1ng","text_weight":"Tr\u1ecdng l\u01b0\u1ee3ng","text_size":"K\u00edch c\u1ee1","text_font":"Ph\u00f4ng","text_props":"V\u0103n b\u1ea3n","positioning_tab":"V\u1ecb tr\u00ed","list_tab":"Danh s\u00e1ch","border_tab":"Vi\u1ec1n","box_tab":"H\u1ed9p","block_tab":"Kh\u1ed1i","background_tab":"N\u1ec1n","text_tab":"V\u0103n b\u1ea3n",apply:"\u00c1p d\u1ee5ng",title:"S\u1eeda ki\u1ec3u d\u00e1ng CSS",clip:"Ghim",placement:"S\u1eafp \u0111\u1eb7t",overflow:"Tr\u00e0n",zindex:"Ch\u1ec9 m\u1ee5c Z",visibility:"Nh\u00ecn th\u1ea5y","positioning_type":"Ki\u1ec3u",position:"V\u1ecb tr\u00ed","bullet_image":"\u1ea2nh Bullet","list_type":"Ki\u1ec3u",color:"M\u00e0u",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",style:"Ki\u1ec3u",margin:"Bi\u00ean",left:"Tr\u00e1i",bottom:"D\u01b0\u1edbi",right:"Ph\u1ea3i",top:"Tr\u00ean",same:"\u00c1p d\u1ee5ng cho t\u1ea5t c\u1ea3",padding:"\u0110\u1ec7m l\u00f3t","box_clear":"L\u00e0m s\u1ea1ch","box_float":"N\u1ed5i","box_height":"Chi\u1ec1u cao","box_width":"Chi\u1ec1u r\u1ed9ng","block_display":"Hi\u1ec3n th\u1ecb","block_whitespace":"Kho\u1ea3ng tr\u1eafng","block_text_indent":"Th\u1ee5t d\u00f2ng v\u0103n b\u1ea3n","block_text_align":"Canh l\u1ec1 v\u0103n b\u1ea3n","block_vertical_alignment":"Canh l\u1ec1 d\u1ecdc","block_letterspacing":"Kho\u1ea3ng c\u00e1c k\u00fd t\u1ef1","block_wordspacing":"Kho\u1ea3ng c\u00e1c t\u1eeb","background_vpos":"V\u1ecb tr\u00ed d\u1ecdc","background_hpos":"V\u1ecb tr\u00ed ngang","background_attachment":"\u0110\u00ednh k\u00e8m","background_repeat":"L\u1eb7p l\u1ea1i","background_image":"\u1ea2nh n\u1ec1n","background_color":"M\u00e0u n\u1ec1n","text_none":"kh\u00f4ng","text_blink":"nh\u1ea5p nh\u00e1y","text_case":"Bo\u0323c","text_striketrough":"g\u1ea1ch xuy\u00ean","text_underline":"g\u1ea1ch d\u01b0\u1edbi","text_overline":"g\u1ea1ch tr\u00ean","text_decoration":"Trang tr\u00ed","text_color":"M\u00e0u",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-cn_dlg.js new file mode 100644 index 0000000..c5fc08b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u5f62","text_style":"\u6837\u5f0f","text_weight":"\u7c97\u7ec6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u672c","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"Box","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u672c",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-Index",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u8ddd",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u95f4\u8ddd","block_wordspacing":"\u8bcd\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53\u5f62\u5f0f","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u4e0b\u5212\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u5b57\u4f53\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-tw_dlg.js new file mode 100644 index 0000000..22774eb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.style_dlg',{"text_lineheight":"\u6587\u5b57\u884c\u9ad8","text_variant":"\u7279\u6b8a\u5b57\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5b57\u9ad4\u7c97\u7d30","text_size":"\u5b57\u9ad4\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u5b57\u578b","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u65b9\u584a","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u5b57\u578b",apply:"\u5957\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f",clip:"\u526a\u8f2f",placement:"\u653e\u7f6e",overflow:"\u5377\u8ef8\u8a2d\u5b9a (Overflow)",zindex:"Z \u8ef8",visibility:"\u80fd\u898b\u5ea6","positioning_type":"\u5f62\u5f0f",position:"\u4f4d\u7f6e","bullet_image":"\u9805\u76ee\u7b26\u865f (\u6709\u5716\u7247)","list_type":"\u5f62\u5f0f",color:"\u984f\u8272",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",style:"\u6a23\u5f0f",margin:"\u908a\u8ddd",left:"\u5de6\u908a",bottom:"\u4e0b\u65b9",right:"\u53f3\u908a",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6a23",padding:"\u5167\u8ddd","box_clear":"\u79fb\u9664\u6d6e\u52d5\u6548\u679c","box_float":"\u6d6e\u52d5\u6548\u679c","box_height":"\u9ad8\u5ea6","box_width":"\u9ad8\u5ea6","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5b57\u8a5e\u9593\u9694","background_vpos":"\u5782\u76f4","background_hpos":"\u6c34\u5e73","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8907","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d\u6548\u679c","text_case":"\u5b57\u9ad4\u6a23\u5f0f","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e00\u689d\u7dda\u5728\u4e0a\u9762","text_decoration":"\u7dda\u689d\u6a23\u5f0f","text_color":"\u984f\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh_dlg.js new file mode 100644 index 0000000..5d994f9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/langs/zh_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('zh.style_dlg',{ +title:"\u7DE8\u8F2F CSS \u6A23\u5F0F\u8868", +apply:"\u61C9\u7528", +text_tab:"\u6587\u5B57", +background_tab:"\u80CC\u666F", +block_tab:"\u5340\u584A", +box_tab:"\u76D2\u6A21\u578B", +border_tab:"\u908A\u6846", +list_tab:"\u5217\u8868", +positioning_tab:"\u4F4D\u7F6E", +text_props:"\u6587\u5B57", +text_font:"\u5B57\u9AD4", +text_size:"\u5927\u5C0F", +text_weight:"\u5BEC\u5EA6", +text_style:"\u6A23\u5F0F", +text_variant:"\u8B8A\u9AD4", +text_lineheight:"\u884C\u9AD8", +text_case:"\u5B57\u9AD4", +text_color:"\u984F\u8272", +text_decoration:"\u88DD\u98FE", +text_overline:"\u4E0A\u5283\u7DDA", +text_underline:"\u5E95\u7DDA", +text_striketrough:"\u4E2D\u5283\u7DDA", +text_blink:"\u9583\u720D", +text_none:"\u7121", +background_color:"\u80CC\u666F\u984F\u8272", +background_image:"\u80CC\u666F\u5716\u7247", +background_repeat:"\u91CD\u8907", +background_attachment:"\u9644\u4EF6", +background_hpos:"\u6C34\u6E96\u4F4D\u7F6E", +background_vpos:"\u5782\u76F4\u4F4D\u7F6E", +block_wordspacing:"\u8A5E\u9593\u8DDD", +block_letterspacing:"\u5B57\u6BCD\u9593\u8DDD", +block_vertical_alignment:"\u5782\u76F4\u5C0D\u9F4A\u65B9\u5F0F", +block_text_align:"\u6587\u5B57\u5C0D\u9F4A", +block_text_indent:"\u6587\u5B57\u7E2E\u9032", +block_whitespace:"\u7A7A\u683C", +block_display:"\u986F\u793A\u65B9\u5F0F", +box_width:"\u5BEC\u5EA6", +box_height:"\u9AD8\u5EA6", +box_float:"\u6D6E\u52D5", +box_clear:"\u6E05\u9664", +padding:"\u5167\u908A\u8DDD", +same:"\u5168\u90E8\u76F8\u540C", +top:"\u9802\u90E8", +right:"\u53F3\u5074", +bottom:"\u5E95\u90E8", +left:"\u5DE6\u5074", +margin:"\u908A\u8DDD", +style:"\u6A23\u5F0F", +width:"\u5BEC\u5EA6", +height:"\u9AD8\u5EA6", +color:"\u984F\u8272", +list_type:"\u5217\u8868\u985E\u578B", +bullet_image:"\u6E05\u55AE\u5716\u7247", +position:"\u5716\u7247\u4F4D\u7F6E", +positioning_type:"\u4F4D\u7F6E\u985E\u578B", +visibility:"\u662F\u5426\u53EF\u898B", +zindex:"Z\u5EA7\u6A19", +overflow:"\u6EA2\u51FA", +placement:"\u4F48\u7F6E", +clip:"\u526A\u8F2F" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/props.htm b/ehcp/net2ftp/plugins/tinymce/plugins/style/props.htm new file mode 100644 index 0000000..7dc087a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/props.htm @@ -0,0 +1,845 @@ + + + + {#style_dlg.title} + + + + + + + + + + +
        + + +
        +
        +
        + {#style_dlg.text} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + + + + + + +
          + + +
        +
        + +
        + + + +
        + + + + + + +
        + +   + + +
        +
        + +
        + + + + + +
         
        +
        {#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        + +
        +
        + {#style_dlg.background} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
         
        +
        + + + + +
         
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        +
        +
        + +
        +
        + {#style_dlg.block} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + + +
        +
        +
        +
        + +
        +
        + {#style_dlg.box} + + + + + + + + + + + + + + +
        + + + + + + +
          + + +
        +
           
        + + + + + + +
          + + +
        +
           
        +
        + +
        +
        + {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
         
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        +
        +
        + +
        +
        + {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
         
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        + + + + + + +
          + + +
        +
        +
        +
        +
        +
        + +
        +
        + {#style_dlg.border} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
              
        {#style_dlg.top}   + + + + + + +
          + + +
        +
          + + + + + +
         
        +
        {#style_dlg.right}   + + + + + + +
          + + +
        +
          + + + + + +
         
        +
        {#style_dlg.bottom}   + + + + + + +
          + + +
        +
          + + + + + +
         
        +
        {#style_dlg.left}   + + + + + + +
          + + +
        +
          + + + + + +
         
        +
        +
        +
        + +
        +
        + {#style_dlg.list} + + + + + + + + + + + + + + + +
        +
        +
        + +
        +
        + {#style_dlg.position} + + + + + + + + + + + + + + + + + + + + + +
           
        + + + + + + +
          + + +
        +
           
        + + + + + + +
          + + +
        +
           
        +
        + +
        +
        + {#style_dlg.placement} + + + + + + + + + + + + + + + + + + + + + + +
         
        {#style_dlg.top} + + + + + + +
          + + +
        +
        {#style_dlg.right} + + + + + + +
          + + +
        +
        {#style_dlg.bottom} + + + + + + +
          + + +
        +
        {#style_dlg.left} + + + + + + +
          + + +
        +
        +
        +
        + +
        +
        + {#style_dlg.clip} + + + + + + + + + + + + + + + + + + + + + + +
         
        {#style_dlg.top} + + + + + + +
          + + +
        +
        {#style_dlg.right} + + + + + + +
          + + +
        +
        {#style_dlg.bottom} + + + + + + +
          + + +
        +
        {#style_dlg.left} + + + + + + +
          + + +
        +
        +
        +
        +
        +
        +
        + +
        + + +
        + +
        + + + +
        +
        + +
        +
        +
        + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/style/readme.txt b/ehcp/net2ftp/plugins/tinymce/plugins/style/readme.txt new file mode 100644 index 0000000..5bac302 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/style/readme.txt @@ -0,0 +1,19 @@ +Edit CSS Style plug-in notes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Unlike WYSIWYG editor functionality that operates only on the selected text, +typically by inserting new HTML elements with the specified styles. +This plug-in operates on the HTML blocks surrounding the selected text. +No new HTML elements are created. + +This plug-in only operates on the surrounding blocks and not the nearest +parent node. This means that if a block encapsulates a node, +e.g

        text

        , then only the styles in the block are +recognized, not those in the span. + +When selecting text that includes multiple blocks at the same level (peers), +this plug-in accumulates the specified styles in all of the surrounding blocks +and populates the dialogue checkboxes accordingly. There is no differentiation +between styles set in all the blocks versus styles set in some of the blocks. + +When the [Update] or [Apply] buttons are pressed, the styles selected in the +checkboxes are applied to all blocks that surround the selected text. diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..2c51291 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]:not(iframe)");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..94f4532 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,122 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; + + tinymce.create('tinymce.plugins.TabFocusPlugin', { + init : function(ed, url) { + function tabCancel(ed, e) { + if (e.keyCode === 9) + return Event.cancel(e); + } + + function tabHandler(ed, e) { + var x, i, f, el, v; + + function find(d) { + el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); + + function canSelectRecursive(e) { + return e.nodeName==="BODY" || (e.type != 'hidden' && + !(e.style.display == "none") && + !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); + } + function canSelectInOldIe(el) { + return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; + } + function isOldIe() { + return tinymce.isIE6 || tinymce.isIE7; + } + function canSelect(el) { + return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); + } + + each(el, function(e, i) { + if (e.id == ed.id) { + x = i; + return false; + } + }); + if (d > 0) { + for (i = x + 1; i < el.length; i++) { + if (canSelect(el[i])) + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (canSelect(el[i])) + return el[i]; + } + } + + return null; + } + + if (e.keyCode === 9) { + v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') + el = find(-1); + else + el = DOM.get(v[0]); + } else { + if (v[1] == ':next') + el = find(1); + else + el = DOM.get(v[1]); + } + + if (el) { + if (el.id && (ed = tinymce.get(el.id || el.name))) + ed.focus(); + else + window.setTimeout(function() { + if (!tinymce.isWebKit) + window.focus(); + el.focus(); + }, 10); + + return Event.cancel(e); + } + } + } + + ed.onKeyUp.add(tabCancel); + + if (tinymce.isGecko) { + ed.onKeyPress.add(tabHandler); + ed.onKeyDown.add(tabCancel); + } else + ed.onKeyDown.add(tabHandler); + + }, + + getInfo : function() { + return { + longname : 'Tabfocus', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/cell.htm b/ehcp/net2ftp/plugins/tinymce/plugins/table/cell.htm new file mode 100644 index 0000000..a72a8d6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/cell.htm @@ -0,0 +1,180 @@ + + + + {#table_dlg.cell_title} + + + + + + + + + +
        + + +
        +
        +
        + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + +
        + + + +
        + +
        +
        +
        + +
        +
        + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        + + + + + +
         
        +
        + + + + + +
         
        +
        + + + + + +
         
        +
        +
        +
        +
        + +
        +
        + +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/css/cell.css b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/cell.css new file mode 100644 index 0000000..a067ecd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/cell.css @@ -0,0 +1,17 @@ +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; +} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/css/row.css b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/row.css new file mode 100644 index 0000000..1f7755d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/row.css @@ -0,0 +1,25 @@ +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/css/table.css b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/table.css new file mode 100644 index 0000000..d11c3f6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/css/table.css @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 245px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin.js new file mode 100644 index 0000000..4a35a5e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='
        '}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){if(!O){return}var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;iN){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?" ":'
        ')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..532b79c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/editor_plugin_src.js @@ -0,0 +1,1456 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var each = tinymce.each; + + // Checks if the selection/caret is at the start of the specified block element + function isAtStart(rng, par) { + var doc = par.ownerDocument, rng2 = doc.createRange(), elm; + + rng2.setStartBefore(par); + rng2.setEnd(rng.endContainer, rng.endOffset); + + elm = doc.createElement('body'); + elm.appendChild(rng2.cloneContents()); + + // Check for text characters of other elements that should be treated as content + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0; + }; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + } + + /** + * Table Grid class. + */ + function TableGrid(table, dom, selection) { + var grid, startPos, endPos, selectedCell; + + buildGrid(); + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select('> ' + part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('> td, > th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) + x++; + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) + grid[y2] = []; + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part : part, + real : y2 == y && x2 == x, + elm : td, + rowspan : rowspan, + colspan : colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + }; + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) + return row[x]; + }; + + function setSpanVal(td, name, val) { + if (td) { + val = parseInt(val); + + if (val === 1) + td.removeAttribute(name, 1); + else + td.setAttribute(name, val, 1); + } + } + + function isCellSelected(cell) { + return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell); + }; + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { + rows.push(row); + return false; + } + }); + }); + + return rows; + }; + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + }; + + function cloneCell(cell) { + var formatNode; + + // Clone formats + tinymce.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + node = cloneNode(node, false); + + if (!formatNode) + formatNode = curNode = node; + else if (curNode) + curNode.appendChild(node); + + curNode = node; + }); + + // Add something to the inner node + if (curNode) + curNode.innerHTML = tinymce.isIE ? ' ' : '
        '; + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!tinymce.isIE) + cell.innerHTML = '
        '; + } + + return cell; + }; + + function cleanup() { + var rng = dom.createRng(); + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length == 0) + dom.remove(tr); + }); + + // Empty table + if (dom.select('tr', table).length == 0) { + rng.setStartAfter(table); + rng.setEndAfter(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length == 0) + dom.remove(part); + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + }; + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) + dom.insertAfter(cloneCell(cell), cell); + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + }; + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, newCell, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) + dom.insertAfter(cloneCell(cell), cell); + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + }; + + function merge(cell, cols, rows) { + var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + startPos = endPos = null; + + // Calculate start/end pos by checking for selected cells in grid works better with context menu + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + if (!startPos) { + startPos = {x: x, y: y}; + } + + endPos = {x: x, y: y}; + } + }); + }); + + // Use selection + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + setSpanVal(startCell, 'colSpan', (endX - startX) + 1); + setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + if (!grid[y] || !grid[y][x]) + continue; + + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node) { + startCell.appendChild(node); + }); + + // Remove bogus nodes if there is children in the target cell + if (children.length) { + children = tinymce.grep(startCell.childNodes); + count = 0; + each(children, function(node) { + if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) + startCell.removeChild(node); + }); + } + + // Remove cell + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + }; + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) + return false; + } + }); + + if (before) + return !posY; + }); + + for (x = 0; x < grid[0].length; x++) { + // Cell not found could be because of an invalid table structure + if (!grid[posY][x]) + continue; + + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan + 1); + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowSpan'); + if (rowSpan > 1) { + setSpanVal(otherCell, 'rowSpan', rowSpan + 1); + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell); + setSpanVal(newCell, 'colSpan', cell.colSpan); + + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) + dom.insertAfter(newRow, rowElm); + else + rowElm.parentNode.insertBefore(newRow, rowElm); + } + }; + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) + return false; + } + }); + + if (before) + return !posX; + }); + + each(grid, function(row, y) { + var cell, rowSpan, colSpan; + + if (!row[posX]) + return; + + cell = row[posX].elm; + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else + setSpanVal(cell, 'colSpan', cell.colSpan + 1); + + lastCell = cell; + } + }); + }; + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colSpan'); + + if (colSpan > 1) + setSpanVal(cell, 'colSpan', colSpan - 1); + else + dom.remove(cell); + }); + + cols.push(x); + } + }); + }); + + cleanup(); + }; + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan <= 1) + dom.remove(cell); + else + setSpanVal(cell, 'rowSpan', rowSpan - 1); + + lastCell = cell; + } + }); + }; + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + }; + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + }; + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + }; + + function pasteRows(rows, before) { + // If we don't have any rows in the clipboard, return immediately + if(!rows) + return; + + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell, x) { + if (cell.real) + targetCellCount += cell.colspan; + + if (cell.elm.parentNode == targetRow) + match = 1; + }); + + if (match) + return false; + }); + + if (!before) + rows.reverse(); + + each(rows, function(row) { + var cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + setSpanVal(cell, 'colSpan', 1); + setSpanVal(cell, 'rowSpan', 1); + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) + row.appendChild(cloneCell(row.cells[cellCount - 1])); + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) + dom.remove(row.cells[i]); + + // Add before/after + if (before) + targetRow.parentNode.insertBefore(row, targetRow); + else + dom.insertAfter(row, targetRow); + }); + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + }; + + function setStartCell(cell) { + startPos = getPos(cell); + }; + + function findEndPos() { + var pos, maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) + maxX = x; + + if (y > maxY) + maxY = y; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + }; + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) + startX -= cell.colspan - 1; + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) + startY -= cell.rowspan - 1; + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) { + if (grid[y][x]) + dom.addClass(grid[y][x].elm, 'mceSelected'); + } + } + } + }; + + // Expose to public + tinymce.extend(this, { + deleteTable : deleteTable, + split : split, + merge : merge, + insertRow : insertRow, + insertCol : insertCol, + deleteCols : deleteCols, + deleteRows : deleteRows, + cutRows : cutRows, + copyRows : copyRows, + pasteRows : pasteRows, + getPos : getPos, + setStartCell : setStartCell, + setEndCell : setEndCell + }); + }; + + tinymce.create('tinymce.plugins.TablePlugin', { + init : function(ed, url) { + var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload + + function createTableGrid(node) { + var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); + + if (tblElm) + return new TableGrid(tblElm, ed.dom, selection); + }; + + function cleanup() { + // Restore selection possibilities + ed.getBody().style.webkitUserSelect = ''; + + if (hasCellSelection) { + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + hasCellSelection = false; + } + }; + + // Register buttons + each([ + ['table', 'table.desc', 'mceInsertTable', true], + ['delete_table', 'table.del', 'mceTableDelete'], + ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], + ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], + ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], + ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], + ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], + ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], + ['row_props', 'table.row_desc', 'mceTableRowProps', true], + ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], + ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], + ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] + ], function(c) { + ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); + }); + + // Select whole table is a table border is clicked + if (!tinymce.isIE) { + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'TABLE') { + ed.selection.select(e); + ed.nodeChanged(); + } + }); + } + + ed.onPreProcess.add(function(ed, args) { + var nodes, i, node, dom = ed.dom, value; + + nodes = dom.select('table', args.node); + i = nodes.length; + while (i--) { + node = nodes[i]; + dom.setAttrib(node, 'data-mce-style', ''); + + if ((value = dom.getAttrib(node, 'width'))) { + dom.setStyle(node, 'width', value); + dom.setAttrib(node, 'width', ''); + } + + if ((value = dom.getAttrib(node, 'height'))) { + dom.setStyle(node, 'height', value); + dom.setAttrib(node, 'height', ''); + } + } + }); + + // Handle node change updates + ed.onNodeChange.add(function(ed, cm, n) { + var p; + + n = ed.selection.getStart(); + p = ed.dom.getParent(n, 'td,th,caption'); + cm.setActive('table', n.nodeName === 'TABLE' || !!p); + + // Disable table tools if we are in caption + if (p && p.nodeName === 'CAPTION') + p = 0; + + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_col', !p); + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_row', !p); + cm.setDisabled('col_after', !p); + cm.setDisabled('col_before', !p); + cm.setDisabled('row_after', !p); + cm.setDisabled('row_before', !p); + cm.setDisabled('row_props', !p); + cm.setDisabled('cell_props', !p); + cm.setDisabled('split_cells', !p); + cm.setDisabled('merge_cells', !p); + }); + + ed.onInit.add(function(ed) { + var startTable, startCell, dom = ed.dom, tableGrid; + + winMan = ed.windowManager; + + // Add cell selection logic + ed.onMouseDown.add(function(ed, e) { + if (e.button != 2) { + cleanup(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + dom.bind(ed.getDoc(), 'mouseover', function(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = createTableGrid(table); + tableGrid.setStartCell(startCell); + + ed.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + hasCellSelection = true; + } + + // Remove current selection + sel = ed.selection.getSel(); + + try { + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + } catch (ex) { + // IE9 might throw errors here + } + + e.preventDefault(); + } + }); + + ed.onMouseUp.add(function(ed, e) { + var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; + + // Move selection to startCell + if (startCell) { + if (tableGrid) + ed.getBody().style.webkitUserSelect = ''; + + function setPoint(node, start) { + var walker = new tinymce.dom.TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { + if (start) + rng.setStart(node, 0); + else + rng.setEnd(node, node.nodeValue.length); + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) + rng.setStartBefore(node); + else + rng.setEndBefore(node); + + return; + } + } while (node = (start ? walker.next() : walker.prev())); + } + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mceSelected,th.mceSelected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + rng.setStartBefore(node); + rng.setEndAfter(node); + + setPoint(node, 1); + walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mceSelected')) + break; + + lastNode = node; + } + } while (node = walker.next()); + + setPoint(lastNode); + + sel.setRng(rng); + } + + ed.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + ed.onKeyUp.add(function(ed, e) { + cleanup(); + }); + + ed.onKeyDown.add(function (ed, e) { + fixTableCellSelection(ed); + }); + + ed.onMouseDown.add(function (ed, e) { + if (e.button != 2) { + fixTableCellSelection(ed); + } + }); + function tableCellSelected(ed, rng, n, currentCell) { + // The decision of when a table cell is selected is somewhat involved. The fact that this code is + // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) + // or the parent of the table (in the case of the selection containing the last cell of a table). + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), + tableParent, allOfCellSelected, tableCellSelection; + if (table) + tableParent = table.parentNode; + allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset == 0 && + rng.endOffset == 0 && + currentCell && + (n.nodeName=="TR" || n==tableParent); + tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell; + return allOfCellSelected || tableCellSelection; + // return false; + } + + // this nasty hack is here to work around some WebKit selection bugs. + function fixTableCellSelection(ed) { + if (!tinymce.isWebKit) + return; + + var rng = ed.selection.getRng(); + var n = ed.selection.getNode(); + var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH'); + + if (!tableCellSelected(ed, rng, n, currentCell)) + return; + if (!currentCell) { + currentCell=n; + } + + // Get the very last node inside the table cell + var end = currentCell.lastChild; + while (end.lastChild) + end = end.lastChild; + + // Select the entire table cell. Nothing outside of the table cell should be selected. + rng.setEnd(end, end.nodeValue.length); + ed.selection.setRng(rng); + } + ed.plugins.table.fixTableCellSelection=fixTableCellSelection; + + // Add context menu + if (ed && ed.plugins.contextmenu) { + ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { + var sm, se = ed.selection, el = se.getNode() || ed.getBody(); + + if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { + m.removeAll(); + + if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + m.addSeparator(); + } + + if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + m.addSeparator(); + } + + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); + m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); + m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); + m.addSeparator(); + + // Cell menu + sm = m.addMenu({title : 'table.cell'}); + sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); + sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); + sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); + + // Row menu + sm = m.addMenu({title : 'table.row'}); + sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); + sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); + sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); + sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); + sm.addSeparator(); + sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); + sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); + sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); + sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); + + // Column menu + sm = m.addMenu({title : 'table.col'}); + sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); + sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); + sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); + } else + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); + }); + } + + // Fix to allow navigating up and down in a table in WebKit browsers. + if (tinymce.isWebKit) { + function moveSelection(ed, e) { + var VK = tinymce.VK; + var key = e.keyCode; + + function handle(upBool, sourceNode, event) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = ed.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; + + if (siblingRow) { + moveCursorToRow(ed, sourceNode, siblingRow, upBool); + tinymce.dom.Event.cancel(event); + return true; + } else { + var tableNode = ed.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode, event); + } + } + return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); + } + } + + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = ed.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } else { + return tbodies[position + (upBool ? -1 : 1)]; + } + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = ed.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode, event) { + var targetRow = getChildForDirection(targetParent, upBool); + targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool); + tinymce.dom.Event.cancel(event); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table, event) { + var tableSibling = table[siblingDirection]; + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } else { + var parentCell = ed.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, event); + } else { + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + return tinymce.dom.Event.cancel(event); + } + } + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + ed.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(ed) { + var node = ed.selection.getNode(); + var currentRow = ed.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0; + var r = 0; + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) + return false; + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = ed.selection.getNode(); + var newParent = ed.dom.getParent(newNode, 'td,th'); + var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent) + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(ed)) { + var preBrowserNode = ed.selection.getNode(); + setTimeout(function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + + ed.onKeyDown.add(moveSelection); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + function fixTableCaretPos() { + var last; + + // Skip empty text nodes form the end + for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; + + if (last && last.nodeName == 'TABLE') { + if (ed.settings.forced_root_block) + ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? ' ' : '
        '); + else + ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'}); + } + }; + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + var rng, table, dom = ed.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = ed.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && ed.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + ed.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + ed.onKeyUp.add(fixTableCaretPos); + ed.onSetContent.add(fixTableCaretPos); + ed.onVisualAid.add(fixTableCaretPos); + + ed.onPreProcess.add(function(ed, o) { + var last = o.node.lastChild; + + if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && last.previousSibling && last.previousSibling.nodeName == "TABLE") { + ed.dom.remove(last); + } + }); + + + /** + * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line + * + * Removed: Since the new enter logic seems to fix this one. + */ + /* + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) { + var node = ed.selection.getRng().startContainer; + var tableCell = dom.getParent(node, 'td,th'); + if (tableCell) { + var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF"); + dom.insertAfter(zeroSizedNbsp, node); + } + } + }); + } + */ + + fixTableCaretPos(); + ed.startContent = ed.getContent({format : 'raw'}); + }); + + // Register action commands + each({ + mceTableSplitCells : function(grid) { + grid.split(); + }, + + mceTableMergeCells : function(grid) { + var rowSpan, colSpan, cell; + + cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { + winMan.open({ + url : url + '/merge_cells.htm', + width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), + height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), + inline : 1 + }, { + rows : rowSpan, + cols : colSpan, + onaction : function(data) { + grid.merge(cell, data.cols, data.rows); + }, + plugin_url : url + }); + } else + grid.merge(); + }, + + mceTableInsertRowBefore : function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter : function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore : function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter : function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol : function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow : function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow : function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow : function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore : function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter : function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete : function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + ed.addCommand(name, function() { + var grid = createTableGrid(); + + if (grid) { + func(grid); + ed.execCommand('mceRepaint'); + cleanup(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable : function(val) { + winMan.open({ + url : url + '/table.htm', + width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), + height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + action : val ? val.action : 0 + }); + }, + + mceTableRowProps : function() { + winMan.open({ + url : url + '/row.htm', + width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }, + + mceTableCellProps : function() { + winMan.open({ + url : url + '/cell.htm', + width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + } + }, function(func, name) { + ed.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); +})(tinymce); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/js/cell.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/js/cell.js new file mode 100644 index 0000000..02ecf22 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/js/cell.js @@ -0,0 +1,319 @@ +tinyMCEPopup.requireLangPack(); + +var ed; + +function init() { + ed = tinyMCEPopup.editor; + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') + + var inst = ed; + var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th"); + var formObj = document.forms[0]; + var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style")); + + // Get table cell data + var celltype = tdElm.nodeName.toLowerCase(); + var align = ed.dom.getAttrib(tdElm, 'align'); + var valign = ed.dom.getAttrib(tdElm, 'valign'); + var width = trimSize(getStyle(tdElm, 'width', 'width')); + var height = trimSize(getStyle(tdElm, 'height', 'height')); + var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); + var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); + var className = ed.dom.getAttrib(tdElm, 'class'); + var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + var id = ed.dom.getAttrib(tdElm, 'id'); + var lang = ed.dom.getAttrib(tdElm, 'lang'); + var dir = ed.dom.getAttrib(tdElm, 'dir'); + var scope = ed.dom.getAttrib(tdElm, 'scope'); + + // Setup form + addClassesToList('class', 'table_cell_styles'); + TinyMCE_EditableSelects.init(); + + if (!ed.dom.hasClass(tdElm, 'mceSelected')) { + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.backgroundimage.value = backgroundimage; + formObj.width.value = width; + formObj.height.value = height; + formObj.id.value = id; + formObj.lang.value = lang; + formObj.style.value = ed.dom.serializeStyle(st); + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'valign', valign); + selectByValue(formObj, 'class', className, true, true); + selectByValue(formObj, 'celltype', celltype); + selectByValue(formObj, 'dir', dir); + selectByValue(formObj, 'scope', scope); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + } else + tinyMCEPopup.dom.hide('action'); +} + +function updateAction() { + var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0]; + + if (!AutoValidator.validate(formObj)) { + tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.'); + return false; + } + + tinyMCEPopup.restoreSelection(); + el = ed.selection.getStart(); + tdElm = ed.dom.getParent(el, "td,th"); + trElm = ed.dom.getParent(el, "tr"); + tableElm = ed.dom.getParent(el, "table"); + + // Cell is selected + if (ed.dom.hasClass(tdElm, 'mceSelected')) { + // Update all selected sells + tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) { + updateCell(td); + }); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + switch (getSelectValue(formObj, 'action')) { + case "cell": + var celltype = getSelectValue(formObj, 'celltype'); + var scope = getSelectValue(formObj, 'scope'); + + function doUpdate(s) { + if (s) { + updateCell(tdElm); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + } + }; + + if (ed.getParam("accessibility_warnings", 1)) { + if (celltype == "th" && scope == "") + tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate); + else + doUpdate(1); + + return; + } + + updateCell(tdElm); + break; + + case "row": + var cell = trElm.firstChild; + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + cell = updateCell(cell, true); + } while ((cell = nextCell(cell)) != null); + + break; + + case "col": + var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr"); + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + if (cell == tdElm) + break; + col += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1; + } while ((cell = nextCell(cell)) != null); + + for (var i=0; i 0) { + tinymce.each(tableElm.rows, function(tr) { + var i; + + for (i = 0; i < tr.cells.length; i++) { + if (dom.hasClass(tr.cells[i], 'mceSelected')) { + updateRow(tr, true); + return; + } + } + }); + + inst.addVisual(); + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + switch (action) { + case "row": + updateRow(trElm); + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i colLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); + return false; + } else if (rowLimit && rows > rowLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); + return false; + } else if (cellLimit && cols * rows > cellLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); + return false; + } + + // Update table + if (action == "update") { + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + + if (!isCssSize(border)) { + dom.setAttrib(elm, 'border', border); + } else { + dom.setAttrib(elm, 'border', ''); + } + + if (border == '') { + dom.setStyle(elm, 'border-width', ''); + dom.setStyle(elm, 'border', ''); + dom.setAttrib(elm, 'border', ''); + } + + dom.setAttrib(elm, 'align', align); + dom.setAttrib(elm, 'frame', frame); + dom.setAttrib(elm, 'rules', rules); + dom.setAttrib(elm, 'class', className); + dom.setAttrib(elm, 'style', style); + dom.setAttrib(elm, 'id', id); + dom.setAttrib(elm, 'summary', summary); + dom.setAttrib(elm, 'dir', dir); + dom.setAttrib(elm, 'lang', lang); + + capEl = inst.dom.select('caption', elm)[0]; + + if (capEl && !caption) + capEl.parentNode.removeChild(capEl); + + if (!capEl && caption) { + capEl = elm.ownerDocument.createElement('caption'); + + if (!tinymce.isIE) + capEl.innerHTML = '
        '; + + elm.insertBefore(capEl, elm.firstChild); + } + + if (width && inst.settings.inline_styles) { + dom.setStyle(elm, 'width', width); + dom.setAttrib(elm, 'width', ''); + } else { + dom.setAttrib(elm, 'width', width, true); + dom.setStyle(elm, 'width', ''); + } + + // Remove these since they are not valid XHTML + dom.setAttrib(elm, 'borderColor', ''); + dom.setAttrib(elm, 'bgColor', ''); + dom.setAttrib(elm, 'background', ''); + + if (height && inst.settings.inline_styles) { + dom.setStyle(elm, 'height', height); + dom.setAttrib(elm, 'height', ''); + } else { + dom.setAttrib(elm, 'height', height, true); + dom.setStyle(elm, 'height', ''); + } + + if (background != '') + elm.style.backgroundImage = "url('" + background + "')"; + else + elm.style.backgroundImage = ''; + +/* if (tinyMCEPopup.getParam("inline_styles")) { + if (width != '') + elm.style.width = getCSSSize(width); + }*/ + + if (bordercolor != "") { + elm.style.borderColor = bordercolor; + elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; + elm.style.borderWidth = cssSize(border); + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + inst.addVisual(); + + // Fix for stange MSIE align bug + //elm.outerHTML = elm.outerHTML; + + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.execCommand('mceRepaint'); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += ''); + + tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { + if (patt) + patt += ','; + + patt += n + ' ._mce_marker'; + }); + + tinymce.each(inst.dom.select(patt), function(n) { + inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); + }); + + dom.setOuterHTML(dom.select('br._mce_marker')[0], html); + } else + inst.execCommand('mceInsertContent', false, html); + + tinymce.each(dom.select('table[data-mce-new]'), function(node) { + var tdorth = dom.select('td,th', node); + + // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document + if (tinymce.isIE && node.nextSibling == null) { + if (inst.settings.forced_root_block) + dom.insertAfter(dom.create(inst.settings.forced_root_block), node); + else + dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node); + } + + try { + // IE9 might fail to do this selection + inst.selection.setCursorLocation(tdorth[0], 0); + } catch (ex) { + // Ignore + } + + dom.setAttrib(node, 'data-mce-new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); + + tinyMCEPopup.close(); +} + +function makeAttrib(attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib]; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value == "") + return ""; + + // XML encode it + value = value.replace(/&/g, '&'); + value = value.replace(/\"/g, '"'); + value = value.replace(//g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = ""; + var inst = tinyMCEPopup.editor, dom = inst.dom; + var formObj = document.forms[0]; + var elm = dom.getParent(inst.selection.getNode(), "table"); + + // Hide advanced fields that isn't available in the schema + tinymce.each("summary id rules dir style frame".split(" "), function(name) { + var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr"); + + if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) { + tr.style.display = 'none'; + } + }); + + action = tinyMCEPopup.getWindowArg('action'); + + if (!action) + action = elm ? "update" : "insert"; + + if (elm && action != "insert") { + var rowsAr = elm.rows; + var cols = 0; + for (var i=0; i cols) + cols = rowsAr[i].cells.length; + + cols = cols; + rows = rowsAr.length; + + st = dom.parseStyle(dom.getAttrib(elm, "style")); + border = trimSize(getStyle(elm, 'border', 'borderWidth')); + cellpadding = dom.getAttrib(elm, 'cellpadding', ""); + cellspacing = dom.getAttrib(elm, 'cellspacing', ""); + width = trimSize(getStyle(elm, 'width', 'width')); + height = trimSize(getStyle(elm, 'height', 'height')); + bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); + bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); + align = dom.getAttrib(elm, 'align', align); + frame = dom.getAttrib(elm, 'frame'); + rules = dom.getAttrib(elm, 'rules'); + className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); + id = dom.getAttrib(elm, 'id'); + summary = dom.getAttrib(elm, 'summary'); + style = dom.serializeStyle(st); + dir = dom.getAttrib(elm, 'dir'); + lang = dom.getAttrib(elm, 'lang'); + background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; + + orgTableWidth = width; + orgTableHeight = height; + + action = "update"; + formObj.insert.value = inst.getLang('update'); + } + + addClassesToList('class', "table_styles"); + TinyMCE_EditableSelects.init(); + + // Update form + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'tframe', frame); + selectByValue(formObj, 'rules', rules); + selectByValue(formObj, 'class', className, true, true); + formObj.cols.value = cols; + formObj.rows.value = rows; + formObj.border.value = border; + formObj.cellpadding.value = cellpadding; + formObj.cellspacing.value = cellspacing; + formObj.width.value = width; + formObj.height.value = height; + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.id.value = id; + formObj.summary.value = summary; + formObj.style.value = style; + formObj.dir.value = dir; + formObj.lang.value = lang; + formObj.backgroundimage.value = background; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + // Disable some fields in update mode + if (action == "update") { + formObj.cols.disabled = true; + formObj.rows.disabled = true; + } +} + +function changedSize() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + +/* var width = formObj.width.value; + if (width != "") + st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; + else + st['width'] = "";*/ + + var height = formObj.height.value; + if (height != "") + st['height'] = getCSSSize(height); + else + st['height'] = ""; + + formObj.style.value = dom.serializeStyle(st); +} + +function isCssSize(value) { + return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value); +} + +function cssSize(value, def) { + value = tinymce.trim(value || def); + + if (!isCssSize(value)) { + return parseInt(value, 10) + 'px'; + } + + return value; +} + +function changedBackgroundImage() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBorder() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + // Update border width if the element has a color + if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != "")) + st['border-width'] = cssSize(formObj.border.value); + else { + if (!formObj.border.value) { + st['border'] = ''; + st['border-width'] = ''; + } + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedColor() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-color'] = formObj.bgcolor.value; + + if (formObj.bordercolor.value != "") { + st['border-color'] = formObj.bordercolor.value; + + // Add border-width if it's missing + if (!st['border-width']) + st['border-width'] = cssSize(formObj.border.value, 1); + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedStyle() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + if (st['background-image']) + formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + else + formObj.backgroundimage.value = ''; + + if (st['width']) + formObj.width.value = trimSize(st['width']); + + if (st['height']) + formObj.height.value = trimSize(st['height']); + + if (st['background-color']) { + formObj.bgcolor.value = st['background-color']; + updateColor('bgcolor_pick','bgcolor'); + } + + if (st['border-color']) { + formObj.bordercolor.value = st['border-color']; + updateColor('bordercolor_pick','bordercolor'); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ar_dlg.js new file mode 100644 index 0000000..bb2d617 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.table_dlg',{"rules_border":"\u0627\u0644\u0628\u0631\u0648\u0627\u0632","rules_box":"\u0635\u0646\u062f\u0648\u0642","rules_vsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0629","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0623\u0641\u0642\u064a\u0629","rules_below":"\u0623\u062f\u0646\u0627\u0647","rules_above":"\u0623\u0639\u0644\u0649","rules_void":"\u0623\u0644\u063a\u0649",rules:"\u0642\u0648\u0627\u0639\u062f","frame_all":"\u0643\u0627\u0641\u0629","frame_cols":"\u0639\u062f\u062f \u0627\u0644\u0623\u0639\u0645\u062f\u0629","frame_rows":"\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641","frame_groups":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a","frame_none":"\u0644\u0627 \u0634\u064a\u0621",frame:"\u0627\u0644\u0625\u0637\u0627\u0631",caption:"\u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629","missing_scope":"\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0645\u0631\u0627\u0631 \u0628\u062f\u0648\u0646 \u062a\u062d\u062f\u064a\u062f \u0631\u0623\u0633 \u0644\u0644\u062c\u062f\u0648\u0644.. \u0642\u062f \u064a\u0643\u0648\u0646 \u0635\u0639\u0628 \u0639\u0644\u0649 \u0632\u0648\u0649 \u0627\u0644\u0625\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0647 \u0641\u0647\u0645 \u0645\u062d\u062a\u0648\u064a\u0627\u062a \u062c\u062f\u0648\u0644\u0643","cell_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0645\u0646 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 {$cells}.","row_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641 {$rows}.","col_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0623\u0639\u0645\u062f\u0629 {$cols}.",colgroup:"\u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u0639\u0645\u062f\u0629 ",rowgroup:" \u0645\u062c\u0645\u0648\u0639\u0629 \u0635\u0641",scope:"\u0646\u0637\u0627\u0642",tfoot:"\u0645\u0624\u062e\u0631\u0629 \u0627\u0644\u062c\u062f\u0648\u0644",tbody:"\u062c\u0633\u0645 \u0627\u0644\u062c\u062f\u0648\u0644",thead:"\u0631\u0623\u0633 \u0627\u0644\u062c\u062f\u0648\u0644","row_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u0648\u0641 \u0641\u064a \u0627\u0644\u062c\u062f\u0648\u0644","row_even":" \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0632\u0648\u062c\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_odd":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0641\u0631\u062f\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_row":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641 \u0627\u0644\u062d\u0627\u0644\u064a","cell_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644","cell_row":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u064a \u0627\u0644\u0635\u0641","cell_cell":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062e\u0644\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629",th:"\u0631\u0623\u0633",td:"\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a",summary:"\u0645\u0644\u062e\u0635",bgimage:"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",mime:"\u0627\u0644\u0647\u062f\u0641 \u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641",langcode:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0644\u063a\u0629",style:"\u0634\u0643\u0644",id:"\u0627\u0644 \u0623\u064a \u062f\u064a Id","merge_cells_title":"\u062f\u0645\u062c \u0627\u0644\u062e\u0644\u0627\u064a\u0627",bgcolor:"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",bordercolor:"\u0644\u0648\u0646 \u0627\u0644\u062d\u062f\u0648\u062f","align_bottom":"\u0627\u0633\u0641\u0644","align_top":"\u0627\u0639\u0644\u0649",valign:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629 \u0627\u0644\u0631\u0623\u0633\u064a\u0647","cell_type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629","cell_title":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u062c\u062f\u0648\u0644","row_title":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u062c\u062f\u0648\u0644","align_middle":"\u0648\u0633\u0637","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_default":"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a",align:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629",border:"\u0627\u0644\u062d\u062f\u0648\u062f",cellpadding:"\u0628\u0637\u0627\u0646\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627",cellspacing:"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u0627\u064a\u0627 ",rows:"\u0627\u0644\u0635\u0641\u0648\u0641",cols:"\u0623\u0639\u0645\u062f\u0629",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",title:"\u0625\u062f\u0631\u0627\u062c/\u062a\u0639\u062f\u064a\u0644 \u062c\u062f\u0648\u0644",rowtype:"\u0635\u0641 \u0641\u064a \u062c\u0632\u0621 \u0627\u0644\u062c\u062f\u0648\u0644","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0647","general_props":"\u062e\u0635\u0627\u0626\u0635 \u0639\u0627\u0645\u0647","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","general_tab":"\u0639\u0627\u0645","cell_col":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u0649 \u0639\u0645\u0648\u062f"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/cs_dlg.js new file mode 100644 index 0000000..735c521 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.table_dlg',{"rules_border":"r\u00e1me\u010dek okolo","rules_box":"box okolo","rules_vsides":"vlevo a vpravo","rules_rhs":"vpravo","rules_lhs":"vlevo","rules_hsides":"naho\u0159e a dole","rules_below":"dole","rules_above":"naho\u0159e","rules_void":"\u017e\u00e1dn\u00fd",rules:"Vykreslen\u00ed m\u0159\u00ed\u017eky","frame_all":"v\u0161e","frame_cols":"sloupce","frame_rows":"\u0159\u00e1dky","frame_groups":"oblasti a skupiny sloupc\u016f","frame_none":"\u017e\u00e1dn\u00e1",frame:"R\u00e1me\u010dek tabulky",caption:"Nadpis tabulky","missing_scope":"Skute\u010dn\u011b chcete pokra\u010dovat bez ur\u010den\u00ed oblasti hlavi\u010dky t\u00e9to tabulky? Bez n\u00ed m\u016f\u017ee u n\u011bkter\u00fdch u\u017eivatel\u016f doch\u00e1zet k ur\u010dit\u00fdm probl\u00e9m\u016fm p\u0159i interpretaci a zobrazov\u00e1n\u00ed dat v tabulce.","cell_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det bun\u011bk {$cells}.","row_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det \u0159\u00e1dk\u016f {$rows}.","col_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det sloupc\u016f {$cols}.",colgroup:"Skupina sloupc\u016f",rowgroup:"Skupina \u0159\u00e1dk\u016f",scope:"Hlavi\u010dka pro",tfoot:"Pata tabulky",tbody:"T\u011blo tabulky",thead:"Hlavi\u010dka tabulky","row_all":"Aktualizovat v\u0161echny \u0159\u00e1dky tabulky","row_even":"Aktualizovat sud\u00e9 \u0159\u00e1dky tabulky","row_odd":"Aktualizovat lich\u00e9 \u0159\u00e1dky tabulky","row_row":"Aktualizovat zvolen\u00fd \u0159\u00e1dek","cell_all":"Aktualizovat v\u0161echny bu\u0148ky v tabulce","cell_row":"Aktualizovat v\u0161echny bu\u0148ky v \u0159\u00e1dku","cell_cell":"Aktualizovat zvolenou bu\u0148ku",th:"Z\u00e1hlav\u00ed",td:"Data",summary:"Shrnut\u00ed obsahu",bgimage:"Obr\u00e1zek pozad\u00ed",rtl:"Zprava doleva",ltr:"Zleva doprava",mime:"MIME typ c\u00edle",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",style:"Styl",id:"ID","merge_cells_title":"Spojit bu\u0148ky",bgcolor:"Barva pozad\u00ed",bordercolor:"Barva r\u00e1me\u010dku","align_bottom":"Dol\u016f","align_top":"Nahoru",valign:"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","cell_type":"Typ bu\u0148ky","cell_title":"Vlastnosti bu\u0148ky","row_title":"Vlastnosti \u0159\u00e1dku","align_middle":"Na st\u0159ed","align_right":"Vpravo","align_left":"Vlevo","align_default":"V\u00fdchoz\u00ed",align:"Zarovn\u00e1n\u00ed",border:"R\u00e1me\u010dek",cellpadding:"Odsazen\u00ed obsahu",cellspacing:"Rozestup bun\u011bk",rows:"\u0158\u00e1dky",cols:"Sloupce",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",title:"Vlo\u017eit/upravit tabulku",rowtype:"Typ \u0159\u00e1dku","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","general_tab":"Obecn\u00e9","cell_col":"Aktualizovat v\u0161echny bu\u0148ky ve sloupci"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/da_dlg.js new file mode 100644 index 0000000..13220a5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.table_dlg',{"rules_border":"kant","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"over","rules_void":"void",rules:"Regler","frame_all":"alle","frame_cols":"kolonner","frame_rows":"r\u00e6kker","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabeloverskrift","missing_scope":"Er du sikker p\u00e5, du vil forts\u00e6tte uden at angive forklaring for denne overskriftscelle? Uden forklaring vil v\u00e6re sv\u00e6rt for f.ek.s blinde at l\u00e6se og forst\u00e5 indholdet i tabellen.","cell_limit":"Du har overskredet antallet af tilladte celler p\u00e5 {$cells}.","row_limit":"Du har overskredet antallet af tilladte r\u00e6kker p\u00e5 {$rows}.","col_limit":"Du har overskredet antallet af tilladte kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"R\u00e6kkegruppe",scope:"Forklaring",tfoot:"Tabelfod",tbody:"Tabelkrop",thead:"Tabelhoved","row_all":"Opdater alle r\u00e6kker","row_even":"Opdater lige r\u00e6kker","row_odd":"Opdater ulige r\u00e6kker","row_row":"Opdater aktuelle celle","cell_all":"Opdater alle celler i tabellen","cell_row":"Opdater alle celler i r\u00e6kken","cell_cell":"Opdater aktuelle celle",th:"Hoved",td:"Data",summary:"Beskrivelse",bgimage:"Baggrundsbillede",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",mime:"Destinations-MIME-type",langcode:"Sprogkode",langdir:"Sprogretning",style:"Style",id:"Id","merge_cells_title":"Flet celler",bgcolor:"Baggrundsfarve",bordercolor:"Kantfarve","align_bottom":"Bund","align_top":"Top",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleegenskaber","row_title":"R\u00e6kkeegenskaber","align_middle":"Centreret","align_right":"H\u00f8jre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Kant",cellpadding:"Afstand til celleindhold",cellspacing:"Afstand mellem celler",rows:"R\u00e6kker",cols:"Kolonner",height:"H\u00f8jde",width:"Bredde",title:"Inds\u00e6t/rediger tabel",rowtype:"R\u00e6kke i tabel del","advanced_props":"Avancerede egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Avanceret","general_tab":"Generelt","cell_col":"Opdat\u00e9r alle celler i en s\u00f8jle"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/de_dlg.js new file mode 100644 index 0000000..1498c14 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.table_dlg',{"rules_border":"alle 4 Seiten (Border)","rules_box":"alle 4 Seiten (Box)","rules_vsides":"links und rechts","rules_rhs":"nur rechts","rules_lhs":"nur links","rules_hsides":"oben und unten","rules_below":"nur unten","rules_above":"nur oben","rules_void":"keins",rules:"Gitter","frame_all":"zwischen allen Zellen","frame_cols":"zwischen Spalten","frame_rows":"zwischen Zeilen","frame_groups":"zwischen Gruppen","frame_none":"keine",frame:"Rahmen",caption:"Beschriftung der Tabelle","missing_scope":"Soll f\u00fcr diese \u00dcberschrift wirklich kein Bereich angegeben werden? Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.","cell_limit":"Die maximale Zellenzahl von {$cells} wurde \u00fcberschritten.","row_limit":"Die maximale Zeilenzahl von {$rows} wurde \u00fcberschritten.","col_limit":"Die maximale Spaltenzahl von {$cols} wurde \u00fcberschritten.",colgroup:"Horizontal gruppieren",rowgroup:"Vertikal gruppieren",scope:"Bezug",tfoot:"Tabellenfu\u00df",tbody:"Tabelleninhalt",thead:"Tabellenkopf","row_all":"Alle Zeilen ver\u00e4ndern","row_even":"Gerade Zeilen ver\u00e4ndern","row_odd":"Ungerade Zeilen ver\u00e4ndern","row_row":"Diese Zeile ver\u00e4ndern","cell_all":"Alle Zellen der Tabelle ver\u00e4ndern","cell_row":"Alle Zellen in dieser Zeile ver\u00e4ndern","cell_cell":"Diese Zelle ver\u00e4ndern",th:"\u00dcberschrift",td:"Textzelle",summary:"Zusammenfassung",bgimage:"Hintergrundbild",rtl:"Rechts nach links",ltr:"Links nach rechts",mime:"MIME-Type des Inhalts",langcode:"Sprachcode",langdir:"Schriftrichtung",style:"Format",id:"ID","merge_cells_title":"Zellen vereinen",bgcolor:"Hintergrundfarbe",bordercolor:"Rahmenfarbe","align_bottom":"Unten","align_top":"Oben",valign:"Vertikale Ausrichtung","cell_type":"Zellentyp","cell_title":"Eigenschaften der Zelle","row_title":"Eigenschaften der Zeile","align_middle":"Mittig","align_right":"Rechts","align_left":"Links","align_default":"Standard",align:"Ausrichtung",border:"Rahmen",cellpadding:"Abstand innerhalb der Zellen",cellspacing:"Zellenabstand",rows:"Zeilen",cols:"Spalten",height:"H\u00f6he",width:"Breite",title:"Tabelle einf\u00fcgen/bearbeiten",rowtype:"Gruppierung","advanced_props":"Erweiterte Einstellungen","general_props":"Allgemeine Einstellungen","advanced_tab":"Erweitert","general_tab":"Allgemein","cell_col":"Alle Zellen in dieser Spalte aktualisieren"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..463e09e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/es_dlg.js new file mode 100644 index 0000000..f717ba7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/es_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('es.table_dlg',{ +general_tab:"General", +advanced_tab:"Avanzado", +general_props:"Propiedades generales", +advanced_props:"Propiedades avanzadas", +rowtype:"Tipo de fila", +title:"Insertar/Modificar tabla", +width:"Ancho", +height:"Alto", +cols:"Cols", +rows:"Filas", +cellspacing:"Espaciado de celda", +cellpadding:"Relleno de celda", +border:"Borde", +align:"Alineaci\u00F3n", +align_default:"Predet.", +align_left:"Izquierda", +align_right:"Derecha", +align_middle:"Centrado", +row_title:"Propiedades de la fila", +cell_title:"Propiedades de la celda", +cell_type:"Tipo de celda", +valign:"Alineaci\u00F3n vertical", +align_top:"Arriba", +align_bottom:"Debajo", +bordercolor:"Color del borde", +bgcolor:"Color de fondo", +merge_cells_title:"Vincular celdas", +id:"Id", +style:"Estilo", +langdir:"Direcci\u00F3n del lenguaje", +langcode:"C\u00F3digo del lenguaje", +mime:"Tipo MIME", +ltr:"Izquierda a derecha", +rtl:"Derecha a izquierda", +bgimage:"Imagen de fondo", +summary:"Resumen", +td:"Datos", +th:"Encabezado", +cell_cell:"Actualizar celda actual", +cell_row:"Actualizar todas las celdas en la fila", +cell_all:"Actualizar todas las celdas en la tabla", +row_row:"Actualizar fila actual", +row_odd:"Actualizar filas impares", +row_even:"Actualizar filas pares", +row_all:"Actualizar todas las filas", +thead:"Encabezado de la tabla", +tbody:"Cuerpo de la tabla", +tfoot:"Pie de la tabla", +scope:"Alcance", +rowgroup:"Grupo de filas", +colgroup:"Grupo de columnas", +col_limit:"Ha superado el n\u00FAmero m\u00E1ximo de columnas: {$cols}.", +row_limit:"Ha superado el n\u00FAmero m\u00E1ximo de filas: {$rows}.", +cell_limit:"Ha superado el n\u00FAmero m\u00E1ximo de celdas: {$cells}.", +missing_scope:"\u00BFEst\u00E1 seguro que desea continuar sin especificar el alcance del encabezado de celda? Sin \u00E9l podr\u00EDa ser dificultoso para algunos usuarios entender el contenido o los datos mostrados en la tabla.", +caption:"Subt\u00EDtulo de la tabla", +frame:"Recuadro", +frame_none:"ninguno", +frame_groups:"grupos", +frame_rows:"filas", +frame_cols:"cols", +frame_all:"todos", +rules:"Reglas", +rules_void:"vac\u00EDo", +rules_above:"encima", +rules_below:"debajo", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fi_dlg.js new file mode 100644 index 0000000..87ed836 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.table_dlg',{"rules_border":"kehys","rules_box":"laatikko","rules_vsides":"pystysuorat reunat","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"vaakasuorat reunat","rules_below":"alapuoli","rules_above":"yl\u00e4puoli","rules_void":"tyhj\u00e4",rules:"S\u00e4\u00e4nn\u00f6t","frame_all":"kaikki","frame_cols":"sarakkeet","frame_rows":"rivit","frame_groups":"ryhm\u00e4t","frame_none":"ei mit\u00e4\u00e4n",frame:"kehys",caption:"Taulukon seloste","missing_scope":"Haluatko varmasti jatkaa m\u00e4\u00e4ritt\u00e4m\u00e4tt\u00e4 tilaa t\u00e4lle taulukon otsakesolulle? Ilman sit\u00e4 joidenkin k\u00e4ytt\u00e4jien voi olla vaikea ymm\u00e4rt\u00e4\u00e4 taulukon sis\u00e4lt\u00e4m\u00e4\u00e4 informaatiota.","cell_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n soluja {$cells}.","row_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n rivej\u00e4 {$rows}.","col_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n sarakkeita {$cols}.",colgroup:"Sarake ryhm\u00e4",rowgroup:"Rivi ryhm\u00e4",scope:"Tila",tfoot:"Taulukon alaosa",tbody:"Taulukon runko",thead:"Taulukon otsake","row_all":"P\u00e4ivit\u00e4 kaikki taulukon rivit","row_even":"P\u00e4ivit\u00e4 taulukon parilliset rivit","row_odd":"P\u00e4ivit\u00e4 taulukon parittomat rivit","row_row":"P\u00e4ivit\u00e4 rivi","cell_all":"P\u00e4ivit\u00e4 kaikki taulukon solut","cell_row":"P\u00e4ivit\u00e4 kaikki rivin solut","cell_cell":"P\u00e4ivit\u00e4 solu",th:"Otsake",td:"Tietue",summary:"Yhteenveto",bgimage:"Taustakuva",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",mime:"Kohteen MIME-tyyppi",langcode:"Kielen koodi",langdir:"Kielen suunta",style:"Tyyli",id:"Id","merge_cells_title":"Yhdist\u00e4 taulukon solut",bgcolor:"Taustan v\u00e4ri",bordercolor:"Kehyksen v\u00e4ri","align_bottom":"Alas","align_top":"Yl\u00f6s",valign:"Pystysuunnan tasaus","cell_type":"Solun tyyppi","cell_title":"Taulukon solun asetukset","row_title":"Taulukon rivin asetukset","align_middle":"Keskitetty","align_right":"Oikea","align_left":"Vasen","align_default":"Oletus",align:"Tasaus",border:"Kehys",cellpadding:"Solun tyhj\u00e4 tila",cellspacing:"Solun v\u00e4li",rows:"Rivit",cols:"Sarakkeet",height:"Korkeus",width:"Leveys",title:"Lis\u00e4\u00e4/muokkaa taulukkoa",rowtype:"Rivi taulukon osassa","advanced_props":"Edistyneet asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","general_tab":"Yleiset","cell_col":"P\u00e4ivit\u00e4 kaikki sarakkeen solut"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fr_dlg.js new file mode 100644 index 0000000..9f9488a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.table_dlg',{"rules_border":"bordure","rules_box":"bo\u00eete","rules_vsides":"verticales","rules_rhs":"\u00e0 droite","rules_lhs":"\u00e0 gauche","rules_hsides":"horizontales","rules_below":"au-dessous","rules_above":"au-dessus","rules_void":"aucune",rules:"R\u00e8gles","frame_all":"tous","frame_cols":"colonnes","frame_rows":"lignes","frame_groups":"groupe","frame_none":"aucun",frame:"Cadre",caption:"Afficher la l\u00e9gende du tableau","missing_scope":"\u00cates-vous s\u00fbr de vouloir continuer sans sp\u00e9cifier de port\u00e9e pour cette cellule de titre ? Sans port\u00e9e, cela peut \u00eatre difficile pour certains utilisateurs de comprendre le contenu ou les donn\u00e9es affich\u00e9es dans le tableau.","cell_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de cellules ({$cells}).","row_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de lignes ({$rows}).","col_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de colonnes ({$cols}).",colgroup:"Groupe de colonnes",rowgroup:"Groupe de lignes",scope:"Port\u00e9e",tfoot:"Pied de tableau",tbody:"Corps de tableau",thead:"En-t\u00eates de tableau","row_all":"Mettre \u00e0 jour toutes les lignes du tableau","row_even":"Mettre \u00e0 jour les lignes paires","row_odd":"Mettre \u00e0 jour les lignes impaires","row_row":"Mettre \u00e0 jour la ligne courante","cell_all":"Mettre \u00e0 jour toutes les cellules du tableau","cell_row":"Mettre \u00e0 jour toutes les cellules de la ligne","cell_cell":"Mettre \u00e0 jour la cellule courante",th:"Titre",td:"Donn\u00e9es",summary:"R\u00e9sum\u00e9",bgimage:"Image de fond",rtl:"de droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",mime:"Type MIME de la cible",langcode:"Code de la langue",langdir:"Sens de lecture",style:"Style",id:"Id","merge_cells_title":"Fusionner les cellules",bgcolor:"Couleur du fond",bordercolor:"Couleur de la bordure","align_bottom":"Bas","align_top":"Haut",valign:"Alignement vertical","cell_type":"Type de cellule","cell_title":"Propri\u00e9t\u00e9s de la cellule","row_title":"Propri\u00e9t\u00e9s de la ligne","align_middle":"Centr\u00e9","align_right":"Droite","align_left":"Gauche","align_default":"Par d\u00e9faut",align:"Alignement",border:"Bordure",cellpadding:"Espacement dans les cellules",cellspacing:"Espacement entre les cellules",rows:"Lignes",cols:"Colonnes",height:"Hauteur",width:"Largeur",title:"Ins\u00e9rer / modifier un tableau",rowtype:"Type de ligne","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","general_tab":"G\u00e9n\u00e9ral","cell_col":"Mettre \u00e0 jour toutes les cellules de la colonne"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/he_dlg.js new file mode 100644 index 0000000..25371ea --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.table_dlg',{"rules_border":"\u05d2\u05d1\u05d5\u05dc","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u05de\u05ea\u05d7\u05ea","rules_above":"\u05de\u05e2\u05dc","rules_void":"void",rules:"\u05d7\u05d5\u05e7\u05d9\u05dd","frame_all":"\u05d4\u05db\u05d5\u05dc","frame_cols":"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea","frame_rows":"\u05e9\u05d5\u05e8\u05d5\u05ea","frame_groups":"\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea","frame_none":"\u05dc\u05dc\u05d0",frame:"Frame",caption:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4 \u05e9\u05dc {$cells}.","row_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05e9\u05dc {$rows}.","col_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05de\u05d5\u05d3\u05d5\u05ea \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"\u05e9\u05d5\u05e8\u05d4 \u05ea\u05d7\u05ea\u05d9\u05ea",tbody:"\u05e9\u05d5\u05e8\u05d4 \u05e8\u05d2\u05d9\u05dc\u05d4",thead:"\u05e9\u05d5\u05e8\u05ea \u05db\u05d5\u05ea\u05e8\u05ea","row_all":"\u05e2\u05d3\u05db\u05d5\u05df\u05db\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_even":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_odd":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d0\u05d9-\u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d4 \u05e0\u05d5\u05db\u05d7\u05d9\u05ea","cell_all":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05d8\u05d1\u05dc\u05d4","cell_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05e9\u05d5\u05e8\u05d4","cell_cell":"\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05d0 \u05e0\u05d5\u05db\u05d7\u05d9",th:"\u05db\u05d5\u05ea\u05e8\u05ea",td:"\u05ea\u05d0 \u05de\u05d9\u05d3\u05e2",summary:"\u05ea\u05de\u05e6\u05d9\u05ea",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",mime:"Target MIME type",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",id:"Id","merge_cells_title":"\u05d0\u05d7\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4",bgcolor:"\u05e6\u05d1\u05e2 \u05d4\u05e8\u05e7\u05e2",bordercolor:"\u05e6\u05d1\u05e2 \u05d4\u05d2\u05d1\u05d5\u05dc","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df",valign:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","cell_type":"\u05e1\u05d2\u05e0\u05d5\u05df \u05d4\u05ea\u05d0","cell_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","align_middle":"\u05d0\u05de\u05e6\u05e2","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_default":"Default",align:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9",border:"\u05d2\u05d1\u05d5\u05dc",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"\u05e9\u05d5\u05e8\u05d5\u05ea",cols:"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4",rowtype:"\u05e1\u05d5\u05d2 \u05d4\u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","general_tab":"\u05db\u05dc\u05dc\u05d9","cell_col":"\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d5\u05e8"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/hu_dlg.js new file mode 100644 index 0000000..1dd89fd --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.table_dlg',{"rules_border":"keret","rules_box":"doboz","rules_vsides":"f. oldalak","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"v. oldalak","rules_below":"alatta","rules_above":"f\u00f6l\u00f6tte","rules_void":"sehol/\u00fcres",rules:"Vonalak","frame_all":"mind","frame_cols":"oszlopok","frame_rows":"sorok","frame_groups":"csoportok","frame_none":"nincs",frame:"Keret",caption:"C\u00edmsor","missing_scope":"Biztosan folytatni akarja an\u00e9lk\u00fcl, hogy hat\u00f3k\u00f6rt adna ennek a fejl\u00e9ccell\u00e1nak? Korl\u00e1toz\u00e1sokkal \u00e9l\u0151k sz\u00e1m\u00e1ra neh\u00e9z lesz meg\u00e9rteni a t\u00e1bl\u00e1zat tartalm\u00e1t.","cell_limit":"T\u00fall\u00e9pte a maxim\u00e1lis cellasz\u00e1mot, ami {$cells}.","row_limit":"T\u00fall\u00e9pte a maxim\u00e1lis sorsz\u00e1mot, ami {$rows}.","col_limit":"T\u00fall\u00e9pte a maxim\u00e1lis oszlopsz\u00e1mot, ami {$cols}.",colgroup:"Oszlop csoport",rowgroup:"Sor csoport",scope:"Hat\u00f3k\u00f6r",tfoot:"T\u00e1bl\u00e1zat l\u00e1bl\u00e9c",tbody:"T\u00e1bl\u00e1zat tartalom",thead:"T\u00e1bl\u00e1zat fejl\u00e9c","row_all":"Minden sor friss\u00edt\u00e9se","row_even":"P\u00e1ros sorok friss\u00edt\u00e9se","row_odd":"P\u00e1ratlan sorok friss\u00edt\u00e9se","row_row":"Sor friss\u00edt\u00e9se","cell_all":"T\u00e1bl\u00e1zat \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_row":"Sor \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_cell":"Cella friss\u00edt\u00e9se",th:"Fejl\u00e9c",td:"Adat",summary:"\u00d6sszegz\u00e9s",bgimage:"H\u00e1tt\u00e9rk\u00e9p",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",mime:"C\u00e9l MIME t\u00edpus",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1ny",style:"St\u00edlus",id:"ID","merge_cells_title":"Cell\u00e1k Egyes\u00edt\u00e9se",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bordercolor:"Keretsz\u00edn","align_bottom":"Le","align_top":"Fel",valign:"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","cell_type":"Cellat\u00edpus","cell_title":"Cella tulajdons\u00e1gai","row_title":"Sor tulajdons\u00e1gai","align_middle":"K\u00f6z\u00e9pre","align_right":"Jobbra","align_left":"Balra","align_default":"Alap\u00e9rtelmezett",align:"Igaz\u00edt\u00e1s",border:"Keret",cellpadding:"Cella bels\u0151 marg\u00f3",cellspacing:"Cella t\u00e1vols\u00e1g",rows:"Sorok",cols:"Oszlopok",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",title:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se",rowtype:"Sor a t\u00e1bl\u00e1ban","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","general_tab":"\u00c1ltal\u00e1nos","cell_col":"\u00d6sszes cella friss\u00edt\u00e9se az oszlopban"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/it_dlg.js new file mode 100644 index 0000000..2a847ed --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.table_dlg',{"rules_border":"bordo","rules_box":"box","rules_vsides":"lato vert.","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"lato orizz.","rules_below":"sotto","rules_above":"sopra","rules_void":"vuoto",rules:"Regole","frame_all":"tutte","frame_cols":"colonne","frame_rows":"righe","frame_groups":"gruppi","frame_none":"nessuna",frame:"Cornice",caption:"Didascalia tabella","missing_scope":"Sicuro di proseguire senza aver specificato uno scope per l\'intestazione di questa tabella? Senza di esso, potrebbe essere difficoltoso per alcuni utenti con disabilit\u00e0 capire il contenuto o i dati mostrati nella tabella.","cell_limit":"Superato il numero massimo di celle di {$cells}.","row_limit":"Superato il numero massimo di righe di {$rows}.","col_limit":"Superato il numero massimo di colonne di {$cols}.",colgroup:"Gruppo colonna",rowgroup:"Gruppo riga",scope:"Scope",tfoot:"Pedice tabella",tbody:"Corpo tabella",thead:"Intestazione tabella","row_all":"Update tutte le righe della tabella","row_even":"Aggiorna righe pari della tabella","row_odd":"Aggiorna righe dispari della tabella","row_row":"Aggiorna riga corrente","cell_all":"Aggiorna tutte le celle della tabella","cell_row":"Aggiorna tutte le celle della riga","cell_cell":"Aggiorna cella corrente",th:"Intestazione",td:"Data",summary:"Sommario",bgimage:"Immagine sfondo",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",mime:"Tipo MIME del target",langcode:"Lingua",langdir:"Direzione testo",style:"Stile",id:"Id","merge_cells_title":"Unisci celle",bgcolor:"Colore sfondo",bordercolor:"Colore bordo","align_bottom":"In basso","align_top":"In alto",valign:"Allineamento verticale","cell_type":"Tipo cella","cell_title":"Propriet\u00e0 cella","row_title":"Propriet\u00e0 riga","align_middle":"Centra","align_right":"A destra","align_left":"A sinistra","align_default":"Predefinito",align:"Allineamento",border:"Bordo",cellpadding:"Padding celle",cellspacing:"Spaziatura celle",rows:"Righe",cols:"Colonne",height:"Altezza",width:"Larghezza",title:"Inserisci/Modifica tabella",rowtype:"Riga in una parte di tabella","advanced_props":"Propriet\u00e0 avanzate","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","general_tab":"Generale","cell_col":"Aggiorna tutte le celle della colonna"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ja_dlg.js new file mode 100644 index 0000000..ad33586 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.table_dlg',{"rules_border":"\u67a0\u7dda(\u4e0a\u4e0b\u5de6\u53f3)","rules_box":"\u30dc\u30c3\u30af\u30b9(\u4e0a\u4e0b\u5de6\u53f3)","rules_vsides":"\u5de6\u53f3\u306e\u7e26\u7dda","rules_rhs":"\u53f3\u306e\u7e26\u7dda","rules_lhs":"\u5de6\u306e\u7e26\u7dda","rules_hsides":"\u4e0a\u4e0b\u306e\u6a2a\u7dda","rules_below":"\u4e0b\u306e\u6a2a\u7dda","rules_above":"\u4e0a\u306e\u6a2a\u7dda","rules_void":"\u306a\u3057",rules:"\u8868\u306e\u5916\u67a0","frame_all":"\u3059\u3079\u3066","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u30b0\u30eb\u30fc\u30d7\u6bce","frame_none":"\u306a\u3057",frame:"\u30bb\u30eb\u306e\u67a0",caption:"\u8868\u306e\u898b\u51fa\u3057","missing_scope":"\u3053\u306e\u8868\u306e\u30d8\u30c3\u30c0\u30fc\u306e\u30bb\u30eb\u306e\u7bc4\u56f2\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u3067\u672c\u5f53\u306b\u7d9a\u3051\u307e\u3059\u304b? \u3053\u306e\u307e\u307e\u3067\u306f\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u304c\u8868\u306e\u5185\u5bb9\u3084\u8868\u793a\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3092\u7406\u89e3\u3059\u308b\u306e\u304c\u56f0\u96e3\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","cell_limit":"\u30bb\u30eb\u306e\u6700\u5927\u6570\u306e${cells}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","row_limit":"\u884c\u306e\u6700\u5927\u6570\u306e${rows}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","col_limit":"\u5217\u306e\u6700\u5927\u6570\u306e${cols}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002",colgroup:"\u5217\u30b0\u30eb\u30fc\u30d7",rowgroup:"\u884c\u30b0\u30eb\u30fc\u30d7",scope:"\u30b9\u30b3\u30fc\u30d7",tfoot:"\u8868\u306e\u30d5\u30c3\u30bf\u30fc",tbody:"\u8868\u306e\u30dc\u30c7\u30a3",thead:"\u8868\u306e\u30d8\u30c3\u30c0\u30fc","row_all":"\u3059\u3079\u3066\u306e\u884c\u3092\u66f4\u65b0","row_even":"\u5076\u6570\u884c\u3092\u66f4\u65b0","row_odd":"\u5947\u6570\u884c\u3092\u66f4\u65b0","row_row":"\u9078\u629e\u3057\u3066\u3044\u308b\u884c\u3092\u66f4\u65b0","cell_all":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_row":"\u884c\u5185\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_cell":"\u9078\u629e\u3057\u3066\u3044\u308b\u30bb\u30eb\u3092\u66f4\u65b0",th:"\u30d8\u30c3\u30c0\u30fc",td:"\u30c7\u30fc\u30bf",summary:"\u30b5\u30de\u30ea\u30fc",bgimage:"\u80cc\u666f\u306e\u753b\u50cf",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","merge_cells_title":"\u30bb\u30eb\u3092\u7d50\u5408",bgcolor:"\u80cc\u666f\u306e\u8272",bordercolor:"\u67a0\u7dda\u306e\u8272","align_bottom":"\u4e0b\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048",valign:"\u5782\u76f4\u65b9\u5411\u306e\u914d\u7f6e","cell_type":"\u30bb\u30eb\u306e\u7a2e\u985e","cell_title":"\u30bb\u30eb\u306e\u5c5e\u6027","row_title":"\u884c\u306e\u5c5e\u6027","align_middle":"\u4e2d\u592e\u63c3\u3048","align_right":"\u53f3\u63c3\u3048","align_left":"\u5de6\u63c3\u3048","align_default":"\u521d\u671f\u72b6\u614b",align:"\u914d\u7f6e",border:"\u67a0\u7dda",cellpadding:"\u30bb\u30eb\u306e\u30d1\u30c7\u30a3\u30f3\u30b0(cellpadding)",cellspacing:"\u30bb\u30eb\u306e\u9593\u9694(cellspacing)",rows:"\u884c",cols:"\u5217",height:"\u9ad8\u3055",width:"\u5e45",title:"\u8868\u306e\u633f\u5165\u3084\u7de8\u96c6",rowtype:"\u884c","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","general_props":"\u4e00\u822c\u7684\u306a\u5c5e\u6027","advanced_tab":"\u9ad8\u5ea6","general_tab":"\u4e00\u822c","cell_col":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/nl_dlg.js new file mode 100644 index 0000000..ebc25e7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.table_dlg',{"rules_border":"Rand","rules_box":"Box","rules_vsides":"Verticale zijden","rules_rhs":"Rechterzijkant","rules_lhs":"Linkerzijkant","rules_hsides":"Horizontale zijden","rules_below":"Onder","rules_above":"Boven","rules_void":"Geen",rules:"Hulplijnen","frame_all":"Alles","frame_cols":"Kolommen","frame_rows":"Rijen","frame_groups":"Groepen","frame_none":"Geen",frame:"Frame",caption:"Tabelbeschrijving","missing_scope":"Weet u zeker dat u door wilt gaan met het toewijzen van een kop zonder een bereik op te geven? Mensen met een visuele handicap kunnen hierdoor waarschijnlijk slecht bij de gegevens.","cell_limit":"U heeft het maximale aantal cellen van {$cells} overschreden.","row_limit":"U heeft hebt het maximale aantal rijen van {$rows} overschreden.","col_limit":"U heeft het maximale aantal kolommen van {$cols} overschreden.",colgroup:"Kolomgroep",rowgroup:"Rijgroep",scope:"Bereik",tfoot:"Tabelvoet",tbody:"Tabellichaam",thead:"Tabelkop","row_all":"Alle rijen bijwerken","row_even":"Even rijen bijwerken","row_odd":"Oneven rijen bijwerken","row_row":"Huidige rij bijwerken","cell_all":"Alle cellen in tabel bijwerken","cell_row":"Alle cellen in rij bijwerken","cell_cell":"Huidige cel bijwerken",th:"Kop",td:"Gegevens",summary:"Samenvatting",bgimage:"Achtergrondafbeelding",rtl:"Van rechts naar links",ltr:"Van links naar rechts",mime:"Doel MIME type",langcode:"Taalcode",langdir:"Taalrichting",style:"Stijl",id:"Id","merge_cells_title":"Cellen samenvoegen",bgcolor:"Achtergrondkleur",bordercolor:"Randkleur","align_bottom":"Onder","align_top":"Boven",valign:"Verticale uitlijning","cell_type":"Celtype","cell_title":"Celeigenschappen","row_title":"Rij-eigenschappen","align_middle":"Centreren","align_right":"Rechts","align_left":"Links","align_default":"Standaard",align:"Uitlijning",border:"Rand",cellpadding:"Ruimte in cel",cellspacing:"Ruimte om cel",rows:"Rijen",cols:"Kolommen",height:"Hoogte",width:"Breedte",title:"Tabel invoegen/bewerken",rowtype:"Rijtype","advanced_props":"Geavanceerde eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","general_tab":"Algemeen","cell_col":"Alle cellen in de kolom bijwerken"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pl_dlg.js new file mode 100644 index 0000000..8bbe7c8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.table_dlg',{"rules_border":"granica","rules_box":"ramka","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"pod","rules_above":"nad","rules_void":"void",rules:"Prowadnice","frame_all":"wszystkie","frame_cols":"kolumny","frame_rows":"wiersze","frame_groups":"grupy","frame_none":"brak",frame:"Ramka",caption:"Nag\u0142\u00f3wek tabeli","missing_scope":"Jeste\u015b pewny \u017ce chcesz kontynuowa\u0107 bez definiowania zasi\u0119gu dla kom\u00f3rki tabeli. Bez niej, mo\u017ce by\u0107 trudne dla niekt\u00f3rych u\u017cytkownik\u00f3w zrozuminie zawarto\u015bci albo danych wy\u015bwietlanych poza tabel\u0105.","cell_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kom\u00f3rek kt\u00f3ra wynosi {$cells}.","row_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 wierszy kt\u00f3ra wynosi {$rows}.","col_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kolumn kt\u00f3ra wynosi {$cols}.",colgroup:"Grupa kolumn",rowgroup:"Grupa wierszy",scope:"Zakres",tfoot:"Stopka tabeli",tbody:"Cia\u0142o tabeli",thead:"Nag\u0142\u00f3wek tabeli","row_all":"Zmie\u0144 wszystkie wiersze","row_even":"Zmie\u0144 parzyste wiersze","row_odd":"Zmie\u0144 nieparzyste wiersze","row_row":"Zmie\u0144 aktualny wiersz","cell_all":"Zmie\u0144 wszytkie kom\u00f3rki w tabeli","cell_row":"Zmie\u0144 wszytkie kom\u00f3rki w wierszu","cell_cell":"Zmie\u0144 aktualn\u0105 kom\u00f3rk\u0119",th:"Nag\u0142owek",td:"Dane",summary:"Podsumowanie",bgimage:"Obrazek t\u0142a",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",mime:"Docelowy typ MIME",langcode:"Kod j\u0119zyka",langdir:"Kierunek czytania tekstu",style:"Styl",id:"Id","merge_cells_title":"Po\u0142\u0105cz kom\u00f3rki",bgcolor:"Kolor t\u0142a",bordercolor:"Kolor ramki","align_bottom":"D\u00f3\u0142","align_top":"G\u00f3ra",valign:"Pionowe wyr\u00f3wnanie","cell_type":"Typ kom\u00f3rki","cell_title":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_title":"W\u0142a\u015bciwo\u015bci wiersza","align_middle":"\u015arodek","align_right":"Prawy","align_left":"Lewy","align_default":"Domy\u015blnie",align:"Wyr\u00f3wnanie",border:"Ramka",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Wiersze",cols:"Kolumny",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",title:"Wklej/Zmie\u0144 tabel\u0119",rowtype:"Wiersz w cz\u0119\u015bci tabeli","advanced_props":"Zaawansowane w\u0142a\u015bciwo\u015bci","general_props":"G\u0142\u00f3wne w\u0142a\u015bciwo\u015bci","advanced_tab":"Zaawansowane","general_tab":"G\u0142\u00f3wne","cell_col":"Zaktualizuj wszystkie kom\u00f3rki w kolumnie"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pt_dlg.js new file mode 100644 index 0000000..fb54400 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.table_dlg',{"rules_border":"Limites","rules_box":"Box","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"abaixo","rules_above":"acima","rules_void":"void",rules:"Regras","frame_all":"Todos","frame_cols":"colunas","frame_rows":"Linhas","frame_groups":"Grupos","frame_none":"Nenhum",frame:"Frame",caption:"T\u00edtulo da tabela","missing_scope":"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00e9lula? (Isso poder\u00e1 causar dificuldades a usu\u00e1rios deficientes)","cell_limit":"Excedeu o n\u00famero m\u00e1ximo de c\u00e9lulas de {$cells}.","row_limit":"Excedeu o n\u00famero m\u00e1ximo de linhas de {$rows}.","col_limit":"Excedeu o n\u00famero m\u00e1ximo de colunas de {$cols}.",colgroup:"Grupo colunas",rowgroup:"Grupo linhas",scope:"Alcance",tfoot:"Rodap\u00e9 da tabela",tbody:"Corpo da tabela",thead:"Topo da tabela","row_all":"Atualizar todas as linhas","row_even":"Atualizar linhas pares","row_odd":"Atualizar linhas \u00edmpares","row_row":"Atualizar esta linha","cell_all":"Atualizar todas as c\u00e9lulas na tabela","cell_row":"Atualizar todas as c\u00e9lulas na linha","cell_cell":"Atualizar esta c\u00e9lula",th:"Campo",td:"Dados",summary:"Sum\u00e1rio",bgimage:"Imagem de fundo",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",mime:"MIME alvo",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",style:"Estilo",id:"Id","merge_cells_title":"Unir c\u00e9lulas",bgcolor:"Cor de fundo",bordercolor:"Cor dos limites","align_bottom":"Abaixo","align_top":"Topo",valign:"Alinha. vert.","cell_type":"Tipo c\u00e9l.","cell_title":"Propriedades de c\u00e9lulas","row_title":"Propriedades de linhas","align_middle":"Centro","align_right":"Direita","align_left":"Esquerda","align_default":"Padr\u00e3o",align:"Alinha.",border:"Limites",cellpadding:"Enchimento da C\u00e9lula",cellspacing:"Espa\u00e7amento da C\u00e9lula",rows:"Linhas",cols:"Colunas",height:"Altura",width:"Largura",title:"Inserir/modificar tabela",rowtype:"Linha na parte da tabela","advanced_props":"Propriedades avan\u00e7adas","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","general_tab":"Geral","cell_col":"Atualizar todas as c\u00e9lulas na coluna"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ru_dlg.js new file mode 100644 index 0000000..3bd8815 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0435","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u043a\u0438","frame_rows":"\u0440\u044f\u0434\u044b","frame_groups":"\u0433\u0440\u0443\u043f\u043f\u044b","frame_none":"\u043d\u0435\u0442",frame:"\u041a\u0430\u0434\u0440",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","missing_scope":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0437\u0430\u0433\u043b\u043e\u043b\u0432\u043a\u0430? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.","cell_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u044f\u0447\u0435\u0435\u043a.","row_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u0441\u0442\u0440\u043e\u043a.","col_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u043a\u043e\u043b\u043e\u043d\u043e\u043a.",colgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a",scope:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",tfoot:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435",tbody:"\u0422\u0435\u043b\u043e",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u044b\u0435",summary:"\u041e\u0431\u0449\u0435\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","merge_cells_title":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",bgcolor:"\u0426\u0432\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0438",bordercolor:"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442. \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","cell_type":"\u0422\u0438\u043f","cell_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",rows:"\u0421\u0442\u0440\u043e\u043a\u0438",cols:"\u0421\u0442\u043e\u043b\u0431\u0446\u044b",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b",rowtype:"\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","general_tab":"\u041e\u0431\u0449\u0435\u0435","cell_col":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/sv_dlg.js new file mode 100644 index 0000000..d058bcb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.table_dlg',{"rules_border":"kant","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"\u00f6ver","rules_void":"void",rules:"Regler","frame_all":"alla","frame_cols":"kolumner ","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ram",caption:"\u00d6verskrift","missing_scope":"\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta utan att ange en omfattning, denna underl\u00e4ttar f\u00f6r icke-grafiska webbl\u00e4sare.","cell_limit":"Du kan inte skapa en tabell med fler \u00e4n {$cells} celler.","row_limit":"Du kan inte ange fler \u00e4n {$rows} rader.","col_limit":"Du kan inte ange fler \u00e4n {$cols} kolumner.",colgroup:"Kolumngrupp",rowgroup:"Radgrupp",scope:"Omfattning",tfoot:"tabellfot",tbody:"tabellkropp",thead:"tabellhuvud","row_all":"Uppdatera alla rader i tabellen","row_even":"Uppdatera j\u00e4mna rader i tabellen","row_odd":"Uppdatera udda rader i tabellen","row_row":"Uppdatera nuvarande rad","cell_all":"Uppdatera alla celler i tabellen","cell_row":"Uppdatera alla celler i raden","cell_cell":"Uppdatera nuvarande cell",th:"Huvud",td:"Data",summary:"Sammanfattning",bgimage:"Bakgrundsbild",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",mime:"Target MIME type",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",style:"Stil",id:"Id","merge_cells_title":"Sammanfoga celler",bgcolor:"Bakgrundsf\u00e4rg",bordercolor:"Ramf\u00e4rg","align_bottom":"Botten","align_top":"Toppen",valign:"Vertikal justering","cell_type":"Celltyp","cell_title":"Tabellcellsinst\u00e4llningar","row_title":"Tabellradsinst\u00e4llningar","align_middle":"Mitten","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_default":"Standard",align:"Justering",border:"Ram",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rader",cols:"Kolumner",height:"H\u00f6jd",width:"Bredd",title:"Infoga/redigera ny tabell",rowtype:"Radtyp","advanced_props":"Avancerade inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","general_tab":"Generellt","cell_col":"Uppdatera alla celler i kolumn"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/tr_dlg.js new file mode 100644 index 0000000..28020cf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.table_dlg',{"rules_border":"kenarl\u0131k","rules_box":"kutu","rules_vsides":"dikey kenarlar","rules_rhs":"sa\u011f yatay kenarlar","rules_lhs":"sol yatay kenarlar","rules_hsides":"yatay kenarlar","rules_below":"alt\u0131nda","rules_above":"\u00fcst\u00fcnde","rules_void":"yok",rules:"\u00c7izgiler","frame_all":"t\u00fcm\u00fc","frame_cols":"s\u00fctunlar","frame_rows":"sat\u0131rlar","frame_groups":"gruplar","frame_none":"hi\u00e7biri",frame:"\u00c7er\u00e7eve",caption:"Tablo ba\u015fl\u0131\u011f\u0131","missing_scope":"Tablo ba\u015fl\u0131k h\u00fccresi i\u00e7in bir kapsam belirlemeden devam etmek istedi\u011finize emin misiniz? Bu de\u011fer olmadan, engelli kullan\u0131c\u0131lar tabloda g\u00f6sterilen verileri ve i\u00e7eri\u011fi anlamas\u0131 zordur.","cell_limit":"Maksimum h\u00fccre say\u0131s\u0131 ($cells) a\u015f\u0131ld\u0131.","row_limit":"Maksimum sat\u0131r say\u0131s\u0131 ($rows) a\u015f\u0131ld\u0131.","col_limit":"Maksimum s\u00fctun say\u0131s\u0131 ($cols) a\u015f\u0131ld\u0131.",colgroup:"S\u00fctun Grubu",rowgroup:"Sat\u0131r Grubu",scope:"Kapsam",tfoot:"Tablo Alt\u0131",tbody:"Tablo G\u00f6vdesi",thead:"Tablo Ba\u015fl\u0131\u011f\u0131","row_all":"Tablodaki t\u00fcm sat\u0131rlar\u0131 g\u00fcncelle","row_even":"Tablodaki \u00e7ift nolu sat\u0131rlar\u0131 g\u00fcncelle","row_odd":"Tablodaki tek nolu sat\u0131rlar\u0131 g\u00fcncelle","row_row":"Se\u00e7ili sat\u0131r\u0131 g\u00fcncelle","cell_all":"Tablodaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_row":"Sat\u0131rdaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_cell":"Se\u00e7ili h\u00fccreleri g\u00fcncelle",th:"Ba\u015fl\u0131k",td:"Veri",summary:"\u00d6zet",bgimage:"Arkaplan resmi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",mime:"Hedef MIME tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",style:"Stil",id:"Id","merge_cells_title":"Tablo h\u00fccrelerini birle\u015ftir",bgcolor:"Arkaplan rengi",bordercolor:"Kenarl\u0131k rengi","align_bottom":"Alt","align_top":"\u00dcst",valign:"Dikey hizalama","cell_type":"H\u00fccre tipi","cell_title":"Tablo h\u00fccre \u00f6zellikleri","row_title":"Tablo sat\u0131r \u00f6zellikleri","align_middle":"Orta","align_right":"Sa\u011f","align_left":"Sol","align_default":"Varsay\u0131lan",align:"Hizalama",border:"Kenarl\u0131k",cellpadding:"H\u00fccre d\u0131\u015f\u0131 bo\u015flu\u011fu",cellspacing:"H\u00fccre i\u00e7i bo\u015flu\u011fu",rows:"Sat\u0131rlar",cols:"S\u00fctunlar",height:"Y\u00fckseklik",width:"Geni\u015flik",title:"Tablo Ekle/D\u00fczenle",rowtype:"Tablo b\u00f6l\u00fcm\u00fcndeki sat\u0131r","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","general_tab":"Genel","cell_col":"S\u00fctundaki b\u00fct\u00fcn h\u00fccreleri g\u00fcncelle"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/uk_dlg.js new file mode 100644 index 0000000..396cbb6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.table_dlg',{"rules_border":"\u0440\u0430\u043c\u043a\u0430","rules_box":"\u0431\u043e\u043a\u0441","rules_vsides":"v-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"h-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_below":"\u0437\u043d\u0438\u0437\u0443","rules_above":"\u0437\u0432\u0435\u0440\u0445\u0443","rules_void":"\u043f\u0443\u0441\u0442\u043e",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0456","frame_cols":"\u0441\u0442\u043e\u0432\u043f\u0446\u0456","frame_rows":"\u0440\u044f\u0434\u043a\u0438","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u043d\u0456\u044f\u043a\u0438\u0439",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","missing_scope":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u0432\u0448\u0438 \u043c\u0435\u0436\u0456 \u0434\u043b\u044f \u0446\u0456\u0454\u0457 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443. \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0431\u0443\u0434\u0435 \u0432\u0430\u0436\u043a\u043e \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438 \u0437\u043c\u0456\u0441\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0456.","cell_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043a\u043e\u043c\u0456\u0440\u043e\u043a: {$cells}.","row_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u044f\u0434\u043a\u0456\u0432: {$rows}.","col_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432: {$cols}.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043c\u0456\u0440\u043e\u043a",scope:"\u0420\u043e\u0437\u043c\u0430\u0445",tfoot:"\u041d\u0438\u0436\u043d\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u0430",tbody:"\u0422\u0456\u043b\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0456",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_even":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_odd":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043d\u0435\u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446","row_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a","cell_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0440\u044f\u0434\u043a\u0443","cell_cell":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u0456",summary:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME-\u0442\u0438\u043f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","merge_cells_title":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bordercolor:"\u041a\u043e\u043b\u0456\u0440 \u0433\u0440\u0430\u043d\u0438\u0446\u0456","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","cell_type":"\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438","cell_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",border:"\u0420\u0430\u043c\u043a\u0430",cellpadding:"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u0445",cellspacing:"\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438",rows:"\u0420\u044f\u0434\u043a\u0438",cols:"\u0421\u0442\u043e\u0432\u043f\u0446\u0456",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0414\u043e\u0434\u0430\u0442\u0438/\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",rowtype:"\u0420\u044f\u0434\u043e\u043a \u0432 \u0447\u0430\u0441\u0442\u0438\u043d\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","cell_col":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043b\u0456\u0442\u0438\u043d\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u0446\u0456"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/vi_dlg.js new file mode 100644 index 0000000..64318f6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.table_dlg',{"rules_border":"vi\u1ec1n","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"d\u01b0\u1edbi","rules_above":"tr\u00ean","rules_void":"tr\u1ed1ng kh\u00f4ng",rules:"Th\u01b0\u1edbc","frame_all":"t\u1ea5t","frame_cols":"c\u1ed9t","frame_rows":"h\u00e0ng","frame_groups":"nh\u00f3m","frame_none":"kh\u00f4ng",frame:"Khung",caption:"Ch\u00fa t\u00edch b\u1ea3ng","missing_scope":"Ti\u1ebfp t\u1ee5c v\u1edbi \u0111\u01b0\u1eddng d\u1eabn kh\u00f4ng t\u1ed3n t\u1ea1i ?","cell_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a \u00f4 c\u1ee7a {$cells}.","row_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a h\u00e0ng c\u1ee7a {$rows}.","col_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a c\u1ed9t c\u1ee7a {$cols}.",colgroup:"Nh\u00f3m c\u1ed9t",rowgroup:"Nh\u00f3m h\u00e0ng",scope:"Ph\u1ea1m vi",tfoot:"Ch\u00e2n b\u1ea3ng",tbody:"Th\u00e2n b\u1ea3n",thead:"\u0110\u1ea7u b\u1ea3ng","row_all":"C\u1eadp nh\u1eadt t\u1ea5t h\u00e0ng trong b\u1ea3ng","row_even":"C\u1eadp nh\u1eadt h\u00e0ng ch\u1eb5n trong b\u1ea3ng","row_odd":"C\u1eadp nh\u1eadt h\u00e0ng l\u1ebb trong b\u1ea3ng","row_row":"C\u1eadp nh\u1eadt h\u00e0ng hi\u1ec7n th\u1eddi","cell_all":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong b\u1ea3ng","cell_row":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong h\u00e0ng","cell_cell":"C\u1eadp nh\u1eadt \u00f4 hi\u1ec7n th\u1eddi",th:"\u0110\u1ea7u \u0111\u1ec1",td:"D\u1eef li\u1ec7u",summary:"T\u00f3m l\u01b0\u1ee3c",bgimage:"\u1ea2nh n\u1ec1n",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",mime:"Ki\u1ec3u MIME \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",style:"Ki\u1ec3u d\u00e1ng",id:"Id","merge_cells_title":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng",bgcolor:"M\u00e0u n\u1ec1n",bordercolor:"M\u00e0u vi\u1ec1n","align_bottom":"D\u01b0\u1edbi","align_top":"Tr\u00ean",valign:"Canh l\u1ec1 d\u1ecdc","cell_type":"Lo\u1ea1i \u00f4","cell_title":"Thu\u1ed9c t\u00ednh \u00f4","row_title":"Thu\u1ed9c t\u00ednh h\u00e0ng","align_middle":"Gi\u1eefa","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_default":"M\u1eb7c \u0111\u1ecbnh",align:"Canh l\u1ec1",border:"Vi\u1ec1n",cellpadding:"Kho\u1ea3ng l\u00f3t \u00f4",cellspacing:"Kho\u1ea3ng c\u00e1ch \u00f4",rows:"H\u00e0ng",cols:"C\u1ed9t",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",title:"Ch\u00e8n/S\u1eeda b\u1ea3ng",rowtype:"H\u00e0ng trong t\u1eebng ph\u1ea7n b\u1ea3ng","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","general_tab":"Chung","cell_col":"Update all cells in column"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-cn_dlg.js new file mode 100644 index 0000000..4fe3003 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.table_dlg',{"rules_border":"\u8fb9\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u5206\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u683c\u6807\u9898","missing_scope":"\u60a8\u6ca1\u6709\u6307\u5b9a\u8868\u683c\u7684\u6807\u9898\u5355\u5143\uff0c\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528\u6237\u96be\u4ee5\u7406\u89e3\u60a8\u7684\u8868\u683c\u7684\u5185\u5bb9\u3002\u60a8\u8981\u7ee7\u7eed\u5417\uff1f","cell_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5355\u5143\u683c\u6570{$cells}\u3002","row_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u884c\u6570{$rows}\u3002","col_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5217\u6570{$cols}\u3002",colgroup:"\u5217\u5206\u7ec4",rowgroup:"\u884c\u5206\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u5f53\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u5355\u5143\u683c","cell_row":"\u66f4\u65b0\u5f53\u524d\u884c\u7684\u5355\u5143\u683c","cell_cell":"\u66f4\u65b0\u5f53\u524d\u5355\u5143\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"ID","merge_cells_title":"\u5408\u5e76\u5355\u5143\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u5355\u5143\u683c\u7c7b\u578b","cell_title":"\u5355\u5143\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50",border:"\u8fb9\u6846",cellpadding:"\u5355\u5143\u683c\u8fb9\u8ddd",cellspacing:"\u5355\u5143\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91 \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u666e\u901a","cell_col":"\u66f4\u65b0\u8be5\u5217\u5168\u90e8\u5355\u5143\u683c"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-tw_dlg.js new file mode 100644 index 0000000..7a89be3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b\u65b9","rules_above":"\u4e0a\u65b9","rules_void":"\u7121\u6548",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04","frame_rows":"\u5217","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u8aaa\u660e","missing_scope":"\u60a8\u8868\u683c\u7b2c\u4e00\u884c\u7684\u8868\u683c\u6c92\u6709\u8a2d\u5b9a\u6a19\u984c\u5132\u5b58\u683c (TH)\uff0c\u9019\u53ef\u80fd\u4e0d\u5229\u65bc\u7db2\u9801 SEO \u8207 \u7121\u969c\u7919\u7a7a\u9593\u898f\u7bc4\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u9019\u500b\u55ce\uff1f","cell_limit":"\u8868\u683c\u5167\u7684\u683c\u5b57\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cells} \u500b\u3002","row_limit":"\u8868\u683c\u5167\u7684\u5217\u6578\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$rows} \u5217\u3002","col_limit":"\u8868\u683c\u5167\u7684\u6b04\u4f4d\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cols} \u6b04\u3002",colgroup:"\u6b04\u4f4d\u7fa4\u7d44",rowgroup:"\u5217\u7fa4\u7d44",scope:"\u5957\u7528\u7bc4\u570d",tfoot:"\u8868\u683c\u5c3e\u90e8",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u683c\u4e0a\u982d","row_all":"\u66f4\u65b0\u5168\u90e8\u7684\u5217","row_even":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5076\u6578\u5217","row_odd":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5947\u6578\u5217","row_row":"\u53ea\u66f4\u65b0\u76ee\u524d\u9019\u5217","cell_all":"\u66f4\u65b0\u5168\u90e8\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u9019\u5217\u4e0a\u7684\u683c\u5b50","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u683c\u5b50\u5c31\u597d",th:"\u8868\u982d",td:"\u8cc7\u6599",summary:"\u8868\u683c\u6458\u8981",bgimage:"\u80cc\u666f\u5716",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"\u8868\u683c\u7684 ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u7684\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u7684\u5f62\u5f0f","cell_title":"\u8868\u683c\u683c\u5b50\u7684\u5c6c\u6027","row_title":"\u8868\u683c\u5217\u7684\u5c6c\u6027","align_middle":"\u4e2d\u9593","align_right":"\u53f3\u908a","align_left":"\u5de6\u908a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u683c\u5b50\u7684\u5167\u8ddd",cellspacing:"\u683c\u5b50\u9593\u7684\u8ddd\u96e2",rows:"\u5217",cols:"\u6b04",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u52a0\u5165 / \u8a2d\u5b9a\u8868\u683c",rowtype:"\u76ee\u524d\u4f4d\u7f6e\u5217\u7684\u4f4d\u7f6e","advanced_props":"\u66f4\u591a\u5c6c\u6027","general_props":"\u5c6c\u6027\u8a2d\u5b9a","advanced_tab":"\u66f4\u591a","general_tab":"\u4e00\u822c","cell_col":"\u66f4\u65b0\u9019\u6b04\u4e0b\u7684\u6240\u6709\u683c\u5b50"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh_dlg.js new file mode 100644 index 0000000..552c04b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/langs/zh_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('zh.table_dlg',{ +general_tab:"\u57FA\u672C", +advanced_tab:"\u9AD8\u7D1A", +general_props:"\u57FA\u672C \u5C6C\u6027", +advanced_props:"\u9AD8\u7D1A\u5C6C\u6027", +rowtype:"\u884C\u6240\u5728\u7684\u8868\u683C\u4F4D\u7F6E", +title:"\u63D2\u5165/\u7DE8\u8F2F \u8868\u683C", +width:"\u5BEC\u5EA6", +height:"\u9AD8\u5EA6", +cols:"\u5217\u6578", +rows:"\u884C\u6578", +cellspacing:"\u5132\u5B58\u683C\u9593\u8DDD", +cellpadding:"\u5132\u5B58\u683C\u5167\u8DDD", +border:"\u908A\u6846", +align:"\u5C0D\u9F4A\u65B9\u5F0F", +align_default:"\u9ED8\u8A8D", +align_left:"\u5C45\u5DE6", +align_right:"\u5C45\u53F3", +align_middle:"\u5C45\u4E2D", +row_title:"\u884C \u5C6C\u6027", +cell_title:"\u5132\u5B58\u683C \u5C6C\u6027", +cell_type:"\u5132\u5B58\u683C \u985E\u5225", +valign:"\u5782\u76F4\u5C0D\u9F4A\u65B9\u5F0F", +align_top:"\u9802\u90E8", +align_bottom:"\u5E95\u90E8", +bordercolor:"\u908A\u6846\u984F\u8272", +bgcolor:"\u80CC\u666F\u984F\u8272", +merge_cells_title:"\u5408\u4F75\u5132\u5B58\u683C", +id:"Id", +style:"\u6A23\u5F0F", +langdir:"\u8A9E\u8A00\u66F8\u5BEB\u65B9\u5411", +langcode:"\u8A9E\u8A00\u7DE8\u78BC", +mime:"\u76EE\u6A19 MIME \u985E\u578B", +ltr:"\u5F9E\u5DE6\u5230\u53F3", +rtl:"\u5F9E\u53F3\u5230\u5DE6", +bgimage:"\u80CC\u666F\u5716\u7247", +summary:"\u6458\u8981", +td:"\u8868\u683C", +th:"\u8868\u982D", +cell_cell:"\u66F4\u65B0\u76EE\u524D\u7684\u5132\u5B58\u683C", +cell_row:"\u66F4\u65B0\u7576\u524D\u884C\u7684\u5132\u5B58\u683C", +cell_all:"\u66F4\u65B0\u5168\u90E8\u5132\u5B58\u683C", +row_row:"\u66F4\u65B0\u6240\u5728\u884C", +row_odd:"\u66F4\u65B0\u8868\u683C\u7684\u5947\u6578\u884C", +row_even:"\u66F4\u65B0\u8868\u683C\u7684\u5076\u6578\u884C", +row_all:"\u66F4\u65B0\u8868\u683C\u7684\u5168\u90E8\u884C", +thead:"\u8868\u982D", +tbody:"\u8868\u9AD4", +tfoot:"\u8868\u8173", +scope:"\u7BC4\u570D", +rowgroup:"\u884C\u7D44", +colgroup:"\u5217\u7D44", +col_limit:"\u5DF2\u8D85\u904E\u9650\u5236\uFF0C\u6700\u591A\u70BA {$cols} \u5217\u3002", +row_limit:"\u5DF2\u8D85\u904E\u9650\u5236\uFF0C\u6700\u591A\u70BA {$rows} \u884C\u3002", +cell_limit:"\u5DF2\u8D85\u904E\u9650\u5236\uFF0C\u6700\u591A\u70BA{$cells} \u5132\u5B58\u683C\u3002", +missing_scope:"\u60A8\u78BA\u5B9A\u4E0D\u6307\u5B9A\u8868\u982D\u5132\u5B58\u683C\u7684\u7BC4\u570D\u55CE\uFF1F\u5982\u679C\u4E0D\u6307\u5B9A\uFF0C\u90E8\u5206\u4F7F\u7528\u8005\u5C07\u5F88\u96E3\u67E5\u770B\u8868\u683C\u5167\u5BB9", +caption:"\u8868\u683C\u6A19\u984C", +frame:"\u908A\u6846", +frame_none:"\u7121", +frame_groups:"\u7D44", +frame_rows:"\u884C", +frame_cols:"\u5217", +frame_all:"\u5168\u90E8", +rules:"\u5C3A\u898F", +rules_void:"\u7A7A", +rules_above:"\u4E4B\u4E0A", +rules_below:"\u4E4B\u4E0B", +rules_hsides:"\u6C34\u6E96\u5927\u5C0F", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"\u5782\u76F4\u5927\u5C0F", +rules_box:"\u76D2", +rules_border:"\u908A\u6846" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/merge_cells.htm b/ehcp/net2ftp/plugins/tinymce/plugins/table/merge_cells.htm new file mode 100644 index 0000000..d231090 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/merge_cells.htm @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
        +
        + {#table_dlg.merge_cells_title} + + + + + + + + + +
        :
        :
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/row.htm b/ehcp/net2ftp/plugins/tinymce/plugins/table/row.htm new file mode 100644 index 0000000..6ebef28 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/row.htm @@ -0,0 +1,158 @@ + + + + {#table_dlg.row_title} + + + + + + + + + +
        + + +
        +
        +
        + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        + +
        + +
        +
        +
        + +
        +
        + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        + + + + + +
         
        +
        + + + + + + +
         
        +
        +
        +
        +
        +
        + +
        +
        + +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/table/table.htm b/ehcp/net2ftp/plugins/tinymce/plugins/table/table.htm new file mode 100644 index 0000000..b92fa74 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/table/table.htm @@ -0,0 +1,188 @@ + + + + {#table_dlg.title} + + + + + + + + + + +
        + + +
        +
        +
        + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        + +
        +
        + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + + + + + +
         
        +
        + +
        + +
        + +
        + + + + + +
         
        +
        + + + + + +
         
        +
        +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/template/blank.htm b/ehcp/net2ftp/plugins/tinymce/plugins/template/blank.htm new file mode 100644 index 0000000..ecde53f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/template/css/template.css b/ehcp/net2ftp/plugins/tinymce/plugins/template/css/template.css new file mode 100644 index 0000000..2d23a49 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/template/css/template.css @@ -0,0 +1,23 @@ +#frmbody { + padding: 10px; + background-color: #FFF; + border: 1px solid #CCC; +} + +.frmRow { + margin-bottom: 10px; +} + +#templatesrc { + border: none; + width: 320px; + height: 240px; +} + +.title { + padding-bottom: 5px; +} + +.mceActionPanel { + padding-top: 5px; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/template/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/template/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length 0) { + el = dom.create('div', null); + el.appendChild(n[0].cloneNode(true)); + } + + function hasClass(n, c) { + return new RegExp('\\b' + c + '\\b', 'g').test(n.className); + }; + + each(dom.select('*', el), function(n) { + // Replace cdate + if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); + + // Replace mdate + if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); + + // Replace selection + if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) + n.innerHTML = sel; + }); + + t._replaceVals(el); + + ed.execCommand('mceInsertContent', false, el.innerHTML); + ed.addVisual(); + }, + + _replaceVals : function(e) { + var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); + + each(dom.select('*', e), function(e) { + each(vl, function(v, k) { + if (dom.hasClass(e, k)) { + if (typeof(vl[k]) == 'function') + vl[k](e); + } + }); + }); + }, + + _getDateTime : function(d, fmt) { + if (!fmt) + return ""; + + function addZeros(value, len) { + var i; + + value = "" + value; + + if (value.length < len) { + for (i=0; i<(len-value.length); i++) + value = "0" + value; + } + + return value; + } + + fmt = fmt.replace("%D", "%m/%d/%y"); + fmt = fmt.replace("%r", "%I:%M:%S %p"); + fmt = fmt.replace("%Y", "" + d.getFullYear()); + fmt = fmt.replace("%y", "" + d.getYear()); + fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); + fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); + fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); + fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); + fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); + fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); + fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); + fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); + fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); + fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); + fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); + fmt = fmt.replace("%%", "%"); + + return fmt; + } + }); + + // Register plugin + tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/template/js/template.js b/ehcp/net2ftp/plugins/tinymce/plugins/template/js/template.js new file mode 100644 index 0000000..bc3045d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/template/js/template.js @@ -0,0 +1,106 @@ +tinyMCEPopup.requireLangPack(); + +var TemplateDialog = { + preInit : function() { + var url = tinyMCEPopup.getParam("template_external_list_url"); + + if (url != null) + document.write(''); + }, + + init : function() { + var ed = tinyMCEPopup.editor, tsrc, sel, x, u; + + tsrc = ed.getParam("template_templates", false); + sel = document.getElementById('tpath'); + + // Setup external template list + if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { + for (x=0, tsrc = []; x'); + }); + }, + + selectTemplate : function(u, ti) { + var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; + + if (!u) + return; + + d.body.innerHTML = this.templateHTML = this.getFileContents(u); + + for (x=0; x + + {#template_dlg.title} + + + + + +
        +
        +
        {#template_dlg.desc}
        +
        + +
        +
        +
        +
        + {#template_dlg.preview} + +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/css/visualblocks.css b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/css/visualblocks.css new file mode 100644 index 0000000..76bc92b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/css/visualblocks.css @@ -0,0 +1,21 @@ +p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre, figure {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat} +p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre, figure {margin-left: 3px} +section, article, address, hgroup, aside, figure {margin: 0 0 1em 3px} + +p {background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)} +h1 {background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)} +h2 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)} +h3 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)} +h4 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)} +h5 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)} +h6 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)} +div {background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)} +section {background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)} +article {background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)} +blockquote {background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)} +address {background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)} +pre {background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)} +hgroup {background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)} +aside {background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)} +figure {background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)} +figcaption {border: 1px dashed #BBB} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin.js new file mode 100644 index 0000000..c65eaf2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks",false,null,{skip_focus:true})}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin_src.js new file mode 100644 index 0000000..b9d2ab2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/visualblocks/editor_plugin_src.js @@ -0,0 +1,63 @@ +/** + * editor_plugin_src.js + * + * Copyright 2012, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualBlocks', { + init : function(ed, url) { + var cssId; + + // We don't support older browsers like IE6/7 and they don't provide prototypes for DOM objects + if (!window.NodeList) { + return; + } + + ed.addCommand('mceVisualBlocks', function() { + var dom = ed.dom, linkElm; + + if (!cssId) { + cssId = dom.uniqueId(); + linkElm = dom.create('link', { + id: cssId, + rel : 'stylesheet', + href : url + '/css/visualblocks.css' + }); + + ed.getDoc().getElementsByTagName('head')[0].appendChild(linkElm); + } else { + linkElm = dom.get(cssId); + linkElm.disabled = !linkElm.disabled; + } + + ed.controlManager.setActive('visualblocks', !linkElm.disabled); + }); + + ed.addButton('visualblocks', {title : 'visualblocks.desc', cmd : 'mceVisualBlocks'}); + + ed.onInit.add(function() { + if (ed.settings.visualblocks_default_state) { + ed.execCommand('mceVisualBlocks', false, null, {skip_focus : true}); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual blocks', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('visualblocks', tinymce.plugins.VisualBlocks); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..1a148e8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..df98590 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/visualchars/editor_plugin_src.js @@ -0,0 +1,83 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualChars', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceVisualChars', t._toggleVisualChars, t); + + // Register buttons + ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); + + ed.onBeforeGetContent.add(function(ed, o) { + if (t.state && o.format != 'raw' && !o.draft) { + t.state = true; + t._toggleVisualChars(false); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual characters', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _toggleVisualChars : function(bookmark) { + var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; + + t.state = !t.state; + ed.controlManager.setActive('visualchars', t.state); + + if (bookmark) + bm = s.getBookmark(); + + if (t.state) { + nl = []; + tinymce.walk(b, function(n) { + if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) + nl.push(n); + }, 'childNodes'); + + for (i = 0; i < nl.length; i++) { + nv = nl[i].nodeValue; + nv = nv.replace(/(\u00a0)/g, '$1'); + + div = ed.dom.create('div', null, nv); + while (node = div.lastChild) + ed.dom.insertAfter(node, nl[i]); + + ed.dom.remove(nl[i]); + } + } else { + nl = ed.dom.select('span.mceItemNbsp', b); + + for (i = nl.length - 1; i >= 0; i--) + ed.dom.remove(nl[i], 1); + } + + s.moveToBookmark(bm); + } + }); + + // Register plugin + tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..42ece20 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..34b2655 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/wordcount/editor_plugin_src.js @@ -0,0 +1,122 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.WordCount', { + block : 0, + id : null, + countre : null, + cleanre : null, + + init : function(ed, url) { + var t = this, last = 0, VK = tinymce.VK; + + t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == ’ + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g); + t.update_rate = ed.getParam('wordcount_update_rate', 2000); + t.update_on_delete = ed.getParam('wordcount_update_on_delete', false); + t.id = ed.id + '-word-count'; + + ed.onPostRender.add(function(ed, cm) { + var row, id; + + // Add it to the specified id or the theme advanced path + id = ed.getParam('wordcount_target_id'); + if (!id) { + row = tinymce.DOM.get(ed.id + '_path_row'); + + if (row) + tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); + } else { + tinymce.DOM.add(id, 'span', {}, '0'); + } + }); + + ed.onInit.add(function(ed) { + ed.selection.onSetContent.add(function() { + t._count(ed); + }); + + t._count(ed); + }); + + ed.onSetContent.add(function(ed) { + t._count(ed); + }); + + function checkKeys(key) { + return key !== last && (key === VK.ENTER || last === VK.SPACEBAR || checkDelOrBksp(last)); + } + + function checkDelOrBksp(key) { + return key === VK.DELETE || key === VK.BACKSPACE; + } + + ed.onKeyUp.add(function(ed, e) { + if (checkKeys(e.keyCode) || t.update_on_delete && checkDelOrBksp(e.keyCode)) { + t._count(ed); + } + + last = e.keyCode; + }); + }, + + _getCount : function(ed) { + var tc = 0; + var tx = ed.getContent({ format: 'raw' }); + + if (tx) { + tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + + // deal with html entities + tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' '); + tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation + + var wordArray = tx.match(this.countre); + if (wordArray) { + tc = wordArray.length; + } + } + + return tc; + }, + + _count : function(ed) { + var t = this; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + if (!ed.destroyed) { + var tc = t._getCount(ed); + tinymce.DOM.setHTML(t.id, tc.toString()); + setTimeout(function() {t.block = 0;}, t.update_rate); + } + }, 1); + }, + + getInfo: function() { + return { + longname : 'Word Count plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); +})(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/abbr.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..30a894f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/abbr.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        : + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/acronym.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..c109345 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/acronym.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        : + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/attributes.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..e8d606a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/attributes.htm @@ -0,0 +1,149 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/cite.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..0ac6bdb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/cite.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        : + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/attributes.css b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..9a6a235 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/attributes.css @@ -0,0 +1,11 @@ +.panel_wrapper div.current { + height: 290px; +} + +#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { + width: 200px; +} + +#events_panel input { + width: 200px; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/popup.css b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..e67114d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/popup.css @@ -0,0 +1,9 @@ +input.field, select.field {width:200px;} +input.picker {width:179px; margin-left: 5px;} +input.disabled {border-color:#F2F2F2;} +img.picker {vertical-align:text-bottom; cursor:pointer;} +h1 {padding: 0 0 5px 0;} +.panel_wrapper div.current {height:160px;} +#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} +a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} +#datetime {width:180px;} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/xhtmlxtras.css b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/xhtmlxtras.css new file mode 100644 index 0000000..6838d90 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/css/xhtmlxtras.css @@ -0,0 +1,24 @@ +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; +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/del.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..5f66751 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/del.htm @@ -0,0 +1,162 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
        : + + + + + +
        +
        :
        +
        +
        + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        : + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..9b98a51 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin_src.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..f240572 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/editor_plugin_src.js @@ -0,0 +1,132 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceCite', function() { + ed.windowManager.open({ + file : url + '/cite.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAcronym', function() { + ed.windowManager.open({ + file : url + '/acronym.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAbbr', function() { + ed.windowManager.open({ + file : url + '/abbr.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceDel', function() { + ed.windowManager.open({ + file : url + '/del.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceIns', function() { + ed.windowManager.open({ + file : url + '/ins.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)), + height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); + ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); + ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); + ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); + ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); + ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); + + ed.onNodeChange.add(function(ed, cm, n, co) { + n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); + + cm.setDisabled('cite', co); + cm.setDisabled('acronym', co); + cm.setDisabled('abbr', co); + cm.setDisabled('del', co); + cm.setDisabled('ins', co); + cm.setDisabled('attribs', n && n.nodeName == 'BODY'); + cm.setActive('cite', 0); + cm.setActive('acronym', 0); + cm.setActive('abbr', 0); + cm.setActive('del', 0); + cm.setActive('ins', 0); + + // Activate all + if (n) { + do { + cm.setDisabled(n.nodeName.toLowerCase(), 0); + cm.setActive(n.nodeName.toLowerCase(), 1); + } while (n = n.parentNode); + } + }); + + ed.onPreInit.add(function() { + // Fixed IE issue where it can't handle these elements correctly + ed.dom.create('abbr'); + }); + }, + + getInfo : function() { + return { + longname : 'XHTML Xtras Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/ins.htm b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..d001ac7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/ins.htm @@ -0,0 +1,162 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + + +
        + + +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
        : + + + + + +
        +
        :
        +
        +
        + {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        : + +
        :
        : + +
        : + +
        +
        +
        +
        +
        + {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        :
        +
        +
        +
        +
        + + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/abbr.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/abbr.js new file mode 100644 index 0000000..4b51a25 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/abbr.js @@ -0,0 +1,28 @@ +/** + * abbr.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('abbr'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAbbr() { + SXE.insertElement('abbr'); + tinyMCEPopup.close(); +} + +function removeAbbr() { + SXE.removeElement('abbr'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/acronym.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/acronym.js new file mode 100644 index 0000000..6ec2f88 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/acronym.js @@ -0,0 +1,28 @@ +/** + * acronym.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('acronym'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAcronym() { + SXE.insertElement('acronym'); + tinyMCEPopup.close(); +} + +function removeAcronym() { + SXE.removeElement('acronym'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/attributes.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/attributes.js new file mode 100644 index 0000000..9c99995 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/attributes.js @@ -0,0 +1,111 @@ +/** + * attributes.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + tinyMCEPopup.resizeToInnerSize(); + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + var elm = inst.selection.getNode(); + var f = document.forms[0]; + var onclick = dom.getAttrib(elm, 'onclick'); + + setFormValue('title', dom.getAttrib(elm, 'title')); + setFormValue('id', dom.getAttrib(elm, 'id')); + setFormValue('style', dom.getAttrib(elm, "style")); + setFormValue('dir', dom.getAttrib(elm, 'dir')); + setFormValue('lang', dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('onfocus', dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup')); + className = dom.getAttrib(elm, 'class'); + + addClassesToList('classlist', 'advlink_styles'); + selectByValue(f, 'classlist', className, true); + + TinyMCE_EditableSelects.init(); +} + +function setFormValue(name, value) { + if(value && document.forms[0].elements[name]){ + document.forms[0].elements[name].value = value; + } +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + + setAllAttribs(elm); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); +} + +function setAttrib(elm, attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib.toLowerCase()]; + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + dom.setAttrib(elm, attrib.toLowerCase(), value); +} + +function setAllAttribs(elm) { + var f = document.forms[0]; + + setAttrib(elm, 'title'); + setAttrib(elm, 'id'); + setAttrib(elm, 'style'); + setAttrib(elm, 'class', getSelectValue(f, 'classlist')); + setAttrib(elm, 'dir'); + setAttrib(elm, 'lang'); + setAttrib(elm, 'tabindex'); + setAttrib(elm, 'accesskey'); + setAttrib(elm, 'onfocus'); + setAttrib(elm, 'onblur'); + setAttrib(elm, 'onclick'); + setAttrib(elm, 'ondblclick'); + setAttrib(elm, 'onmousedown'); + setAttrib(elm, 'onmouseup'); + setAttrib(elm, 'onmouseover'); + setAttrib(elm, 'onmousemove'); + setAttrib(elm, 'onmouseout'); + setAttrib(elm, 'onkeypress'); + setAttrib(elm, 'onkeydown'); + setAttrib(elm, 'onkeyup'); + + // Refresh in old MSIE +// if (tinyMCE.isMSIE5) +// elm.outerHTML = elm.outerHTML; +} + +function insertAttribute() { + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); +tinyMCEPopup.requireLangPack(); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/cite.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/cite.js new file mode 100644 index 0000000..009b715 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/cite.js @@ -0,0 +1,28 @@ +/** + * cite.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('cite'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertCite() { + SXE.insertElement('cite'); + tinyMCEPopup.close(); +} + +function removeCite() { + SXE.removeElement('cite'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/del.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/del.js new file mode 100644 index 0000000..1f957dc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/del.js @@ -0,0 +1,53 @@ +/** + * del.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('del'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); + elm.removeAttribute('data-mce-new'); +} + +function insertDel() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); + + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('del'); + var elementArray = SXE.inst.dom.select('del[data-mce-new]'); + for (var i=0; i 0) { + tagName = element_name; + + insertInlineElement(element_name); + var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); + for (var i=0; i -1) ? true : false; +} + +SXE.removeClass = function(elm,cl) { + if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { + return true; + } + var classNames = elm.className.split(" "); + var newClassNames = ""; + for (var x = 0, cnl = classNames.length; x < cnl; x++) { + if (classNames[x] != cl) { + newClassNames += (classNames[x] + " "); + } + } + elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end +} + +SXE.addClass = function(elm,cl) { + if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; + return true; +} + +function insertInlineElement(en) { + var ed = tinyMCEPopup.editor, dom = ed.dom; + + ed.getDoc().execCommand('FontName', false, 'mceinline'); + tinymce.each(dom.select('span,font'), function(n) { + if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') + dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1); + }); +} diff --git a/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/ins.js b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..c4addfb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/plugins/xhtmlxtras/js/ins.js @@ -0,0 +1,53 @@ +/** + * ins.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('ins'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); + elm.removeAttribute('data-mce-new'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('ins'); + var elementArray = SXE.inst.dom.select('ins[data-mce-new]'); + for (var i=0; i + + + {#advanced_dlg.about_title} + + + + + + + +
        +
        +

        {#advanced_dlg.about_title}

        +

        Version: ()

        +

        TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

        +

        Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

        +

        For more information about this software visit the TinyMCE website.

        + +
        + Got Moxie? +
        +
        + +
        +
        +

        {#advanced_dlg.about_loaded}

        + +
        +
        + +

         

        +
        +
        + +
        +
        +
        +
        + +
        + +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/anchor.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/anchor.htm new file mode 100644 index 0000000..75c93b7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/anchor.htm @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
        + + + + + + + + +
        {#advanced_dlg.anchor_title}
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/charmap.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/charmap.htm new file mode 100644 index 0000000..d4b6bdf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/charmap.htm @@ -0,0 +1,55 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + +
         
         
        +
        + + + + + + + + + + + + + + + + +
         
         
         
        +
        {#advanced_dlg.charmap_usage}
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/color_picker.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/color_picker.htm new file mode 100644 index 0000000..b625531 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/color_picker.htm @@ -0,0 +1,70 @@ + + + + {#advanced_dlg.colorpicker_title} + + + + + + +
        + + +
        +
        +
        + {#advanced_dlg.colorpicker_picker_title} +
        + + +
        + +
        + +
        +
        +
        +
        + +
        +
        + {#advanced_dlg.colorpicker_palette_title} +
        + +
        + +
        +
        +
        + +
        +
        + {#advanced_dlg.colorpicker_named_title} +
        + +
        + +
        + +
        + {#advanced_dlg.colorpicker_name} +
        +
        +
        +
        + +
        + + +
        +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template.js new file mode 100644 index 0000000..4b8d563 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template.js @@ -0,0 +1 @@ +(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(p,m){var k,l,o=p.dom,j="",n,r;previewStyles=p.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function q(s){return s.replace(/%(\w+)/g,"")}k=m.block||m.inline||"span";l=o.create(k);f(m.styles,function(t,s){t=q(t);if(t){o.setStyle(l,s,t)}});f(m.attributes,function(t,s){t=q(t);if(t){o.setAttrib(l,s,t)}});f(m.classes,function(s){s=q(s);if(!o.hasClass(l,s)){o.addClass(l,s)}});o.setStyles(l,{position:"absolute",left:-65535});p.getBody().appendChild(l);n=o.getStyle(p.getBody(),"fontSize",true);n=/px$/.test(n)?parseInt(n,10):0;f(previewStyles.split(" "),function(s){var t=o.getStyle(l,s,true);if(s=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)){t=o.getStyle(p.getBody(),s,true);if(o.toHex(t).toLowerCase()=="#ffffff"){return}}if(s=="font-size"){if(/em|%$/.test(t)){if(n===0){return}t=parseFloat(t,10)/(/%$/.test(t)?100:1);t=(t*n)+"px"}}j+=s+":"+t+";"});o.remove(l);return j}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);n=k.settings;k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;if(!n.theme_advanced_buttons1){n=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},n)}m.settings=n=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},n);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},""),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{}," ")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true);q.nodeChanged()}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template_src.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template_src.js new file mode 100644 index 0000000..82166dc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/editor_template_src.js @@ -0,0 +1,1490 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; + + // Generates a preview for a format + function getPreviewCss(ed, fmt) { + var name, previewElm, dom = ed.dom, previewCss = '', parentFontSize, previewStylesName; + + previewStyles = ed.settings.preview_styles; + + // No preview forced + if (previewStyles === false) + return ''; + + // Default preview + if (!previewStyles) + previewStyles = 'font-family font-size font-weight text-decoration text-transform color background-color'; + + // Removes any variables since these can't be previewed + function removeVars(val) { + return val.replace(/%(\w+)/g, ''); + }; + + // Create block/inline element to use for preview + name = fmt.block || fmt.inline || 'span'; + previewElm = dom.create(name); + + // Add format styles to preview element + each(fmt.styles, function(value, name) { + value = removeVars(value); + + if (value) + dom.setStyle(previewElm, name, value); + }); + + // Add attributes to preview element + each(fmt.attributes, function(value, name) { + value = removeVars(value); + + if (value) + dom.setAttrib(previewElm, name, value); + }); + + // Add classes to preview element + each(fmt.classes, function(value) { + value = removeVars(value); + + if (!dom.hasClass(previewElm, value)) + dom.addClass(previewElm, value); + }); + + // Add the previewElm outside the visual area + dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); + ed.getBody().appendChild(previewElm); + + // Get parent container font size so we can compute px values out of em/% for older IE:s + parentFontSize = dom.getStyle(ed.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + + each(previewStyles.split(' '), function(name) { + var value = dom.getStyle(previewElm, name, true); + + // If background is transparent then check if the body has a background color we can use + if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(ed.getBody(), name, true); + + // Ignore white since it's the default color, not the nicest fix + if (dom.toHex(value).toLowerCase() == '#ffffff') { + return; + } + } + + // Old IE won't calculate the font size so we need to do that manually + if (name == 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + + // Convert font size from em/% to px + value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); + value = (value * parentFontSize) + 'px'; + } + } + + previewCss += name + ':' + value + ';'; + }); + + dom.remove(previewElm); + + return previewCss; + }; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('advanced'); + + tinymce.create('tinymce.themes.AdvancedTheme', { + sizes : [8, 10, 12, 14, 18, 24, 36], + + // Control name lookup, format: title, command + controls : { + bold : ['bold_desc', 'Bold'], + italic : ['italic_desc', 'Italic'], + underline : ['underline_desc', 'Underline'], + strikethrough : ['striketrough_desc', 'Strikethrough'], + justifyleft : ['justifyleft_desc', 'JustifyLeft'], + justifycenter : ['justifycenter_desc', 'JustifyCenter'], + justifyright : ['justifyright_desc', 'JustifyRight'], + justifyfull : ['justifyfull_desc', 'JustifyFull'], + bullist : ['bullist_desc', 'InsertUnorderedList'], + numlist : ['numlist_desc', 'InsertOrderedList'], + outdent : ['outdent_desc', 'Outdent'], + indent : ['indent_desc', 'Indent'], + cut : ['cut_desc', 'Cut'], + copy : ['copy_desc', 'Copy'], + paste : ['paste_desc', 'Paste'], + undo : ['undo_desc', 'Undo'], + redo : ['redo_desc', 'Redo'], + link : ['link_desc', 'mceLink'], + unlink : ['unlink_desc', 'unlink'], + image : ['image_desc', 'mceImage'], + cleanup : ['cleanup_desc', 'mceCleanup'], + help : ['help_desc', 'mceHelp'], + code : ['code_desc', 'mceCodeEditor'], + hr : ['hr_desc', 'InsertHorizontalRule'], + removeformat : ['removeformat_desc', 'RemoveFormat'], + sub : ['sub_desc', 'subscript'], + sup : ['sup_desc', 'superscript'], + forecolor : ['forecolor_desc', 'ForeColor'], + forecolorpicker : ['forecolor_desc', 'mceForeColor'], + backcolor : ['backcolor_desc', 'HiliteColor'], + backcolorpicker : ['backcolor_desc', 'mceBackColor'], + charmap : ['charmap_desc', 'mceCharMap'], + visualaid : ['visualaid_desc', 'mceToggleVisualAid'], + anchor : ['anchor_desc', 'mceInsertAnchor'], + newdocument : ['newdocument_desc', 'mceNewDocument'], + blockquote : ['blockquote_desc', 'mceBlockQuote'] + }, + + stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'], + + init : function(ed, url) { + var t = this, s, v, o; + + t.editor = ed; + t.url = url; + t.onResolveName = new tinymce.util.Dispatcher(this); + s = ed.settings; + + ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast(); + ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin; + + // Setup default buttons + if (!s.theme_advanced_buttons1) { + s = extend({ + theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect", + theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code", + theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap" + }, s); + } + + // Default settings + t.settings = s = extend({ + theme_advanced_path : true, + theme_advanced_toolbar_location : 'top', + theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6", + theme_advanced_toolbar_align : "left", + theme_advanced_statusbar_location : "bottom", + theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", + theme_advanced_more_colors : 1, + theme_advanced_row_height : 23, + theme_advanced_resize_horizontal : 1, + theme_advanced_resizing_use_cookie : 1, + theme_advanced_font_sizes : "1,2,3,4,5,6,7", + theme_advanced_font_selector : "span", + theme_advanced_show_current_color: 0, + readonly : ed.settings.readonly + }, s); + + // Setup default font_size_style_values + if (!s.font_size_style_values) + s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt"; + + if (tinymce.is(s.theme_advanced_font_sizes, 'string')) { + s.font_size_style_values = tinymce.explode(s.font_size_style_values); + s.font_size_classes = tinymce.explode(s.font_size_classes || ''); + + // Parse string value + o = {}; + ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes; + each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) { + var cl; + + if (k == v && v >= 1 && v <= 7) { + k = v + ' (' + t.sizes[v - 1] + 'pt)'; + cl = s.font_size_classes[v - 1]; + v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); + } + + if (/^\s*\./.test(v)) + cl = v.replace(/\./g, ''); + + o[k] = cl ? {'class' : cl} : {fontSize : v}; + }); + + s.theme_advanced_font_sizes = o; + } + + if ((v = s.theme_advanced_path_location) && v != 'none') + s.theme_advanced_statusbar_location = s.theme_advanced_path_location; + + if (s.theme_advanced_statusbar_location == 'none') + s.theme_advanced_statusbar_location = 0; + + if (ed.settings.content_css !== false) + ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css")); + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) { + ed.onNodeChange.add(t._nodeChanged, t); + ed.onKeyUp.add(t._updateUndoStatus, t); + ed.onMouseUp.add(t._updateUndoStatus, t); + ed.dom.bind(ed.dom.getRoot(), 'dragend', function() { + t._updateUndoStatus(ed); + }); + } + }); + + ed.onSetProgressState.add(function(ed, b, ti) { + var co, id = ed.id, tb; + + if (b) { + t.progressTimer = setTimeout(function() { + co = ed.getContainer(); + co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); + tb = DOM.get(ed.id + '_tbl'); + + DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); + DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); + }, ti || 0); + } else { + DOM.remove(id + '_blocker'); + DOM.remove(id + '_progress'); + clearTimeout(t.progressTimer); + } + }); + + DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); + + if (s.skin_variant) + DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); + }, + + _isHighContrast : function() { + var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'}); + + actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, ''); + DOM.remove(div); + + return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56'; + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx, fmt; + + fmt = { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }; + + ed.formatter.register(name, fmt); + + ctrl.add(o['class'], name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + }); + } + }, + + _createStyleSelect : function(n) { + var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; + + // Setup style select box + ctrl = ctrlMan.createListBox('styleselect', { + title : 'advanced.style_select', + onselect : function(name) { + var matches, formatNames = [], removedFormat; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format(s) + matches = ed.formatter.matchAll(formatNames); + tinymce.each(matches, function(match) { + if (!name || match == name) { + if (match) + ed.formatter.remove(match); + + removedFormat = true; + } + }); + + if (!removedFormat) + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onPreInit.add(function() { + var counter = 0, formats = ed.getParam('style_formats'); + + if (formats) { + each(formats, function(fmt) { + var name, keys = 0; + + each(fmt, function() {keys++;}); + + if (keys > 1) { + name = fmt.name = fmt.name || 'style_' + (counter++); + ed.formatter.register(name, fmt); + ctrl.add(fmt.title, name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name, fmt; + + if (val) { + name = 'style_' + (counter++); + fmt = { + inline : 'span', + classes : val, + selector : '*' + }; + + ed.formatter.register(name, fmt); + ctrl.add(t.editor.translate(key), name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + } + }); + } + }); + + // Auto import classes if the ctrl box is empty + if (ctrl.getLength() == 0) { + ctrl.onPostRender.add(function(ed, n) { + if (!ctrl.NativeListBox) { + Event.add(n.id + '_text', 'focus', t._importClasses, t); + Event.add(n.id + '_text', 'mousedown', t._importClasses, t); + Event.add(n.id + '_open', 'focus', t._importClasses, t); + Event.add(n.id + '_open', 'mousedown', t._importClasses, t); + } else + Event.add(n.id, 'focus', t._importClasses, t); + }); + } + + return ctrl; + }, + + _createFontSelect : function() { + var c, t = this, ed = t.editor; + + c = ed.controlManager.createListBox('fontselect', { + title : 'advanced.fontdefault', + onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + ed.execCommand('FontName', false, cur.value); + return; + } + + ed.execCommand('FontName', false, v); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + if (cur && cur.value == v) { + c.select(null); + } + + return false; // No auto select + } + }); + + if (c) { + each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { + c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); + }); + } + + return c; + }, + + _createFontSizeSelect : function() { + var t = this, ed = t.editor, c, i = 0, cl = []; + + c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + cur = cur.value; + + if (cur['class']) { + ed.formatter.toggle('fontsize_class', {value : cur['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else { + ed.execCommand('FontSize', false, cur.fontSize); + } + + return; + } + + if (v['class']) { + ed.focus(); + ed.undoManager.add(); + ed.formatter.toggle('fontsize_class', {value : v['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else + ed.execCommand('FontSize', false, v.fontSize); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) { + c.select(null); + } + + return false; // No auto select + }}); + + if (c) { + each(t.settings.theme_advanced_font_sizes, function(v, k) { + var fz = v.fontSize; + + if (fz >= 1 && fz <= 7) + fz = t.sizes[parseInt(fz) - 1] + 'pt'; + + c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); + }); + } + + return c; + }, + + _createBlockFormats : function() { + var c, fmts = { + p : 'advanced.paragraph', + address : 'advanced.address', + pre : 'advanced.pre', + h1 : 'advanced.h1', + h2 : 'advanced.h2', + h3 : 'advanced.h3', + h4 : 'advanced.h4', + h5 : 'advanced.h5', + h6 : 'advanced.h6', + div : 'advanced.div', + blockquote : 'advanced.blockquote', + code : 'advanced.code', + dt : 'advanced.dt', + dd : 'advanced.dd', + samp : 'advanced.samp' + }, t = this; + + c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) { + t.editor.execCommand('FormatBlock', false, v); + return false; + }}); + + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v, style: function() { + return getPreviewCss(t.editor, {block: v}); + }}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + if (ed.settings) { + ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut'); + } + + // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for. + // Maybe actually inherit it from the original textara? + n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '') + (ed.settings.directionality == "rtl" ? ' mceRtl' : '')}); + DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); + n = tb = DOM.add(n, 'tbody'); + + switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { + case "rowlayout": + ic = t._rowLayout(s, tb, o); + break; + + case "customlayout": + ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); + break; + + default: + ic = t._simpleLayout(s, tb, o, p); + } + + n = o.targetNode; + + // Add classes to first and last TRs + nl = sc.rows; + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + return false; + } + }); +/* + if (DOM.get(ed.id + '_path_row')) { + Event.add(ed.id + '_tbl', 'mouseover', function(e) { + var re; + + e = e.target; + + if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { + re = DOM.get(ed.id + '_path_row'); + t.lastPath = re.innerHTML; + DOM.setHTML(re, e.parentNode.title); + } + }); + + Event.add(ed.id + '_tbl', 'mouseout', function(e) { + if (t.lastPath) { + DOM.setHTML(ed.id + '_path_row', t.lastPath); + t.lastPath = 0; + } + }); + } +*/ + + if (!ed.getParam('accessibility_focus')) + Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + ed.onKeyDown.add(function(ed, evt) { + var DOM_VK_F10 = 121, DOM_VK_F11 = 122; + + if (evt.altKey) { + if (evt.keyCode === DOM_VK_F10) { + // Make sure focus is given to toolbar in Safari. + // We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame + if (tinymce.isWebKit) { + window.focus(); + } + t.toolbarGroup.focus(); + return Event.cancel(evt); + } else if (evt.keyCode === DOM_VK_F11) { + DOM.get(ed.id + '_path_row').focus(); + return Event.cancel(evt); + } + } + }); + + // alt+0 is the UK recommended shortcut for accessing the list of access controls. + ed.addShortcut('alt+0', '', 'mceShortcuts', t); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_parent', + sizeContainer : sc, + deltaHeight : o.deltaHeight + }; + }, + + getInfo : function() { + return { + longname : 'Advanced theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + }, + + resizeBy : function(dw, dh) { + var e = DOM.get(this.editor.id + '_ifr'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h, store) { + var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); + + // Boundery fix box + w = Math.max(s.theme_advanced_resizing_min_width || 100, w); + h = Math.max(s.theme_advanced_resizing_min_height || 100, h); + w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); + h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); + + // Resize iframe and container + DOM.setStyle(e, 'height', ''); + DOM.setStyle(ifr, 'height', h); + + if (s.theme_advanced_resize_horizontal) { + DOM.setStyle(e, 'width', ''); + DOM.setStyle(ifr, 'width', w); + + // Make sure that the size is never smaller than the over all ui + if (w < e.clientWidth) { + w = e.clientWidth; + DOM.setStyle(ifr, 'width', e.clientWidth); + } + } + + // Store away the size + if (store && s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : w, + ch : h + }); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + return false; + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (c.toLowerCase()) { + case 'mceeditor': + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + break; + + case 'mceelementpath': + t._addStatusBar(tb, o); + break; + + default: + a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(tb, 'tr'), 'td', { + 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da + }); + + to = cf.createToolbar("toolbar" + i); + t._addControls(v, to); + DOM.setHTML(n, to.renderHTML()); + o.deltaHeight -= s.theme_advanced_row_height; + } + }); + + return ic; + }, + + _addControls : function(v, tb) { + var t = this, s = t.settings, di, cf = t.editor.controlManager; + + if (s.theme_advanced_disable && !t._disabled) { + di = {}; + + each(explode(s.theme_advanced_disable), function(v) { + di[v] = 1; + }); + + t._disabled = di; + } else + di = t._disabled; + + each(explode(v), function(n) { + var c; + + if (di && di[n]) + return; + + // Compatiblity with 2.x + if (n == 'tablecontrols') { + each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { + n = t.createControl(n, cf); + + if (n) + tb.add(n); + }); + + return; + } + + c = t.createControl(n, cf); + + if (c) + tb.add(c); + }); + }, + + _addToolbars : function(c, o) { + var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup, toolbarsExist = false; + + toolbarGroup = cf.createToolbarGroup('toolbargroup', { + 'name': ed.getLang('advanced.toolbar'), + 'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar') + }); + + t.toolbarGroup = toolbarGroup; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"toolbar"}); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + toolbarsExist = true; + tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); + + if (s['theme_advanced_buttons' + i + '_add']) + v += ',' + s['theme_advanced_buttons' + i + '_add']; + + if (s['theme_advanced_buttons' + i + '_add_before']) + v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; + + t._addControls(v, tb); + toolbarGroup.add(tb); + + o.deltaHeight -= s.theme_advanced_row_height; + } + // Handle case when there are no toolbar buttons and ensure editor height is adjusted accordingly + if (!toolbarsExist) + o.deltaHeight -= s.theme_advanced_row_height; + h.push(toolbarGroup.renderHTML()); + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); + DOM.setHTML(n, h.join('')); + }, + + _addStatusBar : function(tb, o) { + var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; + + n = DOM.add(tb, 'tr'); + n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); + n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'}); + if (s.theme_advanced_path) { + DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path')); + DOM.add(n, 'span', {}, ': '); + } else { + DOM.add(n, 'span', {}, ' '); + } + + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"}); + + if (s.theme_advanced_resizing_use_cookie) { + ed.onPostRender.add(function() { + var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); + + if (!o) + return; + + t.resizeTo(o.cw, o.ch); + }); + } + + ed.onPostRender.add(function() { + Event.add(ed.id + '_resize', 'click', function(e) { + e.preventDefault(); + }); + + Event.add(ed.id + '_resize', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + e.preventDefault(); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + + t.resizeTo(width, height); + }; + + function endResize(e) { + // Stop listening + Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); + Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); + Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); + Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + t.resizeTo(width, height, true); + + ed.nodeChanged(); + }; + + e.preventDefault(); + + // Get the current rect size + startX = e.screenX; + startY = e.screenY; + ifrElm = DOM.get(t.editor.id + '_ifr'); + startWidth = width = ifrElm.clientWidth; + startHeight = height = ifrElm.clientHeight; + + // Register envent handlers + mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); + mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); + mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); + mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); + }); + }); + } + + o.deltaHeight -= 21; + n = tb = null; + }, + + _updateUndoStatus : function(ed) { + var cm = ed.controlManager, um = ed.undoManager; + + cm.setDisabled('undo', !um.hasUndo() && !um.typing); + cm.setDisabled('redo', !um.hasRedo()); + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches; + + tinymce.each(t.stateControls, function(c) { + cm.setActive(c, ed.queryCommandState(t.controls[c][1])); + }); + + function getParent(name) { + var i, parents = ob.parents, func = name; + + if (typeof(name) == 'string') { + func = function(node) { + return node.nodeName == name; + }; + } + + for (i = 0; i < parents.length; i++) { + if (func(parents[i])) + return parents[i]; + } + }; + + cm.setActive('visualaid', ed.hasVisual); + t._updateUndoStatus(ed); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + c.setDisabled((!p && co) || (p && !p.href)); + c.setActive(!!p && (!p.name && !p.id)); + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name && !p.id); + } + + if (c = cm.get('anchor')) { + c.setActive(!co && !!p && (p.name || (p.id && !p.href))); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + tinymce.each(matches, function(match, index) { + if (index > 0) { + c.mark(match); + } + }); + } + + if (c = cm.get('formatselect')) { + p = getParent(ed.dom.isBlock); + + if (p) + c.select(p.nodeName.toLowerCase()); + } + + // Find out current fontSize, fontFamily and fontClass + getParent(function(n) { + if (n.nodeName === 'SPAN') { + if (!cl && n.className) + cl = n.className; + } + + if (ed.dom.is(n, s.theme_advanced_font_selector)) { + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + + if (!fc && n.style.color) + fc = n.style.color; + + if (!bc && n.style.backgroundColor) + bc = n.style.backgroundColor; + } + + return false; + }); + + if (c = cm.get('fontselect')) { + c.select(function(v) { + return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; + }); + } + + // Select font size + if (c = cm.get('fontsizeselect')) { + // Use computed style + if (s.theme_advanced_runtime_fontsize && !fz && !cl) + fz = ed.dom.getStyle(n, 'fontSize', true); + + c.select(function(v) { + if (v.fontSize && v.fontSize === fz) + return true; + + if (v['class'] && v['class'] === cl) + return true; + }); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + } + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + }; + + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + + if (t.statusKeyboardNavigation) { + t.statusKeyboardNavigation.destroy(); + t.statusKeyboardNavigation = null; + } + + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + // Ignore non element and bogus/hidden elements + if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')) + return; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML' && n.scopeName) + na = n.scopeName + ':' + na; + + // Remove internal prefix + na = na.replace(/mce\:/g, ''); + + // Handle node name + switch (na) { + case 'b': + na = 'strong'; + break; + + case 'i': + na = 'em'; + break; + + case 'img': + if (v = DOM.getAttrib(n, 'src')) + ti += 'src: ' + v + ' '; + + break; + + case 'a': + if (v = DOM.getAttrib(n, 'name')) { + ti += 'name: ' + v + ' '; + na += '#' + v; + } + + if (v = DOM.getAttrib(n, 'href')) + ti += 'href: ' + v + ' '; + + break; + + case 'font': + if (v = DOM.getAttrib(n, 'face')) + ti += 'font: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'size')) + ti += 'size: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'color')) + ti += 'color: ' + v + ' '; + + break; + + case 'span': + if (v = DOM.getAttrib(n, 'style')) + ti += 'style: ' + v + ' '; + + break; + } + + if (v = DOM.getAttrib(n, 'id')) + ti += 'id: ' + v + ' '; + + if (v = n.className) { + v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, ''); + + if (v) { + ti += 'class: ' + v + ' '; + + if (ed.dom.isBlock(n) || na == 'img' || na == 'span') + na += '.' + v; + } + } + + na = na.replace(/(html:)/g, ''); + na = {name : na, node : n, title : ti}; + t.onResolveName.dispatch(t, na); + ti = na.title; + na = na.name; + + //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; + pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + + if (DOM.select('a', p).length > 0) { + t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({ + root: ed.id + "_path_row", + items: DOM.select('a', p), + excludeFromTabOrder: true, + onCancel: function() { + ed.focus(); + } + }, DOM); + } + } + }, + + // Commands gets called by execCommand + + _sel : function(v) { + this.editor.execCommand('mceSelectNodeDepth', false, v); + }, + + _mceInsertAnchor : function(ui, v) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/anchor.htm', + width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), + height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceCharMap : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/about.htm', + width : 480, + height : 380, + inline : true + }, { + theme_url : this.url + }); + }, + + _mceShortcuts : function() { + var ed = this.editor; + ed.windowManager.open({ + url: this.url + '/shortcuts.htm', + width: 480, + height: 380, + inline: true + }, { + theme_url: this.url + }); + }, + + _mceColorPicker : function(u, v) { + var ed = this.editor; + + v = v || {}; + + ed.windowManager.open({ + url : this.url + '/color_picker.htm', + width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), + close_previous : false, + inline : true + }, { + input_color : v.color, + func : v.func, + theme_url : this.url + }); + }, + + _mceCodeEditor : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/source_editor.htm', + width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), + height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), + inline : true, + resizable : true, + maximizable : true + }, { + theme_url : this.url + }); + }, + + _mceImage : function(ui, val) { + var ed = this.editor; + + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + url : this.url + '/image.htm', + width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), + height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceLink : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/link.htm', + width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), + height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceNewDocument : function() { + var ed = this.editor; + + ed.windowManager.confirm('advanced.newdocument', function(s) { + if (s) + ed.execCommand('mceSetContent', false, ''); + }); + }, + + _mceForeColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.fgColor, + func : function(co) { + t.fgColor = co; + t.editor.execCommand('ForeColor', false, co); + } + }); + }, + + _mceBackColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.bgColor, + func : function(co) { + t.bgColor = co; + t.editor.execCommand('HiliteColor', false, co); + } + }); + }, + + _ufirst : function(s) { + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + }); + + tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); +}(tinymce)); diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/image.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/image.htm new file mode 100644 index 0000000..b8ba729 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
        + + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + +
         
        + x +
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/colorpicker.jpg b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/colorpicker.jpg new file mode 100644 index 0000000..b1a377a Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/colorpicker.jpg differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/flash.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/flash.gif new file mode 100644 index 0000000..dec3f7c Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/flash.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/icons.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/icons.gif new file mode 100644 index 0000000..ca22249 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/icons.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/iframe.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/iframe.gif new file mode 100644 index 0000000..410c7ad Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/iframe.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/pagebreak.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/pagebreak.gif new file mode 100644 index 0000000..acdf408 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/pagebreak.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/quicktime.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/quicktime.gif new file mode 100644 index 0000000..8f10e7a Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/quicktime.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/realmedia.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/realmedia.gif new file mode 100644 index 0000000..fdfe0b9 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/realmedia.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/shockwave.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/shockwave.gif new file mode 100644 index 0000000..9314d04 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/shockwave.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/trans.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/trans.gif new file mode 100644 index 0000000..3884865 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/trans.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/video.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/video.gif new file mode 100644 index 0000000..3570104 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/video.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/windowsmedia.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/windowsmedia.gif new file mode 100644 index 0000000..ab50f2d Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/img/windowsmedia.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/about.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/about.js new file mode 100644 index 0000000..5b35845 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/about.js @@ -0,0 +1,73 @@ +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 += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + tinymce.each(ed.plugins, function(p, n) { + var info; + + if (!p.getInfo) + return; + + html += ''; + + info = p.getInfo(); + + if (info.infourl != null && info.infourl != '') + html += ''; + else + html += ''; + + if (info.authorurl != null && info.authorurl != '') + html += ''; + else + html += ''; + + html += ''; + html += ''; + + document.getElementById('plugins_tab').style.display = ''; + + }); + + html += ''; + html += '
        ' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
        ' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
        '; + + 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 = ''; + document.getElementById('iframecontainer').innerHTML = html; + document.getElementById('help_tab').style.display = 'block'; + document.getElementById('help_tab').setAttribute("aria-hidden", "false"); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/anchor.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/anchor.js new file mode 100644 index 0000000..2909a3a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/anchor.js @@ -0,0 +1,56 @@ +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'); + v = ed.dom.getAttrib(elm, 'name') || ed.dom.getAttrib(elm, 'id'); + + if (v) { + this.action = 'update'; + f.anchorName.value = v; + } + + f.insert.value = ed.getLang(elm ? 'update' : 'insert'); + }, + + update : function() { + var ed = this.editor, elm, name = document.forms[0].anchorName.value, attribName; + + if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) { + tinyMCEPopup.alert('advanced_dlg.anchor_invalid'); + return; + } + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + var aRule = ed.schema.getElementRule('a'); + if (!aRule || aRule.attributes.name) { + attribName = 'name'; + } else { + attribName = 'id'; + } + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) { + elm.setAttribute(attribName, name); + elm[attribName] = name; + ed.undoManager.add(); + } else { + // create with zero-sized nbsp so that in Webkit where anchor is on last line by itself caret cannot be placed after it + var attrs = {'class' : 'mceItemAnchor'}; + attrs[attribName] = name; + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', attrs, '\uFEFF')); + ed.nodeChanged(); + } + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/charmap.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/charmap.js new file mode 100644 index 0000000..bb18695 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/charmap.js @@ -0,0 +1,363 @@ +/** + * charmap.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +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'], + ['♠', '♠', true, '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()); + addKeyboardNavigation(); +}); + +function addKeyboardNavigation(){ + var tableElm, cells, settings; + + cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup"); + + settings ={ + root: "charmapgroup", + items: cells + }; + cells[0].tabindex=0; + tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); + if (tinymce.isGecko) { + cells[0].focus(); + } else { + setTimeout(function(){ + cells[0].focus(); + }, 100); + } + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); +} + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20, i; + var html = '
        '+ + ''; + var cols=-1; + + for (i=0; i' + + '' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + + html += '
        '; + html = html.replace(/<\/tr>/g, ''); + + 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; +} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/color_picker.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..cc891c1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/color_picker.js @@ -0,0 +1,345 @@ +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':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown', + '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod', + '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green', + '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue', + '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue', + '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue', + '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green', + '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey', + '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue', + '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin', + '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid', + '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue', + '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green', + '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green' +}; + +var namedLookup = {}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value; + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + generateWebColors(); + generateNamedColors(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } + + for (key in named) { + value = named[key]; + namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase(); + } +} + +function toHexColor(color) { + var matches, red, green, blue, toInt = parseInt; + + function hex(value) { + value = parseInt(value).toString(16); + + return value.length > 1 ? value : '0' + value; // Padd with leading zero + }; + + color = tinymce.trim(color); + color = color.replace(/^[#]/, '').toLowerCase(); // remove leading '#' + color = namedLookup[color] || color; + + matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/.exec(color); + + if (matches) { + red = toInt(matches[1]); + green = toInt(matches[2]); + blue = toInt(matches[3]); + } else { + matches = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color); + + if (matches) { + red = toInt(matches[1], 16); + green = toInt(matches[2], 16); + blue = toInt(matches[3], 16); + } else { + matches = /^([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color); + + if (matches) { + red = toInt(matches[1] + matches[1], 16); + green = toInt(matches[2] + matches[2], 16); + blue = toInt(matches[3] + matches[3], 16); + } else { + return ''; + } + } + } + + return '#' + hex(red) + hex(green) + hex(blue); +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + var hexColor = toHexColor(color); + + if (hexColor === '') { + var text = tinyMCEPopup.editor.getLang('advanced_dlg.invalid_color_value'); + tinyMCEPopup.alert(text + ': ' + color); + } + else { + tinyMCEPopup.restoreSelection(); + + if (f) + f(hexColor); + + tinyMCEPopup.close(); + } +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toUpperCase(); +} + +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 += '
        '; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby. + h += '
        ' + + ''; + + for (i=0; i' + + ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
        '; + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el.firstChild); +} + +function paintCanvas(el) { + tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) { + var context; + if (canvas.getContext && (context = canvas.getContext("2d"))) { + context.fillStyle = canvas.getAttribute('data-color'); + context.fillRect(0, 0, 10, 10); + } + }); +} +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 += ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + i++; + } + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el); +} + +function enableKeyboardNavigation(el) { + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', { + root: el, + items: tinyMCEPopup.dom.select('a', el) + }, tinyMCEPopup.dom); +} + +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, pos = tinyMCEPopup.dom.getPos(e.target); + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.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=0) && (i'); + }, + + 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', tinyMCEPopup.getParam('external_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 = typeof(l) === 'function' ? 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.replace(/ /g, '%20'), + 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); + tinyMCEPopup.editor.execCommand('mceRepaint'); + tinyMCEPopup.editor.focus(); + } else { + tinymce.each(args, function(value, name) { + if (value === "") { + delete args[name]; + } + }); + + ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) { + st[key] = value; + }); + + // 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), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + 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); diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/link.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/link.js new file mode 100644 index 0000000..8c1d73c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/link.js @@ -0,0 +1,159 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + 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, href = f.href.value.replace(/ /g, '%20'); + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("mceInsertLink", 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 : href, + 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 : href, + title : f.linktitle.value + }); + + if (f.target_list) { + ed.dom.setAttrib(e, 'target', getSelectValue(f, "target_list")); + } + + if (f.class_list) { + ed.dom.setAttrib(e, 'class', getSelectValue(f, "class_list")); + } + } + + // 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); diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/source_editor.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..dd5e366 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/js/source_editor.js @@ -0,0 +1,78 @@ +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)) { + turnWrapOn(); + 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 setWhiteSpaceCss(value) { + var el = document.getElementById('htmlSource'); + tinymce.DOM.setStyle(el, 'white-space', value); +} + +function turnWrapOff() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre'); + } else { + setWrap('off'); + } +} + +function turnWrapOn() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre-wrap'); + } else { + setWrap('soft'); + } +} + +function toggleWordWrap(elm) { + if (elm.checked) { + turnWrapOn(); + } else { + turnWrapOff(); + } +} + +function resizeInputs() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('htmlSource'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 65) + 'px'; + } +} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar.js new file mode 100644 index 0000000..df04af8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.advanced',{"underline_desc":"\u062a\u062d\u062a\u0647 \u062e\u0637 (Ctrl U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)",dd:"\u0627\u0644\u0648\u0635\u0641",dt:"\u062a\u0639\u0631\u064a\u0641 \u0645\u0635\u0637\u0644\u062d",samp:"\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0629",code:"\u0642\u0627\u0646\u0648\u0646",blockquote:"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629",h6:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 6",h5:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 5",h4:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 4",h3:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 3",h2:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2",h1:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1",pre:"\u0645\u0647\u064a\u0623 \u0645\u0633\u0628\u0642",address:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",div:"\u0627\u0644\u062f\u0631\u062c\u0629",paragraph:"\u0627\u0644\u0646\u0635",block:"\u0627\u0644\u0647\u064a\u0626\u0647",fontdefault:"\u0639\u0627\u0626\u0644\u0647 \u0627\u0644\u062e\u0637","font_size":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637","style_select":"\u0627\u0644\u0633\u0645\u0627\u062a","more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","toolbar_focus":"\u0644\u0644\u062a\u062d\u0631\u0643 \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Alt Q \u0644\u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0623\u062f\u0648\u0627\u062a\u060c Alt-Z \u0644\u0644\u0645\u062d\u0631\u0631 \u060c Alt-X \u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0639\u0646\u0635\u0631",newdocument:"\u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u064a\u062f \u0645\u0633\u062d \u0643\u0627\u0641\u0629 \u0645\u062d\u062a\u0648\u064a\u0627\u062a\u061f",path:"\u0645\u0633\u0627\u0631","clipboard_msg":"\u0646\u0633\u062e/\u0642\u0635/\u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0627\u0641\u0631 \u0641\u064a \u0641\u064a\u0631 \u0641\u0648\u0643\u0633 \u062d\u0627\u0644\u064a\u0627 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u062a\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a\u061f","blockquote_desc":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629","help_desc":"\u0645\u0633\u0627\u0639\u062f\u0647","newdocument_desc":"\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f","image_props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0648\u0631\u0629","paste_desc":"\u0644\u0635\u0642","copy_desc":"\u0646\u0633\u062e","cut_desc":"\u0642\u0635","anchor_desc":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","visualaid_desc":"\u0627\u0644\u0645\u0628\u0627\u062f\u0626 \u0627\u0644\u062a\u0648\u062c\u064a\u0647\u064a\u0629 \u062a\u0628\u062f\u064a\u0644 / \u0639\u0646\u0627\u0635\u0631 \u063a\u064a\u0631 \u0645\u0631\u0626\u064a\u0629","charmap_desc":"\u0627\u062f\u062e\u0627\u0644 \u0631\u0645\u0632 \u062c\u062f\u064a\u062f","backcolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","forecolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u0646\u0635","custom1_desc":"\u0627\u062f\u062e\u0644 \u0627\u0644\u0648\u0635\u0641 \u0647\u0646","removeformat_desc":"\u0627\u0632\u0627\u0644\u0647 \u0627\u0644\u062a\u0646\u0633\u064a\u0642","hr_desc":"\u0627\u062f\u0631\u0627\u062c \u062e\u0637 \u0627\u0641\u0642\u0649","sup_desc":"\u0645\u0631\u062a\u0641\u0639","sub_desc":"\u0645\u0646\u062e\u0641\u0636","code_desc":"\u062a\u0639\u062f\u064a\u0644 \u0634\u0641\u0631\u0647 \u0627\u0644 \u0623\u062a\u0634 \u062a\u064a \u0623\u0645 \u0623\u0644","cleanup_desc":"\u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0643\u0648\u062f","image_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062d\u0630\u0641 \u0635\u0648\u0631\u0647","unlink_desc":"\u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637","link_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (Ctrl Y)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (Ctrl Z)","indent_desc":"\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","outdent_desc":"\u0625\u0646\u0642\u0627\u0635 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0642\u0628\u0644","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","justifyfull_desc":"\u0645\u062d\u0627\u0630\u0627\u0647 \u0643\u0644\u064a\u0647","justifyright_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0645\u064a\u0646","justifycenter_desc":"\u062a\u0648\u0633\u064a\u0637 \u0648\u0633\u0637","justifyleft_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0633\u0627\u0631","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u062e\u0637","help_shortcut":"\u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0627\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u0645\u0633\u0627\u0639\u062f\u0647","rich_text_area":"\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644\u0627\u062a","shortcuts_desc":"\u0645\u0633\u0627\u0639\u062f\u0629 \u0627\u0644\u0648\u0635\u0648\u0644",toolbar:"\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar_dlg.js new file mode 100644 index 0000000..6cfc8ad --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ar_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.advanced_dlg',{"link_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0648\u0635\u0644\u0627\u062a","link_is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0631\u0627\u0628\u0637 \u062e\u0627\u0631\u062c\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629 http:// \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","link_is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0623\u0646 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0645\u064a\u0644\u062a\u0648 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 :\u061f \u0628\u0627\u062f\u0626\u0629","link_titlefield":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","link_target_blank":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0627\u0641\u0630\u0647 \u062c\u062f\u064a\u062f\u0647","link_target_same":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0647","link_target":"\u0627\u0644\u0647\u062f\u0641","link_url":"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0648\u0635\u0644\u0647","link_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0648\u0635\u0644\u0647","image_align_right":"\u064a\u0645\u064a\u0646","image_align_left":"\u064a\u0633\u0627\u0631","image_align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","image_align_texttop":"\u0627\u0644\u0646\u0635 \u0627\u0644\u0623\u0639\u0644\u0649","image_align_bottom":"\u0627\u0644\u0642\u0627\u0639","image_align_middle":"\u0627\u0644\u0623\u0648\u0633\u0637","image_align_top":"\u0627\u0644\u0623\u0639\u0644\u0649","image_align_baseline":"\u0627\u0644\u0623\u0633\u0627\u0633","image_align":"\u0645\u062d\u0627\u0630\u0627\u0629","image_hspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647","image_vspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0647","image_dimensions":"\u0627\u0644\u0623\u0628\u0639\u0627\u062f","image_alt":"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647","image_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0635\u0648\u0631","image_border":"\u0627\u0644\u062d\u062f\u0648\u062f","image_src":"\u0631\u0627\u0628\u0637 \u0627\u0644\u0635\u0648\u0631\u0647","image_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0629","charmap_title":"\u0627\u062e\u062a\u064a\u0627\u0631 \u062d\u0631\u0641 \u0645\u062e\u0635\u0635","colorpicker_name":"\u0627\u0633\u0645:","colorpicker_color":"\u0627\u0644\u0644\u0648\u0646 :","colorpicker_named_title":"\u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_named_tab":"\u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_palette_title":"\u0644\u0648\u062d \u0627\u0644\u0623\u0644\u0648\u0627\u0646","colorpicker_palette_tab":"\u0644\u0648\u062d","colorpicker_picker_title":"\u0643\u0627\u0634\u0641 \u0627\u0644\u0644\u0648\u0646","colorpicker_picker_tab":"\u0627\u0644\u0643\u0627\u0634\u0641","colorpicker_title":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0644\u0648\u0646","code_wordwrap":"\u0627\u0644\u062a\u0641\u0627\u0641 \u0627\u0644\u0646\u0635","code_title":"\u062a\u0639\u062f\u064a\u0644 \u0627 \u0644\u0634\u064a\u0641\u0631\u0647 \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0647","anchor_name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0631\u0633\u0627\u0647","anchor_title":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","about_loaded":"\u0627\u0644\u0627\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u062d\u0645\u0644\u0647","about_version":"\u0627\u0644\u0627\u0635\u062f\u0627\u0631","about_author":"\u0627\u0644\u0643\u0627\u062a\u0628","about_plugin":"\u0627\u0644\u0645\u0648\u0642\u0639","about_plugins":"\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a","about_license":"\u0627\u0644\u062a\u0631\u062e\u064a\u0635","about_help":"\u0645\u0633\u0627\u0639\u062f\u0647","about_general":"\u0639\u0646","about_title":"\u0639\u0646 \u0627\u0644\u0645\u062d\u0631\u0631","charmap_usage":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644.","anchor_invalid":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0625\u0633\u0645 \u064a\u0635\u0644\u062d \u0644\u0644\u0645\u0631\u0633\u0627\u0647","accessibility_help":"\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0648\u0635\u0648\u0644","accessibility_usage_title":"\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0639\u0627\u0645","invalid_color_value":"\u0642\u064a\u0645\u0647 \u062e\u0637\u0623 \u0644\u0644\u0648\u0646"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs.js new file mode 100644 index 0000000..9d88d4c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.advanced',{"underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)",dd:"Popis definice",dt:"Term\u00edn definice",samp:"Uk\u00e1zka k\u00f3du",code:"K\u00f3d",blockquote:"Blokov\u00e1 citace",h6:"Nadpis 6",h5:"Nadpis 5",h4:"Nadpis 4",h3:"Nadpis 3",h2:"Nadpis 2",h1:"Nadpis 1",pre:"P\u0159edform\u00e1tov\u00e1no",address:"Adresa",div:"Odd\u00edl",paragraph:"Odstavec",block:"Form\u00e1t",fontdefault:"P\u00edsmo","font_size":"Velikost p\u00edsma","style_select":"Styly","more_colors":"Dal\u0161\u00ed barvy","toolbar_focus":"P\u0159echod na panel n\u00e1stroj\u016f - Alt Q, p\u0159echod do editoru - Alt Z, p\u0159echod na cestu prvk\u016f - Alt X",newdocument:"Jste si opravdu jisti, \u017ee chcete odstranit ve\u0161ker\u00fd obsah?",path:"Cesta","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","blockquote_desc":"Blokov\u00e1 citace","help_desc":"N\u00e1pov\u011bda","newdocument_desc":"Nov\u00fd dokument","image_props_desc":"Vlastnosti obr\u00e1zku","paste_desc":"Vlo\u017eit","copy_desc":"Kop\u00edrovat","cut_desc":"Vyjmout","anchor_desc":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","visualaid_desc":"Zobrazit pomocn\u00e9 linky/skryt\u00e9 prvky","charmap_desc":"Vlo\u017eit speci\u00e1ln\u00ed znak","backcolor_desc":"Barva pozad\u00ed","forecolor_desc":"Barva textu","custom1_desc":"Libovoln\u00fd popisek","removeformat_desc":"Odstranit form\u00e1tov\u00e1n\u00ed","hr_desc":"Vlo\u017eit vodorovn\u00fd odd\u011blova\u010d","sup_desc":"Horn\u00ed index","sub_desc":"Doln\u00ed index","code_desc":"Upravit HTML zdroj","cleanup_desc":"Vy\u010distit k\u00f3d","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","unlink_desc":"Odebrat odkaz","link_desc":"Vlo\u017eit/upravit odkaz","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","indent_desc":"Zv\u011bt\u0161it odsazen\u00ed","outdent_desc":"Zmen\u0161it odsazen\u00ed","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","justifyfull_desc":"Zarovnat do bloku","justifyright_desc":"Zarovnat doprava","justifycenter_desc":"Zarovnat na st\u0159ed","justifyleft_desc":"Zarovnat doleva","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","help_shortcut":"Stiskn\u011bte ALT F10 pro panel n\u00e1stroj\u016f. Stiskn\u011bte ALT 0 pro n\u00e1pov\u011bdu.","rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem","shortcuts_desc":"N\u00e1pov\u011bda",toolbar:"Panel n\u00e1stroj\u016f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs_dlg.js new file mode 100644 index 0000000..e6f3e39 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/cs_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.advanced_dlg',{"link_list":"Seznam odkaz\u016f","link_is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","link_is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?","link_titlefield":"Titulek","link_target_blank":"Otev\u0159\u00edt odkaz v nov\u00e9m okn\u011b","link_target_same":"Otev\u0159\u00edt odkaz ve stejn\u00e9m okn\u011b","link_target":"C\u00edl","link_url":"URL odkazu","link_title":"Vlo\u017eit/upravit odkaz","image_align_right":"Vpravo","image_align_left":"Vlevo","image_align_textbottom":"Se spodkem \u0159\u00e1dku","image_align_texttop":"S vrchem \u0159\u00e1dku","image_align_bottom":"Dol\u016f","image_align_middle":"Na st\u0159ed \u0159\u00e1dku","image_align_top":"Nahoru","image_align_baseline":"Na z\u00e1kladnu","image_align":"Zarovn\u00e1n\u00ed","image_hspace":"Horizont. odsazen\u00ed","image_vspace":"Vertik\u00e1ln\u00ed odsazen\u00ed","image_dimensions":"Rozm\u011bry","image_alt":"Popis obr\u00e1zku","image_list":"Seznam obr\u00e1zk\u016f","image_border":"R\u00e1me\u010dek","image_src":"URL obr\u00e1zku","image_title":"Vlo\u017eit/upravit obr\u00e1zek","charmap_title":"Vlo\u017eit speci\u00e1ln\u00ed znak","colorpicker_name":"N\u00e1zev:","colorpicker_color":"Vybran\u00e1 barva:","colorpicker_named_title":"Pojmenovan\u00e9 barvy","colorpicker_named_tab":"N\u00e1zvy","colorpicker_palette_title":"Paleta barev","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kap\u00e1tko","colorpicker_picker_tab":"Kap\u00e1tko","colorpicker_title":"V\u00fdb\u011br barvy","code_wordwrap":"Zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","code_title":"Editor HTML","anchor_name":"N\u00e1zev z\u00e1lo\u017eky","anchor_title":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","about_loaded":"Na\u010dten\u00e9 z\u00e1suvn\u00e9 moduly","about_version":"Verze","about_author":"Autor","about_plugin":"Z\u00e1suvn\u00fd modul","about_plugins":"Z\u00e1suvn\u00e9 moduly","about_license":"Licence","about_help":"N\u00e1pov\u011bda","about_general":"O programu","about_title":"O TinyMCE","charmap_usage":"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo.","anchor_invalid":"Zadejte, pros\u00edm, platn\u00fd n\u00e1zev z\u00e1lo\u017eky (kotvy).","accessibility_help":"N\u00e1pov\u011bda pro p\u0159\u00edstupnost","accessibility_usage_title":"Obecn\u00e9 pou\u017eit\u00ed","invalid_color_value":"Neplatn\u00fd k\u00f3d barvy"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da.js new file mode 100644 index 0000000..3d5fb8b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.advanced',{"underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)",dd:"Definitionsbeskrivelse",dt:"Definitionsterm ",samp:"Kodeeksempel",code:"Kode",blockquote:"Blokcitat",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pr\u00e6formatteret",address:"Adresse",div:"Div",paragraph:"Afsnit",block:"Format",fontdefault:"Skrifttype","font_size":"Skriftst\u00f8rrelse","style_select":"Typografier","more_colors":"Flere farver","toolbar_focus":"Hop til v\u00e6rkt\u00f8jsknapper - Alt+Q, Skift til redigering - Alt-Z, Skift til element sti - Alt-X",newdocument:"Er du sikker p\u00e5 du vil slette alt indhold?",path:"Sti","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla og Firefox.\nVil du have mere information om dette emne?","blockquote_desc":"Blokcitat","help_desc":"Hj\u00e6lp","newdocument_desc":"Nyt dokument","image_props_desc":"Billedegenskaber","paste_desc":"Inds\u00e6t","copy_desc":"Kopier","cut_desc":"Klip","anchor_desc":"Inds\u00e6t/rediger anker","visualaid_desc":"Sl\u00e5 hj\u00e6lp/synlige elementer til/fra","charmap_desc":"Inds\u00e6t specialtegn","backcolor_desc":"V\u00e6lg baggrundsfarve","forecolor_desc":"V\u00e6lg tekstfarve","custom1_desc":"Din egen beskrivelse her","removeformat_desc":"Fjern formatering","hr_desc":"Inds\u00e6t horisontal linie","sup_desc":"H\u00e6vet skrift","sub_desc":"S\u00e6nket skrift","code_desc":"Rediger HTML-kilde","cleanup_desc":"Ryd op i uordentlig kode","image_desc":"Inds\u00e6t/rediger billede","unlink_desc":"Fjern link","link_desc":"Inds\u00e6t/rediger link","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","indent_desc":"\u00d8g indrykning","outdent_desc":"Formindsk indrykning","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","justifyfull_desc":"Lige marginer","justifyright_desc":"H\u00f8jrejusteret","justifycenter_desc":"Centreret","justifyleft_desc":"Venstrejusteret","striketrough_desc":"Gennemstreget","help_shortcut":"Tryk ALT-F10 for v\u00e6rkt\u00f8jslinie. Tryk ALT-0 for hj\u00e6lp","rich_text_area":"Tekstomr\u00e5de med formatering","shortcuts_desc":"Hj\u00e6lp til tilg\u00e6ngelighed",toolbar:"V\u00e6rkt\u00f8jslinie","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da_dlg.js new file mode 100644 index 0000000..f3a752c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/da_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.advanced_dlg',{"link_list":"Liste over links","link_is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","link_is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?","link_titlefield":"Titel","link_target_blank":"\u00c5ben link i nyt vindue","link_target_same":"\u00c5ben link i samme vindue","link_target":"Target","link_url":"Link URL","link_title":"Inds\u00e6t/rediger link","image_align_right":"H\u00f8jre","image_align_left":"Venstre","image_align_textbottom":"Tekst bunden","image_align_texttop":"Tekst toppen","image_align_bottom":"Bunden","image_align_middle":"Centreret","image_align_top":"Toppen","image_align_baseline":"Grundlinie","image_align":"Justering","image_hspace":"Horisontal afstand","image_vspace":"Vertikal afstand","image_dimensions":"Dimensioner","image_alt":"Billedbeskrivelse","image_list":"Liste over billeder","image_border":"Kant","image_src":"Billede URL","image_title":"Inds\u00e6t/rediger billede","charmap_title":"V\u00e6lg specialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farve:","colorpicker_named_title":"Navngivet farve","colorpicker_named_tab":"Navngivet","colorpicker_palette_title":"Palette-farver","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farvev\u00e6lger","colorpicker_picker_tab":"V\u00e6lger","colorpicker_title":"V\u00e6lg en farve","code_wordwrap":"Tekstombrydning","code_title":"HTML kildekode-redigering","anchor_name":"Navn p\u00e5 anker","anchor_title":"Inds\u00e6t/rediger anker","about_loaded":"Indl\u00e6ste udvidelser","about_version":"Version","about_author":"Forfatter","about_plugin":"Udvidelse","about_plugins":"Udvidelser","about_license":"Licens","about_help":"Hj\u00e6lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Brug venstre og h\u00f8jre piletaster til at navigere","anchor_invalid":"Angiv venligst et gyldigt anker navn.","accessibility_help":"Tilg\u00e6ngeligheds hj\u00e6lp","accessibility_usage_title":"Generel brug","invalid_color_value":"Ugyldig farve v\u00e6rdi"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de.js new file mode 100644 index 0000000..4bd5419 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advanced',{"underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitionsbeschreibung",dt:"Definitionsbegriff",samp:"Beispiel",code:"Code",blockquote:"Zitatblock",h6:"\u00dcberschrift 6",h5:"\u00dcberschrift 5",h4:"\u00dcberschrift 4",h3:"\u00dcberschrift 3",h2:"\u00dcberschrift 2",h1:"\u00dcberschrift 1",pre:"Rohdaten",address:"Adresse",div:"Zusammenh\u00e4ngender Bereich",paragraph:"Absatz",block:"Vorlage",fontdefault:"Schriftart","font_size":"Schriftgr\u00f6\u00dfe","style_select":"Format","anchor_delta_width":"13","more_colors":"Weitere Farben","toolbar_focus":"Zur Werkzeugleiste springen: Alt+Q; Zum Editor springen: Alt-Z; Zum Elementpfad springen: Alt-X",newdocument:"Soll wirklich der ganze Inhalt gel\u00f6scht werden?",path:"Pfad","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich. Mehr \u00fcber dieses Problem erfahren?","blockquote_desc":"Zitatblock","help_desc":"Hilfe","newdocument_desc":"Neues Dokument","image_props_desc":"Bildeigenschaften","paste_desc":"Einf\u00fcgen","copy_desc":"Kopieren","cut_desc":"Ausschneiden","anchor_desc":"Anker einf\u00fcgen/ver\u00e4ndern","visualaid_desc":"Hilfslinien und unsichtbare Elemente ein-/ausblenden","charmap_desc":"Sonderzeichen einf\u00fcgen","backcolor_desc":"Hintergrundfarbe","forecolor_desc":"Textfarbe","custom1_desc":"Benutzerdefinierte Beschreibung","removeformat_desc":"Formatierungen zur\u00fccksetzen","hr_desc":"Trennlinie einf\u00fcgen","sup_desc":"Hochgestellt","sub_desc":"Tiefgestellt","code_desc":"HTML-Quellcode bearbeiten","cleanup_desc":"Quellcode aufr\u00e4umen","image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","unlink_desc":"Link entfernen","link_desc":"Link einf\u00fcgen/ver\u00e4ndern","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","indent_desc":"Einr\u00fccken","outdent_desc":"Ausr\u00fccken","numlist_desc":"Sortierte Liste","bullist_desc":"Unsortierte Liste","justifyfull_desc":"Blocksatz","justifyright_desc":"Rechtsb\u00fcndig","justifycenter_desc":"Zentriert","justifyleft_desc":"Linksb\u00fcndig","striketrough_desc":"Durchgestrichen","help_shortcut":"F\u00fcr die Toolbar ALT-F10 dr\u00fccken. F\u00fcr die Hilfe ALT-0 dr\u00fccken","rich_text_area":"Rich Text Feld","shortcuts_desc":"Eingabehilfe",toolbar:"Pfeiltasten verwenden um Funktionen auszuw\u00e4hlen","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de_dlg.js new file mode 100644 index 0000000..0ee5af9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advanced_dlg',{"link_list":"Linkliste","link_is_external":"Diese Adresse scheint ein externer Link zu sein. Soll das dazu ben\u00f6tigte \"http://\" vorangestellt werden?","link_is_email":"Diese Adresse scheint eine E-Mail Adresse zu sein. Soll das dazu ben\u00f6tigte \"mailto:\" vorangestellt werden?","link_titlefield":"Titel","link_target_blank":"In neuem Fenster \u00f6ffnen","link_target_same":"Im selben Fenster \u00f6ffnen","link_target":"Fenster","link_url":"Adresse","link_title":"Link einf\u00fcgen/ver\u00e4ndern","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Unten im Text","image_align_texttop":"Oben im Text","image_align_bottom":"Unten","image_align_middle":"Mittig","image_align_top":"Oben","image_align_baseline":"Zeile","image_align":"Ausrichtung","image_hspace":"Horizontaler Abstand","image_vspace":"Vertikaler Abstand","image_dimensions":"Abmessungen","image_alt":"Alternativtext","image_list":"Bilderliste","image_border":"Rahmen","image_src":"Adresse","image_title":"Bild einf\u00fcgen/ver\u00e4ndern","charmap_title":"Sonderzeichen","colorpicker_name":"Name:","colorpicker_color":"Farbe:","colorpicker_named_title":"Benannte Farben","colorpicker_named_tab":"Benannte Farben","colorpicker_palette_title":"Farbpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farbwahl","colorpicker_picker_tab":"Farbwahl","colorpicker_title":"Farbe","code_wordwrap":"Automatischer Zeilenumbruch","code_title":"HTML-Quellcode bearbeiten","anchor_name":"Name des Ankers","anchor_title":"Anker einf\u00fcgen/ver\u00e4ndern","about_loaded":"Geladene Plugins","about_version":"Version","about_author":"Urheber","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lizenzbedingungen","about_help":"Hilfe","about_general":"\u00dcber","about_title":"\u00dcber TinyMCE","charmap_usage":"Navigation mit linken und rechten Pfeiltasten.","anchor_invalid":"Bitte einen g\u00fcltigen Namen f\u00fcr den Anker eingeben!","accessibility_help":"Eingabehilfe","accessibility_usage_title":"Allgemeine Verwendung","invalid_color_value":"Ung\u00fcltige Farbangabe"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en.js new file mode 100644 index 0000000..f89eb92 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Use arrow keys to select functions"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..e451f37 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es.js new file mode 100644 index 0000000..880de6f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('es.advanced',{ +style_select:"Estilos", +font_size:"Tama\u00F1o", +fontdefault:"Fuente", +block:"Formato", +paragraph:"P\u00E1rrafo", +div:"Div", +address:"Direcci\u00F3n", +pre:"Preformateado", +h1:"Encabezado 1", +h2:"Encabezado 2", +h3:"Encabezado 3", +h4:"Encabezado 4", +h5:"Encabezado 5", +h6:"Encabezado 6", +blockquote:"Cita", +code:"C\u00F3digo", +samp:"Ejemplo de c\u00F3digo", +dt:"T\u00E9rmino de definici\u00F3n", +dd:"Descripci\u00F3n de definici\u00F3n", +bold_desc:"Negrita (Ctrl+B)", +italic_desc:"Cursiva (Ctrl+I)", +underline_desc:"Subrayado (Ctrl+U)", +striketrough_desc:"Tachado", +justifyleft_desc:"Alinear a la izquierda", +justifycenter_desc:"Alinear al centro", +justifyright_desc:"Alinear a la derecha", +justifyfull_desc:"Justificar", +bullist_desc:"Lista desordenada", +numlist_desc:"Lista ordenada", +outdent_desc:"Reducir sangr\u00EDa", +indent_desc:"Aumentar sandr\u00EDa", +undo_desc:"Deshacer (Ctrl+Z)", +redo_desc:"Rehacer (Ctrl+Y)", +link_desc:"Insertar/editar hiperv\u00EDnculo", +unlink_desc:"Quitar hiperv\u00EDnculo", +image_desc:"Insertar/editar imagen", +cleanup_desc:"Limpiar c\u00F3digo basura", +code_desc:"Editar c\u00F3digo HTML", +sub_desc:"Sub\u00EDndice", +sup_desc:"Super\u00EDndice", +hr_desc:"Insertar regla horizontal", +removeformat_desc:"Limpiar formato", +custom1_desc:"Su descripci\u00F3n personal aqu\u00ED", +forecolor_desc:"Seleccionar color del texto", +backcolor_desc:"Seleccionar color de fondo", +charmap_desc:"Insertar caracteres personalizados", +visualaid_desc:"Mostrar/ocultar l\u00EDnea de gu\u00EDa/elementos invisibles", +anchor_desc:"Insertar/editar ancla", +cut_desc:"Cortar", +copy_desc:"Copiar", +paste_desc:"Pegar", +image_props_desc:"Propiedades de imagen", +newdocument_desc:"Nuevo documento", +help_desc:"Ayuda", +blockquote_desc:"Cita", +clipboard_msg:"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n\u00BFDesea obtener m\u00E1s informaci\u00F3n acerca de este tema?", +path:"Ruta", +newdocument:"\u00BFEst\u00E1 seguro que desea limpiar todo el contenido?", +toolbar_focus:"Ir a los botones de herramientas - Alt+Q, Ir al editor - Alt-Z, Ir a la ruta del elemento - Alt-X", +more_colors:"M\u00E1s colores" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es_dlg.js new file mode 100644 index 0000000..60a0376 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/es_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('es.advanced_dlg',{ +about_title:"Acerca de TinyMCE", +about_general:"Acerca de ", +about_help:"Ayuda", +about_license:"Licencia", +about_plugins:"Complementos", +about_plugin:"Complemento", +about_author:"Autor", +about_version:"Versi\u00F3n", +about_loaded:"Complementos cargados", +anchor_title:"Insertar/editar ancla", +anchor_name:"Nombre del ancla", +code_title:"Editor del c\u00F3digo fuente HTML", +code_wordwrap:"Ajustar al margen", +colorpicker_title:"Seleccionar color", +colorpicker_picker_tab:"Selector", +colorpicker_picker_title:"Paleta de color", +colorpicker_palette_tab:"Paleta", +colorpicker_palette_title:"Paleta de colores", +colorpicker_named_tab:"Nombrados", +colorpicker_named_title:"Colores nombrados", +colorpicker_color:"Color:", +colorpicker_name:"Nombre:", +charmap_title:"Seleccionar caracter personalizado", +image_title:"Insertar/editar imagen", +image_src:"URL de la Imagen", +image_alt:"Descripci\u00F3n de la Imagen", +image_list:"Lista de la Imagen", +image_border:"Borde", +image_dimensions:"Dimensi\u00F3n", +image_vspace:"Espacio vertical", +image_hspace:"Espacio horizontal", +image_align:"Alineaci\u00F3n", +image_align_baseline:"L\u00EDnea base", +image_align_top:"Arriba", +image_align_middle:"Medio", +image_align_bottom:"Debajo", +image_align_texttop:"Texto arriba", +image_align_textbottom:"Texto debajo", +image_align_left:"Izquierda", +image_align_right:"Derecha", +link_title:"Insertar/editar hiperv\u00EDnculo", +link_url:"URL del hiperv\u00EDnculo", +link_target:"Destino", +link_target_same:"Abrir v\u00EDnculo en la misma ventana", +link_target_blank:"Abrir v\u00EDnculo en una ventana nueva", +link_titlefield:"T\u00EDtulo", +link_is_email:"La URL que introdujo parece ser una direcci\u00F3n de email, \u00BFdesea agregar el prefijo mailto: necesario?", +link_is_external:"La URL que introdujo parece ser un v\u00EDnculo externo, \u00BFdesea agregar el prefijo http:// necesario?", +link_list:"Lista de hiperv\u00EDnculos" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi.js new file mode 100644 index 0000000..2edb8f6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.advanced',{"underline_desc":"Alleviivattu (Ctrl+U)","italic_desc":"Kursivoitu (Ctrl+I)","bold_desc":"Lihavoitu (Ctrl+B)",dd:"M\u00e4\u00e4rittelyn kuvaus",dt:"M\u00e4\u00e4rittelyn ehto ",samp:"Koodiesimerkki",code:"Koodi",blockquote:"Pitk\u00e4 lainaus",h6:"Otsikko 6",h5:"Otsikko 5",h4:"Otsikko 4",h3:"Otsikko 3",h2:"Otsikko 2",h1:"Otsikko 1",pre:"Esimuotoiltu (pre)",address:"Osoite",div:"Div",paragraph:"Kappale",block:"Muotoilu",fontdefault:"Kirjasin","font_size":"Kirjasinkoko","style_select":"Tyylit","more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","toolbar_focus":"Siirry ty\u00f6kaluihin - Alt+Q, Siirry tekstieditoriin - Alt-Z, Siirry elementin polkuun - Alt-X",newdocument:"Haluatko varmasti tyhjent\u00e4\u00e4 kaiken sis\u00e4ll\u00f6n?",path:"Polku","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 -painikkeet eiv\u00e4t toimi Mozilla ja Firefox -selaimilla. Voit kuitenkin k\u00e4ytt\u00e4\u00e4 n\u00e4pp\u00e4inyhdistelmi\u00e4 kopioimiseen (Ctrl+C), leikkaamiseen (Ctrl+X) ja liitt\u00e4miseen (Ctrl+V). Haluatko lis\u00e4\u00e4 tietoa?","blockquote_desc":"Pitk\u00e4 lainaus","help_desc":"Ohje","newdocument_desc":"Uusi tiedosto","image_props_desc":"Kuvan ominaisuudet","paste_desc":"Liit\u00e4","copy_desc":"Kopioi","cut_desc":"Leikkaa","anchor_desc":"Lis\u00e4\u00e4/Muokkaa ankkuri","visualaid_desc":"Suuntaviivat/N\u00e4kym\u00e4tt\u00f6m\u00e4t elementit","charmap_desc":"Lis\u00e4\u00e4 erikoismerkki","backcolor_desc":"Valitse taustan v\u00e4ri","forecolor_desc":"Valitse tekstin v\u00e4ri","custom1_desc":"Oma kuvauksesi t\u00e4h\u00e4n","removeformat_desc":"Poista muotoilu","hr_desc":"Lis\u00e4\u00e4 vaakasuora viivain","sup_desc":"Yl\u00e4indeksi","sub_desc":"Alaindeksi","code_desc":"Muokkaa HTML-koodia","cleanup_desc":"Siisti sekainen koodi","image_desc":"Lis\u00e4\u00e4/muuta kuva","unlink_desc":"Poista linkki","link_desc":"Lis\u00e4\u00e4/muuta linkki","redo_desc":"Tee uudelleen (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","indent_desc":"Sisenn\u00e4","outdent_desc":"Loitonna","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","justifyfull_desc":"Tasattu","justifyright_desc":"Tasaus oikealle","justifycenter_desc":"Keskitetty","justifyleft_desc":"Tasaus vasemmalle","striketrough_desc":"Yliviivattu","help_shortcut":"Paina ALT F10 n\u00e4hd\u00e4ksesi ty\u00f6kalurivin. Paina ALT-0 n\u00e4hd\u00e4ksesi ohjeen.","rich_text_area":"Rikastettu tekstialue","shortcuts_desc":"Saavutettavuusohje",toolbar:"Ty\u00f6kalurivi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi_dlg.js new file mode 100644 index 0000000..89c0b0b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.advanced_dlg',{"link_list":"Linkkilista","link_is_external":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 johtavan ulkopuoliselle sivustolle. Haluatko lis\u00e4t\u00e4 linkin eteen http://-etuliitteen? (suositus)","link_is_email":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 siihen mailto:-etuliitteen?","link_titlefield":"Otsikko","link_target_blank":"Avaa linkki uuteen ikkunaan","link_target_same":"Avaa linkki samassa ikkunassa","link_target":"Kohde","link_url":"Linkin osoite","link_title":"Lis\u00e4\u00e4/muuta linkki","image_align_right":"Oikealle","image_align_left":"Vasemmalle","image_align_textbottom":"Tekstin alaosaan","image_align_texttop":"Tekstin yl\u00e4osaan","image_align_bottom":"Alas","image_align_middle":"Keskelle","image_align_top":"Yl\u00f6s","image_align_baseline":"Tekstin tasossa","image_align":"Tasaus","image_hspace":"Vaakasuuntainen tila","image_vspace":"Pystysuuntainen tila","image_dimensions":"Mitat","image_alt":"Kuvan kuvaus","image_list":"Kuvalista","image_border":"Reunus","image_src":"Kuvan osoite","image_title":"Lis\u00e4\u00e4/muokkaa kuvaa","charmap_title":"Valitse erikoismerkki","colorpicker_name":"Nimi:","colorpicker_color":"V\u00e4ri:","colorpicker_named_title":"Nimetyt v\u00e4rit","colorpicker_named_tab":"Nimetty","colorpicker_palette_title":"V\u00e4ripaletti","colorpicker_palette_tab":"Paletti","colorpicker_picker_title":"V\u00e4rin valitsin","colorpicker_picker_tab":"Valitsin","colorpicker_title":"Valitse v\u00e4ri","code_wordwrap":"Automaattinen rivinvaihto","code_title":"HTML-koodin muokkaus","anchor_name":"Ankkurin nimi","anchor_title":"Liit\u00e4/muokkaa ankkuria","about_loaded":"Ladatut lis\u00e4osat","about_version":"Versio","about_author":"Kirjoittaja","about_plugin":"Lis\u00e4osa","about_plugins":"Lis\u00e4osat","about_license":"Lisenssi","about_help":"Ohje","about_general":"Tietoja","about_title":"Tietoja TinyMCE:st\u00e4","charmap_usage":"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin.","anchor_invalid":"Ole hyv\u00e4 ja anna hyv\u00e4ksytty ankkurin nimi.","accessibility_help":"Saavutettavuusohje","accessibility_usage_title":"Yleinen k\u00e4ytt\u00f6","invalid_color_value":"Virheellinen v\u00e4riarvo"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr.js new file mode 100644 index 0000000..1e91abb --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.advanced',{"underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)",dd:"D\u00e9finition du terme",dt:"Terme \u00e0 d\u00e9finir",samp:"Exemple de code",code:"Code",blockquote:"Bloc de citation",h6:"Titre 6",h5:"Titre 5",h4:"Titre 4",h3:"Titre 3",h2:"Titre 2",h1:"Titre 1",pre:"Pr\u00e9format\u00e9",address:"Adresse",div:"Div",paragraph:"Paragraphe",block:"Format",fontdefault:"Police","font_size":"Taille police","style_select":"Styles","more_colors":"Plus de couleurs","toolbar_focus":"Atteindre les boutons de l\'\u00e9diteur - Alt+Q, Aller \u00e0 l\'\u00e9diteur - Alt-Z, Aller au chemin de l\'\u00e9l\u00e9ment - Alt-X",newdocument:"\u00cates-vous s\u00fbr de vouloir effacer l\'int\u00e9gralit\u00e9 du document ?",path:"Chemin","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","blockquote_desc":"Citation","help_desc":"Aide","newdocument_desc":"Nouveau document","image_props_desc":"Propri\u00e9t\u00e9s de l\'image","paste_desc":"Coller","copy_desc":"Copier","cut_desc":"Couper","anchor_desc":"Ins\u00e9rer / \u00e9diter une ancre","visualaid_desc":"Activer / d\u00e9sactiver les guides et les \u00e9l\u00e9ments invisibles","charmap_desc":"Ins\u00e9rer des caract\u00e8res sp\u00e9ciaux","backcolor_desc":"Choisir la couleur de surlignage","forecolor_desc":"Choisir la couleur du texte","custom1_desc":"Votre description personnalis\u00e9e ici","removeformat_desc":"Supprimer le formatage","hr_desc":"Ins\u00e9rer un trait horizontal","sup_desc":"Exposant","sub_desc":"Indice","code_desc":"\u00c9diter le code source HTML","cleanup_desc":"Nettoyer le code","image_desc":"Ins\u00e9rer / \u00e9diter l\'image","unlink_desc":"Supprimer le lien","link_desc":"Ins\u00e9rer / \u00e9diter le lien","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","indent_desc":"Indenter","outdent_desc":"Retirer l\'indentation","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","justifyfull_desc":"Justifi\u00e9","justifyright_desc":"Align\u00e9 \u00e0 droite","justifycenter_desc":"Centr\u00e9","justifyleft_desc":"Align\u00e9 \u00e0 gauche","striketrough_desc":"Barr\u00e9","help_shortcut":"Faites ALT-F10 pour acc\u00e9der \u00e0 la barre d\'outils. Faites ALT-0 pour acc\u00e9der \u00e0 l\'aide","rich_text_area":"Zone de texte enrichi","shortcuts_desc":"Aides \u00e0 l\'accessibilit\u00e9",toolbar:"Barre d\'outils","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr_dlg.js new file mode 100644 index 0000000..97b6b52 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/fr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.advanced_dlg',{"link_list":"Liste de liens","link_is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","link_is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?","link_titlefield":"Titre","link_target_blank":"Ouvrir dans une nouvelle fen\u00eatre","link_target_same":"Ouvrir dans la m\u00eame fen\u00eatre","link_target":"Cible","link_url":"URL du lien","link_title":"Ins\u00e9rer / \u00e9diter un lien","image_align_right":"Droite (flottant)","image_align_left":"Gauche (flottant)","image_align_textbottom":"Texte en bas","image_align_texttop":"Texte en haut","image_align_bottom":"En bas","image_align_middle":"Au milieu","image_align_top":"En haut","image_align_baseline":"Normal","image_align":"Alignement","image_hspace":"Espacement horizontal","image_vspace":"Espacement vertical","image_dimensions":"Dimensions","image_alt":"Description de l\'image","image_list":"Liste d\'images","image_border":"Bordure","image_src":"URL de l\'image","image_title":"Ins\u00e9rer / \u00e9diter une image","charmap_title":"Choisir le caract\u00e8re \u00e0 ins\u00e9rer","colorpicker_name":"Nom :","colorpicker_color":"Couleur :","colorpicker_named_title":"Couleurs nomm\u00e9es","colorpicker_named_tab":"Noms","colorpicker_palette_title":"Couleurs de la palette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Nuancier","colorpicker_picker_tab":"Nuancier","colorpicker_title":"Choisir une couleur","code_wordwrap":"Retour \u00e0 la ligne","code_title":"\u00c9diteur de source HTML","anchor_name":"Nom de l\'ancre","anchor_title":"Ins\u00e9rer / \u00e9diter une ancre","about_loaded":"Plugins charg\u00e9s","about_version":"Version","about_author":"Auteur","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licence","about_help":"Aide","about_general":"\u00c0 propos","about_title":"\u00c0 propos de TinyMCE","charmap_usage":"Utilisez les fl\u00e8ches gauche et droite pour naviguer.","anchor_invalid":"Veuillez sp\u00e9cifier un nom d\'ancre valide.","accessibility_help":"Aide \u00e0 l\'accessibilit\u00e9","accessibility_usage_title":"Usage g\u00e9n\u00e9ral","invalid_color_value":"Valeur de couleur invalide"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he.js new file mode 100644 index 0000000..2c50a4b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.advanced',{"underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)",dd:"\u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05de\u05d5\u05e9\u05d2",dt:"\u05de\u05d5\u05e9\u05d2",samp:"\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3",code:"\u05e7\u05d5\u05d3",blockquote:"\u05e6\u05d9\u05d8\u05d5\u05d8 \u05e7\u05d8\u05e2",h6:"\u05db\u05d5\u05ea\u05e8\u05ea 6",h5:"\u05db\u05d5\u05ea\u05e8\u05ea 5",h4:"\u05db\u05d5\u05ea\u05e8\u05ea 4",h3:"\u05db\u05d5\u05ea\u05e8\u05ea 3",h2:"\u05db\u05d5\u05ea\u05e8\u05ea 2",h1:"\u05db\u05d5\u05ea\u05e8\u05ea 1",pre:"Preformatted",address:"\u05db\u05ea\u05d5\u05d1\u05ea",div:"Div",paragraph:"\u05e4\u05e1\u05e7\u05d4",block:"\u05e2\u05d9\u05e6\u05d5\u05d1",fontdefault:"\u05d2\u05d5\u05e4\u05df","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","style_select":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea","more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","toolbar_focus":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd - Alt+Q, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05de\u05e2\u05d1\u05d3 \u05ea\u05de\u05dc\u05d9\u05dc\u05d9\u05dd - Alt-Z, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e0\u05ea\u05d9\u05d1 \u05d4\u05d0\u05dc\u05de\u05d8\u05d9\u05dd - Alt-X",newdocument:"\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df?",path:"path","clipboard_msg":"\u05d4\u05e2\u05ea\u05e7/\u05d2\u05d6\u05d5\u05e8/\u05d4\u05d3\u05d1\u05e7 \u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?","blockquote_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","help_desc":"\u05e2\u05d6\u05e8\u05d4","newdocument_desc":"\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9","image_props_desc":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","paste_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4","copy_desc":"\u05d4\u05e2\u05ea\u05e7\u05d4","cut_desc":"\u05d2\u05d6\u05d9\u05e8\u05d4","anchor_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","visualaid_desc":"\u05d4\u05e6\u05d2\u05d4 \u05d0\u05d5 \u05d4\u05e1\u05ea\u05e8\u05d4 \u05e9\u05dc \u05e1\u05d9\u05de\u05d5\u05e0\u05d9 \u05e2\u05d9\u05e6\u05d5\u05d1","charmap_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05d9\u05de\u05df","backcolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","forecolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05d2\u05d5\u05e4\u05df","custom1_desc":"\u05d4\u05ea\u05d0\u05d5\u05e8 \u05e9\u05dc\u05da \u05db\u05d0\u05d5","removeformat_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05d9\u05e6\u05d5\u05d1","hr_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e7\u05d5 \u05de\u05e4\u05e8\u05d9\u05d3","sup_desc":"\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9","sub_desc":"\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9","code_desc":"\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d5\u05d3 HTML","cleanup_desc":"\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e7\u05d5\u05d3","image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05d3\u05e3 \u05ea\u05de\u05d5\u05e0\u05d4","unlink_desc":"\u05d4\u05e1\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","redo_desc":"\u05d7\u05d6\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","indent_desc":"\u05d4\u05e7\u05d8\u05e0\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","outdent_desc":"\u05d4\u05d2\u05d3\u05dc\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","justifyfull_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd","justifyright_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05d9\u05de\u05d9\u05df","justifycenter_desc":"\u05de\u05d9\u05e8\u05db\u05d5\u05d6 \u05d8\u05e7\u05e1\u05d8","justifyleft_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05e9\u05de\u05d0\u05dc","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","help_shortcut":"\u05dc\u05d7\u05e6/\u05d9 ALT-F10 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd. \u05dc\u05d7\u05e6/\u05d9 ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4","rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8","shortcuts_desc":"\u05e2\u05d6\u05e8\u05ea \u05d2\u05d9\u05e9\u05d4",toolbar:"\u05e1\u05e8\u05d2\u05dc \u05db\u05dc\u05d9\u05dd","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he_dlg.js new file mode 100644 index 0000000..c27a31a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/he_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.advanced_dlg',{"link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","link_is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_titlefield":"\u05db\u05d5\u05ea\u05e8\u05ea","link_target_blank":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","link_target_same":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d0\u05d5\u05ea\u05d5 \u05d7\u05dc\u05d5\u05df","link_target":"\u05d9\u05e2\u05d3","link_url":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8","link_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","image_align_right":"\u05d9\u05de\u05d9\u05df","image_align_left":"\u05e9\u05de\u05d0\u05dc","image_align_textbottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_texttop":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_bottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df","image_align_middle":"\u05d0\u05de\u05e6\u05e2","image_align_top":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df","image_align_baseline":"\u05e7\u05d5 \u05d4\u05d4\u05ea\u05d7\u05dc\u05d4","image_align":"\u05d9\u05d9\u05e9\u05d5\u05e8","image_hspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9","image_vspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","image_dimensions":"\u05d2\u05d5\u05d3\u05dc","image_alt":"\u05ea\u05d9\u05d0\u05d5\u05e8","image_list":"\u05e8\u05e9\u05d9\u05de\u05d4","image_border":"\u05d2\u05d1\u05d5\u05dc","image_src":"\u05db\u05ea\u05d5\u05d1\u05ea:","image_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","charmap_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e1\u05d9\u05de\u05df","colorpicker_name":"\u05e9\u05dd:","colorpicker_color":"\u05e6\u05d1\u05e2:","colorpicker_named_title":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_named_tab":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_palette_title":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_palette_tab":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_title":"\u05d1\u05d5\u05e8\u05e8 \u05d4\u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_tab":"\u05d1\u05d5\u05e8\u05e8","colorpicker_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2","code_wordwrap":"\u05d2\u05dc\u05d9\u05e9\u05ea \u05d8\u05e7\u05e1\u05d8","code_title":"\u05e2\u05d5\u05e8\u05da \u05d4-HTML","anchor_name":"\u05e9\u05dd \u05d4\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","anchor_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","about_loaded":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea \u05e4\u05e2\u05d9\u05dc\u05d5\u05ea","about_version":"\u05d2\u05d9\u05e8\u05e1\u05d4","about_author":"\u05d9\u05d5\u05e6\u05e8","about_plugin":"\u05ea\u05d5\u05e1\u05e4\u05ea","about_plugins":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea","about_license":"\u05e8\u05e9\u05d9\u05d5\u05df","about_help":"\u05e2\u05d6\u05e8\u05d4","about_general":"\u05d0\u05d5\u05d3\u05d5\u05ea","about_title":"\u05d0\u05d5\u05d3\u05d5\u05ea TinyMCE","charmap_usage":"\u05d4\u05e9\u05ea\u05de\u05e9/\u05d9 \u05d1\u05d7\u05d9\u05e6\u05d9\u05dd \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4","anchor_invalid":"\u05e0\u05d0 \u05dc\u05e6\u05d9\u05d9\u05df \u05e9\u05dd \u05d7\u05d5\u05e7\u05d9","accessibility_help":"\u05e2\u05d6\u05e8\u05d4 \u05d1\u05e0\u05d2\u05d9\u05e9\u05d5\u05ea","accessibility_usage_title":"\u05e9\u05d9\u05de\u05d5\u05e9 \u05db\u05dc\u05dc\u05d9","invalid_color_value":"\u05e2\u05e8\u05da \u05d4\u05e6\u05d1\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05d9\u05df"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu.js new file mode 100644 index 0000000..ddd8534 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.advanced',{"underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)",dd:"Defin\u00edci\u00f3 a defin\u00edci\u00f3s list\u00e1ban",dt:"Defini\u00e1lt kifejez\u00e9s a defin\u00edci\u00f3s list\u00e1ban",samp:"K\u00f3d minta",code:"K\u00f3d",blockquote:"Id\u00e9zet",h6:"C\u00edmsor 6",h5:"C\u00edmsor 5",h4:"C\u00edmsor 4",h3:"C\u00edmsor 3",h2:"C\u00edmsor 2",h1:"C\u00edmsor 1",pre:"El\u0151form\u00e1zott",address:"C\u00edm",div:"DIV",paragraph:"Bekezd\u00e9s",block:"Form\u00e1tum",fontdefault:"Bet\u0171t\u00edpus","font_size":"Bet\u0171m\u00e9ret","style_select":"St\u00edlusok","image_delta_height":"","image_delta_width":"","more_colors":"Tov\u00e1bbi sz\u00ednek...","toolbar_focus":"Eszk\u00f6z-gombokra ugr\u00e1s - Alt Q, Szerkeszt\u0151h\u00f6z ugr\u00e1s - Alt-Z, Elem\u00fatvonalhoz ugr\u00e1s - Alt-X",newdocument:"Biztosan t\u00f6rli az \u00f6sszes tartalmat?",path:"\u00datvonal","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151ek el Mozilla \u00e9s Firefox alatt. Szeretne t\u00f6bbet megtudni err\u0151l?","blockquote_desc":"Id\u00e9zet","help_desc":"Seg\u00edts\u00e9g","newdocument_desc":"\u00daj dokumentum","image_props_desc":"K\u00e9p tulajdons\u00e1gai","paste_desc":"Besz\u00far\u00e1s (Ctrl V)","copy_desc":"M\u00e1sol\u00e1s (Ctrl C)","cut_desc":"Kiv\u00e1g\u00e1s (Ctrl X) ","anchor_desc":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","visualaid_desc":"Vezet\u0151vonalak/nem l\u00e1that\u00f3 elemek ki-/bekapcsol\u00e1sa","charmap_desc":"Speci\u00e1lis karakter besz\u00far\u00e1sa","backcolor_desc":"H\u00e1tt\u00e9rsz\u00edn v\u00e1laszt\u00e1sa","forecolor_desc":"Sz\u00f6vegsz\u00edn v\u00e1laszt\u00e1sa","custom1_desc":"Az \u00f6n egyedi le\u00edr\u00e1sa","removeformat_desc":"Form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","hr_desc":"V\u00edzszintes elv\u00e1laszt\u00f3 vonal besz\u00far\u00e1sa","sup_desc":"Fels\u0151 index","sub_desc":"Als\u00f3 index","code_desc":"HTML forr\u00e1sk\u00f3d szerkeszt\u00e9se","cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","unlink_desc":"Link elt\u00e1vol\u00edt\u00e1sa","link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","indent_desc":"Beh\u00faz\u00e1s n\u00f6vel\u00e9se","outdent_desc":"Beh\u00faz\u00e1s cs\u00f6kkent\u00e9se","numlist_desc":"Sz\u00e1mozott lista besz\u00far\u00e1sa/elt\u00e1vol\u00edt\u00e1sa","bullist_desc":"Felsorol\u00e1s besz\u00far\u00e1sa/elt\u00e1vol\u00edt\u00e1sa","justifyfull_desc":"Sorkiz\u00e1rt","justifyright_desc":"Jobbra z\u00e1rt","justifycenter_desc":"K\u00f6z\u00e9pre z\u00e1rt","justifyleft_desc":"Balra z\u00e1rt","striketrough_desc":"\u00c1th\u00fazott","help_shortcut":"Ugr\u00e1s az eszk\u00f6zt\u00e1rhoz: ALT-F10. Seg\u00edts\u00e9g: ALT-0.","rich_text_area":"Rich Text ter\u00fclet","shortcuts_desc":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3",toolbar:"Eszk\u00f6zt\u00e1r","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu_dlg.js new file mode 100644 index 0000000..4322cb6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/hu_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.advanced_dlg',{"link_list":"Link lista","link_is_external":"A be\u00edrt internet c\u00edm k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http:// el\u0151taggal kieg\u00e9sz\u00edteni?","link_is_email":"A be\u00edrt internet c\u00edm e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto: el\u0151taggal kieg\u00e9sz\u00edteni?","link_titlefield":"C\u00edm","link_target_blank":"Hivatkoz\u00e1s megnyit\u00e1sa \u00faj ablakban","link_target_same":"Hivatkoz\u00e1s megnyit\u00e1sa ugyanabban az ablakban","link_target":"Hivatkoz\u00e1s c\u00e9lja","link_url":"Internet c\u00edm","link_title":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","image_align_right":"Jobbra","image_align_left":"Balra","image_align_textbottom":"Sz\u00f6veg alj\u00e1hoz","image_align_texttop":"Sz\u00f6veg tetej\u00e9hez","image_align_bottom":"Lentre","image_align_middle":"K\u00f6z\u00e9pre","image_align_top":"Fentre","image_align_baseline":"Alapvonalhoz","image_align":"Igaz\u00edt\u00e1s","image_hspace":"V\u00edzszintes t\u00e1v","image_vspace":"F\u00fcgg\u0151leges t\u00e1v","image_dimensions":"M\u00e9retek","image_alt":"K\u00e9p le\u00edr\u00e1s","image_list":"K\u00e9p lista","image_border":"Keret","image_src":"K\u00e9p URL","image_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","charmap_title":"Speci\u00e1lis karakter v\u00e1laszt\u00e1sa","colorpicker_name":"N\u00e9v:","colorpicker_color":"Sz\u00edn:","colorpicker_named_title":"Elnevezett sz\u00ednek","colorpicker_named_tab":"Elnevezett","colorpicker_palette_title":"Paletta sz\u00ednek","colorpicker_palette_tab":"Paletta","colorpicker_picker_title":"Sz\u00ednv\u00e1laszt\u00f3","colorpicker_picker_tab":"V\u00e1laszt\u00f3","colorpicker_title":"Sz\u00ednv\u00e1laszt\u00e1s","code_wordwrap":"Sz\u00f6veg t\u00f6rdel\u00e9se","code_title":"HTML forr\u00e1s szerkeszt\u00e9se","anchor_name":"Horgonyn\u00e9v","anchor_title":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","about_loaded":"Bet\u00f6lt\u00f6tt pluginok","about_version":"Verzi\u00f3","about_author":"Szerz\u0151","about_plugin":"Plugin","about_plugins":"Pluginok","about_license":"Licensz","about_help":"Seg\u00edts\u00e9g","about_general":"R\u00f3lunk","about_title":"A TinyMCE-r\u0151l","charmap_usage":"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat.","anchor_invalid":"Adjon meg egy helyes horgony nevet.","accessibility_help":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3","accessibility_usage_title":"\u00c1ltal\u00e1nos haszn\u00e1lat","invalid_color_value":"\u00c9rv\u00e9nytelen sz\u00edn \u00e9rt\u00e9k"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it.js new file mode 100644 index 0000000..af84c79 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.advanced',{"underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)",dd:"Descrizione definizione",dt:"Termine definizione",samp:"Esempio codice",code:"Codice",blockquote:"Testo quotato",h6:"Intestazione 6",h5:"Intestazione 5",h4:"Intestazione 4",h3:"Intestazione 3",h2:"Intestazione 2",h1:"Intestazione 1",pre:"Preformattato",address:"Indirizzo",div:"Div",paragraph:"Paragrafo",block:"Formato",fontdefault:"Famiglia carattere","font_size":"Grandezza carattere","style_select":"Stili","anchor_delta_height":"anchor_delta_height","anchor_delta_width":"anchor_delta_width","charmap_delta_height":"charmap_delta_height","charmap_delta_width":"charmap_delta_width","colorpicker_delta_height":"colorpicker_delta_height","colorpicker_delta_width":"colorpicker_delta_width","link_delta_height":"link_delta_height","link_delta_width":"link_delta_width","image_delta_height":"image_delta_height","image_delta_width":"image_delta_width","more_colors":"Colori aggiuntivi","toolbar_focus":"Vai ai pulsanti strumento - Alt+Q, Vai all\'editor - Alt-Z, Vai al percorso dell\'elemento - Alt-X",newdocument:"Sei sicuro di voler cancellare tutti i contenuti?",path:"Percorso","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox..\nSi desidera avere maggiori informazioni su questo problema?","blockquote_desc":"Testo quotato","help_desc":"Aiuto","newdocument_desc":"Nuovo documento","image_props_desc":"Propriet\u00e0 immagine","paste_desc":"Incolla","copy_desc":"Copia","cut_desc":"Taglia","anchor_desc":"Inserisci/modifica ancora","visualaid_desc":"Mostra/nascondi linee guida/elementi invisibili","charmap_desc":"Inserisci carattere speciale","backcolor_desc":"Seleziona colore sfondo","forecolor_desc":"Seleziona colore testo","custom1_desc":"La tua descrizione personalizzata qui","removeformat_desc":"Rimuovi formattazione","hr_desc":"Inserisci riga orizzontale","sup_desc":"Apice","sub_desc":"Pedice","code_desc":"Modifica sorgente HTML","cleanup_desc":"Pulisci codice disordinato","image_desc":"Inserisci/modifica immagine","unlink_desc":"Togli collegamento","link_desc":"Inserisci/modifica collegamento","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","indent_desc":"Sposta verso interno","outdent_desc":"Sposta verso esterno","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","justifyfull_desc":"Giustifica","justifyright_desc":"Allinea a destra","justifycenter_desc":"Centra","justifyleft_desc":"Allinea a sinistra","striketrough_desc":"Barrato","help_shortcut":"Premi ALT-F10 Per la barra degli strumenti. Premi ALT-0 per l\'aiuto","rich_text_area":"Rich Text Area","shortcuts_desc":"Aiuto accessibilit\u00e0",toolbar:"Barra degli strumenti"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it_dlg.js new file mode 100644 index 0000000..9fc5380 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/it_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.advanced_dlg',{"link_list":"Lista link","link_is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","link_is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?","link_titlefield":"Titolo","link_target_blank":"Apri link in una nuova finestra","link_target_same":"Apri link nella stessa finestra","link_target":"Target","link_url":"URL link","link_title":"Inserisci/modifica collegamento","image_align_right":"A destra","image_align_left":"A sinistra","image_align_textbottom":"In basso al testo","image_align_texttop":"In alto al testo","image_align_bottom":"In basso","image_align_middle":"In mezzo","image_align_top":"In alto","image_align_baseline":"Alla base","image_align":"Allineamento","image_hspace":"Spaziatura orizz.","image_vspace":"Spaziatura vert.","image_dimensions":"Dimensioni","image_alt":"Descrizione","image_list":"Lista immagini","image_border":"Bordo","image_src":"URL immagine","image_title":"Inserisci/modifica immagine","charmap_title":"Seleziona carattere speciale","colorpicker_name":"Nome:","colorpicker_color":"Colore:","colorpicker_named_title":"Colori per nome","colorpicker_named_tab":"Per nome","colorpicker_palette_title":"Tavolozza dei colori","colorpicker_palette_tab":"Tavolozza","colorpicker_picker_title":"Selettore colori","colorpicker_picker_tab":"Selettore","colorpicker_title":"Seleziona un colore","code_wordwrap":"A capo automatico","code_title":"Editor sorgente HTML","anchor_name":"Nome ancora","anchor_title":"Inserisci/modifica ancora","about_loaded":"Plugin caricati","about_version":"Versione","about_author":"Autore","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licenza","about_help":"Aiuto","about_general":"Informazioni","about_title":"Informazioni su TinyMCE","charmap_usage":"Utilizza le freccie sinistra e destra per navigare.","anchor_invalid":"Specificare un nome di ancora valido.","accessibility_help":"Guida accessibilit\u00e0","accessibility_usage_title":"Uso generale","invalid_color_value":"Colore non valido"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja.js new file mode 100644 index 0000000..f5533c5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.advanced',{"underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)",dd:"\u8a9e\u53e5\u306e\u8aac\u660e",dt:"\u8a9e\u53e5\u306e\u5b9a\u7fa9",samp:"\u30b3\u30fc\u30c9\u306e\u4f8b",code:"\u30b3\u30fc\u30c9",blockquote:"\u5f15\u7528",h6:"\u898b\u51fa\u30576",h5:"\u898b\u51fa\u30575",h4:"\u898b\u51fa\u30574",h3:"\u898b\u51fa\u30573",h2:"\u898b\u51fa\u30572",h1:"\u898b\u51fa\u30571",pre:"\u6574\u5f62\u6e08\u307f",address:"\u4f4f\u6240",div:"div\u8981\u7d20",paragraph:"\u6bb5\u843d",block:"\u66f8\u5f0f",fontdefault:"\u30d5\u30a9\u30f3\u30c8","font_size":"\u30d5\u30a9\u30f3\u30c8\u306e\u5927\u304d\u3055","style_select":"\u30b9\u30bf\u30a4\u30eb","more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","toolbar_focus":"\u30c4\u30fc\u30eb\u30dc\u30bf\u30f3\u3078\u79fb\u52d5 - Alt Q, \u30a8\u30c7\u30a3\u30bf\u306b\u79fb\u52d5 - Alt-Z, \u8981\u7d20\u306e\u30d1\u30b9\u3078\u79fb\u52d5 - Alt-X",newdocument:"\u672c\u5f53\u306b\u3059\u3079\u3066\u306e\u5185\u5bb9\u3092\u6d88\u53bb\u3057\u3066\u3088\u3044\u3067\u3059\u304b?",path:"\u30d1\u30b9","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u77e5\u308a\u305f\u3044\u3067\u3059\u304b?","blockquote_desc":"\u5f15\u7528\u30d6\u30ed\u30c3\u30af","help_desc":"\u30d8\u30eb\u30d7","newdocument_desc":"\u65b0\u3057\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","image_props_desc":"\u753b\u50cf\u306e\u5c5e\u6027","paste_desc":"\u8cbc\u308a\u4ed8\u3051","copy_desc":"\u30b3\u30d4\u30fc","cut_desc":"\u5207\u308a\u53d6\u308a","anchor_desc":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165/\u7de8\u96c6","visualaid_desc":"\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3068\u975e\u8868\u793a\u8981\u7d20\u306e\u8868\u793a\u3092\u5207\u66ff","charmap_desc":"\u7279\u6b8a\u6587\u5b57","backcolor_desc":"\u80cc\u666f\u306e\u8272","forecolor_desc":"\u6587\u5b57\u306e\u8272","custom1_desc":"\u8aac\u660e\u6587\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002","removeformat_desc":"\u66f8\u5f0f\u306e\u524a\u9664","hr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","sup_desc":"\u4e0a\u4ed8\u304d\u6587\u5b57","sub_desc":"\u4e0b\u4ed8\u304d\u6587\u5b57","code_desc":"HTML\u306e\u30bd\u30fc\u30b9\u3092\u7de8\u96c6","cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","image_desc":"\u753b\u50cf\u306e\u633f\u5165/\u7de8\u96c6","unlink_desc":"\u30ea\u30f3\u30af\u3092\u89e3\u9664","link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","indent_desc":"\u5b57\u4e0b\u3052\u3092\u5897\u3084\u3059","outdent_desc":"\u5b57\u4e0b\u3052\u3092\u6e1b\u3089\u3059","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","justifyfull_desc":"\u5747\u7b49\u5272\u4ed8","justifyright_desc":"\u53f3\u63c3\u3048","justifycenter_desc":"\u4e2d\u592e\u63c3\u3048","justifyleft_desc":"\u5de6\u63c3\u3048","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","help_shortcut":"ALT-F10 \u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0 \u3067\u30d8\u30eb\u30d7","rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2","shortcuts_desc":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7",toolbar:"\u30c4\u30fc\u30eb\u30d0\u30fc","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja_dlg.js new file mode 100644 index 0000000..234fb71 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ja_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.advanced_dlg',{"link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","link_is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_titlefield":"\u30bf\u30a4\u30c8\u30eb","link_target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target_same":"\u540c\u3058\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target":"\u30bf\u30fc\u30b2\u30c3\u30c8","link_url":"\u30ea\u30f3\u30af\u306eURL","link_title":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","image_align_right":"\u53f3\u63c3\u3048","image_align_left":"\u5de6\u63c3\u3048","image_align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0b\u7aef\u63c3\u3048","image_align_texttop":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0a\u7aef\u63c3\u3048","image_align_bottom":"\u4e0b\u63c3\u3048","image_align_middle":"\u4e2d\u592e\u63c3\u3048","image_align_top":"\u4e0a\u63c3\u3048","image_align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048","image_align":"\u914d\u7f6e","image_hspace":"\u5de6\u53f3\u306e\u4f59\u767d","image_vspace":"\u4e0a\u4e0b\u306e\u4f59\u767d","image_dimensions":"\u5bf8\u6cd5","image_alt":"\u753b\u50cf\u306e\u8aac\u660e","image_list":"\u753b\u50cf\u306e\u4e00\u89a7","image_border":"\u67a0\u7dda","image_src":"\u753b\u50cf\u306eURL","image_title":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","charmap_title":"\u7279\u6b8a\u6587\u5b57","colorpicker_name":"\u540d\u524d:","colorpicker_color":"\u8272:","colorpicker_named_title":"\u5b9a\u7fa9\u6e08\u307f\u306e\u8272","colorpicker_named_tab":"\u5b9a\u7fa9\u6e08\u307f","colorpicker_palette_title":"\u30d1\u30ec\u30c3\u30c8\u306e\u8272","colorpicker_palette_tab":"\u30d1\u30ec\u30c3\u30c8","colorpicker_picker_title":"\u8272\u9078\u629e","colorpicker_picker_tab":"\u9078\u629e","colorpicker_title":"\u8272\u3092\u9078\u629e","code_wordwrap":"\u884c\u306e\u6298\u308a\u8fd4\u3057","code_title":"HTML\u306e\u30bd\u30fc\u30b9\u30a8\u30c7\u30a3\u30bf","anchor_name":"\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d","anchor_title":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165\u3084\u7de8\u96c6","about_loaded":"\u8aad\u307f\u8fbc\u307f\u6e08\u307f\u306e\u30d7\u30e9\u30b0\u30a4\u30f3","about_version":"\u30d0\u30fc\u30b8\u30e7\u30f3","about_author":"\u4f5c\u6210\u8005","about_plugin":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_plugins":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_license":"\u30e9\u30a4\u30bb\u30f3\u30b9","about_help":"\u30d8\u30eb\u30d7","about_general":"TinyMCE\u306b\u3064\u3044\u3066","about_title":"TinyMCE\u306b\u3064\u3044\u3066","charmap_usage":"\u5de6\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u3066\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002","anchor_invalid":"\u6709\u52b9\u306a\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002","accessibility_help":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7","accessibility_usage_title":"\u5168\u822c\u7684\u306a\u4f7f\u3044\u65b9","invalid_color_value":"\u7121\u52b9\u306a\u5024"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl.js new file mode 100644 index 0000000..3ef2c14 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.advanced',{"underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)",dd:"Definitiebeschrijving",dt:"Definitieterm",samp:"Codevoorbeeld",code:"Code",blockquote:"Citaat",h6:"Kop 6",h5:"Kop 5",h4:"Kop 4",h3:"Kop 3",h2:"Kop 2",h1:"Kop 1",pre:"Vaste opmaak",address:"Adres",div:"Div",paragraph:"Alinea",block:"Opmaak",fontdefault:"Lettertype","font_size":"Tekengrootte","style_select":"Stijlen","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"Meer kleuren","toolbar_focus":"Spring naar werkbalk - Alt+Q, Spring naar tekst - Alt-Z, Spring naar elementpad - Alt-X",newdocument:"Weet u zeker dat u alle inhoud wilt wissen?",path:"Pad","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","blockquote_desc":"Citaat","help_desc":"Help","newdocument_desc":"Nieuw document","image_props_desc":"Afbeeldingseigenschappen","paste_desc":"Plakken","copy_desc":"Kopi\u00ebren","cut_desc":"Knippen","anchor_desc":"Anker invoegen/bewerken","visualaid_desc":"Hulplijnen weergeven","charmap_desc":"Symbool invoegen","backcolor_desc":"Tekstmarkeringskleur","forecolor_desc":"Tekstkleur","custom1_desc":"Uw eigen beschrijving hier","removeformat_desc":"Opmaak verwijderen","hr_desc":"Scheidingslijn invoegen","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"HTML bron bewerken","cleanup_desc":"Code opruimen","image_desc":"Afbeelding invoegen/bewerken","unlink_desc":"Link verwijderen","link_desc":"Link invoegen/bewerken","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","indent_desc":"Inspringing vergroten","outdent_desc":"Inspringing verkleinen","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","justifyfull_desc":"Uitvullen","justifyright_desc":"Rechts uitlijnen","justifycenter_desc":"Centreren","justifyleft_desc":"Links uitlijnen","striketrough_desc":"Doorhalen","help_shortcut":"Druk op ALT-F10 voor de werkbalk. Druk op ALT-0 voor hulp.","rich_text_area":"Rich Text Zone","shortcuts_desc":"Toegankelijkheid Help",toolbar:"Werkbalk"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl_dlg.js new file mode 100644 index 0000000..615a5e8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/nl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.advanced_dlg',{"link_list":"Link lijst","link_is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","link_is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?","link_titlefield":"Titel","link_target_blank":"Link in een nieuw venster openen","link_target_same":"Link in hetzelfde venster openen","link_target":"Doel","link_url":"Link URL","link_title":"Link invoegen/bewerken","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Onderkant tekst","image_align_texttop":"Bovenkant tekst","image_align_bottom":"Onder","image_align_middle":"Midden","image_align_top":"Boven","image_align_baseline":"Basislijn","image_align":"Uitlijning","image_hspace":"Horizontale ruimte","image_vspace":"Verticale ruimte","image_dimensions":"Afmetingen","image_alt":"Beschrijving","image_list":"Lijst","image_border":"Rand","image_src":"Bestand/URL","image_title":"Afbeelding invoegen/bewerken","charmap_title":"Symbolen","colorpicker_name":"Naam:","colorpicker_color":"Kleur:","colorpicker_named_title":"Benoemde kleuren","colorpicker_named_tab":"Benoemd","colorpicker_palette_title":"Paletkleuren","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Alle kleuren","colorpicker_picker_tab":"Alle kleuren","colorpicker_title":"Kleuren","code_wordwrap":"Automatische terugloop","code_title":"HTML Bron","anchor_name":"Ankernaam","anchor_title":"Anker invoegen/bewerken","about_loaded":"Geladen Invoegtoepassingen","about_version":"Versie","about_author":"Auteur","about_plugin":"Invoegtoepassing","about_plugins":"Invoegtoepassingen","about_license":"Licentie","about_help":"Help","about_general":"Info","about_title":"Over TinyMCE","charmap_usage":"Gebruik linker en rechter pijltjestoetsen om te navigeren.","anchor_invalid":"Geef een geldige ankernaam.","accessibility_help":"Hulp m.b.t. Toegankelijkheid","accessibility_usage_title":"Algemeen Gebruik","invalid_color_value":"Ongeldige kleur code"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl.js new file mode 100644 index 0000000..f7348f1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.advanced',{"underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)",dd:"Opis terminu",dt:"Definicja terminu ",samp:"Pr\u00f3bka kodu",code:"Kod",blockquote:"Wydzielony blok",h6:"Nag\u0142\u00f3wek 6",h5:"Nag\u0142\u00f3wek 5",h4:"Nag\u0142\u00f3wek 4",h3:"Nag\u0142\u00f3wek 3",h2:"Nag\u0142\u00f3wek 2",h1:"Nag\u0142\u00f3wek 1",pre:"Czcionka o sta\u0142ej szeroko\u015bci",address:"Adres",div:"Div",paragraph:"Akapit",block:"Format",fontdefault:"Rodzaj czcionki","font_size":"Rozmiar czcionki","style_select":"Styl","more_colors":"Wi\u0119cej kolor\u00f3w...","toolbar_focus":"Przeskocz do przycisk\u00f3w narz\u0119dzi - Alt+Q, Przeskocz do edytora - Alt-Z, Przeskocz do elementu \u015bcie\u017cki - Alt-X",newdocument:"Czy jeste\u015b pewnien, ze chcesz wyczy\u015bci\u0107 ca\u0142\u0105 zawarto\u015b\u0107?",path:"\u015acie\u017cka","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","blockquote_desc":"Blok cytatu","help_desc":"Pomoc","newdocument_desc":"Nowy dokument","image_props_desc":"W\u0142a\u015bciwo\u015bci obrazka","paste_desc":"Wklej (Ctrl V)","copy_desc":"Kopiuj (Ctrl C)","cut_desc":"Wytnij (Ctrl X)","anchor_desc":"Wstaw/edytuj kotwic\u0119","visualaid_desc":"Prze\u0142\u0105cz widoczno\u015b\u0107 wska\u017anik\u00f3w i niewidocznych element\u00f3w","charmap_desc":"Wstaw znak specjalny","backcolor_desc":"Wybierz kolor t\u0142a","forecolor_desc":"Wybierz kolor tekstu","custom1_desc":"Tw\u00f3j niestandardowy opis tutaj","removeformat_desc":"Usu\u0144 formatowanie","hr_desc":"Wstaw poziom\u0105 lini\u0119","sup_desc":"Indeks g\u00f3rny","sub_desc":"Indeks dolny","code_desc":"Edytuj \u017ar\u00f3d\u0142o HTML","cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","image_desc":"Wstaw/edytuj obraz","unlink_desc":"Usu\u0144 link","link_desc":"Wstaw/edytuj link","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","indent_desc":"Wci\u0119cie","outdent_desc":"Cofnij wci\u0119cie","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","justifyfull_desc":"R\u00f3wnanie do prawej i lewej","justifyright_desc":"Wyr\u00f3wnaj do prawej","justifycenter_desc":"Wycentruj","justifyleft_desc":"Wyr\u00f3wnaj do lewej","striketrough_desc":"Przekre\u015blenie","help_shortcut":"Wci\u015bnij Alt F10 aby pokaza\u0107 pasek narz\u0119dzi. Wci\u015bnij Alt 0 aby otworzy\u0107 pomoc","rich_text_area":"Pole tekstowe","shortcuts_desc":"Pomoc dost\u0119pno\u015bci",toolbar:"Pasek narz\u0119dzi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl_dlg.js new file mode 100644 index 0000000..e1ba93c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pl_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.advanced_dlg',{"link_list":"Lista link\u00f3w","link_is_external":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http:// ?","link_is_email":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 adresem mailowym, czy chcesz doda\u0107 odpowiedni prefiks mailto:?","link_titlefield":"Tytu\u0142","link_target_blank":"Otw\u00f3rz link w nowym oknie","link_target_same":"Otw\u00f3rz link w tym samym oknie","link_target":"Cel","link_url":"URL linka","link_title":"Wstaw/edytuj link","image_align_right":"Prawy","image_align_left":"Lewy","image_align_textbottom":"Dolny tekst","image_align_texttop":"G\u00f3rny tekst","image_align_bottom":"D\u00f3\u0142","image_align_middle":"\u015arodek","image_align_top":"G\u00f3ra","image_align_baseline":"Linia bazowa","image_align":"Wyr\u00f3wnanie","image_hspace":"Odst\u0119p poziomy","image_vspace":"Odst\u0119p pionowy","image_dimensions":"Rozmiary","image_alt":"Opis obrazka","image_list":"Lista obrazk\u00f3w","image_border":"Obramowanie","image_src":"URL obrazka","image_title":"Wstaw/edytuj obraz","charmap_title":"Wybierz niestandardowy znak","colorpicker_name":"Nazwa:","colorpicker_color":"Kolor:","colorpicker_named_title":"Nazwane kolory","colorpicker_named_tab":"Nazwane","colorpicker_palette_title":"Paleta kolor\u00f3w","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Wybieranie kolor\u00f3w","colorpicker_picker_tab":"Wybieranie","colorpicker_title":"Wybierz kolor","code_wordwrap":"Zawijanie s\u0142\u00f3w","code_title":"Edytor \u017ar\u00f3d\u0142a HTML","anchor_name":"Nazwa zakotwiczenia","anchor_title":"Wstaw/Edytuj zakotwiczenie","about_loaded":"Za\u0142adowane wtyczki","about_version":"Wersja","about_author":"Autor","about_plugin":"Wtyczka","about_plugins":"Wtyczki","about_license":"Licencja","about_help":"Pomoc","about_general":"O TinyMCE","about_title":"O TinyMCE","charmap_usage":"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji.","anchor_invalid":"Prosz\u0119 poda\u0107 w\u0142a\u015bciw\u0105 nazw\u0119 zakotwiczenia.","accessibility_help":"Pomoc dost\u0119pno\u015bci","accessibility_usage_title":"Og\u00f3lne zastosowanie","invalid_color_value":"Nieprawid\u0142owa warto\u015b\u0107 koloru"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt.js new file mode 100644 index 0000000..48d17b1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.advanced',{"underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)",dd:"Descri\u00e7\u00e3o da defini\u00e7\u00e3o",dt:"Termo da defini\u00e7\u00e3o",samp:"Amostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita\u00e7\u00e3o em bloco",h6:"T\u00edtulo 6",h5:"T\u00edtulo 5",h4:"T\u00edtulo 4",h3:"T\u00edtulo 3",h2:"T\u00edtulo 2",h1:"T\u00edtulo 1",pre:"Pr\u00e9-formatado",address:"Endere\u00e7o",div:"Div",paragraph:"Par\u00e1grafo",block:"Formata\u00e7\u00e3o",fontdefault:"Tipo de fonte","font_size":"Tamanho","style_select":"Estilos","anchor_delta_width":"30","link_delta_height":"25","link_delta_width":"50","more_colors":"Mais cores","toolbar_focus":"Ir para as ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para o endere\u00e7o do elemento - Alt-X",newdocument:"Tem a certeza que deseja apagar tudo?",path:"Endere\u00e7o","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","blockquote_desc":"Cita\u00e7\u00e3o em bloco","help_desc":"Ajuda","newdocument_desc":"Novo documento","image_props_desc":"Propriedades da imagem","paste_desc":"Colar","copy_desc":"Copiar","cut_desc":"Recortar","anchor_desc":"Inserir/editar \u00e2ncora","visualaid_desc":"Alternar guias/elementos invis\u00edveis","charmap_desc":"Inserir caracteres especiais","backcolor_desc":"Selecionar a cor de fundo","forecolor_desc":"Selecionar a cor do texto","custom1_desc":"Insira aqui a sua descri\u00e7\u00e3o personalizada","removeformat_desc":"Remover formata\u00e7\u00e3o","hr_desc":"Inserir separador horizontal","sup_desc":"Superior \u00e0 linha","sub_desc":"Inferior \u00e0 linha","code_desc":"Editar c\u00f3digo fonte","cleanup_desc":"Limpar c\u00f3digo incorreto","image_desc":"Inserir/editar imagem","unlink_desc":"Remover hyperlink","link_desc":"Inserir/editar hyperlink","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","indent_desc":"Aumentar recuo","outdent_desc":"Diminuir recuo","numlist_desc":"Numera\u00e7\u00e3o","bullist_desc":"Marcadores","justifyfull_desc":"Justificar","justifyright_desc":"Alinhar \u00e0 direita","justifycenter_desc":"Centralizar","justifyleft_desc":"Alinhar \u00e0 esquerda","striketrough_desc":"Riscado","help_shortcut":"Pressione ALT-F10 para barra de ferramentas. Pressione ALT-0 para ajuda","rich_text_area":"\u00c1rea de edi\u00e7\u00e3o rica","shortcuts_desc":"Ajuda acessibilidade",toolbar:"Barra de ferramentas","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt_dlg.js new file mode 100644 index 0000000..313a012 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/pt_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.advanced_dlg',{"link_list":"Lista de Links","link_is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","link_is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir hyperlink em nova janela","link_target_same":"Abrir hyperlink na mesma janela","link_target":"Alvo","link_url":"URL do hyperink","link_title":"Inserir/editar hyperlink","image_align_right":"Direita","image_align_left":"Esquerda","image_align_textbottom":"Base do texto","image_align_texttop":"Topo do texto","image_align_bottom":"Abaixo","image_align_middle":"Meio","image_align_top":"Topo","image_align_baseline":"Sobre a linha de texto","image_align":"Alinhamento","image_hspace":"Espa\u00e7o Horizontal","image_vspace":"Espa\u00e7o Vertical","image_dimensions":"Dimens\u00f5es","image_alt":"Descri\u00e7\u00e3o da imagem","image_list":"Lista de imagens","image_border":"Limites","image_src":"Endere\u00e7o da imagem","image_title":"Inserir/editar imagem","charmap_title":"Selecionar caracteres personalizados","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores Personalizadas","colorpicker_named_tab":"Personalizadas","colorpicker_palette_title":"Paleta de Cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Editor de Cores","colorpicker_picker_tab":"Editor","colorpicker_title":"Selecione uma cor","code_wordwrap":"Quebra autom\u00e1tica de linha","code_title":"Editor HTML","anchor_name":"Nome da \u00e2ncora","anchor_title":"Inserir/editar \u00e2ncora","about_loaded":"Plugins Instalados","about_version":"Vers\u00e3o","about_author":"Autor","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licen\u00e7a","about_help":"Ajuda","about_general":"Sobre","about_title":"Sobre o TinyMCE","charmap_usage":"Use as setas esquerda e direita para navegar.","anchor_invalid":"Por favor, especifique um nome v\u00e1lido de \u00e2ncora.","accessibility_help":"Ajuda de Acessibilidade","accessibility_usage_title":"Uso Geral","invalid_color_value":"Valor da cor inv\u00e1lido"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru.js new file mode 100644 index 0000000..5dcf47a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.advanced',{"underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)",dd:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",dt:"\u0422\u0435\u0440\u043c\u0438\u043d \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",samp:"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439",address:"\u0410\u0434\u0440\u0435\u0441",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440","style_select":"\u0421\u0442\u0438\u043b\u044c","more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a (Alt+Q). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 (Alt+Z). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043f\u0443\u0442\u0438 (Alt+X).",newdocument:"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c?",path:"\u0422\u0435\u0433\u0438","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u041f\u043e\u043c\u043e\u0449\u044c","newdocument_desc":"\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","cut_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c","anchor_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u043a\u043e\u0440\u044c","visualaid_desc":"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438","charmap_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430","forecolor_desc":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","custom1_desc":"\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442","hr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0442\u0443","sup_desc":"\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","sub_desc":"\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","code_desc":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","unlink_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","indent_desc":"\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","outdent_desc":"\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","help_shortcut":"\u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.","rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438",toolbar:"\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru_dlg.js new file mode 100644 index 0000000..c55d34a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/ru_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?","link_titlefield":"\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430","link_target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","link_target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435","link_target":"\u0426\u0435\u043b\u044c","link_url":"\u0410\u0434\u0440\u0435\u0441","link_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438","image_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440","image_alt":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","image_border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441","image_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","charmap_title":"\u0412\u044b\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u0430","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:","colorpicker_color":"\u041a\u043e\u0434:","colorpicker_named_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_named_tab":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f","colorpicker_palette_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_palette_tab":"\u041f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_picker_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_picker_tab":"\u0421\u043f\u0435\u043a\u0442\u0440","colorpicker_title":"\u0426\u0432\u0435\u0442\u0430","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0430","anchor_name":"\u0418\u043c\u044f \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u043a\u043e\u0440\u044f","about_loaded":"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b","about_version":"\u0412\u0435\u0440\u0441\u0438\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u041f\u043b\u0430\u0433\u0438\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u044b","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f","about_help":"\u041f\u043e\u043c\u043e\u0449\u044c","about_general":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","about_title":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 TinyMCE","charmap_usage":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.","anchor_invalid":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u044f\u043a\u043e\u0440\u044f.","accessibility_help":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438","accessibility_usage_title":"\u041e\u0431\u0449\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435","invalid_color_value":"\u041d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv.js new file mode 100644 index 0000000..9a20833 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.advanced',{"underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definitionsbeskrivning",dt:"Definitionsterm",samp:"Kodexempel",code:"Kodblock",blockquote:"Blockcitat",h6:"Rubrik 6",h5:"Rubrik 5",h4:"Rubrik 4",h3:"Rubrik 3",h2:"Rubrik 2",h1:"Rubrik 1",pre:"F\u00f6rformaterad",address:"Adress",div:"Div",paragraph:"Stycke",block:"Format",fontdefault:"Teckensnitt","font_size":"Teckenstorlek","style_select":"Stilar","more_colors":"Mer f\u00e4rger","toolbar_focus":"Hoppa till verktygsf\u00e4ltet - Alt+Q, Hoppa till redigeraren - Alt-Z, Hoppa till elementlistan - Alt-X",newdocument:"\u00c4r du s\u00e4ker p\u00e5 att du vill radera allt inneh\u00e5ll?",path:"Element","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer om detta?","blockquote_desc":"Blockcitat","help_desc":"Hj\u00e4lp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildinst\u00e4llningar","paste_desc":"Klistra in","copy_desc":"Kopiera","cut_desc":"Klipp ut","anchor_desc":"Infoga/redigera bokm\u00e4rke","visualaid_desc":"Visa/d\u00f6lj visuella hj\u00e4lpmedel","charmap_desc":"Infoga specialtecken","backcolor_desc":"V\u00e4lj bakgrundsf\u00e4rg","forecolor_desc":"V\u00e4lj textf\u00e4rg","custom1_desc":"Din beskrivning h\u00e4r","removeformat_desc":"Ta bort formatering","hr_desc":"Infoga horisontell skiljelinje","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Redigera HTML k\u00e4llkoden","cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","image_desc":"Infoga/redigera bild","unlink_desc":"Ta bort l\u00e4nk","link_desc":"Infoga/redigera l\u00e4nk","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","indent_desc":"Indrag","outdent_desc":"Drag tillbaka","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","justifyfull_desc":"Justera","justifyright_desc":"H\u00f6gerst\u00e4lld","justifycenter_desc":"Centrera","justifyleft_desc":"V\u00e4nsterst\u00e4lld","striketrough_desc":"Genomstruken","help_shortcut":"Alt-F10 f\u00f6r verktygsf\u00e4lt. Alt-0 f\u00f6r hj\u00e4lp.","rich_text_area":"Redigeringsarea","shortcuts_desc":"Hj\u00e4lp f\u00f6r funktionshindrade",toolbar:"Verktygsf\u00e4lt","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv_dlg.js new file mode 100644 index 0000000..f2da940 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/sv_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.advanced_dlg',{"link_list":"L\u00e4nklista","link_is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","link_is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?","link_titlefield":"Titel","link_target_blank":"\u00d6\u0096ppna l\u00e4nken i ett nytt f\u00f6nster","link_target_same":"\u00d6\u0096ppna l\u00e4nken i samma f\u00f6nster","link_target":"M\u00e5l","link_url":"L\u00e4nkens URL","link_title":"Infoga/redigera l\u00e4nk","image_align_right":"H\u00f6ger","image_align_left":"V\u00e4nster","image_align_textbottom":"Botten av texten","image_align_texttop":"Toppen av texten","image_align_bottom":"Botten","image_align_middle":"Mitten","image_align_top":"Toppen","image_align_baseline":"Baslinje","image_align":"Justering","image_hspace":"Horisontalrymd","image_vspace":"Vertikalrymd","image_dimensions":"Dimensioner","image_alt":"Bildens beskrivning","image_list":"Bildlista","image_border":"Ram","image_src":"Bildens URL","image_title":"Infoga/redigera bild","charmap_title":"V\u00e4lj ett specialtecken","colorpicker_name":"Namn:","colorpicker_color":"F\u00e4rg:","colorpicker_named_title":"Namngivna f\u00e4rger","colorpicker_named_tab":"Namngivna","colorpicker_palette_title":"Palettf\u00e4rger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"F\u00e4rgv\u00e4ljare","colorpicker_picker_tab":"V\u00e4ljare","colorpicker_title":"V\u00e4lj en f\u00e4rg","code_wordwrap":"Bryt ord","code_title":"HTML k\u00e4llkodsl\u00e4ge","anchor_name":"Namn","anchor_title":"Infoga/redigera bokm\u00e4rke","about_loaded":"Laddade plug-ins","about_version":"Version","about_author":"Utvecklare","about_plugin":"Om plug-in","about_plugins":"Om plug-in","about_license":"Licens","about_help":"Hj\u00e4lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera","anchor_invalid":"Skiv ett korrekt ankarnamn.","accessibility_help":"Tillg\u00e4nglighets hj\u00e4lp","accessibility_usage_title":"Generellanv\u00e4ndning","invalid_color_value":"Felaktigt f\u00e4rgv\u00e4rde"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr.js new file mode 100644 index 0000000..e08a86b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.advanced',{"underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)",dd:"A\u00e7\u0131klama tan\u0131mlama",dt:"\u0130fade tan\u0131mlama ",samp:"\u00d6rnek kod",code:"Kod",blockquote:"Blok al\u0131nt\u0131",h6:"Ba\u015fl\u0131k 6",h5:"Ba\u015fl\u0131k 5",h4:"Ba\u015fl\u0131k 4",h3:"Ba\u015fl\u0131k 3",h2:"Ba\u015fl\u0131k 2",h1:"Ba\u015fl\u0131k 1",pre:"\u00d6nceden bi\u00e7imlendirilmi\u015f",address:"Adres",div:"Blok",paragraph:"Paragraf",block:"Bi\u00e7im",fontdefault:"Yaz\u0131 tipi","font_size":"Yaz\u0131 boyutu","style_select":"Stiller","more_colors":"Daha fazla renk","toolbar_focus":"Alt+Q ara\u00e7 d\u00fc\u011fmelerine ge\u00e7. Alt+Z: Edit\u00f6re ge\u00e7. Alt+X:Elementin yoluna ge\u00e7.",newdocument:"T\u00fcm i\u00e7eriklerleri temizlemek istedi\u011finizden emin misiniz?",path:"Yol","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r kullan\u0131lamaz. Bu konu hakk\u0131nda daha fazla bilgi almak ister misiniz?","blockquote_desc":"Blok al\u0131nt\u0131","help_desc":"Yard\u0131m","newdocument_desc":"Bo\u015f belge","image_props_desc":"Resim \u00f6zellikleri","paste_desc":"Yap\u0131\u015ft\u0131r","copy_desc":"Kopyala","cut_desc":"Kes","anchor_desc":"K\u00f6pr\u00fc ekle/d\u00fczenle","visualaid_desc":"K\u0131lavuz/g\u00f6r\u00fcnmez nesneleri a\u00e7/kapat.","charmap_desc":"\u00d6zel karakter ekle","backcolor_desc":"Arkaplan rengini se\u00e7","forecolor_desc":"Metin rengini se\u00e7","custom1_desc":"\u00d6zel a\u00e7\u0131klamalar burada","removeformat_desc":"Bi\u00e7imi temizle","hr_desc":"Yatay cetvel ekle","sup_desc":"\u00dcstsimge","sub_desc":"Altsimge","code_desc":"HTML Kayna\u011f\u0131n\u0131 D\u00fczenle","cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","image_desc":"Resim ekle/d\u00fczenle","unlink_desc":"Ba\u011flant\u0131y\u0131 kald\u0131r","link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","indent_desc":"Girintiyi art\u0131r","outdent_desc":"Girintiyi azalt","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","justifyfull_desc":"\u0130ki yana yasla","justifyright_desc":"Sa\u011fa hizala","justifycenter_desc":"Ortala","justifyleft_desc":"Sola hizala","striketrough_desc":"\u00dcst\u00fc \u00e7izili","help_shortcut":"Toolbar i\u00e7in ALT-F10 a bas\u0131n. Yard\u0131m i\u00e7in ALT-0 a bas\u0131n.","rich_text_area":"Zengin Metin Alan\u0131","shortcuts_desc":"Eri\u015filebilirlik Yard\u0131m\u0131",toolbar:"Toolbar","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr_dlg.js new file mode 100644 index 0000000..0994148 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/tr_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.advanced_dlg',{"link_list":"Ba\u011flant\u0131 listesi","link_is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","link_is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?","link_titlefield":"Ba\u015fl\u0131k","link_target_blank":"Ba\u011flant\u0131y\u0131 yeni pencerede a\u00e7","link_target_same":"Ba\u011flant\u0131y\u0131 ayn\u0131 pencerede a\u00e7","link_target":"Hedef","link_url":"Ba\u011flant\u0131 URL\'si","link_title":"Ba\u011flant\u0131 ekle/d\u00fczenle","image_align_right":"Sa\u011f","image_align_left":"Sol","image_align_textbottom":"Metin altta","image_align_texttop":"Metin \u00fcstte","image_align_bottom":"Alt","image_align_middle":"Orta","image_align_top":"\u00dcst","image_align_baseline":"Taban hizas\u0131","image_align":"Hizalama","image_hspace":"Yatay bo\u015fluk","image_vspace":"Dikey bo\u015fluk","image_dimensions":"Boyutlar","image_alt":"Resim a\u00e7\u0131klamas\u0131","image_list":"Resim listesi","image_border":"Kenarl\u0131k","image_src":"Resmin URL\'si","image_title":"Resim ekle/d\u00fczenle","charmap_title":"\u00d6zel karakter se\u00e7","colorpicker_name":"\u0130sim:","colorpicker_color":"Renk:","colorpicker_named_title":"Renk ad\u0131","colorpicker_named_tab":"Ad\u0131","colorpicker_palette_title":"Renk paleti","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Renk se\u00e7ici","colorpicker_picker_tab":"Se\u00e7ici","colorpicker_title":"Renk se\u00e7","code_wordwrap":"Kelimeleri birlikte tut","code_title":"HTML Kaynak Edit\u00f6r\u00fc","anchor_name":"K\u00f6pr\u00fc ad\u0131","anchor_title":"K\u00f6pr\u00fc ekle/d\u00fczenle","about_loaded":"Y\u00fckl\u00fc eklentiler","about_version":"Versiyon","about_author":"Yazar","about_plugin":"Eklenti","about_plugins":"Eklentiler","about_license":"Lisans","about_help":"Yard\u0131m","about_general":"Hakk\u0131nda","about_title":"TinyMCE hakk\u0131nda","charmap_usage":"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n.","anchor_invalid":"L\u00fctfen ge\u00e7erli bir k\u00f6pr\u00fc ad\u0131 giriniz","accessibility_help":"Eri\u015febilirlik Yard\u0131m\u0131","accessibility_usage_title":"Genel Kullan\u0131m","invalid_color_value":"Ge\u00e7ersiz renk de\u011feri"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk.js new file mode 100644 index 0000000..9988c60 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.advanced',{"underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)",dd:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u043e\u043f\u0438\u0441 ",dt:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u0442\u0435\u0440\u043c\u0456\u043d ",samp:"\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439",address:"\u0421\u0442\u0438\u043b\u044c \u0430\u0434\u0440\u0435\u0441\u0438",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443","style_select":"\u0421\u0442\u0438\u043b\u0456","more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a - Alt+Q, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 - Alt-Z, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0448\u043b\u044f\u0445\u0443 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443 - Alt-X",newdocument:"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0435 \u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438?",path:"\u0428\u043b\u044f\u0445","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0432 Mozilla \u0438 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","newdocument_desc":"\u041d\u043e\u0432\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","copy_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","cut_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438","anchor_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","visualaid_desc":"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0456/\u043f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","forecolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","custom1_desc":"\u0412\u0430\u0448 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u043e\u043f\u0438\u0441 \u0442\u0443\u0442","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","hr_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","sup_desc":"\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","sub_desc":"\u041d\u0438\u0436\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","unlink_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","indent_desc":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","outdent_desc":"\u0417\u043c\u0435\u043d\u0448\u0442\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","help_shortcut":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT F10 \u0434\u043b\u044f \u0442\u0443\u043b\u0431\u0430\u0440\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT 0 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438","rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456",toolbar:"\u0422\u0443\u043b\u0431\u0430\u0440","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk_dlg.js new file mode 100644 index 0000000..89e0031 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/uk_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","link_target_blank":"\u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","link_target_same":"\u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456","link_target":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432","link_url":"\u0410\u0434\u0440\u0435\u0441\u0430 ","link_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457","image_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u043e\u0437\u043c\u0456\u0440\u0438","image_alt":"\u041e\u043f\u0438\u0441","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","image_border":"\u0420\u0430\u043c\u043a\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441\u0430","image_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","charmap_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430:","colorpicker_color":"\u041a\u043e\u043b\u0456\u0440:","colorpicker_named_title":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_named_tab":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_palette_title":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","colorpicker_palette_tab":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430","colorpicker_picker_title":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443","colorpicker_picker_tab":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430","colorpicker_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0438 \u0441\u043b\u043e\u0432\u0430","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0443","anchor_name":"\u041d\u0430\u0437\u0432\u0430 \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","about_loaded":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438","about_version":"\u0412\u0435\u0440\u0441\u0456\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0434\u0430\u0442\u043e\u043a","about_plugins":"\u0414\u043e\u0434\u0430\u0442\u043a\u0438","about_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f","about_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","about_general":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442...","about_title":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442 TinyMCE","charmap_usage":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457","anchor_invalid":"\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435 \u0456\u043c\'\u044f \u0434\u043b\u044f \u044f\u043a\u0456\u0440\u0430.","accessibility_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456","accessibility_usage_title":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f","invalid_color_value":"\u041d\u0435\u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043a\u043e\u043b\u044c\u043e\u0440\u0443"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi.js new file mode 100644 index 0000000..35598f8 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.advanced',{"underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)",dd:"Th\u1ebb M\u00f4 t\u1ea3 \u0111\u1ecbnh ngh\u0129a",dt:"Th\u1ebb \u0110i\u1ec1u kho\u1ea3n \u0111\u1ecbnh ngh\u0129a ",samp:"Th\u1ebb M\u00e3 v\u00ed d\u1ee5",code:"Th\u1ebb M\u00e3",blockquote:"Th\u1ebb Tr\u00edch d\u1eabn",h6:"Th\u1ebb Heading 6",h5:"Th\u1ebb Heading 5",h4:"Th\u1ebb Heading 4",h3:"Th\u1ebb Heading 3",h2:"Th\u1ebb Heading 2",h1:"Th\u1ebb Heading 1",pre:"Th\u1ebb Ti\u1ec1n \u0111\u1ecbnh d\u1ea1ng",address:"Th\u1ebb \u0110\u1ecba ch\u1ec9",div:"Th\u1ebb",paragraph:"\u0110o\u1ea1n",block:"\u0110\u1ecbnh d\u1ea1ng",fontdefault:"T\u00ean font ch\u1eef","font_size":"K\u00edch th\u01b0\u1edbc font","style_select":"Ki\u1ec3u","more_colors":"Th\u00eam m\u00e0u","toolbar_focus":"Nh\u1ea3y t\u1edbi c\u00e1c n\u00fat c\u00f4ng c\u1ee5 - Alt+Q, T\u1edbi tr\u00ecnh so\u1ea1n th\u1ea3o - Alt-Z, T\u1edbi \u0111\u01b0\u1eddng d\u1eabn c\u00e1c ph\u1ea7n t\u1eed - Alt-X",newdocument:"B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 n\u1ed9i dung?",path:"\u0110\u01b0\u1eddng d\u1eabn","clipboard_msg":"Sao ch\u00e9p/C\u1eaft/D\u00e1n kh\u00f4ng c\u00f3 s\u1eb5n trong Mozilla v\u00e0 Firefox.\n\t\t\tB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y?","blockquote_desc":"Blockquote","help_desc":"Tr\u1ee3 gi\u00fap","newdocument_desc":"V\u0103n b\u1ea3n m\u1edbi","image_props_desc":"Thu\u1ed9c t\u00ednh \u1ea3nh","paste_desc":"D\u00e1n","copy_desc":"Sao ch\u00e9p","cut_desc":"C\u1eaft","anchor_desc":"Ch\u00e8n/s\u1eeda m\u1ecf neo","visualaid_desc":"\u0110\u1ea3o c\u00e1c th\u00e0nh ph\u1ea7n h\u01b0\u1edbng d\u1eabn ho\u1eb7c \u1ea9n","charmap_desc":"Ch\u00e8n k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","backcolor_desc":"Ch\u1ecdn m\u00e0u n\u1ec1n","forecolor_desc":"Ch\u1ecdn m\u00e0u ch\u1eef","custom1_desc":"M\u00f4 t\u1ea3 t\u00f9y bi\u1ebfn c\u1ee7a b\u1ea1n \u1edf \u0111\u00e2y","removeformat_desc":"Lo\u1ea1i b\u1ecf \u0111\u1ecbnh d\u1ea1ng","hr_desc":"Ch\u00e8n th\u01b0\u1edbc ngang","sup_desc":"Ch\u1ec9 s\u1ed1 b\u00ean tr\u00ean","sub_desc":"Ch\u1ec9 s\u1ed1 d\u01b0\u1edbi d\u00f2ng","code_desc":"S\u1eeda m\u00e3 HTML","cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","unlink_desc":"X\u00f3a Li\u00ean k\u1ebft","link_desc":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","indent_desc":"Th\u1ee5t \u0111\u1ea7u d\u00f2ng","outdent_desc":"V\u1ec1 \u0111\u1ea7u d\u00f2ng","numlist_desc":"Danh s\u00e1ch c\u00f3 ch\u1ec9 s\u1ed1","bullist_desc":"Danh s\u00e1ch","justifyfull_desc":"Canh l\u1ec1 \u0111\u1ec1u","justifyright_desc":"Canh l\u1ec1 ph\u1ea3i","justifycenter_desc":"Canh gi\u1eefa","justifyleft_desc":"Canh l\u1ec1 tr\u00e1i","striketrough_desc":"G\u1ea1ch ngang","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Use arrow keys to select functions"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi_dlg.js new file mode 100644 index 0000000..311d8d3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/vi_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.advanced_dlg',{"link_list":"Danh s\u00e1ch li\u00ean k\u1ebft","link_is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","link_is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?","link_titlefield":"Ti\u00eau \u0111\u1ec1","link_target_blank":"M\u1edf li\u00ean k\u1ebft trong c\u1eeda s\u1ed5 m\u1edbi","link_target_same":"M\u1edf li\u00ean k\u1ebft trong c\u00f9ng c\u1eeda s\u1ed5","link_target":"\u0110\u00edch","link_url":"URL Li\u00ean k\u1ebft","link_title":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","image_align_right":"Ph\u1ea3i","image_align_left":"Tr\u00e1i","image_align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi","image_align_texttop":"V\u0103n b\u1ea3n tr\u00ea","image_align_bottom":"D\u01b0\u1edbi c\u00f9ng","image_align_middle":"Gi\u1eefa","image_align_top":"Tr\u00ean c\u00f9ng","image_align_baseline":"\u0110\u01b0\u1eddng c\u01a1 s\u1edf","image_align":"Canh l\u1ec1","image_hspace":"Kho\u1ea3ng c\u00e1ch ngang","image_vspace":"Kho\u1ea3ng c\u00e1ch d\u1ecdc","image_dimensions":"K\u00edch th\u01b0\u1edbc","image_alt":"M\u00f4 t\u1ea3 \u1ea3nh","image_list":"Danh s\u00e1ch \u1ea3nh","image_border":"Vi\u1ec1n","image_src":"URL \u1ea3nh","image_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","charmap_title":"Ch\u1ecdn k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","colorpicker_name":"T\u00ean:","colorpicker_color":"M\u00e0u:","colorpicker_named_title":"M\u00e0u \u0111\u00e3 \u0111\u1eb7t t\u00ean","colorpicker_named_tab":"T\u00ean","colorpicker_palette_title":"B\u1ea3ng m\u00e0u","colorpicker_palette_tab":"B\u1ea3ng m\u00e0u","colorpicker_picker_title":"B\u1ed9 ch\u1ecdn m\u00e0u","colorpicker_picker_tab":"B\u1ed9 ch\u1ecdn","colorpicker_title":"Ch\u1ecdn m\u1ed9t m\u00e0u","code_wordwrap":"Xu\u1ed1ng d\u00f2ng t\u1ef1 \u0111\u1ed9ng","code_title":"Tr\u00ecnh so\u1ea1n th\u1ea3o m\u00e3 ngu\u1ed3n HTML","anchor_name":"T\u00ean m\u1ecf neo","anchor_title":"Ch\u00e8n/s\u1eeda m\u1ecf neo","about_loaded":"Tr\u00ecnh g\u1eafn k\u00e8m \u0111\u00e3 n\u1ea1p","about_version":"Phi\u00ean b\u1ea3n","about_author":"T\u00e1c gi\u1ea3","about_plugin":"Tr\u00ecnh g\u1eafn k\u00e8m","about_plugins":"Tr\u00ecnh g\u1eafn k\u00e8m","about_license":"Gi\u1ea5y ph\u00e9p","about_help":"Tr\u1ee3 gi\u00fap","about_general":"Th\u00f4ng tin","about_title":"Th\u00f4ng tin v\u1ec1 TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn.js new file mode 100644 index 0000000..cef3df2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.advanced',{"underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)",dd:"\u5b9a\u4e49\u8bf4\u660e",dt:"\u672f\u8bed\u5b9a\u4e49",samp:"\u4ee3\u7801\u793a\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u9884\u683c\u5f0f\u6587\u672c",address:"\u5730\u5740",div:"Div\u533a\u5757",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f\u5316",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u8f6c\u5230\u5de5\u5177\u6309\u94ae - Alt-Q\uff0c\u8f6c\u5230\u7f16\u8f91\u5668 - Alt-Z\uff0c\u8f6c\u5230\u5143\u7d20\u8def\u5f84 - Alt-X\u3002",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u6240\u6709\u5185\u5bb9\u5417\uff1f",path:"\u8def\u5f84","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002n\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u5efa","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u5207","anchor_desc":"\u63d2\u5165/\u7f16\u8f91 \u951a","visualaid_desc":"\u663e\u793a/\u9690\u85cf \u5143\u7d20","charmap_desc":"\u63d2\u5165\u81ea\u5b9a\u4e49\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u672c\u989c\u8272","custom1_desc":"\u8fd9\u91cc\u662f\u60a8\u81ea\u5b9a\u4e49\u7684\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8d85\u94fe\u63a5","link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","redo_desc":"\u6062\u590d (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","help_shortcut":"\u6309 ALT-F10 \u5b9a\u4f4d\u5230\u5de5\u5177\u680f.\u6309 ALT-0 \u83b7\u53d6\u5e2e\u52a9\u3002","rich_text_area":"\u5bcc\u6587\u672c\u533a","shortcuts_desc":"\u8f85\u52a9\u8bf4\u660e",toolbar:"\u5de5\u5177\u680f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn_dlg.js new file mode 100644 index 0000000..3fe1383 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-cn_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.advanced_dlg',{"link_list":"\u94fe\u63a5\u5217\u8868","link_is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","link_is_email":"\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","link_target_same":"\u5728\u5f53\u524d\u7a97\u53e3\u6253\u5f00","link_target":"\u6253\u5f00\u65b9\u5f0f","link_url":"\u8d85\u94fe\u63a5URL","link_title":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","image_align_right":"\u53f3\u5bf9\u9f50","image_align_left":"\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u7aef\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u9876\u7aef\u5bf9\u9f50","image_align_baseline":"\u5e95\u7ebf","image_align":"\u5bf9\u9f50","image_hspace":"\u6c34\u5e73\u8ddd\u79bb","image_vspace":"\u5782\u76f4\u8ddd\u79bb","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u63cf\u8ff0","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u94fe\u63a5","image_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","charmap_title":"\u9009\u62e9\u81ea\u5b9a\u4e49\u7b26\u53f7","colorpicker_name":"\u540d\u79f0\uff1a","colorpicker_color":"\u989c\u8272\uff1a","colorpicker_named_title":"\u547d\u540d\u989c\u8272","colorpicker_named_tab":"\u547d\u540d\u989c\u8272","colorpicker_palette_title":"\u8c03\u8272\u677f\u989c\u8272","colorpicker_palette_tab":"\u8c03\u8272\u677f","colorpicker_picker_title":"\u989c\u8272\u62fe\u53d6","colorpicker_picker_tab":"\u62fe\u53d6","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91 \u951a","about_loaded":"\u5df2\u8f7d\u5165\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u8bb8\u53ef\u534f\u8bae","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"\u8bf7\u6307\u5b9a\u4e00\u4e2a\u6709\u6548\u7684\u951a\u540d\u79f0\u3002","charmap_usage":"Use left and right arrows to navigate.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw.js new file mode 100644 index 0000000..54041ae --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.advanced',{"underline_desc":"\u52a0\u4e0a\u5e95\u7dda (Ctrl U)","italic_desc":"\u8b8a\u6210\u659c\u7dda (Ctrl I)","bold_desc":"\u5b57\u52a0\u7c97 (Ctrl B)",dd:"\u64b0\u5beb\u8aaa\u660e / \u8a3b\u89e3",dt:"\u8853\u8a9e\u5b9a\u7fa9",samp:"\u8a9e\u6cd5\u7bc4\u4f8b",code:"\u8a9e\u6cd5",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c\u6a23\u5f0f 6",h5:"\u6a19\u984c\u6a23\u5f0f 5",h4:"\u6a19\u984c\u6a23\u5f0f 4",h3:"\u6a19\u984c\u6a23\u5f0f 3",h2:"\u6a19\u984c\u6a23\u5f0f 2",h1:"\u6a19\u984c\u6a23\u5f0f 1",pre:"\u7d14\u6587\u5b57",address:"\u4f4f\u5740",div:"Div \u6392\u7248\u5340\u584a",paragraph:"\u6bb5\u843d\u6a23\u5f0f",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u6587\u5b57\u5927\u5c0f","style_select":"\u6a23\u5f0f","more_colors":"\u5176\u4ed6\u984f\u8272","toolbar_focus":"\u8f14\u52a9\u529f\u80fd\uff1a\u6309\u4e0b Alt \u8ddf Q \u53ef\u8df3\u5230\u529f\u80fd\u5217\u3001\u6309\u4e0b Alt \u8ddf Z \u8df3\u5230\u6587\u5b57\u7de8\u8f2f\u756b\u9762\u3001\u6309\u4e0b Alt \u8ddf X \u53ef\u8df3\u5230\u8a9e\u6cd5\u7d30\u7bc0\u7684\u90a3\u4e00\u6392",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u756b\u9762\u4e0a\u7684\u5167\u5bb9\u55ce\uff1f",path:"\u8a9e\u6cd5\u7d30\u7bc0","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u526a\u4e0b\u3001\u8907\u88fd\u3001\u8cbc\u4e0a\u7684\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u6587\u7ae0","image_props_desc":"\u5716\u7247\u8a2d\u5b9a","paste_desc":"\u8cbc\u4e0a","copy_desc":"\u8907\u88fd","cut_desc":"\u526a\u4e0b","anchor_desc":"\u52a0\u5165 / \u7de8\u8f2f\u9328\u9ede (\u66f8\u7c64)","visualaid_desc":"\u986f\u793a\u96b1\u85cf\u7684\u6771\u897f","charmap_desc":"\u52a0\u5165\u4e00\u500b\u81ea\u5df1\u8a2d\u5b9a\u7684\u6587\u5b57\u7b26\u865f","backcolor_desc":"\u9078\u64c7\u80cc\u666f\u8272","forecolor_desc":"\u9078\u64c7\u6587\u5b57\u984f\u8272","custom1_desc":"\u4f60\u5beb\u7684\u8a3b\u89e3\u5728\u9019\u88e1","removeformat_desc":"\u79fb\u9664\u6587\u5b57\u4e0a\u7684\u6a23\u5f0f\u8207\u683c\u5f0f","hr_desc":"\u52a0\u5165\u4e00\u500b\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19\u5b57","sub_desc":"\u4e0b\u6a19\u5b57","code_desc":"\u7de8\u8f2f HTML \u8a9e\u6cd5","cleanup_desc":"\u79fb\u9664\u591a\u9918\u7684\u6587\u5b57\u8207\u7a0b\u5f0f\u78bc","image_desc":"\u65b0\u589e / \u7de8\u8f2f\u5716\u7247","unlink_desc":"\u79fb\u9664\u9023\u7d50","link_desc":"\u65b0\u589e / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","redo_desc":"\u91cd\u4f86\u4e00\u6b21 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","indent_desc":"\u7e2e\u6392 (\u589e\u52a0)","outdent_desc":"\u7e2e\u6392 (\u6e1b\u5c11)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57)","bullist_desc":"\u9805\u76ee\u7b26\u865f (\u53ea\u6709\u7b26\u865f)","justifyfull_desc":"\u5206\u6563\u5c0d\u9f4a","justifyright_desc":"\u5411\u53f3\u908a\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u5411\u5c0d\u9f4a\u5de6\u908a","striketrough_desc":"\u522a\u9664\u7dda","help_shortcut":"\u6309\u4e0b ALT F10 \u51fa\u73fe\u5de5\u5177\u5217\uff1b\u6309\u4e0b ALT 0 \u5247\u51fa\u73fe\u8aaa\u660e\u3002","rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340","shortcuts_desc":"\u8f14\u52a9\u8aaa\u660e",toolbar:"\u5de5\u5177\u5217","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw_dlg.js new file mode 100644 index 0000000..46208f9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh-tw_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_titlefield":"\u6a19\u984c","link_target_blank":"\u53e6\u5916\u958b\u65b0\u8996\u7a97","link_target_same":"\u76f4\u63a5\u958b\u555f\u9023\u7d50","link_target":"\u958b\u555f\u65b9\u5f0f","link_url":"\u9023\u7d50 URL","link_title":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","image_align_right":"\u5411\u53f3\u5c0d\u9f4a","image_align_left":"\u5411\u5de6\u5c0d\u9f4a","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u4e0b\u65b9","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u4e0a\u65b9","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a","image_hspace":"\u6c34\u5e73\u8ddd\u96e2","image_vspace":"\u5782\u76f4\u8ddd\u96e2","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247\u7db2\u5740\u9023\u7d50","image_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","charmap_title":"\u9078\u64c7\u81ea\u8a02\u7684\u7b26\u865f","colorpicker_name":"\u540d\u7a31\uff1a","colorpicker_color":"\u984f\u8272\uff1a","colorpicker_named_title":"\u8272\u7968\u540d\u7a31","colorpicker_named_tab":"\u8272\u7968\u540d\u7a31","colorpicker_palette_title":"\u8abf\u8272","colorpicker_palette_tab":"\u8abf\u8272\u76e4","colorpicker_picker_title":"\u6309\u4e00\u4e0b\u6ed1\u9f20\u9078\u64c7\u984f\u8272","colorpicker_picker_tab":"\u9078\u64c7","colorpicker_title":"\u9078\u4e00\u500b\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u8a9e\u6cd5\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u52a0\u5165 / \u8a2d\u5b9a\u9328\u9ede","about_loaded":"\u5916\u639b\u7a0b\u5f0f\u8f09\u5165\u5b8c\u6210","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b","about_plugins":"\u5916\u639b\u7a0b\u5f0f","about_license":"\u7248\u6b0a\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE \u9019\u5957\u6587\u5b57\u7de8\u8f2f\u5668","anchor_invalid":"\u8acb\u7528\u82f1\u6587\u6216\u6578\u5b57\u4f5c\u70ba\u9328\u9ede\u7684\u540d\u7a31","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh.js new file mode 100644 index 0000000..ecb4106 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('zh.advanced',{ +style_select:"\u6A23\u5F0F", +font_size:"\u5B57\u9AD4\u5927\u5C0F", +fontdefault:"\u5B57\u9AD4", +block:"\u683C\u5F0F", +paragraph:"\u6BB5\u843D", +div:"Div", +address:"\u5730\u5740", +pre:"\u9ED8\u8A8D\u683C\u5F0F", +h1:"\u6A19\u984C 1", +h2:"\u6A19\u984C 2", +h3:"\u6A19\u984C 3", +h4:"\u6A19\u984C 4", +h5:"\u6A19\u984C 5", +h6:"\u6A19\u984C 6", +blockquote:"\u5F15\u7528", +code:"\u4EE3\u78BC", +samp:"\u7A0B\u5F0F\u7BC4\u4F8B", +dt:"\u540D\u8A5E\u5B9A\u7FA9", +dd:"\u540D\u8A5E\u89E3\u91CB", +bold_desc:"\u7C97\u9AD4 (Ctrl+B)", +italic_desc:"\u659C\u9AD4 (Ctrl+I)", +underline_desc:"\u5E95\u7DDA (Ctrl+U)", +striketrough_desc:"\u4E2D\u5283\u7DDA", +justifyleft_desc:"\u5DE6\u5C0D\u9F4A", +justifycenter_desc:"\u5C45\u4E2D", +justifyright_desc:"\u53F3\u5C0D\u9F4A", +justifyfull_desc:"\u5169\u7AEF\u5C0D\u9F4A", +bullist_desc:"\u6E05\u55AE\u7B26\u865F", +numlist_desc:"\u7DE8\u865F", +outdent_desc:"\u6E1B\u5C11\u7E2E\u9032", +indent_desc:"\u589E\u52A0\u7E2E\u9032", +undo_desc:"\u64A4\u92B7 (Ctrl+Z)", +redo_desc:"\u6062\u5FA9 (Ctrl+Y)", +link_desc:"\u63D2\u5165/\u7DE8\u8F2F \u9023\u7D50", +unlink_desc:"\u53D6\u6D88\u9023\u7D50", +image_desc:"\u63D2\u5165/\u7DE8\u8F2F \u5716\u7247", +cleanup_desc:"\u522A\u9664\u5197\u9918\u78BC", +code_desc:"\u7DE8\u8F2F HTML \u539F\u59CB\u7A0B\u5F0F\u78BC", +sub_desc:"\u4E0B\u6A19", +sup_desc:"\u4E0A\u6A19", +hr_desc:"\u63D2\u5165\u6C34\u5E73\u7DDA", +removeformat_desc:"\u6E05\u9664\u6A23\u5F0F", +custom1_desc:"\u5728\u6B64\u8F38\u5165\u60A8\u7684\u81EA\u8A02\u63CF\u8FF0", +forecolor_desc:"\u9078\u64C7\u6587\u5B57\u984F\u8272", +backcolor_desc:"\u9078\u64C7\u80CC\u666F\u984F\u8272", +charmap_desc:"\u63D2\u5165\u7279\u6B8A\u7B26\u865F", +visualaid_desc:"\u7DB2\u683C/\u96B1\u85CF\u7D44\u4EF6\uFF1F", +anchor_desc:"\u63D2\u5165/\u7DE8\u8F2F \u9328\u9EDE", +cut_desc:"\u526A\u5207 (Ctrl+X)", +copy_desc:"\u8907\u88FD (Ctrl+C)", +paste_desc:"\u7C98\u8CBC (Ctrl+V)", +image_props_desc:"\u5716\u7247\u5C6C\u6027", +newdocument_desc:"\u65B0\u5EFA\u6587\u4EF6", +help_desc:"\u5E6B\u52A9", +blockquote_desc:"\u5F15\u7528", +clipboard_msg:"\u8907\u88FD\u3001\u526A\u5207\u548C\u7C98\u8CBC\u529F\u80FD\u5728Mozilla \u548C Firefox\u4E2D\u7121\u6CD5\u4F7F\u7528", +path:"\u8DEF\u5F91", +newdocument:"\u60A8\u78BA\u8A8D\u8981\u522A\u9664\u5168\u90E8\u5167\u5BB9\u55CE\uFF1F", +toolbar_focus:"\u5DE5\u5177\u5217 - Alt+Q, \u7DE8\u8F2F\u5668 - Alt-Z, \u5143\u4EF6\u8DEF\u5F91 - Alt-X", +more_colors:"\u66F4\u591A\u984F\u8272" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh_dlg.js b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh_dlg.js new file mode 100644 index 0000000..bc979d5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/langs/zh_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('zh.advanced_dlg',{ +about_title:"\u95DC\u65BC TinyMCE", +about_general:"\u95DC\u65BC", +about_help:"\u5E6B\u52A9", +about_license:"\u6388\u6B0A", +about_plugins:"\u5168\u90E8\u5916\u639B\u7A0B\u5F0F", +about_plugin:"\u5916\u639B\u7A0B\u5F0F", +about_author:"\u4F5C\u8005", +about_version:"\u7248\u672C", +about_loaded:"\u5DF2\u8F09\u5165\u7684\u5916\u639B\u7A0B\u5F0F", +anchor_title:"\u63D2\u5165/\u7DE8\u8F2F \u9328\u9EDE", +anchor_name:"\u9328\u9EDE\u540D\u7A31", +code_title:"HTML \u539F\u59CB\u7A0B\u5F0F\u78BC\u7DE8\u8F2F\u5668", +code_wordwrap:"\u81EA\u52D5\u63DB\u884C", +colorpicker_title:"\u9078\u64C7\u984F\u8272", +colorpicker_picker_tab:"\u9078\u64C7\u5668", +colorpicker_picker_title:"\u53D6\u8272\u5668", +colorpicker_palette_tab:"\u8272\u8B5C", +colorpicker_palette_title:"\u8272\u8B5C\u984F\u8272", +colorpicker_named_tab:"\u9810\u8A2D\u503C", +colorpicker_named_title:"\u9ED8\u8A8D\u7684\u984F\u8272", +colorpicker_color:"\u984F\u8272:", +colorpicker_name:"\u8272\u540D:", +charmap_title:"\u63D2\u5165\u7279\u6B8A\u7B26\u865F", +image_title:"\u63D2\u5165/\u7DE8\u8F2F \u5716\u7247", +image_src:"\u5716\u7247\u7DB2\u5740", +image_alt:"\u5716\u7247\u8AAA\u660E", +image_list:"\u5716\u7247\u6E05\u55AE", +image_border:"\u908A\u6846", +image_dimensions:"\u5C3A\u5BF8", +image_vspace:"\u5782\u76F4\u9593\u8DDD", +image_hspace:"\u6C34\u6E96\u9593\u8DDD", +image_align:"\u5C0D\u9F4A\u65B9\u5F0F", +image_align_baseline:"\u57FA\u7DDA", +image_align_top:"\u9802\u90E8\u5C0D\u9F4A", +image_align_middle:"\u4E2D\u90E8\u5C0D\u9F4A", +image_align_bottom:"\u5E95\u90E8\u5C0D\u9F4A", +image_align_texttop:"\u6587\u5B57\u4E0A\u65B9", +image_align_textbottom:"\u6587\u5B57\u4E0B\u65B9", +image_align_left:"\u5DE6\u5C0D\u9F4A", +image_align_right:"\u53F3\u5C0D\u9F4A", +link_title:"\u63D2\u5165/\u7DE8\u8F2F \u9023\u7D50", +link_url:"\u9023\u7D50\u7DB2\u5740", +link_target:"\u76EE\u6A19", +link_target_same:"\u7576\u524D\u8996\u7A97\u6253\u958B", +link_target_blank:"\u65B0\u8996\u7A97\u6253\u958B", +link_titlefield:"\u6A19\u984C", +link_is_email:"\u60A8\u8F38\u5165\u7684\u61C9\u8A72\u662F\u4E00\u500B\u96FB\u5B50\u90F5\u5BC4\u5730\u5740\uFF0C\u662F\u5426\u9700\u8981\u5728\u7DB2\u5740\u524D\u52A0\u4E0A mailto: ? ", +link_is_external:"\u60A8\u8F38\u5165\u7684\u7DB2\u5740\u61C9\u8A72\u662F\u4E00\u500B\u5916\u90E8\u9023\u7D50\uFF0C\u662F\u5426\u9700\u8981\u5728\u7DB2\u5740\u524D\u52A0\u4E0A http:// ?", +link_list:"\u9023\u7D50\u6E05\u55AE" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/link.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/link.htm new file mode 100644 index 0000000..5d9dea9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/link.htm @@ -0,0 +1,57 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
        + + +
        +
        + + + + + + + + + + + + + + + + + + + + + +
        + + + + +
         
        +
        +
        + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/shortcuts.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/shortcuts.htm new file mode 100644 index 0000000..20ec2f5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/shortcuts.htm @@ -0,0 +1,47 @@ + + + + {#advanced_dlg.accessibility_help} + + + + +

        {#advanced_dlg.accessibility_usage_title}

        +

        Toolbars

        +

        Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys. + Press enter to activate a button and return focus to the editor. + Press escape to return focus to the editor without performing any actions.

        + +

        Status Bar

        +

        To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path. + Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.

        + +

        Context Menu

        +

        Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key. + To close submenus press the left arrow key. Press escape to close the context menu.

        + +

        Keyboard Shortcuts

        + + + + + + + + + + + + + + + + + + + + + +
        KeystrokeFunction
        Control-BBold
        Control-IItalic
        Control-ZUndo
        Control-YRedo
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/content.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..2fd94a1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/content.css @@ -0,0 +1,50 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} +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 {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {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 {border-bottom:1px dashed #CCC; cursor:help} + +/* 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; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {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)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/dialog.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..879786f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; 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:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +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:10px;} +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:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +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:10px; 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:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.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 {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* 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:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#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 .panel_wrapper div.current {height:175px;} +#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;} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/buttons.png b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/buttons.png new file mode 100644 index 0000000..1e53560 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/buttons.png differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/items.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/items.gif new file mode 100644 index 0000000..d2f9367 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/items.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_arrow.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_arrow.gif new file mode 100644 index 0000000..85e31df Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_arrow.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_check.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000..adfdddc Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/menu_check.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/progress.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/progress.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/progress.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/tabs.gif b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/tabs.gif new file mode 100644 index 0000000..06812cb Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/img/tabs.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/ui.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/ui.css new file mode 100644 index 0000000..77083f3 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/default/ui.css @@ -0,0 +1,219 @@ +/* Reset */ +.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .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} +.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.defaultSkin table td {vertical-align:middle} + +/* Containers */ +.defaultSkin table {direction:ltr;background:transparent} +.defaultSkin iframe {display:block;} +.defaultSkin .mceToolbar {height:26px} +.defaultSkin .mceLeft {text-align:left} +.defaultSkin .mceRight {text-align:right} + +/* External */ +.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} +.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC} +.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} +.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top} +.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} +.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} +.defaultSkin .mceStatusbar div {float:left; margin:2px} +.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.defaultSkin .mceStatusbar a:hover {text-decoration:underline} +.defaultSkin table.mceToolbar {margin-left:3px} +.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.defaultSkin td.mceCenter {text-align:center;} +.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;} +.defaultSkin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px} +.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceButtonLabeled {width:auto} +.defaultSkin .mceButtonLabeled span.mceIcon {float:left} +.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px} + +/* ListBox */ +.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block} +.defaultSkin .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} +.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;} +.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF} +.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0} +.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} +.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px} +.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} +.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} + +/* SplitButton */ +.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr} +.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block} +.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} +.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);} +.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;} +.defaultSkin .mceSplitButton span.mceOpen {display:none} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} +.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;} + +/* ColorSplitButton */ +.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.defaultSkin .mceColorSplitMenu td {padding:2px} +.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.defaultSkin .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} +.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} +.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} +.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} + +/* Menu */ +.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8; direction:ltr} +.defaultSkin .mceNoIcons span.mceIcon {width:0;} +.defaultSkin .mceNoIcons a .mceText {padding-left:10px} +.defaultSkin .mceMenu table {background:#FFF} +.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block} +.defaultSkin .mceMenu td {height:20px} +.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0} +.defaultSkin .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} +.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px} +.defaultSkin .mceMenu pre.mceText {font-family:Monospace} +.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px} +.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} +.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.defaultSkin .mceMenuItemDisabled .mceText {color:#888} +.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} +.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} +.defaultSkin .mceMenu span.mceMenuLine {display:none} +.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} +.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal} + +/* Progress,Resize */ +.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} +.defaultSkin .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} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.defaultSkin .mce_formatPreview a {font-size:10px} +.defaultSkin .mce_p span.mceText {} +.defaultSkin .mce_address span.mceText {font-style:italic} +.defaultSkin .mce_pre span.mceText {font-family:monospace} +.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.defaultSkin span.mce_bold {background-position:0 0} +.defaultSkin span.mce_italic {background-position:-60px 0} +.defaultSkin span.mce_underline {background-position:-140px 0} +.defaultSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSkin span.mce_undo {background-position:-160px 0} +.defaultSkin span.mce_redo {background-position:-100px 0} +.defaultSkin span.mce_cleanup {background-position:-40px 0} +.defaultSkin span.mce_bullist {background-position:-20px 0} +.defaultSkin span.mce_numlist {background-position:-80px 0} +.defaultSkin span.mce_justifyleft {background-position:-460px 0} +.defaultSkin span.mce_justifyright {background-position:-480px 0} +.defaultSkin span.mce_justifycenter {background-position:-420px 0} +.defaultSkin span.mce_justifyfull {background-position:-440px 0} +.defaultSkin span.mce_anchor {background-position:-200px 0} +.defaultSkin span.mce_indent {background-position:-400px 0} +.defaultSkin span.mce_outdent {background-position:-540px 0} +.defaultSkin span.mce_link {background-position:-500px 0} +.defaultSkin span.mce_unlink {background-position:-640px 0} +.defaultSkin span.mce_sub {background-position:-600px 0} +.defaultSkin span.mce_sup {background-position:-620px 0} +.defaultSkin span.mce_removeformat {background-position:-580px 0} +.defaultSkin span.mce_newdocument {background-position:-520px 0} +.defaultSkin span.mce_image {background-position:-380px 0} +.defaultSkin span.mce_help {background-position:-340px 0} +.defaultSkin span.mce_code {background-position:-260px 0} +.defaultSkin span.mce_hr {background-position:-360px 0} +.defaultSkin span.mce_visualaid {background-position:-660px 0} +.defaultSkin span.mce_charmap {background-position:-240px 0} +.defaultSkin span.mce_paste {background-position:-560px 0} +.defaultSkin span.mce_copy {background-position:-700px 0} +.defaultSkin span.mce_cut {background-position:-680px 0} +.defaultSkin span.mce_blockquote {background-position:-220px 0} +.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0} +.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.defaultSkin span.mce_forecolorpicker {background-position:-720px 0} +.defaultSkin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.defaultSkin span.mce_advhr {background-position:-0px -20px} +.defaultSkin span.mce_ltr {background-position:-20px -20px} +.defaultSkin span.mce_rtl {background-position:-40px -20px} +.defaultSkin span.mce_emotions {background-position:-60px -20px} +.defaultSkin span.mce_fullpage {background-position:-80px -20px} +.defaultSkin span.mce_fullscreen {background-position:-100px -20px} +.defaultSkin span.mce_iespell {background-position:-120px -20px} +.defaultSkin span.mce_insertdate {background-position:-140px -20px} +.defaultSkin span.mce_inserttime {background-position:-160px -20px} +.defaultSkin span.mce_absolute {background-position:-180px -20px} +.defaultSkin span.mce_backward {background-position:-200px -20px} +.defaultSkin span.mce_forward {background-position:-220px -20px} +.defaultSkin span.mce_insert_layer {background-position:-240px -20px} +.defaultSkin span.mce_insertlayer {background-position:-260px -20px} +.defaultSkin span.mce_movebackward {background-position:-280px -20px} +.defaultSkin span.mce_moveforward {background-position:-300px -20px} +.defaultSkin span.mce_media {background-position:-320px -20px} +.defaultSkin span.mce_nonbreaking {background-position:-340px -20px} +.defaultSkin span.mce_pastetext {background-position:-360px -20px} +.defaultSkin span.mce_pasteword {background-position:-380px -20px} +.defaultSkin span.mce_selectall {background-position:-400px -20px} +.defaultSkin span.mce_preview {background-position:-420px -20px} +.defaultSkin span.mce_print {background-position:-440px -20px} +.defaultSkin span.mce_cancel {background-position:-460px -20px} +.defaultSkin span.mce_save {background-position:-480px -20px} +.defaultSkin span.mce_replace {background-position:-500px -20px} +.defaultSkin span.mce_search {background-position:-520px -20px} +.defaultSkin span.mce_styleprops {background-position:-560px -20px} +.defaultSkin span.mce_table {background-position:-580px -20px} +.defaultSkin span.mce_cell_props {background-position:-600px -20px} +.defaultSkin span.mce_delete_table {background-position:-620px -20px} +.defaultSkin span.mce_delete_col {background-position:-640px -20px} +.defaultSkin span.mce_delete_row {background-position:-660px -20px} +.defaultSkin span.mce_col_after {background-position:-680px -20px} +.defaultSkin span.mce_col_before {background-position:-700px -20px} +.defaultSkin span.mce_row_after {background-position:-720px -20px} +.defaultSkin span.mce_row_before {background-position:-740px -20px} +.defaultSkin span.mce_merge_cells {background-position:-760px -20px} +.defaultSkin span.mce_table_props {background-position:-980px -20px} +.defaultSkin span.mce_row_props {background-position:-780px -20px} +.defaultSkin span.mce_split_cells {background-position:-800px -20px} +.defaultSkin span.mce_template {background-position:-820px -20px} +.defaultSkin span.mce_visualchars {background-position:-840px -20px} +.defaultSkin span.mce_abbr {background-position:-860px -20px} +.defaultSkin span.mce_acronym {background-position:-880px -20px} +.defaultSkin span.mce_attribs {background-position:-900px -20px} +.defaultSkin span.mce_cite {background-position:-920px -20px} +.defaultSkin span.mce_del {background-position:-940px -20px} +.defaultSkin span.mce_ins {background-position:-960px -20px} +.defaultSkin span.mce_pagebreak {background-position:0 -40px} +.defaultSkin span.mce_restoredraft {background-position:-20px -40px} +.defaultSkin span.mce_spellchecker {background-position:-540px -20px} +.defaultSkin span.mce_visualblocks {background-position: -40px -40px} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/content.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/content.css new file mode 100644 index 0000000..cbce6c6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/content.css @@ -0,0 +1,24 @@ +body, td, pre { margin:8px;} +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 {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {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 {border-bottom:1px dashed #CCC; cursor:help} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/dialog.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/dialog.css new file mode 100644 index 0000000..6d9fc8d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/dialog.css @@ -0,0 +1,106 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +background:#F0F0EE; +color: black; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE; color:#000;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;background-color:transparent;} +a:hover {color:#2B6FB6;background-color:transparent;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;background-color:transparent;} +input.invalid {border:1px solid #EE0000;background-color:transparent;} +input {background:#FFF; border:1px solid #CCC;color:black;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +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 { +font-weight:bold; +width:94px; height:23px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#cancel {float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +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:10px; 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:18px; line-height:normal;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;} +.tabs li.current {font-weight: bold; margin-right:2px;} +.tabs span {float:left; display:block; padding:0px 10px 0 0;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.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 {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;} + +/* 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:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#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 .panel_wrapper div.current {height:175px;} +#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;} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/ui.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/ui.css new file mode 100644 index 0000000..effbbe1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/highcontrast/ui.css @@ -0,0 +1,106 @@ +/* Reset */ +.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;} +.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;} +.highcontrastSkin table td {vertical-align:middle} + +.highcontrastSkin .mceIconOnly {display: block !important;} + +/* External */ +.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;} +.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;} + +/* Layout */ +.highcontrastSkin table.mceLayout {border: 1px solid;} +.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid} +.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline} +.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;} +.highcontrastSkin .mceStatusbar div {float:left} +.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0} + +.highcontrastSkin .mceToolbar td { display: inline-block; float: left;} +.highcontrastSkin .mceToolbar tr { display: block;} +.highcontrastSkin .mceToolbar table { display: block; } + +/* Button */ + +.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;} +.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em} +.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;} + +/* Separator */ +.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;} + +/* ListBox */ +.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceListBox .mceText {padding: 5px 6px; line-height: 2em; width: 15ex; overflow: hidden;} +.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;} +.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;} + +.highcontrastSkin .mceListBoxMenu {overflow-y:auto} + +/* SplitButton */ +.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;} +.highcontrastSkin .mceSplitButton tr { display: table-row; } +.highcontrastSkin table.mceSplitButton { display: table; } +.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } +.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;} + +/* Menu */ +.highcontrastSkin .mceNoIcons span.mceIcon {width:0;} +.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; direction:ltr} +.highcontrastSkin .mceMenu table {background:white; color: black} +.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px} +.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black} +.highcontrastSkin .mceMenu td {height:2em} +.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;} +.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;} +.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace} +.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;} +.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px} +.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid} +.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px} +.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";} +.highcontrastSkin .mceMenu span.mceMenuLine {display:none} +.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"} +.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal} + +/* ColorSplitButton */ +.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000} +.highcontrastSkin .mceColorSplitMenu td {padding:2px} +.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;} +.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.highcontrastSkin .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} +.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2} +.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;} +.highcontrastSkin .mceColorPreview {display:none;} +.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden} + +/* Progress,Resize */ +.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.highcontrastSkin .mce_p span.mceText {} +.highcontrastSkin .mce_address span.mceText {font-style:italic} +.highcontrastSkin .mce_pre span.mceText {font-family:monospace} +.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/content.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/content.css new file mode 100644 index 0000000..a1a8f9b --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/content.css @@ -0,0 +1,48 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; 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 {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {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 {border-bottom:1px dashed #CCC; cursor:help} + +/* 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; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {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)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/dialog.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/dialog.css new file mode 100644 index 0000000..a54db98 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; 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:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +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:10px;} +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:url(../default/img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(../default/img/buttons.png) 0 -52px} +#cancel {background:url(../default/img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +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:10px; 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:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.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 {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* 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:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#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 .panel_wrapper div.current {height:175px;} +#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;} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg.png b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000..13a5cb0 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg.png differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000..7fc57f2 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png new file mode 100644 index 0000000..c0dcc6c Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..a310223 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui.css @@ -0,0 +1,222 @@ +/* Reset */ +.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .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} +.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.o2k7Skin table td {vertical-align:middle} + +/* Containers */ +.o2k7Skin table {background:transparent} +.o2k7Skin iframe {display:block;} +.o2k7Skin .mceToolbar {height:26px} + +/* External */ +.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none} +.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD} +.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0} +.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD} +.o2k7Skin td.mceToolbar{background:#E5EFFD} +.o2k7Skin .mceStatusbar {background:#E5EFFD; display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px} +.o2k7Skin .mceStatusbar div {float:left; padding:2px} +.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.o2k7Skin .mceStatusbar a:hover {text-decoration:underline} +.o2k7Skin table.mceToolbar {margin-left:3px} +.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;} +.o2k7Skin .mceToolbar td.mceFirst span {margin:0} +.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none} +.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px} +.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.o2k7Skin td.mceCenter {text-align:center;} +.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;} +.o2k7Skin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px} +.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px} +.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px} +.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceButtonLabeled {width:auto} +.o2k7Skin .mceButtonLabeled span.mceIcon {float:left} +.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* ListBox */ +.o2k7Skin .mceListBox {padding-left: 3px} +.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block} +.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0} +.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF} +.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px} +.o2k7Skin .mceListBoxDisabled .mceText {color:gray} +.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden; margin-left:3px} +.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px} +.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;} + +/* SplitButton */ +.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr} +.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)} +.o2k7Skin .mceSplitButton a.mceAction {width:22px} +.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)} +.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0} +.o2k7Skin .mceSplitButton span.mceOpen {display:none} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px} +.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceSplitButtonActive {background-position:0 -44px} + +/* ColorSplitButton */ +.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.o2k7Skin .mceColorSplitMenu td {padding:2px} +.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.o2k7Skin .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} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} +.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden} +.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden} + +/* Menu */ +.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD; direction:ltr} +.o2k7Skin .mceNoIcons span.mceIcon {width:0;} +.o2k7Skin .mceNoIcons a .mceText {padding-left:10px} +.o2k7Skin .mceMenu table {background:#FFF} +.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block} +.o2k7Skin .mceMenu td {height:20px} +.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0} +.o2k7Skin .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} +.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px} +.o2k7Skin .mceMenu pre.mceText {font-family:Monospace} +.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px} +.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.o2k7Skin .mceMenuItemDisabled .mceText {color:#888} +.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)} +.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center} +.o2k7Skin .mceMenu span.mceMenuLine {display:none} +.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;} +.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal} + +/* Progress,Resize */ +.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.o2k7Skin .mce_formatPreview a {font-size:10px} +.o2k7Skin .mce_p span.mceText {} +.o2k7Skin .mce_address span.mceText {font-style:italic} +.o2k7Skin .mce_pre span.mceText {font-family:monospace} +.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.o2k7Skin span.mce_bold {background-position:0 0} +.o2k7Skin span.mce_italic {background-position:-60px 0} +.o2k7Skin span.mce_underline {background-position:-140px 0} +.o2k7Skin span.mce_strikethrough {background-position:-120px 0} +.o2k7Skin span.mce_undo {background-position:-160px 0} +.o2k7Skin span.mce_redo {background-position:-100px 0} +.o2k7Skin span.mce_cleanup {background-position:-40px 0} +.o2k7Skin span.mce_bullist {background-position:-20px 0} +.o2k7Skin span.mce_numlist {background-position:-80px 0} +.o2k7Skin span.mce_justifyleft {background-position:-460px 0} +.o2k7Skin span.mce_justifyright {background-position:-480px 0} +.o2k7Skin span.mce_justifycenter {background-position:-420px 0} +.o2k7Skin span.mce_justifyfull {background-position:-440px 0} +.o2k7Skin span.mce_anchor {background-position:-200px 0} +.o2k7Skin span.mce_indent {background-position:-400px 0} +.o2k7Skin span.mce_outdent {background-position:-540px 0} +.o2k7Skin span.mce_link {background-position:-500px 0} +.o2k7Skin span.mce_unlink {background-position:-640px 0} +.o2k7Skin span.mce_sub {background-position:-600px 0} +.o2k7Skin span.mce_sup {background-position:-620px 0} +.o2k7Skin span.mce_removeformat {background-position:-580px 0} +.o2k7Skin span.mce_newdocument {background-position:-520px 0} +.o2k7Skin span.mce_image {background-position:-380px 0} +.o2k7Skin span.mce_help {background-position:-340px 0} +.o2k7Skin span.mce_code {background-position:-260px 0} +.o2k7Skin span.mce_hr {background-position:-360px 0} +.o2k7Skin span.mce_visualaid {background-position:-660px 0} +.o2k7Skin span.mce_charmap {background-position:-240px 0} +.o2k7Skin span.mce_paste {background-position:-560px 0} +.o2k7Skin span.mce_copy {background-position:-700px 0} +.o2k7Skin span.mce_cut {background-position:-680px 0} +.o2k7Skin span.mce_blockquote {background-position:-220px 0} +.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0} +.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0} +.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0} +.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.o2k7Skin span.mce_advhr {background-position:-0px -20px} +.o2k7Skin span.mce_ltr {background-position:-20px -20px} +.o2k7Skin span.mce_rtl {background-position:-40px -20px} +.o2k7Skin span.mce_emotions {background-position:-60px -20px} +.o2k7Skin span.mce_fullpage {background-position:-80px -20px} +.o2k7Skin span.mce_fullscreen {background-position:-100px -20px} +.o2k7Skin span.mce_iespell {background-position:-120px -20px} +.o2k7Skin span.mce_insertdate {background-position:-140px -20px} +.o2k7Skin span.mce_inserttime {background-position:-160px -20px} +.o2k7Skin span.mce_absolute {background-position:-180px -20px} +.o2k7Skin span.mce_backward {background-position:-200px -20px} +.o2k7Skin span.mce_forward {background-position:-220px -20px} +.o2k7Skin span.mce_insert_layer {background-position:-240px -20px} +.o2k7Skin span.mce_insertlayer {background-position:-260px -20px} +.o2k7Skin span.mce_movebackward {background-position:-280px -20px} +.o2k7Skin span.mce_moveforward {background-position:-300px -20px} +.o2k7Skin span.mce_media {background-position:-320px -20px} +.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px} +.o2k7Skin span.mce_pastetext {background-position:-360px -20px} +.o2k7Skin span.mce_pasteword {background-position:-380px -20px} +.o2k7Skin span.mce_selectall {background-position:-400px -20px} +.o2k7Skin span.mce_preview {background-position:-420px -20px} +.o2k7Skin span.mce_print {background-position:-440px -20px} +.o2k7Skin span.mce_cancel {background-position:-460px -20px} +.o2k7Skin span.mce_save {background-position:-480px -20px} +.o2k7Skin span.mce_replace {background-position:-500px -20px} +.o2k7Skin span.mce_search {background-position:-520px -20px} +.o2k7Skin span.mce_styleprops {background-position:-560px -20px} +.o2k7Skin span.mce_table {background-position:-580px -20px} +.o2k7Skin span.mce_cell_props {background-position:-600px -20px} +.o2k7Skin span.mce_delete_table {background-position:-620px -20px} +.o2k7Skin span.mce_delete_col {background-position:-640px -20px} +.o2k7Skin span.mce_delete_row {background-position:-660px -20px} +.o2k7Skin span.mce_col_after {background-position:-680px -20px} +.o2k7Skin span.mce_col_before {background-position:-700px -20px} +.o2k7Skin span.mce_row_after {background-position:-720px -20px} +.o2k7Skin span.mce_row_before {background-position:-740px -20px} +.o2k7Skin span.mce_merge_cells {background-position:-760px -20px} +.o2k7Skin span.mce_table_props {background-position:-980px -20px} +.o2k7Skin span.mce_row_props {background-position:-780px -20px} +.o2k7Skin span.mce_split_cells {background-position:-800px -20px} +.o2k7Skin span.mce_template {background-position:-820px -20px} +.o2k7Skin span.mce_visualchars {background-position:-840px -20px} +.o2k7Skin span.mce_abbr {background-position:-860px -20px} +.o2k7Skin span.mce_acronym {background-position:-880px -20px} +.o2k7Skin span.mce_attribs {background-position:-900px -20px} +.o2k7Skin span.mce_cite {background-position:-920px -20px} +.o2k7Skin span.mce_del {background-position:-940px -20px} +.o2k7Skin span.mce_ins {background-position:-960px -20px} +.o2k7Skin span.mce_pagebreak {background-position:0 -40px} +.o2k7Skin span.mce_restoredraft {background-position:-20px -40px} +.o2k7Skin span.mce_spellchecker {background-position:-540px -20px} +.o2k7Skin span.mce_visualblocks {background-position: -40px -40px} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_black.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..50c9b76 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_black.css @@ -0,0 +1,8 @@ +/* Black */ +.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack td.mceToolbar, .o2k7SkinBlack td.mceStatusbar, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF} +.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0} +.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0} +.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;} +.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1} \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_silver.css b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..960a8e4 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/skins/o2k7/ui_silver.css @@ -0,0 +1,5 @@ +/* Silver */ +.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)} +.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee} +.o2k7SkinSilver .mceListBox .mceText {background:#FFF} +.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/advanced/source_editor.htm b/ehcp/net2ftp/plugins/tinymce/themes/advanced/source_editor.htm new file mode 100644 index 0000000..dd973fc --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
        +
        + +
        + +
        + +
        + + + +
        + + +
        +
        + + diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template.js new file mode 100644 index 0000000..4b3209c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.contentCSS.push(d+"/skins/"+f.skin+"/content.css");c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})})});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template_src.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template_src.js new file mode 100644 index 0000000..01ce87c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/editor_template_src.js @@ -0,0 +1,84 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('simple'); + + tinymce.create('tinymce.themes.SimpleTheme', { + init : function(ed, url) { + var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings; + + t.editor = ed; + ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css"); + + ed.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + }); + + DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css"); + }, + + renderUI : function(o) { + var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc; + + n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n); + n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'}); + n = tb = DOM.add(n, 'tbody'); + + // Create iframe container + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'}); + + // Create toolbar container + n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'}); + + // Create toolbar + tb = t.toolbar = cf.createToolbar("tools1"); + tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'})); + tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'})); + tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'})); + tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'})); + tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'})); + tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'})); + tb.renderTo(n); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_container', + sizeContainer : sc, + deltaHeight : -20 + }; + }, + + getInfo : function() { + return { + longname : 'Simple theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + } + }); + + tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme); +})(); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/img/icons.gif b/ehcp/net2ftp/plugins/tinymce/themes/simple/img/icons.gif new file mode 100644 index 0000000..6fcbcb5 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/simple/img/icons.gif differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ar.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ar.js new file mode 100644 index 0000000..f16c580 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ar.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ar.simple',{"cleanup_desc":"\u0631\u0645\u0632 \u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0641\u0648\u0636\u0649","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (Ctrl+Y)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (Ctrl+Z)","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u0628\u062e\u0637","underline_desc":"\u062a\u0633\u0637\u064a\u0631 (Ctrl+U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/cs.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/cs.js new file mode 100644 index 0000000..1be2fd6 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/cs.js @@ -0,0 +1 @@ +tinyMCE.addI18n('cs.simple',{"cleanup_desc":"Vy\u010distit k\u00f3d","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/da.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/da.js new file mode 100644 index 0000000..92de7a7 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/da.js @@ -0,0 +1 @@ +tinyMCE.addI18n('da.simple',{"cleanup_desc":"Ryd op i uordentlig kode","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","striketrough_desc":"Gennemstreget","underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/de.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/de.js new file mode 100644 index 0000000..59bf788 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/de.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.simple',{"cleanup_desc":"Quellcode aufr\u00e4umen","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","numlist_desc":"Nummerierung","bullist_desc":"Aufz\u00e4hlung","striketrough_desc":"Durchgestrichen","underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/en.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/en.js new file mode 100644 index 0000000..088ed0f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/es.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/es.js new file mode 100644 index 0000000..bf6985f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/es.js @@ -0,0 +1,11 @@ +tinyMCE.addI18n('es.simple',{ +bold_desc:"Negrita (Ctrl+B)", +italic_desc:"Cursiva (Ctrl+I)", +underline_desc:"Subrayado (Ctrl+U)", +striketrough_desc:"Tachado", +bullist_desc:"Lista desordenada", +numlist_desc:"Lista ordenada", +undo_desc:"Deshacer (Ctrl+Z)", +redo_desc:"Rehacer (Ctrl+Y)", +cleanup_desc:"Limpiar c\u00F3digo basura" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fi.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fi.js new file mode 100644 index 0000000..6ca1d8d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fi.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fi.simple',{"cleanup_desc":"Siisti sekainen koodi","redo_desc":"Tee uudestaan (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","striketrough_desc":"Yliviivaus","underline_desc":"Alleviivaus (Ctrl+U)","italic_desc":"Kursivointi (Ctrl+I)","bold_desc":"Lihavointi (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fr.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fr.js new file mode 100644 index 0000000..ebe964e --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/fr.js @@ -0,0 +1 @@ +tinyMCE.addI18n('fr.simple',{"cleanup_desc":"Nettoyer le code","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","striketrough_desc":"Barr\u00e9","underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/he.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/he.js new file mode 100644 index 0000000..ade41a1 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/he.js @@ -0,0 +1 @@ +tinyMCE.addI18n('he.simple',{"cleanup_desc":"\u05e0\u05e7\u05d4 \u05e7\u05d5\u05d3","redo_desc":" (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/hu.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/hu.js new file mode 100644 index 0000000..6eff175 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/hu.js @@ -0,0 +1 @@ +tinyMCE.addI18n('hu.simple',{"cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","numlist_desc":"Sz\u00e1mozott lista besz\u00far\u00e1sa/elt\u00e1vol\u00edt\u00e1sa","bullist_desc":"Felsorol\u00e1s besz\u00far\u00e1sa/elt\u00e1vol\u00edt\u00e1sa","striketrough_desc":"\u00c1th\u00fazott","underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/it.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/it.js new file mode 100644 index 0000000..e0c45ed --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/it.js @@ -0,0 +1 @@ +tinyMCE.addI18n('it.simple',{"cleanup_desc":"Pulisci codice disordinato","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","striketrough_desc":"Barrato","underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ja.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ja.js new file mode 100644 index 0000000..b3acbb5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ja.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ja.simple',{"cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/nl.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/nl.js new file mode 100644 index 0000000..9f105d5 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/nl.js @@ -0,0 +1 @@ +tinyMCE.addI18n('nl.simple',{"cleanup_desc":"Code opruimen","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","striketrough_desc":"Doorhalen","underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pl.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pl.js new file mode 100644 index 0000000..e48d5df --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pl.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pl.simple',{"cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","striketrough_desc":"Przekre\u015blenie","underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pt.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pt.js new file mode 100644 index 0000000..955201d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/pt.js @@ -0,0 +1 @@ +tinyMCE.addI18n('pt.simple',{"cleanup_desc":"Limpar c\u00f3digo incorreto","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista n\u00e3o-ordenada","striketrough_desc":"Riscado","underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ru.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ru.js new file mode 100644 index 0000000..44970b2 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/ru.js @@ -0,0 +1 @@ +tinyMCE.addI18n('ru.simple',{"cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/sv.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/sv.js new file mode 100644 index 0000000..4824f58 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/sv.js @@ -0,0 +1 @@ +tinyMCE.addI18n('sv.simple',{"cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5\u0085ngra (Ctrl+Z)","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","striketrough_desc":"Genomstruken","underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/tr.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/tr.js new file mode 100644 index 0000000..01e4585 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/tr.js @@ -0,0 +1 @@ +tinyMCE.addI18n('tr.simple',{"cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","striketrough_desc":"\u00dcst\u00fc \u00e7izili","underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/uk.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/uk.js new file mode 100644 index 0000000..b016c9a --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/uk.js @@ -0,0 +1 @@ +tinyMCE.addI18n('uk.simple',{"cleanup_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/vi.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/vi.js new file mode 100644 index 0000000..a22b4bf --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/vi.js @@ -0,0 +1 @@ +tinyMCE.addI18n('vi.simple',{"cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","numlist_desc":"Danh s\u00e1ch theo th\u1ee9 t\u1ef1","bullist_desc":"Danh s\u00e1ch kh\u00f4ng theo th\u1ee9 t\u1ef1","striketrough_desc":"G\u1ea1ch ngang","underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-cn.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-cn.js new file mode 100644 index 0000000..6e0c695 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-cn.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-cn.simple',{"cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","redo_desc":"\u6062\u590d(Ctrl Y)","undo_desc":"\u64a4\u9500(Ctrl Z)","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-tw.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-tw.js new file mode 100644 index 0000000..1629934 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh-tw.js @@ -0,0 +1 @@ +tinyMCE.addI18n('zh-tw.simple',{"cleanup_desc":"\u6574\u7406\u8cc7\u6599","redo_desc":"\u91cd\u4f86 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57\u7684)","bullist_desc":"\u9805\u76ee\u7b26\u865f","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u7dda (Ctrl I)","bold_desc":"\u52a0\u7c97 (Ctrl B)"}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh.js b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh.js new file mode 100644 index 0000000..ed6ed68 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/langs/zh.js @@ -0,0 +1,11 @@ +tinyMCE.addI18n('zh.simple',{ +bold_desc:"\u7C97\u9AD4(Ctrl+B)", +italic_desc:"\u659C\u9AD4(Ctrl+I)", +underline_desc:"\u5E95\u7DDA (Ctrl+U)", +striketrough_desc:"\u4E2D\u5283\u7DDA", +bullist_desc:"\u6E05\u55AE\u7B26\u865F", +numlist_desc:"\u7DE8\u865F", +undo_desc:"\u64A4\u92B7 (Ctrl+Z)", +redo_desc:"\u6062\u5FA9 (Ctrl+Y)", +cleanup_desc:"\u522A\u9664\u5197\u9918\u78BC" +}); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/content.css b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/content.css new file mode 100644 index 0000000..2506c80 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/content.css @@ -0,0 +1,25 @@ +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +body { + background-color: #FFFFFF; +} + +.mceVisualAid { + border: 1px dashed #BBBBBB; +} + +/* MSIE specific */ + +* html body { + 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; +} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/ui.css b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/ui.css new file mode 100644 index 0000000..076fe84 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/default/ui.css @@ -0,0 +1,32 @@ +/* Reset */ +.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} + +/* Containers */ +.defaultSimpleSkin {position:relative} +.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;} +.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;} +.defaultSimpleSkin .mceToolbar {height:24px;} + +/* Layout */ +.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} + +/* Button */ +.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px} +.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +/* Separator */ +.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px} + +/* Theme */ +.defaultSimpleSkin span.mce_bold {background-position:0 0} +.defaultSimpleSkin span.mce_italic {background-position:-60px 0} +.defaultSimpleSkin span.mce_underline {background-position:-140px 0} +.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSimpleSkin span.mce_undo {background-position:-160px 0} +.defaultSimpleSkin span.mce_redo {background-position:-100px 0} +.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0} +.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} +.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/content.css b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/content.css new file mode 100644 index 0000000..595809f --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/content.css @@ -0,0 +1,17 @@ +body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} + +body {background: #FFF;} +.mceVisualAid {border: 1px dashed #BBB;} + +/* IE */ + +* html body { +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; +} diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/img/button_bg.png b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000..527e349 Binary files /dev/null and b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/img/button_bg.png differ diff --git a/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/ui.css b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..cf6c35d --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/themes/simple/skins/o2k7/ui.css @@ -0,0 +1,35 @@ +/* Reset */ +.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} + +/* Containers */ +.o2k7SimpleSkin {position:relative} +.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;} +.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;} +.o2k7SimpleSkin .mceToolbar {height:26px;} + +/* Layout */ +.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; } +.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px} +.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} + +/* Button */ +.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px} +.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px} +.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +/* Separator */ +.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* Theme */ +.o2k7SimpleSkin span.mce_bold {background-position:0 0} +.o2k7SimpleSkin span.mce_italic {background-position:-60px 0} +.o2k7SimpleSkin span.mce_underline {background-position:-140px 0} +.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0} +.o2k7SimpleSkin span.mce_undo {background-position:-160px 0} +.o2k7SimpleSkin span.mce_redo {background-position:-100px 0} +.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0} +.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} +.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/ehcp/net2ftp/plugins/tinymce/tiny_mce.js b/ehcp/net2ftp/plugins/tinymce/tiny_mce.js new file mode 100644 index 0000000..44d9fd9 --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/tiny_mce.js @@ -0,0 +1 @@ +(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.8",releaseDate:"2012-11-20",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,l=a.selection,H=a.settings,v=a.parser,o=a.serializer,E=tinymce.each;function A(N,M){try{a.getDoc().execCommand(N,false,M)}catch(L){}}function n(){var L=a.getDoc().documentMode;return L?L:6}function z(L){return L.isDefaultPrevented()}function J(){function L(O){var M,Q,N,P;M=l.getRng();Q=e.getParent(M.startContainer,e.isBlock);if(O){Q=e.getNext(Q,e.isBlock)}if(Q){N=Q.firstChild;while(N&&N.nodeType==3&&N.nodeValue.length===0){N=N.nextSibling}if(N&&N.nodeName==="SPAN"){P=N.cloneNode(false)}}E(e.select("span",Q),function(R){R.setAttribute("data-mce-mark","1")});a.getDoc().execCommand(O?"ForwardDelete":"Delete",false,null);Q=e.getParent(M.startContainer,e.isBlock);E(e.select("span",Q),function(R){var S=l.getBookmark();if(P){e.replace(P.cloneNode(false),R,true)}else{if(!R.getAttribute("data-mce-mark")){e.remove(R,true)}else{R.removeAttribute("data-mce-mark")}}l.moveToBookmark(S)})}a.onKeyDown.add(function(M,O){var N;N=O.keyCode==k;if(!z(O)&&(N||O.keyCode==f)&&!j.modifierPressed(O)){O.preventDefault();L(N)}});a.addCommand("Delete",function(){L()})}function q(){function L(O){var N=e.create("body");var P=O.cloneContents();N.appendChild(P);return l.serializer.serialize(N,{format:"html"})}function M(N){var P=L(N);var Q=e.createRng();Q.selectNode(a.getBody());var O=L(Q);return P===O}a.onKeyDown.add(function(O,Q){var P=Q.keyCode,N;if(!z(Q)&&(P==k||P==f)){N=O.selection.isCollapsed();if(N&&!e.isEmpty(O.getBody())){return}if(tinymce.isIE&&!N){return}if(!N&&!M(O.selection.getRng())){return}O.setContent("");O.selection.setCursorLocation(O.getBody(),0);O.nodeChanged()}})}function I(){a.onKeyDown.add(function(L,M){if(!z(M)&&M.keyCode==65&&j.metaKeyPressed(M)){M.preventDefault();L.execCommand("SelectAll")}})}function K(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(L){l.setRng(l.getRng())});e.bind(a.getDoc(),"mousedown",function(L){if(L.target==a.getDoc().documentElement){a.getWin().focus();l.setRng(l.getRng())}})}}function B(){a.onKeyDown.add(function(L,O){if(!z(O)&&O.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var N=l.getNode();var M=N.previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="hr"){e.remove(M);tinymce.dom.Event.cancel(O)}}}})}function y(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(M,N){if(!z(N)&&N.target.nodeName==="HTML"){var L=M.getBody();L.blur();setTimeout(function(){L.focus()},0)}})}}function h(){a.onClick.add(function(L,M){M=M.target;if(/^(IMG|HR)$/.test(M.nodeName)){l.getSel().setBaseAndExtent(M,0,M,1)}if(M.nodeName=="A"&&e.hasClass(M,"mceItemAnchor")){l.select(M)}L.nodeChanged()})}function c(){function M(){var O=e.getAttribs(l.getStart().cloneNode(false));return function(){var P=l.getStart();if(P!==a.getBody()){e.setAttrib(P,"style",null);E(O,function(Q){P.setAttributeNode(Q.cloneNode(true))})}}}function L(){return !l.isCollapsed()&&e.getParent(l.getStart(),e.isBlock)!=e.getParent(l.getEnd(),e.isBlock)}function N(O,P){P.preventDefault();return false}a.onKeyPress.add(function(O,Q){var P;if(!z(Q)&&(Q.keyCode==8||Q.keyCode==46)&&L()){P=M();O.getDoc().execCommand("delete",false,null);P();Q.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(P){var O;if(!z(P)&&L()){O=M();a.onKeyUp.addToTop(N);setTimeout(function(){O();a.onKeyUp.remove(N)},0)}})}function b(){var M,L;e.bind(a.getDoc(),"selectionchange",function(){if(L){clearTimeout(L);L=0}L=window.setTimeout(function(){var N=l.getRng();if(!M||!tinymce.dom.RangeUtils.compareRanges(N,M)){a.nodeChanged();M=N}},50)})}function x(){document.body.setAttribute("role","application")}function t(){a.onKeyDown.add(function(L,N){if(!z(N)&&N.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var M=l.getNode().previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(N)}}}})}function C(){if(n()>7){return}A("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");v.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type===3&&P.value.charAt(P.value-1)!="\n"){P.value+="\n"}else{R.parent.insert(new tinymce.html.Node("#text",3),R,true).value="\n"}}}});o.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type==3){P.value=P.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(N){var M,L=l.getNode();if(L.nodeName=="IMG"){if(M=e.getStyle(L,"width")){e.setAttrib(L,"width",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"width","")}if(M=e.getStyle(L,"height")){e.setAttrib(L,"height",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"height","")}}})}function d(){a.onKeyDown.add(function(R,S){var Q,L,M,O,P,T,N;Q=S.keyCode==k;if(!z(S)&&(Q||S.keyCode==f)&&!j.modifierPressed(S)){L=l.getRng();M=L.startContainer;O=L.startOffset;N=L.collapsed;if(M.nodeType==3&&M.nodeValue.length>0&&((O===0&&!N)||(N&&O===(Q?0:1)))){nonEmptyElements=R.schema.getNonEmptyElements();S.preventDefault();P=e.create("br",{id:"__tmp"});M.parentNode.insertBefore(P,M);R.getDoc().execCommand(Q?"ForwardDelete":"Delete",false,null);M=l.getRng().startContainer;T=M.previousSibling;if(T&&T.nodeType==1&&!e.isBlock(T)&&e.isEmpty(T)&&!nonEmptyElements[T.nodeName.toLowerCase()]){e.remove(T)}e.remove("__tmp")}}})}function G(){a.onKeyDown.add(function(P,Q){var N,M,R,L,O;if(z(Q)||Q.keyCode!=j.BACKSPACE){return}N=l.getRng();M=N.startContainer;R=N.startOffset;L=e.getRoot();O=M;if(!N.collapsed||R!==0){return}while(O&&O.parentNode&&O.parentNode.firstChild==O&&O.parentNode!=L){O=O.parentNode}if(O.tagName==="BLOCKQUOTE"){P.formatter.toggle("blockquote",null,O);N=e.createRng();N.setStart(M,0);N.setEnd(M,0);l.setRng(N)}})}function F(){function L(){a._refreshContentEditable();A("StyleWithCSS",false);A("enableInlineTableEditing",false);if(!H.object_resizing){A("enableObjectResizing",false)}}if(!H.readonly){a.onBeforeExecCommand.add(L);a.onMouseDown.add(L)}}function s(){function L(M,N){E(e.select("a"),function(Q){var O=Q.parentNode,P=e.getRoot();if(O.lastChild===Q){while(O&&!e.isBlock(O)){if(O.parentNode.lastChild!==O||O===P){return}O=O.parentNode}e.add(O,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(M,N){if(N==="CreateLink"){L(M)}});a.onSetContent.add(l.onSetContent.add(L))}function m(){if(H.forced_root_block){a.onInit.add(function(){A("DefaultParagraphSeparator",H.forced_root_block)})}}function p(){function L(N,M){if(!N||!M.initial){a.execCommand("mceRepaint")}}a.onUndo.add(L);a.onRedo.add(L);a.onSetContent.add(L)}function i(){a.onKeyDown.add(function(M,N){var L;if(!z(N)&&N.keyCode==f){L=M.getDoc().selection.createRange();if(L&&L.item){N.preventDefault();M.undoManager.beforeChange();e.remove(L.item(0));M.undoManager.add()}}})}function r(){var L;if(n()>=10){L="";E("p div h1 h2 h3 h4 h5 h6".split(" "),function(M,N){L+=(N>0?",":"")+M+":empty"});a.contentStyles.push(L+"{padding-right: 1px !important}")}}function u(){var N,M,ad,L,Y,ab,Z,ac,O,P,aa,W,V,X=document,T=a.getDoc();if(!H.object_resizing||H.webkit_fake_resize===false){return}A("enableObjectResizing",false);aa={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function R(ah){var ag,af;ag=ah.screenX-ab;af=ah.screenY-Z;W=ag*Y[2]+ac;V=af*Y[3]+O;W=W<5?5:W;V=V<5?5:V;if(j.modifierPressed(ah)||(ad.nodeName=="IMG"&&Y[2]*Y[3]!==0)){W=Math.round(V/P);V=Math.round(W*P)}e.setStyles(L,{width:W,height:V});if(Y[2]<0&&L.clientWidth<=W){e.setStyle(L,"left",N+(ac-W))}if(Y[3]<0&&L.clientHeight<=V){e.setStyle(L,"top",M+(O-V))}}function ae(){function af(ag,ah){if(ah){if(ad.style[ag]||!a.schema.isValid(ad.nodeName.toLowerCase(),ag)){e.setStyle(ad,ag,ah)}else{e.setAttrib(ad,ag,ah)}}}af("width",W);af("height",V);e.unbind(T,"mousemove",R);e.unbind(T,"mouseup",ae);if(X!=T){e.unbind(X,"mousemove",R);e.unbind(X,"mouseup",ae)}e.remove(L);Q(ad)}function Q(ai){var ag,ah,af;S();ag=e.getPos(ai);N=ag.x;M=ag.y;ah=ai.offsetWidth;af=ai.offsetHeight;if(ad!=ai){ad=ai;W=V=0}E(aa,function(al,aj){var ak;ak=e.get("mceResizeHandle"+aj);if(!ak){ak=e.add(T.documentElement,"div",{id:"mceResizeHandle"+aj,"class":"mceResizeHandle",style:"cursor:"+aj+"-resize; margin:0; padding:0"});e.bind(ak,"mousedown",function(am){am.preventDefault();ae();ab=am.screenX;Z=am.screenY;ac=ad.clientWidth;O=ad.clientHeight;P=O/ac;Y=al;L=ad.cloneNode(true);e.addClass(L,"mceClonedResizable");e.setStyles(L,{left:N,top:M,margin:0});T.documentElement.appendChild(L);e.bind(T,"mousemove",R);e.bind(T,"mouseup",ae);if(X!=T){e.bind(X,"mousemove",R);e.bind(X,"mouseup",ae)}})}else{e.show(ak)}e.setStyles(ak,{left:(ah*al[0]+N)-(ak.offsetWidth/2),top:(af*al[1]+M)-(ak.offsetHeight/2)})});if(!tinymce.isOpera&&ad.nodeName=="IMG"){ad.setAttribute("data-mce-selected","1")}}function S(){if(ad){ad.removeAttribute("data-mce-selected")}for(var af in aa){e.hide("mceResizeHandle"+af)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function U(){var af=e.getParent(l.getNode(),"table,img");E(e.select("img[data-mce-selected]"),function(ag){ag.removeAttribute("data-mce-selected")});if(af){Q(af)}else{S()}}a.onNodeChange.add(U);e.bind(T,"selectionchange",U);a.serializer.addAttributeFilter("data-mce-selected",function(af,ag){var ah=af.length;while(ah--){af[ah].attr(ag,null)}})}function D(){if(n()<9){v.addNodeFilter("noscript",function(L){var M=L.length,N,O;while(M--){N=L[M];O=N.firstChild;if(O){N.attr("data-mce-innertext",O.value)}}});o.addNodeFilter("noscript",function(L){var M=L.length,N,P,O;while(M--){N=L[M];P=L[M].firstChild;if(P){P.value=tinymce.html.Entities.decode(P.value)}else{O=N.attributes.map["data-mce-innertext"];if(O){N.attr("data-mce-innertext",null);P=new tinymce.html.Node("#text",3);P.value=O;P.raw=true;N.append(P)}}}})}}t();G();q();if(tinymce.isWebKit){d();J();K();h();m();if(tinymce.isIDevice){b()}else{u();I()}}if(tinymce.isIE){B();x();C();g();i();r();D()}if(tinymce.isGecko){B();y();c();F();s();p()}if(tinymce.isOpera){u()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
        "+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
        "+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

        ";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
        ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
        '}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}break;case u:if(i){q.moveFocus(1)}break;case y:if(o){q.moveFocus(-1)}break;case A:if(o){q.moveFocus(1)}break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
        ');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
        ");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
        ";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
        [\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.lastIERng){t.setRng(u.lastIERng)}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'>
        "}else{r='
        '}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aAar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aAar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aAar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:akan?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;adad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au=0;at--){aq.appendChild(c.clone(ax[at],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;c.insertAfter(aw,ay);r.setCursorLocation(aq,1)}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(A){var v=e.getRng(true),G,j,z,u,p,M,B,o,k,n,t,J,x,C;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function y(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(z.nodeType==3&&(Q?u>0:u=z.nodeValue.length){if(!b.isIE&&!D()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if(b.isIE&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(A.isDefaultPrevented()){return}z=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;B=A.shiftKey;if(z.nodeType==1&&z.hasChildNodes()){C=u>z.childNodes.length-1;z=z.childNodes[Math.min(u,z.childNodes.length-1)]||z;if(C&&z.nodeType==3){u=z.nodeValue.length}else{u=0}}j=K(z);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||B){L()}return}if((x&&!B)||(!x&&B)){z=l(z,u)}p=i.getParent(z,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!A.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&B){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!B){L();return}}else{if((!x&&!B&&t!="LI")||(x&&B)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);y(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file diff --git a/ehcp/net2ftp/plugins/tinymce/tiny_mce_popup.js b/ehcp/net2ftp/plugins/tinymce/tiny_mce_popup.js new file mode 100644 index 0000000..bb8e58c --- /dev/null +++ b/ehcp/net2ftp/plugins/tinymce/tiny_mce_popup.js @@ -0,0 +1,5 @@ + +// Uncomment and change this document.domain value if you are loading the script cross subdomains +// document.domain = 'moxiecode.com'; + +var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write(' + +

        +


        + +" onclick="document.forms['AdminForm'].state.value='admin_viewlogs'; document.forms['AdminForm'].submit();" />   +" onclick="document.forms['AdminForm'].state.value='admin_emptylogs'; document.forms['AdminForm'].submit();" />
        +

        +


        +" onclick="document.forms['AdminForm'].state.value='admin_createtables'; document.forms['AdminForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/blue/admin_createtables1.template.php b/ehcp/net2ftp/skins/blue/admin_createtables1.template.php new file mode 100644 index 0000000..9658816 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/admin_createtables1.template.php @@ -0,0 +1,25 @@ + + + + + + +\n"; + } // end for ?> + +

        + + + + + + +


        + +

        +

        + + diff --git a/ehcp/net2ftp/skins/blue/admin_createtables2.template.php b/ehcp/net2ftp/skins/blue/admin_createtables2.template.php new file mode 100644 index 0000000..12a461e --- /dev/null +++ b/ehcp/net2ftp/skins/blue/admin_createtables2.template.php @@ -0,0 +1,21 @@ + + + + + + + + + + +
        +:
        +:
        +:
        +:

        + +
        +\n"; + } // end for ?> + diff --git a/ehcp/net2ftp/skins/blue/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/blue/admin_emptylogs1.template.php new file mode 100644 index 0000000..134f578 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/admin_emptylogs1.template.php @@ -0,0 +1,11 @@ + + + + + + +\n"; + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/blue/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/blue/admin_viewlogs1.template.php new file mode 100644 index 0000000..4c1e92c --- /dev/null +++ b/ehcp/net2ftp/skins/blue/admin_viewlogs1.template.php @@ -0,0 +1,19 @@ + + + + + + + +

        + + +

        + + +

        + + +

        + + diff --git a/ehcp/net2ftp/skins/blue/advanced1.template.php b/ehcp/net2ftp/skins/blue/advanced1.template.php new file mode 100644 index 0000000..3343f47 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/advanced1.template.php @@ -0,0 +1,18 @@ + + + +

        + + + " onclick="document.forms['AdvancedForm'].state.value='raw'; document.forms['AdvancedForm'].submit();" /> + + " disabled title="" /> + +

        + +

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_webserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_ftpserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_parsing'; document.forms['AdvancedForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/blue/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/blue/advanced_ftpserver1.template.php new file mode 100644 index 0000000..d892bde --- /dev/null +++ b/ehcp/net2ftp/skins/blue/advanced_ftpserver1.template.php @@ -0,0 +1,30 @@ + + + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + + + + +
        " />
        " />
        " />
        ">
        + diff --git a/ehcp/net2ftp/skins/blue/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/blue/advanced_ftpserver2.template.php new file mode 100644 index 0000000..22ba7d8 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/advanced_ftpserver2.template.php @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
          +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • +
          + +
        • + +
        • +
          + Line $i
          \n"; + print_r($parsedlist[$i]); + echo "
          "; + } // End for + ?> +
        • +
        + + diff --git a/ehcp/net2ftp/skins/blue/advanced_parsing1.template.php b/ehcp/net2ftp/skins/blue/advanced_parsing1.template.php new file mode 100644 index 0000000..a9f1d6f --- /dev/null +++ b/ehcp/net2ftp/skins/blue/advanced_parsing1.template.php @@ -0,0 +1,6 @@ + + + + diff --git a/ehcp/net2ftp/skins/blue/advanced_webserver1.template.php b/ehcp/net2ftp/skins/blue/advanced_webserver1.template.php new file mode 100644 index 0000000..ad249ca --- /dev/null +++ b/ehcp/net2ftp/skins/blue/advanced_webserver1.template.php @@ -0,0 +1,108 @@ + + + +
          + +
        • + + +
        • +
        • +
          • +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
        • + +
        • +
          • +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • +
            + +
          • + +
          • +
            +Line $i
            \n"; + print_r($parsedlist[$i]); + echo "
            "; + } // End for +?> +
          • +
        • + + diff --git a/ehcp/net2ftp/skins/blue/bookmark1.template.php b/ehcp/net2ftp/skins/blue/bookmark1.template.php new file mode 100644 index 0000000..52fa192 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/bookmark1.template.php @@ -0,0 +1,14 @@ + + + +
          +
          +
            +
          • +
          • +
          + +
          +
          + + diff --git a/ehcp/net2ftp/skins/blue/browse_main.template.php b/ehcp/net2ftp/skins/blue/browse_main.template.php new file mode 100644 index 0000000..390d696 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/browse_main.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/blue/browse_main_details.template.php b/ehcp/net2ftp/skins/blue/browse_main_details.template.php new file mode 100644 index 0000000..742d226 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/browse_main_details.template.php @@ -0,0 +1,349 @@ + + + + + +
          +
          " method="post"> + + + + + + + + + + + + + + + +
            ;"> + + + ;"> +
          + +
          ;"> + +
          + +
          + : +
          + +
          + + +
          + +

          + + + +
          + +

          + + + +
          + +

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + +
          +
          ;"> +" onclick="submitBrowseForm('', '', 'newdir', '');" title=" (accesskey w)" accesskey="w" /> +" onclick="submitBrowseForm('', '', 'edit', 'newfile');" title=" (accesskey y)" accesskey="y" /> +" onclick="submitBrowseForm('', '', 'easyWebsite', '');" title=" (accesskey e)" accesskey="e" /> +" onclick="submitBrowseForm('', '', 'upload', '');" title=" (accesskey u)" accesskey="u" /> +" onclick="submitBrowseForm('', '', 'jupload', '');" title=" (accesskey p)" accesskey="j" /> +" onclick="toggleElement('upload');" title=" (accesskey a)" accesskey="a" /> +" onclick="submitBrowseForm('', '', 'install', '');" title=" (accesskey k)" accesskey="k" /> +" onclick="submitBrowseForm('', '', 'advanced', 'main');" title=" (accesskey n)" accesskey="n" /> + ;"> + +" onclick="submitBrowseForm('', '', 'copymovedelete', 'copy');" title=" (accesskey c)" accesskey="c" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'move');" title=" (accesskey m)" accesskey="m" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'delete');" title=" (accesskey d)" accesskey="d" /> +" onclick="submitBrowseForm('', '', 'rename', '');" title=" (accesskey o)" accesskey="o" /> +" onclick="submitBrowseForm('', '', 'chmod', '');" title=" (accesskey p)" accesskey="p" /> +
          +" onclick="submitBrowseForm('', '', 'downloadzip', '');" title=" (accesskey x)" accesskey="x" /> +" onclick="submitBrowseForm('', '', 'zip', 'zip');" title=" (accesskey z)" accesskey="z" /> +" onclick="submitBrowseForm('', '', 'unzip', '');" title=" (accesskey i)" accesskey="i" /> +" onclick="submitBrowseForm('', '', 'calculatesize', '');" title=" (accesskey q)" accesskey="q" /> +" onclick="submitBrowseForm('', '', 'findstring', '');" title=" (accesskey f)" accesskey="f" /> +
          +
          +
          " title="">" title="">" title="">" title="">" title="">" title="">" title="">
          +
          + +
          " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + "d")); ?> + " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + .. +
          " style="text-align: center; width: 32px;"> + + + + + + + +
          " style="text-align: center; width: 32px;"> + + + + + + + + ', 'view', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'edit', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'updatefile', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ">
          " style="text-align: center; width: 32px;"> + + + + + + + +
          +


          +
          +
          + +
          + +
          + + +
          +:
          +: /
          +:
          +:
          + +:
          +: + +
          + +
          + + diff --git a/ehcp/net2ftp/skins/blue/browse_main_icons.template.php b/ehcp/net2ftp/skins/blue/browse_main_icons.template.php new file mode 100644 index 0000000..bc21b32 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/browse_main_icons.template.php @@ -0,0 +1,274 @@ + + + + + +
          +
          " method="post"> + + + + + + + " style="cursor: pointer; cursor: hand; border: 0px; text-align: center;"> + + +
          + + + + + + +
          + +

          + + + +
          + +

          + + + +
          + +

          + + +
          + : +
          + +
          + +
          + + + + + 0) { ?> + + + + + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
          + () +
          : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + ( / ) +
          : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + () +
          | : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + () +
          +
          +
          + +
          +
           
          +


          +
          + +
          + + + +
          + + diff --git a/ehcp/net2ftp/skins/blue/browse_popup.template.php b/ehcp/net2ftp/skins/blue/browse_popup.template.php new file mode 100644 index 0000000..4261d39 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/browse_popup.template.php @@ -0,0 +1,30 @@ + + +
          " method="post"> + + + + + + + +" onclick="opener.document..value=document.forms['DirectoryTreeForm'].directory.value; self.close();" />

          +

          + +
          +
          + diff --git a/ehcp/net2ftp/skins/blue/calculatesize1.template.php b/ehcp/net2ftp/skins/blue/calculatesize1.template.php new file mode 100644 index 0000000..d7a3568 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/calculatesize1.template.php @@ -0,0 +1,6 @@ + + + +
          + + diff --git a/ehcp/net2ftp/skins/blue/chmod1.template.php b/ehcp/net2ftp/skins/blue/chmod1.template.php new file mode 100644 index 0000000..0683595 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/chmod1.template.php @@ -0,0 +1,67 @@ + + + + +
          + : 5px;"> + + + + + + + + + + + + + + + + + + + + + +
          Owner:ReadWriteExecute
          Group:ReadWriteExecute
          Everyone:ReadWriteExecute
          +
          To set all permissions to the same values, enter those permissions above and click on the button "Set all permissions"
          +

          + + + +
          + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + +
          Owner: />Read />Write />Execute
          Group: />Read />Write />Execute
          Everyone: />Read />Write />Execute
          Chmod value: " name="chmod" id="chmod" onchange="update_checkbox();" />
          + +
          +
          + +

          + + + + diff --git a/ehcp/net2ftp/skins/blue/chmod2.template.php b/ehcp/net2ftp/skins/blue/chmod2.template.php new file mode 100644 index 0000000..02b2089 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/chmod2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["ftp_chmod2"][$i] == "
        ") { echo $net2ftp_output["ftp_chmod2"][$i] . "\n"; } + else { echo "
      1. " . $net2ftp_output["ftp_chmod2"][$i] . "
      2. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/blue/copymovedelete1.template.php b/ehcp/net2ftp/skins/blue/copymovedelete1.template.php new file mode 100644 index 0000000..48047ee --- /dev/null +++ b/ehcp/net2ftp/skins/blue/copymovedelete1.template.php @@ -0,0 +1,85 @@ + + + + + + + +
        + " onclick="CopyValueToAll(document.forms['CopyMoveDeleteForm'], document.forms['CopyMoveDeleteForm'].headerDirectory, 'targetdirectory');" />   + " /> + +
        +
        +
        +
        + : 100px; margin-bottom: 30px;"> + + + + + + + + + + + + + + + +
        + port + +
        :
        :
        +
        +
        + +
        +
        + +
        +

        + + + + + + " /> +%1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Copy file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Copy symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "move") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Move directory %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Move file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Move symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "delete") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Directory %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("File %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Symlink %1\$s", $list["all"][$i]["dirfilename"]); } + } +?> +
        + + + + + + + + +
        + " /> +
        + " /> +

        + + + + diff --git a/ehcp/net2ftp/skins/blue/copymovedelete2.template.php b/ehcp/net2ftp/skins/blue/copymovedelete2.template.php new file mode 100644 index 0000000..7c04e72 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/copymovedelete2.template.php @@ -0,0 +1,8 @@ + + +" || $net2ftp_output["ftp_copymovedelete"][$i] == "") { echo $net2ftp_output["ftp_copymovedelete"][$i] . "\n"; } + else { echo "
      3. " . $net2ftp_output["ftp_copymovedelete"][$i] . "
      4. \n"; } + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/blue/css/main.css.php b/ehcp/net2ftp/skins/blue/css/main.css.php new file mode 100644 index 0000000..74a0791 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/css/main.css.php @@ -0,0 +1,359 @@ +\\|]/", "", $_GET["image_url"]); } +else { $image_url = ""; } +?> + +/* CSS document colors +#003250 +#5893ac +#bbd2e0 +#F2F2F5 +#A7A7A7 +#787878 +*/ + +* { + padding: 0; + margin: 0; +} + +body { + background-color: #ffffff; + font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; + font-size: 62.5%; /* Resets 1em to 10px */ + color: #000; + text-align: center; +} + +#container { + margin-: auto; + margin-: auto; + margin-top: 10px; + margin-bottom: 20px; + width: 980px; + font-size: 1.2em; + text-align: ; +} + +#head { + padding-top: 20px; + padding-: 20px; + padding-: 20px; + padding-bottom: 20px; + height: 62px; + background: url(/img/bg_head.jpg) no-repeat; +} + +#headleft { + float:; +} + +#headright { + float:; + width:470px; +} + +#head h2 { + color: #FFF; +} + +#main { + background: #F2F2F5; + padding: 10px; +} + +#menu { + width: 200px; + float: ; +} + +.menuhead { + background: url(/img/bg_tabletop.png); + height: 18px; + width: 200px; + color: #FFF; + padding-top: 2px; + font-weight: bold; + text-align: center; +} + +.menucontent { + background: #bbd2e0; + color: #003250; + width: 193px; + padding-: 5px; + padding-top: 10px; + padding-bottom: 10px; + border-bottom: solid 1px #003250; + border-: solid 1px #003250; + border-: solid 1px #003250; +} + +#content { + margin-: 10px; + width: 750px; + float: ; +} + +#mainleft { + float:; + width: 465px; +} + +#mainright { + float: ; + width: 485px; + margin-: 10px; +} + +#tabelfeaturestop { + padding-: 10px; background-color: #003250; height: 21px; color:#FFF; padding-top:5px; +} + +#tablefeature { + background: #bbd2e0; + border-: #003250 1px solid; + border-: #003250 1px solid; + border-bottom: #003250 1px solid; + padding: 2px; +} + +#tablefeature span { + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; + padding-: 20px; + font-weight: bold; + color: #003250; +} + +#tablefeature p { + padding-:20px; + padding-top: 2px; + padding-bottom:2px; +} + +#foot { + height: 24px; + background: url(/img/bg_foot.jpg) no-repeat; + text-align: center; + padding-top: 13px; + color: #fff; + +} + +#poweredby { + padding-top: 10px; + text-align: center; + font-size: 0.75em; +} + +a, a:link { + text-decoration: underline; + color: #003250; +} + +a:hover { + text-decoration: none; + color: #5893ac; +} + +#foot a, #foot a:link { + text-decoration: none; + font-weight: bold; + color: #fff; +} + +#foot a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Tags */ +h1, h2, h3 { + font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; + font-weight: bold; + } + +h1 { + font-size: 2.2em; + color: #003250; +} + +h2 { + font-size: 1.6em; + color: #003250; +} + +h3 { + font-size: 1.4em; +} + +.underline { + text-decoration:underline; +} + +.button { + color: #003250; + background: #fff; + border: solid 1px #003250; + width: 50px; + padding: 2px; +} + +.smallbutton { + color: #003250; + background: #fff; + border: solid 1px #003250; + padding: 1px; +} + +br { + line-height: 1em; +} + +ul { + padding-: 15px; +} + +/* Navigation */ +.navlist { + margin-: 0; + padding-: 0; + list-style: none; +} + +.navlist li { + padding-: 20px; + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; +} + +.navlist li a, .navlist li a:link { + text-decoration: none; + color: #003250; +} + +.navlist li a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Form */ + +select, input { + padding: 2px; + margin-top: 1px; + margin-: 0; + margin-bottom: 1px; + margin-: 0; + font-size: 1em; +} + +textarea { + padding: 2px; +} + +.warning-box { + background-color: #FFDD00; + color: #000000; + border: 2px; + border-style: solid; + border-color: #FFCC33; + margin-: 0px; + margin-: 10px; +} + +.warning-text { + padding-bottom : 5px; + padding-top : 5px; + padding- : 10px; + padding- : 10px; +} + +.browse_cell { + width: 120px; + height: 60px; + font-size: 0.8em; + text-align: center; + overflow: hidden; + padding: 3px; +} + +.browse_rows_actions { + background-color: #bbd2e0; + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_heading { + background-color: #bbd2e0; + color: #000000; + font-size: 110%; + font-weight: bold; +} + +.browse_rows_odd, .browse_rows_even { + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_separator { + border: 2px; + color: #000000; + font-size: 100%; + text-align: ; +} + +/*------------------------------------------------------------------------ + Process bar +From the PHP Pear package HTML_Progress +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php +------------------------------------------------------------------------*/ + +.p_ba7428 .progressBar, .p_ba7428 .progressBarBorder { + width: 172px; + height: 24px; + position: relative; + left: 0; + top: 0; +} + +.p_ba7428 .progressBarBorder { + border-width: 0; + border-style: solid; + border-color: #003250; +} + +.p_ba7428 .installationProgress { + width: 350px; + text-align: left; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; +} + +.p_ba7428 .cellI, .p_ba7428 .cellA { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 0.8em; + float: left; +} + +.p_ba7428 .cellI { + background-color: #003250; +} + +.p_ba7428 .cellA { + background-color: #003250; + visibility: hidden; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/blue/edit.template.php b/ehcp/net2ftp/skins/blue/edit.template.php new file mode 100644 index 0000000..bd724b4 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/edit.template.php @@ -0,0 +1,88 @@ + + +
        " method="post"> + + + +" /> + + + + + + + + + + + +
        ; width: 25%;"> + +   + +   + + ; width: 50%;"> + + " /> +
        + + Toggle header   Toggle body   Toggle footer + +
        + + +   + +
        ; width: 25%;"> + +
        ;"> +
        : 0px; text-align: ;"> + + + + + +
        + + +
        +
        +BasePath = $fckeditor_basepath; + $oFCKeditor->Value = $text_splitted["middle"]; + $oFCKeditor->Width = "100%" ; + $oFCKeditor->Height = "450px"; + $oFCKeditor->Config['AutoDetectLanguage'] = false; + $oFCKeditor->Config['DefaultLanguage'] = $fckeditor_language; + $oFCKeditor->ToolbarSet = "Default"; + $oFCKeditor->Create() ; ?> +
        + + + + +
        + + +
        +
        + + + + + + +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/error.template.php b/ehcp/net2ftp/skins/blue/error.template.php new file mode 100644 index 0000000..0ccb1ac --- /dev/null +++ b/ehcp/net2ftp/skins/blue/error.template.php @@ -0,0 +1,29 @@ + + + +

        +



        + or


        + + + + + diff --git a/ehcp/net2ftp/skins/blue/error_wrapped.template.php b/ehcp/net2ftp/skins/blue/error_wrapped.template.php new file mode 100644 index 0000000..6f73dd1 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/error_wrapped.template.php @@ -0,0 +1,31 @@ + + +" dir=""> + +" /> + + + +net2ftp - a web based FTP client +\n"; ?> + + +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/blue/findstring1.template.php b/ehcp/net2ftp/skins/blue/findstring1.template.php new file mode 100644 index 0000000..a786aab --- /dev/null +++ b/ehcp/net2ftp/skins/blue/findstring1.template.php @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + +
          (wildcard character is *)
          Bytes
         
        + + + + diff --git a/ehcp/net2ftp/skins/blue/findstring2.template.php b/ehcp/net2ftp/skins/blue/findstring2.template.php new file mode 100644 index 0000000..af405d5 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/findstring2.template.php @@ -0,0 +1,39 @@ + + + + + + + + +
        + + +
        + +
        + + + + + + + + + + + + + + + + + +
        ', '', 'view', '', 1);" title="" style="cursor: pointer; cursor: hand;">', '', 'edit', '', 1);" title="" style="cursor: pointer; cursor: hand;">
        + + diff --git a/ehcp/net2ftp/skins/blue/footer.template.php b/ehcp/net2ftp/skins/blue/footer.template.php new file mode 100644 index 0000000..773b29c --- /dev/null +++ b/ehcp/net2ftp/skins/blue/footer.template.php @@ -0,0 +1,34 @@ + + + + + + + +
        + net2ftp - a web based FTP client
        + Add to: Del.icio.us | + Digg | + Reddit +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/footer_versioncheck.template.php b/ehcp/net2ftp/skins/blue/footer_versioncheck.template.php new file mode 100644 index 0000000..acf0bc3 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/footer_versioncheck.template.php @@ -0,0 +1,32 @@ + + + + + + +
        + /help.html"> | | /LICENSE.txt">

        + + net2ftp - a web based FTP client

        + + + + Get Firefox!

        +
        + + diff --git a/ehcp/net2ftp/skins/blue/google_ad.template.php b/ehcp/net2ftp/skins/blue/google_ad.template.php new file mode 100644 index 0000000..2d15bdb --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/blue/google_browse.template.php b/ehcp/net2ftp/skins/blue/google_browse.template.php new file mode 100644 index 0000000..9c7a7a0 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_browse.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/google_login_adsense.template.php b/ehcp/net2ftp/skins/blue/google_login_adsense.template.php new file mode 100644 index 0000000..3afea18 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_login_adsense.template.php @@ -0,0 +1,26 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/google_login_content.template.php b/ehcp/net2ftp/skins/blue/google_login_content.template.php new file mode 100644 index 0000000..d5f0f97 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_login_content.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/google_login_firefox.template.php b/ehcp/net2ftp/skins/blue/google_login_firefox.template.php new file mode 100644 index 0000000..caf1320 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_login_firefox.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/google_logout.template.php b/ehcp/net2ftp/skins/blue/google_logout.template.php new file mode 100644 index 0000000..8a38920 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_logout.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/google_view.template.php b/ehcp/net2ftp/skins/blue/google_view.template.php new file mode 100644 index 0000000..0ec2d69 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/google_view.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/blue/header_login.template.php b/ehcp/net2ftp/skins/blue/header_login.template.php new file mode 100644 index 0000000..1c61511 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/header_login.template.php @@ -0,0 +1,12 @@ + + +
        + + diff --git a/ehcp/net2ftp/skins/blue/images/actions/back.png b/ehcp/net2ftp/skins/blue/images/actions/back.png new file mode 100644 index 0000000..2568b59 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/back.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/bookmark.png b/ehcp/net2ftp/skins/blue/images/actions/bookmark.png new file mode 100644 index 0000000..6cccfd9 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/bookmark.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/button_cancel.png b/ehcp/net2ftp/skins/blue/images/actions/button_cancel.png new file mode 100644 index 0000000..2d5e260 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/button_cancel.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/button_ok.png b/ehcp/net2ftp/skins/blue/images/actions/button_ok.png new file mode 100644 index 0000000..592ce6f Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/button_ok.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/exit.png b/ehcp/net2ftp/skins/blue/images/actions/exit.png new file mode 100644 index 0000000..08e97b4 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/exit.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/filesave.png b/ehcp/net2ftp/skins/blue/images/actions/filesave.png new file mode 100644 index 0000000..ae13a15 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/filesave.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/forward.png b/ehcp/net2ftp/skins/blue/images/actions/forward.png new file mode 100644 index 0000000..3453bde Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/forward.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/info.png b/ehcp/net2ftp/skins/blue/images/actions/info.png new file mode 100644 index 0000000..d56ba2c Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/info.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/reload.png b/ehcp/net2ftp/skins/blue/images/actions/reload.png new file mode 100644 index 0000000..4b0e37a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/reload.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/spacer.gif b/ehcp/net2ftp/skins/blue/images/actions/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/spacer.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/up.png b/ehcp/net2ftp/skins/blue/images/actions/up.png new file mode 100644 index 0000000..899ad4f Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/up.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/view_detailed.png b/ehcp/net2ftp/skins/blue/images/actions/view_detailed.png new file mode 100644 index 0000000..8c315cf Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/view_detailed.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/view_icon.png b/ehcp/net2ftp/skins/blue/images/actions/view_icon.png new file mode 100644 index 0000000..2b5d655 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/view_icon.png differ diff --git a/ehcp/net2ftp/skins/blue/images/actions/view_tree.png b/ehcp/net2ftp/skins/blue/images/actions/view_tree.png new file mode 100644 index 0000000..b896d17 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/actions/view_tree.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/apply.png b/ehcp/net2ftp/skins/blue/images/img/apply.png new file mode 100644 index 0000000..fe69b58 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/apply.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/arrow.gif b/ehcp/net2ftp/skins/blue/images/img/arrow.gif new file mode 100644 index 0000000..01f428b Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/arrow.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/img/back.png b/ehcp/net2ftp/skins/blue/images/img/back.png new file mode 100644 index 0000000..98999ee Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/back.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/bg_foot.jpg b/ehcp/net2ftp/skins/blue/images/img/bg_foot.jpg new file mode 100644 index 0000000..e68c495 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/bg_foot.jpg differ diff --git a/ehcp/net2ftp/skins/blue/images/img/bg_head.jpg b/ehcp/net2ftp/skins/blue/images/img/bg_head.jpg new file mode 100644 index 0000000..aabacb2 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/bg_head.jpg differ diff --git a/ehcp/net2ftp/skins/blue/images/img/bg_tabletop.png b/ehcp/net2ftp/skins/blue/images/img/bg_tabletop.png new file mode 100644 index 0000000..9a31276 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/bg_tabletop.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/bookmark.png b/ehcp/net2ftp/skins/blue/images/img/bookmark.png new file mode 100644 index 0000000..757e926 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/bookmark.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/exit.png b/ehcp/net2ftp/skins/blue/images/img/exit.png new file mode 100644 index 0000000..3e788f5 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/exit.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/folder_blue.png b/ehcp/net2ftp/skins/blue/images/img/folder_blue.png new file mode 100644 index 0000000..1419285 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/folder_blue.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/folder_grey.png b/ehcp/net2ftp/skins/blue/images/img/folder_grey.png new file mode 100644 index 0000000..94e7c23 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/help.png b/ehcp/net2ftp/skins/blue/images/img/help.png new file mode 100644 index 0000000..abb7294 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/help.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/html.png b/ehcp/net2ftp/skins/blue/images/img/html.png new file mode 100644 index 0000000..9adebaf Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/html.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/logo.png b/ehcp/net2ftp/skins/blue/images/img/logo.png new file mode 100644 index 0000000..5a21a59 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/logo.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/mime.png b/ehcp/net2ftp/skins/blue/images/img/mime.png new file mode 100644 index 0000000..d92b2f8 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/mime.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/reload.png b/ehcp/net2ftp/skins/blue/images/img/reload.png new file mode 100644 index 0000000..d1cc4f1 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/reload.png differ diff --git a/ehcp/net2ftp/skins/blue/images/img/spacer.gif b/ehcp/net2ftp/skins/blue/images/img/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/spacer.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/img/up.png b/ehcp/net2ftp/skins/blue/images/img/up.png new file mode 100644 index 0000000..1277d38 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/img/up.png differ diff --git a/ehcp/net2ftp/skins/blue/images/license.txt b/ehcp/net2ftp/skins/blue/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/blue/images/mime/acroread.png b/ehcp/net2ftp/skins/blue/images/mime/acroread.png new file mode 100644 index 0000000..b50f4a7 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/acroread.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/aktion.png b/ehcp/net2ftp/skins/blue/images/mime/aktion.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/aktion.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/ark.png b/ehcp/net2ftp/skins/blue/images/mime/ark.png new file mode 100644 index 0000000..e2b67dc Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/ark.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/arts.png b/ehcp/net2ftp/skins/blue/images/mime/arts.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/arts.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/ascend.png b/ehcp/net2ftp/skins/blue/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/browser.png b/ehcp/net2ftp/skins/blue/images/mime/browser.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/browser.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/colors.png b/ehcp/net2ftp/skins/blue/images/mime/colors.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/colors.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/cookie.png b/ehcp/net2ftp/skins/blue/images/mime/cookie.png new file mode 100644 index 0000000..5c1ca3c Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/cookie.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/descend.png b/ehcp/net2ftp/skins/blue/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/document.png b/ehcp/net2ftp/skins/blue/images/mime/document.png new file mode 100644 index 0000000..24c9c57 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/document.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/exec.png b/ehcp/net2ftp/skins/blue/images/mime/exec.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/exec.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/folder.png b/ehcp/net2ftp/skins/blue/images/mime/folder.png new file mode 100644 index 0000000..9232553 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/folder.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/folder_grey.png b/ehcp/net2ftp/skins/blue/images/mime/folder_grey.png new file mode 100644 index 0000000..22d0f41 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/fonts.png b/ehcp/net2ftp/skins/blue/images/mime/fonts.png new file mode 100644 index 0000000..3aab3bd Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/fonts.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/gimp.png b/ehcp/net2ftp/skins/blue/images/mime/gimp.png new file mode 100644 index 0000000..5078540 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/gimp.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/html.png b/ehcp/net2ftp/skins/blue/images/mime/html.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/html.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/java.png b/ehcp/net2ftp/skins/blue/images/mime/java.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/java.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/java_jar.png b/ehcp/net2ftp/skins/blue/images/mime/java_jar.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/java_jar.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/kservices.png b/ehcp/net2ftp/skins/blue/images/mime/kservices.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/kservices.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/mime.png b/ehcp/net2ftp/skins/blue/images/mime/mime.png new file mode 100644 index 0000000..55ace49 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/mime.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/ooo_gulls.png b/ehcp/net2ftp/skins/blue/images/mime/ooo_gulls.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/ooo_gulls.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/openoffice.png b/ehcp/net2ftp/skins/blue/images/mime/openoffice.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/openoffice.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/package_graphics.png b/ehcp/net2ftp/skins/blue/images/mime/package_graphics.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/package_graphics.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/php.png b/ehcp/net2ftp/skins/blue/images/mime/php.png new file mode 100644 index 0000000..6217a79 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/php.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/quicktime.png b/ehcp/net2ftp/skins/blue/images/mime/quicktime.png new file mode 100644 index 0000000..f0bc57a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/quicktime.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/realplayer.png b/ehcp/net2ftp/skins/blue/images/mime/realplayer.png new file mode 100644 index 0000000..07b1e86 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/realplayer.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/rpm.png b/ehcp/net2ftp/skins/blue/images/mime/rpm.png new file mode 100644 index 0000000..a584ce1 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/rpm.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/sound.png b/ehcp/net2ftp/skins/blue/images/mime/sound.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/sound.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/spacer.gif b/ehcp/net2ftp/skins/blue/images/mime/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/spacer.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/stylesheet.png b/ehcp/net2ftp/skins/blue/images/mime/stylesheet.png new file mode 100644 index 0000000..f7f9057 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/stylesheet.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/tar.png b/ehcp/net2ftp/skins/blue/images/mime/tar.png new file mode 100644 index 0000000..184f959 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/tar.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/terminal.png b/ehcp/net2ftp/skins/blue/images/mime/terminal.png new file mode 100644 index 0000000..75ce701 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/terminal.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/tgz.png b/ehcp/net2ftp/skins/blue/images/mime/tgz.png new file mode 100644 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/tgz.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/video.png b/ehcp/net2ftp/skins/blue/images/mime/video.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/video.png differ diff --git a/ehcp/net2ftp/skins/blue/images/mime/www.png b/ehcp/net2ftp/skins/blue/images/mime/www.png new file mode 100644 index 0000000..2d32c04 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/mime/www.png differ diff --git a/ehcp/net2ftp/skins/blue/images/settings/spacer.gif b/ehcp/net2ftp/skins/blue/images/settings/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/settings/spacer.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/aktion.png b/ehcp/net2ftp/skins/blue/images/titles/aktion.png new file mode 100644 index 0000000..59a8b19 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/aktion.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/ark.png b/ehcp/net2ftp/skins/blue/images/titles/ark.png new file mode 100644 index 0000000..3393d26 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/ark.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/bookmark.png b/ehcp/net2ftp/skins/blue/images/titles/bookmark.png new file mode 100644 index 0000000..dcadad7 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/bookmark.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/cache.png b/ehcp/net2ftp/skins/blue/images/titles/cache.png new file mode 100644 index 0000000..321e824 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/cache.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/colorize.png b/ehcp/net2ftp/skins/blue/images/titles/colorize.png new file mode 100644 index 0000000..61a6f63 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/colorize.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/editcopy.png b/ehcp/net2ftp/skins/blue/images/titles/editcopy.png new file mode 100644 index 0000000..a04d2f7 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/editcopy.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/editcut.png b/ehcp/net2ftp/skins/blue/images/titles/editcut.png new file mode 100644 index 0000000..a1b20f4 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/editcut.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/edittrash.png b/ehcp/net2ftp/skins/blue/images/titles/edittrash.png new file mode 100644 index 0000000..906608f Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/edittrash.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/folder_new.png b/ehcp/net2ftp/skins/blue/images/titles/folder_new.png new file mode 100644 index 0000000..309a646 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/folder_new.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/folder_txt.png b/ehcp/net2ftp/skins/blue/images/titles/folder_txt.png new file mode 100644 index 0000000..e02294a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/folder_txt.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/kcontrol.png b/ehcp/net2ftp/skins/blue/images/titles/kcontrol.png new file mode 100644 index 0000000..a359543 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/kcontrol.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/kgpg_identity.png b/ehcp/net2ftp/skins/blue/images/titles/kgpg_identity.png new file mode 100644 index 0000000..681ed2d Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/kgpg_identity.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/kgpg_info.png b/ehcp/net2ftp/skins/blue/images/titles/kgpg_info.png new file mode 100644 index 0000000..4fa7e01 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/kgpg_info.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/konquest.png b/ehcp/net2ftp/skins/blue/images/titles/konquest.png new file mode 100644 index 0000000..4f7a636 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/konquest.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/messagebox_warning.png b/ehcp/net2ftp/skins/blue/images/titles/messagebox_warning.png new file mode 100644 index 0000000..b11a7b6 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/messagebox_warning.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/misc.png b/ehcp/net2ftp/skins/blue/images/titles/misc.png new file mode 100644 index 0000000..0c17cd9 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/misc.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/openterm.png b/ehcp/net2ftp/skins/blue/images/titles/openterm.png new file mode 100644 index 0000000..254c976 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/openterm.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/package_editors.png b/ehcp/net2ftp/skins/blue/images/titles/package_editors.png new file mode 100644 index 0000000..a3b76ba Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/package_editors.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/spacer.gif b/ehcp/net2ftp/skins/blue/images/titles/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/spacer.gif differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/terminal.png b/ehcp/net2ftp/skins/blue/images/titles/terminal.png new file mode 100644 index 0000000..c7bdedf Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/terminal.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/thumbnail.png b/ehcp/net2ftp/skins/blue/images/titles/thumbnail.png new file mode 100644 index 0000000..bcc1681 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/thumbnail.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/view_left_right.png b/ehcp/net2ftp/skins/blue/images/titles/view_left_right.png new file mode 100644 index 0000000..5d337c6 Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/view_left_right.png differ diff --git a/ehcp/net2ftp/skins/blue/images/titles/viewmag.png b/ehcp/net2ftp/skins/blue/images/titles/viewmag.png new file mode 100644 index 0000000..848275d Binary files /dev/null and b/ehcp/net2ftp/skins/blue/images/titles/viewmag.png differ diff --git a/ehcp/net2ftp/skins/blue/install1.template.php b/ehcp/net2ftp/skins/blue/install1.template.php new file mode 100644 index 0000000..2a7cada --- /dev/null +++ b/ehcp/net2ftp/skins/blue/install1.template.php @@ -0,0 +1,15 @@ + + + +
        +

        + +
        +

        + +
        +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/install2.template.php b/ehcp/net2ftp/skins/blue/install2.template.php new file mode 100644 index 0000000..02b2089 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/install2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["ftp_chmod2"][$i] == "") { echo $net2ftp_output["ftp_chmod2"][$i] . "\n"; } + else { echo "
      5. " . $net2ftp_output["ftp_chmod2"][$i] . "
      6. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/blue/jupload1.template.php b/ehcp/net2ftp/skins/blue/jupload1.template.php new file mode 100644 index 0000000..f077123 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/jupload1.template.php @@ -0,0 +1,60 @@ + + + + + + + + + + "> + "> + "> + "> + "> + "> + "> + "> + + + + + + + + + + + + + + + + + + +Your browser does not support applets, or you have disabled applets in your browser settings. +To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now. +The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment). +Alternatively, use net2ftp's normal upload or upload-and-unzip functionality. +

        + +
        +
          +
        • %1\$s kB and by PHP to %2\$s", $max_filesize_net2ftp, $max_upload_filesize_php); ?>
        • +
        • %1\$s seconds", $max_execution_time); ?>
        • +
        • +
        • +
        +

        + diff --git a/ehcp/net2ftp/skins/blue/jupload2.template.php b/ehcp/net2ftp/skins/blue/jupload2.template.php new file mode 100644 index 0000000..010dc62 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/jupload2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/blue/login.template.php b/ehcp/net2ftp/skins/blue/login.template.php new file mode 100644 index 0000000..cb25d6b --- /dev/null +++ b/ehcp/net2ftp/skins/blue/login.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/blue/login_other.template.php b/ehcp/net2ftp/skins/blue/login_other.template.php new file mode 100644 index 0000000..84fae2a --- /dev/null +++ b/ehcp/net2ftp/skins/blue/login_other.template.php @@ -0,0 +1,48 @@ + + + +
        +
        + +
        +
        +
        +
        + +

        + +

        + +

        + +

        Select multiple files and click on Download; the selected files will be downloaded in a zip archive."); ?>

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        + +

        +
        +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/login_small.template.php b/ehcp/net2ftp/skins/blue/login_small.template.php new file mode 100644 index 0000000..1d42992 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/login_small.template.php @@ -0,0 +1,81 @@ + + +
        " method="post"> + + + +" /> +" /> +" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        : auto; margin-: auto; margin-top:50px; padding: 10px;"> + +
        + + +
        + + +
        + + + + + + + + + + + + + + + + +
        + +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/loginform.template.php b/ehcp/net2ftp/skins/blue/loginform.template.php new file mode 100644 index 0000000..2db41de --- /dev/null +++ b/ehcp/net2ftp/skins/blue/loginform.template.php @@ -0,0 +1,103 @@ +
        " method="post" onsubmit="return CheckInput(this);"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        : 10px; vertical-align: top; width: 20%; padding-top:5px;"> + + " style="width:230px;" /> + + + + " /> + + + + +   port " type="text" /> + + " /> + + + +
        : ftp.server.com, 192.123.45.67
        + +
        : 10px;"> 
        : 10px;"> /> 
        : 10px;"> />  SSL
        : 10px;"> + +
        : 10px;"> + +
        : 10px;"> + type="radio" />  Binary     + type="radio" />  +
        : 40px;"> + " alt="" /> +
        ; padding-: 20px; padding-bottom: 5px;">; padding-: 20px; padding-bottom: 5px;"> +   + +
        + + +
        + diff --git a/ehcp/net2ftp/skins/blue/logout.template.php b/ehcp/net2ftp/skins/blue/logout.template.php new file mode 100644 index 0000000..7c76143 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/logout.template.php @@ -0,0 +1,23 @@ + + +
        + +
        +

        follow this link.", $url); ?>


        +


        +


        +
        " title="" />
        +

        + +

        +
        + + + diff --git a/ehcp/net2ftp/skins/blue/manage.template.php b/ehcp/net2ftp/skins/blue/manage.template.php new file mode 100644 index 0000000..1a654b7 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/manage.template.php @@ -0,0 +1,34 @@ + + +
        + +

        +
        " method="post"> + + " /> + " /> + + " /> + + + + +   + + + + +

        + +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/newdir1.template.php b/ehcp/net2ftp/skins/blue/newdir1.template.php new file mode 100644 index 0000000..17eed6c --- /dev/null +++ b/ehcp/net2ftp/skins/blue/newdir1.template.php @@ -0,0 +1,9 @@ + + +%1\$s.", $net2ftp_globals["printdirectory"]); ?>

        +

        +

        +

        +

        +

        + diff --git a/ehcp/net2ftp/skins/blue/newdir2.template.php b/ehcp/net2ftp/skins/blue/newdir2.template.php new file mode 100644 index 0000000..0bd3e2a --- /dev/null +++ b/ehcp/net2ftp/skins/blue/newdir2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/blue/raw1.template.php b/ehcp/net2ftp/skins/blue/raw1.template.php new file mode 100644 index 0000000..c2eb509 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/raw1.template.php @@ -0,0 +1,16 @@ + + +
        + + +

        + +
        + + diff --git a/ehcp/net2ftp/skins/blue/rename1.template.php b/ehcp/net2ftp/skins/blue/rename1.template.php new file mode 100644 index 0000000..3aa5d13 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/rename1.template.php @@ -0,0 +1,8 @@ + + + + +
        + " />

        + + diff --git a/ehcp/net2ftp/skins/blue/rename2.template.php b/ehcp/net2ftp/skins/blue/rename2.template.php new file mode 100644 index 0000000..fefa084 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/rename2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/blue/status/license.txt b/ehcp/net2ftp/skins/blue/status/license.txt new file mode 100644 index 0000000..20330cc --- /dev/null +++ b/ehcp/net2ftp/skins/blue/status/license.txt @@ -0,0 +1,12 @@ + +All the code within this directory originates from the PHP Pear package called +HTML_Progress written by Laurent Laville. + +http://pear.laurent-laville.org/HTML_Progress/examples/index.html +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php + +------------------------------------------------------------------------------- + +The license of this code is: PHP License 3.0 +For more information on this license, go to http://www.php.net/license/3_0.txt + diff --git a/ehcp/net2ftp/skins/blue/status/status.inc.php b/ehcp/net2ftp/skins/blue/status/status.inc.php new file mode 100644 index 0000000..feaeccb --- /dev/null +++ b/ehcp/net2ftp/skins/blue/status/status.inc.php @@ -0,0 +1,37 @@ + 3) + $number = floor($current/$total*10); + + echo "\n"; + + flush(); + +} // End function setStatus + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/skins/blue/status/status.js b/ehcp/net2ftp/skins/blue/status/status.js new file mode 100644 index 0000000..a3ab12a --- /dev/null +++ b/ehcp/net2ftp/skins/blue/status/status.js @@ -0,0 +1,44 @@ + +var isDom = document.getElementById?true:false; +var isIE = document.all?true:false; +var isNS4 = document.layers?true:false; +var cellCount = 10; + +function setprogress(pIdent, pValue, pString, pDeterminate) +{ + if (isDom) { + prog = document.getElementById(pIdent+'installationProgress'); + } else if (isIE) { + prog = document.all[pIdent+'installationProgress']; + } else if (isNS4) { + prog = document.layers[pIdent+'installationProgress']; + } + if (prog != null) { + prog.innerHTML = pString; + } + if (pValue == pDeterminate) { + for (i=0; i < cellCount; i++) { + showCell(i, pIdent, "hidden"); + } + } + if ((pDeterminate > 0) && (pValue > 0)) { + i = (pValue-1) % cellCount; + showCell(i, pIdent, "visible"); + } else { + for (i=pValue-1; i >=0; i--) { + showCell(i, pIdent, "visible"); + } + } +} + +function showCell(pCell, pIdent, pVisibility) +{ + if (isDom) { + document.getElementById(pIdent+'progressCell'+pCell+'A').style.visibility = pVisibility; + } else if (isIE) { + document.all[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } else if (isNS4) { + document.layers[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } +} + diff --git a/ehcp/net2ftp/skins/blue/status/status.template.php b/ehcp/net2ftp/skins/blue/status/status.template.php new file mode 100644 index 0000000..6718046 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/status/status.template.php @@ -0,0 +1,37 @@ + + +
        +
        + + + + + +
        +
        +
        :2px;"> 
        +
        :19px;"> 
        +
        :36px;"> 
        +
        :53px;"> 
        +
        :70px;"> 
        +
        :87px;"> 
        +
        :104px;"> 
        +
        :121px;"> 
        +
        :138px;"> 
        +
        :155px;"> 
        +
        :2px;"> 
        +
        :19px;"> 
        +
        :36px;"> 
        +
        :53px;"> 
        +
        :70px;"> 
        +
        :87px;"> 
        +
        :104px;"> 
        +
        :121px;"> 
        +
        :138px;"> 
        +
        :155px;"> 
        +
        +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/blue/statusbar.template.php b/ehcp/net2ftp/skins/blue/statusbar.template.php new file mode 100644 index 0000000..748e29c --- /dev/null +++ b/ehcp/net2ftp/skins/blue/statusbar.template.php @@ -0,0 +1,25 @@ + + + + + + diff --git a/ehcp/net2ftp/skins/blue/unzip1.template.php b/ehcp/net2ftp/skins/blue/unzip1.template.php new file mode 100644 index 0000000..4d111c6 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/unzip1.template.php @@ -0,0 +1,29 @@ + + + + + +
        + " onclick="CopyValueToAll(document.UnzipForm, document.forms['UnzipForm'].headerDirectory, 'targetdirectory');" />   + " /> + +
        +
        +
        + +

        + + + + +%1\$s to:", $list["all"][$i]["dirfilename"]); ?>
        + + + " /> +
        + +

        + + + + diff --git a/ehcp/net2ftp/skins/blue/unzip2.template.php b/ehcp/net2ftp/skins/blue/unzip2.template.php new file mode 100644 index 0000000..9149662 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/unzip2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["unzip"][$i] == "") { echo $net2ftp_output["unzip"][$i] . "\n"; } + else { echo "
      7. " . $net2ftp_output["unzip"][$i] . "
      8. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/blue/upload1.template.php b/ehcp/net2ftp/skins/blue/upload1.template.php new file mode 100644 index 0000000..38d064c --- /dev/null +++ b/ehcp/net2ftp/skins/blue/upload1.template.php @@ -0,0 +1,37 @@ + + + " /> + +

        + + + + + + + + + +
        +

        +
        +
        (zip, tar, tgz, gz)

        +
        +
        + " onclick="add_file('file', 1);" />
        +
        +
        + " name="archive[]" onchange="add_file('archive', 1);" />
        + " onclick="add_file('archive', 1);" />
        +
        +


        + +
        +
          +
        • %1\$s kB and by PHP to %2\$s", $max_filesize_net2ftp, $max_upload_filesize_php); ?>
        • +
        • %1\$s seconds", $max_execution_time); ?>
        • +
        • +
        • +
        +

        + diff --git a/ehcp/net2ftp/skins/blue/upload2.template.php b/ehcp/net2ftp/skins/blue/upload2.template.php new file mode 100644 index 0000000..02429f8 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/upload2.template.php @@ -0,0 +1,38 @@ + + +: 100px; margin-bottom: 30px;"> + + + +
        + Checking files:
        +
          + +
        • + +
        + Transferring files to the FTP server:
        +
          +" . $net2ftp_output["ftp_transferfiles"][$i] . "\n"; + } // end for + } // end if + if (isset($net2ftp_output["ftp_unziptransferfiles"]) == true) { + for ($i=0; $i" || $net2ftp_output["ftp_unziptransferfiles"][$i] == "
        ") { echo $net2ftp_output["ftp_unziptransferfiles"][$i]; } + else { echo "
      9. " . $net2ftp_output["ftp_unziptransferfiles"][$i] . "
      10. \n"; } + } // end for + } // end if +?> + +
        + + +   + + + + + + diff --git a/ehcp/net2ftp/skins/blue/view1.template.php b/ehcp/net2ftp/skins/blue/view1.template.php new file mode 100644 index 0000000..a92dc79 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/view1.template.php @@ -0,0 +1,36 @@ + + + + + + + +
        + GeSHi"); ?> +
        + +
        + <?php echo $image_alt; ?>

        + +
        +
        + +
        + + + + + + +
        + + + + + diff --git a/ehcp/net2ftp/skins/blue/zip1.template.php b/ehcp/net2ftp/skins/blue/zip1.template.php new file mode 100644 index 0000000..92197d9 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/zip1.template.php @@ -0,0 +1,18 @@ + + +
        : 100px; margin-bottom: 10px;"> + +
          + +
        : 100px; margin-bottom: 10px;"> +

        +

        +
        + +
        + + + + + + diff --git a/ehcp/net2ftp/skins/blue/zip2.template.php b/ehcp/net2ftp/skins/blue/zip2.template.php new file mode 100644 index 0000000..af82d51 --- /dev/null +++ b/ehcp/net2ftp/skins/blue/zip2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/drupal/admin1.template.php b/ehcp/net2ftp/skins/drupal/admin1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/admin1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/admin_createtables1.template.php b/ehcp/net2ftp/skins/drupal/admin_createtables1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/admin_createtables1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/admin_createtables2.template.php b/ehcp/net2ftp/skins/drupal/admin_createtables2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/admin_createtables2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/drupal/admin_emptylogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/admin_emptylogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/drupal/admin_viewlogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/admin_viewlogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/advanced1.template.php b/ehcp/net2ftp/skins/drupal/advanced1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/advanced1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/drupal/advanced_ftpserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/advanced_ftpserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/drupal/advanced_ftpserver2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/advanced_ftpserver2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/advanced_parsing1.template.php b/ehcp/net2ftp/skins/drupal/advanced_parsing1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/advanced_parsing1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/advanced_webserver1.template.php b/ehcp/net2ftp/skins/drupal/advanced_webserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/advanced_webserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/bookmark1.template.php b/ehcp/net2ftp/skins/drupal/bookmark1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/bookmark1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/browse_main.template.php b/ehcp/net2ftp/skins/drupal/browse_main.template.php new file mode 100644 index 0000000..9d086f5 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/browse_main.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/browse_popup.template.php b/ehcp/net2ftp/skins/drupal/browse_popup.template.php new file mode 100644 index 0000000..cccfb5e --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/browse_popup.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/calculatesize1.template.php b/ehcp/net2ftp/skins/drupal/calculatesize1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/calculatesize1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/chmod1.template.php b/ehcp/net2ftp/skins/drupal/chmod1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/chmod1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/chmod2.template.php b/ehcp/net2ftp/skins/drupal/chmod2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/chmod2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/copymovedelete1.template.php b/ehcp/net2ftp/skins/drupal/copymovedelete1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/copymovedelete1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/copymovedelete2.template.php b/ehcp/net2ftp/skins/drupal/copymovedelete2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/copymovedelete2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/css/main.css.php b/ehcp/net2ftp/skins/drupal/css/main.css.php new file mode 100644 index 0000000..74a0791 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/css/main.css.php @@ -0,0 +1,359 @@ +\\|]/", "", $_GET["image_url"]); } +else { $image_url = ""; } +?> + +/* CSS document colors +#003250 +#5893ac +#bbd2e0 +#F2F2F5 +#A7A7A7 +#787878 +*/ + +* { + padding: 0; + margin: 0; +} + +body { + background-color: #ffffff; + font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; + font-size: 62.5%; /* Resets 1em to 10px */ + color: #000; + text-align: center; +} + +#container { + margin-: auto; + margin-: auto; + margin-top: 10px; + margin-bottom: 20px; + width: 980px; + font-size: 1.2em; + text-align: ; +} + +#head { + padding-top: 20px; + padding-: 20px; + padding-: 20px; + padding-bottom: 20px; + height: 62px; + background: url(/img/bg_head.jpg) no-repeat; +} + +#headleft { + float:; +} + +#headright { + float:; + width:470px; +} + +#head h2 { + color: #FFF; +} + +#main { + background: #F2F2F5; + padding: 10px; +} + +#menu { + width: 200px; + float: ; +} + +.menuhead { + background: url(/img/bg_tabletop.png); + height: 18px; + width: 200px; + color: #FFF; + padding-top: 2px; + font-weight: bold; + text-align: center; +} + +.menucontent { + background: #bbd2e0; + color: #003250; + width: 193px; + padding-: 5px; + padding-top: 10px; + padding-bottom: 10px; + border-bottom: solid 1px #003250; + border-: solid 1px #003250; + border-: solid 1px #003250; +} + +#content { + margin-: 10px; + width: 750px; + float: ; +} + +#mainleft { + float:; + width: 465px; +} + +#mainright { + float: ; + width: 485px; + margin-: 10px; +} + +#tabelfeaturestop { + padding-: 10px; background-color: #003250; height: 21px; color:#FFF; padding-top:5px; +} + +#tablefeature { + background: #bbd2e0; + border-: #003250 1px solid; + border-: #003250 1px solid; + border-bottom: #003250 1px solid; + padding: 2px; +} + +#tablefeature span { + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; + padding-: 20px; + font-weight: bold; + color: #003250; +} + +#tablefeature p { + padding-:20px; + padding-top: 2px; + padding-bottom:2px; +} + +#foot { + height: 24px; + background: url(/img/bg_foot.jpg) no-repeat; + text-align: center; + padding-top: 13px; + color: #fff; + +} + +#poweredby { + padding-top: 10px; + text-align: center; + font-size: 0.75em; +} + +a, a:link { + text-decoration: underline; + color: #003250; +} + +a:hover { + text-decoration: none; + color: #5893ac; +} + +#foot a, #foot a:link { + text-decoration: none; + font-weight: bold; + color: #fff; +} + +#foot a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Tags */ +h1, h2, h3 { + font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; + font-weight: bold; + } + +h1 { + font-size: 2.2em; + color: #003250; +} + +h2 { + font-size: 1.6em; + color: #003250; +} + +h3 { + font-size: 1.4em; +} + +.underline { + text-decoration:underline; +} + +.button { + color: #003250; + background: #fff; + border: solid 1px #003250; + width: 50px; + padding: 2px; +} + +.smallbutton { + color: #003250; + background: #fff; + border: solid 1px #003250; + padding: 1px; +} + +br { + line-height: 1em; +} + +ul { + padding-: 15px; +} + +/* Navigation */ +.navlist { + margin-: 0; + padding-: 0; + list-style: none; +} + +.navlist li { + padding-: 20px; + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; +} + +.navlist li a, .navlist li a:link { + text-decoration: none; + color: #003250; +} + +.navlist li a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Form */ + +select, input { + padding: 2px; + margin-top: 1px; + margin-: 0; + margin-bottom: 1px; + margin-: 0; + font-size: 1em; +} + +textarea { + padding: 2px; +} + +.warning-box { + background-color: #FFDD00; + color: #000000; + border: 2px; + border-style: solid; + border-color: #FFCC33; + margin-: 0px; + margin-: 10px; +} + +.warning-text { + padding-bottom : 5px; + padding-top : 5px; + padding- : 10px; + padding- : 10px; +} + +.browse_cell { + width: 120px; + height: 60px; + font-size: 0.8em; + text-align: center; + overflow: hidden; + padding: 3px; +} + +.browse_rows_actions { + background-color: #bbd2e0; + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_heading { + background-color: #bbd2e0; + color: #000000; + font-size: 110%; + font-weight: bold; +} + +.browse_rows_odd, .browse_rows_even { + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_separator { + border: 2px; + color: #000000; + font-size: 100%; + text-align: ; +} + +/*------------------------------------------------------------------------ + Process bar +From the PHP Pear package HTML_Progress +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php +------------------------------------------------------------------------*/ + +.p_ba7428 .progressBar, .p_ba7428 .progressBarBorder { + width: 172px; + height: 24px; + position: relative; + left: 0; + top: 0; +} + +.p_ba7428 .progressBarBorder { + border-width: 0; + border-style: solid; + border-color: #003250; +} + +.p_ba7428 .installationProgress { + width: 350px; + text-align: left; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; +} + +.p_ba7428 .cellI, .p_ba7428 .cellA { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 0.8em; + float: left; +} + +.p_ba7428 .cellI { + background-color: #003250; +} + +.p_ba7428 .cellA { + background-color: #003250; + visibility: hidden; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/drupal/edit.template.php b/ehcp/net2ftp/skins/drupal/edit.template.php new file mode 100644 index 0000000..0d63d47 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/edit.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/error.template.php b/ehcp/net2ftp/skins/drupal/error.template.php new file mode 100644 index 0000000..973e69b --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/error.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/findstring1.template.php b/ehcp/net2ftp/skins/drupal/findstring1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/findstring1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/findstring2.template.php b/ehcp/net2ftp/skins/drupal/findstring2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/findstring2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/footer.template.php b/ehcp/net2ftp/skins/drupal/footer.template.php new file mode 100644 index 0000000..27e3482 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/footer.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/footer_versioncheck.template.php b/ehcp/net2ftp/skins/drupal/footer_versioncheck.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/footer_versioncheck.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/google_ad.template.php b/ehcp/net2ftp/skins/drupal/google_ad.template.php new file mode 100644 index 0000000..2d15bdb --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/drupal/google_browse.template.php b/ehcp/net2ftp/skins/drupal/google_browse.template.php new file mode 100644 index 0000000..9c7a7a0 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_browse.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/google_login_adsense.template.php b/ehcp/net2ftp/skins/drupal/google_login_adsense.template.php new file mode 100644 index 0000000..3afea18 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_login_adsense.template.php @@ -0,0 +1,26 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/google_login_content.template.php b/ehcp/net2ftp/skins/drupal/google_login_content.template.php new file mode 100644 index 0000000..d5f0f97 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_login_content.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/google_login_firefox.template.php b/ehcp/net2ftp/skins/drupal/google_login_firefox.template.php new file mode 100644 index 0000000..caf1320 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_login_firefox.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/google_logout.template.php b/ehcp/net2ftp/skins/drupal/google_logout.template.php new file mode 100644 index 0000000..8a38920 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_logout.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/google_view.template.php b/ehcp/net2ftp/skins/drupal/google_view.template.php new file mode 100644 index 0000000..0ec2d69 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/google_view.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/drupal/images/mime/ascend.png b/ehcp/net2ftp/skins/drupal/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/drupal/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/drupal/images/mime/descend.png b/ehcp/net2ftp/skins/drupal/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/drupal/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/drupal/images/titles/kgpg_identity.png b/ehcp/net2ftp/skins/drupal/images/titles/kgpg_identity.png new file mode 100644 index 0000000..681ed2d Binary files /dev/null and b/ehcp/net2ftp/skins/drupal/images/titles/kgpg_identity.png differ diff --git a/ehcp/net2ftp/skins/drupal/jupload1.template.php b/ehcp/net2ftp/skins/drupal/jupload1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/jupload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/jupload2.template.php b/ehcp/net2ftp/skins/drupal/jupload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/jupload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/login.template.php b/ehcp/net2ftp/skins/drupal/login.template.php new file mode 100644 index 0000000..1730934 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/login.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/drupal/login_block.template.php b/ehcp/net2ftp/skins/drupal/login_block.template.php new file mode 100644 index 0000000..91e5bc2 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/login_block.template.php @@ -0,0 +1,65 @@ + + +
        " method="post" onsubmit="return CheckInput(this);"> + +
        + + " /> + + + + + + + +
        + +
        + + " /> + + "> + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + />   /> Binary + +
        + + + +
        " title=" (accesskey l)" accesskey="l" />
        + +
        + diff --git a/ehcp/net2ftp/skins/drupal/login_node.template.php b/ehcp/net2ftp/skins/drupal/login_node.template.php new file mode 100644 index 0000000..8f4af8b --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/login_node.template.php @@ -0,0 +1,148 @@ + + + + + + + + + + + +
        +
        +
        " method="post" onsubmit="return CheckInput(this);"> +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + " /> + + + + "> + + + + + port " /> + + "> + + + +
        : ftp.server.com, 192.123.45.67
        + +
        />
        /> SSL
        + + +
        + + +
        />   /> Binary
        + + + " title=" (accesskey l)" accesskey="l"/> +
        ; font-size: 80%;">
        + +
        +
        + +
        + + +
          +

        • +
        • +

        • +
        • +

        • + Select multiple files and click on Download; the selected files will be downloaded in a zip archive."); ?>
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +

        • +
        • +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/drupal/login_small.template.php b/ehcp/net2ftp/skins/drupal/login_small.template.php new file mode 100644 index 0000000..d608421 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/login_small.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/logout.template.php b/ehcp/net2ftp/skins/drupal/logout.template.php new file mode 100644 index 0000000..c555ec4 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/logout.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/manage.template.php b/ehcp/net2ftp/skins/drupal/manage.template.php new file mode 100644 index 0000000..f815b64 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/manage.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/newdir1.template.php b/ehcp/net2ftp/skins/drupal/newdir1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/newdir1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/newdir2.template.php b/ehcp/net2ftp/skins/drupal/newdir2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/newdir2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/raw1.template.php b/ehcp/net2ftp/skins/drupal/raw1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/raw1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/rename1.template.php b/ehcp/net2ftp/skins/drupal/rename1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/rename1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/rename2.template.php b/ehcp/net2ftp/skins/drupal/rename2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/rename2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/status/status.inc.php b/ehcp/net2ftp/skins/drupal/status/status.inc.php new file mode 100644 index 0000000..6d306e3 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/status/status.inc.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/drupal/status/status.template.php b/ehcp/net2ftp/skins/drupal/status/status.template.php new file mode 100644 index 0000000..7010567 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/status/status.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/statusbar.template.php b/ehcp/net2ftp/skins/drupal/statusbar.template.php new file mode 100644 index 0000000..e86b00d --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/statusbar.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/unzip1.template.php b/ehcp/net2ftp/skins/drupal/unzip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/unzip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/unzip2.template.php b/ehcp/net2ftp/skins/drupal/unzip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/unzip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/upload1.template.php b/ehcp/net2ftp/skins/drupal/upload1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/upload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/upload2.template.php b/ehcp/net2ftp/skins/drupal/upload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/upload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/view1.template.php b/ehcp/net2ftp/skins/drupal/view1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/view1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/zip1.template.php b/ehcp/net2ftp/skins/drupal/zip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/zip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/drupal/zip2.template.php b/ehcp/net2ftp/skins/drupal/zip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/drupal/zip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/admin1.template.php b/ehcp/net2ftp/skins/india/admin1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/admin1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/admin_createtables1.template.php b/ehcp/net2ftp/skins/india/admin_createtables1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/admin_createtables1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/admin_createtables2.template.php b/ehcp/net2ftp/skins/india/admin_createtables2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/admin_createtables2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/india/admin_emptylogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/admin_emptylogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/india/admin_viewlogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/admin_viewlogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/advanced1.template.php b/ehcp/net2ftp/skins/india/advanced1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/advanced1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/india/advanced_ftpserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/advanced_ftpserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/india/advanced_ftpserver2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/advanced_ftpserver2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/advanced_parsing1.template.php b/ehcp/net2ftp/skins/india/advanced_parsing1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/advanced_parsing1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/advanced_webserver1.template.php b/ehcp/net2ftp/skins/india/advanced_webserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/advanced_webserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/bookmark1.template.php b/ehcp/net2ftp/skins/india/bookmark1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/bookmark1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/browse_main.template.php b/ehcp/net2ftp/skins/india/browse_main.template.php new file mode 100644 index 0000000..e582f1e --- /dev/null +++ b/ehcp/net2ftp/skins/india/browse_main.template.php @@ -0,0 +1,308 @@ + + + + + + + +
        + +
        " method="post"> + + + + + + +
        + +

        + + + +
        + +

        + + + +
        + +

        + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
        ; padding-: 20px; font-size: 80%;"> +
        + : +
        ; padding-: 20px;"> + +
        +
        + +
        " style="cursor: pointer; cursor: hand; border: 0px; text-align: center;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + +
        + () +
        : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + ( / ) +
        : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + () +
        | : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + () +
        +
        +
        + +
        +
         
        +


        +
        +
        + + +

        + +:
        +: + +
        + +
        + + + + diff --git a/ehcp/net2ftp/skins/india/browse_popup.template.php b/ehcp/net2ftp/skins/india/browse_popup.template.php new file mode 100644 index 0000000..cccfb5e --- /dev/null +++ b/ehcp/net2ftp/skins/india/browse_popup.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/calculatesize1.template.php b/ehcp/net2ftp/skins/india/calculatesize1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/calculatesize1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/chmod1.template.php b/ehcp/net2ftp/skins/india/chmod1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/chmod1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/chmod2.template.php b/ehcp/net2ftp/skins/india/chmod2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/chmod2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/copymovedelete1.template.php b/ehcp/net2ftp/skins/india/copymovedelete1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/copymovedelete1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/copymovedelete2.template.php b/ehcp/net2ftp/skins/india/copymovedelete2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/copymovedelete2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/css/main.css.php b/ehcp/net2ftp/skins/india/css/main.css.php new file mode 100644 index 0000000..7de0b7d --- /dev/null +++ b/ehcp/net2ftp/skins/india/css/main.css.php @@ -0,0 +1,294 @@ + + +body { + background-color : #E5E5E5; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: small; + font-weight: normal; + line-height: normal; + margin: 0px; +} + +h1, h2, h3, p, form { + margin: 0; +} + +.text_white { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + font-style: normal; + color: #ffffff; + font-weight: bold; + text-decoration: none; + +} + +.txtfieldmatter { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + color: #000000; + text-decoration: none; +} + +.txtfieldmidhead { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 15px; + font-style: normal; + color: #000000; + font-weight: bold; + text-decoration: none; + +} + +.txtfieldmidhead4 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + color: #1D64AD; + font-weight: bold; + text-decoration: none; +} + +.header21 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 20px; + font-style: normal; + color: #1D64AD; + font-weight: bold; + text-decoration: none; +} + +.header31 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + font-style: normal; + color: #1D64AD; + font-weight: bold; + text-decoration: none; +} + +.login_labels { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-style: normal; + color: #000000; + text-decoration: none; +} + +.txtfielddomain { + font-family: verdana, Arial, Helvetica, sans-serif; + font-size: 24px; + color: #ffffff; + font-style: normal; + text-decoration:none; +} + +.input_directory { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + font-weight: normal; color: #000000; + border: #000000; + width: 350px; + border: solid 1px #000000; + background-color: #ffffff; +} + +.input_directory:hover { + background-color: #fffcde; +} + +.input_directory:focus { + background-color: #fff9b9; +} + +.input_select { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + font-weight: normal; color: #000000; + border: #000000; + width: 120px; + border: solid 1px #000000; + background-color: #ffffff; +} + +.input_select:hover { + background-color: #fffcde; +} + +.input_select:focus { + background-color: #fffcde; +} + +.input_select_big { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; color: #000000; + border: #000000; + width: 150px; + border: solid 1px #000000; + background-color: #ffffff; +} + +.input_text { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; color: #000000; + border: #000000; + width: 200px; + border: solid 1px #000000; + background-color: #ffffff; +} + +.input_text:hover { + background-color: #fffcde; +} + +.input_text:focus { + background-color: #fff9b9; +} + +.input_text_small { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; color: #000000; + border: #000000; + width: 30px; + border: solid 1px #000000; + background-color: #ffffff; +} + +.input_text_small:hover { + background-color: #fffcde; +} + +.input_text_small:focus { + background-color: #fff9b9 ; +} + +.input_checkbox { +} + +.input_checkbox:hover { + background-color: #fffcde; +} + +.border { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + font-weight: normal; color: #000000; + border: #1E66AE; + border: solid 1px #000000; + background-color: #DDDDDD; +} + +.error_border1 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + font-weight: normal; color: #000000; + border: #ffffff; + border: solid 1px #000000; + background-color: #ffffff; +} + +.error_border2 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: normal; + font-weight: normal; color: #000000; + border: solid 1px #1E66AE; + background-color: #ffffff; +} + +.browse_cell { + width: 120px; + height: 60px; + font-size: 80%; + text-align: center; + text-align: center; + overflow: hidden; + padding: 3px; +} + +.bgcol { + background-color: #ffffff +} + +/*------------------------------------------------------------------------ + Process bar +From the PHP Pear package HTML_Progress +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php +------------------------------------------------------------------------*/ + +.p_561b57 .progressBar { + background-color: #FFFFFF; + width: 172px; + height: 24px; + position: relative; + : 0px; + top: 0px; +} +.p_561b57 .progressBarBorder { + background-color: #FFFFFF; + width: 172px; + height: 24px; + position: relative; + : 0px; + top: 0px; + border: 0px solid #000000; +} +.p_561b57 .installationProgress { + width: 300px; + text-align: ; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; + background-color: #FFFFFF; +} +.p_561b57 .cellI { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 8px; + float: ; + background-color: #CCCCCC; +} +.p_561b57 .cellA { + width: 15px; + height: 20px; + font-family: Courier, Verdana; + font-size: 8px; + float: ; + background-color: #006600; + visibility: hidden; +} + +.warning-box { + background-color: #FFDD00; + color: #000000; + border: 2px; + border-style: solid; + border-color: #FFCC33; + margin-: auto; + margin-: auto; + width: 90%; + +} + +.warning-text { + padding-bottom : 5px; + padding-top : 5px; + padding- : 10px; + padding- : 10px; +} diff --git a/ehcp/net2ftp/skins/india/edit.template.php b/ehcp/net2ftp/skins/india/edit.template.php new file mode 100644 index 0000000..0d63d47 --- /dev/null +++ b/ehcp/net2ftp/skins/india/edit.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/error.template.php b/ehcp/net2ftp/skins/india/error.template.php new file mode 100644 index 0000000..69941fe --- /dev/null +++ b/ehcp/net2ftp/skins/india/error.template.php @@ -0,0 +1,67 @@ + + + +
        + + + + + + + + + +
        : 20px; background-image:url(/backgrounds/error_mid_bg.gif); height: 29px; vertical-align: middle;"> + : +
        + + + + + + + + + + + + + + + + +
        +


        +
          + /backgrounds/error_button_back_.gif); height: 25px; width: 110px; text-align: center; margin-left: auto; margin-right: auto;"> + +
        : 15px; padding-top: 4px; cursor: pointer; cursor: hand; vertical-align: top;" onclick="top.history.back();">
        +
          + /backgrounds/error_button_login_.gif); height: 25px; width: 160px; text-align: center; margin-left: auto; margin-right: auto;"> + +
        : 15px; padding-top: 4px; cursor: pointer; cursor: hand; vertical-align: top;" onclick="document.location.href='index.php?state=clearcookies';">
        +
         
        + + +
        +
        + + diff --git a/ehcp/net2ftp/skins/india/findstring1.template.php b/ehcp/net2ftp/skins/india/findstring1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/findstring1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/findstring2.template.php b/ehcp/net2ftp/skins/india/findstring2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/findstring2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/footer.template.php b/ehcp/net2ftp/skins/india/footer.template.php new file mode 100644 index 0000000..d635a38 --- /dev/null +++ b/ehcp/net2ftp/skins/india/footer.template.php @@ -0,0 +1,54 @@ + + + + /backgrounds/bgmid.gif); vertical-align: top;"> + + + + + + +
        + /backgrounds/footbgline.gif" style="display: block; height: 8px; width: 998px; padding-left: 1px; padding-right: 1px;" alt="footer" /> +
        + + + + /backgrounds/footbg1.gif); height: 41px; vertical-align: top; text-align: center;"> + + + + + + +
        /backgrounds/footerbgline2.gif); height: 41px; text-align: center;"> + /help.html" class="text_white"> | | /LICENSE.txt" class="text_white"> +
        + + + + + + + + + net2ftp - a web based FTP client
        + Add to: Del.icio.us | Digg | Reddit + + + + + + + + + + + + + diff --git a/ehcp/net2ftp/skins/india/footer_versioncheck.template.php b/ehcp/net2ftp/skins/india/footer_versioncheck.template.php new file mode 100644 index 0000000..9636d68 --- /dev/null +++ b/ehcp/net2ftp/skins/india/footer_versioncheck.template.php @@ -0,0 +1,32 @@ + + + + + + +
        + /help.html"> | | /LICENSE.txt">

        + + net2ftp - a web based FTP client

        + + + + Get Firefox!

        +
        + + diff --git a/ehcp/net2ftp/skins/india/google_ad.template.php b/ehcp/net2ftp/skins/india/google_ad.template.php new file mode 100644 index 0000000..2d15bdb --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/india/google_browse.template.php b/ehcp/net2ftp/skins/india/google_browse.template.php new file mode 100644 index 0000000..65c777b --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_browse.template.php @@ -0,0 +1,23 @@ + + + + +
        + +
        + + diff --git a/ehcp/net2ftp/skins/india/google_login_adsense.template.php b/ehcp/net2ftp/skins/india/google_login_adsense.template.php new file mode 100644 index 0000000..3afea18 --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_login_adsense.template.php @@ -0,0 +1,26 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/india/google_login_content.template.php b/ehcp/net2ftp/skins/india/google_login_content.template.php new file mode 100644 index 0000000..d5f0f97 --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_login_content.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/india/google_login_firefox.template.php b/ehcp/net2ftp/skins/india/google_login_firefox.template.php new file mode 100644 index 0000000..caf1320 --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_login_firefox.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/india/google_logout.template.php b/ehcp/net2ftp/skins/india/google_logout.template.php new file mode 100644 index 0000000..8a38920 --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_logout.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/india/google_view.template.php b/ehcp/net2ftp/skins/india/google_view.template.php new file mode 100644 index 0000000..0ec2d69 --- /dev/null +++ b/ehcp/net2ftp/skins/india/google_view.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/india/header_login.template.php b/ehcp/net2ftp/skins/india/header_login.template.php new file mode 100644 index 0000000..d9bdcae --- /dev/null +++ b/ehcp/net2ftp/skins/india/header_login.template.php @@ -0,0 +1,43 @@ + + + + + + ","
        + + + + + + + + diff --git a/ehcp/net2ftp/skins/india/manage.template.php b/ehcp/net2ftp/skins/india/manage.template.php new file mode 100644 index 0000000..9f61b1e --- /dev/null +++ b/ehcp/net2ftp/skins/india/manage.template.php @@ -0,0 +1,36 @@ + + +
        + + +
        + " method="post"> + + " /> + " /> + + " /> + + + + +   + + + + +

        + + + + + + diff --git a/ehcp/net2ftp/skins/india/newdir1.template.php b/ehcp/net2ftp/skins/india/newdir1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/newdir1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/newdir2.template.php b/ehcp/net2ftp/skins/india/newdir2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/newdir2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/raw1.template.php b/ehcp/net2ftp/skins/india/raw1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/raw1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/rename1.template.php b/ehcp/net2ftp/skins/india/rename1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/rename1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/rename2.template.php b/ehcp/net2ftp/skins/india/rename2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/rename2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/status/license.txt b/ehcp/net2ftp/skins/india/status/license.txt new file mode 100644 index 0000000..20330cc --- /dev/null +++ b/ehcp/net2ftp/skins/india/status/license.txt @@ -0,0 +1,12 @@ + +All the code within this directory originates from the PHP Pear package called +HTML_Progress written by Laurent Laville. + +http://pear.laurent-laville.org/HTML_Progress/examples/index.html +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php + +------------------------------------------------------------------------------- + +The license of this code is: PHP License 3.0 +For more information on this license, go to http://www.php.net/license/3_0.txt + diff --git a/ehcp/net2ftp/skins/india/status/status.inc.php b/ehcp/net2ftp/skins/india/status/status.inc.php new file mode 100644 index 0000000..feaeccb --- /dev/null +++ b/ehcp/net2ftp/skins/india/status/status.inc.php @@ -0,0 +1,37 @@ + 3) + $number = floor($current/$total*10); + + echo "\n"; + + flush(); + +} // End function setStatus + +// ** ** +// ** ** +// ************************************************************************************** +// ************************************************************************************** + +?> \ No newline at end of file diff --git a/ehcp/net2ftp/skins/india/status/status.js b/ehcp/net2ftp/skins/india/status/status.js new file mode 100644 index 0000000..a3ab12a --- /dev/null +++ b/ehcp/net2ftp/skins/india/status/status.js @@ -0,0 +1,44 @@ + +var isDom = document.getElementById?true:false; +var isIE = document.all?true:false; +var isNS4 = document.layers?true:false; +var cellCount = 10; + +function setprogress(pIdent, pValue, pString, pDeterminate) +{ + if (isDom) { + prog = document.getElementById(pIdent+'installationProgress'); + } else if (isIE) { + prog = document.all[pIdent+'installationProgress']; + } else if (isNS4) { + prog = document.layers[pIdent+'installationProgress']; + } + if (prog != null) { + prog.innerHTML = pString; + } + if (pValue == pDeterminate) { + for (i=0; i < cellCount; i++) { + showCell(i, pIdent, "hidden"); + } + } + if ((pDeterminate > 0) && (pValue > 0)) { + i = (pValue-1) % cellCount; + showCell(i, pIdent, "visible"); + } else { + for (i=pValue-1; i >=0; i--) { + showCell(i, pIdent, "visible"); + } + } +} + +function showCell(pCell, pIdent, pVisibility) +{ + if (isDom) { + document.getElementById(pIdent+'progressCell'+pCell+'A').style.visibility = pVisibility; + } else if (isIE) { + document.all[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } else if (isNS4) { + document.layers[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } +} + diff --git a/ehcp/net2ftp/skins/india/status/status.template.php b/ehcp/net2ftp/skins/india/status/status.template.php new file mode 100644 index 0000000..947d764 --- /dev/null +++ b/ehcp/net2ftp/skins/india/status/status.template.php @@ -0,0 +1,43 @@ + + + +
        +
        ;"> + + + + + + diff --git a/ehcp/net2ftp/skins/india/images/actions/back.png b/ehcp/net2ftp/skins/india/images/actions/back.png new file mode 100644 index 0000000..2568b59 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/back.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/bookmark.png b/ehcp/net2ftp/skins/india/images/actions/bookmark.png new file mode 100644 index 0000000..6cccfd9 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/bookmark.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/button_cancel.png b/ehcp/net2ftp/skins/india/images/actions/button_cancel.png new file mode 100644 index 0000000..2d5e260 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/button_cancel.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/button_ok.png b/ehcp/net2ftp/skins/india/images/actions/button_ok.png new file mode 100644 index 0000000..592ce6f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/button_ok.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/exit.png b/ehcp/net2ftp/skins/india/images/actions/exit.png new file mode 100644 index 0000000..08e97b4 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/exit.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/filesave.png b/ehcp/net2ftp/skins/india/images/actions/filesave.png new file mode 100644 index 0000000..ae13a15 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/filesave.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/forward.png b/ehcp/net2ftp/skins/india/images/actions/forward.png new file mode 100644 index 0000000..3453bde Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/forward.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/info.png b/ehcp/net2ftp/skins/india/images/actions/info.png new file mode 100644 index 0000000..d56ba2c Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/info.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/reload.png b/ehcp/net2ftp/skins/india/images/actions/reload.png new file mode 100644 index 0000000..4b0e37a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/reload.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/spacer.gif b/ehcp/net2ftp/skins/india/images/actions/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/spacer.gif differ diff --git a/ehcp/net2ftp/skins/india/images/actions/up.png b/ehcp/net2ftp/skins/india/images/actions/up.png new file mode 100644 index 0000000..899ad4f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/up.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/view_detailed.png b/ehcp/net2ftp/skins/india/images/actions/view_detailed.png new file mode 100644 index 0000000..8c315cf Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/view_detailed.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/view_icon.png b/ehcp/net2ftp/skins/india/images/actions/view_icon.png new file mode 100644 index 0000000..2b5d655 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/view_icon.png differ diff --git a/ehcp/net2ftp/skins/india/images/actions/view_tree.png b/ehcp/net2ftp/skins/india/images/actions/view_tree.png new file mode 100644 index 0000000..b896d17 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/actions/view_tree.png differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet.gif b/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet.gif new file mode 100644 index 0000000..b617f6d Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet1.gif b/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet1.gif new file mode 100644 index 0000000..49e9e50 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/arrow_bullet1.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/bgbot.gif b/ehcp/net2ftp/skins/india/images/backgrounds/bgbot.gif new file mode 100644 index 0000000..37c443a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/bgbot.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/bgmid.gif b/ehcp/net2ftp/skins/india/images/backgrounds/bgmid.gif new file mode 100644 index 0000000..8ab030c Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/bgmid.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/bgmid2.gif b/ehcp/net2ftp/skins/india/images/backgrounds/bgmid2.gif new file mode 100644 index 0000000..bf08555 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/bgmid2.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/bgtop.gif b/ehcp/net2ftp/skins/india/images/backgrounds/bgtop.gif new file mode 100644 index 0000000..84cc6e6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/bgtop.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/bullet.gif b/ehcp/net2ftp/skins/india/images/backgrounds/bullet.gif new file mode 100644 index 0000000..0617de1 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/bullet.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/dottedlinemid.gif b/ehcp/net2ftp/skins/india/images/backgrounds/dottedlinemid.gif new file mode 100644 index 0000000..51eba79 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/dottedlinemid.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/edit_topbg_line.gif b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topbg_line.gif new file mode 100644 index 0000000..5bfd0d3 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topbg_line.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon1.gif b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon1.gif new file mode 100644 index 0000000..1c02ec6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon1.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon2.gif b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon2.gif new file mode 100644 index 0000000..f6630b7 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/edit_topicon2.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_left.gif b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_left.gif new file mode 100644 index 0000000..1b232e4 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_left.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_right.gif b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_right.gif new file mode 100644 index 0000000..3d0e3d9 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_back_right.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_left.gif b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_left.gif new file mode 100644 index 0000000..a578357 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_left.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_right.gif b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_right.gif new file mode 100644 index 0000000..cda6db0 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/error_button_login_right.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/error_mid_bg.gif b/ehcp/net2ftp/skins/india/images/backgrounds/error_mid_bg.gif new file mode 100644 index 0000000..59c80e6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/error_mid_bg.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/footbg1.gif b/ehcp/net2ftp/skins/india/images/backgrounds/footbg1.gif new file mode 100644 index 0000000..549e7e3 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/footbg1.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/footbgline.gif b/ehcp/net2ftp/skins/india/images/backgrounds/footbgline.gif new file mode 100644 index 0000000..c5182ee Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/footbgline.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/footerbgline2.gif b/ehcp/net2ftp/skins/india/images/backgrounds/footerbgline2.gif new file mode 100644 index 0000000..43cb9ee Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/footerbgline2.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/headbg.gif b/ehcp/net2ftp/skins/india/images/backgrounds/headbg.gif new file mode 100644 index 0000000..354ed5f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/headbg.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/header.gif b/ehcp/net2ftp/skins/india/images/backgrounds/header.gif new file mode 100644 index 0000000..c71f3c0 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/header.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/login1_butleft.gif b/ehcp/net2ftp/skins/india/images/backgrounds/login1_butleft.gif new file mode 100644 index 0000000..2b30f73 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/login1_butleft.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_left.gif b/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_left.gif new file mode 100644 index 0000000..d7991ec Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_left.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_right.gif b/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_right.gif new file mode 100644 index 0000000..941e667 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/login_button_grey_right.gif differ diff --git a/ehcp/net2ftp/skins/india/images/backgrounds/logo.gif b/ehcp/net2ftp/skins/india/images/backgrounds/logo.gif new file mode 100644 index 0000000..45008ab Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/backgrounds/logo.gif differ diff --git a/ehcp/net2ftp/skins/india/images/license.txt b/ehcp/net2ftp/skins/india/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/india/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/india/images/mime/acroread.png b/ehcp/net2ftp/skins/india/images/mime/acroread.png new file mode 100644 index 0000000..43670f7 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/acroread.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/aktion.png b/ehcp/net2ftp/skins/india/images/mime/aktion.png new file mode 100644 index 0000000..68726f5 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/aktion.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/ark.png b/ehcp/net2ftp/skins/india/images/mime/ark.png new file mode 100644 index 0000000..8dc0885 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/ark.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/arts.png b/ehcp/net2ftp/skins/india/images/mime/arts.png new file mode 100644 index 0000000..66c157a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/arts.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/ascend.png b/ehcp/net2ftp/skins/india/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/browser.png b/ehcp/net2ftp/skins/india/images/mime/browser.png new file mode 100644 index 0000000..e164a9f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/browser.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/colors.png b/ehcp/net2ftp/skins/india/images/mime/colors.png new file mode 100644 index 0000000..212adb0 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/colors.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/cookie.png b/ehcp/net2ftp/skins/india/images/mime/cookie.png new file mode 100644 index 0000000..db4bd61 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/cookie.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/descend.png b/ehcp/net2ftp/skins/india/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/document.png b/ehcp/net2ftp/skins/india/images/mime/document.png new file mode 100644 index 0000000..ac2ff05 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/document.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/exec.png b/ehcp/net2ftp/skins/india/images/mime/exec.png new file mode 100644 index 0000000..1780eaf Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/exec.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/folder.png b/ehcp/net2ftp/skins/india/images/mime/folder.png new file mode 100644 index 0000000..bd433f4 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/folder.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/folder_grey.png b/ehcp/net2ftp/skins/india/images/mime/folder_grey.png new file mode 100644 index 0000000..7e10c59 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/fonts.png b/ehcp/net2ftp/skins/india/images/mime/fonts.png new file mode 100644 index 0000000..fbe6709 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/fonts.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/gimp.png b/ehcp/net2ftp/skins/india/images/mime/gimp.png new file mode 100644 index 0000000..b167b11 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/gimp.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/html.png b/ehcp/net2ftp/skins/india/images/mime/html.png new file mode 100644 index 0000000..bd24112 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/html.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/java.png b/ehcp/net2ftp/skins/india/images/mime/java.png new file mode 100644 index 0000000..4ef5ad8 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/java.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/java_jar.png b/ehcp/net2ftp/skins/india/images/mime/java_jar.png new file mode 100644 index 0000000..4ef5ad8 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/java_jar.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/kservices.png b/ehcp/net2ftp/skins/india/images/mime/kservices.png new file mode 100644 index 0000000..135fd11 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/kservices.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/mime.png b/ehcp/net2ftp/skins/india/images/mime/mime.png new file mode 100644 index 0000000..b5cb3ae Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/mime.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/ooo_gulls.png b/ehcp/net2ftp/skins/india/images/mime/ooo_gulls.png new file mode 100644 index 0000000..8c24363 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/ooo_gulls.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/openoffice.png b/ehcp/net2ftp/skins/india/images/mime/openoffice.png new file mode 100644 index 0000000..8c24363 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/openoffice.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/package_graphics.png b/ehcp/net2ftp/skins/india/images/mime/package_graphics.png new file mode 100644 index 0000000..cf1c60d Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/package_graphics.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/php.png b/ehcp/net2ftp/skins/india/images/mime/php.png new file mode 100644 index 0000000..6166e0f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/php.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/quicktime.png b/ehcp/net2ftp/skins/india/images/mime/quicktime.png new file mode 100644 index 0000000..3bea4d7 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/quicktime.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/realplayer.png b/ehcp/net2ftp/skins/india/images/mime/realplayer.png new file mode 100644 index 0000000..2d1954e Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/realplayer.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/rpm.png b/ehcp/net2ftp/skins/india/images/mime/rpm.png new file mode 100644 index 0000000..bf95b1a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/rpm.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/sound.png b/ehcp/net2ftp/skins/india/images/mime/sound.png new file mode 100644 index 0000000..80f005b Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/sound.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/spacer.gif b/ehcp/net2ftp/skins/india/images/mime/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/spacer.gif differ diff --git a/ehcp/net2ftp/skins/india/images/mime/stylesheet.png b/ehcp/net2ftp/skins/india/images/mime/stylesheet.png new file mode 100644 index 0000000..35bdb05 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/stylesheet.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/tar.png b/ehcp/net2ftp/skins/india/images/mime/tar.png new file mode 100644 index 0000000..3f83ddf Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/tar.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/terminal.png b/ehcp/net2ftp/skins/india/images/mime/terminal.png new file mode 100644 index 0000000..290f723 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/terminal.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/tgz.png b/ehcp/net2ftp/skins/india/images/mime/tgz.png new file mode 100644 index 0000000..7183a99 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/tgz.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/video.png b/ehcp/net2ftp/skins/india/images/mime/video.png new file mode 100644 index 0000000..68efea6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/video.png differ diff --git a/ehcp/net2ftp/skins/india/images/mime/www.png b/ehcp/net2ftp/skins/india/images/mime/www.png new file mode 100644 index 0000000..bd24112 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/mime/www.png differ diff --git a/ehcp/net2ftp/skins/india/images/settings/spacer.gif b/ehcp/net2ftp/skins/india/images/settings/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/settings/spacer.gif differ diff --git a/ehcp/net2ftp/skins/india/images/titles/aktion.png b/ehcp/net2ftp/skins/india/images/titles/aktion.png new file mode 100644 index 0000000..59a8b19 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/aktion.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/ark.png b/ehcp/net2ftp/skins/india/images/titles/ark.png new file mode 100644 index 0000000..3393d26 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/ark.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/bookmark.png b/ehcp/net2ftp/skins/india/images/titles/bookmark.png new file mode 100644 index 0000000..dcadad7 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/bookmark.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/cache.png b/ehcp/net2ftp/skins/india/images/titles/cache.png new file mode 100644 index 0000000..321e824 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/cache.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/colorize.png b/ehcp/net2ftp/skins/india/images/titles/colorize.png new file mode 100644 index 0000000..61a6f63 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/colorize.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/editcopy.png b/ehcp/net2ftp/skins/india/images/titles/editcopy.png new file mode 100644 index 0000000..a04d2f7 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/editcopy.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/editcut.png b/ehcp/net2ftp/skins/india/images/titles/editcut.png new file mode 100644 index 0000000..a1b20f4 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/editcut.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/edittrash.png b/ehcp/net2ftp/skins/india/images/titles/edittrash.png new file mode 100644 index 0000000..906608f Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/edittrash.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/folder_new.png b/ehcp/net2ftp/skins/india/images/titles/folder_new.png new file mode 100644 index 0000000..309a646 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/folder_new.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/folder_txt.png b/ehcp/net2ftp/skins/india/images/titles/folder_txt.png new file mode 100644 index 0000000..e02294a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/folder_txt.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/kcontrol.png b/ehcp/net2ftp/skins/india/images/titles/kcontrol.png new file mode 100644 index 0000000..a359543 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/kcontrol.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/kgpg_identity.png b/ehcp/net2ftp/skins/india/images/titles/kgpg_identity.png new file mode 100644 index 0000000..681ed2d Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/kgpg_identity.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/kgpg_info.png b/ehcp/net2ftp/skins/india/images/titles/kgpg_info.png new file mode 100644 index 0000000..4fa7e01 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/kgpg_info.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/konquest.png b/ehcp/net2ftp/skins/india/images/titles/konquest.png new file mode 100644 index 0000000..4f7a636 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/konquest.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/messagebox_warning.png b/ehcp/net2ftp/skins/india/images/titles/messagebox_warning.png new file mode 100644 index 0000000..b11a7b6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/messagebox_warning.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/misc.png b/ehcp/net2ftp/skins/india/images/titles/misc.png new file mode 100644 index 0000000..0c17cd9 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/misc.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/openterm.png b/ehcp/net2ftp/skins/india/images/titles/openterm.png new file mode 100644 index 0000000..254c976 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/openterm.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/package_editors.png b/ehcp/net2ftp/skins/india/images/titles/package_editors.png new file mode 100644 index 0000000..a3b76ba Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/package_editors.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/spacer.gif b/ehcp/net2ftp/skins/india/images/titles/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/spacer.gif differ diff --git a/ehcp/net2ftp/skins/india/images/titles/terminal.png b/ehcp/net2ftp/skins/india/images/titles/terminal.png new file mode 100644 index 0000000..c7bdedf Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/terminal.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/thumbnail.png b/ehcp/net2ftp/skins/india/images/titles/thumbnail.png new file mode 100644 index 0000000..bcc1681 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/thumbnail.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/view_left_right.png b/ehcp/net2ftp/skins/india/images/titles/view_left_right.png new file mode 100644 index 0000000..5d337c6 Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/view_left_right.png differ diff --git a/ehcp/net2ftp/skins/india/images/titles/viewmag.png b/ehcp/net2ftp/skins/india/images/titles/viewmag.png new file mode 100644 index 0000000..848275d Binary files /dev/null and b/ehcp/net2ftp/skins/india/images/titles/viewmag.png differ diff --git a/ehcp/net2ftp/skins/india/install1.template.php b/ehcp/net2ftp/skins/india/install1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/install1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/install2.template.php b/ehcp/net2ftp/skins/india/install2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/install2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/jupload1.template.php b/ehcp/net2ftp/skins/india/jupload1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/jupload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/jupload2.template.php b/ehcp/net2ftp/skins/india/jupload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/jupload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/login.template.php b/ehcp/net2ftp/skins/india/login.template.php new file mode 100644 index 0000000..5638630 --- /dev/null +++ b/ehcp/net2ftp/skins/india/login.template.php @@ -0,0 +1,12 @@ + + + + + diff --git a/ehcp/net2ftp/skins/india/login_other.template.php b/ehcp/net2ftp/skins/india/login_other.template.php new file mode 100644 index 0000000..ce8f031 --- /dev/null +++ b/ehcp/net2ftp/skins/india/login_other.template.php @@ -0,0 +1,265 @@ + + + + + + + + diff --git a/ehcp/net2ftp/skins/india/login_small.template.php b/ehcp/net2ftp/skins/india/login_small.template.php new file mode 100644 index 0000000..d013b24 --- /dev/null +++ b/ehcp/net2ftp/skins/india/login_small.template.php @@ -0,0 +1,89 @@ + + +" method="post"> + + + +" /> +" /> +" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        : auto; margin-: auto; margin-top:50px; padding: 10px;"> + +
        + + +
        + + +
        + +
        /backgrounds/headbg.gif); height: 122px; vertical-align: top;"> + + + + + + +
        /backgrounds/header.gif); height: 122px; vertical-align: top;"> + + + + + + + +
        + + + + + + + +
        /backgrounds/logo.gif" style="height: 104px; width: 145px;" alt="logo" />
        +
        ;">net2ftp - a web based FTP client +
        +
        +
        /backgrounds/bgmid.gif); vertical-align: top;"> + + + + + + + + + + + + + + + + +
         
          +
        " method="post" onsubmit="return CheckInput(this);"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ;"> + + + + + + +
        : 10px; vertical-align: top;"> 
        + + + " /> + + + + " /> + + + + +   " type="text" /> + + " /> + + + +
        : ftp.server.com, 192.123.45.67
        + +
        + +
        + +
        + + /backgrounds/login_button_grey_.gif) no-repeat; width: 110px; height: 25px; padding-bottom: 3px; border: 0px;" name="" value="" alt="" /> +
        ; padding-: 20px;"> + +   + +
         
        + + +
        + +
          + + + + + + + + + + + + +
        : 10px; background-color: #1d64ad; height: 24;">
         
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         Select multiple files and click on Download; the selected files will be downloaded in a zip archive."); ?>
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        /backgrounds/arrow_bullet1.gif" style="height: 12px; width: 14px;" alt="arrow_bullet1" />
         
        +
        +
         
         
        +
        + + + + + + + + + + + + + + +
        + /backgrounds/login_button_grey_.gif); height: 25px; width: 110px; text-align: center; margin-left: auto; margin-right: auto;"> + + + + + +
        + /backgrounds/login_button_grey_.gif) no-repeat; width: 110px; height: 25px; padding-bottom: 3px; border: 0px;" name="" value="" alt="" /> +
        +
        + + + + diff --git a/ehcp/net2ftp/skins/india/logout.template.php b/ehcp/net2ftp/skins/india/logout.template.php new file mode 100644 index 0000000..38f825c --- /dev/null +++ b/ehcp/net2ftp/skins/india/logout.template.php @@ -0,0 +1,35 @@ + + + +
        /backgrounds/bgmid.gif); vertical-align: top;"> + + + + + + + + + + + + + + +
         
          +follow this link.", $url); ?>

        + +

        + +
        + +

        +" title="" /> +
        + +
         
         
        +
        + + + + +
        + +
        +
        :2px;"> 
        +
        :19px;"> 
        +
        :36px;"> 
        +
        :53px;"> 
        +
        :70px;"> 
        +
        :87px;"> 
        +
        :104px;"> 
        +
        :121px;"> 
        + +
        :138px;"> 
        +
        :155px;"> 
        +
        :2px;"> 
        +
        :19px;"> 
        +
        :36px;"> 
        +
        :53px;"> 
        +
        :70px;"> 
        +
        :87px;"> 
        +
        :104px;"> 
        + +
        :121px;"> 
        +
        :138px;"> 
        +
        :155px;"> 
        +
        +
        + +
        + + + + + diff --git a/ehcp/net2ftp/skins/india/statusbar.template.php b/ehcp/net2ftp/skins/india/statusbar.template.php new file mode 100644 index 0000000..ff38e1e --- /dev/null +++ b/ehcp/net2ftp/skins/india/statusbar.template.php @@ -0,0 +1,76 @@ + + + + + + + + ","
        + + + + ","
        ;"> + + + + + + + ",""],legend:[1,"
        ","
        "],thead:[1,"
        /backgrounds/headbg.gif); height: 122px; vertical-align: top;"> + + + + + + +
        /backgrounds/header.gif); height: 122px; vertical-align: top;"> + + + + + + + +
        + + + + + + +
        /backgrounds/logo.gif" style="height: 104px; width: 145px;" alt="logo" />
        +
        +
        "> + + + + + + + + + + + + + + + +
           
        : 20px; height: 45px; vertical-align: top; text-align: ;"> + + + + " /> + " /> + " /> + + + + +
        ;"> +
        +
        +
        +
        +
        /backgrounds/bgmid.gif); padding-: 30px; padding-: 30px; padding-top: 10px; padding-bottom: 10px; vertical-align: top;"> + diff --git a/ehcp/net2ftp/skins/india/unzip1.template.php b/ehcp/net2ftp/skins/india/unzip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/unzip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/unzip2.template.php b/ehcp/net2ftp/skins/india/unzip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/unzip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/upload1.template.php b/ehcp/net2ftp/skins/india/upload1.template.php new file mode 100644 index 0000000..5e657ad --- /dev/null +++ b/ehcp/net2ftp/skins/india/upload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/upload2.template.php b/ehcp/net2ftp/skins/india/upload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/upload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/view1.template.php b/ehcp/net2ftp/skins/india/view1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/view1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/zip1.template.php b/ehcp/net2ftp/skins/india/zip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/zip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/india/zip2.template.php b/ehcp/net2ftp/skins/india/zip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/india/zip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/advanced1.template.php b/ehcp/net2ftp/skins/iphone/advanced1.template.php new file mode 100644 index 0000000..cd7a247 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/advanced1.template.php @@ -0,0 +1,15 @@ + + + + + " onclick="document.forms['AdvancedForm'].state.value='raw'; document.forms['AdvancedForm'].submit();" /> + + " disabled title="" /> + +

        + +" onclick="document.forms['AdvancedForm'].state.value='advanced_webserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_ftpserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_parsing'; document.forms['AdvancedForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/iphone/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/iphone/advanced_ftpserver1.template.php new file mode 100644 index 0000000..89ea3e3 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/advanced_ftpserver1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/iphone/advanced_ftpserver2.template.php new file mode 100644 index 0000000..86b2968 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/advanced_ftpserver2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/advanced_parsing1.template.php b/ehcp/net2ftp/skins/iphone/advanced_parsing1.template.php new file mode 100644 index 0000000..f73775f --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/advanced_parsing1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/advanced_webserver1.template.php b/ehcp/net2ftp/skins/iphone/advanced_webserver1.template.php new file mode 100644 index 0000000..94a1d7e --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/advanced_webserver1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/browse_main.template.php b/ehcp/net2ftp/skins/iphone/browse_main.template.php new file mode 100644 index 0000000..2e36cb0 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/browse_main.template.php @@ -0,0 +1,119 @@ + + + +
        " method="post"> + + + + + +
        + net2ftp for the iphone +
        + +
        +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + +
        ()
        +
        + +

        + 0) { ?> +" . $list_directories[$i]["dirfilename"] . ""; } + else { $href = $list_directories[$i]["dirfilename"]; } ?> +
        +
        +
        +
        +

        + + + + + 0) { ?> +
        ( / )
        +" . $list_files[$i]["dirfilename"] . ""; } + else { $href = $list_files[$i]["dirfilename"]; } ?> +
        +
        +
        +
        +
        +
        + + + + + 0) { ?> +
        ( / )
        +" . $list_symlinks[$i]["dirfilename"] . ""; } + else { $href = $list_symlinks[$i]["dirfilename"]; } ?> +
        +
        +
        +

        + + + + + 0) { ?> +
        ()
        + + +
        + div class="browse_col2">
        +

        + + + + + +


        + + + +
        + + diff --git a/ehcp/net2ftp/skins/iphone/calculatesize1.template.php b/ehcp/net2ftp/skins/iphone/calculatesize1.template.php new file mode 100644 index 0000000..ee7b6ec --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/calculatesize1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/chmod1.template.php b/ehcp/net2ftp/skins/iphone/chmod1.template.php new file mode 100644 index 0000000..6a4a006 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/chmod1.template.php @@ -0,0 +1,71 @@ + + + + +
        + : 5px;"> + + + + + + + + + + + + + + + + + + + + + +
        + " onclick="CopyCheckboxToAll(document.ChmodForm, 'header[owner_read]', 'owner_read'); CopyCheckboxToAll(document.ChmodForm, 'header[owner_write]', 'owner_write'); CopyCheckboxToAll(document.ChmodForm, 'header[owner_execute]', 'owner_execute'); CopyCheckboxToAll(document.ChmodForm, 'header[group_read]', 'group_read'); CopyCheckboxToAll(document.ChmodForm, 'header[group_write]', 'group_write'); CopyCheckboxToAll(document.ChmodForm, 'header[group_execute]', 'group_execute'); CopyCheckboxToAll(document.ChmodForm, 'header[other_read]', 'other_read'); CopyCheckboxToAll(document.ChmodForm, 'header[other_write]', 'other_write'); CopyCheckboxToAll(document.ChmodForm, 'header[other_execute]', 'other_execute'); update_input(); " /> +
        + . +
        +
        Owner:ReadWriteExecute
        Group:ReadWriteExecute
        Everyone:ReadWriteExecute
        +

        + + + +
        + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + +
        Owner:ReadWriteExecute
        Group:ReadWriteExecute
        Everyone:ReadWriteExecute
        Chmod value: " name="chmod" id="chmod" onchange="update_checkbox();" />
        + +
        +
        + +

        + + + + diff --git a/ehcp/net2ftp/skins/iphone/chmod2.template.php b/ehcp/net2ftp/skins/iphone/chmod2.template.php new file mode 100644 index 0000000..dfe5ddb --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/chmod2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/copymovedelete1.template.php b/ehcp/net2ftp/skins/iphone/copymovedelete1.template.php new file mode 100644 index 0000000..eafd854 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/copymovedelete1.template.php @@ -0,0 +1,99 @@ + + + + + + + +
        + " onclick="CopyValueToAll(document.forms['CopyMoveDeleteForm'], document.forms['CopyMoveDeleteForm'].headerDirectory, 'targetdirectory');" />
        + " /> +
        + + +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + +
        + port + +
        : + +
        :
        :
        +
        + + +
        +
        +
        + +
        +

        + + + + + + "> +%1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Copy file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Copy symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "move") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Move directory %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Move file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Move symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "delete") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Directory %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("File %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Symlink %1\$s", $list["all"][$i]["dirfilename"]); } + } +?> +
        + + + + + + + + +
        + " /> +
        + " /> +

        + + + + diff --git a/ehcp/net2ftp/skins/iphone/copymovedelete2.template.php b/ehcp/net2ftp/skins/iphone/copymovedelete2.template.php new file mode 100644 index 0000000..b5583ff --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/copymovedelete2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/css/main.css.php b/ehcp/net2ftp/skins/iphone/css/main.css.php new file mode 100644 index 0000000..da453b6 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/css/main.css.php @@ -0,0 +1,22 @@ + + +body { margin: 0px; padding: 0px; } +input[type="text"], input[type="password"] { font-size: 14px; padding: 2px; } +.smallbutton { font-size: 10px; margin: 0px; } +.normalbutton { font-size: 16px; font-weight: bold; } +.bigbutton { font-size: 16px; font-weight: bold; width: 100% } +.browse_row_header { background-color: #ABABAB; color: #000000; margin-top: 10px; padding: 2px; } +.browse_row { background-color: #FF0000; margin-bottom: 4px; margin-top: 4px; } +.browse_col1 { position: absolute; : 2px; } +.browse_col2 { position: absolute; : 35px; } +.browse_col3 { position: absolute; : 230px; } +.footer { background-color: #333333; color: #FFFFFF; font-size: 22px; padding: 2px 0px 2px 10px; } +.header { background-color: #333333; color: #FFFFFF; font-size: 22px; padding: 2px 0px 2px 10px; } +.manage_header { background-color: #ABABAB; color: #000000; padding: 2px; } +.page { background-color: #DEDEDE; color: #000000; padding: 2px; } +.label { margin: 2px 0; color: #000000; font-size: 16px; font-weight: bold; } +.warning { background-color: #FFDD00; color: #000000; border: 2px; border-style: solid; border-color: #FFCC33; } \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/edit.template.php b/ehcp/net2ftp/skins/iphone/edit.template.php new file mode 100644 index 0000000..7297184 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/edit.template.php @@ -0,0 +1,30 @@ + + +
        " method="post"> + + + + " /> + + + + " onclick="document.forms[''].state.value='browse';document.forms[''].state2.value='main';document.forms[''].submit();" />   + " onclick="document.forms[''].screen.value=3;document.forms[''].submit();" /> +
        + + + " /> + + + +
        + + + + +"; } ?> + + +
        + + diff --git a/ehcp/net2ftp/skins/iphone/error.template.php b/ehcp/net2ftp/skins/iphone/error.template.php new file mode 100644 index 0000000..b31db2e --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/error.template.php @@ -0,0 +1,15 @@ + + +
        + net2ftp for the iphone +
        +
        + +
        +
        +
        + " onclick="top.history.back();" />
        + " onclick="location.href='index.php?state=clearcookies';" /> +
        + + diff --git a/ehcp/net2ftp/skins/iphone/findstring1.template.php b/ehcp/net2ftp/skins/iphone/findstring1.template.php new file mode 100644 index 0000000..40cbb24 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/findstring1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/findstring2.template.php b/ehcp/net2ftp/skins/iphone/findstring2.template.php new file mode 100644 index 0000000..86ea3ac --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/findstring2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/footer.template.php b/ehcp/net2ftp/skins/iphone/footer.template.php new file mode 100644 index 0000000..92dca43 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/footer.template.php @@ -0,0 +1,6 @@ + + +
        + "> + |
        + diff --git a/ehcp/net2ftp/skins/iphone/footer_versioncheck.template.php b/ehcp/net2ftp/skins/iphone/footer_versioncheck.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/iphone/google_ad.template.php b/ehcp/net2ftp/skins/iphone/google_ad.template.php new file mode 100644 index 0000000..b39bd16 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/iphone/header.template.php b/ehcp/net2ftp/skins/iphone/header.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/iphone/images/footer.png b/ehcp/net2ftp/skins/iphone/images/footer.png new file mode 100644 index 0000000..26f4508 Binary files /dev/null and b/ehcp/net2ftp/skins/iphone/images/footer.png differ diff --git a/ehcp/net2ftp/skins/iphone/images/header.png b/ehcp/net2ftp/skins/iphone/images/header.png new file mode 100644 index 0000000..db82e34 Binary files /dev/null and b/ehcp/net2ftp/skins/iphone/images/header.png differ diff --git a/ehcp/net2ftp/skins/iphone/images/license.txt b/ehcp/net2ftp/skins/iphone/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/iphone/install1.template.php b/ehcp/net2ftp/skins/iphone/install1.template.php new file mode 100644 index 0000000..ef1f068 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/install1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/install2.template.php b/ehcp/net2ftp/skins/iphone/install2.template.php new file mode 100644 index 0000000..664457e --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/install2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/login.template.php b/ehcp/net2ftp/skins/iphone/login.template.php new file mode 100644 index 0000000..c3db63a --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/login.template.php @@ -0,0 +1,56 @@ + + +
        " method="post" onsubmit="return CheckInput(this);"> +
        + net2ftp for the iphone + +
        +
        + + +
        + " autocorrect="off" autocapitalize="off" style="width: 80%;" /> + " autocorrect="off" autocapitalize="off" /> + +
        + + " /> + + + "> + "> + + + +
        + + + +
        + + + + +
        + + + " style="margin-bottom: 30px; margin-top: 10px;" /> + +
        +
        + + + diff --git a/ehcp/net2ftp/skins/iphone/logout.template.php b/ehcp/net2ftp/skins/iphone/logout.template.php new file mode 100644 index 0000000..f8ae927 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/logout.template.php @@ -0,0 +1,10 @@ + + +
        + net2ftp for the iphone +
        +
        + follow this link.", $url); ?>

        +
        + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/manage.template.php b/ehcp/net2ftp/skins/iphone/manage.template.php new file mode 100644 index 0000000..ae130c0 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/manage.template.php @@ -0,0 +1,35 @@ + + +
        + net2ftp for the iphone +
        +
        + +
        +
        +
        " method="post"> + + " /> + " /> + " /> + + + " onclick="" />   + + + + " onclick="" /> + + +

        + +
        +
        + + diff --git a/ehcp/net2ftp/skins/iphone/newdir1.template.php b/ehcp/net2ftp/skins/iphone/newdir1.template.php new file mode 100644 index 0000000..4fc05ec --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/newdir1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/newdir2.template.php b/ehcp/net2ftp/skins/iphone/newdir2.template.php new file mode 100644 index 0000000..e639b8b --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/newdir2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/raw1.template.php b/ehcp/net2ftp/skins/iphone/raw1.template.php new file mode 100644 index 0000000..6f04dc0 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/raw1.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/rename1.template.php b/ehcp/net2ftp/skins/iphone/rename1.template.php new file mode 100644 index 0000000..c2f6180 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/rename1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/rename2.template.php b/ehcp/net2ftp/skins/iphone/rename2.template.php new file mode 100644 index 0000000..b41ec6a --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/rename2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/status/license.txt b/ehcp/net2ftp/skins/iphone/status/license.txt new file mode 100644 index 0000000..20330cc --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/status/license.txt @@ -0,0 +1,12 @@ + +All the code within this directory originates from the PHP Pear package called +HTML_Progress written by Laurent Laville. + +http://pear.laurent-laville.org/HTML_Progress/examples/index.html +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php + +------------------------------------------------------------------------------- + +The license of this code is: PHP License 3.0 +For more information on this license, go to http://www.php.net/license/3_0.txt + diff --git a/ehcp/net2ftp/skins/iphone/status/status.inc.php b/ehcp/net2ftp/skins/iphone/status/status.inc.php new file mode 100644 index 0000000..6d306e3 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/status/status.inc.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/status/status.js b/ehcp/net2ftp/skins/iphone/status/status.js new file mode 100644 index 0000000..a3ab12a --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/status/status.js @@ -0,0 +1,44 @@ + +var isDom = document.getElementById?true:false; +var isIE = document.all?true:false; +var isNS4 = document.layers?true:false; +var cellCount = 10; + +function setprogress(pIdent, pValue, pString, pDeterminate) +{ + if (isDom) { + prog = document.getElementById(pIdent+'installationProgress'); + } else if (isIE) { + prog = document.all[pIdent+'installationProgress']; + } else if (isNS4) { + prog = document.layers[pIdent+'installationProgress']; + } + if (prog != null) { + prog.innerHTML = pString; + } + if (pValue == pDeterminate) { + for (i=0; i < cellCount; i++) { + showCell(i, pIdent, "hidden"); + } + } + if ((pDeterminate > 0) && (pValue > 0)) { + i = (pValue-1) % cellCount; + showCell(i, pIdent, "visible"); + } else { + for (i=pValue-1; i >=0; i--) { + showCell(i, pIdent, "visible"); + } + } +} + +function showCell(pCell, pIdent, pVisibility) +{ + if (isDom) { + document.getElementById(pIdent+'progressCell'+pCell+'A').style.visibility = pVisibility; + } else if (isIE) { + document.all[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } else if (isNS4) { + document.layers[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } +} + diff --git a/ehcp/net2ftp/skins/iphone/status/status.template.php b/ehcp/net2ftp/skins/iphone/status/status.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/iphone/unzip1.template.php b/ehcp/net2ftp/skins/iphone/unzip1.template.php new file mode 100644 index 0000000..bad2cf2 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/unzip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/unzip2.template.php b/ehcp/net2ftp/skins/iphone/unzip2.template.php new file mode 100644 index 0000000..8140ff1 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/unzip2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/iphone/view1.template.php b/ehcp/net2ftp/skins/iphone/view1.template.php new file mode 100644 index 0000000..27e4ca6 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/view1.template.php @@ -0,0 +1,33 @@ + + + + + +
        +
        Luminous"); ?>
        + + +
        + <?php echo $image_alt; ?>

        +
        +
        + +
        + + + + + + +
        + + + + + diff --git a/ehcp/net2ftp/skins/iphone/zip1.template.php b/ehcp/net2ftp/skins/iphone/zip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/zip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/iphone/zip2.template.php b/ehcp/net2ftp/skins/iphone/zip2.template.php new file mode 100644 index 0000000..8a9e87f --- /dev/null +++ b/ehcp/net2ftp/skins/iphone/zip2.template.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mambo/admin1.template.php b/ehcp/net2ftp/skins/mambo/admin1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/admin1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/admin_createtables1.template.php b/ehcp/net2ftp/skins/mambo/admin_createtables1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/admin_createtables1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/admin_createtables2.template.php b/ehcp/net2ftp/skins/mambo/admin_createtables2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/admin_createtables2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/mambo/admin_emptylogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/admin_emptylogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/mambo/admin_viewlogs1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/admin_viewlogs1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/advanced1.template.php b/ehcp/net2ftp/skins/mambo/advanced1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/advanced1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/mambo/advanced_ftpserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/advanced_ftpserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/mambo/advanced_ftpserver2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/advanced_ftpserver2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/advanced_parsing1.template.php b/ehcp/net2ftp/skins/mambo/advanced_parsing1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/advanced_parsing1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/advanced_webserver1.template.php b/ehcp/net2ftp/skins/mambo/advanced_webserver1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/advanced_webserver1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/bookmark1.template.php b/ehcp/net2ftp/skins/mambo/bookmark1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/bookmark1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/browse_main.template.php b/ehcp/net2ftp/skins/mambo/browse_main.template.php new file mode 100644 index 0000000..ea995f3 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/browse_main.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/mambo/browse_main_details.template.php b/ehcp/net2ftp/skins/mambo/browse_main_details.template.php new file mode 100644 index 0000000..cdc8140 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/browse_main_details.template.php @@ -0,0 +1,324 @@ + + + + + +
        +
        " method="post"> + + + + + + + + + + + + + + +
        ;"> + + + ;"> + + + + + ;"> +
        + : +
        + +
        + + +
        + +

        + + + +
        + +

        + + + +
        + +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + 0) { ?> + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + +
        +
        ;"> +" onclick="submitBrowseForm('', '', 'newdir', '');" title=" (accesskey w)" accesskey="w" /> +" onclick="submitBrowseForm('', '', 'edit', 'newfile');" title=" (accesskey y)" accesskey="y" /> +" onclick="submitBrowseForm('', '', 'easyWebsite', '');" title=" (accesskey e)" accesskey="e" /> +" onclick="submitBrowseForm('', '', 'upload', '');" title=" (accesskey u)" accesskey="u" /> +" onclick="submitBrowseForm('', '', 'jupload', '');" title=" (accesskey p)" accesskey="j" /> +" onclick="toggleElement('upload');" title=" (accesskey a)" accesskey="a" /> +" onclick="submitBrowseForm('', '', 'install', '');" title=" (accesskey k)" accesskey="k" /> +" onclick="submitBrowseForm('', '', 'advanced', 'main');" title=" (accesskey n)" accesskey="n" /> + ;"> + +" onclick="submitBrowseForm('', '', 'copymovedelete', 'copy');" title=" (accesskey c)" accesskey="c" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'move');" title=" (accesskey m)" accesskey="m" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'delete');" title=" (accesskey d)" accesskey="d" /> +" onclick="submitBrowseForm('', '', 'rename', '');" title=" (accesskey o)" accesskey="o" /> +" onclick="submitBrowseForm('', '', 'chmod', '');" title=" (accesskey p)" accesskey="p" /> +
        +" onclick="submitBrowseForm('', '', 'downloadzip', '');" title=" (accesskey x)" accesskey="x" /> +" onclick="submitBrowseForm('', '', 'zip', 'zip');" title=" (accesskey z)" accesskey="z" /> +" onclick="submitBrowseForm('', '', 'unzip', '');" title=" (accesskey i)" accesskey="i" /> +" onclick="submitBrowseForm('', '', 'calculatesize', '');" title=" (accesskey q)" accesskey="q" /> +" onclick="submitBrowseForm('', '', 'findstring', '');" title=" (accesskey f)" accesskey="f" /> +
        +
        +
        " title="">" title="">" title="">
        +
        + +
        " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + "d")); ?> + " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + .. +
        " style="text-align: center; width: 32px;"> + + + + + +
        " style="text-align: center; width: 32px;"> + + + + + + ', 'view', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'edit', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'updatefile', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ">
        " style="text-align: center; width: 32px;"> + + + + + +
        +


        +
        +
        + + +
        +:
        +: /
        +:
        +:
        + +:
        +: + + +
        + +
        + +
        + + diff --git a/ehcp/net2ftp/skins/mambo/browse_main_icons.template.php b/ehcp/net2ftp/skins/mambo/browse_main_icons.template.php new file mode 100644 index 0000000..bc21b32 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/browse_main_icons.template.php @@ -0,0 +1,274 @@ + + + + + +
        +
        " method="post"> + + + + + + + " style="cursor: pointer; cursor: hand; border: 0px; text-align: center;"> + + +
        + + + + + + +
        + +

        + + + +
        + +

        + + + +
        + +

        + + +
        + : +
        + +
        + +
        + + + + + 0) { ?> + + + + + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
        + () +
        : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + ( / ) +
        : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + () +
        | : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
        + +
        + +
        +
         
        + () +
        +
        +
        + +
        +
         
        +


        +
        + +
        + + + +
        + + diff --git a/ehcp/net2ftp/skins/mambo/browse_popup.template.php b/ehcp/net2ftp/skins/mambo/browse_popup.template.php new file mode 100644 index 0000000..cccfb5e --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/browse_popup.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/calculatesize1.template.php b/ehcp/net2ftp/skins/mambo/calculatesize1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/calculatesize1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/chmod1.template.php b/ehcp/net2ftp/skins/mambo/chmod1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/chmod1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/chmod2.template.php b/ehcp/net2ftp/skins/mambo/chmod2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/chmod2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/copymovedelete1.template.php b/ehcp/net2ftp/skins/mambo/copymovedelete1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/copymovedelete1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/copymovedelete2.template.php b/ehcp/net2ftp/skins/mambo/copymovedelete2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/copymovedelete2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/css/main.css.php b/ehcp/net2ftp/skins/mambo/css/main.css.php new file mode 100644 index 0000000..83afdda --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/css/main.css.php @@ -0,0 +1,317 @@ +\\|]/", "", $_GET["image_url"]); } +else { $image_url = ""; } +?> + +/* CSS document colors +#003250 +#5893ac +#bbd2e0 +#F2F2F5 +#A7A7A7 +#787878 +*/ + +* { + padding: 0; + margin: 0; +} + +#container { + margin-: auto; + margin-: auto; + margin-top: 10px; + margin-bottom: 20px; + width: 460px; + font-size: 1.2em; + text-align: ; +} + +#head { + padding-top: 20px; + padding-: 20px; + padding-: 20px; + padding-bottom: 20px; + height: 62px; + background: url(/img/bg_head.jpg) no-repeat; +} + +#headleft { + float:; +} + +#headright { + float:; +} + +#head h2 { + color: #FFF; +} + +#main { + background: #F2F2F5; + padding: 3px; +} + +#menu { + width: 200px; + float: ; +} + +.menuhead { + background: url(/img/bg_tabletop.png); + height: 18px; + width: 200px; + color: #FFF; + padding-top: 2px; + font-weight: bold; + text-align: center; +} + +.menucontent { + background: #bbd2e0; + color: #003250; + width: 193px; + padding-: 5px; + padding-top: 10px; + padding-bottom: 10px; + border-bottom: solid 1px #003250; + border-: solid 1px #003250; + border-: solid 1px #003250; +} + +#content { + margin-: 10px; + width: 460px; + float: ; +} + +#mainleft { + float:; + width: 365px; +} + +#mainright { + float: ; + width: 385px; + margin-: 10px; +} + +#tabelfeaturestop { + padding-: 10px; background-color: #003250; height: 21px; color:#FFF; padding-top:5px; +} + +#tablefeature { + background: #bbd2e0; + border-: #003250 1px solid; + border-: #003250 1px solid; + border-bottom: #003250 1px solid; + padding: 2px; +} + +#tablefeature span { + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; + padding-: 20px; + font-weight: bold; + color: #003250; +} + +#tablefeature p { + padding-:20px; + padding-top: 2px; + padding-bottom:2px; +} + +#foot { + height: 24px; + background: url(/img/bg_foot.jpg) no-repeat; + text-align: center; + padding-top: 13px; +} + +#poweredby { + padding-top: 10px; + text-align: center; + font-size: 1em; +} + +#foot a, #foot a:link { + text-decoration: none; + font-weight: bold; + color: #fff; +} + +#foot a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Tags */ +h1, h2, h3 { + font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; + font-weight: bold; +} + +h1 { + height: 20px; + color: #c64934; + font-weight: bold; + font-size: 16px; + white-space: nowrap; +} + +h2 { + font-size: 1.6em; + color: #003250; +} + +h3 { + font-size: 1.4em; +} + +.underline { + text-decoration:underline; +} + +.button { + color: #003250; + background: #fff; + border: solid 1px #003250; + width: 50px; + padding: 2px; +} + +.smallbutton { + color: #003250; + background: #fff; + border: solid 1px #003250; + padding: 1px; +} + +br { + line-height: 1em; +} + +ul { + padding-: 15px; +} + +/* Navigation */ +.navlist { + margin-: 0; + padding-: 0; + list-style: none; +} + +.navlist li { + padding-: 20px; + background-image: url(/img/arrow.gif); + background-repeat: no-repeat; + background-position: 0.5em; +} + +.navlist li a, .navlist li a:link { + text-decoration: none; + color: #003250; +} + +.navlist li a:hover { + text-decoration: none; + color: #5893ac; +} + +/* Form */ + +select, input { + padding: 2px; + margin-top: 1px; + margin-: 0; + margin-bottom: 1px; + margin-: 0; + font-size: 1em; +} + +textarea { + padding: 2px; +} + +.warning-box { + background-color: #FFDD00; + color: #000000; + border: 2px; + border-style: solid; + border-color: #FFCC33; + margin-: 0px; + margin-: 10px; +} + +.warning-text { + padding-bottom : 5px; + padding-top : 5px; + padding- : 10px; + padding- : 10px; +} + +.browse_cell { + width: 120px; + height: 60px; + font-size: 0.8em; + text-align: center; + overflow: hidden; + padding: 3px; +} + +.browse_rows_actions { + background-color: #bbd2e0; + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_heading { + background-color: #bbd2e0; + color: #000000; + font-size: 110%; + font-weight: bold; +} + +.browse_rows_odd, .browse_rows_even { + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_separator { + border: 2px; + color: #000000; + font-size: 100%; + text-align: ; +} + +.login { + margin-: auto; + margin-: auto; + margin-top: 1em; + margin-bottom: 1em; + padding: 10px; + border: 1px solid #cccccc; + width: 460px; + background: #F1F3F5; +} + +.login p { + padding: 0 1em 0 1em; +} + +.login-form { + text-align: ; + float: ; + width: 60%; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mambo/edit.template.php b/ehcp/net2ftp/skins/mambo/edit.template.php new file mode 100644 index 0000000..0d63d47 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/edit.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/error.template.php b/ehcp/net2ftp/skins/mambo/error.template.php new file mode 100644 index 0000000..973e69b --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/error.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/findstring1.template.php b/ehcp/net2ftp/skins/mambo/findstring1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/findstring1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/findstring2.template.php b/ehcp/net2ftp/skins/mambo/findstring2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/findstring2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/footer.template.php b/ehcp/net2ftp/skins/mambo/footer.template.php new file mode 100644 index 0000000..de2755a --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/footer.template.php @@ -0,0 +1,17 @@ + + +
        + net2ftp - a web based FTP client
        + Add net2ftp to: Del.icio.us | + Digg | + Reddit +
        + + + + diff --git a/ehcp/net2ftp/skins/mambo/footer_versioncheck.template.php b/ehcp/net2ftp/skins/mambo/footer_versioncheck.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/footer_versioncheck.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/google_ad.template.php b/ehcp/net2ftp/skins/mambo/google_ad.template.php new file mode 100644 index 0000000..2d15bdb --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/mambo/google_browse.template.php b/ehcp/net2ftp/skins/mambo/google_browse.template.php new file mode 100644 index 0000000..9c7a7a0 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_browse.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/google_login_adsense.template.php b/ehcp/net2ftp/skins/mambo/google_login_adsense.template.php new file mode 100644 index 0000000..3afea18 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_login_adsense.template.php @@ -0,0 +1,26 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/google_login_content.template.php b/ehcp/net2ftp/skins/mambo/google_login_content.template.php new file mode 100644 index 0000000..d5f0f97 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_login_content.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/google_login_firefox.template.php b/ehcp/net2ftp/skins/mambo/google_login_firefox.template.php new file mode 100644 index 0000000..caf1320 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_login_firefox.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/google_logout.template.php b/ehcp/net2ftp/skins/mambo/google_logout.template.php new file mode 100644 index 0000000..8a38920 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_logout.template.php @@ -0,0 +1,21 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/google_view.template.php b/ehcp/net2ftp/skins/mambo/google_view.template.php new file mode 100644 index 0000000..0ec2d69 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/google_view.template.php @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ehcp/net2ftp/skins/mambo/header_login.template.php b/ehcp/net2ftp/skins/mambo/header_login.template.php new file mode 100644 index 0000000..1c61511 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/header_login.template.php @@ -0,0 +1,12 @@ + + +
        + + diff --git a/ehcp/net2ftp/skins/mambo/images/actions/back.png b/ehcp/net2ftp/skins/mambo/images/actions/back.png new file mode 100644 index 0000000..2568b59 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/back.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/bookmark.png b/ehcp/net2ftp/skins/mambo/images/actions/bookmark.png new file mode 100644 index 0000000..6cccfd9 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/bookmark.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/button_cancel.png b/ehcp/net2ftp/skins/mambo/images/actions/button_cancel.png new file mode 100644 index 0000000..2d5e260 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/button_cancel.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/button_ok.png b/ehcp/net2ftp/skins/mambo/images/actions/button_ok.png new file mode 100644 index 0000000..592ce6f Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/button_ok.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/exit.png b/ehcp/net2ftp/skins/mambo/images/actions/exit.png new file mode 100644 index 0000000..08e97b4 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/exit.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/filesave.png b/ehcp/net2ftp/skins/mambo/images/actions/filesave.png new file mode 100644 index 0000000..ae13a15 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/filesave.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/forward.png b/ehcp/net2ftp/skins/mambo/images/actions/forward.png new file mode 100644 index 0000000..3453bde Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/forward.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/info.png b/ehcp/net2ftp/skins/mambo/images/actions/info.png new file mode 100644 index 0000000..d56ba2c Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/info.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/reload.png b/ehcp/net2ftp/skins/mambo/images/actions/reload.png new file mode 100644 index 0000000..4b0e37a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/reload.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/spacer.gif b/ehcp/net2ftp/skins/mambo/images/actions/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/spacer.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/up.png b/ehcp/net2ftp/skins/mambo/images/actions/up.png new file mode 100644 index 0000000..899ad4f Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/up.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/view_detailed.png b/ehcp/net2ftp/skins/mambo/images/actions/view_detailed.png new file mode 100644 index 0000000..8c315cf Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/view_detailed.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/view_icon.png b/ehcp/net2ftp/skins/mambo/images/actions/view_icon.png new file mode 100644 index 0000000..2b5d655 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/view_icon.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/actions/view_tree.png b/ehcp/net2ftp/skins/mambo/images/actions/view_tree.png new file mode 100644 index 0000000..b896d17 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/actions/view_tree.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/apply.png b/ehcp/net2ftp/skins/mambo/images/img/apply.png new file mode 100644 index 0000000..fe69b58 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/apply.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/arrow.gif b/ehcp/net2ftp/skins/mambo/images/img/arrow.gif new file mode 100644 index 0000000..01f428b Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/arrow.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/back.png b/ehcp/net2ftp/skins/mambo/images/img/back.png new file mode 100644 index 0000000..98999ee Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/back.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/bg_foot.jpg b/ehcp/net2ftp/skins/mambo/images/img/bg_foot.jpg new file mode 100644 index 0000000..e68c495 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/bg_foot.jpg differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/bg_head.jpg b/ehcp/net2ftp/skins/mambo/images/img/bg_head.jpg new file mode 100644 index 0000000..aabacb2 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/bg_head.jpg differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/bg_tabletop.png b/ehcp/net2ftp/skins/mambo/images/img/bg_tabletop.png new file mode 100644 index 0000000..9a31276 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/bg_tabletop.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/bookmark.png b/ehcp/net2ftp/skins/mambo/images/img/bookmark.png new file mode 100644 index 0000000..757e926 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/bookmark.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/exit.png b/ehcp/net2ftp/skins/mambo/images/img/exit.png new file mode 100644 index 0000000..3e788f5 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/exit.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/folder_blue.png b/ehcp/net2ftp/skins/mambo/images/img/folder_blue.png new file mode 100644 index 0000000..1419285 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/folder_blue.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/folder_grey.png b/ehcp/net2ftp/skins/mambo/images/img/folder_grey.png new file mode 100644 index 0000000..94e7c23 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/help.png b/ehcp/net2ftp/skins/mambo/images/img/help.png new file mode 100644 index 0000000..abb7294 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/help.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/html.png b/ehcp/net2ftp/skins/mambo/images/img/html.png new file mode 100644 index 0000000..9adebaf Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/html.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/logo.png b/ehcp/net2ftp/skins/mambo/images/img/logo.png new file mode 100644 index 0000000..5a21a59 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/logo.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/mime.png b/ehcp/net2ftp/skins/mambo/images/img/mime.png new file mode 100644 index 0000000..d92b2f8 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/mime.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/reload.png b/ehcp/net2ftp/skins/mambo/images/img/reload.png new file mode 100644 index 0000000..d1cc4f1 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/reload.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/spacer.gif b/ehcp/net2ftp/skins/mambo/images/img/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/spacer.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/img/up.png b/ehcp/net2ftp/skins/mambo/images/img/up.png new file mode 100644 index 0000000..1277d38 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/img/up.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/license.txt b/ehcp/net2ftp/skins/mambo/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/acroread.png b/ehcp/net2ftp/skins/mambo/images/mime/acroread.png new file mode 100644 index 0000000..b50f4a7 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/acroread.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/aktion.png b/ehcp/net2ftp/skins/mambo/images/mime/aktion.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/aktion.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/ark.png b/ehcp/net2ftp/skins/mambo/images/mime/ark.png new file mode 100644 index 0000000..e2b67dc Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/ark.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/arts.png b/ehcp/net2ftp/skins/mambo/images/mime/arts.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/arts.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/ascend.png b/ehcp/net2ftp/skins/mambo/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/browser.png b/ehcp/net2ftp/skins/mambo/images/mime/browser.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/browser.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/colors.png b/ehcp/net2ftp/skins/mambo/images/mime/colors.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/colors.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/cookie.png b/ehcp/net2ftp/skins/mambo/images/mime/cookie.png new file mode 100644 index 0000000..5c1ca3c Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/cookie.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/descend.png b/ehcp/net2ftp/skins/mambo/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/document.png b/ehcp/net2ftp/skins/mambo/images/mime/document.png new file mode 100644 index 0000000..24c9c57 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/document.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/exec.png b/ehcp/net2ftp/skins/mambo/images/mime/exec.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/exec.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/folder.png b/ehcp/net2ftp/skins/mambo/images/mime/folder.png new file mode 100644 index 0000000..9232553 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/folder.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/folder_grey.png b/ehcp/net2ftp/skins/mambo/images/mime/folder_grey.png new file mode 100644 index 0000000..22d0f41 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/fonts.png b/ehcp/net2ftp/skins/mambo/images/mime/fonts.png new file mode 100644 index 0000000..3aab3bd Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/fonts.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/gimp.png b/ehcp/net2ftp/skins/mambo/images/mime/gimp.png new file mode 100644 index 0000000..5078540 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/gimp.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/html.png b/ehcp/net2ftp/skins/mambo/images/mime/html.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/html.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/java.png b/ehcp/net2ftp/skins/mambo/images/mime/java.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/java.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/java_jar.png b/ehcp/net2ftp/skins/mambo/images/mime/java_jar.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/java_jar.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/kservices.png b/ehcp/net2ftp/skins/mambo/images/mime/kservices.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/kservices.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/mime.png b/ehcp/net2ftp/skins/mambo/images/mime/mime.png new file mode 100644 index 0000000..55ace49 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/mime.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/ooo_gulls.png b/ehcp/net2ftp/skins/mambo/images/mime/ooo_gulls.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/ooo_gulls.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/openoffice.png b/ehcp/net2ftp/skins/mambo/images/mime/openoffice.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/openoffice.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/package_graphics.png b/ehcp/net2ftp/skins/mambo/images/mime/package_graphics.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/package_graphics.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/php.png b/ehcp/net2ftp/skins/mambo/images/mime/php.png new file mode 100644 index 0000000..6217a79 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/php.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/quicktime.png b/ehcp/net2ftp/skins/mambo/images/mime/quicktime.png new file mode 100644 index 0000000..f0bc57a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/quicktime.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/realplayer.png b/ehcp/net2ftp/skins/mambo/images/mime/realplayer.png new file mode 100644 index 0000000..07b1e86 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/realplayer.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/rpm.png b/ehcp/net2ftp/skins/mambo/images/mime/rpm.png new file mode 100644 index 0000000..a584ce1 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/rpm.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/sound.png b/ehcp/net2ftp/skins/mambo/images/mime/sound.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/sound.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/spacer.gif b/ehcp/net2ftp/skins/mambo/images/mime/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/spacer.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/stylesheet.png b/ehcp/net2ftp/skins/mambo/images/mime/stylesheet.png new file mode 100644 index 0000000..f7f9057 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/stylesheet.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/tar.png b/ehcp/net2ftp/skins/mambo/images/mime/tar.png new file mode 100644 index 0000000..184f959 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/tar.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/terminal.png b/ehcp/net2ftp/skins/mambo/images/mime/terminal.png new file mode 100644 index 0000000..75ce701 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/terminal.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/tgz.png b/ehcp/net2ftp/skins/mambo/images/mime/tgz.png new file mode 100644 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/tgz.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/video.png b/ehcp/net2ftp/skins/mambo/images/mime/video.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/video.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/mime/www.png b/ehcp/net2ftp/skins/mambo/images/mime/www.png new file mode 100644 index 0000000..2d32c04 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/mime/www.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/settings/spacer.gif b/ehcp/net2ftp/skins/mambo/images/settings/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/settings/spacer.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/aktion.png b/ehcp/net2ftp/skins/mambo/images/titles/aktion.png new file mode 100644 index 0000000..59a8b19 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/aktion.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/ark.png b/ehcp/net2ftp/skins/mambo/images/titles/ark.png new file mode 100644 index 0000000..3393d26 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/ark.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/bookmark.png b/ehcp/net2ftp/skins/mambo/images/titles/bookmark.png new file mode 100644 index 0000000..dcadad7 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/bookmark.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/cache.png b/ehcp/net2ftp/skins/mambo/images/titles/cache.png new file mode 100644 index 0000000..321e824 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/cache.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/colorize.png b/ehcp/net2ftp/skins/mambo/images/titles/colorize.png new file mode 100644 index 0000000..61a6f63 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/colorize.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/editcopy.png b/ehcp/net2ftp/skins/mambo/images/titles/editcopy.png new file mode 100644 index 0000000..a04d2f7 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/editcopy.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/editcut.png b/ehcp/net2ftp/skins/mambo/images/titles/editcut.png new file mode 100644 index 0000000..a1b20f4 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/editcut.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/edittrash.png b/ehcp/net2ftp/skins/mambo/images/titles/edittrash.png new file mode 100644 index 0000000..906608f Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/edittrash.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/folder_new.png b/ehcp/net2ftp/skins/mambo/images/titles/folder_new.png new file mode 100644 index 0000000..309a646 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/folder_new.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/folder_txt.png b/ehcp/net2ftp/skins/mambo/images/titles/folder_txt.png new file mode 100644 index 0000000..e02294a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/folder_txt.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/kcontrol.png b/ehcp/net2ftp/skins/mambo/images/titles/kcontrol.png new file mode 100644 index 0000000..a359543 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/kcontrol.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/kgpg_identity.png b/ehcp/net2ftp/skins/mambo/images/titles/kgpg_identity.png new file mode 100644 index 0000000..681ed2d Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/kgpg_identity.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/kgpg_info.png b/ehcp/net2ftp/skins/mambo/images/titles/kgpg_info.png new file mode 100644 index 0000000..4fa7e01 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/kgpg_info.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/konquest.png b/ehcp/net2ftp/skins/mambo/images/titles/konquest.png new file mode 100644 index 0000000..4f7a636 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/konquest.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/messagebox_warning.png b/ehcp/net2ftp/skins/mambo/images/titles/messagebox_warning.png new file mode 100644 index 0000000..b11a7b6 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/messagebox_warning.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/misc.png b/ehcp/net2ftp/skins/mambo/images/titles/misc.png new file mode 100644 index 0000000..0c17cd9 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/misc.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/openterm.png b/ehcp/net2ftp/skins/mambo/images/titles/openterm.png new file mode 100644 index 0000000..254c976 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/openterm.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/package_editors.png b/ehcp/net2ftp/skins/mambo/images/titles/package_editors.png new file mode 100644 index 0000000..a3b76ba Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/package_editors.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/spacer.gif b/ehcp/net2ftp/skins/mambo/images/titles/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/spacer.gif differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/terminal.png b/ehcp/net2ftp/skins/mambo/images/titles/terminal.png new file mode 100644 index 0000000..c7bdedf Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/terminal.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/thumbnail.png b/ehcp/net2ftp/skins/mambo/images/titles/thumbnail.png new file mode 100644 index 0000000..bcc1681 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/thumbnail.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/view_left_right.png b/ehcp/net2ftp/skins/mambo/images/titles/view_left_right.png new file mode 100644 index 0000000..5d337c6 Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/view_left_right.png differ diff --git a/ehcp/net2ftp/skins/mambo/images/titles/viewmag.png b/ehcp/net2ftp/skins/mambo/images/titles/viewmag.png new file mode 100644 index 0000000..848275d Binary files /dev/null and b/ehcp/net2ftp/skins/mambo/images/titles/viewmag.png differ diff --git a/ehcp/net2ftp/skins/mambo/install1.template.php b/ehcp/net2ftp/skins/mambo/install1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/install1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/install2.template.php b/ehcp/net2ftp/skins/mambo/install2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/install2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/jupload1.template.php b/ehcp/net2ftp/skins/mambo/jupload1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/jupload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/jupload2.template.php b/ehcp/net2ftp/skins/mambo/jupload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/jupload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/login.template.php b/ehcp/net2ftp/skins/mambo/login.template.php new file mode 100644 index 0000000..d184fc5 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/login.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/mambo/login_component.template.php b/ehcp/net2ftp/skins/mambo/login_component.template.php new file mode 100644 index 0000000..f26ad9c --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/login_component.template.php @@ -0,0 +1,83 @@ + + +
        +

        net2ftp - a web based FTP client

        +
        +
        + +
        + + + diff --git a/ehcp/net2ftp/skins/mambo/login_module.template.php b/ehcp/net2ftp/skins/mambo/login_module.template.php new file mode 100644 index 0000000..edbb34a --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/login_module.template.php @@ -0,0 +1,62 @@ + + +
        " method="post" onsubmit="return CheckInput(this);"> + +
        + + " /> + + + + "> + + + +
        + +
        + + " /> + + "> + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + + + +
        + />   /> Binary + +
        + + + +
        " title=" (accesskey l)" accesskey="l" />
        + +
        + diff --git a/ehcp/net2ftp/skins/mambo/login_small.template.php b/ehcp/net2ftp/skins/mambo/login_small.template.php new file mode 100644 index 0000000..11544f7 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/login_small.template.php @@ -0,0 +1,86 @@ + + +
        +

        net2ftp - a web based FTP client

        +
        +
        " method="post"> + + + +" /> +" /> +" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        : auto; margin-: auto; margin-top:50px; padding: 10px;"> + +
        + + +
        + + +
        + + + + + + + + + + + + + + + + +
        + +
        +
        +
        +


        +
        + + diff --git a/ehcp/net2ftp/skins/mambo/loginform.template.php b/ehcp/net2ftp/skins/mambo/loginform.template.php new file mode 100644 index 0000000..2db41de --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/loginform.template.php @@ -0,0 +1,103 @@ +
        " method="post" onsubmit="return CheckInput(this);"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        : 10px; vertical-align: top; width: 20%; padding-top:5px;"> + + " style="width:230px;" /> + + + + " /> + + + + +   port " type="text" /> + + " /> + + + +
        : ftp.server.com, 192.123.45.67
        + +
        : 10px;"> 
        : 10px;"> /> 
        : 10px;"> />  SSL
        : 10px;"> + +
        : 10px;"> + +
        : 10px;"> + type="radio" />  Binary     + type="radio" />  +
        : 40px;"> + " alt="" /> +
        ; padding-: 20px; padding-bottom: 5px;">; padding-: 20px; padding-bottom: 5px;"> +   + +
        + + +
        + diff --git a/ehcp/net2ftp/skins/mambo/logout.template.php b/ehcp/net2ftp/skins/mambo/logout.template.php new file mode 100644 index 0000000..30c8c84 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/logout.template.php @@ -0,0 +1,13 @@ + + + +
        +

        net2ftp - a web based FTP client

        +
        + +

        + +

        You have logged out from the FTP server. Go back to the homepage.


        + + + diff --git a/ehcp/net2ftp/skins/mambo/manage.template.php b/ehcp/net2ftp/skins/mambo/manage.template.php new file mode 100644 index 0000000..33df614 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/manage.template.php @@ -0,0 +1,33 @@ + + +
        +

        +
        " method="post"> + + " /> + " /> + + " /> + + + + +   + + + + +

        + +
        +
        + + diff --git a/ehcp/net2ftp/skins/mambo/newdir1.template.php b/ehcp/net2ftp/skins/mambo/newdir1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/newdir1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/newdir2.template.php b/ehcp/net2ftp/skins/mambo/newdir2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/newdir2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/raw1.template.php b/ehcp/net2ftp/skins/mambo/raw1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/raw1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/rename1.template.php b/ehcp/net2ftp/skins/mambo/rename1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/rename1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/rename2.template.php b/ehcp/net2ftp/skins/mambo/rename2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/rename2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/status/license.txt b/ehcp/net2ftp/skins/mambo/status/license.txt new file mode 100644 index 0000000..20330cc --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/status/license.txt @@ -0,0 +1,12 @@ + +All the code within this directory originates from the PHP Pear package called +HTML_Progress written by Laurent Laville. + +http://pear.laurent-laville.org/HTML_Progress/examples/index.html +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php + +------------------------------------------------------------------------------- + +The license of this code is: PHP License 3.0 +For more information on this license, go to http://www.php.net/license/3_0.txt + diff --git a/ehcp/net2ftp/skins/mambo/status/status.inc.php b/ehcp/net2ftp/skins/mambo/status/status.inc.php new file mode 100644 index 0000000..2b46ad3 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/status/status.inc.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mambo/status/status.js b/ehcp/net2ftp/skins/mambo/status/status.js new file mode 100644 index 0000000..a3ab12a --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/status/status.js @@ -0,0 +1,44 @@ + +var isDom = document.getElementById?true:false; +var isIE = document.all?true:false; +var isNS4 = document.layers?true:false; +var cellCount = 10; + +function setprogress(pIdent, pValue, pString, pDeterminate) +{ + if (isDom) { + prog = document.getElementById(pIdent+'installationProgress'); + } else if (isIE) { + prog = document.all[pIdent+'installationProgress']; + } else if (isNS4) { + prog = document.layers[pIdent+'installationProgress']; + } + if (prog != null) { + prog.innerHTML = pString; + } + if (pValue == pDeterminate) { + for (i=0; i < cellCount; i++) { + showCell(i, pIdent, "hidden"); + } + } + if ((pDeterminate > 0) && (pValue > 0)) { + i = (pValue-1) % cellCount; + showCell(i, pIdent, "visible"); + } else { + for (i=pValue-1; i >=0; i--) { + showCell(i, pIdent, "visible"); + } + } +} + +function showCell(pCell, pIdent, pVisibility) +{ + if (isDom) { + document.getElementById(pIdent+'progressCell'+pCell+'A').style.visibility = pVisibility; + } else if (isIE) { + document.all[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } else if (isNS4) { + document.layers[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } +} + diff --git a/ehcp/net2ftp/skins/mambo/status/status.template.php b/ehcp/net2ftp/skins/mambo/status/status.template.php new file mode 100644 index 0000000..e5a2cc9 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/status/status.template.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mambo/statusbar.template.php b/ehcp/net2ftp/skins/mambo/statusbar.template.php new file mode 100644 index 0000000..860b732 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/statusbar.template.php @@ -0,0 +1,6 @@ + + +
        +

        net2ftp - a web based FTP client

        +
        + diff --git a/ehcp/net2ftp/skins/mambo/unzip1.template.php b/ehcp/net2ftp/skins/mambo/unzip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/unzip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/unzip2.template.php b/ehcp/net2ftp/skins/mambo/unzip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/unzip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/upload1.template.php b/ehcp/net2ftp/skins/mambo/upload1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/upload1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/upload2.template.php b/ehcp/net2ftp/skins/mambo/upload2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/upload2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/view1.template.php b/ehcp/net2ftp/skins/mambo/view1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/view1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/zip1.template.php b/ehcp/net2ftp/skins/mambo/zip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/zip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mambo/zip2.template.php b/ehcp/net2ftp/skins/mambo/zip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mambo/zip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/admin1.template.php b/ehcp/net2ftp/skins/mobile/admin1.template.php new file mode 100644 index 0000000..90c36d0 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/admin1.template.php @@ -0,0 +1 @@ + diff --git a/ehcp/net2ftp/skins/mobile/admin_createtables1.template.php b/ehcp/net2ftp/skins/mobile/admin_createtables1.template.php new file mode 100644 index 0000000..aa9a8e4 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/admin_createtables1.template.php @@ -0,0 +1,25 @@ + + + + + + +\n"; + } // end for ?> + +

        + + + + + + +


        + +

        +

        + + diff --git a/ehcp/net2ftp/skins/mobile/admin_createtables2.template.php b/ehcp/net2ftp/skins/mobile/admin_createtables2.template.php new file mode 100644 index 0000000..0bf2621 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/admin_createtables2.template.php @@ -0,0 +1,21 @@ + + + + + + + + + + +
        +:
        +:
        +:
        +:

        + +
        +\n"; + } // end for ?> + diff --git a/ehcp/net2ftp/skins/mobile/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/mobile/admin_emptylogs1.template.php new file mode 100644 index 0000000..4f796ac --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/admin_emptylogs1.template.php @@ -0,0 +1,11 @@ + + + + + + +\n"; + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/mobile/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/mobile/admin_viewlogs1.template.php new file mode 100644 index 0000000..f2febda --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/admin_viewlogs1.template.php @@ -0,0 +1,19 @@ + + + + + + + +

        + + +

        + + +

        + + +

        + + diff --git a/ehcp/net2ftp/skins/mobile/advanced1.template.php b/ehcp/net2ftp/skins/mobile/advanced1.template.php new file mode 100644 index 0000000..c5d02a9 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/advanced1.template.php @@ -0,0 +1,18 @@ + + + +

        + + + " onclick="document.forms['AdvancedForm'].state.value='raw'; document.forms['AdvancedForm'].submit();" /> + + " disabled title="" /> + +

        + +

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_webserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_ftpserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_parsing'; document.forms['AdvancedForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/mobile/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/mobile/advanced_ftpserver1.template.php new file mode 100644 index 0000000..7f27aab --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/advanced_ftpserver1.template.php @@ -0,0 +1,30 @@ + + + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + + + + +
        " />
        " />
        " />
        ">
        + diff --git a/ehcp/net2ftp/skins/mobile/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/mobile/advanced_ftpserver2.template.php new file mode 100644 index 0000000..75c2918 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/advanced_ftpserver2.template.php @@ -0,0 +1,91 @@ + + + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
      11. + + + + + + +
      12. + +
      13. + + + + + + +
      14. + +
      15. + + + + + + +
      16. + +
      17. + + + + + + +
      18. + +
      19. + + + + + + +
      20. + +
      21. + + +
      22. + +
      23. + + Line $i
        \n"; + print_r($parsedlist[$i]); + echo "
        "; + } // End for + ?> +
      24. + + diff --git a/ehcp/net2ftp/skins/mobile/bookmark1.template.php b/ehcp/net2ftp/skins/mobile/bookmark1.template.php new file mode 100644 index 0000000..29f16c3 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/bookmark1.template.php @@ -0,0 +1,14 @@ + + + +
        +
        +
          +
        • +
        • +
        + +
        +
        + + diff --git a/ehcp/net2ftp/skins/mobile/browse_main.template.php b/ehcp/net2ftp/skins/mobile/browse_main.template.php new file mode 100644 index 0000000..db3fa3c --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/browse_main.template.php @@ -0,0 +1,116 @@ + + + +
        " method="post"> + + + + + +
        + +" /> +
        +
        + + +
        +
        +
        + + +
        +
        +
        + + +
        +
        +
        + + +
        + +
        + +
        +"> .. +
        + + + 0) { ?> +
        ()
        +" . $list_directories[$i]["dirfilename"] . ""; } + else { $href = $list_directories[$i]["dirfilename"]; } + printDirFileProperties($rowcounter, $list_directories[$i], "checkbox", ""); ?> +
        + + + + + 0) { ?> +
        ( / )
        +" . $list_files[$i]["dirfilename"] . ""; } + else { $href = $list_files[$i]["dirfilename"]; } + printDirFileProperties($rowcounter, $list_files[$i], "checkbox", ""); ?> +
        + + + + + 0) { ?> +
        ( / )
        +" . $list_symlinks[$i]["dirfilename"] . ""; } + else { $href = $list_symlinks[$i]["dirfilename"]; } + printDirFileProperties($rowcounter, $list_symlinks[$i], "checkbox", ""); ?> +
        + + + + + 0) { ?> +
        ()
        + + +
        + + + + + +


        + + +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/mobile/browse_popup.template.php b/ehcp/net2ftp/skins/mobile/browse_popup.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/mobile/calculatesize1.template.php b/ehcp/net2ftp/skins/mobile/calculatesize1.template.php new file mode 100644 index 0000000..d7a3568 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/calculatesize1.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/chmod1.template.php b/ehcp/net2ftp/skins/mobile/chmod1.template.php new file mode 100644 index 0000000..1e68568 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/chmod1.template.php @@ -0,0 +1,67 @@ + + + + +
        + : 5px;"> + + + + + + + + + + + + + + + + + + + + + +
        Owner:ReadWriteExecute
        Group:ReadWriteExecute
        Everyone:ReadWriteExecute
        +
        To set all permissions to the same values, enter those permissions above and click on the button "Set all permissions"
        +

        + + + +
        + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + +
        Owner:ReadWriteExecute
        Group:ReadWriteExecute
        Everyone:ReadWriteExecute
        Chmod value: " name="chmod" id="chmod" onchange="update_checkbox();" />
        + +
        +
        + +

        + + + + diff --git a/ehcp/net2ftp/skins/mobile/chmod2.template.php b/ehcp/net2ftp/skins/mobile/chmod2.template.php new file mode 100644 index 0000000..02b2089 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/chmod2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["ftp_chmod2"][$i] == "") { echo $net2ftp_output["ftp_chmod2"][$i] . "\n"; } + else { echo "
      25. " . $net2ftp_output["ftp_chmod2"][$i] . "
      26. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/mobile/copymovedelete1.template.php b/ehcp/net2ftp/skins/mobile/copymovedelete1.template.php new file mode 100644 index 0000000..2a11a90 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/copymovedelete1.template.php @@ -0,0 +1,86 @@ + + + + + + + +
        + " onclick="CopyValueToAll(document.forms['CopyMoveDeleteForm'], document.forms['CopyMoveDeleteForm'].headerDirectory, 'targetdirectory');" />   + " /> + +
        +
        +
        +
        + : 100px; margin-bottom: 30px;"> + + + + + + + + + + + + + + + +
        + port + +
        :
        :
        +
        +
        + +
        +
        + +
        +

        + + + + + + "> +%1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Copy file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Copy symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "move") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Move directory %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Move file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Move symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "delete") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Directory %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("File %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Symlink %1\$s", $list["all"][$i]["dirfilename"]); } + } +?> +
        + + + + + + + + +
        + " /> + +
        + " /> +

        + + + + diff --git a/ehcp/net2ftp/skins/mobile/copymovedelete2.template.php b/ehcp/net2ftp/skins/mobile/copymovedelete2.template.php new file mode 100644 index 0000000..7c04e72 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/copymovedelete2.template.php @@ -0,0 +1,8 @@ + + +" || $net2ftp_output["ftp_copymovedelete"][$i] == "") { echo $net2ftp_output["ftp_copymovedelete"][$i] . "\n"; } + else { echo "
      27. " . $net2ftp_output["ftp_copymovedelete"][$i] . "
      28. \n"; } + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/mobile/css/main.css.php b/ehcp/net2ftp/skins/mobile/css/main.css.php new file mode 100644 index 0000000..2d6a995 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/css/main.css.php @@ -0,0 +1,19 @@ + + +body { background-color : #FFFFFF; color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt; margin: 1px; } +A:link { color: #0000FF; text-decoration: underline; } +A:visited { color: #0000FF; text-decoration: underline; } +A:hover {} +li { margin-top: 2px; } +h1, h2, h3, p, form { margin: 0; } +.input { font-size: 8pt; height: 10px; } +.smallbutton { font-size: 8pt; } +.browse_top { background-color: #000000; color: #FFFFFF; font-weight: bold; padding: 5px; margin: 2px; } +.browse_warning { background-color: #FFFF00; padding: 5px; margin: 2px; } +.browse_actions { padding: 5px; margin: 2px; text-align: ; } +.browse_up { padding: 2px; margin: 2px; font-weight: bold; text-align: center; } +.browse_row { background-color: #CCCCCC; font-weight: bold; padding: 2px; margin: 2px; } \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mobile/edit.template.php b/ehcp/net2ftp/skins/mobile/edit.template.php new file mode 100644 index 0000000..0d63d47 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/edit.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/error.template.php b/ehcp/net2ftp/skins/mobile/error.template.php new file mode 100644 index 0000000..435a04d --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/error.template.php @@ -0,0 +1,35 @@ + + + + + + + + + + + + +
        + : +
        +

        + or +

        +
        + Technical information for developers:

        + The error occured in file on line .
        +
          + +
        • function ( on line )
        • +
            + + +
          • argument :
          • + + +
          + +
        +


        + diff --git a/ehcp/net2ftp/skins/mobile/findstring1.template.php b/ehcp/net2ftp/skins/mobile/findstring1.template.php new file mode 100644 index 0000000..a786aab --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/findstring1.template.php @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + +
          (wildcard character is *)
          Bytes
         
        + + + + diff --git a/ehcp/net2ftp/skins/mobile/findstring2.template.php b/ehcp/net2ftp/skins/mobile/findstring2.template.php new file mode 100644 index 0000000..af405d5 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/findstring2.template.php @@ -0,0 +1,39 @@ + + + + + + + + +
        + + +
        + +
        + + + + + + + + + + + + + + + + + +
        ', '', 'view', '', 1);" title="" style="cursor: pointer; cursor: hand;">', '', 'edit', '', 1);" title="" style="cursor: pointer; cursor: hand;">
        + + diff --git a/ehcp/net2ftp/skins/mobile/footer.template.php b/ehcp/net2ftp/skins/mobile/footer.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/mobile/footer_versioncheck.template.php b/ehcp/net2ftp/skins/mobile/footer_versioncheck.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/mobile/google_ad.template.php b/ehcp/net2ftp/skins/mobile/google_ad.template.php new file mode 100644 index 0000000..45d04f6 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/google_ad.template.php @@ -0,0 +1,20 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/images/license.txt b/ehcp/net2ftp/skins/mobile/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/mobile/images/mime/ascend.png b/ehcp/net2ftp/skins/mobile/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/mobile/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/mobile/images/mime/descend.png b/ehcp/net2ftp/skins/mobile/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/mobile/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/mobile/images/mime/folder.png b/ehcp/net2ftp/skins/mobile/images/mime/folder.png new file mode 100644 index 0000000..9232553 Binary files /dev/null and b/ehcp/net2ftp/skins/mobile/images/mime/folder.png differ diff --git a/ehcp/net2ftp/skins/mobile/images/mime/mime.png b/ehcp/net2ftp/skins/mobile/images/mime/mime.png new file mode 100644 index 0000000..55ace49 Binary files /dev/null and b/ehcp/net2ftp/skins/mobile/images/mime/mime.png differ diff --git a/ehcp/net2ftp/skins/mobile/install1.template.php b/ehcp/net2ftp/skins/mobile/install1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/install1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/install2.template.php b/ehcp/net2ftp/skins/mobile/install2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/install2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/jupload1.template.php b/ehcp/net2ftp/skins/mobile/jupload1.template.php new file mode 100644 index 0000000..e5f0b3d --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/jupload1.template.php @@ -0,0 +1,56 @@ + + + + + + + + + + "> + "> + "> + "> + "> + "> + "> + "> + + + + + + + + + + + + + + + + + +Your browser does not support applets, or you have disabled applets in your browser settings. +To use this applet, please install the newest version of Sun's java. You can get it from java.com. Click on Get It Now. +The online installation is about 1-2 MB and the offline installation is about 13 MB. This 'end-user' java is called JRE (Java Runtime Environment). +Alternatively, use net2ftp's normal upload or upload-and-unzip functionality. +

        + +
        +
          +
        • %1\$s kB and by PHP to %2\$s", $max_filesize_net2ftp, $max_upload_filesize_php); ?>
        • +
        • %1\$s seconds", $max_execution_time); ?>
        • +
        • +
        • +
        +

        + diff --git a/ehcp/net2ftp/skins/mobile/jupload2.template.php b/ehcp/net2ftp/skins/mobile/jupload2.template.php new file mode 100644 index 0000000..010dc62 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/jupload2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/login.template.php b/ehcp/net2ftp/skins/mobile/login.template.php new file mode 100644 index 0000000..3285d7f --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/login.template.php @@ -0,0 +1,91 @@ + + +

        net2ftp - web based FTP

        +
        " method="post" onsubmit="return CheckInput(this);"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + " /> + + + + "> + + + + + " /> + + "> + +
        />
        /> SSL
        + + +
        + + +
        />   /> Binary
        + + + " title=" (accesskey l)" accesskey="l"/> +
        +
        + + + diff --git a/ehcp/net2ftp/skins/mobile/login_small.template.php b/ehcp/net2ftp/skins/mobile/login_small.template.php new file mode 100644 index 0000000..d608421 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/login_small.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/logout.template.php b/ehcp/net2ftp/skins/mobile/logout.template.php new file mode 100644 index 0000000..cacde36 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/logout.template.php @@ -0,0 +1,11 @@ + + +

        net2ftp - web based FTP

        +
        : 5px; margin-: 5px; padding: 5px;"> +follow this link.", $url); ?>

        +
        +

        + +

        + + diff --git a/ehcp/net2ftp/skins/mobile/manage.template.php b/ehcp/net2ftp/skins/mobile/manage.template.php new file mode 100644 index 0000000..46f062b --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/manage.template.php @@ -0,0 +1,37 @@ + + +: 3px;"> + + + +
        +

        + +

        +
        " method="post"> + + " /> + " /> + " /> + + + +   + + + + +

        + +
        +
        + + diff --git a/ehcp/net2ftp/skins/mobile/newdir1.template.php b/ehcp/net2ftp/skins/mobile/newdir1.template.php new file mode 100644 index 0000000..17eed6c --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/newdir1.template.php @@ -0,0 +1,9 @@ + + +%1\$s.", $net2ftp_globals["printdirectory"]); ?>

        +

        +

        +

        +

        +

        + diff --git a/ehcp/net2ftp/skins/mobile/newdir2.template.php b/ehcp/net2ftp/skins/mobile/newdir2.template.php new file mode 100644 index 0000000..701d68c --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/newdir2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/raw1.template.php b/ehcp/net2ftp/skins/mobile/raw1.template.php new file mode 100644 index 0000000..c2eb509 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/raw1.template.php @@ -0,0 +1,16 @@ + + +
        + + +

        + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/rename1.template.php b/ehcp/net2ftp/skins/mobile/rename1.template.php new file mode 100644 index 0000000..3aa5d13 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/rename1.template.php @@ -0,0 +1,8 @@ + + + + +
        + " />

        + + diff --git a/ehcp/net2ftp/skins/mobile/rename2.template.php b/ehcp/net2ftp/skins/mobile/rename2.template.php new file mode 100644 index 0000000..fefa084 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/rename2.template.php @@ -0,0 +1,6 @@ + + + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/status/license.txt b/ehcp/net2ftp/skins/mobile/status/license.txt new file mode 100644 index 0000000..20330cc --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/status/license.txt @@ -0,0 +1,12 @@ + +All the code within this directory originates from the PHP Pear package called +HTML_Progress written by Laurent Laville. + +http://pear.laurent-laville.org/HTML_Progress/examples/index.html +http://pear.laurent-laville.org/HTML_Progress/examples/horizontal/string.php + +------------------------------------------------------------------------------- + +The license of this code is: PHP License 3.0 +For more information on this license, go to http://www.php.net/license/3_0.txt + diff --git a/ehcp/net2ftp/skins/mobile/status/status.inc.php b/ehcp/net2ftp/skins/mobile/status/status.inc.php new file mode 100644 index 0000000..6d306e3 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/status/status.inc.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/mobile/status/status.js b/ehcp/net2ftp/skins/mobile/status/status.js new file mode 100644 index 0000000..a3ab12a --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/status/status.js @@ -0,0 +1,44 @@ + +var isDom = document.getElementById?true:false; +var isIE = document.all?true:false; +var isNS4 = document.layers?true:false; +var cellCount = 10; + +function setprogress(pIdent, pValue, pString, pDeterminate) +{ + if (isDom) { + prog = document.getElementById(pIdent+'installationProgress'); + } else if (isIE) { + prog = document.all[pIdent+'installationProgress']; + } else if (isNS4) { + prog = document.layers[pIdent+'installationProgress']; + } + if (prog != null) { + prog.innerHTML = pString; + } + if (pValue == pDeterminate) { + for (i=0; i < cellCount; i++) { + showCell(i, pIdent, "hidden"); + } + } + if ((pDeterminate > 0) && (pValue > 0)) { + i = (pValue-1) % cellCount; + showCell(i, pIdent, "visible"); + } else { + for (i=pValue-1; i >=0; i--) { + showCell(i, pIdent, "visible"); + } + } +} + +function showCell(pCell, pIdent, pVisibility) +{ + if (isDom) { + document.getElementById(pIdent+'progressCell'+pCell+'A').style.visibility = pVisibility; + } else if (isIE) { + document.all[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } else if (isNS4) { + document.layers[pIdent+'progressCell'+pCell+'A'].style.visibility = pVisibility; + } +} + diff --git a/ehcp/net2ftp/skins/mobile/status/status.template.php b/ehcp/net2ftp/skins/mobile/status/status.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/mobile/statusbar.template.php b/ehcp/net2ftp/skins/mobile/statusbar.template.php new file mode 100644 index 0000000..e69de29 diff --git a/ehcp/net2ftp/skins/mobile/unzip1.template.php b/ehcp/net2ftp/skins/mobile/unzip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/unzip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/unzip2.template.php b/ehcp/net2ftp/skins/mobile/unzip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/unzip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/upload1.template.php b/ehcp/net2ftp/skins/mobile/upload1.template.php new file mode 100644 index 0000000..21f45c1 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/upload1.template.php @@ -0,0 +1,36 @@ + + + " /> + +

        + + + + + + + + + +
        +

        +
        +
        (zip, tar, tgz, gz)

        +
        +
        + " onclick="add_file('file', 1);" />
        +
        +
        + " onclick="add_file('archive', 1);" />
        +

        +
        + +
        +
          +
        • %1\$s kB and by PHP to %2\$s", $max_filesize_net2ftp, $max_upload_filesize_php); ?>
        • +
        • %1\$s seconds", $max_execution_time); ?>
        • +
        • +
        • +
        +

        + diff --git a/ehcp/net2ftp/skins/mobile/upload2.template.php b/ehcp/net2ftp/skins/mobile/upload2.template.php new file mode 100644 index 0000000..f81c801 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/upload2.template.php @@ -0,0 +1,31 @@ + + +: 100px; margin-bottom: 30px;"> + + + +
        + Checking files:
        +
          + +
        • + +
        + Transferring files to the FTP server:
        +
          +" . $net2ftp_output["ftp_transferfiles"][$i] . "\n"; + } // end for + } // end if + if (isset($net2ftp_output["ftp_unziptransferfiles"]) == true) { + for ($i=0; $i" || $net2ftp_output["ftp_unziptransferfiles"][$i] == "
        ") { echo $net2ftp_output["ftp_unziptransferfiles"][$i]; } + else { echo "
      29. " . $net2ftp_output["ftp_unziptransferfiles"][$i] . "
      30. \n"; } + } // end for + } // end if +?> + +
        + + diff --git a/ehcp/net2ftp/skins/mobile/view1.template.php b/ehcp/net2ftp/skins/mobile/view1.template.php new file mode 100644 index 0000000..40d86ba --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/view1.template.php @@ -0,0 +1,35 @@ + + + + + + + +
        + +
        + +
        + <?php echo $image_alt; ?>

        +
        +
        + +
        + + + + + + +
        + + + + + diff --git a/ehcp/net2ftp/skins/mobile/zip1.template.php b/ehcp/net2ftp/skins/mobile/zip1.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/zip1.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/mobile/zip2.template.php b/ehcp/net2ftp/skins/mobile/zip2.template.php new file mode 100644 index 0000000..68fc260 --- /dev/null +++ b/ehcp/net2ftp/skins/mobile/zip2.template.php @@ -0,0 +1,2 @@ + + diff --git a/ehcp/net2ftp/skins/shinra/admin1.template.php b/ehcp/net2ftp/skins/shinra/admin1.template.php new file mode 100644 index 0000000..055bce0 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/admin1.template.php @@ -0,0 +1,37 @@ + + + + + + +


        +
        : 100px; margin-: 100px; padding: 10px;"> +
        + +
        +


        +


        + +" onclick="document.forms['AdminForm'].state.value='admin_viewlogs'; document.forms['AdminForm'].submit();" />   +" onclick="document.forms['AdminForm'].state.value='admin_emptylogs'; document.forms['AdminForm'].submit();" />
        +

        +


        +" onclick="document.forms['AdminForm'].state.value='admin_createtables'; document.forms['AdminForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/shinra/admin_createtables1.template.php b/ehcp/net2ftp/skins/shinra/admin_createtables1.template.php new file mode 100644 index 0000000..5d3371a --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/admin_createtables1.template.php @@ -0,0 +1,25 @@ + + + + + + +\n"; + } // end for ?> + +

        + + + + + + +


        + +

        +

        + + diff --git a/ehcp/net2ftp/skins/shinra/admin_createtables2.template.php b/ehcp/net2ftp/skins/shinra/admin_createtables2.template.php new file mode 100644 index 0000000..d69ed39 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/admin_createtables2.template.php @@ -0,0 +1,21 @@ + + + + + + + + + + +
        +:
        +:
        +:
        +:

        + +
        +\n"; + } // end for ?> + diff --git a/ehcp/net2ftp/skins/shinra/admin_emptylogs1.template.php b/ehcp/net2ftp/skins/shinra/admin_emptylogs1.template.php new file mode 100644 index 0000000..b04133d --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/admin_emptylogs1.template.php @@ -0,0 +1,11 @@ + + + + + + +\n"; + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/shinra/admin_viewlogs1.template.php b/ehcp/net2ftp/skins/shinra/admin_viewlogs1.template.php new file mode 100644 index 0000000..b3ea98e --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/admin_viewlogs1.template.php @@ -0,0 +1,19 @@ + + + + + + + +

        + + +

        + + +

        + + +

        + + diff --git a/ehcp/net2ftp/skins/shinra/advanced1.template.php b/ehcp/net2ftp/skins/shinra/advanced1.template.php new file mode 100644 index 0000000..a56d426 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/advanced1.template.php @@ -0,0 +1,18 @@ + + + +

        + + + " onclick="document.forms['AdvancedForm'].state.value='raw'; document.forms['AdvancedForm'].submit();" /> + + " disabled title="" /> + +

        + +

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_webserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_ftpserver'; document.forms['AdvancedForm'].submit();" />

        +" onclick="document.forms['AdvancedForm'].state.value='advanced_parsing'; document.forms['AdvancedForm'].submit();" />

        + + diff --git a/ehcp/net2ftp/skins/shinra/advanced_ftpserver1.template.php b/ehcp/net2ftp/skins/shinra/advanced_ftpserver1.template.php new file mode 100644 index 0000000..4309101 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/advanced_ftpserver1.template.php @@ -0,0 +1,30 @@ + + + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + + + + +
        " />
        " />
        " />
        ">
        + diff --git a/ehcp/net2ftp/skins/shinra/advanced_ftpserver2.template.php b/ehcp/net2ftp/skins/shinra/advanced_ftpserver2.template.php new file mode 100644 index 0000000..0aa2f94 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/advanced_ftpserver2.template.php @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
          +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • + + + + + + +
        • + +
        • +
          + +
        • + +
        • +
          + Line $i
          \n"; + print_r($parsedlist[$i]); + echo "
          "; + } // End for + ?> +
        • +
        + + diff --git a/ehcp/net2ftp/skins/shinra/advanced_parsing1.template.php b/ehcp/net2ftp/skins/shinra/advanced_parsing1.template.php new file mode 100644 index 0000000..0ef54cf --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/advanced_parsing1.template.php @@ -0,0 +1,6 @@ + + + + diff --git a/ehcp/net2ftp/skins/shinra/advanced_webserver1.template.php b/ehcp/net2ftp/skins/shinra/advanced_webserver1.template.php new file mode 100644 index 0000000..95ce7c6 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/advanced_webserver1.template.php @@ -0,0 +1,108 @@ + + + +
          + +
        • + + +
        • +
        • +
          • +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
        • + +
        • +
          • +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • + + + + + + +
          • + +
          • +
            + +
          • + +
          • +
            +Line $i
            \n"; + print_r($parsedlist[$i]); + echo "
            "; + } // End for +?> +
          • +
        • + + diff --git a/ehcp/net2ftp/skins/shinra/bookmark1.template.php b/ehcp/net2ftp/skins/shinra/bookmark1.template.php new file mode 100644 index 0000000..4db8b14 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/bookmark1.template.php @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + +

          +
            +
          • + +

            +
          • +
          • +
            +
            +

            +
          • +
          + + diff --git a/ehcp/net2ftp/skins/shinra/browse_main.template.php b/ehcp/net2ftp/skins/shinra/browse_main.template.php new file mode 100644 index 0000000..aa900dd --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/browse_main.template.php @@ -0,0 +1,11 @@ + + + + diff --git a/ehcp/net2ftp/skins/shinra/browse_main_details.template.php b/ehcp/net2ftp/skins/shinra/browse_main_details.template.php new file mode 100644 index 0000000..1c9c9d8 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/browse_main_details.template.php @@ -0,0 +1,330 @@ + + + + + +
          " method="post"> + + + + + + + + + + + + +
            ;"> + +
          + : +
          ;"> +
          +
          +
          ;"> + +
          + +
          + +
          + + +
          + +

          + + + +
          + +

          + + + +
          + +

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + $checkbox_hidden = "checkbox"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + $checkbox_hidden = "hidden"; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + $checkbox_hidden = "checkbox"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + $checkbox_hidden = "hidden"; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { ?> + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + $checkbox_hidden = "checkbox"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + $checkbox_hidden = "hidden"; + } +// -------------------------- ?> + + + + + + + + + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + +
          +
          ;"> +" onclick="submitBrowseForm('', '', 'newdir', '');" title=" (accesskey w)" accesskey="w" /> +" onclick="submitBrowseForm('', '', 'edit', 'newfile');" title=" (accesskey y)" accesskey="y" /> +" onclick="submitBrowseForm('', '', 'easyWebsite', '');" title=" (accesskey e)" accesskey="e" /> +" onclick="submitBrowseForm('', '', 'upload', '');" title=" (accesskey u)" accesskey="u" /> +" onclick="submitBrowseForm('', '', 'jupload', '');" title=" (accesskey p)" accesskey="j" /> +" onclick="submitBrowseForm('', '', 'install', '');" title=" (accesskey k)" accesskey="k" /> +" onclick="submitBrowseForm('', '', 'advanced', 'main');" title=" (accesskey n)" accesskey="n" /> + ;"> + +" onclick="submitBrowseForm('', '', 'copymovedelete', 'copy');" title=" (accesskey c)" accesskey="c" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'move');" title=" (accesskey m)" accesskey="m" /> +" onclick="submitBrowseForm('', '', 'copymovedelete', 'delete');" title=" (accesskey d)" accesskey="d" /> +" onclick="submitBrowseForm('', '', 'rename', '');" title=" (accesskey o)" accesskey="o" /> +" onclick="submitBrowseForm('', '', 'chmod', '');" title=" (accesskey p)" accesskey="p" /> +
          +" onclick="submitBrowseForm('', '', 'downloadzip', '');" title=" (accesskey x)" accesskey="x" /> +" onclick="submitBrowseForm('', '', 'zip', 'zip');" title=" (accesskey z)" accesskey="z" /> +" onclick="submitBrowseForm('', '', 'unzip', '');" title=" (accesskey i)" accesskey="i" /> +" onclick="submitBrowseForm('', '', 'calculatesize', '');" title=" (accesskey q)" accesskey="q" /> +" onclick="submitBrowseForm('', '', 'findstring', '');" title=" (accesskey f)" accesskey="f" /> +
          +
          +
          " title="">" title="">" title="">" title="">" title="">" title="">" title="">
          " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + "d")); ?> + " style="cursor: pointer; cursor: hand;" onclick="javascript:submitBrowseForm('', '', 'browse', 'main');"> + .. +
          " style="text-align: center; width: 32px;"> + + + + + + + +
          " style="text-align: center; width: 32px;"> + + + + + + + + ', 'view', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'edit', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ', 'updatefile', ''); return false;" title="" style="cursor: pointer; cursor: hand;"> ">
          " style="text-align: center; width: 32px;"> + + + + + + + +
          +


          +
          +
          + +
          + +
          + + +
          +:
          +: /
          +:
          +:
          + +:
          +: + +
          + + + diff --git a/ehcp/net2ftp/skins/shinra/browse_main_icons.template.php b/ehcp/net2ftp/skins/shinra/browse_main_icons.template.php new file mode 100644 index 0000000..3077b7c --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/browse_main_icons.template.php @@ -0,0 +1,274 @@ + + + + + +
          +
          " method="post"> + + + + + + + " style="cursor: pointer; cursor: hand; border: 0px; text-align: center;"> + + +
          + + + + + + +
          + +

          + + + +
          + +

          + + + +
          + +

          + + +
          + : +
          + +
          + +
          + + + + + 0) { ?> + + + + + + +" . $list_directories[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_directories[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_files[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_files[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + +" . $list_symlinks[$i]["dirfilename_html"] . "\n"; + } + else { + $onClick = ""; + $title = ""; + $style = ""; + $href = "" . $list_symlinks[$i]["dirfilename_html"] . ""; + } + $rowcounter++; +// -------------------------- ?> + + + + + + + + + + + + 0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
          + () +
          : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + ( / ) +
          : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + () +
          | : | : | : | : | : " onmouseover="this.style.color='#000000'; this.style.backgroundColor='#ffcc00';" onmouseout="this.style.color='#000000'; setColor_js(, 'checkbox');"> +
          + +
          + +
          +
           
          + () +
          +
          +
          + +
          +
           
          +


          +
          + +
          + + + +
          + + diff --git a/ehcp/net2ftp/skins/shinra/browse_popup.template.php b/ehcp/net2ftp/skins/shinra/browse_popup.template.php new file mode 100644 index 0000000..c406258 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/browse_popup.template.php @@ -0,0 +1,30 @@ + + +
          " method="post"> + + + + + + + +" onclick="opener.document..value=document.forms['DirectoryTreeForm'].directory.value; self.close();" />

          +

          + +
          +
          + diff --git a/ehcp/net2ftp/skins/shinra/calculatesize1.template.php b/ehcp/net2ftp/skins/shinra/calculatesize1.template.php new file mode 100644 index 0000000..b72e33c --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/calculatesize1.template.php @@ -0,0 +1,6 @@ + + + +
          + + diff --git a/ehcp/net2ftp/skins/shinra/chmod1.template.php b/ehcp/net2ftp/skins/shinra/chmod1.template.php new file mode 100644 index 0000000..3b3d736 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/chmod1.template.php @@ -0,0 +1,67 @@ + + + + +
          + : 5px;"> + + + + + + + + + + + + + + + + + + + + + +
          " onclick="CopyCheckboxToAll(document.forms['ChmodForm'], 'header[owner_read]', 'owner_read'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[owner_write]', 'owner_write'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[owner_execute]', 'owner_execute'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[group_read]', 'group_read'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[group_write]', 'group_write'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[group_execute]', 'group_execute'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[other_read]', 'other_read'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[other_write]', 'other_write'); CopyCheckboxToAll(document.forms['ChmodForm'], 'header[other_execute]', 'other_execute'); update_input(); " />
          Owner:ReadWriteExecute
          Group:ReadWriteExecute
          Everyone:ReadWriteExecute
          +
          .
          +

          + + + +
          + +: 20px;"> + + + + + + + + + + + + + + + + + + + + + +
          Owner: />Read />Write />Execute
          Group: />Read />Write />Execute
          Everyone: />Read />Write />Execute
          Chmod value: " name="chmod" id="chmod" onchange="update_checkbox();" />
          + +
          +
          + +

          + + + + diff --git a/ehcp/net2ftp/skins/shinra/chmod2.template.php b/ehcp/net2ftp/skins/shinra/chmod2.template.php new file mode 100644 index 0000000..993fbca --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/chmod2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["ftp_chmod2"][$i] == "
        ") { echo $net2ftp_output["ftp_chmod2"][$i] . "\n"; } + else { echo "
      31. " . $net2ftp_output["ftp_chmod2"][$i] . "
      32. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/shinra/copymovedelete1.template.php b/ehcp/net2ftp/skins/shinra/copymovedelete1.template.php new file mode 100644 index 0000000..94b370b --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/copymovedelete1.template.php @@ -0,0 +1,97 @@ + + + + + + + +
        + " onclick="CopyValueToAll(document.forms['CopyMoveDeleteForm'], document.forms['CopyMoveDeleteForm'].headerDirectory, 'targetdirectory');" />   + " /> + +
        +
        +
        +
        + : 100px; margin-bottom: 30px;"> + + + + + + + + + + + + + + + + + + + + + +
        + port + +
        : + +
        :
        :
        +
        +
        + +
        +
        + +
        +

        + + + + + + " /> +%1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Copy file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Copy symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "move") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Move directory %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("Move file %1\$s to:", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Move symlink %1\$s to:", $list["all"][$i]["dirfilename"]); } + } + elseif ($net2ftp_globals["state2"] == "delete") { + if ($list["all"][$i]["dirorfile"] == "d") { echo __("Directory %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "-") { echo __("File %1\$s", $list["all"][$i]["dirfilename"]); } + elseif ($list["all"][$i]["dirorfile"] == "l") { echo __("Symlink %1\$s", $list["all"][$i]["dirfilename"]); } + } +?> +
        + + + + + + + + +
        + " /> +
        + " /> +

        + + + + diff --git a/ehcp/net2ftp/skins/shinra/copymovedelete2.template.php b/ehcp/net2ftp/skins/shinra/copymovedelete2.template.php new file mode 100644 index 0000000..3707b75 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/copymovedelete2.template.php @@ -0,0 +1,8 @@ + + +" || $net2ftp_output["ftp_copymovedelete"][$i] == "") { echo $net2ftp_output["ftp_copymovedelete"][$i] . "\n"; } + else { echo "
      33. " . $net2ftp_output["ftp_copymovedelete"][$i] . "
      34. \n"; } + } // end for ?> + + diff --git a/ehcp/net2ftp/skins/shinra/css/ie8-hacks.css b/ehcp/net2ftp/skins/shinra/css/ie8-hacks.css new file mode 100644 index 0000000..16b8dcc --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/ie8-hacks.css @@ -0,0 +1,8 @@ +/* IE 8 hacks */ + +body{} + + + + + diff --git a/ehcp/net2ftp/skins/shinra/css/reset.css b/ehcp/net2ftp/skins/shinra/css/reset.css new file mode 100644 index 0000000..639e4d1 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/reset.css @@ -0,0 +1 @@ +/* http://meyerweb.com/eric/tools/css/reset/ */ /* v1.0 | 20080212 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } /* remember to define focus styles! */ :focus { outline: 0; } /* remember to highlight inserts somehow! */ ins { text-decoration: none; } del { text-decoration: line-through; } /* tables still need 'cellspacing="0"' in the markup */ table { border-collapse: collapse; border-spacing: 0; } \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/css/social-icons.css b/ehcp/net2ftp/skins/shinra/css/social-icons.css new file mode 100644 index 0000000..61f2f8b --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/social-icons.css @@ -0,0 +1,213 @@ +/* + +The list of Socia icon files in 32px + +addthis_32.png +aim_32.png +aim2_32.png +apple_32.png +bebo_32.png +behance_32.png +blogger_32.png +brightkite_32.png +cargo_32.png +delicious_32.png +design_bump_32.png +designfloat_32.png +designmoo_32.png +deviantart_32.png +digg_32.png +dopplr_32.png +dribbble_32.png +email_32.png +ember_32.png +evernote_32.png +facebook_32.png +flickr_32.png +friendfeed_32.png +github_32.png +google_32.png +google_buzz_32.png +google_talk_32.png +googlemaps_32.png +lastfm_32.png +linkedin_32.png +livejournal_32.png +mixx_32.png +mobileme_32.png +msn_32.png +myspace_32.png +netvibes_32.png +newsvine_32.png +orkut_32.png +pandora_32.png +paypal_32.png +picasa_32.png +posterous_32.png +qik_32.png +reddit_32.png +rss_32.png +sharethis_32.png +skype_32.png +slashdot_32.png +squidoo_32.png +stumbleupon_32.png +technorati_32.png +tumblr_32.png +twitter_32.png +viddler_32.png +vimeo_32.png +virb_32.png +windows_32.png +wordpress_32.png +xing_32.png +yahoo_32.png +yahoo_buzz_32.png +yelp_32.png +youtube_32.png + +*/ + + +/* Circular 32x32 px ------------------------------------------------------------*/ + + +.social .addthis{ background: url(../img/social-icons/circular/addthis_32.png); } +.social .aim{ background: url(../img/social-icons/circular/aim_32.png); } +.social .aim2{ background: url(../img/social-icons/circular/aim2_32.png); } +.social .apple{ background: url(../img/social-icons/circular/apple_32.png); } +.social .bebo{ background: url(../img/social-icons/circular/bebo_32.png); } +.social .behance{ background: url(../img/social-icons/circular/behance_32.png); } +.social .blogger{ background: url(../img/social-icons/circular/blogger_32.png); } +.social .brightkite{ background: url(../img/social-icons/circular/brightkite_32.png); } +.social .cargo{ background: url(../img/social-icons/circular/cargo_32.png); } +.social .delicious{ background: url(../img/social-icons/circular/delicious_32.png); } +.social .design-bump{ background: url(../img/social-icons/circular/design_bump_32.png); } +.social .designfloat{ background: url(../img/social-icons/circular/designfloat_32.png); } +.social .designmoo{ background: url(../img/social-icons/circular/designmoo_32.png); } +.social .deviantart{ background: url(../img/social-icons/circular/deviantart_32.png); } +.social .digg{ background: url(../img/social-icons/circular/digg_32.png); } +.social .dopplr{ background: url(../img/social-icons/circular/dopplr_32.png); } +.social .dribbble{ background: url(../img/social-icons/circular/dribbble_32.png); } +.social .email{ background: url(../img/social-icons/circular/email_32.png); } +.social .ember{ background: url(../img/social-icons/circular/ember_32.png); } +.social .evernote{ background: url(../img/social-icons/circular/evernote_32.png); } +.social .facebook{ background: url(../img/social-icons/circular/facebook_32.png); } +.social .flickr{ background: url(../img/social-icons/circular/flickr_32.png); } +.social .friendfeed{ background: url(../img/social-icons/circular/friendfeed_32.png); } +.social .github{ background: url(../img/social-icons/circular/github_32.png); } +.social .google{ background: url(../img/social-icons/circular/google_32.png); } +.social .google-buzz{ background: url(../img/social-icons/circular/google_buzz_32.png); } +.social .google-talk{ background: url(../img/social-icons/circular/google_talk_32.png); } +.social .googlemaps{ background: url(../img/social-icons/circular/googlemaps_32.png); } +.social .lastfm{ background: url(../img/social-icons/circular/lastfm_32.png); } +.social .linkedin{ background: url(../img/social-icons/circular/linkedin_32.png); } +.social .livejournal{ background: url(../img/social-icons/circular/livejournal_32.png); } +.social .mixx{ background: url(../img/social-icons/circular/mixx_32.png); } +.social .mobileme{ background: url(../img/social-icons/circular/mobileme_32.png); } +.social .msn{ background: url(../img/social-icons/circular/msn_32.png); } +.social .myspace{ background: url(../img/social-icons/circular/myspace_32.png); } +.social .netvibes{ background: url(../img/social-icons/circular/netvibes_32.png); } +.social .newsvine{ background: url(../img/social-icons/circular/newsvine_32.png); } +.social .orkut{ background: url(../img/social-icons/circular/orkut_32.png); } +.social .pandora{ background: url(../img/social-icons/circular/pandora_32.png); } +.social .paypal{ background: url(../img/social-icons/circular/paypal_32.png); } +.social .picasa{ background: url(../img/social-icons/circular/picasa_32.png); } +.social .posterous{ background: url(../img/social-icons/circular/posterous_32.png); } +.social .qik{ background: url(../img/social-icons/circular/qik_32.png); } +.social .reddit{ background: url(../img/social-icons/circular/reddit_32.png); } +.social .rss{ background: url(../img/social-icons/circular/rss_32.png); } +.social .sharethis{ background: url(../img/social-icons/circular/sharethis_32.png); } +.social .skype{ background: url(../img/social-icons/circular/skype_32.png); } +.social .slashdot{ background: url(../img/social-icons/circular/slashdot_32.png); } +.social .squidoo{ background: url(../img/social-icons/circular/squidoo_32.png); } +.social .stumbleupon{ background: url(../img/social-icons/circular/stumbleupon_32.png); } +.social .technorati{ background: url(../img/social-icons/circular/technorati_32.png); } +.social .tumblr{ background: url(../img/social-icons/circular/tumblr_32.png); } +.social .twitter{ background: url(../img/social-icons/circular/twitter_32.png); } +.social .viddler{ background: url(../img/social-icons/circular/viddler_32.png); } +.social .vimeo{ background: url(../img/social-icons/circular/vimeo_32.png); } +.social .virb{ background: url(../img/social-icons/circular/virb_32.png); } +.social .windows{ background: url(../img/social-icons/circular/windows_32.png); } +.social .wordpress{ background: url(../img/social-icons/circular/wordpress_32.png); } +.social .xing{ background: url(../img/social-icons/circular/xing_32.png); } +.social .yahoo{ background: url(../img/social-icons/circular/yahoo_32.png); } +.social .yahoo-buzz{ background: url(../img/social-icons/circular/yahoo_buzz_32.png); } +.social .yelp{ background: url(../img/social-icons/circular/yelp_32.png); } +.social .youtube{ background: url(../img/social-icons/circular/youtube_32.png); } + + + + +/* rounded 32x32 px ------------------------------------------------------------*/ + + +.rounded .addthis{ background: url(../img/social-icons/rounded/addthis_32.png); } +.rounded .aim{ background: url(../img/social-icons/rounded/aim_32.png); } +.rounded .aim2{ background: url(../img/social-icons/rounded/aim2_32.png); } +.rounded .apple{ background: url(../img/social-icons/rounded/apple_32.png); } +.rounded .bebo{ background: url(../img/social-icons/rounded/bebo_32.png); } +.rounded .behance{ background: url(../img/social-icons/rounded/behance_32.png); } +.rounded .blogger{ background: url(../img/social-icons/rounded/blogger_32.png); } +.rounded .brightkite{ background: url(../img/social-icons/rounded/brightkite_32.png); } +.rounded .cargo{ background: url(../img/social-icons/rounded/cargo_32.png); } +.rounded .delicious{ background: url(../img/social-icons/rounded/delicious_32.png); } +.rounded .design-bump{ background: url(../img/social-icons/rounded/design_bump_32.png); } +.rounded .designfloat{ background: url(../img/social-icons/rounded/designfloat_32.png); } +.rounded .designmoo{ background: url(../img/social-icons/rounded/designmoo_32.png); } +.rounded .deviantart{ background: url(../img/social-icons/rounded/deviantart_32.png); } +.rounded .digg{ background: url(../img/social-icons/rounded/digg_32.png); } +.rounded .dopplr{ background: url(../img/social-icons/rounded/dopplr_32.png); } +.rounded .dribbble{ background: url(../img/social-icons/rounded/dribbble_32.png); } +.rounded .email{ background: url(../img/social-icons/rounded/email_32.png); } +.rounded .ember{ background: url(../img/social-icons/rounded/ember_32.png); } +.rounded .evernote{ background: url(../img/social-icons/rounded/evernote_32.png); } +.rounded .facebook{ background: url(../img/social-icons/rounded/facebook_32.png); } +.rounded .flickr{ background: url(../img/social-icons/rounded/flickr_32.png); } +.rounded .friendfeed{ background: url(../img/social-icons/rounded/friendfeed_32.png); } +.rounded .github{ background: url(../img/social-icons/rounded/github_32.png); } +.rounded .google{ background: url(../img/social-icons/rounded/google_32.png); } +.rounded .google-buzz{ background: url(../img/social-icons/rounded/google_buzz_32.png); } +.rounded .google-talk{ background: url(../img/social-icons/rounded/google_talk_32.png); } +.rounded .googlemaps{ background: url(../img/social-icons/rounded/googlemaps_32.png); } +.rounded .lastfm{ background: url(../img/social-icons/rounded/lastfm_32.png); } +.rounded .linkedin{ background: url(../img/social-icons/rounded/linkedin_32.png); } +.rounded .livejournal{ background: url(../img/social-icons/rounded/livejournal_32.png); } +.rounded .mixx{ background: url(../img/social-icons/rounded/mixx_32.png); } +.rounded .mobileme{ background: url(../img/social-icons/rounded/mobileme_32.png); } +.rounded .msn{ background: url(../img/social-icons/rounded/msn_32.png); } +.rounded .myspace{ background: url(../img/social-icons/rounded/myspace_32.png); } +.rounded .netvibes{ background: url(../img/social-icons/rounded/netvibes_32.png); } +.rounded .newsvine{ background: url(../img/social-icons/rounded/newsvine_32.png); } +.rounded .orkut{ background: url(../img/social-icons/rounded/orkut_32.png); } +.rounded .pandora{ background: url(../img/social-icons/rounded/pandora_32.png); } +.rounded .paypal{ background: url(../img/social-icons/rounded/paypal_32.png); } +.rounded .picasa{ background: url(../img/social-icons/rounded/picasa_32.png); } +.rounded .posterous{ background: url(../img/social-icons/rounded/posterous_32.png); } +.rounded .qik{ background: url(../img/social-icons/rounded/qik_32.png); } +.rounded .reddit{ background: url(../img/social-icons/rounded/reddit_32.png); } +.rounded .rss{ background: url(../img/social-icons/rounded/rss_32.png); } +.rounded .sharethis{ background: url(../img/social-icons/rounded/sharethis_32.png); } +.rounded .skype{ background: url(../img/social-icons/rounded/skype_32.png); } +.rounded .slashdot{ background: url(../img/social-icons/rounded/slashdot_32.png); } +.rounded .squidoo{ background: url(../img/social-icons/rounded/squidoo_32.png); } +.rounded .stumbleupon{ background: url(../img/social-icons/rounded/stumbleupon_32.png); } +.rounded .technorati{ background: url(../img/social-icons/rounded/technorati_32.png); } +.rounded .tumblr{ background: url(../img/social-icons/rounded/tumblr_32.png); } +.rounded .twitter{ background: url(../img/social-icons/rounded/twitter_32.png); } +.rounded .viddler{ background: url(../img/social-icons/rounded/viddler_32.png); } +.rounded .vimeo{ background: url(../img/social-icons/rounded/vimeo_32.png); } +.rounded .virb{ background: url(../img/social-icons/rounded/virb_32.png); } +.rounded .windows{ background: url(../img/social-icons/rounded/windows_32.png); } +.rounded .wordpress{ background: url(../img/social-icons/rounded/wordpress_32.png); } +.rounded .xing{ background: url(../img/social-icons/rounded/xing_32.png); } +.rounded .yahoo{ background: url(../img/social-icons/rounded/yahoo_32.png); } +.rounded .yahoo-buzz{ background: url(../img/social-icons/rounded/yahoo_buzz_32.png); } +.rounded .yelp{ background: url(../img/social-icons/rounded/yelp_32.png); } +.rounded .youtube{ background: url(../img/social-icons/rounded/youtube_32.png); } + + + + + + diff --git a/ehcp/net2ftp/skins/shinra/css/style.css.php b/ehcp/net2ftp/skins/shinra/css/style.css.php new file mode 100644 index 0000000..461949d --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/style.css.php @@ -0,0 +1,1305 @@ +\\|]/", "", $_GET["image_url"]); } +else { $image_url = ""; } +if (isset($_GET["show_ads"]) == false || $_GET["show_ads"] != "yes") { $show_ads = "no"; } +else { $show_ads = "yes"; } +?> + +/* IMPORTS ------------------------------------------------------------*/ + +@import url('reset.css'); + +@import url('styled-elements.css'); + +/* HACKS ------------------------------------------------------------*/ + +.clear{ + clear:both; + height:1px; +} + +.inv{ display:none; } + +.alignleft{ + float: left; + margin: 5px 10px 5px 0px; +} + +/* GENERAL ------------------------------------------------------------*/ + + +body { + line-height: 1; + color: #696969; + background: #f1f1f1 url(../img/bg/patterns/obl-1x1.png); + font-family: Arial, Helvetica, sans-serif; + font-size: 100%; +} + +#wrapper{ + width: 966px; + margin: 15px auto; + background: #363636; + min-height: 500px; + font-size: 14px; + line-height: 1.5em; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#header{ + + position: relative; + z-index: 10; +} + +#main{ + background: #ffffff; + position: relative; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content{ + min-height: 400px; + overflow: hidden; + margin-bottom: 40px; +} + +#footer{ + position: relative; + color: #fff; +} + +#logo{ + position: absolute; + + left: 30px; +} + +#content a{ + color: #37b2d1; +} + +#content p{ + margin-bottom: 20px; +} + +#content .line-divider{ + clear: both; + border-bottom: 1px solid #d7d7d7; + padding-bottom: 20px; + margin-bottom: 20px; +} + +/* breadcrumbs --------------------------------------------------------*/ + +#header #breadcrumbs{ + position: absolute; + bottom: 11px; + left: 30px; + font-style: italic; + color: #999; + font-size: 10px; +} + +#header #breadcrumbs a{ + color: #bfbdbd; + text-decoration: none; + background: url(../img/breadcrumb-slash.png) no-repeat top right; + padding-right: 14px; +} + +/* TITLE --------------------------------------------------------*/ + +#page-title{ + overflow: hidden; + height: 60px; + margin-bottom: 20px; + background: #f2f1f1 url(../img/twitter-border.png) repeat-x bottom left; +} + +#page-title .title{ + display: block; + float: left; + font-family: 'Ubuntu', arial, serif; + font-size: 30px; + line-height: 60px; + margin-left: 30px; + text-shadow: 0 1px rgba(255, 255, 255, 1); +} + +#page-title .subtitle{ + display: block; + float: left; + margin-left: 30px; + line-height: 60px; + color: #929191; + font-style: italic; +} + +/* HOME --------------------------------------------------------*/ + +body.home #header{ + height: 430px; + position: relative; + z-index: 10; +} + +body.home #header #headline{ + width: 906px; + margin: 110px auto 40px auto; + font-size: 26px; + line-height: 1.5em; + font-family: 'Ubuntu', arial, serif; + color: #ebe7e7; + text-align: center; +} + +body.home #content{ + padding-top: 250px; +} + +#headline a{ + text-decoration: none; + color: #FFD800; +} + +/* HEADERS --------------------------------------------------------*/ + +h1,h2,h3,h4,h5,h6{ + line-height: 1.4em; + font-family: 'Ubuntu', arial, serif; + font-weight: lighter; + margin-bottom: 10px; +} + +h1{ font-size: 30px; } + +h2{ font-size: 28px; } + +h3{ font-size: 26px; } + +h4{ font-size: 24px; } + +h5{ font-size: 22px; } + +h6{ font-size: 20px; } + +/* COLUMNS LAYOUT----------------------------------------------------------*/ + +.one-half, +.one-third, +.two-third, +.three-fourth, +.one-fourth { + float:left; + margin-right:30px; + position:relative; +} + +.one-half{ width: 438px; } + +.one-third{ width: 282px; } + +.one-fourth{ width: 204px; } + +.two-third{ width: 594px; } + +.three-fourth{ width: 672px; } + +.last { + clear:right; + margin-right:0 !important; +} + + +/* SOCIAL --------------------------------------------------------*/ + +#social-holder{ + overflow: hidden; + width: 100%; + +} + +.social{ + display: block; + float: right; + overflow: hidden; + margin-right: 20px; +} + +.social li{ + display: block; + width: 32px; + height: 32px; + float: left; + margin-right: 10px; + margin-bottom: 10px; +} + +.social a{ + display: block; + width: 32px; + height: 32px; + text-indent: -9000px; +} + + +/* SEARCH --------------------------------------------------------*/ + +.top-search{ + position: absolute; + + right: 50px; +} + +#searchform #s{ + color: #49494b; + font-size: 12px; + width: 160px; + height: 21px; + + padding: 2px 35px 2px 8px; + border: 0; + background: #f0efeb; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#searchform #searchsubmit{ + position: absolute; + + right: 0px; + width: 25px; + height: 25px; + border: 0px; + background: url(../img/search-submit.png) no-repeat transparent -3px 2px; +} + +/* NAVIGATION --------------------------------------------------------*/ + + +#nav{ + display: block; + position: absolute; + + left: 30px; + height: 46px; + width: 906px; + background: #ffd800; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#nav>li{ + display: block; + float: left; + margin-left: 5px; + margin-top: 12px; +} + +#nav>li:first-child{ + margin-left: 10px; +} + +#nav>li>a{ + display: block; + font-size: 12px; + color: #363636; + text-decoration: none; + padding: 7px 10px 6px 10px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +#nav>li>a:hover, +#nav>li.current-menu-item>a{ + color: #fff; + background: #363636; + text-shadow: none; +} + +/* sub navigation */ + +#nav>li ul{ + display: block; + margin-top: -1px; + background: #ffd800; + border-radius: 0px 0px 10px 10px; + -moz-border-radius: 0px 0px 10px 10px; + -webkit-border-radius: 0px 0px 10px 10px; +} + +#nav>li>ul ul{ + margin-top: 0px; + border-radius: 0px 10px 10px 10px; + -moz-border-radius: 0px 10px 10px 10px; + -webkit-border-radius: 0px 10px 10px 10px; +} + +#nav>li ul li a{ + display: block; + padding: 10px 15px; + display: block; + font-size: 12px; + color: #363636; + text-decoration: none; +} + +#nav>li ul li a:hover{ + background: #363636; + color: #fff; +} + +#nav>li ul li:last-child a:hover{ /* last item its rounded at bottom */ + border-radius: 0px 0px 10px 10px; + -moz-border-radius: 0px 0px 10px 10px; + -webkit-border-radius: 0px 0px 10px 10px; +} + +/* FILTER --------------------------------------------------------*/ + +#content .filter{ + display: block; + overflow: hidden; + border-bottom: 1px solid #d7d7d7; + padding-bottom: 20px; + margin-bottom: 30px; + padding-left: 30px; + padding-right: 30px; +} + +#content .filter li{ + display: block; + float: left; + font-size: 12px; + line-height: 14px; + margin-right: 5px; + margin-bottom: 10px; + padding: 3px 10px; + background: #363636; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content .filter li:first-child{ + background: none; +} + + +#content .filter li a{ + display: block; + color: #f1f1f1; + text-decoration: none; + width: 100%; + height: 100%; +} + +#content .filter li:hover{ + background: #000; +} + +#content .filter li:first-child:hover{ + background: none; +} + +#content .filter li.active{ + background: #999; +} + + + +/* TWITTER --------------------------------------------------------*/ + +#twitter{ + position: relative; + background: #f2f1f1; + height: 170px; + width: 100%; + background: #f2f1f1 url(../img/twitter-border.png) repeat-x; + border-radius: 0px 0px 10px 10px; + -moz-border-radius: 0px 0px 10px 10px; + -webkit-border-radius: 0px 0px 10px 10px; +} + +#twitter #prev-tweet{ + display: block; + position: absolute; + top: 66px; + left: 30px; + width: 30px; + height: 35px; + background: transparent url(../img/prev-arrow.png) no-repeat top left; +} + +#twitter #next-tweet{ + display: block; + position: absolute; + top: 66px; + right: 30px; + width: 30px; + height: 35px; + background: transparent url(../img/next-arrow.png) no-repeat top right; +} + +#twitter #tweets .tweet_list{ + display: block; + position: absolute; + top: 0px; + left: 80px; + width: 810px; + height: 170px; +} + +#twitter #tweets .tweet_list li{ + display: block; + width: 810px; + height: 120px; /* original height 170px */ + font-size: 20px; + line-height: 1.5em; + font-style: italic; + color: #838383; + text-align: center; + padding-top: 62px; +} + +#twitter #tweets .tweet_list li .tweet_time a{ + text-decoration: none; + color: #ccc; +} + +#twitter #tweets .tweet_list li a{ + text-decoration: none; + color: #37b2d1; +} + +#twitter #tweets p.loading{ + text-align: center; + color: #ccc; + padding-top: 75px; + font-style: italic; +} + +/* PAGES --------------------------------------------------------*/ + +#page-content{ + float: left; + width: 906px; + margin-left: 30px; +} + +/* PORTFOLIO --------------------------------------------------------*/ + +#projects-list{ + overflow: hidden; +} + +#projects-list .project{ + position: relative; + float: left; + overflow: hidden; + width: 438px; + height: 495px; + margin-left: 30px; + margin-bottom: 30px; +} + +#projects-list .project h1 a{ + display: block; + text-decoration: none; + margin-bottom: 30px; + color: #696969; +} + +.project-shadow{ + background: url(../img/shadow-project.png) no-repeat 0px 267px; +} + +#projects-list .project .project-thumbnail{ + position: relative; + overflow: hidden; + width: 438px; + height: 267px; + margin-bottom: 30px; + background: #f1f1f1; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#projects-list .project .project-thumbnail .cover{ + position: absolute; + top:0px; + left: 0px; +} + +#projects-list .project .project-thumbnail .meta{ + display: block; + width: 252px; + height: 207px; + font-size: 12px; + line-height: 2em; + position: absolute; + top:30px; + left: 30px; +} + +#projects-list .project .read-more{ + display: block; + position: absolute; + top: 325px; + left: 160px; + background: #363636; + line-height: 33px; + text-decoration: none; + color: #fff; + padding: 0px 30px 0px 30px; + opacity: 0; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + -webkit-box-shadow: 0px 2px 3px #000; + -moz-box-shadow: 0px 2px 3px #000; + box-shadow: 0px 2px 3px #000; +} + +#projects-list .project .read-more:hover{ + color: #fff; + background: #000; +} + +#projects-list .project:hover .read-more{ + opacity: 1; +} + + +/* PROJECT --------------------------------------------------------*/ + +.project-column{ + width: 438px; + float: left; + margin-left: 30px; +} + +.project-column .project-thumbnail{ + overflow: hidden; + width: 438px; + height: 267px; + margin-bottom: 30px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + + +#content .project-column .meta a{ + display: inline; + font-size: 12px; + color: #fff; + padding: 3px 10px; + text-decoration: none; + background: #363636; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content .project-column .meta a:hover{ background: #000;} + +.project-column .project-title{ + margin-bottom: 20px; +} + +/* PROJECT-GALLERY -----------------------------------------------*/ + +.project-column .project-gallery{ + display: block; + overflow: hidden; + width: 468px; +} + +.project-column .project-gallery li{ + display: block; + float: left; + overflow: hidden; + background: url(../img/plus-sign.png) center center no-repeat; + width: 204; + height: 148px; + margin-right: 30px; + margin-top: 30px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +/* PROJECT-RELATED -----------------------------------------------*/ + +.related-title{ + margin-left: 30px; +} + +.related-projects{ + display: block; + overflow: hidden; +} + +.related-projects li{ + display: block; + float: left; + overflow: hidden; + width: 204px; + height: 280px; + margin-left: 30px; + margin-top: 30px; +} + +.related-projects li strong{ + display: block; +} + +.related-projects li a.box{ + display: block; + overflow: hidden; + width: 204px; + height: 148px; + margin-bottom: 30px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +.related-projects li a.box img{ + opacity: 0.7; +} + +.related-projects li:hover a.box img{ + opacity: 1; +} + +#content .related-projects li a{ + text-decoration: none; + color: #999; +} + +/* GALLERY -----------------------------------------------*/ + +#content .gallery{ + display: block; + overflow: hidden; +} + +#content .gallery li{ + display: block; + float: left; + overflow: hidden; + background: url(../img/plus-sign.png) center center no-repeat; + width: 204px; + height: 148px; + margin-left: 30px; + margin-bottom: 30px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content .gallery.three-cols li{ + width: 282px; + height: 267px; +} + +#content .gallery.two-cols li{ + width: 438px; + height: 267px; +} + +#content .gallery li a{ + display: block; +} + + +/* BLOG --------------------------------------------------------*/ + +#posts{ + float: left; + width: 624px; +} + +#posts .post{ + position: relative; + margin-left: 30px; + margin-bottom: 30px; +} + +#comments-block{ + position: relative; + margin-left: 30px; + margin-top: 40px; + margin-bottom: 30px; + padding-top: 80px; +} + +#posts.single .post{ + border-bottom: none; +} + +#posts .post:last-child{ + border-bottom: none; +} + +#posts h1 a{ + display: block; + margin-bottom: 30px; + width: 514px; + text-decoration: none; + color: #696969; +} + +#posts .n-comments{ + display: block; + position: absolute; + top:0; + right:0px; + width: 57px; + height: 41px; + color: #fff; + text-align: center; + line-height: 32px; + background: url(../img/balloon.png) no-repeat; +} + + +#posts.single .post .n-comments{ + position: static; +} + +.post .thumb-shadow{ + background: url(../img/shadow-blog.png) no-repeat 0px 270px; +} + +#posts .post .post-thumbnail{ + position: relative; + overflow: hidden; + width: 596px; + height: 270px; + margin-bottom: 30px; + background: #f1f1f1; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + + +#posts .post .post-thumbnail .cover{ + position: absolute; + top:0px; + left: 0px; +} + +#posts .post .the-excerpt{ + padding-bottom: 30px; + background: url(../img/post-divider.png) center bottom no-repeat; +} + +#posts .post .post-thumbnail .meta{ + display: block; + width: 252px; + height: 207px; + font-size: 12px; + line-height: 2em; + position: absolute; + top:30px; + left: 30px; +} + +#posts.single .post .meta{ + display: block; + background: #f1f1f1; + padding: 20px; + border-color: #e7e6e6 #ececec #ececec #ececec; + border-width: 3px 1px 1px 1px; + border-style: solid; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#posts .post .read-more{ + display: block; + position: absolute; + top: 325px; + left: 257px; + background: #363636 ; + line-height: 33px; + padding: 0px 14px 0px 14px; + text-decoration: none; + color: #f1f1f1; + opacity: 0; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + -webkit-box-shadow: 0px 2px 3px #000; + -moz-box-shadow: 0px 2px 3px #000; + box-shadow: 0px 2px 3px #000; +} + +#posts .post .read-more:hover{ + background: #000; +} + +#posts .post:hover .read-more{ + opacity: 1; +} + +#posts .post .meta a{ + text-decoration: none; +} + +#posts .post .meta-tags{ + overflow: hidden; +} + +#posts .post .meta-tags a{ + float: left; + font-size: 12px; + line-height: 14px; + color: #f1f1f1; + background: #696969; + padding: 3px 10px; + margin-right: 5px; + margin-bottom: 5px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#posts .post .meta-tags a:hover{ + background: #000; +} + +/* COMMENTS-BLOCK ------------------------------------------------------------*/ + + + +#comments-block .n-comments{ + left:0px; +} + +#comments-block .n-comments{ + left:0px; +} + +#comments-block .n-comments-text{ + display: block; + position: absolute; + top: 4px; + left:68px; + font-family: 'Ubuntu', arial, serif; + font-size: 28px; +} + +/* COMMENTSLIST ------------------------------------------------------------*/ + +.commentlist{ + display: block; +} + +.commentlist li{ + display: block; + margin-bottom: 0px; + padding: 10px 10px 10px 0px; + line-height: 1.5em; +} + +.commentlist ul{ + padding-left: 40px; + border-left: 1px dashed #ccc; +} + +.commentlist li .comment-body{ + overflow: hidden; + position: relative; + padding: 0px 0px 20px 0px; +} + + +.commentlist li img{ + display: block; + float: left; + margin: 0px 12px 20px 0px; +} + +.commentlist .meta-date{ + display: block; + float: right; +} + +#content .commentlist .reply a{ + display: block; + text-decoration: none; + float: right; + padding: 2px 8px; + background: #ccc; + color: #f1f1f1; + font-size: 12px; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +/* COMMENTS PAGINATION ------------------------------------------------------------*/ + +#content .comments-pagination { + clear:both; + overflow: hidden; + padding:20px 0; + position:relative; + font-size:11px; + line-height:13px; + margin-bottom: 10px; +} + +#content .comments-pagination span, +#content .comments-pagination a { + display:block; + float:left; + margin: 2px 4px 2px 0; + padding:6px 9px 5px 9px; + text-decoration:none; + width:auto; + color:#fff; + background: #555; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content .comments-pagination a:hover{ + color:#fff; + background: #000000; +} + +#content .comments-pagination .current{ + padding:6px 9px 5px 9px; + background: #000000; + color:#fff; +} + +/* LEAVE COMMENT --------------------------------------------------------*/ + +.leave-comment{ + margin-top: 20px; + padding-top:30px; + background: url(../img/post-divider-inverted.png) no-repeat; +} + +.leave-comment h2{ + margin-bottom: 20px; +} + +/* CONTACT --------------------------------------------------------*/ + +.one-column{ + width: 438px; + float: left; + margin-left: 30px; +} + +/* FORMS ------------------------------------------------------------*/ + +#BrowseForm{ + margin-bottom: 15px; +} + +#BrowseForm input, +#BrowseForm select, +#BrowseForm textarea, +#LoginForm1 input, +#LoginForm1 select, +#LoginForm1 textarea, +#LoginForm2 input, +#LoginForm2 select, +#LoginForm2 textarea{ + background: #fff; + border: 1px solid #ccc; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + color: #606060; + font-size: 14px; + padding: 5px 10px; +} + +#LoginForm1 input, +#LoginForm1 select, +#LoginForm2 input, +#LoginForm2 select{ + width: 282px; +} + +#LoginForm2 input, +#LoginForm2 select{ + position: absolute; + left: 150px; +} + +#LoginForm1 textarea, +#LoginForm2 textarea{ + width: 380px; +} + +#LoginForm1 #LoginButton1, +#LoginForm2 #LoginButton2{ + background: #ffd800; + color: #363636; + margin: 20px 2px; + padding: 10px 15px; + width: 100px; +} + +#LogoutButton{ + background: #ffd800; + color: #363636; + margin: 2px 2px; + padding: 5px 15px; + width: 100px; +} + +#BrowseForm #smallbutton{ + background: #ffd800; + color: #363636; + padding: 1px 3px; +} + +#LoginForm1 #LoginButton1:hover, +#LoginForm2 #LoginButton2:hover, +#BrowseForm #smallbutton:hover{ + background: #363636; + color: #FFF; +} + +#LoginForm1 #LoginButton1:active, +#LoginForm2 #LoginButton2:active, +#BrowseForm #smallbutton:active{ + background: #000; + color: #FFF; +} + +#LoginForm1 label, +#LoginForm2 label{ + font-size: 14px; + line-height: 2.5em; + font-weight: light; +} + +#LoginForm1 label{ + display: block; +} + +table, tr, td{ + margin: 10px; + padding: 0px; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +.browse_rows_actions { + background-color: #f2f1f1; + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + +.browse_rows_heading { + background-color: #f2f1f1; + color: #000000; + font-size: 100%; + font-weight: bold; +} + +.browse_rows_odd, .browse_rows_even { + color: #000000; + font-size: 80%; + font-weight: normal; + text-align: ; +} + + +/* PAGER ------------------------------------------------------------*/ + +.pager{ + padding-top: 0px; + overflow: hidden; + display: block; + height: 33px; + margin-top: 20px; + margin-left: 30px; + margin-bottom: 20px; +} + +.pager li{ + display: block; + width: 33px; + height: 33px; + margin-right: 8px; + float: left; +} + +#content .pager li a{ + display: block; + width: 100%; + height: 100%; + line-height: 33px; + text-align: center; + text-decoration: none; + color: #ffd800; + background: #363636; + border-radius: 15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; +} + +#content .pager li:hover a, +#content .pager li.active a{ + color: #363636; + background: #ffd800; +} + +/* SIDEBAR ------------------------------------------------------------*/ + +#sidebar{ + float: left; + width: 282px; + margin-left: 30px; +} + +#sidebar>li{ + margin-bottom: 20px; +} + +#sidebar>li h6{ + padding-bottom: 20px; +} + +#sidebar ul>li{ + line-height: 40px; + text-decoration: none; + border-bottom: 1px solid #d7d7d7; +} + +#sidebar ul>li:last-child{ border-bottom: none; } + +#sidebar ul>li a{ + display: block; + height: 100%; + width: 100%; + text-decoration: none; + color: #696969; +} + +#sidebar ul>li:hover{ + background: #f1f1f1; +} + +/* FOOTER - COLS ------------------------------------------------------------*/ + +#footer-cols{ + display: block; + overflow: hidden; + color: #bbbaba; + line-height: 1.5em; + margin-top: 40px; +} + +#footer-cols li.col{ + display: block; + width: 282px; + float: left; + margin-left: 30px; + margin-bottom: 30px; +} + +#footer-cols li.col>h6{ + color: #d7d7d7; + margin-bottom: 30px; + text-shadow: -2px -1px rgba(0, 0, 0, .8); +} + +#footer-cols li.clear-col{ clear:left; } + +#footer-cols li.col ul{ + display: block; +} + +#footer-cols li.col ul li{ + display: block; + line-height: 35px; + border-top: 1px solid #4a4a4a; + border-bottom: 1px solid #000; +} + +#footer-cols li.col ul li:first-child{ border-top: none; } + +#footer-cols li.col ul li:last-child{ border-bottom: none; } + +#footer-cols li.col ul li a{ + text-decoration: none; + color: #bbbaba; +} + +#footer-cols li.col ul li a:hover{ + color: #fff; +} + +/* FOOTER BOTTOM --------------------------------------------------------*/ + +#footer #bottom{ + position: relative; + width: 100%; + font-size: 12px; + line-height: 1.5em; + line-height: 80px; + text-align: center; + color: #868686; + background: url(../img/bottom-shadow.png) repeat-x; +} + +#footer #bottom a{ + color: #ffd800; + text-decoration: none; +} + +#footer #bottom #to-top{ + position: absolute; + right: 30px; + top: 26px; + width: 33px; + height: 33px; + background: url(../img/to-top.png) no-repeat; + cursor: pointer; +} diff --git a/ehcp/net2ftp/skins/shinra/css/styled-elements.css b/ehcp/net2ftp/skins/shinra/css/styled-elements.css new file mode 100644 index 0000000..79a95cd --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/styled-elements.css @@ -0,0 +1,467 @@ + +/* TOGGLE & ACCORDION ------------------------------------------------------------*/ + +.ui-accordion .ui-accordion-header, +.toggle-trigger { + cursor: pointer; + margin-top: 1px; + position: relative; + padding-bottom: 5px; + background: #f1f1f1; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +.ui-accordion .ui-accordion-header:hover, +.toggle-trigger:hover { + background: #eceaea; +} + +#content .ui-accordion .ui-accordion-header>a, +#content .toggle-trigger>a{ + text-decoration: none; + color: #363636; + font-size: 14px; + padding-left: 20px; +} + +.ui-accordion .ui-accordion-content, +.toggle-container { + border-top: 0 none; + margin-bottom: 2px; + padding: 20px 20px; + position: relative; + top: 1px; +} + +/* ALIGNMENT ------------------------------------------------------------*/ + +.left-align{ + float:left; + margin:8px 18px 18px 0; + display: block; +} + +.right-align{ + float:right; + margin:0px 0px 0px 10px; + display: block; +} + +/* BLOCKS ------------------------------------------------------------*/ + +.boxed{ + background: white; + padding: 5px; + border: 1px solid #cccccc; +} + +.border{ + border: 2px solid white; +} + +/* DROPCAP ------------------------------------------------------------*/ + +.dropcap:first-letter{ + font-size: 3.571em; + line-height: 0.76em; + padding: 0.04em 0.12em 0 0; + float: left; +} + +.dropcap.dark:first-letter{ + display:block; + float:left; + font-size:30px; + line-height:40px; + margin:0 8px 0 0; + padding: 10px 10px; + background: #606060; + color: #fff; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + +} + +/* HIGHLIGHT ------------------------------------------------------------*/ + +.highlight, +.highlight-red, +.highlight-blue, +.highlight-green { + background:yellow; + padding:2px 5px; +} + +.highlight-red{ + background: red; + color:#fff; +} + +.highlight-blue{ + background: blue; + color:#fff; +} + +.highlight-green{ + background: green; + color:#fff; +} + +/* PULLQUOTES ------------------------------------------------------------*/ + +.pullquote-right, +.pullquote-left { + border-left: #555555 2px solid; + float:right; + font-size:16px; + line-height:1.5em; + margin: 20px 0px 20px 20px; + width:33%; + font-style: italic; +} + +.pullquote-left { + float:left; + margin: 20px 20px 20px 0px; + padding:0 0 0 20px; +} + +.pullquote-right{ + border-left: none; + border-right: #555555 2px solid; + padding:0 20px 0 0px; +} + +/* LINK BUTTON -------------------------------------------------------*/ + +#content a.link-button, +#content a.link-button-light{ + display: table; + background: #363636; + color: #f1f1f1; + text-decoration: none; + padding: 3px 10px; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#content a.link-button-light{ + background: #f1f1f1; + color: #363636; +} + +#content a.link-button:hover{ background: #000000; } + +#content a.link-button-light:hover{ background: #cecece; } + +/* TABLE ------------------------------------------------------------*/ + +table, td, th { + vertical-align:middle; +} + +table { + border-collapse:separate; + border-spacing:0; + border-top:1px solid white; + margin-bottom:28px; + width:100%; + text-align: left; +} + +th{ + border-top:5px solid #555555; + color: #ffffff; + padding:10px; + text-transform:uppercase; + background-color: #49494b; +} + +td{ + padding:10px; +} + +td, th{ + border-bottom: 1px solid #1f1f1f; +} + +/* LISTS ------------------------------------------------------------*/ + + +.lists-check ul, +.lists-arrow ul, +.lists-plus ul, +.lists-star ul, +.lists-heart ul{ + margin-bottom: 30px; + margin-left: 20px; +} + + +.lists-check ul li{ + list-style-image: url(../img/bullets/check.png); + line-height: 1.5em; +} + +.lists-arrow ul{ + list-style-image: url(../img/bullets/arrow.png); + line-height: 1.5em; +} + +.lists-plus ul{ + list-style-image: url(../img/bullets/plus.png); + line-height: 1.5em; +} + +.lists-star ul{ + list-style-image: url(../img/bullets/star.png); + line-height: 1.5em; +} + +.lists-heart ul{ + list-style-image: url(../img/bullets/heart.png); + line-height: 1.5em; +} + + +/* INFO BOXES ------------------------------------------------------------*/ + +.info-add, +.warning-box, +.blue-box, +.error-box, +.download-box, +.favorite-box, +.information-box, +.success-box, +.validation-box, +.fastforward-box, +.rewind-box, +.right-box, +.graphite-box, +.green-box, +.gray-box, +.help-box, +.left-box, +.loop-box, +.message-box, +.orange-box, +.pause-box, +.play-box, +.record-box, +.red-box, +.refresh-box, +.remove-box, +.search-box, +.shuffle-box, +.smart-box, +.back-box, +.forward-box, +.stop-box, +.upload-box +{ + border: 1px solid; + margin: 10px 0px; + padding:15px 10px 15px 50px; + background-repeat: no-repeat; + background-position: 10px center; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.info-add{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Add.png'); +} + +.warning-box{ + color: #9F6000; + background-color: #FEEFB3; + background-image: url('../img/knobs-icons/Knob Attention.png'); +} + +.blue-box{ + color: #00529B; + background-color: #BDE5F8; + background-image: url('../img/knobs-icons/Knob Blue.png'); +} + +.error-box{ + color: #D8000C; + background-color: #FFBABA; + background-image: url('../img/knobs-icons/Knob Cancel.png'); +} + +.download-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Download.png'); +} + +.favorite-box{ + color: #9F6000; + background-color: #FEEFB3; + background-image: url('../img/knobs-icons/Knob Favorite.png'); +} + +.information-box{ + color: #00529B; + background-color: #BDE5F8; + background-image: url('../img/knobs-icons/Knob Info.png'); +} + +.success-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Valid Green.png'); +} + +.fastforward-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Fast Forward.png'); +} + +.rewind-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Fast Rewind.png'); +} + +.right-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Forward.png'); +} + +.graphite-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Graphite.png'); +} + +.green-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Green.png'); +} + +.gray-box{ + color: #fff; + background-color: #999999; + background-image: url('../img/knobs-icons/Knob Grey.png'); +} + +.help-box{ + color: #fff; + background-color: #b47bc4; + background-image: url('../img/knobs-icons/Knob Help.png'); +} + +.left-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Left.png'); +} + +.loop-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Loop Off.png'); +} + +.message-box{ + color: #00529B; + background-color: #BDE5F8; + background-image: url('../img/knobs-icons/Knob Message.png'); +} + +.orange-box{ + color: #9F6000; + background-color: #FEEFB3; + background-image: url('../img/knobs-icons/Knob Orange.png'); +} + +.pause-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Pause.png'); +} + +.play-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Play.png'); +} + +.record-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Record Off.png'); +} + +.red-box{ + color: #D8000C; + background-color: #FFBABA; + background-image: url('../img/knobs-icons/Knob Red.png'); +} + +.refresh-box{ + color: #4F8A10; + background-color: #DFF2BF; + background-image: url('../img/knobs-icons/Knob Refresh.png'); +} + +.remove-box{ + color: #D8000C; + background-color: #FFBABA; + background-image: url('../img/knobs-icons/Knob Remove Red.png'); +} + +.search-box{ + color: #00529B; + background-color: #BDE5F8; + background-image: url('../img/knobs-icons/Knob Search.png'); +} + +.shuffle-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Shuffle Off.png'); +} + +.smart-box{ + color: #fff; + background-color: #b47bc4; + background-image: url('../img/knobs-icons/Knob Smart.png'); +} + +.back-box{ + color: #9F6000; + background-color: #FEEFB3; + background-image: url('../img/knobs-icons/Knob Snapback.png'); +} + +.forward-box{ + color: #9F6000; + background-color: #FEEFB3; + background-image: url('../img/knobs-icons/Knob Snapforward.png'); +} + +.stop-box{ + color: #ffffff; + background-color: #57737f; + background-image: url('../img/knobs-icons/Knob Stop.png'); +} + +.upload-box{ + color: #00529B; + background-color: #BDE5F8; + background-image: url('../img/knobs-icons/Knob Upload.png'); +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/css/superfish.css b/ehcp/net2ftp/skins/shinra/css/superfish.css new file mode 100644 index 0000000..99ce8a8 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/superfish.css @@ -0,0 +1,61 @@ +/*** ESSENTIAL STYLES ***/ + +.sf-menu, .sf-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.sf-menu { + line-height: 1.0; +} +.sf-menu ul { + position: absolute; + top: -999em; + width: 10em; /* left offset of submenus need to match (see below) */ +} +.sf-menu ul li { + width: 100%; +} +.sf-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.sf-menu li { + float: left; + position: relative; +} +.sf-menu a { + display: block; + position: relative; +} +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ + z-index: 99; +} +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + + + + + + + + diff --git a/ehcp/net2ftp/skins/shinra/css/tabs.css b/ehcp/net2ftp/skins/shinra/css/tabs.css new file mode 100644 index 0000000..673a261 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/css/tabs.css @@ -0,0 +1,130 @@ +/* root element for tabs */ +.tabs { + list-style:none; + margin:0 !important; + padding:11px 0px 20px 0px; + height:46px; +} + +body.home ul.tabs { + list-style:none; + margin:0 !important; + padding:11px 30px 0px 30px; + height:30px; +} + + + +/* single tab */ +ul.tabs li { + float:left; + text-indent:0; + padding:0; + margin:0 !important; + list-style-image: none !important; +} + +/* link inside the tab. uses a background image */ +ul.tabs a { + color: #c8c8c8; + font-size:14px; + display:block; + height: 30px; + line-height:30px; + text-align:center; + text-decoration:none; + padding: 3px 15px; + margin:0px; + margin-right: 10px; + position:relative; + top:1px; + background: #363636; + border-radius: 10px; + -moz-border-radius: 20px; + -webkit-border-radius: 10px; +} + +#content ul.tabs a{ + color: #c8c8c8; +} + +ul.tabs a:active { + outline:none; +} + +/* when mouse enters the tab move the background image */ +#content ul.tabs a:hover { background: #000000; color: #fff; } + +/* active tab uses a class name "current". its highlight is also done by moving the background image. */ +ul.tabs a.current, +#content ul.tabs a.current:hover, +ul.tabs li.current a { + cursor:default !important; + color:#363636 !important; + display: block; + background: #ffd800; +} + +/* initially all panes are hidden */ +.panes .pane { + display:none; +} + +.panes>div { + display: none; + min-height: 200px; + +} + +/* HOME TABS THUMBS ---------------------------------------------------------*/ + +.panes .blocks-thumbs{ + overflow: hidden; + padding-top: 30px; +} + +.panes .blocks-thumbs li{ + display: block; + overflow: hidden; + float: left; + width: 282px; + height: 315px; + margin: 0px 0px 30px 30px; + background: url(../img/shadow-1-3.png) no-repeat 0px 150px; +} + +#content .panes .blocks-thumbs li .header{ + font-size: 20px; + margin-bottom: 20px; + text-decoration: none; + color: #696969; +} + +.panes .blocks-thumbs li a.thumb{ + display: block; + overflow: hidden; + width: 282px; + height: 150px; + margin-bottom: 20px; + background: url(../img/plus-sign.png) no-repeat center center; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +.panes .blocks-thumbs li a{ display: block; text-decoration: none; } + +/* HOME TABS GALLERY ---------------------------------------------------------*/ + +.panes{ + margin-top: 30px; + background: url(../img/front-divider.png) no-repeat top center; +} + +.panes .plain-text{ + padding: 30px 30px; +} + +.panes .plain-text a{ + text-decoration: none; +} diff --git a/ehcp/net2ftp/skins/shinra/edit.template.php b/ehcp/net2ftp/skins/shinra/edit.template.php new file mode 100644 index 0000000..d84f44d --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/edit.template.php @@ -0,0 +1,73 @@ + + +
        " method="post"> + + + +" /> + + + + + + + + + + + +
        ; width: 25%;"> + +   + +   + + ; width: 50%;"> + + " /> +
        + + Toggle header   Toggle body   Toggle footer + +
        + + +   + +
        ; width: 25%;"> + +
        ;"> +
        : 0px; text-align: ;"> + + + + + +
        + + +
        +
        + + + + + +
        + + +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/shinra/error.template.php b/ehcp/net2ftp/skins/shinra/error.template.php new file mode 100644 index 0000000..3ff5b17 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/error.template.php @@ -0,0 +1,46 @@ + + + + + + +
        + + +
        + +

        + + +

        + +

        +
        + or /index.php?state=clearcookies">


        +

        + + +
        +
        + + + + diff --git a/ehcp/net2ftp/skins/shinra/error_wrapped.template.php b/ehcp/net2ftp/skins/shinra/error_wrapped.template.php new file mode 100644 index 0000000..12e7d53 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/error_wrapped.template.php @@ -0,0 +1,31 @@ + + +" dir=""> + +" /> + + + +net2ftp - a web based FTP client +\n"; ?> + + +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/findstring1.template.php b/ehcp/net2ftp/skins/shinra/findstring1.template.php new file mode 100644 index 0000000..42ae49f --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/findstring1.template.php @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + +
          (wildcard character is *)
          Bytes
         
        + + + + diff --git a/ehcp/net2ftp/skins/shinra/findstring2.template.php b/ehcp/net2ftp/skins/shinra/findstring2.template.php new file mode 100644 index 0000000..b2314b0 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/findstring2.template.php @@ -0,0 +1,39 @@ + + + + + + + + +
        + + +
        + +
        + + + + + + + + + + + + + + + + + +
        ', '', 'view', '', 1);" title="" style="cursor: pointer; cursor: hand;">', '', 'edit', '', 1);" title="" style="cursor: pointer; cursor: hand;">
        + + diff --git a/ehcp/net2ftp/skins/shinra/footer.template.php b/ehcp/net2ftp/skins/shinra/footer.template.php new file mode 100644 index 0000000..2b79030 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/footer.template.php @@ -0,0 +1,174 @@ + + + +
        + + +
        + + + + + + +
        + + + \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/footer_versioncheck.template.php b/ehcp/net2ftp/skins/shinra/footer_versioncheck.template.php new file mode 100644 index 0000000..82caf5b --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/footer_versioncheck.template.php @@ -0,0 +1,32 @@ + + + + + + +
        + /help.html"> | | /LICENSE.txt">

        + + net2ftp - a web based FTP client

        + + + + Get Firefox!

        +
        + + diff --git a/ehcp/net2ftp/skins/shinra/google_ad_bottom.template.php b/ehcp/net2ftp/skins/shinra/google_ad_bottom.template.php new file mode 100644 index 0000000..9721fa5 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/google_ad_bottom.template.php @@ -0,0 +1,18 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/shinra/google_ad_top.template.php b/ehcp/net2ftp/skins/shinra/google_ad_top.template.php new file mode 100644 index 0000000..f25bec4 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/google_ad_top.template.php @@ -0,0 +1,18 @@ + + + +
        + + +
        + + diff --git a/ehcp/net2ftp/skins/shinra/header.template.php b/ehcp/net2ftp/skins/shinra/header.template.php new file mode 100644 index 0000000..36daf2b --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/header.template.php @@ -0,0 +1,44 @@ + + + + +
        + + + + + + +
        + + +
        + + +
        + +
        +
        "> + + + + " /> + " /> + " /> + " /> + + + + +
        +
        +
        + + + diff --git a/ehcp/net2ftp/skins/shinra/images/actions/back.png b/ehcp/net2ftp/skins/shinra/images/actions/back.png new file mode 100644 index 0000000..2568b59 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/back.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/bookmark.png b/ehcp/net2ftp/skins/shinra/images/actions/bookmark.png new file mode 100644 index 0000000..6cccfd9 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/bookmark.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/button_cancel.png b/ehcp/net2ftp/skins/shinra/images/actions/button_cancel.png new file mode 100644 index 0000000..2d5e260 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/button_cancel.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/button_ok.png b/ehcp/net2ftp/skins/shinra/images/actions/button_ok.png new file mode 100644 index 0000000..592ce6f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/button_ok.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/exit.png b/ehcp/net2ftp/skins/shinra/images/actions/exit.png new file mode 100644 index 0000000..08e97b4 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/exit.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/filesave.png b/ehcp/net2ftp/skins/shinra/images/actions/filesave.png new file mode 100644 index 0000000..ae13a15 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/filesave.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/forward.png b/ehcp/net2ftp/skins/shinra/images/actions/forward.png new file mode 100644 index 0000000..3453bde Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/forward.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/info.png b/ehcp/net2ftp/skins/shinra/images/actions/info.png new file mode 100644 index 0000000..d56ba2c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/info.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/reload.png b/ehcp/net2ftp/skins/shinra/images/actions/reload.png new file mode 100644 index 0000000..4b0e37a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/reload.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/spacer.gif b/ehcp/net2ftp/skins/shinra/images/actions/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/spacer.gif differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/up.png b/ehcp/net2ftp/skins/shinra/images/actions/up.png new file mode 100644 index 0000000..899ad4f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/up.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/view_detailed.png b/ehcp/net2ftp/skins/shinra/images/actions/view_detailed.png new file mode 100644 index 0000000..8c315cf Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/view_detailed.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/view_icon.png b/ehcp/net2ftp/skins/shinra/images/actions/view_icon.png new file mode 100644 index 0000000..2b5d655 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/view_icon.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/actions/view_tree.png b/ehcp/net2ftp/skins/shinra/images/actions/view_tree.png new file mode 100644 index 0000000..b896d17 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/actions/view_tree.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/license.txt b/ehcp/net2ftp/skins/shinra/images/license.txt new file mode 100644 index 0000000..fd74a47 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/images/license.txt @@ -0,0 +1,13 @@ + +The images within this directory are released under the LGPL license. +They come from 2 different iconsets, originally developed for KDE. + +For more information, refer to the links below. + +Noia for KDE 1.00: +http://www.kde-look.org/content/show.php?content=3883 +http://www.carlitus.net/ + +Nuvola 1.0: +http://www.kde-look.org/content/show.php?content=5358 +http://www.icon-king.com/ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/acroread.png b/ehcp/net2ftp/skins/shinra/images/mime/acroread.png new file mode 100644 index 0000000..b50f4a7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/acroread.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/aktion.png b/ehcp/net2ftp/skins/shinra/images/mime/aktion.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/aktion.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/ark.png b/ehcp/net2ftp/skins/shinra/images/mime/ark.png new file mode 100644 index 0000000..e2b67dc Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/ark.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/arts.png b/ehcp/net2ftp/skins/shinra/images/mime/arts.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/arts.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/ascend.png b/ehcp/net2ftp/skins/shinra/images/mime/ascend.png new file mode 100644 index 0000000..dfad497 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/ascend.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/browser.png b/ehcp/net2ftp/skins/shinra/images/mime/browser.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/browser.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/colors.png b/ehcp/net2ftp/skins/shinra/images/mime/colors.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/colors.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/cookie.png b/ehcp/net2ftp/skins/shinra/images/mime/cookie.png new file mode 100644 index 0000000..5c1ca3c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/cookie.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/descend.png b/ehcp/net2ftp/skins/shinra/images/mime/descend.png new file mode 100644 index 0000000..a4f8e50 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/descend.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/document.png b/ehcp/net2ftp/skins/shinra/images/mime/document.png new file mode 100644 index 0000000..24c9c57 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/document.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/exec.png b/ehcp/net2ftp/skins/shinra/images/mime/exec.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/exec.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/folder.png b/ehcp/net2ftp/skins/shinra/images/mime/folder.png new file mode 100644 index 0000000..9232553 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/folder.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/folder_grey.png b/ehcp/net2ftp/skins/shinra/images/mime/folder_grey.png new file mode 100644 index 0000000..22d0f41 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/folder_grey.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/fonts.png b/ehcp/net2ftp/skins/shinra/images/mime/fonts.png new file mode 100644 index 0000000..3aab3bd Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/fonts.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/gimp.png b/ehcp/net2ftp/skins/shinra/images/mime/gimp.png new file mode 100644 index 0000000..5078540 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/gimp.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/html.png b/ehcp/net2ftp/skins/shinra/images/mime/html.png new file mode 100644 index 0000000..03ef9a5 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/html.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/java.png b/ehcp/net2ftp/skins/shinra/images/mime/java.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/java.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/java_jar.png b/ehcp/net2ftp/skins/shinra/images/mime/java_jar.png new file mode 100644 index 0000000..568bffa Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/java_jar.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/kservices.png b/ehcp/net2ftp/skins/shinra/images/mime/kservices.png new file mode 100644 index 0000000..11b9177 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/kservices.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/mime.png b/ehcp/net2ftp/skins/shinra/images/mime/mime.png new file mode 100644 index 0000000..55ace49 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/mime.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/ooo_gulls.png b/ehcp/net2ftp/skins/shinra/images/mime/ooo_gulls.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/ooo_gulls.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/openoffice.png b/ehcp/net2ftp/skins/shinra/images/mime/openoffice.png new file mode 100644 index 0000000..d0d5abc Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/openoffice.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/package_graphics.png b/ehcp/net2ftp/skins/shinra/images/mime/package_graphics.png new file mode 100644 index 0000000..2382100 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/package_graphics.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/php.png b/ehcp/net2ftp/skins/shinra/images/mime/php.png new file mode 100644 index 0000000..6217a79 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/php.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/quicktime.png b/ehcp/net2ftp/skins/shinra/images/mime/quicktime.png new file mode 100644 index 0000000..f0bc57a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/quicktime.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/realplayer.png b/ehcp/net2ftp/skins/shinra/images/mime/realplayer.png new file mode 100644 index 0000000..07b1e86 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/realplayer.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/rpm.png b/ehcp/net2ftp/skins/shinra/images/mime/rpm.png new file mode 100644 index 0000000..a584ce1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/rpm.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/sound.png b/ehcp/net2ftp/skins/shinra/images/mime/sound.png new file mode 100644 index 0000000..f88632d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/sound.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/spacer.gif b/ehcp/net2ftp/skins/shinra/images/mime/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/spacer.gif differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/stylesheet.png b/ehcp/net2ftp/skins/shinra/images/mime/stylesheet.png new file mode 100644 index 0000000..f7f9057 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/stylesheet.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/tar.png b/ehcp/net2ftp/skins/shinra/images/mime/tar.png new file mode 100644 index 0000000..184f959 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/tar.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/terminal.png b/ehcp/net2ftp/skins/shinra/images/mime/terminal.png new file mode 100644 index 0000000..75ce701 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/terminal.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/tgz.png b/ehcp/net2ftp/skins/shinra/images/mime/tgz.png new file mode 100644 index 0000000..4a9fe17 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/tgz.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/video.png b/ehcp/net2ftp/skins/shinra/images/mime/video.png new file mode 100644 index 0000000..e616061 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/video.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/mime/www.png b/ehcp/net2ftp/skins/shinra/images/mime/www.png new file mode 100644 index 0000000..2d32c04 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/mime/www.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/settings/spacer.gif b/ehcp/net2ftp/skins/shinra/images/settings/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/settings/spacer.gif differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/aktion.png b/ehcp/net2ftp/skins/shinra/images/titles/aktion.png new file mode 100644 index 0000000..59a8b19 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/aktion.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/ark.png b/ehcp/net2ftp/skins/shinra/images/titles/ark.png new file mode 100644 index 0000000..3393d26 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/ark.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/bookmark.png b/ehcp/net2ftp/skins/shinra/images/titles/bookmark.png new file mode 100644 index 0000000..dcadad7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/bookmark.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/cache.png b/ehcp/net2ftp/skins/shinra/images/titles/cache.png new file mode 100644 index 0000000..321e824 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/cache.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/colorize.png b/ehcp/net2ftp/skins/shinra/images/titles/colorize.png new file mode 100644 index 0000000..61a6f63 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/colorize.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/editcopy.png b/ehcp/net2ftp/skins/shinra/images/titles/editcopy.png new file mode 100644 index 0000000..a04d2f7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/editcopy.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/editcut.png b/ehcp/net2ftp/skins/shinra/images/titles/editcut.png new file mode 100644 index 0000000..a1b20f4 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/editcut.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/edittrash.png b/ehcp/net2ftp/skins/shinra/images/titles/edittrash.png new file mode 100644 index 0000000..906608f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/edittrash.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/folder_new.png b/ehcp/net2ftp/skins/shinra/images/titles/folder_new.png new file mode 100644 index 0000000..309a646 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/folder_new.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/folder_txt.png b/ehcp/net2ftp/skins/shinra/images/titles/folder_txt.png new file mode 100644 index 0000000..e02294a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/folder_txt.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/kcontrol.png b/ehcp/net2ftp/skins/shinra/images/titles/kcontrol.png new file mode 100644 index 0000000..a359543 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/kcontrol.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/kgpg_identity.png b/ehcp/net2ftp/skins/shinra/images/titles/kgpg_identity.png new file mode 100644 index 0000000..681ed2d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/kgpg_identity.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/kgpg_info.png b/ehcp/net2ftp/skins/shinra/images/titles/kgpg_info.png new file mode 100644 index 0000000..4fa7e01 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/kgpg_info.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/konquest.png b/ehcp/net2ftp/skins/shinra/images/titles/konquest.png new file mode 100644 index 0000000..4f7a636 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/konquest.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/messagebox_warning.png b/ehcp/net2ftp/skins/shinra/images/titles/messagebox_warning.png new file mode 100644 index 0000000..b11a7b6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/messagebox_warning.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/misc.png b/ehcp/net2ftp/skins/shinra/images/titles/misc.png new file mode 100644 index 0000000..0c17cd9 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/misc.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/openterm.png b/ehcp/net2ftp/skins/shinra/images/titles/openterm.png new file mode 100644 index 0000000..254c976 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/openterm.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/package_editors.png b/ehcp/net2ftp/skins/shinra/images/titles/package_editors.png new file mode 100644 index 0000000..a3b76ba Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/package_editors.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/spacer.gif b/ehcp/net2ftp/skins/shinra/images/titles/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/spacer.gif differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/terminal.png b/ehcp/net2ftp/skins/shinra/images/titles/terminal.png new file mode 100644 index 0000000..c7bdedf Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/terminal.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/thumbnail.png b/ehcp/net2ftp/skins/shinra/images/titles/thumbnail.png new file mode 100644 index 0000000..bcc1681 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/thumbnail.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/view_left_right.png b/ehcp/net2ftp/skins/shinra/images/titles/view_left_right.png new file mode 100644 index 0000000..5d337c6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/view_left_right.png differ diff --git a/ehcp/net2ftp/skins/shinra/images/titles/viewmag.png b/ehcp/net2ftp/skins/shinra/images/titles/viewmag.png new file mode 100644 index 0000000..848275d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/images/titles/viewmag.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/balloon.png b/ehcp/net2ftp/skins/shinra/img/balloon.png new file mode 100644 index 0000000..fbafded Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/balloon.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bg/patterns/obl-1x1.png b/ehcp/net2ftp/skins/shinra/img/bg/patterns/obl-1x1.png new file mode 100644 index 0000000..92b8ce5 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bg/patterns/obl-1x1.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bottom-shadow.png b/ehcp/net2ftp/skins/shinra/img/bottom-shadow.png new file mode 100644 index 0000000..d4272c6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bottom-shadow.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/breadcrumb-slash.png b/ehcp/net2ftp/skins/shinra/img/breadcrumb-slash.png new file mode 100644 index 0000000..c7f38f1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/breadcrumb-slash.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bullets/arrow.png b/ehcp/net2ftp/skins/shinra/img/bullets/arrow.png new file mode 100644 index 0000000..49fa15b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bullets/arrow.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bullets/check.png b/ehcp/net2ftp/skins/shinra/img/bullets/check.png new file mode 100644 index 0000000..2b89e90 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bullets/check.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bullets/heart.png b/ehcp/net2ftp/skins/shinra/img/bullets/heart.png new file mode 100644 index 0000000..84058bf Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bullets/heart.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bullets/plus.png b/ehcp/net2ftp/skins/shinra/img/bullets/plus.png new file mode 100644 index 0000000..b5c2787 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bullets/plus.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/bullets/star.png b/ehcp/net2ftp/skins/shinra/img/bullets/star.png new file mode 100644 index 0000000..b60f004 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/bullets/star.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/front-divider.png b/ehcp/net2ftp/skins/shinra/img/front-divider.png new file mode 100644 index 0000000..71f2291 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/front-divider.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Add.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Add.png new file mode 100644 index 0000000..36e8a08 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Add.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Attention.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Attention.png new file mode 100644 index 0000000..1c6b8eb Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Attention.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Blue.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Blue.png new file mode 100644 index 0000000..bc614ec Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Blue.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Cancel.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Cancel.png new file mode 100644 index 0000000..296415e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Cancel.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Download.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Download.png new file mode 100644 index 0000000..5e684c6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Download.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Forward.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Forward.png new file mode 100644 index 0000000..3e18aad Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Forward.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Rewind.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Rewind.png new file mode 100644 index 0000000..dcaad8d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Fast Rewind.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Favorite.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Favorite.png new file mode 100644 index 0000000..f7e9544 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Favorite.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Forward.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Forward.png new file mode 100644 index 0000000..3fe7568 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Forward.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Graphite.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Graphite.png new file mode 100644 index 0000000..428daa4 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Graphite.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Green.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Green.png new file mode 100644 index 0000000..f3a4796 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Green.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Grey.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Grey.png new file mode 100644 index 0000000..edbad22 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Grey.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Help.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Help.png new file mode 100644 index 0000000..206dbc3 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Help.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Info.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Info.png new file mode 100644 index 0000000..83de654 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Info.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Left.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Left.png new file mode 100644 index 0000000..9bab29c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Left.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop Off.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop Off.png new file mode 100644 index 0000000..4d98b97 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop Off.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop On.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop On.png new file mode 100644 index 0000000..5f983dd Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Loop On.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Message.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Message.png new file mode 100644 index 0000000..5aed843 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Message.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Orange.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Orange.png new file mode 100644 index 0000000..2706d2a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Orange.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Pause.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Pause.png new file mode 100644 index 0000000..76ba422 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Pause.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play Green.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play Green.png new file mode 100644 index 0000000..8d36e63 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play Green.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play.png new file mode 100644 index 0000000..de1a5f3 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Play.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Purple.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Purple.png new file mode 100644 index 0000000..bed9938 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Purple.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record Off.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record Off.png new file mode 100644 index 0000000..ba3a6dc Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record Off.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record On.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record On.png new file mode 100644 index 0000000..ec29b86 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Record On.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Red.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Red.png new file mode 100644 index 0000000..5a92bc5 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Red.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Refresh.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Refresh.png new file mode 100644 index 0000000..ae1f596 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Refresh.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove Red.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove Red.png new file mode 100644 index 0000000..bed8b4f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove Red.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove.png new file mode 100644 index 0000000..3819d7a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Remove.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Search.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Search.png new file mode 100644 index 0000000..bbfbdd6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Search.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle Off.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle Off.png new file mode 100644 index 0000000..3ce441a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle Off.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle On.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle On.png new file mode 100644 index 0000000..996ae97 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Shuffle On.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Smart.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Smart.png new file mode 100644 index 0000000..8ef7275 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Smart.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapback.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapback.png new file mode 100644 index 0000000..641ba0e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapback.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapforward.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapforward.png new file mode 100644 index 0000000..f8f6531 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Snapforward.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Stop.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Stop.png new file mode 100644 index 0000000..2415154 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Stop.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Upload.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Upload.png new file mode 100644 index 0000000..ef99242 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Upload.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Blue.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Blue.png new file mode 100644 index 0000000..4fe7bf2 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Blue.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Green.png b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Green.png new file mode 100644 index 0000000..743ef89 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/knobs-icons/Knob Valid Green.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/knobs-icons/license.rtf b/ehcp/net2ftp/skins/shinra/img/knobs-icons/license.rtf new file mode 100644 index 0000000..c7c4181 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/img/knobs-icons/license.rtf @@ -0,0 +1,10 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf480 +{\fonttbl\f0\froman\fcharset77 Times-Bold;\f1\froman\fcharset77 Times-Roman;} +{\colortbl;\red255\green255\blue255;\red0\green0\blue241;} +\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\deftab720 +\pard\pardeftab720\ql\qnatural + +\f0\b\fs24 \cf0 icon link: +\f1\b0 {\field{\*\fldinst{HYPERLINK "http://itweek.deviantart.com/art/Knob-Buttons-Toolbar-icons-73463960"}}{\fldrslt \cf2 \ul \ulc2 http://itweek.deviantart.com/art/Knob-Buttons-Toolbar-icons-73463960}}\ +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/img/loading.gif b/ehcp/net2ftp/skins/shinra/img/loading.gif new file mode 100644 index 0000000..02e4be8 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/loading.gif differ diff --git a/ehcp/net2ftp/skins/shinra/img/logo.png b/ehcp/net2ftp/skins/shinra/img/logo.png new file mode 100644 index 0000000..1a9a77e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/logo.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/arrow32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/arrow32.png new file mode 100644 index 0000000..9915228 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/arrow32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/arrowright32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/arrowright32.png new file mode 100644 index 0000000..598dbec Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/arrowright32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/article32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/article32.png new file mode 100644 index 0000000..804a541 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/article32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/bag32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/bag32.png new file mode 100644 index 0000000..9c5200c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/bag32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/bargraph32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/bargraph32.png new file mode 100644 index 0000000..ebcc8ed Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/bargraph32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/block32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/block32.png new file mode 100644 index 0000000..820da5c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/block32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/box32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/box32.png new file mode 100644 index 0000000..9f1845c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/box32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/boxdownload32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/boxdownload32.png new file mode 100644 index 0000000..31c3296 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/boxdownload32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/boxupload32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/boxupload32.png new file mode 100644 index 0000000..50a7a99 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/boxupload32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/camera32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/camera32.png new file mode 100644 index 0000000..ef7b1cd Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/camera32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraminus32.png new file mode 100644 index 0000000..1888b78 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraplus32.png new file mode 100644 index 0000000..80fcae4 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/cameraplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/camerastar32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/camerastar32.png new file mode 100644 index 0000000..f5a1ade Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/camerastar32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/cardgame32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/cardgame32.png new file mode 100644 index 0000000..8a6ce57 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/cardgame32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/check32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/check32.png new file mode 100644 index 0000000..ea26c59 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/check32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/circleleft32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/circleleft32.png new file mode 100644 index 0000000..2a39e7d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/circleleft32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/circleright32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/circleright32.png new file mode 100644 index 0000000..aada545 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/circleright32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/clock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/clock32.png new file mode 100644 index 0000000..10d0143 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/clock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/comment32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/comment32.png new file mode 100644 index 0000000..906b77e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/comment32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/commentblack32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/commentblack32.png new file mode 100644 index 0000000..dfab7d8 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/commentblack32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/contactbook32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/contactbook32.png new file mode 100644 index 0000000..b998442 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/contactbook32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/contactcard32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/contactcard32.png new file mode 100644 index 0000000..4311ca4 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/contactcard32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/cup32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/cup32.png new file mode 100644 index 0000000..4fa44f7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/cup32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/download32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/download32.png new file mode 100644 index 0000000..13c31ef Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/download32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/exchange32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/exchange32.png new file mode 100644 index 0000000..6ed902b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/exchange32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/folder32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/folder32.png new file mode 100644 index 0000000..f964d37 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/folder32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/folderblock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderblock32.png new file mode 100644 index 0000000..30ed22d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderblock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/folderminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderminus32.png new file mode 100644 index 0000000..b9c52f8 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/folderplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderplus32.png new file mode 100644 index 0000000..a80c1cf Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/folderplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/gear32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/gear32.png new file mode 100644 index 0000000..2b89fb3 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/gear32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/glitter32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/glitter32.png new file mode 100644 index 0000000..ea5933b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/glitter32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/heart32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/heart32.png new file mode 100644 index 0000000..33f5386 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/heart32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/home32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/home32.png new file mode 100644 index 0000000..d10a814 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/home32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/leftarrow32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/leftarrow32.png new file mode 100644 index 0000000..e3e80f0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/leftarrow32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/leftturnarrow32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/leftturnarrow32.png new file mode 100644 index 0000000..e81950b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/leftturnarrow32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/license.rtf b/ehcp/net2ftp/skins/shinra/img/mono-icons/license.rtf new file mode 100644 index 0000000..ed30208 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/img/mono-icons/license.rtf @@ -0,0 +1,10 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 +{\fonttbl\f0\froman\fcharset0 Times-Roman;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\deftab720 +\pard\pardeftab720\ql\qnatural + +\f0\fs24 \cf0 This Free Icon Pack is for use in your personal and commercial projects, and can be used without attribution. It may not be redistributed.\ +\ +http://www.tutorial9.net/downloads/108-mono-icons-huge-set-of-minimal-icons/} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/lightbulb32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/lightbulb32.png new file mode 100644 index 0000000..821e3ba Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/lightbulb32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaper32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaper32.png new file mode 100644 index 0000000..474c05d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaper32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpapercheck32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpapercheck32.png new file mode 100644 index 0000000..9b0e7ce Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpapercheck32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperlock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperlock32.png new file mode 100644 index 0000000..8ebc190 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperlock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperminus32.png new file mode 100644 index 0000000..f7e4862 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperpencil32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperpencil32.png new file mode 100644 index 0000000..c66649b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperpencil32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperplus32.png new file mode 100644 index 0000000..e6947c1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/linedpaperplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/lock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/lock32.png new file mode 100644 index 0000000..216b96e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/lock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mail32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mail32.png new file mode 100644 index 0000000..b8f86d2 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mail32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mailblock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailblock32.png new file mode 100644 index 0000000..09c90ff Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailblock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mailminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailminus32.png new file mode 100644 index 0000000..e1bf4fe Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mailopened32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailopened32.png new file mode 100644 index 0000000..b20c008 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailopened32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mailplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailplus32.png new file mode 100644 index 0000000..da61a82 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mailstar32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailstar32.png new file mode 100644 index 0000000..5fd6cef Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mailstar32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mapleleaf32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mapleleaf32.png new file mode 100644 index 0000000..9404004 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mapleleaf32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/melody32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/melody32.png new file mode 100644 index 0000000..5ce51aa Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/melody32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/minus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/minus32.png new file mode 100644 index 0000000..4f35b2d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/minus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/moneyreceipt32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/moneyreceipt32.png new file mode 100644 index 0000000..2dc81e1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/moneyreceipt32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/monitor32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/monitor32.png new file mode 100644 index 0000000..b769285 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/monitor32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/mouse32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/mouse32.png new file mode 100644 index 0000000..7ee1b18 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/mouse32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/note32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/note32.png new file mode 100644 index 0000000..88382d5 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/note32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/notecheck32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/notecheck32.png new file mode 100644 index 0000000..8339459 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/notecheck32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/notepencil32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/notepencil32.png new file mode 100644 index 0000000..7ca3572 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/notepencil32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paper32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paper32.png new file mode 100644 index 0000000..85d3149 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paper32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/papercheck32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/papercheck32.png new file mode 100644 index 0000000..a82d11f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/papercheck32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperheart32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperheart32.png new file mode 100644 index 0000000..63d687d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperheart32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperlock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperlock32.png new file mode 100644 index 0000000..7b196ef Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperlock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperminus32.png new file mode 100644 index 0000000..7ccf66c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/papermusic32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/papermusic32.png new file mode 100644 index 0000000..d59cd0e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/papermusic32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperpencil32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperpencil32.png new file mode 100644 index 0000000..a9a4af7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperpencil32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperphoto32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperphoto32.png new file mode 100644 index 0000000..32be063 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperphoto32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperplus32.png new file mode 100644 index 0000000..20b2db9 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/paperstar32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperstar32.png new file mode 100644 index 0000000..943d9b1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/paperstar32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/pencil32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/pencil32.png new file mode 100644 index 0000000..593118a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/pencil32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/pencilplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/pencilplus32.png new file mode 100644 index 0000000..8215b55 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/pencilplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/phone32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/phone32.png new file mode 100644 index 0000000..0728798 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/phone32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/phonebook32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/phonebook32.png new file mode 100644 index 0000000..1952fd0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/phonebook32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/plug32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/plug32.png new file mode 100644 index 0000000..a9a07b8 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/plug32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/plus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/plus32.png new file mode 100644 index 0000000..94d6c98 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/plus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/printer32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/printer32.png new file mode 100644 index 0000000..21a103a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/printer32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/questionbook32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/questionbook32.png new file mode 100644 index 0000000..2d518ed Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/questionbook32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/radio32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/radio32.png new file mode 100644 index 0000000..78720c0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/radio32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/recycle32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/recycle32.png new file mode 100644 index 0000000..1b39ffc Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/recycle32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/risegraph32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/risegraph32.png new file mode 100644 index 0000000..3ad4753 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/risegraph32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/rss32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/rss32.png new file mode 100644 index 0000000..196bf99 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/rss32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/scissors32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/scissors32.png new file mode 100644 index 0000000..1165f8c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/scissors32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/search32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/search32.png new file mode 100644 index 0000000..523da7f Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/search32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/shield32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/shield32.png new file mode 100644 index 0000000..96ac437 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/shield32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/shieldcross32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/shieldcross32.png new file mode 100644 index 0000000..fd283c0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/shieldcross32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/shoppingcart32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/shoppingcart32.png new file mode 100644 index 0000000..f4ad87c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/shoppingcart32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/sleep32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/sleep32.png new file mode 100644 index 0000000..a16a156 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/sleep32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/slide32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/slide32.png new file mode 100644 index 0000000..d055cf0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/slide32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/smile32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/smile32.png new file mode 100644 index 0000000..64048a7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/smile32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/spanner32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/spanner32.png new file mode 100644 index 0000000..41316d2 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/spanner32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/speaker32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/speaker32.png new file mode 100644 index 0000000..b1b348d Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/speaker32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/speakermute32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/speakermute32.png new file mode 100644 index 0000000..65e03cd Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/speakermute32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/star32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/star32.png new file mode 100644 index 0000000..96c2f83 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/star32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/stop32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/stop32.png new file mode 100644 index 0000000..526bc63 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/stop32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/turnright32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/turnright32.png new file mode 100644 index 0000000..58b3013 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/turnright32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/unlock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/unlock32.png new file mode 100644 index 0000000..4f07899 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/unlock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/upload32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/upload32.png new file mode 100644 index 0000000..26772e0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/upload32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/user32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/user32.png new file mode 100644 index 0000000..b638c4a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/user32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/userblock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/userblock32.png new file mode 100644 index 0000000..d0ef220 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/userblock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/userminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/userminus32.png new file mode 100644 index 0000000..4401d09 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/userminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/userplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/userplus32.png new file mode 100644 index 0000000..bab34fd Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/userplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/users32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/users32.png new file mode 100644 index 0000000..900afce Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/users32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/usersblock32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersblock32.png new file mode 100644 index 0000000..52e73ab Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersblock32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/usersminus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersminus32.png new file mode 100644 index 0000000..c414245 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersminus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/usersplus32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersplus32.png new file mode 100644 index 0000000..72d26ff Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/usersplus32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/wand32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/wand32.png new file mode 100644 index 0000000..5c833f6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/wand32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/warning32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/warning32.png new file mode 100644 index 0000000..e25d863 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/warning32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/wordpress32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/wordpress32.png new file mode 100644 index 0000000..c6ff3a3 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/wordpress32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/mono-icons/wrench32.png b/ehcp/net2ftp/skins/shinra/img/mono-icons/wrench32.png new file mode 100644 index 0000000..fc624d6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/mono-icons/wrench32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/next-arrow.png b/ehcp/net2ftp/skins/shinra/img/next-arrow.png new file mode 100644 index 0000000..f0e2174 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/next-arrow.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/plus-sign.png b/ehcp/net2ftp/skins/shinra/img/plus-sign.png new file mode 100644 index 0000000..1da445a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/plus-sign.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/post-divider-inverted.png b/ehcp/net2ftp/skins/shinra/img/post-divider-inverted.png new file mode 100644 index 0000000..4b7aea7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/post-divider-inverted.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/post-divider.png b/ehcp/net2ftp/skins/shinra/img/post-divider.png new file mode 100644 index 0000000..602edd3 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/post-divider.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/prev-arrow.png b/ehcp/net2ftp/skins/shinra/img/prev-arrow.png new file mode 100644 index 0000000..55c0aca Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/prev-arrow.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/search-submit.png b/ehcp/net2ftp/skins/shinra/img/search-submit.png new file mode 100644 index 0000000..5f6f423 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/search-submit.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/shadow-1-3.png b/ehcp/net2ftp/skins/shinra/img/shadow-1-3.png new file mode 100644 index 0000000..3eabf7a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/shadow-1-3.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/shadow-1-4.png b/ehcp/net2ftp/skins/shinra/img/shadow-1-4.png new file mode 100644 index 0000000..e9d7c72 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/shadow-1-4.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/shadow-blog.png b/ehcp/net2ftp/skins/shinra/img/shadow-blog.png new file mode 100644 index 0000000..dfa085c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/shadow-blog.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/shadow-project.png b/ehcp/net2ftp/skins/shinra/img/shadow-project.png new file mode 100644 index 0000000..c1ad6a7 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/shadow-project.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/slider-arrows.png b/ehcp/net2ftp/skins/shinra/img/slider-arrows.png new file mode 100644 index 0000000..c9fd27a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/slider-arrows.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/slider-nav-buttons.png b/ehcp/net2ftp/skins/shinra/img/slider-nav-buttons.png new file mode 100644 index 0000000..4d5dd9c Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/slider-nav-buttons.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/slider-shadow.png b/ehcp/net2ftp/skins/shinra/img/slider-shadow.png new file mode 100644 index 0000000..01beaa1 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/slider-shadow.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/circular/addthis_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/addthis_32.png new file mode 100644 index 0000000..cf208c0 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/addthis_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/circular/twitter_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/twitter_32.png new file mode 100644 index 0000000..6977c2e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/twitter_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/circular/youtube_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/youtube_32.png new file mode 100644 index 0000000..10d7587 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/circular/youtube_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/readme.txt b/ehcp/net2ftp/skins/shinra/img/social-icons/readme.txt new file mode 100644 index 0000000..f3e3124 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/img/social-icons/readme.txt @@ -0,0 +1,22 @@ + +------------------------------------------------------ +Buddycon Icon Set by Webdesigner Depot & Orman Clark +http://www.webdesignerdepot.com and www.ormanclark.com +------------------------------------------------------ + +TERMS OF USE: + +This product may be used free of charge for personal and/or commercial purposes. + +You may not modify, sell or distribute this file on any website, CD-ROM or by any other means whatsoever (including electronic and print distribution), without written consent from Webdesigner Depot. + +If you'd like to share this file with others, please direct them to our website where they can download their copy. + +Thanks for supporting our website and enjoy! + + +Webdesigner Depot +_________________________ +www.webdesignerdepot.com +info@webdesignerdepot.com + diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/addthis_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/addthis_32.png new file mode 100644 index 0000000..08d19ed Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/addthis_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/twitter_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/twitter_32.png new file mode 100644 index 0000000..ba24f1e Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/twitter_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/youtube_32.png b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/youtube_32.png new file mode 100644 index 0000000..a70144a Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/social-icons/rounded/youtube_32.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/to-top.png b/ehcp/net2ftp/skins/shinra/img/to-top.png new file mode 100644 index 0000000..70317ee Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/to-top.png differ diff --git a/ehcp/net2ftp/skins/shinra/img/twitter-border.png b/ehcp/net2ftp/skins/shinra/img/twitter-border.png new file mode 100644 index 0000000..9f9047b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/img/twitter-border.png differ diff --git a/ehcp/net2ftp/skins/shinra/install1.template.php b/ehcp/net2ftp/skins/shinra/install1.template.php new file mode 100644 index 0000000..40a6ffd --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/install1.template.php @@ -0,0 +1,15 @@ + + + +
        +

        + +
        +

        + +
        +
        +
        +
        + + diff --git a/ehcp/net2ftp/skins/shinra/install2.template.php b/ehcp/net2ftp/skins/shinra/install2.template.php new file mode 100644 index 0000000..993fbca --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/install2.template.php @@ -0,0 +1,7 @@ + + +" || $net2ftp_output["ftp_chmod2"][$i] == "") { echo $net2ftp_output["ftp_chmod2"][$i] . "\n"; } + else { echo "
      35. " . $net2ftp_output["ftp_chmod2"][$i] . "
      36. \n"; } + } // end for ?> + diff --git a/ehcp/net2ftp/skins/shinra/js/DD_belatedPNG.js b/ehcp/net2ftp/skins/shinra/js/DD_belatedPNG.js new file mode 100644 index 0000000..6062fb3 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/DD_belatedPNG.js @@ -0,0 +1,13 @@ +/** +* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.8a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ +var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/custom.js b/ehcp/net2ftp/skins/shinra/js/custom.js new file mode 100644 index 0000000..526eade --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/custom.js @@ -0,0 +1,83 @@ +// Jquery with no conflict +jQuery(document).ready(function($) { + + // Poshytips ------------------------------------------------------ // + + $('.poshytip').poshytip({ + className: 'tip-twitter', + showTimeout: 1, + alignTo: 'target', + alignX: 'center', + offsetY: 5, + allowTipHover: false + }); + + + // Poshytips Forms ------------------------------------------------------ // + + $('.form-poshytip').poshytip({ + className: 'tip-yellowsimple', + showOn: 'focus', + alignTo: 'target', + alignX: 'right', + alignY: 'center', + offsetX: 5 + }); + + // Superfish menu ------------------------------------------------------ // + + $("ul.sf-menu").superfish({ + animation: {height:'show'}, // slide-down effect without fade-in + delay: 800 // 1.2 second delay on mouseout + }); + + // Scroll to top ------------------------------------------------------ // + + $('#to-top').click(function(){ + $.scrollTo( {top:'0px', left:'0px'}, 300 ); + }); + + // Submenu rollover --------------------------------------------- // + + $("ul.sf-menu>li>ul li").hover(function() { + // on rollover + $(this).children('a').children('span').stop().animate({ + marginLeft: "3" + }, "fast"); + } , function() { + // on out + $(this).children('a').children('span').stop().animate({ + marginLeft: "0" + }, "fast"); + }); + + // Resize home top-padding ------------------------------------------------------ // + + //$('#headline-gap').height($('#headline').height()); + $('.home #header').height($('#headline').height() + 430); + + // Sidebar rollover --------------------------------------------------- // + + $('#sidebar>li>ul>li').hover(function(){ + // over + $(this).children('a').stop().animate({ marginLeft: "5"}, "fast"); + } , function(){ + // out + $(this).children('a').stop().animate({marginLeft: "0"}, "fast"); + }); + + // UI Accordion ------------------------------------------------------ // + + $( ".accordion" ).accordion(); + +//close +}); + +// search clearance +function defaultInput(target){ + if((target).value == 'Search...'){(target).value=''} +} + +function clearInput(target){ + if((target).value == ''){(target).value='Search...'} +} diff --git a/ehcp/net2ftp/skins/shinra/js/easing.js b/ehcp/net2ftp/skins/shinra/js/easing.js new file mode 100644 index 0000000..ab8849e --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/easing.js @@ -0,0 +1,205 @@ +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +jQuery.easing['jswing'] = jQuery.easing['swing']; + +jQuery.extend( jQuery.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert(jQuery.easing.default); + return jQuery.easing[jQuery.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/form-validation-sc.js b/ehcp/net2ftp/skins/shinra/js/form-validation-sc.js new file mode 100644 index 0000000..59e40be --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/form-validation-sc.js @@ -0,0 +1,68 @@ +// Validation for Shortcode contact form + +$(document).ready(function(){ + + // hide messages + $("#sc-contact-form .error").hide(); + $("#sc-contact-form .success").hide(); + + // on submit... + $("#sc-contact-form #submit").click(function() { + + + + $("#sc-contact-form .error").hide(); + + //required: + + //name + var name = $("#sc-contact-form #name").val(); + if(name == ""){ + $("#sc-contact-form .error").fadeIn().text("Name required."); + $("input#name").focus(); + return false; + } + + + // email + var email = $("#sc-contact-form #email").val(); + if(email == ""){ + $("#sc-contact-form .error").fadeIn().text("Email required"); + $("#sc-contact-form #email").focus(); + return false; + } + + // comments + var comments = $("#sc-contact-form #comments").val(); + + //to & subject + var to = $("#sc-contact-form #to").val(); + var subject = $("#sc-contact-form #subject").val(); + var sendMailUrl = $("#sc-contact-form #sendmailurl").val(); + + // data string + var dataString = 'name='+ name + + '&email=' + email + + '&comments=' + comments + + '&subject=' + subject + + '&to=' + to; + + // ajax + $.ajax({ + type:"POST", + url: sendMailUrl, + data: dataString, + success: success() + }); + + }); + + // on success... + function success(){ + $("#sc-contact-form .success").fadeIn(); + $("#sc-contact-form fieldset").fadeOut(); + } + + return false; +}); + diff --git a/ehcp/net2ftp/skins/shinra/js/form-validation.js b/ehcp/net2ftp/skins/shinra/js/form-validation.js new file mode 100644 index 0000000..26d32f4 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/form-validation.js @@ -0,0 +1,74 @@ +jQuery(document).ready(function($) { + + // hide messages + $("#error").hide(); + $("#success").hide(); + + // on submit... + $("#contactForm #submit").click(function() { + $("#error").hide(); + + //required: + + //name + var name = $("input#name").val(); + if(name == ""){ + $("#error").fadeIn().text("Name required."); + $("input#name").focus(); + return false; + } + + // email + var email = $("input#email").val(); + if(email == ""){ + $("#error").fadeIn().text("Email required"); + $("input#email").focus(); + return false; + } + + // web + var web = $("input#web").val(); + if(web == ""){ + $("#error").fadeIn().text("Web required"); + $("input#web").focus(); + return false; + } + + // comments + var comments = $("#comments").val(); + + // send mail php + var sendMailUrl = $("#sendMailUrl").val(); + + //to, from & subject + var to = $("#to").val(); + var from = $("#from").val(); + var subject = $("#subject").val(); + + // data string + var dataString = 'name='+ name + + '&email=' + email + + '&web=' + web + + '&comments=' + comments + + '&to=' + to + + '&from=' + from + + '&subject=' + subject; + // ajax + $.ajax({ + type:"POST", + url: sendMailUrl, + data: dataString, + success: success() + }); + }); + + + // on success... + function success(){ + $("#success").fadeIn(); + $("#contactForm").fadeOut(); + } + + return false; +}); + diff --git a/ehcp/net2ftp/skins/shinra/js/html5.js b/ehcp/net2ftp/skins/shinra/js/html5.js new file mode 100644 index 0000000..b8d4bc7 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/html5.js @@ -0,0 +1,3 @@ +/*! HTML5 Shiv vpre3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed + Uncompressed source: https://github.com/aFarkas/html5shiv */ +(function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){if(!l.shivMethods)return c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b)})(this,document) \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/jquery-1.5.1.min.js b/ehcp/net2ftp/skins/shinra/js/jquery-1.5.1.min.js new file mode 100644 index 0000000..14fd647 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/jquery-1.5.1.min.js @@ -0,0 +1,16 @@ +/*! + * jQuery JavaScript Library v1.5.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Feb 23 13:55:29 2011 -0500 + */ +(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML="
        a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
        ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
        t
        ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/
        ","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
        ","
        "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
        ").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
        ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/jquery-ui-1.8.13.custom.min.js b/ehcp/net2ftp/skins/shinra/js/jquery-ui-1.8.13.custom.min.js new file mode 100644 index 0000000..29a8692 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/jquery-ui-1.8.13.custom.min.js @@ -0,0 +1,789 @@ +/*! + * jQuery UI 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); +b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, +"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, +outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); +return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= +0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= +false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('
        ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper= +this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a); +this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b= +d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop", +a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a= +{left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&& +d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a= +this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions= +{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+ +d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!="hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"), +10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height- +this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&& +d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.leftg[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1];h=g?!(h-this.offset.click.topg[3])?h:!(h-this.offset.click.topg[2])?e:!(e-this.offset.click.left< +g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"); +this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.13"}); +d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver= +0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs= +c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a, +true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver= +0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor= +a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable"); +if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= +i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); +var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a= +false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"}); +this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff= +{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis]; +if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing= +false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height); +c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size, +d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width= +a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b= +this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left- +c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this, +arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement, +element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.13"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})}; +if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"), +p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options, +c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName), +g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"), +10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0, +top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h; +g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left: +0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position")); +if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&& +!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost== +"string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid; +var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b, +10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
        ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a=== +"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&& +!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, +left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; +this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= +document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); +return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], +e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); +c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): +this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null, +dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, +toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith(); +if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), +this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= +this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= +d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| +0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", +a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- +f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- +this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, +this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", +a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= +this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), +e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| +e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13", +animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); +f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g= +false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= +a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; +this.menu=d("
          ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= +this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, +this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){e.push(f?"ui-button-icons-only": +"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, +destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, +position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
          ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
          ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), +h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", +e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); +a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== +b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+= +1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== +f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
          ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
          ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a, +function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", +handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, +originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", +f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "): +[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); +if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): +e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= +this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- +b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.13",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j"); +this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle", +g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length? +(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i- +m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); +return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false; +this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a= +this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a= +this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a); +c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, +_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate); +if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1, +1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery); +;/* + * jQuery UI Tabs 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
          ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
        • #{label}
        • "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= +d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| +(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ +g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", +function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; +this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= +-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= +d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, +e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); +j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); +if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, +this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, +load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, +"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, +url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a", +"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); +d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)}, +_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a, +b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
          '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", +function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker); +if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]); +return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a); +if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d(''); +this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/ +2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a, +"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled= +false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled= +true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a); +d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal= +null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos= +null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0], +top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover"); +c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]}, +_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e- +g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst= +null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear= +false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay= +d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a); +else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort, +g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!= +c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames, +h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| +a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, +g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
          '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
          ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
          '+(/all|left/.test(t)&&x==0?c? +f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
          ';var D=j?'":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}y+=D+"";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&qo;R+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+""}g++;if(g>11){g=0;m++}y+="
          '+this._get(a,"weekHeader")+"
          '+this._get(a,"calculateWeek")(q)+""+(F&&!C?" ":L?''+q.getDate()+ +"":''+q.getDate()+"")+"
          "+(l?""+(i[0]>0&&G==i[1]-1?'
          ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
          ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)? +r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+= +(h||!(j&&l)?" ":"")+o;k+="
          ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a, +"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a, +b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!= +"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay)); +return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&& +arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
          ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.13"})})(jQuery); +;/* + * jQuery UI Effects 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; +f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, +[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); +c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c, +a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments); +a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%", +"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d* +((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/= +e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/= +e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/jquery.cycle.all.js b/ehcp/net2ftp/skins/shinra/js/jquery.cycle.all.js new file mode 100644 index 0000000..75d7ab9 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/jquery.cycle.all.js @@ -0,0 +1,1331 @@ +/*! + * jQuery Cycle Plugin (with Transition Definitions) + * Examples and documentation at: http://jquery.malsup.com/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * Version: 2.88 (08-JUN-2010) + * Dual licensed under the MIT and GPL licenses. + * http://jquery.malsup.com/license.html + * Requires: jQuery v1.2.6 or later + */ +;(function($) { + +var ver = '2.88'; + +// if $.support is not defined (pre jQuery 1.3) add what I need +if ($.support == undefined) { + $.support = { + opacity: !($.browser.msie) + }; +} + +function debug(s) { + if ($.fn.cycle.debug) + log(s); +} +function log() { + if (window.console && window.console.log) + window.console.log('[cycle] ' + Array.prototype.join.call(arguments,' ')); +}; + +// the options arg can be... +// a number - indicates an immediate transition should occur to the given slide index +// a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc) +// an object - properties to control the slideshow +// +// the arg2 arg can be... +// the name of an fx (only used in conjunction with a numeric value for 'options') +// the value true (only used in first arg == 'resume') and indicates +// that the resume should occur immediately (not wait for next timeout) + +$.fn.cycle = function(options, arg2) { + var o = { s: this.selector, c: this.context }; + + // in 1.3+ we can fix mistakes with the ready state + if (this.length === 0 && options != 'stop') { + if (!$.isReady && o.s) { + log('DOM not ready, queuing slideshow'); + $(function() { + $(o.s,o.c).cycle(options,arg2); + }); + return this; + } + // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready() + log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)')); + return this; + } + + // iterate the matched nodeset + return this.each(function() { + var opts = handleArguments(this, options, arg2); + if (opts === false) + return; + + opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink; + + // stop existing slideshow for this container (if there is one) + if (this.cycleTimeout) + clearTimeout(this.cycleTimeout); + this.cycleTimeout = this.cyclePause = 0; + + var $cont = $(this); + var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children(); + var els = $slides.get(); + if (els.length < 2) { + log('terminating; too few slides: ' + els.length); + return; + } + + var opts2 = buildOptions($cont, $slides, els, opts, o); + if (opts2 === false) + return; + + var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.rev); + + // if it's an auto slideshow, kick it off + if (startTime) { + startTime += (opts2.delay || 0); + if (startTime < 10) + startTime = 10; + debug('first timeout: ' + startTime); + this.cycleTimeout = setTimeout(function(){go(els,opts2,0,(!opts2.rev && !opts.backwards))}, startTime); + } + }); +}; + +// process the args that were passed to the plugin fn +function handleArguments(cont, options, arg2) { + if (cont.cycleStop == undefined) + cont.cycleStop = 0; + if (options === undefined || options === null) + options = {}; + if (options.constructor == String) { + switch(options) { + case 'destroy': + case 'stop': + var opts = $(cont).data('cycle.opts'); + if (!opts) + return false; + cont.cycleStop++; // callbacks look for change + if (cont.cycleTimeout) + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + $(cont).removeData('cycle.opts'); + if (options == 'destroy') + destroy(opts); + return false; + case 'toggle': + cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1; + checkInstantResume(cont.cyclePause, arg2, cont); + return false; + case 'pause': + cont.cyclePause = 1; + return false; + case 'resume': + cont.cyclePause = 0; + checkInstantResume(false, arg2, cont); + return false; + case 'prev': + case 'next': + var opts = $(cont).data('cycle.opts'); + if (!opts) { + log('options not found, "prev/next" ignored'); + return false; + } + $.fn.cycle[options](opts); + return false; + default: + options = { fx: options }; + }; + return options; + } + else if (options.constructor == Number) { + // go to the requested slide + var num = options; + options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not advance slide'); + return false; + } + if (num < 0 || num >= options.elements.length) { + log('invalid slide index: ' + num); + return false; + } + options.nextSlide = num; + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + if (typeof arg2 == 'string') + options.oneTimeFx = arg2; + go(options.elements, options, 1, num >= options.currSlide); + return false; + } + return options; + + function checkInstantResume(isPaused, arg2, cont) { + if (!isPaused && arg2 === true) { // resume now! + var options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not resume'); + return false; + } + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + go(options.elements, options, 1, (!opts.rev && !opts.backwards)); + } + } +}; + +function removeFilter(el, opts) { + if (!$.support.opacity && opts.cleartype && el.style.filter) { + try { el.style.removeAttribute('filter'); } + catch(smother) {} // handle old opera versions + } +}; + +// unbind event handlers +function destroy(opts) { + if (opts.next) + $(opts.next).unbind(opts.prevNextEvent); + if (opts.prev) + $(opts.prev).unbind(opts.prevNextEvent); + + if (opts.pager || opts.pagerAnchorBuilder) + $.each(opts.pagerAnchors || [], function() { + this.unbind().remove(); + }); + opts.pagerAnchors = null; + if (opts.destroy) // callback + opts.destroy(opts); +}; + +// one-time initialization +function buildOptions($cont, $slides, els, options, o) { + // support metadata plugin (v1.0 and v2.0) + var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {}); + if (opts.autostop) + opts.countdown = opts.autostopCount || els.length; + + var cont = $cont[0]; + $cont.data('cycle.opts', opts); + opts.$cont = $cont; + opts.stopCount = cont.cycleStop; + opts.elements = els; + opts.before = opts.before ? [opts.before] : []; + opts.after = opts.after ? [opts.after] : []; + opts.after.unshift(function(){ opts.busy=0; }); + + // push some after callbacks + if (!$.support.opacity && opts.cleartype) + opts.after.push(function() { removeFilter(this, opts); }); + if (opts.continuous) + opts.after.push(function() { go(els,opts,0,(!opts.rev && !opts.backwards)); }); + + saveOriginalOpts(opts); + + // clearType corrections + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($slides); + + // container requires non-static position so that slides can be position within + if ($cont.css('position') == 'static') + $cont.css('position', 'relative'); + if (opts.width) + $cont.width(opts.width); + if (opts.height && opts.height != 'auto') + $cont.height(opts.height); + + if (opts.startingSlide) + opts.startingSlide = parseInt(opts.startingSlide); + else if (opts.backwards) + opts.startingSlide = els.length - 1; + + // if random, mix up the slide array + if (opts.random) { + opts.randomMap = []; + for (var i = 0; i < els.length; i++) + opts.randomMap.push(i); + opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;}); + opts.randomIndex = 1; + opts.startingSlide = opts.randomMap[1]; + } + else if (opts.startingSlide >= els.length) + opts.startingSlide = 0; // catch bogus input + opts.currSlide = opts.startingSlide || 0; + var first = opts.startingSlide; + + // set position and zIndex on all the slides + $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) { + var z; + if (opts.backwards) + z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i; + else + z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i; + $(this).css('z-index', z) + }); + + // make sure first slide is visible + $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case + removeFilter(els[first], opts); + + // stretch slides + if (opts.fit && opts.width) + $slides.width(opts.width); + if (opts.fit && opts.height && opts.height != 'auto') + $slides.height(opts.height); + + // stretch container + var reshape = opts.containerResize && !$cont.innerHeight(); + if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9 + var maxw = 0, maxh = 0; + for(var j=0; j < els.length; j++) { + var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight(); + if (!w) w = e.offsetWidth || e.width || $e.attr('width') + if (!h) h = e.offsetHeight || e.height || $e.attr('height'); + maxw = w > maxw ? w : maxw; + maxh = h > maxh ? h : maxh; + } + if (maxw > 0 && maxh > 0) + $cont.css({width:maxw+'px',height:maxh+'px'}); + } + + if (opts.pause) + $cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;}); + + if (supportMultiTransitions(opts) === false) + return false; + + // apparently a lot of people use image slideshows without height/width attributes on the images. + // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that. + var requeue = false; + options.requeueAttempts = options.requeueAttempts || 0; + $slides.each(function() { + // try to get height/width of each slide + var $el = $(this); + this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0); + this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0); + + if ( $el.is('img') ) { + // sigh.. sniffing, hacking, shrugging... this crappy hack tries to account for what browsers do when + // an image is being downloaded and the markup did not include sizing info (height/width attributes); + // there seems to be some "default" sizes used in this situation + var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete); + var loadingFF = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete); + var loadingOp = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete); + var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete); + // don't requeue for images that are still loading but have a valid size + if (loadingIE || loadingFF || loadingOp || loadingOther) { + if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever + log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH); + setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout); + requeue = true; + return false; // break each loop + } + else { + log('could not determine size of image: '+this.src, this.cycleW, this.cycleH); + } + } + } + return true; + }); + + if (requeue) + return false; + + opts.cssBefore = opts.cssBefore || {}; + opts.animIn = opts.animIn || {}; + opts.animOut = opts.animOut || {}; + + $slides.not(':eq('+first+')').css(opts.cssBefore); + if (opts.cssFirst) + $($slides[first]).css(opts.cssFirst); + + if (opts.timeout) { + opts.timeout = parseInt(opts.timeout); + // ensure that timeout and speed settings are sane + if (opts.speed.constructor == String) + opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed); + if (!opts.sync) + opts.speed = opts.speed / 2; + + var buffer = opts.fx == 'shuffle' ? 500 : 250; + while((opts.timeout - opts.speed) < buffer) // sanitize timeout + opts.timeout += opts.speed; + } + if (opts.easing) + opts.easeIn = opts.easeOut = opts.easing; + if (!opts.speedIn) + opts.speedIn = opts.speed; + if (!opts.speedOut) + opts.speedOut = opts.speed; + + opts.slideCount = els.length; + opts.currSlide = opts.lastSlide = first; + if (opts.random) { + if (++opts.randomIndex == els.length) + opts.randomIndex = 0; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.backwards) + opts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1; + else + opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1; + + // run transition init fn + if (!opts.multiFx) { + var init = $.fn.cycle.transitions[opts.fx]; + if ($.isFunction(init)) + init($cont, $slides, opts); + else if (opts.fx != 'custom' && !opts.multiFx) { + log('unknown transition: ' + opts.fx,'; slideshow terminating'); + return false; + } + } + + // fire artificial events + var e0 = $slides[first]; + if (opts.before.length) + opts.before[0].apply(e0, [e0, e0, opts, true]); + if (opts.after.length > 1) + opts.after[1].apply(e0, [e0, e0, opts, true]); + + if (opts.next) + $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1)}); + if (opts.prev) + $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1)}); + if (opts.pager || opts.pagerAnchorBuilder) + buildPager(els,opts); + + exposeAddSlide(opts, els); + + return opts; +}; + +// save off original opts so we can restore after clearing state +function saveOriginalOpts(opts) { + opts.original = { before: [], after: [] }; + opts.original.cssBefore = $.extend({}, opts.cssBefore); + opts.original.cssAfter = $.extend({}, opts.cssAfter); + opts.original.animIn = $.extend({}, opts.animIn); + opts.original.animOut = $.extend({}, opts.animOut); + $.each(opts.before, function() { opts.original.before.push(this); }); + $.each(opts.after, function() { opts.original.after.push(this); }); +}; + +function supportMultiTransitions(opts) { + var i, tx, txs = $.fn.cycle.transitions; + // look for multiple effects + if (opts.fx.indexOf(',') > 0) { + opts.multiFx = true; + opts.fxs = opts.fx.replace(/\s*/g,'').split(','); + // discard any bogus effect names + for (i=0; i < opts.fxs.length; i++) { + var fx = opts.fxs[i]; + tx = txs[fx]; + if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) { + log('discarding unknown transition: ',fx); + opts.fxs.splice(i,1); + i--; + } + } + // if we have an empty list then we threw everything away! + if (!opts.fxs.length) { + log('No valid transitions named; slideshow terminating.'); + return false; + } + } + else if (opts.fx == 'all') { // auto-gen the list of transitions + opts.multiFx = true; + opts.fxs = []; + for (p in txs) { + tx = txs[p]; + if (txs.hasOwnProperty(p) && $.isFunction(tx)) + opts.fxs.push(p); + } + } + if (opts.multiFx && opts.randomizeEffects) { + // munge the fxs array to make effect selection random + var r1 = Math.floor(Math.random() * 20) + 30; + for (i = 0; i < r1; i++) { + var r2 = Math.floor(Math.random() * opts.fxs.length); + opts.fxs.push(opts.fxs.splice(r2,1)[0]); + } + debug('randomized fx sequence: ',opts.fxs); + } + return true; +}; + +// provide a mechanism for adding slides after the slideshow has started +function exposeAddSlide(opts, els) { + opts.addSlide = function(newSlide, prepend) { + var $s = $(newSlide), s = $s[0]; + if (!opts.autostopCount) + opts.countdown++; + els[prepend?'unshift':'push'](s); + if (opts.els) + opts.els[prepend?'unshift':'push'](s); // shuffle needs this + opts.slideCount = els.length; + + $s.css('position','absolute'); + $s[prepend?'prependTo':'appendTo'](opts.$cont); + + if (prepend) { + opts.currSlide++; + opts.nextSlide++; + } + + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($s); + + if (opts.fit && opts.width) + $s.width(opts.width); + if (opts.fit && opts.height && opts.height != 'auto') + $slides.height(opts.height); + s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height(); + s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width(); + + $s.css(opts.cssBefore); + + if (opts.pager || opts.pagerAnchorBuilder) + $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts); + + if ($.isFunction(opts.onAddSlide)) + opts.onAddSlide($s); + else + $s.hide(); // default behavior + }; +} + +// reset internal state; we do this on every pass in order to support multiple effects +$.fn.cycle.resetState = function(opts, fx) { + fx = fx || opts.fx; + opts.before = []; opts.after = []; + opts.cssBefore = $.extend({}, opts.original.cssBefore); + opts.cssAfter = $.extend({}, opts.original.cssAfter); + opts.animIn = $.extend({}, opts.original.animIn); + opts.animOut = $.extend({}, opts.original.animOut); + opts.fxFn = null; + $.each(opts.original.before, function() { opts.before.push(this); }); + $.each(opts.original.after, function() { opts.after.push(this); }); + + // re-init + var init = $.fn.cycle.transitions[fx]; + if ($.isFunction(init)) + init(opts.$cont, $(opts.elements), opts); +}; + +// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt +function go(els, opts, manual, fwd) { + // opts.busy is true if we're in the middle of an animation + if (manual && opts.busy && opts.manualTrump) { + // let manual transitions requests trump active ones + debug('manualTrump in go(), stopping active transition'); + $(els).stop(true,true); + opts.busy = false; + } + // don't begin another timeout-based transition if there is one active + if (opts.busy) { + debug('transition active, ignoring new tx request'); + return; + } + + var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide]; + + // stop cycling if we have an outstanding stop request + if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) + return; + + // check to see if we should stop cycling based on autostop options + if (!manual && !p.cyclePause && !opts.bounce && + ((opts.autostop && (--opts.countdown <= 0)) || + (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) { + if (opts.end) + opts.end(opts); + return; + } + + // if slideshow is paused, only transition on a manual trigger + var changed = false; + if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) { + changed = true; + var fx = opts.fx; + // keep trying to get the slide size if we don't have it yet + curr.cycleH = curr.cycleH || $(curr).height(); + curr.cycleW = curr.cycleW || $(curr).width(); + next.cycleH = next.cycleH || $(next).height(); + next.cycleW = next.cycleW || $(next).width(); + + // support multiple transition types + if (opts.multiFx) { + if (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length) + opts.lastFx = 0; + fx = opts.fxs[opts.lastFx]; + opts.currFx = fx; + } + + // one-time fx overrides apply to: $('div').cycle(3,'zoom'); + if (opts.oneTimeFx) { + fx = opts.oneTimeFx; + opts.oneTimeFx = null; + } + + $.fn.cycle.resetState(opts, fx); + + // run the before callbacks + if (opts.before.length) + $.each(opts.before, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + + // stage the after callacks + var after = function() { + $.each(opts.after, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + }; + + debug('tx firing; currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide); + + // get ready to perform the transition + opts.busy = 1; + if (opts.fxFn) // fx function provided? + opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ? + $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else + $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + } + + if (changed || opts.nextSlide == opts.currSlide) { + // calculate the next slide + opts.lastSlide = opts.currSlide; + if (opts.random) { + opts.currSlide = opts.nextSlide; + if (++opts.randomIndex == els.length) + opts.randomIndex = 0; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + if (opts.nextSlide == opts.currSlide) + opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1; + } + else if (opts.backwards) { + var roll = (opts.nextSlide - 1) < 0; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = 1; + opts.currSlide = 0; + } + else { + opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1; + opts.currSlide = roll ? 0 : opts.nextSlide+1; + } + } + else { // sequence + var roll = (opts.nextSlide + 1) == els.length; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = els.length-2; + opts.currSlide = els.length-1; + } + else { + opts.nextSlide = roll ? 0 : opts.nextSlide+1; + opts.currSlide = roll ? els.length-1 : opts.nextSlide-1; + } + } + } + if (changed && opts.pager) + opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass); + + // stage the next transition + var ms = 0; + if (opts.timeout && !opts.continuous) + ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd); + else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic + ms = 10; + if (ms > 0) + p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, (!opts.rev && !opts.backwards)) }, ms); +}; + +// invoked after transition +$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) { + $(pager).each(function() { + $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName); + }); +}; + +// calculate timeout value for current transition +function getTimeout(curr, next, opts, fwd) { + if (opts.timeoutFn) { + // call user provided calc fn + var t = opts.timeoutFn.call(curr,curr,next,opts,fwd); + while ((t - opts.speed) < 250) // sanitize timeout + t += opts.speed; + debug('calculated timeout: ' + t + '; speed: ' + opts.speed); + if (t !== false) + return t; + } + return opts.timeout; +}; + +// expose next/prev function, caller must pass in state +$.fn.cycle.next = function(opts) { advance(opts, opts.rev?-1:1); }; +$.fn.cycle.prev = function(opts) { advance(opts, opts.rev?1:-1);}; + +// advance slide forward or back +function advance(opts, val) { + var els = opts.elements; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + if (opts.random && val < 0) { + // move back to the previously display slide + opts.randomIndex--; + if (--opts.randomIndex == -2) + opts.randomIndex = els.length-2; + else if (opts.randomIndex == -1) + opts.randomIndex = els.length-1; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.random) { + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else { + opts.nextSlide = opts.currSlide + val; + if (opts.nextSlide < 0) { + if (opts.nowrap) return false; + opts.nextSlide = els.length - 1; + } + else if (opts.nextSlide >= els.length) { + if (opts.nowrap) return false; + opts.nextSlide = 0; + } + } + + var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated + if ($.isFunction(cb)) + cb(val > 0, opts.nextSlide, els[opts.nextSlide]); + go(els, opts, 1, val>=0); + return false; +}; + +function buildPager(els, opts) { + var $p = $(opts.pager); + $.each(els, function(i,o) { + $.fn.cycle.createPagerAnchor(i,o,$p,els,opts); + }); + opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass); +}; + +$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { + var a; + if ($.isFunction(opts.pagerAnchorBuilder)) { + a = opts.pagerAnchorBuilder(i,el); + debug('pagerAnchorBuilder('+i+', el) returned: ' + a); + } + else + a = ''+(i+1)+''; + + if (!a) + return; + var $a = $(a); + // don't reparent if anchor is in the dom + if ($a.parents('body').length === 0) { + var arr = []; + if ($p.length > 1) { + $p.each(function() { + var $clone = $a.clone(true); + $(this).append($clone); + arr.push($clone[0]); + }); + $a = $(arr); + } + else { + $a.appendTo($p); + } + } + + opts.pagerAnchors = opts.pagerAnchors || []; + opts.pagerAnchors.push($a); + $a.bind(opts.pagerEvent, function(e) { + e.preventDefault(); + opts.nextSlide = i; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated + if ($.isFunction(cb)) + cb(opts.nextSlide, els[opts.nextSlide]); + go(els,opts,1,opts.currSlide < i); // trigger the trans +// return false; // <== allow bubble + }); + + if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) + $a.bind('click.cycle', function(){return false;}); // suppress click + + if (opts.pauseOnPagerHover) + $a.hover(function() { opts.$cont[0].cyclePause++; }, function() { opts.$cont[0].cyclePause--; } ); +}; + +// helper fn to calculate the number of slides between the current and the next +$.fn.cycle.hopsFromLast = function(opts, fwd) { + var hops, l = opts.lastSlide, c = opts.currSlide; + if (fwd) + hops = c > l ? c - l : opts.slideCount - l; + else + hops = c < l ? l - c : l + opts.slideCount - c; + return hops; +}; + +// fix clearType problems in ie6 by setting an explicit bg color +// (otherwise text slides look horrible during a fade transition) +function clearTypeFix($slides) { + debug('applying clearType background-color hack'); + function hex(s) { + s = parseInt(s).toString(16); + return s.length < 2 ? '0'+s : s; + }; + function getBg(e) { + for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) { + var v = $.css(e,'background-color'); + if (v.indexOf('rgb') >= 0 ) { + var rgb = v.match(/\d+/g); + return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]); + } + if (v && v != 'transparent') + return v; + } + return '#ffffff'; + }; + $slides.each(function() { $(this).css('background-color', getBg(this)); }); +}; + +// reset common props before the next transition +$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) { + $(opts.elements).not(curr).hide(); + opts.cssBefore.opacity = 1; + opts.cssBefore.display = 'block'; + if (w !== false && next.cycleW > 0) + opts.cssBefore.width = next.cycleW; + if (h !== false && next.cycleH > 0) + opts.cssBefore.height = next.cycleH; + opts.cssAfter = opts.cssAfter || {}; + opts.cssAfter.display = 'none'; + $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0)); + $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1)); +}; + +// the actual fn for effecting a transition +$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) { + var $l = $(curr), $n = $(next); + var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut; + $n.css(opts.cssBefore); + if (speedOverride) { + if (typeof speedOverride == 'number') + speedIn = speedOut = speedOverride; + else + speedIn = speedOut = 1; + easeIn = easeOut = null; + } + var fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb)}; + $l.animate(opts.animOut, speedOut, easeOut, function() { + if (opts.cssAfter) $l.css(opts.cssAfter); + if (!opts.sync) fn(); + }); + if (opts.sync) fn(); +}; + +// transition definitions - only fade is defined here, transition pack defines the rest +$.fn.cycle.transitions = { + fade: function($cont, $slides, opts) { + $slides.not(':eq('+opts.currSlide+')').css('opacity',0); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.opacity = 0; + }); + opts.animIn = { opacity: 1 }; + opts.animOut = { opacity: 0 }; + opts.cssBefore = { top: 0, left: 0 }; + } +}; + +$.fn.cycle.ver = function() { return ver; }; + +// override these globally if you like (they are all optional) +$.fn.cycle.defaults = { + fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle') + timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance) + timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag) + continuous: 0, // true to start next transition immediately after current one completes + speed: 1000, // speed of the transition (any valid fx speed value) + speedIn: null, // speed of the 'in' transition + speedOut: null, // speed of the 'out' transition + next: null, // selector for element to use as event trigger for next slide + prev: null, // selector for element to use as event trigger for previous slide +// prevNextClick: null, // @deprecated; please use onPrevNextEvent instead + onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement) + prevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide + pager: null, // selector for element to use as pager container + //pagerClick null, // @deprecated; please use onPagerEvent instead + onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement) + pagerEvent: 'click.cycle', // name of event which drives the pager navigation + allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling + pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement) + before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options) + easing: null, // easing method for both in and out transitions + easeIn: null, // easing for "in" transition + easeOut: null, // easing for "out" transition + shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 } + animIn: null, // properties that define how the slide animates in + animOut: null, // properties that define how the slide animates out + cssBefore: null, // properties that define the initial state of the slide before transitioning in + cssAfter: null, // properties that defined the state of the slide after transitioning out + fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag) + height: 'auto', // container height + startingSlide: 0, // zero-based index of the first slide to be displayed + sync: 1, // true if in/out transitions should occur simultaneously + random: 0, // true for random, false for sequence (not applicable to shuffle fx) + fit: 0, // force slides to fit container + containerResize: 1, // resize container to fit largest slide + pause: 0, // true to enable "pause on hover" + pauseOnPagerHover: 0, // true to pause when hovering over pager link + autostop: 0, // true to end slideshow after X transitions (where X == slide count) + autostopCount: 0, // number of transitions (optionally used with autostop to define X) + delay: 0, // additional delay (in ms) for first transition (hint: can be negative) + slideExpr: null, // expression for selecting slides (if something other than all children is required) + cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE) + cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides) + nowrap: 0, // true to prevent slideshow from wrapping + fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms + randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random + rev: 0, // causes animations to transition in reverse + manualTrump: true, // causes manual transition to stop an active transition instead of being ignored + requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded + requeueTimeout: 250, // ms delay for requeue + activePagerClass: 'activeSlide', // class name used for the active pager link + updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style) + backwards: false // true to start slideshow at last slide and move backwards through the stack +}; + +})(jQuery); + + +/*! + * jQuery Cycle Plugin Transition Definitions + * This script is a plugin for the jQuery Cycle Plugin + * Examples and documentation at: http://malsup.com/jquery/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * Version: 2.72 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($) { + +// +// These functions define one-time slide initialization for the named +// transitions. To save file size feel free to remove any of these that you +// don't need. +// +$.fn.cycle.transitions.none = function($cont, $slides, opts) { + opts.fxFn = function(curr,next,opts,after){ + $(next).show(); + $(curr).hide(); + after(); + }; +} + +// scrollUp/Down/Left/Right +$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssBefore ={ top: h, left: 0 }; + opts.cssFirst = { top: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: -h }; +}; +$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssFirst = { top: 0 }; + opts.cssBefore= { top: -h, left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: h }; +}; +$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { left: w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: 0-w }; +}; +$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { left: -w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: w }; +}; +$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) { + $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts, fwd) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); + opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW; + }); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { top: 0 }; +}; +$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push(function(curr, next, opts, fwd) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1); + opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore= { left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { left: 0 }; +}; + +// slideX/slideY +$.fn.cycle.transitions.slideX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + }); + opts.cssBefore = { left: 0, top: 0, width: 0 }; + opts.animIn = { width: 'show' }; + opts.animOut = { width: 0 }; +}; +$.fn.cycle.transitions.slideY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + }); + opts.cssBefore = { left: 0, top: 0, height: 0 }; + opts.animIn = { height: 'show' }; + opts.animOut = { height: 0 }; +}; + +// shuffle +$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) { + var i, w = $cont.css('overflow', 'visible').width(); + $slides.css({left: 0, top: 0}); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + }); + // only adjust speed once! + if (!opts.speedAdjusted) { + opts.speed = opts.speed / 2; // shuffle has 2 transitions + opts.speedAdjusted = true; + } + opts.random = 0; + opts.shuffle = opts.shuffle || {left:-w, top:15}; + opts.els = []; + for (i=0; i < $slides.length; i++) + opts.els.push($slides[i]); + + for (i=0; i < opts.currSlide; i++) + opts.els.push(opts.els.shift()); + + // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!) + opts.fxFn = function(curr, next, opts, cb, fwd) { + var $el = fwd ? $(curr) : $(next); + $(next).css(opts.cssBefore); + var count = opts.slideCount; + $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() { + var hops = $.fn.cycle.hopsFromLast(opts, fwd); + for (var k=0; k < hops; k++) + fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop()); + if (fwd) { + for (var i=0, len=opts.els.length; i < len; i++) + $(opts.els[i]).css('z-index', len-i+count); + } + else { + var z = $(curr).css('z-index'); + $el.css('z-index', parseInt(z)+1+count); + } + $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() { + $(fwd ? this : curr).hide(); + if (cb) cb(); + }); + }); + }; + opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 }; +}; + +// turnUp/Down/Left/Right +$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = next.cycleH; + opts.animIn.height = next.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore = { left: 0, height: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { height: 0 }; +}; +$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore = { left: 0, top: 0, height: 0 }; + opts.animOut = { height: 0 }; +}; +$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = next.cycleW; + opts.animIn.width = next.cycleW; + }); + opts.cssBefore = { top: 0, width: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { width: 0 }; +}; +$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + opts.cssBefore = { top: 0, left: 0, width: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { width: 0 }; +}; + +// zoom +$.fn.cycle.transitions.zoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.cssBefore.left = next.cycleW/2; + opts.animIn = { top: 0, left: 0, width: next.cycleW, height: next.cycleH }; + opts.animOut = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 }; + }); + opts.cssFirst = { top:0, left: 0 }; + opts.cssBefore = { width: 0, height: 0 }; +}; + +// fadeZoom +$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false); + opts.cssBefore.left = next.cycleW/2; + opts.cssBefore.top = next.cycleH/2; + opts.animIn = { top: 0, left: 0, width: next.cycleW, height: next.cycleH }; + }); + opts.cssBefore = { width: 0, height: 0 }; + opts.animOut = { opacity: 0 }; +}; + +// blindX +$.fn.cycle.transitions.blindX = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + opts.cssBefore = { left: w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: w }; +}; +// blindY +$.fn.cycle.transitions.blindY = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore = { top: h, left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: h }; +}; +// blindZ +$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + var w = $cont.width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore = { top: h, left: w }; + opts.animIn = { top: 0, left: 0 }; + opts.animOut = { top: h, left: w }; +}; + +// growX - grow horizontally from centered 0 width +$.fn.cycle.transitions.growX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = this.cycleW/2; + opts.animIn = { left: 0, width: this.cycleW }; + opts.animOut = { left: 0 }; + }); + opts.cssBefore = { width: 0, top: 0 }; +}; +// growY - grow vertically from centered 0 height +$.fn.cycle.transitions.growY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = this.cycleH/2; + opts.animIn = { top: 0, height: this.cycleH }; + opts.animOut = { top: 0 }; + }); + opts.cssBefore = { height: 0, left: 0 }; +}; + +// curtainX - squeeze in both edges horizontally +$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true,true); + opts.cssBefore.left = next.cycleW/2; + opts.animIn = { left: 0, width: this.cycleW }; + opts.animOut = { left: curr.cycleW/2, width: 0 }; + }); + opts.cssBefore = { top: 0, width: 0 }; +}; +// curtainY - squeeze in both edges vertically +$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.animIn = { top: 0, height: next.cycleH }; + opts.animOut = { top: curr.cycleH/2, height: 0 }; + }); + opts.cssBefore = { left: 0, height: 0 }; +}; + +// cover - curr slide covered by next slide +$.fn.cycle.transitions.cover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + if (d == 'right') + opts.cssBefore.left = -w; + else if (d == 'up') + opts.cssBefore.top = h; + else if (d == 'down') + opts.cssBefore.top = -h; + else + opts.cssBefore.left = w; + }); + opts.animIn = { left: 0, top: 0}; + opts.animOut = { opacity: 1 }; + opts.cssBefore = { top: 0, left: 0 }; +}; + +// uncover - curr slide moves off next slide +$.fn.cycle.transitions.uncover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + if (d == 'right') + opts.animOut.left = w; + else if (d == 'up') + opts.animOut.top = -h; + else if (d == 'down') + opts.animOut.top = h; + else + opts.animOut.left = -w; + }); + opts.animIn = { left: 0, top: 0 }; + opts.animOut = { opacity: 1 }; + opts.cssBefore = { top: 0, left: 0 }; +}; + +// toss - move top slide and fade away +$.fn.cycle.transitions.toss = function($cont, $slides, opts) { + var w = $cont.css('overflow','visible').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + // provide default toss settings if animOut not provided + if (!opts.animOut.left && !opts.animOut.top) + opts.animOut = { left: w*2, top: -h/2, opacity: 0 }; + else + opts.animOut.opacity = 0; + }); + opts.cssBefore = { left: 0, top: 0 }; + opts.animIn = { left: 0 }; +}; + +// wipe - clip animation +$.fn.cycle.transitions.wipe = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.cssBefore = opts.cssBefore || {}; + var clip; + if (opts.clip) { + if (/l2r/.test(opts.clip)) + clip = 'rect(0px 0px '+h+'px 0px)'; + else if (/r2l/.test(opts.clip)) + clip = 'rect(0px '+w+'px '+h+'px '+w+'px)'; + else if (/t2b/.test(opts.clip)) + clip = 'rect(0px '+w+'px 0px 0px)'; + else if (/b2t/.test(opts.clip)) + clip = 'rect('+h+'px '+w+'px '+h+'px 0px)'; + else if (/zoom/.test(opts.clip)) { + var top = parseInt(h/2); + var left = parseInt(w/2); + clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)'; + } + } + + opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)'; + + var d = opts.cssBefore.clip.match(/(\d+)/g); + var t = parseInt(d[0]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]); + + opts.before.push(function(curr, next, opts) { + if (curr == next) return; + var $curr = $(curr), $next = $(next); + $.fn.cycle.commonReset(curr,next,opts,true,true,false); + opts.cssAfter.display = 'block'; + + var step = 1, count = parseInt((opts.speedIn / 13)) - 1; + (function f() { + var tt = t ? t - parseInt(step * (t/count)) : 0; + var ll = l ? l - parseInt(step * (l/count)) : 0; + var bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h; + var rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w; + $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' }); + (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none'); + })(); + }); + opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: 0 }; +}; + +})(jQuery); diff --git a/ehcp/net2ftp/skins/shinra/js/jquery.scrollTo-1.4.2-min.js b/ehcp/net2ftp/skins/shinra/js/jquery.scrollTo-1.4.2-min.js new file mode 100644 index 0000000..73a3341 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/jquery.scrollTo-1.4.2-min.js @@ -0,0 +1,11 @@ +/** + * jQuery.ScrollTo - Easy element scrolling using jQuery. + * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * Date: 5/25/2009 + * @author Ariel Flesler + * @version 1.4.2 + * + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + */ +;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/GPL-LICENSE.txt b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/GPL-LICENSE.txt new file mode 100644 index 0000000..11dddd0 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/GPL-LICENSE.txt @@ -0,0 +1,278 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/MIT-LICENSE.txt b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/MIT-LICENSE.txt new file mode 100644 index 0000000..fd03760 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/MIT-LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2010 Vasil Dinkov, http://vadikom.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/README.txt b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/README.txt new file mode 100644 index 0000000..32644ff --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/README.txt @@ -0,0 +1,2 @@ +Home page with introduction: +http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/ \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/jquery.poshytip.min.js b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/jquery.poshytip.min.js new file mode 100644 index 0000000..0c83b86 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/jquery.poshytip.min.js @@ -0,0 +1,7 @@ +/* + * Poshy Tip jQuery plugin v1.0 + * http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/ + * Copyright 2010, Vasil Dinkov, http://vadikom.com/ + */ + +(function(e){var a=[],d=/^url\(["']?([^"'\)]*)["']?\);?$/i,c=/\.png$/i,b=e.browser.msie&&e.browser.version==6;function f(){e.each(a,function(){this.refresh(true)})}e(window).resize(f);e.Poshytip=function(h,g){this.$elm=e(h);this.opts=e.extend({},e.fn.poshytip.defaults,g);this.$tip=e(['
          ','
          ','
          ',"
          "].join(""));this.$arrow=this.$tip.find("div.tip-arrow");this.$inner=this.$tip.find("div.tip-inner");this.disabled=false;this.init()};e.Poshytip.prototype={init:function(){a.push(this);this.$elm.data("title.poshytip",this.$elm.attr("title")).data("poshytip",this);switch(this.opts.showOn){case"hover":this.$elm.bind({"mouseenter.poshytip":e.proxy(this.mouseenter,this),"mouseleave.poshytip":e.proxy(this.mouseleave,this)});if(this.opts.alignTo=="cursor"){this.$elm.bind("mousemove.poshytip",e.proxy(this.mousemove,this))}if(this.opts.allowTipHover){this.$tip.hover(e.proxy(this.clearTimeouts,this),e.proxy(this.hide,this))}break;case"focus":this.$elm.bind({"focus.poshytip":e.proxy(this.show,this),"blur.poshytip":e.proxy(this.hide,this)});break}},mouseenter:function(g){if(this.disabled){return true}this.clearTimeouts();this.$elm.attr("title","");this.showTimeout=setTimeout(e.proxy(this.show,this),this.opts.showTimeout)},mouseleave:function(){if(this.disabled){return true}this.clearTimeouts();this.$elm.attr("title",this.$elm.data("title.poshytip"));this.hideTimeout=setTimeout(e.proxy(this.hide,this),this.opts.hideTimeout)},mousemove:function(g){if(this.disabled){return true}this.eventX=g.pageX;this.eventY=g.pageY;if(this.opts.followCursor&&this.$tip.data("active")){this.calcPos();this.$tip.css({left:this.pos.l,top:this.pos.t});if(this.pos.arrow){this.$arrow[0].className="tip-arrow tip-arrow-"+this.pos.arrow}}},show:function(){if(this.disabled||this.$tip.data("active")){return}this.reset();this.update();this.display()},hide:function(){if(this.disabled||!this.$tip.data("active")){return}this.display(true)},reset:function(){this.$tip.queue([]).detach().css("visibility","hidden").data("active",false);this.$inner.find("*").poshytip("hide");if(this.opts.fade){this.$tip.css("opacity",this.opacity)}this.$arrow[0].className="tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left"},update:function(i){if(this.disabled){return}var h=i!==undefined;if(h){if(!this.$tip.data("active")){return}}else{i=this.opts.content}this.$inner.contents().detach();var g=this;this.$inner.append(typeof i=="function"?i.call(this.$elm[0],function(j){g.update(j)}):i=="[title]"?this.$elm.data("title.poshytip"):i);this.refresh(h)},refresh:function(h){if(this.disabled){return}if(h){if(!this.$tip.data("active")){return}var k={left:this.$tip.css("left"),top:this.$tip.css("top")}}this.$tip.css({left:0,top:0}).appendTo(document.body);if(this.opacity===undefined){this.opacity=this.$tip.css("opacity")}var l=this.$tip.css("background-image").match(d),m=this.$arrow.css("background-image").match(d);if(l){var i=c.test(l[1]);if(b&&i){this.$tip.css("background-image","none");this.$inner.css({margin:0,border:0,padding:0});l=i=false}else{this.$tip.prepend('
          ').css({border:0,padding:0,"background-image":"none","background-color":"transparent"}).find(".tip-bg-image").css("background-image",'url("'+l[1]+'")').end().find("td").eq(3).append(this.$inner)}if(i&&!e.support.opacity){this.opts.fade=false}}if(m&&!e.support.opacity){if(b&&c.test(m[1])){m=false;this.$arrow.css("background-image","none")}this.opts.fade=false}var o=this.$tip.find("table");if(b){this.$tip[0].style.width="";o.width("auto").find("td").eq(3).width("auto");var n=this.$tip.width(),j=parseInt(this.$tip.css("min-width")),g=parseInt(this.$tip.css("max-width"));if(!isNaN(j)&&ng){n=g}}this.$tip.add(o).width(n).eq(0).find("td").eq(3).width("100%")}else{if(o[0]){o.width("auto").find("td").eq(3).width("auto").end().end().width(this.$tip.width()).find("td").eq(3).width("100%")}}this.tipOuterW=this.$tip.outerWidth();this.tipOuterH=this.$tip.outerHeight();this.calcPos();if(m&&this.pos.arrow){this.$arrow[0].className="tip-arrow tip-arrow-"+this.pos.arrow;this.$arrow.css("visibility","inherit")}if(h){this.$tip.css(k).animate({left:this.pos.l,top:this.pos.t},200)}else{this.$tip.css({left:this.pos.l,top:this.pos.t})}},display:function(h){var i=this.$tip.data("active");if(i&&!h||!i&&h){return}this.$tip.stop();if((this.opts.slide&&this.pos.arrow||this.opts.fade)&&(h&&this.opts.hideAniDuration||!h&&this.opts.showAniDuration)){var m={},l={};if(this.opts.slide&&this.pos.arrow){var k,g;if(this.pos.arrow=="bottom"||this.pos.arrow=="top"){k="top";g="bottom"}else{k="left";g="right"}var j=parseInt(this.$tip.css(k));m[k]=j+(h?0:this.opts.slideOffset*(this.pos.arrow==g?-1:1));l[k]=j+(h?this.opts.slideOffset*(this.pos.arrow==g?1:-1):0)}if(this.opts.fade){m.opacity=h?this.$tip.css("opacity"):0;l.opacity=h?0:this.opacity}this.$tip.css(m).animate(l,this.opts[h?"hideAniDuration":"showAniDuration"])}h?this.$tip.queue(e.proxy(this.reset,this)):this.$tip.css("visibility","inherit");this.$tip.data("active",!i)},disable:function(){this.reset();this.disabled=true},enable:function(){this.disabled=false},destroy:function(){this.reset();this.$tip.remove();this.$elm.unbind("poshytip").removeData("title.poshytip").removeData("poshytip");a.splice(e.inArray(this,a),1)},clearTimeouts:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},calcPos:function(){var n={l:0,t:0,arrow:""},h=e(window),k={l:h.scrollLeft(),t:h.scrollTop(),w:h.width(),h:h.height()},p,j,m,i,q,g;if(this.opts.alignTo=="cursor"){p=j=m=this.eventX;i=q=g=this.eventY}else{var o=this.$elm.offset(),l={l:o.left,t:o.top,w:this.$elm.outerWidth(),h:this.$elm.outerHeight()};p=l.l+(this.opts.alignX!="inner-right"?0:l.w);j=p+Math.floor(l.w/2);m=p+(this.opts.alignX!="inner-left"?l.w:0);i=l.t+(this.opts.alignY!="inner-bottom"?0:l.h);q=i+Math.floor(l.h/2);g=i+(this.opts.alignY!="inner-top"?l.h:0)}switch(this.opts.alignX){case"right":case"inner-left":n.l=m+this.opts.offsetX;if(n.l+this.tipOuterW>k.l+k.w){n.l=k.l+k.w-this.tipOuterW}if(this.opts.alignX=="right"||this.opts.alignY=="center"){n.arrow="left"}break;case"center":n.l=j-Math.floor(this.tipOuterW/2);if(n.l+this.tipOuterW>k.l+k.w){n.l=k.l+k.w-this.tipOuterW}else{if(n.lk.t+k.h){n.t=i-this.tipOuterH-this.opts.offsetY;if(n.arrow=="top"){n.arrow="bottom"}}break;case"center":n.t=q-Math.floor(this.tipOuterH/2);if(n.t+this.tipOuterH>k.t+k.h){n.t=k.t+k.h-this.tipOuterH}else{if(n.t',"div.",h.className,"{visibility:hidden;position:absolute;top:0;left:0;}","div.",h.className," table, div.",h.className," td{margin:0;font-family:inherit;font-size:inherit;font-weight:inherit;font-style:inherit;font-variant:inherit;}","div.",h.className," td.tip-bg-image span{display:block;font:1px/1px sans-serif;height:",h.bgImageFrameSize,"px;width:",h.bgImageFrameSize,"px;overflow:hidden;}","div.",h.className," td.tip-right{background-position:100% 0;}","div.",h.className," td.tip-bottom{background-position:100% 100%;}","div.",h.className," td.tip-left{background-position:0 100%;}","div.",h.className," div.tip-inner{background-position:-",h.bgImageFrameSize,"px -",h.bgImageFrameSize,"px;}","div.",h.className," div.tip-arrow{visibility:hidden;position:absolute;overflow:hidden;font:1px/1px sans-serif;}",""].join("")).appendTo("head")}return this.each(function(){new e.Poshytip(this,h)})};e.fn.poshytip.defaults={content:"[title]",className:"tip-yellow",bgImageFrameSize:10,showTimeout:500,hideTimeout:100,showOn:"hover",alignTo:"cursor",alignX:"right",alignY:"top",offsetX:-22,offsetY:18,allowTipHover:true,followCursor:false,fade:true,slide:true,slideOffset:8,showAniDuration:300,hideAniDuration:300}})(jQuery); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter.css b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter.css new file mode 100644 index 0000000..a7b1a37 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter.css @@ -0,0 +1,59 @@ +.tip-twitter { + opacity:0.8; + z-index:1000; + text-align:left; + border-radius:4px; + -moz-border-radius:4px; + -webkit-border-radius:4px; + padding:8px 8px; + max-width:200px; + color:#fff; + background-color:#000; + /** + * - If you set a background-image, border/padding/background-color will be ingnored. + * You can set any padding to .tip-inner instead if you need. + * - If you want a tiled background-image and border/padding for the tip, + * set the background-image to .tip-inner instead. + */ +} +.tip-twitter .tip-inner { + font:bold 11px/14px 'Lucida Grande',sans-serif; +} + +/* Configure an arrow image - the script will automatically position it on the correct side of the tip */ +.tip-twitter .tip-arrow-top { + margin-top:-5px; + margin-left:-5px; /* approx. half the width to center it */ + top:0; + left:50%; + width:9px; + height:5px; + background:url(tip-twitter_arrows.gif) no-repeat; +} +.tip-twitter .tip-arrow-right { + margin-top:-4px; /* approx. half the height to center it */ + margin-left:0; + top:50%; + left:100%; + width:5px; + height:9px; + background:url(tip-twitter_arrows.gif) no-repeat -9px 0; +} +.tip-twitter .tip-arrow-bottom { + margin-top:0; + margin-left:-5px; /* approx. half the width to center it */ + top:100%; + left:50%; + width:9px; + height:5px; + background:url(tip-twitter_arrows.gif) no-repeat -18px 0; +} +.tip-twitter .tip-arrow-left { + margin-top:-4px; /* approx. half the height to center it */ + margin-left:-5px; + top:50%; + left:0; + width:5px; + height:9px; + background:url(tip-twitter_arrows.gif) no-repeat -27px 0; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter_arrows.gif b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter_arrows.gif new file mode 100644 index 0000000..6fac0e6 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-twitter/tip-twitter_arrows.gif differ diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple.css b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple.css new file mode 100644 index 0000000..3643d8d --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple.css @@ -0,0 +1,60 @@ +.tip-yellowsimple { + z-index:1000; + text-align:left; + border:1px solid #c7bf93; + border-radius:4px; + -moz-border-radius:4px; + -webkit-border-radius:4px; + padding:6px 8px; + min-width:50px; + max-width:300px; + color:#000; + background-color:#fff9c9; + /** + * - If you set a background-image, border/padding/background-color will be ingnored. + * You can set any padding to .tip-inner instead if you need. + * - If you want a tiled background-image and border/padding for the tip, + * set the background-image to .tip-inner instead. + */ +} +.tip-yellowsimple .tip-inner { + font:12px/16px arial,helvetica,sans-serif; +} + +/* Configure an arrow image - the script will automatically position it on the correct side of the tip */ +.tip-yellowsimple .tip-arrow-top { + margin-top:-6px; + margin-left:-5px; /* approx. half the width to center it */ + top:0; + left:50%; + width:9px; + height:6px; + background:url(tip-yellowsimple_arrows.gif) no-repeat; +} +.tip-yellowsimple .tip-arrow-right { + margin-top:-4px; /* approx. half the height to center it */ + margin-left:0; + top:50%; + left:100%; + width:6px; + height:9px; + background:url(tip-yellowsimple_arrows.gif) no-repeat -9px 0; +} +.tip-yellowsimple .tip-arrow-bottom { + margin-top:0; + margin-left:-5px; /* approx. half the width to center it */ + top:100%; + left:50%; + width:9px; + height:6px; + background:url(tip-yellowsimple_arrows.gif) no-repeat -18px 0; +} +.tip-yellowsimple .tip-arrow-left { + margin-top:-4px; /* approx. half the height to center it */ + margin-left:-6px; + top:50%; + left:0; + width:6px; + height:9px; + background:url(tip-yellowsimple_arrows.gif) no-repeat -27px 0; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple_arrows.gif b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple_arrows.gif new file mode 100644 index 0000000..2649f14 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/js/poshytip-1.0/src/tip-yellowsimple/tip-yellowsimple_arrows.gif differ diff --git a/ehcp/net2ftp/skins/shinra/js/quicksand.js b/ehcp/net2ftp/skins/shinra/js/quicksand.js new file mode 100644 index 0000000..626f490 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/quicksand.js @@ -0,0 +1,307 @@ +/* + +Quicksand 1.2.2 + +Reorder and filter items with a nice shuffling animation. + +Copyright (c) 2010 Jacek Galanciak (razorjack.net) and agilope.com +Big thanks for Piotr Petrus (riddle.pl) for deep code review and wonderful docs & demos. + +Dual licensed under the MIT and GPL version 2 licenses. +http://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt +http://github.com/jquery/jquery/blob/master/GPL-LICENSE.txt + +Project site: http://razorjack.net/quicksand +Github site: http://github.com/razorjack/quicksand + +*/ + +(function ($) { + $.fn.quicksand = function (collection, customOptions) { + var options = { + duration: 750, + easing: 'swing', + attribute: 'data-id', // attribute to recognize same items within source and dest + adjustHeight: 'auto', // 'dynamic' animates height during shuffling (slow), 'auto' adjusts it before or after the animation, false leaves height constant + useScaling: true, // disable it if you're not using scaling effect or want to improve performance + enhancement: function(c) {}, // Visual enhacement (eg. font replacement) function for cloned elements + selector: '> *', + dx: 0, + dy: 0 + }; + $.extend(options, customOptions); + + if ($.browser.msie || (typeof($.fn.scale) == 'undefined')) { + // Got IE and want scaling effect? Kiss my ass. + options.useScaling = false; + } + + var callbackFunction; + if (typeof(arguments[1]) == 'function') { + var callbackFunction = arguments[1]; + } else if (typeof(arguments[2] == 'function')) { + var callbackFunction = arguments[2]; + } + + + return this.each(function (i) { + var val; + var animationQueue = []; // used to store all the animation params before starting the animation; solves initial animation slowdowns + var $collection = $(collection).clone(); // destination (target) collection + var $sourceParent = $(this); // source, the visible container of source collection + var sourceHeight = $(this).css('height'); // used to keep height and document flow during the animation + + var destHeight; + var adjustHeightOnCallback = false; + + var offset = $($sourceParent).offset(); // offset of visible container, used in animation calculations + var offsets = []; // coordinates of every source collection item + + var $source = $(this).find(options.selector); // source collection items + + // Replace the collection and quit if IE6 + if ($.browser.msie && $.browser.version.substr(0,1)<7) { + $sourceParent.html('').append($collection); + return; + } + + // Gets called when any animation is finished + var postCallbackPerformed = 0; // prevents the function from being called more than one time + var postCallback = function () { + + if (!postCallbackPerformed) { + postCallbackPerformed = 1; + + // hack: + // used to be: $sourceParent.html($dest.html()); // put target HTML into visible source container + // but new webkit builds cause flickering when replacing the collections + $toDelete = $sourceParent.find('> *'); + $sourceParent.prepend($dest.find('> *')); + $toDelete.remove(); + + if (adjustHeightOnCallback) { + $sourceParent.css('height', destHeight); + } + options.enhancement($sourceParent); // Perform custom visual enhancements on a newly replaced collection + if (typeof callbackFunction == 'function') { + callbackFunction.call(this); + } + } + }; + + // Position: relative situations + var $correctionParent = $sourceParent.offsetParent(); + var correctionOffset = $correctionParent.offset(); + if ($correctionParent.css('position') == 'relative') { + if ($correctionParent.get(0).nodeName.toLowerCase() == 'body') { + + } else { + correctionOffset.top += (parseFloat($correctionParent.css('border-top-width')) || 0); + correctionOffset.left +=( parseFloat($correctionParent.css('border-left-width')) || 0); + } + } else { + correctionOffset.top -= (parseFloat($correctionParent.css('border-top-width')) || 0); + correctionOffset.left -= (parseFloat($correctionParent.css('border-left-width')) || 0); + correctionOffset.top -= (parseFloat($correctionParent.css('margin-top')) || 0); + correctionOffset.left -= (parseFloat($correctionParent.css('margin-left')) || 0); + } + + // perform custom corrections from options (use when Quicksand fails to detect proper correction) + if (isNaN(correctionOffset.left)) { + correctionOffset.left = 0; + } + if (isNaN(correctionOffset.top)) { + correctionOffset.top = 0; + } + + correctionOffset.left -= options.dx; + correctionOffset.top -= options.dy; + + // keeps nodes after source container, holding their position + $sourceParent.css('height', $(this).height()); + + // get positions of source collections + $source.each(function (i) { + offsets[i] = $(this).offset(); + }); + + // stops previous animations on source container + $(this).stop(); + var dx = 0; var dy = 0; + $source.each(function (i) { + $(this).stop(); // stop animation of collection items + var rawObj = $(this).get(0); + if (rawObj.style.position == 'absolute') { + dx = -options.dx; + dy = -options.dy; + } else { + dx = options.dx; + dy = options.dy; + } + + rawObj.style.position = 'absolute'; + rawObj.style.margin = '0'; + + rawObj.style.top = (offsets[i].top - parseFloat(rawObj.style.marginTop) - correctionOffset.top + dy) + 'px'; + rawObj.style.left = (offsets[i].left - parseFloat(rawObj.style.marginLeft) - correctionOffset.left + dx) + 'px'; + }); + + // create temporary container with destination collection + var $dest = $($sourceParent).clone(); + var rawDest = $dest.get(0); + rawDest.innerHTML = ''; + rawDest.setAttribute('id', ''); + rawDest.style.height = 'auto'; + rawDest.style.width = $sourceParent.width() + 'px'; + $dest.append($collection); + // insert node into HTML + // Note that the node is under visible source container in the exactly same position + // The browser render all the items without showing them (opacity: 0.0) + // No offset calculations are needed, the browser just extracts position from underlayered destination items + // and sets animation to destination positions. + $dest.insertBefore($sourceParent); + $dest.css('opacity', 0.0); + rawDest.style.zIndex = -1; + + rawDest.style.margin = '0'; + rawDest.style.position = 'absolute'; + rawDest.style.top = offset.top - correctionOffset.top + 'px'; + rawDest.style.left = offset.left - correctionOffset.left + 'px'; + + + + + + if (options.adjustHeight === 'dynamic') { + // If destination container has different height than source container + // the height can be animated, adjusting it to destination height + $sourceParent.animate({height: $dest.height()}, options.duration, options.easing); + } else if (options.adjustHeight === 'auto') { + destHeight = $dest.height(); + if (parseFloat(sourceHeight) < parseFloat(destHeight)) { + // Adjust the height now so that the items don't move out of the container + $sourceParent.css('height', destHeight); + } else { + // Adjust later, on callback + adjustHeightOnCallback = true; + } + } + + // Now it's time to do shuffling animation + // First of all, we need to identify same elements within source and destination collections + $source.each(function (i) { + var destElement = []; + if (typeof(options.attribute) == 'function') { + + val = options.attribute($(this)); + $collection.each(function() { + if (options.attribute(this) == val) { + destElement = $(this); + return false; + } + }); + } else { + destElement = $collection.filter('[' + options.attribute + '=' + $(this).attr(options.attribute) + ']'); + } + if (destElement.length) { + // The item is both in source and destination collections + // It it's under different position, let's move it + if (!options.useScaling) { + animationQueue.push( + { + element: $(this), + animation: + {top: destElement.offset().top - correctionOffset.top, + left: destElement.offset().left - correctionOffset.left, + opacity: 1.0 + } + }); + + } else { + animationQueue.push({ + element: $(this), + animation: {top: destElement.offset().top - correctionOffset.top, + left: destElement.offset().left - correctionOffset.left, + opacity: 1.0, + scale: '1.0' + } + }); + + } + } else { + // The item from source collection is not present in destination collections + // Let's remove it + if (!options.useScaling) { + animationQueue.push({element: $(this), + animation: {opacity: '0.0'}}); + } else { + animationQueue.push({element: $(this), animation: {opacity: '0.0', + scale: '0.0'}}); + } + } + }); + + $collection.each(function (i) { + // Grab all items from target collection not present in visible source collection + + var sourceElement = []; + var destElement = []; + if (typeof(options.attribute) == 'function') { + val = options.attribute($(this)); + $source.each(function() { + if (options.attribute(this) == val) { + sourceElement = $(this); + return false; + } + }); + + $collection.each(function() { + if (options.attribute(this) == val) { + destElement = $(this); + return false; + } + }); + } else { + sourceElement = $source.filter('[' + options.attribute + '=' + $(this).attr(options.attribute) + ']'); + destElement = $collection.filter('[' + options.attribute + '=' + $(this).attr(options.attribute) + ']'); + } + + var animationOptions; + if (sourceElement.length === 0) { + // No such element in source collection... + if (!options.useScaling) { + animationOptions = { + opacity: '1.0' + }; + } else { + animationOptions = { + opacity: '1.0', + scale: '1.0' + }; + } + // Let's create it + d = destElement.clone(); + var rawDestElement = d.get(0); + rawDestElement.style.position = 'absolute'; + rawDestElement.style.margin = '0'; + rawDestElement.style.top = destElement.offset().top - correctionOffset.top + 'px'; + rawDestElement.style.left = destElement.offset().left - correctionOffset.left + 'px'; + d.css('opacity', 0.0); // IE + if (options.useScaling) { + d.css('transform', 'scale(0.0)'); + } + d.appendTo($sourceParent); + + animationQueue.push({element: $(d), + animation: animationOptions}); + } + }); + + $dest.remove(); + options.enhancement($sourceParent); // Perform custom visual enhancements during the animation + for (i = 0; i < animationQueue.length; i++) { + animationQueue[i].element.animate(animationQueue[i].animation, options.duration, options.easing, postCallback); + } + }); + }; +})(jQuery); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/changelog.txt b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/changelog.txt new file mode 100644 index 0000000..3399f05 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/changelog.txt @@ -0,0 +1,74 @@ +Changelog for Superfish - a jQuery menu plugin + +v1.2.1: altered 2nd July 07. added hide() before animate to make work for jQuery 1.1.3. + +v1.2.2: altered 2nd August 07. changed over function .find('ul') to .find('>ul') for smoother animations + Also deleted the iframe removal lines - not necessary it turns out + +v1.2.3: altered jquery 1.1.3.1 broke keyboard access - had to change quite a few things and set display:none on the + .superfish rule in CSS instead of top:-999em + +v1.3: Pretty much a complete overhaul to make all original features work in 1.1.3.1 and above. + .superfish rule reverted back to top:-999em (which is better). + +v1.3.1: altered 'li[ul]' to $('li:has(ul)') to work with jQuery 1.2 + +v1.3.2: added onshow callback option as requested - 'this' keyword refers to revealed ul. + fixed bug whereby multiple menus on a page shared options. Now each menu can have separate options. + fixed IE6 and IE7 bug whereby under certain circumstances => 3rd tier menus appear instantly with text missing when revisited + +v1.3.3: altered event attachment selectors for performance increase on menu setup. + +v1.3.4: fixed pathClass bug as current path was not being restored. Still doesn't if using keyboard nav (will work on that). + +v1.4: store options objects in array $.superfish.o. Also provide public access to $.superfish.defaults + provided backward compat for jQuery versions less than 1.2 via oldJquery option - will use li[ul] or li:has(ul) as needed + added more callbacks, also added option to disable hoverIntent usage if that plugin is detected + +v1.4.1: fixed current path not being restored when using keyboard to tab away from the menu completely + optimised code further - now less code + removed addself() in favour of backward compatible add(this) + also remove new mouseenter/mouseleave events on window.unload (due to paranoia) + +v1.4.2: 3rd July 2008. added semi-colon at start of superfish.js file to avert script concatenation errors + added pathLevels option to limit the depth of submenus that get restored by pathClass + CSS of main example hugely simplified - other example CSS files less-so. + - top level menu items are not fixed width + - only need to set submenu widths in one place. + - various other improvements. + - class names used in all CSS files are changed to be less generic + released optional Supersubs plugin which dynamically adjusts submenu widths + attach everything to jQuery.fn.superfish to clean up jQuery namespace + removed the multi-tier-all-horizontal-example as it was never a great idea and doesn't seem to be in use + Update documentation text and remove certain caveats which were there to support users of much older versions of Superfish + Documentation now show how to apply bgIgrame 2.1 - it's much easier than before + Add all links and their focus and blur events to the onunload unbind - paranoid about memory leaks + +v1.4.3 5th July 2008. documentation completely redone using Mike Alsup's templates. + CSS revised so that all types of menu use superfish.css as a base. Include additional CSS files to acheive alternate styles. + class="sf-menu sf-vertical" creates vertical menu, class="sf-menu sf-navbar" creates nav-bar style menu + +v1.4.4 7th July 2008. arrows feature added. If option 'autoArrows' is true, auto-appends (spans) to anchors that have a ul submenu sibling, + and adds class 'sf-with-ul' to anchor. + CSS added to style new arrows, including an 8-bit alpha (NOT INDEXED!) transparent png of arrow - degrades to solid for IE6. + Manually add arrow mark-up to docs and disable autoArrows (via defaults option) to maintain decent performance (for docs page) + Update docs, including zip download, to suit. + Fix CSS bug that had the third tier of the navbar-style menu visible when JS not available. + +v1.4.5 9 July 2008. decreased code weight + added drop shadows for capable browsers - added css and 8-bit alpha transparent png image for shadow + remove support for jQuery v<1.2 + remove unload clean-up which was there to solve garbage collection problems in early jQuery versions + remove toggling 'visibility' on hide and show which as a fix for an IE bug that is no longer exhibited + removed need for getOpts, rewrote getMenu + use [].join('') instead of string concatenation for performance increase - probably very slight in this case + change selector in 'over' function from '.'+o.hoverClass to 'li.'+o.hoverClass + +v1.4.6 added workaround for IE7 shadows. If animation alters opacity then shadow is hidden during the animation and appears after. + This required some JS and a line of CSS, so created shortcut references to lighten code further. + +v1.4.7 added back in the visibility toggle that was removed in 1.4.5 as the bug is indeed still exhibited by IE6 & 7 + tweaked the look of the shadow slightly and use nicer 32bit png as I now find they behave the same as 8bit png with regard to fades in IE7 + +v1.4.8 fix over-sight: using 32bit png meant that the shadow image did show in IE6. Rather than go back to 8bit, add code to exclude IE6 from getting shadow class. + use new folder structure recommended by Matt from TopicTrack, for easier updates. \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-navbar.css b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-navbar.css new file mode 100644 index 0000000..68c7135 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-navbar.css @@ -0,0 +1,93 @@ + +/*** adding the class sf-navbar in addition to sf-menu creates an all-horizontal nav-bar menu ***/ +.sf-navbar { + background: #BDD2FF; + height: 2.5em; + padding-bottom: 2.5em; + position: relative; +} +.sf-navbar li { + background: #AABDE6; + position: static; +} +.sf-navbar a { + border-top: none; +} +.sf-navbar li ul { + width: 44em; /*IE6 soils itself without this*/ +} +.sf-navbar li li { + background: #BDD2FF; + position: relative; +} +.sf-navbar li li ul { + width: 13em; +} +.sf-navbar li li li { + width: 100%; +} +.sf-navbar ul li { + width: auto; + float: left; +} +.sf-navbar a, .sf-navbar a:visited { + border: none; +} +.sf-navbar li.current { + background: #BDD2FF; +} +.sf-navbar li:hover, +.sf-navbar li.sfHover, +.sf-navbar li li.current, +.sf-navbar a:focus, .sf-navbar a:hover, .sf-navbar a:active { + background: #BDD2FF; +} +.sf-navbar ul li:hover, +.sf-navbar ul li.sfHover, +ul.sf-navbar ul li:hover li, +ul.sf-navbar ul li.sfHover li, +.sf-navbar ul a:focus, .sf-navbar ul a:hover, .sf-navbar ul a:active { + background: #D1DFFF; +} +ul.sf-navbar li li li:hover, +ul.sf-navbar li li li.sfHover, +.sf-navbar li li.current li.current, +.sf-navbar ul li li a:focus, .sf-navbar ul li li a:hover, .sf-navbar ul li li a:active { + background: #E6EEFF; +} +ul.sf-navbar .current ul, +ul.sf-navbar ul li:hover ul, +ul.sf-navbar ul li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ +} +ul.sf-navbar .current ul ul { + top: -999em; +} + +.sf-navbar li li.current > a { + font-weight: bold; +} + +/*** point all arrows down ***/ +/* point right for anchors in subs */ +.sf-navbar ul .sf-sub-indicator { background-position: -10px -100px; } +.sf-navbar ul a > .sf-sub-indicator { background-position: 0 -100px; } +/* apply hovers to modern browsers */ +.sf-navbar ul a:focus > .sf-sub-indicator, +.sf-navbar ul a:hover > .sf-sub-indicator, +.sf-navbar ul a:active > .sf-sub-indicator, +.sf-navbar ul li:hover > a > .sf-sub-indicator, +.sf-navbar ul li.sfHover > a > .sf-sub-indicator { + background-position: -10px -100px; /* arrow hovers for modern browsers*/ +} + +/*** remove shadow on first submenu ***/ +.sf-navbar > li > ul { + background: transparent; + padding: 0; + -moz-border-radius-bottomleft: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + -webkit-border-bottom-left-radius: 0; +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-vertical.css b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-vertical.css new file mode 100644 index 0000000..8025b78 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish-vertical.css @@ -0,0 +1,23 @@ +/*** adding sf-vertical in addition to sf-menu creates a vertical menu ***/ +.sf-vertical, .sf-vertical li { + width: 10em; +} +/* this lacks ul at the start of the selector, so the styles from the main CSS file override it where needed */ +.sf-vertical li:hover ul, +.sf-vertical li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** alter arrow directions ***/ +.sf-vertical .sf-sub-indicator { background-position: -10px 0; } /* IE6 gets solid image only */ +.sf-vertical a > .sf-sub-indicator { background-position: 0 0; } /* use translucent arrow for modern browsers*/ + +/* hover arrow direction for modern browsers*/ +.sf-vertical a:focus > .sf-sub-indicator, +.sf-vertical a:hover > .sf-sub-indicator, +.sf-vertical a:active > .sf-sub-indicator, +.sf-vertical li:hover > a > .sf-sub-indicator, +.sf-vertical li.sfHover > a > .sf-sub-indicator { + background-position: -10px 0; /* arrow hovers for modern browsers*/ +} \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish.css b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish.css new file mode 100644 index 0000000..cc33fdb --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/css/superfish.css @@ -0,0 +1,136 @@ + +/*** ESSENTIAL STYLES ***/ +.sf-menu, .sf-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.sf-menu { + line-height: 1.0; +} +.sf-menu ul { + position: absolute; + top: -999em; + width: 10em; /* left offset of submenus need to match (see below) */ +} +.sf-menu ul li { + width: 100%; +} +.sf-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.sf-menu li { + float: left; + position: relative; +} +.sf-menu a { + display: block; + position: relative; +} +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ + z-index: 99; +} +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** DEMO SKIN ***/ +.sf-menu { + float: left; + margin-bottom: 1em; +} +.sf-menu a { + border-left: 1px solid #fff; + border-top: 1px solid #CFDEFF; + padding: .75em 1em; + text-decoration:none; +} +.sf-menu a, .sf-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #13a; +} +.sf-menu li { + background: #BDD2FF; +} +.sf-menu li li { + background: #AABDE6; +} +.sf-menu li li li { + background: #9AAEDB; +} +.sf-menu li:hover, .sf-menu li.sfHover, +.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active { + background: #CFDEFF; + outline: 0; +} + +/*** arrows **/ +.sf-menu a.sf-with-ul { + padding-right: 2.25em; + min-width: 1px; /* trigger IE7 hasLayout so spans position accurately */ +} +.sf-sub-indicator { + position: absolute; + display: block; + right: .75em; + top: 1.05em; /* IE6 only */ + width: 10px; + height: 10px; + text-indent: -999em; + overflow: hidden; + background: url('../images/arrows-ffffff.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */ +} +a > .sf-sub-indicator { /* give all except IE6 the correct values */ + top: .8em; + background-position: 0 -100px; /* use translucent arrow for modern browsers*/ +} +/* apply hovers to modern browsers */ +a:focus > .sf-sub-indicator, +a:hover > .sf-sub-indicator, +a:active > .sf-sub-indicator, +li:hover > a > .sf-sub-indicator, +li.sfHover > a > .sf-sub-indicator { + background-position: -10px -100px; /* arrow hovers for modern browsers*/ +} + +/* point right for anchors in subs */ +.sf-menu ul .sf-sub-indicator { background-position: -10px 0; } +.sf-menu ul a > .sf-sub-indicator { background-position: 0 0; } +/* apply hovers to modern browsers */ +.sf-menu ul a:focus > .sf-sub-indicator, +.sf-menu ul a:hover > .sf-sub-indicator, +.sf-menu ul a:active > .sf-sub-indicator, +.sf-menu ul li:hover > a > .sf-sub-indicator, +.sf-menu ul li.sfHover > a > .sf-sub-indicator { + background-position: -10px 0; /* arrow hovers for modern browsers*/ +} + +/*** shadows for all but IE6 ***/ +.sf-shadow ul { + background: url('../images/shadow.png') no-repeat bottom right; + padding: 0 8px 9px 0; + -moz-border-radius-bottomleft: 17px; + -moz-border-radius-topright: 17px; + -webkit-border-top-right-radius: 17px; + -webkit-border-bottom-left-radius: 17px; +} +.sf-shadow ul.sf-shadow-off { + background: transparent; +} diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/arrows-ffffff.png b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/arrows-ffffff.png new file mode 100644 index 0000000..995df52 Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/arrows-ffffff.png differ diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/shadow.png b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/shadow.png new file mode 100644 index 0000000..c04d21b Binary files /dev/null and b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/images/shadow.png differ diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/hoverIntent.js b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/hoverIntent.js new file mode 100644 index 0000000..91da57b --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/hoverIntent.js @@ -0,0 +1,84 @@ +(function($){ + /* hoverIntent by Brian Cherne */ + $.fn.hoverIntent = function(f,g) { + // default configuration options + var cfg = { + sensitivity: 7, + interval: 100, + timeout: 0 + }; + // override configuration options with user supplied object + cfg = $.extend(cfg, g ? { over: f, out: g } : f ); + + // instantiate variables + // cX, cY = current X and Y position of mouse, updated by mousemove event + // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval + var cX, cY, pX, pY; + + // A private function for getting mouse position + var track = function(ev) { + cX = ev.pageX; + cY = ev.pageY; + }; + + // A private function for comparing current and previous mouse position + var compare = function(ev,ob) { + ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); + // compare mouse positions to see if they've crossed the threshold + if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) { + $(ob).unbind("mousemove",track); + // set hoverIntent state to true (so mouseOut can be called) + ob.hoverIntent_s = 1; + return cfg.over.apply(ob,[ev]); + } else { + // set previous coordinates for next time + pX = cX; pY = cY; + // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs) + ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval ); + } + }; + + // A private function for delaying the mouseOut function + var delay = function(ev,ob) { + ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); + ob.hoverIntent_s = 0; + return cfg.out.apply(ob,[ev]); + }; + + // A private function for handling mouse 'hovering' + var handleHover = function(e) { + // next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut + var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; + while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } } + if ( p == this ) { return false; } + + // copy objects to be passed into t (required for event object to be passed in IE) + var ev = jQuery.extend({},e); + var ob = this; + + // cancel hoverIntent timer if it exists + if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } + + // else e.type == "onmouseover" + if (e.type == "mouseover") { + // set "previous" X and Y position based on initial entry point + pX = ev.pageX; pY = ev.pageY; + // update "current" X and Y position based on mousemove + $(ob).bind("mousemove",track); + // start polling interval (self-calling timeout) to compare mouse coordinates over time + if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );} + + // else e.type == "onmouseout" + } else { + // unbind expensive mousemove event + $(ob).unbind("mousemove",track); + // if hoverIntent state is true, then call the mouseOut function after the specified delay + if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );} + } + }; + + // bind the function to the two event listeners + return this.mouseover(handleHover).mouseout(handleHover); + }; + +})(jQuery); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery-1.2.6.min.js b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery-1.2.6.min.js new file mode 100644 index 0000000..82b98e1 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery-1.2.6.min.js @@ -0,0 +1,32 @@ +/* + * jQuery 1.2.6 - New Wave Javascript + * + * Copyright (c) 2008 John Resig (jquery.com) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ + * $Rev: 5685 $ + */ +(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else +return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else +return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else +selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else +this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else +return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else +jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else +jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
          "]||!tags.indexOf("
          "]||(!tags.indexOf("
          "]||!tags.indexOf("
          "]||jQuery.browser.msie&&[1,"div
          ","
          "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else +ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else +while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else +for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
          ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else +xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else +jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else +for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else +s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else +e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); \ No newline at end of file diff --git a/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery.bgiframe.min.js b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery.bgiframe.min.js new file mode 100644 index 0000000..b5af520 --- /dev/null +++ b/ehcp/net2ftp/skins/shinra/js/superfish-1.4.8/js/jquery.bgiframe.min.js @@ -0,0 +1,10 @@ +/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * $LastChangedDate: 2007-06-19 20:25:28 -0500 (Tue, 19 Jun 2007) $ + * $Rev: 2111 $ + * + * Version 2.1 + */ +(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&parseInt($.browser.version)<=6){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html=''; + htmlForPopup += "
          "; + // Open directly via API + $.magnificPopup.open({ + items: { + src: htmlForPopup, + type: 'inline' + }, + callbacks: { + open: function() { + modifyMagnificThemeColors(); + }, + close: function() { + deselectDomain(); + } + } + }); + } + }); + */ + + $("div.header").click(function(e){ + location.href="index.php?op=deselectdomain"; + }); + + // Events for dropdown menus + $(document).on("mouseenter", ".menuItem", function(){ + $(this).find('.ddMenu').slideDown(200); + }); + $(document).on("mouseleave", ".menuItem", function(){ + $(this).find('.ddMenu').hide(); + }); + $(document).on("click", ".fakeLink", function(){ + e.preventDefault(); + }); + + // Process drop down menu item clicks + $(document).on("click", ".ddMenuLink, .openInWindowLink", function(e){ + var goToURL = $(this).find('a').attr("href"); + if(!$(this).hasClass("sameWindow")){ + if(goToURL != null && goToURL != ""){ + window.open(goToURL); + } + }else{ + if(goToURL != null && goToURL != ""){ + location.href=goToURL; + } + } + }); + + // Check if domain has been selected and run domain selected function + checkDomainSelected(); + + // Go and add check all and uncheck all to genericList tables + addSelectAllAndDeselectAll(); + }); + + function getColor(action, iterations){ + var colorToReturn = defaultColor; + + if(action == "light"){ + for (var i = 0; i < iterations; i++) { + colorToReturn = $.xcolor.lighten(colorToReturn).getHex(); + } + }else if(action == "dark"){ + for (var i = 0; i < iterations; i++) { + colorToReturn = $.xcolor.darken(colorToReturn).getHex(); + } + } + + return colorToReturn; + + } + + function setControls(){ + + if(contrastStyle == "light"){ + // Set background colors + $('.darkBG').css('backgroundColor', darkColor); + $('.lightBG').css('backgroundColor', lightColor); + $('.colorBG').css('backgroundColor', defaultColor); + $('.superDarkBG').css('backgroundColor', superDarkColor); + $('.superLightBG').css('backgroundColor', superLightColor); + $('body').css('backgroundColor', lightColor); + $('a').css('color', superDarkColor); + $('p').css('color', '#000000'); + $('div.footer p').css('color', '#FFFFFF'); + $('input').css('color', '#000000'); + $('input').css('backgroundColor', '#FFFFFF'); + $('textarea').css('color', '#000000'); + $('textarea').css('backgroundColor', '#FFFFFF'); + $('input[type=submit], button, input[type=button]').css('backgroundColor', lightColor); + $('input[type=submit], button, input[type=button]').css('color', '#000000'); + $('.ehcp_content').css('backgroundColor', '#FFFFFF'); + $('.sessionBar').css('backgroundColor', '#FFFFFF'); + $('tr.itemRow').css('backgroundColor', '#FFFFFF'); + $('div.similarFunctions a').css('backgroundColor', lightColor); + $('.success').css('color', '#69C657'); + $('.error').css('color', '#FF0000'); + + + // Set text colors + $('.darkText').css('color', darkColor); + $('.lightText').css('color', lightColor); + $('.colorText').css('color', defaultColor); + $('.menuItem').css('color', '#FFFFFF'); + $('.changeColor').css('color', '#000000'); + $('td.category').css('color', '#000000'); + $('.titleDiv').css('color', '#FFFFFF'); + $('.inWidth').css('color', '#000000'); + + // Set borders + $('.darkBorderBottom').css('border-bottom', 'solid 4px ' + darkColor); + $('input[type=text]').css('border', 'solid 2px ' + darkColor); + $('input[type=password]').css('border', 'solid 2px ' + darkColor); + $('input[type=submit], button, input[type=button]').css('border', 'solid 2px ' + darkColor); + $('textarea').css('border', 'solid 2px ' + darkColor); + $('td.list, th.list').css('border', 'solid 1px black'); + $('table.genericList td, table.genericList th').css('border', 'solid 1px black'); + + // Update color picker control div + $('#colorpicker').css('backgroundColor', defaultColor); + $('#colorpicker').css('border-color', superDarkColor); + + // Set hover events to modify hover attributes + $('.menuItem').hover(function(){ + $(this).css('backgroundColor', lightColor); + $(this).css('color', superDarkColor); + },function() { + $(this).css('backgroundColor', darkColor); + $(this).css('color', '#FFFFFF'); + }); + + $('div.items').hover(function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', '#FFFFFF'); + },function() { + $(this).css('backgroundColor', ''); + $(this).css('color', darkColor); + }); + + $('tr.itemRow').hover(function(){ + $(this).css('backgroundColor', lightColor); + $(this).find('td.category').css('font-weight', 'bold'); + },function() { + $(this).css('backgroundColor', ''); + $(this).find('td.category').css('font-weight', 'normal'); + }); + + $('a').hover(function(){ + $(this).css('color', darkColor); + },function() { + $(this).css('color', superDarkColor); + }); + + $('div.similarFunctions a').hover(function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', lightColor); + },function() { + $(this).css('backgroundColor', lightColor); + $(this).css('color', superDarkColor); + }); + + $('input[type=submit], button, input[type=button]').hover(function(){ + $(this).css('border', '2px solid ' + superDarkColor); + },function(){ + $(this).css('border', '2px solid ' + darkColor); + }); + + $('input[type=text]').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('input[type=text]').blur(function(){ + $(this).css('border', '2px solid ' + darkColor); + $(this).css('box-shadow', ''); + }); + + $('input[type=password]').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('input[type=password]').blur(function(){ + $(this).css('border', '2px solid ' + darkColor); + $(this).css('box-shadow', ''); + }); + + $('textarea').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('textarea').blur(function(){ + $(this).css('border', '2px solid ' + darkColor); + $(this).css('box-shadow', ''); + }); + + // Drop down items: + $(document).off("mouseenter", ".ddMenuLink").on("mouseenter", ".ddMenuLink", function(){ + $(this).css('backgroundColor', lightColor); + $(this).css('color', superDarkColor); + $(this).find('.fakeLink').css('color', superDarkColor); + }); + $(document).off("mouseleave", ".ddMenuLink").on("mouseleave", ".ddMenuLink", function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', '#FFFFFF'); + $(this).find('.fakeLink').css('color', '#FFFFFF'); + }); + + }else if(contrastStyle == "dark"){ + // Set background colors + $('.darkBG').css('backgroundColor', lightColor); + $('.lightBG').css('backgroundColor', darkColor); + $('.colorBG').css('backgroundColor', defaultColor); + $('.superDarkBG').css('backgroundColor', superLightColor); + $('.superLightBG').css('backgroundColor', superDarkColor); + $('body').css('backgroundColor', darkColor); + $('a').css('color', superLightColor); + $('p').css('color', '#FFFFFF'); + $('div.footer p').css('color', '#FFFFFF'); + $('input').css('color', '#FFFFFF'); + $('input').css('backgroundColor', '#000000'); + $('textarea').css('color', '#FFFFFF'); + $('textarea').css('backgroundColor', '#000000'); + $('input[type=submit], button, input[type=button]').css('backgroundColor', superLightColor); + $('input[type=submit], button, input[type=button]').css('color', '#000000'); + $('.ehcp_content').css('backgroundColor', superDarkColor); + $('.sessionBar').css('backgroundColor', superDarkColor); + $('tr.itemRow').css('backgroundColor', darkColor); + $('div.similarFunctions a').css('backgroundColor', darkColor); + $('.success').css('color', '#58ff53'); + $('.error').css('color', '#fc83ff'); + + + // Set text colors + $('.darkText').css('color', lightColor); + $('.lightText').css('color', darkColor); + $('.colorText').css('color', defaultColor); + $('.menuItem').css('color', darkColor); + $('.changeColor').css('color', '#FFFFFF'); + $('td.category').css('color', '#FFFFFF'); + $('.titleDiv').css('color', '#000000'); + $('.inWidth').css('color', '#FFFFFF'); + + // Set borders + $('.darkBorderBottom').css('border-bottom', 'solid 4px ' + lightColor); + $('input[type=text]').css('border', 'solid 2px ' + lightColor); + $('input[type=password]').css('border', 'solid 2px ' + lightColor); + $('input[type=submit], button, input[type=button]').css('border', 'solid 2px ' + defaultColor); + $('textarea').css('border', 'solid 2px ' + lightColor); + $('td.list, th.list').css('border', 'solid 1px white'); + $('table.genericList td, table.genericList th').css('border', 'solid 1px white'); + + // Update color picker control div + $('#colorpicker').css('backgroundColor', defaultColor); + $('#colorpicker').css('border-color', superLightColor); + + // Set hover events to modify hover attributes + $('.menuItem').hover(function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', lightColor); + },function() { + $(this).css('backgroundColor', lightColor); + $(this).css('color', '#000000'); + }); + + $('div.items').hover(function(){ + $(this).css('backgroundColor', lightColor); + $(this).css('color', '#000000'); + },function() { + $(this).css('backgroundColor', ''); + $(this).css('color', lightColor); + }); + + $('tr.itemRow').hover(function(){ + $(this).css('backgroundColor', '#000000'); + $(this).find('td.category').css('font-weight', 'bold'); + },function() { + $(this).css('backgroundColor', darkColor); + $(this).find('td.category').css('font-weight', 'normal'); + }); + + $('a').hover(function(){ + $(this).css('color', lightColor); + },function() { + $(this).css('color', superLightColor); + }); + + $('div.similarFunctions a').hover(function(){ + $(this).css('backgroundColor', lightColor); + $(this).css('color', superDarkColor); + },function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', superLightColor); + }); + + $('input[type=submit], button, input[type=button]').hover(function(){ + $(this).css('border', '2px solid ' + lightColor); + },function(){ + $(this).css('border', '2px solid ' + defaultColor); + }); + + $('input[type=text]').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('input[type=text]').blur(function(){ + $(this).css('border', '2px solid ' + lightColor); + $(this).css('box-shadow', ''); + }); + + $('input[type=password]').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('input[type=password]').blur(function(){ + $(this).css('border', '2px solid ' + lightColor); + $(this).css('box-shadow', ''); + }); + + $('textarea').focus(function(){ + $(this).css('border', '2px solid ' + defaultColor); + $(this).css('box-shadow', '0 0 10px ' + defaultColor); + }); + + $('textarea').blur(function(){ + $(this).css('border', '2px solid ' + lightColor); + $(this).css('box-shadow', ''); + }); + + // Drop down items: + $(document).off("mouseenter", ".ddMenuLink").on("mouseenter", ".ddMenuLink", function(){ + $(this).css('backgroundColor', darkColor); + $(this).css('color', lightColor); + $(this).find('.fakeLink').css('color', lightColor); + }); + $(document).off("mouseleave", ".ddMenuLink").on("mouseleave", ".ddMenuLink", function(){ + $(this).css('backgroundColor', lightColor); + $(this).css('color', '#000000'); + $(this).find('.fakeLink').css('color', '#000000'); + }); + } + + handleDropDownThemeing(); + + } + + function changeComponentColors(){ + // Get our color variants + darkColor = getColor('dark', 3); + lightColor = getColor('light', 3); + superDarkColor = getColor('dark', 5); + superLightColor = getColor('light', 5); + + // Set the controls based on initial load + setControls(); + } + + function updateUserThemeColorOption(){ + $.ajax({ + url: "index.php?op=updatethemecolor", + type: "POST", + data: { theme_color:defaultColor }, + }).done(function() { + $('#infobox').html('

          Saved color settings in the database!

          '); + }); + } + + function updateUserContrastThemeOption(contrast_opt){ + $.ajax({ + url: "index.php?op=updatethemecontrast", + type: "POST", + data: { theme_contrast:contrast_opt }, + }).done(function() { + $('#infobox').html('

          Saved theme contrast style in the database!

          '); + }); + } + + function modifyMagnificThemeColors(){ + if(contrastStyle == "light"){ + $(".white-popup").css('outline', 'solid 10px ' + lightColor); + $(".magnificTitle").css('background-color', darkColor); + + $('.mfp-close').hover(function(){ + $(this).css('backgroundColor', superDarkColor); + },function() { + $(this).css('backgroundColor', 'transparent'); + }); + }else if(contrastStyle == "dark"){ + $(".white-popup").css('border', 'solid 10px ' + darkColor); + $(".magnificTitle").css('background-color', lightColor); + $(".magnificTitle").css('color', superDarkColor); + $('.mfp-close').css('color', '#000000'); + $('.magnificContentsDiv').css('background-color', darkColor); + $('.magnificContentsDiv').css('color', '#FFFFFF'); + + $('.mfp-close').hover(function(){ + $(this).css('backgroundColor', superLightColor); + $(this).css('color', '#000000'); + },function() { + $(this).css('backgroundColor', 'transparent'); + $(this).css('color', '#000000'); + }); + } + } + + function collapse(image){ + + // Find parent table element + + var tbl=image.parentNode; + while (tbl && tbl.nodeName !== "TABLE") { + tbl = tbl.parentNode; + } + + // Now we can manipulate the entire table + var tblRows = tbl.rows; + for(var i=0; i' + myDomainData[i].domainname + ''; + containerInnerHTML += domainLi; + } + containerInnerHTML += ''; + + $(container).append(containerInnerHTML); + + $(".ddMenu").width('30%'); + + handleDropDownThemeing(); + } + } + }); + } + + function handleDropDownThemeing(){ + if(contrastStyle == "light"){ + $('.ddMenuLink').css('backgroundColor', darkColor); + $('.fakeLink').css('color', '#FFFFFF'); + $('.ddMenuLink').css('outline', '2px solid ' + superDarkColor); + }else if(contrastStyle == "dark"){ + $('.ddMenuLink').css('backgroundColor', lightColor); + $('.fakeLink').css('color', darkColor); + $('.ddMenuLink').css('outline', '2px solid ' + superLightColor); + } + } + + function handleFloatBarThemeing(){ + if(contrastStyle == "dark"){ + $('.topRightDiv').css('backgroundColor', lightColor); + $('.chooseDomain').css('color', darkColor); + }else if(contrastStyle == "light"){ + $('.topRightDiv').css('backgroundColor', darkColor); + $('.chooseDomain').css('color', lightColor); + } + } + + function deselectDomain(){ + $.ajax({ + url: "index.php?op=deselectdomain", + type: "POST", + }).done(function() { + + }); + } + + function buildFloatBar(){ + + var htmlFloatBar = '
          '; + htmlFloatBar += '

          Domain:   

          '; + htmlFloatBar += '
          '; + htmlFloatBar += '
          '; + $("body").append(htmlFloatBar); + + // Don't theme this since our icons are a specific color + // handleFloatBarThemeing(); + + // Floaty bar + $(document).scroll(function() { + if($(document).scrollTop() >= 200){ + $(".topRightDiv").css('position', 'fixed'); + $(".topRightDiv").css('display', 'block'); + }else{ + $(".topRightDiv").css('position', 'absolute'); + $(".topRightDiv").css('display', 'none'); + } + }); + + // Build select list in floatbar with user's domains + + // Make AJAX call to get user's domains + $.ajax({ + type: "POST", + url: "index.php?op=getmydomainsobject", + success: function(data) { + myDomainData = data; + for(var i = 0; i < myDomainData.length; i++){ + var optionStr = ''; + $(".selectDomainDD").append(optionStr); + } + // Select the currently active domain + $(".selectDomainDD").val(selectedDomainName); + } + }); + + $(".switchDomainButton").click(function() { + var opStr = "op=choosedomaingonextop&nextop=&domainname=" + $(".selectDomainDD").val(); + location.href="index.php?" + opStr; + }); + } + + function addSelectAllAndDeselectAll(){ + if($('table.genericList').length){ + + //bind check all and uncheck all + $(document).on("click", ".checkAll", function(){ + var parentTable = $(this).prevAll('table.genericList'); + if(parentTable.length){ + parentTable.find('input:checkbox').each(function(e){ + $(this).prop('checked', true); + }); + } + }); + + $(document).on("click", ".uncheckAll", function(){ + var parentTable = $(this).prevAll('table.genericList'); + if(parentTable.length){ + parentTable.find('input:checkbox').each(function(e){ + $(this).prop('checked', false); + }); + } + }); + + // Add check all and uncheck all functionality after the table. + $('table.genericList').each(function(e){ + $(this).after("Check All  |  Uncheck All
          "); + }); + } + } diff --git a/ehcp/templates/picante/general/js/jquery.js b/ehcp/templates/picante/general/js/jquery.js new file mode 100644 index 0000000..c50442b --- /dev/null +++ b/ehcp/templates/picante/general/js/jquery.js @@ -0,0 +1,5 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
          a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
          t
          ",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
          ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
          ",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
          ","
          "],area:[1,"",""],param:[1,"",""],thead:[1,"","
          "],tr:[2,"","
          "],col:[2,"","
          "],td:[3,"","
          "],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
          ","
          "]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){n.types.push(Q),x("BeforeChange",function(a,b,c){b!==c&&(b===Q?S():c===Q&&S(!0))}),x(b+"."+Q,function(){S()})},getIframe:function(b,c){var d=b.src,e=n.st.iframe;a.each(e.patterns,function(){if(d.indexOf(this.index)>-1)return this.id&&(typeof this.id=="string"?d=d.substr(d.lastIndexOf(this.id)+this.id.length,d.length):d=this.id.call(this,d)),d=this.src.replace("%id%",d),!1});var f={};return e.srcAction&&(f[e.srcAction]=d),n._parseMarkup(c,f,b),n.updateStatus("ready"),c}}});var T=function(a){var b=n.items.length;return a>b-1?a-b:a<0?b+a:a},U=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=n.st.gallery,d=".mfp-gallery",e=Boolean(a.fn.mfpFastClick);n.direction=!0;if(!c||!c.enabled)return!1;v+=" mfp-gallery",x(g+d,function(){c.navigateByImgClick&&n.wrap.on("click"+d,".mfp-img",function(){if(n.items.length>1)return n.next(),!1}),t.on("keydown"+d,function(a){a.keyCode===37?n.prev():a.keyCode===39&&n.next()})}),x("UpdateStatus"+d,function(a,b){b.text&&(b.text=U(b.text,n.currItem.index,n.items.length))}),x(f+d,function(a,b,d,e){var f=n.items.length;d.counter=f>1?U(c.tCounter,e.index,f):""}),x("BuildControls"+d,function(){if(n.items.length>1&&c.arrows&&!n.arrowLeft){var b=c.arrowMarkup,d=n.arrowLeft=a(b.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(m),f=n.arrowRight=a(b.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(m),g=e?"mfpFastClick":"click";d[g](function(){n.prev()}),f[g](function(){n.next()}),n.isIE7&&(y("b",d[0],!1,!0),y("a",d[0],!1,!0),y("b",f[0],!1,!0),y("a",f[0],!1,!0)),n.container.append(d.add(f))}}),x(h+d,function(){n._preloadTimeout&&clearTimeout(n._preloadTimeout),n._preloadTimeout=setTimeout(function(){n.preloadNearbyImages(),n._preloadTimeout=null},16)}),x(b+d,function(){t.off(d),n.wrap.off("click"+d),n.arrowLeft&&e&&n.arrowLeft.add(n.arrowRight).destroyMfpFastClick(),n.arrowRight=n.arrowLeft=null})},next:function(){n.direction=!0,n.index=T(n.index+1),n.updateItemHTML()},prev:function(){n.direction=!1,n.index=T(n.index-1),n.updateItemHTML()},goTo:function(a){n.direction=a>=n.index,n.index=a,n.updateItemHTML()},preloadNearbyImages:function(){var a=n.st.gallery.preload,b=Math.min(a[0],n.items.length),c=Math.min(a[1],n.items.length),d;for(d=1;d<=(n.direction?c:b);d++)n._preloadItem(n.index+d);for(d=1;d<=(n.direction?b:c);d++)n._preloadItem(n.index-d)},_preloadItem:function(b){b=T(b);if(n.items[b].preloaded)return;var c=n.items[b];c.parsed||(c=n.parseEl(b)),z("LazyLoad",c),c.type==="image"&&(c.img=a('').on("load.mfploader",function(){c.hasSize=!0}).on("error.mfploader",function(){c.hasSize=!0,c.loadError=!0,z("LazyLoadError",c)}).attr("src",c.src)),c.preloaded=!0}}});var V="retina";a.magnificPopup.registerModule(V,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=n.st.retina,b=a.ratio;b=isNaN(b)?b():b,b>1&&(x("ImageHasSize."+V,function(a,c){c.img.css({"max-width":c.img[0].naturalWidth/b,width:"100%"})}),x("ElementParse."+V,function(c,d){d.src=a.replaceSrc(d,b)}))}}}}),function(){var b=1e3,c="ontouchstart"in window,d=function(){r.off("touchmove"+f+" touchend"+f)},e="mfpFastClick",f="."+e;a.fn.mfpFastClick=function(e){return a(this).each(function(){var g=a(this),h;if(c){var i,j,k,l,m,n;g.on("touchstart"+f,function(a){l=!1,n=1,m=a.originalEvent?a.originalEvent.touches[0]:a.touches[0],j=m.clientX,k=m.clientY,r.on("touchmove"+f,function(a){m=a.originalEvent?a.originalEvent.touches:a.touches,n=m.length,m=m[0];if(Math.abs(m.clientX-j)>10||Math.abs(m.clientY-k)>10)l=!0,d()}).on("touchend"+f,function(a){d();if(l||n>1)return;h=!0,a.preventDefault(),clearTimeout(i),i=setTimeout(function(){h=!1},b),e()})})}g.on("click"+f,function(){h||e()})})},a.fn.destroyMfpFastClick=function(){a(this).off("touchstart"+f+" click"+f),c&&r.off("touchmove"+f+" touchend"+f)}}(),B()}) diff --git a/ehcp/templates/picante/spanish/ReadMe.txt b/ehcp/templates/picante/spanish/ReadMe.txt new file mode 100644 index 0000000..499eb35 --- /dev/null +++ b/ehcp/templates/picante/spanish/ReadMe.txt @@ -0,0 +1,11 @@ +Picante is a multi-colored theme written by Eric Arnol-Martin for EHCP Force Edition using proper HTML, CSS, and Javascript. Feel free to modify and change any of my code. If you have any comments or suggestions, by all means, please contact me by email. + +Should Javascript be disabled in a user's browser, the theme should still load without errors. It will default to the green theme by default. + +This theme has been extensively tested in Firefox and Internet Explorer only. Download and install EHCP at http://ehcpforce.tk/ + +Author: Eric Arnol-Martin +Email: earnolmartin@gmail.com +Date: 8/14/2014 + +This wouldn't be possible without EHCP (http://ehcpforce.tk/), the best free hosting web control panel / web hosting package out on the net. Thanks to EHCP! Keep going strong! diff --git a/ehcp/templates/picante/spanish/defaultindexfordomains_spanish.html b/ehcp/templates/picante/spanish/defaultindexfordomains_spanish.html new file mode 100644 index 0000000..bf7bcbc --- /dev/null +++ b/ehcp/templates/picante/spanish/defaultindexfordomains_spanish.html @@ -0,0 +1,4 @@ +
          +

          Website Under Construction

          +

          EHCP Force Edition

          +
          diff --git a/ehcp/templates/picante/spanish/homepage_domainadmin_forreseller_spanish.html b/ehcp/templates/picante/spanish/homepage_domainadmin_forreseller_spanish.html new file mode 100755 index 0000000..b27afd3 --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_domainadmin_forreseller_spanish.html @@ -0,0 +1,129 @@ +
          + + + + + + +
          +
          Operaciones de Dominio
          collapse +
          +
          Add
          Agregar SubDomains +
          + Agregar SubDomains
          Personalisado HTTP +
          + Personalisado HTTP
          Personalisado DNS +
          + Personalisado DNS
          Add Password Protected Directories +
          + Add Password Protected Directories
          Add SSL Certificate +
          + Add SSL Certificate
          Edit
          Editar Plantilla de Web Personalisada APACHE +
          + Editar Plantilla de Web Personalisada APACHE
          Editar Plantilla de Web Personalisada DNS +
          + Editar Plantilla de Web Personalisada DNS
          Editar Alias de Dominio +
          + Editar Alias de Dominio
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          List
          Lista SubDomains +
          + Lista SubDomains
          Remove
          Remove / List Password Protected Directories +
          + Remove / List Password Protected Directories
          System
          Usa Slave DNS Para Dominio +
          + Usa Slave DNS Para Dominio
          Usa Master DNS Para Dominio +
          + Usa Master DNS Para Dominio
          +
          +
          + + + + + + +
          +
          Operaciones FTP
          collapse +
          +
          Add
          Agregar Usuario General FTP +
          + Agregar Usuario General FTP
          Agregar Usuario FTP Subdominio Acceso +
          + Agregar Usuario FTP Subdominio Acceso
          Agregar Usuario FTP Subdirectorio Acceso +
          + Agregar Usuario FTP Subdirectorio Acceso
          Edit
          Cambiar Contraseña de FTP +
          + Cambiar Contraseña de FTP
          List
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          System
          Administracion de Archivos +
          + Administracion de Archivos
          +
          +
          + + + + + + +
          +
          Operaciones MySQL
          collapse +
          +
          Add
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          Agregar Usuarios MySQL +
          + Agregar Usuarios MySQL
          Agregar MySQL Base de Datos a Usuarios Existentes +
          + Agregar MySQL Base de Datos a Usuarios Existentes
          List
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          System
          PHPMyAdmin +
          + PHPMyAdmin
          +
          +
          + + + + + + +
          +
          Operaciones de Email
          collapse +
          +
          Add
          Agregar Usuario Email +
          + Agregar Usuario Email
          List
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista de Email Forwarders +
          + Lista de Email Forwarders
          +
          +
          + + + + + + +
          +
          Mi Configuracion
          collapse +
          +
          Add
          Facil Instalacion de Scripts +
          + Facil Instalacion de Scripts
          Edit
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          Remove
          Borrar Dominios +
          + Borrar Dominios
          System
          Poner Por Default el Dominio +
          + Poner Por Default el Dominio
          Redirejir Dominios +
          + Redirejir Dominios
          Activar o Desactivar Dominio +
          + Activar o Desactivar Dominio
          Transferir Dominios a Otro Usuario +
          + Transferir Dominios a Otro Usuario
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_domainadmin_spanish.html b/ehcp/templates/picante/spanish/homepage_domainadmin_spanish.html new file mode 100755 index 0000000..0003198 --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_domainadmin_spanish.html @@ -0,0 +1,127 @@ + + + + + + + +
          +
          Operaciones de Dominio
          collapse +
          +
          Add
          Agregar SubDomains +
          + Agregar SubDomains
          Personalisado HTTP +
          + Personalisado HTTP
          Personalisado DNS +
          + Personalisado DNS
          Add Password Protected Directories +
          + Add Password Protected Directories
          Add SSL Certificate +
          + Add SSL Certificate
          Edit
          Editar Plantilla de Web Personalisada APACHE +
          + Editar Plantilla de Web Personalisada APACHE
          Editar Plantilla de Web Personalisada DNS +
          + Editar Plantilla de Web Personalisada DNS
          Editar Alias de Dominio +
          + Editar Alias de Dominio
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          List
          Lista SubDomains +
          + Lista SubDomains
          Remove
          Remove / List Password Protected Directories +
          + Remove / List Password Protected Directories
          System
          Usa Slave DNS Para Dominio +
          + Usa Slave DNS Para Dominio
          Usa Master DNS Para Dominio +
          + Usa Master DNS Para Dominio
          +
          +
          + + + + + + +
          +
          Operaciones FTP
          collapse +
          +
          Add
          Agregar Usuario General FTP +
          + Agregar Usuario General FTP
          Agregar Usuario FTP Subdominio Acceso +
          + Agregar Usuario FTP Subdominio Acceso
          Agregar Usuario FTP Subdirectorio Acceso +
          + Agregar Usuario FTP Subdirectorio Acceso
          Edit
          Cambiar Contraseña de FTP +
          + Cambiar Contraseña de FTP
          List
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          System
          Administracion de Archivos +
          + Administracion de Archivos
          +
          +
          + + + + + + +
          +
          Operaciones MySQL
          collapse +
          +
          Add
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          Agregar Usuarios MySQL +
          + Agregar Usuarios MySQL
          Agregar MySQL Base de Datos a Usuarios Existentes +
          + Agregar MySQL Base de Datos a Usuarios Existentes
          List
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          System
          PHPMyAdmin +
          + PHPMyAdmin
          +
          +
          + + + + + + +
          +
          Operaciones de Email
          collapse +
          +
          Add
          Agregar Usuario Email +
          + Agregar Usuario Email
          List
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista de Email Forwarders +
          + Lista de Email Forwarders
          +
          +
          + + + + + + +
          +
          Mi Configuracion
          collapse +
          +
          Add
          Facil Instalacion de Scripts +
          + Facil Instalacion de Scripts
          Edit
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          Remove
          Borrar Dominios +
          + Borrar Dominios
          System
          Redirejir Dominios +
          + Redirejir Dominios
          Activar o Desactivar Dominio +
          + Activar o Desactivar Dominio
          Transferir Dominios a Otro Usuario +
          + Transferir Dominios a Otro Usuario
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_emailuser_spanish.html b/ehcp/templates/picante/spanish/homepage_emailuser_spanish.html new file mode 100755 index 0000000..efc1fca --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_emailuser_spanish.html @@ -0,0 +1,19 @@ + + + + + + + +
          +
          Operaciones de Email
          collapse +
          +
          Add
          Lista y Agregar Forwarders +
          + Lista y Agregar Forwarders
          Edit
          Cambiar Contraseña +
          + Cambiar Contraseña
          Cambiar Auto Respuesta +
          + Cambiar Auto Respuesta
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_remotehosting_dnsonly_spanish.html b/ehcp/templates/picante/spanish/homepage_remotehosting_dnsonly_spanish.html new file mode 100755 index 0000000..ad20b9d --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_remotehosting_dnsonly_spanish.html @@ -0,0 +1,19 @@ + + + + + + + +
          +
          Remoto Menu de Dominio
          collapse +
          +
          Edit
          Editar Plantilla de Web Personalisada DNS +
          + Editar Plantilla de Web Personalisada DNS
          Remove
          Borrar Dominios +
          + Borrar Dominios
          System
          Cambiar Dominio Servidor IP +
          + Cambiar Dominio Servidor IP
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_reseller_other_spanish.html b/ehcp/templates/picante/spanish/homepage_reseller_other_spanish.html new file mode 100755 index 0000000..f2ea04f --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_reseller_other_spanish.html @@ -0,0 +1,121 @@ + + + + + + + +
          +
          Operaciones de Reventa
          collapse +
          +
          Add
          Agregar Usuario o Cliente +
          + Agregar Usuario o Cliente
          Facil Instalacion de Scripts +
          + Facil Instalacion de Scripts
          Edit
          Actualisacion de Quota (limite del disco duro) +
          + Actualisacion de Quota (limite del disco duro)
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          List
          Lista de Clientes / Usuarios +
          + Lista de Clientes / Usuarios
          System
          Recarga de Zonas DNS +
          + Recarga de Zonas DNS
          Syncroniza Dominios +
          + Syncroniza Dominios
          Contacta Nos +
          + Contacta Nos
          Ayuda Tecnica +
          + Ayuda Tecnica
          Lista de lo Que Tienes Que Hacer +
          + Lista de lo Que Tienes Que Hacer
          +
          +
          + + + + + + +
          +
          Operaciones de Dominio
          collapse +
          +
          Add
          Agregar Dominios a Mi Cuenta +
          + Agregar Dominios a Mi Cuenta
          Adicion de Dominio y Usarios +
          + Adicion de Dominio y Usarios
          Simple Adicion de Dominio y Usarios +
          + Simple Adicion de Dominio y Usarios
          Agregar SubDomains +
          + Agregar SubDomains
          Add Password Protected Directories +
          + Add Password Protected Directories
          Personalisado DNS +
          + Personalisado DNS
          Personalisado HTTP +
          + Personalisado HTTP
          Add SSL Certificate +
          + Add SSL Certificate
          List
          Liste des Domaines +
          + Liste des Domaines
          Lista de Dominios Pasivos +
          + Lista de Dominios Pasivos
          Remove
          Remove / List Password Protected Directories +
          + Remove / List Password Protected Directories
          +
          +
          + + + + + + +
          +
          Operaciones FTP
          collapse +
          +
          Add
          Ajouter des Comptes FTP +
          + Ajouter des Comptes FTP
          List
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          Lista de Usuarios FTP por Dominios +
          + Lista de Usuarios FTP por Dominios
          Lista de Usuarios FTP sin Dominos +
          + Lista de Usuarios FTP sin Dominos
          +
          +
          + + + + + + +
          +
          Operaciones de Email
          collapse +
          +
          Add
          Agregar Usuario Email +
          + Agregar Usuario Email
          List
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista de Email Forwarders +
          + Lista de Email Forwarders
          +
          +
          + + + + + + +
          +
          Operaciones MySQL
          collapse +
          +
          Add
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          List
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_reseller_spanish.html b/ehcp/templates/picante/spanish/homepage_reseller_spanish.html new file mode 100755 index 0000000..8a65bd8 --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_reseller_spanish.html @@ -0,0 +1,113 @@ + + + + + + + +
          +
          Operaciones de Reventa
          collapse +
          +
          Add
          Add New User w/ Hosting Template +
          + Add New User w/ Hosting Template
          Agregar Usuario o Cliente +
          + Agregar Usuario o Cliente
          Agregar Usuario Email +
          + Agregar Usuario Email
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          Agregar MySQL Base de Datos a Usuarios Existentes +
          + Agregar MySQL Base de Datos a Usuarios Existentes
          Agregar Usuarios MySQL +
          + Agregar Usuarios MySQL
          List
          Lista de Clientes / Usuarios +
          + Lista de Clientes / Usuarios
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          +
          +
          + + + + + + +
          +
          Operaciones de Dominio
          collapse +
          +
          Add
          Agregar Dominios a Mi Cuenta +
          + Agregar Dominios a Mi Cuenta
          Agregar Dominios A Granel +
          + Agregar Dominios A Granel
          Agregacion Hosting DNS +
          + Agregacion Hosting DNS
          Agregacion Hosting DNS Para El Usuario +
          + Agregacion Hosting DNS Para El Usuario
          List
          Liste des Domaines +
          + Liste des Domaines
          Lista de Dominios Pasivos +
          + Lista de Dominios Pasivos
          +
          +
          + + + + + + +
          +
          Utilities
          collapse +
          +
          System
          Webmail Client +
          + Webmail Client
          PHPMyAdmin +
          + PHPMyAdmin
          Administracion de Archivos +
          + Administracion de Archivos
          Extplorer File Manager +
          + Extplorer File Manager
          Policyd Management +
          + Policyd Management
          +
          +
          + + + + + + +
          +
          Operaciones del Sistema
          collapse +
          +
          Add
          Add Hosting Plan Template +
          + Add Hosting Plan Template
          Edit
          Cambiar Plantilla +
          + Cambiar Plantilla
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          List
          Lista Copias de los Archivos +
          + Lista Copias de los Archivos
          Remove
          Remove Hosting Plan Template(s) +
          + Remove Hosting Plan Template(s)
          System
          Operaciones Demonio +
          + Operaciones Demonio
          Opciones +
          + Opciones
          Recarga de Zonas DNS +
          + Recarga de Zonas DNS
          Syncroniza Dominios +
          + Syncroniza Dominios
          Crear Copias De Archivos +
          + Crear Copias De Archivos
          Restaurar Copias de los Archivos +
          + Restaurar Copias de los Archivos
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_serveradmin_other_spanish.html b/ehcp/templates/picante/spanish/homepage_serveradmin_other_spanish.html new file mode 100755 index 0000000..f7b440a --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_serveradmin_other_spanish.html @@ -0,0 +1,201 @@ + + + + + + + +
          +
          Opciones De Usuario De Administracion
          collapse +
          +
          Add
          Add New User w/ Hosting Template +
          + Add New User w/ Hosting Template
          Agregar Usuario o Cliente +
          + Agregar Usuario o Cliente
          Facil Instalacion de Scripts +
          + Facil Instalacion de Scripts
          Edit
          Actualisacion de Quota (limite del disco duro) +
          + Actualisacion de Quota (limite del disco duro)
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          List
          Lista de Clientes / Usuarios +
          + Lista de Clientes / Usuarios
          System
          Recarga de Zonas DNS +
          + Recarga de Zonas DNS
          Syncroniza Dominios +
          + Syncroniza Dominios
          Contacta Nos +
          + Contacta Nos
          Ayuda Tecnica +
          + Ayuda Tecnica
          Lista de lo Que Tienes Que Hacer +
          + Lista de lo Que Tienes Que Hacer
          +
          +
          + + + + + + +
          +
          Operaciones de Dominio
          collapse +
          +
          Add
          Agregar Dominios a Mi Cuenta +
          + Agregar Dominios a Mi Cuenta
          Agregar Dominios A Granel +
          + Agregar Dominios A Granel
          Adicion de Dominio y Usarios +
          + Adicion de Dominio y Usarios
          Simple Adicion de Dominio y Usarios +
          + Simple Adicion de Dominio y Usarios
          Agregacion Hosting DNS +
          + Agregacion Hosting DNS
          Agregacion Hosting DNS Para El Usuario +
          + Agregacion Hosting DNS Para El Usuario
          Add Password Protected Directories +
          + Add Password Protected Directories
          Personalisado HTTP +
          + Personalisado HTTP
          Personalisado DNS +
          + Personalisado DNS
          Add SSL Certificate +
          + Add SSL Certificate
          List
          Liste des Domaines +
          + Liste des Domaines
          Lista de Dominios Pasivos +
          + Lista de Dominios Pasivos
          Gestionar SubDomains +
          + Gestionar SubDomains
          Remove
          Remove / List Password Protected Directories +
          + Remove / List Password Protected Directories
          +
          +
          + + + + + + +
          +
          Operaciones FTP
          collapse +
          +
          Add
          Ajouter des Comptes FTP +
          + Ajouter des Comptes FTP
          Agregar Cuentas FTP Para Usuarios Existentes +
          + Agregar Cuentas FTP Para Usuarios Existentes
          Agregar Usuario FTP Subdominio Acceso +
          + Agregar Usuario FTP Subdominio Acceso
          Agregar Usuario FTP Subdirectorio Acceso +
          + Agregar Usuario FTP Subdirectorio Acceso
          Crear Cuenta FTP Personalizado +
          + Crear Cuenta FTP Personalizado
          List
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          Lista de Usuarios FTP por Dominios +
          + Lista de Usuarios FTP por Dominios
          Lista de Usuarios FTP sin Dominos +
          + Lista de Usuarios FTP sin Dominos
          Remove
          Eliminar Cuenta FTP Personalizado +
          + Eliminar Cuenta FTP Personalizado
          +
          +
          + + + + + + +
          +
          Operaciones de Email
          collapse +
          +
          Add
          Agregar Usuario Email +
          + Agregar Usuario Email
          List
          Lista de Email Forwarders +
          + Lista de Email Forwarders
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista Todos Usuarios de Email por Dominio +
          + Lista Todos Usuarios de Email por Dominio
          +
          +
          + + + + + + +
          +
          Operaciones MySQL
          collapse +
          +
          Add
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          Agregar Usuarios MySQL +
          + Agregar Usuarios MySQL
          Agregar MySQL Base de Datos a Usuarios Existentes +
          + Agregar MySQL Base de Datos a Usuarios Existentes
          List
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          +
          +
          + + + + + + +
          +
          EHCP Estado Del Servidor
          collapse +
          +
          Add
          Programe Remote Backup +
          + Programe Remote Backup
          Agregar Servidor Cronjob +
          + Agregar Servidor Cronjob
          Edit
          Cambiar Plantilla +
          + Cambiar Plantilla
          Manage Global Webserver Templates +
          + Manage Global Webserver Templates
          List
          Lista Copias de los Archivos +
          + Lista Copias de los Archivos
          Remove
          Retire Programado Remote Backup +
          + Retire Programado Remote Backup
          Retire Servidor Cronjob +
          + Retire Servidor Cronjob
          System
          Operaciones Demonio +
          + Operaciones Demonio
          Crear Copias De Archivos +
          + Crear Copias De Archivos
          Restaurar Copias de los Archivos +
          + Restaurar Copias de los Archivos
          Opciones +
          + Opciones
          +
          +
          + + + + + + +
          +
          Utilities
          collapse +
          +
          System
          Webmail Client +
          + Webmail Client
          PHPMyAdmin +
          + PHPMyAdmin
          Administracion de Archivos +
          + Administracion de Archivos
          Extplorer File Manager +
          + Extplorer File Manager
          Policyd Management +
          + Policyd Management
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/homepage_serveradmin_spanish.html b/ehcp/templates/picante/spanish/homepage_serveradmin_spanish.html new file mode 100755 index 0000000..377d154 --- /dev/null +++ b/ehcp/templates/picante/spanish/homepage_serveradmin_spanish.html @@ -0,0 +1,143 @@ + + + + + + + +
          +
          User Operations
          collapse +
          +
          Add
          Add New User w/ Hosting Template +
          + Add New User w/ Hosting Template
          Agregar Usuario o Cliente +
          + Agregar Usuario o Cliente
          Ajouter des Comptes FTP +
          + Ajouter des Comptes FTP
          Agregar Cuentas FTP Para Usuarios Existentes +
          + Agregar Cuentas FTP Para Usuarios Existentes
          Agregar Usuario FTP Subdominio Acceso +
          + Agregar Usuario FTP Subdominio Acceso
          Agregar Usuario FTP Subdirectorio Acceso +
          + Agregar Usuario FTP Subdirectorio Acceso
          Crear Cuenta FTP Personalizado +
          + Crear Cuenta FTP Personalizado
          Agregar Usuario Email +
          + Agregar Usuario Email
          Crear base de Datos y Usuarios MySQL +
          + Crear base de Datos y Usuarios MySQL
          Agregar MySQL Base de Datos a Usuarios Existentes +
          + Agregar MySQL Base de Datos a Usuarios Existentes
          Agregar Usuarios MySQL +
          + Agregar Usuarios MySQL
          List
          Lista de Clientes / Usuarios +
          + Lista de Clientes / Usuarios
          Lista de Usuarios FTP +
          + Lista de Usuarios FTP
          Lista de Usuarios Email +
          + Lista de Usuarios Email
          Lista de base de datos MySQL +
          + Lista de base de datos MySQL
          Remove
          Eliminar Cuenta FTP Personalizado +
          + Eliminar Cuenta FTP Personalizado
          +
          +
          + + + + + + +
          +
          Domain Operations
          collapse +
          +
          Add
          Agregar Dominios a Mi Cuenta +
          + Agregar Dominios a Mi Cuenta
          Agregar Dominios A Granel +
          + Agregar Dominios A Granel
          Adicion de Dominio y Usarios +
          + Adicion de Dominio y Usarios
          Simple Adicion de Dominio y Usarios +
          + Simple Adicion de Dominio y Usarios
          Agregacion Hosting DNS +
          + Agregacion Hosting DNS
          Agregacion Hosting DNS Para El Usuario +
          + Agregacion Hosting DNS Para El Usuario
          List
          Liste des Domaines +
          + Liste des Domaines
          Lista de Dominios Pasivos +
          + Lista de Dominios Pasivos
          +
          +
          + + + + + + +
          +
          Utilities
          collapse +
          +
          System
          Webmail Client +
          + Webmail Client
          PHPMyAdmin +
          + PHPMyAdmin
          Administracion de Archivos +
          + Administracion de Archivos
          Extplorer File Manager +
          + Extplorer File Manager
          Policyd Management +
          + Policyd Management
          +
          +
          + + + + + + +
          +
          System Operations
          collapse +
          +
          Add
          Programe Remote Backup +
          + Programe Remote Backup
          Agregar Servidor Cronjob +
          + Agregar Servidor Cronjob
          Add Hosting Plan Template +
          + Add Hosting Plan Template
          Edit
          Actualisacion de Quota (limite del disco duro) +
          + Actualisacion de Quota (limite del disco duro)
          Cambiar Plantilla +
          + Cambiar Plantilla
          Cambiar Mi Contraseña +
          + Cambiar Mi Contraseña
          Manage Global Webserver Templates +
          + Manage Global Webserver Templates
          List
          Lista Copias de los Archivos +
          + Lista Copias de los Archivos
          Remove
          Retire Programado Remote Backup +
          + Retire Programado Remote Backup
          Retire Servidor Cronjob +
          + Retire Servidor Cronjob
          Remove Hosting Plan Template(s) +
          + Remove Hosting Plan Template(s)
          System
          Operaciones Demonio +
          + Operaciones Demonio
          Opciones +
          + Opciones
          Estado del Servidor +
          + Estado del Servidor
          Recarga de Zonas DNS +
          + Recarga de Zonas DNS
          Syncroniza Dominios +
          + Syncroniza Dominios
          Crear Copias De Archivos +
          + Crear Copias De Archivos
          Restaurar Copias de los Archivos +
          + Restaurar Copias de los Archivos
          +
          +
          \ No newline at end of file diff --git a/ehcp/templates/picante/spanish/loginpage_spanish.html b/ehcp/templates/picante/spanish/loginpage_spanish.html new file mode 100644 index 0000000..f389ad8 --- /dev/null +++ b/ehcp/templates/picante/spanish/loginpage_spanish.html @@ -0,0 +1,47 @@ + + + + + + + + +Log in to EHCP + +
          +
          +
          +EHCP Login

          +
          +

          + +

          +

          + +

          +

          +

          +
          +

          +
          +
          +

          + +

          + + Apply for an Account
          +Recover Password

          +{dynamicinfo2} +
          + + +
          +
          +
          +
          +
          + + + diff --git a/ehcp/templates/picante/spanish/template_spanish.html b/ehcp/templates/picante/spanish/template_spanish.html new file mode 100644 index 0000000..ad61262 --- /dev/null +++ b/ehcp/templates/picante/spanish/template_spanish.html @@ -0,0 +1,64 @@ + + + + + + + EHCP Force Edition - Easy Hosting Control Panel - {myip} + {extra_js} + + + + + + + + + +
          +
          + +
          + +
          +

          Bienvenido, {username}!

          +
          Elija un Color: 
            Seleccione el Estilo Contraste: 
          + +
          +
          + + + + + +
          +
          + {ickisim} +
          +
          +
          + +
          + + + + + diff --git a/ehcp/templates/sky/en/css/960.gs.css b/ehcp/templates/sky/en/css/960.gs.css new file mode 100755 index 0000000..614b5cf --- /dev/null +++ b/ehcp/templates/sky/en/css/960.gs.css @@ -0,0 +1,295 @@ +/* + Variable Grid System. + Learn more ~ http://www.spry-soft.com/grids/ + Based on 960 Grid System - http://960.gs/ + + Licensed under GPL and MIT. +*/ + + +/* Containers +----------------------------------------------------------------------------------------------------*/ +.container_12 { + margin-left: auto; + margin-right: auto; + width: 960px; +} + +/* Grid >> Global +----------------------------------------------------------------------------------------------------*/ + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + display:inline; + float: left; + margin-left: 10px; + margin-right: 10px; +} + +/* Grid >> Children (Alpha ~ First, Omega ~ Last) +----------------------------------------------------------------------------------------------------*/ + +.alpha { + margin-left: 0; +} + +.omega { + margin-right: 0; +} + +/* Grid >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .grid_1 { + width:60px; +} + +.container_12 .grid_2 { + width:140px; +} + +.container_12 .grid_3 { + width:220px; +} + +.container_12 .grid_4 { + width:300px; +} + +.container_12 .grid_5 { + width:380px; +} + +.container_12 .grid_6 { + width:460px; +} + +.container_12 .grid_7 { + width:540px; +} + +.container_12 .grid_8 { + width:620px; +} + +.container_12 .grid_9 { + width:700px; +} + +.container_12 .grid_10 { + width:780px; +} + +.container_12 .grid_11 { + width:860px; +} + +.container_12 .grid_12 { + width:940px; +} + + + +/* Prefix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .prefix_1 { + padding-left:80px; +} + +.container_12 .prefix_2 { + padding-left:160px; +} + +.container_12 .prefix_3 { + padding-left:240px; +} + +.container_12 .prefix_4 { + padding-left:320px; +} + +.container_12 .prefix_5 { + padding-left:400px; +} + +.container_12 .prefix_6 { + padding-left:480px; +} + +.container_12 .prefix_7 { + padding-left:560px; +} + +.container_12 .prefix_8 { + padding-left:640px; +} + +.container_12 .prefix_9 { + padding-left:720px; +} + +.container_12 .prefix_10 { + padding-left:800px; +} + +.container_12 .prefix_11 { + padding-left:880px; +} + + + +/* Suffix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .suffix_1 { + padding-right:80px; +} + +.container_12 .suffix_2 { + padding-right:160px; +} + +.container_12 .suffix_3 { + padding-right:240px; +} + +.container_12 .suffix_4 { + padding-right:320px; +} + +.container_12 .suffix_5 { + padding-right:400px; +} + +.container_12 .suffix_6 { + padding-right:480px; +} + +.container_12 .suffix_7 { + padding-right:560px; +} + +.container_12 .suffix_8 { + padding-right:640px; +} + +.container_12 .suffix_9 { + padding-right:720px; +} + +.container_12 .suffix_10 { + padding-right:800px; +} + +.container_12 .suffix_11 { + padding-right:880px; +} + + + +/* Push Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .push_1 { + left:80px; +} + +.container_12 .push_2 { + left:160px; +} + +.container_12 .push_3 { + left:240px; +} + +.container_12 .push_4 { + left:320px; +} + +.container_12 .push_5 { + left:400px; +} + +.container_12 .push_6 { + left:480px; +} + +.container_12 .push_7 { + left:560px; +} + +.container_12 .push_8 { + left:640px; +} + +.container_12 .push_9 { + left:720px; +} + +.container_12 .push_10 { + left:800px; +} + +.container_12 .push_11 { + left:880px; +} + + + +/* Pull Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .pull_1 { + left:-80px; +} + +.container_12 .pull_2 { + left:-160px; +} + +.container_12 .pull_3 { + left:-240px; +} + +.container_12 .pull_4 { + left:-320px; +} + +.container_12 .pull_5 { + left:-400px; +} + +.container_12 .pull_6 { + left:-480px; +} + +.container_12 .pull_7 { + left:-560px; +} + +.container_12 .pull_8 { + left:-640px; +} + +.container_12 .pull_9 { + left:-720px; +} + +.container_12 .pull_10 { + left:-800px; +} + +.container_12 .pull_11 { + left:-880px; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/960.gs.fluid.css b/ehcp/templates/sky/en/css/960.gs.fluid.css new file mode 100755 index 0000000..2ce6e0b --- /dev/null +++ b/ehcp/templates/sky/en/css/960.gs.fluid.css @@ -0,0 +1,300 @@ +/* + Variable Grid System (Fluid Version). + Learn more ~ http://www.spry-soft.com/grids/ + Based on 960 Grid System - http://960.gs/ & 960 Fluid - http://www.designinfluences.com/ + + Licensed under GPL and MIT. +*/ + + +/* Containers +----------------------------------------------------------------------------------------------------*/ +.container_12 { + width: 98%; + margin-left: 1%; + margin-right: 1%; +} + +/* Grid >> Global +----------------------------------------------------------------------------------------------------*/ + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + display:inline; + float: left; + margin-left: 0.99%; + margin-right: 0.99%; +} + +/* Grid >> Children (Alpha ~ First, Omega ~ Last) +----------------------------------------------------------------------------------------------------*/ + +.alpha { + margin-left: 0; +} + +.omega { + margin-right: 0; +} + +/* Grid >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_12 .grid_1 { + width:6.333%; +} + +.container_12 .grid_2 { + width:14.667%; +} + +.container_12 .grid_3 { + width:23.0%; +} + +.container_12 .grid_4 { + width:31.333%; +} + +.container_12 .grid_5 { + width:39.667%; +} + +.container_12 .grid_6 { + width:48.0%; +} + +.container_12 .grid_7 { + width:56.333%; +} + +.container_12 .grid_8 { + width:64.667%; +} + +.container_12 .grid_9 { + width:73.0%; +} + +.container_12 .grid_10 { + width:81.333%; +} + +.container_12 .grid_11 { + width:89.667%; +} + +.container_12 .grid_12 { + width:98.0%; +} + + + +/* Prefix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_12 .prefix_1 { + padding-left:8.333%; +} + +.container_12 .prefix_2 { + padding-left:16.667%; +} + +.container_12 .prefix_3 { + padding-left:25.0%; +} + +.container_12 .prefix_4 { + padding-left:33.333%; +} + +.container_12 .prefix_5 { + padding-left:41.667%; +} + +.container_12 .prefix_6 { + padding-left:50.0%; +} + +.container_12 .prefix_7 { + padding-left:58.333%; +} + +.container_12 .prefix_8 { + padding-left:66.667%; +} + +.container_12 .prefix_9 { + padding-left:75.0%; +} + +.container_12 .prefix_10 { + padding-left:83.333%; +} + +.container_12 .prefix_11 { + padding-left:91.667%; +} + + + +/* Suffix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_12 .suffix_1 { + padding-right:8.333%; +} + +.container_12 .suffix_2 { + padding-right:16.667%; +} + +.container_12 .suffix_3 { + padding-right:25.0%; +} + +.container_12 .suffix_4 { + padding-right:33.333%; +} + +.container_12 .suffix_5 { + padding-right:41.667%; +} + +.container_12 .suffix_6 { + padding-right:50.0%; +} + +.container_12 .suffix_7 { + padding-right:58.333%; +} + +.container_12 .suffix_8 { + padding-right:66.667%; +} + +.container_12 .suffix_9 { + padding-right:75.0%; +} + +.container_12 .suffix_10 { + padding-right:83.333%; +} + +.container_12 .suffix_11 { + padding-right:91.667%; +} + + + +/* Push Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_12 .push_1 { + left:8.333%; +} + +.container_12 .push_2 { + left:16.667%; +} + +.container_12 .push_3 { + left:25.0%; +} + +.container_12 .push_4 { + left:33.333%; +} + +.container_12 .push_5 { + left:41.667%; +} + +.container_12 .push_6 { + left:50.0%; +} + +.container_12 .push_7 { + left:58.333%; +} + +.container_12 .push_8 { + left:66.667%; +} + +.container_12 .push_9 { + left:75.0%; +} + +.container_12 .push_10 { + left:83.333%; +} + +.container_12 .push_11 { + left:91.667%; +} + + + +/* Pull Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_12 .pull_1 { + left:-8.333%; +} + +.container_12 .pull_2 { + left:-16.667%; +} + +.container_12 .pull_3 { + left:-25.0%; +} + +.container_12 .pull_4 { + left:-33.333%; +} + +.container_12 .pull_5 { + left:-41.667%; +} + +.container_12 .pull_6 { + left:-50.0%; +} + +.container_12 .pull_7 { + left:-58.333%; +} + +.container_12 .pull_8 { + left:-66.667%; +} + +.container_12 .pull_9 { + left:-75.0%; +} + +.container_12 .pull_10 { + left:-83.333%; +} + +.container_12 .pull_11 { + left:-91.667%; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/block-lists.css b/ehcp/templates/sky/en/css/block-lists.css new file mode 100755 index 0000000..1614b5c --- /dev/null +++ b/ehcp/templates/sky/en/css/block-lists.css @@ -0,0 +1,740 @@ +/** + * Block lists styles + */ + +/****************** Favorites *******************/ +.favorites > li { + border-top: 1px dotted #999999; + padding: 0 0 0 75px; + position: relative; + } + body.dark .favorites > li { + border-top-color: #bbb; + } + body.dark .white-bg .favorites > li, + body.dark .block-content .favorites > li { + border-top-color: #999999; + } + .favorites > li:first-child { + border-top: 0; + } + /* IE class */ + .favorites > li.first-child { + border-top: 0; + } + .favorites > li:hover { + background: url(../images/old-browsers-bg/favorites-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + rgba(0,0,0,0.1), + rgba(0,0,0,0) + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(0,0,0,0.1)), + to(rgba(0,0,0,0)) + ); + } + .favorites > li > img { + position: absolute; + margin-top: 1.5em; + margin-left: -60px; + } + .favorites > li > a { + display: block; + padding: 1.278em 1em; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + font-size: 1.5em; + min-height: 1.833em; + font-weight: bold; + line-height: 0.833em; + background: url(../images/favorites-border.png) no-repeat left center; + color: #39c; + } + /* IE class */ + .ie7 .favorites > li > a { + margin-top: -0.667em; + } + body.dark .favorites > li > a { + color: white; + } + .white-bg .favorites > li > a, + .favorites.white-bg > li > a, + body.dark .block-content .favorites > li > a, + body.dark .white-bg .favorites > li > a, + body.dark .favorites.white-bg > li > a { + color: #39c; + } + .favorites > li > a small { + font-size: 0.667em; + color: #999; + font-weight: normal; + text-transform: none; + } + body.dark .favorites > li > a small { + color: #344147; + } + .white-bg .favorites > li > a small, + .favorites.white-bg > li > a small, + body.dark .block-content .favorites > li > a small, + body.dark .white-bg .favorites > li > a small, + body.dark .favorites.white-bg > li > a small { + color: #999; + } + +/****************** Shortcuts *******************/ +.shortcuts-list { + padding-top: 0.5em; + } + .shortcuts-list li { + float: left; + } + .shortcuts-list li a { + display: block; + width: 7em; + padding-top: 63px; + color: #808080; + text-align: center; + position: relative; + padding-bottom: 9px; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + } + body.dark .shortcuts-list li a { + color: white; + } + body.dark .block-content .shortcuts-list li a { + color: #808080; + } + .dark-grey-gradient .shortcuts-list li a, + .shortcuts-list.dark-grey-gradient li a { + color: white; + } + .shortcuts-list li a:hover { + background: #E0E0E0; + } + body.dark .shortcuts-list li a:hover { + background: #404040; + } + body.dark .block-content .shortcuts-list li a:hover { + background: #E0E0E0; + } + .dark-grey-gradient .shortcuts-list li a:hover, + .shortcuts-list.dark-grey-gradient li a:hover { + color: white; + background: #404040; + } + .shortcuts-list li a img { + position: absolute; + top: 9px; + left: 50%; + margin-left: -24px; + } + + /************* Mobile customization *************/ + @media only screen and (max-device-width: 480px) { + + .shortcuts-list { + padding-top: 0; + } + article > .shortcuts-list { + margin-left: -0.5em; + margin-right: -0.5em; + } + article > .shortcuts-list li a { + width: 6.5em; + } + + } + +/****************** Files list ******************/ +.files { + padding: 1em 0 0 1em; + } + .files li { + float: left; + width: 100px; + margin: 0 1em 1em 0; + color: #666; + padding-top: 74px; + text-align: center; + } + .files li a { + display: block; + padding: 4px 5px 7px; + line-height: 1.2em; + height: 2.4em; + color: #666; + word-wrap: break-word; + text-overflow: ellipsis; + } + body.dark .files li a { + color: white; + -moz-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -webkit-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + } + body.dark .block-content .files li a { + color: #666; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + } + .dark-grey-gradient .files li a, + .files.dark-grey-gradient li a { + color: white; + -moz-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -webkit-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + } + .files li a:hover { + color: #333; + background: #e0e0e0; + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + } + body.dark .files li a:hover { + color: white; + background: #404040; + } + body.dark .block-content .files li a:hover { + color: #333; + background: #e0e0e0; + } + .dark-grey-gradient .files li a:hover, + .files.dark-grey-gradient li a:hover { + color: white; + background: #404040; + } + .files li a span { + display: block; + margin: -78px -5px 8px; + height: 70px; + line-height: 70px; + } + .files li a span img { + vertical-align: middle; + } + .files li a span img.thumb { + border: 1px solid white; + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); + } + +/***************** Blocks grid ******************/ +ul.grid { + padding: 0.75em 0 0 0.75em; +} +/* IE class */ +.ie7 ul.grid { + padding-bottom: 0.75em; +} +ul.grid > li { + background: #cccccc url(../images/old-browsers-bg/grid-block-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f5f5f5, + #cccccc + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f5f5f5), + to(#cccccc) + ); + border: 1px solid white; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + padding: 0.75em; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + color: #333333; + float: left; + width: 17em; + position: relative; + margin: 0 0.75em 0.75em 0; + } + ul.grid > li .grid-picto { + margin: -0.75em 1em -0.75em -0.75em; + padding: 0.75em 0.75em 0.75em 3.9em; + background-repeat: no-repeat; + background-position: 0.75em 0.75em; + border-right: 1px solid #b3b3b3; + } + ul.grid > li .grid-picto.user { background-image: url(../images/icons/web-app/32/Profile.png); } + ul.grid > li .grid-picto.computer { background-image: url(../images/icons/web-app/32/Loading.png); } + ul.grid > li .grid-picto.chart { background-image: url(../images/icons/web-app/32/Pie-Chart.png); } + ul.grid > li .grid-picto.print { background-image: url(../images/icons/web-app/32/Print.png); } + ul.grid > li .grid-picto.warning { background-image: url(../images/icons/web-app/32/Warning.png); } + ul.grid > li .grid-name { + color: #373737; + font-weight: bold; + font-size: 1.5em; + margin-bottom: 0.25em; + } + ul.grid > li .grid-details { + color: #808080; + } + ul.grid > li .grid-details b { + color: #333333; + font-weight: normal; + } + ul.grid > li .grid-actions { + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 1.7em; + border-left: 1px solid white; + background: #b3b3b3 url(../images/old-browsers-bg/grid-block-controls-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f0f0f0, + #b3b3b3 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f0f0f0), + to(#b3b3b3) + ); + -moz-border-radius: 0 0.333em 0.333em 0; + -webkit-border-top-right-radius: 0.333em; + -webkit-border-bottom-right-radius: 0.333em; + border-radius: 0 0.333em 0.333em 0; + } + ul.grid > li .grid-actions li { + border-top: 1px solid white; + border-bottom: 1px solid #b3b3b3; + text-align: center; + height: 1.75em; + line-height: 1.75em; + } + ul.grid > li .grid-actions li:first-child { + border-top: none; + } + ul.grid > li .grid-actions li:last-child { + border-bottom: none; + } + /* IE class */ + ul.grid > li .grid-actions li.last-child { + border-bottom: none; + } + ul.grid > li .grid-actions li img { + margin: 0 -1px -3px 0; + } + +/***************** Blocks lists *****************/ +.task, +.blocks-list > li, +.mini-blocks-list > li { + background: #e6e6e6 url(../images/old-browsers-bg/lite-grey-grad-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f7f7f7, + #e6e6e6 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f7f7f7), + to(#e6e6e6) + ); + border: 1px solid white; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + position: relative; + z-index: 89; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + color: #666666; + line-height: 1.25em; + } + .ie .task, + .ie .blocks-list > li, + .ie .mini-blocks-list > li { + border-color: #cccccc; + } + .task { + padding: 1.667em 1.667em 0; + margin-bottom: 1.667em; + } + .task + .task.with-legend { + margin-top: 2.5em; + } + .task .task-description { + padding-bottom: 1.667em; + } + .task .floating-tags { + margin: -0.667em -0.667em -0.667em 1.5em; + } + .task:hover { + background: #dbe8f0; + } + + .task-dialog { + margin: 0 -1.667em; + } + .task-dialog > li { + border-top: 1px solid #c5c39c; + background: #ffffcd url(../images/icons/fugue/balloon-reverse.png) no-repeat 0.667em 0.75em; + padding: 0.75em 0.75em 0.75em 2.5em; + margin: 0 -1px; + color: #565340; + position: relative; + z-index: 89; + } + .ie .task-dialog > li { + margin: 0; + } + .task-dialog > li:nth-child(even) { + background-color: #f7f7df; + } + /* IE class */ + .task-dialog > li.even { + background-color: #f7f7df; + } + .task-dialog > li:last-child { + -moz-border-radius: 0 0 0.167em 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-radius: 0 0 0.167em 0.167em; + } + .task-dialog > li.auto-hide { + display: none; + } + :hover > .task-dialog > li.auto-hide { + display: block; + } + + .task-dialog > li > strong { + color: #353334; + } + .task-dialog > li > em { + color: #b1b197; + } + .task-dialog .mini-menu { + margin-right: -0.5em; + } + + /************* Mobile customization *************/ + @media only screen and (max-device-width: 480px) { + + .task-dialog > li.auto-hide { + display: block; + } + + } + + .blocks-list > li { + padding: 1em 0.5em; + margin-bottom: 0.5em; + } + .mini-blocks-list > li { + padding: 0.25em 0.5em 0.417em; + margin-bottom: 0.5em; + } + .blocks-list > li a, + .mini-blocks-list > li a { + color: #666666; + } + .blocks-list > li img, + .mini-blocks-list > li img { + margin-bottom: -4px; + } + .blocks-list > li .tags.float-right, + .mini-blocks-list > li .tags.float-right { + margin-top: -0.417em; + margin-bottom: -0.333em; + } + .mini-blocks-list > li .tags.float-right { + margin-right: -0.417em; + } + /* IE class */ + .ie7 .blocks-list > li .tags.float-right { + margin-top: -0.25em; + } + /* IE class */ + .ie7 .mini-blocks-list > li .tags.float-right { + margin-top: -0.167em; + } + +/****************** Icon list *******************/ +.icon-list { + margin: 0 -19px 0.833em -7px; + } + .icon-list li { + float: left; + background: url(../images/corner.png) no-repeat right bottom; + padding: 7px 26px 21px 61px; + width: 5em; + height: 2.5em; + margin-top: 0.75em; + font-size: 1.5em; + font-weight: bold; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + } + .icon-list li a { + display: block; + margin: -7px -26px -21px -61px; + padding: 7px 26px 21px 61px; + width: 5em; + height: 2.5em; + } + body.dark .icon-list li a { + color: white; + } + body.dark .block-content .icon-list li a { + color: #39c; + } + .icon-list li a:hover, + body.dark .icon-list li a:hover, + body.dark .block-content .icon-list li a:hover { + color: #33CCFF; + } + .icon-list li small { + font-size: 0.667em; + font-weight: normal; + text-transform: none; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: 20%; + } + body.dark .icon-list li small { + color: #b0b0b0; + } + body.dark .block-content .icon-list li small { + color: #808080; + } + .icon-list li .icon { + display: block; + float: left; + width: 48px; + height: 48px; + margin: -3px 0 0 -54px; + background-position: center center; + background-repeat: no-repeat; + } + +/************* Small files icon list ************/ +.small-files-list li { + padding: 0.25em 0 0 42px; + background: url(../images/icons/finefiles/32/default.png) no-repeat; + color: black; + min-height: 32px; + margin-bottom: 0.25em; + line-height: 1.083em; + } + .small-files-list li:last-child { + margin-bottom: 0; + } + /* IE class */ + .small-files-list li.last-child { + margin-bottom: 0; + } + .small-files-list li a { + display: block; + margin: -0.25em 0 0 -42px; + padding: 0.25em 0 0 42px; + color: black; + } + .small-files-list li a:hover { + color: #3399cc; + } + .small-files-list li small { + color: #999999; + } + + .small-files-list.icon-html li, .small-files-list li.icon-html { background-image: url(../images/icons/finefiles/32/html.png); } + .small-files-list.icon-xml li, .small-files-list li.icon-xml { background-image: url(../images/icons/finefiles/32/xml.png); } + .small-files-list.icon-img li, .small-files-list li.icon-img { background-image: url(../images/icons/finefiles/32/other_image.png); } + .small-files-list.icon-music li, .small-files-list li.icon-music { background-image: url(../images/icons/finefiles/32/other_music2.png); } + .small-files-list.icon-movie li, .small-files-list li.icon-movie { background-image: url(../images/icons/finefiles/32/mpg.png); } + .small-files-list.icon-folder li, .small-files-list li.icon-folder { background-image: url(../images/icons/finefiles/32/_Close.png); } + .small-files-list.icon-mail li, .small-files-list li.icon-mail { background-image: url(../images/icons/email.png); } + .small-files-list.icon-comment li, .small-files-list li.icon-comment { background-image: url(../images/icons/web-app/32/Comment.png); } + +/*************** Extended infos list ************/ +.extended-list > li { + border-top: 1px dotted #afafaf; + padding: 1.667em; + position: relative; + z-index: 89; + } + .extended-list > li:hover { + background: url(../images/old-browsers-bg/favorites-bg.png) repeat-y; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + rgba(0,0,0,0.1), + rgba(0,0,0,0) + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(0,0,0,0.1)), + to(rgba(0,0,0,0)) + ); + } + .extended-list > li:first-child { + border-top: 0; + } + /* IE class */ + .extended-list > li.first-child { + border-top: 0; + } + .extended-list > li > a, + .extended-list > li > span { + font-size: 1.5em; + font-weight: bold; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + display: block; + float: left; + padding-left: 54px; + white-space: nowrap; + min-height: 48px; + position: relative; + } + body.dark .extended-list > li > a, + body.dark .extended-list > li > span { + color: white; + } + body.dark .block-content .extended-list > li > a, + body.dark .block-content .extended-list > li > span { + color: #39c; + } + .extended-list > li > a:hover, + body.dark .extended-list > li > a:hover, + body.dark .extended-list > li > span:hover, + body.dark .block-content .extended-list > li > a:hover, + body.dark .block-content .extended-list > li > span:hover { + color: #33CCFF; + } + .extended-list > li > a small { + font-size: 0.667em; + font-weight: normal; + text-transform: none; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: 20%; + } + body.dark .extended-list > li > a small { + color: #b0b0b0; + } + body.dark .block-content .extended-list > li > a small { + color: #808080; + } + .extended-list > li > a .icon { + display: block; + top: 0; + left: 0; + position: absolute; + width: 48px; + height: 48px; + background-position: center center; + background-repeat: no-repeat; + } + + .extended-list .extended-options { + float: right; + } + .extended-list .extended-options li { + float: left; + margin-left: 1.5em; + line-height: 1.75em; + } + body.dark .extended-list .extended-options li { + color: white; + } + body.dark .block-content .extended-list .extended-options li { + color: #333; + } + .extended-list .extended-options li:first-child { + margin-left: 0; + } + /* IE class */ + .extended-list .extended-options li.first-child { + margin-left: 0; + } + + .icon-user .icon, .icon.icon-user { background-image: url(../images/icons/web-app/48/Profile.png); } + .icon-image .icon, .icon.icon-image { background-image: url(../images/icons/web-app/48/Picture.png); } + .icon-chart .icon, .icon.icon-chart { background-image: url(../images/icons/web-app/48/Pie-Chart.png); } + .icon-printer .icon, .icon.icon-printer { background-image: url(../images/icons/web-app/48/Print.png); } + .icon-computer .icon, .icon.icon-computer { background-image: url(../images/icons/web-app/48/Loading.png); } + .icon-article .icon, .icon.icon-article { background-image: url(../images/icons/web-app/48/Modify.png); } + .icon-comment .icon, .icon.icon-comment { background-image: url(../images/icons/web-app/48/Comment.png); } + .icon-warning .icon, .icon.icon-warning { background-image: url(../images/icons/web-app/48/Warning.png); } + +/* http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack */ +.shortcuts-list:after, +.files:after, +.task .task-description:after, +.blocks-list > li:after, +.mini-blocks-list > li:after, +.icon-list:after, +.extended-list li:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +.shortcuts-list, +.files, +.task .task-description, +.blocks-list > li, +.mini-blocks-list > li, +.icon-list, +.extended-list li { + display: inline-block; +} + +* html .shortcuts-list, +* html .files, +* html .task .task-description, +* html .blocks-list > li, +* html .mini-blocks-list > li, +* html .icon-list, +* html .extended-list li { + height: 1%; +} + +.shortcuts-list, +.files, +.task .task-description, +.blocks-list > li, +.mini-blocks-list > li, +.icon-list, +.extended-list li { + display: block; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/common.css b/ehcp/templates/sky/en/css/common.css new file mode 100755 index 0000000..c470e25 --- /dev/null +++ b/ehcp/templates/sky/en/css/common.css @@ -0,0 +1,2289 @@ +/** + * Common styles for all variants (standard or mobile) + * z-index hierachy : + * 88, 89 or 90 : Positioned elements at normal level + * 98 or 99 : Positioned for menu + * 100 : footer + * 999900 : tooltip + * 999910 : menu + * 999950 : fixed control bar + * 999990 : notifications + */ +html { + background: #d5d8db; +} +body { + color: #333333; + font-size: 75%; + } + body.dark { + background-color: #70828f; + } +.white-text { + color: white; +} +p, th, td { + line-height: 1.25em; + } +p, ul, ol, dl, .with-margin { + margin-bottom: 1.667em; + } + .small-margin { + margin-bottom: 0.5em; + } + .medium-margin { + margin-bottom: 1em; + } + .large-margin { + margin-bottom: 2.417em; + } +a { + color: #3399cc; + text-decoration: none; +} +strong { + color: #3399cc; +} +small { + color: #808080; + font-size: 0.833em; + text-transform: uppercase; + font-weight: normal; + } + small strong { + color: #808080; + } +h2 { + color: #3399cc; + font-size: 1.25em; + line-height: 1.267em; + margin-bottom: 1.267em; +} +h3 { + color: #3399cc; + font-size: 1.25em; + line-height: 1.267em; +} +h5 { + font-weigth: bold; + color: #333; +} +hr { + height: 0; + line-height: 0; + border: 0; + border-top: 1px dotted #cccccc; + margin-bottom: 1.667em; +} + +a.red, .red a +h2.red, .red h2, +h3.red, .red h3 { + color: #cc3333; +} + +h2:last-child, +p:last-child, +ul:last-child, +ol:last-child, +dl:last-child, +hr:last-child { + margin-bottom: 0; +} +/* IE class */ +h2.last-child, +p.last-child, +ul.last-child, +ol.last-child, +dl.last-child, +hr.last-child { + margin-bottom: 0; +} + +/**************** Generic classes ***************/ +.align-left { + text-align: left; +} +.align-center { + text-align: center; +} +.align-right { + text-align: right; +} +.margin-left { + margin-left: 1em; +} +.margin-right { + margin-right: 1em; +} +.gutter-left { + margin-left: 2em; +} +.gutter-right { + margin-right: 2em; +} +.float-left { + float: left; +} +.float-right { + float: right; +} +.relative { + position: relative; + z-index: 89; +} +.absolute { + position: absolute; + z-index: 89; +} +.upper-index { + z-index: 90 !important; +} +.with-padding { + padding: 1em; +} +.no-bottom-margin { + margin-bottom: 0 !important; +} +.box { + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + padding: 0.75em; + margin-bottom: 1.667em; + background: white; + } + /* IE class */ + .ie .box { + border: 1px solid #cccccc; + } +.infos { + background-image: url(../images/icons/web-app/48/Info.png); + background-repeat: no-repeat; + padding-left: 5em; + margin-bottom: 1em; + min-height: 4em; +} +.mini-infos { + background-image: url(../images/icons/web-app/24/Info.png); + background-repeat: no-repeat; + padding: 0.167em 0 0.167em 2.5em; + margin-bottom: 1em; + min-height: 1.5em; + } + .info:last-child, + .mini-infos:last-child { + margin-bottom: 0; + } + /* IE class */ + .info.last-child, + .mini-infos.last-child { + margin-bottom: 0; + } + .infos p, + .mini-infos p { + color: #808080; + } +.picto { + margin-bottom: -4px; +} +.empty { + color: #999999 !important; + font-style: italic; +} +.number { + display: block; + float: left; + min-width: 1em; + padding: 0.25em; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + font-weight: bold; + color: white; + text-align: center; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + margin-right: 0.5em; + background: #3399cc; +} +.number.red, +.red .number { + background-color: #cc3333; +} + +.bigger { + font-size: 2.5em; + } + h2.bigger { + margin-bottom: 0.8em; + } +.big { + font-size: 1.5em; + } +.small { + font-size: 0.833em; +} +.smaller { + font-size: 0.75em; +} + +/**************** Generic styles ***************/ +.grey { + color: #666666; +} +.white-bg { + background-color: white; +} +.grey-bg { + background-color: #c1c8cb; + } + .block-content .grey-bg { + background-color: #e6e6e6; + } + p.grey-bg { + padding: 0.417em 0.5em; + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + } +.dark-grey-gradient { + background: #666666 url(../images/old-browsers-bg/dark-grey-gradient-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #3d3d3d, + #484848 2%, + #585858 8%, + #666666 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#3d3d3d), + to(#666666), + color-stop(0.02, #484848), + color-stop(0.08, #585858) + ); + color: white; +} +.lite-grey-gradient { + background: white url(../images/old-browsers-bg/lite-grey-gradient-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #d5d5d5, + white + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#d5d5d5), + to(white) + ); +} + +/****************** Main title ******************/ +article h1 { + color: #3f525f; + font-size: 1.5em; + -moz-text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + -webkit-text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + margin-bottom: 1em; +} +.block-content h1, +.block-content .h1 { + color: white; + font-size: 1.5em; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + border: 1px solid; + border-color: #50a3c8 #297cb4 #083f6f; + background: #0c5fa5 url(../images/old-browsers-bg/title-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #72c6e4 4%, + #0c5fa5 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#0c5fa5), + color-stop(0.03, #72c6e4) + ); + -moz-text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2); + -webkit-text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2); + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2); + padding: 0.278em 0.444em 0.389em; + } + .block-content .h1 h1 { + font-size: 1em; + border: 0; + background: none; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + padding: 0; + } + .block-content h1.red, + .block-content .h1.red, + .block-content .red h1, + .block-content .red .h1, + .block-content.red h1, + .block-content.red .h1, + .red .block-content h1, + .red .block-content .h1 { + border-color: #bf3636 #5d0000 #0a0000; + background: #790000 url(../images/old-browsers-bg/title-red-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #ca3535 4%, + #790000 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#790000), + color-stop(0.03, #ca3535) + ); + } + +.failedlogin { + border: 2px solid; + border-color: #F06356; + background: #E2A5B1; + font-size: 1.5em; +} + + +/************** Button-style links **************/ +.button, +.form legend, +.legend, +.mini-menu { + line-height: 1.333em; + padding: 0.167em 0.5em 0.25em; + border: 1px solid white; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + text-decoration: none; + font-weight: normal; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + outline: 0; + } + .button { + display: inline-block; + } + /* IE class */ + .ie .button, + .ie .form legend, + .ie .legend, + .ie .mini-menu { + border-color: #cccccc; + } + .button { + color: #666666; + background: #dfdfdf url(../images/old-browsers-bg/button-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f6f6f6, + #dfdfdf + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f6f6f6), + to(#dfdfdf) + ); + } + .button.red, + .red .button { + color: white; + background: #790000 url(../images/old-browsers-bg/button-red-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #ca3535, + #790000 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#ca3535), + to(#790000) + ); + } + .button.red a, + .red .button a { + color: white; + } + a.button:hover, + .mini-menu > li > a:hover { + color: #115577; + background: #98d2f3 url(../images/old-browsers-bg/button-hover-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #dff3fc, + #98d2f3 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#dff3fc), + to(#98d2f3) + ); + } + a.button.red:hover, + .red a.button:hover { + color: white; + background: #9d0404 url(../images/old-browsers-bg/button-red-hover-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #fe6565, + #9d0404 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(fe6565), + to(#9d0404) + ); + } + .form legend, + .legend, + .mini-menu { + color: #666666; + background: #e7e7e7 url(../images/old-browsers-bg/legend-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f8f8f8, + #e7e7e7 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f8f8f8), + to(#e7e7e7) + ); + } + + .button img, + .form legend img, + .legend img, + .mini-menu img { + margin-bottom: -2px; + } + +/******************** Button ********************/ +button { + display: inline-block; + border: 1px solid; + border-color: #50a3c8 #297cb4 #083f6f; + background: #0c5fa5 url(../images/old-browsers-bg/button-element-bg.png) repeat-x left top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #72c6e4 4%, + #0c5fa5 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#0c5fa5), + color-stop(0.03, #72c6e4) + ); + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + color: white; + -moz-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); + -webkit-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + font-size: 1.167em; + padding: 0.286em 1em 0.357em; + line-height: 1.429em; + cursor: pointer; + font-weight: bold; + } + /* IE class */ + .ie button { + overflow: visible; + } + /* IE class */ + .ie7 button { + padding-top: 0.357em; + padding-bottom: 0.214em; + line-height: 1.143em; + } + button img { + margin-bottom: -3px; + } + button:hover { + border-color: #1eafdc #1193d5 #035592; + background: #057fdb url(../images/old-browsers-bg/button-element-hover-bg.png) repeat-x left top; + background: -moz-linear-gradient( + top, + white, + #2bcef3 4%, + #057fdb + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#057fdb), + color-stop(0.03, #2bcef3) + ); + } + button:active { + border-color: #5b848b #b2def1 #b2def1 #68a6ba; + background: #3dbfed url(../images/old-browsers-bg/button-element-active-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #89e7f9, + #3dbfed + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#89e7f9), + to(#3dbfed) + ); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + + button.red, + .red button { + color: white; + border-color: #bf3636 #5d0000 #0a0000; + background: #790000 url(../images/old-browsers-bg/button-element-red-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #ca3535 4%, + #790000 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#790000), + color-stop(0.03, #ca3535) + ); + } + button.red:hover, + .red button:hover { + border-color: #c24949 #9d3d3d #590909; + background: #9d0404 url(../images/old-browsers-bg/button-element-red-hover-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #fe6565 4%, + #9d0404 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#9d0404), + color-stop(0.03, #fe6565) + ); + } + button.red:active, + .red button:active { + border-color: #7c5656 #f7cbcb #f7cbcb #a15151; + background: #ff5252 url(../images/old-browsers-bg/button-element-red-active-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #ff9d9d, + #ff5252 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#ff9d9d), + to(#ff5252) + ); + } + + button:disabled, + button:disabled:hover { + color: #bfbfbf; + border-color: #e9f2f6 #c4c3c3 #a2a2a2 #e3e2e2; + background: #c8c8c8 url(../images/old-browsers-bg/button-element-disabled-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #f0f2f2, + #c8c8c8 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f0f2f2), + to(#c8c8c8) + ); + -moz-text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.75); + -webkit-text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.75); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.75); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + cursor: auto; + } + /* IE class */ + button.disabled, + button.disabled:hover { + color: #bfbfbf; + border-color: #e9f2f6 #c4c3c3 #a2a2a2 #e3e2e2; + background: #c8c8c8 url(../images/old-browsers-bg/button-element-disabled-bg.png) repeat-x top; + cursor: auto; + } + + button.grey { + color: white; + border-color: #a1a7ae #909498 #6b7076; + background: #9fa7b0 url(../images/old-browsers-bg/button-element-grey-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #c5cbce 5%, + #9fa7b0 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#9fa7b0), + color-stop(0.05, #c5cbce) + ); + -moz-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + -webkit-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + } + button.grey:hover { + border-color: #a1a7b0 #939798 #6e7275; + background: #b1b5ba url(../images/old-browsers-bg/button-element-grey-hover-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #d6dadc 4%, + #b1b5ba + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#b1b5ba), + color-stop(0.03, #d6dadc) + ); + } + button.grey:active { + border-color: #666666 #ffffff #ffffff #979898; + background: #dddddd url(../images/old-browsers-bg/button-element-grey-active-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #f1f1f1, + #dddddd + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f1f1f1), + to(#dddddd) + ); + } + + button.small { + font-size: 0.833em; + padding: 0.2em 0.3em 0.3em 0.2em; + vertical-align: 0.2em; + } + /* IE class */ + .ie button.small { + padding: 0.5em 0.3em; + vertical-align: 0.1em; + } + + .ie7 button + button { + margin-left: 0.25em; + } + +/**************** Standard block ****************/ +section { + margin-bottom: 3em; +} +.block-content { + border: 1px solid #999999; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + padding: 1.667em; + background: white; + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + position: relative; + } + .block-content.dark-bg { + border-color: #aaa #333 #000 #666; + background: #555 url(../images/old-browsers-bg/content-dark-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #555, + #222 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#222), + to(#555) + ); + color: white; + } +.block-border { + padding: 0.833em; + border: 1px solid white; + border-color: rgba(255, 255, 255, 0.75); + background: url(../images/old-browsers-bg/white20.png); + background: rgba(255, 255, 255, 0.2); + -moz-border-radius: 0.8em; + -webkit-border-radius: 0.8em; + border-radius: 0.8em; + -moz-box-shadow: 0 0 4px rgba(50, 50, 50, 0.5); + -webkit-box-shadow: 0 0 4px rgba(50, 50, 50, 0.5); + box-shadow: 0 0 4px rgba(50, 50, 50, 0.5); + } + .block-border .block-content { + -moz-box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + -webkit-box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + } + .block-border .block-content + .block-content { + margin-top: 0.833em; + } + +.block-content .no-margin { + margin-left: -1.667em; + margin-right: -1.667em; + } + .block-content p.no-margin + .no-margin, + .block-content ul.no-margin + .no-margin, + .block-content ol.no-margin + .no-margin, + .block-content dl.no-margin + .no-margin { + margin-top: -1.667em; + } +.block-content .no-margin:last-child { + margin-bottom: -1.667em; + -moz-border-radius-bottomleft: 0.167em; + -moz-border-radius-bottomright: 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-bottom-left-radius: 0.167em; + border-bottom-right-radius: 0.167em; +} +/* IE class */ +.block-content .no-margin.last-child { + margin-bottom: -1.667em; +} + +.block-content hr.no-margin { + margin-bottom: 1.667em; +} + +.block-content.no-padding { + padding: 0; + } + .block-content.no-padding .no-margin { + margin-left: 0; + margin-right: 0; + } + .block-content p.no-margin + .no-margin, + .block-content ul.no-margin + .no-margin, + .block-content ol.no-margin + .no-margin, + .block-content dl.no-margin + .no-margin { + margin-top: -1.667em; + } + .block-content.no-padding .no-margin:last-child { + margin-bottom: 0; + } + /* IE class */ + .block-content .no-margin.last-child { + margin-bottom: -1.667em; + } + +/***************** Block header *****************/ +.block-header { + font-size: 2em; + font-weight: bold; + height: 3em; + line-height: 3em; + border-top: 1px solid #9bd2ee; + border-bottom: 1px solid #b5b3b4; + background: #0c5fa3 url(../images/old-browsers-bg/block-header-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #6dc3e6, + #0c5fa3 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#6dc3e6), + to(#0c5fa3) + ); + text-align: center; + color: white; + -moz-text-shadow: 0 1px 3px rgba(0, 0, 0, 0.75); + -webkit-text-shadow: 0 1px 3px rgba(0, 0, 0, 0.75); + text-shadow: 0 1px 3px rgba(0, 0, 0, 0.75); + margin: 0 -0.833em 0.833em -0.833em; + } + .block-header:first-child { + margin-top: -0.833em; + } + /* IE class */ + .block-header.first-child { + margin-top: -0.833em; + } + .block-header + .no-margin { + margin-top: -1.667em; + } + + .block-header.red, + .red .block-header { + border-top-color: #e46f6f; + background: #790000 url(../images/old-browsers-bg/block-header-red-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #ca3535, + #790000 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#790000), + to(#ca3535) + ); + } + +/**************** Block controls ****************/ +.block-controls { + text-align: right; + border-bottom: 1px solid #999999; + background: white url(../images/old-browsers-bg/block-controls-bg.png) repeat-x bottom; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #e5e5e5 88%, + #d8d8d8 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#d8d8d8), + color-stop(0.88, #e5e5e5) + ); + margin: 0 -1.667em 1.667em -1.667em; + padding: 1em; + } + + .block-controls:first-child { + margin-top: -1.667em; + } + /* IE class */ + .block-controls.first-child { + margin-top: -1.667em; + } + .block-controls + .no-margin { + margin-top: -1.667em; + } + .block-content.no-padding .block-controls { + margin: 0 !important; + border-bottom: 0; + } + + ul.controls-buttons { + float: right; + } + ul.controls-buttons li { + display: block; + float: left; + margin: -1px 0 -1px 0.5em; + line-height: 1.333em; + padding: 0.333em 0.25em; + } + ul.controls-buttons li.sep { + padding: 0; + width: 2px; + height: 4em; + margin: -1em 0.25em -1em 0.75em; + border: none; + background: url(../images/controls-bt-sep.png) no-repeat bottom; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + ul.controls-buttons li.controls-block, + ul.controls-buttons li a { + display: block; + color: #333333; + min-width: 1.083em; + padding: 0.333em 0.5em; + text-align: center; + border: 1px solid white; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-radius: 0.5em; + background: #e7e7e7 url(../images/old-browsers-bg/controls-bt-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f8f8f8, + #e7e7e7 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f8f8f8), + to(#e7e7e7) + ); + -moz-box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.5); + box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.5); + text-transform: uppercase; + } + ul.controls-buttons li a { + margin: -0.333em -0.25em; + line-height: 1.333em; + } + /* IE class */ + .ie ul.controls-buttons li.controls-block, + .ie ul.controls-buttons li a { + border-color: #cccccc; + } + ul.controls-buttons li a:hover, + ul.controls-buttons li a.current { + border-color: #1eafdc #1193d5 #035592; + background: #057fdb url(../images/old-browsers-bg/block-control-hover-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #2bcef3 5%, + #057fdb + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#057fdb), + color-stop(0.05, #2bcef3) + ); + color: white; + } + ul.controls-buttons li a:hover strong, + ul.controls-buttons li a.current strong { + color: white; + } + ul.controls-buttons li img { + margin: -0.25em 0; + } + /* IE class */ + .ie7 ul.controls-buttons li img { + margin: 0; + vertical-align: middle; + } + ul.controls-buttons li img:first-child { + margin-left: -0.085em; + } + /* IE class */ + ul.controls-buttons li img.first-child { + margin-left: -0.085em; + } + ul.controls-buttons li img:last-child { + margin-right: -0.085em; + } + /* IE class */ + ul.controls-buttons li img.last-child { + margin-right: -0.085em; + } + ul.controls-buttons li .progress-bar { + margin: -0.25em 0; + } + + ul.controls-tabs { + height: 47px; + float: right; + margin: -1em; + padding-left: 1px; + background: url(../images/controls-tabs-bg.png) no-repeat -48px 0; + } + ul.controls-tabs li { + height: 48px; + width: 49px; + float: left; + } + ul.controls-tabs li:last-child { + width: 48px; + } + /* IE class */ + ul.controls-tabs li.last-child { + width: 48px; + } + ul.controls-tabs li a { + display: block; + height: 100%; + background: url(../images/controls-tabs-bg.png) no-repeat; + line-height: 48px; + text-align: center; + text-decoration: none; + color: #666666; + position: relative; + } + ul.controls-tabs li a:hover { + background-position: 0 -48px; + } + ul.controls-tabs li.current a, + ul.controls-tabs li.current a:hover { + background-position: 0 -96px; + } + ul.controls-tabs li a img { + position: absolute; + left: 50%; + top: 50%; + margin: -11px 0 0 -12px; + } + +/***************** Block footer *****************/ +.block-footer { + background: #bfbfbf url(../images/old-browsers-bg/block-footer-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #8b8b8b, + #a9a9a9 10%, + #bdbdbd 30%, + #bfbfbf + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#8b8b8b), + to(#bfbfbf), + color-stop(0.1, #a9a9a9), + color-stop(0.3, #bdbdbd) + ); + margin: 0 -1.667em -1.667em -1.667em; + -moz-border-radius: 0 0 0.167em 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-radius: 0 0 0.167em 0.167em; + padding: 0.5em 0.75em; + line-height: 2em; + color: #4d4d4d; + } + section .no-margin + .block-footer { + margin-top: -1.667em; + } + .block-footer .sep { + display: inline-block; + width: 2px; + height: 3em; + vertical-align: -0.667em; + margin: -0.5em 0.25em; + background: url(../images/controls-bt-sep.png) no-repeat bottom; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + } + +/****************** Switches ********************/ +.switch-replace { + display: inline-block; + width: 70px; + height: 30px; + background: url(../images/switch-bg.png) no-repeat 0 -34px; + vertical-align: middle; + cursor: pointer; + } + .switch:checked + .switch-replace { + background-position: 0 0; + } + .switch:disabled + .switch-replace { + background-position: 0 -68px; + } + /** IE class **/ + .switch-replace-checked { + background-position: 0 0; + } + .switch-replace-disabled { + background-position: 0 -68px; + } + +.mini-switch-replace { + display: inline-block; + width: 40px; + height: 20px; + background: url(../images/mini-switch-bg.png) no-repeat 0 -24px; + vertical-align: middle; + cursor: pointer; + } + .mini-switch:checked + .mini-switch-replace { + background-position: 0 0; + } + .mini-switch:disabled + .mini-switch-replace { + background-position: 0 -48px; + } + /** IE class **/ + .mini-switch-replace-checked { + background-position: 0 0; + } + .mini-switch-replace-disabled { + background-position: 0 -48px; + } + +/****************** Messages ********************/ +.message { + line-height: 1.25em; + margin-bottom: 2.5em; + border: 1px solid #999999; + background: #F0F0F0; + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); + position: relative; + z-index: 89; + } + ul.message { + padding: 0.583em 0 0.083em 0; + } + ul.message li { + text-transform: uppercase; + font-size: 0.833em; + line-height: 1.3em; + padding: 0.2em 1em 0.8em 3em; + background-repeat: no-repeat; + background-position: 0.8em 0.1em; + } + p.message { + padding: 0.583em 0.833em 0.75em 2.5em; + background-repeat: no-repeat; + background-position: 0.667em 0.583em; + } + section .message { + margin-bottom: 1.667em; + } + .message:last-child { + margin-bottom: 0; + } + /* IE class */ + .message.last-child { + margin-bottom: 0; + } + .block-content .message { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + .block-content .message.no-margin { + margin: 0 -1.667em 1.667em -1.667em; + } + .block-content.no-padding .message.no-margin { + margin-left: 0; + margin-right: 0; + } + .block-content .message.no-margin, + .block-content.no-padding .message { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border-width: 1px 0; + } + .block-content.no-title .message.no-margin:first-child { + margin-top: -1.667em; + } + /* IE class */ + .block-content.no-title .message.no-margin.first-child { + margin-top: -1.667em; + } + .block-content.no-title .message.no-margin:first-child, + .block-content.no-padding .message:first-child { + border-top: none; + -moz-border-radius-topleft: 0.167em; + -moz-border-radius-topright: 0.167em; + -webkit-border-top-left-radius: 0.167em; + -webkit-border-top-right-radius: 0.167em; + border-top-left-radius: 0.167em; + border-top-right-radius: 0.167em; + } + /* IE class */ + .block-content.no-title .message.no-margin.first-child, + .block-content.no-padding .message.first-child { + border-top: none; + } + .block-content .message.no-margin:last-child { + margin-bottom: -1.667em; + } + /* IE class */ + .block-content .message.no-margin.last-child { + margin-bottom: -1.667em; + } + .block-content .message.no-margin:last-child, + .block-content.no-padding .message:last-child { + border-bottom: none; + -moz-border-radius-bottomleft: 0.167em; + -moz-border-radius-bottomright: 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-bottom-left-radius: 0.167em; + border-bottom-right-radius: 0.167em; + } + /* IE class */ + .block-content .message.no-margin.last-child, + .block-content.no-padding .message.last-child { + border-bottom: none; + } + section .block-controls + .message.no-margin, + section .block-header + .message.no-margin, + section .message.no-margin + .message.no-margin { + margin-top: -1.667em; + border-top: none; + } + + .message { + background-color: #e4e4dc; + border-color: #999999; + } + .message.warning { + background-color: #ffffcc; + border-color: #c3c39e; + } + .message.error { + background-color: #fff3f2; + border-color: #c00000; + } + .message.success { + background-color: #ddebdf; + border-color: #339933; + } + .message.loading { + background-color: #dcebf2; + border-color: #3399cc; + } + + .message li, + p.message { + background-image: url(../images/icons/fugue/information-ocre.png); + color: #576a73; + } + .message li strong, + p.message strong { + color: #576a73; + } + .message.warning li, + p.message.warning { + background-image: url(../images/icons/fugue/balloon.png); + color: #56563e; + } + .message.warning li strong, + p.message.warning strong { + color: #56563e; + } + .message.error li, + p.message.error { + background-image: url(../images/icons/fugue/cross-circle.png); + color: #563f3e; + } + .message.error li strong, + p.message.error strong { + color: #563f3e; + } + .message.success li, + p.message.success { + background-image: url(../images/icons/fugue/tick-circle.png); + color: #194a19; + } + .message.success li strong, + p.message.success strong { + color: #194a19; + } + .message.loading li, + p.message.loading { + background-image: url(../images/info-loader.gif); + color: #1e5774; + } + .message.loading li { + background-position: 0.8em 0.4em; + } + p.message.loading { + background-position: 0.667em 0.917em; + } + .message.loading li strong, + p.message.loading strong { + color: #1e5774; + } + +/**************** Close button ******************/ +.close-bt, +ul li.close-bt, +ul.message li.close-bt { + display: block; + position: absolute; + top: 0.083em; + right: 0.083em; + font-size: 1em; + line-height: 1em; + width: 1em; + height: 1em; + padding: 0; + margin: 0; + background: url(../images/icons/fugue/cross-small.png) no-repeat center center; + cursor: pointer; + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + opacity: 0.5; + filter: alpha(opacity=0.5); + } + .close-bt:hover, + ul li.close-bt:hover { + opacity: 1; + filter: none; + } + +/****************** Mini-menu *******************/ +.mini-menu { + position: absolute; + z-index: 89; + right: 2em; + top: 0; + padding: 0; + height: 1.833em; + display: none; + margin: -1.083em 0 -1.083em; + } + td > .mini-menu { + position: relative; + right: 0; + top: 0; + float: right; + margin-right: 1em; + } + :hover > .mini-menu { + display: block; + } + .mini-menu > li { + float: left; + color: #999999; + font-style: normal; + height: 1.833em; + } + .mini-menu > li > a { + display: block; + line-height: 1.333em; + height: 1.333em; + padding: 0.25em 0.417em; + border-left: 1px solid white; + border-right: 1px solid #CCCCCC; + color: #999; + } + /* IE class */ + .ie7 .mini-menu > li > a { + display: table-cell; + vertical-align: middle; + } + .mini-menu > li:first-child > a { + border-left: none; + -moz-border-radius-topleft: 0.25em; + -moz-border-radius-bottomleft: 0.25em; + -webkit-border-top-left-radius: 0.25em; + -webkit-border-bottom-left-radius: 0.25em; + border-top-left-radius: 0.25em; + border-bottom-left-radius: 0.25em; + } + /* IE class */ + .mini-menu > li.first-child > a { + border-left: none; + } + .mini-menu > li:last-child > a { + border-right: none; + -moz-border-radius-topright: 0.25em; + -moz-border-radius-bottomright: 0.25em; + -webkit-border-top-right-radius: 0.25em; + -webkit-border-bottom-right-radius: 0.25em; + border-top-right-radius: 0.25em; + border-bottom-right-radius: 0.25em; + } + /* IE class */ + .mini-menu > li.last-child > a { + border-right: none; + } + .mini-menu > li > a img { + margin: 0 0 -3px; + } + /* IE class */ + .ie7 .mini-menu > li > a img { + margin: 0; + vertical-align: middle; + } + +/********************* Tabs *********************/ +ul.tabs li > a, +ul.side-tabs li > a, +ul.tabs li > span, +ul.side-tabs li > span { + display: block; + background: #eeeeee url(../images/old-browsers-bg/tabs-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #ffffff, + #eeeeee + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#ffffff), + to(#eeeeee) + ); + padding: 0.583em; + color: #808080; + font-weight: bold; + border: 1px solid #b3b3b3; + text-decoration: none; + } + ul.tabs li > span, + ul.side-tabs li > span { + color: #bfbfbf; + } + ul.tabs li.current > a, + ul.side-tabs li.current > a, + ul.tabs li.current > span, + ul.side-tabs li.current > span { + background: white; + } + ul.tabs li > a:hover, + ul.side-tabs li > a:hover { + color: #3399cc; + border-color: #3399cc; + } + ul.tabs li > a img, + ul.side-tabs li > a img, + ul.tabs li > span img, + ul.side-tabs li > span img { + margin: -2px 0 -3px 0; + } + /* IE class */ + .ie7 ul.tabs li > a img, + .ie7 ul.side-tabs > li a img, + .ie7 ul.tabs li > span img, + .ie7 ul.side-tabs > li span img { + margin-bottom: -2px; + } + +ul.tabs { + margin-bottom: 1px; + height: 2.167em; + clear: none; + } + ul.tabs li { + float: left; + margin-right: 0.417em; + } + ul.tabs li > a, + ul.tabs li > span { + border-bottom: none; + -moz-border-radius: 0.25em 0.25em 0 0; + -webkit-border-top-left-radius: 0.25em; + -webkit-border-top-right-radius: 0.25em; + border-radius: 0.25em 0.25em 0 0; + margin-right: 0.083em; + } + ul.tabs li.current > a, + ul.tabs li.current > span { + padding-bottom: 0.667em; + } + ul.tabs li.with-margin { + margin-bottom: 0; + margin-left: 1em; + } + +ul.side-tabs { + padding-top: 0.417em; + } + ul.side-tabs li > a, + ul.side-tabs li > span { + border-right: none; + -moz-border-radius: 0.25em 0 0 0.25em; + -webkit-border-top-left-radius: 0.25em; + -webkit-border-bottom-left-radius: 0.25em; + border-radius: 0.25em 0 0 0.25em; + margin-bottom: 0.417em; + } + ul.side-tabs li.current > a, + ul.side-tabs li.current > span { + margin-right: -1px; + } + ul.side-tabs li.icon-tab { + float: right; + } + ul.side-tabs li.icon-tab > a, + ul.side-tabs li.icon-tab > span { + padding-right: 0.5em; + } + + ul.side-tabs li.with-margin { + margin-bottom: 0; + margin-top: 1em; + } + +.tabs-content { + background-color: white; + border: 1px solid #b3b3b3; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + padding: 1.667em; + } + ul.tabs + .tabs-content { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + } + +.mini-tabs { + border: 1px solid #b3b3b3; + border-width: 1px 0; + margin-bottom: 1.667em; + padding: 0.583em 0 0 0.5em; + height: 1.833em; + background: #dbdbdb url(../images/old-browsers-bg/mini-tabs-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #fafafa, + #dbdbdb + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#fafafa), + to(#dbdbdb) + ); + } + .mini-tabs.no-margin { + margin: 0 -1.667em 1.667em -1.667em; + } + .mini-tabs.no-margin:first-child { + margin-top: -1.667em; + border-top: 0; + -moz-border-radius: 0.167em 0.167em 0 0; + -webkit-border-top-left-radius: 0.167em; + -webkit-border-top-right-radius: 0.167em; + border-radius: 0.167em 0.167em 0 0; + } + .mini-tabs li { + float: left; + height: 1.833em; + line-height: 1.833em; + margin-right: 0.5em; + } + .mini-tabs li > a { + display: block; + height: 1.333em; + line-height: 1.333em; + margin-top: -1px; + padding: 0.25em 0.583em; + border: 1px solid #b3b3b3; + border-bottom: 0; + -moz-border-radius: 0.25em 0.25em 0 0; + -webkit-border-top-left-radius: 0.25em; + -webkit-border-top-right-radius: 0.25em; + border-radius: 0.25em 0.25em 0 0; + background: #dddddd url(../images/old-browsers-bg/mini-tabs-tab-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #ffffff, + #dddddd + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#ffffff), + to(#dddddd) + ); + color: #666666; + text-decoration: none; + } + .mini-tabs li > a img { + margin-bottom: -1px; + } + /* IE class */ + .ie7 .mini-tabs li > a img { + vertical-align: middle; + } + .mini-tabs li.current > a { + background: white; + padding-bottom: 0.333em; + } + .mini-tabs li > a:hover { + color: #3399cc; + border-color: #3399cc; + } + +/********************* Tips *********************/ +#tips { + z-index: 999900; + position: absolute; + top: 0; + left: 0; + pointer-events: none; +} +#tips div { + position: absolute; + background: #ffffcc; + border: 1px solid #a6a6a6; + -moz-border-radius: 0.333em; + -webkit-border-radius: 0.333em; + border-radius: 0.333em; + font-family: Arial, Helvetica, sans-serif; + font-size: 0.75em; + line-height: 1.222em; + text-transform: uppercase; + color: #333333; + padding: 0.222em 0.444em; + min-width: 5em; + text-align: center; + white-space: nowrap; + } + #tips div .arrow { + font-size: 0; + line-height: 0; + width: 0; + position: absolute; + z-index: 89; + left: 50%; + margin-left: -6px; + bottom: -7px; + border-top: 7px solid #a6a6a6; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + } + #tips div.tip-right .arrow { + bottom: auto; + left: -7px; + top: 50%; + margin-left: 0; + margin-top: -6px; + border-right: 7px solid #a6a6a6; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-left: 0; + } + #tips div.tip-bottom .arrow { + bottom: auto; + top: -7px; + border-top: 0; + border-bottom: 7px solid #a6a6a6; + } + #tips div.tip-left .arrow { + bottom: auto; + left: auto; + top: 50%; + right: -7px; + margin-left: 0; + margin-top: -6px; + border-left: 7px solid #a6a6a6; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-right: 0; + } + + #tips div .arrow span { + width: 0; + position: absolute; + z-index: 89; + margin-left: -5px; + top: -7px; + border-top: 6px solid #ffffcc; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + } + #tips div.tip-right .arrow span { + border-right: 6px solid #ffffcc; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 0; + margin-left: 0; + left: 1px; + top: auto; + margin-top: -5px; + } + #tips div.tip-bottom .arrow span { + top: 1px; + border-top: 0; + border-bottom: 6px solid #ffffcc; + } + #tips div.tip-left .arrow span { + border-left: 6px solid #ffffcc; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 0; + margin-left: 0; + right: 1px; + top: auto; + margin-top: -5px; + } + +/***************** Loading tab ******************/ +.loading-tab { + background: #8e8e8e url(../images/old-browsers-bg/loading-tab-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #636363, + #898989 25%, + #8e8e8e + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#636363), + to(#8e8e8e), + color-stop(0.25, #898989) + ); + border: 1px solid #b6b6b6; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + color: white; + padding: 0.5em 0.75em; + line-height: 2em; + margin-bottom: 1.667em; + -moz-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); + } + .loading-tab.no-margin { + border-width: 1px 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + .block-controls + .loading-tab.no-margin { + border-top: 0; + } + + .with-padding .loading-tab.stick-to-top { + border-top: 0; + -moz-border-radius: 0 0 0.25em 0.25em; + -webkit-border-bottom-left-radius: 0.25em; + -webkit-border-bottom-right-radius: 0.25em; + border-radius: 0 0 0.25em 0.25em; + margin-top: -1em; + margin-bottom: 0; + } + +/**************** Loading mask ******************/ +.loading-mask { + position: absolute; + z-index: 89; + top: 0; + left: 0; + padding: 0; + margin: 0; + width: 100%; + height: 100%; + background: url(../images/old-browsers-bg/black50.png); + background: rgba(0, 0, 0, 0.5); + overflow: hidden; + } + .loading-mask span { + position: absolute; + z-index: 89; + left: 50%; + top: 50%; + margin-top: -3.5em; + margin-left: -4.5em; + padding: 60px 1em 1em; + min-width: 7em; + line-height: 1.25em; + text-align: center; + color: white; + background: black url(../images/mask-loader.gif) no-repeat center 17px; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-radius: 0.5em; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); + } + .loading-mask span.error { + background-image: url(../images/icons/web-app/32/Delete.png); + color: red; + cursor: pointer; + } + .loading-mask span a { + color: white; + font-weight: bold; + } + +/**************** Progress bar ******************/ +.progress-bar { + display: inline-block; + position: relative; + z-index: 89; + height: 1.167em; + margin: 0 0.25em; + width: 6em; + padding: 0; + -moz-border-radius: 0.167em; + -webkit-border-radius: 0.167em; + border-radius: 0.167em; + color: #333333; + border: 1px solid #808080; + min-width: auto; + text-transform: none; + background: #a5a5a5 url(../images/old-browsers-bg/progress-bar-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + left, + rgba(0, 0, 0, 0.2), + rgba(0, 0, 0, 0) 3%, + rgba(0, 0, 0, 0) 97%, + rgba(0, 0, 0, 0.2) + ), -moz-linear-gradient( + top, + #808080, + #9b9b9b 15%, + #c3c3c3 85%, + #a5a5a5 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(0, 0, 0, 0.2)), + to(rgba(0, 0, 0, 0.2)), + color-stop(0.03, rgba(0, 0, 0, 0)), + color-stop(0.97, rgba(0, 0, 0, 0)) + ), -webkit-gradient( + linear, + left top, left bottom, + from(#808080), + to(#a5a5a5), + color-stop(0.15, #9b9b9b), + color-stop(0.85, #c3c3c3) + ); + text-align: center; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + vertical-align: -0.083em; + } + /* IE class */ + .ie7 .progress-bar { + vertical-align: middle; + margin-bottom: -0.083em; + } + .button .progress-bar { + vertical-align: -0.333em; + } + .progress-bar:first-child { + margin-left: 0; + } + /* IE class */ + .progress-bar.first-child { + margin-left: 0; + } + .progress-bar:last-child { + margin-right: 0; + } + /* IE class */ + .progress-bar.last-child { + margin-right: 0; + } + .progress-bar > span, + .progress-bar > span.blue { + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 100%; + font-size: 0.75em; + line-height: 1.333em; + color: white; + padding: 0; + margin: 0; + -moz-border-radius: 0.11em; + -webkit-border-radius: 0.11em; + -moz-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -webkit-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 1px black; + -webkit-box-shadow: 0 0 1px black; + box-shadow: 0 0 1px black; + background: #4398c9 url(../images/old-browsers-bg/planning-bar-blue-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #b0cde5, + #6ec3e3 15%, + #0e62a8 73%, + #4398c9 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#b0cde5), + to(#4398c9), + color-stop(0.15, #6ec3e3), + color-stop(0.73, #0e62a8) + ); + } + .progress-bar > span.with-stripes, + .progress-bar > span.blue.with-stripes { + background: #3399cc url(../images/loading-stripes.gif); + background-size: auto; + -moz-background-size: auto; + -webkit-background-size: auto; + background: url(../images/loading-stripes.png), -moz-linear-gradient( + top, + #b0cde5, + #6ec3e3 15%, + #0e62a8 73%, + #4398c9 + ); + background: url(../images/loading-stripes.gif), -webkit-gradient( + linear, + left top, left bottom, + from(#b0cde5), + to(#4398c9), + color-stop(0.15, #6ec3e3), + color-stop(0.73, #0e62a8) + ); + } + .progress-bar > span.green { + border-color: #15a80e; + background: #56c943 url(../images/old-browsers-bg/planning-bar-green-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #b3e6b1, + #8ae46f 15%, + #15a80e 73%, + #56c943 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#b3e6b1), + to(#56c943), + color-stop(0.15, #8ae46f), + color-stop(0.73, #15a80e) + ); + } + .progress-bar > span.green.with-stripes { + background: #33cc33 url(../images/loading-stripes.gif); + background-size: auto; + -moz-background-size: auto; + -webkit-background-size: auto; + background: url(../images/loading-stripes.png), -moz-linear-gradient( + top, + #b3e6b1, + #8ae46f 15%, + #15a80e 73%, + #56c943 + ); + background: url(../images/loading-stripes.gif), -webkit-gradient( + linear, + left top, left bottom, + from(#b3e6b1), + to(#56c943), + color-stop(0.15, #8ae46f), + color-stop(0.73, #15a80e) + ); + } + .progress-bar > span.orange { + border-color: #a8750e; + background: #c99c43 url(../images/old-browsers-bg/planning-bar-orange-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #e6d4b1, + #e4bd6f 15%, + #a8750e 73%, + #c99c43 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#e6d4b1), + to(#c99c43), + color-stop(0.15, #e4bd6f), + color-stop(0.73, #a8750e) + ); + } + .progress-bar > span.orange.with-stripes { + background: #ff9900 url(../images/loading-stripes.gif); + background-size: auto; + -moz-background-size: auto; + -webkit-background-size: auto; + background: url(../images/loading-stripes.png), -moz-linear-gradient( + top, + #e6d4b1, + #e4bd6f 15%, + #a8750e 73%, + #c99c43 + ); + background: url(../images/loading-stripes.gif), -webkit-gradient( + linear, + left top, left bottom, + from(#e6d4b1), + to(#c99c43), + color-stop(0.15, #e4bd6f), + color-stop(0.73, #a8750e) + ); + } + .progress-bar > span.purple { + border-color: #a10ea8; + background: #b543c9 url(../images/old-browsers-bg/planning-bar-purple-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #e3b1e6, + #c86fe4 15%, + #a10ea8 73%, + #b543c9 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#e3b1e6), + to(#b543c9), + color-stop(0.15, #c86fe4), + color-stop(0.73, #a10ea8) + ); + } + .progress-bar > span.purple.with-stripes { + background: #9933cc url(../images/loading-stripes.gif); + background-size: auto; + -moz-background-size: auto; + -webkit-background-size: auto; + background: url(../images/loading-stripes.png), -moz-linear-gradient( + top, + #e3b1e6, + #c86fe4 15%, + #a10ea8 73%, + #b543c9 + ); + background: url(../images/loading-stripes.gif), -webkit-gradient( + linear, + left top, left bottom, + from(#e3b1e6), + to(#b543c9), + color-stop(0.15, #c86fe4), + color-stop(0.73, #a10ea8) + ); + } + +/* Clear Floated Elements +----------------------------------------------------------------------------------------------------*/ + +/* http://sonspring.com/journal/clearing-floats */ +.clear { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + +/* http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack */ +.clearfix:after, +.block-controls:after, +.side-tabs:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +.clearfix, +.block-controls, +.side-tabs { + display: inline-block; +} + +* html .clearfix, +* html .block-controls, +* html .side-tabs { + height: 1%; +} + +.clearfix, +.block-controls, +.side-tabs { + display: block; +} + + +/* Bunları sonradan bvidinli tarafından eklendi.*/ + +th.list { + font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #4f6b72; + border-right: 1px solid #C1DAD7; + border-left: 1px solid #C1DAD7; + border-bottom: 1px solid #C1DAD7; + border-top: 1px solid #C1DAD7; + letter-spacing: 2px; + text-transform: uppercase; + text-align: left; + padding: 6px 6px 6px 12px; + background: #CAE8EA url(images/bg_header.jpg) no-repeat; +} + +th.nobg { + border-top: 0; + + border-left: 1px solid #C1DAD7; + border-right: 1px solid #C1DAD7; + background: none; +} + +td.list { + border-left: 1px solid #C1DAD7; + border-right: 1px solid #C1DAD7; + border-bottom: 1px solid #C1DAD7; + background: #fff; + padding: 6px 6px 6px 12px; + color: #4f6b72; +} + + +td.alt { + background: #F5FAFA; + color: #797268; +} + +th.spec { + border-left: 1px solid #C1DAD7; + border-top: 0; + background: #fff url(images/bullet1.gif) no-repeat; + font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; +} + +th.specalt { + border-left: 1px solid #C1DAD7; + border-top: 0; + background: #f5fafa url(images/bullet2.gif) no-repeat; + font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #797268; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/form.css b/ehcp/templates/sky/en/css/form.css new file mode 100755 index 0000000..3c64430 --- /dev/null +++ b/ehcp/templates/sky/en/css/form.css @@ -0,0 +1,548 @@ +/************** Forms & pseudo-form **************/ +.form fieldset, +.fieldset { + border: 1px solid #d9d9d9; + padding: 1em 1.667em 1.667em 1.667em; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + margin-bottom: 1.667em; + } + /* IE class */ + .ie7 .block-content .form fieldset.no-margin, + .ie7 .form.block-content fieldset.no-margin, + .ie7 .form .block-content fieldset.no-margin { + display: block; + width: 100%; + } + .fieldset { + position: relative; + z-index: 89; + padding-top: 1.667em; + } + .with-legend { + margin-top: 1em; + } + /* IE class */ + .ie .form fieldset { + padding-top: 0; + } + .form legend, + .legend { + margin-left: -0.833em; + } + .legend { + position: absolute; + left: 1.667em; + top: -1.083em; + } + /* IE class */ + .ie .form legend { + margin-bottom: 1em; + margin-top: -1em; + } + .ie .form .fieldset-with-legend { + margin-top: 2em; + } + .ie .form .fieldset-with-legend-first-child { + margin-top: 1em; + } + .form legend a, + .legend a { + display: block; + margin: -0.25em -0.333em -0.333em -0.5em; + padding: 0.25em 20px 0.333em 0.5em; + color: #666; + background: url(../images/icons/fugue/chevron-off.png) no-repeat right 60%; + } + .form legend a:hover, + .legend a:hover { + color: #3399cc; + background-image: url(../images/icons/fugue/chevron.png); + } + + .form fieldset.collapsed, + .fieldset.collapsed { + border: none; + padding: 0; + background: none; + } + .form fieldset.no-margin.collapsed, + .fieldset.no-margin.collapsed { + padding-left: 1.667em; + } + .form fieldset.no-margin.collapsed:last-child, + .fieldset.no-margin.collapsed:last-child { + padding-bottom: 1.667em; + } + /* IE class */ + .form fieldset.no-margin.collapsed.last-child, + .fieldset.no-margin.collapsed.last-child { + padding-bottom: 0.667em; + } + .form fieldset.collapsed > *, + .fieldset.collapsed > * { + display: none; + } + .form fieldset.collapsed legend, + .fieldset.collapsed .legend { + display: block; + margin-left: 0; + } + .ie7 .form fieldset.collapsed legend, + .ie7 .fieldset.collapsed .legend { + display: inline-block; + } + .form fieldset.collapsed legend a, + .fieldset.collapsed .legend a { + background-image: url(../images/icons/fugue/chevron-expand-off.png); + } + .form fieldset.collapsed legend a:hover, + .fieldset.collapsed .legend a:hover { + background-image: url(../images/icons/fugue/chevron-expand.png); + } + + fieldset legend .show-expanded, .fieldset .legend .show-expanded { display: inline; } + fieldset legend .show-collapsed, .fieldset .legend .show-collapsed { display: none; } + fieldset.collapsed legend .show-expanded, .fieldset.collapsed .legend .show-expanded { display: none; } + fieldset.collapsed legend .show-collapsed, .fieldset.collapsed .legend .show-collapsed { display: inline; } + + .block-content .form fieldset.no-margin, + .block-content.form fieldset.no-margin, + .form .block-content fieldset.no-margin, + .block-content .fieldset.no-margin { + border-color: #999999; + border-width: 1px 0 1px 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + } + .form fieldset.no-margin legend, + .fieldset.no-margin .legend { + margin-left: 0; + } + /* IE class */ + .ie7 .form fieldset.no-margin legend { + margin-left: -0.667em; + } + + .form fieldset:last-child, + .fieldset:last-child { + margin-bottom: 0; + } + /* IE class */ + .form fieldset.last-child, + .fieldset.last-child { + margin-bottom: 0; + } + .block-content .form fieldset.no-margin:last-child, + .block-content.form fieldset.no-margin:last-child, + .form .block-content fieldset.no-margin:last-child, + section .fieldset.no-margin:last-child { + border-bottom: 0; + -moz-border-radius: 0 0 0.167em 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-radius: 0 0 0.167em 0.167em; + } + /* IE class */ + .block-content .form fieldset.no-margin.last-child, + .block-content.form fieldset.no-margin.last-child, + .form .block-content fieldset.no-margin.last-child, + .fieldset.no-margin.last-child { + border-bottom: 0; + } + + .form label, + .form .label { + color: #808080; + font-weight: bold; + display: block; + margin-bottom: 0.5em; + } + .form label.light, + .form .label.light { + font-weight: normal; + color: #777; + } + .form label.inline, + .form .label.inline { + display: inline; + float: none; + margin: 0; + font-weight: normal; + } + .form .required label, + .form .required .label, + .form label.required, + .form .label.required, + .form label.inline.required, + .form .label.inline.required { + color: black; + } + .form .required label:before, + .form .required .label:before, + .form label.required:before, + .form .label.required:before { + color: red; + content: "* "; + } + /** IE class **/ + .form .required-label-before { + color: red; + } + + p.inline-label, + .inline-label p { + padding-left: 20em; + } + p.inline-mini-label, + .inline-mini-label p { + padding-left: 5em; + } + p.inline-small-label, + .inline-small-label p { + padding-left: 11em; + } + p.inline-medium-label, + .inline-medium-label p { + padding-left: 15em; + } + .inline-label label, + .inline-label .label, + .inline-mini-label label, + .inline-mini-label .label, + .inline-small-label label, + .inline-small-label .label, + .inline-medium-label label, + .inline-medium-label .label { + display: block; + float: left; + color: #333333; + padding: 0.667em 0 0.583em; + } + .inline-label label, + .inline-label .label { + width: 19em; + margin-left: -20em; + } + .inline-mini-label label, + .inline-mini-label .label { + width: 4em; + margin-left: -5em; + } + .inline-small-label label, + .inline-small-label .label { + width: 10em; + margin-left: -11em; + } + .inline-medium-label label, + .inline-medium-label .label { + width: 14em; + margin-left: -15em; + } + + /** IE class **/ + .form input[type=text], + .form input[type=password], + .form .input-type-text { + font-size: 1em; + line-height: 1em; + color: #333333; + padding: 0.5em; + border: 1px solid #89bad3; + background: white url(../images/old-browsers-bg/input-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #d4d4d4, + #ebebeb 3px, + white 27px + ), white; + background: -webkit-gradient( + linear, + left 0px, left 27px, + from(#d4d4d4), + to(white), + color-stop(0.12, #ebebeb) + ), white; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + } + .form input[type=text], + .form input[type=password] { + padding-bottom: 0.583em; + } + .form input[type=text]:focus, + .form input[type=password]:focus, + .form .input-type-text:focus, + .form select:focus, + .form textarea:focus { + border-color: #3399cc; + } + /** IE selector **/ + .form .input-focus { + border-color: #3399cc; + } + .form span.input-type-text { + display: inline-block; + } + /** IE class **/ + .ie7 .form p.input-type-text { + display: inline-block; + } + .form .input-type-text input[type=text], + .form .input-type-text input[type=password] { + padding: 0; + border: none; + background: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + margin: 0 0 1px 0; + } + /** IE class **/ + .ie7 .form .input-type-text input[type=text] { + float: left; + } + .form .input-type-text img { + margin: 0 0 -3px 0.2em; + } + + .form select, + .form textarea { + color: #333333; + font-size: 1em; + padding: 0.417em; + border: 1px solid #89bad3; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + } + .form textarea { + background: white url(../images/old-browsers-bg/input-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #d4d4d4, + #ebebeb 3px, + white 27px + ), white; + background: -webkit-gradient( + linear, + left 0px, left 27px, + from(#d4d4d4), + to(white), + color-stop(0.12, #ebebeb) + ), white; + } + .form select { + font-size: 1.083em; + padding: 0.385em; + } + + .form input[type=text].small, + .form input[type=password].small, + .form select.small, + .form textarea.small { + font-size: 1em; + padding: 0.167em; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + } + .form input[type=text].small, + .form input[type=password].small { + padding: 0.25em; + } + .form input[type=text].smaller, + .form input[type=password].smaller, + .form select.smaller, + .form textarea.smaller { + font-size: 1em; + padding: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + } + .form input[type=text].big, + .form input[type=password].big, + .form select.big, + .form textarea.big { + font-size: 1.5em; + } + .form input[type=text].bigger, + .form input[type=password].bigger, + .form select.bigger, + .form textarea.bigger { + font-size: 2.5em; + } + + .form input[type=radio], + .form input[type=checkbox] { + vertical-align: -9%; + margin: 0; + padding: 0; + } + /** IE class **/ + .form .input-type-check { + vertical-align: -7%; + } + .form input[type=radio] + label, + .form input[type=checkbox] + label { + color: #333333; + font-weight: normal; + display: inline; + margin-bottom: 0; + padding-right: 0.5em; + } + /** IE class **/ + .form .input-type-check-label { + color: #333333; + font-weight: normal; + display: inline; + margin-bottom: 0; + padding-right: 0.5em; + } + .form input[type=radio] + label:last-child, + .form input[type=checkbox] + label:last-child { + padding-right: 0; + } + /** IE class **/ + .form .input-type-check-label-last-child { + padding-right: 0; + } + + .checkable-list { + padding-top: 0.333em; + line-height: 1.25em; + } + .checkable-list li { + padding: 0 0 0.75em 1.25em; + } + .checkable-list li:last-child { + padding-bottom: 0; + } + /** IE class **/ + .checkable-list li.last-child { + padding-bottom: 0; + } + .checkable-list li input[type=radio], + .checkable-list li input[type=checkbox] { + float: left; + vertical-align: baseline; + margin: 1px 0 0 -1.167em; + } + /** IE class **/ + .ie .checkable-list li input[type=radio], + .ie .checkable-list li input[type=checkbox] { + margin: -3px 0 0 -1.25em; + } + .checkable-list li .input-type-radio, + .checkable-list li .input-type-checkbox { + float: left; + margin: -3px 0 0 -1.25em; + } + + .full-width { + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + } + .ie7 .full-width { + width: 93%; + } + .ie7 select.full-width { + width: 100%; + } + .input-with-button input[type=text] { + width: 65%; + margin-right: 3%; + } + /** IE class **/ + .input-with-button .input-type-text { + width: 65%; + margin-right: 3%; + } + .input-with-button select { + width: 70%; + margin-right: 3%; + } + .input-with-button button { + width: 25%; + } + + .input-height { + display: block; + line-height: 1em; + padding: 0.583em 0 0.75em; + border: 1px solid transparent; + } + .input-height.grey-bg { + background: #cccccc; + border: 1px solid #cccccc; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + padding-left: 0.75em; + padding-right: 0.75em; + } + p.input-height, + p.input-height.grey-bg { + line-height: 1.25em; + padding-top: 0.5em; + padding-bottom: 0.583em; + } + + .one-line-input { + text-align: right; + } + .one-line-input label { + float: left; + margin: 0.2em 0 0 0; + } + + .form input[type=text].error, + .form input[type=password].error, + .form .input-type-text.error { + border-color: #CC0000; + } + + .check-ok, + .check-error, + .check-warning { + display: block; + position: absolute; + z-index: 89; + width: 16px; + height: 16px; + right: -8px; + top: -8px; + } + .check-ok { background: url(../images/icons/fugue/tick-circle-blue.png) no-repeat; } + .check-error { background: url(../images/icons/fugue/cross-circle.png) no-repeat; } + .check-warning { background: url(../images/icons/fugue/exclamation-diamond.png) no-repeat; } + + span.relative > input + .check-ok, + span.relative > select + .check-ok, + span.relative > input + .check-error, + span.relative > select + .check-error, + span.relative > input + .check-warning, + span.relative > select + .check-warning { + margin-top: -0.667em; + right: -4px; + } + p span.relative > input + .check-ok, + p span.relative > select + .check-ok, + p span.relative > input + .check-error, + p span.relative > select + .check-error, + p span.relative > input + .check-warning, + p span.relative > select + .check-warning { + margin-top: -0.583em; + } + + +.inputform { + vertical-align:middle; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/reset.css b/ehcp/templates/sky/en/css/reset.css new file mode 100755 index 0000000..83db1a8 --- /dev/null +++ b/ehcp/templates/sky/en/css/reset.css @@ -0,0 +1,69 @@ +/* + * Global reset + * Based on Eric Meyer's : http://meyerweb.com/eric/thoughts/2008/01/15/resetting-again/ + */ +a, abbr, acronym, address, applet, article, aside, audio, +b, big, blockquote, body, +canvas, caption, center, cite, code, command, +datalist, dd, del, details, dfn, div, dl, dt, +em, embed, +fieldset, figcaption, figure, font, footer, form, +h1, h2, h3, h4, h5, h6, header, hgroup, html, +i, iframe, img, ins, +kbd, keygen, +label, legend, li, +meter, +nav, +object, ol, output, +p, pre, progress, +q, +s, samp, section, small, source, span, strike, strong, sub, sup, +table, tbody, td, tfoot, th, thead, tr, tt, +u, ul, +var, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; + z-index: 1; +} + +/* + * Default HTML5 behaviour for older browsers + */ +article, aside, audio, canvas, command, datalist, +details, embed, figcaption, figure, footer, header, +hgroup, keygen, meter, nav, output, progress, +section, source, video { display: block; } +mark, rp, rt, ruby, summary, time{ display: inline } + +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +:focus { + outline: 0; +} +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} +a { + text-decoration: none; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/simple-lists.css b/ehcp/templates/sky/en/css/simple-lists.css new file mode 100755 index 0000000..53d51cc --- /dev/null +++ b/ehcp/templates/sky/en/css/simple-lists.css @@ -0,0 +1,770 @@ +/** + * Simple lists styles + */ + +/****************** Basic list ******************/ +.bullet-list li { + padding-top: 0.083em; + margin-bottom: 0.75em; + background: url(../images/icons/fugue/control-000-small.png) no-repeat 0 0.167em; + padding-left: 1.5em; + line-height: 1.25em; +} + +/**************** Keywords list *****************/ +.keywords { + font-size: 0.833em; + line-height: 2.2em; + } + .keywords li { + display: inline-block; + background: #3399cc; + -moz-border-radius: 0.4em; + -webkit-border-radius: 0.4em; + line-height: 1.6em; + border-radius: 0.4em; + padding: 0.2em 0.5em; + font-weight: bold; + color: white; + text-transform: uppercase; + white-space: nowrap; + } + /* IE class */ + .ie7 .keywords li { + display: inline; + margin-right: 0.3em; + } + .keywords li.orange-keyword { background-color: #cc9900; } + .keywords li.purple-keyword { background-color: #cc0066; } + .keywords li.green-keyword { background-color: #009900; } + .keywords li a { + margin: -0.4em -0.5em; + padding: 0.4em 0.5em; + color: white; + } + .keywords li img { + margin-bottom: -4px; + } + /* IE class */ + .ie7 .keywords li img { + margin-bottom: 0; + vertical-align: middle; + } + + .table tbody th .keywords, + .table tbody td .keywords { + margin: -0.3em -0.2em; + } + +/****************** Tags list *******************/ +ul.floating-tags { + float: right; + width: 10em; + margin-bottom: 0; +} +ul.tags { + line-height: 2em; + } + ul.tags li, + ul.floating-tags li { + background: #808080; + font-size: 0.833em; + -moz-border-radius: 0.4em; + -webkit-border-radius: 0.4em; + border-radius: 0.4em; + color: white; + text-transform: uppercase; + white-space: nowrap; + line-height: 1.3em; + background-repeat: no-repeat; + background-position: 0.2em center; + padding: 0.4em 0.5em; + } + ul.tags li { + display: inline-block; + } + /* IE class */ + .ie7 ul.tags li { + float: left; + margin-right: 0.25em; + } + /* IE class */ + .ie7 ul.tags li.last-child { + margin-right: 0; + } + ul.floating-tags li { + margin-bottom: 0.3em; + } + ul.floating-tags li:last-child { + margin-bottom: 0; + } + /* IE class */ + ul.floating-tags li.last-child { + margin-bottom: 0; + } + ul.tags li a, + ul.floating-tags li a { + color: white; + } + + ul.tags .tag-time, + ul.tags .tag-tags, + ul.tags .tag-user, + ul.floating-tags .tag-time, + ul.floating-tags .tag-tags, + ul.floating-tags .tag-user { + padding-left: 2em; + } + + ul.tags .tag-time, ul.floating-tags .tag-time { background-image: url(../images/icons/fugue/clock.png); } + ul.tags .tag-tags, ul.floating-tags .tag-tags { background-image: url(../images/icons/fugue/tags-label.png); } + ul.tags .tag-user, ul.floating-tags .tag-user { background-image: url(../images/icons/fugue/user.png); } + +/*************** Small pagination ***************/ +.small-pagination { + text-align: center; + } + ul + .small-pagination { + margin-top: -0.667em; + } + .small-pagination li { + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; + display: inline-block; + font-size: 0.75em; + height: 1.555em; + line-height: 1.555em; + padding: 0 0.333em 0 0.222em; + min-width: 1em; + text-align: center; + background: #d0d0d0; + color: #666666; + -moz-border-radius: 0.778em; + -webkit-border-radius: 0.778em; + border-radius: 0.778em; + } + /* IE class */ + .ie7 .small-pagination li { + display: inline; + margin-right: 0.333em; + } + /* IE class */ + .ie7 .small-pagination li.last-child { + display: inline; + margin-right: 0; + } + .small-pagination li a { + display: block; + margin: 0 -0.333em 0 -0.222em; + padding: 0 0.333em 0 0.222em; + height: 1.555em; + min-width: 1em; + color: white; + background-color: #3399cc; + -moz-border-radius: 0.778em; + -webkit-border-radius: 0.778em; + border-radius: 0.778em; + } + + .small-pagination li.current a, + .small-pagination li a:hover { + background-color: #7cc5e9; + } + + .small-pagination li.prev, + .small-pagination li.next { + background: none; + vertical-align: middle; + } + /* IE class */ + .ie7 .small-pagination li.prev, + .ie7 .small-pagination li.next { + vertical-align: auto; + } + .small-pagination li.prev a, + .small-pagination li.next a { + margin: -0.111em -0.444em -0.111em -0.333em; + padding: 0.111em 0.444em 0.111em 0.333em; + width: 1em; + overflow: hidden; + text-indent: 100em; + } + .small-pagination li.prev a { + background: url(../images/icons/fugue/navigation-180.png) no-repeat center center; + } + .small-pagination li.prev a:hover { + background-image: url(../images/icons/fugue/navigation-180-white.png); + } + .small-pagination li.next a { + background: url(../images/icons/fugue/navigation.png) no-repeat center center; + } + .small-pagination li.next a:hover { + background-image: url(../images/icons/fugue/navigation-000-white.png); + } + /* IE class */ + .ie7 .small-pagination li.prev a, + .ie7 .small-pagination li.next a { + background-position: 0 0; + } + +/********************* Arbo *********************/ +ul.arbo { + margin-top: 0.5em; + } + ul.arbo li { + background: url(../images/arbo-points-v.gif) repeat-y 8px 0.667em; + padding-left: 20px; + line-height: 1.333em; + padding-bottom: 0.333em; + } + ul.arbo li:last-child { + background: url(../images/arbo-points-v-end.gif) no-repeat 8px -7px; + } + /* IE class */ + ul.arbo li.last-child, + ul.arbo li.first-child.last-child { + background: url(../images/arbo-points-v-end.gif) no-repeat 8px -7px; + } + ul.arbo > li:only-child { + background: url(../images/arbo-points-h.gif) no-repeat 8px 0.75em; + } + /* IE class */ + ul.arbo > li.first-child.last-child { + background: url(../images/arbo-points-h.gif) no-repeat 8px 0.75em; + } + ul.arbo li > a, + ul.arbo li > span { + color: #333; + display: block; + padding-left: 12px; + } + /* IE class */ + .ie7 ul.arbo li > a, + .ie7 ul.arbo li > span { + float: left; + } + .dark-grey-gradient ul.arbo li > a, + .dark-grey-gradient ul.arbo li > span { + color: white; + } + ul.arbo li > a:hover span, + ul.arbo li > a.current span { + background: #999999; + color: white; + padding: 0.083em 0.25em 0.167em; + margin: -0.083em -0.25em -0.167em; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + border-radius: 0.25em; + } + ul.arbo li.closed ul { + display: none; + } + ul.arbo li ul li:first-child { + padding-top: 0.5em; + background-position: 8px 1.167em; + } + /* IE class */ + ul.arbo li ul li.first-child { + padding-top: 0.5em; + background-position: 8px 1.167em; + } + ul.arbo li ul li:only-child { + background-position: 8px -1px; + } + /* IE class */ + ul.arbo li ul li.first-child.last-child { + background-position: 8px -1px; + } + + ul.arbo li span.toggle { + padding: 0; + float: left; + width: 16px; + height: 1.333em; + margin: 1px 0 -1px -19px; + background: url(../images/icons/toggle-small-sprite.png) no-repeat 0 center; + cursor: pointer; + } + ul.arbo li span.toggle:hover { + background-position: -16px center; + } + ul.arbo li.closed span.toggle { + background-position: -32px center; + } + ul.arbo li.closed span.toggle:hover { + background-position: -48px center; + } + + ul.arbo li .loading { + padding-left: 32px; + color: #999999; + background: url(../images/arbo-loader.gif) no-repeat 10px center; + } + .dark-grey-gradient ul.arbo li .loading, + ul.arbo.dark-grey-gradient li .loading { + background-image: url(../images/arbo-loader-grey.gif); + } + ul.arbo li .empty { + color: #999999; + font-style: italic; + } + + ul.arbo li .document, + ul.arbo li .document-access, + ul.arbo li .document-binary, + ul.arbo li .document-bookmark, + ul.arbo li .document-code, + ul.arbo li .document-excel, + ul.arbo li .document-film, + ul.arbo li .document-flash, + ul.arbo li .document-illustrator, + ul.arbo li .document-image, + ul.arbo li .document-music, + ul.arbo li .document-office, + ul.arbo li .document-pdf, + ul.arbo li .document-photoshop, + ul.arbo li .document-powerpoint, + ul.arbo li .document-text, + ul.arbo li .document-web, + ul.arbo li .document-word, + ul.arbo li .document-zip, + ul.arbo li .folder, + ul.arbo li .folder-bookmark, + ul.arbo li .folder-document, + ul.arbo li .folder-music, + ul.arbo li .folder-text, + ul.arbo li .folder-film, + ul.arbo li .folder-image, + ul.arbo li .folder-table, + ul.arbo li .folder-zipper { + padding-left: 20px; + background-repeat: no-repeat; + } + ul.arbo li .document { background-image: url(../images/icons/fugue/document.png); } + ul.arbo li .document-access { background-image: url(../images/icons/fugue/document-access.png); } + ul.arbo li .document-binary { background-image: url(../images/icons/fugue/document-binary.png); } + ul.arbo li .document-bookmark { background-image: url(../images/icons/fugue/document-bookmark.png); } + ul.arbo li .document-code { background-image: url(../images/icons/fugue/document-code.png); } + ul.arbo li .document-excel { background-image: url(../images/icons/fugue/document-excel.png); } + ul.arbo li .document-film { background-image: url(../images/icons/fugue/document-film.png); } + ul.arbo li .document-flash { background-image: url(../images/icons/fugue/document-flash-movie.png); } + ul.arbo li .document-illustrator { background-image: url(../images/icons/fugue/document-illustrator.png); } + ul.arbo li .document-image { background-image: url(../images/icons/fugue/document-image.png); } + ul.arbo li .document-music { background-image: url(../images/icons/fugue/document-music.png); } + ul.arbo li .document-office { background-image: url(../images/icons/fugue/document-office.png); } + ul.arbo li .document-pdf { background-image: url(../images/icons/fugue/document-pdf.png); } + ul.arbo li .document-photoshop { background-image: url(../images/icons/fugue/document-photoshop.png); } + ul.arbo li .document-powerpoint { background-image: url(../images/icons/fugue/document-powerpoint.png); } + ul.arbo li .document-text { background-image: url(../images/icons/fugue/document-text.png); } + ul.arbo li .document-web { background-image: url(../images/icons/fugue/document-globe.png); } + ul.arbo li .document-word { background-image: url(../images/icons/fugue/document-word.png); } + ul.arbo li .document-zip { background-image: url(../images/icons/fugue/document-zipper.png); } + + ul.arbo li .folder { background-image: url(../images/icons/fugue/folder-open.png); } + ul.arbo li.closed .folder { background-image: url(../images/icons/fugue/folder.png); } + ul.arbo li .folder-bookmark { background-image: url(../images/icons/fugue/folder-bookmark.png); } + ul.arbo li .folder-document { background-image: url(../images/icons/fugue/folder-open-document.png); } + ul.arbo li .folder-music { background-image: url(../images/icons/fugue/folder-open-document-music.png); } + ul.arbo li .folder-text { background-image: url(../images/icons/fugue/folder-open-document-text.png); } + ul.arbo li .folder-film { background-image: url(../images/icons/fugue/folder-open-film.png); } + ul.arbo li .folder-image { background-image: url(../images/icons/fugue/folder-open-image.png); } + ul.arbo li .folder-table { background-image: url(../images/icons/fugue/folder-open-table.png); } + ul.arbo li .folder-zipper { background-image: url(../images/icons/fugue/folder-zipper.png); } + + ul.arbo.with-title > li { + background: none; + padding-left: 0; + padding-bottom: 1em; + font-size: 1.25em; + line-height: 1.71em; + font-weight: bold; + } + ul.arbo.with-title > li > a, + ul.arbo.with-title > li > span { + padding-left: 7px; + } + /* IE class */ + .ie7 ul.arbo.with-title > li > a, + .ie7 ul.arbo.with-title > li > span { + float: none; + } + ul.arbo.with-title > li > ul { + margin-left: 5px; + font-size: 0.8em; + font-weight: normal; + } + + ul.arbo.with-title > li > .title-computer, + ul.arbo.with-title > li > .title-picture, + ul.arbo.with-title > li > .title-print, + ul.arbo.with-title > li > .title-user, + ul.arbo.with-title > li > .title-search { + padding-left: 30px; + padding-bottom: 3px; + background-repeat: no-repeat; + background-position: 0 center; + } + ul.arbo.with-title > li > .title-computer { background-image: url(../images/icons/web-app/24/Loading.png); } + ul.arbo.with-title > li > .title-picture { background-image: url(../images/icons/web-app/24/Picture.png); } + ul.arbo.with-title > li > .title-print { background-image: url(../images/icons/web-app/24/Print.png); } + ul.arbo.with-title > li > .title-user { background-image: url(../images/icons/web-app/24/Profile.png); } + ul.arbo.with-title > li > .title-search { background-image: url(../images/icons/web-app/24/Search.png); } + +/****************** Icons lists *****************/ +.picto-list li { + line-height: 1.25em; + padding: 0.083em; + padding-left: 1.667em; + margin-bottom: 0.333em; + background: url(../images/icons/fugue/control-000-small.png) no-repeat 0 1px; + } + .picto-list.with-line-spacing li { + margin-bottom: 1em; + } + .picto-list li:last-child { + margin-bottom: 0; + } + + + .picto-list.icon-info li, .picto-list li.icon-info { background-image: url(../images/icons/fugue/information-blue.png); } + .picto-list.icon-image li, .picto-list li.icon-image { background-image: url(../images/icons/fugue/image.png); } + .picto-list.icon-user li, .picto-list li.icon-user { background-image: url(../images/icons/fugue/user.png); } + .picto-list.icon-top li, .picto-list li.icon-top { background-image: url(../images/icons/fugue/arrow-curve-090.png); } + .red .picto-list.icon-top li, .red .picto-list li.icon-top { background-image: url(../images/icons/fugue/arrow-curve-090-red.png); } + .picto-list.icon-tag-small li, .picto-list li.icon-tag-small { background-image: url(../images/icons/fugue/tag-small.png); } + .picto-list.icon-doc-small li, .picto-list li.icon-doc-small { background-image: url(../images/icons/fugue/document-small.png); } + .picto-list.icon-pin-small li, .picto-list li.icon-pin-small { background-image: url(../images/icons/fugue/pin-small.png); } + +/****************** Simple list *****************/ +.simple-list li { + background: #f2f2f2; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + padding: 0.75em; + color: #333333; + margin-bottom: 0.25em; + } + .simple-list li:last-child { + margin-bottom: 0; + } + /* IE class */ + .simple-list li.last-child { + margin-bottom: 0; + } + .simple-list li a, + .simple-list li span { + display: block; + margin: -0.75em; + padding: 0.75em; + color: #333333; + background-repeat: no-repeat; + background-position: 0.667em center; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + } + .simple-list li a:hover, + .simple-list li span:hover { + background-color: #e0e0e0; + } + + .simple-list.with-icon li a, + .simple-list.with-icon li span, + .simple-list .with-icon li a, + .simple-list .with-icon li span, + .simple-list li.with-icon a, + .simple-list li.with-icon span { + background-image: url(../images/icons/fugue/control-000-small.png); + padding-left: 2.5em; + } + +/*************** Collapsible list ***************/ +.collapsible-list > li { + padding: 0.75em; + color: #333333; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + margin-bottom: 0.25em; + } + .collapsible-list.with-bg > li { + background: #f2f2f2; + } + .collapsible-list > li:last-child { + margin-bottom: 0; + } + /* IE class */ + .collapsible-list > li.last-child { + margin-bottom: 0; + } + .collapsible-list li a, + .collapsible-list li span { + display: block; + margin: -0.5em; + padding: 0.5em; + color: #333333; + background-repeat: no-repeat; + background-position: 0.417em center; + } + .collapsible-list > li > a, + .collapsible-list > li > span { + margin: -0.75em; + padding: 0.75em; + background-position: 0.667em center; + } + .collapsible-list.with-bg > li > a, + .collapsible-list.with-bg > li > span { + -moz-border-radius: 0.417em 0.417em 0 0.417em; + -webkit-border-radius: 0.417em; + -webkit-border-bottom-right-radius: 0; + border-radius: 0.417em 0.417em 0 0.417em; + } + .collapsible-list.with-bg > li.closed > a, + .collapsible-list.with-bg > li.closed > span { + -moz-border-radius-bottomright: 0.417em; + -webkit-border-bottom-right-radius: 0.417em; + border-bottom-right-radius: 0.417em; + } + .collapsible-list li a:hover, + .collapsible-list li span:hover { + background-color: #e0e0e0; + } + .collapsible-list li ul { + margin: 0.5em -0.5em 0 1em; + } + .collapsible-list li.closed ul { + display: none; + } + .collapsible-list > li > ul { + margin: 0.75em 0 0 0.25em; + } + .collapsible-list li ul li { + padding: 0.5em; + color: #333333; + } + + .collapsible-list.with-icon a, + .collapsible-list.with-icon span, + .collapsible-list .with-icon a, + .collapsible-list .with-icon span { + background-image: url(../images/icons/fugue/control-000-small.png); + padding-left: 2.25em; + } + .collapsible-list.with-icon > li > a, + .collapsible-list.with-icon > li > span, + .collapsible-list > li.with-icon > a, + .collapsible-list > li.with-icon > span { + padding-left: 2.5em; + } + + .collapsible-list li .toggle { + float: left; + width: 16px; + height: 2em; + background: url(../images/icons/toggle-sprite.png) no-repeat 0 center; + margin: -0.5em 2px -0.5em 0; + padding: 0; + cursor: pointer; + } + .collapsible-list li.closed > .toggle { + background-position: -32px center; + } + .collapsible-list li .toggle:hover { + background-color: transparent; + background-position: -16px center; + } + .collapsible-list li.closed > .toggle:hover { + background-position: -48px center; + } + .collapsible-list > li > .toggle { + height: 2.5em; + margin: -0.75em 2px -0.75em 0; + } + .collapsible-list li .toggle + a, + .collapsible-list li .toggle + span { + margin-left: 18px; + padding-left: 0.25em; + -moz-border-radius-topleft: 0 !important; + -moz-border-radius-bottomleft: 0 !important; + -webkit-border-top-left-radius: 0 !important; + -webkit-border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + cursor: pointer; + } + .collapsible-list.with-icon .toggle + a, + .collapsible-list.with-icon .toggle + span, + .collapsible-list .with-icon .toggle + a, + .collapsible-list .with-icon .toggle + span { + padding-left: 2em; + background-position: 0.25em center; + } + + .with-icon.no-toggle-icon .toggle + a, + .with-icon.no-toggle-icon .toggle + span, + .with-icon .no-toggle-icon .toggle + a, + .with-icon .no-toggle-icon .toggle + span { + background-image: none !important; + padding-left: 0.25em; + } + + .with-icon.icon-info a, + .with-icon.icon-info span, + .with-icon .icon-info a, + .with-icon .icon-info span + { background-image: url(../images/icons/fugue/information-blue.png) !important; } + .with-icon.icon-group a, + .with-icon.icon-group span, + .with-icon .icon-group a, + .with-icon .icon-group span + { background-image: url(../images/icons/fugue/users.png) !important; } + .with-icon.icon-user a, + .with-icon.icon-user span, + .with-icon .icon-user a, + .with-icon .icon-user span + { background-image: url(../images/icons/fugue/user.png) !important; } + .with-icon.icon-file a, + .with-icon.icon-file span, + .with-icon .icon-file a, + .with-icon .icon-file span + { background-image: url(../images/icons/fugue/document.png) !important; } + .with-icon.icon-tags a, + .with-icon.icon-tags span, + .with-icon .icon-tags a, + .with-icon .icon-tags span + { background-image: url(../images/icons/fugue/tags-label.png) !important; } + .with-icon.icon-date a, + .with-icon.icon-date span, + .with-icon .icon-date a, + .with-icon .icon-date span + { background-image: url(../images/icons/fugue/calendar-day.png) !important; } + +/*************** Definitions list ***************/ +dl.definition dt { + background: url(../images/icons/fugue/control-000-small.png) no-repeat; + font-weight: bold; + padding-left: 20px; + line-height: 1.25em; + margin-bottom: 0.167em; +} +dl.definition dd { + padding-left: 20px; + color: #666; + margin-bottom: 1em; + line-height: 1.25em; + } + dl.definition dd:last-child { + margin-bottom: 0; + } + /* IE class */ + dl.definition dd.last-child { + margin-bottom: 0; + } + +/**************** Accordion list ****************/ +dl.accordion { + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-radius: 0.5em; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + padding: 1px; + } + .ie dl.accordion { + border: 1px solid #cccccc; + } + dl.accordion dt { + background: #e7e7e7 url(../images/old-browsers-bg/accordion-tab-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #f8f8f8, + #e7e7e7 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#f8f8f8), + to(#e7e7e7) + ); + padding: 0.75em; + border: 1px solid #cccccc; + color: #3399cc; + cursor: pointer; + } + dl.accordion dt:first-child { + -moz-border-radius-topleft: 0.417em; + -moz-border-radius-topright: 0.417em; + -webkit-border-top-left-radius: 0.417em; + -webkit-border-top-right-radius: 0.417em; + border-top-left-radius: 0.417em; + border-top-right-radius: 0.417em; + } + dl.accordion dt:last-of-type { + -moz-border-radius-bottomleft: 0.417em; + -moz-border-radius-bottomright: 0.417em; + -webkit-border-bottom-left-radius: 0.417em; + -webkit-border-bottom-right-radius: 0.417em; + border-bottom-left-radius: 0.417em; + border-bottom-right-radius: 0.417em; + } + dl.accordion dt.opened { + -moz-border-radius-bottomleft: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-left-radius: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + dl.accordion dt .number { + display: block; + float: left; + margin: -0.333em 0.5em -0.333em -0.333em; + font-weight: normal; + background: #0c5fa5 url(../images/old-browsers-bg/title-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #72c6e4, + #0c5fa5 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#72c6e4), + to(#0c5fa5) + ); + border: 0.083em solid white; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + } + dl.accordion dt:hover { + border-color: #3399cc; + } + dl.accordion dd { + background: url(../images/old-browsers-bg/accordion-content-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + rgba(0,0,0,0.1), + rgba(0,0,0,0) + ) no-repeat; + -moz-background-size: 100% 2.5em; + background: -webkit-gradient( + linear, + 0 0, 0 2.5em, + from(rgba(0,0,0,0.1)), + to(rgba(0,0,0,0)) + ); + padding: 1em; + color: #666666; + } \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/special-pages.css b/ehcp/templates/sky/en/css/special-pages.css new file mode 100755 index 0000000..7f1454a --- /dev/null +++ b/ehcp/templates/sky/en/css/special-pages.css @@ -0,0 +1,213 @@ +/* Custom styles for the special pages */ + +html { + height: 100%; +} +.login-bg, +.wizard-bg { + background: url(../images/bg.png) no-repeat center -200px; + min-height: 100%; +} +.error-bg, +.code-page { + background: url(../images/old-browsers-bg/login-radial-bg.png) no-repeat center center; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-radial-gradient(center, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)), #70828f; + background: -webkit-gradient(radial, 50% 50%, 10, 50% 50%, 500, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))), #70828f; + min-height: 100%; + } + .login-bg section, + .wizard-bg section, + .error-bg section, + .code-page section { + position: absolute; + z-index: 89; + left: 50%; + top: 50%; + } + .login-bg section, + .error-bg section { + width: 34em; + margin-left: -17em; + margin-top: -15em; + } + .login-bg section#message { + margin-top: -23.5em; + } + .error-bg section { + -moz-transition: all 200ms; + -webkit-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms; + } + .error-bg section#error-log { + z-index: 88; + opacity: 0; + filter: alpha(opacity=0); + } + .error-bg.with-log section { + margin-top: -19em; + } + .error-bg.with-log section#error-desc { + margin-left: -36em; + } + .error-bg.with-log section#error-log { + margin-left: 2em; + opacity: 100; + filter: none; + } + + .wizard-bg section { + width: 64em; + margin-left: -32em; + margin-top: -23em; + } + .login-bg .block-content, + .wizard-bg .block-content, + .error-bg .block-content { + -moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + } + .login-bg .block-border, + .wizard-bg .block-border, + .error-bg .block-border { + -moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + } + .login-bg .block-border .block-content, + .wizard-bg .block-border .block-content, + .error-bg .block-border .block-content { + -moz-box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + -webkit-box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + box-shadow: 0 0 0.8em rgba(255, 255, 255, 0.5); + } + + .error-bg #send-report p { + padding-left: 10em; + } + .error-bg #send-report p .float-left { + margin-left: -10em; + width: 8em; + } + +/******** Page for code errors : 404... *********/ +.code-page { + text-align: center; + } + .code-page h1 { + position: absolute; + left: 0; + right: 0; + top: 50%; + margin-top: -1em; + text-align: center; + font-size: 16em; + color: #A1A8AB; + -moz-text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + -webkit-text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + } + .code-page p { + position: absolute; + left: 0; + right: 0; + top: 50%; + text-align: center; + font-size: 3em; + font-weight: bold; + text-transform: uppercase; + -moz-text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + -webkit-text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.35), 1px 1px 1px rgba(255, 255, 255, 0.75); + } + .code-page section { + margin-top: 5em; + width: 28em; + margin-left: -14em; + } + .code-page section .action-tabs { + padding-top: 1em; + } + .code-page section .action-tabs.on-form { + padding-top: 1.75em; + } + .code-page section form.block-content { + padding-left: 0; + padding-right: 0; + } + .code-page section form.block-content #s { + width: 15em; + } + +/************* Mobile customization *************/ +@media only screen and (max-device-width: 480px) { + + .login-bg, + .wizard-bg { + background: #70828f url(../images/bg-mobile.png) no-repeat center -200px; + } + .login-bg, + .error-bg { + padding: 1em; + } + .login-bg section, + .wizard-bg section, + .error-bg section { + position: static; + width: auto; + margin-top: 0; + margin-left: 0; + left: auto; + top: auto; + } + .error-bg section#error-log { + opacity: 100; + filter: none; + } + .error-bg, + .code-page { + background: #70828f url(../images/old-browsers-bg/login-radial-bg-mobile.png) no-repeat center center; + background: -moz-radial-gradient(center, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)), #70828f; + background: -webkit-gradient(radial, 50% 50%, 10, 50% 50%, 240, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))), #70828f; + } + + .error-bg #send-report p { + padding: 0; + } + .error-bg #send-report p .float-left { + margin-left: 0; + width: auto; + } + .error-bg #send-report p span.float-left { + float: right; + width: 40%; + } + .error-bg #send-report p #sender { + width: 50%; + } + + /******** Page for code errors : 404... *********/ + .code-page h1 { + font-size: 10em; + } + .code-page p { + font-size: 1.75em; + } + .code-page section { + width: auto; + top: auto; + left: 0; + right: 0; + bottom: 0; + margin: 0; + } + .code-page section .action-tabs { + display: none; + } + +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/css/standard.css b/ehcp/templates/sky/en/css/standard.css new file mode 100755 index 0000000..534e508 --- /dev/null +++ b/ehcp/templates/sky/en/css/standard.css @@ -0,0 +1,1856 @@ +/** + * Styles for the standard template + */ + +html { + min-height: 100%; + overflow-x: hidden; +} +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + background: url(../images/bg.png) no-repeat center top; + min-height: 100%; +} +textarea, input { + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +/**************** Generic classes ***************/ +h2.bigger, h3.bigger, +h2.big, h3.big { + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; +} + +/******************* Columns ********************/ +.columns { + margin-bottom: 1.667em; + position: relative; +} +.columns:last-child { + margin-bottom: 0; +} +/** IE class **/ +.columns.last-child { + margin-bottom: 0; +} + +/* 2 columns */ +.colx2-left { + width: 48%; + float: left; + margin-bottom: 0; +} +.colx2-right { + width: 48%; + float: right; + margin-bottom: 0; +} + +/* 3 columns */ +.colx3-left { + width: 31%; + float: left; + margin-bottom: 0; +} +.colx3-left-double { + width: 65.5%; + float: left; + margin-bottom: 0; +} +.colx3-center { + width: 31%; + float: left; + margin-left: 3.5%; + margin-bottom: 0; +} +.colx3-right { + width: 31%; + float: right; + margin-bottom: 0; +} +.colx3-right-double { + width: 65.5%; + float: right; + margin-bottom: 0; +} + +/* 200px fixed-width left column */ +.col200pxL-left { + width: 200px; + float: left; +} +.col200pxL-bottom { + position: absolute; + bottom: 0; + left: 0; + width: 180px; +} +.col200pxL-right { + margin-left: 200px; +} +/* 200px fixed-width right column */ +.col200pxR-left { + margin-right: 200px; +} +.col200pxR-bottom { + position: absolute; + bottom: 0; + right: 0; + width: 180px; +} +.col200pxR-right { + width: 200px; + float: right; +} + + +/************* Button-style images **************/ +.button img, +.form legend img, +.legend img, +.mini-menu img { + margin-bottom: -4px; +} + +/******************** Header ********************/ +header { + color: #666666; + text-transform: uppercase; + position: absolute; + z-index: 88; + top: 0; + left: 0; + width: 100%; + white-space: nowrap; + text-align: right; + } + header .server-info { + display: inline-block; + border-top: 0; + padding: 0 1em; + color: white; + background: url(../images/old-browsers-bg/server-status-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + rgba(64,64,64,0.3), + rgba(255,255,255,0.2) + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(64,64,64,0.3)), + to(rgba(255,255,255,0.2)) + ); + margin-left: 0.5em; + height: 2.6em; + line-height: 2.6em; + vertical-align: top; + font-size: 0.833em; + -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.65); + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.65); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.65); + -moz-border-radius: 0 0 0.4em 0.4em; + -webkit-border-radius: 0.4em; + -webkit-border-top-left-radius: 0; + -webkit-border-top-right-radius: 0; + border-radius: 0 0 0.4em 0.4em; + } + .ie7 header .server-info { + display: inline; + zoom: 1; + } + #skin-name { + display: inline-block; + margin: 0 0.7em 0 0; + color: #B0B0B0; + color: rgba(255, 255, 255, 0.75); + } + .ie7 #skin-name { + display: inline; + zoom: 1; + } + #skin-name small { + float: left; + font-size: 0.75em; + line-height: 1.111em; + text-transform: uppercase; + color: #B0B0B0; + color: rgba(255, 255, 255, 0.75); + padding-top: 0.555em; + text-align: right; + } + #skin-name strong { + font-size: 2em; + line-height: 1.333em; + margin-left: 0.167em; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; + letter-spacing: -0.09em; + } + .ie #skin-name strong { + padding-right: 0.083em; + } + +nav { + height: 69px; + padding-top: 1.25em; + background: #3399cc url(../images/old-browsers-bg/main-nav-bg.png) repeat-x bottom; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, #014a7d, #3399cc); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#014a7d), to(#3399cc)); + -moz-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.5); + } + nav > ul { + padding-top: 4px; + position: relative; + z-index: 100; + } + nav > ul > li { + width: 64px; + height: 69px; + float: left; + background-position: center -54px; + background-repeat: no-repeat; + } + nav > ul > li > a { + display: block; + height: 69px; + background-repeat: no-repeat; + background-position: 8px 14px; + overflow: hidden; + text-indent: 200px; + opacity: 0; + filter: alpha(opacity=0); + -moz-transition: opacity 2s; + -webkit-transition: opacity 2s; + -o-transition: opacity 2s; + transition: opacity 2s; + } + nav > ul > li.home, nav > ul > li.home > a { background-image: url(../images/icons/home_2states.png); } + nav > ul > li.write, nav > ul > li.write > a { background-image: url(../images/icons/write_2states.png); } + nav > ul > li.comments, nav > ul > li.comments > a { background-image: url(../images/icons/comments_2states.png); } + nav > ul > li.medias, nav > ul > li.medias > a { background-image: url(../images/icons/medias_2states.png); } + nav > ul > li.users, nav > ul > li.users > a { background-image: url(../images/icons/users_2states.png); } + nav > ul > li.stats, nav > ul > li.stats > a { background-image: url(../images/icons/stats_2states.png); } + nav > ul > li.settings, nav > ul > li.settings > a { background-image: url(../images/icons/settings_2states.png); } + nav > ul > li.backup, nav > ul > li.backup > a { background-image: url(../images/icons/backup_2states.png); } + + nav > ul > li.current { + padding: 0 8px 13px 8px; + margin: 0 -8px -13px -8px; + background: url(../images/tab-bg.png) no-repeat; + } + nav > ul > li.current > a, + nav > ul > li > a:hover { + opacity: 1; + filter: none; + -moz-transition: all 100ms; + -webkit-transition: all 100ms; + -o-transition: all 100ms; + transition: all 100ms; + } + + nav > ul > li > ul { + position: absolute; + left: 0; + top: 70px; + display: none; + padding-top: 0.333em; + background: none; + } + nav > ul > li.current > ul { + display: block; + } + nav > ul > li > ul > li, + #sub-nav a.nav-button { + display: block; + float: left; + height: 2.2em; + font-size: 0.833em; + line-height: 2.2em; + padding: 0.1em; + width: auto; + background: #465a6e url(../images/old-browsers-bg/subnav-bt-border-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, #9faab6, #465a6e); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#9faab6), to(#465a6e)); + margin-right: 0.5em; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + color: white; + text-transform: uppercase; + -moz-box-shadow: 0 0 7px #000000; + -webkit-box-shadow: 0 0 7px #000000; + box-shadow: 0 0 7px #000000; + text-decoration: none; + -moz-transition: all 1s; + -webkit-transition: all 1s; + -o-transition: all 1s; + transition: all 1s; + } + nav > ul > li > ul > li.current { + height: 3.1em; + line-height: 3.1em; + color: #333; + padding: 0; + -moz-border-radius-bottomleft: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-left-radius: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + background: #dadada url(../images/old-browsers-bg/subnav-current-bt-border-bg.png) repeat-x; + background: -moz-linear-gradient( + top, + white, + #dadada 7%, + #dadada + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#dadada), + color-stop(0.07, #dadada) + ); + } + nav > ul > li > ul > li > a, + #sub-nav a.nav-button > b { + display: block; + height: 2.2em; + line-height: 2.2em; + width: auto; + padding: 0 1em; + color: white; + text-indent: 0; + text-decoration: none; + -moz-border-radius: 0.3em; + -webkit-border-radius: 0.3em; + border-radius: 0.3em; + font-weight: normal; + -moz-transition: all 1s; + -webkit-transition: all 1s; + -o-transition: all 1s; + transition: all 1s; + } + nav > ul > li > ul > li > a, + #sub-nav a.nav-button > b, + nav > ul > li > ul > li .menu { + background: #1d2a36 url(../images/old-browsers-bg/subnav-bt-bg.png) repeat-x !important; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, #858d95, #46505b 50%, #38424d 50%, #1c2733) !important; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#858d95), to(#1c2733), color-stop(.5, #46505b), color-stop(.5, #38424d)) !important; + } + nav > ul > li > ul > li.current > a { + background: none !important; + height: 2.8em; + line-height: 2.8em; + color: #333; + } + nav > ul > li > ul > li:hover, + #sub-nav a.nav-button:hover { + background: #6dc0e5 url(../images/old-browsers-bg/subnav-bt-hover-border-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, #cbe9f7, #6dc0e5); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#cbe9f7), to(#6dc0e5)); + -moz-transition: all 100ms; + -webkit-transition: all 100ms; + -o-transition: all 100ms; + transition: all 100ms; + } + nav > ul > li > ul > li.current:hover { + background: #dadada url(../images/old-browsers-bg/subnav-current-bt-border-bg.png) repeat-x; + background: -moz-linear-gradient( + top, + white, + #dadada 7%, + #dadada + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#dadada), + color-stop(0.07, #dadada) + ); + } + nav > ul > li > ul > li > a:hover, + #sub-nav a.nav-button:hover > b, + nav > ul > li > ul > li .menu:hover { + background: #305d79 url(../images/old-browsers-bg/subnav-bt-hover-bg.png) repeat-x !important; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(left, rgba(109, 192, 229, 0), rgba(109, 192, 229, 0.2) 25%, rgba(109, 192, 229, 0.4) 50%, rgba(109, 192, 229, 0.3) 75%, rgba(109, 192, 229, 0)), + -moz-linear-gradient(top, #afc2cf, #537288 50%, #45667c 50%, #2c526b) !important; + background: -webkit-gradient(linear, 0% 0%, 100% 0%, from(rgba(109, 192, 229, 0)), to(rgba(109, 192, 229, 0)), color-stop(.25, rgba(109, 192, 229, 0.3)), color-stop(.5, rgba(109, 192, 229, 0.4)), color-stop(.75, rgba(109, 192, 229, 0.3))), + -webkit-gradient(linear, 0% 0%, 0% 100%, from(#afc2cf), to(#2c526b), color-stop(.5, #537288), color-stop(.5, #45667c)) !important; + -moz-box-shadow: 0 0 7px #cbe9f7; + -webkit-box-shadow: 0 0 7px #cbe9f7; + box-shadow: 0 0 7px #cbe9f7; + -moz-transition: all 100ms; + -webkit-transition: all 100ms; + -o-transition: all 100ms; + transition: all 100ms; + } + nav > ul > li > ul > li.current > a:hover { + background: none !important; + color: #666; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + +#sub-nav { + border-top: 1px solid #ff6500; + height: 2.667em; + line-height: 2.667em; + background: black url(../images/old-browsers-bg/subnav-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, #303135, #3c3d42 6%, #404447 18%, #34383b 50%, #25292c 50%, #1a1b1f 63%, black); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#303135), to(black), color-stop(.06, #3c3d42), color-stop(.18, #404447), color-stop(.5, #34383b), color-stop(.5, #25292c), color-stop(.63, #1a1b1f)); + text-align: right; + color: white; + } + #sub-nav a.nav-button { + float: right; + margin: 0.417em 0 0 1em; + } + /* IE class */ + .ie7 #sub-nav a.nav-button { + margin-top: 0.333em; + } + +#status-bar { + height: 3.25em; + line-height: 3.167em; + background: white url(../images/old-browsers-bg/status-bar-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient(top, white, #dadada 6%, white 92%, #cfcfcf); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(white), to(#cfcfcf), color-stop(.05, #dadada), color-stop(.92, white)); + border-bottom: 1px solid #969696; + text-align: right; + color: #7b7b7b; + } + #status-infos { + float: right; + margin-bottom: 0; + } + #status-infos > li { + float: left; + margin-left: 0.5em; + position: relative; + z-index: 88; + } + #status-infos > li.spaced { + padding-right: 0.5em; + } + + #breadcrumb { + float: left; + border: 1px solid; + border-color: #0099cc #006699 #003366; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + height: 1.75em; + line-height: 1.5em; + margin: 0.667em 1em 0 0; + background: #0c5fa5 url(../images/old-browsers-bg/breadcrumb-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #72c6e4 5%, + #0c5fa5 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#0c5fa5), + color-stop(0.05, #72c6e4) + ); + } + #breadcrumb li { + float: left; + color: white; + height: 1.75em; + padding: 0.083em 1em 0 0; + background: url(../images/breadcrumb-sep.png) no-repeat right center; + } + #breadcrumb li:last-child { + padding-right: 0; + background: none; + } + /* IE class */ + #breadcrumb li.last-child { + padding-right: 0; + background: none; + } + #breadcrumb li a, + #breadcrumb li span { + display: block; + height: 1.667em; + color: white; + text-decoration: none; + padding: 0 0.75em 0 0.667em; + -moz-transition-duration: 1s; + -webkit-transition-duration: 1s; + transition-duration: 1s; + } + #breadcrumb li a:hover { + background: -moz-linear-gradient(left, rgba(109, 192, 229, 0), rgba(109, 192, 229, 0.8) 25%, rgba(109, 192, 229, 1) 50%, rgba(109, 192, 229, 0.8) 75%, rgba(109, 192, 229, 0)); + background: -webkit-gradient(linear, 0% 0%, 100% 0%, from(rgba(109, 192, 229, 0)), to(rgba(109, 192, 229, 0)), color-stop(.25, rgba(109, 192, 229, 0.8)), color-stop(.5, rgba(109, 192, 229, 1)), color-stop(.75, rgba(109, 192, 229, 0.8))); + -moz-transition-duration: 100ms; + -webkit-transition-duration: 100ms; + transition-duration: 100ms; + } + #breadcrumb li img { + margin-bottom: -4px; + } + +#header-shadow { + background: url(../images/old-browsers-bg/status-bar-shadow.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + height: 0.75em; + position: absolute; + z-index: 87; + left: 0; + width: 100%; + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.1) 30%, rgba(0, 0, 0, 0)); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0.3)), to(rgba(0, 0, 0, 0)), color-stop(.3, rgba(0, 0, 0, 0.1))); + } + +/***************** Result block *****************/ +.result-block { + position: absolute; + z-index: 89; + top: 1.667em; + right: -0.25em; + min-width: 20em; + background: white; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-radius: 0.5em; + -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5); + padding: 1em; + line-height: 1em; + text-align: left; + color: #333333; + } + /* IE class */ + .ie .result-block { + border: 1px solid #ccc; + } + + #status-infos .result-block { + top: 2.667em; + display: none; + } + #status-infos > li:hover .result-block { + display: block; + } + + .result-block h2 { + float: left; + color: black; + } + + .result-block div { + margin-bottom: 1.667em; + } + .result-block div:last-child { + margin-bottom: 0; + } + /* IE class */ + .result-block div.last-child { + margin-bottom: 0; + } + + .result-block .arrow { + font-size: 0; + line-height: 0; + width: 0; + position: absolute; + z-index: 89; + right: 20px; + top: -5px; + border-bottom: 5px solid #666666; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + } + .result-block .arrow span { + width: 0; + position: absolute; + z-index: 89; + left: -2px; + bottom: -5px; + border-bottom: 4px solid white; + border-left: 2px solid transparent; + border-right: 2px solid transparent; + } + + .result-block .results-count { + float: right; + text-transform: uppercase; + color: #b0b0b0; + font-size: 0.75em; + white-space: nowrap; + margin-left: 1em; + } + .result-block .results-count strong { + color: #999999; + } + + .result-block ul { + clear: both; + } + .result-block ul li { + white-space: nowrap; + } + + .search-more, + .search-less { + display: block; + color: #999999; + font-size: 0.75em; + text-transform: uppercase; + padding: 0.333em 0; + text-align: center; + background: url(../images/old-browsers-bg/search-more-shadow.png) no-repeat center bottom; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ), -moz-linear-gradient( + left, + #ffffff, + #ebebeb 50%, + #ffffff + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(255, 255, 255, 1)), + to(rgba(255, 255, 255, 0)) + ), -webkit-gradient( + linear, + left top, right top, + from(#ffffff), + to(#ffffff), + color-stop(0.5, #ebebeb) + ); + } + .search-more:hover, + .search-less:hover { + color: #3399cc; + } + ul + .search-more, + ul + .search-less { + margin-top: -1.333em; + } + ul.small-pagination + .search-more, + ul.small-pagination + .search-less { + margin-top: -0.667em; + } + .search-more:before { + content: url(../images/search-more-arrow.png); + padding-right: 0.556em; + } + .search-more:hover:before { + content: url(../images/search-more-arrow-hover.png); + } + .search-more:after { + content: url(../images/search-more-arrow.png); + padding-left: 0.556em; + } + .search-more:hover:after { + content: url(../images/search-more-arrow-hover.png); + } + .search-less:before { + content: url(../images/search-less-arrow.png); + padding-right: 0.556em; + } + .search-less:hover:before { + content: url(../images/search-less-arrow-hover.png); + } + .search-less:after { + content: url(../images/search-less-arrow.png); + padding-left: 0.556em; + } + .search-less:hover:after { + content: url(../images/search-less-arrow-hover.png); + } + + .result-block hr { + height: 1px; + line-height: 1px; + border: 0; + margin-top: 0; + clear: both; + background: #ffffff url(../images/old-browsers-bg/search-sep-bg.png) repeat-y left; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + left, + #ffffff, + #cccccc 50%, + #ffffff + ); + background: -webkit-gradient( + linear, + left top, right top, + from(#ffffff), + to(#ffffff), + color-stop(0.5, #cccccc) + ); + } + + .result-block .result-info { + background: #333333; + color: white; + padding: 0.417em 0.75em 0.583em; + margin: 0 -1em -1em -1em; + -moz-border-radius: 0 0 0.5em 0.5em; + -webkit-border-bottom-right-radius: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; + border-radius: 0 0 0.5em 0.5em; + white-space: nowrap; + } + .result-block .result-info a { + color: #77ccff; + } + .result-block .arrow:first-child + .result-info:last-child { + margin-top: -1em; + border-top: 1px solid #999999; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-radius: 0.5em; + } + /* IE class */ + .result-block .result-info.first-last-child { + margin-top: -1em; + border-top: 1px solid #999999; + } + .result-block div + .result-info, + .result-block p + .result-info, + .result-block ul + .result-info { + margin-top: -0.5em; + } + .result-block .result-info.loading { + padding-left: 2.667em; + background: #333333 url(../images/table-loader.gif) no-repeat 0.75em center; + } + +/***************** Search block *****************/ +#search-form { + display: inline; + position: relative; + z-index: 89; +} + +/********** Always visible control bar **********/ +#control-bar { + padding: 1em 0; + text-align: center; + } + #control-bar.grey-bg { + border-bottom: 1px solid #efefef; + border-bottom: 1px solid rgba(255, 255, 255, 0.65); + background: url(../images/old-browsers-bg/control-bar-bg.png) repeat-x; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + rgba(0, 0, 0, 0.2), + rgba(0, 0, 0, 0.1) + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(rgba(0, 0, 0, 0.2)), + to(rgba(0, 0, 0, 0.1)) + ); + -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.35); + -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.35); + box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.35); + } + #cb-place-holder { + display: none; + } + #control-bar.fixed { + position: fixed; + top: 0; + left: 0; + right: 0; + margin: 0; + z-index: 999950; + background: url(../images/old-browsers-bg/black50.png); + background: rgba(0, 0, 0, 0.5); + } + #control-bar.fixed.grey-bg { + border: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + } + +/**************** Standard block ****************/ +article { + margin-top: 3em; + } + #control-bar + article, + #cb-place-holder + article { + margin-top: 2em; + } + +.block-content h1, +.block-content .h1 { + position: absolute; + left: 0.5em; + top: -0.444em; + margin: 0; + z-index: 100; + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -moz-border-radius: 0.278em; + -webkit-border-radius: 0.278em; + border-radius: 0.278em; + } + /* IE class */ + .ie .block-content h1, + .ie .block-content .h1 { + padding: 0.333em 0.444em; + } + .block-content .h1 h1 { + position: relative; + left: 0; + top: 0; + z-index: 1; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + padding: 0; + } + .block-content h1 > a, + .block-content .h1 > a { + display: block; + position: absolute; + top: -1px; + left: 100%; + margin-left: 0.5em; + font-size: 0.778em; + text-transform: uppercase; + color: #cccccc; + border: 1px solid; + border-color: #7e9098 #61727b #2b373d; + background: #40535c url(../images/old-browsers-bg/title-link-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #9eb1ba 4%, + #40535c + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#40535c), + color-stop(0.03, #9eb1ba) + ); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -moz-border-radius: 0.286em; + -webkit-border-radius: 0.286em; + border-radius: 0.286em; + line-height: 1.143em; + padding: 0.5em 0.571em; + white-space: nowrap; + } + /* IE class */ + .ie7 .block-content h1 > a, + .ie7 .block-content .h1 > a { + padding: 0.429em 0.571em; + } + .block-content h1 > a:hover, + .block-content .h1 > a:hover { + color: white; + border-color: #1eafdc #1193d5 #035592; + background: #057fdb url(../images/old-browsers-bg/title-link-hover-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + white, + #2bcef3 4%, + #057fdb + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#057fdb), + color-stop(0.03, #2bcef3) + ); + } + .block-content h1 > a img, + .block-content .h1 > a img { + margin-bottom: -3px; + } + .red .block-content h1 > a:hover, + .red .block-content .h1 > a:hover, + .block-content.red h1 > a:hover, + .block-content.red .h1 > a:hover, + .block-content .red h1 > a:hover, + .block-content .red .h1 > a:hover, + .block-content h1.red > a:hover, + .block-content .h1.red > a:hover { + border-color: #c24949 #9d3d3d #590909; + background: #9d0404 url(../images/old-browsers-bg/button-element-red-hover-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + white, + #fe6565 4%, + #9d0404 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#9d0404), + color-stop(0.03, #fe6565) + ); + } + +.block-content { + padding-top: 2.833em; + } + .block-content.no-title { + padding-top: 1.667em; + } + .block-content.no-padding.no-title { + padding-top: 0; + } + +/***************** Block header *****************/ +.block-header { + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif; +} +.block-content .block-header:first-child, +.block-content h1:first-child + .block-header, +.block-content .h1:first-child + .block-header { + margin-top: -1.417em; + -moz-border-radius: 0.083em 0.083em 0 0; + -webkit-border-top-left-radius: 0.083em; + -webkit-border-top-right-radius: 0.083em; + border-radius: 0.083em 0.083em 0 0; +} +/* IE class */ +.block-content .block-header.first-child, +.block-content .block-header.after-h1 { + margin-top: -1.417em; +} +.block-content.no-title .block-header:first-child { + margin-top: -0.833em; +} +/* IE class */ +.block-content.no-title .block-header.first-child { + margin-top: -0.833em; +} +.block-content.no-padding .block-header:first-child { + margin-top: 0; +} +/* IE class */ +.block-content.no-padding .block-header.first-child { + margin-top: 0; +} + +/***************** Wizard tweak *****************/ +.block-content .wizard-steps:first-child, +.block-content h1:first-child + .wizard-steps, +.block-content .h1:first-child + .wizard-steps { + margin-top: -2.833em; + -moz-border-radius: 0.167em 0.167em 0 0; + -webkit-border-top-left-radius: 0.167em; + -webkit-border-top-right-radius: 0.167em; + border-radius: 0.167em 0.167em 0 0; +} +/* IE class */ +.block-content .wizard-steps.first-child, +.block-content .wizard-steps.after-h1 { + margin-top: -2.833em; +} +.block-content.no-title .wizard-steps:first-child { + margin-top: -1.667em; +} +/* IE class */ +.block-content.no-title .wizard-steps.first-child { + margin-top: -1.667em; +} +.block-content.no-padding .wizard-steps:first-child { + margin-top: 0; +} +/* IE class */ +.block-content.no-padding .wizard-steps.first-child { + margin-top: 0; +} + +/**************** Block controls ****************/ +.block-content .block-controls:first-child, +.block-content h1:first-child + .block-controls, +.block-content .h1:first-child + .block-controls { + margin-top: -2.833em; + -moz-border-radius-topleft: 0.2em; + -moz-border-radius-topright: 0.2em; + -webkit-border-top-left-radius: 0.2em; + -webkit-border-top-right-radius: 0.2em; + border-top-left-radius: 0.2em; + border-top-right-radius: 0.2em; +} +/* IE class */ +.block-content .block-controls.first-child, +.block-content .block-controls.after-h1 { + margin-top: -2.833em; +} +.block-content.no-title .block-controls:first-child { + margin-top: -1.667em; +} +/* IE class */ +.block-content.no-title .block-controls.first-child { + margin-top: -1.667em; +} +.block-content.no-padding .block-controls:first-child { + margin-top: 0; +} +/* IE class */ +.block-content.no-padding .block-controls.first-child { + margin-top: 0; +} +.block-content .block-controls:first-child ul.controls-tabs li:last-child a, +.block-content h1:first-child + .block-controls ul.controls-tabs li:last-child a, +.block-content .h1:first-child + .block-controls ul.controls-tabs li:last-child a { + -moz-border-radius-topright: 0.2em; + -webkit-border-top-right-radius: 0.2em; + border-top-right-radius: 0.2em; +} +/* IE class */ +.block-content .block-controls.first-child ul.controls-tabs li.last-child a, +.block-content .block-controls.after-h1 ul.controls-tabs li.last-child a { + -moz-border-radius-topright: 0.2em; + -webkit-border-top-right-radius: 0.2em; + border-top-right-radius: 0.2em; +} +.block-content.no-padding .block-controls:last-child { + -moz-border-radius-bottomleft: 0.2em; + -moz-border-radius-bottomright: 0.2em; + -webkit-border-bottom-left-radius: 0.2em; + -webkit-border-bottom-right-radius: 0.2em; + border-bottom-left-radius: 0.2em; + border-bottom-right-radius: 0.2em; +} + +/****************** Action tabs *****************/ +.action-tabs { + position: absolute; + z-index: 89; + right: 100%; + width: 3em; + overflow: hidden; + padding-top: 2em; + } + .action-tabs.right { + right: auto; + left: 100%; + } + .action-tabs li { + float: right; + width: 1.5em; + padding: 0.667em 0.417em 0.667em 0.667em; + -moz-border-radius: 0.5em 0 0 0.5em; + -webkit-border-top-left-radius: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; + border-radius: 0.5em 0 0 0.5em; + background: url(../images/old-browsers-bg/white20.png); + background: rgba(255, 255, 255, 0.2); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + margin: 0 -0.167em 0.5em 0; + -moz-transition: all 300ms; + -webkit-transition: all 300ms; + -o-transition: all 300ms; + transition: all 300ms; + } + .action-tabs.right li { + float: left; + padding: 0.667em 0.667em 0.667em 0.417em; + margin: 0 0 0.5em -0.167em; + -moz-border-radius: 0 0.5em 0.5em 0; + -webkit-border-top-left-radius: 0; + -webkit-border-bottom-left-radius: 0; + -webkit-border-top-right-radius: 0.5em; + -webkit-border-bottom-right-radius: 0.5em; + border-radius: 0 0.5em 0.5em 0; + text-align: right; + } + .action-tabs li:hover { + margin-right: 0; + -moz-transition: all 100ms; + -webkit-transition: all 100ms; + -o-transition: all 100ms; + transition: all 100ms; + } + .action-tabs.right li:hover { + margin-left: 0; + } + + .action-tabs li a { + display: block; + margin: -0.667em -0.5em -0.667em -0.667em; + padding: 0.583em 0.5em 0.583em 0.583em; + border: 0.083em solid; + border-color: #c8cacc white #777a7d #aeb0b4; + border-right: 0; + -moz-border-radius: 0.5em 0 0 0.5em; + -webkit-border-top-left-radius: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; + border-radius: 0.5em 0 0 0.5em; + background: #9a9ea3 url(../images/old-browsers-bg/action-tab-bg.png) repeat-x top; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + top, + #82858b, + #9a9ea3 + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#82858b), + to(#9a9ea3) + ); + } + .action-tabs.right li a { + margin: -0.667em -0.667em -0.667em -0.5em; + padding: 0.583em 0.583em 0.583em 0.5em; + border-left: 0; + border-right: 0.083em solid; + border-color: #c8cacc #77797e #777a7d white; + -moz-border-radius: 0 0.5em 0.5em 0; + -webkit-border-top-left-radius: 0; + -webkit-border-bottom-left-radius: 0; + -webkit-border-top-right-radius: 0.5em; + -webkit-border-bottom-right-radius: 0.5em; + border-radius: 0 0.5em 0.5em 0; + text-align: right; + } + .action-tabs li:hover a { + border-color: #dcddde white #999a9d #cfd0d3; + background: #c7c9cd url(../images/old-browsers-bg/action-tab-hover-bg.png) repeat-x top; + background: -moz-linear-gradient( + top, + #afb0b4, + #c7c9cd + ); + background: -webkit-gradient( + linear, + left top, left bottom, + from(#afb0b4), + to(#c7c9cd) + ); + } + .action-tabs.right li:hover a { + border-color: #dcddde #9b9da0 #999a9d white; + } + +/****************** Messages ********************/ +.message { + margin-bottom: 2.5em; + } + section .message { + margin-bottom: 1.667em; + } + +/**************** Content columns ***************/ +.content-columns { + position: relative; + z-index: 89; + margin: 0 -1.417em; + } + .content-columns:last-child { + margin-bottom: -1.667em; + } + /* IE class */ + .content-columns.last-child { + margin-bottom: -1.667em; + } + .block-controls + .content-columns { + margin-top: -1.667em; + } + .block-content.no-title .content-columns:first-child { + margin-top: -1.667em; + } + /* IE class */ + .block-content.no-title .content-columns.first-child { + margin-top: -1.667em; + } + .block-content.no-padding .content-columns:first-child { + margin-top: 0; + } + /* IE class */ + .block-content.no-padding .content-columns.first-child { + margin-top: 0; + } + .content-left { + float: left; + width: 50%; + margin-left: -0.25em; + } + .content-right { + float: right; + width: 50%; + margin-right: -0.25em; + } + .content-columns .content-columns-sep { + position: absolute; + z-index: 88; + top: 0; + bottom: 0; + width: 0.417em; + left: 50%; + margin-left: -0.25em; + background: #c4c4c4 url(../images/old-browsers-bg/content-columns-sep-bg.png) repeat-y left; + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; + background: -moz-linear-gradient( + left, + #e6e6e6, + #c4c4c4 + ); + background: -webkit-gradient( + linear, + left top, right top, + from(#e6e6e6), + to(#c4c4c4) + ); + border-left: 0.1em solid #999999; + border-right: 0.1em solid #999999; + } + + /* Left column of 30% */ + .content-columns.left30 .content-left { width: 30%; } + .content-columns.left30 .content-right { width: 70%; } + .content-columns.left30 .content-columns-sep { left: 30%; } + + /* right column of 30% */ + .content-columns.right30 .content-left { width: 70%; } + .content-columns.right30 .content-right { width: 30%; } + .content-columns.right30 .content-columns-sep { left: 70%; } + + .content-columns .message { + margin: 0 !important; + border-width: 1px 0; + } + .content-columns .message:last-child { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border-bottom: 0; + } + /* IE class */ + .content-columns .message.last-child { + margin-bottom: 0; + border-bottom: 0; + } + .content-columns:last-child .content-left > :last-child { + -moz-border-radius-bottomleft: 0.167em; + -webkit-border-bottom-left-radius: 0.167em; + border-bottom-left-radius: 0.167em; + } + .content-columns:last-child .content-right > :last-child { + -moz-border-radius-bottomright: 0.167em; + -webkit-border-bottom-right-radius: 0.167em; + border-bottom-right-radius: 0.167em; + } + .block-content.no-title .content-columns:first-child .content-left > :first-child { + -moz-border-radius-topleft: 0.167em; + -webkit-border-top-left-radius: 0.167em; + border-top-left-radius: 0.167em; + } + .block-content.no-title .content-columns:first-child .content-right > :last-child { + -moz-border-radius-topright: 0.167em; + -webkit-border-top-right-radius: 0.167em; + border-top-right-radius: 0.167em; + } + +/**************** Drop-down menu ****************/ +.with-menu, +.menu-opener { + padding-right: 1.75em; + position: relative; + z-index: 98; + } + /* IE class */ + .ie .block-content .with-menu, + .ie .block-content .menu-opener { + padding-right: 1.75em; + } + .with-menu:hover, + .menu-opener:hover { + z-index: 99; + } + .button.with-menu, .button.menu-opener, + .form legend.with-menu, .form legend.menu-opener, + .mini-menu.with-menu, .mini-menu.menu-opener { + padding-right: 2.25em; + } + /* IE class */ + .ie .block-content .button.with-menu, + .ie .block-content .button.menu-opener, + .ie .block-content .mini-menu.with-menu, + .ie .block-content .mini-menu.menu-opener { + padding-right: 2.25em; + } +.menu, +.menu-opener .menu-arrow { + position: absolute; + z-index: 99; + top: 0; + right: 0; + bottom: 0; + font-weight: normal; + line-height: 1.25em; + font-family: Verdana, Arial, Helvetica, sans-serif; + } + .with-menu .menu, + .menu-opener .menu-arrow { + width: 1.75em; + background: url(../images/menu-border.png) no-repeat left center; + background-size: 2px 100%; + -moz-background-size: 2px 100%; + -webkit-background-size: 2px 100%; + } + .menu-opener .menu { + left: 0; + background: url(../images/trans.png); + } + .with-menu .menu > img, + .menu-opener .menu-arrow > img { + position: absolute; + left: 50%; + top: 50%; + margin: -8px 0 0 -7px; + } + .menu ul { + position: absolute; + z-index: 999910; + top: 100%; + left: 1px; + background: #cccccc url(../images/menu-bg.png) repeat-y; + border: 1px solid white; + padding: 0.25em 0; + margin: 0; + width: 15em; + display: none; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + -moz-border-radius: 0 0.25em 0.25em 0.25em; + -webkit-border-radius: 0.25em; + -webkit-border-top-left-radius: 0; + border-radius: 0 0.25em 0.25em 0.25em; + } + .menu-opener .menu > ul { + left: -1px; + } + .menu ul.reverted { + -moz-border-radius: 0.25em 0 0.25em 0.25em; + -webkit-border-radius: 0.25em; + -webkit-border-top-right-radius: 0; + border-radius: 0.25em 0 0.25em 0.25em; + } + .menu > ul.reverted { + left: auto; + right: 1px; + } + .menu-opener .menu > ul.reverted { + right: -1px; + } + .menu:hover > ul, + .menu :hover > ul { + display: block; + } + .menu ul li ul { + display: block; + top: 0.6em; + left: 94%; + width: 4px; + height: 6px; + border: none; + background: url(../images/menu-arrow.png) no-repeat; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + } + .menu ul li ul li { + display: none; + } + .menu ul li:hover > ul { + top: -0.167em; + left: 98%; + width: 15em; + height: auto; + border: 1px solid white; + background: #cccccc url(../images/menu-bg.png) repeat-y; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); + } + .menu ul li:hover > ul.reverted { + left: auto; + right: 98%; + } + .menu ul li:hover > ul > li { + display: block; + } + .menu ul li { + position: relative; + z-index: 999911; + padding: 0.333em 0.833em 0.417em 35px; + margin: 0; + color: #999999; + -moz-text-shadow: 1px 1px 0 white; + -webkit-text-shadow: 1px 1px 0 white; + text-shadow: 1px 1px 0 white; + background-repeat: no-repeat; + background-position: 5px 3px; + } + /* IE class */ + .ie7 .menu > ul > li, + .ie7 .menu ul li:hover > ul > li { + display: inline-block; + padding-left: 0; + padding-right: 0; + text-indent: 35px; + } + .menu ul li.sep { + height: 0; + font-size: 0; + line-height: 0; + padding: 0; + margin: 2px 0; + border-top: 1px solid #adadad; + border-bottom: 1px solid white; + } + /* IE class */ + .ie7 .menu ul li.sep { + z-index: 999910; + } + .menu ul li a { + display: block; + margin: -0.333em -0.833em -0.417em -9px; + padding: 0.333em 0.833em 0.417em 9px; + color: #1e343f; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + } + /* IE class */ + .ie7 .menu ul li a { + margin-right: 0; + margin-left: 26px; + text-indent: 0; + } + .menu ul li:hover { + z-index: 999912; + background-color: #c0c0c0; + } + .menu ul li.sep:hover { + z-index: 999911; + } + .menu ul li:hover > a { + background: #4d4d4d; + color: white; + } + + .menu .icon_address { background-image: url(../images/icons/fugue/address-book.png); } + .menu .icon_alarm { background-image: url(../images/icons/fugue/alarm-clock-blue.png); } + .menu .icon_blog { background-image: url(../images/icons/fugue/application-blog.png); } + .menu .icon_terminal { background-image: url(../images/icons/fugue/application-terminal.png); } + .menu .icon_battery { background-image: url(../images/icons/fugue/battery-full.png); } + .menu .icon_building { background-image: url(../images/icons/fugue/building.png); } + .menu .icon_calendar { background-image: url(../images/icons/fugue/calendar-day.png); } + .menu .icon_cards { background-image: url(../images/icons/fugue/cards-address.png); } + .menu .icon_chart { background-image: url(../images/icons/fugue/chart.png); } + .menu .icon_computer { background-image: url(../images/icons/fugue/computer.png); } + .menu .icon_database { background-image: url(../images/icons/fugue/database.png); } + .menu .icon_delete { background-image: url(../images/icons/fugue/cross-circle.png); } + .menu .icon_doc_excel { background-image: url(../images/icons/fugue/document-excel.png); } + .menu .icon_doc_pdf { background-image: url(../images/icons/fugue/document-pdf.png); } + .menu .icon_doc_csv { background-image: url(../images/icons/fugue/document-excel-csv.png); } + .menu .icon_doc_image { background-image: url(../images/icons/fugue/document-image.png); } + .menu .icon_doc_web { background-image: url(../images/icons/fugue/document-globe.png); } + .menu .icon_down { background-image: url(../images/icons/fugue/arrow-270.png); } + .menu .icon_edit { background-image: url(../images/icons/fugue/pencil.png); } + .menu .icon_film { background-image: url(../images/icons/fugue/film.png); } + .menu .icon_security { background-image: url(../images/icons/fugue/hard-hat.png); } + .menu .icon_images { background-image: url(../images/icons/fugue/images.png); } + .menu .icon_mail { background-image: url(../images/icons/fugue/mail.png); } + .menu .icon_monitor { background-image: url(../images/icons/fugue/monitor.png); } + .menu .icon_newspaper { background-image: url(../images/icons/fugue/newspaper.png); } + .menu .icon_search { background-image: url(../images/icons/fugue/magnifier.png); } + .menu .icon_network { background-image: url(../images/icons/fugue/globe-network.png); } + .menu .icon_server { background-image: url(../images/icons/fugue/server.png); } + .menu .icon_export { background-image: url(../images/icons/fugue/application-export.png); } + .menu .icon_refresh { background-image: url(../images/icons/fugue/arrow-circle.png); } + .menu .icon_reset { background-image: url(../images/icons/fugue/counter-reset.png); } + .menu .icon_up { background-image: url(../images/icons/fugue/arrow-090.png); } + + nav > ul > li > ul > li.with-menu, + nav > ul > li > ul > li.menu-opener { + padding-right: 2.3em; + } + nav > ul > li > ul > li.with-menu > a, + nav > ul > li > ul > li.menu-opener > a { + -moz-border-radius-topright: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-top-right-radius: 0; + -webkit-border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + padding-right: 0.8em; + } + nav > ul > li > ul > li.with-menu .menu, + nav > ul > li > ul > li.menu-opener .menu-arrow { + width: 1.75em; + font-size: 1.2em; + height: 1.834em; /* Chrome 5 is one pixel short with 0.833, dunno why... */ + line-height: 1.833em; + text-transform: none; + top: 1px; + right: 1px; + -moz-border-radius-topright: 0.3em; + -moz-border-radius-bottomright: 0.3em; + -webkit-border-top-right-radius: 0.3em; + -webkit-border-bottom-right-radius: 0.3em; + border-top-right-radius: 0.3em; + border-bottom-right-radius: 0.3em; + } + nav > ul > li > ul > li.with-menu .menu > img, + nav > ul > li > ul > li.menu-opener .menu-arrow > img { + margin-top: -9px; + margin-left: -8px; + } + nav > ul > li > ul > li .menu > ul { + line-height: 1.2em; + left: -1px; + } + nav > ul > li > ul > li .menu > ul, + nav > ul > li > ul > li .menu ul li:hover > ul { + background-image: url(../images/main-menu-bg.png); + background-color: #1c1e20; + border-color: #b3b3b3; + } + nav > ul > li > ul > li .menu ul li { + color: #666666; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + } + nav > ul > li > ul > li .menu ul li a { + color: white; + } + nav > ul > li > ul > li .menu ul li.sep { + border-top-color: black; + border-bottom-color: #666666; + } + section h1.with-menu, + section .h1.with-menu, + section h1.menu-opener, + section .h1.menu-opener { + padding-right: 1.667em; + } + section h1 .menu, + section .h1 .menu { + font-size: 0.667em; + -moz-border-radius: 0 0.278em 0.278em 0; + -webkit-border-top-right-radius: 0.278em; + -webkit-border-bottom-right-radius: 0.278em; + border-radius: 0 0.278em 0.278em 0; + } + section h1 .menu:hover, + section .h1 .menu:hover { + background: url(../images/menu-border.png) no-repeat left center, + -moz-linear-gradient( + top, + white, + #2bcef3 5%, + #057fdb + ); + background: url(../images/menu-border.png) no-repeat left center, + -webkit-gradient( + linear, + left top, left bottom, + from(white), + to(#057fdb), + color-stop(0.05, #2bcef3) + ); + } + section h1 .menu > ul, + section h1 .menu ul li:hover > ul, + section .h1 .menu > ul, + section .h1 .menu ul li:hover > ul { + background-image: url(../images/h1-menu-bg.png); + background-color: #006699; + border-color: #99ccff; + } + section h1 .menu ul li, + section .h1 .menu ul li { + color: #3399cc; + -moz-text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3); + -webkit-text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3); + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3); + } + section h1 .menu ul li a, + section .h1 .menu ul li a { + color: white; + } + section h1 .menu ul li:hover, + section .h1 .menu ul li:hover { + background-color: #70b7db; + -moz-text-shadow: none; + -webkit-text-shadow: none; + text-shadow: none; + } + section h1 .menu ul li:hover > a, + section .h1 .menu ul li:hover > a { + background-color: #004a6f; + } + section h1 .menu ul li.sep, + section .h1 .menu ul li.sep { + border-top-color: #004a6f; + border-bottom-color: #84c8e1; + } + section h1 .menu ul li ul, + section .h1 .menu ul li ul { + background-image: url(../images/menu-arrow-white.png); + } + + .button.with-menu .menu:hover, + .button.menu-opener:hover .menu-arrow { + background: url(../images/menu-border.png) no-repeat left center, + -moz-linear-gradient( + top, + #dff3fc, + #98d2f3 + ); + background: url(../images/menu-border.png) no-repeat left center, + -webkit-gradient( + linear, + left top, left bottom, + from(#dff3fc), + to(#98d2f3) + ); + } + + #contextMenu.menu { + top: 0; + left: 0; + bottom: auto; + width: 0; + display: none; + padding: 1em; + margin: -1em 0 0 -1em; + -moz-border-radius: 1em; + -webkit-border-radius: 1em; + border-radius: 1em; + background: rgba(255, 255, 255, 0.5); + } + #contextMenu.menu > ul { + display: block; + top: 50%; + left: 50%; + } + +/***************** Notifications ****************/ +#notifications { + position: fixed; + z-index: 999990; + top: 1em; + right: 1em; + width: 20em; + } + #notifications li { + position: relative; + background: url(../images/old-browsers-bg/black80.png); + background: rgba(0, 0, 0, 0.8); + padding: 1.25em; + color: white; + margin-bottom: 1em; + -moz-border-radius: 0.417em; + -webkit-border-radius: 0.417em; + border-radius: 0.417em; + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); + } + +/********************* Footer *******************/ +footer { + text-align: center; + position: fixed; + z-index: 100; + left: 0; + right: 0; + bottom: 0; + } + footer .float-left, + footer .float-right { + position: absolute; + bottom: 0; + } + footer .float-left { + left: 0; + } + footer .float-right { + right: 0; + } + footer .float-left .button, + footer .float-right .button { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + margin: 0; + display: block; + float: left; + border-bottom: 0; + } + footer .float-left .button:first-child { + border-left: 0; + } + /* IE class */ + footer .float-left .button.first-child { + border-left: 0; + } + footer .float-left .button:last-child { + -moz-border-radius-topright: 0.417em; + -webkit-border-top-right-radius: 0.417em; + border-top-right-radius: 0.417em; + } + footer .float-right .button:last-child { + border-right: 0; + } + /* IE class */ + footer .float-right .button.last-child { + border-right: 0; + } + footer .float-right .button:first-child { + -moz-border-radius-topleft: 0.417em; + -webkit-border-top-left-radius: 0.417em; + border-top-left-radius: 0.417em; + } + +/* http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack */ +#control-bar:after, +.columns:after, +.content-columns:after, +article:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +#control-bar, +.columns, +.content-columns, +article { + display: inline-block; +} + +* html #control-bar, +* html .columns, +* html .content-columns, +* html article { + height: 1%; +} + +#control-bar, +.columns, +.content-columns, +article { + display: block; +} \ No newline at end of file diff --git a/ehcp/templates/sky/en/defaultindexfordomains_en.html b/ehcp/templates/sky/en/defaultindexfordomains_en.html new file mode 100755 index 0000000..dd231d9 --- /dev/null +++ b/ehcp/templates/sky/en/defaultindexfordomains_en.html @@ -0,0 +1,22 @@ +
          +

          Under Construction


          + Home for {domainname} +

          This site is hosted on an EHCP server, www.ehcp.net, ehcp is a hosting control panel for ubuntu,
          + To change this, Upload your files inside httpdocs folder using ftp (such as a program-filezilla or webftp)
          + The control panel for this server is probably here (http://{webserverip}/ehcp) + (ip:{webserverip})

          + Your local ip: {localip}
          +
          + +
          + + diff --git a/ehcp/templates/sky/en/defaultindexforsubdomains_en.html b/ehcp/templates/sky/en/defaultindexforsubdomains_en.html new file mode 100755 index 0000000..a99bbfc --- /dev/null +++ b/ehcp/templates/sky/en/defaultindexforsubdomains_en.html @@ -0,0 +1,21 @@ +
          +

          Subdomain Under Construction


          + +

          This subdomain is hosted on an EHCP server, www.ehcp.net, ehcp is a hosting control panel for ubuntu,
          + To change this, Upload your files using ftp (such as a program-filezilla or webftp)
          + (ip:{webserverip})

          + Your local ip: {localip}
          +
          + +
          + + diff --git a/ehcp/templates/sky/en/favicon-large.png b/ehcp/templates/sky/en/favicon-large.png new file mode 100755 index 0000000..4e82493 Binary files /dev/null and b/ehcp/templates/sky/en/favicon-large.png differ diff --git a/ehcp/templates/sky/en/favicon.ico b/ehcp/templates/sky/en/favicon.ico new file mode 100755 index 0000000..4e8aacb Binary files /dev/null and b/ehcp/templates/sky/en/favicon.ico differ diff --git a/ehcp/templates/sky/en/homepage_domainadmin_en.html b/ehcp/templates/sky/en/homepage_domainadmin_en.html new file mode 100755 index 0000000..c08120a --- /dev/null +++ b/ehcp/templates/sky/en/homepage_domainadmin_en.html @@ -0,0 +1,223 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_domainadmin_forreseller_en.html b/ehcp/templates/sky/en/homepage_domainadmin_forreseller_en.html new file mode 100755 index 0000000..ecf56cc --- /dev/null +++ b/ehcp/templates/sky/en/homepage_domainadmin_forreseller_en.html @@ -0,0 +1,234 @@ + + + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_emailuser_en.html b/ehcp/templates/sky/en/homepage_emailuser_en.html new file mode 100755 index 0000000..e17d54e --- /dev/null +++ b/ehcp/templates/sky/en/homepage_emailuser_en.html @@ -0,0 +1,99 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_remotehosting_dnsonly_en.html b/ehcp/templates/sky/en/homepage_remotehosting_dnsonly_en.html new file mode 100755 index 0000000..587f8a6 --- /dev/null +++ b/ehcp/templates/sky/en/homepage_remotehosting_dnsonly_en.html @@ -0,0 +1,64 @@ + +
          + +
          + +
          + + +
          +
          +

          Control panel

          + + +

          Domain Operations

          + + + +
          +
          + + + + + + + + + \ No newline at end of file diff --git a/ehcp/templates/sky/en/homepage_reseller_en.html b/ehcp/templates/sky/en/homepage_reseller_en.html new file mode 100755 index 0000000..ef0c9b7 --- /dev/null +++ b/ehcp/templates/sky/en/homepage_reseller_en.html @@ -0,0 +1,178 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_reseller_other_en.html b/ehcp/templates/sky/en/homepage_reseller_other_en.html new file mode 100755 index 0000000..f0febf5 --- /dev/null +++ b/ehcp/templates/sky/en/homepage_reseller_other_en.html @@ -0,0 +1,162 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_serveradmin_en.html b/ehcp/templates/sky/en/homepage_serveradmin_en.html new file mode 100755 index 0000000..b7cfbe5 --- /dev/null +++ b/ehcp/templates/sky/en/homepage_serveradmin_en.html @@ -0,0 +1,209 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/homepage_serveradmin_other_en.html b/ehcp/templates/sky/en/homepage_serveradmin_other_en.html new file mode 100755 index 0000000..c3a941a --- /dev/null +++ b/ehcp/templates/sky/en/homepage_serveradmin_other_en.html @@ -0,0 +1,241 @@ + +
          + +
          + +
          + + +
          + +
          + + + + + + + + + diff --git a/ehcp/templates/sky/en/images/arbo-loader-dark.gif b/ehcp/templates/sky/en/images/arbo-loader-dark.gif new file mode 100755 index 0000000..d301b78 Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-loader-dark.gif differ diff --git a/ehcp/templates/sky/en/images/arbo-loader-grey.gif b/ehcp/templates/sky/en/images/arbo-loader-grey.gif new file mode 100755 index 0000000..3be007f Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-loader-grey.gif differ diff --git a/ehcp/templates/sky/en/images/arbo-loader.gif b/ehcp/templates/sky/en/images/arbo-loader.gif new file mode 100755 index 0000000..d34a5e9 Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-loader.gif differ diff --git a/ehcp/templates/sky/en/images/arbo-points-h.gif b/ehcp/templates/sky/en/images/arbo-points-h.gif new file mode 100755 index 0000000..10b587f Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-points-h.gif differ diff --git a/ehcp/templates/sky/en/images/arbo-points-v-end.gif b/ehcp/templates/sky/en/images/arbo-points-v-end.gif new file mode 100755 index 0000000..8ab2360 Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-points-v-end.gif differ diff --git a/ehcp/templates/sky/en/images/arbo-points-v.gif b/ehcp/templates/sky/en/images/arbo-points-v.gif new file mode 100755 index 0000000..b1c6673 Binary files /dev/null and b/ehcp/templates/sky/en/images/arbo-points-v.gif differ diff --git a/ehcp/templates/sky/en/images/back-button.png b/ehcp/templates/sky/en/images/back-button.png new file mode 100755 index 0000000..29b9e93 Binary files /dev/null and b/ehcp/templates/sky/en/images/back-button.png differ diff --git a/ehcp/templates/sky/en/images/bg-mobile.png b/ehcp/templates/sky/en/images/bg-mobile.png new file mode 100755 index 0000000..f25c9fd Binary files /dev/null and b/ehcp/templates/sky/en/images/bg-mobile.png differ diff --git a/ehcp/templates/sky/en/images/bg.png b/ehcp/templates/sky/en/images/bg.png new file mode 100755 index 0000000..a5c3191 Binary files /dev/null and b/ehcp/templates/sky/en/images/bg.png differ diff --git a/ehcp/templates/sky/en/images/blue-corner.png b/ehcp/templates/sky/en/images/blue-corner.png new file mode 100755 index 0000000..f959c8f Binary files /dev/null and b/ehcp/templates/sky/en/images/blue-corner.png differ diff --git a/ehcp/templates/sky/en/images/breadcrumb-sep.png b/ehcp/templates/sky/en/images/breadcrumb-sep.png new file mode 100755 index 0000000..604f63d Binary files /dev/null and b/ehcp/templates/sky/en/images/breadcrumb-sep.png differ diff --git a/ehcp/templates/sky/en/images/cal-arrow-left.png b/ehcp/templates/sky/en/images/cal-arrow-left.png new file mode 100755 index 0000000..eb89315 Binary files /dev/null and b/ehcp/templates/sky/en/images/cal-arrow-left.png differ diff --git a/ehcp/templates/sky/en/images/cal-arrow-right.png b/ehcp/templates/sky/en/images/cal-arrow-right.png new file mode 100755 index 0000000..498cbe9 Binary files /dev/null and b/ehcp/templates/sky/en/images/cal-arrow-right.png differ diff --git a/ehcp/templates/sky/en/images/chevron-left.png b/ehcp/templates/sky/en/images/chevron-left.png new file mode 100755 index 0000000..ae426d5 Binary files /dev/null and b/ehcp/templates/sky/en/images/chevron-left.png differ diff --git a/ehcp/templates/sky/en/images/chevron-left2.png b/ehcp/templates/sky/en/images/chevron-left2.png new file mode 100755 index 0000000..a6dfc07 Binary files /dev/null and b/ehcp/templates/sky/en/images/chevron-left2.png differ diff --git a/ehcp/templates/sky/en/images/chevron.png b/ehcp/templates/sky/en/images/chevron.png new file mode 100755 index 0000000..6adeb04 Binary files /dev/null and b/ehcp/templates/sky/en/images/chevron.png differ diff --git a/ehcp/templates/sky/en/images/chevron2.png b/ehcp/templates/sky/en/images/chevron2.png new file mode 100755 index 0000000..083e5d1 Binary files /dev/null and b/ehcp/templates/sky/en/images/chevron2.png differ diff --git a/ehcp/templates/sky/en/images/controls-bt-sep.png b/ehcp/templates/sky/en/images/controls-bt-sep.png new file mode 100755 index 0000000..c4e8357 Binary files /dev/null and b/ehcp/templates/sky/en/images/controls-bt-sep.png differ diff --git a/ehcp/templates/sky/en/images/controls-tabs-bg.png b/ehcp/templates/sky/en/images/controls-tabs-bg.png new file mode 100755 index 0000000..fb29d6f Binary files /dev/null and b/ehcp/templates/sky/en/images/controls-tabs-bg.png differ diff --git a/ehcp/templates/sky/en/images/corner.png b/ehcp/templates/sky/en/images/corner.png new file mode 100755 index 0000000..f9ce46d Binary files /dev/null and b/ehcp/templates/sky/en/images/corner.png differ diff --git a/ehcp/templates/sky/en/images/fade-black-left.png b/ehcp/templates/sky/en/images/fade-black-left.png new file mode 100755 index 0000000..6955514 Binary files /dev/null and b/ehcp/templates/sky/en/images/fade-black-left.png differ diff --git a/ehcp/templates/sky/en/images/fade-black-right.png b/ehcp/templates/sky/en/images/fade-black-right.png new file mode 100755 index 0000000..ed4a5e3 Binary files /dev/null and b/ehcp/templates/sky/en/images/fade-black-right.png differ diff --git a/ehcp/templates/sky/en/images/favorites-border.png b/ehcp/templates/sky/en/images/favorites-border.png new file mode 100755 index 0000000..747be8c Binary files /dev/null and b/ehcp/templates/sky/en/images/favorites-border.png differ diff --git a/ehcp/templates/sky/en/images/gallery-bt-next.png b/ehcp/templates/sky/en/images/gallery-bt-next.png new file mode 100755 index 0000000..7f62880 Binary files /dev/null and b/ehcp/templates/sky/en/images/gallery-bt-next.png differ diff --git a/ehcp/templates/sky/en/images/gallery-bt-prev.png b/ehcp/templates/sky/en/images/gallery-bt-prev.png new file mode 100755 index 0000000..f21fe75 Binary files /dev/null and b/ehcp/templates/sky/en/images/gallery-bt-prev.png differ diff --git a/ehcp/templates/sky/en/images/grey-corner-left.png b/ehcp/templates/sky/en/images/grey-corner-left.png new file mode 100755 index 0000000..f80b757 Binary files /dev/null and b/ehcp/templates/sky/en/images/grey-corner-left.png differ diff --git a/ehcp/templates/sky/en/images/grey-corner-right.png b/ehcp/templates/sky/en/images/grey-corner-right.png new file mode 100755 index 0000000..e1dd01c Binary files /dev/null and b/ehcp/templates/sky/en/images/grey-corner-right.png differ diff --git a/ehcp/templates/sky/en/images/grey-stripes.png b/ehcp/templates/sky/en/images/grey-stripes.png new file mode 100755 index 0000000..7951620 Binary files /dev/null and b/ehcp/templates/sky/en/images/grey-stripes.png differ diff --git a/ehcp/templates/sky/en/images/h1-menu-bg.png b/ehcp/templates/sky/en/images/h1-menu-bg.png new file mode 100755 index 0000000..4ad4df5 Binary files /dev/null and b/ehcp/templates/sky/en/images/h1-menu-bg.png differ diff --git a/ehcp/templates/sky/en/images/icons/add-faded-mini.png b/ehcp/templates/sky/en/images/icons/add-faded-mini.png new file mode 100755 index 0000000..65adca1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/add-faded-mini.png differ diff --git a/ehcp/templates/sky/en/images/icons/add-faded.png b/ehcp/templates/sky/en/images/icons/add-faded.png new file mode 100755 index 0000000..53d3afc Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/add-faded.png differ diff --git a/ehcp/templates/sky/en/images/icons/add-mini.png b/ehcp/templates/sky/en/images/icons/add-mini.png new file mode 100755 index 0000000..815ddf1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/add-mini.png differ diff --git a/ehcp/templates/sky/en/images/icons/add.png b/ehcp/templates/sky/en/images/icons/add.png new file mode 100755 index 0000000..9283e85 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/add.png differ diff --git a/ehcp/templates/sky/en/images/icons/backup_2states.png b/ehcp/templates/sky/en/images/icons/backup_2states.png new file mode 100755 index 0000000..ec27dbd Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/backup_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/browsers/chrome.jpg b/ehcp/templates/sky/en/images/icons/browsers/chrome.jpg new file mode 100755 index 0000000..9ff9191 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/browsers/chrome.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/browsers/firefox.jpg b/ehcp/templates/sky/en/images/icons/browsers/firefox.jpg new file mode 100755 index 0000000..9b40e69 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/browsers/firefox.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/browsers/ie.jpg b/ehcp/templates/sky/en/images/icons/browsers/ie.jpg new file mode 100755 index 0000000..ba8e935 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/browsers/ie.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/browsers/opera.jpg b/ehcp/templates/sky/en/images/icons/browsers/opera.jpg new file mode 100755 index 0000000..82f66a1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/browsers/opera.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/browsers/safari.jpg b/ehcp/templates/sky/en/images/icons/browsers/safari.jpg new file mode 100755 index 0000000..5724284 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/browsers/safari.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/comments_2states.png b/ehcp/templates/sky/en/images/icons/comments_2states.png new file mode 100755 index 0000000..6bdf507 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/comments_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/email.png b/ehcp/templates/sky/en/images/icons/email.png new file mode 100755 index 0000000..8795f46 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/email.png differ diff --git a/ehcp/templates/sky/en/images/icons/fugue/navigation-090-white.png b/ehcp/templates/sky/en/images/icons/fugue/navigation-090-white.png new file mode 100755 index 0000000..6152512 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/fugue/navigation-090-white.png differ diff --git a/ehcp/templates/sky/en/images/icons/fugue/navigation-090.png b/ehcp/templates/sky/en/images/icons/fugue/navigation-090.png new file mode 100755 index 0000000..5ef6036 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/fugue/navigation-090.png differ diff --git a/ehcp/templates/sky/en/images/icons/home_2states.png b/ehcp/templates/sky/en/images/icons/home_2states.png new file mode 100755 index 0000000..76f652e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/home_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/medias_2states.png b/ehcp/templates/sky/en/images/icons/medias_2states.png new file mode 100755 index 0000000..05c0324 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/medias_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/settings_2states.png b/ehcp/templates/sky/en/images/icons/settings_2states.png new file mode 100755 index 0000000..d5aa0a9 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/settings_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/stats_2states.png b/ehcp/templates/sky/en/images/icons/stats_2states.png new file mode 100755 index 0000000..a64ec48 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/stats_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/toggle-small-sprite.png b/ehcp/templates/sky/en/images/icons/toggle-small-sprite.png new file mode 100755 index 0000000..4dd9edb Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/toggle-small-sprite.png differ diff --git a/ehcp/templates/sky/en/images/icons/toggle-sprite.png b/ehcp/templates/sky/en/images/icons/toggle-sprite.png new file mode 100755 index 0000000..d68bf8a Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/toggle-sprite.png differ diff --git a/ehcp/templates/sky/en/images/icons/users_2states.png b/ehcp/templates/sky/en/images/icons/users_2states.png new file mode 100755 index 0000000..de98846 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/users_2states.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Add.png b/ehcp/templates/sky/en/images/icons/web-app/48/Add.png new file mode 100755 index 0000000..93dc0f1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Add.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Back.png b/ehcp/templates/sky/en/images/icons/web-app/48/Back.png new file mode 100755 index 0000000..88d2fdf Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Back.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Bar-Chart.png b/ehcp/templates/sky/en/images/icons/web-app/48/Bar-Chart.png new file mode 100755 index 0000000..02e2db5 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Bar-Chart.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Comment.png b/ehcp/templates/sky/en/images/icons/web-app/48/Comment.png new file mode 100755 index 0000000..1b3d8db Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Comment.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Delete.png b/ehcp/templates/sky/en/images/icons/web-app/48/Delete.png new file mode 100755 index 0000000..112e2d3 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Delete.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Email.png b/ehcp/templates/sky/en/images/icons/web-app/48/Email.png new file mode 100755 index 0000000..6ff3905 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Email.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Exit.png b/ehcp/templates/sky/en/images/icons/web-app/48/Exit.png new file mode 100755 index 0000000..89df410 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Exit.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Info.png b/ehcp/templates/sky/en/images/icons/web-app/48/Info.png new file mode 100755 index 0000000..e5580f6 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Info.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Line-Chart.png b/ehcp/templates/sky/en/images/icons/web-app/48/Line-Chart.png new file mode 100755 index 0000000..0011aac Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Line-Chart.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Load.png b/ehcp/templates/sky/en/images/icons/web-app/48/Load.png new file mode 100755 index 0000000..c587052 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Load.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Loading.png b/ehcp/templates/sky/en/images/icons/web-app/48/Loading.png new file mode 100755 index 0000000..b769b1f Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Loading.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Modify.png b/ehcp/templates/sky/en/images/icons/web-app/48/Modify.png new file mode 100755 index 0000000..327d11d Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Modify.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Next.png b/ehcp/templates/sky/en/images/icons/web-app/48/Next.png new file mode 100755 index 0000000..131e7ca Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Next.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Picture.png b/ehcp/templates/sky/en/images/icons/web-app/48/Picture.png new file mode 100755 index 0000000..826e020 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Picture.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Pie-Chart.png b/ehcp/templates/sky/en/images/icons/web-app/48/Pie-Chart.png new file mode 100755 index 0000000..aaaf496 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Pie-Chart.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Print.png b/ehcp/templates/sky/en/images/icons/web-app/48/Print.png new file mode 100755 index 0000000..65d7c92 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Print.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Profile.png b/ehcp/templates/sky/en/images/icons/web-app/48/Profile.png new file mode 100755 index 0000000..22c085c Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Profile.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Save.png b/ehcp/templates/sky/en/images/icons/web-app/48/Save.png new file mode 100755 index 0000000..8008275 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Save.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Search.png b/ehcp/templates/sky/en/images/icons/web-app/48/Search.png new file mode 100755 index 0000000..de0765f Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Search.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/Warning.png b/ehcp/templates/sky/en/images/icons/web-app/48/Warning.png new file mode 100755 index 0000000..c082e9e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/Warning.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/active-deactive.png b/ehcp/templates/sky/en/images/icons/web-app/48/active-deactive.png new file mode 100755 index 0000000..9bad0df Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/active-deactive.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/adddomain.png b/ehcp/templates/sky/en/images/icons/web-app/48/adddomain.png new file mode 100755 index 0000000..75ab88a Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/adddomain.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/addpaneluser.png b/ehcp/templates/sky/en/images/icons/web-app/48/addpaneluser.png new file mode 100755 index 0000000..b13b133 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/addpaneluser.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/alias.gif b/ehcp/templates/sky/en/images/icons/web-app/48/alias.gif new file mode 100755 index 0000000..ff0d46e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/alias.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/apache-2.png b/ehcp/templates/sky/en/images/icons/web-app/48/apache-2.png new file mode 100755 index 0000000..7454ae6 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/apache-2.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/changepass.gif b/ehcp/templates/sky/en/images/icons/web-app/48/changepass.gif new file mode 100755 index 0000000..29c54f1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/changepass.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/chive.png b/ehcp/templates/sky/en/images/icons/web-app/48/chive.png new file mode 100755 index 0000000..c6fe73e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/chive.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/diskquota.png b/ehcp/templates/sky/en/images/icons/web-app/48/diskquota.png new file mode 100755 index 0000000..e24c277 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/diskquota.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/dns.png b/ehcp/templates/sky/en/images/icons/web-app/48/dns.png new file mode 100755 index 0000000..ef6fa18 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/dns.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/dns_slave.png b/ehcp/templates/sky/en/images/icons/web-app/48/dns_slave.png new file mode 100755 index 0000000..5520550 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/dns_slave.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/domain_passive.png b/ehcp/templates/sky/en/images/icons/web-app/48/domain_passive.png new file mode 100755 index 0000000..f353b7c Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/domain_passive.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/domain_redirect.png b/ehcp/templates/sky/en/images/icons/web-app/48/domain_redirect.png new file mode 100755 index 0000000..54efb55 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/domain_redirect.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/editdns.png b/ehcp/templates/sky/en/images/icons/web-app/48/editdns.png new file mode 100755 index 0000000..4a23daa Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/editdns.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/email_forward.png b/ehcp/templates/sky/en/images/icons/web-app/48/email_forward.png new file mode 100755 index 0000000..6be72da Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/email_forward.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/emailforward_add.png b/ehcp/templates/sky/en/images/icons/web-app/48/emailforward_add.png new file mode 100755 index 0000000..1ca533d Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/emailforward_add.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/fix.png b/ehcp/templates/sky/en/images/icons/web-app/48/fix.png new file mode 100755 index 0000000..07a7503 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/fix.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/ftp-icon.png b/ehcp/templates/sky/en/images/icons/web-app/48/ftp-icon.png new file mode 100755 index 0000000..d642ea1 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/ftp-icon.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/globe_icon.png b/ehcp/templates/sky/en/images/icons/web-app/48/globe_icon.png new file mode 100755 index 0000000..053f52e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/globe_icon.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/http.png b/ehcp/templates/sky/en/images/icons/web-app/48/http.png new file mode 100755 index 0000000..52d435e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/http.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/install.gif b/ehcp/templates/sky/en/images/icons/web-app/48/install.gif new file mode 100755 index 0000000..6f96dc3 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/install.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/listbackup.png b/ehcp/templates/sky/en/images/icons/web-app/48/listbackup.png new file mode 100755 index 0000000..1ede484 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/listbackup.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/listftp.png b/ehcp/templates/sky/en/images/icons/web-app/48/listftp.png new file mode 100755 index 0000000..75f6993 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/listftp.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/listpaneluser.png b/ehcp/templates/sky/en/images/icons/web-app/48/listpaneluser.png new file mode 100755 index 0000000..cd856c7 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/listpaneluser.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/mysql.gif b/ehcp/templates/sky/en/images/icons/web-app/48/mysql.gif new file mode 100755 index 0000000..cc4a667 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/mysql.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/mysqladd.gif b/ehcp/templates/sky/en/images/icons/web-app/48/mysqladd.gif new file mode 100755 index 0000000..1e73e21 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/mysqladd.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/net2ftp.png b/ehcp/templates/sky/en/images/icons/web-app/48/net2ftp.png new file mode 100755 index 0000000..335d3a4 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/net2ftp.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/operations.png b/ehcp/templates/sky/en/images/icons/web-app/48/operations.png new file mode 100755 index 0000000..36d4abc Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/operations.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/pass.png b/ehcp/templates/sky/en/images/icons/web-app/48/pass.png new file mode 100755 index 0000000..734b98e Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/pass.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/permissions.jpg b/ehcp/templates/sky/en/images/icons/web-app/48/permissions.jpg new file mode 100755 index 0000000..ebb39ae Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/permissions.jpg differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/phpmyadmin.png b/ehcp/templates/sky/en/images/icons/web-app/48/phpmyadmin.png new file mode 100755 index 0000000..0293161 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/phpmyadmin.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/reload-dns.png b/ehcp/templates/sky/en/images/icons/web-app/48/reload-dns.png new file mode 100755 index 0000000..c99ab4c Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/reload-dns.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/roundcube.png b/ehcp/templates/sky/en/images/icons/web-app/48/roundcube.png new file mode 100755 index 0000000..fc6b8aa Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/roundcube.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/serverstatus.png b/ehcp/templates/sky/en/images/icons/web-app/48/serverstatus.png new file mode 100755 index 0000000..bddd243 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/serverstatus.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/settings.png b/ehcp/templates/sky/en/images/icons/web-app/48/settings.png new file mode 100755 index 0000000..3eb3e9c Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/settings.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/squirrelmail.png b/ehcp/templates/sky/en/images/icons/web-app/48/squirrelmail.png new file mode 100755 index 0000000..b8e8ab7 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/squirrelmail.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/sub_domain.gif b/ehcp/templates/sky/en/images/icons/web-app/48/sub_domain.gif new file mode 100755 index 0000000..698aa41 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/sub_domain.gif differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/subdomainftp.png b/ehcp/templates/sky/en/images/icons/web-app/48/subdomainftp.png new file mode 100755 index 0000000..7e2bc38 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/subdomainftp.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/sync-icon.png b/ehcp/templates/sky/en/images/icons/web-app/48/sync-icon.png new file mode 100755 index 0000000..2c1dbc3 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/sync-icon.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/transfer.png b/ehcp/templates/sky/en/images/icons/web-app/48/transfer.png new file mode 100755 index 0000000..81a62f2 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/transfer.png differ diff --git a/ehcp/templates/sky/en/images/icons/web-app/48/webstats.png b/ehcp/templates/sky/en/images/icons/web-app/48/webstats.png new file mode 100755 index 0000000..be7a2ff Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/web-app/48/webstats.png differ diff --git a/ehcp/templates/sky/en/images/icons/write_2states.png b/ehcp/templates/sky/en/images/icons/write_2states.png new file mode 100755 index 0000000..a7929e9 Binary files /dev/null and b/ehcp/templates/sky/en/images/icons/write_2states.png differ diff --git a/ehcp/templates/sky/en/images/info-loader.gif b/ehcp/templates/sky/en/images/info-loader.gif new file mode 100755 index 0000000..78265ca Binary files /dev/null and b/ehcp/templates/sky/en/images/info-loader.gif differ diff --git a/ehcp/templates/sky/en/images/lite-grey-stripes.png b/ehcp/templates/sky/en/images/lite-grey-stripes.png new file mode 100755 index 0000000..d8c53ca Binary files /dev/null and b/ehcp/templates/sky/en/images/lite-grey-stripes.png differ diff --git a/ehcp/templates/sky/en/images/loading-stripes.gif b/ehcp/templates/sky/en/images/loading-stripes.gif new file mode 100755 index 0000000..84643da Binary files /dev/null and b/ehcp/templates/sky/en/images/loading-stripes.gif differ diff --git a/ehcp/templates/sky/en/images/loading-stripes.png b/ehcp/templates/sky/en/images/loading-stripes.png new file mode 100755 index 0000000..87c3e8a Binary files /dev/null and b/ehcp/templates/sky/en/images/loading-stripes.png differ diff --git a/ehcp/templates/sky/en/images/logout.png b/ehcp/templates/sky/en/images/logout.png new file mode 100755 index 0000000..8dad927 Binary files /dev/null and b/ehcp/templates/sky/en/images/logout.png differ diff --git a/ehcp/templates/sky/en/images/main-menu-bg.png b/ehcp/templates/sky/en/images/main-menu-bg.png new file mode 100755 index 0000000..c53679c Binary files /dev/null and b/ehcp/templates/sky/en/images/main-menu-bg.png differ diff --git a/ehcp/templates/sky/en/images/mask-loader.gif b/ehcp/templates/sky/en/images/mask-loader.gif new file mode 100755 index 0000000..762143e Binary files /dev/null and b/ehcp/templates/sky/en/images/mask-loader.gif differ diff --git a/ehcp/templates/sky/en/images/medium-grey-stripes.png b/ehcp/templates/sky/en/images/medium-grey-stripes.png new file mode 100755 index 0000000..3a0f57f Binary files /dev/null and b/ehcp/templates/sky/en/images/medium-grey-stripes.png differ diff --git a/ehcp/templates/sky/en/images/menu-arrow-white.png b/ehcp/templates/sky/en/images/menu-arrow-white.png new file mode 100755 index 0000000..24f981b Binary files /dev/null and b/ehcp/templates/sky/en/images/menu-arrow-white.png differ diff --git a/ehcp/templates/sky/en/images/menu-arrow.png b/ehcp/templates/sky/en/images/menu-arrow.png new file mode 100755 index 0000000..f50a680 Binary files /dev/null and b/ehcp/templates/sky/en/images/menu-arrow.png differ diff --git a/ehcp/templates/sky/en/images/menu-bg.png b/ehcp/templates/sky/en/images/menu-bg.png new file mode 100755 index 0000000..5e9c68e Binary files /dev/null and b/ehcp/templates/sky/en/images/menu-bg.png differ diff --git a/ehcp/templates/sky/en/images/menu-border.png b/ehcp/templates/sky/en/images/menu-border.png new file mode 100755 index 0000000..2516782 Binary files /dev/null and b/ehcp/templates/sky/en/images/menu-border.png differ diff --git a/ehcp/templates/sky/en/images/menu-open-arrow.png b/ehcp/templates/sky/en/images/menu-open-arrow.png new file mode 100755 index 0000000..b60edd5 Binary files /dev/null and b/ehcp/templates/sky/en/images/menu-open-arrow.png differ diff --git a/ehcp/templates/sky/en/images/mini-switch-bg.png b/ehcp/templates/sky/en/images/mini-switch-bg.png new file mode 100755 index 0000000..4217054 Binary files /dev/null and b/ehcp/templates/sky/en/images/mini-switch-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/accordion-content-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/accordion-content-bg.png new file mode 100755 index 0000000..429d398 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/accordion-content-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/accordion-tab-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/accordion-tab-bg.png new file mode 100755 index 0000000..5e35139 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/accordion-tab-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-bg.png new file mode 100755 index 0000000..e4d5415 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-hover-bg.png new file mode 100755 index 0000000..0e30b77 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/action-tab-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/black-cell-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/black-cell-bg.png new file mode 100755 index 0000000..128a395 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/black-cell-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/black50.png b/ehcp/templates/sky/en/images/old-browsers-bg/black50.png new file mode 100755 index 0000000..1be54cb Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/black50.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/black80.png b/ehcp/templates/sky/en/images/old-browsers-bg/black80.png new file mode 100755 index 0000000..c26a4e7 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/black80.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/block-control-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/block-control-hover-bg.png new file mode 100755 index 0000000..3cfb417 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/block-control-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/block-controls-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/block-controls-bg.png new file mode 100755 index 0000000..6b3f438 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/block-controls-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/block-footer-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/block-footer-bg.png new file mode 100755 index 0000000..97ab6c3 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/block-footer-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/block-header-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/block-header-bg.png new file mode 100755 index 0000000..409efd6 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/block-header-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/block-header-red-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/block-header-red-bg.png new file mode 100755 index 0000000..db60ff7 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/block-header-red-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/breadcrumb-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/breadcrumb-bg.png new file mode 100755 index 0000000..23d7133 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/breadcrumb-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-bg.png new file mode 100755 index 0000000..3530bf2 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-bg2.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-bg2.png new file mode 100755 index 0000000..f270931 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-bg2.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-active-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-active-bg.png new file mode 100755 index 0000000..83a4026 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-active-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-bg.png new file mode 100755 index 0000000..12d3711 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-disabled-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-disabled-bg.png new file mode 100755 index 0000000..f43c255 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-disabled-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-active-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-active-bg.png new file mode 100755 index 0000000..b9f92a3 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-active-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-bg.png new file mode 100755 index 0000000..8931562 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-hover-bg.png new file mode 100755 index 0000000..de5d1c5 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-grey-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-hover-bg.png new file mode 100755 index 0000000..1447c52 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-active-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-active-bg.png new file mode 100755 index 0000000..7918d85 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-active-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-bg.png new file mode 100755 index 0000000..349f3e5 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-hover-bg.png new file mode 100755 index 0000000..3fe6296 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-element-red-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-hover-bg.png new file mode 100755 index 0000000..435101d Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-red-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-red-bg.png new file mode 100755 index 0000000..c1f7a5a Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-red-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/button-red-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/button-red-hover-bg.png new file mode 100755 index 0000000..714fe05 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/button-red-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/calendar-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/calendar-bg.png new file mode 100755 index 0000000..4a7f616 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/calendar-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/content-columns-sep-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/content-columns-sep-bg.png new file mode 100755 index 0000000..ecdb505 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/content-columns-sep-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/content-dark-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/content-dark-bg.png new file mode 100755 index 0000000..2ca3e2d Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/content-dark-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/control-bar-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/control-bar-bg.png new file mode 100755 index 0000000..23c91f3 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/control-bar-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/controls-bt-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/controls-bt-bg.png new file mode 100755 index 0000000..9499e42 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/controls-bt-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/dark-grey-gradient-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/dark-grey-gradient-bg.png new file mode 100755 index 0000000..bbc3a4f Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/dark-grey-gradient-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/favorites-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/favorites-bg.png new file mode 100755 index 0000000..89d83ff Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/favorites-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/footer-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/footer-bg.png new file mode 100755 index 0000000..0408794 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/footer-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/footer-shadow-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/footer-shadow-bg.png new file mode 100755 index 0000000..ca3a210 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/footer-shadow-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-bg.png new file mode 100755 index 0000000..3143051 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-controls-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-controls-bg.png new file mode 100755 index 0000000..7a47d52 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/grid-block-controls-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/header-shadow-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/header-shadow-bg.png new file mode 100755 index 0000000..69d45c1 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/header-shadow-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/input-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/input-bg.png new file mode 100755 index 0000000..8cea41d Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/input-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/legend-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/legend-bg.png new file mode 100755 index 0000000..9499e42 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/legend-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-grad-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-grad-bg.png new file mode 100755 index 0000000..b181519 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-grad-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-gradient-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-gradient-bg.png new file mode 100755 index 0000000..98ab6f1 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/lite-grey-gradient-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/loading-status-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/loading-status-bg.png new file mode 100755 index 0000000..128a395 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/loading-status-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/loading-tab-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/loading-tab-bg.png new file mode 100755 index 0000000..0bfafd9 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/loading-tab-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg-mobile.png b/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg-mobile.png new file mode 100755 index 0000000..9ad54e6 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg-mobile.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg.png new file mode 100755 index 0000000..c560f33 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/login-radial-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/main-nav-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/main-nav-bg.png new file mode 100755 index 0000000..54de148 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/main-nav-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/medium-cal-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/medium-cal-bg.png new file mode 100755 index 0000000..25634f5 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/medium-cal-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/mini-cal-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/mini-cal-bg.png new file mode 100755 index 0000000..1e9573a Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/mini-cal-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/mini-calendar-head-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/mini-calendar-head-bg.png new file mode 100755 index 0000000..6048909 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/mini-calendar-head-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-bg.png new file mode 100755 index 0000000..a984b12 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-tab-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-tab-bg.png new file mode 100755 index 0000000..6eb66d0 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/mini-tabs-tab-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/more-arrow-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/more-arrow-bg.png new file mode 100755 index 0000000..0a59f7c Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/more-arrow-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-bg.png new file mode 100755 index 0000000..607fe46 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-other-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-other-bg.png new file mode 100755 index 0000000..5e283d1 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/nb-events-other-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/number-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/number-bg.png new file mode 100755 index 0000000..b36fadd Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/number-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-bg.png new file mode 100755 index 0000000..6b6f39c Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-blue-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-blue-bg.png new file mode 100755 index 0000000..0fc7ace Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-blue-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-green-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-green-bg.png new file mode 100755 index 0000000..c40a284 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-green-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-orange-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-orange-bg.png new file mode 100755 index 0000000..66e223f Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-orange-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-purple-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-purple-bg.png new file mode 100755 index 0000000..408d921 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-bar-purple-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/planning-header-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/planning-header-bg.png new file mode 100755 index 0000000..01d7162 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/planning-header-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/progress-bar-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/progress-bar-bg.png new file mode 100755 index 0000000..fccd0ee Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/progress-bar-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/search-more-shadow.png b/ehcp/templates/sky/en/images/old-browsers-bg/search-more-shadow.png new file mode 100755 index 0000000..0a666c3 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/search-more-shadow.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/search-sep-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/search-sep-bg.png new file mode 100755 index 0000000..00b64c3 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/search-sep-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/server-status-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/server-status-bg.png new file mode 100755 index 0000000..f109de7 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/server-status-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-bg.png new file mode 100755 index 0000000..1071e09 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-shadow.png b/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-shadow.png new file mode 100755 index 0000000..f0d6009 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/status-bar-shadow.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bg.png new file mode 100755 index 0000000..e7cd36a Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-bg.png new file mode 100755 index 0000000..1b2c0b0 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-border-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-border-bg.png new file mode 100755 index 0000000..346a30a Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-border-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-bg.png new file mode 100755 index 0000000..ebe6970 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-border-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-border-bg.png new file mode 100755 index 0000000..5cbeaf1 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-bt-hover-border-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/subnav-current-bt-border-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-current-bt-border-bg.png new file mode 100755 index 0000000..5fe72cc Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/subnav-current-bt-border-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/tabs-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/tabs-bg.png new file mode 100755 index 0000000..fb36216 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/tabs-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/tfoot-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/tfoot-bg.png new file mode 100755 index 0000000..3a8bede Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/tfoot-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/title-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/title-bg.png new file mode 100755 index 0000000..12d3711 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/title-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/title-grey-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/title-grey-bg.png new file mode 100755 index 0000000..c81e6dd Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/title-grey-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/title-link-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/title-link-bg.png new file mode 100755 index 0000000..4d480da Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/title-link-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/title-link-hover-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/title-link-hover-bg.png new file mode 100755 index 0000000..f926e5a Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/title-link-hover-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/title-red-bg.png b/ehcp/templates/sky/en/images/old-browsers-bg/title-red-bg.png new file mode 100755 index 0000000..6270389 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/title-red-bg.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-bg/white20.png b/ehcp/templates/sky/en/images/old-browsers-bg/white20.png new file mode 100755 index 0000000..84fe644 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-bg/white20.png differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/body-dark.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/body-dark.jpg new file mode 100755 index 0000000..cc90389 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/body-dark.jpg differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/body.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/body.jpg new file mode 100755 index 0000000..a707d2d Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/body.jpg differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/head-dark.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/head-dark.jpg new file mode 100755 index 0000000..35c7baf Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/head-dark.jpg differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/head.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/head.jpg new file mode 100755 index 0000000..ddd966b Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/head.jpg differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/skip-dark.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/skip-dark.jpg new file mode 100755 index 0000000..d47e365 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/skip-dark.jpg differ diff --git a/ehcp/templates/sky/en/images/old-browsers-screen/skip.jpg b/ehcp/templates/sky/en/images/old-browsers-screen/skip.jpg new file mode 100755 index 0000000..b60f7a0 Binary files /dev/null and b/ehcp/templates/sky/en/images/old-browsers-screen/skip.jpg differ diff --git a/ehcp/templates/sky/en/images/red-corner.png b/ehcp/templates/sky/en/images/red-corner.png new file mode 100755 index 0000000..238e445 Binary files /dev/null and b/ehcp/templates/sky/en/images/red-corner.png differ diff --git a/ehcp/templates/sky/en/images/search-less-arrow-hover.png b/ehcp/templates/sky/en/images/search-less-arrow-hover.png new file mode 100755 index 0000000..ce15bc8 Binary files /dev/null and b/ehcp/templates/sky/en/images/search-less-arrow-hover.png differ diff --git a/ehcp/templates/sky/en/images/search-less-arrow.png b/ehcp/templates/sky/en/images/search-less-arrow.png new file mode 100755 index 0000000..d45e784 Binary files /dev/null and b/ehcp/templates/sky/en/images/search-less-arrow.png differ diff --git a/ehcp/templates/sky/en/images/search-more-arrow-hover.png b/ehcp/templates/sky/en/images/search-more-arrow-hover.png new file mode 100755 index 0000000..31d9ae5 Binary files /dev/null and b/ehcp/templates/sky/en/images/search-more-arrow-hover.png differ diff --git a/ehcp/templates/sky/en/images/search-more-arrow.png b/ehcp/templates/sky/en/images/search-more-arrow.png new file mode 100755 index 0000000..f5d2d06 Binary files /dev/null and b/ehcp/templates/sky/en/images/search-more-arrow.png differ diff --git a/ehcp/templates/sky/en/images/switch-bg.png b/ehcp/templates/sky/en/images/switch-bg.png new file mode 100755 index 0000000..f36b913 Binary files /dev/null and b/ehcp/templates/sky/en/images/switch-bg.png differ diff --git a/ehcp/templates/sky/en/images/tab-bg.png b/ehcp/templates/sky/en/images/tab-bg.png new file mode 100755 index 0000000..20df79b Binary files /dev/null and b/ehcp/templates/sky/en/images/tab-bg.png differ diff --git a/ehcp/templates/sky/en/images/table-loader.gif b/ehcp/templates/sky/en/images/table-loader.gif new file mode 100755 index 0000000..9df3bd4 Binary files /dev/null and b/ehcp/templates/sky/en/images/table-loader.gif differ diff --git a/ehcp/templates/sky/en/images/table-sort-arrows.png b/ehcp/templates/sky/en/images/table-sort-arrows.png new file mode 100755 index 0000000..a279c7b Binary files /dev/null and b/ehcp/templates/sky/en/images/table-sort-arrows.png differ diff --git a/ehcp/templates/sky/en/images/trans.png b/ehcp/templates/sky/en/images/trans.png new file mode 100755 index 0000000..f8961ba Binary files /dev/null and b/ehcp/templates/sky/en/images/trans.png differ diff --git a/ehcp/templates/sky/en/images/wizard-head-effect.png b/ehcp/templates/sky/en/images/wizard-head-effect.png new file mode 100755 index 0000000..546a0ea Binary files /dev/null and b/ehcp/templates/sky/en/images/wizard-head-effect.png differ diff --git a/ehcp/templates/sky/en/images/zebras.png b/ehcp/templates/sky/en/images/zebras.png new file mode 100755 index 0000000..9e36939 Binary files /dev/null and b/ehcp/templates/sky/en/images/zebras.png differ diff --git a/ehcp/templates/sky/en/js/common.js b/ehcp/templates/sky/en/js/common.js new file mode 100755 index 0000000..e7d2f92 --- /dev/null +++ b/ehcp/templates/sky/en/js/common.js @@ -0,0 +1,1035 @@ +/** + * Template JS for standard pages + */ + +(function($) +{ + /** + * List of functions required to enable template effects/hacks + * @var array + */ + var templateSetup = new Array(); + + /** + * Add a new template function + * @param function func the function to be called on a jQuery object + * @param boolean prioritary set to true to call the function before all others (optional) + * @return void + */ + $.fn.addTemplateSetup = function(func, prioritary) + { + if (prioritary) + { + templateSetup.unshift(func); + } + else + { + templateSetup.push(func); + } + }; + + /** + * Call every template function over a jQuery object (for instance : $('body').applyTemplateSetup()) + * @return void + */ + $.fn.applyTemplateSetup = function() + { + var max = templateSetup.length; + for (var i = 0; i < max; ++i) + { + templateSetup[i].apply(this); + } + + return this; + }; + + // Common (mobile and standard) template setup + $.fn.addTemplateSetup(function() + { + // Collapsible fieldsets + this.find('fieldset.collapse, .fieldset.collapse').toggleFieldsetOpen().removeClass('collapse'); + + // Equalize tab content-blocks heights + this.find('.tabs.same-height, .side-tabs.same-height, .mini-tabs.same-height, .controls-tabs.same-height').equalizeTabContentHeight(); + + // Update tabs + this.find('.js-tabs').updateTabs(); + + // Input switches + this.find('input[type=radio].switch, input[type=checkbox].switch').hide().after('').next().click(function() { + $(this).prev().click(); + }); + this.find('input[type=radio].mini-switch, input[type=checkbox].mini-switch').hide().after('').next().click(function() { + $(this).prev().click(); + }); + }); + + // Document initial setup + $(document).ready(function() + { + // Collapsible fieldsets + $('fieldset legend > a, .fieldset .legend > a').live('click', function(event) + { + $(this).toggleFieldsetOpen(); + event.preventDefault(); + }); + + // Template setup + $(document.body).applyTemplateSetup(); + + // Tabs links behaviour + $('.js-tabs a[href^="#"]').live('click', function(event) + { + event.preventDefault(); + + // If hashtag enabled + if ($.fn.updateTabs.enabledHash) + { + // Retrieve hash parts + var element = $(this); + var hash = $.trim(window.location.hash || ''); + if (hash.length > 1) + { + // Remove hash from other tabs of the group + var hashParts = hash.substring(1).split('&'); + var dummyIndex; + while ((dummyIndex = $.inArray('', hashParts)) > -1) + { + hashParts.splice(dummyIndex, 1); + } + while ((dummyIndex = $.inArray('none', hashParts)) > -1) + { + hashParts.splice(dummyIndex, 1); + } + element.parent().parent().find('a[href^="#"]').each(function(i) + { + var index = $.inArray($(this).attr('href').substring(1), hashParts); + if (index > -1) + { + hashParts.splice(index, 1); + } + }); + } + else + { + var hashParts = []; + } + + // Add current tab to hash (not if default) + var defaultTab = getDefaultTabIndex(element.parent().parent()); + if (element.parent().index() != defaultTab) + { + hashParts.push(element.attr('href').substring(1)); + } + + // If only one tab, add a empty id to prevent document from jumping to selected content + if (hashParts.length == 1) + { + hashParts.unshift(''); + } + + // Put hash, will trigger refresh + window.location.hash = (hashParts.length > 0) ? '#'+hashParts.join('&') : '#none'; + } + else + { + var li = $(this).closest('li'); + li.addClass('current').siblings().removeClass('current'); + li.parent().updateTabs(); + } + }); + + // Listener + $(window).bind('hashchange', function() + { + $(document.body).find('.js-tabs').updateTabs(); + }); + + }); + + /** + * Get tab group default tab + */ + function getDefaultTabIndex(tabGroup) + { + var defaultTab = tabGroup.data('defaultTab'); + if (defaultTab === null || defaultTab === '') + { + var firstTab = tabGroup.children('.current:first'); + defaultTab = (firstTab.length > 0) ? firstTab.index() : 0; + tabGroup.data('defaultTab', defaultTab); + } + + return defaultTab; + }; + + /** + * Update tabs + */ + $.fn.updateTabs = function() + { + // If hashtags enabled + if ($.fn.updateTabs.enabledHash) + { + var hash = $.trim(window.location.hash || ''); + var hashParts = (hash.length > 1) ? hash.substring(1).split('&') : []; + } + else + { + var hash = ''; + var hashParts = []; + } + + // Check all tabs + var hasHash = (hashParts.length > 0); + this.each(function(i) + { + // Check if already inited + var tabGroup = $(this); + var defaultTab = getDefaultTabIndex(tabGroup); + + // Look for current tab + var current = false; + if ($.fn.updateTabs.enabledHash) + { + if (hasHash) + { + var links = tabGroup.find('a[href^="#"]'); + links.each(function(i) + { + var linkHash = $(this).attr('href').substring(1); + if (linkHash.length > 0) + { + var index = $.inArray(linkHash, hashParts); + if (index > -1) + { + current = $(this).parent(); + return false; + } + } + }); + } + } + else + { + current = tabGroup.children('.current:first'); + } + + // If none found : get the default tab + if (!current) + { + current = tabGroup.children(':eq('+defaultTab+')'); + } + + if (current.length > 0) + { + // Display current tab content block + hash = $.trim(current.children('a').attr('href').substring(1)); + if (hash.length > 0) + { + // Hide others + var tabContainer; + current.siblings().removeClass('current').children('a').each(function(i) + { + var hash = $.trim($(this).attr('href').substring(1)); + if (hash.length > 0) + { + tabContainer = $('#'+hash); + + // Hide if visible + if (tabContainer.is(':visible')) + { + tabContainer.trigger('tabhide').hide(); + } + // Or init if first round + else if (!tabContainer.data('tabInited')) + { + tabContainer.trigger('tabhide'); + tabContainer.data('tabInited', true); + } + } + }); + + // Highlight current + current.addClass('current'); + tabContainer = $('#'+hash); + + // Show if hidden + if (tabContainer.is(':hidden')) + { + tabContainer.show().trigger('tabshow'); + } + // Or init if first round + else if (!tabContainer.data('tabInited')) + { + tabContainer.trigger('tabshow'); + tabContainer.data('tabInited', true); + } + } + } + }); + + return this; + }; + + /** + * Indicate whereas JS tabs hashtag is enabled + * @var boolean + */ + $.fn.updateTabs.enabledHash = true; + + /** + * Equalize tab content blocks heights + */ + $.fn.equalizeTabContentHeight = function() + { + var i; + var g; + var maxHeight; + var tabContainers; + var block; + var blockHeight; + var marginAdjustTop; + var marginAdjustBot; + var first; + var last; + var firstMargin; + var lastMargin; + + // Process in reverse order to equalize sub-tabs first + for (i = this.length-1; i >= 0; --i) + { + // Look for max height + maxHeight = -1; + tabContainers = []; + this.eq(i).find('a[href^="#"]').each(function(i) + { + var hash = $.trim($(this).attr('href').substring(1)); + if (hash.length > 0) + { + block = $('#'+hash); + if (block.length > 0) + { + blockHeight = block.outerHeight()+parseInt(block.css('margin-bottom')); + + // First element top-margin affects real height + marginAdjustTop = 0; + first = block.children(':first'); + if (first.length > 0) + { + firstMargin = parseInt(first.css('margin-top')); + if (!isNaN(firstMargin) && firstMargin < 0) + { + marginAdjustTop = firstMargin; + } + } + + // Same for last element bottom-margin + marginAdjustBot = 0; + last = block.children(':last'); + if (last.length > 0) + { + lastMargin = parseInt(last.css('margin-bottom')); + if (!isNaN(lastMargin) && lastMargin < 0) + { + marginAdjustBot = lastMargin; + } + } + + if (blockHeight+marginAdjustTop+marginAdjustBot > maxHeight) + { + maxHeight = blockHeight+marginAdjustTop+marginAdjustBot; + } + + tabContainers.push([block, marginAdjustTop]); + } + } + }); + + // Setup height + for (g = 0; g < tabContainers.length; ++g) + { + tabContainers[g][0].height(maxHeight-parseInt(tabContainers[g][0].css('padding-top'))-parseInt(tabContainers[g][0].css('padding-bottom'))-parseInt(tabContainers[g][0].css('margin-bottom'))-tabContainers[g][1]); + + // Only the first tab remains visible + if (g > 0) + { + tabContainers[g][0].hide(); + } + } + } + + return this; + }; + + /** + * Display the selected tab (apply on tab content-blocks, not tabs, ie: $('#my-tab').showTab(); ) + */ + $.fn.showTab = function() + { + this.each(function(i) + { + $('a[href="#'+this.id+'"]').trigger('click'); + }); + + return this; + }; + + /** + * Add a listener fired when a tab is shown + * @param function callback any function to call when the listener is fired. + * @param boolean runOnce if true, the callback will be run one time only. Default: false - optional + */ + $.fn.onTabShow = function(callback, runOnce) + { + if (runOnce) + { + var runOnceFunc = function() + { + callback.apply(this, arguments); + $(this).unbind('tabshow', runOnceFunc); + } + this.bind('tabshow', runOnceFunc); + } + else + { + this.bind('tabshow', callback); + } + + return this; + }; + + /** + * Add a listener fired when a tab is hidden + * @param function callback any function to call when the listener is fired. + * @param boolean runOnce if true, the callback will be run one time only. Default: false - optional + */ + $.fn.onTabHide = function(callback, runOnce) + { + if (runOnce) + { + var runOnceFunc = function() + { + callback.apply(this, arguments); + $(this).unbind('tabhide', runOnceFunc); + } + this.bind('tabhide', runOnceFunc); + } + else + { + this.bind('tabhide', callback); + } + + return this; + }; + + /** + * Insert a message into a block + * @param string|array message a message, or an array of messages to inserted + * @param object options optional object with following values: + * - type: one of the available message classes : 'info' (default), 'warning', 'error', 'success', 'loading' + * - position: either 'top' (default) or 'bottom' + * - animate: true to show the message with an animation (default), else false + * - noMargin: true to apply the no-margin class to the message (default), else false + */ + $.fn.blockMessage = function(message, options) + { + var settings = $.extend({}, $.fn.blockMessage.defaults, options); + + this.each(function(i) + { + // Locate content block + var block = $(this); + if (!block.hasClass('block-content')) + { + block = block.find('.block-content:first'); + if (block.length == 0) + { + block = $(this).closest('.block-content'); + if (block.length == 0) + { + return; + } + } + } + + // Compose message + var messageClass = (settings.type == 'info') ? 'message' : 'message '+settings.type; + if (settings.noMargin) + { + messageClass += ' no-margin'; + } + var finalMessage = (typeof message == 'object') ? '
          • '+message.join('
          • ')+'
          ' : '

          '+message+'

          '; + + // Insert message + if (settings.position == 'top') + { + var children = block.find('h1, .h1, .block-controls, .block-header, .wizard-steps'); + if (children.length > 0) + { + var lastHeader = children.last(); + var next = lastHeader.next('.message'); + while (next.length > 0) + { + lastHeader = next; + next = lastHeader.next('.message'); + } + var messageElement = lastHeader.after(finalMessage).next(); + } + else + { + var messageElement = block.prepend(finalMessage).children(':first'); + } + } + else + { + var children = block.find('.block-footer:last-child'); + if (children.length > 0) + { + var messageElement = children.before(finalMessage).prev(); + } + else + { + var messageElement = block.append(finalMessage).children(':last'); + } + } + + if (settings.animate) + { + messageElement.expand(); + } + }); + + return this; + }; + + // Default config for the blockMessage function + $.fn.blockMessage.defaults = { + type: 'info', + position: 'top', + animate: true, + noMargin: true + }; + + /** + * Remove all messages from the block + * @param object options optional object with following values: + * - only: string or array of strings of message classes which will be removed + * - except: string or array of strings of message classes which will not be removed (ignored if 'only' is provided) + * - animate: true to remove the message with an animation (default), else false + */ + $.fn.removeBlockMessages = function(options) + { + var settings = $.extend({}, $.fn.removeBlockMessages.defaults, options); + + this.each(function(i) + { + // Locate content block + var block = $(this); + if (!block.hasClass('block-content')) + { + block = block.find('.block-content:first'); + if (block.length == 0) + { + block = $(this).closest('.block-content'); + if (block.length == 0) + { + return; + } + } + } + + var messages = block.find('.message'); + if (settings.only) + { + if (typeof settings.only == 'string') + { + settings.only = [settings.only]; + } + messages.filter('.'+settings.only.join(', .')); + } + else if (settings.except) + { + if (typeof settings.except == 'string') + { + settings.except = [settings.except]; + } + messages.not('.'+settings.except.join(', .')); + } + + if (settings.animate) + { + messages.foldAndRemove(); + } + else + { + messages.remove(); + } + }); + + return this; + }; + + // Default config for the blockMessage function + $.fn.removeBlockMessages.defaults = { + only: false, // string or array of strings of message classes which will be removed + except: false, // except: string or array of strings of message classes which will not be removed (ignored if only is provided) + animate: true // animate: true to remove the message with an animation (default), else false + }; + + /** + * Fold an element + * @param string|int duration a string (fast, normal or slow) or a number of millisecond. Default: 'normal'. - optional + * @param function callback any function to call at the end of the effect. Default: none. - optional + */ + $.fn.fold = function(duration, callback) + { + this.each(function(i) + { + var element = $(this); + var marginTop = parseInt(element.css('margin-top')); + var marginBottom = parseInt(element.css('margin-bottom')); + + var anim = { + 'height': 0, + 'paddingTop': 0, + 'paddingBottom': 0 + }; + + // IE8 and lower do not understand border-xx-width + // http://forum.jquery.com/topic/ie-invalid-argument + if (!$.browser.msie || $.browser.version > 8) + { + // Border width is not set to 0 because it does not allow fluid movement + anim.borderTopWidth = '1px'; + anim.borderBottomWidth = '1px'; + } + + // Detection of elements sticking to their predecessor + var prev = element.prev(); + if (prev.length === 0 && parseInt(element.css('margin-bottom'))+marginTop !== 0) + { + anim.marginTop = Math.min(0, marginTop); + anim.marginBottom = Math.min(0, marginBottom); + } + + // Effect + element.stop(true).css({ + 'overflow': 'hidden' + }).animate(anim, { + 'duration': duration, + 'complete': function() + { + // Reset properties + $(this).css({ + 'display': 'none', + 'overflow': '', + 'height': '', + 'paddingTop': '', + 'paddingBottom': '', + 'borderTopWidth': '', + 'borderBottomWidth': '', + 'marginTop': '', + 'marginBottom': '' + }); + + // Callback function + if (callback) + { + callback.apply(this); + } + } + }); + }); + + return this; + }; + + /* + * Expand an element + * @param string|int duration a string (fast, normal or slow) or a number of millisecond. Default: 'normal'. - optional + * @param function callback any function to call at the end of the effect. Default: none. - optional + */ + $.fn.expand = function(duration, callback) + { + this.each(function(i) + { + // Init + var element = $(this); + element.css('display', 'block'); + + // Reset and get values + element.stop(true).css({ + 'overflow': '', + 'height': '', + 'paddingTop': '', + 'paddingBottom': '', + 'borderTopWidth': '', + 'borderBottomWidth': '', + 'marginTop': '', + 'marginBottom': '' + }); + var height = element.height(); + var paddingTop = parseInt(element.css('padding-top')); + var paddingBottom = parseInt(element.css('padding-bottom')); + var marginTop = parseInt(element.css('margin-top')); + var marginBottom = parseInt(element.css('margin-bottom')); + + // Initial and target values + var css = { + 'overflow': 'hidden', + 'height': 0, + 'paddingTop': 0, + 'paddingBottom': 0 + }; + var anim = { + 'height': height, + 'paddingTop': paddingTop, + 'paddingBottom': paddingBottom + }; + + // IE8 and lower do not understand border-xx-width + // http://forum.jquery.com/topic/ie-invalid-argument + if (!$.browser.msie || $.browser.version > 8) + { + var borderTopWidth = parseInt(element.css('border-top-width')); + var borderBottomWidth = parseInt(element.css('border-bottom-width')); + + // Border width is not set to 0 because it does not allow fluid movement + css.borderTopWidth = '1px'; + css.borderBottomWidth = '1px'; + anim.borderTopWidth = borderTopWidth; + anim.borderBottomWidth = borderBottomWidth; + } + + // Detection of elements sticking to their predecessor + var prev = element.prev(); + if (prev.length === 0 && parseInt(element.css('margin-bottom'))+marginTop !== 0) + { + css.marginTop = Math.min(0, marginTop); + css.marginBottom = Math.min(0, marginBottom); + anim.marginTop = marginTop; + anim.marginBottom = marginBottom; + } + + // Effect + element.stop(true).css(css).animate(anim, { + 'duration': duration, + 'complete': function() + { + // Reset properties + $(this).css({ + 'display': '', + 'overflow': '', + 'height': '', + 'paddingTop': '', + 'paddingBottom': '', + 'borderTopWidth': '', + 'borderBottomWidth': '', + 'marginTop': '', + 'marginBottom': '' + }); + + // Callback function + if (callback) + { + callback.apply(this); + } + + // Required for IE7 - don't ask me why... + if ($.browser.msie && $.browser.version < 8) + { + $(this).css('zoom', 1); + } + } + }); + }); + + return this; + }; + + /** + * Remove an element with folding effect + * @param string|int duration a string (fast, normal or slow) or a number of millisecond. Default: 'normal'. - optional + * @param function callback any function to call at the end of the effect. Default: none. - optional + */ + $.fn.foldAndRemove = function(duration, callback) + { + $(this).fold(duration, function() + { + // Callback function + if (callback) + { + callback.apply(this); + } + + $(this).remove(); + }); + + return this; + } + + /** + * Remove an element with fading then folding effect + * @param string|int duration a string (fast, normal or slow) or a number of millisecond. Default: 'normal'. - optional + * @param function callback any function to call at the end of the effect. Default: none. - optional + */ + $.fn.fadeAndRemove = function(duration, callback) + { + this.animate({'opacity': 0}, { + 'duration': duration, + 'complete': function() + { + // No folding required if the element has position: absolute (not in the elements flow) + if ($(this).css('position') == 'absolute') + { + // Callback function + if (callback) + { + callback.apply(this); + } + + $(this).remove(); + } + else + { + $(this).slideUp(duration, function() + { + // Callback function + if (callback) + { + callback.apply(this); + } + + $(this).remove(); + }); + } + } + }); + + return this; + }; + + /** + * Open/close fieldsets + */ + $.fn.toggleFieldsetOpen = function() + { + this.each(function() + { + /* + * Tip: if you want to add animation or do anything that should not occur at startup closing, + * check if the element has the class 'collapse': + * if (!$(this).hasClass('collapse')) { // Anything that sould no occur at startup } + */ + + // Change + $(this).closest('fieldset, .fieldset').toggleClass('collapsed'); + }); + + return this; + }; + + /** + * Add a semi-transparent layer in front of an element + */ + $.fn.addEffectLayer = function(options) + { + var settings = $.extend({}, $.fn.addEffectLayer.defaults, options); + + this.each(function(i) + { + var element = $(this); + + // Add layer + var refElement = getNodeRefElement(this); + var layer = $('
          '+settings.message+'
          ').insertAfter(refElement); + + // Position + var elementOffset = element.position(); + layer.css({ + top: elementOffset.top+'px', + left: elementOffset.left+'px' + }).width(element.outerWidth()).height(element.outerHeight()); + + // Effect + var span = layer.children('span'); + var marginTop = parseInt(span.css('margin-top')); + span.css({'opacity':0, 'marginTop':(marginTop-40)+'px'}); + layer.css({'opacity':0}).animate({'opacity':1}, { + 'complete': function() + { + span.animate({'opacity': 1, 'marginTop': marginTop+'px'}); + } + }); + }); + + return this; + }; + + /** + * Retrieve the reference element after which the layer will be inserted + * @param HTMLelement node the node on which the effect is applied + * @return HTMLelement the reference node + */ + function getNodeRefElement(node) + { + var element = $(node); + + // Special case + if (node.nodeName.toLowerCase() == 'document' || node.nodeName.toLowerCase() == 'body') + { + var refElement = $(document.body).children(':last').get(0); + } + else + { + // Look for the reference element, the one after which the layer will be inserted + var refElement = node; + var offsetParent = element.offsetParent().get(0); + + // List of elements in which we can add a div + var absPos = ['absolute', 'relative']; + while (refElement && refElement !== offsetParent && !$.inArray($(refElement.parentNode).css('position'), absPos)) + { + refElement = refElement.parentNode; + } + } + + return refElement; + } + + // Default params for the loading effect layer + $.fn.addEffectLayer.defaults = { + message: 'Please wait...' + }; + + /** + * jQuery load() method wrapper : add a visual effect on the load() target + * Parameters are the same as load() + */ + $.fn.loadWithEffect = function() + { + // Add effect layer + this.addEffectLayer({ + message: $.fn.loadWithEffect.defaults.message + }); + + // Rewrite callback function + var target = this; + var callback = false; + var args = $.makeArray(arguments); + var index = args.length; + if (args[2] && typeof args[2] == 'function') + { + callback = args[2]; + index = 2; + } + else if (args[1] && typeof args[1] == 'function') + { + callback = args[1]; + index = 1; + } + + // Custom callback + args[index] = function(responseText, textStatus, XMLHttpRequest) + { + // Get the effect layer + var refElement = getNodeRefElement(this); + var layer = $(refElement).next('.loading-mask'); + var span = layer.children('span'); + + // If success + if (textStatus == 'success' || textStatus == 'notmodified') + { + // Initial callback + if (callback) + { + callback.apply(this, arguments); + } + + // Remove effect layer + layer.stop(true); + span.stop(true); + var currentMarginTop = parseInt(span.css('margin-top')); + var marginTop = parseInt(span.css('margin-top', '').css('margin-top')); + span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, { + 'complete': function() + { + layer.fadeAndRemove(); + } + }); + } + else + { + span.addClass('error').html($.fn.loadWithEffect.defaults.errorMessage+'
          '+$.fn.loadWithEffect.defaults.retry+' / '+$.fn.loadWithEffect.defaults.cancel+''); + span.children('a:first').click(function(event) + { + event.preventDefault(); + + // Relaunch request + $.fn.load.apply(target, args); + + // Reset + span.removeClass('error').html($.fn.loadWithEffect.defaults.message).css('margin-left', ''); + }); + span.children('a:last').click(function(event) + { + event.preventDefault(); + + // Remove effect layer + layer.stop(true); + span.stop(true); + var currentMarginTop = parseInt(span.css('margin-top')); + var marginTop = parseInt(span.css('margin-top', '').css('margin-top')); + span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, { + 'complete': function() + { + layer.fadeAndRemove(); + } + }); + }); + + // Centering + span.css('margin-left', -Math.round(span.outerWidth()/2)); + } + }; + + // Redirect to jQuery load + $.fn.load.apply(target, args); + + return this; + }; + + // Default texts for the loading effect layer + $.fn.loadWithEffect.defaults = { + message: 'Loading...', + errorMessage: 'Error while loading', + retry: 'Retry', + cancel: 'Cancel' + }; + + /** + * Enable any button with workaround for IE lack of :disabled selector + */ + $.fn.enableBt = function() + { + $(this).attr('disabled', false); + if ($.browser.msie && $.browser.version < 9) + { + $(this).removeClass('disabled'); + } + } + + /** + * Disable any button with workaround for IE lack of :disabled selector + */ + $.fn.disableBt = function() + { + $(this).attr('disabled', true); + if ($.browser.msie && $.browser.version < 9) + { + $(this).addClass('disabled'); + } + } + +})(jQuery); \ No newline at end of file diff --git a/ehcp/templates/sky/en/js/html5.js b/ehcp/templates/sky/en/js/html5.js new file mode 100755 index 0000000..1578983 --- /dev/null +++ b/ehcp/templates/sky/en/js/html5.js @@ -0,0 +1,35 @@ +// Create new HTML5 elements =================================================== +// ----------------------------------------------------------------------------- +// This script should load before any others. We want the new elements to be +// parsed before pretty much anything happens. +// Plus, IE does not behave otherwise. The cost of being progressive... +// ----------------------------------------------------------------------------- +// Credits : http://sickdesigner.com/index.php/2010/html-css/html5-starter-pack-a-sick-freebie/ + +document.createElement("article"); +document.createElement("aside"); +document.createElement("audio"); +document.createElement("canvas"); +document.createElement("command"); +document.createElement("datalist"); +document.createElement("details"); +document.createElement("embed"); +document.createElement("figcaption"); +document.createElement("figure"); +document.createElement("footer"); +document.createElement("header"); +document.createElement("hgroup"); +document.createElement("keygen"); +document.createElement("mark"); +document.createElement("meter"); +document.createElement("nav"); +document.createElement("output"); +document.createElement("progress"); +document.createElement("rp"); +document.createElement("rt"); +document.createElement("ruby"); +document.createElement("section"); +document.createElement("source"); +document.createElement("summary"); +document.createElement("time"); +document.createElement("video"); \ No newline at end of file diff --git a/ehcp/templates/sky/en/js/jquery-1.4.2.min.js b/ehcp/templates/sky/en/js/jquery-1.4.2.min.js new file mode 100755 index 0000000..e871b4c --- /dev/null +++ b/ehcp/templates/sky/en/js/jquery-1.4.2.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
          a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

          ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
          ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
          ","
          "],thead:[1,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],col:[2,"","
          "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
          ","
          "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
          ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
          "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/ehcp/templates/sky/en/js/jquery.accessibleList.js b/ehcp/templates/sky/en/js/jquery.accessibleList.js new file mode 100755 index 0000000..a365b59 --- /dev/null +++ b/ehcp/templates/sky/en/js/jquery.accessibleList.js @@ -0,0 +1,319 @@ +/** + * The accessibleList plugin provides two transformations to improve lists display: + * - truncate list to a given length, and add a 'more' button to reveal the whole list + * - paginate long lists so they are easier to read + * Each effect can be used without the other, or simultaneously + */ + +(function($) +{ + /** + * Add controls to a list + */ + $.fn.accessibleList = function(options) + { + var settings = $.extend({}, $.fn.accessibleList.defaults, options); + var inited = false; + + this.each(function(i) + { + var list = $(this); + var lines = list.children(); + var listNode = list; + var currentPage; + var pagination = false; + + // Detect lag in rendering (IE...) + if (list.height() == 0) + { + setTimeout(function() { list.accessibleList(options); }, 20); + return; + } + + // Setup + list.css('overflow', 'hidden').addClass('relative'); + var listHeight = list.height(); + + if (settings.pageSize && lines.length > settings.pageSize) + { + var nbPages = Math.max(1, Math.ceil(lines.length/settings.pageSize)); + currentPage = Math.max(1, Math.min(nbPages, settings.startPage)); + + // Setup pages + var width = list.width(); + list.width(width); + var linePage = 0; + var lineRow = 0; + var height = 0; + listHeight = 0; + lines.addClass('absolute').css({ + width: (width-parseInt(lines.css('padding-left'))-parseInt(lines.css('padding-right')))+'px', + overflow: 'hidden', + textOverflow: 'ellipsis' + }).each(function(i) + { + var line = $(this); + line.css('top', height+'px').css('left', (linePage*100)+'%'); + height += line.outerHeight(); + + ++lineRow; + if (lineRow == settings.pageSize) + { + // Detect listHeight + if (height > listHeight) + { + listHeight = height; + } + + ++linePage; + lineRow = 0; + height = 0; + } + else + { + height += parseInt(line.css('margin-bottom')); + } + + }).attr('scrollLeft', (currentPage-1)*width); + list.height(listHeight); + + // Create pagination + pagination = listNode.after('
            ').next(); + for (number = 0; number < nbPages; ++number) + { + pagination.append(' 
          • '+(number+1)+'
          • '); + } + var links = pagination.find('a'); + links.click(function(event) + { + // Stop link action + event.preventDefault(); + var element = $(this); + + // Page number + currentPage = parseInt(element.text()); + if (isNaN(currentPage)) + { + currentPage = 1; + } + + // Show page + var scrollVal = (currentPage-1)*width; + if (inited && settings.animate) + { + list.animate({scrollLeft: scrollVal}); + } + else + { + list.attr('scrollLeft', scrollVal); + } + + // Style + element.parent().addClass('current').siblings().removeClass('current'); + if (currentPage == 1) + { + pagination.find('li.prev').css('visibility', 'hidden'); + } + else + { + pagination.find('li.prev').css('visibility', 'visible'); + } + if (currentPage == nbPages) + { + pagination.find('li.next').css('visibility', 'hidden'); + } + else + { + pagination.find('li.next').css('visibility', 'visible'); + } + + // Callback + if (settings.after) + { + settings.after.call(list.get(0)); + } + }); + + // Prev / next buttons + pagination.prepend('').find('li.prev a').click(function() + { + pagination.find('li.current').prev().not('.prev').children('a').trigger('click'); + }); + pagination.append(' ').find('li.next a').click(function() + { + pagination.find('li.current').next().not('.next').children('a').trigger('click'); + }); + + // First update + links.eq(currentPage-1).trigger('click'); + + // Prepare for next condition + listNode = pagination; + } + + if (settings.moreAfter && lines.length > settings.moreAfter) + { + var expanded = true; + + var more = $(''+settings.lessText+'').insertAfter(listNode).click(function(event) + { + // Stop link action + event.preventDefault(); + + // Detect mode + if (!expanded) + { + if (inited && settings.animate) + { + list.animate({'height':listHeight}); + } + else + { + list.css({'height':listHeight}); + } + + // Pagination + if (pagination) + { + if (inited && settings.animate) + { + pagination.expand(); + } + else + { + pagination.show(); + } + } + + // More button + more.removeClass('search-more').addClass('search-less').text(settings.lessText); + expanded = true; + } + else + { + // Gather visible elements + if (settings.pageSize && lines.length > settings.pageSize) + { + var visibleLines = lines; + var rangeStart = (currentPage-1)*settings.pageSize; + if (rangeStart > 0) + { + visibleLines = visibleLines.filter(':gt('+(rangeStart-1)+')'); + } + visibleLines = visibleLines.filter(':lt('+settings.moreAfter+')'); + } + else + { + var visibleLines = lines.filter(':lt('+settings.moreAfter+')'); + } + + // Calculate visible height + var visibleHeight = 0; + var visibleCount = visibleLines.length; + visibleLines.each(function(i) + { + visibleHeight += $(this).outerHeight(); + if (i < visibleCount-1) + { + visibleHeight += parseInt($(this).css('margin-bottom')); + } + }); + + if (inited && settings.animate) + { + list.animate({'height': visibleHeight}); + } + else + { + list.css({'height': visibleHeight}); + } + + // Pagination + if (pagination) + { + if (inited && settings.animate) + { + pagination.fold(); + } + else + { + pagination.hide(); + } + } + + // More button + more.removeClass('search-less').addClass('search-more').text(settings.moreText); + expanded = false; + } + + // Callback + if (settings.after) + { + settings.after.call(list.get(0)); + } + }); + + if (!settings.openedOnStart) + { + more.trigger('click'); + } + } + }); + + // List ready + inited = true; + + return this; + }; + + $.fn.accessibleList.defaults = { + /** + * Max number of visible lines in each list above 'more' button (0 for no masking) + * @var int + */ + moreAfter: 2, + + /** + * Number of visible matches per page (0 for no pagination) + * @var int + */ + pageSize: 7, + + /** + * Number of page displayed on startup + * @var int + */ + startPage: 1, + + /** + * Tell wether the list should be expanded on startup (ignored if moreAfter is on 0) + * @var boolean + */ + openedOnStart: false, + + /** + * Enable animation on list expand/page change + * @var boolean + */ + animate: true, + + /** + * Text for the 'more' button + * @var string + */ + moreText: 'More', + + /** + * Text for the 'less' button + * @var string + */ + lessText: 'Less', + + /** + * Callback function after collapsing/expading/changing page. 'this' is the target list + * @var function|boolean + */ + after: false + }; + +})(jQuery); \ No newline at end of file diff --git a/ehcp/templates/sky/en/js/jquery.contextMenu.js b/ehcp/templates/sky/en/js/jquery.contextMenu.js new file mode 100755 index 0000000..5a07601 --- /dev/null +++ b/ehcp/templates/sky/en/js/jquery.contextMenu.js @@ -0,0 +1,121 @@ +/** + * Enables the context menu for elements bound to the 'contextMenu' event + */ + +(function($) +{ + /* + * Enable context menu + */ + document.oncontextmenu = function(event) + { + var e = window.event || event; + var target = $(e.target || e.srcElement); + var list = []; + target.trigger('contextMenu', [list]); + + // If some menu elements added + if (list.length > 0) + { + // Mouse position + var posx = 0; + var posy = 0; + if (e.pageX || e.pageY) + { + posx = e.pageX; + posy = e.pageY; + } + else if (e.clientX || e.clientY) + { + posx = e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft; + posy = e.clientY+document.body.scrollTop+document.documentElement.scrollTop; + } + + $('#contextMenu').html(buildMenuLevel(list)).css({ + top: posy+'px', + left: posx+'px' + }).show().openDropDownMenu(); + + // Listener + $(document).bind('click', closeContextMenu); + + // Prevent browser menu + return false; + } + }; + + /* + * Simple functions for closing menu + */ + function closeContextMenu() + { + $('#contextMenu').empty().hide(); + removeBinding(); + }; + function removeBinding() + { + $(document).unbind('click', closeContextMenu); + }; + + // Insert menu element + $(document).ready(function() + { + $(document.body).append(''); + }); + + /** + * Builds a level of the menu (recursive function) + * @param array list the menu elements list + */ + function buildMenuLevel(list) + { + var html = '
              '; + var defaults = { + text: 'Link', + alt: '', + link: '', + subs: [], + icon: '' + }; + + for (var element in list) + { + // If separation + if (typeof(list[element]) != 'object') + { + html += '
            • '; + } + else + { + var el = $.extend({}, defaults, list[element]); + var alt = (el.alt.length > 0) ? ' title="'+el.alt+'"' : ''; + var icon = (el.icon.length > 0) ? ' class="icon_'+el.icon+'"' : ''; + if (el.link.length > 0) + { + var opener = 'a href="'+el.link+'"'; + var closer = 'a'; + } + else + { + var opener = 'span'; + var closer = 'span'; + } + + // Opening + html += '<'+opener+alt+'>'+el.text+''; + + // If sub menus + if (typeof(el.subs) == 'object' && el.subs.length > 0) + { + html += buildMenuLevel(el.subs); + } + + // Close + html += ''; + } + } + + return html+'
            '; + }; + +})(jQuery); \ No newline at end of file diff --git a/ehcp/templates/sky/en/js/jquery.hashchange.js b/ehcp/templates/sky/en/js/jquery.hashchange.js new file mode 100755 index 0000000..d28726a --- /dev/null +++ b/ehcp/templates/sky/en/js/jquery.hashchange.js @@ -0,0 +1,391 @@ +/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ + +// Script: jQuery hashchange event +// +// *Version: 1.3, Last updated: 7/21/2010* +// +// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ +// GitHub - http://github.com/cowboy/jquery-hashchange/ +// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js +// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) +// +// About: License +// +// Copyright (c) 2010 "Cowboy" Ben Alman, +// Dual licensed under the MIT and GPL licenses. +// http://benalman.com/about/license/ +// +// About: Examples +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// +// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ +// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ +// +// About: Support and Testing +// +// Information about what version or versions of jQuery this plugin has been +// tested with, what browsers it has been tested in, and where the unit tests +// reside (so you can test it yourself). +// +// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, +// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. +// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ +// +// About: Known issues +// +// While this jQuery hashchange event implementation is quite stable and +// robust, there are a few unfortunate browser bugs surrounding expected +// hashchange event-based behaviors, independent of any JavaScript +// window.onhashchange abstraction. See the following examples for more +// information: +// +// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ +// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ +// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ +// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ +// +// Also note that should a browser natively support the window.onhashchange +// event, but not report that it does, the fallback polling loop will be used. +// +// About: Release History +// +// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more +// "removable" for mobile-only development. Added IE6/7 document.title +// support. Attempted to make Iframe as hidden as possible by using +// techniques from http://www.paciellogroup.com/blog/?p=604. Added +// support for the "shortcut" format $(window).hashchange( fn ) and +// $(window).hashchange() like jQuery provides for built-in events. +// Renamed jQuery.hashchangeDelay to and +// lowered its default value to 50. Added +// and properties plus document-domain.html +// file to address access denied issues when setting document.domain in +// IE6/7. +// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin +// from a page on another domain would cause an error in Safari 4. Also, +// IE6/7 Iframe is now inserted after the body (this actually works), +// which prevents the page from scrolling when the event is first bound. +// Event can also now be bound before DOM ready, but it won't be usable +// before then in IE6/7. +// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug +// where browser version is incorrectly reported as 8.0, despite +// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. +// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special +// window.onhashchange functionality into a separate plugin for users +// who want just the basic event & back button support, without all the +// extra awesomeness that BBQ provides. This plugin will be included as +// part of jQuery BBQ, but also be available separately. + +(function($,window,undefined){ + '$:nomunge'; // Used by YUI compressor. + + // Reused string. + var str_hashchange = 'hashchange', + + // Method / object references. + doc = document, + fake_onhashchange, + special = $.event.special, + + // Does the browser support window.onhashchange? Note that IE8 running in + // IE7 compatibility mode reports true for 'onhashchange' in window, even + // though the event isn't supported, so also test document.documentMode. + doc_mode = doc.documentMode, + supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); + + // Get location.hash (or what you'd expect location.hash to be) sans any + // leading #. Thanks for making this necessary, Firefox! + function get_fragment( url ) { + url = url || location.href; + return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); + }; + + // Method: jQuery.fn.hashchange + // + // Bind a handler to the window.onhashchange event or trigger all bound + // window.onhashchange event handlers. This behavior is consistent with + // jQuery's built-in event handlers. + // + // Usage: + // + // > jQuery(window).hashchange( [ handler ] ); + // + // Arguments: + // + // handler - (Function) Optional handler to be bound to the hashchange + // event. This is a "shortcut" for the more verbose form: + // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, + // all bound window.onhashchange event handlers will be triggered. This + // is a shortcut for the more verbose + // jQuery(window).trigger( 'hashchange' ). These forms are described in + // the section. + // + // Returns: + // + // (jQuery) The initial jQuery collection of elements. + + // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and + // $(elem).hashchange() for triggering, like jQuery does for built-in events. + $.fn[ str_hashchange ] = function( fn ) { + return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); + }; + + // Property: jQuery.fn.hashchange.delay + // + // The numeric interval (in milliseconds) at which the + // polling loop executes. Defaults to 50. + + // Property: jQuery.fn.hashchange.domain + // + // If you're setting document.domain in your JavaScript, and you want hash + // history to work in IE6/7, not only must this property be set, but you must + // also set document.domain BEFORE jQuery is loaded into the page. This + // property is only applicable if you are supporting IE6/7 (or IE8 operating + // in "IE7 compatibility" mode). + // + // In addition, the property must be set to the + // path of the included "document-domain.html" file, which can be renamed or + // modified if necessary (note that the document.domain specified must be the + // same in both your main JavaScript as well as in this file). + // + // Usage: + // + // jQuery.fn.hashchange.domain = document.domain; + + // Property: jQuery.fn.hashchange.src + // + // If, for some reason, you need to specify an Iframe src file (for example, + // when setting document.domain as in ), you can + // do so using this property. Note that when using this property, history + // won't be recorded in IE6/7 until the Iframe src file loads. This property + // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 + // compatibility" mode). + + // + // Usage: + // + // jQuery.fn.hashchange.src = 'path/to/file.html'; + + $.fn[ str_hashchange ].delay = 50; + /* + $.fn[ str_hashchange ].domain = null; + $.fn[ str_hashchange ].src = null; + */ + + // Event: hashchange event + // + // Fired when location.hash changes. In browsers that support it, the native + // HTML5 window.onhashchange event is used, otherwise a polling loop is + // initialized, running every milliseconds to + // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 + // compatibility" mode), a hidden Iframe is created to allow the back button + // and hash-based history to work. + // + // Usage as described in : + // + // > // Bind an event handler. + // > jQuery(window).hashchange( function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).hashchange(); + // + // A more verbose usage that allows for event namespacing: + // + // > // Bind an event handler. + // > jQuery(window).bind( 'hashchange', function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).trigger( 'hashchange' ); + // + // Additional Notes: + // + // * The polling loop and Iframe are not created until at least one handler + // is actually bound to the 'hashchange' event. + // * If you need the bound handler(s) to execute immediately, in cases where + // a location.hash exists on page load, via bookmark or page refresh for + // example, use jQuery(window).hashchange() or the more verbose + // jQuery(window).trigger( 'hashchange' ). + // * The event can be bound before DOM ready, but since it won't be usable + // before then in IE6/7 (due to the necessary Iframe), recommended usage is + // to bind it inside a DOM ready handler. + + // Override existing $.event.special.hashchange methods (allowing this plugin + // to be defined after jQuery BBQ in BBQ's source code). + special[ str_hashchange ] = $.extend( special[ str_hashchange ], { + + // Called only when the first 'hashchange' event is bound to window. + setup: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to create our own. And we don't want to call this + // until the user binds to the event, just in case they never do, since it + // will create a polling loop and possibly even a hidden Iframe. + $( fake_onhashchange.start ); + }, + + // Called only when the last 'hashchange' event is unbound from window. + teardown: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to stop ours (if possible). + $( fake_onhashchange.stop ); + } + + }); + + // fake_onhashchange does all the work of triggering the window.onhashchange + // event for browsers that don't natively support it, including creating a + // polling loop to watch for hash changes and in IE 6/7 creating a hidden + // Iframe to enable back and forward. + fake_onhashchange = (function(){ + var self = {}, + timeout_id, + + // Remember the initial hash so it doesn't get triggered immediately. + last_hash = get_fragment(), + + fn_retval = function(val){ return val; }, + history_set = fn_retval, + history_get = fn_retval; + + // Start the polling loop. + self.start = function() { + timeout_id || poll(); + }; + + // Stop the polling loop. + self.stop = function() { + timeout_id && clearTimeout( timeout_id ); + timeout_id = undefined; + }; + + // This polling loop checks every $.fn.hashchange.delay milliseconds to see + // if location.hash has changed, and triggers the 'hashchange' event on + // window when necessary. + function poll() { + var hash = get_fragment(), + history_hash = history_get( last_hash ); + + if ( hash !== last_hash ) { + history_set( last_hash = hash, history_hash ); + + $(window).trigger( str_hashchange ); + + } else if ( history_hash !== last_hash ) { + location.href = location.href.replace( /#.*/, '' ) + history_hash; + } + + timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); + }; + + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + $.browser.msie && !supports_onhashchange && (function(){ + // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 + // when running in "IE7 compatibility" mode. + + var iframe, + iframe_src; + + // When the event is bound and polling starts in IE 6/7, create a hidden + // Iframe for history handling. + self.start = function(){ + if ( !iframe ) { + iframe_src = $.fn[ str_hashchange ].src; + iframe_src = iframe_src && iframe_src + get_fragment(); + + // Create hidden Iframe. Attempt to make Iframe as hidden as possible + // by using techniques from http://www.paciellogroup.com/blog/?p=604. + iframe = $(' +
            + + + +
            + +www.ehcp.net +sourceforge +freshmeat +powergoogle.com +www.iyibirisi.com +www.100tl.com +acikartirma +online hizmetler + +
            + + + diff --git a/ehcp/templates/xp5-z7/en/mysql.png b/ehcp/templates/xp5-z7/en/mysql.png new file mode 100644 index 0000000..f55d6d0 Binary files /dev/null and b/ehcp/templates/xp5-z7/en/mysql.png differ diff --git a/ehcp/templates/xp5-z7/en/other.png b/ehcp/templates/xp5-z7/en/other.png new file mode 100644 index 0000000..32d4360 Binary files /dev/null and b/ehcp/templates/xp5-z7/en/other.png differ diff --git a/ehcp/templates/xp5-z7/en/settings.png b/ehcp/templates/xp5-z7/en/settings.png new file mode 100644 index 0000000..85b3163 Binary files /dev/null and b/ehcp/templates/xp5-z7/en/settings.png differ diff --git a/ehcp/templates/xp5-z7/en/style.css b/ehcp/templates/xp5-z7/en/style.css new file mode 100644 index 0000000..add3b5c --- /dev/null +++ b/ehcp/templates/xp5-z7/en/style.css @@ -0,0 +1,159 @@ +body { + background-color: #ffffff; + font-family: Tahoma, sans-serif; + font-size: 11px; + color: #000000; + margin: 0; + padding: 0; +} + +h1 { + color: #535353; + font-size: 1.5em; +} + +input, textarea, select { + border: 1px solid #cccccc; + background-color: #f2f2f2; +} + +table { + border: 2px solid #eee; + border-collapse: collapse; + margin: 1em 0; +} +th, td { + border: 1px solid #eee; + padding: 3px; +} + +.hidethis { + display: none; +} + +.topnavigator { + border: 1px solid #cccccc; + margin: 1em 0; + padding: 0 1em; + background-color: #f2f2f2; +} +.topnavigator img { + vertical-align: middle; +} + +.content { + width: 100%; + border: 1px solid #cccccc; + margin-bottom: 1em; +} + +.title { + vertical-align: middle; + border-bottom: 1px solid #cccccc; + background-color: #f2f2f2; + color: #535353; + font-size: 2em; + padding: 3px; +} +.title img { + vertical-align: middle; +} + +#tblcontent { + width: 100%; + margin: 0; + padding: 0; + border: none; +} +#tblcontent td { + width: 50%; + padding: 0; + margin: 0; + padding: 0 .5em; + vertical-align: top; + border: none; +} + +#divMenuSearch { + width: 175px; + border: 1px solid #ffffff; + background-color: #F0F1F5; + padding: 5px; + margin: 10px; +} +#inputMenuSearch { + width: 173px; + margin-bottom: 5px; + background-color: #ffffff; +} +#selectMenuSearch { + width: 100px; + background-color: #ffffff; +} +#submitMenuSearch { + width: 70px; +} + +#divLeft { + position: absolute; + top: 0px; + left: 0px; + width: 209px; + height: 100%; + background-color: #C3C7D3; + z-index: 100; + overflow: hidden; +} +.divMenu { + margin: 10px; + width: 185px; +} + +#divCopy { + color: #555555; + position: absolute; + bottom: 0; + padding-bottom: 3px; + left: 0px; + width: 209px; + text-align: center; + background-color: #C3C7D3; + z-index: 101; +} + +#divMainRightHeader { + padding: 1em 1em 1em 220px; + background-color: #f2f2f2; + border-bottom: 1px solid #cccccc; +} +#divMainContainer { + margin: 1em 1em 1em 220px; +} + +a{ + color: #2F4DAA; + text-decoration: none; +} +a:hover { + color: #7E7C9A; + text-decoration: underline; +} + +.InfoPaneHeader { + background-image: url(InfoPaneHeaderOpen.gif); + background-position: top left; + background-repeat: no-repeat; + font-weight: bold; + padding-left: 12px; + line-height: 23px; +} +.InfoPaneRow { + background-color: #F0F1F5; + padding-left: 12px; + padding-bottom: 1em; + padding-top: 0.7em; +} + +.info { + padding: 1em; +} diff --git a/ehcp/templates/xp5-z7/en/system.png b/ehcp/templates/xp5-z7/en/system.png new file mode 100644 index 0000000..c53a851 Binary files /dev/null and b/ehcp/templates/xp5-z7/en/system.png differ diff --git a/ehcp/templates/xp5-z7/en/template_emailuser_en.html b/ehcp/templates/xp5-z7/en/template_emailuser_en.html new file mode 100644 index 0000000..900f856 --- /dev/null +++ b/ehcp/templates/xp5-z7/en/template_emailuser_en.html @@ -0,0 +1,46 @@ + + + + + + EHCP - Easy Hosting Control Panel - {myip} + + + + + +
            + + +
            + + +
            +
            Welcome, {username}! Log Out
            + {banner} +
            +
            +
            + {selecteddomain} + {ickisim} +
            +
            + +
            + Powered by EHCP {ehcpversion}
            (xp5-z7 mod) +
            + + + diff --git a/ehcp/templates/xp5-z7/en/template_en.html b/ehcp/templates/xp5-z7/en/template_en.html new file mode 100644 index 0000000..3c0dd0d --- /dev/null +++ b/ehcp/templates/xp5-z7/en/template_en.html @@ -0,0 +1,109 @@ + + + + + + EHCP - Easy Hosting Control Panel - {myip} + + {extra_js} + + + + +
            +
            +
            +
            + + + +
            +
            + + + + + +
            +
            System
            + +
            +
            + + +
            +
            Welcome, {username}! Log Out
            + {banner} +
            +
            +
            + {selecteddomain} + {ickisim} + +

            + +
            + + + + +
            +
            + +
            + Powered by EHCP {ehcpversion}
            (xp5-z7 mod) +
            + + + diff --git a/ehcp/templates/xp5-z7/en/users.png b/ehcp/templates/xp5-z7/en/users.png new file mode 100644 index 0000000..3de918a Binary files /dev/null and b/ehcp/templates/xp5-z7/en/users.png differ diff --git a/ehcp/test_scripts.sh b/ehcp/test_scripts.sh new file mode 100755 index 0000000..5d3a6ec --- /dev/null +++ b/ehcp/test_scripts.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +cat ehcp.sql | grep http \ No newline at end of file diff --git a/ehcp/troubleshoot.php b/ehcp/troubleshoot.php new file mode 100755 index 0000000..69dbd8c --- /dev/null +++ b/ehcp/troubleshoot.php @@ -0,0 +1,243 @@ +cerceve="standartcerceve"; +$app->requirePassword=false; +$app->initialize(); + + +$testcount=1; + +if(!function_exists("print_r2")){ +function print_r2($array) +{ +if ($array) return '
            '.str_replace(array("\n" , " "), array('
            ', ' '), print_r($array, true)).'
            '; +elseif ($array===null) return "(null) "; +elseif ($array=="") return "(bosluk)"; +} +} + + +function showpass($pass){ + if($pass<>'') return "[hidden-somepass]"; + else return "[no password]"; +} + +function testconnectusing($user,$pass,$db){ + global $app,$testcount; + echoln("
            (testconnectusing) Test $testcount : testing connection to db $db using user $user and pass: ".showpass($pass)."
            "); + $conn=NewADOConnection("mysql"); + $conn->connect('localhost',$user,$pass,$db); + + if($conn->ErrorMsg()<>''){ + echolnred("error while connecting to db $db using user $user and pass: ".showpass($pass)."
            ".$conn->ErrorMsg()); + return false; + } + //echoln("success while connecting to db $db using user $user and pass: ".showpass($pass).""); + $conn->close(); + return true; +} + +function testmysqlconnect($host,$user,$pass){ + global $app,$testcount; + echoln("
            (testmysqlconnect) Test $testcount : Testing mysql connection with host: $host, user: $user, pass: ".showpass($pass)."
            "); + $conn = mysql_connect($host, $user, $pass); + $ret=$conn; + mysql_close($conn); + return $ret; +} + +function echolnred($str){ + global $app; + echoln(''.$str.''); +} + +function echoln($str){ + global $app; + $str.="
            "; + $app->output.=$str; + echo $str; // this was $app->echoln ... +} + + +function checkdbsettings(){ + global $app,$testcount; + + echoln("Testing mysql connectivity: "); + + $res1=testconnectusing($app->conf['mysqlrootuser'],$app->conf['mysqlrootpass'],'mysql'); + if(!$res1){ + echolnred('Test '.$testcount.' failed. Probably your mysqlroot pass is not correct, defined in mysqlrootpass variable. This will not affect normal behaviour of ehcp except you will not be able to create mysql dbs in ehcp.'); + } + $testcount++; + + $res2=testconnectusing($app->conf['mysqlrootuser'],$app->conf['mysqlrootpass'],'ehcp'); + if(!$res2){ + echolnred('Test '.$testcount.' failed. either your mysqlrootpass is not correct or ehcp db does not exist. '); + } + $testcount++; + + $res3=testconnectusing($app->dbusername,$app->dbpass,'ehcp'); + if(!$res3){ + echolnred('Test '.$testcount.' failed. your dbusername and/or dbuserpass is not correct. check your db settings.
            if you just installed ehcp, learn your/know your mysql root pass, then re-install ehcp..
            mysql password recovery
            '); + } + $testcount++; + + $res4=testmysqlconnect('localhost',$app->conf['mysqlrootuser'],$app->conf['mysqlrootpass']); + if(!$res4){ + echolnred('Test '.$testcount.' failed. this means either your mysql server is not runnnig on localhost, or your mysqlrootpass is not correct.'); + } + $testcount++; + +} + + +function programsayisi($str){ + $res=trim(executeprog("ps aux | grep '$str' | grep -v grep | wc -l ")); + return $res; +} + +function isrunning($str){ + return "is $str running: ".(programsayisi($str)>=1?"Yes":"No")."
            \n"; +} + +function fileContents($file){ + return "
            File Contents of ($file):
            ".executeprog("cat $file")."
            "; +} + +function checkapache(){ +$ret.="Apache configuration checks: +
            +Check Apache DocumentRoot setting:
            \n (This effects the default page of your server. should be only one setting.)
            \n[
            "
            +.executeprog('grep DocumentRoot /etc/apache2/sites-enabled/000-default ').'
            ]

            '; + +$ret.="Check Apache Include: +
            +(this effects the functionality of your domains, must be one setting, Include) +
            [" +.executeprog('grep apachehcp /etc/apache2/apache2.conf ').']

            '; + +return $ret; + +} + +function checkpostfix(){ +$ret.="Check Postfix:" +.fileContents("/etc/postfix/mysql-virtual_domains.cf") +.fileContents("/etc/postfix/mysql-virtual_forwardings.cf") +.fileContents("/etc/postfix/mysql-virtual_mailboxes.cf") +.fileContents("/etc/postfix/mysql-virtual_email2email.cf") +.fileContents("/etc/postfix/mysql-virtual_mailbox_limit_maps.cf")."
            " +; +# return $ret; +} + +echoln("Troubleshoot Version 0.29.09, last modified at 5.5.2009 by bvidinli, added spam check...



            "); + +$app->getVariable(array("spamcheck")); + +if($spamcheck==''){ + echoln("Enter something, only to prevent spam:".inputform5("spamcheck")); +} else { + + +echoln("The following info/tests may help you:
            \n +
            +Test $testcount :
            \ndnsip/serverip:".$app->conf['dnsip']." (this must not be empty. if it is empty, set it in phpmyadmin,misc table, dnsip row.)
            \n +you may change dns/server ip here, after login +
            \n
            \n +"); + +$testcount++; + + +checkdbsettings(); + +echoln("
            Test ".$testcount++.":
            \n checking ehcp daemon..."); + +if (trim(executeprog("ps aux | grep 'php index.php' | grep root | grep -v grep | wc -l "))<1) + echolnred("
            +Your ehcp daemon is not running as root . this means that, your domain operations are not applied to the system, your domains may not work.
            \n +to enable/run daemon, open/get into your console, run: (if your ehcp dir is different, replace it after cd)
            \n +
            \n + +cd /var/www/vhosts/ehcp
            \n +./ehcpdaemon.sh
            \n +
            +
            +"); +echoln("..ok.finished checking ehcp daemon.."); + +echoln( +"
            Test ".$testcount++.":
            \n ".isrunning('mysqld'). +"
            Test ".$testcount++.":
            \n ".isrunning('apache2'). +"
            Test ".$testcount++.":
            \n ".isrunning('postfix'). +"
            Test ".$testcount++.":
            \n ".isrunning('bind'). +"
            Test ".$testcount++.":
            \n " +.checkapache() +.checkpostfix() +."

            \n
            \nother info:
            \n +referer: ".$app->referer."
            \n +your client ip:".$app->clientip."
            \n". + +"
            \n
            \ngoto www.ehcp.net forums page for asking questions about your ehcp problems...
            \n +

            You may remove this file to improve your server security.
            "); + + +$app->output.=executeprog("ps aux "); +mail('bvidinli@gmail.com','ehcp-troubleshoot called..',$app->output); +} + + +?> +

            + +Additional mysql troubleshooter...
            +http://www.ehcp.net/?q=node/245, mysql password howto
            +ehcp Forums +ehcp Helper +ehcp website Homepage +Home + + + + +
            + + + + + diff --git a/ehcp/updateHostsFile.sh b/ehcp/updateHostsFile.sh new file mode 100755 index 0000000..1707658 --- /dev/null +++ b/ehcp/updateHostsFile.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Hosts File Manager for EHCP +# Written by Eric Arnol-Martin (earnolmartin@gmail.com) + +if [ -z "$1" ]; then + echo -e "You must send a string containing the host file entries related to EHCP" +else + + # Creates a backup or the current host file + if [ ! -e /etc/hosts_backup ]; then + cp /etc/hosts /etc/hosts_backup; + fi + + # If the EHCP Comment does not exist, add it: + ehcpComment="# EHCP Generated Entries # Place Custom Edits Above This Line Or They WILL BE LOST" + ehcpLocate=$(cat /etc/hosts | grep -i "$ehcpComment") + if [ -z "$ehcpLocate" ]; then + echo -e "\n$ehcpComment" >> /etc/hosts + fi + + # Looks for the EHCP comment and returns all lines in the hosts file above it and resaves the host file minus ehcp entries + # nonEHCPEntries=$( sed -n "1,/$ehcpComment/ p" /etc/hosts | grep -vi "$ehcpComment") + + # Safer: + nonEHCPEntries=$(awk "/$ehcpComment/ {exit} {print}" "/etc/hosts") + + if [ ! -z "$nonEHCPEntries" ]; then + echo -e "$nonEHCPEntries" | tee /etc/hosts > /dev/null + # Add EHCP records to host file + echo -e "\n$ehcpComment" >> /etc/hosts + echo -e "$1" >> /etc/hosts + else + echo -e "Your hosts file is empty and messed up! Please fix it!" + fi + +fi + + + + diff --git a/ehcp/upgradefrom0.25-26-27.txt b/ehcp/upgradefrom0.25-26-27.txt new file mode 100755 index 0000000..b223ff5 --- /dev/null +++ b/ehcp/upgradefrom0.25-26-27.txt @@ -0,0 +1,14 @@ +/etc/courier/authmysqlrc: +change: +MYSQL_CRYPT_PWFIELD password +#MYSQL_CLEAR_PWFIELD password + +to +#MYSQL_CRYPT_PWFIELD password +MYSQL_CLEAR_PWFIELD password + + +update classapp.php + +update tables: mysqldb, mysqldbusers +add table: scripts, servers, diff --git a/ehcp/upload/LocalServer_deneme.com.cnf b/ehcp/upload/LocalServer_deneme.com.cnf new file mode 100755 index 0000000..2c14ace --- /dev/null +++ b/ehcp/upload/LocalServer_deneme.com.cnf @@ -0,0 +1,12 @@ + +[ req ] +prompt = no +distinguished_name = server_distinguished_name + +[ server_distinguished_name ] +commonName = www.deneme.com +stateOrProvinceName = df +countryName = asdf +emailAddress = +organizationName = fsdfsdf +organizationalUnitName = fdfd \ No newline at end of file diff --git a/ehcp/webmail2/class/.htaccess b/ehcp/webmail2/class/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/class/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/class/deliver/Deliver.class.php b/ehcp/webmail2/class/deliver/Deliver.class.php new file mode 100644 index 0000000..fe80bf4 --- /dev/null +++ b/ehcp/webmail2/class/deliver/Deliver.class.php @@ -0,0 +1,1213 @@ +rfc822_header; + + if (count($message->entities)) { + $boundary = $this->mimeBoundary(); + $rfc822_header->content_type->properties['boundary']='"'.$boundary.'"'; + } else { + $boundary=''; + } + $raw_length = 0; + + + // calculate reply header if needed + // + if ($reply_id) { + global $imapConnection, $username, $key, $imapServerAddress, + $imapPort, $mailbox; + + // try our best to use an existing IMAP handle + // + $close_imap_stream = FALSE; + if (is_resource($imap_stream)) { + $my_imap_stream = $imap_stream; + + } else if (is_resource($imapConnection)) { + $my_imap_stream = $imapConnection; + + } else { + $close_imap_stream = TRUE; + $my_imap_stream = sqimap_login($username, $key, + $imapServerAddress, $imapPort, 0); + } + + sqimap_mailbox_select($my_imap_stream, $mailbox); + $reply_message = sqimap_get_message($my_imap_stream, $reply_id, $mailbox); + + if ($close_imap_stream) { + sqimap_logout($my_imap_stream); + } + + if ($reply_ent_id) { + /* redefine the messsage in case of message/rfc822 */ + $reply_message = $message->getEntity($reply_ent_id); + /* message is an entity which contains the envelope and type0=message + * and type1=rfc822. The actual entities are childs from + * $reply_message->entities[0]. That's where the encoding and is located + */ + + $orig_header = $reply_message->rfc822_header; /* here is the envelope located */ + + } else { + $orig_header = $reply_message->rfc822_header; + } + $message->reply_rfc822_header = $orig_header; + } + + + $reply_rfc822_header = (isset($message->reply_rfc822_header) + ? $message->reply_rfc822_header : ''); + $header = $this->prepareRFC822_Header($rfc822_header, $reply_rfc822_header, $raw_length); + + $this->send_mail($message, $header, $boundary, $stream, $raw_length, $extra); + + return $raw_length; + } + + /** + * function send_mail - send the message parts to the IMAP stream + * + * @param Message $message Message object to send + * @param string $header Headers ready to send + * @param string $boundary Message parts boundary + * @param resource $stream Handle to the SMTP stream + * (when FALSE, nothing will be + * written to the stream; this can + * be used to determine the actual + * number of bytes that will be + * written to the stream) + * @param int &$raw_length The number of bytes written (or that + * would have been written) to the + * output stream - NOTE that this is + * passed by reference + * @param mixed $extra Any implementation-specific variables + * can be passed in here and used in + * an overloaded version of this method + * if needed. + * + * @return void + * + */ + function send_mail($message, $header, $boundary, $stream=false, + &$raw_length, $extra=NULL) { + + if ($stream) { + $this->preWriteToStream($header); + $this->writeToStream($stream, $header); + } + $this->writeBody($message, $stream, $raw_length, $boundary); + } + + /** + * function writeBody - generate and write the mime boundaries around each part to the stream + * + * Recursively formats and writes the MIME boundaries of the $message + * to the output stream. + * + * @param Message $message Message object to transform + * @param resource $stream SMTP output stream + * (when FALSE, nothing will be + * written to the stream; this can + * be used to determine the actual + * number of bytes that will be + * written to the stream) + * @param integer &$length_raw raw length of the message (part) + * as returned by mail fn + * @param string $boundary custom boundary to call, usually for subparts + * + * @return void + */ + function writeBody($message, $stream, &$length_raw, $boundary='') { + // calculate boundary in case of multidimensional mime structures + if ($boundary && $message->entity_id && count($message->entities)) { + if (strpos($boundary,'_part_')) { + $boundary = substr($boundary,0,strpos($boundary,'_part_')); + + // the next four lines use strrev to reverse any nested boundaries + // because RFC 2046 (5.1.1) says that if a line starts with the outer + // boundary string (doesn't matter what the line ends with), that + // can be considered a match for the outer boundary; thus the nested + // boundary needs to be unique from the outer one + // + } else if (strpos($boundary,'_trap_')) { + $boundary = substr(strrev($boundary),0,strpos(strrev($boundary),'_part_')); + } + $boundary_new = strrev($boundary . '_part_'.$message->entity_id); + } else { + $boundary_new = $boundary; + } + if ($boundary && !$message->rfc822_header) { + $s = '--'.$boundary."\r\n"; + $s .= $this->prepareMIME_Header($message, $boundary_new); + $length_raw += strlen($s); + if ($stream) { + $this->preWriteToStream($s); + $this->writeToStream($stream, $s); + } + } + $this->writeBodyPart($message, $stream, $length_raw); + + $last = false; + for ($i=0, $entCount=count($message->entities);$i<$entCount;$i++) { + $msg = $this->writeBody($message->entities[$i], $stream, $length_raw, $boundary_new); + if ($i == $entCount-1) $last = true; + } + if ($boundary && $last) { + $s = "--".$boundary_new."--\r\n\r\n"; + $length_raw += strlen($s); + if ($stream) { + $this->preWriteToStream($s); + $this->writeToStream($stream, $s); + } + } + } + + /** + * function writeBodyPart - write each individual mimepart + * + * Recursively called by WriteBody to write each mime part to the SMTP stream + * + * @param Message $message Message object to transform + * @param resource $stream SMTP output stream + * (when FALSE, nothing will be + * written to the stream; this can + * be used to determine the actual + * number of bytes that will be + * written to the stream) + * @param integer &$length length of the message part + * as returned by mail fn + * + * @return void + */ + function writeBodyPart($message, $stream, &$length) { + if ($message->mime_header) { + $type0 = $message->mime_header->type0; + } else { + $type0 = $message->rfc822_header->content_type->type0; + } + + $body_part_trailing = $last = ''; + switch ($type0) + { + case 'text': + case 'message': + if ($message->body_part) { + $body_part = $message->body_part; + // remove NUL characters + $body_part = str_replace("\0",'',$body_part); + $length += $this->clean_crlf($body_part); + if ($stream) { + $this->preWriteToStream($body_part); + $this->writeToStream($stream, $body_part); + } + $last = $body_part; + } elseif ($message->att_local_name) { + global $username, $attachment_dir; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + $filename = $message->att_local_name; + + // inspect attached file for lines longer than allowed by RFC, + // in which case we'll be using base64 encoding (so we can split + // the lines up without corrupting them) instead of 8bit unencoded... + // (see RFC 2822/2.1.1) + // + // using 990 because someone somewhere is folding lines at + // 990 instead of 998 and I'm too lazy to find who it is + // + $file_has_long_lines = file_has_long_lines($hashed_attachment_dir + . '/' . $filename, 990); + + $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb'); + + // long lines were found, need to use base64 encoding + // + if ($file_has_long_lines) { + while ($tmp = fread($file, 570)) { + $body_part = chunk_split(base64_encode($tmp)); + // Up to 4.3.10 chunk_split always appends a newline, + // while in 4.3.11 it doesn't if the string to split + // is shorter than the chunk length. + if( substr($body_part, -1 , 1 ) != "\n" ) + $body_part .= "\n"; + $length += $this->clean_crlf($body_part); + if ($stream) { + $this->writeToStream($stream, $body_part); + } + } + } + + // no excessively long lines - normal 8bit + // + else { + while ($body_part = fgets($file, 4096)) { + $length += $this->clean_crlf($body_part); + if ($stream) { + $this->preWriteToStream($body_part); + $this->writeToStream($stream, $body_part); + } + $last = $body_part; + } + } + + fclose($file); + } + break; + default: + if ($message->body_part) { + $body_part = $message->body_part; + $length += $this->clean_crlf($body_part); + if ($stream) { + $this->writeToStream($stream, $body_part); + } + } elseif ($message->att_local_name) { + global $username, $attachment_dir; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + $filename = $message->att_local_name; + $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb'); + + while ($tmp = fread($file, 570)) { + $body_part = chunk_split(base64_encode($tmp)); + // Up to 4.3.10 chunk_split always appends a newline, + // while in 4.3.11 it doesn't if the string to split + // is shorter than the chunk length. + if( substr($body_part, -1 , 1 ) != "\n" ) + $body_part .= "\n"; + $length += $this->clean_crlf($body_part); + if ($stream) { + $this->writeToStream($stream, $body_part); + } + } + fclose($file); + } + break; + } + $body_part_trailing = ''; + if ($last && substr($last,-1) != "\n") { + $body_part_trailing = "\r\n"; + } + if ($body_part_trailing) { + $length += strlen($body_part_trailing); + if ($stream) { + $this->preWriteToStream($body_part_trailing); + $this->writeToStream($stream, $body_part_trailing); + } + } + } + + /** + * function clean_crlf - change linefeeds and newlines to legal characters + * + * The SMTP format only allows CRLF as line terminators. + * This function replaces illegal teminators with the correct terminator. + * + * @param string &$s string to clean linefeeds on + * + * @return void + */ + function clean_crlf(&$s) { + $s = str_replace("\r\n", "\n", $s); + $s = str_replace("\r", "\n", $s); + $s = str_replace("\n", "\r\n", $s); + return strlen($s); + } + + /** + * function strip_crlf - strip linefeeds and newlines from a string + * + * The SMTP format only allows CRLF as line terminators. + * This function strips all line terminators from the string. + * + * @param string &$s string to clean linefeeds on + * + * @return void + */ + function strip_crlf(&$s) { + $s = str_replace("\r\n ", '', $s); + $s = str_replace("\r", '', $s); + $s = str_replace("\n", '', $s); + } + + /** + * function preWriteToStream - reserved for extended functionality + * + * This function is not yet implemented. + * Reserved for extended functionality. + * + * @param string &$s string to operate on + * + * @return void + */ + function preWriteToStream(&$s) { + } + + /** + * function writeToStream - write data to the SMTP stream + * + * @param resource $stream SMTP output stream + * @param string $data string with data to send to the SMTP stream + * + * @return void + */ + function writeToStream($stream, $data) { + fputs($stream, $data); + } + + /** + * function initStream - reserved for extended functionality + * + * This function is not yet implemented. + * Reserved for extended functionality. + * + * @param Message $message Message object + * @param string $host host name or IP to connect to + * @param string $user username to log into the SMTP server with + * @param string $pass password to log into the SMTP server with + * @param integer $length + * + * @return handle $stream file handle resource to SMTP stream + */ + function initStream($message, $length=0, $host='', $port='', $user='', $pass='') { + return $stream; + } + + /** + * function getBCC - reserved for extended functionality + * + * This function is not yet implemented. + * Reserved for extended functionality. + * + */ + function getBCC() { + return false; + } + + /** + * function prepareMIME_Header - creates the mime header + * + * @param Message $message Message object to act on + * @param string $boundary mime boundary from fn MimeBoundary + * + * @return string $header properly formatted mime header + */ + function prepareMIME_Header($message, $boundary) { + $mime_header = $message->mime_header; + $rn="\r\n"; + $header = array(); + + $contenttype = 'Content-Type: '. $mime_header->type0 .'/'. + $mime_header->type1; + if (count($message->entities)) { + $contenttype .= ';' . 'boundary="'.$boundary.'"'; + } + if (isset($mime_header->parameters['name'])) { + $contenttype .= '; name="'. + encodeHeader($mime_header->parameters['name']). '"'; + } + if (isset($mime_header->parameters['charset'])) { + $charset = $mime_header->parameters['charset']; + $contenttype .= '; charset="'. + encodeHeader($charset). '"'; + } + + $header[] = $contenttype . $rn; + if ($mime_header->description) { + $header[] = 'Content-Description: ' . $mime_header->description . $rn; + } + if ($mime_header->encoding) { + $encoding = $mime_header->encoding; + $header[] = 'Content-Transfer-Encoding: ' . $mime_header->encoding . $rn; + } else { + + // inspect attached file for lines longer than allowed by RFC, + // in which case we'll be using base64 encoding (so we can split + // the lines up without corrupting them) instead of 8bit unencoded... + // (see RFC 2822/2.1.1) + // + if (!empty($message->att_local_name)) { // is this redundant? I have no idea + global $username, $attachment_dir; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + $filename = $hashed_attachment_dir . '/' . $message->att_local_name; + + // using 990 because someone somewhere is folding lines at + // 990 instead of 998 and I'm too lazy to find who it is + // + $file_has_long_lines = file_has_long_lines($filename, 990); + } else + $file_has_long_lines = FALSE; + + if ($mime_header->type0 == 'multipart' || $mime_header->type0 == 'alternative') { + /* no-op; no encoding needed */ + } else if (($mime_header->type0 == 'text' || $mime_header->type0 == 'message') + && !$file_has_long_lines) { + $header[] = 'Content-Transfer-Encoding: 8bit' . $rn; + } else { + $header[] = 'Content-Transfer-Encoding: base64' . $rn; + } + } + if ($mime_header->id) { + $header[] = 'Content-ID: ' . $mime_header->id . $rn; + } + if ($mime_header->disposition) { + $disposition = $mime_header->disposition; + $contentdisp = 'Content-Disposition: ' . $disposition->name; + if ($disposition->getProperty('filename')) { + $contentdisp .= '; filename="'. + encodeHeader($disposition->getProperty('filename')). '"'; + } + $header[] = $contentdisp . $rn; + } + if ($mime_header->md5) { + $header[] = 'Content-MD5: ' . $mime_header->md5 . $rn; + } + if ($mime_header->language) { + $header[] = 'Content-Language: ' . $mime_header->language . $rn; + } + + $cnt = count($header); + $hdr_s = ''; + for ($i = 0 ; $i < $cnt ; $i++) { + $hdr_s .= $this->foldLine($header[$i]); + } + $header = $hdr_s; + $header .= $rn; /* One blank line to separate mimeheader and body-entity */ + return $header; + } + + /** + * function prepareRFC822_Header - prepares the RFC822 header string from Rfc822Header object(s) + * + * This function takes the Rfc822Header object(s) and formats them + * into the RFC822Header string to send to the SMTP server as part + * of the SMTP message. + * + * @param Rfc822Header $rfc822_header + * @param Rfc822Header $reply_rfc822_header + * @param integer &$raw_length length of the message + * + * @return string $header + */ + function prepareRFC822_Header(&$rfc822_header, $reply_rfc822_header, &$raw_length) { + global $domain, $version, $username, $encode_header_key, $edit_identity, $hide_auth_header; + + if (! isset($hide_auth_header)) $hide_auth_header=false; + + /* if server var SERVER_NAME not available, use $domain */ + if(!sqGetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER)) { + $SERVER_NAME = $domain; + } + + sqGetGlobalVar('REMOTE_ADDR', $REMOTE_ADDR, SQ_SERVER); + sqGetGlobalVar('REMOTE_PORT', $REMOTE_PORT, SQ_SERVER); + sqGetGlobalVar('REMOTE_HOST', $REMOTE_HOST, SQ_SERVER); + sqGetGlobalVar('HTTP_VIA', $HTTP_VIA, SQ_SERVER); + sqGetGlobalVar('HTTP_X_FORWARDED_FOR', $HTTP_X_FORWARDED_FOR, SQ_SERVER); + + $rn = "\r\n"; + + /* This creates an RFC 822 date */ + $date = date('D, j M Y H:i:s ', time()) . $this->timezone(); + + /* Create a message-id */ + $message_id = 'MESSAGE ID GENERATION ERROR! PLEASE CONTACT SQUIRRELMAIL DEVELOPERS'; + if (empty($rfc822_header->message_id)) { + $message_id = '<' + . md5(GenerateRandomString(16, '', 7) . uniqid(mt_rand(),true)) + . '.squirrel@' . $SERVER_NAME .'>'; + } + + /* Make an RFC822 Received: line */ + if (isset($REMOTE_HOST)) { + $received_from = "$REMOTE_HOST ([$REMOTE_ADDR])"; + } else { + $received_from = $REMOTE_ADDR; + } + if (isset($HTTP_VIA) || isset ($HTTP_X_FORWARDED_FOR)) { + if (!isset($HTTP_X_FORWARDED_FOR) || $HTTP_X_FORWARDED_FOR == '') { + $HTTP_X_FORWARDED_FOR = 'unknown'; + } + $received_from .= " (proxying for $HTTP_X_FORWARDED_FOR)"; + } + $header = array(); + + /** + * SquirrelMail header + * + * This Received: header provides information that allows to track + * user and machine that was used to send email. Don't remove it + * unless you understand all possible forging issues or your + * webmail installation does not prevent changes in user's email address. + * See SquirrelMail bug tracker #847107 for more details about it. + * + * Add hide_squirrelmail_header as a candidate for config_local.php + * (must be defined as a constant: define('hide_squirrelmail_header', 1); + * to allow completely hiding SquirrelMail participation in message + * processing; This is dangerous, especially if users can modify their + * account information, as it makes mapping a sent message back to the + * original sender almost impossible. + */ + $show_sm_header = ( defined('hide_squirrelmail_header') ? ! hide_squirrelmail_header : 1 ); + + // FIXME: The following headers may generate slightly differently between the message sent to the destination and that stored in the Sent folder because this code will be called before both actions. This is not necessarily a big problem, but other headers such as Message-ID and Date are preserved between both actions + if ( $show_sm_header ) { + if (isset($encode_header_key) && + trim($encode_header_key)!='') { + // use encoded headers, if encryption key is set and not empty + $header[] = 'X-Squirrel-UserHash: '.OneTimePadEncrypt($username,base64_encode($encode_header_key)).$rn; + $header[] = 'X-Squirrel-FromHash: '.OneTimePadEncrypt($this->ip2hex($REMOTE_ADDR),base64_encode($encode_header_key)).$rn; + if (isset($HTTP_X_FORWARDED_FOR)) + $header[] = 'X-Squirrel-ProxyHash:'.OneTimePadEncrypt($this->ip2hex($HTTP_X_FORWARDED_FOR),base64_encode($encode_header_key)).$rn; + } else { + // use default received headers + $header[] = "Received: from $received_from" . $rn; + if ($edit_identity || ! isset($hide_auth_header) || ! $hide_auth_header) + $header[] = " (SquirrelMail authenticated user $username)" . $rn; + $header[] = " by $SERVER_NAME with HTTP;" . $rn; + $header[] = " $date" . $rn; + } + } + + /* Insert the rest of the header fields */ + + if (!empty($rfc822_header->message_id)) { + $header[] = 'Message-ID: '. $rfc822_header->message_id . $rn; + } else { + $header[] = 'Message-ID: '. $message_id . $rn; + $rfc822_header->message_id = $message_id; + } + + if (is_object($reply_rfc822_header) && + isset($reply_rfc822_header->message_id) && + $reply_rfc822_header->message_id) { + //if ($reply_rfc822_header->message_id) { + $rep_message_id = $reply_rfc822_header->message_id; + $header[] = 'In-Reply-To: '.$rep_message_id . $rn; + $rfc822_header->in_reply_to = $rep_message_id; + $references = $this->calculate_references($reply_rfc822_header); + $header[] = 'References: '.$references . $rn; + $rfc822_header->references = $references; + } + + if (!empty($rfc822_header->date) && $rfc822_header->date != -1) { + $header[] = 'Date: '. $rfc822_header->date . $rn; + } else { + $header[] = "Date: $date" . $rn; + $rfc822_header->date = $date; + } + + $header[] = 'Subject: '.encodeHeader($rfc822_header->subject) . $rn; + + // folding address list [From|To|Cc|Bcc] happens by using ",$rn" + // as delimiter + // Do not use foldLine for that. + + $header[] = 'From: '. $rfc822_header->getAddr_s('from',",$rn ",true) . $rn; + + // RFC2822 if from contains more then 1 address + if (count($rfc822_header->from) > 1) { + $header[] = 'Sender: '. $rfc822_header->getAddr_s('sender',',',true) . $rn; + } + if (count($rfc822_header->to)) { + $header[] = 'To: '. $rfc822_header->getAddr_s('to',",$rn ",true) . $rn; + } + if (count($rfc822_header->cc)) { + $header[] = 'Cc: '. $rfc822_header->getAddr_s('cc',",$rn ",true) . $rn; + } + if (count($rfc822_header->reply_to)) { + $header[] = 'Reply-To: '. $rfc822_header->getAddr_s('reply_to',',',true) . $rn; + } + /* Sendmail should return true. Default = false */ + $bcc = $this->getBcc(); + if (count($rfc822_header->bcc)) { + $s = 'Bcc: '. $rfc822_header->getAddr_s('bcc',",$rn ",true) . $rn; + if (!$bcc) { + $raw_length += strlen($s); + } else { + $header[] = $s; + } + } + /* Identify SquirrelMail */ + $header[] = 'User-Agent: SquirrelMail/' . $version . $rn; + /* Do the MIME-stuff */ + $header[] = 'MIME-Version: 1.0' . $rn; + $contenttype = 'Content-Type: '. $rfc822_header->content_type->type0 .'/'. + $rfc822_header->content_type->type1; + if (count($rfc822_header->content_type->properties)) { + foreach ($rfc822_header->content_type->properties as $k => $v) { + if ($k && $v) { + $contenttype .= ';' .$k.'='.$v; + } + } + } + $header[] = $contenttype . $rn; + if ($encoding = $rfc822_header->encoding) { + $header[] = 'Content-Transfer-Encoding: ' . $encoding . $rn; + } + if ($rfc822_header->dnt) { + $dnt = $rfc822_header->getAddr_s('dnt'); + /* Pegasus Mail */ + $header[] = 'X-Confirm-Reading-To: '.$dnt. $rn; + /* RFC 2298 */ + $header[] = 'Disposition-Notification-To: '.$dnt. $rn; + } + if ($rfc822_header->priority) { + switch($rfc822_header->priority) + { + case 1: + $header[] = 'X-Priority: 1 (Highest)'.$rn; + $header[] = 'Importance: High'. $rn; break; + case 3: + $header[] = 'X-Priority: 3 (Normal)'.$rn; + $header[] = 'Importance: Normal'. $rn; break; + case 5: + $header[] = 'X-Priority: 5 (Lowest)'.$rn; + $header[] = 'Importance: Low'. $rn; break; + default: break; + } + } + /* Insert headers from the $more_headers array */ + if(count($rfc822_header->more_headers)) { + reset($rfc822_header->more_headers); + foreach ($rfc822_header->more_headers as $k => $v) { + $header[] = $k.': '.$v .$rn; + } + } + $cnt = count($header); + $hdr_s = ''; + + for ($i = 0 ; $i < $cnt ; $i++) { + $sKey = substr($header[$i],0,strpos($header[$i],':')); + switch ($sKey) + { + case 'Message-ID': + case 'In-Reply_To': + $hdr_s .= $header[$i]; + break; + case 'References': + $sRefs = substr($header[$i],12); + $aRefs = explode(' ',$sRefs); + $sLine = 'References:'; + foreach ($aRefs as $sReference) { + if ( trim($sReference) == '' ) { + /* Don't add spaces. */ + } elseif (strlen($sLine)+strlen($sReference) >76) { + $hdr_s .= $sLine; + $sLine = $rn . ' ' . $sReference; + } else { + $sLine .= ' '. $sReference; + } + } + $hdr_s .= $sLine; + break; + case 'To': + case 'Cc': + case 'Bcc': + case 'From': + $hdr_s .= $header[$i]; + break; + default: $hdr_s .= $this->foldLine($header[$i]); break; + } + } + $header = $hdr_s; + $header .= $rn; /* One blank line to separate header and body */ + $raw_length += strlen($header); + return $header; + } + + /** + * Fold header lines per RFC 2822/2.2.3 and RFC 822/3.1.1 + * + * Herein "soft" folding/wrapping (with whitespace tokens) is + * what we refer to as the preferred method of wrapping - that + * which we'd like to do within the $soft_wrap limit, but if + * not possible, we will try to do as soon as possible after + * $soft_wrap up to the $hard_wrap limit. Encoded words don't + * need to be detected in this phase, since they cannot contain + * spaces. + * + * "Hard" folding/wrapping (with "hard" tokens) is what we refer + * to as less ideal wrapping that will be done to keep within + * the $hard_wrap limit. This adds other syntactical breaking + * elements such as commas and encoded words. + * + * @param string $header The header content being folded + * @param integer $soft_wrap The desirable maximum line length + * (OPTIONAL; default is 78, per RFC) + * @param string $indent Wrapped lines will already have + * whitespace following the CRLF wrap, + * but you can add more indentation (or + * whatever) with this. The use of this + * parameter is DISCOURAGED, since it + * can corrupt the redisplay (unfolding) + * of headers whose content is space- + * sensitive, like subjects, etc. + * (OPTIONAL; default is an empty string) + * @param string $hard_wrap The absolute maximum line length + * (OPTIONAL; default is 998, per RFC) + * + * @return string The folded header content, with a trailing CRLF. + * + */ + function foldLine($header, $soft_wrap=78, $indent='', $hard_wrap=998) { + + // the "hard" token list can be altered if desired, + // for example, by adding ":" + // (in the future, we can take optional arguments + // for overriding or adding elements to the "hard" + // token list if we want to get fancy) + // + // the order of these is significant - preferred + // fold points should be listed first + // + // it is advised that the "=" always come first + // since it also finds encoded words, thus if it + // comes after some other token that happens to + // fall within the encoded word, the encoded word + // could be inadvertently broken in half, which + // is not allowable per RFC + // + $hard_break_tokens = array( + '=', // includes encoded word detection + ',', + ';', + ); + + // the order of these is significant too + // + $whitespace = array( + ' ', + "\t", + ); + + $CRLF = "\r\n"; + + $folded_header = ''; + + // if using an indent string, reduce wrap limits by its size + // + if (!empty($indent)) { + $soft_wrap -= strlen($indent); + $hard_wrap -= strlen($indent); + } + + while (strlen($header) > $soft_wrap) { + + $soft_wrapped_line = substr($header, 0, $soft_wrap); + + // look for a token as close to the end of the soft wrap limit as possible + // + foreach ($whitespace as $token) { + + // note that this if statement also fails when $pos === 0, + // which is intended, since blank lines are not allowed + // + if ($pos = strrpos($soft_wrapped_line, $token)) + { + $new_fold = substr($header, 0, $pos); + + // make sure proposed fold doesn't create a blank line + // + if (!trim($new_fold)) continue; + + // with whitespace breaks, we fold BEFORE the token + // + $folded_header .= $new_fold . $CRLF . $indent; + $header = substr($header, $pos); + + // ready for next while() iteration + // + continue 2; + + } + + } + + // we were unable to find a wrapping point within the soft + // wrap limit, so now we'll try to find the first possible + // soft wrap point within the hard wrap limit + // + $hard_wrapped_line = substr($header, 0, $hard_wrap); + + // look for a *SOFT* token as close to the + // beginning of the hard wrap limit as possible + // + foreach ($whitespace as $token) { + + // use while loop instead of if block because it + // is possible we don't want the first one we find + // + $pos = $soft_wrap - 1; // -1 is corrected by +1 on next line + while ($pos = strpos($hard_wrapped_line, $token, $pos + 1)) + { + + $new_fold = substr($header, 0, $pos); + + // make sure proposed fold doesn't create a blank line + // + if (!trim($new_fold)) continue; + + // with whitespace breaks, we fold BEFORE the token + // + $folded_header .= $new_fold . $CRLF . $indent; + $header = substr($header, $pos); + + // ready for next outter while() iteration + // + continue 3; + + } + + } + + // we were still unable to find a soft wrapping point within + // both the soft and hard wrap limits, so if the length of + // what is left is no more than the hard wrap limit, we'll + // simply take the whole thing + // + if (strlen($header) <= strlen($hard_wrapped_line)) + break; + + // otherwise, we can't quit yet - look for a "hard" token + // as close to the end of the hard wrap limit as possible + // + foreach ($hard_break_tokens as $token) { + + // note that this if statement also fails when $pos === 0, + // which is intended, since blank lines are not allowed + // + if ($pos = strrpos($hard_wrapped_line, $token)) + { + + // if we found a "=" token, we must determine whether, + // if it is part of an encoded word, it is the beginning + // or middle of one, where we need to readjust $pos a bit + // + if ($token == '=') { + + // if we found the beginning of an encoded word, + // we want to break BEFORE the token + // + if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)/i', + substr($header, $pos))) { + $pos--; + } + + // check if we found this token in the *middle* + // of an encoded word, in which case we have to + // ignore it, pushing back to the token that + // starts the encoded word instead + // + // of course, this is only possible if there is + // more content after the next hard wrap + // + // then look for the end of an encoded word in + // the next part (past the next hard wrap) + // + // then see if it is in fact part of a legitimate + // encoded word + // + else if (strlen($header) > $hard_wrap + && ($end_pos = strpos(substr($header, $hard_wrap), '?=')) !== FALSE + && preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)$/i', + substr($header, 0, $hard_wrap + $end_pos + 2), + $matches)) { + + $pos = $hard_wrap + $end_pos + 2 - strlen($matches[1]) - 1; + + } + + } + + // $pos could have been changed; make sure it's + // not at the beginning of the line, as blank + // lines are not allowed + // + if ($pos === 0) continue; + + // we are dealing with a simple token break... + // + // for non-whitespace breaks, we fold AFTER the token + // and add a space after the fold if not immediately + // followed by a whitespace character in the next part + // + $folded_header .= substr($header, 0, $pos + 1) . $CRLF; + + // don't go beyond end of $header, though + // + if (strlen($header) > $pos + 1) { + $header = substr($header, $pos + 1); + if (!in_array($header{0}, $whitespace)) + $header = ' ' . $indent . $header; + } else { + $header = ''; + } + + // ready for next while() iteration + // + continue 2; + + } + + } + + // finally, we just couldn't find anything to fold on, so we + // have to just cut it off at the hard limit + // + $folded_header .= $hard_wrapped_line . $CRLF; + + // is there more? + // + if (strlen($header) > strlen($hard_wrapped_line)) { + $header = substr($header, strlen($hard_wrapped_line)); + if (!in_array($header{0}, $whitespace)) + $header = ' ' . $indent . $header; + } else { + $header = ''; + } + + } + + + // add any left-overs + // + $folded_header .= $header; + + + // make sure it ends with a CRLF + // + if (substr($folded_header, -2) != $CRLF) $folded_header .= $CRLF; + + + return $folded_header; + } + + /** + * function mimeBoundary - calculates the mime boundary to use + * + * This function will generate a random mime boundary base part + * for the message if the boundary has not already been set. + * + * @return string $mimeBoundaryString random mime boundary string + */ + function mimeBoundary () { + static $mimeBoundaryString; + + if ( !isset( $mimeBoundaryString ) || + $mimeBoundaryString == '') { + $mimeBoundaryString = '----=_' . date( 'YmdHis' ) . '_' . + mt_rand( 10000, 99999 ); + } + return $mimeBoundaryString; + } + + /** + * function timezone - Time offset for correct timezone + * + * @return string $result with timezone and offset + */ + function timezone () { + global $invert_time, $show_timezone_name; + + $diff_second = date('Z'); + if ($invert_time) { + $diff_second = - $diff_second; + } + if ($diff_second > 0) { + $sign = '+'; + } else { + $sign = '-'; + } + $diff_second = abs($diff_second); + $diff_hour = floor ($diff_second / 3600); + $diff_minute = floor (($diff_second-3600*$diff_hour) / 60); + + // If an administrator wants to add the timezone name to the + // end of the date header, they can set $show_timezone_name + // to boolean TRUE in config/config_local.php, but that is + // NOT RFC-822 compliant (see section 5.1). Moreover, some + // Windows users reported that strftime('%Z') was returning + // the full zone name (not the abbreviation) which in some + // cases included 8-bit characters (not allowed as is in headers). + // The PHP manual actually does NOT promise what %Z will return + // for strftime!: "The time zone offset/abbreviation option NOT + // given by %z (depends on operating system)" + // + if ($show_timezone_name) { + $zonename = '('.strftime('%Z').')'; + $result = sprintf ("%s%02d%02d %s", $sign, $diff_hour, $diff_minute, $zonename); + } else { + $result = sprintf ("%s%02d%02d", $sign, $diff_hour, $diff_minute); + } + return ($result); + } + + /** + * function calculate_references - calculate correct References string + * Adds the current message ID, and makes sure it doesn't grow forever, + * to that extent it drops message-ID's in a smart way until the string + * length is under the recommended value of 1000 ("References: <986>\r\n"). + * It always keeps the first and the last three ID's. + * + * @param Rfc822Header $hdr message header to calculate from + * + * @return string $refer concatenated and trimmed References string + */ + function calculate_references($hdr) { + $aReferences = preg_split('/\s+/', $hdr->references); + $message_id = $hdr->message_id; + $in_reply_to = $hdr->in_reply_to; + + // if References already exists, add the current message ID at the end. + // no References exists; if we know a IRT, add that aswell + if (count($aReferences) == 0 && $in_reply_to) { + $aReferences[] = $in_reply_to; + } + $aReferences[] = $message_id; + + // sanitize the array: trim whitespace, remove dupes + array_walk($aReferences, 'sq_trim_value'); + $aReferences = array_unique($aReferences); + + while ( count($aReferences) > 4 && strlen(implode(' ', $aReferences)) >= 986 ) { + $aReferences = array_merge(array_slice($aReferences,0,1),array_slice($aReferences,2)); + } + return implode(' ', $aReferences); + } + + /** + * Converts ip address to hexadecimal string + * + * Function is used to convert ipv4 and ipv6 addresses to hex strings. + * It removes all delimiter symbols from ip addresses, converts decimal + * ipv4 numbers to hex and pads strings in order to present full length + * address. ipv4 addresses are represented as 8 byte strings, ipv6 addresses + * are represented as 32 byte string. + * + * If function fails to detect address format, it returns unprocessed string. + * @param string $string ip address string + * @return string processed ip address string + * @since 1.5.1 and 1.4.5 + */ + function ip2hex($string) { + if (preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$string,$match)) { + // ipv4 address + $ret = str_pad(dechex($match[1]),2,'0',STR_PAD_LEFT) + . str_pad(dechex($match[2]),2,'0',STR_PAD_LEFT) + . str_pad(dechex($match[3]),2,'0',STR_PAD_LEFT) + . str_pad(dechex($match[4]),2,'0',STR_PAD_LEFT); + } elseif (preg_match("/^([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)\:([0-9a-h]+)$/i",$string,$match)) { + // full ipv6 address + $ret = str_pad($match[1],4,'0',STR_PAD_LEFT) + . str_pad($match[2],4,'0',STR_PAD_LEFT) + . str_pad($match[3],4,'0',STR_PAD_LEFT) + . str_pad($match[4],4,'0',STR_PAD_LEFT) + . str_pad($match[5],4,'0',STR_PAD_LEFT) + . str_pad($match[6],4,'0',STR_PAD_LEFT) + . str_pad($match[7],4,'0',STR_PAD_LEFT) + . str_pad($match[8],4,'0',STR_PAD_LEFT); + } elseif (preg_match("/^\:\:([0-9a-h\:]+)$/i",$string,$match)) { + // short ipv6 with all starting symbols nulled + $aAddr=explode(':',$match[1]); + $ret=''; + foreach ($aAddr as $addr) { + $ret.=str_pad($addr,4,'0',STR_PAD_LEFT); + } + $ret=str_pad($ret,32,'0',STR_PAD_LEFT); + } elseif (preg_match("/^([0-9a-h\:]+)::([0-9a-h\:]+)$/i",$string,$match)) { + // short ipv6 with middle part nulled + $aStart=explode(':',$match[1]); + $sStart=''; + foreach($aStart as $addr) { + $sStart.=str_pad($addr,4,'0',STR_PAD_LEFT); + } + $aEnd = explode(':',$match[2]); + $sEnd=''; + foreach($aEnd as $addr) { + $sEnd.=str_pad($addr,4,'0',STR_PAD_LEFT); + } + $ret = $sStart + . str_pad('',(32 - strlen($sStart . $sEnd)),'0',STR_PAD_LEFT) + . $sEnd; + } else { + // unknown addressing + $ret = $string; + } + return $ret; + } +} + diff --git a/ehcp/webmail2/class/deliver/Deliver_IMAP.class.php b/ehcp/webmail2/class/deliver/Deliver_IMAP.class.php new file mode 100644 index 0000000..e09b9c3 --- /dev/null +++ b/ehcp/webmail2/class/deliver/Deliver_IMAP.class.php @@ -0,0 +1,83 @@ +writeBody($message, 0, $final_length, $boundary); + + + // now if we have a real live stream, send the message + // + if ($stream) { + sqimap_append ($stream, $folder, $final_length); + + $this->preWriteToStream($header); + $this->writeToStream($stream, $header); + $this->writeBody($message, $stream, $raw_length, $boundary); + + sqimap_append_done ($stream, $folder); + } + + } + + + /* to do: finishing the imap-class so the initStream function can call the + imap-class */ +} + diff --git a/ehcp/webmail2/class/deliver/Deliver_SMTP.class.php b/ehcp/webmail2/class/deliver/Deliver_SMTP.class.php new file mode 100644 index 0000000..23d3143 --- /dev/null +++ b/ehcp/webmail2/class/deliver/Deliver_SMTP.class.php @@ -0,0 +1,370 @@ +authPop($pop_host, '', $user, $pass); + } + + $rfc822_header = $message->rfc822_header; + + $from = $rfc822_header->from[0]; + $to = $rfc822_header->to; + $cc = $rfc822_header->cc; + $bcc = $rfc822_header->bcc; + $content_type = $rfc822_header->content_type; + + // MAIL FROM: MUST be empty in cae of MDN (RFC2298) + if ($content_type->type0 == 'multipart' && + $content_type->type1 == 'report' && + isset($content_type->properties['report-type']) && + $content_type->properties['report-type']=='disposition-notification') { + // reinitialize the from object because otherwise the from header somehow + // is affected. This $from var is used for smtp command MAIL FROM which + // is not the same as what we put in the rfc822 header. + $from = new AddressStructure(); + $from->host = ''; + $from->mailbox = ''; + } + + if (($use_smtp_tls == true) and (check_php_version(4,3)) and (extension_loaded('openssl'))) { + $stream = @fsockopen('tls://' . $host, $port, $errorNumber, $errorString); + } else { + $stream = @fsockopen($host, $port, $errorNumber, $errorString); + } + + if (!$stream) { + $this->dlv_msg = $errorString; + $this->dlv_ret_nr = $errorNumber; + $this->dlv_server_msg = _("Can't open SMTP stream."); + return(0); + } + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + + /* + * If $_SERVER['HTTP_HOST'] is set, use that in our HELO to the SMTP + * server. This should fix the DNS issues some people have had + */ + if (sqgetGlobalVar('HTTP_HOST', $HTTP_HOST, SQ_SERVER)) { // HTTP_HOST is set + // optionally trim off port number + if($p = strrpos($HTTP_HOST, ':')) { + $HTTP_HOST = substr($HTTP_HOST, 0, $p); + } + $helohost = $HTTP_HOST; + } else { // For some reason, HTTP_HOST is not set - revert to old behavior + $helohost = $domain; + } + + // if the host is an IPv4 address, enclose it in brackets + // + if (preg_match('/^\d+\.\d+\.\d+\.\d+$/', $helohost)) + $helohost = '[' . $helohost . ']'; + + /* Lets introduce ourselves */ + fputs($stream, "EHLO $helohost\r\n"); + $tmp = fgets($stream,1024); + if ($this->errorCheck($tmp,$stream)) { + // fall back to HELO if EHLO is not supported (error 5xx) + if ($this->dlv_ret_nr{0} == '5') { + fputs($stream, "HELO $helohost\r\n"); + $tmp = fgets($stream,1024); + if ($this->errorCheck($tmp,$stream)) { + return(0); + } + } else { + return(0); + } + } + + // Try authentication by a plugin + $smtp_auth_args = array( + 'auth_mech' => $smtp_auth_mech, + 'user' => $user, + 'pass' => $pass, + 'host' => $host, + 'port' => $port, + 'stream' => $stream, + ); + if (boolean_hook_function('smtp_auth', $smtp_auth_args, 1)) { + // authentication succeeded + } else if (( $smtp_auth_mech == 'cram-md5') or ( $smtp_auth_mech == 'digest-md5' )) { + // Doing some form of non-plain auth + if ($smtp_auth_mech == 'cram-md5') { + fputs($stream, "AUTH CRAM-MD5\r\n"); + } elseif ($smtp_auth_mech == 'digest-md5') { + fputs($stream, "AUTH DIGEST-MD5\r\n"); + } + + $tmp = fgets($stream,1024); + + if ($this->errorCheck($tmp,$stream)) { + return(0); + } + + // At this point, $tmp should hold "334 " + $chall = substr($tmp,4); + // Depending on mechanism, generate response string + if ($smtp_auth_mech == 'cram-md5') { + $response = cram_md5_response($user,$pass,$chall); + } elseif ($smtp_auth_mech == 'digest-md5') { + $response = digest_md5_response($user,$pass,$chall,'smtp',$host); + } + fputs($stream, $response); + + // Let's see what the server had to say about that + $tmp = fgets($stream,1024); + if ($this->errorCheck($tmp,$stream)) { + return(0); + } + + // CRAM-MD5 is done at this point. If DIGEST-MD5, there's a bit more to go + if ($smtp_auth_mech == 'digest-md5') { + // $tmp contains rspauth, but I don't store that yet. (No need yet) + fputs($stream,"\r\n"); + $tmp = fgets($stream,1024); + + if ($this->errorCheck($tmp,$stream)) { + return(0); + } + } + // CRAM-MD5 and DIGEST-MD5 code ends here + } elseif ($smtp_auth_mech == 'none') { + // No auth at all, just send helo and then send the mail + // We already said hi earlier, nothing more is needed. + } elseif ($smtp_auth_mech == 'login') { + // The LOGIN method + fputs($stream, "AUTH LOGIN\r\n"); + $tmp = fgets($stream, 1024); + + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + fputs($stream, base64_encode ($user) . "\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + + fputs($stream, base64_encode($pass) . "\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + } elseif ($smtp_auth_mech == "plain") { + /* SASL Plain */ + $auth = base64_encode("$user\0$user\0$pass"); + + $query = "AUTH PLAIN\r\n"; + fputs($stream, $query); + $read=fgets($stream, 1024); + + if (substr($read,0,3) == '334') { // OK so far.. + fputs($stream, "$auth\r\n"); + $read = fgets($stream, 1024); + } + + $results=explode(" ",$read,3); + $response=$results[1]; + $message=$results[2]; + } else { + /* Right here, they've reached an unsupported auth mechanism. + This is the ugliest hack I've ever done, but it'll do till I can fix + things up better tomorrow. So tired... */ + if ($this->errorCheck("535 Unable to use this auth type",$stream)) { + return(0); + } + } + + /* Ok, who is sending the message? */ + $fromaddress = (strlen($from->mailbox) && $from->host) ? + $from->mailbox.'@'.$from->host : ''; + fputs($stream, 'MAIL FROM:<'.$fromaddress.">\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + + /* send who the recipients are */ + for ($i = 0, $cnt = count($to); $i < $cnt; $i++) { + if (!$to[$i]->host) $to[$i]->host = $domain; + if (strlen($to[$i]->mailbox)) { + fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host.">\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + } + } + + for ($i = 0, $cnt = count($cc); $i < $cnt; $i++) { + if (!$cc[$i]->host) $cc[$i]->host = $domain; + if (strlen($cc[$i]->mailbox)) { + fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + } + } + + for ($i = 0, $cnt = count($bcc); $i < $cnt; $i++) { + if (!$bcc[$i]->host) $bcc[$i]->host = $domain; + if (strlen($bcc[$i]->mailbox)) { + fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host.">\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + } + } + /* Lets start sending the actual message */ + fputs($stream, "DATA\r\n"); + $tmp = fgets($stream, 1024); + if ($this->errorCheck($tmp, $stream)) { + return(0); + } + return $stream; + } + + function finalizeStream($stream) { + fputs($stream, "\r\n.\r\n"); /* end the DATA part */ + $tmp = fgets($stream, 1024); + $this->errorCheck($tmp, $stream); + if ($this->dlv_ret_nr != 250) { + return(0); + } + fputs($stream, "QUIT\r\n"); /* log off */ + fclose($stream); + return true; + } + + /* check if an SMTP reply is an error and set an error message) */ + function errorCheck($line, $smtpConnection) { + + $err_num = substr($line, 0, 3); + $this->dlv_ret_nr = $err_num; + $server_msg = substr($line, 4); + + while(substr($line, 0, 4) == ($err_num.'-')) { + $line = fgets($smtpConnection, 1024); + $server_msg .= substr($line, 4); + } + + if ( ((int) $err_num{0}) < 4) { + return false; + } + + switch ($err_num) { + case '421': $message = _("Service not available, closing channel"); + break; + case '432': $message = _("A password transition is needed"); + break; + case '450': $message = _("Requested mail action not taken: mailbox unavailable"); + break; + case '451': $message = _("Requested action aborted: error in processing"); + break; + case '452': $message = _("Requested action not taken: insufficient system storage"); + break; + case '454': $message = _("Temporary authentication failure"); + break; + case '500': $message = _("Syntax error; command not recognized"); + break; + case '501': $message = _("Syntax error in parameters or arguments"); + break; + case '502': $message = _("Command not implemented"); + break; + case '503': $message = _("Bad sequence of commands"); + break; + case '504': $message = _("Command parameter not implemented"); + break; + case '530': $message = _("Authentication required"); + break; + case '534': $message = _("Authentication mechanism is too weak"); + break; + case '535': $message = _("Authentication failed"); + break; + case '538': $message = _("Encryption required for requested authentication mechanism"); + break; + case '550': $message = _("Requested action not taken: mailbox unavailable"); + break; + case '551': $message = _("User not local; please try forwarding"); + break; + case '552': $message = _("Requested mail action aborted: exceeding storage allocation"); + break; + case '553': $message = _("Requested action not taken: mailbox name not allowed"); + break; + case '554': $message = _("Transaction failed"); + break; + default: $message = _("Unknown response"); + break; + } + + $this->dlv_msg = $message; + $this->dlv_server_msg = nl2br(htmlspecialchars($server_msg)); + + return true; + } + + function authPop($pop_server='', $pop_port='', $user, $pass) { + if (!$pop_port) { + $pop_port = 110; + } + if (!$pop_server) { + $pop_server = 'localhost'; + } + $popConnection = @fsockopen($pop_server, $pop_port, $err_no, $err_str); + if (!$popConnection) { + error_log("Error connecting to POP Server ($pop_server:$pop_port)" + . " $err_no : $err_str"); + } else { + $tmp = fgets($popConnection, 1024); /* banner */ + if (substr($tmp, 0, 3) != '+OK') { + return(0); + } + fputs($popConnection, "USER $user\r\n"); + $tmp = fgets($popConnection, 1024); + if (substr($tmp, 0, 3) != '+OK') { + return(0); + } + fputs($popConnection, 'PASS ' . $pass . "\r\n"); + $tmp = fgets($popConnection, 1024); + if (substr($tmp, 0, 3) != '+OK') { + return(0); + } + fputs($popConnection, "QUIT\r\n"); /* log off */ + fclose($popConnection); + } + } +} + diff --git a/ehcp/webmail2/class/deliver/Deliver_SendMail.class.php b/ehcp/webmail2/class/deliver/Deliver_SendMail.class.php new file mode 100644 index 0000000..66b5240 --- /dev/null +++ b/ehcp/webmail2/class/deliver/Deliver_SendMail.class.php @@ -0,0 +1,158 @@ +sendmail_args = $params['sendmail_args']; + } + } + } + + /** + * function preWriteToStream + * + * Sendmail needs LF's as line endings instead of CRLF. + * This function translates the line endings to LF and should be called + * before each line is written to the stream. + * + * @param string $s Line to process + * @return void + * @access private + */ + function preWriteToStream(&$s) { + if ($s) { + $s = str_replace("\r\n", "\n", $s); + } + } + + /** + * function initStream + * + * Initialise the sendmail connection. + * + * @param Message $message Message object containing the from address + * @param string $sendmail_path Location of sendmail binary + * @return void + * @access public + */ + function initStream($message, $sendmail_path) { + $rfc822_header = $message->rfc822_header; + $from = $rfc822_header->from[0]; + $envelopefrom = trim($from->mailbox.'@'.$from->host); + $envelopefrom = str_replace(array("\0","\n"),array('',''),$envelopefrom); + // save executed command for future reference + $this->sendmail_command = "$sendmail_path $this->sendmail_args -f$envelopefrom"; + // open process handle for writing + $stream = popen(escapeshellcmd($this->sendmail_command), "w"); + return $stream; + } + + /** + * function finalizeStream + * + * Close the stream. + * + * @param resource $stream + * @return boolean + * @access public + */ + function finalizeStream($stream) { + $ret = true; + $status = pclose($stream); + // check pclose() status. + if ($status!=0) { + $ret = false; + $this->dlv_msg=_("Email delivery error"); + $this->dlv_ret_nr=$status; + // we can get better error messsage only if we switch to php 4.3+ and proc_open(). + $this->dlv_server_msg=sprintf(_("Can't execute command '%s'."),$this->sendmail_command); + } + return $ret; + } + + /** + * function getBcc + * + * In case of sendmail, the rfc822header must contain the bcc header. + * + * @return boolean true if rfc822header should include the bcc header. + * @access private + */ + function getBcc() { + return true; + } + + /** + * function clean_crlf + * + * Cleans each line to only end in a LF + * Returns the length of the line including a CR, + * so that length is correct when the message is saved to imap + * Implemented to fix sendmail->postfix rejection of messages with + * attachments because of stray LF's + * + * @param string $s string to strip of CR's + * @return integer length of string including a CR for each LF + * @access private + */ + function clean_crlf(&$s) { + $s = str_replace("\r\n", "\n", $s); + $s = str_replace("\r", "\n", $s); + $s2 = str_replace("\n", "\r\n", $s); + return strlen($s2); + } + + +} diff --git a/ehcp/webmail2/class/deliver/index.php b/ehcp/webmail2/class/deliver/index.php new file mode 100644 index 0000000..3dcaf1a --- /dev/null +++ b/ehcp/webmail2/class/deliver/index.php @@ -0,0 +1,17 @@ +tag = $tag; + $this->text = $text; + $this->style = $style; + $this->class = $class; + $this->id = $id; + $this->xtr_prop = $xtr_prop; + $this->javascript = $javascript; + } + + function htmlAdd($el, $last=true) { + if ($last) { + $this->html_el[] = $el; + } else { + $new_html_el = array(); + $new_html_el[] = $el; + foreach ($this->html_el as $html_el) { + $new_html_el[] = $html_el; + } + $this->html_el = $new_html_el; + } + } + + function AddChild($tag='', $text='', $style ='', $class='', $id='', + $xtr_prop = '', $javascript = '') { + $el = new html ($tag, $text, $style, $class, $id, $xtr_prop, $javascript); + $this->htmlAdd($el); + } + + function FindId($id) { + $cnt = count($this->html_el); + $el = false; + if ($cnt) { + for ($i = 0 ; $i < $cnt; $i++) { + if ($this->html_el[$i]->id == $id) { + $ret = $this->html_el[$i]; + return $ret; + } else if (count($this->html_el[$i]->html_el)) { + $el = $this->html_el[$i]->FindId($id); + } + if ($el) return $el; + } + } + return $el; + } + + function InsToId( $el, $id, $last=true) { + $html_el = &$this->FindId($id); + if ($html_el) { + $html_el->htmlAdd($el, $last); + } + } + + function scriptAdd($script) { + $s = "\n".''."\n"; + $el = new html ('script',$s,'','','',array('language' => 'JavaScript', + 'type' => 'text/javascript')); + $this->htmlAdd($el); + } + + function echoHtml( $usecss=false, $indent='x') { + if ($indent == 'x') { + $indent = ''; $indentmore = ''; + } else { + $indentmore = $indent . ' '; + } + $tag = $this->tag; + $text = $this->text; + $class = $this->class; + $id = $this->id; + $style = $this->style; + $javascript = $this->javascript; + $xtr_prop = $this->xtr_prop; + if ($xtr_prop) { + $prop = ''; + foreach ($xtr_prop as $k => $v) { + if (is_string($k)) { + $prop.=' '.$k.'="'.$v.'"'; + } else { + $prop.=' '.$v; + } + } + } + if ($javascript) { + $js = ''; + foreach ($javascript as $k => $v) { /* here we put the onclick, onmouseover etc entries */ + $js.=' '.$k.'="'.$v.'";'; + } + } + if ($tag) { + echo $indent . '<' . $tag; + } else { + echo $indent; + } + if ($class) { + echo ' class="'.$class.'"'; + } + if ($id) { + echo ' id="'.$id.'"'; + } + if ($xtr_prop) { + echo ' '.$prop; + } + if ($style && !$usecss && !is_array($style)) { + /* last premisse is to prevent 'style="Array"' in the output */ + echo ' style="'.$style.'"'; + } + if ($javascript) { + echo ' '.$js; + } + if ($tag) echo '>'; + + $openstyles = ''; + $closestyles = ''; + if ($style && !$usecss) { + foreach ($style as $k => $v) { + $openstyles .= '<'.$k.'>'; + } + foreach ($style as $k => $v) { + /* if value of key value = true close the tag */ + if ($v) { + $closestyles .= ''; + } + } + } + echo $openstyles; + + if ($text) { + echo $text; + } + + $cnt = count($this->html_el); + if ($cnt) { + echo "\n"; + for($i = 0;$i<$cnt;$i++) { + $el = $this->html_el[$i]; + $el->echoHtml($usecss,$indentmore); + } + echo $indent; + } + echo $closestyles; + if ($tag) { + echo ''."\n"; + } else { + echo "\n"; + } + } +} + diff --git a/ehcp/webmail2/class/index.php b/ehcp/webmail2/class/index.php new file mode 100644 index 0000000..3dcaf1a --- /dev/null +++ b/ehcp/webmail2/class/index.php @@ -0,0 +1,17 @@ +host ? $this->mailbox.'@'.$this->host + : $this->mailbox); + $personal = trim($this->personal); + $is_encoded = false; + // FIXME: I don't think the U modifier below does anything at all + if (preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',$personal,$reg)) { + $is_encoded = true; + } + if ($personal) { + if ($encoded && !$is_encoded) { + $personal_encoded = encodeHeader('"' . $personal . '"'); + if ($personal !== $personal_encoded) { + $personal = $personal_encoded; + } else { + //FIXME: this probably adds quotes around an encoded string which itself is already quoted + $personal = '"'.$this->personal.'"'; + } + } else { + if (!$is_encoded || $unconditionally_quote) { + $personal = '"'.$this->personal.'"'; + } + } + $addr = ($email ? $personal . ' <' .$email.'>' + : $this->personal); + $best_dpl = $this->personal; + } else { + $addr = $email; + $best_dpl = $email; + } + $result = ($full ? $addr : $best_dpl); + } + return $result; + } + + /** + * Shorter version of getAddress() function + * Returns full encoded address. + * @param boolean $unconditionally_quote (since 1.4.21) when TRUE, always quote the personal part, whether or not it is encoded, otherwise quoting is only added if the personal part is not encoded + * @return string + * @since 1.4.0 + */ + function getEncodedAddress($unconditionally_quote=FALSE) { + return $this->getAddress(true, true, $unconditionally_quote); + } +} + diff --git a/ehcp/webmail2/class/mime/ContentType.class.php b/ehcp/webmail2/class/mime/ContentType.class.php new file mode 100644 index 0000000..c84b1d2 --- /dev/null +++ b/ehcp/webmail2/class/mime/ContentType.class.php @@ -0,0 +1,60 @@ + 0) { + $this->type0 = substr($type, 0, $pos); + $this->type1 = substr($type, $pos+1); + } else { + $this->type0 = $type; + } + $this->properties = array(); + } +} + diff --git a/ehcp/webmail2/class/mime/Disposition.class.php b/ehcp/webmail2/class/mime/Disposition.class.php new file mode 100644 index 0000000..c85c3a4 --- /dev/null +++ b/ehcp/webmail2/class/mime/Disposition.class.php @@ -0,0 +1,48 @@ +name = $name; + $this->properties = array(); + } + + /** + * Returns value of content disposition property + * @param string $par content disposition property name + * @return string + * @since 1.3.1 + */ + function getProperty($par) { + $value = strtolower($par); + if (isset($this->properties[$par])) { + return $this->properties[$par]; + } + return ''; + } +} + diff --git a/ehcp/webmail2/class/mime/Language.class.php b/ehcp/webmail2/class/mime/Language.class.php new file mode 100644 index 0000000..9dc7478 --- /dev/null +++ b/ehcp/webmail2/class/mime/Language.class.php @@ -0,0 +1,39 @@ +name = $name; + /** + * Language properties + * @var array + */ + $this->properties = array(); + } +} + diff --git a/ehcp/webmail2/class/mime/Message.class.php b/ehcp/webmail2/class/mime/Message.class.php new file mode 100644 index 0000000..925d4fe --- /dev/null +++ b/ehcp/webmail2/class/mime/Message.class.php @@ -0,0 +1,1127 @@ +entity_id= $ent; + } + + /** + * Add nested message part + * @param object $msg + */ + function addEntity ($msg) { + $this->entities[] = $msg; + } + + /** + * Get file name used for mime part + * @return string file name + * @since 1.3.2 + */ + function getFilename() { + $filename = ''; + $header = $this->header; + if (is_object($header->disposition)) { + $filename = $header->disposition->getProperty('filename'); + if (trim($filename) == '') { + $name = decodeHeader($header->disposition->getProperty('name')); + if (!trim($name)) { + $name = $header->getParameter('name'); + if(!trim($name)) { + if (!trim( $header->id )) { + $filename = 'untitled-[' . $this->entity_id . ']' . '.' . strtolower($header->type1); + } else { + $filename = 'cid: ' . $header->id . '.' . strtolower($header->type1); + } + } else { + $filename = $name; + } + } else { + $filename = $name; + } + } + } else { + $filename = $header->getParameter('filename'); + if (!trim($filename)) { + $filename = $header->getParameter('name'); + if (!trim($filename)) { + if (!trim( $header->id )) { + $filename = 'untitled-[' . $this->entity_id . ']' . '.' . strtolower($header->type1); + } else { + $filename = 'cid: ' . $header->id . '.' . strtolower($header->type1); + } + } + } + } + return $filename; + } + + /** + * Add header object to message object. + * WARNING: Unfinished code. Don't expect it to work in older sm versions. + * @param mixed $read array or string with message headers + * @todo FIXME: rfc822header->parseHeader() does not return rfc822header object + */ + function addRFC822Header($read) { + $header = new Rfc822Header(); + $this->rfc822_header = $header->parseHeader($read); + } + + /** + * @param string $ent + * @return mixed (object or string?) + */ + function getEntity($ent) { + $cur_ent = $this->entity_id; + $msg = $this; + if (($cur_ent == '') || ($cur_ent == '0')) { + $cur_ent_a = array(); + } else { + $cur_ent_a = explode('.', $this->entity_id); + } + $ent_a = explode('.', $ent); + + for ($i = 0,$entCount = count($ent_a) - 1; $i < $entCount; ++$i) { + if (isset($cur_ent_a[$i]) && ($cur_ent_a[$i] != $ent_a[$i])) { + $msg = $msg->parent; + $cur_ent_a = explode('.', $msg->entity_id); + --$i; + } else if (!isset($cur_ent_a[$i])) { + if (isset($msg->entities[($ent_a[$i]-1)])) { + $msg = $msg->entities[($ent_a[$i]-1)]; + } else { + $msg = $msg->entities[0]; + } + } + if (($msg->type0 == 'message') && ($msg->type1 == 'rfc822')) { + /*this is a header for a message/rfc822 entity */ + $msg = $msg->entities[0]; + } + } + + if (($msg->type0 == 'message') && ($msg->type1 == 'rfc822')) { + /*this is a header for a message/rfc822 entity */ + $msg = $msg->entities[0]; + } + + if (isset($msg->entities[($ent_a[$entCount])-1])) { + if (is_object($msg->entities[($ent_a[$entCount])-1])) { + $msg = $msg->entities[($ent_a[$entCount]-1)]; + } + } + + return $msg; + } + + /** + * Set message body + * @param string $s message body + */ + function setBody($s) { + $this->body_part = $s; + } + + /** + * Clean message object + */ + function clean_up() { + $msg = $this; + $msg->body_part = ''; + + foreach ($msg->entities as $m) { + $m->clean_up(); + } + } + + /** + * @return string + */ + function getMailbox() { + $msg = $this; + while (is_object($msg->parent)) { + $msg = $msg->parent; + } + return $msg->mailbox; + } + + /* + * Bodystructure parser, a recursive function for generating the + * entity-tree with all the mime-parts. + * + * It follows RFC2060 and stores all the described fields in the + * message object. + * + * Question/Bugs: + * + * Ask for me (Marc Groot Koerkamp, stekkel@users.sourceforge.net) + * @param string $read + * @param integer $i + * @param mixed $sub_msg + * @return object Message object + * @todo define argument and return types + */ + function parseStructure($read, &$i, $sub_msg = '') { + $msg = Message::parseBodyStructure($read, $i, $sub_msg); + if($msg) $msg->setEntIds($msg,false,0); + return $msg; + } + + /** + * @param object $msg + * @param mixed $init + * @param integer $i + * @todo document me + * @since 1.4.0 + */ + function setEntIds(&$msg,$init=false,$i=0) { + $iCnt = count($msg->entities); + if ($init !==false) { + $iEntSub = $i+1; + if ($msg->parent->type0 == 'message' && + $msg->parent->type1 == 'rfc822' && + $msg->type0 == 'multipart') { + $iEntSub = '0'; + } + if ($init) { + $msg->entity_id = "$init.$iEntSub"; + } else { + $msg->entity_id = $iEntSub; + } + } else if ($iCnt) { + $msg->entity_id='0'; + } else { + $msg->entity_id='1'; + } + for ($i=0;$i<$iCnt;++$i) { + $msg->entities[$i]->parent =& $msg; + if (strrchr($msg->entity_id, '.') != '.0') { + $msg->entities[$i]->setEntIds($msg->entities[$i],$msg->entity_id,$i); + } else { + $msg->entities[$i]->setEntIds($msg->entities[$i],$msg->parent->entity_id,$i); + } + } + } + + /** + * @param string $read + * @param integer $i + * @param mixed $sub_msg + * @return object Message object + * @todo document me + * @since 1.4.0 (code was part of parseStructure() in 1.3.x) + */ + function parseBodyStructure($read, &$i, $sub_msg = '') { + $arg_no = 0; + $arg_a = array(); + if ($sub_msg) { + $message = $sub_msg; + } else { + $message = new Message(); + } + + for ($cnt = strlen($read); $i < $cnt; ++$i) { + $char = strtoupper($read{$i}); + switch ($char) { + case '(': + switch($arg_no) { + case 0: + if (!isset($msg)) { + $msg = new Message(); + $hdr = new MessageHeader(); + $hdr->type0 = 'text'; + $hdr->type1 = 'plain'; + $hdr->encoding = '7bit'; + } else { + $msg->header->type0 = 'multipart'; + $msg->type0 = 'multipart'; + while ($read{$i} == '(') { + $msg->addEntity($msg->parseBodyStructure($read, $i, $msg)); + } + } + break; + case 1: + /* multipart properties */ + ++$i; + $arg_a[] = $msg->parseProperties($read, $i); + ++$arg_no; + break; + case 2: + if (isset($msg->type0) && ($msg->type0 == 'multipart')) { + ++$i; + $arg_a[] = $msg->parseDisposition($read, $i); + } else { /* properties */ + $arg_a[] = $msg->parseProperties($read, $i); + } + ++$arg_no; + break; + case 3: + if (isset($msg->type0) && ($msg->type0 == 'multipart')) { + ++$i; + $arg_a[]= $msg->parseLanguage($read, $i); + } + case 7: + if (($arg_a[0] == 'message') && ($arg_a[1] == 'rfc822')) { + $msg->header->type0 = $arg_a[0]; + $msg->header->type1 = $arg_a[1]; + $msg->type0 = $arg_a[0]; + $msg->type1 = $arg_a[1]; + $rfc822_hdr = new Rfc822Header(); + $msg->rfc822_header = $msg->parseEnvelope($read, $i, $rfc822_hdr); + while (($i < $cnt) && ($read{$i} != '(')) { + ++$i; + } + $msg->addEntity($msg->parseBodyStructure($read, $i,$msg)); + } + break; + case 8: + ++$i; + $arg_a[] = $msg->parseDisposition($read, $i); + ++$arg_no; + break; + case 9: + ++$i; + if (($arg_a[0] == 'text') || (($arg_a[0] == 'message') && ($arg_a[1] == 'rfc822'))) { + $arg_a[] = $msg->parseDisposition($read, $i); + } else { + $arg_a[] = $msg->parseLanguage($read, $i); + } + ++$arg_no; + break; + case 10: + if (($arg_a[0] == 'text') || (($arg_a[0] == 'message') && ($arg_a[1] == 'rfc822'))) { + ++$i; + $arg_a[] = $msg->parseLanguage($read, $i); + } else { + $i = $msg->parseParenthesis($read, $i); + $arg_a[] = ''; /* not yet described in rfc2060 */ + } + ++$arg_no; + break; + default: + /* unknown argument, skip this part */ + $i = $msg->parseParenthesis($read, $i); + $arg_a[] = ''; + ++$arg_no; + break; + } /* switch */ + break; + case '"': + /* inside an entity -> start processing */ + $arg_s = $msg->parseQuote($read, $i); + ++$arg_no; + if ($arg_no < 3) { + $arg_s = strtolower($arg_s); /* type0 and type1 */ + } + $arg_a[] = $arg_s; + break; + case 'n': + case 'N': + /* probably NIL argument */ + $tmpnil = strtoupper(substr($read, $i, 4)); + if ($tmpnil == 'NIL ' || $tmpnil == 'NIL)') { + $arg_a[] = ''; + ++$arg_no; + $i += 2; + } + break; + case '{': + /* process the literal value */ + $arg_a[] = $msg->parseLiteral($read, $i); + ++$arg_no; + break; + case '0': + case is_numeric($read{$i}): + /* process integers */ + if ($read{$i} == ' ') { break; } + ++$arg_no; + if (preg_match('/^([0-9]+).*/',substr($read,$i), $regs)) { + $i += strlen($regs[1])-1; + $arg_a[] = $regs[1]; + } else { + $arg_a[] = 0; + } + break; + case ')': + $multipart = (isset($msg->type0) && ($msg->type0 == 'multipart')); + if (!$multipart) { + $shifted_args = (($arg_a[0] == 'text') || (($arg_a[0] == 'message') && ($arg_a[1] == 'rfc822'))); + $hdr->type0 = $arg_a[0]; + $hdr->type1 = $arg_a[1]; + + $msg->type0 = $arg_a[0]; + $msg->type1 = $arg_a[1]; + $arr = $arg_a[2]; + if (is_array($arr)) { + $hdr->parameters = $arg_a[2]; + } + $hdr->id = str_replace('<', '', str_replace('>', '', $arg_a[3])); + $hdr->description = $arg_a[4]; + $hdr->encoding = strtolower($arg_a[5]); + $hdr->entity_id = $msg->entity_id; + $hdr->size = $arg_a[6]; + if ($shifted_args) { + $hdr->lines = $arg_a[7]; + $s = 1; + } else { + $s = 0; + } + $hdr->md5 = (isset($arg_a[7+$s]) ? $arg_a[7+$s] : $hdr->md5); + $hdr->disposition = (isset($arg_a[8+$s]) ? $arg_a[8+$s] : $hdr->disposition); + $hdr->language = (isset($arg_a[9+$s]) ? $arg_a[9+$s] : $hdr->language); + $msg->header = $hdr; + } else { + $hdr->type0 = 'multipart'; + $hdr->type1 = $arg_a[0]; + $msg->type0 = 'multipart'; + $msg->type1 = $arg_a[0]; + $hdr->parameters = (isset($arg_a[1]) ? $arg_a[1] : $hdr->parameters); + $hdr->disposition = (isset($arg_a[2]) ? $arg_a[2] : $hdr->disposition); + $hdr->language = (isset($arg_a[3]) ? $arg_a[3] : $hdr->language); + $msg->header = $hdr; + } + return $msg; + default: break; + } /* switch */ + } /* for */ + } /* parsestructure */ + + /** + * @param string $read + * @param integer $i + * @return array + */ + function parseProperties($read, &$i) { + $properties = array(); + $prop_name = ''; + + for (; $read{$i} != ')'; ++$i) { + $arg_s = ''; + if ($read{$i} == '"') { + $arg_s = $this->parseQuote($read, $i); + } else if ($read{$i} == '{') { + $arg_s = $this->parseLiteral($read, $i); + } + + if ($arg_s != '') { + if ($prop_name == '') { + $prop_name = strtolower($arg_s); + $properties[$prop_name] = ''; + } else if ($prop_name != '') { + $properties[$prop_name] = $arg_s; + $prop_name = ''; + } + } + } + return $properties; + } + + /** + * @param string $read + * @param integer $i + * @param object $hdr MessageHeader object + * @return object MessageHeader object + */ + function parseEnvelope($read, &$i, $hdr) { + $arg_no = 0; + $arg_a = array(); + ++$i; + for ($cnt = strlen($read); ($i < $cnt) && ($read{$i} != ')'); ++$i) { + $char = strtoupper($read{$i}); + switch ($char) { + case '"': + $arg_a[] = $this->parseQuote($read, $i); + ++$arg_no; + break; + case '{': + $arg_a[] = $this->parseLiteral($read, $i); + /* temp bugfix (SM 1.5 will have a working clean version) + too much work to implement that version right now */ +// --$i; + ++$arg_no; + break; + case 'N': + /* probably NIL argument */ + if (strtoupper(substr($read, $i, 3)) == 'NIL') { + $arg_a[] = ''; + ++$arg_no; + $i += 2; + } + break; + case '(': + /* Address structure (with group support) + * Note: Group support is useless on SMTP connections + * because the protocol doesn't support it + */ + $addr_a = array(); + $group = ''; + $a=0; + for (; $i < $cnt && $read{$i} != ')'; ++$i) { + if ($read{$i} == '(') { + $addr = $this->parseAddress($read, $i); + if (($addr->host == '') && ($addr->mailbox != '')) { + /* start of group */ + $group = $addr->mailbox; + $group_addr = $addr; + $j = $a; + } else if ($group && ($addr->host == '') && ($addr->mailbox == '')) { + /* end group */ + if ($a == ($j+1)) { /* no group members */ + $group_addr->group = $group; + $group_addr->mailbox = ''; + $group_addr->personal = "$group: Undisclosed recipients;"; + $addr_a[] = $group_addr; + $group =''; + } + } else { + $addr->group = $group; + $addr_a[] = $addr; + } + ++$a; + } + } + $arg_a[] = $addr_a; + break; + default: break; + } + } + + if (count($arg_a) > 9) { + $d = strtr($arg_a[0], array(' ' => ' ')); + $d_parts = explode(' ', $d); + if (!$arg_a[1]) $arg_a[1] = _("(no subject)"); + + $hdr->date = getTimeStamp($d_parts); /* argument 1: date */ + $hdr->date_unparsed = strtr($d,'<>',' '); /* original date */ + $hdr->subject = $arg_a[1]; /* argument 2: subject */ + $hdr->from = is_array($arg_a[2]) ? $arg_a[2][0] : ''; /* argument 3: from */ + $hdr->sender = is_array($arg_a[3]) ? $arg_a[3][0] : ''; /* argument 4: sender */ + $hdr->reply_to = is_array($arg_a[4]) ? $arg_a[4][0] : ''; /* argument 5: reply-to */ + $hdr->to = $arg_a[5]; /* argument 6: to */ + $hdr->cc = $arg_a[6]; /* argument 7: cc */ + $hdr->bcc = $arg_a[7]; /* argument 8: bcc */ + $hdr->in_reply_to = $arg_a[8]; /* argument 9: in-reply-to */ + $hdr->message_id = $arg_a[9]; /* argument 10: message-id */ + } + return $hdr; + } + + /** + * @param string $read + * @param integer $i + * @return string + * @todo document me + */ + function parseLiteral($read, &$i) { + $lit_cnt = ''; + ++$i; + $iPos = strpos($read,'}',$i); + if ($iPos) { + $lit_cnt = substr($read, $i, $iPos - $i); + $i += strlen($lit_cnt) + 3; /* skip } + \r + \n */ + /* Now read the literal */ + $s = ($lit_cnt ? substr($read,$i,$lit_cnt): ''); + $i += $lit_cnt; + /* temp bugfix (SM 1.5 will have a working clean version) + too much work to implement that version right now */ + --$i; + } else { /* should never happen */ + $i += 3; /* } + \r + \n */ + $s = ''; + } + return $s; + } + + /** + * function parseQuote + * + * This extract the string value from a quoted string. After the end-quote + * character is found it returns the string. The offset $i when calling + * this function points to the first double quote. At the end it points to + * The ending quote. This function takes care of escaped double quotes. + * "some \"string\"" + * ^ ^ + * initial $i end position $i + * + * @param string $read + * @param integer $i offset in $read + * @return string string inbetween the double quotes + * @author Marc Groot Koerkamp + */ + function parseQuote($read, &$i) { + $s = ''; + $iPos = ++$i; + $iPosStart = $iPos; + while (true) { + $iPos = strpos($read,'"',$iPos); + if (!$iPos) break; + if ($iPos && $read{$iPos -1} != '\\') { + $s = substr($read,$i,($iPos-$i)); + $i = $iPos; + break; + } else if ($iPos > 1 && $read{$iPos -1} == '\\' && $read{$iPos-2} == '\\') { + // This is an unique situation where the fast detection of the string + // fails. If the quote string ends with \\ then we need to iterate + // through the entire string to make sure we detect the unexcaped + // double quotes correctly. + $s = ''; + $bEscaped = false; + $k = 0; + for ($j=$iPosStart,$iCnt=strlen($read);$j<$iCnt;++$j) { + $cChar = $read{$j}; + switch ($cChar) { + case '\\': + $bEscaped = !$bEscaped; + $s .= $cChar; + break; + case '"': + if ($bEscaped) { + $s .= $cChar; + $bEscaped = false; + } else { + $i = $j; + break 3; + } + break; + default: + if ($bEscaped) { + $bEscaped = false; + } + $s .= $cChar; + break; + } + } + } + ++$iPos; + if ($iPos > strlen($read)) { + break; + } + } + return $s; + } + + /** + * @param string $read + * @param integer $i + * @return object AddressStructure object + */ + function parseAddress($read, &$i) { + $arg_a = array(); + for (; $read{$i} != ')'; ++$i) { + $char = strtoupper($read{$i}); + switch ($char) { + case '"': $arg_a[] = $this->parseQuote($read, $i); break; + case '{': $arg_a[] = $this->parseLiteral($read, $i); break; + case 'n': + case 'N': + if (strtoupper(substr($read, $i, 3)) == 'NIL') { + $arg_a[] = ''; + $i += 2; + } + break; + default: break; + } + } + + if (count($arg_a) == 4) { + $adr = new AddressStructure(); + $adr->personal = $arg_a[0]; + $adr->adl = $arg_a[1]; + $adr->mailbox = $arg_a[2]; + $adr->host = $arg_a[3]; + } else { + $adr = ''; + } + return $adr; + } + + /** + * @param string $read + * @param integer $i + * @param object Disposition object or empty string + */ + function parseDisposition($read, &$i) { + $arg_a = array(); + for (; $read{$i} != ')'; ++$i) { + switch ($read{$i}) { + case '"': $arg_a[] = $this->parseQuote($read, $i); break; + case '{': $arg_a[] = $this->parseLiteral($read, $i); break; + case '(': $arg_a[] = $this->parseProperties($read, $i); break; + default: break; + } + } + + if (isset($arg_a[0])) { + $disp = new Disposition($arg_a[0]); + if (isset($arg_a[1])) { + $disp->properties = $arg_a[1]; + } + } + return (is_object($disp) ? $disp : ''); + } + + /** + * @param string $read + * @param integer $i + * @return object Language object or empty string + */ + function parseLanguage($read, &$i) { + /* no idea how to process this one without examples */ + $arg_a = array(); + + for (; $read{$i} != ')'; ++$i) { + switch ($read{$i}) { + case '"': $arg_a[] = $this->parseQuote($read, $i); break; + case '{': $arg_a[] = $this->parseLiteral($read, $i); break; + case '(': $arg_a[] = $this->parseProperties($read, $i); break; + default: break; + } + } + + if (isset($arg_a[0])) { + $lang = new Language($arg_a[0]); + if (isset($arg_a[1])) { + $lang->properties = $arg_a[1]; + } + } + return (is_object($lang) ? $lang : ''); + } + + /** + * Parse message text enclosed in parenthesis + * @param string $read + * @param integer $i + * @return integer + */ + function parseParenthesis($read, $i) { + for ($i++; $read{$i} != ')'; ++$i) { + switch ($read{$i}) { + case '"': $this->parseQuote($read, $i); break; + case '{': $this->parseLiteral($read, $i); break; + case '(': $this->parseProperties($read, $i); break; + default: break; + } + } + return $i; + } + + /** + * Function to fill the message structure in case the + * bodystructure is not available + * NOT FINISHED YET + * @param string $read + * @param string $type0 message part type + * @param string $type1 message part subtype + * @return string (only when type0 is not message or multipart) + */ + function parseMessage($read, $type0, $type1) { + switch ($type0) { + case 'message': + $rfc822_header = true; + $mime_header = false; + break; + case 'multipart': + $rfc822_header = false; + $mime_header = true; + break; + default: return $read; + } + + for ($i = 1; $i < $count; ++$i) { + $line = trim($body[$i]); + if (($mime_header || $rfc822_header) && + (preg_match("/^.*boundary=\"?(.+(?=\")|.+).*/i", $line, $reg))) { + $bnd = $reg[1]; + $bndreg = $bnd; + $bndreg = str_replace("\\", "\\\\", $bndreg); + $bndreg = str_replace("?", "\\?", $bndreg); + $bndreg = str_replace("+", "\\+", $bndreg); + $bndreg = str_replace(".", "\\.", $bndreg); + $bndreg = str_replace("/", "\\/", $bndreg); + $bndreg = str_replace("-", "\\-", $bndreg); + $bndreg = str_replace("(", "\\(", $bndreg); + $bndreg = str_replace(")", "\\)", $bndreg); + } else if ($rfc822_header && $line == '') { + $rfc822_header = false; + if ($msg->type0 == 'multipart') { + $mime_header = true; + } + } + + if ((($line{0} == '-') || $rfc822_header) && isset($boundaries[0])) { + $cnt = count($boundaries)-1; + $bnd = $boundaries[$cnt]['bnd']; + $bndreg = $boundaries[$cnt]['bndreg']; + + $regstr = '/^--'."($bndreg)".".*".'/'; + if (preg_match($regstr, $line, $reg)) { + $bndlen = strlen($reg[1]); + $bndend = false; + if (strlen($line) > ($bndlen + 3)) { + if (($line{$bndlen+2} == '-') && ($line{$bndlen+3} == '-')) { + $bndend = true; + } + } + if ($bndend) { + /* calc offset and return $msg */ + //$entStr = CalcEntity("$entStr", -1); + array_pop($boundaries); + $mime_header = true; + $bnd_end = true; + } else { + $mime_header = true; + $bnd_end = false; + //$entStr = CalcEntity("$entStr", 0); + ++$content_indx; + } + } else { + if ($header) { } + } + } + } + } + + /** + * @param array $entity + * @param array $alt_order + * @param boolean $strict + * @return array + */ + function findDisplayEntity($entity = array(), $alt_order = array('text/plain', 'text/html'), $strict=false) { + $found = false; + if ($this->type0 == 'multipart') { + if($this->type1 == 'alternative') { + $msg = $this->findAlternativeEntity($alt_order); + if ( ! is_null($msg) ) { + if (count($msg->entities) == 0) { + $entity[] = $msg->entity_id; + } else { + $entity = $msg->findDisplayEntity($entity, $alt_order, $strict); + } + $found = true; + } + } else if ($this->type1 == 'related') { /* RFC 2387 */ + $msgs = $this->findRelatedEntity(); + foreach ($msgs as $msg) { + if (count($msg->entities) == 0) { + $entity[] = $msg->entity_id; + } else { + $entity = $msg->findDisplayEntity($entity, $alt_order, $strict); + } + } + if (count($msgs) > 0) { + $found = true; + } + } else { /* Treat as multipart/mixed */ + foreach ($this->entities as $ent) { + if(!(is_object($ent->header->disposition) && strtolower($ent->header->disposition->name) == 'attachment') && + (!isset($ent->header->parameters['filename'])) && + (!isset($ent->header->parameters['name'])) && + (($ent->type0 != 'message') && ($ent->type1 != 'rfc822'))) { + $entity = $ent->findDisplayEntity($entity, $alt_order, $strict); + $found = true; + } + } + } + } else { /* If not multipart, then just compare with each entry from $alt_order */ + $type = $this->type0.'/'.$this->type1; +// $alt_order[] = "message/rfc822"; + foreach ($alt_order as $alt) { + if( ($alt == $type) && isset($this->entity_id) ) { + if ((count($this->entities) == 0) && + (!isset($this->header->parameters['filename'])) && + (!isset($this->header->parameters['name'])) && + (isset($this->header->disposition) && is_object($this->header->disposition) && + strtolower($this->header->disposition->name) != 'attachment')) { + $entity[] = $this->entity_id; + $found = true; + } + } + } + } + if(!$found) { + foreach ($this->entities as $ent) { + if(!(is_object($ent->header->disposition) && strtolower($ent->header->disposition->name) == 'attachment') && + (($ent->type0 != 'message') && ($ent->type1 != 'rfc822'))) { + $entity = $ent->findDisplayEntity($entity, $alt_order, $strict); + $found = true; + } + } + } + if(!$strict && !$found) { + if (($this->type0 == 'text') && + in_array($this->type1, array('plain', 'html', 'message')) && + isset($this->entity_id)) { + if (count($this->entities) == 0) { + if (!is_object($this->header->disposition) || strtolower($this->header->disposition->name) != 'attachment') { + $entity[] = $this->entity_id; + } + } + } + } + return $entity; + } + + /** + * @param array $alt_order + * @return entity + */ + function findAlternativeEntity($alt_order) { + /* If we are dealing with alternative parts then we */ + /* choose the best viewable message supported by SM. */ + $best_view = 0; + $entity = null; + foreach($this->entities as $ent) { + $type = $ent->header->type0 . '/' . $ent->header->type1; + if ($type == 'multipart/related') { + $type = $ent->header->getParameter('type'); + // Mozilla bug. Mozilla does not provide the parameter type. + if (!$type) $type = 'text/html'; + } + $altCount = count($alt_order); + for ($j = $best_view; $j < $altCount; ++$j) { + if (($alt_order[$j] == $type) && ($j >= $best_view)) { + $best_view = $j; + $entity = $ent; + } + } + } + return $entity; + } + + /** + * @return array + */ + function findRelatedEntity() { + $msgs = array(); + $related_type = $this->header->getParameter('type'); + // Mozilla bug. Mozilla does not provide the parameter type. + if (!$related_type) $related_type = 'text/html'; + $entCount = count($this->entities); + for ($i = 0; $i < $entCount; ++$i) { + $type = $this->entities[$i]->header->type0.'/'.$this->entities[$i]->header->type1; + if ($related_type == $type) { + $msgs[] = $this->entities[$i]; + } + } + return $msgs; + } + + /** + * @param array $exclude_id + * @param array $result + * @return array + */ + function getAttachments($exclude_id=array(), $result = array()) { +/* + if (($this->type0 == 'message') && + ($this->type1 == 'rfc822') && + ($this->entity_id) ) { + $this = $this->entities[0]; + } +*/ + if (count($this->entities)) { + foreach ($this->entities as $entity) { + $exclude = false; + foreach ($exclude_id as $excl) { + if ($entity->entity_id === $excl) { + $exclude = true; + } + } + + if (!$exclude) { + if ($entity->type0 == 'multipart') { + $result = $entity->getAttachments($exclude_id, $result); + } else if ($entity->type0 != 'multipart') { + $result[] = $entity; + } + } + } + } else { + $exclude = false; + foreach ($exclude_id as $excl) { + $exclude = $exclude || ($this->entity_id == $excl); + } + + if (!$exclude) { + $result[] = $this; + } + } + return $result; + } + + /** + * Add attachment to message object + * @param string $type attachment type + * @param string $name attachment name + * @param string $location path to attachment + */ + function initAttachment($type, $name, $location) { + $attachment = new Message(); + $mime_header = new MessageHeader(); + $mime_header->setParameter('name', $name); + $pos = strpos($type, '/'); + if ($pos > 0) { + $mime_header->type0 = substr($type, 0, $pos); + $mime_header->type1 = substr($type, $pos+1); + } else { + $mime_header->type0 = $type; + } + $attachment->att_local_name = $location; + $disposition = new Disposition('attachment'); + $disposition->properties['filename'] = $name; + $mime_header->disposition = $disposition; + $attachment->mime_header = $mime_header; + $this->entities[]=$attachment; + } + + /** + * Delete all attachments from this object from disk. + * @since 1.4.6 + */ + function purgeAttachments() { + if ($this->att_local_name) { + global $username, $attachment_dir; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + if ( file_exists($hashed_attachment_dir . '/' . $this->att_local_name) ) { + unlink($hashed_attachment_dir . '/' . $this->att_local_name); + } + } + // recursively delete attachments from entities contained in this object + for ($i=0, $entCount=count($this->entities);$i< $entCount; ++$i) { + $this->entities[$i]->purgeAttachments(); + } + } +} + diff --git a/ehcp/webmail2/class/mime/MessageHeader.class.php b/ehcp/webmail2/class/mime/MessageHeader.class.php new file mode 100644 index 0000000..a3bb937 --- /dev/null +++ b/ehcp/webmail2/class/mime/MessageHeader.class.php @@ -0,0 +1,99 @@ +{$var} = $value; + } + + /** + * Gets parameter value from $parameters array + * @param string $p + * @return mixed + */ + function getParameter($p) { + $value = strtolower($p); + return (isset($this->parameters[$p]) ? $this->parameters[$p] : ''); + } + + /** + * Sets parameter value in $parameters array + * @param string $parameter + * @param mixed $value + */ + function setParameter($parameter, $value) { + $this->parameters[strtolower($parameter)] = $value; + } +} + diff --git a/ehcp/webmail2/class/mime/Rfc822Header.class.php b/ehcp/webmail2/class/mime/Rfc822Header.class.php new file mode 100644 index 0000000..a460ada --- /dev/null +++ b/ehcp/webmail2/class/mime/Rfc822Header.class.php @@ -0,0 +1,1001 @@ + 0) { + $field = substr($line, 0, $pos); + if (!strstr($field,' ')) { /* valid field */ + $value = trim(substr($line, $pos+1)); + $this->parseField($field, $value); + } + } + } + if (!is_object($this->content_type)) { + $this->parseContentType('text/plain; charset=us-ascii'); + } + } + + /** + * @param string $value + * @return string + */ + function stripComments($value) { + $result = ''; + $cnt = strlen($value); + for ($i = 0; $i < $cnt; ++$i) { + switch ($value{$i}) { + case '"': + $result .= '"'; + while ((++$i < $cnt) && ($value{$i} != '"')) { + if ($value{$i} == '\\') { + $result .= '\\'; + ++$i; + } + $result .= $value{$i}; + } + $result .= $value{$i}; + break; + case '(': + $depth = 1; + while (($depth > 0) && (++$i < $cnt)) { + switch($value{$i}) { + case '\\': + ++$i; + break; + case '(': + ++$depth; + break; + case ')': + --$depth; + break; + default: + break; + } + } + break; + default: + $result .= $value{$i}; + break; + } + } + return $result; + } + + /** + * Parse header field according to field type + * @param string $field field name + * @param string $value field value + */ + function parseField($field, $value) { + $field = strtolower($field); + switch($field) { + case 'date': + $value = $this->stripComments($value); + $d = strtr($value, array(' ' => ' ')); + $d = explode(' ', $d); + $this->date = getTimeStamp($d); + $this->date_unparsed = strtr($value,'<>',' '); + break; + case 'subject': + $this->subject = $value; + break; + case 'from': + $this->from = $this->parseAddress($value,true); + break; + case 'sender': + $this->sender = $this->parseAddress($value); + break; + case 'reply-to': + $this->reply_to = $this->parseAddress($value, true); + break; + case 'mail-followup-to': + $this->mail_followup_to = $this->parseAddress($value, true); + break; + case 'to': + $this->to = $this->parseAddress($value, true); + break; + case 'cc': + $this->cc = $this->parseAddress($value, true); + break; + case 'bcc': + $this->bcc = $this->parseAddress($value, true); + break; + case 'in-reply-to': + $this->in_reply_to = $value; + break; + case 'message-id': + $value = $this->stripComments($value); + $this->message_id = $value; + break; + case 'references': + $value = $this->stripComments($value); + $this->references = $value; + break; + case 'x-confirm-reading-to': + case 'return-receipt-to': + case 'disposition-notification-to': + $value = $this->stripComments($value); + $this->dnt = $this->parseAddress($value); + break; + case 'mime-version': + $value = $this->stripComments($value); + $value = str_replace(' ', '', $value); + $this->mime = ($value == '1.0' ? true : $this->mime); + break; + case 'content-type': + $value = $this->stripComments($value); + $this->parseContentType($value); + break; + case 'content-disposition': + $value = $this->stripComments($value); + $this->parseDisposition($value); + break; + case 'user-agent': + case 'x-mailer': + $this->xmailer = $value; + break; + case 'x-priority': + case 'importance': + case 'priority': + $this->priority = $this->parsePriority($value); + break; + case 'list-post': + $value = $this->stripComments($value); + $this->mlist('post', $value); + break; + case 'list-reply': + $value = $this->stripComments($value); + $this->mlist('reply', $value); + break; + case 'list-subscribe': + $value = $this->stripComments($value); + $this->mlist('subscribe', $value); + break; + case 'list-unsubscribe': + $value = $this->stripComments($value); + $this->mlist('unsubscribe', $value); + break; + case 'list-archive': + $value = $this->stripComments($value); + $this->mlist('archive', $value); + break; + case 'list-owner': + $value = $this->stripComments($value); + $this->mlist('owner', $value); + break; + case 'list-help': + $value = $this->stripComments($value); + $this->mlist('help', $value); + break; + case 'list-id': + $value = $this->stripComments($value); + $this->mlist('id', $value); + break; + case 'x-spam-status': + $this->x_spam_status = $this->parseSpamStatus($value); + break; + default: + break; + } + } + + /** + * @param string $address + * @return array + */ + function getAddressTokens($address) { + $aTokens = array(); + $aAddress = array(); + $aSpecials = array('(' ,'<' ,',' ,';' ,':'); + $aReplace = array(' (',' <',' ,',' ;',' :'); + $address = str_replace($aSpecials,$aReplace,$address); + $iCnt = strlen($address); + $i = 0; + while ($i < $iCnt) { + $cChar = $address{$i}; + switch($cChar) + { + case '<': + $iEnd = strpos($address,'>',$i+1); + if (!$iEnd) { + $sToken = substr($address,$i); + $i = $iCnt; + } else { + $sToken = substr($address,$i,$iEnd - $i +1); + $i = $iEnd; + } + $sToken = str_replace($aReplace, $aSpecials,$sToken); + if ($sToken) $aTokens[] = $sToken; + break; + case '"': + $iEnd = strpos($address,$cChar,$i+1); + if ($iEnd) { + // skip escaped quotes + $prev_char = $address{$iEnd-1}; + while ($prev_char === '\\' && substr($address,$iEnd-2,2) !== '\\\\') { + $iEnd = strpos($address,$cChar,$iEnd+1); + if ($iEnd) { + $prev_char = $address{$iEnd-1}; + } else { + $prev_char = false; + } + } + } + if (!$iEnd) { + $sToken = substr($address,$i); + $i = $iCnt; + } else { + // also remove the surrounding quotes + $sToken = substr($address,$i+1,$iEnd - $i -1); + $i = $iEnd; + } + $sToken = str_replace($aReplace, $aSpecials,$sToken); + if ($sToken) $aTokens[] = $sToken; + break; + case '(': + array_pop($aTokens); //remove inserted space + $iEnd = strpos($address,')',$i); + if (!$iEnd) { + $sToken = substr($address,$i); + $i = $iCnt; + } else { + $iDepth = 1; + $iComment = $i; + while (($iDepth > 0) && (++$iComment < $iCnt)) { + $cCharComment = $address{$iComment}; + switch($cCharComment) { + case '\\': + ++$iComment; + break; + case '(': + ++$iDepth; + break; + case ')': + --$iDepth; + break; + default: + break; + } + } + if ($iDepth == 0) { + $sToken = substr($address,$i,$iComment - $i +1); + $i = $iComment; + } else { + $sToken = substr($address,$i,$iEnd - $i + 1); + $i = $iEnd; + } + } + // check the next token in case comments appear in the middle of email addresses + $prevToken = end($aTokens); + if (!in_array($prevToken,$aSpecials,true)) { + if ($i+1personal = encodeHeader($sPersonal); + } else { + $oAddr->personal = $sPersonal; + } + // $oAddr->group = $sGroup; + $iPosAt = strpos($sEmail,'@'); + if ($iPosAt) { + $oAddr->mailbox = substr($sEmail, 0, $iPosAt); + $oAddr->host = substr($sEmail, $iPosAt+1); + } else { + $oAddr->mailbox = $sEmail; + $oAddr->host = false; + } + $sEmail = ''; + $aStack = $aComment = array(); + return $oAddr; + } + + /** + * recursive function for parsing address strings and storing them in an address stucture object. + * personal name: encoded: =?charset?Q|B?string?= + * quoted: "string" + * normal: string + * email : + * : mailbox@host + * This function is also used for validating addresses returned from compose + * That's also the reason that the function became a little bit huge + * @param string $address + * @param boolean $ar return array instead of only the first element + * @param array $addr_ar (obsolete) array with parsed addresses + * @param string $group (obsolete) + * @param string $host default domainname in case of addresses without a domainname + * @param string $lookup (since) callback function for lookup of address strings which are probably nicks (without @) + * @return mixed array with AddressStructure objects or only one address_structure object. + */ + function parseAddress($address,$ar=false,$aAddress=array(),$sGroup='',$sHost='',$lookup=false) { + $aTokens = $this->getAddressTokens($address); + $sPersonal = $sEmail = $sComment = $sGroup = ''; + $aStack = $aComment = array(); + foreach ($aTokens as $sToken) { + $cChar = $sToken{0}; + switch ($cChar) + { + case '=': + case '"': + case ' ': + $aStack[] = $sToken; + break; + case '(': + $aComment[] = substr($sToken,1,-1); + break; + case ';': + if ($sGroup) { + $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup); + $oAddr = end($aAddress); + if(!$oAddr || ((isset($oAddr)) && !strlen($oAddr->mailbox) && !$oAddr->personal)) { + $sEmail = $sGroup . ':;'; + } + $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup); + $sGroup = ''; + $aStack = $aComment = array(); + break; + } + case ',': + $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup); + break; + case ':': + $sGroup = trim(implode(' ',$aStack)); + $sGroup = preg_replace('/\s+/',' ',$sGroup); + $aStack = array(); + break; + case '<': + $sEmail = trim(substr($sToken,1,-1)); + break; + case '>': + /* skip */ + break; + default: $aStack[] = $sToken; break; + } + } + /* now do the action again for the last address */ + $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail); + /* try to lookup the addresses in case of invalid email addresses */ + $aProcessedAddress = array(); + foreach ($aAddress as $oAddr) { + $aAddrBookAddress = array(); + if (!$oAddr->host) { + $grouplookup = false; + if ($lookup) { + $aAddr = call_user_func_array($lookup,array($oAddr->mailbox)); + if (isset($aAddr['email'])) { + if (strpos($aAddr['email'],',')) { + $grouplookup = true; + $aAddrBookAddress = $this->parseAddress($aAddr['email'],true); + } else { + $iPosAt = strpos($aAddr['email'], '@'); + if ($iPosAt === FALSE) { + $oAddr->mailbox = $aAddr['email']; + $oAddr->host = FALSE; + } else { + $oAddr->mailbox = substr($aAddr['email'], 0, $iPosAt); + $oAddr->host = substr($aAddr['email'], $iPosAt+1); + } + if (isset($aAddr['name'])) { + $oAddr->personal = $aAddr['name']; + } else { + $oAddr->personal = encodeHeader($sPersonal); + } + } + } + } + if (!$grouplookup && !strlen($oAddr->mailbox)) { + $oAddr->mailbox = trim($sEmail); + if ($sHost && strlen($oAddr->mailbox)) { + $oAddr->host = $sHost; + } + } else if (!$grouplookup && !$oAddr->host) { + if ($sHost && strlen($oAddr->mailbox)) { + $oAddr->host = $sHost; + } + } + } + if (!$aAddrBookAddress && strlen($oAddr->mailbox)) { + $aProcessedAddress[] = $oAddr; + } else { + $aProcessedAddress = array_merge($aProcessedAddress,$aAddrBookAddress); + } + } + if ($ar) { + return $aProcessedAddress; + } else { + if (isset($aProcessedAddress[0])) + return $aProcessedAddress[0]; + else + return ''; + } + } + + /** + * Normalise the different Priority headers into a uniform value, + * namely that of the X-Priority header (1, 3, 5). Supports: + * Priority, X-Priority, Importance. + * X-MS-Mail-Priority is not parsed because it always coincides + * with one of the other headers. + * + * NOTE: this is actually a duplicate from the function in + * functions/imap_messages. I'm not sure if it's ok here to call + * that function? + * @param string $sValue literal priority name + * @return integer + */ + function parsePriority($sValue) { + // don't use function call inside array_shift. + $aValue = preg_split('/\s/',trim($sValue)); + $value = strtolower(array_shift($aValue)); + + if ( is_numeric($value) ) { + return $value; + } + if ( $value == 'urgent' || $value == 'high' ) { + return 1; + } elseif ( $value == 'non-urgent' || $value == 'low' ) { + return 5; + } + // default is normal priority + return 3; + } + + /** + * @param string $value content type header + */ + function parseContentType($value) { + $pos = strpos($value, ';'); + $props = ''; + if ($pos > 0) { + $type = trim(substr($value, 0, $pos)); + $props = trim(substr($value, $pos+1)); + } else { + $type = $value; + } + $content_type = new ContentType($type); + if ($props) { + $properties = $this->parseProperties($props); + if (!isset($properties['charset'])) { + $properties['charset'] = 'us-ascii'; + } + $content_type->properties = $this->parseProperties($props); + } + $this->content_type = $content_type; + } + + /** + * RFC2184 + * @param array $aParameters + * @return array + */ + function processParameters($aParameters) { + $aResults = array(); + $aCharset = array(); + // handle multiline parameters + foreach($aParameters as $key => $value) { + if ($iPos = strpos($key,'*')) { + $sKey = substr($key,0,$iPos); + if (!isset($aResults[$sKey])) { + $aResults[$sKey] = $value; + if (substr($key,-1) == '*') { // parameter contains language/charset info + $aCharset[] = $sKey; + } + } else { + $aResults[$sKey] .= $value; + } + } else { + $aResults[$key] = $value; + } + } + foreach ($aCharset as $key) { + $value = $aResults[$key]; + // extract the charset & language + $charset = substr($value,0,strpos($value,"'")); + $value = substr($value,strlen($charset)+1); + $language = substr($value,0,strpos($value,"'")); + $value = substr($value,strlen($charset)+1); + /* FIXME: What's the status of charset decode with language information ???? + * Maybe language information contains only ascii text and charset_decode() + * only runs htmlspecialchars() on it. If it contains 8bit information, you + * get html encoded text in charset used by selected translation. + */ + $value = charset_decode($charset,$value); + $aResults[$key] = $value; + } + return $aResults; + } + + /** + * @param string $value + * @return array + */ + function parseProperties($value) { + $propArray = explode(';', $value); + $propResultArray = array(); + foreach ($propArray as $prop) { + $prop = trim($prop); + $pos = strpos($prop, '='); + if ($pos > 0) { + $key = trim(substr($prop, 0, $pos)); + $val = trim(substr($prop, $pos+1)); + if (strlen($val) > 0 && $val{0} == '"') { + $val = substr($val, 1, -1); + } + $propResultArray[$key] = $val; + } + } + return $this->processParameters($propResultArray); + } + + /** + * Fills disposition object in rfc822Header object + * @param string $value + */ + function parseDisposition($value) { + $pos = strpos($value, ';'); + $props = ''; + if ($pos > 0) { + $name = trim(substr($value, 0, $pos)); + $props = trim(substr($value, $pos+1)); + } else { + $name = $value; + } + $props_a = $this->parseProperties($props); + $disp = new Disposition($name); + $disp->properties = $props_a; + $this->disposition = $disp; + } + + /** + * Fills mlist array keys in rfc822Header object + * @param string $field + * @param string $value + */ + function mlist($field, $value) { + $res_a = array(); + $value_a = explode(',', $value); + foreach ($value_a as $val) { + $val = trim($val); + if ($val{0} == '<') { + $val = substr($val, 1, -1); + } + if (substr($val, 0, 7) == 'mailto:') { + $res_a['mailto'] = substr($val, 7); + } else { + $res_a['href'] = $val; + } + } + $this->mlist[$field] = $res_a; + } + + /** + * Parses the X-Spam-Status header + * @param string $value + */ + function parseSpamStatus($value) { + // Header value looks like this: + // No, score=1.5 required=5.0 tests=MSGID_FROM_MTA_ID,NO_REAL_NAME,UPPERCASE_25_50 autolearn=disabled version=3.1.0-gr0 + + $spam_status = array(); + + if (preg_match ('/^(No|Yes),\s+score=(-?\d+\.\d+)\s+required=(-?\d+\.\d+)\s+tests=(.*?)\s+autolearn=(.*?)\s+version=(.+?)$/', $value, $matches)) { + // full header + $spam_status['bad_format'] = 0; + $spam_status['value'] = $matches[0]; + // is_spam + if (isset($matches[1]) + && strtolower($matches[1]) == 'yes') { + $spam_status['is_spam'] = true; + } else { + $spam_status['is_spam'] = false; + } + + // score + $spam_status['score'] = $matches[2]; + + // required + $spam_status['required'] = $matches[3]; + + // tests + $tests = array(); + $tests = explode(',', $matches[4]); + foreach ($tests as $test) { + $spam_status['tests'][] = trim($test); + } + + // autolearn + $spam_status['autolearn'] = $matches[5]; + + // version + $spam_status['version'] = $matches[6]; + } else { + $spam_status['bad_format'] = 1; + $spam_status['value'] = $value; + } + return $spam_status; + } + + /** + * function to get the address strings out of the header. + * example1: header->getAddr_s('to'). + * example2: header->getAddr_s(array('to', 'cc', 'bcc')) + * @param mixed $arr string or array of strings + * @param string $separator + * @param boolean $encoded (since 1.4.0) return encoded or plain text addresses + * @param boolean $unconditionally_quote (since 1.4.21/1.5.2) When TRUE, always + * quote the personal part, + * whether or not it is + * encoded, otherwise quoting + * is only added if the + * personal part is not encoded + * @return string + */ + function getAddr_s($arr, $separator = ',',$encoded=false,$unconditionally_quote=FALSE) { + $s = ''; + + if (is_array($arr)) { + foreach($arr as $arg) { + if ($this->getAddr_s($arg, $separator, $encoded, $unconditionally_quote)) { + $s .= $separator; + } + } + $s = ($s ? substr($s, 2) : $s); + } else { + $addr = $this->{$arr}; + if (is_array($addr)) { + foreach ($addr as $addr_o) { + if (is_object($addr_o)) { + if ($encoded) { + $s .= $addr_o->getEncodedAddress($unconditionally_quote) . $separator; + } else { + $s .= $addr_o->getAddress(TRUE, FALSE, $unconditionally_quote) . $separator; + } + } + } + $s = substr($s, 0, -strlen($separator)); + } else { + if (is_object($addr)) { + if ($encoded) { + $s .= $addr->getEncodedAddress($unconditionally_quote); + } else { + $s .= $addr->getAddress(TRUE, FALSE, $unconditionally_quote); + } + } + } + } + return $s; + } + + /** + * function to get the array of addresses out of the header. + * @param mixed $arg string or array of strings + * @param array $excl_arr array of excluded email addresses + * @param array $arr array of added email addresses + * @return array + */ + function getAddr_a($arg, $excl_arr = array(), $arr = array()) { + if (is_array($arg)) { + foreach($arg as $argument) { + $arr = $this->getAddr_a($argument, $excl_arr, $arr); + } + } else { + $addr = $this->{$arg}; + if (is_array($addr)) { + foreach ($addr as $next_addr) { + if (is_object($next_addr)) { + if (isset($next_addr->host) && ($next_addr->host != '')) { + $email = $next_addr->mailbox . '@' . $next_addr->host; + } else { + $email = $next_addr->mailbox; + } + $email = strtolower($email); + if ($email && !isset($arr[$email]) && !isset($excl_arr[$email])) { + $arr[$email] = $next_addr->personal; + } + } + } + } else { + if (is_object($addr)) { + $email = $addr->mailbox; + $email .= (isset($addr->host) ? '@' . $addr->host : ''); + $email = strtolower($email); + if ($email && !isset($arr[$email]) && !isset($excl_arr[$email])) { + $arr[$email] = $addr->personal; + } + } + } + } + return $arr; + } + + /** +//FIXME: This needs some documentation (inside the function too)! Don't code w/out comments! + * @param mixed $address array or string + * @param boolean $recurs + * @return mixed array, boolean + * @since 1.3.2 + */ + function findAddress($address, $recurs = false) { + $result = false; + if (is_array($address)) { + $i=0; + foreach($address as $argument) { + $match = $this->findAddress($argument, true); + $last = end($match); + if ($match[1]) { + return $i; + } else { + if (count($match[0]) && !$result) { + $result = $i; + } + } + ++$i; + } + } else { + if (!is_array($this->cc)) $this->cc = array(); + if (!is_array($this->to)) $this->to = array(); + $srch_addr = $this->parseAddress($address); + $results = array(); + foreach ($this->to as $to) { + if (strtolower($to->host) == strtolower($srch_addr->host)) { + if (strtolower($to->mailbox) == strtolower($srch_addr->mailbox)) { + $results[] = $srch_addr; + if (strtolower($to->personal) == strtolower($srch_addr->personal)) { + if ($recurs) { + return array($results, true); + } else { + return true; + } + } + } + } + } + foreach ($this->cc as $cc) { + if (strtolower($cc->host) == strtolower($srch_addr->host)) { + if (strtolower($cc->mailbox) == strtolower($srch_addr->mailbox)) { + $results[] = $srch_addr; + if (strtolower($cc->personal) == strtolower($srch_addr->personal)) { + if ($recurs) { + return array($results, true); + } else { + return true; + } + } + } + } + } + if ($recurs) { + return array($results, false); + } elseif (count($result)) { + return true; + } else { + return false; + } + } + //exit; + return $result; + } + + /** + * @param string $type0 media type + * @param string $type1 media subtype + * @return array media properties + * @todo check use of media type arguments + */ + function getContentType($type0, $type1) { + $type0 = $this->content_type->type0; + $type1 = $this->content_type->type1; + return $this->content_type->properties; + } +} + diff --git a/ehcp/webmail2/class/mime/SMimeMessage.class.php b/ehcp/webmail2/class/mime/SMimeMessage.class.php new file mode 100644 index 0000000..a2ec9f8 --- /dev/null +++ b/ehcp/webmail2/class/mime/SMimeMessage.class.php @@ -0,0 +1,26 @@ +; + exit; + } + open( FILE, "config.php" ); + while ( $line = ) { + $line =~ s/^\s+//; + $line =~ s/^\$//; + $var = $line; + + $var =~ s/=/EQUALS/; + if ( $var =~ /^([a-z]|[A-Z])/ ) { + @o = split ( /\s*EQUALS\s*/, $var ); + if ( $o[0] eq "config_version" ) { + $o[1] =~ s/[\n|\r]//g; + $o[1] =~ s/[\'|\"];\s*$//; + $o[1] =~ s/;$//; + $o[1] =~ s/^[\'|\"]//; + + $config_version = $o[1]; + close(FILE); + } + } + } + close(FILE); + + if ( $config_version ne $conf_pl_version ) { + clear_screen(); + print "WARNING:\n"; + print " The file \"config/config.php\" was found, but it is for\n"; + print " an older version of SquirrelMail. It is possible to still\n"; + print " read the defaults from this file but be warned that many\n"; + print " preferences change between versions. It is recommended that\n"; + print " you start with a clean config.php for each upgrade that you\n"; + print " do. To do this, just move config/config.php out of the way.\n"; + print "\n"; + print "Continue loading with the old config.php [y/N]? "; + $ctu = ; + + if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) { + exit; + } + + print "\nDo you want me to stop warning you [y/N]? "; + $ctu = ; + if ( $ctu =~ /^y\n/i ) { + $print_config_version = $conf_pl_version; + } else { + $print_config_version = $config_version; + } + } else { + $print_config_version = $config_version; + } + + $config = 1; + open( FILE, "config.php" ); +} elsif ( -e "config_default.php" ) { + open( FILE, "config_default.php" ); + while ( $line = ) { + $line =~ s/^\s+//; + $line =~ s/^\$//; + $var = $line; + + $var =~ s/=/EQUALS/; + if ( $var =~ /^([a-z]|[A-Z])/ ) { + @o = split ( /\s*EQUALS\s*/, $var ); + if ( $o[0] eq "config_version" ) { + $o[1] =~ s/[\n|\r]//g; + $o[1] =~ s/[\'|\"];\s*$//; + $o[1] =~ s/;$//; + $o[1] =~ s/^[\'|\"]//; + + $config_version = $o[1]; + close(FILE); + } + } + } + close(FILE); + + if ( $config_version ne $conf_pl_version ) { + clear_screen(); + print "WARNING:\n"; + print " You are trying to use a 'config_default.php' from an older\n"; + print " version of SquirrelMail. This is HIGHLY unrecommended. You\n"; + print " should get the 'config_default.php' that matches the version\n"; + print " of SquirrelMail that you are running. You can get this from\n"; + print " the SquirrelMail web page by going to the following URL:\n"; + print " http://squirrelmail.org.\n"; + print "\n"; + print "Continue loading with old config_default.php (a bad idea) [y/N]? "; + $ctu = ; + + if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) { + exit; + } + + print "\nDo you want me to stop warning you [y/N]? "; + $ctu = ; + if ( $ctu =~ /^y\n/i ) { + $print_config_version = $conf_pl_version; + } else { + $print_config_version = $config_version; + } + } else { + $print_config_version = $config_version; + } + $config = 2; + open( FILE, "config_default.php" ); +} else { + print "No configuration file found. Please get config_default.php\n"; + print "or config.php before running this again. This program needs\n"; + print "a default config file to get default values.\n"; + exit; +} + +# Read and parse the current configuration file +# (either config.php or config_default.php). +while ( $line = ) { + $line =~ s/^\s+//; + $line =~ s/^\$//; + $var = $line; + + $var =~ s/=/EQUALS/; + if ( $var =~ /^([a-z]|[A-Z])/ ) { + @options = split ( /\s*EQUALS\s*/, $var ); + $options[1] =~ s/[\n|\r]//g; + $options[1] =~ s/[\'|\"];\s*$//; + $options[1] =~ s/;$//; + $options[1] =~ s/^[\'|\"]//; + # de-escape escaped strings + $options[1] =~ s/\\'/'/g; + $options[1] =~ s/\\\\/\\/g; + + if ( $options[0] =~ /^theme\[[0-9]+\]\[['|"]PATH['|"]\]/ ) { + $sub = $options[0]; + $sub =~ s/\]\[['|"]PATH['|"]\]//; + $sub =~ s/.*\[//; + if ( -e "../themes" ) { + $options[1] =~ s/^\.\.\/config/\.\.\/themes/; + } + $theme_path[$sub] = &change_to_rel_path($options[1]); + } elsif ( $options[0] =~ /^theme\[[0-9]+\]\[['|"]NAME['|"]\]/ ) { + $sub = $options[0]; + $sub =~ s/\]\[['|"]NAME['|"]\]//; + $sub =~ s/.*\[//; + $theme_name[$sub] = $options[1]; + } elsif ( $options[0] =~ /^plugins\[[0-9]+\]/ ) { + $sub = $options[0]; + $sub =~ s/\]//; + $sub =~ s/^plugins\[//; + $plugins[$sub] = $options[1]; + } elsif ( $options[0] =~ /^ldap_server\[[0-9]+\]/ ) { + $sub = $options[0]; + $sub =~ s/\]//; + $sub =~ s/^ldap_server\[//; + $continue = 0; + while ( ( $tmp = ) && ( $continue != 1 ) ) { + if ( $tmp =~ /\);\s*$/ ) { + $continue = 1; + } + + if ( $tmp =~ /^\s*[\'|\"]host[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]host[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $host = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]base[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]base[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $base = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]charset[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]charset[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $charset = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]port[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]port[\'|\"]\s*=>\s*[\'|\"]?//i; + $tmp =~ s/[\'|\"]?,?\s*$//; + $tmp =~ s/[\'|\"]?\);\s*$//; + $port = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]maxrows[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]maxrows[\'|\"]\s*=>\s*[\'|\"]?//i; + $tmp =~ s/[\'|\"]?,?\s*$//; + $tmp =~ s/[\'|\"]?\);\s*$//; + $maxrows = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]name[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]name[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $name = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]binddn[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]binddn[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $binddn = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]bindpw[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]bindpw[\'|\"]\s*=>\s*[\'|\"]//i; + $tmp =~ s/[\'|\"],?\s*$//; + $tmp =~ s/[\'|\"]\);\s*$//; + $bindpw = $tmp; + } elsif ( $tmp =~ /^\s*[\'|\"]protocol[\'|\"]/i ) { + $tmp =~ s/^\s*[\'|\"]protocol[\'|\"]\s*=>\s*[\'|\"]?//i; + $tmp =~ s/[\'|\"]?,?\s*$//; + $tmp =~ s/[\'|\"]?\);\s*$//; + $protocol = $tmp; + } + } + $ldap_host[$sub] = $host; + $ldap_base[$sub] = $base; + $ldap_name[$sub] = $name; + $ldap_port[$sub] = $port; + $ldap_maxrows[$sub] = $maxrows; + $ldap_charset[$sub] = $charset; + $ldap_binddn[$sub] = $binddn; + $ldap_bindpw[$sub] = $bindpw; + $ldap_protocol[$sub] = $protocol; + } elsif ( $options[0] =~ /^(data_dir|attachment_dir|theme_css|org_logo|signout_page)$/ ) { + ${ $options[0] } = &change_to_rel_path($options[1]); + } else { + ${ $options[0] } = $options[1]; + } + } +} +close FILE; + +# Default values used when option is missing +$useSendmail = "false" if ( lc($useSendmail) ne "true" ); +$sendmail_path = "/usr/sbin/sendmail" if ( !$sendmail_path ); +$pop_before_smtp = "false" if ( !$pop_before_smtp ) ; +$pop_before_smtp_host = '' if ( !$pop_before_smtp_host ) ; +$default_unseen_notify = 2 if ( !$default_unseen_notify ); +$default_unseen_type = 1 if ( !$default_unseen_type ); +$config_use_color = 0 if ( !$config_use_color ); +$invert_time = "false" if ( !$invert_time ); +$force_username_lowercase = "false" if ( !$force_username_lowercase ); +$optional_delimiter = "detect" if ( !$optional_delimiter ); +$auto_create_special = "false" if ( !$auto_create_special ); +$default_use_priority = "true" if ( !$default_use_priority ); +$hide_sm_attributions = "false" if ( !$hide_sm_attributions ); +$default_use_mdn = "true" if ( !$default_use_mdn ); +$delete_folder = "false" if ( !$delete_folder ); +$noselect_fix_enable = "false" if ( !$noselect_fix_enable ); +$frame_top = "_top" if ( !$frame_top ); + +$provider_uri = "http://squirrelmail.org/" if ( !$provider_uri ); +$provider_name = "SquirrelMail" if ( !$provider_name ); + +$edit_identity = "true" if ( !$edit_identity ); +$edit_name = "true" if ( !$edit_name ); +$allow_thread_sort = 'false' if ( !$allow_thread_sort ) ; +$allow_server_sort = 'false' if ( !$allow_server_sort ); +$uid_support = 'true' if ( !$uid_support ); +$no_list_for_subscribe = 'false' if ( !$no_list_for_subscribe ); +$allow_charset_search = 'true' if ( !$allow_charset_search ); + +$prefs_user_field = 'user' if ( !$prefs_user_field ); +$prefs_key_field = 'prefkey' if ( !$prefs_key_field ); +$prefs_val_field = 'prefval' if ( !$prefs_val_field ); + +$use_smtp_tls= 'false' if ( !$use_smtp_tls); +$smtp_auth_mech = 'none' if ( !$smtp_auth_mech ); + +$use_imap_tls = 'false' if ( !$use_imap_tls ); +$imap_auth_mech = 'login' if ( !$imap_auth_mech ); + +$session_name = 'SQMSESSID' if (!$session_name ); + +$default_use_javascript_addr_book = 'false' if (! $default_use_javascript_addr_book); + +# Added in 1.4.4 +$lossy_encoding = 'false' if ( !$lossy_encoding ); +$addrbook_global_dsn = '' if ( !$addrbook_global_dsn ); +$addrbook_global_table = 'global_abook' if ( !$addrbook_global_table ); +$addrbook_global_writeable = 'false' if ( !$addrbook_global_writeable ); +$addrbook_global_listing = 'false' if ( !$addrbook_global_listing ); +$abook_global_file = '' if ( !$abook_global_file); +$abook_global_file_writeable = 'false' if ( !$abook_global_file_writeable); + +# Added in 1.4.5 +$hide_auth_header = "false" if ( !$hide_auth_header ); +$encode_header_key = '' if ( !$encode_header_key ); + +# Added in 1.4.8 +$config_location_base = '' if ( !$config_location_base ); +# add qmail-inject test here for backwards compatibility +if ( !$sendmail_args && $sendmail_path =~ /qmail-inject/ ) { + $sendmail_args = ''; +} elsif ( !$sendmail_args ) { + $sendmail_args = '-i -t'; +} + +# Added in 1.4.11 +$smtp_sitewide_user = '' if ( !$smtp_sitewide_user ); +$smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass ); + +# Added in 1.4.9 +$abook_global_file_listing = 'true' if ( !$abook_global_file_listing ); +$abook_file_line_length = 2048 if ( !$abook_file_line_length ); + +# Added in 1.4.16 +$only_secure_cookies = 'true' if ( !$only_secure_cookies ); + +# Added in 1.4.20RC1 +$disable_security_tokens = 'false' if ( !$disable_security_tokens ); +$check_referrer = '' if ( !$check_referrer ); + +if ( $ARGV[0] eq '--install-plugin' ) { + print "Activating plugin " . $ARGV[1] . "\n"; + if ( -d "../plugins/" . $ARGV[1]) { + push @plugins, $ARGV[1]; + save_data(); + exit(0); + } else { + print "No such plugin.\n"; + exit(1); + } +} elsif ( $ARGV[0] eq '--remove-plugin' ) { + print "Removing plugin " . $ARGV[1] . "\n"; + foreach $plugin (@plugins) { + if ( $plugin ne $ARGV[1] ) { + push @newplugins, $plugin; + } + } + @plugins = @newplugins; + save_data(); + exit(0); +} + + + +#################################################################################### + +# used in multiple places, define once +$list_supported_imap_servers = + " bincimap = Binc IMAP server\n" . + " courier = Courier IMAP server\n" . + " cyrus = Cyrus IMAP server\n" . + " dovecot = Dovecot Secure IMAP server\n" . + " exchange = Microsoft Exchange IMAP server\n" . + " hmailserver = hMailServer\n" . + " macosx = Mac OS X Mailserver\n" . + " mercury32 = Mercury/32\n" . + " uw = University of Washington's IMAP server\n" . + " gmail = IMAP access to Google mail (Gmail) accounts\n"; + +##################################################################################### +if ( $config_use_color == 1 ) { + $WHT = "\x1B[1m"; + $NRM = "\x1B[0m"; +} else { + $WHT = ""; + $NRM = ""; + $config_use_color = 2; +} + +while ( ( $command ne "q" ) && ( $command ne "Q" ) ) { + clear_screen(); + print $WHT. "SquirrelMail Configuration : " . $NRM; + if ( $config == 1 ) { print "Read: config.php"; } + elsif ( $config == 2 ) { print "Read: config_default.php"; } + print " ($print_config_version)\n"; + print "---------------------------------------------------------\n"; + + if ( $menu == 0 ) { + print $WHT. "Main Menu --\n" . $NRM; + print "1. Organization Preferences\n"; + print "2. Server Settings\n"; + print "3. Folder Defaults\n"; + print "4. General Options\n"; + print "5. Themes\n"; + print "6. Address Books\n"; + print "7. Message of the Day (MOTD)\n"; + print "8. Plugins\n"; + print "9. Database\n"; + print "10. Languages\n"; + print "\n"; + print "D. Set pre-defined settings for specific IMAP servers\n"; + print "\n"; + } elsif ( $menu == 1 ) { + print $WHT. "Organization Preferences\n" . $NRM; + print "1. Organization Name : $WHT$org_name$NRM\n"; + print "2. Organization Logo : $WHT$org_logo$NRM\n"; + print "3. Org. Logo Width/Height : $WHT($org_logo_width/$org_logo_height)$NRM\n"; + print "4. Organization Title : $WHT$org_title$NRM\n"; + print "5. Signout Page : $WHT$signout_page$NRM\n"; + print "6. Top Frame : $WHT$frame_top$NRM\n"; + print "7. Provider link : $WHT$provider_uri$NRM\n"; + print "8. Provider name : $WHT$provider_name$NRM\n"; + + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 2 ) { + print $WHT. "Server Settings\n\n" . $NRM; + print $WHT . "General" . $NRM . "\n"; + print "-------\n"; + print "1. Domain : $WHT$domain$NRM\n"; + print "2. Invert Time : $WHT$invert_time$NRM\n"; + print "3. Sendmail or SMTP : $WHT"; + if ( lc($useSendmail) eq "true" ) { + print "Sendmail"; + } else { + print "SMTP"; + } + print "$NRM\n"; + print "\n"; + + if ( $show_imap_settings ) { + print $WHT . "IMAP Settings". $NRM . "\n--------------\n"; + print "4. IMAP Server : $WHT$imapServerAddress$NRM\n"; + print "5. IMAP Port : $WHT$imapPort$NRM\n"; + print "6. Authentication type : $WHT$imap_auth_mech$NRM\n"; + print "7. Secure IMAP (TLS) : $WHT$use_imap_tls$NRM\n"; + print "8. Server software : $WHT$imap_server_type$NRM\n"; + print "9. Delimiter : $WHT$optional_delimiter$NRM\n"; + print "\n"; + } elsif ( $show_smtp_settings ) { + if ( lc($useSendmail) eq "true" ) { + print $WHT . "Sendmail" . $NRM . "\n--------\n"; + print "4. Sendmail Path : $WHT$sendmail_path$NRM\n"; + print "5. Sendmail arguments : $WHT$sendmail_args$NRM\n"; + print "6. Header encryption key : $WHT$encode_header_key$NRM\n"; + print "\n"; + } else { + print $WHT . "SMTP Settings" . $NRM . "\n-------------\n"; + print "4. SMTP Server : $WHT$smtpServerAddress$NRM\n"; + print "5. SMTP Port : $WHT$smtpPort$NRM\n"; + print "6. POP before SMTP : $WHT$pop_before_smtp$NRM\n"; + print "7. SMTP Authentication : $WHT$smtp_auth_mech" . display_smtp_sitewide_userpass() . "$NRM\n"; + print "8. Secure SMTP (TLS) : $WHT$use_smtp_tls$NRM\n"; + print "9. Header encryption key : $WHT$encode_header_key$NRM\n"; + print "\n"; + } + } + + if ($show_imap_settings == 0) { + print "A. Update IMAP Settings : "; + print "$WHT$imapServerAddress$NRM:"; + print "$WHT$imapPort$NRM "; + print "($WHT$imap_server_type$NRM)\n"; + } + if ($show_smtp_settings == 0) { + if ( lc($useSendmail) eq "true" ) { + print "B. Change Sendmail Config : $WHT$sendmail_path$NRM\n"; + } else { + print "B. Update SMTP Settings : "; + print "$WHT$smtpServerAddress$NRM:"; + print "$WHT$smtpPort$NRM\n"; + } + } + if ( $show_smtp_settings || $show_imap_settings ) + { + print "H. Hide " . + ($show_imap_settings ? "IMAP Server" : + (lc($useSendmail) eq "true") ? "Sendmail" : "SMTP") . " Settings\n"; + } + + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 3 ) { + print $WHT. "Folder Defaults\n" . $NRM; + print "1. Default Folder Prefix : $WHT$default_folder_prefix$NRM\n"; + print "2. Show Folder Prefix Option : $WHT$show_prefix_option$NRM\n"; + print "3. Trash Folder : $WHT$trash_folder$NRM\n"; + print "4. Sent Folder : $WHT$sent_folder$NRM\n"; + print "5. Drafts Folder : $WHT$draft_folder$NRM\n"; + print "6. By default, move to trash : $WHT$default_move_to_trash$NRM\n"; + print "7. By default, save sent messages : $WHT$default_move_to_sent$NRM\n"; + print "8. By default, save as draft : $WHT$default_save_as_draft$NRM\n"; + print "9. List Special Folders First : $WHT$list_special_folders_first$NRM\n"; + print "10. Show Special Folders Color : $WHT$use_special_folder_color$NRM\n"; + print "11. Auto Expunge : $WHT$auto_expunge$NRM\n"; + print "12. Default Sub. of INBOX : $WHT$default_sub_of_inbox$NRM\n"; + print "13. Show 'Contain Sub.' Option : $WHT$show_contain_subfolders_option$NRM\n"; + print "14. Default Unseen Notify : $WHT$default_unseen_notify$NRM\n"; + print "15. Default Unseen Type : $WHT$default_unseen_type$NRM\n"; + print "16. Auto Create Special Folders : $WHT$auto_create_special$NRM\n"; + print "17. Folder Delete Bypasses Trash : $WHT$delete_folder$NRM\n"; + print "18. Enable /NoSelect folder fix : $WHT$noselect_fix_enable$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 4 ) { + print $WHT. "General Options\n" . $NRM; + print "1. Data Directory : $WHT$data_dir$NRM\n"; + print "2. Attachment Directory : $WHT$attachment_dir$NRM\n"; + print "3. Directory Hash Level : $WHT$dir_hash_level$NRM\n"; + print "4. Default Left Size : $WHT$default_left_size$NRM\n"; + print "5. Usernames in Lowercase : $WHT$force_username_lowercase$NRM\n"; + print "6. Allow use of priority : $WHT$default_use_priority$NRM\n"; + print "7. Hide SM attributions : $WHT$hide_sm_attributions$NRM\n"; + print "8. Allow use of receipts : $WHT$default_use_mdn$NRM\n"; + print "9. Allow editing of identity : $WHT$edit_identity$NRM\n"; + print " Allow editing of name : $WHT$edit_name$NRM\n"; + print " Remove username from header : $WHT$hide_auth_header$NRM\n"; + print "10. Allow server thread sort : $WHT$allow_thread_sort$NRM\n"; + print "11. Allow server-side sorting : $WHT$allow_server_sort$NRM\n"; + print "12. Allow server charset search : $WHT$allow_charset_search$NRM\n"; + print "13. Enable UID support : $WHT$uid_support$NRM\n"; + print "14. PHP session name : $WHT$session_name$NRM\n"; + print "15. Location base : $WHT$config_location_base$NRM\n"; + print "16. Only secure cookies if poss. : $WHT$only_secure_cookies$NRM\n"; + print "17. Disable secure forms : $WHT$disable_security_tokens$NRM\n"; + print "18. Page referal requirement : $WHT$check_referrer$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 5 ) { + print $WHT. "Themes\n" . $NRM; + print "1. Change Themes\n"; + for ( $count = 0 ; $count <= $#theme_name/2 ; $count++ ) { + $temp_name = $theme_name[$count*2]; + printf " %s%*s %s\n", $temp_name, + 40 - length($temp_name), " ", + $theme_name[($count*2)+1]; + } + print "2. CSS File : $WHT$theme_css$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 6 ) { + print $WHT. "Address Books\n" . $NRM; + print "1. Change LDAP Servers\n"; + for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) { + print " > $ldap_host[$count]\n"; + } + print "2. Use Javascript Address Book Search : $WHT$default_use_javascript_addr_book$NRM\n"; + print "3. Global file address book : $WHT$abook_global_file$NRM\n"; + print "4. Allow writing into global file address book : $WHT$abook_global_file_writeable$NRM\n"; + print "5. Allow listing of global file address book : $WHT$abook_global_file_listing$NRM\n"; + print "6. Allowed address book line length : $WHT$abook_file_line_length$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 7 ) { + print $WHT. "Message of the Day (MOTD)\n" . $NRM; + print "\n$motd\n"; + print "\n"; + print "1 Edit the MOTD\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 8 ) { + print $WHT. "Plugins\n" . $NRM; + print " Installed Plugins\n"; + $num = 0; + for ( $count = 0 ; $count <= $#plugins ; $count++ ) { + $num = $count + 1; + print " $num. $plugins[$count]\n"; + } + print "\n Available Plugins:\n"; + opendir( DIR, "../plugins" ); + @files = sort(readdir(DIR)); + $pos = 0; + @unused_plugins = (); + for ( $i = 0 ; $i <= $#files ; $i++ ) { + if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne "CVS" ) { + $match = 0; + for ( $k = 0 ; $k <= $#plugins ; $k++ ) { + if ( $plugins[$k] eq $files[$i] ) { + $match = 1; + } + } + if ( $match == 0 ) { + $unused_plugins[$pos] = $files[$i]; + $pos++; + } + } + } + + for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) { + $num = $num + 1; + print " $num. $unused_plugins[$i]\n"; + } + closedir DIR; + + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 9 ) { + print $WHT. "Database\n" . $NRM; + print "1. DSN for Address Book : $WHT$addrbook_dsn$NRM\n"; + print "2. Table for Address Book : $WHT$addrbook_table$NRM\n"; + print "\n"; + print "3. DSN for Preferences : $WHT$prefs_dsn$NRM\n"; + print "4. Table for Preferences : $WHT$prefs_table$NRM\n"; + print "5. Field for username : $WHT$prefs_user_field$NRM\n"; + print "6. Field for prefs key : $WHT$prefs_key_field$NRM\n"; + print "7. Field for prefs value : $WHT$prefs_val_field$NRM\n"; + print "\n"; + print "8. DSN for Global Address Book : $WHT$addrbook_global_dsn$NRM\n"; + print "9. Table for Global Address Book : $WHT$addrbook_global_table$NRM\n"; + print "10. Allow writing into Global Address Book : $WHT$addrbook_global_writeable$NRM\n"; + print "11. Allow listing of Global Address Book : $WHT$addrbook_global_listing$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } elsif ( $menu == 10 ) { + print $WHT. "Language preferences\n" . $NRM; + print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n"; + print "2. Default Charset : $WHT$default_charset$NRM\n"; + print "3. Enable lossy encoding : $WHT$lossy_encoding$NRM\n"; + print "\n"; + print "R Return to Main Menu\n"; + } + if ( $config_use_color == 1 ) { + print "C Turn color off\n"; + } else { + print "C Turn color on\n"; + } + print "S Save data\n"; + print "Q Quit\n"; + + print "\n"; + print "Command >> " . $WHT; + $command = ; + $command =~ s/[\n|\r]//g; + $command =~ tr/A-Z/a-z/; + print "$NRM\n"; + + # Read the commands they entered. + if ( $command eq "r" ) { + $menu = 0; + } elsif ( $command eq "s" ) { + save_data(); + print "Press enter to continue..."; + $tmp = ; + $saved = 1; + } elsif ( ( $command eq "q" ) && ( $saved == 0 ) ) { + print "You have not saved your data.\n"; + print "Save? [" . $WHT . "Y" . $NRM . "/n]: "; + $save = ; + if ( ( $save =~ /^y/i ) || ( $save =~ /^\s*$/ ) ) { + save_data(); + } + } elsif ( $command eq "c" ) { + if ( $config_use_color == 1 ) { + $config_use_color = 2; + $WHT = ""; + $NRM = ""; + } else { + $config_use_color = 1; + $WHT = "\x1B[1m"; + $NRM = "\x1B[0m"; + } + } elsif ( $command eq "d" && $menu == 0 ) { + set_defaults(); + } else { + $saved = 0; + if ( $menu == 0 ) { + if ( ( $command > 0 ) && ( $command < 11 ) ) { + $menu = $command; + } + } elsif ( $menu == 1 ) { + if ( $command == 1 ) { $org_name = command1(); } + elsif ( $command == 2 ) { $org_logo = command2(); } + elsif ( $command == 3 ) { ($org_logo_width,$org_logo_height) = command3(); } + elsif ( $command == 4 ) { $org_title = command4(); } + elsif ( $command == 5 ) { $signout_page = command5(); } + elsif ( $command == 6 ) { $frame_top = command6(); } + elsif ( $command == 7 ) { $provider_uri = command7(); } + elsif ( $command == 8 ) { $provider_name = command8(); } + + } elsif ( $menu == 2 ) { + if ( $command eq "a" ) { $show_imap_settings = 1; $show_smtp_settings = 0; } + elsif ( $command eq "b" ) { $show_imap_settings = 0; $show_smtp_settings = 1; } + elsif ( $command eq "h" ) { $show_imap_settings = 0; $show_smtp_settings = 0; } + elsif ( $command <= 3 ) { + if ( $command == 1 ) { $domain = command11(); } + elsif ( $command == 2 ) { $invert_time = command110(); } + elsif ( $command == 3 ) { $useSendmail = command14(); } + $show_imap_settings = 0; $show_smtp_settings = 0; + } elsif ( $show_imap_settings ) { + if ( $command == 4 ) { $imapServerAddress = command12(); } + elsif ( $command == 5 ) { $imapPort = command13(); } + elsif ( $command == 6 ) { $imap_auth_mech = command112a(); } + elsif ( $command == 7 ) { $use_imap_tls = command113("IMAP",$use_imap_tls); } + elsif ( $command == 8 ) { $imap_server_type = command19(); } + elsif ( $command == 9 ) { $optional_delimiter = command111(); } + } elsif ( $show_smtp_settings && lc($useSendmail) eq "true" ) { + if ( $command == 4 ) { $sendmail_path = command15(); } + elsif ( $command == 5 ) { $sendmail_args = command_sendmail_args(); } + elsif ( $command == 6 ) { $encode_header_key = command114(); } + } elsif ( $show_smtp_settings ) { + if ( $command == 4 ) { $smtpServerAddress = command16(); } + elsif ( $command == 5 ) { $smtpPort = command17(); } + elsif ( $command == 6 ) { $pop_before_smtp = command18a(); } + elsif ( $command == 7 ) { $smtp_auth_mech = command112b(); } + elsif ( $command == 8 ) { $use_smtp_tls = command113("SMTP",$use_smtp_tls); } + elsif ( $command == 9 ) { $encode_header_key = command114(); } + } + } elsif ( $menu == 3 ) { + if ( $command == 1 ) { $default_folder_prefix = command21(); } + elsif ( $command == 2 ) { $show_prefix_option = command22(); } + elsif ( $command == 3 ) { $trash_folder = command23a(); } + elsif ( $command == 4 ) { $sent_folder = command23b(); } + elsif ( $command == 5 ) { $draft_folder = command23c(); } + elsif ( $command == 6 ) { $default_move_to_trash = command24a(); } + elsif ( $command == 7 ) { $default_move_to_sent = command24b(); } + elsif ( $command == 8 ) { $default_save_as_draft = command24c(); } + elsif ( $command == 9 ) { $list_special_folders_first = command27(); } + elsif ( $command == 10 ) { $use_special_folder_color = command28(); } + elsif ( $command == 11 ) { $auto_expunge = command29(); } + elsif ( $command == 12 ) { $default_sub_of_inbox = command210(); } + elsif ( $command == 13 ) { $show_contain_subfolders_option = command211(); } + elsif ( $command == 14 ) { $default_unseen_notify = command212(); } + elsif ( $command == 15 ) { $default_unseen_type = command213(); } + elsif ( $command == 16 ) { $auto_create_special = command214(); } + elsif ( $command == 17 ) { $delete_folder = command215(); } + elsif ( $command == 18 ) { $noselect_fix_enable = command216(); } + } elsif ( $menu == 4 ) { + if ( $command == 1 ) { $data_dir = command31(); } + elsif ( $command == 2 ) { $attachment_dir = command32(); } + elsif ( $command == 3 ) { $dir_hash_level = command33(); } + elsif ( $command == 4 ) { $default_left_size = command34(); } + elsif ( $command == 5 ) { $force_username_lowercase = command35(); } + elsif ( $command == 6 ) { $default_use_priority = command36(); } + elsif ( $command == 7 ) { $hide_sm_attributions = command37(); } + elsif ( $command == 8 ) { $default_use_mdn = command38(); } + elsif ( $command == 9 ) { $edit_identity = command39(); } + elsif ( $command == 10 ) { $allow_thread_sort = command310(); } + elsif ( $command == 11 ) { $allow_server_sort = command311(); } + elsif ( $command == 12 ) { $allow_charset_search = command312(); } + elsif ( $command == 13 ) { $uid_support = command313(); } + elsif ( $command == 14 ) { $session_name = command314(); } + elsif ( $command == 15 ) { $config_location_base = command_config_location_base(); } + elsif ( $command == 16 ) { $only_secure_cookies = command316(); } + elsif ( $command == 17 ) { $disable_security_tokens = command317(); } + elsif ( $command == 18 ) { $check_referrer = command318(); } + } elsif ( $menu == 5 ) { + if ( $command == 1 ) { command41(); } + elsif ( $command == 2 ) { $theme_css = command42(); } + } elsif ( $menu == 6 ) { + if ( $command == 1 ) { command61(); } + elsif ( $command == 2 ) { command62(); } + elsif ( $command == 3 ) { $abook_global_file=command63(); } + elsif ( $command == 4 ) { command64(); } + elsif ( $command == 5 ) { command_abook_global_file_listing(); } + elsif ( $command == 6 ) { command_abook_file_line_length(); } + } elsif ( $menu == 7 ) { + if ( $command == 1 ) { $motd = command71(); } + } elsif ( $menu == 8 ) { + if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); } + } elsif ( $menu == 9 ) { + if ( $command == 1 ) { $addrbook_dsn = command91(); } + elsif ( $command == 2 ) { $addrbook_table = command92(); } + elsif ( $command == 3 ) { $prefs_dsn = command93(); } + elsif ( $command == 4 ) { $prefs_table = command94(); } + elsif ( $command == 5 ) { $prefs_user_field = command95(); } + elsif ( $command == 6 ) { $prefs_key_field = command96(); } + elsif ( $command == 7 ) { $prefs_val_field = command97(); } + elsif ( $command == 8 ) { $addrbook_global_dsn = command98(); } + elsif ( $command == 9 ) { $addrbook_global_table = command99(); } + elsif ( $command == 10 ) { $addrbook_global_writeable = command910(); } + elsif ( $command == 11 ) { $addrbook_global_listing = command911(); } + } elsif ( $menu == 10 ) { + if ( $command == 1 ) { $squirrelmail_default_language = commandA1(); } + elsif ( $command == 2 ) { $default_charset = commandA2(); } + elsif ( $command == 3 ) { $lossy_encoding = commandA3(); } + } + } +} + +# we exit here +print "\nExiting conf.pl.\n". + "You might want to test your configuration by browsing to\n". + "http://your-squirrelmail-location/src/configtest.php\n". + "Happy SquirrelMailing!\n\n"; + + +#################################################################################### +#### Organization preferences #### +# org_name +sub command1 { + print "We have tried to make the name SquirrelMail as transparent as\n"; + print "possible. If you set up an organization name, most places where\n"; + print "SquirrelMail would take credit will be credited to your organization.\n"; + print "\n"; + print "If your Organization Name includes a '\$', please precede it with a \\. \n"; + print "Other '\$' will be considered the beginning of a variable that\n"; + print "must be defined before the \$org_name is printed.\n"; + print "\$version, for example, is included by default, and will print the\n"; + print "string representing the current SquirrelMail version.\n"; + print "\n"; + print "[$WHT$org_name$NRM]: $WHT"; + $new_org_name = ; + if ( $new_org_name eq "\n" ) { + $new_org_name = $org_name; + } else { + $new_org_name =~ s/[\r|\n]//g; + $new_org_name =~ s/\"/"/g; + } + return $new_org_name; +} + +# org_logo +sub command2 { + print "Your organization's logo is an image that will be displayed at\n"; + print "different times throughout SquirrelMail. "; + print "\n"; + print "Please be aware of the following: \n"; + print " - Relative URLs are relative to the config dir\n"; + print " to use the default logo, use ../images/sm_logo.png\n"; + print " - To specify a logo defined outside the SquirrelMail source tree\n"; + print " use the absolute URL the webserver would use to include the file\n"; + print " e.g. http://example.com/images/mylogo.gif or /images/mylogo.jpg\n"; + print "\n"; + print "[$WHT$org_logo$NRM]: $WHT"; + $new_org_logo = ; + if ( $new_org_logo eq "\n" ) { + $new_org_logo = $org_logo; + } else { + $new_org_logo =~ s/[\r|\n]//g; + } + return $new_org_logo; +} + +# org_logo_width +sub command3 { + print "Your organization's logo is an image that will be displayed at\n"; + print "different times throughout SquirrelMail. Width\n"; + print "and Height of your logo image. Use '0' to disable.\n"; + print "\n"; + print "Width: [$WHT$org_logo_width$NRM]: $WHT"; + $new_org_logo_width = ; + $new_org_logo_width =~ tr/0-9//cd; # only want digits! + if ( $new_org_logo_width eq '' ) { + $new_org_logo_width = $org_logo_width; + } + if ( $new_org_logo_width > 0 ) { + print "Height: [$WHT$org_logo_height$NRM]: $WHT"; + $new_org_logo_height = ; + $new_org_logo_height =~ tr/0-9//cd; # only want digits! + if( $new_org_logo_height eq '' ) { + $new_org_logo_height = $org_logo_height; + } + } else { + $new_org_logo_height = 0; + } + return ($new_org_logo_width, $new_org_logo_height); +} + +# org_title +sub command4 { + print "A title is what is displayed at the top of the browser window in\n"; + print "the titlebar. Usually this will end up looking something like:\n"; + print "\"Netscape: $org_title\"\n"; + print "\n"; + print "If your Organization Title includes a '\$', please precede it with a \\. \n"; + print "Other '\$' will be considered the beginning of a variable that\n"; + print "must be defined before the \$org_title is printed.\n"; + print "\$version, for example, is included by default, and will print the\n"; + print "string representing the current SquirrelMail version.\n"; + print "\n"; + print "[$WHT$org_title$NRM]: $WHT"; + $new_org_title = ; + if ( $new_org_title eq "\n" ) { + $new_org_title = $org_title; + } else { + $new_org_title =~ s/[\r|\n]//g; + $new_org_title =~ s/\"/\'/g; + } + return $new_org_title; +} + +# signout_page +sub command5 { + print "When users click the Sign Out button they will be logged out and\n"; + print "then sent to signout_page. If signout_page is left empty,\n"; + print "(hit space and then return) they will be taken, as normal,\n"; + print "to the default and rather sparse SquirrelMail signout page.\n"; + print "\n"; + print "[$WHT$signout_page$NRM]: $WHT"; + $new_signout_page = ; + if ( $new_signout_page eq "\n" ) { + $new_signout_page = $signout_page; + } else { + $new_signout_page =~ s/[\r|\n]//g; + $new_signout_page =~ s/^\s+$//g; + } + return $new_signout_page; +} + +# Default top frame +sub command6 { + print "SquirrelMail defaults to using the whole of the browser window.\n"; + print "This allows you to keep it within a specified frame. The default\n"; + print "is '_top'\n"; + print "\n"; + print "[$WHT$frame_top$NRM]: $WHT"; + $new_frame_top = ; + if ( $new_frame_top eq "\n" ) { + $new_frame_top = '_top'; + } else { + $new_frame_top =~ s/[\r|\n]//g; + $new_frame_top =~ s/^\s+$//g; + } + return $new_frame_top; +} + +# Default link to provider +sub command7 { + print "Here you can set the link on the right of the page.\n"; + print "The default is 'http://squirrelmail.org/'\n"; + print "\n"; + print "[$WHT$provider_uri$NRM]: $WHT"; + $new_provider_uri = ; + if ( $new_provider_uri eq "\n" ) { + $new_provider_uri = 'http://squirrelmail.org/'; + } else { + $new_provider_uri =~ s/[\r|\n]//g; + $new_provider_uri =~ s/^\s+$//g; + } + return $new_provider_uri; +} + +sub command8 { + print "Here you can set the name of the link on the right of the page.\n"; + print "The default is 'SquirrelMail'\n"; + print "\n"; + print "[$WHT$provider_name$NRM]: $WHT"; + $new_provider_name = ; + if ( $new_provider_name eq "\n" ) { + $new_provider_name = 'SquirrelMail'; + } else { + $new_provider_name =~ s/[\r|\n]//g; + $new_provider_name =~ s/^\s+$//g; + $new_provider_name =~ s/\'/\\'/g; + } + return $new_provider_name; +} + +#################################################################################### +#### Server settings #### +# domain +sub command11 { + print "The domain name is the suffix at the end of all email addresses. If\n"; + print "for example, your email address is jdoe\@example.com, then your domain\n"; + print "would be example.com.\n"; + print "\n"; + print "[$WHT$domain$NRM]: $WHT"; + $new_domain = ; + if ( $new_domain eq "\n" ) { + $new_domain = $domain; + } else { + $new_domain =~ s/\s//g; + } + return $new_domain; +} + +# imapServerAddress +sub command12 { + print "This is the hostname where your IMAP server can be contacted.\n"; + print "[$WHT$imapServerAddress$NRM]: $WHT"; + $new_imapServerAddress = ; + if ( $new_imapServerAddress eq "\n" ) { + $new_imapServerAddress = $imapServerAddress; + } else { + $new_imapServerAddress =~ s/[\r|\n]//g; + } + return $new_imapServerAddress; +} + +# imapPort +sub command13 { + print "This is the port that your IMAP server is on. Usually this is 143.\n"; + print "[$WHT$imapPort$NRM]: $WHT"; + $new_imapPort = ; + if ( $new_imapPort eq "\n" ) { + $new_imapPort = $imapPort; + } else { + $new_imapPort =~ s/[\r|\n]//g; + } + return $new_imapPort; +} + +# useSendmail +sub command14 { + print "You now need to choose the method that you will use for sending\n"; + print "messages in SquirrelMail. You can either connect to an SMTP server\n"; + print "or use sendmail directly.\n"; + if ( lc($useSendmail) eq "true" ) { + $default_value = "1"; + } else { + $default_value = "2"; + } + print "\n"; + print " 1. Sendmail\n"; + print " 2. SMTP\n"; + print "Your choice [1/2] [$WHT$default_value$NRM]: $WHT"; + $use_sendmail = ; + if ( ( $use_sendmail =~ /^1\n/i ) + || ( ( $use_sendmail =~ /^\n/ ) && ( $default_value eq "1" ) ) ) { + $useSendmail = "true"; + } else { + $useSendmail = "false"; + } + return $useSendmail; +} + +# sendmail_path +sub command15 { + print "Specify where the sendmail executable is located. Usually /usr/sbin/sendmail\n"; + print "[$WHT$sendmail_path$NRM]: $WHT"; + $new_sendmail_path = ; + if ( $new_sendmail_path eq "\n" ) { + $new_sendmail_path = $sendmail_path; + } else { + $new_sendmail_path =~ s/[\r|\n]//g; + } + return $new_sendmail_path; +} + +# Extra sendmail arguments +sub command_sendmail_args { + print "Specify additional sendmail program arguments.\n"; + print "\n"; + print "Make sure that arguments are supported by your sendmail program. -f argument \n"; + print "is added automatically by SquirrelMail scripts. Variable defaults to standard\n"; + print "/usr/sbin/sendmail arguments. If you use qmail-inject, nbsmtp or any other \n"; + print "sendmail wrapper, which does not support -i and -t arguments, set variable to\n"; + print "empty string or use arguments suitable for your mailer.\n"; + print "\n"; + print "[$WHT$sendmail_args$NRM]: $WHT"; + $new_sendmail_args = ; + if ( $new_sendmail_args eq "\n" ) { + $new_sendmail_args = $sendmail_args; + } else { + # strip linefeeds and crs. + $new_sendmail_args =~ s/[\r\n]//g; + } + return trim($new_sendmail_args); +} + +# smtpServerAddress +sub command16 { + print "This is the hostname of your SMTP server.\n"; + print "[$WHT$smtpServerAddress$NRM]: $WHT"; + $new_smtpServerAddress = ; + if ( $new_smtpServerAddress eq "\n" ) { + $new_smtpServerAddress = $smtpServerAddress; + } else { + $new_smtpServerAddress =~ s/[\r|\n]//g; + } + return $new_smtpServerAddress; +} + +# smtpPort +sub command17 { + print "This is the port to connect to for SMTP. Usually 25.\n"; + print "[$WHT$smtpPort$NRM]: $WHT"; + $new_smtpPort = ; + if ( $new_smtpPort eq "\n" ) { + $new_smtpPort = $smtpPort; + } else { + $new_smtpPort =~ s/[\r|\n]//g; + } + return $new_smtpPort; +} + +# authenticated server +sub command18 { + return; + # This sub disabled by tassium - it has been replaced with smtp_auth_mech + print "Do you wish to use an authenticated SMTP server? Your server must\n"; + print "support this in order for SquirrelMail to work with it. We implemented\n"; + print "it according to RFC 2554.\n"; + + $YesNo = 'n'; + $YesNo = 'y' if ( lc($use_authenticated_smtp) eq "true" ); + + print "Use authenticated SMTP server (y/n) [$WHT$YesNo$NRM]: $WHT"; + + $new_use_authenticated_smtp = ; + $new_use_authenticated_smtp =~ tr/yn//cd; + return "true" if ( $new_use_authenticated_smtp eq "y" ); + return "false" if ( $new_use_authenticated_smtp eq "n" ); + return $use_authenticated_smtp; +} + +# pop before SMTP +sub command18a { + print "Do you wish to use POP3 before SMTP? Your server must\n"; + print "support this in order for SquirrelMail to work with it.\n"; + + $YesNo = 'n'; + $YesNo = 'y' if ( lc($pop_before_smtp) eq "true" ); + + print "Use pop before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT"; + + $new_pop_before_smtp = ; + $new_pop_before_smtp =~ tr/yn//cd; + if ( $new_pop_before_smtp eq "y" ) { + $new_pop_before_smtp = "true"; + } elsif ( $new_pop_before_smtp eq "n" ) { + $new_pop_before_smtp = "false"; + } else { + $new_pop_before_smtp = $pop_before_smtp; + } + + # if using POP before SMTP, allow setting of custom POP server address + if ($new_pop_before_smtp eq "true") { + print "$NRM\nIf the address of the POP server is not the same as\n"; + print "your SMTP server, you may specify it here. Leave blank (to\n"; + print "clear this, enter only spaces) to use the same address as\n"; + print "your SMTP server.\n"; + print "POP before SMTP server address [$WHT$pop_before_smtp_host$NRM]: $WHT"; + + $new_pop_before_smtp_host = ; + if ( $new_pop_before_smtp_host eq "\n" ) { + $new_pop_before_smtp_host = $pop_before_smtp_host; + } elsif ($new_pop_before_smtp_host =~ /^\s+$/) { + $new_pop_before_smtp_host = ''; + } else { + $new_pop_before_smtp_host =~ s/[\r|\n]//g; + } + $pop_before_smtp_host = $new_pop_before_smtp_host; + } + + return $new_pop_before_smtp; +} + +# imap_server_type +sub command19 { + print "Each IMAP server has its own quirks. As much as we tried to stick\n"; + print "to standards, it doesn't help much if the IMAP server doesn't follow\n"; + print "the same principles. We have made some work-arounds for some of\n"; + print "these servers. If you would like to use them, please select your\n"; + print "IMAP server. If you do not wish to use these work-arounds, you can\n"; + print "set this to \"other\", and none will be used.\n"; + print $list_supported_imap_servers; + print " other = Not one of the above servers\n"; + print "[$WHT$imap_server_type$NRM]: $WHT"; + $new_imap_server_type = ; + + if ( $new_imap_server_type eq "\n" ) { + $new_imap_server_type = $imap_server_type; + } else { + $new_imap_server_type =~ s/[\r|\n]//g; + } + return $new_imap_server_type; +} + +# invert_time +sub command110 { + print "Sometimes the date of messages sent is messed up (off by a few hours\n"; + print "on some machines). Typically this happens if the system doesn't support\n"; + print "tm_gmtoff. It will happen only if your time zone is \"negative\".\n"; + print "This most often occurs on Solaris 7 machines in the United States.\n"; + print "By default, this is off. It should be kept off unless problems surface\n"; + print "about the time that messages are sent.\n"; + print " no = Do NOT fix time -- almost always correct\n"; + print " yes = Fix the time for this system\n"; + + $YesNo = 'n'; + $YesNo = 'y' if ( lc($invert_time) eq "true" ); + + print "Fix the time for this system (y/n) [$WHT$YesNo$NRM]: $WHT"; + + $new_invert_time = ; + $new_invert_time =~ tr/yn//cd; + return "true" if ( $new_invert_time eq "y" ); + return "false" if ( $new_invert_time eq "n" ); + return $invert_time; +} + +sub command111 { + print "This is the delimiter that your IMAP server uses to distinguish between\n"; + print "folders. For example, Cyrus uses '.' as the delimiter and a complete\n"; + print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n"; + print "look like 'INBOX/Friends/Bob'. Normally this should be left at 'detect'\n"; + print "but if you are sure you know what delimiter your server uses, you can\n"; + print "specify it here.\n"; + print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n"; + print "[$WHT$optional_delimiter$NRM]: $WHT"; + $new_optional_delimiter = ; + + if ( $new_optional_delimiter eq "\n" ) { + $new_optional_delimiter = $optional_delimiter; + } else { + $new_optional_delimiter =~ s/[\r|\n]//g; + } + return $new_optional_delimiter; +} +# IMAP authentication type +# Possible values: login, cram-md5, digest-md5 +# Now offers to detect supported mechs, assuming server & port are set correctly + +sub command112a { + if ($use_imap_tls =~ /^true\b/i) { + print "Auto-detection of login methods is unavailable when using TLS.\n"; + } else { + print "If you have already set the hostname and port number, I can try to\n"; + print "detect the mechanisms your IMAP server supports.\n"; + print "I will try to detect CRAM-MD5 and DIGEST-MD5 support. I can't test\n"; + print "for \"login\" without knowing a username and password.\n"; + print "Auto-detecting is optional - you can safely say \"n\" here.\n"; + print "\nTry to detect supported mechanisms? [y/N]: "; + $inval=; + chomp($inval); + if ($inval =~ /^y\b/i) { + # Yes, let's try to detect. + print "Trying to detect IMAP capabilities...\n"; + my $host = $imapServerAddress . ':'. $imapPort; + print "CRAM-MD5:\t"; + my $tmp = detect_auth_support('IMAP',$host,'CRAM-MD5'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print "$WHT SUPPORTED$NRM\n"; + } else { + print "$WHT NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . " ERROR DETECTING$NRM\n"; + } + + print "DIGEST-MD5:\t"; + $tmp = detect_auth_support('IMAP',$host,'DIGEST-MD5'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print "$WHT SUPPORTED$NRM\n"; + } else { + print "$WHT NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . " ERROR DETECTING$NRM\n"; + } + + } + } + print "\nWhat authentication mechanism do you want to use for IMAP connections?\n\n"; + print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; + print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext methods.\n"; + print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n"; + print "\n*** YOUR IMAP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n"; + print "If you don't understand or are unsure, you probably want \"login\"\n\n"; + print "login, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT"; + $inval=; + chomp($inval); + if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^login\b/i)) { + return lc($inval); + } else { + # user entered garbage or default value so nothing needs to be set + return $imap_auth_mech; + } +} + + +# SMTP authentication type +# Possible choices: none, login, plain, cram-md5, digest-md5 +sub command112b { + if ($use_smtp_tls =~ /^true\b/i) { + print "Auto-detection of login methods is unavailable when using TLS.\n"; + } elsif (eval ("use IO::Socket; 1")) { + print "If you have already set the hostname and port number, I can try to\n"; + print "automatically detect the mechanisms your SMTP server supports.\n"; + print "Auto-detection is *optional* - you can safely say \"n\" here.\n"; + print "\nTry to detect auth mechanisms? [y/N]: "; + $inval=; + chomp($inval); + if ($inval =~ /^y\b/i) { + # Yes, let's try to detect. + print "Trying to detect supported methods (SMTP)...\n"; + + # Special case! + # Check none by trying to relay to junk@microsoft.com + $host = $smtpServerAddress . ':' . $smtpPort; + my $sock = IO::Socket::INET->new($host); + print "Testing none:\t\t$WHT"; + if (!defined($sock)) { + print " ERROR TESTING\n"; + close $sock; + } else { + $got = <$sock>; # Discard greeting + print $sock "HELO $domain\r\n"; + $got = <$sock>; # Discard + print $sock "MAIL FROM:\r\n"; + $got = <$sock>; # Discard + print $sock "RCPT TO:\r\n"; + $got = <$sock>; # This is the important line + if ($got =~ /^250\b/) { # SMTP will relay without auth + print "SUPPORTED$NRM\n"; + } else { + print "NOT SUPPORTED$NRM\n"; + } + print $sock "RSET\r\n"; + print $sock "QUIT\r\n"; + close $sock; + } + # Try login (SquirrelMail default) + print "Testing login:\t\t"; + $tmp=detect_auth_support('SMTP',$host,'LOGIN'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print $WHT . "SUPPORTED$NRM\n"; + } else { + print $WHT . "NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . "ERROR DETECTING$NRM\n"; + } + + # Try plain + print "Testing plain:\t\t"; + $tmp=detect_auth_support('SMTP',$host,'PLAIN'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print $WHT . "SUPPORTED$NRM\n"; + } else { + print $WHT . "NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . "ERROR DETECTING$NRM\n"; + } + + # Try CRAM-MD5 + print "Testing CRAM-MD5:\t"; + $tmp=detect_auth_support('SMTP',$host,'CRAM-MD5'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print $WHT . "SUPPORTED$NRM\n"; + } else { + print $WHT . "NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . "ERROR DETECTING$NRM\n"; + } + + + print "Testing DIGEST-MD5:\t"; + $tmp=detect_auth_support('SMTP',$host,'DIGEST-MD5'); + if (defined($tmp)) { + if ($tmp eq 'YES') { + print $WHT . "SUPPORTED$NRM\n"; + } else { + print $WHT . "NOT SUPPORTED$NRM\n"; + } + } else { + print $WHT . "ERROR DETECTING$NRM\n"; + } + } + } + print "\nWhat authentication mechanism do you want to use for SMTP connections?\n"; + print $WHT . "none" . $NRM . " - Your SMTP server does not require authorization.\n"; + print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; + print $WHT . "plain" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; + print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n"; + print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n"; + print $WHT . "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n" . $NRM; + print "If you don't understand or are unsure, you probably want \"none\"\n\n"; + print "none, login, plain, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT"; + $inval=; + chomp($inval); + if ($inval =~ /^none\b/i) { + # SMTP doesn't necessarily require logins + $smtp_sitewide_user = ''; + $smtp_sitewide_pass = ''; + return "none"; + } + if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || + ($inval =~ /^login\b/i) || ($inval =~ /^plain\b/i)) { + command_smtp_sitewide_userpass($inval); + return lc($inval); + } elsif (trim($inval) eq '') { + command_smtp_sitewide_userpass($smtp_auth_mech); + return $smtp_auth_mech; + } else { + # user entered garbage + return $smtp_auth_mech; + } +} + +sub command_smtp_sitewide_userpass($) { + # get first function argument + my $auth_mech = shift(@_); + my $default, $tmp; + $auth_mech = lc(trim($auth_mech)); + if ($auth_mech eq 'none') { + return; + } + print "SMTP authentication uses IMAP username and password by default.\n"; + print "\n"; + print "Would you like to use other login and password for all SquirrelMail \n"; + print "SMTP connections?"; + if ($smtp_sitewide_user ne '') { + $default = 'y'; + print " [Y/n]:"; + } else { + $default = 'n'; + print " [y/N]:"; + } + $tmp=; + $tmp = trim($tmp); + + if ($tmp eq '') { + $tmp = $default; + } else { + $tmp = lc($tmp); + } + + if ($tmp eq 'n') { + $smtp_sitewide_user = ''; + $smtp_sitewide_pass = ''; + } elsif ($tmp eq 'y') { + print "Enter username [$smtp_sitewide_user]:"; + my $new_user = ; + $new_user = trim($new_user); + if ($new_user ne '') { + $smtp_sitewide_user = $new_user; + } + if ($smtp_sitewide_user ne '') { + print "If you don't enter any password, current sitewide password will be used.\n"; + print "If you enter space, password will be set to empty string.\n"; + print "Enter password:"; + my $new_pass = ; + if ($new_pass ne "\n") { + $smtp_sitewide_pass = trim($new_pass); + } + } else { + print "Invalid input. You must set username used for SMTP authentication.\n"; + print "Press enter to continue\n"; + $tmp = ; + } + } else { + print "Invalid input\n"; + print "Press enter to continue\n"; + $tmp = ; + } +} + +# Sub adds information about SMTP authentication type to menu +sub display_smtp_sitewide_userpass() { + my $ret = ''; + if ($smtp_auth_mech ne 'none') { + if ($smtp_sitewide_user ne '') { + $ret = ' (with custom username and password)'; + } else { + $ret = ' (with IMAP username and password)'; + } + } + return $ret; +} + + +# TLS +# This sub is reused for IMAP and SMTP +# Args: service name, default value +sub command113 { + my($default_val,$service,$inval); + $service=$_[0]; + $default_val=$_[1]; + print "TLS (Transport Layer Security) encrypts the traffic between server and client.\n"; + print "If you're familiar with SSL, you get the idea.\n"; + print "To use this feature, your " . $service . " server must offer TLS\n"; + print "capability, plus PHP 4.3.x with OpenSSL support.\n"; + print "Note that the 'STARTTLS' command is not supported; the server must\n"; + print "have a dedicated port listening for TLS connections.\n"; + print "\nIf your " . $service . " server is localhost, you can safely disable this.\n"; + print "If it is remote, you may wish to seriously consider enabling this.\n"; + print "Enable TLS (y/n) [$WHT"; + if ($default_val eq "true") { + print "y"; + } else { + print "n"; + } + print "$NRM]: $WHT"; + $inval=; + $inval =~ tr/yn//cd; + return "true" if ( $inval eq "y" ); + return "false" if ( $inval eq "n" ); + return $default_val; +} + +# $encode_header_key +sub command114{ + print "This encryption key allows the hiding of SquirrelMail Received:\n"; + print "headers in outbound messages. SquirrelMail uses the encryption\n"; + print "key to encode the username, remote address, and proxied address\n"; + print "and then stores that encoded information in X-Squirrel-* headers.\n"; + print "\n"; + print "Warning: the encryption function used to accomplish this is not\n"; + print "bulletproof. When used with a static encryption key as it is here,\n"; + print "it provides only minimal security and the encoded user information\n"; + print "in the X-Squirrel-* headers can be decoded quickly by a skilled\n"; + print "attacker.\n"; + print "\n"; + print "When you need to inspect an email sent from your system with the\n"; + print "X-Squirrel-* headers, you can decode the user information therein\n"; + print "by using the decrypt_headers.php script found in the SquirrelMail\n"; + print "contrib/ directory. You'll need the encryption key that you\n"; + print "defined here when doing so.\n"; + print "\n"; + print "Enter encryption key: "; + $new_encode_header_key = ; + if ( $new_encode_header_key eq "\n" ) { + $new_encode_header_key = $encode_header_key; + } else { + $new_encode_header_key =~ s/[\r\n]//g; + } + return $new_encode_header_key; +} + +#################################################################################### +#### MOTD #### +sub command71 { + print "\nYou can now create the welcome message that is displayed\n"; + print "every time a user logs on. You can use HTML or just plain\n"; + print +"text. If you do not wish to have one, just make it blank.\n\n(Type @ on a blank line to exit)\n"; + + $new_motd = ""; + do { + print "] "; + $line = ; + $line =~ s/[\r|\n]//g; + if ( $line ne "@" ) { + $line =~ s/ /\ \ /g; + $line =~ s/\t/\ \ \ \ /g; + $line =~ s/$/ /; + $line =~ s/\"/\\\"/g; + + $new_motd = $new_motd . $line; + } + } while ( $line ne "@" ); + return $new_motd; +} + +#################################################################################### +#### PLUGINS #### +sub command81 { + $command =~ s/[\s|\n|\r]*//g; + if ( $command > 0 ) { + $command = $command - 1; + if ( $command <= $#plugins ) { + @newplugins = (); + $ct = 0; + while ( $ct <= $#plugins ) { + if ( $ct != $command ) { + @newplugins = ( @newplugins, $plugins[$ct] ); + } + $ct++; + } + @plugins = @newplugins; + } elsif ( $command <= $#plugins + $#unused_plugins + 1 ) { + $num = $command - $#plugins - 1; + @newplugins = @plugins; + $ct = 0; + while ( $ct <= $#unused_plugins ) { + if ( $ct == $num ) { + @newplugins = ( @newplugins, $unused_plugins[$ct] ); + } + $ct++; + } + @plugins = @newplugins; + } + } + return @plugins; +} + +#################################################################################### +#### FOLDERS ##### +# default_folder_prefix +sub command21 { + print "Some IMAP servers (UW, for example) store mail and folders in\n"; + print "your user space in a separate subdirectory. This is where you\n"; + print "specify what that directory is.\n"; + print "\n"; + print "EXAMPLE: mail/"; + print "\n"; + print "NOTE: If you use Cyrus, or some server that would not use this\n"; + print " option, you must set this to 'none'.\n"; + print "\n"; + print "[$WHT$default_folder_prefix$NRM]: $WHT"; + $new_default_folder_prefix = ; + + if ( $new_default_folder_prefix eq "\n" ) { + $new_default_folder_prefix = $default_folder_prefix; + } else { + $new_default_folder_prefix =~ s/[\r\n]//g; + } + if ( ( $new_default_folder_prefix =~ /^\s*$/ ) || ( $new_default_folder_prefix =~ m/^none$/i ) ) { + $new_default_folder_prefix = ""; + } else { + # add the trailing delimiter only if we know what the server is. + if (($imap_server_type eq 'cyrus' and + $optional_delimiter eq 'detect') or + ($imap_server_type eq 'courier' and + $optional_delimiter eq 'detect')) { + $new_default_folder_prefix =~ s/\.*$/\./; + } elsif ($imap_server_type eq 'uw' and + $optional_delimiter eq 'detect') { + $new_default_folder_prefix =~ s/\/*$/\//; + } + } + return $new_default_folder_prefix; +} + +# Show Folder Prefix +sub command22 { + print "It is possible to set up the default folder prefix as a user\n"; + print "specific option, where each user can specify what their mail\n"; + print "folder is. If you set this to false, they will never see the\n"; + print "option, but if it is true, this option will appear in the\n"; + print "'options' section.\n"; + print "\n"; + print "NOTE: You set the default folder prefix in option '1' of this\n"; + print " section. That will be the default if the user doesn't\n"; + print " specify anything different.\n"; + print "\n"; + + if ( lc($show_prefix_option) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "\n"; + print "Show option (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $show_prefix_option = "true"; + } else { + $show_prefix_option = "false"; + } + return $show_prefix_option; +} + +# Trash Folder +sub command23a { + print "You can now specify where the default trash folder is located.\n"; + print "On servers where you do not want this, you can set it to anything\n"; + print "and set option 6 to false.\n"; + print "\n"; + print "This is relative to where the rest of your email is kept. You do\n"; + print "not need to worry about their mail directory. If this folder\n"; + print "would be ~/mail/trash on the filesystem, you only need to specify\n"; + print "that this is 'trash', and be sure to put 'mail/' in option 1.\n"; + print "\n"; + + print "[$WHT$trash_folder$NRM]: $WHT"; + $new_trash_folder = ; + if ( $new_trash_folder eq "\n" ) { + $new_trash_folder = $trash_folder; + } else { + if (check_imap_folder($new_trash_folder)) { + $new_trash_folder =~ s/[\r|\n]//g; + } else { + $new_trash_folder = $trash_folder; + } + } + return $new_trash_folder; +} + +# Sent Folder +sub command23b { + print "This is where messages that are sent will be stored. SquirrelMail\n"; + print "by default puts a copy of all outgoing messages in this folder.\n"; + print "\n"; + print "This is relative to where the rest of your email is kept. You do\n"; + print "not need to worry about their mail directory. If this folder\n"; + print "would be ~/mail/sent on the filesystem, you only need to specify\n"; + print "that this is 'sent', and be sure to put 'mail/' in option 1.\n"; + print "\n"; + + print "[$WHT$sent_folder$NRM]: $WHT"; + $new_sent_folder = ; + if ( $new_sent_folder eq "\n" ) { + $new_sent_folder = $sent_folder; + } else { + if (check_imap_folder($new_sent_folder)) { + $new_sent_folder =~ s/[\r|\n]//g; + } else { + $new_sent_folder = $sent_folder; + } + } + return $new_sent_folder; +} + +# Draft Folder +sub command23c { + print "You can now specify where the default draft folder is located.\n"; + print "On servers where you do not want this, you can set it to anything\n"; + print "and set option 9 to false.\n"; + print "\n"; + print "This is relative to where the rest of your email is kept. You do\n"; + print "not need to worry about their mail directory. If this folder\n"; + print "would be ~/mail/drafts on the filesystem, you only need to specify\n"; + print "that this is 'drafts', and be sure to put 'mail/' in option 1.\n"; + print "\n"; + + print "[$WHT$draft_folder$NRM]: $WHT"; + $new_draft_folder = ; + if ( $new_draft_folder eq "\n" ) { + $new_draft_folder = $draft_folder; + } else { + if (check_imap_folder($new_draft_folder)) { + $new_draft_folder =~ s/[\r|\n]//g; + } else { + $new_draft_folder = $draft_folder; + } + } + return $new_draft_folder; +} + +# default move to trash +sub command24a { + print "By default, should messages get moved to the trash folder? You\n"; + print "can specify the default trash folder in option 3. If this is set\n"; + print "to false, messages will get deleted immediately without moving\n"; + print "to the trash folder.\n"; + print "\n"; + print "Trash folder is currently: $trash_folder\n"; + print "\n"; + + if ( lc($default_move_to_trash) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "By default, move to trash (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $default_move_to_trash = "true"; + } else { + $default_move_to_trash = "false"; + } + return $default_move_to_trash; +} + +# default move to sent (save sent messages) +sub command24b { + print "By default, should copies of outgoing messages get saved in the\n"; + print "sent folder? You can specify the default sent folder in option 4.\n"; + print "If this is set to false, messages will get sent and no copy will\n"; + print "be made.\n"; + print "\n"; + print "Sent folder is currently: $sent_folder\n"; + print "\n"; + + if ( lc($default_move_to_sent) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "By default, save sent messages (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $default_move_to_sent = "true"; + } else { + $default_move_to_sent = "false"; + } + return $default_move_to_sent; +} + +# default save as draft +sub command24c { + print "By default, should the save to draft option be shown? You can\n"; + print "specify the default drafts folder in option 5. If this is set\n"; + print "to false, users will not be shown the save to draft option.\n"; + print "\n"; + print "Drafts folder is currently: $draft_folder\n"; + print "\n"; + + if ( lc($default_save_as_draft) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "By default, save as draft (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $default_save_as_draft = "true"; + } else { + $default_save_as_draft = "false"; + } + return $default_save_as_draft; +} + +# List special folders first +sub command27 { + print "SquirrelMail has what we call 'special folders' that are not\n"; + print "manipulated and viewed like normal folders. Some examples of\n"; + print "these folders would be INBOX, Trash, Sent, etc. This option\n"; + print "Simply asks if you want these folders listed first in the folder\n"; + print "listing.\n"; + print "\n"; + + if ( lc($list_special_folders_first) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "\n"; + print "List first (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $list_special_folders_first = "true"; + } else { + $list_special_folders_first = "false"; + } + return $list_special_folders_first; +} + +# Show special folders color +sub command28 { + print "SquirrelMail has what we call 'special folders' that are not\n"; + print "manipulated and viewed like normal folders. Some examples of\n"; + print "these folders would be INBOX, Trash, Sent, etc. This option\n"; + print "wants to know if we should display special folders in a\n"; + print "color than the other folders.\n"; + print "\n"; + + if ( lc($use_special_folder_color) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "\n"; + print "Show color (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $use_special_folder_color = "true"; + } else { + $use_special_folder_color = "false"; + } + return $use_special_folder_color; +} + +# Auto expunge +sub command29 { + print "The way that IMAP handles deleting messages is as follows. You\n"; + print "mark the message as deleted, and then to 'really' delete it, you\n"; + print "expunge it. This option asks if you want to just have messages\n"; + print "marked as deleted, or if you want SquirrelMail to expunge the \n"; + print "messages too.\n"; + print "\n"; + + if ( lc($auto_expunge) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Auto expunge (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $auto_expunge = "true"; + } else { + $auto_expunge = "false"; + } + return $auto_expunge; +} + +# Default sub of inbox +sub command210 { + print "Some IMAP servers have all folders as subfolders of INBOX.\n"; + print "This can cause some confusion in folder creation for users when\n"; + print "they try to create folders and don't put it as a subfolder of INBOX\n"; + print "and get permission errors. This option asks if you want folders\n"; + print "to be subfolders of INBOX by default.\n"; + print "\n"; + + if ( lc($default_sub_of_inbox) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Default sub of INBOX (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $default_sub_of_inbox = "true"; + } else { + $default_sub_of_inbox = "false"; + } + return $default_sub_of_inbox; +} + +# Show contain subfolder option +sub command211 { + print "Some IMAP servers (UW) make it so that there are two types of\n"; + print "folders. Those that contain messages, and those that contain\n"; + print "subfolders. If this is the case for your server, set this to\n"; + print "true, and it will ask the user whether the folder they are\n"; + print "creating contains subfolders or messages.\n"; + print "\n"; + + if ( lc($show_contain_subfolders_option) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Show option (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $show_contain_subfolders_option = "true"; + } else { + $show_contain_subfolders_option = "false"; + } + return $show_contain_subfolders_option; +} + +# Default Unseen Notify +sub command212 { + print "This option specifies where the users will receive notification\n"; + print "about unseen messages by default. This is of course an option that\n"; + print "can be changed on a user level.\n"; + print " 1 = No notification\n"; + print " 2 = Only on the INBOX\n"; + print " 3 = On all folders\n"; + print "\n"; + + print "Which one should be default (1,2,3)? [$WHT$default_unseen_notify$NRM]: $WHT"; + $new_show = ; + if ( $new_show =~ /^[1|2|3]\n/i ) { + $default_unseen_notify = $new_show; + } + $default_unseen_notify =~ s/[\r|\n]//g; + return $default_unseen_notify; +} + +# Default Unseen Type +sub command213 { + print "Here you can define the default way that unseen messages will be displayed\n"; + print "to the user in the folder listing on the left side.\n"; + print " 1 = Only unseen messages (4)\n"; + print " 2 = Unseen and Total messages (4/27)\n"; + print "\n"; + + print "Which one should be default (1,2)? [$WHT$default_unseen_type$NRM]: $WHT"; + $new_show = ; + if ( $new_show =~ /^[1|2]\n/i ) { + $default_unseen_type = $new_show; + } + $default_unseen_type =~ s/[\r|\n]//g; + return $default_unseen_type; +} + +# Auto create special folders +sub command214 { + print "Would you like the Sent, Trash, and Drafts folders to be created\n"; + print "automatically print for you when a user logs in? If the user\n"; + print "accidentally deletes their special folders, this option will\n"; + print "automatically create it again for them.\n"; + print "\n"; + + if ( lc($auto_create_special) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Auto create special folders? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $auto_create_special = "true"; + } else { + $auto_create_special = "false"; + } + return $auto_create_special; +} + +# Automatically delete folders +sub command215 { + if ( $imap_server_type eq "uw" ) { + print "UW IMAP servers will not allow folders containing"; + print "mail to also contain folders.\n"; + print "Deleting folders will bypass the trash folder and"; + print "be immediately deleted\n\n"; + print "If this is not the correct value for your server,\n"; + print "please use option D on the Main Menu to configure your server correctly.\n\n"; + print "Press enter to continue...\n"; + $new_delete = ; + $delete_folder = "true"; + } else { + print "Should folders selected for deletion bypass the Trash folder?\n\n"; + if ( lc($delete_folder) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Auto delete folders? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_delete = ; + if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $delete_folder = "true"; + } else { + $delete_folder = "false"; + } + } + return $delete_folder; +} + +#noselect fix +sub command216 { + print "Some IMAP servers allow subfolders to exist even if the parent\n"; + print "folders do not. This fixes some problems with the folder list\n"; + print "when this is the case, causing the /NoSelect folders to be displayed\n"; + print "\n"; + + if ( lc($noselect_fix_enable) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "enable noselect fix? (y/n) [$WHT$noselect_fix_enable$NRM]: $WHT"; + $noselect_fix_enable = ; + if ( ( $noselect_fix_enable =~ /^y\n/i ) || ( ( $noselect_fix_enable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $noselect_fix_enable = "true"; + } else { + $noselect_fix_enable = "false"; + } + return $noselect_fix_enable; +} + +#################################################################################### +#### GENERAL OPTIONS #### +# Data directory +sub command31 { + print "Specify the location for your data directory.\n"; + print "The path name can be absolute or relative (to the config directory).\n"; + print "You probably need to create this directory yourself. Here are two examples:\n"; + print " Absolute: /var/local/squirrelmail/data/\n"; + print " Relative: ../data/\n"; + print "Relative paths to directories outside of the SquirrelMail distribution\n"; + print "will be converted to their absolute path equivalents in config.php.\n\n"; + print "Note: There are potential security risks with having a writable directory\n"; + print "under the web server's root directory (ex: /home/httpd/html).\n"; + print "For this reason, it is recommended to put the data directory\n"; + print "in an alternate location of your choice. \n"; + print "\n"; + + print "[$WHT$data_dir$NRM]: $WHT"; + $new_data_dir = ; + if ( $new_data_dir eq "\n" ) { + $new_data_dir = $data_dir; + } else { + $new_data_dir =~ s/[\r|\n]//g; + } + if ( $new_data_dir =~ /^\s*$/ ) { + $new_data_dir = ""; + } else { + $new_data_dir =~ s/\/*$//g; + $new_data_dir =~ s/$/\//g; + } + return $new_data_dir; +} + +# Attachment directory +sub command32 { + print "Path to directory used for storing attachments while a mail is\n"; + print "being sent. The path name can be absolute or relative (to the config directory).\n"; + print "It doesn't matter. Here are two examples:\n"; + print " Absolute: /var/spool/squirrelmail/attach/\n"; + print " Relative: ../attach/\n"; + print "Relative paths to directories outside of the SquirrelMail distribution\n"; + print "will be converted to their absolute path equivalents in config.php.\n\n"; + print "Note: There are a few security considerations regarding this\n"; + print "directory:\n"; + print " 1. It should have the permission 733 (rwx-wx-wx) to make it\n"; + print " impossible for a random person with access to the webserver\n"; + print " to list files in this directory. Confidential data might\n"; + print " be laying around in there.\n"; + print " Depending on your user:group assignments, 730 (rwx-wx---)\n"; + print " may be possible, and more secure (e.g. root:apache)\n"; + print " 2. Since the webserver is not able to list the files in the\n"; + print " content is also impossible for the webserver to delete files\n"; + print " lying around there for too long.\n"; + print " 3. It should probably be another directory than the data\n"; + print " directory specified in option 3.\n"; + print "\n"; + + print "[$WHT$attachment_dir$NRM]: $WHT"; + $new_attachment_dir = ; + if ( $new_attachment_dir eq "\n" ) { + $new_attachment_dir = $attachment_dir; + } else { + $new_attachment_dir =~ s/[\r|\n]//g; + } + if ( $new_attachment_dir =~ /^\s*$/ ) { + $new_attachment_dir = ""; + } else { + $new_attachment_dir =~ s/\/*$//g; + $new_attachment_dir =~ s/$/\//g; + } + return $new_attachment_dir; +} + +sub command33 { + print "The directory hash level setting allows you to configure the level\n"; + print "of hashing that Squirremail employs in your data and attachment\n"; + print "directories. This value must be an integer ranging from 0 to 4.\n"; + print "When this value is set to 0, Squirrelmail will simply store all\n"; + print "files as normal in the data and attachment directories. However,\n"; + print "when set to a value from 1 to 4, a simple hashing scheme will be\n"; + print "used to organize the files in this directory. In short, the crc32\n"; + print "value for a username will be computed. Then, up to the first 4\n"; + print "digits of the hash, as set by this configuration value, will be\n"; + print "used to directory hash the files for that user in the data and\n"; + print "attachment directory. This allows for better performance on\n"; + print "servers with larger numbers of users.\n"; + print "\n"; + + print "[$WHT$dir_hash_level$NRM]: $WHT"; + $new_dir_hash_level = ; + if ( $new_dir_hash_level eq "\n" ) { + $new_dir_hash_level = $dir_hash_level; + } else { + $new_dir_hash_level =~ s/[\r|\n]//g; + } + if ( ( int($new_dir_hash_level) < 0 ) + || ( int($new_dir_hash_level) > 4 ) + || !( int($new_dir_hash_level) eq $new_dir_hash_level ) ) { + print "Invalid Directory Hash Level.\n"; + print "Value must be an integer ranging from 0 to 4\n"; + print "Hit enter to continue.\n"; + $enter_key = ; + + $new_dir_hash_level = $dir_hash_level; + } + + return $new_dir_hash_level; +} + +sub command34 { + print "This is the default size (in pixels) of the left folder list.\n"; + print "Default is 150, but you can set it to whatever you wish. This\n"; + print "is a user preference, so this will only show up as their default.\n"; + print "\n"; + print "[$WHT$default_left_size$NRM]: $WHT"; + $new_default_left_size = ; + if ( $new_default_left_size eq "\n" ) { + $new_default_left_size = $default_left_size; + } else { + $new_default_left_size =~ s/[\r|\n]//g; + } + return $new_default_left_size; +} + +sub command35 { + print "Some IMAP servers only have lowercase letters in the usernames\n"; + print "but they still allow people with uppercase to log in. This\n"; + print "causes a problem with the user's preference files. This option\n"; + print "transparently changes all usernames to lowercase."; + print "\n"; + + if ( lc($force_username_lowercase) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Convert usernames to lowercase (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + return "true"; + } + return "false"; +} + +sub command36 { + print ""; + print "\n"; + + if ( lc($default_use_priority) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + + print "Allow users to specify priority of outgoing mail (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + return "true"; + } + return "false"; +} + +sub command37 { + print ""; + print "\n"; + + if ( lc($default_hide_attribution) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + + print "Hide SM attributions (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + return "true"; + } + return "false"; +} + +sub command38 { + print ""; + print "\n"; + + if ( lc($default_use_mdn) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + + print "Enable support for read/delivery receipt support (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + return "true"; + } + return "false"; +} + +sub command39 { + print "In loosely managed environments, you may want to allow users\n"; + print "to edit their full name and email address. In strictly managed\n"; + print "environments, you may want to force users to use the name\n"; + print "and email address assigned to them.\n"; + print "\n"; + print "'y' - allow a user to edit their full name and email address,\n"; + print "'n' - users must use the assigned values.\n"; + print "\n"; + + if ( lc($edit_identity) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow editing of user's identity? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_edit = ; + if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $edit_identity = "true"; + $edit_name = "true"; + $hide_auth_header = "false"; + } else { + $edit_identity = "false"; + $edit_name = command39a(); + $hide_auth_header = command39b(); + } + return $edit_identity; +} + +sub command39a { + print $NRM; + print "\nAs a follow-up, this option allows you to choose if the user\n"; + print "can edit their full name even when you don't want them to\n"; + print "change their username\n"; + print "\n"; + + if ( lc($edit_name) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow editing of the users full name? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_edit = ; + if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $edit_name = "true"; + } else { + $edit_name = "false"; + } + return $edit_name; +} + +sub command39b { + print $NRM; + print "\nSquirrelMail adds username information to every outgoing\n"; + print "email in order to prevent possible sender forging when\n"; + print "users are allowed to change their email and/or full name.\n"; + print "\n"; + print "You can remove user information from this header (y) if you\n"; + print "think that it violates privacy or security.\n"; + print "\n"; + print "Note: SquirrelMail will refuse to remove that information\n"; + print "from the email headers if users are allowed to change their\n"; + print "identities, regardless of what you have set here.\n"; + print "\n"; + print "Note: If you have defined a header encryption key in your SMTP\n"; + print "or Sendmail settings (see the \"Server Settings\" option page),\n"; + print "this setting is ignored because all user information in outgoing\n"; + print "messages is encoded.\n"; + print "\n"; + + if ( lc($hide_auth_header) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Remove username from email headers? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_header = ; + if ( ( $new_header =~ /^y\n/i ) || ( ( $new_header =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $hide_auth_header = "true"; + } else { + $hide_auth_header = "false"; + } + return $edit_name; +} + +sub command310 { + print "This option allows you to choose if users can use thread sorting.\n"; + print "Your IMAP server must support the THREAD command for this to work.\n"; + print "\n"; + + if ( lc($allow_thread_sort) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow server side thread sorting? (y/n) [$WHT$default_value$NRM]: $WHT"; + $allow_thread_sort = ; + if ( ( $allow_thread_sort =~ /^y\n/i ) || ( ( $allow_thread_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $allow_thread_sort = "true"; + } else { + $allow_thread_sort = "false"; + } + return $allow_thread_sort; +} + +sub command311 { + print "This option allows you to choose if SM uses server-side sorting\n"; + print "Your IMAP server must support the SORT command for this to work\n"; + print "\n"; + + if ( lc($allow_server_sort) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow server-side sorting? (y/n) [$WHT$default_value$NRM]: $WHT"; + $allow_server_sort = ; + if ( ( $allow_server_sort =~ /^y\n/i ) || ( ( $allow_server_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $allow_server_sort = "true"; + } else { + $allow_server_sort = "false"; + } + return $allow_server_sort; +} + +sub command312 { + print "This option allows you to choose if SM uses charset search\n"; + print "Your IMAP server must support the SEARCH CHARSET command for this to work\n"; + print "\n"; + + if ( lc($allow_charset_search) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow charset searching? (y/n) [$WHT$default_value$NRM]: $WHT"; + $allow_charset_search = ; + if ( ( $allow_charset_search =~ /^y\n/i ) || ( ( $allow_charset_search =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $allow_charset_search = "true"; + } else { + $allow_charset_search = "false"; + } + return $allow_charset_search; +} + +sub command313 { + print "This option allows you to enable unique identifier (UID) support.\n"; + print "\n"; + + if ( lc($uid_support) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Enable Unique identifier (UID) support? (y/n) [$WHT$default_value$NRM]: $WHT"; + $uid_support = ; + if ( ( $uid_support =~ /^y\n/i ) || ( ( $uid_support =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $uid_support = "true"; + } else { + $uid_support = "false"; + } + return $uid_support; +} + +sub command314 { + print "This option allows you to change the name of the PHP session used\n"; + print "by SquirrelMail. Unless you know what you are doing, you probably\n"; + print "don't need or want to change this from the default of SQMSESSID.\n"; + print "[$WHT$session_name$NRM]: $WHT"; + $new_session_name = ; + chomp($new_session_name); + if ( $new_session_name eq "" ) { + $new_session_name = $session_name; + } + return $new_session_name; +} + +# set the location base for redirects (since 1.4.8) +sub command_config_location_base { + print "Here you can set the base part of the SquirrelMail URL.\n"; + print "It is normally autodetected but if that fails, use this\n"; + print "option to override.\n"; + print "It should contain only the protocol and hostname/port parts\n"; + print "of the URL; the full path will be appended automatically.\n\n"; + print "Examples:\nhttp://webmail.example.org\nhttp://webmail.example.com:8080\nhttps://webmail.example.com:6691\n\n"; + print "Do not add any path elements.\n"; + + print "URL base? [" .$WHT."autodetect$NRM]: $WHT"; + $new_config_location_base = ; + chomp($new_config_location_base); + $config_location_base = $new_config_location_base; + + return $config_location_base; +} + + +# only_secure_cookies (since 1.4.16) +sub command316 { + print "This option allows you to specify that if a user session is initiated\n"; + print "under a secure (HTTPS, SSL-encrypted) connection, the cookies given to\n"; + print "the browser will ONLY be transmitted via a secure connection henceforth.\n\n"; + print "Generally this is a Good Thing, and should NOT be disabled. However,\n"; + print "if you intend to use the Secure Login or Show SSL Link plugins to\n"; + print "encrypt the user login, but not the rest of the SquirrelMail session,\n"; + print "this can be turned off. Think twice before doing so.\n"; + print "\n"; + + if ( lc($only_secure_cookies) eq 'true' ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Transmit cookies only on secure connection when available? (y/n) [$WHT$default_value$NRM]: $WHT"; + $only_secure_cookies = ; + if ( ( $only_secure_cookies =~ /^y\n/i ) || ( ( $only_secure_cookies =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $only_secure_cookies = 'true'; + } else { + $only_secure_cookies = 'false'; + } + return $only_secure_cookies; +} + + + +# disable_security_tokens (since 1.4.20RC1) +sub command317 { + print "This option allows you to turn off the security checks in the forms\n"; + print "that SquirrelMail generates. It is NOT RECOMMENDED that you disable\n"; + print "this feature - otherwise, your users may be exposed to phishing and\n"; + print "other attacks.\n"; + print "Unless you know what you are doing, you should leave this set to \"NO\".\n"; + print "\n"; + + if ( lc($disable_security_tokens) eq 'true' ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Disable secure forms? (y/n) [$WHT$default_value$NRM]: $WHT"; + $disable_security_tokens = ; + if ( ( $disable_security_tokens =~ /^y\n/i ) || ( ( $disable_security_tokens =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $disable_security_tokens = 'true'; + } else { + $disable_security_tokens = 'false'; + } + return $disable_security_tokens; +} + + + +# check_referrer (since 1.4.20RC1) +sub command318 { + print "This option allows you to enable referal checks for all page requests\n"; + print "made to SquirrelMail. This can help ensure that page requests came\n"; + print "from the same server and not from an attacker's site (usually the\n"; + print "result of a XSS or phishing attack). To enable referal checking,\n"; + print "this setting can be set to the domain where your SquirrelMail is\n"; + print "being hosted (usually the same as the Domain setting under Server\n"; + print "Settings). For example, it could be \"example.com\", or if you\n"; + print "use a plugin (such as Login Manager) to host SquirrelMail on more\n"; + print "than one domain, you can set this to \"###DOMAIN###\" to tell it\n"; + print "to use the current domain.\n"; + print "\n"; + print "However, in some cases (where proxy servers are in use, etc.), the\n"; + print "domain might be different.\n"; + print "\n"; + print "NOTE that referal checks are not foolproof - they can be spoofed by\n"; + print "browsers, and some browsers intentionally don't send referal\n"; + print "information (in which case, the check is silently bypassed)\n"; + print "\n"; + + print "Referal requirement? [$WHT$check_referrer$NRM]: $WHT"; + $new_check_referrer = ; + chomp($new_check_referrer); + $check_referrer = $new_check_referrer; + + return $check_referrer; +} + + + +#################################################################################### +#### THEMES #### +sub command41 { + print "\nDefine the themes that you wish to use. If you have added "; + print "a theme of your own, just follow the instructions (?) about how to add "; + print "them. You can also change the default theme.\n"; + print "[theme] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + while ( $input ne "d" ) { + if ( $input =~ /^\s*l\s*/i ) { + $count = 0; + while ( $count <= $#theme_name ) { + if ( $count == $theme_default ) { + print " *"; + } else { + print " "; + } + if ( $count < 10 ) { + print " "; + } + $name = $theme_name[$count]; + $num_spaces = 35 - length($name); + for ( $i = 0 ; $i < $num_spaces ; $i++ ) { + $name = $name . " "; + } + + print " $count. $name"; + print "($theme_path[$count])\n"; + + $count++; + } + } elsif ( $input =~ /^\s*m\s*[0-9]+/i ) { + $old_def = $theme_default; + $theme_default = $input; + $theme_default =~ s/^\s*m\s*//; + if ( ( $theme_default > $#theme_name ) || ( $theme_default < 0 ) ) { + print "Cannot set default theme to $theme_default. That theme does not exist.\n"; + $theme_default = $old_def; + } + } elsif ( $input =~ /^\s*\+/ ) { + print "What is the name of this theme: "; + $name = ; + $name =~ s/[\r|\n]//g; + $theme_name[ $#theme_name + 1 ] = $name; + print "Be sure to put ../themes/ before the filename.\n"; + print "What file is this stored in (ex: ../themes/default_theme.php): "; + $name = ; + $name =~ s/[\r|\n]//g; + $theme_path[ $#theme_path + 1 ] = $name; + } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) { + if ( $input =~ /[0-9]+\s*$/ ) { + $rem_num = $input; + $rem_num =~ s/^\s*-\s*//g; + $rem_num =~ s/\s*$//; + } else { + $rem_num = $#theme_name; + } + if ( $rem_num == $theme_default ) { + print "You cannot remove the default theme!\n"; + } else { + $count = 0; + @new_theme_name = (); + @new_theme_path = (); + while ( $count <= $#theme_name ) { + if ( $count != $rem_num ) { + @new_theme_name = ( @new_theme_name, $theme_name[$count] ); + @new_theme_path = ( @new_theme_path, $theme_path[$count] ); + } + $count++; + } + @theme_name = @new_theme_name; + @theme_path = @new_theme_path; + if ( $theme_default > $rem_num ) { + $theme_default--; + } + } + } elsif ( $input =~ /^\s*t\s*/i ) { + print "\nStarting detection...\n\n"; + + opendir( DIR, "../themes" ); + @files = grep { /\.php$/i } sort(readdir(DIR)); + $cnt = 0; + while ( $cnt <= $#files ) { + $filename = "../themes/" . $files[$cnt]; + if ( $filename ne "../themes/index.php" ) { + $found = 0; + for ( $x = 0 ; $x <= $#theme_path ; $x++ ) { + if ( $theme_path[$x] eq $filename ) { + $found = 1; + } + } + if ( $found != 1 ) { + print "** Found theme: $filename\n"; + $def = $files[$cnt]; + $def =~ s/_/ /g; + $def =~ s/\.php//g; + $def = lc($def); + #$def =~ s/(^\w+)/ucfirst $1/eg; + #$def =~ s/(\s+)(\w+)/$1 . ucfirst $2/eg; + $def =~ s/(^\w+)|(\s+)(\w+)/ucfirst $1 . $2 . ucfirst $3/eg; + print " What is its name? [$def]: "; + $nm = ; + $nm =~ s/^\s+|\s+$|[\n|\r]//g; + if ( $nm eq '' ) { $nm = $def; } + $theme_name[ $#theme_name + 1 ] = $nm; + $theme_path[ $#theme_path + 1 ] = $filename; + } + } + $cnt++; + } + print "\n"; + for ( $cnt = 0 ; $cnt <= $#theme_path ; $cnt++ ) { + $filename = $theme_path[$cnt]; + if ( !( -e $filename ) ) { + print " Removing $filename (file not found)\n"; + $offset = 0; + @new_theme_name = (); + @new_theme_path = (); + for ( $x = 0 ; $x < $#theme_path ; $x++ ) { + if ( $theme_path[$x] eq $filename ) { + $offset = 1; + } + if ( $offset == 1 ) { + $new_theme_name[$x] = $theme_name[ $x + 1 ]; + $new_theme_path[$x] = $theme_path[ $x + 1 ]; + } else { + $new_theme_name[$x] = $theme_name[$x]; + $new_theme_path[$x] = $theme_path[$x]; + } + } + @theme_name = @new_theme_name; + @theme_path = @new_theme_path; + } + } + print "\nDetection complete!\n\n"; + + closedir DIR; + } elsif ( $input =~ /^\s*\?\s*/ ) { + print ".-------------------------.\n"; + print "| t (detect themes) |\n"; + print "| + (add theme) |\n"; + print "| - N (remove theme) |\n"; + print "| m N (mark default) |\n"; + print "| l (list themes) |\n"; + print "| d (done) |\n"; + print "`-------------------------'\n"; + } + print "[theme] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + } +} + +# Theme - CSS file +sub command42 { + print "You may specify a cascading style-sheet (CSS) file to be included\n"; + print "on each html page generated by SquirrelMail. The CSS file is useful\n"; + print "for specifying a site-wide font. If you're not familiar with CSS\n"; + print "files, leave this blank.\n"; + print "\n"; + print "To clear out an existing value, just type a space for the input.\n"; + print "\n"; + print "Please be aware of the following: \n"; + print " - Relative URLs are relative to the config dir\n"; + print " to use the themes directory, use ../themes/css/newdefault.css\n"; + print " - To specify a css file defined outside the SquirrelMail source tree\n"; + print " use the absolute URL the webserver would use to include the file\n"; + print " e.g. http://example.com/css/mystyle.css or /css/mystyle.css\n"; + print "\n"; + print "[$WHT$theme_css$NRM]: $WHT"; + $new_theme_css = ; + + if ( $new_theme_css eq "\n" ) { + $new_theme_css = $theme_css; + } else { + $new_theme_css =~ s/[\r|\n]//g; + } + $new_theme_css =~ s/^\s*//; + return $new_theme_css; +} +#################################################################################### +#### Address books #### +# LDAP +sub command61 { + print "You can now define different LDAP servers.\n"; + print "Please ensure proper permissions for config.php when including\n"; + print "sensitive passwords.\n\n"; + print "[ldap] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + while ( $input ne "d" ) { + if ( $input =~ /^\s*l\s*/i ) { + $count = 0; + while ( $count <= $#ldap_host ) { + print "$count. $ldap_host[$count]\n"; + print " base: $ldap_base[$count]\n"; + if ( $ldap_charset[$count] ) { + print " charset: $ldap_charset[$count]\n"; + } + if ( $ldap_port[$count] ) { + print " port: $ldap_port[$count]\n"; + } + if ( $ldap_name[$count] ) { + print " name: $ldap_name[$count]\n"; + } + if ( $ldap_maxrows[$count] ) { + print " maxrows: $ldap_maxrows[$count]\n"; + } + if ( $ldap_binddn[$count] ) { + print " binddn: $ldap_binddn[$count]\n"; + if ( $ldap_bindpw[$count] ) { + print " bindpw: $ldap_bindpw[$count]\n"; + } + } + if ( $ldap_protocol[$count] ) { + print " protocol: $ldap_protocol[$count]\n"; + } + + print "\n"; + $count++; + } + } elsif ( $input =~ /^\s*\+/ ) { + $sub = $#ldap_host + 1; + + print "First, we need to have the hostname or the IP address where\n"; + print "this LDAP server resides. Example: ldap.bigfoot.com\n"; + print "\n"; + print "You can use any URI compatible with your LDAP library. ldaps\n"; + print "and ldapi URIs can be used to create secure LDAP connections.\n"; + print "hostname: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_host[$sub] = $name; + + print "\n"; + + print "Next, we need the server root (base dn). For this, an empty\n"; + print "string is allowed.\n"; + print "Example: ou=member_directory,o=netcenter.com\n"; + print "base: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_base[$sub] = $name; + + print "\n"; + + print "This is the TCP/IP port number for the LDAP server. Default\n"; + print "port is 389. This is optional. Press ENTER for default.\n"; + print "port: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_port[$sub] = $name; + + print "\n"; + + print "This is the charset for the server. Default is utf-8. This\n"; + print "is also optional. Press ENTER for default.\n"; + print "charset: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_charset[$sub] = $name; + + print "\n"; + + print "This is the name for the server, used to tag the results of\n"; + print "the search. Default it \"LDAP: hostname\". Press ENTER for default\n"; + print "name: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_name[$sub] = $name; + + print "\n"; + + print "You can specify the maximum number of rows in the search result.\n"; + print "Default is unlimited. Press ENTER for default.\n"; + print "maxrows: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_maxrows[$sub] = $name; + + print "\n"; + + print "If your LDAP server does not like anonymous logins, you can specify bind DN.\n"; + print "Default is none, anonymous bind. Press ENTER for default.\n"; + print "binddn: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_binddn[$sub] = $name; + + print "\n"; + + if ( $ldap_binddn[$sub] ne '' ) { + + print "Now, please specify password for that DN.\n"; + print "bindpw: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_bindpw[$sub] = $name; + + print "\n"; + } + + print "You can specify bind protocol version here.\n"; + print "Default protocol version depends on your php ldap settings.\n"; + print "Press ENTER for default.\n"; + print "protocol: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_protocol[$sub] = $name; + + print "\n"; + + } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) { + if ( $input =~ /[0-9]+\s*$/ ) { + $rem_num = $input; + $rem_num =~ s/^\s*-\s*//g; + $rem_num =~ s/\s*$//; + } else { + $rem_num = $#ldap_host; + } + $count = 0; + @new_ldap_host = (); + @new_ldap_base = (); + @new_ldap_port = (); + @new_ldap_name = (); + @new_ldap_charset = (); + @new_ldap_maxrows = (); + @new_ldap_bindpw = (); + @new_ldap_binddn = (); + @new_ldap_protocol = (); + + while ( $count <= $#ldap_host ) { + if ( $count != $rem_num ) { + @new_ldap_host = ( @new_ldap_host, $ldap_host[$count] ); + @new_ldap_base = ( @new_ldap_base, $ldap_base[$count] ); + @new_ldap_port = ( @new_ldap_port, $ldap_port[$count] ); + @new_ldap_name = ( @new_ldap_name, $ldap_name[$count] ); + @new_ldap_charset = ( @new_ldap_charset, $ldap_charset[$count] ); + @new_ldap_maxrows = ( @new_ldap_maxrows, $ldap_maxrows[$count] ); + @new_ldap_binddn = ( @new_ldap_binddn, $ldap_binddn[$count] ); + @new_ldap_bindpw = ( @new_ldap_bindpw, $ldap_bindpw[$count] ); + @new_ldap_protocol = ( @new_ldap_protocol, $ldap_protocol[$count] ); + } + $count++; + } + @ldap_host = @new_ldap_host; + @ldap_base = @new_ldap_base; + @ldap_port = @new_ldap_port; + @ldap_name = @new_ldap_name; + @ldap_charset = @new_ldap_charset; + @ldap_maxrows = @new_ldap_maxrows; + @ldap_binddn = @new_ldap_binddn; + @ldap_bindpw = @new_ldap_bindpw; + @ldap_protocol = @new_ldap_protocol; + } elsif ( $input =~ /^\s*\?\s*/ ) { + print ".-------------------------.\n"; + print "| + (add host) |\n"; + print "| - N (remove host) |\n"; + print "| l (list hosts) |\n"; + print "| d (done) |\n"; + print "`-------------------------'\n"; + } + print "[ldap] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + } +} + +# Javascript or html address book +sub command62 { + print "Some of our developers have come up with very good javascript interface\n"; + print "for searching through address books, however, our original goals said\n"; + print "that we would be 100% HTML. In order to make it possible to use their\n"; + print "interface, and yet stick with our goals, we have also written a plain\n"; + print "HTML version of the search. Here, you can choose which version to use.\n"; + print "\n"; + print "This is just the default value. It is also a user option that each\n"; + print "user can configure individually\n"; + print "\n"; + + if ( lc($default_use_javascript_addr_book) eq "true" ) { + $default_value = "y"; + } else { + $default_use_javascript_addr_book = "false"; + $default_value = "n"; + } + print "Use javascript version by default (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $default_use_javascript_addr_book = "true"; + } else { + $default_use_javascript_addr_book = "false"; + } + return $default_use_javascript_addr_book; +} + +# global filebased address book +sub command63 { + print "If you want to use global file address book, then you\n"; + print "must set this option to a valid value. If option does\n"; + print "not have path elements, system assumes that file is\n"; + print "stored in data directory. If relative path is set, it is\n"; + print "relative to main squirrelmail directory. If value is empty,\n"; + print "address book is not enabled.\n"; + print "\n"; + + print "[$WHT$abook_global_file$NRM]: $WHT"; + $new_abook_global_file = ; + if ( $new_abook_global_file eq "\n" ) { + $new_abook_global_file = $abook_global_file; + } else { + $new_abook_global_file =~ s/[\r\n]//g; + } + return $new_abook_global_file; +} + +# writing into global filebased abook control +sub command64 { + print "This setting controls writing into global file address\n"; + print "book options. Address book file must be writeable by\n"; + print "webserver's user, if you want to enable this option.\n"; + print "\n"; + + if ( lc($abook_global_file_writeable) eq 'true' ) { + $default_value = "y"; + } else { + $abook_global_file_writeable = 'false'; + $default_value = "n"; + } + print "Allow writing into global file address book (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $abook_global_file_writeable = 'true'; + } else { + $abook_global_file_writeable = 'false'; + } + return $abook_global_file_writeable; +} + +# listing of global filebased abook control +sub command_abook_global_file_listing { + print "This setting controls listing of global file address book.\n"; + print "\n"; + + if ( lc($abook_global_file_listing) eq 'true' ) { + $default_value = "y"; + } else { + $abook_global_file_listing = 'false'; + $default_value = "n"; + } + print "Allow listing of global file address book (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_show = ; + if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $abook_global_file_listing = 'true'; + } else { + $abook_global_file_listing = 'false'; + } + return $abook_global_file_listing; +} + +# controls $abook_file_line_length setting +sub command_abook_file_line_length { + print "This setting controls space allocated to file based address book records.\n"; + print "End users will be unable to save address book entry, if total entry size \n"; + print "(quoted address book fields + 4 delimiters + linefeed) exceeds allowed \n"; + print "address book length size.\n"; + print "\n"; + print "Same setting is applied to personal and global file based address books.\n"; + print "\n"; + print "It is strongly recommended to keep default setting value. Change it only\n"; + print "if you really want to store address book entries that are bigger than two\n"; + print "kilobytes (2048).\n"; + print "\n"; + + print "Enter allowed address book line length [$abook_file_line_length]: "; + my $tmp = ; + $tmp = trim($tmp); + # value is not modified, if user hits Enter or enters space + if ($tmp ne '') { + # make sure that input is numeric + if ($tmp =~ /^\d+$/) { + $abook_file_line_length = $tmp; + } else { + print "If you want to change this setting, you must enter number.\n"; + print "If you want to keep original setting - enter space.\n\n"; + print "Press Enter to continue..."; + $tmp = ; + } + } +} + +#################################################################################### +#### Database #### +sub command91 { + print "If you want to store your users address book details in a database then\n"; + print "you need to set this DSN to a valid value. The format for this is:\n"; + print "mysql://user:pass\@hostname/dbname\n"; + print "Where mysql can be one of the databases PHP supports, the most common\n"; + print "of these are mysql, msql and pgsql.\n"; + print "Please ensure proper permissions for config.php when including\n"; + print "sensitive passwords.\n\n"; + print "If the DSN is left empty (hit space and then return) the database\n"; + print "related code for address books will not be used.\n"; + print "\n"; + + if ( $addrbook_dsn eq "" ) { + $default_value = "Disabled"; + } else { + $default_value = $addrbook_dsn; + } + print "[$WHT$addrbook_dsn$NRM]: $WHT"; + $new_dsn = ; + if ( $new_dsn eq "\n" ) { + $new_dsn = ""; + } else { + $new_dsn =~ s/[\r|\n]//g; + $new_dsn =~ s/^\s+$//g; + } + return $new_dsn; +} + +sub command92 { + print "This is the name of the table you want to store the address book\n"; + print "data in, it defaults to 'address'\n"; + print "\n"; + print "[$WHT$addrbook_table$NRM]: $WHT"; + $new_table = ; + if ( $new_table eq "\n" ) { + $new_table = $addrbook_table; + } else { + $new_table =~ s/[\r|\n]//g; + } + return $new_table; +} + +sub command93 { + print "If you want to store your users preferences in a database then\n"; + print "you need to set this DSN to a valid value. The format for this is:\n"; + print "mysql://user:pass\@hostname/dbname\n"; + print "Where mysql can be one of the databases PHP supports, the most common\n"; + print "of these are mysql, msql and pgsql.\n"; + print "Please ensure proper permissions for config.php when including\n"; + print "sensitive passwords.\n\n"; + print "If the DSN is left empty (hit space and then return) the database\n"; + print "related code for address books will not be used.\n"; + print "\n"; + + if ( $prefs_dsn eq "" ) { + $default_value = "Disabled"; + } else { + $default_value = $prefs_dsn; + } + print "[$WHT$prefs_dsn$NRM]: $WHT"; + $new_dsn = ; + if ( $new_dsn eq "\n" ) { + $new_dsn = ""; + } else { + $new_dsn =~ s/[\r|\n]//g; + $new_dsn =~ s/^\s+$//g; + } + return $new_dsn; +} + +sub command94 { + print "This is the name of the table you want to store the preferences\n"; + print "data in, it defaults to 'userprefs'\n"; + print "\n"; + print "[$WHT$prefs_table$NRM]: $WHT"; + $new_table = ; + if ( $new_table eq "\n" ) { + $new_table = $prefs_table; + } else { + $new_table =~ s/[\r|\n]//g; + } + return $new_table; +} + +sub command95 { + print "This is the name of the field in which you want to store the\n"; + print "username of the person the prefs are for. It defaults to 'user'\n"; + print "\n"; + print "[$WHT$prefs_user_field$NRM]: $WHT"; + $new_field = ; + if ( $new_field eq "\n" ) { + $new_field = $prefs_user_field; + } else { + $new_field =~ s/[\r|\n]//g; + } + return $new_field; +} + +sub command96 { + print "This is the name of the field in which you want to store the\n"; + print "preferences keyword. It defaults to 'prefkey'\n"; + print "\n"; + print "[$WHT$prefs_key_field$NRM]: $WHT"; + $new_field = ; + if ( $new_field eq "\n" ) { + $new_field = $prefs_key_field; + } else { + $new_field =~ s/[\r|\n]//g; + } + return $new_field; +} + +sub command97 { + print "This is the name of the field in which you want to store the\n"; + print "preferences value. It defaults to 'prefval'\n"; + print "\n"; + print "[$WHT$prefs_val_field$NRM]: $WHT"; + $new_field = ; + if ( $new_field eq "\n" ) { + $new_field = $prefs_val_field; + } else { + $new_field =~ s/[\r|\n]//g; + } + return $new_field; +} + +sub command98 { + print "If you want to store your global address book in a database then\n"; + print "you need to set this DSN to a valid value. The format for this is:\n"; + print "mysql://user:pass\@hostname/dbname\n"; + print "Where mysql can be one of the databases PHP supports, the most common\n"; + print "of these are mysql, msql and pgsql.\n"; + print "Please ensure proper permissions for config.php when including\n"; + print "sensitive passwords.\n\n"; + print "If the DSN is left empty (hit space and then return) the database\n"; + print "related code for global SQL address book will not be used.\n"; + print "\n"; + + if ( $addrbook_global_dsn eq "" ) { + $default_value = "Disabled"; + } else { + $default_value = $addrbook_global_dsn; + } + print "[$WHT$addrbook_global_dsn$NRM]: $WHT"; + $new_dsn = ; + if ( $new_dsn eq "\n" ) { + $new_dsn = ""; + } else { + $new_dsn =~ s/[\r\n]//g; + $new_dsn =~ s/^\s+$//g; + } + return $new_dsn; +} + +sub command99 { + print "This is the name of the table you want to store the global address book\n"; + print "data in. Default table name is 'global_abook'. Address book uses same\n"; + print "database format as personal address book.\n"; + print "\n"; + print "[$WHT$addrbook_global_table$NRM]: $WHT"; + $new_table = ; + if ( $new_table eq "\n" ) { + $new_table = $addrbook_global_table; + } else { + $new_table =~ s/[\r\n]//g; + } + return $new_table; +} + +sub command910 { + print "This option controls users\' ability to add or modify records stored \n"; + print "in global address book\n"; + + if ( lc($addrbook_global_writeable) eq 'true' ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow writing into global address book? (y/n) [$WHT$default_value$NRM]: $WHT"; + $addrbook_global_writeable = ; + if ( ( $addrbook_global_writeable =~ /^y\n/i ) || ( ( $addrbook_global_writeable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $addrbook_global_writeable = 'true'; + } else { + $addrbook_global_writeable = 'false'; + } + return $addrbook_global_writeable; +} + +sub command911 { + print "Enable this option if you want to see listing of addresses stored \n"; + print "in global address book\n"; + + if ( lc($addrbook_global_listing) eq 'true' ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Allow listing of global address book? (y/n) [$WHT$default_value$NRM]: $WHT"; + $addrbook_global_listing = ; + if ( ( $addrbook_global_listing =~ /^y\n/i ) || ( ( $addrbook_global_listing =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $addrbook_global_listing = 'true'; + } else { + $addrbook_global_listing = 'false'; + } + return $addrbook_global_listing; +} + + +#################################################################################### +#### Languages #### +# Default language +sub commandA1 { + print "SquirrelMail attempts to set the language in many ways. If it\n"; + print "can not figure it out in another way, it will default to this\n"; + print "language. Please use the code for the desired language.\n"; + print "\n"; + print "[$WHT$squirrelmail_default_language$NRM]: $WHT"; + $new_language = ; + if ( $new_language eq "\n" ) { + $new_language = $squirrelmail_default_language; + } else { + $new_language =~ s/[\r|\n]//g; + $new_language =~ s/^\s+$//g; + } + return $new_language; +} + +# Default Charset +sub commandA2 { + print "This option controls what character set is used when sending\n"; + print "mail and when sending HTML to the browser.\n"; + print "\n"; + print "This option is used only when default language is 'en_US'.\n"; + print "\n"; + + print "[$WHT$default_charset$NRM]: $WHT"; + $new_default_charset = ; + if ( $new_default_charset eq "\n" ) { + $new_default_charset = $default_charset; + } else { + $new_default_charset =~ s/[\r|\n]//g; + } + return $new_default_charset; +} + +# Lossy encoding +sub commandA3 { + print "Enable this option if you want to allow lossy charset encoding in message\n"; + print "composition pages. This option allows charset conversions when output\n"; + print "charset does not support all symbols used in original charset. Symbols\n"; + print "unsupported by output charset will be replaced with question marks.\n"; + print "\n"; + + if ( lc($lossy_encoding) eq 'true' ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Enable lossy encoding? (y/n) [$WHT$default_value$NRM]: $WHT"; + $lossy_encoding = ; + if ( ( $lossy_encoding =~ /^y\n/i ) || ( ( $lossy_encoding =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $lossy_encoding = 'true'; + } else { + $lossy_encoding = 'false'; + } + return $lossy_encoding; +} + +#### End of menu functions +#################################################################################### + +sub save_data { + $tab = " "; + if ( open( CF, ">config.php" ) ) { + print CF " '$ldap_host[$count]',\n"; + # string + print CF " 'base' => '$ldap_base[$count]'"; + if ( $ldap_name[$count] ) { + print CF ",\n"; + # string + print CF " 'name' => '$ldap_name[$count]'"; + } + if ( $ldap_port[$count] ) { + print CF ",\n"; + # integer + print CF " 'port' => $ldap_port[$count]"; + } + if ( $ldap_charset[$count] ) { + print CF ",\n"; + # string + print CF " 'charset' => '$ldap_charset[$count]'"; + } + if ( $ldap_maxrows[$count] ) { + print CF ",\n"; + # integer + print CF " 'maxrows' => $ldap_maxrows[$count]"; + } + if ( $ldap_binddn[$count] ) { + print CF ",\n"; + # string + print CF " 'binddn' => '$ldap_binddn[$count]'"; + if ( $ldap_bindpw[$count] ) { + print CF ",\n"; + # string + print CF " 'bindpw' => '$ldap_bindpw[$count]'"; + } + } + if ( $ldap_protocol[$count] ) { + print CF ",\n"; + # integer + print CF " 'protocol' => $ldap_protocol[$count]"; + } + print CF "\n"; + print CF ");\n"; + print CF "\n"; + } + + # Global file based address book + # string + print CF "\$abook_global_file = '$abook_global_file';\n"; + # boolean + print CF "\$abook_global_file_writeable = $abook_global_file_writeable;\n"; + # boolean + print CF "\$abook_global_file_listing = $abook_global_file_listing;\n"; + # integer + print CF "\$abook_file_line_length = $abook_file_line_length;\n\n"; + + ## Database + # string + print CF "\$addrbook_dsn = '$addrbook_dsn';\n"; + # string + print CF "\$addrbook_table = '$addrbook_table';\n\n"; + # string + print CF "\$prefs_dsn = '$prefs_dsn';\n"; + # string + print CF "\$prefs_table = '$prefs_table';\n"; + # string + print CF "\$prefs_user_field = '$prefs_user_field';\n"; + # string + print CF "\$prefs_key_field = '$prefs_key_field';\n"; + # string + print CF "\$prefs_val_field = '$prefs_val_field';\n"; + # string + print CF "\$addrbook_global_dsn = '$addrbook_global_dsn';\n"; + # string + print CF "\$addrbook_global_table = '$addrbook_global_table';\n"; + # boolean + print CF "\$addrbook_global_writeable = $addrbook_global_writeable;\n"; + # boolean + print CF "\$addrbook_global_listing = $addrbook_global_listing;\n\n"; + # boolean + print CF "\$no_list_for_subscribe = $no_list_for_subscribe;\n"; + + # string + print CF "\$smtp_auth_mech = '$smtp_auth_mech';\n"; + print CF "\$imap_auth_mech = '$imap_auth_mech';\n"; + print CF "\$smtp_sitewide_user = '" . quote_single($smtp_sitewide_user) . "';\n"; + print CF "\$smtp_sitewide_pass = '" . quote_single($smtp_sitewide_pass) . "';\n"; + # boolean + print CF "\$use_imap_tls = $use_imap_tls;\n"; + print CF "\$use_smtp_tls = $use_smtp_tls;\n"; + + print CF "\$session_name = '$session_name';\n"; + + # boolean + print CF "\$only_secure_cookies = $only_secure_cookies;\n"; + print CF "\$disable_security_tokens = $disable_security_tokens;\n"; + + # string + print CF "\$check_referrer = '$check_referrer';\n"; + + print CF "\n"; + print CF "\$config_location_base = '$config_location_base';\n"; + + print CF "\n"; + print CF "\@include SM_PATH . 'config/config_local.php';\n"; + + print CF "\n"; + close CF; + + print "Data saved in config.php\n"; + } else { + print "Error saving config.php: $!\n"; + } +} + +sub set_defaults { + clear_screen(); + print $WHT. "SquirrelMail Configuration : " . $NRM; + if ( $config == 1 ) { print "Read: config.php"; } + elsif ( $config == 2 ) { print "Read: config_default.php"; } + print "\n"; + print "---------------------------------------------------------\n"; + + print "While we have been building SquirrelMail, we have discovered some\n"; + print "preferences that work better with some servers that don't work so\n"; + print "well with others. If you select your IMAP server, this option will\n"; + print "set some pre-defined settings for that server.\n"; + print "\n"; + print "Please note that you will still need to go through and make sure\n"; + print "everything is correct. This does not change everything. There are\n"; + print "only a few settings that this will change.\n"; + print "\n"; + + $continue = 0; + while ( $continue != 1 ) { + print "Please select your IMAP server:\n"; + print $list_supported_imap_servers; + print "\n"; + print " quit = Do not change anything\n"; + print "Command >> "; + $server = ; + $server =~ s/[\r|\n]//g; + + # variable is used to display additional messages. + $message = ""; + + print "\n"; + if ( $server eq "cyrus" ) { + $imap_server_type = "cyrus"; + $default_folder_prefix = ""; + $trash_folder = "INBOX.Trash"; + $sent_folder = "INBOX.Sent"; + $draft_folder = "INBOX.Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = true; + $show_contain_subfolders_option = false; + $optional_delimiter = "."; + $disp_default_folder_prefix = ""; + + $continue = 1; + } elsif ( $server eq "uw" ) { + $imap_server_type = "uw"; + $default_folder_prefix = "mail/"; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = true; + $default_sub_of_inbox = false; + $show_contain_subfolders_option = true; + $optional_delimiter = "/"; + $disp_default_folder_prefix = $default_folder_prefix; + $delete_folder = true; + + $continue = 1; + } elsif ( $server eq "exchange" ) { + $imap_server_type = "exchange"; + $default_folder_prefix = ""; + $default_sub_of_inbox = true; + $trash_folder = "INBOX/Deleted Items"; + $sent_folder = "INBOX/Sent Items"; + $drafts_folder = "INBOX/Drafts"; + $show_prefix_option = false; + $show_contain_subfolders_option = false; + $optional_delimiter = "detect"; + $disp_default_folder_prefix = ""; + + $continue = 1; + } elsif ( $server eq "courier" ) { + $imap_server_type = "courier"; + $default_folder_prefix = "INBOX."; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = true; + $show_contain_subfolders_option = false; + $optional_delimiter = "."; + $disp_default_folder_prefix = $default_folder_prefix; + $delete_folder = true; + + $continue = 1; + } elsif ( $server eq "macosx" ) { + $imap_server_type = "macosx"; + $default_folder_prefix = "INBOX/"; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = true; + $show_contain_subfolders_option = false; + $optional_delimiter = "detect"; + $allow_charset_search = false; + $disp_default_folder_prefix = $default_folder_prefix; + + $continue = 1; + } elsif ( $server eq "hmailserver" ) { + $imap_server_type = "hmailserver"; + $default_folder_prefix = ""; + $trash_folder = "INBOX.Trash"; + $sent_folder = "INBOX.Sent"; + $draft_folder = "INBOX.Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = true; + $show_contain_subfolders_option = false; + $optional_delimiter = "detect"; + $allow_charset_search = false; + $disp_default_folder_prefix = $default_folder_prefix; + $delete_folder = false; + $force_username_lowercase = false; + + $continue = 1; + } elsif ( $server eq "mercury32" ) { + $imap_server_type = "mercury32"; + $default_folder_prefix = ""; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = true; + $show_contain_subfolders_option = true; + $optional_delimiter = "detect"; + $delete_folder = true; + $force_username_lowercase = true; + + $continue = 1; + } elsif ( $server eq "dovecot" ) { + $imap_server_type = "dovecot"; + $default_folder_prefix = ""; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = false; + $show_contain_subfolders_option = false; + $delete_folder = false; + $force_username_lowercase = true; + $optional_delimiter = "detect"; + $disp_default_folder_prefix = ""; + + $continue = 1; + } elsif ( $server eq "bincimap" ) { + $imap_server_type = "bincimap"; + $default_folder_prefix = "INBOX/"; + $trash_folder = "Trash"; + $sent_folder = "Sent"; + $draft_folder = "Drafts"; + $show_prefix_option = false; + $default_sub_of_inbox = false; + $show_contain_subfolders_option = false; + $delete_folder = true; + $force_username_lowercase = false; + $optional_delimiter = "detect"; + $disp_default_folder_prefix = $default_folder_prefix; + + # Default folder prefix depends on used depot. + $message = "\nIf you use IMAPdir depot, you must set default folder prefix to empty string.\n"; + + $continue = 1; + } elsif ( $server eq "gmail" ) { + $imap_server_type = "gmail"; + $default_folder_prefix = ""; + $trash_folder = "[Gmail]/Trash"; + $default_move_to_trash = true; + $sent_folder = "[Gmail]/Sent Mail"; + $draft_folder = "[Gmail]/Drafts"; + $auto_create_special = false; + $show_prefix_option = false; + $default_sub_of_inbox = false; + $show_contain_subfolders_option = false; + $delete_folder = true; + $force_username_lowercase = false; + $optional_delimiter = "/"; + $disp_default_folder_prefix = ""; + $domain = "gmail.com"; + $imapServerAddress = "imap.gmail.com"; + $imapPort = 993; + $use_imap_tls = true; + $imap_auth_mech = "login"; + $smtpServerAddress = "smtp.gmail.com"; + $smtpPort = 465; + $pop_before_smtp = false; + $useSendmail = false; + $use_smtp_tls = true; + $smtp_auth_mech = "login"; + $continue = 1; + + # Gmail changes system folder names (Drafts, Sent, Trash) out + # from under you when the user changes language settings + $message = "\nNOTE! When a user changes languages in Gmail's interface, the\n" + . "Drafts, Sent and Trash folder names are changed to localized\n" + . "versions thereof. To see those folders correctly in SquirrelMail,\n" + . "the user should change the SquirrelMail language to match.\n" + . "Moreover, SquirrelMail then needs to be told what folders to use\n" + . "for Drafts, Sent and Trash in Options --> Folder Preferences.\n" + . "These default settings will only correctly find the Sent, Trash\n" + . "and Drafts folders if both Gmail and SquirrelMail languages are\n" + . "set to English.\n\n" + . "Also note that in some regions (Europe?), the default folder\n" + . "names (see main menu selection 3. Folder Defaults) are different\n" + . "(they may need to have the prefix \"[Google Mail]\" instead of\n" + . "\"[Gmail]\") and \"Trash\" may be called \"Bin\" instead.\n"; + + } elsif ( $server eq "quit" ) { + $continue = 1; + } else { + $disp_default_folder_prefix = $default_folder_prefix; + print "Unrecognized server: $server\n"; + print "\n"; + } + + print " imap_server_type = $imap_server_type\n"; + print " default_folder_prefix = $disp_default_folder_prefix\n"; + print " trash_folder = $trash_folder\n"; + print " sent_folder = $sent_folder\n"; + print " draft_folder = $draft_folder\n"; + print " show_prefix_option = $show_prefix_option\n"; + print " default_sub_of_inbox = $default_sub_of_inbox\n"; + print "show_contain_subfolders_option = $show_contain_subfolders_option\n"; + print " optional_delimiter = $optional_delimiter\n"; + print " delete_folder = $delete_folder\n"; + + print "$message"; + } + print "\nPress enter to continue..."; + $tmp = ; +} + +# This subroutine corrects relative paths to ensure they +# will work within the SM space. If the path falls within +# the SM directory tree, the SM_PATH variable will be +# prepended to the path, if not, then the path will be +# converted to an absolute path, e.g. +# '../images/logo.gif' --> SM_PATH . 'images/logo.gif' +# '../../someplace/data' --> '/absolute/path/someplace/data' +# 'images/logo.gif' --> SM_PATH . 'config/images/logo.gif' +# '/absolute/path/logo.gif' --> '/absolute/path/logo.gif' +# 'C:\absolute\path\logo.gif' --> 'C:\absolute\path\logo.gif' +# 'http://whatever/' --> 'http://whatever' +# $some_var/path --> "$some_var/path" +sub change_to_SM_path() { + my ($old_path) = @_; + my $new_path = ''; + my @rel_path; + my @abs_path; + my $subdir; + + # If the path is absolute, don't bother. + return "\'" . $old_path . "\'" if ( $old_path eq ''); + return "\'" . $old_path . "\'" if ( $old_path =~ /^(\/|http)/ ); + return "\'" . $old_path . "\'" if ( $old_path =~ /^\w:(\\|\/)/ ); + return $old_path if ( $old_path =~ /^\'(\/|http)/ ); + return $old_path if ( $old_path =~ /^\'\w:\// ); + return $old_path if ( $old_path =~ /^SM_PATH/); + + if ( $old_path =~ /^\$/ ) { + # check if it's a single var, or a $var/path combination + # if it's $var/path, enclose in "" + if ( $old_path =~ /\// ) { + return '"'.$old_path.'"'; + } + return $old_path; + } + + # Remove remaining ' + $old_path =~ s/\'//g; + + # For relative paths, split on '../' + @rel_path = split(/\.\.\//, $old_path); + + if ( $#rel_path > 1 ) { + # more than two levels away. Make it absolute. + @abs_path = split(/\//, $dir); + + # Lop off the relative pieces of the absolute path.. + for ( $i = 0; $i <= $#rel_path; $i++ ) { + pop @abs_path; + shift @rel_path; + } + push @abs_path, @rel_path; + $new_path = "\'" . join('/', @abs_path) . "\'"; + } elsif ( $#rel_path > 0 ) { + # it's within the SM tree, prepend SM_PATH + $new_path = $old_path; + $new_path =~ s/^\.\.\//SM_PATH . \'/; + $new_path .= "\'"; + } else { + # Last, it's a relative path without any leading '.' + # Prepend SM_PATH and config, since the paths are + # relative to the config directory + $new_path = "SM_PATH . \'config/" . $old_path . "\'"; + } + return $new_path; +} + + +# Change SM_PATH to admin-friendly version, e.g.: +# SM_PATH . 'images/logo.gif' --> '../images/logo.gif' +# SM_PATH . 'config/some.php' --> 'some.php' +# '/absolute/path/logo.gif' --> '/absolute/path/logo.gif' +# 'http://whatever/' --> 'http://whatever' +sub change_to_rel_path() { + my ($old_path) = @_; + my $new_path = $old_path; + + if ( $old_path =~ /^SM_PATH/ ) { + $new_path =~ s/^SM_PATH . \'/\.\.\//; + $new_path =~ s/\.\.\/config\///; + } + + return $new_path; +} + +# Attempts to auto-detect if a specific auth mechanism is supported. +# Called by 'command112a' and 'command112b' +# ARGS: service-name (IMAP or SMTP), host:port, mech-name (ie. CRAM-MD5) +sub detect_auth_support { + # Try loading IO::Socket + unless (eval("use IO::Socket; 1")) { + print "Perl IO::Socket module is not available."; + return undef; + } + + # Misc setup + my $service = shift; + my $host = shift; + my $mech = shift; + # Sanity checks + if ((!defined($service)) or (!defined($host)) or (!defined($mech))) { + # Error - wrong # of args + print "BAD ARGS!\n"; + return undef; + } + + if ($service eq 'SMTP') { + $cmd = "AUTH $mech\r\n"; + $logout = "QUIT\r\n"; + } elsif ($service eq 'IMAP') { + $cmd = "A01 AUTHENTICATE $mech\n"; + $logout = "C01 LOGOUT\n"; + } else { + # unknown service - whoops. + return undef; + } + + # Get this show on the road + my $sock=IO::Socket::INET->new($host); + if (!defined($sock)) { + # Connect failed + return undef; + } + my $discard = <$sock>; # Server greeting/banner - who cares.. + + if ($service eq 'SMTP') { + # Say hello first.. + print $sock "HELO $domain\r\n"; + $discard = <$sock>; # Yeah yeah, you're happy to see me.. + } + print $sock $cmd; + + my $response = <$sock>; + chomp($response); + if (!defined($response)) { + return undef; + } + + # So at this point, we have a response, and it is (hopefully) valid. + if ($service eq 'SMTP') { + if (!($response =~ /^334/)) { + # Not supported + print $sock $logout; + close $sock; + return 'NO'; + } + } elsif ($service eq 'IMAP') { + if ($response =~ /^A01/) { + # Not supported + close $sock; + return 'NO'; + } + } else { + # Unknown service - this shouldn't be able to happen. + close $sock; + return undef; + } + + # If it gets here, the mech is supported + print $sock "*\n"; # Attempt to cancel authentication + print $sock $logout; # Try to log out, but we don't really care if this fails + close $sock; + return 'YES'; +} + +sub clear_screen() { + if ( $^O =~ /^mswin/i) { + system "cls"; + } else { + system "clear"; + } +} + +# Quotes safely strings containing single quote +sub quote_single($) { + my $string = shift(@_); + $string =~ s/\'/\\'/g; + return $string; +} + +# trims whitespace +# Example code from O'Reilly Perl Cookbook +sub trim { + my @out = @_; + for (@out) { + s/^\s+//; + s/\s+$//; + } + return wantarray ? @out : $out[0]; +} + + +# checks IMAP mailbox name. Detect 8bit input and special characters +# returns 0 (folder name is not correct) or 1 (folder name is correct) +sub check_imap_folder($) { + my $folder_name = shift(@_); + + if ($folder_name =~ /[\x80-\xFFFF]/) { + print "Folder name contains 8bit characters. Configuration utility requires\n"; + print "UTF7-IMAP encoded folder names.\n"; + print "Press enter to continue..."; + my $tmp = ; + return 0; + } elsif ($folder_name =~ /[&\*\%]/) { + # check for ampersand and list-wildcards + print "Folder name contains special UTF7-IMAP characters.\n"; + print "Are you sure that folder name is correct? (yN): "; + my $tmp = ; + $tmp = lc(trim($tmp)); + if ($tmp =~ /^y$/) { + return 1; + } else { + return 0; + } + } else { + return 1; + } +} diff --git a/ehcp/webmail2/config/config.php b/ehcp/webmail2/config/config.php new file mode 100644 index 0000000..1615783 --- /dev/null +++ b/ehcp/webmail2/config/config.php @@ -0,0 +1,224 @@ + 'memberdir.netscape.com', + * 'name' => 'Netcenter Member Directory', + * 'base' => 'ou=member_directory,o=netcenter.com' + * ); + * + * NOTE: please see security note at the top of this file when + * entering a password. + */ +// Add your ldap server options here + +/** + * Javascript in Addressbook Control + * + * Users may search their addressbook via either a plain HTML or Javascript + * enhanced user interface. This option allows you to set the default choice. + * Set this default choice as either: + * true = javascript + * false = html + * @global bool $default_use_javascript_addr_book + */ +$default_use_javascript_addr_book = false; + +/** + * Shared filebased address book + * @global string $abook_global_file + * @since 1.5.1 and 1.4.4 + */ +$abook_global_file = ''; + +/** + * Writing into shared address book control + * @global bool $abook_global_file_writeable + * @since 1.5.1 and 1.4.4 + */ +$abook_global_file_writeable = false; + +/** + * Listing of shared address book control + * @global bool $abook_global_file_listing + * @since 1.5.1 and 1.4.9 + */ +$abook_global_file_listing = true; + +/** + * Controls file based address book entry size + * + * This setting controls space allocated to file based address book records. + * End users will be unable to save address book entry, if total entry size + * (quoted address book fields + 4 delimiters + linefeed) exceeds allowed + * address book length size. + * + * Same setting is applied to personal and global file based address books. + * + * It is strongly recommended to keep default setting value. Change it only + * if you really want to store address book entries that are bigger than two + * kilobytes (2048). + * @global integer $abook_file_line_length + * @since 1.5.2 and 1.4.9 + */ +$abook_file_line_length = 2048; + +/** + * MOTD + * + * This is a message that is displayed immediately after a user logs in. + * @global string $motd + */ +$motd = ""; + + +/** + * To install plugins, just add elements to this array that have + * the plugin directory name relative to the /plugins/ directory. + * For instance, for the 'squirrelspell' plugin, you'd put a line like + * the following. + * $plugins[0] = 'squirrelspell'; + * $plugins[1] = 'listcommands'; + */ +// Add list of enabled plugins here + + +/*** Database ***/ +/** + * Read the administrator's manual in order to get more information + * about these settings. + */ +/** + * Database-driven private addressbooks + * DSN (Data Source Name) for a database where the private + * addressbooks are stored. See the administrator's manual for more info. + * If it is not set, the addressbooks are stored in files + * in the data dir. + * The DSN is in the format: mysql://user:pass@hostname/dbname + * The table is the name of the table to use within the + * specified database. + * + * NOTE: please see security note at the top of this file when + * entering a password. + */ +$addrbook_dsn = ''; +$addrbook_table = 'address'; +/** + * Database used to store user data + */ +$prefs_dsn = ''; +$prefs_table = 'userprefs'; +$prefs_key_field = 'prefkey'; +$prefs_user_field = 'user'; +$prefs_val_field = 'prefval'; + +/*** Global sql database options ***/ +/** + * DSN of global address book database + * @global string $addrbook_global_dsn + * @since 1.5.1 and 1.4.4 + */ +$addrbook_global_dsn = ''; +/** + * Table used for global database address book + * @global string $addrbook_global_table + * @since 1.5.1 and 1.4.4 + */ +$addrbook_global_table = 'global_abook'; +/** + * Control writing into global database address book + * @global boolean $addrbook_global_writeable + * @since 1.5.1 and 1.4.4 + */ +$addrbook_global_writeable = false; +/** + * Control listing of global database address book + * @global boolean $addrbook_global_listing + * @since 1.5.1 and 1.4.4 + */ +$addrbook_global_listing = false; + +/*** Language settings ***/ +/** + * Default language + * + * This is the default language. It is used as a last resort + * if SquirrelMail can't figure out which language to display. + * Language names usually consist of language code, undercore + * symbol and country code + * @global string $squirrelmail_default_language + */ +$squirrelmail_default_language = 'en_US'; + +/** + * Default Charset + * + * This option controls what character set is used when sending mail + * and when sending HTML to the browser. Do not set this to US-ASCII, + * use ISO-8859-1 instead. + * + * This option is active only when default language is en_US. In other + * cases SquirrelMail uses charset that depends on default language. + * See $squirrelmail_default_language + * + * @global string $default_charset + */ +$default_charset = 'iso-8859-1'; + +/** + * Lossy Encoding Control + * + * This option allows charset conversions when output charset does not support + * all symbols used in original charset. Symbols unsupported by output charset + * will be replaced with question marks. + * @global bool $lossy_encoding + * @since 1.4.4 and 1.5.1 + */ +$lossy_encoding = false; + +/** + * Subscribe Listing Control + * + * this disables listing all of the folders on the IMAP Server to + * generate the folder subscribe listbox (this can take a long time + * when you have a lot of folders). Instead, a textbox will be + * displayed allowing users to enter a specific folder name to subscribe to + * + * This option can't be changed by conf.pl + * @global bool $no_list_for_subscribe + */ +$no_list_for_subscribe = false; + +/** + * Color in config control + * + * This option is used only by conf.pl script to generate configuration + * menu with some colors and is provided here only as reference. + * @global integer $config_use_color + */ +$config_use_color = 2; + +/** + * This option includes special configuration options + */ +@include SM_PATH . 'config/config_local.php'; + diff --git a/ehcp/webmail2/config/config_local.php b/ehcp/webmail2/config/config_local.php new file mode 100644 index 0000000..fd30473 --- /dev/null +++ b/ehcp/webmail2/config/config_local.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/contrib/RPM/squirrelmail.conf b/ehcp/webmail2/contrib/RPM/squirrelmail.conf new file mode 100644 index 0000000..5151794 --- /dev/null +++ b/ehcp/webmail2/contrib/RPM/squirrelmail.conf @@ -0,0 +1,7 @@ +# +# SquirrelMail is a webmail package written in PHP. +# This is a config file for apache 2.0. +# $Id: squirrelmail.conf 4686 2003-03-27 03:08:16Z graf25 $ +# + +Alias /webmail /usr/share/squirrelmail diff --git a/ehcp/webmail2/contrib/RPM/squirrelmail.cron b/ehcp/webmail2/contrib/RPM/squirrelmail.cron new file mode 100644 index 0000000..ff306d8 --- /dev/null +++ b/ehcp/webmail2/contrib/RPM/squirrelmail.cron @@ -0,0 +1,6 @@ +#!/bin/sh +# This goes through the squirrelmail attachment spool directory and +# removes any abandoned temporary files that are more than 10 days old. +# $Id: squirrelmail.cron 4686 2003-03-27 03:08:16Z graf25 $ +# +/usr/sbin/tmpwatch 240 __ATTDIR__ diff --git a/ehcp/webmail2/contrib/RPM/squirrelmail.spec b/ehcp/webmail2/contrib/RPM/squirrelmail.spec new file mode 100644 index 0000000..ea98743 --- /dev/null +++ b/ehcp/webmail2/contrib/RPM/squirrelmail.spec @@ -0,0 +1,236 @@ +## +# $Id: squirrelmail.spec 13537 2009-04-13 16:52:57Z jervfors $ +%define spec_release 1 + +## +# Rebuild with: +# rpmbuild --rebuild --define 'rhl7 1' squirrelmail-1.4.x.src.rpm +# to build for rhl7. + +%{!?rhl7:%define rhl7 0} +%if %{rhl7} + %define webserver apache + %define rpm_release 0.%{spec_release}.7.x +%else + %define webserver httpd + %define rpm_release %{spec_release} +%endif + +#------------------------------------------------------------------------------ + +Summary: SquirrelMail webmail client +Name: squirrelmail +Version: 1.4.3 +Release: %{rpm_release} +License: GPL +URL: http://squirrelmail.org/ +Vendor: squirrelmail.org +Group: Applications/Internet +Source: %{name}-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-%{version}-root +BuildArch: noarch +Requires: %{webserver}, php >= 4.0.6, perl, tmpwatch >= 2.8, aspell +Requires: /usr/sbin/sendmail + +%description +SquirrelMail is a standards-based webmail package written in PHP. It +includes built-in pure PHP support for the IMAP and SMTP protocols, and +all pages render in pure HTML 4.0 (with no Javascript) for maximum +compatibility across browsers. It has very few requirements and is very +easy to configure and install. SquirrelMail has all the functionality +you would want from an email client, including strong MIME support, +address books, and folder manipulation. + +#------------------------------------------------------------------------------ + +%prep +%setup -q +%{__rm} -f plugins/make_archive.pl + +# Rearrange the documentation +%{__mv} AUTHORS ChangeLog COPYING INSTALL README UPGRADE doc/ +%{__mv} ReleaseNotes doc/ReleaseNotes.txt +%{__mv} themes/README.themes doc/ +for f in `find plugins -name "README*" -or -name INSTALL \ + -or -name CHANGES -or -name HISTORY`; do + %{__mkdir_p} doc/`dirname $f` + %{__mv} $f $_ +done +%{__mv} doc/plugins/squirrelspell/doc/README doc/plugins/squirrelspell +%{__rm} -rf doc/plugins/squirrelspell/doc +%{__mv} plugins/squirrelspell/doc/* doc/plugins/squirrelspell +%{__rm} -f doc/plugins/squirrelspell/index.php +%{__rm} -rf plugins/squirrelspell/doc + +# Fixup various files +echo "left_refresh=300" >> data/default_pref +for f in contrib/RPM/squirrelmail.cron contrib/RPM/config.php.redhat; do + %{__perl} -pi \ + -e "s|__ATTDIR__|%{_localstatedir}/spool/squirrelmail/attach/|g;" \ + -e "s|__PREFSDIR__|%{_localstatedir}/lib/squirrelmail/prefs/|g;" $f +done + +# Fix the version +%{__perl} -pi -e "s|^(\s*\\\$version\s*=\s*).*|\1'%{version}-%{release}';|g"\ + functions/strings.php + +#------------------------------------------------------------------------------ + +%install +%{__rm} -rf %{buildroot} +%{__mkdir_p} -m 755 %{buildroot}%{_sysconfdir}/squirrelmail +%{__mkdir_p} -m 755 %{buildroot}%{_localstatedir}/lib/squirrelmail/prefs +%{__mkdir_p} -m 755 %{buildroot}%{_localstatedir}/spool/squirrelmail/attach +%{__mkdir_p} -m 755 %{buildroot}%{_datadir}/squirrelmail + +# install default_pref into /etc/squirrelmail and symlink to it from data +%{__install} -m 644 data/default_pref \ + %{buildroot}%{_sysconfdir}/squirrelmail/ +%{__ln_s} %{_sysconfdir}/squirrelmail/default_pref \ + %{buildroot}%{_localstatedir}/lib/squirrelmail/prefs/default_pref + +# install the config files +%{__mkdir_p} -m 755 %{buildroot}%{_datadir}/squirrelmail/config +%{__install} -m 644 contrib/RPM/config.php.redhat \ + %{buildroot}%{_sysconfdir}/squirrelmail/config.php +%{__ln_s} %{_sysconfdir}/squirrelmail/config.php \ + %{buildroot}%{_datadir}/squirrelmail/config/config.php +%{__install} -m 644 config/config_local.php \ + %{buildroot}%{_sysconfdir}/squirrelmail/config_local.php +%{__ln_s} %{_sysconfdir}/squirrelmail/config_local.php \ + %{buildroot}%{_datadir}/squirrelmail/config/config_local.php +%{__rm} -f config/config_local.php config/config.php +%{__install} -m 644 config/*.php %{buildroot}%{_datadir}/squirrelmail/config/ +%{__install} -m 755 config/*.pl %{buildroot}%{_datadir}/squirrelmail/config/ + +# install index.php +%{__install} -m 644 index.php %{buildroot}%{_datadir}/squirrelmail/ + +# Copy over the rest +for DIR in class functions help images include locale plugins src themes; do + %{__cp} -rp $DIR %{buildroot}%{_datadir}/squirrelmail/ +done + +# install the cron script +%{__mkdir_p} -m 755 %{buildroot}%{_sysconfdir}/cron.daily +%{__install} -m 755 contrib/RPM/squirrelmail.cron \ + %{buildroot}/%{_sysconfdir}/cron.daily/ + +%if %{rhl7} + # symlink from /var/www/html/webmail to /usr/share/squirrelmail + %{__mkdir_p} -m 755 %{buildroot}/var/www/html + %{__ln_s} %{_datadir}/squirrelmail %{buildroot}/var/www/html/webmail +%else + # install the config file + %{__mkdir_p} %{buildroot}%{_sysconfdir}/httpd/conf.d + %{__install} -m 644 contrib/RPM/squirrelmail.conf \ + %{buildroot}%{_sysconfdir}/httpd/conf.d/ +%endif + +#------------------------------------------------------------------------------ + +%clean +%{__rm} -rf %{buildroot} + +#------------------------------------------------------------------------------ + +%files +%defattr(-,root,root) +%config %dir %{_sysconfdir}/squirrelmail +%config(noreplace) %{_sysconfdir}/squirrelmail/* +%if %{rhl7} + /var/www/html/webmail +%else + %config(noreplace) %{_sysconfdir}/httpd/conf.d/*.conf +%endif +%doc doc/* +%dir %{_datadir}/squirrelmail +%{_datadir}/squirrelmail/index.php +%{_datadir}/squirrelmail/class +%{_datadir}/squirrelmail/functions +%{_datadir}/squirrelmail/help +%{_datadir}/squirrelmail/images +%{_datadir}/squirrelmail/include +%{_datadir}/squirrelmail/locale +%{_datadir}/squirrelmail/src +%{_datadir}/squirrelmail/themes +%{_datadir}/squirrelmail/config +%dir %{_datadir}/squirrelmail/plugins +%{_datadir}/squirrelmail/plugins/* +%dir %{_localstatedir}/lib/squirrelmail +%dir %{_localstatedir}/spool/squirrelmail +%attr(0770, root, apache) %dir %{_localstatedir}/lib/squirrelmail/prefs +%attr(0730, root, apache) %dir %{_localstatedir}/spool/squirrelmail/attach +%{_localstatedir}/lib/squirrelmail/prefs/default_pref +%{_sysconfdir}/cron.daily/squirrelmail.cron + +#------------------------------------------------------------------------------ + +%changelog +* Wed Apr 07 2004 Konstantin Ryabitsev 1.4.3-1 +- Skipped 1.4.2 because it was built outside of CVS. +- Prepping for 1.4.3 +- default_pref is now in /etc/squirrelmail/default_pref with a symlink in + place +- Probably the last release for 7.x. + +* Thu Jul 03 2003 Konstantin Riabitsev 1.4.1-1 +- Build for 1.4.1 +- Prefixing the release with "0" so the RPM upgrades cleanly when going to + rhl > 7.x. + +* Tue Mar 26 2003 Konstantin Riabitsev 1.4.0-1 +- Build for 1.4.0 + +* Thu Feb 13 2003 Konstantin Riabitsev 1.4.0-0.2pre +- Initial release for 1.4.0 prerelease + +* Tue Feb 04 2003 Konstantin Riabitsev 1.2.11-1 +- Upping version number. + +* Tue Oct 29 2002 Konstantin Riabitsev 1.2.9-1 +- Upping version number. + +* Sat Sep 14 2002 Konstantin Riabitsev 1.2.8-1 +- adopted RH's spec file so we don't duplicate effort. +- Removed rh'ized splash screen. +- Adding fallbacks for building rhl7 version as well with the same + specfile. Makes the spec file not as clean, but hey. +- remove workarounds for #68669 (rh bugzilla), since 1.2.8 works with + register_globals = Off. +- Hardwiring localhost into the default config file. Makes sense. +- No more such file MIRRORS. +- Adding aspell as one of the req's, since squirrelspell is enabled by + default +- Added Vendor: line to distinguish ourselves from RH. +- Doing the uglies with the release numbers. + +* Tue Aug 6 2002 Preston Brown 1.2.7-4 +- replacement splash screen. + +* Mon Jul 22 2002 Gary Benson 1.2.7-3 +- get rid of long lines in the specfile. +- remove symlink in docroot and use an alias in conf.d instead. +- work with register_globals off (#68669) + +* Tue Jul 09 2002 Gary Benson 1.2.7-2 +- hardwire the hostname (well, localhost) into the config file (#67635) + +* Mon Jun 24 2002 Gary Benson 1.2.7-1 +- hardwire the locations into the config file and cron file. +- install squirrelmail-cleanup.cron as squirrelmail.cron. +- make symlinks relative. +- upgrade to 1.2.7. +- more dependency fixes. + +* Fri Jun 21 2002 Gary Benson +- summarize the summary, fix deps, and remove some redundant stuff. +- tidy up the prep section. +- replace directory definitions with standard RHL ones. + +* Fri Jun 21 2002 Tim Powers 1.2.6-3 +- automated rebuild + +* Wed Jun 19 2002 Preston Brown 1.2.6-2 +- adopted Konstantin Riabitsev 's package for Red Hat + Linux. Nice job Konstantin! diff --git a/ehcp/webmail2/contrib/conf.pl.8 b/ehcp/webmail2/contrib/conf.pl.8 new file mode 100644 index 0000000..30dfd4c --- /dev/null +++ b/ehcp/webmail2/contrib/conf.pl.8 @@ -0,0 +1,37 @@ +.\" +.TH "conf.pl" "8" "Jan 14, 2006" "Tomas Kuliavas" "SquirrelMail" +.SH "NAME" +conf.pl \- SquirrelMail configuration utility + +.SH "SYNOPSIS" +.B conf.pl +.RI [\-\-install\-plugin\ plugin\-name\ |\ \-\-remove\-plugin\ plugin\-name] +.br + +.SH "DESCRIPTION" +This manual page explains usage of the +.B conf.pl +program. +.PP +It is normally called without any arguments, and then provides an interactive +menu to configure SquirrelMail. + +.SH "OPTIONS" +.B +.IP \-\-install\-plugin\ plugin\-name +Enable a plugin. Activates the plugin and saves SquirrelMail configuration. + +.B +.IP \-\-remove\-plugin\ plugin\-name +Disable a plugin. Deactivates the plugin and saves SquirrelMail configuration. +.SH "BUGS" +If you find bugs in SquirrelMail configuration utility or this manual, you can +report them in SquirrelMail bug tracker. See \fBhttp://squirrelmail.org/bugs\fR +.SH "AUTHOR" +Tomas Kuliavas +.SH "COPYRIGHT" +Copyright (c) 2006-2011 The SquirrelMail Project Team +.SH "LICENSE" +This manual is licensed under GNU General Public License. See COPYING file +included in the SquirrelMail package or +\fBhttp://opensource.org/licenses/gpl\-license.php\fR. diff --git a/ehcp/webmail2/contrib/decrypt_headers.php b/ehcp/webmail2/contrib/decrypt_headers.php new file mode 100644 index 0000000..4c919d5 --- /dev/null +++ b/ehcp/webmail2/contrib/decrypt_headers.php @@ -0,0 +1,98 @@ +' + ."\n\n\n" + .""; + +if (sqgetGlobalVar('submit',$submit,SQ_POST)) { + $continue = TRUE; + if (! sqgetGlobalVar('secret',$secret,SQ_POST) || + empty($secret)) { + $continue = FALSE; + echo "

            You must enter an encryption key.

            \n"; + } + if (! sqgetGlobalVar('enc_string',$enc_string,SQ_POST) || + empty($enc_string)) { + $continue = FALSE; + echo "

            You must enter an encrypted string.

            \n"; + } + + if ($continue) { + if (isset($enc_string) && ! base64_decode($enc_string)) { + echo "

            Encrypted string should be BASE64 encoded.
            \n" + ."Please enter all characters that are listed after header name.

            \n"; + } elseif (isset($secret)) { + $string=OneTimePadDecrypt($enc_string,base64_encode($secret)); + + if (sqgetGlobalVar('ip_addr',$is_addr,SQ_POST)) { + $string=hex2ip($string); + } + echo "

            Decoded string: ".htmlspecialchars($string)."

            \n"; + } + } + echo "
            "; +} +?> +
            +

            +Secret key:
            +Encrypted string:
            +
            + +

            +
            + diff --git a/ehcp/webmail2/contrib/squirrelmail.mailto.NT2KXP.reg b/ehcp/webmail2/contrib/squirrelmail.mailto.NT2KXP.reg new file mode 100644 index 0000000..bb49c8a --- /dev/null +++ b/ehcp/webmail2/contrib/squirrelmail.mailto.NT2KXP.reg @@ -0,0 +1,43 @@ +This file can be used to allow you to jump right to the SquirrelMail compose +screen to send a message when you click on a "mailto" link on any web page +in Windows NT, 2000 or XP (and Vista?). + +Place the contents of this file (make sure to only use the part of this file +below starting on the line after "Cut here") into a text file on the target +computer, named exactly "squirrelmail.mailto.reg" (without the quotes) (make +sure the file extension is in fact ".reg", and not ".txt"). Find the text +"http://example.org/squirrelmail" and change this to the correct address for +your SquirrelMail installation. When the file has been saved, double-click on +it and confirm that you want to add the information to the registry. + +Once the registry has been updated in this manner, you can now choose +SquirrelMail as your system's default mail program by going to the "Internet +Options" configuration window, which can be found in the Control Panel or in +Internet Explorer by clicking on Tools-->Internet Options. Choose the +"Programs" tab and SquirrelMail will be an option under "E-mail". + + +---- Cut here ---- +Windows Registry Editor Version 5.00 + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail] +@="SquirrelMail" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto] +"URL Protocol"="" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell\open] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell\open\command] +@="rundll32.exe url.dll,FileProtocolHandler http://example.org/squirrelmail/src/mailto.php?emailaddress=%1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell\open] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell\open\command] + diff --git a/ehcp/webmail2/contrib/squirrelmail.mailto.Win9x.reg b/ehcp/webmail2/contrib/squirrelmail.mailto.Win9x.reg new file mode 100644 index 0000000..99f8547 --- /dev/null +++ b/ehcp/webmail2/contrib/squirrelmail.mailto.Win9x.reg @@ -0,0 +1,43 @@ +This file can be used to allow you to jump right to the SquirrelMail compose +screen to send a message when you click on a "mailto" link on any web page +in Windows 95, 98, 98se, and probably Windows ME. + +Place the contents of this file (make sure to only use the part of this file +below starting on the line after "Cut here") into a text file on the target +computer, named exactly "squirrelmail.mailto.reg" (without the quotes) (make +sure the file extension is in fact ".reg", and not ".txt"). Find the text +"http://example.org/squirrelmail" and change this to the correct address for +your SquirrelMail installation. When the file has been saved, double-click on +it and confirm that you want to add the information to the registry. + +Once the registry has been updated in this manner, you can now choose +SquirrelMail as your system's default mail program by going to the "Internet +Options" configuration window, which can be found in the Control Panel or in +Internet Explorer by clicking on Tools-->Internet Options. Choose the +"Programs" tab and SquirrelMail will be an option under "E-mail". + + +---- Cut here ---- +REGEDIT4 + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail] +@="SquirrelMail" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto] +"URL Protocol"="" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell\open] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\Protocols\mailto\shell\open\command] +@="rundll32.exe url.dll,FileProtocolHandler http://example.org/squirrelmail/src/mailto.php?emailaddress=%1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell\open] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\SquirrelMail\shell\open\command] + diff --git a/ehcp/webmail2/data/.htaccess b/ehcp/webmail2/data/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/data/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/data/default_pref b/ehcp/webmail2/data/default_pref new file mode 100644 index 0000000..6637bb5 --- /dev/null +++ b/ehcp/webmail2/data/default_pref @@ -0,0 +1,3 @@ +full_name= +reply_to= +show_html_default=0 diff --git a/ehcp/webmail2/data/index.php b/ehcp/webmail2/data/index.php new file mode 100644 index 0000000..ffd0105 --- /dev/null +++ b/ehcp/webmail2/data/index.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/doc/.htaccess b/ehcp/webmail2/doc/.htaccess new file mode 100644 index 0000000..b166147 --- /dev/null +++ b/ehcp/webmail2/doc/.htaccess @@ -0,0 +1,6 @@ +Order Deny,Allow +Deny from All +Allow from 10.0.0.0/8 +Allow from 127.0.0.0/8 +Allow from 172.16.0.0/12 +Allow from 192.168.0.0/16 diff --git a/ehcp/webmail2/doc/AUTHORS b/ehcp/webmail2/doc/AUTHORS new file mode 100644 index 0000000..a357398 --- /dev/null +++ b/ehcp/webmail2/doc/AUTHORS @@ -0,0 +1,42 @@ +THE SQUIRRELMAIL TEAM +===================== + +The SquirrelMail Project thanks each and every one that have made SquirrelMail +what it is today. This includes, but isn't limited to, bug reporters, patch +submitters, testers, plugin authors, community members, and many, many other. + +The list below contains some of persons that have helped the project, with the +aim to give credit where it is due. If you feel that your name has wrongfully +been left out, please contact the SquirrelMail Project. + +Main developers: +---------------- +Alex Lemaresquier +Alexandros Vellis http://users.uoa.gr/~avel +Chris Hilts http://www.birdbrained.org +Fredrik Jervfors http://fredrik.jervfors.se +Jonathan Angliss +Paul Lesniewski +Steve Brown +Thijs Kinkhorst http://thijs.kinkhorst.nl + +Past developers, now retired: +----------------------------- +Brent Bice, Bron Gondwana, Bryan Stalcup, Erin Schnabel, Gerrit Padgham, Gustav +Foseid, Jason Munro, Jimmy Conner, Konstantin Riabitsev, Lewis Bergman, Luke +Ehresman, Marc Groot Koerkamp, Matt Phillips, Nathan Ehresman, Paul Thompson, +Peter Hutnick, Philippe Mingo, Pål Løberg, Rick Castello, Seth E. Randall, +Shane Wilson, Simon Dick, Steve Falla, Steve Gare, Tomas Kuliavas, Tyler Akins, +and Wouter Teepe. + +Significant contributions: +-------------------------- +Alex Bleeker, Charles Scheidecker, Cor Bosman, Damien Sandras, David +Whittington, Jan-Pieter Cornet, John Williams, Libor Kopecky, Martin Jespersen, +Michael Long, Ondrej Sury, Pontus Ullgren, Rob Siemborski, Sergiusz Pawlowicz, +Stefan Meier, Stefan Sels, and many others. + +Translations: +------------- +The translators are credited in the file "TRANSLATORS", which is part of the +locales package. diff --git a/ehcp/webmail2/doc/COPYING b/ehcp/webmail2/doc/COPYING new file mode 100644 index 0000000..9cac679 --- /dev/null +++ b/ehcp/webmail2/doc/COPYING @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/webmail2/doc/ChangeLog b/ehcp/webmail2/doc/ChangeLog new file mode 100644 index 0000000..ecd45e2 --- /dev/null +++ b/ehcp/webmail2/doc/ChangeLog @@ -0,0 +1,1886 @@ +************************************** +*** SquirrelMail Stable Series 1.4 *** +************************************** + +Version 1.4.22 - 12 July 2011 +----------------------------- + - Backported default timezone fix from version 1.5.2; helps mitigate + timezone errors in environments where a default has not been set + by the administrator. + - Fixed system lock-ups caused by a combination of certain rare, + malformed message headers and buggy versions of PHP mbstring + (#3053349). + - Now allow multiple plugins to handle (add links for) a single + attachment MIME type. + - Now allow administrators to disable all plugins or enable just + a select few plugins (overriding the active plugins in the normal + configuration) by setting $temporary_plugins as an empty array + (all disabled) or an array with one or more plugin directory names + in config_local.php. + - Backport fix for call_user_func_array not supporting NULL as empty + array in PHP 5.3.3 + - Fixed sqauth_read_password() for plugins on the login_verified hook. + - Added SMTP SASL PLAIN authentication option to configuration tool + (core support for such is not new). + - Gmail doens't support standard search commands; removed sort buttons. + - Forced addition of a file suffix to attachments that lack a filename + (helps forwarded messages avoid spam filters) (thanks to Petr + Kletecka) (#3139004). + - Fixed missing security token in listcommands plugin. + - Added smtp_auth hook (thanks to Emmanuel Dreyfus). + - Made speed enhancements to threaded message display (thanks to Siim + Poder) (#3288123). + - Allow administrators to configure subfolders of user INBOXes to be + treated as special folders by adding $subfolders_of_inbox_are_special + to config_local.php. + - Fixed incorrect display of INBOX subfolders under some configurations. + IMPORTANT: You may need to update your configuration so that + $default_sub_of_inbox is TRUE if it was FALSE (e.g., Courier IMAP users) + and after updating to this version, your special folders are no longer + listed at the top of your folder list. Also, if this change prevents + users from logging in with an error such as "ERROR: Could not complete + request. Query: CREATE "Trash" Reason Given: Invalid mailbox name.", + you will need to correct the user preference values for the problem + folders. You can do so with commands such as the following for file- + based preferences (adjust the data directory location as needed): + find /var/lib/squirrelmail/data/ -name *.pref -exec sed --in-place 's/trash_folder=Trash/trash_folder=INBOX.Trash/g' {} \; + find /var/lib/squirrelmail/data/ -name *.pref -exec sed --in-place 's/trash_folder=Drafts/trash_folder=INBOX.Drafts/g' {} \; + find /var/lib/squirrelmail/data/ -name *.pref -exec sed --in-place 's/trash_folder=Sent/trash_folder=INBOX.Sent/g' {} \; + Or, for database-based preferences: + UPDATE userprefs SET prefval = 'INBOX.Trash' WHERE prefkey = 'trash_folder' AND prefval = 'Trash'; + UPDATE userprefs SET prefval = 'INBOX.Drafts' WHERE prefkey = 'draft_folder' AND prefval = 'Drafts'; + UPDATE userprefs SET prefval = 'INBOX.Sent' WHERE prefkey = 'sent_folder' AND prefval = 'Sent'; + MAKE SURE to back up your user preferences first! + - Optimized message highlighting rules; faster message list display + and faster highlight rules management (thanks to C. Bensend for + extensive effort helping diagnose) + - New Mail plugin no longer removes normal organization title when + putting the number of new messages in the browser title + - Added clickjacking protection (thanks to Asbjorn Thorsen and Geir + Hansen for bringing this to our attention). [CVE-2010-4554] + - Fixed XSS holes in generic options inputs, XSS hole in the SquirrelSpell + plugin, XSS hole in the Index Order page, and added anti-CSRF protection + to the empty trash feature and the Index Order page (thanks to Nicholas + Carlini for finding all these issues). [CVE-2010-4555] + - Fixed XSS problem with unsanitized style tags in messages. [CVE-2011-2023] + +Version 1.4.21 - 23 Jul 2010 +---------------------------- + - Now allow more than one plugin to control the compose form submit action. + - When sorting by received date, the received date is now shown on the + message list. + - Explicitly disabled browser caching for left_main and right_main pages + (#2983134). + - Fixed error with SpamCop reporting plugin not being able to send report + as emails (#1795310). + - Fixed typo in SpamCop plugin. + - Reduced default time security tokens stay valid from 30 days to 2 days + (reduces chances of session data growing too large) + - Several speed enhancements for recent fixes regarding the display of + encoded subjects, including a fix for messages with invalid subject + encoding (includes #2987016 amongst several other issues reported via + mailing list, etc.) (Many thanks to Zdenek Pytela for the untiring help + diagnosing and testing.) + - Fixed minor vulnerability in Mail Fetch plugin. + [CVE-2010-1637/TEHTRI-SA-2010-009] + - Now properly quote personal part of encoded addresses when replying. + - Now fill in default subject when forwarding as attachment (#2936541). + - Implement header folding that doesn't add extraneous spaces so unfolding + is less ambiguous (#1951776). + - Fixed issues caused by use of PostgreSQL keyword "user" in SquirrelMail's + default preferences database schema (#2943483). + - Fixed attachment filename decoding problems (#2994865). + - Now default search criteria to the TO header when searching the sent folder. + - Fixed literal processing of 8-bit usernames/passwords during login. + [CVE-2010-2813] + +Version 1.4.20 - 06 Mar 2010 +--------------------------- + - Fixed issue with search not using literals correctly (#2846511). + - Fixed issue with returning to search results due to new security token code. + - Fixed issue with multi-part related messages not showing all attachments (#2830140). + - Fixed for security token missing in newmail plugin (#2919418). + - Fixed sort in Sent folder to sort by "To" field instead of "From" field (#2907412). + - Fixed mailto: urls containing + characters. Thanks to Michael Puls II for the + patch. + - Made base URL autodetection more robust; fixes some lighttpd issues + (probably #1741469). + - Encoded From headers are now properly quoted (#2830141). + - Multibyte strings (notably subjects) are now handled correctly (#2824813, + #2925731). + - X-DNS-Prefetch-Control: off header is now sent to browsers to prevent information + leakage when Firefox does DNS prefetching for URLs contained in emails. + - Added unread links in message view. + - Added the ability to configure Google Mail (Gmail) as the mail server + behind SquirrelMail. + - Added option in display preferences that allows the signature to be stripped + from the original message when replying (#2952876). Thanks to Sven Strickroth. + +Version 1.4.20 RC2 - 17 Aug 2009 +-------------------------------- + - Protect message deletion with security token system. (Secunia Advisory SA34627) + +Version 1.4.20 RC1 - 12 Aug 2009 +-------------------------------- + - Removed the shut down DSBL blocklists (#2796734). + - Fixed broken RFC1918 reference in contrib/.htaccess and doc/.htaccess (#2798839). + - Updated INSTALL doc to remove possible bad system admin typos (#2827153). + - PHP 5.3 deprecates ereg functions (#2820952). + - Filters plugin uses badly formatted literals request (#2805201). + - Provide option for complete removal of usernames and user IP addresses + from message headers, and remove personal data from Message ID seed. + (#880029/847107) + - Implemented page referal verification mechanism. (Secunia Advisory SA34627) + - Implemented security token system. (Secunia Advisory SA34627) + +Version 1.4.19 - 21 May 2009 +---------------------------- + - Removed use of session_unregister() for compatibility with PHP 5.3.0 + and PHP 6. + - Fixed the Filters plugin to allow commas in filter criteria text and + not to error out when spam-scanning only unread mail. + - Resend cookie to browser after session ID regeneration so it gets the + right cookie parameters. + - In SMTP, when we EHLO with an IP, wrap it in brackets (#2793154). + - The shell escaping fix in map_yp_alias [CVE-2009-1579] was incomplete. + Thanks Michal Hlavinka for noticing this. [CVE-2009-1381] + +Version 1.4.18 - 11 May 2009 +---------------------------- + - Fixed port detection in automatic base URL detection scheme + (get_location()). (#2388423) + - Added informational type option widget. + - Added password type option widget. + - Fixed filters plugin to allow spam filters to scan multiple + messages, rather than the first message returned. (#1634735) + - Removed code from spam filters plugin to stop if falling back + to searching all messages when there was no new messages. + - Altered filters plugin to issue single move/delete statement + for multiple messages. + - Updated some core code, and several plugins, to not use code + marked as obsolete. + - Corrected sqimap_msgs_list_copy to actually copy messages, + rather than move. + - Created new sqimap_msgs_list_move to move messages. + - Migrated some fetch handling code from dev branch in plans to + update some core functionality to allow reusability of code. + - Make address book file permissions 0600 - same as preference files. + - Fix for address book nicknames that contain the : character. + - Ensure that hash directory computation is the same on both 32 and + 64 bit architectures. (#2596879) + - Allow multiple addresses in one abook entry (separate with commas), + although we HIGHLY DISCOURAGE grouping in this manner - note amongst + other issues that can come up, sizing for large groups will be a + problem. (#2611967) + - Added Tamil translation (Thanks to Kengatharaiyer Sarveswaran). + - Added Bengali (Bangladesh) translation (Thanks to Jamil Ahmed). + - Moved documentation to doc/ directory and added example .htaccess + files in all directories to which browsers don't need direct access. + - Date headers in outgoing messages have been brought into RFC 822 + compliance (removed time zone name). (#1849410) + - Default Content-Transfer-Encoding is now RFC-compliant "7bit" + instead of "us-ascii". (#1942060) + - Outgoing attachments that have lines longer than allowed per RFC + are now encoded so they are not corrupted by artificial line folds. + Thanks to Kelly Fallon. (#2226470, $1473714) + - Converted Italian (it_IT) to UTF-8. + - Converted Czech (cs_CZ) to UTF-8. + - Converted Hungarian (hu_HU) to UTF-8. + - Added Khmer translation (Thanks to Khoem Sokhem). + - Remove ability for HTML emails to use CSS positioning to overlay + SquirrelMail content (Thanks to Luc Beurton). (#2723196) [CVE-2009-1581] + - Fixed improper sanitizing of PHP_SELF and the lack of sanitizing of + QUERY_STRING server environment variables (Thanks to Niels Teusink + and Christian Balzer). [CVE-2009-1578] + - Fixed the lack of sanitizing of contrib/decrypt_headers.php input; + also includes general cleanup of that page (Thanks to Niels Teusink). + [also CVE-2009-1578] + - Fixed unsanitized shell command in example IMAP username mapping + function (map_yp_alias) (Thanks to Niels Teusink). [CVE-2009-1579] + - Fixed session fixation issues where someone who can modify a user's + cookies could gain control of their login session. The SquirrelMail + base URI is now uniformly generated, extraneous cookies are cleaned + up and session IDs are regenerated upon every login (Thanks to Tomas + Hoger). [CVE-2009-1580] + +Version 1.4.17 - 03 December 2008 +--------------------------------- + - Allow control over white space wrapping of auto-generated + SquirrelMail option widgets. + - Fix matching of alternate identities when replying. + - Fix HTTPS detection under Windows IIS that was incorrectly + setting cookies to be transmitted only over a secure + connections when none existed (#2318118). + - Security: Fix XSS exploit in hyperlinks when rendering + messages. Thanks to Secunia Research for reporting this + issue and for their patience. [CVE-2008-2379] + +Version 1.4.16 - 28 September 2008 +---------------------------------- + - Added support for Latvian. + - Add submit button type option widget + - Allow address book lookups by fields other than nickname/alias + - Include hooks in databased-based preference backend that have + long been in the file-based preference backend + - Removed the Address Take (abook_take) plugin; please see the Add + Address (third party) plugin. + - Allow a different server address for the POP server to be + configured when using POP before SMTP. + - Update the left_main_after_each_folder hook to work on the trash + folder as well as all other folders. + - Fix HTML validity issue with IE conditional construct (#1985916). + - Backported sqsetcookie() from 1.5.2, so cookies won't be + transmitted under non-SSL connections if the session is + started under an SSL (https) connection (CVE-2008-3663). + Also limits cookies to HTTPOnly, a feature of IE and Firefox + to counter cross site scripting attacks. + +Version 1.4.15 - 23 May 2008 +---------------------------- + - Fix saving of Read Receipts to Sent folder. + - Converted Romanian (ro_RO) to UTF-8. + - Converted Slovak (sk_SK) to UTF-8. + - Converted Swedish (sv_SE) to UTF-8. + +Version 1.4.15 Release Candidate 1 - 12 May 2008 +------------------------------------------------ + - Added support for Macedonian. + - Don't allow invalid plugin names in conf.pl --install-plugin. + - Fix warning in Printer Friendly due to missing include (#1849101). + - Let configtest.php use optional PEAR dynamic extension loading, + patch by Walter Huijbers (#1833123). + - Fix for IMAP servers that were having problems saving sent messages. + - Fix broken + * @param $mailbox the message mailbox + * @return a string with edited content. + */ +function sq_fixstyle($body, $pos, $message, $id, $mailbox){ + // FIXME: Is the global "view_unsafe_images" really needed here? + global $view_unsafe_images; + $me = 'sq_fixstyle'; + + // workaround for in between comments + $iCurrentPos = $pos; + $content = ''; + $sToken = ''; + $bSucces = false; + $bEndTag = false; + for ($i=$pos,$iCount=strlen($body);$i<$iCount;++$i) { + $char = $body{$i}; + switch ($char) { + case '<': + $sToken = $char; + break; + case '/': + if ($sToken == '<') { + $sToken .= $char; + $bEndTag = true; + } else { + $content .= $char; + } + break; + case '>': + if ($bEndTag) { + $sToken .= $char; + if (preg_match('/\<\/\s*style\s*\>/i',$sToken,$aMatch)) { + $newpos = $i + 1; + $bSucces = true; + break 2; + } else { + $content .= $sToken; + } + $bEndTag = false; + } else { + $content .= $char; + } + break; + case '!': + if ($sToken == '<') { + // possible comment + if (isset($body{$i+2}) && substr($body,$i,3) == '!--') { + $i = strpos($body,'-->',$i+3); + if ($i === false) { // no end comment + $i = strlen($body); + } + $sToken = ''; + } + } else { + $content .= $char; + } + break; + default: + if ($bEndTag) { + $sToken .= $char; + } else { + $content .= $char; + } + break; + } + } + if ($bSucces == FALSE){ + return array(FALSE, strlen($body)); + } + + /** + * First look for general BODY style declaration, which would be + * like so: + * body {background: blah-blah} + * and change it to .bodyclass so we can just assign it to a
            + */ + $content = preg_replace("|body(\s*\{.*?\})|si", ".bodyclass\\1", $content); + $secremoveimg = '../images/' . _("sec_remove_eng.png"); + + // first check for 8bit sequences and disallowed control characters + if (preg_match('/[\16-\37\200-\377]+/',$content)) { + $content = ''; + return array($content, $newpos); + } + + // IE Sucks hard. We have a special function for it. + sq_fixIE_idiocy($content); + + // remove @import line + $content = preg_replace("/^\s*(@import.*)$/mi","\n\n",$content); + + /** + * Fix url('blah') declarations. + */ + // translate ur\l and variations into url (IE parses that) + // TODO check if the sq_fixIE_idiocy function already handles this. + $content = preg_replace("/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i",'url', $content); + preg_match_all("/url\s*\((.+)\)/si",$content,$aMatch); + if (count($aMatch)) { + $aValue = $aReplace = array(); + foreach($aMatch[1] as $sMatch) { + // url value + $urlvalue = $sMatch; + sq_fix_url('style',$urlvalue, $message, $id, $mailbox,"'"); + $aValue[] = $sMatch; + $aReplace[] = $urlvalue; + } + $content = str_replace($aValue,$aReplace,$content); + } + + /** + * Remove any backslashes, entities, and extraneous whitespace. + */ + $contentTemp = $content; + sq_defang($contentTemp); + sq_unspace($contentTemp); + + /** + * Fix stupid css declarations which lead to vulnerabilities + * in IE. + * + * Also remove "position" attribute, as it can easily be set + * to "fixed" or "absolute" with "left" and "top" attributes + * of zero, taking over the whole content frame. It can also + * be set to relative and move itself anywhere it wants to, + * displaying content in areas it shouldn't be allowed to touch. + */ + $match = Array('/\/\*.*\*\//', + '/expression/i', + '/behaviou*r/i', + '/binding/i', + '/include-source/i', + '/javascript/i', + '/script/i', + '/position/i'); + $replace = Array('','idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', ''); + $contentNew = preg_replace($match, $replace, $contentTemp); + if ($contentNew !== $contentTemp) { + // insecure css declarations are used. From now on we don't care + // anymore if the css is destroyed by sq_deent, sq_unspace or sq_unbackslash + $content = $contentNew; + } + return array($content, $newpos); +} + + +/** + * This function converts cid: url's into the ones that can be viewed in + * the browser. + * + * @param $message the message object + * @param $id the message id + * @param $cidurl the cid: url. + * @param $mailbox the message mailbox + * @return a string with a http-friendly url + */ +function sq_cid2http($message, $id, $cidurl, $mailbox){ + /** + * Get rid of quotes. + */ + $quotchar = substr($cidurl, 0, 1); + if ($quotchar == '"' || $quotchar == "'"){ + $cidurl = str_replace($quotchar, "", $cidurl); + } else { + $quotchar = ''; + } + $cidurl = substr(trim($cidurl), 4); + + $match_str = '/\{.*?\}\//'; + $str_rep = ''; + $cidurl = preg_replace($match_str, $str_rep, $cidurl); + + $linkurl = find_ent_id($cidurl, $message); + /* in case of non-safe cid links $httpurl should be replaced by a sort of + unsafe link image */ + $httpurl = ''; + + /** + * This is part of a fix for Outlook Express 6.x generating + * cid URLs without creating content-id headers. These images are + * not part of the multipart/related html mail. The html contains + * references to + * attached images with as goal to render them inline although + * the attachment disposition property is not inline. + */ + + if (empty($linkurl)) { + if (preg_match('/{.*}\//', $cidurl)) { + $cidurl = preg_replace('/{.*}\//','', $cidurl); + if (!empty($cidurl)) { + $linkurl = find_ent_id($cidurl, $message); + } + } + } + + if (!empty($linkurl)) { + $httpurl = $quotchar . SM_PATH . 'src/download.php?absolute_dl=true&' . + "passed_id=$id&mailbox=" . urlencode($mailbox) . + '&ent_id=' . $linkurl . $quotchar; + } else { + /** + * If we couldn't generate a proper img url, drop in a blank image + * instead of sending back empty, otherwise it causes unusual behaviour + */ + $httpurl = $quotchar . SM_PATH . 'images/blank.png' . $quotchar; + } + + return $httpurl; +} + +/** + * This function changes the tag into a
            tag since we + * can't really have a body-within-body. + * + * @param $attary an array of attributes and values of + * @param $mailbox mailbox we're currently reading (for cid2http) + * @param $message current message (for cid2http) + * @param $id current message id (for cid2http) + * @return a modified array of attributes to be set for
            + */ +function sq_body2div($attary, $mailbox, $message, $id){ + $me = 'sq_body2div'; + $divattary = Array('class' => "'bodyclass'"); + $bgcolor = '#ffffff'; + $text = '#000000'; + $styledef = ''; + if (is_array($attary) && sizeof($attary) > 0){ + foreach ($attary as $attname=>$attvalue){ + $quotchar = substr($attvalue, 0, 1); + $attvalue = str_replace($quotchar, "", $attvalue); + switch ($attname){ + case 'background': + $attvalue = sq_cid2http($message, $id, $attvalue, $mailbox); + $styledef .= "background-image: url('$attvalue'); "; + break; + case 'bgcolor': + $styledef .= "background-color: $attvalue; "; + break; + case 'text': + $styledef .= "color: $attvalue; "; + break; + } + } + if (strlen($styledef) > 0){ + $divattary{"style"} = "\"$styledef\""; + } + } + return $divattary; +} + +/** + * This is the main function and the one you should actually be calling. + * There are several variables you should be aware of an which need + * special description. + * + * Since the description is quite lengthy, see it here: + * http://linux.duke.edu/projects/mini/htmlfilter/ + * + * @param $body the string with HTML you wish to filter + * @param $tag_list see description above + * @param $rm_tags_with_content see description above + * @param $self_closing_tags see description above + * @param $force_tag_closing see description above + * @param $rm_attnames see description above + * @param $bad_attvals see description above + * @param $add_attr_to_tag see description above + * @param $message message object + * @param $id message id + * @return sanitized html safe to show on your pages. + */ +function sq_sanitize($body, + $tag_list, + $rm_tags_with_content, + $self_closing_tags, + $force_tag_closing, + $rm_attnames, + $bad_attvals, + $add_attr_to_tag, + $message, + $id, + $mailbox + ){ + $me = 'sq_sanitize'; + $rm_tags = array_shift($tag_list); + /** + * Normalize rm_tags and rm_tags_with_content. + */ + @array_walk($tag_list, 'sq_casenormalize'); + @array_walk($rm_tags_with_content, 'sq_casenormalize'); + @array_walk($self_closing_tags, 'sq_casenormalize'); + /** + * See if tag_list is of tags to remove or tags to allow. + * false means remove these tags + * true means allow these tags + */ + $curpos = 0; + $open_tags = Array(); + $trusted = "\n\n"; + $skip_content = false; + /** + * Take care of netscape's stupid javascript entities like + * &{alert('boo')}; + */ + $body = preg_replace("/&(\{.*?\};)/si", "&\\1", $body); + + while (($curtag = sq_getnxtag($body, $curpos)) != FALSE){ + list($tagname, $attary, $tagtype, $lt, $gt) = $curtag; + $free_content = substr($body, $curpos, $lt-$curpos); + /** + * Take care of + + +ECHO; + + echo "\n\n\n"; + + /* this is used to check elsewhere whether we should call this function */ + $pageheader_sent = TRUE; +} + +function makeInternalLink($path, $text, $target='') { + sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION); + if ($target != '') { + $target = " target=\"$target\""; + } + return ''.$text.''; +} + +function displayInternalLink($path, $text, $target='') { + echo makeInternalLink($path, $text, $target); +} + +function displayPageHeader($color, $mailbox, $xtra='', $session=false) { + + global $hide_sm_attributions, $frame_top, + $compose_new_win, $compose_width, $compose_height, + $attachemessages, $provider_name, $provider_uri, + $javascript_on, $default_use_mdn, $mdn_user_support, + $startMessage, $org_title; + + sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION ); + sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION ); + if (!isset($frame_top)) { + $frame_top = '_top'; + } + + if ($session) { + $compose_uri = $base_uri.'src/compose.php?mailbox='.urlencode($mailbox).'&session='."$session"; + } else { + $compose_uri = $base_uri.'src/compose.php?newmessage=1'; + $session = 0; + } + + // only output JavaScript if actually turned on + if($javascript_on || strpos($xtra, 'new_js_autodetect_results.value') ) { + if ( !defined('PAGE_NAME') ) define('PAGE_NAME', NULL); + switch ( PAGE_NAME ) { + case 'read_body': + $js =''; + + // compose in new window code + if ($compose_new_win == '1') { + if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) { + $compose_width = '640'; + } + if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) { + $compose_height = '550'; + } + $js .= "function comp_in_new(comp_uri) {\n". + " if (!comp_uri) {\n". + ' comp_uri = "'.$compose_uri."\";\n". + ' }'. "\n". + ' var newwin = window.open(comp_uri' . + ', "_blank",'. + '"width='.$compose_width. ',height='.$compose_height. + ',scrollbars=yes,resizable=yes,status=yes");'."\n". + "}\n\n"; + } + + // javascript for sending read receipts + if($default_use_mdn && $mdn_user_support) { + $js .= "function sendMDN() {\n". + " mdnuri=window.location+'&sendreceipt=1';\n" . + " window.location = mdnuri;\n" . + "\n}\n\n"; + } + + // if any of the above passes, add the JS tags too. + if($js) { + $js = "\n".'\n"; + } + + displayHtmlHeader($org_title, $js); + $onload = $xtra; + break; + case 'compose': + $js = '\n"; + $onload = 'onload="checkForm();"'; + displayHtmlHeader($org_title, $js); + break; + + default: + $js = '\n"; + + + $onload = 'onload="checkForm();"'; + displayHtmlHeader($org_title, $js); + } // end switch module + } else { + // JavaScript off + displayHtmlHeader($org_title); + $onload = ''; + } + + echo "\n\n"; + /** Here is the header and wrapping table **/ + $shortBoxName = htmlspecialchars(imap_utf7_decode_local( + readShortMailboxName($mailbox, $delimiter))); + if ( $shortBoxName == 'INBOX' ) { + $shortBoxName = _("INBOX"); + } + echo "\n" + . html_tag( 'table', '', '', $color[4], 'border="0" width="100%" cellspacing="0" cellpadding="2"' ) ."\n" + . html_tag( 'tr', '', '', $color[9] ) ."\n" + . html_tag( 'td', '', 'left' ) ."\n"; + if ( $shortBoxName <> '' && strtolower( $shortBoxName ) <> 'none' ) { + echo ' ' . _("Current Folder") . ": $shortBoxName \n"; + } else { + echo ' '; + } + echo " \n" + . html_tag( 'td', '', 'right' ) ."\n"; + displayInternalLink ('src/signout.php', _("Sign Out"), $frame_top); + echo "\n" + . " \n" + . html_tag( 'tr', '', '', $color[4] ) ."\n" + . ($hide_sm_attributions ? html_tag( 'td', '', 'left', '', 'colspan="2"' ) + : html_tag( 'td', '', 'left' ) ) + . "\n"; + $urlMailbox = urlencode($mailbox); + $startMessage = (int)$startMessage; + echo makeComposeLink('src/compose.php?mailbox='.$urlMailbox.'&startMessage='.$startMessage); + echo "  \n"; + displayInternalLink ('src/addressbook.php', _("Addresses")); + echo "  \n"; + displayInternalLink ('src/folders.php', _("Folders")); + echo "  \n"; + displayInternalLink ('src/options.php', _("Options")); + echo "  \n"; + displayInternalLink ("src/search.php?mailbox=$urlMailbox", _("Search")); + echo "  \n"; + displayInternalLink ('src/help.php', _("Help")); + echo "  \n"; + + do_hook('menuline'); + + echo " \n"; + + if (!$hide_sm_attributions) + { + echo html_tag( 'td', '', 'right' ) ."\n"; + if (!isset($provider_uri)) $provider_uri= 'http://squirrelmail.org/'; + if (!isset($provider_name)) $provider_name= 'SquirrelMail'; + echo ''.$provider_name.''; + echo "\n"; + } + echo " \n". + "
            \n\n"; +} + +/* blatently copied/truncated/modified from the above function */ +function compose_Header($color, $mailbox) { + + global $delimiter, $hide_sm_attributions, $base_uri, + $data_dir, $username, $frame_top, $compose_new_win; + + + if (!isset($frame_top)) { + $frame_top = '_top'; + } + + /* + Locate the first displayable form element + */ + if ( !defined('PAGE_NAME') ) define('PAGE_NAME', NULL); + switch ( PAGE_NAME ) { + case 'search': + $pos = getPref($data_dir, $username, 'search_pos', 0 ) - 1; + $onload = "onload=\"document.forms[$pos].elements[2].focus();\""; + displayHtmlHeader (_("Compose")); + break; + default: + $js = '\n"; + $onload = 'onload="checkForm();"'; + displayHtmlHeader (_("Compose"), $js); + break; + + } + + echo "\n\n"; +} + diff --git a/ehcp/webmail2/functions/plugin.php b/ehcp/webmail2/functions/plugin.php new file mode 100644 index 0000000..5ad0814 --- /dev/null +++ b/ehcp/webmail2/functions/plugin.php @@ -0,0 +1,210 @@ + 0, any one or more trues will override + * any falses. If $priority < 0, then one or more falses will + * override any trues. + * Priority 0 means majority rules. Ties will be broken with $tie + * + * @param string name the hook name + * @param mixed parm the parameters for the hook function + * @param int priority + * @param bool tie + * @return bool the result of the function + */ +function boolean_hook_function($name,$parm=NULL,$priority=0,$tie=false) { + global $squirrelmail_plugin_hooks; + $yea = 0; + $nay = 0; + $ret = $tie; + + if (isset($squirrelmail_plugin_hooks[$name]) && + is_array($squirrelmail_plugin_hooks[$name])) { + + /* Loop over the plugins that registered the hook */ + foreach ($squirrelmail_plugin_hooks[$name] as $function) { + if (function_exists($function)) { + $ret = $function($parm); + if ($ret) { + $yea++; + } else { + $nay++; + } + } + } + + /* Examine the aftermath and assign the return value appropriately */ + if (($priority > 0) && ($yea)) { + $ret = true; + } elseif (($priority < 0) && ($nay)) { + $ret = false; + } elseif ($yea > $nay) { + $ret = true; + } elseif ($nay > $yea) { + $ret = false; + } else { + // There's a tie, no action needed. + } + return $ret; + } + // If the code gets here, there was a problem - no hooks, etc. + return NULL; +} + +/** + * This function checks whether the user's USER_AGENT is known to + * be broken. If so, returns true and the plugin is invisible to the + * offending browser. + * *** THIS IS A TEST FOR JAVASCRIPT SUPPORT *** + * FIXME: This function needs to have its name changed! + * + * @return bool whether this browser properly supports JavaScript + */ +function soupNazi(){ + + $soup_menu = array('Mozilla/3','Mozilla/2','Mozilla/1', 'Opera 4', + 'Opera/4', 'OmniWeb', 'Lynx'); + sqgetGlobalVar('HTTP_USER_AGENT', $user_agent, SQ_SERVER); + foreach($soup_menu as $browser) { + if(stristr($user_agent, $browser)) { + return 1; + } + } + return 0; +} +/*************************************/ +/*** MAIN PLUGIN LOADING CODE HERE ***/ +/*************************************/ + +/* On startup, register all plugins configured for use. + $plugins needs to be globalized because this file is + sometimes included inside function (non-global) scope, + such as for logout_error. */ +global $plugins; +if (isset($plugins) && is_array($plugins)) { + // turn on output buffering in order to prevent output of new lines + ob_start(); + foreach ($plugins as $name) { + use_plugin($name); + } + $output = trim(ob_get_contents()); + ob_end_clean(); + // if plugins output more than newlines and spacing, stop script execution. + if (!empty($output)) { + die($output); + } +} + diff --git a/ehcp/webmail2/functions/prefs.php b/ehcp/webmail2/functions/prefs.php new file mode 100644 index 0000000..af4bd23 --- /dev/null +++ b/ehcp/webmail2/functions/prefs.php @@ -0,0 +1,164 @@ +' . + _("Could not create hashed directory structure!") . "
            \n" . + _("Please contact your system administrator and report this error.") . "
            \n"; + exit; + } + } + } + + /* And return that directory. */ + return ($real_hash_dir); +} + +/** + * Helper function for getHashDir which does the actual hash calculation. + * + * @param string username the username to calculate the hash dir for + * @return array a list of hash dirs for this username + */ +function computeHashDirs($username) { + /* Compute the hash for this user and extract the hash directories. */ + /* Note that the crc32() function result will be different on 32 and */ + /* 64 bit systems, thus the hack below. */ + $crc = crc32($username); + if ($crc & 0x80000000) { + $crc ^= 0xffffffff; + $crc += 1; + } + $hash = base_convert($crc, 10, 16); + $hash_dirs = array(); + for ($h = 0; $h < 4; ++ $h) { + $hash_dirs[] = substr($hash, $h, 1); + } + + /* Return our array of hash directories. */ + return ($hash_dirs); +} + diff --git a/ehcp/webmail2/functions/strings.php b/ehcp/webmail2/functions/strings.php new file mode 100644 index 0000000..cc2be28 --- /dev/null +++ b/ehcp/webmail2/functions/strings.php @@ -0,0 +1,1458 @@ +]*)([^\t >].*)?$/', $line, $regs); + $beginning_spaces = $regs[1]; + if (isset($regs[2])) { + $words = explode(' ', $regs[2]); + } else { + $words = array(); + } + + $i = 0; + $line = $beginning_spaces; + + while ($i < count($words)) { + /* Force one word to be on a line (minimum) */ + $line .= $words[$i]; + $line_len = strlen($beginning_spaces) + sq_strlen($words[$i],$charset) + 2; + if (isset($words[$i + 1])) + $line_len += sq_strlen($words[$i + 1],$charset); + $i ++; + + /* Add more words (as long as they fit) */ + while ($line_len < $wrap && $i < count($words)) { + $line .= ' ' . $words[$i]; + $i++; + if (isset($words[$i])) + $line_len += sq_strlen($words[$i],$charset) + 1; + else + $line_len += 1; + } + + /* Skip spaces if they are the first thing on a continued line */ + while (!isset($words[$i]) && $i < count($words)) { + $i ++; + } + + /* Go to the next line if we have more to process */ + if ($i < count($words)) { + $line .= "\n"; + } + } +} + +/** + * Does the opposite of sqWordWrap() + * @param string body the text to un-wordwrap + * @return void + */ +function sqUnWordWrap(&$body) { + global $squirrelmail_language; + + if ($squirrelmail_language == 'ja_JP') { + return; + } + + $lines = explode("\n", $body); + $body = ''; + $PreviousSpaces = ''; + $cnt = count($lines); + for ($i = 0; $i < $cnt; $i ++) { + preg_match("/^([\t >]*)([^\t >].*)?$/", $lines[$i], $regs); + $CurrentSpaces = $regs[1]; + if (isset($regs[2])) { + $CurrentRest = $regs[2]; + } else { + $CurrentRest = ''; + } + + if ($i == 0) { + $PreviousSpaces = $CurrentSpaces; + $body = $lines[$i]; + } else if (($PreviousSpaces == $CurrentSpaces) /* Do the beginnings match */ + && (strlen($lines[$i - 1]) > 65) /* Over 65 characters long */ + && strlen($CurrentRest)) { /* and there's a line to continue with */ + $body .= ' ' . $CurrentRest; + } else { + $body .= "\n" . $lines[$i]; + $PreviousSpaces = $CurrentSpaces; + } + } + $body .= "\n"; +} + +/** + * Truncates the given string so that it has at + * most $max_chars characters. NOTE that a "character" + * may be a multibyte character, or (optionally), an + * HTML entity, so this function is different than + * using substr() or mb_substr(). + * + * NOTE that if $elipses is given and used, the returned + * number of characters will be $max_chars PLUS the + * length of $elipses + * + * @param string $string The string to truncate + * @param int $max_chars The maximum allowable characters + * @param string $elipses A string that will be added to + * the end of the truncated string + * (ONLY if it is truncated) (OPTIONAL; + * default not used) + * @param boolean $html_entities_as_chars Whether or not to keep + * HTML entities together + * (OPTIONAL; default ignore + * HTML entities) + * + * @return string The truncated string + * + * @since 1.4.20 and 1.5.2 (replaced truncateWithEntities()) + * + */ +function sm_truncate_string($string, $max_chars, $elipses='', + $html_entities_as_chars=FALSE) +{ + + // if the length of the string is less than + // the allowable number of characters, just + // return it as is (even if it contains any + // HTML entities, that would just make the + // actual length even smaller) + // + $actual_strlen = sq_strlen($string, 'auto'); + if ($max_chars <= 0 || $actual_strlen <= $max_chars) + return $string; + + + // if needed, count the number of HTML entities in + // the string up to the maximum character limit, + // pushing that limit up for each entity found + // + $adjusted_max_chars = $max_chars; + if ($html_entities_as_chars) + { + + // $loop_count is needed to prevent an endless loop + // which is caused by buggy mbstring versions that + // return 0 (zero) instead of FALSE in some rare + // cases. Thanks, PHP. + // see: http://bugs.php.net/bug.php?id=52731 + // also: tracker $3053349 + // + $loop_count = 0; + $entity_pos = $entity_end_pos = -1; + while ($entity_end_pos + 1 < $actual_strlen + && ($entity_pos = sq_strpos($string, '&', $entity_end_pos + 1)) !== FALSE + && ($entity_end_pos = sq_strpos($string, ';', $entity_pos)) !== FALSE + && $entity_pos <= $adjusted_max_chars + && $loop_count++ < $max_chars) + { + $adjusted_max_chars += $entity_end_pos - $entity_pos; + } + + + // this isn't necessary because sq_substr() would figure this + // out anyway, but we can avoid a sq_substr() call and we + // know that we don't have to add an elipses (this is now + // an accurate comparison, since $adjusted_max_chars, like + // $actual_strlen, does not take into account HTML entities) + // + if ($actual_strlen <= $adjusted_max_chars) + return $string; + + } + + + // get the truncated string + // + $truncated_string = sq_substr($string, 0, $adjusted_max_chars); + + + // return with added elipses + // + return $truncated_string . $elipses; + +} + +/** + * If $haystack is a full mailbox name and $needle is the mailbox + * separator character, returns the last part of the mailbox name. + * + * @param string haystack full mailbox name to search + * @param string needle the mailbox separator character + * @return string the last part of the mailbox name + */ +function readShortMailboxName($haystack, $needle) { + + if ($needle == '') { + $elem = $haystack; + } else { + $parts = explode($needle, $haystack); + $elem = array_pop($parts); + while ($elem == '' && count($parts)) { + $elem = array_pop($parts); + } + } + return( $elem ); +} + +/** + * php_self + * + * Attempts to determine the path and filename and any arguments + * for the currently executing script. This is usually found in + * $_SERVER['REQUEST_URI'], but some environments may differ, so + * this function tries to standardize this value. + * + * @since 1.2.3 + * @return string The path, filename and any arguments for the + * current script + */ +function php_self() { + + $request_uri = ''; + + // first try $_SERVER['PHP_SELF'], which seems most reliable + // (albeit it usually won't include the query string) + // + $request_uri = ''; + if (!sqgetGlobalVar('PHP_SELF', $request_uri, SQ_SERVER) + || empty($request_uri)) { + + // well, then let's try $_SERVER['REQUEST_URI'] + // + $request_uri = ''; + if (!sqgetGlobalVar('REQUEST_URI', $request_uri, SQ_SERVER) + || empty($request_uri)) { + + // TODO: anyone have any other ideas? maybe $_SERVER['SCRIPT_NAME']??? + // + return ''; + } + + } + + // we may or may not have any query arguments, depending on + // which environment variable was used above, and the PHP + // version, etc., so let's check for it now + // + $query_string = ''; + if (strpos($request_uri, '?') === FALSE + && sqgetGlobalVar('QUERY_STRING', $query_string, SQ_SERVER) + && !empty($query_string)) { + + $request_uri .= '?' . $query_string; + } + + return $request_uri; + +} + + +/** + * Find out where squirrelmail lives and try to be smart about it. + * The only problem would be when squirrelmail lives in directories + * called "src", "functions", or "plugins", but people who do that need + * to be beaten with a steel pipe anyway. + * + * @return string the base uri of squirrelmail installation. + */ +function sqm_baseuri(){ + global $base_uri, $PHP_SELF; + /** + * If it is in the session, just return it. + */ + if (sqgetGlobalVar('base_uri',$base_uri,SQ_SESSION)){ + return $base_uri; + } + $dirs = array('|src/.*|', '|plugins/.*|', '|functions/.*|'); + $repl = array('', '', ''); + $base_uri = preg_replace($dirs, $repl, $PHP_SELF); + return $base_uri; +} + +/** + * get_location + * + * Determines the location to forward to, relative to your server. + * This is used in HTTP Location: redirects. + * If set, it uses $config_location_base as the first part of the URL, + * specifically, the protocol, hostname and port parts. The path is + * always autodetected. + * + * @return string the base url for this SquirrelMail installation + */ +function get_location () { + + global $imap_server_type, $config_location_base, + $is_secure_connection, $sq_ignore_http_x_forwarded_headers; + + /* Get the path, handle virtual directories */ + if(strpos(php_self(), '?')) { + $path = substr(php_self(), 0, strpos(php_self(), '?')); + } else { + $path = php_self(); + } + $path = substr($path, 0, strrpos($path, '/')); + + // proto+host+port are already set in config: + if ( !empty($config_location_base) ) { + // register it in the session just in case some plugin depends on this + sqsession_register($config_location_base . $path, 'sq_base_url'); + return $config_location_base . $path ; + } + // we computed it before, get it from the session: + if ( sqgetGlobalVar('sq_base_url', $full_url, SQ_SESSION) ) { + return $full_url . $path; + } + // else: autodetect + + /* Check if this is a HTTPS or regular HTTP request. */ + $proto = 'http://'; + if ($is_secure_connection) + $proto = 'https://'; + + /* Get the hostname from the Host header or server config. */ + if ($sq_ignore_http_x_forwarded_headers + || !sqgetGlobalVar('HTTP_X_FORWARDED_HOST', $host, SQ_SERVER) + || empty($host)) { + if ( !sqgetGlobalVar('HTTP_HOST', $host, SQ_SERVER) || empty($host) ) { + if ( !sqgetGlobalVar('SERVER_NAME', $host, SQ_SERVER) || empty($host) ) { + $host = ''; + } + } + } + + $port = ''; + if (strpos($host, ':') === FALSE) { + // Note: HTTP_X_FORWARDED_PROTO could be sent from the client and + // therefore possibly spoofed/hackable - for now, the + // administrator can tell SM to ignore this value by setting + // $sq_ignore_http_x_forwarded_headers to boolean TRUE in + // config/config_local.php, but in the future we may + // want to default this to TRUE and make administrators + // who use proxy systems turn it off (see 1.5.2+). + global $sq_ignore_http_x_forwarded_headers; + if ($sq_ignore_http_x_forwarded_headers + || !sqgetGlobalVar('HTTP_X_FORWARDED_PROTO', $forwarded_proto, SQ_SERVER)) + $forwarded_proto = ''; + if (sqgetGlobalVar('SERVER_PORT', $server_port, SQ_SERVER)) { + if (($server_port != 80 && $proto == 'http://') || + ($server_port != 443 && $proto == 'https://' && + strcasecmp($forwarded_proto, 'https') !== 0)) { + $port = sprintf(':%d', $server_port); + } + } + } + + /* this is a workaround for the weird macosx caching that + causes Apache to return 16080 as the port number, which causes + SM to bail */ + + if ($imap_server_type == 'macosx' && $port == ':16080') { + $port = ''; + } + + /* Fallback is to omit the server name and use a relative */ + /* URI, although this is not RFC 2616 compliant. */ + $full_url = ($host ? $proto . $host . $port : ''); + sqsession_register($full_url, 'sq_base_url'); + return $full_url . $path; +} + + +/** + * Encrypts password + * + * These functions are used to encrypt the password before it is + * stored in a cookie. The encryption key is generated by + * OneTimePadCreate(); + * + * @param string string the (password)string to encrypt + * @param string epad the encryption key + * @return string the base64-encoded encrypted password + */ +function OneTimePadEncrypt ($string, $epad) { + $pad = base64_decode($epad); + + if (strlen($pad)>0) { + // make sure that pad is longer than string + while (strlen($string)>strlen($pad)) { + $pad.=$pad; + } + } else { + // FIXME: what should we do when $epad is not base64 encoded or empty. + } + + $encrypted = ''; + for ($i = 0; $i < strlen ($string); $i++) { + $encrypted .= chr (ord($string[$i]) ^ ord($pad[$i])); + } + + return base64_encode($encrypted); +} + +/** + * Decrypts a password from the cookie + * + * Decrypts a password from the cookie, encrypted by OneTimePadEncrypt. + * This uses the encryption key that is stored in the session. + * + * @param string string the string to decrypt + * @param string epad the encryption key from the session + * @return string the decrypted password + */ +function OneTimePadDecrypt ($string, $epad) { + $pad = base64_decode($epad); + + if (strlen($pad)>0) { + // make sure that pad is longer than string + while (strlen($string)>strlen($pad)) { + $pad.=$pad; + } + } else { + // FIXME: what should we do when $epad is not base64 encoded or empty. + } + + $encrypted = base64_decode ($string); + $decrypted = ''; + for ($i = 0; $i < strlen ($encrypted); $i++) { + $decrypted .= chr (ord($encrypted[$i]) ^ ord($pad[$i])); + } + + return $decrypted; +} + + +/** + * Randomizes the mt_rand() function. + * + * Toss this in strings or integers and it will seed the generator + * appropriately. With strings, it is better to get them long. + * Use md5() to lengthen smaller strings. + * + * @param mixed val a value to seed the random number generator + * @return void + */ +function sq_mt_seed($Val) { + /* if mt_getrandmax() does not return a 2^n - 1 number, + this might not work well. This uses $Max as a bitmask. */ + $Max = mt_getrandmax(); + + if (! is_int($Val)) { + $Val = crc32($Val); + } + + if ($Val < 0) { + $Val *= -1; + } + + if ($Val == 0) { + return; + } + + mt_srand(($Val ^ mt_rand(0, $Max)) & $Max); +} + + +/** + * Init random number generator + * + * This function initializes the random number generator fairly well. + * It also only initializes it once, so you don't accidentally get + * the same 'random' numbers twice in one session. + * + * @return void + */ +function sq_mt_randomize() { + static $randomized; + + if ($randomized) { + return; + } + + /* Global. */ + sqgetGlobalVar('REMOTE_PORT', $remote_port, SQ_SERVER); + sqgetGlobalVar('REMOTE_ADDR', $remote_addr, SQ_SERVER); + sq_mt_seed((int)((double) microtime() * 1000000)); + sq_mt_seed(md5($remote_port . $remote_addr . getmypid())); + + /* getrusage */ + if (function_exists('getrusage')) { + /* Avoid warnings with Win32 */ + $dat = @getrusage(); + if (isset($dat) && is_array($dat)) { + $Str = ''; + foreach ($dat as $k => $v) + { + $Str .= $k . $v; + } + sq_mt_seed(md5($Str)); + } + } + + if(sqgetGlobalVar('UNIQUE_ID', $unique_id, SQ_SERVER)) { + sq_mt_seed(md5($unique_id)); + } + + $randomized = 1; +} + +/** + * Creates encryption key + * + * Creates an encryption key for encrypting the password stored in the cookie. + * The encryption key itself is stored in the session. + * + * @param int length optional, length of the string to generate + * @return string the encryption key + */ +function OneTimePadCreate ($length=100) { + sq_mt_randomize(); + + $pad = ''; + for ($i = 0; $i < $length; $i++) { + $pad .= chr(mt_rand(0,255)); + } + + return base64_encode($pad); +} + +/** + * Returns a string showing the size of the message/attachment. + * + * @param int bytes the filesize in bytes + * @return string the filesize in human readable format + */ +function show_readable_size($bytes) { + $bytes /= 1024; + $type = 'k'; + + if ($bytes / 1024 > 1) { + $bytes /= 1024; + $type = 'M'; + } + + if ($bytes < 10) { + $bytes *= 10; + settype($bytes, 'integer'); + $bytes /= 10; + } else { + settype($bytes, 'integer'); + } + + return $bytes . ' ' . $type . ''; +} + +/** + * Generates a random string from the caracter set you pass in + * + * @param int size the size of the string to generate + * @param string chars a string containing the characters to use + * @param int flags a flag to add a specific set to the characters to use: + * Flags: + * 1 = add lowercase a-z to $chars + * 2 = add uppercase A-Z to $chars + * 4 = add numbers 0-9 to $chars + * @return string the random string + */ +function GenerateRandomString($size, $chars, $flags = 0) { + if ($flags & 0x1) { + $chars .= 'abcdefghijklmnopqrstuvwxyz'; + } + if ($flags & 0x2) { + $chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + } + if ($flags & 0x4) { + $chars .= '0123456789'; + } + + if (($size < 1) || (strlen($chars) < 1)) { + return ''; + } + + sq_mt_randomize(); /* Initialize the random number generator */ + + $String = ''; + $j = strlen( $chars ) - 1; + while (strlen($String) < $size) { + $String .= $chars{mt_rand(0, $j)}; + } + + return $String; +} + +/** + * Escapes special characters for use in IMAP commands. + * + * @param string the string to escape + * @return string the escaped string + */ +function quoteimap($str) { + // FIXME use this performance improvement (not changing because this is STABLE branch): return str_replace(array('\\', '"'), array('\\\\', '\\"'), $str); + return preg_replace("/([\"\\\\])/", "\\\\$1", $str); +} + +/** + * Trims array + * + * Trims every element in the array, ie. remove the first char of each element + * Obsolete: will probably removed soon + * @param array array the array to trim + * @obsolete + */ +function TrimArray(&$array) { + foreach ($array as $k => $v) { + global $$k; + if (is_array($$k)) { + foreach ($$k as $k2 => $v2) { + $$k[$k2] = substr($v2, 1); + } + } else { + $$k = substr($v, 1); + } + + /* Re-assign back to array. */ + $array[$k] = $$k; + } +} + +/** + * Removes slashes from every element in the array + */ +function RemoveSlashes(&$array) { + foreach ($array as $k => $v) { + global $$k; + if (is_array($$k)) { + foreach ($$k as $k2 => $v2) { + $newArray[stripslashes($k2)] = stripslashes($v2); + } + $$k = $newArray; + } else { + $$k = stripslashes($v); + } + + /* Re-assign back to the array. */ + $array[$k] = $$k; + } +} + +/** + * Create compose link + * + * Returns a link to the compose-page, taking in consideration + * the compose_in_new and javascript settings. + * @param string url the URL to the compose page + * @param string text the link text, default "Compose" + * @return string a link to the compose page + */ +function makeComposeLink($url, $text = null, $target='') +{ + global $compose_new_win,$javascript_on; + + if(!$text) { + $text = _("Compose"); + } + + + // if not using "compose in new window", make + // regular link and be done with it + if($compose_new_win != '1') { + return makeInternalLink($url, $text, $target); + } + + + // build the compose in new window link... + + + // if javascript is on, use onClick event to handle it + if($javascript_on) { + sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION); + return ''. $text.''; + } + + + // otherwise, just open new window using regular HTML + return makeInternalLink($url, $text, '_blank'); + +} + +/** + * Print variable + * + * sm_print_r($some_variable, [$some_other_variable [, ...]]); + * + * Debugging function - does the same as print_r, but makes sure special + * characters are converted to htmlentities first. This will allow + * values like to be displayed. + * The output is wrapped in <
            > and <
            > tags. + * + * @return void + */ +function sm_print_r() { + ob_start(); // Buffer output + foreach(func_get_args() as $var) { + print_r($var); + echo "\n"; + } + $buffer = ob_get_contents(); // Grab the print_r output + ob_end_clean(); // Silently discard the output & stop buffering + print '
            ';
            +    print htmlentities($buffer);
            +    print '
            '; +} + +/** + * version of fwrite which checks for failure + */ +function sq_fwrite($fp, $string) { + // write to file + $count = @fwrite($fp,$string); + // the number of bytes written should be the length of the string + if($count != strlen($string)) { + return FALSE; + } + + return $count; +} +/** + * Tests if string contains 8bit symbols. + * + * If charset is not set, function defaults to default_charset. + * $default_charset global must be set correctly if $charset is + * not used. + * @param string $string tested string + * @param string $charset charset used in a string + * @return bool true if 8bit symbols are detected + * @since 1.5.1 and 1.4.4 + */ +function sq_is8bit($string,$charset='') { + global $default_charset; + + if ($charset=='') $charset=$default_charset; + + /** + * Don't use \240 in ranges. Sometimes RH 7.2 doesn't like it. + * Don't use \200-\237 for iso-8859-x charsets. This ranges + * stores control symbols in those charsets. + * Use preg_match instead of ereg in order to avoid problems + * with mbstring overloading + */ + if (preg_match("/^iso-8859/i",$charset)) { + $needle='/\240|[\241-\377]/'; + } else { + $needle='/[\200-\237]|\240|[\241-\377]/'; + } + return preg_match("$needle",$string); +} + +/** + * Function returns number of characters in string. + * + * Returned number might be different from number of bytes in string, + * if $charset is multibyte charset. Detection depends on mbstring + * functions. If mbstring does not support tested multibyte charset, + * vanilla string length function is used. + * @param string $str string + * @param string $charset charset + * @since 1.5.1 and 1.4.6 + * @return integer number of characters in string + */ +function sq_strlen($string, $charset=NULL){ + + // NULL charset? Just use strlen() + // + if (is_null($charset)) + return strlen($string); + + + // use current character set? + // + if ($charset == 'auto') + { +//FIXME: this may or may not be better as a session value instead of a global one + global $sq_string_func_auto_charset; + if (!isset($sq_string_func_auto_charset)) + { + global $default_charset, $squirrelmail_language; + set_my_charset(); + $sq_string_func_auto_charset = $default_charset; + if ($squirrelmail_language == 'ja_JP') $sq_string_func_auto_charset = 'euc-jp'; + } + $charset = $sq_string_func_auto_charset; + } + + + // standardize character set name + // + $charset = strtolower($charset); + + +/* ===== FIXME: this list is not used in 1.5.x, but if we need it, unless this differs between all our string function wrappers, we should store this info in the session + // only use mbstring with the following character sets + // + $sq_strlen_mb_charsets = array( + 'utf-8', + 'big5', + 'gb2312', + 'gb18030', + 'euc-jp', + 'euc-cn', + 'euc-tw', + 'euc-kr' + ); + + + // now we can use mb_strlen() if needed + // + if (in_array($charset, $sq_strlen_mb_charsets) + && in_array($charset, sq_mb_list_encodings())) +===== */ +//FIXME: is there any reason why this cannot be a static global array used by all string wrapper functions? + if (in_array($charset, sq_mb_list_encodings())) + return mb_strlen($string, $charset); + + + // else use normal strlen() + // + return strlen($string); + +} + +/** + * This is a replacement for PHP's strpos() that is + * multibyte-aware. + * + * @param string $haystack The string to search within + * @param string $needle The substring to search for + * @param int $offset The offset from the beginning of $haystack + * from which to start searching + * (OPTIONAL; default none) + * @param string $charset The charset of the given string. A value of NULL + * here will force the use of PHP's standard strpos(). + * (OPTIONAL; default is "auto", which indicates that + * the user's current charset should be used). + * + * @return mixed The integer offset of the next $needle in $haystack, + * if found, or FALSE if not found + * + */ +function sq_strpos($haystack, $needle, $offset=0, $charset='auto') +{ + + // NULL charset? Just use strpos() + // + if (is_null($charset)) + return strpos($haystack, $needle, $offset); + + + // use current character set? + // + if ($charset == 'auto') + { +//FIXME: this may or may not be better as a session value instead of a global one + global $sq_string_func_auto_charset; + if (!isset($sq_string_func_auto_charset)) + { + global $default_charset, $squirrelmail_language; + set_my_charset(); + $sq_string_func_auto_charset = $default_charset; + if ($squirrelmail_language == 'ja_JP') $sq_string_func_auto_charset = 'euc-jp'; + } + $charset = $sq_string_func_auto_charset; + } + + + // standardize character set name + // + $charset = strtolower($charset); + + +/* ===== FIXME: this list is not used in 1.5.x, but if we need it, unless this differs between all our string function wrappers, we should store this info in the session + // only use mbstring with the following character sets + // + $sq_strpos_mb_charsets = array( + 'utf-8', + 'big5', + 'gb2312', + 'gb18030', + 'euc-jp', + 'euc-cn', + 'euc-tw', + 'euc-kr' + ); + + + // now we can use mb_strpos() if needed + // + if (in_array($charset, $sq_strpos_mb_charsets) + && in_array($charset, sq_mb_list_encodings())) +===== */ +//FIXME: is there any reason why this cannot be a static global array used by all string wrapper functions? + if (in_array($charset, sq_mb_list_encodings())) + return mb_strpos($haystack, $needle, $offset, $charset); + + + // else use normal strpos() + // + return strpos($haystack, $needle, $offset); + +} + +/** + * This is a replacement for PHP's substr() that is + * multibyte-aware. + * + * @param string $string The string to operate upon + * @param int $start The offset at which to begin substring extraction + * @param int $length The number of characters after $start to return + * NOTE that if you need to specify a charset but + * want to achieve normal substr() behavior where + * $length is not specified, use NULL (OPTIONAL; + * default from $start to end of string) + * @param string $charset The charset of the given string. A value of NULL + * here will force the use of PHP's standard substr(). + * (OPTIONAL; default is "auto", which indicates that + * the user's current charset should be used). + * + * @return string The desired substring + * + * Of course, you can use more advanced (e.g., negative) values + * for $start and $length as needed - see the PHP manual for more + * information: http://www.php.net/manual/function.substr.php + * + */ +function sq_substr($string, $start, $length=NULL, $charset='auto') +{ + + // if $length is NULL, use the full string length... + // we have to do this to mimick the use of substr() + // where $length is not given + // + if (is_null($length)) + $length = sq_strlen($length, $charset); + + + // NULL charset? Just use substr() + // + if (is_null($charset)) + return substr($string, $start, $length); + + + // use current character set? + // + if ($charset == 'auto') + { +//FIXME: this may or may not be better as a session value instead of a global one + global $sq_string_func_auto_charset; + if (!isset($sq_string_func_auto_charset)) + { + global $default_charset, $squirrelmail_language; + set_my_charset(); + $sq_string_func_auto_charset = $default_charset; + if ($squirrelmail_language == 'ja_JP') $sq_string_func_auto_charset = 'euc-jp'; + } + $charset = $sq_string_func_auto_charset; + } + + + // standardize character set name + // + $charset = strtolower($charset); + + +/* ===== FIXME: this list is not used in 1.5.x, but if we need it, unless this differs between all our string function wrappers, we should store this info in the session + // only use mbstring with the following character sets + // + $sq_substr_mb_charsets = array( + 'utf-8', + 'big5', + 'gb2312', + 'gb18030', + 'euc-jp', + 'euc-cn', + 'euc-tw', + 'euc-kr' + ); + + + // now we can use mb_substr() if needed + // + if (in_array($charset, $sq_substr_mb_charsets) + && in_array($charset, sq_mb_list_encodings())) +===== */ +//FIXME: is there any reason why this cannot be a global array used by all string wrapper functions? + if (in_array($charset, sq_mb_list_encodings())) + return mb_substr($string, $start, $length, $charset); + + + // else use normal substr() + // + return substr($string, $start, $length); + +} + +/** + * This is a replacement for PHP's substr_replace() that is + * multibyte-aware. + * + * @param string $string The string to operate upon + * @param string $replacement The string to be inserted + * @param int $start The offset at which to begin substring replacement + * @param int $length The number of characters after $start to remove + * NOTE that if you need to specify a charset but + * want to achieve normal substr_replace() behavior + * where $length is not specified, use NULL (OPTIONAL; + * default from $start to end of string) + * @param string $charset The charset of the given string. A value of NULL + * here will force the use of PHP's standard substr(). + * (OPTIONAL; default is "auto", which indicates that + * the user's current charset should be used). + * + * @return string The manipulated string + * + * Of course, you can use more advanced (e.g., negative) values + * for $start and $length as needed - see the PHP manual for more + * information: http://www.php.net/manual/function.substr-replace.php + * + */ +function sq_substr_replace($string, $replacement, $start, $length=NULL, + $charset='auto') +{ + + // NULL charset? Just use substr_replace() + // + if (is_null($charset)) + return is_null($length) ? substr_replace($string, $replacement, $start) + : substr_replace($string, $replacement, $start, $length); + + + // use current character set? + // + if ($charset == 'auto') + { +//FIXME: this may or may not be better as a session value instead of a global one + $charset = $auto_charset; + global $sq_string_func_auto_charset; + if (!isset($sq_string_func_auto_charset)) + { + global $default_charset, $squirrelmail_language; + set_my_charset(); + $sq_string_func_auto_charset = $default_charset; + if ($squirrelmail_language == 'ja_JP') $sq_string_func_auto_charset = 'euc-jp'; + } + $charset = $sq_string_func_auto_charset; + } + + + // standardize character set name + // + $charset = strtolower($charset); + + +/* ===== FIXME: this list is not used in 1.5.x, but if we need it, unless this differs between all our string function wrappers, we should store this info in the session + // only use mbstring with the following character sets + // + $sq_substr_replace_mb_charsets = array( + 'utf-8', + 'big5', + 'gb2312', + 'gb18030', + 'euc-jp', + 'euc-cn', + 'euc-tw', + 'euc-kr' + ); + + + // now we can use our own implementation using + // mb_substr() and mb_strlen() if needed + // + if (in_array($charset, $sq_substr_replace_mb_charsets) + && in_array($charset, sq_mb_list_encodings())) +===== */ +//FIXME: is there any reason why this cannot be a global array used by all string wrapper functions? + if (in_array($charset, sq_mb_list_encodings())) + { + + $string_length = mb_strlen($string, $charset); + + if ($start < 0) + $start = max(0, $string_length + $start); + + else if ($start > $string_length) + $start = $string_length; + + if ($length < 0) + $length = max(0, $string_length - $start + $length); + + else if (is_null($length) || $length > $string_length) + $length = $string_length; + + if ($start + $length > $string_length) + $length = $string_length - $start; + + return mb_substr($string, 0, $start, $charset) + . $replacement + . mb_substr($string, + $start + $length, + $string_length, // FIXME: I can't see why this is needed: - $start - $length, + $charset); + + } + + + // else use normal substr_replace() + // + return is_null($length) ? substr_replace($string, $replacement, $start) + : substr_replace($string, $replacement, $start, $length); + +} + +/** + * Replacement of mb_list_encodings function + * + * This function provides replacement for function that is available only + * in php 5.x. Function does not test all mbstring encodings. Only the ones + * that might be used in SM translations. + * + * Supported strings are stored in session in order to reduce number of + * mb_internal_encoding function calls. + * + * If mb_list_encodings() function is present, code uses it. Main difference + * from original function behaviour - array values are lowercased in order to + * simplify use of returned array in in_array() checks. + * + * If you want to test all mbstring encodings - fill $list_of_encodings + * array. + * @return array list of encodings supported by php mbstring extension + * @since 1.5.1 and 1.4.6 + */ +function sq_mb_list_encodings() { + + // if it's already in the session, don't need to regenerate it + if (sqgetGlobalVar('mb_supported_encodings',$mb_supported_encodings,SQ_SESSION) + && is_array($mb_supported_encodings)) + return $mb_supported_encodings; + + // check if mbstring extension is present + if (! function_exists('mb_internal_encoding')) { + $supported_encodings = array(); + sqsession_register($supported_encodings, 'mb_supported_encodings'); + return $supported_encodings; + } + + // php 5+ function + if (function_exists('mb_list_encodings')) { + $supported_encodings = mb_list_encodings(); + array_walk($supported_encodings, 'sq_lowercase_array_vals'); + sqsession_register($supported_encodings, 'mb_supported_encodings'); + return $supported_encodings; + } + + // save original encoding + $orig_encoding=mb_internal_encoding(); + + $list_of_encoding=array( + 'pass', + 'auto', + 'ascii', + 'jis', + 'utf-8', + 'sjis', + 'euc-jp', + 'iso-8859-1', + 'iso-8859-2', + 'iso-8859-7', + 'iso-8859-9', + 'iso-8859-15', + 'koi8-r', + 'koi8-u', + 'big5', + 'gb2312', + 'gb18030', + 'windows-1251', + 'windows-1255', + 'windows-1256', + 'tis-620', + 'iso-2022-jp', + 'euc-cn', + 'euc-kr', + 'euc-tw', + 'uhc', + 'utf7-imap'); + + $supported_encodings=array(); + + foreach ($list_of_encoding as $encoding) { + // try setting encodings. suppress warning messages + if (@mb_internal_encoding($encoding)) + $supported_encodings[]=$encoding; + } + + // restore original encoding + mb_internal_encoding($orig_encoding); + + // register list in session + sqsession_register($supported_encodings, 'mb_supported_encodings'); + + return $supported_encodings; +} + +/** + * Callback function used to lowercase array values. + * @param string $val array value + * @param mixed $key array key + * @since 1.5.1 and 1.4.6 + */ +function sq_lowercase_array_vals(&$val,$key) { + $val = strtolower($val); +} + +/** + * Callback function to trim whitespace from a value, to be used in array_walk + * @param string $value value to trim + * @since 1.5.2 and 1.4.7 + */ +function sq_trim_value ( &$value ) { + $value = trim($value); +} + +/** + * Gathers the list of secuirty tokens currently + * stored in the user's preferences and optionally + * purges old ones from the list. + * + * @param boolean $purge_old Indicates if old tokens + * should be purged from the + * list ("old" is 2 days or + * older unless the administrator + * overrides that value using + * $max_token_age_days in + * config/config_local.php) + * (OPTIONAL; default is to always + * purge old tokens) + * + * @return array The list of tokens + * + * @since 1.4.19 and 1.5.2 + * + */ +function sm_get_user_security_tokens($purge_old=TRUE) +{ + + global $data_dir, $username, $max_token_age_days; + + $tokens = getPref($data_dir, $username, 'security_tokens', ''); + if (($tokens = unserialize($tokens)) === FALSE || !is_array($tokens)) + $tokens = array(); + + // purge old tokens if necessary + // + if ($purge_old) + { + if (empty($max_token_age_days)) $max_token_age_days = 2; + $now = time(); + $discard_token_date = $now - ($max_token_age_days * 86400); + $cleaned_tokens = array(); + foreach ($tokens as $token => $timestamp) + if ($timestamp >= $discard_token_date) + $cleaned_tokens[$token] = $timestamp; + $tokens = $cleaned_tokens; + } + + return $tokens; + +} + +/** + * Generates a security token that is then stored in + * the user's preferences with a timestamp for later + * verification/use. + * + * WARNING: If the administrator has turned the token system + * off by setting $disable_security_tokens to TRUE in + * config/config.php or the configuration tool, this + * function will not store tokens in the user + * preferences (but it will still generate and return + * a random string). + * + * @return string A security token + * + * @since 1.4.19 and 1.5.2 + * + */ +function sm_generate_security_token() +{ + + global $data_dir, $username, $disable_security_tokens; + $max_generation_tries = 1000; + + $tokens = sm_get_user_security_tokens(); + + $new_token = GenerateRandomString(12, '', 7); + $count = 0; + while (isset($tokens[$new_token])) + { + $new_token = GenerateRandomString(12, '', 7); + if (++$count > $max_generation_tries) + { + logout_error(_("Fatal token generation error; please contact your system administrator or the SquirrelMail Team")); + exit; + } + } + + // is the token system enabled? CAREFUL! + // + if (!$disable_security_tokens) + { + $tokens[$new_token] = time(); + setPref($data_dir, $username, 'security_tokens', serialize($tokens)); + } + + return $new_token; + +} + +/** + * Validates a given security token and optionally remove it + * from the user's preferences if it was valid. If the token + * is too old but otherwise valid, it will still be rejected. + * + * "Too old" is 2 days or older unless the administrator + * overrides that value using $max_token_age_days in + * config/config_local.php + * + * WARNING: If the administrator has turned the token system + * off by setting $disable_security_tokens to TRUE in + * config/config.php or the configuration tool, this + * function will always return TRUE. + * + * @param string $token The token to validate + * @param int $validity_period The number of seconds tokens are valid + * for (set to zero to remove valid tokens + * after only one use; use 3600 to allow + * tokens to be reused for an hour) + * (OPTIONAL; default is to only allow tokens + * to be used once) + * @param boolean $show_error Indicates that if the token is not + * valid, this function should display + * a generic error, log the user out + * and exit - this function will never + * return in that case. + * (OPTIONAL; default FALSE) + * + * @return boolean TRUE if the token validated; FALSE otherwise + * + * @since 1.4.19 and 1.5.2 + * + */ +function sm_validate_security_token($token, $validity_period=0, $show_error=FALSE) +{ + + global $data_dir, $username, $max_token_age_days, + $disable_security_tokens; + + // bypass token validation? CAREFUL! + // + if ($disable_security_tokens) return TRUE; + + // don't purge old tokens here because we already + // do it when generating tokens + // + $tokens = sm_get_user_security_tokens(FALSE); + + // token not found? + // + if (empty($tokens[$token])) + { + if (!$show_error) return FALSE; + logout_error(_("This page request could not be verified and appears to have expired.")); + exit; + } + + $now = time(); + $timestamp = $tokens[$token]; + + // whether valid or not, we want to remove it from + // user prefs if it's old enough + // + if ($timestamp < $now - $validity_period) + { + unset($tokens[$token]); + setPref($data_dir, $username, 'security_tokens', serialize($tokens)); + } + + // reject tokens that are too old + // + if (empty($max_token_age_days)) $max_token_age_days = 2; + $old_token_date = $now - ($max_token_age_days * 86400); + if ($timestamp < $old_token_date) + { + if (!$show_error) return FALSE; + logout_error(_("The current page request appears to have originated from an untrusted source.")); + exit; + } + + // token OK! + // + return TRUE; + +} + +$PHP_SELF = php_self(); diff --git a/ehcp/webmail2/functions/tree.php b/ehcp/webmail2/functions/tree.php new file mode 100644 index 0000000..e5cdb98 --- /dev/null +++ b/ehcp/webmail2/functions/tree.php @@ -0,0 +1,181 @@ + -1) + return $result; + } + // if we aren't a child of one of the subNodes, must be a child of current node + return $treeIndexToStart; + } else + return $treeIndexToStart; + } else { + // we aren't a child of this node at all + return -1; + } +} + +/** + * Will insert a new value into the tree, based on a given comparison value. + * + * @param mixed comparisonValue the value to determine where the new element should be placed. + * @param mixed value the new node to insert + * @param array tree the tree to insert the node in, by ref + */ +function addChildNodeToTree($comparisonValue, $value, &$tree) { + $parentNode = findParentForChild($comparisonValue, 0, $tree); + + // create a new subNode + $newNodeIndex = count($tree); + $tree[$newNodeIndex]['value'] = $value; + $tree[$newNodeIndex]['doIHaveChildren'] = false; + + if ($tree[$parentNode]['doIHaveChildren'] == false) { + // make sure the parent knows it has children + $tree[$parentNode]['subNodes'][0] = $newNodeIndex; + $tree[$parentNode]['doIHaveChildren'] = true; + } else { + $nextSubNode = count($tree[$parentNode]['subNodes']); + // make sure the parent knows it has children + $tree[$parentNode]['subNodes'][$nextSubNode] = $newNodeIndex; + } +} + +/** + * Recursively walk the tree of trash mailboxes and delete all folders and messages + * + * @param int index the place in the tree to start, usually 0 + * @param stream imap_stream the IMAP connection to send commands to + * @param array tree the tree to walk + * @return void + */ +function walkTreeInPreOrderEmptyTrash($index, $imap_stream, $tree) { + global $trash_folder; + if ($tree[$index]['doIHaveChildren']) { + for ($j = 0; $j < count($tree[$index]['subNodes']); $j++) { + walkTreeInPreOrderEmptyTrash($tree[$index]['subNodes'][$j], $imap_stream, $tree); + } + if ($tree[$index]['value'] != $trash_folder) { + sqimap_mailbox_delete($imap_stream, $tree[$index]['value']); + } else { + $mbx_response = sqimap_mailbox_select($imap_stream, $trash_folder); + if ($mbx_response['EXISTS'] > 0) { + sqimap_messages_flag ($imap_stream, 1, '*', 'Deleted', true); + // CLOSE === EXPUNGE and UNSELECT + sqimap_run_command($imap_stream,'CLOSE',false,$response,$message); + } + } + } else { + if ($tree[$index]['value'] != $trash_folder) { + sqimap_mailbox_delete($imap_stream, $tree[$index]['value']); + } else { + $mbx_response = sqimap_mailbox_select($imap_stream, $trash_folder); + if ($mbx_response['EXISTS'] > 0) { + sqimap_messages_flag ($imap_stream, 1, '*', 'Deleted', true); + // CLOSE === EXPUNGE and UNSELECT + sqimap_run_command($imap_stream,'CLOSE',false,$response,$message); + } + } + } +} + + +/** + * Recursively delete a tree of mail folders. + * + * @param int index the place in the tree to start, usually 0 + * @param stream imap_stream the IMAP connection to send commands to + * @param array tree the tree to walk + * @return void + */ +function walkTreeInPreOrderDeleteFolders($index, $imap_stream, $tree) { + if ($tree[$index]['doIHaveChildren']) { + for ($j = 0; $j < count($tree[$index]['subNodes']); $j++) { + walkTreeInPreOrderDeleteFolders($tree[$index]['subNodes'][$j], $imap_stream, $tree); + } + sqimap_mailbox_delete($imap_stream, $tree[$index]['value']); + } else { + sqimap_mailbox_delete($imap_stream, $tree[$index]['value']); + } +} + +/** + * Recursively walk a tree of folders to create them under the trash folder. + */ +function walkTreeInPostOrderCreatingFoldersUnderTrash($index, $imap_stream, $tree, $topFolderName) { + global $trash_folder, $delimiter; + + $position = strrpos($topFolderName, $delimiter); + if ($position !== FALSE) { + $position++; + } + $subFolderName = substr($tree[$index]['value'], $position); + + if ($tree[$index]['doIHaveChildren']) { + sqimap_mailbox_create($imap_stream, $trash_folder . $delimiter . $subFolderName, ""); + $mbx_response = sqimap_mailbox_select($imap_stream, $tree[$index]['value']); + $messageCount = $mbx_response['EXISTS']; + if ($messageCount > 0) { + sqimap_msgs_list_copy($imap_stream, '1:*', $trash_folder . $delimiter . $subFolderName); + } + // after copy close the mailbox to get in unselected state + sqimap_run_command($imap_stream,'CLOSE',false,$response,$message); + for ($j = 0;$j < count($tree[$index]['subNodes']); $j++) + walkTreeInPostOrderCreatingFoldersUnderTrash($tree[$index]['subNodes'][$j], $imap_stream, $tree, $topFolderName); + } else { + sqimap_mailbox_create($imap_stream, $trash_folder . $delimiter . $subFolderName, ''); + $mbx_response = sqimap_mailbox_select($imap_stream, $tree[$index]['value']); + $messageCount = $mbx_response['EXISTS']; + if ($messageCount > 0) { + sqimap_msgs_list_copy($imap_stream, '1:*', $trash_folder . $delimiter . $subFolderName); + } + // after copy close the mailbox to get in unselected state + sqimap_run_command($imap_stream,'CLOSE',false,$response,$message); + } +} + +/** + * Recursive function that outputs a tree In-Pre-Order. + * @param int index the node to start (usually 0) + * @param array tree the tree to walk + * @return void + */ +function simpleWalkTreePre($index, $tree) { + if ($tree[$index]['doIHaveChildren']) { + for ($j = 0; $j < count($tree[$index]['subNodes']); $j++) { + simpleWalkTreePre($tree[$index]['subNodes'][$j], $tree); + } + echo $tree[$index]['value'] . '
            '; + } else { + echo $tree[$index]['value'] . '
            '; + } +} diff --git a/ehcp/webmail2/functions/url_parser.php b/ehcp/webmail2/functions/url_parser.php new file mode 100644 index 0000000..d1572a4 --- /dev/null +++ b/ehcp/webmail2/functions/url_parser.php @@ -0,0 +1,249 @@ +', ".\r", ".\n", + '. ', ' ', ')', '(', '"', '<', '>', '.<', + ']', '[', '{', '}', "\240", ', ', '. ', ",\n", ",\r"); + + +/** + * Parses a body and converts all found URLs to clickable links. + * + * @param string body the body to process, by ref + * @return void + */ +function parseUrl (&$body) { + global $url_parser_poss_ends, $url_parser_url_tokens; + $start = 0; + $blength = strlen($body); + + while ($start < $blength) { + $target_token = ''; + $target_pos = $blength; + + /* Find the first token to replace */ + foreach ($url_parser_url_tokens as $the_token) { + $pos = strpos(strtolower($body), $the_token, $start); + if (is_int($pos) && $pos < $target_pos) { + $target_pos = $pos; + $target_token = $the_token; + } + } + + /* Look for email addresses between $start and $target_pos */ + $check_str = substr($body, $start, $target_pos-$start); + + if (parseEmail($check_str)) { + replaceBlock($body, $check_str, $start, $target_pos); + $blength = strlen($body); + $target_pos = strlen($check_str) + $start; + } + + // rfc 2368 (mailto URL) + if ($target_token == 'mailto:') { + $target_pos += 7; //skip mailto: + $end = $blength; + + $mailto = substr($body, $target_pos, $end-$target_pos); + + global $MailTo_PReg_Match; + if ((preg_match($MailTo_PReg_Match, $mailto, $regs)) && ($regs[0] != '')) { + $mailto_before = $target_token . $regs[0]; + /** + * '+' characters in a mailto URI don't need to be percent-encoded. + * However, when mailto URI data is transported via HTTP, '+' must + * be percent-encoded as %2B so that when the HTTP data is + * percent-decoded, you get '+' back and not a space. + */ + $mailto_params = str_replace("+", "%2B", $regs[10]); + if ($regs[1]) { //if there is an email addr before '?', we need to merge it with the params + $to = 'to=' . str_replace("+", "%2B", $regs[1]); + if (strpos($mailto_params, 'to=') > -1) //already a 'to=' + $mailto_params = str_replace('to=', $to . '%2C%20', $mailto_params); + else { + if ($mailto_params) //already some params, append to them + $mailto_params .= '&' . $to; + else + $mailto_params .= '?' . $to; + } + } + $url_str = preg_replace(array('/to=/i', '/(?$url"; + replaceBlock($body,$url_str,$target_pos,$end); + $target_pos += strlen($url_str); + } + else { + // Not quite a valid link, skip ahead to next chance + $target_pos += strlen($target_token); + } + } + + /* Move forward */ + $start = $target_pos; + $blength = strlen($body); + } +} + +/** + * Finds first occurrence of 8bit data in the string + * + * Function finds first 8bit symbol or html entity that represents 8bit character. + * Search start is defined by $offset argument. Search ends at $maxlength position. + * If $maxlength is not defined or bigger than provided string, search ends when + * string ends. + * + * Check returned data type in order to avoid confusion between bool(false) + * (not found) and int(0) (first char in the string). + * @param string $haystack + * @param integer $offset + * @param integer $maxlength + * @return mixed integer with first 8bit character position or boolean false + * @since 1.5.2 and 1.4.7 + */ +function sq_strpos_8bit($haystack,$offset=0,$maxlength=false) { + $ret = false; + + if ($maxlength===false || strlen($haystack) < $maxlength) { + $maxlength=strlen($haystack); + } + + for($i=$offset;$i<$maxlength;$i++) { + /* rh7-8 compatibility. don't use full 8bit range in regexp */ + if (preg_match('/[\200-\237]|\240|[\241-\377]/',$haystack[$i])) { + /* we have 8bit char. stop here and return position */ + $ret = $i; + break; + } elseif ($haystack[$i]=='&') { + $substring = substr($haystack,$i); + /** + * 1. look for "&#(decimal number);" where decimal_number is bigger than 127 + * 2. look for "&x(hexadecimal number);", where hex number is bigger than x7f + * 3. look for any html character entity that is not 7bit html special char. Use + * own sq_get_html_translation_table() function with 'utf-8' character set in + * order to get all html entities. + */ + if ((preg_match('/^&#(\d+);/',$substring,$match) && $match[1]>127) || + (preg_match('/^&x([0-9a-f]+);/i',$substring,$match) && $match[1]>"\x7f") || + (preg_match('/^&([a-z]+);/i',$substring,$match) && + !in_array($match[0],get_html_translation_table(HTML_SPECIALCHARS)) && + in_array($match[0],sq_get_html_translation_table(HTML_ENTITIES,ENT_COMPAT,'utf-8')))) { + $ret = $i; + break; + } + } + } + return $ret; +} diff --git a/ehcp/webmail2/help/.htaccess b/ehcp/webmail2/help/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/help/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/help/en_US/FAQ.hlp b/ehcp/webmail2/help/en_US/FAQ.hlp new file mode 100644 index 0000000..2e8d8ec --- /dev/null +++ b/ehcp/webmail2/help/en_US/FAQ.hlp @@ -0,0 +1,108 @@ + + + Frequently Asked Questions + + + Often people have the same questions that have been asked many times + before. This is a list of commonly asked questions and answers. + + + +
            + + Can I use multiple names from the address book? + + +

            + Yes. The address book search will display all matches for the + search criteria entered in the search box. If 10 names are displayed + any combination may be selected for either the To: or CC: + fields. All selected addresses will be inserted into the proper + field when the Use Address button is pressed. +

            +
            +
            + +
            + + Can I add names directly to the address book from a email? + + +

            + No. At this time you cannot add names directly from a received email + to the address book. You can, however, right click on the address and + save it to the clipboard and paste this into the address book. Try + not to be disappointed. SquirrelMail is under continual development + and this might be included in the future in one form or another. +

            +
            +
            + +
            + + Who made SquirrelMail? + + +

            + A lot of people helped out. To get a list of them, you can visit our + web site squirrelmail.org. +

            +
            +
            + +
            + + What is webmail? + + +

            + In SquirrelMail's case it gives you access through the IMAP protocol + to your email account. This means that you don't have to figure out how + to setup someone else's stuff just to check your mail. +

            +
            +
            + +
            + + Where can I use this webmail? + + +

            + Any where there is a browser available. + Wireless access (WAP/WML) is not on the drawing board at this time though. +

            +
            +
            + +
            + + Why use webmail instead of a regular email client? + + +

            + It is doubtful that webmail will ever be a complete substitute for + a regular email client. But hey, who knows? Anyway, If you ever + were at a friend's house, on a trip, at home or work and away from + your computer and wanted to check your mail you already know why. + Because it is a huge hassle to set your mail up on their computer + and then delete it again. SquirrelMail is designed to be a supplement + to your normal email client. +

            +
            +
            + +
            + + How does this stuff work? + + +

            + SquirrelMail uses the IMAP protocol, info on it can be found + here. The program also uses + its own IMAP functions, not those built in to PHP. This won't + matter to anybody except those responsible for installing it, + but trust us when we say they appreciate it. +

            +
            +
            diff --git a/ehcp/webmail2/help/en_US/addresses.hlp b/ehcp/webmail2/help/en_US/addresses.hlp new file mode 100644 index 0000000..99d10cf --- /dev/null +++ b/ehcp/webmail2/help/en_US/addresses.hlp @@ -0,0 +1,122 @@ + + + Addresses + + + Address books can save a lot of time and typing. You can put the + addresses of people you write most often in them, and reuse them + over and over. + + +

            + Address books are a great time saving feature. Frequently used + addresses may be stored here. LDAP servers (Often used in companies + and universities to make organization-wide addresses easily available) + are supported as well. +

            +

            + If your Browser supports Javascript then you might want to enable the + JavaScript based address book under the Options menu item. It is a really + nifty little pop-up thing. Pure HTML address lists are supported so + even browsers without Javascript support can use SquirrelMail without + any loss of function. +

            +
            +
            + +
            + + Nick Name + + +

            + Put a familiar name here. Something to help jog your memory. + Anything that will give you an accurate idea to whom this email + address belongs. +

            +
            +
            + +
            + + Email Address + + +

            + This must be the person's fully qualified email address. Guessing here + just won't cut it. There are three parts to an email address. First is + the recipients identifier, such as "johnq". Next is the domain name + section, which could take the form "tayloru". Last comes the top level + domain, which could be one of a ton of things like au, cc, us, com, org, + net or might look like edu. So if we put all those together it must be + in the form of johnq@tayloru.edu. If this is not correct you are likely + to get your mail back in the form of a bounced message. +

            +
            +
            + +
            + + Info + + +

            + This is another field where you can put something to remind you about + who this person is. This is made to be longer than the "Nick Name". + For instance, if you meet a business contact, you could put "Met at + the Tomatoe Symposium". +

            +
            +
            + +
            + + Edit or Delete + + +

            + These two buttons allow you to select a single address and then change + any of the above fields, or delete the entry entirely. You are only + allowed to select one entry at a time for the edit button. +

            +
            +
            + +
            + + Add to Personal address book + + +

            + Fill in the fields as they are listed. The first three (Nickname, + E-mail address, and First name) must be filled in. Both Last name and + Additional info are optional. +

            +
            +
            + +
            + + LDAP + + +

            + LDAP is a protocol for central unified storage and remote access of + information. For example; a university might use LDAP as the single + place where all students, staff, and faculty email addresses are + stored and made available. If configured to use the universities + LDAP server, SquirrelMail would then be able to list all campus email + address (along with the other address book fields if available). + SquirrelMail's LDAP use is truly powerful in that it combines + your local address book and the LDAP address server information to + present all of the information as if it was a single address book. +

            + The LDAP setting may be configured to use any LDAP server, or disabled + as a feature altogether. You will need to talk to you system + administrator about this feature if you have specific questions. +

            + LDAP settings affect the entire SquirrelMail system; as a result they + must be set up or altered by someone with administrative authority. +

            +
            +
            diff --git a/ehcp/webmail2/help/en_US/basic.hlp b/ehcp/webmail2/help/en_US/basic.hlp new file mode 100644 index 0000000..e80b2cf --- /dev/null +++ b/ehcp/webmail2/help/en_US/basic.hlp @@ -0,0 +1,53 @@ + + + Introduction to SquirrelMail + + + SquirrelMail provides a way of checking your E-Mail over the World Wide + Web. + + +

            + So what exactly is SquirrelMail? + It's a web interface to email that's written in PHP. + It was designed to allow email access through your server from + anywhere in the world via the Web. More information about exactly + how it does this and the IMAP protocol can be found here. +

            +
            +
            + +
            + + The Basics + + +

            + If you just have a quick question, you might want to look at the FAQ. +

            +

            + SquirrelMail is laid out in two main sections called frames. The + left frame lists the currently subscribed folders. More information + about the left frame may be found under the "Folders" section of this + help documentation. +

            +

            + On the right is where most of the action will take place. At the + top of the page is a menu bar. Sign out will safely log you out of + the program when you are finished. The Current Folder displays which + of the folders listed in the left frame you are currently in. + Right after you log in, by default your INBOX will be shown. +

            +

            + Under the top bar is a row of menu choices: +

              +
            • Compose - Make and send an email which may include attachments. +
            • Addresses - Holds a list of addresses that are contained in your personal address book. +
            • Folders - All folder manipulation takes place under this. You can delete, create, rename, subscribe, and unsubscribe folders. +
            • Options - Change settings of how SquirrelMail responds and looks. +
            • Search - With this tool, you can search through a mailbox for given criteria. +
            • Help - You are already here! +
            +

            +
            +
            diff --git a/ehcp/webmail2/help/en_US/compose.hlp b/ehcp/webmail2/help/en_US/compose.hlp new file mode 100644 index 0000000..d11f63b --- /dev/null +++ b/ehcp/webmail2/help/en_US/compose.hlp @@ -0,0 +1,174 @@ + + + Compose + + + With this feature, you can send messages to different people + from within SquirrelMail. + + +

            + The Compose menu choice will take you to a new Compose page. + Here you will find several fields and a couple of buttons. + Depending on how you got to the compose view, some of these + fields may already be filled in. +

            +
            +
            + +
            + + From + + +

            The From: field will only be displayed if you have enabled multiple + identities (through the Options, Personal Preferences menu). If you've done + so you can choose which identity you want to use, i.e. which name and + email address appear as the From-line of your message. +

            +
            +
            + +
            + + To + + +

            + Next is the To: field. In this field you should + enter the email address of the person or persons you are sending a + message to. You may enter as many addresses as you like, separating + them with a comma. One may also press the "Addresses" button to fill + in the field. Don't worry if the entire address is not displayed. + The field is a fixed length, but everything you put in it will be used, + even though it might scroll to the right or left. +

            +
            +
            + +
            + + Cc + + +

            + Next is the CC: field. CC is an abbreviation for Carbon + Copy. If you wish to send someone else a copy of the message + here is where you would do that. Think of this in the same way a memo + is laid out. You can have as many people as you like in the To:, + CC:, and BCC: fields. Only the people to whom the message + has direct impact would be in the To: field while recipients to + whom this is possibly only informative would be in the CC: and + BCC: fields. +

            +
            +
            + +
            + + Bcc + + +

            + BCC is an abbreviation for Blind Carbon Copy. + Use this to send someone a copy of the email without the + recipients in the To: or CC: fields knowing about it. +

            +
            +
            + +
            + + Subject + + +

            + Type in a relevant heading here. Remember, email can be a great time + saver and an accurate subject line is one big reason. +

            +
            +
            + +
            + + Addresses Button + + +

            + This button will open the address book after a search box is presented. + Something must be entered in the search box to retrieve a result. + If all addresses in the address book are required, press the List All button. + The address book has enough functionality + that it deserves its own section. More detailed information is + available in the "Addresses" chapter. +

            +
            +
            + +
            + + Save Draft button + + +

            + If you've been composing a message but for some reason aren't ready + to send it yet, you can use this button to save the message in the + Drafts folder. If later you want to finish the message and send it out, + go to the Drafts folder, open the message and you will return to the + compose page with your message filled in. +

            +
            +
            + +
            + + Priority + + +

            + If enabled by your system administrator, at the right of the + buttons a drop down list "Priority" is available. Here you can + select, surprisingly, the priority of this message. A high-priority + message might be presented in a different way by the recepient's + mail program. Note that excessive use of this function will devalue its + effect. +

            +
            +
            + +
            + + Message Body + + +

            + The large empty box is for whatever you want to put there. If a + signature file has been saved it will appear here as well. This is + where you type the body of your message. +

            +
            +
            + +
            + + Attach + + +

            + Located at the bottom of the Compose page, this feature allows you to + include a file with your email. The file must be located on your + local machine or network to be attached. A browse button is + present so you may search through your directory structure and click + on the file to include. Alternatively you may type directly into the + attach field if you know the full path and exact file name. Simply + press the Add button to list the selected file as an attachment and it + will appear below. +

            +

            + Once at least one file is presented for attachment another button is + revealed. Deletion of one or more attached files is accomplished by + selecting the offending file or files and pressing the delete selected + attachments button. +

            + +

            diff --git a/ehcp/webmail2/help/en_US/folders.hlp b/ehcp/webmail2/help/en_US/folders.hlp new file mode 100644 index 0000000..0201c30 --- /dev/null +++ b/ehcp/webmail2/help/en_US/folders.hlp @@ -0,0 +1,110 @@ + + + Folders + + + You can store messages in different folders. This is + especially useful if you have a lot of email and want + to keep it organized. The folders option allows + manipulation of your folders. + + + +
            + + Subscribed Folders and the Left Frame + + +

            + Currently subscribed folders are listed in the colored + area to the left. This frame may be set to automatically + refresh in the Options page. At the top of the left + frame is large and bolded heading. If changes have been + made to the subscribed folders using the folders menu + item, this list can be refreshed with the link below the + title. Oddly enough, this link is titled "refresh folder + list". +

            + The first folder listed contains received mail. To the + right of the first folder is a number in parentheses + "( )" reflecting the count of unread emails. + This number is likely to vary from the total number + of emails displayed in the right frame. Under the main + folder are likely to be other folders or subfolders. + Colors for these folders will change with theme choices + made in the options page. +

            +
            +
            + +
            + + Delete + + +

            + You may delete any folder displayed in the drop down list box to + the left of the Delete button. Notice that this list may not + include all the folders displayed. The special folders such as + your sent or your trash folder cannot be deleted, and of course, + you cannot delete INBOX. +

            +
            +
            + + +
            + + Create + + +

            + Folders may be created by simply typing the desired name into the + text box and pressing the Create button. If you wish that this folder + be a subfolder of another one, you can choose that in the drop-down + box with the list of folders. +

            +

            + On some mail servers, there are two types of folders. + One that contains messages, and one that + contains folders. You may see an option called "Let this folder contain + subfolders." If you do and you check that, the folder you create will + only be able to contain folders and not any messages. Otherwise, you + will only be able to store messages in it and not folders. +

            +
            +
            + +
            + + Rename + + +

            + You may rename any folder displayed in the drop down list box to the + left of the Rename button. Notice that this list may not + include all the folders displayed in the left frame. For obvious + reasons, you cannot rename the sent, trash, or INBOX folders. +

            +
            +
            + +
            + + Unsubscribe and Subscribe + + + Definitions:
            + Subscribe: To register a folder with the mail server, allowing + you to view it in the folder listings.
            + Unsubscribe: The opposite of subscribing. This unregisters a + folder with the mail server.
            +

            + You may choose as many folders as you wish from either the subscribe + or the unsubscribe box, then click the button under the box to make + the action take effect. You will notice that the folders move to the + other box. You can then re-subscribe to them, or unsubscribe again + as you wish. +

            +
            +
            diff --git a/ehcp/webmail2/help/en_US/main_folder.hlp b/ehcp/webmail2/help/en_US/main_folder.hlp new file mode 100644 index 0000000..1821177 --- /dev/null +++ b/ehcp/webmail2/help/en_US/main_folder.hlp @@ -0,0 +1,66 @@ + + + Message Index + + + The name may sound complex, but this is just the list of email + messages that are in a particular folder. + + + +
            + + The Message Index + + +

            + After you click on a folder, you will be taken (in the right frame) to the + message index. This lists messages in the selected folder. Below the + menu choice is a line which informs you which mails you are viewing + numerically and how many total you have. +

            + For example: Viewing messages 20 to 30 (45 total). +

            + Notice that the total message count might be different from the unread + mail count which is to the right of the main mail folder. +

            + A bar containing four buttons is next. On the left side is a drop down + list box. This box lists your currently subscribed folders. Any selected + message will be moved to the selected folder when the move button is pushed. + Multiple messages may be moved at once. On the far right side of this bar is + a button used to delete selected messages. Just select the junk mail and + press the button. To the left of the Delete button are two buttons which + allow you to mark selected messages either as Read or as Unread. +

            + A bar containing three fields (From, Date, and Subject) is next. These headings + separate the message table into logical parts. From tells you who sent + you the message, or at least what email address it came from. Date + shows the day which the email was sent. Subject displays what the sender + entered as the subject. Note: Between the Date and Subject + columns is a small column that is unlabeled. There could be a "+", "!" + or an "A" in there. If you see the "+", that means that the message has + attachments; if you see the "A", that means that you have answered the + message, and if you see the "!", then the message was marked as urgent! +

            + What remains is the actual message table. You will notice that unread + messages are bold while viewed messages are in normal text. + Four fields form this table. On the far left is a select box. When + selected, the message on the same line is subject to the actions previously + discussed (moving, marking (un)read and deletion). + The Toggle All link at the top of the list allows you to check all + select boxes at once.
            + Under the From header is listed whom + the message is from. Surprising, we know. But hey, you don't have to read + this. The date is listed next, and finally the subject. +

            +

            + If your mailbox contains many messages, the list will by default be split into + multiple pages and the first page will be displayed. To view other pages, use the + Previous and Next links at the top and bottom of the message list. You can also + jump to a specific page directly by clicking one of the numbers (each represents + a page). If you click Show All you will disable the so-called paginating and + all messages will be displayed on one big page. +

            + +
            +
            diff --git a/ehcp/webmail2/help/en_US/options.hlp b/ehcp/webmail2/help/en_US/options.hlp new file mode 100644 index 0000000..f6eebf5 --- /dev/null +++ b/ehcp/webmail2/help/en_US/options.hlp @@ -0,0 +1,313 @@ + + + Options + + + You can customize the way that SquirrelMail looks and responds to you + by setting different options in this section. + + +

            + One of the great things about SquirrelMail is the degree to which it may be customized. + Depending on the configuration, you may have several choices of themes, languages, + folders, and other preferences. All of these may be changed without affecting any other + users on the system. There are at least five main parts to the Options: + Personal, Display, Message Highlighting, Folders and Index Order. + More parts may be available depending on your SquirrelMail installation. +

            +
            +
            + +
            + + Personal Information + + + Full Name
            + You should put your entire name here. For example, "John Doe". This is what is + shown to people that you send the message to. They will see that it is from + "John Doe". If you don't fill this in, they will see it is from your email address, + "jdoe@example.org". +

            + + E-Mail Address
            + Optional - If your email address is different than what is automatically + assigned, you can change it here. +

            + + Reply To
            + Optional - This is the email address that people will reply to when they + reply to your message. If this is different than the email address you are sending + from, you can enter it here. This is useful if you want people to reply to your + Yahoo account rather than your office address. +

            + + Multiple Identities
            + Click this link to edit multiple identities. This is useful if you want to + choose between different From-lines for different messages (for example + containing your work or your home emailaddress. On the page that appears, + you can add as many identities as you like. You will be offered a choice + of these when composing a message.

            + + Reply Citation
            + If you press Reply on a message, you will be presented with the Compose + form with the original message quoted. Before this quoted message, a text + like John Doe wrote: might be prepended (if the message you're replying + to originated from John Doe). This is called the citation line. Here you + can choose how this line looks.
            +
              +
            • No Citation
              + Prepends no citation line whatsoever.

              +
            • Author Wrote
              + This produces the line: John Doe Wrote: where John Doe will be replaced + by whoever the message you're replying to was from.

              +
            • Quote Who XML
              + This produces the line: <quote who="John Doe">.

              +
            • User-Defined
              + Enables you to define your own citation line. In the two text boxes below, you + can type in the citation start and end. Between these the author name will be + inserted. +


            + + Signature
            + Optional - Signatures are attached at the bottom of all messages you send + out. If you want a signature, you must make sure that the checkbox beside + "use a signature" is checked, and then fill in what you want your signature to be + in the box below it. +

            +
            +
            + +
            + + Display Preferences + + + Theme
            + SquirrelMail offers different color themes for your viewing pleasure. You can + choose between the many listed there if you so desire. +

            + + Custom Stylesheet
            + Changing a theme only changes the colors, a stylesheet may change more, for + example the font size used by SquirrelMail. +

            + + Language
            + If English isn't your native tongue, you can easily change the language that + most things display in. If your desired language is in the list, you can choose + it and all future SquirrelMail related messages will be in that language. Note + that this doesn't translate incoming email messages or folder names. +

            + + Use Javascript
            + One of our main goals in creating SquirrelMail was to have no Javascript in + any of our pages. However, some of our developers made a very good address + book searching utility that uses Javascript. Some other Javascript functions + were added aswell. Rather than remove it, we now + give you the option of using + pure HTML or allow Javascript aswell. If + you don't know what this means, you are safest to choose Autodetect. +

            + + Number of Messages to Index
            + This is the number of messages to show at a time in a folder. If there are + more than this number in the folder, you will see a "Previous" and "Next" link + above and below the listing which will take you to the previous or next + messages. +

            + + Enable Page Selector
            + Setting this to Yes shows page numbers above and below the message list to + quickly jump to a specific page of messages. The number Maximum pages to show + can limit how many page numbers will be displayed above and below the + message list.

            + + Wrap incoming text at
            + How many characters should we allow before wrapping the text. This prevents + messages from scrolling way off the screen. 86 is usually a safe thing to + put in here, but you are free to change it to whatever you desire. +

            + + Size of editor window
            + How wide do you want your "Compose" box to be? This is the number of characters + per line that you will be able to type before wrapping in the Compose section. +

            + + Location of Buttons when Composing
            + Where are the buttons Addresses, Save Draft and Send located?

            + + Addressbook Display Format
            + Choose how you want the addressbook to be displayed. If you want maximum + compatibility with all browsers, use HTML. Select Javascript if you + know your browser supports it, it will display a nicer addressbook. +

            + + Show HTML Version by Default
            + If a message you receive is in both text and HTML format, you can choose + if you want to see the HTML version (Yes) or the text version (No) by + default.

            + + Include Me in CC when I Reply All
            + Reply All sends your reply to all recepients of the original message, + including yourself. To leave your own email address out, set this to No. +

            + + Enable Mailer Display
            + When viewing a message, this displays which email program the sender used. +

            + + Display Attached Images with Message
            + If someone sends you a message with one or more images attached and you've + set this to Yes, the images will be displayed right away when you view + the message. +

            + + Enable Subtle Printer Friendly Link
            + This determines the way the Printable Version-link will be displayed. +

            + + Enable Printer Friendly Clean Display
            + This will clean out the message so the print looks nicer. +

            + + Other Options
            + Depending on the configuration of your SquirrelMail installation, some more + options might be displayed here. They hopefully should be self-explanatory. +

            + +
            +
            + +
            + + Message Highlighting + + + The idea for this came because if you are subscribed to many mailing lists, + it is very hard to distinguish which messages came from where while reading + through the list of messages. With Message Highlighting, you can have the + background color of all messages from one mailing list different than the + color of another list.

            + + Just click on [New] to create a new one, or [Edit] to edit an existing one + and the options will appear below.

            + + Identifying Name
            + This is simply the name that you see which describes what it is. For + example, if you are highlighting messages from your mother, you might + set this to "From Mom". +

            + + Color
            + This is the actual color that the background will be. You can choose between + a number of pre-defined colors that we have selected for you, or you can enter + the HEX code for the color that you desire (i.e. a6b492). If you choose to + enter your own color, you must also select the radio button in front so that it is + checked. +

            + + Match
            + Here you can choose the matching phrase. From the drop-down box, you can + choose which header field to match against (to, from, subject...) and in the + text box, you can enter the phrase to match (mom@yahoo.com). +

            +
            +
            + +
            + + Folder Preferences + + + Folder Path
            + On some systems this will not be displayed. If you don't see this option, just + ignore this. On other systems, this is quite a necessary feature. Usually the + option that is in there is what should be there. This is the folder in your + home directory that holds all your email folders. If you don't understand this, + just leave it what it is. +

            + + Trash Folder
            + You can choose which folder messages will be sent to when you delete them. If + you don't want deleted messages to go to the trash, set this to "Don't use Trash". +

            + + Sent Folder
            + You can choose which folder your sent messages will go to. If you don't want + these, just set it to "Don't use Sent". +

            + + Draft Folder
            + You can choose which folder the messages you save as draft will go to. + If you don't want to use this, just set it to "Don't use Drafts". +

            + + Location of folder list
            + Determines wether you want the list of folders on the left or right of your + window. +

            + + Width of folder list
            + With this option, you can select how wide the list of folders will be. + If you have very long folder names or large fonts, it is good to set this + pretty high. Otherwise, you should set it low so you don't waste screen space. +

            + + Auto refresh folder list
            + SquirrelMail has the functionality to automatically refresh the folder listing + on the left side of your browser window. This will also update the number of + unseen messages that are in each folder. This is a good way to check for unseen + messages in the INBOX without having to click on it every time. +

            + + Enable Unread Message Notification
            + This option specifies how to display unseen messages in the folder listing on the + right side of your browser window. If you set this to No Notification, you will + not be notified of unseen messages. If you set it to INBOX, when you have new + messages, the INBOX will become bold and a number will appear to the right of it + to say how many new messages are in it. If you set it to All Folders, this + behavior will happen on all folders. If you notice that loading the folder list + is really slow, you can set this to INBOX or None and that should speed it up. +

            + + Unseen message notification type
            + When new messages are in a folder, this option tells + either to only display the number of new messages or also display the + total number of messages in that folder. +

            + + Enable Collapsable Folders
            + Collapsable Folders allow you to 'fold' or collapse a folder which contains + subfolders so the subfolders will not be displayed. You can collapse a + folder by clicking the "-" next to it and expand it again with the "+" sign. + Setting this to No disables collapsing. +

            + + Show Clock on Folders Panel
            + Choose if you want a clock to be displayed above the folder list and how + it should look (Y=year, D=day, H=hour, M=minute, S=second). The option + Hour Format below gives you the choice of a 12- or 24-hour clock. +

            + + Memory Search
            + If you search a mailbox, the search will be saved for quick access later. + This defines how many mailbox searches will be saved. +

            + +
            +
            + +
            + + Index Order + + + This section gives you control over the message list. You can choose how + much information you want in the message list and in what order it should + be displayed. +

            + Use the Up and Down links to move columns around, Del to remove a column + from the display and Add to add one. +
            +
            diff --git a/ehcp/webmail2/help/en_US/read_mail.hlp b/ehcp/webmail2/help/en_US/read_mail.hlp new file mode 100644 index 0000000..866bdc4 --- /dev/null +++ b/ehcp/webmail2/help/en_US/read_mail.hlp @@ -0,0 +1,179 @@ + + + Reading an email message + + + The ability to read an email message is one of the most basic features + of any email client. However, SquirrelMail has quite a few features + for while you are reading messages. This explains what they all do. + + +

            + Click on the subject of a particular mail and that message is displayed. + One thing you will notice is that email and web addresses are live + links so you can click on them and send an email or open a page. + Another really nifty feature is that mail threads are color coded. + The standard for a reply is to quote the previous message with ">" before + every line. SquirrelMail sees this and color codes them. A replied + message will have a different color on the reply than the new text. + This works two layers deep. Another menu bar is now presented below the + main menu choices. This bar is in three sections. On the left side + you may delete or return to the summary. In the middle direct + navigation between messages is made possible. On the right, various + mailing functions are presented. +

            +
            +
            + +
            + + Message List + + +

            + Click this link to return to the folder from which you came. +

            +
            +
            + +
            + + Delete + + +

            + Click this link to delete the message being currently viewed. + All attachments of deleted mail are deleted as well. You can prevent the + loss of attachments by Downloading them first (explained further in + this chapter).
            + In this context, deleting means that the message will be moved to + the folder called Trash. If you wish to keep the message afterall, view + the Trash folder and move the message out. +

            +
            +
            + +
            + + Navigation + + +

            + In the middle of the bar are navigation buttons. Previous will be + an active link if it can be utilized and plain text otherwise. Clicking + this link will display the previous message without the need to go back + to the summary display of messages. The same goes for the Next link which + will advance you to the mail immediately following the one + currently being viewed. +

            +
            +
            + +
            + + Forward + + +

            + On the right, the forward link, when pressed, opens the Compose page + with the previously viewed email in the text box below a tag of + "--Original Message--". "Fwd:" is prepended to the original subject + line and placed in the correct field. The various fields for sending + to an address await your completion. You may position the cursor in + the text box in order to add comments to the already existing text. + You may also use the attachment feature. +

            +
            +
            + +
            + + Reply + + +

            + Click this link to return a new message to the originator of the + previously viewed message. "Re:" is prepended to the original subject + line and placed in the subject field. Again, the text of the original + message is quoted in the text box. This time the ">" symbol is placed + in front of the original text. You may note that some of the original + text doesn't have the ">" symbol. This is due to line wrapping and + may be unavoidable. Try setting the value of Wrap incoming text + in the Options page to a larger number, this may help. Comments can be + made anywhere in the text box in addition to the quoted message. You + may also use the attachment feature. +

            +
            +
            + +
            + + Reply All + + +

            + Same story here as "reply" with the exception that all addresses listed + in the header will receive the mail. +

            +
            +
            + +
            + + View all headers + + +

            + This will display the entire header for the email message. This includes + the route that the message took to get here, and a lot more detailed + information about the message itself. +

            +
            +
            + +
            + + View Printable Version + + +

            + If you want to print a message, you might want to click this link. It + presents you with a new window containing the message but with all unneccessary + information and menus removed, ready to print. Clicking the Print button in + this window will do so. Press Close to return to your message. +

            +
            +
            + +
            + + Download this as a file + + +

            + At the bottom just above the bottom bar you will find this link. + Clicking this link allows you to save this email to your local hard drive + as a plain text message. A simple header will be attached to the top + of the message as well. +

            +
            +
            + +
            + + Attachments + + +

            + Any attachments sent with a received email will be displayed at the + bottom of the message inside a colored box. The file is presented + as a link with a description of the file type to it's right. Clicking + on the file name will either display the attachment or present a + download dialog depending on the file type. If you wish to download + the file (rather than possibly viewing it), click on the "download" + link on the right side.
            + If your webbrowser supports viewing the attachment file type, another + link, "view" will be displayed which displays the file in your browser. +

            +
            +
            diff --git a/ehcp/webmail2/help/en_US/search.hlp b/ehcp/webmail2/help/en_US/search.hlp new file mode 100644 index 0000000..fedd12b --- /dev/null +++ b/ehcp/webmail2/help/en_US/search.hlp @@ -0,0 +1,90 @@ + + + Search + + + Searches through a folder for given criteria. + + +

            + With this useful tool, you can search through a specific folder for + given criteria that match against different header fields. +

            +
            +
            + +
            + + General Overview + + +

            + You simply choose the folder you wish to search, type in the search + criteria, and then choose the part of the message to search. When + you submit your data, the list of messages will come up below the + search form. You can choose the message you wish to view, and read + it just like a normal message. +

            +

            + Notice that when you are reading messages and then go into the search + section, your currently active folder will be the default to search + through. For example, if you were browsing through your "Friends" + folder and then click on "Search", "Friends" will already be selected + for searching. +

            +
            +
            + +
            + + What to search through + + +

            + To the left of the input field, you see a drop-down list of places + that are possible to search through. This includes: Body, Everywhere, + Subject, From, Cc, To. +

            +

            + Body - Searches through the body of the message. This is the + main part of the message where the important stuff is located. +

            +

            + Everywhere - This searches everything, including the entire + header for the message. Unless you are sure this is what you want, + it probably isn't. It can return results that you wouldn't normally + expect. +

            +

            + Subject - Searches through the subjects for all the messages. +

            +

            + From - Who the message is from. Note that this might be more + than is actually displayed in the folder list. A normal "From" field + includes the name AND email address, but SquirrelMail usually only + displays the name. If your criteria matches the email address, but + it is not displayed, that message will still return as having matched. +

            +

            + To - Who the message was sent to. This can be many addresses, + and is not always just one email address. +

            +

            + Cc - Same as "To", except who the message was carbon copied to. +

            +
            +
            + +
            + + Recent Searches + + + If you've enabled this option, the Search page also displays an overview of + up to 9 of your most recent searches for quick access. Click on Search + next to the listed search to perform it again. With the Save link + you can move a search to the Saved Searches which will be kept until you + explicitly press Delete. Click Forget to remove a search from the list of + recent searches. + +
            \ No newline at end of file diff --git a/ehcp/webmail2/help/index.php b/ehcp/webmail2/help/index.php new file mode 100644 index 0000000..ffd0105 --- /dev/null +++ b/ehcp/webmail2/help/index.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/images/blank.png b/ehcp/webmail2/images/blank.png new file mode 100644 index 0000000..d0fed2d Binary files /dev/null and b/ehcp/webmail2/images/blank.png differ diff --git a/ehcp/webmail2/images/delitem.png b/ehcp/webmail2/images/delitem.png new file mode 100644 index 0000000..1b4bd3b Binary files /dev/null and b/ehcp/webmail2/images/delitem.png differ diff --git a/ehcp/webmail2/images/down_pointer.png b/ehcp/webmail2/images/down_pointer.png new file mode 100644 index 0000000..8494f5c Binary files /dev/null and b/ehcp/webmail2/images/down_pointer.png differ diff --git a/ehcp/webmail2/images/draft.png b/ehcp/webmail2/images/draft.png new file mode 100644 index 0000000..32531b0 Binary files /dev/null and b/ehcp/webmail2/images/draft.png differ diff --git a/ehcp/webmail2/images/folder.png b/ehcp/webmail2/images/folder.png new file mode 100644 index 0000000..0495d87 Binary files /dev/null and b/ehcp/webmail2/images/folder.png differ diff --git a/ehcp/webmail2/images/inbox.png b/ehcp/webmail2/images/inbox.png new file mode 100644 index 0000000..72159b1 Binary files /dev/null and b/ehcp/webmail2/images/inbox.png differ diff --git a/ehcp/webmail2/images/index.php b/ehcp/webmail2/images/index.php new file mode 100644 index 0000000..ffd0105 --- /dev/null +++ b/ehcp/webmail2/images/index.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/images/logo.gif b/ehcp/webmail2/images/logo.gif new file mode 100644 index 0000000..caf4598 Binary files /dev/null and b/ehcp/webmail2/images/logo.gif differ diff --git a/ehcp/webmail2/images/minus.png b/ehcp/webmail2/images/minus.png new file mode 100644 index 0000000..3d78a57 Binary files /dev/null and b/ehcp/webmail2/images/minus.png differ diff --git a/ehcp/webmail2/images/plus.png b/ehcp/webmail2/images/plus.png new file mode 100644 index 0000000..9bc4736 Binary files /dev/null and b/ehcp/webmail2/images/plus.png differ diff --git a/ehcp/webmail2/images/sec_remove_eng.png b/ehcp/webmail2/images/sec_remove_eng.png new file mode 100644 index 0000000..5798a2b Binary files /dev/null and b/ehcp/webmail2/images/sec_remove_eng.png differ diff --git a/ehcp/webmail2/images/senti.png b/ehcp/webmail2/images/senti.png new file mode 100644 index 0000000..d2f814c Binary files /dev/null and b/ehcp/webmail2/images/senti.png differ diff --git a/ehcp/webmail2/images/sm_logo.png b/ehcp/webmail2/images/sm_logo.png new file mode 100644 index 0000000..da454b1 Binary files /dev/null and b/ehcp/webmail2/images/sm_logo.png differ diff --git a/ehcp/webmail2/images/sort_none.png b/ehcp/webmail2/images/sort_none.png new file mode 100644 index 0000000..152faf1 Binary files /dev/null and b/ehcp/webmail2/images/sort_none.png differ diff --git a/ehcp/webmail2/images/up_pointer.png b/ehcp/webmail2/images/up_pointer.png new file mode 100644 index 0000000..871ef0e Binary files /dev/null and b/ehcp/webmail2/images/up_pointer.png differ diff --git a/ehcp/webmail2/include/.htaccess b/ehcp/webmail2/include/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/include/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/include/index.php b/ehcp/webmail2/include/index.php new file mode 100644 index 0000000..3dcaf1a --- /dev/null +++ b/ehcp/webmail2/include/index.php @@ -0,0 +1,17 @@ +'); +if ($body_quote == 'NONE') $body_quote = ''; + +// Load preference for cursor behavior for replies +// +$reply_focus = getPref($data_dir, $username, 'reply_focus', ''); + +/* left refresh rate, strtolower makes 1.0.6 prefs compatible */ +$left_refresh = getPref($data_dir, $username, 'left_refresh', 600 ); +$left_refresh = strtolower($left_refresh); + +$sort = getPref($data_dir, $username, 'sort', 6 ); + +/* Load up the Signature file */ +$signature_abs = $signature = getSig($data_dir, $username, 'g'); + +/* Message Highlighting Rules */ +$message_highlight_list = array(); + +/* use new way of storing highlighting rules */ +if( $ser = getPref($data_dir, $username, 'hililist') ) { + $message_highlight_list = unserialize($ser); +} else { + /* use old way */ + for ($i = 0; $hlt = getPref($data_dir, $username, "highlight$i"); ++$i) { + $highlight_array = explode(',', $hlt); + $message_highlight_list[$i]['name'] = $highlight_array[0]; + $message_highlight_list[$i]['color'] = $highlight_array[1]; + $message_highlight_list[$i]['value'] = $highlight_array[2]; + $message_highlight_list[$i]['match_type'] = $highlight_array[3]; + removePref($data_dir, $username, "highlight$i"); + } +// NB: The fact that this preference is always set here means that some plugins rely on testing it to know if a user has logged in before - the "old way" above is probably long since obsolete and unneeded, but the setPref() below should not be removed + /* store in new format for the next time */ + setPref($data_dir, $username, 'hililist', serialize($message_highlight_list)); +} + +/* Index order lets you change the order of the message index */ +$order = getPref($data_dir, $username, 'order1'); +for ($i = 1; $order; ++$i) { + $index_order[$i] = $order; + $order = getPref($data_dir, $username, 'order'.($i+1)); +} +if (!isset($index_order)) { + $index_order[1] = 1; + $index_order[2] = 2; + $index_order[3] = 3; + $index_order[4] = 5; + $index_order[5] = 4; +} + +$alt_index_colors = + getPref($data_dir, $username, 'alt_index_colors', SMPREF_ON ); + +// Folder List Display Format +$location_of_bar = + getPref($data_dir, $username, 'location_of_bar', SMPREF_LOC_LEFT); +$location_of_buttons = + getPref($data_dir, $username, 'location_of_buttons', SMPREF_LOC_BETWEEN); + +$collapse_folders = + getPref($data_dir, $username, 'collapse_folders', SMPREF_ON); + +$show_html_default = + getPref($data_dir, $username, 'show_html_default', SMPREF_OFF); + +$addrsrch_fullname = + getPref($data_dir, $username, 'addrsrch_fullname', 'fullname'); + +$enable_forward_as_attachment = + getPref($data_dir, $username, 'enable_forward_as_attachment', SMPREF_ON); + +$show_xmailer_default = + getPref($data_dir, $username, 'show_xmailer_default', SMPREF_OFF ); +$attachment_common_show_images = getPref($data_dir, $username, 'attachment_common_show_images', SMPREF_OFF ); +$pf_cleandisplay = getPref($data_dir, $username, 'pf_cleandisplay', SMPREF_OFF); + +/* message disposition notification support setting */ +$mdn_user_support = getPref($data_dir, $username, 'mdn_user_support', SMPREF_ON); + +$include_self_reply_all = + getPref($data_dir, $username, 'include_self_reply_all', SMPREF_ON); + +/* Page selector options */ +$page_selector = getPref($data_dir, $username, 'page_selector', SMPREF_ON); +$page_selector_max = getPref($data_dir, $username, 'page_selector_max', 10); + +/* SqClock now in the core */ +$date_format = getPref($data_dir, $username, 'date_format', 3); +$hour_format = getPref($data_dir, $username, 'hour_format', SMPREF_TIME_12HR); + +/* compose in new window setting */ +$compose_new_win = getPref($data_dir, $username, 'compose_new_win', 0); +$compose_height = getPref($data_dir, $username, 'compose_height', 550); +$compose_width = getPref($data_dir, $username, 'compose_width', 640); + + +/* signature placement settings */ +$sig_first = getPref($data_dir, $username, 'sig_first', 0); + +/* strip signature from replies setting */ +$strip_sigs = getPref($data_dir, $username, 'strip_sigs', 0); + +/* use the internal date of the message for sorting instead of the supplied header date */ +$internal_date_sort = getPref($data_dir, $username, 'internal_date_sort', SMPREF_ON); + +/* if server sorting is enabled/disabled */ +$sort_by_ref = getPref($data_dir, $username, 'sort_by_ref', 1); + +/* Load the javascript settings. */ +$javascript_setting = getPref($data_dir, $username, 'javascript_setting', SMPREF_JS_AUTODETECT); +$javascript_on = getPref($data_dir, $username, 'javascript_on', SMPREF_ON); +$use_javascript_addr_book = getPref($data_dir, $username, 'use_javascript_addr_book', $default_use_javascript_addr_book); + +$search_memory = getPref($data_dir, $username, 'search_memory', 0); + +$mailbox_select_style = getPref($data_dir, $username, 'mailbox_select_style', 1); + +/* Allow user to customize, and display the full date, instead of day, or time based + on time distance from date of message */ +$show_full_date = getPref($data_dir, $username, 'show_full_date', 0); + +/* Allow user to customize length of from field */ +$truncate_sender = getPref($data_dir, $username, 'truncate_sender', 50); +/* Allow user to customize length of subject field */ +$truncate_subject = getPref($data_dir, $username, 'truncate_subject', 50); + +do_hook('loading_prefs'); + diff --git a/ehcp/webmail2/include/options/display.php b/ehcp/webmail2/include/options/display.php new file mode 100644 index 0000000..2975e12 --- /dev/null +++ b/ehcp/webmail2/include/options/display.php @@ -0,0 +1,445 @@ + $theme_attributes) { + $theme_values[$theme_attributes['NAME']] = $theme_attributes['PATH']; + } + ksort($theme_values); + $theme_values = array_flip($theme_values); + $optvals[SMOPT_GRP_GENERAL][] = array( + 'name' => 'chosen_theme', + 'caption' => _("Theme"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => $theme_values, + 'save' => 'save_option_theme' + ); + + $css_values = array( 'none' => _("Default" ) ); + $css_dir = SM_PATH . 'themes/css'; + if (is_readable($css_dir) && is_dir($css_dir)) { + $handle=opendir($css_dir); + while ($file = readdir($handle) ) { + if ( substr( $file, -4 ) == '.css' ) { + $css_values[$file] = substr( $file, 0, strlen( $file ) - 4 ); + } + } + closedir($handle); + } + + if ( count( $css_values ) > 1 ) { + + $optvals[SMOPT_GRP_GENERAL][] = array( + 'name' => 'custom_css', + 'caption' => _("Custom Stylesheet"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => $css_values + ); + + } + + $language_values = array(); + foreach ($languages as $lang_key => $lang_attributes) { + if (isset($lang_attributes['NAME'])) { + $language_values[$lang_key] = $lang_attributes['NAME']; + } + } + + asort($language_values); + $language_values = + array_merge(array('' => _("Default")), $language_values); + $language = $squirrelmail_language; + $optvals[SMOPT_GRP_GENERAL][] = array( + 'name' => 'language', + 'caption' => _("Language"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => $language_values, + 'htmlencoded' => true + ); + + /* Set values for the "use javascript" option. */ + $optvals[SMOPT_GRP_GENERAL][] = array( + 'name' => 'javascript_setting', + 'caption' => _("Use Javascript"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => array(SMPREF_JS_AUTODETECT => _("Autodetect"), + SMPREF_JS_ON => _("Always"), + SMPREF_JS_OFF => _("Never")) + ); + + if ($optmode != 'submit') + // FIXME: our form is named "f" - why? let's use something better + $onLoadScript = 'document.f.new_js_autodetect_results.value = \'' . SMPREF_JS_ON . '\''; + else + $onLoadScript = ''; + + $optvals[SMOPT_GRP_GENERAL][] = array( + 'name' => 'js_autodetect_results', + 'caption' => '', + 'type' => SMOPT_TYPE_HIDDEN, + 'refresh' => SMOPT_REFRESH_NONE, + //'post_script' => $js_autodetect_script, + 'save' => 'save_option_javascript_autodetect' + ); + + /*** Load the General Options into the array ***/ + $optgrps[SMOPT_GRP_MAILBOX] = _("Mailbox Display Options"); + $optvals[SMOPT_GRP_MAILBOX] = array(); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'show_num', + 'caption' => _("Number of Messages per Page"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'alt_index_colors', + 'caption' => _("Enable Alternating Row Colors"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'page_selector', + 'caption' => _("Enable Page Selector"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'page_selector_max', + 'caption' => _("Maximum Number of Pages to Show"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'show_full_date', + 'caption' => _("Always Show Full Date"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'truncate_sender', + 'caption' => _("Length of From/To Field (0 for full)"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY, + 'initial_value' => 55 + ); + + $optvals[SMOPT_GRP_MAILBOX][] = array( + 'name' => 'truncate_subject', + 'caption' => _("Length of Subject Field (0 for full)"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY, + 'initial_value' => 55 + ); + + /*** Load the General Options into the array ***/ + $optgrps[SMOPT_GRP_MESSAGE] = _("Message Display and Composition"); + $optvals[SMOPT_GRP_MESSAGE] = array(); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'wrap_at', + 'caption' => _("Wrap Incoming Text At"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'editor_size', + 'caption' => _("Width of Editor Window"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'editor_height', + 'caption' => _("Height of Editor Window"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'location_of_buttons', + 'caption' => _("Location of Buttons when Composing"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array(SMPREF_LOC_TOP => _("Before headers"), + SMPREF_LOC_BETWEEN => _("Between headers and message body"), + SMPREF_LOC_BOTTOM => _("After message body")) + ); + + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'use_javascript_addr_book', + 'caption' => _("Address Book Display Format"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array('1' => _("Javascript"), + '0' => _("HTML")) + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'addrsrch_fullname', + 'caption' => _("Format of Addresses Added From Address Book"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array('noprefix' => _("No prefix/Address only"), + 'nickname' => _("Nickname and address"), + 'fullname' => _("Full name and address")) + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'show_html_default', + 'caption' => _("Show HTML Version by Default"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'enable_forward_as_attachment', + 'caption' => _("Enable Forward as Attachment"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'include_self_reply_all', + 'caption' => _("Include Me in CC when I Reply All"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'show_xmailer_default', + 'caption' => _("Enable Mailer Display"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'attachment_common_show_images', + 'caption' => _("Display Attached Images with Message"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'pf_cleandisplay', + 'caption' => _("Enable Printer Friendly Clean Display"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + if ($default_use_mdn) { + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'mdn_user_support', + 'caption' => _("Enable Mail Delivery Notification"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + } + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'compose_new_win', + 'caption' => _("Compose Messages in New Window"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_ALL + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'compose_width', + 'caption' => _("Width of Compose Window"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_ALL, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'compose_height', + 'caption' => _("Height of Compose Window"), + 'type' => SMOPT_TYPE_INTEGER, + 'refresh' => SMOPT_REFRESH_ALL, + 'size' => SMOPT_SIZE_TINY + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'sig_first', + 'caption' => _("Prepend Signature before Reply/Forward Text"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'strip_sigs', + 'caption' => _("Strip signature when replying"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'body_quote', + 'caption' => _("Prefix for Original Message when Replying"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_TINY, + 'save' => 'save_option_reply_prefix' + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'reply_focus', + 'caption' => _("Cursor Position when Replying"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array('' => _("To: field"), + 'focus' => _("Focus in body"), + 'select' => _("Select body"), + 'none' => _("No focus")) + ); + + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'internal_date_sort', + 'caption' => _("Sort by Received Date"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_ALL, + 'initial_value' => SMPREF_ON + ); + if ($allow_thread_sort == TRUE) { + $optvals[SMOPT_GRP_MESSAGE][] = array( + 'name' => 'sort_by_ref', + 'caption' => _("Enable Thread Sort by References Header"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_ALL + ); + } + /* Assemble all this together and return it as our result. */ + $result = array( + 'grps' => $optgrps, + 'vals' => $optvals, + 'xtra' => $onLoadScript + ); + return ($result); +} + +/******************************************************************/ +/** Define any specialized save functions for this option page. ***/ +/******************************************************************/ + +/** + * This function saves a new theme setting. + * It updates the theme array. + */ +function save_option_theme($option) { + global $theme; + + /* Do checking to make sure $new_theme is in the array. */ + $theme_in_array = false; + for ($i = 0; $i < count($theme); ++$i) { + if ($theme[$i]['PATH'] == $option->new_value) { + $theme_in_array = true; + break; + } + } + + if (!$theme_in_array) { + $option->new_value = ''; + } + + /* Save the option like normal. */ + save_option($option); +} + +/** + * This function saves the javascript detection option. + */ +function save_option_javascript_autodetect($option) { + global $data_dir, $username; + + sqGetGlobalVar('new_javascript_setting', $new_javascript_setting); + + // Set javascript either on or off. + if ($new_javascript_setting == SMPREF_JS_AUTODETECT) { + if ($option->new_value == SMPREF_JS_ON) { + setPref($data_dir, $username, 'javascript_on', SMPREF_JS_ON); + } else { + setPref($data_dir, $username, 'javascript_on', SMPREF_JS_OFF); + } + } else { + setPref($data_dir, $username, 'javascript_on', $new_javascript_setting); + } +} + +function save_option_reply_prefix($option) { + global $data_dir, $username, $new_javascript_setting; + + // save as "NONE" if it was blanked out + // + if (empty($option->new_value)) $option->new_value = 'NONE'; + + + // Save the option like normal. + // + save_option($option); + +} + diff --git a/ehcp/webmail2/include/options/folder.php b/ehcp/webmail2/include/options/folder.php new file mode 100644 index 0000000..22988e3 --- /dev/null +++ b/ehcp/webmail2/include/options/folder.php @@ -0,0 +1,311 @@ + 'folder_prefix', + 'caption' => _("Folder Path"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'size' => SMOPT_SIZE_LARGE + ); + } + + $trash_folder_values = array(SMPREF_NONE => '[ '._("Do not use Trash").' ]', + 'whatever' => $boxes); + $optvals[SMOPT_GRP_SPCFOLDER][] = array( + 'name' => 'trash_folder', + 'caption' => _("Trash Folder"), + 'type' => SMOPT_TYPE_FLDRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => $trash_folder_values, + 'save' => 'save_option_trash_folder' + ); + + $draft_folder_values = array(SMPREF_NONE => '[ '._("Do not use Drafts").' ]', + 'whatever' => $boxes); + $optvals[SMOPT_GRP_SPCFOLDER][] = array( + 'name' => 'draft_folder', + 'caption' => _("Draft Folder"), + 'type' => SMOPT_TYPE_FLDRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => $draft_folder_values, + 'save' => 'save_option_draft_folder' + ); + + $sent_folder_values = array(SMPREF_NONE => '[ '._("Do not use Sent").' ]', + 'whatever' => $boxes); + $optvals[SMOPT_GRP_SPCFOLDER][] = array( + 'name' => 'sent_folder', + 'caption' => _("Sent Folder"), + 'type' => SMOPT_TYPE_FLDRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => $sent_folder_values, + 'save' => 'save_option_sent_folder' + ); + + /*** Load the General Options into the array ***/ + $optgrps[SMOPT_GRP_FOLDERLIST] = _("Folder List Options"); + $optvals[SMOPT_GRP_FOLDERLIST] = array(); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'location_of_bar', + 'caption' => _("Location of Folder List"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => array(SMPREF_LOC_LEFT => _("Left"), + SMPREF_LOC_RIGHT => _("Right")) + ); + + $left_size_values = array(); + for ($lsv = 100; $lsv <= 300; $lsv += 10) { + $left_size_values[$lsv] = "$lsv " . _("pixels"); + } + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'left_size', + 'caption' => _("Width of Folder List"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_ALL, + 'posvals' => $left_size_values + ); + + $minute_str = _("Minutes"); + $left_refresh_values = array(SMPREF_NONE => _("Never")); + foreach (array(30,60,120,180,300,600,1200) as $lr_val) { + if ($lr_val < 60) { + $left_refresh_values[$lr_val] = "$lr_val " . _("Seconds"); + } else if ($lr_val == 60) { + $left_refresh_values[$lr_val] = "1 " . _("Minute"); + } else { + $left_refresh_values[$lr_val] = ($lr_val/60) . " $minute_str"; + } + } + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'left_refresh', + 'caption' => _("Auto Refresh Folder List"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => $left_refresh_values + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'unseen_notify', + 'caption' => _("Enable Unread Message Notification"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => array(SMPREF_UNSEEN_NONE => _("No Notification"), + SMPREF_UNSEEN_INBOX => _("Only INBOX"), + SMPREF_UNSEEN_ALL => _("All Folders")) + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'unseen_type', + 'caption' => _("Unread Message Notification Type"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => array(SMPREF_UNSEEN_ONLY => _("Only Unseen"), + SMPREF_UNSEEN_TOTAL => _("Unseen and Total")) + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'collapse_folders', + 'caption' => _("Enable Collapsable Folders"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_FOLDERLIST + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'unseen_cum', + 'caption' => _("Enable Cumulative Unread Message Notification"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_FOLDERLIST + ); + + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'date_format', + 'caption' => _("Show Clock on Folders Panel"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => array( '0' => _("International date and time"), + '1' => _("American date and time"), + '2' => _("European date and time"), + '3' => _("Show weekday and time"), + '4' => _("Show time with seconds"), + '5' => _("Show time"), + '6' => _("No Clock")), + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'hour_format', + 'caption' => _("Hour Format"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => array(SMPREF_TIME_12HR => _("12-hour clock"), + SMPREF_TIME_24HR => _("24-hour clock")) + ); + + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'search_memory', + 'caption' => _("Memory Search"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array( 0 => _("Disabled"), + 1 => '1', + 2 => '2', + 3 => '3', + 4 => '4', + 5 => '5', + 6 => '6', + 7 => '7', + 8 => '8', + 9 => '9') + ); + + + /*** Load the General Options into the array ***/ + $optgrps[SMOPT_GRP_FOLDERSELECT] = _("Folder Selection Options"); + $optvals[SMOPT_GRP_FOLDERSELECT] = array(); + + $delim = sqimap_get_delimiter($imapConnection); + $optvals[SMOPT_GRP_FOLDERSELECT][] = array( + 'name' => 'mailbox_select_style', + 'caption' => _("Selection List Style"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array( 0 => _("Long:") . ' "' . _("Folder") . $delim . _("Subfolder") . '"', + 1 => _("Indented:") . ' "    ' . _("Subfolder") . '"', + 2 => _("Delimited:") . ' ". ' . _("Subfolder") . '"'), + 'htmlencoded' => true + ); + + /* Assemble all this together and return it as our result. */ + $result = array( + 'grps' => $optgrps, + 'vals' => $optvals + ); + sqimap_logout($imapConnection); + return ($result); +} + +/******************************************************************/ +/** Define any specialized save functions for this option page. ***/ +/******************************************************************/ + +/** + * Saves the trash folder option. + * @param object $option SquirrelOption object + * @since 1.3.2 + */ +function save_option_trash_folder($option) { + global $data_dir, $username; + + if (strtolower($option->new_value)=='inbox') { + // make sure that it is not INBOX + error_option_save(_("You can't select INBOX as Trash folder.")); + } else { + /* Set move to trash on or off. */ + $trash_on = ($option->new_value == SMPREF_NONE ? SMPREF_OFF : SMPREF_ON); + setPref($data_dir, $username, 'move_to_trash', $trash_on); + + /* Now just save the option as normal. */ + save_option($option); + } +} + +/** + * Saves the sent folder option. + * @param object $option SquirrelOption object + * @since 1.3.2 + */ +function save_option_sent_folder($option) { + global $data_dir, $username; + + if (strtolower($option->new_value)=='inbox') { + // make sure that it is not INBOX + error_option_save(_("You can't select INBOX as Sent folder.")); + } else { + /* Set move to sent on or off. */ + $sent_on = ($option->new_value == SMPREF_NONE ? SMPREF_OFF : SMPREF_ON); + setPref($data_dir, $username, 'move_to_sent', $sent_on); + + /* Now just save the option as normal. */ + save_option($option); + } +} + +/** + * Saves the draft folder option. + * @param object $option SquirrelOption object + * @since 1.3.2 + */ +function save_option_draft_folder($option) { + global $data_dir, $username; + + if (strtolower($option->new_value)=='inbox') { + // make sure that it is not INBOX + error_option_save(_("You can't select INBOX as Draft folder.")); + } else { + /* Set move to draft on or off. */ + $draft_on = ($option->new_value == SMPREF_NONE ? SMPREF_OFF : SMPREF_ON); + setPref($data_dir, $username, 'save_as_draft', $draft_on); + + /* Now just save the option as normal. */ + save_option($option); + } +} + diff --git a/ehcp/webmail2/include/options/index.php b/ehcp/webmail2/include/options/index.php new file mode 100644 index 0000000..3dcaf1a --- /dev/null +++ b/ehcp/webmail2/include/options/index.php @@ -0,0 +1,17 @@ + 'full_name', + 'caption' => _("Full Name"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_HUGE + ); + } else { + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'full_name', + 'caption' => _("Full Name"), + 'type' => SMOPT_TYPE_COMMENT, + 'refresh' => SMOPT_REFRESH_NONE, + 'comment' => $full_name + ); + } + + if ($edit_identity) { + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'email_address', + 'caption' => _("E-mail Address"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_HUGE + ); + } else { + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'email_address', + 'caption' => _("E-mail Address"), + 'type' => SMOPT_TYPE_COMMENT, + 'refresh' => SMOPT_REFRESH_NONE, + 'comment' => $email_address + ); + } + + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'reply_to', + 'caption' => _("Reply To"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_HUGE + ); + + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'signature', + 'caption' => _("Signature"), + 'type' => SMOPT_TYPE_TEXTAREA, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_MEDIUM, + 'save' => 'save_option_signature' + ); + + if ($edit_identity) { + $identities_link_value = '' + . _("Edit Advanced Identities") + . ' ' + . _("(discards changes made on this form so far)"); + $optvals[SMOPT_GRP_CONTACT][] = array( + 'name' => 'identities_link', + 'caption' => _("Multiple Identities"), + 'type' => SMOPT_TYPE_COMMENT, + 'refresh' => SMOPT_REFRESH_NONE, + 'comment' => $identities_link_value + ); + } + + if ( $tzChangeAllowed || function_exists('date_default_timezone_set')) { + $TZ_ARRAY[SMPREF_NONE] = _("Same as server"); + $tzfile = SM_PATH . 'locale/timezones.cfg'; + if ((!is_readable($tzfile)) or (!$fd = fopen($tzfile,'r'))) { + $message = _("Error opening timezone config, contact administrator."); + } + + // TODO: make error user friendly + if (isset($message)) { + plain_error_message($message, $color); + exit; + } + while (!feof ($fd)) { + $zone = fgets($fd, 1024); + if( $zone ) { + $zone = trim($zone); + $TZ_ARRAY[$zone] = $zone; + } + } + fclose ($fd); + + $optgrps[SMOPT_GRP_TZ] = _("Timezone Options"); + $optvals[SMOPT_GRP_TZ] = array(); + + $optvals[SMOPT_GRP_TZ][] = array( + 'name' => 'timezone', + 'caption' => _("Your current timezone"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => $TZ_ARRAY + ); + } + + /*** Load the Reply Citation Options into the array ***/ + $optgrps[SMOPT_GRP_REPLY] = _("Reply Citation Options"); + $optvals[SMOPT_GRP_REPLY] = array(); + + $optvals[SMOPT_GRP_REPLY][] = array( + 'name' => 'reply_citation_style', + 'caption' => _("Reply Citation Style"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_NONE, + 'posvals' => array(SMPREF_NONE => _("No Citation"), + 'author_said' => _("AUTHOR Wrote"), + 'date_time_author' => _("On DATE, AUTHOR Wrote"), + 'quote_who' => _("Quote Who XML"), + 'user-defined' => _("User-Defined")) + ); + + $optvals[SMOPT_GRP_REPLY][] = array( + 'name' => 'reply_citation_start', + 'caption' => _("User-Defined Citation Start"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_MEDIUM + ); + + $optvals[SMOPT_GRP_REPLY][] = array( + 'name' => 'reply_citation_end', + 'caption' => _("User-Defined Citation End"), + 'type' => SMOPT_TYPE_STRING, + 'refresh' => SMOPT_REFRESH_NONE, + 'size' => SMOPT_SIZE_MEDIUM + ); + + /*** Load the Signature Options into the array ***/ + $optgrps[SMOPT_GRP_SIG] = _("Signature Options"); + $optvals[SMOPT_GRP_SIG] = array(); + + $optvals[SMOPT_GRP_SIG][] = array( + 'name' => 'use_signature', + 'caption' => _("Use Signature"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optvals[SMOPT_GRP_SIG][] = array( + 'name' => 'prefix_sig', + 'caption' => _("Prefix Signature with '-- ' Line"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + /* Assemble all this together and return it as our result. */ + $result = array( + 'grps' => $optgrps, + 'vals' => $optvals + ); + return ($result); +} + +/******************************************************************/ +/** Define any specialized save functions for this option page. ***/ +/******************************************************************/ + +/** + * Saves the signature option. + */ +function save_option_signature($option) { + global $data_dir, $username; + setSig($data_dir, $username, 'g', $option->new_value); +} + diff --git a/ehcp/webmail2/include/validate.php b/ehcp/webmail2/include/validate.php new file mode 100644 index 0000000..6e3ac0b --- /dev/null +++ b/ehcp/webmail2/include/validate.php @@ -0,0 +1,93 @@ +

            ERROR: Config file ' . + '"config/config.php" not found. You need to ' . + 'configure SquirrelMail before you can use it.

            '; + exit; +} + +// If we are, go ahead to the login page. +header('Location: src/login.php'); + +?> \ No newline at end of file diff --git a/ehcp/webmail2/locale/.htaccess b/ehcp/webmail2/locale/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/locale/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/locale/README.locales b/ehcp/webmail2/locale/README.locales new file mode 100644 index 0000000..f08cbd2 --- /dev/null +++ b/ehcp/webmail2/locale/README.locales @@ -0,0 +1,53 @@ +SquirrelMail distributes translations separately from the main package. + +If you are using SquirrelMail from CVS, you can download translations with +the following commands: + +cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/squirrelmail login +cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/squirrelmail co locales + +If you are using a regular SquirrelMail release, translations should be +available from the SquirrelMail download page: + +http://squirrelmail.org/download.php + +Packaged translations are distributed in archives named + +xx_XX-{sm-version}-{release-date}.tar.gz +xx_XX-{sm-version}-{release-date}.tar.bz2 +xx_XX-{sm-version}-{release-date}.zip + +For example: +es_ES-1.5.0-20031201.tar.gz should contain the Spanish translation of SquirrelMail +1.5.0 strings released on December 01, 2003. Translation is packaged with tar and +gzip. + +The all_locales-{sm-version}-{release-date}.{tar.gz|tar.bz2|zip} packages contain +all available translations. + +The locales-{sm-version}-{release-date}-src.{tar.gz|tar.bz2|zip} packages contain +all available SquirrelMail translations without compiled gettext strings. The +compilelocales script that is included in package should create all required .mo +files if you have the msgfmt program (this is useful if you want to create or +update translation files yourself). + +The translation of SquirrelMail consists of: +1. translated gettext strings (squirrelmail.po) +2. compiled gettext strings (squirrelmail.mo) +3.(optional) translated help files (*.hlp) +4.(optional) translated images (sec_remove_*.png) + +Gettext translations should be placed in +locale//LC_MESSAGES/ directory. +Help files are placed in help// directory. + +For example: +Spanish translated strings should go to locale/es_ES/LC_MESSAGES/squirrelmail.po +and compiled strings go to locale/es_ES/LC_MESSAGES/squirrelmail.mo +Spanish help files are stored in help/es_ES/ directory. + +Any questions about SquirrelMail translations can be directed to the SquirrelMail +Internationalization (i18n) Mailinglist: squirrelmail-i18n@lists.sourceforge.net + + +$Id: README.locales 7719 2004-07-01 13:36:26Z kink $ diff --git a/ehcp/webmail2/locale/index.php b/ehcp/webmail2/locale/index.php new file mode 100644 index 0000000..ffd0105 --- /dev/null +++ b/ehcp/webmail2/locale/index.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/locale/timezones.cfg b/ehcp/webmail2/locale/timezones.cfg new file mode 100644 index 0000000..dd41516 --- /dev/null +++ b/ehcp/webmail2/locale/timezones.cfg @@ -0,0 +1,537 @@ +Africa/Abidjan +Africa/Accra +Africa/Addis_Ababa +Africa/Algiers +Africa/Asmera +Africa/Bamako +Africa/Bangui +Africa/Banjul +Africa/Bissau +Africa/Blantyre +Africa/Brazzaville +Africa/Bujumbura +Africa/Cairo +Africa/Casablanca +Africa/Ceuta +Africa/Conakry +Africa/Dakar +Africa/Dar_es_Salaam +Africa/Djibouti +Africa/Douala +Africa/El_Aaiun +Africa/Freetown +Africa/Gaborone +Africa/Harare +Africa/Johannesburg +Africa/Kampala +Africa/Khartoum +Africa/Kigali +Africa/Kinshasa +Africa/Lagos +Africa/Libreville +Africa/Lome +Africa/Luanda +Africa/Lubumbashi +Africa/Lusaka +Africa/Malabo +Africa/Maputo +Africa/Maseru +Africa/Mbabane +Africa/Mogadishu +Africa/Monrovia +Africa/Nairobi +Africa/Ndjamena +Africa/Niamey +Africa/Nouakchott +Africa/Ouagadougou +Africa/Porto-Novo +Africa/Sao_Tome +Africa/Timbuktu +Africa/Tripoli +Africa/Tunis +Africa/Windhoek +America/Adak +America/Anchorage +America/Anguilla +America/Antigua +America/Araguaina +America/Aruba +America/Asuncion +America/Atka +America/Barbados +America/Belem +America/Belize +America/Boa_Vista +America/Bogota +America/Boise +America/Buenos_Aires +America/Cambridge_Bay +America/Cancun +America/Caracas +America/Catamarca +America/Cayenne +America/Cayman +America/Chicago +America/Chihuahua +America/Cordoba +America/Costa_Rica +America/Cuiaba +America/Curacao +America/Danmarkshavn +America/Dawson +America/Dawson_Creek +America/Denver +America/Detroit +America/Dominica +America/Edmonton +America/Eirunepe +America/El_Salvador +America/Ensenada +America/Fort_Wayne +America/Fortaleza +America/Glace_Bay +America/Godthab +America/Goose_Bay +America/Grand_Turk +America/Grenada +America/Guadeloupe +America/Guatemala +America/Guayaquil +America/Guyana +America/Halifax +America/Havana +America/Hermosillo +America/Indiana/Indianapolis +America/Indiana/Knox +America/Indiana/Marengo +America/Indiana/Vevay +America/Indianapolis +America/Inuvik +America/Iqaluit +America/Jamaica +America/Jujuy +America/Juneau +America/Kentucky/Louisville +America/Kentucky/Monticello +America/Knox_IN +America/La_Paz +America/Lima +America/Los_Angeles +America/Louisville +America/Maceio +America/Managua +America/Manaus +America/Martinique +America/Mazatlan +America/Mendoza +America/Menominee +America/Merida +America/Mexico_City +America/Miquelon +America/Monterrey +America/Montevideo +America/Montreal +America/Montserrat +America/Nassau +America/New_York +America/Nipigon +America/Nome +America/Noronha +America/North_Dakota/Center +America/Panama +America/Pangnirtung +America/Paramaribo +America/Phoenix +America/Port-au-Prince +America/Port_of_Spain +America/Porto_Acre +America/Porto_Velho +America/Puerto_Rico +America/Rainy_River +America/Rankin_Inlet +America/Recife +America/Regina +America/Rio_Branco +America/Rosario +America/Santiago +America/Santo_Domingo +America/Sao_Paulo +America/Scoresbysund +America/Shiprock +America/St_Johns +America/St_Kitts +America/St_Lucia +America/St_Thomas +America/St_Vincent +America/Swift_Current +America/Tegucigalpa +America/Thule +America/Thunder_Bay +America/Tijuana +America/Tortola +America/Vancouver +America/Virgin +America/Whitehorse +America/Winnipeg +America/Yakutat +America/Yellowknife +Antarctica/Casey +Antarctica/Davis +Antarctica/DumontDUrville +Antarctica/Mawson +Antarctica/McMurdo +Antarctica/Palmer +Antarctica/South_Pole +Antarctica/Syowa +Antarctica/Vostok +Arctic/Longyearbyen +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Ashkhabad +Asia/Baghdad +Asia/Bahrain +Asia/Baku +Asia/Bangkok +Asia/Beirut +Asia/Bishkek +Asia/Brunei +Asia/Calcutta +Asia/Choibalsan +Asia/Chongqing +Asia/Chungking +Asia/Colombo +Asia/Dacca +Asia/Damascus +Asia/Dhaka +Asia/Dili +Asia/Dubai +Asia/Dushanbe +Asia/Gaza +Asia/Harbin +Asia/Hong_Kong +Asia/Hovd +Asia/Irkutsk +Asia/Ishigaki +Asia/Istanbul +Asia/Jakarta +Asia/Jayapura +Asia/Jerusalem +Asia/Kabul +Asia/Kamchatka +Asia/Karachi +Asia/Kashgar +Asia/Katmandu +Asia/Krasnoyarsk +Asia/Kuala_Lumpur +Asia/Kuching +Asia/Kuwait +Asia/Macao +Asia/Macau +Asia/Magadan +Asia/Manila +Asia/Muscat +Asia/Nicosia +Asia/Novosibirsk +Asia/Omsk +Asia/Oral +Asia/Phnom_Penh +Asia/Pontianak +Asia/Pyongyang +Asia/Qatar +Asia/Qyzylorda +Asia/Rangoon +Asia/Riyadh +Asia/Riyadh87 +Asia/Riyadh88 +Asia/Riyadh89 +Asia/Saigon +Asia/Sakhalin +Asia/Samarkand +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Tel_Aviv +Asia/Thimbu +Asia/Thimphu +Asia/Tokyo +Asia/Ujung_Pandang +Asia/Ulaanbaatar +Asia/Ulan_Bator +Asia/Urumqi +Asia/Vientiane +Asia/Vladivostok +Asia/Yakutsk +Asia/Yekaterinburg +Asia/Yerevan +Atlantic/Azores +Atlantic/Bermuda +Atlantic/Canary +Atlantic/Cape_Verde +Atlantic/Faeroe +Atlantic/Jan_Mayen +Atlantic/Madeira +Atlantic/Reykjavik +Atlantic/South_Georgia +Atlantic/St_Helena +Atlantic/Stanley +Australia/ACT +Australia/Adelaide +Australia/Brisbane +Australia/Broken_Hill +Australia/Canberra +Australia/Darwin +Australia/Hobart +Australia/LHI +Australia/Lindeman +Australia/Lord_Howe +Australia/Melbourne +Australia/NSW +Australia/North +Australia/Perth +Australia/Queensland +Australia/South +Australia/Sydney +Australia/Tasmania +Australia/Victoria +Australia/West +Australia/Yancowinna +Brazil/Acre +Brazil/DeNoronha +Brazil/East +Brazil/West +CET +CST6CDT +Canada/Atlantic +Canada/Central +Canada/East-Saskatchewan +Canada/Eastern +Canada/Mountain +Canada/Newfoundland +Canada/Pacific +Canada/Saskatchewan +Canada/Yukon +Chile/Continental +Chile/EasterIsland +China/Beijing +China/Shanghai +Cuba +EET +EST +EST5EDT +Egypt +Eire +Etc/GMT +Etc/GMT+0 +Etc/GMT+1 +Etc/GMT+10 +Etc/GMT+11 +Etc/GMT+12 +Etc/GMT+2 +Etc/GMT+3 +Etc/GMT+4 +Etc/GMT+5 +Etc/GMT+6 +Etc/GMT+7 +Etc/GMT+8 +Etc/GMT+9 +Etc/GMT-0 +Etc/GMT-1 +Etc/GMT-10 +Etc/GMT-11 +Etc/GMT-12 +Etc/GMT-13 +Etc/GMT-14 +Etc/GMT-2 +Etc/GMT-3 +Etc/GMT-4 +Etc/GMT-5 +Etc/GMT-6 +Etc/GMT-7 +Etc/GMT-8 +Etc/GMT-9 +Etc/GMT0 +Etc/Greenwich +Etc/UCT +Etc/UTC +Etc/Universal +Etc/Zulu +Europe/Amsterdam +Europe/Andorra +Europe/Athens +Europe/Belfast +Europe/Belgrade +Europe/Berlin +Europe/Bratislava +Europe/Brussels +Europe/Bucharest +Europe/Budapest +Europe/Chisinau +Europe/Copenhagen +Europe/Dublin +Europe/Gibraltar +Europe/Helsinki +Europe/Istanbul +Europe/Kaliningrad +Europe/Kiev +Europe/Lisbon +Europe/Ljubljana +Europe/London +Europe/Luxembourg +Europe/Madrid +Europe/Malta +Europe/Minsk +Europe/Monaco +Europe/Moscow +Europe/Nicosia +Europe/Oslo +Europe/Paris +Europe/Prague +Europe/Riga +Europe/Rome +Europe/Samara +Europe/San_Marino +Europe/Sarajevo +Europe/Simferopol +Europe/Skopje +Europe/Sofia +Europe/Stockholm +Europe/Tallinn +Europe/Tirane +Europe/Tiraspol +Europe/Uzhgorod +Europe/Vaduz +Europe/Vatican +Europe/Vienna +Europe/Vilnius +Europe/Warsaw +Europe/Zagreb +Europe/Zaporozhye +Europe/Zurich +Factory +GB +GB-Eire +GMT +GMT+0 +GMT-0 +GMT0 +Greenwich +HST +Hongkong +Iceland +Indian/Antananarivo +Indian/Chagos +Indian/Christmas +Indian/Cocos +Indian/Comoro +Indian/Kerguelen +Indian/Mahe +Indian/Maldives +Indian/Mauritius +Indian/Mayotte +Indian/Reunion +Iran +Israel +Jamaica +Japan +Kwajalein +Libya +MET +MST +MST7MDT +Mexico/BajaNorte +Mexico/BajaSur +Mexico/General +Mideast/Riyadh87 +Mideast/Riyadh88 +Mideast/Riyadh89 +NZ +NZ-CHAT +Navajo +PRC +PST8PDT +Pacific/Apia +Pacific/Auckland +Pacific/Chatham +Pacific/Easter +Pacific/Efate +Pacific/Enderbury +Pacific/Fakaofo +Pacific/Fiji +Pacific/Funafuti +Pacific/Galapagos +Pacific/Gambier +Pacific/Guadalcanal +Pacific/Guam +Pacific/Honolulu +Pacific/Johnston +Pacific/Kiritimati +Pacific/Kosrae +Pacific/Kwajalein +Pacific/Majuro +Pacific/Marquesas +Pacific/Midway +Pacific/Nauru +Pacific/Niue +Pacific/Norfolk +Pacific/Noumea +Pacific/Pago_Pago +Pacific/Palau +Pacific/Pitcairn +Pacific/Ponape +Pacific/Port_Moresby +Pacific/Rarotonga +Pacific/Saipan +Pacific/Samoa +Pacific/Tahiti +Pacific/Tarawa +Pacific/Tongatapu +Pacific/Truk +Pacific/Wake +Pacific/Wallis +Pacific/Yap +Poland +Portugal +ROC +ROK +Singapore +SystemV/AST4 +SystemV/AST4ADT +SystemV/CST6 +SystemV/CST6CDT +SystemV/EST5 +SystemV/EST5EDT +SystemV/HST10 +SystemV/MST7 +SystemV/MST7MDT +SystemV/PST8 +SystemV/PST8PDT +SystemV/YST9 +SystemV/YST9YDT +Turkey +UCT +US/Alaska +US/Aleutian +US/Arizona +US/Central +US/East-Indiana +US/Eastern +US/Hawaii +US/Indiana-Starke +US/Michigan +US/Mountain +US/Pacific +US/Samoa +UTC +Universal +W-SU +WET +Zulu diff --git a/ehcp/webmail2/plugins/README.plugins b/ehcp/webmail2/plugins/README.plugins new file mode 100644 index 0000000..5f99002 --- /dev/null +++ b/ehcp/webmail2/plugins/README.plugins @@ -0,0 +1,39 @@ +Plugins +======= + +To understand more about plugins, read: + + http://squirrelmail.org/docs/admin/admin-7.html#ss7.1 + http://squirrelmail.org/docs/devel/devel-4.html + + +For the impatient, here is an extremely brief overview of how to +install plugins. + + 1. Change to the plugins directory. + + $ cd plugins/ + + 2. Unarchive the plugin. + + $ tar -zxvf /home/me/myplugin.tar.gz + + 3. Note the directory that the plugin was created into. For this + example, we will assume it was put in the directory: myplugin/. + + 4. Read the README, INSTALL or other documentation in your new plugin. + Follow any important configuration instructions inside (about half + the time there are none, sometimes they are extensive). + + $ cd myplugin/ + $ more README + + 5. Go to the config directory and run conf.pl + + $ cd ../../config/ + $ ./conf.pl + + 6. Choose option 8 and proceed to add the new plugin following + the instructions there (move the desired plugin from the "Available + Plugins" category to the "Installed Plugins" category by entering + its number). Save and exit, and your plugin should be in place. diff --git a/ehcp/webmail2/plugins/abook_take/README b/ehcp/webmail2/plugins/abook_take/README new file mode 100644 index 0000000..f5eee37 --- /dev/null +++ b/ehcp/webmail2/plugins/abook_take/README @@ -0,0 +1,53 @@ +Address Book Take + +If you would like to add the sender of a message you're reading to your +address book quickly and easily without cutting and pasting, then this +plugin simplifies the process. It scans the mail message you're reading +for any email address and lets you add it with a quick form. + + +Features +======== + +* Saves you the need to Cut & Paste +* Steals from the To, From, Reply-To, and CC fields +* Steals from the body of the message +* Address verification (pretty good) + + +Description +=========== + +By pulling down a list and selecting the address you want to add, you +are then presented with a familiar Add to Personal Address Book screen. +By filling out this form, you will then add the email address to your +personal address book. + +The user can decide if the box is shown, where it is shown on the bottom +of the Read screen, and whether or not to attempt to verify that the +address works. + +When trying to verify if the address works, it checks to see if the host +has any DNS record available. Usually this will work. + + +Future Work +=========== + +* Maybe grab the name, if available +* Search more headers (when they become available) +* Steal from the body of the message directly (when possible) +* When new domains are added, update the email verification function + + +Installation +============ + +Go back to the main directory, run configure and add the plugin. + + +Credits +======= + +This plugin has been originally developed by Tyler Akins and is now +maintained by the SquirrelMail Project Team. diff --git a/ehcp/webmail2/plugins/abook_take/index.php b/ehcp/webmail2/plugins/abook_take/index.php new file mode 100644 index 0000000..f9fb24e --- /dev/null +++ b/ehcp/webmail2/plugins/abook_take/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/abook_take/setup.php b/ehcp/webmail2/plugins/abook_take/setup.php new file mode 100644 index 0000000..ecc92e3 --- /dev/null +++ b/ehcp/webmail2/plugins/abook_take/setup.php @@ -0,0 +1,118 @@ +\n"; + $abook_found_email[$hits[0]] = 1; + } + } + + return; +} + +function abook_take_read_array($array) +{ + foreach ($array as $item) + abook_take_read_string($item->getAddress()); +} + +function abook_take_read() +{ + global $message; + + echo '
            '."\n"; + + if (isset($message->rfc822_header->reply_to)) + abook_take_read_array($message->rfc822_header->reply_to); + if (isset($message->rfc822_header->from)) + abook_take_read_array($message->rfc822_header->from); + if (isset($message->rfc822_header->cc)) + abook_take_read_array($message->rfc822_header->cc); + if (isset($message->rfc822_header->to)) + abook_take_read_array($message->rfc822_header->to); + + echo '' . + '
            '; +} + +function abook_take_pref() +{ + global $username, $data_dir, $abook_take_verify; + + $abook_take_verify = getPref($data_dir, $username, 'abook_take_verify'); +} + +function abook_take_options() +{ + global $abook_take_verify; + + echo '' . html_tag('td',_("Address Book Take:"),'right','','nowrap') . "\n" . + ' ' . _("Try to verify addresses") . "\n"; +} + + +function abook_take_save() +{ + global $username, $data_dir; + + if (sqgetGlobalVar('abook_take_abook_take_verify', $abook_take_abook_take_verify, SQ_POST)) + setPref($data_dir, $username, 'abook_take_verify', '1'); + else + setPref($data_dir, $username, 'abook_take_verify', ''); +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/abook_take/take.php b/ehcp/webmail2/plugins/abook_take/take.php new file mode 100644 index 0000000..4251832 --- /dev/null +++ b/ehcp/webmail2/plugins/abook_take/take.php @@ -0,0 +1,107 @@ +' ."\n" . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'th', sprintf(_("Add to %s"), $abook->localbackendname), 'center', $color[0] ) + ) , + 'center', '', 'width="100%" cols="1"' ) . + + html_tag( 'table', '', 'center', '', 'border="0" cellpadding="1" cols="2" width="90%"' ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', _("Nickname") . ':', 'right', $color[4], 'width="50"' ) . "\n" . + html_tag( 'td', '' . + ' ' . _("Must be unique") . '', + 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', _("E-mail address") . ':', 'right', $color[4], 'width="50"' ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + '' . "\n" . + + html_tag( 'tr', "\n" . + html_tag( 'td', _("Last name") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', _("First name") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', _("Additional info") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', + '' , + 'center', $color[4], 'colspan="2"' ) + ) . "\n" . + ''; + } else { + echo '' . "\n" . + + html_tag( 'tr', "\n" . + html_tag( 'td', _("First name") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', _("Last name") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', _("Additional info") . ':', 'right', $color[4], 'width="50"' ) . + html_tag( 'td', '', 'left', $color[4] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', + '' , + 'center', $color[4], 'colspan="2"' ) + ) . "\n" . + ''; + } +?> + + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/administrator/INSTALL b/ehcp/webmail2/plugins/administrator/INSTALL new file mode 100644 index 0000000..88f5771 --- /dev/null +++ b/ehcp/webmail2/plugins/administrator/INSTALL @@ -0,0 +1,31 @@ +Administrator Plugin +-------------------- + +In order to use this plugin, you must first activate it using +conf.pl and then you must change the config/config.php files +permissions to 660. This file must be owned by the user who you +want to have access to this plugin (only one user allowed) and +the group must be the group of the user who is running php. This +authentication method requires posix support in php and doesn't +work, if user's id equals to 0. + +An alternative method, but less secure, is to add a file called +admins into the plugin folder with the names of the users that +you want to allow the use of the plugin. + +Use this plugin at your own risk, and always remember to make a +backup of your config.php file before use. + +Order of authentication checks +------------------------------ +When plugin checks if user can use it, it first checks +plugins/administrator/admins file. If file does not exist, plugin +checks config/admins. If plugin can't find admins file, it tries to +use uid based authentication. + + +Credits +------- + +The administrator plugin was originally created by Philippe Mingo, and is now +maintained by the SquirrelMail Project Team. diff --git a/ehcp/webmail2/plugins/administrator/auth.php b/ehcp/webmail2/plugins/administrator/auth.php new file mode 100644 index 0000000..841c385 --- /dev/null +++ b/ehcp/webmail2/plugins/administrator/auth.php @@ -0,0 +1,66 @@ + $lang_attributes) { + if (isset($lang_attributes['NAME'])) { + $language_values[$lang_key] = $lang_attributes['NAME']; + } +} +asort( $language_values ); +$language_values = array_merge(array('' => _("Default")), $language_values); +$left_size_values = array(); +for ($lsv = 100; $lsv <= 300; $lsv += 10) { + $left_size_values[$lsv] = "$lsv " . _("pixels"); +} + +$defcfg = array( '$config_version' => array( 'name' => _("Config File Version"), + 'type' => SMOPT_TYPE_COMMENT, + 'size' => 7 ), + 'SM_ver' => array( 'name' => _("SquirrelMail Version"), + 'type' => SMOPT_TYPE_EXTERNAL, + 'value' => "$version" ), + 'PHP_ver' => array( 'name' => _("PHP Version"), + 'type' => SMOPT_TYPE_EXTERNAL, + 'value' => phpversion() ), + /* --------------------------------------------------------*/ + 'Group1' => array( 'name' => _("Organization Preferences"), + 'type' => SMOPT_TYPE_TITLE ), + '$org_name' => array( 'name' => _("Organization Name"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$org_logo' => array( 'name' => _("Organization Logo"), + 'type' => SMOPT_TYPE_PATH, + 'size' => 40, + 'default' => '../images/sm_logo.png'), + '$org_logo_width' => array( 'name' => _("Organization Logo Width"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 5, + 'default' => 0), + '$org_logo_height' => array( 'name' => _("Organization Logo Height"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 5, + 'default' => 0), + '$org_title' => array( 'name' => _("Organization Title"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$signout_page' => array( 'name' => _("Signout Page"), + 'type' => SMOPT_TYPE_PATH, + 'size' => 40 ), + '$provider_uri' => array( 'name' => _("Provider Link URI"), + 'type' => SMOPT_TYPE_STRING ), + '$provider_name' => array( 'name' => _("Provider Name"), + 'type' => SMOPT_TYPE_STRING ), + '$frame_top' => array( 'name' => _("Top Frame"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => '_top' ), + /* --------------------------------------------------------*/ + 'Group2' => array( 'name' => _("Server Settings"), + 'type' => SMOPT_TYPE_TITLE ), + '$domain' => array( 'name' => _("Mail Domain"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$imapServerAddress' => array( 'name' => _("IMAP Server Address"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$imapPort' => array( 'name' => _("IMAP Server Port"), + 'type' => SMOPT_TYPE_INTEGER ), + '$imap_server_type' => array( 'name' => _("IMAP Server Type"), + 'type' => SMOPT_TYPE_STRLIST, + 'posvals' => array( 'cyrus' => _("Cyrus IMAP server"), + 'uw' => _("University of Washington's IMAP server"), + 'exchange' => _("Microsoft Exchange IMAP server"), + 'courier' => _("Courier IMAP server"), + 'macosx' => _("Mac OS X Mailserver"), + 'hmailserver' => _("hMailServer IMAP server"), + 'mercury32' => _("Mercury/32 IMAP server"), + 'bincimap' => _("Binc IMAP server"), + 'dovecot' => _("Dovecot IMAP server"), + 'other' => _("Not one of the above servers") ) ), + '$optional_delimiter' => array( 'name' => _("IMAP Folder Delimiter"), + 'type' => SMOPT_TYPE_STRING, + 'comment' => _("Use "detect" to auto-detect."), + 'size' => 10, + 'default' => 'detect' ), + '$use_imap_tls' => array( 'name' => _("Use TLS for IMAP Connections"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'comment' => _("Requires PHP 4.3.x! Experimental."), + 'default' => false ), + '$imap_auth_mech' => array( 'name' => _("IMAP Authentication Type"), + 'type' => SMOPT_TYPE_STRLIST, + 'posvals' => array('login' => _("IMAP login"), + 'cram-md5' => 'CRAM-MD5', + 'digest-md5' => 'DIGEST-MD5'), + 'default' => 'login' ), + '$useSendmail' => array( 'name' => _("Use Sendmail Binary"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'comment' => _("Choose "no" for SMTP") ), + '$sendmail_path' => array( 'name' => _("Sendmail Path"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$sendmail_args' => array( 'name' => _("Sendmail Arguments"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$smtpServerAddress' => array( 'name' => _("SMTP Server Address"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$smtpPort' => array( 'name' => _("SMTP Server Port"), + 'type' => SMOPT_TYPE_INTEGER ), + '$use_smtp_tls' => array( 'name' => _("Use TLS for SMTP Connections"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'comment' => _("Requires PHP 4.3.x! Experimental."), + 'default' => false ), + '$smtp_auth_mech' => array( 'name' => _("SMTP Authentication Type"), + 'type' => SMOPT_TYPE_STRLIST, + 'posvals' => array('none' => _("No SMTP auth"), + 'login' => _("Login (plain text)"), + 'cram-md5' => 'CRAM-MD5', + 'digest-md5' => 'DIGEST-MD5'), + 'default' => 'none'), + '$smtp_sitewide_user' => array( 'name' => _("Custom SMTP AUTH username"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40), + '$smtp_sitewide_pass' => array( 'name' => _("Custom SMTP AUTH password"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40), + '$pop_before_smtp' => array( 'name' => _("POP3 Before SMTP?"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false ), + '$encode_header_key' => array( 'name' => _("Header Encryption Key"), + 'type' => SMOPT_TYPE_STRING ), + '$invert_time' => array( 'name' => _("Invert Time"), + 'type' => SMOPT_TYPE_BOOLEAN ), + /* --------------------------------------------------------*/ + 'Group3' => array( 'name' => _("Folders Defaults"), + 'type' => SMOPT_TYPE_TITLE ), + '$default_folder_prefix' => array( 'name' => _("Default Folder Prefix"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$show_prefix_option' => array( 'name' => _("Show Folder Prefix Option"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$trash_folder' => array( 'name' => _("Trash Folder"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$sent_folder' => array( 'name' => _("Sent Folder"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$draft_folder' => array( 'name' => _("Draft Folder"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$default_move_to_trash' => array( 'name' => _("By default, move to trash"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_move_to_sent' => array( 'name' => _("By default, move to sent"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_save_as_draft' => array( 'name' => _("By default, save as draft"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$list_special_folders_first' => array( 'name' => _("List Special Folders First"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$use_special_folder_color' => array( 'name' => _("Show Special Folders Color"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$auto_expunge' => array( 'name' => _("Auto Expunge"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_sub_of_inbox' => array( 'name' => _("Default Sub. of INBOX"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$show_contain_subfolders_option' => array( 'name' => _("Show 'Contain Sub.' Option"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_unseen_notify' => array( 'name' => _("Default Unseen Notify"), + 'type' => SMOPT_TYPE_NUMLIST, + 'posvals' => array( SMPREF_UNSEEN_NONE => _("No Notification"), + SMPREF_UNSEEN_INBOX => _("Only INBOX"), + SMPREF_UNSEEN_ALL => _("All Folders")) ), + '$default_unseen_type' => array( 'name' => _("Default Unseen Type"), + 'type' => SMOPT_TYPE_NUMLIST , + 'posvals' => array( SMPREF_UNSEEN_ONLY => _("Only Unseen"), + SMPREF_UNSEEN_TOTAL => _("Unseen and Total") ) ), + '$auto_create_special' => array( 'name' => _("Auto Create Special Folders"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$delete_folder' => array( 'name' => _("Auto delete folders"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$noselect_fix_enable' => array( 'name' => _("Enable /NoSelect folder fix"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false), + /* --------------------------------------------------------*/ + 'Group4' => array( 'name' => _("General Options"), + 'type' => SMOPT_TYPE_TITLE ), + '$data_dir' => array( 'name' => _("Data Directory"), + 'type' => SMOPT_TYPE_PATH, + 'size' => 40 ), + '$attachment_dir' => array( 'name' => _("Temp Directory"), + 'type' => SMOPT_TYPE_PATH, + 'size' => 40 ), + '$dir_hash_level' => array( 'name' => _("Hash Level"), + 'type' => SMOPT_TYPE_NUMLIST, + 'posvals' => array( 0 => _("Hash Disabled"), + 1 => _("Low"), + 2 => _("Moderate"), + 3 => _("Medium"), + 4 => _("High") ) ), + '$default_left_size' => array( 'name' => _("Default Left Size"), + 'type' => SMOPT_TYPE_NUMLIST, + 'posvals' => $left_size_values ), + '$force_username_lowercase' => array( 'name' => _("Usernames in Lowercase"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_use_priority' => array( 'name' => _("Allow use of priority"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$hide_sm_attributions' => array( 'name' => _("Hide SM attributions"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$default_use_mdn' => array( 'name' => _("Enable use of delivery receipts"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$edit_identity' => array( 'name' => _("Allow editing of identities"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$edit_name' => array( 'name' => _("Allow editing of full name"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$hide_auth_header' => array( 'name' => _("Remove username from headers"), + 'comment' => _("Used only when identities can't be modified"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$allow_server_sort' => array( 'name' => _("Use server-side sorting"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false ), + '$allow_thread_sort' => array( 'name' => _("Use server-side thread sorting"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false ), + '$allow_charset_search' => array( 'name' => _("Allow server charset search"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false ), + '$uid_support' => array( 'name' => _("UID support"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'default' => false ), + '$session_name' => array( 'name' => _("PHP session name"), + 'type' => SMOPT_TYPE_HIDDEN ), + '$config_location_base' => array( 'name' => _("Location base"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => '' ), + /* --------------------------------------------------------*/ + 'Group5' => array( 'name' => _("Message of the Day"), + 'type' => SMOPT_TYPE_TITLE ), + '$motd' => array( 'name' => _("Message of the Day"), + 'type' => SMOPT_TYPE_TEXTAREA, + 'size' => 40 ), + /* ---- Database settings ---- */ + 'Group6' => array( 'name' => _("Database"), + 'type' => SMOPT_TYPE_TITLE ), + '$addrbook_dsn' => array( 'name' => _("Address book DSN"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$addrbook_table' => array( 'name' => _("Address book table"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'address' ), + '$prefs_dsn' => array( 'name' => _("Preferences DSN"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$prefs_table' => array( 'name' => _("Preferences table"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'userprefs' ), + '$prefs_user_field' => array('name' => _("Preferences username field"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'user' ), + '$prefs_key_field' => array('name' => _("Preferences key field"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'prefkey' ), + '$prefs_val_field' => array('name' => _("Preferences value field"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'prefval' ), + '$addrbook_global_dsn' => array( 'name' => _("Global address book DSN"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40 ), + '$addrbook_global_table' => array( 'name' => _("Global address book table"), + 'type' => SMOPT_TYPE_STRING, + 'size' => 40, + 'default' => 'global_abook' ), + '$addrbook_global_writeable' => array( 'name' => _("Allow writing into global address book"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$addrbook_global_listing' => array( 'name' => _("Allow listing of global address book"), + 'type' => SMOPT_TYPE_BOOLEAN ), + /* ---- Language settings ---- */ + 'Group9' => array( 'name' => _("Language settings"), + 'type' => SMOPT_TYPE_TITLE ), + '$squirrelmail_default_language' => array( 'name' => _("Default Language"), + 'type' => SMOPT_TYPE_STRLIST, + 'size' => 7, + 'posvals' => $language_values ), + '$default_charset' => array( 'name' => _("Default Charset"), + 'type' => SMOPT_TYPE_STRLIST, + 'posvals' => array( 'iso-8859-1' => 'iso-8859-1', + 'iso-8859-2' => 'iso-8859-2', + 'iso-8859-7' => 'iso-8859-7', + 'iso-8859-9' => 'iso-8859-9', + 'iso-8859-15' => 'iso-8859-15', + 'utf-8' => 'utf-8', + 'koi8-r' => 'koi8-r', + 'euc-kr' => 'euc-kr', + 'big5' => 'big5', + 'gb2312' => 'gb2312', + 'tis-620' => 'tis-620', + 'windows-1251' => 'windows-1251', + 'windows-1255' => 'windows-1255', + 'windows-1256' => 'windows-1256', + 'iso-2022-jp' => 'iso-2022-jp' ) ), + '$lossy_encoding' => array( 'name' => _("Enable lossy encoding"), + 'type' => SMOPT_TYPE_BOOLEAN ), + /* ---- Settings of address books ---- */ + 'Group10' => array( 'name' => _("Address Books"), + 'type' => SMOPT_TYPE_TITLE ), + '$default_use_javascript_addr_book' => array( 'name' => _("Default Javascript Addressbook"), + 'type' => SMOPT_TYPE_BOOLEAN ), + '$abook_global_file' => array( 'name' => _("Global address book file"), + 'type' => SMOPT_TYPE_STRING ), + '$abook_global_file_writeable' => array( 'name' => _("Allow writing into global address book file"), + 'type' => SMOPT_TYPE_BOOLEAN ), + /* --------------------------------------------------------*/ + 'Group7' => array( 'name' => _("Themes"), + 'type' => SMOPT_TYPE_TITLE ), + '$theme_css' => array( 'name' => _("Style Sheet URL (css)"), + 'type' => SMOPT_TYPE_PATH, + 'size' => 40 ), + '$theme_default' => array( 'name' => _("Default theme"), + 'type' => SMOPT_TYPE_INTEGER, + 'default' => 0, + 'comment' => _("Use index number of theme") ), + /* --------------------------------------------------------*/ + '$config_use_color' => array( 'name' => '', + 'type' => SMOPT_TYPE_HIDDEN ), + '$no_list_for_subscribe' => array( 'name' => '', + 'type' => SMOPT_TYPE_HIDDEN ), + /* --------------------------------------------------------*/ + + ); diff --git a/ehcp/webmail2/plugins/administrator/index.php b/ehcp/webmail2/plugins/administrator/index.php new file mode 100644 index 0000000..4514ab4 --- /dev/null +++ b/ehcp/webmail2/plugins/administrator/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/administrator/options.php b/ehcp/webmail2/plugins/administrator/options.php new file mode 100644 index 0000000..bbb123d --- /dev/null +++ b/ehcp/webmail2/plugins/administrator/options.php @@ -0,0 +1,639 @@ + $j + 1 && + $line{$j}.$line{$j+1} == '*/' ) { + $mode = ''; + $j++; + } + break; + case 'D': + // Delimiter detect + switch ( $line{$j} ) { + case '"': + case "'": + // Double quote string + $delimiter = $value = $line{$j}; + $mode = 'S'; + break; + case ' ': + // Nothing yet + break; + default: + if ( strtoupper( substr( $line, $j, 4 ) ) == 'TRUE' ) { + // Boolean TRUE + $newcfg{$key} = 'TRUE'; + $key = ''; + $mode = ';'; + } else if ( strtoupper( substr( $line, $j, 5 ) ) == 'FALSE' ) { + $newcfg{$key} = 'FALSE'; + $key = ''; + $mode = ';'; + } else { + // Number or function call + $mode = 'N'; + $value = $line{$j}; + } + } + break; + default: + if ( $line{$j} == '$' ) { + // We must detect $key name + $mode = 'K'; + $key = '$'; + } else if ( $s < $j + 2 ) { + } else if ( strtoupper( substr( $line, $j, 7 ) ) == 'GLOBAL ' ) { + // Skip untill next ; + $mode = ';'; + $j += 6; + } else if ( $line{$j}.$line{$j+1} == '/*' ) { + $mode = 'C'; + $j++; + } else if ( $line{$j} == '#' || $line{$j}.$line{$j+1} == '//' ) { + // Delete till the end of the line + $j = $s; + } + } + } + } +} + +/** + * Change paths containing SM_PATH to admin-friendly paths + * relative to the config dir, i.e.: + * '' --> + * SM_PATH . 'images/logo.gif' --> ../images/logo.gif + * '/absolute/path/logo.gif' --> /absolute/path/logo.gif + * 'http://whatever/' --> http://whatever + * Note removal of quotes in returned value + * + * @param string $old_path path that has to be converted + * @return string new path + * @access private + */ +function change_to_rel_path($old_path) { + $new_path = str_replace("SM_PATH . '", "../", $old_path); + $new_path = str_replace("../config/","", $new_path); + $new_path = str_replace("'","", $new_path); + return $new_path; +} + +/** + * Change relative path (relative to config dir) to + * internal SM_PATH, i.e.: + * empty_string --> '' + * ../images/logo.gif --> SM_PATH . 'images/logo.gif' + * images/logo.gif --> SM_PATH . 'config/images/logo.gif' + * /absolute/path/logo.gif --> '/absolute/path/logo.gif' + * C:/absolute/win/path --> 'C:/absolute/win/path' + * http://whatever/ --> 'http://whatever' + * + * @param string $old_path path that has to be converted + * @return string new path + * @access private +*/ +function change_to_sm_path($old_path) { + if ( $old_path === '' || $old_path == "''" ) { + return "''"; + } elseif ( preg_match("/^(\/|http)/", $old_path) || + substr($old_path,1,2) == ':/' ) { + return "'" . $old_path . "'"; + } elseif ( preg_match("/^(\$|SM_PATH)/", $old_path) ) { + return $old_path; + } + + $new_path = ''; + $rel_path = explode("../", $old_path); + if ( count($rel_path) > 2 ) { + // Since we're relative to the config dir, + // more than 1 ../ puts us OUTSIDE the SM tree. + // get full path to config.php, then pop the filename + $abs_path = explode('/', realpath (SM_PATH . 'config/config.php')); + array_pop ($abs_path); + foreach ( $rel_path as $subdir ) { + if ( $subdir === '' ) { + array_pop ($abs_path); + } else { + array_push($abs_path, $subdir); + } + } + foreach ($abs_path as $subdir) { + $new_path .= $subdir . '/'; + } + $new_path = "'$new_path'"; + } elseif ( count($rel_path) > 1 ) { + // we're within the SM tree, prepend SM_PATH + $new_path = str_replace('../',"SM_PATH . '", $old_path . "'"); + } else { + // Last, if it's a relative path without a .. prefix, + // we're somewhere within the config dir, so prepend + // SM_PATH . 'config/ + $new_path = "SM_PATH . 'config/" . $old_path . "'"; + } + return $new_path; +} + + +/* ---------------------- main -------------------------- */ + +/** @ignore */ +define('SM_PATH','../../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'plugins/administrator/defines.php'); +require_once(SM_PATH . 'plugins/administrator/auth.php'); + +global $data_dir, $username; + +if ( !adm_check_user() ) { + header('Location: ' . SM_PATH . 'src/options.php') ; + exit; +} + +displayPageHeader($color, 'None'); + +$newcfg = array( ); + +foreach ( $defcfg as $key => $def ) { + $newcfg[$key] = ''; +} + +$cfgfile = SM_PATH . 'config/config.php'; +parseConfig( SM_PATH . 'config/config_default.php' ); +parseConfig( $cfgfile ); + +$colapse = array( 'Titles' => 'off', + 'Group1' => getPref($data_dir, $username, 'adm_Group1', 'off' ), + 'Group2' => getPref($data_dir, $username, 'adm_Group2', 'on' ), + 'Group3' => getPref($data_dir, $username, 'adm_Group3', 'on' ), + 'Group4' => getPref($data_dir, $username, 'adm_Group4', 'on' ), + 'Group5' => getPref($data_dir, $username, 'adm_Group5', 'on' ), + 'Group6' => getPref($data_dir, $username, 'adm_Group6', 'on' ), + 'Group7' => getPref($data_dir, $username, 'adm_Group7', 'on' ), + 'Group8' => getPref($data_dir, $username, 'adm_Group8', 'on' ), + 'Group9' => getPref($data_dir, $username, 'adm_Group9', 'on' ), + 'Group10' => getPref($data_dir, $username, 'adm_Group10', 'on' ) ); + +/* look in $_GET array for 'switch' */ +if ( sqgetGlobalVar('switch', $switch, SQ_GET) ) { + if ( $colapse[$switch] == 'on' ) { + $colapse[$switch] = 'off'; + } else { + $colapse[$switch] = 'on'; + } + setPref($data_dir, $username, "adm_$switch", $colapse[$switch] ); +} + +echo '
            ' . + '
            '. + ''. + ''. + ''; + + +$act_grp = 'Titles'; /* Active group */ + +foreach ( $newcfg as $k => $v ) { + $l = strtolower( $v ); + $type = SMOPT_TYPE_UNDEFINED; + $n = substr( $k, 1 ); + $n = str_replace( '[', '_', $n ); + $n = str_replace( ']', '_', $n ); + $e = 'adm_' . $n; + $name = $k; + $size = 50; + if ( isset( $defcfg[$k] ) ) { + $name = $defcfg[$k]['name']; + $type = $defcfg[$k]['type']; + if ( isset( $defcfg[$k]['size'] ) ) { + $size = $defcfg[$k]['size']; + } else { + $size = 40; + } + } else if ( $l == 'true' ) { + $v = 'TRUE'; + $type = SMOPT_TYPE_BOOLEAN; + } else if ( $l == 'false' ) { + $v = 'FALSE'; + $type = SMOPT_TYPE_BOOLEAN; + } else if ( $v{0} == "'" ) { + $type = SMOPT_TYPE_STRING; + } else if ( $v{0} == '"' ) { + $type = SMOPT_TYPE_STRING; + } + + if ( substr( $k, 0, 7 ) == '$theme[' ) { + $type = SMOPT_TYPE_THEME; + } else if ( substr( $k, 0, 9 ) == '$plugins[' ) { + $type = SMOPT_TYPE_PLUGINS; + } else if ( substr( $k, 0, 13 ) == '$ldap_server[' ) { + $type = SMOPT_TYPE_LDAP; + } + + if ( $type == SMOPT_TYPE_TITLE || $colapse[$act_grp] == 'off' ) { + + switch ( $type ) { + case SMOPT_TYPE_LDAP: + case SMOPT_TYPE_PLUGINS: + case SMOPT_TYPE_THEME: + case SMOPT_TYPE_HIDDEN: + break; + case SMOPT_TYPE_EXTERNAL: + echo "'; + break; + case SMOPT_TYPE_TITLE: + if ( $colapse[$k] == 'on' ) { + $sw = '(+)'; + } else { + $sw = '(-)'; + } + echo ''; + $act_grp = $k; + break; + case SMOPT_TYPE_COMMENT: + $v = substr( $v, 1, strlen( $v ) - 2 ); + echo "\n"; + break; + case SMOPT_TYPE_INTEGER: + /* look for variable $e in POST, fill into $v */ + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = intval( $new_v ); + $newcfg[$k] = $v; + } + echo "\n"; + break; + case SMOPT_TYPE_NUMLIST: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = $new_v; + $newcfg[$k] = $v; + } + echo "\n"; + break; + case SMOPT_TYPE_STRLIST: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . $new_v . '"'; + $newcfg[$k] = $v; + } + echo "\n"; + break; + + case SMOPT_TYPE_TEXTAREA: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . $new_v . '"'; + $newcfg[$k] = str_replace( "\n", '', $v ); + } + echo "\n"; + break; + case SMOPT_TYPE_STRING: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . $new_v . '"'; + $newcfg[$k] = $v; + } + if ( $v == '""' && isset( $defcfg[$k]['default'] ) ) { + $v = "'" . $defcfg[$k]['default'] . "'"; + $newcfg[$k] = $v; + } + echo "\n"; + break; + case SMOPT_TYPE_BOOLEAN: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = $new_v; + $newcfg[$k] = $v; + } else { + $v = strtoupper( $v ); + } + if ( $v == 'TRUE' ) { + $ct = ' checked="checked"'; + $cf = ''; + } else { + $ct = ''; + $cf = ' checked="checked"'; + } + echo "\n"; + break; + case SMOPT_TYPE_PATH: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = change_to_sm_path($new_v); + $newcfg[$k] = $v; + } + if ( $v == "''" && isset( $defcfg[$k]['default'] ) ) { + $v = change_to_sm_path($defcfg[$k]['default']); + $newcfg[$k] = $v; + } + echo "\n"; + break; + default: + echo "\n"; + } + } +} + +/* Special Themes Block */ +if ( $colapse['Group7'] == 'off' ) { + $i = 0; + echo ''; + while ( isset( $newcfg["\$theme[$i]['NAME']"] ) ) { + $k1 = "\$theme[$i]['NAME']"; + $e1 = "theme_name_$i"; + if ( sqgetGlobalVar($e, $v1, SQ_POST) ) { + $v1 = '"' . str_replace( '\"', '"', $v1 ) . '"'; + $v1 = '"' . str_replace( '"', '\"', $v1 ) . '"'; + $newcfg[$k1] = $v1; + } else { + $v1 = $newcfg[$k1]; + } + $k2 = "\$theme[$i]['PATH']"; + $e2 = "theme_path_$i"; + if ( sqgetGlobalVar($e, $v2, SQ_POST) ) { + $v2 = change_to_sm_path($v2); + $newcfg[$k2] = $v2; + } else { + $v2 = $newcfg[$k2]; + } + $name = substr( $v1, 1, strlen( $v1 ) - 2 ); + $path = change_to_rel_path($v2); + echo ''. + "". + "". + "\n"; + $i++; + + } +} + +/* Special Plugins Block */ +if ( $colapse['Group8'] == 'on' ) { + $sw = '(+)'; +} else { + $sw = '(-)'; +} +echo ''; + +if ( $colapse['Group8'] == 'off' ) { + + $plugpath = SM_PATH . 'plugins/'; + if ( file_exists($plugpath) ) { + $fd = opendir( $plugpath ); + $op_plugin = array(); + $p_count = 0; + while (false !== ($file = readdir($fd))) { + if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) { + $op_plugin[] = $file; + $p_count++; + } + } + closedir($fd); + asort( $op_plugin ); + + /* Lets get the plugins that are active */ + $plugins = array(); + if ( sqgetGlobalVar('plg', $v, SQ_POST) ) { + foreach ( $op_plugin as $plg ) { + if ( sqgetGlobalVar("plgs_$plg", $v2, SQ_POST) && $v2 == 'on' ) { + $plugins[] = $plg; + } + } + $i = 0; + foreach ( $plugins as $plg ) { + $k = "\$plugins[$i]"; + $newcfg[$k] = "'$plg'"; + $i++; + } + while ( isset( $newcfg["\$plugins[$i]"] ) ) { + $k = "\$plugins[$i]"; + $newcfg[$k] = ''; + $i++; + } + } else { + $i = 0; + while ( isset( $newcfg["\$plugins[$i]"] ) ) { + $k = "\$plugins[$i]"; + $v = $newcfg[$k]; + $plugins[] = substr( $v, 1, strlen( $v ) - 2 ); + $i++; + } + } + echo ''; + } else { + echo '\n"; + } +} +echo '\n". + '
            '. + _("Configuration Administrator").'
            '. + _("Note: it is recommended that you configure your system using conf.pl, and not this plugin. conf.pl contains additional information regarding the purpose of variables and appropriate values, as well as additional verification steps."). + '
            '. + _("Run or consult conf.pl should you run into difficulty with your configuration."). + '
            $name" . + $defcfg[$k]['value'] . + '
            '. + "". + ''.$sw.' '.$name.'
            $name". + "$v"; + $newcfg[$k] = "'$v'"; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name". + ""; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name"; + echo "'; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name". + "'; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name". + ""; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name". + "'; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name" . + "" . _("Yes") . + "" . _("No"); + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name". + "'; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            $name" . + "$v"; + if ( isset( $defcfg[$k]['comment'] ) ) { + echo '   ' . $defcfg[$k]['comment']; + } + echo "
            ' . _("Theme Name") . + '' . _("Theme Path") . + '
            $i.
            '. + ''. + $sw.' '._("Plugins").'
            '; + foreach ( $op_plugin as $plg ) { + if ( in_array( $plg, $plugins ) ) { + $sw = ' checked="checked"'; + } else { + $sw = ''; + } + echo '\n". + "". + "\n"; + } + echo '
            '; + if (file_exists(SM_PATH . "plugins/$plg/README")) { + echo "$plg"; + } else { + echo $plg; + } + echo "
            '. + sprintf(_("Plugin directory could not be found: %s"), $plugpath). + "

            '. + ''. + _("Test Configuration")."
            '; + +/* + Write the options to the file. +*/ + +if ( $fp = @fopen( $cfgfile, 'w' ) ) { + fwrite( $fp, " $v ) { + if ( $k{0} == '$' && $v <> '' || is_int($v)) { + if ( substr( $k, 1, 11 ) == 'ldap_server' ) { + $v = substr( $v, 0, strlen( $v ) - 1 ) . "\n)"; + $v = str_replace( 'array(', "array(\n\t", $v ); + $v = str_replace( "',", "',\n\t", $v ); + } + fwrite( $fp, "$k = $v;\n" ); + } + } + // add local config support + fwrite( $fp, "@include SM_PATH . 'config/config_local.php';\n" ); + // close php + fwrite( $fp, '?>' ); + fclose( $fp ); +} else { + echo '

            '. + _("Config file can't be opened. Please check config.php."). + '

            '; +} +?> + diff --git a/ehcp/webmail2/plugins/administrator/setup.php b/ehcp/webmail2/plugins/administrator/setup.php new file mode 100644 index 0000000..9447ac8 --- /dev/null +++ b/ehcp/webmail2/plugins/administrator/setup.php @@ -0,0 +1,49 @@ + _("Administration"), + 'url' => '../plugins/administrator/options.php', + 'desc' => _("This module allows administrators to manage SquirrelMail main configuration remotely."), + 'js' => false + ); +} diff --git a/ehcp/webmail2/plugins/bug_report/README b/ehcp/webmail2/plugins/bug_report/README new file mode 100644 index 0000000..ebd02d9 --- /dev/null +++ b/ehcp/webmail2/plugins/bug_report/README @@ -0,0 +1,78 @@ +Bug Reporter Plugin For SquirrelMail + +Need to submit a bug? Need to know valuable system information? Need +to be accurate? This should do it for you. + + +Features +======== + +* You save yourself a lot of typing +* By default, this is not enabled. +* Provides detailed setup information to help diagnose your problem +* Has some warnings that can help out the person submitting the bug report + + +Description +=========== + +When people stumble across a bug, which may happen in a work-in-progress, +often times they would like to help out the software and get rid of the bug. +Sometimes, these people don't know much about the system and how it is set +up -- they know enough to make the bug happen for them. This bug report +plugin is designed to gather all of the non-private information for the user +automatically, so that the user doesn't need to know more than how to trigger +the bug. + + +Future Work +=========== + +* Add more data +* Add more warnings + + +Installation +============ + +NOTE! None of the following is true for this plugin under SquirrelMail +version 1.4.x. All you need to do is enable the plugin in the main +SquirrelMail configuration. +//FIXME: implement the following? Backport it from DEVEL... +You must configure this plugin before you enable it in your SquirrelMail +installation. The plugin's configuration is stored in one of the +following files: + + config/bug_report_config.php + plugins/bug_report/config.php files. + +The default configuration options can be found in (copy this file to +one of the above locations and then edit it to suit you): + + plugins/bug_report/config_default.php + +If both configuration files are present, this plugin uses the one in +the config/ directory. + +By default, the plugin will only be visible to users listed in the +following files: + + plugins/bug_report/admins + config/admins + +... or only to the user that owns the main SquirrelMail configuration +file. Other users can use the bug_report plugin if you set a value for +the administrator's email address in the plugin configuration file and +set $bug_report_allow_users option to TRUE. + +Once the plugin is configured, go back to the main SquirrelMail +directory, run "configure" and enable the plugin. + + +Credits +======= + +This plugin has been originally developed by Tyler Akins and is now +maintained by the SquirrelMail Project Team. + + diff --git a/ehcp/webmail2/plugins/bug_report/bug_report.php b/ehcp/webmail2/plugins/bug_report/bug_report.php new file mode 100644 index 0000000..6e4f09d --- /dev/null +++ b/ehcp/webmail2/plugins/bug_report/bug_report.php @@ -0,0 +1,233 @@ + $value) { + if ($key != 0 || $value != '') { + $str .= " * $key = $value\n"; + } + } + if ($str == '') { + return " * Nothing listed\n"; + } + return $str; +} + +$browscap = ini_get('browscap'); +if(!empty($browscap)) { + $browser = get_browser(); +} + +sqgetGlobalVar('HTTP_USER_AGENT', $HTTP_USER_AGENT, SQ_SERVER); +if ( ! sqgetGlobalVar('HTTP_USER_AGENT', $HTTP_USER_AGENT, SQ_SERVER) ) + $HTTP_USER_AGENT="Browser information is not available."; + +$body_top = "I subscribe to the squirrelmail-users mailing list.\n" . + " [ ] True - No need to CC me when replying\n" . + " [ ] False - Please CC me when replying\n" . + "\n" . + "This bug occurs when I ...\n" . + " ... view a particular message\n" . + " ... use a specific plugin/function\n" . + " ... try to do/view/use ....\n" . + "\n\n\n" . + "The description of the bug:\n\n\n" . + "I can reproduce the bug by:\n\n\n" . + "(Optional) I got bored and found the bug occurs in:\n\n\n" . + "(Optional) I got really bored and here's a fix:\n\n\n" . + "----------------------------------------------\n" . + "\nMy browser information:\n" . + ' '.$HTTP_USER_AGENT . "\n" ; + if(isset($browser)) { + $body_top .= " get_browser() information (List)\n" . + Show_Array((array) $browser); + } + $body_top .= "\nMy web server information:\n" . + " PHP Version " . phpversion() . "\n" . + " PHP Extensions (List)\n" . + Show_Array(get_loaded_extensions()) . + "\nSquirrelMail-specific information:\n" . + " Version: $version\n" . + " Plugins (List)\n" . + Show_Array($plugins); +if (isset($ldap_server) && $ldap_server[0] && ! extension_loaded('ldap')) { + $warning = 1; + $warnings['ldap'] = "LDAP server defined in SquirrelMail config, " . + "but the module is not loaded in PHP"; + $corrections['ldap'][] = "Reconfigure PHP with the option '--with-ldap'"; + $corrections['ldap'][] = "Then recompile PHP and reinstall"; + $corrections['ldap'][] = "-- OR --"; + $corrections['ldap'][] = "Reconfigure SquirrelMail to not use LDAP"; +} + +$body = "\nMy IMAP server information:\n" . + " Server type: $imap_server_type\n"; + +/* check imap server's mapping */ +$imapServerAddress = sqimap_get_user_server($imapServerAddress, $username); + +/* + * add tls:// prefix, if tls is used. + * No need to check for openssl. + * User can't use SquirrelMail if this part is misconfigured + */ +if ($use_imap_tls == true) $imapServerAddress = 'tls://' . $imapServerAddress; + +$imap_stream = fsockopen ($imapServerAddress, $imapPort, $error_number, $error_string); +$server_info = fgets ($imap_stream, 1024); +if ($imap_stream) { + // SUPRESS HOST NAME + $list = explode(' ', $server_info); + $list[2] = '[HIDDEN]'; + $server_info = implode(' ', $list); + $body .= " Server info: $server_info"; + fputs ($imap_stream, "a001 CAPABILITY\r\n"); + $read = fgets($imap_stream, 1024); + $list = explode(' ', $read); + array_shift($list); + array_shift($list); + $read = implode(' ', $list); + $body .= " Capabilities: $read"; + fputs ($imap_stream, "a002 LOGOUT\r\n"); + fclose($imap_stream); +} else { + $body .= " Unable to connect to IMAP server to get information.\n"; + $warning = 1; + $warnings['imap'] = "Unable to connect to IMAP server"; + $corrections['imap'][] = "Make sure you specified the correct mail server"; + $corrections['imap'][] = "Make sure the mail server is running IMAP, not POP"; + $corrections['imap'][] = "Make sure the server responds to port $imapPort"; +} +$warning_html = ''; +$warning_num = 0; +if (isset($warning) && $warning) { + foreach ($warnings as $key => $value) { + if ($warning_num == 0) { + $body_top .= "WARNINGS WERE REPORTED WITH YOUR SETUP:\n"; + $body_top = "WARNINGS WERE REPORTED WITH YOUR SETUP -- SEE BELOW\n\n$body_top"; + $warning_html = "

            Warnings were reported with your setup:

            \n
            \n"; + } + $warning_num ++; + $warning_html .= "
            $value
            \n"; + $body_top .= "\n$value\n"; + foreach ($corrections[$key] as $corr_val) { + $body_top .= " * $corr_val\n"; + $warning_html .= "
            * $corr_val
            \n"; + } + } + $warning_html .= "
            \n

            $warning_num warning(s) reported.

            \n
            \n"; + $body_top .= "\n$warning_num warning(s) reported.\n"; + $body_top .= "----------------------------------------------\n"; +} + +$body = htmlspecialchars($body_top . $body); + +?> +
            + + '._("Submit a Bug Report").'','center',$color[0]); ?> +
            + +'; +echo _("Before you send your bug report, please make sure to check this checklist for any common problems."); +echo "

            \n"; + +echo '
              '; +echo '
            • '; +printf(_("Make sure that you are running the most recent copy of %s. You are currently using version %s."), 'SquirrelMail', $version); +echo "
            • \n"; + +echo '
            • '; +printf(_("Check to see if your bug is already listed in the %sBug List%s on SourceForge. If it is, we already know about it and are trying to fix it."), '', ''); +echo "
            • \n"; + +echo '
            • '; +echo _("Try to make sure that you can repeat it. If the bug happens sporatically, try to document what you did when it happened. If it always occurs when you view a specific message, keep that message around so maybe we can see it."); +echo "
            • \n"; + +echo '
            • '; +printf(_("If there were warnings displayed above, try to resolve them yourself. Read the guides in the %s directory where SquirrelMail was installed."), 'doc/'); +echo "
            • \n"; +echo "
            \n"; + +echo '

            '; +echo _("Pressing the button below will start a mail message to the developers of SquirrelMail that will contain a lot of information about your system, your browser, how SquirrelMail is set up, and your IMAP server. It will also prompt you for information. Just fill out the sections at the top. If you like, you can scroll down in the message to see what else is being sent."); +echo "

            \n"; + +echo '

            '; +echo _("Please make sure to fill out as much information as you possibly can to give everyone a good chance of finding and removing the bug. Submitting your bug like this will not have it automatically added to the bug list on SourceForge, but someone who gets your message may add it for you."); +echo "

            \n"; +?> +
            + + + + + + + +
            + +
            + +
            +
            + + diff --git a/ehcp/webmail2/plugins/bug_report/functions.php b/ehcp/webmail2/plugins/bug_report/functions.php new file mode 100644 index 0000000..675f68d --- /dev/null +++ b/ehcp/webmail2/plugins/bug_report/functions.php @@ -0,0 +1,56 @@ + 'bug_report_visible', + 'caption' => _("Show button in toolbar"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_ALL, + 'initial_value' => false + ); + $optpage_data['vals']['bug_report'] = $optionValues; +} + + diff --git a/ehcp/webmail2/plugins/bug_report/index.php b/ehcp/webmail2/plugins/bug_report/index.php new file mode 100644 index 0000000..00e30c7 --- /dev/null +++ b/ehcp/webmail2/plugins/bug_report/index.php @@ -0,0 +1,18 @@ +, +and is now maintained by the SquirrelMail Project Team. diff --git a/ehcp/webmail2/plugins/calendar/calendar.php b/ehcp/webmail2/plugins/calendar/calendar.php new file mode 100644 index 0000000..4c245e2 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/calendar.php @@ -0,0 +1,180 @@ +<< ".($year-1)."" + ) . "\n". + html_tag( 'th', + "< " . + date_intl( 'M', $prev_date). "" + ) . "\n". + html_tag( 'th', date_intl( 'F Y', $act_date ), '', $color[0], 'colspan="3"') . + html_tag( 'th', + "" . + date_intl( 'M', $next_date) . " >" + ) . "\n". + html_tag( 'th', + "".($year+1)." >>" + ) + ) . "\n". + html_tag( 'tr', + html_tag( 'th', _("Sunday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Monday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Tuesday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Wednesday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Thursday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Friday"), '', $color[5], 'width="14%"' ) ."\n" . + html_tag( 'th', _("Saturday"), '', $color[5], 'width="14%"' ) ."\n" + ) + ) , + '', $color[0] ) ."\n"; +} + +/** + * main logic for month view of calendar + * @return void + * @access private + */ +function drawmonthview() { + global $year, $month, $color, $calendardata, $todayis; + + $aday = 1 - date('w', mktime(0, 0, 0, $month, 1, $year)); + $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year)); + while ($aday <= $days_in_month) { + echo html_tag( 'tr' ); + for ($j=1; $j<=7; $j++) { + $cdate="$month"; + ($aday<10)?$cdate=$cdate."0$aday":$cdate=$cdate."$aday"; + $cdate=$cdate."$year"; + if ( $aday <= $days_in_month && $aday > 0){ + echo html_tag( 'td', '', 'left', $color[4], 'height="50" valign="top"' ) ."\n". + html_tag( 'div', '', 'right' ); + echo(($cdate==$todayis) ? '[ ' . _("TODAY") . " ] " : ''); + echo "$aday
            "; + } else { + echo html_tag( 'td', '', 'left', $color[0]) ."\n". + " "; + } + if (isset($calendardata[$cdate])){ + $i=0; + while ($calfoo = each($calendardata[$cdate])) { + $calbar = $calendardata[$cdate][$calfoo['key']]; + // FIXME: how to display multiline task + $title = '['. $calfoo['key']. '] ' . + str_replace(array("\r","\n"),array(' ',' '),htmlspecialchars($calbar['message'])); + // FIXME: link to nowhere + echo "".htmlspecialchars($calbar['title'])."
            \n"; + $i=$i+1; + if($i==2){ + break; + } + } + } + echo "\n\n"; + $aday++; + } + echo ''; + } +} + +/** + * end of monthly view and form to jump to any month and year + * @return void + * @access private + */ +function endcalendar() { + global $year, $month, $day, $color; + + echo html_tag( 'tr' ) ."\n" . + html_tag( 'td', '', 'left', '', 'colspan="7"' ) ."\n" . + "
            \n". + " \n". + " \n". + ' \n". + "
            \n". + " \n". + "\n"; +} + + +if( !isset( $month ) || $month <= 0){ + $month = date( 'm' ); +} +if( !isset($year) || $year <= 0){ + $year = date( 'Y' ); +} +if( !isset($day) || $day <= 0){ + $day = date( 'd' ); +} + +$todayis = date( 'mdY' ); +$calself=basename($PHP_SELF); + +displayPageHeader($color, 'None'); +calendar_header(); +readcalendardata(); +startcalendar(); +drawmonthview(); +endcalendar(); + +?> + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/calendar_data.php b/ehcp/webmail2/plugins/calendar/calendar_data.php new file mode 100644 index 0000000..4894320 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/calendar_data.php @@ -0,0 +1,185 @@ +','
            ','|'),array("\n","\n",'|'),$string); + return $string; +} + +/** + * Callback function used to sanitize calendar data before saving it to file + * @param string $sValue array value + * @param string $sKey array key + * @access private + * @since 1.5.1 and 1.4.7 + */ +function calendar_encodedata(&$sValue, $sKey) { + /** + * add html line breaks + * remove original ASCII line feeds and carriage returns + * replace ASCII vertical bar with html code in order to sanitize field delimiter + */ + $sValue = str_replace(array("\n","\r",'|'),array('','','|'),nl2br($sValue)); +} + +/** + * read events into array + * + * data is | delimited, just like addressbook + * files are structured like this: + * date|time|length|priority|title|message + * files are divided by year for performance increase + */ +function readcalendardata() { + global $calendardata, $username, $data_dir, $year; + + $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); + + if (file_exists($filename)){ + $fp = fopen ($filename,'r'); + + if ($fp){ + while ($fdata = fgetcsv ($fp, 4096, '|')) { + $calendardata[$fdata[0]][$fdata[1]] = array( 'length' => $fdata[2], + 'priority' => $fdata[3], + 'title' => str_replace("\n",' ',calendar_readmultiline($fdata[4])), + 'message' => calendar_readmultiline($fdata[5]), + 'reminder' => $fdata[6] ); + } + fclose ($fp); + // this is to sort the events within a day on starttime + $new_calendardata = array(); + foreach($calendardata as $day => $data) { + ksort($data, SORT_NUMERIC); + $new_calendardata[$day] = $data; + } + $calendardata = $new_calendardata; + } + } +} + +/** + * Saves calendar data + * @return void + * @access private + */ +function writecalendardata() { + global $calendardata, $username, $data_dir, $year, $color; + + $filetmp = getHashedFile($username, $data_dir, "$username.$year.cal.tmp"); + $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); + $fp = fopen ($filetmp,"w"); + if ($fp) { + while ( $calfoo = each ($calendardata)) { + while ( $calbar = each ($calfoo['value'])) { + $calfoobar = $calendardata[$calfoo['key']][$calbar['key']]; + array_walk($calfoobar,'calendar_encodedata'); + /** + * Make sure that reminder field is set. Calendar forms don't implement it, + * but it is still used for calendar data. Backwards compatibility. + */ + if (!isset($calfoobar['reminder'])) $calfoobar['reminder']=''; + + $calstr = "$calfoo[key]|$calbar[key]|$calfoobar[length]|$calfoobar[priority]|$calfoobar[title]|$calfoobar[message]|$calfoobar[reminder]\n"; + if(sq_fwrite($fp, $calstr, 4096) === FALSE) { + error_box(_("Could not write calendar file %s", "$username.$year.cal.tmp"), $color); + } + } + + } + fclose ($fp); + @unlink($filename); + rename($filetmp,$filename); + } +} + +/** + * deletes event from file + * @return void + * @access private + */ +function delete_event($date, $time) { + global $calendardata, $username, $data_dir, $year; + + $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); + $fp = fopen ($filename,'r'); + if ($fp){ + while ($fdata = fgetcsv ($fp, 4096, "|")) { + if (($fdata[0]==$date) && ($fdata[1]==$time)){ + // do nothing + } else { + $calendardata[$fdata[0]][$fdata[1]] = array( 'length' => $fdata[2], + 'priority' => $fdata[3], + 'title' => $fdata[4], + 'message' => $fdata[5], + 'reminder' => $fdata[6] ); + } + } + fclose ($fp); + } + writecalendardata(); +} + +/** + * same as delete but does not save calendar + * saving is done inside event_edit.php + * @return void + * @access private + * @todo code reuse + */ +function update_event($date, $time) { + global $calendardata, $username, $data_dir, $year; + + $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); + $fp = fopen ($filename,'r'); + if ($fp){ + while ($fdata = fgetcsv ($fp, 4096, '|')) { + if (($fdata[0]==$date) && ($fdata[1]==$time)){ + // do nothing + } else { + $calendardata[$fdata[0]][$fdata[1]] = array( 'length' => $fdata[2], + 'priority' => $fdata[3], + 'title' => $fdata[4], + 'message' => $fdata[5], + 'reminder' => $fdata[6] ); + } + } + fclose ($fp); + } +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/day.php b/ehcp/webmail2/plugins/calendar/day.php new file mode 100644 index 0000000..2617480 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/day.php @@ -0,0 +1,180 @@ +< ". + date_intl('D',$prev_date)."", + 'left' ) . + html_tag( 'th', date_intl( _("l, F j Y"), mktime(0, 0, 0, $month, $day, $year)) , + '', '', 'width="75%"' ) . + html_tag( 'th', + "". + date_intl('D',$next_date)." >" , + 'right' ) + ); +} + +/** + * events for specific day are inserted into "daily" array + * @return void + * @access private + */ +function initialize_events() { + global $daily_events, $calendardata, $month, $day, $year; + + for ($i=7;$i<23;$i++){ + if ($i<10){ + $evntime = '0' . $i . '00'; + } else { + $evntime = $i . '00'; + } + $daily_events[$evntime] = 'empty'; + } + + $cdate = $month . $day . $year; + + if (isset($calendardata[$cdate])){ + while ( $calfoo = each($calendardata[$cdate])){ + $daily_events["$calfoo[key]"] = $calendardata[$cdate][$calfoo['key']]; + } + } +} + +/** + * main loop for displaying daily events + * @return void + * @access private + */ +function display_events() { + global $daily_events, $month, $day, $year, $color; + + ksort($daily_events,SORT_STRING); + $eo=0; + while ($calfoo = each($daily_events)){ + if ($eo==0){ + $eo=4; + } else { + $eo=0; + } + + $ehour = substr($calfoo['key'],0,2); + $eminute = substr($calfoo['key'],2,2); + if (!is_array($calfoo['value'])){ + echo html_tag( 'tr', + html_tag( 'td', $ehour . ':' . $eminute, 'left' ) . + html_tag( 'td', ' ', 'left' ) . + html_tag( 'td', + "". + _("ADD") . "" , + 'center' ) , + '', $color[$eo]); + + } else { + $calbar=$calfoo['value']; + if ($calbar['length']!=0){ + $elength = '-'.date_intl(_("H:i"),mktime($ehour,$eminute+$calbar['length'],0,1,1,0)); + } else { + $elength=''; + } + echo html_tag( 'tr', '', '', $color[$eo] ) . + html_tag( 'td', date_intl(_("H:i"),mktime($ehour,$eminute,0,1,1,0)) . $elength, 'left' ) . + html_tag( 'td', '', 'left' ) . '['; + echo ($calbar['priority']==1) ? + "".htmlspecialchars($calbar['title']).'' : + htmlspecialchars($calbar['title']); + echo']
            '.nl2br(htmlspecialchars($calbar['message'])).'
            ' . + html_tag( 'td', + "\n" . + "". + _("EDIT") . " | \n" . + "" . + _("DEL") . '' . + "\n" , + 'center' ); + } + } +} +/* end of day functions */ + +if ($month <= 0){ + $month = date( 'm'); +} +if ($year <= 0){ + $year = date( 'Y'); +} +if ($day <= 0){ + $day = date( 'd'); +} + +$prev_date = mktime(0, 0, 0, $month , $day - 1, $year); +$next_date = mktime(0, 0, 0, $month , $day + 1, $year); +$prev_day = date ('d',$prev_date); +$prev_month = date ('m',$prev_date); +$prev_year = date ('Y',$prev_date); +$next_day = date ('d',$next_date); +$next_month = date ('m',$next_date); +$next_year = date ('Y',$next_date); + +$calself=basename($PHP_SELF); + +$daily_events = array(); + +displayPageHeader($color, 'None'); +calendar_header(); +readcalendardata(); +day_header(); +initialize_events(); +display_events(); +?> + + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/event_create.php b/ehcp/webmail2/plugins/calendar/event_create.php new file mode 100644 index 0000000..caf0538 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/event_create.php @@ -0,0 +1,179 @@ +\n". + " \n". + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Start time:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "\n" . + " \n" . + "  : \n" . + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Length:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "\n" . + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Priority:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "\n" . + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Title:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "\n" . + "
            \n". + " \n". + html_tag( 'tr', + html_tag( 'td', + "" , + 'left', $color[4], 'colspan="2"' ) + ) ."\n" . + html_tag( 'tr', + html_tag( 'td', + '' , + 'left', $color[4], 'colspan="2"' ) + ) ."\n"; + echo "\n"; +} + + +if ( !isset($month) || $month <= 0){ + $month = date( 'm' ); +} +if ( !isset($year) || $year <= 0){ + $year = date( 'Y' ); +} +if (!isset($day) || $day <= 0){ + $day = date( 'd' ); +} +if (!isset($hour) || $hour <= 0){ + $hour = '08'; +} + +$calself=basename($PHP_SELF); + + +displayPageHeader($color, 'None'); +//load calendar menu +calendar_header(); + +echo html_tag( 'tr', '', '', $color[0] ) . + html_tag( 'td', '', 'left' ) . + html_tag( 'table', '', '', $color[0], 'width="100%" border="0" cellpadding="2" cellspacing="1"' ) . + html_tag( 'tr', + html_tag( 'td', date_intl( _("l, F j Y"), mktime(0, 0, 0, $month, $day, $year)), 'left', '', 'colspan="2"' ) + ); +//if form has not been filled in +if(!isset($event_text)){ + show_event_form(); +} else { + readcalendardata(); + $calendardata["$month$day$year"]["$event_hour$event_minute"] = + array( 'length' => $event_length, + 'priority' => $event_priority, + 'title' => $event_title, + 'message' => $event_text, + 'reminder' => '' ); + //save + writecalendardata(); + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'th', _("Event Has been added!") . "
            \n", '', $color[4], 'colspan="2"' ) + ) . + html_tag( 'tr', + html_tag( 'td', _("Date:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', date_intl(_("m/d/Y"),mktime(0,0,0,$month,$day,$year)), 'left', $color[4] ) . "\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Time:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', date_intl(_("H:i"),mktime($event_hour,$event_minute,0,$month,$day,$year)), 'left', $color[4] ) . "\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Title:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', htmlspecialchars($event_title,ENT_NOQUOTES), 'left', $color[4] ) . "\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Message:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', nl2br(htmlspecialchars($event_text,ENT_NOQUOTES)), 'left', $color[4] ) . "\n" + ) . + html_tag( 'tr', + html_tag( 'td', + "" . _("Day View") . "\n" , + 'left', $color[4], 'colspan="2"' ) . "\n" + ) , + '', $color[0], 'width="100%" border="0" cellpadding="2" cellspacing="1"' ) ."\n"; +} + +?> + + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/event_delete.php b/ehcp/webmail2/plugins/calendar/event_delete.php new file mode 100644 index 0000000..c8d205a --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/event_delete.php @@ -0,0 +1,148 @@ +', '', $color[4], 'colspan="2"' ) + ) . + html_tag( 'tr', + html_tag( 'td', _("Date:"), 'right', $color[4] ) . + html_tag( 'td', date_intl(_("m/d/Y"),mktime(0,0,0,$dmonth,$dday,$dyear)), 'left', $color[4] ) + ) . + html_tag( 'tr', + html_tag( 'td', _("Time:"), 'right', $color[4] ) . + html_tag( 'td', date_intl(_("H:i"),mktime($dhour,$dminute,0,$dmonth,$dday,$dyear)), 'left', $color[4] ) + ) . + html_tag( 'tr', + html_tag( 'td', _("Title:"), 'right', $color[4] ) . + html_tag( 'td', htmlspecialchars($tmparray['title']), 'left', $color[4] ) + ) . + html_tag( 'tr', + html_tag( 'td', _("Message:"), 'right', $color[4] ) . + html_tag( 'td', nl2br(htmlspecialchars($tmparray['message'])), 'left', $color[4] ) + ) . + html_tag( 'tr', + html_tag( 'td', + "
            \n". + " \n". + " \n". + " \n". + " \n". + " \n". + " \n". + " \n". + " \n". + " \n". + ' \n". + "
            \n" , + 'right', $color[4] ) . + html_tag( 'td', + "
            \n". + " \n". + " \n". + " \n". + ' \n". + "
            \n" , + 'left', $color[4] ) + ) , + '', $color[0], 'border="0" cellpadding="2" cellspacing="1"' ); +} + +if ($month <= 0){ + $month = date( 'm' ); +} +if ($year <= 0){ + $year = date( 'Y' ); +} +if ($day <= 0){ + $day = date( 'd' ); +} + +$calself=basename($PHP_SELF); + +displayPageHeader($color, 'None'); +//load calendar menu +calendar_header(); + +echo html_tag( 'tr', '', '', $color[0] ) . + html_tag( 'td' ) . + html_tag( 'table', '', '', $color[0], 'width="100%" border="0" cellpadding="2" cellspacing="1"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'left' ) . + date_intl( _("l, F j Y"), mktime(0, 0, 0, $month, $day, $year)); +if (isset($dyear) && isset($dmonth) && isset($dday) && isset($dhour) && isset($dminute)){ + if (isset($confirmed)){ + delete_event("$dmonth$dday$dyear", "$dhour$dminute"); + echo '

            ' . _("Event deleted!") . "
            \n"; + echo "" . + _("Day View") . "\n"; + } else { + readcalendardata(); + confirm_deletion(); + } +} else { + echo '
            ' . _("Nothing to delete!"); +} + +?> + + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/event_edit.php b/ehcp/webmail2/plugins/calendar/event_edit.php new file mode 100644 index 0000000..a42d024 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/event_edit.php @@ -0,0 +1,312 @@ +\n". + $tab . addHidden('year',$year). + $tab . addHidden('month',$month). + $tab . addHidden('day',$day). + $tab . addHidden('hour',$hour). + $tab . addHidden('minute',$minute). + $tab . addHidden('updated','yes'). + html_tag( 'tr' ) . + html_tag( 'td', _("Date:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + " \n" . + "   \n" . + " \n". + "   \n". + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Time:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + " \n". + "  : \n". + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Length:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Priority:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + " \n". + " \n". + html_tag( 'tr' ) . + html_tag( 'td', _("Title:"), 'right', $color[4] ) . "\n" . + html_tag( 'td', addInput('event_title',$tmparray['title'],30,50), 'left', $color[4]) . + "\n\n". + html_tag( 'tr' ) . + html_tag( 'td', addTextArea('event_text',$tmparray['message'],$editor_size,5), + 'left', $color[4], 'colspan="2"' ) . + '' . html_tag( 'tr' ) . + html_tag( 'td', addSubmit(_("Update Event"),'send'), 'left', $color[4], 'colspan="2"' ) . + "\n"; +} + +/** + * Confirms event update + * @return void + * @access private + */ +function confirm_update() { + global $calself, $year, $month, $day, $hour, $minute, $calendardata, + $color, $event_year, $event_month, $event_day, $event_hour, + $event_minute, $event_length, $event_priority, $event_title, $event_text; + + $tmparray = $calendardata["$month$day$year"]["$hour$minute"]; + $tab = ' '; + + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'th', _("Do you really want to change this event from:") . "
            \n", '', $color[4], 'colspan="2"' ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Date:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', date_intl(_("m/d/Y"),mktime(0,0,0,$month,$day,$year)), 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Time:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', date_intl(_("H:i"),mktime($hour,$minute,0,$month,$day,$year)) , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Priority:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', $tmparray['priority'] , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Title:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', htmlspecialchars($tmparray['title']) , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Message:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', nl2br(htmlspecialchars($tmparray['message'])) , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'th', _("to:") . "
            \n", '', $color[4], 'colspan="2"' ) ."\n" + ) . + + html_tag( 'tr', + html_tag( 'td', _("Date:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', date_intl(_("m/d/Y"),mktime(0,0,0,$event_month,$event_day,$event_year)), 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Time:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', date_intl(_("H:i"),mktime($event_hour,$event_minute,0,$event_month,$event_day,$event_year)), 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Priority:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', $event_priority , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Title:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', htmlspecialchars($event_title) , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', _("Message:") , 'right', $color[4] ) ."\n" . + html_tag( 'td', nl2br(htmlspecialchars($event_text)) , 'left', $color[4] ) ."\n" + ) . + html_tag( 'tr', + html_tag( 'td', + "
            \n". + $tab . addHidden('year',$year). + $tab . addHidden('month',$month). + $tab . addHidden('day',$day). + $tab . addHidden('hour',$hour). + $tab . addHidden('minute',$minute). + $tab . addHidden('event_year',$event_year). + $tab . addHidden('event_month',$event_month). + $tab . addHidden('event_day',$event_day). + $tab . addHidden('event_hour',$event_hour). + $tab . addHidden('event_minute',$event_minute). + $tab . addHidden('event_priority',$event_priority). + $tab . addHidden('event_length',$event_length). + $tab . addHidden('event_title',$event_title). + $tab . addHidden('event_text',$event_text). + $tab . addHidden('updated','yes'). + $tab . addHidden('confirmed','yes'). + $tab . addSubmit(_("Yes")). + "
            \n" , + 'right', $color[4] ) ."\n" . + html_tag( 'td', + "
            \n". + $tab . addHidden('year',$year). + $tab . addHidden('month',$month). + $tab . addHidden('day',$day). + $tab . addSubmit(_("No")). + "
            \n" , + 'left', $color[4] ) ."\n" + ) , + '', $color[0], 'border="0" cellpadding="2" cellspacing="1"' ); +} + +if ($month <= 0){ + $month = date( 'm' ); +} +if ($year <= 0){ + $year = date( 'Y' ); +} +if ($day <= 0){ + $day = date( 'd' ); +} +if ($hour <= 0){ + $hour = '08'; +} + +$calself=basename($PHP_SELF); + +displayPageHeader($color, 'None'); +//load calendar menu +calendar_header(); + +echo html_tag( 'tr', '', '', $color[0] ) . + html_tag( 'td', '', 'left' ) . + html_tag( 'table', '', '', $color[0], 'width="100%" border="0" cellpadding="2" cellspacing="1"' ) . + html_tag( 'tr' ) . + html_tag( 'td', + date_intl( _("l, F j Y"), mktime(0, 0, 0, $month, $day, $year)) , + 'left', '', 'colspan="2"' ); +if (!isset($updated)){ + //get changes to event + readcalendardata(); + update_event_form(); +} else { + if (!isset($confirmed)){ + //confirm changes + readcalendardata(); + confirm_update(); + } else { + update_event("$month$day$year", "$hour$minute"); + echo html_tag( 'tr', + html_tag( 'td', _("Event updated!"), 'left' ) + ) . "\n"; + echo html_tag( 'tr', + html_tag( 'td', + "" . + _("Day View") ."", + 'left' ) + ) . "\n"; + + $fixdate = date( 'mdY', mktime(0, 0, 0, $event_month, $event_day, $event_year)); + //if event has been moved to different year then act accordingly + if ($year==$event_year){ + $calendardata["$fixdate"]["$event_hour$event_minute"] = array('length' => $event_length, + 'priority' => $event_priority, + 'title' => $event_title, + 'message' => $event_text); + writecalendardata(); + } else { + writecalendardata(); + $year=$event_year; + $calendardata = array(); + readcalendardata(); + $calendardata["$fixdate"]["$event_hour$event_minute"] = array('length' => $event_length, + 'priority' => $event_priority, + 'title' => $event_title, + 'message' => $event_text); + writecalendardata(); + } + } +} + +?> + + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/functions.php b/ehcp/webmail2/plugins/calendar/functions.php new file mode 100644 index 0000000..a6144aa --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/functions.php @@ -0,0 +1,192 @@ +'; + +} + +/** + * Generates html option tags with length values + * + * Hardcoded values from 0 minutes to 6 hours + * @param integer $selected selected option length + * @return void + */ +function select_option_length($selected) { + $eventlength = array( + '0' => _("0 min."), + '15' => _("15 min."), + '30' => _("30 min."), + '45' => _("45 min."), + '60' => _("1 hr."), + '90' => _("1.5 hr."), + '120' => _("2 hr."), + '150' => _("2.5 hr."), + '180' => _("3 hr."), + '210' => _("3.5 hr."), + '240' => _("4 hr."), + '300' => _("5 hr."), + '360' => _("6 hr.") + ); + + while( $bar = each($eventlength)) { + if($bar['key']==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with minute values + * + * Hardcoded values in 5 minute intervals + * @param integer $selected selected value + * @return void + */ +function select_option_minute($selected) { + $eventminute = array( + '00'=>'00', + '05'=>'05', + '10'=>'10', + '15'=>'15', + '20'=>'20', + '25'=>'25', + '30'=>'30', + '35'=>'35', + '40'=>'40', + '45'=>'45', + '50'=>'50', + '55'=>'55' + ); + + while ( $bar = each($eventminute)) { + if ($bar['key']==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with hour values + * @param integer $selected selected value + * @return void + * @todo 12/24 hour format + */ +function select_option_hour($selected) { + + for ($i=0;$i<24;$i++){ + ($i<10)? $ih = "0" . $i : $ih = $i; + if ($ih==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with priority values + * @param integer $selected selected value + * @return void + */ +function select_option_priority($selected) { + $eventpriority = array( + '0' => _("Normal"), + '1' => _("High"), + ); + + while( $bar = each($eventpriority)) { + if($bar['key']==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with year values + * + * Hardcoded values from 1902 to 2037 + * @param integer $selected selected value + * @return void + */ +function select_option_year($selected) { + + for ($i=1902;$i<2038;$i++){ + if ($i==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with month values + * @param integer $selected selected value + * @return void + */ +function select_option_month($selected) { + + for ($i=1;$i<13;$i++){ + $im=date('m',mktime(0,0,0,$i,1,1)); + $is = getMonthAbrv( date('m',mktime(0,0,0,$i,1,1)) ); + if ($im==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +/** + * Generates html option tags with day of month values + * + * Hardcoded values from 1 to 31 + * @param integer $selected selected value + * @return void + */ +function select_option_day($selected) { + + for ($i=1;$i<32;$i++){ + ($i<10)? $ih="0".$i : $ih=$i; + if ($i==$selected){ + echo ' \n"; + } else { + echo ' \n"; + } + } +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/index.php b/ehcp/webmail2/plugins/calendar/index.php new file mode 100644 index 0000000..94945f8 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/calendar/setup.php b/ehcp/webmail2/plugins/calendar/setup.php new file mode 100644 index 0000000..c83b9e3 --- /dev/null +++ b/ehcp/webmail2/plugins/calendar/setup.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/compatibility/README b/ehcp/webmail2/plugins/compatibility/README new file mode 100644 index 0000000..3916cf6 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/README @@ -0,0 +1 @@ +Please see all documentation in the docs/ directory. diff --git a/ehcp/webmail2/plugins/compatibility/docs/.htaccess b/ehcp/webmail2/plugins/compatibility/docs/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/docs/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/plugins/compatibility/docs/COPYING b/ehcp/webmail2/plugins/compatibility/docs/COPYING new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/docs/COPYING @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/webmail2/plugins/compatibility/docs/INSTALL b/ehcp/webmail2/plugins/compatibility/docs/INSTALL new file mode 100644 index 0000000..8cd0190 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/docs/INSTALL @@ -0,0 +1,49 @@ +Installing the Compatibility Plugin +=================================== + +1) Untar the file into the plugins directory. Here is an example + for the 1.0 version of the compatibility plugin. + + $ cd plugins + $ tar -zxvf compatibility-1.0.tar.gz + +2) If you use SquirrelMail version 1.5.1 or greater or SquirrelMail + version 1.4.13 or greater, skip to step 4. + +3) Patch your SquirrelMail source code - a new plugin hook + is necessary for this plugin, and it can easily be added + to most SquirrelMail versions. Make sure you use the + patch file that pertains to your version of SquirrelMail. + The patch command can be run from the compatibility plugin + directory: + + $ patch -p0 < patches/compatibility_patch-1.4.4.diff + + Note for Windows users: you can get native patch functionality + by installing this very useful package: + http://unxutils.sourceforge.net/ + + If you need a patch for an older version of SquirrelMail, first + ask yourself why you cannot upgrade (there are security issues + at stake), then email and we can put one together for you. + +4) You do *NOT* need to enable this plugin using conf.pl, since + it has no functionality in and of itself. However, if you + use the Plugin Updates plugin, you do need to enable this + plugin in order to see it on the Plugin Updates page: + + ---------- optional ---------- + + Go to your config directory and run conf.pl. Choose option + 8 and add the compatibility plugin. Save and exit. + + $ cd ../../config + $ ./conf.pl + + ---------- optional ---------- + +5) Translations are not included in this package. To get a + translation, download the language pack needed from: + + http://www.squirrelmail.org/download.php + diff --git a/ehcp/webmail2/plugins/compatibility/docs/README b/ehcp/webmail2/plugins/compatibility/docs/README new file mode 100644 index 0000000..8ef96c0 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/docs/README @@ -0,0 +1,401 @@ +Compatibility plugin for SquirrelMail +===================================== +Ver 2.0.15, 2009/10/31 + + +Copyright (c) 2004-2009 Paul Lesniewski + + + +Description +=========== + +This plugin allows any other plugin access to the functions +and special variables needed to make it backward (and forward) +compatible with most versions of SM in wide use. This eliminates +the need for duplication of certain functions throughout many plugins. + +It also provides functionality that helps check that plugins +have been installed and set up correctly. + + + +License +======= + +This plugin is released under the GNU General Public +License (see the file COPYING for details). + + + +Donations +========= + +If you or your company make regular use of this software, please +consider supporting Open Source development by donating to the authors +or inquire about hiring them to consult on other projects. Donation/ +wish list links for the author(s) are as follows: + +Paul Lesniewski: https://sourceforge.net/donate/index.php?user_id=508228 + + + +Requirements +============ + + * None + + + +Troubleshooting +=============== + + * If you experience errors that look similar to the following: + + Fatal error: Call to undefined function php_self() in .../compatibility/includes/1.5.0/global.php on line 25 + + You have a plugin installed that requires version 1.x of the + Compatibility plugin. There is a list of plugins that have + this requirement here: + + http://www.squirrelmail.org/wiki/CompatibilityDependencies + + Note that you generally cannot use plugins that require + Compatibility 1.x with ones that require Compatibility 2.x. + The best approach to solving this problem is to contact the + plugin author of the outdated plugin and work with them to + update that code. + + + +Help Requests +============= + +Before looking for help elsewhere, please try to help yourself: + + * Read the Troubleshooting section herein. + + * Look to see if others have already asked about the same issue. + There are tips and links for the best places to do this in + the SquirrelMail mailing list posting guidelines: + http://squirrelmail.org/wiki/MailingListPostingGuidelines + You should also try Google or some other search engine. + + * If you cannot find any information about your issue, please + first mail your help request to the squirrelmail-plugins + mailing list. Information about it can be found here: + http://lists.sourceforge.net/mailman/listinfo/squirrelmail-plugins + You MUST read the mailing list posting guidelines (see above) + and include as much information about your issue (and your + system) as possible. Including configtest output, any debug + output, the plugin configuration settings you've made and + anything else you can think of to make it easier to diagnose + your problem will get you the most useful responses. Inquiries + that do not comply with the posting guidelines are liable to + be ignored. + + * If you don't get any replies on the mailing list, you are + welcome to send a help request to the authors' personal + address(es), but please be patient with the mailing list. + + + +Usage (Plugin Authors' Guide) +============================= + +As of version 2.0 of this plugin, no special action is required +on the part of plugin developers to make their plugin backward +compatible via the Compatibility Plugin. However, any custom pages +(such as option pages) provided by a plugin should always start +with the following code: + + + // set up SquirrelMail environment + // + if (file_exists('../../include/init.php')) + include_once('../../include/init.php'); + else if (file_exists('../../include/validate.php')) + { + define('SM_PATH', '../../'); + include_once(SM_PATH . 'include/validate.php'); + } + else + { + chdir('..'); + define('SM_PATH', '../'); + include_once(SM_PATH . 'src/validate.php'); + } + + + // make sure plugin is activated! + // + global $plugins; + if (!in_array('plugin_name', $plugins)) + exit; + + +Otherwise, developers should just use the most up-to-date SquirrelMail +API and expect that their plugins will in most cases work with most +versions of SquirrelMail as long as users of older versions have +downloaded this plugin and applied its patch if necessary. If a +function is found that a certain plugin uses that is not included +in the Compatibility Plugin, please ask to have it added. + +Authors who want to avoid getting support requests for simple setup +problems (such as when the person installing the plugin neglects to +create a configuration file) can use one of these functionalities: + + load_config('my_plugin', array('config.php')); + + check_plugin_setup('my_plugin', array('config.php')); + +The first of these functions will load (include) any and all +configuration files given (in the order given) and will trigger an +error (that is a bit more helpful for novice administrators who can't +find or understand PHP errors) if none of them are found. + +The second function checks for the existence of any configuration +files you specify (it does not load (include) them, however - this +function is only intended as a configuration test. It can be handy +in combination with the "configtest" hook which is available in +SquirrelMail 1.4.10 and above and 1.5.2 and above. + +The first parameter for both of these functions is the name of the +plugin as it is known to SquirrelMail (the plugin's directory name). +The second parameter is an array of any number of files, relative to +the plugin's directory (or a full path, if it starts with a forward +slash, such as "/var/lib/squirrelmail/config/myplugin.conf"). Any +number of files may be named here. Another example for each: + + load_config('my_plugin', array('data/config-default.php', 'data/config.php')); + + check_plugin_setup('my_plugin', array('data/config.php', 'data/admins.php')); + +Note that load_config() is designed to allow you to do things such +as include a default configuration in case the administrator did +not create her own configuration file, or to include a full set of +default configuration settings, and another file that contains just +a sub-set thereof, etc. Keep in mind that files are loaded/included +in the order given. + +Note that check_plugin_setup() is best placed somewhere where it will +not run frequently, since it is only really needed once (thus, in +SquirrelMail versions 1.4.10 and 1.5.2 and above, use it with the +"configtest" hook). You may turn off that function by changing the +$disable_config_check at the top of the functions.php file in the +Compatibility Plugin. + +A function called check_file_contents() is also available for plugins +that would like to check if the SquirrelMail source code has been +properly patched if needed by that plugin. See that function's +documentation in the functions.php file for more information if needed. + +There are also some advanced utility functions for use by plugins needing +to add, remove or re-order other plugins (or themselves) called add_plugin(), +remove_plugin(), get_current_hook_name() and reposition_plugin_on_hook(). +Plugin authors needing to use these should read the function documentation +in the functions.php file in the Compatibility plugin directory. + + + +TODO +==== + + * sqsetcookie probably will break some plugins, since I'm not sure + where the flush is happening in 1.5.1 and if it's being backported + correctly. should fix this or make sure it's not a problem + (hrmph, seems to work fine for multilogin, sooo....) + + * Add broader functionality to help plugins diagnose + other setup/install issues? such as what? checking + certain variables in the config files?... + + * Add functionality to auto-define SM_PATH? I have + run into real sticky issues with this and prefer to + leave it out of this plugin... too many variables... + but would be nice to remove this responsibilty from + plugin authors + Possible algorightm: + - globalize and check if $compatibility_sm_path is already available + - if so, use it, define SM_PATH with it if not done already + - iterate through getcwd contents, taking off chunks until one + of the known SM directories is found (plugins, src, functions, include, + class, etc) + - define SM_PATH and $compatibility_sm_path + - chdir to plugins or SM_PATH dir??? (see below) + Come to think of it, why doesn't validate.php just take + care of this? Not sure it is appropriate there, but + maybe a plugin config file would be good (that's almost + what this is becoming... which is handy but not sure if + all the extra work and abstraction is worth it, at least + from a performance angle - all we gain is allowing plugin + authors to be dumber. and are they that dumb?!? ;> + + * Add functionality to auto-chdir if needed? we are + trying to avoid this altogether (and in fact in SM + 1.3 and up we have, unless a plugin is really whacked) + so this is only useful for 1.2... hmmm... thing is + that I ran into some weird situations with plugins + clashing with one another (address_add was one + very problematic one) unless some chdir'ing was done. + again, it'd be nice to pull all this out of plugin + author hands so it'll actually work, but it could be + a little messy, and might need to be version dependent + code (esp 1.2?) + The address_add thing is a good example of how messy + things can be... it is called by code executing somewhere + in the src directory, so chdir'ing at that time can be + disasterous + + * Checking for config files and whatnot should be + moved to the configuration-time code in new SquirrelMail + versions; it is pointless to do this every time the + plugin is used + + + +Change Log +========== + + v2.0.15 2009/10/31 Paul Lesniewski + * Updated check_plugin_dependencies() + * Updated minor change in sq_call_function_suppress_errors() + + v2.0.14 2009/01/01 Paul Lesniewski + * Added is_ssl_secured_connection() + * Added sq_is_writable() + * Added sq_create_tempfile() + * Added get_process_owner_info() + * Update with changes in sqsetcookie() and that it was + added to 1.4.16 + + v2.0.13 2008/07/26 Paul Lesniewski + * Synchronized sq_send_mail() and sqauth_save_password() + with changes in SquirrelMail + * Synchronized get_plugin_requirement() with changes in + SquirrelMail + + v2.0.12 2008/05/21 Paul Lesniewski + * Added set_uri_vars() + * Added check_file_contents() + * Added $load_only_one to load_config() + * Added include directories for 1.4.15 and 1.4.16 + * Added lame-duck stand-in for ngettext() when needed + under SquirrelMail versions less than 1.5.1 that + are not running at least PHP 4.2.0 with the gettext + extension + + v2.0.11 2008/02/29 Paul Lesniewski + * Moved sq_send_mail(), since it was added to SM core + * Added debug constants from 1.5.2 + + v2.0.10 2008/01/12 Paul Lesniewski + * Note that SquirrelMail 1.4.13+ (as well as 1.5.1+) + no longer requires a source patch. + * Added sq_call_function_suppress_errors() + * Added get_secured_config_value() + * Added get_smtp_user() + * Added sq_send_mail() + + v2.0.9 2007/07/12 Paul Lesniewski + * Synchronize with addition of sqauth_read_password() to + SM 1.4.11 + * Improve get_current_hook_name() function in SM 1.5.1+ + (no need to upgrade except for use with SM 1.5.1+) + * Removed sq_popen() and family + + v2.0.8 2007/04/17 + * Fix mistyped function call, which should not have + shown up unless using old or broken setups. Thanks + to Yoshinori Mamoto. + * Fixed sqm_baseuri() location change that creates bug + for versions 1.4.5 and below + * Added sq_popen() and family + * Added list_files() + + v2.0.7 2007/04/05 + * Added sqauth_save_password() and sqauth_read_password() + from 1.5.1 to compatibility library + * Added documentation note that plugin authors should not + use checkForJavascript() under 1.4.x + * Added get_plugin_version(), updated check_plugin_version() + * Added sq_htmlspecialchars() + * Added sq_change_text_domain() + * Added get_plugin_requirement() + * Added get_plugin_dependencies(), check_plugin_dependencies() + * Changed internal legacy inclusion mechanism for better + organization and easier maintenance + * Adjusted for new SM_VERSION constant in SM 1.5.2 + + v2.0.6 2007/01/17 + * Fixed issues from the last release: eval code return bug + that showed only under 1.5.1 and PHP notice issue when + used with the Multilogin plugin under 1.4.x. + + v2.0.5 2007/01/14 + * Revamped legacy mechanism; cleaned up include files and + included functions (as mentioned in the README, if plugin + authors find functions they need for better compatibility, + please get in touch) + * Added missing include in the case of errors in load_config + * Added get_current_hook_name(), add_plugin(), remove_plugin() + and reposition_plugin_on_hook() functions + * Remove use of SM_PATH in functions file in case it is not + available + * load_config() and check_plugin_setup() can now also return + after an error to allow the caller to handle the error + * Added patches through SquirrelMail version 1.4.9 and 1.5.0 + (Compatibility plugin is natively loaded in 1.5.1 and up) + + v2.0.4 2005/11/11 + * Sorry, folks. Changed the location of the compatibility patch + again. When upgrading to this version, you *MUST* remove the + patch from version 2.0.3 (to do so, just re-run the patch for + that version *BEFORE* you unpack and install this version). + As with before, patches from version 2.0.2 or previous will do + no harm if left in place. If you are using version 2.0.3, + upgrade is especially recommended. + + v2.0.3 2005/10/24 + * Changed the location of the compatibility patch. Everyone + upgrading to this version will need to re-run the patch! + The old compatibility patch becomes obsolete, but it does + not hurt anything to be left in place. + + v2.0.2 2005/10/19 + * Added load_config function for use by other plugins + * Added new sqsetcookie and sqsession_start functions to includes + * Added new checkForJavascript function to includes + + v2.0.1 2005/07/14 + * Documentation change (plugins *never* need to include + Compatibility directly) + * Added 1.4.6 includes directory + * Added is_plugin_enabled() up to 1.4.5 and 1.5.0 + + v2.0 2005/06/16 + * Reorganized code so that plugin authors do not need + to specifically use "compatibility_" functions. + * Changed compatibility_check_plugin_setup() to check_plugin_setup() + + 1.3 - Paul Lesniewski + * Added compatibility_check_plugin_setup() that helps verify that + a plugin has been installed and set up correctly + * Added new $compatibility_sm_path variable for easier plugin coding... + * Updated for compatibility (!) with new version reporting API + + 1.2 - Paul Lesniewski + * Fix for theme problem with plugins under SM 1.4 + + 1.1 - Paul Lesniewski + * Some applications of this plugin were experiencing + unusual include order, so added includes of the + global.php and strings.php files to be safe. + * Even though older versions of SquirrelMail have + some of the functions that this plugin duplicates, + because they have session issues, the compatibility + version of those functions now takes precedence over + older SquirrelMail core code. + + 1.0 - Paul Lesniewski + * Initial release diff --git a/ehcp/webmail2/plugins/compatibility/docs/index.php b/ehcp/webmail2/plugins/compatibility/docs/index.php new file mode 100644 index 0000000..37765b7 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/docs/index.php @@ -0,0 +1,17 @@ + + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * SquirrelMail developers, see below under "SQUIRRELMAIL DEVELOPER + * NOTES" for information about how the include files are maintained + * + * @package plugins + * @subpackage compatibility + * + */ + + + + // change this to TRUE to disable plugin config test functionality + // which will increase performance (minimally) + // + $disable_config_check = FALSE; + + + // --------------------------------------- + + + global $compatibility_sm_path, $compatibility_disable_config_check; + $compatibility_disable_config_check = $disable_config_check; + + + // we don't want to do any defining constants ourselves to stay + // as non-intrusive as possible, so just our own variable + // + if (defined('SM_PATH')) + $compatibility_sm_path = SM_PATH; + else + $compatibility_sm_path = '../'; + + + // Some uses of this plugin (such as vlogin) were somehow calling the + // functions here before having included the functions in global.php, + // resulting in fatal errors when called below. Thus, the need for + // the following includes + // + + // we also need to include the validate file first + // thing so we don't lose the ability to display themes, + // but we cannot include this file unless we are being + // called from a plugin request, thus this if statement + // +/* + if ( strpos(getcwd(), 'plugins') ) + { + if (file_exists($compatibility_sm_path . 'include/validate.php')) + include_once($compatibility_sm_path . 'include/validate.php'); + else if (file_exists($compatibility_sm_path . 'src/validate.php')) + include_once($compatibility_sm_path . 'src/validate.php'); + } + + + include_once($compatibility_sm_path . 'functions/strings.php'); + + + if (file_exists($compatibility_sm_path . 'functions/global.php')) + include_once($compatibility_sm_path . 'functions/global.php'); + else if (file_exists($compatibility_sm_path . 'src/global.php')) + include_once($compatibility_sm_path . 'src/global.php'); +*/ + + + + // legacy support for previous versions of compatibility plugin + // +//see below +// function compatibility_check_sm_version ($a = '0', $b = '0', $c = '0') +// { return check_sm_version($a, $b, $c); } + function compatibility_check_php_version ($a = '0', $b = '0', $c = '0') + { return check_php_version($a, $b, $c); } + function compatibility_sqsession_register ($var, $name) + { sqsession_register ($var, $name); } + function compatibility_sqsession_unregister ($name) + { sqsession_unregister($name); } + function compatibility_sqsession_is_active() + { sqsession_is_active(); } + function compatibility_sqsession_is_registered ($name) + { return sqsession_is_registered($name); } + function compatibility_sqextractGlobalVar ($name) + { global $$name; sqgetGlobalVar($name, $$name); } + + + + // now include everything that current SM version is missing + // + load_legacy_support(); + + + + + /** + * Checks SquirrelMail version, returns TRUE if SquirrelMail + * version is at least a.b.c. + * + * @param $a int Major version number + * @param $b int Minor version number + * @param $c int Revision number + * + * @return boolean TRUE if SquirrelMail version matches at + * least a.b.c, FALSE otherwise. + * + */ + function compatibility_check_sm_version ($a = '0', $b = '0', $c = '0') + { + if (function_exists('check_sm_version')) + return check_sm_version($a, $b, $c); + + if (defined('SM_VERSION')) + $version = SM_VERSION; + else + global $version; + + list($aa, $bb, $cc) = preg_split('/\./', $version, 3); + $cc = intval($cc); + + if(!is_numeric($cc)) + list($cc, $info) = explode(' ', $cc, 2); + + return ($aa > $a) + || (($aa == $a) && ($bb > $b)) + || (($aa == $a) && ($bb == $b) && ($cc >= $c)); + } + + + + /** + * Includes needed files with updated API for legacy + * SquirrelMail installations + * + */ + function load_legacy_support() + { + + global $compatibility_sm_path; + + // SQUIRRELMAIL DEVELOPER NOTES + // + // The array below should be updated with every release of + // SquirrelMail, along with adding needed directories in the + // includes for this plugin. + // + // Code that was added as of a certain version should be put + // in the include file in the directory corresponding to that + // same version number in order to make it available to older + // versions. When including files here, that file will be + // included for all versions prior. + // + // If some code was added to the newest codebase for two different + // release series, for example, a function called "sq_new_function()" + // that was added in both 1.4.10 as well as 1.5.2, please add + // the function to only the higher version (1.5.2 in this case), + // and add additional logic to the way it is included: + // + // if ((!compatibility_check_sm_version(1, 4, 10) + // || (compatibility_check_sm_version(1, 5, 0) + // && !compatibility_check_sm_version(1, 5, 2))) + // && !function_exists('sq_new_function')) + // { + // function sq_new_function() + // { + // echo "HELLO WORLD"; + // } + // } + // + // NOTE: In-between version includes should simply be put in the + // lowest version include file for the new release series + // (e.g., anything in the 1.5.0 include file will be loaded + // for all 1.4.x versions, and of course, not for 1.5.0). + // The following in-between include file system is thus not + // needed, but leaving code and documentation about how it + // works just for edification: + // + // In-between include directories should be named as such: + // "1.4.x-to-1.5.0" where the latter version string must + // correspond to a real SquirrelMail version and the versions + // must be separated by the string "-to-" + // + // Order in this array is significant, please keep newest releases + // at top of this list, ordered downward from there... + // + // These have to be hard-coded since there is no way to know if this + // plugin is being used in series 1.2.x, 1.3.x, 1.4.x, 1.5.x, etc. + // + $compatibility_versions = array( + '1.5.2', '1.5.1', '1.5.0', + // in-between includes not needed: + //'1.4.x-to-1.5.0', + '1.4.18', '1.4.17', '1.4.16', '1.4.15', '1.4.14', + '1.4.13', '1.4.12', '1.4.11', '1.4.10', '1.4.9', '1.4.8', '1.4.7', + '1.4.6', '1.4.5', '1.4.4', '1.4.3', '1.4.2', '1.4.1', '1.4.0', + // skipping 1.3.x, not supported for now + // in-between includes not needed: + //'1.2.x-to-1.4.0', + '1.2.11', '1.2.10', '1.2.9', '1.2.8', '1.2.7', + // if you are running anything older than this, I feel really, really sorry for you + ); + + + // loop through all versions in our list, including files + // for all versions newer than the one being run here and now + // + $last_csv_version_string = ''; + $last_version_string = ''; + for ($count = 0; !empty($compatibility_versions[$count]); $count++) + { + + $version_string = $compatibility_versions[$count]; + + +/* ----- see above; in-between includes not needed... + // in-between version files: set version string to the higher + // version so that all versions in the release series below + // it will see it + // + if (($pos = strpos($version_string, '-to-')) !== FALSE) + $csv_version_string = str_replace('.', ', ', substr($version_string, $pos + 4)); + + + // normal conversion to CSV values + // + else +----- */ + // note that we could split $version_string by '.' instead and not use eval below + $csv_version_string = str_replace('.', ', ', $version_string); + + + if ($count == 0) + { + if (eval('if (compatibility_check_sm_version(' . $csv_version_string . ')) return TRUE; else return FALSE;')) + return; + $last_csv_version_string = $csv_version_string; + $last_version_string = $version_string; + continue; + } + + + if (eval('if (file_exists($compatibility_sm_path . \'plugins/compatibility/includes/' + . $last_version_string . '/global.php\')) include_once($compatibility_sm_path . \'plugins/compatibility/includes/' + . $last_version_string . '/global.php\'); if (compatibility_check_sm_version(' + . $csv_version_string . ')) return TRUE;')) + return; + + $last_csv_version_string = $csv_version_string; + $last_version_string = $version_string; + + } + + } + + + +/** + * Allows a plugin to push itself (or another plugin) to the top + * or bottom of the plugin order for a certain hook. It also + * allows for positioning immediately before or after another + * plugin. + * + * NOTE that this function will only be useful when called from + * certain points in the code context, such as from a very early + * hook like 'config_override' (which has been changed to + * 'prefs_backend'), and may not work reliably for reordering + * hooks that are already in execution. + * + * @param string $plugin_name The name of the plugin to reposition. + * @param string $hook_name The name of the hook wherein the + * repositioning happens. + * @param boolean $before If the repositioning should be at the + * top of the plugin list (or before the + * $relative_plugin plugin). When FALSE, + * repositioning goes to the bottom of + * the plugin list or after $relative_plugin + * (OPTIONAL; default is TRUE). + * @param string $relative_plugin The name of a plugin that the repositioning + * should be relative to. If not given, + * the target plugin is just moved to the + * extreme front or back of the whole plugin + * list (OPTIONAL; default not used). + * + * @return boolean TRUE when repositioning succeeds, FALSE otherwise + * (for instance, it might fail if the target plugin + * is not already registered on the target hook, or + * $relative_plugin is not also found on the target hook). + * + */ +function reposition_plugin_on_hook($plugin_name, $hook_name, $before=TRUE, + $relative_plugin='') +{ + + global $squirrelmail_plugin_hooks, $plugins; + + + // make sure plugin is already registered on the target hook + // + if (is_array($squirrelmail_plugin_hooks[$hook_name]) + && !empty($squirrelmail_plugin_hooks[$hook_name][$plugin_name])) + { + + // move relative to another plugin? + // + $relative_plugin_function = FALSE; + if (!empty($relative_plugin)) + { + if (empty($squirrelmail_plugin_hooks[$hook_name][$relative_plugin])) + return FALSE; + + $relative_plugin_function = $squirrelmail_plugin_hooks[$hook_name][$relative_plugin]; + } + + + // grab target plugin's function callback for this hook + // + $plugin_function = $squirrelmail_plugin_hooks[$hook_name][$plugin_name]; + + + // reordering an associative array can only be done + // by rebuilding by hand as far as I know + // + $new_hook_array = array(); + if ($before && !$relative_plugin_function) + $new_hook_array[$plugin_name] = $plugin_function; + foreach ($squirrelmail_plugin_hooks[$hook_name] as $plugin => $function) + { + + if ($plugin == $plugin_name) + continue; + + // move relative to another plugin? + // + if ($plugin == $relative_plugin && !empty($relative_plugin)) + { + if ($before) + { + $new_hook_array[$plugin_name] = $plugin_function; + $new_hook_array[$relative_plugin] = $relative_plugin_function; + } + else + { + $new_hook_array[$relative_plugin] = $relative_plugin_function; + $new_hook_array[$plugin_name] = $plugin_function; + } + continue; + } + + $new_hook_array[$plugin] = $function; + + } + if (!$before && !$relative_plugin_function) + $new_hook_array[$plugin_name] = $plugin_function; + + + + // now replace the plugins for the target hook + // + $squirrelmail_plugin_hooks[$hook_name] = $new_hook_array; + + return TRUE; + + } + + + // plugin not found on target hook + // + return FALSE; + +} + + + +/** + * Dynamically enables a plugin to the SquirrelMail environment. + * + * @param string $plugin_name The name of the plugin to add. + * @param mixed $args The current plugin function argument, + * which must be exactly as received by + * the plugin function that is calling + * this code (OPTIONAL; default empty). + * @param boolean $dont_execute When adding plugins that are registered + * on the same hook that is currently being + * executed, the registered function for + * the new plugins will be manually run, + * however, setting this flag to TRUE will + * prevent that from happening (plugins + * will be registered, but never executed) + * (OPTIONAL; default is FALSE). + * + */ +function add_plugin($plugin_name, $args='', $dont_execute=FALSE) +{ + + global $squirrelmail_plugin_hooks, $plugins; + + // changing the hook function array whilst in the + // middle of iterating thru it for the same hook + // doesn't always work, so we'll see if the hook + // currently being executed has had its function + // list changed; if so, we will execute the added + // hook functions ourselves + // + $hook_name = get_current_hook_name($args); + + + // used below for determining if any plugins + // were added to currently running hook + // + if (!empty($hook_name) + && !empty($squirrelmail_plugin_hooks[$hook_name]) + && is_array($squirrelmail_plugin_hooks[$hook_name])) + $original_hook_functions = $squirrelmail_plugin_hooks[$hook_name]; + else + $original_hook_functions = array(); + + + // add plugin to global plugin array + // + $plugins[] = $plugin_name; + + + // enable plugin -- emulate code from use_plugin() function + // in SquirrelMail core, because in 1.5.2, it no longer + // called "squirrelmail_plugin_init_", which + // NEEDS to be called here. + // + if (file_exists(SM_PATH . "plugins/$plugin_name/setup.php")) + { + + include_once(SM_PATH . "plugins/$plugin_name/setup.php"); + + $function = "squirrelmail_plugin_init_$plugin_name"; + if (function_exists($function)) + $function(); + + } + + + // now get any new plugins for the current hook + // and run their hooks + // + if (!$dont_execute && !empty($hook_name)) + { + + if (!empty($squirrelmail_plugin_hooks[$hook_name]) + && is_array($squirrelmail_plugin_hooks[$hook_name])) + $new_hook_functions = array_diff($squirrelmail_plugin_hooks[$hook_name], + $original_hook_functions); + else + $new_hook_functions = array(); + + foreach ($new_hook_functions as $function) + if (function_exists($function)) +//FIXME: is $args always how plugins are called, even in 1.4.x? + $function($args); + + } + +} + + + +/** + * Dynamically disables a plugin from the SquirrelMail environment. + * + * @param string $plugin_name The name of the plugin to remove. + * + */ +function remove_plugin($plugin_name) +{ + + global $squirrelmail_plugin_hooks, $plugins; + + $plugin_key = array_search($plugin_name, $plugins); + if (!is_null($plugin_key) && $plugin_key !== FALSE) + { + unset($plugins[$plugin_key]); + if (is_array($squirrelmail_plugin_hooks)) + foreach (array_keys($squirrelmail_plugin_hooks) as $hookName) + { + unset($squirrelmail_plugin_hooks[$hookName][$plugin_name]); + } + } + +} + + + +/** + * Determines what plugin hook is currently executing, + * if any, in a SquirrelMail version-independent fashion. + * + * @param mixed $args The current plugin function argument, + * which must be exactly as received by + * the plugin function that is calling + * this code. + * + * @return string The name of the currently executing plugin + * hook, or an empty string if either no hook + * is running or the hook name could not be + * determined. + * + */ +function get_current_hook_name($args='') +{ + + if (check_sm_version(1, 5, 1)) + { + global $currentHookName; + if (!empty($currentHookName)) + return $currentHookName; + } + + +//TODO: should we ALWAYS backtrace instead of assuming that $args[0] is the hook name? + if (!empty($args[0]) && is_string($args[0])) + return $args[0]; + else + { + + // plugin args not given or didn't have a hook + // name in them, so try backtracing instead + // + $backtrace = debug_backtrace(); + foreach ($backtrace as $trace) + if ($trace['function'] == 'do_hook' + || $trace['function'] == 'do_hook_function' + || $trace['function'] == 'concat_hook_function' + || $trace['function'] == 'boolean_hook_function') + return $trace['args'][0]; + + // nothing found at all + // + return ''; + + } + +} + + + +/** + * Load configuration file + * + * Convenience function for plugins that loads a configuration + * file (or files). If the file(s) is(are) not found, an error + * is displayed and execution stops (function won't return). + * If multiple configuration files are given, ALL of them are + * included (unless $load_only_one is TRUE), if they exist, in + * the order given. Only one of them needs to be found to avert + * triggering an error. + * + * Note that configuration files are loaded in the order given, + * so the caller should place the file that should have the + * final overrides as the LAST in the given list, unless using + * $load_only_one, in which case the most important configuration + * file should probably come first. + * + * Non-functional on login_before hook. +TODO - re-verify that the above is true + * + * @param string $plugin_name The name of the plugin as + * it is known to SquirrelMail, + * that is, it is the name + * of the plugin directory + * @param mixed $config_files An array of files that will + * be included IN THE ORDER that + * they are given in the + * array. Can also be given as + * a string if only one config + * file is being loaded. Files + * should be specified relative + * to the calling plugin's + * directory, such as: + * 'config.php' + * or: + * '../../config/my_plugin_config.php' + * or: + * array('data/config.php', 'data/admins.php') + * It is also possible to give a + * full/direct path to a + * configuration file by placing + * a forward slash at the + * beginning of the file: + * array('/var/lib/squirrelmail/config/myplugin.conf') + * @param boolean $return_errors When TRUE, any errors encountered + * will cause this function to return + * FALSE; otherwise, errors are + * handled herein by showing an error + * to the user and exiting (OPTIONAL; + * default is FALSE). + * @param boolean $load_only_one When TRUE, this function will stop + * after it has successfully loaded + * one configuration file, starting + * with the first one given for + * $config_files. When FALSE, all + * configuration files will be loaded + * such that the last one can override + * all others ("cascading") (OPTIONAL; + * default is FALSE). + * + * @return mixed If no errors are found, TRUE is returned; if an error + * was found and $return_errors is TRUE, FALSE is returned. + * If $return_errors is FALSE and an error is found, this + * function will never return. + * + */ +function load_config($plugin_name, $config_files, + $return_errors=FALSE, $load_only_one=FALSE) +{ + + global $compatibility_sm_path; + + + // if only one config file given as string + // + if (!is_array($config_files)) $config_files = array($config_files); + + + // loop through files, attempting to include them + // + $file_count = 1; + foreach ($config_files as $file) + { + + if (strpos($file, '/') === 0) + $plugin_path = $file; + else + $plugin_path = $compatibility_sm_path . 'plugins/' . $plugin_name . '/' . $file; + + // store inclusion results to be checked below + // + ${'config' . $file_count} = @include_once($plugin_path); + + // if we only need one configuration file, stop + // here if we successfully loaded this config file + // + if ($load_only_one && ${'config' . $file_count}) + return TRUE; + + $file_count++; + + } + + + // now check to see if we got at least one successful inclusion + // + $success = FALSE; + for ($i = 1; $i < $file_count; $i++) + if (${'config' . $i}) + { + $success = TRUE; + break; + } + + + // error... + // + if (!$success) + { + + if ($return_errors) return FALSE; + +// TODO: when used in configtest hook (and others??), this function (sq_change_text_domain()) is not known yet... but usually $return_errors should be turned on for that hook + sq_change_text_domain('compatibility'); + $error_msg = _("Administrative error:") . '
            ' + . sprintf(_("The plugin %s has not been set up correctly."), + '"' . $plugin_name . '"') + . '
            ' + . _("Please read the README or INSTALL files that came with the plugin."); + sq_change_text_domain('squirrelmail'); + include_once($compatibility_sm_path . 'functions/display_messages.php'); + global $color; + plain_error_message($error_msg, $color); + exit; + } + + return TRUE; + +} + + + +/** + * Validate Plugin Setup Utility + * + * Checks a plugin to see if the user has installed it + * correctly by checking for the existence of the given + * files (all relative from the plugin's directory) + * + * @param string $pluginName The name of the plugin as + * it is known to SquirrelMail, + * that is, it is the name + * of the plugin directory. + * @param array $configFiles An array of any files that the + * user should have set up for + * this plugin, for example: + * array('config.php') + * or: + * array('data/config.php', 'data/admins.php') + * where all files will be + * referenced from the plugin's + * main directory. + * It is also possible to give a + * full/direct path to a + * configuration file by placing + * a forward slash at the + * beginning of the file: + * array('/var/lib/squirrelmail/config/myplugin.conf') + * @param boolean $return_errors When true, any errors encountered + * will cause this function to return + * either FALSE or a string describing + * the error; otherwise, errors are + * handled herein by showing an error + * to the user and exiting (OPTIONAL; + * default is FALSE). + * + * @return mixed If no errors are found, TRUE is returned; if an error + * was found and $return_errors is TRUE, either FALSE or + * a string describing the error is returned. If $return_errors + * is FALSE and an error is found, this function will never + * return. + * + */ +function check_plugin_setup($pluginName, $configFiles, $return_errors=FALSE) +{ + + global $compatibility_disable_config_check; + if ($compatibility_disable_config_check) return; + + + global $compatibility_sm_path; + + + // check one at a time... + // + foreach ($configFiles as $configFile) + { + + if (strpos($configFile, '/') === 0) + $plugin_path = $configFile; + else + $plugin_path = $compatibility_sm_path . 'plugins/' . $pluginName . '/' . $configFile; + + if (!file_exists($plugin_path)) + { + + //if ($return_errors) return FALSE; + + sq_change_text_domain('compatibility'); + + if ($return_errors) + { + $error_msg = sprintf(_("The file %s is missing from plugin %s."), + '"' . $configFile . '"', + '"' . $pluginName . '"'); + sq_change_text_domain('squirrelmail'); + return $error_msg; + } + + $error_msg = _("Administrative error:") . '
            ' + . sprintf(_("The plugin %s has not been set up correctly."), + '"' . $pluginName . '"') + . '
            ' + . sprintf(_("The file %s is missing."), + '"' . $configFile . '"') + . '
            ' + . _("Please read the README or INSTALL files that came with the plugin."); + sq_change_text_domain('squirrelmail'); + include_once($compatibility_sm_path . 'functions/display_messages.php'); + global $color; + plain_error_message($error_msg, $color); + exit; + + } + + } + + return TRUE; + +} + + + +/** + * Test if a given file contains a given string. + * + * This can be used, for example, by plugins during the configtest hook + * that want to verify if a certain patch to the SquirrelMail core has + * been applied or not. + * + * The string is searched for using a regular expression to allow for + * more complex searches than direct string comparision. The $string + * parameter may contain regular expression syntax if desired. + * + * @param string $file The file to search (usually a full path). + * @param string $string The string to search for (can include regular + * expression syntax if desired - any special + * regular expression meta characters need to + * be escaped unless they are being used as such). + * @param boolean $quiet When TRUE and $file cannot be found or opened, + * this function returns FALSE, otherwise it + * will complain and exit (never return) (OPTIONAL; + * default is FALSE). + * + * @return boolean TRUE when $string was found or FALSE when it was not. + * When $quiet is TRUE, FALSE is also returned if the + * target file could not be located, opened or read. + * + */ +function check_file_contents($file, $string, $quiet=FALSE) +{ + + if (check_php_version(4, 3, 0)) + { + $contents = file_get_contents($file); + if (!$contents) + if ($quiet) return FALSE; + else + { + echo 'FATAL ERROR: ' . $file . ' cannot be found or opened!'; + exit; + } + } + else + { + $temp_contents = file($file); + if (!$temp_contents || !is_array($temp_contents)) + if ($quiet) return FALSE; + else + { + echo 'FATAL ERROR: ' . $file . ' cannot be found or opened!'; + exit; + } + $contents = ''; + foreach ($temp_contents as $line) + $contents .= $line; + } + + + return preg_match('/' . $string . '/', $contents); + +} + + + +/** + * Returns the difference in times. Some small + * amount of precision might be lost in the + + * operations, but nothing serious. + * + * This is only a convenience function for plugin + * authors fine tuning performance and may not + * work on some operating systems. + * + * @param string $start The microtime() results for + * the start point. + * @param string $end The microtime() results for + * the end point (OPTIONAL; + * if empty defaults to the + * time NOW). + * + * @return float The difference between start and + * end points. + * + */ +function sm_microtime_diff($start, $end=0) +{ + + if (empty($end)) $end = microtime(); + + return (substr($end, 11) - substr($start, 11)) + + (substr($end, 0, 9) - substr($start, 0, 9)); + +} + + + diff --git a/ehcp/webmail2/plugins/compatibility/includes/1.2.10/index.php b/ehcp/webmail2/plugins/compatibility/includes/1.2.10/index.php new file mode 100644 index 0000000..31109df --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/includes/1.2.10/index.php @@ -0,0 +1,19 @@ + $files, + 'DIRECTORIES' => $directories); + return $files; + +} +} + + + +// +// taken from functions/plugin.php on 2007/04/05 +// since 1.5.2 +// +if (!function_exists('get_plugin_version')) +{ +function get_plugin_version($plugin_name, $force_inclusion = FALSE, $do_parse = FALSE) +{ + + $info_function = $plugin_name . '_info'; + $version_function = $plugin_name . '_version'; + $plugin_info = array(); + $plugin_version = FALSE; + + + // first attempt to find the plugin info function, wherein + // the plugin version should be available + // + if (function_exists($info_function)) + $plugin_info = $info_function(); + else if ($force_inclusion + && file_exists(SM_PATH . 'plugins/' . $plugin_name . '/setup.php')) + { + + /* --- Old code, keeping just in case... problem with it is, for example, + if it is used, but later we are checking if the same plugin is + activated (because it SHOULD be), this code having run will possibly + create a false positive. + include_once(SM_PATH . 'plugins/' . $plugin_name . '/setup.php'); + if (function_exists($info_function)) + $plugin_info = $info_function(); + --- */ + + // so what we need to do is process this plugin without + // it polluting our environment + // + // we *could* just use the above code, which is more of a + // sure thing than some regular expressions, and then test + // the contents of the $plugins array to see if this plugin + // is actually activated, and that might be good enough, but + // for now, we'll use the following approach, because of two + // concerns: other plugins and other templates might force + // the inclusion of a plugin (which SHOULD also add it to + // the $plugins array, but am not 100% sure at this time (FIXME)), + // and because the regexps below should work just fine with + // any resonably formatted plugin setup file. + // + // read the target plugin's setup.php file into a string, + // then use a regular expression to try to find the version... + // this of course can break if plugin authors do funny things + // with their file formatting + // + $setup_file = ''; + $file_contents = file(SM_PATH . 'plugins/' . $plugin_name . '/setup.php'); + foreach ($file_contents as $line) + $setup_file .= $line; + + + // this regexp grabs a version number from a standard + // _info() function + // + if (preg_match('/[\'"]version[\'"]\s*=>\s*[\'"](.+?)[\'"]/is', $setup_file, $matches)) + $plugin_info = array('version' => $matches[1]); + + + // this regexp grabs a version number from a standard + // (deprecated) _version() function + // + else if (preg_match('/function\s+.*?' . $plugin_name . '_version.*?\(.*?\).*?\{.*?return\s+[\'"](.+?)[\'"]/is', $setup_file, $matches)) + $plugin_info = array('version' => $matches[1]); + + } + if (!empty($plugin_info['version'])) + $plugin_version = $plugin_info['version']; + + + // otherwise, look for older version function + // + if (!$plugin_version && function_exists($version_function)) + $plugin_version = $version_function(); + + + if ($plugin_version && $do_parse) + { + + // massage version number into something we understand + // + // the first regexp strips everything and anything that follows + // the first occurance of a non-digit (or non decimal point), so + // beware that putting letters in the middle of a version string + // will effectively truncate the version string right there (but + // this also just helps remove the SquirrelMail version part off + // of versions such as "1.2.3-1.4.4") + // + // the second regexp just strips out non-digits/non-decimal points + // (and might be redundant(?)) + // + // the regexps are wrapped in a trim that makes sure the version + // does not start or end with a decimal point + // + $plugin_version = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), + '', $plugin_version), + '.'); + + } + + return $plugin_version; + +} +} + + + +// +// taken from functions/plugin.php on 2007/04/05 +// since 1.5.2 +// +if (!function_exists('check_plugin_version')) +{ +function check_plugin_version($plugin_name, + $a = 0, $b = 0, $c = 0, + $force_inclusion = FALSE) +{ + + $plugin_version = get_plugin_version($plugin_name, $force_inclusion, TRUE); + if (!$plugin_version) return FALSE; + + + // split the version string into sections delimited by + // decimal points, and make sure we have three sections + // + $plugin_version = explode('.', $plugin_version); + if (!isset($plugin_version[0])) $plugin_version[0] = 0; + if (!isset($plugin_version[1])) $plugin_version[1] = 0; + if (!isset($plugin_version[2])) $plugin_version[2] = 0; +// sm_print_r($plugin_version); + + + // now test the version number + // + if ($plugin_version[0] < $a || + ($plugin_version[0] == $a && $plugin_version[1] < $b) || + ($plugin_version[0] == $a && $plugin_version[1] == $b && $plugin_version[2] < $c)) + return FALSE; + + + return TRUE; + +} +} + + + +// +// taken from functions/plugin.php on 2008/07/22 +// since 1.5.2 +// +if (!function_exists('get_plugin_requirement')) +{ +function get_plugin_requirement($plugin_name, $requirement, + $ignore_incompatible = TRUE, + $force_inclusion = FALSE) +{ + + $info_function = $plugin_name . '_info'; + $plugin_info = array(); + $requirement_value = NULL; + + + // first attempt to find the plugin info function, wherein + // the plugin requirements should be available + // + if (function_exists($info_function)) + $plugin_info = $info_function(); + else if ($force_inclusion + && file_exists(SM_PATH . 'plugins/' . $plugin_name . '/setup.php')) + { + + /* --- Old code, keeping just in case... problem with it is, for example, + if it is used, but later we are checking if the same plugin is + activated (because it SHOULD be), this code having run will possibly + create a false positive. + include_once(SM_PATH . 'plugins/' . $plugin_name . '/setup.php'); + if (function_exists($info_function)) + $plugin_info = $info_function(); + --- */ + + // so what we need to do is process this plugin without + // it polluting our environment + // + // we *could* just use the above code, which is more of a + // sure thing than a regular expression, and then test + // the contents of the $plugins array to see if this plugin + // is actually activated, and that might be good enough, but + // for now, we'll use the following approach, because of two + // concerns: other plugins and other templates might force + // the inclusion of a plugin (which SHOULD also add it to + // the $plugins array, but am not 100% sure at this time (FIXME)), + // and because the regexp below should work just fine with + // any resonably formatted plugin setup file. + // + // read the target plugin's setup.php file into a string, + // then use a regular expression to try to find the needed + // requirement information... + // this of course can break if plugin authors do funny things + // with their file formatting + // + $setup_file = ''; + $file_contents = file(SM_PATH . 'plugins/' . $plugin_name . '/setup.php'); + foreach ($file_contents as $line) + $setup_file .= $line; + + + // this regexp grabs the full plugin info array from a standard + // _info() function... determining the end of the info + // array can fail, but if authors end the array with ");\n" + // (without quotes), then it should work well, especially because + // newlines shouldn't be found inside the array after any ");" + // (without quotes) + // + if (preg_match('/function\s+.*?' . $plugin_name . '_info.*?\(.*?\).*?\{.*?(array.+?\)\s*;)\s*' . "\n" . '/is', $setup_file, $matches)) + eval('$plugin_info = ' . $matches[1]); + + } + + + // attempt to get the requirement from the "global" scope + // of the plugin information array + // + if (isset($plugin_info[$requirement]) + && !is_null($plugin_info[$requirement])) + $requirement_value = $plugin_info[$requirement]; + + + // now, if there is a series of per-version requirements, + // check there too + // + if (!empty($plugin_info['per_version_requirements']) + && is_array($plugin_info['per_version_requirements'])) + { + + // iterate through requirements, where keys are version + // numbers -- tricky part is knowing the difference between + // more than one version for which the current SM installation + // passes the check_sm_version() test... we want the highest one + // + $requirement_value_override = NULL; + $highest_version_array = array(); + foreach ($plugin_info['per_version_requirements'] as $version => $requirement_overrides) + { + + $version_array = explode('.', $version); + if (sizeof($version_array) != 3) continue; + + $a = $version_array[0]; + $b = $version_array[1]; + $c = $version_array[2]; + + // complicated way to say we are interested in these overrides + // if the version is applicable to us and if the overrides include + // the requirement we are looking for, or if the plugin is not + // compatible with this version of SquirrelMail (unless we are + // told to ignore such) + // + if (check_sm_version($a, $b, $c) + && ((!$ignore_incompatible + && (!empty($requirement_overrides[SQ_INCOMPATIBLE]) + || $requirement_overrides === SQ_INCOMPATIBLE)) + || (is_array($requirement_overrides) + && isset($requirement_overrides[$requirement]) + && !is_null($requirement_overrides[$requirement])))) + { + + if (empty($highest_version_array) + || $highest_version_array[0] < $a + || ($highest_version_array[0] == $a + && $highest_version_array[1] < $b) + || ($highest_version_array[0] == $a + && $highest_version_array[1] == $b + && $highest_version_array[2] < $c)) + { + $highest_version_array = $version_array; + if (!empty($requirement_overrides[SQ_INCOMPATIBLE]) + || $requirement_overrides === SQ_INCOMPATIBLE) + $requirement_value_override = SQ_INCOMPATIBLE; + else + $requirement_value_override = $requirement_overrides[$requirement]; + } + + } + + } + + // now grab override if one is available + // + if (!is_null($requirement_value_override)) + $requirement_value = $requirement_value_override; + + } + + return $requirement_value; + +} +} + + + +// +// taken from functions/plugin.php on 2007/06/29 +// since 1.5.2 +// +if (!function_exists('get_plugin_dependencies')) +{ +function get_plugin_dependencies($plugin_name, $force_inclusion = FALSE, + $do_parse = TRUE) +{ + + $plugin_dependencies = get_plugin_requirement($plugin_name, + 'required_plugins', + $force_inclusion); + + // the plugin is simply incompatible, no need to continue here + // + if ($plugin_dependencies === SQ_INCOMPATIBLE) + return $plugin_dependencies; + + + // not an array of requirements? wrong format, just return FALSE + // + if (!is_array($plugin_dependencies)) + return FALSE; + + + // make sure everything is in order... + // + if (!empty($plugin_dependencies)) + { + + $new_plugin_dependencies = array(); + foreach ($plugin_dependencies as $plugin_name => $plugin_requirements) + { + + // if $plugin_requirements isn't an array, this is old-style, + // where only the version number was given... + // + if (is_string($plugin_requirements)) + $plugin_requirements = array('version' => $plugin_requirements, + 'activate' => FALSE); + + + // trap badly formatted requirements arrays that don't have + // needed info + // + if (!is_array($plugin_requirements) + || !isset($plugin_requirements['version'])) + continue; + if (!isset($plugin_requirements['activate'])) + $plugin_requirements['activate'] = FALSE; + + + // parse version into something we understand? + // + if ($do_parse) + { + + // massage version number into something we understand + // + // the first regexp strips everything and anything that follows + // the first occurance of a non-digit (or non decimal point), so + // beware that putting letters in the middle of a version string + // will effectively truncate the version string right there (but + // this also just helps remove the SquirrelMail version part off + // of versions such as "1.2.3-1.4.4") + // + // the second regexp just strips out non-digits/non-decimal points + // (and might be redundant(?)) + // + // the regexps are wrapped in a trim that makes sure the version + // does not start or end with a decimal point + // + $plugin_requirements['version'] + = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), + '', $plugin_requirements['version']), + '.'); + + } + + $new_plugin_dependencies[$plugin_name] = $plugin_requirements; + + } + + $plugin_dependencies = $new_plugin_dependencies; + + } + + return $plugin_dependencies; + +} +} + + + +// +// taken from functions/plugin.php on 2007/06/29 +// since 1.5.2 +// +if (!function_exists('check_plugin_dependencies')) +{ +function check_plugin_dependencies($plugin_name, $force_inclusion = FALSE) +{ + + $dependencies = get_plugin_dependencies($plugin_name, $force_inclusion); + if (!$dependencies) return TRUE; + if ($dependencies === SQ_INCOMPATIBLE) return $dependencies; + $missing_or_bad = array(); + + foreach ($dependencies as $depend_name => $depend_requirements) + { + + // check for core plugins first + // + if (strpos(strtoupper($depend_requirements['version']), 'CORE') === 0) + { + + // see if the plugin is in the core (just check if the directory exists) + // + if (!file_exists(SM_PATH . 'plugins/' . $depend_name)) + $missing_or_bad[$depend_name] = $depend_requirements; + + + // check if it is activated if need be + // + else if ($depend_requirements['activate'] && !is_plugin_enabled($depend_name)) + $missing_or_bad[$depend_name] = $depend_requirements; + + + // check if this is the right core version if one is given + // (note this is pretty useless - a plugin should specify + // whether or not it itself is compatible with this version + // of SM in the first place) + // + else if (strpos($depend_requirements['version'], ':') !== FALSE) + { + $version = explode('.', substr($depend_requirements['version'], strpos($depend_requirements['version'], ':') + 1), 3); + $version[0] = intval($version[0]); + if (isset($version[1])) $version[1] = intval($version[1]); + else $version[1] = 0; + if (isset($version[2])) $version[2] = intval($version[2]); + else $version[2] = 0; + + if (!check_sm_version($version[0], $version[1], $version[2])) + $missing_or_bad[$depend_name] = $depend_requirements; + } + + continue; + + } + + // if the plugin is actually incompatible; check that it + // is not activated + // + if ($depend_requirements['version'] == SQ_INCOMPATIBLE) + { + + if (is_plugin_enabled($depend_name)) + $missing_or_bad[$depend_name] = $depend_requirements; + + continue; + + } + + // check for normal plugins + // + $version = explode('.', $depend_requirements['version'], 3); + $version[0] = intval($version[0]); + if (isset($version[1])) $version[1] = intval($version[1]); + else $version[1] = 0; + if (isset($version[2])) $version[2] = intval($version[2]); + else $version[2] = 0; + + $force_dependency_inclusion = !$depend_requirements['activate']; + + if (!check_plugin_version($depend_name, $version[0], $version[1], + $version[2], $force_dependency_inclusion)) + $missing_or_bad[$depend_name] = $depend_requirements; + } + + if (empty($missing_or_bad)) return TRUE; + + + // get non-parsed required versions + // + $non_parsed_dependencies = get_plugin_dependencies($plugin_name, + $force_inclusion, + FALSE); + $return_array = array(); + foreach ($missing_or_bad as $depend_name => $ignore) + $return_array[$depend_name] = $non_parsed_dependencies[$depend_name]; + + return $return_array; + +} +} + + + +// +// taken from functions/plugin.php on 2006/09/21 +// since 1.5.2 +// +if (!function_exists('sqm_array_merge')) +{ +function sqm_array_merge($a, $b, $concat_strings=true) { + + $ret = array(); + + if (is_array($a)) { + $ret = $a; + } else { + if (is_string($a) && is_string($b) && $concat_strings) { + return $a . $b; + } + $ret[] = $a; + } + + + if (is_array($b)) { + foreach ($b as $key => $value) { + if (isset($ret[$key])) { + $ret[$key] = sqm_array_merge($ret[$key], $value, $concat_strings); + } else { + $ret[$key] = $value; + } + } + } else { + $ret[] = $b; + } + + return $ret; + +} +} + + + +// +// taken from functions/global.php on 2007/01/14 +// since 1.5.2 +// +if (!function_exists('sqGetGlobalVarMultiple')) +{ +function sqGetGlobalVarMultiple($name, &$value, $indicator_field, + $search = SQ_INORDER, + $fallback_no_suffix=TRUE, $default=NULL, + $typecast=FALSE) { + + // Set arbitrary max limit -- should be much lower except on the + // search results page, if there are many (50 or more?) mailboxes + // shown, this may not be high enough. Is there some way we should + // automate this value? + // + $max_form_search = 100; + + for ($i = 1; $i <= $max_form_search; $i++) { + if (sqGetGlobalVar($indicator_field . '_' . $i, $temp, $search)) { + return sqGetGlobalVar($name . '_' . $i, $value, $search, $default, $typecast); + } + } + + + // no indicator field found; just try without suffix if allowed + // + if ($fallback_no_suffix) { + return sqGetGlobalVar($name, $value, $search, $default, $typecast); + } + + + // no dice, set default and return FALSE + // + if (!is_null($default)) { + $value = $default; + } + return FALSE; + +} +} + + + +// +// taken from functions/global.php on 2007/02/05 +// since 1.5.2 +// +if (!function_exists('sq_htmlspecialchars')) +{ +function sq_htmlspecialchars($value, $quote_style=ENT_QUOTES) { + + if ($quote_style === FALSE) $quote_style = ENT_QUOTES; + + // array? go recursive... + // + if (is_array($value)) { + $return_array = array(); + foreach ($value as $key => $val) { + $return_array[sq_htmlspecialchars($key, $quote_style)] + = sq_htmlspecialchars($val, $quote_style); + } + return $return_array; + + // sanitize strings only + // + } else if (is_string($value)) { + if ($quote_style === TRUE) + return str_replace(array('\'', '"'), array(''', '"'), $value); + else + return htmlspecialchars($value, $quote_style); + } + + // anything else gets returned with no changes + // + return $value; + +} +} + + + +// +// taken from 1.4.10-svn functions/i18n.php on 2007/03/30 +// since 1.5.2 and 1.4.10 +// +// This code was taken from 1.4.10, because it has code that +// is needed in the 1.4.x series but will still work (albiet +// a spec more inefficient) in 1.5.x. If you are running 1.5.x +// you should be running 1.5.2+, where this function is natively +// included anyway. +// +if ((!compatibility_check_sm_version(1, 4, 10) + || (compatibility_check_sm_version(1, 5, 0) && !compatibility_check_sm_version(1, 5, 2))) + && !function_exists('sq_change_text_domain')) +{ +function sq_change_text_domain($domain_name, $directory='') { + + global $use_gettext; + static $domains_already_seen = array(); + $return_value = textdomain(NULL); + + // empty domain defaults to "squirrelmail" + // + if (empty($domain_name)) $domain_name = 'squirrelmail'; + + // only need to call bindtextdomain() once unless + // $use_gettext is turned on + // + if (!$use_gettext && in_array($domain_name, $domains_already_seen)) { + textdomain($domain_name); + return $return_value; + } + + $domains_already_seen[] = $domain_name; + + if (empty($directory)) $directory = SM_PATH . 'locale/'; + + sq_bindtextdomain($domain_name, $directory); + textdomain($domain_name); + + return $return_value; +} +} + + + +// +// taken from 1.4.12-svn functions/global.php on 2007/12/17 +// since 1.5.2 and 1.4.12 +// +// This code was taken from 1.4.12, because the 1.5.2 version +// of this function has constants that are not defined in the +// 1.4.x series. If you are running 1.5.x, you should be +// running 1.5.2+, where this function is natively included +// anyway. +// +if ((!compatibility_check_sm_version(1, 4, 12) + || (compatibility_check_sm_version(1, 5, 0) && !compatibility_check_sm_version(1, 5, 2))) + && !function_exists('sq_call_function_suppress_errors')) +{ +function sq_call_function_suppress_errors($function, $args=array()) { + $display_errors = ini_get('display_errors'); + ini_set('display_errors', '0'); + $ret = call_user_func_array($function, $args); + ini_set('display_errors', $display_errors); + return $ret; +} +} + + + +// +// taken from functions/global.php on 2008/01/12 +// since 1.5.2 +// +if (!function_exists('get_secured_config_value')) +{ +function get_secured_config_value($var_name) { + + static $return_values = array(); + + // if we can avoid it, return values that have + // already been retrieved (so we don't have to + // include the config file yet again) + // + if (isset($return_values[$var_name])) { + return $return_values[$var_name]; + } + + + // load site configuration + // + require(SM_PATH . 'config/config.php'); + + // load local configuration overrides + // + if (file_exists(SM_PATH . 'config/config_local.php')) { + require(SM_PATH . 'config/config_local.php'); + } + + // if SM isn't in "secured configuration" mode, + // just return the desired value from the global scope + // + if (!$secured_config) { + global $$var_name; + $return_values[$var_name] = $$var_name; + return $$var_name; + } + + // else we return what we got from the config file + // + $return_values[$var_name] = $$var_name; + return $$var_name; + +} +} + + + +// +// taken from functions/compose.php on 2008/02/29 +// since 1.5.2 +// +if (!function_exists('sq_send_mail')) +{ +function sq_send_mail($to, $subject, $body, $from, $cc='', $bcc='', $message='') +{ + + require_once(SM_PATH . 'functions/mime.php'); + require_once(SM_PATH . 'class/mime.class.php'); + + if (empty($message)) + { + $message = new Message(); + $header = new Rfc822Header(); + + $message->setBody($body); + $content_type = new ContentType('text/plain'); + global $special_encoding, $default_charset; + if ($special_encoding) + $rfc822_header->encoding = $special_encoding; + else + $rfc822_header->encoding = '8bit'; + if ($default_charset) + $content_type->properties['charset']=$default_charset; + $header->content_type = $content_type; + + $header->parseField('To', $to); + $header->parseField('Cc', $cc); + $header->parseField('Bcc', $bcc); + $header->parseField('From', $from); + $header->parseField('Subject', $subject); + $message->rfc822_header = $header; + } +//sm_print_r($message);exit; + + + global $useSendmail; + + + // ripped from src/compose.php - based on both 1.5.2 and 1.4.14 + // + if (!$useSendmail) { + require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); + $deliver = new Deliver_SMTP(); + global $smtpServerAddress, $smtpPort, $pop_before_smtp, + $domain, $pop_before_smtp_host; + + $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false; + if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress; + $user = ''; + $pass = ''; + get_smtp_user($user, $pass); + $stream = $deliver->initStream($message,$domain,0, + $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); + } else { + require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php'); + global $sendmail_path, $sendmail_args; + // Check for outdated configuration + if (!isset($sendmail_args)) { + if ($sendmail_path=='/var/qmail/bin/qmail-inject') { + $sendmail_args = ''; + } else { + $sendmail_args = '-i -t'; + } + } + $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args)); + $stream = $deliver->initStream($message,$sendmail_path); + } + + + $success = false; + $message_id = ''; + if ($stream) { + $deliver->mail($message, $stream); + if (!empty($message->rfc822_header->message_id)) { + $message_id = $message->rfc822_header->message_id; + } + + $success = $deliver->finalizeStream($stream); + } + + return array($success, $message_id); + +} +} + + + +// +// taken from functions/html.php on 2008/05/21 +// since 1.5.2 +// +if (!function_exists('set_uri_vars')) +{ +function set_uri_vars($uri, $values, $sanitize=TRUE) { + foreach ($values as $key => $value) + if (is_array($value)) { + $i = 0; + foreach ($value as $val) + $uri = set_url_var($uri, $key . '[' . $i++ . ']', $val, $sanitize); + } + else + $uri = set_url_var($uri, $key, $value, $sanitize); + return $uri; +} +} + + + +// +// taken from 1.5.2-svn functions/global.php on 2008/11/26 +// since 1.5.2 and 1.4.17 +// +if ((!compatibility_check_sm_version(1, 4, 17) + || (compatibility_check_sm_version(1, 5, 0) && !compatibility_check_sm_version(1, 5, 2))) + && !function_exists('is_ssl_secured_connection')) +{ +function is_ssl_secured_connection() +{ + global $sq_ignore_http_x_forwarded_headers, $sq_https_port; + $https_env_var = getenv('HTTPS'); + if ($sq_ignore_http_x_forwarded_headers + || !sqgetGlobalVar('HTTP_X_FORWARDED_PROTO', $forwarded_proto, SQ_SERVER)) + $forwarded_proto = ''; + if (empty($sq_https_port)) // won't work with port 0 (zero) + $sq_https_port = 443; + if ((isset($https_env_var) && strcasecmp($https_env_var, 'on') === 0) + || (sqgetGlobalVar('HTTPS', $https, SQ_SERVER) && !empty($https) + && strcasecmp($https, 'off') !== 0) + || (strcasecmp($forwarded_proto, 'https') === 0) + || (sqgetGlobalVar('SERVER_PORT', $server_port, SQ_SERVER) + && $server_port == $sq_https_port)) + return TRUE; + return FALSE; +} +global $is_secure_connection; +$is_secure_connection = is_ssl_secured_connection(); +} + + + +// +// taken from 1.5.2-svn functions/files.php on 2008/11/26 +// since 1.5.2 +// +if (!function_exists('sq_is_writable')) +{ +global $server_os; +if (DIRECTORY_SEPARATOR == '\\') $server_os = 'windows'; else $server_os = '*nix'; +function sq_is_writable($path) { + + global $server_os; + + + // under *nix with safe_mode off, use the native is_writable() + // + if ($server_os == '*nix' && !(bool)ini_get('safe_mode')) + return is_writable($path); + + + // if it's a directory, that means we have to create a temporary + // file therein + // + $delete_temp_file = FALSE; + if (@is_dir($path) && ($temp_filename = @sq_create_tempfile($path))) + { + $path .= DIRECTORY_SEPARATOR . $temp_filename; + $delete_temp_file = TRUE; + } + + + // try to open the file for writing (without trying to create it) + // + if (!@is_dir($path) && ($FILE = @fopen($path, 'r+'))) + { + @fclose($FILE); + + // delete temp file if needed + // + if ($delete_temp_file) + @unlink($path); + + return TRUE; + } + + + // delete temp file if needed + // + if ($delete_temp_file) + @unlink($path); + + return FALSE; + +} +} + + + +// +// taken from 1.5.2-svn functions/files.php on 2008/11/26 +// since 1.5.2 +// +if (!function_exists('sq_create_tempfile')) +{ +function sq_create_tempfile($directory) +{ + + // give up after 1000 tries + $maximum_tries = 1000; + + // using PHP >= 4.3.2 we can be truly atomic here + $filemods = check_php_version(4, 3, 2) ? 'x' : 'w'; + + for ($try = 0; $try < $maximum_tries; ++$try) { + + $localfilename = GenerateRandomString(32, '', 7); + $full_localfilename = $directory . DIRECTORY_SEPARATOR . $localfilename; + + // filename collision. try again + if ( file_exists($full_localfilename) ) { + continue; + } + + // try to open for (binary) writing + $fp = @fopen( $full_localfilename, $filemods); + + if ($fp !== FALSE) { + // success! make sure it's not readable, close and return filename + chmod($full_localfilename, 0600); + fclose($fp); + return $localfilename; + } + + } + + // we tried as many times as we could but didn't succeed. + return FALSE; + +} +} + + + +// +// taken from 1.5.2-svn functions/global.php on 2008/12/04 +// since 1.5.2 +// +if (!function_exists('get_process_owner_info')) +{ +function get_process_owner_info() +{ + if (!function_exists('posix_getuid')) + return FALSE; + + $process_info['uid'] = posix_getuid(); + $process_info['euid'] = posix_geteuid(); + $process_info['gid'] = posix_getgid(); + $process_info['egid'] = posix_getegid(); + + $user_info = posix_getpwuid($process_info['uid']); + $euser_info = posix_getpwuid($process_info['euid']); + $group_info = posix_getgrgid($process_info['gid']); + $egroup_info = posix_getgrgid($process_info['egid']); + + $process_info['name'] = $user_info['name']; + $process_info['ename'] = $euser_info['name']; + $process_info['group'] = $user_info['name']; + $process_info['egroup'] = $euser_info['name']; + + return $process_info; +} +} + + + diff --git a/ehcp/webmail2/plugins/compatibility/includes/1.5.2/index.php b/ehcp/webmail2/plugins/compatibility/includes/1.5.2/index.php new file mode 100644 index 0000000..31109df --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/includes/1.5.2/index.php @@ -0,0 +1,19 @@ + SquirrelMail Compatibility Plugin Translation File +# Copyright (c) 2005 The Squirrelmail Development Team +# This file is distributed under the same license as the SquirrelMail package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: compatibility\n" +"Report-Msgid-Bugs-To: SquirrelMail Internationalization \n" +"POT-Creation-Date: 2008-02-27 23:15-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Administrative error:" +msgstr "" + +#, php-format +msgid "The plugin %s has not been set up correctly." +msgstr "" + +msgid "Please read the README or INSTALL files that came with the plugin." +msgstr "" + +#, php-format +msgid "The file %s is missing from plugin %s." +msgstr "" + +#, php-format +msgid "The file %s is missing." +msgstr "" diff --git a/ehcp/webmail2/plugins/compatibility/locale/getpot b/ehcp/webmail2/plugins/compatibility/locale/getpot new file mode 100644 index 0000000..b073c71 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/locale/getpot @@ -0,0 +1,12 @@ +#!/bin/sh +XGETTEXT_OPTIONS="--keyword=_ -keyword=N_ --default-domain=compatibility --no-wrap --no-location --add-comments=i18n" + +# Allows controlling language option +# (gettext v.0.10.40 = -C, gettext 0.11+ = -L php). +if [ $SM_OLD_GETTEXT ] ; then + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -C"; +else + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -L php"; +fi + +xgettext ${XGETTEXT_OPTIONS} *.php --output=compatibility.pot diff --git a/ehcp/webmail2/plugins/compatibility/locale/index.php b/ehcp/webmail2/plugins/compatibility/locale/index.php new file mode 100644 index 0000000..37765b7 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/locale/index.php @@ -0,0 +1,17 @@ + +# Licensed under the GNU GPL. For full terms see the file COPYING. +# + + + +####################################################### +# +# CONFIGURATION +# + + +# Relative paths to any and all configuration files +# for this plugin: these files will NOT be included +# in the release package built by this script; they +# should be given as relative paths and filenames from +# the plugin's own directory - for example, if you +# have a config.php file in the main plugin directory +# and a special_config.php file in a "data" subdirectory, +# this should be set as follows: +# +# CONFIG_FILES=( config.php data/special_config.php ) +# +# Note that you can also use this setting to exclude +# entire subdirectories while creating the release +# package. Here is an example that skips any files +# inside a subdirectory called "cache_files" and +# completely removes a subdirectory called "tmp", as +# well as the standard config.php file: +# +# CONFIG_FILES=( config.php tmp cache_files/* ) +# +# +CONFIG_FILES=( ) + + + +# +# END CONFIGURATION +# +####################################################### + + + +# avoid all kinds of potential problems; only allow +# this to be run from directory where it resides +# +if [ "$0" != "./make_release.sh" ]; then + + echo + echo "Please do not run from remote directory" + echo + exit 1 + +fi + + + +# grab name of package being built from directory name +# +# +PACKAGE=`echo "$PWD" | sed s/.*\\\///` + + + +# get "pretty name" from version file +# +if [ ! -e version ]; then + echo + echo "No version file found. Please create before making release" + echo + exit 2 +fi +PRETTY_NAME=`head -1 version` + + + +# announce ourselves +# +echo +echo "Creating Release Package for $PRETTY_NAME" +echo + + + +# grab old version number straight from the php code +# +OLD_VERSION=`echo "" | php -q` +REQ_SM_VERSION=`echo "" | php -q` + + + +# check for the standard files... +# +if [ ! -e README ]; then + echo + echo "No README file found. Please create before making release" + echo + exit 3 +fi +if [ ! -e docs/README ]; then + echo + echo "No docs/README file found. Please create before making release" + echo + exit 3 +fi +if [ ! -e docs/INSTALL ]; then + echo + echo "No docs/INSTALL file found. Please create before making release" + echo + exit 4 +fi +if [ ! -e locale/getpot ]; then + echo + echo "No locale/getpot file found. Please create before making release" + echo + exit 5 +fi +if [ ! -e locale/$PACKAGE.pot ]; then + echo + echo "No locale/$PACKAGE.pot file found. Please create before making release" + echo + exit 5 +fi + + + +# just copy index.php and COPYING automatically if not found +# +if [ ! -e docs/COPYING ]; then + echo "No docs/COPYING file found. Grabbing one from ../../" + cp ../../COPYING ./docs/ +fi +if [ ! -e index.php ]; then + echo "No index.php file found. Grabbing one from ../" + cp ../index.php . +fi +if [ ! -e docs/index.php ]; then + echo "No docs/index.php file found. Grabbing one from ../" + cp ../index.php ./docs/ +fi +if [ ! -e locale/index.php ]; then + echo "No locale/index.php file found. Grabbing one from ../" + cp ../index.php ./locale/ +fi + + + +# Make our own docs/.htaccess and locale/.htaccess if needed +# +if [ ! -e docs/.htaccess ]; then + echo "No docs/.htaccess file found. Creating..." + echo "Deny from All" > ./docs/.htaccess +fi +if [ ! -e locale/.htaccess ]; then + echo "No locale/.htaccess file found. Creating..." + echo "Deny from All" > ./locale/.htaccess +fi + + + +# remove any previous tarballs +# +while test 1; do + echo + echo -n "Remove all .tar.gz files? (y/[n]): " + read REPLY + if test -z $REPLY; then + REPLY="n" + break + fi + if test $REPLY = "y"; then + break + fi + if test $REPLY = "n"; then + break + fi +done +if [ "$REPLY" = "y" ]; then + rm -f *.tar.gz +fi + + + +# get new version number if needed +# +if [ ! -z "$REQ_SM_VERSION" ] ; then + OLD_FULL_VERSION=$OLD_VERSION-$REQ_SM_VERSION +else + OLD_FULL_VERSION=$OLD_VERSION +fi +echo +read -p "Enter Version Number [$OLD_VERSION]: " VERSION +if [ -z "$VERSION" ] ; then + VERSION=$OLD_VERSION; +# VERSION=$OLD_FULL_VERSION; +fi +PURE_VERSION=`echo "$VERSION" | sed 's/-.*//'` + +if [ ! -z "$REQ_SM_VERSION" ] ; then + FINAL_VERSION="$PURE_VERSION-$REQ_SM_VERSION" +else + FINAL_VERSION="$PURE_VERSION" +fi + + + +# remove tarball we are building if present +# +echo +echo "Removing $PACKAGE-$FINAL_VERSION.tar.gz" +rm -f $PACKAGE-$FINAL_VERSION.tar.gz + + + +# replace version number in info function in setup.php +# NOTE that this requires specific syntax in setup.php +# for the _info() function which should be +# a line that looks like: +# 'version' => '', +# +if test -e setup.php; then + echo "Replacing version in setup.php (info function)" + sed -e "s/'version' => '$OLD_VERSION',/'version' => '$PURE_VERSION',/" setup.php > setup.php.tmp + mv setup.php.tmp setup.php +fi + + + +# update version number in version file too +# +echo "Replacing version in version file" +echo "$PRETTY_NAME" > version +echo $PURE_VERSION >> version + + + +# Build tar command; exclude config and other irrelevant files +# +TAR_COMMAND="tar -c -z -v --exclude CVS --exclude .svn" +J=0 +while [ "$J" -lt ${#CONFIG_FILES[@]} ]; do + + echo "Excluding ${CONFIG_FILES[$J]}" + TAR_COMMAND="$TAR_COMMAND --exclude ${CONFIG_FILES[$J]}" + + J=`expr $J + 1` +done +TAR_COMMAND="$TAR_COMMAND -f $PACKAGE-$FINAL_VERSION.tar.gz $PACKAGE" + + + +# make tarball +# +echo "Creating $PACKAGE-$FINAL_VERSION.tar.gz" +cd ../ +$TAR_COMMAND +mv $PACKAGE-$FINAL_VERSION.tar.gz $PACKAGE +cd $PACKAGE + + + +echo +echo "Finished" +echo + diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/.htaccess b/ehcp/webmail2/plugins/compatibility/patches.old/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.2.11.diff b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.2.11.diff new file mode 100644 index 0000000..c3bc91f --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.2.11.diff @@ -0,0 +1,10 @@ +--- ../src/validate.php.orig 2005-05-05 02:16:13.041876608 -0700 ++++ ../src/validate.php 2005-05-05 02:16:10.068328656 -0700 +@@ -23,6 +23,7 @@ + require_once('../functions/auth.php'); + require_once('../functions/strings.php'); + require_once('../src/global.php'); ++include_once('../plugins/compatibility/functions.php'); + + is_logged_in(); + diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.4.diff b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.4.diff new file mode 100644 index 0000000..d82b32a --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.4.diff @@ -0,0 +1,10 @@ +--- ../include/validate.php.orig 2005-05-05 02:16:13.041876608 -0700 ++++ ../include/validate.php 2005-05-05 02:16:10.068328656 -0700 +@@ -42,6 +42,7 @@ + require_once(SM_PATH . 'functions/global.php'); + require_once(SM_PATH . 'functions/strings.php'); + require_once(SM_PATH . 'config/config.php'); ++include_once(SM_PATH . 'plugins/compatibility/functions.php'); + + /* set the name of the session cookie */ + if(isset($session_name) && $session_name) { diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.5.diff b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.5.diff new file mode 100644 index 0000000..b1da90c --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.5.diff @@ -0,0 +1,10 @@ +--- ../include/validate.php.orig 2005-10-19 17:56:03.000000000 -0700 ++++ ../include/validate.php 2005-10-19 19:24:00.000000000 -0700 +@@ -43,6 +43,7 @@ + require_once(SM_PATH . 'functions/global.php'); + require_once(SM_PATH . 'functions/strings.php'); + require_once(SM_PATH . 'config/config.php'); ++include_once(SM_PATH . 'plugins/compatibility/functions.php'); + + /* set the name of the session cookie */ + if(isset($session_name) && $session_name) { diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.6.diff b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.6.diff new file mode 100644 index 0000000..b1da90c --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/compatibility_patch-1.4.6.diff @@ -0,0 +1,10 @@ +--- ../include/validate.php.orig 2005-10-19 17:56:03.000000000 -0700 ++++ ../include/validate.php 2005-10-19 19:24:00.000000000 -0700 +@@ -43,6 +43,7 @@ + require_once(SM_PATH . 'functions/global.php'); + require_once(SM_PATH . 'functions/strings.php'); + require_once(SM_PATH . 'config/config.php'); ++include_once(SM_PATH . 'plugins/compatibility/functions.php'); + + /* set the name of the session cookie */ + if(isset($session_name) && $session_name) { diff --git a/ehcp/webmail2/plugins/compatibility/patches.old/index.php b/ehcp/webmail2/plugins/compatibility/patches.old/index.php new file mode 100644 index 0000000..31109df --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/patches.old/index.php @@ -0,0 +1,19 @@ + + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * @package plugins + * @subpackage compatibility + * + */ + + + +/** + * Returns info about this plugin + * + */ +function compatibility_info() +{ + + return array( + 'english_name' => 'Compatibility', + 'authors' => array( + 'Paul Lesniewski' => array( + 'email' => 'paul@squirrelmail.org', + 'sm_site_username' => 'pdontthink', + ), + ), + 'version' => '2.0.15', + 'required_sm_version' => '1.0', + 'requires_configuration' => 0, + 'requires_source_patch' => 2, + 'required_plugins' => array(), + 'per_version_requirements' => array( + '1.5.1' => array( + 'requires_source_patch' => 0, + ), + '1.5.0' => array( + 'requires_source_patch' => 1, + ), + '1.4.13' => array( + 'requires_source_patch' => 0, + ), + '1.0.0' => array( + 'requires_source_patch' => 1, + ), + ), + 'summary' => 'Allows plugins to remain compatible with all versions of SquirrelMail.', + 'details' => 'This plugin allows any other plugin access to the functions and special variables needed to make it backward (and forward) compatible with most versions of SM in wide use. This eliminates the need for duplication of certain functions throughout many plugins. It also provides functionality that helps check that plugins have been installed and set up correctly.', + ); + +} + + + +/** + * Returns version info about this plugin + * + */ +function compatibility_version() +{ + + $info = compatibility_info(); + return $info['version']; + +} + + + diff --git a/ehcp/webmail2/plugins/compatibility/version b/ehcp/webmail2/plugins/compatibility/version new file mode 100644 index 0000000..0a84a2c --- /dev/null +++ b/ehcp/webmail2/plugins/compatibility/version @@ -0,0 +1,2 @@ +Compatibility +2.0.15 diff --git a/ehcp/webmail2/plugins/delete_move_next/README b/ehcp/webmail2/plugins/delete_move_next/README new file mode 100644 index 0000000..f8dc4d9 --- /dev/null +++ b/ehcp/webmail2/plugins/delete_move_next/README @@ -0,0 +1,81 @@ +delete_move_next -- Version 3.0 +By Ben Brillat + +This is a modified version of Delete Move Next by Bryan Stalcup + +If you read the mail in your inbox starting with the most recent, this +plugin is meant for you. It adds a set of mail management links across +the bottom or top of the email. + +Features +======== +* Saves you the need to scroll up to go to the previous or next email +* Allows you to delete the current email and view the next or previous + message in step +* Allows you to move the current email to any mailbox and view the next + + +Description +=========== +This plugin adds links to the message view for each message. +The links include "Previous", "Next", "Delete & Previous", and "Delete & +Next", which deletes the current email and displays the next email. +Also included is a menu to move the current email to any folder and +then display the next email. It helps me keep up with my constantly +overflowing inbox. + +Future Work +=========== +* You tell me... + + +Limitations (Known bugs) +======================== +-If you delete or move an email, then use the "Message List" link at the + top left of the header, the message list is pulled from cache, and does + not reflect the deleted/moved email(s). To view the current list, click + the mailbox link in the left-hand navigation bar. +-"Delete & Prev" or "Delete & Next" can result in strange behavior when + deleting the last or next to last message in a mailbox when using any + sort order other than 0. It won't kill anything, you just might arrive + at a message other than the one you were expecting to see. + If anyone has any suggestions on this one, please let me know. + + +Installation +============ +See the "INSTALL" file. + +Changes +======= +See the "CHANGELOG" file. +New versions are available at: +http://www.brillat.net/~ben/files/projects/squirrelmail/ + +Copyright +========= +Copyright (C) 2001 Benjamin Brillat + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program ("gpl.txt"); if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Contact +======= + +Let me know what you think: +Ben Brillat +74 Punch Bowl Trail +W. Kingston, RI 02892 USA + + diff --git a/ehcp/webmail2/plugins/delete_move_next/index.php b/ehcp/webmail2/plugins/delete_move_next/index.php new file mode 100644 index 0000000..05b4840 --- /dev/null +++ b/ehcp/webmail2/plugins/delete_move_next/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/delete_move_next/setup.php b/ehcp/webmail2/plugins/delete_move_next/setup.php new file mode 100644 index 0000000..4beb5e9 --- /dev/null +++ b/ehcp/webmail2/plugins/delete_move_next/setup.php @@ -0,0 +1,438 @@ +key ' . $keys[$i] . ' msgid ' . $msgs[$keys[$i]]['ID'] . '

            '; + } +} + +function delete_move_expunge_from_all($id) { + global $msgs, $msort, $sort, $imapConnection, $mailbox, $uid_support; + $delAt = -1; + + if(isset($msort) && count($msort) > 0) { + for ($i = 0; $i < count($msort); $i++) { + if ($msgs[$i]['ID'] == $id) { + $delAt = $i; + } elseif ($msgs[$i]['ID'] > $id) { + if (!$uid_support) { + $msgs[$i]['ID']--; + } + } + } + + $msgs = delete_move_del_arr_elem($msgs, $delAt); + $msort = delete_move_del_arr_elem($msort, $delAt); + if ($sort < 6) { + if ($sort % 2) { + asort($msort); + } else { + arsort($msort); + } + } + sqsession_register($msgs, 'msgs'); + sqsession_register($msort, 'msort'); + } + + sqimap_mailbox_expunge($imapConnection, $mailbox, true); +} + +function delete_move_next_action() { + + if ( sqgetGlobalVar('unread_id', $unread_id, SQ_GET) ) { + delete_move_next_unread(); + } else if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) { + delete_move_next_delete(); + fix_sort_array(); + } else if ( sqgetGlobalVar('move_id', $move_id, SQ_POST) ) { + delete_move_next_move(); + fix_sort_array(); + } +} + +function delete_move_next_read_t() { + + global $delete_move_next_t; + + if($delete_move_next_t == 'on') { + delete_move_next_read('top'); + } +} + +function delete_move_next_read_b() { + + global $delete_move_next_b; + + if ($delete_move_next_b != 'off') { + delete_move_next_read('bottom'); + } +} + +function delete_move_next_read($currloc) { + global $delete_move_next_formATtop, $delete_move_next_formATbottom, + $color, $where, $what, $currentArrayIndex, $passed_id, + $mailbox, $sort, $startMessage, $delete_id, $move_id, + $imapConnection, $auto_expunge, $move_to_trash, $mbx_response, + $uid_support, $passed_ent_id, $delete_move_next_show_unread; + + $urlMailbox = urlencode($mailbox); + + if (!isset($passed_ent_id)) $passed_ent_id = 0; + + if (!(($where && $what) || ($currentArrayIndex == -1)) && !$passed_ent_id) { + $next = findNextMessage($passed_id); + $prev = findPreviousMessage($mbx_response['EXISTS'], $passed_id); + $prev_if_del = $prev; + $next_if_del = $next; + if (!$uid_support && ($auto_expunge || $move_to_trash)) { + if ($prev_if_del > $passed_id) { + $prev_if_del--; + } + if ($next_if_del > $passed_id) { + $next_if_del--; + } + } + + /* Base is illegal within documents + * $location = get_location(); + * echo "" . */ + echo ''. + ''. + "'; + + if ($next_if_del < 0) { + $next_if_del = $prev_if_del; + } + if (($delete_move_next_formATtop == 'on') && ($currloc == 'top')) { + if ($next_if_del > 0) { + delete_move_next_moveNextForm($next_if_del); + } else { + delete_move_next_moveRightMainForm(); + } + } + if (($delete_move_next_formATbottom != 'off') && ($currloc == 'bottom')) { + if ($next_if_del > 0) { + delete_move_next_moveNextForm($next_if_del); + } else { + delete_move_next_moveRightMainForm(); + } + } + echo '
            "; + + if ($prev > 0){ + echo "" . _("Delete & Prev") . "" . " | "; + if ($delete_move_next_show_unread == 'on') { + echo "" . _("Unread & Prev") . "" . " | "; + } + } + else { + echo _("Delete & Prev") . " | "; + if ($delete_move_next_show_unread == 'on') { + echo _("Unread & Prev") . " | "; + } + } + if ($next > 0){ + if ($delete_move_next_show_unread == 'on') { + echo "" . _("Unread & Next") . " | "; + } + echo "" . _("Delete & Next") . ""; + } else { + if ($delete_move_next_show_unread == 'on') { + echo _("Unread & Next") . " | "; + } + echo _("Delete & Next"); + } + echo '
            '; + } +} + +function get_move_target_list() { + global $imapConnection, $lastTargetMailbox; + if (isset($lastTargetMailbox) && !empty($lastTargetMailbox)) { + echo sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox))); + } + else { + echo sqimap_mailbox_option_list($imapConnection); + } +} + +function delete_move_next_moveNextForm($next) { + + global $color, $where, $what, $currentArrayIndex, $passed_id, + $mailbox, $sort, $startMessage, $delete_id, $move_id, + $imapConnection; + + $urlMailbox = urlencode($mailbox); + + echo ''. + "". + "
            ". + "". + "". + "". + _("Move to:") . + ' '. + ''. + ''. + '
            '. + ''. + ''; +} + +function delete_move_next_moveRightMainForm() { + + global $color, $where, $what, $currentArrayIndex, $passed_id, + $mailbox, $sort, $startMessage, $delete_id, $move_id, + $imapConnection; + + $urlMailbox = urlencode($mailbox); + + echo '' . + "". + "
            " . + "". + "". + _("Move to:") . + ' ' . + ''. + ''. + '
            ' . + ''. + ''; +} + +function delete_move_next_unread() { + global $imapConnection; + + sqgetGlobalVar('unread_id', $unread_id, SQ_GET); + if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_GET)) { + $submitted_token = ''; + } + + // first, validate security token + sm_validate_security_token($submitted_token, 3600, TRUE); + + sqimap_toggle_flag($imapConnection, $unread_id, '\\Seen', false, true); +} + +function delete_move_next_delete() { + global $imapConnection, $auto_expunge; + + sqgetGlobalVar('delete_id', $delete_id, SQ_GET); + sqgetGlobalVar('mailbox', $mailbox, SQ_GET); + if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_GET)) { + $submitted_token = ''; + } + + // first, validate security token + sm_validate_security_token($submitted_token, 3600, TRUE); + + sqimap_msgs_list_delete($imapConnection, $mailbox, $delete_id); + if ($auto_expunge) { + delete_move_expunge_from_all($delete_id); + // sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } +} + +function delete_move_next_move() { + global $imapConnection, $mailbox, $auto_expunge, $lastTargetMailbox; + + sqgetGlobalVar('move_id', $move_id, SQ_POST); + sqgetGlobalVar('mailbox', $mailbox, SQ_FORM); + sqgetGlobalVar('targetMailbox', $targetMailbox, SQ_POST); + if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) { + $submitted_token = ''; + } + + // first, validate security token + sm_validate_security_token($submitted_token, 3600, TRUE); + + // Move message + sqimap_msgs_list_move($imapConnection, $move_id, $targetMailbox); + if ($auto_expunge) { + delete_move_expunge_from_all($move_id); + // sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } + + if ($targetMailbox != $lastTargetMailbox) { + $lastTargetMailbox = $targetMailbox; + sqsession_register($lastTargetMailbox, 'lastTargetMailbox'); + } +} + +function delete_move_next_display_inside() { + global $username,$data_dir, $delete_move_next_show_unread, + $delete_move_next_t, $delete_move_next_formATtop, + $delete_move_next_b, $delete_move_next_formATbottom; + + echo "" . html_tag('td',_("Delete/Unread/Move/Next Buttons:"),'right','','valign="top"') . "\n". + '
            '; + + echo '
            '. + '\n"; +} + +function delete_move_next_display_save() { + + global $username,$data_dir; + + if ( sqgetGlobalVar('delete_move_next_ti', $delete_move_next_ti, SQ_POST) ) { + setPref($data_dir, $username, 'delete_move_next_t', 'on'); + } else { + setPref($data_dir, $username, 'delete_move_next_t', "off"); + } + + if ( sqgetGlobalVar('delete_move_next_formATtopi', $delete_move_next_formATtopi, SQ_POST) ) { + setPref($data_dir, $username, 'delete_move_next_formATtop', 'on'); + } else { + setPref($data_dir, $username, 'delete_move_next_formATtop', "off"); + } + + + if ( sqgetGlobalVar('delete_move_next_bi', $delete_move_next_bi, SQ_POST) ) { + setPref($data_dir, $username, 'delete_move_next_b', 'on'); + } else { + setPref($data_dir, $username, 'delete_move_next_b', "off"); + } + + if ( sqgetGlobalVar('delete_move_next_formATbottomi', $delete_move_next_formATbottomi, SQ_POST) ) { + setPref($data_dir, $username, 'delete_move_next_formATbottom', 'on'); + } else { + setPref($data_dir, $username, 'delete_move_next_formATbottom', "off"); + } + + if ( sqgetGlobalVar('delete_move_next_show_unread', $delete_move_next_show_unread, SQ_POST) ) { + setPref($data_dir, $username, 'delete_move_next_show_unread', 'on'); + } else { + setPref($data_dir, $username, 'delete_move_next_show_unread', "off"); + } +} + +function delete_move_next_loading_prefs() { + global $username,$data_dir, $delete_move_next_show_unread, + $delete_move_next_t, $delete_move_next_formATtop, + $delete_move_next_b, $delete_move_next_formATbottom; + + $delete_move_next_t = getPref($data_dir, $username, 'delete_move_next_t'); + $delete_move_next_b = getPref($data_dir, $username, 'delete_move_next_b'); + $delete_move_next_formATtop = getPref($data_dir, $username, 'delete_move_next_formATtop'); + $delete_move_next_formATbottom = getPref($data_dir, $username, 'delete_move_next_formATbottom'); + $delete_move_next_show_unread = getPref($data_dir, $username, 'delete_move_next_show_unread'); + +} + diff --git a/ehcp/webmail2/plugins/demo/COPYING b/ehcp/webmail2/plugins/demo/COPYING new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/ehcp/webmail2/plugins/demo/COPYING @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/webmail2/plugins/demo/INSTALL b/ehcp/webmail2/plugins/demo/INSTALL new file mode 100644 index 0000000..d199a4b --- /dev/null +++ b/ehcp/webmail2/plugins/demo/INSTALL @@ -0,0 +1,13 @@ +Installing Demo +=============== + +The Demo plugin comes with SquirrelMail, so you should +only need to activate it using the configuration utility. + +1) Go to your config directory and run conf.pl. Choose + option 8 and move the plugin from the "Available Plugins" + category to the "Installed Plugins" category. Save and exit. + + $ cd config/ + $ ./conf.pl + diff --git a/ehcp/webmail2/plugins/demo/README b/ehcp/webmail2/plugins/demo/README new file mode 100644 index 0000000..1bf1e06 --- /dev/null +++ b/ehcp/webmail2/plugins/demo/README @@ -0,0 +1,32 @@ +Demo plugin for SquirrelMail +============================ +Version $Id$ + +Copyright 1999-2011 The SquirrelMail Project Team + + +Description +=========== + +This plugin provides test/sample code for many of the hook +points in the SquirrelMail core. It is primarily intended +as an aid to plugin authors who can copy the code herein to +ensure correct hook code and thus focus on other more +important plugin functionality. This plugin should not be +enabled in a production environment. + +Note that the hook code herein is specific to the version +of SquirrelMail that it is found in and is not necessarily +cross-version compatible. Please consult the demo plugin +in all versions of SquirrelMail that your plugin will target. + + + +License +======= + +This plugin is released under the GNU General Public +License (see the file COPYING for details). + + + diff --git a/ehcp/webmail2/plugins/demo/demo.php b/ehcp/webmail2/plugins/demo/demo.php new file mode 100644 index 0000000..de2c80b --- /dev/null +++ b/ehcp/webmail2/plugins/demo/demo.php @@ -0,0 +1,35 @@ +HELLO WORLD'; + + + diff --git a/ehcp/webmail2/plugins/demo/demo.pot b/ehcp/webmail2/plugins/demo/demo.pot new file mode 100644 index 0000000..d0f2237 --- /dev/null +++ b/ehcp/webmail2/plugins/demo/demo.pot @@ -0,0 +1,23 @@ +# SquirrelMail Demo Plugin Translation File +# Copyright (c) 2007 The Squirrelmail Development Team +# This file is distributed under the same license as the SquirrelMail package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: demo\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-09-05 11:38-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: SquirrelMail Language Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Demo" +msgstr "" + +msgid "This is where you would describe what your plugin does." +msgstr "" diff --git a/ehcp/webmail2/plugins/demo/functions.php b/ehcp/webmail2/plugins/demo/functions.php new file mode 100644 index 0000000..abf85bf --- /dev/null +++ b/ehcp/webmail2/plugins/demo/functions.php @@ -0,0 +1,79 @@ + _("Demo"), + 'url' => sqm_baseuri() . 'plugins/demo/demo.php', + 'desc' => _("This is where you would describe what your plugin does."), + 'js' => FALSE + ); + + sq_change_text_domain('squirrelmail'); + +} + + + +/** + * Validate that this plugin is configured correctly + * + * @return boolean Whether or not there was a + * configuration error for this plugin. + * + */ +function demo_check_configuration_do() +{ + + // test for something that this plugin requires, print error if + // misconfigured or requirements are missing + // + if (FALSE) // put something meaningful here + { + do_err('Demo plugin is missing something important', FALSE); + return TRUE; // return FALSE if you only want to display a non-critical error + } + + return FALSE; + +} + + + diff --git a/ehcp/webmail2/plugins/demo/getpot b/ehcp/webmail2/plugins/demo/getpot new file mode 100644 index 0000000..d441841 --- /dev/null +++ b/ehcp/webmail2/plugins/demo/getpot @@ -0,0 +1,12 @@ +#!/bin/sh +XGETTEXT_OPTIONS="--keyword=_ -keyword=N_ --default-domain=demo --no-location" + +# Allows controlling language option +# (gettext v.0.10.40 = -C, gettext 0.11+ = -L php). +if [ $SM_OLD_GETTEXT ] ; then + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -C"; +else + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -L php"; +fi + +xgettext ${XGETTEXT_OPTIONS} *.php --output=demo.pot diff --git a/ehcp/webmail2/plugins/demo/index.php b/ehcp/webmail2/plugins/demo/index.php new file mode 100644 index 0000000..d82006e --- /dev/null +++ b/ehcp/webmail2/plugins/demo/index.php @@ -0,0 +1,19 @@ + 'Demo', + 'version' => 'CORE', + 'summary' => 'This plugin provides test/sample code for many of the hook points in the SquirrelMail core.', + 'details' => 'This plugin provides test/sample code for many of the hook points in the SquirrelMail core.', + 'requires_configuration' => 0, + 'requires_source_patch' => 0, + ); + +} + + + +/** + * Returns version info about this plugin + * + */ +function demo_version() +{ + $info = demo_info(); + return $info['version']; +} + + + +/** + * Add link to menu at top of content pane + * + * @return void + * + */ +function demo_menuline() +{ + include_once(SM_PATH . 'plugins/demo/functions.php'); + demo_menuline_do(); +} + + + +/** + * Inserts an option block in the main SM options page + * + * @return void + * + */ +function demo_option_link() +{ + include_once(SM_PATH . 'plugins/demo/functions.php'); + demo_option_link_do(); +} + + + +/** + * Validate that this plugin is configured correctly + * + * @return boolean Whether or not there was a + * configuration error for this plugin. + * + */ +function demo_check_configuration() +{ + include_once(SM_PATH . 'plugins/demo/functions.php'); + return demo_check_configuration_do(); +} + + + diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/INSTALL b/ehcp/webmail2/plugins/ehcp_change_pass/INSTALL new file mode 100644 index 0000000..7a23c78 --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/INSTALL @@ -0,0 +1,22 @@ +Installing the EHCP Change Password Plugin +========================================= + +1) Start with untaring the file into the plugins directory. + Here is a example for the 1.0 version of the Ehcp_change_ pass + plugin. + + $ cd plugins + $ tar zxvf ehcp_change_pass.tar.gz + + change db pass in config.php + + +2) Then go to your config directory and run conf.pl. Choose + option 8 and move the plugin from the "Available Plugins" + category to the "Installed Plugins" category. Save and exit. + + $ cd ../../config/ + $ ./conf.pl + +3) Please verify that you have the "compatibility" plugin + installed. diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/README b/ehcp/webmail2/plugins/ehcp_change_pass/README new file mode 100644 index 0000000..dc91205 --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/README @@ -0,0 +1,22 @@ +EHCP Change Password plugin for SquirrelMail +=========================================== +Version 1.0, 31/12/2009 (dd-mm-yyyy) + +Authors: Chandra Bhushan + + + +Description +=========== + +This plugin allows the user to change their password +from the comfort of their webmail interface when it's +stored in a MYSQL database. + +This plugin supports passwords that are stored using +MySQL encrypt() functions. + +Requirements +============ + * SquirrelMail + * EHCP diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/config.php b/ehcp/webmail2/plugins/ehcp_change_pass/config.php new file mode 100644 index 0000000..a54d7ed --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/config.php @@ -0,0 +1,6 @@ + diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/ehcp_change_pass_opt.php b/ehcp/webmail2/plugins/ehcp_change_pass/ehcp_change_pass_opt.php new file mode 100644 index 0000000..9decce9 --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/ehcp_change_pass_opt.php @@ -0,0 +1,130 @@ + + * This program is licensed under GPL. See COPYING for details + * + */ + +/** + * Register this plugin with SquirrelMail + * + */ +/** @ignore */ +define('SM_PATH','../../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/page_header.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'include/load_prefs.php'); + +displayPageHeader($color, 'None'); + +global $submit, $new_pw1, $new_pw2; +global $username, $color; +$form_show=true; //To display Password change form + +sqgetGlobalVar('new_pw1', $new_pw1, SQ_FORM); +sqgetGlobalVar('new_pw2', $new_pw2, SQ_FORM); +sqgetGlobalVar('submit', $submit, SQ_FORM); + +$new_pw1 = trim($new_pw1); +$new_pw2 = trim($new_pw2); + +$status[1] = _("You forgot the user name."); +$status[2] = _("You must enter the new password in both boxes."); +$status[3] = _("The new password must be at least six characters long."); +$status[4] = _("The new password must be less then 15 characters long."); +$status[5] = _("You entered a different new password in both boxes."); + +if (isset($submit)) { + // check for errors! + // + if (empty($username)) { // Assumes $username is available from Squirralmail global vars... + $msg = $status[1]; + $errors = true; + } elseif (empty($new_pw1) || empty($new_pw2)) { + $msg = $status[2]; + $errors = true; +/* + } elseif (strlen($new_pw1) < 6) { + $msg = $status[3]; + $errors = true; +*/ + } elseif (strlen($new_pw1) > 15) { + $msg = $status[4]; + $errors = true; + } elseif ($new_pw1 != $new_pw2) { + $msg = $status[5]; + $errors = true; + } +} + +//$un_parts = explode("@", $username); // Split the un into parts. (username/domain name) +$user_email = trim($username); //Your user name + +require_once("config.php"); // this is config of squirrelmail plugin. + +echo html_tag( 'table', '', 'center', $color[0], 'width="95%" cellpadding="1" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'center' ) . + '' . _("Options") . ' - ' . _("EHCP Password Change") . "
            \n" . + html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "
            \n"; + +if (isset($submit) && ($errors == false)) { + // Attempt connection + + // Create connection to MYSQL database + $mysql_access = mysql_connect($dbhost, $dbusername, $dbpass); //connect to mysql database + if (!$mysql_access) + { + die('Could not connect: ' . mysql_error()); + echo ''; + return 0; + } + else + { + mysql_select_db($dbname, $mysql_access); + $query="UPDATE emailusers SET password = encrypt('$new_pw1','ehcp') WHERE email = '$user_email'"; + if(!mysql_query($query)) { + echo "Hata Olustu: ".mysql_error(); + die(); + } + mysql_close($mysql_access); + $form_show= false; + } +} + +if($form_show){ +?> +
            +
            +
            + + + + + + + + + + +
            + '.$msg.'';?> + +
            +
            +
            + "> + +Password changed successfully.
            Please use your new password to log in from now on.
            "); +} + ?> + + diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/index.php b/ehcp/webmail2/plugins/ehcp_change_pass/index.php new file mode 100644 index 0000000..034825b --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/ehcp_change_pass/setup.php b/ehcp/webmail2/plugins/ehcp_change_pass/setup.php new file mode 100644 index 0000000..7c183ee --- /dev/null +++ b/ehcp/webmail2/plugins/ehcp_change_pass/setup.php @@ -0,0 +1,36 @@ + + * This program is licensed under GPL. See COPYING for details + * + */ + + +/** + * Register this plugin with SquirrelMail + * + */ +function squirrelmail_plugin_init_ehcp_change_pass() { + global $squirrelmail_plugin_hooks; + + $squirrelmail_plugin_hooks['optpage_register_block']['ehcp_change_pass'] = 'ehcp_change_pass_optpage_register_block'; +} + +function ehcp_change_pass_optpage_register_block() { + // Gets added to the user's OPTIONS page. + global $optpage_blocks; + + if ( !soupNazi() ) { + + /* Register Squirrelspell with the $optionpages array. */ + $optpage_blocks[] = array( + 'name' => _("Ehcp Change Password"), + 'url' => SM_PATH . 'plugins/ehcp_change_pass/ehcp_change_pass_opt.php', + 'desc' => _("This configures settings for Change new EHCP email password."), + 'js' => TRUE + ); + } +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/filters/README b/ehcp/webmail2/plugins/filters/README new file mode 100644 index 0000000..967f12c --- /dev/null +++ b/ehcp/webmail2/plugins/filters/README @@ -0,0 +1,52 @@ +Filters Plugin + +ABOUT PLUGIN +------------ +This plugin sorts messages in your inbox into different folders based upon +given criteria. It is most useful for people who are subscribed to mailing +lists to help organize their messages. The argument stands that filtering is +not the place of the client, which is why this has been made a plugin for +SquirrelMail. You may be better off using products such as Sieve, Maildrop or +Procmail to do your filtering so it happens even when SquirrelMail isn't +running. + +IMPORTANT: At least one version of PHP has bugs in the checkdnsrr() function +that the SPAM filtering code RELIES ON. The PHP server that comes with Mandrake +8.1 has this problem -- checkdnsrr() NEVER finds the inaddr records, even the +ones that really exist. + +This is a poor alternative to procmail or Elm's filter programs. This is a +pathetic replacement for good RBL mail scanning when you get the mail. This is +more for systems that can't/won't offer that kind of functionality and you +still require it. + +This is slow. Yep. Slow. + +INSTALLATION +------------ +Plugin is installed by enabling it in SquirrelMail configuration script. +Plugin configuration can be changed with configuration files stored in +config/filters_config.php or plugins/filters/config.php. Default configuration +values can be found in plugins/filters/config_default.php. If both +configuration files are present, plugin uses file from config directory. + +Main configuration option that must be changed is $SpamFilters_YourHop setting. +See comments about it in config_default.php. If $SpamFilters_YourHop uses +default value, plugin will be unable to use RBL filtering correctly and +warning message will is displayed to end user. If you don't want to use RBL +filtering, you can disable it by setting $AllowSpamFilters option to false. If +you can control your incoming SMTP server, it is recommended to turn RBL +filtering on server. + +If you use UW and if you encounter strange errors while using this plugin on +your system, edit configuration file and set $UseSeparateImapConnection to +true. This may not solve the problem. One problem it might fix is if you run UW +2001 and if you don't see the number of unread messages in your left-hand +folder pane, or if you see timeouts or IMAP server error messages. Turning on +this feature may slow down the filters a bit more since it has to open a new +connection. + +Lastly, if there are some IPs that you want to refuse email from or some IPs +you want to accept email from REGARDLESS of what the DNS databases say, you can +put in overrides in the SpamFilters_DNScache[] array. See the comments in +config_default.php for more info on this. diff --git a/ehcp/webmail2/plugins/filters/bulkquery/INSTALL b/ehcp/webmail2/plugins/filters/bulkquery/INSTALL new file mode 100644 index 0000000..e98b021 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/INSTALL @@ -0,0 +1,42 @@ +First off, you MUST have BIND 9.x or later compiled and installed. You +need the lwres libraries and bind libraries (and include files) and you +will also need lwresd. Once you have it compiled and installed, try running +lwresd. On solaris I had to use the -i flag to specify where to write +the pid file, and on linux I didn't. (shrug) Go figure. But you gotta get +lwresd running before moving on. Don't panic, this is FAR easier to get +going than a full-blown BIND server (grin). + +Building bulkquery + +First, edit the Makefile and uncomment out the section of CC, CFLAGS, and +LDFLAGS settings for your operating system and set DESTDIR to the directory +you want to install it in. + +Then, edit bulkquery.c and edit the MAXTHREADS and DEFTTL values. You probably +don't need to fiddle with anything else and the defaults for MAXTHREADS and +DEFTTL should be fine. + +MAXTHREADS is the maximum number of threads you will spawn. The more you +spawn, the harder you will work your DNS server (and the RBLs) and the +more resources you'll use up on your own machine -- AND the faster the +queries will complete. If you set this too high your operating system might +not permit bulkquery to run. The default of 50 works fine on Solaris and +and Linux. + +DEFTTL is the default time to live value. This is sort of a misnomer, since +the REAL time to live values will be obtained in the replies for queries +that were found. But for the queries that were NOT found, DEFTTL will be +used. This is so that the non-existence of an IP in one of the RBLs will be +cached by the filters plugin for DEFTTL seconds. + +After looking at bulkquery.c, just run "make" to compile it. If it compiles +without errors, you can run "make install" (you may need to be root to +write to DESTDIR). You can test it with the included sample input file +bq.in + +If all you get back are entries with the default TTL value (ie. 7200), then +something isn't working. Make sure you have lwresd running. You should also +make sure the machine you're running it on CAN make DNS queries (grin). So +check your /etc/resolv.conf file (on UNIX machines anyway). I'll include +the file bq.out to show what the output of bulkquery looked like at the time +of this writing (assuming everything was working). diff --git a/ehcp/webmail2/plugins/filters/bulkquery/Makefile b/ehcp/webmail2/plugins/filters/bulkquery/Makefile new file mode 100644 index 0000000..ee79a25 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/Makefile @@ -0,0 +1,25 @@ + +DESTDIR=/usr/local/bin +BINDROOT=/usr/local + +# Solaris +#CC=gcc +#CFLAGS=-I$(BINDROOT)/bind/include -I$(BINDROOT)/include +#LDFLAGS=-L$(BINDROOT)/lib -llwres -lsocket -lnsl -lpthread + +# Linux +CC=gcc +CFLAGS=-I$(BINDROOT)/bind/include -I$(BINDROOT)/include +LDFLAGS=-L$(BINDROOT)/lib -lpthread -llwres + +all: bulkquery + +bulkquery: bulkquery.c + $(CC) $(CFLAGS) -o bulkquery bulkquery.c $(LDFLAGS) + +clean: + rm bulkquery + +install: + cp bulkquery $(DESTDIR)/bulkquery + chmod 755 $(DESTDIR)/bulkquery diff --git a/ehcp/webmail2/plugins/filters/bulkquery/README b/ehcp/webmail2/plugins/filters/bulkquery/README new file mode 100644 index 0000000..2805a3b --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/README @@ -0,0 +1,34 @@ + +bulkquery - A program by Brent Bice - 02/2002 + + Bulkquery is a multi-threaded program that makes a large number of +DNS queries as fast as possible. It's tailored for making DNS queries for +specific IP addresses against specific DNS based RBLs. + + "Why bother?" +I've been asked this several times. While running squirrelmail on a server +with very little bandwidth and very high latency (a dial-up account - snicker) +I noticed that while my filters plugin was making gethostbyname() function +calls, my dial-up line was mostly idle. This was, apparently, because all +the DNS function calls were being made in series. Once a DNS query had been +sent, no others were sent until a response had been received or until a +certain timeout period had occurred. And some of the RBLs were quite a +bit faster than the others. This seemed pretty inefficient. "Why not make +more DNS queries while waiting for the replies," I thought. + + After several attempts to make a multi-threaded program to make the queries +using the standard DNS library calls, I realized why. The library functions +weren't thread-safe and most of the replies would be lost. Luckily, a +friend of a friend told me about the lwres API in Bind 9.x and told me that +IT was definitely thread-safe and very fast. + + Boy was SHE right! + + So, how much faster is it? It will depend on your bandwidth and the +latency of your connection. But for those of us trying to make do with less, +bulkquery is a LOT faster. On a dial-up connection, I can make queries +anywhere from 6 to 10 times faster! On my T1 at work, the queries are +usually between 2 and 7 times faster. The bottom line of all of this is +that even on my T1 at work, the filters plugin can query ALL of the RBLs +for all the new email in my INBOX in less than half the time it takes using +the PHP gethostbyname() function calls. diff --git a/ehcp/webmail2/plugins/filters/bulkquery/bq.in b/ehcp/webmail2/plugins/filters/bulkquery/bq.in new file mode 100644 index 0000000..a4671b6 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/bq.in @@ -0,0 +1,9 @@ +.bl.spamcop.net +.relays.osirusoft.com +---------- +2.0.0.127 +3.0.0.127 +4.0.0.127 +5.0.0.127 +6.0.0.127 +7.0.0.127 diff --git a/ehcp/webmail2/plugins/filters/bulkquery/bq.out b/ehcp/webmail2/plugins/filters/bulkquery/bq.out new file mode 100644 index 0000000..465520d --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/bq.out @@ -0,0 +1,12 @@ +7.0.0.127.relays.osirusoft.com, 7.0.0.127.relays.osirusoft.com, 7200 +6.0.0.127.relays.osirusoft.com,127.0.0.6,42807 +5.0.0.127.relays.osirusoft.com, 5.0.0.127.relays.osirusoft.com, 7200 +4.0.0.127.relays.osirusoft.com,127.0.0.4,42807 +6.0.0.127.bl.spamcop.net, 6.0.0.127.bl.spamcop.net, 7200 +7.0.0.127.bl.spamcop.net, 7.0.0.127.bl.spamcop.net, 7200 +3.0.0.127.relays.osirusoft.com,127.0.0.3,42808 +4.0.0.127.bl.spamcop.net, 4.0.0.127.bl.spamcop.net, 7200 +5.0.0.127.bl.spamcop.net, 5.0.0.127.bl.spamcop.net, 7200 +2.0.0.127.bl.spamcop.net,127.0.0.2,1542 +2.0.0.127.relays.osirusoft.com,127.0.0.2,42808 +3.0.0.127.bl.spamcop.net, 3.0.0.127.bl.spamcop.net, 7200 diff --git a/ehcp/webmail2/plugins/filters/bulkquery/bulkquery.c b/ehcp/webmail2/plugins/filters/bulkquery/bulkquery.c new file mode 100644 index 0000000..8b8ed88 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/bulkquery/bulkquery.c @@ -0,0 +1,169 @@ + +#include +#include +#include +#include +#include + + +#define BUFLEN 1024 +#define MAXSTR 80 +#define MAXTHREADS 50 +#define MAXRBLS 40 +#define DEFTTL 600 + +extern int errno; +extern int h_errno; + + +struct ipnode; +typedef struct ipnode *iplist; +struct ipnode { + char *IP; + iplist next; +}; + +iplist IPs; + +pthread_mutex_t *mutexp; +pthread_mutex_t *mutexoutput; + +char *dnsrbls[MAXRBLS]; +int numrbls, numthreads, numqueries, defttl; + +void do_queries () { + iplist tIP; + lwres_context_t *ctx = NULL; + lwres_grbnresponse_t *response = NULL; + int n, i; + + + pthread_mutex_lock(mutexp); + tIP = IPs; + if (IPs != NULL) { + IPs = tIP->next; + } + pthread_mutex_unlock(mutexp); + + while (tIP != NULL) { +//fprintf (stderr, "making query %s\n", tIP->IP); fflush(stderr); + if (lwres_context_create(&ctx, NULL, NULL, NULL, 0) != 0) { + fprintf (stderr, "Couldn't create context\n"); + return; + } else { + lwres_conf_parse(ctx, lwres_resolv_conf); + //pthread_mutex_lock(mutexoutput); + n = lwres_getrdatabyname(ctx, tIP->IP, ns_c_in, ns_t_a, 0, &response); + //pthread_mutex_unlock(mutexoutput); + if (n == LWRES_R_SUCCESS) { + printf ("%s,%d.%d.%d.%d,%d\n", tIP->IP, + response->rdatas[0][0], response->rdatas[0][1], + response->rdatas[0][2], response->rdatas[0][3], + response->ttl); + //fprintf (stderr, "freeing response\n"); fflush(stderr); + lwres_grbnresponse_free(ctx, &response); + } else { + //fprintf (stderr, "Nothing found\n"); + printf ("%s, %s, %d\n", tIP->IP, tIP->IP, defttl); + } + //fprintf (stderr, "freeing context\n"); fflush(stderr); + lwres_context_destroy(&ctx); + //fprintf (stderr, "done freeing\n"); fflush(stderr); + } + + pthread_mutex_lock(mutexp); + tIP = IPs; + if (IPs != NULL) { + IPs = tIP->next; + } + pthread_mutex_unlock(mutexp); + } +} + +void GetRBLs() { + char instr[MAXSTR]; + numrbls = 0; + while ((fgets(instr, MAXSTR, stdin) != NULL) && (numrbls < MAXRBLS)) { + instr[strlen(instr)-1] = 0; // strip off newline + if (strncmp(instr, "----------", 10) == 0) { + return; + } + dnsrbls[numrbls] = (char *) malloc(strlen(instr)+1); + if (dnsrbls[numrbls] == NULL) { + fprintf (stderr, "Couldn't allocate memory for %d DNS RBLs\n", numrbls); + exit (10); + } else { + strcpy (dnsrbls[numrbls], instr); + numrbls++; + } + } +} + + +main () { + pthread_t threads[MAXTHREADS]; + char instr[MAXSTR]; + iplist tIP; + int loop1; + + if (fgets(instr, MAXSTR, stdin) != NULL) { + defttl = atoi(instr); + } + if (defttl < 0) + defttl = DEFTTL; + + GetRBLs(); + +// for (loop1=0; loop1IP = (char *)malloc(strlen(instr)+strlen(dnsrbls[loop1])+2); + strcpy (tIP->IP, instr); + strcat (tIP->IP, dnsrbls[loop1]); + tIP->next = IPs; + IPs = tIP; + numqueries++; + } + } + +// fprintf (stderr, "%d queries to make\n", numqueries); +// tIP = IPs; +// while (tIP != NULL) { +// fprintf (stderr, "%s\n", tIP->IP); +// tIP = tIP->next; +// } +// fprintf (stderr, "done\n"); +// exit (0); + + mutexp=(pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(mutexp, NULL); + mutexoutput=(pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(mutexoutput, NULL); + + numthreads = 0; // number of threads created successfully + for (loop1 = 0; ((loop1 \ No newline at end of file diff --git a/ehcp/webmail2/plugins/filters/filters.php b/ehcp/webmail2/plugins/filters/filters.php new file mode 100644 index 0000000..0e9fef7 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/filters.php @@ -0,0 +1,889 @@ + $Value) { + $tstr = $Key . ',' . $Value['L'] . ',' . $Value['T'] . "\n"; + fputs ($fp1, $tstr); + } + fclose($fp1); + flock($fp,LOCK_UN); + fclose($fp); +} + +/** + * Loads the DNS Cache from disk + * @access private + */ +function filters_LoadCache () { + global $data_dir, $SpamFilters_DNScache; + + if (file_exists($data_dir . '/dnscache')) { + $SpamFilters_DNScache = array(); + if ($fp = fopen ($data_dir . '/dnscache', 'r')) { + flock($fp,LOCK_SH); + while ($data = fgetcsv($fp,1024)) { + if ($data[2] > time()) { + $SpamFilters_DNScache[$data[0]]['L'] = $data[1]; + $SpamFilters_DNScache[$data[0]]['T'] = $data[2]; + } + } + flock($fp,LOCK_UN); + } + } +} + +/** + * Uses the BulkQuery executable to query all the RBLs at once + * @param array $filters Array of SPAM Filters + * @param array $IPs Array of IP Addresses + * @param array $read TODO: Document this parameter + * @access private + */ +function filters_bulkquery($filters_spam_scan, $filters, $read) { + global $SpamFilters_YourHop, $attachment_dir, $username, + $SpamFilters_DNScache, $SpamFilters_BulkQuery, + $SpamFilters_CacheTTL; + + $IPs = array(); + $i = 0; + while ($i < count($read)) { + // EIMS will give funky results + $Chunks = explode(' ', $read[$i]); + if ($Chunks[0] != '*') { + $i ++; + continue; + } + $MsgNum = $Chunks[1]; + + $i ++; + + // Look through all of the Received headers for IP addresses + // Stop when I get ")" on a line + // Stop if I get "*" on a line (don't advance) + // and above all, stop if $i is bigger than the total # of lines + while (($i < count($read)) && + ($read[$i][0] != ')' && $read[$i][0] != '*' && + $read[$i][0] != "\n")) { + // Check to see if this line is the right "Received from" line + // to check + if (is_int(strpos($read[$i], $SpamFilters_YourHop))) { + $read[$i] = preg_replace('/[^0-9\.]/', ' ', $read[$i]); + $elements = explode(' ', $read[$i]); + foreach ($elements as $value) { + if ($value != '' && + preg_match('/((\d{1,3}\.){3}\d{1,3})/', + $value)) { + $Chunks = explode('.', $value); + $IP = $Chunks[3] . '.' . $Chunks[2] . '.' . + $Chunks[1] . '.' . $Chunks[0]; + foreach ($filters as $key => $value) { + if ($filters[$key]['enabled'] && + $filters[$key]['dns']) { + if (strlen($SpamFilters_DNScache[$IP.'.'.$filters[$key]['dns']]) == 0) { + $IPs[$IP] = true; + break; + } + } + } + // If we've checked one IP and YourHop is + // just a space + if ($SpamFilters_YourHop == ' ') { + break; // don't check any more + } + } + } + } + $i ++; + } + } + + if (count($IPs) > 0) { + $rbls = array(); + foreach ($filters as $key => $value) { + if ($filters[$key]['enabled']) { + if ($filters[$key]['dns']) { + $rbls[$filters[$key]['dns']] = true; + } + } + } + + $bqfil = $attachment_dir . $username . '-bq.in'; + $fp = fopen($bqfil, 'w'); + fputs ($fp, $SpamFilters_CacheTTL . "\n"); + foreach ($rbls as $key => $value) { + fputs ($fp, '.' . $key . "\n"); + } + fputs ($fp, "----------\n"); + foreach ($IPs as $key => $value) { + fputs ($fp, $key . "\n"); + } + fclose ($fp); + $bqout = array(); + exec ($SpamFilters_BulkQuery . ' < ' . $bqfil, $bqout); + foreach ($bqout as $value) { + $Chunks = explode(',', $value); + $SpamFilters_DNScache[$Chunks[0]]['L'] = $Chunks[1]; + $SpamFilters_DNScache[$Chunks[0]]['T'] = $Chunks[2] + time(); + } + unlink($bqfil); + } +} + +/** + * Starts the filtering process + * @access private + */ +function start_filters() { + global $mailbox, $imapServerAddress, $imapPort, $imap, + $imap_general, $filters, $imap_stream, $imapConnection, + $UseSeparateImapConnection, $AllowSpamFilters; + + sqgetGlobalVar('username', $username, SQ_SESSION); + sqgetGlobalVar('key', $key, SQ_COOKIE); + + + $filters = load_filters(); + + // No point running spam filters if there aren't any to run // + if ($AllowSpamFilters) { + $spamfilters = load_spam_filters(); + + $AllowSpamFilters = false; + foreach($spamfilters as $filterkey => $value) { + if ($value['enabled'] == SMPREF_ON) { + $AllowSpamFilters = true; + break; + } + } + } + + // No user filters, and no spam filters, no need to continue // + if (!$AllowSpamFilters && empty($filters)) { + return; + } + + + // Detect if we have already connected to IMAP or not. + // Also check if we are forced to use a separate IMAP connection + if ((!isset($imap_stream) && !isset($imapConnection)) || + $UseSeparateImapConnection ) { + $stream = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 10); + $previously_connected = false; + } else if (isset($imapConnection)) { + $stream = $imapConnection; + $previously_connected = true; + } else { + $previously_connected = true; + $stream = $imap_stream; + } + $aStatus = sqimap_status_messages ($stream, 'INBOX', array('MESSAGES')); + + if ($aStatus['MESSAGES']) { + sqimap_mailbox_select($stream, 'INBOX'); + // Filter spam from inbox before we sort them into folders + if ($AllowSpamFilters) { + spam_filters($stream); + } + + // Sort into folders + user_filters($stream); + } + + if (!$previously_connected) { + sqimap_logout($stream); + } +} + +/** + * Does the loop through each filter + * @param stream imap_stream the stream to read from + * @access private + */ +function user_filters($imap_stream) { + global $data_dir, $username; + $filters = load_filters(); + if (! $filters) return; + $filters_user_scan = getPref($data_dir, $username, 'filters_user_scan'); + + sqimap_mailbox_select($imap_stream, 'INBOX'); + $id = array(); + // For every rule + for ($i=0, $num = count($filters); $i < $num; $i++) { + // Don't attempt to run filters if folder does not exist // + if (!sqimap_mailbox_exists($imap_stream, $filters[$i]['folder'])) { + continue; + } + + + // If it is the "combo" rule + if ($filters[$i]['where'] == 'To or Cc') { + /* + * If it's "TO OR CC", we have to do two searches, one for TO + * and the other for CC. + */ + $id = filter_search_and_delete($imap_stream, 'TO', + $filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $id); + $id = filter_search_and_delete($imap_stream, 'CC', + $filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $id); + } else { + /* + * If it's a normal TO, CC, SUBJECT, or FROM, then handle it + * normally. + */ + $id = filter_search_and_delete($imap_stream, $filters[$i]['where'], + $filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $id); + } + } + // Clean out the mailbox whether or not auto_expunge is on + // That way it looks like it was redirected properly + if (count($id)) { + sqimap_mailbox_expunge($imap_stream, 'INBOX'); + } +} + +/** + * Creates and runs the IMAP command to filter messages + * @param string $imap TODO: Document this parameter + * @param string $where Which part of the message to search (TO, CC, SUBJECT, etc...) + * @param string $what String to search for + * @param string $where_to Folder it will move to + * @param string $user_scan Whether to search all or just unseen + * @param string $del_id TODO: Document this parameter + * @access private + */ +function filter_search_and_delete($imap, $where, $what, $where_to, $user_scan, + $del_id) { + global $languages, $squirrelmail_language, $allow_charset_search, + $uid_support, $imap_server_type; + + if (strtolower($where_to) == 'inbox') { + return array(); + } + + if ($user_scan == 'new') { + $category = 'UNSEEN'; + } else { + $category = 'ALL'; + } + $category .= ' UNDELETED'; + + if ($allow_charset_search && + isset($languages[$squirrelmail_language]['CHARSET']) && + $languages[$squirrelmail_language]['CHARSET']) { + $search_str = 'SEARCH CHARSET ' + . strtoupper($languages[$squirrelmail_language]['CHARSET']) + . ' ' . $category; + } else { + $search_str = 'SEARCH CHARSET US-ASCII ' . $category; + } + if ($where == 'Header') { + $what = explode(':', $what); + $where = trim($where . ' ' . $what[0]); + $what = addslashes(trim($what[1])); + } + + // see comments in squirrelmail sqimap_search function + if ($imap_server_type == 'macosx' || $imap_server_type == 'hmailserver') { + $search_str .= ' ' . $where . ' ' . $what; + $read = sqimap_run_command_list($imap, $search_str, true, $response, $message, $uid_support); + } else { + $lit = array(); + $lit['command'] = $search_str . ' ' . $where; + $lit['literal_args'][] = $what; + + $read = sqimap_run_literal_command($imap, $lit, true, $response, $message, $uid_support ); + } + + /* read data back from IMAP */ + + + // This may have problems with EIMS due to it being goofy + + for ($r=0, $num = count($read); $r < $num && + substr($read[$r], 0, 8) != '* SEARCH'; $r++) {} + if ($response == 'OK') { + $ids = explode(' ', $read[$r]); + if (sqimap_mailbox_exists($imap, $where_to)) { + /* + * why we do n calls instead of just one. It is safer to copy + * messages one by one, but code does not call expunge after + * message is copied and quota limits are not resolved. + */ + for ($j=2, $num = count($ids); $j < $num; $j++) { + $id = trim($ids[$j]); + if (sqimap_msgs_list_move($imap, $id, $where_to)) { + $del_id[] = $id; + } + } + } + } + return $del_id; +} + +/** + * Loops through all the Received Headers to find IP Addresses + * @param stream imap_stream the stream to read from + * @access private + */ +function spam_filters($imap_stream) { + global $data_dir, $username, $uid_support; + global $SpamFilters_YourHop; + global $SpamFilters_DNScache; + global $SpamFilters_SharedCache; + global $SpamFilters_BulkQuery; + + $filters_spam_scan = getPref($data_dir, $username, 'filters_spam_scan'); + $filters_spam_folder = getPref($data_dir, $username, 'filters_spam_folder'); + $filters = load_spam_filters(); + + if ($SpamFilters_SharedCache) { + filters_LoadCache(); + } + + $run = false; + + foreach ($filters as $Key => $Value) { + if ($Value['enabled']) { + $run = true; + break; + } + } + + // short-circuit + if (!$run) { + return; + } + + sqimap_mailbox_select($imap_stream, 'INBOX'); + + $search_array = array(); + if ($filters_spam_scan == 'new') { + $read = sqimap_run_command($imap_stream, 'SEARCH UNSEEN', true, $response, $message, $uid_support); + if (isset($read[0])) { + for ($i = 0, $iCnt = count($read); $i < $iCnt; ++$i) { + if (preg_match("/^\* SEARCH (.+)$/", $read[$i], $regs)) { + $search_array = explode(' ', trim($regs[1])); + break; + } + } + } + } + + if ($filters_spam_scan == 'new' && count($search_array)) { + $msg_str = sqimap_message_list_squisher($search_array); + $imap_query = 'FETCH ' . $msg_str . ' (FLAGS BODY.PEEK[HEADER.FIELDS (RECEIVED)])'; + } else if ($filters_spam_scan != 'new') { + $imap_query = 'FETCH 1:* (FLAGS BODY.PEEK[HEADER.FIELDS (RECEIVED)])'; + } else { + return; + } + + $read = sqimap_run_command_list($imap_stream, $imap_query, true, $response, $message, $uid_support); + + if (isset($response) && $response != 'OK') { + return; + } + + $messages = parseFetch($read); + + $bulkquery = (strlen($SpamFilters_BulkQuery) > 0 ? true : false); + $aSpamIds = array(); + foreach($messages as $id=>$message) { + if (isset($message['UID'])) { + $MsgNum = $message['UID']; + } else { + $MsgNum = $id; + } + + if (isset($message['received'])) { + foreach($message['received'] as $received) { + if (is_int(strpos($received, $SpamFilters_YourHop))) { + if (preg_match('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', $received, $matches)) { + $IsSpam = false; + if (filters_spam_check_site($matches[1], $matches[2], $matches[3], $matches[4], $filters)) { + $aSpamIds[] = $MsgNum; + $IsSpam = true; + } + + if ($bulkquery) { + array_shift($matches); + $IP = explode('.', $matches); + foreach ($filters as $key => $value) { + if ($filters[$key]['enabled'] && $filters[$key]['dns']) { + if (strlen($SpamFilters_DNScache[$IP . '.' . $filters[$key]['dns']]) == 0) { + $IPs[$IP] = true; + break; + } + } + } + } + // If we've checked one IP and YourHop is + // just a space + if ($SpamFilters_YourHop == ' ' || $IsSpam) { + break; // don't check any more + } + } + } + } + } + } + // Lookie! It's spam! Yum! + if (count($aSpamIds) && sqimap_mailbox_exists($imap_stream, $filters_spam_folder)) { + sqimap_msgs_list_move($imap_stream, $aSpamIds, $filters_spam_folder); + sqimap_mailbox_expunge($imap_stream, 'INBOX', true, $aSpamIds); + } + + if ($bulkquery && count($IPs)) { + filters_bulkquery($filters, $IPs); + } + + if ($SpamFilters_SharedCache) { + filters_SaveCache(); + } else { + sqsession_register($SpamFilters_DNScache, 'SpamFilters_DNScache'); + } +} + +/** + * Does the loop through each enabled filter for the specified IP address. + * IP format: $a.$b.$c.$d + * @param int $a First subset of IP + * @param int $b Second subset of IP + * @param int $c Third subset of IP + * @param int $d Forth subset of IP + * @param array $filters The Spam Filters + * @return boolean Whether the IP is Spam + * @access private + */ +function filters_spam_check_site($a, $b, $c, $d, &$filters) { + global $SpamFilters_DNScache, $SpamFilters_CacheTTL; + foreach ($filters as $key => $value) { + if ($filters[$key]['enabled']) { + if ($filters[$key]['dns']) { + + /** + * RFC allows . on end of hostname to force domain lookup to + * not use search domain from resolv.conf, i.e. to ensure + * search domain isn't used if no hostname is found + */ + $filter_revip = $d . '.' . $c . '.' . $b . '.' . $a . '.' . + $filters[$key]['dns'] . '.'; + + if(!isset($SpamFilters_DNScache[$filter_revip]['L'])) + $SpamFilters_DNScache[$filter_revip]['L'] = ''; + + if(!isset($SpamFilters_DNScache[$filter_revip]['T'])) + $SpamFilters_DNScache[$filter_revip]['T'] = ''; + + if (strlen($SpamFilters_DNScache[$filter_revip]['L']) == 0) { + $SpamFilters_DNScache[$filter_revip]['L'] = + gethostbyname($filter_revip); + $SpamFilters_DNScache[$filter_revip]['T'] = + time() + $SpamFilters_CacheTTL; + } + + /** + * gethostbyname returns ip if resolved, or returns original + * host supplied to function if there is no resolution + */ + if ($SpamFilters_DNScache[$filter_revip]['L'] != $filter_revip) { + return 1; + } + } + } + } + return 0; +} + +/** + * Loads the filters from the user preferences + * @return array All the user filters + * @access private + */ +function load_filters() { + global $data_dir, $username; + + $filters = array(); + for ($i = 0; $fltr = getPref($data_dir, $username, 'filter' . $i); $i++) { + $ary = explode(',', $fltr); + $filters[$i]['where'] = $ary[0]; + $filters[$i]['what'] = str_replace('###COMMA###', ',', $ary[1]); + $filters[$i]['folder'] = $ary[2]; + } + return $filters; +} + +/** + * Loads the Spam Filters and checks the preferences for the enabled status + * @return array All the spam filters + * @access private + */ +function load_spam_filters() { + global $data_dir, $username, $SpamFilters_ShowCommercial; + + if ($SpamFilters_ShowCommercial) { + $filters['MAPS RBL']['prefname'] = 'filters_spam_maps_rbl'; + $filters['MAPS RBL']['name'] = 'MAPS Realtime Blackhole List'; + $filters['MAPS RBL']['link'] = 'http://www.mail-abuse.org/rbl/'; + $filters['MAPS RBL']['dns'] = 'blackholes.mail-abuse.org'; + $filters['MAPS RBL']['result'] = '127.0.0.2'; + $filters['MAPS RBL']['comment'] = + _("COMMERCIAL - This list contains servers that are verified spam senders. It is a pretty reliable list to scan spam from."); + + $filters['MAPS RSS']['prefname'] = 'filters_spam_maps_rss'; + $filters['MAPS RSS']['name'] = 'MAPS Relay Spam Stopper'; + $filters['MAPS RSS']['link'] = 'http://www.mail-abuse.org/rss/'; + $filters['MAPS RSS']['dns'] = 'relays.mail-abuse.org'; + $filters['MAPS RSS']['result'] = '127.0.0.2'; + $filters['MAPS RSS']['comment'] = + _("COMMERCIAL - Servers that are configured (or misconfigured) to allow spam to be relayed through their system will be banned with this. Another good one to use."); + + $filters['MAPS DUL']['prefname'] = 'filters_spam_maps_dul'; + $filters['MAPS DUL']['name'] = 'MAPS Dial-Up List'; + $filters['MAPS DUL']['link'] = 'http://www.mail-abuse.org/dul/'; + $filters['MAPS DUL']['dns'] = 'dialups.mail-abuse.org'; + $filters['MAPS DUL']['result'] = '127.0.0.3'; + $filters['MAPS DUL']['comment'] = + _("COMMERCIAL - Dial-up users are often filtered out since they should use their ISP's mail servers to send mail. Spammers typically get a dial-up account and send spam directly from there."); + + $filters['MAPS RBLplus-RBL']['prefname'] = 'filters_spam_maps_rblplus_rbl'; + $filters['MAPS RBLplus-RBL']['name'] = 'MAPS RBL+ RBL List'; + $filters['MAPS RBLplus-RBL']['link'] = 'http://www.mail-abuse.org/'; + $filters['MAPS RBLplus-RBL']['dns'] = 'rbl-plus.mail-abuse.org'; + $filters['MAPS RBLplus-RBL']['result'] = '127.0.0.2'; + $filters['MAPS RBLplus-RBL']['comment'] = + _("COMMERCIAL - RBL+ Blackhole entries."); + + $filters['MAPS RBLplus-RSS']['prefname'] = 'filters_spam_maps_rblplus_rss'; + $filters['MAPS RBLplus-RSS']['name'] = 'MAPS RBL+ List RSS entries'; + $filters['MAPS RBLplus-RSS']['link'] = 'http://www.mail-abuse.org/'; + $filters['MAPS RBLplus-RSS']['dns'] = 'rbl-plus.mail-abuse.org'; + $filters['MAPS RBLplus-RSS']['result'] = '127.0.0.2'; + $filters['MAPS RBLplus-RSS']['comment'] = + _("COMMERCIAL - RBL+ OpenRelay entries."); + + $filters['MAPS RBLplus-DUL']['prefname'] = 'filters_spam_maps_rblplus_dul'; + $filters['MAPS RBLplus-DUL']['name'] = 'MAPS RBL+ List DUL entries'; + $filters['MAPS RBLplus-DUL']['link'] = 'http://www.mail-abuse.org/'; + $filters['MAPS RBLplus-DUL']['dns'] = 'rbl-plus.mail-abuse.org'; + $filters['MAPS RBLplus-DUL']['result'] = '127.0.0.3'; + $filters['MAPS RBLplus-DUL']['comment'] = + _("COMMERCIAL - RBL+ Dial-up entries."); + } + + $filters['FiveTen Direct']['prefname'] = 'filters_spam_fiveten_src'; + $filters['FiveTen Direct']['name'] = 'Five-Ten-sg.com Direct SPAM Sources'; + $filters['FiveTen Direct']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen Direct']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen Direct']['result'] = '127.0.0.2'; + $filters['FiveTen Direct']['comment'] = + _("FREE - Five-Ten-sg.com - Direct SPAM sources."); + + $filters['FiveTen DUL']['prefname'] = 'filters_spam_fiveten_dul'; + $filters['FiveTen DUL']['name'] = 'Five-Ten-sg.com DUL Lists'; + $filters['FiveTen DUL']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen DUL']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen DUL']['result'] = '127.0.0.3'; + $filters['FiveTen DUL']['comment'] = + _("FREE - Five-Ten-sg.com - Dial-up lists - includes some DSL IPs."); + + $filters['FiveTen Unc. OptIn']['prefname'] = 'filters_spam_fiveten_oi'; + $filters['FiveTen Unc. OptIn']['name'] = 'Five-Ten-sg.com Unconfirmed OptIn Lists'; + $filters['FiveTen Unc. OptIn']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen Unc. OptIn']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen Unc. OptIn']['result'] = '127.0.0.4'; + $filters['FiveTen Unc. OptIn']['comment'] = + _("FREE - Five-Ten-sg.com - Bulk mailers that do not use confirmed opt-in."); + + $filters['FiveTen Others']['prefname'] = 'filters_spam_fiveten_oth'; + $filters['FiveTen Others']['name'] = 'Five-Ten-sg.com Other Misc. Servers'; + $filters['FiveTen Others']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen Others']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen Others']['result'] = '127.0.0.5'; + $filters['FiveTen Others']['comment'] = + _("FREE - Five-Ten-sg.com - Other misc. servers."); + + $filters['FiveTen Single Stage']['prefname'] = 'filters_spam_fiveten_ss'; + $filters['FiveTen Single Stage']['name'] = 'Five-Ten-sg.com Single Stage Servers'; + $filters['FiveTen Single Stage']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen Single Stage']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen Single Stage']['result'] = '127.0.0.6'; + $filters['FiveTen Single Stage']['comment'] = + _("FREE - Five-Ten-sg.com - Single Stage servers."); + + $filters['FiveTen SPAM Support']['prefname'] = 'filters_spam_fiveten_supp'; + $filters['FiveTen SPAM Support']['name'] = 'Five-Ten-sg.com SPAM Support Servers'; + $filters['FiveTen SPAM Support']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen SPAM Support']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen SPAM Support']['result'] = '127.0.0.7'; + $filters['FiveTen SPAM Support']['comment'] = + _("FREE - Five-Ten-sg.com - SPAM Support servers."); + + $filters['FiveTen Web forms']['prefname'] = 'filters_spam_fiveten_wf'; + $filters['FiveTen Web forms']['name'] = 'Five-Ten-sg.com Web Form IPs'; + $filters['FiveTen Web forms']['link'] = 'http://www.five-ten-sg.com/blackhole.php'; + $filters['FiveTen Web forms']['dns'] = 'blackholes.five-ten-sg.com'; + $filters['FiveTen Web forms']['result'] = '127.0.0.8'; + $filters['FiveTen Web forms']['comment'] = + _("FREE - Five-Ten-sg.com - Web Form IPs."); + + $filters['Dorkslayers']['prefname'] = 'filters_spam_dorks'; + $filters['Dorkslayers']['name'] = 'Dorkslayers Lists'; + $filters['Dorkslayers']['link'] = 'http://www.dorkslayers.com'; + $filters['Dorkslayers']['dns'] = 'orbs.dorkslayers.com'; + $filters['Dorkslayers']['result'] = '127.0.0.2'; + $filters['Dorkslayers']['comment'] = + _("FREE - Dorkslayers appears to include only really bad open relays outside the US to avoid being sued. Interestingly enough, their website recommends you NOT use their service."); + + $filters['SPAMhaus']['prefname'] = 'filters_spam_spamhaus'; + $filters['SPAMhaus']['name'] = 'SPAMhaus Lists'; + $filters['SPAMhaus']['link'] = 'http://www.spamhaus.org'; + $filters['SPAMhaus']['dns'] = 'sbl.spamhaus.org'; + $filters['SPAMhaus']['result'] = '127.0.0.6'; + $filters['SPAMhaus']['comment'] = + _("FREE - SPAMhaus - A list of well-known SPAM sources."); + + $filters['SPAMcop']['prefname'] = 'filters_spam_spamcop'; + $filters['SPAMcop']['name'] = 'SPAM Cop Lists'; + $filters['SPAMcop']['link'] = 'http://spamcop.net/bl.shtml'; + $filters['SPAMcop']['dns'] = 'bl.spamcop.net'; + $filters['SPAMcop']['result'] = '127.0.0.2'; + $filters['SPAMcop']['comment'] = + _("FREE, for now - SpamCop - An interesting solution that lists servers that have a very high spam to legit email ratio (85 percent or more)."); + + $filters['dev.null.dk']['prefname'] = 'filters_spam_devnull'; + $filters['dev.null.dk']['name'] = 'dev.null.dk Lists'; + $filters['dev.null.dk']['link'] = 'http://dev.null.dk/'; + $filters['dev.null.dk']['dns'] = 'dev.null.dk'; + $filters['dev.null.dk']['result'] = '127.0.0.2'; + $filters['dev.null.dk']['comment'] = + _("FREE - dev.null.dk - I don't have any detailed info on this list."); + + $filters['visi.com']['prefname'] = 'filters_spam_visi'; + $filters['visi.com']['name'] = 'visi.com Relay Stop List'; + $filters['visi.com']['link'] = 'http://relays.visi.com'; + $filters['visi.com']['dns'] = 'relays.visi.com'; + $filters['visi.com']['result'] = '127.0.0.2'; + $filters['visi.com']['comment'] = + _("FREE - visi.com - Relay Stop List. Very conservative OpenRelay List."); + + $filters['ahbl.org Open Relays']['prefname'] = 'filters_spam_2mb_or'; + $filters['ahbl.org Open Relays']['name'] = 'ahbl.org Open Relays List'; + $filters['ahbl.org Open Relays']['link'] = 'http://www.ahbl.org/'; + $filters['ahbl.org Open Relays']['dns'] = 'dnsbl.ahbl.org'; + $filters['ahbl.org Open Relays']['result'] = '127.0.0.2'; + $filters['ahbl.org Open Relays']['comment'] = + _("FREE - ahbl.org Open Relays - Another list of Open Relays."); + + $filters['ahbl.org SPAM Source']['prefname'] = 'filters_spam_2mb_ss'; + $filters['ahbl.org SPAM Source']['name'] = 'ahbl.org SPAM Source List'; + $filters['ahbl.org SPAM Source']['link'] = 'http://www.ahbl.org/'; + $filters['ahbl.org SPAM Source']['dns'] = 'dnsbl.ahbl.org'; + $filters['ahbl.org SPAM Source']['result'] = '127.0.0.4'; + $filters['ahbl.org SPAM Source']['comment'] = + _("FREE - ahbl.org SPAM Source - List of Direct SPAM Sources."); + + $filters['ahbl.org SPAM ISPs']['prefname'] = 'filters_spam_2mb_isp'; + $filters['ahbl.org SPAM ISPs']['name'] = 'ahbl.org SPAM-friendly ISP List'; + $filters['ahbl.org SPAM ISPs']['link'] = 'http://www.ahbl.org/'; + $filters['ahbl.org SPAM ISPs']['dns'] = 'dnsbl.ahbl.org'; + $filters['ahbl.org SPAM ISPs']['result'] = '127.0.0.7'; + $filters['ahbl.org SPAM ISPs']['comment'] = + _("FREE - ahbl.org SPAM ISPs - List of SPAM-friendly ISPs."); + + $filters['Leadmon DUL']['prefname'] = 'filters_spam_lm_dul'; + $filters['Leadmon DUL']['name'] = 'Leadmon.net DUL List'; + $filters['Leadmon DUL']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon DUL']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon DUL']['result'] = '127.0.0.2'; + $filters['Leadmon DUL']['comment'] = + _("FREE - Leadmon DUL - Another list of Dial-up or otherwise dynamically assigned IPs."); + + $filters['Leadmon SPAM Source']['prefname'] = 'filters_spam_lm_ss'; + $filters['Leadmon SPAM Source']['name'] = 'Leadmon.net SPAM Source List'; + $filters['Leadmon SPAM Source']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon SPAM Source']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon SPAM Source']['result'] = '127.0.0.3'; + $filters['Leadmon SPAM Source']['comment'] = + _("FREE - Leadmon SPAM Source - List of IPs Leadmon.net has received SPAM directly from."); + + $filters['Leadmon Bulk Mailers']['prefname'] = 'filters_spam_lm_bm'; + $filters['Leadmon Bulk Mailers']['name'] = 'Leadmon.net Bulk Mailers List'; + $filters['Leadmon Bulk Mailers']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon Bulk Mailers']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon Bulk Mailers']['result'] = '127.0.0.4'; + $filters['Leadmon Bulk Mailers']['comment'] = + _("FREE - Leadmon Bulk Mailers - Bulk mailers that do not require confirmed opt-in or that have allowed known spammers to become clients and abuse their services."); + + $filters['Leadmon Open Relays']['prefname'] = 'filters_spam_lm_or'; + $filters['Leadmon Open Relays']['name'] = 'Leadmon.net Open Relays List'; + $filters['Leadmon Open Relays']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon Open Relays']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon Open Relays']['result'] = '127.0.0.5'; + $filters['Leadmon Open Relays']['comment'] = + _("FREE - Leadmon Open Relays - Single Stage Open Relays that are not listed on other active RBLs."); + + $filters['Leadmon Multi-stage']['prefname'] = 'filters_spam_lm_ms'; + $filters['Leadmon Multi-stage']['name'] = 'Leadmon.net Multi-Stage Relay List'; + $filters['Leadmon Multi-stage']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon Multi-stage']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon Multi-stage']['result'] = '127.0.0.6'; + $filters['Leadmon Multi-stage']['comment'] = + _("FREE - Leadmon Multi-stage - Multi-Stage Open Relays that are not listed on other active RBLs and that have sent SPAM to Leadmon.net."); + + $filters['Leadmon SpamBlock']['prefname'] = 'filters_spam_lm_sb'; + $filters['Leadmon SpamBlock']['name'] = 'Leadmon.net SpamBlock Sites List'; + $filters['Leadmon SpamBlock']['link'] = 'http://www.leadmon.net/spamguard/'; + $filters['Leadmon SpamBlock']['dns'] = 'spamguard.leadmon.net'; + $filters['Leadmon SpamBlock']['result'] = '127.0.0.7'; + $filters['Leadmon SpamBlock']['comment'] = + _("FREE - Leadmon SpamBlock - Sites on this listing have sent Leadmon.net direct SPAM from IPs in netblocks where the entire block has no DNS mappings. It's a list of BLOCKS of IPs being used by people who have SPAMmed Leadmon.net."); + + $filters['NJABL Open Relays']['prefname'] = 'filters_spam_njabl_or'; + $filters['NJABL Open Relays']['name'] = 'NJABL Open Relay/Direct Spam Source List'; + $filters['NJABL Open Relays']['link'] = 'http://www.njabl.org/'; + $filters['NJABL Open Relays']['dns'] = 'dnsbl.njabl.org'; + $filters['NJABL Open Relays']['result'] = '127.0.0.2'; + $filters['NJABL Open Relays']['comment'] = + _("FREE, for now - Not Just Another Blacklist - Both Open Relays and Direct SPAM Sources."); + + $filters['NJABL DUL']['prefname'] = 'filters_spam_njabl_dul'; + $filters['NJABL DUL']['name'] = 'NJABL Dial-ups List'; + $filters['NJABL DUL']['link'] = 'http://www.njabl.org/'; + $filters['NJABL DUL']['dns'] = 'dnsbl.njabl.org'; + $filters['NJABL DUL']['result'] = '127.0.0.3'; + $filters['NJABL DUL']['comment'] = + _("FREE, for now - Not Just Another Blacklist - Dial-up IPs."); + + foreach ($filters as $Key => $Value) { + $filters[$Key]['enabled'] = (bool)getPref($data_dir, $username, $filters[$Key]['prefname']); + } + + return $filters; +} + +/** + * Removes a User filter + * @param int $id ID of the filter to remove + * @access private + */ +function remove_filter ($id) { + global $data_dir, $username; + + while ($nextFilter = getPref($data_dir, $username, 'filter' . ($id + 1))) { + setPref($data_dir, $username, 'filter' . $id, $nextFilter); + $id ++; + } + + removePref($data_dir, $username, 'filter' . $id); +} + +/** + * Swaps two filters + * @param int $id1 ID of first filter to swap + * @param int $id2 ID of second filter to swap + * @access private + */ +function filter_swap($id1, $id2) { + global $data_dir, $username; + + $FirstFilter = getPref($data_dir, $username, 'filter' . $id1); + $SecondFilter = getPref($data_dir, $username, 'filter' . $id2); + + if ($FirstFilter && $SecondFilter) { + setPref($data_dir, $username, 'filter' . $id2, $FirstFilter); + setPref($data_dir, $username, 'filter' . $id1, $SecondFilter); + } +} + +/** + * This updates the filter rules when renaming or deleting folders + * @param array $args + * @access private + */ +function update_for_folder ($args) { + $old_folder = $args[0]; + $new_folder = $args[2]; + $action = $args[1]; + global $plugins, $data_dir, $username; + $filters = array(); + $filters = load_filters(); + $filter_count = count($filters); + $p = 0; + for ($i = 0; $i < $filter_count; $i++) { + if (!empty($filters)) { + if ($old_folder == $filters[$i]['folder']) { + if ($action == 'rename') { + $filters[$i]['folder'] = $new_folder; + setPref($data_dir, $username, 'filter'.$i, + $filters[$i]['where'].','.$filters[$i]['what'].','.$new_folder); + } + elseif ($action == 'delete') { + remove_filter($p); + $p = $p-1; + } + } + $p++; + } + } +} + +/** + * Display formated error message + * @param string $string text message + * @return string html formated text message + * @access private + */ +function do_error($string) { + global $color; + echo "

            "; + echo $string; + echo "

            \n"; +} diff --git a/ehcp/webmail2/plugins/filters/index.php b/ehcp/webmail2/plugins/filters/index.php new file mode 100644 index 0000000..14d1802 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/filters/options.php b/ehcp/webmail2/plugins/filters/options.php new file mode 100644 index 0000000..826c643 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/options.php @@ -0,0 +1,279 @@ +
            '._("Saved Scan type")."
            \n"; +} + + $filters = load_filters(); + $filters_user_scan = getPref($data_dir, $username, 'filters_user_scan'); + + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + '
            ' . _("Options") . ' - ' . _("Message Filtering") . '
            ' , + 'left', $color[0] + ) + ), + 'center', '', 'width="95%" border="0" cellpadding="2" cellspacing="0"' + ) . + '
            '. + '
            '. + html_tag( 'table', '', '', '', 'border="0" cellpadding="2" cellspacing="0"' ) . + html_tag( 'tr' ) . + html_tag( 'th', _("What to Scan:"), 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + ''. + ''. + html_tag( 'td', '', 'left' ) . + ''. + '
            '. + '
            '. + + html_tag( 'div', '[' . _("New") . + '] - [' . _("Done") . ']' , + 'center' ) . '
            '; + + if (isset($action) && ($action == 'add' || $action == 'edit')) { + + $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + $boxes = sqimap_mailbox_list($imapConnection); + + for ($a = 0, $cnt = count($boxes); $a < $cnt; $a++) { + if (strtolower($boxes[$a]['formatted']) == 'inbox') { + unset($boxes[$a]); + } + } + + sqimap_logout($imapConnection); + if ( !isset($theid) ) { + $theid = count($filters); + } + echo html_tag( 'div', '', 'center' ) . + '
            '. + html_tag( 'table', '', '', '', 'border="0" cellpadding="2" cellspacing="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', _("Match:"), 'left' ) . + html_tag( 'td', '', 'left' ) . + ''. + ''. + ''. + html_tag( 'tr' ) . + html_tag( 'td', _("Contains:"), 'right' ) . + html_tag( 'td', '', 'left' ) . + ''. + ''. + ''. + html_tag( 'tr' ) . + html_tag( 'td', _("Move to:"), 'left' ) . + html_tag( 'td', '', 'left' ) . + ''. + ''. + ''. + ''. + ''. + '\n". + addHidden('theid', $theid). + ''. + '
            '; + + } + + echo html_tag( 'table', '', 'center', '', 'border="0" cellpadding="3" cellspacing="0"' ); + + for ($i=0, $num = count($filters); $i < $num; $i++) { + + $clr = (($i % 2)?$color[0]:$color[9]); + $fdr = ($folder_prefix)?str_replace($folder_prefix, "", $filters[$i]["folder"]):$filters[$i]["folder"]; + echo html_tag( 'tr', '', '', $clr ) . + html_tag( 'td', + '' . + "[" . _("Edit") . ']'. + '' , + 'left' ) . + html_tag( 'td', + '' . + "[" . _("Delete") . ']'. + '' , + 'left' ); + + if ($num > 1) { + echo html_tag( 'td', '', 'center' ) . '['; + if (isset($filters[$i + 1])) { + echo "" . _("Down") . ''; + if ($i > 0) { + echo ' | '; + } + } + if ($i > 0) { + echo "" . _("Up") . ''; + } + echo ']'; + } + echo html_tag( 'td', '-', 'left' ) . + html_tag( 'td', '', 'left' ); + printf( _("If %s contains %s then move to %s"), + ''.$filters[$i]['where'].'', + ''.$filters[$i]['what'].'', + ''.htmlspecialchars(imap_utf7_decode_local($fdr)).''); + echo ''; + + } + echo ''. + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', ' ', 'left' ) + ) , + 'center', '', 'width="80%" border="0" cellpadding="2" cellspacing="0"' ); + echo ''; +?> diff --git a/ehcp/webmail2/plugins/filters/setup.php b/ehcp/webmail2/plugins/filters/setup.php new file mode 100644 index 0000000..9f61aa1 --- /dev/null +++ b/ehcp/webmail2/plugins/filters/setup.php @@ -0,0 +1,188 @@ + _("Message Filters"), + 'url' => '../plugins/filters/options.php', + 'desc' => _("Filtering enables messages with different criteria to be automatically filtered into different folders for easier organization."), + 'js' => false + ); + + if ($AllowSpamFilters) { + $optpage_blocks[] = array( + 'name' => _("SPAM Filters"), + 'url' => '../plugins/filters/spamoptions.php', + 'desc' => _("SPAM filters allow you to select from various DNS based blacklists to detect junk email in your INBOX and move it to another folder (like Trash)."), + 'js' => false + ); + } +} +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/filters/spamoptions.php b/ehcp/webmail2/plugins/filters/spamoptions.php new file mode 100644 index 0000000..438c50d --- /dev/null +++ b/ehcp/webmail2/plugins/filters/spamoptions.php @@ -0,0 +1,239 @@ + $Value) { + $input = $spam_filters[$Key]['prefname'] . '_set'; + if ( sqgetGlobalVar($input,$input_key,SQ_POST) ) { + setPref( $data_dir, $username, $spam_filters[$Key]['prefname'],$input_key); + } else { + removePref($data_dir, $username, $spam_filters[$Key]['prefname']); + } + } +} + +$filters_spam_folder = getPref($data_dir, $username, 'filters_spam_folder'); +$filters_spam_scan = getPref($data_dir, $username, 'filters_spam_scan'); +$filters = load_filters(); + +echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'th', _("Spam Filtering"), 'center' ) + ) , + 'center', $color[0], 'width="95%" border="0" cellpadding="2" cellspacing="0"' ); + +if ($SpamFilters_YourHop == ' ') { + echo '
            ' . + html_tag( 'div', '' . + sprintf(_("WARNING! Tell the administrator to set the %s variable."), '"SpamFilters_YourHop"') . + '' , + 'center' ) . + '
            '; +} + + +if (isset($action) && $action == 'spam') { + $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + $boxes = sqimap_mailbox_list($imapConnection); + sqimap_logout($imapConnection); + $numboxes = count($boxes); + + for ($i = 0; $i < $numboxes && $filters_spam_folder == ''; $i++) { + if ((isset($boxes[$i]['flags'][0]) && $boxes[$i]['flags'][0] != 'noselect') && + (isset($boxes[$i]['flags'][1]) && $boxes[$i]['flags'][1] != 'noselect') && + (isset($boxes[$i]['flags'][2]) && $boxes[$i]['flags'][2] != 'noselect')) { + $filters_spam_folder = $boxes[$i]['unformatted']; + } + } + + echo '
            '. + '
            '. + html_tag( 'table', '', '', '', 'width="85%" border="0" cellpadding="2" cellspacing="0"' ) . + html_tag( 'tr' ) . + html_tag( 'th', _("Move spam to:"), 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + ''. + ''. + ''. + html_tag( 'tr', + html_tag( 'td', ' ' ) . + html_tag( 'td', + _("Moving spam directly to the trash may not be a good idea at first, since messages from friends and mailing lists might accidentally be marked as spam. Whatever folder you set this to, make sure that it gets cleaned out periodically, so that you don't have an excessively large mailbox hanging around.") , + 'left' ) + ) . + html_tag( 'tr' ) . + html_tag( 'th', _("What to Scan:"), 'right', '', 'nowrap' ) . + html_tag( 'td' ) . + ''. + ''. + ''. + html_tag( 'tr', + html_tag( 'td', ' ' ) . + html_tag( 'td', + _("The more messages scanned, the longer it takes. It's recommended to scan unread messages only. If a change to the filters is made, it's recommended to set it to scan all messages, then go view the INBOX, then come back and set it to scan unread messages only. That way, the new spam filters will be applied and even the spam you didn't catch with the old filters will be scanned.") , + 'left' ) + ); + + $spam_filters = load_spam_filters(); + + foreach ($spam_filters as $Key => $Value) { + echo html_tag( 'tr' ) . + html_tag( 'th', $Key, 'right', '', 'nowrap' ) ."\n" . + html_tag( 'td' ) . + ' - '; + if ($spam_filters[$Key]['link']) { + echo ''; + } + echo $spam_filters[$Key]['name']; + if ($spam_filters[$Key]['link']) { + echo ''; + } + echo '' . + html_tag( 'tr', + html_tag( 'td', ' ' ) . + html_tag( 'td', $spam_filters[$Key]['comment'], 'left' ) + ) . "\n"; + + } + echo html_tag( 'tr', + html_tag( 'td', '', 'center', '', 'colspan="2"' ) + ) . "\n" . + ''. + '
            '. + '
            '; +} else { + // action is not set or action is not spam + echo html_tag( 'p', '', 'center' ) . + '[' . _("Edit") . ']' . + ' - [' . _("Done") . ']

            '; + printf( _("Spam is sent to %s."), ($filters_spam_folder?''.htmlspecialchars(imap_utf7_decode_local($filters_spam_folder)).'':'['._("not set yet").']' ) ); + echo '
            '; + printf( _("Spam scan is limited to %s."), '' . ( ($filters_spam_scan == 'new')?_("Unread messages only"):_("All messages") ) . '' ); + echo '

            '. + '\n"; + + $spam_filters = load_spam_filters(); + + foreach ($spam_filters as $Key => $Value) { + echo html_tag( 'tr' ) . + html_tag( 'th', '', 'center' ); + + if ($spam_filters[$Key]['enabled']) { + echo _("ON"); + } else { + echo _("OFF"); + } + + echo '' . + html_tag( 'td', ' - ', 'left' ) . + html_tag( 'td', '', 'left' ); + + if ($spam_filters[$Key]['link']) { + echo ''; + } + + echo $spam_filters[$Key]['name']; + if ($spam_filters[$Key]['link']) { + echo ''; + } + echo "\n"; + } + echo '
            '; +} +?> + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/fortune/README b/ehcp/webmail2/plugins/fortune/README new file mode 100644 index 0000000..e201948 --- /dev/null +++ b/ehcp/webmail2/plugins/fortune/README @@ -0,0 +1,11 @@ +Simple SquirrelMail plugin that displays a quote above the message listing. + +Original code contributed by paulm@spider.org, now maintained by the +SquirrelMail Project Team. + +Plugin requires /usr/games/fortune or any other similar program, that outputs +short text messages. If you are running PHP in safe_mode, the path to this +program must be present in the PHP safe_mode_exec_dir setting. If you are +running a chrooted webserver, program must be present inside of your +chroot jail. + diff --git a/ehcp/webmail2/plugins/fortune/fortune_functions.php b/ehcp/webmail2/plugins/fortune/fortune_functions.php new file mode 100644 index 0000000..cde903a --- /dev/null +++ b/ehcp/webmail2/plugins/fortune/fortune_functions.php @@ -0,0 +1,71 @@ +\n". + "
            \n". + "
            \n"; + echo '
            '; + echo '
            ' . _("Today's Fortune") . '

            ' .
            +        $sMsg .
            +        '
            '; + + echo '
            '; +} + + +/** + * Add fortune options + * @access private + */ +function fortune_show_options() { + + global $optpage_data, $username, $data_dir, $fortune_visible; + $fortune_visible = getPref($data_dir, $username, 'fortune_visible'); + + $optgrp = _("Fortunes"); + $optvals = array(); + + $optvals[] = array( + 'name' => 'fortune_visible', + 'caption' => _("Show fortunes at top of mailbox"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + + $optpage_data['grps']['fortune'] = $optgrp; + $optpage_data['vals']['fortune'] = $optvals; +} + diff --git a/ehcp/webmail2/plugins/fortune/index.php b/ehcp/webmail2/plugins/fortune/index.php new file mode 100644 index 0000000..2c20d92 --- /dev/null +++ b/ehcp/webmail2/plugins/fortune/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/fortune/setup.php b/ehcp/webmail2/plugins/fortune/setup.php new file mode 100644 index 0000000..aab3b15 --- /dev/null +++ b/ehcp/webmail2/plugins/fortune/setup.php @@ -0,0 +1,55 @@ +".htmlspecialchars($query).""; + fputs ($imap_stream, $query); + $response = sqimap_read_data_list($imap_stream, $sid, false, $responses, $message); + array_push($response, $message); + return $response; +} + +function print_response($response) { + foreach($response as $index=>$value) { + if (is_array($value)) { + print_response($value); + } + else { + print htmlspecialchars($value)."
            \n"; + } + } +} + +/** + * Check if plugin is enabled + * @param string $plugin_name plugin name + * @return boolean + */ +function info_is_plugin_enabled($plugin_name) { + global $plugins; + + if (empty($plugins) || ! is_array($plugins)) + return false; + + if ( in_array($plugin_name,$plugins) ) { + return true; + } else { + return false; + } +} diff --git a/ehcp/webmail2/plugins/info/index.php b/ehcp/webmail2/plugins/info/index.php new file mode 100644 index 0000000..57e10f7 --- /dev/null +++ b/ehcp/webmail2/plugins/info/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/info/options.php b/ehcp/webmail2/plugins/info/options.php new file mode 100644 index 0000000..4833011 --- /dev/null +++ b/ehcp/webmail2/plugins/info/options.php @@ -0,0 +1,182 @@ +'. + _("Plugin is disabled."). + '

            '; + exit; +} + +/* GLOBALS */ +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); + +sqgetGlobalVar('submit', $submit, SQ_POST); + +for($i = 0; $i <= 9; $i++){ + $varc = 'CHECK_TEST_'.$i; + sqgetGlobalVar($varc, $$varc, SQ_POST); + $vart = 'TEST_'.$i; + sqgetGlobalVar($vart, $$vart, SQ_POST); +} + +/* END GLOBALS */ + +$imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$caps_array = get_caps($imap_stream); +$list = array ( + 'TEST_0', + 'TEST_1', + 'TEST_2', + 'TEST_3', + 'TEST_4', + 'TEST_5', + 'TEST_6', + 'TEST_7', + 'TEST_8', + 'TEST_9'); + +print "
            IMAP server information

            \n"; +print "

            \n"; +print "
            \n"; +print "
            Server Capability response:
            \n"; + +foreach($caps_array[0] as $value) { + print htmlspecialchars($value); +} + +print "
            \n"; + +if (!isset($submit) || $submit == 'default') { + print "
            Select the IMAP commands you would like to run. + Most commands require a selected mailbox so the SELECT-command is already setup. + You can clear all the commands and test your own IMAP command strings. The + commands are executed in order. The default values are simple IMAP commands using + your default_charset and folder_prefix from SquirrelMail when needed.

            +
            NOTE: These commands + are live, any changes made will effect your current + email account.

            \n"; + if (!isset($submit)) { + $submit = ''; + } +} +else { + print 'folder_prefix = ' . htmlspecialchars($folder_prefix) . "
            \n". + 'default_charset = ' . htmlspecialchars($default_charset) . "\n"; +} + +print "

            \n"; + + +if ($submit == 'submit') { + $type = array(); + for ($i=0;$i "SELECT $mailbox", + 'TEST_1' => "STATUS $mailbox (MESSAGES RECENT)", + 'TEST_2' => "EXAMINE $mailbox", + 'TEST_3' => "SEARCH CHARSET \"$default_charset\" ALL *", + 'TEST_4' => "THREAD REFERENCES $default_charset ALL", + 'TEST_5' => "SORT (DATE) $default_charset ALL", + 'TEST_6' => "FETCH 1:* (FLAGS BODY[HEADER.FIELDS (FROM DATE TO)])", + 'TEST_7' => "LSUB \"$folder_prefix\" \"*%\"", + 'TEST_8' => "LIST \"$folder_prefix*\" \"*\"", + 'TEST_9' => ""); +} + +print "
            \n"; +print "
            \n"; +print "\n"; +print "
            SelectTest NameIMAP command string
            \n"; + +foreach($type as $index=>$value) { + print "
            $index\n"; + print addInput($index, $value, 60); +} + +print "

            \n"; +print "
            ". +addSubmit('submit','submit'). +addSubmit('clear','submit'). +addSubmit('default','submit'). +"

            \n"; + +$tests = array(); + +if ($submit == 'submit') { + foreach ($type as $index=>$value) { + $check = "CHECK_".$index; + if (isset($$check)) { + $type[$index] = $$index; + array_push($tests, $index); + } + } + for ($i=0;$i\n"; + print ""; + print "\n"; + $response = imap_test($imap_stream, $type[$tests[$i]]); + print "\n"; + print "
            ".$tests[$i]."
            ". + "Request:
            ". + "Response:
            "; + print_response($response); + print "

            \n"; + } +} + print "
            "; + sqimap_logout($imap_stream); + do_hook('info_bottom'); +?> diff --git a/ehcp/webmail2/plugins/info/setup.php b/ehcp/webmail2/plugins/info/setup.php new file mode 100644 index 0000000..38ce940 --- /dev/null +++ b/ehcp/webmail2/plugins/info/setup.php @@ -0,0 +1,31 @@ + _("IMAP server information"), + 'url' => '../plugins/info/options.php', + 'desc' => _("Run some test IMAP commands, displaying both the command and the result. These tests use the SquirrelMail IMAP commands and your current SquirrelMail configuration. Custom command strings can be used."), + 'js' => false + ); +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/listcommands/README b/ehcp/webmail2/plugins/listcommands/README new file mode 100644 index 0000000..c407be7 --- /dev/null +++ b/ehcp/webmail2/plugins/listcommands/README @@ -0,0 +1,38 @@ +List Commands plugin + +This plugin gives the user a menu of mailinglist options such as +(un)subscribe, help and archives when viewing messages from compliant +mailinglists. + + +Description +=========== + +The plugin is an implementation of RFC 2369, "The Use of URLs as Meta-Syntax +for Core Mail List Commands and their Transport through Message Header Fields", +to be found at ftp://nis.nsf.net/internet/documents/rfc/rfc2369.txt. + +Compliant mailinglistservers add extra headers with each message they send out +with information about how to (un)subscribe, get help or contact the list +owner. This can either be a web location or an emailaddress. In the latter +case, one needs to send an email to that address in order to complete an action +like subscribing. + +The information in these headers is used to generate an extra menuline on +messages containing one or more of these headers to help users taking advantage +of the features offered. + + +Installation +============ + +Go to the main directory, run configure and add the plugin. + + +Acknowledgements +================ +The listcommands plugin has been originally created by Thijs Kinkhorst and is +now under the control of the SquirrelMail Project Team. + +I'd like to thank Peter Walker, Wouter Teepe, Jason Edwards and Phillipe Mingo +for their useful contributions to this plugin. diff --git a/ehcp/webmail2/plugins/listcommands/index.php b/ehcp/webmail2/plugins/listcommands/index.php new file mode 100644 index 0000000..b3b04f5 --- /dev/null +++ b/ehcp/webmail2/plugins/listcommands/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/listcommands/mailout.php b/ehcp/webmail2/plugins/listcommands/mailout.php new file mode 100644 index 0000000..4ce1a95 --- /dev/null +++ b/ehcp/webmail2/plugins/listcommands/mailout.php @@ -0,0 +1,84 @@ +'. + ''; + +$idents = get_identities(); + +echo html_tag('p', '', 'center' ) . _("From:") . ' '; + +if (count($idents) > 1) { + echo '' . "\n" ; +} else { + echo htmlspecialchars('"'.$idents[0]['full_name'].'" <'.$idents[0]['email_address'].'>'); +} + +echo '

            ' +. '' +. '' +. '' +. '' +. '

            ' +. ''; + diff --git a/ehcp/webmail2/plugins/listcommands/setup.php b/ehcp/webmail2/plugins/listcommands/setup.php new file mode 100644 index 0000000..3c14f46 --- /dev/null +++ b/ehcp/webmail2/plugins/listcommands/setup.php @@ -0,0 +1,89 @@ + _("Post to List"), + 'reply' => _("Reply to List"), + 'subscribe' => _("Subscribe"), + 'unsubscribe' => _("Unsubscribe"), + 'archive' => _("List Archives"), + 'owner' => _("Contact Listowner"), + 'help' => _("Help")); + $output = array(); + + foreach ($message->rfc822_header->mlist as $cmd => $actions) { + + /* I don't know this action... skip it */ + if ( !array_key_exists($cmd, $fieldsdescr) ) { + continue; + } + + /* proto = {mailto,href} */ + $aActionKeys = array_keys($actions); + $proto = array_shift($aActionKeys); + $act = array_shift($actions); + + if ($proto == 'mailto') { + + if (($cmd == 'post') || ($cmd == 'owner')) { + $url = 'src/compose.php?' . + (isset($startMessage)?'startMessage='.$startMessage.'&':''); + } else { + $url = "plugins/listcommands/mailout.php?action=$cmd&"; + } + $url .= 'send_to=' . str_replace('?','&', $act); + + $output[] = makeComposeLink($url, $fieldsdescr[$cmd]); + + if ($cmd == 'post') { + $url .= '&passed_id='.$passed_id. + '&mailbox='.urlencode($mailbox). + (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:''); + $url .= '&smaction=reply'; + + $output[] = makeComposeLink($url, $fieldsdescr['reply']); + } + } else if ($proto == 'href') { + $output[] = '' + . $fieldsdescr[$cmd] . ''; + } + } + + if (count($output) > 0) { + echo ''; + echo html_tag('td', '' . _("Mailing List") . ':  ', + 'right', '', 'valign="middle" width="20%"') . "\n"; + echo html_tag('td', '' . implode(' | ', $output) . '', + 'left', $color[0], 'valign="middle" width="80%"') . "\n"; + echo ''; + } +} + diff --git a/ehcp/webmail2/plugins/mail_fetch/README b/ehcp/webmail2/plugins/mail_fetch/README new file mode 100644 index 0000000..8e1e8e1 --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/README @@ -0,0 +1,148 @@ +Mail Fetch + +Downloads mail from a pop3 server to your SquirrelMail account. + +Features +======== + +* Copies messages from remote server +* Saves server, alias, username, and password in prefs file... +* Remembers where to resume downloading messages if + your pop server supports UIDL. +* Optionally deletes mail from the remote server. +* Allow an infinite amount of remote servers +* Optional to not save password - prompt on check +* Save messages into a local IMAP folder instead of INBOX +* Check mail during login (Needs SM 1.1.3 or older). +* Check mail during folder refreshes. +* Allows gettext translations. + + +Description +=========== + +Feel like grabbing your messages from a different mail server into +SquirrelMail? This might be able to help. + + +Configuration +============= + +Under the options you can add, delete or modify server list where +fetching mail. For each server you can set also username and password; +if you leave password blank, the password whore required when you fetch +mail. Make sure "Leave Mail On Server" is checked if you do not want +Mail_Fetch to delete it from the remote server. Once configured, +click 'Fetch' in the SquirrelMail menu to get your mail; you can fetch +mail from all server instead or from only one by selecting the options +dispayed. + +If you want to check mail periodicaly choose "Check mail during login" +or "Check mail during folder refresh". Of course passwords have to be +entered in order for this to work. + +In order to secure a little bit the system, pop3 passwords can be encrypted. +The encryption key may be defined in to places. The first, and more secure, +is in the httpd configuration as an enviromental variable called MF_TIT +only accesible from the SquirrelMail directory. + +the way you can do this from apache is adding the following directives to +httpd.conf (supposing that SquirrelMail is located at /usr/local) or an +included configuration file: + + + SetEnv MF_TIT "MailFetch Secure for SquirrelMail 1.x" + + +Of course, you should replace the text inside double quotes with the key +you want to (some kind of secret text). A please remember that the file +where you decided to place this must be root only readable. + +The second way is to edit functions.php and look for: + + if( !isset( $MF_TIT ) ) { + $MF_TIT = "MailFetch Secure for SquirrelMail 1.x"; + } + +Once again change the text "MailFetch Secure for SquirrelMail 1.x" +with a secret text. + +Please note that you must redefine passwords each time you change the key. + +To maintain compatibilty with older systems, mail_fetch can work with old +pref files, with no encrypted passwords. If this occurs, you'll see that +the "Encrypt Password" checkbox in the option page is not checked. If you +reenter account's passwords the system will switch to encrypted mode. + + +Security +======== + +By default, the user is not allowed to enter a non-standard POP3 port +number when configuring an external server with this plugin. This prevents +the use of this plugin as a port scanner against other servers. However, +if you need to allow users to access a POP3 service running on a non- +standard port, you may create a "config.php" file by copying "config_example.php" +and editing the list of allowable port numbers therein. If "ALL" is added +to the list of allowable port numbers, then there will be no restriction +on port numbers whatsoever. Be aware that although this may not represent +any security threat to servers elsewhere on the Internet that does not +already exist (other port scanners are freely available), if your server +resides on a network behind a firewall, this could allow a malicious user +to scan the servers and services behind your firewall that they'd normally +not have access to. + +The user will also not be allowed to enter server addresses starting +with "10.", "192.", "127." and "localhost" by default. This prevents users +from being able to scan an internal network for the presence of other servers +they are not allowed to access. If other server addresses should be banned, +or this list is too restrictive, you may create a "config.php" file by copying +"config_example.php" and then edit the list of blocked server addresses +therein. + + +Future Work +=========== + +* Add IMAP server stealing + +* Limit number of pop accounts + + +Installation +============ + +Go back to the main directory, run configure and add the plugin. + +Some plugin settings can be adjusted in config/mail_fetch_config.php or +plugins/mail_fetch/config.php files. + +See plugins/mail_fetch/config_sample.php + + +Note for mod_gzip users +======================= + +As fetching module shows information while fetching is taking place, it +is a good idea to disable compression for that operation. The way to do +this with mod_gzip is: + +mod_gzip_item_exclude file fetch.php + + +Note for Newmail Plugin users +============================= + +In order to Newmail plugin detect new mails during folder refreshes +make sure that Mail_Fetch is listed first that Newmail in the +SM configuration. To do so you only have to remove Newmail plugin +and then add it again. + + +Credits +======= + +This plugin has been originally created by Tyler Akins, with contributions +from Philippe Mingo, Tomaso Minelli and Joshua Pollak. It's now maintained +by the SquirrelMail Project Team. + diff --git a/ehcp/webmail2/plugins/mail_fetch/class.POP3.php b/ehcp/webmail2/plugins/mail_fetch/class.POP3.php new file mode 100644 index 0000000..33904a1 --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/class.POP3.php @@ -0,0 +1,656 @@ +BUFFER,"integer"); + if( !empty($server) ) { + // Do not allow programs to alter MAILSERVER + // if it is already specified. They can get around + // this if they -really- want to, so don't count on it. + if(empty($this->MAILSERVER)) + $this->MAILSERVER = $server; + } + if(!empty($timeout)) { + settype($timeout,"integer"); + $this->TIMEOUT = $timeout; + if (!ini_get('safe_mode')) + set_time_limit($timeout); + } + return true; + } + + function update_timer () { + if (!ini_get('safe_mode')) + set_time_limit($this->TIMEOUT); + return true; + } + + function connect ($server, $port = 110) { + // Opens a socket to the specified server. Unless overridden, + // port defaults to 110. Returns true on success, false on fail + + // If MAILSERVER is set, override $server with it's value + + if (!isset($port) || !$port) {$port = 110;} + if(!empty($this->MAILSERVER)) + $server = $this->MAILSERVER; + + if(empty($server)){ + $this->ERROR = "POP3 connect: " . _("No server specified"); + unset($this->FP); + return false; + } + + $fp = @fsockopen("$server", $port, $errno, $errstr); + + if(!$fp) { + $this->ERROR = "POP3 connect: " . _("Error ") . "[$errno] [$errstr]"; + unset($this->FP); + return false; + } + + socket_set_blocking($fp,-1); + $this->update_timer(); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) + error_log("POP3 SEND [connect: $server] GOT [$reply]",0); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 connect: " . _("Error ") . "[$reply]"; + unset($this->FP); + return false; + } + $this->FP = $fp; + $this->BANNER = $this->parse_banner($reply); + return true; + } + + function user ($user = "") { + // Sends the USER command, returns true or false + + if( empty($user) ) { + $this->ERROR = "POP3 user: " . _("no login ID submitted"); + return false; + } elseif(!isset($this->FP)) { + $this->ERROR = "POP3 user: " . _("connection not established"); + return false; + } else { + $reply = $this->send_cmd("USER $user"); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 user: " . _("Error ") . "[$reply]"; + return false; + } else + return true; + } + } + + function pass ($pass = "") { + // Sends the PASS command, returns # of msgs in mailbox, + // returns false (undef) on Auth failure + + if(empty($pass)) { + $this->ERROR = "POP3 pass: " . _("No password submitted"); + return false; + } elseif(!isset($this->FP)) { + $this->ERROR = "POP3 pass: " . _("connection not established"); + return false; + } else { + $reply = $this->send_cmd("PASS $pass"); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 pass: " . _("Authentication failed") . " [$reply]"; + $this->quit(); + return false; + } else { + // Auth successful. + $count = $this->last("count"); + $this->COUNT = $count; + return $count; + } + } + } + + function apop ($login,$pass) { + // Attempts an APOP login. If this fails, it'll + // try a standard login. YOUR SERVER MUST SUPPORT + // THE USE OF THE APOP COMMAND! + // (apop is optional per rfc1939) + + if(!isset($this->FP)) { + $this->ERROR = "POP3 apop: " . _("No connection to server"); + return false; + } elseif(!$this->ALLOWAPOP) { + $retVal = $this->login($login,$pass); + return $retVal; + } elseif(empty($login)) { + $this->ERROR = "POP3 apop: " . _("No login ID submitted"); + return false; + } elseif(empty($pass)) { + $this->ERROR = "POP3 apop: " . _("No password submitted"); + return false; + } else { + $banner = $this->BANNER; + if( (!$banner) or (empty($banner)) ) { + $this->ERROR = "POP3 apop: " . _("No server banner") . ' - ' . _("abort"); + $retVal = $this->login($login,$pass); + return $retVal; + } else { + $AuthString = $banner; + $AuthString .= $pass; + $APOPString = md5($AuthString); + $cmd = "APOP $login $APOPString"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 apop: " . _("apop authentication failed") . ' - ' . _("abort"); + $retVal = $this->login($login,$pass); + return $retVal; + } else { + // Auth successful. + $count = $this->last("count"); + $this->COUNT = $count; + return $count; + } + } + } + } + + function login ($login = "", $pass = "") { + // Sends both user and pass. Returns # of msgs in mailbox or + // false on failure (or -1, if the error occurs while getting + // the number of messages.) + + if( !isset($this->FP) ) { + $this->ERROR = "POP3 login: " . _("No connection to server"); + return false; + } else { + $fp = $this->FP; + if( !$this->user( $login ) ) { + // Preserve the error generated by user() + return false; + } else { + $count = $this->pass($pass); + if( (!$count) || ($count == -1) ) { + // Preserve the error generated by last() and pass() + return false; + } else + return $count; + } + } + } + + function top ($msgNum, $numLines = "0") { + // Gets the header and first $numLines of the msg body + // returns data in an array with each returned line being + // an array element. If $numLines is empty, returns + // only the header information, and none of the body. + + if(!isset($this->FP)) { + $this->ERROR = "POP3 top: " . _("No connection to server"); + return false; + } + $this->update_timer(); + + $fp = $this->FP; + $buffer = $this->BUFFER; + $cmd = "TOP $msgNum $numLines"; + fwrite($fp, "TOP $msgNum $numLines\r\n"); + $reply = fgets($fp, $buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { + @error_log("POP3 SEND [$cmd] GOT [$reply]",0); + } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 top: " . _("Error ") . "[$reply]"; + return false; + } + + $count = 0; + $MsgArray = array(); + + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) + { + $MsgArray[$count] = $line; + $count++; + $line = fgets($fp,$buffer); + if(empty($line)) { break; } + } + + return $MsgArray; + } + + function pop_list ($msgNum = "") { + // If called with an argument, returns that msgs' size in octets + // No argument returns an associative array of undeleted + // msg numbers and their sizes in octets + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 pop_list: " . _("No connection to server"); + return false; + } + $fp = $this->FP; + $Total = $this->COUNT; + if( (!$Total) or ($Total == -1) ) + { + return false; + } + if($Total == 0) + { + return array("0","0"); + // return -1; // mailbox empty + } + + $this->update_timer(); + + if(!empty($msgNum)) + { + $cmd = "LIST $msgNum"; + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { + @error_log("POP3 SEND [$cmd] GOT [$reply]",0); + } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 pop_list: " . _("Error ") . "[$reply]"; + return false; + } + list($junk,$num,$size) = preg_split('/\s+/',$reply); + return $size; + } + $cmd = "LIST"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) + { + $reply = $this->strip_clf($reply); + $this->ERROR = "POP3 pop_list: " . _("Error ") . "[$reply]"; + return false; + } + $MsgArray = array(); + $MsgArray[0] = $Total; + for($msgC=1;$msgC <= $Total; $msgC++) + { + if($msgC > $Total) { break; } + $line = fgets($fp,$this->BUFFER); + $line = $this->strip_clf($line); + if(strpos($line, '.') === 0) + { + $this->ERROR = "POP3 pop_list: " . _("Premature end of list"); + return false; + } + list($thisMsg,$msgSize) = preg_split('/\s+/',$line); + settype($thisMsg,"integer"); + if($thisMsg != $msgC) + { + $MsgArray[$msgC] = "deleted"; + } + else + { + $MsgArray[$msgC] = $msgSize; + } + } + return $MsgArray; + } + + function get ($msgNum) { + // Retrieve the specified msg number. Returns an array + // where each line of the msg is an array element. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 get: " . _("No connection to server"); + return false; + } + + $this->update_timer(); + + $fp = $this->FP; + $buffer = $this->BUFFER; + $cmd = "RETR $msgNum"; + $reply = $this->send_cmd($cmd); + + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 get: " . _("Error ") . "[$reply]"; + return false; + } + + $count = 0; + $MsgArray = array(); + + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) + { + if ( $line{0} == '.' ) { $line = substr($line,1); } + $MsgArray[$count] = $line; + $count++; + $line = fgets($fp,$buffer); + if(empty($line)) { break; } + } + return $MsgArray; + } + + function last ( $type = "count" ) { + // Returns the highest msg number in the mailbox. + // returns -1 on error, 0+ on success, if type != count + // results in a popstat() call (2 element array returned) + + $last = -1; + if(!isset($this->FP)) + { + $this->ERROR = "POP3 last: " . _("No connection to server"); + return $last; + } + + $reply = $this->send_cmd("STAT"); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 last: " . _("Error ") . "[$reply]"; + return $last; + } + + $Vars = preg_split('/\s+/',$reply); + $count = $Vars[1]; + $size = $Vars[2]; + settype($count,"integer"); + settype($size,"integer"); + if($type != "count") + { + return array($count,$size); + } + return $count; + } + + function reset () { + // Resets the status of the remote server. This includes + // resetting the status of ALL msgs to not be deleted. + // This method automatically closes the connection to the server. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 reset: " . _("No connection to server"); + return false; + } + $reply = $this->send_cmd("RSET"); + if(!$this->is_ok($reply)) + { + // The POP3 RSET command -never- gives a -ERR + // response - if it ever does, something truely + // wild is going on. + + $this->ERROR = "POP3 reset: " . _("Error ") . "[$reply]"; + @error_log("POP3 reset: ERROR [$reply]",0); + } + $this->quit(); + return true; + } + + function send_cmd ( $cmd = "" ) + { + // Sends a user defined command string to the + // POP server and returns the results. Useful for + // non-compliant or custom POP servers. + // Do NOT includ the \r\n as part of your command + // string - it will be appended automatically. + + // The return value is a standard fgets() call, which + // will read up to $this->BUFFER bytes of data, until it + // encounters a new line, or EOF, whichever happens first. + + // This method works best if $cmd responds with only + // one line of data. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 send_cmd: " . _("No connection to server"); + return false; + } + + if(empty($cmd)) + { + $this->ERROR = "POP3 send_cmd: " . _("Empty command string"); + return ""; + } + + $fp = $this->FP; + $buffer = $this->BUFFER; + $this->update_timer(); + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + return $reply; + } + + function quit() { + // Closes the connection to the POP3 server, deleting + // any msgs marked as deleted. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 quit: " . _("connection does not exist"); + return false; + } + $fp = $this->FP; + $cmd = "QUIT"; + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + fclose($fp); + unset($this->FP); + return true; + } + + function popstat () { + // Returns an array of 2 elements. The number of undeleted + // msgs in the mailbox, and the size of the mbox in octets. + + $PopArray = $this->last("array"); + + if($PopArray == -1) { return false; } + + if( (!$PopArray) or (empty($PopArray)) ) + { + return false; + } + return $PopArray; + } + + function uidl ($msgNum = "") + { + // Returns the UIDL of the msg specified. If called with + // no arguments, returns an associative array where each + // undeleted msg num is a key, and the msg's uidl is the element + // Array element 0 will contain the total number of msgs + + if(!isset($this->FP)) { + $this->ERROR = "POP3 uidl: " . _("No connection to server"); + return false; + } + + $fp = $this->FP; + $buffer = $this->BUFFER; + + if(!empty($msgNum)) { + $cmd = "UIDL $msgNum"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 uidl: " . _("Error ") . "[$reply]"; + return false; + } + list ($ok,$num,$myUidl) = preg_split('/\s+/',$reply); + return $myUidl; + } else { + $this->update_timer(); + + $UIDLArray = array(); + $Total = $this->COUNT; + $UIDLArray[0] = $Total; + + if ($Total < 1) + { + return $UIDLArray; + } + $cmd = "UIDL"; + fwrite($fp, "UIDL\r\n"); + $reply = fgets($fp, $buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 uidl: " . _("Error ") . "[$reply]"; + return false; + } + + $line = ""; + $count = 1; + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) { + list ($msg,$msgUidl) = preg_split('/\s+/',$line); + $msgUidl = $this->strip_clf($msgUidl); + if($count == $msg) { + $UIDLArray[$msg] = $msgUidl; + } + else + { + $UIDLArray[$count] = 'deleted'; + } + $count++; + $line = fgets($fp,$buffer); + } + } + return $UIDLArray; + } + + function delete ($msgNum = "") { + // Flags a specified msg as deleted. The msg will not + // be deleted until a quit() method is called. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 delete: " . _("No connection to server"); + return false; + } + if(empty($msgNum)) + { + $this->ERROR = "POP3 delete: " . _("No msg number submitted"); + return false; + } + $reply = $this->send_cmd("DELE $msgNum"); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 delete: " . _("Command failed ") . "[$reply]"; + return false; + } + return true; + } + + // ********************************************************* + + // The following methods are internal to the class. + + function is_ok ($cmd = "") { + // Return true or false on +OK or -ERR + + if( empty($cmd) ) + return false; + else + return( stripos($cmd, '+OK') !== false ); + } + + function strip_clf ($text = "") { + // Strips \r\n from server responses + + if(empty($text)) + return $text; + else { + $stripped = str_replace(array("\r","\n"),'',$text); + return $stripped; + } + } + + function parse_banner ( $server_text ) { + $outside = true; + $banner = ""; + $length = strlen($server_text); + for($count =0; $count < $length; $count++) + { + $digit = substr($server_text,$count,1); + if(!empty($digit)) { + if( (!$outside) && ($digit != '<') && ($digit != '>') ) + { + $banner .= $digit; + } + if ($digit == '<') + { + $outside = false; + } + if($digit == '>') + { + $outside = true; + } + } + } + $banner = $this->strip_clf($banner); // Just in case + return "<$banner>"; + } + +} // End class + +// For php4 compatibility +if (!function_exists("stripos")) { + function stripos($haystack, $needle){ + return strpos($haystack, stristr( $haystack, $needle )); + } +} + + diff --git a/ehcp/webmail2/plugins/mail_fetch/config_example.php b/ehcp/webmail2/plugins/mail_fetch/config_example.php new file mode 100644 index 0000000..23fcaf7 --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/config_example.php @@ -0,0 +1,62 @@ +
            '; + +echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Remote POP server Fetching Mail") . '', 'center', $color[0] ) + ) , + 'center', '', 'width="95%" cols="1"' ); + +// get $server_to_fetch from globals, if not set display a choice to the user +if (! sqgetGlobalVar('server_to_fetch', $server_to_fetch, SQ_POST) ) { + + echo '
            ' . + "
            " . + html_tag( 'table', '', 'center', '', 'width="70%" cols="2"' ) . + html_tag( 'tr' ) . + html_tag( 'td', _("Select Server:") . '    ', 'right' ) . + html_tag( 'td', '', 'left' ) . + '' . + '' . + ''; + + //if password not set, ask for it + for ($i=0;$i<$mailfetch_server_number;$i++) { + if ($mailfetch_pass_[$i]=='') { + echo html_tag( 'tr', + html_tag( 'td', _("Password for") . ' ' . + htmlspecialchars((($mailfetch_alias_[$i]=='')?$mailfetch_server_[$i]:$mailfetch_alias_[$i])) . + ':     ', + 'right' ) . + html_tag( 'td', '', 'left' ) + ); + } + } + echo html_tag( 'tr', + html_tag( 'td', ' ' ) . + html_tag( 'td', '', 'left' ) + ) . + '
            '; + exit(); +} + +if ( $server_to_fetch == 'all' ) { + $i_start = 0; + $i_stop = $mailfetch_server_number; +} else { + $i_start = $server_to_fetch; + $i_stop = $i_start+1; +} + +for ($i_loop=$i_start;$i_loop<$i_stop;$i_loop++) { + $mailfetch_server=$mailfetch_server_[$i_loop]; + $mailfetch_port=$mailfetch_port_[$i_loop]; + $mailfetch_user=$mailfetch_user_[$i_loop]; + if ($mailfetch_pass_[$i_loop] == '') { + sqgetGlobalVar("pass_$i_loop", $mailfetch_pass, SQ_POST); + } else { + $mailfetch_pass = $mailfetch_pass_[$i_loop]; + } + $mailfetch_lmos=$mailfetch_lmos_[$i_loop]; + $mailfetch_login=$mailfetch_login_[$i_loop]; + $mailfetch_uidl=$mailfetch_uidl_[$i_loop]; + $mailfetch_subfolder=$mailfetch_subfolder_[$i_loop]; + + $pop3 = new POP3($mailfetch_server, 60); + + echo '
            ' . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Fetching from ") . + htmlspecialchars((($mailfetch_alias_[$i_loop] == '')?$mailfetch_server:$mailfetch_alias_[$i_loop])) . + '', + 'center' ) , + '', $color[9] ) , + '', '', 'width="90%"' ); + + flush(); + + if (!$pop3->connect($mailfetch_server,$mailfetch_port)) { + Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR ); + continue; + } + + Mail_Fetch_Status(_("Opening IMAP server")); + $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10); + + // check if destination folder is not set, is not subscribed and is not \noselect folder + if($mailfetch_subfolder == '' || + ! mail_fetch_check_folder($imap_stream,$mailfetch_subfolder)) { + $mailfetch_subfolder = 'INBOX'; + } + + Mail_Fetch_Status(_("Opening POP server")); + $Count = $pop3->login($mailfetch_user, $mailfetch_pass); + if (($Count == false || $Count == -1) && $pop3->ERROR != '') { + Mail_Fetch_Status(_("Login Failed:") . ' ' . $pop3->ERROR ); + continue; + } + + // register_shutdown_function($pop3->quit()); + + $msglist = $pop3->uidl(); + + $i = 1; + for ($j = 1; $j < sizeof($msglist); $j++) { + if ($msglist["$j"] == $mailfetch_uidl) { + $i = $j+1; + break; + } + } + + if ($Count < $i) { + Mail_Fetch_Status(_("Login OK: No new messages")); + $pop3->quit(); + continue; + } + if ($Count == 0) { + Mail_Fetch_Status(_("Login OK: Inbox EMPTY")); + $pop3->quit(); + continue; + } else { + $newmsgcount = $Count - $i + 1; + Mail_Fetch_Status(sprintf(_("Login OK: Inbox contains %s messages"), $newmsgcount)); + } + + Mail_Fetch_Status(_("Fetching UIDL...")); + // Faster to get them all at once + $mailfetch_uidl = $pop3->uidl(); + + if (! is_array($mailfetch_uidl) && $mailfetch_lmos == 'on') + Mail_Fetch_Status(_("Server does not support UIDL.")); + + if ($mailfetch_lmos == 'on') { + Mail_Fetch_Status(_("Leaving messages on server...")); + } else { + Mail_Fetch_Status(_("Deleting messages from server...")); + } + + for (; $i <= $Count; $i++) { + Mail_Fetch_Status(_("Fetching message ") . "$i" ); + if (!ini_get('safe_mode')) + set_time_limit(20); // 20 seconds per message max + $Message = ""; + $MessArray = $pop3->get($i); + + while ( (!$MessArray) or (gettype($MessArray) != "array")) { + Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR); + // re-connect pop3 + Mail_Fetch_Status(_("Server error. Disconnect")); + $pop3->quit(); + Mail_Fetch_Status(_("Reconnect from dead connection")); + if (!$pop3->connect($mailfetch_server)) { + Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR ); + Mail_Fetch_Status(_("Saving UIDL")); + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]); + + continue; + } + $Count = $pop3->login($mailfetch_user, $mailfetch_pass); + if (($Count == false || $Count == -1) && $pop3->ERROR != '') { + Mail_Fetch_Status(_("Login Failed:") . ' ' . htmlspecialchars($pop3->ERROR) ); + Mail_Fetch_Status(_("Saving UIDL")); + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]); + + continue; + } + Mail_Fetch_Status(_("Refetching message ") . "$i" ); + $MessArray = $pop3->get($i); + + } // end while + + while (list($lineNum, $line) = each ($MessArray)) { + $Message .= $line; + } + + fputs($imap_stream, "A3$i APPEND \"$mailfetch_subfolder\" {" . strlen($Message) . "}\r\n"); + $Line = fgets($imap_stream, 1024); + if (substr($Line, 0, 1) == '+') { + fputs($imap_stream, $Message); + fputs($imap_stream, "\r\n"); + sqimap_read_data($imap_stream, "A3$i", false, $response, $message); + if ( $response <> 'OK' ) { + Mail_Fetch_Status(_("Error Appending Message!")." ".$message ); + Mail_Fetch_Status(_("Closing POP")); + $pop3->quit(); + Mail_Fetch_Status(_("Logging out from IMAP")); + sqimap_logout($imap_stream); + + Mail_Fetch_Status(_("Saving UIDL")); + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]); + exit; + } else { + Mail_Fetch_Status(_("Message appended to mailbox")); + } + + if ($mailfetch_lmos != 'on') { + if( $pop3->delete($i) ) { + Mail_Fetch_Status(sprintf(_("Message %d deleted from remote server!"), $i)); + } else { + Mail_Fetch_Status(_("Delete failed:") . htmlspecialchars($pop3->ERROR) ); + } + } + } else { + echo "$Line"; + Mail_Fetch_Status(_("Error Appending Message!")); + Mail_Fetch_Status(_("Closing POP")); + $pop3->quit(); + Mail_Fetch_Status(_("Logging out from IMAP")); + sqimap_logout($imap_stream); + + // not gurantee corect! + Mail_Fetch_Status(_("Saving UIDL")); + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]); + exit; + } + } + + Mail_Fetch_Status(_("Closing POP")); + $pop3->quit(); + Mail_Fetch_Status(_("Logging out from IMAP")); + sqimap_logout($imap_stream); + if (is_array($mailfetch_uidl)) { + Mail_Fetch_Status(_("Saving UIDL")); + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", array_pop($mailfetch_uidl)); + } + + Mail_Fetch_Status(_("Done")); +} +?> +
            + + diff --git a/ehcp/webmail2/plugins/mail_fetch/functions.php b/ehcp/webmail2/plugins/mail_fetch/functions.php new file mode 100644 index 0000000..341e0cd --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/functions.php @@ -0,0 +1,193 @@ + + * and josh@superfork.com (extracted from PHP manual) + * Adapted for MailFetch by Philippe Mingo + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: functions.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage mail_fetch + */ + +/** declare plugin globals */ +global $mail_fetch_allow_unsubscribed; + +/** + * Controls use of unsubscribed folders in plugin + * @global boolean $mail_fetch_allow_unsubscribed + * @since 1.5.1 and 1.4.5 + */ +$mail_fetch_allow_unsubscribed = false; + +/** + * Validate a requested POP3 port number + * + * Allowable port numbers are configured in config.php + * (see config_example.php for an example and more + * rules about how the list of allowable port numbers + * can be specified) + * + * @param int $requested_port The port number given by the user + * + * @return string An error string is returned if the port + * number is not allowable, otherwise an + * empty string is returned. + * + */ +function validate_mail_fetch_port_number($requested_port) { + global $mail_fetch_allowable_ports; + @include_once(SM_PATH . 'plugins/mail_fetch/config.php'); + if (empty($mail_fetch_allowable_ports)) + $mail_fetch_allowable_ports = array(110, 995); + + if (in_array('ALL', $mail_fetch_allowable_ports)) + return ''; + + if (!in_array($requested_port, $mail_fetch_allowable_ports)) { + sq_change_text_domain('mail_fetch'); + $error = _("Sorry, that port number is not allowed"); + sq_change_text_domain('squirrelmail'); + return $error; + } + + return ''; +} + +/** + * Validate a requested POP3 server address + * + * Blocked server addresses are configured in config.php + * (see config_example.php for more details) + * + * @param int $requested_address The server address given by the user + * + * @return string An error string is returned if the server + * address is not allowable, otherwise an + * empty string is returned. + * + */ +function validate_mail_fetch_server_address($requested_address) { + global $mail_fetch_block_server_pattern; + @include_once(SM_PATH . 'plugins/mail_fetch/config.php'); + if (empty($mail_fetch_block_server_pattern)) + $mail_fetch_block_server_pattern = '/(^10\.)|(^192\.)|(^127\.)|(^localhost)/'; + + if ($mail_fetch_block_server_pattern == 'UNRESTRICTED') + return ''; + + if (preg_match($mail_fetch_block_server_pattern, $requested_address)) { + sq_change_text_domain('mail_fetch'); + $error = _("Sorry, that server address is not allowed"); + sq_change_text_domain('squirrelmail'); + return $error; + } + + return ''; +} + +function hex2bin( $data ) { + /* Original code by josh@superfork.com */ + + $len = strlen($data); + $newdata = ''; + for( $i=0; $i < $len; $i += 2 ) { + $newdata .= pack( "C", hexdec( substr( $data, $i, 2) ) ); + } + return $newdata; +} + +function mf_keyED( $txt ) { + global $MF_TIT; + + if( !isset( $MF_TIT ) ) { + $MF_TIT = "MailFetch Secure for SquirrelMail 1.x"; + } + + $encrypt_key = md5( $MF_TIT ); + $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 bin2hex( mf_keyED( $tmp ) ); +} + +function decrypt( $txt ) { + $txt = mf_keyED( hex2bin( $txt ) ); + $tmp = ''; + for ( $i=0; $i < strlen( $txt ); $i++ ) { + $md5 = substr( $txt, $i, 1 ); + $i++; + $tmp.= ( substr( $txt, $i, 1 ) ^ $md5 ); + } + return $tmp; +} + +/** + * check mail folder + * @param stream $imap_stream imap connection resource + * @param string $imap_folder imap folder name + * @return boolean true, when folder can be used to store messages. + * @since 1.5.1 and 1.4.5 + */ +function mail_fetch_check_folder($imap_stream,$imap_folder) { + global $mail_fetch_allow_unsubscribed; + + // check if folder is subscribed or only exists. + if (sqimap_mailbox_is_subscribed($imap_stream,$imap_folder)) { + $ret = true; + } elseif ($mail_fetch_allow_unsubscribed && sqimap_mailbox_exists($imap_stream,$imap_folder)) { + $ret = true; + } else { + $ret = false; + } + + // make sure that folder can store messages + if ($ret && mail_fetch_check_noselect($imap_stream,$imap_folder)) { + $ret = false; + } + + return $ret; +} + +/** + * Checks if folder is noselect (can't store messages) + * + * Function does not check if folder subscribed. + * @param stream $imap_stream imap connection resource + * @param string $imap_folder imap folder name + * @return boolean true, when folder has noselect flag. false in any other case. + * @since 1.5.1 and 1.4.5 + */ +function mail_fetch_check_noselect($imap_stream,$imap_folder) { + $boxes=sqimap_mailbox_list($imap_stream); + foreach($boxes as $box) { + if ($box['unformatted']==$imap_folder) { + return (bool) check_is_noselect($box['raw']); + } + } + return false; +} diff --git a/ehcp/webmail2/plugins/mail_fetch/index.php b/ehcp/webmail2/plugins/mail_fetch/index.php new file mode 100644 index 0000000..b5db893 --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/index.php @@ -0,0 +1,17 @@ +
            ' . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + '' . _("Remote POP server settings") . '', + 'center', $color[0] ) + ), + 'center', '', 'width="95%"' ) . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + _("You should be aware that the encryption used to store your password is not perfectly secure. However, if you are using pop, there is inherently no encryption anyway. Additionally, the encryption that we do to save it on the server can be undone by a hacker reading the source to this file." ) , + 'left' ) + ) . + html_tag( 'tr', + html_tag( 'td', + _("If you leave password empty, it will be asked when you fetch mail.") , + 'left' ) + ) . + html_tag( 'tr', + html_tag( 'td', + '':'>') . + _("Encrypt passwords (informative only)") , + 'right' ) + ) , + 'center', '', 'width="95%"' ); + + // display error or other messages if necessary + // + if (!empty($message)) { + echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) . + html_tag( 'tr', + html_tag( 'td', '' . $message . '', 'center', $color[2] )); + } + + switch( $mf_action ) { + case 'config': + echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Add Server") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ) . + + "" . + '' . + html_tag( 'table' ) . + html_tag( 'tr', + html_tag( 'th', _("Server:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Port:"), 'right') . + html_tag( 'td', '', 'left') + ) . + html_tag( 'tr', + html_tag( 'th', _("Alias:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Username:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Password:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr' ) . + html_tag( 'th', _("Store in Folder:"), 'right' ) . + html_tag( 'td', '', 'left' ); + $imapConnection = sqimap_login ($username, $key, $imapServerAddress, $imapPort, 0); + $boxes = sqimap_mailbox_list($imapConnection); + echo '' . + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', '' . _("Leave mail on server"), 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', '' . _("Check mail at login"), 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', '' . _("Check mail at folder refresh"), 'left' ) + ) . + html_tag( 'tr', + html_tag( 'td', + '', + 'center', '', 'colspan="2"' ) + ) . + '
            '; + + // Modify Server + echo '
            ' . + html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Modify Server") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ); + if ($mailfetch_server_number>0) { + echo "
            "; + echo '' . _("Server Name:") . ' '. + '  '. + '  '. + '
            '; + } else { + echo _("No servers known."); + } + echo ''; + break; + case 'Delete': //erase confirmation about a server + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Fetching Servers") . '', 'center', $color[0] ) + ) , + 'center', '', 'width="95%" cellpadding="5" cellspacing="1"' ) . + '
            ' . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Confirm Deletion of a Server") . '', 'center', $color[9] ) + ) . + html_tag( 'tr', + html_tag( 'td', + "" . + '' . + '
            ' . _("Selected Server:") . " " . htmlspecialchars($mailfetch_server_[$mf_sn]) . "
            " . + _("Confirm delete of selected server?") . '

            ' . + '' . + '
            ' , + 'center', $color[9] ) + ) , + 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ); + break; //modify a server + case 'Modify': + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Fetching Servers") . '', 'center', $color[0] ) + ) , + 'center', '', 'width="95%" cellpadding="5" cellspacing="1"' ) . + '
            ' . + html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Modify Server") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ) . + + "" . + '' . + html_tag( 'table' ) . + html_tag( 'tr', + html_tag( 'th', _("Server:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Port:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Alias:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Username:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', _("Password:"), 'right' ) . + html_tag( 'td', '', 'left' ) + ) . + html_tag( 'tr' ) . + html_tag( 'th', _("Store in Folder:"), 'right' ) . + html_tag( 'td', '', 'left' ); + + $imapConnection = sqimap_login ($username, $key, $imapServerAddress, $imapPort, 0); + $boxes = sqimap_mailbox_list($imapConnection); + echo '' . + + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', + '' . _("Leave Mail on Server") , + 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', + '' . _("Check mail at login"), + 'left' ) + ) . + html_tag( 'tr', + html_tag( 'th', ' ', 'right' ) . + html_tag( 'td', + '' . _("Check mail at folder refresh") , + 'left' ) + ) . + html_tag( 'tr', + html_tag( 'td', + '', + 'center', '', 'colspan="2"' ) + ) . + + ''; + break; + default: //unsupported action + echo '' . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Fetching Servers") . '', 'center', $color[0] ) + ) , + 'center', '', 'width="95%"' ) . + '
            ' . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Undefined Function") . '', 'center', $color[9] ) . + html_tag( 'td', '' . _("The function you requested is unknown.") . '', 'center', $color[0] ) + ) , + 'center', '', 'width="70%"' ); + } + + ?> + diff --git a/ehcp/webmail2/plugins/mail_fetch/setup.php b/ehcp/webmail2/plugins/mail_fetch/setup.php new file mode 100644 index 0000000..5713cb3 --- /dev/null +++ b/ehcp/webmail2/plugins/mail_fetch/setup.php @@ -0,0 +1,270 @@ + '' && // Empty passwords no allowed + ( ( $mailfetch_login_[$i_loop] == 'on' && $mailfetch_newlog == 'on' ) || $mailfetch_fref_[$i_loop] == 'on' ) ) { + + $mailfetch_server_[$i_loop] = getPref($data_dir, $username, "mailfetch_server_$i_loop"); + $mailfetch_port_[$i_loop] = getPref($data_dir, $username , "mailfetch_port_$i_loop"); + $mailfetch_alias_[$i_loop] = getPref($data_dir, $username, "mailfetch_alias_$i_loop"); + $mailfetch_user_[$i_loop] = getPref($data_dir, $username, "mailfetch_user_$i_loop"); + $mailfetch_lmos_[$i_loop] = getPref($data_dir, $username, "mailfetch_lmos_$i_loop"); + $mailfetch_uidl_[$i_loop] = getPref($data_dir, $username, "mailfetch_uidl_$i_loop"); + $mailfetch_subfolder_[$i_loop] = getPref($data_dir, $username, "mailfetch_subfolder_$i_loop"); + + $mailfetch_server=$mailfetch_server_[$i_loop]; + $mailfetch_port=$mailfetch_port_[$i_loop]; + $mailfetch_user=$mailfetch_user_[$i_loop]; + $mailfetch_alias=$mailfetch_alias_[$i_loop]; + $mailfetch_pass=$mailfetch_pass_[$i_loop]; + $mailfetch_lmos=$mailfetch_lmos_[$i_loop]; + $mailfetch_login=$mailfetch_login_[$i_loop]; + $mailfetch_uidl=$mailfetch_uidl_[$i_loop]; + $mailfetch_subfolder=$mailfetch_subfolder_[$i_loop]; + + // $outMsg .= "$mailfetch_alias checked
            "; + + // $outMsg .= "$mailfetch_alias_[$i_loop]
            "; + + $pop3 = new POP3($mailfetch_server, 60); + + if (!$pop3->connect($mailfetch_server,$mailfetch_port)) { + $outMsg .= _("Warning, ") . $pop3->ERROR; + continue; + } + + $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10); + + $Count = $pop3->login($mailfetch_user, $mailfetch_pass); + if (($Count == false || $Count == -1) && $pop3->ERROR != '') { + $outMsg .= _("Login Failed:") . $pop3->ERROR; + continue; + } + + // register_shutdown_function($pop3->quit()); + + $msglist = $pop3->uidl(); + + $i = 1; + for ($j = 1; $j < sizeof($msglist); $j++) { + if ($msglist["$j"] == $mailfetch_uidl) { + $i = $j+1; + break; + } + } + + if ($Count < $i) { + $pop3->quit(); + continue; + } + if ($Count == 0) { + $pop3->quit(); + continue; + } else { + $newmsgcount = $Count - $i + 1; + } + + // Faster to get them all at once + $mailfetch_uidl = $pop3->uidl(); + + if (! is_array($mailfetch_uidl) && $mailfetch_lmos == 'on') + $outMsg .= _("Server does not support UIDL."); + + for (; $i <= $Count; $i++) { + if (!ini_get('safe_mode')) + set_time_limit(20); // 20 seconds per message max + $Message = ""; + $MessArray = $pop3->get($i); + + if ( (!$MessArray) or (gettype($MessArray) != "array")) { + $outMsg .= _("Warning, ") . $pop3->ERROR; + continue 2; + } + + while (list($lineNum, $line) = each ($MessArray)) { + $Message .= $line; + } + + /** + * check if mail folder is not null and subscribed + * Function can check if mail folder is only unsubscribed + * and use unsubscribed mail folder. + */ + if ($mailfetch_subfolder=='' || + ! mail_fetch_check_folder($imap_stream,$mailfetch_subfolder)) { + fputs($imap_stream, "A3$i APPEND INBOX {" . strlen($Message) . "}\r\n"); + } else { + fputs($imap_stream, "A3$i APPEND $mailfetch_subfolder {" . strlen($Message) . "}\r\n"); + } + $Line = fgets($imap_stream, 1024); + if (substr($Line, 0, 1) == '+') { + fputs($imap_stream, $Message); + fputs($imap_stream, "\r\n"); + sqimap_read_data($imap_stream, "A3$i", false, $response, $message); + + if ($mailfetch_lmos != 'on') { + $pop3->delete($i); + } + } else { + echo "$Line"; + $outMsg .= _("Error Appending Message!"); + } + } + + $pop3->quit(); + sqimap_logout($imap_stream); + if (is_array($mailfetch_uidl)) { + setPref($data_dir,$username,"mailfetch_uidl_$i_loop", array_pop($mailfetch_uidl)); + } + } + } + + if( trim( $outMsg ) <> '' ) { + echo '
            ' . _("Mail Fetch Result:") . "
            $outMsg
            "; + } + if( $mailfetch_newlog == 'on' ) { + setPref($data_dir, $username, 'mailfetch_newlog', 'off'); + } +} + +function mail_fetch_setnew() { + + global $data_dir; + require_once(SM_PATH . 'functions/prefs.php'); + + sqgetGlobalVar('username', $username, SQ_SESSION); + + setPref( $data_dir, $username, 'mailfetch_newlog', 'on' ); +} + +function mailfetch_optpage_register_block() { + global $optpage_blocks; + + $optpage_blocks[] = array( + 'name' => _("POP3 Fetch Mail"), + 'url' => '../plugins/mail_fetch/options.php', + 'desc' => _("This configures settings for downloading email from a POP3 mailbox to your account on this server."), + 'js' => false + ); +} + +function mail_fetch_folderact($args) { + global $username, $data_dir; + + if (empty($args) || !is_array($args)) { + return; + } + + /* Should be 3 ars, 1: old folder, 2: action, 3: new folder */ + if (count($args) != 3) { + return; + } + + list($old_folder, $action, $new_folder) = $args; + + $mailfetch_server_number = getPref($data_dir, $username, 'mailfetch_server_number'); + + for ($i = 0; $i < $mailfetch_server_number; $i++) { + $mailfetch_subfolder = getPref($data_dir, $username, 'mailfetch_subfolder_' . $i); + + if ($mailfetch_subfolder != $old_folder) { + continue; + } + + if ($action == 'delete') { + setPref($data_dir, $username, 'mailfetch_subfolder_' . $i, 'INBOX'); + } elseif ($action == 'rename') { + setPref($data_dir, $username, 'mailfetch_subfolder_' . $i, $new_folder); + } + } +} diff --git a/ehcp/webmail2/plugins/message_details/index.php b/ehcp/webmail2/plugins/message_details/index.php new file mode 100644 index 0000000..7e8b486 --- /dev/null +++ b/ehcp/webmail2/plugins/message_details/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/message_details/message_details_bottom.php b/ehcp/webmail2/plugins/message_details/message_details_bottom.php new file mode 100644 index 0000000..cd9cfac --- /dev/null +++ b/ehcp/webmail2/plugins/message_details/message_details_bottom.php @@ -0,0 +1,316 @@ +'; +$end = ''; +$entStr = ''; +$bla =''; +$content = array (); +$content_indx = -1; +$contentset = false; + +$count=count($body); +$body[$count-1] = substr($body[$count-1], -1); +for ($i=1; $i < $count; $i++) { + $line = trim($body[$i]); + if ($line == '') { + $pre = ''; + $end = ''; + if ($bnd_end) { + $header = true; + $mimepart = false; + } else if ($messageheader) { + if ($header) { + $header=false; + $end = "\n \n".'
            '."\n \n".'
            '."\n \n"; + } + $mimepart = -$header; + $bnd_end = false; + if ($messageheaderstart) { + $messageheaderstart=false; + } + } else if ($messageheaderstart) { + $messageheader= false; + } else { + if ($header) { + $pre = ''; + $end = "\n \n".'
            '."\n \n".'
            '."\n \n"; + } + $header = false; + $mimepart=true; + } + $contentset = false; + $nameset = false; + } else { + if (!$header && $messageheader) { + $messageheaderstart=true; + if ($pre != '') { + $pre = ''; + } + } + if (!$messageheader && !$header ) { + $mimepart=true; + } else { + $mimepart=false; + } + $pre = ''; + $end = ''; + } + if ( ( $header || $messageheader) && (preg_match("/^.*boundary=\"?(.+(?=\")|.+).*/i",$line,$reg)) ) { + $bnd = $reg[1]; + $bndreg = $bnd; + $bndreg = str_replace("\\","\\\\",$bndreg); + $bndreg = str_replace("?","\\?",$bndreg); + $bndreg = str_replace("+","\\+",$bndreg); + $bndreg = str_replace(".","\\.",$bndreg); + $bndreg = str_replace("/","\\/",$bndreg); + $bndreg = str_replace("-","\\-",$bndreg); + $bndreg = str_replace("(","\\(",$bndreg); + $bndreg = str_replace(")","\\)",$bndreg); + + $boundaries[] = array( 'bnd' => $bnd, 'bndreg' => $bndreg); + $messageheader = false; + $messageheaderstart=false; + $mimepart=false; + if ($entStr=='') { + $entStr='0'; + } else { + $entStr = CalcEntity("$entStr",1); + } + } + + if (($line != '' && $line{0} == '-' || $header) && isset($boundaries[0])) { + $cnt=count($boundaries)-1; + $bnd = $boundaries[$cnt]['bnd']; + $bndreg = $boundaries[$cnt]['bndreg']; + + $regstr = '/^--'."($bndreg)".".*".'/'; + if (preg_match($regstr,$line,$reg) ) { + $bndlen = strlen($reg[1]); + $bndend = false; + if (strlen($line) > ($bndlen + 3)) { + if ($line{$bndlen+2} == '-' && $line{$bndlen+3} == '-') + $bndend = true; + } + if ($bndend) { + $entStr = CalcEntity("$entStr",-1); + array_pop($boundaries); + $pre .= ''; + $header = true; + $mimepart = false; + $bnd_end = true; + $encoding = ''; + } else { + $header = true; + $bnd_end = false; + $entStr = CalcEntity("$entStr",0); + $content_indx++; + $content[$content_indx]=array(); + $content[$content_indx]['ent'] = '$entStr".''; + $pre .= "\n \n".'
            '."\n \n".'
            '."\n"; + $header = true; + $mimepart = false; + $encoding = ''; + } + } else { + if ($header) { + if (!$contentset && preg_match("/^.*(content-type:)\s*(\w+)\/(\w+).*/i",$line,$reg)) { + if (strtolower($reg[2]) == 'message' && strtolower($reg[3]) == 'rfc822') { + $messageheader = true; + } + $content[$content_indx]['type'] = "$reg[2]/$reg[3]"; + $contentset = true; + if ($reg[2] == 'image') { + $entities["$entStr"] = array(); + $entities["$entStr"]['entity'] = $entStr; + $entities["$entStr"]['contenttype']=$reg[2].'/'.$reg[3]; + } + } else if (!$nameset && preg_match("/^.*(name=\s*)\"(.*)\".*/i",$line,$reg)) { + $name = htmlspecialchars($reg[2]); + $content[$content_indx]['name'] = decodeHeader($name); + $nameset = true; + if (isset($entities["$entStr"])) { + $entities["$entStr"]['name'] = urlEncode($reg[2]); + } + } else if (preg_match("/^.*(content-transfer-encoding:)\s*(\w+-?(\w+)?).*/i",$line,$reg) ) { + $encoding = $reg[2]; + if (isset($entities["$entStr"])) { + $entities["$entStr"]['encoding']=$reg[2]; + } + $content[$content_indx]['encoding'] = $encoding; + $mimeentity = ''; + } + + $pre .= ''; + //$mimepart=false; + } + } + } +/* + if ($mimepart) { + if (isset($entities["$entStr"])) { + if (isset($encoding) && $encoding == 'base64') { + if (!isset( $entities["$entStr"]['content'])) $entities[$entStr]['content'] = ''; + $entities["$entStr"]['content'] .= $line; + } + } + } +*/ + $line = htmlspecialchars($line); + $message_body .= "$pre"."$line"."$end".'
            '."\r\n"; +} + +$xtra = << + + + + + +ECHO; + +displayHtmlHeader( _("Message Details"), $xtra, FALSE ); +/* body */ +echo "\n"; +echo ''."\n"; +echo ''."\n"; +echo '
            '."\n"; + +if (count($content) > 0) { + echo '

            ' . _("Bodystructure") . "

            \n\n"; + echo ''. + ''. + ''. + ''. + ''. + ''. + + ''. + ''; + for ($i = 0; $i < count($content);$i++) { + echo ''."\n"; + } + echo '
            ' . _("Entity") . '' . _("Content-Type") . '' . _("Name") . '' . _("Encoding") . '
            '; + echo $content[$i]['ent'].''; + if (isset($content[$i]['type'])) { + echo $content[$i]['type']; + } else echo 'TEXT/PLAIN'; + echo ''; + if (isset($content[$i]['name'])) { + echo $content[$i]['name']; + } else echo ' '; + echo ''; + if (isset($content[$i]['encoding'])) { + echo $content[$i]['encoding']; + } else echo ' '; + echo '

            '."\n"; +} +echo '

            ' . _("RFC822 Message body") . "

            \n\n"; +echo '
            '."\n\n"; +echo $message_body; +echo '
            '; +?> diff --git a/ehcp/webmail2/plugins/message_details/message_details_main.php b/ehcp/webmail2/plugins/message_details/message_details_main.php new file mode 100644 index 0000000..28d863d --- /dev/null +++ b/ehcp/webmail2/plugins/message_details/message_details_main.php @@ -0,0 +1,43 @@ +\n"; +echo ''; +echo ''; +echo ''."\n"."\n"; +?> diff --git a/ehcp/webmail2/plugins/message_details/message_details_top.php b/ehcp/webmail2/plugins/message_details/message_details_top.php new file mode 100644 index 0000000..0c6afab --- /dev/null +++ b/ehcp/webmail2/plugins/message_details/message_details_top.php @@ -0,0 +1,51 @@ +\n". + "\n". + "\n", FALSE ); + +sqgetGlobalVar('passed_id', $passed_id, SQ_GET); +if (!sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_GET)) + $passed_ent_id = 0; +sqgetGlobalVar('mailbox', $mailbox, SQ_GET); + +echo "\n" . + '
            ' . + '
            ' . + '  '. + '  '. + ' '. + '' . + '' . + '' . + '' . + '
            '. + '
            '. + ''. + "\n"; +?> diff --git a/ehcp/webmail2/plugins/message_details/setup.php b/ehcp/webmail2/plugins/message_details/setup.php new file mode 100644 index 0000000..ff5c600 --- /dev/null +++ b/ehcp/webmail2/plugins/message_details/setup.php @@ -0,0 +1,61 @@ +' . "\n" . + '\n" . + "\n" . + " | 
            $print_text\n"; + } + echo $result; +} + diff --git a/ehcp/webmail2/plugins/newmail/HISTORY b/ehcp/webmail2/plugins/newmail/HISTORY new file mode 100644 index 0000000..70c4bf0 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/HISTORY @@ -0,0 +1,72 @@ +This is the history for the newmail plugin in SquirrelMail. Currently +works with the 1.1.2+ versions of SquirrelMail. + +2.1 + +Fixes bug in when used with the 1.1.3 distro + + + +2.0 + +Adds a "try" sounds option to the Newmail plugins works with 1.1.2 + + + + +1.4 + +Tyler Akins cleaned up the javascript and now it can change the title +bar's text if you have new mail. Additionally, this now correctly +uses the new 1.1.1 validate.php format. Uses the new +sqimap_unseen_messages() format in 1.1.2. + +1.3a + +Hm. Apparently the Sent box is being used to indicate new mail when +checking all folders. Disabled this. Ditto for the Trash folder +as well. + +Changed the plugin name to "newmail", seeing that it really is more +than just a sound plugin ;) + + +1.3 + +Now added the ability to only check for RECENT messages (those that +have not had their information not yet looked at). Once a message +is "noticed", it will not show up again as recent. Nice for +people who want to limit the number of notifications. + +Also changed the popup from a javascript alert to a popup window. +This way, it doesn't screw up the browser near as much. + +Finally, I added a new sub-directory called sounds. Put in here +any sounds you want users to choose from. They now can choose +from any file in that directory via a drop-down menu in the options +screen (or, they can still choose a local file). + +1.2 + +Added the ability to show a popup window on new mail arrival (via a +JavaScript function). + +Added the ability to check for ONLY the INBOX for unseen messages +(the default). Also fixed a bug in counting unseen messages. ;) + +1.1 + +Now added the ability to turn off this feature for users who don't want +it. The default is NOT enabled, so you need to go to the options menu to +turn it on. + +Also a nice way to reset the file back to the server default. + +1.0 + +First release (with an option page)! + +0.9 + +First pass-through of making a plugin. Hack hack hack . . . + diff --git a/ehcp/webmail2/plugins/newmail/README b/ehcp/webmail2/plugins/newmail/README new file mode 100644 index 0000000..a4561e9 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/README @@ -0,0 +1,28 @@ +This plugin is used to notify the user when a new mail arrives. There are +several ways to do this. One is to play a sound through the browser whenever +the user has unseen messages flagged in the left window pane. There are options +available (on the options page of course) to disable this feature for each user, +and to select different media files from the users local computer. The default +is that this is NOT enabled, so you'll need to go to the options menu to turn +it on first! There are also options to show a popup window via JavaScript. + +Plugin options are visible only when JavaScript is enabled or detected by +SquirrelMail JavaScript detection functions. + +From SquirrelMail 1.5.1 newmail plugin's site configuration can be stored in +config/newmail_config.php or plugins/newmail/config.php. + +$allowsound setting is replaced with $newmail_allowsound and should be stored +inside plugin's site configuration file. + +Plugin supports playback of WAV, SWF, MP3, OGG and SVG media files. Currently +OGG and SVG files are played only by browsers that implement w3.org nested +objects correctly and browsers that can play objects. Internet Explorer +can't play them due to broken implementation. OGG and SVG +elements specific to IE are not implemented. + +CREDITS + +This plugin has been originally created by Mike Huttinger, with contributions by +Tyler Akins and Seth Randall. It's now maintained by the SquirrelMail Project +Team. diff --git a/ehcp/webmail2/plugins/newmail/index.php b/ehcp/webmail2/plugins/newmail/index.php new file mode 100644 index 0000000..b3ab036 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/newmail/newmail.php b/ehcp/webmail2/plugins/newmail/newmail.php new file mode 100644 index 0000000..e7757f9 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/newmail.php @@ -0,0 +1,57 @@ +'."\n". + '
            '. "\n" . + html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '' . _("SquirrelMail Notice:") . '', 'center', $color[0] ) + ) . + html_tag( 'tr', "\n" . + html_tag( 'td', + '
            '. + sprintf( ( $numnew == 1 ? + _("You have %s new message") : + _("You have %s new messages") ), $numnew ) . + '

            ' . "\n" . + '
            ' . "\n". + ''."\n". + '
            ', + 'center' ) + ) , + '', '', 'width="100%" cellpadding="2" cellspacing="2" border="0"' ) . + '
            ' . + "\n". + "\n"; + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/newmail/newmail_opt.php b/ehcp/webmail2/plugins/newmail/newmail_opt.php new file mode 100644 index 0000000..c8f43e7 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/newmail_opt.php @@ -0,0 +1,191 @@ +' . _("Options") . ' - ' . _("New Mail Notification") . "
            \n" . + html_tag( 'table', '', '', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "
            \n"; + +echo html_tag( 'p', + sprintf(_("The %s option will check ALL of your folders for unseen mail, not just the inbox for notification."), '"'._("Check all boxes, not just INBOX").'"') + ) . "\n" . + html_tag( 'p', + sprintf(_("Selecting the %s option will enable the showing of a popup window when unseen mail is in your folders (requires JavaScript)."), '"'._("Show popup window on new mail").'"') + ) . "\n" . + html_tag( 'p', + sprintf(_("Use the %s option to only check for messages that are recent. Recent messages are those that have just recently showed up and have not been \"viewed\" or checked yet. This can prevent being continuously annoyed by sounds or popups for unseen mail."), '"'._("Count only messages that are RECENT").'"') + ) . "\n" . + html_tag( 'p', + sprintf(_("Selecting the %s option will change the title in some browsers to let you know when you have new mail (requires JavaScript). This will always tell you if you have new mail, even if you have %s enabled."), '"'._("Change title on supported browsers").'"', '"'._("Count only messages that are RECENT").'"') + ) . "\n"; +if ($allowsound == "true") { + echo html_tag( 'p', + sprintf(_("Select %s to turn on playing a media file when unseen mail is in your folders. When enabled, you can specify the media file to play in the provided file box."), '"'._("Enable Media Playing").'"') + ) . "\n" . + html_tag( 'p', + sprintf(_("Select from the list of %s the media file to play when new mail arrives. If no file is specified, %s, no sound will be used."), '"'._("Select server file").'"', '"'._("(none)").'"') + ) . "\n"; +} + +echo '' . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[4] ) . "\n" . '
            ' . "\n"; + +echo '
            ' . "\n" . + '' . "\n" . + html_tag( 'table', '', '', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n"; + +// Option: media_allbox +echo html_tag( 'tr' ) . + html_tag( 'td', _("Check all boxes, not just INBOX").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + '' . "\n"; + +// Option: media_recent +echo html_tag( 'tr' ) . + html_tag( 'td', _("Count only messages that are RECENT").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + '' . "\n"; + +// Option: media_changetitle +echo html_tag( 'tr' ) . + html_tag( 'td', _("Change title on supported browsers").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + ' ('._("requires JavaScript to work").')' . "\n"; + +// Option: media_popup +echo html_tag( 'tr' ) . + html_tag( 'td', _("Show popup window on new mail").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + ' ('._("requires JavaScript to work").')' . "\n"; + +echo html_tag( 'tr' ) + . html_tag('td',_("Width of popup window:"),'right','', 'style="white-space: nowrap;"') + . html_tag('td','' + . ' (' . _("If set to 0, reverts to default value") . ')','left') + . "\n"; + +echo html_tag( 'tr' ) + . html_tag('td',_("Height of popup window:"),'right','', 'style="white-space: nowrap;"') + . html_tag('td','' + . ' (' . _("If set to 0, reverts to default value") . ')','left') + . "\n"; + + +if ($allowsound == "true") { +// Option: media_enable + echo html_tag( 'tr' ) . + html_tag( 'td', _("Enable Media Playing").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + '' . "\n"; + +// Option: media_sel + echo html_tag( 'tr' ) . + html_tag( 'td', _("Select server file").':', 'right', '', 'nowrap' ) . + html_tag( 'td', '', 'left' ) . + ''. + '' . + html_tag( 'tr', "\n" . + html_tag( 'td', _("Current File:"), 'right', '', 'nowrap' ) . + html_tag( 'td', '' . + htmlspecialchars($media_output) . '', 'left' ) + ) . "\n"; +} +echo html_tag( 'tr', "\n" . + html_tag( 'td', ' ' ) . + html_tag( 'td', + '' . + '' . + '' . + '', + 'left' ) + ) . "\n"; +?> +
            diff --git a/ehcp/webmail2/plugins/newmail/setup.php b/ehcp/webmail2/plugins/newmail/setup.php new file mode 100644 index 0000000..98bfaff --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/setup.php @@ -0,0 +1,267 @@ + 0, then we play a sound (using the HTML at the + * far end of this script). + * + * This was tested with IE5.0 - but I hear Netscape works well, + * too (with a plugin). + * + * @version $Id: setup.php 14116 2011-07-12 03:19:15Z pdontthink $ + * @package plugins + * @subpackage new_mail + */ + +/** + * Checks if mailbox contains new messages. + * + * @param stream $imapConnection + * @param string $mailbox FIXME: option is not used + * @param string $real_box unformated mailbox name + * @param string $delimeter FIXME: option is not used + * @param string $unseen FIXME: option is not used + * @param integer $total_new number of new messages + * @return bool true, if there are new messages + */ +function CheckNewMailboxSound($imapConnection, $mailbox, $real_box, $delimeter, $unseen, &$total_new) { + global $folder_prefix, $trash_folder, $sent_folder, + $color, $move_to_sent, $move_to_trash, + $unseen_notify, $unseen_type, $newmail_allbox, + $newmail_recent, $newmail_changetitle; + + $mailboxURL = urlencode($real_box); + $unseen = $recent = 0; + + // Skip folders for Sent and Trash + + if ($real_box == $sent_folder || + $real_box == $trash_folder) { + return 0; + } + + if (($unseen_notify == 2 && $real_box == 'INBOX') || + ($unseen_notify == 3 && ($newmail_allbox == 'on' || + $real_box == 'INBOX'))) { + $status = sqimap_status_messages( $imapConnection, $real_box); + if($newmail_recent == 'on') { + $total_new += $status['RECENT']; + } else { + $total_new += $status['UNSEEN']; + } + if ($total_new) { + return 1; + } + } + return 0; +} + +function squirrelmail_plugin_init_newmail() { + global $squirrelmail_plugin_hooks; + + $squirrelmail_plugin_hooks['left_main_before']['newmail'] = 'newmail_plugin'; + $squirrelmail_plugin_hooks['optpage_register_block']['newmail'] = 'newmail_optpage_register_block'; + $squirrelmail_plugin_hooks['options_save']['newmail'] = 'newmail_sav'; + $squirrelmail_plugin_hooks['loading_prefs']['newmail'] = 'newmail_pref'; + $squirrelmail_plugin_hooks['optpage_set_loadinfo']['newmail'] = 'newmail_set_loadinfo'; +} + +function newmail_optpage_register_block() { + // Gets added to the user's OPTIONS page. + global $optpage_blocks; + + if ( !soupNazi() ) { + + /* Register Squirrelspell with the $optionpages array. */ + $optpage_blocks[] = array( + 'name' => _("NewMail Options"), + 'url' => SM_PATH . 'plugins/newmail/newmail_opt.php', + 'desc' => _("This configures settings for playing sounds and/or showing popup windows when new mail arrives."), + 'js' => TRUE + ); + } +} + +function newmail_sav() { + global $data_dir, $username; + + if ( sqgetGlobalVar('submit_newmail', $submit, SQ_POST) ) { + $media_enable = ''; + $media_popup = ''; + $media_allbox = ''; + $media_recent = ''; + $media_changetitle = ''; + $media_sel = ''; + + sqgetGlobalVar('media_enable', $media_enable, SQ_POST); + sqgetGlobalVar('media_popup', $media_popup, SQ_POST); + sqgetGlobalVar('media_allbox', $media_allbox, SQ_POST); + sqgetGlobalVar('media_recent', $media_recent, SQ_POST); + sqgetGlobalVar('media_changetitle', $media_changetitle, SQ_POST); + sqgetGlobalVar('popup_height', $newmail_popup_height, SQ_POST); + sqgetGlobalVar('popup_width', $newmail_popup_width, SQ_POST); + + setPref($data_dir,$username,'newmail_enable',$media_enable); + setPref($data_dir,$username,'newmail_popup', $media_popup); + setPref($data_dir,$username,'newmail_allbox',$media_allbox); + setPref($data_dir,$username,'newmail_recent',$media_recent); + setPref($data_dir,$username,'newmail_popup_height',$newmail_popup_height); + setPref($data_dir,$username,'newmail_popup_width',$newmail_popup_width); + setPref($data_dir,$username,'newmail_changetitle',$media_changetitle); + + if( sqgetGlobalVar('media_sel', $media_sel, SQ_POST) && + ($media_sel == '(none)' || $media_sel == '(local media)') ) { + removePref($data_dir,$username,'newmail_media'); + } else { + setPref($data_dir,$username,'newmail_media',$media_sel); + } + } +} + +function newmail_pref() { + global $username, $data_dir, $newmail_media, $newmail_enable, $newmail_popup, + $newmail_allbox, $newmail_recent, $newmail_changetitle, $newmail_popup_height, + $newmail_popup_width; + + + $newmail_recent = getPref($data_dir,$username,'newmail_recent'); + $newmail_enable = getPref($data_dir,$username,'newmail_enable'); + $newmail_media = getPref($data_dir, $username, 'newmail_media', '(none)'); + $newmail_popup = getPref($data_dir, $username, 'newmail_popup'); + $newmail_allbox = getPref($data_dir, $username, 'newmail_allbox'); + $newmail_popup_height = getPref($data_dir, $username, 'newmail_popup_height',130); + $newmail_popup_width = getPref($data_dir, $username, 'newmail_popup_width',200); + $newmail_changetitle = getPref($data_dir, $username, 'newmail_changetitle'); + +} + +/** + * Set loadinfo data + * + * Used by option page when saving settings. + */ +function newmail_set_loadinfo() { + global $optpage, $optpage_name; + if ($optpage=='newmail') { + $optpage_name=_("NewMail Options"); + } +} + +function newmail_plugin() { + global $username, $key, $imapServerAddress, $imapPort, + $newmail_media, $newmail_enable, $newmail_popup, + $newmail_popup_height, $newmail_popup_width, $newmail_recent, + $newmail_changetitle, $imapConnection; + + include_once(SM_PATH . 'functions/display_messages.php'); + + if ($newmail_enable == 'on' || + $newmail_popup == 'on' || + $newmail_changetitle) { + + // open a connection on the imap port (143) + $boxes = sqimap_mailbox_list($imapConnection); + $delimeter = sqimap_get_delimiter($imapConnection); + + $status = 0; + $totalNew = 0; + + for ($i = 0;$i < count($boxes); $i++) { + + $line = ''; + $mailbox = $boxes[$i]['formatted']; + + if (! isset($boxes[$i]['unseen'])) { + $boxes[$i]['unseen'] = ''; + } + if ($boxes[$i]['flags']) { + $noselect = false; + for ($h = 0; $h < count($boxes[$i]['flags']); $h++) { + if (strtolower($boxes[$i]["flags"][$h]) == 'noselect') { + $noselect = TRUE; + } + } + if (! $noselect) { + $status += CheckNewMailboxSound($imapConnection, + $mailbox, + $boxes[$i]['unformatted'], + $delimeter, + $boxes[$i]['unseen'], + $totalNew); + } + } else { + $status += CheckNewMailboxSound($imapConnection, + $mailbox, + $boxes[$i]['unformatted'], + $delimeter, + $boxes[$i]['unseen'], + $totalNew); + } + + } + + // sqimap_logout($imapConnection); + + // If we found unseen messages, then we + // will play the sound as follows: + + if ($newmail_changetitle) { + global $org_title; + echo "\n"; + } + + if ($totalNew > 0 && $newmail_enable == 'on' && $newmail_media != '' && $newmail_media != '(none)') { + $newmail_media=sqm_baseuri().'plugins/newmail/sounds/'.basename($newmail_media); + echo '\n"; + } + if ($totalNew > 0 && $newmail_popup == 'on') { + echo "\n"; + } + } +} diff --git a/ehcp/webmail2/plugins/newmail/sounds/FanFair.wav b/ehcp/webmail2/plugins/newmail/sounds/FanFair.wav new file mode 100644 index 0000000..697371e Binary files /dev/null and b/ehcp/webmail2/plugins/newmail/sounds/FanFair.wav differ diff --git a/ehcp/webmail2/plugins/newmail/sounds/Friends.wav b/ehcp/webmail2/plugins/newmail/sounds/Friends.wav new file mode 100644 index 0000000..b9397de Binary files /dev/null and b/ehcp/webmail2/plugins/newmail/sounds/Friends.wav differ diff --git a/ehcp/webmail2/plugins/newmail/sounds/MontyPython.wav b/ehcp/webmail2/plugins/newmail/sounds/MontyPython.wav new file mode 100644 index 0000000..0dc3655 Binary files /dev/null and b/ehcp/webmail2/plugins/newmail/sounds/MontyPython.wav differ diff --git a/ehcp/webmail2/plugins/newmail/sounds/Notify.wav b/ehcp/webmail2/plugins/newmail/sounds/Notify.wav new file mode 100644 index 0000000..658bc7f Binary files /dev/null and b/ehcp/webmail2/plugins/newmail/sounds/Notify.wav differ diff --git a/ehcp/webmail2/plugins/newmail/sounds/index.php b/ehcp/webmail2/plugins/newmail/sounds/index.php new file mode 100644 index 0000000..b3ab036 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/sounds/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/newmail/testsound.php b/ehcp/webmail2/plugins/newmail/testsound.php new file mode 100644 index 0000000..ae714a7 --- /dev/null +++ b/ehcp/webmail2/plugins/newmail/testsound.php @@ -0,0 +1,49 @@ +'."\n"; + +if ( ! sqgetGlobalVar('sound', $sound, SQ_GET) ) { + $sound = 'Click.wav'; +} elseif ( $sound == '(none)' ) { + echo '


            '. + '' . _("No sound specified") . '

            '. + ''. + '
            '. + ''; + return; +} + +echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + ''. + '
            '. + '' . _("Loading the sound...") . '
            '. + '
            '. + ''. + '
            ' , + 'center' ) + ) , + 'center' ) . + ''; +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/sent_subfolders/index.php b/ehcp/webmail2/plugins/sent_subfolders/index.php new file mode 100644 index 0000000..97c8a2c --- /dev/null +++ b/ehcp/webmail2/plugins/sent_subfolders/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/sent_subfolders/setup.php b/ehcp/webmail2/plugins/sent_subfolders/setup.php new file mode 100644 index 0000000..d7336e1 --- /dev/null +++ b/ehcp/webmail2/plugins/sent_subfolders/setup.php @@ -0,0 +1,359 @@ + 1)) { + /* Chop up the folder strings as needed. */ + $base_str = $sent_subfolders_base . $delimiter; + $mbox_str = substr($args[1], 0, strlen($base_str)); + + /* Perform the comparison. */ + $handleAsSent_result = + ( $handleAsSent_result + || ($base_str == $mbox_str) + || ($sent_subfolders_base == $args[1]) + ); + } +} + +/** + * Loads sent_subfolders settings + */ +function sent_subfolders_load_prefs() { + global $use_sent_subfolders, $data_dir, $username, $sent_folder, + $sent_subfolders_setting, $sent_subfolders_base; + + $use_sent_subfolders = getPref + ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF); + + $sent_subfolders_setting = getPref + ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED); + + $sent_subfolders_base = getPref + ($data_dir, $username, 'sent_subfolders_base', $sent_folder); +} + +/** + * Adds sent_subfolders options in folder preferences + */ +function sent_subfolders_optpage_loadhook_folders() { + global $optpage_data, $imapServerAddress, $imapPort; + + sqgetGlobalVar('username', $username, SQ_SESSION); + sqgetGlobalVar('key', $key, SQ_COOKIE); + + /* Get some imap data we need later. */ + $imapConnection = + sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + $boxes = sqimap_mailbox_list($imapConnection); + sqimap_logout($imapConnection); + + /* Load the Sent Subfolder Options into an array. */ + $optgrp = _("Sent Subfolders Options"); + $optvals = array(); + + $optvals[] = array( + 'name' => 'sent_subfolders_setting', + 'caption' => _("Use Sent Subfolders"), + 'type' => SMOPT_TYPE_STRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => array(SMPREF_SENT_SUBFOLDERS_DISABLED => _("Disabled"), + SMPREF_SENT_SUBFOLDERS_MONTHLY => _("Monthly"), + SMPREF_SENT_SUBFOLDERS_QUARTERLY => _("Quarterly"), + SMPREF_SENT_SUBFOLDERS_YEARLY => _("Yearly")), + 'save' => 'save_option_sent_subfolders_setting' + ); + + $filtered_folders=array_filter($boxes, "filter_folders"); + $sent_subfolders_base_values = array('whatever'=>$filtered_folders); + + $optvals[] = array( + 'name' => 'sent_subfolders_base', + 'caption' => _("Base Sent Folder"), + 'type' => SMOPT_TYPE_FLDRLIST, + 'refresh' => SMOPT_REFRESH_FOLDERLIST, + 'posvals' => $sent_subfolders_base_values, + 'save' => 'save_option_sent_subfolders_base', + ); + + /* Add our option data to the global array. */ + $optpage_data['grps'][SMOPT_GRP_SENT_SUBFOLDERS] = $optgrp; + $optpage_data['vals'][SMOPT_GRP_SENT_SUBFOLDERS] = $optvals; +} + +/** + * Defines folder filtering rules + * + * Callback function that should exclude some folders from folder listing. + * @param array $fldr list of folders. See sqimap_mailbox_list + * @return boolean returns true, if folder has to included in folder listing + * @access private + */ +function filter_folders($fldr) { + return strtolower($fldr['unformatted'])!='inbox'; +} + +/** + * Saves sent_subfolder_options + */ +function save_option_sent_subfolders_setting($option) { + global $data_dir, $username, $use_sent_subfolders, $sent_subfolders_base; + + /* Set use_sent_subfolders as either on or off. */ + if ($option->new_value == SMPREF_SENT_SUBFOLDERS_DISABLED) { + setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF); + // for lack of anything better + setPref($data_dir, $username, 'sent_folder', $sent_subfolders_base); + } else { + setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON); + setPref($data_dir, $username, 'move_to_sent', SMPREF_ON); + } + + /* Now just save the option as normal. */ + save_option($option); +} + +/** + * Update sent_subfolders settings + * + * function updates default sent folder value and + * creates required imap folders + */ +function sent_subfolders_update_sentfolder() { + global $sent_folder, $auto_create_special, $auto_create_done; + global $sent_subfolders_base, $sent_subfolders_setting; + global $data_dir, $imapServerAddress, $imapPort; + global $use_sent_subfolders, $move_to_sent, $imap_server_type; + + sqgetGlobalVar('username', $username, SQ_SESSION); + sqgetGlobalVar('key', $key, SQ_COOKIE); + sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); + + if ($use_sent_subfolders || $move_to_sent) { + $year = date('Y'); + $month = date('m'); + $quarter = sent_subfolder_getQuarter($month); + + /* + Regarding the structure we've got three main possibilities. + One sent holder. level 0. + Multiple year holders with messages in it. level 1. + Multiple year folders with holders in it. level 2. + */ +/* + if( $imap_server_type == 'uw' ) { + $cnd_delimiter = ''; + } else { + $cnd_delimiter = $delimiter; + } +*/ + $cnd_delimiter = $delimiter; + + switch ($sent_subfolders_setting) { + case SMPREF_SENT_SUBFOLDERS_YEARLY: + $level = 1; + $sent_subfolder = $sent_subfolders_base . $cnd_delimiter + . $year; + break; + case SMPREF_SENT_SUBFOLDERS_QUARTERLY: + $level = 2; + $sent_subfolder = $sent_subfolders_base . $cnd_delimiter + . $year + . $delimiter . $quarter; + $year_folder = $sent_subfolders_base . $cnd_delimiter + . $year; + break; + case SMPREF_SENT_SUBFOLDERS_MONTHLY: + $level = 2; + $sent_subfolder = $sent_subfolders_base . $cnd_delimiter + . $year + . $delimiter . $month; + $year_folder = $sent_subfolders_base . $cnd_delimiter . $year; + break; + case SMPREF_SENT_SUBFOLDERS_DISABLED: + default: + $level = 0; + $sent_subfolder = $sent_folder; + $year_folder = $sent_folder; + } + + /* If this folder is NOT the current sent folder, update stuff. */ + if ($sent_subfolder != $sent_folder) { + /* First, update the sent folder. */ + + setPref($data_dir, $username, 'sent_folder', $sent_subfolder); + setPref($data_dir, $username, 'move_to_sent', SMPREF_ON); + $sent_folder = $sent_subfolder; + $move_to_sent = SMPREF_ON; + + /* Auto-create folders, if they do not yet exist. */ + if ($sent_folder != 'none') { + /* Create the imap connection. */ + $ic = sqimap_login + ($username, $key, $imapServerAddress, $imapPort, 10); + + /* Auto-create the year folder, if it does not yet exist. + (only for monthly/quarterly modes */ + if ($sent_subfolders_setting != SMPREF_SENT_SUBFOLDERS_YEARLY) { + if (!sqimap_mailbox_exists($ic, $year_folder)) { + sqimap_mailbox_create($ic, $year_folder, ($level==1)?'':'noselect'); + } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) { + sqimap_subscribe($ic, $year_folder); + } + } + + /* Auto-create the subfolder, if it does not yet exist. */ + if (!sqimap_mailbox_exists($ic, $sent_folder)) { + sqimap_mailbox_create($ic, $sent_folder, ''); + } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) { + sqimap_subscribe($ic, $sent_subfolder); + } + + /* Close the imap connection. */ + sqimap_logout($ic); + } + } + } +} + +/** + * Update the folder settings/auto-create new subfolder + */ +function save_option_sent_subfolders_base($option) { + // first save the option as normal + save_option($option); + + // now update folder settings and auto-create first subfolder if needed + sent_subfolders_update_sentfolder(); +} + +/** + * Sets quarter subfolder names + * + * @param string $month numeric month + * @return string quarter name (Q + number) + */ +function sent_subfolder_getQuarter($month) { + switch ($month) { + case '01': + case '02': + case '03': + $result = '1'; + break; + case '04': + case '05': + case '06': + $result = '2'; + break; + case '07': + case '08': + case '09': + $result = '3'; + break; + case '10': + case '11': + case '12': + $result = '4'; + break; + default: + $result = 'ERR'; + } + + /* Return the current quarter. */ + return ('Q' . $result); +} + +/** + * detects if mailbox is part of sent_subfolders + * + * @param string $mb imap folder name + * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders + */ +function sent_subfolders_special_mailbox($mb) { + global $data_dir, $username, $sent_folder; + + sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +/* + if( $imap_server_type == 'uw' ) { + $cnd_delimiter = ''; + } else { + $cnd_delimiter = $delimiter; + } +*/ + $cnd_delimiter = $delimiter; + + $use_sent_subfolders = getPref + ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF); + $sent_subfolders_base = getPref($data_dir, $username, 'sent_subfolders_base', $sent_folder); + + if ($use_sent_subfolders == SMPREF_ON && + ($mb == $sent_subfolders_base || stristr($mb,$sent_subfolders_base. $cnd_delimiter) ) ) { + return 1; + } + return 0; +} diff --git a/ehcp/webmail2/plugins/spamcop/README b/ehcp/webmail2/plugins/spamcop/README new file mode 100644 index 0000000..c80da44 --- /dev/null +++ b/ehcp/webmail2/plugins/spamcop/README @@ -0,0 +1,51 @@ +SpamCop Reporting + +Helps you identify spam and send a proper message to the correct address to +SpamCop. (See http://spamcop.net/ for more information) + + +Features +======== + +* Quick one-click interface to report spam via email +* Alternate, but immediate form-based processing + + +Description +=========== + +Tired of getting spam? SpamCop helps you report it to the proper people. +It even creates spam reports and will mail them off for you. All that is +required to send a spam report is about a few seconds of your time and about +five clicks. + +It is strongly suggested you set up a mail forwarder account and have it +forwarded to your current mailbox. Sometimes mail reported with SpamCop +gets on weird spam mailing lists. If your happens to get on the list, you +can then just delete the forwarder and get a new one. Make sure to use the +forwarder to sign up for SpamCop and get the required information for the +plugin. + + +Installation +============ + +Go back to the main directory, run configure and add the plugin. + + +API +=== + +SquirrelMail hooks used by plugin: +* loading_prefs +* optpage_register_block +* read_body_header_right +* compose_send + +Plugin preference keys: +* spamcop_enabled +* spamcop_delete +* spamcop_save +* spamcop_method +* spamcop_type +* spamcop_id diff --git a/ehcp/webmail2/plugins/spamcop/index.php b/ehcp/webmail2/plugins/spamcop/index.php new file mode 100644 index 0000000..1c21534 --- /dev/null +++ b/ehcp/webmail2/plugins/spamcop/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/spamcop/options.php b/ehcp/webmail2/plugins/spamcop/options.php new file mode 100644 index 0000000..6eecbec --- /dev/null +++ b/ehcp/webmail2/plugins/spamcop/options.php @@ -0,0 +1,184 @@ +" . _("Disable it") . ")\n"; + } else { + $ret = _("Disabled") . " (" . _("Enable it") . ")\n"; + } + return $ret; +} + +displayPageHeader($color, 'None'); + +/* globals */ +sqgetGlobalVar('action', $action); +sqgetGlobalVar('meth', $meth); +sqgetGlobalVar('ID' , $ID); + +sqgetGlobalVar('username', $username, SQ_SESSION); +/* end of globals */ + +$action = (!isset($action) ? '' : $action); + +switch ($action) { + case 'enable': + setPref($data_dir, $username, 'spamcop_enabled', 1); + break; + case 'disable': + setPref($data_dir, $username, 'spamcop_enabled', ''); + break; + case 'save': + setPref($data_dir, $username, 'spamcop_delete', ''); + break; + case 'delete': + setPref($data_dir, $username, 'spamcop_delete', 1); + break; + case 'meth': + if (isset($meth)) { + setPref($data_dir, $username, 'spamcop_method', $meth); + } + break; + case 'save_id': + if (isset($ID)) { + $ID = trim($ID); + $ID = preg_replace('/@.*/','',$ID); + $ID = preg_replace('/.*\./','',$ID); + setPref($data_dir, $username, 'spamcop_id', $ID); + } + break; +} + +global $spamcop_enabled, $spamcop_delete, $spamcop_quick_report; +spamcop_load(); + +?> +
            + +
            +
            + +
            +
            +
            + + + + + + + \n" . + '(' . _("Only works with email-based reporting") . ')', + 'right','','valign="top"'); + echo html_tag('td', spamcop_enable_disable($spamcop_delete,'save','delete'),'','','valign="top"'); + ?> + + + + + + + " . + '(' . _("see below") . ')','right','','valign="top"'); + ?> + + +
            +
            + + + \n"; + ?> +
            + + + \n"; + ?> +
            +' . _("About SpamCop") . '
            '; +echo _("SpamCop is a free service that greatly assists in finding the true source of the spam and helps in letting the proper people know about the abuse."); +echo "

            \n"; + +echo '

            '; +printf(_("To use it, you must get a SpamCop authorization code. There is a free %ssign up page%s so you can use SpamCop."), '', ''); +echo "

            \n"; + +echo '

            ' . _("Before you sign up, be warned") . '
            '; +printf(_("Some users have reported that the email addresses used with SpamCop find their way onto spam lists. To be safe, you can just create an email forwarding account and have all SpamCop reports get sent to there. Also, if it gets flooded with spam, you can then just delete that account with no worries about losing your real email address. Just go create an email forwarder somewhere (%s has a %slist of places%s) so that messages from system administrators and what not can be sent to you."), 'Yahoo!', '', ''); +echo "

            \n"; + +echo '

            '; +echo _("Once you have signed up with SpamCop and have received your SpamCop authorization code, you need to enable this plugin by clicking the link above. Once enabled, you go about your normal life. If you encounter a spam message in your mailbox, just view it. On the right-hand side, near the top of where the message is displayed, you will see a link to report this message as spam. Clicking on it brings you to a confirmation page. Confirming that you want the spam report sent will do different things with different reporting methods."); +echo "

            \n"; + +echo '

            ' . _("Email-based reporting") . '
            '; +echo _("Pressing the button forwards the message to the SpamCop service and will optionally delete the message. From there, you just need to go to your INBOX and quite soon a message should appear from SpamCop. (It gets sent to the account you registered with, so make sure that your mail forwarder works!) Open it up, click on the appropriate link at the top, and a new browser window will open."); +echo "

            \n"; + +if ($spamcop_quick_report) { + echo '

            '; + echo _("Currently, the quick reporting just forwards the request to the thorough reporting. Also, it appears that this is for members (non-free) only. Hopefully this will change soon."); + echo "

            \n"; +} + +echo '

            ' . _("Web-based reporting") . '
            '; +echo _("When you press the button on the confirmation page, this will pop open a new browser window and the SpamCop service should appear inside. The message will not be deleted (working on that part), but you won't need to wait for a response email to start the spam reporting."); +echo "

            \n"; + +echo '

            '; +echo _("The SpamCop service will display information as it finds it, so scroll down until you see a form button. It might pause a little while it is looking up information, so be a little patient. Read what it says, and submit the spam. Close the browser window. Press Cancel or click on the appropriate mail folder to see messages and/or delete the spam."); +echo "

            \n"; + +echo '

            ' . _("SpamCop service type") . '
            '; +echo _("Service type option allows selecting which SpamCop services you are using. Member services use different web reporting forms and does not display nags. You can purchase these services, if you want to support SpamCop."); +echo "

            \n"; + +echo '

            ' . _("More information") . '
            '; +printf(_("For more information about SpamCop, it's services, spam in general, and many related topics, try reading through SpamCop's %sHelp and Feedback%s section."), '', ''); +echo "

            \n"; +?> + diff --git a/ehcp/webmail2/plugins/spamcop/setup.php b/ehcp/webmail2/plugins/spamcop/setup.php new file mode 100644 index 0000000..fee47ad --- /dev/null +++ b/ehcp/webmail2/plugins/spamcop/setup.php @@ -0,0 +1,143 @@ +\n"; + + /* + Catch situation when user use quick_email and does not update + preferences. User gets web_form link. If prefs are set to + quick_email format - they will be updated after clicking the link + */ + if (! $spamcop_quick_report && $spamcop_method=='quick_email') { + $spamcop_method = 'web_form'; + } + + if ($spamcop_method == 'web_form') { +?> + + _("SpamCop - Spam Reporting"), + 'url' => '../plugins/spamcop/options.php', + 'desc' => _("Help fight the battle against unsolicited email. SpamCop reads the spam email and determines the correct addresses to send complaints to. Quite fast, really smart, and easy to use."), + 'js' => false + ); +} + + +// When we send the email, we optionally trash it then too +function spamcop_while_sending() { + global $mailbox, $spamcop_delete, $auto_expunge, + $username, $key, $imapServerAddress, $imapPort; + + // load sqgetGlobalVar() + include_once(SM_PATH . 'functions/global.php'); + + // check if compose.php is called by spamcop plugin + if (sqgetGlobalVar('spamcop_is_composing' , $spamcop_is_composing)) { + if ($spamcop_delete) { + $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + sqimap_mailbox_select($imapConnection, $mailbox); + sqimap_msgs_list_delete($imapConnection, $mailbox, $spamcop_is_composing); + if ($auto_expunge) + sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } + // change default email composition setting. Plugin always operates in right frame. + // make sure that compose.php redirects to right page. Temporally override. + global $compose_new_win; + $compose_new_win = false; + } +} diff --git a/ehcp/webmail2/plugins/spamcop/spamcop.php b/ehcp/webmail2/plugins/spamcop/spamcop.php new file mode 100644 index 0000000..7649289 --- /dev/null +++ b/ehcp/webmail2/plugins/spamcop/spamcop.php @@ -0,0 +1,182 @@ +parent; + } + if ($response == 'OK') { + $subject = encodeHeader($message->rfc822_header->subject); + array_shift($body_a); + $body = implode('', $body_a) . "\r\n"; + + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + $fp = fopen( $full_localfilename, 'w'); + fwrite ($fp, $body); + fclose($fp); + + $composeMessage->initAttachment('message/rfc822','email.txt', $localfilename); + } + return $composeMessage; +} + + +/* GLOBALS */ + +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); + +sqgetGlobalVar('mailbox', $mailbox, SQ_GET); +sqgetGlobalVar('passed_id', $passed_id, SQ_GET); + +if (! sqgetGlobalVar('startMessage', $startMessage, SQ_GET) ) { + $startMessage = 1; +} +if (! sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_GET) ) { + $passed_ent_id = 0; +} + +sqgetGlobalVar('compose_messages', $compose_messages, SQ_SESSION); + +if(! sqgetGlobalVar('composesession', $composesession, SQ_SESSION) ) { + $composesession = 0; + sqsession_register($composesession, 'composesession'); +} +/* END GLOBALS */ + + + displayPageHeader($color, $mailbox); + + $imap_stream = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 0); + sqimap_mailbox_select($imap_stream, $mailbox); + + if ($spamcop_method == 'quick_email' || + $spamcop_method == 'thorough_email') { + // Use email-based reporting -- save as an attachment + $session = "$composesession"+1; + $composesession = $session; + sqsession_register($composesession,'composesession'); + if (!isset($compose_messages)) { + $compose_messages = array(); + } + if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL)) { + $composeMessage = new Message(); + $rfc822_header = new Rfc822Header(); + $composeMessage->rfc822_header = $rfc822_header; + $composeMessage->reply_rfc822_header = ''; + $compose_messages[$session] = $composeMessage; + sqsession_register($compose_messages,'compose_messages'); + } else { + $composeMessage=$compose_messages[$session]; + } + + + $message = sqimap_get_message($imap_stream, $passed_id, $mailbox); + $composeMessage = getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, + $passed_ent_id, $imap_stream); + + $compose_messages[$session] = $composeMessage; + sqsession_register($compose_messages, 'compose_messages'); + + $fn = getPref($data_dir, $username, 'full_name'); + $em = getPref($data_dir, $username, 'email_address'); + + $HowItLooks = $fn . ' '; + if ($em != '') + $HowItLooks .= '<' . $em . '>'; + } + + +echo "

            "; +echo _("Sending this spam report will give you back a reply with URLs that you can click on to properly report this spam message to the proper authorities. This is a free service. By pressing the \"Send Spam Report\" button, you agree to follow SpamCop's rules/terms of service/etc."); +echo "

            "; + +?> + + + + + +
            +\n"; + echo '\n"; +} else { + ?>
            + + + \n"; +} + ?>
            +
            +
            + + + + + + + +\n"; + } else { + $spam_message = mime_fetch_body ($imap_stream, $passed_id, $passed_ent_id, 50000); + + if (strlen($spam_message) == 50000) { + $Warning = "\n[truncated by SpamCop]\n"; + $spam_message = substr($spam_message, 0, 50000 - strlen($Warning)) . $Warning; + } + if (isset($js_web) && $js_web) { +?> + + + +"; + } +?> +
            +
            + diff --git a/ehcp/webmail2/plugins/squirrelspell/INSTALL b/ehcp/webmail2/plugins/squirrelspell/INSTALL new file mode 100644 index 0000000..6bae023 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/INSTALL @@ -0,0 +1,68 @@ +SquirrelSpell plugin +-------------------- + +Modify the sqspell_config.php file making sure you have ispell or aspell +available on your system and located in PHP's path. The squirrelspell +doesn't check for that and if it is not available, you're just going to +get a "No errors found" message every time. :) Quite pleasing, but not +very useful. + +Read files in "doc" directory -- they explain some features. + +Enable the plugin either by hand or by running the configure script from +your SquirrelMail install directory. + +NOTE: If you are using php >= 4.3.0 squirrelspell should work in safe mode. +Otherwise, you may have to disable safe mode for the squirrelspell directory. + APACHE CONF EXAMPLE: + + php_admin_value safe_mode 0 + + + +Enjoy and report bugs. ;) + +This is an options commented sqspell_config.php + + 'ispell -a', + 'Spanish' => 'ispell -d spanish -a'); + +/** + * Default dictionary + */ +$SQSPELL_APP_DEFAULT = 'English'; + +/** + * File that stores user's dictionary + * + * This setting is used only when squirrelspell is upgraded from + * older setup. Since 1.5.1 SquirrelSpell stores all settings in + * same place that stores other SquirrelMail user preferences. + */ +$SQSPELL_WORDS_FILE = + getHashedFile($username, $data_dir, "$username.words"); + diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/CRYPTO b/ehcp/webmail2/plugins/squirrelspell/doc/CRYPTO new file mode 100644 index 0000000..d64e444 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/CRYPTO @@ -0,0 +1,30 @@ +CRYPTOGRAPHY SUPPORT IN SQUIRRELSPELL +-------------------------------------- + +Starting with version v0.3 SquirrelSpell is capable of working with encrypted +user dictionaries. However, this option is only available when PHP +is compiled with support for MCRYPT. This is relatively easy -- to enable +MCRYPT support, follow instructions at: + +http://www.php.net/mcrypt + +NOTE: You will need libmcrypt version 2.4.x or above for SquirrelSpell +to work. + +HOW IT'S DONE +-------------- +SquirrelSpell encrypts the dictionary with the user's mailbox password, +thus making the encryption/decryption process transparent to the user. +The algorythm used for encryption is Blowfish, but you may manually override +it in the code if you so wish. + +The only shortcoming this approach has -- when mailbox password is changed, +SquirrelSpell asks the user to enter the old password in order to re-encrypt +the file with the new key. If the user doesn't remember the password, then +the file is lost, unless you want to brute-force it open. + +The encryption is off by default and users are warned about remembering +their passwords before they enable encryption of their personal dictionary. + +I haven't tested the overhead. If anyone has any benchmarks -- you are +welcome to share them. diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/ChangeLog b/ehcp/webmail2/plugins/squirrelspell/doc/ChangeLog new file mode 100644 index 0000000..6fc6368 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/ChangeLog @@ -0,0 +1,84 @@ +SQUIRRELSPELL + +v0.3.7 +------ +- General formatting updates, javadoc-style comments, and cleanups. +- Potential privacy vulnerability fixed (possible symlink attack) +- Moving some strings from .js files into .mod or .php so they can be + translated. +- Miscellaneous code moves and smallish rewrites. + +v0.3.6 +------ +- Remote arbirtary execution as apache user vulnerability fix. + +v0.3.5 +------- +- Making it work with 1.1.1 broke it under 1.0.6. Decided not to support + developmental versions after this release. + +v0.3.4 +------- +- Changes to unbreak it in 1.1.1. :) + +v0.3.3 +------- +- Apparently, magic quotes wasn't a bug, but something introduced in 1.0.6, + so I took out all magic-quotes escaping routines, since it's done + automatically now by validate.php. + +v0.3.2 +------- +- Rolled back changes in v0.3.1 +- Workaround for an odd bug with PHP's magic_quotes_gpc +- Changed trim to chop so the newline-trimming function doesn't trim + leading spaces. +- Changed SOUP_NAZI to only deny Opera-4 versions +- Moved SQSPELL_VERSION to sqspell_functions.php for easier + upgrades. + +v0.3.1 +------- +Changes to make it work with 1.0.5. + +v0.3 +----- +Added vlink and alink settings, plus fixed some colors. + +v0.3b +------ +- Major code re-organization. +- Moved modules into separate directory. +- Moved most JavaScript out of the main code into separate .js files +- Created generic GUI-wrappers for most interface screens. +- Added support for multiple international dictionaries. +- Added MCRYPT support for encrypting the user dictionaries. +- No longer checks lines starting with ">" (reply). +- No longer checks anything past the "--" on a single line (signature). +- SquirrelSpell options are now on the main OPTIONS page, not on the + personal options page. + +v0.2.1 +------ +Added a SoupNazi function. :)) Checks for bad browsers which are known not to +work with SquirrelSpell due to their odd JavaScript. + +v0.2pl1 +------- +Fixed the Magic Quotes problems. + +v0.2 +----- +Added user dictionaries. + +v0.1.1 +------- +Added support for aspell + +v0.1pl1 +-------- +Fixed Magic Quotes errors. + +version v0.1 +------------- +Initial release. diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/PRIVACY b/ehcp/webmail2/plugins/squirrelspell/doc/PRIVACY new file mode 100644 index 0000000..c108cc0 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/PRIVACY @@ -0,0 +1,14 @@ +PRIVACY CONCERNS WHEN USING SQUIRRELSPELL: +------------------------------------------- + +Beginning with version v0.2 SquirrelSpell saves personal dictionary on the +server. This has a potential of a serious privacy issue, therefore you +should configure your system to disallow web access to the directory where +your user dictionaries are stored. By default they are stored in your +$data_dir which you provided in your SquirrelMail config. This is the best +option, but you should read the SquirrelMail FAQ's and Readme's on how to +secure that directory. + +Also, see the CRYPTO file for instructions on how to enable encryption +of user dictionaries. This is done in order to further enhance the +privacy of your users. diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/README b/ehcp/webmail2/plugins/squirrelspell/doc/README new file mode 100644 index 0000000..805d125 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/README @@ -0,0 +1,54 @@ +SquirrelSpell +-------------- + +SquirrelSpell is a JavaScript-powered spellchecker written to work with +SquirrelMail webmail interface. + +LICENSE: +--------- +This is free software released under GNU GPL license and comes with no +warranty of any kind. You may modify, borrow, or redistribute code as long +as it doesn't violate the GNU GPL license. You can read more about this +license at http://www.gnu.org/ + +FEATURES: +---------- +SquirrelSpell works with UN*X's ISPELL or ASPELL libraries and +SquirrelMail version 1.4 and higher. No PHP recompilation required, +unless you wish to enable MCRYPT support. + +* SpellChecker: +ISPELL or ASPELL. It all depends on them. Read configuration parameters in +sqspell_config.php. Starting with version v0.3 supports multiple international +dictionaries. + +* User Dictionary: +SquirrelSpell adds words to the user dictionary. You may edit your +dictionary under options->personal options->Edit my dictionary. + +* Encryption: +Starting with version v0.3 SquirrelSpell is capable of working with +encrypted user dictionaries. See doc/CRYPTO for information on how to +enable this feature. + +* i18n and l10n: +SquirrelSpell supports any international dictionaries provided by ispell +or aspell. However, since there isn't a translation interface available +for SquirrelMail plugins, all messages produced by SquirrelSpell will be +in English. + +AUTHOR: +-------- +This plugin was originally authored by Konstantin Riabitsev +(http://www.mricon.com/) and is now maintained by the SquirrelMail Project +Team. + +SUPPORT: +--------- +Send support questions and bug reports to the plugins mailing list: +squirrelmail-plugins@lists.sourceforge.net. When reporting a bug +don't forget to mention your browser version, SquirrelMail and +SquirrelSpell versions, as well as any other useful info. + +ENJOY. :) +--------- diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/UPGRADING b/ehcp/webmail2/plugins/squirrelspell/doc/UPGRADING new file mode 100644 index 0000000..1537b67 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/UPGRADING @@ -0,0 +1,15 @@ +From version v0.2 to version v0.3 +---------------------------------- + +The user dictionaries will be converted to v0.3 format. Once they are +converted, you can't downgrade back to v0.2. If this scares you, backup all +*.words files in your $data_dir somewhere safe. + +Files are renamed around. config.php is now sqspell_config.php. + +When you are setting up SQSPELL_DEFAULT_APP in the sqspell_config, keep in +mind that this has to reflect whichever dictionary you used in version 0.2. +Say, if you used "ispell -d german", you will need to specify German as +your SQSPELL_DEFAULT_APP so user dictionaries can be upgraded successfully. +Otherwise wrong words will end up in a wrong dictionary. + diff --git a/ehcp/webmail2/plugins/squirrelspell/doc/index.php b/ehcp/webmail2/plugins/squirrelspell/doc/index.php new file mode 100644 index 0000000..03517d7 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/doc/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/index.php b/ehcp/webmail2/plugins/squirrelspell/index.php new file mode 100644 index 0000000..03517d7 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/js/WHATISTHIS b/ehcp/webmail2/plugins/squirrelspell/js/WHATISTHIS new file mode 100644 index 0000000..b26031d --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/js/WHATISTHIS @@ -0,0 +1,3 @@ +squirrelspell/js + +These are javascript files used by SquirrelSpell. diff --git a/ehcp/webmail2/plugins/squirrelspell/js/check_me.js b/ehcp/webmail2/plugins/squirrelspell/js/check_me.js new file mode 100644 index 0000000..1301953 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/js/check_me.js @@ -0,0 +1,300 @@ +/** + * check_me.js + * + * Copyright (c) 1999-2011 The SquirrelMail Project Team + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * This JavaScript app is the driving power of the SquirrelSpell's + * main spellchecker window. Hope you have as much pain figuring + * it out as it took to write. ;)) + * + * $Id: check_me.js 14084 2011-01-06 02:44:03Z pdontthink $ + */ + +var CurrentError=0; +var CurrentLocation=0; + +var CurrentLine; +var CurrentSymbol; +var ChangesMade=false; + +/** + * This function loads spellchecking errors into the form + * displayed to the user. + * + * @return void + */ +function populateSqspellForm(){ + CurrentWord=Word=misses[CurrentError]; + WordLocations = locations[CurrentError].split(", "); + CurrentLoc = WordLocations[CurrentLocation]; + if(CurrentLocation==WordLocations.length-1) { + CurrentLocation=0; + } else { + CurrentLocation++; + } + + tmp = CurrentLoc.split(":"); + CurrentLine=parseInt(tmp[0]); + CurrentSymbol=parseInt(tmp[1]); + document.forms[0].sqspell_error.value=Word; + LineValue=sqspell_lines[CurrentLine]; + StartWith=0; + NewLineValue=""; + if (CurrentSymbol > 40){ + StartWith=CurrentSymbol-40; + NewLineValue = "..."; + } + EndWith=LineValue.length; + EndLine=""; + if (EndWith > CurrentSymbol + 40){ + EndWith=CurrentSymbol+40; + EndLine="..."; + } + NewLineValue+=LineValue.substring(StartWith, CurrentSymbol) + "*" + Word + "*" + LineValue.substring(CurrentSymbol + Word.length, EndWith) + EndLine; + document.forms[0].sqspell_line_area.value=NewLineValue; + + if (suggestions[CurrentError]){ + WordSuggestions = suggestions[CurrentError].split(", "); + for (i=0; i= 0){ + allLoc = locations[i].split(", "); + for (j=0; j lSymbol){ + tmp[1] = tmp[1] + difference; + allLoc[j] = tmp.join(":"); + } + } + } + locations[i] = allLoc.join(", "); + } + } +} + +/** + * This function writes the changes back into the compose form. + * + * @return void + */ +function sqspellCommitChanges(){ + newSubject = sqspell_lines[0]; + newBody = ""; + for (i=1; i ($Author: graf25 $) + * @version $Date: 2002-01-30 19:45:53 -0800 (Wed, 30 Jan 2002) $ + */ + +/** + * This function is the only thing. It is called on form submit and + * asks the user some questions. + */ +function checkMe(){ + if (!document.forms[0].action.checked){ + alert (ui_makesel); + return false; + } + if (document.forms[0].action.value=="encrypt") + cmsg=ui_encrypt; + if (document.forms[0].action.value=="decrypt") + cmsg=ui_decrypt; + return confirm(cmsg); +} diff --git a/ehcp/webmail2/plugins/squirrelspell/js/decrypt_error.js b/ehcp/webmail2/plugins/squirrelspell/js/decrypt_error.js new file mode 100644 index 0000000..d45beaf --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/js/decrypt_error.js @@ -0,0 +1,26 @@ +/** + * decrypt_error.js + * ----------------- + * Some client-side form-checks. Trivial stuff. + * + * $Id: decrypt_error.js 2301 2002-01-31 03:45:53Z graf25 $ + * + * @author Konstantin Riabitsev ($Author: graf25 $) + * @version $Date: 2002-01-30 19:45:53 -0800 (Wed, 30 Jan 2002) $ + */ + +function AYS(){ + if (document.forms[0].delete_words.checked && document.forms[0].old_key.value){ + alert (ui_candel); + return false; + } + + if (!document.forms[0].delete_words.checked && !document.forms[0].old_key.value){ + alert(ui_choice); + return false; + } + if (document.forms[0].delete_words.checked) + return confirm(ui_willdel); + return true; +} + diff --git a/ehcp/webmail2/plugins/squirrelspell/js/index.php b/ehcp/webmail2/plugins/squirrelspell/js/index.php new file mode 100644 index 0000000..03517d7 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/js/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/js/init.js b/ehcp/webmail2/plugins/squirrelspell/js/init.js new file mode 100644 index 0000000..d95dcb0 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/js/init.js @@ -0,0 +1,25 @@ +/** + * init.js + * + * Copyright (c) 1999-2011 The SquirrelMail Project Team + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * Grabs the text from the SquirrelMail field and submits it to + * the squirrelspell. + * + * $Id: init.js 14084 2011-01-06 02:44:03Z pdontthink $ + */ + +/** + * This is the work function. + * + * @param flag tells the function whether to automatically submit the + * form, or wait for user input. True submits the form, while + * false doesn't. + * @return void + */ +function sqspell_init(flag){ + textToSpell = opener.document.compose.subject.value + "\n" + opener.document.compose.body.value; + document.forms[0].sqspell_text.value = textToSpell; + if (flag) document.forms[0].submit(); +} diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/.htaccess b/ehcp/webmail2/plugins/squirrelspell/modules/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/WHATISTHIS b/ehcp/webmail2/plugins/squirrelspell/modules/WHATISTHIS new file mode 100644 index 0000000..e764b11 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/WHATISTHIS @@ -0,0 +1,3 @@ +squirrelspell/modules + +This is where the loadable modules for SquirrelSpell are. diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/check_me.mod b/ehcp/webmail2/plugins/squirrelspell/modules/check_me.mod new file mode 100644 index 0000000..a7dfb90 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/check_me.mod @@ -0,0 +1,478 @@ + + * @version $Id: check_me.mod 14119 2011-07-12 04:36:01Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * This function makes a javascript-powered link. Not sure why + * Philippe decided to move it outside the main code, but hey. ;) + * I bet for the i18n reasons. + * + * @param $jscode Javascript code to include in the link. + * @param $title A little pop-up title to provide for the links. + * @param $link The content of the link. + * @return void, since this just draws the content. + */ +function SpellLink($jscode, $title, $link) { + echo "$link" + . ''; +} + +/** + * Declaring globals for users with E_ALL set. + */ +global $SQSPELL_APP, $attachment_dir, $SQSPELL_EREG, $color; + +$sqspell_text = $_POST['sqspell_text']; +$sqspell_use_app = $_POST['sqspell_use_app']; + +/** + * Now we explode the lines for three reasons: + * 1) So we can ignore lines starting with ">" (reply's) + * 2) So we can stop processing when we get to "--" on a single line, + * which means that the signature is starting + * 3) So we can add an extra space at the beginning of each line. This way + * ispell/aspell don't treat these as command characters. + */ +$sqspell_raw_lines = explode("\n", $sqspell_text); +for ($i=0; $i= 4.3.0, we can use proc_open and safe mode + * and not mess w/ temp files. Otherwise we will do it the old + * way, (minus the uneeded call to cat that messes up Wintel + * boxen.) + * Thanks Ray Ferguson for providing this patch. + */ +if( check_php_version ( 4, 3 ) ) { + $descriptorspec = array( + 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from + 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to + 2 => array('pipe', 'w'), // stderr is a pipe that the child will write to + ); + $spell_proc = @proc_open($sqspell_command, $descriptorspec, $pipes); + if ( ! is_resource ( $spell_proc ) ) { + error_box ( sprintf(_("Could not run the spellchecker command (%s)."), + htmlspecialchars($sqspell_command) ) , $color ); + // close html tags and abort script. + echo ""; + exit(); + } + if ( ! @fwrite($pipes[0], $sqspell_new_text) ) { + error_box ( _("Error while writing to pipe.") , $color ); + // close all three pipes here. + for($i=0; $i<=2; $i++) { + // disable all fclose error messages + @fclose($pipes[$i]); + } + // close html tags and abort script. + echo ""; + exit(); + } + fclose($pipes[0]); + $sqspell_output = array(); + for($i=1; $i<=2; $i++) { + while(!feof($pipes[$i])) { + array_push($sqspell_output, rtrim(fgetss($pipes[$i],999),"\r\n")); + } + fclose($pipes[$i]); + } + $sqspell_exitcode=proc_close($spell_proc); +} else { + // add slash to attachment directory, if it does not end with slash. + if (substr($attachment_dir, -1) != '/') + $attachment_dir = $attachment_dir . '/'; + + // find unused file in attachment directory + do { + $floc = $attachment_dir . md5($sqspell_new_text . microtime()); + } while (file_exists($floc)); + + $fp = @fopen($floc, 'w'); + if ( ! is_resource ($fp) ) { + error_box ( sprintf(_("Could not open temporary file '%s'."), + htmlspecialchars($floc) ) , $color ); + // failed to open temp file. abort script. + echo ""; + exit(); + } + if ( ! @fwrite($fp, $sqspell_new_text) ) { + error_box ( sprintf(_("Error while writing to temporary file '%s'."), + htmlspecialchars($floc) ) , $color ); + // close file descriptor + fclose($fp); + // failed writing to temp file. abort script. + echo ""; + exit(); + } + fclose($fp); + exec("$sqspell_command < $floc 2>&1", $sqspell_output, $sqspell_exitcode); + unlink($floc); +} + +/** + * Check if the execution was successful. Bail out if it wasn't. + */ +if ($sqspell_exitcode){ + $msg= "
            " + . sprintf(_("I tried to execute '%s', but it returned:"), + $sqspell_command) . "
            "
            +     . htmlspecialchars(join("\n", $sqspell_output)) . '
            ' + . '
            ' + . '
            '; + sqspell_makeWindow(null, _("SquirrelSpell is misconfigured."), null, $msg); + exit; +} + +/** + * Load the user dictionary. + */ +$words=sqspell_getLang(sqspell_getWords(), $sqspell_use_app); +/** + * Define some variables to be used during the processing. + */ +$current_line=0; +$missed_words=Array(); +$misses = Array(); +$locations = Array(); +$errors=0; +/** + * Now we process the output of sqspell_command (ispell or aspell in + * ispell compatibility mode, whichever). I'm going to be scarce on + * comments here, since you can just look at the ispell/aspell output + * and figure out what's going on. ;) The best way to describe this is + * "Dark Magic". + */ +for ($i=0; $i\n" + . "\n" + . "\n" + . "\n"; + + + displayHtmlHeader(_("SquirrelSpell Results"),$extrajs); + + echo "\n"; + ?> + + + + + + + + + + +
            + + + +
            +
            +
            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + "; + echo $sptag . _("Line with an error:") . ''; + ?> +
            + +
            + '; + ?> + + + + '; + ?> + + +
            + '; + ?> + + + + '; + ?> + + +

            + + + + +
            +

            + ' + . ' '; + ?> +
            +
            +
            + +
            ' . + '
            '; + sqspell_makeWindow(null, _("No errors found"), null, $msg); +} + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ +?> diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/crypto.mod b/ehcp/webmail2/plugins/squirrelspell/modules/crypto.mod new file mode 100644 index 0000000..0089b16 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/crypto.mod @@ -0,0 +1,75 @@ + + * @version $Id: crypto.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * Declaring globals for E_ALL + */ +global $SQSPELL_CRYPTO; + +switch ($_POST['action']){ + case 'encrypt': + /** + * Let's encrypt the file and save it in an encrypted format. + */ + $words=sqspell_getWords(); + /** + * Flip the flag so the sqspell_writeWords function knows to encrypt + * the message before writing it to the disk. + */ + $SQSPELL_CRYPTO=true; + /** + * Call the function that does the actual encryption_decryption. + */ + sqspell_writeWords($words); + $msg='

            ' + . _("Your personal dictionary has been encrypted and is now stored in an encrypted format.") + . '

            '; + break; + case 'decrypt': + /** + * Let's decrypt the file and save it as plain text. + */ + $words=sqspell_getWords(); + /** + * Flip the flag and tell the sqspell_writeWords() function that we + * want to save it plaintext. + */ + $SQSPELL_CRYPTO=false; + sqspell_writeWords($words); + $msg='

            ' + . _("Your personal dictionary has been decrypted and is now stored as plain text.") + . '

            '; + break; + case '': + /** + * Wait, this shouldn't happen! :) + */ + $msg = '

            '._("No action requested.").'

            '; + break; +} +sqspell_makePage( _("Personal Dictionary Crypto Settings"), null, $msg); + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/crypto_badkey.mod b/ehcp/webmail2/plugins/squirrelspell/modules/crypto_badkey.mod new file mode 100644 index 0000000..cfe33d0 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/crypto_badkey.mod @@ -0,0 +1,97 @@ + + * @version $Id: crypto_badkey.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SCRIPT_NAME; + +$delete_words = $_POST['delete_words']; +if(isset($_POST['old_key'])) { + $old_key = $_POST['old_key']; +} + +if ($delete_words=='ON'){ + /** + * $delete_words is passed via the query_string. If it's set, then + * the user asked to delete the file. Erase the bastard and hope + * this never happens again. + */ + sqspell_deleteWords(); + /** + * See where we were called from -- pop-up window or options page + * and call whichever wrapper is appropriate. + * I agree, this is dirty. TODO: make it so it's not dirty. + */ + if (strstr($SCRIPT_NAME, 'sqspell_options')){ + $msg='

            ' . _("Your personal dictionary was erased.") . '

            '; + sqspell_makePage(_("Dictionary Erased"), null, $msg); + } else { + /** + * The _("Your....") has to be on one line. Otherwise xgettext borks + * on getting the strings. + */ + $msg = '

            ' + . _("Your personal dictionary was erased. Please close this window and click \"Check Spelling\" button again to start your spellcheck over.") + . '

            ' + . '

            ' + . '' + . '

            '; + sqspell_makeWindow(null, _("Dictionary Erased"), null, $msg); + } + exit; +} + +if ($old_key){ + /** + * User provided another key to try and decrypt the dictionary. + * Call sqspell_getWords. If this key fails, the function will + * handle it. + */ + $words=sqspell_getWords(); + /** + * It worked! Pinky, you're a genius! + * Write it back this time encrypted with a new key. + */ + sqspell_writeWords($words); + /** + * See where we are and call a necessary GUI-wrapper. + * Also dirty. TODO: Make this not dirty. + */ + if (strstr($SCRIPT_NAME, 'sqspell_options')){ + $msg = '

            ' + . _("Your personal dictionary was re-encrypted successfully. Now return to the "SpellChecker options" menu and make your selection again." ) + . '

            '; + sqspell_makePage(_("Successful re-encryption"), null, $msg); + } else { + $msg = '

            ' + . _("Your personal dictionary was re-encrypted successfully. Please close this window and click \"Check Spelling\" button again to start your spellcheck over.") + . '

            '; + sqspell_makeWindow(null, _("Dictionary re-encrypted"), null, $msg); + } + exit; +} + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/edit_dic.mod b/ehcp/webmail2/plugins/squirrelspell/modules/edit_dic.mod new file mode 100644 index 0000000..7119674 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/edit_dic.mod @@ -0,0 +1,114 @@ + + * @version $Id: edit_dic.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $color; +/** + * Get the user dictionary and see if it's empty or not. + */ +$words=sqspell_getWords(); +if (!$words){ + /** + * Agt. Smith: "You're empty." + * Neo: "So are you." + */ + sqspell_makePage(_("Personal Dictionary"), null, + '

            ' . _("No words in your personal dictionary.") + . '

            '); +} else { + /** + * We're loaded with booty. + */ + $pre_msg = '

            ' + . _("Please check any words you wish to delete from your dictionary.") + . "

            \n"; + $pre_msg .= "\n"; + /** + * Get how many dictionaries this user has defined. + */ + $langs=sqspell_getSettings($words); + for ($i=0; $i' + . '' + . "\n"; + } + } + /** + * Check if all dictionaries were empty. + */ + if (empty($msg)) { + $msg = '

            ' . _("No words in your personal dictionary.") . '

            '; + } else { + $msg .= '
            " + . sprintf( _("%s dictionary"), $langs[$i] ) . '
            ' + . '
            ' + . '' + . '' + . '' + . '' + . "
            \n"; + $words_ary=explode("\n", $lang_words); + /** + * There are two lines we need to remove: + * 1st: # Language + * last: # End + */ + array_pop($words_ary); + array_shift($words_ary); + /** + * Do some fancy stuff to separate the words into three + * columns. + */ + for ($j=0; $j\n"; + } + $msg .= ' ' + . htmlspecialchars($words_ary[$j])."
            \n"; + } + $msg .= '
            " + . '' + . '

            ' + . "
            '; + } + sqspell_makePage(_("Edit your Personal Dictionary"), null, $msg); +} + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/enc_setup.mod b/ehcp/webmail2/plugins/squirrelspell/modules/enc_setup.mod new file mode 100644 index 0000000..62d8df0 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/enc_setup.mod @@ -0,0 +1,101 @@ + + * @version $Id: enc_setup.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SQSPELL_CRYPTO; + +/** + * Set up some i18n'able wrappers for javascript. + */ +$msg = '"; + +$words=sqspell_getWords(); +/** + * When getting the user dictionary, the SQSPELL_CRYPTO flag will be + * set to "true" if the dictionary is encrypted, or "false" if it is + * in plain text. + */ +if ($SQSPELL_CRYPTO){ + /** + * Current format is encrypted. + * Unfortunately, the following text needs to be all on one line, + * unless someone fixes xgettext. ;( + */ + $msg .= + '

            ' + . _("Your personal dictionary is currently encrypted.") + . '

            ' + . _("This helps protect your privacy in case the web-mail system gets compromized and your personal dictionary ends up stolen. It is currently encrypted with the password you use to access your mailbox, making it hard for anyone to see what is stored in your personal dictionary.") + . '

            ' + . '' . _("ATTENTION:") . '
            ' + . _("If you forget your password, your personal dictionary will become unaccessible, since it can no longer be decrypted. If you change your mailbox password, SquirrelSpell will recognize it and prompt you for your old password in order to re-encrypt the dictionary with a new key.") + . '

            ' + . '
            ' + . '' + . '

            ' + . _("Please decrypt my personal dictionary and store it in a clear-text format." ) + . '

            ' + . '

            ' + . '
            '; +} else { + /** + * Current format is clear text. + * Unfortunately, the following text needs to be all on one line, + * unless someone fixes xgettext. ;( + */ + $msg .= + '

            ' + . _("Your personal dictionary is currently not encrypted.") + . '

            ' + . _("You may wish to encrypt your personal dictionary to protect your privacy in case the webmail system gets compromized and your personal dictionary file gets stolen. When encrypted, the file's contents look garbled and are hard to decrypt without knowing the correct key (which is your mailbox password).") + . '

            ' + . '' . _("ATTENTION:") . '
            ' + . _("If you decide to encrypt your personal dictionary, you must remember that it gets "hashed" with your mailbox password. If you forget your mailbox password and the administrator changes it to a new value, your personal dictionary will become useless and will have to be created anew. However, if you or your system administrator change your mailbox password but you still have the old password at hand, you will be able to enter the old key to re-encrypt the dictionary with the new value.") + . '

            ' + . '
            ' + . '' + . '

            ' + . _("Please encrypt my personal dictionary and store it in an encrypted format.") + . '

            ' + . '

            ' + . '
            '; +} +sqspell_makePage(_("Personal Dictionary Crypto Settings"), + "crypto_settings.js", $msg); + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/forget_me.mod b/ehcp/webmail2/plugins/squirrelspell/modules/forget_me.mod new file mode 100644 index 0000000..574dc49 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/forget_me.mod @@ -0,0 +1,94 @@ + + * @version $Id: forget_me.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SQSPELL_VERSION; + +$words_ary = $_POST['words_ary']; +$sqspell_use_app = $_POST['sqspell_use_app']; + +/** + * If something needs to be deleted, then $words_ary will be + * non-zero length. + */ +if (sizeof($words_ary)){ + $words=sqspell_getWords(); + $lang_words = sqspell_getLang($words, $sqspell_use_app); + $msg = '

            ' + . sprintf(_("Deleting the following entries from %s dictionary:"), ''.$sqspell_use_app.'') + . '

            ' + . "
              \n"; + for ($i=0; $i\n"; + } + $new_words_ary=split("\n", $lang_words); + /** + * Wipe this lang, if only 2 members in array (no words left). + * # Language + * # End + */ + if (sizeof($new_words_ary)<=2) { + $lang_words=''; + } + $new_lang_words = $lang_words; + /** + * Write the dictionary back to the disk. + */ + $langs=sqspell_getSettings($words); + $words_dic = "# SquirrelSpell User Dictionary $SQSPELL_VERSION\n# " + . "Last Revision: " . date("Y-m-d") . "\n# LANG: " + . join(", ", $langs) . "\n"; + for ($i=0; $i\n"; + sqspell_makePage(_("Personal Dictionary Updated"), null, $msg); +} else { + /** + * Click on some words first, Einstein! + */ + sqspell_makePage(_("Personal Dictionary"), null, + '

              ' . _("No changes requested.") . '

              '); +} + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/forget_me_not.mod b/ehcp/webmail2/plugins/squirrelspell/modules/forget_me_not.mod new file mode 100644 index 0000000..ade69a6 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/forget_me_not.mod @@ -0,0 +1,76 @@ + + * @version $Id: forget_me_not.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SQSPELL_VERSION, $SQSPELL_APP_DEFAULT; + +$words = $_POST['words']; +$sqspell_use_app = $_POST['sqspell_use_app']; + +/** + * Because of the nature of Javascript, there is no way to efficiently + * pass an array. Hence, the words will arrive as a string separated by + * "%". To get the array, we explode the "%"'s. + * Dirty: yes. Is there a better solution? Let me know. ;) + */ +$new_words = ereg_replace("%", "\n", $words); +/** + * Load the user dictionary and see if there is anything in it. + */ +$words=sqspell_getWords(); +if (!$words){ + /** + * First time. + */ + $words_dic="# SquirrelSpell User Dictionary $SQSPELL_VERSION\n# Last " + . "Revision: " . date("Y-m-d") + . "\n# LANG: $SQSPELL_APP_DEFAULT\n# $SQSPELL_APP_DEFAULT\n"; + $words_dic .= $new_words . "# End\n"; +} else { + /** + * Do some fancy stuff in order to save the dictionary and not mangle the + * rest. + */ + $langs=sqspell_getSettings($words); + $words_dic = "# SquirrelSpell User Dictionary $SQSPELL_VERSION\n# " + . "Last Revision: " . date("Y-m-d") . "\n# LANG: " . join(", ", $langs) + . "\n"; + for ($i=0; $i'; +sqspell_makeWindow($onload, _("Personal Dictionary Updated"), null, $msg); diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/index.php b/ehcp/webmail2/plugins/squirrelspell/modules/index.php new file mode 100644 index 0000000..03517d7 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/init.mod b/ehcp/webmail2/plugins/squirrelspell/modules/init.mod new file mode 100644 index 0000000..6c38f29 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/init.mod @@ -0,0 +1,67 @@ + + * @version $Id: init.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * See if we need to give user the option of choosing which dictionary + * s/he wants to use to spellcheck his message. + */ +$langs=sqspell_getSettings(null); +$msg = '
              ' + . '' + . '' + . '

              '; +if (sizeof($langs)==1){ + /** + * Only one dictionary defined by the user. Submit the form + * automatically. + */ + $onload="sqspell_init(true)"; + $msg .= _("Please wait, communicating with the server...") + . '

              ' + . ""; +} else { + /** + * More than one dictionary. Let the user choose the dictionary first + * then manually submit the form. + */ + $onload="sqspell_init(false)"; + $msg .= _("Please choose which dictionary you would like to use to spellcheck this message:") + . '

              ' + . '' + . '' + . '

              '; +} +$msg .="
              \n"; +sqspell_makeWindow($onload, _("SquirrelSpell Initiating"), "init.js", $msg); + +/** + * For the Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/lang_change.mod b/ehcp/webmail2/plugins/squirrelspell/modules/lang_change.mod new file mode 100644 index 0000000..64532b2 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/lang_change.mod @@ -0,0 +1,109 @@ + + * @version $Id: lang_change.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) { + $submitted_token = ''; +} +sm_validate_security_token($submitted_token, 3600, TRUE); + +global $SQSPELL_APP_DEFAULT; + +$use_langs = $_POST['use_langs']; +$lang_default = $_POST['lang_default']; + +$words = sqspell_getWords(); +if (!$words) { + $words = sqspell_makeDummy(); +} +$langs = sqspell_getSettings($words); +if (sizeof($use_langs)){ + /** + * See if the user clicked any options on the previous page. + */ + if (sizeof($use_langs)>1){ + /** + * See if s/he wants more than one dictionary. + */ + if ($use_langs[0]!=$lang_default){ + /** + * See if we need to juggle the order of the dictionaries + * to make the default dictionary first in line. + */ + if (in_array($lang_default, $use_langs)){ + /** + * See if the user was dumb and chose a default dictionary + * to be something other than the ones he selected. + */ + $hold = array_shift($use_langs); + $lang_string = join(", ", $use_langs); + $lang_string = str_replace("$lang_default", "$hold", $lang_string); + $lang_string = $lang_default . ", " . $lang_string; + } else { + /** + * Yes, he is dumb. + */ + $lang_string = join(', ', $use_langs); + } + } else { + /** + * No need to juggle the order -- preferred is already first. + */ + $lang_string = join(', ', $use_langs); + } + } else { + /** + * Just one dictionary, please. + */ + $lang_string = $use_langs[0]; + } + $lang_array = explode( ',', $lang_string ); + $dsp_string = ''; + foreach( $lang_array as $a) { + $dsp_string .= _(htmlspecialchars(trim($a))) . _(", "); + } + $dsp_string = substr( $dsp_string, 0, -2 ); + $msg = '

              ' + . sprintf(_("Settings adjusted to: %s with %s as default dictionary."), ''.$dsp_string.'', ''._(htmlspecialchars($lang_default)).'') + . '

              '; +} else { + /** + * No dictionaries selected. Use system default. + */ + $msg = '

              ' + . sprintf(_("Using %s dictionary (system default) for spellcheck." ), ''.$SQSPELL_APP_DEFAULT.'') + . '

              '; + $lang_string = $SQSPELL_APP_DEFAULT; +} +$old_lang_string = join(", ", $langs); +$words = str_replace("# LANG: $old_lang_string", "# LANG: $lang_string", + $words); +/** + * Write it down where the sun don't shine. + */ +sqspell_writeWords($words); +sqspell_makePage(_("International Dictionaries Preferences Updated"), + null, $msg); + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/lang_setup.mod b/ehcp/webmail2/plugins/squirrelspell/modules/lang_setup.mod new file mode 100644 index 0000000..1eaa59c --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/lang_setup.mod @@ -0,0 +1,61 @@ + + * @version $Id: lang_setup.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SQSPELL_APP; + +$msg = '

              ' + . _("Please check any available international dictionaries which you would like to use when spellchecking:") + . '

              ' + . '
              ' + . '' + . '' + . '

              '; +/** + * Present a nice listing. + */ +$langs = sqspell_getSettings(null); +$add = '

              ' + . _("Make this dictionary my default selection:") + . " \n"; + $add .= "" . _($avail_lang) . "\n"; +} +$msg .= "

              \n" . $add . "\n"; +$msg .= "

              "; +sqspell_makePage(_("Add International Dictionaries"), null, $msg); + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/modules/options_main.mod b/ehcp/webmail2/plugins/squirrelspell/modules/options_main.mod new file mode 100644 index 0000000..9d8c693 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/modules/options_main.mod @@ -0,0 +1,57 @@ + + * @version $Id: options_main.mod 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +global $SQSPELL_APP; +$msg = '

              ' + . _("Please choose which options you wish to set up:") + . '

              ' + . '\n"; +sqspell_makePage( _("SquirrelSpell Options Menu"), null, $msg); + +/** + * For Emacs weenies: + * Local variables: + * mode: php + * End: + * vim: syntax=php + */ +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/setup.php b/ehcp/webmail2/plugins/squirrelspell/setup.php new file mode 100644 index 0000000..f7a402f --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/setup.php @@ -0,0 +1,89 @@ + + * @version $Id: setup.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** @ignore */ +if (! defined('SM_PATH')) define('SM_PATH','../../'); + +/** + * Standard SquirrelMail plugin initialization API. + * + * @return void + */ +function squirrelmail_plugin_init_squirrelspell() { + global $squirrelmail_plugin_hooks; + $squirrelmail_plugin_hooks['compose_button_row']['squirrelspell'] = + 'squirrelspell_setup'; + $squirrelmail_plugin_hooks['optpage_register_block']['squirrelspell'] = + 'squirrelspell_optpage_register_block'; + $squirrelmail_plugin_hooks['options_link_and_description']['squirrelspell'] = + 'squirrelspell_options'; +} + +/** + * This function formats and adds the plugin and its description to the + * Options screen. + * + * @return void + */ +function squirrelspell_optpage_register_block() { + global $optpage_blocks; + /** + * soupNazi checks if this browser is capable of using the plugin. + */ + if (!soupNazi()) { + /** + * The browser checks out. + * Register Squirrelspell with the $optionpages array. + */ + $optpage_blocks[] = + array( + 'name' => _("SpellChecker Options"), + 'url' => '../plugins/squirrelspell/sqspell_options.php', + 'desc' => _("Here you may set up how your personal dictionary is stored, edit it, or choose which languages should be available to you when spell-checking."), + 'js' => TRUE); + } +} + +/** + * This function adds a "Check Spelling" link to the "Compose" row + * during message composition. + * + * @return void + */ +function squirrelspell_setup() { + /** + * Check if this browser is capable of displaying SquirrelSpell + * correctly. + */ + if (!soupNazi()) { + /** + * Some people may choose to disable javascript even though their + * browser is capable of using it. So these freaks don't complain, + * use document.write() so the "Check Spelling" button is not + * displayed if js is off in the browser. + */ + echo "\n"; + } +} + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/sqspell_config.php b/ehcp/webmail2/plugins/squirrelspell/sqspell_config.php new file mode 100644 index 0000000..756af55 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/sqspell_config.php @@ -0,0 +1,37 @@ + 'ispell -a', + * 'Spanish' => 'ispell -d spanish -a' ); + * You can replace ispell with aspell keeping the same commandline: + * $SQSPELL_APP = array( 'English' => 'aspell -a', + * 'Spanish' => 'aspell -d spanish -a' ); + */ +$SQSPELL_APP = array('English' => 'ispell -a', + 'Spanish' => 'ispell -d spanish -a'); +$SQSPELL_APP_DEFAULT = 'English'; +$SQSPELL_WORDS_FILE = + getHashedFile($username, $data_dir, "$username.words"); + +$SQSPELL_EREG = 'ereg'; + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/sqspell_functions.php b/ehcp/webmail2/plugins/squirrelspell/sqspell_functions.php new file mode 100644 index 0000000..3bba714 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/sqspell_functions.php @@ -0,0 +1,526 @@ + + * @version $Id: sqspell_functions.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * This function is the GUI wrapper for the options page. SquirrelSpell + * uses it for creating all Options pages. + * + * @param string $title The title of the page to display + * @param string $scriptsrc This is used to link a file.js into the + * format. This + * allows to separate javascript from the rest of the + * plugin and place it into the js/ directory. + * @param string $body The body of the message to display. + * @return void + */ +function sqspell_makePage($title, $scriptsrc, $body){ + global $color, $SQSPELL_VERSION; + + if (! sqgetGlobalVar('MOD', $MOD, SQ_GET) ) { + $MOD = 'options_main'; + } + + displayPageHeader($color, 'None'); + echo " 
              \n"; + /** + * Check if we need to link in a script. + */ + if($scriptsrc) { + echo "\n"; + } + echo html_tag( 'table', '', 'center', '', 'width="95%" border="0" cellpadding="2" cellspacing="0"' ) . "\n" + . html_tag( 'tr', "\n" . + html_tag( 'td', '' . $title .'', 'center', $color[9] ) + ) . "\n" + . html_tag( 'tr', "\n" . + html_tag( 'td', '
              ', 'left' ) + ) . "\n" + . html_tag( 'tr', "\n" . + html_tag( 'td', $body, 'left' ) + ) . "\n"; + /** + * Generate a nice "Return to Options" link, unless this is the + * starting page. + */ + if ($MOD != "options_main"){ + echo html_tag( 'tr', "\n" . + html_tag( 'td', '
              ', 'left' ) + ) . "\n" + . html_tag( 'tr', "\n" . + html_tag( 'td', '' + . _("Back to "SpellChecker Options" page") + . '', + 'center' ) + ) . "\n"; + } + /** + * Close the table and display the version. + */ + echo html_tag( 'tr', "\n" . + html_tag( 'td', '
              ', 'left' ) + ) . "\n" + . html_tag( 'tr', + html_tag( 'td', 'SquirrelSpell ' . $SQSPELL_VERSION, 'center', $color[9] ) + ) . "\n\n"; + echo ''; +} + +/** + * Function similar to the one above. This one is a general wrapper + * for the Squirrelspell pop-up window. It's called form nearly + * everywhere, except the check_me module, since that one is highly + * customized. + * + * @param string $onload Used to indicate and pass the name of a js function + * to call in a format. + * @param string $body The content to include. + * @return void + */ +function sqspell_makeWindow($onload, $title, $scriptsrc, $body){ + global $color, $SQSPELL_VERSION; + + displayHtmlHeader($title, + ($scriptsrc ? "\n\n" : '')); + + echo "\n" + . html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '' . $title . '', 'center', $color[9] ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '
              ', 'left' ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', $body, 'left' ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '
              ', 'left' ) + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', 'SquirrelSpell ' . $SQSPELL_VERSION, 'center', $color[9] ) + ) , + '', '', 'width="100%" border="0" cellpadding="2"' ) + . "\n\n"; +} + +/** + * This function does the encryption and decryption of the user + * dictionary. It is only available when PHP is compiled with + * mcrypt support (--with-mcrypt). See doc/CRYPTO for more + * information. + * + * @param $mode A string with either of the two recognized values: + * "encrypt" or "decrypt". + * @param $ckey The key to use for processing (the user's password + * in our case. + * @param $input Content to decrypt or encrypt, according to $mode. + * @return encrypted/decrypted content, or "PANIC" if the + * process bails out. + */ +function sqspell_crypto($mode, $ckey, $input){ + /** + * Double-check if we have the mcrypt_generic function. Bail out if + * not so. + */ + if (!function_exists('mcrypt_generic')) { + return 'PANIC'; + } + /** + * Setup mcrypt routines. + */ + $td = mcrypt_module_open(MCRYPT_Blowfish, "", MCRYPT_MODE_ECB, ""); + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size ($td), MCRYPT_RAND); + mcrypt_generic_init($td, $ckey, $iv); + /** + * See what we have to do depending on $mode. + * 'encrypt' -- Encrypt the content. + * 'decrypt' -- Decrypt the content. + */ + switch ($mode){ + case 'encrypt': + $crypto = mcrypt_generic($td, $input); + break; + case 'decrypt': + $crypto = mdecrypt_generic($td, $input); + /** + * See if it decrypted successfully. If so, it should contain + * the string "# SquirrelSpell". If not, then bail out. + */ + if (!strstr($crypto, "# SquirrelSpell")){ + $crypto='PANIC'; + } + break; + } + /** + * Finish up the mcrypt routines and return the processed content. + */ + mcrypt_generic_deinit ($td); + mcrypt_module_close ($td); + return $crypto; +} + +/** + * This function transparently upgrades the 0.2 dictionary format to the + * 0.3 format, since user-defined languages have been added in 0.3 and + * the new format keeps user dictionaries selection in the file. + * + * This function will be retired soon, as it's been a while since anyone + * has been using SquirrelSpell-0.2. + * + * @param $words_string Contents of the 0.2-style user dictionary. + * @return Contents of the 0.3-style user dictionary. + */ +function sqspell_upgradeWordsFile($words_string){ + global $SQSPELL_APP_DEFAULT, $SQSPELL_VERSION; + /** + * Define just one dictionary for this user -- the default. + * If the user wants more, s/he can set them up in personal + * preferences. See doc/UPGRADING for more info. + */ + $new_words_string = + substr_replace($words_string, + "# SquirrelSpell User Dictionary $SQSPELL_VERSION\n# " + . "Last Revision: " . date("Y-m-d") + . "\n# LANG: $SQSPELL_APP_DEFAULT\n# $SQSPELL_APP_DEFAULT", + 0, strpos($words_string, "\n")) . "# End\n"; + sqspell_writeWords($new_words_string); + return $new_words_string; +} + +/** + * Right now it just returns an array with the dictionaries + * available to the user for spell-checking. It will probably + * do more in the future, as features are added. + * + * @param string $words The contents of the user's ".words" file. + * @return array a strings array with dictionaries available + * to this user, e.g. {"English", "Spanish"}, etc. + */ +function sqspell_getSettings($words){ + global $SQSPELL_APP, $SQSPELL_APP_DEFAULT; + /** + * Check if there is more than one dictionary configured in the + * system config. + */ + if (sizeof($SQSPELL_APP) > 1){ + /** + * Now load the user prefs. Check if $words was empty -- a bit of + * a dirty fall-back. TODO: make it so this is not required. + */ + if(!$words){ + $words=sqspell_getWords(); + } + if ($words){ + /** + * This user has a ".words" file. + * Find which dictionaries s/he wants to use and load them into + * the $langs array. + */ + preg_match("/# LANG: (.*)/i", $words, $matches); + $langs=explode(", ", $matches[1]); + } else { + /** + * User doesn't have a personal dictionary. Grab the default + * system setting. + */ + $langs[0]=$SQSPELL_APP_DEFAULT; + } + } else { + /** + * There is no need to read the ".words" file as there is only one + * dictionary defined system-wide. + */ + $langs[0]=$SQSPELL_APP_DEFAULT; + } + return $langs; +} + +/** + * This function returns only user-defined dictionary words that correspond + * to the requested language. + * + * @param $words The contents of the user's ".words" file. + * @param $lang Which language words to return, e.g. requesting + * "English" will return ONLY the words from user's + * English dictionary, disregarding any others. + * @return The list of words corresponding to the language + * requested. + */ +function sqspell_getLang($words, $lang){ + $start=strpos($words, "# $lang\n"); + /** + * strpos() will return -1 if no # $lang\n string was found. + * Use this to return a zero-length value and indicate that no + * words are present in the requested dictionary. + */ + if (!$start) return ''; + /** + * The words list will end with a new directive, which will start + * with "#". Locate the next "#" and thus find out where the + * words end. + */ + $end=strpos($words, "#", $start+1); + $lang_words = substr($words, $start, $end-$start); + return $lang_words; +} + +/** + * This function operates the user dictionary. If the format is + * clear-text, then it just reads the file and returns it. However, if + * the file is encrypted (well, "garbled"), then it tries to decrypt + * it, checks whether the decryption was successful, troubleshoots if + * not, then returns the clear-text dictionary to the app. + * + * @return the contents of the user's ".words" file, decrypted if + * necessary. + */ +function sqspell_getWords(){ + global $SQSPELL_WORDS_FILE, $SQSPELL_CRYPTO; + $words=""; + if (file_exists($SQSPELL_WORDS_FILE)){ + /** + * Gobble it up. + */ + $fp=fopen($SQSPELL_WORDS_FILE, 'r'); + $words=fread($fp, filesize($SQSPELL_WORDS_FILE)); + fclose($fp); + } + /** + * Check if this is an encrypted file by looking for + * the string "# SquirrelSpell" in it (the crypto + * function does that). + */ + if ($words && !strstr($words, "# SquirrelSpell")){ + /** + * This file is encrypted or mangled. Try to decrypt it. + * If fails, complain loudly. + * + * $old_key would be a value submitted by one of the modules with + * the user's old mailbox password. I admin, this is rather dirty, + * but efficient. ;) + */ + sqgetGlobalVar('key', $key, SQ_COOKIE); + sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); + + sqgetGlobalVar('old_key', $old_key, SQ_POST); + + if ($old_key != '') { + $clear_key=$old_key; + } else { + /** + * Get user's password (the key). + */ + $clear_key = OneTimePadDecrypt($key, $onetimepad); + } + /** + * Invoke the decryption routines. + */ + $words=sqspell_crypto("decrypt", $clear_key, $words); + /** + * See if decryption failed. + */ + if ($words=="PANIC"){ + /** + * AAAAAAAAAAAH!!!!! OK, ok, breathe! + * Let's hope the decryption failed because the user changed his + * password. Bring up the option to key in the old password + * or wipe the file and start over if everything else fails. + * + * The _("SquirrelSpell...) line has to be on one line, otherwise + * gettext will bork. ;( + */ + $msg = html_tag( 'p', "\n" . + '' . _("ATTENTION:") . '
              ' + . _("SquirrelSpell was unable to decrypt your personal dictionary. This is most likely due to the fact that you have changed your mailbox password. In order to proceed, you will have to supply your old password so that SquirrelSpell can decrypt your personal dictionary. It will be re-encrypted with your new password after this. If you haven't encrypted your dictionary, then it got mangled and is no longer valid. You will have to delete it and start anew. This is also true if you don't remember your old password -- without it, the encrypted data is no longer accessible.") , + 'left' ) . "\n" + . '
              ' . "\n" + . '' . "\n" + . '' . "\n" + . html_tag( 'p', "\n" . + '' + . _("Delete my dictionary and start a new one") . '
              ' + . _("Decrypt my dictionary with my old password:") + . '' , + 'left' ) . "\n" + . '
              ' . "\n" + . html_tag( 'p', "\n" . + '' , + 'center' ) . "\n" + . '
              ' . "\n"; + /** + * Add some string vars so they can be i18n'd. + */ + $msg .= "\n"; + /** + * See if this happened in the pop-up window or when accessing + * the SpellChecker options page. + * This is a dirty solution, I agree. TODO: make this prettier. + */ + global $SCRIPT_NAME; + if (strstr($SCRIPT_NAME, "sqspell_options")){ + sqspell_makePage(_("Error Decrypting Dictionary"), + "decrypt_error.js", $msg); + } else { + sqspell_makeWindow(null, _("Error Decrypting Dictionary"), + "decrypt_error.js", $msg); + } + exit; + } else { + /** + * OK! Phew. Set the encryption flag to true so we can later on + * encrypt it again before saving to HDD. + */ + $SQSPELL_CRYPTO=true; + } + } else { + /** + * No encryption is/was used. Set $SQSPELL_CRYPTO to false, + * in case we have to save the dictionary later. + */ + $SQSPELL_CRYPTO=false; + } + /** + * Check if we need to upgrade the dictionary from version 0.2.x + * This is going away soon. + */ + if (strstr($words, "Dictionary v0.2")){ + $words=sqspell_upgradeWordsFile($words); + } + return $words; +} + +/** + * Writes user dictionary into the $username.words file, then changes mask + * to 0600. If encryption is needed -- does that, too. + * + * @param $words The contents of the ".words" file to write. + * @return void + */ +function sqspell_writeWords($words){ + global $SQSPELL_WORDS_FILE, $SQSPELL_CRYPTO; + /** + * if $words is empty, create a template entry by calling the + * sqspell_makeDummy() function. + */ + if (!$words){ + $words=sqspell_makeDummy(); + } + if ($SQSPELL_CRYPTO){ + /** + * User wants to encrypt the file. So be it. + * Get the user's password to use as a key. + */ + sqgetGlobalVar('key', $key, SQ_COOKIE); + sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); + + $clear_key=OneTimePadDecrypt($key, $onetimepad); + /** + * Try encrypting it. If fails, scream bloody hell. + */ + $save_words = sqspell_crypto("encrypt", $clear_key, $words); + if ($save_words == 'PANIC'){ + /** + * AAAAAAAAH! I'm not handling this yet, since obviously + * the admin of the site forgot to compile the MCRYPT support in + * when upgrading an existing PHP installation. + * I will add a handler for this case later, when I can come up + * with some work-around... Right now, do nothing. Let the Admin's + * head hurt.. ;))) + */ + } + } else { + $save_words = $words; + } + /** + * Do the actual writing. + */ + $fp=fopen($SQSPELL_WORDS_FILE, "w"); + fwrite($fp, $save_words); + fclose($fp); + chmod($SQSPELL_WORDS_FILE, 0600); +} + +function sqspell_deleteWords(){ + /** + * So I open the door to my enemies, + * and I ask can we wipe the slate clean, + * but they tell me to please go... + * uhm... Well, this just erases the user dictionary file. + */ + global $SQSPELL_WORDS_FILE; + if (file_exists($SQSPELL_WORDS_FILE)){ + unlink($SQSPELL_WORDS_FILE); + } +} +/** + * Creates an empty user dictionary for the sake of saving prefs or + * whatever. + * + * @return The template to use when storing the user dictionary. + */ +function sqspell_makeDummy(){ + global $SQSPELL_VERSION, $SQSPELL_APP_DEFAULT; + $words = "# SquirrelSpell User Dictionary $SQSPELL_VERSION\n" + . "# Last Revision: " . date('Y-m-d') + . "\n# LANG: $SQSPELL_APP_DEFAULT\n# End\n"; + return $words; +} + +/** + * This function checks for security attacks. A $MOD variable is + * provided in the QUERY_STRING and includes one of the files from the + * modules directory ($MOD.mod). See if someone is trying to get out + * of the modules directory by providing dots, unicode strings, or + * slashes. + * + * @param string $rMOD the name of the module requested to include. + * @return void, since it bails out with an access error if needed. + */ +function sqspell_ckMOD($rMOD){ + if (strstr($rMOD, '.') + || strstr($rMOD, '/') + || strstr($rMOD, '%') + || strstr($rMOD, "\\")){ + echo _("Invalid URL"); + exit; + } +} + +/** + * SquirrelSpell version. Don't modify, since it identifies the format + * of the user dictionary files and messing with this can do ugly + * stuff. :) + */ +$SQSPELL_VERSION="v0.3.8"; diff --git a/ehcp/webmail2/plugins/squirrelspell/sqspell_interface.php b/ehcp/webmail2/plugins/squirrelspell/sqspell_interface.php new file mode 100644 index 0000000..85f1ca9 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/sqspell_interface.php @@ -0,0 +1,60 @@ + + * @version $Id: sqspell_interface.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * Load the stuff needed from SquirrelMail + * @ignore + */ +define('SM_PATH','../../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'include/load_prefs.php'); + +/** + * Set up a couple of non-negotiable constants and + * defaults. Don't change these, * the setuppable stuff is in + * sqspell_config.php + */ +$SQSPELL_DIR='plugins/squirrelspell/'; +$SQSPELL_CRYPTO=FALSE; + +require_once(SM_PATH . $SQSPELL_DIR . 'sqspell_config.php'); +require_once(SM_PATH . $SQSPELL_DIR . 'sqspell_functions.php'); + +/** + * $MOD is the name of the module to invoke. + * If $MOD is unspecified, assign "init" to it. Else check for + * security breach attempts. + */ +if(isset($_POST['MOD'])) { + $MOD = $_POST['MOD']; +} elseif (isset($_GET['MOD'])) { + $MOD = $_GET['MOD']; +} + +if (!isset($MOD) || !$MOD){ + $MOD='init'; +} else { + sqspell_ckMOD($MOD); +} + +/* Include the module. */ +require_once(SM_PATH . $SQSPELL_DIR . "modules/$MOD.mod"); + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/squirrelspell/sqspell_options.php b/ehcp/webmail2/plugins/squirrelspell/sqspell_options.php new file mode 100644 index 0000000..8958521 --- /dev/null +++ b/ehcp/webmail2/plugins/squirrelspell/sqspell_options.php @@ -0,0 +1,58 @@ + + * @version $Id: sqspell_options.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package plugins + * @subpackage squirrelspell + */ + +/** + * Load some necessary stuff from SquirrelMail. + * @ignore + */ +define('SM_PATH','../../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'include/load_prefs.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/page_header.php'); + +/** + * Set a couple of constants and defaults. Don't change these, + * the configurable stuff is in sqspell_config.php + */ +$SQSPELL_DIR='plugins/squirrelspell/'; +$SQSPELL_CRYPTO=FALSE; + +require_once(SM_PATH . $SQSPELL_DIR . 'sqspell_config.php'); +require_once(SM_PATH . $SQSPELL_DIR . 'sqspell_functions.php'); + +/** + * $MOD is the name of the module to invoke. + * If $MOD is unspecified, assign "options_main" to it. Else check for + * security breach attempts. + */ +if(isset($_POST['MOD'])) { + $MOD = $_POST['MOD']; +} elseif (isset($_GET['MOD'])) { + $MOD = $_GET['MOD']; +} + +if(!isset($MOD) || !$MOD) { + $MOD = 'options_main'; +} else { + sqspell_ckMOD($MOD); +} + +/* Load the stuff already. */ +require_once(SM_PATH . $SQSPELL_DIR . "modules/$MOD.mod"); + +?> \ No newline at end of file diff --git a/ehcp/webmail2/plugins/test/COPYING b/ehcp/webmail2/plugins/test/COPYING new file mode 100644 index 0000000..9cac679 --- /dev/null +++ b/ehcp/webmail2/plugins/test/COPYING @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU 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. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ehcp/webmail2/plugins/test/INSTALL b/ehcp/webmail2/plugins/test/INSTALL new file mode 100644 index 0000000..19eae9e --- /dev/null +++ b/ehcp/webmail2/plugins/test/INSTALL @@ -0,0 +1,13 @@ +Installing Test +=============== + +The Test plugin comes with SquirrelMail, so you should +only need to activate it using the configuration utility. + +1) Go to your config directory and run conf.pl. Choose + option 8 and move the plugin from the "Available Plugins" + category to the "Installed Plugins" category. Save and exit. + + $ cd config/ + $ ./conf.pl + diff --git a/ehcp/webmail2/plugins/test/README b/ehcp/webmail2/plugins/test/README new file mode 100644 index 0000000..216d949 --- /dev/null +++ b/ehcp/webmail2/plugins/test/README @@ -0,0 +1,27 @@ +Test plugin for SquirrelMail +============================ +Version $Id$ + +Copyright 1999-2011 The SquirrelMail Project Team + + +Description +=========== + +This plugin provides some test mechanisms for further +diagnosis of the system upon which you are attempting +to run SquirrelMail. + +This plugin is intended as an administrative tool and +should not be enabled in a production environment. + + + +License +======= + +This plugin is released under the GNU General Public +License (see the file COPYING for details). + + + diff --git a/ehcp/webmail2/plugins/test/decodeheader.php b/ehcp/webmail2/plugins/test/decodeheader.php new file mode 100644 index 0000000..2be52e2 --- /dev/null +++ b/ehcp/webmail2/plugins/test/decodeheader.php @@ -0,0 +1,129 @@ +decodeHeader() Test:\n"; + + +if ($default_charset == 'utf-8' || $lossy_encoding) { + echo '

              Test with lossy_encoding OFF

              '; +} else { + echo '

              Test with lossy_encoding ON

              '; +} + + +echo '

              Default charset: ' . $default_charset . "
              \n" + . 'Lossy_encoding: ' . ($lossy_encoding ? 'true' : 'false') . '

              '; + + +echo '

              The results of this test depend on your current language (translation) selection (see Options==>Display Preferences) (and the character set it employs) and your $lossy_encoding setting (see config/config.php or conf.pl ==> 10 ==> 5).

              '; + + +echo '
              ';
              +
              +
              +echo "(MDN) 000:\n html chars are not encoded,\n space is not encoded,\n 8bit chars are unmodified\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, false, false, false));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "(compose) 001:\n html chars are not encoded,\n space is not encoded,\n 8bit chars may be converted or not (depends on \$lossy_encoding and \$default_charset)\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, false, false, true));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "010\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, false, true, false));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "011\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, false, true, true));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "(download) 100\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, true, false, false));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "101\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, true, false, true));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "(default) 110\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, true, true, false));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo "111\n";
              +foreach ($header as $test) {
              +    echo htmlentities(decodeHeader($test, true, true, true));
              +    echo "\n";
              +}
              +echo "--------\n";
              +
              +
              +echo '
              '; + + diff --git a/ehcp/webmail2/plugins/test/functions.php b/ehcp/webmail2/plugins/test/functions.php new file mode 100644 index 0000000..6b240e2 --- /dev/null +++ b/ehcp/webmail2/plugins/test/functions.php @@ -0,0 +1,25 @@ + +ngettext Test Strings: + +

              The results of this test depend on your current language (translation) selection (see Options==>Display Preferences) and the corresponding translation strings in locale/xx/LC_MESSAGES/test.mo

              + +
              +
              +";
              +
              +sq_change_text_domain('squirrelmail');
              +
              +
              diff --git a/ehcp/webmail2/plugins/test/setup.php b/ehcp/webmail2/plugins/test/setup.php
              new file mode 100644
              index 0000000..d5f9884
              --- /dev/null
              +++ b/ehcp/webmail2/plugins/test/setup.php
              @@ -0,0 +1,75 @@
              + 'Test',
              +             'version' => 'CORE',
              +             'summary' => 'This plugin provides some test mechanisms for further diagnosis of the system upon which you are attempting to run SquirrelMail.',
              +             'details' => 'This plugin provides some test mechanisms for further diagnosis of the system upon which you are attempting to run SquirrelMail.',
              +             'requires_configuration' => 0,
              +             'requires_source_patch' => 0,
              +          );
              +
              +}
              +
              +
              +/**
              +  * Returns version info about this plugin
              +  *
              +  */
              +function test_version()
              +{
              +
              +   $info = test_info();
              +   return $info['version'];
              +
              +}
              +
              +
              diff --git a/ehcp/webmail2/plugins/test/test.php b/ehcp/webmail2/plugins/test/test.php
              new file mode 100644
              index 0000000..c51a3a1
              --- /dev/null
              +++ b/ehcp/webmail2/plugins/test/test.php
              @@ -0,0 +1,29 @@
              +
              +
              +Tests:
              +
              +
              +

              decodeHeader() test

              +

              ngettext() test

              + + + + diff --git a/ehcp/webmail2/plugins/translate/README b/ehcp/webmail2/plugins/translate/README new file mode 100644 index 0000000..6d32c97 --- /dev/null +++ b/ehcp/webmail2/plugins/translate/README @@ -0,0 +1,58 @@ +Message Translation + +If you have ever received a mail message from someone who is not in +your country, you probably noticed that they used a different language +than you. If you don't know their language, a translator might help you +out. + + +Features +======== + +* Multiple translation servers +* Uses your language preference for setting up default translation options +* You pick where you see the translation box +* You decide which translation buttons you see + + +Description +=========== + +This plugin lets you select, on a per-user basis, the translator you want +to use. It defaults to None. It has different servers you can use, and +it lists their strengths and limits with each one. Also, there are +multiple servers just in case one changes their interface or goes down. + +Since SquirrelMail is designed to have multiple translations of the text, +this plugin takes your preference and will use it for selecting what to +translate the text into. + + +Future Work +=========== + +* Grab translation directly from server (need to send POST request directly) +* Translate your outgoing message + + +Servers +======= + +Babelfish = babelfish.altavista.com +Go.com = translator.go.com (disabled - service unavailable) +Dictionary.com = www.dictionary.com/translate +InterTran = tranexp.com +GPLTrans = www.translator.cx (disabled - service unavailable) +OteNet = systran.otenet.gr +Promt = www.translate.ru +Google Translate = www.google.com/translate + +Installation +============ + +Go back to the main directory, run configure and add the plugin. + +Some plugin settings can be adjusted by creating +config/translate_config.php or plugins/translate/config.php +configuration file. See plugins/translate/config_default.php and +plugins/translate/config_sample.php diff --git a/ehcp/webmail2/plugins/translate/index.php b/ehcp/webmail2/plugins/translate/index.php new file mode 100644 index 0000000..45a76e7 --- /dev/null +++ b/ehcp/webmail2/plugins/translate/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/translate/options.php b/ehcp/webmail2/plugins/translate/options.php new file mode 100644 index 0000000..5a815f5 --- /dev/null +++ b/ehcp/webmail2/plugins/translate/options.php @@ -0,0 +1,196 @@ +' . $Desc . "\n"; +} + +function ShowTrad( $tit, $com, $url ) { + echo "
            • $tit - ". + $com . + "[ $tit ]
            • "; +} + +?> + +
              +
              +
              + +

              "._("Saved Translation Options")."

              \n"; +}?> + +

              + +
                +'.sprintf(_("Number of supported language pairs: %s"),'36').' ' , + 'http://babelfish.altavista.com/' ); +/** engine is disabled, because it is not available + ShowTrad( 'Translator.Go.com', + _("Maximum of 25 kilobytes translated, powered by Systran"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'10').' ' , + 'http://translator.go.com/' ); +*/ +ShowTrad( 'Dictionary.com', + _("No known limits, powered by Systran"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'24').' ' , + 'http://www.dictionary.com/translate' ); +ShowTrad( 'InterTran', + _("No known limits, powered by Translation Experts' InterTran"). + '
                '.sprintf(_("Number of supported languages: %s"),'29').' ' , + 'http://www.tranexp.com/' ); +/** engine is disabled, because it is not available + ** correct way of implementing it, is to provide engine url configuration option. + ** implemented in 1.5.1cvs. + ShowTrad( 'GPLTrans', + _("No known limits, powered by GPLTrans (free, open source)"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'8').' ' , + 'http://www.translator.cx/' ); +*/ +ShowTrad( 'OTEnet', + _("Hellenic translations, no known limits, powered by Systran"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'20').' ' , + 'http://systran.otenet.gr/' ); +ShowTrad( 'PROMT', + _("Russian translations, maximum of 500 characters translated"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'16').' ' , + 'http://www.online-translator.com/' ); +ShowTrad( 'Google Translate', + _("No known limits, powered by Systran"). + '
                '.sprintf(_("Number of supported language pairs: %s"),'20').' ' , + 'http://www.google.com/translate' ); +?> +
              +

              +". + ''. + ''. + '' . + ''. + ''; +// compose option is disabled in stable, because it is not implemented. +/* + echo ''; +echo ''; +*/ +echo ''. + '
              ' . + _("Select your translator:") . + '' . + '
              ' . + _("When reading:") . + ' - ' . _("Show translation box") . + '
              '. + ' - ' . _("Translate inside the SquirrelMail frames"). + '
              '. + _("When composing:") . ' - ' . _("Not yet functional, currently does nothing") . + '
              '. + ''. + '
              '. + ''; +?> + \ No newline at end of file diff --git a/ehcp/webmail2/plugins/translate/setup.php b/ehcp/webmail2/plugins/translate/setup.php new file mode 100644 index 0000000..5289d75 --- /dev/null +++ b/ehcp/webmail2/plugins/translate/setup.php @@ -0,0 +1,744 @@ +findDisplayEntity(array(), array('text/plain')); + $body = ''; + if ( !empty($trans_ar[0]) ) { + for ($i = 0; $i < count($trans_ar); $i++) { + $body .= formatBody($imapConnection, $message, $color, $wrap_at, $trans_ar[$i], $passed_id, $mailbox, true); + } + $hookResults = do_hook('message_body', $body); + $body = $hookResults[1]; + } else { + $body = 'Message can\'t be translated'; + } + + $new_body = $body; + + $trans = get_html_translation_table(HTML_ENTITIES); + $trans[' '] = ' '; + $trans = array_flip($trans); + $new_body = strtr($new_body, $trans); + + $new_body = urldecode($new_body); + $new_body = strip_tags($new_body); + + /* I really don't like this next part ... */ + $new_body = str_replace('"', "''", $new_body); + $new_body = strtr($new_body, "\n", ' '); + + $function = 'translate_form_' . $translate_server; + $function($new_body); +} + +/** Closes translation engine form */ +function translate_table_end() { + ?> + + + + + + + _("Translation Options"), + 'url' => '../plugins/translate/options.php', + 'desc' => _("Which translator should be used when you get messages in a different language?"), + 'js' => false + ); +} + +/** gets translation preferences */ +function translate_pref() { + global $username, $data_dir; + global $translate_server, $translate_location; + global $translate_show_send, $translate_show_read; + global $translate_same_window; + + $translate_server = getPref($data_dir, $username, 'translate_server'); + if ($translate_server == '') { + $translate_server = 'babelfish'; + } + + $translate_location = getPref($data_dir, $username, 'translate_location'); + if ($translate_location == '') { + $translate_location = 'center'; + } + + $translate_show_send = getPref($data_dir, $username, 'translate_show_send'); + $translate_show_read = getPref($data_dir, $username, 'translate_show_read'); + $translate_same_window = getPref($data_dir, $username, 'translate_same_window'); +} + + +/** + * This function could be sped up. + * It basically negates the process if a ! is found in the beginning and + * matches a * at the end with 0 or more characters. + */ +function translate_does_it_match_language($test) { + global $squirrelmail_language; + $true = 1; + $false = 0; + $index = 0; + $smindex = 0; + + if (! $test || ! $squirrelmail_language) { + return $false; + } + + if ($test[$index] == '!') { + $index ++; + $true = 0; + $false = 1; + } + + if (($index == 0) && ($test == $squirrelmail_language)) { + return $true; + } + + while (isset($test[$index]) && $test[$index]) { + if ($test[$index] == '*') { + return $true; + } + if ($test[$index] != $squirrelmail_language[$smindex]) { + return $false; + } + $index ++; + $smindex ++; + } + + return $false; +} + +/** creates translation engine language selection */ +function translate_lang_opt($from, $to, $value, $text) { + global $translate_dir; + + $ret = '

              \n"; + + ?> + + ' . + html_tag( 'tr', + html_tag( 'td', '', 'left' ) . + html_tag( 'td', + '' . + ' | ' . "\n" . + ' | ' . "\n" , + 'left' ) + ) . + '
              + + + \n"; + $line++; + } + echo '
              + + + + + '; + + translate_table_end(); +} + +/** + * go.com translation engine (disabled) + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_go($message) { + translate_new_form('http://translator.go.com/cb/trans_entry'); +?> + + ". + 'Go.com: '; + + translate_table_end(); +} + +/** + * intertran translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_intertran($message) { + translate_new_form('http://intertran.tranexp.com/Translate/result.shtml'); + echo ''. + ''. + ''. + ""; + + $left = ''; + + $right = ''; + printf( _("%s to %s"), $left, $right ); + echo 'InterTran: '; + + translate_table_end(); +} + +/** + * gpltrans translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_gpltrans($message) { + translate_new_form('http://www.translator.cx/cgi-bin/gplTrans'); + echo ''; + echo ''; + echo "". + 'GPLTrans: '; + + translate_table_end(); +} + +/** + * reference.com (dictionary) translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_dictionary($message) { + translate_new_form('http://dictionary.reference.com/translate/text.html'); + list($usec, $sec) = explode(" ",microtime()); + $time = $sec . (float)$usec*100000000; + echo "". + "". + ''. + 'Dictionary.com: '; + + translate_table_end(); +} + +/** + * otenet translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_otenet($message) { + translate_new_form('http://trans.otenet.gr/systran/box'); +?> + + + + '; + translate_table_end(); + +} + +/** + * promt translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_promt($message) { + translate_new_form('http://www.online-translator.com/text.asp#tr_form'); + echo ''; + echo ""; + echo _("Interface language")." : "; + echo "
              \n"; + echo _("Translation direction")." : "; + echo '
              \n"; + echo "\n"; + echo 'PROMT: '; + + translate_table_end(); +} + +/** + * google translation engine + * + * @param string $message text that has to be translated + * @access private + */ +function translate_form_google($message) { + translate_new_form('http://www.google.com/translate_t','utf-8'); + echo ''; + echo ''. + '' . + '' . + '' . + 'Google: '; + + translate_table_end(); +} diff --git a/ehcp/webmail2/po/.htaccess b/ehcp/webmail2/po/.htaccess new file mode 100644 index 0000000..b63d401 --- /dev/null +++ b/ehcp/webmail2/po/.htaccess @@ -0,0 +1 @@ +Deny from All diff --git a/ehcp/webmail2/po/compilepo b/ehcp/webmail2/po/compilepo new file mode 100644 index 0000000..42c8987 --- /dev/null +++ b/ehcp/webmail2/po/compilepo @@ -0,0 +1,40 @@ +#!/bin/sh + +# ** +# ** This script compiles locale PO files +# ** +# ** Usage: compilepo +# ** Example: compilepo es +# ** +# ** Philipe Mingo +# ** Konstantin Riabitsev +# ** +# ** $Id: compilepo 9912 2005-08-06 03:49:39Z tokul $ + +if [ -z "$1" ]; then + echo "USAGE: compilepo [localename]" + exit 1 +fi + +WORKDIR=../locale +LOCALEDIR=$WORKDIR/$1 + +if [ ! -d $LOCALEDIR ]; then + # lessee if it's been renamed. + DCOUNT=`find $WORKDIR/ -name $1* | wc -l` + if [ $DCOUNT -eq 1 ]; then + # aha + LOCALEDIR=`find $WORKDIR/ -name $1*` + elif [ $DCOUNT -gt 1 ]; then + # err out + echo "More than one locale matching this name found:" + find $WORKDIR/ -name $1* + echo "You have to be more specific." + exit 1 + fi +fi + +echo "Compiling $LOCALEDIR/LC_MESSAGES/squirrelmail.po" +msgfmt -o $LOCALEDIR/LC_MESSAGES/squirrelmail.mo \ + -c $LOCALEDIR/LC_MESSAGES/squirrelmail.po + diff --git a/ehcp/webmail2/po/independent_strings.txt b/ehcp/webmail2/po/independent_strings.txt new file mode 100644 index 0000000..b839841 --- /dev/null +++ b/ehcp/webmail2/po/independent_strings.txt @@ -0,0 +1,25 @@ + diff --git a/ehcp/webmail2/po/index.php b/ehcp/webmail2/po/index.php new file mode 100644 index 0000000..df0bf6b --- /dev/null +++ b/ehcp/webmail2/po/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/ehcp/webmail2/po/mergepo b/ehcp/webmail2/po/mergepo new file mode 100644 index 0000000..33cbc26 --- /dev/null +++ b/ehcp/webmail2/po/mergepo @@ -0,0 +1,53 @@ +#!/bin/sh + +# ** +# ** This script merges global PO to locale PO files. +# ** It creates a backup of the old PO file as squirrelmail.po.bak +# ** and puts the merged version in squirrelmail.po +# ** +# ** Usage: mergepo +# ** Example: mergepo es_ES +# ** +# ** Philipe Mingo +# ** Konstantin Riabitsev +# ** +# ** $Id: mergepo 5843 2003-10-05 09:57:38Z tokul $ + +if [ -z "$1" ]; then + echo "USAGE: mergepo [localename]" + exit 1 +fi + +WORKDIR=../locale +LOCALEDIR=$WORKDIR/$1 + +if [ ! -d $LOCALEDIR ]; then + # lessee if it's been renamed. + DCOUNT=`find $WORKDIR/ -name $1* | wc -l` + if [ $DCOUNT -eq 1 ]; then + # aha + LOCALEDIR=`find $WORKDIR/ -name $1*` + elif [ $DCOUNT -gt 1 ]; then + # err out + echo "More than one locale matching this name found:" + find $WORKDIR/ -name $1* + echo "You have to be more specific." + exit 1 + fi +fi + +echo "Merging $LOCALEDIR/LC_MESSAGES/squirrelmail.po" +mv $LOCALEDIR/LC_MESSAGES/squirrelmail.po \ + $LOCALEDIR/LC_MESSAGES/squirrelmail.po.bak +msgmerge $LOCALEDIR/LC_MESSAGES/squirrelmail.po.bak ../po/squirrelmail.pot > \ + $LOCALEDIR/LC_MESSAGES/squirrelmail.po + +# msgmerge will split long lines, such as the RCS Id line. If it did split +# it, join the pieces back together. +ed -s $LOCALEDIR/LC_MESSAGES/squirrelmail.po << END +/^"Project-Id-Version:/v/\\n"$/j\\ +s/""// +wq +END + +echo "Old po file renamed to squirrelmail.po.bak" diff --git a/ehcp/webmail2/po/squirrelmail.pot b/ehcp/webmail2/po/squirrelmail.pot new file mode 100644 index 0000000..ef1a30a --- /dev/null +++ b/ehcp/webmail2/po/squirrelmail.pot @@ -0,0 +1,3840 @@ +# LANGUAGE (xx_XX) SquirrelMail Translation +# Copyright (c) 1999-2011 The SquirrelMail Project Team +# This file is distributed under the same license as the SquirrelMail package. +# FIRST AUTHOR , YEAR. +# $Id: squirrelmail.pot 14084 2011-01-06 02:44:03Z pdontthink $ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: SquirrelMail STABLE\n" +"Report-Msgid-Bugs-To: SquirrelMail Internationalization \n" +"POT-Creation-Date: 2010-09-13 12:45+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Address Book" +msgstr "" + +msgid "All" +msgstr "" + +msgid "To" +msgstr "" + +msgid "Cc" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "E-mail" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Source" +msgstr "" + +msgid "Bcc" +msgstr "" + +msgid "Use Addresses" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Address Book Search" +msgstr "" + +msgid "Search for" +msgstr "" + +msgid "in" +msgstr "" + +msgid "All address books" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "List all" +msgstr "" + +#, php-format +msgid "Unable to list addresses from %s" +msgstr "" + +msgid "Your search failed with the following error(s)" +msgstr "" + +msgid "No persons matching your search were found" +msgstr "" + +msgid "Return" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "Must be unique" +msgstr "" + +msgid "E-mail address" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Additional info" +msgstr "" + +msgid "Add to:" +msgstr "" + +msgid "No personal address book is defined. Contact administrator." +msgstr "" + +msgid "You can only edit one address at the time" +msgstr "" + +msgid "Update address" +msgstr "" + +msgid "ERROR" +msgstr "" + +msgid "Please select address that you want to edit" +msgstr "" + +msgid "Add address" +msgstr "" + +msgid "Edit selected" +msgstr "" + +msgid "Delete selected" +msgstr "" + +msgid "Compose to selected" +msgstr "" + +msgid "sort by nickname" +msgstr "" + +msgid "sort by name" +msgstr "" + +msgid "sort by email" +msgstr "" + +msgid "sort by info" +msgstr "" + +#, php-format +msgid "Add to %s" +msgstr "" + +#, php-format +msgid "%s wrote:" +msgstr "" + +msgid "quote" +msgstr "" + +msgid "who" +msgstr "" + +#, php-format +msgid "On %s, %s wrote:" +msgstr "" + +msgid "Subject" +msgstr "" + +msgid "From" +msgstr "" + +msgid "Date" +msgstr "" + +msgid "Original Message" +msgstr "" + +msgid "Draft Email Saved" +msgstr "" + +msgid "Could not move/copy file. File not attached" +msgstr "" + +msgid "Your draft has been saved." +msgstr "" + +msgid "Your mail has been sent." +msgstr "" + +msgid "From:" +msgstr "" + +msgid "To:" +msgstr "" + +msgid "Cc:" +msgstr "" + +msgid "Bcc:" +msgstr "" + +msgid "Subject:" +msgstr "" + +msgid "Send" +msgstr "" + +msgid "Attach:" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Delete selected attachments" +msgstr "" + +msgid "" +"Because PHP file uploads are turned off, you can not attach files to this " +"message. Please see your system administrator for details." +msgstr "" + +msgid "Priority" +msgstr "" + +msgid "High" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Low" +msgstr "" + +msgid "Receipt" +msgstr "" + +msgid "On Read" +msgstr "" + +msgid "On Delivery" +msgstr "" + +msgid "Signature" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Save Draft" +msgstr "" + +msgid "You have not filled in the \"To:\" field." +msgstr "" + +#, php-format +msgid "Error: Draft folder %s does not exist." +msgstr "" + +msgid "Message not sent." +msgstr "" + +msgid "Server replied:" +msgstr "" + +msgid "Illegal folder name. Please select a different name." +msgstr "" + +msgid "Click here to go back" +msgstr "" + +msgid "You have not selected a folder to delete. Please do so." +msgstr "" + +msgid "Delete Folder" +msgstr "" + +#, php-format +msgid "Are you sure you want to delete %s?" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Folders" +msgstr "" + +msgid "Subscribed successfully." +msgstr "" + +msgid "Unsubscribed successfully." +msgstr "" + +msgid "Deleted folder successfully." +msgstr "" + +msgid "Created folder successfully." +msgstr "" + +msgid "Renamed successfully." +msgstr "" + +msgid "Subscription Unsuccessful - Folder does not exist." +msgstr "" + +msgid "refresh folder list" +msgstr "" + +msgid "Create Folder" +msgstr "" + +msgid "as a subfolder of" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Let this folder contain subfolders" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Rename a Folder" +msgstr "" + +msgid "Select a folder" +msgstr "" + +msgid "Rename" +msgstr "" + +msgid "No folders found" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Unsubscribe" +msgstr "" + +msgid "Subscribe" +msgstr "" + +msgid "No folders were found to unsubscribe from!" +msgstr "" + +msgid "No folders were found to subscribe to!" +msgstr "" + +msgid "Subscribe to:" +msgstr "" + +msgid "You have not selected a folder to rename. Please do so." +msgstr "" + +msgid "Rename a folder" +msgstr "" + +msgid "New name:" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "ERROR: Help files are not in the right format!" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "" +"Help is not available in the selected language. It will be displayed in " +"English instead." +msgstr "" + +msgid "" +"Help is not available. Please contact your system administrator for " +"assistance." +msgstr "" + +msgid "" +"This chapter is not available in the selected language. It will be displayed " +"in English instead." +msgstr "" + +msgid "This chapter is missing" +msgstr "" + +#, php-format +msgid "For some reason, chapter %s is not available." +msgstr "" + +msgid "Table of Contents" +msgstr "" + +msgid "Previous" +msgstr "" + +msgid "Next" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Viewing an image attachment" +msgstr "" + +msgid "View message" +msgstr "" + +msgid "Download this as a file" +msgstr "" + +msgid "INBOX" +msgstr "" + +msgid "Purge" +msgstr "" + +msgid "Last Refresh" +msgstr "" + +msgid "Check mail" +msgstr "" + +msgid "Login" +msgstr "" + +#, php-format +msgid "%s Logo" +msgstr "" + +#, php-format +msgid "SquirrelMail version %s" +msgstr "" + +msgid "By the SquirrelMail Project Team" +msgstr "" + +#, php-format +msgid "%s Login" +msgstr "" + +msgid "Name:" +msgstr "" + +msgid "Password:" +msgstr "" + +msgid "No messages were selected." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Message Highlighting" +msgstr "" + +msgid "New" +msgstr "" + +msgid "Done" +msgstr "" + +msgid "To or Cc" +msgstr "" + +msgid "subject" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Up" +msgstr "" + +msgid "Down" +msgstr "" + +msgid "No highlighting is defined" +msgstr "" + +msgid "Identifying name" +msgstr "" + +msgid "Color" +msgstr "" + +msgid "Dark Blue" +msgstr "" + +msgid "Dark Green" +msgstr "" + +msgid "Dark Yellow" +msgstr "" + +msgid "Dark Cyan" +msgstr "" + +msgid "Dark Magenta" +msgstr "" + +msgid "Light Blue" +msgstr "" + +msgid "Light Green" +msgstr "" + +msgid "Light Yellow" +msgstr "" + +msgid "Light Cyan" +msgstr "" + +msgid "Light Magenta" +msgstr "" + +msgid "Dark Gray" +msgstr "" + +msgid "Medium Gray" +msgstr "" + +msgid "Light Gray" +msgstr "" + +msgid "White" +msgstr "" + +msgid "Other:" +msgstr "" + +#. i18n: This is an example on how to write a color in RGB, literally meaning "For example: 63aa7f". +msgid "Ex: 63aa7f" +msgstr "" + +msgid "Matches" +msgstr "" + +msgid "Editing identities is disabled." +msgstr "" + +msgid "Default Identity" +msgstr "" + +#, php-format +msgid "Alternate Identity %d" +msgstr "" + +msgid "Add a New Identity" +msgstr "" + +msgid "Advanced Identities" +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "E-Mail Address" +msgstr "" + +msgid "Reply To" +msgstr "" + +msgid "Save / Update" +msgstr "" + +msgid "Make Default" +msgstr "" + +msgid "Move Up" +msgstr "" + +msgid "Index Order" +msgstr "" + +msgid "Checkbox" +msgstr "" + +msgid "Flags" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "" +"The index order is the order that the columns are arranged in the message " +"index. You can add, remove, and move columns around to customize them to fit " +"your needs." +msgstr "" + +msgid "up" +msgstr "" + +msgid "down" +msgstr "" + +msgid "remove" +msgstr "" + +msgid "Return to options page" +msgstr "" + +msgid "Personal Information" +msgstr "" + +msgid "Display Preferences" +msgstr "" + +msgid "Folder Preferences" +msgstr "" + +msgid "Error(s) occurred while saving your options" +msgstr "" + +msgid "Some of your preference changes were not applied." +msgstr "" + +#. i18n: The %s represents the name of the option page saving the options +#, php-format +msgid "Successfully Saved Options: %s" +msgstr "" + +msgid "Refresh Folder List" +msgstr "" + +msgid "Refresh Page" +msgstr "" + +msgid "" +"This contains personal information about yourself such as your name, your " +"email address, etc." +msgstr "" + +msgid "" +"You can change the way that SquirrelMail looks and displays information to " +"you, such as the colors, the language, and other settings." +msgstr "" + +msgid "" +"Based upon given criteria, incoming messages can have different background " +"colors in the message list. This helps to easily distinguish who the " +"messages are from, especially for mailing lists." +msgstr "" + +msgid "" +"These settings change the way your folders are displayed and manipulated." +msgstr "" + +msgid "" +"The order of the message index can be rearranged and changed to contain the " +"headers in any order you want." +msgstr "" + +msgid "Message not printable" +msgstr "" + +msgid "Attachments:" +msgstr "" + +msgid "Unknown sender" +msgstr "" + +msgid "Info:" +msgstr "" + +msgid "Size:" +msgstr "" + +msgid "Type:" +msgstr "" + +msgid "Invalid URL" +msgstr "" + +msgid "Printer Friendly" +msgstr "" + +msgid "Print" +msgstr "" + +msgid "View Printable Version" +msgstr "" + +msgid "Read:" +msgstr "" + +msgid "Your message" +msgstr "" + +msgid "Sent" +msgstr "" + +#, php-format +msgid "Was displayed on %s" +msgstr "" + +msgid "less" +msgstr "" + +msgid "more" +msgstr "" + +msgid "Mailer" +msgstr "" + +msgid "Read receipt" +msgstr "" + +msgid "sent" +msgstr "" + +msgid "requested" +msgstr "" + +msgid "" +"The message sender has requested a response to indicate that you have read " +"this message. Would you like to send a receipt?" +msgstr "" + +msgid "Send read receipt now" +msgstr "" + +msgid "Search Results" +msgstr "" + +msgid "Message List" +msgstr "" + +msgid "Unread" +msgstr "" + +msgid "Resume Draft" +msgstr "" + +msgid "Edit Message as New" +msgstr "" + +msgid "View Message" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward as Attachment" +msgstr "" + +msgid "Reply" +msgstr "" + +msgid "Reply All" +msgstr "" + +msgid "View Full Header" +msgstr "" + +msgid "Attachments" +msgstr "" + +msgid "You must be logged in to access this page." +msgstr "" + +msgid "Folder:" +msgstr "" + +msgid "Saved Searches" +msgstr "" + +msgid "edit" +msgstr "" + +msgid "search" +msgstr "" + +msgid "delete" +msgstr "" + +msgid "Recent Searches" +msgstr "" + +msgid "save" +msgstr "" + +msgid "forget" +msgstr "" + +msgid "Current Search" +msgstr "" + +msgid "All Folders" +msgstr "" + +msgid "Body" +msgstr "" + +msgid "Everywhere" +msgstr "" + +msgid "No Messages Found" +msgstr "" + +msgid "Please enter something to search for" +msgstr "" + +msgid "Signout" +msgstr "" + +msgid "Sign Out" +msgstr "" + +msgid "You have been successfully signed out." +msgstr "" + +msgid "Click here to log back in." +msgstr "" + +msgid "Viewing a Business Card" +msgstr "" + +#, php-format +msgid "" +"vCard Version %s is not supported. Some information might not be converted " +"correctly." +msgstr "" + +msgid "Title" +msgstr "" + +msgid "Web Page" +msgstr "" + +msgid "Organization / Department" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Work Phone" +msgstr "" + +msgid "Home Phone" +msgstr "" + +msgid "Cellular Phone" +msgstr "" + +msgid "Fax" +msgstr "" + +msgid "Note" +msgstr "" + +msgid "Add to address book" +msgstr "" + +msgid "Title & Org. / Dept." +msgstr "" + +msgid "Viewing Full Header" +msgstr "" + +msgid "Viewing a text attachment" +msgstr "" + +msgid "View Unsafe Images" +msgstr "" + +msgid "Email delivery error" +msgstr "" + +#, php-format +msgid "Can't execute command '%s'." +msgstr "" + +msgid "Can't open SMTP stream." +msgstr "" + +msgid "Service not available, closing channel" +msgstr "" + +msgid "A password transition is needed" +msgstr "" + +msgid "Requested mail action not taken: mailbox unavailable" +msgstr "" + +msgid "Requested action aborted: error in processing" +msgstr "" + +msgid "Requested action not taken: insufficient system storage" +msgstr "" + +msgid "Temporary authentication failure" +msgstr "" + +msgid "Syntax error; command not recognized" +msgstr "" + +msgid "Syntax error in parameters or arguments" +msgstr "" + +msgid "Command not implemented" +msgstr "" + +msgid "Bad sequence of commands" +msgstr "" + +msgid "Command parameter not implemented" +msgstr "" + +msgid "Authentication required" +msgstr "" + +msgid "Authentication mechanism is too weak" +msgstr "" + +msgid "Authentication failed" +msgstr "" + +msgid "Encryption required for requested authentication mechanism" +msgstr "" + +msgid "Requested action not taken: mailbox unavailable" +msgstr "" + +msgid "User not local; please try forwarding" +msgstr "" + +msgid "Requested mail action aborted: exceeding storage allocation" +msgstr "" + +msgid "Requested action not taken: mailbox name not allowed" +msgstr "" + +msgid "Transaction failed" +msgstr "" + +msgid "Unknown response" +msgstr "" + +msgid "(no subject)" +msgstr "" + +msgid "" +"Could not include PEAR database functions required for the database backend." +msgstr "" + +#, php-format +msgid "Is PEAR installed, and is the include path set correctly to find %s?" +msgstr "" + +msgid "Please contact your system administrator and report this error." +msgstr "" + +msgid "Personal address book" +msgstr "" + +#, php-format +msgid "Database error: %s" +msgstr "" + +msgid "Address book is read-only" +msgstr "" + +#. i18n: don't use html formating in translation +#, php-format +msgid "User \"%s\" already exists" +msgstr "" + +#. i18n: don't use html formating in translation +#, php-format +msgid "User \"%s\" does not exist" +msgstr "" + +#, php-format +msgid "User '%s' already exist." +msgstr "" + +msgid "Not a file name" +msgstr "" + +msgid "No such file or directory" +msgstr "" + +msgid "Open failed" +msgstr "" + +msgid "Write failed" +msgstr "" + +msgid "Unable to update" +msgstr "" + +msgid "Address book is corrupted. Required fields are missing." +msgstr "" + +msgid "Address book entry is too big" +msgstr "" + +msgid "Could not lock datafile" +msgstr "" + +msgid "Write to address book failed" +msgstr "" + +msgid "Error initializing address book database." +msgstr "" + +#, php-format +msgid "Error opening file %s" +msgstr "" + +msgid "Global address book" +msgstr "" + +msgid "Error initializing global address book." +msgstr "" + +#, php-format +msgid "Error initializing LDAP server %s:" +msgstr "" + +msgid "Click here to change the sorting of the address list" +msgstr "" + +msgid "Invalid input data" +msgstr "" + +msgid "Name is missing" +msgstr "" + +msgid "E-mail address is missing" +msgstr "" + +msgid "Nickname contains illegal characters" +msgstr "" + +msgid "View" +msgstr "" + +msgid "View Business Card" +msgstr "" + +msgid "Your session has expired, but will be resumed after logging in again." +msgstr "" + +msgid "" +"The current page request appears to have originated from an unrecognized " +"source." +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgid "Jan" +msgstr "" + +msgid "Feb" +msgstr "" + +msgid "Mar" +msgstr "" + +msgid "Apr" +msgstr "" + +msgid "May" +msgstr "" + +msgid "Jun" +msgstr "" + +msgid "Jul" +msgstr "" + +msgid "Aug" +msgstr "" + +msgid "Sep" +msgstr "" + +msgid "Oct" +msgstr "" + +msgid "Nov" +msgstr "" + +msgid "Dec" +msgstr "" + +msgid "D, F j, Y g:i a" +msgstr "" + +msgid "D, F j, Y H:i" +msgstr "" + +msgid "M j, Y" +msgstr "" + +msgid "g:i a" +msgstr "" + +msgid "H:i" +msgstr "" + +msgid "D, g:i a" +msgstr "" + +msgid "D, H:i" +msgstr "" + +#, php-format +msgid "Preference database error (%s). Exiting abnormally" +msgstr "" + +#, php-format +msgid "Click here to return to %s" +msgstr "" + +msgid "Go to the login page" +msgstr "" + +#, php-format +msgid "" +"Preference file, %s, does not exist. Log out, and log back in to create a " +"default preference file." +msgstr "" + +#, php-format +msgid "" +"Preference file, %s, could not be opened. Contact your system administrator " +"to resolve this issue." +msgstr "" + +#, php-format +msgid "" +"Preference file, %s, could not be written. Contact your system administrator " +"to resolve this issue." +msgstr "" + +#, php-format +msgid "" +"Preference file, %s, could not be copied from temporary file, %s. Contact " +"your system administrator to resolve this issue." +msgstr "" + +#, php-format +msgid "Error opening %s" +msgstr "" + +msgid "Default preference file not found or not readable!" +msgstr "" + +msgid "Could not create initial preference file!" +msgstr "" + +#, php-format +msgid "%s should be writable by user %s" +msgstr "" + +msgid "Signature is too big." +msgstr "" + +#, php-format +msgid "" +"Signature file, %s, could not be opened. Contact your system administrator " +"to resolve this issue." +msgstr "" + +#, php-format +msgid "" +"Signature file, %s, could not be written. Contact your system administrator " +"to resolve this issue." +msgstr "" + +#, php-format +msgid "" +"Signature file, %s, could not be copied from temporary file, %s. Contact " +"your system administrator to resolve this issue." +msgstr "" + +msgid "" +"You need to have PHP installed with the multibyte string function enabled " +"(using configure option --enable-mbstring)." +msgstr "" + +msgid "ERROR: No available IMAP stream." +msgstr "" + +msgid "ERROR: Connection dropped by IMAP server." +msgstr "" + +msgid "ERROR: Could not complete request." +msgstr "" + +msgid "Query:" +msgstr "" + +msgid "Reason Given:" +msgstr "" + +msgid "ERROR: Bad or malformed request." +msgstr "" + +msgid "Server responded:" +msgstr "" + +msgid "ERROR: IMAP server closed the connection." +msgstr "" + +msgid "ERROR: Unknown IMAP response." +msgstr "" + +#, php-format +msgid "Error connecting to IMAP server: %s." +msgstr "" + +msgid "The IMAP server is reporting that plain text logins are disabled." +msgstr "" + +msgid "Using CRAM-MD5 or DIGEST-MD5 authentication instead may work." +msgstr "" + +msgid "Also, the use of TLS may allow SquirrelMail to login." +msgstr "" + +#, php-format +msgid "Bad request: %s" +msgstr "" + +#, php-format +msgid "Unknown error: %s" +msgstr "" + +msgid "Read data:" +msgstr "" + +msgid "Unknown user or password incorrect." +msgstr "" + +msgid "ERROR: Could not append message to" +msgstr "" + +msgid "Solution:" +msgstr "" + +msgid "" +"Remove unneccessary messages from your folders. Start with your Trash folder." +msgstr "" + +#, php-format +msgid "Invalid mailbox name: %s" +msgstr "" + +msgid "Unknown Sender" +msgstr "" + +msgid "Unknown response from IMAP server:" +msgstr "" + +msgid "The server couldn't find the message you requested." +msgstr "" + +msgid "" +"Most probably your message list was out of date and the message has been " +"moved away or deleted (perhaps by another program accessing the same " +"mailbox)." +msgstr "" + +msgid "Unknown date" +msgstr "" + +#. i18n: "A" is short for "Answered". Make sure that two icon strings aren't translated to the same character (only in 1.5). +msgid "A" +msgstr "" + +msgid "Thread sorting is not supported by your IMAP server." +msgstr "" + +msgid "Server-side sorting is not supported by your IMAP server." +msgstr "" + +msgid "THIS FOLDER IS EMPTY" +msgstr "" + +msgid "Move Selected To" +msgstr "" + +msgid "Transform Selected Messages" +msgstr "" + +msgid "Move" +msgstr "" + +msgid "Expunge" +msgstr "" + +msgid "Read" +msgstr "" + +msgid "Unthread View" +msgstr "" + +msgid "Thread View" +msgstr "" + +msgid "Received" +msgstr "" + +msgid "Toggle All" +msgstr "" + +msgid "Unselect All" +msgstr "" + +msgid "Select All" +msgstr "" + +#, php-format +msgid "Viewing Messages: %s to %s (%s total)" +msgstr "" + +#, php-format +msgid "Viewing Message: %s (%s total)" +msgstr "" + +msgid "Paginate" +msgstr "" + +msgid "Show All" +msgstr "" + +msgid "SquirrelMail could not decode the bodystructure of the message" +msgstr "" + +msgid "The bodystructure provided by your IMAP server:" +msgstr "" + +msgid "" +"Body retrieval error. The reason for this is most probably that the message " +"is malformed." +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Response:" +msgstr "" + +msgid "Message:" +msgstr "" + +msgid "FETCH line:" +msgstr "" + +msgid "Hide Unsafe Images" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "sec_remove_eng.png" +msgstr "" + +msgid "This external link will open in a new window" +msgstr "" + +#, php-format +msgid "Option Type '%s' Not Found" +msgstr "" + +msgid "Delete Selected" +msgstr "" + +#, php-format +msgid "Edit List Layout Type '%s' Not Found" +msgstr "" + +msgid "Current Folder" +msgstr "" + +msgid "Compose" +msgstr "" + +#, php-format +msgid "Error creating directory %s." +msgstr "" + +msgid "Could not create hashed directory structure!" +msgstr "" + +msgid "" +"Fatal token generation error; please contact your system administrator or " +"the SquirrelMail Team" +msgstr "" + +msgid "This page request could not be verified and appears to have expired." +msgstr "" + +msgid "" +"The current page request appears to have originated from an untrusted source." +msgstr "" + +msgid "General Display Options" +msgstr "" + +msgid "Theme" +msgstr "" + +msgid "Default" +msgstr "" + +msgid "Custom Stylesheet" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Use Javascript" +msgstr "" + +msgid "Autodetect" +msgstr "" + +msgid "Always" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Mailbox Display Options" +msgstr "" + +msgid "Number of Messages per Page" +msgstr "" + +msgid "Enable Alternating Row Colors" +msgstr "" + +msgid "Enable Page Selector" +msgstr "" + +msgid "Maximum Number of Pages to Show" +msgstr "" + +msgid "Always Show Full Date" +msgstr "" + +msgid "Length of From/To Field (0 for full)" +msgstr "" + +msgid "Length of Subject Field (0 for full)" +msgstr "" + +msgid "Message Display and Composition" +msgstr "" + +msgid "Wrap Incoming Text At" +msgstr "" + +msgid "Width of Editor Window" +msgstr "" + +msgid "Height of Editor Window" +msgstr "" + +msgid "Location of Buttons when Composing" +msgstr "" + +msgid "Before headers" +msgstr "" + +msgid "Between headers and message body" +msgstr "" + +msgid "After message body" +msgstr "" + +msgid "Address Book Display Format" +msgstr "" + +msgid "Javascript" +msgstr "" + +msgid "HTML" +msgstr "" + +msgid "Format of Addresses Added From Address Book" +msgstr "" + +msgid "No prefix/Address only" +msgstr "" + +msgid "Nickname and address" +msgstr "" + +msgid "Full name and address" +msgstr "" + +msgid "Show HTML Version by Default" +msgstr "" + +msgid "Enable Forward as Attachment" +msgstr "" + +msgid "Include Me in CC when I Reply All" +msgstr "" + +msgid "Enable Mailer Display" +msgstr "" + +msgid "Display Attached Images with Message" +msgstr "" + +msgid "Enable Printer Friendly Clean Display" +msgstr "" + +msgid "Enable Mail Delivery Notification" +msgstr "" + +msgid "Compose Messages in New Window" +msgstr "" + +msgid "Width of Compose Window" +msgstr "" + +msgid "Height of Compose Window" +msgstr "" + +msgid "Prepend Signature before Reply/Forward Text" +msgstr "" + +msgid "Strip signature when replying" +msgstr "" + +msgid "Prefix for Original Message when Replying" +msgstr "" + +msgid "Cursor Position when Replying" +msgstr "" + +msgid "To: field" +msgstr "" + +msgid "Focus in body" +msgstr "" + +msgid "Select body" +msgstr "" + +msgid "No focus" +msgstr "" + +msgid "Sort by Received Date" +msgstr "" + +msgid "Enable Thread Sort by References Header" +msgstr "" + +msgid "Special Folder Options" +msgstr "" + +msgid "Folder Path" +msgstr "" + +msgid "Do not use Trash" +msgstr "" + +msgid "Trash Folder" +msgstr "" + +msgid "Do not use Drafts" +msgstr "" + +msgid "Draft Folder" +msgstr "" + +msgid "Do not use Sent" +msgstr "" + +msgid "Sent Folder" +msgstr "" + +msgid "Folder List Options" +msgstr "" + +msgid "Location of Folder List" +msgstr "" + +msgid "Left" +msgstr "" + +msgid "Right" +msgstr "" + +msgid "pixels" +msgstr "" + +msgid "Width of Folder List" +msgstr "" + +msgid "Minutes" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Minute" +msgstr "" + +msgid "Auto Refresh Folder List" +msgstr "" + +msgid "Enable Unread Message Notification" +msgstr "" + +msgid "No Notification" +msgstr "" + +msgid "Only INBOX" +msgstr "" + +msgid "Unread Message Notification Type" +msgstr "" + +msgid "Only Unseen" +msgstr "" + +msgid "Unseen and Total" +msgstr "" + +msgid "Enable Collapsable Folders" +msgstr "" + +msgid "Enable Cumulative Unread Message Notification" +msgstr "" + +msgid "Show Clock on Folders Panel" +msgstr "" + +msgid "International date and time" +msgstr "" + +msgid "American date and time" +msgstr "" + +msgid "European date and time" +msgstr "" + +msgid "Show weekday and time" +msgstr "" + +msgid "Show time with seconds" +msgstr "" + +msgid "Show time" +msgstr "" + +msgid "No Clock" +msgstr "" + +msgid "Hour Format" +msgstr "" + +msgid "12-hour clock" +msgstr "" + +msgid "24-hour clock" +msgstr "" + +msgid "Memory Search" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Folder Selection Options" +msgstr "" + +msgid "Selection List Style" +msgstr "" + +msgid "Long:" +msgstr "" + +msgid "Folder" +msgstr "" + +msgid "Subfolder" +msgstr "" + +msgid "Indented:" +msgstr "" + +msgid "Delimited:" +msgstr "" + +msgid "You can't select INBOX as Trash folder." +msgstr "" + +msgid "You can't select INBOX as Sent folder." +msgstr "" + +msgid "You can't select INBOX as Draft folder." +msgstr "" + +msgid "Name and Address Options" +msgstr "" + +msgid "E-mail Address" +msgstr "" + +msgid "Edit Advanced Identities" +msgstr "" + +msgid "(discards changes made on this form so far)" +msgstr "" + +msgid "Multiple Identities" +msgstr "" + +msgid "Same as server" +msgstr "" + +msgid "Error opening timezone config, contact administrator." +msgstr "" + +msgid "Timezone Options" +msgstr "" + +msgid "Your current timezone" +msgstr "" + +msgid "Reply Citation Options" +msgstr "" + +msgid "Reply Citation Style" +msgstr "" + +msgid "No Citation" +msgstr "" + +msgid "AUTHOR Wrote" +msgstr "" + +msgid "On DATE, AUTHOR Wrote" +msgstr "" + +msgid "Quote Who XML" +msgstr "" + +msgid "User-Defined" +msgstr "" + +msgid "User-Defined Citation Start" +msgstr "" + +msgid "User-Defined Citation End" +msgstr "" + +msgid "Signature Options" +msgstr "" + +msgid "Use Signature" +msgstr "" + +msgid "Prefix Signature with '-- ' Line" +msgstr "" + +msgid "Config File Version" +msgstr "" + +msgid "SquirrelMail Version" +msgstr "" + +msgid "PHP Version" +msgstr "" + +msgid "Organization Preferences" +msgstr "" + +msgid "Organization Name" +msgstr "" + +msgid "Organization Logo" +msgstr "" + +msgid "Organization Logo Width" +msgstr "" + +msgid "Organization Logo Height" +msgstr "" + +msgid "Organization Title" +msgstr "" + +msgid "Signout Page" +msgstr "" + +msgid "Provider Link URI" +msgstr "" + +msgid "Provider Name" +msgstr "" + +msgid "Top Frame" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Mail Domain" +msgstr "" + +msgid "IMAP Server Address" +msgstr "" + +msgid "IMAP Server Port" +msgstr "" + +msgid "IMAP Server Type" +msgstr "" + +msgid "Cyrus IMAP server" +msgstr "" + +msgid "University of Washington's IMAP server" +msgstr "" + +msgid "Microsoft Exchange IMAP server" +msgstr "" + +msgid "Courier IMAP server" +msgstr "" + +msgid "Mac OS X Mailserver" +msgstr "" + +msgid "hMailServer IMAP server" +msgstr "" + +msgid "Mercury/32 IMAP server" +msgstr "" + +msgid "Binc IMAP server" +msgstr "" + +msgid "Dovecot IMAP server" +msgstr "" + +msgid "Not one of the above servers" +msgstr "" + +msgid "IMAP Folder Delimiter" +msgstr "" + +msgid "Use "detect" to auto-detect." +msgstr "" + +msgid "Use TLS for IMAP Connections" +msgstr "" + +msgid "Requires PHP 4.3.x! Experimental." +msgstr "" + +msgid "IMAP Authentication Type" +msgstr "" + +msgid "IMAP login" +msgstr "" + +msgid "Use Sendmail Binary" +msgstr "" + +msgid "Choose "no" for SMTP" +msgstr "" + +msgid "Sendmail Path" +msgstr "" + +msgid "Sendmail Arguments" +msgstr "" + +msgid "SMTP Server Address" +msgstr "" + +msgid "SMTP Server Port" +msgstr "" + +msgid "Use TLS for SMTP Connections" +msgstr "" + +msgid "SMTP Authentication Type" +msgstr "" + +msgid "No SMTP auth" +msgstr "" + +msgid "Login (plain text)" +msgstr "" + +msgid "Custom SMTP AUTH username" +msgstr "" + +msgid "Custom SMTP AUTH password" +msgstr "" + +msgid "POP3 Before SMTP?" +msgstr "" + +msgid "Header Encryption Key" +msgstr "" + +msgid "Invert Time" +msgstr "" + +msgid "Folders Defaults" +msgstr "" + +msgid "Default Folder Prefix" +msgstr "" + +msgid "Show Folder Prefix Option" +msgstr "" + +msgid "By default, move to trash" +msgstr "" + +msgid "By default, move to sent" +msgstr "" + +msgid "By default, save as draft" +msgstr "" + +msgid "List Special Folders First" +msgstr "" + +msgid "Show Special Folders Color" +msgstr "" + +msgid "Auto Expunge" +msgstr "" + +msgid "Default Sub. of INBOX" +msgstr "" + +msgid "Show 'Contain Sub.' Option" +msgstr "" + +msgid "Default Unseen Notify" +msgstr "" + +msgid "Default Unseen Type" +msgstr "" + +msgid "Auto Create Special Folders" +msgstr "" + +msgid "Auto delete folders" +msgstr "" + +msgid "Enable /NoSelect folder fix" +msgstr "" + +msgid "General Options" +msgstr "" + +msgid "Data Directory" +msgstr "" + +msgid "Temp Directory" +msgstr "" + +msgid "Hash Level" +msgstr "" + +msgid "Hash Disabled" +msgstr "" + +msgid "Moderate" +msgstr "" + +msgid "Medium" +msgstr "" + +msgid "Default Left Size" +msgstr "" + +msgid "Usernames in Lowercase" +msgstr "" + +msgid "Allow use of priority" +msgstr "" + +msgid "Hide SM attributions" +msgstr "" + +msgid "Enable use of delivery receipts" +msgstr "" + +msgid "Allow editing of identities" +msgstr "" + +msgid "Allow editing of full name" +msgstr "" + +msgid "Remove username from headers" +msgstr "" + +msgid "Used only when identities can't be modified" +msgstr "" + +msgid "Use server-side sorting" +msgstr "" + +msgid "Use server-side thread sorting" +msgstr "" + +msgid "Allow server charset search" +msgstr "" + +msgid "UID support" +msgstr "" + +msgid "PHP session name" +msgstr "" + +msgid "Location base" +msgstr "" + +msgid "Message of the Day" +msgstr "" + +msgid "Database" +msgstr "" + +msgid "Address book DSN" +msgstr "" + +msgid "Address book table" +msgstr "" + +msgid "Preferences DSN" +msgstr "" + +msgid "Preferences table" +msgstr "" + +msgid "Preferences username field" +msgstr "" + +msgid "Preferences key field" +msgstr "" + +msgid "Preferences value field" +msgstr "" + +msgid "Global address book DSN" +msgstr "" + +msgid "Global address book table" +msgstr "" + +msgid "Allow writing into global address book" +msgstr "" + +msgid "Allow listing of global address book" +msgstr "" + +msgid "Language settings" +msgstr "" + +msgid "Default Language" +msgstr "" + +msgid "Default Charset" +msgstr "" + +msgid "Enable lossy encoding" +msgstr "" + +msgid "Address Books" +msgstr "" + +msgid "Default Javascript Addressbook" +msgstr "" + +msgid "Global address book file" +msgstr "" + +msgid "Allow writing into global address book file" +msgstr "" + +msgid "Themes" +msgstr "" + +msgid "Style Sheet URL (css)" +msgstr "" + +msgid "Default theme" +msgstr "" + +msgid "Use index number of theme" +msgstr "" + +msgid "Configuration Administrator" +msgstr "" + +msgid "" +"Note: it is recommended that you configure your system using conf.pl, and " +"not this plugin. conf.pl contains additional information regarding the " +"purpose of variables and appropriate values, as well as additional " +"verification steps." +msgstr "" + +msgid "" +"Run or consult conf.pl should you run into difficulty with your " +"configuration." +msgstr "" + +msgid "Theme Name" +msgstr "" + +msgid "Theme Path" +msgstr "" + +msgid "Plugins" +msgstr "" + +#, php-format +msgid "Plugin directory could not be found: %s" +msgstr "" + +msgid "Change Settings" +msgstr "" + +msgid "Test Configuration" +msgstr "" + +msgid "Config file can't be opened. Please check config.php." +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "" +"This module allows administrators to manage SquirrelMail main configuration " +"remotely." +msgstr "" + +msgid "Plugin is not enabled" +msgstr "" + +msgid "Submit a Bug Report" +msgstr "" + +msgid "" +"Before you send your bug report, please make sure to check this checklist " +"for any common problems." +msgstr "" + +#, php-format +msgid "" +"Make sure that you are running the most recent copy of %s. You are currently " +"using version %s." +msgstr "" + +#, php-format +msgid "" +"Check to see if your bug is already listed in the %sBug List%s on " +"SourceForge. If it is, we already know about it and are trying to fix it." +msgstr "" + +msgid "" +"Try to make sure that you can repeat it. If the bug happens sporatically, " +"try to document what you did when it happened. If it always occurs when you " +"view a specific message, keep that message around so maybe we can see it." +msgstr "" + +#, php-format +msgid "" +"If there were warnings displayed above, try to resolve them yourself. Read " +"the guides in the %s directory where SquirrelMail was installed." +msgstr "" + +msgid "" +"Pressing the button below will start a mail message to the developers of " +"SquirrelMail that will contain a lot of information about your system, your " +"browser, how SquirrelMail is set up, and your IMAP server. It will also " +"prompt you for information. Just fill out the sections at the top. If you " +"like, you can scroll down in the message to see what else is being sent." +msgstr "" + +msgid "" +"Please make sure to fill out as much information as you possibly can to give " +"everyone a good chance of finding and removing the bug. Submitting your bug " +"like this will not have it automatically added to the bug list on " +"SourceForge, but someone who gets your message may add it for you." +msgstr "" + +msgid "This bug involves:" +msgstr "" + +msgid "the general program" +msgstr "" + +msgid "a specific plugin" +msgstr "" + +msgid "Start Bug Report Form" +msgstr "" + +msgid "Bug" +msgstr "" + +msgid "Bug Reports" +msgstr "" + +msgid "Show button in toolbar" +msgstr "" + +#, php-format +msgid "Could not write calendar file %s" +msgstr "" + +msgid "TODAY" +msgstr "" + +msgid "Go" +msgstr "" + +msgid "l, F j Y" +msgstr "" + +msgid "ADD" +msgstr "" + +msgid "EDIT" +msgstr "" + +msgid "DEL" +msgstr "" + +msgid "Start time:" +msgstr "" + +msgid "Length:" +msgstr "" + +msgid "Priority:" +msgstr "" + +msgid "Title:" +msgstr "" + +msgid "Set Event" +msgstr "" + +msgid "Event Has been added!" +msgstr "" + +msgid "Date:" +msgstr "" + +msgid "m/d/Y" +msgstr "" + +msgid "Time:" +msgstr "" + +msgid "Day View" +msgstr "" + +msgid "Do you really want to delete this event?" +msgstr "" + +msgid "Event deleted!" +msgstr "" + +msgid "Nothing to delete!" +msgstr "" + +msgid "Update Event" +msgstr "" + +msgid "Do you really want to change this event from:" +msgstr "" + +msgid "to:" +msgstr "" + +msgid "Event updated!" +msgstr "" + +msgid "Month View" +msgstr "" + +msgid "0 min." +msgstr "" + +msgid "15 min." +msgstr "" + +msgid "30 min." +msgstr "" + +msgid "45 min." +msgstr "" + +msgid "1 hr." +msgstr "" + +msgid "1.5 hr." +msgstr "" + +msgid "2 hr." +msgstr "" + +msgid "2.5 hr." +msgstr "" + +msgid "3 hr." +msgstr "" + +msgid "3.5 hr." +msgstr "" + +msgid "4 hr." +msgstr "" + +msgid "5 hr." +msgstr "" + +msgid "6 hr." +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Delete & Prev" +msgstr "" + +msgid "Unread & Prev" +msgstr "" + +msgid "Unread & Next" +msgstr "" + +msgid "Delete & Next" +msgstr "" + +msgid "Move to:" +msgstr "" + +msgid "Delete/Unread/Move/Next Buttons:" +msgstr "" + +msgid "Display at top" +msgstr "" + +msgid "with move option" +msgstr "" + +msgid "Display at bottom" +msgstr "" + +msgid "Show unread options" +msgstr "" + +msgid "" +"COMMERCIAL - This list contains servers that are verified spam senders. It " +"is a pretty reliable list to scan spam from." +msgstr "" + +msgid "" +"COMMERCIAL - Servers that are configured (or misconfigured) to allow spam to " +"be relayed through their system will be banned with this. Another good one " +"to use." +msgstr "" + +msgid "" +"COMMERCIAL - Dial-up users are often filtered out since they should use " +"their ISP's mail servers to send mail. Spammers typically get a dial-up " +"account and send spam directly from there." +msgstr "" + +msgid "COMMERCIAL - RBL+ Blackhole entries." +msgstr "" + +msgid "COMMERCIAL - RBL+ OpenRelay entries." +msgstr "" + +msgid "COMMERCIAL - RBL+ Dial-up entries." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Direct SPAM sources." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Dial-up lists - includes some DSL IPs." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Bulk mailers that do not use confirmed opt-in." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Other misc. servers." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Single Stage servers." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - SPAM Support servers." +msgstr "" + +msgid "FREE - Five-Ten-sg.com - Web Form IPs." +msgstr "" + +msgid "" +"FREE - Dorkslayers appears to include only really bad open relays outside " +"the US to avoid being sued. Interestingly enough, their website recommends " +"you NOT use their service." +msgstr "" + +msgid "FREE - SPAMhaus - A list of well-known SPAM sources." +msgstr "" + +msgid "" +"FREE, for now - SpamCop - An interesting solution that lists servers that " +"have a very high spam to legit email ratio (85 percent or more)." +msgstr "" + +msgid "FREE - dev.null.dk - I don't have any detailed info on this list." +msgstr "" + +msgid "FREE - visi.com - Relay Stop List. Very conservative OpenRelay List." +msgstr "" + +msgid "FREE - ahbl.org Open Relays - Another list of Open Relays." +msgstr "" + +msgid "FREE - ahbl.org SPAM Source - List of Direct SPAM Sources." +msgstr "" + +msgid "FREE - ahbl.org SPAM ISPs - List of SPAM-friendly ISPs." +msgstr "" + +msgid "" +"FREE - Leadmon DUL - Another list of Dial-up or otherwise dynamically " +"assigned IPs." +msgstr "" + +msgid "" +"FREE - Leadmon SPAM Source - List of IPs Leadmon.net has received SPAM " +"directly from." +msgstr "" + +msgid "" +"FREE - Leadmon Bulk Mailers - Bulk mailers that do not require confirmed opt-" +"in or that have allowed known spammers to become clients and abuse their " +"services." +msgstr "" + +msgid "" +"FREE - Leadmon Open Relays - Single Stage Open Relays that are not listed on " +"other active RBLs." +msgstr "" + +msgid "" +"FREE - Leadmon Multi-stage - Multi-Stage Open Relays that are not listed on " +"other active RBLs and that have sent SPAM to Leadmon.net." +msgstr "" + +msgid "" +"FREE - Leadmon SpamBlock - Sites on this listing have sent Leadmon.net " +"direct SPAM from IPs in netblocks where the entire block has no DNS " +"mappings. It's a list of BLOCKS of IPs being used by people who have SPAMmed " +"Leadmon.net." +msgstr "" + +msgid "" +"FREE, for now - Not Just Another Blacklist - Both Open Relays and Direct " +"SPAM Sources." +msgstr "" + +msgid "FREE, for now - Not Just Another Blacklist - Dial-up IPs." +msgstr "" + +msgid "WARNING! You must enter something to search for." +msgstr "" + +msgid "" +"WARNING! Header filters should be of the format "Header: value"" +msgstr "" + +msgid "Saved Scan type" +msgstr "" + +msgid "Message Filtering" +msgstr "" + +msgid "What to Scan:" +msgstr "" + +msgid "All messages" +msgstr "" + +msgid "Only unread messages" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Match:" +msgstr "" + +msgid "Header" +msgstr "" + +msgid "Contains:" +msgstr "" + +#, php-format +msgid "If %s contains %s then move to %s" +msgstr "" + +msgid "Message Filters" +msgstr "" + +msgid "" +"Filtering enables messages with different criteria to be automatically " +"filtered into different folders for easier organization." +msgstr "" + +msgid "SPAM Filters" +msgstr "" + +msgid "" +"SPAM filters allow you to select from various DNS based blacklists to detect " +"junk email in your INBOX and move it to another folder (like Trash)." +msgstr "" + +msgid "You must select a spam folder." +msgstr "" + +msgid "You must select a scan type." +msgstr "" + +msgid "Spam Filtering" +msgstr "" + +#, php-format +msgid "WARNING! Tell the administrator to set the %s variable." +msgstr "" + +msgid "Move spam to:" +msgstr "" + +msgid "" +"Moving spam directly to the trash may not be a good idea at first, since " +"messages from friends and mailing lists might accidentally be marked as " +"spam. Whatever folder you set this to, make sure that it gets cleaned out " +"periodically, so that you don't have an excessively large mailbox hanging " +"around." +msgstr "" + +msgid "Unread messages only" +msgstr "" + +msgid "" +"The more messages scanned, the longer it takes. It's recommended to scan " +"unread messages only. If a change to the filters is made, it's recommended " +"to set it to scan all messages, then go view the INBOX, then come back and " +"set it to scan unread messages only. That way, the new spam filters will be " +"applied and even the spam you didn't catch with the old filters will be " +"scanned." +msgstr "" + +#, php-format +msgid "Spam is sent to %s." +msgstr "" + +msgid "not set yet" +msgstr "" + +#, php-format +msgid "Spam scan is limited to %s." +msgstr "" + +msgid "ON" +msgstr "" + +msgid "OFF" +msgstr "" + +#, php-format +msgid "%s is not found." +msgstr "" + +msgid "Today's Fortune" +msgstr "" + +msgid "Fortunes" +msgstr "" + +msgid "Show fortunes at top of mailbox" +msgstr "" + +msgid "Plugin is disabled." +msgstr "" + +msgid "IMAP server information" +msgstr "" + +msgid "" +"Run some test IMAP commands, displaying both the command and the result. " +"These tests use the SquirrelMail IMAP commands and your current SquirrelMail " +"configuration. Custom command strings can be used." +msgstr "" + +#, php-format +msgid "" +"This will send a message to %s requesting help for this list. You will " +"receive an emailed response at the address below." +msgstr "" + +#, php-format +msgid "" +"This will send a message to %s requesting that you will be subscribed to " +"this list. You will be subscribed with the address below." +msgstr "" + +#, php-format +msgid "" +"This will send a message to %s requesting that you will be unsubscribed from " +"this list. It will try to unsubscribe the adress below." +msgstr "" + +#, php-format +msgid "Unknown action: %s" +msgstr "" + +msgid "Mailinglist" +msgstr "" + +msgid "Send Mail" +msgstr "" + +msgid "Post to List" +msgstr "" + +msgid "Reply to List" +msgstr "" + +msgid "List Archives" +msgstr "" + +msgid "Contact Listowner" +msgstr "" + +msgid "Mailing List" +msgstr "" + +msgid "No server specified" +msgstr "" + +msgid "Error " +msgstr "" + +msgid "no login ID submitted" +msgstr "" + +msgid "connection not established" +msgstr "" + +msgid "No password submitted" +msgstr "" + +msgid "No connection to server" +msgstr "" + +msgid "No login ID submitted" +msgstr "" + +msgid "No server banner" +msgstr "" + +msgid "abort" +msgstr "" + +msgid "apop authentication failed" +msgstr "" + +msgid "Premature end of list" +msgstr "" + +msgid "Empty command string" +msgstr "" + +msgid "connection does not exist" +msgstr "" + +msgid "No msg number submitted" +msgstr "" + +msgid "Command failed " +msgstr "" + +msgid "Remote POP server Fetching Mail" +msgstr "" + +msgid "Select Server:" +msgstr "" + +msgid "Password for" +msgstr "" + +msgid "Fetch Mail" +msgstr "" + +msgid "Fetching from " +msgstr "" + +msgid "Oops, " +msgstr "" + +msgid "Opening IMAP server" +msgstr "" + +msgid "Opening POP server" +msgstr "" + +msgid "Login Failed:" +msgstr "" + +msgid "Login OK: No new messages" +msgstr "" + +msgid "Login OK: Inbox EMPTY" +msgstr "" + +#, php-format +msgid "Login OK: Inbox contains %s messages" +msgstr "" + +msgid "Fetching UIDL..." +msgstr "" + +msgid "Server does not support UIDL." +msgstr "" + +msgid "Leaving messages on server..." +msgstr "" + +msgid "Deleting messages from server..." +msgstr "" + +msgid "Fetching message " +msgstr "" + +msgid "Server error. Disconnect" +msgstr "" + +msgid "Reconnect from dead connection" +msgstr "" + +msgid "Saving UIDL" +msgstr "" + +msgid "Refetching message " +msgstr "" + +msgid "Error Appending Message!" +msgstr "" + +msgid "Closing POP" +msgstr "" + +msgid "Logging out from IMAP" +msgstr "" + +msgid "Message appended to mailbox" +msgstr "" + +#, php-format +msgid "Message %d deleted from remote server!" +msgstr "" + +msgid "Delete failed:" +msgstr "" + +msgid "Sorry, that port number is not allowed" +msgstr "" + +msgid "Sorry, that server address is not allowed" +msgstr "" + +msgid "Remote POP server settings" +msgstr "" + +msgid "" +"You should be aware that the encryption used to store your password is not " +"perfectly secure. However, if you are using pop, there is inherently no " +"encryption anyway. Additionally, the encryption that we do to save it on the " +"server can be undone by a hacker reading the source to this file." +msgstr "" + +msgid "If you leave password empty, it will be asked when you fetch mail." +msgstr "" + +msgid "Encrypt passwords (informative only)" +msgstr "" + +msgid "Add Server" +msgstr "" + +msgid "Server:" +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Alias:" +msgstr "" + +msgid "Username:" +msgstr "" + +msgid "Store in Folder:" +msgstr "" + +msgid "Leave mail on server" +msgstr "" + +msgid "Check mail at login" +msgstr "" + +msgid "Check mail at folder refresh" +msgstr "" + +msgid "Modify Server" +msgstr "" + +msgid "Server Name:" +msgstr "" + +msgid "Modify" +msgstr "" + +msgid "No servers known." +msgstr "" + +msgid "Fetching Servers" +msgstr "" + +msgid "Confirm Deletion of a Server" +msgstr "" + +msgid "Selected Server:" +msgstr "" + +msgid "Confirm delete of selected server?" +msgstr "" + +msgid "Confirm Delete" +msgstr "" + +msgid "Leave Mail on Server" +msgstr "" + +msgid "Undefined Function" +msgstr "" + +msgid "The function you requested is unknown." +msgstr "" + +msgid "Fetch" +msgstr "" + +msgid "Warning, " +msgstr "" + +msgid "Mail Fetch Result:" +msgstr "" + +msgid "POP3 Fetch Mail" +msgstr "" + +msgid "" +"This configures settings for downloading email from a POP3 mailbox to your " +"account on this server." +msgstr "" + +msgid "Message Details" +msgstr "" + +msgid "Bodystructure" +msgstr "" + +msgid "Entity" +msgstr "" + +msgid "Content-Type" +msgstr "" + +msgid "Encoding" +msgstr "" + +msgid "RFC822 Message body" +msgstr "" + +msgid "Close Window" +msgstr "" + +msgid "Save Message" +msgstr "" + +msgid "View Message Details" +msgstr "" + +msgid "New Mail Notification" +msgstr "" + +#, php-format +msgid "" +"The %s option will check ALL of your folders for unseen mail, not just the " +"inbox for notification." +msgstr "" + +msgid "Check all boxes, not just INBOX" +msgstr "" + +#, php-format +msgid "" +"Selecting the %s option will enable the showing of a popup window when " +"unseen mail is in your folders (requires JavaScript)." +msgstr "" + +msgid "Show popup window on new mail" +msgstr "" + +#, php-format +msgid "" +"Use the %s option to only check for messages that are recent. Recent " +"messages are those that have just recently showed up and have not been " +"\"viewed\" or checked yet. This can prevent being continuously annoyed by " +"sounds or popups for unseen mail." +msgstr "" + +msgid "Count only messages that are RECENT" +msgstr "" + +#, php-format +msgid "" +"Selecting the %s option will change the title in some browsers to let you " +"know when you have new mail (requires JavaScript). This will always tell you " +"if you have new mail, even if you have %s enabled." +msgstr "" + +msgid "Change title on supported browsers" +msgstr "" + +#, php-format +msgid "" +"Select %s to turn on playing a media file when unseen mail is in your " +"folders. When enabled, you can specify the media file to play in the " +"provided file box." +msgstr "" + +msgid "Enable Media Playing" +msgstr "" + +#, php-format +msgid "" +"Select from the list of %s the media file to play when new mail arrives. If " +"no file is specified, %s, no sound will be used." +msgstr "" + +msgid "Select server file" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "requires JavaScript to work" +msgstr "" + +msgid "Width of popup window:" +msgstr "" + +msgid "If set to 0, reverts to default value" +msgstr "" + +msgid "Height of popup window:" +msgstr "" + +msgid "Try" +msgstr "" + +msgid "Current File:" +msgstr "" + +msgid "New Mail" +msgstr "" + +msgid "SquirrelMail Notice:" +msgstr "" + +#, php-format +msgid "You have %s new message" +msgstr "" + +#, php-format +msgid "You have %s new messages" +msgstr "" + +msgid "NewMail Options" +msgstr "" + +msgid "" +"This configures settings for playing sounds and/or showing popup windows " +"when new mail arrives." +msgstr "" + +#, php-format +msgid "%s New Messages" +msgstr "" + +#, php-format +msgid "%s New Message" +msgstr "" + +msgid "Test Sound" +msgstr "" + +msgid "No sound specified" +msgstr "" + +msgid "Loading the sound..." +msgstr "" + +msgid "Sent Subfolders Options" +msgstr "" + +msgid "Use Sent Subfolders" +msgstr "" + +msgid "Monthly" +msgstr "" + +msgid "Quarterly" +msgstr "" + +msgid "Yearly" +msgstr "" + +msgid "Base Sent Folder" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Disable it" +msgstr "" + +msgid "Enable it" +msgstr "" + +msgid "Spam reporting" +msgstr "" + +msgid "SpamCop link is:" +msgstr "" + +msgid "Delete spam when reported:" +msgstr "" + +msgid "Only works with email-based reporting" +msgstr "" + +msgid "Spam Reporting Method:" +msgstr "" + +msgid "Quick email-based reporting" +msgstr "" + +msgid "Through email-based reporting" +msgstr "" + +msgid "Web-based form" +msgstr "" + +msgid "Save Method" +msgstr "" + +msgid "Your SpamCop authorization code:" +msgstr "" + +msgid "see below" +msgstr "" + +msgid "Save ID" +msgstr "" + +msgid "About SpamCop" +msgstr "" + +msgid "" +"SpamCop is a free service that greatly assists in finding the true source of " +"the spam and helps in letting the proper people know about the abuse." +msgstr "" + +#, php-format +msgid "" +"To use it, you must get a SpamCop authorization code. There is a free %ssign " +"up page%s so you can use SpamCop." +msgstr "" + +msgid "Before you sign up, be warned" +msgstr "" + +#, php-format +msgid "" +"Some users have reported that the email addresses used with SpamCop find " +"their way onto spam lists. To be safe, you can just create an email " +"forwarding account and have all SpamCop reports get sent to there. Also, if " +"it gets flooded with spam, you can then just delete that account with no " +"worries about losing your real email address. Just go create an email " +"forwarder somewhere (%s has a %slist of places%s) so that messages from " +"system administrators and what not can be sent to you." +msgstr "" + +msgid "" +"Once you have signed up with SpamCop and have received your SpamCop " +"authorization code, you need to enable this plugin by clicking the link " +"above. Once enabled, you go about your normal life. If you encounter a spam " +"message in your mailbox, just view it. On the right-hand side, near the top " +"of where the message is displayed, you will see a link to report this " +"message as spam. Clicking on it brings you to a confirmation page. " +"Confirming that you want the spam report sent will do different things with " +"different reporting methods." +msgstr "" + +msgid "Email-based reporting" +msgstr "" + +msgid "" +"Pressing the button forwards the message to the SpamCop service and will " +"optionally delete the message. From there, you just need to go to your INBOX " +"and quite soon a message should appear from SpamCop. (It gets sent to the " +"account you registered with, so make sure that your mail forwarder works!) " +"Open it up, click on the appropriate link at the top, and a new browser " +"window will open." +msgstr "" + +msgid "" +"Currently, the quick reporting just forwards the request to the thorough " +"reporting. Also, it appears that this is for members (non-free) only. " +"Hopefully this will change soon." +msgstr "" + +msgid "Web-based reporting" +msgstr "" + +msgid "" +"When you press the button on the confirmation page, this will pop open a new " +"browser window and the SpamCop service should appear inside. The message " +"will not be deleted (working on that part), but you won't need to wait for a " +"response email to start the spam reporting." +msgstr "" + +msgid "" +"The SpamCop service will display information as it finds it, so scroll down " +"until you see a form button. It might pause a little while it is looking up " +"information, so be a little patient. Read what it says, and submit the spam. " +"Close the browser window. Press Cancel or click on the appropriate mail " +"folder to see messages and/or delete the spam." +msgstr "" + +msgid "SpamCop service type" +msgstr "" + +msgid "" +"Service type option allows selecting which SpamCop services you are using. " +"Member services use different web reporting forms and does not display nags. " +"You can purchase these services, if you want to support SpamCop." +msgstr "" + +msgid "More information" +msgstr "" + +#, php-format +msgid "" +"For more information about SpamCop, it's services, spam in general, and many " +"related topics, try reading through SpamCop's %sHelp and Feedback%s section." +msgstr "" + +msgid "Report as Spam" +msgstr "" + +msgid "SpamCop - Spam Reporting" +msgstr "" + +msgid "" +"Help fight the battle against unsolicited email. SpamCop reads the spam " +"email and determines the correct addresses to send complaints to. Quite " +"fast, really smart, and easy to use." +msgstr "" + +msgid "" +"Sending this spam report will give you back a reply with URLs that you can " +"click on to properly report this spam message to the proper authorities. " +"This is a free service. By pressing the \"Send Spam Report\" button, you " +"agree to follow SpamCop's rules/terms of service/etc." +msgstr "" + +msgid "Cancel / Done" +msgstr "" + +msgid "Send Spam Report" +msgstr "" + +msgid "SpellChecker Options" +msgstr "" + +msgid "" +"Here you may set up how your personal dictionary is stored, edit it, or " +"choose which languages should be available to you when spell-checking." +msgstr "" + +msgid "Check Spelling" +msgstr "" + +msgid "Back to "SpellChecker Options" page" +msgstr "" + +msgid "ATTENTION:" +msgstr "" + +msgid "" +"SquirrelSpell was unable to decrypt your personal dictionary. This is most " +"likely due to the fact that you have changed your mailbox password. In order " +"to proceed, you will have to supply your old password so that SquirrelSpell " +"can decrypt your personal dictionary. It will be re-encrypted with your new " +"password after this. If you haven't encrypted your dictionary, then it got " +"mangled and is no longer valid. You will have to delete it and start anew. " +"This is also true if you don't remember your old password -- without it, the " +"encrypted data is no longer accessible." +msgstr "" + +msgid "Delete my dictionary and start a new one" +msgstr "" + +msgid "Decrypt my dictionary with my old password:" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "You must make a choice" +msgstr "" + +msgid "" +"You can either delete your dictionary or type in the old password. Not both." +msgstr "" + +msgid "This will delete your personal dictionary file. Proceed?" +msgstr "" + +msgid "Error Decrypting Dictionary" +msgstr "" + +#, php-format +msgid "Could not run the spellchecker command (%s)." +msgstr "" + +msgid "Error while writing to pipe." +msgstr "" + +#, php-format +msgid "Could not open temporary file '%s'." +msgstr "" + +#, php-format +msgid "Error while writing to temporary file '%s'." +msgstr "" + +#, php-format +msgid "I tried to execute '%s', but it returned:" +msgstr "" + +msgid "SquirrelSpell is misconfigured." +msgstr "" + +msgid "Spellcheck completed. Commit changes?" +msgstr "" + +msgid "No changes were made." +msgstr "" + +msgid "Now saving your personal dictionary... Please wait." +msgstr "" + +msgid "SquirrelSpell Results" +msgstr "" + +#, php-format +msgid "Found %s errors" +msgstr "" + +msgid "Line with an error:" +msgstr "" + +msgid "Error:" +msgstr "" + +msgid "Suggestions:" +msgstr "" + +msgid "Suggestions" +msgstr "" + +msgid "Change to:" +msgstr "" + +msgid "Occurs times:" +msgstr "" + +msgid "Change this word" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Change ALL occurances of this word" +msgstr "" + +msgid "Change All" +msgstr "" + +msgid "Ignore this word" +msgstr "" + +msgid "Ignore" +msgstr "" + +msgid "Ignore ALL occurances this word" +msgstr "" + +msgid "Ignore All" +msgstr "" + +msgid "Add this word to your personal dictionary" +msgstr "" + +msgid "Add to Dic" +msgstr "" + +msgid "Close and Commit" +msgstr "" + +msgid "The spellcheck is not finished. Really close and commit changes?" +msgstr "" + +msgid "Close and Cancel" +msgstr "" + +msgid "The spellcheck is not finished. Really close and discard changes?" +msgstr "" + +msgid "No errors found" +msgstr "" + +msgid "Your personal dictionary was erased." +msgstr "" + +msgid "Dictionary Erased" +msgstr "" + +msgid "" +"Your personal dictionary was erased. Please close this window and click " +"\"Check Spelling\" button again to start your spellcheck over." +msgstr "" + +msgid "Close this Window" +msgstr "" + +msgid "" +"Your personal dictionary was re-encrypted successfully. Now return to the " +""SpellChecker options" menu and make your selection again." +msgstr "" + +msgid "Successful re-encryption" +msgstr "" + +msgid "" +"Your personal dictionary was re-encrypted successfully. Please close this " +"window and click \"Check Spelling\" button again to start your spellcheck " +"over." +msgstr "" + +msgid "Dictionary re-encrypted" +msgstr "" + +msgid "" +"Your personal dictionary has been encrypted and is now stored in an " +"encrypted format." +msgstr "" + +msgid "" +"Your personal dictionary has been decrypted and is now stored as plain text." +msgstr "" + +msgid "No action requested." +msgstr "" + +msgid "Personal Dictionary Crypto Settings" +msgstr "" + +msgid "Personal Dictionary" +msgstr "" + +msgid "No words in your personal dictionary." +msgstr "" + +msgid "Please check any words you wish to delete from your dictionary." +msgstr "" + +#, php-format +msgid "%s dictionary" +msgstr "" + +msgid "Delete checked words" +msgstr "" + +msgid "Edit your Personal Dictionary" +msgstr "" + +msgid "Please make your selection first." +msgstr "" + +msgid "" +"This will encrypt your personal dictionary and store it in an encrypted " +"format. Proceed?" +msgstr "" + +msgid "" +"This will decrypt your personal dictionary and store it in a plain text " +"format. Proceed?" +msgstr "" + +msgid "Your personal dictionary is currently encrypted." +msgstr "" + +msgid "" +"This helps protect your privacy in case the web-mail system gets compromized " +"and your personal dictionary ends up stolen. It is currently encrypted with " +"the password you use to access your mailbox, making it hard for anyone to " +"see what is stored in your personal dictionary." +msgstr "" + +msgid "" +"If you forget your password, your personal dictionary will become " +"unaccessible, since it can no longer be decrypted. If you change your " +"mailbox password, SquirrelSpell will recognize it and prompt you for your " +"old password in order to re-encrypt the dictionary with a new key." +msgstr "" + +msgid "" +"Please decrypt my personal dictionary and store it in a clear-text format." +msgstr "" + +msgid "Change crypto settings" +msgstr "" + +msgid "Your personal dictionary is currently not encrypted." +msgstr "" + +msgid "" +"You may wish to encrypt your personal dictionary to protect your privacy in " +"case the webmail system gets compromized and your personal dictionary file " +"gets stolen. When encrypted, the file's contents look garbled and are hard " +"to decrypt without knowing the correct key (which is your mailbox password)." +msgstr "" + +msgid "" +"If you decide to encrypt your personal dictionary, you must remember that it " +"gets "hashed" with your mailbox password. If you forget your " +"mailbox password and the administrator changes it to a new value, your " +"personal dictionary will become useless and will have to be created anew. " +"However, if you or your system administrator change your mailbox password " +"but you still have the old password at hand, you will be able to enter the " +"old key to re-encrypt the dictionary with the new value." +msgstr "" + +msgid "" +"Please encrypt my personal dictionary and store it in an encrypted format." +msgstr "" + +#, php-format +msgid "Deleting the following entries from %s dictionary:" +msgstr "" + +msgid "All done!" +msgstr "" + +msgid "Personal Dictionary Updated" +msgstr "" + +msgid "No changes requested." +msgstr "" + +msgid "Please wait, communicating with the server..." +msgstr "" + +msgid "" +"Please choose which dictionary you would like to use to spellcheck this " +"message:" +msgstr "" + +msgid "SquirrelSpell Initiating" +msgstr "" + +msgid ", " +msgstr "" + +#, php-format +msgid "Settings adjusted to: %s with %s as default dictionary." +msgstr "" + +#, php-format +msgid "Using %s dictionary (system default) for spellcheck." +msgstr "" + +msgid "International Dictionaries Preferences Updated" +msgstr "" + +msgid "" +"Please check any available international dictionaries which you would like " +"to use when spellchecking:" +msgstr "" + +msgid "Make this dictionary my default selection:" +msgstr "" + +msgid "Make these changes" +msgstr "" + +msgid "Add International Dictionaries" +msgstr "" + +msgid "Please choose which options you wish to set up:" +msgstr "" + +msgid "Edit your personal dictionary" +msgstr "" + +msgid "Set up international dictionaries" +msgstr "" + +msgid "Encrypt or decrypt your personal dictionary" +msgstr "" + +msgid "Personal dictionary encryption options are not available" +msgstr "" + +msgid "SquirrelSpell Options Menu" +msgstr "" + +msgid "Translator" +msgstr "" + +msgid "Saved Translation Options" +msgstr "" + +msgid "Your server options are as follows:" +msgstr "" + +msgid "Maximum of 150 words translated, powered by Systran" +msgstr "" + +#, php-format +msgid "Number of supported language pairs: %s" +msgstr "" + +msgid "No known limits, powered by Systran" +msgstr "" + +msgid "No known limits, powered by Translation Experts' InterTran" +msgstr "" + +#, php-format +msgid "Number of supported languages: %s" +msgstr "" + +msgid "Hellenic translations, no known limits, powered by Systran" +msgstr "" + +msgid "Russian translations, maximum of 500 characters translated" +msgstr "" + +msgid "" +"You also decide if you want the translation box displayed, and where it will " +"be located." +msgstr "" + +msgid "Select your translator:" +msgstr "" + +msgid "When reading:" +msgstr "" + +msgid "Show translation box" +msgstr "" + +msgid "to the left" +msgstr "" + +msgid "in the center" +msgstr "" + +msgid "to the right" +msgstr "" + +msgid "Translate inside the SquirrelMail frames" +msgstr "" + +msgid "Translation Options" +msgstr "" + +msgid "" +"Which translator should be used when you get messages in a different " +"language?" +msgstr "" + +#, php-format +msgid "%s to %s" +msgstr "" + +msgid "Chinese, Simplified" +msgstr "" + +msgid "English" +msgstr "" + +msgid "Chinese, Traditional" +msgstr "" + +msgid "Dutch" +msgstr "" + +msgid "French" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Spanish" +msgstr "" + +msgid "Translate" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Danish" +msgstr "" + +msgid "Filipino (Tagalog)" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Icelandic" +msgstr "" + +msgid "Latin" +msgstr "" + +msgid "Latin American Spanish" +msgstr "" + +msgid "Norwegian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Welsh" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "to English" +msgstr "" + +msgid "from English" +msgstr "" + +msgid "Interface language" +msgstr "" + +msgid "Translation direction" +msgstr "" + +msgid "Arabic" +msgstr "" + +msgid "Delivery error report" +msgstr "" + +msgid "Undelivered Message Headers" +msgstr "" + +msgid "This image has been removed for security reasons" +msgstr "" diff --git a/ehcp/webmail2/po/xgetpo b/ehcp/webmail2/po/xgetpo new file mode 100644 index 0000000..71e88fe --- /dev/null +++ b/ehcp/webmail2/po/xgetpo @@ -0,0 +1,80 @@ +#!/bin/sh + +# This script regenerates main POT file +# +# Philipe Mingo +# +# $Id: xgetpo 13768 2009-05-28 06:19:45Z jervfors $ + +# force use of same locale in order to keep same sorting order +LC_ALL=en_US.ISO8859-1 +LANG=en_US.ISO8859-1 +export LC_ALL LANG + +# set common gettext options +XGETTEXT_OPTIONS="--keyword=_ -keyword=N_ --default-domain=squirrelmail --no-location --add-comments=i18n" + +# Allows controlling language option +# (gettext v.0.10.40 = -C, gettext 0.11+ = -L php). +if [ $SM_LANG_PHP ] ; then + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -L php"; +else + XGETTEXT_OPTIONS="${XGETTEXT_OPTIONS} -C"; +fi + +cd .. +xgettext ${XGETTEXT_OPTIONS} \ + src/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + class/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + class/*/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + functions/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + include/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + include/options/*.php --output=po/squirrelmail.pot + +# Plugins + +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/administrator/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/bug_report/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/calendar/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/delete_move_next/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/filters/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/fortune/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/info/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/listcommands/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/mail_fetch/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/message_details/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/newmail/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/sent_subfolders/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/spamcop/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/squirrelspell/*.php --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/squirrelspell/modules/*.mod --output=po/squirrelmail.pot +xgettext ${XGETTEXT_OPTIONS} -j \ + plugins/translate/*.php --output=po/squirrelmail.pot + +xgettext ${XGETTEXT_OPTIONS} -j \ + po/independent_strings.txt --output=po/squirrelmail.pot + +# print stats +msgfmt --statistics ${SM_LOCALES_PATH}/po/squirrelmail.pot -o /dev/null + +cd po diff --git a/ehcp/webmail2/src/addrbook_popup.php b/ehcp/webmail2/src/addrbook_popup.php new file mode 100644 index 0000000..978a050 --- /dev/null +++ b/ehcp/webmail2/src/addrbook_popup.php @@ -0,0 +1,47 @@ + + + + + + + <?php echo "$org_title: " . _("Address Book"); ?> + + + + + + \ No newline at end of file diff --git a/ehcp/webmail2/src/addrbook_search.php b/ehcp/webmail2/src/addrbook_search.php new file mode 100644 index 0000000..b9d7de9 --- /dev/null +++ b/ehcp/webmail2/src/addrbook_search.php @@ -0,0 +1,306 @@ + + +\n"; + + while (list($undef, $row) = each($res)) { + $email = htmlspecialchars(addcslashes(AddressBook::full_address($row), "'"), ENT_QUOTES); + if ($line % 2) { + $tr_bgcolor = $color[12]; + } else { + $tr_bgcolor = $color[4]; + } + echo html_tag( 'tr', '', '', $tr_bgcolor, 'nowrap' ) . + html_tag( 'td', + '"._("To")." | " . + '"._("Cc")." | " . + '"._("Bcc")."", + 'center', '', 'valign="top" width="5%" nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['name']), 'left', '', 'valign="top" nowrap' ) . + html_tag( 'td', ' ' . + '" . htmlspecialchars($row['email']) . '' + , 'left', '', 'valign="top"' ) . + html_tag( 'td', htmlspecialchars($row['label']), 'left', '', 'valign="top" nowrap' ); + if ($includesource) { + echo html_tag( 'td', ' ' . $row['source'], 'left', '', 'valign="top" nowrap' ); + } + + echo "
              '; +} + +/* ================= End of functions ================= */ + + +displayHtmlHeader(); + +/* Initialize vars */ +if (!isset($query)) { $query = ''; } +if (!isset($show)) { $show = ''; } +if (!isset($backend)) { $backend = ''; } + +/* Choose correct colors for top and bottom frame */ +if ($show == 'form' && !isset($listall)) { + echo ''; +} else { + echo '\n"; +} + +/* Empty search */ +if (empty($query) && empty($show) && empty($listall)) { + echo html_tag( 'p', '
              ' . + _("No persons matching your search were found"), + 'center' ) . + "\n\n"; + exit; +} + +/* Initialize addressbook */ +$abook = addressbook_init(); + +/* Create search form */ +if ($show == 'form' && empty($listall)) { + echo '' . "\n" . + html_tag( 'table', '', '', '', 'border="0" width="100%" height="100%"' ) . + html_tag( 'tr' ) . + html_tag( 'td', ' ' . _("Search for") . "\n", 'left', '', 'nowrap valign="middle" width="10%"' ) . + html_tag( 'td', '', 'left', '', '' ) . + addInput('query', $query, 28); + + /* List all backends to allow the user to choose where to search */ + if ($abook->numbackends > 1) { + echo '' . _("in") . ' '."\n"; + $selopts = array(); + $selopts['-1'] = _("All address books"); + + $ret = $abook->get_backend_list(); + while (list($undef,$v) = each($ret)) { + $selopts[$v->bnum] = $v->sname; + } + echo addSelect('backend', $selopts, '-1', TRUE); + } else { + echo addHidden('backend', '-1'); + } + + echo '
              ' . "\n"; +} else { + + /* Show personal addressbook */ + if ($show == 'blank' && empty($listall)) { + + if($backend != -1 || $show == 'blank') { + if ($show == 'blank') { + $backend = $abook->localbackend; + } + $res = $abook->list_addr($backend); + + if(is_array($res)) { + usort($res,'alistcmp'); + display_result($res, false); + } else { + echo html_tag( 'p', '' . + sprintf(_("Unable to list addresses from %s"), + $abook->backends[$backend]->sname) . '' , + 'center' ) . "\n"; + } + } else { + $res = $abook->list_addr(); + usort($res,'alistcmp'); + display_result($res, true); + } + + } else { + if( !empty( $listall ) ){ + $query = '*'; + } + + /* Do the search */ + if (!empty($query)) { + + if($backend == -1) { + $res = $abook->s_search($query); + } else { + $res = $abook->s_search($query, $backend); + } + + if (!is_array($res)) { + echo html_tag( 'p', '
              ' . + _("Your search failed with the following error(s)") . + ':
              ' . $abook->error . "
              \n" , + 'center' ) . + "\n\n"; + exit; + } + + if (sizeof($res) == 0) { + echo html_tag( 'p', '
              ' . + _("No persons matching your search were found") . "\n" , + 'center' ) . + "\n\n"; + exit; + } + + display_result($res); + } + } + +} +?> + \ No newline at end of file diff --git a/ehcp/webmail2/src/addrbook_search_html.php b/ehcp/webmail2/src/addrbook_search_html.php new file mode 100644 index 0000000..fa746ba --- /dev/null +++ b/ehcp/webmail2/src/addrbook_search_html.php @@ -0,0 +1,318 @@ +entities) + echo addHidden('attachments', serialize($composeMessage->entities)); + + echo addHidden('session', $session). + addHidden('subject', $subject). + addHidden('send_to', $send_to). + addHidden('send_to_bcc', $send_to_bcc). + addHidden('send_to_cc', $send_to_cc). + addHidden('mailprio', $mailprio). + addHidden('request_mdn', $request_mdn). + addHidden('request_dr', $request_dr). + addHidden('identity', $identity). + addHidden('mailbox', $mailbox). + addHidden('from_htmladdr_search', 'true'); +} + + +/** + * List search results + * @param array $res Array containing results of search + * @param bool $includesource If true, adds backend column to address listing + */ +function addr_display_result($res, $includesource = true) { + global $color, $javascript_on, $PHP_SELF, $squirrelmail_language; + + if (sizeof($res) <= 0) return; + + echo addForm($PHP_SELF, 'POST', 'addrbook', '', '', '', TRUE). + addHidden('html_addr_search_done', 'true'); + addr_insert_hidden(); + $line = 0; + + if ($javascript_on) { + print + '\n"; + $chk_all = '' . _("All") . ' '._("To").''. + '  '. + '' . _("All") . ' '._("Cc").''. + '  '. + '' . _("All") . ''; + } else { + // check_all links are implemented only in JavaScript. disable links in js=off environment. + $chk_all = ''; + } + echo html_tag( 'table', '', 'center', '', 'border="0" width="98%"' ) . + html_tag( 'tr', '', '', $color[9] ) . + html_tag( 'th', ' ' . $chk_all, 'left' ) . + html_tag( 'th', ' ' . _("Name"), 'left' ) . + html_tag( 'th', ' ' . _("E-mail"), 'left' ) . + html_tag( 'th', ' ' . _("Info"), 'left' ); + + if ($includesource) { + echo html_tag( 'th', ' ' . _("Source"), 'left', '', 'width="10%"' ); + } + + echo "\n"; + + foreach ($res as $row) { + $email = AddressBook::full_address($row); + if ($line % 2) { + $tr_bgcolor = $color[12]; + } else { + $tr_bgcolor = $color[4]; + } + if ($squirrelmail_language == 'ja_JP') + { + echo html_tag( 'tr', '', '', $tr_bgcolor, 'nowrap' ) . + html_tag( 'td', + ' ' . _("To") . ' ' . + ' ' . _("Cc") . ' ' . + ' ' . _("Bcc") . ' ' , + 'center', '', 'width="5%" nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['lastname']) . ' ' . htmlspecialchars($row['firstname']) . ' ', 'left', '', 'nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['email']) . ' ', 'left', '', 'nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['label']) . ' ', 'left', '', 'nowrap' ); + } else { + echo html_tag( 'tr', '', '', $tr_bgcolor, 'nowrap' ) . + html_tag( 'td', + addCheckBox('send_to_search[T'.$line.']', FALSE, $email). + ' ' . _("To") . ' ' . + addCheckBox('send_to_search[C'.$line.']', FALSE, $email). + ' ' . _("Cc") . ' ' . + addCheckBox('send_to_search[B'.$line.']', FALSE, $email). + ' ' . _("Bcc") . ' ' , + 'center', '', 'width="5%" nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['name']) . ' ', 'left', '', 'nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['email']) . ' ', 'left', '', 'nowrap' ) . + html_tag( 'td', ' ' . htmlspecialchars($row['label']) . ' ', 'left', '', 'nowrap' ); + } + + if ($includesource) { + echo html_tag( 'td', ' ' . $row['source'] . ' ', 'left', '', 'nowrap' ); + } + echo "\n"; + $line ++; + } + if ($includesource) { $td_colspan = '5'; } else { $td_colspan = '4'; } + echo html_tag( 'tr', + html_tag( 'td', + ' ' . + '', + 'center', '', 'colspan="'. $td_colspan .'"' ) + ) . + '' . + addHidden('html_addr_search_done', '1'). + ''; +} + +/* --- End functions --- */ + +if ($compose_new_win == '1') { + compose_Header($color, $mailbox); +} +else { + displayPageHeader($color, $mailbox); +} +/* Initialize addressbook */ +$abook = addressbook_init(); + + +echo '
              ' . +html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', '' . _("Address Book Search") . '', 'center', $color[0] ) + ) , +'center', '', 'width="95%" cellpadding="2" cellspacing="2" border="0"' ); + + +/* Search form */ +echo addForm($PHP_SELF.'?html_addr_search=true', 'post', 'f'). + '
              ' . + html_tag( 'table', '', 'center', '', 'border="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'left', '', 'nowrap valign="middle"' ) . "\n" . + "\n
              \n" . + ' ' . _("Search for") . "\n"; +addr_insert_hidden(); +if (! isset($addrquery)) + $addrquery = ''; +echo addInput('addrquery', $addrquery, 26); + +/* List all backends to allow the user to choose where to search */ +if (!isset($backend)) { $backend = ''; } +if ($abook->numbackends > 1) { + echo '' . _("in") . ' '; + + $selopts['-1'] = _("All address books"); + $ret = $abook->get_backend_list(); + + while (list($undef,$v) = each($ret)) { + $selopts[$v->bnum] = $v->sname; + } + echo addSelect('backend', $selopts, $backend, TRUE); +} else { + echo addHidden('backend', '-1'); +} +if (isset($session)) { + echo addHidden('session', $session); +} + +echo '' . + ' | ' . "\n" . + '
              ' . "\n"; +echo '
              '; +do_hook('addrbook_html_search_below'); +/* End search form */ + +/* Show personal addressbook */ + +if ( !empty( $listall ) ){ + $addrquery = '*'; +} + +if ($addrquery == '' && empty($listall)) { + + if (! isset($backend) || $backend != -1 || $addrquery == '') { + if ($addrquery == '') { + $backend = $abook->localbackend; + } + + /* echo '

              ' . $abook->backends[$backend]->sname) . "

              \n"; */ + + $res = $abook->list_addr($backend); + + if (is_array($res)) { + usort($res,'alistcmp'); + addr_display_result($res, false); + } else { + echo html_tag( 'p', '
              ' . + sprintf(_("Unable to list addresses from %s"), + $abook->backends[$backend]->sname) . "
              \n" , + 'center' ); + } + + } else { + $res = $abook->list_addr(); + usort($res,'alistcmp'); + addr_display_result($res, true); + } + echo ''; + exit; +} +else { + + /* Do the search */ + if (!empty($addrquery)) { + + if ($backend == -1) { + $res = $abook->s_search($addrquery); + } else { + $res = $abook->s_search($addrquery, $backend); + } + + if (!is_array($res)) { + echo html_tag( 'p', '
              ' . + _("Your search failed with the following error(s)") . + ':
              ' . $abook->error . "
              \n" , + 'center' ) . + "\n\n"; + } else { + if (sizeof($res) == 0) { + echo html_tag( 'p', '
              ' . + _("No persons matching your search were found") . "\n" , + 'center' ) . + "\n\n"; + } else { + addr_display_result($res); + } + } + } +} + +if ($addrquery == '' || sizeof($res) == 0) { + /* printf('
              '."\n", $PHP_SELF); */ + echo '
              '. + addForm('compose.php','POST','k', '', '', '', TRUE); + addr_insert_hidden(); + echo '' . "\n" . + '
              '; +} + +?> + diff --git a/ehcp/webmail2/src/addressbook.php b/ehcp/webmail2/src/addressbook.php new file mode 100644 index 0000000..e305f43 --- /dev/null +++ b/ehcp/webmail2/src/addressbook.php @@ -0,0 +1,596 @@ +' . _("Must be unique") . '') . + addressbook_inp_field(_("E-mail address"), 'email', $name, 45, $values, '') . + addressbook_inp_field(_("Last name"), 'lastname', $name, 45, $values, '') . + addressbook_inp_field(_("First name"), 'firstname', $name, 45, $values, '') . + addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') . + list_writable_backends($name) . + html_tag( 'tr', + html_tag( 'td', + addSubmit($submittext, $name.'[SUBMIT]'), + 'center', $color[4], 'colspan="2"') + ) + , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n"; + } else { + echo html_tag( 'table', + addressbook_inp_field(_("Nickname"), 'nickname', $name, 15, $values, + ' ' . _("Must be unique") . '') . + addressbook_inp_field(_("E-mail address"), 'email', $name, 45, $values, '') . + addressbook_inp_field(_("First name"), 'firstname', $name, 45, $values, '') . + addressbook_inp_field(_("Last name"), 'lastname', $name, 45, $values, '') . + addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') . + list_writable_backends($name) . + html_tag( 'tr', + html_tag( 'td', + addSubmit($submittext, $name.'[SUBMIT]') , + 'center', $color[4], 'colspan="2"') + ) + , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n"; + } +} + + +/** + * Provides list of writeable backends. + * Works only when address is added ($name='addaddr') + * @param string $name name of form + * @return string html formated backend field (select or hidden) + */ +function list_writable_backends($name) { + global $color, $abook; + if ( $name != 'addaddr' ) { return; } + $writeable_abook = 1; + if ( $abook->numbackends > 1 ) { + $backends = $abook->get_backend_list(); + $writeable_abooks=array(); + while (list($undef,$v) = each($backends)) { + if ($v->writeable) { + // add each backend to array + $writeable_abooks[$v->bnum]=$v->sname; + // save backend number + $writeable_abook=$v->bnum; + } + } + if (count($writeable_abooks)>1) { + // we have more than one writeable backend + $ret=addSelect('backend',$writeable_abooks,null,true); + return html_tag( 'tr', + html_tag( 'td', _("Add to:"),'right', $color[4] ) . + html_tag( 'td', $ret, 'left', $color[4] )) . "\n"; + } + } + // Only one backend exists or is writeable. + return html_tag( 'tr', + html_tag( 'td', + addHidden('backend', $writeable_abook), + 'center', $color[4], 'colspan="2"')) . "\n"; +} + +// Create page header before addressbook_init in order to +// display error messages correctly, unless we might be +// redirecting the browser to the compose page. +// +if ((empty($compose_to)) || sizeof($sel) < 1) + displayPageHeader($color, 'None'); + +/* Open addressbook, with error messages on but without LDAP (the * + * second "true"). Don't need LDAP here anyway */ +$abook = addressbook_init(true, true); +if($abook->localbackend == 0) { + plain_error_message( + _("No personal address book is defined. Contact administrator."), + $color); + exit(); +} + +$defdata = array(); +$formerror = ''; +$abortform = false; +$showaddrlist = true; +$defselected = array(); +$form_url = 'addressbook.php'; + + +/* Handle user's actions */ +if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'POST') { + + // first, validate security token + sm_validate_security_token($submitted_token, 3600, TRUE); + + /************************************************** + * Add new address * + **************************************************/ + if (isset($addaddr)) { + if (isset($backend)) { + $r = $abook->add($addaddr, $backend); + } else { + $r = $abook->add($addaddr, $abook->localbackend); + } + + /* Handle error messages */ + if (!$r) { + /* Remove backend name from error string */ + $errstr = $abook->error; + $errstr = preg_replace('/^\[.*\] */', '', $errstr); + + $formerror = $errstr; + $showaddrlist = false; + $defdata = $addaddr; + } + } else { + + /************************************************ + * Delete address(es) * + ************************************************/ + if ((!empty($deladdr)) && sizeof($sel) > 0) { + $orig_sel = $sel; + sort($sel); + + /* The selected addresses are identidied by "backend:nickname". * + * Sort the list and process one backend at the time */ + $prevback = -1; + $subsel = array(); + $delfailed = false; + + for ($i = 0 ; (($i < sizeof($sel)) && !$delfailed) ; $i++) { + list($sbackend, $snick) = explode(':', $sel[$i], 2); + + /* When we get to a new backend, process addresses in * + * previous one. */ + if ($prevback != $sbackend && $prevback != -1) { + + $r = $abook->remove($subsel, $prevback); + if (!$r) { + $formerror = $abook->error; + $i = sizeof($sel); + $delfailed = true; + break; + } + $subsel = array(); + } + + /* Queue for processing */ + array_push($subsel, $snick); + $prevback = $sbackend; + } + + if (!$delfailed) { + $r = $abook->remove($subsel, $prevback); + if (!$r) { /* Handle errors */ + $formerror = $abook->error; + $delfailed = true; + } + } + + if ($delfailed) { + $showaddrlist = true; + $defselected = $orig_sel; + } + + /************************************************ + * Compose to selected address(es) * + ************************************************/ + } else if ((!empty($compose_to)) && sizeof($sel) > 0) { + $orig_sel = $sel; + sort($sel); + + // The selected addresses are identidied by "backend:nickname" + $lookup_failed = false; + $send_to = ''; + + for ($i = 0 ; (($i < sizeof($sel)) && !$lookup_failed) ; $i++) { + list($sbackend, $snick) = explode(':', $sel[$i], 2); + + $data = $abook->lookup($snick, $sbackend); + + if (!$data) { + $formerror = $abook->error; + $lookup_failed = true; + break; + } else { + $addr = $abook->full_address($data); + if (!empty($addr)) + $send_to .= $addr . ', '; + } + } + + + if ($lookup_failed || empty($send_to)) { + $showaddrlist = true; + $defselected = $sel; + + // we skipped the page header above for this functionality, so add it here + displayPageHeader($color, 'None'); + } + + + // send off to compose screen + else { + $send_to = trim($send_to, ', '); + header('Location: ' . $base_uri . 'src/compose.php?send_to=' . rawurlencode($send_to)); + exit; + } + + } else { + + /*********************************************** + * Update/modify address * + ***********************************************/ + if (!empty($editaddr)) { + + /* Stage one: Copy data into form */ + if (isset($sel) && sizeof($sel) > 0) { + if(sizeof($sel) > 1) { + $formerror = _("You can only edit one address at the time"); + $showaddrlist = true; + $defselected = $sel; + } else { + $abortform = true; + list($ebackend, $enick) = explode(':', $sel[0], 2); + $olddata = $abook->lookup($enick, $ebackend); + + /* Display the "new address" form */ + echo addForm($form_url, 'post', '', '', '', '', TRUE). + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + "\n". '' . _("Update address") . '' ."\n", + 'center', $color[0] ) + ), + 'center', '', 'width="100%" ' ); + address_form("editaddr", _("Update address"), $olddata); + echo addHidden('oldnick', $olddata['nickname']). + addHidden('backend', $olddata['backend']). + addHidden('doedit', '1'). + ''; + } + } elseif ($doedit == 1) { + /* Stage two: Write new data */ + $newdata = $editaddr; + $r = $abook->modify($oldnick, $newdata, $backend); + + /* Handle error messages */ + if (!$r) { + /* Display error */ + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + "\n". '' . _("ERROR") . ': ' . htmlspecialchars($abook->error) . '' ."\n", + 'center' ) + ), + 'center', '', 'width="100%"' ); + + /* Display the "new address" form again */ + echo addForm($form_url, 'post', '', '', '', '', TRUE). + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + "\n". '' . _("Update address") . '' ."\n", + 'center', $color[0] ) + ), + 'center', '', 'width="100%"' ); + address_form("editaddr", _("Update address"), $newdata); + echo + addHidden('oldnick', $oldnick). + addHidden('backend', $backend). + addHidden('doedit', '1'). + "\n" . ''; + $abortform = true; + } + } else { + /** + * $editaddr is set, but $sel (address selection in address listing) + * and $doedit (address edit form) are not set. + * Assume that user clicked on "Edit address" without selecting any address. + */ + $formerror = _("Please select address that you want to edit"); + $showaddrlist = true; + } /* end of edit stage detection */ + } /* !empty($editaddr) - Update/modify address */ + } /* (!empty($deladdr)) && sizeof($sel) > 0 - Delete address(es) + or (!empty($compose_to)) && sizeof($sel) > 0 - Compose to address(es) */ + } /* !empty($addaddr['nickname']) - Add new address */ + + // Some times we end output before forms are printed + if($abortform) { + echo "\n"; + exit(); + } +} + + +/* =================================================================== * + * The following is only executed on a GET request, or on a POST when * + * a user is added, or when "delete" or "modify" was successful. * + * =================================================================== */ + +/* Display error messages */ +if (!empty($formerror)) { + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + "\n". '
              ' . _("ERROR") . ': ' . htmlspecialchars($formerror) . '' ."\n", + 'center' ) + ), + 'center', '', 'width="100%"' ); +} + + +/* Display the address management part */ +if ($showaddrlist) { + /* Get and sort address list */ + $alist = $abook->list_addr(); + if(!is_array($alist)) { + $abook->error = htmlspecialchars($abook->error); + plain_error_message($abook->error, $color); + exit; + } + + usort($alist,'alistcmp'); + + // filter listing as needed + $hook_return = do_hook_function('abook_list_filter', $alist); + if (!empty($hook_return)) $alist = $hook_return; + + $prevbackend = -1; + $headerprinted = false; + + $compose_to_in_new_window_javascript = ' onclick="var send_to = \'\'; var f = document.forms.length; var i = 0; var grab_next_hidden = \'\'; while (i < f) { var e = document.forms[i].elements.length; var j = 0; while (j < e) { if (document.forms[i].elements[j].type == \'checkbox\' && document.forms[i].elements[j].checked) { var pos = document.forms[i].elements[j].value.indexOf(\':\'); if (pos >= 1) { grab_next_hidden = document.forms[i].elements[j].value; } } else if (document.forms[i].elements[j].type == \'hidden\' && grab_next_hidden == document.forms[i].elements[j].name) { if (send_to != \'\') { send_to += \', \'; } send_to += document.forms[i].elements[j].value; } j++; } i++; } if (send_to != \'\') { comp_in_new(\''. $base_uri . 'src/compose.php?send_to=\' + send_to); } return false;"'; + + echo html_tag( 'div', '' . _("Add address") . '', 'center' ) . "\n"; + + /* List addresses */ + if (count($alist) > 0) { + echo addForm($form_url, 'post', 'address_book_form', '', '', '', TRUE); + if ($abook->add_extra_field) { + $abook_fields = 6; + } else { + $abook_fields = 5; + } + $count = 0; + while(list($undef,$row) = each($alist)) { + + /* New table header for each backend */ + if($prevbackend != $row['backend']) { + if($prevbackend < 0) { + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + addSubmit(_("Edit selected"), 'editaddr'). + addSubmit(_("Delete selected"), 'deladdr'). + addSubmit(_("Compose to selected"), 'compose_to', + ($javascript_on && $compose_new_win ? $compose_to_in_new_window_javascript : '')), + 'center', '', "colspan=\"$abook_fields\"" ) + ) . + html_tag( 'tr', + html_tag( 'td', ' 
              ', 'center', '', 'colspan="5"' ) + ), + 'center' ); + } + + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', "\n" . '' . $row['source'] . '' . "\n", 'center', $color[0], 'colspan="2"' ) + ). + concat_hook_function('address_book_header', $row), + 'center', '', 'width="95%"' ) ."\n". + html_tag( 'table', '', 'center', '', 'border="0" cellpadding="1" cellspacing="0" width="90%"' ) . + html_tag( 'tr', "\n" . + html_tag( 'th', ' ', 'left', '', 'width="1%"' ) . + html_tag( 'th', _("Nickname") . + show_abook_sort_button($abook_sort_order, _("sort by nickname"), 0, 1), + 'left', '', 'width="10%"' ) . + html_tag( 'th', _("Name") . + show_abook_sort_button($abook_sort_order, _("sort by name"), 2, 3), + 'left', '', 'width="10%"' ) . + html_tag( 'th', _("E-mail"). + show_abook_sort_button($abook_sort_order, _("sort by email"), 4, 5), + 'left', '', 'width="10%"' ) . + html_tag( 'th', _("Info"). + show_abook_sort_button($abook_sort_order, _("sort by info"), 6, 7), + 'left', '', 'width="10%"' ) . + ($abook->add_extra_field ? html_tag( 'th', ' ','left', '', 'width="1%0"'): ''), + '', $color[9] ) . "\n"; + + $line = 0; + $headerprinted = true; + } /* End of header */ + + $prevbackend = $row['backend']; + + /* Print one row, with alternating color */ + if ($line % 2) { + $tr_bgcolor = $color[12]; + } else { + $tr_bgcolor = $color[4]; + } + + // Print special message if that's what we have + // here instead of an actual address entry + if (!empty($row['special_message'])) { + echo html_tag('tr', '', '', $tr_bgcolor) + . html_tag('td', $row['special_message'], 'center', '', 'colspan="5"') + . "\n"; + $line++; + continue; + } + + /* Check if this user is selected */ + $selected = in_array($row['backend'] . ':' . $row['nickname'], $defselected); + + if ($squirrelmail_language == 'ja_JP') { + echo html_tag( 'tr', '', '', $tr_bgcolor); + if ($abook->backends[$row['backend']]->writeable) { + echo html_tag( 'td', + '' . + addCheckBox('sel[' . $count . ']', $selected, $row['backend'].':'.$row['nickname'], ' id="' . $row['backend'] . '_' . urlencode($row['nickname']) . '"'). + '' , + 'center', '', 'valign="top" width="1%"' ); + } else { + echo html_tag( 'td', + ' ' , + 'center', '', 'valign="top" width="1%"' ); + } + echo html_tag( 'td', '  ', 'left', '', 'valign="top" width="10%" nowrap' ) . + html_tag( 'td', '  ', 'left', '', 'valign="top" width="10%" nowrap' ) . + html_tag( 'td', '', 'left', '', 'valign="top" width="10%" nowrap' ) . ' '; + } else { + echo html_tag( 'tr', '', '', $tr_bgcolor); + if ($abook->backends[$row['backend']]->writeable) { + echo html_tag( 'td', + '' . + addCheckBox('sel[' . $count . ']', $selected, $row['backend'] . ':' . $row['nickname'], ' id="' . $row['backend'] . '_' . urlencode($row['nickname']) . '"'). + '' , + 'center', '', 'valign="top" width="1%"' ); + } else { + echo html_tag( 'td', + ' ' , + 'center', '', 'valign="top" width="1%"' ); + } + echo html_tag( 'td', '  ', 'left', '', 'valign="top" width="10%" nowrap' ) . + html_tag( 'td', '  ', 'left', '', 'valign="top" width="10%" nowrap' ) . + html_tag( 'td', '', 'left', '', 'valign="top" width="10%" nowrap' ) . ' '; + } + $email = $abook->full_address($row); + echo addHidden($row['backend'] . ':' . $row['nickname'], rawurlencode($email)) + . makeComposeLink('src/compose.php?send_to='.rawurlencode($email), + htmlspecialchars($row['email'])). + ' '."\n". + html_tag( 'td', '  ', 'left', '', 'valign="top" width="10%"' ); + + // add extra column if third party backend needs it + if ($abook->add_extra_field) { + echo html_tag( 'td', + ' ' . (isset($row['extra']) ? $row['extra'] : '') . ' ', + 'left', '', 'valign="top" width="10%"' ); + } + + echo "\n"; + $line++; + $count++; + } + + /* End of list. Close table. */ + if ($headerprinted) { + echo html_tag( 'tr', + html_tag( 'td', + addSubmit(_("Edit selected"), 'editaddr') . + addSubmit(_("Delete selected"), 'deladdr'). + addSubmit(_("Compose to selected"), 'compose_to', + ($javascript_on && $compose_new_win ? $compose_to_in_new_window_javascript : '')), + 'center', '', "colspan=\"$abook_fields\"" ) + ); + } + echo ''; + } +} /* end of addresslist */ + + +/* Display the "new address" form */ +echo '' . "\n" . + addForm($form_url, 'post', 'f_add', '', '', '', TRUE). + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', "\n". '' . sprintf(_("Add to %s"), $abook->localbackendname) . '' . "\n", + 'center', $color[0] + ) + ) + , 'center', '', 'width="95%"' ) ."\n"; +address_form('addaddr', _("Add address"), $defdata); +echo "\n"; + +/* Add hook for anything that wants on the bottom */ +do_hook('addressbook_bottom'); +?> + diff --git a/ehcp/webmail2/src/compose.php b/ehcp/webmail2/src/compose.php new file mode 100644 index 0000000..81a90f5 --- /dev/null +++ b/ehcp/webmail2/src/compose.php @@ -0,0 +1,1748 @@ + 'send_to', + 'cc' => 'send_to_cc', + 'bcc' => 'send_to_bcc', + 'body' => 'body', + 'subject' => 'subject'); + $mtdata = unserialize($mailtodata); + + foreach ($trtable as $f => $t) { + if ( !empty($mtdata[$f]) ) { + $$t = $mtdata[$f]; + } + } + unset($mailtodata,$mtdata, $trtable); +} + +/* Location (For HTTP 1.1 Header("Location: ...") redirects) */ +$location = get_location(); +/* Identities (fetch only once) */ +$idents = get_identities(); + +/* --------------------- Specific Functions ------------------------------ */ + +function replyAllString($header) { + global $include_self_reply_all, $username, $data_dir; + $excl_ar = array(); + /** + * 1) Remove the addresses we'll be sending the message 'to' + */ + $url_replytoall_avoid_addrs = ''; + if (isset($header->reply_to)) { + $excl_ar = $header->getAddr_a('reply_to'); + } + /** + * 2) Remove our identities from the CC list (they still can be in the + * TO list) only if $include_self_reply_all is turned off + */ + if (!$include_self_reply_all) { + global $idents; + foreach($idents as $id) { + $excl_ar[strtolower(trim($id['email_address']))] = ''; + } + } + + /** + * 3) get the addresses. + */ + $url_replytoall_ar = $header->getAddr_a(array('to','cc'), $excl_ar); + + /** + * 4) generate the string. + */ + $url_replytoallcc = ''; + foreach( $url_replytoall_ar as $email => $personal) { + if ($personal) { + // always quote personal name (can't just quote it if + // it contains a comma separator, since it might still + // be encoded) + $url_replytoallcc .= ", \"$personal\" <$email>"; + } else { + $url_replytoallcc .= ', '. $email; + } + } + $url_replytoallcc = substr($url_replytoallcc,2); + + return $url_replytoallcc; +} + +function getReplyCitation($orig_from, $orig_date) { + global $reply_citation_style, $reply_citation_start, $reply_citation_end; + + // FIXME: why object is rewritten with string. + + if (!is_object($orig_from)) { + $orig_from = ''; + } else { + $orig_from = decodeHeader($orig_from->getAddress(false),false,false,true); + } + + /* First, return an empty string when no citation style selected. */ + if (($reply_citation_style == '') || ($reply_citation_style == 'none')) { + return ''; + } + + /* Make sure our final value isn't an empty string. */ + if ($orig_from == '') { + return ''; + } + + /* Otherwise, try to select the desired citation style. */ + switch ($reply_citation_style) { + case 'author_said': + /** + * To translators: %s is for author's name + */ + $full_reply_citation = sprintf(_("%s wrote:"),$orig_from); + break; + case 'quote_who': + $start = '<' . _("quote") . ' ' . _("who") . '="'; + $end = '">'; + $full_reply_citation = $start . $orig_from . $end; + break; + case 'date_time_author': + /** + * To translators: + * first %s is for date string, second %s is for author's name. Date uses + * formating from "D, F j, Y g:i a" and "D, F j, Y H:i" translations. + * Example string: + * "On Sat, December 24, 2004 23:59, Santa wrote:" + * If you have to put author's name in front of date string, check comments about + * argument swapping at http://www.php.net/sprintf + */ + $full_reply_citation = sprintf(_("On %s, %s wrote:"), getLongDateString($orig_date), $orig_from); + break; + case 'user-defined': + $start = $reply_citation_start . + ($reply_citation_start == '' ? '' : ' '); + $end = $reply_citation_end; + $full_reply_citation = $start . $orig_from . $end; + break; + default: + return ''; + } + + /* Add line feed and return the citation string. */ + return ($full_reply_citation . "\n"); +} + +function getforwardHeader($orig_header) { + global $editor_size; + + $display = array( _("Subject") => strlen(_("Subject")), + _("From") => strlen(_("From")), + _("Date") => strlen(_("Date")), + _("To") => strlen(_("To")), + _("Cc") => strlen(_("Cc")) ); + $maxsize = max($display); + $indent = str_pad('',$maxsize+2); + foreach($display as $key => $val) { + $display[$key] = $key .': '. str_pad('', $maxsize - $val); + } + $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false,true); + $from = str_replace(' ',' ',$from); + $to = decodeHeader($orig_header->getAddr_s('to',"\n$indent"),false,false,true); + $to = str_replace(' ',' ',$to); + $subject = decodeHeader($orig_header->subject,false,false,true); + $subject = str_replace(' ',' ',$subject); + $bodyTop = str_pad(' '._("Original Message").' ',$editor_size -2,'-',STR_PAD_BOTH) . + "\n". $display[_("Subject")] . $subject . "\n" . + $display[_("From")] . $from . "\n" . + $display[_("Date")] . getLongDateString( $orig_header->date, $orig_header->date_unparsed ). "\n" . + $display[_("To")] . $to . "\n"; + if ($orig_header->cc != array() && $orig_header->cc !='') { + $cc = decodeHeader($orig_header->getAddr_s('cc',"\n$indent"),false,false,true); + $cc = str_replace(' ',' ',$cc); + $bodyTop .= $display[_("Cc")] .$cc . "\n"; + } + $bodyTop .= str_pad('', $editor_size -2 , '-') . + "\n\n"; + return $bodyTop; +} +/* ----------------------------------------------------------------------- */ + +/* + * If the session is expired during a post this restores the compose session + * vars. + */ +$session_expired = false; +if (sqsession_is_registered('session_expired_post')) { + sqgetGlobalVar('session_expired_post', $session_expired_post, SQ_SESSION); + /* + * extra check for username so we don't display previous post data from + * another user during this session. + */ + if ($session_expired_post['username'] != $username) { + unset($session_expired_post); + sqsession_unregister('session_expired_post'); + session_write_close(); + } else { + // these are the vars that we can set from the expired composed session + $compo_var_list = array ('send_to', 'send_to_cc', 'body', 'mailbox', + 'startMessage', 'passed_body', 'use_signature', 'signature', + 'attachments', 'subject', 'newmail', 'send_to_bcc', 'passed_id', + 'from_htmladdr_search', 'identity', 'draft_id', 'delete_draft', + 'mailprio', 'edit_as_new', 'request_mdn', 'request_dr', + 'composesession', /* Not used any more: 'compose_messsages', */); + + foreach ($compo_var_list as $var) { + if ( isset($session_expired_post[$var]) && !isset($$var) ) { + $$var = $session_expired_post[$var]; + } + } + + if (!empty($attachments)) + $attachments = unserialize($attachments); + + sqsession_register($composesession,'composesession'); + + if (isset($send)) { + unset($send); + } + $session_expired = true; + } + unset($session_expired_post); + sqsession_unregister('session_expired_post'); + session_write_close(); + if (!isset($mailbox)) { + $mailbox = ''; + } + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } else { + displayPageHeader($color, $mailbox); + } + showInputForm($session, false); + exit(); +} + +if (!isset($composesession)) { + $composesession = 0; + sqsession_register(0,'composesession'); +} else { + $composesession = (int)$composesession; +} + +if (!isset($session) || (isset($newmessage) && $newmessage)) { + sqsession_unregister('composesession'); + $session = "$composesession" +1; + $composesession = $session; + sqsession_register($composesession,'composesession'); +} +if (!empty($compose_messages[$session])) { + $composeMessage = $compose_messages[$session]; +} else { + $composeMessage = new Message(); + $rfc822_header = new Rfc822Header(); + $composeMessage->rfc822_header = $rfc822_header; + $composeMessage->reply_rfc822_header = ''; +} + +// re-add attachments that were already in this message +// FIXME: note that technically this is very bad form - +// should never directly manipulate an object like this +if (!empty($attachments)) { + $attachments = unserialize($attachments); + if (!empty($attachments) && is_array($attachments)) + $composeMessage->entities = $attachments; +} + +if (!isset($mailbox) || $mailbox == '' || ($mailbox == 'None')) { + $mailbox = 'INBOX'; +} + +if ($draft) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + /* + * Set $default_charset to correspond with the user's selection + * of language interface. + */ + set_my_charset(); + if (! deliverMessage($composeMessage, true)) { + showInputForm($session); + exit(); + } else { + $draft_message = _("Draft Email Saved"); + /* If this is a resumed draft, then delete the original */ + if(isset($delete_draft)) { + if ( !isset($pageheader_sent) || !$pageheader_sent ) { + Header("Location: $location/delete_message.php?mailbox=" . urlencode($draft_folder) . + "&message=$delete_draft&sort=$sort&startMessage=1&saved_draft=yes&smtoken=" . sm_generate_security_token()); + } else { + echo '

              " + . _("Return") . '
              '; + } + exit(); + } + else { + if ($compose_new_win == '1') { + if ( !isset($pageheader_sent) || !$pageheader_sent ) { + Header("Location: $location/compose.php?saved_draft=yes&session=$composesession"); + } else { + echo '

              " + . _("Return") . '
              '; + } + exit(); + } + else { + if ( !isset($pageheader_sent) || !$pageheader_sent ) { + Header("Location: $location/right_main.php?mailbox=" . urlencode($draft_folder) . + "&sort=$sort&startMessage=1¬e=".urlencode($draft_message)); + } else { + echo '

              " . _("Return") . '
              '; + } + exit(); + } + } + } +} + +if ($send) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + if (isset($_FILES['attachfile']) && + $_FILES['attachfile']['tmp_name'] && + $_FILES['attachfile']['tmp_name'] != 'none') { + $AttachFailure = saveAttachedFiles($session); + } + if (checkInput(false) && !isset($AttachFailure)) { + if ($mailbox == "All Folders") { + /* We entered compose via the search results page */ + $mailbox = 'INBOX'; /* Send 'em to INBOX, that's safe enough */ + } + $urlMailbox = urlencode($mailbox); + if (! isset($passed_id)) { + $passed_id = 0; + } + /** + * Set $default_charset to correspond with the user's selection + * of language interface. + */ + set_my_charset(); + /** + * This is to change all newlines to \n + * We'll change them to \r\n later (in the sendMessage function) + */ + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\r", "\n", $body); + + /** + * Rewrap $body so that no line is bigger than $editor_size + * This should only really kick in the sqWordWrap function + * if the browser doesn't support "VIRTUAL" as the wrap type. + */ + $body = explode("\n", $body); + $newBody = ''; + foreach ($body as $line) { + if( $line <> '-- ' ) { + $line = rtrim($line); + } + if (sq_strlen($line, $default_charset) <= $editor_size + 1) { + $newBody .= $line . "\n"; + } else { + sqWordWrap($line, $editor_size, $default_charset); + $newBody .= $line . "\n"; + + } + + } + $body = $newBody; + + $Result = deliverMessage($composeMessage); + do_hook('compose_send_after', $Result, $composeMessage); + if (! $Result) { + showInputForm($session); + exit(); + } + + /* if it is resumed draft, delete draft message */ + if ( isset($delete_draft)) { + Header("Location: $location/delete_message.php?mailbox=" . urlencode( $draft_folder ). + "&message=$delete_draft&sort=$sort&startMessage=1&mail_sent=yes&smtoken=" . sm_generate_security_token()); + exit(); + } + if ($compose_new_win == '1') { + + Header("Location: $location/compose.php?mail_sent=yes"); + } + else { + Header("Location: $location/right_main.php?mailbox=$urlMailbox&sort=$sort". + "&startMessage=$startMessage"); + } + } else { + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } + else { + displayPageHeader($color, $mailbox); + } + if (isset($AttachFailure)) { + plain_error_message(_("Could not move/copy file. File not attached"), + $color); + } + checkInput(true); + showInputForm($session); + /* sqimap_logout($imapConnection); */ + } +} elseif (isset($html_addr_search_done)) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } + else { + displayPageHeader($color, $mailbox); + } + + if (isset($send_to_search) && is_array($send_to_search)) { + foreach ($send_to_search as $k => $v) { + if (substr($k, 0, 1) == 'T') { + if ($send_to) { + $send_to .= ', '; + } + $send_to .= $v; + } + elseif (substr($k, 0, 1) == 'C') { + if ($send_to_cc) { + $send_to_cc .= ', '; + } + $send_to_cc .= $v; + } + elseif (substr($k, 0, 1) == 'B') { + if ($send_to_bcc) { + $send_to_bcc .= ', '; + } + $send_to_bcc .= $v; + } + } + } + showInputForm($session); +} elseif (isset($html_addr_search)) { + if (isset($_FILES['attachfile']) && + $_FILES['attachfile']['tmp_name'] && + $_FILES['attachfile']['tmp_name'] != 'none') { + if(saveAttachedFiles($session)) { + plain_error_message(_("Could not move/copy file. File not attached"), $color); + } + } + /* + * I am using an include so as to elminiate an extra unnecessary + * click. If you can think of a better way, please implement it. + */ + include_once('./addrbook_search_html.php'); +} elseif (isset($attach)) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + if (saveAttachedFiles($session)) { + plain_error_message(_("Could not move/copy file. File not attached"), $color); + } + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } else { + displayPageHeader($color, $mailbox); + } + showInputForm($session); +} +elseif (isset($sigappend)) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + $signature = $idents[$identity]['signature']; + + $body .= "\n\n".($prefix_sig==true? "-- \n":'').$signature; + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } else { + displayPageHeader($color, $mailbox); + } + showInputForm($session); +} elseif (isset($do_delete)) { + + // validate security token + // + sm_validate_security_token($submitted_token, 3600, TRUE); + + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } else { + displayPageHeader($color, $mailbox); + } + + if (isset($delete) && is_array($delete)) { + foreach($delete as $index) { + if (!empty($composeMessage->entities) && isset($composeMessage->entities[$index])) { + $composeMessage->entities[$index]->purgeAttachments(); + // FIXME: one person reported that unset() didn't do anything at all here, so this is a work-around... but it triggers PHP notices if the unset() doesn't work, which should be fixed... but bigger question is if unset() doesn't work here, what about everywhere else? Anyway, uncomment this if you think you need it + //$composeMessage->entities[$index] = NULL; + unset ($composeMessage->entities[$index]); + } + } + $new_entities = array(); + foreach ($composeMessage->entities as $entity) { + $new_entities[] = $entity; + } + $composeMessage->entities = $new_entities; + } + showInputForm($session); +} else { + /* + * This handles the default case as well as the error case + * (they had the same code) --> if (isset($smtpErrors)) + */ + + if ($compose_new_win == '1') { + compose_Header($color, $mailbox); + } else { + displayPageHeader($color, $mailbox); + } + + $newmail = true; + + if (!isset($passed_ent_id)) { + $passed_ent_id = ''; + } + if (!isset($passed_id)) { + $passed_id = ''; + } + if (!isset($mailbox)) { + $mailbox = ''; + } + if (!isset($action)) { + $action = ''; + } + + $values = newMail($mailbox,$passed_id,$passed_ent_id, $action, $session); + + // forward as attachment - subject is in the message in session + // + if (sqgetGlobalVar('forward_as_attachment_init', $forward_as_attachment_init, SQ_GET) + && $forward_as_attachment_init) + $subject = $composeMessage->rfc822_header->subject; + + /* in case the origin is not read_body.php */ + if (isset($send_to)) { + $values['send_to'] = $send_to; + } + if (isset($send_to_cc)) { + $values['send_to_cc'] = $send_to_cc; + } + if (isset($send_to_bcc)) { + $values['send_to_bcc'] = $send_to_bcc; + } + if (isset($subject)) { + $values['subject'] = $subject; + } + showInputForm($session, $values); +} + +exit(); + +/**************** Only function definitions go below *************/ + + +/* This function is used when not sending or adding attachments */ +function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $session='') { + global $editor_size, $default_use_priority, $body, $idents, + $use_signature, $composesession, $data_dir, $username, + $username, $key, $imapServerAddress, $imapPort, + $composeMessage, $body_quote, $strip_sigs; + global $languages, $squirrelmail_language, $default_charset; + + /* + * Set $default_charset to correspond with the user's selection + * of language interface. $default_charset global is not correct, + * if message is composed in new window. + */ + set_my_charset(); + + $send_to = $send_to_cc = $send_to_bcc = $subject = $identity = ''; + $mailprio = 3; + + if ($passed_id) { + $imapConnection = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 0); + + sqimap_mailbox_select($imapConnection, $mailbox); + $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); + + $body = ''; + if ($passed_ent_id) { + /* redefine the messsage in case of message/rfc822 */ + $message = $message->getEntity($passed_ent_id); + /* message is an entity which contains the envelope and type0=message + * and type1=rfc822. The actual entities are childs from + * $message->entities[0]. That's where the encoding and is located + */ + + $entities = $message->entities[0]->findDisplayEntity + (array(), $alt_order = array('text/plain')); + if (!count($entities)) { + $entities = $message->entities[0]->findDisplayEntity + (array(), $alt_order = array('text/plain','text/html')); + } + $orig_header = $message->rfc822_header; /* here is the envelope located */ + /* redefine the message for picking up the attachments */ + $message = $message->entities[0]; + + } else { + $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain')); + if (!count($entities)) { + $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain','text/html')); + } + $orig_header = $message->rfc822_header; + } + + $encoding = $message->header->encoding; + $type0 = $message->type0; + $type1 = $message->type1; + foreach ($entities as $ent) { + $unencoded_bodypart = mime_fetch_body($imapConnection, $passed_id, $ent); + $body_part_entity = $message->getEntity($ent); + $bodypart = decodeBody($unencoded_bodypart, + $body_part_entity->header->encoding); + if ($type1 == 'html') { + $bodypart = str_replace("\n", ' ', $bodypart); + $bodypart = preg_replace(array('/

              /i','//i'), "\n", $bodypart); + $bodypart = str_replace(array(' ','>','<'),array(' ','>','<'),$bodypart); + $bodypart = strip_tags($bodypart); + } + if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && + function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { + if (mb_detect_encoding($bodypart) != 'ASCII') { + $bodypart = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $bodypart); + } + } + + // charset encoding in compose form stuff + if (isset($body_part_entity->header->parameters['charset'])) { + $actual = $body_part_entity->header->parameters['charset']; + } else { + $actual = 'us-ascii'; + } + + if ( $actual && is_conversion_safe($actual) && $actual != $default_charset){ + $bodypart = charset_convert($actual,$bodypart,$default_charset,false); + } + // end of charset encoding in compose + + $body .= $bodypart; + } + if ($default_use_priority) { + $mailprio = substr($orig_header->priority,0,1); + if (!$mailprio) { + $mailprio = 3; + } + } else { + $mailprio = ''; + } + + $identity = ''; + $from_o = $orig_header->from; + if (is_array($from_o)) { + if (isset($from_o[0])) { + $from_o = $from_o[0]; + } + } + if (is_object($from_o)) { + $orig_from = $from_o->getAddress(); + } else { + $orig_from = ''; + } + + $identities = array(); + if (count($idents) > 1) { + foreach($idents as $nr=>$data) { + $enc_from_name = '"'.$data['full_name'].'" <'. $data['email_address'].'>'; + if(strtolower($enc_from_name) == strtolower($orig_from)) { + $identity = $nr; + // don't stop! need to build $identities array for idents match below + //break; + } + $identities[] = $enc_from_name; + } + + $identity_match = $orig_header->findAddress($identities); + if ($identity_match) { + $identity = $identity_match; + } + } + + switch ($action) { + case ('draft'): + $use_signature = FALSE; + $composeMessage->rfc822_header = $orig_header; + $send_to = decodeHeader($orig_header->getAddr_s('to'),false,false,true); + $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,false,true); + $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,false,true); + // FIXME: ident support? + $subject = decodeHeader($orig_header->subject,false,false,true); + /* remember the references and in-reply-to headers in case of an reply */ + $composeMessage->rfc822_header->more_headers['References'] = $orig_header->references; + $composeMessage->rfc822_header->more_headers['In-Reply-To'] = $orig_header->in_reply_to; + $body_ary = explode("\n", $body); + $cnt = count($body_ary) ; + $body = ''; + for ($i=0; $i < $cnt; $i++) { + if (!preg_match('/^[>\s]*$/', $body_ary[$i]) || !$body_ary[$i]) { + sqWordWrap($body_ary[$i], $editor_size, $default_charset ); + $body .= $body_ary[$i] . "\n"; + } + unset($body_ary[$i]); + } + sqUnWordWrap($body); + $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); + break; + case ('edit_as_new'): + $send_to = decodeHeader($orig_header->getAddr_s('to'),false,false,true); + $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,false,true); + $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,false,true); + $subject = decodeHeader($orig_header->subject,false,false,true); + $mailprio = $orig_header->priority; + $orig_from = ''; + $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); + sqUnWordWrap($body); + break; + case ('forward'): + $send_to = ''; + $subject = decodeHeader($orig_header->subject,false,false,true); + if ((substr(strtolower($subject), 0, 4) != 'fwd:') && + (substr(strtolower($subject), 0, 5) != '[fwd:') && + (substr(strtolower($subject), 0, 6) != '[ fwd:')) { + $subject = '[Fwd: ' . $subject . ']'; + } + $body = getforwardHeader($orig_header) . $body; + $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); + $body = "\n" . $body; + break; + case ('forward_as_attachment'): + $subject = decodeHeader($orig_header->subject,false,false,true); + $subject = trim($subject); + if (substr(strtolower($subject), 0, 4) != 'fwd:') { + $subject = 'Fwd: ' . $subject; + } + $composeMessage = getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, $passed_ent_id, $imapConnection); + $body = ''; + break; + case ('reply_all'): + if(isset($orig_header->mail_followup_to) && $orig_header->mail_followup_to) { + $send_to = $orig_header->getAddr_s('mail_followup_to'); + } else { + $send_to_cc = replyAllString($orig_header); + $send_to_cc = decodeHeader($send_to_cc,false,false,true); + $send_to_cc = str_replace('""', '"', $send_to_cc); + } + case ('reply'): + if (!$send_to) { + $send_to = $orig_header->reply_to; + if (is_array($send_to) && count($send_to)) { + $send_to = $orig_header->getAddr_s('reply_to', ',', FALSE, TRUE); + } else if (is_object($send_to)) { /* unneccesarry, just for failsafe purpose */ + $send_to = $orig_header->getAddr_s('reply_to', ',', FALSE, TRUE); + } else { + $send_to = $orig_header->getAddr_s('from', ',', FALSE, TRUE); + } + } + $send_to = decodeHeader($send_to,false,false,true); + $send_to = str_replace('""', '"', $send_to); + $subject = decodeHeader($orig_header->subject,false,false,true); + $subject = trim($subject); + if (substr(strtolower($subject), 0, 3) != 're:') { + $subject = 'Re: ' . $subject; + } + /* this corrects some wrapping/quoting problems on replies */ + $rewrap_body = explode("\n", $body); + $from = (is_array($orig_header->from) && !empty($orig_header->from)) ? $orig_header->from[0] : $orig_header->from; + sqUnWordWrap($body); + $body = ''; + $cnt = count($rewrap_body); + for ($i=0;$i<$cnt;$i++) { + if ($strip_sigs && $rewrap_body[$i] == '-- ') { + break; + } + sqWordWrap($rewrap_body[$i], $editor_size, $default_charset); + if (preg_match("/^(>+)/", $rewrap_body[$i], $matches)) { + $gt = $matches[1]; + $body .= $body_quote . str_replace("\n", "\n" . $body_quote + . "$gt ", rtrim($rewrap_body[$i])) ."\n"; + } else { + $body .= $body_quote . (!empty($body_quote) ? ' ' : '') . str_replace("\n", "\n" . $body_quote . (!empty($body_quote) ? ' ' : ''), rtrim($rewrap_body[$i])) . "\n"; + } + unset($rewrap_body[$i]); + } + $body = getReplyCitation($from , $orig_header->date) . $body; + $composeMessage->reply_rfc822_header = $orig_header; + + break; + default: + break; + } + session_write_close(); + sqimap_logout($imapConnection); + } + $ret = array( 'send_to' => $send_to, + 'send_to_cc' => $send_to_cc, + 'send_to_bcc' => $send_to_bcc, + 'subject' => $subject, + 'mailprio' => $mailprio, + 'body' => $body, + 'identity' => $identity ); + + return ($ret); +} /* function newMail() */ + +function getAttachments($message, &$composeMessage, $passed_id, $entities, $imapConnection) { + global $attachment_dir, $username, $data_dir, $squirrelmail_language, $languages; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + if (!count($message->entities) || + ($message->type0 == 'message' && $message->type1 == 'rfc822')) { + if ( !in_array($message->entity_id, $entities) && $message->entity_id) { + switch ($message->type0) { + case 'message': + if ($message->type1 == 'rfc822') { + $filename = $message->rfc822_header->subject; + if ($filename == "") { + $filename = "untitled-".$message->entity_id; + } + $filename .= '.msg'; + } else { + $filename = $message->getFilename(); + } + break; + default: + if (!$message->mime_header) { /* temporary hack */ + $message->mime_header = $message->header; + } + $filename = $message->getFilename(); + break; + } + + $filename = decodeHeader($filename, false, false, true); + if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && + function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { + $filename = $languages[$squirrelmail_language]['XTRA_CODE']('encode', $filename); + } + $localfilename = GenerateRandomString(32, '', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + while (file_exists($full_localfilename)) { + $localfilename = GenerateRandomString(32, '', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + } + $fp = fopen ("$hashed_attachment_dir/$localfilename", 'wb'); + + $message->att_local_name = $localfilename; + + $composeMessage->initAttachment($message->type0.'/'.$message->type1,$filename, + $localfilename); + + /* Write Attachment to file + The function mime_print_body_lines writes directly to the + provided resource $fp. That prohibits large memory consumption in + case of forwarding mail with large attachments. + */ + mime_print_body_lines ($imapConnection, $passed_id, $message->entity_id, $message->header->encoding, $fp); + fclose ($fp); + } + } else { + for ($i=0, $entCount=count($message->entities); $i<$entCount;$i++) { + $composeMessage=getAttachments($message->entities[$i], $composeMessage, $passed_id, $entities, $imapConnection); + } + } + return $composeMessage; +} + +function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, + $passed_ent_id='', $imapConnection) { + global $attachment_dir, $username, $data_dir, $uid_support; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + if (!$passed_ent_id) { + $body_a = sqimap_run_command($imapConnection, + 'FETCH '.$passed_id.' RFC822', + TRUE, $response, $readmessage, + $uid_support); + } else { + $body_a = sqimap_run_command($imapConnection, + 'FETCH '.$passed_id.' BODY['.$passed_ent_id.']', + TRUE, $response, $readmessage, $uid_support); + $message = $message->parent; + } + if ($response == 'OK') { + $subject = encodeHeader($message->rfc822_header->subject); + array_shift($body_a); + array_pop($body_a); + $body = implode('', $body_a) . "\r\n"; + + $localfilename = GenerateRandomString(32, 'FILE', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + + $fp = fopen($full_localfilename, 'w'); + fwrite ($fp, $body); + fclose($fp); + $composeMessage->initAttachment('message/rfc822',$subject.'.msg', + $localfilename); + } + return $composeMessage; +} + +function showInputForm ($session, $values=false) { + global $send_to, $send_to_cc, $body, $startMessage, $attachments, + $session_expired, + $passed_body, $color, $use_signature, $signature, $prefix_sig, + $editor_size, $editor_height, $subject, $newmail, + $use_javascript_addr_book, $send_to_bcc, $passed_id, $mailbox, + $from_htmladdr_search, $location_of_buttons, $attachment_dir, + $username, $data_dir, $identity, $idents, $draft_id, $delete_draft, + $mailprio, $default_use_mdn, $mdn_user_support, $compose_new_win, + $saved_draft, $mail_sent, $sig_first, $edit_as_new, $action, + $username, $composesession, $default_charset, $composeMessage, + $javascript_on, $compose_onsubmit; + + if ($javascript_on) + $onfocus = ' onfocus="alreadyFocused=true;"'; + else + $onfocus = ''; + + if ($values) { + $send_to = $values['send_to']; + $send_to_cc = $values['send_to_cc']; + $send_to_bcc = $values['send_to_bcc']; + $subject = $values['subject']; + $mailprio = $values['mailprio']; + $body = $values['body']; + $identity = (int) $values['identity']; + } else { + $send_to = decodeHeader($send_to, true, false); + $send_to_cc = decodeHeader($send_to_cc, true, false); + $send_to_bcc = decodeHeader($send_to_bcc, true, false); + } + + if ($use_javascript_addr_book) { + echo "\n". '\n\n"; + } + + echo "\n" . '

              \n"; + + echo addHidden('smtoken', sm_generate_security_token()); + echo addHidden('startMessage', $startMessage); + + if ($action == 'draft') { + echo addHidden('delete_draft', $passed_id); + } + if (isset($delete_draft)) { + echo addHidden('delete_draft', $delete_draft); + } + if (isset($session)) { + echo addHidden('session', $session); + } + + if (isset($passed_id)) { + echo addHidden('passed_id', $passed_id); + } + + if ($saved_draft == 'yes') { + echo '
              '. _("Your draft has been saved.").'
              '; + } + if ($mail_sent == 'yes') { + echo '
              '. _("Your mail has been sent.").'
              '; + } + if ($compose_new_win == '1') { + echo ''."\n" . + ' '.html_tag( 'td', '', 'right' ). + ''."\n"; + } else { + echo '
              ' . "\n"; + } + if ($location_of_buttons == 'top') { + showComposeButtonRow(); + } + + /* display select list for identities */ + if (count($idents) > 1) { + echo ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . + _("From:") . '' . "\n" . + html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + } + + echo ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . + _("To:") . '' . "\n" . + html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . + substr(addInput('send_to', $send_to, 60), 0, -3). $onfocus . ' />
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4] ) . + _("Cc:") . '' . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + substr(addInput('send_to_cc', $send_to_cc, 60), 0, -3). $onfocus . ' />
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4] ) . + _("Bcc:") . '' . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . + substr(addInput('send_to_bcc', $send_to_bcc, 60), 0, -3). $onfocus . ' />
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4] ) . + _("Subject:") . '' . "\n" . + html_tag( 'td', '', 'left', $color[4] ) . "\n"; + echo ' '.substr(addInput('subject', $subject, 60), 0, -3). $onfocus . + ' /> ' . "\n" . + ' ' . "\n\n"; + + if ($location_of_buttons == 'between') { + showComposeButtonRow(); + } + + /* why this distinction? */ + if ($compose_new_win == '1') { + echo ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + + + if ($location_of_buttons == 'bottom') { + showComposeButtonRow(); + } else { + echo ' ' . "\n" . + html_tag( 'td', '', 'right', '', 'colspan="2"' ) . "\n" . + ' ' . addSubmit(_("Send"), 'send'). + '     

              ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + } + + // composeMessage can be empty when coming from a restored session + if (is_object($composeMessage) && $composeMessage->entities) + $attach_array = $composeMessage->entities; + if ($session_expired && !empty($attachments) && is_array($attachments)) + $attach_array = $attachments; + + /* This code is for attachments */ + if ((bool) ini_get('file_uploads')) { + + /* Calculate the max size for an uploaded file. + * This is advisory for the user because we can't actually prevent + * people to upload too large files. */ + $sizes = array(); + /* php.ini vars which influence the max for uploads */ + $configvars = array('post_max_size', 'memory_limit', 'upload_max_filesize'); + foreach($configvars as $var) { + /* skip 0 or empty values, and -1 which means 'unlimited' */ + if( $size = getByteSize(ini_get($var)) ) { + if ( $size != '-1' ) { + $sizes[] = $size; + } + } + } + + if(count($sizes) > 0) { + $maxsize_text = '(max. ' . show_readable_size( min( $sizes ) ) . ')'; + $maxsize_input = addHidden('MAX_FILE_SIZE', min( $sizes )); + } else { + $maxsize_text = $maxsize_input = ''; + } + echo ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + '
              ' . "\n" . + '
              ' . "\n" . + '
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . html_tag( 'td', '', 'left', $color[0], 'colspan="2"' ) . $s .''; + } + echo ''; + } + echo '
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + html_tag( 'td', '', 'right', '', 'valign="middle"' ) . + _("Attach:") . '' . "\n" . + html_tag( 'td', '', 'left', '', 'valign="middle"' ) . + $maxsize_input . + ' ' . "\n" . + '   ' . "\n" . + $maxsize_text . + ' ' . "\n" . + ' ' . "\n"; + + $s_a = array(); + global $username, $attachment_dir; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + if (!empty($attach_array)) { + foreach ($attach_array as $key => $attachment) { + $attached_file = $attachment->att_local_name; + if ($attachment->att_local_name || $attachment->body_part) { + $attached_filename = decodeHeader($attachment->mime_header->getParameter('name')); + $type = $attachment->mime_header->type0.'/'. + $attachment->mime_header->type1; + + $s_a[] = '
              '. + addCheckBox('delete[]', FALSE, $key). + "\n" . $attached_filename . + '- ' . $type . '('. + show_readable_size( filesize( $hashed_attachment_dir . '/' . $attached_file ) ) . + ')
              '."\n"; + } + } + } + if (count($s_a)) { + foreach ($s_a as $s) { + echo '
              \n" . + '
              ' . "\n" . + '
              ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + } // End of file_uploads if-block + /* End of attachment code */ + echo '' . "\n" . + addHidden('username', $username). + addHidden('smaction', $action). + addHidden('mailbox', $mailbox); + sqgetGlobalVar('QUERY_STRING', $queryString, SQ_SERVER); + /* + store the complete ComposeMessages array in a hidden input value + so we can restore them in case of a session timeout. + */ + echo addHidden('composesession', $composesession). + addHidden('querystring', $queryString). + (!empty($attach_array) ? + addHidden('attachments', serialize($attach_array)) : ''). + "
              \n"; + if (!(bool) ini_get('file_uploads')) { + /* File uploads are off, so we didn't show that part of the form. + To avoid bogus bug reports, tell the user why. */ + echo '

              ' + . _("Because PHP file uploads are turned off, you can not attach files to this message. Please see your system administrator for details.") + . "

              \r\n"; + } + + do_hook('compose_bottom'); + echo '' . "\n"; +} + + +function showComposeButtonRow() { + global $use_javascript_addr_book, $save_as_draft, + $default_use_priority, $mailprio, $default_use_mdn, + $request_mdn, $request_dr, + $data_dir, $username; + + echo ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + if ($default_use_priority) { + if(!isset($mailprio)) { + $mailprio = '3'; + } + echo ' ' . _("Priority") . + addSelect('mailprio', array( + '1' => _("High"), + '3' => _("Normal"), + '5' => _("Low") ), $mailprio, TRUE); + } + $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn); + if ($default_use_mdn) { + if ($mdn_user_support) { + echo ' ' . _("Receipt") .': '. + addCheckBox('request_mdn', $request_mdn == '1', '1', 'id="request_mdn"') . '' . + addCheckBox('request_dr', $request_dr == '1', '1', 'id="request_dr"') . ''; + } + } + + echo ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + if ($use_javascript_addr_book) { + echo " \n"; + } else { + echo ' ' . "\n"; + } + + if ($save_as_draft) { + echo ' \n"; + } + + echo ' ' . "\n"; + do_hook('compose_button_row'); + + echo ' ' . "\n" . + ' ' . "\n\n"; +} + +function checkInput ($show) { + /* + * I implemented the $show variable because the error messages + * were getting sent before the page header. So, I check once + * using $show=false, and then when i'm ready to display the error + * message, show=true + */ + global $body, $send_to, $send_to_cc, $send_to_bcc, $subject, $color; + + $send_to = trim($send_to); + $send_to_cc = trim($send_to_cc); + $send_to_bcc = trim($send_to_bcc); + if (empty($send_to) && empty($send_to_cc) && empty($send_to_bcc)) { + if ($show) { + plain_error_message(_("You have not filled in the \"To:\" field."), $color); + } + return false; + } + return true; +} /* function checkInput() */ + + +/* True if FAILURE */ +function saveAttachedFiles($session) { + global $_FILES, $attachment_dir, $username, + $data_dir, $composeMessage; + + /* get out of here if no file was attached at all */ + if (! is_uploaded_file($_FILES['attachfile']['tmp_name']) ) { + return true; + } + + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + $localfilename = GenerateRandomString(32, '', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + while (file_exists($full_localfilename)) { + $localfilename = GenerateRandomString(32, '', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + } + + // FIXME: we SHOULD prefer move_uploaded_file over rename because + // m_u_f works better with restricted PHP installs (safe_mode, open_basedir) + if (!@rename($_FILES['attachfile']['tmp_name'], $full_localfilename)) { + if (!@move_uploaded_file($_FILES['attachfile']['tmp_name'],$full_localfilename)) { + return true; + } + } + $type = strtolower($_FILES['attachfile']['type']); + $name = $_FILES['attachfile']['name']; + $composeMessage->initAttachment($type, $name, $localfilename); +} + +/* parse values like 8M and 2k into bytes */ +function getByteSize($ini_size) { + + if(!$ini_size) { + return FALSE; + } + + $ini_size = trim($ini_size); + + // if there's some kind of letter at the end of the string we need to multiply. + if(!is_numeric(substr($ini_size, -1))) { + + switch(strtoupper(substr($ini_size, -1))) { + case 'G': + $bytesize = 1073741824; + break; + case 'M': + $bytesize = 1048576; + break; + case 'K': + $bytesize = 1024; + break; + } + + return ($bytesize * (int)substr($ini_size, 0, -1)); + } + + return $ini_size; +} + + +/** + * temporary function to make use of the deliver class. + * In the future the responsible backend should be automaticly loaded + * and conf.pl should show a list of available backends. + * The message also should be constructed by the message class. + * + * @param object $composeMessage The message being sent. Please note + * that it is passed by reference and + * will be returned modified, with additional + * headers, such as Message-ID, Date, In-Reply-To, + * References, and so forth. + * + * @return boolean FALSE if delivery failed, or some non-FALSE value + * upon success. + * + */ +function deliverMessage(&$composeMessage, $draft=false) { + global $send_to, $send_to_cc, $send_to_bcc, $mailprio, $subject, $body, + $username, $popuser, $usernamedata, $identity, $idents, $data_dir, + $request_mdn, $request_dr, $default_charset, $color, $useSendmail, + $domain, $action, $default_move_to_sent, $move_to_sent; + global $imapServerAddress, $imapPort, $sent_folder, $key; + + $rfc822_header = $composeMessage->rfc822_header; + + $abook = addressbook_init(false, true); + $rfc822_header->to = $rfc822_header->parseAddress($send_to,true, array(), '', $domain, array(&$abook,'lookup')); + $rfc822_header->cc = $rfc822_header->parseAddress($send_to_cc,true,array(), '',$domain, array(&$abook,'lookup')); + $rfc822_header->bcc = $rfc822_header->parseAddress($send_to_bcc,true, array(), '',$domain, array(&$abook,'lookup')); + $rfc822_header->priority = $mailprio; + $rfc822_header->subject = $subject; + + $special_encoding=''; + if (strtolower($default_charset) == 'iso-2022-jp') { + if (mb_detect_encoding($body) == 'ASCII') { + $special_encoding = '8bit'; + } else { + $body = mb_convert_encoding($body, 'JIS'); + $special_encoding = '7bit'; + } + } + $composeMessage->setBody($body); + + if (preg_match('|^([^@%/]+)[@%/](.+)$|', $username, $usernamedata)) { + $popuser = $usernamedata[1]; + $domain = $usernamedata[2]; + unset($usernamedata); + } else { + $popuser = $username; + } + $reply_to = ''; + $from_mail = $idents[$identity]['email_address']; + $full_name = $idents[$identity]['full_name']; + $reply_to = $idents[$identity]['reply_to']; + if (!$from_mail) { + $from_mail = "$popuser@$domain"; + } + $rfc822_header->from = $rfc822_header->parseAddress($from_mail,true); + if (!$rfc822_header->from[0]->host) $rfc822_header->from[0]->host = $domain; + if ($full_name) { + $from = $rfc822_header->from[0]; + $full_name_encoded = encodeHeader('"' . $full_name . '"'); + if ($full_name_encoded != $full_name) { + $from_addr = $full_name_encoded .' <'.$from->mailbox.'@'.$from->host.'>'; + } else { + $from_addr = '"'.$full_name .'" <'.$from->mailbox.'@'.$from->host.'>'; + } + $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true); + } + if ($reply_to) { + $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true); + } + /* Receipt: On Read */ + if (isset($request_mdn) && $request_mdn) { + $rfc822_header->dnt = $rfc822_header->parseAddress($from_mail,true); + } + + /* Receipt: On Delivery */ + if (isset($request_dr) && $request_dr) { + $rfc822_header->more_headers['Return-Receipt-To'] = $from_mail; + } + + /* multipart messages */ + if (count($composeMessage->entities)) { + $message_body = new Message(); + $message_body->body_part = $composeMessage->body_part; + $composeMessage->body_part = ''; + $mime_header = new MessageHeader; + $mime_header->type0 = 'text'; + $mime_header->type1 = 'plain'; + if ($special_encoding) { + $mime_header->encoding = $special_encoding; + } else { + $mime_header->encoding = '8bit'; + } + if ($default_charset) { + $mime_header->parameters['charset'] = $default_charset; + } + $message_body->mime_header = $mime_header; + array_unshift($composeMessage->entities, $message_body); + $content_type = new ContentType('multipart/mixed'); + } else { + $content_type = new ContentType('text/plain'); + if ($special_encoding) { + $rfc822_header->encoding = $special_encoding; + } else { + $rfc822_header->encoding = '8bit'; + } + if ($default_charset) { + $content_type->properties['charset']=$default_charset; + } + } + + $rfc822_header->content_type = $content_type; + $composeMessage->rfc822_header = $rfc822_header; + if ($action == 'reply' || $action == 'reply_all') { + global $passed_id, $passed_ent_id; + $reply_id = $passed_id; + $reply_ent_id = $passed_ent_id; + } else { + $reply_id = ''; + $reply_ent_id = ''; + } + + /* Here you can modify the message structure just before we hand + it over to deliver */ + $hookReturn = do_hook('compose_send', $composeMessage); + /* Get any changes made by plugins to $composeMessage. */ + if ( is_object($hookReturn[1]) ) { + $composeMessage = $hookReturn[1]; + } + + if (!$useSendmail && !$draft) { + require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); + $deliver = new Deliver_SMTP(); + global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host; + + $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false; + + $user = ''; + $pass = ''; + if (empty($pop_before_smtp_host)) + $pop_before_smtp_host = $smtpServerAddress; + + get_smtp_user($user, $pass); + + $stream = $deliver->initStream($composeMessage,$domain,0, + $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); + } elseif (!$draft) { + require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php'); + global $sendmail_path, $sendmail_args; + // Check for outdated configuration + if (!isset($sendmail_args)) { + if ($sendmail_path=='/var/qmail/bin/qmail-inject') { + $sendmail_args = ''; + } else { + $sendmail_args = '-i -t'; + } + } + $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args)); + $stream = $deliver->initStream($composeMessage,$sendmail_path); + } elseif ($draft) { + global $draft_folder; + $imap_stream = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 0); + if (sqimap_mailbox_exists ($imap_stream, $draft_folder)) { + require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); + $imap_deliver = new Deliver_IMAP(); + $succes = $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id, $imap_stream, $draft_folder); + sqimap_logout($imap_stream); + unset ($imap_deliver); + $composeMessage->purgeAttachments(); + return $succes; + } else { + $msg = '
              '.sprintf(_("Error: Draft folder %s does not exist."), + htmlspecialchars($draft_folder)); + plain_error_message($msg, $color); + return false; + } + } + $succes = false; + if ($stream) { + $deliver->mail($composeMessage, $stream, $reply_id, $reply_ent_id); + $succes = $deliver->finalizeStream($stream); + } + if (!$succes) { + $msg = _("Message not sent.") .' '. _("Server replied:") . + "\n
              \n" . $deliver->dlv_msg . '
              ' . + $deliver->dlv_ret_nr . ' ' . + $deliver->dlv_server_msg . "
              \n\n"; + plain_error_message($msg, $color); + } else { + unset ($deliver); + $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + + + // mark original message as having been replied to if applicable + global $passed_id, $mailbox, $action; + if ($action == 'reply' || $action == 'reply_all') { + sqimap_mailbox_select ($imap_stream, $mailbox); + sqimap_messages_flag ($imap_stream, $passed_id, $passed_id, 'Answered', false); + } + + + // copy message to sent folder + $move_to_sent = getPref($data_dir,$username,'move_to_sent'); + if (isset($default_move_to_sent) && ($default_move_to_sent != 0)) { + $svr_allow_sent = true; + } else { + $svr_allow_sent = false; + } + + if (isset($sent_folder) && (($sent_folder != '') || ($sent_folder != 'none')) + && sqimap_mailbox_exists( $imap_stream, $sent_folder)) { + $fld_sent = true; + } else { + $fld_sent = false; + } + + if ((isset($move_to_sent) && ($move_to_sent != 0)) || (!isset($move_to_sent))) { + $lcl_allow_sent = true; + } else { + $lcl_allow_sent = false; + } + + if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) { + require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); + $imap_deliver = new Deliver_IMAP(); + $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id, $imap_stream, $sent_folder); + unset ($imap_deliver); + } + $composeMessage->purgeAttachments(); + sqimap_logout($imap_stream); + } + return $succes; +} + diff --git a/ehcp/webmail2/src/configtest.php b/ehcp/webmail2/src/configtest.php new file mode 100644 index 0000000..7fc0af1 --- /dev/null +++ b/ehcp/webmail2/src/configtest.php @@ -0,0 +1,606 @@ +'.$IND.'ERROR: ' .$str. "

              \n"; + if($exit) { + echo ''; + exit; + } +} + +ob_implicit_flush(); +/** This is the configtest page */ +define('PAGE_NAME', 'configtest'); + +/** @ignore */ +define('SM_PATH', '../'); + +/* + * Load config before output begins. + * functions/global.php cleans environment, then loads + * functions/strings.php and config/config.php + */ +if (file_exists(SM_PATH . 'config/config.php')) { + include(SM_PATH . 'functions/global.php'); +} +$IND = str_repeat(' ',4); + +// this must be done before the output is started because it may use the +// session +$test_location = get_location(); +?> + + + + SquirrelMail configtest + + +

              SquirrelMail configtest

              + +

              This script will try to check some aspects of your SquirrelMail configuration +and point you to errors whereever it can find them. You need to go run conf.pl +in the config/ directory first before you run this script.

              + +'. + 'You need to run conf.pl first.'); + } + do_err('Could not read '.SM_PATH.'config/config.php! Check file permissions.'); +} +if(!in_array('strings.php', $included)) { + do_err('Could not include '.SM_PATH.'functions/strings.php!
              '. + 'Check permissions on that file.'); +} + +/* checking PHP specs */ + +echo "

              \n\n" . + '\n" . + '\n
              SquirrelMail version:" . $version . "
              Config file version:' . $config_version . "
              Config file last modified:' . + date ('d F Y H:i:s', filemtime(SM_PATH . 'config/config.php')) . + "
              \n

              \n\n"; + +echo "Checking PHP configuration...
              \n"; + +if(!check_php_version(4,1,0)) { + do_err('Insufficient PHP version: '. PHP_VERSION . '! Minimum required: 4.1.0'); +} + +echo $IND . 'PHP version ' . PHP_VERSION . " OK.
              \n"; + +// try to determine information about the user and group the web server is running as +// +$webOwnerID = 'N/A'; +$webOwnerInfo = array('name' => 'N/A'); +if (function_exists('posix_getuid')) + $webOwnerID = posix_getuid(); +if ($webOwnerID === FALSE) + $webOwnerID = 'N/A'; +if ($webOwnerID !== 'N/A' && function_exists('posix_getpwuid')) + $webOwnerInfo = posix_getpwuid($webOwnerID); +if (!$webOwnerInfo) + $webOwnerInfo = array('name' => 'N/A'); +$webGroupID = 'N/A'; +$webGroupInfo = array('name' => 'N/A'); +if (function_exists('posix_getgid')) + $webGroupID = posix_getgid(); +if ($webGroupID === FALSE) + $webGroupID = 'N/A'; +if ($webGroupID !== 'N/A' && function_exists('posix_getgrgid')) + $webGroupInfo = posix_getgrgid($webGroupID); +if (!$webGroupInfo) + $webGroupInfo = array('name' => 'N/A'); + +echo $IND . 'Running as ' . $webOwnerInfo['name'] . '(' . $webOwnerID + . ') / ' . $webGroupInfo['name'] . '(' . $webGroupID . ")
              \n"; + +echo $IND . 'display_errors: ' . ini_get('display_errors') . "
              \n"; + +echo $IND . 'error_reporting: ' . ini_get('error_reporting') . "
              \n"; + +if ((bool) ini_get('session.auto_start') && ini_get('session.auto_start') != 'off') { + $msg = 'session.auto_start is turned on in your PHP configuration, but SquirrelMail' + . ' 1.4.x will not work with it (otherwise valid logins will usually' + . ' result in "You must be logged in to access this page" errors).' + . ' You can disable session.auto_start only in the squirrelmail directory' + . ' if you need to leave it turned on for other applications.'; + do_err($msg, true); +} + +$safe_mode = ini_get('safe_mode'); +if ($safe_mode) { + echo $IND . 'safe_mode: ' . $safe_mode; + if (empty($prefs_dsn) || empty($addrbook_dsn)) + echo ' (double check data and attachment directory ownership, etc!)'; + if (!empty($addrbook_dsn) || !empty($prefs_dsn) || !empty($addrbook_global_dsn)) + echo ' (does PHP have access to database interface?)'; + echo "
              \n"; + $safe_mode_exec_dir = ini_get('safe_mode_exec_dir'); + echo $IND . 'safe_mode_exec_dir: ' . $safe_mode_exec_dir . "
              \n"; +} + +/* variables_order check */ + +// FIXME(?): Hmm, how do we distinguish between when an ini setting is +// not available (ini_set() returns empty string) and when +// the administrator set the value to an empty string? The +// latter is sure to be highly rare, so for now, just assume +// that empty value means the setting isn't even available +// (could also check PHP version when this setting was implemented) +// although, we'll also warn the user if it is empty, with +// a non-fatal error +$variables_order = strtoupper(ini_get('variables_order')); +if (empty($variables_order)) + do_err('Your variables_order setting seems to be empty. Make sure it is undefined in any PHP ini files, .htaccess files, etc. and not specifically set to an empty value or SquirrelMail may not function correctly', false); +else if (strpos($variables_order, 'G') === FALSE + || strpos($variables_order, 'P') === FALSE + || strpos($variables_order, 'C') === FALSE + || strpos($variables_order, 'S') === FALSE) { + do_err('Your variables_order setting is insufficient for SquirrelMail to function. It needs at least "GPCS", but you have it set to "' . htmlspecialchars($variables_order) . '"', true); +} else { + echo $IND . "variables_order OK: $variables_order.
              \n"; +} + + +/* gpc_order check (removed from PHP as of v5.0) */ + +if (!check_php_version(5)) { + // FIXME(?): Hmm, how do we distinguish between when an ini setting is + // not available (ini_set() returns empty string) and when + // the administrator set the value to an empty string? The + // latter is sure to be highly rare, so for now, just assume + // that empty value means the setting isn't even available + // (could also check PHP version when this setting was implemented) + // although, we'll also warn the user if it is empty, with + // a non-fatal error + $gpc_order = strtoupper(ini_get('gpc_order')); + if (empty($gpc_order)) + do_err('Your gpc_order setting seems to be empty. Make sure it is undefined in any PHP ini files, .htaccess files, etc. and not specifically set to an empty value or SquirrelMail may not function correctly', false); + else if (strpos($gpc_order, 'G') === FALSE + || strpos($gpc_order, 'P') === FALSE + || strpos($gpc_order, 'C') === FALSE) { + do_err('Your gpc_order setting is insufficient for SquirrelMail to function. It needs to be set to "GPC", but you have it set to "' . htmlspecialchars($gpc_order) . '"', true); + } else { + echo $IND . "gpc_order OK: $gpc_order.
              \n"; + } +} + + +$php_exts = array('session','pcre'); +$diff = array_diff($php_exts, get_loaded_extensions()); +if(count($diff)) { + do_err('Required PHP extensions missing: '.implode(', ',$diff) ); +} + +echo $IND . "PHP extensions OK. Dynamic loading is "; + +if (!(bool)ini_get('enable_dl') || (bool)ini_get('safe_mode')) { + echo "disabled.
              \n"; +} else { + echo "enabled.
              \n"; +} + + +/* dangerous php settings */ +/** mbstring.func_overload<>0 fix. See cvs HEAD comments. */ +if (function_exists('mb_internal_encoding') && + check_php_version(4,2,0) && + (int)ini_get('mbstring.func_overload')!=0) { + $mb_error='You have enabled mbstring overloading.' + .' It can cause problems with SquirrelMail scripts that rely on single byte string functions.'; + do_err($mb_error); +} + +/** + * We code with register_globals = off. SquirrelMail should work in such setup + * since 1.2.9 and 1.3.0. Running SquirrelMail with register_globals = on can + * cause variable corruption and security issues. Globals can be turned off in + * php.ini, webserver config and .htaccess files. Scripts can turn off globals only + * in php 4.2.3 or older. + */ +if ((bool) ini_get('register_globals') && + ini_get('register_globals') != 'off') { + $rg_error='You have enabled PHP register_globals.' + .' Running PHP installation with register_globals=on can cause problems.' + .' See ' + .'security information about register_globals.'; + do_err($rg_error,false); +} + +/** + * Do not use SquirrelMail with magic_quotes_* on. + */ +if ( (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime()) || + (function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc()) || + ( (bool) ini_get('magic_quotes_sybase') && ini_get('magic_quotes_sybase') != 'off' ) + ) { + $magic_quotes_warning='You have enabled any one of magic_quotes_runtime, ' + .'magic_quotes_gpc or magic_quotes_sybase in your PHP ' + .'configuration. We recommend all those settings to be off. SquirrelMail ' + .'may work with them on, but when experiencing stray backslashes in your mail ' + .'or other strange behaviour, it may be advisable to turn them off.'; + do_err($magic_quotes_warning,false); +} + +if (ini_get('short_open_tag') == 0) { + $short_open_tag_warning = 'You have configured PHP not to allow short tags ' + . '(short_open_tag=off). This shouldn\'t be a problem with ' + . 'SquirrelMail or any plugin coded coded according to the ' + . 'SquirrelMail Coding Guidelines, but if you experience problems with ' + . 'PHP code being displayed in some of the pages and changing setting ' + . 'to "on" solves the problem, please file a bug report against the ' + . 'failing plugin. The correct contact information is most likely ' + . 'to be found in the plugin documentation.'; + do_err($short_open_tag_warning, false); +} + +/* checking paths */ + +echo "Checking paths...
              \n"; + +if(!file_exists($data_dir)) { + do_err("Data dir ($data_dir) does not exist!"); +} +if(!is_dir($data_dir)) { + do_err("Data dir ($data_dir) is not a directory!"); +} +// datadir should be executable - but no clean way to test on that +if(!is_writable($data_dir)) { + do_err("I cannot write to data dir ($data_dir)!"); +} + +// todo_ornot: actually write something and read it back. +echo $IND . "Data dir OK.
              \n"; + + +if($data_dir == $attachment_dir) { + echo $IND . "Attachment dir is the same as data dir.
              \n"; +} else { + if(!file_exists($attachment_dir)) { + do_err("Attachment dir ($attachment_dir) does not exist!"); + } + if (!is_dir($attachment_dir)) { + do_err("Attachment dir ($attachment_dir) is not a directory!"); + } + if (!is_writable($attachment_dir)) { + do_err("I cannot write to attachment dir ($attachment_dir)!"); + } + echo $IND . "Attachment dir OK.
              \n"; +} + + +/* check plugins and themes */ +if (isset($plugins[0])) { + foreach($plugins as $plugin) { + if(!file_exists(SM_PATH .'plugins/'.$plugin)) { + do_err('You have enabled the '.$plugin.' plugin, but I cannot find it.', FALSE); + } elseif (!is_readable(SM_PATH .'plugins/'.$plugin.'/setup.php')) { + do_err('You have enabled the '.$plugin.' plugin, but I cannot read its setup.php file.', FALSE); + } + } + // load plugin functions + include_once(SM_PATH . 'functions/plugin.php'); + // turn on output buffering in order to prevent output of new lines + ob_start(); + foreach ($plugins as $name) { + use_plugin($name); + } + // get output and remove whitespace + $output = trim(ob_get_contents()); + ob_end_clean(); + // if plugins output more than newlines and spacing, stop script execution. + if (!empty($output)) { + $plugin_load_error = 'Some output is produced when plugins are loaded. Usually this means there is an error in one of the plugin setup or configuration files. The output was: '.htmlspecialchars($output); + do_err($plugin_load_error); + } + /** + * This hook was added in 1.5.2 and 1.4.10. Each plugins should print an error + * message and return TRUE if there are any errors in its setup/configuration. + */ + $plugin_err = boolean_hook_function('configtest', NULL, 1); + if($plugin_err) { + do_err('Some plugin tests failed.'); + } else { + echo $IND . "Plugins OK.
              \n"; + } +} else { + echo $IND . "Plugins are not enabled in config.
              \n"; +} +foreach($theme as $thm) { + if(!file_exists($thm['PATH'])) { + do_err('You have enabled the '.$thm['NAME'].' theme but I cannot find it ('.$thm['PATH'].').', FALSE); + } elseif(!is_readable($thm['PATH'])) { + do_err('You have enabled the '.$thm['NAME'].' theme but I cannot read it ('.$thm['PATH'].').', FALSE); + } +} + +echo $IND . "Themes OK.
              \n"; + +if ( $squirrelmail_default_language != 'en_US' ) { + $loc_path = SM_PATH .'locale/'.$squirrelmail_default_language.'/LC_MESSAGES/squirrelmail.mo'; + if( ! file_exists( $loc_path ) ) { + do_err('You have set ' . $squirrelmail_default_language . + ' as your default language, but I cannot find this translation (should be '. + 'in ' . $loc_path . '). Please note that you have to download translations '. + 'separately from the main SquirrelMail package.', FALSE); + } elseif ( ! is_readable( $loc_path ) ) { + do_err('You have set ' . $squirrelmail_default_language . + ' as your default language, but I cannot read this translation (file '. + 'in ' . $loc_path . ' unreadable).', FALSE); + } else { + echo $IND . "Default language OK.
              \n"; + } +} else { + echo $IND . "Default language OK.
              \n"; +} + +echo $IND . "Base URL detected as: " . htmlspecialchars($test_location) . + " (location base " . (empty($config_location_base) ? 'autodetected' : 'set to ' . + htmlspecialchars($config_location_base)."") . ")
              \n"; + +/* check outgoing mail */ + +if($use_smtp_tls || $use_imap_tls) { + if(!check_php_version(4,3,0)) { + do_err('You need at least PHP 4.3.0 for SMTP/IMAP TLS!'); + } + if(!extension_loaded('openssl')) { + do_err('You need the openssl PHP extension to use SMTP/IMAP TLS!'); + } +} + +echo "Checking outgoing mail service....
              \n"; + +if($useSendmail) { + // is_executable also checks for existance, but we want to be as precise as possible with the errors + if(!file_exists($sendmail_path)) { + do_err("Location of sendmail program incorrect ($sendmail_path)!"); + } + if(!is_executable($sendmail_path)) { + do_err("I cannot execute the sendmail program ($sendmail_path)!"); + } + + echo $IND . "sendmail OK
              \n"; +} else { + $stream = fsockopen( ($use_smtp_tls?'tls://':'').$smtpServerAddress, $smtpPort, + $errorNumber, $errorString); + if(!$stream) { + do_err("Error connecting to SMTP server \"$smtpServerAddress:$smtpPort\".". + "Server error: ($errorNumber) ".htmlspecialchars($errorString)); + } + + // check for SMTP code; should be 2xx to allow us access + $smtpline = fgets($stream, 1024); + if(((int) $smtpline{0}) > 3) { + do_err("Error connecting to SMTP server. Server error: ". + htmlspecialchars($smtpline)); + } + + fputs($stream, 'QUIT'); + fclose($stream); + echo $IND . 'SMTP server OK ('. + trim(htmlspecialchars($smtpline)).")
              \n"; + + /* POP before SMTP */ + if($pop_before_smtp) { + if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress; + $stream = fsockopen($pop_before_smtp_host, 110, $err_no, $err_str); + if (!$stream) { + do_err("Error connecting to POP Server ($pop_before_smtp_host:110) " + . $err_no . ' : ' . htmlspecialchars($err_str)); + } + + $tmp = fgets($stream, 1024); + if (substr($tmp, 0, 3) != '+OK') { + do_err("Error connecting to POP Server ($pop_before_smtp_host:110)" + . ' '.htmlspecialchars($tmp)); + } + fputs($stream, 'QUIT'); + fclose($stream); + echo $IND . "POP-before-SMTP OK.
              \n"; + } +} + +/** + * Check the IMAP server + */ +echo "Checking IMAP service....
              \n"; + +/** Can we open a connection? */ +$stream = fsockopen( ($use_imap_tls?'tls://':'').$imapServerAddress, $imapPort, + $errorNumber, $errorString); +if(!$stream) { + do_err("Error connecting to IMAP server \"$imapServerAddress:$imapPort\".". + "Server error: ($errorNumber) ". + htmlspecialchars($errorString)); +} + +/** Is the first response 'OK'? */ +$imapline = fgets($stream, 1024); +if(substr($imapline, 0,4) != '* OK') { + do_err('Error connecting to IMAP server. Server error: '. + htmlspecialchars($imapline)); +} + +echo $IND . 'IMAP server ready ('. + htmlspecialchars(trim($imapline)).")
              \n"; + +/** Check capabilities */ +fputs($stream, "A001 CAPABILITY\r\n"); +$capline = fgets($stream, 1024); + +echo $IND . 'Capabilities: '.htmlspecialchars($capline)."
              \n"; + +if($imap_auth_mech == 'login' && stristr($capline, 'LOGINDISABLED') !== FALSE) { + do_err('Your server doesn\'t allow plaintext logins. '. + 'Try enabling another authentication mechanism like CRAM-MD5, DIGEST-MD5 or TLS-encryption '. + 'in the SquirrelMail configuration.', FALSE); +} + +if (stristr($capline, 'XMAGICTRASH') !== false) { + $magic_trash = 'It looks like IMAP_MOVE_EXPUNGE_TO_TRASH option is turned on ' + .'in your Courier IMAP configuration. Courier does not provide tools that ' + .'allow to detect folder used for Trash or commands are not documented. ' + .'SquirrelMail can\'t detect special trash folder. SquirrelMail manages ' + .'all message deletion or move operations internally and ' + .'IMAP_MOVE_EXPUNGE_TO_TRASH option can cause errors in message and ' + .'folder management operations. Please turn off IMAP_MOVE_EXPUNGE_TO_TRASH ' + .'option in Courier imapd configuration.'; + do_err($magic_trash,false); +} + +/* add warning about IMAP delivery */ +if (stristr($capline, 'XCOURIEROUTBOX') !== false) { + $courier_outbox = 'OUTBOX setting is enabled in your Courier imapd ' + .'configuration. SquirrelMail uses standard SMTP protocol or sendmail ' + .'binary to send emails. Courier IMAP delivery method is not supported' + .' and can create duplicate email messages.'; + do_err($courier_outbox,false); +} + +/** OK, close connection */ +fputs($stream, "A002 LOGOUT\r\n"); +fclose($stream); + +echo "Checking internationalization (i18n) settings...
              \n"; +echo "$IND gettext - "; +if (function_exists('gettext')) { + echo 'Gettext functions are available.' + .' On some systems you must have appropriate system locales compiled.' + ."
              \n"; +} else { + echo 'Gettext functions are unavailable.' + .' SquirrelMail will use slower internal gettext functions.' + ."
              \n"; +} +echo "$IND mbstring - "; +if (function_exists('mb_detect_encoding')) { + echo "Mbstring functions are available.
              \n"; +} else { + echo 'Mbstring functions are unavailable.' + ." Japanese translation won't work.
              \n"; +} +echo "$IND recode - "; +if (function_exists('recode')) { + echo "Recode functions are available.
              \n"; +} elseif (isset($use_php_recode) && $use_php_recode) { + echo "Recode functions are unavailable.
              \n"; + do_err('Your configuration requires recode support, but recode support is missing.'); +} else { + echo "Recode functions are unavailable.
              \n"; +} +echo "$IND iconv - "; +if (function_exists('iconv')) { + echo "Iconv functions are available.
              \n"; +} elseif (isset($use_php_iconv) && $use_php_iconv) { + echo "Iconv functions are unavailable.
              \n"; + do_err('Your configuration requires iconv support, but iconv support is missing.'); +} else { + echo "Iconv functions are unavailable.
              \n"; +} +// same test as in include/validate.php +echo "$IND timezone - "; +if ( (!ini_get('safe_mode')) || + !strcmp(ini_get('safe_mode_allowed_env_vars'),'') || + preg_match('/^([\w_]+,)*TZ/', ini_get('safe_mode_allowed_env_vars')) ) { + echo "Webmail users can change their time zone settings.
              \n"; +} else { + echo "Webmail users can't change their time zone settings.
              \n"; +} + +// Pear DB tests +echo "Checking database functions...
              \n"; +if(!empty($addrbook_dsn) || !empty($prefs_dsn) || !empty($addrbook_global_dsn)) { + @include_once('DB.php'); + if (class_exists('DB')) { + echo "$IND PHP Pear DB support is present.
              \n"; + $db_functions=array( + 'dbase' => 'dbase_open', + 'fbsql' => 'fbsql_connect', + 'interbase' => 'ibase_connect', + 'informix' => 'ifx_connect', + 'msql' => 'msql_connect', + 'mssql' => 'mssql_connect', + 'mysql' => 'mysql_connect', + 'mysqli' => 'mysqli_connect', + 'oci8' => 'ocilogon', + 'odbc' => 'odbc_connect', + 'pgsql' => 'pg_connect', + 'sqlite' => 'sqlite_open', + 'sybase' => 'sybase_connect' + ); + + $dsns = array(); + if($prefs_dsn) { + $dsns['preferences'] = $prefs_dsn; + } + if($addrbook_dsn) { + $dsns['addressbook'] = $addrbook_dsn; + } + if($addrbook_global_dsn) { + $dsns['global addressbook'] = $addrbook_global_dsn; + } + + foreach($dsns as $type => $dsn) { + $aDsn = explode(':', $dsn); + $dbtype = array_shift($aDsn); + + if(isset($db_functions[$dbtype]) && function_exists($db_functions[$dbtype])) { + echo "$IND$dbtype database support present.
              \n"; + } elseif(!(bool)ini_get('enable_dl') || (bool)ini_get('safe_mode')) { + do_err($dbtype.' database support not present!'); + } else { + // Non-fatal error + do_err($dbtype.' database support not present or not configured! + Trying to dynamically load '.$dbtype.' extension. + Please note that it is advisable to not rely on dynamic loading of extensions.', FALSE); + } + + + // now, test this interface: + + $dbh = DB::connect($dsn, true); + if (DB::isError($dbh)) { + do_err('Database error: '. htmlspecialchars(DB::errorMessage($dbh)) . + ' in ' .$type .' DSN.'); + } + $dbh->disconnect(); + echo "$IND$type database connect successful.
              \n"; + } + } else { + $db_error='Required PHP PEAR DB support is not available.' + .' Is PEAR installed and is the include path set correctly to find DB.php?' + .' The include path is now: "' . ini_get('include_path') . '".'; + do_err($db_error); + } +} else { + echo $IND."not using database functionality.
              \n"; +} +?> + +

              Congratulations, your SquirrelMail setup looks fine to me!

              + +

              Login now

              + + + diff --git a/ehcp/webmail2/src/delete_message.php b/ehcp/webmail2/src/delete_message.php new file mode 100644 index 0000000..85ddb69 --- /dev/null +++ b/ehcp/webmail2/src/delete_message.php @@ -0,0 +1,96 @@ +rfc822_header->subject; +if ($ent_id) { + $message = $message->getEntity($ent_id); + $header = $message->header; + + if ($message->rfc822_header) { + $subject = $message->rfc822_header->subject; + } else { + $header = $message->header; + } + $type0 = $header->type0; + $type1 = $header->type1; + $encoding = strtolower($header->encoding); +} else { + /* raw message */ + $type0 = 'message'; + $type1 = 'rfc822'; + $encoding = '7bit'; + $header = $message->header; +} + +/* + * lets redefine message as this particular entity that we wish to display. + * it should hold only the header for this entity. We need to fetch the body + * yet before we can display anything. + */ + +if (isset($override_type0)) { + $type0 = $override_type0; +} +if (isset($override_type1)) { + $type1 = $override_type1; +} +$filename = ''; +if (is_object($message->header->disposition)) { + $filename = $header->disposition->getProperty('filename'); + if (!$filename) { + $filename = $header->disposition->getProperty('name'); + } + if (!$filename) { + $filename = $header->getParameter('name'); + } +} else { + $filename = $header->getParameter('name'); +} + +$filename = decodeHeader($filename,true,false); +$filename = charset_encode($filename,$default_charset,false); + +// If name is not set, use subject of email +if (strlen($filename) < 1) { + $filename = decodeHeader($subject, true, true); + $filename = charset_encode($filename,$default_charset,false); + if ($type1 == 'plain' && $type0 == 'text') + $suffix = 'txt'; + else if ($type1 == 'richtext' && $type0 == 'text') + $suffix = 'rtf'; + else if ($type1 == 'postscript' && $type0 == 'application') + $suffix = 'ps'; + else if ($type1 == 'rfc822' && $type0 == 'message') + $suffix = 'msg'; + else + $suffix = $type1; + + if ($filename == '') + $filename = 'untitled' . strip_tags($ent_id); + $filename = $filename . '.' . $suffix; +} + +/** + * Close session in order to prevent script locking on larger + * downloads. SendDownloadHeaders() and mime_print_body_lines() + * don't write information to session. mime_print_body_lines() + * call duration depends on size of attachment and script can + * cause interface lockups, if session is not closed. + */ +session_write_close(); + +/* + * Note: + * The following sections display the attachment in different + * ways depending on how they choose. The first way will download + * under any circumstance. This sets the Content-type to be + * applicatin/octet-stream, which should be interpreted by the + * browser as "download me". + * The second method (view) is used for images or other formats + * that should be able to be handled by the browser. It will + * most likely display the attachment inline inside the browser. + * And finally, the third one will be used by default. If it + * is displayable (text or html), it will load them up in a text + * viewer (built in to squirrelmail). Otherwise, it sets the + * content-type as application/octet-stream + */ +if (isset($absolute_dl) && $absolute_dl) { + SendDownloadHeaders($type0, $type1, $filename, 1); +} else { + SendDownloadHeaders($type0, $type1, $filename, 0); +} +/* be aware that any warning caused by download.php will corrupt the + * attachment in case of ERROR reporting = E_ALL and the output is the screen */ +mime_print_body_lines ($imapConnection, $passed_id, $ent_id, $encoding); diff --git a/ehcp/webmail2/src/empty_trash.php b/ehcp/webmail2/src/empty_trash.php new file mode 100644 index 0000000..c004fb3 --- /dev/null +++ b/ehcp/webmail2/src/empty_trash.php @@ -0,0 +1,89 @@ +' . + html_tag( 'table', '', 'center', $color[0], 'width="95%" cellpadding="1" cellspacing="0" border="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center' ) . '' . _("Folders") . '' . + html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[4] ); + +if ( isset($success) && $success ) { + + $td_str = ''; + + switch ($success) + { + case 'subscribe': + $td_str .= _("Subscribed successfully."); + break; + case 'unsubscribe': + $td_str .= _("Unsubscribed successfully."); + break; + case 'delete': + $td_str .= _("Deleted folder successfully."); + break; + case 'create': + $td_str .= _("Created folder successfully."); + break; + case 'rename': + $td_str .= _("Renamed successfully."); + break; + case 'subscribe-doesnotexist': + $td_str .= _("Subscription Unsuccessful - Folder does not exist."); + break; + } + + $td_str .= '
              '; + + + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', $td_str . + '' . + _("refresh folder list") . '' , + 'center' ) + ) , + 'center', '', 'width="100%" cellpadding="4" cellspacing="0" border="0"' ); +} + +echo "\n
              "; + +$imapConnection = sqimap_login ($username, $key, $imapServerAddress, $imapPort, 0); + +// force retrieval of a non cached folderlist +$boxes = sqimap_mailbox_list($imapConnection,true); + +/** CREATING FOLDERS **/ +echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspacing="0" border="0"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Create Folder") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ) . + addForm('folders_create.php', 'POST', 'cf', '', '', '', TRUE). + addInput('folder_name', '', 25). + "
              \n". _("as a subfolder of"). '
              '. + "\n"; +if ($show_contain_subfolders_option) { + echo '
              '. + addCheckBox('contain_subs', FALSE, '1') .'  ' + . _("Let this folder contain subfolders") + . '
              '; +} +echo "\n"; +echo "\n"; + +echo html_tag( 'tr', + html_tag( 'td', ' ', 'left', $color[4] ) + ) ."\n"; + +/** count special folders **/ +foreach ($boxes as $index => $aBoxData) { + if (! in_array($aBoxData['unformatted'],$skip_folders) && + isSpecialMailbox($aBoxData['unformatted'],false) ) { + $skip_folders[] = $aBoxData['unformatted']; + } +} + +/** RENAMING FOLDERS **/ +echo html_tag( 'tr', + html_tag( 'td', '' . _("Rename a Folder") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ); + +if (count($skip_folders) < count($boxes)) { + echo addForm('folders_rename_getname.php') + . "\n". + '\n". + "\n"; +} else { + echo _("No folders found") . '

              '; +} +$boxes_sub = $boxes; + +echo html_tag( 'tr', + html_tag( 'td', ' ', 'left', $color[4] ) + ) ."\n"; + +/** DELETING FOLDERS **/ +echo html_tag( 'tr', + html_tag( 'td', '' . _("Delete Folder") . '', 'center', $color[9] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ); + +if (count($skip_folders) < count($boxes)) { + echo addForm('folders_delete.php') + . "\n" + . '\n" + . "\n"; +} else { + echo _("No folders found") . "

              "; +} + +echo html_tag( 'tr', + html_tag( 'td', ' ', 'left', $color[4] ) + ) ."\n"; + + +/** UNSUBSCRIBE FOLDERS **/ +echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspacing="0" border="0"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Unsubscribe") . '/' . _("Subscribe") . '', 'center', $color[9], 'colspan="2"' ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0], 'width="50%"' ); + +if (count($skip_folders) < count($boxes)) { + echo addForm('folders_subscribe.php?method=unsub', 'post', '', '', '', '', TRUE) + . "

              \n" + . '\n" + . "\n"; +} else { + echo _("No folders were found to unsubscribe from!") . ''; +} +$boxes_sub = $boxes; + +/** SUBSCRIBE TO FOLDERS **/ +echo html_tag( 'td', '', 'center', $color[0], 'width="50%"' ); +if(!$no_list_for_subscribe) { + $boxes_all = sqimap_mailbox_list_all ($imapConnection); + + $box = $box2 = array(); + for ($i = 0, $q = 0; $i < count($boxes_all); $i++) { + $use_folder = true; + for ($p = 0; $p < count ($boxes); $p++) { + if ($boxes_all[$i]['unformatted'] == $boxes[$p]['unformatted']) { + $use_folder = false; + continue; + } else if ($boxes_all[$i]['unformatted-dm'] == $folder_prefix) { + $use_folder = false; + } + } + if ($use_folder == true) { + $box[$q] = $boxes_all[$i]['unformatted-dm']; + $box2[$q] = imap_utf7_decode_local($boxes_all[$i]['unformatted-disp']); + $q++; + } + } + + if (count($box) > 0) { + echo addForm('folders_subscribe.php?method=sub', 'post', '', '', '', '', TRUE) + . '

              ' + . '\n" + . "
              \n"; + } else { + echo _("No folders were found to subscribe to!") . ''; + } +} else { + /* don't perform the list action -- this is much faster */ + echo addForm('folders_subscribe.php?method=sub', 'post', '', '', '', '', TRUE) + . _("Subscribe to:") . '
              ' + . '' + . '\n" + . "\n"; +} +echo "\n

              \n"; + +do_hook('folders_bottom'); +?> + + + + + + diff --git a/ehcp/webmail2/src/folders_create.php b/ehcp/webmail2/src/folders_create.php new file mode 100644 index 0000000..f70094c --- /dev/null +++ b/ehcp/webmail2/src/folders_create.php @@ -0,0 +1,90 @@ +'._("Click here to go back").'.', $color); + + exit; +} + +$folder_name = imap_utf7_encode_local($folder_name); + +if (isset($contain_subs) && $contain_subs ) { + $folder_type = 'noselect'; +} else { + $folder_type = ''; +} + +if ($folder_prefix && (substr($folder_prefix, -1) != $delimiter)) { + $folder_prefix = $folder_prefix . $delimiter; +} +if ($folder_prefix && (substr($subfolder, 0, strlen($folder_prefix)) != $folder_prefix)){ + $subfolder_orig = $subfolder; + $subfolder = $folder_prefix . $subfolder; +} else { + $subfolder_orig = $subfolder; +} + +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + +if (trim($subfolder_orig) == '') { + sqimap_mailbox_create ($imapConnection, $folder_prefix.$folder_name, $folder_type); +} else { + sqimap_mailbox_create ($imapConnection, $subfolder.$delimiter.$folder_name, $folder_type); +} + +sqimap_logout($imapConnection); + +$location = get_location(); +header ("Location: $location/folders.php?success=create"); + diff --git a/ehcp/webmail2/src/folders_delete.php b/ehcp/webmail2/src/folders_delete.php new file mode 100644 index 0000000..4329fd3 --- /dev/null +++ b/ehcp/webmail2/src/folders_delete.php @@ -0,0 +1,153 @@ +'._("Click here to go back").'.', $color); + exit; +} + +if ( sqgetGlobalVar('backingout', $tmp, SQ_POST) ) { + $location = get_location(); + header ("Location: $location/folders.php"); + exit; +} + +if( !sqgetGlobalVar('confirmed', $tmp, SQ_POST) ) { + displayPageHeader($color, 'None'); + + // get displayable mailbox format + global $folder_prefix; + if (substr($mailbox,0,strlen($folder_prefix))==$folder_prefix) { + $mailbox_unformatted_disp = substr($mailbox, strlen($folder_prefix)); + } else { + $mailbox_unformatted_disp = $mailbox; + } + + echo '
              ' . + html_tag( 'table', '', 'center', '', 'width="95%" border="0"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Delete Folder") . '', 'center', $color[0] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[4] ) . + sprintf(_("Are you sure you want to delete %s?"), str_replace(array(' ','<','>'),array(' ','<','>'),imap_utf7_decode_local($mailbox_unformatted_disp))). + addForm('folders_delete.php', 'post', '', '', '', '', TRUE)."

              \n". + addHidden('mailbox', $mailbox). + addSubmit(_("Yes"), 'confirmed'). + addSubmit(_("No"), 'backingout'). + '


              '; + + exit; +} + +// first, validate security token +sm_validate_security_token($submitted_token, 3600, TRUE); + +$imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + +$boxes = sqimap_mailbox_list ($imap_stream); +$numboxes = count($boxes); + +global $delete_folder; + +if (substr($mailbox, -1) == $delimiter) + $mailbox_no_dm = substr($mailbox, 0, strlen($mailbox) - 1); +else + $mailbox_no_dm = $mailbox; + +/** lets see if we CAN move folders to the trash.. otherwise, + ** just delete them **/ +if ((isset($delete_folder) && $delete_folder) || + preg_match('/^' . preg_quote($trash_folder, '/') . '.+/i', $mailbox) ) { + $can_move_to_trash = FALSE; +} + +/* Otherwise, check if trash folder exits and support sub-folders */ +else { + for ($i = 0; $i < $numboxes; $i++) { + if ($boxes[$i]['unformatted'] == $trash_folder) { + $can_move_to_trash = !in_array('noinferiors', $boxes[$i]['flags']); + } + } +} + +/** First create the top node in the tree **/ +for ($i = 0; $i < $numboxes; $i++) { + if (($boxes[$i]['unformatted-dm'] == $mailbox) && (strlen($boxes[$i]['unformatted-dm']) == strlen($mailbox))) { + $foldersTree[0]['value'] = $mailbox; + $foldersTree[0]['doIHaveChildren'] = false; + continue; + } +} + +/* Now create the nodes for subfolders of the parent folder + You can tell that it is a subfolder by tacking the mailbox delimiter + on the end of the $mailbox string, and compare to that. */ +for ($i = 0; $i < $numboxes; $i++) { + if (substr($boxes[$i]['unformatted'], 0, strlen($mailbox_no_dm . $delimiter)) == ($mailbox_no_dm . $delimiter)) { + addChildNodeToTree($boxes[$i]["unformatted"], $boxes[$i]['unformatted-dm'], $foldersTree); + } +} + +/** Lets start removing the folders and messages **/ +if (($move_to_trash == true) && ($can_move_to_trash == true)) { /** if they wish to move messages to the trash **/ + walkTreeInPostOrderCreatingFoldersUnderTrash(0, $imap_stream, $foldersTree, $mailbox); + walkTreeInPreOrderDeleteFolders(0, $imap_stream, $foldersTree); +} else { /** if they do NOT wish to move messages to the trash (or cannot)**/ + walkTreeInPreOrderDeleteFolders(0, $imap_stream, $foldersTree); +} + +/** Log out this session **/ +sqimap_logout($imap_stream); + +$location = get_location(); +header ("Location: $location/folders.php?success=delete"); + diff --git a/ehcp/webmail2/src/folders_rename_do.php b/ehcp/webmail2/src/folders_rename_do.php new file mode 100644 index 0000000..79f9ce1 --- /dev/null +++ b/ehcp/webmail2/src/folders_rename_do.php @@ -0,0 +1,92 @@ +'._("Click here to go back").'.', $color); + + exit; +} + +$orig = imap_utf7_encode_local($orig); +$old_name = imap_utf7_encode_local($old_name); +$new_name = imap_utf7_encode_local($new_name); + +if ($old_name <> $new_name) { + + $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + + if (strpos($orig, $delimiter)) { + $old_dir = substr($orig, 0, strrpos($orig, $delimiter)); + } else { + $old_dir = ''; + } + + if ($old_dir != '') { + $newone = $old_dir . $delimiter . $new_name; + } else { + $newone = $new_name; + } + + // Renaming a folder doesn't rename the folder but leaves you unsubscribed + // at least on Cyrus IMAP servers. + if (isset($isfolder)) { + $newone = $newone.$delimiter; + $orig = $orig.$delimiter; + } + sqimap_mailbox_rename( $imapConnection, $orig, $newone ); + + // Log out this session + sqimap_logout($imapConnection); + +} + +header ('Location: ' . get_location() . '/folders.php?success=rename'); + diff --git a/ehcp/webmail2/src/folders_rename_getname.php b/ehcp/webmail2/src/folders_rename_getname.php new file mode 100644 index 0000000..414c367 --- /dev/null +++ b/ehcp/webmail2/src/folders_rename_getname.php @@ -0,0 +1,96 @@ +'._("Click here to go back").'.', $color); + exit; +} + +if (substr($old, strlen($old) - strlen($delimiter)) == $delimiter) { + $isfolder = TRUE; + $old = substr($old, 0, strlen($old) - 1); +} else { + $isfolder = FALSE; +} + +$old = imap_utf7_decode_local($old); + +// displayable mailbox format is without folder prefix on front +global $folder_prefix; +if (substr($old, 0, strlen($folder_prefix)) == $folder_prefix) { + $displayable_old = substr($old, strlen($folder_prefix)); +} else { + $displayable_old = $old; +} + +if (strpos($displayable_old, $delimiter)) { + $old_name = substr($displayable_old, strrpos($displayable_old, $delimiter)+1); + $parent = htmlspecialchars(substr($displayable_old, + 0, + strrpos($displayable_old, $delimiter)) + . ' ' . $delimiter); +} else { + $old_name = $displayable_old; + $parent = ''; +} + + +displayPageHeader($color, 'None'); +echo '
              ' . + html_tag( 'table', '', 'center', '', 'width="95%" border="0"' ) . + html_tag( 'tr', + html_tag( 'td', '' . _("Rename a folder") . '', 'center', $color[0] ) + ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[4] ) . + addForm('folders_rename_do.php', 'post', '', '', '', '', TRUE). + _("New name:"). + '
              '. $parent . ''. + addInput('new_name', $old_name, 25) . '
              ' . "\n"; +if ( $isfolder ) { + echo addHidden('isfolder', 'true'); +} +echo addHidden('orig', $old). + addHidden('old_name', $old_name). + '\n". + '
              '; + diff --git a/ehcp/webmail2/src/folders_subscribe.php b/ehcp/webmail2/src/folders_subscribe.php new file mode 100644 index 0000000..a58daa8 --- /dev/null +++ b/ehcp/webmail2/src/folders_subscribe.php @@ -0,0 +1,80 @@ +' + || trim(strtolower($doc[$n])) == '
              ') { + for ($n++; $n < $cntdoc + && (trim(strtolower($doc[$n])) != '
              ') + && (trim(strtolower($doc[$n])) != ''); $n++) { + if (trim(strtolower($doc[$n])) == '') { + $n++; + $ary[0] = trim($doc[$n]); + } + if (trim(strtolower($doc[$n])) == '<description>') { + $ary[1] = ''; + for ($n++;$n < $cntdoc + && (trim(strtolower($doc[$n])) != '</description>'); + $n++) { + $ary[1] .= $doc[$n]; + } + } + if (trim(strtolower($doc[$n])) == '<summary>') { + $ary[2] = ''; + for ($n++; $n < $cntdoc + && (trim(strtolower($doc[$n])) != '</summary>'); + $n++) { + $ary[2] .= $doc[$n]; + } + } + } + if (isset($ary)) { + $ary[3] = $n; + } else { + $ary[0] = _("ERROR: Help files are not in the right format!"); + $ary[1] = $ary[0]; + $ary[2] = $ary[0]; + } + return( $ary ); + } else if (!trim(strtolower($doc[$n]))) { + $ary[0] = ''; + $ary[1] = ''; + $ary[2] = ''; + $ary[3] = $n; + } + } + $ary[0] = _("ERROR: Help files are not in the right format!"); + $ary[1] = $ary[0]; + $ary[2] = $ary[0]; + $ary[3] = $n; + return( $ary ); +} + +/**************[ END HELP FUNCTIONS ]******************/ + +echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td','<div style="text-align: center;"><b>' . _("Help") .'</b></div>', 'center', $color[0] ) + ) , + 'center', '', 'width="95%" cellpadding="1" cellspacing="2" border="0"' ); + +do_hook('help_top'); + +echo html_tag( 'table', '', 'center', '', 'width="90%" cellpadding="0" cellspacing="10" border="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td' ); + +if (!isset($squirrelmail_language)) { + $squirrelmail_language = 'en_US'; +} + +if (file_exists("../help/$squirrelmail_language")) { + $user_language = $squirrelmail_language; +} else if (file_exists('../help/en_US')) { + error_box(_("Help is not available in the selected language. It will be displayed in English instead."), $color); + echo '<br />'; + $user_language = 'en_US'; +} else { + error_box( _("Help is not available. Please contact your system administrator for assistance."), $color ); + echo '</td></tr></table>'; + exit; +} + + +/* take the chapternumber from the GET-vars, + * else see if we can get a relevant chapter from the referer */ +$chapter = 0; + +if ( sqgetGlobalVar('chapter', $temp, SQ_GET) ) { + $chapter = (int) $temp; +} elseif ( sqgetGlobalVar('HTTP_REFERER', $temp, SQ_SERVER) ) { + $ref = strtolower($temp); + + $contexts = array ( 'src/compose' => 4, 'src/addr' => 5, + 'src/folders' => 6, 'src/options' => 7, 'src/right_main' => 2, + 'src/read_body' => 3, 'src/search' => 8 ); + + foreach($contexts as $path => $chap) { + if(strpos($ref, $path)) { + $chapter = $chap; + break; + } + } +} + +if ( $chapter == 0 || !isset( $helpdir[$chapter-1] ) ) { + // Initialise the needed variables. + $toc = array(); + + // Get the chapter numbers, title and decriptions. + for ($i=0, $cnt = count($helpdir); $i < $cnt; $i++) { + if (file_exists("../help/$user_language/$helpdir[$i]")) { + // First try the selected language. + $doc = file("../help/$user_language/$helpdir[$i]"); + $help_info = get_info($doc, 0); + $toc[] = array($i+1, $help_info[0], $help_info[2]); + } elseif (file_exists("../help/en_US/$helpdir[$i]")) { + // If the selected language can't be found, try English. + $doc = file("../help/en_US/$helpdir[$i]"); + $help_info = get_info($doc, 0); + $toc[] = array($i+1, $help_info[0], + _("This chapter is not available in the selected language. It will be displayed in English instead.") . + '<br />' . $help_info[2]); + } else { + // If English can't be found, the chapter went MIA. + $toc[] = array($i+1, _("This chapter is missing"), + sprintf(_("For some reason, chapter %s is not available."), $i+1)); + } + } + + // Write the TOC header + echo html_tag( 'table', '', 'center', '', 'cellpadding="0" cellspacing="0" border="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td' ) . + '<div style="text-align: center;"><b>' . _("Table of Contents") . '</b></div><br />'; + echo html_tag( 'ol' ); + + // Write the TOC chapters. + // FIXME: HTML code is not compliant. + for ($i=0, $cnt = count($toc); $i < $cnt; $i++) { + echo '<li><a href="../src/help.php?chapter=' . $toc[$i][0]. '">' . + $toc[$i][1] . '</a>' . html_tag( 'ul', $toc[$i][2] ); + } + + // Provide hook for external help scripts. + do_hook('help_chapter'); + + // Write the TOC footer. + echo '</ol></td></tr></table>'; +} else { + // Initialise the needed variables. + $display_chapter = TRUE; + + // Get the chapter. + if (file_exists("../help/$user_language/" . $helpdir[$chapter-1])) { + // First try the selected language. + $doc = file("../help/$user_language/" . $helpdir[$chapter-1]); + } elseif (file_exists("../help/en_US/" . $helpdir[$chapter-1])) { + // If the selected language can't be found, try English. + $doc = file("../help/en_US/" . $helpdir[$chapter-1]); + error_box(_("This chapter is not available in the selected language. It will be displayed in English instead."), $color); + echo '<br />'; + } else { + // If English can't be found, the chapter went MIA. + $display_chapter = FALSE; + } + + // Write the chpater header. + echo '<div style="text-align: center;"><small>'; + if ($chapter <= 1){ + echo '<font color="' . $color[9] . '">' . _("Previous") + . '</font> | '; + } else { + echo '<a href="../src/help.php?chapter=' . ($chapter-1) + . '">' . _("Previous") . '</a> | '; + } + echo '<a href="../src/help.php">' . _("Table of Contents") . '</a>'; + if ($chapter >= count($helpdir)){ + echo ' | <font color="' . $color[9] . '">' . _("Next") . '</font>'; + } else { + echo ' | <a href="../src/help.php?chapter=' . ($chapter+1) + . '">' . _("Next") . '</a>'; + } + echo '</small></div><br />'; + + // Write the chapter. + if ($display_chapter) { + // If there is a valid chapter, display it. + $help_info = get_info($doc, 0); + echo '<font size="5"><b>' . $chapter . ' - ' . $help_info[0] + . '</b></font><br /><br />'; + + if (isset($help_info[1]) && $help_info[1]) { + echo $help_info[1]; + } else { + echo html_tag( 'p', $help_info[2], 'left' ); + } + + $section = 0; + for ($n = $help_info[3], $cnt = count($doc); $n < $cnt; $n++) { + $section++; + $help_info = get_info($doc, $n); + echo "<b>$chapter.$section - $help_info[0]</b>" . + $help_info[1]; + $n = $help_info[3]; + } + + echo '<br /><div style="text-align: center;"><a href="#pagetop">' . _("Top") . '</a></div>'; + } else { + // If the help file went MIA, display an error message. + error_box(sprintf(_("For some reason, chapter %s is not available."), $chapter), $color); + } +} + +do_hook('help_bottom'); + +echo html_tag( 'tr', + html_tag( 'td', ' ', 'left', $color[0] ) + ); + +?> +</table></body></html> \ No newline at end of file diff --git a/ehcp/webmail2/src/image.php b/ehcp/webmail2/src/image.php new file mode 100644 index 0000000..3338d40 --- /dev/null +++ b/ehcp/webmail2/src/image.php @@ -0,0 +1,68 @@ +<?php + +/** + * image.php + * + * This file shows an attached image + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: image.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the image page */ +define('PAGE_NAME', 'image'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/date.php'); +require_once(SM_PATH . 'functions/page_header.php'); +require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'include/load_prefs.php'); + +displayPageHeader($color, 'None'); + +/* globals */ +if ( sqgetGlobalVar('passed_id', $temp, SQ_GET) ) { + $passed_id = (int) $temp; +} +sqgetGlobalVar('mailbox', $mailbox, SQ_GET); +sqgetGlobalVar('ent_id', $ent_id, SQ_GET); +sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER); +/* end globals */ + +echo '<br />' . + '<table width="100%" border="0" cellspacing="0" cellpadding="2" align="center">' . + "\n" . + '<tr><td bgcolor="' . $color[0] . '">' . + '<b><center>' . + _("Viewing an image attachment") . " - "; + +$msg_url = 'read_body.php?' . $QUERY_STRING; +$msg_url = set_url_var($msg_url, 'ent_id', 0); +echo '<a href="'.$msg_url.'">'. _("View message") . '</a>'; + + +$DownloadLink = '../src/download.php?passed_id=' . $passed_id . + '&mailbox=' . urlencode($mailbox) . + '&ent_id=' . urlencode($ent_id) . '&absolute_dl=true'; +?> +</b></td></tr> +<tr><td align="center"> +<a href="<?php echo $DownloadLink; ?>"><?php echo _("Download this as a file"); ?></a> +<br /> </td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" align="center"> +<tr><td bgcolor="<?php echo $color[4]; ?>"> +<img src="<?php echo $DownloadLink; ?>" /> + +</td></tr></table> +</body></html> \ No newline at end of file diff --git a/ehcp/webmail2/src/index.php b/ehcp/webmail2/src/index.php new file mode 100644 index 0000000..ffd0105 --- /dev/null +++ b/ehcp/webmail2/src/index.php @@ -0,0 +1,18 @@ +<?php + +/** + * index.php + * + * This file simply takes any attempt to view source files and sends those + * people to the login screen. At this point no attempt is made to see if the + * person is logged in or not. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: index.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +header('Location: ../index.php'); + +?> \ No newline at end of file diff --git a/ehcp/webmail2/src/left_main.php b/ehcp/webmail2/src/left_main.php new file mode 100644 index 0000000..c212d91 --- /dev/null +++ b/ehcp/webmail2/src/left_main.php @@ -0,0 +1,478 @@ +<?php + +/** + * left_main.php + * + * This is the code for the left bar. The left bar shows the folders + * available, and has cookie information. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: left_main.php 14119 2011-07-12 04:36:01Z pdontthink $ + * @package squirrelmail + */ + +/** This is the left_main page */ +define('PAGE_NAME', 'left_main'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/page_header.php'); +require_once(SM_PATH . 'functions/html.php'); + +/* These constants are used for folder stuff. */ +define('SM_BOX_UNCOLLAPSED', 0); +define('SM_BOX_COLLAPSED', 1); + +/* --------------------- FUNCTIONS ------------------------- */ + +function formatMailboxName($imapConnection, $box_array) { + + global $folder_prefix, $trash_folder, $sent_folder, + $color, $move_to_sent, $move_to_trash, + $unseen_notify, $unseen_type, $collapse_folders, + $draft_folder, $save_as_draft, + $use_special_folder_color; + $real_box = $box_array['unformatted']; + $mailbox = str_replace(' ','',$box_array['formatted']); + $mailboxURL = urlencode($real_box); + + /* Strip down the mailbox name. */ + if (preg_match('/^( *)([^ ]*)$/', $mailbox, $regs)) { + $mailbox = $regs[2]; + } + $unseen = 0; + $status = array('',''); + if (($unseen_notify == 2 && $real_box == 'INBOX') || + $unseen_notify == 3) { + $tmp_status = create_unseen_string($real_box, $box_array, $imapConnection, $unseen_type ); + if ($status !== false) { + $status = $tmp_status; + } + } + list($unseen_string, $unseen) = $status; + $special_color = ($use_special_folder_color && isSpecialMailbox($real_box)); + + /* Start off with a blank line. */ + $line = ''; + + /* If there are unseen message, bold the line. */ + if ($unseen > 0) { $line .= '<b>'; } + + /* Create the link for this folder. */ + if ($status !== false) { + $line .= '<a href="right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox='. + $mailboxURL.'" target="right" style="text-decoration:none">'; + } + if ($special_color) { + $line .= "<font color=\"$color[11]\">"; + } + if ( $mailbox == 'INBOX' ) { + $line .= _("INBOX"); + } else { + $line .= str_replace(array(' ','<','>'),array(' ','<','>'),$mailbox); + } + if ($special_color == TRUE) + $line .= '</font>'; + if ($status !== false) { + $line .= '</a>'; + } + + /* If there are unseen message, close bolding. */ + if ($unseen > 0) { $line .= "</b>"; } + + /* Print unseen information. */ + if ($unseen_string != '') { + $line .= " <small>$unseen_string</small>"; + } + + /* If it's the trash folder, show a purge link when needed */ + if (($move_to_trash) && ($real_box == $trash_folder)) { + if (! isset($numMessages)) { + $numMessages = sqimap_get_num_messages($imapConnection, $real_box); + } + + if (($numMessages > 0) or ($box_array['parent'] == 1)) { + $urlMailbox = urlencode($real_box); + $line .= "\n<small>\n" . + '  (<a href="empty_trash.php?smtoken=' . sm_generate_security_token() . '" style="text-decoration:none">'._("Purge").'</a>)' . + '</small>'; + } + } + + $line .= concat_hook_function('left_main_after_each_folder', + array(isset($numMessages) ? $numMessages : '', + $real_box, $imapConnection)); + + /* Return the final product. */ + return ($line); +} + +/** + * Recursive function that computes the collapsed status and parent + * (or not parent) status of this box, and the visiblity and collapsed + * status and parent (or not parent) status for all children boxes. + */ +function compute_folder_children(&$parbox, $boxcount) { + global $boxes, $data_dir, $username, $collapse_folders; + $nextbox = $parbox + 1; + + /* Retreive the name for the parent box. */ + $parbox_name = $boxes[$parbox]['unformatted']; + + /* 'Initialize' this parent box to childless. */ + $boxes[$parbox]['parent'] = FALSE; + + /* Compute the collapse status for this box. */ + if( isset($collapse_folders) && $collapse_folders ) { + $collapse = getPref($data_dir, $username, 'collapse_folder_' . $parbox_name); + $collapse = ($collapse == '' ? SM_BOX_UNCOLLAPSED : $collapse); + } else { + $collapse = SM_BOX_UNCOLLAPSED; + } + $boxes[$parbox]['collapse'] = $collapse; + + /* Otherwise, get the name of the next box. */ + if (isset($boxes[$nextbox]['unformatted'])) { + $nextbox_name = $boxes[$nextbox]['unformatted']; + } else { + $nextbox_name = ''; + } + + /* Compute any children boxes for this box. */ + while (($nextbox < $boxcount) && + (is_parent_box($boxes[$nextbox]['unformatted'], $parbox_name))) { + + /* Note that this 'parent' box has at least one child. */ + $boxes[$parbox]['parent'] = TRUE; + + /* Compute the visiblity of this box. */ + $boxes[$nextbox]['visible'] = ($boxes[$parbox]['visible'] && + ($boxes[$parbox]['collapse'] != SM_BOX_COLLAPSED)); + + /* Compute the visibility of any child boxes. */ + compute_folder_children($nextbox, $boxcount); + } + + /* Set the parent box to the current next box. */ + $parbox = $nextbox; +} + +/** + * Create the link for a parent folder that will allow that + * parent folder to either be collapsed or expaned, as is + * currently appropriate. + */ +function create_collapse_link($boxnum) { + global $boxes, $imapConnection, $unseen_notify, $color; + $mailbox = urlencode($boxes[$boxnum]['unformatted']); + + /* Create the link for this collapse link. */ + $link = '<a target="left" style="text-decoration:none" ' . + 'href="left_main.php?'; + if ($boxes[$boxnum]['collapse'] == SM_BOX_COLLAPSED) { + $link .= "unfold=$mailbox\">+"; + } else { + $link .= "fold=$mailbox\">-"; + } + $link .= '</a>'; + + /* Return the finished product. */ + return ($link); +} + +/** + * create_unseen_string: + * + * Create unseen and total message count for both this folder and + * it's subfolders. + * + * @param string $boxName name of the current mailbox + * @param array $boxArray array for the current mailbox + * @param $imapConnection current imap connection in use + * @return array[0] unseen message string (for display) + * @return array[1] unseen message count + */ +function create_unseen_string($boxName, $boxArray, $imapConnection, $unseen_type) { + global $boxes, $unseen_type, $color, $unseen_cum; + + /* Initialize the return value. */ + $result = array(0,0); + + /* Initialize the counts for this folder. */ + $boxUnseenCount = 0; + $boxMessageCount = 0; + $totalUnseenCount = 0; + $totalMessageCount = 0; + + /* Collect the counts for this box alone. */ + $status = sqimap_status_messages($imapConnection, $boxName); + $boxUnseenCount = $status['UNSEEN']; + if ($boxUnseenCount === false) { + return false; + } + if ($unseen_type == 2) { + $boxMessageCount = $status['MESSAGES']; + } + + /* Initialize the total counts. */ + + if ($boxArray['collapse'] == SM_BOX_COLLAPSED && $unseen_cum) { + /* Collect the counts for this boxes subfolders. */ + $curBoxLength = strlen($boxName); + $boxCount = count($boxes); + + for ($i = 0; $i < $boxCount; ++$i) { + /* Initialize the counts for this subfolder. */ + $subUnseenCount = 0; + $subMessageCount = 0; + + /* Collect the counts for this subfolder. */ + if (($boxName != $boxes[$i]['unformatted']) + && (substr($boxes[$i]['unformatted'], 0, $curBoxLength) == $boxName) + && !in_array('noselect', $boxes[$i]['flags'])) { + $status = sqimap_status_messages($imapConnection, $boxes[$i]['unformatted']); + $subUnseenCount = $status['UNSEEN']; + if ($unseen_type == 2) { + $subMessageCount = $status['MESSAGES'];; + } + /* Add the counts for this subfolder to the total. */ + $totalUnseenCount += $subUnseenCount; + $totalMessageCount += $subMessageCount; + } + } + + /* Add the counts for all subfolders to that of the box. */ + $boxUnseenCount += $totalUnseenCount; + $boxMessageCount += $totalMessageCount; + } + + /* And create the magic unseen count string. */ + /* Really a lot more then just the unseen count. */ + if (($unseen_type == 1) && ($boxUnseenCount > 0)) { + $result[0] = "($boxUnseenCount)"; + } else if ($unseen_type == 2) { + $result[0] = "($boxUnseenCount/$boxMessageCount)"; + $result[0] = "<font color=\"$color[11]\">$result[0]</font>"; + } + + /* Set the unseen count to return to the outside world. */ + $result[1] = $boxUnseenCount; + + /* Return our happy result. */ + return ($result); +} + +/** + * This simple function checks if a box is another box's parent. + */ +function is_parent_box($curbox_name, $parbox_name) { + global $delimiter; + + /* Extract the name of the parent of the current box. */ + $curparts = explode($delimiter, $curbox_name); + $curname = array_pop($curparts); + $actual_parname = implode($delimiter, $curparts); + $actual_parname = substr($actual_parname,0,strlen($parbox_name)); + + /* Compare the actual with the given parent name. */ + return ($parbox_name == $actual_parname); +} + + +/* -------------------- MAIN ------------------------ */ + +/* get globals */ +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); + +sqgetGlobalVar('fold', $fold, SQ_GET); +sqgetGlobalVar('unfold', $unfold, SQ_GET); +sqgetGlobalVar('auto_create_done',$auto_create_done,SQ_SESSION); + +/* end globals */ + +// Disable browser caching // +header('Cache-Control: no-cache, no-store, must-revalidate'); +header('Pragma: no-cache'); +header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); + +// open a connection on the imap port (143) +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10); // the 10 is to hide the output + +/** + * Using stristr since older preferences may contain "None" and "none". + */ +if (isset($left_refresh) && ($left_refresh != '') && + !stristr($left_refresh, 'none')){ + $xtra = "\n<meta http-equiv=\"REFRESH\" content=\"$left_refresh;URL=left_main.php\">\n"; +} else { + $xtra = ''; +} + +displayHtmlHeader( $org_title, $xtra ); + +/* If requested and not yet complete, attempt to autocreate folders. */ +if ($auto_create_special && !$auto_create_done) { + $autocreate = array($sent_folder, $trash_folder, $draft_folder); + foreach( $autocreate as $folder ) { + if (($folder != '') && ($folder != 'none')) { + if ( !sqimap_mailbox_exists($imapConnection, $folder)) { + sqimap_mailbox_create($imapConnection, $folder, ''); + } else if (!sqimap_mailbox_is_subscribed($imapConnection, $folder)) { + sqimap_subscribe($imapConnection, $folder); + } + } + } + + /* Let the world know that autocreation is complete! Hurrah! */ + $auto_create_done = TRUE; + sqsession_register($auto_create_done, 'auto_create_done'); + /* retrieve the mailboxlist. We do this at a later stage again but if + the right_frame loads faster then the second call retrieves a cached + version of the mailboxlist without the newly created folders. + The second parameter forces a non cached mailboxlist return. + */ + $boxes = sqimap_mailbox_list($imapConnection,true); +} + +echo "\n<body bgcolor=\"$color[3]\" text=\"$color[6]\" link=\"$color[6]\" vlink=\"$color[6]\" alink=\"$color[6]\">\n"; + +do_hook('left_main_before'); + +echo "\n\n" . html_tag( 'table', '', 'left', '', 'border="0" cellspacing="0" cellpadding="0" width="99%"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'left' ) . + html_tag( 'table', '', '', '', 'border="0" cellspacing="0" cellpadding="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center' ) . + '<font size="4"><b>'. _("Folders") . "</b><br /></font>\n\n"; + +if ($date_format != 6) { + /* First, display the clock. */ + if ($hour_format == 1) { + $hr = 'H:i'; + if ($date_format == 4) { + $hr .= ':s'; + } + } else { + if ($date_format == 4) { + $hr = 'g:i:s a'; + } else { + $hr = 'g:i a'; + } + } + + switch( $date_format ) { + case 0: + $clk = date('Y-m-d '.$hr. ' T', time()); + break; + case 1: + $clk = date('m/d/y '.$hr, time()); + break; + case 2: + $clk = date('d/m/y '.$hr, time()); + break; + case 4: + case 5: + $clk = date($hr, time()); + break; + default: + $clk = getDayAbrv( date( 'w', time() ) ) . date( ', ' . $hr, time() ); + } + $clk = str_replace(' ',' ',$clk); + + echo '<small><span style="white-space: nowrap;">' + . str_replace(' ', ' ', _("Last Refresh")) + . ":</span><br /><span style=\"white-space: nowrap;\">$clk</span></small><br />"; +} + +/* Next, display the refresh button. */ +echo '<small style="white-space: nowrap;">(<a href="../src/left_main.php" target="left">'. + _("Check mail") . '</a>)</small></td></tr></table><br />'; + +/* Lastly, display the folder list. */ +if ( $collapse_folders ) { + /* If directed, collapse or uncollapse a folder. */ + if (isset($fold)) { + setPref($data_dir, $username, 'collapse_folder_' . $fold, SM_BOX_COLLAPSED); + } else if (isset($unfold)) { + setPref($data_dir, $username, 'collapse_folder_' . $unfold, SM_BOX_UNCOLLAPSED); + } +} + +sqgetGlobalVar('force_refresh',$force_refresh,SQ_GET); +if (!isset($boxes)) { // auto_create_done + $boxes = sqimap_mailbox_list($imapConnection,$force_refresh); +} +/* Prepare do do out collapsedness and visibility computation. */ +$curbox = 0; +$boxcount = count($boxes); + +/* Compute the collapsedness and visibility of each box. */ + +while ($curbox < $boxcount) { + $boxes[$curbox]['visible'] = TRUE; + compute_folder_children($curbox, $boxcount); +} + +for ($i = 0; $i < count($boxes); $i++) { + if ( $boxes[$i]['visible'] ) { + $mailbox = $boxes[$i]['formatted']; + // remove folder_prefix using substr so folders aren't indented unnecessarily + $mblevel = substr_count(substr($boxes[$i]['unformatted'], strlen($folder_prefix)), $delimiter) + 1; + + /* Create the prefix for the folder name and link. */ + $prefix = str_repeat(' ',$mblevel); + if (isset($collapse_folders) && $collapse_folders && $boxes[$i]['parent']) { + $prefix = str_replace(' ',' ',substr($prefix,0,strlen($prefix)-2)). + create_collapse_link($i) . ' '; + } else { + $prefix = str_replace(' ',' ',$prefix); + } + $line = "<span style=\"white-space: nowrap;\"><tt>$prefix</tt>"; + + /* Add the folder name and link. */ + if (! isset($color[15])) { + $color[15] = $color[6]; + } + + if (in_array('noselect', $boxes[$i]['flags'])) { + if( isSpecialMailbox( $boxes[$i]['unformatted']) ) { + $line .= "<font color=\"$color[11]\">"; + } else { + $line .= "<font color=\"$color[15]\">"; + } + if (preg_match('/^( *)([^ ]*)/', $mailbox, $regs)) { + $mailbox = str_replace(' ','',$mailbox); + $line .= str_replace(' ', ' ', $mailbox); + } + $line .= '</font>'; + } else { + $line .= formatMailboxName($imapConnection, $boxes[$i]); + } + + /* Put the final touches on our folder line. */ + $line .= "</span><br />\n"; + + /* Output the line for this folder. */ + echo $line; + } +} + +do_hook('left_main_after'); +sqimap_logout($imapConnection); + +?> +</td></tr></table> +</body></html> diff --git a/ehcp/webmail2/src/login.php b/ehcp/webmail2/src/login.php new file mode 100644 index 0000000..04afeba --- /dev/null +++ b/ehcp/webmail2/src/login.php @@ -0,0 +1,248 @@ +<?php + +/** + * login.php -- simple login screen + * + * This a simple login screen. Some housekeeping is done to clean + * cookies and find language. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: login.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the login page */ +define('PAGE_NAME', 'login'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/i18n.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/constants.php'); +require_once(SM_PATH . 'functions/page_header.php'); +require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'functions/forms.php'); + +/** + * $squirrelmail_language is set by a cookie when the user selects + * language and logs out + */ +set_up_language($squirrelmail_language, TRUE, TRUE); + +/** + * In case the last session was not terminated properly, make sure + * we get a new one, but make sure we preserve session_expired_* + */ +$sep = ''; +$sel = ''; +sqGetGlobalVar('session_expired_post', $sep, SQ_SESSION); +sqGetGlobalVar('session_expired_location', $sel, SQ_SESSION); + +/* blow away session */ +sqsession_destroy(); + +/** + * in some rare instances, the session seems to stick + * around even after destroying it (!!), so if it does, + * we'll manually flatten the $_SESSION data + */ +if (!empty($_SESSION)) { + $_SESSION = array(); +} + +/** + * Allow administrators to define custom session handlers + * for SquirrelMail without needing to change anything in + * php.ini (application-level). + * + * In config_local.php, admin needs to put: + * + * $custom_session_handlers = array( + * 'my_open_handler', + * 'my_close_handler', + * 'my_read_handler', + * 'my_write_handler', + * 'my_destroy_handler', + * 'my_gc_handler', + * ); + * session_module_name('user'); + * session_set_save_handler( + * $custom_session_handlers[0], + * $custom_session_handlers[1], + * $custom_session_handlers[2], + * $custom_session_handlers[3], + * $custom_session_handlers[4], + * $custom_session_handlers[5] + * ); + * + * We need to replicate that code once here because PHP has + * long had a bug that resets the session handler mechanism + * when the session data is also destroyed. Because of this + * bug, even administrators who define custom session handlers + * via a PHP pre-load defined in php.ini (auto_prepend_file) + * will still need to define the $custom_session_handlers array + * in config_local.php. + */ +global $custom_session_handlers; +if (!empty($custom_session_handlers)) { + $open = $custom_session_handlers[0]; + $close = $custom_session_handlers[1]; + $read = $custom_session_handlers[2]; + $write = $custom_session_handlers[3]; + $destroy = $custom_session_handlers[4]; + $gc = $custom_session_handlers[5]; + session_module_name('user'); + session_set_save_handler($open, $close, $read, $write, $destroy, $gc); +} + +/* put session_expired_* variables back in session */ +sqsession_is_active(); +if (!empty($sel)) { + sqsession_register($sel, 'session_expired_location'); + if (!empty($sep)) + sqsession_register($sep, 'session_expired_post'); +} + +// Disable Browser Caching +// +header('Cache-Control: no-cache, no-store, must-revalidate'); +header('Pragma: no-cache'); +header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); + +do_hook('login_cookie'); + +$loginname_value = (sqGetGlobalVar('loginname', $loginname) ? htmlspecialchars($loginname) : ''); + +/* Output the javascript onload function. */ + +$header = "<script language=\"JavaScript\" type=\"text/javascript\">\n" . + "<!--\n". + " var alreadyFocused = false;\n". + " function squirrelmail_loginpage_onload() {\n". + " document.login_form.js_autodetect_results.value = '" . SMPREF_JS_ON . "';\n". + " if (alreadyFocused) return;\n". + " var textElements = 0;\n". + " for (i = 0; i < document.login_form.elements.length; i++) {\n". + " if (document.login_form.elements[i].type == \"text\" || document.login_form.elements[i].type == \"password\") {\n". + " textElements++;\n". + " if (textElements == " . (isset($loginname) ? 2 : 1) . ") {\n". + " document.login_form.elements[i].focus();\n". + " break;\n". + " }\n". + " }\n". + " }\n". + " }\n". + "// -->\n". + "</script>\n"; +$custom_css = 'none'; + +// Load default theme if possible +if (@file_exists($theme[$theme_default]['PATH'])) + @include ($theme[$theme_default]['PATH']); + +if (! isset($color) || ! is_array($color)) { + // Add default color theme, if theme loading fails + $color = array(); + $color[0] = '#dcdcdc'; /* light gray TitleBar */ + $color[1] = '#800000'; /* red */ + $color[2] = '#cc0000'; /* light red Warning/Error Messages */ + $color[4] = '#ffffff'; /* white Normal Background */ + $color[7] = '#0000cc'; /* blue Links */ + $color[8] = '#000000'; /* black Normal text */ +} + +displayHtmlHeader( "$org_name - " . _("Login"), $header, FALSE ); + +echo "<body text=\"$color[8]\" bgcolor=\"$color[4]\" link=\"$color[7]\" vlink=\"$color[7]\" alink=\"$color[7]\" onLoad=\"squirrelmail_loginpage_onload();\">" . + "\n" . addForm('redirect.php', 'post', 'login_form'); + +$username_form_name = 'login_username'; +$password_form_name = 'secretkey'; +do_hook('login_top'); + + +if(sqgetGlobalVar('mailtodata', $mailtodata)) { + $mailtofield = addHidden('mailtodata', $mailtodata); +} else { + $mailtofield = ''; +} + +/* If they don't have a logo, don't bother.. */ +if (isset($org_logo) && $org_logo) { + /* Display width and height like good little people */ + $width_and_height = ''; + if (isset($org_logo_width) && is_numeric($org_logo_width) && + $org_logo_width>0) { + $width_and_height = " width=\"$org_logo_width\""; + } + if (isset($org_logo_height) && is_numeric($org_logo_height) && + $org_logo_height>0) { + $width_and_height .= " height=\"$org_logo_height\""; + } +} + +echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + '<center>'. + ( isset($org_logo) && $org_logo + ? '<img src="' . $org_logo . '" alt="' . + sprintf(_("%s Logo"), $org_name) .'"' . $width_and_height . + ' /><br />' . "\n" + : '' ). + ( (isset($hide_sm_attributions) && $hide_sm_attributions) ? '' : + '<small>' . sprintf (_("SquirrelMail version %s"), $version) . '<br />' ."\n". + ' ' . _("By the SquirrelMail Project Team") . '<br /></small>' . "\n" ) . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + '<b>' . sprintf (_("%s Login"), $org_name) . "</b>\n", + 'center', $color[0] ) + ) . + html_tag( 'tr', + html_tag( 'td', "\n" . + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + _("Name:") , + 'right', '', 'width="30%"' ) . + html_tag( 'td', + addInput($username_form_name, $loginname_value, 0, 0, ' onfocus="alreadyFocused=true;"'), + 'left', '', 'width="70%"' ) + ) . "\n" . + html_tag( 'tr', + html_tag( 'td', + _("Password:") , + 'right', '', 'width="30%"' ) . + html_tag( 'td', + addPwField($password_form_name, null, ' onfocus="alreadyFocused=true;"'). + addHidden('js_autodetect_results', SMPREF_JS_OFF). + $mailtofield . + addHidden('just_logged_in', '1'), + 'left', '', 'width="70%"' ) + ) , + 'center', $color[4], 'border="0" width="100%"' ) , + 'left',$color[4] ) + ) . + html_tag( 'tr', + html_tag( 'td', + '<center>'. addSubmit(_("Login")) .'</center>', + 'left' ) + ), + '', $color[4], 'border="0" width="350"' ) . '</center>', + 'center' ) + ) , +'', $color[4], 'border="0" cellspacing="0" cellpadding="0" width="100%"' ); +do_hook('login_form'); +echo '</form>' . "\n"; + +do_hook('login_bottom'); +?> +</body></html> diff --git a/ehcp/webmail2/src/mailto.php b/ehcp/webmail2/src/mailto.php new file mode 100644 index 0000000..50a688d --- /dev/null +++ b/ehcp/webmail2/src/mailto.php @@ -0,0 +1,121 @@ +<?php + +/** + * mailto.php -- mailto: url handler + * + * This page facilitates handling mailto: links in SquirrelMail. It checks + * to see if we're logged in, and if we are, it refers the user to the + * compose screen (embedded in a normal, full SquirrelMail interface) with + * the mailto: data auto-populated in the corresponding fields. If there + * is no user currently logged in, the user is redirected to the login screen + * first, but after login, the compose screen is shown with the correct + * fields pre-populated. + * + * If the administrator desires, $compose_only can be set to TRUE, in which + * case only a compose screen will show, not embedded in the normal + * SquirrelMail interface. + * + * If the administrator wants to force a re-login every time a mailto: link + * is clicked on (no matter if a user was already logged in), set $force_login + * to TRUE. + * + * Use the following URI when configuring a computer to handle mailto: links + * by using SquirrelMail: + * + * http://<your server>/<squirrelmail base dir>/src/mailto.php?emailaddress=%1 + * + * see ../contrib/squirrelmail.mailto.NT2KXP.reg for a Windows Registry file + * that will set this up in the most robust manner. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: mailto.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the mailto page */ +define('PAGE_NAME', 'mailto'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'functions/global.php'); + + +// Force users to login each time? Setting this to TRUE does NOT mean +// that if no user is logged in that it won't require a correct login +// first! Instead, setting it to TRUE will log out anyone currently +// logged in and force a re-login. Setting this to FALSE will still +// require a login if no one is logged in, but it will allow you to go +// directly to compose your message if you are already logged in. +// +// Note, however, that depending on how the client browser manages +// sessions and how the client operating system is set to handle +// mailto: links, you may have to log in every time no matter what +// (IE under WinXP appears to pop up a new window and thus always +// start a new session; Firefox under WinXP seems to start a new tab +// which will find a current login if one exists). +// +$force_login = FALSE; + + +// Open only the compose window, meaningless if $force_login is TRUE +// +$compose_only = FALSE; + + +// Disable Browser Caching +// +header('Cache-Control: no-cache, no-store, must-revalidate'); +header('Pragma: no-cache'); +header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); + +$trtable = array('cc' => 'cc', + 'bcc' => 'bcc', + 'body' => 'body', + 'subject' => 'subject'); +$url = ''; + +$data = array(); + +if (sqgetGlobalVar('emailaddress', $emailaddress)) { + $emailaddress = trim($emailaddress); + if (stristr($emailaddress, 'mailto:')) { + $emailaddress = substr($emailaddress, 7); + } + if (strpos($emailaddress, '?') !== FALSE) { + list($emailaddress, $a) = explode('?', $emailaddress, 2); + if (strlen(trim($a)) > 0) { + $a = explode('=', $a, 2); + $data[strtolower($a[0])] = $a[1]; + } + } + $data['to'] = $emailaddress; + + /* CC, BCC, etc could be any case, so we'll fix them here */ + foreach($_GET as $k=>$g) { + $k = strtolower($k); + if (isset($trtable[$k])) { + $k = $trtable[$k]; + $data[$k] = $g; + } + } +} +sqsession_is_active(); + +if (!$force_login && sqsession_is_registered('user_is_logged_in')) { + if ($compose_only) { + $redirect = 'compose.php?mailtodata=' . urlencode(serialize($data)); + } else { + $redirect = 'webmail.php?right_frame=compose.php&mailtodata=' . urlencode(serialize($data)); + } +} else { + $redirect = 'login.php?mailtodata=' . urlencode(serialize($data)); +} + +session_write_close(); +header('Location: ' . get_location() . '/' . $redirect); diff --git a/ehcp/webmail2/src/move_messages.php b/ehcp/webmail2/src/move_messages.php new file mode 100644 index 0000000..9ffc0a2 --- /dev/null +++ b/ehcp/webmail2/src/move_messages.php @@ -0,0 +1,284 @@ +<?php + +/** + * move_messages.php + * + * Enables message moving between folders on the IMAP server. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: move_messages.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the move_messages page */ +define('PAGE_NAME', 'move_messages'); + +/* Path for SquirrelMail required files. */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/html.php'); + +global $compose_new_win; + +if ( !sqgetGlobalVar('composesession', $composesession, SQ_SESSION) ) { + $composesession = 0; +} + +function attachSelectedMessages($msg, $imapConnection) { + global $username, $attachment_dir, $startMessage, + $data_dir, $composesession, $uid_support, $mailbox, + $msgs, $thread_sort_messages, $allow_server_sort, $show_num, + $compose_messages; + + if (!isset($compose_messages)) { + $compose_messages = array(); + sqsession_register($compose_messages,'compose_messages'); + } + + if (!$composesession) { + $composesession = 1; + sqsession_register($composesession,'composesession'); + } else { + $composesession++; + sqsession_register($composesession,'composesession'); + } + + $hashed_attachment_dir = getHashedDir($username, $attachment_dir, $composesession); + + if ($thread_sort_messages || $allow_server_sort) { + $start_index=0; + } else { + $start_index = ($startMessage-1) * $show_num; + } + + $i = 0; + $j = 0; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + + $composeMessage = new Message(); + $rfc822_header = new Rfc822Header(); + $composeMessage->rfc822_header = $rfc822_header; + $composeMessage->reply_rfc822_header = ''; + + while ($j < count($msg)) { + if (isset($msg[$i])) { + $id = $msg[$i]; + + $body_a = sqimap_run_command($imapConnection, "FETCH $id RFC822",true, $response, $readmessage, $uid_support); + + if ($response == 'OK') { + $message = sqimap_get_message($imapConnection, $id, $mailbox); + + // fetch the subject for the message from the object + // + $subject = $message->rfc822_header->subject; + + // use subject for file name + // + if ( empty($subject) ) + $filename = "untitled-".$message->entity_id; + else + $filename = $subject; + $filename .= '.msg'; + $filename = decodeHeader($filename, false, false); + + // figure out a subject for new message + // + $subject = decodeHeader($subject, false, false, true); + $subject = trim($subject); + if (substr(strtolower($subject), 0, 4) != 'fwd:') { + $subject = 'Fwd: ' . $subject; + } + + array_shift($body_a); + array_pop($body_a); + $body = implode('', $body_a); + $body .= "\r\n"; + + $localfilename = GenerateRandomString(32, 'FILE', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + while (file_exists($full_localfilename)) { + $localfilename = GenerateRandomString(32, 'FILE', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + } + + $fp = fopen( $full_localfilename, 'wb'); + fwrite ($fp, $body); + fclose($fp); + $composeMessage->initAttachment('message/rfc822',$filename, + $localfilename); + $composeMessage->rfc822_header->subject = $subject; + } + $j++; + } + $i++; + } + $compose_messages[$composesession] = $composeMessage; + sqsession_register($compose_messages,'compose_messages'); + session_write_close(); + return $composesession; +} + + + +/* get globals */ +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION); + +sqgetGlobalVar('mailbox', $mailbox); +sqgetGlobalVar('startMessage', $startMessage); +sqgetGlobalVar('msg', $msg); + +sqgetGlobalVar('msgs', $msgs, SQ_SESSION); +sqgetGlobalVar('composesession', $composesession, SQ_SESSION); +sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION); + +sqgetGlobalVar('moveButton', $moveButton, SQ_POST); +sqgetGlobalVar('expungeButton', $expungeButton, SQ_POST); +sqgetGlobalVar('targetMailbox', $targetMailbox, SQ_POST); +sqgetGlobalVar('expungeButton', $expungeButton, SQ_POST); +sqgetGlobalVar('undeleteButton', $undeleteButton, SQ_POST); +sqgetGlobalVar('markRead', $markRead, SQ_POST); +sqgetGlobalVar('markUnread', $markUnread, SQ_POST); +sqgetGlobalVar('attache', $attache, SQ_POST); +sqgetGlobalVar('location', $location, SQ_POST); + +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) { + $submitted_token = ''; +} +/* end of get globals */ + +// security check +sm_validate_security_token($submitted_token, 3600, TRUE); + +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$mbx_response=sqimap_mailbox_select($imapConnection, $mailbox); + +$location = set_url_var($location,'composenew',0,false); +$location = set_url_var($location,'composesession',0,false); +$location = set_url_var($location,'session',0,false); + +// make sure that cache is not used +$location = set_url_var($location,'use_mailbox_cache',0,false); + +/* remember changes to mailbox setting */ +if (!isset($lastTargetMailbox)) { + $lastTargetMailbox = 'INBOX'; +} +if ($targetMailbox != $lastTargetMailbox) { + $lastTargetMailbox = $targetMailbox; + sqsession_register($lastTargetMailbox, 'lastTargetMailbox'); +} +$exception = false; + +do_hook('move_before_move'); + + +/* + Move msg list sorting up here, as it is used several times, + makes it more efficient to do it in one place for the code +*/ +$id = array(); +if (isset($msg) && is_array($msg)) { + foreach( $msg as $key=>$uid ) { + // using foreach removes the risk of infinite loops that was there // + $id[] = $uid; + } +} + +// expunge-on-demand if user isn't using move_to_trash or auto_expunge +if(isset($expungeButton)) { + $cnt = sqimap_mailbox_expunge($imapConnection, $mailbox, true); + if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) { + if ($startMessage > $show_num) { + $location = set_url_var($location,'startMessage',$startMessage-$show_num,false); + } else { + $location = set_url_var($location,'startMessage',1,false); + } + } +} elseif(isset($undeleteButton)) { + // undelete messages if user isn't using move_to_trash or auto_expunge + // Removes \Deleted flag from selected messages + if (count($id)) { + sqimap_toggle_flag($imapConnection, $id, '\\Deleted',false,true); + } else { + $exception = true; + } +} elseif (!isset($moveButton)) { + if (count($id)) { + $cnt = count($id); + if (!isset($attache)) { + if (isset($markRead)) { + sqimap_toggle_flag($imapConnection, $id, '\\Seen',true,true); + } else if (isset($markUnread)) { + sqimap_toggle_flag($imapConnection, $id, '\\Seen',false,true); + } else { + sqimap_msgs_list_delete($imapConnection, $mailbox, $id); + if ($auto_expunge) { + $cnt = sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } + if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) { + if ($startMessage > $show_num) { + $location = set_url_var($location,'startMessage',$startMessage-$show_num, false); + } else { + $location = set_url_var($location,'startMessage',1, false); + } + } + } + } else { + $composesession = attachSelectedMessages($id, $imapConnection); + $location = set_url_var($location, 'session', $composesession, false); + $location = set_url_var($location, 'forward_as_attachment_init', 1, false); + if ($compose_new_win) { + $location = set_url_var($location, 'composenew', 1, false); + } else { + $location = str_replace('search.php','compose.php',$location); + $location = str_replace('right_main.php','compose.php',$location); + } + } + } else { + $exception = true; + } +} else { // Move messages + if (count($id)) { + // move messages only when target mailbox is not the same as source mailbox + if ($mailbox!=$targetMailbox) { + sqimap_msgs_list_move($imapConnection,$id,$targetMailbox); + if ($auto_expunge) { + $cnt = sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } else { + $cnt = 0; + } + + if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) { + if ($startMessage > $show_num) { + $location = set_url_var($location,'startMessage',$startMessage-$show_num, false); + } else { + $location = set_url_var($location,'startMessage',1, false); + } + } + } + } else { + $exception = true; + } +} +// Log out this session +sqimap_logout($imapConnection); +if ($exception) { + displayPageHeader($color, $mailbox); + error_message(_("No messages were selected."), $mailbox, $sort, $startMessage, $color); +} else { + header("Location: $location"); + exit; +} +?> +</body></html> diff --git a/ehcp/webmail2/src/options.php b/ehcp/webmail2/src/options.php new file mode 100644 index 0000000..5581d04 --- /dev/null +++ b/ehcp/webmail2/src/options.php @@ -0,0 +1,500 @@ +<?php + +/** + * options.php + * + * Displays the options page. Pulls from proper user preference files + * and config.php. Displays preferences as selected and other options. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: options.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage prefs + */ + +/** This is the options page */ +define('PAGE_NAME', 'options'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/options.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'functions/forms.php'); + +/*********************************/ +/*** Build the resultant page. ***/ +/*********************************/ + +define('SMOPT_MODE_DISPLAY', 'display'); +define('SMOPT_MODE_SUBMIT', 'submit'); +define('SMOPT_MODE_LINK', 'link'); + +define('SMOPT_PAGE_MAIN', 'main'); +define('SMOPT_PAGE_PERSONAL', 'personal'); +define('SMOPT_PAGE_DISPLAY', 'display'); +define('SMOPT_PAGE_HIGHLIGHT', 'highlight'); +define('SMOPT_PAGE_FOLDER', 'folder'); +define('SMOPT_PAGE_ORDER', 'order'); + +/** + * Save submitted options and calculate the most + * we need to refresh the page + * + * @param string $optpage The name of the page being submitted + * @param array $optpage_data An array of all the submitted options + * + * @return int The highest level of screen refresh needed per + * the options that were changed. This value will + * correspond to the SMOPT_REFRESH_* constants found + * in functions/options.php. + * + */ +function process_optionmode_submit($optpage, $optpage_data) { + /* Initialize the maximum option refresh level. */ + $max_refresh = SMOPT_REFRESH_NONE; + + /* Save each option in each option group. */ + foreach ($optpage_data['options'] as $option_grp) { + foreach ($option_grp['options'] as $option) { + /* Remove Debug Mode Until Needed + echo "name = '$option->name', " + . "value = '$option->value', " + . "new_value = '$option->new_value'\n"; + echo "<br />"; + */ + if ($option->changed()) { + $option->save(); + $max_refresh = max($max_refresh, $option->refresh_level); + } + } + } + + /* Return the max refresh level. */ + return ($max_refresh); +} + +function process_optionmode_link($optpage) { + /* There will be something here, later. */ +} + + +/** + * This function prints out an option page row. + */ +function print_optionpages_row($leftopt, $rightopt = false) { + global $color; + + if ($rightopt) { + $rightopt_name = html_tag( 'td', '<a href="' . $rightopt['url'] . '">' . $rightopt['name'] . '</a>', 'left', $color[9], 'valign="top" width="49%"' ); + $rightopt_desc = html_tag( 'td', $rightopt['desc'], 'left', $color[0], 'valign="top" width="49%"' ); + } else { + $rightopt_name = html_tag( 'td', ' ', 'left', $color[4], 'valign="top" width="49%"' ); + $rightopt_desc = html_tag( 'td', ' ', 'left', $color[4], 'valign="top" width="49%"' ); + } + + echo + html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', "\n" . + html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', + '<a href="' . $leftopt['url'] . '">' . $leftopt['name'] . '</a>' , + 'left', $color[9], 'valign="top" width="49%"' ) . + html_tag( 'td', + ' ' , + 'left', $color[4], 'valign="top" width="2%"' ) . "\n" . + $rightopt_name + ) . "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', + $leftopt['desc'] , + 'left', $color[0], 'valign="top" width="49%"' ) . + html_tag( 'td', + ' ' , + 'left', $color[4], 'valign="top" width="2%"' ) . "\n" . + $rightopt_desc + ) , + '', '', 'width="100%" cellpadding="2" cellspacing="0" border="0"' ) , + 'left', '', 'valign="top"' ) + ) , + '', $color[4], 'width="100%" cellpadding="0" cellspacing="5" border="0"' ); +} + +/* ---------------------------- main ---------------------------- */ + +/* get the globals that we may need */ +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); + +sqgetGlobalVar('optpage', $optpage); +sqgetGlobalVar('optmode', $optmode, SQ_FORM); +sqgetGlobalVar('optpage_data',$optpage_data, SQ_POST); +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_FORM)) { + $submitted_token = ''; +} +/* end of getting globals */ + +/* Make sure we have an Option Page set. Default to main. */ +if ( !isset($optpage) || $optpage == '' ) { + $optpage = SMOPT_PAGE_MAIN; +} else { + $optpage = strip_tags( $optpage ); +} + +/* Make sure we have an Option Mode set. Default to display. */ +if (!isset($optmode)) { + $optmode = SMOPT_MODE_DISPLAY; +} + +/* + * First, set the load information for each option page. + */ + +/* Initialize load information variables. */ +$optpage_name = ''; +$optpage_file = ''; +$optpage_loader = ''; + +/* Set the load information for each page. */ +switch ($optpage) { + case SMOPT_PAGE_MAIN: + break; + case SMOPT_PAGE_PERSONAL: + $optpage_name = _("Personal Information"); + $optpage_file = SM_PATH . 'include/options/personal.php'; + $optpage_loader = 'load_optpage_data_personal'; + $optpage_loadhook = 'optpage_loadhook_personal'; + break; + case SMOPT_PAGE_DISPLAY: + $optpage_name = _("Display Preferences"); + $optpage_file = SM_PATH . 'include/options/display.php'; + $optpage_loader = 'load_optpage_data_display'; + $optpage_loadhook = 'optpage_loadhook_display'; + break; + case SMOPT_PAGE_HIGHLIGHT: + $optpage_name = _("Message Highlighting"); + $optpage_file = SM_PATH . 'include/options/highlight.php'; + $optpage_loader = 'load_optpage_data_highlight'; + $optpage_loadhook = 'optpage_loadhook_highlight'; + break; + case SMOPT_PAGE_FOLDER: + $optpage_name = _("Folder Preferences"); + $optpage_file = SM_PATH . 'include/options/folder.php'; + $optpage_loader = 'load_optpage_data_folder'; + $optpage_loadhook = 'optpage_loadhook_folder'; + break; + case SMOPT_PAGE_ORDER: + $optpage_name = _("Index Order"); + $optpage_file = SM_PATH . 'include/options/order.php'; + $optpage_loader = 'load_optpage_data_order'; + $optpage_loadhook = 'optpage_loadhook_order'; + break; + default: do_hook('optpage_set_loadinfo'); +} + +/**********************************************************/ +/*** Second, load the option information for this page. ***/ +/**********************************************************/ + +if ( !@is_file( $optpage_file ) ) { + $optpage = SMOPT_PAGE_MAIN; +} else if ($optpage != SMOPT_PAGE_MAIN ) { + /* Include the file for this optionpage. */ + + require_once($optpage_file); + + /* Assemble the data for this option page. */ + $optpage_data = array(); + $optpage_data = $optpage_loader(); + do_hook($optpage_loadhook); + $optpage_data['options'] = + create_option_groups($optpage_data['grps'], $optpage_data['vals']); +} + +/***********************************************************/ +/*** Next, process anything that needs to be processed. ***/ +/***********************************************************/ + +// security check before saving anything... +//FIXME: what about SMOPT_MODE_LINK?? +if ($optmode == SMOPT_MODE_SUBMIT) { + sm_validate_security_token($submitted_token, 3600, TRUE); +} + +// set empty error message +$optpage_save_error=array(); + +if ( isset( $optpage_data ) ) { + switch ($optmode) { + case SMOPT_MODE_SUBMIT: + $max_refresh = process_optionmode_submit($optpage, $optpage_data); + break; + case SMOPT_MODE_LINK: + $max_refresh = process_optionmode_link($optpage, $optpage_data); + break; + } +} + +$optpage_title = _("Options"); +if (isset($optpage_name) && ($optpage_name != '')) { + $optpage_title .= " - $optpage_name"; +} + +/*******************************************************************/ +/* DO OLD SAVING OF SUBMITTED OPTIONS. THIS WILL BE REMOVED LATER. */ +/*******************************************************************/ + +/* If in submit mode, select a save hook name and run it. */ +if ($optmode == SMOPT_MODE_SUBMIT) { + /* Select a save hook name. */ + switch ($optpage) { + case SMOPT_PAGE_PERSONAL: + $save_hook_name = 'options_personal_save'; + break; + case SMOPT_PAGE_DISPLAY: + $save_hook_name = 'options_display_save'; + break; + case SMOPT_PAGE_FOLDER: + $save_hook_name = 'options_folder_save'; + break; + default: + $save_hook_name = 'options_save'; + break; + } + + /* Run the options save hook. */ + do_hook($save_hook_name); +} + +/***************************************************************/ +/* Apply logic to decide what optpage we want to display next. */ +/***************************************************************/ + +/* If this is the result of an option page being submitted, then */ +/* show the main page. Otherwise, show whatever page was called. */ + +if ($optmode == SMOPT_MODE_SUBMIT) { + $optpage = SMOPT_PAGE_MAIN; + $optpage_title = _("Options"); +} + +/***************************************************************/ +/* Finally, display whatever page we are supposed to show now. */ +/***************************************************************/ + +displayPageHeader($color, 'None', (isset($optpage_data['xtra']) ? $optpage_data['xtra'] : '')); + +echo html_tag( 'table', '', 'center', $color[0], 'width="95%" cellpadding="1" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'center' ) . + "<b>$optpage_title</b><br />\n". + html_tag( 'table', '', '', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'center', $color[4] ) . "\n"; + +/* + * The main option page has a different layout then the rest of the option + * pages. Therefore, we create it here first, then the others below. + */ +if ($optpage == SMOPT_PAGE_MAIN) { + /**********************************************************/ + /* First, display the results of a submission, if needed. */ + /**********************************************************/ + if ($optmode == SMOPT_MODE_SUBMIT) { + if (!isset($frame_top)) { + $frame_top = '_top'; + } + + if (isset($optpage_save_error) && $optpage_save_error!=array()) { + echo "<font color=\"$color[2]\"><b>" . _("Error(s) occurred while saving your options") . "</b></font><br />\n"; + echo "<ul>\n"; + foreach ($optpage_save_error as $error_message) { + echo '<li><small>' . $error_message . "</small></li>\n"; + } + echo "</ul>\n"; + echo '<b>' . _("Some of your preference changes were not applied.") . "</b><br />\n"; + } else { + /* Display a message indicating a successful save. */ + // i18n: The %s represents the name of the option page saving the options + echo '<b>' . sprintf(_("Successfully Saved Options: %s"), $optpage_name) . "</b><br />\n"; + } + + /* If $max_refresh != SMOPT_REFRESH_NONE, provide a refresh link. */ + if ( !isset( $max_refresh ) ) { + } else if ($max_refresh == SMOPT_REFRESH_FOLDERLIST) { + echo '<a href="../src/left_main.php" target="left">' . _("Refresh Folder List") . '</a><br />'; + } else if ($max_refresh) { + echo '<a href="../src/webmail.php?right_frame=options.php" target="' . $frame_top . '">' . _("Refresh Page") . '</a><br />'; + } + } + /******************************************/ + /* Build our array of Option Page Blocks. */ + /******************************************/ + $optpage_blocks = array(); + + /* Build a section for Personal Options. */ + $optpage_blocks[] = array( + 'name' => _("Personal Information"), + 'url' => 'options.php?optpage=' . SMOPT_PAGE_PERSONAL, + 'desc' => _("This contains personal information about yourself such as your name, your email address, etc."), + 'js' => false + ); + + /* Build a section for Display Options. */ + $optpage_blocks[] = array( + 'name' => _("Display Preferences"), + 'url' => 'options.php?optpage=' . SMOPT_PAGE_DISPLAY, + 'desc' => _("You can change the way that SquirrelMail looks and displays information to you, such as the colors, the language, and other settings."), + 'js' => false + ); + + /* Build a section for Message Highlighting Options. */ + $optpage_blocks[] = array( + 'name' =>_("Message Highlighting"), + 'url' => 'options_highlight.php', + 'desc' =>_("Based upon given criteria, incoming messages can have different background colors in the message list. This helps to easily distinguish who the messages are from, especially for mailing lists."), + 'js' => false + ); + + /* Build a section for Folder Options. */ + $optpage_blocks[] = array( + 'name' => _("Folder Preferences"), + 'url' => 'options.php?optpage=' . SMOPT_PAGE_FOLDER, + 'desc' => _("These settings change the way your folders are displayed and manipulated."), + 'js' => false + ); + + /* Build a section for Index Order Options. */ + $optpage_blocks[] = array( + 'name' => _("Index Order"), + 'url' => 'options_order.php', + 'desc' => _("The order of the message index can be rearranged and changed to contain the headers in any order you want."), + 'js' => false + ); + + /* Build a section for plugins wanting to register an optionpage. */ + do_hook('optpage_register_block'); + + /*****************************************************/ + /* Let's sort Javascript Option Pages to the bottom. */ + /*****************************************************/ + $js_optpage_blocks = array(); + $reg_optpage_blocks = array(); + foreach ($optpage_blocks as $cur_optpage) { + if (!isset($cur_optpage['js']) || !$cur_optpage['js']) { + $reg_optpage_blocks[] = $cur_optpage; + } else if ($javascript_on == SMPREF_JS_ON) { + $js_optpage_blocks[] = $cur_optpage; + } + } + $optpage_blocks = array_merge($reg_optpage_blocks, $js_optpage_blocks); + + /********************************************/ + /* Now, print out each option page section. */ + /********************************************/ + $first_optpage = false; + echo html_tag( 'table', '', '', $color[4], 'width="100%" cellpadding="0" cellspacing="5" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'left', '', 'valign="top"' ) . + html_tag( 'table', '', '', $color[4], 'width="100%" cellpadding="3" cellspacing="0" border="0"' ) . "\n" . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'left' ); + foreach ($optpage_blocks as $next_optpage) { + if ($first_optpage == false) { + $first_optpage = $next_optpage; + } else { + print_optionpages_row($first_optpage, $next_optpage); + $first_optpage = false; + } + } + + if ($first_optpage != false) { + print_optionpages_row($first_optpage); + } + + echo "</td></tr></table></td></tr></table>\n"; + + do_hook('options_link_and_description'); + + +/*************************************************************************/ +/* If we are not looking at the main option page, display the page here. */ +/*************************************************************************/ +} else { + echo addForm('options.php', 'POST', 'f', '', '', '', TRUE) + . create_optpage_element($optpage) + . create_optmode_element(SMOPT_MODE_SUBMIT) + . html_tag( 'table', '', '', '', 'width="100%" cellpadding="2" cellspacing="0" border="0"' ) . "\n" + . html_tag( 'tr' ) . "\n" + . html_tag( 'td', '', 'left' ) . "\n"; + + /* Output the option groups for this page. */ + print_option_groups($optpage_data['options']); + + /* Set the inside_hook_name and submit_name. */ + switch ($optpage) { + case SMOPT_PAGE_PERSONAL: + $inside_hook_name = 'options_personal_inside'; + $bottom_hook_name = 'options_personal_bottom'; + $submit_name = 'submit_personal'; + break; + case SMOPT_PAGE_DISPLAY: + $inside_hook_name = 'options_display_inside'; + $bottom_hook_name = 'options_display_bottom'; + $submit_name = 'submit_display'; + break; + case SMOPT_PAGE_HIGHLIGHT: + $inside_hook_name = 'options_highlight_inside'; + $bottom_hook_name = 'options_highlight_bottom'; + $submit_name = 'submit_highlight'; + break; + case SMOPT_PAGE_FOLDER: + $inside_hook_name = 'options_folder_inside'; + $bottom_hook_name = 'options_folder_bottom'; + $submit_name = 'submit_folder'; + break; + case SMOPT_PAGE_ORDER: + $inside_hook_name = 'options_order_inside'; + $bottom_hook_name = 'options_order_bottom'; + $submit_name = 'submit_order'; + break; + default: + $inside_hook_name = ''; + $bottom_hook_name = ''; + $submit_name = 'submit'; + } + + /* If it is not empty, trigger the inside hook. */ + if ($inside_hook_name != '') { + do_hook($inside_hook_name); + } + + /* Spit out a submit button. */ + OptionSubmit($submit_name); + echo '</td></tr></table></form>'; + + /* If it is not empty, trigger the bottom hook. */ + if ($bottom_hook_name != '') { + do_hook($bottom_hook_name); + } +} +?> +</td></tr> +</table> +</td></tr> +</table> +</body></html> diff --git a/ehcp/webmail2/src/options_highlight.php b/ehcp/webmail2/src/options_highlight.php new file mode 100644 index 0000000..445d6ef --- /dev/null +++ b/ehcp/webmail2/src/options_highlight.php @@ -0,0 +1,483 @@ +<?php + +/** + * options_highlight.php + * + * Displays message highlighting options + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: options_highlight.php 14114 2011-05-15 22:02:24Z pdontthink $ + * @package squirrelmail + * @subpackage prefs + */ + +/** This is the options_highlight page */ +define('PAGE_NAME', 'options_highlight'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'functions/forms.php'); + +/* get globals */ +sqGetGlobalVar('action', $action); +sqGetGlobalVar('theid', $theid); +sqGetGlobalVar('identname', $identname); +sqGetGlobalVar('newcolor_choose', $newcolor_choose); +sqGetGlobalVar('newcolor_input', $newcolor_input); +sqGetGlobalVar('color_type', $color_type); +sqGetGlobalVar('match_type', $match_type); +sqGetGlobalVar('value', $value); + +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_FORM)) { + $submitted_token = ''; +} +/* end of get globals */ + +function oh_opt( $val, $sel, $tit ) { + echo "<option value=\"$val\""; + if ( $sel ) + echo ' selected="selected"'; + echo ">$tit</option>\n"; +} + +if (! isset($action)) { + $action = ''; +} +if (! isset($message_highlight_list)) { + $message_highlight_list = array(); +} + +if (isset($theid) && ($action == 'delete') || + ($action == 'up') || + ($action == 'down')) { + + // security check + sm_validate_security_token($submitted_token, 3600, TRUE); + + $new_rules = array(); + switch($action) { + case('delete'): + foreach($message_highlight_list as $rid => $rule) { + if($rid != $theid) { + $new_rules[] = $rule; + } + } + break; + case('down'): + $theid++; + case('up'): + foreach($message_highlight_list as $rid => $rule) { + if($rid == $theid) { + $temp_rule = $new_rules[$rid-1]; + $new_rules[$rid-1] = $rule; + $new_rules[$rid] = $temp_rule; + } else { + $new_rules[$rid] = $rule; + } + } + break; + default: + $new_rules = $message_highlight_list; + break; + } + $message_highlight_list = $new_rules; + + setPref($data_dir, $username, 'hililist', serialize($message_highlight_list)); + + header( 'Location: options_highlight.php' ); + exit; +} else if ($action == 'save') { + + // security check + sm_validate_security_token($submitted_token, 3600, TRUE); + + if ($color_type == 1) $newcolor = $newcolor_choose; + elseif ($color_type == 2) $newcolor = $newcolor_input; + else $newcolor = $color_type; + + $newcolor = str_replace('#', '', $newcolor); + $newcolor = str_replace('"', '', $newcolor); + $newcolor = str_replace('\'', '', $newcolor); + $value = str_replace(',', ' ', $value); + + if(isset($theid)) { + $message_highlight_list[$theid] = + array( 'name' => $identname, 'color' => $newcolor, + 'value' => $value, 'match_type' => $match_type ); + } else { + $message_highlight_list[] = + array( 'name' => $identname, 'color' => $newcolor, + 'value' => $value, 'match_type' => $match_type ); + } + + setPref($data_dir, $username, 'hililist', serialize($message_highlight_list)); +} +displayPageHeader($color, 'None'); + +echo +html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '<center><b>' . _("Options") . ' - ' . _("Message Highlighting") . '</b></center>', 'left') + ), + 'center', $color[9], 'width="95%" border="0" cellpadding="1" cellspacing="0"' ) . "<br />\n" . +html_tag( 'table', '', '', '', 'width="100%" border="0" cellpadding="1" cellspacing="0"' ) . + html_tag( 'tr' ) . "\n" . + html_tag( 'td', '', 'left' ); + +echo '<center>[<a href="options_highlight.php?action=add">' . _("New") . '</a>]'. + ' - [<a href="options.php">'._("Done").'</a>]</center><br />'."\n"; +$mhl_count = count($message_highlight_list); +if ($mhl_count > 0) { + echo html_tag( 'table', '', 'center', '', 'width="80%" border="0" cellpadding="3" cellspacing="0"' ) . "\n"; + $token = sm_generate_security_token(); + for ($i=0; $i < $mhl_count; $i++) { + $match_type = ''; + switch ($message_highlight_list[$i]['match_type'] ) { + case 'from' : + $match_type = _("From"); + break; + case 'to' : + $match_type = _("To"); + break; + case 'cc' : + $match_type = _("Cc"); + break; + case 'to_cc' : + $match_type = _("To or Cc"); + break; + case 'subject' : + $match_type = _("subject"); + break; + } + + $links = '<small>[<a href="options_highlight.php?action=edit&theid=' . $i . '">' . + _("Edit") . + '</a>] [<a href="options_highlight.php?action=delete&smtoken=' . $token . '&theid='. $i . '">' . + _("Delete"); + if($i > 0) { + $links .= '</a>] [<a href="options_highlight.php?action=up&smtoken=' . $token . '&theid='. $i . '">' . _("Up"); + } + if($i+1 < $mhl_count) { + $links .= '</a>] [<a href="options_highlight.php?action=down&smtoken=' . $token . '&theid='. $i . '">' . _("Down"); + } + $links .= '</a>]</small>'; + + echo html_tag( 'tr', + html_tag( 'td', + $links, + 'left', $color[4], 'width="20%" nowrap' ) . + html_tag( 'td', + htmlspecialchars($message_highlight_list[$i]['name']) , + 'left' ) . + html_tag( 'td', + $match_type . ' = ' . + htmlspecialchars($message_highlight_list[$i]['value']) , + 'left' ) , + '', '#' . $message_highlight_list[$i]['color'] ) . "\n"; + } + echo "</table>\n". + "<br />\n"; +} else { + echo '<center>' . _("No highlighting is defined") . "</center><br />\n". + "<br />\n"; +} +if ($action == 'edit' || $action == 'add') { + + $color_list[0] = '4444aa'; + $color_list[1] = '44aa44'; + $color_list[2] = 'aaaa44'; + $color_list[3] = '44aaaa'; + $color_list[4] = 'aa44aa'; + $color_list[5] = 'aaaaff'; + $color_list[6] = 'aaffaa'; + $color_list[7] = 'ffffaa'; + $color_list[8] = 'aaffff'; + $color_list[9] = 'ffaaff'; + $color_list[10] = 'aaaaaa'; + $color_list[11] = 'bfbfbf'; + $color_list[12] = 'dfdfdf'; + $color_list[13] = 'ffffff'; + + # helpful color chart from http://www.visibone.com/colorlab/big.html + $new_color_list["0,0"] = 'cccccc'; + $new_color_list["0,1"] = '999999'; + $new_color_list["0,2"] = '666666'; + $new_color_list["0,3"] = '333333'; + $new_color_list["0,4"] = '000000'; + + # red + $new_color_list["1,0"] = 'ff0000'; + $new_color_list["1,1"] = 'cc0000'; + $new_color_list["1,2"] = '990000'; + $new_color_list["1,3"] = '660000'; + $new_color_list["1,4"] = '330000'; + + $new_color_list["2,0"] = 'ffcccc'; + $new_color_list["2,1"] = 'cc9999'; + $new_color_list["2,2"] = '996666'; + $new_color_list["2,3"] = '663333'; + $new_color_list["2,4"] = '330000'; + + $new_color_list["3,0"] = 'ffcccc'; + $new_color_list["3,1"] = 'ff9999'; + $new_color_list["3,2"] = 'ff6666'; + $new_color_list["3,3"] = 'ff3333'; + $new_color_list["3,4"] = 'ff0000'; + + # green + $new_color_list["4,0"] = '00ff00'; + $new_color_list["4,1"] = '00cc00'; + $new_color_list["4,2"] = '009900'; + $new_color_list["4,3"] = '006600'; + $new_color_list["4,4"] = '003300'; + + $new_color_list["5,0"] = 'ccffcc'; + $new_color_list["5,1"] = '99cc99'; + $new_color_list["5,2"] = '669966'; + $new_color_list["5,3"] = '336633'; + $new_color_list["5,4"] = '003300'; + + $new_color_list["6,0"] = 'ccffcc'; + $new_color_list["6,1"] = '99ff99'; + $new_color_list["6,2"] = '66ff66'; + $new_color_list["6,3"] = '33ff33'; + $new_color_list["6,4"] = '00ff00'; + + # blue + $new_color_list["7,0"] = '0000ff'; + $new_color_list["7,1"] = '0000cc'; + $new_color_list["7,2"] = '000099'; + $new_color_list["7,3"] = '000066'; + $new_color_list["7,4"] = '000033'; + + $new_color_list["8,0"] = 'ccccff'; + $new_color_list["8,1"] = '9999cc'; + $new_color_list["8,2"] = '666699'; + $new_color_list["8,3"] = '333366'; + $new_color_list["8,4"] = '000033'; + + $new_color_list["9,0"] = 'ccccff'; + $new_color_list["9,1"] = '9999ff'; + $new_color_list["9,2"] = '6666ff'; + $new_color_list["9,3"] = '3333ff'; + $new_color_list["9,4"] = '0000ff'; + + # yellow + $new_color_list["10,0"] = 'ffff00'; + $new_color_list["10,1"] = 'cccc00'; + $new_color_list["10,2"] = '999900'; + $new_color_list["10,3"] = '666600'; + $new_color_list["10,4"] = '333300'; + + $new_color_list["11,0"] = 'ffffcc'; + $new_color_list["11,1"] = 'cccc99'; + $new_color_list["11,2"] = '999966'; + $new_color_list["11,3"] = '666633'; + $new_color_list["11,4"] = '333300'; + + $new_color_list["12,0"] = 'ffffcc'; + $new_color_list["12,1"] = 'ffff99'; + $new_color_list["12,2"] = 'ffff66'; + $new_color_list["12,3"] = 'ffff33'; + $new_color_list["12,4"] = 'ffff00'; + + # cyan + $new_color_list["13,0"] = '00ffff'; + $new_color_list["13,1"] = '00cccc'; + $new_color_list["13,2"] = '009999'; + $new_color_list["13,3"] = '006666'; + $new_color_list["13,4"] = '003333'; + + $new_color_list["14,0"] = 'ccffff'; + $new_color_list["14,1"] = '99cccc'; + $new_color_list["14,2"] = '669999'; + $new_color_list["14,3"] = '336666'; + $new_color_list["14,4"] = '003333'; + + $new_color_list["15,0"] = 'ccffff'; + $new_color_list["15,1"] = '99ffff'; + $new_color_list["15,2"] = '66ffff'; + $new_color_list["15,3"] = '33ffff'; + $new_color_list["15,4"] = '00ffff'; + + # magenta + $new_color_list["16,0"] = 'ff00ff'; + $new_color_list["16,1"] = 'cc00cc'; + $new_color_list["16,2"] = '990099'; + $new_color_list["16,3"] = '660066'; + $new_color_list["16,4"] = '330033'; + + $new_color_list["17,0"] = 'ffccff'; + $new_color_list["17,1"] = 'cc99cc'; + $new_color_list["17,2"] = '996699'; + $new_color_list["17,3"] = '663366'; + $new_color_list["17,4"] = '330033'; + + $new_color_list["18,0"] = 'ffccff'; + $new_color_list["18,1"] = 'ff99ff'; + $new_color_list["18,2"] = 'ff66ff'; + $new_color_list["18,3"] = 'ff33ff'; + $new_color_list["18,4"] = 'ff00ff'; + + $selected_input = FALSE; + $selected_i = null; + $selected_choose = FALSE; + $selected_predefined = FALSE; + + for ($i=0; $i < 14; $i++) { + ${"selected".$i} = ''; + } + if ($action == 'edit' && isset($theid) && isset($message_highlight_list[$theid]['color'])) { + for ($i=0; $i < 14; $i++) { + if ($color_list[$i] == $message_highlight_list[$theid]['color']) { + $selected_choose = TRUE; + $selected_i = $color_list[$i]; + continue; + } + } + } + + if ($action == 'edit' && isset($theid) && isset($message_highlight_list[$theid]['color'])) { + $current_color = $message_highlight_list[$theid]['color']; + } + else { + $current_color = '63aa7f'; + } + + $pre_defined_color = 0; + for($x = 0; $x < 5; $x++) { + for($y = 0; $y < 19; $y++) { + $gridindex = "$y,$x"; + $gridcolor = $new_color_list[$gridindex]; + if ($gridcolor == $current_color) { + $pre_defined_color = 1; + break; + } + } + } + + if (isset($theid) && !isset($message_highlight_list[$theid]['color'])) + $selected_choose = TRUE; + else if ($pre_defined_color) + $selected_predefined = TRUE; + else if ($selected_choose == '') + $selected_input = TRUE; + + echo addForm('options_highlight.php', 'POST', 'f', '', '', '', TRUE). + addHidden('action', 'save'); + if($action == 'edit') { + echo addHidden('theid', (isset($theid)?$theid:'')); + } + echo html_tag( 'table', '', 'center', '', 'width="80%" cellpadding="3" cellspacing="0" border="0"' ) . "\n"; + echo html_tag( 'tr', '', '', $color[0] ) . "\n"; + echo html_tag( 'td', '', 'right', '', 'nowrap' ) . "<b>\n"; + echo _("Identifying name") . ":"; + echo ' </b></td>' . "\n"; + echo html_tag( 'td', '', 'left' ) . "\n"; + if ($action == 'edit' && isset($theid) && isset($message_highlight_list[$theid]['name'])) + $disp = $message_highlight_list[$theid]['name']; + else + $disp = ''; + echo " ".addInput('identname', $disp); + echo " </td>\n"; + echo " </tr>\n"; + echo html_tag( 'tr', html_tag( 'td', '<small><small> </small></small>', 'left' ) ) ."\n"; + echo html_tag( 'tr', '', '', $color[0] ) . "\n"; + echo html_tag( 'td', '<b>'. _("Color") . ':</b>', 'right' ); + echo html_tag( 'td', '', 'left' ); + echo ' '.addRadioBox('color_type', $selected_choose, '1'); + + $selops = array ( + $color_list[0] => _("Dark Blue"), + $color_list[1] => _("Dark Green"), + $color_list[2] => _("Dark Yellow"), + $color_list[3] => _("Dark Cyan"), + $color_list[4] => _("Dark Magenta"), + $color_list[5] => _("Light Blue"), + $color_list[6] => _("Light Green"), + $color_list[7] => _("Light Yellow"), + $color_list[8] => _("Light Cyan"), + $color_list[9] => _("Light Magenta"), + $color_list[10] => _("Dark Gray"), + $color_list[11] => _("Medium Gray"), + $color_list[12] => _("Light Gray"), + $color_list[13] => _("White") ); + + echo addSelect('newcolor_choose', $selops, $selected_i, TRUE); + echo "<br />\n"; + + echo ' '.addRadioBox('color_type', $selected_input, 2). + '  '. _("Other:") . + addInput('newcolor_input', + (($selected_input && isset($theid)) ? $message_highlight_list[$theid]['color'] : ''), + '7'); + // i18n: This is an example on how to write a color in RGB, literally meaning "For example: 63aa7f". + echo _("Ex: 63aa7f")."<br />\n"; + echo " </td>\n"; + echo " </tr>\n"; + + # Show grid of color choices + echo html_tag( 'tr', '', '', $color[0] ) . "\n"; + echo html_tag( 'td', '', 'left', '', 'colspan="2"' ); + echo html_tag( 'table', '', 'center', '', 'border="0" cellpadding="2" cellspacing="1"' ) . "\n"; + + for($x = 0; $x < 5; $x++) { + echo html_tag( 'tr' ) . "\n"; + for($y = 0; $y < 19; $y++) { + $gridindex = "$y,$x"; + $gridcolor = $new_color_list[$gridindex]; + echo html_tag( 'td', addRadioBox('color_type', ($gridcolor == $current_color), '#'.$gridcolor), + 'left', '#' . $gridcolor, 'colspan="2"' ); + } + echo "</tr>\n"; + } + echo "</table>\n"; + echo "</td></tr>\n"; + + echo html_tag( 'tr', html_tag( 'td', '<small><small> </small></small>', 'left' ) ) . "\n"; + echo html_tag( 'tr', '', '', $color[0] ) . "\n"; + echo html_tag( 'td', '', 'center', '', 'colspan="2"' ) . "\n"; + echo " <select name=\"match_type\">\n"; + oh_opt( 'from', + (isset($theid)?$message_highlight_list[$theid]['match_type'] == 'from':1), + _("From") ); + oh_opt( 'to', + (isset($theid)?$message_highlight_list[$theid]['match_type'] == 'to':0), + _("To") ); + oh_opt( 'cc', + (isset($theid)?$message_highlight_list[$theid]['match_type'] == 'cc':0), + _("Cc") ); + oh_opt( 'to_cc', + (isset($theid)?$message_highlight_list[$theid]['match_type'] == 'to_cc':0), + _("To or Cc") ); + oh_opt( 'subject', + (isset($theid)?$message_highlight_list[$theid]['match_type'] == 'subject':0), + _("Subject") ); + echo " </select>\n"; + echo '<b>' . _("Matches") . ':</b> '; + if ($action == 'edit' && isset($theid) && isset($message_highlight_list[$theid]['value'])) + $disp = $message_highlight_list[$theid]['value']; + else + $disp = ''; + echo ' '.addInput('value', $disp, 40); + echo " </td>\n"; + echo " </tr>\n"; + echo "</table>\n"; + echo '<center><input type="submit" value="' . _("Submit") . "\" /></center>\n"; + echo "</form>\n"; +} +do_hook('options_highlight_bottom'); +?> +</table></body></html> diff --git a/ehcp/webmail2/src/options_identities.php b/ehcp/webmail2/src/options_identities.php new file mode 100644 index 0000000..b7edfcd --- /dev/null +++ b/ehcp/webmail2/src/options_identities.php @@ -0,0 +1,194 @@ +<?php + +/** + * options_identities.php + * + * Display Identities Options + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: options_identities.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage prefs + * @since 1.1.3 + */ + +/** This is the options_identities page */ +define('PAGE_NAME', 'options_identities'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +include_once(SM_PATH . 'functions/global.php'); +include_once(SM_PATH . 'functions/display_messages.php'); +include_once(SM_PATH . 'functions/html.php'); +include_once(SM_PATH . 'functions/forms.php'); +include_once(SM_PATH . 'functions/identity.php'); + +/* make sure that page is not available when $edit_identity is false */ +if (!$edit_identity) { + error_box(_("Editing identities is disabled."),$color); + die('</body></html>'); +} + +if (!sqgetGlobalVar('identities', $identities, SQ_SESSION)) { + $identities = get_identities(); +} +sqgetGlobalVar('newidentities', $newidentities, SQ_POST); +sqgetGlobalVar('smaction', $smaction, SQ_POST); +sqgetGlobalVar('return', $return, SQ_POST); + +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) { + $submitted_token = ''; +} + +// First lets see if there are any actions to perform // +if (!empty($smaction) && is_array($smaction)) { + + // first do a security check + sm_validate_security_token($submitted_token, 3600, TRUE); + + $doaction = ''; + $identid = 0; + + foreach($smaction as $action=>$row) { + // we only need to extract the action and the identity we are + // altering + + foreach($row as $iKey=>$data) { + $identid = $iKey; + } + + $doaction = $action; + } + + $identities = sqfixidentities( $newidentities , $identid , $action ); + save_identities($identities); +} + +if (!empty($return)) { + header('Location: ' . get_location() . '/options_personal.php'); + exit; +} + +displayPageHeader($color, 'None'); + +do_hook('options_identities_top'); + +$td_str = '<form name="f" action="options_identities.php" method="post"><br />' . "\n" + . addHidden('smtoken', sm_generate_security_token()) . "\n" + . '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n"; +$cnt = count($identities); +foreach( $identities as $iKey=>$ident ) { + + if ($iKey == 0) { + $hdr_str = _("Default Identity"); + } else { + $hdr_str = sprintf( _("Alternate Identity %d"), $iKey); + } + + $td_str .= ShowIdentityInfo( $hdr_str, $ident, $iKey ); + +} + +$td_str .= ShowIdentityInfo( _("Add a New Identity"), array('full_name'=>'','email_address'=>'','reply_to'=>'','signature'=>''), $cnt); +$td_str .= '</table>' . "\n"; +$td_str .= '</form>'; + +echo '<br /> ' . "\n" . + html_tag('table', "\n" . + html_tag('tr', "\n" . + html_tag('td' , "\n" . + '<b>' . _("Options") . ' - ' . _("Advanced Identities") . '</b><br />' . + html_tag('table', "\n" . + html_tag('tr', "\n" . + html_tag('td', "\n" . + html_tag('table' , "\n" . + html_tag('tr' , "\n" . + html_tag('td', "\n" . $td_str ,'','', 'style="text-align:center;"') + ), + '', '', 'width="80%" cellpadding="2" cellspacing="0" border="0"' ) , + 'center', $color[4]) + ), + '', '', 'width="100%" border="0" cellpadding="1" cellspacing="1"' )) , + 'center', $color[0]), + 'center', '', 'width="95%" border="0" cellpadding="2" cellspacing="0"' ) . '</body></html>'; + + +function ShowIdentityInfo($title, $identity, $id ) { + global $color; + + if (empty($identity['full_name']) && empty($identity['email_address']) && empty($identity['reply_to']) && empty($identity['signature'])) { + $bg = ''; + $empty = true; + } else { + $bg = ' style="background-color:' . $color[0] . ';"'; + $empty = false; + } + + $name = 'newidentities[%d][%s]'; + + + $return_str = ''; + + $return_str .= '<tr>' . "\n"; + $return_str .= ' <th style="text-align:center;background-color:' . $color[9] . ';" colspan="2">' . $title . '</th> '. "\n"; + $return_str .= '</tr>' . "\n"; + $return_str .= sti_input( _("Full Name") , sprintf($name, $id, 'full_name'), $identity['full_name'], $bg); + $return_str .= sti_input( _("E-Mail Address") , sprintf($name, $id, 'email_address'), $identity['email_address'], $bg); + $return_str .= sti_input( _("Reply To"), sprintf($name, $id, 'reply_to'), $identity['reply_to'], $bg); + $return_str .= sti_textarea( _("Signature"), sprintf($name, $id, 'signature'), $identity['signature'], $bg); + $return_str .= concat_hook_function('options_identities_table', array($bg, $empty, $id)); + $return_str .= '<tr' . $bg . '> ' . "\n"; + $return_str .= ' <td>   </td>' . "\n"; + $return_str .= ' <td>' . "\n"; + $return_str .= ' <input type="submit" name="smaction[save][' . $id . ']" value="' . _("Save / Update") . '" />' . "\n"; + + if (!$empty && $id > 0) { + $return_str .= ' <input type="submit" name="smaction[makedefault][' . $id . ']" value="' . _("Make Default") . '" />' . "\n"; + $return_str .= ' <input type="submit" name="smaction[delete]['.$id.']" value="' . _("Delete") . '" />' . "\n"; + + if ($id > 1) { + $return_str .= ' <input type="submit" name="smaction[move]['.$id.']" value="' . _("Move Up") . '" />' . "\n"; + } + + } + + $return_str .= concat_hook_function('options_identities_buttons', array($empty, $id)); + $return_str .= ' </td>' . "\n"; + $return_str .= '</tr>' . "\n"; + $return_str .= '<tr>' . "\n"; + $return_str .= ' <td colspan="2">   </td>' . "\n"; + $return_str .= '</tr>'; + + return $return_str; + +} + +function sti_input( $title, $name, $data, $bgcolor ) { + $str = ''; + $str .= '<tr' . $bgcolor . ">\n"; + $str .= ' <td style="white-space: nowrap;text-align:right;">' . $title . ' </td>' . "\n"; + $str .= ' <td> <input type="text" name="' . $name . '" size="50" value="'. htmlspecialchars($data) . '"> </td>' . "\n"; + $str .= '</tr>'; + + return $str; + +} + +function sti_textarea( $title, $name, $data, $bgcolor ) { + $str = ''; + $str .= '<tr' . $bgcolor . ">\n"; + $str .= ' <td style="white-space: nowrap;text-align:right;">' . $title . ' </td>' . "\n"; + $str .= ' <td> <textarea name="' . $name . '" cols="50" rows="5">'. htmlspecialchars($data) . '</textarea> </td>' . "\n"; + $str .= '</tr>'; + + return $str; + +} + diff --git a/ehcp/webmail2/src/options_order.php b/ehcp/webmail2/src/options_order.php new file mode 100644 index 0000000..576a5fb --- /dev/null +++ b/ehcp/webmail2/src/options_order.php @@ -0,0 +1,175 @@ +<?php + +/** + * options_order.php + * + * Displays messagelist column order options + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: options_order.php 14119 2011-07-12 04:36:01Z pdontthink $ + * @package squirrelmail + * @subpackage prefs + */ + +/** This is the options_order page */ +define('PAGE_NAME', 'options_order'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'functions/forms.php'); + +/* get globals */ +if (sqgetGlobalVar('num', $num, SQ_GET)) + $num = (int)$num; +else + $num = 0; + +sqgetGlobalVar('add', $add, SQ_POST); + +sqgetGlobalVar('submit', $submit); +sqgetGlobalVar('method', $method); +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_FORM)) { + $submitted_token = ''; +} +/* end of get globals */ + +displayPageHeader($color, 'None'); + + echo + html_tag( 'table', '', 'center', '', 'width="95%" border="0" cellpadding="1" cellspacing="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[0] ) . + '<b>' . _("Options") . ' - ' . _("Index Order") . '</b>' . + html_tag( 'table', '', '', '', 'width="100%" border="0" cellpadding="8" cellspacing="0"' ) . + html_tag( 'tr' ) . + html_tag( 'td', '', 'center', $color[4] ); + + $available[1] = _("Checkbox"); + $available[2] = _("From"); + $available[3] = _("Date"); + $available[4] = _("Subject"); + $available[5] = _("Flags"); + $available[6] = _("Size"); + + if (! isset($method)) { $method = ''; } + + if ($method == 'up' && $num > 0 && $num > 1) { + $prev = $num-1; + $tmp = $index_order[$prev]; + $index_order[$prev] = $index_order[$num]; + $index_order[$num] = $tmp; + } else if ($method == 'down' && $num > 0 && $num < count($index_order)) { + $next = $num++; + $tmp = $index_order[$next]; + $index_order[$next] = $index_order[$num]; + $index_order[$num] = $tmp; + } else if ($method == 'remove' && $num > 0) { + + // first do a security check + sm_validate_security_token($submitted_token, 3600, TRUE); + + for ($i=1; $i < 8; $i++) { + removePref($data_dir, $username, "order$i"); + } + for ($j=1,$i=1; $i <= count($index_order); $i++) { + if ($i != $num) { + $new_ary[$j] = $index_order[$i]; + $j++; + } + } + $index_order = array(); + $index_order = $new_ary; + if (count($index_order) < 1) { + include_once(SM_PATH . 'include/load_prefs.php'); + } + } else if ($method == 'add' && $add) { + + // first do a security check + sm_validate_security_token($submitted_token, 3600, TRUE); + + /* User should not be able to insert PHP-code here */ + $add = str_replace ('<?', '..', $add); + $add = preg_replace ('/<.*script.*language.*php.*>/', '..', $add); + $add = str_replace ('<%', '..', $add); + $index_order[count($index_order)+1] = $add; + } + + if ($method) { + for ($i=1; $i <= count($index_order); $i++) { + setPref($data_dir, $username, "order$i", $index_order[$i]); + } + } + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + _("The index order is the order that the columns are arranged in the message index. You can add, remove, and move columns around to customize them to fit your needs.") + ) + ) , + '', '', '', 'width="65%" border="0" cellpadding="0" cellspacing="0"' ) . "<br />\n"; + + if (count($index_order)) + { + echo html_tag( 'table', '', '', '', ' cellspacing="0" cellpadding="0" border="0"' ) . "\n"; + for ($i=1; $i <= count($index_order); $i++) { + $tmp = $index_order[$i]; + echo html_tag( 'tr' ); + echo html_tag( 'td', '<small><a href="options_order.php?method=up&num=' . $i . '">'. _("up") .'</a></small>' ); + echo html_tag( 'td', '<small> | </small>' ); + echo html_tag( 'td', '<small><a href="options_order.php?method=down&num=' . $i . '">'. _("down") .'</a></small>' ); + echo html_tag( 'td', '<small> | </small>' ); + echo html_tag( 'td' ); + /* Always show the subject */ + if ($tmp != 4) + echo '<small><a href="options_order.php?method=remove&num=' . $i . '&smtoken=' . sm_generate_security_token() . '">' . _("remove") . '</a></small>'; + else + echo ' '; + echo '</td>'; + echo html_tag( 'td', '<small> - </small>' ); + echo html_tag( 'td', $available[$tmp] ); + echo '</tr>' . "\n"; + } + echo '</table>' . "\n"; + } + + if (count($index_order) != count($available)) { + echo '<form name="f" method="post" action="options_order.php">' . "\n" + . addHidden('smtoken', sm_generate_security_token()) + . '<select name="add">' . "\n"; + for ($i=1; $i <= count($available); $i++) { + $found = false; + for ($j=1; $j <= count($index_order); $j++) { + if ($index_order[$j] == $i) { + $found = true; + } + } + if (!$found) { + echo "<option value=\"$i\">$available[$i]</option>"; + } + } + echo '</select>'; + echo '<input type="hidden" value="add" name="method" />'; + echo '<input type="submit" value="'._("Add").'" name="submit" />'; + echo '</form>'; + } + + echo html_tag( 'p', '<a href="../src/options.php">' . _("Return to options page") . '</a></p><br />' ); + +?> + </td></tr> + </table> + +</td></tr> +</table> +</body></html> diff --git a/ehcp/webmail2/src/printer_friendly_bottom.php b/ehcp/webmail2/src/printer_friendly_bottom.php new file mode 100644 index 0000000..bdc143a --- /dev/null +++ b/ehcp/webmail2/src/printer_friendly_bottom.php @@ -0,0 +1,294 @@ +<?php + +/** + * printer_friendly_bottom.php + * + * with javascript on, it is the bottom frame of printer_friendly_main.php + * else, it is alone in a new window + * + * - this is the page that does all the work, really. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: printer_friendly_bottom.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the printer_friendly_bottom page */ +define('PAGE_NAME', 'printer_friendly_bottom'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); + +/* get some of these globals */ +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); +sqgetGlobalVar('messages', $messages, SQ_SESSION); +sqgetGlobalVar('passed_id', $passed_id, SQ_GET); +sqgetGlobalVar('mailbox', $mailbox, SQ_GET); + +if (! sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_GET) || + ! preg_match('/^\d+(\.\d+)*$/', $passed_ent_id) ) { + $passed_ent_id = ''; +} +/* end globals */ + +$pf_cleandisplay = getPref($data_dir, $username, 'pf_cleandisplay', false); +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$mbx_response = sqimap_mailbox_select($imapConnection, $mailbox); +if (isset($messages[$mbx_response['UIDVALIDITY']][$passed_id])) { + $message = $messages[$mbx_response['UIDVALIDITY']][$passed_id]; +} else { + $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); +} +if ($passed_ent_id) { + $message = $message->getEntity($passed_ent_id); +} + +/* --start display setup-- */ + +$rfc822_header = $message->rfc822_header; +/* From and Date are usually fine as they are... */ +$from = $rfc822_header->getAddr_s('from'); +$date = getLongDateString($rfc822_header->date, $rfc822_header->date_unparsed); +$subject = trim($rfc822_header->subject); + +/* we can clean these up if the list is too long... */ +$cc = $rfc822_header->getAddr_s('cc'); +$to = $rfc822_header->getAddr_s('to'); + +if ($show_html_default == 1) { + $ent_ar = $message->findDisplayEntity(array()); +} else { + $ent_ar = $message->findDisplayEntity(array(), array('text/plain')); +} +$body = ''; +if ($ent_ar[0] != '') { + for ($i = 0; $i < count($ent_ar); $i++) { + $body .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox, true); + $body .= '<hr noshade size="1" />'; + } + $hookResults = do_hook('message_body', $body); + $body = $hookResults[1]; +} else { + $body = _("Message not printable"); +} + + /* now, if they choose to, we clean up the display a bit... */ + +if ($pf_cleandisplay) { + + $num_leading_spaces = 9; // nine leading spaces for indentation + + // sometimes I see ',,' instead of ',' seperating addresses *shrug* + $cc = pf_clean_string(str_replace(',,', ',', $cc), $num_leading_spaces); + $to = pf_clean_string(str_replace(',,', ',', $to), $num_leading_spaces); + + // the body should have no leading zeros + // disabled because it destroys html mail + +// $body = pf_clean_string($body, 0); + + // clean up everything else... + $subject = pf_clean_string($subject, $num_leading_spaces); + $from = pf_clean_string($from, $num_leading_spaces); + $date = pf_clean_string($date, $num_leading_spaces); + +} // end cleanup + +$to = decodeHeader($to); +$cc = decodeHeader($cc); +$from = decodeHeader($from); +$subject = decodeHeader($subject); + +// load attachments +$attachments = pf_show_attachments($message,$ent_ar,$mailbox,$passed_id); + +// --end display setup-- + + +/* --start browser output-- */ +displayHtmlHeader( $subject, '', FALSE ); + +echo '<body text="#000000" bgcolor="#FFFFFF" link="#000000" vlink="#000000" alink="#000000">'."\n" . + /* headers (we use table because translations are not all the same width) */ + html_tag( 'table', '', 'center', '', 'cellspacing="0" cellpadding="0" border="0" width="100%"' ) . + html_tag( 'tr', + html_tag( 'td', _("From").': ', 'left' ,'','valign="top"') . + html_tag( 'td', $from, 'left' ) + ) . "\n" . + html_tag( 'tr', + html_tag( 'td', _("Subject").': ', 'left','','valign="top"' ) . + html_tag( 'td', $subject, 'left' ) + ) . "\n" . + html_tag( 'tr', + html_tag( 'td', _("Date").': ', 'left' ) . + html_tag( 'td', htmlspecialchars($date), 'left' ) + ) . "\n" . + html_tag( 'tr', + html_tag( 'td', _("To").': ', 'left','','valign="top"' ) . + html_tag( 'td', $to, 'left' ) + ) . "\n"; + if ( strlen($cc) > 0 ) { /* only show Cc: if it's there... */ + echo html_tag( 'tr', + html_tag( 'td', _("Cc").': ', 'left','','valign="top"' ) . + html_tag( 'td', $cc, 'left' ) + ); + } + /* body */ + echo html_tag( 'tr', + html_tag( 'td', '<hr noshade size="1" /><br />' . "\n" . $body, 'left', '', 'colspan="2"' ) + ) . "\n"; + + if (! empty($attachments)) { + // attachments title + echo html_tag( 'tr', + html_tag( 'td','<b>'._("Attachments:").'</b>', 'left', '', 'colspan="2"' ) + ) . "\n" ; + // list of attachments + echo html_tag( 'tr', + html_tag( 'td',$attachments, 'left', '', 'colspan="2"' ) + ) . "\n" ; + // add separator line + echo html_tag( 'tr', + html_tag( 'td', '<hr style="height: 1px;" />', 'left', '', 'colspan="2"' ) + ) . "\n" ; + } + + echo '</table>' . "\n" . + '</body></html>'; + +/* --end browser output-- */ + + +/* --start pf-specific functions-- */ + +/** + * Function should clean layout of printed messages when user + * enables "Printer Friendly Clean Display" option. + * + * @param string unclean_string + * @param integer num_leading_spaces + * @return string + * @example $string = pf_clean_string($string, 9); + * @access private + */ +function pf_clean_string ( $unclean_string, $num_leading_spaces ) { + global $data_dir, $username; + $unclean_string = str_replace(' ',' ',$unclean_string); + $wrap_at = getPref($data_dir, $username, 'wrap_at', 86); + $wrap_at = $wrap_at - $num_leading_spaces; /* header stuff */ + + $leading_spaces = ''; + while ( strlen($leading_spaces) < $num_leading_spaces ) + $leading_spaces .= ' '; + + $clean_string = ''; + while ( strlen($unclean_string) > $wrap_at ) + { + $this_line = substr($unclean_string, 0, $wrap_at); + if ( strrpos( $this_line, "\n" ) ) /* this should NEVER happen with anything but the $body */ + { + $clean_string .= substr( $this_line, 0, strrpos( $this_line, "\n" )); + $clean_string .= $leading_spaces; + $unclean_string = substr($unclean_string, strrpos( $this_line, "\n" )); + } + else + { + $i = strrpos( $this_line, ' '); + $clean_string .= substr( $this_line, 0, $i); + $clean_string .= "\n" . $leading_spaces; + $unclean_string = substr($unclean_string, 1+$i); + } + } + $clean_string .= $unclean_string; + + return $clean_string; +} /* end pf_clean_string() function */ + +/** + * Displays attachment information + * + * Stripped version of formatAttachments() function from functions/mime.php. + * @param object $message SquirrelMail message object + * @param array $exclude_id message parts that are not attachments. + * @param string $mailbox mailbox name + * @param integer $id message id + * @since 1.5.1 and 1.4.6 + * @return string html formated attachment information. + */ +function pf_show_attachments($message, $exclude_id, $mailbox, $id) { + global $where, $what, $startMessage, $color, $passed_ent_id; + + $att_ar = $message->getAttachments($exclude_id); + + if (!count($att_ar)) return ''; + + $attachments = ''; + + $urlMailbox = urlencode($mailbox); + + foreach ($att_ar as $att) { + $ent = $att->entity_id; + $header = $att->header; + $type0 = strtolower($header->type0); + $type1 = strtolower($header->type1); + $name = ''; + + if ($type0 =='message' && $type1 == 'rfc822') { + $rfc822_header = $att->rfc822_header; + $filename = $rfc822_header->subject; + if (trim( $filename ) == '') { + $filename = 'untitled-[' . $ent . ']' ; + } + $from_o = $rfc822_header->from; + if (is_object($from_o)) { + $from_name = decodeHeader($from_o->getAddress(true)); + } else { + $from_name = _("Unknown sender"); + } + $description = '<tr>'. + html_tag( 'td',_("From:"), 'right') . + html_tag( 'td',$from_name, 'left') . + '</tr>'; + } else { + $filename = $att->getFilename(); + if ($header->description) { + $description = '<tr>'. + html_tag( 'td',_("Info:"), 'right') . + html_tag( 'td',decodeHeader($header->description), 'left') . + '</tr>'; + } else { + $description = ''; + } + } + + $display_filename = $filename; + + // TODO: maybe make it nicer? + $attachments .= '<table cellpadding="0" cellspacing="0" border="1"><tr><th colspan="2">'.decodeHeader($display_filename).'</th></tr>' . + '<tr border="0">'. + html_tag( 'td',_("Size:"), 'right') . + html_tag( 'td',show_readable_size($header->size), 'left') . + '</tr><tr>' . + html_tag( 'td',_("Type:"), 'right') . + html_tag( 'td',htmlspecialchars($type0).'/'.htmlspecialchars($type1), 'left') . + '</tr>'; + if (! empty($description)) { + $attachments .= $description; + } + $attachments .= "</table>\n"; + } + return $attachments; +} + + +/* --end pf-specific functions */ diff --git a/ehcp/webmail2/src/printer_friendly_main.php b/ehcp/webmail2/src/printer_friendly_main.php new file mode 100644 index 0000000..ca1f32c --- /dev/null +++ b/ehcp/webmail2/src/printer_friendly_main.php @@ -0,0 +1,47 @@ +<?php + +/** + * printer_friendly frameset + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: printer_friendly_main.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the printer_friendly_main page */ +define('PAGE_NAME', 'printer_friendly_main'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); + +/* get those globals into gear */ +global $color; +if ( ! sqgetGlobalVar('passed_ent_id',$passed_ent_id,SQ_GET)) + $passed_ent_id = 0; +if ( ! sqgetGlobalVar('mailbox',$mailbox,SQ_GET) || + ! sqgetGlobalVar('passed_id',$passed_id,SQ_GET)) { + error_box(_("Invalid URL"),$color); +} else { + $passed_id= (int) $passed_id; + $view_unsafe_images = (bool) $_GET['view_unsafe_images']; +/* end globals */ + displayHtmlHeader( _("Printer Friendly"), '', false, true ); + echo '<frameset rows="60, *">' . "\n"; + echo '<frame src="printer_friendly_top.php" name="top_frame" ' + . 'scrolling="no" noresize="noresize" frameborder="0" />' . "\n"; + echo '<frame src="printer_friendly_bottom.php?passed_ent_id=' + . urlencode($passed_ent_id) . '&mailbox=' . urlencode($mailbox) + . '&passed_id=' . $passed_id + . '&view_unsafe_images='.$view_unsafe_images + . '" name="bottom_frame" frameborder="0" />' . "\n"; + echo "</frameset>\n"; +} +?> +</html> \ No newline at end of file diff --git a/ehcp/webmail2/src/printer_friendly_top.php b/ehcp/webmail2/src/printer_friendly_top.php new file mode 100644 index 0000000..2b0d423 --- /dev/null +++ b/ehcp/webmail2/src/printer_friendly_top.php @@ -0,0 +1,48 @@ +<?php + +/** + * printer_friendly top frame + * + * top frame of printer_friendly_main.php + * displays some javascript buttons for printing & closing + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: printer_friendly_top.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the printer_friendly_top page */ +define('PAGE_NAME', 'printer_friendly_top'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); + +displayHtmlHeader( _("Printer Friendly"), + "<script language=\"javascript\" type=\"text/javascript\">\n". + "<!--\n". + "function printPopup() {\n". + "parent.frames[1].focus();\n". + "parent.frames[1].print();\n". + "}\n". + "-->\n". + "</script>\n", FALSE ); + + +echo '<body text="'.$color[8].'" bgcolor="'.$color[3].'" link="'.$color[7].'" vlink="'.$color[7].'" alink="'.$color[7]."\">\n" . + html_tag( 'div', + '<b>'. + '<form>'. + '<input type="button" value="' . _("Print") . '" onclick="printPopup()" /> '. + '<input type="button" value="' . _("Close") . '" onclick="window.parent.close()" />'. + '</form>'. + '</b>', + 'right' ); +?> +</body></html> \ No newline at end of file diff --git a/ehcp/webmail2/src/read_body.php b/ehcp/webmail2/src/read_body.php new file mode 100644 index 0000000..0bc1422 --- /dev/null +++ b/ehcp/webmail2/src/read_body.php @@ -0,0 +1,941 @@ +<?php + +/** + * read_body.php + * + * This file is used for reading the msgs array and displaying + * the resulting emails in the right frame. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: read_body.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the read_body page */ +define('PAGE_NAME', 'read_body'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/mime.php'); +require_once(SM_PATH . 'functions/date.php'); +require_once(SM_PATH . 'functions/url_parser.php'); +require_once(SM_PATH . 'functions/html.php'); + +/** + * Given an IMAP message id number, this will look it up in the cached + * and sorted msgs array and return the index. Used for finding the next + * and previous messages. + * + * @return the index of the next valid message from the array + */ +function findNextMessage($passed_id) { + global $msort, $msgs, $sort, + $thread_sort_messages, $allow_server_sort, + $server_sort_array; + if (!is_array($server_sort_array)) { + $thread_sort_messages = 0; + $allow_server_sort = FALSE; + } + $result = -1; + if ($thread_sort_messages || $allow_server_sort) { + $count = count($server_sort_array) - 1; + foreach($server_sort_array as $key=>$value) { + if ($passed_id == $value) { + if ($key == $count) { + break; + } + $result = $server_sort_array[$key + 1]; + break; + } + } + } else { + if (is_array($msort)) { + for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) { + if ($passed_id == $msgs[$key]['ID']) { + next($msort); + $key = key($msort); + if (isset($key)){ + $result = $msgs[$key]['ID']; + break; + } + } + } + } + } + return $result; +} + +/** returns the index of the previous message from the array. */ +function findPreviousMessage($numMessages, $passed_id) { + global $msort, $sort, $msgs, + $thread_sort_messages, + $allow_server_sort, $server_sort_array; + $result = -1; + if (!is_array($server_sort_array)) { + $thread_sort_messages = 0; + $allow_server_sort = FALSE; + } + if ($thread_sort_messages || $allow_server_sort ) { + foreach($server_sort_array as $key=>$value) { + if ($passed_id == $value) { + if ($key == 0) { + break; + } + $result = $server_sort_array[$key - 1]; + break; + } + } + } else { + if (is_array($msort)) { + for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) { + if ($passed_id == $msgs[$key]['ID']) { + prev($msort); + $key = key($msort); + if (isset($key)) { + $result = $msgs[$key]['ID']; + break; + } + } + } + } + } + return $result; +} + +/** + * Displays a link to a page where the message is displayed more + * "printer friendly". + */ +function printer_friendly_link($mailbox, $passed_id, $passed_ent_id, $color) { + global $javascript_on; + + /* hackydiehack */ + + // Pull "view_unsafe_images" from the URL to find out if the unsafe images + // should be displayed. The default is not to display unsafe images. + if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) { + // If "view_unsafe_images" isn't part of the URL, default to not + // displaying unsafe images. + $view_unsafe_images = false; + } else { + // If "view_unsafe_images" is part of the URL, display unsafe images + // regardless of the value of the URL variable. + // FIXME: Do we really want to display the unsafe images regardless of the value in URL variable? + $view_unsafe_images = true; + } + + $params = '?passed_ent_id=' . urlencode($passed_ent_id) . + '&mailbox=' . urlencode($mailbox) . + '&passed_id=' . urlencode($passed_id). + '&view_unsafe_images='. (bool) $view_unsafe_images; + + $print_text = _("View Printable Version"); + + $result = ''; + /* Output the link. */ + if ($javascript_on) { + $result = '<script language="javascript" type="text/javascript">' . "\n" . + '<!--' . "\n" . + " function printFormat() {\n" . + ' window.open("../src/printer_friendly_main.php' . + $params . '","Print","width=800,height=600");' . "\n". + " }\n" . + "// -->\n" . + "</script>\n" . + "<a href=\"javascript:printFormat();\">$print_text</a>\n"; + } else { + $result = '<a target="_blank" href="../src/printer_friendly_bottom.php' . + "$params\">$print_text</a>\n"; + } + return $result; +} + +function ServerMDNSupport($read) { + /* escaping $ doesn't work -> \x36 */ + $ret = preg_match('/(\x36MDNSent|\\\\\*)/i', $read); + return $ret; +} + +function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { + global $username, $attachment_dir, $color, $default_move_to_sent, + $version, $attachments, $squirrelmail_language, $default_charset, + $languages, $useSendmail, $domain, $sent_folder, + $popuser, $data_dir; + + sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); + + $header = $message->rfc822_header; + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + + $rfc822_header = new Rfc822Header(); + $content_type = new ContentType('multipart/report'); + $content_type->properties['report-type']='disposition-notification'; + + set_my_charset(); + if ($default_charset) { + $content_type->properties['charset']=$default_charset; + } + $rfc822_header->content_type = $content_type; + $rfc822_header->to[] = $header->dnt; + $rfc822_header->subject = _("Read:") . ' ' . decodeHeader($header->subject, true, false); + + // FIXME: use identity.php from SM 1.5. Change this also in compose.php + + $reply_to = ''; + if (isset($identity) && $identity != 'default') { + $from_mail = getPref($data_dir, $username, + 'email_address' . $identity); + $full_name = getPref($data_dir, $username, + 'full_name' . $identity); + $from_addr = '"'.$full_name.'" <'.$from_mail.'>'; + $reply_to = getPref($data_dir, $username, + 'reply_to' . $identity); + } else { + $from_mail = getPref($data_dir, $username, 'email_address'); + $full_name = getPref($data_dir, $username, 'full_name'); + $from_addr = '"'.$full_name.'" <'.$from_mail.'>'; + $reply_to = getPref($data_dir, $username,'reply_to'); + } + + // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md) + // This merely comes from compose.php and only happens when there is no + // email_addr specified in user's identity (which is the startup config) + if (preg_match('|^([^@%/]+)[@%/](.+)$|', $username, $usernamedata)) { + $popuser = $usernamedata[1]; + $domain = $usernamedata[2]; + unset($usernamedata); + } else { + $popuser = $username; + } + + if (!$from_mail) { + $from_mail = "$popuser@$domain"; + $from_addr = $from_mail; + } + + $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true); + if ($reply_to) { + $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true); + } + + // part 1 (RFC2298) + $senton = getLongDateString( $header->date, $header->date_unparsed ); + $to_array = $header->to; + $to = ''; + foreach ($to_array as $line) { + $to .= ' '.$line->getAddress(); + } + $now = getLongDateString( time() ); + set_my_charset(); + $body = _("Your message") . "\r\n\r\n" . + "\t" . _("To") . ': ' . decodeHeader($to,false,false,true) . "\r\n" . + "\t" . _("Subject") . ': ' . decodeHeader($header->subject,false,false,true) . "\r\n" . + "\t" . _("Sent") . ': ' . $senton . "\r\n" . + "\r\n" . + sprintf( _("Was displayed on %s"), $now ); + + $special_encoding = ''; + if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && + function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { + $body = $languages[$squirrelmail_language]['XTRA_CODE']('encode', $body); + if (strtolower($default_charset) == 'iso-2022-jp') { + if (mb_detect_encoding($body) == 'ASCII') { + $special_encoding = '8bit'; + } else { + $body = mb_convert_encoding($body, 'JIS'); + $special_encoding = '7bit'; + } + } + } elseif (sq_is8bit($body)) { + // detect 8bit symbols added by translations + $special_encoding = '8bit'; + } + $part1 = new Message(); + $part1->setBody($body); + $mime_header = new MessageHeader; + $mime_header->type0 = 'text'; + $mime_header->type1 = 'plain'; + if ($special_encoding) { + $mime_header->encoding = $special_encoding; + } else { + $mime_header->encoding = '7bit'; + } + if ($default_charset) { + $mime_header->parameters['charset'] = $default_charset; + } + $part1->mime_header = $mime_header; + + // part2 (RFC2298) + $original_recipient = $to; + $original_message_id = $header->message_id; + + $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n"; + if ($original_recipient != '') { + $report .= "Original-Recipient : $original_recipient\r\n"; + } + $final_recipient = $sender; + $report .= "Final-Recipient: rfc822; $final_recipient\r\n" . + "Original-Message-ID : $original_message_id\r\n" . + "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; + + $part2 = new Message(); + $part2->setBody($report); + $mime_header = new MessageHeader; + $mime_header->type0 = 'message'; + $mime_header->type1 = 'disposition-notification'; + $mime_header->encoding = '7bit'; + $part2->mime_header = $mime_header; + + $composeMessage = new Message(); + $composeMessage->rfc822_header = $rfc822_header; + $composeMessage->addEntity($part1); + $composeMessage->addEntity($part2); + + + if ($useSendmail) { + require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php'); + global $sendmail_path, $sendmail_args; + // Check for outdated configuration + if (!isset($sendmail_args)) { + if ($sendmail_path=='/var/qmail/bin/qmail-inject') { + $sendmail_args = ''; + } else { + $sendmail_args = '-i -t'; + } + } + $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args)); + $stream = $deliver->initStream($composeMessage,$sendmail_path); + } else { + require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); + $deliver = new Deliver_SMTP(); + global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host; + + $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false; + + $user = ''; + $pass = ''; + if (empty($pop_before_smtp_host)) + $pop_before_smtp_host = $smtpServerAddress; + + get_smtp_user($user, $pass); + + $stream = $deliver->initStream($composeMessage,$domain,0, + $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); + } + $success = false; + if ($stream) { + $deliver->mail($composeMessage, $stream); + $success = $deliver->finalizeStream($stream); + } + if (!$success) { + $msg = _("Message not sent.") .' '. _("Server replied:") . + "\n<blockquote>\n" . $deliver->dlv_msg . '<br />' . + $deliver->dlv_ret_nr . ' ' . + $deliver->dlv_server_msg . "</blockquote>\n\n"; + require_once(SM_PATH . 'functions/display_messages.php'); + plain_error_message($msg, $color); + } else { + unset ($deliver); + + // copy message to sent folder + $move_to_sent = getPref($data_dir,$username,'move_to_sent'); + if (isset($default_move_to_sent) && ($default_move_to_sent != 0)) { + $svr_allow_sent = true; + } else { + $svr_allow_sent = false; + } + + if (isset($sent_folder) && (($sent_folder != '') || ($sent_folder != 'none')) + && sqimap_mailbox_exists( $imapConnection, $sent_folder)) { + $fld_sent = true; + } else { + $fld_sent = false; + } + + if ((isset($move_to_sent) && ($move_to_sent != 0)) || (!isset($move_to_sent))) { + $lcl_allow_sent = true; + } else { + $lcl_allow_sent = false; + } + + if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) { + require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); + $imap_deliver = new Deliver_IMAP(); + $imap_deliver->mail($composeMessage, $imapConnection, 0, 0, $imapConnection, $sent_folder); + unset ($imap_deliver); + } + } + return $success; +} + +function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id, $uid_support) { + $sg = $set?'+':'-'; + $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)'; + $read = sqimap_run_command ($imapConnection, $cmd, true, $response, + $readmessage, $uid_support); +} + +function formatRecipientString($recipients, $item ) { + global $show_more_cc, $show_more, $show_more_bcc, + $PHP_SELF; + + $string = ''; + if ((is_array($recipients)) && (isset($recipients[0]))) { + $show = false; + + if ($item == 'to') { + if ($show_more) { + $show = true; + $url = set_url_var($PHP_SELF, 'show_more',0); + } else { + $url = set_url_var($PHP_SELF, 'show_more',1); + } + } else if ($item == 'cc') { + if ($show_more_cc) { + $show = true; + $url = set_url_var($PHP_SELF, 'show_more_cc',0); + } else { + $url = set_url_var($PHP_SELF, 'show_more_cc',1); + } + } else if ($item == 'bcc') { + if ($show_more_bcc) { + $show = true; + $url = set_url_var($PHP_SELF, 'show_more_bcc',0); + } else { + $url = set_url_var($PHP_SELF, 'show_more_bcc',1); + } + } + + $cnt = count($recipients); + foreach($recipients as $r) { + $add = decodeHeader($r->getAddress(true)); + if ($string) { + $string .= '<br />' . $add; + } else { + $string = $add; + if ($cnt > 1) { + $string .= ' (<a href="'.$url; + if ($show) { + $string .= '">'._("less").'</a>)'; + } else { + $string .= '">'._("more").'</a>)'; + break; + } + } + } + } + } + return $string; +} + +function formatEnvheader($mailbox, $passed_id, $passed_ent_id, $message, + $color, $FirstTimeSee) { + global $default_use_mdn, $default_use_priority, + $show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on, + $squirrelmail_language; + + $header = $message->rfc822_header; + $env = array(); + $env[_("Subject")] = decodeHeader($header->subject); + $from_name = $header->getAddr_s('from'); + if (!$from_name) { + $from_name = $header->getAddr_s('sender'); + if (!$from_name) { + $from_name = _("Unknown sender"); + } + } + $env[_("From")] = decodeHeader($from_name); + $env[_("Date")] = getLongDateString($header->date, $header->date_unparsed); + $env[_("To")] = formatRecipientString($header->to, "to"); + $env[_("Cc")] = formatRecipientString($header->cc, "cc"); + $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc"); + if ($default_use_priority) { + $env[_("Priority")] = htmlspecialchars(getPriorityStr($header->priority)); + } + if ($show_xmailer_default) { + $env[_("Mailer")] = decodeHeader($header->xmailer); + } + if ($default_use_mdn) { + if ($mdn_user_support) { + if ($header->dnt) { + if ($message->is_mdnsent) { + $env[_("Read receipt")] = _("sent"); + } else { + $env[_("Read receipt")] = _("requested"); + if (!(handleAsSent($mailbox) || + $message->is_deleted || + $passed_ent_id)) { + $mdn_url = $PHP_SELF; + $mdn_url = set_url_var($mdn_url, 'mailbox', urlencode($mailbox)); + $mdn_url = set_url_var($mdn_url, 'passed_id', $passed_id); + $mdn_url = set_url_var($mdn_url, 'passed_ent_id', $passed_ent_id); + $mdn_url = set_url_var($mdn_url, 'sendreceipt', 1); + if ($FirstTimeSee && $javascript_on) { + $script = '<script language="JavaScript" type="text/javascript">' . "\n"; + $script .= '<!--'. "\n"; + $script .= 'if(window.confirm("' . + _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") . + '")) { '."\n" . + ' sendMDN()'. + '}' . "\n"; + $script .= '// -->'. "\n"; + $script .= '</script>'. "\n"; + echo $script; + } + $env[_("Read receipt")] .= ' <a href="' . $mdn_url . '">[' . + _("Send read receipt now") . ']</a>'; + } + } + } + } + } + + $s = '<table width="100%" cellpadding="0" cellspacing="2" border="0"'; + $s .= ' align="center" bgcolor="'.$color[0].'">'; + foreach ($env as $key => $val) { + if ($val) { + $s .= '<tr>'; + $s .= html_tag('td', '<b>' . $key . ':  </b>', 'right', '', 'valign="top" width="20%"') . "\n"; + $s .= html_tag('td', $val, 'left', '', 'valign="top" width="80%"') . "\n"; + $s .= '</tr>'; + } + } + echo '<table bgcolor="'.$color[9].'" width="100%" cellpadding="1"'. + ' cellspacing="0" border="0" align="center">'."\n"; + echo '<tr><td height="5" colspan="2" bgcolor="'. + $color[4].'"></td></tr><tr><td align="center">'."\n"; + echo $s; + do_hook('read_body_header'); + formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color); + echo '</table>'; + echo '</td></tr><tr><td height="5" colspan="2" bgcolor="'.$color[4].'"></td></tr>'."\n"; + echo '</table>'; +} + +function formatMenubar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_response) { + global $base_uri, $draft_folder, $where, $what, $color, $sort, + $startMessage, $PHP_SELF, $save_as_draft, + $enable_forward_as_attachment; + + $topbar_delimiter = ' | '; + $urlMailbox = urlencode($mailbox); + $s = '<table width="100%" cellpadding="3" cellspacing="0" align="center"'. + ' border="0" bgcolor="'.$color[9].'"><tr>' . + html_tag( 'td', '', 'left', '', 'width="33%"' ) . '<small>'; + + $msgs_url = $base_uri . 'src/'; + if (isset($where) && isset($what)) { + $msgs_url .= 'search.php?smtoken=' . sm_generate_security_token() . '&where=' . urlencode($where) . + '&what=' . urlencode($what) . '&mailbox=' . $urlMailbox; + $msgs_str = _("Search Results"); + } else { + $msgs_url .= 'right_main.php?sort=' . $sort . '&startMessage=' . + $startMessage . '&mailbox=' . $urlMailbox; + $msgs_str = _("Message List"); + } + $s .= '<a href="' . $msgs_url . '">' . $msgs_str . '</a>'; + + $delete_url = $base_uri . 'src/delete_message.php?mailbox=' . $urlMailbox . + '&message=' . $passed_id . '&smtoken=' . sm_generate_security_token() . '&'; + $unread_url = $base_uri . 'src/'; + if (!(isset($passed_ent_id) && $passed_ent_id)) { + if ($where && $what) { + $unread_url .= 'search.php?unread_passed_id=' . $passed_id . '&smtoken=' . sm_generate_security_token() . '&where=' . urlencode($where) . '&what=' . urlencode($what) . '&mailbox=' . $urlMailbox; + } else { + $unread_url .= 'right_main.php?unread_passed_id=' . $passed_id . '&sort=' . $sort . '&startMessage=' . $startMessage . '&mailbox=' . $urlMailbox; + } + $s .= $topbar_delimiter; + $s .= '<a href="' . $unread_url . '">' . _("Unread") . '</a>'; + + if ($where && $what) { + $delete_url .= 'where=' . urlencode($where) . '&what=' . urlencode($what); + } else { + $delete_url .= 'sort=' . $sort . '&startMessage=' . $startMessage; + } + $s .= $topbar_delimiter; + $s .= '<a href="' . $delete_url . '">' . _("Delete") . '</a>'; + } + + $comp_uri = 'src/compose.php' . + '?passed_id=' . $passed_id . + '&mailbox=' . $urlMailbox . + '&startMessage=' . $startMessage . + (isset($passed_ent_id)?'&passed_ent_id='.urlencode($passed_ent_id):''); + + if (($mailbox == $draft_folder) && ($save_as_draft)) { + $comp_alt_uri = $comp_uri . '&smaction=draft'; + $comp_alt_string = _("Resume Draft"); + } else if (handleAsSent($mailbox)) { + $comp_alt_uri = $comp_uri . '&smaction=edit_as_new'; + $comp_alt_string = _("Edit Message as New"); + } + if (isset($comp_alt_uri)) { + $s .= $topbar_delimiter; + $s .= makeComposeLink($comp_alt_uri, $comp_alt_string); + } + + $s .= '</small></td><td align="center" width="33%"><small>'; + + if (!(isset($where) && isset($what)) && !$passed_ent_id) { + $prev = findPreviousMessage($mbx_response['EXISTS'], $passed_id); + $next = findNextMessage($passed_id); + if ($prev != -1) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$prev. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'; + $s .= '<a href="'.$uri.'">'._("Previous").'</a>'; + } else { + $s .= _("Previous"); + } + $s .= $topbar_delimiter; + if ($next != -1) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$next. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'; + $s .= '<a href="'.$uri.'">'._("Next").'</a>'; + } else { + $s .= _("Next"); + } + } else if (isset($passed_ent_id) && $passed_ent_id) { + /* code for navigating through attached message/rfc822 messages */ + $url = set_url_var($PHP_SELF, 'passed_ent_id',0); + $s .= '<a href="'.$url.'">'._("View Message").'</a>'; + $entities = array(); + $entity_count = array(); + $c = 0; + + foreach($message->parent->entities as $ent) { + if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') { + $c++; + $entity_count[$c] = $ent->entity_id; + $entities[$ent->entity_id] = $c; + } + } + + $prev_link = _("Previous"); + if (!empty($entities[$passed_ent_id]) && ($entities[$passed_ent_id] > 1)) { + $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1]; + $prev_link = '<a href="' + . set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id) + . '">' . $prev_link . '</a>'; + } + + $next_link = _("Next"); + if (!empty($entities[$passed_ent_id]) && ($entities[$passed_ent_id] < $c)) { + $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1]; + $next_link = '<a href="' + . set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id) + . '">' . $next_link . '</a>'; + } + $s .= $topbar_delimiter . $prev_link; + $par_ent_id = $message->parent->entity_id; + if ($par_ent_id) { + $par_ent_id = substr($par_ent_id,0,-2); + $s .= $topbar_delimiter; + $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id); + $s .= '<a href="'.$url.'">'._("Up").'</a>'; + } + $s .= $topbar_delimiter . $next_link; + } + + $s .= '</small></td>' . "\n" . + html_tag( 'td', '', 'right', '', 'width="33%" nowrap' ) . '<small>'; + $comp_action_uri = $comp_uri . '&smaction=forward'; + $s .= makeComposeLink($comp_action_uri, _("Forward")); + + if ($enable_forward_as_attachment) { + $comp_action_uri = $comp_uri . '&smaction=forward_as_attachment'; + $s .= $topbar_delimiter; + $s .= makeComposeLink($comp_action_uri, _("Forward as Attachment")); + } + + $comp_action_uri = $comp_uri . '&smaction=reply'; + $s .= $topbar_delimiter; + $s .= makeComposeLink($comp_action_uri, _("Reply")); + + $comp_action_uri = $comp_uri . '&smaction=reply_all'; + $s .= $topbar_delimiter; + $s .= makeComposeLink($comp_action_uri, _("Reply All")); + $s .= '</small></td></tr></table>'; + $ret = concat_hook_function('read_body_menu_top', $s); + if($ret != '') { + $s = $ret; + } + echo $s; + do_hook('read_body_menu_bottom'); +} + +function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { + global $base_uri, $where, $what, $download_and_unsafe_link; + + $urlMailbox = urlencode($mailbox); + $urlPassed_id = urlencode($passed_id); + $urlPassed_ent_id = urlencode($passed_ent_id); + + $query_string = 'mailbox=' . $urlMailbox . '&passed_id=' . $urlPassed_id . '&passed_ent_id=' . $urlPassed_ent_id; + + if (!empty($where)) { + $query_string .= '&where=' . urlencode($where); + } + + if (!empty($what)) { + $query_string .= '&what=' . urlencode($what); + } + + $url = $base_uri.'src/view_header.php?'.$query_string; + + $s = "<tr>\n" . + html_tag( 'td', '', 'right', '', 'valign="middle" width="20%"' ) . '<b>' . _("Options") . ":  </b></td>\n" . + html_tag( 'td', '', 'left', '', 'valign="middle" width="80%"' ) . '<small>' . + '<a href="'.$url.'">'._("View Full Header").'</a>'; + + /* Output the printer friendly link if we are in subtle mode. */ + $s .= ' | ' . + printer_friendly_link($mailbox, $passed_id, $passed_ent_id, $color); + echo $s; + + /* Output the download and/or unsafe images link/-s, if any. */ + if ($download_and_unsafe_link) { + echo $download_and_unsafe_link; + } + + do_hook("read_body_header_right"); + $s = "</small></td>\n" . + "</tr>\n"; + echo $s; + +} + +/***************************/ +/* Main of read_body.php */ +/***************************/ + +/* get the globals we may need */ + +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION); + +sqgetGlobalVar('msgs', $msgs, SQ_SESSION); +sqgetGlobalVar('msort', $msort, SQ_SESSION); +sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION); +sqgetGlobalVar('server_sort_array', $server_sort_array, SQ_SESSION); +if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) { + $messages = array(); +} + +/** GET VARS */ +sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET); +sqgetGlobalVar('where', $where, SQ_GET); +sqgetGlobalVar('what', $what, SQ_GET); +if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) { + $show_more = (int) $temp; +} +if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) { + $show_more_cc = (int) $temp; +} +if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) { + $show_more_bcc = (int) $temp; +} +if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) { + $view_hdr = (int) $temp; +} + +/** POST VARS */ +sqgetGlobalVar('move_id', $move_id, SQ_POST); + +/** GET/POST VARS */ +sqgetGlobalVar('passed_ent_id', $passed_ent_id); +sqgetGlobalVar('mailbox', $mailbox); + +if ( sqgetGlobalVar('passed_id', $temp) ) { + $passed_id = (int) $temp; +} +if ( sqgetGlobalVar('sort', $temp) ) { + $sort = (int) $temp; +} +if ( sqgetGlobalVar('startMessage', $temp) ) { + $startMessage = (int) $temp; +} + +/* end of get globals */ +global $uid_support, $sqimap_capabilities; + +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$mbx_response = sqimap_mailbox_select($imapConnection, $mailbox, false, false, true); + + +/** + * $message contains all information about the message + * including header and body + */ + +$uidvalidity = $mbx_response['UIDVALIDITY']; + +if (!isset($messages[$uidvalidity])) { + $messages[$uidvalidity] = array(); +} +if (!isset($messages[$uidvalidity][$passed_id]) || !$uid_support) { + $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); + $FirstTimeSee = !$message->is_seen; + $message->is_seen = true; + $messages[$uidvalidity][$passed_id] = $message; +} else { +// $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); + $message = $messages[$uidvalidity][$passed_id]; + $FirstTimeSee = !$message->is_seen; +} + +if (isset($passed_ent_id) && $passed_ent_id) { + $message = $message->getEntity($passed_ent_id); + if ($message->type0 != 'message' && $message->type1 != 'rfc822') { + $message = $message->parent; + } + $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, $uid_support); + $rfc822_header = new Rfc822Header(); + $rfc822_header->parseHeader($read); + $message->rfc822_header = $rfc822_header; +} else { + $passed_ent_id = 0; +} +$header = $message->header; + +// gmail does not mark messages as read when retrieving the message body +// even though RFC 3501, section 6.4.5 (FETCH Command) says: +// "The \Seen flag is implicitly set; if this causes the flags to change, +// they SHOULD be included as part of the FETCH responses." +// +if ($imap_server_type == 'gmail') { + sqimap_toggle_flag($imapConnection, $passed_id, '\\Seen', true, true); +} + +do_hook('html_top'); + +/****************************************/ +/* Block for handling incoming url vars */ +/****************************************/ + +if (isset($sendreceipt)) { + if ( !$message->is_mdnsent ) { + if (isset($identity) ) { + $final_recipient = getPref($data_dir, $username, 'email_address0', '' ); + } else { + $final_recipient = getPref($data_dir, $username, 'email_address', '' ); + } + + $final_recipient = trim($final_recipient); + if ($final_recipient == '' ) { + $final_recipient = getPref($data_dir, $username, 'email_address', '' ); + } + $supportMDN = ServerMDNSupport($mbx_response["PERMANENTFLAGS"]); + if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) { + ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id, $uid_support); + $message->is_mdnsent = true; + $messages[$uidvalidity][$passed_id]=$message; + } + } +} +/***********************************************/ +/* End of block for handling incoming url vars */ +/***********************************************/ + +$msgs[$passed_id]['FLAG_SEEN'] = true; + +$messagebody = ''; +do_hook('read_body_top'); +if ($show_html_default == 1) { + $ent_ar = $message->findDisplayEntity(array()); +} else { + $ent_ar = $message->findDisplayEntity(array(), array('text/plain')); +} +$cnt = count($ent_ar); +for ($i = 0; $i < $cnt; $i++) { + $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox); + if ($i != $cnt-1) { + $messagebody .= '<hr noshade size=1>'; + } +} + +displayPageHeader($color, $mailbox); +formatMenuBar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_response); +formatEnvheader($mailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee); +echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">'; +echo ' <tr><td>'; +echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">'; +echo ' <tr><td>'; +echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">'; +echo ' <tr bgcolor="'.$color[4].'"><td>'; +// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">'; +echo html_tag( 'table' ,'' , 'left', '', 'cellpadding="1" cellspacing="5" border="0"' ); +echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left') + . '</tr>'; +echo ' </table>'; +echo ' </td></tr>'; +echo ' </table></td></tr>'; +echo ' </table>'; +echo ' </td></tr>'; + +echo '<tr><td height="5" colspan="2" bgcolor="'. + $color[4].'"></td></tr>'."\n"; + +$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id); +if ($attachmentsdisplay) { + echo ' <tr><td>'; + echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">'; + echo ' <tr><td>'; + echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">'; + echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] ); + echo ' <b>' . _("Attachments") . ':</b>'; + echo ' </td></tr>'; + echo ' <tr><td>'; + echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>'; + echo $attachmentsdisplay; + echo ' </td></tr></table>'; + echo ' </td></tr></table>'; + echo ' </td></tr></table>'; + echo ' </td></tr>'; + echo '<tr><td height="5" colspan="2" bgcolor="'. + $color[4].'"></td></tr>'; +} +echo '</table>'; + +/* show attached images inline -- if pref'fed so */ +if (($attachment_common_show_images) && + is_array($attachment_common_show_images_list)) { + foreach ($attachment_common_show_images_list as $img) { + $imgurl = SM_PATH . 'src/download.php' . + '?' . + 'passed_id=' . urlencode($img['passed_id']) . + '&mailbox=' . urlencode($mailbox) . + '&ent_id=' . urlencode($img['ent_id']) . + '&absolute_dl=true'; + + echo html_tag( 'table', "\n" . + html_tag( 'tr', "\n" . + html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left' + ) + ) , + 'center', '', 'cellspacing="0" border="0" cellpadding="2"'); + } +} + +//FIXME: one of these hooks should be removed if we can verify disuse (html_bottom?) +do_hook('read_body_bottom'); +do_hook('html_bottom'); +sqimap_logout($imapConnection); +/* sessions are written at the end of the script. it's better to register + them at the end so we avoid double session_register calls */ +sqsession_register($messages,'messages'); + +?> +</body></html> diff --git a/ehcp/webmail2/src/redirect.php b/ehcp/webmail2/src/redirect.php new file mode 100644 index 0000000..df4bae5 --- /dev/null +++ b/ehcp/webmail2/src/redirect.php @@ -0,0 +1,222 @@ +<?php + +/** + * Prevents users from reposting their form data after a successful logout. + * + * Derived from webmail.php by Ralf Kraudelt <kraude@wiwi.uni-rostock.de> + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: redirect.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the redirect page */ +define('PAGE_NAME', 'redirect'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'functions/global.php'); +require_once(SM_PATH . 'functions/i18n.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/prefs.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/constants.php'); +require_once(SM_PATH . 'functions/page_header.php'); + +// Disable Browser Caching +// +header('Cache-Control: no-cache, no-store, must-revalidate'); +header('Pragma: no-cache'); +header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); +$location = get_location(); + +sqsession_is_active(); + +sqsession_unregister ('user_is_logged_in'); +sqsession_register ($base_uri, 'base_uri'); + +/* get globals we me need */ +sqGetGlobalVar('login_username', $login_username); +sqGetGlobalVar('secretkey', $secretkey); +sqGetGlobalVar('js_autodetect_results', $js_autodetect_results); +if(!sqGetGlobalVar('squirrelmail_language', $squirrelmail_language) || $squirrelmail_language == '') { + $squirrelmail_language = $squirrelmail_default_language; +} + +if (!sqgetGlobalVar('mailtodata', $mailtodata)) { + $mailtodata = ''; +} + + +/* end of get globals */ + +set_up_language($squirrelmail_language, true); +/* Refresh the language cookie. */ +sqsetcookie('squirrelmail_language', $squirrelmail_language, time()+2592000, $base_uri); + +if (!isset($login_username)) { + include_once(SM_PATH . 'functions/display_messages.php' ); + logout_error( _("You must be logged in to access this page.") ); + exit; +} + +if (!sqsession_is_registered('user_is_logged_in')) { + do_hook ('login_before'); + + /** + * Regenerate session id to make sure that authenticated session uses + * different ID than one used before user authenticated. This is a + * countermeasure against session fixation attacks. + * NB: session_regenerate_id() was added in PHP 4.3.2 (and new session + * cookie is only sent out in this call as of PHP 4.3.3), but PHP 4 + * is not vulnerable to session fixation problems in SquirrelMail + * because it prioritizes $base_uri subdirectory cookies differently + * than PHP 5, which is otherwise vulnerable. If we really want to, + * we could define our own session_regenerate_id() when one does not + * exist, but there seems to be no reason to do so. + */ + if (function_exists('session_regenerate_id')) { + session_regenerate_id(); + + // re-send session cookie so we get the right parameters on it + // (such as HTTPOnly, if necessary - PHP doesn't do this itself + sqsetcookie(session_name(),session_id(),false,$base_uri); + } + + $onetimepad = OneTimePadCreate(strlen($secretkey)); + $key = OneTimePadEncrypt($secretkey, $onetimepad); + sqsession_register($onetimepad, 'onetimepad'); + + /* remove redundant spaces */ + $login_username = trim($login_username); + + /* Verify that username and password are correct. */ + if ($force_username_lowercase) { + $login_username = strtolower($login_username); + } + + $imapConnection = sqimap_login($login_username, $key, $imapServerAddress, $imapPort, 0); + + $sqimap_capabilities = sqimap_capability($imapConnection); + sqsession_register($sqimap_capabilities, 'sqimap_capabilities'); + $delimiter = sqimap_get_delimiter ($imapConnection); + + sqimap_logout($imapConnection); + sqsession_register($delimiter, 'delimiter'); + + $username = $login_username; + sqsession_register ($username, 'username'); + sqsetcookie('key', $key, 0, $base_uri); + + $is_login_verified_hook = TRUE; + do_hook ('login_verified'); + $is_login_verified_hook = FALSE; + +} + +/* Set the login variables. */ +$user_is_logged_in = true; +$just_logged_in = true; + +/* And register with them with the session. */ +sqsession_register ($user_is_logged_in, 'user_is_logged_in'); +sqsession_register ($just_logged_in, 'just_logged_in'); + +/* parse the accepted content-types of the client */ +$attachment_common_types = array(); +$attachment_common_types_parsed = array(); +sqsession_register($attachment_common_types, 'attachment_common_types'); +sqsession_register($attachment_common_types_parsed, 'attachment_common_types_parsed'); + + +if ( sqgetGlobalVar('HTTP_ACCEPT', $http_accept, SQ_SERVER) && + !isset($attachment_common_types_parsed[$http_accept]) ) { + attachment_common_parse($http_accept); +} + +/* Complete autodetection of Javascript. */ +$javascript_setting = getPref + ($data_dir, $username, 'javascript_setting', SMPREF_JS_AUTODETECT); +$js_autodetect_results = (isset($js_autodetect_results) ? + $js_autodetect_results : SMPREF_JS_OFF); +/* See if it's set to "Always on" */ +$js_pref = SMPREF_JS_ON; +if ($javascript_setting != SMPREF_JS_ON){ + if ($javascript_setting == SMPREF_JS_AUTODETECT) { + if ($js_autodetect_results == SMPREF_JS_OFF) { + $js_pref = SMPREF_JS_OFF; + } + } else { + $js_pref = SMPREF_JS_OFF; + } +} +/* Update the prefs */ +setPref($data_dir, $username, 'javascript_on', $js_pref); + +/* Compute the URL to forward the user to. */ +$redirect_url = 'webmail.php'; + +if ( sqgetGlobalVar('session_expired_location', $session_expired_location, SQ_SESSION) ) { + sqsession_unregister('session_expired_location'); + if ( $session_expired_location == 'compose' ) { + $compose_new_win = getPref($data_dir, $username, 'compose_new_win', 0); + if ($compose_new_win) { + // do not prefix $location here because $session_expired_location is set to the PAGE_NAME + // of the last page + $redirect_url = $session_expired_location . '.php'; + } else { + $redirect_url = 'webmail.php?right_frame=' . urlencode($session_expired_location . '.php'); + } + } else if ($session_expired_location != 'webmail' + && $session_expired_location != 'left_main') { + $redirect_url = 'webmail.php?right_frame=' . urlencode($session_expired_location . '.php'); + } + unset($session_expired_location); +} + +if($mailtodata != '') { + $redirect_url = $location . '/webmail.php?right_frame=compose.php&mailtodata='; + $redirect_url .= urlencode($mailtodata); +} + + + +/* Write session data and send them off to the appropriate page. */ +session_write_close(); +header("Location: $redirect_url"); + +/* --------------------- end main ----------------------- */ + +function attachment_common_parse($str) { + global $attachment_common_types, $attachment_common_types_parsed; + + $attachment_common_types_parsed[$str] = true; + + /* + * Replace ", " with "," and explode on that as Mozilla 1.x seems to + * use "," to seperate whilst IE, and earlier versions of Mozilla use + * ", " to seperate + */ + + $str = str_replace( ', ' , ',' , $str ); + $types = explode(',', $str); + + foreach ($types as $val) { + // Ignore the ";q=1.0" stuff + if (strpos($val, ';') !== false) + $val = substr($val, 0, strpos($val, ';')); + + if (! isset($attachment_common_types[$val])) { + $attachment_common_types[$val] = true; + } + } + sqsession_register($attachment_common_types, 'attachment_common_types'); +} + diff --git a/ehcp/webmail2/src/right_main.php b/ehcp/webmail2/src/right_main.php new file mode 100644 index 0000000..481347e --- /dev/null +++ b/ehcp/webmail2/src/right_main.php @@ -0,0 +1,253 @@ +<?php + +/** + * right_main.php + * + * This is where the mailboxes are listed. This controls most of what + * goes on in SquirrelMail. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: right_main.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the right_main page */ +define('PAGE_NAME', 'right_main'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/date.php'); +require_once(SM_PATH . 'functions/mime.php'); +require_once(SM_PATH . 'functions/mailbox_display.php'); +require_once(SM_PATH . 'functions/display_messages.php'); +require_once(SM_PATH . 'functions/html.php'); + +/*********************************************************** + * incoming variables from URL: * + * $sort Direction to sort by date * + * values: 0 - descending order * + * values: 1 - ascending order * + * $startMessage Message to start at * + * $mailbox Full Mailbox name * + * * + * incoming from cookie: * + * $key pass * + * incoming from session: * + * $username duh * + * * + ***********************************************************/ + +// Disable Browser Caching // +header('Cache-Control: no-cache, no-store, must-revalidate'); +header('Pragma: no-cache'); +header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); + + +/* lets get the global vars we may need */ +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION); + +sqgetGlobalVar('mailbox', $mailbox); +sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION); +sqgetGlobalVar('numMessages' , $numMessages, SQ_SESSION); +sqgetGlobalVar('session', $session, SQ_GET); +sqgetGlobalVar('note', $note, SQ_GET); +sqgetGlobalVar('use_mailbox_cache', $use_mailbox_cache, SQ_GET); + +if ( sqgetGlobalVar('startMessage', $temp) ) { + $startMessage = (int) $temp; +} +if ( sqgetGlobalVar('PG_SHOWNUM', $temp) ) { + $PG_SHOWNUM = (int) $temp; +} +if ( sqgetGlobalVar('PG_SHOWALL', $temp, SQ_GET) ) { + $PG_SHOWALL = (int) $temp; +} +if ( sqgetGlobalVar('newsort', $temp, SQ_GET) ) { + $newsort = (int) $temp; +} +if ( !sqgetGlobalVar('preselected', $preselected, SQ_GET) || !is_array($preselected)) { + $preselected = array(); +} else { + $preselected = array_keys($preselected); +} +if ( sqgetGlobalVar('checkall', $temp, SQ_GET) ) { + $checkall = (int) $temp; +} +if ( sqgetGlobalVar('set_thread', $temp, SQ_GET) ) { + $set_thread = (int) $temp; +} +if ( !sqgetGlobalVar('composenew', $composenew, SQ_GET) ) { + $composenew = false; +} +/* end of get globals */ + +/* Open a connection on the imap port (143) */ + +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + +if (isset($PG_SHOWALL)) { + if ($PG_SHOWALL) { + $PG_SHOWNUM=999999; + $show_num=$PG_SHOWNUM; + sqsession_register($PG_SHOWNUM, 'PG_SHOWNUM'); + } + else { + sqsession_unregister('PG_SHOWNUM'); + unset($PG_SHOWNUM); + } +} +else if( isset( $PG_SHOWNUM ) ) { + $show_num = $PG_SHOWNUM; +} + +if (!isset($show_num) || empty($show_num) || ($show_num == 0)) { + setPref($data_dir, $username, 'show_num' , 15); + $show_num = 15; +} + +if (isset($newsort) && $newsort != $sort) { + setPref($data_dir, $username, 'sort', $newsort); +} + + + +/* If the page has been loaded without a specific mailbox, */ +/* send them to the inbox */ +if (!isset($mailbox)) { + $mailbox = 'INBOX'; + $startMessage = 1; +} + + +if (!isset($startMessage) || ($startMessage == '')) { + $startMessage = 1; +} + +/* decide if we are thread sorting or not */ +if (!empty($allow_thread_sort) && ($allow_thread_sort == TRUE)) { + if (isset($set_thread)) { + if ($set_thread == 1) { + setPref($data_dir, $username, "thread_$mailbox", 1); + $thread_sort_messages = '1'; + } + elseif ($set_thread == 2) { + setPref($data_dir, $username, "thread_$mailbox", 0); + $thread_sort_messages = '0'; + } + } + else { + $thread_sort_messages = getPref($data_dir, $username, "thread_$mailbox"); + } +} +else { + $thread_sort_messages = 0; +} + +sqimap_mailbox_select($imapConnection, $mailbox); + +// the preg_match() is a fix for Dovecot wherein UIDs can be bigger than +// normal integers - this isn't in 1.4 yet, but when adding new code, why not... +if (sqgetGlobalVar('unread_passed_id', $unread_passed_id, SQ_GET) + && preg_match('/^[0-9]+$/', $unread_passed_id)) { + sqimap_toggle_flag($imapConnection, $unread_passed_id, '\\Seen', false, true); +} + +if ($composenew) { + $comp_uri = SM_PATH . 'src/compose.php?mailbox='. urlencode($mailbox). + "&session=" .urlencode($session); + displayPageHeader($color, $mailbox, "comp_in_new('$comp_uri');", false); +} else { + displayPageHeader($color, $mailbox); +} + +do_hook('right_main_after_header'); +if (isset($note)) { + echo html_tag( 'div', '<b>' . htmlspecialchars($note) .'</b>', 'center' ) . "<br />\n"; +} + +if ( sqgetGlobalVar('just_logged_in', $just_logged_in, SQ_SESSION) ) { + if ($just_logged_in == true) { + $just_logged_in = false; + sqsession_register($just_logged_in, 'just_logged_in'); + + if (strlen(trim($motd)) > 0) { + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', $motd, 'center' ) + ) , + '', $color[4], 'width="100%" cellpadding="5" cellspacing="1" border="0"' ) + ) + ) , + 'center', $color[9], 'width="70%" cellpadding="0" cellspacing="3" border="0"' ); + } + } +} + +if (isset($newsort)) { + $sort = $newsort; + sqsession_register($sort, 'sort'); +} + +/********************************************************************* + * Check to see if we can use cache or not. Currently the only time * + * when you will not use it is when a link on the left hand frame is * + * used. Also check to make sure we actually have the array in the * + * registered session data. :) * + *********************************************************************/ +if (! isset($use_mailbox_cache)) { + $use_mailbox_cache = 0; +} + + +if ($use_mailbox_cache && sqsession_is_registered('msgs')) { + showMessagesForMailbox($imapConnection, $mailbox, $numMessages, $startMessage, $sort, $color, $show_num, $use_mailbox_cache); +} else { + if (sqsession_is_registered('msgs')) { + unset($msgs); + } + + if (sqsession_is_registered('msort')) { + unset($msort); + } + + if (sqsession_is_registered('numMessages')) { + unset($numMessages); + } + + $numMessages = sqimap_get_num_messages ($imapConnection, $mailbox); + + // set 8th argument to false in order to make sure that cache is not used. + showMessagesForMailbox($imapConnection, $mailbox, $numMessages, + $startMessage, $sort, $color, $show_num, + false); + + if (sqsession_is_registered('msgs') && isset($msgs)) { + sqsession_register($msgs, 'msgs'); + } + + if (sqsession_is_registered('msort') && isset($msort)) { + sqsession_register($msort, 'msort'); + } + + sqsession_register($numMessages, 'numMessages'); +} +do_hook('right_main_bottom'); +sqimap_logout ($imapConnection); + +echo '</body></html>'; + diff --git a/ehcp/webmail2/src/search.php b/ehcp/webmail2/src/search.php new file mode 100644 index 0000000..d816180 --- /dev/null +++ b/ehcp/webmail2/src/search.php @@ -0,0 +1,588 @@ +<?php + +/** + * search.php + * + * IMAP search page + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: search.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage search + */ + +/** This is the search page */ +define('PAGE_NAME', 'search'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +/** SquirrelMail required files. + */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/imap_search.php'); +require_once(SM_PATH . 'functions/imap_mailbox.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/forms.php'); + +global $allow_thread_sort; + +/* get globals we may need */ + +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); +sqgetGlobalVar('composenew' , $composenew, SQ_FORM); +sqgetGlobalVar('composesession' , $composesession , SQ_SESSION); + +if (!sqgetGlobalVar('mailbox',$mailbox,SQ_GET)) { + unset($mailbox); +} +if (!sqgetGlobalVar('submit',$submit,SQ_GET)) { + $submit = ''; +} +if (!sqgetGlobalVar('what',$what,SQ_GET)) { + $what=''; +} +if (! sqgetGlobalVar('where',$where,SQ_GET) || + ! in_array( $where, array('BODY','TEXT','SUBJECT','FROM','CC','TO'))) { + // make sure that 'where' is one if standard IMAP SEARCH keywords + if (isset($mailbox) && isSentMailbox($mailbox, TRUE)) + $where = 'TO'; + else + $where = 'FROM'; +} +if ( !sqgetGlobalVar('preselected', $preselected, SQ_GET) || !is_array($preselected)) { + $preselected = array(); +} else { + $preselected = array_keys($preselected); +} +if (!sqgetGlobalVar('checkall',$checkall,SQ_GET)) { + unset($checkall); +} +if (sqgetGlobalVar('count',$count,SQ_GET)) { + $count = (int) $count; +} else { + unset($count); +} +if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_GET)) { + $submitted_token = ''; +} +/* end of get globals */ + +/* here are some functions, could go in imap_search.php + this was here, pretty handy */ +function s_opt( $val, $sel, $tit ) { + echo " <option value=\"$val\""; + if ( $sel == $val ) { + echo ' selected="selected"'; + } + echo ">$tit</option>\n"; +} + +/* function to get the recent searches and put them in the attributes array */ +function get_recent($username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + for ($x=1;$x<=$recent_count;$x++) { + reset($types); + foreach ($types as $key) { + $attributes[$key][$x] = getPref($data_dir, $username, $key.$x, ""); + } + } + return $attributes; +} + +/* function to get the saved searches and put them in the saved_attributes array */ +function get_saved($username, $data_dir) { + $saved_attributes = array(); + $types = array('saved_what', 'saved_where', 'saved_folder'); + foreach ($types as $key) { + for ($x=1;;$x++) { + $prefval = getPref($data_dir, $username, $key."$x", ""); + if ($prefval == "") { + break; + } else { + $saved_attributes[$key][$x] = $prefval; + } + } + } + return $saved_attributes; +} + +/* function to update recent pref arrays */ +function update_recent($what, $where, $mailbox, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $input = array($what, $where, $mailbox); + $attributes = get_recent( $username, $data_dir); + reset($types); + $dupe = 'no'; + for ($i=1;$i<=count($attributes['search_what']);$i++) { + if (isset($attributes['search_what'][$i])) { + if ($what == $attributes['search_what'][$i] && + $where == $attributes['search_where'][$i] && + $mailbox == $attributes['search_folder'][$i]) { + $dupe = 'yes'; + } + } + } + if ($dupe == 'no') { + $i = 0; + foreach ($types as $key) { + array_push ($attributes[$key], $input[$i]); + array_shift ($attributes[$key]); + $i++; + } + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + $n=0; + for ($i=1;$i<=$recent_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } + } +} + +/* function to forget a recent search */ +function forget_recent($forget_index, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $attributes = get_recent( $username, $data_dir); + reset($types); + foreach ($types as $key) { + array_splice($attributes[$key], $forget_index - 1, 1); + array_unshift($attributes[$key], ''); + } + reset($types); + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + $n=0; + for ($i=1;$i<=$recent_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } +} + +/* function to delete a saved search */ +function delete_saved($delete_index, $username, $data_dir) { + $types = array('saved_what', 'saved_where', 'saved_folder'); + $attributes = get_saved($username, $data_dir); + foreach ($types as $key) { + array_splice($attributes[$key], $delete_index, 1); + } + reset($types); + $n=0; + $saved_count = count($attributes['saved_what']); + $last_element = $saved_count + 1; + for ($i=1;$i<=$saved_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } + reset($types); + foreach($types as $key) { + removePref($data_dir, $username, $key.$last_element); + } +} + +/* function to save a search from recent to saved */ +function save_recent($save_index, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $saved_types = array(0 => 'saved_what', 1 => 'saved_where', 2 => 'saved_folder'); + $saved_array = get_saved($username, $data_dir); + $save_index = $save_index -1; + if (isset($saved_array['saved_what'])) { + $saved_count = (count($saved_array['saved_what']) + 1); + } else { + // there are no saved searches. Function is used to save first search + $saved_count = 1; + } + $attributes = get_recent ($username, $data_dir); + $n = 0; + foreach ($types as $key) { + $slice = array_slice($attributes[$key], $save_index, 1); + $name = $saved_types[$n]; + setPref($data_dir, $username, $name.$saved_count, $slice[0]); + $n++; + } +} + +function printSearchMessages($msgs,$mailbox, $cnt, $imapConnection, $where, $what, $usecache = false, $newsort = false) { + global $sort, $color, $allow_server_sort, $allow_server_thread; + + if ($cnt > 0) { + if ((!empty($allow_server_sort) && $allow_server_sort) || (!empty($allow_server_thread) && $allow_server_thread)) { + $msort = $msgs; + } else { + $msort = calc_msort($msgs, $sort, $mailbox); + } + + if ( $mailbox == 'INBOX' ) { + $showbox = _("INBOX"); + } else { + $showbox = imap_utf7_decode_local($mailbox); + } + echo html_tag( 'div', '<b><big>' . _("Folder:") . ' '. + htmlspecialchars($showbox) .'</big></b>','center') . "\n"; + + $msg_cnt_str = get_msgcnt_str(1, $cnt, $cnt); + $toggle_all = get_selectall_link(1, $sort); + + $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox); + $form_name = "FormMsgs" . $safe_name; + echo '<form name="' . $form_name . '" method="post" action="move_messages.php">' ."\n" . + '<input type="hidden" name="mailbox" value="'.htmlspecialchars($mailbox).'">' . "\n" . + '<input type="hidden" name="startMessage" value="1">' . "\n" . + addHidden('smtoken', sm_generate_security_token()) . "\n"; + + echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">'; + echo '<tr><td>'; + + mail_message_listing_beginning($imapConnection, $mailbox, $sort, + $msg_cnt_str, $toggle_all, 1); + + echo '</td></tr>'; + echo '<tr><td height="5" bgcolor="'.$color[4].'"></td></tr>'; + echo '<tr><td>'; + echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">'; + echo ' <tr><td>'; + echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[5].'">'; + echo '<tr><td>'; + + printHeader($mailbox, 6, $color, false); + + displayMessageArray($imapConnection, $cnt, 1, + $msort, $mailbox, $sort, $color, $cnt, $where, $what); + + echo '</td></tr></table></td></tr></table>'; + mail_message_listing_end($cnt, '', $msg_cnt_str, $color); + echo "\n</table></form>\n\n"; + } +} + +/* ------------------------ main ------------------------ */ + +/* reset these arrays on each page load just in case */ +$attributes = array (); +$saved_attributes = array (); +$search_all = 'none'; +$perbox_count = array (); +$recent_count = getPref($data_dir, $username, 'search_memory', 0); + +/* get mailbox names */ +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$boxes = sqimap_mailbox_list($imapConnection); + +/* set current mailbox to INBOX if none was selected or if page + was called to search all folders. */ +if ( !isset($mailbox) || $mailbox == 'None' || $mailbox == '' ) { + $mailbox = $boxes[0]['unformatted']; +} +if ($mailbox == 'All Folders') { + $search_all = 'all'; +} + +// the preg_match() is a fix for Dovecot wherein UIDs can be bigger than +// normal integers - this isn't in 1.4 yet, but when adding new code, why not... +if (sqgetGlobalVar('unread_passed_id', $unread_passed_id, SQ_GET) + && preg_match('/^[0-9]+$/', $unread_passed_id)) { + sqimap_mailbox_select($imapConnection, $mailbox); + sqimap_toggle_flag($imapConnection, $unread_passed_id, '\\Seen', false, true); +} + +if (isset($composenew) && $composenew) { + $comp_uri = "../src/compose.php?mailbox=". urlencode($mailbox). + "&session=$composesession&"; + displayPageHeader($color, $mailbox, "comp_in_new('$comp_uri');", false); +} else { + displayPageHeader($color, $mailbox); +} +/* See how the page was called and fire off correct function */ +if (empty($submit) && !empty($what)) { + $submit = _("Search"); +} + +// need to verify security token if user wants to do anything +if (!empty($submit)) { + sm_validate_security_token($submitted_token, 3600, TRUE); +} + +if ($submit == _("Search") && !empty($what)) { + if ($recent_count > 0) { + update_recent($what, $where, $mailbox, $username, $data_dir); + } +} +elseif ($submit == 'forget' && isset($count)) { + forget_recent($count, $username, $data_dir); +} +elseif ($submit == 'save' && isset($count)) { + save_recent($count, $username, $data_dir); +} +elseif ($submit == 'delete' && isset($count)) { + delete_saved($count, $username, $data_dir); +} + +do_hook('search_before_form'); + +echo html_tag( 'table', + html_tag( 'tr', "\n" . + html_tag( 'td', '<b>' . _("Search") . '</b>', 'center', $color[0] ) + ) , + '', '', 'width="100%"') . "\n"; + +/* update the recent and saved searches from the pref files */ +$attributes = get_recent($username, $data_dir); +$saved_attributes = get_saved($username, $data_dir); +if (isset($saved_attributes['saved_what'])) { + $saved_count = count($saved_attributes['saved_what']); +} else { + $saved_count = 0; +} +$count_all = 0; + +/* Saved Search Table */ +if ($saved_count > 0) { + echo "<br />\n" + . html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' ) + . html_tag( 'tr', + html_tag( 'td', '<b>'._("Saved Searches") . '</b>', 'center' ) + ) + . html_tag( 'tr' ) + . html_tag( 'td' ) + . html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="2" cellspacing="2" border="0"' ); + for ($i=0; $i < $saved_count; ++$i) { + if ($i % 2) { + echo html_tag( 'tr', '', '', $color[0] ); + } else { + echo html_tag( 'tr', '', '', $color[4] ); + } + echo html_tag( 'td', htmlspecialchars(imap_utf7_decode_local($saved_attributes['saved_folder'][$i + 1])), 'left', '', 'width="35%"' ) + . html_tag( 'td', htmlspecialchars($saved_attributes['saved_what'][$i + 1]), 'left' ) + . html_tag( 'td', htmlspecialchars($saved_attributes['saved_where'][$i + 1]), 'center' ) + . html_tag( 'td', '', 'right' ) + . '<a href="search.php' + . '?mailbox=' . urlencode($saved_attributes['saved_folder'][$i + 1]) + . '&what=' . urlencode($saved_attributes['saved_what'][$i + 1]) + . '&where=' . urlencode($saved_attributes['saved_where'][$i + 1]) + . '&smtoken=' . sm_generate_security_token() + . '">' . _("edit") . '</a>' + . ' | ' + . '<a href="search.php' + . '?mailbox=' . urlencode($saved_attributes['saved_folder'][$i + 1]) + . '&what=' . urlencode($saved_attributes['saved_what'][$i + 1]) + . '&where=' . urlencode($saved_attributes['saved_where'][$i + 1]) + . '&submit=Search_no_update' + . '&smtoken=' . sm_generate_security_token() + . '">' . _("search") . '</a>' + . ' | ' + . "<a href=\"search.php?count=$i&submit=delete&smtoken=" . sm_generate_security_token() .'">' + . _("delete") + . '</a>' + . '</td></tr>'; + } + echo "</table></td></tr></table>\n"; +} + +if ($recent_count > 0) { + echo "<br />\n" + . html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' ) + . html_tag( 'tr', + html_tag( 'td', '<b>' . _("Recent Searches") . '</b>', 'center' ) + ) + . html_tag( 'tr' ) + . html_tag( 'td' ) + . html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="0" cellspacing="0" border="0"' ); + for ($i=1; $i <= $recent_count; ++$i) { + if (isset($attributes['search_folder'][$i])) { + if ($attributes['search_folder'][$i] == "") { + $attributes['search_folder'][$i] = "INBOX"; + } + } + if ($i % 2) { + echo html_tag( 'tr', '', '', $color[0] ); + } else { + echo html_tag( 'tr', '', '', $color[0] ); + } + if (isset($attributes['search_what'][$i]) && + !empty($attributes['search_what'][$i])) { + echo html_tag( 'td', htmlspecialchars(imap_utf7_decode_local($attributes['search_folder'][$i])), 'left', '', 'width="35%"' ) + . html_tag( 'td', htmlspecialchars($attributes['search_what'][$i]), 'left' ) + . html_tag( 'td', htmlspecialchars($attributes['search_where'][$i]), 'center' ) + . html_tag( 'td', '', 'right' ) + . "<a href=\"search.php?count=$i&submit=save&smtoken=" . sm_generate_security_token() . '">' + . _("save") + . '</a>' + . ' | ' + . '<a href="search.php' + . '?mailbox=' . urlencode($attributes['search_folder'][$i]) + . '&what=' . urlencode($attributes['search_what'][$i]) + . '&where=' . urlencode($attributes['search_where'][$i]) + . '&submit=Search_no_update' + . '&smtoken=' . sm_generate_security_token() + . '">' . _("search") . '</a>' + . ' | ' + . "<a href=\"search.php?count=$i&submit=forget&smtoken=" . sm_generate_security_token() . '">' + . _("forget") + . '</a>' + . '</td></tr>'; + } + } + echo '</table></td></tr></table><br />'; +} + +/** FIXME: remove or fix it. $newsort is not set and not extracted from request +if (isset($newsort)) { + $sort = $newsort; + sqsession_register($sort, 'sort'); +}*/ + +/********************************************************************* + * Check to see if we can use cache or not. Currently the only time * + * when you will not use it is when a link on the left hand frame is * + * used. Also check to make sure we actually have the array in the * + * registered session data. :) * + *********************************************************************/ + +/** FIXME: remove or fix it. $use_mailbox_cache is not set and not extracted from request +if (! isset($use_mailbox_cache)) { + $use_mailbox_cache = 0; +}*/ + +/* There is a problem with registered vars in 4.1 */ +/* +if( substr( phpversion(), 0, 3 ) == '4.1' ) { + $use_mailbox_cache = FALSE; +} +*/ + +/* Search Form */ +echo html_tag( 'div', '<b>' . _("Current Search") . '</b>', 'left' ) . "\n" + . '<form action="search.php" name="s">' + . addHidden('smtoken', sm_generate_security_token()) + . html_tag( 'table', '', '', '', 'width="95%" cellpadding="0" cellspacing="0" border="0"' ) + . html_tag( 'tr' ) + . html_tag( 'td', '', 'left' ) + . '<select name="mailbox">' + . '<option value="All Folders"'; + if ($mailbox == 'All Folders') { + echo ' selected="selected"'; + } + echo '>[ ' . _("All Folders") . " ]</option>\n"; + + $show_selected = array(strtolower($mailbox)); + echo sqimap_mailbox_option_list($imapConnection, $show_selected, 0, $boxes); + + echo ' </select>'. + " </td>\n"; + +// FIXME: explain all str_replace calls. +$what_disp = str_replace(',', ' ', $what); +$what_disp = str_replace('\\\\', '\\', $what_disp); +$what_disp = str_replace('\\"', '"', $what_disp); +$what_disp = str_replace('"', '"', $what_disp); + +echo html_tag( 'td', '<input type="text" size="35" name="what" value="' . $what_disp . '" />' . "\n", 'center' ) + . html_tag( 'td', '', 'right' ) + . "<select name=\"where\">"; +s_opt( 'BODY', $where, _("Body") ); +s_opt( 'TEXT', $where, _("Everywhere") ); +s_opt( 'SUBJECT', $where, _("Subject") ); +s_opt( 'FROM', $where, _("From") ); +s_opt( 'CC', $where, _("Cc") ); +s_opt( 'TO', $where, _("To") ); +echo " </select>\n" . + " </td>\n". + html_tag( 'td', '<input type="submit" name="submit" value="' . _("Search") . '" />' . "\n", 'center', '', 'colspan="3"' ) . + " </tr>\n". + " </table>\n". + "</form>\n"; + + +do_hook('search_after_form'); + +flush(); + +/* + search all folders option still in the works. returns a table for each + folder it finds a match in. +*/ + +$old_value = 0; +if ($allow_thread_sort == TRUE) { + $old_value = $allow_thread_sort; + $allow_thread_sort = FALSE; +} + +if ($search_all == 'all') { + $mailbox == ''; + $boxcount = count($boxes); + echo '<br /><center><b>' . + _("Search Results") . + "</b></center><br />\n"; + for ($x=0;$x<$boxcount;$x++) { + if (!in_array('noselect', $boxes[$x]['flags'])) { + $mailbox = $boxes[$x]['unformatted']; + if (($submit == _("Search") || $submit == 'Search_no_update') && !empty($what)) { + sqimap_mailbox_select($imapConnection, $mailbox); + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + $count_all = count($msgs); + printSearchMessages($msgs, $mailbox, $count_all, $imapConnection, + $where, $what, false, false); + array_push($perbox_count, $count_all); + } + } + } + for ($i=0;$i<count($perbox_count);$i++) { + if ($perbox_count[$i]) { + $count_all = true; + break; + } + } + if (!$count_all) { + echo '<br /><center>' . _("No Messages Found") . '</center>'; + } +} + +/* search one folder option */ +else { + if (($submit == _("Search") || $submit == 'Search_no_update') && !empty($what)) { + echo '<br />' + . html_tag( 'div', '<b>' . _("Search Results") . '</b>', 'center' ) . "\n"; + sqimap_mailbox_select($imapConnection, $mailbox); + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + if (count($msgs)) { + printSearchMessages($msgs, $mailbox, count($msgs), $imapConnection, + $where, $what, false, false); + } else { + echo '<br /><center>' . _("No Messages Found") . '</center>'; + } + } +} + +/* must have search terms to search */ +if ($submit == _("Search") && empty($what)) { + echo '<br />' + . html_tag( 'div', '<b>' . _("Please enter something to search for") . '</b>', 'center' ) . "\n"; +} + +$allow_thread_sort = $old_value; + + +do_hook('search_bottom'); +sqimap_logout($imapConnection); +echo '</body></html>'; diff --git a/ehcp/webmail2/src/signout.php b/ehcp/webmail2/src/signout.php new file mode 100644 index 0000000..1050f6e --- /dev/null +++ b/ehcp/webmail2/src/signout.php @@ -0,0 +1,98 @@ +<?php + +/** + * signout.php -- cleans up session and logs the user out + * + * Cleans up after the user. Resets cookies and terminates session. + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: signout.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + */ + +/** This is the signout page */ +define('PAGE_NAME', 'signout'); + +/** + * Path for SquirrelMail required files. + * @ignore + */ +define('SM_PATH','../'); + +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/prefs.php'); +require_once(SM_PATH . 'functions/plugin.php'); +require_once(SM_PATH . 'functions/strings.php'); +require_once(SM_PATH . 'functions/html.php'); + +/* Erase any lingering attachments */ +sqgetGlobalVar('compose_messages', $compose_messages, SQ_SESSION); +if (!empty($compose_messages) && is_array($compose_messages)) { + foreach($compose_messages as $composeMessage) { + $composeMessage->purgeAttachments(); + } +} + +if (!isset($frame_top)) { + $frame_top = '_top'; +} + +/* If a user hits reload on the last page, $base_uri isn't set + * because it was deleted with the session. */ +if (! sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION) ) { + require_once(SM_PATH . 'functions/display_messages.php'); +} + +do_hook('logout'); + +sqsession_destroy(); + +if ($signout_page) { + // Status 303 header is disabled. PHP fastcgi bug. See 1.91 changelog. + //header('Status: 303 See Other'); + header("Location: $signout_page"); + exit; /* we send no content if we're redirecting. */ +} + +/* internal gettext functions will fail, if language is not set */ +set_up_language($squirrelmail_language, true, true); +?> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <meta name="robots" content="noindex,nofollow"> +<?php + if ($theme_css != '') { +?> + <link rel="stylesheet" type="text/css" href="<?php echo $theme_css; ?>"> +<?php + } +?> + <title><?php echo $org_title . ' - ' . _("Signout"); ?> + + +

              +' . + _("Click here to log back in.") . '
              ' , + 'center' ) , + '', $color[4], 'width="100%"' ) . + html_tag( 'tr', + html_tag( 'td', '
              ', 'center' ) , + '', $color[0], 'width="100%"' ) , +'center', $color[4], 'width="50%" cols="1" cellpadding="2" cellspacing="0" border="0"' ) +?> + + diff --git a/ehcp/webmail2/src/vcard.php b/ehcp/webmail2/src/vcard.php new file mode 100644 index 0000000..4d91ac5 --- /dev/null +++ b/ehcp/webmail2/src/vcard.php @@ -0,0 +1,240 @@ +' . "\n" . + ''; + +$message = sqimap_get_message($imapConnection, $passed_id, $mailbox); + +$entity_vcard = getEntity($message,$ent_id); + +$vcard = mime_fetch_body ($imapConnection, $passed_id, $ent_id); +$vcard = decodeBody($vcard, $entity_vcard->header->encoding); +$vcard = explode ("\n",$vcard); +foreach ($vcard as $l) { + $k = substr($l, 0, strpos($l, ':')); + $v = substr($l, strpos($l, ':') + 1); + $attributes = explode(';', $k); + $k = strtolower(array_shift($attributes)); + foreach ($attributes as $attr) { + if ($attr == 'quoted-printable') + $v = quoted_printable_decode($v); + else + $k .= ';' . strtolower($attr); + } + + $v = str_replace(';', "\n", $v); + $vcard_nice[$k] = $v; +} + +if ($vcard_nice['version'] == '2.1') { + // get firstname and lastname for sm addressbook + $vcard_nice['firstname'] = substr($vcard_nice['n'], + strpos($vcard_nice['n'], "\n") + 1, strlen($vcard_nice['n'])); + $vcard_nice['lastname'] = substr($vcard_nice['n'], 0, + strpos($vcard_nice['n'], "\n")); + // workaround for Outlook, should be fixed in a better way, + // maybe in new 'vCard' class. + if (isset($vcard_nice['email;pref;internet'])) { + $vcard_nice['email;internet'] = $vcard_nice['email;pref;internet']; + } +} else { + echo '\n"; + $vcard_nice['firstname'] = ''; + $vcard_nice['lastname'] = ''; +} + +foreach ($vcard_nice as $k => $v) { + $v = htmlspecialchars($v); + $v = trim($v); + $vcard_safe[$k] = trim(nl2br($v)); +} + +$ShowValues = array( + 'fn' => _("Name"), + 'title' => _("Title"), + 'email;internet' => _("E-mail"), + 'url' => _("Web Page"), + 'org' => _("Organization / Department"), + 'adr' => _("Address"), + 'tel;work' => _("Work Phone"), + 'tel;home' => _("Home Phone"), + 'tel;cell' => _("Cellular Phone"), + 'tel;fax' => _("Fax"), + 'note' => _("Note")); + +echo '
              ' . + '
              ' . + _("Viewing a Business Card") . " - "; + +$msg_url = 'read_body.php?mailbox='.urlencode($mailbox). + '&startMessage='.urlencode($startMessage). + '&passed_id='.urlencode($passed_id); + +$msg_url = set_url_var($msg_url, 'ent_id', 0); + +echo ''. _("View message") . ''; + +echo '
              ' . + sprintf(_("vCard Version %s is not supported. Some information might not be converted correctly."), + htmlspecialchars($vcard_nice['version'])) . + "

              ' . + '' . "\n"; + +if (isset($vcard_safe['email;internet'])) { + $vcard_safe['email;internet'] = '' . $vcard_safe['email;internet'] . + ''; +} + +if (isset($vcard_safe['url'])) { + $vcard_safe['url'] = '' . + $vcard_safe['url'] . ''; +} + +foreach ($ShowValues as $k => $v) { + if (isset($vcard_safe[$k]) && $vcard_safe[$k]) { + echo "\n"; + } +} + +echo '
              $v:" . $vcard_safe[$k] . + "
              ' . + '
              ' . + '
              ' . + '' . + '' . + '' . + ' +
              ' . + '
              ' . + _("Add to address book") . + '
              ' . + '
              ' . + '' . + '' . + '' . + '' . + ' + +
              ' . _("Nickname") . ':' . + '' . + '
              ' . _("Additional info") . ':' . + ''; +?> +
              +' . + '' . + '' . + ''; + +?> +
              +
              +
              +'. + _("Download this as a file") . ''; +?> +
              + + +
              +
              + diff --git a/ehcp/webmail2/src/view_header.php b/ehcp/webmail2/src/view_header.php new file mode 100644 index 0000000..85832f3 --- /dev/null +++ b/ehcp/webmail2/src/view_header.php @@ -0,0 +1,142 @@ +' . + '' . "\n" . + '
              '. + _("Viewing Full Header") . ' - '. + '' ._("View message") . "
              \n"; + + echo_template_var($header, + array( + '\n".'
              ', + '', + '', + '', + '
              '."\n" + ) + ); + echo ''; +} + +/* get global vars */ +if ( sqgetGlobalVar('passed_id', $temp, SQ_GET) ) { + $passed_id = (int) $temp; +} +if ( sqgetGlobalVar('mailbox', $temp, SQ_GET) ) { + $mailbox = $temp; +} +if ( !sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_GET) ) { + $passed_ent_id = ''; +} +sqgetGlobalVar('key', $key, SQ_COOKIE); +sqgetGlobalVar('username', $username, SQ_SESSION); +sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); +sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); + +$imapConnection = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 0); +$mbx_response = sqimap_mailbox_select($imapConnection, $mailbox, false, false, true); + +$header = parse_viewheader($imapConnection,$passed_id, $passed_ent_id); +view_header($header, $mailbox, $color); +sqimap_logout($imapConnection); diff --git a/ehcp/webmail2/src/view_text.php b/ehcp/webmail2/src/view_text.php new file mode 100644 index 0000000..73f981d --- /dev/null +++ b/ehcp/webmail2/src/view_text.php @@ -0,0 +1,119 @@ +getEntity($ent_id); +if ($passed_ent_id) { + $message = &$message->getEntity($passed_ent_id); +} +$header = $message_ent->header; +$type0 = $header->type0; +$type1 = $header->type1; +$charset = $header->getParameter('charset'); +$encoding = strtolower($header->encoding); + +$msg_url = 'read_body.php?' . $QUERY_STRING; +$msg_url = set_url_var($msg_url, 'ent_id', 0); +$dwnld_url = '../src/download.php?' . $QUERY_STRING . '&absolute_dl=true'; +$unsafe_url = 'view_text.php?' . $QUERY_STRING; +$unsafe_url = set_url_var($unsafe_url, 'view_unsafe_images', 1); + +$body = mime_fetch_body($imapConnection, $passed_id, $ent_id); +$body = decodeBody($body, $encoding); + +if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && + function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { + if (mb_detect_encoding($body) != 'ASCII') { + $body = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $body); + } +} + +if ($type1 == 'html' || (isset($override_type1) && $override_type1 == 'html')) { + $ishtml = TRUE; + // html attachment with character set information + if (! empty($charset)) + $body = charset_decode($charset,$body,false,true); + $body = magicHTML( $body, $passed_id, $message, $mailbox); +} else { + $ishtml = FALSE; + translateText($body, $wrap_at, $charset); +} + +displayPageHeader($color, 'None'); +?> +
              +
              +' . _("View message") . ''; +?> +
              +' . _("View Unsafe Images") . ' | '; +} +echo '' . _("Download this as a file") . ''; +?> +

              + +
              +
              +
              + +
              + diff --git a/ehcp/webmail2/src/webmail.php b/ehcp/webmail2/src/webmail.php new file mode 100644 index 0000000..3083e18 --- /dev/null +++ b/ehcp/webmail2/src/webmail.php @@ -0,0 +1,179 @@ +\n". + "\n" . + "\n" . + "$org_title\n". + ""; + +$left_size = getPref($data_dir, $username, 'left_size'); +$location_of_bar = getPref($data_dir, $username, 'location_of_bar'); + +if (isset($languages[$squirrelmail_language]['DIR']) && + strtolower($languages[$squirrelmail_language]['DIR']) == 'rtl') { + $temp_location_of_bar = 'right'; +} else { + $temp_location_of_bar = 'left'; +} + +if ($location_of_bar == '') { + $location_of_bar = $temp_location_of_bar; +} +$temp_location_of_bar = ''; + +if ($left_size == "") { + if (isset($default_left_size)) { + $left_size = $default_left_size; + } + else { + $left_size = 200; + } +} + +if ($location_of_bar == 'right') { + $output .= "\n"; +} +else { + $output .= "\n"; +} + +/* + * There are three ways to call webmail.php + * 1. webmail.php + * - This just loads the default entry screen. + * 2. webmail.php?right_frame=right_main.php&sort=X&startMessage=X&mailbox=XXXX + * - This loads the frames starting at the given values. + * 3. webmail.php?right_frame=folders.php + * - Loads the frames with the Folder options in the right frame. + * + * This was done to create a pure HTML way of refreshing the folder list since + * we would like to use as little Javascript as possible. + * + * The test for // should catch any attempt to include off-site webpages into + * our frameset. + * + * Note that plugins are allowed to completely and freely override the URI + * used for the "right" (content) frame, and they do so by modifying the + * global variable $right_frame_url. + * + */ + +if (empty($right_frame) || (strpos(urldecode($right_frame), '//') !== false)) { + $right_frame = ''; +} + +if ( strpos($right_frame,'?') ) { + $right_frame_file = substr($right_frame,0,strpos($right_frame,'?')); +} else { + $right_frame_file = $right_frame; +} + +if (empty($right_frame_url)) { + switch($right_frame_file) { + case 'right_main.php': + $right_frame_url = "right_main.php?mailbox=".urlencode($mailbox) + . (!empty($sort)?"&sort=$sort":'') + . (!empty($startMessage)?"&startMessage=$startMessage":''); + break; + case 'options.php': + $right_frame_url = 'options.php'; + break; + case 'folders.php': + $right_frame_url = 'folders.php'; + break; + case 'compose.php': + $right_frame_url = 'compose.php?' . $mailtourl; + break; + case '': + $right_frame_url = 'right_main.php'; + break; + default: + $right_frame_url = urlencode($right_frame); + break; + } +} + +if ($location_of_bar == 'right') { + $output .= "\n" . + "\n"; +} +else { + $output .= "\n". + "\n"; +} +$ret = concat_hook_function('webmail_bottom', $output); +if($ret != '') { + $output = $ret; +} +echo $output; +?> + + diff --git a/ehcp/webmail2/themes/README.themes b/ehcp/webmail2/themes/README.themes new file mode 100644 index 0000000..5aa29ae --- /dev/null +++ b/ehcp/webmail2/themes/README.themes @@ -0,0 +1 @@ +For information on creating themes, please read the administrator's manual. diff --git a/ehcp/webmail2/themes/alien_glow.php b/ehcp/webmail2/themes/alien_glow.php new file mode 100644 index 0000000..24caa1c --- /dev/null +++ b/ehcp/webmail2/themes/alien_glow.php @@ -0,0 +1,27 @@ + + * @copyright 2002-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: alien_glow.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage themes + */ + +$color[0] = "#19881a"; // TitleBar +$color[1] = "#800000"; // +$color[2] = "#cc0000"; // Warning/Error Messages +$color[3] = "#000000"; // Left Bar Background +$color[4] = "#000000"; // Normal Background +$color[5] = "#0a6c11"; // Table Headers +$color[6] = "#4cc748"; // Text on left bar +#$color[7] = "#706c44"; // Links +$color[7] = "#ffffff"; // Normal text +$color[8] = "#61ff5c"; // Links +$color[9] = "#157316"; // Darker version of #0 +$color[10] = "#105611"; // Darker version of #9 +$color[11] = "#ffffff"; // Special Folders color diff --git a/ehcp/webmail2/themes/autumn.php b/ehcp/webmail2/themes/autumn.php new file mode 100644 index 0000000..3e27b7a --- /dev/null +++ b/ehcp/webmail2/themes/autumn.php @@ -0,0 +1,32 @@ + text') +$color[14] = '#ff0000'; // Color for text with more than one quote ('>> text') +$color[15] = '#ffffff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/autumn2.php b/ehcp/webmail2/themes/autumn2.php new file mode 100644 index 0000000..b7ce3a7 --- /dev/null +++ b/ehcp/webmail2/themes/autumn2.php @@ -0,0 +1,32 @@ + text') +$color[14] = '#ff0000'; // Color for text with more than one quote ('>> text') +$color[15] = '#ffffff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/black_bean_burrito_theme.php b/ehcp/webmail2/themes/black_bean_burrito_theme.php new file mode 100644 index 0000000..40a276c --- /dev/null +++ b/ehcp/webmail2/themes/black_bean_burrito_theme.php @@ -0,0 +1,32 @@ + + * Name: Blue on Blue + * Date: December 29, 2005 + * Theme Name: "Blue on Blue" + * @copyright 2005-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: blue_on_blue.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage themes + */ + +$color[0] = '#4c4b83'; // TitleBar +$color[1] = '#ffffff'; // Not Currently Used +$color[2] = '#ffffff'; // Warning/Error Messages +$color[3] = '#19193a'; // Left Bar Background +$color[4] = '#19193a'; // Normal Background +$color[5] = '#19193a'; // Table Headers +$color[6] = '#8a8aaf'; // Text on Left Bar +$color[7] = '#8a8aaf'; // Normal text +$color[8] = '#9097bc'; // Links +$color[9] = '#2d2d3b'; // Darker Version of #0 +$color[10] = '#16161d'; // Darker Version of #9 +$color[11] = '#ffffff'; // Special Folders color +$color[12] = '#1d1d26'; // Alternate List Item Color (alternates with #4) +$color[13] = '#8a8aaf'; // Single-Quoted text +$color[14] = '#8a8aaf'; // Two or more quotes +$color[15] = '#ffffff'; // Unselectable Folders diff --git a/ehcp/webmail2/themes/bluesnews_theme.php b/ehcp/webmail2/themes/bluesnews_theme.php new file mode 100644 index 0000000..c6221e5 --- /dev/null +++ b/ehcp/webmail2/themes/bluesnews_theme.php @@ -0,0 +1,32 @@ + text') +$color[14] = '#666666'; // Color for text with more than one quote ('>> text') +$color[15] = '#ffffff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/classic_blue2.php b/ehcp/webmail2/themes/classic_blue2.php new file mode 100644 index 0000000..3e0c3ef --- /dev/null +++ b/ehcp/webmail2/themes/classic_blue2.php @@ -0,0 +1,32 @@ + text') +$color[14] = '#666666'; // Color for text with more than one quote ('>> text') +$color[15] = '#ffffff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/css/comic-sans-08.css b/ehcp/webmail2/themes/css/comic-sans-08.css new file mode 100644 index 0000000..bd4d7d4 --- /dev/null +++ b/ehcp/webmail2/themes/css/comic-sans-08.css @@ -0,0 +1,13 @@ +body, td, th, dd, dt, h1, h2, h3, h4, h5, h6, p, ol, ul, li { + font-family: comic sans ms,sans-serif; +} +body, small { + font-size: 6pt; +} +td, th { + font-size: 8pt; +} +textarea, pre { + font-family: monospace; + font-size: 7pt; +} diff --git a/ehcp/webmail2/themes/css/comic-sans-10.css b/ehcp/webmail2/themes/css/comic-sans-10.css new file mode 100644 index 0000000..3975e3e --- /dev/null +++ b/ehcp/webmail2/themes/css/comic-sans-10.css @@ -0,0 +1,13 @@ +body, td, th, dd, dt, h1, h2, h3, h4, h5, h6, p, ol, ul, li { + font-family: comic sans ms,sans-serif; +} +body, small { + font-size: 8pt; +} +td, th { + font-size: 10pt; +} +textarea, pre { + font-family: monospace; + font-size: 9pt; +} diff --git a/ehcp/webmail2/themes/css/comic-sans-12.css b/ehcp/webmail2/themes/css/comic-sans-12.css new file mode 100644 index 0000000..57e5dfa --- /dev/null +++ b/ehcp/webmail2/themes/css/comic-sans-12.css @@ -0,0 +1,13 @@ +body, td, th, dd, dt, h1, h2, h3, h4, h5, h6, p, ol, ul, li { + font-family: comic sans ms,sans-serif; +} +body, small { + font-size: 10pt; +} +td, th { + font-size: 12pt; +} +textarea, pre { + font-family: monospace; + font-size: 11pt; +} diff --git a/ehcp/webmail2/themes/css/index.php b/ehcp/webmail2/themes/css/index.php new file mode 100644 index 0000000..4344469 --- /dev/null +++ b/ehcp/webmail2/themes/css/index.php @@ -0,0 +1,17 @@ +' . "\n"; + } + +?> + 0) { + // Some background colors + $r = mt_rand(24,64); + $unique = true; + foreach ($used as $col) { + if (abs($r - $col) < $targetDistance) + $unique = false; + } + if ($unique) { + $i = array_shift($Left); + $color[$i] = sprintf('#%02X%02X%02X',$r,$r, $r); + $used[] = $r; + $targetDistance = $BackgroundTargetDistance; + } else { + $targetDistance -= $BackgroundAdjust; + } +} + +// Set the error color to some shade of red +$r = mt_rand(196, 255); +$g = mt_rand(144, ($r * .8)); +$color[2] = sprintf('#%02X%02X%02X', $r, $g, $g); +$used = array(array($r, $g, $g)); + +// Set normal text colors +$cmin = 196; +$cmax = 255; +foreach (array(6, 8) as $i) { + /** generate random color **/ + $r = mt_rand($cmin,$cmax); + $g = mt_rand($cmin,$cmax); + $b = mt_rand($cmin,$cmax); + $color[$i] = sprintf('#%02X%02X%02X',$r,$g,$b); + $used[] = array($r, $g, $b); +} + +$Left = array(1, 7, 11, 13, 14, 15); +$targetDistance = $TextTargetDistance; +while (count($Left) > 0) { + // Text colors -- Try to keep the colors distinct + $cmin = 196; + $cmax = 255; + + /** generate random color **/ + $r = mt_rand($cmin,$cmax); + $g = mt_rand($cmin,$cmax); + $b = mt_rand($cmin,$cmax); + + if (IsUnique($targetDistance, $r, $g, $b, $used)) { + $i = array_shift($Left); + $color[$i] = sprintf('#%02X%02X%02X',$r,$g,$b); + $used[] = array($r, $g, $b); + $targetDistance = $TextTargetDistance; + } else { + $targetDistance *= $TextAdjust; + } +} diff --git a/ehcp/webmail2/themes/deepocean2_theme.php b/ehcp/webmail2/themes/deepocean2_theme.php new file mode 100644 index 0000000..21d9eab --- /dev/null +++ b/ehcp/webmail2/themes/deepocean2_theme.php @@ -0,0 +1,31 @@ + 1 quote + $color[14] = '#ff0000'; // (red) Color for quoted text -- >> 2 or more + $color[15] = '#002266'; // (dark blue) Unselectable folders + $color[16] = '#ff9933'; // (orange) Highlight color diff --git a/ehcp/webmail2/themes/dompie_theme.php b/ehcp/webmail2/themes/dompie_theme.php new file mode 100644 index 0000000..98b49e1 --- /dev/null +++ b/ehcp/webmail2/themes/dompie_theme.php @@ -0,0 +1,31 @@ + 1 quote + $color[14] = '#000000'; // (black) Color for quoted text -- >> 2 or more + $color[15] = '#000000'; // (black) Unselectable folders diff --git a/ehcp/webmail2/themes/monostochastic.php b/ehcp/webmail2/themes/monostochastic.php new file mode 100644 index 0000000..480c53c --- /dev/null +++ b/ehcp/webmail2/themes/monostochastic.php @@ -0,0 +1,52 @@ + 1 quote +$color[14] = '#00C060'; // (green) Color for quoted text -- >> 2 or more +$color[15] = '#002266'; // (dark blue) Unselectable folders diff --git a/ehcp/webmail2/themes/penguin.php b/ehcp/webmail2/themes/penguin.php new file mode 100644 index 0000000..0812c61 --- /dev/null +++ b/ehcp/webmail2/themes/penguin.php @@ -0,0 +1,33 @@ + +$color[2] = '#ff0000'; // f 2: Error messages, usually red +$color[3] = '#000000'; // b 3: Left folder list background color +$color[4] = '#ffffff'; // b 4: Normal background color +$color[5] = '#ffcc00'; // b 5: Header of the message index [From, Date, Subject] +$color[6] = '#ffffff'; // f 6: Normal text on the left folder list +$color[7] = '#222222'; // f 7: Links in the right frame +$color[8] = '#000000'; // f 8: Normal text [usually black] +$color[9] = '#ffcc00'; // b 9: Darker version of #0 +$color[10] = '#ff00cc'; // b 10: Darker version of #9 +$color[11] = '#ffcc00'; // f 11: Special folders color [Inbox, Trash, Sent] +$color[12] = '#eeeeee'; // b 12: Alternate color for message list [alters between 4 and this one] +$color[13] = '#800000'; // f 13: Color for single-quoted text ('> text') when reading (default: #800000) +$color[14] = '#ff0000'; // f 14: Color for text with more than one quote (default: #ff0000) +$color[15] = '#ffdd11'; // f 15: Non-selectable folders in the left frame (defaults to $color[6]) diff --git a/ehcp/webmail2/themes/plain_blue_theme.php b/ehcp/webmail2/themes/plain_blue_theme.php new file mode 100644 index 0000000..3ac83c0 --- /dev/null +++ b/ehcp/webmail2/themes/plain_blue_theme.php @@ -0,0 +1,29 @@ + text') +$color[14] = '#666666'; // Color for text with more than one quote ('>> text') +$color[15] = '#f5f9ff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/purple_theme.php b/ehcp/webmail2/themes/purple_theme.php new file mode 100644 index 0000000..8fafc16 --- /dev/null +++ b/ehcp/webmail2/themes/purple_theme.php @@ -0,0 +1,29 @@ + + * @copyright 2000-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: servery_theme.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage themes + */ + +global $color; +$color[0] = '#f1eee3'; // (light gray) TitleBar +$color[1] = '#800000'; // (red) +$color[2] = '#cc0000'; // (light red) Warning/Error Messages +$color[3] = '#7d6f3f'; // (green-blue) Left Bar Background +$color[4] = '#ffffff'; // (white) Normal Background +$color[5] = '#c7b98b'; // (light yellow) Table Headers +$color[6] = '#000000'; // (black) Text on left bar +$color[7] = '#434031'; // (blue) Links +$color[8] = '#000000'; // (black) Normal text +$color[9] = '#c7b98b'; // (mid-gray) Darker version of #0 +$color[10] = '#f1eee3'; // (dark gray) Darker version of #9 +$color[11] = '#770000'; // (dark red) Special Folders color +$color[15] = '#c7b98b'; // (mid-gray) Unselectable folders diff --git a/ehcp/webmail2/themes/shades_of_grey.php b/ehcp/webmail2/themes/shades_of_grey.php new file mode 100644 index 0000000..87b91a6 --- /dev/null +++ b/ehcp/webmail2/themes/shades_of_grey.php @@ -0,0 +1,40 @@ + + * @copyright 2005 Vicky Pyne + * @copyright 2005-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: simple_green2.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage themes + */ + +global $color; +$color[0] = '#DCDCDC'; // (light gray) TitleBar +$color[1] = '#800000'; // (red) +$color[2] = '#CC0000'; // (light red) Warning/Error Messages +$color[3] = '#669966'; // (grey-green) Left Bar Background +$color[4] = '#FFFFFF'; // (white) Normal Background +$color[5] = '#99CC99'; // (light-green) Table Headers +$color[6] = '#000000'; // (black) Text on left bar +$color[7] = '#006633'; // (green) Links +$color[8] = '#000000'; // (black) Normal text +$color[9] = '#ABABAB'; // (mid-gray) Darker version of #0 +$color[10] = '#666666'; // (dark gray) Darker version of #9 +$color[11] = '#003300'; // (darker green) Special Folders color +$color[12] = '#EDEDED'; // (light gray) Alternate color for message list +$color[13] = '#6666CC'; // (dull blue) Color for quoted text -- > 1 quote +$color[14] = '#333399'; // (dark blue) Color for quoted text -- >> 2 or more +$color[15] = '#669966'; // (grey-green) Unselectable folders diff --git a/ehcp/webmail2/themes/simple_green_theme.php b/ehcp/webmail2/themes/simple_green_theme.php new file mode 100644 index 0000000..f75bd97 --- /dev/null +++ b/ehcp/webmail2/themes/simple_green_theme.php @@ -0,0 +1,31 @@ + Quoted Message Text +$color[14] = "#FF0000"; // (rec) >> Multi-Quoted Message Text (2 >'s or more) +$color[15] = "#002266"; // (dark blue NOTE: not tested) L. Frame: unselectable folders diff --git a/ehcp/webmail2/themes/simple_purple.php b/ehcp/webmail2/themes/simple_purple.php new file mode 100644 index 0000000..a2d5d80 --- /dev/null +++ b/ehcp/webmail2/themes/simple_purple.php @@ -0,0 +1,35 @@ + + * @copyright 2005 Vicky Pyne + * @copyright 2005-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id: simple_purple.php 14084 2011-01-06 02:44:03Z pdontthink $ + * @package squirrelmail + * @subpackage themes + */ + +global $color; +$color[0] = '#DCDCDC'; // (light gray) TitleBar +$color[1] = '#800000'; // (red) +$color[2] = '#CC0000'; // (light red) Warning/Error Messages +$color[3] = '#B6A7D5'; // (pale-purple) Left Bar Background +$color[4] = '#FFFFFF'; // (white) Normal Background +$color[5] = '#877C9F'; // (greyish-purple) Table Headers +$color[6] = '#000000'; // (black) Text on left bar +$color[7] = '#663399'; // (purple) Links +$color[8] = '#000000'; // (black) Normal text +$color[9] = '#ABABAB'; // (mid-gray) Darker version of #0 +$color[10] = '#666666'; // (dark gray) Darker version of #9 +$color[11] = '#330066'; // (darker purple) Special Folders color +$color[12] = '#EDEDED'; // (light gray) Alternate color for message list +$color[13] = '#6666CC'; // (dull blue) Color for quoted text -- > 1 quote +$color[14] = '#333399'; // (dark blue) Color for quoted text -- >> 2 or more +$color[15] = '#9966CC'; // (grey-purple) Unselectable folders diff --git a/ehcp/webmail2/themes/slashdot_theme.php b/ehcp/webmail2/themes/slashdot_theme.php new file mode 100644 index 0000000..d8890b3 --- /dev/null +++ b/ehcp/webmail2/themes/slashdot_theme.php @@ -0,0 +1,31 @@ + text') +$color[14] = '#4d657d'; // Color for text with more than one quote ('>> text') +$color[15] = '#f6faff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/turquoise.php b/ehcp/webmail2/themes/turquoise.php new file mode 100644 index 0000000..ae1b1fc --- /dev/null +++ b/ehcp/webmail2/themes/turquoise.php @@ -0,0 +1,32 @@ + text') +$color[14] = '#666666'; // Color for text with more than one quote ('>> text') +$color[15] = '#ffffff'; // Non-selectable folders in the left frame (defaults to #6) diff --git a/ehcp/webmail2/themes/wood_theme.php b/ehcp/webmail2/themes/wood_theme.php new file mode 100644 index 0000000..1e40370 --- /dev/null +++ b/ehcp/webmail2/themes/wood_theme.php @@ -0,0 +1,31 @@ + + + + + + + + + + +Easy Hosting Control Panel for Ubuntu and alikes... + + + +

              Easy Hosting Control Panel for Ubuntu and alikes..

              + +This is default ehcp-apache index file.
              +click here for EHCP CONTROL PANEL HOME on your server

              +if you see this page instead of what you expect, you probably did not +setup your domain on this server. Please log into your ehcp panel and +setup/add your domain..or ask your admin/provider to do so...
              + +www.ehcp.net Home
              +Additional info about ehcp
              +Troubleshoot your ehcp installation..(not fully implemented yet..)
              +Support or donate ehcp You may support other than money too..
              +ehcp Demo - Download ehcp
              + + +
              + + + + + diff --git a/ehcp/wwwindex.en.html b/ehcp/wwwindex.en.html new file mode 100755 index 0000000..3e8d843 --- /dev/null +++ b/ehcp/wwwindex.en.html @@ -0,0 +1,57 @@ + + + + +EHCP Default Web Site Page + +
              +
              + + + +
              + +
              +

              EHCP Force Default Web Site Page

              +


              + If you feel that you have reached this page in error, please contact the server administrator.
              +

              Click here for the control panel on your server!

              +
              +
              +
              +

              If you are the web site owner, it is possible you have reached this page because:

              +
                +
              • The IP address of the server has changed.
              • +
              • There is an error in the server configuration.
              • +
              • The requested site may have moved to a different server.
              • +
              • Your account has been blocked.
              • +
              +

              If you are the owner of this website and were not expecting to see this page, please contact your hosting provider.

              +
              +
              +
              +

              +EHCP Force Edition Project Website
              +

              +
              + + + diff --git a/ehcp/wwwindex.html b/ehcp/wwwindex.html new file mode 100755 index 0000000..3e8d843 --- /dev/null +++ b/ehcp/wwwindex.html @@ -0,0 +1,57 @@ + + + + +EHCP Default Web Site Page + +
              +
              + + + +
              + +
              +

              EHCP Force Default Web Site Page

              +


              + If you feel that you have reached this page in error, please contact the server administrator.
              +

              Click here for the control panel on your server!

              +
              +
              +
              +

              If you are the web site owner, it is possible you have reached this page because:

              +
                +
              • The IP address of the server has changed.
              • +
              • There is an error in the server configuration.
              • +
              • The requested site may have moved to a different server.
              • +
              • Your account has been blocked.
              • +
              +

              If you are the owner of this website and were not expecting to see this page, please contact your hosting provider.

              +
              +
              +
              +

              +EHCP Force Edition Project Website
              +

              +
              + + + diff --git a/ehcp/wwwindex.it.html b/ehcp/wwwindex.it.html new file mode 100755 index 0000000..3e8d843 --- /dev/null +++ b/ehcp/wwwindex.it.html @@ -0,0 +1,57 @@ + + + + +EHCP Default Web Site Page + +
              +
              + + + +
              + +
              +

              EHCP Force Default Web Site Page

              +


              + If you feel that you have reached this page in error, please contact the server administrator.
              +

              Click here for the control panel on your server!

              +
              +
              +
              +

              If you are the web site owner, it is possible you have reached this page because:

              +
                +
              • The IP address of the server has changed.
              • +
              • There is an error in the server configuration.
              • +
              • The requested site may have moved to a different server.
              • +
              • Your account has been blocked.
              • +
              +

              If you are the owner of this website and were not expecting to see this page, please contact your hosting provider.

              +
              +
              +
              +

              +EHCP Force Edition Project Website
              +

              +
              + + + diff --git a/ehcp/z7/install_files/.htaccess b/ehcp/z7/install_files/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/ehcp/z7/install_files/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/ehcp/z7/install_files/domain_index.php b/ehcp/z7/install_files/domain_index.php new file mode 100644 index 0000000..f28d441 --- /dev/null +++ b/ehcp/z7/install_files/domain_index.php @@ -0,0 +1,3 @@ +